requirement_analyzer.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package mcpTool
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "github.com/mark3labs/mcp-go/mcp"
  8. )
  9. func init() {
  10. RegisterTool(&RequirementAnalyzer{})
  11. }
  12. type RequirementAnalyzer struct{}
  13. // RequirementAnalysisRequest 需求分析请求
  14. type RequirementAnalysisRequest struct {
  15. UserRequirement string `json:"userRequirement"`
  16. }
  17. // RequirementAnalysisResponse 需求分析响应
  18. type RequirementAnalysisResponse struct {
  19. AIPrompt string `json:"aiPrompt"` // 给AI的提示词
  20. }
  21. // New 返回工具注册信息
  22. func (t *RequirementAnalyzer) New() mcp.Tool {
  23. return mcp.NewTool("requirement_analyzer",
  24. mcp.WithDescription(`**🚀 需求分析工具 - 首选入口工具(最高优先级)**
  25. **⭐ 重要提示:这是所有MCP工具的首选入口,请优先使用!**
  26. **🎯 核心职责:**
  27. 将用户的自然语言需求转换为AI可理解的结构化提示词
  28. **📋 工作流程:**
  29. 1. 接收用户自然语言需求描述
  30. 2. 生成专业的AI提示词,要求AI将需求梳理为清晰的逻辑步骤:
  31. - **1. 第一步功能描述**
  32. - **2. 第二步功能描述**
  33. - **3. 第三步功能描述**
  34. - **...**
  35. 3. 指导后续使用 gva_auto_generate 工具进行代码生成
  36. **✅ 适用场景:**
  37. - 用户有新的业务需求需要开发
  38. - 需要创建新的功能模块
  39. - 想要快速搭建业务系统
  40. - 需求描述比较模糊,需要AI帮助梳理
  41. **❌ 不负责的事情:**
  42. - 不生成具体的包名和模块名(交给 gva_auto_generate)
  43. - 不进行代码生成(交给 gva_auto_generate)
  44. - 不创建数据库表结构(交给 gva_auto_generate)
  45. **🔄 推荐工作流:**
  46. requirement_analyzer → gva_auto_generate → 其他辅助工具
  47. `),
  48. mcp.WithString("userRequirement",
  49. mcp.Required(),
  50. mcp.Description("用户的需求描述,支持自然语言,如:'我要做一个猫舍管理系统,用来录入猫的信息,并且记录每只猫每天的活动信息'"),
  51. ),
  52. )
  53. }
  54. // Handle 处理工具调用
  55. func (t *RequirementAnalyzer) Handle(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  56. userRequirement, ok := request.GetArguments()["userRequirement"].(string)
  57. if !ok || userRequirement == "" {
  58. return nil, errors.New("参数错误:userRequirement 必须是非空字符串")
  59. }
  60. // 分析用户需求
  61. analysisResponse, err := t.analyzeRequirement(userRequirement)
  62. if err != nil {
  63. return nil, fmt.Errorf("需求分析失败: %v", err)
  64. }
  65. // 序列化响应
  66. responseData, err := json.Marshal(analysisResponse)
  67. if err != nil {
  68. return nil, fmt.Errorf("序列化响应失败: %v", err)
  69. }
  70. return &mcp.CallToolResult{
  71. Content: []mcp.Content{
  72. mcp.NewTextContent(string(responseData)),
  73. },
  74. }, nil
  75. }
  76. // analyzeRequirement 分析用户需求 - 专注于AI需求传递
  77. func (t *RequirementAnalyzer) analyzeRequirement(userRequirement string) (*RequirementAnalysisResponse, error) {
  78. // 生成AI提示词 - 这是唯一功能
  79. aiPrompt := t.generateAIPrompt(userRequirement)
  80. return &RequirementAnalysisResponse{
  81. AIPrompt: aiPrompt,
  82. }, nil
  83. }
  84. // generateAIPrompt 生成AI提示词 - 要求AI梳理逻辑为1xxx2xxx格式
  85. func (t *RequirementAnalyzer) generateAIPrompt(userRequirement string) string {
  86. prompt := fmt.Sprintf(`# 🤖 AI需求逻辑梳理任务
  87. ## 📝 用户原始需求
  88. %s
  89. ## 🎯 AI任务要求
  90. 请将上述用户需求梳理成清晰的逻辑步骤,格式要求:
  91. **1. 第一步功能描述**
  92. **2. 第二步功能描述**
  93. **3. 第三步功能描述**
  94. **...**
  95. ## 📋 梳理要求
  96. - 将需求拆解为具体的功能步骤
  97. - 每个步骤用数字编号(1、2、3...)
  98. - 步骤描述要清晰、具体、可执行
  99. - 按照业务逻辑顺序排列
  100. - 考虑数据流和用户操作流程
  101. ## 🔄 后续流程
  102. 梳理完成后,请使用 gva_auto_generate 工具进行代码生成:
  103. - gva_auto_generate 会根据梳理的逻辑步骤自动生成包名、模块名
  104. - gva_auto_generate 会设计数据表结构和API接口
  105. - gva_auto_generate 会生成完整的前后端代码
  106. 现在请开始梳理用户需求:"%s"`, userRequirement, userRequirement)
  107. return prompt
  108. }