Speelka Agent

Speelka Agent

基于 MCP 的通用 LLM 代理

korchasa

研究与数据
访问服务器

README

Speelka Agent

基于模型上下文协议 (MCP) 的通用 LLM 代理,能够利用来自其他 MCP 服务器的工具。

flowchart TB
    User["任何 MCP 客户端"] --> |"1. 请求"| Agent["Speelka Agent"]
    Agent --> |"2. 格式化提示"| LLM["LLM 服务"]
    LLM --> |"3. 工具调用"| Agent
    Agent --> |"4. 执行工具"| Tools["外部 MCP 工具"]
    Tools --> |"5. 返回结果"| Agent
    Agent --> |"6. 处理重复"| LLM
    Agent --> |"7. 最终答案"| User

主要特性

  • 精确的代理定义: 通过提示工程定义详细的代理行为
  • 客户端上下文优化: 减少客户端的上下文大小,以提高令牌使用效率
  • LLM 灵活性: 在客户端和代理端之间使用不同的 LLM 提供商
  • 集中式工具管理: 所有可用工具的单一控制点
  • 多种集成选项: 支持 MCP stdio、MCP HTTP 和 Simple HTTP API
  • 内置可靠性: 用于处理瞬时故障的重试机制
  • 可扩展性: 无需客户端更改即可扩展系统行为
  • MCP 感知日志记录: 具有 MCP 通知的结构化日志记录
  • 令牌管理: 自动令牌计数和历史压缩
  • 灵活的配置: 支持环境变量、YAML 和 JSON 配置文件

快速开始

前提条件

  • Go 1.19 或更高版本
  • LLM API 凭据 (OpenAI 或 Anthropic)
  • 外部 MCP 工具 (可选)

安装

git clone https://github.com/korchasa/speelka-agent-go.git
cd speelka-agent-go
go build ./cmd/server

配置

可以使用 YAML、JSON 或环境变量提供配置。

注意: ./examples 目录已弃用,将在未来版本中删除。请改用 ./site/examples 目录中的示例。

示例配置文件位于 site/examples 目录中:

  • site/examples/simple.yaml: YAML 格式的基本代理配置(首选)
  • site/examples/ai-news.yaml: YAML 格式的 AI 新闻代理配置(首选)
  • site/examples/simple.json: JSON 格式的基本代理配置
  • site/examples/simple.env: 作为环境变量的基本代理配置

这是一个简单的 YAML 配置示例:

agent:
  name: "simple-speelka-agent"
  version: "1.0.0"

  # 工具配置
  tool:
    name: "process"
    description: "用于使用 LLM 处理用户查询的处理工具"
    argument_name: "input"
    argument_description: "要处理的用户查询"

  # LLM 配置
  llm:
    provider: "openai"
    api_key: ""  # 为了安全起见,通过环境变量设置
    model: "gpt-4o"
    temperature: 0.7
    prompt_template: "你是一个乐于助人的 AI 助手。 回应以下请求:{{input}}。 提供详细且有用的回复。 可用工具:{{tools}}"

  # MCP 服务器连接
  connections:
    mcpServers:
      time:
        command: "docker"
        args: ["run", "-i", "--rm", "mcp/time"]

      filesystem:
        command: "mcp-filesystem-server"
        args: ["/path/to/directory"]

# 运行时配置
runtime:
  log:
    level: "info"

  transports:
    stdio:
      enabled: true

使用环境变量

所有环境变量都以 SPL_ 为前缀:

环境变量 默认值 描述
代理配置
SPL_AGENT_NAME 必需 代理的名称
SPL_AGENT_VERSION "1.0.0" 代理的版本
工具配置
SPL_TOOL_NAME 必需 代理提供的工具的名称
SPL_TOOL_DESCRIPTION 必需 工具功能的描述
SPL_TOOL_ARGUMENT_NAME 必需 工具的参数名称
SPL_TOOL_ARGUMENT_DESCRIPTION 必需 工具参数的描述
LLM 配置
SPL_LLM_PROVIDER 必需 LLM 服务的提供商(例如,“openai”、“anthropic”)
SPL_LLM_API_KEY 必需 LLM 提供商的 API 密钥
SPL_LLM_MODEL 必需 模型名称(例如,“gpt-4o”、“claude-3-opus-20240229”)
SPL_LLM_MAX_TOKENS 0 要生成的最大令牌数(0 表示无限制)
SPL_LLM_TEMPERATURE 0.7 用于生成随机性的温度参数
SPL_LLM_PROMPT_TEMPLATE 必需 系统提示的模板(必须包含与 SPL_TOOL_ARGUMENT_NAME 值和 {{tools}} 匹配的占位符)
聊天配置
SPL_CHAT_MAX_ITERATIONS 25 LLM 的最大迭代次数
SPL_CHAT_MAX_TOKENS 0 聊天历史记录中的最大令牌数(0 表示基于模型)
SPL_CHAT_COMPACTION_STRATEGY "delete-old" 用于压缩聊天历史记录的策略(“delete-old”、“delete-middle”)
LLM 重试配置
SPL_LLM_RETRY_MAX_RETRIES 3 LLM API 调用的最大重试次数
SPL_LLM_RETRY_INITIAL_BACKOFF 1.0 初始退避时间(秒)
SPL_LLM_RETRY_MAX_BACKOFF 30.0 最大退避时间(秒)
SPL_LLM_RETRY_BACKOFF_MULTIPLIER 2.0 用于增加退避时间的乘数
MCP 服务器配置
SPL_MCPS_0_ID "" 第一个 MCP 服务器的标识符
SPL_MCPS_0_COMMAND "" 要为第一个服务器执行的命令
SPL_MCPS_0_ARGS "" 作为空格分隔字符串的命令参数
SPL_MCPS_0_ENV_* "" 服务器的环境变量(以 SPL_MCPS_0_ENV_ 为前缀)
SPL_MCPS_1_ID 等。 "" 其他服务器的配置(递增索引)
MCP 重试配置
SPL_MSPS_RETRY_MAX_RETRIES 3 MCP 服务器连接的最大重试次数
SPL_MSPS_RETRY_INITIAL_BACKOFF 1.0 初始退避时间(秒)
SPL_MSPS_RETRY_MAX_BACKOFF 30.0 最大退避时间(秒)
SPL_MSPS_RETRY_BACKOFF_MULTIPLIER 2.0 用于增加退避时间的乘数
运行时配置
SPL_LOG_LEVEL "info" 日志级别(debug、info、warn、error)
SPL_LOG_OUTPUT "stderr" 日志输出目标(stdout、stderr、文件路径)
SPL_RUNTIME_STDIO_ENABLED true 启用 stdin/stdout 传输
SPL_RUNTIME_STDIO_BUFFER_SIZE 8192 stdio 传输的缓冲区大小
SPL_RUNTIME_HTTP_ENABLED false 启用 HTTP 传输
SPL_RUNTIME_HTTP_HOST "localhost" HTTP 服务器的主机
SPL_RUNTIME_HTTP_PORT 3000 HTTP 服务器的端口

有关配置选项的更多详细信息,请参阅 环境变量参考

运行代理

守护程序模式 (HTTP 服务器)

./speelka-agent --daemon [--config config.yaml]

CLI 模式 (标准输入/输出)

./speelka-agent [--config config.yaml]

使用示例

HTTP API

在守护程序模式下运行时,代理公开 HTTP 端点:

# 向代理发送请求
curl -X POST http://localhost:3000/message -H "Content-Type: application/json" -d '{
  "method": "tools/call",
  "params": {
    "name": "process",
    "arguments": {
      "input": "你的查询内容"
    }
  }
}'

外部工具集成

在 YAML 配置文件中使用 MCP 协议连接到外部工具:

agent:
  # ... 其他代理配置 ...
  connections:
    mcpServers:
      # 用于 Playwright 浏览器自动化的 MCP 服务器
      playwright:
        command: "mcp-playwright"
        args: []

      # 用于文件系统操作的 MCP 服务器
      filesystem:
        command: "mcp-filesystem-server"
        args: ["."]

或者使用环境变量:

# 用于 Playwright 浏览器自动化的 MCP 服务器
export SPL_MCPS_0_ID="playwright"
export SPL_MCPS_0_COMMAND="mcp-playwright"
export SPL_MCPS_0_ARGS=""

# 用于文件系统操作的 MCP 服务器
export SPL_MCPS_1_ID="filesystem"
export SPL_MCPS_1_COMMAND="mcp-filesystem-server"
export SPL_MCPS_1_ARGS="."

支持的 LLM 提供商

  • OpenAI: GPT-3.5, GPT-4, GPT-4o
  • Anthropic: Claude 模型

文档

有关更多详细信息,请参阅:

开发

运行测试

go test ./...

辅助命令

run 脚本提供了用于常见操作的命令:

# 开发
./run build        # 构建项目
./run test         # 运行带有覆盖率的测试
./run check        # 运行所有检查
./run lint         # 运行 linter

# 交互
./run call         # 使用简单查询进行测试
./run call-multistep # 使用多步骤查询进行测试
./run call-news    # 测试新闻代理
./run fetch_url    # 使用 MCP 获取 URL

# 检查
./run inspect      # 使用 MCP 检查器运行

有关更多选项,请参阅 命令参考

许可证

MIT 许可证

推荐服务器

Crypto Price & Market Analysis MCP Server

Crypto Price & Market Analysis MCP Server

一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。

精选
TypeScript
MCP PubMed Search

MCP PubMed Search

用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。

精选
Python
mixpanel

mixpanel

连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

精选
TypeScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Nefino MCP Server

Nefino MCP Server

为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。

官方
Python
Vectorize

Vectorize

将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。

官方
JavaScript
Mathematica Documentation MCP server

Mathematica Documentation MCP server

一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。

本地
Python
kb-mcp-server

kb-mcp-server

一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。

本地
Python
Research MCP Server

Research MCP Server

这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

本地
Python
Cryo MCP Server

Cryo MCP Server

一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。

本地
Python