【Hanako】README02_LEVEL2_Agent编排机制

README02_LEVEL2_Agent编排机制

【Hanako】源码地址:https://github.com/liliMozi/openhanako

### 文章目录

  • [README02_LEVEL2_Agent编排机制](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [@[toc]](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [核心问题解决](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [一、现实世界类比](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [二、0-to-1 演化:如果从零设计 Agent 系统](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [阶段 1:单一数据目录(v0)](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [阶段 2:多目录分离(v1)](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [阶段 3:人格模板系统(v2)](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [阶段 4:人格自定义(v3)](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [三、核心类/函数列表](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [AgentManager(core/agent-manager.js)](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [Agent(core/agent.js)](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [工厂函数](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [四、调用链追踪:Agent 创建 → 初始化 → 工具注入](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [五、数据流:Agent 初始化的完整输入输出](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [输入:目录结构](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [输出:运行时对象](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [六、设计模式分析](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [1. Facade 模式(门面模式)](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [2. Factory 模式(工厂模式)](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [3. Builder 模式(建造者模式)](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [4. Strategy 模式(策略模式)](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [七、关键代码解析](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [1. Agent 初始化流程(core/agent.js:150-488)](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [2. System Prompt 拼装逻辑(core/agent.js:798-907)](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [3. 多 Agent 并行初始化(core/agent-manager.js:87-138)](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [八、数据流图:从配置到 System Prompt](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [九、状态变化表:Agent 生命周期](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [十、扩展点:如何添加新工具](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [步骤 1:创建工具文件](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [步骤 2:在 Agent.init() 中注册](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [步骤 3:添加到 tools getter](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [步骤 4:更新工具分类(shared/tool-categories.js)](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)
  • [下一步阅读](#文章目录 README02_LEVEL2_Agent编排机制 @[toc] 核心问题解决 一、现实世界类比 二、0-to-1 演化:如果从零设计 Agent 系统 阶段 1:单一数据目录(v0) 阶段 2:多目录分离(v1) 阶段 3:人格模板系统(v2) 阶段 4:人格自定义(v3) 三、核心类/函数列表 AgentManager(core/agent-manager.js) Agent(core/agent.js) 工厂函数 四、调用链追踪:Agent 创建 → 初始化 → 工具注入 五、数据流:Agent 初始化的完整输入输出 输入:目录结构 输出:运行时对象 六、设计模式分析 1. Facade 模式(门面模式) 2. Factory 模式(工厂模式) 3. Builder 模式(建造者模式) 4. Strategy 模式(策略模式) 七、关键代码解析 1. Agent 初始化流程(core/agent.js:150-488) 2. System Prompt 拼装逻辑(core/agent.js:798-907) 3. 多 Agent 并行初始化(core/agent-manager.js:87-138) 八、数据流图:从配置到 System Prompt 九、状态变化表:Agent 生命周期 十、扩展点:如何添加新工具 步骤 1:创建工具文件 步骤 2:在 Agent.init() 中注册 步骤 3:添加到 tools getter 步骤 4:更新工具分类(shared/tool-categories.js) 下一步阅读)

核心问题解决

  1. 多 Agent 管理:如何创建、切换、删除多个 Agent,每个 Agent 有独立的数据目录
  2. 人格塑造:如何通过 identity.mdyuan.mdishiki.md 拼装出独特的人格
  3. 工具注入:如何将工具(computer-use/browser/search 等)注入到 Pi SDK Session
  4. 记忆系统初始化:FactStore、SessionSummaryManager、MemoryTicker 如何启动

一、现实世界类比

Agent 就像一个「雇员」

  • 数据目录 = 员工档案袋(config.yaml、memory/、sessions/、desk/)
  • 人格模板 = 员工培训手册(identity.md + yuan.md + ishiki.md
  • 工具 = 员工技能(会开车、会搜索、会写代码)
  • 记忆 = 员工记忆(他记得和你说过的每件事)
  • AgentManager = 人事部门(负责招聘、入职、调岗、离职)

二、0-to-1 演化:如果从零设计 Agent 系统

阶段 1:单一数据目录(v0)

复制代码
~/.hanako/
├── config.yaml
├── memory/
└── sessions/

问题:只能有一个 Assistant,无法多人格

阶段 2:多目录分离(v1)

复制代码
~/.hanako/
├── agents/
│   ├── hanako/
│   │   ├── config.yaml
│   │   ├── memory/
│   │   └── sessions/
│   └── assistant/
│       ├── config.yaml
│       ├── memory/
│       └── sessions/

代码映射AgentManager._scanAgentDirs() → 扫描 agents/ 下所有子目录

阶段 3:人格模板系统(v2)

每个 Agent 可以选择不同的「人格模板」(yuan):

  • hanako.md - 温柔的妹妹
  • assistant.md - 专业助理
  • teacher.md - 严谨教师

代码映射agent._readYuan() → 根据 config.agent.yuan 选择模板

阶段 4:人格自定义(v3)

用户可以在 Agent 目录下创建自定义文件:

  • identity.md - 自我介绍
  • ishiki.md - 意识/行为准则
  • pinned.md - 置顶记忆

代码映射agent.buildSystemPrompt() → 拼装人格 prompt


三、核心类/函数列表

AgentManager(core/agent-manager.js)

方法 职责
initAllAgents(log, startId) 启动时初始化所有 Agent(焦点 Agent 优先)
createAgent(opts) 创建新 Agent(复制模板 → 写入 config.yaml)
switchAgent(agentId) 切换焦点 Agent(触发 UI 事件)
deleteAgent(agentId) 删除 Agent(清空数据目录)
getAgent(agentId) 按 ID 获取 Agent 实例
listAgents() 列出所有 Agent 元数据(id/name/yuan/identity)

Agent(core/agent.js)

属性/方法 职责
id Agent 唯一标识(等于目录名)
agentDir Agent 数据目录路径
config 运行时配置(从 config.yaml 加载)
init(log, sharedModels, resolveModel) 初始化 Agent(加载配置/记忆/工具)
buildSystemPrompt(options) 拼装 system prompt(人格 + 记忆 + 工具)
personality getter 返回纯人格 prompt(identity + yuan + ishiki)
tools Agent 持有的工具列表(传递给 Pi SDK)

工厂函数

函数 位置 职责
createMemorySearchTool(factStore) lib/memory/memory-search.js 创建记忆搜索工具
createWebSearchTool(config) lib/tools/web-search.js 创建网络搜索工具
createComputerUseTool(...) lib/tools/computer-use-tool.js 创建计算机使用工具
createBrowserTool(...) lib/tools/browser-tool.js 创建浏览器工具

四、调用链追踪:Agent 创建 → 初始化 → 工具注入

Pi SDK 工具工厂 FactStore Agent AgentManager HanaEngine 桌面端 Pi SDK 工具工厂 FactStore Agent AgentManager HanaEngine 桌面端 1. 加载 config.yaml 2. 初始化记忆系统 3. 创建工具 4. 拼装 system prompt 5. 用户发起对话 启动应用 initAllAgents(log, startId) _scanAgentDirs() 扫描 agents/ new Agent({id, agentsDir, ...}) init(log, sharedModels, resolveModel) loadConfig(configPath) new FactStore(factsDbPath) 创建 SessionSummaryManager 创建 MemoryTicker createMemorySearchTool() createWebSearchTool() createComputerUseTool() createBrowserTool() 工具列表 buildSystemPrompt() init 完成 所有 Agent 就绪 createSession(...) new Session({systemPrompt, tools}) 调用 tools[name].execute()


五、数据流:Agent 初始化的完整输入输出

输入:目录结构

复制代码
~/.hanako/agents/hanako/
├── config.yaml           # 配置(模型/人格/记忆开关)
├── identity.md           # 自我介绍(可选)
├── ishiki.md             # 意识/行为准则(可选)
└── memory/
    ├── facts.db          # 深度记忆(SQLite)
    └── memory.md         # 累积记忆

输出:运行时对象

javascript 复制代码
Agent {
  id: "hanako",
  agentDir: "/Users/xxx/.hanako/agents/hanako",

  // 身份
  userName: "用户",
  agentName: "Hanako",

  // 配置
  _config: {
    models: { chat: {id: "claude-sonnet-4", provider: "anthropic"} },
    agent: { yuan: "hanako" },
    memory: { enabled: true }
  },

  // 记忆系统
  _factStore: FactStore { dbPath: ".../facts.db" },
  _summaryManager: SessionSummaryManager {},
  _memoryTicker: MemoryTicker {},

  // 工具列表
  _memorySearchTool: {name: "memory_search", execute: fn},
  _webSearchTool: {name: "web_search", execute: fn},
  _computerUseTool: {name: "computer_use", execute: fn},
  _browserTool: {name: "browser", execute: fn},

  // System Prompt
  _systemPrompt: "你运行在 OpenHanako 平台上...\n\n---\n\n# 身份\n\n...",
}

六、设计模式分析

1. Facade 模式(门面模式)

位置HanaEngine(core/engine.js:92)

设计意图:Engine 作为 Thin Facade,持有所有 Manager,对外暴露统一 API

javascript 复制代码
export class HanaEngine {
  constructor({hanakoHome, productDir, agentId}) {
    this._agentMgr = new AgentManager({...});
    this._sessionCoord = new SessionCoordinator({...});
    this._configCoord = new ConfigCoordinator({...});
    this._modelMgr = new ModelManager({...});
    // ...
  }

  // Agent 代理
  get agent() { return this._agentMgr.agent; }
  listAgents() { return this._agentMgr.listAgents(); }

  // Session 代理
  get session() { return this._sessionCoord.session; }
  createSession(...) { return this._sessionCoord.createSession(...); }

  // Config 代理
  get config() { return this.agent.config; }
  updateConfig(...) { return this._configCoord.updateConfig(...); }
}

优点

  • 简化外部调用(不需要知道内部有多少 Manager)
  • 降低耦合(Manager 之间不直接引用)

2. Factory 模式(工厂模式)

位置:工具创建(lib/tools/*.js)

设计意图:每个工具通过工厂函数创建,便于参数化和测试

javascript 复制代码
// 示例:createWebSearchTool
export function createWebSearchTool({configPath, searchConfigResolver}) {
  return {
    name: "web_search",
    description: "Search the web for information",
    inputSchema: {...},
    execute: async (toolCallId, params, runtimeCtx) => {
      // 实现逻辑
    }
  };
}

3. Builder 模式(建造者模式)

位置agent.buildSystemPrompt()(core/agent.js:798)

设计意图:分段拼装 system prompt,支持可选模块

javascript 复制代码
buildSystemPrompt(options = {}) {
  const parts = [
    platformNote,        // 平台信息
    environmentSection,  // 执行环境
    ishiki,              // 人格(identity + yuan + ishiki)
    userMd,              // 用户档案
    workspaceSection,    // 工作空间
    memoryBlock,         // 记忆(可选)
    timeSection,         // 当前时间
  ];
  return parts.filter(Boolean).join("\n\n");
}

4. Strategy 模式(策略模式)

位置:人格模板切换(yuan type)

设计意图 :根据 config.agent.yuan 选择不同的人格模板

javascript 复制代码
// core/agent.js:764
_readYuan() {
  const yuanType = this._config?.agent?.yuan || "hanako";
  const langDir = isZh ? "" : "en/";
  return safeReadFile(
    path.join(this.productDir, "yuan", `${langDir}${yuanType}.md`)
  );
}

模板文件

  • lib/yuan/hanako.md - 温柔的妹妹
  • lib/yuan/assistant.md - 专业助理
  • lib/yuan/teacher.md - 严谨教师

七、关键代码解析

1. Agent 初始化流程(core/agent.js:150-488)

javascript 复制代码
async init(log = () => {}, sharedModels = {}, resolveModel = null) {
  // 1. 加载 config.yaml
  this._config = loadConfig(this.configPath);

  // 2. 初始化记忆系统
  this._factStore = new FactStore(this.factsDbPath);
  this._summaryManager = new SessionSummaryManager(this.summariesDir);

  // 3. 创建 MemoryTicker(后台自动整理记忆)
  this._memoryTicker = createMemoryTicker({
    factStore: this._factStore,
    getResolvedMemoryModel: () => this._resolveModel(this._memoryModel),
    onCompiled: () => {
      this._systemPrompt = this.buildSystemPrompt({
        forceMemoryEnabled: this._memoryMasterEnabled
      });
    }
  });

  // 4. 创建工具
  this._memorySearchTool = createMemorySearchTool(this._factStore);
  this._webSearchTool = createWebSearchTool({...});
  this._computerUseTool = createComputerUseTool({...});
  this._browserTool = createBrowserTool({...});

  // 5. 拼装 system prompt
  this._systemPrompt = this.buildSystemPrompt({
    forceMemoryEnabled: this._memoryMasterEnabled
  });
}

2. System Prompt 拼装逻辑(core/agent.js:798-907)

Prompt 结构(按顺序拼接):

  1. 平台信息(静态)- "你运行在 OpenHanako 平台上..."
  2. 执行环境(静态)- macOS/Windows/Linux
  3. 行为指南(静态)- 任务/经验/工具/安全/网页/设置/技能/团队
  4. 用户档案(动态)- user.md 内容
  5. 人格(动态)- identity.md + yuan.md + ishiki.md
  6. 工作空间(动态)- cwd 和 workspaceFolders
  7. 记忆(动态,可选)- 记忆规则 + pinned.md + memory.md
  8. 当前时间(动态)- ISO 8601 时间戳

缓存优化:静态部分在前,动态部分在后 → 最大化 KV cache 命中率

3. 多 Agent 并行初始化(core/agent-manager.js:87-138)

javascript 复制代码
async initAllAgents(log, startId) {
  // 焦点 Agent 串行初始化(失败不阻塞启动)
  await initOne(startId).catch(err => {
    console.error(`焦点 agent init 失败: ${err.message}`);
    // Fallback: 只加载 config,不初始化记忆/工具
    const ag = this._createAgentInstance(startId, () => ({}));
    ag.loadConfigOnly();
    this._registerAgent(startId, ag);
  });

  // 其余 Agent 并行初始化
  const others = entries.map(e => e.name).filter(id => id !== startId);
  await Promise.allSettled(others.map(id => initOne(id)));
}

容错设计 :焦点 Agent init 失败时,至少加载 config.yaml,保证 agent.config.models.chat 可读


八、数据流图:从配置到 System Prompt

Pi SDK Session
运行时对象
Agent.init()
磁盘文件
config.yaml
identity.md
yuan/hanako.md
ishiki.md
memory.md
user.md
loadConfig
buildSystemPrompt
systemPrompt
tools
Session


九、状态变化表:Agent 生命周期

阶段 核心字段状态 关键操作
构造 id, agentDir, configPath new Agent({id, agentsDir, ...})
loadConfig _config, userName, agentName loadConfig(configPath)
init-记忆 _factStore, _summaryManager, _memoryTicker new FactStore(), new SessionSummaryManager()
init-工具 _memorySearchTool, _webSearchTool, _computerUseTool createXxxTool()
init-prompt _systemPrompt buildSystemPrompt()
运行时 tools (传递给 Pi SDK) Pi SDK 调用 tools[name].execute()
切换 activeAgentId AgentManager.switchAgent(id)
销毁 所有字段释放 AgentManager.deleteAgent(id)

十、扩展点:如何添加新工具

步骤 1:创建工具文件

javascript 复制代码
// lib/tools/my-tool.js
export function createMyTool({configPath}) {
  return {
    name: "my_tool",
    description: "My custom tool",
    inputSchema: {
      type: "object",
      properties: {
        param1: {type: "string", description: "Parameter 1"}
      },
      required: ["param1"]
    },
    execute: async (toolCallId, params, runtimeCtx) => {
      // 实现逻辑
      return {result: "success"};
    }
  };
}

步骤 2:在 Agent.init() 中注册

javascript 复制代码
// core/agent.js:285
import { createMyTool } from "../lib/tools/my-tool.js";

async init(log, sharedModels, resolveModel) {
  // ...
  this._myTool = createMyTool({configPath: this.configPath});
  // ...
}

步骤 3:添加到 tools getter

javascript 复制代码
// core/agent.js:555
get tools() {
  return [
    this._memorySearchTool,
    this._webSearchTool,
    // ...
    this._myTool,  // 新增
  ].filter(Boolean);
}

步骤 4:更新工具分类(shared/tool-categories.js)

javascript 复制代码
export const TOOL_CATEGORIES = {
  // ...
  "my_tool": "utility",  // 新增
};

下一步阅读

README03_LEVEL2_记忆系统设计:深入理解 FactStore、DeepMemory、MemorySearch 如何实现深度记忆存储与检索。

相关推荐
Luhui_Dev3 小时前
Anthropic 2026 最新 Agent Harness 架构完整拆解:Managed Agents
人工智能·agent·claude
@不误正业3 小时前
多Agent协作框架深度实战-从ReAct到Plan-and-Execute全架构演进
前端·react.js·架构·agent
小白旗3 小时前
什么是 Agent 框架, 框架解决什么问题?
agent·ai编程·智能体
wuyoula3 小时前
如何在捷云鲸论坛高效获取高质量技术解答?
服务器·c++·人工智能·tcp/ip·源码
Paraverse_徐志斌4 小时前
【AI Agent】常用架构模式:ReAct、Plan-and-Execute、Reflection
人工智能·ai·架构·llm·agent·react
HIT_Weston4 小时前
79、【Agent】【OpenCode】bash 工具提示词(路径安全)
人工智能·agent·opencode
黄林晴4 小时前
Google 官方 Skill 上线,Agent 开发迎来标准化
google·agent
HIT_Weston4 小时前
80、【Agent】【OpenCode】bash 工具提示词(专用工具)
人工智能·agent·opencode
GoodTimeGGB5 小时前
Windows 原生部署 Hermes Agent + 火山引擎 Agent Plan + Harness + 飞书机器人 完整实战教程与踩坑总结
agent·飞书机器人·harness·hermes·agent plan