【LLM】langchain结构化工具
TL;DR:我们正在引入一种新的抽象,以允许使用更复杂的工具。虽然以前的工具只接受单个字符串输入,但新工具可以接受任意数量的任意类型的输入。我们还引入了一个新的代理类,它可以很好地与这些新类型的工具配合使用。
重要链接:
- 工具列表
- 新代理人
早在2022年11月,当我们首次推出LangChain时,代理和工具利用率在我们的设计中发挥了核心作用。我们建立了基于ReAct的首批链之一,这是一篇开创性的论文,将工具的使用带到了提示框架的前沿。
在早期,工具的使用过于简单。一个模型将生成两个字符串:
- 工具名称
- 所选工具的输入字符串
这种方法将代理限制为每转一个工具,并且该工具的输入限制为单个字符串。这些限制主要是由于模型的限制;模型甚至很难熟练地完成这些基本任务。可靠地执行更复杂的操作,例如选择多个工具或填充复杂的模式,将是一件愚蠢的事。
然而,更先进的语言模型(如text-davinci-003、gpt-3.5-turbo和gpt-4)的快速发展为现有模型能够可靠实现的目标奠定了基础。这促使我们重新评估LangChain代理框架中对工具使用的限制。
【LLM】LangChain入门:构建LLM驱动的应用程序入门指南
LangChain教程,用于在Python中使用大型语言模型构建任何东西
“What did the stochastic parrot say to the other?” (Image drawn by the author)
自从ChatGPT发布以来,大型语言模型(LLM)获得了很大的流行。尽管你可能没有足够的资金和计算资源在地下室从头开始训练LLM,但你仍然可以使用预先训练的LLM来构建一些很酷的东西,例如:
- 可以根据您的数据与外界互动的个人助理
- 为您的目的定制聊天机器人
- 对您的文档或代码进行分析或总结
LLM正在改变我们构建人工智能产品的方式
【LLM】LangChain的LangFlow
LangFlow是LangChain的一个GUI,可以轻松地进行LLM应用程序和提示链接的实验和原型制作。
LangFlow是一个基于LangChain的本地LLM图形开发接口。如果你以任何方式熟悉LangChain,在链、代理和提示工程方面,这个开发界面都会感觉非常直观。
在下图中,是所有可用组件分组的列表。展开后,可以看到链、提示、代理和LLM的开发可供性列表。这个列表肯定会随着兴趣的增加而增加。
以下是关于如何构建一个非常简单的LLM Chaining应用程序以及如何与该应用程序聊天的简短教程。
要构建最简单的LLM应用程序,需要选择三个组件并将其拖到设计画布上:
【LLM】langchain 和 ChatGTP 4 agents
代理
代理通过涉及LLM来确定要遵循的操作序列,从而保持一定程度的自主权。
考虑下图,在收到请求后,代理会利用LLM来决定采取哪种操作。“操作”完成后,Agent将进入“观察”步骤。从观察步骤开始,代理人分享一个想法;如果没有达到最终答案,Agent会循环返回到另一个Action,以便更接近最终答案。
LangChain代理可以使用一系列操作。
下面的代码显示了LangChain代理回答一个极其模糊和复杂的问题的完整工作示例:
Who is regarded as the father of the iPhone and what is the square root of his year of birth?
代理人可以采取一些行动:
LLM数学,
以下是SerpApi网站的截图。SerpApi使得从搜索引擎结果中提取数据变得可行。
GPT-4(GPT-4–0314)。
【LLM】LangChain 代理和大型语言模型
目前在LLM上开发的方法正在迅速发展,即时工程在某种程度上被链接和代理的概念所吸收。
在最近的一篇文章中,我写到了即时工程的演变,以及即时工程是如何被吸收到更大的开发结构中的。
这些更大的开发结构允许:
- 更长、更复杂的用户交互
- 进程可以串行或并行运行
- 提示可以编程、共享、存储和模板化
- 链接是创建提示流或提示序列的概念。
对于现有流退出并且可以创建预先确定的会话或工作流的情况,Chaining工作得很好。
另一方面,在流量未知或高度不可预测的情况下,链接并不能很好地服务于场景。在这些情况下,预定的流程将不能很好地工作,并且需要一定程度的自主权。
什么是代理?
代理可以通过使用其可支配的一组工具或资源来接收查询。这些工具可以包括访问维基百科、网络搜索、数学库、LLM等。
【LLM】大型语言模型背景下的自主代理LangChain
随着大型语言模型(LLM)的实现在深度和广度上的扩展,出现了一些要求:
- 对LLM进行编程并创建可重复使用的提示的能力&将提示无缝地合并到更大的应用程序中。
- 创建链以对大型应用程序的LLM交互进行排序。
- 通过一个可以在工具范围内自主行动的代理,自动进行即兴的思维链提示。
- 创建可扩展的提示管道,可以从各种来源收集相关数据,所有这些都基于用户输入并构成提示;并将提示提交给LLM。
“任何足够先进的技术都与魔术难以区分。”
-阿瑟·C·克拉克
对于LLM相关的操作,显然需要自动化。目前,这种自动化是以所谓的代理的形式出现的。
提示链接是指执行一系列预先确定的动作。
【ChatBot】使用LangFlow构建LangChain智能体
基于LLM的智能体通过访问其可支配的LLM和工具来维护自主权
关于智能体的更多信息
LangChain智能体在一套可用工具的上下文中是自主的。现在,您可以通过使用LangFlow在GUI中构建LangChain智能体。
LangChain智能体在收到请求时会使用各种操作。采取行动后,智能体进入观察步骤,在那里他们分享一个想法。如果未达到最终答案,Agent会循环返回以选择不同的操作,以便更接近最终答案。
智能体之所以有吸引力,是因为他们能够独立行动,不走预先确定的道路。
他们配备了一套工具,使他们能够响应这些工具范围内的任何请求。
这个执行管道使智能体能够独立地解决问题,可能需要多次迭代,直到达到所需的结果。
【QA系统】LLM驱动的QA系统的一种新的文档摘要索引
在这篇博客文章中,我们介绍了一种全新的LlamaIndex数据结构:文档摘要索引。我们描述了与传统的语义搜索相比,它如何有助于提供更好的检索性能,并举例说明。
出身背景
大型语言模型(LLM)的核心用例之一是对自己的数据进行问答。为此,我们将LLM与“检索”模型配对,该模型可以在知识语料库上执行信息检索,并使用LLM对检索到的文本执行响应合成。这个整体框架被称为检索增强生成。
如今,大多数构建LLM支持的QA系统的用户倾向于执行以下某种形式的操作:
- 获取源文档,将每个文档拆分为文本块
- 将文本块存储在矢量数据库中
- 在查询期间,通过嵌入相似性和/或关键字过滤器来检索文本块。
- 执行响应合成
由于各种原因,这种方法提供的检索性能有限。
【LLM】利用特定领域知识库中的LLM
通过RAG致富:利用LLM的力量,使用检索增强生成与您的数据对话
问ChatGPT一个关于“马拉松”一词起源的问题,它会准确地告诉你希罗多德是如何描述费迪皮德斯从马拉松到雅典完成的42公里传奇长跑的,然后筋疲力尽。
但我祖母的食谱清单呢?当然,我可以把这些食谱数字化,没问题。但是,如果我想根据冰箱里的食材、我最喜欢的颜色和我一天的心情,就准备哪顿饭提出建议,该怎么办?
让我们看看这是否有可能在不因精疲力竭而崩溃的情况下实现。
LLM,达到你的极限…并超越它们
LLM是一种大型语言模型。OpenAI的GPT-4是一个例子,Meta的LLamA是另一个例子。我们在这里有意识地选择使用一般LLM术语来指代这些模型。请记住:这些模型中的每一个都是在一组庞大的(公开可用的)数据上进行训练的。
到目前为止,已经清楚地表明,这些LLM对通用语言有着有意义的理解,并且他们能够(重新)产生与训练数据中存在的信息相关的信息。这就是为什么像ChatGPT这样的生成工具在回答LLM在培训过程中遇到的主题问题方面表现惊人。
【LLM】用LlamaIndex建立和评估QA保证体系
介绍
LlamaIndex(GPT Index)提供了一个将大型语言模型(LLM)与外部数据连接起来的接口。LlamaIndex提供了各种数据结构来索引数据,如列表索引、向量索引、关键字索引和树索引。它提供了高级API和低级API——高级API允许您仅用五行代码构建问题解答(QA)系统,而低级API允许您定制检索和合成的各个方面。
然而,将这些系统投入生产需要仔细评估整个系统的性能,即给定输入的输出质量。检索增强生成的评估可能具有挑战性,因为用户需要针对给定的上下文提出相关问题的数据集。为了克服这些障碍,LlamaIndex提供了问题生成和无标签评估模块。
在本博客中,我们将讨论使用问题生成和评估模块的三步评估过程:
- 从文档生成问题
- 使用LlamaIndex QueryEngine抽象生成问题的答案/源节点,该抽象管理LLM和数据索引之间的交互。
- 评估问题(查询)、答案和源节点是否匹配/内联