2.1 OpenAI API 简介

概述

OpenAI API 是目前最流行的 LLM 接口之一,提供了统一的调用方式,支持多种模型和功能。本教程使用 DeepSeek API(兼容 OpenAI API 格式)来构建我们的 AI Agent。

API 基础

认证

1
2
3
4
const openai = new OpenAI({
apiKey: process.env.DEEPSEEK_API_KEY,
baseURL: 'https://api.deepseek.com/v1'
});

基本调用

1
2
3
4
5
6
7
8
9
const response = await openai.chat.completions.create({
model: 'deepseek-chat',
messages: [
{ role: 'system', content: '你是一个有用的助手。' },
{ role: 'user', content: '你好!' }
]
});

console.log(response.choices[0].message.content);

消息格式

角色类型

1
2
3
4
5
6
type MessageRole = 'system' | 'user' | 'assistant' | 'tool';

interface Message {
role: MessageRole;
content: string;
}

消息示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
const messages: Message[] = [
// System: 设置助手行为
{
role: 'system',
content: '你是一个编程专家,擅长 TypeScript。'
},

// User: 用户输入
{
role: 'user',
content: '如何用 TypeScript 定义接口?'
},

// Assistant: AI 回复
{
role: 'assistant',
content: '在 TypeScript 中,可以使用 interface 关键字...'
},

// User: 后续追问
{
role: 'user',
content: '能给我一个完整示例吗?'
}
];

参数说明

核心参数

参数 类型 说明 默认值
model string 使用的模型 -
messages Message[] 对话历史 -
temperature number 随机性 (0-2) 1.0
max_tokens number 最大输出 token 数 -
stream boolean 是否流式输出 false
tools Tool[] 可用工具列表 -

Temperature

1
2
3
4
5
6
7
8
9
10
11
12
13
// 低温度:更确定性的输出
const response1 = await openai.chat.completions.create({
model: 'deepseek-chat',
messages: [{ role: 'user', content: '写一个问候语' }],
temperature: 0.1 // 几乎总是相同输出
});

// 高温度:更有创造性的输出
const response2 = await openai.chat.completions.create({
model: 'deepseek-chat',
messages: [{ role: 'user', content: '写一个故事' }],
temperature: 1.5 // 每次输出都不同
});

Max Tokens

1
2
3
4
5
const response = await openai.chat.completions.create({
model: 'deepseek-chat',
messages: [{ role: 'user', content: '详细介绍 AI' }],
max_tokens: 100 // 限制输出长度
});

错误处理

常见错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
try {
const response = await openai.chat.completions.create({
model: 'deepseek-chat',
messages: messages
});
} catch (error) {
if (error instanceof OpenAI.APIError) {
console.error('API 错误:', error.message);
console.error('状态码:', error.status);

switch (error.status) {
case 401:
console.error('API Key 无效');
break;
case 429:
console.error('请求过多,请稍后重试');
break;
case 500:
console.error('服务器错误,请稍后重试');
break;
}
}
}

完整示例

简单对话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import OpenAI from 'openai';

const openai = new OpenAI({
apiKey: process.env.DEEPSEEK_API_KEY,
baseURL: 'https://api.deepseek.com/v1'
});

async function simpleChat() {
const response = await openai.chat.completions.create({
model: 'deepseek-chat',
messages: [
{ role: 'system', content: '你是一个友好的助手。' },
{ role: 'user', content: '请介绍一下你自己。' }
]
});

console.log('AI:', response.choices[0].message.content);
}

simpleChat();

多轮对话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
async function multiTurnChat() {
const messages: Message[] = [
{ role: 'system', content: '你是一个编程助手。' }
];

// 第一轮
messages.push({
role: 'user',
content: 'TypeScript 是什么?'
});

let response = await openai.chat.completions.create({
model: 'deepseek-chat',
messages
});

messages.push({
role: 'assistant',
content: response.choices[0].message.content
});

// 第二轮
messages.push({
role: 'user',
content: '它和 JavaScript 有什么区别?'
});

response = await openai.chat.completions.create({
model: 'deepseek-chat',
messages
});

console.log('AI:', response.choices[0].message.content);
}

下一步

理解了 OpenAI API 的基本使用后,我们将在下一节实现第一个 AI 对话程序。

导航

上一篇: 1.4 本教程学习路径

下一篇: 2.2 第一个 AI 对话程序