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 | from langchain_core.output_parsers import StrOutputParser |
- Prompt,可以描述事物的背景,定义角色,创建指令,引导模型给出期望的结果。让模型理解你的需求。
- LLMs,大语言模型,根据 Prompt 响应结果。就像人的大脑。
- Retriever,用于检索外界(互联网、私域数据等)有用的信息,丰富 Context。
- Tool,可以执行一个特定的任务。Retriever 和 Tool 就像人的四肢。
二、Runnable 标准协议
Runnable 标准协议,定义了组件共同所支持的通用功能。
- invoke/ainvoke: 将输入转化成输出。
- batch/abatch: 将多个输入同时转化成输出,提高处理效率。
- stream/astream: 根据输入,得到一个流式输出。旨在提升响应时间,优化用户体验。
三、并行处理能力
1 | from langchain_core.output_parsers import StrOutputParser |
参考链接
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