跳到正文
土土金API

企业知识库与 RAG

企业知识库问答(RAG)用三类模型:Embeddings 把文档和问题转成向量,Rerank 给检索结果重新排序,对话模型根据检索到的资料写出回答。按下面的假设(2,000 篇文档入库、每月 3 万次提问),用各模型最低价分组的实时价格计算,每月模型费用约 ¥389。

价格更新于 2026年11月13日 01:33

月成本估算

假设:知识库 2,000 篇文档、平均每篇 2,500 tokens;每月 3 万次提问(约每天 1,000 次);每次召回 20 个候选块(约 6,000 tokens)重排,最终给对话模型约 3,000 tokens 资料,回答约 400 tokens。

¥388.57/ 月

  • 文档首次向量化(一次性)¥1.3
  • 问题向量化¥0.312
  • 候选段落重排¥0.554
  • 生成回答¥386.4
看用量假设

业务问题

产品手册、内部制度、合同模板、历史工单散落在不同系统里,员工和客户想找一个答案,往往要翻好几份文档或者找人问。

直接问大模型,它不了解你们的内部资料,容易一本正经地编答案;把所有文档塞进提示词,费用高,也很快超出上下文长度。

RAG(检索增强生成)先从知识库里找出和问题相关的几段原文,再让模型只根据这几段作答。资料更新后重新入库即可,不需要训练模型,每次回答也能附上出处,方便核对。

推荐模型组合

推荐模型按实时目录自动选取,价格取各模型最低价分组,更新于 2026年11月13日 01:33。点模型名可查看全部分组价格。

参考架构

  1. 1

    解析与切块

    把 PDF、Word、网页、工单等资料转成纯文本,按 300 到 800 字切成块,每块保留标题、来源链接和更新时间。

  2. 2

    向量化入库

    调用 Embeddings 接口把每个文本块转成向量,连同原文一起写入向量数据库,例如 pgvector、Milvus、Qdrant 或 Elasticsearch。

  3. 3

    召回候选

    用户提问时,用同一个向量模型把问题转成向量,取最相近的 20 到 50 个文本块;也可以同时做关键词检索,再合并结果。

  4. 4

    重排筛选

    调用 Rerank 接口给候选文本块打相关性分数,保留前 5 个左右。

  5. 5

    生成回答

    把保留的文本块编号后连同问题一起交给对话模型,要求它只依据资料作答、用 [1] 这样的编号标注出处,资料不足时直接说不知道。

  6. 6

    评估迭代

    记录用户的点赞点踩和答不上来的问题,定期补文档、调整切块大小和提示词。

成本估算

假设:知识库 2,000 篇文档、平均每篇 2,500 tokens;每月 3 万次提问(约每天 1,000 次);每次召回 20 个候选块(约 6,000 tokens)重排,最终给对话模型约 3,000 tokens 资料,回答约 400 tokens。

项目模型用量假设费用
文档首次向量化(一次性)text-embedding-3-large2,000 次 × 输入 2,500 tokens¥1.3
问题向量化text-embedding-3-large30,000 次 × 输入 40 tokens¥0.312
候选段落重排qwen3-reranker-8b30,000 次 × 输入 6,000 tokens¥0.554
生成回答deepseek-v4.1-flash30,000 次 × 输入 3,000 + 输出 400 tokens¥386.4
合计(每月)¥388.57

按各模型最低价分组的实时价格计算,价格更新于 2026年11月13日 01:33。

只含模型调用费用,不含向量数据库和服务器成本。文档首次入库是一次性费用,之后只需对新增或修改的文档重新向量化。系统提示词较长且模型支持上下文缓存时,命中缓存的部分按更低的缓存读取价计费,实际费用会更低。

示例代码

用 OpenAI SDK 调用向量和对话接口,用 HTTP 请求调用重排接口。向量数据库部分换成你自己的实现。

示例代码(Python)
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)))

用一把 Key 试试这个方案

注册后在控制台创建 API Key,把上面代码里的 base_url 和 Key 换成你的就能运行。企业采购、开发票可以加客服微信 JsnonoChat。

土土金客服微信二维码
微信JsnonoChat

扫码或搜索微信号添加客服

常见问题

企业知识库问答每月大概花多少钱?

取决于提问量和每次带入的资料长度。按 2,000 篇文档入库、每月 3 万次提问、每次给模型约 3,000 tokens 资料的假设,用最低价分组计算,每月模型费用约 ¥389。提问量翻倍,费用大致也翻倍。

一定要用 Rerank 吗?

不是必须。文档少、问题比较固定时,只用向量检索就够了。文档多、同一件事有好几种问法时,加一步重排通常能明显减少答非所问,交给对话模型的无关段落也更少,输入 tokens 跟着下降。

中途更换向量模型,要重建索引吗?

要。不同向量模型生成的向量不能混用,换模型后需要把全部文档重新向量化入库,查询时也要用新模型。所以上线前最好先用一小批文档对比几个向量模型的检索效果再定。

可以全部用国产模型吗?

可以。向量、重排和对话都有国产模型可选,例如向量用 qwen3-embedding-8b、重排用 qwen3-reranker-8b、对话用 deepseek-v4.1-flash,调用方式不变,只需要改 model 参数。

怎么让回答附上出处?

切块时给每块保存来源链接和标题;交给模型时按 [1]、[2] 编号,并在系统提示词里要求按编号标注出处;前端再把编号映射回原文链接。