LCEL 概述

LECE(LangChain Expression Language)提供了 可高度组合化 的组件,涵盖 Prompt(输入)、Retriever(检索)、LLMs(大语言模型)、Tool(工具/函数) 以及 OutputParser(输出处理) 等。它隐藏了诸多底层的实现细节,以声明式的形式,简化 AI 产品的实现过程。
这些组件,实现了统一的底层协议 – Runnable 接口。
Runnable 接口中,定义了以 同步 或 异步 的方式对数据的流式处理、对 Chain 的调用、批处理等功能。

一、环环相扣的组件


数据,在这些组件中流淌,在进入到一个组件之前,应满足一定的 Schema。每个组件负责处理一段流经的数据或业务逻辑,并将处理结果转交给下一个处理对象,作为下一个组件的输入,环环相扣,依次类推。
LCEL 中使用的主要组件及每个组件接收的输入、输出如下:

Component Input Type Output Type
Prompt Dictionary PromptValue
ChatModel Single string, list of chat messages or a PromptValue ChatMessage
LLM Single string, list of chat messages or a PromptValue String
OutputParser The output of an LLM or ChatModel Depends on the parser
Retriever Single string List of Documents
Tool Single string or dictionary, depending on the tool Depends on the tool

Runnable 对象通过输入和输出的 schema 来约束和检查输入和输出的数据。这些 schema 是由 Pydantic 模型根据 Runnable 结构自动生成的。

1
2
3
4
5
6
7
8
9
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
parser = StrOutputParser()
chain = prompt | model | parser

async for chunk in chain.astream({"topic": "parrot"}):
print(chunk, end="|", flush=True)
  • Prompt,可以描述事物的背景,定义角色,创建指令,引导模型给出期望的结果。让模型理解你的需求。
  • LLMs,大语言模型,根据 Prompt 响应结果。就像人的大脑。
  • Retriever,用于检索外界(互联网、私域数据等)有用的信息,丰富 Context。
  • Tool,可以执行一个特定的任务。Retriever 和 Tool 就像人的四肢。

二、Runnable 标准协议

Runnable 标准协议,定义了组件共同所支持的通用功能。

  • invoke/ainvoke: 将输入转化成输出。
  • batch/abatch: 将多个输入同时转化成输出,提高处理效率。
  • stream/astream: 根据输入,得到一个流式输出。旨在提升响应时间,优化用户体验。

三、并行处理能力

1
2
3
4
5
6
7
8
9
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
parser = StrOutputParser()
chain = prompt | model | parser

async for chunk in chain.astream({"topic": "parrot"}):
print(chunk, end="|", flush=True)

参考链接

https://python.langchain.com/docs/expression_language/interface
https://blog.langchain.dev/building-chat-langchain-2/
https://agi-talks.vercel.app/202-langchain-chains/1

© 2024 YueGS