33 lines
8.3 KiB
Markdown
33 lines
8.3 KiB
Markdown
# HkYPwjIpBiQFeVknIqac7pk4n0e
|
||
|
||
Source: https://ocnmca6f1o0p.feishu.cn/wiki/HkYPwjIpBiQFeVknIqac7pk4n0e
|
||
|
||
|
||
## 工作内容概述
|
||
1、学习分析Claude Code、Hermes Agent、OpenClaw这个AI Agent机制实现的差异
|
||
## 一、上下文管理
|
||
- **会话内**:围绕当前任务串成一条主线,工具调用结果按时间顺序往里接;快把上下文窗口占满时,会自动压缩整理,并留下能看懂的检查点。遇到子任务会开并行时间线去跑,不让探索过程的细枝末节冲乱主线。权限判断这类旁路工作,会单独用一份裁剪过的对话片段来做,不和主上下文搅在一起。
|
||
- **会话外**:没有统一的记忆模块,长期需要记住的东西,就靠仓库里常规的 Markdown 和文档,由人或 Agent 自行维护。好处是灵活、和工程目录融为一体,缺点也很明显:膨胀了没人管,得靠 Git 评审这类手段来兜底。
|
||
- **会话内**:按聊天时间线自然推进,内置用量感知,一旦超过比例阈值就触发压缩。压缩时会刻意保留开头几条和末尾几条,中间部分做收束;很早之前的工具长输出,通常被替换成一句简短说明,腾出空间但不假装那部分内容还在。
|
||
- **会话外**:在固定位置维护两份 Markdown 笔记——一份记“事实记忆”,一份记“用户偏好”。条目之间用固定分隔符分段管理,像一张张小卡片,方便追加、替换或删除某一条,不用整篇重写。两份文件都有明确的字符上限,超了就直接拒绝写入,逼着模型先精简再存。写入前还会做安全扫描,防止注入或不可见字符混进去。每次会话开始时,会把这些磁盘内容读进来形成一个快照,同一会话中途新写入的记忆,不一定立刻反映到当前对话里,得新开一次会话才会稳定对齐。此外还配有 SQLite 加全文检索,专门用来搜历史会话,和那两份日记是两个独立层次。
|
||
- **会话内**:照常维护当前通道的对话时间线,同时在后台按分钟级周期做整理,把短期积攒的候选记忆排序、晋升或清扫掉,不让整理动作卡在用户每句话的响应上。像心跳检测、后台唤醒这类维护任务,会单独用一个独立会话身份去跑,完全不会搅乱主对话的上下文。
|
||
- **会话外**:把 MEMORY.md 当成工作区的核心记忆文件来对待,和插件状态联动管理;另外还会维护一份 USER.md 用户档案。需要更强记忆能力时,可以接入向量库,实现自动捕获和按需召回,精准补充到上下文里。还有一个记忆巩固系统,会周期性地把短期候选记忆整理成连贯的叙事,沉淀到 Markdown 长期层。
|
||
- **风险**:MEMORY.md 如果长期只追加不清理,会有膨胀隐患,需要自己制定归档和压缩策略。
|
||
## **二、技能与工具**
|
||
- **技能**:以技能包的形式存在,能感知文件变化,避免改完还用旧缓存。元数据里可以指定想用的模型,系统会自动对齐上下文窗口和压缩策略,不会出现“换了技能却配了短上下文模型”的情况。调用上,有专门入口,用到时拉进会话,不会一直占着上下文。
|
||
- **工具**:按文件、终端、检索、浏览器、MCP 桥接、子代理等领域拆分实现。权限是第一公民,每个调用都落到“允许/拒绝/询问”的框里;MCP 工具名有可预测的规则,方便批量设置策略。工具返回结果有体积限制,防止撑爆窗口。
|
||
- **优势**:安全逻辑一致,工具再多也容易说清边界;技能和模型深度绑定,适合按技能切换模型或成本策略;编码场景工具链完整,MCP 生态接入顺畅。
|
||
- **技能**:技能统一放在用户目录下的技能库里,首次安装可以把自带技能拷进去。格式上兼容社区规范,方便复用别人写好的技能包。加载方式是渐进披露:先只给模型一份很短的名录或摘要,必要时再展开某个技能的详细说明,再往下才按需加载子文档,这样避免了技能说明一口气填满上下文。元数据还支持条件激活,比如只在特定工具集可用时才让技能出现,减少无效干扰。
|
||
- **工具**:启动时会把所有工具模块扫描注册到一个中心表里,记录名字、参数、处理逻辑、可用性探测和结果最大长度。有些工具依赖本地环境(比如有没有容器、浏览器),会先探测再短暂缓存,决定这次要不要暴露给模型,避免列一堆用不了的工具。执行都在持久事件循环上异步跑,结果回填并限长。内置工具数量不少,需要留意工具定义占用的系统指令体积。
|
||
- **优势**:技能生态友好,目录固定、格式兼容、渐进加载,适合走技能市场路线;工具治理清晰,注册表统一管着定义、执行和上限;自托管和网关组合场景下,仍然有一套中心化的装配逻辑。
|
||
- **技能**:没有单独建一套类似 Hermes 的三级技能体系,更偏向让模型直接用“读文件”的能力,按名称去加载工作区里的技能文档(技能内容还是 Markdown,只是入口偏工具化)。插件带来的能力会作为插件工具合并进总工具列表,和核心工具一起做去重,避免同名重复注册。
|
||
- **工具**:工具集通过工厂模式组装,先形成核心集合,再按运行模式(比如是否嵌入式)裁掉不合适的,最后合并插件工具。提供显式的 allow/deny 列表,在工厂阶段就可以拒绝暴露某些工具,属于“默认面宽、部署时可收紧”的思路。统一调用前钩子可以挂审计、限流等横切逻辑。工具实际落地时绑定工作区沙箱和文件桥,防止网关工具越界。并行通过会话衍生或子代理类工具实现,与主会话的边界由产品设计约束。
|
||
- **优势**:部署时能很方便地控制最小工具面,运维友好;新能力常以扩展包加工具的形式分发,和网关定位契合;核心与插件职责分得清楚,主仓和扩展的边界明确。
|
||
## **三、多智能体协作**
|
||
通过子任务的方式把工作交给另一套Agent,创建时就带上权限参数,防止子任务拿到比父任务更宽的权限。可以是在进程内协作、终端独立面板、IDE 窗格等隔离载体,本质是找个干净环境跑子任务,不堆在同一条消息里。子任务有自己独立的上下文,和主任务对话列表分离,这样探索过程的细枝末节不会冲乱主线。跑完后结果压缩回填,父任务只看到提炼结论,这样就不被中间噪声污染。
|
||
模型通过委托工具发起子任务,系统会发出事件信号,方便 UI 或网关展示进度。子代理独立上下文,必要时配合代码执行等隔离环境。设计上明确限制子代理不碰父子共享的长期记忆文件,避免多个代理同时改同一本笔记产生冲突或泄露。子代理产出以普通工具结果的形式回填,父模型继续编排,整体仍走统一工具注册和消息时间线。
|
||
通过子代理工具或会话衍生工具在网关侧创建子会话,子会话在网关内运行,完成后结果回投主会话,用户在对应通道看到汇总。
|
||
## 四、开发语言
|
||
全栈 TypeScript,从 CLI、IDE 插件到底层协议都用同一门语言。复杂工具链里类型系统是实打实的好处。schema、权限枚举、消息结构这些在重构时不容易悄悄崩掉,前后端还能共用一套类型定义。打包成单入口 CLI、跟编辑器深度集成,也都是 TS、JS 生态里很成熟的路径。
|
||
核心用 Python 做 Agent 的逻辑编排,异步 IO、胶水脚本、对接各类 HTTP、IM、任务队列库都很顺手,迭代 prompt 或适配新工具时改起来快。前端和 UI 部分则用 TypeScript,各自发挥强项。代价是要同时维护两套技术栈,CI、依赖升级、类型共享都得双线作战,更适合愿意接受“前后端分离”的团队。
|
||
使用TypeScript语言开发,网关、插件、配置 UI 全放在一个仓库里。核心协议一改,所有依赖包立刻感知,不会出现接口变了但 UI 没跟上的尴尬。插件边界靠显式导出划定,工程化程度高,对多人协作和长期维护插件生态很友好。 |