摘�
一个具备事务性æŒ�久化能力的自然è¯è¨€æ–‡æœ¬é©±åЍå�‹è‡ªåŠ¨åŒ–ç®¡é�“。它以ç£�盘文件作为共享黑æ�¿çš„载体,以外部 LLM 作为唯一的“读写æ�§åˆ¶å™¨â€�,将所有认知负担(记忆å�–èˆ�ã€�任务规划ã€�技能æ��炼ã€�自我认知)通过 Prompt å�¸è½½ç»™å¤–部 API,自身仅ä¿�ç•™å—ç¬¦ä¸²æ ‡è®°è§£æ��和进程级 I/O 调度功能。
一�是什么
Hermes Agent 是一组 Python 脚本,其功能是æ�§åˆ¶ LLM API 的调用æµ�程和数æ�®åœ¨æœ¬åœ°æ–‡ä»¶ç³»ç»Ÿä¸çš„读写。
1. 一个对�循�编�器
conversation_loop.
pyå®�ç�°äº†â€œæ�¥æ”¶è¾“入→æ�„建 Prompt→调用 LLM→解æ��输出→分å�‘工具调用→循ç�¯â€�çš„æ ‡å‡† ReAct 模å¼�。外部代ç �检测 LLM 输出ä¸çš„ç‰¹å®šæ ‡è®°ï¼ˆå¦‚ <TOOL_CALL>),æ�®æ¤è°ƒç”¨å¯¹åº”çš„ Python 函数。
2. 一个文本文件读写系统
记忆å˜å‚¨åœ¨ MEMORY.mdå’Œ USER.md,为纯文本文件。对è¯�å�†å�²å˜å‚¨åœ¨ SQLite æ•°æ�®åº“ä¸ï¼Œå�¯ç”¨ FTS5 关键è¯�检索。
技能å˜å‚¨åœ¨ SKILL.md,为自然è¯è¨€æ��è¿°çš„æ¥éª¤æ–‡æ¡£ã€‚系统在å�¯åŠ¨æ—¶è¯»å�–这些文件,将其内容拼æ�¥åˆ°ç³»ç»Ÿæ��示è¯�ä¸ã€‚
写入管ç�†ï¼šå½“记忆写入超é™�时,系统返å›�当å‰�æ�¡ç›®ï¼Œç”± LLM è‡ªè¡Œå†³ç–æ›¿æ�¢ã€�åˆ é™¤æˆ–å�ˆå¹¶ã€‚
3. 一个自动化文档生��水线
å¦ä¹ 循ç�¯ï¼ˆTracker → Evaluator → Reflector → Crystallizer → å˜å‚¨ï¼‰æ˜¯ä¸€ä¸ªç”± Python 脚本驱动的æµ�程:
Evaluator 为æ�¡ä»¶åˆ¤æ–(工具调用次数≥5 且任务æˆ�功)
Reflector 和 Crystallizer 调用 LLM 生�文本(��内容和技能文档)
输出结�为 SKILL.md文件
4. 一个工具注册���机制
工具定义采用 Schema–Registry–Handler 三层分离。�个工具文件调用 registry.
register()完�自注册,系统�动时通过 AST 扫�自动��包�注册调用的模�。
5. 一个 LLM 的上下文拼�器
系统在æ¯�次调用 LLM 之å‰�,将记忆文件ã€�技能文件ã€�对è¯�å�†å�²ã€�å·¥å…·å®šä¹‰ç‰æ–‡æœ¬å†…容拼æ�¥ä¸ºç³»ç»Ÿæ��示è¯�和用户消æ�¯ã€‚
6. ä¸€ä¸ªå…·æœ‰â€œä¼‘çœ -唤醒â€�机制的å��å�°è¿›ç¨‹
gateway/run.
py为长期è¿�è¡Œçš„è¿›ç¨‹ã€‚å½“æ— ä»»åŠ¡æ—¶ï¼Œç³»ç»Ÿå®šæœŸè°ƒç”¨ LLM(如æ¯� 30 秒)询问“是å�¦æœ‰ä»»ä½•需è¦�主动处ç�†çš„事情â€�ã€‚è¯¥æœºåˆ¶ä½¿å¾—ç³»ç»Ÿåœ¨æ— ç”¨æˆ·è¾“å…¥æ—¶ä»�会消费 Token 进行å��å�°çжæ€�å��æ€�。
7. ä¸€ä¸ªâ€œæ— å†…å˜è¿�行时â€�æ�¶æ�„
æ¯�次 LLM 调用完æˆ�å��,当å‰�的对è¯�å›�å�ˆã€�工具调用记录被立å�³åº�列化写入 SQLite å¹¶æ��交事务(commit()),éš�å��进程返å›�ç‰å¾…。系统在任何时刻被强制终æ¢éƒ½ä¸�会丢失已完æˆ�çš„æ¥éª¤ã€‚系统ä¸�维护è¿�è¡Œæ—¶çš„â€œçŸæœŸåЍæ€�å�˜é‡�â€�,所有跨æ¥éª¤çš„“上下文è¿�贯性â€�完全ä¾�赖下一次 Prompt æ�„建时ä»�ç£�盘é‡�新读å�–和拼æ�¥ã€‚
二��是什么
1. �是一个独立的��引�
系统本身ä¸�包å�«æ�¨ç�†æ¨¡å�—。æ�¨ç�†å’Œå†³ç–由外部 LLM 完æˆ�。系统的工作是将 LLM çš„è¾“å…¥è¾“å‡ºæ ¼å¼�化并转å�‘。
2. �是一个认知��
系统未å®�ç�°ä»»ä½•公认的认知æ�¶æ�„模å�‹ï¼ˆå¦‚ ACT-Rã€�SOARã€�CLARIONã€�全局工作空间ç�†è®ºç‰ï¼‰ã€‚其“记忆â€�是工程å˜å‚¨åˆ†å±‚,而é��è®¤çŸ¥ç§‘å¦æ„�义上的“工作记忆→长期记忆â€�转æ�¢ç»“æ�„。
3. �是一个知识图谱
记忆检索基äº� FTS5 关键è¯�匹é…�,而é��è¯ä¹‰ç›¸ä¼¼åº¦ã€‚系统没有定义知识å®�体之间的关系拓扑,也没有å�‘é‡�嵌入。工程的å�–èˆ�å‰�æ��是:预设 LLM 上下文窗å�£è¶³å¤Ÿå¤§ï¼ˆâ‰¥64k),用 FTS5 快速å�¬å›�大é‡�候选片段å��全部å¡�å…¥ Prompt,让 LLM 在超长上下文ä¸è‡ªè¡Œç›é€‰ã€‚
4. ä¸�是一个模å�‹è®ç»ƒæˆ–微调工具
技能优化(DSPy/GEPA)调整的是输入给 LLM çš„æ��示è¯�文本ä¸çš„æ�ªè¾�和示例顺åº�,ä¸�涉å�Š LLM 模å�‹æ�ƒé‡�的修改。
5. �是一个具有独立状�演化的动力系统
系统状æ€�在没有外部输入时ä¿�æŒ�ä¸�å�˜ã€‚状æ€�转移由用户输入ã€�定时触å�‘器或 Webhook ç‰å¤–部事件驱动,而é��由内部状æ€�æ–¹ç¨‹å†³å®šã€‚â€œä¼‘çœ -唤醒â€�æœºåˆ¶è™½èƒ½åœ¨æ— è¾“å…¥æ—¶è§¦å�‘ LLM 调用,但调用的内容由预设文本决定,系统本身ä¸�产生新的状æ€�分支。
6. ä¸�是一个决ç–优化系统
系统ä¸�定义效用函数ã€�æ�Ÿå¤±å‡½æ•°æˆ–æˆ�本函数。æ¯�一æ¥è°ƒç”¨å“ªä¸ªå·¥å…·æˆ–生æˆ�哪段文本,由 LLM 的概ç�‡è¾“出决定。Evaluator 的判æ–ä¾�æ�®ä¸ºç¡¬æ€§é˜ˆå€¼ï¼Œè€Œé��è´�å�¶æ–¯å†³ç–准则。
7. �是一个内生约�系统
系统没有定义独立äº� LLM 的约æ�Ÿæº�æ�¥é”šå®šæˆ–验è¯� LLM 的输出。所谓“记忆ç–展â€�是将写入失败的决ç–交给å�Œä¸€ä¸ª LLM 处ç�†ã€‚
8. 没有在代ç �层é�¢å›ºåŒ–“自我â€�
系统的“身份�由 prompt_builder在�次循�时动�拼�的 System Prompt 文本所赋予。修改 USER.
md或系统æ��示è¯�模æ�¿ï¼Œç³»ç»Ÿçš„“自我认知â€�会立å�³æ”¹å�˜ï¼Œæ— 需é‡�å�¯æˆ–é‡�æ–°è®ç»ƒã€‚
9. 知识真值的验è¯�委托给 LLM 的文本判æ–
Evaluator 判æ–“任务是å�¦æˆ�功â€�时,并ä¸�具备外部ç�¯å¢ƒçжæ€�的直æ�¥æ„ŸçŸ¥èƒ½åŠ›ã€‚å…¶åˆ¤æ–ä¾�æ�®æ˜¯ LLM 对执行结æ�œæ—¥å¿—的文本ç�†è§£ï¼Œæˆ–工具返å›�çš„ exit_code。系统没有通过确定性逻辑(如å�•元测试)æ�¥è¯�æ˜�技能的有效性。
10. 工具执行��过沙箱隔离
core/registry/ä¸çš„ execute_tool函数直æ�¥ä½¿ç”¨ Python çš„ subprocess或动æ€�导入执行注册的函数。系统å�‡è®¾è¿�行ç�¯å¢ƒå�¯ä¿¡ï¼Œä¸”工具代ç �æœ¬èº«æ— æ�¶æ„�。系统赋予 LLM 的工具调用能力,其æ�ƒé™�边界ç‰äº�è¿�行该 Python 进程的æ“�作系统用户æ�ƒé™�,未在系统层é�¢å®�æ–½é¢�外的能力管æ�§ã€‚
11. å¦ä¹ 过程å˜åœ¨å…ˆéªŒä¿¡æ�¯æ�Ÿè€—
Reflector生æˆ�å��æ€�文本时,ä¸�ç›´æ�¥è�·å�–å�Ÿå§‹ç”¨æˆ·è¾“入和å�Ÿå§‹è¾“出的完整è¯ä¹‰ï¼Œè€Œæ˜¯è¯»å�– Tracker截å�–的最å�� N æ�¡å·¥å…·è°ƒç”¨æ‘˜è¦�。如æ�œä¸€æ¬¡é•¿ä»»åŠ¡æ¶‰å�Šè¶…过上下文窗å�£çš„ä¸é—´æ¥éª¤ï¼Œæ—©æœŸä¸Šä¸‹æ–‡ä¼šè¢«æˆªæ–。沉淀为 SKILL.
md的知识是基�“执行轨迹缩略图�生�的,而�基�“完整任务全景图�。
三�组件�技术��对照
组件
公开�述
æº�ç �ä¸çš„对应å®�ç�°
跨会�记忆
æŒ�久记忆系统,åƒ�“数å—大脑â€�
MEMORY.md
(2200å—符)和 USER.md(1375å—符)两个文本文件;SQLite + FTS5 关键è¯�检索
自我进化
ä»�ç»�验ä¸å¦ä¹ ,越用越è�ªæ˜�
五阶段æµ�水线:Python 追踪执行 → æ�¡ä»¶åˆ¤æ– → LLM 生æˆ�å��æ€�文本 → LLM 生æˆ�技能文档 → å˜å…¥ç£�盘
技能�用
将�功�验沉淀为��用的能力
SKILL.md
自然è¯è¨€æ¥éª¤æ–‡æ¡£ï¼Œå�¯åŠ¨æ—¶æ‹¼æ�¥åˆ°ç³»ç»Ÿæ��示è¯�ä¸
技能优化
æŒ�ç»ä¼˜åŒ–技能质é‡�
DSPy/GEPA 调整 SKILL.mdä¸çš„æ�ªè¾�ã€�示例顺åº�和模æ�¿ç»“æ�„
工具集�
70+ 内置工具,�动�扩展
Schema–Registry–Handler 三层分离;AST 扫�自动��注册模�;工具执行��沙箱
自主决ç–
AI 驱动��和行动
ReAct 循�:�建 Prompt → 调用 LLM → 解�输出 → 分�工具调用
主动认知
智能体具有主动性
ç½‘å…³å±‚çš„â€œä¼‘çœ -唤醒â€�Heartbeat 机制,定期调用 LLM 询问å��å�°çжæ€�
系统��
智能体框�
一组 Python 脚本(conversation_loop.pyã€�core/memory/ã€�core/learning/ã€�core/registry/ç‰ï¼‰
状��久化
—
æ¯�次 LLM 调用完æˆ�å��ç«‹å�³åº�列化写入 SQLite å¹¶æ��äº¤äº‹åŠ¡ï¼›æ— è¿�行时内å˜çжæ€�
å››ã€�ä¸�å…¬å¼€å®£ä¼ çš„å¯¹ç…§
å…¬å¼€å®£ä¼ ä¸çš„表述
技术事�
“æŒ�久记忆系统â€�ã€�“ç–展å¼�记忆â€�ã€�“知识沉淀â€�
记忆å˜å‚¨ä¸ºçº¯æ–‡æœ¬æ–‡ä»¶ï¼ˆ.md)。检索方å¼�为关键è¯�匹é…�(FTS5)。写入超é™�æ—¶ç”± LLM 自行决ç–å�–èˆ�。
“AI 决ç–ä¸�æ�¨ç�†â€�ã€�“智能体自主行动â€�
系统ä¸�执行æ�¨ç�†ã€‚所有决ç–由外部 LLM 的概ç�‡è¾“出完æˆ�。系统负责拼æ�¥ Prompt 和解æ��å—ç¬¦ä¸²æ ‡è®°ã€‚
“自我进化â€�ã€�“ä»�ç»�验ä¸å¦ä¹ â€�ã€�“越用越è�ªæ˜�â€�
å¦ä¹ 循ç�¯æ˜¯ Python 脚本驱动的æµ�水线。LLM å�‚ä¸�文本生æˆ�(å��æ€�ã€�技能文档)。输出为 .
md 文件。Reflector 的输入是截æ–å��的执行摘è¦�,é��完整任务全景。
“行为优化��“效����
优化对象是输入给 LLM 的�示�文本(���示例顺�)。�改�模�自身能力。
“数å—大脑â€�ã€�“智能体框æ�¶â€�
系统未å®�ç�°ä»»ä½•公认的认知æ�¶æ�„ã€‚æ ¸å¿ƒæ˜¯ ReAct 循ç�¯çš„ Python å®�ç�°ã€‚“自我â€�ç”± System Prompt 动æ€�定义,未固化äº�代ç �。
“主动智能�
å˜åœ¨å®šæ—¶è§¦å�‘çš„ LLM 调用机制,但调用内容由预设文本决定,ä¸�产生新的状æ€�分支。
五�技术画�
Hermes Agent 在工程底层ç‰ä»·äº�以下æ“�作åº�列:
将当�状�(对��记忆�工具返�)�列化为文本 → 调用外部黑盒(LLM)生�下一组动作指令的文本 → 解�文本并执行对应函数 → 将执行结��次�列化为文本写入�盘。
综å�ˆæ‰€æœ‰æŠ€æœ¯äº‹å®�,å�¯è¿›ä¸€æ¥ç²¾ç‚¼ä¸ºï¼š
一个具备事务性æŒ�久化能力的文本驱动å�‹è‡ªåŠ¨åŒ–ç®¡é�“。它以ç£�盘文件作为共享黑æ�¿çš„载体,以外部 LLM 作为唯一的“读写æ�§åˆ¶å™¨â€�,将所有认知负担(记忆å�–èˆ�ã€�任务规划ã€�技能æ��炼ã€�自我认知)通过 Prompt å�¸è½½ç»™å¤–部 API,自身仅ä¿�ç•™å—ç¬¦ä¸²æ ‡è®°è§£æ��和进程级 I/O 调度功能。
å…ã€�补充
1. 对应 二.11
Reflector 的输入是 Tracker 截�的最� N �工具调用摘�,而�完整对�日志。Crystallizer 基�摘�生� SKILL.md。
系统未定义任何机制�计算�始对�日志� SKILL.
md之间的信�熵差异或互信��留�。��始日志到技能文档的转�是一个有��缩过程,但其�耗未被�化。
2. 对应 二.7
记忆写入超é™�时,系统ä¸�æ‰§è¡Œç¡®å®šæ€§åˆ é™¤é€»è¾‘ï¼Œè€Œæ˜¯å°†å†³ç–æ�ƒäº¤è¿˜ç»™ LLM。prompt_builder.
py动æ€�æ�„建 System Prompt,其ä¸çš„规则由 LLM 在对è¯�ä¸å†³ç–是å�¦ä¿®æ”¹ã€‚
系统缺少独立äº� LLM 的外部å�‚考输入(如事å®�æ ¡éªŒå™¨ã€�状æ€�验è¯�器)æ�¥æ��供负å��馈信å�·ã€‚Evaluator 的判定ä¾�æ�®ä¸º LLM 对日志的文本ç�†è§£æˆ– exit_code。
3. 对应 二.2
conversation_loop.pyçš„å�•层循ç�¯ä¸ï¼ŒLLM 在å�Œä¸€ä¸Šä¸‹æ–‡ä¸å�Œæ—¶æ‰¿æ‹…任务执行ã€�自我评判ã€�规则制定三é‡�身份。prompt_builder.
py将所有内容å�‹å…¥å�Œä¸€ Promptï¼Œæ— ç»“æ�„化分层。
系统没有定义“元认知层â€�æ�¥ç›‘ç�£â€œè®¤çŸ¥å±‚â€�的独立模å�—。任何监ç�£è¡Œä¸ºéƒ½éœ€è¦� LLM 在å�Œä¸€ä¸ªä¸Šä¸‹æ–‡çª—å�£ä¸è‡ªè¡Œå®Œæˆ�。
4. 对应 二.2�二.8
MEMORY.md和 SKILL.
md是��文本文件,仅在�建 Prompt 时被读�并拼�为文本。这些文本�作为系统��的一部分被内化——没有对应的数�结��状���或�制�逻辑。
系统没有定义任何认知图��动�更新对世界的�解。所有“更新�表�为文本替�。
5. 对应 二.6
工具选择的决ç–路径为:æ�„建包å�«å·¥å…·å®šä¹‰çš„ Prompt → 调用 LLM → è§£æ�� LLM 输出的 <TOOL_CALL>æ ‡è®°ã€‚è·¯å¾„é€‰æ‹©ç”± LLM 的概ç�‡é‡‡æ ·å†³å®šã€‚
ç³»ç»Ÿæ— æœŸæœ›æ•ˆç”¨è®¡ç®—ï¼Œæ— æŠ˜ç�°å› å�ï¼Œæ— é£�险å��好å�‚数。Evaluator 的判定ä¾�æ�®ä¸ºç¡¬æ€§é˜ˆå€¼ï¼ˆå·¥å…·è°ƒç”¨æ¬¡æ•°â‰¥5 且任务æˆ�功),ä¸�进行è´�å�¶æ–¯å��验概ç�‡æ›´æ–°ã€‚
6. 对应 二.5�一.7
系统状�在没有外部输入时����。�一次用户输入或定时心跳都是对系统的外部冲击,状�转移由这些事件驱动,而�由内部状�方程决定。
系统没有定义在时间轴上è¿�ç»æ¼”化的状æ€�å�˜é‡�。昨天的 SKILL.md和今天的 SKILL.
md之间ä¸�å˜åœ¨åŠ¨åŠ›å¦è¿�ç»æ€§çº¦æ�Ÿã€‚系统状æ€�å�¯ä»¥åœ¨æ— 外部å�šåŠŸçš„æƒ…å†µä¸‹å�‘生çª�å�˜ã€‚
7. 对应 二.11�一.2�一.3
系统维æŒ�ä½�熵结æ�„(æ��炼技能)的唯一手段是调用 LLM 生æˆ�文本。LLM çš„é‡‡æ ·è¿‡ç¨‹æœ¬èº«æ˜¯ä¸€ä¸ªå¼•å…¥éš�机性的过程。技能æ��炼的输出基äº�æˆªæ–æ‘˜è¦�,而é��完整任务信æ�¯ã€‚
系统ä¸�å�‘ç¡®å®šæ€§æ ¡éªŒç�¯å¢ƒè¾“出“废çƒâ€�(å�³é€šè¿‡ç¡®å®šæ€§é€»è¾‘验è¯�并固化的事å®�)。æ¯�一次记忆é‡�写和技能生æˆ�都在消耗 API 能é‡�,但系统没有将任何结æ�œå›ºåŒ–为ä¸�å�¯å�˜çš„结æ�„。技能文档å�¯ä»¥åœ¨å��ç»è¢«å†�次é‡�写。
8. 负�馈�自指递归的区别
在æ�§åˆ¶è®ºä¸ï¼Œè´Ÿå��馈è¦�求系统有一个独立äº�被æ�§å¯¹è±¡çš„å�‚考输入,通过感知输出ä¸�å�‚考值的å��å·®æ�¥ä¿®æ£è¡Œä¸ºã€‚
本系统的逻辑是:让被�对象(LLM)自己�修改�制器(System Prompt)的规则�数。这�是负�馈,而是自指递归。系统缺少独立� LLM 的�考输入��供负�馈信�。
七�技术事�汇总
系统是一组 Python 脚本,管� LLM API 调用和本地文件读写。
记忆å˜å‚¨ä¸ºçº¯æ–‡æœ¬æ–‡ä»¶ï¼ˆ.md)和 SQLite æ•°æ�®åº“(FTS5 关键è¯�检索)。
技能å˜å‚¨ä¸ºè‡ªç„¶è¯è¨€ Markdown 文档,å¤�用时拼æ�¥åˆ°ç³»ç»Ÿæ��示è¯�。
å¦ä¹ 循ç�¯æ˜¯ Python 脚本驱动的æµ�水线,LLM å�‚ä¸�两个文本生æˆ�ç�¯èŠ‚ï¼ˆå��æ€�ã€�技能文档)。
技能优化调整的是输入给 LLM 的�示�文本,�改�模��数。
系统ä¸�包å�«ç‹¬ç«‹äº� LLM çš„æ�¨ç�†æ¨¡å�—ã€�决ç–优化模å�—或内生约æ�Ÿæ¨¡å�—。
æ ¸å¿ƒå¼•æ“�(对è¯�循ç�¯ï¼‰æ˜¯ ReAct 模å¼�çš„æ ‡å‡†å®�ç�°ã€‚
工具��采用 AST ��扫�自动化注册。
工具执行ä¸�ç»�沙箱隔离,æ�ƒé™�边界ç‰äº�æ“�作系统用户æ�ƒé™�。
系统未��任何公认的认知��模�。
系统的“自我认知â€�ç”± System Prompt 动æ€�定义,未固化äº�代ç �。
知识真值的验�委托给 LLM 对日志文本的�解,而�确定性逻辑。
å¦ä¹ 循ç�¯çš„ Reflector 阶段输入为截æ–å��的执行摘è¦�,å˜åœ¨å…ˆéªŒä¿¡æ�¯æ�Ÿè€—。
系统å˜åœ¨â€œä¼‘çœ -唤醒â€�的定时 LLM 调用机制,但调用内容由预设文本决定。
检索ç–略为“FTS5 å�¬å›� + 超长上下文ç›é€‰â€�,用算力æ�¢å·¥ç¨‹å¤�æ�‚度。
ç³»ç»Ÿé‡‡ç”¨â€œæ— å†…å˜è¿�行时â€�æ�¶æ�„:æ¯�次 LLM 调用完æˆ�å��ç«‹å�³æŒ�久化,ä¸�维护è¿�行时动æ€�状æ€�。
系统没有定义状æ€�åœ¨æ—¶é—´è½´ä¸Šæ¼”åŒ–çš„åŠ¨åŠ›å¦æ–¹ç¨‹ï¼Œçжæ€�转移由外部事件驱动。
系统ä¸�å�‘ç¡®å®šæ€§æ ¡éªŒç�¯å¢ƒè¾“出固化结æ�œï¼ŒæŠ€èƒ½æ–‡æ¡£å�¯åœ¨å��ç»è¢«é‡�写。
系统缺少独立� LLM 的�考输入��供负�馈信�。
社区å��馈ä¸å˜åœ¨ Token 消耗ã€�å¦ä¹ å�¯æ�§æ€§ã€�项目维护效ç�‡æ–¹é�¢çš„讨论。
本文基äº�公开æº�ç �和社区讨论å�šæŠ€æœ¯äº‹å®�梳ç�†ï¼Œä¸�包å�«ä»·å€¼åˆ¤æ–。