Skip to main content

产品介绍

Aivory 是一个开源、可自托管的多模型 AI 对话平台:后端为 Go 1.24 单进程服务,前端为 React 19 单页应用,两者打包在同一个容器里同源提供服务(SPA 与 /api 同域,监听 :8787)。你可以在自己的服务器上,用一条 docker compose up -d 获得一套完整的 AI 工作台:Claude、GPT、Gemini 及任意 OpenAI 兼容模型统一接入,流式输出、多轮工具调用、Python 沙箱、知识库 RAG、深度研究、团队工作空间、图片生成与完整管理后台全部内置。

项目说明
当前版本2.2.0
开源许可Apache 2.0
代码仓库github.com/hjxwz123/Aivory
官方镜像ghcr.io/hjxwz123/aivory-appghcr.io/hjxwz123/aivory-sandboxghcr.io/hjxwz123/aivory-sandbox-sidecar
服务端口容器内 8787(生产 Compose 默认映射宿主机 80)
依赖栈postgres:16-alpine / redis:7-alpine / qdrant:v1.12.4(均可选,详见下文)
技术栈Go 1.24 + React 19 + TypeScript 5 + Tailwind 4
五分钟上手

如果你已经准备好一台装有 Docker 的服务器,可以直接跳到快速开始,部署完成后按首次运行创建管理员账号并配置第一个模型。

Aivory 有什么不一样

大多数自部署聊天前端只是一层薄代理:把请求转发给模型 API,再把流式文本推回来。Aivory 在几个真正影响日常使用的地方走得更远:

  • 工具是真正的流水线:模型在单条用户消息里最多执行 48 次工具调用(12 个 provider 循环),不同领域的工具可以自由串联。一个工具的产物会自动暂存进沙箱文件系统,供下一个工具直接读取。
  • 对话是树,不是线性日志:编辑历史问题、重新生成回答、换模型重试,每次操作都开一个新分支,通过 < 2/3 > 控件切换,数据库保留完整树形结构。
  • 管理后台改动即时生效:渠道、模型、技能、用户、系统设置全部在管理 UI 里操作,保存后下一次请求立即生效,无需重启进程。渠道 API key 存在数据库里而非环境变量,轮换密钥不用登录宿主机。

核心能力

多渠道多模型聊天

一套 UI 内任意切换 Claude / GPT / Gemini 以及任何 OpenAI 兼容端点。管理员在后台按「渠道(Channel)」维度接入上游(类型:Anthropic / OpenAI / Gemini / OpenAI 兼容,填 Base URL + API Key),再在「模型(Model)」页面创建对用户可见的模型条目,可配置显示名称、图标、定价、vision 能力与工具模式(native / prompt / none)。同一类型可以配置多个渠道。

模型选择器顶部展示管理员定义的标签筛选芯片(如「快速」「多模态」「编程」),选中标签即收窄列表;每条消息记录当次实际使用的模型。详见渠道与模型

流式输出与思考过程

所有模型请求走 streaming,前端通过 SSE 实时接收:打字机式输出、Markdown 渲染、代码高亮、LaTeX 公式。支持思考过程(thinking)的折叠展示,推理型模型的思维链与正式回答分区呈现。配置了 Redis 后还支持流恢复:刷新页面不丢在途回复。

实时多轮工具调用

模型自主决定调用哪些工具、调多少轮,全过程通过 SSE 事件实时推送,用户能看到每一步在做什么。内置八个自建平台工具:

工具功能
web_search通过 SearXNG(自部署)或 Serper 兼容后端进行全文网络搜索
web_fetch抓取指定 URL 并提取正文,遵守 robots.txt 与内容安全过滤
fetch_image把公网图片下载到沙箱 /workspace/uploads/,供后续代码使用
python_execute在隔离沙箱中运行 Python 代码,支持完整标准库、pip 安装、文件 I/O
image_generate调用配置的图像模型生成图片并保存为产物
search_knowledge_base对挂载的知识库执行混合检索(密集向量 + BM25,RRF 融合)
save_memory写入用户记忆库,后续对话自动注入
use_skill执行管理员预定义的技能(提示词模板 + 资产包)

单轮工具调用预算(防滥用与成本失控):

工具普通模式上限深度研究模式
web_search1640
web_fetch1225
fetch_image1612
image_generate84
python_execute168
全工具合计48150

