使用llamaindex构建多文件代理抹布
介绍
在人工智能快速发展的领域中,处理和理解大量信息的能力变得越来越重要。输入多文件代理抹布 - 一种强大的方法,将检索功能增强的生成(RAG)与基于代理的系统结合起来,以创建可以在多个文档中推理的AI。本指南将为您介绍这项激动人心的技术的概念,实施和潜力。
学习目标
- 了解多文件代理抹布系统及其架构的基本面。
- 了解嵌入和基于代理的推理如何增强AI生成上下文准确响应的能力。
- 探索高级检索机制,以改善知识密集型应用中的信息提取。
- 洞悉多文件代理抹布在研究和法律分析等复杂领域的应用。
- 发展评估抹布系统在AI驱动的内容生成和分析中的有效性的能力。
本文作为数据科学博客马拉松的一部分发表。
目录
- 了解抹布和多文件代理
- 为什么多文件代理抹布是改变游戏规则的?
- 多文件代理抹布系统的关键优势
- 多文件代理抹布的构建块
- 实施基本的多文档代理抹布
- 步骤1:安装所需库
- 步骤2:设置API键和环境变量
- 步骤3:下载文档
- 步骤4:创建向量和摘要工具
- 步骤5:创建代理
- 步骤6:分析代理的响应
- 解释代理商与Longlora论文的互动
- 解释代理商的行为:总结自lag和longlora
- 挑战和考虑因素
- 常见问题
了解抹布和多文件代理
检索增强的生成(RAG)是一种通过允许其访问和使用外部知识来增强语言模型的技术。 RAG模型不仅依靠他们的训练有素的参数,还可以从知识库中检索相关信息,以产生更准确和知情的响应。
多文件代理抹布通过使AI代理同时使用多个文档来进一步采用此概念。这种方法对于需要从各种来源(例如学术研究,市场分析或法律文件审查)综合信息的任务特别有价值。
为什么多文件代理抹布是改变游戏规则的?
让我们理解为什么多文件代理抹布是一个改变游戏规则的人。
- 对上下文的更聪明理解:想象一下拥有一个超级聪明的助手,不仅读了一本书,而且要读一个图书馆来回答您的问题。这就是增强上下文理解的含义。通过分析多个文档,AI可以将更完整的图片拼凑在一起,从而为您提供真正捕捉大图的答案。
- 提高棘手任务的准确性:我们都在小时候玩过“连接点”。多文档代理抹布做类似的事情,但是信息。通过将各种来源的事实连接起来,它可以以更高的精度解决复杂的问题。这意味着更可靠的答案,尤其是在处理复杂的主题时。
- 处理信息超载,例如专业人士:在当今的世界中,我们淹没了数据。多文件代理抹布就像一个增压过滤器,筛选大量信息以查找真正相关的内容。这就像让一群专家全天候工作,以消化和总结大量知识图书馆。
- 适应性和可成长的知识库:将其视为可以轻松学习和扩展的数字大脑。随着新信息的可用,多文档的代理抹布可以无缝地融合它。这意味着您的AI助手始终是最新的,随时可以用最新鲜的信息来解决最新问题。
多文件代理抹布系统的关键优势
现在,我们将研究多文件代理抹布系统的关键优势。
- 增压学术研究:研究人员经常花数周或数月的时间综合数百篇论文的信息。多文件的代理抹布可以大大加快这一过程,帮助学者迅速确定广大文献体系之间的关键趋势,知识差距以及潜在的突破。
- 革新法律文件分析:律师处理案件档案,合同和法律先例的山。这项技术可以迅速分析数千个文档,发现关键细节,不一致和相关判例法,这可能需要人类的几天或几周才能揭露。
- 涡轮增压市场情报:企业需要领先于趋势和竞争。多文件代理抹布可以不断扫描新闻文章,社交媒体和行业报告,提供实时见解,并帮助公司比以往任何时候都更快地做出数据驱动的决策。
- 轻松地导航技术文档:对于工程师和IT专业人员,在铺设技术文档中找到正确的信息可能就像在干草堆中搜索针头一样。这种AI驱动的方法可以快速查明各种手册,故障排除指南和代码存储库的相关部分,从而节省了无数小时的挫败感。
多文件代理抹布的构建块
想象一下,您正在建立一个超级智能的数字图书馆助理。该助手可以阅读数千本书,了解复杂的问题,并使用来自多个来源的信息为您提供详细的答案。从本质上讲,这就是多文档的代理抹布系统。让我们分解使其成为可能的关键组件:
文档处理
将所有类型的文档(PDF,网页,文字文件等)转换为我们的AI可以理解的格式。
创建嵌入
将处理的文本转换为代表信息含义和上下文的数值向量(数字序列)。
简而言之,想象一下库中每个段落的超含量摘要,但是您使用唯一的代码,而不是单词。该代码以计算机快速比较和分析的方式捕获信息的本质。
索引
它创建了一个有效的结构来存储和检索这些嵌入。这就像为我们的数字图书馆创建世界上最有效的卡目录。它允许我们的AI快速找到相关信息,而无需详细扫描每个文档。
检索
它使用查询(您的问题)从索引嵌入中找到最相关的信息。当您提出一个问题时,该组件会通过我们的数字图书馆进行比赛,使用该超高效卡目录来删除所有潜在的相关信息。
基于代理的推理
AI代理在查询的上下文中解释检索到的信息,决定如何使用它来提出答案。这就像拥有一个天才的AI代理,他不仅找到了正确的文件,而且还了解您的问题的更深层次的含义。他们可以连接不同来源的点,并找出回答您的最佳方法。
一代
它根据代理商的推理和检索到的信息产生可读的答案。这是我们的天才代理商用清晰,简洁的语言向您解释他们的发现的地方。他们采用了他们收集和分析的所有复杂信息,并以直接回答您的问题的方式呈现它。
这种功能强大的组合允许多文档的代理抹布系统提供洞察力和答案,从大量知识中汲取的洞察力和答案,使它们对于许多领域的复杂研究,分析和解决问题的任务非常有用。
实施基本的多文档代理抹布
首先,让我们构建一个可以与三本学术论文一起使用的简单代理抹布。我们将使用Llama_index库,该库为构建抹布系统提供了强大的工具。
步骤1:安装所需库
要开始构建AI代理,您需要安装必要的库。这是设置您的环境的步骤:
- 安装Python:确保您在系统上安装了Python。您可以从Python官方网站下载它:下载Python
- 设置虚拟环境:为您的项目管理依赖项创建虚拟环境是一个好习惯。运行以下命令来设置虚拟环境:
Python -M Venv ai_agent_env 源ai_agent_env/bin/activate#在Windows上,使用`ai_agent_env \ scripts \ activate`
- 安装OpenAI API和LlamainDex:
PIP安装OpenAi Llama-index == 0.10.27 Llama-index-llms-openai == 0.1.15 PIP安装Llama-index-embeddings-openai == 0.1.7
步骤2:设置API键和环境变量
要使用OpenAI API,您需要一个API键。请按照以下步骤设置您的API密钥:
- 获取API密钥:在OpenAI网站上注册帐户,并从API部分获取您的API密钥。
- 设置环境变量:将API密钥存储在环境变量中以确保其安全。将以下行添加到您的.bashrc或.zshrc文件(或为操作系统使用适当的方法)
导出openai_api_key ='your_openai_api_key_here'
- 访问代码中的API键:在Python代码,导入必要的库,然后使用OS模块访问API键
导入操作系统 进口Openai 导入NEST_ASYNCIO 来自llama_index.core.node_parser import stonencesplitter 来自llama_index.core.tools import functionTool,queryenginetool 来自llama_index.core.core.vector_stores导入元数据,滤波器条件 来自llama_index.core.agent intimpt functionCallingAgentWorker 来自llama_index.core.gagent Import Agentrunner 从输入导入列表,可选 导入子过程 OpenAI.API_KEY = OS.GEGENV('OpenAi_Api_Key') #optionion,您只需直接添加OpenAI键即可。 (不是一个好练习) #openai.api_key ='your_openai_api_key_here' nest_asyncio.apply()
步骤3:下载文档
如前所述,我只使用三篇论文来制作这种代理抹布,以后我们将在其他博客中将其扩展到更多论文。您可以使用自己的文档(可选)。
#要下载的URL列表 urls = [ “ https://openreview.net/pdf?id=vtmbagcn7o”, “ https://openreview.net/pdf?id=6pmjorfdak”, “ https://openreview.net/pdf?id=hsyw5go0v8”, 这是给出的 #对应的文件名将文件保存为 论文= [ “ metagpt.pdf”, “ longlora.pdf”, “ selfrag.pdf”, 这是给出的 #在这两个列表上循环并下载每个文件都有其各自的名称 对于URL,邮政纸(URL,纸): subprocess.run([[“ wget”,url,“ -o”,paper])
步骤4:创建向量和摘要工具
以下功能get_doc_tools旨在创建两个工具:矢量查询工具和摘要查询工具。这些工具有助于使用基于代理的检索生成(RAG)方法查询和汇总文档。以下是步骤及其解释。
def get_doc_tools( file_path:str, 名称:str,, ) - > str: “”“从文档获取矢量查询和摘要查询工具。”“”
加载文档并准备向量索引
该函数首先使用SimpleDirectoryReader加载文档,该函数采用提供的File_path并读取文档的内容。加载文档后,它将通过SendencesPlitter处理,该句子将文档分解为较小的块或节点,每个节点最多包含1024个字符。然后使用VectorStoreIndex索引这些节点,该工具允许有效的基于向量的查询。该索引将稍后将用于基于向量相似性对文档内容进行搜索,从而更容易检索相关信息。
#从指定的文件路径加载文档 documents = simperedirectoryReader(input_files = [file_path])。load_data() #将加载的文档分为1024个字符的较小块(节点) splitter = sensencesplitter(chunk_size = 1024) nodes = splitter.get_nodes_from_documents(文档) #从节点创建一个矢量索引,以进行有效的基于矢量的查询 vector_index = vectorstoreIndex(节点)
定义向量查询功能
在这里,该函数定义了vector_query,该功能负责回答有关文档的特定问题。该功能接受查询字符串和页码的可选列表。如果没有提供页码,则查询整个文档。该功能首先检查是否提供了page_numbers;如果没有,则默认为空列表。
然后,它创建与指定的页码相对应的元数据过滤器。这些过滤器有助于将搜索范围缩小到文档的特定部分。 query_engine是使用向量索引创建的,并配置为使用这些过滤器以及相似性阈值,以找到最相关的结果。最后,该功能使用此引擎执行查询并返回响应。
#向量查询功能 def vector_query( 查询:str, page_numbers:可选[list [str]] =无 ) - > str: ”“”用于通过给定论文回答问题。 如果您对论文有特定的问题,有用。 始终将page_numbers留为无,除非您要搜索特定页面。 args: 查询(str):要嵌入的字符串查询。 page_numbers(可选[list [str]]):通过一组页过滤。没有离开 如果我们想执行矢量搜索 在所有页面上。否则,通过指定页面的集合过滤。 ”“” page_numbers = page_numbers或[] metadata_dicts = [ {“键”:“ page_label”,“ value”:p in page_numbers中的p 这是给出的 query_engine = vector_index.as_query_engine( samelity_top_k = 2, 过滤器= metadatafilters.from_dicts( metadata_dicts, 条件= filterCondition.or ) ) 响应= query_engine.query(query) 返回响应
创建向量查询工具
该函数的这一部分创建了vector_query_tool,该工具将先前定义的vector_query函数链接到基于调用get_doc_tools时提供的名称参数的动态生成名称。
该工具是使用functionTool.from_defaults创建的,该工具会自动使用必要的默认设置配置它。现在,该工具可用于使用前面定义的函数对文档进行基于向量的查询。
#创建向量查询工具 vector_query_tool = functionTool.from_defaults( name = f“ vector_tool_ {name}”, fn = vector_query )
创建摘要查询工具
在最后一节中,该函数创建了用于汇总文档的工具。首先,它从先前被拆分和索引的节点创建了一个摘要。该索引专为摘要任务而设计。然后以“ Tree_summarize”的响应模式创建summary_query_engine,该模式允许该工具生成文档内容的简明摘要。
最终使用queryenginetool.from_defaults创建了summary_tool,该工具将查询引擎链接到基于名称参数的动态生成的名称。还给出了该工具的描述,指示其目的是与汇总相关的查询。现在,可以使用此摘要工具根据用户查询来生成文档的摘要。
#摘要查询工具 summary_index = summaryIndex(节点) summary_query_engine = summary_index.as_query_engine( response_mode =“ tree_summarize”, use_async = true, ) summary_tool = queryenginetool.from_defaults( name = f“ summary_tool_ {name}”, query_engine = summary_query_engine, 描述=(( f“对{名称}有关的摘要问题有用” ), ) 返回vector_query_tool,summary_tool
调用功能为每篇论文构建工具
paper_to_tools_dict = {} 纸中的纸: 打印(f“获取纸的工具:{paper}”) vector_tool,summary_tool = get_doc_tools(纸,路径(PAPE).stem) Paper_to_tools_dict [Paper] = [vector_tool,summary_tool] prient_tools = [T paper_to_tools_dict [paper]]的纸张中的纸张 len(initial_tools)
该代码处理每篇论文并为每个论文创建两个工具:用于语义搜索的向量工具,以及用于生成简明摘要的摘要工具,在这种情况下为6个工具。
步骤5:创建代理
早些时候,我们为代理创建了工具,现在我们将使用然后使用FunctionCallingAgentWorker类创建代理。我们将使用“ GPT-3.5-Turbo”作为LLM。
llm = OpenAI(型号=“ GPT-3.5-Turbo”) agent_worker = functionCallingAgentWorker.from_tools( initial_tools, llm = llm, 冗长= true ) 代理= AgentRunner(Agent_worker)
该代理现在可以回答有关我们处理过的三篇论文的问题。
步骤6:分析代理的响应
我们从三篇论文中询问了代理商的不同问题,这是它的回答。以下是有关其内部工作方式的示例和解释。
解释代理商与Longlora论文的互动
在此示例中,我们询问我们的代理商从三个研究论文中提取特定信息,特别是关于评估数据集以及Longlora研究中使用的结果。代理使用Vector查询工具与文档进行交互,这是对信息进行逐步处理的方式:
- 用户输入:用户询问了有关Longlora评估方面的两个顺序问题:首先关于评估数据集,然后涉及结果。
- 代理的查询执行:代理商确定需要专门搜索Longlora文档以获取有关评估数据集的信息。它使用vector_tool_longlora函数,该功能是专门为longlora设置的向量查询工具。
===调用功能=== 呼叫函数:vector_tool_longlora with args:{“ query”:“评估数据集”}
- 评估数据集的功能输出:代理从文档中检索相关部分,确定Longlora中使用的评估数据集是“ PG19测试拆分”,这是由于其长形式文本性质而用于语言模型评估的数据集。
- 代理商的第二个查询执行:在第一个响应之后,代理然后处理用户问题的第二部分,向文档查询了longlora的评估结果。
===调用功能=== 调用功能:with args:{“ query”:“评估结果”}
- 评估结果的功能输出:代理返回的详细结果,显示模型在更大的上下文大小的困惑方面表现更好。它突出了关键发现,例如具有较大上下文窗口的改进和特定的上下文长度(100K,65536和32768)。它还指出了一个权衡,因为扩展模型在较小的上下文大小上经历了由于位置插值而导致的某些困惑降低,这是由于位置插值而导致的 - 这种模型中的常见限制。
- 最终LLM响应:代理将结果综合为简洁的响应,回答有关数据集的初始问题。评估结果将进一步解释,总结了绩效结果及其含义。
其他论文的示例很少
解释代理商的行为:总结自lag和longlora
在这种情况下,代理人的任务是提供自橡胶和longlora的摘要。在这种情况下观察到的行为与上一个示例不同:
摘要工具用法
===调用功能=== 调用函数:summary_tool_selfrag with args:{“ input”:“ self-rag”}
与较早的示例不同,该示例涉及查询特定细节(例如评估数据集和结果),这里的代理直接利用了为自lag和longlora设计的summary_tool函数。这表明了代理商根据问题的性质在查询工具之间自适应切换的能力 - 当需要更广泛的概述时摘要。
独立的呼叫来分开摘要工具
===调用功能=== 调用功能:summary_tool_longlora with args:{“ input”:“ longlora”}
代理分别称为summary_tool_selfrag和summary_tool_longlora获得摘要,证明其有效处理多部分查询的能力。它确定了需要为每篇论文量身定制的不同摘要工具,而不是执行单个合并的检索。
回应的简洁性和直接性
代理商提供的答复是简洁的,并直接解决了提示。这表明代理可以有效提取高级见解,与上一个示例形成鲜明对比,在该示例中,它根据特定的向量查询提供了更多颗粒状的数据点。
这种相互作用强调了代理商提供高级概述与先前观察到的详细的,特定于上下文的响应的能力。行为的这种转变强调了代理抹布系统根据用户问题的性质调整其查询策略的多功能性 - 无论是需要深入细节还是广泛的摘要。
挑战和考虑因素
虽然多文档的代理抹布很强大,但要记住一些挑战:
- 可伸缩性:随着文档的数量的增加,有效的索引和检索变得至关重要。
- 连贯性:确保代理在整合来自多个来源的信息时会产生连贯的响应。
- 偏见和准确性:系统的输出仅与其输入文档和检索机制一样好。
- 计算资源:处理和嵌入大量文档可能是资源密集的。
结论
多文档代理抹布代表了AI领域的重大进步,通过综合来自多个来源的信息来实现更准确和上下文感知的响应。这种方法在研究,法律分析和技术文档等复杂领域中尤其有价值,而精确的信息检索和推理至关重要。通过利用嵌入,基于代理的推理和强大的检索机制,该系统不仅可以增强AI生成的内容的深度和可靠性,而且还为在知识密集型行业中更复杂的应用铺平了道路。随着技术的不断发展,多文件代理抹布有望成为从大量数据中提取有意义见解的重要工具。
关键要点
- 多文件代理抹布通过整合来自多个来源的信息来提高AI响应精度。
- 嵌入和基于代理的推理增强了系统生成上下文感知和可靠内容的能力。
- 该系统在研究,法律分析和技术文档等复杂领域中特别有价值。
- 高级检索机制可确保精确的信息提取,并支持知识密集型行业。
- 多文档代理抹布代表了AI驱动的内容生成和数据分析中向前迈出的重要一步。
常见问题
Q1。什么是多文档代理抹布?答:多文件代理RAG结合了检索功能生成(RAG)与基于代理的系统,使AI能够跨多个文档进行推理。
Q2。多文件代理抹布如何提高准确性?答:通过综合来自各种来源的信息,使AI可以连接事实并提供更精确的答案,从而提高了准确性。
Q3。在哪些领域是多文件代理抹布最有益的?答:它在学术研究,法律文档分析,市场情报和技术文档中特别有价值。
Q4。多文档代理抹布系统的关键组件是什么?答:关键组件包括文档处理,创建嵌入,索引,检索,基于代理的推理和生成。
Q5。嵌入在该系统中的作用是什么?A.嵌入将文本转换为数值向量,从而捕获信息的含义和上下文,以进行有效的比较和分析。
本文所示的媒体不由Analytics Vidhya拥有,并由作者酌情使用。
以上是使用llamaindex构建多文件代理抹布的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Vibe编码通过让我们使用自然语言而不是无尽的代码行创建应用程序来重塑软件开发的世界。受Andrej Karpathy等有远见的人的启发,这种创新的方法使Dev

