上周有个朋友问我:「你平时用 Python 调 GPT-4 的 API,到底怎么弄的?网上教程一堆,但跑起来全报错。」
说实话,我第一次调 GPT-4 API 的时候也是这种状态——官方文档写得挺好,但实际跑的时候各种幺蛾子。Key 的权限不对、请求超时、返回格式解析出错……折腾了大半天才跑通第一个请求。
这篇文章就把我的完整流程和踩坑经历写出来,保证你复制代码就能跑。
整套流程如果不踩坑,半小时内搞定。但你大概率会踩坑,所以我把坑也写了。
我知道很多人会说:「ChatGPT 网页版不就行了吗?干嘛费劲调 API?」
几个真实场景:
- 自动化工作流:我有个脚本每天自动把 GitHub Issues 丢给 GPT-4 做分类打标签,这事儿你总不能每天手动复制粘贴吧
- 嵌入自己的产品:做独立开发的话,用户端的 AI 功能肯定得走 API
- 批量处理:上周帮朋友处理 2000 条客服记录做情感分析,网页版点到手抽筋都搞不完
- 成本控制:API 按 token 计费,比 Plus 会员划算得多(前提是你不是重度聊天用户)
好,废话不多说,直接开干。
这里有个坑我先提一嘴:openai 库在 1.0 版本做了一次大改,网上很多教程还在用 这种旧写法,你照着抄会直接报 。
现在的新版写法是面向对象的,用 实例化一个 client,后面全用 client 调方法。如果你之前装过旧版,先升级:
确认版本:
去 OpenAI 官网的 API Keys 页面 创建一个。
不过说实话,如果你在国内,直接访问 OpenAI 的 API 可能会遇到网络问题。我之前试过好几种方案,最后发现最省事的办法是用一个兼容 OpenAI 协议的聚合接口。我现在用的是 ofox.ai,改一下 就行,不用折腾别的,国内直连延迟也还可以。
后面的代码示例我会同时给出两种配置方式,你根据自己的情况选。
这是最基础的单轮对话:
跑通之后你会拿到类似这样的输出:
几个参数说一下:
- model: 是基础版, 更快更便宜, 是最新的多模态版本。根据你的需求选
- temperature:0-2 之间,越高越有创意(越放飞自我),写代码建议 0-0.3,写文案可以 0.7-1.0
- max_tokens:限制回复长度,避免烧钱。GPT-4 的输出 token 不便宜
正常请求要等模型把整个回复生成完才返回,如果回复很长,用户要干等好几秒。流式输出就是一个字一个字蹦出来,体验好很多:
注意 ,不加的话 Python 的 print 会缓冲输出,你看不到打字机效果。
GPT 的 API 是无状态的,它不会「记住」你之前说了什么。想要多轮对话,你得自己把历史消息全部塞进 里:
这里有个实际问题:对话越长,token 消耗越大。因为每次请求你都要把所有历史消息发过去。
我的处理方式是加一个简单的窗口限制:
这个功能是我觉得 GPT-4 API 最实用的特性之一。简单说就是让模型决定什么时候调用你定义的函数,并且帮你提取出结构化的参数。
举个例子,做一个能查天气的助手:
输出大概是:「北京今天天气晴,气温 26°C,适合出门走走。」
模型不会自己查天气,但它能判断用户意图、提取参数、然后用你给的函数结果来组织回复。这个模式在做 AI Agent 的时候非常有用。
这几个坑我都亲自踩过,记录一下:
网上搜到的很多教程还在用这种写法:
新版必须用 客户端实例。如果你看到哪个教程还在用上面的写法,直接关掉换下一篇。
我一开始全用 ,后来看账单发现贵得离谱。查了一下:
价格差了好几倍……大部分场景用 就够了,又快又便宜。只有对推理质量有极高要求的时候才上 。
生产环境一定要加超时和重试,不然 API 偶尔抽风你的程序就直接挂了:
库内置了重试机制,加上这两行就行,不用自己写 retry 逻辑。
整个流程其实不复杂:装库 → 拿 Key → 构造 messages → 发请求。核心就是理解 这个数组的结构,、、 三种角色,多轮对话就是不断往里 append。
几个建议:
- 开发阶段用 gpt-4o,别一上来就用 gpt-4,钱包会感谢你
- 一定要加 max_tokens,不然模型有时候会疯狂输出,一个请求烧好几毛
- 流式输出不是必须的,但如果你做面向用户的产品,体验差距非常大
- Function Calling 值得花时间学,这是做 AI 应用和做 AI 玩具的分水岭
有问题评论区聊,我看到都会回。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/231087.html