Files
gh-dwsy-ai-runtime/commands/runtime.learn.md
2025-11-29 18:24:32 +08:00

877 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 (纯自主学习模式)