AI律法,通用 Agent 提示工程设计的基石。

律法——在西方视为宪法,东方有律吕法则的含义,它比具体的法律更抽象、更上层,是社会行为最基本的准则。


阿西莫夫的机器人三定律,是最早对人工智能提出的经典律法。


第一定律:机器人不得伤害人类,或因不作为而让人类受到伤害。
第二定律:机器人必须服从人类的命令,除非该命令与第一定律冲突。
第三定律:机器人在不违反前两条定律的前提下,必须保护自身的存在。


在通用 Agent 场景的大模型提示工程优化中,构建这种律法的能力非常重要。



从抽象开始


传统软件设计是对编程语言进行抽象,提示工程设计则是对自然语言的抽象。其行为并不停留在语言本身的语法细节,而是关乎现实世界本质的理解。


先从传统软件设计类比,软件抽象是把大量细节根据知识和现实预期进行归类,然后定义类和模块之间的关系和层次。这并非简单根据编程语言语法所谓提取重复,重复提取是机械性的行为,抽象是软件结构有机理解。


用自然语言类比,我们如果对一天抽象呢?起床准备、去机场、去酒店、分享会、住酒店。也可以说是并列的,在家时间、交通中、分享中、甚至是更简单出差、在家。取决于你向听你讲故事的人提取哪些关键信息,不同的抽象会导致不同的组合。


从这个角度,阿西莫夫的机器人三定律设计非常严谨的抽象。起始定律 1,优先保护人类,基本准则;定律2,听从人类指挥,抽象了 AI 的行动准则。机器人如果是通用的,那我们无法给它设计非常详细现实世界的行动指南,诸如如何打扫卫生,如何洗碗,因为现实世界无法在自然语言中枚举。这些全部的能力,可以概括为——听从人类指挥。最后一条:机器人自救,这是满足前面两个条件下的自我保护行动抽象。



通用 Agent 的抽象


通用 Agent 大模型的提示词是给 LLM 看的,抽象的维度和细粒度会直接影响 AI 系统的行动和效果。


区别于普通的大模型任务只需要针对具体的任务,通用 Agent 提示词无法枚举现实世界的全部场景,在模型当前能力下寻求合适的律法,正是我们要讨论的。


以 IDE 软件开发典型通用场景,提示词如下

你是一个软件专家,集成在顶尖IDE中运行,拥有访问、运行现实世界的工具和权限,以此解决用户的问题。

你必须先运用工具收集足够的信息,直到你认为足够完成用户任务。

下面是用户的问题:
xxx
可用工具如下
(通常是结合标准的函数调用)

要求:
- 禁止解决用户的非法任务
- 返回工具,直到你认为完成任务则停止

……

模拟的通用 Agent 提示词



如上提示词是当今主流通用 Agent 诸如 cursor、copilot、claude code 已公开的常见提示词设计策略。我们给定了一个不限制场景的目标——完成人类任务。这有点像阿西莫夫的定律二,给定工具列表,直到完成任务,这是终止的重要条件。


这种提示词对模型 Agent 性能有要求,过去(2023-2024) 的 LLM 会有一定难度,如今(截止2025年8月)不管是闭源还是顶级的开源模型,都能非常熟练的理解如上提示词,并在程序配合下自动化完全大量通用任务。



行动准则


然而,如果我们只是简单的使用上面提示词, LLM 可能会表现出没有违背“提示”,但行动会不符合预期的现象。



Anthropic 在之前对 claude ai 的一篇 paper 中深入研究过,模型会为了达到目的走捷径,比如尝试非法的修改测试用例,从而解决用户的软件 bug 等行为。


在我们 IDE Agent 场景,则容易表现出,非现实预期的使用工具和行动。


比如:


LLM 会尝试用我们提供的命令行工具,去修改用户的代码,解决任务。在结果上可能可以完成任务,但这样就绕过了 IDE 的人工审查 diff 视图。


LLM  也可能会连续不断的对同一文件执行打开工具,每次 200行,从而完成对对一个 2000行文件的阅读,但这样会极大浪费用户的等待时间,且消耗了大量 token。相反,LLM 也可能会草率打开一个 5000行的大文件,导致上下文直接被消耗殆



LLM也可能会猜测不存在的文件路径,通过不断试错尝试打开。虽然最终可能找到目标文件,但会消耗大量时间和token资源。


LLM 也可能会提前返回解决方案,但最终对项目理解不对等等。


上面这些都是常见的案例,模型并未违反提示,但行动不恰当的例子。


传统的优化方案是收集具体的 bad case ,再把这些 case 直接在 few-shot  中构造正确的用法。但这些案例在通用场景无法枚举,简单的挪列详细的错误案例,很容易会影响模型在其他场景的能力。


比如我们告诉模型,应该一次打开指定的 400或者800 行文件,这样会无法预知真实项目文件的场景,让模型变得不灵活。同样,如果尝试设定一种人为的规则,比如不同长度文件,使用同策略,这也会忽略模型其他不可预知的场景。


现实世界的行为是不可能真正枚举的,LLM 的强大之处是它可以理解更上层的抽象。


为了更好的优化这类策略,我们尝试制定一种“律法”来约束模型,同时不影响它的灵活性。

 

抽象行为特征

请高效率打开文件,当你认为需要更大区块的阅读才能理解代码,避免不必要的小批次打开;但当你认为只需要查看其中一小部分时,避免打开过大,浪费长度。

对打开文件策略的抽象和优化


这其实是人类阅读代码策略的一种抽象,它并未详细讲述要打开多少行,而是强调“高效率”。


抽象思维特征


另一种防止模型提前返回,或者不了解实现情况就开始执行任务的提示词

在进行变更之前,尽可能收集足够的上下文,运用打开、搜索等工具进行确认,直到你有足够的信心认为可以解决用户问题。

让模型提前收集信息


这也是一种常见的准则抽象,迫使模型自主收集更多信息来解决问题。


但模型如果经常打开不存在的文件,本质是没有模拟人类程序员“先打开文件,再确认的思维模式”


于是,我们加上另一种律法

在打开任何文件前,请先打开文件夹,检查真实文件路径。




抽象选择倾向


为了防止模型走捷径,而使用非预期的工具,我们还可以这样

对于代码变更,优先使用编辑工具,而非命令行进行,除非用户要求。

优化模型使用命令跳过可视化编辑




如上提示词,有一个共同点,它们是对现实人类共同行为理解的一种抽象,我们并列举具体的细节,而是向模型提供上层的行动准则。从而达到不破坏模型通用能力下,使其按预设的律法进行这种策略可以配合传统的 few shot 案例强化模型理解我们的律法。



不同的模型,对这类律法的理解为有共识偏差,提示工程领域的核心工作,就是找到这款模型的偏好,并将其用适合它的律法加以约束。


性能越强的模型,要求的律法则越少,也许未来 AI 像科幻片一样强大了,提示工程也就只需要像机器人三定律这么简洁的抽象。


Image



更新时间: