新闻详情

新闻详情

首页 / 资讯中心 / 详情

LangChain第八节-Agent 提示词与动态提示词

发布时间:2026/9/27 7:32:56来源:尧图网络
LangChain第八节-Agent 提示词与动态提示词
上一篇我们创建了 Agent但它的行为是“默认”的。你想让它更专业、更个性、更听话关键就在于提示词Prompt。写在前面为什么提示词如此重要你可能已经发现同一个模型不同的提示词输出质量天差地别同一个 Agent面对普通用户和 VIP 用户本应给出不同风格的回答你想让 Agent 专注某个领域但它总是“跑题”。在 LangChain 中提示词为 Agent 提供了任务背景、行为准则和操作指南。通过system_prompt参数设置它本质上定义了 Agent 的“角色”和“使命”。提示词设置有两种方式基础设置创建 Agent 时传入一个固定的system_prompt动态设置根据运行时上下文或 Agent 状态实时生成不同的提示词本文你会学到如何用字符串和SystemMessage设置基础提示词如何用dynamic_prompt中间件实现动态提示词如何通过context_schema定义运行时上下文一个完整的电商客服案例普通用户 vs VIP 用户建议先收藏再跟练。本文假设你已完成环境搭建并拥有 DeepSeek API Key。一、基础提示词设置基础提示词设置是在create_agent时传入一个参数system_prompt。这个参数可以是字符串strSystemMessage类型案例使用字符串和 SystemMessage 设置系统提示词fromlangchain.agentsimportcreate_agentfromlangchain_core.messagesimportSystemMessagefromlangchain_core.toolsimporttoolfrominit_llmimportdeepseek_llm# 工具实现两数相加tooldefadd_numbers(a:int,b:int)-str:计算并返回两个数的和。returnf和为{ab}if__name____main__:创建数学助手 Agentagentcreate_agent(modeldeepseek_llm,tools[add_numbers],# 方式一字符串# system_prompt你是一个数学助手可以实现两数相加。# 方式二SystemMessagesystem_promptSystemMessage(content你是一个数学助手可以实现两数相加。))respagent.invoke({messages:[{role:user,content:10加上20再加上30是多少}]})print(resp:,resp)resultresp[messages][-1].contentprint(result)运行结果10加上20再加上30的和是60。基础提示词适合角色固定、行为稳定的场景。二、动态提示词设置对于需要根据运行时上下文或Agent 状态调整提示词的高级场景可以使用中间件Middleware实现动态提示词。通过dynamic_prompt装饰器创建中间件可以根据用户角色生成不同的系统提示。案例电商客服 Agent普通用户 vs VIP 用户1. 定义两个工具fromlangchain.agentsimportcreate_agentfromlangchain.agents.middlewareimportdynamic_prompt,ModelRequestfromlangchain_core.toolsimporttoolfromtypingimportTypedDictimportjsonfrommy_llmimportdeepseek_llm# 工具1模拟查询订单信息tooldefquery_order_info(order_id:str)-str:根据订单ID查询订单的详细信息包括状态、商品列表和创建时间。order_database{ORD123456:{status:已发货,items:[手机X1],create_time:2025-01-15},ORD654321:{status:待付款,items:[耳机Y1],create_time:2025-01-18}}order_dataorder_database.get(order_id)iforder_data:returnjson.dumps(order_data,ensure_asciiFalse)else:returnf错误未找到订单{order_id}。# 工具2模拟检索常见问题解答tooldefsearch_faq(keyword:str)-str:根据关键词从知识库中检索相关的政策条款或解决方案。faq_knowledge_base{退货:支持7天无理由退货商品需完好且包装齐全。,保修:电子产品享受1年免费保修服务。,发货:下单后48小时内发货偏远地区可能延迟。}fortopic,answerinfaq_knowledge_base.items():iftopicinkeyword:returnanswerreturnf未找到与{keyword}直接相关的政策请尝试其他关键词或联系人工客服。2. 定义运行时上下文的数据结构classAgentContext(TypedDict):query_type:str# normal普通用户 或 vipVIP用户3. 定义动态提示词中间件dynamic_promptdefdynamic_support_prompt(request:ModelRequest)-str: 根据 query_type 生成不同的系统提示词。 query_typerequest.runtime.context.get(query_type,normal)base_instruction你是一名专业的电商客服助手。请根据工具查询结果准确、清晰地回答用户问题。ifquery_typevip:returnf{base_instruction}当前角色高级支持专员 工作要求 1.深度分析仔细分析用户描述识别潜在的根本问题。 2.精准分类将问题明确归类如“物流问题”、“产品质量”、“售后申请”。 3.方案规划若工具能解决提供具体步骤若需人工明确告知后续流程。 请使用更专业、严谨的语言。 else:returnf{base_instruction}当前角色一线客服助手 工作要求 1.快速响应优先使用工具获取订单/政策信息。 2.直接解答对于明确问题如退货、物流直接给出基于知识的答案。 3.简洁友好回复要简单明了避免复杂术语。 保持友好和高效的沟通风格。 4. 创建 Agent 并演示if__name____main__:agentcreate_agent(modeldeepseek_llm,tools[query_order_info,search_faq],middleware[dynamic_support_prompt],# 挂载动态提示词中间件context_schemaAgentContext# 关联上下文 schema)user_query我的订单ORD654321已签收但是物品坏了怎么办print(f用户问题{user_query}\n)print(场景一普通客服模式 (query_type: normal))result_normalagent.invoke({messages:[{role:user,content:user_query}]},context{query_type:normal})final_response_normalresult_normal[messages][-1].contentprint(final_response_normal)print(\n*50)print(场景二VIP模式 (query_type: vip))result_vipagent.invoke({messages:[{role:user,content:user_query}]},context{query_type:vip})final_response_vipresult_vip[messages][-1].contentprint(final_response_vip)运行结果对比精简普通客服模式根据查询到的信息我为您提供以下建议 1. 订单状态显示待付款但您已签收商品且发现损坏…… 2. 建议立即拍照取证联系人工客服…… 语言简洁友好VIP 模式基于目前的信息我为您提供以下专业分析和建议 ## 问题分类产品质量问题 ### 当前情况分析 1. 订单状态异常…… ### 建议处理方案 第一步核实订单信息…… 语言专业严谨有分析框架可以看到同一个 Agent根据query_type的不同自动切换了角色和回答风格。三、关键点解析1. 两个工具的作用query_order_info根据订单 ID 查询订单基本信息状态、商品、创建时间。search_faq从知识库中检索与用户问题相关的政策或解决方案退货流程、保修期限。2. 动态提示词如何工作动态提示词能根据运行时上下文如用户身份、问题类型实时生成最合适的系统提示词实现精准化、个性化回复。通过create_agent时传入自定义中间件函数dynamic_prompt装饰来挂载。3. context_schema 与 context 参数create_agent中的context_schema参数作用是定义运行时上下文有哪些数据。它是一个TypedDict类型用于指定执行单次任务时可能需要的动态数据如用户 ID、用户等级。步骤使用TypedDict定义上下文数据结构classAgentContext(TypedDict):query_type:str# user_id: int # 可扩展在create_agent时通过context_schemaAgentContext告知 Agent 上下文结构。调用agent.invoke时通过context参数传入符合该结构的实际数据agent.invoke({messages:[...]},context{query_type:vip})四、避坑指南system_prompt可以是字符串或SystemMessage两者效果基本一致按个人习惯选择。动态提示词中间件必须用dynamic_prompt装饰不要和wrap_model_call混淆后者用于动态选择模型。context_schema是 TypedDict定义清楚字段类型调用时传入的context必须符合该结构。request.runtime.context获取上下文在动态提示词函数中通过request.runtime.context.get(...)读取传入的数据。工具函数的 docstring 不能省Agent 依赖工具描述决定是否调用描述清晰能显著提升准确率。动态提示词在每个推理步骤前都会触发和wrap_model_call类似注意不要写太重的逻辑。五、总结这篇我们讲完了 LangChain Agent 的提示词设置基础提示词create_agent时传入system_prompt支持字符串和SystemMessage动态提示词通过dynamic_prompt中间件根据运行时上下文实时生成提示词上下文定义用TypedDict定义context_schema调用时通过context传入数据实战案例电商客服 Agent普通用户和 VIP 用户获得不同风格的回答。一句话记住基础提示词定义“你是谁”动态提示词决定“你面对谁时该怎么说话”。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

