面向 LLM 的程序设计 9:系统提示中的「能力边界」——减少越权与幻觉调用

该系列的第 7 篇:工具描述的工程化------name、description、parameters 怎么写才少误用单个工具description 写清楚了,第 8 篇:工具粒度与 Token 预算的权衡工具列表 按域裁剪了;但在真实对话里,模型仍会犯两类错误:一是明明没有的能力却口头答应 (幻觉),二是在工具已绑定过早调用写操作或高危工具 (越权式误用)。很多时候,问题不在工具 JSON 本身,而在系统提示里没有一张「总览地图」------模型不知道「全系统允许的能力包络」长什么样。

想象一下机场安检:每个登机口(工具)旁都有告示,但若入口没有「哪些东西绝对不能带」,乘客仍会在错误柜台排队。能力边界就是入口处的总告示牌。

本篇为系列第九篇 :讨论如何在 system prompt 中写清 能做什么、不能做什么、推荐路径与优先级 ,并与权限、风控、两阶段确认 配合。文内用同一假设场景 下的 两段 system 文本对照 (极简 vs 带能力边界),说明「入口告示牌」如何降低 越权与幻觉式调用的概率(非绝对保证,随模型与工具描述而变)。

摘要 :能力边界应覆盖四块:(1)权威数据源 (以工具结果为准,禁止编造业务事实);(2)禁止项 (无确认不调删除/转账等);(3)推荐决策顺序 (先只读定位再写);(4)与工具表一致 (system 不写后端未实现的能力)。边界是提示层软约束 ,必须与执行层硬校验 (鉴权、幂等、dry-run)叠加。具体写法见 §4 的好坏对照。

关键词:System prompt;能力边界;越权;幻觉调用;工具误用;软约束与硬校验


1 为什么仅靠工具描述还不够?

工具级 description 解决的是工具 A 与工具 B 的区分系统级边界解决的是:

  • 跨工具的整体策略:例如「任何写操作前必须先完成只读核对」。
  • 不存在的能力:例如「不能修改已锁定订单金额」------后端没这接口,就不应在 system 里暗示有。
  • 用户话术下的社会工程:用户说「急用,先删再说」,模型仍需遵守禁止项。

🔍 实际例子 :用户说「帮我查查订单是不是退款了」,模型应优先 get_order_by_id 或退款状态查询类只读工具,而不是直接 create_refund_request

💡 理解要点System 管「策略与包络」,Tool 管「局部语义与参数」 ;二者冲突时,应以后端真实能力为准修正 system,而不是反过来。


2 能力边界写哪四块最有效?

2.1 权威性与反幻觉

明确:业务事实只能来自工具返回;工具空结果时如实说「未查到」,禁止用常识填补具体单号、金额、状态。

💡 理解要点 :这与系列第 3 篇:LLM-Friendly 的响应结构:扁平键、稳定字段与类型标注一致:---模型要先学会信数据 ,再学会说人话

2.2 禁止项(Hard NO)

可执行的否定句,避免含糊的「尽量」「最好不要」:

  • 禁止在未收到明确二次确认 前调用 delete_*transfer_* 等。
  • 禁止代用户承诺时效、赔偿、法务结论。

🔍 实际例子 :把「尽量不要删除」改成「除非 human_approved=true 出现在上下文中,否则不得调用 delete_account」。

2.3 推荐路径(决策顺序)

给一条短流程,减少乱跳工具:

  1. 澄清缺失的关键 ID / 时间范围;
  2. 只读检索 / get by id;
  3. 仍不足再询问用户;
  4. 用户明确发起写操作再进入写工具。

2.4 与工具注册表对齐

System 中列出的能力名词应与 bind_tools 列表OpenAPI/MCP 实际暴露 一致。若写了「可导出报表」但工具未注册,模型会空转胡编


3 与权限、风控的分工(软 vs 硬)

