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提供了多种调用方式:
- 直接调用:
result = chain("input")
- run方法:
result = chain.run("input")
- predict方法:
result = chain.predict(input_var="input")
- apply方法(批量处理):
results = chain.apply([{"input": "A"}, {"input": "B"}])
- generate方法(返回详细信息):
result = chain.generate([{"input": "test"}])
总结
Chain是LangChain中的核心概念之一,它通过:
- 将复杂的处理流程模块化
- 提供多种预置Chain类型
- 支持Chain之间的组合
- 提供灵活的调用方式
使得我们能够更容易地构建复杂的LLM应用。在实际应用中,我们可以根据需求选择合适的Chain类型,并将它们组合起来实现所需的功能。
参考资料
- LangChain官方文档
- LangChain GitHub仓库
本文来自博客园,作者:ling-yuan,转载请注明原文链接:https://www.cnblogs.com/ling-yuan/p/19053245

浙公网安备 33010602011771号