特工装备
具有MCP服务器支持、内置本机工具和可插拔LLM后端的CLI代理线束。它通过以下方式将任何支持的LLM连接到外部工具 模型上下文协议 以及进程内本地工具,管理代理工具使用循环,以便LLM可以调用工具、处理结果并迭代以获得答案。
线束本身不包含模型逻辑,它协调LLM和工具之间的连接。
需求
- Python 3.11+
- 紫外线 包管理器
- Node.js/npm(仅当使用通过以下方式运行的MCP服务器时
npx)
快速开始
# One-shot query using Anthropic (default provider)
export ANTHROPIC_API_KEY="your-key"
uv run agent-harness "What time is it?"
# Interactive REPL
uv run agent-harness
# With a config file
uv run agent-harness -c config.json
# Override provider and model
uv run agent-harness -p openai -m gpt-4o "Summarize this project"配置
代理可以配置JSON文件、CLI标志或两者。CLI标志覆盖配置值。
| JSON键 | CLI标志 | 默认值 |
|---|---|---|
provider | -p / --provider | anthropic |
model | -m / --model | 提供程序默认值(硬编码claude-sonnet-4-5-20250929(Anthropic),gpt-4o(OpenAI) |
apiKey | -k / --api-key | ANTHROPIC_API_KEY 或 OPENAI_API_KEY 有人是。 |
baseUrl | -b / --base-url | 提供程序默认值 |
systemPrompt | -s / --system-prompt | You are a helpful assistant. |
mcpServers | 仅配置 | 无 |
示例配置
{
"provider": "anthropic",
"model": "claude-sonnet-4-5-20250929",
"systemPrompt": "You are a helpful assistant.",
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
"env": {}
}
}
}提供商
该线束通过可插拔后端系统支持多个LLM提供程序。Anthropic和OpenAI有专门的实现,因为它们的API在有线格式上有所不同。任何与OpenAI兼容的API(Together.ai、Groq、Ollama等)都通过具有自定义功能的OpenAI提供商工作 base_url.
| 提供者 | 示例用法 |
|---|---|
| 人类学 | uv run agent-harness -p anthropic -m claude-sonnet-4-5-20250929 "query" |
| OpenAI | uv run agent-harness -p openai -m gpt-4o "query" |
| Together.ai | uv run agent-harness -p together -b https://api.together.xyz/v1 -m meta-llama/Llama-3-70B "query" |
| Groq | uv run agent-harness -p groq -b https://api.groq.com/openai/v1 -m llama3-70b-8192 "query" |
| 奥拉马 | uv run agent-harness -p ollama -b http://localhost:11434/v1 -m llama3 "query" |
together, groq,以及 ollama 是OpenAI提供者的别名——它们使用相同的代码,只是指向不同的URL。
MCP服务器
MCP服务器是通过stdio向代理公开工具的外部进程。代理将它们作为子流程生成,在启动时发现它们的工具,并在代理循环期间将工具调用路由到相应的服务器。
任何支持stdio传输的MCP服务器都可以工作。在中配置它们 mcpServers 配置文件的一部分:
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
},
"huggingface": {
"command": "npx",
"args": ["-y", "@llmindset/hf-mcp-server"],
"env": {
"HF_TOKEN": "hf_..."
}
}
}
}如果两个服务器公开了同名工具,则第二个工具将以服务器名称作为前缀(例如。 huggingface__search).
内置原生工具
本机工具在进程内运行,无需外部服务器。在路由工具调用时,在MCP工具之前检查它们。
| 工具 | 说明 |
|---|---|
get_current_datetime | 返回ISO 8601中的当前日期/时间 |
REPL命令
| 命令 | 描述 |
|---|---|
/quit | 退出REPL |
/reset | 清除对话历史记录 |
运作原理
- CLI解析配置和标志,选择提供程序类并对其进行配置
- 生成MCP服务器并发现其工具
- 用户的消息与所有可用工具一起发送到LLM
- 如果LLM返回工具调用,代理将执行它们(首先是本机工具,然后是MCP),并将结果发送回LLM
- 重复步骤3-4,直到LLM返回文本响应(或达到20次迭代)
项目结构
src/agent_harness/
├── cli.py # Entry point, argument parsing, REPL loop
├── config.py # Config dataclass and JSON loading
├── agent.py # Agentic tool-use loop
├── providers/
│ ├── __init__.py # Provider registry and factory
│ ├── base.py # LLMProvider ABC and shared data types
│ ├── anthropic.py # Anthropic Claude implementation
│ └── openai.py # OpenAI-compatible implementation
├── mcp/
│ └── manager.py # Multi-server MCP connections and tool routing
└── native_tools/
├── registry.py # NativeTool ABC and registry
└── builtin/
└── datetime_tool.py添加提供者和工具
添加提供者
- 子类
LLMProvider在providers/ - 实施
configure(),send(),send_streaming(),以及format_tool_results() - 在中注册
providers/__init__.py:register_provider("name", MyProvider)
添加本机工具
- 子类
NativeTool在native_tools/builtin/ - 实施
get_tools()和call() - 在中注册
cli.py:native_tool_registry.register(MyTool())
贡献者
| :---: | :---: | | 💻 🏗️ | 🤖 💻 📝 |
