Chain Class 基类

Chain Class 基类

类继承关系:

Chain --> <name>Chain  # Examples: LLMChain, MapReduceChain, RouterChain

代码实现:https://github.com/langchain-ai/langchain/blob/master/libs/langchain/langchain/chains/base.py

# 定义一个名为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

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

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

在这里插入图片描述
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

llm = OpenAI(temperature=0.9, max_tokens=500)

prompt = PromptTemplate(
input_variables=[“product”],
template=“给制造{product}的有限公司取10个好名字,并给出完整的公司名称”,
)

from langchain.chains import LLMChain

chain = LLMChain(llm=llm, prompt=prompt)
print(chain.run({
‘product’: “性能卓越的GPU”
}))

chain.verbose = True

print(chain.run({
‘product’: “性能卓越的GPU”
}))

Sequential Chain

串联式调用语言模型(将一个调用的输出作为另一个调用的输入)。

顺序链(Sequential Chain )允许用户连接多个链并将它们组合成执行特定场景的流水线(Pipeline)。有两种类型的顺序链:

  • SimpleSequentialChain:最简单形式的顺序链,每个步骤都具有单一输入/输出,并且一个步骤的输出是下一个步骤的输入。
  • SequentialChain:更通用形式的顺序链,允许多个输入/输出。

使用 SimpleSequentialChain 实现戏剧摘要和评论(单输入/单输出)

在这里插入图片描述

这是一个 LLMChain,用于根据剧目的标题撰写简介。

llm = OpenAI(temperature=0.7, max_tokens=1000)

template = “”"你是一位剧作家。根据戏剧的标题,你的任务是为该标题写一个简介。

标题:{title}
剧作家:以下是对上述戏剧的简介:“”"

prompt_template = PromptTemplate(input_variables=[“title”], template=template)
synopsis_chain = LLMChain(llm=llm, prompt=prompt_template)

这是一个LLMChain,用于根据剧情简介撰写一篇戏剧评论。

llm = OpenAI(temperature=0.7, max_tokens=1000)

template = “”"你是《纽约时报》的戏剧评论家。根据剧情简介,你的工作是为该剧撰写一篇评论。

剧情简介:
{synopsis}

以下是来自《纽约时报》戏剧评论家对上述剧目的评论:“”"

prompt_template = PromptTemplate(input_variables=[“synopsis”], template=template)
review_chain = LLMChain(llm=llm, prompt=prompt_template)

在这里插入图片描述

这是一个SimpleSequentialChain,按顺序运行这两个链

from langchain.chains import SimpleSequentialChain

overall_chain = SimpleSequentialChain(chains=[synopsis_chain, review_chain], verbose=True)

review = overall_chain.run(“三体人不是无法战胜的”)

review = overall_chain.run(“星球大战第九季”)
在这里插入图片描述

# 这是一个 LLMChain,根据剧名和设定的时代来撰写剧情简介。

llm = OpenAI(temperature=.7, max_tokens=1000)
template = “”"你是一位剧作家。根据戏剧的标题和设定的时代,你的任务是为该标题写一个简介。

标题:{title}
时代:{era}
剧作家:以下是对上述戏剧的简介:“”"

prompt_template = PromptTemplate(input_variables=[“title”, “era”], template=template)

output_key

synopsis_chain = LLMChain(llm=llm, prompt=prompt_template, output_key=“synopsis”, verbose=True)

这是一个LLMChain,用于根据剧情简介撰写一篇戏剧评论。

template = “”"你是《纽约时报》的戏剧评论家。根据该剧的剧情简介,你需要撰写一篇关于该剧的评论。

剧情简介:
{synopsis}

来自《纽约时报》戏剧评论家对上述剧目的评价:“”"

prompt_template = PromptTemplate(input_variables=[“synopsis”], template=template)
review_chain = LLMChain(llm=llm, prompt=prompt_template, output_key=“review”, verbose=True)

from langchain.chains import SequentialChain

m_overall_chain = SequentialChain(
chains=[synopsis_chain, review_chain],
input_variables=[“era”, “title”],
# Here we return multiple variables
output_variables=[“synopsis”, “review”],
verbose=True)

m_overall_chain({“title”:“三体人不是无法战胜的”, “era”: “二十一世纪的新中国”})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值