fix: 更新后端服务
- main.go: 更新模型初始化 - agent_repo, model_service: 优化 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -151,7 +151,7 @@ func main() {
|
||||
}
|
||||
|
||||
// 3. 自动迁移表
|
||||
db.AutoMigrate(&model.DatabaseInfo{}, &model.SubTableInfo{}, &model.ModelInfo{}, &model.KnowledgeBase{}, &model.KnowledgeDocument{}, &model.User{}, &model.Role{}, &model.Tool{}, &model.MCP{})
|
||||
db.AutoMigrate(&model.DatabaseInfo{}, &model.SubTableInfo{}, &model.ModelInfo{}, &model.KnowledgeBase{}, &model.KnowledgeDocument{}, &model.User{}, &model.Role{}, &model.Tool{}, &model.MCP{}, &model.Skill{}, &model.Agent{}, &model.AgentSkill{}, &model.AgentKnowledgeBase{}, &model.AgentMemory{}, &model.AgentTeam{}, &model.AgentTask{})
|
||||
|
||||
// 3.1 确保 users 和 roles 表存在(使用 SQL 强制创建)
|
||||
db.Exec(`
|
||||
@@ -198,6 +198,46 @@ func main() {
|
||||
)
|
||||
`)
|
||||
|
||||
// 3.3 确保 MCP 表存在
|
||||
db.Exec(`
|
||||
CREATE TABLE IF NOT EXISTS mcp (
|
||||
id VARCHAR(191) PRIMARY KEY,
|
||||
name VARCHAR(100) UNIQUE NOT NULL,
|
||||
description TEXT,
|
||||
description_cn TEXT,
|
||||
category VARCHAR(50) NOT NULL,
|
||||
transport VARCHAR(20) DEFAULT 'stdio',
|
||||
command VARCHAR(500),
|
||||
args TEXT,
|
||||
env TEXT,
|
||||
status VARCHAR(20) DEFAULT 'active',
|
||||
created_at DATETIME(3),
|
||||
updated_at DATETIME(3),
|
||||
INDEX idx_mcp_name (name),
|
||||
INDEX idx_mcp_category (category),
|
||||
INDEX idx_mcp_status (status)
|
||||
)
|
||||
`)
|
||||
log.Println("MCP table verified/created")
|
||||
|
||||
// 3.4 确保 skills 表存在
|
||||
db.Exec(`
|
||||
CREATE TABLE IF NOT EXISTS skills (
|
||||
id VARCHAR(191) PRIMARY KEY,
|
||||
skill_name VARCHAR(200) NOT NULL,
|
||||
skill_type VARCHAR(20) NOT NULL,
|
||||
skill_desc TEXT,
|
||||
path VARCHAR(500),
|
||||
status VARCHAR(20) DEFAULT 'active',
|
||||
created_at DATETIME(3),
|
||||
updated_at DATETIME(3),
|
||||
INDEX idx_skills_name (skill_name),
|
||||
INDEX idx_skills_type (skill_type),
|
||||
INDEX idx_skills_status (status)
|
||||
)
|
||||
`)
|
||||
log.Println("Skills table verified/created")
|
||||
|
||||
// 使用GORM Migrator添加缺失的列
|
||||
migrator := db.Migrator()
|
||||
if !migrator.HasColumn(&model.Tool{}, "security_level") {
|
||||
@@ -236,6 +276,8 @@ func main() {
|
||||
userRepo := repository.NewUserRepository(db)
|
||||
toolRepo := repository.NewToolRepository(db)
|
||||
mcpRepo := repository.NewMCPRepository(db)
|
||||
skillRepo := repository.NewSkillRepository(db)
|
||||
agentRepo := repository.NewAgentRepository(db)
|
||||
|
||||
// 4.1 初始化默认管理员用户
|
||||
initDefaultAdmin(userRepo)
|
||||
@@ -253,6 +295,9 @@ func main() {
|
||||
authService := service.NewAuthService(cfg.JWTSecret, userRepo)
|
||||
toolService := service.NewToolService(toolRepo)
|
||||
mcpService := service.NewMCPService(mcpRepo)
|
||||
skillService := service.NewSkillService(skillRepo)
|
||||
agentService := service.NewAgentService(cfg.PythonServiceURL)
|
||||
memoryService := service.NewMemoryService(agentRepo)
|
||||
|
||||
// 4.2 初始化默认工具
|
||||
if err := toolService.InitDefaultTools(); err != nil {
|
||||
@@ -261,6 +306,13 @@ func main() {
|
||||
log.Println("Default tools initialized")
|
||||
}
|
||||
|
||||
// 4.3 初始化 skills
|
||||
if err := skillService.InitSkills(); err != nil {
|
||||
log.Printf("Warning: Failed to init skills: %v", err)
|
||||
} else {
|
||||
log.Println("Skills initialized")
|
||||
}
|
||||
|
||||
// 6. 初始化 Handler
|
||||
dbHandler := handler.NewDatabaseHandler(dbService)
|
||||
subTableHandler := handler.NewSubTableHandler(subTableService)
|
||||
@@ -271,6 +323,9 @@ func main() {
|
||||
authHandler := handler.NewAuthHandler(authService)
|
||||
toolHandler := handler.NewToolHandler(toolService)
|
||||
mcpHandler := handler.NewMCPHandler(mcpService)
|
||||
skillHandler := handler.NewSkillHandler(skillService)
|
||||
agentHandler := handler.NewAgentHandler(agentService)
|
||||
memoryHandler := handler.NewMemoryHandler(memoryService)
|
||||
var uploadHandler *handler.UploadHandler
|
||||
if uploadService != nil {
|
||||
uploadHandler = handler.NewUploadHandler(uploadService, knowledgeRepo)
|
||||
@@ -425,6 +480,32 @@ func main() {
|
||||
mcpGroup.DELETE("/:id", mcpHandler.Delete)
|
||||
}
|
||||
|
||||
// Skill管理模块
|
||||
skillGroup := r.Group("/skill")
|
||||
{
|
||||
skillGroup.GET("/list", skillHandler.List)
|
||||
skillGroup.GET("/sync", skillHandler.Sync)
|
||||
skillGroup.GET("/:id", skillHandler.GetByID)
|
||||
skillGroup.POST("/add", skillHandler.Create)
|
||||
skillGroup.PUT("/:id", skillHandler.Update)
|
||||
skillGroup.DELETE("/:id", skillHandler.Delete)
|
||||
}
|
||||
|
||||
// Agent管理模块 (调用 Python Agent Engine)
|
||||
agentGroup := r.Group("/api/agent")
|
||||
{
|
||||
agentGroup.POST("/chat", agentHandler.Chat)
|
||||
agentGroup.POST("/team/chat", agentHandler.TeamChat)
|
||||
}
|
||||
|
||||
// 记忆管理模块
|
||||
memoryGroup := r.Group("/api/agent/:id/memories")
|
||||
{
|
||||
memoryGroup.GET("", memoryHandler.GetMemories)
|
||||
memoryGroup.POST("", memoryHandler.CreateMemory)
|
||||
memoryGroup.DELETE("/:memory_id", memoryHandler.DeleteMemory)
|
||||
}
|
||||
|
||||
// Swagger 文档
|
||||
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
||||
|
||||
|
||||
@@ -137,15 +137,15 @@ func (s *ModelService) TestConnection(req model.TestModelRequest) (*model.TestMo
|
||||
// chat 模型使用 /chat/completions
|
||||
switch req.Provider {
|
||||
case "OpenAI":
|
||||
baseURL = baseURL + "/v1/chat/completions"
|
||||
baseURL = baseURL + "/chat/completions"
|
||||
case "Ollama":
|
||||
baseURL = baseURL + "/api/chat"
|
||||
case "ali", "Ali", "aliyun", "Aliyun":
|
||||
// 阿里云 DashScope 兼容 OpenAI 格式
|
||||
baseURL = baseURL + "/chat/completions"
|
||||
default:
|
||||
// 默认使用 OpenAI 兼容格式
|
||||
baseURL = baseURL + "/v1/chat/completions"
|
||||
// 默认使用 /chat/completions
|
||||
baseURL = baseURL + "/chat/completions"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user