NixOS 使用 Jottacloud Command-line Tool(jotta-cli / jottad)无头备份客户端配置指南 2026/9/27 7:32:51

NixOS 使用 Jottacloud Command-line Tool(jotta-cli / jottad)无头备份客户端配置指南

包管理器操作系统 【免费下载链接】nixpkgs Nix Packages collection & NixOS 项目地址: https://gitcode.com/GitHub_Trending/ni/nixpkgs 点击查看 免费下载 Jottacloud Command-line Tool 是 Jottacloud 官方提供的无头(headless)命令…

阅读更多 →
创建与管理MySQL表 2026/9/27 7:32:51

创建与管理MySQL表

数据库中的表是存储数据的核心部分,管理好表是数据库应用的基础。通过学习创建与管理表,可以更加有效地组织和管理数据。在编程的实际应用中,掌握如何创建、查看、修改和删除表,能够帮助更好地进行数据操作和维护。 本课程将介绍数据库表的基础概念、数据类型的选择与应用…

阅读更多 →
守护 Linux 内核的核心引擎:深入解读 BPF/eBPF 的自动化测试演进与实践 2026/9/27 7:32:45

守护 Linux 内核的核心引擎:深入解读 BPF/eBPF 的自动化测试演进与实践

在过去十余年中,BPF(或称 eBPF)已经从最初简单的“伯克利包过滤器(Berkeley Packet Filter)”演变为 Linux 内核中最具革命性的内核技术之一。如今,BPF 触角延伸至网络加速、系统可观测性、安全策略等各个领…

阅读更多 →
τ--η 离散场 · 第一卷 2026/9/27 7:32:45

τ--η 离散场 · 第一卷

局域离散精确结构 96 迹 / 10 原子值 / ⟨η⟩350233/762300 / 原始谱隙 1/φ2 / 直径 5 项目 内容 版本 v2.1(吸收卷二修复项) 验证状态 第 I 部分 6/6 精确通过(本环境复跑);谱隙/直径引自卷二 证据等级 定理级&…

阅读更多 →
数据库基础与MySQL入门 2026/9/27 7:32:26

数据库基础与MySQL入门

在当今的数字化世界中,数据如同生命之水,它贯穿于各种应用和服务中。尤其在游戏行业,例如经典的《三国志》,数据库管理成了一个不可或缺的环节。这不仅涉及到用户信息的存储,还涉及到游戏状态、积分、交易等复杂的数据处理需求。 MySQL作为一个广受欢迎的数据库管理系统,…

阅读更多 →
MySQL字符集与字符序设置 2026/9/27 7:32:26

MySQL字符集与字符序设置

字符集和字符序在数据库系统中扮演着至关重要的角色,特别是在多语言环境下,正确的字符集选择不仅能确保数据的存储和显示效果,还直接影响到系统的性能和兼容性。字符集定义了如何将不同的字符进行编码和存储,而字符序则是用来控制字符在数据库中的比较和排序规则。在涉及全…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