AI大模型开发从OpenAI调用开始

    |     2026年8月15日   |   agent技术, AI大模型应用   |     2 条评论   |    90

引言

小明的老板上周丢给他一个任务:”咱们的客服系统太拉了,用户问半天没人回,你搞个 AI 客服出来,下周上线。”

小明慌了。AI?大模型?他只在新闻里见过——”ChatGPT 又升级了””某某大厂发布千亿参数模型””AI 替代程序员还要多久”。可真轮到上手,脑子一片空白。

他找到组里的老张求救。老张干了十年后端,听了只说了一句话:

“别管那些概念。调个 API,拿到回复,就算入门。”

于是老张带着小明,从零开始,30 行代码跑通了第一次大模型调用。小明后来跟我说,那一刻他才真正明白——大模型开发没那么玄乎,就跟你调微信支付接口、调短信接口一样,本质上都是在调 API。

这篇文章,就是把老张带小明的过程写下来。不谈原理,只讲怎么动手。

为什么从 OpenAI 接口开始

小明第一个问题是:”我又不用 ChatGPT,为什么要学 OpenAI 的接口?”

老张打开浏览器,给他看了张表:

  • 阿里通义千问 — 官方提供 compatible-mode 端点,完全兼容 OpenAI 格式
  • DeepSeek — 接口格式跟 OpenAI 一模一样
  • 智谱 GLM — 官方 SDK 对接的就是 OpenAI 格式
  • 月之暗面 Kimi — 同上
  • 百度文心一言 — 同上
  • 字节豆包 — 火山引擎提供兼容模式

“看见了没?”老张说,”OpenAI 的接口格式已经是全行业的标准。你学会这一套,换哪个平台都只需要改两行配置——API 地址和密钥。就跟你会开大众就会开丰田一样。”

小明这下懂了。不是非得用 OpenAI,是学一套通用的调用范式。

把环境搭起来

老张让小明先装两个包:

pip install openai python-dotenv
  • openai — 官方 Python SDK,所有兼容的平台都能用
  • python-dotenv — 从 .env 文件读配置,避免把密钥写死在代码里

然后创建 .env 文件放密钥:

LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 LLM_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx LLM_MODEL_ID=qwen-plus

注意:这个 .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

"""API 与模型配置(密钥请用环境变量注入)。""" import os from dotenv import load_dotenv from openai import OpenAI load_dotenv() MODEL = os.getenv("LLM_MODEL_ID", "qwen-plus") LLM_BASE_URL = os.getenv( "LLM_BASE_URL", "https://dashscope.aliyuncs.com/compatible-mode/v1", ) def get_client() -> OpenAI: api_key = os.getenv("LLM_API_KEY", "").strip() if not api_key: raise RuntimeError("未配置 LLM_API_KEY,请检查 .env 文件。") return OpenAI(api_key=api_key, base_url=LLM_BASE_URL)

老张指着代码逐行解释:

  1. load_dotenv() — 把 .env 里的配置加载到环境变量,os.getenv() 才能读到
  2. MODEL — 模型名,不同平台不同,改 .env 就行
  3. LLM_BASE_URL — API 地址,指向哪家就调哪家
  4. get_client() — 创建一个配置好的客户端。密钥为空直接报错,别等到网络请求才炸,早报错早解决

“这个 get_client() 里的密钥校验,叫防御性编程。”老张说,”失败早点报,别让人等到 timeout。”

30 行代码,第一次调通

配置好了,老张让小明创建 main.py

""" 第一次调用大模型 API(OpenAI 兼容接口)。 运行方式:python main.py 前提:项目根目录已配置 .env 文件(含 LLM_BASE_URL / LLM_API_KEY / LLM_MODEL_ID) """ from config import MODEL, get_client def main() -> None: client = get_client() completion = client.chat.completions.create( model=MODEL, messages=[ {"role": "system", "content": "你是一个聊天机器人,请回答用户的问题。"}, {"role": "user", "content": "你是谁?请介绍一下自己。"}, ], temperature=0.7, ) print(completion.choices[0].message.content) if completion.usage: print("---") print("消耗 tokens:", completion.usage.total_tokens) if __name__ == "__main__": main()
python main.py

终端里跳出模型的回复:

我是一个AI助手,可以回答你的问题、提供信息、帮你处理各种任务…… --- 消耗 tokens: 156

小明盯着屏幕愣了五秒。”就这样?这就跟 AI 对话了?”

“对。”老张说,”你跟它说了你是谁(system),然后问了问题(user),它回了你,顺便告诉你花了多少 token。一条调用链路就这三步。”

小明又问:”那这个 messages 里面 systemuser 到底啥区别?temperature 是干嘛的?”

老张说:”问得好,这三个概念搞懂了,调 API 就通了 80%。”

三个核心概念

messages:对话的灵魂

老张在白板上画了三行:

role 谁说的话 怎么用
system 你给 AI 定的”人设” 放在消息列表第一条,告诉 AI 它是什么角色
user 你问的话 你实际想问的问题
assistant AI 上一轮的回复 多轮对话时必须带上,不然 AI 不知道前面聊了啥

“重点是这个 assistant。”老张敲了几下键盘,给小明看多轮对话的写法:

messages = [ {"role": "system", "content": "你是一个 Python 编程助手。"}, {"role": "user", "content": "怎么读取 JSON 文件?"}, {"role": "assistant", "content": "可以用 json.load() 打开文件并解析……"}, {"role": "user", "content": "那写入呢?"}, # 第二轮问题 ]

“大模型本身没有记忆。每一轮对话,你得把之前的所有消息全部传回去。它看到 assistant 那条消息,才知道上一轮自己说了什么,才能接上你的新问题。”

“所有聊天应用——ChatGPT、文心一言、Kimi——底层全是这个逻辑:每次请求都把历史消息打包传过去。

temperature:控制它多”靠谱”

“这个参数管的是输出的随机性,0 到 2 之间。”

效果 什么时候用
0 每次回答几乎一模一样,最确定 代码生成、数据提取、事实问答
0.7 有一定变化,但不会跑偏 普通对话,入门用这个就够了
1.0+ 很发散、很有创意 写诗、起名字、头脑风暴

“入门固定 0.7,等你对模型脾气熟了再调。”

响应里远比”回复内容”多

老张说:”大部分人只关心 choices[0].message.content——就是 AI 说的那段话。但你还要看另外两个东西。”

completion = client.chat.completions.create(...) # 1. 回复内容 —— 最常用的 print(completion.choices[0].message.content) # 2. 结束原因 —— 判断有没有被截断 print(completion.choices[0].finish_reason) # "stop" = 正常结束,"length" = 被截断了,内容没说完 # 3. Token 用量 —— 直接关系到花多少钱 print(completion.usage.prompt_tokens) # 你输入消耗的 token print(completion.usage.completion_tokens) # AI 输出消耗的 token print(completion.usage.total_tokens) # 总 token 数

注意: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 里执行:

$env:PYTHONIOENCODING="utf-8" python main.py

或者在代码开头加上:

import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

配不同平台的实例

小明搞懂了基础,问老张:”要是我们公司决定用 DeepSeek 呢?”

老张说:”改 .env,代码不动。”

用 DeepSeek

LLM_BASE_URL=https://api.deepseek.com/v1 LLM_API_KEY=sk-你的deepseek密钥 LLM_MODEL_ID=deepseek-chat

用智谱 GLM

LLM_BASE_URL=https://open.bigmodel.cn/api/paas/v4 LLM_API_KEY=你的智谱密钥 LLM_MODEL_ID=glm-4-flash

用 Kimi

LLM_BASE_URL=https://api.moonshot.cn/v1 LLM_API_KEY=sk-你的kimi密钥 LLM_MODEL_ID=moonshot-v1-8k

“改完 python main.py 直接跑,一个字不用动。这就是标准化的力量。”


下一步可以做什么

跑通第一次调用只是起点。老张给小明列了条学习路线:

  1. 多轮对话 — 手动维护 messages 历史,做一个能连续聊天的机器人
  2. 流式输出 — 加 stream=True,实现打字机效果,用户不用干等
  3. Function Calling — 让 AI 能查数据库、调接口,不再只会”说话”
  4. RAG 知识增强 — 把你的文档喂给 AI,让它基于你的私有知识回答
  5. Agent 工作流 — 让 AI 自己规划步骤、拆解任务、执行复杂操作

“每一步都是在调 API 的基础上加新东西。底层从来没变过。”

总结

这篇文章从头到尾没有讲 Transformer 架构、没有讲注意力机制、没有讲 RLHF 训练。不是那些不重要,而是对入门者来说,先动手比先懂原理重要一百倍

大模型开发的入口不是论文,是一行 client.chat.completions.create()。你调通了它,后面 RAG、Agent、多模态——都是在这条调用链路上做加法。

小明后来用一周时间把 AI 客服原型做了出来,老板很满意。他说:”老张那句话太对了——调个 API,拿到回复,就算入门。”

希望你也一样。

转载请注明来源:AI大模型开发从OpenAI调用开始
本文链接地址:https://ai.zhousir.top/?p=3574
回复 取消

已有 2 条评论

  1. 2026-8-16 10:13回复
    文章从头到尾没有讲 Transformer 架构、没有讲注意力机制、没有讲 RLHF 训练
  2. momo
    2026-8-16 10:15回复
    对入门者来说,先动手比先懂原理重要一百倍