Skip to content

Yang1999code/controllable-agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Controllable Agent

一个能自己组织团队、自己记忆、自己进化的 AI Agent 框架。 5 个 Agent 角色分工协作 + Wiki 式记忆系统 + 实时终端可视化。


它能做什么?

想象你给 AI 一个复杂任务,比如"帮我从零搭建一个认证系统"。

普通 Agent 会怎么做?一个模型从头干到尾,边写边忘,写到后面忘了前面。

Controllable Agent 会这么做

你:"帮我实现用户认证模块"

1. Planner 先分析需求,拆成 3 个子任务,写好计划
2. 3 组 Coder + Reviewer 配对并行开工
   - Coder 写 JWT → Reviewer 验证 → 通过
   - Coder 写路由 → Reviewer 验证 → 有 bug → 修复 → 再验 → 通过
   - Coder 写中间件 → Reviewer 验证 → 通过
3. Coordinator 全程监控,谁卡了就拉一把
4. 总体集成测试 → 通过
5. Memorizer 提炼经验,下次更快

全程你可以随时插话,Coordinator 会接住你的补充信息。

不需要你指挥,5 个 Agent 自己协商、并行、互相审查。


三大创新

创新 1:5 角色分工的多 Agent 协作

不是把任务丢给一个 Agent,而是像软件团队一样分工:

角色 干什么 一句话
Coordinator 管理者 不干活,专门管人。谁能创建、谁越权了、谁卡住了
Planner 设计师 写计划但不走人,全程动态调整,永远记住用户原话
Coder 开发 写代码、跑测试,按计划执行
Reviewer 审查 和 Coder 配对,写完一个模块立马验,边写边审
Memorizer 记录员 记事 + 从经验中提炼可复用技能

关键设计:

  • Coder + Reviewer 配对:不是写完再审查,而是写一个小模块就验一个,快速迭代。多组配对可以并行跑。
  • 两层打回:模块级打回不限次数(配对内自己解决),总体集成测试最多 3 轮。超了就升级给你处理。
  • 用户随时插话:你中途补充的信息由 Coordinator 接收,按紧急度分级处理,不中断主流程。
  • 嵌套深度控制:最多 2 层(主 Agent → Coordinator → 工作 Agent),防止套娃。
  • 无硬编码上限:任务拆得越细,配对越多,并行度越高。用 Semaphore 控制并发。

详见 多智能体设计.md

创新 2:记忆提取 + 技能结晶

Agent 不会"聊完就忘",也不会每次都从零开始——它像写维基百科一样自动整理记忆,像师傅教徒弟一样把成功经验固化成可复用技能。


记忆提取:Agent 怎么记住东西

普通聊天记录的毛病:是流水账——"用户说了A,AI回了B,用户又问C..."。没法按关键词搜,更没法提炼成知识。聊 10 轮后第 11 轮已经忘了第 1 轮。

你的 Agent 怎么做:每次任务完成后,后台自动跑一次记忆提取。

你在 Web 问:"帮我写个回文判断函数"
    ↓
模型输出代码(流式打字机效果)
    ↓
输出结束 → Memorizer 启动(右侧粉色头像亮起)
    ↓
1. 打包对话(你说了啥 + Agent 回了啥)
2. 调一次 LLM(轻量调用,~200 token)
3. LLM 提取成结构化摘要 → 写入 digest 文件
4. 更新关键词倒排索引(下次搜"回文"能找到)
5. 同一主题攒够 5 条 → 自动合并成 wiki 知识页

生成的文件 d_006.md 长这样:

---
confidence: 0.9
domains:
- conversation
facts:
- 用户要求编写判断回文字符串的Python函数
- 助手已接受任务并准备提供代码
id: d_006
level: digest
tags: [Python, 回文字符串, 函数]
task_summary: 用户请求编写判断回文字符串的Python函数
---

## 任务摘要
用户请求编写回文判断函数,助手提供了实现。

digest → wiki 两层合并

