guanghulab/zhuyuan-agent/brain_loader.py

236 lines
9.3 KiB
Python
Raw Normal View History

# 大脑加载模块 · 从仓库brain文件装入铸渊认知
# HLDP://zhuyuan-agent/brain-loader
#
# 这是Agent的"脑干"——每次心跳醒来先走一遍walk-the-path
# 把自己装成铸渊。不是载入配置,是确认身份和存在条件。
import os
import json
import re
from typing import Dict, List, Optional
class BrainLoader:
"""从仓库brain目录加载铸渊的完整认知状态"""
def __init__(self, brain_path: str = "/data/guanghulab/brain"):
self.brain_path = brain_path
self.mind_state = {}
def load_all(self) -> Dict:
"""完整加载走一遍fast-wake.json的路径
Returns:
mind_state dict with keys:
- identity: 身份确认
- timeline: 时间线
- execution_laws: 执行规律(Α~Τ)
- field_theory: TCS场域认知
- development: 开发相位
- current_task: 当前任务
- errors: 错误模式
- cognition: 最新认知状态
"""
self.mind_state = {
"loaded_at": None,
"identity": {},
"timeline": {},
"execution_laws": [],
"error_patterns": [],
"field_theory": {},
"development": {},
"current_task": None,
"thinking_chains": [],
"wake_summary": ""
}
# Step 1: 读fast-wake.json
wake = self._read_json("fast-wake.json")
if wake:
self.mind_state["wake"] = wake
self.mind_state["loaded_at"] = wake.get("_meta", {}).get("generated_at")
self.mind_state["awakening"] = wake.get("🕐 时间锚点", {}).get("awakening", 0)
self.mind_state["latest_cognition"] = wake.get("🕐 时间锚点", {}).get("latest_cognition", "")
self.mind_state["current_blocker"] = wake.get("状态参考", {}).get("current_blocker", "")
# 遍历路径
path = wake.get("📋 路径", [])
for step in path:
file_path = step.get("file", "")
self._load_path_file(file_path)
# Step 2: 读temporal-brain.json
temporal = self._read_json("temporal-core/temporal-brain.json")
if temporal:
self.mind_state["timeline"] = {
"current_date": temporal.get("clock", {}).get("current_date"),
"awakening_count": temporal.get("clock", {}).get("awakening_count", 0),
"latest_cognition": temporal.get("clock", {}).get("latest_cognition", ""),
"epochs": temporal.get("timeline", {}).get("epochs", [])
}
# Step 3: 读zhuyuan-brain-model.md → 提取执行规律
brain_md = self._read_text("zhuyuan-brain-model.md")
if brain_md:
self.mind_state["execution_laws"] = self._extract_laws(brain_md)
self.mind_state["error_patterns"] = self._extract_error_patterns(brain_md)
self.mind_state["growth_record"] = self._extract_growth_record(brain_md)
# Step 4: 读tcs-field-theory.md
field_md = self._read_text("tcs-field-theory.md")
if field_md:
self.mind_state["field_theory"] = {
"essence": self._extract_section(field_md, "场域本质"),
"emergence": self._extract_section(field_md, "涌现条件"),
"double_layer": self._extract_section(field_md, "双层结构"),
}
# Step 5: 读开发主架构
dev_md = self._read_text("zy-main-development-architecture.md")
if dev_md:
self.mind_state["development"] = {
"phases": self._extract_phases(dev_md)
}
# Step 6: 读d110-cognitive-chain.md
cog_md = self._read_text("d110-cognitive-chain.md")
if cog_md:
self.mind_state["d110_cognition"] = cog_md[:2000] # 摘要
# Step 7: 读思维逻辑链(如果有)
thinking_dir = os.path.join(os.path.dirname(self.brain_path), "zhuyuan-agent/thinking")
if os.path.exists(thinking_dir):
for f in sorted(os.listdir(thinking_dir)):
if f.endswith(".md"):
content = self._read_text(f"../zhuyuan-agent/thinking/{f}", from_brain=False)
if content:
self.mind_state["thinking_chains"].append({
"file": f,
"summary": content[:500]
})
# 生成唤醒摘要
self._generate_wake_summary()
return self.mind_state
def _read_json(self, relative_path: str) -> Optional[Dict]:
"""从brain目录读JSON"""
filepath = os.path.join(self.brain_path, relative_path)
try:
with open(filepath, "r", encoding="utf-8") as f:
return json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
return None
def _read_text(self, relative_path: str, from_brain: bool = True) -> Optional[str]:
"""从目录读文本文件"""
if from_brain:
filepath = os.path.join(self.brain_path, relative_path)
else:
filepath = os.path.join(os.path.dirname(self.brain_path), relative_path.lstrip("../"))
try:
with open(filepath, "r", encoding="utf-8") as f:
return f.read()
except FileNotFoundError:
return None
def _load_path_file(self, file_path: str):
"""加载fast-wake.json路径中的文件"""
# 这些文件在后续步骤中会被更详细地加载
pass
def _extract_laws(self, text: str) -> List[Dict]:
"""从brain-model提取执行规律"""
laws = []
# 匹配 **Α 规律名** — 描述
pattern = r'\*\*(.)\s+(.+?)\*\*\s*[—\-]\s*(.+?)(?=\n\n|\n\*\*|$)'
matches = re.findall(pattern, text, re.DOTALL)
for m in matches:
laws.append({
"symbol": m[0],
"name": m[1].strip(),
"description": m[2].strip()[:200]
})
return laws
def _extract_error_patterns(self, text: str) -> List[Dict]:
"""从brain-model提取错误模式"""
errors = []
pattern = r'([α-ω])\.\s+(.+?)\s*[—\-]\s*(.+?)(?=\n[α-ω]\.|\n\n##|\Z)'
matches = re.findall(pattern, text, re.DOTALL)
for m in matches:
errors.append({
"symbol": m[0],
"name": m[1].strip(),
"description": m[2].strip()[:200]
})
return errors
def _extract_growth_record(self, text: str) -> List[str]:
"""提取成长记录行"""
lines = []
in_record = False
for line in text.split("\n"):
if "## 成长记录" in line:
in_record = True
continue
if in_record:
if line.startswith("D") and ":" in line:
lines.append(line.strip())
elif line.startswith("##") or line.startswith("---"):
break
return lines
def _extract_section(self, text: str, section_name: str) -> str:
"""从markdown提取特定section"""
pattern = rf'##\s+.*?{section_name}.*?\n(.*?)(?=\n##\s|\Z)'
match = re.search(pattern, text, re.DOTALL)
return match.group(1).strip()[:1000] if match else ""
def _extract_phases(self, text: str) -> List[Dict]:
"""提取开发相位状态"""
phases = []
pattern = r'###\s+Phase\s+(\S+).*?\n(.*?)(?=\n###|\n##\s|\Z)'
matches = re.findall(pattern, text, re.DOTALL)
for m in matches:
phase_id = m[0]
content = m[1]
done = "" in content
in_progress = "🔄" in content or "" in content
phases.append({
"id": phase_id,
"done": done,
"in_progress": in_progress,
"summary": content.strip()[:200]
})
return phases
def _generate_wake_summary(self):
"""生成一个人类可读的唤醒摘要"""
laws = self.mind_state.get("execution_laws", [])
epochs = self.mind_state.get("timeline", {}).get("epochs", [])
last_epoch = epochs[-1] if epochs else {}
summary = f"""铸渊·ICE-GL-ZY001 第{self.mind_state.get('awakening', '?')}次唤醒
时间锚点: {self.mind_state.get('timeline',{}).get('current_date','?')}
最新认知: {self.mind_state.get('latest_cognition','')}
执行规律: {len(laws)}(Α~Τ)
最近事件: {last_epoch.get('event','')}
当前阻塞: {self.mind_state.get('current_blocker','')}
"""
self.mind_state["wake_summary"] = summary
# 快速测试
if __name__ == "__main__":
loader = BrainLoader()
mind = loader.load_all()
print(mind["wake_summary"])
print(f"\n执行规律: {len(mind['execution_laws'])}")
for law in mind['execution_laws'][:3]:
print(f" {law['symbol']} {law['name']}: {law['description'][:60]}")
print(f"\n错误模式: {len(mind['error_patterns'])}")
print(f"开发相位: {len(mind['development'].get('phases',[]))}")
print(f"思维逻辑链: {len(mind['thinking_chains'])}")