langchain
0.2.0¶
langchain.agents
¶
Agent 是一个使用LLM来选择一系列动作的类。
在 Chains 中,一系列动作是硬编码的。在 Agents 中, 一个语言模型被用作推理引擎,以确定要采取哪些动作 以及以什么顺序采取这些动作。
Agents 选择并使用 Tools 和 Toolkits 来执行动作。
类层次结构:
BaseSingleActionAgent --> LLMSingleActionAgent
OpenAIFunctionsAgent
XMLAgent
Agent --> <name>Agent # 例如: ZeroShotAgent, ChatAgent
BaseMultiActionAgent --> OpenAIMultiFunctionsAgent
主要辅助功能:
AgentType, AgentExecutor, AgentOutputParser, AgentExecutorIterator,
AgentAction, AgentFinish
Classes¶
[Deprecated] 代理程序调用语言模型并决定动作。 |
|
使用工具的代理。 |
|
用于将代理输出解析为代理动作/完成的基类。 |
|
基础的多动作代理类。 |
|
基础的单动作代理类。 |
|
返回查询的工具。 |
|
[Deprecated] 用于单个动作代理的基类。 |
|
用于将代理输出解析为代理动作/完成的基类。 |
|
代理由可运行的任务驱动。 |
|
代理由可运行的任务驱动。 |
|
AgentExecutor的迭代器。 |
|
关于VectorStore的信息。 |
|
|
用于在向量存储之间进行路由的工具包。 |
|
与向量存储交互的工具包。 |
|
[Deprecated] 代理类型的枚举。 |
[Deprecated] 聊天机器人。 |
|
聊天代理的输出解析器。 |
|
[Deprecated] 一个除了使用工具外还能进行对话的代理程序。 |
|
对话代理的输出解析器。 |
|
[Deprecated] 一个旨在进行对话并使用工具的代理程序。 |
|
对话代理的输出解析器。 |
|
|
MRKL系统中用于链配置。 |
[Deprecated] [已弃用] 实现MRKL系统的链。 |
|
[Deprecated] MRKL链的代理。 |
|
MRKL输出解析器,用于聊天代理。 |
|
AgentAction 包含提交自定义工具输出到现有运行所需的信息。 |
|
代理完成运行和线程元数据。 |
|
运行一个OpenAI助手。 |
|
[Beta] 运行一个OpenAI助手。 |
|
|
用于保存代理输出和中间步骤的内存。 |
[Deprecated] 由OpenAI的功能驱动API的代理。 |
|
|
[Deprecated] 由OpenAI的功能驱动的代理。 |
解析工具调用和最终答案的JSON格式。 |
|
|
将消息解析为代理动作/完成。 |
|
将消息解析为代理动作/完成。 |
|
解析具有json格式中单个工具输入的ReAct风格LLM调用。 |
|
解析具有单个工具输入的ReAct风格LLM调用。 |
解析自问自答风格的LLM调用。 |
|
覆盖init以支持通过位置进行实例化,以实现向后兼容。 |
|
将消息解析为代理动作/完成。 |
|
解析工具调用和最终答案的XML格式。 |
|
|
[Deprecated] 用于辅助探索文档存储的类。 |
[Deprecated] [已弃用] 实现ReAct论文的链条。 |
|
[Deprecated] ReAct链的代理。 |
|
[Deprecated] ReAct TextWorld链的代理。 |
|
ReAct代理的输出解析器。 |
|
代理人备忘录的聊天提示模板。 |
|
[Deprecated] 自问自答搜索论文的代理。 |
|
[Deprecated] [已弃用] 执行自我询问并进行搜索的链。 |
|
[Deprecated] 结构化聊天机器人。 |
|
|
结构化聊天代理的输出解析器。 |
|
为结构化聊天代理设置带有重试功能的输出解析器。 |
当代理遇到无效的工具名称时运行的工具。 |
|
[Deprecated] 代理程序使用XML标记。 |
Functions¶
langchain.callbacks
¶
回调处理程序 允许监听LangChain中的事件。
类层次结构:
BaseCallbackHandler --> <name>CallbackHandler # 例如: AimCallbackHandler
Classes¶
回调处理程序,返回一个异步迭代器。 |
|
|
回调处理程序,返回一个异步迭代器。 仅迭代代理的最终输出。 |
|
代理流处理程序的回调函数。 仅适用于支持流式处理的LLM代理。 |
通过输入日志记录器记录的追踪器。 |
langchain.chains
¶
**链**是易于重复使用的组件,它们链接在一起。
链编码了对模型、文档检索器、其他链等组件的调用序列,并为这个序列提供了一个简单的接口。
链接口使得创建以下类型的应用程序变得容易:
有状态的: 为任何链添加内存以赋予其状态,
可观察的: 传递回调函数给链以执行额外功能,比如日志记录,超出组件调用主序列之外,
可组合的: 将链与其他组件(包括其他链)组合在一起。
类层次结构:
Chain --> <name>Chain # 例如:LLMChain, MapReduceChain, RouterChain
Classes¶
用于进行API调用并总结响应以回答问题的链。 |
|
用于创建组件调用序列的结构化序列的抽象基类。 |
|
链条,用于拆分文档,然后逐段分析。 |
|
用于组合文档的基本接口。 |
|
通过在文档上映射链,然后组合结果来合并文档。 |
|
将文档通过在其上映射链条,然后重新排列结果。 |
|
|
合并文档方法的接口。 |
合并文档方法的接口。 |
|
将文档通过递归方式合并。 |
|
将文档合并,首先进行第一遍处理,然后在更多文档上进行细化。 |
|
将文档通过填充内容组合的链。 |
|
应用宪法原则的链条。 |
|
用于宪法原则的类。 |
|
链条用于进行对话并从内存中加载上下文。 |
|
|
用于与索引进行聊天的链条。 |
用于与向量数据库进行聊天的链。 |
|
|
[Deprecated] 基于检索文档的对话链。 |
用于对话检索链的输入类型。 |
|
|
与Elasticsearch数据库交互的链。 |
结合检索器、问题生成器和回答生成器的链条。 |
|
从不确定范围生成问题的链。 |
|
检查输出是否已完成的输出解析器。 |
|
生成用于查询的假设文档,然后嵌入其中。 |
|
[Deprecated] 链式查询LLMs。 |
|
用于自我验证的问答链。 |
|
解释提示并执行Python代码进行数学计算的链条。 |
|
|
用于自我验证问答的链。 |
Map-reduce链。 |
|
通过审核端点传递输入。 |
|
实现一个由LLM驱动的浏览器。 |
|
一个用于网页的爬虫。 |
|
一个包含有关视口中元素信息的类型化字典。 |
|
|
代表单个语句的类。 |
一个问题及其答案,作为每个事实的列表,每个事实应该有一个来源。 每个句子包含一个主体和一个来源列表。 |
|
用于向API端点发出简单请求的链。 |
|
回答问题,并附上来源。 |
|
用于提示选择器的基类。 |
|
提示收集器,通过条件语句。 |
|
用于问题-答案生成链的基类。 |
|
在文档中带有来源的问答链。 |
|
在文档中使用来源进行问答。 |
|
用于加载合并文档链的接口。 |
|
|
在索引上使用来源进行问答。 |
使用向量数据库进行带来源的问答。 |
|
解析结构化查询的输出解析器。 |
|
一个以ISO 8601格式(YYYY-MM-DD)表示的日期。 |
|
关于数据源属性的信息。 |
|
加载合并文档链的接口。 |
|
用于问答链的基类。 |
|
[Deprecated] 用于针对索引进行问答的链。 |
|
用于针对向量数据库进行问答的链。 |
|
使用单一链将输入路由到多个候选链中的一个。 |
|
|
Create new instance of Route(destination, next_inputs) |
链条,输出目标链的名称和其输入。 |
|
使用嵌入来在选项之间路由的链。 |
|
使用LLM链进行路由的路由器链。 |
|
多提示链中路由器链输出的解析器。 |
|
一个多路线链,使用LLM路由器链来在提示之间进行选择。 |
|
一个多路线链,使用LLM路由器链来在检索qa链之间进行选择。 |
|
链式结构,其中一个链的输出直接输入到下一个链中。 |
|
简单的链式结构,其中一个步骤的输出直接作为下一个步骤的输入。 |
|
SQL链的输入。 |
|
SQL链的输入。 |
|
加载合并文档链的接口。 |
|
链条,用于转换链条输出。 |
Functions¶
langchain.embeddings
¶
嵌入模型 是对来自不同API和服务的嵌入模型的包装器。
嵌入模型 可以是LLMs,也可以不是。
类层次结构:
嵌入 --> <name>嵌入 # 例子: OpenAI嵌入, HuggingFace嵌入
Classes¶
用于缓存嵌入模型结果的接口。 |
langchain.evaluation
¶
评估 链用于对LLM和Chain输出进行评分。
该模块包含用于对语言链基元(如语言模型和链)的输出进行评分的现成评估链。
加载评估器
要加载评估器,可以使用 load_evaluators
或 load_evaluator
函数,并提供要加载的评估器名称。
from langchain.evaluation import load_evaluator
evaluator = load_evaluator("qa")
evaluator.evaluate_strings(
prediction="We sold more than 40,000 units last week",
input="How many units did we sell last week?",
reference="We sold 32,378 units",
)
评估器必须是 EvaluatorType
之一。
数据集
要加载LangChain HuggingFace数据集之一,可以使用 load_dataset
函数并提供要加载的数据集名称。
from langchain.evaluation import load_dataset
ds = load_dataset("llm-math")
评估的一些常见用例包括:
根据标准答案对响应的准确性进行评分:
QAEvalChain
比较两个模型的输出:
PairwiseStringEvalChain
或 :class:`LabeledPairwiseStringEvalChain <langchain.evaluation.comparison.eval_chain.LabeledPairwiseStringEvalChain>`(当还有参考标签时)。评估代理工具使用的有效性:
TrajectoryEvalChain
检查输出是否符合一组标准:
CriteriaEvalChain
或 :class:`LabeledCriteriaEvalChain <langchain.evaluation.criteria.eval_chain.LabeledCriteriaEvalChain>`(当还有参考标签时)。计算预测和参考之间的语义差异:
EmbeddingDistanceEvalChain
或计算两个预测之间的差异:PairwiseEmbeddingDistanceEvalChain
测量预测和参考之间的字符串距离:
StringDistanceEvalChain
或计算两个预测之间的距离:PairwiseStringDistanceEvalChain
低级API
这些评估器实现以下接口之一:
StringEvaluator
: 对预测字符串与参考标签和/或输入上下文进行评估。PairwiseStringEvaluator
: 对两个预测字符串进行相互评估。用于评分偏好、衡量两个链或LLM代理之间的相似性,或比较类似输入上的输出。AgentTrajectoryEvaluator
: 评估代理所采取的完整动作序列。
这些接口使得在更高级别的评估框架中更容易地进行组合和使用。
Classes¶
一个包含轨迹得分和推理的命名元组。 |
|
用于评估ReAct风格代理的链。 |
|
|
轨迹输出解析器。 |
|
一个用于比较两个输出的链条,比如两个模型的输出、提示或者在相似输入上单个模型的输出,带有标记的偏好。 |
一个用于比较两个输出的链条,比如两个模型的输出、提示或者在相似输入上单个模型的输出。 |
|
|
用于解析PairwiseStringEvalChain输出的解析器。 |
一个用于评估的标准。 |
|
LLM链用于根据标准评估运行。 |
|
一个用于解析CriteriaEvalChain输出的解析器。 |
|
需要引用的标准评估链。 |
|
嵌入距离度量。 |
|
|
使用嵌入距离来评分预测和参考之间的语义差异。 |
|
使用嵌入距离来评估两个预测之间的语义差异。 |
计算预测和参考之间的精确匹配。 |
|
评估是否在将预测和参考解析为JSON之后相等。 |
|
评估预测是否为有效的JSON。 |
|
|
一个计算JSON字符串之间编辑距离的评估器。 |
一个验证JSON预测与JSON模式引用的评估器。 |
|
用于根据上下文评估没有基于GT的QA的LLM链。 |
|
LLM链用于使用思维链推理评估问答。 |
|
用于评估问答的LLM链。 |
|
用于生成问答示例的LLM链。 |
|
计算预测值和参考值之间的正则表达式匹配。 |
|
用于评估代理轨迹的接口。 |
|
|
评估者的类型。 |
一个使用LLM的评估器的基类。 |
|
比较两个模型的输出(或同一模型的两个输出)。 |
|
根据输入和/或参考标签对预测结果进行评分、标记或以其他方式进行评估。 |
|
一个用于在1-10分数范围内评分模型输出的链。 |
|
一个用于在1-10分数范围内评分模型输出的链条。 |
|
一个用于解析ScoreStringEvalChain输出的解析器。 |
|
|
计算两个预测之间的字符串编辑距离。 |
距离度量标准。 |
|
计算预测值和参考值之间的字符串距离。 |
Functions¶
|
解析成对评估器的标准。 |
解析用于评估的标准。 |
|
从`HuggingFace上的LangChainDatasets <https://huggingface.co/LangChainDatasets>`_加载数据集。 |
|
|
加载指定的评估链。 |
|
加载由评估器类型列表指定的评估器。 |
解析成对评估器的标准。 |
langchain.hub
¶
与LangChain Hub进行接口交互。
Functions¶
|
从hub中拉取一个对象,并将其作为LangChain对象返回。 |
|
将对象推送到中心,并返回在浏览器中查看的URL。 |
langchain.indexes
¶
索引 用于避免将重复内容写入向量存储,并在内容未更改时避免覆盖内容。
索引还有:
从数据创建知识图。
支持从LangChain数据加载程序到向量存储的索引工作流程。
重要的是,即使正在写入的内容是通过一组转换从某些源内容派生出来的(例如,通过分块从父文档派生出子文档进行索引),索引仍将继续工作。
Classes¶
封装了一个向量存储,以便更容易访问。 |
|
创建索引的逻辑。 |
langchain.memory
¶
Memory 维护链状态,整合了过去运行的上下文。
Memory的类层次结构:
BaseMemory --> BaseChatMemory --> <name>Memory # 例如: ZepMemory, MotorheadMemory
主要辅助功能:
BaseChatMessageHistory
Chat Message History 存储不同存储中的聊天消息历史记录。
ChatMessageHistory的类层次结构:
BaseChatMessageHistory --> <name>ChatMessageHistory # 例如: ZepChatMessageHistory
主要辅助功能:
AIMessage, BaseMessage, HumanMessage
Classes¶
用于存储对话记忆的缓冲区。 |
|
用于存储对话记忆的缓冲区。 |
|
在有限大小窗口内存储对话记忆的缓冲区。 |
|
用于聊天记录的抽象基类。 |
|
将多个内存数据合并在一起。 |
|
实体存储的抽象基类。 |
|
实体提取器和总结器内存。 |
|
内存实体存储。 |
|
基于Redis的实体存储。 |
|
基于SQLite的实体存储 |
|
Upstash Redis支持的实体存储。 |
|
内存包装器,只读且不可更改。 |
|
用于存储上下文或其他信息的简单内存,这些信息在提示之间不应该发生变化。 |
|
对话总结器到聊天记忆。 |
|
摘要生成器的Mixin。 |
|
用于存储对话记忆的带有总结器的缓冲区。 |
|
对话聊天内存,带有令牌限制。 |
|
基于VectorStoreRetriever的内存。 |
Functions¶
|
获取提示输入键。 |
langchain.model_laboratory
¶
尝试不同的模型。
Classes¶
|
尝试不同的模型。 |
langchain.output_parsers
¶
OutputParser 类用于解析LLM调用的输出。
类层次结构:
BaseLLMOutputParser --> BaseOutputParser --> <name>OutputParser # ListOutputParser, PydanticOutputParser
主要辅助类:
Serializable, Generation, PromptValue
Classes¶
将LLM调用的输出解析为布尔值。 |
|
将多个输出解析器合并为一个。 |
|
将LLM调用的输出解析为datetime。 |
|
解析一个属于一组值之一的输出。 |
|
封装一个解析器并尝试修复解析错误。 |
|
使用Pandas DataFrame格式解析输出。 |
|
使用正则表达式解析LLM调用的输出。 |
|
使用正则表达式将LLM调用的输出解析为字典。 |
|
封装一个解析器并尝试修复解析错误。 |
|
封装一个解析器并尝试修复解析错误。 |
|
用于结构化输出解析器响应的模式。 |
|
解析LLM调用的输出,转换为结构化输出。 |
|
使用pydantic模型解析YAML输出。 |
Functions¶
加载一个输出解析器。 |
langchain.retrievers
¶
Retriever类根据文本查询返回文档。
它比向量存储更通用。检索器不需要能够存储文档,只需要返回(或检索)它。向量存储可以用作检索器的支柱,但也有其他类型的检索器。
类层次结构:
BaseRetriever --> <name>Retriever # 例如:ArxivRetriever, MergerRetriever
主要辅助功能:
Document, Serializable, Callbacks,
CallbackManagerForRetrieverRun, AsyncCallbackManagerForRetrieverRun
Classes¶
Functions¶
|
返回压缩链的输入。 |
|
返回压缩链输入。 |
|
基于键函数,生成可迭代对象的唯一元素。 |
langchain.runnables
¶
LangChain Runnable 和 LangChain 表达式语言 (LCEL) 。
LangChain 表达式语言 (LCEL) 提供了一种声明性方法来构建利用 LLMs 强大功能的生产级程序。
使用 LCEL 和 LangChain Runnable 创建的程序天然支持同步、异步、批处理和流处理操作。
支持 async 允许托管基于 LCEL 的程序的服务器更好地扩展以处理更高的并发负载。
Batch 操作允许并行处理多个输入。
在生成中间输出时进行 Streaming ,允许创建更具响应性的用户体验。
此模块包含非核心的 Runnable 类。
Classes¶
一个存储在LangChain Hub中的可运行实例。 |
|
ChatOpenAI的函数描述 |
|
一个可运行的程序,用于路由到所选的函数。 |
langchain.smith
¶
LangSmith 实用工具。
该模块提供了连接到 LangSmith 的实用工具。有关LangSmith的更多信息,请参阅 LangSmith文档。
评估
LangSmith可帮助您使用多个LangChain评估器评估链和其他语言模型应用组件。
下面是一个示例,假设您已经创建了一个名为 <my_dataset_name>
的LangSmith数据集:
from langsmith import Client
from langchain_community.chat_models import ChatOpenAI
from langchain.chains import LLMChain
from langchain.smith import RunEvalConfig, run_on_dataset
# 链可能具有内存。通过传入构造函数,评估框架可以避免运行之间的交叉污染。
def construct_chain():
llm = ChatOpenAI(temperature=0)
chain = LLMChain.from_string(
llm,
"What's the answer to {your_input_key}"
)
return chain
# 通过配置或EvaluatorType(字符串或枚举)加载现成的评估器
evaluation_config = RunEvalConfig(
evaluators=[
"qa", # 对参考答案的“正确性”
"embedding_distance",
RunEvalConfig.Criteria("helpfulness"),
RunEvalConfig.Criteria({
"fifth-grader-score": "回答这个问题是否需要比五年级生更聪明?"
}),
]
)
client = Client()
run_on_dataset(
client,
"<my_dataset_name>",
construct_chain,
evaluation=evaluation_config,
)
您还可以通过子类化 StringEvaluator
或LangSmith的 RunEvaluator 类来创建自定义评估器。
from typing import Optional
from langchain.evaluation import StringEvaluator
class MyStringEvaluator(StringEvaluator):
@property
def requires_input(self) -> bool:
return False
@property
def requires_reference(self) -> bool:
return True
@property
def evaluation_name(self) -> str:
return "exact_match"
def _evaluate_strings(self, prediction, reference=None, input=None, **kwargs) -> dict:
return {"score": prediction == reference}
evaluation_config = RunEvalConfig(
custom_evaluators = [MyStringEvaluator()],
)
run_on_dataset(
client,
"<my_dataset_name>",
construct_chain,
evaluation=evaluation_config,
)
主要功能
arun_on_dataset
: 用于在数据集上评估链、代理或其他LangChain组件的异步函数。run_on_dataset
: 用于在数据集上评估链、代理或其他LangChain组件的函数。RunEvalConfig
: 代表运行评估的配置的类。您可以通过EvaluatorType
或配置选择评估器,或者可以传入 custom_evaluators。
Classes¶
给定运行评估器的配置。 |
|
运行评估的配置。 |
|
运行评估器的配置,只需要一个键。 |
|
一个简单的控制台进度条。 |
|
用于聊天模型的输入。 |
|
您的架构引发了一个错误。 |
|
当输入格式无效时引发。 |
|
一个单次测试运行结果的字典。 |
|
从链中的运行对象中提取要评估的项目。 |
|
从运行对象中提取要评估的项目。 |
|
将数据集中的一个示例或行映射到评估的输入。 |
|
|
评估运行和可选示例。 |
从运行对象中提取要评估的项目。 |
|
将输入映射到工具。 |
Functions¶
生成一个随机名称。 |
|
Run the Chain or language model on a dataset and store traces to the specified project name. |
|
Run the Chain or language model on a dataset and store traces to the specified project name. |
langchain.storage
¶
实现键值存储和存储助手。
该模块提供了符合简单键值接口的各种键值存储的实现。
这些存储的主要目标是支持缓存的实现。
Classes¶
使用键和值编码器/解码器包装存储。 |
|
|
基于本地文件系统的BaseStore接口。 |