initialize 初始化Agent
(ctx context.Context)
| 486 | |
| 487 | // initialize 初始化Agent |
| 488 | func (a *Agent) initialize(ctx context.Context) error { |
| 489 | // 从Store加载状态 |
| 490 | messages, err := a.deps.Store.LoadMessages(ctx, a.id) |
| 491 | if err == nil && len(messages) > 0 { |
| 492 | // 验证并清理不完整的 tool_calls 消息 |
| 493 | // DeepSeek 等 API 要求每个包含 tool_calls 的 assistant 消息后必须紧跟对应的 tool_result 消息 |
| 494 | if !a.validateMessageHistory(messages) { |
| 495 | agentLog.Warn(ctx, "invalid message history detected, cleaning incomplete tool_calls", map[string]any{"agent_id": a.id, "original_count": len(messages)}) |
| 496 | cleanedMessages := a.removeIncompleteToolCalls(messages) |
| 497 | if len(cleanedMessages) > 0 && a.validateMessageHistory(cleanedMessages) { |
| 498 | messages = cleanedMessages |
| 499 | // 保存清理后的消息 |
| 500 | if err := a.deps.Store.SaveMessages(ctx, a.id, messages); err != nil { |
| 501 | agentLog.Warn(ctx, "failed to save cleaned messages", map[string]any{"error": err}) |
| 502 | } else { |
| 503 | agentLog.Info(ctx, "cleaned message history", map[string]any{"agent_id": a.id, "removed": len(messages) - len(cleanedMessages), "remaining": len(cleanedMessages)}) |
| 504 | } |
| 505 | } else { |
| 506 | agentLog.Warn(ctx, "could not fix message history, clearing all messages", map[string]any{"agent_id": a.id}) |
| 507 | messages = []types.Message{} |
| 508 | _ = a.deps.Store.SaveMessages(ctx, a.id, messages) |
| 509 | } |
| 510 | } |
| 511 | a.messages = messages |
| 512 | } |
| 513 | |
| 514 | toolRecords, err := a.deps.Store.LoadToolCallRecords(ctx, a.id) |
| 515 | if err == nil { |
| 516 | for _, record := range toolRecords { |
| 517 | a.toolRecords[record.ID] = &record |
| 518 | } |
| 519 | } |
| 520 | |
| 521 | // 注意:工具手册已在 Agent 创建时注入,这里不再重复注入 |
| 522 | |
| 523 | // 保存Agent信息 |
| 524 | info := types.AgentInfo{ |
| 525 | AgentID: a.id, |
| 526 | TemplateID: a.template.ID, |
| 527 | CreatedAt: a.createdAt, |
| 528 | Lineage: []string{}, |
| 529 | ConfigVersion: "v1.0.0", |
| 530 | MessageCount: len(a.messages), |
| 531 | } |
| 532 | |
| 533 | if err := a.deps.Store.SaveInfo(ctx, a.id, info); err != nil { |
| 534 | return err |
| 535 | } |
| 536 | |
| 537 | // 通知 Middleware Agent 启动 (Phase 6C) |
| 538 | if a.middlewareStack != nil { |
| 539 | if err := a.middlewareStack.OnAgentStart(ctx, a.id); err != nil { |
| 540 | return fmt.Errorf("middleware onAgentStart: %w", err) |
| 541 | } |
| 542 | } |
| 543 | |
| 544 | return nil |
| 545 | } |
no test coverage detected