ByteNoteByteNote

字节笔记本

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 notifications

USER.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本地 TUIToken 级不适用
TelegramLong Polling@ / 总是 / 禁用
QQWebSocket原生流 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 提供商
  • 无云依赖:不需要第三方服务

应用场景

  • 个人助理:管理任务、提醒、日程
  • 知识管理:永久记忆所有对话和想法
  • 监控告警:文件监控、定时检查
  • 多渠道协作:在不同设备间无缝切换
  • 自动化工作流:定时任务、条件触发
  • 团队协作:共享记忆和上下文

项目链接

分享: