以 LangGraph 为内核,先把 Mini Agent 打造成具备会话记忆、长期记忆、技能沉淀、可扩展子代理的通用 Agent 基座,再从该基座衍生数据分析与论文研究方向。当前不维护独立 Web 前端。
- 项目主线仍然是通用 Agent,不走 Hermes 那种“编码智能体优先”的路线。
- 技术基座继续保持为
LangGraph + create_agent + middleware。 - 参考 Hermes 的重点不是复刻其产品形态,而是吸收“会成长、会沉淀、可跨会话延续”的能力设计。
- 会话历史、长期记忆、用户画像概览、语义检索等,凡 OpenViking 已提供的模型与接口,一律直接走 OpenViking(
backend/openviking/适配层),不自建平行存储或第二套记忆/画像系统(例如不再为同一用途另建 JSON 库、独立画像文件服务)。 - Mini Agent 侧只做:身份映射(
user_id/thread_id)、配置与编排、把召回结果注入系统提示与工具,不在应用层重复实现 OpenViking 已有的提炼与索引能力。
- Agent 核心已经稳定成型:
backend/agent.py负责组装create_agent(...)backend/state.py定义MiniAgentStatebackend/context.py定义MiniAgentContext
- 中间件栈已经具备扩展基础:
- 上下文工程
- 摘要
- Todo
- 重试
- 限流
- 循环检测
- 错误处理
- 澄清
- 长期记忆与会话已切到 OpenViking embedded(
backend/openviking/),不再使用data/users下 JSON 文件;data_query_memory.json已移除。后续演进仍遵守 OpenViking 单轨(见上),不在应用层复制同类能力。 thread_id绑定 OpenViking session,历史在MiniAgentRuntime.invoke中回灌;LangGraph 侧已去掉进程内InMemorySaver作为主会话源。- 与 Agent 对接的典型客户端会消费 LangGraph
/runs/stream流式事件,并可调用记忆等 HTTP API;本仓库当前不内嵌该 Web 端。 - 技能和子代理体系已经可用,不需要从零设计:
skills/下已有可复用技能- 已有
general-purpose与skills-research两类子代理
- 调研并确认 OpenViking 的正式接口、SDK、存储模型和部署方式(embedded +
ov.conf,见官方文档与openvikingPyPI) - 设计 Mini Agent 到 OpenViking 的记忆映射关系(
user_id→UserIdentifier,thread_id→ session) - 统一到 OpenViking 记忆模型;已移除
profile.json/working_memory.json/data_query_memory.json主链,不做旧 JSON 双写兼容
- 以 OpenViking session 为持久化主源(替代进程内 checkpoint 作为会话历史)
- 让
thread_id对应可恢复的会话历史(load_session_history_messages+ runtime 回灌) - 打通 session 与长期记忆索引的产品级约定(URI、命名、跨 thread 检索入口仍待补强)
- 跨会话「回放 UI / API」与 LangGraph 流式入口对齐(若仍走独立 LangGraph API,需统一契约)
- 分层召回初版:
session归档摘要 +user记忆概览 +find相关记忆(backend/openviking/retrieval.py) - 更细粒度区分画像 / 事实 / 近期目标(仅通过 OpenViking 分类、索引与检索策略调优,不自建标签体系)
- 控制注入:仅将召回块拼入系统侧上下文,避免整库灌入
- 为垂域智能体预留统一召回接口(工具可调用的检索层;基于现有 OpenViking 封装,不另建检索后端)
已实现(初版):commit_session_turn 在 add_message 同步落盘(保证下一轮 load_session_history 可见)之后,当 openviking.async_commit: true 时仅将 commit_session 投递到 backend/openviking/memory_commit_queue.py 的后台线程;MiniAgentRuntime.invoke 在 enqueue 后即可返回,不再等待记忆提炼完成。配置项:async_commit(默认 true)、async_commit: false 时回退为同步 commit_session(便于测试与排障)。
时序约定:当前轮回答不依赖本轮刚完成的 commit_session;提炼与索引更新主要影响后续轮次的检索与归档。
- 拆分链路:同步
add_message+ 异步commit_session(见session_store.commit_session_turn) - 进程内队列 + 单 worker 线程(后续可换 Redis / 独立进程)
- Worker 内失败重试(指数退避,最多 3 次)与结构化日志
- 同
(user_id, thread_id)合并去重、全局限流(高并发下减少冗余 commit) - 任务 id、耗时统计、LangSmith 自定义 span;
queue_depth()已预留,待接入指标面板 - 质量与成功率:commit 成功率、重试次数、队列积压告警;提炼条数等质量指标
这里借鉴 Hermes 的不是“编码优先”,而是“成长闭环”。本段能力扩展默认以 OpenViking 为唯一记忆与会话语义源,不自建平行记忆系统。
- 支持检索历史对话、任务结论与已沉淀记忆(
session空间find+ 用户记忆find,见cross_session_retrieval/retrieval.py) - 让检索结果既可作为工具能力,也可作为召回层能力(
memory_recall工具 + 上下文工程注入) - 为复杂连续任务提供跨 session 延续能力(排除当前
thread_id的其它会话命中 + 既有会话归档与记忆召回)
- 将复杂任务中的稳定流程沉淀为技能
- 支持对已有技能做迭代升级,而不是不断堆主提示词
- 让通用 Agent 通过任务经验逐步形成可复用能力库
画像与长期记忆同源:OpenViking 用户空间下的提炼内容(如 profile_overview / .overview.md)与记忆概览、向量召回一并进入系统上下文(见 memory_store.build_user_memory_context)。不在应用层另建画像库或第二份「用户档案」存储。
- 在 OpenViking 产出结构或文档约定内,引导偏好、角色、长期目标、常用任务类型等稳定栏目(
readme.md用户数据隔离节 + 系统提示;提炼仍由 OpenViking 负责),而非自建用户建模系统 - 保持轻量:不重做画像抽取与存储,只调 OpenViking 与接入层行为(架构已遵守,见「OpenViking 单轨原则」)
- 强化 系统提示中的使用规则:画像块服务于语气、详略与工具倾向,且服从事实与工具结果(
prompt.py§6);主链路为对话注入,不单独堆「画像功能页」
- 在现有
general-purpose和skills-research基础上扩展协作模式 - 后续考虑形成 planner / researcher / executor / reviewer 的多角色协同
- 子代理设计继续服务于通用任务,而不是偏向编码工作流
- 继续强化工具调用治理、错误处理、澄清机制和限流策略
- 为关键工具调用增加更明确的策略控制
- 将治理能力作为通用 Agent 的底层能力,而不是临时补丁
当前先做通用 Agent,后续在统一内核上衍生垂域能力。
- 复用
data-query-interpretation技能 - 增强结构化分析、指标解释、业务归因和报表问答
- 复用
deep-research能力 - 扩展论文检索、文献综述、观点对比、引用整理和研究问题拆解
- 形成更适合学术研究场景的任务链路
- 所有垂域智能体都建立在同一个通用 Agent 内核之上
- 不拆成两套完全独立的框架
- 先强化底座,再衍生垂域,不反过来牵引主架构
- 不做 MCP 集成
- 不把产品重新定位成编码智能体
- 不追求一比一复刻 Hermes 的 CLI、消息网关、终端后端或云运行体系
- 不自建与 OpenViking 职责重叠的会话主存、长期记忆主存、用户画像主存或独立语义索引(与「OpenViking 单轨原则」一致)
- 记忆系统重构与 OpenViking session 主链:已完成主体;索引与跨入口契约仍待收尾。
- 进行中:长期记忆异步化(解耦主链路与 commit/提炼)。
- 然后建设技能沉淀、在 OpenViking 与提示层上演化画像、以及子代理协作;跨会话检索已在 OpenViking 链路上落地,后续以调优与产品契约为主。
- 再推进数据分析/论文等垂域智能体分身(若日后需要独立前端,再单独排期)。