站點設定與內容稽核
本頁覆蓋管理後臺裡"面向全站"的運營配置:全域性設定頁的每一項開關,以及公告、登入方式、技能、語音轉寫、上傳限額、沙箱回收這些分散在各標籤頁的站點級配置,最後是內容稽核體系。所有設定都儲存在資料庫的 settings 表中,點選「儲存」後對後續請求即時生效,無需重啟容器。
進入方式:管理後臺左側「系統」選單,預設落在「全域性設定」標籤(路徑 /admin/settings)。本頁涉及的其他標籤頁會在各節標註路徑。
全域性設定(系統 > 全域性設定)
模型指定
| 欄位 | 預設 | 說明 |
|---|---|---|
| 預設對話模型 | (空) | 新使用者與新會話的初始模型。全新部署必須先在渠道與模型裡建好模型再回來指定 |
| 任務模型(內部 LLM 呼叫) | (空) | 用於標題生成、查詢路由、壓縮摘要、記憶抽取等內部小呼叫,建議指定一個便宜快速的模型 |
| 圖片提示詞模型 | 無 | 繪圖前潤色提示詞的文本模型,選「無」則跳過潤色、按確定性規則拼接 |
| 審校(審計)模型 | 無 | 審校模式下核查答案的第二個模型,理想是與主模型不同廠商的強模型;選「無」則全站關閉審校模式 |
| 兜底模型 | 關閉 | 所選模型在「首字超時」秒數內毫無輸出時,切斷上游改用它回答,使用者無感、介面仍顯示原模型 |
| 首字超時(秒) | 0 | 與兜底模型配套,0 = 關閉。僅在首個 token 之前觸發,已開始輸出的回覆絕不切換 |
長上下文壓縮
對話超長時,系統用任務模型把較早的輪次滾動壓縮成摘要,近期輪次逐字保留,從而控制每輪的輸入 token 成本。
| 欄位 | 鍵 | 預設 | 說明 |
|---|---|---|---|
| 啟用壓縮 | compaction_enabled | 開 | 總開關 |
| 保留最近輪數 | keep_recent_rounds | 6 | 摘要永遠不吞掉最近這幾輪,它們逐字傳送 |
| 超過多少 token 時壓縮 | compaction_token_trigger | 32000 | 整個提示(系統提示 + 工具定義 + 歷史 + 本輪注入的檔案內容)超過該 token 數才觸發壓縮;0 = 關閉 token 觸發 |
| 摘要 token 預算 | summary_max_tokens | 8192 | 壓縮摘要本身的輸出上限 |
幾個行為要點:
- 摘要生成預設非同步進行,不阻塞當前回覆的首字;只有上下文嚴重超標(真實計數超過閾值 1.25 倍)時才會在當輪內聯壓縮,把本輪提示立即壓下去。
- 觸發器統計的是真正會發送的內容,包含本輪臨時注入的 RAG / 檔案文本。
- 壓縮呼叫以「上下文壓縮」用途計入用量報表,費用記在觸發壓縮的傳送者名下。
壓縮只能縮減較早的對話輪次。上傳的檔案內容是每輪臨時注入提示的,壓縮永遠縮不掉它;大檔案的成本應該在「能力 > 文件」頁用 RAG 全文閾值和 Top-K 引數控制(只注入相關切塊),而不是調低壓縮閾值。
註冊與賬號門檻
| 欄位 | 鍵 | 預設 | 說明 |
|---|---|---|---|
| 開放新註冊 | signup_open | 開 | 關閉後新使用者無法自行註冊,管理員仍可在使用者頁手工建號 |
| 註冊需要驗證碼 | register_captcha_required | 關 | 開啟後註冊前彈出滑塊拼圖驗證。驗證通過簽發一個 10 分鐘有效的簽名通行 token,註冊請求攜帶它提交,多副本部署與服務重啟都不影響 |
| 單 IP 每日註冊上限 | register_ip_daily_limit | 0 | 同一 IP 每天最多建立的賬號數,0 = 不限制。這是比驗證碼更硬的反批次註冊閘 |
| 要求郵箱驗證 | email_verification_required | 關 | 開啟後新註冊使用者需輸入傳送到郵箱的 6 位驗證碼才能登入;輸滿 6 位自動提交。同一郵箱連錯 5 次驗證碼即作廢,需重新發送 |
| 允許註冊的郵箱域名 | email_domain_whitelist | (空) | 逗號分隔,僅列出的域名可註冊;留空允許所有域名 |
郵件(SMTP)
用於傳送郵箱驗證碼和密碼重置郵件。
| 欄位 | 預設 | 說明 |
|---|---|---|
| SMTP 伺服器 | (空) | 如 smtp.qq.com、smtp.163.com、smtp.gmail.com |
| 埠 | 587 | 587(STARTTLS)或 465(TLS) |
| 使用者名稱 | (空) | SMTP 登入賬號 |
| 密碼 | (空) | 授權碼或 API Key,儲存後介面顯示為掩碼 |
| 發件人地址 | (空) | 收件人看到的發件人,留空使用使用者名稱 |
| 直連 TLS(465 埠) | 關 | 465 埠開啟;587 走 STARTTLS,保持關閉 |
「要求郵箱驗證」依賴這套 SMTP 配置發碼。如果 SMTP 尚未配置或配置錯誤,新註冊使用者將收不到驗證碼、無法完成登入。建議先用一個測試賬號跑通註冊驗證流程,再對外開放。
每日限額與積分預檢
| 欄位 | 鍵 | 預設 | 說明 |
|---|---|---|---|
| 每日訊息上限 | daily_message_limit | 200 | 每使用者每天(UTC 自然日)可傳送的訊息數,計數器在 UTC 午夜清零;0 = 不限制 |
| 每日圖片上限 | daily_image_limit | 30 | 每使用者每天可生成的圖片張數,繪圖模式與聊天中呼叫圖片工具共用同一額度池 |
| 預估並攔截餘額不足的請求 | credit_preflight_enabled | 開 | 見下 |
積分預檢的語義:對走積分扣費(非免費額度)的回合,系統在裝配好真實請求(系統提示 + 工具定義 + 含 RAG / 檔案注入的完整歷史)之後、呼叫模型之前,估算輸入 token 並預留固定 2000 token 輸出,按積分匯率換算成預計積分;若超過使用者當前可用餘額(時效積分 + 永久積分),直接以「積分不足」拒絕,不產生任何上游呼叫與扣費。積分系統未啟用(匯率為 0)時該檢查自動跳過。更細的按模型 / 按使用者組額度與積分體系見使用者、配額與積分。
公告(系統 > 公告)
公告頁(/admin/announcement)管理兩種相互獨立的通知形態,共用一次「儲存」。
彈窗公告
| 欄位 | 說明 |
|---|---|
| 顯示公告 | 總開關,關閉後不顯示彈窗 |
| 文字 | 公告正文,支援 HTML,換行用 <br>;渲染前經過服務端白名單消毒 |
| 圖片(可選) | 貼上連結或直接上傳 PNG/JPG。服務端硬限 256 KB,前端會先把大圖自動壓縮(最長邊縮到 1280px、JPEG 逐級降質到約 240 KB 以內)再上傳;配置了圖片即為"圖片公告",彈窗內圖左文右 |
| 記住使用者的關閉 | 預設開。關閉該項後,公告每次訪問都會再次彈出 |
每次儲存都會更新公告版本號:已經關閉過舊公告的使用者,會在下次載入時重新看到編輯後的內容。
置頂公告條
主介面最頂部的一條細橫幅,與彈窗公告互相獨立:
- 「啟用置頂公告條」開關 + 單行 HTML 內容,支援
<a href="...">連結</a>,建議保持簡短。 - 使用者可以手動關閉公告條,關閉狀態按內容版本記憶:只有公告條自身內容變化時才會重新彈給已關閉的使用者,只改彈窗公告不會打擾他們。
- 編輯區下方有即時預覽。
登入方式(系統 > 登入方式)
OAuth 提供商管理頁(/admin/oauth)配置第三方登入。配置並啟用後,登入頁出現對應按鈕;使用者也可以在「設定 > 賬戶」把第三方賬號繫結到已有賬號。
提供商型別與欄位
內建三種品牌型別只需要客戶端憑據,自定義 OIDC 需要補全端點:
| 型別 | 必填欄位 | 說明 |
|---|---|---|
| Client ID、Client Secret | 在 Google Cloud 的「憑據」頁建立 OAuth 客戶端 | |
| GitHub | Client ID、Client Secret | 在 GitHub 開發者設定的 OAuth Apps 裡建立 |
| Apple | Client ID(Services ID)、私鑰(.p8)、Team ID、Key ID | 在 Apple Developer 建立 Services ID 與 AuthKey |
| 自定義(OAuth2 / OIDC) | Client ID、Client Secret、授權地址、令牌地址、使用者資訊地址、Scopes | Scopes 空格分隔,留空用預設(如 openid email profile);可自定義按鈕圖示 |
通用欄位:按鈕文字(登入頁顯示的名稱)、啟用開關(停用後登入頁不再顯示該按鈕,已通過它建立的賬號仍可用密碼或其他方式登入)。編輯已有提供商時 Client Secret 留空表示保留原金鑰。
回撥地址(Redirect URI)
每個提供商儲存後,編輯彈窗頂部會生成需要登記到第三方控制台的回撥地址,格式為:
https://你的域名/api/auth/oauth/<提供商ID>/callback
旁邊有一鍵複製按鈕。新建提供商時要先儲存才會生成該地址(ID 由系統分配)。第三方控制台裡登記的回撥必須與它完全一致,否則授權跳轉會被拒絕。
站點繫結多個域名而第三方只允許登記一個回撥地址時,用環境變數 OAUTH_CALLBACK_BASE_URL 固定回撥域名、OAUTH_RETURN_ORIGINS 列出允許跳回的其他域名,詳見核心環境變數。單域名部署不需要設定這兩項。
繫結與衝突規則
- 同一個第三方賬號(同一 provider + subject)只能歸屬一個本地賬號:它已經登入或繫結過賬號 A,賬號 B 再嘗試繫結會報衝突,絕不覆蓋改派。
- 沒有設定過密碼、且只剩最後一條第三方身份源的賬號,不允許解綁(防止把自己鎖在門外)。
技能管理(能力 > 技能)
技能(/admin/skills)是一段可複用的任務說明加可選的指令碼 / 模板資產,模型在相關任務時按需載入。
| 欄位 | 說明 |
|---|---|
| 名稱 | 技能名,不可與現有技能重名 |
| 何時使用(一句話) | 注入系統提示索引的觸發描述,直接決定模型的召回率,要寫成明確的觸發條件 |
| 完整指令(Markdown) | 技能正文,即 SKILL.md 主體 |
| 從 SKILL.md 匯入 | 貼上帶 YAML frontmatter 的 SKILL.md,點「解析並填充」自動填充名稱 / 描述 / 指令 |
| 資產(模板 / 指令碼) | 可選檔案,技能被載入時拷入沙箱 /workspace/skills/<名稱>/ 供 Python 執行使用 |
| 啟用 | 停用的技能不注入索引、不可被載入 |
資產上傳的限制:單檔案 20 MB 上限;副檔名白名單隻收 Office 模板(pptx/docx/xlsx)、常見資料與文本格式(pdf/csv/tsv/json/txt/md)、指令碼(py/html/css)和常見圖片,不接受壓縮包。
技能建好後還需要繫結到模型:在模型編輯頁(僅對話模型)勾選該模型支援的技能。執行時採用漸進式披露,系統提示裡只注入每個已繫結技能的一行索引(名稱 + 何時使用),模型判斷相關時呼叫 use_skill 工具獲取完整指令並拷入資產;不支援工具呼叫的模型則把勾選技能的完整指令直接內聯進系統提示,這類模型建議少勾技能。
系統內建一個名為 document-generation 的程式碼級技能(PDF/PPT/DOCX 生成配方),不在技能列表裡、無法刪除。如果建立一個同名的管理員技能,它會遮蔽內建版本,可用於定製文件生成行為。
語音轉寫(能力 > 語音)
語音頁(/admin/audio)配置輸入框麥克風的語音轉文字,走 OpenAI 相容的轉寫介面。
| 欄位 | 預設 | 說明 |
|---|---|---|
| 轉寫模型 | whisper-1 | 作為 model 欄位發給上游 |
| Base URL | https://api.openai.com | 可指向任意 OpenAI 相容的音訊端點,後端拼接為 {Base URL}/v1/audio/transcriptions |
| API Key | (空) | 上游 Bearer 金鑰。留空即停用語音輸入 |
限流與限制(轉寫走管理員的上游賬號計費,這些護欄防濫用):
| 限制 | 值 |
|---|---|
| 單段音訊大小 | 25 MiB |
| 每使用者請求頻率 | 20 次 / 分鐘,超出返回 429 |
文件上傳大小(能力 > 文件)
文件頁(/admin/documents)中與上傳大小相關的兩項,圖片與非圖片分開設定:
| 欄位 | 鍵 | 預設 | 說明 |
|---|---|---|---|
| 圖片大小上限(MB) | max_image_upload_mb | 5 | 超限圖片在上傳時被 413 拒絕。0 = 預設(5 MB) |
| 檔案大小上限(MB,非圖片) | max_file_upload_mb | (空) | PDF、DOCX、CSV 等非圖片檔案的上限。0 或留空 = 回退到伺服器上傳上限 |
環境變數 MAX_UPLOAD_BYTES(預設 50 MB)是絕對上限:管理員在這裡只能收緊、不能放寬,見核心環境變數。前端在使用者選擇檔案時就按這兩個值預檢並提示,不發起無效上傳;服務端在寫盤前後各校驗一次。凡是通過上傳校驗的圖片,聊天時都會完整內聯給視覺模型,不會再被靜默丟棄。
同頁還有允許上傳的副檔名白名單;常見圖片格式(png/jpg/jpeg/gif/webp/bmp/tiff/heic/avif 等)無條件放行,白名單隻約束文件 / 程式碼 / 資料類檔案。
沙箱回收與儲存後端
沙箱連線與執行引數在「能力 > 工具」頁,歸檔儲存在「能力 > 文件」頁。整體機制與部署細節見沙箱部署。
回收(能力 > 工具)
| 欄位 | 鍵 | 預設 | 說明 |
|---|---|---|---|
| 執行超時(秒) | sandbox_exec_timeout_sec | 120 | 單次程式碼執行的最長秒數,範圍 10 到 600 |
| 閒置回收(秒) | sandbox_idle_ttl_sec | 1800 | 沙箱容器閒置這麼多秒後被回收,範圍 60 到 86400。回收前會先把 /workspace 打包歸檔 |
歸檔以會話 ID 為鍵:同一對話下次再執行程式碼時,新容器會自動恢復上次的工作區檔案,回收對使用者透明。管理員在會話檢視頁可以「清空沙箱」,這是真正的抹除,連歸檔一起刪除、不會被恢復找回。
儲存後端(能力 > 文件)
| 欄位 | 說明 |
|---|---|
| 儲存型別 | 本機磁碟(預設)/ Amazon S3 或相容 / 阿里雲 OSS / 停用 |
| 物件字首 | 歸檔物件 Key 字首,如 workspaces/ |
| 歸檔清理(天) | 預設 30。超過該天數未再活躍的歸檔自動刪除,0 = 永久保留;活躍對話每次回收都會重新整理時間戳,不會被誤刪 |
- 本機磁碟:零配置持久化,歸檔寫入沙箱服務掛載的卷(
SANDBOX_LOCAL_STORAGE_DIR)。僅適用於單節點;MinerU 文件解析仍需要物件儲存(本機模式不支援預簽名 URL)。 - S3 相容:Bucket / Region / Endpoint / Access Key / Secret Key。MinIO、Ceph 等自建物件儲存填自定義 Endpoint 即可用。
- 阿里雲 OSS:Bucket / Endpoint / AccessKey ID / AccessKey Secret。
內容稽核
內容稽核分兩級配置:是否審、用哪種模式是每個模型自己的開關(模型編輯頁);關鍵詞表、稽核模型、違規型別、攔截文案是全域性素材,在「系統 > 內容稽核」頁(/admin/moderation)維護。
全域性配置項
| 欄位 | 鍵 | 預設 | 說明 |
|---|---|---|---|
| 違規關鍵詞 | moderation_keywords | (空) | 每行一個,命中即攔截 |
| 稽核模型 | moderation_model_id | 未選擇 | 「模型」模式下做放行 / 攔截判定的對話模型 |
| 違規型別 | moderation_categories | politics、pornography、violence or gore、terrorism、illegal activity、hate speech、self-harm | 每行一個類別,僅「模型」模式使用 |
| 攔截提示語 | moderation_message | Your message was blocked by content moderation. Please rephrase and try again. | 攔截時展示給使用者的文字,可改成任何語言的自定義文案 |
關鍵詞模式
對使用者訊息做兩路匹配:一路小寫子串匹配,一路歸一化匹配(把常見字元替換摺疊回字母,如 0→o、1→i、3→e、4→a、5→s、7→t、@→a、$→s,並去掉標點與空格),能擋住最簡單的變體規避。任一路命中即攔截並返回攔截提示語。
模型模式
把使用者訊息發給指定的稽核模型做零上下文分類,要求只回答一個詞(ALLOW 或 BLOCK)。配置了違規型別時,分類提示會明確列出這些類別、只按類別判定;未配置則用通用安全分類提示。兩條兜底規則:
- 稽核模型未配置或調用出錯時,自動回退到關鍵詞篩查,開啟稽核永遠不會靜默失去保護;
- 基礎設施層面的錯誤(超時、上游故障)不會硬攔正常對話,判定失敗按放行處理(fail-open),只有明確的 BLOCK 才攔截。
範圍與計費口徑
- 稽核發生在生成之前,只篩查當條使用者提示,不包含歷史訊息;圖片生成的提示詞同樣經過稽核。
- 被攔截的訊息不計入每日次數、不扣積分,不產生主模型呼叫。
- 稽核模型自身的判定呼叫會以「內容稽核」用途記入用量報表(輸出僅一個詞,成本極低),見用量與分析。
稽核開關是按模型的:可以只對開放註冊使用者可用的預設模型開啟「模型」模式稽核,對內部付費使用者的高階模型關閉稽核或僅保留關鍵詞模式,互不影響。