LangChain 专题2 使用消息
消息概述
消息(Message)是聊天模型中的通信单位。它们用于表示聊天模型的输入和输出,以及与对话可能相关的任何附加上下文或元数据。
每个消息都有一个角色(如“用户”、“助手”)和内容(如文本、多模态数据),此外还有根据聊天模型提供商而变化的附加元数据。
LangChain 提供了一个统一的消息格式,该格式可以在不同的聊天模型之间使用,从而允许用户在不同聊天模型之间进行工作, 而无需担心每个模型提供商使用的消息格式的具体细节。
消息包含的内容
一条信息通常包含以下信息:
- 角色(Role):信息的角色(例如,“用户”,“助手”)。
- 内容(Content):信息的正文(例如,文本、多模态数据)。
- 附加元数据(metadata):id、名称、令牌使用和其他模型特定的元数据。
角色
角色用于区分对话中的不同类型信息,并帮助聊天模型理解如何对给定的消息序列做出回应。
角色 | 描述 |
---|---|
system | 用于告诉聊天模型如何表现并提供额外上下文。不被所有聊天模型提供商支持。 |
user | 代表用户与模型交互时输入的内容,通常以文本或其他交互输入的形式出现。 |
assistant | 代表模型响应,其中可能包括文本或请求调用工具。 |
tool | 用于在检索外部数据或处理后,将工具调用结果传递回模型的消息。与工具调用的聊天模型一起使用。 |
function (legacy) | 这是一个遗留角色,对应于 OpenAI 的遗留函数调用 API。应使用 tool 角色代替。 |
内容
信息文本的内容或多模态数据(例如,图像、音频、视频)代表字典的列表。内容的具体格式可能因不同的聊天模型提供商而异。
目前,大多数聊天模型支持文本作为主要内容类型,有些模型还支持多模态数据。不过,在大多数聊天模型提供商中,多模态数据的支持仍然有限。
其他消息数据
根据聊天模型提供商的不同,消息可能包含其他数据,如
- ID: 消息的可选唯一标识符。
- 名称:可选名称属性,可用于区分具有相同角色的不同实体/发言人。并非所有模型都支持此功能。
- 元数据:关于消息的附加信息,如时间戳、令牌使用情况等。
- 工具调用:模型发出的调用一个或多个工具的请求> 有关更多信息,请参见工具调用。
对话结构
将消息序列输入聊天模型应遵循特定的结构,以确保聊天模型能够生成有效的回复。
例如,一个典型的对话结构可能如下所示:
- 用户消息:“你好,你好吗?”
- 助手消息:“我很好,谢谢你问候我。”
- 用户消息:“你能讲个笑话吗?”
- 助手消息:“可以!为什么数学书总是感到孤单?因为它有太多的问题。”
LangChain 中的消息
LangChain提供了一种统一的消息格式,该格式可用于所有聊天模型,从而允许用户在不同聊天模型之间工作,而不必担心每种模型提供商所使用的消息格式的具体细节。
LangChain 消息是从 BaseMessage 派生而来的 Python 对象。
主要的消息类型有五种:
- SystemMessage:对应系统角色
- HumanMessage:对应用户角色
- AIMessage:对应助手角色
- AIMessageChunk:对应助手角色,用于流式传输回复
- ToolMessage:对应工具角色
其他重要消息类型包括:
- RemoveMessage:不对应任何角色。这是一个抽象,用于 LangGraph 管理聊天历史。
- FunctionMessage:对应 OpenAI 的遗留功能调用API中的功能角色。
使用示例:使用 Message 相关类型作为输入
常用的类型有:SystemMessage、HumanMessage 等。
|
|