鱼皮AI导航
鱼皮AI导航
  • 主页
  • 社区
  • AI工具
  • AI知识库
  • AI提示词
  • MCP
  • Skills
  • AI学习资源
  • AI资讯
  • GitHub开源
登录/注册
站长:程序员鱼皮 老鱼简历 商务合作 增值电信业务经营许可证
2026 鱼皮AI导航 | 沪ICP备19026706号-6
5
3
8

Agent 不是多角色聊天,而是让大模型在边界内完成任务

Ryan
Ryan
2026-07-01 23:04
阅读 1211
Ryan
2026-07-01 23:04
阅读 1211

Agent 这个词现在被用得很乱。有人把它理解成“会自己思考的 AI”,有人把它理解成“多个角色互相讨论”,也有人认为只要给大模型接几个工具,就已经是在做 Agent。

但从工程角度看,Agent 最重要的不是“看起来多自主”,而是:

它能不能在明确边界内,稳定完成一个多步骤任务。

这才更接近真实 AI 应用开发。

image.png

一、普通大模型调用解决的是“回答”,Agent 解决的是“任务”

普通 LLM 调用一般是这样的:

用户输入一个问题,模型返回一段文本。

比如用户问:

帮我写一段求职信。

模型直接生成一段求职信。

这个过程没有问题,但它本质上还是一次文本生成。模型并不知道用户的真实简历细节有没有支撑这段求职信,也不知道目标 JD 的关键要求是什么,更不知道哪些内容不能夸大。

RAG 往前走了一步:它会先检索知识库、文档或数据库,再让模型基于材料回答。它主要解决的是“回答有没有依据”。

但 Agent 要解决的不是单次回答,而是任务推进。它不只是“查资料再回答”,而是要根据任务目标,在多个步骤之间做选择:

  • 它可能需要先判断用户意图,再决定要不要查询订单;
  • 它可能需要先检索售后政策,再判断是否能退款;
  • 它可能需要生成一个草稿,但不能直接提交;
  • 它可能需要发现证据不足,然后暂停,要求用户补充信息。

也就是说,Agent 面向的不是单次回答,而是一个可执行的任务过程。

所以我更愿意把 Agent 看成一个系统问题:

Agent 不是把 prompt 写得更像人,而是把模型放进一个可以行动、可以观察、可以被约束的系统里。

二、Agent 和 Workflow 的区别

我不太建议一上来就从“自主规划”理解 Agent。

Anthropic 在《Building effective agents》里把 agentic systems 分成 workflow 和 agent。Workflow 是 LLM 和工具按照预设代码路径被编排;Agent 则是 LLM 可以动态决定自己的流程和工具使用方式。它们都属于 agentic system,但工程含义不同。

这个区分很重要。

如果你的任务路径本来就很清楚,比如:

  1. 解析 JD
  2. 解析简历
  3. 匹配能力项
  4. 找出缺口
  5. 生成定制简历
  6. 做证据检查
  7. 输出风险提示

那它更适合先做成 workflow,而不是一上来就交给 Agent 自己规划。

Workflow 的好处是可控、可测、可复盘。

Agent 的价值在于处理那些路径不固定、步骤数量不确定、需要根据中间结果不断调整的任务。

比如客服场景里,用户可能问的是物流、退款、发票、商品参数、投诉、优惠券、售后政策,也可能把多个问题混在一起。系统很难提前写死所有路径,这时 Agent 才有更明确的价值。

换成代码视角,区别更明显:

Workflow 的下一步主要由开发者写死。
Agent 的下一步主要由模型根据当前状态决定。

这不是说 Agent 没有代码控制,而是说代码负责提供工具、状态和边界,模型负责在这些边界里选择下一步。

但这不代表 Agent 可以无限自由。恰恰相反,Agent 越能行动,越需要边界。

三、用代码理解 Agent

从代码角度看,Agent 不是一个神秘概念。

它可以先理解成:

Agent = 一个由 LLM 驱动下一步决策的任务循环。

