一、基本介绍
chain(链)是langchain当中一个非常重要的构建模块,应该说langchain框架中无论多复杂的功能基本都是通过一个个简单或复杂的chain来实现的。
chain的最基础功能就是将LLM与提示词结合在一起进而得到想要的结果,另外不同的chain之间也可以进行联动,也就是说一个复杂的链中可能包含很多其他的链,通过这种方式对你提供的数据和文本进行操作等实现一些更复杂的功能。这篇记录一下langchain当中,几种常见的链的用法。
二、LLMChain
这是最基础、简单、又强大的链,很多复杂的链都由它参与支撑,直接看代码。
import os
import openai
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain
os.environ["OPENAI_API_KEY"] = 'xxx'
openai.api_key = os.environ.get("OPENAI_API_KEY")
llm = ChatOpenAI(model_name = 'gpt-3.5-turbo',temperature = 0.0)
prompt = ChatPromptTemplate.from_template('What is the best name to describe a company that makes {product}')
chain = LLMChain(llm = llm,prompt = prompt)
print(chain.run('ZhiFuBao'))
这里提供了一个简单的实例,LLMChain当中可以设置llm的类型,以及提示词的模版类型。它相当于是将prompt、llm封装成一条链来运行。
三、简单顺序链
简单顺序链适用于简单的顺序执行的任务,即上一条链的输出自动作为下一条链的输入的单输入、单输出情况。
from langchain.chains import SimpleSequentialChain
prompt_1 = ChatPromptTemplate.from_template('What is the best name to describe a company that makes {product}')
chain_1 = LLMChain(llm = llm , prompt = prompt_1)
prompt_2 = ChatPromptTemplate.from_template('Write a 20 words description for the following company {company_name}')
chain_2 = LLMChain(llm = llm ,prompt = prompt_2)
chain_ss = SimpleSequentialChain(chains=[chain_1,chain_2],verbose=True) # 简单顺序chain
print(chain_ss.run('支付宝'))
如上述代码中,chain_1与chain_2分别为两个基础链,分别由各自的prompt完成不同的功能。第一条链负责根据用户输入的产品名称输出一个可能生产这个产品的公司名称,第二条链则是将第一条链输出的公司再做一个公司描述,最后chain_ss进行整合,得到由用户输入的产品,到这个产品生产公司的描述的简单顺序链。在chains参数当中设置子链的先后关系。
四、一般顺序链
一般顺序链则用于处理稍微复杂一些的情况,即可能有多个输入及输出。还是结合代码看一下是如何实现的。
from langchain.chains import SequentialChain
prompt_1 = ChatPromptTemplate.from_template('Please translate the following rev