“关于知识库这块,你有什么能讲的吗?”我一脸懵逼,数据咋清洗,数据格式咋定的不是刚说完吗??🤔复盘了一下,感觉应该是想问下面这些
🧱 1. 文档切分策略(切得好,才能召回准)
🌟 目标:
把长文档切成合适的语义段,既能保证上下文连贯,又不超出 token 限制。
📌 常见策略:
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
🧰 推荐做法:
用 langchain.text_splitter 中的 RecursiveCharacterTextSplitter(递归+分隔符):
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=500, chunk_overlap=100,
separators=["nn", "n", ".", " ", ""]
)
chunks = splitter.split_text(your_text)
💡 坑点:
-
chunk 太短 → 表达不完整 -
chunk 太长 → embedding稀释,token溢出 -
overlap 必须控制好,100左右比较稳
🧬 2. 向量生成(embedding)
🌟 目标:
把文本片段转化为模型能理解的向量(embedding),进入语义空间。
📌 常见 embedding 模型:
|
|
|
|
|
|---|---|---|---|
text-embedding-ada-002
|
|
|
|
bge-base-zh
bge-large-zh |
|
|
|
text2vec
|
|
|
|
e5-mistral
|
|
|
|
🛠️ 示例代码:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("bge-base-zh")
emb = model.encode("鼠标断连怎么解决")
🔥 记得用 BGE 模型要加 prompt:“为这个句子生成表示以用于检索相关文档:xxxx”
🔍 3. 向量库选择(存储+召回)
🌟 目标:
将 embedding 存入可快速近似搜索的数据库中,用于后续查询。
📌 常见库:
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
🛠️ 示例:FAISS 本地构建
import faiss
import numpy as np
index = faiss.IndexFlatIP(768) # 余弦相似度
index.add(np.array([vec1, vec2, vec3])) # vec 是 np.array 的向量
D, I = index.search(np.array([query_vec]), top_k)
🎯 4. 检索策略:向量、关键词、混合召回
🌟 目标:
提高召回的准度和覆盖率。
📌 召回方式对比:
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
📌 混合召回核心是:关键词召回召不准 → 靠语义补;语义召回太泛 → 靠关键词兜底
🧠 常用组合:
-
关键词召回 top30 + 向量召回 top30 → 合并 → rerank top10
🧠 5. Rerank 排序(二次排序)
🌟 目标:
提高最终召回片段的相关性排序,降低误召回风险。
📌 推荐模型:
|
|
|
|
|---|---|---|
bge-reranker-base |
|
|
Cohere Rerank |
|
|
cross-encoder/ms-marco |
|
|
🛠️ 示例伪代码:
score = reranker(query, [chunk1, chunk2, chunk3])
ranked = sorted(zip(score, chunks), reverse=True)
🧩 6. Prompt 拼接策略(上下文注入)
🌟 目标:
将检索到的内容+用户问题组织成 Prompt 喂给 LLM。
📌 模板示例:
你是某品牌客服助手,以下是产品说明文档内容:
【知识片段】
1. 鼠标若断连,请检查电量或更换接收器
2. 鼠标灯不亮通常为电池电量低
用户提问:
鼠标今天怎么又断连了?
请基于上方知识内容回答。
🧠 控制点:
-
控制 token 长度:太多片段 LLM 会截断 -
用 CONTEXT_WINDOW = 3500控制拼接字数 -
多段知识片段要用编号或分隔符 ---,降低混淆
❌ 7. 检索失败处理机制(没命中咋办)
🌟 目标:
保证系统在没有命中知识时,不答错,不胡说。
📌 建议处理方式:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|


