mirror of
https://gitcode.com/flipped-aurora/gin-vue-admin.git
synced 2025-12-30 03:42:26 +00:00
171 lines
6.4 KiB
Go
171 lines
6.4 KiB
Go
|
|
package mcpTool
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"context"
|
|||
|
|
"encoding/json"
|
|||
|
|
"errors"
|
|||
|
|
"fmt"
|
|||
|
|
"strings"
|
|||
|
|
|
|||
|
|
"github.com/mark3labs/mcp-go/mcp"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// GVAReviewer GVA代码审查工具
|
|||
|
|
type GVAReviewer struct{}
|
|||
|
|
|
|||
|
|
// init 注册工具
|
|||
|
|
func init() {
|
|||
|
|
RegisterTool(&GVAReviewer{})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ReviewRequest 审查请求结构
|
|||
|
|
type ReviewRequest struct {
|
|||
|
|
UserRequirement string `json:"userRequirement"` // 经过requirement_analyze后的用户需求
|
|||
|
|
GeneratedFiles []string `json:"generatedFiles"` // gva_execute创建的文件列表
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ReviewResponse 审查响应结构
|
|||
|
|
type ReviewResponse struct {
|
|||
|
|
Success bool `json:"success"` // 是否审查成功
|
|||
|
|
Message string `json:"message"` // 审查结果消息
|
|||
|
|
AdjustmentPrompt string `json:"adjustmentPrompt"` // 调整代码的提示
|
|||
|
|
ReviewDetails string `json:"reviewDetails"` // 详细的审查结果
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// New 创建GVA代码审查工具
|
|||
|
|
func (g *GVAReviewer) New() mcp.Tool {
|
|||
|
|
return mcp.NewTool("gva_review",
|
|||
|
|
mcp.WithDescription(`**GVA代码审查工具 - 在gva_execute调用后使用**
|
|||
|
|
|
|||
|
|
**核心功能:**
|
|||
|
|
- 接收经过requirement_analyze处理的用户需求和gva_execute生成的文件列表
|
|||
|
|
- 分析生成的代码是否满足用户的原始需求
|
|||
|
|
- 检查是否涉及到关联、交互等复杂功能
|
|||
|
|
- 如果代码不满足需求,提供调整建议和新的prompt
|
|||
|
|
|
|||
|
|
**使用场景:**
|
|||
|
|
- 在gva_execute成功执行后调用
|
|||
|
|
- 用于验证生成的代码是否完整满足用户需求
|
|||
|
|
- 检查模块间的关联关系是否正确实现
|
|||
|
|
- 发现缺失的交互功能或业务逻辑
|
|||
|
|
|
|||
|
|
**工作流程:**
|
|||
|
|
1. 接收用户原始需求和生成的文件列表
|
|||
|
|
2. 分析需求中的关键功能点
|
|||
|
|
3. 检查生成的文件是否覆盖所有功能
|
|||
|
|
4. 识别缺失的关联关系、交互功能等
|
|||
|
|
5. 生成调整建议和新的开发prompt
|
|||
|
|
|
|||
|
|
**输出内容:**
|
|||
|
|
- 审查结果和是否需要调整
|
|||
|
|
- 详细的缺失功能分析
|
|||
|
|
- 针对性的代码调整建议
|
|||
|
|
- 可直接使用的开发prompt
|
|||
|
|
|
|||
|
|
**重要提示:**
|
|||
|
|
- 本工具专门用于代码质量审查,不执行实际的代码修改
|
|||
|
|
- 重点关注模块间关联、用户交互、业务流程完整性
|
|||
|
|
- 提供的调整建议应该具体可执行`),
|
|||
|
|
mcp.WithString("userRequirement",
|
|||
|
|
mcp.Description("经过requirement_analyze处理后的用户需求描述,包含详细的功能要求和字段信息"),
|
|||
|
|
mcp.Required(),
|
|||
|
|
),
|
|||
|
|
mcp.WithString("generatedFiles",
|
|||
|
|
mcp.Description("gva_execute创建的文件列表,JSON字符串格式,包含所有生成的后端和前端文件路径"),
|
|||
|
|
mcp.Required(),
|
|||
|
|
),
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Handle 处理审查请求
|
|||
|
|
func (g *GVAReviewer) Handle(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
|||
|
|
// 获取用户需求
|
|||
|
|
userRequirementData, ok := request.GetArguments()["userRequirement"]
|
|||
|
|
if !ok {
|
|||
|
|
return nil, errors.New("参数错误:userRequirement 必须提供")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
userRequirement, ok := userRequirementData.(string)
|
|||
|
|
if !ok {
|
|||
|
|
return nil, errors.New("参数错误:userRequirement 必须是字符串类型")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取生成的文件列表
|
|||
|
|
generatedFilesData, ok := request.GetArguments()["generatedFiles"]
|
|||
|
|
if !ok {
|
|||
|
|
return nil, errors.New("参数错误:generatedFiles 必须提供")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
generatedFilesStr, ok := generatedFilesData.(string)
|
|||
|
|
if !ok {
|
|||
|
|
return nil, errors.New("参数错误:generatedFiles 必须是JSON字符串")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 解析JSON字符串为字符串数组
|
|||
|
|
var generatedFiles []string
|
|||
|
|
err := json.Unmarshal([]byte(generatedFilesStr), &generatedFiles)
|
|||
|
|
if err != nil {
|
|||
|
|
return nil, fmt.Errorf("解析generatedFiles失败: %v", err)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if len(generatedFiles) == 0 {
|
|||
|
|
return nil, errors.New("参数错误:generatedFiles 不能为空")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 直接生成调整提示,不进行复杂分析
|
|||
|
|
adjustmentPrompt := g.generateAdjustmentPrompt(userRequirement, generatedFiles)
|
|||
|
|
|
|||
|
|
// 构建简化的审查详情
|
|||
|
|
reviewDetails := fmt.Sprintf("📋 **代码审查报告**\n\n **用户原始需求:**\n%s\n\n **已生成文件数量:** %d\n\n **建议进行代码优化和完善**", userRequirement, len(generatedFiles))
|
|||
|
|
|
|||
|
|
// 构建审查结果
|
|||
|
|
reviewResult := &ReviewResponse{
|
|||
|
|
Success: true,
|
|||
|
|
Message: "代码审查完成",
|
|||
|
|
AdjustmentPrompt: adjustmentPrompt,
|
|||
|
|
ReviewDetails: reviewDetails,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 序列化响应
|
|||
|
|
responseJSON, err := json.MarshalIndent(reviewResult, "", " ")
|
|||
|
|
if err != nil {
|
|||
|
|
return nil, fmt.Errorf("序列化审查结果失败: %v", err)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return &mcp.CallToolResult{
|
|||
|
|
Content: []mcp.Content{
|
|||
|
|
mcp.NewTextContent(fmt.Sprintf("代码审查结果:\n\n%s", string(responseJSON))),
|
|||
|
|
},
|
|||
|
|
}, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// generateAdjustmentPrompt 生成调整代码的提示
|
|||
|
|
func (g *GVAReviewer) generateAdjustmentPrompt(userRequirement string, generatedFiles []string) string {
|
|||
|
|
var prompt strings.Builder
|
|||
|
|
|
|||
|
|
prompt.WriteString("🔧 **代码调整指导 Prompt:**\n\n")
|
|||
|
|
prompt.WriteString(fmt.Sprintf("**用户的原始需求为:** %s\n\n", userRequirement))
|
|||
|
|
prompt.WriteString("**经过GVA生成后的文件有如下内容:**\n")
|
|||
|
|
for _, file := range generatedFiles {
|
|||
|
|
prompt.WriteString(fmt.Sprintf("- %s\n", file))
|
|||
|
|
}
|
|||
|
|
prompt.WriteString("\n")
|
|||
|
|
|
|||
|
|
prompt.WriteString("**请帮我优化和完善代码,确保:**\n")
|
|||
|
|
prompt.WriteString("1. 代码完全满足用户的原始需求\n")
|
|||
|
|
prompt.WriteString("2. 完善模块间的关联关系,确保数据一致性\n")
|
|||
|
|
prompt.WriteString("3. 实现所有必要的用户交互功能\n")
|
|||
|
|
prompt.WriteString("4. 保持代码的完整性和可维护性\n")
|
|||
|
|
prompt.WriteString("5. 遵循GVA框架的开发规范和最佳实践\n")
|
|||
|
|
prompt.WriteString("6. 确保前后端功能完整对接\n")
|
|||
|
|
prompt.WriteString("7. 添加必要的错误处理和数据验证\n\n")
|
|||
|
|
prompt.WriteString("8. 如果需要vue路由跳转,请使用 menu_lister获取完整路由表,并且路由跳转使用 router.push({\"name\":从menu_lister中获取的name})\n\n")
|
|||
|
|
prompt.WriteString("9. 如果当前所有的vue页面内容无法满足需求,则自行书写vue文件,并且调用 menu_creator创建菜单记录\n\n")
|
|||
|
|
prompt.WriteString("10. 如果需要API调用,请使用 api_lister获取api表,根据需求调用对应接口\n\n")
|
|||
|
|
prompt.WriteString("11. 如果当前所有API无法满足则自行书写接口,补全前后端代码,并使用 api_creator创建api记录\n\n")
|
|||
|
|
prompt.WriteString("12. 无论前后端都不要随意删除import的内容\n\n")
|
|||
|
|
prompt.WriteString("**请基于用户需求和现有文件,提供完整的代码优化方案。**")
|
|||
|
|
|
|||
|
|
return prompt.String()
|
|||
|
|
}
|