使用说明
项目简介
'a2ajava' 是一个基于 Java 和 Spring Boot 构建的框架,旨在帮助开发者创建与大型语言模型 (LLM) 交互的应用后端。它实现了 Model Context Protocol (MCP) 的部分概念,特别侧重于工具 (Tools) 的注册与调用,并集成了 'tools4ai' 库来进行自然语言到工具调用的转换。该项目提供了一个基础框架,用于构建 MCP 服务器,以便为 LLM 客户端提供结构化的上下文和功能。
主要功能点
- AI 工具管理与声明: 框架允许定义和注册 Java 方法作为 AI 工具,并通过 MCP 标准接口向客户端声明这些工具的能力、参数和描述。
- 工具调用执行: 接收来自客户端的工具调用请求,根据请求中的工具名称和参数,执行对应的 Java 方法。
- 任务处理(示例): 提供基于 HTTP/SSE 的任务管理示例,展示如何处理长时间运行的任务,更新状态,并推送结果或中间产物(Artifact)。
- MCP 协议结构: 包含了 MCP 协议中关键数据结构(如请求、响应、工具、资源、Prompt 定义)的 Java 实现,为构建符合协议的服务提供基础。
- 集成 AI 处理库: 利用 'tools4ai' 等库将自然语言指令解析为具体的工具调用及其参数。
安装步骤
- 确保您的开发环境中已安装 Java Development Kit (JDK) 和 Maven。
- 克隆 GitHub 仓库:
git clone https://github.com/vishalmysore/a2ajava.git - 进入项目目录:
cd a2ajava - 使用 Maven 构建项目:
mvn clean install - 运行 Spring Boot 服务器:
服务器默认会在 'http://localhost:8080' 启动。mvn spring-boot:run
服务器配置 (供 MCP 客户端使用)
MCP 客户端需要知道如何启动服务器进程并与之通信。以下是 MCP 客户端通常需要的配置信息格式示例,用于启动此 Java 服务器作为子进程(假设使用 Stdio 传输协议):
{ "name": "A2A Java MCP Example Server", // 服务器的可读名称 "command": "java", // 用于启动服务器的可执行命令 "args": [ // 传递给命令的参数列表 "-jar", "path/to/your/downloaded/a2ajava.jar" // **请替换为实际构建生成的 jar 文件路径** ], "transport": "stdio", // 客户端与服务器通信的传输协议 (Stdio, WebSocket, SSE等) // 其他可选配置取决于客户端实现,例如工作目录等 // "initializationOptions": {} }
注意: 上述配置是标准的 MCP 客户端启动服务器进程的方式。本仓库的测试示例 'TaskClientExample' 使用了基于 HTTP/SSE 的自定义 API ('/tasks' 路径),这是一种不同的通信方式。实际使用时,如果客户端支持标准 MCP 协议,则需要确保服务器端通过 Stdio, WebSocket 或标准 MCP HTTP/JSON-RPC 端点暴露 MCP 服务(如 '/jsonrpc'),并且客户端配置中的 'transport' 和端口/URL 需要匹配。
基本使用方法
要使用此 MCP 服务器,您需要一个兼容 Model Context Protocol 的客户端(通常是集成到 LLM 应用或 IDE 中的组件)。
- 客户端连接: 客户端根据上述配置启动服务器进程,并通过指定的传输协议建立连接。
- 初始化: 客户端发送 'initialize' 请求给服务器,服务器响应其能力声明(如支持哪些内容类型、角色、工具有哪些)。
- 获取工具列表: 客户端可以发送 'tools/list' 请求,服务器会返回其注册的所有工具的列表及描述(例如 'TicketBookingAction' 中的订票工具)。
- 调用工具: 当 LLM 或客户端判断需要执行某个功能时,客户端会发送 'tools/call' 请求,指定工具名称和参数。服务器接收请求,利用集成的 AI 处理库解析自然语言输入(如“帮我订一张从纽约到洛杉矶明天机票”)并将其映射到内部工具方法和参数,执行该方法,并将结果包装在 'CallToolResult' 中返回给客户端。
- 资源和 Prompt (框架支持): 框架中定义了 'Resource' 和 'Prompt' 相关的 MCP 数据结构,理论上可以实现 'resources/list', 'resources/read', 'prompts/list', 'prompts/get' 等功能,提供上下文信息或Prompt模板。
- 进度通知: 对于长时间运行的操作(如示例中的订票任务),服务器可以发送 'notifications/progress' 通知(或示例中的自定义 SSE 事件)给客户端,报告处理进度。
项目的 'src/test/java/regression/client/TaskClientExample.java' 提供了一个使用 HTTP/SSE 方式与服务器 '/tasks' 端点交互的客户端示例,可以作为理解其API工作方式的参考。
信息
分类
AI与计算