1. Model I/O介绍
1.1 Model I/O模块组成
- Format:即指代Prompts Template,通过模板化来管理大模型的输入;
- Predict:即指代Models,使用通用接口调用不同的大语言模型;
- Parse:即指代Output部分,用来从模型的推理中提取信息,并按照预先设定好的模版来规范化输出。
Format
传统上我们创建提示词是通过手工编写来实现的,在这个过程中会利用各种提示工程技巧,如Few-Shot、链式推理(CoT)等方法,以提高大模型的推理性能。不过,在应用
开发中,一个关键的考量是提示词不能是一成不变的。其缘由在于,应用开发需要适应多变的用户需求和场景。固定的提示词限制了模型的灵活性和适用范围
Predict
在Predict部分,实质上是处理模型从接收输入到执行推理的整个过程。思考到存在两种主要类型的大模型——Base类模型和Chat类模型,LangChain在其Model I/O模块中
对这两种模型都进行了抽象,分别归类为LLMs(Large Language Models)和Chat Models。
Parse
大模型的输出是不稳定的,同样的输入Prompt往往会得到不同形式的输出。在自然语言交互中,不同的语言表达方式一般不会造成理解上的障碍。但在应用开发中,大模型的
输出可能是下一步逻辑处理的关键输入。因此,在这种情况下,规范化输出是必须要做的任务,以确保应用能够顺利进行后续的逻辑处理。
1.2 什么是LCEL?
LangChain表达式语言(LCEL)是一种声明式方法,可以轻松地将 链 组合在一起。你可以理解为就是类似shell里面管道符的开发方式。
1.3 LangChain安装
pip install langchain
pip install opeanai
2. Model I/O之模型调用
LangChain为了使开发者可以轻松地创建自定义链,整体采用Runnable协议。Runnable 协议是编程中一种常见的设计模式,用于定义可以执行的任务或行为。
在LangChain中通过构建标准接口,可以用户轻松定义自定义链并以标准方式调用它们,目前在LangChain已经集成的LLMs中,均实现了Runnable接口,目前支持包括invoke、 stream 、 batch 、 astream 等方法的调用。
LangChain已经集成的大模型:https://python.langchain.com/docs/integrations/llms/
具体支持的调用方式如下所示:
| 方法 | 说明 |
|---|---|
| invoke | 处理单条输入 |
| batch | 处理批量输入 |
| stream | 流式响应 |
| ainvoke | 异步处理单条输入 |
| abatch | 异步处理批量输入 |
| astream | 异步流式响应 |
LangChain作为一个应用开发框架,需要集成各种不同的大模型,如上述OpenAI的GPT系列模型调用示例,通过Message数据输入规范,定义不同的role,即system、user和assistant来区分对话过程,但对于其他大模型,并不意味这必定会遵守这种输入输出及角色的定义,所以LangChain的做法是,由于Chat Model基于消息而不是原始文本,LangChain目前就抽象出来的消息类型有 AIMessage 、 HumanMessage 、 SystemMessage 、 FunctionMessage 和 ChatMessage ,但大多时候我们只需要处理 HumanMessage 、 AIMessage 和 SystemMessage,即:
- SystemMessage :用于启动 AI 行为,作为输入消息序列中的第一个传入。
- HumanMessage :表明来自与聊天模型交互的人的消息。
- AIMessage :表明来自聊天模型的消息。这可以是文本,也可以是调用工具的请求。