网站板块设置,做室内设计的网站,网站建设公司在哪里宣传,nginx与WordPress我们知道LLM#xff08;大语言模型#xff09;的底模是基于已经过期的公开数据训练出来的#xff0c;对于新的知识或者私有化的数据LLM一般无法作答#xff0c;此时LLM会出现“幻觉”。针对“幻觉”问题#xff0c;一般的解决方案是采用RAG做检索增强。
但是我们不可能把…我们知道LLM大语言模型的底模是基于已经过期的公开数据训练出来的对于新的知识或者私有化的数据LLM一般无法作答此时LLM会出现“幻觉”。针对“幻觉”问题一般的解决方案是采用RAG做检索增强。
但是我们不可能把所有数据都丢给LLM去学习比如某个公司积累的某个行业的大量内部知识。此时就需要一个私有化的文档搜索工具了。
本文聊聊如何使用LangChain结合LLM快速做一个私有化的文档搜索工具。之前介绍过LangChain几乎是LLM应用开发的第一选择它的野心也比较大它致力于将自己打造成LLM应用开发的最大社区。自然它有这方面的成熟解决方案。
文末还会向朋友们推荐一款非常好用的AI机器人和LLM API超市价格实惠又稳定还可以领一波福利。
1. RAG检索流程
使用 LangChain 实现私有化文档搜索的主要流程如下图所示
文档加载 → 文档分割 → 文档嵌入 → 向量化存储 → 文档检索 → 生成回答 2. 代码实践细节
2.1. 文档加载
首先我们需要加载文档数据。文档可以是各种格式比如文本文件、PDF、Word 等。使用 LangChain可以轻松地加载这些文档。下面以PDF为例
from langchain_community.document_loaders import PyPDFLoaderloader PyPDFLoader(./GV2.pdf)
docs loader.load()
2.2. 文档分割
加载的文档通常会比较大为了更高效地处理和检索我们需要将文档分割成更小的段落或句子。LangChain 提供了便捷的文本分割工具可以按句子、块长度等方式分割文档。
from langchain.text_splitter import RecursiveCharacterTextSplittertext_splitter RecursiveCharacterTextSplitter(chunk_size50,chunk_overlap20,separators[\n, 。, , , , 、, ],add_start_indexTrue,
)
texts text_splitter.split_documents(docs)
分割后的文档内容可以进一步用于生成向量。
2.3. 文档嵌入 Embeddings
文档分割后我们需要将每一段文本转换成向量这个过程称为文档嵌入。文档嵌入是将文本转换成高维向量这是相似性搜索的关键。这里我们选择OpenAI的嵌入模型来生成文档的嵌入向量。
from langchain_openai import OpenAIEmbeddingsembeddings_model OpenAIEmbeddings(openai_api_keysk-xxxxxxxxxxx,openai_api_basehttps://api.302.ai/v1,
)txts [txt.page_content for txt in texts]embeddings embeddings_model.embed_documents(txts)
2.4. 文档向量化存储
接下来我们需要将生成的向量化的文档存入向量数据库中。向量数据库主要用来做相似性搜索可以高效地存储和检索高维向量。LangChain 支持与多种向量数据库的集成比如 Pinecone、FAISS、Chroma 等。
本文以FAISS为例首先需要安装FAISS直接使用pip install faiss-cpu安装。
from langchain_community.vectorstores import FAISSdb FAISS.from_documents(texts, embeddings_model)
FAISS.save_local(db, faiss_db2)
2.5. 文档检索
当用户提出问题时我们需要在向量数据库中检索最相关的文档。检索过程是计算用户问题的向量表示然后在向量数据库中查找与之最相似的文档。最后将找到的文档内容拼接成一个大的上下文。
向量数据库的检索支持多种模式本文先用最简单的后续再出文章继续介绍别的模式。
from langchain.retrievers.multi_query import MultiQueryRetrieverretriever db.as_retriever()
# retriever db.as_retriever(search_typesimilarity_score_threshold,search_kwargs{score_threshold:.1,k:5})
# retriever db.as_retriever(search_typemmr)
# retriever MultiQueryRetriever.from_llm(
# retriever db.as_retriever(),
# llm model,
# )context retriever.get_relevant_documents(query张学立是谁)_content
for i in context:_content i.page_content
2.6. 将检索内容丢给LLM作答
最后我们需要将检索到的文档内容丢入到 prompt 中让LLM生成回答。LangChain 可以PromptTemplate模板的方式将检索到的上下文动态嵌入到 prompt 中然后丢给LLM这样可以生成准确的回答。
from langchain.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParserquestion 张学立是谁
template [(system,你是一个处理文档的助手,你会根据下面提供context标签里的上下文内容来继续回答问题.\n 上下文内容\n context\n{context} \n/context\n,),(human, 你好),(ai, 你好),(human, {question}),
]
prompt ChatPromptTemplate.from_messages(template)messages prompt.format_messages(context_content, questionquestion)
response model.invoke(messages)output_parser StrOutputParser()
output_parser.invoke(response)
2.7. 完整代码
最后将以上所有代码串起来整合到一起如下
from langchain_openai import ChatOpenAI
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
from langchain.retrievers.multi_query import MultiQueryRetriever
from langchain.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParsermodel ChatOpenAI(model_namegpt-3.5-turbo,openai_api_keysk-xxxxxxx,openai_api_basehttps://api.302.ai/v1,
)loader PyPDFLoader(./GV2.pdf)
docs loader.load()text_splitter RecursiveCharacterTextSplitter(chunk_size50,chunk_overlap20,separators[\n, 。, , , , 、, ],add_start_indexTrue,
)
texts text_splitter.split_documents(docs)embeddings_model OpenAIEmbeddings(openai_api_keysk-xxxxxxx,openai_api_basehttps://api.302.ai/v1,
)
txts [txt.page_content for txt in texts]
embeddings embeddings_model.embed_documents(txts)db FAISS.from_documents(texts, embeddings_model)
FAISS.save_local(db, faiss_db2)retriever db.as_retriever()template [(system,你是一个处理文档的助手,你会根据下面提供context标签里的上下文内容来继续回答问题.\n 上下文内容\n context\n{context} \n/context\n,),(human, 你好),(ai, 你好),(human, {question}),
]
prompt ChatPromptTemplate.from_messages(template)question 张学立是谁
context retriever.get_relevant_documents(queryquestion)
_content
for i in context:_content i.page_contentmessages prompt.format_messages(context_content, questionquestion)
response model.invoke(messages)output_parser StrOutputParser()
output_parser.invoke(response)
2.8. 总结、推荐
通过 LangChain可以轻松实现私有化文档搜索充分利用LLM的能力来处理和检索文档信息。按照文中的步骤你也可以轻松实现。
好的问答系统离不开优秀的LLM根据我的个人经验OpenAI的大模型能力排名是Top1的。但是使用OpenAI不方便不但需要梯子而且还不稳定。
一款好的LLM摆在面前却用不了着实头疼。有没有方便稳定的方式呢当然有啦我推荐一款AI自助平台不但有问答机器人、文生图机器人、文生视频机器人还有常见的LLM API稳定又还便宜。具体使用方法见原文链接。
大模型AI产品经理如何学习
求大家的点赞和收藏我花2万买的大模型学习资料免费共享给你们来看看有哪些东西。
1.学习路线图 第一阶段 从大模型系统设计入手讲解大模型的主要方法
第二阶段 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用
第三阶段 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统
第四阶段 大模型知识库应用开发以LangChain框架为例构建物流行业咨询智能问答系统
第五阶段 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型
第六阶段 以SD多模态大模型为主搭建了文生图小程序案例
第七阶段 以大模型平台应用与开发为主通过星火大模型文心大模型等成熟大模型构建大模型行业应用。
2.视频教程
网上虽然也有很多的学习资源但基本上都残缺不全的这是我自己整理的大模型视频教程上面路线图的每一个知识点我都有配套的视频讲解。 都打包成一块的了不能一一展开总共300多集
因篇幅有限仅展示部分资料需要点击下方图片前往获取
3.技术文档和电子书
这里主要整理了大模型相关PDF书籍、行业报告、文档有几百本都是目前行业最新的。
4.LLM面试题和面经合集
这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
学会后的收获 • 基于大模型全栈工程实现前端、后端、产品经理、设计、数据分析等通过这门课可获得不同能力
• 能够利用大模型解决相关实际项目需求 大数据时代越来越多的企业和机构需要处理海量数据利用大模型技术可以更好地处理这些数据提高数据分析和决策的准确性。因此掌握大模型应用开发技能可以让程序员更好地应对实际项目需求
• 基于大模型和企业数据AI应用开发实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能 学会Fine-tuning垂直训练大模型数据准备、数据蒸馏、大模型部署一站式掌握
• 能够完成时下热门大模型垂直领域模型训练能力提高程序员的编码能力 大模型应用开发需要掌握机器学习算法、深度学习框架等技术这些技术的掌握可以提高程序员的编码能力和分析能力让程序员更加熟练地编写高质量的代码。 1.AI大模型学习路线图 2.100套AI大模型商业化落地方案 3.100集大模型视频教程 4.200本大模型PDF书籍 5.LLM面试题合集 6.AI产品经理资源合集 获取方式 有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】