大模型应用开发的最小闭环是 7 步:定 1 个具体场景、备 20 条测试题、装 3 个依赖、跑通 20 行调用、把提示词拆成 4 块、加一层资料检索、部署到 1 台机器。全程 1 到 2 周,代码量 300 行上下,一个人能做。
去年 11 月我接过一个设备维保的活,客户有 200 页操作手册,想让师傅在现场用手机问「这个报警码怎么处理」。做完这 7 步,测试集 20 题答对 17 题,单次响应 4 秒,硬件是一台 2 核 4G 的云服务器。
这 4 件事里,第 1 件和第 2 件决定后面返工几次。
python -m venv .venv 之后激活,再 pip install openai fastapi uvicorn,3 个包,装完 1 分钟内能导入。LLM_KEY。密钥写进代码提交到仓库,是新手最常见的 1 个事故。
uvicorn main:app 起在 8000 端口,前面挂 nginx 转 443。1 台 2 核 4G 的机器能撑每天 2000 次调用。第 6 步的切块长度我调过 3 轮。400 字切太碎,答案常常缺上下文;1000 字切太大,1 次塞 3 块就是 3000 字,成本翻倍。600 字加 80 字重叠,在 200 页手册上试下来最稳。
角色 1 句,写清身份和说话对象:「你是设备维保工程师,回答的对象是车间操作工,用短句,不用术语」。身份定得太宽(写成「你是助手」)等于没写。
任务 1 段,写清输入是什么、输出要几段、要不要举例子。禁区 1 列,3 到 5 条,每条对应 1 类错答,比如「资料里没有的参数直接说没有」「不给操作建议以外的安全判断」。格式 1 段,写「答案控制在 150 字内,先给结论,再给 2 条依据」。
这 4 块的顺序别换。我第一次把格式写在最前面,模型每次都先摆格式再想内容,答案前两句全是废话。
下面 5 个字段决定输出的样子,按调试顺序排。
| 字段 | 填什么 | 填错的后果 |
|---|---|---|
| system | 角色 + 禁区,80 到 150 字 | 写太长(超 500 字)会挤占用户问题,答案跑偏 |
| temperature | 问答类 0.2 到 0.4,创意类 0.9 以上 | 问答填 1.2,同一问题 3 次回答给 3 个说法 |
| max_tokens | 按答案长度定,摘要 300,讲解 800 | 填成输入长度,1 次对话多花 3 倍钱 |
| top_k(检索) | 3 到 5 块 | 填 10 块,提示词过长,模型抓不住重点 |
| timeout | 60 秒,长文生成填 120 | 默认值偏短,长答案被掐断,前端报错 |
temperature 是第 1 个该动的参数。手册问答这类任务,0.3 和 1.0 的差别不在文采,在事实一致性:0.3 时 20 题里 3 题两次回答不一致,1.0 时是 9 题。
top_k 填几,看资料的密度。手册类资料一段话讲 1 件事,填 3 就够;法规类资料一条要跨 3 节才完整,填 5 到 6。填完用 20 条测试题跑 1 遍,把 top_k 从 3 调到 6,答对数如果没有变,就退回 3,多出来的 3 块纯属浪费钱。
调试期 90% 的报错落在这 5 类里,按顺序对一遍。
open(..., encoding="utf-8") 加上就好。ps aux | grep uvicorn 查一下;进程在就查 nginx 的转发端口跟 uvicorn 起的端口是否一致,8000 对 8080 这种错位,日志里只有 1 行 upstream 超时。3 条验收线,全过才算收工。
上线第 1 天只看 3 个数:调用次数、平均 token、报错条数。调用次数低于 20 次,说明入口藏得深,去问 5 个测试用户从哪进;平均 token 突然翻倍,多半有人贴了长文档进来,加 1 个输入长度上限 3000 字;报错条数超过 10 条,先把日志按状态码分组看一眼,别急着重启服务。
第 1 版能跑就该停手,先让 5 个真实用户用 1 周。我踩过的坑是:功能加到第 9 个,用户只用第 1 个,剩下的都在给服务器加负担。
第 2 轮改动的优先级按这个顺序:错题里出现 3 次以上的题型 → 检索召回率低的章节 → 界面上的 1 处卡点。改动每 1 项都重跑 20 条测试题,记下通过数,别凭感觉说变好了。
有人问我为什么不直接上框架。300 行能跑通的东西,套 1 个框架要读 2000 行文档,改 1 个参数要翻 3 层配置。等你的测试题涨到 200 条、场景涨到 4 个再考虑框架,那时候省下的重复活才抵得上学习成本。
第 1 处是检索块太大。有人直接把 200 页手册塞进提示词,1 次 9 万 token,既贵又答不准,模型会挑最像的那段抄。切成 600 字再用,同一批 20 题的正确数从 11 涨到 17。
第 2 处是禁区没写。不写「不知道就说不知道」,模型遇到手册里没有的型号,会按相似型号推一个答案出来,师傅照着操作就出事。这类答案在测试里看着通顺,最难被发现。
第 3 处是前端没做超时。后端 60 秒超时,前端默认 30 秒就断开,用户看到的是空白页,日志里却记着成功。两边时间写同一个数,或者在页面上加 1 行「正在生成,请稍等」。
本文信息核对时间:2026-11