从零做一个能对话的大模型应用,最短路径是 1 个 API Key、1 台装好 Python 的电脑、40 行代码、1 个网页界面,2 小时内能跑通第一个版本。下面按准备、动手、参数、报错、验证 5 段写,每步都注明在哪个文件里改哪一行。
我带过 6 个刚转行的同学走这一遍,卡在环境上的有 4 个,卡在代码上的只有 1 个。环境占的时间比写代码多,所以第 1 段值得慢一点做。
第 2 条建议先选 1 家跑通再考虑换。同时申请 3 家平台会拿到 3 套文档、3 种报错码,第一周基本都在对照文档,做不出东西。
同一台电脑上跑 2 个项目,库版本常常打架。A 项目要 openai 0.28,B 项目要 1.x,装在系统环境里只能留 1 个版本,另一个项目立刻报错。虚拟环境给每个项目 1 套独立的库,删掉文件夹就等于清理干净。
建环境只要 1 条命令,成本 3 秒。我以前图快直接在系统里装,1 年后系统 Python 里堆了 40 多个包,升级时崩了 1 次,重装花了 2 小时。
提示词写进 messages 的第 1 条,role 填 system。这段内容每次请求都会重复发送,所以别写太长,控制在 200 字内够用,写 1000 字等于每次多花 1 份输入 token。
我自己的模板固定 3 段:身份 1 句、输出格式 1 句、禁止事项 1 句。比如做客服场景时,身份写「你是售后客服」,格式写「回答不超过 3 句」,禁止事项写「不承诺赔付金额」。3 段都写具体,比写一堆形容词有用。
对话轮数不加限制,第 30 轮之后就会顶到上下文上限,报错或答案开始丢前面的信息。处理办法有 3 种:按轮数截断,只保留最近 10 轮;按 token 数截断,超过 3000 就删最早 2 条;把早期对话压缩成 1 段摘要塞进 system。
我做内部工具时用第 1 种,成本可控、行为稳定。对外服务用第 3 种,用户感觉不到对话被剪过,代价是多 1 次总结调用。

| 参数 | 第一个版本填什么 | 什么时候改 |
|---|---|---|
| model | 平台文档里的对话模型名 | 需要长思考任务时换成推理型号 |
| temperature | 0.3 | 写文案调到 0.8,抽取数据压到 0 |
| max_tokens | 1024 | 答案被截断时加到 2048 或 4096 |
| stream | True | 做批量处理时关掉,按整段解析更省事 |
| timeout | 60 秒 | 处理长文档时提到 180 秒 |
第 5 行是新手最容易漏的。默认超时偏短,1 次生成 2000 字要 40 秒以上,客户端先断开,服务端还在跑,账单照扣。我在第 1 个项目里就这样白花了一笔。
第一个版本不用追求参数最优。默认值跑出来的效果已经有 7 分,剩下 3 分靠提示词和后处理补,比反复试参数省时间。我通常让同学先跑 20 条真实问题,把不满意的 5 条挑出来,再针对性调 1 到 2 个参数。
参数不要一次改 5 个。每次只改 1 个,记下改动前后的输出差异,3 次之后你就知道这套模型对哪个旋钮最敏感。
ModuleNotFoundError 说明库没装进当前环境,多半是虚拟环境没激活。命令行前面没看到 (venv) 这个前缀,就先激活再装 1 次。
401 与 403 都指向 key,检查 3 处:.env 文件里有没有引号包住、key 前后有没有空格、代码里读的环境变量名是否一致。名字拼错时读到的值是空字符串,报的也是 401。
429 是频率限制,处理方式是加等待:第 1 次等 5 秒,第 2 次等 15 秒,第 3 次直接跳出循环并记日志。批量任务里我把并发压到 3,全天跑下来没再撞过墙。
ConnectionError 出现在公司网络里,先确认能不能打开平台官网。打不开就走代理,把代理地址写进环境变量 HTTP_PROXY,代码不用改。
输出乱码或返回半句,查 2 个地方:max_tokens 是否太小、messages 里是否有空内容。空内容一般在历史截断时产生,删到只剩最后 1 条 user 消息也能复现问题。
报错信息里出现 2 个不同平台的域名,说明环境变量里还留着上 1 个项目的配置。检查 3 个位置:系统环境变量、项目里的 .env、终端当前会话,逐个清掉旧值再试。
界面上点了没反应,看命令行窗口。gradio 的报错打在终端里,不弹到网页上,很多人以为是界面坏了,实际是后端抛异常。

第 3 条很多人跳过,上线后第一次 401 就看到一屏英文堆栈,用户直接卸载。我给所有对外工具都加 1 层错误映射,把 5 类常见错误翻译成 1 句中文提示。
验证完本地版本,再做 3 个改动就能给别人用:把 key 换成服务端环境变量、加 1 个每日调用上限、把对话记录写进 1 个文件。3 件事加起来半天,缺了任何 1 件都不适合放到公网。

第 1 个改动是给请求加超时与重试。重试 3 次封顶,间隔按 3 秒、8 秒、20 秒递增,这样偶发的网络抖动不会直接变成用户看到的失败。
第 2 个改动是把提示词挪到配置文件。改一次文案不用动代码,非技术同事也能维护,我现在的项目里提示词都放在 1 个 prompts 目录,按场景分 5 个文件。
1 个场景 1 个 txt,文件名用业务名,比如 refund.txt、faq.txt,别用 prompt1 这类编号。文件开头写 1 行注释说明用途,第 2 行开始才是正文,读文件时跳过第 1 行即可。
我把这套结构用在了 5 个项目上,改动最频繁的那 1 个文件,1 个月改了 23 次,全部由运营同事自己动手,没让我改过 1 行代码。
第 3 个改动是留 1 个开关,能在不重启服务的情况下切换到备用平台。国内几家平台接口兼容,改 2 个变量就能切,遇到某家限流或故障时,30 秒内能切走。
大模型应用开发的难点集中在 3 处:环境、上下文管理、错误处理。代码本身 40 行就够,剩下的时间都花在这 3 处,把它们的边界想清楚,第二个应用能省一半时间。
本文信息核对时间:2026-11