微信扫码
添加专属顾问
我要投稿
轻松打造企业级AI问答机器人,RAG技术应用全解析。 核心内容: 1. RAG技术基本概念与应用场景 2. 构建企业知识库与元数据整合 3. 向量数据库与定时更新知识库的实现方法
RAG 已经几乎可以说是 AI 入门应用,实现方式很多,低代码平台,手搓代码都可以实现,涉及到的核心技术包括,知识库、提示词工程、向量数据库、LLM、全文检索、 query 重写等。
本实例使用的时 FAISS 向量数据库,使用 crontab,定时拉取更新知识(知识内容托管在 github),之后,存储到向量数据库。核心代码逻辑在,index_documents.py 文件内:
# Read the markdown filewith open(file_path, encoding="utf-8") as file:content = file.read()# Convert markdown to HTML and then extract text to remove markdown formattinghtml = markdown2.markdown(content)soup = BeautifulSoup(html, "html.parser")text = soup.get_text()# Create a Document object with metadatarelative_path = os.path.relpath(file_path, directory_path)doc = Document(page_content=text,metadata={"source": file_path,"filename": os.path.basename(file_path),"path": relative_path,},)# index document# Add to vector storeif not self.vector_store:self.vector_store = FAISS.from_documents(documents=documents, embedding=self.embeddings)else:self.vector_store.add_documents(documents)
在实际的问答场景中,用户问的问题,可能非常粗糙,比如,我登录不了了,如何注册,2FA,如果直接拿这些 query 词去搜索知识库,可能搜不到知识,所以需要对用户的 query 做一次重写,可以是用规则做映射,也可以让 LLM 生产多 query 词,本文使用 langchian 的 MultiQueryRetriever,在获取相关文档时,会自动做 query 重写。
重写后的 query,能检索到更多的数据:
# Initialize MultiQueryRetrieverretriever = MultiQueryRetriever.from_llm( retriever=vectorstore.as_retriever(), llm=llm)
在 RAG 系统中,不同的 retriever 有各自的优缺点,比如:
向量搜索(Vector Search):适用于语义搜索,但有时可能无法匹配精确的关键字。
关键词搜索(BM25 / TF-IDF):适用于关键词匹配,但难以处理语义相关的查询。
基于元数据的搜索:在结构化数据(如 SQL 或基于标签的数据库)中效果较好。
所以,在实际开发的过程中,组合了向量搜索 + 关键词搜索的方式,来提升检索能力,代码实现参考:
# Create keyword-based BM25 retrieverself.bm25_retriever = BM25Retriever.from_documents(self.documents)self.bm25_retriever.k = 3 # 获取 top 3 的文章# Create semantic retrieverself.semantic_retriever = self.vector_store.as_retriever(search_kwargs={"k": 5, "search_type": "similarity"}) # 获取 top 5 的文章# Create ensemble retriever (combines both approaches)self.hybrid_retriever = EnsembleRetriever(retrievers=[self.bm25_retriever, self.semantic_retriever],weights=[0.3, 0.7], # Weight semantic search higher) # 分配不同 retriever 的权重,关键词搜索占 30%,语意搜索占 70%
代码中的权重,主要用于给检索到的文章评分,通常会按加权和计算, 公式中的 wbm25, wsemantic 就是代码中设定的权重:
Prompt 优化
最后,对于 LLM,本质上是概率模型,无论给什么问题,它都会给出最有可能的回复(概率TOPn),出现所谓的幻觉。 所以,query LLM 大语言模型时,需要做提示词优化,给 LLM 加限制,一般情况下,提示词中,会特别写一句,如果没有检索到相关的内容,请直接回答不知道,避免 LLM 胡编乱造,产生影响。
到这里,基本上把核心的技术都涉及到了,如果要提升效果,涉及到的各个技术都有很大的优化空间,也需要做更细致的测试评估。
END
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-10-28
多少做RAG的人,连分词都搞不定? Milvus Analyzer指南
2025-10-28
先分块再向量化已经过时!先embedding再chunking才是王道
2025-10-28
AI检索增强中路由模型的使用
2025-10-28
HybRAG:混合文本和知识图谱的RAG框架
2025-10-28
“生成幻觉”(Hallucination)和“知识时效性”不足引发的架构范式变革
2025-10-27
RAG优化技巧
2025-10-26
关于RAG系统在多轮对话中的问题改写(优化)方法—使用历史记录改写问题
2025-10-26
你的RAG知识库,真的“喂”对数据了吗?拆解dify分段策略,告别无效召回
2025-09-15
2025-09-02
2025-08-05
2025-08-18
2025-08-25
2025-08-25
2025-08-25
2025-09-03
2025-08-20
2025-09-08
2025-10-04
2025-09-30
2025-09-10
2025-09-10
2025-09-03
2025-08-28
2025-08-25
2025-08-20