标签: 向量数据库

  • 给 AI 接上你的业务数据:RAG 检索增强生成落地四步走

    给 AI 接上你的业务数据:RAG 检索增强生成落地四步走

    通用大模型再强,也不知道你公司的产品手册、客服记录、内部规范。把私有知识「喂」给它的标准做法叫 RAG(检索增强生成):先检索相关资料,再把资料塞进提示词,让模型基于资料作答。

    整套流程四步,下面逐一拆。

    文档转化为向量节点并经大模型生成答案的 RAG 流程

    一、文档切分:别一刀切

    • 固定 500 字硬切最容易把一句话拦腰截断,召回时上下文残缺;
    • 优先按标题/段落语义切,chunk 之间留 overlap(重叠区),避免边界信息丢失;
    • 表格、代码块单独处理,别和普通段落混切。

    二、向量化:选 embedding + 向量库

    用 embedding 模型把每段文字变成向量,存进向量库(轻量用 pgvector,规模大用 Milvus / 专用向量引擎)。这一步决定「能不能找到」。

    三、检索:召回 + 重排

    先用向量召回 top-k 候选,再用轻量 rerank 模型对候选重排序,把最相关的顶上去。检索质量直接决定回答上限——召回错了,生成再好也白搭

    四、生成:把上下文喂给大模型

    把检索到的片段拼进提示词,并明确要求「仅依据资料作答、资料没有就说未知」,用引用约束来压幻觉。最小实现:

    # 最小 RAG 检索+生成(伪代码,模型调用走统一接入层)
    chunks = split_document(doc, size=512, overlap=64)   # 1. 切分
    vectors = embed(chunks)                              # 2. 向量化
    index.add(vectors, chunks)
    
    query_vec = embed(user_question)
    hits = index.search(query_vec, top_k=5)              # 3. 检索(可加 rerank)
    context = "
    ---
    ".join(h["text"] for h in hits)
    
    prompt = f"""仅根据以下资料回答,资料中没有就答「未知」:
    {context}
    问题:{user_question}"""
    answer = llm.call(prompt)                            # 4. 生成(引文约束防幻觉)

    五、三个最常见的坑

    • 切分粒度:太粗召回噪声大,太细语义碎,靠业务文档试出来最准;
    • 检索质量:先优化检索再怪模型,多数「答非所问」其实是没召回对;
    • 幻觉:靠「引文约束 + 显式未知」缓解,关键场景人工复核。

    代码里那句 llm.call,背后就是模型接入层。想少管密钥、自由换模型,见 《多模型统一接入层实战》;近期模型能力对比可看 《9 月大模型混战》

    搭 RAG 不需要从零对接每家模型。在 拓瑞智能 trui88.com 一把 API Key 调通 GPT-6、Claude、DeepSeek,embedding 和生成模型一个后台统一切换,按用量计费。注册即送体验额度,先拿一份产品手册跑通再说。