为什么选 Claude API
Claude 是 Anthropic 开发的 AI 模型,在代码生成、长文本理解、指令遵循方面表现优秀。
Claude 3.5 Sonnet 是目前性价比最高的选择:
- 输入:$3 / 百万 tokens
- 输出:$15 / 百万 tokens
- 上下文窗口:200K tokens
第一步:获取 API Key
- 前往 console.anthropic.com
- 注册账号并充值(最低 $5)
- 进入 API Keys → Create Key
- 复制保存,只显示一次
第二步:安装 SDK
npm install @anthropic-ai/sdk第三步:基础调用
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
});
const message = await client.messages.create({
model: 'claude-3-5-sonnet-20241022',
max_tokens: 1024,
messages: [
{
role: 'user',
content: '用 TypeScript 写一个防抖函数',
},
],
});
console.log(message.content[0].text);第四步:流式输出(打字机效果)
// Express 接口示例
app.post('/api/chat', async (req, res) => {
const { message } = req.body;
// 设置 SSE 响应头
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
const stream = await client.messages.stream({
model: 'claude-3-5-sonnet-20241022',
max_tokens: 2048,
messages: [{ role: 'user', content: message }],
});
for await (const chunk of stream) {
if (chunk.type === 'content_block_delta' && chunk.delta.type === 'text_delta') {
res.write(`data: ${JSON.stringify({ text: chunk.delta.text })}
`);
}
}
res.write('data: [DONE]
');
res.end();
});第五步:多轮对话
// 维护对话历史
const conversationHistory: Array<{ role: 'user' | 'assistant'; content: string }> = [];
async function chat(userMessage: string): Promise<string> {
// 添加用户消息
conversationHistory.push({ role: 'user', content: userMessage });
const response = await client.messages.create({
model: 'claude-3-5-sonnet-20241022',
max_tokens: 1024,
system: '你是一个专业的编程助手,用中文回答问题,代码要有注释。',
messages: conversationHistory,
});
const assistantMessage = response.content[0].text;
// 添加 AI 回复到历史
conversationHistory.push({ role: 'assistant', content: assistantMessage });
return assistantMessage;
}第六步:系统提示词最佳实践
系统提示词(System Prompt)决定了 AI 的行为模式。
const systemPrompt = `
你是一个专业的客服助手,服务于一家在线教育平台。
你的职责:
1. 回答用户关于课程的问题
2. 帮助用户解决技术问题
3. 引导用户完成购买流程
你不应该:
1. 讨论与平台无关的话题
2. 提供竞争对手的信息
3. 做出超出你权限的承诺
回答风格:
- 简洁友好,不超过 200 字
- 如果不确定,说"我需要帮你转接人工客服"
`;费用控制技巧
// 限制对话历史长度,避免 token 超支
function trimHistory(history: Message[], maxMessages = 20): Message[] {
if (history.length <= maxMessages) return history;
// 保留最近的消息,但始终保留第一条(通常是重要的上下文)
return [history[0], ...history.slice(-(maxMessages - 1))];
}