这里的“循环”不是说所有框架源码都必须写成 while,而是说 Agent 的运行语义大致相同:模型决定下一步,应用执行工具,工具结果写回状态,模型再基于新状态继续判断。

▼
java
复制代码
while (!state.isFinished()) { AgentDecision decision = llm.decideNextStep(state, availableTools); if (decision.isFinalAnswer()) { return decision.answer(); } if (decision.isToolCall()) { policyGate.check(user, decision.toolName(), decision.arguments()); ToolResult result = toolExecutor.execute( decision.toolName(), decision.arguments() ); state.addToolResult(result); traceLog.record(decision, result); } if (decision.needHumanApproval()) { return pauseForHumanReview(state); } }

这不是某个 Agent 框架的完整源码,而是 Agent 的核心运行语义。

普通 LLM 是:

▼
java
复制代码
String answer = llm.chat(userQuestion); return answer;

RAG 是:

▼
java
复制代码
List<Document> docs = retriever.search(userQuestion); String answer = llm.chat(userQuestion, docs); return answer;

Workflow 是:

▼
java
复制代码
JdInfo jd = parseJd(input); ResumeInfo resume = parseResume(input); MatchResult match = matchResumeToJd(jd, resume); RewriteResult rewrite = rewriteResume(match); RiskReport risk = checkEvidence(rewrite); return result;

Agent 是:

▼
java
复制代码
AgentState state = new AgentState(userGoal); while (state.canContinue()) { AgentDecision decision = model.decide(state, tools); switch (decision.type()) { case CALL_TOOL -> { ToolResult result = executeTool(decision); state.observe(result); } case ASK_USER -> { return askUserForMoreInfo(decision.question()); } case NEED_APPROVAL -> { return waitForHumanApproval(decision.action()); } case FINAL -> { return decision.finalAnswer(); } } }

区别就在这里:

Workflow 的下一步是代码写死的。
Agent 的下一步是模型根据当前状态决定的。

这也对应了 Anthropic 对 workflow 和 agent 的区分:前者按预设路径执行,后者由模型动态决定流程和工具使用。


代码上,一个 Agent 至少有 5 个对象

不要先想 LangGraph、CrewAI、AutoGen。先想这 5 个类。

(1)AgentState:任务状态

▼
java
复制代码
public class AgentState { private String goal; private int step; private List<Message> messages; private List<ToolCallRecord> toolCalls; private Map<String, Object> facts; private boolean finished; private boolean needHumanApproval; }

它回答一个问题:

任务现在进行到哪一步了?

没有 AgentState,就不是连续任务,只是一次问答。


(2)AgentTool:工具

▼
java
复制代码
public interface AgentTool { String name(); String description(); ToolResult execute(Map<String, Object> arguments); }

比如电商客服 Agent 里可以有:

▼
java
复制代码
public class GetOrderTool implements AgentTool { public String name() { return "get_order"; } public String description() { return "根据 orderId 查询当前用户的订单状态"; } public ToolResult execute(Map<String, Object> args) { String orderId = (String) args.get("orderId"); // 查数据库 / 调接口 return orderService.getOrder(orderId); } }

Spring AI 的 Tool Calling 也是类似思想:模型提出工具调用请求,应用程序负责解析、执行工具、再把结果返回给模型。模型不是直接操作你的数据库。


(3)AgentDecision:模型决定下一步

▼
java
复制代码
public sealed interface AgentDecision permits CallTool, FinalAnswer, NeedHumanApproval { } public record CallTool( String toolName, Map<String, Object> arguments ) implements AgentDecision { } public record FinalAnswer( String answer ) implements AgentDecision { } public record NeedHumanApproval( String action, String reason ) implements AgentDecision { }

这里就是 Agent 和普通程序最大的区别。

普通程序是你写:

▼
text
复制代码
先查订单,再查政策,再生成回复。

Agent 是模型返回:

▼
text
复制代码
{ "type": "CALL_TOOL", "toolName": "get_order", "arguments": { "orderId": "123456" } }

然后你的后端决定:

