模型 API 与基础编程
看懂 Python、JSON、HTTP 与模型 API 的完整调用链路,以及流式返回、错误处理、Token 用量和密钥边界。
「产品经理的大模型基础」系列之四
上一篇:提示词与任务设计 · 系列入口 · 下一篇:Embedding 与 RAG
在聊天产品中使用大模型时,用户只需要输入问题并等待回答。但当大模型成为某个产品功能的一部分,系统需要通过程序把用户输入发给模型,再把返回结果展示出来或交给后续流程。
理解这个过程,不要求产品经理成为开发者。只要能看懂 Python、JSON、HTTP 和 API 之间的关系,就可以更准确地讨论接口、成本、延迟、错误和产品边界。
一、API 是什么
API 是不同软件之间约定好的调用接口。
可以把它理解为餐厅的点单窗口:菜单说明可以提交哪些内容,服务员接收订单,后厨处理,再把结果返回。使用者不需要知道后厨每一步怎样工作,但必须按照菜单规定的格式提交请求。
模型 API 也是如此。程序会提交:
- 使用哪个模型或能力。
- 系统和用户提供了什么信息。
- 是否要求特定输出格式。
- 是否允许使用工具。
- 是否采用流式返回。
模型服务处理后,会返回生成内容、用量信息、工具请求或错误。
二、HTTP:请求怎样在网络中传递
HTTP 是互联网上常见的通信协议。调用模型 API,通常就是向一个网络地址发送 HTTP 请求。
一条请求大致包括:
- URL:请求发送到哪里。
- Method:要执行什么类型的操作,常见的有 GET 和 POST。
- Headers:认证方式、数据格式等附加信息。
- Body:真正提交的数据。
调用模型生成内容时,常见做法是使用 POST,把输入数据放在请求 Body 中。
服务器收到请求后,会返回状态码和响应数据。常见含义包括:2xx 表示请求成功;400 Bad Request 多半是参数或格式有误;401 Unauthorized 表示认证失败;429 Too Many Requests 表示请求过于频繁;5xx 表示服务端暂时异常。不同平台的具体错误体不完全相同,所以程序还要读取响应里的错误代码和说明。
产品设计中的超时、重试、错误提示和降级策略,都建立在这层通信之上。
三、JSON:程序之间交换结构化数据
JSON 是 API 中非常常见的数据格式。它使用键和值表达结构,例如:
{
"model": "example-model",
"input": "请总结下面的访谈记录",
"temperature": 0.2
}其中:
model、input、temperature是字段名。- 字符串使用引号表示。
- 数字可以直接写。
- 多项内容可以放入数组。
- 更复杂的信息可以嵌套为对象。
模型返回结果也通常使用 JSON。程序从指定字段读取文字、用量或错误信息。
JSON 对产品经理很重要,因为它把“模型回答”变成了可定义的数据接口。PRD 中的输入字段、输出 Schema 和工具参数,最终常常会落实为类似结构。
四、Python 在其中做什么
Python 是常用于数据处理和 AI 原型开发的编程语言。它可以:
- 读取文本、CSV 或 JSON 文件。
- 向模型 API 发送请求。
- 遍历多条数据进行批量处理。
- 检查和保存模型返回结果。
- 处理错误并记录日志。
下面是一段简化的示意代码。它读取本地访谈文本、调用模型,再把结果保存为 JSON。具体地址和字段会因模型服务而不同,这里只用于说明完整链路:
import json
import os
import requests
with open("interview.txt", "r", encoding="utf-8") as file:
interview = file.read()
payload = {
"model": "example-model",
"input": f"请把下面的访谈总结为三个要点:\n\n{interview}"
}
response = requests.post(
"https://api.example.com/v1/generate",
headers={
"Authorization": f"Bearer {os.environ['EXAMPLE_MODEL_API_KEY']}",
"Content-Type": "application/json"
},
json=payload,
timeout=30
)
response.raise_for_status()
result = response.json()
print(result["output"])
with open("analysis.json", "w", encoding="utf-8") as file:
json.dump(result, file, ensure_ascii=False, indent=2)这段代码完成了一条最小数据链路:读取文件,准备 JSON 数据,通过环境变量取得密钥,发送 POST 请求,检查 HTTP 状态,把响应解析为 JSON,最后保存结果。
环境变量不是绝对安全方案,但比把 API Key 直接写进代码更合适。密钥不应提交到代码仓库、粘贴到公开文档,也不应发送给浏览器中不受信任的前端代码;生产系统通常还会使用专门的密钥管理服务和权限控制。
真实项目还会安全管理密钥、检查状态码、限制重试次数,并避免把敏感数据直接写进日志。
五、从一次调用到批量处理
如果要处理多份访谈,程序可以逐条读取输入并调用模型:
for interview in interviews:
result = call_model(interview)
save_result(result)这看起来只是一个循环,但产品化时需要考虑很多问题:
- 某一条失败后,是否继续处理其他内容?
- 请求过快触发限流时怎么办?
- 返回格式不符合要求时是否重试?
- 怎样记录输入、模型配置和输出版本?
- 相同内容是否需要重复调用?
- 处理一百份材料需要多少时间和成本?
这些问题说明,模型能力只是系统的一部分。批量处理的稳定性往往更多取决于普通软件工程。
六、怎样读懂模型的响应和 Token 用量
一条成功响应除了正文,通常还包含请求标识、结束原因和用量。示意结构如下:
{
"request_id": "req_123",
"output": "用户最关心的是……",
"finish_reason": "stop",
"usage": {
"input_tokens": 1850,
"output_tokens": 320,
"total_tokens": 2170
}
}input_tokens 是本次送入模型的上下文用量,output_tokens 是模型生成的用量。平台通常按模型和 Token 数计费,但具体价格、缓存折扣和计费字段会变化,应以所用服务的文档为准。
产品侧最好记录模型版本、请求 ID、Token 用量、耗时、结束原因和错误类型。它们分别帮助团队回答:哪次请求出了问题、成本花在哪里、回答是否因为长度限制而截断,以及新旧版本差异来自哪里。日志中则应对个人信息、商业机密和密钥进行脱敏。
七、同步返回与流式返回
同步返回是等待模型生成完整答案后一次性返回。流式返回则是在生成过程中不断发送小段事件,用户可以逐步看到内容出现。
流式返回不会一定缩短模型完成全部内容的时间,但可以降低用户感受到的等待。聊天产品常采用流式输出,就是因为用户能够更早看到第一部分结果。
对于结构化批处理,系统可能更适合等待完整 JSON;对于长文本生成或对话界面,流式展示通常体验更好。
八、模型 API 常见的错误类型
| 错误 | 常见原因 | 产品层需要考虑什么 |
|---|---|---|
| 认证失败(常见 401/403) | 密钥错误或权限不足 | 安全提示与配置检查 |
| 参数错误(常见 400) | 字段缺失、格式不合法 | 请求前校验 |
| 请求过多(常见 429) | 超过速率限制 | 排队与指数退避重试 |
| 超时 | 输入太长、网络或服务较慢 | 超时提示、异步处理 |
| 输出格式错误 | 模型未遵循结构 | Schema 校验和有限重试 |
| 服务异常(常见 5xx) | 上游不可用 | 降级、有限重试或稍后处理 |
并不是所有错误都应该自动重试。参数错误重试相同请求通常没有意义;网络抖动可以有限重试;写操作还要避免重试造成重复执行。
九、模型参数和产品体验
模型 API 常提供多种参数。不同平台名称可能不同,但产品经理通常需要关注:
- 模型选择:能力、成本和延迟不同。
- 最大输出长度:影响回答完整性和费用。
- Temperature:影响生成多样性。
- 超时与重试:影响可靠性和等待体验。
- 流式输出:影响用户感知延迟。
- 结构化输出:影响后续程序能否稳定读取。
这些参数不是孤立的技术配置。它们最终会体现在用户等待多久、答案是否完整、单次任务花多少钱,以及失败后发生什么。
十、产品经理需要具备的最低编程理解
不需要从头编写完整系统,但最好能够:
- 看懂简单 Python 变量、函数、循环和异常处理。
- 识别 JSON 中的对象、数组和字段。
- 理解请求、响应、状态码和超时。
- 看懂一次模型调用的输入与返回。
- 明白 API Key 不应直接写入公开代码。
- 能与工程师讨论批处理、日志、重试和成本。
这些基础足以让产品经理从“接一下大模型”走到更具体的系统设计讨论。
本篇小结
这篇文章的核心关系是:
Python 等程序准备数据
→ 使用 JSON 描述请求
→ 通过 HTTP 调用模型 API
→ 接收包含正文、状态和 Token 用量的 JSON 响应
→ 展示、保存或继续处理结果下一篇将介绍怎样让模型使用外部知识:Embedding 如何表示语义,RAG 又怎样完成文档切分、检索、召回、生成和引用。
上一篇:提示词与任务设计 下一篇:Embedding 与 RAG