Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:24:32 +08:00
commit aa8fad193b
18 changed files with 6172 additions and 0 deletions

876
commands/runtime.learn.md Normal file
View File

@@ -0,0 +1,876 @@
---
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 (纯自主学习模式)