这篇适合谁,读完能做到什么
适合已经能让大模型调用工具、准备把智能体交给别人使用的开发者。读完你能用分步的方法写系统提示,知道智能体常见的五类威胁各自怎么防,并在关键动作前加上人工确认。
智能体为什么需要更严格的约束
普通的大模型应用主要是回答问题。智能体还会调用工具、访问系统、替用户执行操作,出错的后果更重。系统提示(system message)是给模型的元规则,决定它怎样与用户和数据打交道。智能体要完成具体任务,需要的指令比普通应用更具体,所以系统提示对它更重要。[1]
准备
- 一个能运行 Python 的环境。
- 一个可以调用的模型服务。示例使用微软 Agent Framework 中的
FoundryChatClient,项目地址和模型部署名从环境变量AZURE_AI_PROJECT_ENDPOINT和AZURE_AI_MODEL_DEPLOYMENT_NAME读取,身份认证使用AzureCliCredential。[1] - 如果不打算用这套 Azure 环境,仍然可以沿用下面的提示写法,把模型调用换成自己的服务。
上手步骤:用元系统提示生成系统提示
- 写一段元系统提示(meta system message)。它是给大模型的模板,告诉模型怎样为你要建的智能体写系统提示。示例如下:[1]
You are an expert at creating AI agent assistants.
You will be provided a company name, role, responsibilities and other
information that you will use to provide a system prompt for.
To create the system prompt, be descriptive as possible and provide a structure that a system using an LLM can better understand the role and responsibilities of the AI assistant.- 写基础提示。它要说清智能体的角色、要完成的任务,以及其他职责。示例是一个虚构的旅行社 Contoso Travel 的订票代理:查询航班、订票、询问座位和时间偏好、取消已订航班,并在航班延误或取消时通知客户。[1]
- 把元系统提示作为系统消息,连同基础提示一起交给大模型,让它生成最终的系统提示。示例的输出是一份 Markdown 文档,分为公司名、角色、目标、主要职责、语气风格、用户交互说明和补充说明几个部分。[1]
- 迭代。一条系统提示很少第一次就能用。每次只对基础提示做小改动,重新运行,再比较结果,逐步改进。[1]
五类威胁和对应的防护
智能体的风险可以按五类来想,每一类都有对应的防护方向。[1]
- 任务与指令攻击:攻击者通过提示或输入改变智能体的目标。防护是在输入进入智能体之前做校验和过滤,并限制对话轮数,因为这类攻击通常需要多次交互。[1]
- 访问关键系统:智能体能接触存有敏感数据的系统时,攻击者可能破坏它们之间的通信,或借智能体间接探听系统信息。防护是只按需授权,保证通信安全,并实施身份认证和访问控制。[1]
- 资源与服务过载:攻击者借智能体发送大量请求,可能导致服务故障或产生高额费用。防护是限制智能体对每个服务的请求次数,同时限制对话轮数和请求数。[1]
- 知识库投毒:不直接攻击智能体,而是污染它使用的数据,让回答出现偏差。防护是定期核验工作流中使用的数据,并确保只有可信的人能够修改。[1]
- 级联故障:一处错误可能牵连与智能体相连的其他系统。防护是让智能体在受限环境中运行,例如 Docker 容器,并为系统返回的错误设计回退机制和重试逻辑。[1]
人工确认:在关键动作前让人点头
人工确认(human-in-the-loop)让用户在智能体运行过程中给出反馈,通过批准或终止来决定流程是否继续。这时用户相当于多智能体系统中的一个参与者。[1]
示例代码用 Microsoft Agent Framework 实现了这一步:模型先给出回答,程序再请用户输入 APPROVE 或 REJECT。完整代码如下:[1]
import os
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential
# Create the provider with human-in-the-loop approval
provider = FoundryChatClient(
project_endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"],
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
credential=AzureCliCredential(),
)
# Create the agent with a human approval step
response = provider.create_response(
input="Write a 4-line poem about the ocean.",
instructions="You are a helpful assistant. Ask for user approval before finalizing.",
)
# The user can review and approve the response
print(response.output_text)
user_input = input("Do you approve? (APPROVE/REJECT): ")
if user_input == "APPROVE":
print("Response approved.")
else:
print("Response rejected. Revising...")这段代码的骨架是:生成回答、打印出来、等待用户确认。输入不是 APPROVE 时,它只打印 Response rejected. Revising...,真正的修订逻辑需要自己补上。[1]
配套的 notebook 还讲到人工确认的几个要点:动作执行前的审批关口、按风险分级,以及审计日志。[1]
限制和常见问题
- 系统提示是软约束。把规则写进提示,不能代替输入过滤、权限控制和隔离环境。上面五类威胁的防护各不相同,互相替代不了。[1]
- 每个动作都让人确认,会拖慢智能体。更实际的做法是按风险分级,只对高风险动作设置确认关口,并保留审计日志。[1]
- 示例用的是终端里的
input(),只演示了确认的流程。真实产品中的确认界面、超时处理和谁有权批准,需要按自己的场景设计。[1]
下一步
想深入的话,可以读微软的负责任 AI 概览,Azure 关于生成式 AI 模型和应用评估的文档,以及关于安全系统消息(safety system messages)的指南。[1]
本文改编自 Microsoft 开源课程《AI Agents for Beginners》第 6 课[1],原文以 MIT 许可证发布。
来源
- 1Building Trustworthy AI AgentsMicrosoft ai-agents-for-beginners (MIT)
引用本页: 怎么做一个可信的智能体:系统提示与人工确认. TellWorld, https://www.tellworld.net/zh/practice/practice-trustworthy-agents. 更新于 2026-11-14