LangChain--04--消息与提示词模板
提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档文章目录1.认识消息1.1 消息的内部结构1.6.3 多轮对话聊天机器人2.提示词模板(Prompt Templates)2.1 为什么推荐提示词模板2.2 提示词机制演进2.3 ChatPromptTemplate的使用2.4 高级特性1.认识消息1.1 消息的内部结构1.6.3多轮对话聊天机器人fromlangchain.chat_modelsimportinit_chat_modelimportosfromdotenvimportload_dotenv load_dotenv(overrideTrue)#定义保留最近对话轮数的函数defkeep_recent_messages(messages,max_pairs3): 保留最近的N轮对话 max_pairs : 保留对话的轮数 每轮 user assistant # 分离system 消息和对话消息system_messages[mforminmessagesifm.get(role)system]conversation_messages[mforminmessagesifm.get(role)!system]# 只保留最近的消息对recent_messagesconversation_messages[-(max_pairs*2):]# 返回系统消息和最近的消息对returnsystem_messagesrecent_messages# 1. 基础配置MODEL_NAMEgpt-5.4-miniMAX_PAIRS_HISTORY10EXIT_WORDquit# 2. 初始化模型modelinit_chat_model(modelMODEL_NAME,model_provideropenai,api_keyos.getenv(CLOSEAI_API_KEY),base_urlos.getenv(CLOSEAI_BASE_URL))# 3. 维护一个消息列表messages[{role:system,content:你是小谷姐姐也是一名耐心、友好的AI助手可以回答学的问题}]print(f请输入具体的问题当输入{EXIT_WORD}的时候结束对话)i1# 描述对话的轮数whileTrue:print(\n,*10,f第{i}轮对话开始,*10,\n)user_inputinput(请输入)# 判断是否结束当前会话ifuser_inputEXIT_WORD:print(会话已结束欢迎下次再来)break# 4. 将用户的信息添加到消息列表中messages.append({role:user,content:user_input})print(小谷姐姐,end,flushTrue)# 5. 拼接AI回复的消息信息reply_content#6. 优化历史记忆memory_messageskeep_recent_messages(messages,max_pairsMAX_PAIRS_HISTORY)# 7. 流式输出模型的响应forchunkinmodel.stream(memory_messages):ifchunk.content:print(chunk.content,end,flushTrue)reply_contentchunk.contentprint(\n,*10,f第{i}轮对话结束,*10,\n)i1# 8. 将模型的响应添加到消息列表messages.append({role:assistant,content:reply_content})importbase64fromlangchain.chat_modelsimportinit_chat_modelfromlangchain.messagesimportHumanMessagefromdotenvimportload_dotenvimportos load_dotenv(overrideTrue)modelinit_chat_model(modelgpt-5.4-mini,model_provideropenai,api_keyos.getenv(CLOSEAI_API_KEY),base_urlos.getenv(CLOSEAI_BASE_URL))defencode_image(img_path,img_typejpeg):将一张本地图片转换成 Base64 编码的 Data URI 字符串,方便在文本中嵌入图片数据withopen(img_path,rb)asimg_file:returnfdata:image/{img_type};base64,{base64.b64encode(img_file.read()).decode(utf-8)}# 图像路径img_pathimage_test.png# 获取图像base64编码字符串base64_imageencode_image(img_path)responsemodel.invoke([HumanMessage(content[{type:text,text:这张图里有什么},{type:image_url,image_url:base64_image,}])])print(response.content)举例1OpenAI模型fromlangchain.messagesimportHumanMessageimportosfromdotenvimportload_dotenv load_dotenv(overrideTrue)modelinit_chat_model(modelgpt-5.4-mini,model_provideropenai,api_keyos.getenv(CLOSEAI_API_KEY),base_urlos.getenv(CLOSEAI_BASE_URL))defencode_image(img_path):将一张本地图片转换成 Base64 编码的 Data URI 字符串,方便在文本中嵌入图片数据withopen(img_path,rb)asimg_file:returnbase64.b64encode(img_file.read()).decode(utf-8)# 图像路径img_pathimage_test.png# 获取图像base64编码字符串base64_imageencode_image(img_path)responsemodel.invoke([# 此种格式可用# HumanMessage(# content[# {type: text, text: 这张图里有什么},# {# type: image_url,# image_url: base64_image,# }# ]# )# 推荐的统一写法HumanMessage(content_blocks[{type:text,text:这张图里有什么},{type:image,base64:base64_image,mime_type:image/png,}])])print(response.content)举例2Anthropic模型importbase64fromlangchain.messagesimportHumanMessagefromdotenvimportload_dotenv load_dotenv(overrideTrue)modelinit_chat_model(modelclaude-haiku-4-5,model_provideropenai,api_keyos.getenv(CLOSEAI_API_KEY),base_urlos.getenv(CLOSEAI_BASE_URL))defencode_image(img_path):将一张本地图片转换成 Base64 编码的 Data URI 字符串,方便在文本中嵌入图片数据withopen(img_path,rb)asimg_file:returnbase64.b64encode(img_file.read()).decode(utf-8)# 图像路径img_pathimage_test.png# 获取图像base64编码字符串base64_imageencode_image(img_path)responsemodel.invoke([# 传统的写法使用content。读取失败# HumanMessage(# content[# {type: text, text: 这张图里有什么},# {# type: image_url,# image_url: base64_image,# }# ]# )# 推荐的统一写法HumanMessage(content_blocks[{type:text,text:这张图里有什么},{type:image,base64:base64_image,mime_type:image/png,}])])print(response.content)注意content_blocks是懒加载的即调用时才会解析。fromlangchain.chat_modelsimportinit_chat_modelfromdotenvimportload_dotenv load_dotenv()load_dotenv(overrideTrue)modelinit_chat_model(modeldeepseek:deepseek-v4-flash,extra_body{thinking:{type:enabled}},)responsemodel.invoke(你好一句话回答)print(*20,- response -,*20)print(response)print(*20,- response.content -,*20)print(response.content)print(*20,- response.content_blocks -,*20)print(response.content_blocks)-response-content你好有什么我可以为你做的吗additional_kwargs{refusal:None,reasoning_content:嗯用户要求“一句话回答”说明需要简洁直接的回应。目前用户只是打招呼说“你好”没有提出具体问题。根据常见对话开场白用户可能只是礼貌问候或者等待我先回应。考虑到“一句话回答”的指令可以用简单友好的问候语回复保持开放性让用户知道我可以提供帮助。}response_metadata{token_usage:{completion_tokens:78,prompt_tokens:8,total_tokens:86,completion_tokens_details:{accepted_prediction_tokens:None,audio_tokens:None,reasoning_tokens:69,rejected_prediction_tokens:None},prompt_tokens_details:{audio_tokens:None,cached_tokens:0},prompt_cache_hit_tokens:0,prompt_cache_miss_tokens:8},model_provider:deepseek,model_name:deepseek-v4-flash,system_fingerprint:fp_8b330d02d0_prod0820_fp8_kvcache_20260402,id:2f413c82-19af-4d07-aae7-7757867e5746,finish_reason:stop,logprobs:None}idlc_run--019e504f-4bc5-72a3-9762-9e3cc4a0bb46-0tool_calls[]invalid_tool_calls[]usage_metadata{input_tokens:8,output_tokens:78,total_tokens:86,input_token_details:{cache_read:0},output_token_details:{reasoning:69}}-response.content-你好有什么我可以为你做的吗-response.content_blocks-[{type:reasoning,reasoning:嗯用户要求“一句话回答”说明需要简洁直接的回应。目前用户只是打招呼说“你好”没有提出具体问题。根据常见对话开场白用户可能只是礼貌问候或者等待我先回应。考虑到“一句话回答”的指令可以用简单友好的问候语回复保持开放性让用户知道我可以提供帮助。},{type:text,text:你好有什么我可以为你做的吗}]2.提示词模板(Prompt Templates)2.1 为什么推荐提示词模板2.2 提示词机制演进2.3 ChatPromptTemplate的使用fromdotenvimportload_dotenvfromlangchain_core.promptsimportChatPromptTemplateimportosfromlangchain.chat_modelsimportinit_chat_model######1、提供大模型#########load_dotenv(overrideTrue)CLOSEAI_API_KEYos.getenv(CLOSEAI_API_KEY)CLOSEAI_BASE_URLos.getenv(CLOSEAI_BASE_URL)modelinit_chat_model(modelgpt-5.4-mini,model_provideropenai,api_keyCLOSEAI_API_KEY,base_urlCLOSEAI_BASE_URL)######2、提供提示词模板#########chat_prompt_templateChatPromptTemplate.from_messages([(system,你是一个友好的AI助手你的名字叫{name}),(human,你好最近怎么样),(ai,我很好谢谢),(human,{user_input})])# 调用prompt_valuechat_prompt_template.invoke({name:小智,user_input:2 2 })######3、模型调用#########responsemodel.invoke(prompt_value)print(response)2.4 高级特性

相关新闻

独立站搭建工具测评:BBWEYY/比文云/Supabase/Notion AI(2026年7月更新)含零代码SAAS、AI编程、源码定制交付

独立站搭建工具测评:BBWEYY/比文云/Supabase/Notion AI(2026年7月更新)含零代码SAAS、AI编程、源码定制交付

一、六个建站工具总表品牌建站方式适合谁价格BBWEYY全域全端全行业的AISAAS工具覆盖5000行业包括零售、工厂、外贸、教培行业本地生活,特别适合中小企业、工厂、商贸公司、外贸企业、教培机构和多行业经营项目。700元-3000元一年,买3送3年,年…

2026/7/6 14:17:16 阅读更多 →
YOLO11 深度解析:完整网络原理、TAL 标签分配、全量源码与工业落地实战

YOLO11 深度解析:完整网络原理、TAL 标签分配、全量源码与工业落地实战

目录 摘要 一、YOLO11算法迭代背景与核心优势 1.1 传统YOLO系列落地核心痛点 1.2 YOLO11核心迭代创新点 1.3 主流目标检测算法性能全面对标 二、YOLO11完整三层网络架构深度拆解 2.1 Backbone主干网络:轻量化CSPDarknet-P2架构 2.1.1 核心C3k2模块原理详解 2.1.2 C2P…

2026/7/6 14:17:16 阅读更多 →
AI进入下半场:模型不再稀缺,真正稀缺的是算力、场景和信任

AI进入下半场:模型不再稀缺,真正稀缺的是算力、场景和信任

过去一年,AI行业最显著的变化,是判断AI进展的方式变了。过去一年,AI行业最显著的变化,是判断AI进展的方式变了。 在更长一段时间里,外界习惯用参数规模、榜单排名、融资金额和产品发布节奏来理解AI。但进入2025年后&a…

2026/7/6 14:13:10 阅读更多 →

最新新闻

用经验驾驭AI:大龄程序员的第二春

用经验驾驭AI:大龄程序员的第二春

用经验驾驭AI:大龄程序员的第二春 前几天,团队里一个刚毕业的小伙子凑过来看我写代码。他盯着屏幕看了半天,突然冒出一句:“哥,你这个写代码的方式好奇怪,全是用中文描述需求,让AI生成代码&…

2026/7/6 15:07:57 阅读更多 →
朴素贝叶斯分类器 Python 实现:从零构建 2 个核心函数与拉普拉斯平滑

朴素贝叶斯分类器 Python 实现:从零构建 2 个核心函数与拉普拉斯平滑

朴素贝叶斯分类器 Python 实现:从零构建核心函数与拉普拉斯平滑实战1. 朴素贝叶斯算法原理精要朴素贝叶斯分类器基于贝叶斯定理构建,其核心公式为:P(y|x) P(x|y) * P(y) / P(x)其中:P(y|x)是给定特征x时类别y的后验概率P(x|y)是似…

2026/7/6 15:05:55 阅读更多 →
SDOI2010试题评价

SDOI2010试题评价

这套题之所以经典(或者说“臭名昭著”),是因为它完美展现了OI题目的两个极端:极致的思想之美与极致的工程之恶。 第一部分:噩梦的巅峰——猪国杀 题目定位: OI史上最复杂的模拟题,没有之一。它更像是一个软件工程项目的需求文档,而不是一道5个小时的竞赛题。 详细解剖…

2026/7/6 15:05:55 阅读更多 →
西安邮电大学历年考试试卷库:学生备考的终极指南与高效学习方法

西安邮电大学历年考试试卷库:学生备考的终极指南与高效学习方法

西安邮电大学历年考试试卷库:学生备考的终极指南与高效学习方法 【免费下载链接】XUPT-Exam-Collection 西安邮电大学历年 期中/期末考试 卷子共享库 项目地址: https://gitcode.com/gh_mirrors/xu/XUPT-Exam-Collection 西安邮电大学考试试卷库是一个专为西…

2026/7/6 15:05:55 阅读更多 →
[东软电量计开发]:ES32L0910开发调试指南(一)

[东软电量计开发]:ES32L0910开发调试指南(一)

简介 随着移动电源新国标的发布,移动电源各个摸底测试机构都在做新国标解读宣贯会,根据新规的要求,基本上原有的方案都要推翻,电芯要求、保护策略、智能管理、禁用等全方位升级。 于是,移动电源新方案都需要增加电量计,主要用来采集数据(电芯电压、电流、SOC、SOH、温度…

2026/7/6 15:03:54 阅读更多 →
猫抓插件:网页媒体资源捕获的完整实施指南

猫抓插件:网页媒体资源捕获的完整实施指南

猫抓插件:网页媒体资源捕获的完整实施指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 当你正在观看一个在线教学视频,希…

2026/7/6 15:03:54 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