项目简介

'ai-demo' 是一个演示 Symfony AI 组件的应用程序。它包含一个基于 Model Context Protocol (MCP) 标准构建的服务器实现,用于向 LLM(大型语言模型)客户端提供标准化上下文信息和功能。此 MCP 服务器通过 JSON-RPC 协议进行通信,并展示了如何注册和执行自定义工具,例如获取当前时间。

主要功能点

  • MCP 服务器功能: 提供符合 MCP 规范的服务器端服务,支持 JSON-RPC 协议与 LLM 客户端通信,实现会话管理和能力声明。
  • 工具注册与执行: 演示了如何注册一个名为 'current-time' 的工具,该工具可以根据可选的格式字符串返回当前的 UTC 时间。LLM 客户端可以通过 MCP 协议调用此工具获取实时信息。
  • 上下文提供: 作为 LLM 应用的后端,能够以标准化的方式提供上下文信息,增强 LLM 的功能和交互模式。

安装步骤

  1. 克隆仓库: 首先,通过 Git 命令将仓库克隆到你的本地计算机:
    git clone [email protected]:symfony/ai-demo.git
    cd ai-demo
  2. 安装 PHP 依赖: 进入仓库目录后,使用 Composer 安装所有必要的 PHP 依赖:
    composer install
  3. 启动 Docker 环境 (可选,用于运行完整的 Demo 应用程序): 如果你想运行完整的 Symfony AI Demo 应用程序,包括前端界面和各种聊天示例,你需要启动 Docker 环境。如果仅测试 MCP 服务器,此步骤不是必需的。
    docker compose up -d
  4. 配置 OpenAI API Key (可选,用于完整的 AI Demo 功能): 完整的 Demo 应用程序使用 OpenAI 的 GPT 和 Embeddings 模型。你需要一个有效的 OpenAI API Key,并将其配置为环境变量。如果仅测试 MCP 服务器的 'current-time' 工具,此步骤不是必需的。
    echo "OPENAI_API_KEY='sk-...'" > .env.local
  5. 初始化 Chroma DB (可选,用于完整的 AI Demo 功能): Chroma DB 是一个向量存储,用于存储聊天上下文的嵌入。如果仅测试 MCP 服务器的 'current-time' 工具,此步骤不是必需的。
    symfony console app:blog:embed -vv

MCP 服务器配置 (用于 MCP 客户端)

MCP 服务器是为 MCP 客户端(例如集成开发环境中的 LLM 插件)设计的。要让你的 MCP 客户端连接到此 Symfony MCP 服务器,你需要在客户端的设置中添加以下配置。请根据你的实际安装路径调整 'command' 中的路径。

{
    "servers": {
        "symfony": {
            "command": "php",
            "args": [
                "/your/full/path/to/bin/console",
                "mcp:server"
            ]
        }
    }
}

说明:

  • '"symfony"': 这是你在 MCP 客户端为该服务器实例定义的唯一名称。
  • '"command"': 指示 MCP 客户端如何启动 MCP 服务器进程。在这里,它指定使用 'php' 解释器来运行服务器。
  • '"args"': 这是一个数组,包含传递给 'command' 的参数。
    • 第一个参数 '"/your/full/path/to/bin/console"' 是 Symfony 应用程序的控制台脚本的完整路径。你需要将其替换为你的 'ai-demo' 仓库中 'bin/console' 文件的实际绝对路径。
    • 第二个参数 '"mcp:server"' 是 Symfony 应用程序中用于启动 MCP 服务的一个特定命令。

基本使用方法

  1. 启动 MCP 服务器: 你可以通过运行以下命令在终端中单独启动 MCP 服务器进行测试。服务器启动后会监听标准输入/输出,等待 JSON-RPC 请求。

    symfony console mcp:server
  2. 测试工具列表: 在 MCP 服务器运行的终端中,粘贴以下 JSON-RPC 请求,然后按回车键。服务器将返回所有可用的工具列表。

    {"method":"tools/list","jsonrpc":"2.0","id":1}

    你会看到服务器返回一个包含 'current-time' 工具信息的 JSON 响应。

  3. 调用 'current-time' 工具: 你可以尝试调用 'current-time' 工具来获取当前 UTC 时间。你可以通过 'format' 参数指定时间格式。

    {"method":"tools/call","params":{"name":"current-time","arguments":{"format":"H:i:s T"}},"jsonrpc":"2.0","id":2}

    服务器将返回当前的 UTC 时间,格式为你指定的值,例如 '"14:30:00 UTC"'。

信息

分类

AI与计算