Files
yunzerwebsiteallinone/backend/src/views/apps/ai/README.md
T

99 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MCP 工具中心(AI 模块)
本模块为「AI 智能体」接入 **MCP(Model Context Protocol)** 工具调用能力:
- **MCP 市场**:内置一批可一键添加的服务,以及项目自带的「内置演示 MCP」(零配置,直接可用)。
- **选择即用**:在「我的服务」里通过「启用」开关控制哪些 MCP 在会话中被调用;**只有启用状态的服务** 才会注入到 AI 会话。
- **会话自动调用**:聊天时,AI 会自动决定是否调用已启用的 MCP 工具,前端实时展示工具调用卡片(参数 / 结果 / 状态)。
---
## 一、如何使用
1. 打开「AI 广场」→ 左侧边栏点击 **CPU(MCP 工具中心)** 按钮。
2. 「MCP 市场」页 → 点击「内置演示 MCP」的 **添加**(或添加天眼查/企查查等,需自行申请对应的 URL/Key)。
3. 切到「我的服务」页 → 把要用的服务 **启用** 开关打开;可点击「测试」验证连接并预览工具。
4. 回到聊天窗 → 提问。例如:
- `现在几点钟了?`(触发 `get_time`)
- `帮我计算 (3+5)*2`(触发 `calculate`)
- `连云港今天天气怎么样?`(触发 `weather_query`)
5. 回答过程中,AI 气泡内会出现工具调用卡片:展开可看参数与返回结果。
> 头部「MCP」绿色指示器表示当前会话已接入 N 个 MCP 工具。
## 二、手动新增 MCP 服务
「我的服务」→「新增配置」,支持三种传输:
| 传输 | 说明 | 必填字段 |
|---|---|---|
| **stdio** | 本地进程(MCP Server 以子进程方式启动) | 启动命令 command;可选参数 args(JSON数组)、环境变量 env(JSON对象) |
| **http** | Streamable HTTP 传输 | 服务地址 url;可选请求头 headers(JSON对象) |
| **sse** | 传统 SSE 传输 | 服务地址 url;可选请求头 headers(JSON对象) |
示例(stdio + npx 远程包,Windows 会自动用 `cmd /c` 包装):
```
命令: npx -y @modelcontextprotocol/server-everything
```
示例(http):
```
地址: https://mcp.tianyancha.com/mcp
请求头: {"Authorization":"Bearer 你的Key"}
```
## 三、内置演示 MCP(cmd/demo-mcp)
项目自带一个 Go 编写的 stdio MCP Server,提供 5 个工具,用于零配置验证全链路:
`get_time`(当前时间)、`calculate`(表达式计算)、`weather_query`(模拟天气)、`echo`、`get_user_profile`。
重新编译(如需):
```bash
cd go
go build -o bin/demo-mcp.exe ./cmd/demo-mcp
```
## 四、实现说明(文件清单)
### 后端(Go / Beego,`go/`)
| 文件 | 作用 |
|---|---|
| `models/backend_mcp_server.go` | MCP 服务器配置模型(传输、命令、URL、启用、状态、工具数) |
| `controllers/backend_mcp_server.go` | MCP 服务器接口:市场 / 增删改查 / 测试 / 工具发现 / 启停 |
| `services/mcp_client.go` | MCP 客户端管理器:stdio/http/sse 连接、工具列表、工具调用、连接缓存 |
| `services/mcp_market.go` | MCP 市场目录(内置演示 + 天眼查/企查查/前瞻/IT桔子/BOSS直聘) |
| `controllers/backend_ai_chat.go` | 聊天工具调用循环:注入已启用 MCP 工具 → LLM 返回 tool_calls → 执行 → 回填 → 流式输出 |
| `cmd/demo-mcp/main.go` | 内置演示 MCP Server(stdio) |
| `sql/create_backend_mcp_server.sql` | 建表 SQL(`yz_backend_mcp_server`) |
**SSE 事件扩展**(`POST /backend/ai/chat/send-stream`):
`session` / `tool_list`(本次启用的工具)/ `tool_start`(开始调用某工具)/ `tool_result`(工具返回)/ `content`(文本增量)/ `done` / `error`
### 前端(Vue3 + Element Plus,`backend/src/`)
| 文件 | 作用 |
|---|---|
| `views/apps/ai/components/mcpConfig.vue` | MCP 工具中心(市场 + 我的服务 + 新增/编辑 + 工具预览) |
| `views/apps/ai/components/chatWindow.vue` | 聊天窗:SSE 工具事件解析 + 工具调用卡片渲染 + MCP 状态指示 |
| `views/apps/ai/components/chatSidebar.vue` | CPU 按钮入口(标题更新为「MCP 工具中心」) |
| `api/ai.js` | MCP 服务器 / 市场 API 封装 |
### 模型要求
- 需支持 **Function Calling / Tool Calling**(OpenAI 兼容与 Anthropic 均已适配)。
- 已内置两种接入:OpenAI 兼容(含豆包/DeepSeek/OpenRouter 等)与 Anthropic。
## 五、依赖说明
- 新增 Go 依赖:`github.com/mark3labs/mcp-go v0.33.0`(MCP 官方协议的 Go 客户端/服务端库)。
- `go.mod` 的 `go` 指令由 `1.17` 调整为 `1.23`(mcp-go v0.33 的最低要求;本机 Go 1.25 完全兼容)。
- 数据库:需先执行 `sql/create_backend_mcp_server.sql`(本环境已执行建表)。
## 六、构建与运行
```bash
# 后端(go/ 目录)
go build -o main.exe .
./main.exe # 监听 9000
# 前端(backend/ 目录,Vue SPA)
npm run dev # 开发,vite 端口 4001,/api 代理到 9000
npm run build # 生产构建
```