AI大模型开发从OpenAI调用开始
引言
小明的老板上周丢给他一个任务:”咱们的客服系统太拉了,用户问半天没人回,你搞个 AI 客服出来,下周上线。”
小明慌了。AI?大模型?他只在新闻里见过——”ChatGPT 又升级了””某某大厂发布千亿参数模型””AI 替代程序员还要多久”。可真轮到上手,脑子一片空白。
他找到组里的老张求救。老张干了十年后端,听了只说了一句话:
“别管那些概念。调个 API,拿到回复,就算入门。”
于是老张带着小明,从零开始,30 行代码跑通了第一次大模型调用。小明后来跟我说,那一刻他才真正明白——大模型开发没那么玄乎,就跟你调微信支付接口、调短信接口一样,本质上都是在调 API。
这篇文章,就是把老张带小明的过程写下来。不谈原理,只讲怎么动手。
为什么从 OpenAI 接口开始
小明第一个问题是:”我又不用 ChatGPT,为什么要学 OpenAI 的接口?”
老张打开浏览器,给他看了张表:
-
阿里通义千问 — 官方提供 compatible-mode端点,完全兼容 OpenAI 格式 -
DeepSeek — 接口格式跟 OpenAI 一模一样 -
智谱 GLM — 官方 SDK 对接的就是 OpenAI 格式 -
月之暗面 Kimi — 同上 -
百度文心一言 — 同上 -
字节豆包 — 火山引擎提供兼容模式
“看见了没?”老张说,”OpenAI 的接口格式已经是全行业的标准。你学会这一套,换哪个平台都只需要改两行配置——API 地址和密钥。就跟你会开大众就会开丰田一样。”
小明这下懂了。不是非得用 OpenAI,是学一套通用的调用范式。
把环境搭起来
老张让小明先装两个包:
-
openai— 官方 Python SDK,所有兼容的平台都能用 -
python-dotenv— 从.env文件读配置,避免把密钥写死在代码里
然后创建 .env 文件放密钥:
注意:这个 .env 文件必须加入 .gitignore,绝对不能提交到 Git。 老张特别强调——他见过太多人把密钥传到 GitHub,几分钟就被爬虫扫走,账单跑出几万块。
小明问:”那我要用 DeepSeek 怎么办?”
老张又列了张表:
| 平台 | LLM_BASE_URL | LLM_MODEL_ID |
|---|---|---|
| 阿里通义千问 | https://dashscope.aliyuncs.com/compatible-mode/v1 |
qwen-plus |
| DeepSeek | https://api.deepseek.com/v1 |
deepseek-chat |
| 智谱 GLM | https://open.bigmodel.cn/api/paas/v4 |
glm-4 |
| 月之暗面 Kimi | https://api.moonshot.cn/v1 |
moonshot-v1-8k |
| OpenAI 官方 | https://api.openai.com/v1 |
gpt-4o |
“换平台就改这两个值,代码一行不用动。这就是学 OpenAI 格式的好处。”
写个配置模块
老张说:”好的习惯从第一天就要养成——配置和业务逻辑分开。”
他让小明创建 config.py:
老张指着代码逐行解释:
-
load_dotenv()— 把.env里的配置加载到环境变量,os.getenv()才能读到 -
MODEL— 模型名,不同平台不同,改.env就行 -
LLM_BASE_URL— API 地址,指向哪家就调哪家 -
get_client()— 创建一个配置好的客户端。密钥为空直接报错,别等到网络请求才炸,早报错早解决
“这个 get_client() 里的密钥校验,叫防御性编程。”老张说,”失败早点报,别让人等到 timeout。”
30 行代码,第一次调通
配置好了,老张让小明创建 main.py:
终端里跳出模型的回复:
小明盯着屏幕愣了五秒。”就这样?这就跟 AI 对话了?”
“对。”老张说,”你跟它说了你是谁(system),然后问了问题(user),它回了你,顺便告诉你花了多少 token。一条调用链路就这三步。”
小明又问:”那这个 messages 里面 system 和 user 到底啥区别?temperature 是干嘛的?”
老张说:”问得好,这三个概念搞懂了,调 API 就通了 80%。”
三个核心概念
messages:对话的灵魂
老张在白板上画了三行:
| role | 谁说的话 | 怎么用 |
|---|---|---|
system |
你给 AI 定的”人设” | 放在消息列表第一条,告诉 AI 它是什么角色 |
user |
你问的话 | 你实际想问的问题 |
assistant |
AI 上一轮的回复 | 多轮对话时必须带上,不然 AI 不知道前面聊了啥 |
“重点是这个 assistant。”老张敲了几下键盘,给小明看多轮对话的写法:
“大模型本身没有记忆。每一轮对话,你得把之前的所有消息全部传回去。它看到 assistant 那条消息,才知道上一轮自己说了什么,才能接上你的新问题。”
“所有聊天应用——ChatGPT、文心一言、Kimi——底层全是这个逻辑:每次请求都把历史消息打包传过去。“
temperature:控制它多”靠谱”
“这个参数管的是输出的随机性,0 到 2 之间。”
| 值 | 效果 | 什么时候用 |
|---|---|---|
| 0 | 每次回答几乎一模一样,最确定 | 代码生成、数据提取、事实问答 |
| 0.7 | 有一定变化,但不会跑偏 | 普通对话,入门用这个就够了 |
| 1.0+ | 很发散、很有创意 | 写诗、起名字、头脑风暴 |
“入门固定 0.7,等你对模型脾气熟了再调。”
响应里远比”回复内容”多
老张说:”大部分人只关心 choices[0].message.content——就是 AI 说的那段话。但你还要看另外两个东西。”
注意:1 个中文字约等于 1~2 个 token。关注 finish_reason 判断是否截断,关注 total_tokens 核算成本,这是开发者基本素养。
新手必踩的四个坑
小明实际跑代码的时候果然踩了几个坑,老张一个个帮他排了。
坑一:AuthenticationError 认证失败
API 返回 401,提示密钥无效。
排查顺序:
-
.env文件在项目根目录吗? -
LLM_API_KEY值有没有多余的空格或换行? -
加一行 print(os.getenv("LLM_API_KEY"))确认读没读到
小明的问题就是——他把 .env 放在了 config.py 同目录,而不是项目根目录。load_dotenv() 默认从当前工作目录找 .env,没找到就静默跳过了。
坑二:ConnectionError 连不上
请求超时。
排查顺序:
-
LLM_BASE_URL末尾不能多一个/ -
国内网络直接连 OpenAI 官方需要代理,入门用国内兼容平台最省事 -
公司内网可能需要配置 HTTP 代理
坑三:AI 说一半断了
finish_reason 显示 "length" 而不是 "stop"。
解法:显式加大 max_tokens 参数,或者缩短输入的消息。模型输出有字数上限,默认值可能不够。
坑四:Windows 终端中文乱码
英文正常,中文变 □□□。
Windows PowerShell 里执行:
或者在代码开头加上:
配不同平台的实例
小明搞懂了基础,问老张:”要是我们公司决定用 DeepSeek 呢?”
老张说:”改 .env,代码不动。”
用 DeepSeek:
用智谱 GLM:
用 Kimi:
“改完 python main.py 直接跑,一个字不用动。这就是标准化的力量。”
下一步可以做什么
跑通第一次调用只是起点。老张给小明列了条学习路线:
-
多轮对话 — 手动维护 messages历史,做一个能连续聊天的机器人 -
流式输出 — 加 stream=True,实现打字机效果,用户不用干等 -
Function Calling — 让 AI 能查数据库、调接口,不再只会”说话” -
RAG 知识增强 — 把你的文档喂给 AI,让它基于你的私有知识回答 -
Agent 工作流 — 让 AI 自己规划步骤、拆解任务、执行复杂操作
“每一步都是在调 API 的基础上加新东西。底层从来没变过。”
总结
这篇文章从头到尾没有讲 Transformer 架构、没有讲注意力机制、没有讲 RLHF 训练。不是那些不重要,而是对入门者来说,先动手比先懂原理重要一百倍。
大模型开发的入口不是论文,是一行 client.chat.completions.create()。你调通了它,后面 RAG、Agent、多模态——都是在这条调用链路上做加法。
小明后来用一周时间把 AI 客服原型做了出来,老板很满意。他说:”老张那句话太对了——调个 API,拿到回复,就算入门。”
希望你也一样。
转载请注明来源:AI大模型开发从OpenAI调用开始


























已有 2 条评论