本文将教你如何在 Linux 环境下,使用 Anthropic 官方提供的 Node.js SDK (@anthropic-ai/sdk) 来构建强大的 AI 命令行工具。
我们将从零开始,最终实现一个支持流式输出(Streaming)的命令行聊天机器人。
1. 环境准备
确保你的 Linux 系统已安装 Node.js (建议 v18+)。
# 检查 Node.js 版本
node -v
# 检查 npm 版本
npm -v
获取 API Key
- 3. 在 Linux 终端中设置为环境变量(建议添加到
~/.bashrc 或 ~/.zshrc):
export ANTHROPIC_API_KEY='sk-ant-api03-...'
如果不想付费可从该链接领取免费Claude的额度:
https://api.code-relay.com/register?aff=coAt
2. 项目初始化
创建一个新目录并初始化项目:
mkdir claude-cli-tool
cd claude-cli-tool
npm init -y
修改 package.json,添加 "type": "module" 以支持 ES Modules(推荐):
{
"name": "claude-cli-tool",
"version": "1.0.0",
"type": "module",
"dependencies": {}
}
安装官方 SDK:
npm install @anthropic-ai/sdk dotenv
(可选:安装 dotenv 用于从 .env 文件加载 key,如果不想用系统环境变量的话)
3. 基础实战:Hello Claude
创建文件 index.js,编写最简单的调用代码。
import Anthropic from '@anthropic-ai/sdk';
// 1. 初始化客户端
// 默认会自动读取 process.env.ANTHROPIC_API_KEY
const anthropic = new Anthropic();
async function main() {
console.log("正在连接 Claude...");
// 2. 发送请求
const message = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022", // 使用最新的 Sonnet 模型
max_tokens: 1024,
messages: [
{ role: "user", content: "用一句话解释什么是 Linux 的 inode?" }
]
});
// 3. 输出结果
console.log("\nClaude 回复:");
console.log(message.content[0].text);
}
main().catch(console.error);
运行:
node index.js
4. 进阶实战:打造流式 CLI 聊天机器人
命令行工具最重要的是实时反馈。Claude SDK 原生支持 Stream,我们可以利用它做一个打字机效果的聊天工具。
创建文件 chat.js:
import Anthropic from '@anthropic-ai/sdk';
import readline from 'readline';
const anthropic = new Anthropic();
// 创建命令行交互接口
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// 维护对话历史
let conversationHistory = [];
console.log("\x1b[36m%s\x1b[0m", "--- Claude CLI Chat (输入 'exit' 退出) ---");
// 封装提问函数
function askQuestion() {
rl.question('\n\x1b[32mYou: \x1b[0m', async (input) => {
if (input.toLowerCase() === 'exit') {
rl.close();
return;
}
// 添加用户消息到历史
conversationHistory.push({ role: "user", content: input });
process.stdout.write('\x1b[35mClaude: \x1b[0m');
try {
// 创建流式请求
const stream = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 4096,
messages: conversationHistory, // 传入完整的历史记录
stream: true, // 开启流式模式
});
let fullResponse = "";
// 实时处理流事件
for await (const event of stream) {
if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {
process.stdout.write(event.delta.text);
fullResponse += event.delta.text;
}
}
// 记录助手回复到历史,以便下一轮对话使用
conversationHistory.push({ role: "assistant", content: fullResponse });
// 继续下一轮对话
askQuestion();
} catch (error) {
console.error("\nError:", error.message);
rl.close();
}
});
}
// 启动
askQuestion();
运行:
node chat.js
现在你拥有了一个支持上下文记忆、打字机效果的终端聊天工具!
5. 高级技巧:System Prompts (角色设定)
在 Linux 运维中,你可能需要一个专门的 "Shell 专家"。
const stream = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
// 核心:设置 system prompt
system: "你是一个资深的 Linux 运维工程师。回答请简练,优先给出 Shell 命令,并简要解释参数。",
messages: conversationHistory,
stream: true,
});
6. 将脚本变为系统命令
为了方便在任何目录下使用,我们可以将其变为全局命令。
- 1. 在
chat.js 第一行添加 Shebang:#!/usr/bin/env node
import Anthropic from '@anthropic-ai/sdk';
// ... 后面的代码
- 2. 赋予执行权限:
chmod +x chat.js
- 3. 建立软链接到
/usr/local/bin (需要 sudo):sudo ln -s $(pwd)/chat.js /usr/local/bin/claude-chat
现在,你在终端任何位置输入 claude-chat 就可以直接呼出你的 AI 助手了!
7. 常见问题排查
- • Error: 401 Unauthorized: 检查环境变量
ANTHROPIC_API_KEY 是否正确导出。 - • Error: 400 Invalid Request: 检查
messages 数组格式,确保 role 交替出现(user -> assistant -> user)。 - • Connection Timeout: Linux 服务器如果需通过代理访问外网,需设置
https_proxy 环境变量,或在 SDK 初始化时配置 agent。
import { HttpsProxyAgent } from 'https-proxy-agent';
const anthropic = new Anthropic({
httpAgent: new HttpsProxyAgent('http://127.0.0.1:7890') // 如果有代理
});
通过官方 SDK,你可以轻松将 Claude 集成到你的 CI/CD 脚本、自动化运维工具或个人工作流中。Enjoy coding!