LLM API 接口与调用实例
定义
LLM API 是大语言模型厂商对外提供的** HTTP/SDK 编程接口**,让开发者把模型能力集成到自己的应用中。当前主流厂商普遍采用"OpenAI 兼容"的 REST 风格(/v1/chat/completions),并以官方 SDK(Python/Node.js)封装鉴权、流式、工具调用等能力,降低集成门槛。
本篇聚焦当前主流厂商的 API 形态与最小可运行调用实例,覆盖 OpenAI、Anthropic、Google Gemini、以及 OpenAI 兼容的国产/开源模型(DeepSeek、通义、Kimi 等),并给出 Node.js 与 Python 双语言示例。
核心特点
- REST + SDK 双形态:底层是 HTTP REST,上层提供 Python/Node.js/Go 等 SDK 封装。
- OpenAI 兼容成事实标准:多数厂商提供与 OpenAI
/v1/chat/completions兼容的端点,可复用 OpenAI SDK 切换base_url。 - 流式响应:SSE(Server-Sent Events)逐 token 返回,支持打字机效果与长文本。
- 工具调用:通过
tools参数声明函数 schema,模型决定是否调用。 - 多模态:支持文本 + 图像(vision)+ 音频输入,部分支持图像/音频输出。
- 结构化输出:
response_format: { type: "json_schema" }强制模型输出符合 JSON Schema 的结构。 - 鉴权统一:Bearer Token(API Key)放在
Authorization头。
主流厂商 API 速览
| 厂商 | 基座模型 | 端点风格 | SDK | 代表产品(编程 Agent) | 备注 |
|---|---|---|---|---|---|
| OpenAI | GPT-4o / o系列 | /v1/chat/completions + /v1/responses |
openai(Py/JS) | Codex(CLI / IDE / Cloud) | Chat Completions 事实标准;Responses 为新推荐 |
| Anthropic | Claude Opus/Sonnet | /v1/messages |
anthropic(Py/JS) | Claude Code(CLI / IDE / Desktop) | 自有协议,非完全兼容 |
| Gemini 2.x | /v1beta/models/generateContent |
google-genai | — | 自有协议 | |
| DeepSeek | DeepSeek-V3/R1 | OpenAI 兼容 | openai(改 base_url) | — | 国产高性价比 |
| 阿里通义 | Qwen 系列 | OpenAI 兼容(DashScope) | openai / dashscope | — | 兼容模式 |
| 月之暗面 | Kimi K2 | OpenAI 兼容 | openai(改 base_url) | — | 长上下文 |
| 智谱 | GLM-4.6 | OpenAI 兼容 | openai / zhipuai | — | 兼容模式 |
| 开源自部署 | Llama/Qwen via vLLM | OpenAI 兼容 | openai(改 base_url) | — | 私有化 |
关键洞察:除 Anthropic 与 Google 外,多数厂商提供 OpenAI 兼容端点, 用 OpenAI SDK 改
base_url+api_key即可切换模型 ,无需改业务代码。
API vs 产品:本篇主体是「你去调厂商 API」; Codex (OpenAI)与 Claude Code (Anthropic)是厂商自己做的编程 Agent 产品——它们底层消费自家模型 API,但提供终端/IDE 里的读改代码、跑命令、开 PR 等完整 Agent 体验。做应用集成用 API/SDK;做日常写代码可直接用这些产品。
工作流程
flowchart TD
A[准备 API Key] --> B[选择 SDK 或直接 HTTP]
B --> C[构造 messages 数组]
C --> D[可选: 声明 tools / response_format / stream]
D --> E[发起请求]
E --> F{stream?}
F -- 是 --> G[SSE 逐块接收并拼接]
F -- 否 --> H[一次性接收完整响应]
G --> I[解析 content / tool_calls]
H --> I
I --> J{有 tool_calls?}
J -- 是 --> K[执行工具, 把结果追加为 tool 消息]
K --> E
J -- 否 --> L[输出最终结果]
一、OpenAI API
OpenAI 目前有两套主流生成端点:
| 端点 | 路径 | 定位 |
|---|---|---|
| Chat Completions | /v1/chat/completions |
经典对话补全,生态兼容面最广 |
| Responses API | /v1/responses |
官方推荐新端点,面向 Agent / 工具 / 推理;Codex 等产品底层也走这套 |
Chat Completions 仍长期支持; 新项目优先用 Responses 。多数国产/开源兼容层目前仍以 Chat Completions 为主。
1.1 Chat Completions:端点与参数
POST https://api.openai.com/v1/chat/completions
Authorization: Bearer $OPENAI_API_KEY
Content-Type: application/json
核心请求体:
{
"model": "gpt-4o",
"messages": [
{"role": "system", "content": "你是助手"},
{"role": "user", "content": "用一句话解释 RAG"}
],
"temperature": 0.7,
"stream": false,
"tools": [],
"response_format": {"type": "json_schema", "json_schema": {}}
}
1.2 Chat Completions:Python 调用实例
安装:pip install openai
基本调用:
from openai import OpenAI
client = OpenAI() # 默认读环境变量 OPENAI_API_KEY
resp = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "你是简洁的技术助手"},
{"role": "user", "content": "用一句话解释 RAG"},
],
temperature=0.7,
)
print(resp.choices[0].message.content)
流式调用:
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "写一首关于秋天的诗"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
结构化输出(JSON Schema):
from pydantic import BaseModel
class City(BaseModel):
name: str
population: int
resp = client.beta.chat.completions.parse(
model="gpt-4o",
messages=[{"role": "user", "content": "提取北京的城市名与人口"}],
response_format=City,
)
city = resp.choices[0].message.parsed # City 实例
print(city.name, city.population)
1.3 Chat Completions:Node.js 调用实例
安装:npm install openai
基本调用:
import OpenAI from "openai";
const client = new OpenAI(); // 默认读环境变量 OPENAI_API_KEY
const resp = await client.chat.completions.create({
model: "gpt-4o",
messages: [
{ role: "system", content: "你是简洁的技术助手" },
{ role: "user", content: "用一句话解释 RAG" },
],
temperature: 0.7,
});
console.log(resp.choices[0].message.content);
流式调用:
const stream = await client.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: "写一首关于秋天的诗" }],
stream: true,
});
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content;
if (delta) process.stdout.write(delta);
}
1.4 Responses API(推荐)
Responses 是 Chat Completions 的演进形态:输入用 input(可传字符串或消息列表),系统指引用 instructions,输出是类型化的 output[] Items(message / function_call / reasoning 等),可用 previous_response_id 做服务端状态链式续写。内置工具(web search、file search、code interpreter、MCP 等)也在这套 API 上原生支持。
端点与参数
POST https://api.openai.com/v1/responses
Authorization: Bearer $OPENAI_API_KEY
Content-Type: application/json
核心请求体:
{
"model": "gpt-4o",
"instructions": "你是简洁的技术助手",
"input": "用一句话解释 RAG",
"store": true
}
与 Chat Completions 的关键差异:
| 维度 | Chat Completions | Responses |
|---|---|---|
| 输入 | messages |
input(字符串或 Items)+ 可选 instructions |
| 输出 | choices[0].message.content |
output[];SDK 可用 output_text |
| 状态 | 客户端自行拼历史 | previous_response_id / Conversations |
| 结构化输出 | response_format |
text.format |
| 工具形态 | tools[].function 嵌套 |
扁平 function 定义 + 内置工具 |
| 默认存储 | 视账户策略 | 默认 store: true(可显式 false) |
Python 调用实例
from openai import OpenAI
client = OpenAI()
resp = client.responses.create(
model="gpt-4o",
instructions="你是简洁的技术助手",
input="用一句话解释 RAG",
)
print(resp.output_text)
# 用 previous_response_id 续写多轮(无需重传完整历史)
resp2 = client.responses.create(
model="gpt-4o",
previous_response_id=resp.id,
input="再给一个更偏工程落地的版本",
)
print(resp2.output_text)
流式(事件流,按类型处理文本增量):
stream = client.responses.create(
model="gpt-4o",
input="写一首关于秋天的诗",
stream=True,
)
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
Node.js 调用实例
import OpenAI from "openai";
const client = new OpenAI();
const resp = await client.responses.create({
model: "gpt-4o",
instructions: "你是简洁的技术助手",
input: "用一句话解释 RAG",
});
console.log(resp.output_text);
const resp2 = await client.responses.create({
model: "gpt-4o",
previous_response_id: resp.id,
input: "再给一个更偏工程落地的版本",
});
console.log(resp2.output_text);
说明:应用侧直接集成时用上面的 SDK 即可;不必单独对接「Codex API」。
1.5 厂商产品:Codex
Codex 是 OpenAI 的编程 Agent 产品(CLI / IDE 插件 / Cloud),面向「在仓库里写代码、跑命令、改多文件」的工作流,而不是让你手写 HTTP 调模型。
| 维度 | 说明 |
|---|---|
| 定位 | 官方 Coding Agent,封装工具循环、沙箱、会话与审批 |
| 底层 API | 默认走 Responses API (含 WebSocket 长连接,降低多轮工具调用延迟) |
| 与 API 关系 | 产品消费 API;你的业务系统仍应直接调 /v1/responses 或 Chat Completions |
| 典型形态 | codex CLI、IDE 扩展、云端任务 |
| 何时用产品 | 日常开发、本地/云端 Agent 协作 |
| 何时用 API | 把模型能力嵌进自有应用、后端服务、自定义 Agent 框架 |
二、Anthropic Claude API
2.1 端点与参数
POST https://api.anthropic.com/v1/messages
x-api-key: $ANTHROPIC_API_KEY
anthropic-version: 2023-06-01
Content-Type: application/json
核心请求体:
{
"model": "claude-opus-4-5",
"max_tokens": 1024,
"system": "你是助手",
"messages": [
{"role": "user", "content": "用一句话解释 RAG"}
]
}
注意:Claude 的
system是顶层字段而非 messages 内的一条;max_tokens必填。
2.2 Python 调用实例
安装:pip install anthropic
from anthropic import Anthropic
client = Anthropic() # 默认读环境变量 ANTHROPIC_API_KEY
resp = client.messages.create(
model="claude-opus-4-5",
max_tokens=1024,
system="你是简洁的技术助手",
messages=[{"role": "user", "content": "用一句话解释 RAG"}],
)
print(resp.content[0].text)
流式调用:
with client.messages.stream(
model="claude-opus-4-5",
max_tokens=1024,
messages=[{"role": "user", "content": "写一首关于秋天的诗"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
2.3 Node.js 调用实例
安装:npm install @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic(); // 默认读环境变量 ANTHROPIC_API_KEY
const resp = await client.messages.create({
model: "claude-opus-4-5",
max_tokens: 1024,
system: "你是简洁的技术助手",
messages: [{ role: "user", content: "用一句话解释 RAG" }],
});
console.log(resp.content[0].text);
2.4 厂商产品:Claude Code
Claude Code 是 Anthropic 的编程 Agent 产品(终端 / IDE / Desktop / Web),在本地或云端读代码库、改文件、跑命令,并与 GitHub/GitLab 等开发工具联动。
| 维度 | 说明 |
|---|---|
| 定位 | 官方 Agentic Coding 工具,封装工具使用、子 Agent、权限与项目配置(如 CLAUDE.md) |
| 底层能力 | 基于 Claude 模型;应用集成侧对应的是 Messages API (/v1/messages) |
| 与 API 关系 | 产品 ≠ API。自建应用用 Messages SDK;要把 Claude Code 同款 Agent 能力嵌进自己的程序,可看 Anthropic 的 Agent SDK(以 Claude Code 的工具环为库) |
| 典型形态 | claude CLI、VS Code / JetBrains 扩展、Desktop、Web |
| 何时用产品 | 日常写代码、排查、开 PR、多 Agent 并行任务 |
| 何时用 API | 把 Claude 嵌进自有 Chat/Agent/后端;完全自定义工具循环 |
三、Google Gemini API
3.1 端点与参数
POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY
核心请求体:
{
"contents": [
{"parts": [{"text": "用一句话解释 RAG"}]}
]
}
注意:Gemini 用
contents而非messages,文本放在parts[].text。
3.2 Python 调用实例
安装:pip install google-genai
from google import genai
client = genai.Client() # 默认读环境变量 GEMINI_API_KEY
resp = client.models.generate_content(
model="gemini-2.0-flash",
contents="用一句话解释 RAG",
)
print(resp.text)
3.3 Node.js 调用实例
安装:npm install @google/genai
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({}); // 默认读环境变量 GEMINI_API_KEY
const resp = await client.models.generateContent({
model: "gemini-2.0-flash",
contents: "用一句话解释 RAG",
});
console.log(resp.text);
四、OpenAI 兼容端点(DeepSeek / 通义 / Kimi / GLM / vLLM)
这是最实用的模式:用 OpenAI SDK,只改 base_url 与 api_key,即可切换到任意兼容厂商。
4.1 各厂商兼容端点
| 厂商 | base_url | 模型名示例 |
|---|---|---|
| DeepSeek | https://api.deepseek.com/v1 |
deepseek-chat / deepseek-reasoner |
| 通义(兼容模式) | https://dashscope.aliyuncs.com/compatible-mode/v1 |
qwen-plus |
| Kimi | https://api.moonshot.cn/v1 |
moonshot-v1-32k / kimi-k2 |
| 智谱 GLM | https://open.bigmodel.cn/api/paas/v4 |
glm-4.6 |
| vLLM 自部署 | http://localhost:8000/v1 |
任意本地模型名 |
4.2 Python 调用实例(以 DeepSeek 为例)
from openai import OpenAI
client = OpenAI(
api_key="your-deepseek-key",
base_url="https://api.deepseek.com/v1",
)
resp = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": "用一句话解释 RAG"}],
)
print(resp.choices[0].message.content)
4.3 Node.js 调用实例(以 Kimi 为例)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.MOONSHOT_API_KEY,
baseURL: "https://api.moonshot.cn/v1",
});
const resp = await client.chat.completions.create({
model: "kimi-k2",
messages: [{ role: "user", content: "用一句话解释 RAG" }],
});
console.log(resp.choices[0].message.content);
4.4 vLLM 自部署调用
vLLM 启动后默认暴露 OpenAI 兼容端点:
vllm serve Qwen/Qwen2.5-7B-Instruct --port 8000
调用(Python):
from openai import OpenAI
client = OpenAI(
api_key="EMPTY", # vLLM 默认不校验
base_url="http://localhost:8000/v1",
)
resp = client.chat.completions.create(
model="Qwen/Qwen2.5-7B-Instruct", # 与启动时模型名一致
messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)
五、工具调用(Function Calling)实例
以 OpenAI 为例,声明工具让模型决定调用:
5.1 Python
import json
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名"}
},
"required": ["city"],
},
},
}]
resp = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "北京今天天气怎么样?"}],
tools=tools,
)
msg = resp.choices[0].message
if msg.tool_calls:
call = msg.tool_calls[0]
args = json.loads(call.function.arguments) # {"city": "北京"}
# 执行真实工具,拿到结果
result = get_weather(args["city"])
# 把结果回传给模型
resp2 = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": "北京今天天气怎么样?"},
msg,
{"role": "tool", "tool_call_id": call.id, "content": str(result)},
],
tools=tools,
)
print(resp2.choices[0].message.content)
5.2 Node.js
const tools = [{
type: "function",
function: {
name: "get_weather",
description: "获取指定城市的天气",
parameters: {
type: "object",
properties: { city: { type: "string", description: "城市名" } },
required: ["city"],
},
},
}];
const resp = await client.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: "北京今天天气怎么样?" }],
tools,
});
const msg = resp.choices[0].message;
if (msg.tool_calls?.length) {
const call = msg.tool_calls[0];
const args = JSON.parse(call.function.arguments);
const result = await getWeather(args.city);
const resp2 = await client.chat.completions.create({
model: "gpt-4o",
messages: [
{ role: "user", content: "北京今天天气怎么样?" },
msg,
{ role: "tool", tool_call_id: call.id, content: String(result) },
],
tools,
});
console.log(resp2.choices[0].message.content);
}
六、多模态(Vision)调用实例
以 OpenAI GPT-4o 为例,传入图像(base64 或 URL):
6.1 Python
resp = client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "这张图里有什么?"},
{"type": "image_url", "image_url": {"url": "https://example.com/cat.jpg"}},
],
}],
)
print(resp.choices[0].message.content)
6.2 Node.js
const resp = await client.chat.completions.create({
model: "gpt-4o",
messages: [{
role: "user",
content: [
{ type: "text", text: "这张图里有什么?" },
{ type: "image_url", image_url: { url: "https://example.com/cat.jpg" } },
],
}],
});
console.log(resp.choices[0].message.content);
优缺点
优点
- 低门槛集成:SDK 封装鉴权与流式,几行代码即可调用。
- OpenAI 兼容生态:一次封装,多厂商复用,切换模型只改
base_url。 - 能力丰富:流式、工具调用、结构化输出、多模态开箱即用。
- 按量付费:无需自建 GPU,按 token 计费,弹性伸缩。
缺点
- 延迟与限流:网络往返与厂商限流影响实时性。
- 成本不可控:高频调用成本累积,需做缓存与预算控制。
- 数据合规:敏感数据出域风险,需评估合规与私有化部署。
- 厂商差异:Anthropic/Google 协议不兼容,跨厂商迁移需改代码。
- 版本漂移:模型版本迭代快,行为可能变化,需锁定版本做回归。
注意事项
- 密钥管理:API Key 用环境变量/密钥管理服务,绝不硬编码或提交到仓库。
- 锁定模型版本:生产环境显式指定模型版本(如
gpt-4o-2024-11-20),避免静默升级导致行为漂移。 - 错误与重试:处理 429(限流)/5xx,做指数退避重试,避免雪崩。
- 流式拼接:流式响应需自行拼接
delta.content,注意空块与结束信号。 - token 预算:监控 prompt + completion token,设上限防止成本失控。
- 缓存层:对相同请求做缓存(如 Redis),降低重复调用成本与延迟。
- 超时设置:SDK 与 HTTP 层都设超时,避免长请求挂死。
- 私有化评估:敏感场景考虑 vLLM 自部署 + OpenAI 兼容端点,数据不出域。
- 结构化输出校验:即使声明
response_format,仍需校验返回 JSON,模型偶有不合规。 - 工具调用循环:工具调用可能多轮,需循环处理
tool_calls直到模型给出最终文本。
与相邻范式的关系
| 范式 | 关系 |
|---|---|
| Function Calling | LLM API 的 tools 参数是其实现基础 |
| RAG | 检索结果通过 LLM API 的 messages / input 注入 |
| Agent | Agent 循环每步调用 LLM API 决策;厂商产品如 Codex / Claude Code 是开箱即用的编程 Agent |
| MCP | MCP Server 暴露的工具最终经 LLM API 的 tools 调用 |
| Fine-tuning | 微调后的模型仍通过相同 API 调用 |
参考资料
- OpenAI API 文档:https://platform.openai.com/docs/api-reference
- OpenAI Responses API / 迁移指南:https://developers.openai.com/api/docs/guides/migrate-to-responses
- OpenAI Codex:https://openai.com/codex/
- Anthropic API 文档:https://docs.anthropic.com/en/api
- Claude Code 文档:https://code.claude.com/docs/en
- Google Gemini API:https://ai.google.dev/gemini-api/docs
- DeepSeek API 文档:https://api-docs.deepseek.com/
- 通义 DashScope 兼容模式:https://help.aliyun.com/zh/model-studio/developer-reference
- Kimi(Moonshot)API:https://platform.moonshot.cn/docs
- 智谱 GLM API:https://open.bigmodel.cn/dev/api
- vLLM OpenAI 兼容服务:https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html
评论
评论加载中…