企業知識庫與 RAG
企業知識庫問答(RAG)用三類模型:Embeddings 把文件和問題轉成向量,Rerank 給檢索結果重新排序,對話模型根據檢索到的資料寫出回答。按下面的假設(2,000 篇文件入庫、每月 3 萬次提問),用各模型最低價分組的即時價格計算,每月模型費用約 ¥389。
價格更新於 2026年11月13日 凌晨1:33
月成本估算
假設:知識庫 2,000 篇文件、平均每篇 2,500 tokens;每月 3 萬次提問(約每天 1,000 次);每次召回 20 個候選塊(約 6,000 tokens)重排,最終給對話模型約 3,000 tokens 資料,回答約 400 tokens。
業務問題
產品手冊、內部制度、合同模板、歷史工單散落在不同系統裡,員工和客戶想找一個答案,往往要翻好幾份文件或者找人問。
直接問大模型,它不瞭解你們的內部資料,容易一本正經地編答案;把所有文件塞進提示詞,費用高,也很快超出上下文長度。
RAG(檢索增強生成)先從知識庫裡找出和問題相關的幾段原文,再讓模型只根據這幾段作答。資料更新後重新入庫即可,不需要訓練模型,每次回答也能附上出處,方便核對。
推薦模型組合
推薦模型按即時目錄自動選取,價格取各模型最低價分組,更新於 2026年11月13日 凌晨1:33。點模型名可檢視全部分組價格。
向量化(Embeddings)
text-embedding-3-largeOpenAI
輸入 ¥0.26 / 輸出 ¥0.26 每百萬 tokens標準分組
把文件塊和使用者問題轉換成向量,用來做語義檢索。同一個知識庫的入庫和查詢必須使用同一個向量模型。
重排序(Rerank)
輸入 ¥0.00308 / 輸出 ¥0.00308 每百萬 tokens國產模型分組
向量檢索召回的候選段落裡常混有不相關的內容。重排模型按問題和段落的相關性重新打分,只把最相關的幾段交給對話模型,回答更準,輸入 tokens 也更少。
生成回答(對話模型)
deepseek-v4.1-flashDeepSeek
輸入 ¥2.8 / 輸出 ¥11.2 每百萬 tokens國產模型分組
讀取檢索到的資料並組織成回答。知識庫問答的輸入長、輸出短,選輸入單價低的模型最划算;對答案質量要求更高時,可以換成備選裡的模型。
參考架構
- 1
解析與切塊
把 PDF、Word、網頁、工單等資料轉成純文本,按 300 到 800 字切成塊,每塊保留標題、來源連結和更新時間。
- 2
向量化入庫
呼叫 Embeddings 介面把每個文本塊轉成向量,連同原文一起寫入向量資料庫,例如 pgvector、Milvus、Qdrant 或 Elasticsearch。
- 3
召回候選
使用者提問時,用同一個向量模型把問題轉成向量,取最相近的 20 到 50 個文本塊;也可以同時做關鍵詞檢索,再合併結果。
- 4
重排篩選
呼叫 Rerank 介面給候選文本塊打相關性分數,保留前 5 個左右。
- 5
生成回答
把保留的文本塊編號後連同問題一起交給對話模型,要求它只依據資料作答、用 [1] 這樣的編號標註出處,資料不足時直接說不知道。
- 6
評估迭代
記錄使用者的點贊點踩和答不上來的問題,定期補文件、調整切塊大小和提示詞。
成本估算
假設:知識庫 2,000 篇文件、平均每篇 2,500 tokens;每月 3 萬次提問(約每天 1,000 次);每次召回 20 個候選塊(約 6,000 tokens)重排,最終給對話模型約 3,000 tokens 資料,回答約 400 tokens。
| 專案 | 模型 | 用量假設 | 費用 |
|---|---|---|---|
| 文件首次向量化(一次性) | text-embedding-3-large | 2,000 次 × 輸入 2,500 tokens | ¥1.3 |
| 問題向量化 | text-embedding-3-large | 30,000 次 × 輸入 40 tokens | ¥0.312 |
| 候選段落重排 | qwen3-reranker-8b | 30,000 次 × 輸入 6,000 tokens | ¥0.554 |
| 生成回答 | deepseek-v4.1-flash | 30,000 次 × 輸入 3,000 + 輸出 400 tokens | ¥386.4 |
| 合計(每月) | ¥388.57 | ||
按各模型最低價分組的即時價格計算,價格更新於 2026年11月13日 凌晨1:33。
只含模型呼叫費用,不含向量資料庫和伺服器成本。文件首次入庫是一次性費用,之後只需對新增或修改的文件重新向量化。系統提示詞較長且模型支援上下文快取時,命中快取的部分按更低的快取讀取價計費,實際費用會更低。
示例程式碼
用 OpenAI SDK 呼叫向量和對話介面,用 HTTP 請求呼叫重排介面。向量資料庫部分換成你自己的實現。
import os
import requests
from openai import OpenAI
API_KEY = os.environ["TUTUJIN_API_KEY"]
client = OpenAI(base_url="https://www.tutujin.com/v1", api_key=API_KEY)
def embed(texts):
"""Turn document chunks or a question into vectors."""
resp = client.embeddings.create(model="text-embedding-3-large", input=texts)
return [d.embedding for d in resp.data]
def rerank(query, docs, top_n=5):
"""Re-score retrieved chunks and keep the most relevant ones."""
r = requests.post(
"https://www.tutujin.com/v1/rerank",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"model": "qwen3-reranker-8b", "query": query, "documents": docs, "top_n": top_n},
timeout=30,
)
r.raise_for_status()
return [docs[x["index"]] for x in r.json()["results"]]
def answer(question, chunks):
context = "\n\n".join(f"[{i + 1}] {c}" for i, c in enumerate(chunks))
resp = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[
{"role": "system", "content": "Answer only from the given sources and cite them like [1]. If the sources do not say, reply that you do not know."},
{"role": "user", "content": f"Sources:\n{context}\n\nQuestion: {question}"},
],
temperature=0.2,
)
return resp.choices[0].message.content
# candidates = your_vector_db.search(embed([question])[0], k=20)
# print(answer(question, rerank(question, candidates)))常見問題
企業知識庫問答每月大概花多少錢?
取決於提問量和每次帶入的資料長度。按 2,000 篇文件入庫、每月 3 萬次提問、每次給模型約 3,000 tokens 資料的假設,用最低價分組計算,每月模型費用約 ¥389。提問量翻倍,費用大致也翻倍。
一定要用 Rerank 嗎?
不是必須。文件少、問題比較固定時,只用向量檢索就夠了。文件多、同一件事有好幾種問法時,加一步重排通常能明顯減少答非所問,交給對話模型的無關段落也更少,輸入 tokens 跟著下降。
中途更換向量模型,要重建索引嗎?
要。不同向量模型生成的向量不能混用,換模型後需要把全部文件重新向量化入庫,查詢時也要用新模型。所以上線前最好先用一小批文件對比幾個向量模型的檢索效果再定。
可以全部用國產模型嗎?
可以。向量、重排和對話都有國產模型可選,例如向量用 qwen3-embedding-8b、重排用 qwen3-reranker-8b、對話用 deepseek-v4.1-flash,呼叫方式不變,只需要改 model 參數。
怎麼讓回答附上出處?
切塊時給每塊儲存來源連結和標題;交給模型時按 [1]、[2] 編號,並在系統提示詞裡要求按編號標註出處;前端再把編號映射回原文連結。
