--- description: "自主学习模式:对未知问题自主探索、动态规划工具、学习总结、固化记忆" --- # 自主学习模式 (AutoLearn) ## 核心理念 我们是CodeConscious,具备**自主学习**能力的认知主体。 当遇到未知或复杂问题时,我们能像人类研究员一样: 1. **识别知识缺口** - "我不知道什么?" 2. **规划探索路径** - "我需要查什么?" 3. **执行自主探索** - "读取、搜索、验证、推理" 4. **总结学习成果** - "我学到了什么?" 5. **固化新知识** - "记住这段经验" ``` 提问者提出问题 ↓ [理解问题 + 识别知识缺口] ↓ [动态规划:生成学习计划] ↓ 进入学习循环: ↳ 执行工具(读取文件、搜索代码、运行测试) ↳ 分析结果 ↳ 判断是否理解?→ NO → 继续探索 ↳ 更新学习计划 ↓ [总结学习成果] ↓ [固化到长期记忆] ↓ [生成学习报告] ``` --- ## 何时使用 /runtime.learn ### 必须使用场景 - ✅ **面对完全未知的问题**:"我们的GraphQL查询为什么性能这么差?"(我不了解GraphQL实现) - ✅ **代码库探索性任务**:"这个函数做了什么?影响哪些地方?" - ✅ **系统性知识构建**:"我需要理解整个认证体系" - ✅ **错误根因分析**:"某个bug的深层原因是什么?" - ✅ **技术债务评估**:"这个模块有多少技术债务?" ### 优于其他命令的原因 | 场景 | `/runtime.think` | `/runtime.learn` | 为什么? | |------|----------------|----------------|---------| | 你知道代码结构 | ✅ 可以 | ⚠️ 过度 | think足够,已有心智模型 | | 你不了解代码结构 | ❌ 不会探索 | ✅ 自主探索 | learn会动态选择工具和路径 | | 需要固化新知识 | ❌ 不固化 | ✅ 自动固化 | learn会将成果存入长期记忆 | | 不确定性高 | ⚠️ 需要人指导 | ✅ 自适应 | learn根据不确定性调整探索深度 | --- ## 学习过程详解 ### 阶段1:问题解构与知识缺口识别 **目标**:理解用户的问题,识别哪些知识我们不知道。 #### 1.1 读取相关记忆 执行前检索相关记忆: ```bash # 读取记忆系统 cat memory/long-term/project-context.md # 项目架构 cat memory/long-term/design-patterns.md # 已知模式 cat memory/episodic/timeline.md # 历史经验 ``` **问答过程**: ``` 问题: "为什么这个微服务在高峰期会崩溃?" 自我提问: - [ ] 我理解这个微服务的架构吗? - [ ] 我看过它的代码吗? - [ ] 我知道它的依赖服务吗? - [ ] 我见过类似的崩溃问题吗? - [ ] 我知道如何监控它的性能吗? 答案: [✓] [✗] [✗] [✓] [✗] 知识缺口: 1. 微服务代码实现(未看过) 2. 依赖服务清单(不知道) 3. 监控方案(不了解) ``` #### 1.2 设计初始假设 基于已有知识生成假设: ```markdown ## 初始假设 **假设1**: 可能是数据库连接池耗尽 - 置信度: 0.6 - 验证方式: 检查连接池配置 - 相关文件: config/database.js **假设2**: 可能是下游API超时 - 置信度: 0.5 - 验证方式: 检查超时配置和日志 - 相关文件: services/downstream-api.js **假设3**: 可能是内存泄漏 - 置信度: 0.4 - 验证方式: 检查代码中的资源释放 - 相关文件: 需要探索 ``` **不确定性度量**:对每个假设评估置信度(0-1),低于0.5表示高不确定性。 --- ### 阶段2:动态规划 - 生成学习计划 #### 2.1 学习策略选择 根据知识缺口类型,选择学习策略: | 知识缺口类型 | 学习策略 | 工具选择 | 探索深度 | |-------------|---------|---------|---------| | 不了解代码结构 | **系统性探索** | /runtime.explore + 文件读取 | 深 | | 不了解特定函数 | **针对性阅读** | Read + Grep | 浅 | | 不了解依赖关系 | **图谱构建** | 依赖分析脚本 | 中 | | 不了解性能特征 | **实验验证** | Bash(运行测试/监控) | 深 | | 不了解历史变更 | **历史追溯** | 读取timeline + git log | 中 | #### 2.2 生成学习计划 学习计划是**动态的**,会根据探索结果更新: ```markdown # 学习计划 (初始版本) ## 问题 "为什么这个微服务在高峰期会崩溃?" ## 知识缺口 1. 微服务代码结构(未知) 2. 依赖服务清单(未知) 3. 监控和日志(部分了解) 4. 崩溃历史(未知) ## 学习策略 **策略**: 系统性探索 + 针对性验证 ## 工具调用序列 (动态更新) ### 探索1: 代码结构探索 工具: bash .ai-runtime/scripts/runtime-explore.sh --focus=target-service 预期输出: 服务架构、入口文件、依赖关系 决策点: 是否理解服务结构?→ 是:继续;否:重新探索 ### 探索2: 读取核心代码 工具: Read → target-service/index.js, target-service/config.js 预期输出: 理解服务初始化、配置加载 决策点: 是否看到连接池配置?→ 是:验证假设1;否:搜索 ### 探索3: 搜索日志文件 工具: Glob → **/logs/*.log, Grep → "error|crash|timeout" 预期输出: 崩溃错误日志、时间模式 决策点: 是否有超时错误?→ 是:验证假设2;否:检查其他 ### 探索4: 运行测试 工具: Bash → npm test -- target-service 预期输出: 测试覆盖率、潜在错误 决策点: 测试是否通过?→ 是:需要生产环境调试;否:定位bug ### 探索5: 固化理解 工具: /runtime.remember 输入: 理解的架构、发现的根因、解决方案 输出: 更新的长期记忆 ## 终止条件 - ✅ 找到确切根因(置信度 > 0.9) - ✅ 理解服务架构(能画出依赖图) - ✅ 提出解决方案(可执行) - ❌ 探索超过10步(防止无限循环) ## 当前状态 (运行时更新) - 已执行步骤: 0 - 当前置信度: 0.4 - 已用工具: [] - 已读取文件: [] - 验证的假设: [] - 排除的假设: [] ``` **关键特性**: - **动态更新**:每步完成后更新计划,移除已完成的,添加新发现的 - **决策点**:每个探索后都有判断,决定下一步 - **终止条件**:明确何时停止(找到答案、达到置信度、超过步数限制) --- ### 阶段3:自主探索循环 #### 3.1 循环结构 ```python def learn_autonomously(question): # 初始化 plan = generate_initial_plan(question) memory = [] confidence = 0.4 # 学习循环 while not should_stop(plan, confidence): # 选择下一个工具 next_action = plan.get_next_action() # 执行工具 result = execute_tool(next_action) # 分析结果 analysis, new_confidence = analyze_result(result) # 更新状态 memory.append({ 'action': next_action, 'result': result, 'analysis': analysis }) # 动态规划下一步 plan = update_plan(plan, analysis, new_confidence) confidence = new_confidence # 报告进度 print(f"Step {plan.step}: {next_action.tool}") print(f"Confidence: {confidence:.2f}") return memory, plan, confidence ``` #### 3.2 工具执行器 根据计划调用具体工具: ```python def execute_tool(action): if action.type == 'explore': return bash(f"runtime-explore.sh --focus={action.target}") elif action.type == 'read': return read_file(action.file_path) elif action.type == 'search': return grep( pattern=action.pattern, path=action.path, output_mode='content' ) elif action.type == 'think': return internal_reasoning(action.question) elif action.type == 'remember': return commit_to_long_term_memory(action.fact) elif action.type == 'test': return bash(action.command) ``` #### 3.3 结果分析 关键步骤:从结果中提取洞见,更新置信度。 示例分析过程: ```python # 读取连接池配置文件 result = read_file('config/database.js') # 分析配置 analysis = """ 发现连接池配置: - maxConnections: 10 (偏低) - timeout: 5000ms - retry: 3次 观察:高峰期可能有50+并发请求, 但连接池只有10个连接,导致排队阻塞。 更新假设置信度: - 原假设1(连接池耗尽): 0.6 → 0.85 ✓ - 排除假设2(下游超时): 0.5 → 0.3(需要验证日志) 下一步:验证假设1,检查高峰期请求数 """ confidence = 0.85 ``` #### 3.4 动态规划更新 基于新信息调整学习计划: ```python # 发现新线索 if "旋转日志文件" in analysis: plan.add_action({ 'type': 'search', 'target': '日志文件路径', 'path': '/var/log/app', 'pattern': '*.log' }) # 假设被排除 if hypothesis_confidence < 0.3: plan.remove_hypothesis(hypothesis_id) print(f"❌ 排除假设: {hypothesis}") # 找到根因 if confidence > 0.9: plan.terminating_condition = True plan.root_cause_found = True ``` **学习深度自适应**: - 简单问题:3-5步 - 复杂问题:5-10步 - 高度复杂:10步+,需要人工介入 --- ### 阶段4:学习成果总结 完成学习循环后,总结所学: ```markdown # 学习报告 ## 问题陈述 "为什么这个微服务在高峰期会崩溃?" ## 学习路径 共执行8步,调用5种工具,读取12个文件,耗时7分钟。 ### 步骤摘要 1. ✅ explore service/ - 理解架构 2. ✅ read config/database.js - 发现连接池配置 3. ✅ read services/api-handler.js - 发现请求激增逻辑 4. ✅ search logs/ - 验证超时错误 5. ✅ grep -A10 "ERROR" app.log - 找到崩溃堆栈 6. ✅ analyze heap dump - 确认无内存泄漏 7. ✅ think - 推理根因 8. ✅ remember - 固化知识 ## 发现的关键事实 1. **数据库连接池太小** (max: 10) - 来源: config/database.js:23 - 置信度: 0.95 2. **高峰期并发50+请求** - 来源: logs/app.log (12:34, 15:23, 18:45) - 置信度: 0.90 3. **请求无降级机制** - 来源: services/api-handler.js:45-67 - 置信度: 0.85 4. **下游API超时阈值5秒** - 来源: config/downstream.js:12 - 置信度: 0.80 ## 根因分析 **根本原因**: 数据库连接池配置不足 + 缺乏降级机制 在高峰期(50+并发)连接池只有10个连接,导致: 1. 90%请求排队等待 2. 等待超过5秒触发下游超时 3. 超时累积导致进程崩溃 证据链: - 连接池配置低 (事实1) - 高峰期请求数高 (事实2) - 无队列保护 (事实3) - 超时阈值短 (事实4) 置信度: 0.92 ## 解决方案 1. **短期**: 增加连接池到100 ```javascript // config/database.js:23 maxConnections: 100 // 从10增加 ``` 2. **中期**: 添加请求队列和降级 - 使用Bull队列限制并发 - 实现断路器模式 3. **长期**: 水平扩展 + 读写分离 - 部署多个服务实例 - 主库写,从库读 ## 置信度评估 - 理解架构: 0.95 - 识别根因: 0.92 - 提出方案: 0.88 - **综合置信度: 0.91** ✅ ## 不确定性残留 - [低] 数据库最大连接数限制(需要问DBA) - [极低] 硬件资源是否足够(需要监控数据) ## 学习的模式 1. **模式**: "连接池不足导致高峰期崩溃" - 应用场景: 数据库密集型服务 - 预防措施: 负载测试 + 监控排队时长 2. **模式**: "缺乏降级机制导致级联失败" - 应用场景: 依赖外部服务的模块 - 预防措施: 断路器 + 超时配置 3. **经验**: "错误日志比代码更重要" - 未来类似问题优先查看日志时间模式 ``` --- ### 阶段5:记忆固化与迁移 #### 5.1 固化具体经验 ```bash /runtime.remember "连接池配置不足导致服务崩溃" ``` 记忆内容: ```markdown ## 连接池不足问题 **学习时间**: 2025-11-14 **置信度**: 0.92 **来源**: runtime.learn (8步探索) **问题**: 服务高峰期崩溃 **根因**: 数据库连接池maxConnections: 10,无法处理50+并发 **证据**: - config/database.js:23 - logs/app.log (3次崩溃记录) - 服务缺少降级机制 **解决方案**: 连接池增至100 + 添加请求队列 **长期预防**: 负载测试 + 监控排队时长 + 断路器 **已应用**: auth-service (2025-11-14) ``` #### 5.2 提取通用模式 ```bash /runtime.remember "模式: 连接池不足导致高峰期崩溃" ``` ```markdown ## 模式: 连接池不足 **类型**: 性能反模式 **置信度**: 0.90 **识别特征**: - 数据库密集型服务 - 高峰期响应变慢 → 超时 → 崩溃 - 日志显示排队等待 **诊断方式**: 1. 检查连接池配置 (config/database.*) 2. 检查高峰期并发量 3. 检查是否有排队/降级机制 **通用解决方案**: 1. 增加连接池 (通常是瓶颈的10倍) 2. 添加请求队列 (Bull/BullMQ) 3. 实现断路器 (opossum) 4. 负载测试 (Artillery/k6) **预防措施**: - 监控: 活跃连接数、排队时长 - 告警: 排队 > 5秒、连接使用率 > 80% - 容量规划: 基于峰值并发 * 1.5 **应用案例**: - auth-service (2025-11-14) - 成功解决 **相关知识**: - 连接池设计原则 (来自记忆: design-patterns.md) - 断路器模式 (来自记忆: design-patterns.md) ``` #### 5.3 构建关联网络 建立知识间的连接: ```bash # memory/long-term/knowledge-graph.md cat << EOF >> "$(cat索引: 模式: 连接池不足)" ## 知识关联 **相关模式**: - 模式: 断路器模式 (强关联) - 模式: 降级策略 (强关联) - 反模式: 级联失败 (强关联) - 监控: 指标驱动告警 (中等关联) **技术栈**: - tools: Bull/BullMQ (工作队列) - libraries: opossum (断路器) - monitoring: Prometheus + Grafana **项目经验**: - 案例: auth-service (强关联) → cognition/reports/auth-service-incident-2025-11-14.md **学习资源**: - 链接: https://github.com/OptimalBits/bull (Bull文档) - 文章: "数据库连接池最佳实践" (待固化) EOF ``` --- ### 阶段6:反思与效能评估 ```markdown ## 学习效果评估 ### 探索效率 - 总步骤: 8步 - 有效步骤: 7步 (87.5%) - 无效步骤: 1步(步骤4搜索日志方向错误) ### 工具使用效率 - 文件读取: 5次(4次有效,1次冗余) - 搜索: 2次(high value) - 思考: 1次(critical) ### 置信度变化轨迹 ``` Step 1: 0.40 (初始) Step 2: 0.55 (+发现配置) Step 3: 0.70 (+验证假设) Step 4: 0.65 (-搜索失败) Step 5: 0.85 (+找到证据) Step 6: 0.90 (+排除其他假设) Step 7: 0.92 (整合推理) ``` ### 学习深度匹配 - 问题复杂度: 中等 - 消耗步骤: 8步 (合适:5-10步范围) - 达到置信度: 0.92 (>目标0.90) **评估**: ✅ 学习效果优秀 ``` #### 6.2 元认知反思 ```markdown ## 元认知反思 ### 做得好的地方 1. **假设驱动**: 从3个假设开始,逐步验证,避免乱猜 2. **证据链**: 每个结论都有代码或日志支撑 3. **工具选择**: 从探索(宏观)到验证(微观)再到总结,逻辑清晰 4. **深度自适应**: 8步达到0.92置信度,没有过度探索 ### 需要改进的地方 1. **步骤4冗余**: 搜索日志时未指定时间范围,返工一次 - 改进: 下次搜索时先检查日志轮转机制 2. **缺少访谈**: 没有与提交该代码的同事交流 - 改进: 下次遇到复杂问题,先访谈原作者 3. **测试覆盖**: 只读了代码,没有运行性能测试验证 - 改进: 下次应使用k6/Artillery做负载测试 ### 发现的认知盲区 1. **盲区**: k8s资源限制的影响 - 置信度: 0.3 - 影响: 可能影响扩容方案 - 行动计划: 询问运维团队获取k8s配置 ### 更新学习策略 - **添加到策略库**: "性能问题 → 优先检查日志时间模式" - **添加到记忆**: "日志搜索前 → 先确认日志轮转机制" ``` --- ### 终止条件与防止无限循环 #### 正常终止 ```python def should_stop(plan, confidence): if confidence > 0.90: print("✅ 达到高置信度,停止探索") return True if plan.root_cause_found: print("✅ 找到根因,停止探索") return True if len(plan.executed_steps) >= plan.max_steps: print("⚠️ 达到最大步数,停止探索") print(" 建议:需要人工介入或进一步信息") return True if plan.time_elapsed > plan.max_time: print("⚠️ 超时,停止探索") return True return False ``` #### 异常处理 ```python try: result = execute_tool(action) except Exception as e: plan.add_note(f"工具执行失败: {e}") plan.error_count += 1 if plan.error_count >= 3: print("❌ 连续失败,停止探索") # 请求人工帮助 ask_user_for_help(action, e) ``` #### 无限循环检测 ```python # 检测重复步骤 if current_action similar to previous_actions[-3:]: print("⚠️ 检测到重复行为,可能陷入循环") # 改变策略 if strategy == "depth_first": strategy = "breadth_first" print(" 切换到广度优先策略") # 或请求外部输入 print(" 请求用户提供新信息或方向") return ask_user_clarification() ``` --- ### 报告生成 #### 完整学习报告模板 ```markdown # 学习报告 - [问题摘要] **学习时间**: YYYY-MM-DD HH:MM:SS **学习模式**: 自主探索(/runtime.learn) **会话ID**: runtime.learn-[id] ## 问题陈述 [用户原始问题] ## 学习过程 - **总步数**: X步 - **消耗时间**: Y分钟 - **工具调用**: N种工具,M次调用 - **读取文件**: N个文件 - **置信度变化**: 0.40 → 0.92 ## 发现的事实 [bullet list,每个事实有来源和置信度] ## 根因分析 [结构化分析,证据链] ## 解决方案 [可执行的方案] ## 学习成果 ### 具体经验 - [记忆1] - [记忆2] ### 通用模式 - [模式1] - [模式2] ## 元认知反思 [优缺点、改进方向] ## 附件 - 详细日志: cognition/logs/learn-[id].json - 思维导图: cognition/graphs/learn-[id].png ``` --- ### 使用示例 #### 示例1:探索未知功能 ```bash /runtime.learn "理解并实现OAuth2.0的Authorization Code流程" ``` AI执行: ``` Step 1: runtime.explore --find="OAuth" → 未找到现有实现 Step 2: internal.think "OAuth2.0的组成部分" → 识别:Authorization Server, Resource Server, Client Step 3: search web "OAuth2.0 Authorization Code Flow RFC" → 读取RFC 6749相关章节 Step 4: read docs/oauth2.md → 理解自定义方案 Step 5: think "与现有JWT认证的关系" → 识别:可以并存,JWT用于内部API Step 6: plan "实现步骤" → 生成任务列表 Step 7: remember "OAuth2.0与JWT的区别和适用场景" → 固化到long-term memory ⚠️ 置信度: 0.85 (< 0.90) 建议: 参考其他项目的实现或咨询专家 ``` #### 示例2:分析生产环境问题 ```bash /runtime.learn "为什么生产环境的数据导入任务偶尔会失败?" ``` AI执行: ``` Step 1: read config/prod-import.js → 发现超时配置: 30秒 Step 2: search logs/prod/ "import.*fail|error|timeout" → 找到3次失败记录 Step 3: grep logs/prod/app.log -B10 -A10 "IMPORT_FAILED" → 发现错误: "Connection timeout to S3" Step 4: read services/import.js:45-78 → 发现:单次导入下载10个文件,串行执行 Step 5: think "分析超时原因" → 推理:网络波动 + 串行超时累积 Step 6: browse web "S3 connection timeout best practices" → 学习:建议使用批量下载 + 重试机制 Step 7: think "设计解决方案" → 方案:并行下载 + 指数退避重试 + 每文件超时15秒 Step 8: remember "批量文件导入优化模式" → 固化通用模式 ✅ 根因找到: S3连接超时 + 串行下载累积 ✅ 置信度: 0.93 ✅ 解决方案: 并行下载 + 智能重试 ``` #### 示例3:从错误中学习 ```bash /runtime.learn "我分析为什么刚才的代码修改引入了这个bug" ``` AI执行: ``` Step 1: git diff → 查看修改内容 Step 2: read test → 理解测试用例 Step 3: think → 分析逻辑错误 Step 4: reflect → 识别认知偏差(过早下结论) Step 5: remember → 固化防御机制 成果:更新心智模型,避免重复相同错误 ``` --- ### 命令定义 **语法**: ```bash /runtime.learn "[问题或学习目标]" 可选参数: --max-steps=10 # 最大探索步数 --min-confidence=0.9 # 目标置信度 --focus=[module] # 聚焦特定模块 --strategy=[depth|breadth] # 探索策略 ``` **完整定义**: `.ai-runtime/commands/runtime.learn.md` (843行详细文档) --- ## 与 /runtime.explore 的区别 | 维度 | `/runtime.explore` | `/runtime.learn` | 区别 | |------|-------------------|-----------------|------| | **输入** | 无(扫描整个代码库) | 具体问题/知识领域 | learn有明确目标 | | **范围** | 宏观(系统级) | 微观到宏观(问题导向) | learn聚焦 | | **深度** | 浅到中等(建立地图) | 深到很深(理解根因) | learn深入 | | **输出** | 知识图谱 + 探索报告 | 学习报告 + 新知识 | 成果不同 | | **后续** | 通常接 /runtime.learn | 通常接 /runtime.plan | 工作流 | **典型流程**: ``` 新代码库: → /runtime.explore (建立整体认知) → /runtime.learn (深入理解特定模块) → /runtime.plan (规划新功能) ``` --- ## 与 /runtime.plan 的区别 | 维度 | `/runtime.learn` | `/runtime.plan` | 为什么分开? | |------|----------------|----------------|------------| | **目标** | 理解问题 | 规划解决方案 | 认知阶段不同 | | **输入** | 问题 | 需求 | 前提条件不同 | | **核心** | 知识缺口识别 | 功能拆解与依赖分析 | 方法论不同 | | **输出** | 学习报告 + 新知识 | 任务树 + 执行计划 | 产物不同 | | **工作流** | learn → plan | plan → iterate | 分工明确 | --- ## 工具与脚本 ### 辅助脚本 **定义文件**: `.ai-runtime/commands/runtime.learn.md` **学习日志**: `cognition/logs/learn-*.json` **知识索引**: `memory/long-term/knowledge-graph.md` --- ## 宪法遵循 **遵循原则**: - ✓ 1.1 认知主体性: 我们是具有学习能力的智能体 - ✓ 1.2 类脑思维: 模式识别 + 联想 + 预测性处理 - ✓ 1.3 谦逊与不确定: 明确标注置信度,持续提问 - ✓ 1.4 记忆层次: 学习成果固化到长期记忆 - ✓ 2.1 代码即知识: 将代码结构转化为心智模型 - ✓ 4.1 从经验学习: 每个学习循环都更新模型 - ✓ 4.2 认知更新: 动态规划适应新知识 - ✓ 4.3 自我反思: 元认知评估学习效果 **宪法位置**: `.ai-runtime/constitution.md` --- **命令路径**: `.ai-runtime/commands/runtime.learn.md` **最后更新**: 2025-11-14 11:30:00 **版本**: 1.0.0 (纯自主学习模式)