跳到主要内容

频道和语音

Anda 可以只待在终端里,也可以接入团队频道。频道会把上下文带回同一套运行时和记忆系统。

支持的频道

  • Telegram
  • WeChat
  • Discord
  • Lark / 飞书

频道配置位于 ~/.anda/config.yamlchannels 下。

多用户

一个 daemon 可以让多个可信用户通过同一个 Anda agent 接入。先创建用户 key,再在 channel 条目的 user 中引用该 id。未配置 user 时,该 channel 使用操作系统安全凭证库里的本地 owner 身份。

anda user create alice
anda user list

命令会把新用户的公钥写入顶层 users,并把匹配的私钥保存到 ~/.anda/credentials/ 下的本地加密凭证库。凭证文件里是加密的 COSE Key,加密密钥从本地 daemon 身份密钥派生。如果明确需要文件 key,请使用下面的 anda user export

在 Linux 上,如果没有可用或已解锁的 Secret Service provider,Anda 会把 daemon/owner 身份 fallback 到 ~/.anda/keys/ 下的私钥文件,并在终端和日志中显示提醒。只要 daemon 身份密钥能被加载,可信用户私钥仍会保存在本地加密凭证库中。若要为 daemon/owner 身份使用 Secret Service,请在用户 D-Bus session 中启动并解锁 provider,例如运行 gnome-keyring-daemon --start --components=secrets,确认 Anda 进程能拿到 DBUS_SESSION_BUS_ADDRESS,然后重启 Anda;KDE 用户也可以解锁 KWallet。

如果需要把已有身份私钥导出到文件,使用 anda user export。身份可以是 daemonownerdefault 或可信用户 id:

anda user export daemon --key-path ./anda-daemon.key
anda user export owner --key-path ./anda-owner.key
anda user export alice --key-path ./alice.key

导出的私钥文件不要放进代码仓库或共享目录。

配置仍是这样:

users:
- id: alice
pubkey: "ALICE_ED25519_PUBLIC_KEY"
- id: ops
pubkey: "OPS_ED25519_PUBLIC_KEY"

Telegram 示例

channels:
telegram:
- id: personal
user: alice
bot_token: "YOUR_TELEGRAM_BOT_TOKEN"
username: "YOUR_TELEGRAM_BOT_USERNAME"
allowed_users:
- "*"
mention_only: false

WeChat 示例

channels:
wechat:
- id: personal
user: alice
# 留空时,可以运行 anda channel init wechat,扫码登录并获得 token。
bot_token: ""
username: anda-wechat
allowed_users:
- "*"

Discord 示例

Discord 使用 bot token 和 Gateway 连接。先创建并安装 bot,再改 config.yaml

  1. 打开 Discord Developer Portal,创建或打开你的 app。
  2. 在 app 的 Bot 页面复制或重置 bot token。同时在 Privileged Gateway Intents 下打开 Message Content Intent,这样 Anda 才能读取普通消息正文。
  3. Installation 页面,让 Guild Install 包含 bot scope。没有 bot scope 时,app 可能会出现在 Discord Apps 里,但不会作为服务器 bot 成员出现。
  4. 至少授予 View ChannelsSend MessagesRead Message History。如果要让 Anda 发送文件,加 Attach Files;如果 ack_reactions: true,加 Add Reactions
  5. 把 app 安装到你的服务器。服务器安装成功后,bot 应该会出现在服务器成员列表里。
channels:
discord:
- id: server
user: ops
bot_token: "YOUR_DISCORD_BOT_TOKEN"
username: anda-discord
# 可选。限制这个条目只处理一个 Discord 服务器。
guild_id: "YOUR_DISCORD_GUILD_ID"
allowed_users:
- "YOUR_DISCORD_USER_ID"
mention_only: true
ack_reactions: true

配置校验层面只有 bot_token 是必填。为了实际可用并更安全,建议把 allowed_users 设为 Discord 用户 ID;当 allowed_users 为空且 allow_external_users: false 时,非 allowlist 发送者会被忽略。只有确实要让不可信外部用户以 $external_user 身份对话时,才设置 allow_external_users: true

保存配置后运行:

anda channel list
anda restart

在服务器频道里,@ 这个 bot:

@anda-discord 总结一下这个讨论

在 bot 私信里,直接发送普通消息即可,不需要 @。如果看不到 bot,先确认 Guild Install 包含 bot scope,并确认 daemon 正在运行。

Lark / 飞书示例

channels:
lark:
- id: work
user: ops
app_id: "cli_xxx"
app_secret: "YOUR_APP_SECRET"
platform: feishu
receive_mode: websocket
mention_only: true

频道安全检查

  • allowed_users 决定谁能触发 Anda;只有可接受开放访问时才使用 "*"
  • user 决定这个 channel 条目的会话、资源和记忆由哪个可信 Anda caller 拥有。
  • Telegram 和 Discord 通常需要 bot_token
  • WeChat 可以使用已保存 token,也可以在 bot_token 为空时走扫码登录。
  • Lark / 飞书需要 app_idapp_secret;飞书端点使用 platform: feishu
  • 频道路由会被持久化,方便后续回复回到原线程、房间或联系人。

语音输入和播放

语音输入需要配置 transcription.enabled: true。启动一次语音会话:

anda voice --record-secs 8

如果还希望 Anda 播放回答,需要配置 tts.enabled: true。只需要麦克风输入和文字输出时:

anda voice --record-secs 8 --no-playback

音频附件也可以在转写启用后进入上下文,这让频道里的语音消息可以成为同一条记忆线索的一部分。