简单的应用场景单个LLM即可,面对复杂的应用场景,需要将多个LLM串联一起,协同工作。
LangChain提出了Chain(链)的概念,为这种链式应用程序提供接口Chain。Chain定义组件的调用序列,其中包括其他链。链的引入大大简化了应用的实现,使其模块化、接口化,这也有利于调试、维护以及后期的改进升级。
最基础的链LLMChain
LLMChain接受LLM、prompt组件,返回LLM的响应
# 准备必要的组件
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
# 实例化模型llm
llm = OpenAI(temperature = 0, openai_api_key = "你的openai_api_key")
# 实例化模板prompt
prompt = PromptTemplate(
template = "what is the hex code of {color}?",
input_variables = ["color"]
)
# 基于组件创建chain实例
# 我们要创建的链,基于提示词模板,给定颜色的16进制代码
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
# 调用run,传入参数,输出消息
# 我们现在利用创建的LLMChain链实例提问,注意,我们只需要设置提示词模板变量的值,
# 这里对green,blue,red提问
print(chain.run("green"))
print(chain.run("blue"))
print(chain.run("red"))
我们应该能看到如下输出
The hex code for green is #00FF00.
The hex code for blue is #0000FF.
The hex code of red is #FF0000.
LangChainHub
langchainhub是开源的社区,分享处理langchain的组件,包括prompt,Agent,chain。
下面介绍langchainhub中分享链的使用
以Hello World为例
定义的如下内容
{
"memory": null,
"verbose": false,
"prompt": {
"input_variables": [
"topic"
],
"output_parser": null,
"template": "Tell me a joke about {topic}:",
"template_format": "f-string",
"_type": "prompt"
},
"llm": {
"model_name": "text-davinci-003",
"temperature": 0.9,
"max_tokens": 256,
"top_p": 1,
"frequency_penalty": 0,
"presence_penalty": 0,
"n": 1,
"best_of": 1,
"request_timeout": null,
"logit_bias": {},
"_type": "openai"
},
"output_key": "text",
"_type": "llm_chain"
}
这条链使用如下组件
prompt模板:请求LLM回答关于{topic}的一个笑话
LLM:指定为text-davinci-003模型,还有相关参数的设置
从LangChainHub中加载链
下面以LLM-Math为例,介绍加载和使用langchainhub中的链,该链使用LLM和利用python REPL进行复杂数学运算的链。
加载
load_chain类从langchainhub中加载链
from langchain.chains import load_chain
import os
os.environ['OPENAI_API_KEY'] = "你的有效api key"
chain = load_chain("lc://chains/llm-math/chain.json")
chain.run("what is the area of circle with radius 2?")
我们应该可以看下以下输出
> Entering new LLMMathChain chain... what is the area of circle with radius 2? Answer: 12.566370614359172 > Finished chain. 'Answer: 12.566370614359172’
总结:本节学习了langchain提出最重要的概念——chain,学习最基础的LLMchain用法,从langchainhub中加载链,让LLM开发变得更加轻松。