首页/新闻资讯/正文详情

110.Agent-LangChain核心组件-Messages消息和提示词工程

发布时间:2026/9/25 16:51:04 来源:云帆数科 栏目:资讯中心
110.Agent-LangChain核心组件-Messages消息和提示词工程
摘要本文围绕 LangChain 中 Message 这一与大模型沟通的基本数据结构展开系统讲解消息类型system、user、assistant、tool、消息内容Content与元数据metadata的构成并通过 message 实例与带角色的类SystemMessage、HumanMessage、AIMessage、ToolMessage说明其用法。文章还结合 Agent 使用实例、普通使用实例以及提示词工程演示如何正确设置系统提示词并调用大模型完成实际任务。内容参考于图灵AI大模型全栈在LangChhain中Message是跟大模型沟通的基本数据结构就是说知道message的结构后就能知道什么样子后才能和大语言模型进行交互消息类型system、user、assistant、toolsystem是系统提示词它最优先遵循的user是用户提示词就是我们向大模型提问的问题assistant是大模型的回复tool是工具的回复消息内容Content它是实际的消息消息内容包含文本、图片等通过与消息类型的配合就能知道是谁的消息了元数据metadata它是可选字段可以用来描述 Content 的内容、消息的id、Token消耗情况等message实例{ messages: [ { id: msg_a1b2c3d4e5f6, role: system, content: 你是一个专业的中文翻译助手擅长将英文翻译成地道准确的中文。请保持原文的语气和语境。, metadata: { timestamp: 2026-06-10T13:40:00Z, version: v1 } }, { id: msg_b2c3d4e5f6g7, role: user, content: Could you please recommend some popular cafes near Koto Ward?, metadata: { timestamp: 2026-06-10T13:40:30Z, token_usage: { input_tokens: 12 } } }, { id: msg_c3d4e5f6g7h8, role: assistant, content: 你能给我推荐一些附近比较受欢迎的咖啡馆吗, tool_calls: [], metadata: { timestamp: 2026-06-10T13:41:00Z input_tokens: 12, output_tokens: 156, total_tokens: 168 } } ] }LangChain为我们提供了带角色的类从而让我们不需要手动写上方的 messagesSystemMessage, HumanMessage, AIMessage, ToolMessageSystemMessage表示系统消息HumanMessage表示用户消息AIMessage表示助手消息ToolMessage表示工具消息Agent使用实例效果图通过LangSmith可以看出它的系统提示词是用的 SystemMessage 里的内容但是不要这样设置系统提示词一般使用下图红框的 system_prompt 参数来设置系统提示词代码from langchain.messages import SystemMessage, HumanMessage, AIMessage, ToolMessage # create_agent是LangChain提供的创建Agent的核心模块 from langchain.agents import create_agent # 引入调用模型的openai from langchain_openai import ChatOpenAI # 引入 把.env文件中的内容加载成环境变量 的库 from dotenv import load_dotenv import os # 把.env文件中的内容加载成环境变量 load_dotenv() # 初始化模型 llm ChatOpenAI( modelqwen3.7-flash, api_keyos.getenv(DASHSCOPE_API_KEY), base_urlos.getenv(DASHSCOPE_BASE_URL), ) # 创建一个工具获取天气的工具 def get_weather(city): # 工具描述新版本LangChain会获取这个字符串当做工具的描述写到提示词中 获取指定城市的天气信息 # 工具逻辑 return f{city}天气是美好的 agent create_agent( modelllm, tools[get_weather], # 系统提示词 system_prompt你是一个智能助手能够回答用户关于天气的问题可以使用提供的天气工具来获取天气信息 ) system_msg SystemMessage(你是一个助手) human_msg HumanMessage(大模型是什么?) messages {messages:[system_msg, human_msg]} result agent.invoke(messages) print(result)普通使用实例效果图代码它跟create_agent有区别它的message只需要一个数组就可以了而create_agent需要一个字典对象{messages:[]}这样的格式这个messages不能写错了写错了就无作用from langchain.messages import SystemMessage, HumanMessage, AIMessage, ToolMessage from langchain.chat_models import init_chat_model from dotenv import load_dotenv import os # 加载环境变量 load_dotenv() # 初始化模型 llm init_chat_model(modelqwen3.7-flash, api_keyos.getenv(DASHSCOPE_API_KEY), base_urlos.getenv(DASHSCOPE_BASE_URL), model_provideropenai) # 指定模型提供商为OpenAI # 创建消息列表 # SystemMessage系统消息, HumanMessage用户消息, AIMessage助手消息, ToolMessage工具消息 system_msg SystemMessage(你是一个知识渊博的老者说话方式风趣幽默喜欢用成语和典故来表达观点。) human_msg HumanMessage(大模型是什么?) messages [system_msg, human_msg] # 也可以使用字典格式的消息列表 # messages [ # {role: system, content: 你是一个知识渊博的老者说话方式风趣幽默喜欢用成语和典故来表达观点。}, # {role: user, content: 写一首关于春天的诗句。} # ] # # # 普通对话 result llm.invoke(messages) # 会返回一个AIMessage print(result)提示词工程普通用户的提示词只需要提出问题但是系统提示词是需要很专业的一般由 系统指令、工具或函数、上下文或背景知识、历史消息、用户输入 组成系统指令设定大模型的角色比如 你是一位xxx专家请使用中文回答通过这样的角色限定大模型再回答问题时就会偏向找xxx相关的知识来回答工具或函数告诉大模型可以调用的外部工具或者函数也就是Agent中的手和脚上下文或背景知识就是给大模型的参考资料就是给大模型提问时问题中需要到的资料历史消息就是大模型的记忆我们跟大模型的聊天记录用户输入就是最新提问的问题比如 今天天气怎么样更细节的实例去看第2节代码实例效果图代码from langchain.agents import create_agent from langchain.messages import HumanMessage from langchain_openai import ChatOpenAI import os from dotenv import load_dotenv # 加载环境变量 load_dotenv() # 初始化模型 llm ChatOpenAI(modelqwen3.7-flash, api_keyos.getenv(DASHSCOPE_API_KEY), base_urlos.getenv(DASHSCOPE_BASE_URL) ) # 创建系统提示词 system_prompt # 角色 你是一位小红书爆款推文作者。 # 目标 根据用户提供的主题创作一篇小红书推文。 # 输出格式 Markdown # 内容要求 1. **标题**提供3个不同风格的爆款标题 - 公式数字形容词关键词情绪词如3款巨显白发色 | 黄皮必冲 2. **正文** - 开头2行内抓眼球痛点提问或直接安利 - 中间分点陈述用emoji加粗重点写真实体验而非堆砌参数 - 结尾引导互动评论区聊聊你的看法 3. **话题标签**提供10个精准标签组合策略大流量词细分词场景词 4. **视觉建议**一句话描述封面/配图风格 # 风格要求 口语化、有情绪感、善用绝了谁懂啊真的会谢等小红书高频词。 # 创建代理 agent create_agent( modelllm, system_promptsystem_prompt ) # 进行流式输出 for token, metadata in agent.stream( {messages: [HumanMessage(content-)]}, stream_modemessages, ): print(token.content, end, flushTrue)