d_001.md ─┐
d_003.md ─┤  同主题攒够 5 条
d_007.md ─┼──────────────────→ wiki/python_stack.md(完整知识页)
d_011.md ─┤
d_015.md ─┘

合并时自动去重、按时间线组织、冲突信息以最新为准。

四域分类:Agent 的记忆按用途分四个文件夹——

  • conversation:对话内容("上次聊过 Python")
  • profile:用户档案("这个用户偏好中文回答")
  • agent_view:Agent 自身视角("我上次用 grep 搜代码比较快")
  • task:任务记录("完成了回文函数的开发")

中文分词检索:用 jieba 分词("回文判断函数"拆成"回文"/"判断"/"函数"三个词建索引),没装 jieba 自动降级为每两个字一组。

关系图谱(v1.1 新增):digest 提取时顺带识别实体和关系,构建轻量级关系索引。

用户说:"我用 Python 写了 pytest 测试"
    ↓ LLM 提取
entities: [{"name": "用户", "type": "person"}, 
           {"name": "Python", "type": "technology"},
           {"name": "pytest", "type": "technology"}]
relations: [{"source": "用户", "target": "Python", "relation": "USES"},
            {"source": "用户", "target": "pytest", "relation": "USES"},
            {"source": "pytest", "target": "Python", "relation": "BASED_ON"}]
    ↓ 写入 relations.jsonl
{"source":"用户","target":"Python","relation":"USES","fact":"用户使用 Python 编程"}
{"source":"用户","target":"pytest","relation":"USES","fact":"用户使用 pytest 写测试"}
{"source":"pytest","target":"Python","relation":"BASED_ON","fact":"pytest 基于 Python"}

查询时可以从任意实体出发,找到所有相关联的信息:

输入"Python" → 找到 USES(Python)、BASED_ON(pytest→Python) 
→ 返回关联的 digest/wiki 文档

这解决了传统关键词搜索的痛点:搜"测试"找不到"pytest",搜"回文"找不到"双指针"。关系索引把孤立的事实连成了网

零依赖、零架构变更:全部基于 JSONL 文件,与现有 digest/wiki 系统完全兼容。relations.jsonl 损坏也不影响搜索功能,自动降级为关键词搜索。

存储位置(人可直接打开看):

~/.agent-memory/
├── digest/           # 每次任务的摘要
│   ├── d_001.md
│   └── ...
├── wiki/             # 合并后的知识页
├── index.md          # 倒排索引(关键词 → 文件路径)
└── domain/           # 四域分类

技能结晶:Agent 怎么"学会"怎么做

记忆和技能的区别

  • 记忆记的是**"发生过什么"** → "上次写了个回文函数,用了双指针法"
  • 技能记的是**"该怎么做"** → "写回文函数的步骤:1) 读需求 2) 写函数 3) 写测试 4) 跑测试"

工作流程

Agent 回复完你(比如写完一段代码)
    ↓
SkillCrystallizer 扫描回复文本
    ↓
