wordpress+悬浮按钮,爱站网seo综合查询工具,如何设计软件界面,宽带公司从 0 开始搞定 RAG 应用系列#xff08;第一篇#xff09;#xff1a;构建简单 RAG
前言
LLM 已经从最初的研究性转变为实际应用性#xff0c;尤其在今年各大 LLM 厂商都在研究 LLM 的商业化落地方案#xff08;包括我司#xff09;。而在各种商业化场景中个人觉得最具…从 0 开始搞定 RAG 应用系列第一篇构建简单 RAG
前言
LLM 已经从最初的研究性转变为实际应用性尤其在今年各大 LLM 厂商都在研究 LLM 的商业化落地方案包括我司。而在各种商业化场景中个人觉得最具有使用价值和最能体现 LLM 的商业化场景就是 RAG 的使用。
什么是 RAG
大家都知道 LLM 的能做的事情很多但是有一些工作它是无法做到的那就是领域知识和最新的知识。
领域知识一般指企业里面私有化的数据因为这部分的知识 LLM 是无法获取和知道的。
LLM 训练的数据是基于比较老的数据 然而最新的信息它也无法知道这部分的数据一般的情况是基于 RAG 来实现目前可以联网的 LLM 也是基于 RAG 实现的。 RAG即检索增强生成Retrieval-Augmented Generation是一种结合了信息检索技术与语言生成模型的人工智能技术。这种技术主要用于增强大型语言模型Large Language Models, LLMs处理知识密集型任务的能力如问答、文本摘要、内容生成等。 RAG的核心思想是让语言模型在生成回答或文本时能够动态地从外部知识库中检索相关信息。这种方法能够提高模型生成内容的准确性、可靠性和透明度丰富大模型的知识同时减少“幻觉”即模型生成看似合理但实际上错误的信息。 也许有的人会问 RAG 难么
我一般的回答是说简单就简单说难也挺难。如下图 从上图我们可以看到构建一个如此的 RAG 涉及的流程和功能是挺多的。而且这也是一个工程化的项目。 本系列文章逐步揭开 RAG 领域的神秘面纱
构建简单 RAG 本系列文章需要你简单懂 langchain、Python、向量数据库等相关的知识 构建一个简单的流程一般有下面的几个步骤
文档加载文档拆分为 chunk文档向量化需要向量化模型向量化存储prompt 编写LLM 配置、初始化提问query - 检索 - 构建 prompt - LLM - answer
简单 RAG 如图所示 安装环境以及安装包 pip install langchain_community tiktoken langchain-openai langchainhub chromadb langchain
配置
如果你是用 openAI 作为 LLM那么你需要在环境变量中设置 OPENAI_API_KEY os.environ[OPENAI_API_KEY] your-api-key
本文中是用 AZURE 服务在项目目录下面新建一个 .env 文件配置内容如下
我们只需要设置 model os.environ.get(AZURE_EMBEDDING_TEXT_MODEL) 就可以了。langchain 会自动读取这些环境变量。 AZURE_OPENAI_API_KEYAZURE_OPENAI_ENDPOINTAZURE_DEPLOYMENT_NAME_GPT35gpt-35-turboAZURE_DEPLOYMENT_NAME_GPT4gpt-4AZURE_EMBEDDING_TEXT_MODELtext-embedding-ada-002OPENAI_API_VERSION2024-03-01-preview
然后加载配置信息 import os, dotenv# 加载.env 文件dotenv.load_dotenv(.env)
代码实现过程
我们根据官方文档中 [RAG 快速开始]的代码结合我们自己实际的情况来实现一个简单的 RAG 应用。
1、加载依赖包 import bs4, osfrom langchain import hubfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain_community.document_loaders import WebBaseLoaderfrom langchain_community.vectorstores import FAISSfrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.runnables import RunnablePassthroughfrom langchain_openai import AzureChatOpenAI, AzureOpenAIEmbeddingsfrom langchain.prompts import PromptTemplate
2、加载文档
这里我们抓取我先前发布的一篇文章
使用bs4来抓取文章并配置抓取的内容为文章块也就是class 为 “article”, “article-title” 中的内容。关于 bs4 的是用可以查看官方文档。 # 加载文档loader WebBaseLoader(web_paths(https://juejin.cn/post/7366149991159955466,),bs_kwargsdict(parse_onlybs4.SoupStrainer(class_(article, article-title))),)
3、文档拆分为小块
是用 langchain 的文档加载器并进行文本的拆分。
chunk_size文档块大小
chunk_overlap文档块重叠大小
这两个属性挺重要的会直接影响到最终的答案的准确性。 # 文档加载器加载文档docs loader.load()# 进行文档拆分text_splitter RecursiveCharacterTextSplitter(chunk_size1000, chunk_overlap200)splits text_splitter.split_documents(docs)
4、实例化向量模型
实例化 embedding 模型 AzureOpenAIEmbeddings,关于向量化模型选择什么的问题需要注意的是与选择的向量数据库需要兼容由于不同的向量模型向量化文本后的维度与向量数据库不一致的情况会导致查询或者向量存储的时候出现问题。
文档向量化过程 embeddings AzureOpenAIEmbeddings(modelos.environ.get(AZURE_EMBEDDING_TEXT_MODEL))
5、向量数据库保存、检索
文档检索过程 向量数据库,这里我们是用本地向量数据库 FAISS。配置向量数据库的需要向量化的文档splits配置向量数据库的向量模型embeddings vectorstore FAISS.from_documents(documentssplits, embedding embeddings)# 设置检索器用来向量查找文档相似度的retriever vectorstore.as_retriever() # 打印检索的 documentsdef format_docs(docs):return \n\n.join(doc.page_content for doc in docs)
检索已经的功能已经完成我们可以尝试向量检索文本 result retriever.invoke(提高LLM的方法有哪些)format(result)
检索到的文档内容这里还是文档的原始内容 [Document(metadata{source: https://juejin.cn/post/7366149991159955466}, page_content回答不完整\n有时候 LLM 的回答并不完全错误但会遗漏了一些细节。这些细节虽然在上下文中有所体现但并未被充分呈现出来。例如如果有人询问“文档A、B和C主要讨论了哪些方面”对于每个文档分别提问可能会更加适合.....
6、构建 prompt
在 LLM 的是用场景中prompt 是一个重要的缓解相信大家已经对 prompt 有了一定的了解。
简单说 prompt 是我们告诉 LLM 的要做什么、怎么做的指令可以简单也可以很复杂。下面的 prompt 是构建 RAG 的简单的 prompt # 首先我们需要一个 prompt 模板# prompt hub.pull(rlm/rag-prompt)prompt_template You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you dont know the answer, just say that you dont know. Use three sentences maximum and keep the answer concise.Question: {question} Context: {context} Answer:prompt PromptTemplate.from_template(prompt_template) # 这一步是为了把 prompt 模板格式化
初始化 LLM LLM 的配置会自动获取环境变量中的值。读者可以根据自己的实际情况配置并不一定要是用 OpenAI 服务字节的豆包大模型也是可以的。 # 初始化 LLM LLM 的配置会自动获取环境变量中的值。llm AzureChatOpenAI(azure_deploymentos.getenv(AZURE_DEPLOYMENT_NAME_GPT35),temperature0)
7、构建 chain
最后一步就是想 LLM 提问是用 langchain 构建 chain。 关于 langchain 的 chain 能力不熟悉的可以去官网了解。 # 构建 chainrag_chain ({context: retriever | format_docs, question: RunnablePassthrough()}| prompt| llm| StrOutputParser())
所有的步骤已经完成我们可以是用 LLM 来回答问题 # 开始提问rag_chain.invoke(提高LLM的方法有哪些)# 提高LLM的方法包括使用查询转换来确保全面理解问题并作出回应以及添加一层查询理解层进行一系列的Query Rewriting。另外可以采用路由、查询重写、子问题和ReAct代理选择器等转换方法来优化RAG系统的效能。最后通过对RAG系统挑战的深入分析和优化可以提升LLM的准确性和可靠性大幅提高用户对技术的信任度和满意度。 rag_chain.invoke(文章中提到了哪些优化方案)# 抱歉我不知道。
总结
本文是 RAG 系列文章的第一篇初步介绍了 RAG 是什么有什么作用构建一个 RAG 应用的几个步骤
文档加载将文档网页、常用文档解析为 langchain documents 对象的过程文档拆分: 将大的文档进行拆分为 chunk并配置 chunk_size,overloop 属性两个属性会影响 rag 的最后的效果。文档向量化将高维度的文本转换为向量表示的过程向量化存储将向量数组、原文当一起存储到向量数据库prompt 编写构建 LLM 的指令LLM 配置、初始化提问query - 检索 - 构建 prompt - LLM - answer 如何学习AI大模型
我在一线互联网企业工作十余年里指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限很多互联网行业朋友无法获得正确的资料得到学习提升故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。 第一阶段 从大模型系统设计入手讲解大模型的主要方法
第二阶段 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用
第三阶段 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统
第四阶段 大模型知识库应用开发以LangChain框架为例构建物流行业咨询智能问答系统
第五阶段 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型
第六阶段 以SD多模态大模型为主搭建了文生图小程序案例
第七阶段 以大模型平台应用与开发为主通过星火大模型文心大模型等成熟大模型构建大模型行业应用。 学会后的收获 • 基于大模型全栈工程实现前端、后端、产品经理、设计、数据分析等通过这门课可获得不同能力
• 能够利用大模型解决相关实际项目需求 大数据时代越来越多的企业和机构需要处理海量数据利用大模型技术可以更好地处理这些数据提高数据分析和决策的准确性。因此掌握大模型应用开发技能可以让程序员更好地应对实际项目需求
• 基于大模型和企业数据AI应用开发实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能 学会Fine-tuning垂直训练大模型数据准备、数据蒸馏、大模型部署一站式掌握
• 能够完成时下热门大模型垂直领域模型训练能力提高程序员的编码能力 大模型应用开发需要掌握机器学习算法、深度学习框架等技术这些技术的掌握可以提高程序员的编码能力和分析能力让程序员更加熟练地编写高质量的代码。 1.AI大模型学习路线图 2.100套AI大模型商业化落地方案 3.100集大模型视频教程 4.200本大模型PDF书籍 5.LLM面试题合集 6.AI产品经理资源合集 获取方式 有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】