FINAL_FIX_SUMMARY.md•4.69 kB
# 🎯 最终修复总结 - 工具选择问题
## 📋 问题
**用户反馈:**
说 **"生成4张图,提示词:'可口可乐'"** 时,系统调用了4次 `text_to_image` 而不是1次 `sequential_generation`。
---
## 🔍 根本原因
经过分析,发现了3个关键问题:
### 1️⃣ 工具描述不够明确
- ❌ `text_to_image` 没有说明只生成"单张"
- ❌ `sequential_generation` 没有明确说明"何时使用"
### 2️⃣ 参数定义不清晰
- ❌ 两个工具的必填参数都只有 `["prompt"]`
- ❌ Claude 无法通过必填参数区分工具
### 3️⃣ 参数顺序和描述问题
- ❌ `max_images` 排在 `prompt` 后面,不够显眼
- ❌ `max_images` 不是必填参数
- ❌ 参数描述没有明确告诉 Claude 如何使用
---
## ✅ 解决方案
### 修改 1: 优化工具描述
#### 文生图 (text_to_image)
```python
description="使用Seedream 4.0根据文本提示词生成【单张】图像。如果需要生成多张图片,请使用 seedream_sequential_generation 工具"
```
#### 组图生成 (sequential_generation)
```python
description="使用Seedream 4.0【批量生成多张图像】(组图生成)。当用户要求生成2张或更多图片时使用此工具。支持3种输入类型:文生组图、单图生组图、多图生组图。最多可生成15张图片"
```
### 修改 2: 调整参数顺序和必填性
**原来:**
```python
properties = {
"prompt": {...}, # 第1位
"max_images": {...}, # 第2位
...
}
required = ["prompt"] # 只有 prompt 必填
```
**修改后:**
```python
properties = {
"max_images": { # ⭐ 移到第1位
"type": "integer",
"description": "要生成的图像数量(必填)。用户说'生成4张图'时,此参数应为4",
"minimum": 1,
"maximum": 15
},
"prompt": { # 第2位
"type": "string",
"description": "图像内容的文本提示词(如'可口可乐'、'小猫'等)。不需要在提示词中包含数量信息,数量由 max_images 参数指定",
"maxLength": 600
},
...
}
required = ["prompt", "max_images"] # ⭐ max_images 也设为必填
```
### 修改 3: 优化参数描述
**关键改进:**
1. ✅ `max_images` 描述包含示例: **"用户说'生成4张图'时,此参数应为4"**
2. ✅ `prompt` 描述明确说明: **"不需要在提示词中包含数量信息"**
3. ✅ 告诉 Claude 如何使用参数
---
## 🎯 预期效果
### 修改前
```
用户: "生成4张图,提示词:'可口可乐'"
Claude 的思考:
- 看到 text_to_image 和 sequential_generation
- 两个工具都只需要 prompt 参数
- text_to_image 更简单,调用4次吧
结果: ❌ 调用 text_to_image 4次
```
### 修改后
```
用户: "生成4张图,提示词:'可口可乐'"
Claude 的思考:
- 看到 text_to_image 描述说"生成【单张】图像"
- 看到 sequential_generation 描述说"当用户要求生成2张或更多图片时使用"
- sequential_generation 需要 max_images 参数(必填)
- max_images 描述说"用户说'生成4张图'时,此参数应为4"
- 用户要求4张图,应该用 sequential_generation!
结果: ✅ 调用 sequential_generation 1次
参数: {
"max_images": 4,
"prompt": "可口可乐"
}
```
---
## 📝 修改的文件
1. ✅ `seedream_mcp/tools/text_to_image.py` - 优化描述
2. ✅ `seedream_mcp/tools/image_to_image.py` - 优化描述
3. ✅ `seedream_mcp/tools/multi_image_fusion.py` - 优化描述
4. ✅ `seedream_mcp/tools/sequential_generation.py` - 优化描述 + 调整参数
---
## 🔑 关键经验
设计 MCP 工具时,要确保:
1. **描述要明确** - 说清楚工具的功能范围和使用场景
2. **参数要区分** - 关键区分参数应设为必填
3. **顺序要合理** - 最重要的参数放在最前面
4. **描述要详细** - 包含示例,告诉 AI 如何使用
5. **相互引导** - 在描述中引导 AI 选择正确的工具
---
## ✨ 测试验证
运行 `test_tool_selection.py` 验证:
```
✅ 文生图工具已标记【单张】
✅ 文生图工具已引导使用组图工具
✅ 组图工具的 max_images 已设为必填
✅ 组图工具的 max_images 在第一位
✅ max_images 描述包含示例
🎉 所有检查通过!
```
---
## 🚀 下一步
**请重启 MCP 服务:**
1. 关闭 Claude Desktop
2. 重新打开 Claude Desktop
3. 测试: "生成4张图,提示词:'可口可乐'"
**预期结果:**
- ✅ 调用 `seedream_sequential_generation` 工具
- ✅ 参数: `{"max_images": 4, "prompt": "可口可乐"}`
- ✅ 生成4张可口可乐的图片
---
**现在工具定义已经优化完成,重启后应该能正确选择工具了!** 🎊