关键机制是自动文件暂存:每次 python_execute 执行前,本对话中用户上传的文件、image_generate 生成的图片、用户可用的技能资产,全部自动就位于沙箱文件系统。因此「分析 data.csv,画一张柱状图,再做成 PPT」这类跨工具工作流可以在一次发送内端到端完成,用户无需任何中间操作。

对不支持原生 function calling 的模型,可按管理员配置回退到提示词拼接协议(提示词模式下 provider 循环上限为 6)。

深度研究

独立的多轮研究引擎:模型先生成研究计划,然后并行发出最多 40 次网络搜索和 25 次页面抓取,对断言做交叉校验,最终产出带引用的完整综述报告,全程有实时进度面板。详见深度研究

Python 沙箱

每个对话拥有独立的沙箱容器(HTTP sidecar 服务):

  • 会话在对话生命周期内持久保存,后续消息可以读取之前轮次写入的文件;容器被回收后自动重建会话、重新暂存文件并透明重试,用户无感知。
  • 代码输出(stdout / stderr / 异常)实时流式回传;写入 /workspace/output/ 的文件成为产物,以下载卡片形式出现在聊天界面。
  • 沙箱默认无网络(SANDBOX_NETWORK=none),需要联网数据时由 web_fetch / fetch_image 在沙箱外抓取后暂存进来。
  • 未配置沙箱地址时,python_execute 进入安全模式,只执行简单算术,适合开发调试与演示。

详见Python 沙箱使用沙箱部署

知识库与 RAG

每个账号可创建多个知识库,支持文本 / PDF / DOCX / XLSX / 图片上传,文档状态全程可跟踪(pending → parsing → embedding → ready)。检索管线包含:

  • 层级化切块:small-to-big,约 12% 重叠,结构感知(代码块、表格、公式整块保留);每个分块带从根到当前位置的标题面包屑。
  • 混合检索:Qdrant 密集向量 + BM25 关键词检索,RRF 融合排序,按相似度动态 Top-K,带引用作答。
  • 查询路由:任务模型在检索前把查询分类为 retrieve / full_doc / none 并改写查询,小文档直接全文注入,不浪费检索开销。
  • MinerU OCR:带文字层的 PDF 在本地毫秒级解析;扫描件 PDF、DOCX、PPTX、XLSX、图片才走 MinerU 云端 OCR。原文件存放在你自己的 S3 / 阿里云 OSS 桶,MinerU 只拿到预签名 URL,凭据不出域。

未配置 Qdrant 时,RAG 自动降级为全文注入,功能仍可用。详见知识库

团队工作空间

在头像菜单创建工作空间,发出邀请链接即可让同伴加入。空间内的对话、项目、知识库对全体成员共享,并与每个人的个人空间完全隔离。任何成员都能续聊任何对话,谁发送谁计费;气泡按作者归属(自己在右,他人与 AI 在左,带头像昵称);创建者可踢人、重置邀请链接、删除整个空间。出于隐私考虑,跨对话记忆在共享工作空间中完全关闭。详见团队工作空间

图片生成

独立绘图模式:提示词先经任务模型润色,再按图片模型逐张计积分;管理员维护风格预设库;生成结果进入个人画廊,支持基于参考图的编辑与变体工作流。每用户每日生成张数可限额(默认 30 张)。详见图片生成

完整管理后台

模块管理内容
渠道各 Provider 的 Base URL + API key,同类型可多渠道
模型启停、显示名、上下文窗口、定价、每模型 UI 控件、深度研究暴露开关、标签
模型标签创建标签并分配给模型,在选择器顶部渲染为筛选芯片
技能提示词模板 + 资产包,经 use_skill 工具调用
用户角色、用户组分配、实时封禁、配额与积分
工作空间钻取成员 / 对话 / 项目 / 知识库,对话可直接查看完整记录
用量按用户、模型、用途(聊天 / 任务 / 图像 / 嵌入)的报表
设置沙箱地址、S3/OSS 凭据、搜索后端、上传白名单、禁用工具、压缩策略等
备份与迁移全量备份导出导入、配置导出导入、向量维护
沙箱检查器浏览和清理指定对话的沙箱工作区文件

所有改动保存即生效,全程无需重启。从管理后台总览开始了解。

