1. 先搞清楚GPT-3.5 与 GPT-4 到底差在哪把模型当成员工3.5 是“刚毕业的高材生”4 是“带十年经验的专家”。上下文窗口3.5-turbo 最大 16 kGPT-4 直接干到 128 k长文档总结不再“断片”。多模态3.5 只能读文本GPT-4 能看图、听音频后续还会支持视频帧输入。指令跟随4 对复杂格式、JSON 字段、函数签名抓得准幻觉率下降约 30 %。速率4 更贵也更慢价格是 3.5 的 1530 倍延迟高 1.52 倍。一句话总结预算紧 高频问答 → 3.5精度高 长链推理 → 4。2. 五分钟跑通 APIPython Node.js 双版本下面所有代码均基于 2024-05 发布的gpt-3.5-turbo-0125与gpt-4-turbo-2024-04-09key 放在环境变量OPENAI_API_KEY国内网络记得配代理。2.1 基础文本补全含 temperature 说明Python 版import openai, os openai.api_key os.getenv(OPENAI_API_KEY) async def complete(prompt: str, model: str gpt-3.5-turbo, temp: float 0.7): temp: 0 保守可重复1 创意放飞0.3~0.8 常用区间 try: rsp await openai.ChatCompletion.acreate( modelmodel, messages[{role: user, content: prompt}], temperaturetemp, max_tokens300 ) return rsp.choices[0].message.content.strip() except Exception as e: print(调用失败:, e) raise if __name__ __main__: import asyncio print(asyncio.run(complete(用三句话介绍量子计算)))Node.js 版import code from openai; const openai new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); async function complete(prompt, model gpt-3.5-turbo, temp 0.7) try { const rsp await openai.chat.completions.create({ model, messages: [{ role: user, content: prompt }], temperature: temp, max_tokens: 300 }); return rsp.choices[0].message.content; } catch (err) { console.error(调用失败:, err); throw err; } complete(用三句话介绍量子计算).then(console.log);2.2 流式响应边读边渲染降低首字等待Python 版async def stream_complete(prompt: str, model: str gpt-3.5-turbo): reply async for chunk in await openai.ChatCompletion.acreate( modelmodel, messages[{role: user, content: prompt}], streamTrue ): delta chunk.choices[0].delta.get(content, ) reply delta print(delta, end, flushTrue) # 实时打印 return replyNode.js 版async function streamComplete(prompt, model gpt-3.5-turbo) { const stream await openai.chat.completions.create({ model, messages: [{ role: user, content: prompt }], stream: true }); let reply ; for await (const chunk of stream) { const delta chunk.choices[0]?.delta?.content || ; reply delta; process.stdout.write(delta); // 实时渲染 } return reply; }2.3 函数调用让模型“动手”而不是“动嘴”假设我们要让 AI 查询天气并返回结构化数据。Python 示例functions [{ name: get_weather, description: 获取城市天气, parameters: { type: object, properties: { city: {type: string, description: 城市名} }, required: [city] } }] async def chat_with_function(city: str): messages [{role: user, content: f{city}今天天气如何}] rsp await openai.ChatCompletion.acreate( modelgpt-3.5-turbo, messagesmessages, functionsfunctions, function_callauto ) if rsp.choices[0].finish_reason function_call: func rsp.choices[0].message.function_call if func.name get_weather: args json.loads(func.arguments) weather f{args[city]} 晴 27°C # 伪实现 messages.append({ role: function, name: get_weather, content: weather }) second await openai.ChatCompletion.acreate( modelgpt-3.5-turbo, messagesmessages ) return second.choices[0].message.content return rsp.choices[0].message.contentNode 写法同理把functions数组塞进参数即可。3. 性能优化三板斧3.1 提示工程模板化把系统提示拆成“角色 任务 格式 样例”四段用 YAML 或 JSON 模板维护线上热更新无需改代码。角色你是一名资深运维工程师任务根据用户报错给出排查清单格式返回 Markdown 清单每条 20 字以内样例见下方 {example}无则留空模板渲染后 tokens 固定方便预估算价。3.2 对话状态管理滑动窗口只保留最近 4 轮超长早期内容用 LLM 自动摘要压缩。用户级缓存Redis 存user:last_summary重启服务可恢复。异步落库把完整对话异步写入 MongoDB读时按需回放。3.3 错误重试与回退from tenacity import retry, stop_after_attempt, wait_random_exponential retry(stopstop_after_attempt(3), waitwait_random_exponential(multiplier1, max10)) async def robust_complete(messages, modelgpt-3.5-turbo): try: return await openai.ChatCompletion.acreate(modelmodel, messagesmessages) except openai.error.RateLimitError: # 触发重试 raise except openai.error.InvalidAuthenticationError: # 不回退直接抛 raise若三次仍失败降级到本地 7B 小模型兜底保证用户不断线。4. 生产环境 checklist4.1 成本监控每轮请求回包里带usage.prompt_tokenscompletion_tokens写进 Prometheusfrom prometheus_client import Counter token_counter Counter(openai_tokens, 累计消耗, [model, stage]) token_counter.labels(model, prompt).inc(usage.prompt_tokens)Grafana 面板按model分组一眼看穿哪个功能“烧钱”。4.2 敏感内容过滤先走本地轻量审核模型如 DFA 正则再调 OpenAI Moderation API 双保险。命中策略高危直接拒绝前端 toast 提示。中危掩码打 ***后段继续。低危放行并记录审计日志。4.3 速率限制规避账号池把 10 个 key 放轮询池单 key 限流 60 % 触发即切换。请求排队Celery Redis 实现令牌桶每秒匀速消费突发缓存。边缘缓存对“热门问题”做 60 s CDN 缓存降低重复调用。5. 可运行完整片段Python 异步版import os, openai, asyncio, json, tenacity from prometheus_client import Counter, start_http_server openai.api_key os.getenv(OPENAI_API_KEY) token_counter Counter(openai_tokens, , [model, stage]) tenacity.retry(stoptenacity.stop_after_attempt(3), waittenacity.wait_random_exponential(max10)) async def chat(user_id: str, prompt: str, model: str gpt-3.5-turbo): messages [{role: user, content: prompt}] rsp await openai.ChatCompletion.acreate(modelmodel, messagesmessages) # 埋点 usage rsp.usage token_counter.labels(model, prompt).inc(usage.prompt_tokens) token_counter.labels(model, completion).inc(usage.completion_tokens) return rsp.choices[0].message.content async def main(): start_http_server(8000) # Prometheus 拉取端口 answer await chat(u123, 如何排查 Pod 一直 Pending) print(answer) if __namename__ __main__: asyncio.run(main())把这段代码丢进容器挂载监控大盘你就拥有了一个可灰度、可观测、可回退的“准生产”ChatGPT 服务。6. 留两个思考题在你的场景里模型精度与响应速度如何权衡是动态降级还是让用户自选“极速/精准”模式对话历史如果全放本地缓存冷启动时如何快速恢复到上一轮状态又不泄露用户隐私期待在评论区看到你的奇思妙想。玩腻了文字对话不妨换个赛道试试语音实时互动。我刚在 从0打造个人豆包实时通话AI 动手实验里用火山引擎的豆包语音系列模型花了不到一小时就搭出一个能“听—想—说”闭环的 Web 通话应用。步骤全是拖拽改配置对前端友好后端也只要写几行 WebSocket 转发。小白跟着走一遍就能把 AI 的“耳朵、大脑、嘴巴”串起来亲测比纯文字聊天更有沉浸感。如果你正好在找实时语音场景落地方案去戳链接体验下回来一起交流踩坑心得。