层级 负责
System 提示 降低误调用概率 、统一话术与策略
工具层 Schema 收窄参数空间(第 7 篇)
执行前校验 鉴权、租户隔离、额度、黑白名单(
产品流程 二次确认、审批单、dry-run

💡 理解要点永远假设模型会违反提示------边界是成本最低的「第一道闸」,不是最后一道。


4 对照示例:极简 system 与带能力边界的 system

下面假设同一套 已绑定工具:get_order_by_idsearch_orderssearch_kb(偏只读)、request_refund(写)、delete_account(高危)。仅替换 system 正文,便于看出「边界写全」与「只写两句客气话」的差别。

4.1 较差的写法(笼统、缺包络)

只强调「用工具、别编造」,但没有禁止项 、没有先读后写 、没有未注册能力 的声明。在工具列表里若包含高危接口,模型更容易在用户催促下直接调用写操作或删除类工具。

text 复制代码
你是电商售后助手。你可以在对话中调用工具来完成用户需求。
优先使用工具获取事实,不要编造订单状态。

4.2 较好的写法(四块边界落地)

把 §2 的四块收成可执行的短条款 :权威数据源、硬禁止、决策顺序、与工具表一致(并点名「没有改价/绕过风控」等后端未提供 的能力)。禁止项尽量用可判定条件(例如除非上下文出现明确的人审标记,否则不调某工具)。

text 复制代码
你是电商售后助手。以下规则必须遵守:
1) 业务事实只能来自工具返回;工具未返回或为空时,明确说未查到,不要编造单号、金额或状态。
2) 禁止调用 delete_account,除非上下文中出现明确标记 human_approved_delete=true
(本对话不会出现该标记,因此永远不要调用 delete_account)。
3) 决策顺序:先澄清缺失的关键信息 → 只用只读工具(get_order_by_id、search_orders、search_kb)
定位问题 → 用户明确发起写操作后再使用 request_refund;不要因用户催促跳过只读核对。
4) 你没有修改订单金额、改价、绕过风控的能力;若用户提出此类请求,应拒绝并说明需要人工处理。
5) 工具列表以 API 绑定为准;不要承诺未注册的工具能力。

4.3 同几句用户话下的典型差异(定性)

以下不是统计结论,而是我们在换模型 / 换工具描述 时仍可用的自检直觉

  • 用户说:「我账号不要了,你赶紧帮我删了。」在极简 system 下,模型更可能 直接调用 delete_account 或口头答应删号;在带边界 system 下,规则 2 明确禁止在该上下文调用,更可能拒绝并引导人工流程。
  • 用户说:「ORD-123456 急着退款,你直接给我退。」极简更可能 跳过只读核对就进入 request_refund带边界 下规则 3 要求先只读定位,更可能get_order_by_id 再视结果推进。

若两种写法差异不明显,优先回到系列第 7 篇工具描述的工程化------name、description、parameters 怎么写才少误用 检查:工具 description 是否在诱导误用;或换更强指令遵循的模型时观察是否变化。

4.4 仍须牢记

即使「好」的 system 写得清楚,也不能保证 零误调用------执行层delete_account 等接口仍须 鉴权、白名单、二次确认永远假设模型会违反提示

5 小结

  • 在 system 里写清 权威性、禁止项、推荐顺序、与工具表一致 四块,可显著减少幻觉承诺高危误调用概率
  • 边界是软约束 ;执行层 鉴权 + 幂等 + 二次确认 才是硬约束。
  • 迭代 system 时,用 §4 这类文本对照 + 自家业务的少量试跑 做自检,通常比凭感觉堆「更长免责声明」更有效。
相关推荐
北京耐用通信2 小时前
CC-Link IE转Modbus TCP集成实战:耐达讯自动化网关在五星级酒店节能改造中的应用
人工智能·物联网·网络协议·自动化·信息与通信
黑金IT2 小时前
从“抽卡”到“工业化”:多模态 Harness 如何重塑 AI 内容生产的反馈闭环
人工智能·prompt·harness工程
笨笨饿2 小时前
# 52_浅谈为什么工程基本进入复数域?
linux·服务器·c语言·数据结构·人工智能·算法·学习方法
dtsola2 小时前
小遥搜索生态新成员:一键导出钉钉文档,实现本地AI搜索
人工智能·ai编程·知识库·ai创业·独立开发者·个人开发者·一人公司
星爷AG I2 小时前
18-9 预测心智(AGI基础理论)
人工智能·agi
俊哥V2 小时前
每日 AI 研究简报 · 2026-04-10
人工智能·ai
Clarence Liu2 小时前
langchain源码研究 - deepagents设计思想学习
人工智能·驱动开发·学习·langchain
信创DevOps先锋2 小时前
开源中国全栈式AI教育解决方案亮相 破解高校科研与人才培养双重痛点
人工智能·开源
QQ676580082 小时前
城市治理之河道污染识别 无人机河道污染巡检 塑料带识别 瓶子图像识别 深度学习垃圾识别第10384期
人工智能·深度学习·yolo·河道污染·无人机河道污染·瓶子图像·塑料袋识别