  • 这个工具存不存在?
  • 这个用户有没有权限?
  • 这个 orderId 是不是他的?
  • 这个动作需不需要人工确认?

(4)PolicyGate:权限边界

▼
java
复制代码
public class PolicyGate { public void check(User user, String toolName, Map<String, Object> args) { if (toolName.equals("submit_refund")) { throw new NeedHumanApprovalException("退款提交必须人工确认"); } if (toolName.equals("get_order")) { String orderId = (String) args.get("orderId"); if (!orderService.belongsToUser(orderId, user.id())) { throw new AccessDeniedException("不能查询他人订单"); } } } }

边界不是 prompt 里写一句“不要越权”,而是代码里真的拦住。

OWASP 的 Excessive Agency 风险,本质就是 LLM 系统被授予过多功能、权限或自主性后,可能造成破坏性动作;所以工具权限、人工确认、最小授权必须在系统层实现。


(5)AgentRunner:核心循环

▼
java
复制代码
public class AgentRunner { private final LlmClient llm; private final ToolRegistry toolRegistry; private final ToolExecutor toolExecutor; private final PolicyGate policyGate; private final TraceLog traceLog; public AgentResult run(User user, String goal) { AgentState state = new AgentState(goal); while (!state.isFinished() && state.getStep() < 10) { AgentDecision decision = llm.decideNextStep(state, toolRegistry.availableTools()); if (decision instanceof FinalAnswer finalAnswer) { state.finish(); return AgentResult.success(finalAnswer.answer()); } if (decision instanceof NeedHumanApproval approval) { return AgentResult.waitingForApproval(approval.action(), approval.reason()); } if (decision instanceof CallTool callTool) { policyGate.check(user, callTool.toolName(), callTool.arguments()); ToolResult result = toolExecutor.execute( callTool.toolName(), callTool.arguments() ); state.addToolCall(callTool, result); traceLog.record(state, callTool, result); state.nextStep(); } } return AgentResult.failed("Agent stopped: max steps reached."); } }

OpenAI Agents SDK 里所谓 agent loop,本质也是:处理工具调用,把结果送回 LLM,然后继续运行直到任务完成;同时配套 guardrails、sessions、tracing 等工程能力。


用电商客服理解一次完整执行

用户问:

我的订单签收三天了,商品破损,可以退吗?

Agent 第一次判断:

▼
json
复制代码
{ "type": "CALL_TOOL", "toolName": "get_order", "arguments": { "orderId": "A1001" } }

后端执行:

▼
java
复制代码
policyGate.check(user, "get_order", args); ToolResult order = getOrderTool.execute(args); state.addToolResult(order);

工具返回:

▼
json
复制代码
{ "orderId": "A1001", "status": "SIGNED", "signedDaysAgo": 3, "productCategory": "electronics" }

Agent 第二次判断:

▼
json
复制代码
{ "type": "CALL_TOOL", "toolName": "get_refund_policy", "arguments": { "category": "electronics" } }

工具返回:

▼
json
复制代码
{ "category": "electronics", "returnWindowDays": 7, "needDamagePhoto": true, "autoRefundAllowed": false }

Agent 第三次判断:

▼
json
复制代码
{ "type": "FINAL", "answer": "你的订单签收 3 天,仍在 7 天售后窗口内。但商品破损需要上传图片凭证,我可以先帮你生成退款申请说明,提交退款前需要你确认。" }

这就是一个最小 Agent 的运行过程。

它不是一次性回答,而是:

▼
text
复制代码
看当前状态 → 决定查订单 → 得到订单结果 → 决定查政策 → 得到政策结果 → 判断不能直接退款 → 给出受边界约束的答案

所以,从代码视角看,Agent 不是让模型直接控制系统,而是让模型提出下一步动作,再由应用程序判断、执行、记录和约束。

四、Agent 的核心不是“自主”,而是工具、状态和边界

一个更工程化的 Agent 定义可以是:

Agent = LLM + Tools + State + Control Loop + Guardrails

拆开看:

  • LLM 负责理解任务和选择下一步。
  • Tools 负责连接数据库、订单系统、知识库、搜索服务等外部能力。
  • State 负责记录任务进展、工具调用历史和中间结果。
  • Control Loop 负责把模型决策、工具执行和结果反馈串起来。
  • Guardrails 负责限制模型不能越权、不能乱调用工具、不能直接执行高风险动作。

这里最容易被忽略的是工具调用的安全边界。

Spring AI 官方文档对 tool calling 的说明很清楚:虽然通常说 tool calling 是模型能力,但实际执行工具调用逻辑的是客户端应用。模型只能请求工具调用并提供参数,真正执行工具、返回结果的是应用程序本身;模型并不会直接获得工具背后的 API 权限。

这句话非常关键。

因为它说明 Agent 不是让模型直接控制系统,而是让模型提出行动意图,再由应用层判断是否执行。

比如电商客服 Agent 面对“我的订单能退吗?”这个问题时,它不应该直接回答“可以退”。

更合理的方式是:先查询订单,再查询售后政策,再结合订单状态、商品类目和平台规则生成回复。如果涉及退款提交,就只能生成草稿,不能直接执行。

这才是可上线的 Agent。

五、Agent 的真正风险:从“回答错误”变成“行动越界”

普通大模型回答错,风险主要在内容层。

Agent 一旦接入工具,风险就进入系统层。

它可能查错数据,调用错工具,传错参数,泄露敏感信息,执行不该执行的操作,或者在错误前提下连续行动。

OWASP LLM Top 10 里专门列出了 Prompt Injection、Insecure Plugin Design、Excessive Agency 等风险。其中 Excessive Agency 指的是给 LLM 过多、未受约束的行动自主权,可能破坏可靠性、隐私和信任。

这也是为什么我不赞成一开始就做“全自动 Agent”。Agent 安全不能只靠 prompt,而必须靠工具权限、参数校验、人工确认和审计日志这些系统层设计。

真正的工程顺序应该是:

  • 先让模型会读。
  • 再让模型会查。
  • 再让模型会生成草稿。
  • 再让模型在低风险场景自动执行。
  • 最后才考虑高风险动作的半自动化或自动化。

对于工具权限,我更倾向于分四层:

READ:只读查询,可以自动执行。
例如查询订单状态、查询物流、检索政策文档。

DRAFT:只生成草稿,不真正提交。
例如生成退款说明、工单回复、邮件草稿。

WRITE_REVIEW:会改变系统状态,必须人工确认。
例如提交退款申请、修改用户资料、发送正式邮件。

DANGEROUS:默认禁止。
例如删除数据、批量修改权限、执行任意命令。

如果一个 Agent 系统没有这个权限分层,那它本质上还不能算生产级 Agent,只是一个接了工具的聊天机器人。

六、一个更接近真实项目的 Agent 示例

假设我们要做一个跨境电商客服 Agent。

用户问:

我这个订单已经签收三天了,商品有破损,能不能退?

一个不可靠的 AI 可能会直接回答:

一般情况下,签收七天内可以退货。

这句话听起来合理,但它不一定正确。

因为真实判断至少需要几个条件:

  • 订单是否真实存在?
  • 订单是不是当前用户的?
  • 商品类目是什么?
  • 是否支持无理由退货?
  • 破损是否需要上传凭证?
  • 当前是否超过售后时间?
  • 平台政策和商家政策是否冲突?
  • 是否需要人工客服介入?

所以更合理的 Agent 流程应该是:

▼
text
复制代码
用户问题 → 意图识别:售后 / 退款 / 商品破损 → 查询订单状态 → 检索售后政策(RAG 在这里是证据工具) → 检查商品类目 → 判断是否需要图片凭证 → 生成客服回复 → 标注证据来源 → 如果涉及退款提交,进入人工确认 → 记录整次 Agent Run

在这个流程里,模型不是凭常识回答,而是在工具和证据的约束下完成任务。

这就是 Agent 相比普通聊天机器人的真正区别:它不是凭常识直接回答,而是在工具、证据和权限边界内推进任务。

七、为什么不要一开始做多 Agent

很多 Agent 教程喜欢从多 Agent 开始:

一个产品经理 Agent,一个架构师 Agent,一个开发者 Agent,一个测试 Agent,大家互相讨论,最后输出结果。

这种演示很容易吸引眼球,但工程价值未必高。

多数真实业务问题,不是靠“多几个角色说话”解决的,而是靠更清楚的任务边界、更可靠的工具、更稳定的状态记录和更严格的输出校验解决的。

多 Agent 只有在这些场景下才更有必要:

  • 不同角色确实需要不同职责;
  • 不同 Agent 拥有不同工具权限;
  • 需要一个 Agent 审查另一个 Agent 的输出;
  • 任务路径复杂到单一 workflow 难以维护;
  • 系统需要长期运行和异步协作。

否则,多 Agent 很可能只是增加延迟、成本和调试难度。

所以第一篇不应该从多 Agent 开始,而应该先讲清楚单个 Agent 如何完成任务、如何调用工具、如何记录状态、如何控制边界。

八、我对 Agent 的第一性原则

如果让我用一句话定义 Agent,我不会说它是“自主智能体”。

我更愿意说:

Agent 是一个让大模型在工具、状态和权限边界内完成任务的工程系统。

这个定义不够炫,但更适合真实开发。

因为 Agent 的难点从来不只是“让模型更聪明”,而是:

  • 它能调用什么工具;
  • 它不能调用什么工具;
  • 它每一步是否有依据;
  • 它的工具调用是否可追踪;
  • 它在证据不足时能不能停下来;
  • 它在高风险动作前能不能交给人;
  • 它失败后能不能复盘。

所以 Agent 专题不应该从框架开始,不应该从多 Agent 开始,也不应该从“让 AI 自己干活”开始。

它应该先回答一个更基础的问题:

当我们说要做 Agent 时,我们到底是在做一个聊天机器人,还是在做一个可控的任务执行系统?

  • 如果只是聊天,普通 LLM 就够了。
  • 如果只是查资料,RAG 就够了。
  • 如果路径固定,Workflow 就够了。
  • 如果任务路径不确定,需要工具、状态、反馈和权限边界,才真正进入 Agent。

下一篇,我会解释 Agent 核心术语:ReAct、Tool Calling、State、Memory、Workflow 到底是什么?

参考资料

