news 2026/6/23 10:35:36

LangChain Messages模块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain Messages模块

1. 消息核心概念

消息(Messages)是LangChain中模型交互的基本上下文单元,代表着模型输入和输出的结构化数据载体。每个消息对象包含三个核心组成部分:

  • 角色(Role):标识消息类型(如system、user、assistant)
  • 内容(Content):消息的实际内容,支持文本、图像、音频、文档等
  • 元数据(Metadata):可选字段,如响应信息、消息ID和令牌使用情况

在LangChain架构中,消息既是对话状态的表现形式,也是模型调用的标准接口,为LLM交互提供了统一的抽象层。

2. 消息类型详解

2.1 系统消息(SystemMessage)

系统消息用于引导模型行为设置交互上下文,是对话的初始化指令:

fromlangchain.messagesimportSystemMessage# 基础指令system_msg=SystemMessage("You are a helpful coding assistant.")# 详细角色定义detailed_system_msg=SystemMessage(""" You are a senior Python developer with expertise in web frameworks. Always provide code examples and explain your reasoning. Be concise but thorough in your explanations. """)

2.2 人类消息(HumanMessage)

人类消息代表用户输入,支持多模态内容:

fromlangchain.messagesimportHumanMessage# 文本内容human_msg=HumanMessage("What is machine learning?")# 带元数据的人类消息human_msg_with_metadata=HumanMessage(content="Hello!",name="alice",# 可选:标识不同用户id="msg_123",# 可选:用于追踪的唯一标识符)

2.3 AI消息(AIMessage)

AI消息表示模型输出,包含响应内容、工具调用和元数据:

fromlangchain.messagesimportAIMessage# 从模型获取的响应response=model.invoke("Explain AI")print(type(response))# <class 'langchain.messages.AIMessage'># 手动创建AI消息(用于对话历史)manual_ai_msg=AIMessage("I'd be happy to help you with that question!")

2.4 工具消息(ToolMessage)

工具消息用于传递工具执行结果给模型:

fromlangchain.messagesimportToolMessage# 创建工具消息tool_message=ToolMessage(content="Sunny, 72°F",# 工具执行结果tool_call_id="call_123",# 必须与AI消息中的工具调用ID匹配name="get_weather",# 被调用工具的名称artifact={"document_id":"doc_123","page":0}# 不发送给模型的附加数据)

3. 基本使用方式

3.1 三种调用格式

文本提示(适用于单次独立请求):

response=model.invoke("Write a haiku about spring")

消息对象列表(适用于多轮对话):

fromlangchain.messagesimportSystemMessage,HumanMessage,AIMessage messages=[SystemMessage("You are a poetry expert"),HumanMessage("Write a haiku about spring"),AIMessage("Cherry blossoms bloom...")]response=model.invoke(messages)

字典格式(OpenAI兼容格式):

messages=[{"role":"system","content":"You are a poetry expert"},{"role":"user","content":"Write a haiku about spring"},{"role":"assistant","content":"Cherry blossoms bloom..."}]response=model.invoke(messages)

3.2 完整工作流程示例

fromlangchain.chat_modelsimportinit_chat_modelfromlangchain.messagesimportHumanMessage,AIMessage,SystemMessage# 初始化模型model=init_chat_model("gpt-5-nano")# 创建消息序列system_msg=SystemMessage("You are a helpful assistant.")human_msg=HumanMessage("Hello, how are you?")# 调用模型messages=[system_msg,human_msg]response=model.invoke(messages)# 返回AIMessage

4. 高级功能特性

4.1 工具调用

当模型绑定工具时,AI消息中会包含工具调用信息:

fromlangchain.chat_modelsimportinit_chat_model model=init_chat_model("gpt-5-nano")# 定义工具函数defget_weather(location:str)->str:"""Get the weather at a location."""...# 绑定工具并调用model_with_tools=model.bind_tools([get_weather])response=model_with_tools.invoke("What's the weather in Paris?")# 处理工具调用fortool_callinresponse.tool_calls:print(f"Tool:{tool_call['name']}")print(f"Args:{tool_call['args']}")print(f"ID:{tool_call['id']}")

4.2 令牌使用统计

AI消息包含详细的令牌使用元数据:

response=model.invoke("Hello!")print(response.usage_metadata)# 输出示例:# {# 'input_tokens': 8,# 'output_tokens': 304,# 'total_tokens': 312,# 'input_token_details': {'audio': 0, 'cache_read': 0},# 'output_token_details': {'audio': 0, 'reasoning': 256}# }

4.3 流式响应处理

处理流式响应时,接收的是AIMessageChunk对象:

chunks=[]full_message=Noneforchunkinmodel.stream("Hi"):chunks.append(chunk)print(chunk.text)full_message=chunkiffull_messageisNoneelsefull_message+chunk

5. 内容格式详解

5.1 内容表示方式

消息内容支持三种表示形式:

fromlangchain.messagesimportHumanMessage# 1. 字符串形式human_message=HumanMessage("Hello, how are you?")# 2. 提供者原生格式human_message=HumanMessage(content=[{"type":"text","text":"Hello, how are you?"},{"type":"image_url","image_url":{"url":"https://example.com/image.jpg"}}])# 3. 标准内容块(类型安全接口)human_message=HumanMessage(content_blocks=[{"type":"text","text":"Hello, how are you?"},{"type":"image","url":"https://example.com/image.jpg"},])

5.2 多模态内容支持

LangChain支持多种多模态输入格式:

# 从URL加载图像message={"role":"user","content":[{"type":"text","text":"Describe the content of this image."},{"type":"image","url":"https://example.com/path/to/image.jpg"},]}# 从base64数据加载message={"role":"user","content":[{"type":"text","text":"Describe the content of this image."},{"type":"image","base64":"AAAAIGZ0eXBtcDQyAAAAAGlzb21tcDQyAAACAGlzb2...","mime_type":"image/jpeg",},]}# 使用提供者管理的文件IDmessage={"role":"user","content":[{"type":"text","text":"Describe the content of this image."},{"type":"image","file_id":"file-abc123"},]}

6. 最佳实践指南

6.1 消息组织原则

  1. 明确角色分配:正确使用系统、用户和助手角色
  2. 合理使用元数据:为消息添加ID和名称以支持追踪和调试
  3. 保持对话状态:将完整对话历史作为消息序列传递

6.2 性能优化建议

  1. 使用内容块标准表示:跨提供者的一致接口
  2. 合理设置环境变量:使用LC_OUTPUT_VERSION="v1"以获得标准内容块表示
  3. 监控令牌使用:通过usage_metadata分析成本和使用模式

6.3 错误处理策略

  1. 验证工具调用ID匹配:确保ToolMessagetool_call_id与AI消息中的调用ID一致
  2. 检查模型支持能力:确认目标模型支持所需的多模态格式和文件类型
  3. 处理提供者差异:注意不同提供者对消息字段(如name)的支持差异

总结

LangChain的Messages模块提供了强大而灵活的消息抽象层,支持从简单的文本对话到复杂的多模态交互和工具调用。通过掌握消息的核心概念、类型系统和使用模式,开发者可以构建出高效、可靠且可维护的LLM应用

消息作为LangChain中模型交互的统一接口,其设计平衡了灵活性类型安全,同时保持了与主流提供者API的兼容性。在实际应用中,建议根据具体需求选择适当的消息格式和调用方式,并结合最佳实践进行优化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 14:49:13

LangChain Tools 工具使用

引言&#xff1a;理解LangChain工具的核心概念 在LangChain框架中&#xff0c;工具&#xff08;Tools&#xff09; 是扩展智能代理能力的关键组件。它们使AI代理能够超越简单的文本生成&#xff0c;执行实际任务如获取实时数据、执行代码、查询外部数据库以及在环境中执行操作。…

作者头像 李华
网站建设 2026/6/22 19:28:00

OCR技术选型指南:为什么选择CRNN模型

OCR技术选型指南&#xff1a;为什么选择CRNN模型 背景与挑战&#xff1a;OCR文字识别的现实困境 光学字符识别&#xff08;OCR&#xff09;作为连接物理世界与数字信息的关键桥梁&#xff0c;已广泛应用于文档数字化、票据处理、车牌识别、工业质检等多个领域。然而&#xff0c…

作者头像 李华
网站建设 2026/6/21 10:59:18

日志分析效率革命:Klogg如何让大文件处理变得轻松自如

日志分析效率革命&#xff1a;Klogg如何让大文件处理变得轻松自如 【免费下载链接】klogg Really fast log explorer based on glogg project 项目地址: https://gitcode.com/gh_mirrors/kl/klogg 每天面对堆积如山的日志文件&#xff0c;你是否感到力不从心&#xff1f…

作者头像 李华
网站建设 2026/6/21 23:17:52

格力空调智能升级:从传统遥控到全屋智能的华丽转身

格力空调智能升级&#xff1a;从传统遥控到全屋智能的华丽转身 【免费下载链接】HomeAssistant-GreeClimateComponent Custom Gree climate component written in Python3 for Home Assistant. Controls ACs supporting the Gree protocol. 项目地址: https://gitcode.com/gh…

作者头像 李华
网站建设 2026/6/13 21:41:07

终极指南:如何快速上手Common Voice开源语音数据集

终极指南&#xff1a;如何快速上手Common Voice开源语音数据集 【免费下载链接】cv-dataset Metadata and versioning details for the Common Voice dataset 项目地址: https://gitcode.com/gh_mirrors/cv/cv-dataset Common Voice是Mozilla推出的全球最大开源语音数据…

作者头像 李华
网站建设 2026/6/19 2:01:10

LSTM与GRU对比:CRNN中循环层选型对OCR精度的影响

LSTM与GRU对比&#xff1a;CRNN中循环层选型对OCR精度的影响 &#x1f4d6; 背景与问题提出 光学字符识别&#xff08;OCR&#xff09;作为计算机视觉中的核心任务之一&#xff0c;广泛应用于文档数字化、票据识别、车牌读取等场景。随着深度学习的发展&#xff0c;传统的基于分…

作者头像 李华