在当前的 AI 开发环境中,开发者经常需要与多个不同的大语言模型服务进行交互。每个服务都有自己独特的 API 格式、认证方式和调用规范,这给开发和测试工作带来了不少复杂性。LLM Caller 正是为了解决这一痛点而设计的命令行工具。
🎯 核心价值
LLM Caller 是一个基于 Go 语言开发的 CLI 工具,通过 JSON 模板的方式统一了不同 LLM 服务的调用接口。它的核心优势包括:
- 🔗 统一接口:通过模板系统抽象不同 LLM 服务的 API 差异
- ⚙️ 灵活配置:支持多种变量类型和配置方式
- 🌐 跨平台支持:提供 Linux、macOS 和 Windows 的预编译二进制文件
- 📋 模板管理:内置模板下载、验证和管理功能
🚀 安装配置
下载安装
方法一:从源码编译
git clone https://github.com/nodewee/llm-caller.git
cd llm-caller
go build -o llm-caller
方法二:使用 go install
如果已经安装了 Go 环境,可以使用 go install 命令安装:
go install github.com/nodewee/llm-caller@latest
方法二:下载预编译二进制文件
打开 https://github.com/nodewee/llm-caller/releases/ ,选择适合你操作系统的版本,下载二进制文件。
下载后,将文件改名为 llm-caller
,然后添加执行权限和移动到 PATH 目录下。
# macOS 安装示例
chmod +x llm-caller
xattr -d com.apple.quarantine ./llm-caller
mv ./llm-caller ~/.local/bin/
# Linux 安装示例
chmod +x llm-caller
mv ./llm-caller ~/.local/bin/
初始配置
安装完成后,首先运行环境检查:
llm-caller doctor
这个命令会检查配置文件、模板目录、API 密钥等环境状态,并提供相应的配置建议。
API 密钥配置
LLM Caller 支持三种 API 密钥配置方式,按优先级排序:
1. 命令行参数(最高优先级)
llm-caller call deepseek-chat --var content="Hello" --api-key sk-xxx
2. 配置文件
# 设置密钥文件路径
llm-caller config set secret_file ~/.llm-caller/keys.json
# 创建密钥文件
cat > ~/.llm-caller/keys.json << EOF
{
"deepseek_api_key": "sk-xxx",
"openai_api_key": "sk-xxx",
"aliyun_api_key": "sk-xxx"
}
EOF
3. 环境变量
export DEEPSEEK_API_KEY="sk-xxx"
export OPENAI_API_KEY="sk-xxx"
export ALIYUN_API_KEY="sk-xxx"
🔧 核心功能
模板系统
LLM Caller 的核心是基于 JSON 的模板系统。每个模板定义了如何调用特定的 LLM 服务。以下是一个标准的 DeepSeek 模板示例:
{
"provider": "deepseek",
"title": "DeepSeek Chat API",
"description": "DeepSeek 聊天对话模板",
"request": {
"url": "https://api.deepseek.com/v1/chat/completions",
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{api_key}}"
},
"body": {
"model": "deepseek-chat",
"messages": [
{
"role": "user",
"content": "{{content}}"
}
],
"temperature": 0.7,
"max_tokens": 2048
}
},
"response": {
"path": "choices[0].message.content"
}
}
模板的关键组成部分:
- provider:服务提供商标识
- title 和 description:模板的标题和描述信息(可选)
- request:HTTP 请求配置,包括 URL、方法、头部和请求体
- response:响应解析配置,指定如何从返回的 JSON 中提取内容
- 变量占位符:使用
{{variable_name}}
格式进行变量替换
变量系统
LLM Caller 支持三种变量类型:
1. 文本变量
llm-caller call deepseek-chat --var content:text:"Hello world"
2. 文件变量
llm-caller call translate --var content:file:document.txt
3. Base64 变量
llm-caller call analyze --var content:base64:SGVsbG8gd29ybGQ=
模板管理
下载开源模板
# 从 GitHub 下载模板(默认下载到 ~/.llm-caller/templates/ 目录)
llm-caller template download https://github.com/nodewee/llm-calling-templates/blob/main/deepseek-emoji-suggest.json
查看模板
# 列出所有可用模板
llm-caller template list
# 查看模板内容
llm-caller template show deepseek-emoji-suggest
# 验证模板格式
llm-caller template validate deepseek-emoji-suggest
模板实例
- 用 DeepSeek 根据文本建议 emoji 表情: https://github.com/nodewee/llm-calling-templates/blob/main/deepseek-emoji-suggest.json
- 用 DeepSeek 审查合同文本: https://github.com/nodewee/llm-calling-templates/blob/main/deepseek-contract-review.json
- 用 阿里云 QWen 对图像进行 OCR 文字提取: https://github.com/nodewee/llm-calling-templates/blob/main/qwen-vl-ocr-image.json
具体用法
示例 1:Emoji 建议
# 为文本内容推荐合适的 emoji
llm-caller call deepseek-emoji-suggest --var text:text:"你好"
示例 2:OCR 文字提取
# 从图片文件提取文字
llm-caller call qwen-vl-ocr-image --var image_url:file:图片.jpg -o 提取结果.txt
示例 3:合同审查
# 审查合同文本(从文件读取)
llm-caller call deepseek-contract-review --var text:file:合同.txt -o 审查结果.txt
⚙️ 配置管理
查看当前配置
llm-caller config list
自定义模板目录
# 设置自定义模板目录
llm-caller config set template_dir ~/my-llm-templates
# 重置为默认值
llm-caller config unset template_dir
配置文件位置
配置文件默认存储在 ~/.llm-caller/config.yaml
,包含以下设置:
template_dir
:模板文件存储目录secret_file
:API 密钥文件路径
🔧 故障排除 / 常见问题
1. API 密钥未找到
# 检查环境配置
llm-caller doctor
# 设置密钥文件
llm-caller config set secret_file ~/.llm-caller/keys.json
2. 模板文件未找到
# 列出可用模板
llm-caller template list
# 下载官方模板
llm-caller template download <github-raw-url>
3. 网络连接问题
# 检查网络连接和 API 端点
curl -I https://api.deepseek.com/v1/chat/completions
4. API 端点错误
确保使用正确的 API 端点:
- DeepSeek:
https://api.deepseek.com/v1/chat/completions
- OpenAI:
https://api.openai.com/v1/chat/completions
模板设计建议
1. 使用描述性的变量名
{
"body": {
"messages": [
{
"role": "user",
"content": "请将以下{{source_language}}文本翻译成{{target_language}}:{{text_content}}"
}
]
}
}
2. 合理设置模型参数
{
"body": {
"model": "deepseek-chat",
"temperature": 0.1, // 翻译任务使用较低温度,可参考大模型的官方建议
"max_tokens": 4096, // 设置合适的最大 token 数,根据不同模型和任务需求调整
"messages": [
// ... 消息配置
]
}
}
🔗 相关资源
项目地址: https://github.com/nodewee/llm-caller
我开源的模板仓库: https://github.com/nodewee/llm-calling-templates
📋 总结
LLM Caller 作为 LLM 服务调用工具,通过统一的模板系统与灵活的配置管理,帮助工作流开发者简化多服务集成,提升开发效率,适用于各种 LLM 应用场景。
作为命令行工具,LLM Caller 易于集成进现有工作流,广泛支持以下任务:
- 批量翻译、摘要与格式转换
- 批量代码审查与质量优化
- 内容分析、分类标注、信息提取
- 文档和数据自动化处理
- 多模型对比测试与效果评估
主要优势:
- ✅ 简化集成:统一不同 LLM 服务的调用方式
- ✅ 提高效率:减少重复编写 API 调用逻辑
- ✅ 灵活扩展:模板系统支持快速适配新服务
- ✅ 集中管理:统一管理 API 配置与密钥,便于维护
无论是简单的文本处理,还是复杂的批量任务,LLM Caller 均能助力开发者高效构建和维护基于 LLM 的自动化工作流。
—— 缓坡漫步 / 工具和工作流