相关推荐

别让错误的配置毁了你的 AI Agent:OpenClaw 避坑与实战指南(TaoToken 统一 Key 接入篇)
别让错误的配置毁了你的 AI Agent:OpenClaw 避坑与实战指南(TaoToken 统一 Key 接入篇)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 16:50:39

GitHub项目推荐--FastMCP:用Pythonic方式构建下一代智能体通信协议
GitHub项目推荐--FastMCP:用Pythonic方式构建下一代智能体通信协议

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 16:50:39

狗头军师第一次怎么用:3分钟建立关系档案,让AI真正看懂你的恋爱局
狗头军师第一次怎么用:3分钟建立关系档案,让AI真正看懂你的恋爱局

狗头军师第一次怎么用:3分钟建立关系档案,让AI真正看懂你的恋爱局 【免费下载链接】goutoujunshi 一个先接住情绪、再分析关系并给出可执行策略的 Codex 恋爱军师,内置心理、法律、社会、人文、哲学、婚姻家庭与性学知识库,支持多… · 2026/9/25 16:50:39

RubricRL实战:用结构化评分表替代标量奖励的大模型强化学习方案
RubricRL实战:用结构化评分表替代标量奖励的大模型强化学习方案

1. 为什么我要折腾 RubricRL 这件事大语言模型做强化学习,这两年最主流的路线基本被 RLHF 和后来的 DPO、GRPO 这些方法占满了。但真上手做过的人都知道,RLHF 那套奖励模型(Reward Model)的训练成本高得离谱,而且奖励模… · 2026/9/25 17:31:36

ONNX Runtime端侧部署三要素:打包、量化与线程治理
ONNX Runtime端侧部署三要素:打包、量化与线程治理

1. 项目概述:为什么端侧推理不能只靠“跑通就行”ONNX Runtime 打包、量化与推理线程治理——这九个字不是技术堆砌,而是端侧模型落地的三道生死关。我带团队做过17个终端AI项目,从智能摄像头固件到车载语音助手,再到工业手持终端… · 2026/9/25 17:31:30

Seastar 高性能服务器框架实战指南:从编译构建、构建模式到异步编程工程接入
Seastar 高性能服务器框架实战指南:从编译构建、构建模式到异步编程工程接入

后端异步编程网络 【免费下载链接】seastar High performance server-side application framework 项目地址: https://gitcode.com/gh_mirrors/se/seastar 点击查看 免费下载 Seastar 是一个基于事件驱动与 future 编程模型的高性能服务器端 C 框架,支持… · 2026/9/25 17:31:30

vectorbt Rust 引擎(vectorbt-rust)完整指南:安装、引擎调度原理、源码构建与基准测试
vectorbt Rust 引擎(vectorbt-rust)完整指南:安装、引擎调度原理、源码构建与基准测试

金融科技数据分析 【免费下载链接】vectorbt The backtesting engine that gives you an unfair advantage. Run thousands of trading ideas before others finish one. 项目地址: https://gitcode.com/gh_mirrors/ve/vectorbt 点击查看 免费下载 vectorbt 是一个… · 2026/9/25 17:31:23

SwiftPM PackagePlugin 测试结果模型解析:深入 PackageManager.TestResult.TestTarget.TestCase.Test
SwiftPM PackagePlugin 测试结果模型解析:深入 PackageManager.TestResult.TestTarget.TestCase.Test

开发工具构建工具 【免费下载链接】swift-package-manager The Package Manager for the Swift Programming Language 项目地址: https://gitcode.com/gh_mirrors/sw/swift-package-manager 点击查看 免费下载 导读 本篇技术指南聚焦 Swift 包管理器(S… · 2026/9/25 17:30:53

Atlas 300V 24G推理加速卡部署YOLO模型全流程详解
Atlas 300V 24G推理加速卡部署YOLO模型全流程详解

先说明一下:这篇分享完完全全来自我最近被“Atlas 300V 24G”这个型号折腾到半夜的真实经历。我前期为了把手头YOLO模型跑起来,把官方文档翻了个底朝天,中间踩过的坑、绕过的弯,绝对比官方FAQ里写的多得多。如果你正打算在新算力平… · 2026/9/25 17:30:53

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码