赞
踩
串联式编排调用链:SequentialChain
超长文本的转换 Transform Chain
实现条件判断的路由链:RouterChain
对于简单的大模型应用,单独使用语言模型(LLMs)是可以的。
但更复杂的大模型应用需要将 LLMs
和 Chat Models
链接在一起 - 要么彼此链接,要么与其他组件链接。
LangChain 为这种“链式”应用程序提供了 Chain
接口。
LangChain 以通用方式定义了 Chain
,它是对组件进行调用序列的集合,其中可以包含其他链
类继承关系:
bash
复制代码
Chain --> <name>Chain # Examples: LLMChain, MapReduceChain, RouterChain
python 复制代码 # 定义一个名为Chain的基础类 class Chain(Serializable, Runnable[Dict[str, Any], Dict[str, Any]], ABC): """为创建结构化的组件调用序列的抽象基类。 链应该用来编码对组件的一系列调用,如模型、文档检索器、其他链等,并为此序列提供一个简单的接口。 Chain接口使创建应用程序变得容易,这些应用程序是: - 有状态的:给任何Chain添加Memory可以使它具有状态, - 可观察的:向Chain传递Callbacks来执行额外的功能,如记录,这在主要的组件调用序列之外, - 可组合的:Chain API足够灵活,可以轻松地将Chains与其他组件结合起来,包括其他Chains。 链公开的主要方法是: - `__call__`:链是可以调用的。`__call__`方法是执行Chain的主要方式。它将输入作为一个字典接收,并返回一个字典输出。 - `run`:一个方便的方法,它以args/kwargs的形式接收输入,并将输出作为字符串或对象返回。这种方法只能用于一部分链,不能像`__call__`那样返回丰富的输出。 """ # 调用链 def invoke( self, input: Dict[str, Any], config: Optional[runnableConfig] = None ) -> Dict[str, Any]: """传统调用方法。""" return self(input, **(config or {})) # 链的记忆,保存状态和变量 memory: Optional[BaseMemory] = None """可选的内存对象,默认为None。 内存是一个在每个链的开始和结束时被调用的类。在开始时,内存加载变量并在链中传递它们。在结束时,它保存任何返回的变量。 有许多不同类型的内存,请查看内存文档以获取完整的目录。""" # 回调,可能用于链的某些操作或事件。 callbacks: Callbacks = Field(default=None, exclude=True) """可选的回调处理程序列表(或回调管理器)。默认为None。 在对链的调用的生命周期中,从on_chain_start开始,到on_chain_end或on_chain_error结束,都会调用回调处理程序。 每个自定义链可以选择调用额外的回调方法,详细信息请参见Callback文档。""" # 是否详细输出模式 verbose: bool = Field(default_factory=_get_verbosity) """是否以详细模式运行。在详细模式下,一些中间日志将打印到控制台。默认值为`langchain.verbose`。""" # 与链关联的标签 tags: Optional[List[str]] = None """与链关联的可选标签列表,默认为None。 这些标签将与对这个链的每次调用关联起来,并作为参数传递给在`callbacks`中定义的处理程序。 你可以使用这些来例如识别链的特定实例与其用例。""" # 与链关联的元数据 metadata: Optional[Dict[str, Any]] = None """与链关联的可选元数据,默认为None。 这些元数据将与对这个链的每次调用关联起来,并作为参数传递给在`callbacks`中定义的处理程序。 你可以使用这些来例如识别链的特定实例与其用例。"""
LLMChain 是agent调用的基本单元
LLMChain 是 LangChain 中最简单的链,作为其他复杂 Chains 和 Agents 的内部调用,被广泛应用。
一个LLMChain由PromptTemplate和语言模型(LLM or Chat Model)组成。它使用直接传入(或 memory 提供)的 key-value 来规范化生成 Prompt Template(提示模板),并将生成的 prompt (格式化后的字符串)传递给大模型,并返回大模型输出。
代码示例
ini 复制代码 import os from langchain.output_parsers import CommaSeparatedListOutputParser from langchain.prompts import PromptTemplate from langchain_openai import OpenAI from langchain.chains import LLMChain api_key = 'sk-xxx' os.environ["OPENAI_API_KEY"] = api_key serp_api = 'xxx' os.environ["SERPAPI_API_KEY"] = serp_api output_parser = CommaSeparatedListOutputParser() # 模版 template = """给制造{product}的有限公司 取10个名字, 给出完整的公司名称。 {format_instructions}""" # 预定义提示词 format_instructions = output_parser.get_format_instructions() # prompt提示词 prompt = PromptTemplate(input_variables=["product"], partial_variables={"format_instructions": format_instructions}, template=template) chain = LLMChain(prompt=prompt, llm=OpenAI()) output = chain.run("笔记本电脑") result = output_parser.parse(output) print(result) #输出内容 ['1. Lenovo Limited\n2. Dell Technologies Co.\n3. HP Inc.\n4. Acer Incorporated\n5. AsusTek Computer Inc.\n6. Apple Inc.\n7. Toshiba Corporation\n8. Samsung Electronics Co.', 'Ltd.\n9. Microsoft Corporation\n10. Fujitsu Limited']
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。