跳至主要内容

產品介紹

Aivory 是一個開源、可自託管的多模型 AI 對話平臺:後端為 Go 1.24 單程序服務,前端為 React 19 單頁應用,兩者打包在同一個容器裡同源提供服務(SPA 與 /api 同域,監聽 :8787)。你可以在自己的伺服器上,用一條 docker compose up -d 獲得一套完整的 AI 工作臺:Claude、GPT、Gemini 及任意 OpenAI 相容模型統一接入,流式輸出、多輪工具呼叫、Python 沙箱、知識庫 RAG、深度研究、團隊工作空間、圖片生成與完整管理後臺全部內建。

Aivory chat with tool calls and reasoning

專案說明
當前版本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
瞭解核心環境變數核心配置 / 進階配置
日常聊天功能一覽對話功能
管理後臺上手管理後臺總覽
疑難速查常見問題