简体中文 | English
Continuum Chat 是一个面向长期个人 Agent的应用级 LLM Agent Harness 作品集项目,基于 Flutter、FastAPI 与 SQLite。这里的重点不是训练模型,而是设计模型外面的运行系统:如何组织 Context、Memory、State / Environment、Tools、Trigger、Runtime,以及如何验证这些机制在长期使用中是否真的有效。
公开仓库并不是源产品的完整生产后端,而是一个脱敏、可运行、可审查的参考切片:移动端保留真实产品前端的 UI 与交互架构;随附 Runtime、Memory、MCP 与 Provider 适配层提供精简参考实现,默认使用本地 Mock Provider,无需 API Key 即可跑通核心流程。为了安全与可复现,公开基线刻意缩小了自主行为范围:Memory 不会自动注入聊天上下文,MCP 采用手动调用,State / Environment 与 Trigger 等高级链路只保留产品层边界或扩展位,不声称在公开后端中完整实现。
- Runtime / Context:服务端持有 canonical history,并用 Context Epoch 控制后续 Provider 可见上下文
- Memory boundary:独立 Memory CRUD / recall 服务,可替换检索策略而不改聊天历史契约
- State / Environment boundary:产品前端保留持续状态、事件与环境类交互边界,公开后端不实现完整环境引擎
- Tools / MCP:手动 stdio 工具发现与调用,另有基础 JSON-RPC-over-HTTP 适配
- Provider layer:OpenAI-compatible Provider 适配、SSE 归一化与 Token usage 记录
- Evaluation / observability:本地测试、隐私扫描、usage analytics 与可复现 Mock 流程
- Sanitized product UI snapshot:保留公开快照中的聊天/推理/工具呈现、历史、Memory、上下文/设置、模型/Provider、MCP/插件/工具、日历/日记与其他主要界面
项目角色: 负责长期 Agent 的需求分析、系统规则与方案取舍、故障复现、模型/Prompt 对比、测试设计和验收;工程实现主要通过 Codex 等 Coding Agent 协作完成。这个作品展示的是 AI 应用设计、Agent 工作流与工程验证能力,并不声称独立完成所有生产代码或基础模型训练。
源产品能力地图(区别于本仓库的公开 Demo):
| 领域 | 源产品的能力或真实阶段 |
|---|---|
| Chat / Runtime | 服务器正式会话、Generation 生命周期、ContextEpoch、流式与工具事件、编辑/重发/取消/恢复 |
| Prompt / Context | Prompt Workspace、Handoff、Working Memory、最终 Provider 输入观察和冗余治理;时间语义召回已完成专项修复 |
| 长期 Memory | 原始证据、卡片修订、Scene-first Writer、Gatekeeper、词法/向量召回、Related / Ambient / 行动前召回;Web 管理台支持版本编辑、原文证据与可恢复归档 |
| 历史治理 / Water | 2026-10-09 完成 R5 生产切换;5 Lake、18 Stream、545 个归属;新主题自动生长仍未完成 |
| 主动性与计划 | 主动联系、自由活动、Trigger / Self Plan、有限 Pending、工具执行回执 |
| Self Model | 与 Memory 分离的真实证据、建议复核、成熟度 Gate、跨窗口采用机制 |
| MCP / 设备 | 工具执行连续性、Android DeviceBridge 与设备能力路由;公开 Demo 仅提供手动 MCP |
| 多模型工程 | Gemini 原生 API、DeepSeek 路由、SSE / 工具续轮、Token usage、缓存调优 |
| 产品与生活扩展 | Android 聊天、历史、记忆、日历、日记、阅读、音乐、通知及手机工具;各模块完成度不同 |
| 验证 / 新 App | 历史回放、专项回归、部署与隐私检查;新 Compose 客户端仍为实验与迁移项目,未替换生产 Flutter |
以下只是代表性难题,不是全部功能:
| 典型问题 | 在真实源产品中的解决方向 | 公开证据 |
|---|---|---|
| 长期记忆乱写、漏召回、错误升温 | Scene-first 写入与严格准入;Related/Ambient 分路;区分检索、注入和真实激活 | 案例 7、8 |
| 工具做完后下一轮不记得结果 | 工具执行回执、有限 Pending、行动前历史检查 | 案例 2、4、8 |
| 长对话被后台信息污染 | 对最终 Provider 输入做审计,保留真实对话原文,隔离历史后台状态 | 案例 3、9 |
| R5 历史记忆重建 | 审核候选、正式修订、Water 切换、索引对账与回滚证据 | 案例 10 |
| 模型原生传输和缓存故障 | SSE 分帧、工具续轮与 Provider usage 对账 | 案例 11 |
| “昨晚两点”等时间指代检索不稳 | 意图门控、相对时间解析、隔离回归与发布回退 | 案例 12 |
| Memory 管理界面混淆旧标签与真实归属 | 版本化操作、来源原文校验、Sea 状态和 Water 路径分离 | 案例 13 |
状态边界: 本仓库可运行的是脱敏参考实现;源产品 已上线并验证 的包括 Memory VNext 召回、Scene-first Writer、主动/行动前记忆和部分 Context 观测链路,相关源产品实现并未完整开源。记忆整体重建已于 2026-10-09 完成 R5 生产切换;Water 新主题自动生长仍未上线;2026-10-13 已核验自然 Writer/索引运行,但记忆复活等长期效果仍待真实使用观察。Memory Web 的水系路径、证据显示和管理操作已交付,旧分类写入规则仍未统一;App 水系界面暂缓,Context Inspector 部分前端界面仍在迭代。以上状态不能理解为公开 Demo 已具备所有生产能力。
作品集更新(2026-10-13):新增时间语义召回的意图门控、回退与验证案例,以及 Memory Web 的真实 Water 归属、带版本操作和原文证据处理案例;保留已上线、待观察与暂缓功能的区别。高级生产能力仍只以脱敏的 工程案例 介绍,不复制私人生产代码或数据。
技术栈: Flutter · FastAPI · SQLite · Python · Dart
招聘者速览 · 快速开始 · 30 秒代码导览 · 源项目工程案例 · 成果预览 · 系统架构
| 关注点 | 从这里开始 |
|---|---|
| Runtime API、SSE Chat、鉴权路由 | server/app.py |
| Provider 配置与 SSE 归一化 | server/provider.py |
| canonical 历史、Context Epoch、Token 聚合 | server/runtime_store.py |
| MCP stdio 生命周期与 JSON-RPC-over-HTTP 适配器 | server/mcp_client.py |
| Memory API 与持久化 | memory/app.py、memory/store.py |
| 确定性本地 recall | memory/recall.py |
| Flutter 入口与页面导航 | mobile/lib/main.dart、mobile/lib/pages/ |
| Chat/Runtime、历史、Memory 与服务器配置 Client | mobile/lib/services/chat_api.dart、mobile/lib/services/runtime_history_api.dart、mobile/lib/services/memory_api.dart、mobile/lib/services/server_config.dart |
| 隐私检查 | scripts/privacy_scan.py |
从产品视角,Continuum Chat 将系统拆成三层:Product / UI → Agent Harness → LLM / Provider。公开仓库保留一个脱敏的产品层快照,并公开 Harness 中可安全复现的核心子集;源产品后续新增界面与生命周期机制不自动同步到这里。
flowchart TB
subgraph UI[Product / UI]
A[Flutter Android client]
U[Chat · Memory · Tools · Settings · State/Environment surfaces]
A --> U
end
subgraph H[Application-level Agent Harness]
R[Runtime / canonical history]
C[Context epochs]
M[Memory service]
S[State / Environment boundary]
T[Tools / MCP]
G[Trigger / event boundary]
E[Evaluation / observability]
end
P[OpenAI-compatible LLM / Provider]
DB1[(Runtime SQLite)]
DB2[(Memory SQLite)]
A --> R
A --> M
A --> T
R --> C
R --> P
R --> DB1
M --> DB2
R -. product extension .-> S
R -. product extension .-> G
R --> E
公开基线中的 Runtime 负责 canonical transcript、Context Epoch、Provider 交互与 usage;Memory 负责记忆卡与确定性 recall;MCP 采用手动调用。State / Environment 与 Trigger 在这里作为产品架构边界和扩展位呈现,不等于公开后端已经实现完整自主 Agent 循环。
进一步说明:架构 · 源项目工程案例 · 配置 · 安全 · 隐私
它是:
- 面向长期个人 Agent 的应用级 Harness / 运行框架作品集
- 对 Context、Memory、Tools、State / Environment、Runtime 等模型外层能力的工程化组织
- 一个强调真实问题复现、方案取舍与回归验证的 AI 应用项目
它不是:
- 自研基础模型或模型训练项目
- 底层 Embedding / RAG 算法研究项目
- Multi-Agent Framework;当前主线仍是一个核心 Agent + 多种能力边界
- 在公开仓库里完整开放的自主 Agent 生产系统
- “Coding Agent 内置子 Agent”示例;Codex 等 Coding Agent 主要用于本项目的开发协作
以下数字来自源项目的真实长期迭代,用于说明问题规模与验证方式;公开仓库仅保留可安全公开的参考实现,并不声称这些结果都可由当前精简基线直接复现。
- 重建 99 个历史会话窗口,用于长期记忆迁移与召回验证
- 三轮模型 / Prompt / Context 回放累计 148 条测试结果
- 人物指代召回阈值专项回归 15/15 PASS
- 主动触发规则专项回归 96/96 PASS
- 在部分真实分支中定位到约 34%–39% 的额外重复历史内容
- Runtime 迁移覆盖 35 个会话窗口、4,907 条历史消息
- 源产品 Memory R5 已正式切换:5 Lake、18 Stream、545 个归属,VNext 有效索引 518/518 对账通过;不代表公开 Demo 的数据规模
以上截图均来自公开演示版 Android 实机运行,仅使用合成演示数据;不包含私人聊天、真实 Memory、服务器地址、API Key 或设备身份信息。
要求:Python 3.10+ 与 macOS/Linux Bash。(bootstrap_dev.sh 会创建虚拟环境、安装 Python 依赖,并生成被 Git 忽略的本地配置文件。)
git clone https://github.com/Nereviay/continuum-chat.git
cd continuum-chat
./scripts/bootstrap_dev.sh启动 Memory:
.venv/bin/python -m memory.app另开一个终端启动 Runtime:
.venv/bin/python -m server.app然后检查两个服务,并流式获取一条 Mock 回复:
curl http://127.0.0.1:8816/health
curl http://127.0.0.1:8820/health
curl -N \
-H 'Content-Type: application/json' \
-d '{"message":"Hello"}' \
http://127.0.0.1:8816/chat默认 Provider 是 mock://local。Mock 会输出确定性的占位 usage 数据;配置真实 HTTP Provider 后,则持久化 Provider 实际返回的 Token usage。
CI 使用 Flutter 3.44.8。安装 Flutter 与 Android SDK / Emulator 后:
cd mobile
flutter pub get
flutter runServerConfig 的默认主机是 127.0.0.1;Runtime 使用端口 8816,Memory 使用 8820。后端运行在开发主机时,Android Emulator 用户通常需要将主机改为 10.0.2.2。实体设备可通过 adb reverse 继续使用 127.0.0.1,或配置设备可访问的主机。
脱敏客户端没有硬编码服务器凭据。可选服务器 Token 通过构建参数 --dart-define=CONTINUUM_SERVER_TOKEN=... 提供。公开后端使用独立的 Bearer 鉴权配置,兼容范围详见配置文档。
实体手机的网络绑定、Bearer Token、HTTPS 建议,以及 Windows 跨盘 Android 构建说明见 配置文档 与 安全文档。
| 模块 | 当前实现 |
|---|---|
| 流式聊天 | OpenAI-compatible Provider SSE,支持可选 reasoning 事件 |
| Context 管理 | Runtime API 显式切换 Context Epoch,历史消息仍完整保留 |
| Memory | 记忆卡 CRUD + 确定性 lexical recall |
| State / Environment | 产品前端保留持续状态/环境类交互边界;精简公开后端不实现完整环境引擎 |
| Trigger / proactive | 作为源产品架构中的能力边界保留在文档定位中;公开基线不实现自动触发循环 |
| Provider | 离线 Mock Provider + 可配置 OpenAI-compatible Endpoint |
| MCP / Tools | 手动 stdio MCP 工具发现/调用;可选基础 JSON-RPC-over-HTTP 适配;无自动模型工具执行 |
| Analytics | 每日消息量与 Provider 返回的 input/output Token;Mock usage 仅为占位数据 |
| Mobile | 脱敏 Flutter 产品前端快照:保留聊天/推理/工具呈现、历史、Memory、上下文/设置、模型/Provider、MCP/插件/工具、日历/日记等主要界面;源产品后续新增界面不会自动同步,高级界面可能需要参考后端之外的服务 |
| Security | loopback 默认值;非 loopback 必须配置 Bearer Token |
| Privacy | Runtime 状态默认不入 Git,并提供自动隐私 / secret gate |
将 config/provider.example.json 复制为被 Git 忽略的 config/provider.json,或者直接在 App 内修改 Provider 设置。
如需 MCP,可将 examples/mcp_config.example.json 复制为被 Git 忽略的 config/mcp.json。仓库内示例默认禁用,并将 filesystem MCP 限制在 ./mcp-demo-workspace。
MCP stdio 会以 Runtime 进程账户的权限启动本地可执行程序,Continuum Chat 不会额外提供 sandbox。在网络可访问的主机上启用前,请先阅读 配置 与 安全。
- SQLite 而不是外部数据库: 让单用户参考栈无需额外基础设施即可运行、检查与调试。
- Lexical recall 而不是 embeddings: 基线不依赖额外模型/服务,同时保留清晰的 Memory 服务边界,方便后续替换。
- 手动 MCP 调用: 展示 stdio MCP 生命周期、配置/鉴权边界和工具调用,而不把基线包装成“自主 Agent”。
- Provider-reported usage: 真实 HTTP Provider 保存其返回的 usage,而不是根据消息长度估算 Token。
- 单用户鉴权模型: Bearer Token + loopback 安全默认值适合当前参考实现;它不是多租户身份平台。
mobile/ 脱敏 Flutter 产品前端快照(models、pages、services、utils、widgets)
server/ Runtime、Provider adapter、history、MCP
memory/ Memory 服务与本地 recall
config/ 安全的 Provider 示例;真实本地配置不入 Git
examples/ 默认禁用的公开 MCP 示例
mcp-demo-workspace/ filesystem MCP 的受限 Demo 目录
scripts/ Bootstrap 与隐私检查
docs/ Architecture、Configuration、Privacy
.github/workflows/ CI
本地检查:
python3 -m py_compile server/*.py memory/*.py
python3 -m unittest discover -s . -p 'test_*.py'
python3 scripts/privacy_scan.py
git diff --check
cd mobile
dart format --output=none --set-exit-if-changed lib test
flutter analyze
flutter test
flutter build apk --debugCI 会执行 Python compile/tests/privacy scan、Dart format、Flutter analyze/test,以及 Debug APK 构建。Runtime 数据库、聊天记录、Memory 数据、日志、本地配置、构建产物、签名材料与环境变量文件都不会进入版本控制。详见 隐私说明。
Continuum Chat 是一个单用户、自托管的 Agent Harness 参考实现与作品集切片。它重点展示长期 Agent 所需的模型外层系统边界与工程取舍;公开基线不声称提供多用户授权、互联网级滥用防护、自动工具执行、完整 State / Environment 引擎、自动 Trigger 循环、语义向量记忆或完整部署自动化。
MIT.

