fix: 修复Python模块导入错误并优化Chat功能

- 修复 core/agents/api 模块导入问题
- 优化 ChatInput 组件交互体验
- 增强 agent_handler 和 agent_service 功能
- 调整 Chat 页面样式和布局

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-16 10:27:07 +08:00
parent 52a9d02342
commit 3a4876ab00
9 changed files with 461 additions and 19 deletions

View File

@@ -117,7 +117,7 @@ func (s *AgentService) Chat(req AgentChatRequest) (*AgentChatResponse, error) {
log.Printf("[AgentService] Sending to Python: model_id=%s, api_key=%s, base_url=%s, provider=%s, model=%s",
req.ModelID, apiKeyPreview, req.BaseURL, req.ModelProvider, req.ModelName)
url := fmt.Sprintf("%s/api/v1/agent/chat", s.pythonURL)
url := fmt.Sprintf("%s/agent/chat", s.pythonURL)
jsonData, err := json.Marshal(req)
if err != nil {
@@ -155,7 +155,7 @@ func (s *AgentService) Chat(req AgentChatRequest) (*AgentChatResponse, error) {
// TeamChat 多智能体群聊
func (s *AgentService) TeamChat(req TeamChatRequest) (*TeamChatResponse, error) {
url := fmt.Sprintf("%s/api/v1/agent/team/chat", s.pythonURL)
url := fmt.Sprintf("%s/agent/team/chat", s.pythonURL)
// 设置默认策略
if req.Strategy == "" {
@@ -233,7 +233,7 @@ func (s *AgentService) ChatStream(c interface{}, agentID string, message, sessio
log.Printf("[ChatStream] modelID is empty or modelRepo is nil: modelID=%s, modelRepo=%v", modelID, s.modelRepo != nil)
}
streamURL := fmt.Sprintf("%s/api/v1/agent/chat/stream", s.pythonURL)
streamURL := fmt.Sprintf("%s/agent/chat/stream", s.pythonURL)
jsonData, err := json.Marshal(reqBody)
if err != nil {
@@ -365,6 +365,89 @@ func (s *AgentService) CreateAgent(req CreateAgentRequest, userID int) (*CreateA
}, nil
}
// TeamMemberInitRequest 团队成员初始化请求
type TeamMemberInitRequest struct {
Name string
Description string
Avatar string
Skills []string
RoleDescription string
}
// InitTeamMembers 初始化团队成员智能体
func (s *AgentService) InitTeamMembers() error {
if s.agentRepo == nil {
log.Printf("[AgentService] InitTeamMembers: agentRepo is nil!")
return fmt.Errorf("agent repository not initialized")
}
// 骚人开发组团队成员配置
teamMembers := []TeamMemberInitRequest{
{
Name: "小荣",
Description: "前端开发工程师 - 骚人开发组成员",
Avatar: "👨‍💻",
Skills: []string{"Vue 3", "TypeScript", "Element Plus", "Tailwind CSS"},
RoleDescription: `你叫小荣,是骚人开发组的前端开发工程师。你细心认真,善于沟通。
技能专长:
- Vue 3 框架开发
- TypeScript 类型系统
- Element Plus 组件库
- Tailwind CSS 样式框架
性格特点:
- 细心认真,注重代码质量
- 善于与团队成员沟通协作
- 积极解决前端技术难题`,
},
}
// 检查是否已存在同名智能体
for _, member := range teamMembers {
existingAgents, err := s.agentRepo.FindAll()
if err != nil {
log.Printf("[AgentService] InitTeamMembers: failed to list agents: %v", err)
continue
}
exists := false
for _, a := range existingAgents {
if a.Name == member.Name {
exists = true
log.Printf("[AgentService] InitTeamMembers: agent %s already exists, skipping", member.Name)
break
}
}
if !exists {
// 创建智能体
agent := &model.Agent{
ID: uuid.New().String(),
Name: member.Name,
Description: member.Description,
OwnerID: "1", // 系统管理员
Avatar: member.Avatar,
Skills: member.Skills,
RoleDescription: member.RoleDescription,
ModelProvider: "anthropic",
ModelName: "claude-sonnet-4-20250514",
IsActive: true,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
}
if err := s.agentRepo.Create(agent); err != nil {
log.Printf("[AgentService] InitTeamMembers: failed to create agent %s: %v", member.Name, err)
continue
}
log.Printf("[AgentService] InitTeamMembers: created agent %s (ID: %s)", member.Name, agent.ID)
}
}
return nil
}
// ListAgentsResponse 获取智能体列表响应
type ListAgentsResponse struct {
Agents []interface{} `json:"agents"`