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. 自动迁移表
|
// 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 强制创建)
|
// 3.1 确保 users 和 roles 表存在(使用 SQL 强制创建)
|
||||||
db.Exec(`
|
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添加缺失的列
|
// 使用GORM Migrator添加缺失的列
|
||||||
migrator := db.Migrator()
|
migrator := db.Migrator()
|
||||||
if !migrator.HasColumn(&model.Tool{}, "security_level") {
|
if !migrator.HasColumn(&model.Tool{}, "security_level") {
|
||||||
@@ -236,6 +276,8 @@ func main() {
|
|||||||
userRepo := repository.NewUserRepository(db)
|
userRepo := repository.NewUserRepository(db)
|
||||||
toolRepo := repository.NewToolRepository(db)
|
toolRepo := repository.NewToolRepository(db)
|
||||||
mcpRepo := repository.NewMCPRepository(db)
|
mcpRepo := repository.NewMCPRepository(db)
|
||||||
|
skillRepo := repository.NewSkillRepository(db)
|
||||||
|
agentRepo := repository.NewAgentRepository(db)
|
||||||
|
|
||||||
// 4.1 初始化默认管理员用户
|
// 4.1 初始化默认管理员用户
|
||||||
initDefaultAdmin(userRepo)
|
initDefaultAdmin(userRepo)
|
||||||
@@ -253,6 +295,9 @@ func main() {
|
|||||||
authService := service.NewAuthService(cfg.JWTSecret, userRepo)
|
authService := service.NewAuthService(cfg.JWTSecret, userRepo)
|
||||||
toolService := service.NewToolService(toolRepo)
|
toolService := service.NewToolService(toolRepo)
|
||||||
mcpService := service.NewMCPService(mcpRepo)
|
mcpService := service.NewMCPService(mcpRepo)
|
||||||
|
skillService := service.NewSkillService(skillRepo)
|
||||||
|
agentService := service.NewAgentService(cfg.PythonServiceURL)
|
||||||
|
memoryService := service.NewMemoryService(agentRepo)
|
||||||
|
|
||||||
// 4.2 初始化默认工具
|
// 4.2 初始化默认工具
|
||||||
if err := toolService.InitDefaultTools(); err != nil {
|
if err := toolService.InitDefaultTools(); err != nil {
|
||||||
@@ -261,6 +306,13 @@ func main() {
|
|||||||
log.Println("Default tools initialized")
|
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
|
// 6. 初始化 Handler
|
||||||
dbHandler := handler.NewDatabaseHandler(dbService)
|
dbHandler := handler.NewDatabaseHandler(dbService)
|
||||||
subTableHandler := handler.NewSubTableHandler(subTableService)
|
subTableHandler := handler.NewSubTableHandler(subTableService)
|
||||||
@@ -271,6 +323,9 @@ func main() {
|
|||||||
authHandler := handler.NewAuthHandler(authService)
|
authHandler := handler.NewAuthHandler(authService)
|
||||||
toolHandler := handler.NewToolHandler(toolService)
|
toolHandler := handler.NewToolHandler(toolService)
|
||||||
mcpHandler := handler.NewMCPHandler(mcpService)
|
mcpHandler := handler.NewMCPHandler(mcpService)
|
||||||
|
skillHandler := handler.NewSkillHandler(skillService)
|
||||||
|
agentHandler := handler.NewAgentHandler(agentService)
|
||||||
|
memoryHandler := handler.NewMemoryHandler(memoryService)
|
||||||
var uploadHandler *handler.UploadHandler
|
var uploadHandler *handler.UploadHandler
|
||||||
if uploadService != nil {
|
if uploadService != nil {
|
||||||
uploadHandler = handler.NewUploadHandler(uploadService, knowledgeRepo)
|
uploadHandler = handler.NewUploadHandler(uploadService, knowledgeRepo)
|
||||||
@@ -425,6 +480,32 @@ func main() {
|
|||||||
mcpGroup.DELETE("/:id", mcpHandler.Delete)
|
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 文档
|
// Swagger 文档
|
||||||
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
||||||
|
|
||||||
|
|||||||
@@ -137,15 +137,15 @@ func (s *ModelService) TestConnection(req model.TestModelRequest) (*model.TestMo
|
|||||||
// chat 模型使用 /chat/completions
|
// chat 模型使用 /chat/completions
|
||||||
switch req.Provider {
|
switch req.Provider {
|
||||||
case "OpenAI":
|
case "OpenAI":
|
||||||
baseURL = baseURL + "/v1/chat/completions"
|
baseURL = baseURL + "/chat/completions"
|
||||||
case "Ollama":
|
case "Ollama":
|
||||||
baseURL = baseURL + "/api/chat"
|
baseURL = baseURL + "/api/chat"
|
||||||
case "ali", "Ali", "aliyun", "Aliyun":
|
case "ali", "Ali", "aliyun", "Aliyun":
|
||||||
// 阿里云 DashScope 兼容 OpenAI 格式
|
// 阿里云 DashScope 兼容 OpenAI 格式
|
||||||
baseURL = baseURL + "/chat/completions"
|
baseURL = baseURL + "/chat/completions"
|
||||||
default:
|
default:
|
||||||
// 默认使用 OpenAI 兼容格式
|
// 默认使用 /chat/completions
|
||||||
baseURL = baseURL + "/v1/chat/completions"
|
baseURL = baseURL + "/chat/completions"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user