当前位置:   article > 正文

大模型应用的最佳实践Chains, Chain代码剖析、llmchain示例_大模型链架构(chain)

大模型链架构(chain)

各种chain的介绍

  • 串联式编排调用链:SequentialChain

    • 流水线 胶水代码逻辑处理
    • 具备编排逻辑 串行 one by one的调用
    • 上一个chain的输出 作为 下一个chain的输入
  • 超长文本的转换 Transform Chain

    • pdf文件处理
    • 提供了套壳的能力 将python处理字符串的能力 套用进来 完成数据的格式化处理
  • 实现条件判断的路由链:RouterChain

    • 复杂逻辑 条件判断
    • 组合routerchain 目标链 通过条件判断 选择对应的目标链进行调用

LangChain 核心模块学习:Chains

对于简单的大模型应用,单独使用语言模型(LLMs)是可以的。

但更复杂的大模型应用需要将 LLMsChat Models 链接在一起 - 要么彼此链接,要么与其他组件链接。

LangChain 为这种“链式”应用程序提供了 Chain 接口。

LangChain 以通用方式定义了 Chain,它是对组件进行调用序列的集合,其中可以包含其他链

Chain Class 基类

类继承关系:

bash
复制代码
Chain --> <name>Chain  # Examples: LLMChain, MapReduceChain, RouterChain
  • 1
  • 2
  • 3

代码实现:github.com/langchain-a…

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`中定义的处理程序。
    你可以使用这些来例如识别链的特定实例与其用例。"""
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

LLMChain

LLMChain 是agent调用的基本单元

LLMChain 是 LangChain 中最简单的链,作为其他复杂 Chains 和 Agents 的内部调用,被广泛应用。

一个LLMChain由PromptTemplate和语言模型(LLM or Chat Model)组成。它使用直接传入(或 memory 提供)的 key-value 来规范化生成 Prompt Template(提示模板),并将生成的 prompt (格式化后的字符串)传递给大模型,并返回大模型输出。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

示例-LLMChain 公司取名

代码示例

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']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/904679
推荐阅读