LCEL-LangChain Expression Language
- LangChain Expression(LCEL) 是一种声明式表达方式,用于轻松组合多个步骤。
- 设计用于将原型无代码变更地投入生产,从最简单的“提示+LLM'链到最复杂的链。
- 流式支持、异步支持、优化的并行执行、重试和回退配置, 无缝的LangSmith追踪集成以及无缝的LangServe部署集成
代码实例
#导人所需的库
from langchain.prompts
import PromptTemplate
from langchain.llms import OpenAI
from langchain.schema.output parser
import StrOutputParser
prompt = PromptTemplate.from template("{flower}的花语是?")
model = OpenAI()
output_parser = StrOutputParser()
chain = prompt | model | output_parser
result = chain.invoke({"flower":"玫瑰"})
print(result)
- 用LCEL构造链
- 用invoke调用、执行链
Stream 流式调用
一边调用模型一边生成结果,即不需要等到完成整个链才输出结果。
#导人所需的库
from dotenv import load dotenv #用于加载环境变量load dotenv()#加载.env 文件中的环境变量
from langchain core.runnables import RunnablePassthrough
from langchain.chat models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain_core.output parsers import StrOutputParser
prompt=ChatPromptTemplate.from template("告诉我关于{flower}的故事")
output_parser=StrOutputParser()
model=ChatOpenAI(model="gpt-3.5-turbo")
#用LCEL构造链
chain=({"flower": RunnablePassthrough()}
| prompt #提示
| model #模型
| output parser #输出解析
)
#执行链
for chunk in chain.stream(“百合花"):
print(chunk, end=""",flush=True)
批量调用
一次性批量地运行链
# 执行链
result = chain.batch(["郁金香","梅花","食人花"])
print(result)
Logging&Tracing
- 输出调用链的中间过程
-
在创建链的时候传入参数
verbose=True
chain = LLMChain( llm=model, prompt=prompt, output_parser=output_parser, verbose=True )
-
通过全局的方式设置
verbose
参数from langchain.globals import set_verbose set_verbose=True
以上两种方式对于非LCEL有效
- global debug
中间信息比较全,但有些细碎。from langchain.globals import set_debug set_debug=True
LangSmith
- 测试评估(test&evalute)
- 监视管理(monitor)
- 调试(debug)
前置
官网注册账号
环境配置
-
确保langchain版本升级到有支持的版本:0.2的都有
pip install -U langchain
-
设置环境变量
- 使用的开关:
LANGCHAIN_TRACING_V2=True
- 必须的变量:
LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
LANGCHAIN_API_KEY
(官方上注册账号获取API_KEY)
- (可选)
- 项目名称
LANGCHAIN_PROJECT
,如果不设置默认时在default项目下。
- 项目名称
也可以在python脚本用
os.environ[xxxx]=
设置,缺点是不够保护隐私。 - 使用的开关:
使用
直接运行代码(环境变量配置完),在网站会记录trace等等。
hub里有一些可以调用的开源prompt等。