在编程的世界里,有时候我们就像是在玩乐高积木,一块接一块,直到我们构建出一个宏伟的城堡。今天,我们要探索的是Langchain这个神奇的乐高套装,它让我们能够将多个“链”(Chains)巧妙地连接起来,创造出令人惊叹的自动化魔法。
多链的魅力想象一下,你有一个聊天机器人,它不仅能回答你的问题,还能根据你的回答提出新的问题。这就是Langchain的多链功能——一个接一个的自动化流程,它们就像是一条条灵活的链条,可以根据需要自由组合和拆分。
代码案例一:从名人到地理首先,我们来看一个例子,这个例子将告诉我们如何从一个简单的问题开始,然后逐步深入到更复杂的信息中。比如,我们想知道奥巴马的故乡在哪里。
from operator import itemgetter
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
prompt1 = ChatPromptTemplate.from_template("{person}来自哪个城市?")
prompt2 = ChatPromptTemplate.from_template("这个城市{city}位于哪个国家?请用{language}回答")
model = ChatOpenAI()
chain1 = prompt1 | model | StrOutputParser()
chain2 = (
{"city": chain1, "language": itemgetter("language")}
| prompt2
| model
| StrOutputParser()
)
print(chain2.invoke({"person": "奥巴马", "language": "中文"}))
这个例子中,我们首先创建了两个模板,然后通过Langchain的管道操作符|,将它们和模型连接起来。最后,我们调用chain2.invoke方法,并传入奥巴马的名字,得到了他的故乡信息。
代码案例二:颜色的奇妙旅程接下来,我们来看一个更加多彩的例子。这次,我们要生成一个关于颜色的问题,然后找到对应颜色的水果和国家。
prompt1 = ChatPromptTemplate.from_template(
"生成一个{attribute}的颜色。只返回颜色名称:"
)
prompt2 = ChatPromptTemplate.from_template(
"这种{color}颜色的水果是什么?只返回水果名称:"
)
prompt3 = ChatPromptTemplate.from_template(
"哪个国家有这种{color}颜色的国旗?只返回国家名称"
)
prompt4 = ChatPromptTemplate.from_template(
"这种{fruit}的颜色和这个{country}国家的国旗颜色是什么?"
)
model_parser = model | StrOutputParser()
color_generator = (
{"attribute": RunnablePassthrough()}
| prompt1
| {"color": model_parser}
)
color_to_fruit = prompt2 | model_parser
color_to_country = prompt3 | model_parser
question_generator = (
color_generator
| {"fruit": color_to_fruit, "country": color_to_country}
| prompt4
)
print(question_generator.invoke("温暖"))
在这个例子中,我们首先生成了一个温暖的颜色,然后找到了这种颜色的水果和国家。最后,我们将这些信息组合成一个完整的问题,并打印出来。
分支与合并:多链的高级玩法Langchain的多链功能不仅仅是线性的,它还可以让我们创建复杂的分支和合并结构。这就像是在编程中玩“分身术”,我们可以让一个输入被多个组件并行处理,然后再将结果合并起来。
planner = (
ChatPromptTemplate.from_template("生成一个辩论,关于: {input}")
| model
| StrOutputParser()
| {"base_response": RunnablePassthrough()}
)
arguments_for = (
ChatPromptTemplate.from_template(
"列出{base_response}的优点或积极方面"
)
| model
| StrOutputParser()
)
arguments_against = (
ChatPromptTemplate.from_template(
"列出{base_response}的缺点或消极方面"
)
| model
| StrOutputParser()
)
final_responder = (
ChatPromptTemplate.from_messages(
[
("ai", "{original_response}"),
("human", "优点:\n{results_1}\n\n缺点:\n{results_2}"),
("system", "根据辩论生成最终回应"),
]
)
| model
| StrOutputParser()
)
chain = (
planner
| {
"results_1": arguments_for,
"results_2": arguments_against,
"original_response": itemgetter("base_response"),
}
| final_responder
)
print(chain.invoke({"input": "宗教"}))
在这个高级例子中,我们首先生成了一个关于宗教的争论,然后分别列出了它的优点和缺点。最后,我们将这些信息整合起来,生成了一个最终的回应。
结语Langchain的多链功能就像是编程界的瑞士军刀,它让我们能够灵活地构建复杂的自动化流程。无论是简单的问答,还是复杂的信息整合,Langchain都能让我们以一种优雅而高效的方式实现。所以,下次当你需要构建一个自动化的魔法链时,不妨试试Langchain,它可能会给你带来意想不到的惊喜!
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved