update at 2025-10-15 15:07:45

This commit is contained in:
douboer
2025-10-15 15:07:45 +08:00
parent eb8fb51283
commit 901d00e4e1
21 changed files with 4030 additions and 57 deletions

370
docs/QUICK_TEST_GUIDE.md Normal file
View File

@@ -0,0 +1,370 @@
# Cherry Studio 架构快速测试指南
## 🎯 测试目标
验证 Cherry Studio 风格的 MCP 工具调用是否正常工作:
- ✅ 工具名称前缀serverName__toolName
- ✅ System Prompt 自动生成
- ✅ AI 自动生成参数
- ✅ 工具名称解析和执行
- ✅ 完整对话流程
## 📋 准备工作
### 1. 启动服务
**后端服务器**
```bash
cd /Users/gavin/xhs/mcp-client-vue
npm run dev:server
```
**前端应用**
```bash
cd web
npm run dev
```
### 2. 配置 AI 模型服务
在"模型服务"中添加支持 Function Calling 的服务:
- **OpenAI**: GPT-4, GPT-3.5-Turbo
- **阿里云**: qwen-turbo-latest, qwen-plus
- **火山引擎**: doubao-pro
确保服务状态显示"已连接"✅
### 3. 配置 MCP 服务器(示例)
在"MCP 设置"中添加测试服务器:
```json
{
"name": "xiaohongshu",
"command": "node",
"args": ["path/to/xiaohongshu-mcp-server.js"],
"env": {}
}
```
或者使用现有的 MCP 服务器。
## 🧪 测试用例
### 测试 1: 基本工具调用 ⭐️⭐️⭐️
**目的**: 验证完整流程
**步骤**:
1. 选择支持 Function Calling 的模型(如 GPT-4
2. 选择 MCP 服务器(如 xiaohongshu
3. 输入: `帮我发布小红书文章,内容是:如何制作一道酸菜鱼`
**期望结果**:
```
AI 回复:
✅ 文章已成功发布到小红书!
📝 标题:🐟 超详细家常酸菜鱼做法10分钟学会
🔗 链接https://www.xiaohongshu.com/discovery/item/...
📊 当前浏览0 | 点赞0
你的酸菜鱼教程已经上线啦!记得定期查看数据哦~ 🎉
```
**验证点**:
- ✅ AI 自动创作了完整文章(标题、正文、标签、分类)
- ✅ 工具被成功调用
- ✅ 返回友好的结果展示
---
### 测试 2: System Prompt 验证 ⭐️⭐️
**目的**: 确认 System Prompt 被正确添加
**步骤**:
1. 打开浏览器开发者工具F12
2. 切换到 Console 标签页
3. 发送任意消息(选择了 MCP 服务器)
**期望日志**:
```javascript
🔧 [callModelStream] 获取 MCP 服务器工具: xiaohongshu
🔧 [callModelStream] MCP 服务器名称: xiaohongshu
🔧 [callModelStream] MCP 原始工具列表: [{name: 'public_content', ...}]
🔧 [callModelStream] 转换后的工具: 1 [{function: {name: 'xiaohongshu__public_content', ...}}]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔍 [callModelStream] 最终选择:
服务: OpenAI (openai)
模型: gpt-4
MCP: xiaohongshu
工具: 1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
**验证点**:
- ✅ 工具数量正确
- ✅ 工具名称带前缀xiaohongshu__public_content
- ✅ 服务器名称正确提取
---
### 测试 3: 工具名称解析 ⭐️⭐️⭐️
**目的**: 验证工具名称前缀解析逻辑
**步骤**:
1. 发送需要调用工具的消息
2. 观察控制台日志
**期望日志**:
```javascript
🔧 执行工具调用: {
fullName: 'xiaohongshu__public_content',
id: 'call_abc123',
arguments: {
title: '...',
content: '...',
tags: [...],
category: '...'
}
}
🎯 提取工具名称: public_content
工具执行成功: {...}
```
**验证点**:
- ✅ 完整名称: `xiaohongshu__public_content`
- ✅ 提取名称: `public_content`
- ✅ 使用原始名称调用 MCP
---
### 测试 4: 多轮对话 ⭐️⭐️
**目的**: 验证工具结果继续对话
**步骤**:
```
用户: 帮我发布文章,主题是春季穿搭
AI: [调用工具] ✅ 已发布...
用户: 这个文章现在有多少浏览量?
AI: [理解上下文,可能再次调用工具查询]
```
**验证点**:
- ✅ AI 记住之前的工具调用结果
- ✅ 可以基于结果继续对话
- ✅ 上下文保持完整
---
### 测试 5: 错误处理 ⭐️
**目的**: 验证错误场景处理
**步骤**:
1. 断开 MCP 服务器
2. 发送需要工具的消息
**期望结果**:
```
AI 回复:
❌ 工具执行失败:服务器未连接
请检查:
1. MCP 服务器是否正常运行
2. 网络连接是否正常
3. 工具配置是否正确
你可以在"MCP 设置"中重新连接服务器。
```
**验证点**:
- ✅ 友好的错误提示
- ✅ 明确的解决建议
- ✅ 不会崩溃或卡住
---
## 🔍 高级验证
### 检查 System Prompt 内容
在控制台执行:
```javascript
// 查看最新消息列表
const lastMessages = window.__DEBUG_MESSAGES__
console.log('System Prompt:', lastMessages[0])
```
**期望输出**:
```javascript
{
role: 'system',
content: `你是一个智能助手,可以使用以下工具完成任务:
• xiaohongshu__public_content
描述: 发布内容到小红书平台
参数:
- title [必填]: 文章标题,吸引眼球且相关
- content [必填]: 文章正文Markdown 格式
...
使用指南:
1. 当用户需要完成某个任务时,请分析哪个工具最合适
...
当前连接的 MCP 服务器: xiaohongshu`
}
```
### 检查工具转换
`chatService.ts``convertToolsToOpenAIFormat` 方法中添加断点:
```typescript
private convertToolsToOpenAIFormat(mcpTools: any[], serverName: string): any[] {
debugger; // 在这里设置断点
return mcpTools.map(tool => ({
type: 'function',
function: {
name: `${serverName}__${tool.name}`,
...
}
}))
}
```
**验证**:
- `mcpTools`: 原始 MCP 工具列表
- `serverName`: 服务器名称(如 "xiaohongshu"
- 返回值: 工具名称应为 `xiaohongshu__public_content`
### 检查工具解析
`chatService.ts``executeToolCalls` 方法中添加断点:
```typescript
const parts = fullFunctionName.split('__')
debugger; // 在这里设置断点
if (parts.length !== 2) {
console.error('工具名称格式错误')
return
}
const toolName = parts[1]
```
**验证**:
- `fullFunctionName`: `"xiaohongshu__public_content"`
- `parts`: `["xiaohongshu", "public_content"]`
- `toolName`: `"public_content"`
---
## 📊 性能测试
### 测试流式响应速度
**测试方法**:
1. 打开 Network 标签页
2. 发送消息
3. 观察 SSE 流
**期望**:
- ✅ 首字延迟 < 2s
- 流式输出流畅
- 工具调用不阻塞
### 测试工具执行时间
观察控制台日志:
```javascript
⏱️ [callModelStream] 开始真流式处理
... (AI 生成内容)
🔧 执行工具调用: ...
⏱️ 工具执行耗时: 245ms
工具执行成功
```
**期望**:
- 工具执行 < 1s (简单工具)
- 工具执行 < 5s (复杂工具)
---
## ✅ 测试清单
完成所有测试后确认以下项目
- [ ] 工具名称正确添加前缀serverName__toolName
- [ ] System Prompt 自动生成并包含详细指南
- [ ] AI 能自动生成完整参数
- [ ] 工具名称正确解析提取原始名称
- [ ] 工具成功调用 MCP 服务器
- [ ] 工具结果正确返回和展示
- [ ] 多轮对话保持上下文
- [ ] 错误处理友好且明确
- [ ] 流式响应流畅不卡顿
- [ ] 控制台日志完整清晰
## 🐛 常见问题
### 问题 1: 工具没有被调用
**可能原因**:
1. 模型不支持 Function Calling
2. MCP 服务器未连接
3. 工具列表为空
**解决方法**:
```javascript
// 检查工具列表
console.log('工具数量:', tools.length)
console.log('工具列表:', tools)
// 检查 MCP 连接
console.log('MCP 服务器状态:', mcpClient.getServerInfo(mcpServerId))
```
### 问题 2: 工具名称解析失败
**可能原因**:
- 工具名称格式不是 `serverName__toolName`
**解决方法**:
```javascript
// 检查完整名称
console.log('工具完整名称:', fullFunctionName)
console.log('分割结果:', fullFunctionName.split('__'))
```
### 问题 3: System Prompt 没有生效
**可能原因**:
- 消息列表第一条不是 system 角色
**解决方法**:
```javascript
// 检查消息列表
console.log('消息列表:', messages)
console.log('第一条消息角色:', messages[0].role)
```
---
## 📚 相关文档
- [MCP 工具调用完整示例](./mcp-tool-calling-example.md)
- [Cherry Studio 架构实现总结](./CHERRY_STUDIO_IMPLEMENTATION.md)
- [CHANGELOG.md](../CHANGELOG.md)
---
**测试完成**: v1.0.2+ Cherry Studio 架构
**最后更新**: 2024-01