15.LangChain框架5-Chain链(LCEL链)
LangChain LCEL链
·
内容参考于:图灵AI大模型全栈
在LangChain1.0版本它引入了LCEL,全称LangChain Expression Language
未使用Chain链
# 导入LangChain中的提示模板 from langchain_core.prompts import PromptTemplate # 导入LangChain中的OpenAI模型接口 from langchain_openai import ChatOpenAI from dotenv import load_dotenv load_dotenv() import os # 原始字符串模板 template = "桌上有{number}个苹果,四个桃子和 3 本书,一共有几个水果?" # 创建LangChain模板 prompt_temp = PromptTemplate.from_template(template) # 根据模板创建提示 prompt = prompt_temp.format(number=2) model = ChatOpenAI(api_key=os.getenv("api_key"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model='qwen-plus', temperature=0) # 传入提示,调用模型返回结果 result = model.invoke(prompt) print(result)
使用链
from langchain_classic.chains.llm import LLMChain from langchain_core.prompts import PromptTemplate from langchain_openai import ChatOpenAI import os from dotenv import load_dotenv load_dotenv() # 原始字符串模板 template = "桌上有{number}个苹果,四个桃子和 3 本书,一共有几个水果?" # 创建模型实例 llm = ChatOpenAI(api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model='qwen-max', temperature=0) # 创建LLMChain llm_chain = LLMChain( llm=llm, prompt=PromptTemplate.from_template(template) ) # 调用LLMChain,返回结果 result = llm_chain.invoke({"number": 2}) print(type(result)) print(result['text'])区别:
![]()
上方的链是最早的版本,LCEL链是最新的
如下图红框,我们在执行上方链的代码,会出现下图红框位置的提示,|这个符号是管道符,它要我们使用管道符传参
![]()
LCEL链的实现,效果图:可以看到通过管道符,把num里的值全部进行了乘以2的操作
![]()
# 导入管道工具select,专门用来逐个处理数据 from pipe import select # 定义原始数据列表,里面有3个数字:1、2、3 num = [1,2,3] # 核心逻辑(完全按你的理解注释): # 1. 管道符 | :把左边的num列表 传给 右边的select # 2. select :会把num里的值 一个一个读出来 # 3. lambda x:x的值来自于num,读出来的每个数字都会放到x里 # 4. x*2 :把x里的数字乘以2 # 5. list() :把处理完的所有结果打包成列表 aa = list(num | select(lambda x: x*2)) # 打印最终结果 [2,4,6] print(aa)实现核心原理,如下图:通过Python语言提供的魔法方法__or__来实现
![]()
class Chain(): def __init__(self, value): self.value = value def __or__(self, other): # 调用 | 运算符 触发的魔法方法 return other(self.value) def prompt(text): return "请求回答问题:{}".format(text) # 从这开始往下看!!!!! # 创建一个类,创建完self.value的值是 人工智能是什么? aa = Chain('人工智能是什么?') # aa现在是Chain类型,Chain类型中有__or__方法,它在Python中叫魔法方法,通过|这个管道符号可以执行它,也就是说执行了 aa | 就来到了__or__里面 # __or__(self, other),self是aa,other就是|后面的值,也就是prompt,prompt是一个函数,然后在__or__中other(self.value)就调用了也就是prompt方法 # 它的入参是self.value也就是 人工智能是什么? 这句话,然后prompt中执行了 "请求回答问题:{}".format(text) 格式化字符串,并返回,所以res的值是prompt方法的返回值 # print打印的内容就是 请求回答问题:人工智能是什么? res = aa | prompt print(res)LangChain最终链的使用
from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate import os load_dotenv() # 创建提示词 prompt = ChatPromptTemplate.from_template("tell me a short joke about {topic},用中文回答,并带着中英对应") # 创建llm模型 model = ChatOpenAI(api_key=os.getenv("api_key"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen-plus") # 创建输出解释器 output_parser = StrOutputParser() # 使用chain链在一起 chain = prompt | model | output_parser print(chain.invoke({"topic": "ice cream"}))

更多推荐



所有评论(0)