简介langchain中提供的chain链组件能够帮助我门快速的实现各个组件的流水线式的调用和模型的问答Chain链的组成根据查阅的资料langchain的chain链结构如下$$Input \rightarrow Prompt \rightarrow Model \rightarrow Output$$其中langchain框架提供了几个常用构建chain链的工具工具名称作用流程RunnablePassthrough传递原本的数据或添加新的字段$$A-B$$RunnableParallel并发输出结果并将结果同时传递$$A,B-C$$RunnableLambda自定义传递工具乍一看很疑惑我接下来用案例来解释各种用法。构建较为复杂的chain链这个案例几乎用了上面所有工具用于演示用法案例案例描述输入论文的话题写一篇950字的高中论文。import os from langchain_community.chat_models.tongyi import ChatTongyi from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough, RunnableParallel #你的qwen模型apikey os.environ[DASHSCOPE_API_KEY] apikey model ChatTongyi(modelqwen-max) outline_prompt ChatPromptTemplate.from_template( 请给主题为 {topic} 的议论文写一个 总-递进-总 的简短大纲一共分为5段。 ) outline_chain outline_prompt | model | StrOutputParser() def mock_search(input_data): return 1. 利Google Health AI 筛查乳腺癌准确率超人类。 2. 利AlphaFold 预测蛋白质结构缩短科研周期。 3. 弊GPT-4 普及导致初级文案、原画设计岗位萎缩。 4. 弊Deepfake 技术被用于电信诈骗和虚假视频。 output_prompt ChatPromptTemplate.from_template( 你是一位高考作文专家。请基于大纲\n{outline}\n并结合以下案例素材\n{data}\n 就主题【{topic}】写一篇高考论文。要求950字左右论证严密文采斐然。 ) output_chain output_prompt | model | StrOutputParser() complex_chain ( RunnableParallel({ outline: outline_chain, data: mock_search, topic: RunnablePassthrough() }) | output_chain ) topic_input AI 进步的利与弊在智能时代保持人类的温度 print(f正在为您撰写关于《{topic_input}》的论文...\n) final_essay complex_chain.invoke({topic: topic_input}) print(final_essay)代码解释其他的代码我上期解释了这里就不废话了我着重讲chain链的构建总体chain链的流程如下输入话题-获取写作的大纲 ──╮ ├─▶ 根据大纲和示例写一篇论文 查询相关的示例 ──╯根据输入流程图流程我们个以分解成一个个相关的链再将各个链串起来。构建各部分的链1.获取写作大纲outline_prompt ChatPromptTemplate.from_template( 请给主题为 {topic} 的议论文写一个 总-递进-总 的简短大纲一共分为5段。 ) outline_chain outline_prompt | model | StrOutputParser()流程描述构建prompt-喂给ai-将返回解析成文本这里用的ChatPromptTemplate.from_template和上的ChatPromptTemplate.from_messages不同区别在于前者比较简单相当于后者直接用user字典的形式后者from_messages有langchain框架提供的prompt模板2.查询相关的示例这里就直接用Geminimock一些模拟数据不保证真用于完成案例实际情况可以自己完善搜索逻辑。def mock_search(input_data): return 1. 利Google Health AI 筛查乳腺癌准确率超人类。 2. 利AlphaFold 预测蛋白质结构缩短科研周期。 3. 弊GPT-4 普及导致初级文案、原画设计岗位萎缩。 4. 弊Deepfake 技术被用于电信诈骗和虚假视频。 这个相当于RanableLamda,后面可以不用显示调用RanableLamda(mock_search)3. 根据大纲和示例写一篇论文output_prompt ChatPromptTemplate.from_template( 你是一位高考作文专家。请基于大纲\n{outline}\n并结合以下案例素材\n{data}\n 就主题【{topic}】写一篇高考论文。要求950字左右论证严密文采斐然。 ) output_chain output_prompt | model | StrOutputParser()流程描述构建prompt-喂给ai-将返回解析成文本将各个链连起来complex_chain ( RunnableParallel({ outline: outline_chain, data: mock_search, topic: RunnablePassthrough() }) | output_chain )这里利用RunnableParallel将获取写作的大纲和查询相关的示例两个流程并列运行后一起输出到后面传递给output_chain继续处理。问题我不想利用RunnableParallel行不行当然可以可以用线性来代替先查资料后写大纲然后再进行文章输出但是效率可能会比较慢。我希望看到输出的data和outline字段怎么办可以利用RunnablePassthrough().assign将生成的文本保存在新的字段中调用时根据字典的方式定位各个文本如下complex_chain ( RunnableParallel({ outline: outline_chain, data: mock_search, topic: RunnablePassthrough() }) | RunnablePassthrough().assign(essayoutput_chain) ) print(response[essay]) print(response[data]) ......
langchain 快速入门(二): chain链的应用
简介langchain中提供的chain链组件能够帮助我门快速的实现各个组件的流水线式的调用和模型的问答Chain链的组成根据查阅的资料langchain的chain链结构如下$$Input \rightarrow Prompt \rightarrow Model \rightarrow Output$$其中langchain框架提供了几个常用构建chain链的工具工具名称作用流程RunnablePassthrough传递原本的数据或添加新的字段$$A-B$$RunnableParallel并发输出结果并将结果同时传递$$A,B-C$$RunnableLambda自定义传递工具乍一看很疑惑我接下来用案例来解释各种用法。构建较为复杂的chain链这个案例几乎用了上面所有工具用于演示用法案例案例描述输入论文的话题写一篇950字的高中论文。import os from langchain_community.chat_models.tongyi import ChatTongyi from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough, RunnableParallel #你的qwen模型apikey os.environ[DASHSCOPE_API_KEY] apikey model ChatTongyi(modelqwen-max) outline_prompt ChatPromptTemplate.from_template( 请给主题为 {topic} 的议论文写一个 总-递进-总 的简短大纲一共分为5段。 ) outline_chain outline_prompt | model | StrOutputParser() def mock_search(input_data): return 1. 利Google Health AI 筛查乳腺癌准确率超人类。 2. 利AlphaFold 预测蛋白质结构缩短科研周期。 3. 弊GPT-4 普及导致初级文案、原画设计岗位萎缩。 4. 弊Deepfake 技术被用于电信诈骗和虚假视频。 output_prompt ChatPromptTemplate.from_template( 你是一位高考作文专家。请基于大纲\n{outline}\n并结合以下案例素材\n{data}\n 就主题【{topic}】写一篇高考论文。要求950字左右论证严密文采斐然。 ) output_chain output_prompt | model | StrOutputParser() complex_chain ( RunnableParallel({ outline: outline_chain, data: mock_search, topic: RunnablePassthrough() }) | output_chain ) topic_input AI 进步的利与弊在智能时代保持人类的温度 print(f正在为您撰写关于《{topic_input}》的论文...\n) final_essay complex_chain.invoke({topic: topic_input}) print(final_essay)代码解释其他的代码我上期解释了这里就不废话了我着重讲chain链的构建总体chain链的流程如下输入话题-获取写作的大纲 ──╮ ├─▶ 根据大纲和示例写一篇论文 查询相关的示例 ──╯根据输入流程图流程我们个以分解成一个个相关的链再将各个链串起来。构建各部分的链1.获取写作大纲outline_prompt ChatPromptTemplate.from_template( 请给主题为 {topic} 的议论文写一个 总-递进-总 的简短大纲一共分为5段。 ) outline_chain outline_prompt | model | StrOutputParser()流程描述构建prompt-喂给ai-将返回解析成文本这里用的ChatPromptTemplate.from_template和上的ChatPromptTemplate.from_messages不同区别在于前者比较简单相当于后者直接用user字典的形式后者from_messages有langchain框架提供的prompt模板2.查询相关的示例这里就直接用Geminimock一些模拟数据不保证真用于完成案例实际情况可以自己完善搜索逻辑。def mock_search(input_data): return 1. 利Google Health AI 筛查乳腺癌准确率超人类。 2. 利AlphaFold 预测蛋白质结构缩短科研周期。 3. 弊GPT-4 普及导致初级文案、原画设计岗位萎缩。 4. 弊Deepfake 技术被用于电信诈骗和虚假视频。 这个相当于RanableLamda,后面可以不用显示调用RanableLamda(mock_search)3. 根据大纲和示例写一篇论文output_prompt ChatPromptTemplate.from_template( 你是一位高考作文专家。请基于大纲\n{outline}\n并结合以下案例素材\n{data}\n 就主题【{topic}】写一篇高考论文。要求950字左右论证严密文采斐然。 ) output_chain output_prompt | model | StrOutputParser()流程描述构建prompt-喂给ai-将返回解析成文本将各个链连起来complex_chain ( RunnableParallel({ outline: outline_chain, data: mock_search, topic: RunnablePassthrough() }) | output_chain )这里利用RunnableParallel将获取写作的大纲和查询相关的示例两个流程并列运行后一起输出到后面传递给output_chain继续处理。问题我不想利用RunnableParallel行不行当然可以可以用线性来代替先查资料后写大纲然后再进行文章输出但是效率可能会比较慢。我希望看到输出的data和outline字段怎么办可以利用RunnablePassthrough().assign将生成的文本保存在新的字段中调用时根据字典的方式定位各个文本如下complex_chain ( RunnableParallel({ outline: outline_chain, data: mock_search, topic: RunnablePassthrough() }) | RunnablePassthrough().assign(essayoutput_chain) ) print(response[essay]) print(response[data]) ......