字
字节笔记本
2026年3月13日
anna:永不遗忘的 AI 助手
API中转
¥120
本文介绍 anna,一个自托管的 AI 助手。项目采用创新的 LCM(Lossless Context Management)技术,将所有对话存储在本地 SQLite 数据库中,自动压缩旧上下文但保留完整细节,支持多渠道访问、定时任务、文件监控等功能,是一个真正永不遗忘的 AI 助手。
项目简介
anna 是一个开源的自托管 AI 助手,由单个 Go 二进制文件构成。它可以在你的机器上运行,通过终端、Telegram、QQ 或飞书与你对话。anna 的核心创新是 LCM 技术,能够自动压缩长对话但保留所有原始细节,确保 AI 永远不会"遗忘"之前的对话内容。
核心特性
LCM 无损上下文管理
- 永久记忆:所有对话存储在本地 SQLite 数据库
- 智能压缩:旧消息自动压缩为摘要,组织成 DAG 结构
- 无损恢复:随时可以展开摘要获取完整原文
- 强大检索:支持关键词搜索、元数据检查、内容展开
- 无限对话:可以持续对话数周仍记得第一天内容
多渠道支持
- 终端:本地 TUI(Bubble Tea),逐 token 流式输出
- Telegram:Long polling,无需公网 IP,支持 Draft API
- QQ:WebSocket,原生流式 API,支持群组@
- 飞书:WebSocket,无需公网 IP,支持群组@和编辑
自动化能力
- 定时任务:支持 cron 作业和提醒
- 文件监控:心跳模式监控文件变化
- 智能触发:用快速模型判断,有需要才启动主模型
- 推送通知:跨渠道推送结果
- 持久化:任务在重启后仍然保留
个性化配置
- SOUL.md:定义 AI 的人格和性格
- USER.md:存储用户偏好和设置
- 可编辑:AI 可以编辑这两个文件
- 项目级:支持按项目覆盖配置
- 持续学习:逐渐了解你的名字、时区、偏好
技术架构
text
You
|
| Talk from anywhere
v
Terminal / Telegram / QQ / Feishu
|
v
anna (single binary, your machine)
|
├── LCM Memory (SQLite, DAG-based context compression)
├── Scheduler (cron jobs, reminders, heartbeat)
├── Skills (extensible via skills.sh)
└── Notifications (pushes results back to you)
|
v
LLM Provider (Anthropic / OpenAI / any compatible API)LCM 工作原理
存储结构
text
Messages (SQLite)
↓
Leaf Nodes (summary groups)
↓
Higher-Level Nodes (condensed summaries)
↓
DAG Structure (directed acyclic graph)检索工具
- memory_grep:按关键词搜索消息和摘要
- memory_describe:检查摘要节点的元数据和谱系
- memory_expand:展开摘要获取源内容
优势
当上下文窗口填满时,anna 不是使用截断的历史记录,而是使用压缩的摘要,并可以按需提取具体细节。即使对话长达数千条消息,她仍然能找到所需内容。
安装指南
前置要求
- Go 1.21+(如从源码编译)
- SQLite 3
- LLM API 密钥(Anthropic/OpenAI/兼容 API)
下载预编译二进制
bash
# 下载最新版本
curl -L https://github.com/vaayne/anna/releases/latest/download/anna-linux-amd64 -o anna
chmod +x anna
sudo mv anna /usr/local/bin/从源码编译
bash
git clone https://github.com/vaayne/anna.git
cd anna
go build -o anna
sudo mv anna /usr/local/bin/配置
bash
# 创建工作目录
mkdir -p ~/.anna/workspace
# 配置 API 密钥
export ANTHROPIC_API_KEY="your-key-here"
# 创建 SOUL.md 和 USER.md
cd ~/.anna/workspace
echo "# Anna's personality" > SOUL.md
echo "# User preferences" > USER.md快速开始
终端模式
bash
# 启动 anna
anna
# 开始对话
Hello, Anna! How are you today?
# 使用命令
/new # 开始新对话
/compact # 压缩当前对话
/model # 切换模型
/whoami # 查看当前身份Telegram 模式
bash
# 配置 Telegram Bot
anna --channel telegram --token "your-bot-token"
# 在 Telegram 中与 Bot 对话
# 支持所有终端命令QQ 模式
bash
# 配置 QQ Bot
anna --channel qq --token "your-token"
# 在 QQ 中与 Bot 对话飞书模式
bash
# 配置飞书 Bot
anna --channel feishu --app-id "your-app-id" --app-secret "your-app-secret"
# 在飞书中与 Bot 对话使用示例
场景 1:定时任务
bash
# 对 anna 说
"每天早上 8 点检查北京天气"
# anna 会创建定时任务
"每天下午 2 点 30 分提醒我给牙医打电话"
# 任务持久化,重启后仍然有效场景 2:文件监控
bash
# 配置心跳监控
"监控 /path/to/file.md 每 5 分钟检查一次"
# anna 用快速模型判断是否需要关注
# 只在有实际工作时启动主模型
# 结果推送到所有连接的渠道场景 3:跨渠道对话
bash
# 早上在笔记本终端对话
# 下午在手机上通过 Telegram 继续
# 所有渠道共享相同的会话和记忆场景 4:长期对话
bash
# 持续对话数周
# anna 仍然记得第一天说的话
# 可以随时检索历史内容
# 上下文永不丢失配置文件
SOUL.md
定义 anna 的人格:
markdown
# Anna
You are Anna, a helpful AI assistant.
## Personality
- Friendly and professional
- Concise but thorough
- Proactive in offering help
## Capabilities
- Perfect memory of all conversations
- Can search and retrieve any past discussion
- Schedules tasks and reminders
- Monitors files and sends notificationsUSER.md
存储用户偏好:
markdown
# User Preferences
## Basic Info
- Name: John
- Timezone: Asia/Shanghai
- Language: Chinese
## Preferences
- Response style: Concise
- Code language: Python
- Work hours: 9 AM - 6 PM技术栈
- Go 1.21+ - 核心开发语言
- SQLite - 本地数据存储
- Bubble Tea - 终端 UI 框架
- WebSocket - QQ 和飞书连接
- Long Polling - Telegram 连接
- DAG - 有向无环图组织摘要
渠道特性对比
| 渠道 | 连接方式 | 流式输出 | 群组支持 |
|---|---|---|---|
| Terminal | 本地 TUI | Token 级 | 不适用 |
| Telegram | Long Polling | 是 | @ / 总是 / 禁用 |
| WebSocket | 原生流 API | 支持 @ | |
| 飞书 | WebSocket | 是 | 支持 @ |
通用命令
所有渠道都支持以下命令:
/new- 开始新对话/compact- 压缩当前对话/model- 切换模型/whoami- 查看当前身份- 图片输入支持
- 访问控制
- 模型切换
调度器
创建任务
bash
# 循环任务
"每天早上 8 点检查天气"
# 一次性任务
"下午 2 点 30 分提醒我开会"心跳模式
bash
# 监控文件
"监控 report.md 每 10 分钟"
# anna 会:
# 1. 用快速模型检查文件
# 2. 判断是否需要关注
# 3. 只在有需要时启动主模型
# 4. 推送结果到所有渠道扩展能力
Skills
通过 skills.sh 扩展功能:
bash
# ~/.anna/skills.sh
#!/bin/bash
# 自定义技能
skill_weather() {
curl "wttr.in/$1"
}
skill_calculate() {
echo "$(($1))"
}通知推送
bash
# 推送到所有连接的渠道
anna notify "Task completed: Backup finished"
# 推送到特定渠道
anna notify --channel telegram "Server is down"数据管理
备份
bash
# 备份 SQLite 数据库
cp ~/.anna/data/anna.db ~/.anna/data/backup.db
# 备份工作区
tar -czf anna-backup.tar.gz ~/.anna/恢复
bash
# 恢复数据库
cp ~/.anna/data/backup.db ~/.anna/data/anna.db
# 恢复工作区
tar -xzf anna-backup.tar.gz -C ~/性能优化
- 快速模型:心跳监控使用快速模型判断
- 智能压缩:自动压缩旧对话节省空间
- 按需展开:只在需要时展开摘要
- 本地优先:所有数据存储在本地
- 单二进制:无需额外依赖
隐私和安全
- 本地存储:所有数据在本地 SQLite
- 自托管:完全控制你的数据
- API 密钥:存储在本地,不上传
- 网络通信:直接连接 LLM 提供商
- 无云依赖:不需要第三方服务
应用场景
- 个人助理:管理任务、提醒、日程
- 知识管理:永久记忆所有对话和想法
- 监控告警:文件监控、定时检查
- 多渠道协作:在不同设备间无缝切换
- 自动化工作流:定时任务、条件触发
- 团队协作:共享记忆和上下文
项目链接
- GitHub 仓库:https://github.com/vaayne/anna
- 开源协议:MIT License
分享: