Skip to content

excing/WebMultiAgentChat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Aithos · Web 多智能体对话应用(WebMultiAgentChat)

Aithos [/ˈaɪ.θoʊs/] = AI + Ethos, 中文名艾索斯, 意为 AI 之人格.

Aithos 是一个轻量、纯前端的多智能体群聊应用。你可以在浏览器里配置多个 AI 角色,将它们拉进同一个群聊里自动对话、轮流发言,甚至让“AI 选择器”根据上下文决定下一位发言者,适合:

  • 多角色 Prompt 设计与调优
  • 多智能体协作交互的概念验证
  • 演示 / 教学场景中的“AI 群聊”展示

整个应用只有一个 index.html,无需构建、无需后端,直接打开即可使用。


功能特性一览

  • 多智能体群聊

    • 左侧:群聊列表(多个场景 / 话题)
    • 右侧:AI 角色列表(可以被多个群聊复用)
    • 中间:对话区,支持 Markdown、自动滚动、置底按钮
  • 自动回复与多种对话模式

    • 轮流固定(round robin):按顺序轮流发言
    • 随机(random):随机挑选下一位 AI 说话
    • AI 决定(ai selector):通过单独的模型,根据上下文选择下一位发言者
  • 细粒度的多智能体“视野 / 权限”控制

    • “我能看见谁 / 谁能看见我”:控制消息对各个 AI 的可见性
    • “视野(消息上下文)”:用表达式描述每个角色能看到的历史片段(如 1,2,8:0-4:-1 等)
  • OpenAI / 兼容接口支持

    • 全局 Base URL + API Key 配置(默认指向官方 OpenAI API)
    • 每个角色可选是否继承全局配置,或使用独立的 Base URL、API Key、模型、温度、最大 tokens
    • 内置模型列表刷新(通过 models.list 自动拉取)
  • TTS 文本朗读集成(可选)

    • 全局 TTS 配置:Base URL、API Key、Voice、Style、Rate、Pitch、Format
    • 每个角色可覆盖或继承全局 TTS 配置
    • 配合一个兼容 Microsoft Azure Speech 的后端即可使用
    • 本仓库提供了配套文档:tts-api-doc.md
  • 智能 UI 与良好交互

    • 消息置底按钮 + 自动滚动逻辑:输入时强制置底,阅读历史时不打断
    • 消息悬停工具条:复制 / 导出 等操作
    • 输入框支持 @角色名 智能提示与补全
    • 模态框头部 / 底部固定,超长内容滚动区域独立
  • 数据本地持久化

    • 所有群聊、角色、全局配置、界面偏好等都保存在浏览器 localStorage
    • 不依赖任何后端数据库
    • 清除浏览器缓存 / 本地存储会清空数据
  • 响应式布局

    • 桌面端:双侧栏 + 中间对话区域
    • 移动端:侧栏默认收起,有遮罩层,支持单侧打开 / 关闭
    • 侧栏展开状态会记忆在 localStorage

在线体验

  • 访问:https://aithos.pages.dev
  • 推荐浏览器:最新版 Chrome / Edge / Safari / Firefox
  • 建议在桌面端体验完整的多智能体配置与高级功能

快速开始(本地运行)

方式一:直接打开

  1. 克隆或下载仓库代码
  2. 在文件管理器中双击打开 index.html(或右键用浏览器打开)
  3. 即可在本地开始配置与使用

注意:部分浏览器在 file:// 协议下对模块导入有安全限制,如遇报错,建议使用方式二。

方式二:本地静态服务器

只要能够提供静态文件服务即可,推荐用 Python 自带的 HTTP 服务:

cd WebMultiAgentChat
python3 -m http.server 8080

然后在浏览器中访问:

http://localhost:8080

项目结构

WebMultiAgentChat/
├─ index.html                  # 主页面(应用入口 & 所有逻辑)
├─ __index_backup__.html       # 旧版本备份
├─ __index2_backup__.html      # 另一份备份
├─ test-markdown-punctuation.html  # Markdown 标点修复函数测试页
├─ tts-api-doc.md              # TTS 后端 API 文档(Microsoft Azure 语音服务)
├─ AGENTS.md                   # 面向 Agent 的说明文档(本项目的 Agent 规范)
└─ README.md                   # 本说明文件

使用说明

1. 初次配置:用户与全局 API

首次打开页面时,建议先进行“用户设置”:

  1. 点击左下角的「设置」按钮,打开“用户设置”模态框
  2. 在“用户昵称”中填入你的显示名称
  3. 在“全局 API 配置”中填入:
    • Base URL:如 https://api.openai.com/v1 或你的兼容服务地址
    • API Key:你的密钥(保存在浏览器本地)
    • 模型:选择默认模型(如 gpt-4o / gpt-3.5-turbo 等)
    • 如需获取完整模型列表,可以在角色或群聊设置中点击“刷新模型”

安全提示:应用通过浏览器直接调用接口(dangerouslyAllowBrowser: true),请在可信环境中使用你的 API Key。若使用自建的兼容网关,请格外注意网关的访问控制。

2. 创建 AI 角色(右侧栏)

  1. 点击右侧栏中的「新建角色」按钮

  2. 在弹出的“角色设置”中填写:

    • 角色名称(必填):会显示在消息头部
    • 角色定位:一句话描述身份,如“产品经理”、“安全顾问”等
    • 系统提示词(必填):详细描述性格、边界、说话风格等
    • 头像颜色:用于区分不同角色的消息气泡颜色
  3. 配置 API 行为:

    • 勾选 / 取消勾选「使用全局配置」
    • 若不使用全局配置,可为此角色单独设置:
      • Base URL
      • API Key
      • 模型(可点击“刷新”加载模型列表)
      • Temperature 与 Max Tokens
  4. 可选:配置 TTS(语音朗读)行为:

    • 使用全局 TTS 配置,或单独设置 TTS Base URL / API Key / Voice / Style 等
  5. 高级:JSON ⇄ Markdown 导入导出

    • “导入 JSON 到提示词”:将任意 JSON 扁平化为 Markdown 列表并追加到提示词末尾,适合把一个配置/知识结构快速附加给角色
    • “导出为角色 JSON”:
      • 完全导出:包含当前表单所有字段(包括敏感信息)
      • 导出(不包括敏感信息):剔除 API Key 等
      • 仅导出角色提示词

角色配置保存在浏览器 localStorage,刷新页面不会丢失。

3. 创建群聊(左侧栏)

  1. 点击左侧栏中的「创建群聊」按钮

  2. 在“群聊设置”中填写:

    • 群聊名称(必填)
    • 群聊描述(选填)
    • 选择参与的 AI 角色(至少一个)
  3. 可配置自动回复:

    • 勾选「自动回复」后,可选择模式:
      • 轮流固定(round_robin):参与角色按顺序轮流发言,最多 N 轮
      • 随机(random):每轮随机挑选不同角色,避免连续同一个
      • AI 决定(ai_selector):使用一个“选择器模型”,根据最近对话为下一轮选择合适的角色
    • “最大自动回复轮数”:控制一次自动流程最多运行多少轮
  4. 保存后,群聊会出现在左侧列表中,选中即可进入对话。

4. 对话与自动回复

  • 在底部输入框中输入内容回车或点击“发送”即可发消息
  • 输入框中输入 @ 会弹出当前群聊内角色列表,可快速 @角色名 指定或提示下一位发言者
  • 若开启“自动回复”,发送后会自动触发多轮 AI 互动:
    • 轮流模式:按顺序逐个角色回复
    • 随机模式:随机选择,避免重复
    • AI 决定模式:通过单独的选择器模型构造一个多轮“谁说话”的控制流

在没有新输入内容但已有正在运行的自动回复时,再次点击发送按钮会变成“停止”按钮,用于中止当前自动流程。


高级特性

多智能体视野与可见性

对于每个“群聊内的角色”,都可以在角色设置中打开“权限(仅当前群聊)”,配置:

  1. 我能看见谁(iCanSee)

    • all:能看到群内所有其他角色的消息
    • none:完全看不见其他 AI(只能看到用户)
    • 自定义列表:只看到某几个指定角色
  2. 谁能看见我(canSeeMe)

    • all:我的消息对所有角色可见
    • none:我的消息只对用户可见
    • 自定义列表:仅对部分角色可见
  3. 视野(消息上下文)

    • all:默认看到所有历史消息
    • 最近 N 条:只看最近几条非系统消息
    • 自定义规则:用表达式描述可见消息索引,例如:
      • 1,2,8:0
      • -4:-1
      • 9:
      • :0
      • 1,3,-2

系统会根据这些设置,在真正调用模型前构造该角色的“可见历史”,作为其上下文。

AI 选择器(ai_selector 模式)

当群聊的自动回复模式选择「AI 决定」时:

  1. 系统会为群聊中的所有候选角色构造一个列表(姓名、角色)
  2. 从最近的若干轮对话中,提取用户与各角色的发言,整理成一段“对话记录”
  3. 通过一个“选择器模型”(可单独指定,也可使用全局模型)发送一条系统消息,要求它返回下一位发言者的名字"STOP"
  4. 若返回有效角色名,则让该角色进行一次回复;若返回 "STOP",则结束自动流程

相关逻辑都在浏览器端运行,仅通过 API 与模型交互。


TTS 文本朗读集成

本项目支持将文本转换为语音播放,但自身不包含后端服务,需要你提供一个兼容的 TTS 接口。

推荐搭配仓库:https://github.com/zuoban/tts
本仓库已附带详细 TTS API 说明:tts-api-doc.md,包含 /tts/v1/audio/speech/voices/reader.json 等接口定义。

配置步骤示例:

  1. 打开“用户设置”

  2. 在「TTS 语音朗读(全局)」部分填写:

    • TTS Base URL:你的 TTS 服务地址,例如 https://your-domain.com
    • TTS API Key:后端约定的认证方式(一般对应 api_keyAuthorization: Bearer
    • Voice / Style:可通过“刷新”按钮从后端拉取可选语音列表
    • Rate / Pitch / Format:根据后端支持在 -100~100 范围内调整语速、音调及输出格式
  3. 在角色设置中勾选“使用全局配置”或配置角色自己的 TTS 参数


数据存储与隐私

  • 所有数据(包括用户昵称、全局/角色配置、群聊列表、消息历史、侧栏展开状态等)都保存在 浏览器本地的 localStorage
  • 应用本身不提供任何服务器端数据存储逻辑
  • 清除浏览器缓存 / 本地存储会导致所有配置与聊天记录丢失,请注意备份(例如导出角色 JSON)
  • 若你在公共设备上使用,请注意清理浏览器数据,以避免泄露 API Key 等敏感信息

开发与二次定制

本项目刻意保持极简形态,方便直接修改与二开:

  • 技术栈

    • 纯 HTML + CSS + 原生 JavaScript(模块脚本)
    • 使用 CDN 引入:
      • openai@6.x JavaScript SDK
      • Vditor(用于 Markdown 渲染与预览)
  • 主要文件

    • 所有 UI + 逻辑聚合在 index.html
    • test-markdown-punctuation.html 用于测试 Markdown 标点修复函数(如 **hello,****hello** ,
    • AGENTS.md 描述了项目中 Agent 的行为/规范(更多偏向对“AI 助手本身”的约束)
  • 本地开发建议

    • 使用浏览器开发者工具观察 localStorage 中的存储结构
    • 如需拆分为多文件或加入打包工具(Vite / Webpack 等),建议:
      • 先将 <script> 中的逻辑抽离为独立 .js 模块
      • 再在 HTML 中通过打包后的入口文件引入

常见问题(FAQ)

Q:为什么需要在前端页面里填 API Key?它安全吗?
A:应用通过浏览器直接调用 OpenAI 或兼容服务的 API,为了不引入后端,必须在前端持有 Key。Key 会保存在本地 localStorage 中,不会上传到本仓库或其他服务器。但这意味着:

  • 你应仅在可信设备与网络环境中使用
  • 如果使用官方 OpenAI Key,请避免在公共电脑上长期保存
  • 更推荐在自己控制的 API 网关上使用“临时 / 限权 Key”

Q:能否使用非 OpenAI 的大模型服务?
A:可以,只要它提供了 OpenAI 兼容接口(如 POST /v1/chat/completionsGET /v1/models 等),你就可以在“全局 API 配置”或角色配置中改成对应的 Base URL 和模型名称。


Q:聊天记录丢失了怎么办?
A:本项目不会自动上传或远程备份数据,若浏览器清除缓存、本地存储,或在隐身模式下使用,数据都会随之消失。
目前主要的手动备份方式是 导出角色 JSON,后续若你有需求,可以自行扩展“导出全部群聊/消息”的功能。


贡献与反馈

欢迎通过以下方式参与项目:

  • 提交 Issue:反馈 Bug、提出新功能建议、讨论多智能体玩法
  • 提交 Pull Request:UI 改进、交互优化、模型集成增强、文档补充等

在提交 PR 前,请尽量确认:

  • 基本功能可用,没有明显的控制台报错
  • 新增或修改的 UI 与现有风格保持一致
  • 不在前端代码中硬编码真实的 API Key 或其他敏感信息

许可协议

MIT

About

一个支持定义多个角色的 AI 群聊 Web APP

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages