aisapi
Version:
A JavaScript/TypeScript API library for multiple AI providers
231 lines (230 loc) • 10.9 kB
JavaScript
"use strict";
/**
* Anthropic (Claude) API使用示例
* 展示如何使用Claude的各项功能
*/
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("./index");
// 请将你的API密钥替换为实际值
// 推荐使用环境变量存储API密钥
const ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY || 'your-anthropic-api-key';
function main() {
return __awaiter(this, void 0, void 0, function* () {
console.log('===== Anthropic(Claude) API使用示例 =====');
// 创建Claude实例
const claude = new index_1.Claude({
apiKey: ANTHROPIC_API_KEY,
model: 'claude-3-7-sonnet-20250219', // 默认使用Sonnet模型,开发者可以根据需要更改
anthropicVersion: '2024-06-23' // 使用最新API版本
});
// 1. 基本文本生成
console.log('\n1. 基本文本生成');
try {
const result = yield claude.generateText({
prompt: '请用简短的语言解释什么是大型语言模型',
maxTokens: 200,
temperature: 0.7,
systemMessage: '你是一位AI研究专家,请简明扼要地回答问题。'
});
console.log('回答:', result.text);
console.log('Token使用:', result.usage);
}
catch (error) {
console.error('文本生成错误:', error.message);
}
// 2. 聊天完成示例
console.log('\n2. 多轮对话示例');
try {
const chatResult = yield claude.chatCompletion({
messages: [
{ role: 'user', content: '你好,请介绍一下自己' },
{ role: 'assistant', content: '我是Claude,一个由Anthropic开发的AI助手。我擅长自然语言处理、回答问题和提供帮助。' },
{ role: 'user', content: '你能帮我写一首关于春天的短诗吗?' }
],
systemMessage: '你是一位才华横溢的诗人,善于创作优美的诗歌。请保持诗歌简短优雅。',
temperature: 0.8,
maxTokens: 250
});
console.log('Claude回答:');
console.log(chatResult.text);
console.log('\nToken使用:', chatResult.usage);
}
catch (error) {
console.error('聊天完成错误:', error.message);
}
// 3. JSON格式生成
console.log('\n3. JSON格式生成');
try {
const jsonResult = yield claude.generateJSON({
prompt: '请给我三个世界著名的科学家,包含姓名、主要成就和出生年份',
temperature: 0.5,
systemMessage: '你是数据格式化专家。请将回答格式化为有效的JSON,包含数组和对象。'
});
console.log('JSON结果:');
console.log(JSON.stringify(jsonResult.data, null, 2));
}
catch (error) {
console.error('JSON生成错误:', error.message);
}
// 4. 计算token数量
console.log('\n4. 计算token数量');
try {
const tokensResult = yield claude.countTokens([
{ role: 'user', content: '什么是量子计算?它与传统计算有什么区别?' }
], '你是一位量子计算专家,请详细解释相关概念。');
console.log('Token计数结果:');
console.log(`- 输入token数: ${tokensResult.input_tokens}`);
}
catch (error) {
console.error('计算token错误:', error.message);
}
// 5. 工具调用示例
console.log('\n5. 工具调用示例');
try {
const toolsResult = yield claude.chatCompletion({
messages: [
{ role: 'user', content: '我想了解上海今天的天气' }
],
systemMessage: '你是一位助手,可以调用天气API来回答用户问题。',
tools: [
{
name: 'get_weather',
description: '获取指定城市的天气信息',
input_schema: {
type: 'object',
properties: {
location: {
type: 'string',
description: '城市名称,如"北京"、"上海"等'
},
unit: {
type: 'string',
enum: ['celsius', 'fahrenheit'],
description: '温度单位,默认为摄氏度(celsius)'
}
},
required: ['location']
}
}
]
});
console.log('工具调用结果:');
console.log(toolsResult.text);
// 提取工具调用数据(如果有)
const rawResponse = toolsResult.rawResponse;
const toolUses = rawResponse.content.filter((item) => item.type === 'tool_use');
if (toolUses.length > 0) {
console.log('\n工具调用详情:');
console.log(JSON.stringify(toolUses, null, 2));
// 在实际应用中,这里可以执行工具调用,然后将结果返回给Claude
console.log('\n模拟工具调用并返回结果...');
// 假设我们有一个天气API返回的结果
const weatherResult = {
location: '上海',
temperature: 24,
condition: '多云',
humidity: 65,
wind: '东北风 3级'
};
// 继续对话,发送工具结果
const continueResult = yield claude.chatCompletion({
messages: [
{ role: 'user', content: '我想了解上海今天的天气' },
{
role: 'assistant',
content: JSON.stringify([{
type: 'tool_use',
id: toolUses[0].id,
name: 'get_weather',
input: { location: '上海', unit: 'celsius' }
}])
},
{
role: 'user',
content: JSON.stringify([{
type: 'tool_result',
tool_use_id: toolUses[0].id,
content: JSON.stringify(weatherResult)
}])
}
],
systemMessage: '你是一位助手,可以调用天气API来回答用户问题。请根据API返回的结果,提供友好的天气描述。'
});
console.log('\n带工具结果的回答:');
console.log(continueResult.text);
}
}
catch (error) {
console.error('工具调用错误:', error.message);
}
// 6. 流式输出示例(此示例仅展示概念,实际使用需要处理流式数据)
console.log('\n6. 流式输出示例');
try {
console.log('开始流式输出(此处仅展示请求结构,未处理流式数据):');
const stream = yield claude.createStreamingChatCompletion({
messages: [
{ role: 'user', content: '写一个简短的科幻故事开头' }
],
maxTokens: 150,
temperature: 0.9
});
console.log('流已创建,在实际应用中,您需要处理来自ReadableStream的数据块');
console.log('示例处理代码:');
console.log(`
const reader = stream.getReader();
while (true) {
const { done, value } = await reader.read();
if (done) break;
// 处理流式数据块
const decoder = new TextDecoder();
const chunk = decoder.decode(value);
// 解析并显示增量文本
}
`);
}
catch (error) {
console.error('流式输出错误:', error.message);
}
// 7. 多模态示例(图像)
console.log('\n7. 多模态示例(图像分析)');
console.log('注意: 这个示例需要有一个可访问的图像URL');
const imageUrl = 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg';
try {
console.log(`使用图像URL: ${imageUrl}`);
const imageResult = yield claude.generateTextWithImage({
prompt: '请详细描述这张图片,包括你看到的主要元素和整体氛围。',
image: {
url: imageUrl
},
maxTokens: 300,
temperature: 0.7,
systemMessage: '你是一位细致的图像分析师,请提供详细的图像描述。'
});
console.log('图像分析结果:');
console.log(imageResult.text);
console.log('\nToken使用:', imageResult.usage);
}
catch (error) {
console.error('图像分析错误:', error.message);
}
});
}
// 检查API密钥是否已设置
if (ANTHROPIC_API_KEY === 'your-anthropic-api-key') {
console.log('请设置你的Anthropic API密钥后再运行此示例。');
console.log('可以通过环境变量设置: export ANTHROPIC_API_KEY="你的密钥"');
}
else {
// 运行示例
main().catch(console.error);
}
//# sourceMappingURL=example-anthropic.js.map