大模型评测与AI产品质量保障:第3篇 用 Python 调用 模型API

大模型评测与AI产品质量保障:第3篇 用 Python 调用 模型API

IT策士 10余年一线大厂经验,专注大模型测试、AI产品质量保障与职场进阶。我会在各个平台持续发布最新文章,助你少走弯路。

前两篇文章我们聊了 AI 的演进脉络与三种主流形态,今天正式进入实战环节——用 Python 调用大模型 API,跑通你的第一个 AI 程序

这是整个系列的技术起点,也是后续所有测试自动化(基准测试、功能测试、性能压测)的基石。无论你之前是否有过 API 调用经验,跟着本文一步步操作,都能在 10 分钟内完成首次人机对话。


一、为什么测试工程师必须学会调 API?

在与大模型打交道的过程中,你迟早要面对模型的 API 接口。无论是做:

  • 基准测试(对比不同模型的推理质量)

  • 功能测试(验证特定场景下的输出正确性)

  • 接口压测(评估吞吐量和延迟)

第一步永远都是建立稳定、可复现的调用管道

幸运的是,当下主流大模型 API 均遵循OpenAI 兼容的 Chat Completions 规范,这意味着你只需要学会一个库(openai),就可以无缝切换 GPT‑5.4、Claude‑4.8、Gemini‑3.5、DeepSeek‑V4 等最新旗舰模型——只需修改base_urlmodel名称即可。


二、环境准备:5 分钟搭建开发环境

2.1 安装 Python 库

确保你的 Python 版本 ≥ 3.8,然后执行:

预期输出(版本号可能略有不同):

Collecting openai Downloading openai-1.x.x-py3-none-any.whl... Installing collected packages: openai Successfully installed openai-1.x.x

可选:若后续需要更底层的 HTTP 控制,可额外安装httpxpip install httpx),本篇暂用同步方式。


2.2 获取 API Key(以 DeepSeek 为例)

DeepSeek 注册即赠送免费额度,非常适合新手练习。

  1. 访问 platform.deepseek.com 并注册账号。

  2. 进入“API Keys”页面,点击“创建 API Key”。

  3. 复制并妥善保存生成的 Key(仅显示一次)。


2.3 安全配置 API Key

铁律:永远不要把 API Key 硬编码到代码中,更不要提交到代码仓库。

推荐使用环境变量:

exportDEEPSEEK_API_KEY="sk-xxxx"

如果你已有 OpenAI、Anthropic 或 Google 的 Key,后续只需替换base_urlmodel参数即可。


三、第一个请求:和模型打个招呼

3.1 最小可用代码

以下示例调用 DeepSeek 最新对话模型(当前为 DeepSeek‑V4)。你也可以将model改为"gpt-5.4""claude-4.8""gemini-3.5",并同步修改base_url

from openaiimportOpenAI# 初始化客户端(请替换为你的真实 Key)client=OpenAI(api_key="sk-your-api-key",base_url="https://api.deepseek.com")# 发送聊天请求response=client.chat.completions.create(model="deepseek-chat",# deepseek-chat 始终指向最新对话模型(当前为 V4)messages=[{"role":"user","content":"你好,请用一句话介绍你自己"}])# 提取回复内容reply=response.choices[0].message.content print(reply)

预期输出(示例):

你好!我是 DeepSeek-V4,由深度求索公司创造的最新版大语言模型,擅长推理、创作与多领域问答。

3.2 代码逐行解析

一次完整的“请求 → 响应”闭环就此完成。后续所有的测试任务(基准测试、安全测试、性能压测)都建立在这个基础模式之上。


四、深入理解请求结构

4.1 Messages 的角色分工

每条消息都是一个字典,包含rolecontent两个字段:

{"role":"角色","content":"消息内容"}

role有三种取值:


4.2 多轮对话示例

response=client.chat.completions.create(model="deepseek-chat",messages=[{"role":"system","content":"你是一个言简意赅的助手,每次回答不超过20字。"},{"role":"user","content":"什么是回归测试?"},{"role":"assistant","content":"修改代码后,重新执行已有测试,确保未引入新缺陷。"},{"role":"user","content":"它和冒烟测试有什么区别?"}])print(response.choices[0].message.content)

预期输出(示例):


4.3 关键参数速览

所有兼容 OpenAI 的模型都支持以下核心参数:

response=client.chat.completions.create(model="deepseek-chat",# 可换为 "gpt-5.4"、"claude-4.8"、"gemini-3.5"messages=[{"role":"user","content":"讲个笑话"}],temperature=0.8,# 随机性,0~2,越高越天马行空top_p=0.9,# 核采样概率阈值max_tokens=100,# 限制输出最大 token 数n=1,# 生成几个候选回复stop=["\n\n"]# 遇到指定文本即停止生成)

测试建议:对于需要可重复结果的场景(如回归测试),通常将temperature设为0,以降低输出的随机性。


五、响应对象全解析

响应对象包含的信息远不止文本,测试工程师需要精细化解析各个字段。

response=client.chat.completions.create(model="deepseek-chat",messages=[{"role":"user","content":"1+1=?"}])# 打印完整 JSON 结构(便于调试)print(response.model_dump_json(indent=2))

简化后的响应结构(各模型通用):

{"id":"chatcmpl-xxxx","object":"chat.completion","created":1715000000,"model":"deepseek-chat","choices":[{"index":0,"message":{"role":"assistant","content":"1+1=2"},"finish_reason":"stop"}],"usage":{"prompt_tokens":9,"completion_tokens":4,"total_tokens":13}}

测试中重点关注字段

finish_reason 的测试价值

response=client.chat.completions.create(model="deepseek-chat",messages=[{"role":"user","content":"从1数到1000"}],max_tokens=50# 故意设小,引发截断)finish_reason=response.choices[0].finish_reasoniffinish_reason=="length":print("⚠️ 输出被截断,max_tokens 不足")eliffinish_reason=="stop":print("✅ 正常结束")eliffinish_reason=="content_filter":print("🚫 内容被安全策略拦截")

六、封装可复用的测试函数

将上述调用逻辑封装成一个函数,后续所有评测脚本均可基于此扩展。

def call_llm(prompt,system_prompt=None,temperature=0.0,max_tokens=500):""" 统一的 LLM 调用接口 当前使用 DeepSeek-V4(deepseek-chat) 可替换为"gpt-5.4""claude-4.8""gemini-3.5"""" messages=[]ifsystem_prompt: messages.append({"role":"system","content":system_prompt})messages.append({"role":"user","content":prompt})response=client.chat.completions.create(model="deepseek-chat",messages=messages,temperature=temperature,max_tokens=max_tokens)return{"content":response.choices[0].message.content,"finish_reason":response.choices[0].finish_reason,"tokens_used":response.usage.total_tokens,"model":response.model}# 使用示例result=call_llm(prompt="请用JSON格式返回:姓名张三,年龄30",system_prompt="你总是输出合法JSON,不加任何解释",temperature=0.0)print(f"回答: {result['content']}")print(f"Token消耗: {result['tokens_used']}")print(f"结束原因: {result['finish_reason']}")

预期输出

回答:{"姓名":"张三","年龄":30}Token消耗:42结束原因: stop

七、常见错误与调试

7.1 API Key 无效

错误信息

openai.AuthenticationError: Error code:401- Invalid API Key

解决:检查 Key 是否复制完整、是否已激活、账户是否有余额。


7.2 模型名称错误

错误信息

openai.NotFoundError: Error code:404- The model`xxx`does not exist

解决:确认厂商提供的准确模型名,常用对照如下:


7.3 网络连接失败

内网环境可能需要设置代理:

方式一(环境变量)

exportHTTP_PROXY=http://your-proxy:portexportHTTPS_PROXY=http://your-proxy:port

方式二(代码内指定)

importhttpx client=OpenAI(api_key="...",base_url="...",http_client=httpx.Client(proxy="http://your-proxy:port"))

八、动手实验:验证你的第一个 AI 程序

完成以下三个小实验,观察并记录输出,加深理解。

实验 1:基础调用

response=client.chat.completions.create(model="deepseek-chat",messages=[{"role":"user","content":"用一句话解释什么是API测试"}])print(response.choices[0].message.content)print("Token消耗:", response.usage.total_tokens)

实验 2:对比 temperature 的影响

fortempin[0.0,0.5,1.5]: response=client.chat.completions.create(model="deepseek-chat",messages=[{"role":"user","content":"写一句广告语"}],temperature=temp)print(f"temp={temp}: {response.choices[0].message.content}")

观察:temperature 升高,输出是否更富创意、更多样化?

实验 3:截断检测

response=client.chat.completions.create(model="deepseek-chat",messages=[{"role":"user","content":"讲一个很长的故事"}],max_tokens=30)print("finish_reason:", response.choices[0].finish_reason)print("内容:", response.choices[0].message.content)

九、小结与下一步

从安装openai库,到封装可复用的call_llm函数,你已经迈出了大模型测试自动化的第一步。

我们掌握了:

  • 请求结构(messagestemperaturemax_tokens等参数)

  • 响应解析(contentfinish_reasonusage

  • 基本异常处理

所有 AI 测试的本质,无非是“发请求、收响应、做断言”。有了这个基础,后续的基准测试、接口测试、性能压测都将迎刃而解。


下一篇预告:《主流大模型全景图:GPT-5.4、Claude 4.8、Gemini 3.5、DeepSeek-V4 等》——横向对比最新旗舰模型的能力、成本与选型策略,帮你选出最适合测试的模型组合。

想了解更多,欢迎在各平台搜索「IT策士」,一起升级 AI 测试思维!