备份与迁移

管理后台一键导出完整备份:单个 zip 内含 manifest、每表一个 JSONL(引擎中立)、上传与产物文件、逐 collection 的 Qdrant 向量点位。大库走异步导出任务。导入为整库替换,支持跨数据库引擎:SQLite 备份可以导入 Postgres 部署,反之亦然。另有轻量「配置导出/导入」只搬运渠道、模型、技能等管理资产,不动用户数据。详见备份与迁移

PWA 与多语言

  • 可安装 PWA:支持添加到桌面/主屏,移动端界面完整重做。
  • 五语界面:简体中文、繁体中文、English、日本語、Français,覆盖每一个页面、对话框、Toast 与错误信息,包括管理后台。
  • 明暗双主题,编辑感设计系统。

更多能力

能力说明
对话树编辑/重试开真分支,< N/M > 切换且不打断在途流式;可拖拽缩放的概述节点图;长对话右缘侧边预览条秒级定位
多模型互审(Verify)第二个模型对回答做对抗式事实核查,输出逐句引用与严重级别的结构化 findings 与信任徽章
跨对话记忆每轮异步提取用户事实并自动判定旧记忆失效,用户可在专属页面管理
项目与技能项目容器(共享库 + 项目级指令);管理员技能包运行时渐进加载
长上下文压缩保留最近 N 轮原文,更早轮次由任务模型滚动摘要,前缀缓存友好,不修改原始存档
积分与用户组定时额度 + 永久积分、按模型配额、发送前费用预检、兑换码
安全基线API key 全后端代理、每请求 HMAC 签名、能力令牌分享/邀请、HTML 沙箱预览、上传扩展名与 MIME 白名单、全面限速

架构总览

Aivory 的生产形态是五个容器:app 单容器同时托管前端 SPA 与 /api(同源,无 CORS 问题),其余为数据与执行组件。

容器镜像作用
appghcr.io/hjxwz123/aivory-appGo HTTP + SSE 服务,同源托管前端 SPA
postgrespostgres:16-alpine用户、对话、知识库、设置、用量记录
redisredis:7-alpine缓存、限频计数、队列与流恢复
qdrantqdrant/qdrant:v1.12.4RAG 向量检索
sandboxghcr.io/hjxwz123/aivory-sandbox-sidecar代码执行沙箱(仅内网)
组件皆可裁剪

Redis、Qdrant、沙箱都是可选组件:不配 REDIS_URL 时使用进程内缓存与队列;不配 QDRANT_URL 时 RAG 走全文注入回退;不配 SANDBOX_BASE_URL 时代码执行进入安全模式。数据库默认甚至可以用嵌入式 SQLite,详见 SQLite 模式

为什么选 Aivory

数据自持

所有数据落在你自己的基础设施上:数据库、向量库、上传文件与产物(绑定挂载到宿主机 DATA_DIR 目录,方便直接查看与备份)。模型 API key 存在数据库并全程由后端代理,绝不暴露给浏览器;文档 OCR 场景下 MinerU 只拿到你对象存储的预签名 URL,凭据不出域;共享工作空间中自动关闭跨对话记忆。

单命令部署

docker compose up -d 即完成部署,五个容器全部就绪。前端与 /api 同源,解析到哪个域名哪个域名就能用,不需要配置 PUBLIC_ORIGIN 或 CORS;管理员账号通过首启页面创建而非环境变量预置;此后几乎所有配置(渠道、模型、搜索后端、上传白名单等)都在管理后台实时修改,保存即生效,无需重启。

引擎中立备份

完整备份是一个自描述 zip:每表一个 JSONL,与具体数据库引擎无关。今天用 SQLite 起步,明天可以把同一份备份导入 Postgres 部署(反之亦然),序列与外键自动处理;Qdrant 向量随备份携带,也可以事后从数据库存储的分块文本重建。你的数据永远不会被锁死在某个引擎或某台机器上。

下一步

目标页面
5 分钟部署一套 Aivory快速开始
创建管理员并配置第一个模型首次运行
生产级 Docker Compose 部署Docker Compose 部署
配置 HTTPS 与反向代理反向代理 / Cloudflare
了解核心环境变量核心配置 / 进阶配置
日常聊天功能一览对话功能
管理后台上手管理后台总览
疑难速查常见问题