LangChain --- Chain

LangChain --- Chain

什么是Chain?

Chain(链)是LangChain中的一个核心概念,它可以将多个组件串联起来形成一个完整的处理流程。Chain的设计理念简单但强大,它通过将不同的组件链接在一起,使得复杂应用程序的实现更加模块化,便于调试和维护。

在LangChain中,Chain可以:

  • 将多个组件串联成一个处理流程
  • 组件之间可以是模型与模型的链接,也可以是模型与其他组件的链接
  • Chain本身也可以作为组件被其他Chain使用

常见的Chain类型

1. LLMChain

LLMChain是最基础也是最常用的Chain类型。它整合了PromptTemplate、语言模型和OutputParser,相当于把整个Model I/O的流程封装到一个Chain中。

基本使用示例:

from langchain import PromptTemplate, OpenAI, LLMChain

# 创建模板
template = "{flower}的花语是?"

# 创建LLMChain
llm = OpenAI(temperature=0)
llm_chain = LLMChain(
    llm=llm,
    prompt=PromptTemplate.from_template(template)
)

# 调用chain
result = llm_chain("玫瑰")
print(result)

2. SequentialChain

SequentialChain可以将多个LLMChain按顺序连接起来,前一个Chain的输出可以作为后一个Chain的输入。

例如,我们可以构建一个写花店推文的流程:

# 第一个chain:生成花的介绍
introduction_chain = LLMChain(
    llm=llm,
    prompt=intro_template,
    output_key="introduction"
)

# 第二个chain:根据介绍写评论
review_chain = LLMChain(
    llm=llm, 
    prompt=review_template,
    output_key="review"
)

# 第三个chain:根据介绍和评论写推文
social_chain = LLMChain(
    llm=llm,
    prompt=social_template,
    output_key="social_post"
)

# 将三个chain串联起来
overall_chain = SequentialChain(
    chains=[introduction_chain, review_chain, social_chain],
    input_variables=["flower_name"],
    output_variables=["introduction", "review", "social_post"]
)

3. RouterChain

RouterChain可以根据输入内容的不同,将请求路由到不同的Chain上进行处理。它通常包含:

  • router_chain: 用于决定使用哪个目标chain
  • destination_chains: 可供选择的目标chain集合
  • default_chain: 当无法路由时的默认chain

示例代码:

# 构建路由chain
chain = MultiPromptChain(
    router_chain=router_chain,
    destination_chains=chain_map,
    default_chain=default_chain,
    verbose=True
)

# 测试路由功能
print(chain.run("如何为玫瑰浇水?"))  # 路由到养护chain
print(chain.run("如何布置婚礼花艺?")) # 路由到装饰chain
print(chain.run("今天天气如何?"))     # 使用默认chain

Chain的调用方式

Chain提供了多种调用方式:

  1. 直接调用:
result = chain("input")
  1. run方法:
result = chain.run("input")
  1. predict方法:
result = chain.predict(input_var="input")
  1. apply方法(批量处理):
results = chain.apply([{"input": "A"}, {"input": "B"}])
  1. generate方法(返回详细信息):
result = chain.generate([{"input": "test"}])

总结

Chain是LangChain中的核心概念之一,它通过:

  • 将复杂的处理流程模块化
  • 提供多种预置Chain类型
  • 支持Chain之间的组合
  • 提供灵活的调用方式

使得我们能够更容易地构建复杂的LLM应用。在实际应用中,我们可以根据需求选择合适的Chain类型,并将它们组合起来实现所需的功能。

参考资料

posted @ 2024-11-27 14:34  ling-yuan  阅读(13)  评论(0)    收藏  举报  来源