VictorTaelin/uniichat

AI 工程

一个可自托管的长期 AI 代理聊天,用可逐层展开的记忆树代替丢弃历史的上下文压缩。

587
59
TypeScript
Apache-2.0
上线 5 天

如果你厌倦了 AI 助手不断"新建对话"、长聊到一定长度就被截断,UniiChat 值得看一眼;但请把它当作实验品,而不是成品——作者明确说几乎全部代码由 AI 编写和审查,预期会有 bug。

解决什么问题

你希望有一个能记住上周聊过什么的长期助手,而不是每次重新粘贴背景或眼看着旧内容被截掉。现在的摩擦点就在对话边界:新开一轮、重新解释前提,或者接受窗口满了以后早期细节被丢弃。UniiChat 把对话从可重置的会话改成服务器上的一条持续会话,旧消息被压缩成概要,需要时还能重新展开。结果是这条对话可以长期用下去,上下文是精度随年龄下降,而不是整段消失。

有什么不同

核心机制是一棵二叉记忆树:每条消息先汇总成一行,相邻的行反复两两合并,每次模型调用看到的是整段对话最多 128 KB 的一个视图,近期的消息逐行保留,较旧的由更少、更概括的行覆盖。代理可以"放大"任意一行,还原出合并前的两条,直到原始消息,因此不需要那种丢弃过去的 compaction。概要由更便宜的"压缩模型"在后台随消息写入,视图只在回合结束时变化,所以大部分输入能命中厂商的提示缓存。代价是结构性的:回忆质量取决于这些概要和代理是否决定放大,而且每条消息都会带来独立于主对话的后台压缩工作与开销。

服务器持有对话,浏览器和 unii 终端都只是实时视图,任何一端都能发消息、停止工作或切换模型。代理能运行 shell、读写文件、启动后台子代理,还能把过去的 Claude 和 ChatGPT 对话导入同一棵树。这使它更接近代理运行时而非聊天客户端,接触面也相应更大。

谁值得试

适合:熟悉 Bun 和 API key、想要一个带文件与 shell 权限的长期个人代理、并且愿意读源码理解记忆模型的开发者。设计说明就写在各个文件的开头注释里,从 Memory.ts 和 Server.ts 读起,适合打算阅读和修改代码的人。不适合:想要开箱即用的托管聊天或团队产品的人,以及不愿自己管 API key、备份和更新的人。不想自己跑服务器的话,文档给出了 托管版 这条替代路径。

使用条件与边界

默认需要 Bun 和 Anthropic API key;只有 OpenAI key 时可通过修改 vendors、pick 和 compactor 配置改用 OpenAI,但默认配置假定使用 Anthropic。登录通常需要邮件 key(如 RESEND_API_KEY);没有时服务器会把登录链接打印到输出里,本地使用仍然可行。对话以 JSON 行存放在 ~/.unii/users/<id> 下,README 说得很直白:它们就是记忆,要备份。在 Mac 上使用屏幕控制需要编译 Computer.swift,也就是要有 swiftc,并授予屏幕录制和辅助功能权限。

日常维护也要考虑:unii 终端默认每天查一次更新,发送版本、操作系统和 CPU 类型,可用 UNII_NO_TELEMETRY=1 关闭。多 worker 部署需要能识别 x-unii-worker 头的代理,计费只对托管服务接好了。安装和配置见 项目说明。

HotRepo 点评

HotRepo 从 2026-10-24 开始记录这个仓库,2026-10-25 在新项目榜(不是总榜)记录到 587 总星、排名 #7。这只是一个五天新项目的两个日期快照,不是每日增长序列,热度能否持续还无法判断。真要依赖它之前,值得先确认 unii 在机器端如何处理屏幕控制和相关权限——README 自己的 bug 警告,对碰宿主机的功能最适用。

本文由 AI 根据项目 README 生成,更新于 2026年10月25日,以项目官方文档为准。