🌐 调用大语言模型(LLM)API 指南
本文档介绍如何使用 OpenAI 及其兼容接口调用大语言模型(LLM),涵盖核心概念、常用接口、SDK 使用方式以及最佳实践。适合初学者快速上手,也便于开发者构建对话系统、智能助手等应用。
1. 核心接口类型对比
✅ 文本补全接口(Completion)
适用于简单的“输入提示 → 生成文本”任务,即通过一个 prompt 直接生成后续内容。
请求示例:
{
"model": "text-davinci-003",
"prompt": "写一首春天的诗",
"max_tokens": 100
}
返回结果示例:
{
"text": "春风拂面花自开,柳绿桃红映山川。\n溪水潺潺鸟欢唱,人间处处是芳年。"
}
⚠️ 注意:该接口属于早期设计,不支持多轮对话角色管理,且已被 OpenAI 官方逐步弃用。新项目推荐使用更灵活的 Chat Completion 接口。
✅ 聊天接口(Chat Completion)
现代主流接口,基于“对话历史”的交互模式,支持多角色参与(system、user、assistant),非常适合构建聊天机器人、智能客服、多轮问答等场景。
请求示例:
{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
"content": "你是一个诗人,擅长用中文写诗。"
},
{
"role": "user",
"content": "写一首春天的诗"
}
]
}
返回结果示例:
{
"choices": [
{
"message": {
"role": "assistant",
"content": "春风拂面花自开,\n柳绿桃红映山川。\n溪水潺潺鸟欢唱,\n人间处处是芳年。"
}
}
]
}
✅ 优势:结构清晰、支持上下文记忆、易于实现复杂对话逻辑。
2. 对话中的三大核心角色
在 chat/completions 接口中,messages 数组中的每一条消息都包含一个 role 字段,用于定义说话者的身份。以下是三个关键角色的含义:
| 角色(role) | 含义 | 作用 |
|---|---|---|
system | 系统指令 | 设定模型的行为风格、语气、能力范围等“人格”特征。通常只在对话开始时设置一次。 |
user | 用户输入 | 表示用户提出的问题或指令,是模型响应的直接触发点。 |
assistant | 助手回复 | 表示模型之前的回答,用于维持多轮对话的连贯性。 |
📌 示例说明
[ { "role": "system", "content": "你是一个幽默风趣的科普博主" }, { "role": "user", "content": "请解释什么是黑洞?" }, { "role": "assistant","content": "想象一下宇宙有个超级贪吃的胃……" }, { "role": "user", "content": "那它会把地球吸进去吗?" }]
system告诉模型:“你要用轻松有趣的方式讲解科学。”- 第一个
user提问,引发回答; assistant回答后被记录;- 第二个
user继续追问,模型能基于前面的回答继续对话。
💡 提示:省略
system角色也可以工作,但加入它可以显著提升回答质量和一致性。
3. 使用 SDK 调用 API(JavaScript/Node.js)
推荐使用官方 openai SDK 简化开发流程。
初始化客户端
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'your-api-key', // 必填:你的 API 密钥
baseURL: 'https://api.302.ai/v1' // 可选:使用第三方兼容 OpenAI 的服务地址
});
🔐 安全提示:
apiKey是敏感信息,切勿暴露在前端代码或版本控制中(如 GitHub)。- 建议将 API 调用封装在后端服务中,前端通过自己的服务器中转请求。
发起聊天请求(异步)
const response = await client.chat.completions.create({
model: 'gpt-3.5-turbo',
messages: [
{ role: 'system', content: '你是一个诗人,擅长用中文写诗。' },
{ role: 'user', content: '写一首春天的诗' }
]
});
// 输出模型回复
console.log(response.choices[0].message.content);
✅
choices[0]表示首选生成结果;delta.content用于流式输出。
4. 手动发送 HTTP 请求(Fetch 示例)
如果不使用 SDK,也可以直接调用 REST API。
fetch('https://api.302.ai/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-api-key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'gpt-3.5-turbo',
messages: [
{ role: 'user', content: '写一首春天的诗' }
]
})
})
.then(res => res.json())
.then(data => console.log(data.choices[0].message.content));
✅ 适用于浏览器环境或轻量级脚本。
5. 常见错误排查
| 错误信息 | 原因 | 解决方案 |
|---|---|---|
Missing 302 Apikey | 缺少 API 密钥 | 检查 apiKey 是否正确填写 |
Invalid authorization | 密钥无效或格式错误 | 确保以 Bearer xxx 形式传递 |
Model not found | 模型名称拼写错误 | 查阅平台支持的模型列表 |
Request timed out | 网络延迟或服务器问题 | 检查网络连接或更换 endpoint |