阿里云服务器 多个网站wordpress 文章位置
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:01
当前位置: 首页 > news >正文
阿里云服务器 多个网站,wordpress 文章位置,傻瓜式建设网站的软件,网站管理的内容包括文章目录 PDF问答程序程序流程处理PDF文档创建问答链 在探索和学习新技术时#xff0c;了解LangChain框架的理论知识固然重要#xff0c;但实际的案例分析与实践尝试能为你提供更加直观的认识和更深人的理解。本文主要以解析案例代码为主。通过具体的实践操作#xff0c;你可… 文章目录 PDF问答程序程序流程处理PDF文档创建问答链 在探索和学习新技术时了解LangChain框架的理论知识固然重要但实际的案例分析与实践尝试能为你提供更加直观的认识和更深人的理解。本文主要以解析案例代码为主。通过具体的实践操作你可以更好地理解LangChain技术的本质了解各个模块如何协同工作以及如何在实际应用中发挥其价值。 值得注意的是介绍这些案例代码主要是为了教学和解释它们可能并不适用于真实的生产环境。另外可能在你的电脑环境中运行案例代码后比如打印文本切分的块数得到了与案例不一样的数值结果。比如案例中拆分出446个块而你拆分出448个块。这种差异可能是以下几点原因造成的 文档内容存在微小差异如额外的空白或换行两个环境中库的版本有所不同chunk_overlap等参数导致的边界效应Python或其他库的版本存在差异。 相同地在执行相同的查询代码时大语言模型可能会给出略有不同的答案。这种现象的背后原理与大语言模型的工作机制有关。大语言模型如GPT系列)是基于概率的模型它预测下一个词的可能性是基于训练数据中的统计信息。当模型为生成文本时它实际上是在每个步骤中做出基于概率的决策所以当你在执行案例中的查询代码时可能会得到与案例稍微不同的答案。 PDF问答程序 PDF问答程序是可以引人外部数据集对大语言模型进行微调以生成更准确的回答的程序。假设你是一个航天飞机设计师你需要了解最新的航空材料技术。你可以将几百页的航空材料技术文档输人到大语言模型中模型会根据最新的数据集给出准确的答案。你不用看完整套材料而是根据自己的经验提出问题获得你想要知道的技术知识。PDF问答程序界面中呈现的是人类与文档问答程序的聊天内容但实质上人类仍然是在与大语言模型交流只不过这个模型现在被赋予了接入外部数据集的能力。 就像你在与一位熟悉公司内部文档的同事交谈尽管他可能并未参与过这些文档的编写但他可以准确地回答你的问题。在大语言模型出现之前人类不能像聊天一样与文档交流只能依赖于搜索。例如你正在为一项重要的报告寻找资料你必须知道你需要查找的关键词然后在大量的信息中筛选出你需要的部分。而现在你可以通过聊天的方式一即使你不知道具体的关键词也可以让模型根据你的问题告诉你答案。你就好像在问一位专业的图书馆员哪些书可以帮助你完成这份报告。 为什么要引入文档的外部数据集呢这是因为大语言模型的训练数据都是在2021年9月之前产生的之后产生的知识和信息并未被包含进去。大语言模型就像一个生活在过去的时间旅行者他只能告诉你他离开的那个时刻之前的所有信息但对之后的信息一无所知。 引入外部数据集还有一个重要的目的那就是修复大语言模型的“机器幻觉”避免给出错误的回答。试想一下如果你向一个只知道过去的信息的人询问未来的趋势他可能会基于过去的信息进行推断但这样的答案未必正确。所以要引入最新的数据让大语言模型能够更准确地回答问题避免因为信息过时产生的误导。 另外现在普遍使用的数据文档形式包括PDF、JSON、Word、Excel等这些都是获取实时知识和数据的途径。同时这类程序现在非常受欢迎比如最著名的Chat PDF和ChatDOC还有针对各种特定领域的程序如针对法律文档的程序。就像在阅读各种格式的图书一样不同的程序能够为你提供不同的知识和信息。以上就是选择PDF问答程序作为本章案例的原因。 程序流程 PDF问答程序的实现方式是利用LangChain已实现的向量存储、嵌入以及使用查询和检索相关的链来获取外部数据集及处理文档在进行相关性检索后进行合并处理将其置入大语言模型的提示模板中实现与PDF文件交流的目的。这里选定的文档是Reid Hoffman写的一本关于GPT-4和人工智能的书下载这份PDF文档并将其转换为可查询和交互的形式。连接这个PDF文档数据使用的是LEDVR工作流管理最后使用内置的RetrievalQA问答链和load_qa_chain方法构造文档链组件并且使用不同的文档合并链Stuf和Map re-rank对比答案的质量。 LEDVR工作流 L:加载器。首先选择的文档是Reid Hoffman写的一本关于GPT-4和人工智能的书。为了使用户与这个PDF问答程序能够进行互动回答和查询首先需要通过加载器从本地获取这份数据。加载器提供了从各种来源获取数据的通道并为后续步骤做好准备。E:嵌入模型包装器。接下来需要处理这份PDF文档的内容。通过嵌入模型包装器将文档中的每一段文字转换为一个高维向量。这一步的目的是实例化一个嵌入模型包装器对象方便后续将向量传递给向量存储库。D:文档转换器。这个环节主要是切分文本转换文档对象格式。如果文档过长则文档转换器可以将其切分成更小的段落。V:向量存储库。将LED的成果都交给向量存储库在实例化嵌入模型包装器对象时将切分后的文档转换为向量列表。处理好的向量将被存储在向量存储库中。这是一个专为高维向量设计的存储系统它允许快速地查找和检索向量为后续的查询提供了极大的便利。R:检索器。最后当用户想要查询某个特定的信息时检索器就会进入工作状态。检索器会将用户的查询问题转换为一个嵌入向量并在向量存储库中寻找与之最匹配的文档向量。在找到最相关的文档后检索器会返回文档的内容满足用户的查询需求。 创建链采用RetrievalQA内置的问答链结合load_qa_chain方法可以创建文档链部件然后通过对比Stuff与Map re-rank这两种不同的合并文档链来评估答案的优劣。 处理PDF文档 首先安装所需的Python库来为后续的操作打基础。 pip -q install langchain openai tiktoken PyPDF2 faiss-cpu这里安装了LangChain、openai、tiktoken、PyPDF2和faiss-cpu这5个库。其中openai是OpenAI的官方库能与其API进行交互。tiktoken是用于计算字符串中token数的工具PyPDF2允许处理PDF文件而faiss-cpu是一个高效的相似性搜索库。这里为OpenAI设置了API密钥 import os os.environ[OPENAI API KEY]填人你的密钥首先在本书的代码仓库中下载一个名为impromptu-rh.pdf的文件。这个文件在后续的代码中会被用到比如进行文本分析。为了从PDF文档中提取内容需要一个PDF阅读器。这里选择了一个基础的PDF阅读器但在实际应用中可能需要根据具体需求选择更复杂或专业的PDF处理库。在处理PDF文档时可能会遇到格式问题或其他意外情况因此选择合适的工具和方法是很重要的。不同的项目或数据源可能需要不同的处理方法这也是为什么有时需要使用更高级的工具或服务比如AWS、Google Cloud的相关API。为了处理PDF和后续的操作导人以下库和工具 from PyPDF2 import PdfReader from langchain.embeddings.openai import OpenAIEmbeddings from langchain.text_splitter import CharacterTextSplitter from langchain.vectorstores import FAISSPdfReader是PDF阅读器它来自PyPDF2库可用于从PDF文档中读取内容。OpenAIEmbeddings可用于嵌入或转换文本数据。Character TextSplitter可用于处理或切分文本。而FAISS是一个高效的相似性搜索库后续可用于文本或数据的搜索和匹配。加载之前下载的PDF文档 doc_reader PdfReader (/content/impromptu-rh.pdf)通过使用PdfReader将PDF文档的内容加载到doc reader变量中。这一步的目的是读取PDF文档并为后续的文本提取做准备。为了验证是否成功加载了PDF文档可以打印doc reader得到的输出结果是这个对象在内存中的地址PyPDF2.reader…PdfReader at Ox’7f119f57f640这表明doc reader已经成功创建并包含了PDF文档的内容。紧接着从PDF文档中提取文本这部分代码的作用是遍历PDF文档中的每一页并使用extract text(0方法提取每一页的文本内容然后将这些文本内容累加到raw text变量中。 raw_text for i,page in enumerate(doc reader.pages):text page.extract_text ()if text:raw_text text为了验证是否成功地从PDF文档中提取了文本这里打印了raw_text变量的长度得到的结果是356710。请注意文本拆分的方法很简单就是将这个长字符串按照字符数拆分。比如可以设定每1000个字符为一个块即chunk size1000。 Splitting up the text into smaller chunks for indexing text_splitter CharacterTextSplitter(separator \n,chunk size 1000,chunk overlap 200, # striding over the textlength_function len,) texts text_splitter.split_text (raw_text)总共切了448个块 len(texts) #·448在这个代码片段中chunk overlap参数用于指定文本切分时的重叠量(overlap)。它表示在切分后生成的每个块之间重叠的字符数。具体来说这个参数表示每个块的前后两个块之间会有多少个字符是重复的。例如chunkA和chunkB它们之间有200个字符是重复的。然后采用滑动窗口的方法来拆分文本。即每个块之间会有部分字符重叠比如在每1000个字符的块上让前后两个块有200个字符重叠。可以随机打印一块的内容 texts [20]输出是 million registered users.\nIn late January 2023,Microsoft1-which had invested \(1 billion \nin OpenAI in 2019-announced that it would be investing \)10 Inbillion more in the company.It soon unveiled a new version of \nits search engine Bing,with a variation of ChatGPT built into it.\nl I sit on Microsofts Board of Directors.10Impromptu:Amplifying Our Humanity Through AI\nBy the start of February 2023,OpenAI said ChatGPT had \none hundred million monthly active users,making it the fast-\nest-growing consumer internet app ever.Along with that \ntorrent of user interest,there were.news stories of the new Bing \nchatbot functioning in sporadically unusual ways that were \nvery different from how ChatGPT had generally been engaging \nwith users-including showing anger, hurling insults,beast-\ning on its hacking abilities and capacity for revenge, and basi-\ncally acting as if it were auditioning for a future episode of Real \nHousewives:Black Mirror Edition.下面介绍如何将提取的文本转换为机器学习可以理解的格式并且如何使用这些数据进行搜索匹配。为了理解和处理文本需要将其转换为向量列表。这里选择使用OpenAI的嵌入模型来为文本创建嵌入向量列表。
Download embeddings from OpenAI
embeddings OpenAIEmbeddings ()为了能够高效地在这些向量中搜索和匹配这里使用FAISS库。先把文本txts和嵌入模型包装器OpenAIEmbeddings作为参数传递然后通过FAISS库创建一个向量存储库以实现高效的文本搜索和匹配功能。 docsearch FAISS.from texts(texts,embeddings)通过上面的代码将原本的文本内容转换为机器学习可以理解和处理的向量数据。基于文本的向量表示程序就可以进行高效的搜索和匹配了。相似度检索是其中的一种方法。为了展示如何使用这种方法下面选择了一个实据。基于文本的向量表示程序就可以进行高效的搜索和匹配了。相似度检索是其中的一种方法。为了展示如何使用这种方法下面选择了一个实际中的查询“GPT-4如何改变了社交媒体”。 queryGPT-4如何改变了社交媒体 docs docsearch.similarity_search(query)将查询传递给similarity_search方法在向量数据中通过docsearch方法查找与查询最匹配的文档。这种搜索基于向量之间的相似度。得到的搜索结果是一个数组其中包含了与查询最匹配的文档。 len (docs)运行上面的代码发现结果为4这意味着有4处文档与查询有关。为了验证搜索的准确性可以尝试查看第一个匹配的文档。 docs [0]在搜索结果中第一个匹配的文档中多次提到了“社交媒体”下文中的Social media)这证明了PDF问答程序的查询效果非常好并且嵌入和相似度搜索的方法都是有效的。 Document (page_contentrected ways that tools like GPT-4 and DALL-E 2 enable.\nThis is a theme Ive touched on throughout this travelog,but \nits especially relevant in this chapter.From its inception,social \nmedia worked to recast broadcast medias monolithic and \npassive audiences as interactive, democratic communities,in \nwhich newly empowered participants could connect directly \nwith each other.They could project their own voices broadly,\nwith no editorial gatekeepingbeyond a given platforms terms \nof service.\nEven with the rise of recommendation algorithms,social media \nremains a medium where users have more chance to deter -\nmine their own pathways and experiences than they do in the \nworld of traditional media.Its a medium where theyve come Into expect a certain level of autonomy,and typically they look for \nnew ways to expand it.\nSocial media content creators also wear a lot of hats,especially Anwhen starting out.A new YouTube creator is probably not only,metadata())前面只有一个PDF文档实现代码也很简单通过LangChain提供的LEDVR工作流管理完成得很快。接下来要处理多文档的提问。在现实中要获取到真实的信息通常需要跨越多个文档比如读取金融研报、新闻综合报道等。 创建问答链 加载一个PDF文档在将其转换格式及切分字符后通过创建向量数据来进行搜索匹配并获得了问题的答案。一旦我们有了已经处理好的文档就可以开始构建一个简单的问答链。下面看一看如何使用LangChain创建问答链。在这个过程中这里选择了内置的文档处理链中一种被称为suff的链类型。在Suff模式下将所有相关的文档内容都全部提交给大语言模型处理在默认情况下放人的内容应该少于4000个标记。除Stuff链外文档处理链还有Refine链、MapReduce链、重排链。重排链在后面会用到。 from langchain.chains.question answering import load_ga_chain from langchain.llms import OpenAI chain load_ga_chain (OpenAI(),chain typestuff)下一步构建查询。首先使用向量存储中返回的内容作为上下文片段来回答查询。然后将这个查询传给LLM。LLM会回答这个查询并给出相应的答案。例如查询的问题是“这本书是哪些人创作的”语言模型链将该问题传递给向量存储库进行相似性搜索。向量存储库会返回最相似的4个文档片段doc通过运行chain.run并传递问题和相似文档片段然后LLM会给出一个答案。 query这本书是哪些人创作的 docs docsearch.similarity search(query) chain.run (input documentsdocs,questionquery)看看LLM回答了什么 不知道在默认情况下系统会返回4个最相关的文档但可以更改这个数字。例如可以设置返回6个或更多的搜索结果。 query这本书是哪些人创作的 docs docsearch.similarity_search(query,k6) chain.run(input_documentsdocs,questionquery)然而需要注意的是如果设置返回的文档数量过多比如设置k20那么总的标记数可能会超过模型平台的最大上下文长度导致错误。例如你使用的模型的最大上下文长度为4096但如果请求的标记数超过了5000则系统就会报错。设置返回的文档数量为6则获取的结果是 这本书的作者是Reid Hoffman和Sam Altman。在这种情况下如果相关文档的内容多一些则答案会更加准确一些。设置的返回的文档数量越少意味着大语言模型获取到的相关信息也就越少。之前询问query这本书是哪些人创作的仅仅返回了4条结果导致它回答了“不知道”。而修改返回的文档数量为6条时它找出了作者Reid Hoffman。它还提到了Sam Altman实际上Sam Altman并不是作者。出现这种错误可能是因为使用了低级的模型型号默认LLM类模型包装器是“text-davinci-003”型号这个型号的能力远不如GPT-4。 重排链 Suff链的优势是把所有文档的内容都放在提示词模板中并不对文档进行细分处理。而重排链则是选择了优化的算法提高查询的质量。下面提出更复杂的查询。比如说想要知道“OpenAI的创始人是谁”并且想要获取前10个最相关的查询结果。在这种情况下会返回多个答案而不仅仅是一个。可以看到它不只返回一个答案而是根据需求返回了每个查询的答案和相应的评分。 from langchain.chains.question_answering import load_qa_chain chain load_ga_chain (OpenAI(),chain_typemap_rerank,return_intermediate stepsTrue) queryOpenAI的创始人是谁 docs docsearch.similarity search(query,k10) results chain({input_documents:docs,question:query},return_only_outputsTrue)return intermediate stepsTrue是重要的参数设置这个参数可以让我们看到map_rerank是如何对检索到的文档进行打分的。下面对返回的每个查询结果进行评分。例如OpenAI被多次提及因此它的评分可能会有80分90分甚至l00分。观察intermediate_steps中的内容有2个得分为100的答案。 (intermediate steps:[(answer:This document does not answer the question., score:0}, (answer:,OpenAI的创始人是Elon Musk,Sam Altman,Greg Brockman和Ilya Sutskever。,score:100}, {answer:This document does not answer the question.score:0), (answer:This document does not answer the question.,score:0), (answer:This document does not answer the question.,score:0), (answer:This document does not answer the question,score:0), (answer:OpenAI的创始人是Elon Musk、Sam Altman、Greg Brockman、Ilya Sutskever、Wojciech Zaremba和Peter Norvig。,score:100), (answer:This document does not answer the question.,score:0), {answer:This document does not answer the question.,score:0), (answer:This document does not answer the question,score:0)],output text:OpenAI的创始人是Elon Musk,Sam Altman,Greg Brockman和Ilya Sutskever.}在进行评分后模型输出一个最终的答案‘score’:‘100’即得分为100的那个答案 results[output_text] OpenAI的创始人是Elon Musk,Sam Altman,Greg Brockman和Ilya Sutskever。为了搞清楚为什么模型会评分可以打印提示词模板。
check the prompt
chain.llm chain.prompt.template从提示词模板内容中可以看出为了确保大语言模型能够在收到问题后提供准确和有用的答案LangChain为模型设计了一套详细的提示词模板。该提示词模板描述了如何根据给定的背景信息回答问题并如何为答案打分。提示词模板开始强调了整体目标使模型能够根据给定的背景信息提供准确的答案并为答案打分第15行代码)。模型需要明白其核心任务根据给定的背景信息回答问题。如果模型不知道答案则它应该直接表示不知道而不是试图编造答案。对于这一点要提醒模型如果不知道答案应该直接表示不知道而不是编造答案第1行代码)。 接下来为模型提供答案和评分的标准格式。对于答案部分要求模型简洁、明确地回答问题而对于评分部分则要求模型为其答案给出一个0-100的分数用以表示答案的完整性和准确性。这部分明确了答案和评分的格式并强调了答案的完整性和准确性第5-6行代码)。通过3个示例模型可以更好地理解如何根据答案的相关性和准确性为其打分(第7~21行代码)。在示例中强调了答案的完整性和准确性是评分的核心标准。 最后为了使模型能够在具体的实践中应用上述提示词模板这里为模型提供了一个上下文背景和用户输人问题的模板。当模型接到一个问题时它应使用此模板为问题提供答案和评分第22~25行代码)。下面是格式化和翻译过后的提示词模板。 1.当你面对以下的背景信息时如何回答最后的问题是关键。如果不知道答案则直接说你不知道不要试图编造答案。 2.除提供答案外还需要给出一个分数表示它如何完全回答了用户的问题。请按照以下格式 3.问题[qustion] 4.有帮助的答案[answer] 5.分数[分数范围为0-100] 6.如何确定分数更高的分数代表更好的答案更好的答案能够充分地回应所提出的问题并提供足够的细节·如果根据上下文不知道答案那么分数应该是0不要过于自信 7.示例 #1 8.背景苹果是红色的 9.问题苹果是什么颜色 10.有帮助的答案红色 11.分数100 12.示例 #2 13.背景那是夜晚证人忘了带他的眼镜。他不确定那是一辆跑车还是SUV 14.问题那辆车是什么类型的 15.有帮助的答案跑车或SUV 16.分数60 17.示例 #3 18.背景梨要么是红色的要么是橙色的 19.问题苹果是什么颜色 20.有帮助的答案这个文档没有回答这个问题 21.分数0 22.开始 23.背景{context} 24.问题{question} 25.有帮助的答案RetrievalQA链 RetrievalQA链是LangChain已经封装好的索引查询问答链。在将其实例化之后可以直接把问题扔给它从而简化了很多步骤并可以获得比较稳定的查询结果。为了创建这样的链需要一个检索器。可以使用之前设置好的docsearch作为检索器并且可以设置返回的文档数量为k:4。 docsearch FAISS.from texts(texts,embeddings) from langchain.chains import RetrievalQA retriever docsearch.as_retriever(search typesimilarity,search kwargs(k:4))将RetrievalQA链的chain_type设置为stuf类型stuf类型会将搜索到的4个相似文档片段全部提交给LLM。
create the chain to answer questions
rqa RetrievalQA.from_chain_type (llmOpenAI(),chain typestuff,retrieverretriever,return_source_documentsTrue)设置return_source documents-True后当查询“OpenAI是什么”时不仅会得到一个答案还会得到源文档source_documents。 queryOpenAI是什么 rqa(query)[result]查询的结果是OpenAI是一家技术研究和开发公司旨在研究人工智能的安全性、可控性和效率。它的主要目标是使智能技术得以广泛使用以改善人类生活。·如果不需要中间步骤和源文档只需要最终答案那么可以直接请求返回结果。设置return_source_documents为False。比如问“GPT-4对创新力有什么影响” queryGPT-4对创新力有什么影响 rga(query)[result]它会直接返回结果不包括源文档。GPT-4可以加强创作者和创作者的创作能力和生产力从而提高创新力。它可以帮助他们例如头脑风暴、编辑、反馈、翻译和营销。此外GPT-4还可以帮助他们更快地完成任务从而提高他们的生产效率。它也可以帮助他们更深入地思考更有创意地思考。
- 上一篇: 阿里云搭建网站广告搜索引擎
- 下一篇: 阿里云服务器部署网站做类似昵图网网站
相关文章
-
阿里云搭建网站广告搜索引擎
阿里云搭建网站广告搜索引擎
- 技术栈
- 2026年03月21日
-
阿里云创建网站做任务反佣金的网站
阿里云创建网站做任务反佣金的网站
- 技术栈
- 2026年03月21日
-
阿里云创建网站织梦iis7搭建网站
阿里云创建网站织梦iis7搭建网站
- 技术栈
- 2026年03月21日
-
阿里云服务器部署网站做类似昵图网网站
阿里云服务器部署网站做类似昵图网网站
- 技术栈
- 2026年03月21日
-
阿里云服务器创建网站吗wordpress多租户
阿里云服务器创建网站吗wordpress多租户
- 技术栈
- 2026年03月21日
-
阿里云服务器搭建多个网站广西梧州
阿里云服务器搭建多个网站广西梧州
- 技术栈
- 2026年03月21日