  • Anthropic:Building effective agents
  • OpenAI Agents SDK:Agent loop、Tools、Sessions、Tracing、Guardrails
  • Spring AI Reference:Tool Calling
  • OWASP LLM Top 10:Excessive Agency
  • ReAct:Synergizing Reasoning and Acting in Language Models
  • Toolformer:Language Models Can Teach Themselves to Use Tools

我是 Ryan,一个专注于可信 AI 应用工程的开发者,技术博客:yanxai.com,研究如何让 AI 生成从“看起来对”走向“有证据、可追溯、可验证”。

AI
教程
资源
交流
技术
笔记
5
8
分享
操作

相关专栏

Agent 从入门到实战

Agent 从入门到实战

本专栏系统拆解 AI Agent 从基础概念到工程落地的完整路径,包括 Tool Calling、任务规划、工作流编排、上下文管理、工具权限、状态控制、多步骤任务执行、Agent 评测、安全边界和生产级落地。 我不会把 Agent 简单讲成“会自己思考的 AI”,而是把它拆成一套能在明确边界内稳定完成多步骤任务的工程系统。适合想从普通大模型调用,进阶到 RAG、Tool Calling、Workflow 和生产级 AI 应用开发的 Java 后端与 AI 应用开发者。

评论
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片

目录

🔥 热门文章
1
手把手教你设计一个成熟的 Agent Harness
2530
2
我用 REA 逆向了付费颜色 APP,结果很意外!
570
3
离谱,DeepSeek 崩了 5 小时,大家却喊:梁圣恩情还不完??
420
4
DeepSeek 全新模型发布,性价比最高的一集!
380
5
B 站上 DeepSeek 闹鱼灾了,我发起《大肥鱼清除计划》!
370
6
自己学习ai,直接买cursor 的套餐,还是买gpt 或者claude 的套餐?
360
7
又一个国产版 Codex 神器,也来卷办公了!
330
8
day3-如何写出一个高质量的 Skill(组内分享) 高质量 Skill 不是“一个调得很顺的巨型 Prompt”,而是一个可验证、可回归、可维护的能力包。 先定义“什么算好”,再实现“怎么做好”。评估体系先于 Skill 本身成型。 下面用“故障诊断 Markdown 转 YAML”作为例子,但方法是通用的。 --- 一、先想清楚:Skill 到底是什么 一个 Skill 至少包含四部分: 部分 作用 接口 输入什么、输出什么、边界在哪 流程 分几步做,每步的产物是什么 规则 硬约束、经验规则、失败模式 降级策略 不确定时怎么办,而不是硬编一个看似合理的结果 高质量 Skill 的共同点:职责单一、接口清晰、规则可定位、输出可验证。 反例:把几十条经验全塞进一个主 Prompt,改一条规则要重调整个 Prompt,评估时也不知道是哪条规则退化。 --- 二、核心方法:先建评估,再写 Skill 不要先写转换器再补测试。正确顺序是: 1. 定义输出契约:什么算合法、什么算合格; 2. 建金标准集:一小批人工认可“可放行”的样本; 3. 先写评估 Skill:让它在金标准集上跑出基线; 4. 再迭代生成 Skill:每次修改跑同一套评估,无退化且目标维度提升才算正向。 这就是评估驱动开发:评估是 Skill 的单元测试,金标准集是回归锚点。 --- 三、评估 Skill:三层门禁,逐层递进 前一层不过,后一层不跑。每层留可追溯证据。 第 1 层:确定性硬门禁 用解析器、Schema、校验器完成,不消耗模型成本。 · 输出可解析; · 必填字段齐全,类型/枚举合法; · 引用目标存在,无悬空引用、无不可达节点; · 关键路径至少有一条能到达预期出口。 不通过直接打回。 第 2 层:语义断言 用脚本 + 结构遍历检查“逻辑对不对”,仍然保持确定性。 通用检查项: · 覆盖率:源材料里的关键步骤、分支、条件,输出里是否都有对应? · 完整性:每个判断节点是否都有明确出口?有没有死胡同? · 可达性:每条路径是否都能到达预期终点?有没有无出口循环? · 顺序与依赖:有先后依赖的操作,是否保留了顺序?有没有被拍平成无序列表? 例子:故障诊断转换中,检查“每个判断项是否有是/否/异常出口”“每条路径是否能到根因”。 第 3 层:LLM-as-Judge 只处理解析器表达不了的维度:忠实度、完整性、可执行性。 但 Judge 会漂移,不能单独放行,必须建立在第 1、2 层之上。Judge 的 Prompt、rubric、模型版本都要版本化,换模型必须用金标准集重新校准。 通用 Judge 维度: 维度 问什么 忠实度 输出是否忠实源材料意图?有没有自行发明内容? 完整性 关键步骤、条件、证据是否保留?隐式知识有没有被压成空话? 收敛性 输出是否仍指向原目标,而不是发散? 可执行性 下游不依赖源材料能否直接使用? --- 四、金标准集:回归测试的锚点 不需要一开始就标注几百份。用已认可的样本当种子,扩到 15~30 份,覆盖失败模式而非随机抽样: · 完整正例:典型流程; · 边界/异常分支:异常路径、循环、前置失败回退; · 已知易错模式:实际踩过的坑; · 留出集:不参与调优,只用于最终验收,防过拟合。 金标准不需要完美,只需要当前标准下认可可放行。 回归指标:关键路径用 pass^k(k 次全过),稳定性用 pass@k。 --- 五、工程约束:让批量产出可重放 · 幂等:同输入 + 同 Skill 版本 + 同规则 → 输出一致,否则无法判断变好是 Skill 改了还是随机波动; · 隔离不阻断:单份失败进隔离队列,记录失败层和原因,不阻塞其余; · 版本绑定:规则、rubric、金标准集进 Git;每份报告绑定“源版本 + 生成 Skill 版本 + 评估 Skill 版本 + Judge 模型版本”; · 抽样人工复核:Judge 临界样本 + 易错模式,人工抽检结果反过来校准 rubric。 --- 六、Skill 本身怎么写 · SKILL.md 控制篇幅,写清:输入约定、输出契约、分步流程、硬规则、降级策略; · 经验规则放 references/ 或 rules/,按失败模式分类,不要全塞进主 Prompt; · 不确定时标 needs_review: true,不要硬编看似合理的结果; · 迭代由评估报告驱动:报告告诉你哪层挂了、哪类失败模式,你改对应规则文件,而不是漫无目的调 Prompt。 --- 七、落地顺序(不要反过来) 1. 固化输出契约:Schema + 结构约束; 2. 建金标准集:从已认可的 + 最易出错的样本开始; 3. 先写评估 Skill:跑出基线报告; 4. 再迭代生成 Skill:每次修改对比逐项通过率,无退化且目标提升才算正向; 5. 批量运行 + 隔离回放:失败进队列,结束后人工抽检; 6. 评估 Skill 自身版本化:换 Judge 模型必须重新校准。 --- 八、给组员的三条硬要求 1. 不许凭感觉说“变好了”:每次修改必须附评估报告对比,逐项通过率说话。 2. 不许跳过确定性门禁直接看 Judge 分数:前两层挂了,Judge 分数没有意义。 3. 不许把规则堆进主 Prompt:规则按失败模式分文件,评估报告要能定位到具体文件。 --- 一句话收尾 生成 Skill 决定“能不能做”,评估 Skill 决定“敢不敢用”。 先让评估体系站稳,再让生成器迭代。这样交付的不是一堆“看起来还行”的产出,而是一套可证明、可回归、可交接的 Skill 质量体系。
310
9
AI 越强,被它拒绝的代价就越大 我有时候会想:AI 越来越厉害之后,有些事情,会不会反而越来越难做? 这个想法看起来有点矛盾。AI 明明在降低门槛,让不会写代码的人做出软件,让不会画画的人生成图片,让一个人完成过去需要整支团队才能完成的工作。但今天用 Codex 的时候,AI 拒绝帮我编写 SQL 注入的请求体,而那还是我有源码、在本地跑测试的情况。那么,往后是否只会更难? 我们假设某一天,AI 说:「这个请求违规,我不能帮助你。」到那个时候,你还有多少能力,能绕过它,把事情做完? 这里的「违规」需要打个引号。平台的规则、模型的判断、法律的要求,以及一件事实际有没有造成伤害,彼此之间并不总是画得上等号。一个请求可能确实危险,也可能只是缺少上下文被误判,或者恰好落在某家公司的限制范围里。 无论是哪种情况,随着我们越来越依赖 AI,这句拒绝都可能变得越来越贵。 今天,一个程序员让 AI 帮忙写代码,AI 拒绝了,他大概率还有别的办法:查文档、找开源项目、问同行,或者自己写。麻烦一点,慢一点,但路还在。 可如果十年之后,大部分程序都由 AI 完成,情况就不一样了。 很多人从接触编程的第一天起,就习惯了描述需求、等待生成、运行结果、继续迭代。他们能做出相当复杂的产品,却未必经历过独立处理底层问题的训练。平时,这种能力结构完全够用,效率甚至更高。只有 AI 拒绝的时候,他们才会发现:平常被省掉的那段学习过程,恰好是此刻最需要的东西。 到那时,一次拒绝的成本,可能就从「今晚多花两个小时」,变成「先花半年学会这门技术」。 拿 SQL 注入举个稍显极端的例子:往后,连真正理解这类攻击如何发生、能够独立构造测试的人,会不会也越来越少? 这里也包括那些有正当需求的人。一个开发者想检查自己的旧系统,一个经过授权的安全研究员想复现漏洞,假如 AI 识别到危险模式就拒绝,而使用者又只熟悉「让 AI 帮我检查」,这项原本可以独立完成的工作,就这样卡住了。 但是安全专家不会因此消失,但这类技能可能越来越集中在少数人手里。你仍然可以找专家,只是要付出更多的钱、更多的时间,以及更高的沟通成本。 类似的困境,未必只发生在网络安全领域。 你想从一个停止维护的软件里取回自己的数据,需要解析它的旧文件格式。AI 判断这涉及规避保护措施,拒绝继续。你拥有这些数据,却没有能力把它们读出来。 你买了一台设备,厂商停止提供服务。你想修改程序让它继续运转,过程中需要处理某种访问限制。AI 不愿协助,而你所掌握的维修方式,早已只剩下「把报错发给 AI」。 你想给常用的网站写一个辅助工具,减少重复操作。平台将此归入自动化限制,AI 也据此拒绝。过去会写脚本的人可以自己判断、自己处理;未来的使用者,可能连从哪里开始都不知道。 这些例子有一个共同点:当工具同时承担了「执行工作」和「传授知识」的角色,它的拒绝就不只是挡住了一次任务,也挡住了获得这种能力的机会。 更麻烦的是,这种依赖往往是我们主动选择的,而且每一步都很合理。 既然 AI 几秒钟就能做好,为什么还要花几个月学习?既然公司可以采购成熟的 AI 服务,为什么还要养一支负责基础工作的团队?既然市场上已经很少有人手写这些东西,学校为什么还要花大量时间教? 对个人、公司和学校来说,这些选择都有现实依据。但叠加起来,整个社会保留的独立能力就可能越来越少。等到某项能力突然受到限制,我们才发现,备用方案早已在追求效率的过程中被一点点削掉了。 所以,「AI 越强,做事越便宜」可能只描述了未来的一半。 另一半是:被允许的事情越来越便宜,被拒绝的事情依然需要人工完成,却要面对更少的人才、更高的报价,以及越来越难获得的知识。两边的成本差距,会越拉越大。 有人会说,可以换一个模型,或者用本地模型。这确实是重要的选项。只要工具之间还有充分竞争,开放模型还足够可用,限制就未必能形成真正的门槛。 但备用方案也需要维护。它需要硬件、知识、软件生态,以及一群仍然理解这些系统的人。如果大多数人已经习惯了最方便的商业服务,那么「理论上还有别的办法」和「普通人实际用得起、用得明白」,之间仍然可能隔着很远。 我担心的,正是这段距离。 我不指望 AI 对任何请求都照单全收。对明显会伤害他人的行为设置限制,有充分的理由。但我们也需要关心:限制由谁定义,误判有没有申诉渠道,用户能不能换工具,以及脱离这个工具之后,还剩下多少独立行动的能力。 保留这些能力,平时看起来甚至有点低效,明明可以自动生成,还要理解原理;明明可以一键完成,还要知道手动怎么做。 但这些看似多余的知识,会在工具拒绝、失效、涨价或改变规则的那一刻,成为真正的选择权。 AI 越强,我们可能越需要留意它说「不」的那一刻。 因为那句话的分量,最终取决于:它拒绝之后,我们还能做什么。
310
10
什么是LLM
300
🔥热门工具
朱雀AI检测朱雀AI检测
朱雀AI检测助手朱雀AI检测助手
LovartLovart
老鱼简历老鱼简历
WritePass官网WritePass官网
面多多面多多
CursorCursor
星月写作星月写作
零感AI零感AI
墨得问题墨得问题