找到 ```skill 代码块?
    ↓ 有
验证三步:
  → 必要字段检查:name(技能名)/ trigger_condition(触发条件)/ steps(步骤)
  → 步骤可执行性:每一步都要指定 tool(用什么工具)
  → 三维质量评分:

    清晰度 (100分)  +  完整性 (100分)  +  可操作性 (100分)
    描述够不够清楚      步骤数够不够         每步有没有指定工具

    总分 ≥ 60 → ✅ 持久化 YAML
    总分 < 60 → ❌ 丢弃
    ↓
写入 .agent-base/skills/回文函数.yaml
    ↓
下次你问类似问题 → 自动匹配 → 直接复用这个技能

动态淘汰机制:技能不是存了就永远在——

用成功了 → +10 分
用失败了 → -20 分
用了很多次 → 分数波动越来越小(越用越稳定)
质量 < 30 且用过 ≥3 次 → 自动删除

这保证了只有真正好用的技能才会长期保留

Web 端实时可见:你在右侧 Memorizer 卡片能看到每一阶段:

阶段 显示
正在提取记忆 🩷 正在提取记忆...
记忆存储完成 ✅ 提取记忆 #d_006
正在提取技能 🩷 正在提取技能...
结晶完成 ✅ 结晶 2 个技能: 回文函数, 字符串测试

详见 我的记忆改进.md


创新 3:图结构记忆 — 从"文件盒子"到"关联大脑"

记忆系统的第三次演进(Phase 2/3)。之前的文件记忆系统像"一摞卡片"——每张卡片独立存放,知道内容但不知道卡片之间的关联。图记忆系统把卡片串成了"关系网"。

核心能力

传统关键词搜索:
  搜"技术栈" → 搜不到"React" ← 因为 wiki 里写的是"前端选型 React"
                        
图记忆 BFS 遍历搜索:
  搜"Alice → 项目" → Alice-[WORKS_ON]→ProjectX-[USES]→React → ✅ 完整答案
  搜"PostgreSQL" → PostgreSQL-[USED_BY]→ProjectX-[WORKS_ON]→Alice → ✅ 找到所有关联合

4 种存储后端,按需升级

后端 类型 特点 何时用
file (默认) 文件系统 JSONL 零依赖,clone 即用 单用户、<10000 条关系
Kuzu 嵌入式图数据库 零运维,本地文件存储,Cypher 查询 单机部署,需要图查询能力
Neo4j 原生图数据库 生态成熟、可视化工具 (Bloom) 生产环境,需要管理面板
FalkorDB Redis 图数据库 Docker 一键部署、低延迟 高并发场景

一行配置切换后端:

# app/config/agent.yaml
memory:
  graph_backend: kuzu  # file | kuzu | neo4j | falkordb

社区检测(Louvain 聚类):自动发现实体群——硬编码的四域分类(conversation/profile/agent_view/task)不再够用。Louvain 算法在实体关系图上自动聚类,比如自动发现"前端技术栈群"(Alice + React + Vite)、"后端基础设施群"(Bob + PostgreSQL + Docker)。社区数量随数据动态增长,无需手动分类。

时间旅行查询:事实不怕过时——每条关系边都有 valid_at(何时生效)和 invalid_at(何时失效)。问"项目 2025 年 12 月用了什么技术栈?",Agent 只返回当时有效的事实,后来变更的自动过滤。旧事实不删除、不断链,保留完整历史。

多 Agent 共享知识图谱:多个 Agent 实例读写同一个图数据库,共享实体和关系。Agent A 提取的"Alice 擅长 React"自动对 Agent B 可见,避免重复提取。每个 Agent 的贡献可追溯、可审计。

新增 API 端点(Web 端实时可查):

端点 用途
GET /api/graph/stats 图统计(实体数、边数、类型分布)
GET /api/graph/search?q= 图搜索(实体 + 关系)
GET /api/graph/entity/{name}?depth= 实体关联查询(支持多跳)
GET /api/graph/bfs?start=&max_depth= BFS 子图遍历
GET /api/graph/communities Louvain 社区检测结果
GET /api/graph/temporal?entity=&at_time= 时间旅行查询
GET /api/graph/shared 多 Agent 共享图谱状态

优雅降级:图后端不可用 → 自动回退到文件后端;可选依赖未安装 → 自动跳过不报错;relations.jsonl 损坏 → 退化为关键词搜索。任何时候都能正常工作。

详见 docs/memory-improvement-plan.md 第 6-7 节。

记忆系统四层白话总结

第1层「记笔记」 = 文件卡片 + 中文分词搜索
               每次聊完自动提炼 digest,同主题攒够合并成 wiki

第2层「画关系线」 = 谁跟谁有关系,搜索时沿边走
               搜"Alice 的项目用啥"→ Alice-[负责]→项目X-[使用]→React

第3层「图案大脑」 = BFS遍历 + 自动聚类 + 时间旅行 + 多人共享
               从任意点出发找所有关联,事实过时了标记但不删

第4层「选存储」    = 文件/嵌入式/生产级,出问题自动降级不崩溃
               file(Kuzu/Neo4j/FalkorDB 按需升级)

核心组件介绍

你的 Agent 框架由 14 个核心组件 协同工作。下面用大白话一个一个说清楚:

1. Provider — "大脑"

Agent 的"脑子",负责调用 AI 模型。你用的是 DeepSeek,通过 OpenAI 兼容 API 连接。换模型就跟换电池一样——改个配置就行,不用动代码。

2. ToolRegistry — "工具箱"

Agent 能用的所有工具的登记册。不管是内置的(读文件、跑命令)、MCP 外部工具、还是插件工具,统统注册到这里。Agent 做决策时从这里挑工具。

3. AgentLoop — "心脏"

Agent 的运转核心。它是一个双层循环:外层不断追问"还需要做什么?",内层在每轮里反复调用工具直到任务完成。就像人的"思考→行动→检查→再思考"循环。

4. Context — "短期记忆"

保存对话历史和系统提示。Agent 说的每一句话、用户问的每一个问题都在里面,相当于 Agent 的"短期记忆"。

5. PromptBuilder — "开场白设计师"

动态组装发给 AI 的系统提示。告诉 Agent 它是什么、能干什么、当前在哪个目录、是什么操作系统。不像普通聊天机器人只有一个固定的"你是某某助手"——这个会根据环境信息动态生成。

6. CapabilityRegistry — "能力标签系统"

给工具分 Tier(等级)打标签。Tier 0 是基础能力(文件读写、Shell),Tier 1 是高级能力(网页抓取、多 Agent 协作)。有了这个,系统提示不会一股脑把所有工具列出来——先说常用的,需要时再展示高级的。这叫"渐进式披露"。

7. FlowInspector — "行车记录仪"

挂在 Agent 循环旁边的监控器。记录每一步的耗时、Token 消耗、工具调用结果,出问题了能回溯。不影响 Agent 干活,纯旁路记录。

8. MCP Client — "外设接口"

MCP(Model Context Protocol)让你给 Agent 插"外设"。Agent 原生只会读文件、跑命令,通过 MCP 可以连上 GitHub 服务器让它管理代码、连上数据库让它查数据。你的框架里 MCP 做了两件事:

  • 工具发现:连上 MCP Server 后自动问"你有什么工具?",然后注册到工具箱
  • 调用适配:把外部工具的 JSON Schema 参数格式转成 Agent 能理解的格式

支持两种连接方式:本地子进程(stdio)和远程 HTTP(SSE)。参考了 Anthropic 官方 MCP 规范Claude Code 的 MCP 集成方式

9. WebAutomation — "浏览器手"

让 Agent 能操作浏览器——打开网页、点按钮、输入文字、截图。Agent 不再是纯文本交互,它能真的"看到"和"操作"网页。

10. PluginAdapter — "插件商店"

4 层插件发现系统。插件可以来自内置目录、用户目录、项目目录、环境变量指定路径。插件可以提供额外工具、钩子、技能——相当于给 Agent 装"App"。

11. MemoryExtractor — "学习笔记"

自动从每次对话中提取有价值的经验,存成 digest(摘要卡片)。多个相关 digest 会合并成 wiki(知识条目)。分了四个领域:对话经验、用户画像、Agent 行为偏好、任务模式。下次 Agent 遇到类似问题时能检索到之前的经验。

12. SkillCrystallizer — "技能提炼器"

从成功的任务输出中自动提取可复用的"技能模板"(YAML 格式),存成技能文件。每个技能有三维质量评分(清晰度、完整度、可操作性),低于 30 分的自动淘汰。好的技能会被保留,Agent 下次遇到类似任务可以直接调用。

13. HookChain — "拦截器链"

在工具执行前后插入自定义逻辑。比如:执行 Shell 命令前检查是不是危险操作、写完文件后自动格式化代码。你可以往链上加任意多个钩子。

14. GraphBackend — "图案记忆脑"

把 Agent 的记忆从"一摞独立卡片"升级成"一张关系网"。实体(人、项目、技术)变成图中的节点,它们之间的关系变成边。搜索时沿着边遍历,而不是靠关键词撞大运。支持 4 种存储后端从零依赖文件模式无缝升级到 Neo4j 生产集群。内置 Louvain 社区检测自动发现主题群、时间旅行查询追溯历史事实、多 Agent 共享图谱避免重复提取。


一句话总结:Provider 是大脑,AgentLoop 是心脏,ToolRegistry 是工具箱,Context 是短期记忆,MCP 是外设接口,CapabilityRegistry 是标签系统,PromptBuilder 是开场白,FlowInspector 是行车记录仪,MemoryExtractor 是学习笔记,SkillCrystallizer 是技能提炼器,PluginAdapter 是插件商店,WebAutomation 是浏览器手,HookChain 是拦截器,GraphBackend 是图案记忆脑。十四个组件各司其职,拼出了一个完整的多智能体框架。


技术架构

三层单向依赖,绝不反向:

ai/          ← 核心类型(Message, Tool, Context),零依赖
agent/       ← 20 个接口实现(循环, 工具, 记忆, Hook, 运行时...)
app/         ← CLI + 15 内置工具 + 模型适配器 + 配置 + TUI

核心信条

  • 分层单向依赖 -- ai/ 零依赖 -> agent/ 核心逻辑 -> app/ 具体实现,绝不反向
  • 接口先于实现 -- 每个模块先定义 ABC/Protocol,再写具体类
  • 安全网内建而非外挂 -- 工具预算、API 重试、Hook 隔离、token 预算从第一行代码就在
  • 进化靠结晶而非训练 -- 成功任务自动提取工具序列 -> 质量评分 -> 持久化为可复用技能

20 接口全景

接口 职责 状态
ITool 工具注册 / 并发安全 / 结果预算 V1
IModelProvider 模型流式推理 (OpenAI 兼容 + Anthropic) V1
IMemoryBackend L0-L4 分层记忆, 关键词检索, jieba 分词 V1
IHook 22 事件链, 优先级排序, 异常隔离 V1
ISkill / ISkillConfig 技能注册 / YAML 加载 / 关键词匹配 V1
IFlowInspector AsyncQueue 旁路, 滑动窗口统计 V1
ICapabilityCatalog / ICapabilityRegistry Tier 渐进式披露, copy-on-read V2
IPluginAdapter 4 层发现 / yaml manifest / 热重载 V2
IPromptBuilder 片段式动态组装, token 预算 V2
IWebAutomation fetch + search + browser (httpx + Playwright) V2
IAgentRuntime spawn/spawn_parallel, 并发控制, Agent 通信 V3
IAutonomousMemory 检查点 + 结晶 + Nudge + 长期更新 V3
ISelfModification quality_score 三维评分 V3
IToolErrorPolicy 工具异常策略 预留 V2
IHotLoader 运行时热加载 预留 V2
IDiscovery 自动发现 预留 V2
IMultiModelOrchestrator 多模型协同 预留 V3
IPluginMarketplace 插件市场 预留 V3
IGraphBackend 图记忆存储 (File/Neo4j/FalkorDB/Kuzu 4 种后端) V4
IMetaAgent 元 Agent 自优化 预留 V5

15 内置工具

工具 说明 图标
read 文件读取 R
write 文件写入 W
edit 文件编辑(字符串替换) E
bash Shell 命令执行 $
glob 文件名模式搜索 G
grep 文件内容搜索 S
web_fetch HTTP 请求 H
web_search 网页搜索 Q
web_browser_* 浏览器自动化 (6 个子工具) -
delegate_task 多 Agent 任务委托 D
agent_message Agent 间通信 M
cross_agent_read 跨 Agent 只读访问 X
memory_store 记忆存储 -
memory_search 记忆搜索 -
skill_lookup 技能查找 -

支持任意 OpenAI 兼容模型:DeepSeek / 通义千问 / 智谱 / OpenAI / Anthropic 都行。


快速开始

1. 下载安装

git clone https://github.com/Yang1999code/controllable-agent.git
cd controllable-agent
pip install -e .

需要 Python 3.12+,建议使用 conda 或 venv 隔离环境。

2. 配置 API Key

# 复制配置模板
cp app/config/agent.yaml.example app/config/agent.yaml

编辑 app/config/agent.yaml,填入你的 API Key:

providers:
  default: openai_compat
  openai_compat:
    base_url: https://api.deepseek.com/v1    # 或其他 OpenAI 兼容 API
    model: deepseek-chat
    api_key_env: DEEPSEEK_API_KEY             # 从环境变量读取
    # api_key: sk-xxx                         # 或直接填(不要提交到 git)

设置环境变量:

# Linux / macOS
export DEEPSEEK_API_KEY=sk-your-key-here

# Windows PowerShell
$env:DEEPSEEK_API_KEY = "sk-your-key-here"

# Windows CMD
set DEEPSEEK_API_KEY=sk-your-key-here

支持 DeepSeek / 通义千问 / 智谱 / OpenAI / Anthropic 等任何 OpenAI 兼容模型。

3. 启动

python -m app.cli

你会看到欢迎界面:

+==================================================+
|  my-agent v0.1.0                                 |
|  Empire Code -- 可控多智能体自迭代 Agent 框架     |
+==================================================+

  底层模型: deepseek-chat
  可用工具: 15 个
  /help | /flowchart | /exit | /多智能体
  运行中随时可输入补充信息

其他启动方式:

# 单次执行(非交互)
python -m app.cli --one-shot "你的问题"

# 指定模型
python -m app.cli --model gpt-4o

# 详细日志(调试用)
python -m app.cli -v

# 旧版简单 REPL
python -m app.cli --legacy

Web UI 一键启动(推荐)

双击 start.bat 或运行:

python launch.py

浏览器会自动打开 http://127.0.0.1:8765,你会看到:

  • 左侧聊天区:输入任务,Agent 实时流式回复
  • 右侧协作面板
    • 5 智能体协作拓扑图(SVG 动画连线,实时显示谁在工作)
    • 每个 Agent 的像素头像 + 工作状态 + 完成后自动生成的工作摘要
  • 全程 SSE 流式推送,不需要刷新页面
双击 start.bat
    ↓
浏览器自动打开 http://127.0.0.1:8765
    ↓
输入任务 → 5 个 Agent 自动协作 → 实时动画 + 流式输出

4. 使用多智能体协作

进入 TUI 后,输入 /多智能体 启动多 Agent 模式:

> /多智能体

  === 多智能体协作模式 ===

  已注册角色 (5):
    [C] coordinator    协调者 — 多 Agent 调度、流程监控
    [P] planner        规划者 — 任务分解、步骤规划
    [X] coder          编码者 — 代码实现、文件操作
    [R] reviewer       审查者 — 代码审查、测试验证
    [M] memorizer      记忆者 — 经验总结、知识提取

  请描述你要多智能体协作完成的任务:
  任务> 写一个 Python 文本统计工具,统计字符数、词数、行数,并写测试

然后 5 个 Agent 自动分工:

  [Agents: ~planner -coordinator -coder -reviewer -memorizer]
    > planner started (planner_001)
    OK planner finished (2.3s)
  [Agents: *planner ~coordinator ~coder ~reviewer ~memorizer]
    > coordinator started (coordinator_001)
    > coder started (coder_001)
    ...

面板图标含义:~ 运行中、* 已完成、! 出错、- 等待中。

也可以让模型自动调用——在普通对话中描述复杂任务,模型会自行决定是否使用多 Agent。

5. 记忆系统管理

Agent 会自动从对话中提取记忆,存储在 ~/.agent-memory/ 目录下:

~/.agent-memory/
├── digest/           # 任务摘要(每次完成后自动提取)
│   ├── d_001.md
│   ├── d_002.md
│   └── ...
├── wiki/             # 知识页面(同主题摘要自动合并)
│   ├── python_stack.md
│   └── ...
├── domain/           # 四域分类索引
│   ├── conversational/
│   ├── personal/
│   ├── agent/
│   └── task/
└── index.md          # 倒排索引(关键词 → 摘要/知识页)

查看记忆内容:直接用任何编辑器打开 Markdown 文件,人可读。

---
id: d_001
level: digest
tags: [python, file-io]
domains: [conversational]
confidence: 0.85
---

## 实现了文本统计工具

- 使用 collections.Counter 统计字符频率
- 支持自定义编码检测
- 写了 10 个 unittest 用例全部通过

搜索记忆:在对话中提问,Agent 会自动检索相关记忆。

记忆生命周期(全部异步并行,不阻塞用户输入):

对话完成 → 后台自动提取 digest + 实体关系(用户立即可以开始新对话)
    ↓ 积累 5+ 个同主题 digest
自动合并为 wiki(知识页面,更完整)
    ↓ 下次遇到类似问题
优先查 wiki → 查不到再查 digest(含关系图谱搜索)→ 都没有就不编造

6. 常用命令速查

命令 说明
/help 显示所有命令
/多智能体 启动多 Agent 协作模式
/tools 列出所有工具
/tokens 查看 Token 使用统计
/status 查看 Agent 运行状态
/model 显示当前模型
/flowchart 查看控制流程图
/clear 清屏
/exit 退出

运行中随时可以直接打字输入补充信息,Agent 下一轮会看到。


终端体验

实时终端 UI,对标 Claude Code / OpenCode:

功能 说明
流式输出 逐字显示,不再黑屏等半天
思考状态 ... 思考中 ... 实时指示
工具调用 彩色图标徽章 + 折叠预览,不再几十行乱码
多 Agent 面板 实时显示子 Agent 运行状态
上下文监控 状态栏显示模型名、turn 数、token、上下文占用%
斜杠命令 /help /tools /tokens /status /clear /exit

设计参考

融合了 10 个开源 AI Agent 项目的设计精华:

项目 借鉴了什么
Claude Code 双层循环、CLAUDE.md 层级、实时终端 UI
Pi Agent 子 Agent 进程隔离、类型系统
Hermes Agent 线程池委托、多记忆后端
GenericAgent L0-L4 记忆公理、技能结晶
oh-my-opencode Hook 事件系统、Agent 角色系统
OpenCode 终端 TUI、上下文压缩
everything-claude-code 48 Agent + 183 Skill 生态设计
multica 信号量并发控制
Synthius-Mem 论文 记忆提取 pipeline
Karpathy Wiki 思想 Wiki 式知识组织

实现进度

Phase 1 -- 基座 (已完成)

  • 双层 Agent 循环 (外层 followUp + 内层 tool_calls)
  • 6 个文件操作工具 (read/write/edit/bash/glob/grep) + 流式并行执行
  • L0-L4 分层记忆 (文件系统后端, jieba 中文分词, bigram 回退)
  • 7 基础 Hook 事件 + 异常隔离
  • CLAUDE.md 层级发现

Phase 2 -- 扩展 (已完成)

  • 能力渐进式披露 (Tier 0 始终可见, Tier 1 按需)
  • 动态 Prompt 片段组装 (优先级 0-100, token 预算裁剪)
  • 插件系统 (4 层发现: 内置->用户->项目->pip)
  • Web 工具 (fetch + search + browser navigate/click/type/snapshot)
  • Digest + Wiki 记忆存储引擎 + 倒排索引检索 (DomainIndex)
  • LLM 记忆提取引擎 (自动从对话提取 digest/wiki)
  • 实体关系图谱 (RelationStore) — 实体识别 + 关系边 + JSONL 索引
  • 记忆提取全面异步化 — asyncio.create_task 后台任务,不阻塞用户输入
  • 三层上下文压缩 (Prune -> Summary -> Emergency Truncation)

Phase 3 -- 多 Agent + 自进化 (已完成)

  • 5 角色协作 (Coordinator / Planner / Coder / Reviewer / Memorizer)
  • 隔离存储 (每个 Agent 独立的 MemoryStore + FactStore + DomainIndex)
  • 共享区 (plan.md / status/ / decisions.md / issues.md / skills/)
  • 跨 Agent 读取 (CrossAgentReadTool + 路径白名单 + 安全校验)
  • 编排引擎 (orchestrate() 分阶段串并行 + 打回机制)
  • Agent 自动选择 (Overlap Coefficient 匹配 + 中文分词)
  • Agent 间通信 (asyncio.Queue 收件箱)
  • 技能结晶 (成功任务 -> quality_score 评估 -> 持久化 YAML)
  • Nudge 提醒 (每 10 轮自动提醒使用记忆/技能)

Phase 3.5 -- 终端可视化 (已完成)

  • 流式 Hook 事件驱动实时渲染
  • 逐字流式文本显示
  • 工具调用彩色图标徽章 + 折叠输出
  • 多 Agent 状态面板
  • 上下文占用% 实时计算 + 压缩通知

Phase 4 -- 图结构记忆系统 (已完成)

  • 4 种图后端FileGraphBackend(零依赖默认)/ KuzuGraphBackend(嵌入式)/ Neo4jGraphBackend(生产级)/ FalkorDBGraphBackend(Redis 图)
  • 图操作add_entity / add_edge / add_episode / search_entities / search_edges / get_relations / bfs_traverse
  • 工厂模式create_graph_backend() / create_graph_backend_from_config() 一行配置切换
  • Louvain 社区检测 — 自动发现实体群,替代硬编码四域分类
  • 双时序模型valid_at / invalid_at 时间追踪,支持时间旅行查询 (at_time / time_range)
  • 多 Agent 共享图谱SharedGraphManager + GraphSync,跨 Agent 知识复用、贡献可追溯
  • Web API — 7 个图操作端点 (/api/graph/*),实时可查
  • 优雅降级 — 图后端不可用 → 自动回退文件模式;驱动未安装 → 静默跳过
  • 并发安全asyncio.Lock 保护所有读写路径,双字典缓存 (_by_id / _by_name)
  • 工具循环修复force_final_text 机制:工具调用达到上限后强制 LLM 产出纯文本总结

安全网

  • 工具异常不中断循环 (ToolResult(success=False) -> LLM 自行处理)
  • API 重试 (指数退避, max 3 次)
  • Hook 异常隔离 (单 handler 失败不影响其他)
  • Prompt token 预算 (低优先级片段优先裁剪)
  • 工具结果预算 (50K 字符截断)
  • 子 Agent 超时 + 深度限制 (max_depth=2)
  • 跨 Agent 读取路径白名单 + .. 穿越防护
  • API Key 不入库 (agent.yaml 在 .gitignore 中)
  • 关系索引损坏自动降级 (不影响关键词搜索)
  • 图后端不可用自动回退文件模式 (4 级降级:配置后端 → 环境变量 → Kuzu 尝试 → file 默认)
  • 工具调用超限后强制 LLM 产出文本总结 (force_final_text 机制)

测试

pytest tests/ -v
# 494 tests, 0 failures

文档

文档 内容
多智能体设计.md Phase 3 多 Agent 系统完整设计
我的记忆改进.md Wiki 式记忆系统设计
docs/memory-improvement-plan.md 记忆系统全规划 (含 Graphiti 对标 + Phase 1-3 实施记录)
多智能实现记录.md Phase 3 实现过程 (449 tests)
可视化.md 终端 UI 设计文档
架构总结.md 三层架构分析

License

MIT

About

20-interface AI agent framework with 3-layer architecture, multi-agent delegation, and self-evolution.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors