跳到主要内容

Huddle

Huddle 是一个小型桌面应用,用来和本地智能体对话。对话由实时语音模型负责。当请求需要实际工作时,Huddle 把它交给 ACP 智能体,再把结果送回语音模型朗读出来。

基于 GDK + ACP 构建:使用 goose-providers 的实时提供商接口,由 goose 或其他 ACP 智能体完成被委派的工作。

源码

巧妙之处​

语音对话和干活的智能体分工不同。语音模型负责说话;另一个智能体拥有执行任务所需的工具和上下文。它们不必是同一个模型,也不必运行在同一个进程里。

委派事件会标明它在语音对话中的位置。Huddle 把截至该位置的转录文本转换成智能体的提示词,再把答案返回给对应的委派。干活的智能体忙碌时,请求会排队等待。

这是一个小例子,展示如何把提供商的能力与现有智能体组合起来,而不是为新界面把整套技术栈重做一遍。

工作方式​

  1. webview 采集麦克风音频,并通过 WebRTC 播放响应。
  2. Rust 通过 GDK 启动实时会话,并在它的旁路控制连接上监听转录和委派事件。
  3. 一次委派会变成发给持久 ACP 会话的提示词。
  4. 智能体的结果通过实时提供商连接返回。

在 voice.rs 中, 返回路径使用提供商的委派接口:

let delivery = connection
.send_delegation_update(DelegationUpdate {
provider_delegation_id: delegation_id.clone(),
text: text.clone(),
})
.await?;

转录代码 为每个请求选择上下文。 ACP 客户端 负责管理智能体子进程,并把提示词串行化处理。

自己运行​

你需要 Rust 1.94 或更高版本、具备 GPT-Live 权限的 OpenAI API 密钥、麦克风权限,以及 PATH 中的一个 ACP 智能体。默认是 goose acp。如果使用默认值,需要另外配置 goose 的模型提供商。

在环境中设置好 OPENAI_API_KEY 后:

git clone https://github.com/jamadeo/goose-huddle.git
cd goose-huddle/src-tauri
cargo run

打开 Settings 选择智能体命令和工作目录,然后开始一次 huddle。打包和配置的细节请参阅 README。

原型的权限

Huddle 会自动批准智能体的工具请求,并且可能把 API 密钥保存在浏览器的 local storage 中。请在一次性的工作目录中试用,并使用适合原型的凭据和资源。