langchain messages

Messages对象可以用在提示词和聊天信息中。目前主要有Message和MessageChunk两种类型,这里仅以Message类为主进行介绍。Message类主要有以下几种:

  • AIMessage: 大模型返回的信息,类似于OpenAI模型中assistant类型的消息。
  • ChatMessage: ChatMessage有一个role字段,用于标识消息发送者的角色或类型。
  • FunctionMessage/ToolMessage:向LLM返回函数或工具得到的信息。FunctionMessage是ToolMessage的旧版本。
  • SystemMessage: 系统角色信息,类似于OpenAI模型中system类型的消息。
  • HumanMessage:用户角色的信息,类似于OpenAI模型中user类型的消息。

SystemMessage

SystemMessage 是 LangChain 中用于定义系统消息的一个类,主要用于预设或引导 AI 模型的行为。这类消息通常作为一系列输入消息中的第一个传递,以设定对话的上下文或指导 AI 的响应方式。

主要功能
  • 预设 AI 行为:通过系统消息,可以指定 AI 的角色、名称或行为规范,从而影响后续的对话内容。
  • 设置对话上下文:系统消息为整个对话提供初始的背景信息,有助于 AI 更好地理解和响应用户的请求。
使用示例
from langchain_core.messages import HumanMessage, SystemMessage

messages = [
    SystemMessage(
        content="You are a helpful assistant! Your name is Bob."
    ),
    HumanMessage(
        content="What is your name?"
    )
]

# 定义一个聊天模型并使用这些消息进行调用
print(model.invoke(messages))

在这个示例中,SystemMessage 被用来设定 AI 的名称为 Bob,并指明它是一个乐于助人的助手。当用户问到“你的名字是什么?”时,AI 会根据系统消息中的设定进行回应。

参数说明
  • content (strList[Union[str, Dict]], 必需): 消息的主要内容,可以是字符串或字符串和字典的列表。
  • id (Optional[str]): 消息的唯一标识符,通常由生成消息的提供者或模型提供。
  • name (Optional[str]): 消息的名称,用于提供一个易于阅读的标识。
  • response_metadata (dict, 可选): 响应的元数据,例如响应头、日志概率、token 计数等。
  • type (Literal['system'], 默认值为 'system'): 消息的类型,用于序列化时区分不同类型的消息。
方法
  • pretty_print(): 无返回值,用于以可读的格式打印消息内容。
  • pretty_repr(html: bool = False) → str: 返回消息的可读性高的字符串表示。如果 htmlTrue,则返回包含 HTML 标签的格式化字符串。
使用场景

SystemMessage 常用于以下场景:

  1. 角色设定:定义 AI 在对话中的角色,例如助手、导师、客服代表等。
  2. 行为规范:指引 AI 在回答问题时遵循特定的风格或规则。
  3. 上下文初始化:提供初始的背景信息,使 AI 更好地理解后续的用户输入。
注意事项
  • 顺序重要SystemMessage 通常应作为消息序列中的第一个消息传递,以确保其对整个对话的指导作用。
  • 内容设计:编写系统消息时,应明确、简洁地描述 AI 的角色和期望行为,以避免歧义。

通过合理使用 SystemMessage,可以显著提升 AI 对话的质量和一致性,使其更好地满足用户的需求。

HumanMessage

HumanMessage 是 LangChain 中用于定义来自人类用户的消息的一个类。它代表用户发送给 AI 模型的输入,是对话交互中的关键组成部分。通过 HumanMessage,用户可以向模型提出问题、发出指令或进行任何形式的交流,模型则基于这些消息生成相应的响应。

主要功能
  • 用户输入传递HumanMessage 用于传递来自用户的实际输入,是驱动对话进行的核心。
  • 对话上下文构建:结合其他类型的消息(如 SystemMessage),HumanMessage 有助于构建完整的对话上下文,使模型能够更准确地理解用户意图。
  • 消息标识与元数据:支持为每条消息分配唯一标识符和附加元数据,便于管理和追踪对话流程。
使用示例

以下示例展示了如何使用 HumanMessageSystemMessage 共同构建对话,并调用聊天模型生成响应:

from langchain_core.messages import HumanMessage, SystemMessage

messages = [
    SystemMessage(
        content="You are a helpful assistant! Your name is Bob."
    ),
    HumanMessage(
        content="What is your name?"
    )
]

# 实例化一个聊天模型并使用这些消息进行调用
model = ...  # 替换为具体的模型实例
print(model.invoke(messages))

在这个示例中,HumanMessage 用于传递用户的问题“你的名字是什么?”,而 SystemMessage 则为模型设定了初始的角色和名称。当模型接收到这些消息时,会根据系统消息中的指引进行响应。

参数说明
  • content (strList[Union[str, Dict]], 必需):消息的主要内容,可以是单一字符串或字符串与字典的列表,用于描述更复杂的消息结构。
  • example (bool, 可选,默认值为 False):用于标记消息是否为示例对话的一部分。目前大多数模型忽略此参数,建议避免使用。
  • id (str | None, 可选):消息的唯一标识符,通常由生成消息的提供者或模型提供,以便于消息的追踪和管理。
  • name (str | None, 可选):消息的名称,用于提供一个易于阅读和识别的标识。此字段的使用取决于模型的实现。
  • response_metadata (dict, 可选):响应的元数据,例如响应头、日志概率(logprobs)、token 计数等,用于记录与消息相关的额外信息。
  • type (Literal['human'], 默认值为 'human'):消息的类型,用于序列化时区分不同类型的消息。
方法
  • pretty_print(): 无返回值,用于以可读的格式打印消息内容,便于调试和查看。
  • pretty_repr(html: bool = False) → str: 返回消息的可读性高的字符串表示。如果 htmlTrue,则返回包含 HTML 标签的格式化字符串,适用于需要在网页或富文本环境中展示的场景。
使用场景

HumanMessage 常用于以下场景:

  1. 用户提问:用户向 AI 模型提出问题,寻求帮助或信息。
  2. 指令执行:用户下达指令,要求模型执行特定任务,如生成文本、翻译语言等。
  3. 对话交互:在多轮对话中,用户通过多条 HumanMessage 与模型进行持续互动。
  4. 情感交流:用户表达情感、意见或反馈,模型根据这些信息做出相应的回应。
注意事项
  • 消息顺序:在对话中,HumanMessage 应按照实际对话的顺序传递,以确保模型能够正确理解对话的上下文和进展。
  • 内容清晰:编写 HumanMessage 时,应确保内容清晰、具体,避免歧义,以便模型能够准确理解用户意图。
  • 唯一标识:为每条消息分配唯一的 id(如果可能),有助于在复杂对话或多线程对话中追踪消息来源和响应。
  • 避免滥用 example 参数:由于目前大多数模型忽略 example 参数,建议避免依赖此参数来标记
<think>好的,我现在需要回答用户关于langchain_core.messages.ToolMessage的用法的问题。首先,我得回忆一下这个类的作用和使用场景。根据之前的了解,langchain_core是LangChain的一个核心库,而ToolMessage可能是用于处理工具调用时的消息结构。 用户可能想知道如何正确创建和使用ToolMessage实例。我需要先确认它的参数,比如内容、工具名称、状态等。可能还有如何与其他组件如LLM或Agent结合使用。 接下来,应该提供一个具体的示例代码,展示如何实例化ToolMessage,并说明各个参数的意义。例如,content是工具调用的结果,name是调用的工具名称,status可能表示成功或失败。 然后,我需要考虑常见的用法和注意事项,比如在处理工具调用时,如何将结果封装成ToolMessage以便后续处理。可能还要提到与其他消息类型的区别,如HumanMessage或AIMessage。 最后,生成相关问题时,要确保覆盖初始化参数、与其他类的区别以及错误处理等方面。需要检查示例代码是否正确,参数是否正确使用,以及相关问题是否全面。</think>`langchain_core.messages.ToolMessage` 用于封装工具调用的结果,通常在Agent调用工具后生成。其核心作用是记录工具调用的输入、输出及状态,便于后续处理或上下文维护。 示例代码: ```python from langchain_core.messages import ToolMessage # 创建一个ToolMessage实例 tool_message = ToolMessage( content="{'result': 42}", # 工具返回的内容(通常为字符串化的JSON) name="calculate_tool", # 调用的工具名称 status="success", # 调用状态(可选:success/error) tool_call_id="abc123" # 工具调用的唯一ID(用于关联请求与响应) ) print(tool_message) ``` 关键参数说明: 1. `content`:工具执行结果的原始数据(需自行序列化) 2. `name`:对应工具注册时的名称 3. `status`:标记调用成功/失败,影响后续流程决策 4. `tool_call_id`:需与对应的ToolCallMessage的id匹配 使用场景: - Agent执行完工具调用后生成该消息存入历史记录 - 在链式调用中传递工具执行结果 - 前端展示工具调用过程时的数据源
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值