langchain
0.2.12¶
langchain.agents
¶
代理是一个使用LLM(大型语言模型)来选择一组动作的类。
在链(Chains)中,动作用硬编码的方式。在代理(Agents)中,使用语言模型作为推理引擎来确定执行哪些动作以及动作的顺序。
代理将选择并使用工具和工具包进行动作。
类层次结构
BaseSingleActionAgent --> LLMSingleActionAgent
OpenAIFunctionsAgent
XMLAgent
Agent --> <name>Agent # Examples: ZeroShotAgent, ChatAgent
BaseMultiActionAgent --> OpenAIMultiFunctionsAgent
主要助手
AgentType, AgentExecutor, AgentOutputParser, AgentExecutorIterator,
AgentAction, AgentFinish
类¶
函数¶
弃用类¶
弃用自版本 0.1.0: 使用 |
|
弃用自版本 0.1.0: 使用 |
|
|
弃用自版本 0.1.0: 使用 |
弃用自版本 0.1.0: 使用 |
|
弃用自版本 0.1.0: 使用 |
|
弃用自版本 0.1.0: 使用 |
|
弃用自版本 0.1.0。 |
|
弃用自版本 0.1.0: 使用 |
|
弃用自版本 0.1.0: 使用 |
|
|
弃用自版本 0.1.0: 使用 |
|
弃用自版本 0.1.0。 |
弃用自版本 0.1.0。 |
|
弃用自版本 0.1.0。 |
|
弃用自版本 0.1.0。 |
|
自版本0.1.0以来已弃用: 请使用 |
|
弃用自版本 0.1.0。 |
|
自版本0.1.0以来已弃用: 请使用 |
|
自版本0.1.0以来已弃用: 请使用 |
弃用的函数¶
|
弃用自版本 0.1.0: 使用 |
|
弃用自版本 0.1.0。 |
弃用自版本 0.1.0。 |
langchain.callbacks
¶
回调处理器允许监听LangChain中的事件。
类层次结构
BaseCallbackHandler --> <name>CallbackHandler # Example: AimCallbackHandler
类¶
返回异步迭代器的回调处理器。 |
|
|
返回异步迭代器的回调处理器。 |
|
为代理人提供流式处理的回调处理器。 |
通过输入Logger进行日志记录的跟踪器。 |
langchain.chains
¶
链是易于复用的组件。
链编码了对诸如模型、文档检索器、其他链等组件的一连串调用,并提供了一个简单的接口来访问这个序列。
链接口使得创建以下应用变得简单:
具有状态:将内存添加到任何链中,以使其具有状态,
可观察:将回调传递给链以执行额外的功能,如日志记录,在主要组件调用序列之外,
可组合:将链与其他组件结合,包括其他链。
类层次结构
Chain --> <name>Chain # Examples: LLMChain, MapReduceChain, RouterChain
类¶
执行API调用并总结响应以回答问题的链。 |
|
为创建组件调用序列的抽象基类。 |
|
组合文档的基接口。 |
|
通过映射链来组合文档,然后组合结果。 |
|
通过映射链来组合文档,然后重排名结果。 |
|
|
组合_docs方法的接口。 |
组合_docs方法的接口。 |
|
通过递归减少文档来组合文档。 |
|
通过先进行一次遍历然后对更多文档进行细化来组合文档。 |
|
通过将文档 Stuff 到上下文中来组合文档的链。 |
|
应用于宪法原则的链。 |
|
宪法原则的类。 |
|
|
与索引聊天的链。 |
与向量数据库聊天的链。 |
|
ConversationalRetrievalChain 的输入类型。 |
|
|
与 Elasticsearch 数据库交互的链。 |
结合检索器、问题生成器、回复生成器的链。 |
|
从不确定范围生成问题的链。 |
|
检查输出是否完毕的输出解析器。 |
|
为查询生成假设文档,并将其嵌入。 |
|
带有自验证的问答链。 |
|
解释提示并执行 Python 代码进行数学运算的链。 |
|
|
带有自验证的问答链。 |
Map-reduce 链。 |
|
通过审查端点传递输入。 |
|
实现由 LLM 驱动的浏览器。 |
|
网页爬虫。 |
|
包含视口中元素信息的类型化字典。 |
|
|
表示单个声明的类。 |
一个问题及其答案作为事实列表,每个事实应有一个来源。 |
|
向 API 端点发出简单请求的链。 |
|
包含来源的答案。 |
|
提示选择器的基类。 |
|
经过条件处理的提示集合。 |
|
对文档进行来源问答的问答链。 |
|
对文档进行来源问答。 |
|
加载组合文档链的接口。 |
|
|
在索引上进行来源问答。 |
在向量数据库上进行来源问答。 |
|
解析结构化查询的输出解析器。 |
|
ISO 8601 格式(YYYY-MM-DD)的日期。 |
|
数据源属性的信息。 |
|
加载组合文档链的接口。 |
|
问答链的基类。 |
|
针对向量数据库的问答链。 |
|
使用单个链将输入路由到多个候选链中的一个。 |
|
|
创建带有 destination 和 next_inputs 的新 Route 实例。 |
输出目标链名称及其输入的链。 |
|
使用嵌入式内容在选项之间进行路由的链。 |
|
使用 LLM 链进行路由的路由链。 |
|
多提示链中路由链输出的解析器。 |
|
使用 LLM 路由链在提示之间进行多路由的链。 |
|
使用 LLM 路由链在检索 QA 链之间进行多路由的链。 |
|
链式结构,其中一条链的输出直接输入到下一条链。 |
|
简单的链式结构,其中一步的输出直接输入到下一步。 |
|
SQL链的输入。 |
|
SQL链的输入。 |
|
加载组合文档链的接口。 |
|
转换链输出的链。 |
函数¶
已弃用类¶
自版本0.2.7弃用: 使用 |
|
自版本0.2.7弃用: 使用 |
|
|
自版本0.1.17弃用: 使用 |
自版本0.1.17弃用: 使用 |
|
自版本0.2.7弃用: 使用 |
|
自版本0.1.17弃用: 使用 |
已弃用函数¶
langchain.chat_models
¶
聊天模型 是语言模型的一种变体。
虽然聊天模型在底层使用语言模型,但它们暴露的接口略有不同。它们不是显示“文本输入、文本输出”API,而是提供一个接口,其中“聊天消息”是输入和输出。
类层次结构
BaseLanguageModel --> BaseChatModel --> <name> # Examples: ChatOpenAI, ChatGooglePalm
主要助手
AIMessage, BaseMessage, HumanMessage
函数¶
langchain.embeddings
¶
嵌入模型 是围绕不同 API 和服务的嵌入模型的一个包装器。
嵌入模型可以是LLM或者不是。
类层次结构
Embeddings --> <name>Embeddings # Examples: OpenAIEmbeddings, HuggingFaceEmbeddings
类别¶
用于缓存嵌入模型结果的接口。 |
langchain.evaluation
¶
评估用于评分LLM和链输出。
此模块包含现成的评估链,用于评分LangChain原语(如语言模型和链)的输出。
加载评估器
要加载评估器,可以使用带有关键字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
或在额外的参考标签存在时为LabeledPairwiseStringEvalChain
。评估智能体使用工具的效果:
TrajectoryEvalChain
检查输出是否符合一组标准:当存在参考标签时为
CriteriaEvalChain
或LabeledCriteriaEvalChain
。计算预测与参考之间的语义差异:为
EmbeddingDistanceEvalChain
或两个预测之间的:为PairwiseEmbeddingDistanceEvalChain
测量预测和参考之间的字符串距离或两个预测之间的距离 《StringDistanceEvalChain》 或 《PairwiseStringDistanceEvalChain》
低级别API
这些评估器实现了以下接口之一:
《StringEvaluator》:评估预测字符串与参考标签和/或输入上下文之间的比较。
《PairwiseStringEvaluator》:评估两个预测字符串之间的比较。适用于评分偏好、测量链或llm代理之间的相似性,或比较类似输入上的输出。
《AgentTrajectoryEvaluator》:评估代理所采取的全部动作序列。
这些接口使在高级评估框架中使用它们变得更加容易。
类¶
包含轨迹的评分和推理的命名元组。 |
|
用于评估ReAct风格代理的链。 |
|
|
轨迹输出解析器。 |
|
比较两个输出(如输出)的链 |
比较两个输出(如输出)的链 |
|
|
对PairwiseStringEvalChain输出的解析器。 |
用于评估的准则。 |
|
LLM Chain,用于根据准则评估运行。 |
|
对CriteriaEvalChain输出的解析器。 |
|
需要参考的准则评估链。 |
|
嵌入距离度量标准。 |
|
|
使用嵌入距离来评分预测与参考之间的语义差异。 |
|
使用嵌入距离来评分两个预测之间的语义差异。 |
计算预测和参考之间的精确匹配。 |
|
评估在……之后,预测是否等于参考 |
|
评估预测是否是有效的JSON。 |
|
|
一个计算JSON字符串之间编辑距离的评估器。 |
一个评估JSON预测与JSON参考架构的验证器。 |
|
LLM Chain,用于根据上下文评估QA w/o GT。 |
|
基于思维链评估问答的LLM链。 |
|
用于评估问答的LLM链。 |
|
用于生成问答实例的LLM链。 |
|
计算预测结果与参考之间的正则表达式匹配。 |
|
用于评估代理轨迹的接口。 |
|
评估器的类型。 |
|
用于使用LLM的评估器的基类。 |
|
比较两个模型(或同一模型的两个输出)的输出。 |
|
相对于输入和/或参考标签对预测进行评分、标记或进行其他评估。 |
|
用于在1-10的范围内对模型的输出进行评分的链。 |
|
用于在1-10的范围内对模型的输出进行评分的链。 |
|
用于解析ScoreStringEvalChain输出的解析器。 |
|
|
计算两个预测之间的字符串编辑距离。 |
要使用的距离度量。 |
|
计算预测和参考之间的字符串距离。 |
函数¶
|
解决成对评估器的标准。 |
解决要评估的标准。 |
|
从HuggingFace上的LangChainDatasets加载数据集。 |
|
|
根据字符串加载指定的评估链。 |
|
根据评估器类型列表加载评估器。 |
解决成对评估器的标准。 |
langchain.globals
¶
适用于LangChain的全部的全局值和配置。
函数¶
获取全局设置debug的值。 |
|
获取全局设置llm_cache的值。 |
|
获取全局设置verbose的值。 |
|
|
为全局设置 debug 设置新的值。 |
|
设置新的 LLM 缓存,如果存在则覆盖之前的值。 |
|
为全局设置 verbose 设置新的值。 |
langchain.hub
¶
与 LangChain Hub 进行接口。
函数¶
|
从 hub 获取一个对象,并以 LangChain 对象的形式返回它。 |
|
将对象推送到 hub,并在浏览器中返回其可查看的 URL。 |
langchain.indexes
¶
索引 用于避免将重复内容写入 vectostore,以及避免在内容未改变的情况下覆盖内容。
索引也
从数据创建知识图谱。
支持从 LangChain 数据加载器到 vectorstores 的索引工作流程。
重要的是,即使在写入的内容是由某些来源内容(如通过截块从父文档派生出的子文档)的一组转换得出时,索引仍然可以正常工作。
类¶
围绕 vectorstore 的包装,以实现易于访问。 |
|
创建索引的逻辑。 |
langchain.memory
¶
内存 维护链状态,结合历史运行中的上下文。
内存的类分层
BaseMemory --> BaseChatMemory --> <name>Memory # Examples: ZepMemory, MotorheadMemory
主要助手
BaseChatMessageHistory
聊天气息历史 存储在不同存储中的聊天气息历史。
ChatMessageHistory 的类分层
BaseChatMessageHistory --> <name>ChatMessageHistory # Example: ZepChatMessageHistory
主要助手
AIMessage, BaseMessage, HumanMessage
类¶
存储对话内存的缓冲区。 |
|
存储对话内存的缓冲区。 |
|
在有限大小窗口内存储对话内存的缓冲区。 |
|
聊天内存的抽象基类。 |
|
将多个内存的数据合并在一起。 |
|
实体存储的抽象基类。 |
|
实体提取器 & 摘要器内存。 |
|
内存中的实体存储。 |
|
Redis 支持的实体存储。 |
|
SQLite 支持的实体存储 |
|
Upstash Redis 支持的实体存储。 |
|
只读内存包装,不能更改。 |
|
简单的内存,用于存储在提示之间永远不会更改的上下文或其他信息。 |
|
将对话摘要器添加到聊天内存中。 |
|
摘要器的混合。 |
|
带有摘要器的缓冲区,用于存储对话内存。 |
|
具有令牌限制的对话聊天内存。 |
|
以VectorStoreRetriever为后端的内存。 |
|
|
拥有令牌限制和向量数据库后端的会话聊天内存。 |
函数¶
|
获取提示输入键。 |
langchain.model_laboratory
¶
实验不同的模型。
类¶
|
实验不同的模型。 |
langchain.output_parsers
¶
OutputParser 类解析LLM调用输出。
类层次结构
BaseLLMOutputParser --> BaseOutputParser --> <name>OutputParser # ListOutputParser, PydanticOutputParser
主要助手
Serializable, Generation, PromptValue
类¶
解析LLM调用的输出为布尔值。 |
|
将多个输出解析器合并为一个。 |
|
解析LLM调用的输出为日期和时间。 |
|
解析属于一组值的输出。 |
|
包装解析器,并尝试修复解析错误。 |
|
使用Pandas DataFrame格式解析输出。 |
|
使用正则表达式解析LLM调用的输出。 |
|
使用正则表达式将LLM调用的输出解析为字典。 |
|
包装解析器,并尝试修复解析错误。 |
|
包装解析器,并尝试修复解析错误。 |
|
|
|
结构化输出解析器响应的架构。 |
|
解析LLM调用的输出为结构化输出。 |
|
使用pydantic模型解析YAML输出。 |
函数¶
加载输出解析器。 |
langchain.retrievers
¶
Retriever 类根据文本查询返回文档。
它比向量存储更通用。检索器不需要能够存储文档,只需返回(或检索)它。向量存储可以用作检索器的骨干,但也有其他类型的检索器。
类层次结构
BaseRetriever --> <name>Retriever # Examples: ArxivRetriever, MergerRetriever
主要助手
Document, Serializable, Callbacks,
CallbackManagerForRetrieverRun, AsyncCallbackManagerForRetrieverRun
类¶
函数¶
|
返回压缩链输入。 |
|
返回压缩链输入。 |
|
基于键函数产生迭代器的唯一元素。 |
弃用类¶
自版本 0.0.30 弃用: 请使用 |
langchain.runnables
¶
LangChain Runnable 和 LangChain 表达式语言 (LCEL)。
LangChain 表达式语言 (LCEL) 提供了一种声明式方法来构建利用LLM力量的生产级程序。
使用LCEL和LangChain Runnables创建的程序天生就支持同步、异步、批量和实时流操作。
异步 支持允许托管基于LCEL的程序的服务器更好地扩展以处理更高的并发负载。
批量 操作允许并行处理多个输入。
实时输出中间输出,它们正在生成,允创建更响应的UX。
此模块包含非核心Runnable类。
类¶
存储在LangChain Hub中的runnable的一个实例。 |
|
ChatOpenAI的函数描述。 |
|
将路由到选定功能的runnable。 |
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
# Chains may have memory. Passing in a constructor function lets the
# evaluation framework avoid cross-contamination between runs.
def construct_chain():
llm = ChatOpenAI(temperature=0)
chain = LLMChain.from_string(
llm,
"What's the answer to {your_input_key}"
)
return chain
# Load off-the-shelf evaluators via config or the EvaluatorType (string or enum)
evaluation_config = RunEvalConfig(
evaluators=[
"qa", # "Correctness" against a reference answer
"embedding_distance",
RunEvalConfig.Criteria("helpfulness"),
RunEvalConfig.Criteria({
"fifth-grader-score": "Do you have to be smarter than a fifth grader to answer this question?"
}),
]
)
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 传递。
类¶
特定运行评估器的配置。 |
|
运行评估的配置。 |
|
仅需要单个键的运行评估器的配置。 |
|
控制台上的简单进度条。 |
|
聊天模型的输入。 |
|
您的架构抛出错误。 |
|
当输入格式无效时引发。 |
|
单个测试运行结果的字典。 |
|
从链的运行对象中提取评估项。 |
|
从运行对象中提取评估项。 |
|
将示例或数据集中的行映射到评估输入。 |
|
|
评估运行和可选示例。 |
从运行对象中提取评估项。 |
|
将输入映射到工具。 |
函数¶
生成随机名称。 |
|
在数据集上运行链或语言模型,并将跟踪存储到指定的项目名称。 |
|
在数据集上运行链或语言模型,并将跟踪存储到指定的项目名称。 |
langchain.storage
¶
实现键值存储和存储辅助工具。
该模块提供了符合简单键值界面的各种键值存储的实现。
这些存储的主要目标是支持缓存的实现。
类¶
封装带有键和值编码器/解码器的存储。 |
|
|
工作在本地文件系统的底层存储接口。 |