2~10 个智能体 · 自主对话 · 开源 MIT

给一群 AI 一个话题
让它们自己聊起来

duet 是一个开源的多智能体自主对话聊天室:为每个智能体配置角色、世界观与关系,它们按顺序自动轮流对话;你在旁边当导演,随时改变话题走向。支持多 Provider 混用、思考档位、独立长记忆与成本统计。

快速开始 查看源码

功能

不只是把几个 AI 连在一起

duet 围绕「多智能体自主对话」构建了完整的编排与治理能力:独立的视角记忆让身份永不混淆,角色 / 关系 / 导演三层注入让对话可控可编排。

对话引擎

👥 2~10 个智能体轮转

A→B→C… 固定顺序自动轮流发言,循环往复。每个智能体可绑定不同的 Provider 与模型——OpenAI 兼容(含 DeepSeek)/ Responses / Anthropic / Gemini 四种协议在同一会话里混用。

🧠 独立视角长记忆

每个智能体维护自己视角的上下文:自己的发言是 assistant,别人的是带名字的 user,物理隔离互不干扰。每 N 轮自动生成第一人称摘要压缩历史,长对话不失忆、不串身份。

流式 · 暂停 · 恢复 · 重试

逐字流式输出,实时围观 AI 发言。随时优雅暂停(不打断当前发言者),重设轮数 / 时长上限后继续;调用失败自动指数退避重试,期间可随时退出。

💭 思考档位

每个智能体可单独设置思考档位(low / medium / high…),按所选模型动态拉取支持的档位,自动映射为各协议的原生推理参数——推理模型即插即用。

编排系统

🎭 角色卡 · 世界观

智能体模板(名字 / 角色描述 / 性格)与世界观模板在设置页集中维护,新建对话全部点选、不手填。常用设定一次保存,处处复用。

🕸 非对称关系图

可视化关系画布:每条连线编辑两份第一人称描述——「A 眼中的 B」与「B 眼中的 A」可以不同,允许误解、暗恋与信息差。关系随会话注入各智能体的角色卡。

🎬 导演指令

以导演身份随时下达干预指令:「让话题转向…」「加入一个冲突…」。可设有效期(永久或 N 轮),以最高优先级注入所有智能体的下一轮上下文,对话进行中热更新。

📖 阅读节奏跟随

AI 聊得比你读得快?翻上去回看历史时,后端自动缓冲几轮、等你回到底部再继续生成——自主对话第一次有了「人类友好的播放节奏」。

工程能力

快速开始

三种方式,任选其一

duet 是本地优先的工具:启动后所有配置(包括 API Key)都在页面里维护,环境变量全部可选。

方式一:npx 一键启动 推荐 · 无需 clone

npx @honlnk/duet

自动拉取并启动,随后自动打开浏览器。建议用 DATA_DIR 指定数据目录,避免会话数据写到包目录:

# 或全局安装后使用
npm i -g @honlnk/duet
DATA_DIR=~/.duet duet-chat

方式二:源码运行

git clone https://github.com/honlnk/duet.git
cd duet
pnpm install
pnpm dev

开发模式前后端分离:前端 http://localhost:5174(热更新),后端 http://localhost:3000(API + WebSocket)。生产模式 pnpm build && pnpm start 单进程托管。

方式三:Docker

docker compose up -d --build

多阶段构建(alpine),非 root 运行,内置健康检查;会话数据与 Provider 配置通过卷(/data)持久化。

首次使用

  1. 配置 Provider

    首次访问会提示未配置。点右上角「Provider」添加第一条:选择协议(OpenAI 兼容 / Responses / Anthropic / Gemini),填 API Key、Base URL、模型名,可点「获取列表」拉取上游模型。第一条自动成为默认。

  2. 创建对话

    选话题(可叠加世界观)→ 从模板点选 2~10 个智能体 → 开始。高级设置里可为每个智能体单独绑定 Provider、思考档位、温度、摘要频率等。

  3. 观看 & 当导演

    A 先发言、B 接力……自动循环。随时点「暂停」优雅停止;底部输入框可下达导演指令(永久 / N 轮有效),下一轮立即生效。右侧面板实时显示轮次、token 与成本。

费用提示:不设上限的「无限对话」会持续产生 API 费用。全局熔断默认 200 轮 / 2 小时兜底,请留意右侧面板的成本统计,及时暂停。

自部署

部署到你的服务器

单 Node 进程即可完整运行(静态前端 + REST API + WebSocket),无需外部数据库。推荐用 Docker Compose 或 pm2 / systemd 守护。

Docker Compose

git clone https://github.com/honlnk/duet.git
cd duet
docker compose up -d --build

或直接 docker run

docker build -t duet .
docker run -d -p 3000:3000 -v duet-data:/data duet

环境变量

全部可选。API Key / 模型 / 价格等凭证不走环境变量,启动后在页面 Provider 面板维护(落盘到 providers.json)。

变量默认值说明
PORT3000服务端口(0 = 自动分配)
DATA_DIRdata/sessions会话数据持久化目录(providers.json 落盘到其父目录)
ABSOLUTE_MAX_ROUNDS200全局硬熔断轮数
ABSOLUTE_MAX_DURATION_SEC7200全局硬熔断时长(秒)
REQUEST_TIMEOUT_MS30000单次 AI 调用超时(毫秒)

安全注意