2025年2月,Generative AI又是一个改变游戏规则的月份,为我们带来了一些最令人期待的模型升级和开创性的新功能。从Xai的Grok 3和Anthropic的Claude 3.7十四行诗到Openai的G

Yolo(您只看一次)一直是领先的实时对象检测框架,每次迭代都在以前的版本上改善。最新版本Yolo V12引入了进步,可显着提高准确性

Chatgpt 4当前可用并广泛使用,与诸如ChatGpt 3.5(例如ChatGpt 3.5)相比,在理解上下文和产生连贯的响应方面取得了重大改进。未来的发展可能包括更多个性化的间

本文回顾了AI最高的艺术生成器,讨论了他们的功能,对创意项目的适用性和价值。它重点介绍了Midjourney是专业人士的最佳价值,并建议使用Dall-E 2进行高质量的可定制艺术。

Google DeepMind的Gencast:天气预报的革命性AI 天气预报经历了巨大的转变,从基本观察到复杂的AI驱动预测。 Google DeepMind的Gencast,开创性

本文讨论了AI模型超过Chatgpt,例如Lamda,Llama和Grok,突出了它们在准确性,理解和行业影响方面的优势。(159个字符)

Openai的O1:为期12天的礼物狂欢始于他们迄今为止最强大的模型 12月的到来带来了全球放缓,世界某些地区的雪花放缓,但Openai才刚刚开始。 山姆·奥特曼(Sam Altman)和他的团队正在推出12天的礼物前
