guanghulab/zhuyuan-agent/brain_loader.py

236 lines
9.3 KiB
Python
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.

# 大脑加载模块 · 从仓库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'])}")