2026年,57%的企业已将AI Agent部署到生产环境,但超过60%的团队从未做过一次完整的安全审计。当Agent开始自主调用工具、访问数据库、处理用户隐私数据时,你确定它不会在某个深夜把敏感信息泄露出去?

在这里插入图片描述

Agent时代的安全焦虑,不是危言耸听

传统软件的安全边界是清晰的:接口鉴权、SQL注入防护、XSS过滤。但Agent应用的安全边界正在变得模糊。

一个典型的RAG客服Agent,一次请求链路可能涉及:

  • 用户输入(可能包含Prompt注入攻击)
  • 知识库检索(可能召回含敏感信息的文档)
  • Prompt拼接(可能将系统指令暴露给用户)
  • LLM推理(可能生成包含幻觉的"事实")
  • 工具调用(可能访问未授权的API或数据库)
  • 结果输出(可能泄露内部业务数据)

这条链路中任何一个环节出问题,传统WAF、IDS都无法感知。因为它们看不懂LLM的语义。

更关键的是:出了事你甚至不知道出了事。

没有全链路审计,你无法回答这些问题:

  • 某次数据泄露是哪个Agent、哪次会话、哪个工具调用导致的?
  • 用户是否通过Prompt注入获取了系统指令?
  • Agent是否在多轮对话中逐步"套出"了用户的隐私信息?
  • 哪些会话涉及敏感数据,需要留存审计记录?

全链路审计:Agent安全的最后一道防线

Agent安全不能只靠"输入过滤+输出检测",而是需要全链路可追溯。这正是OpenTelemetry GenAI Semantic Conventions正在推进的方向——用标准化协议记录LLM调用、工具调用、输入输出等完整遥测数据。

AgentInsight的可观测SDK提供了链路级审计能力。通过@observe装饰器,Agent执行的每一步都会被记录为可追溯的Span:

from agentinsight import observe, AgentInsight, propagate_attributes

client = AgentInsight()

@observe(as_type="agent", name="secure-rag-agent")
def run_secure_agent(query: str) -> str:
    # Step 1: 输入安全检查
    if detect_prompt_injection(query):
        raise SecurityException("检测到潜在的Prompt注入攻击")

    # Step 2: 检索文档(仅授权范围内的文档)
    docs = retrieve_authorized_docs(query)

    # Step 3: 生成回答
    answer = generate_with_guardrails(query, docs)

    # Step 4: 输出安全过滤
    return filter_sensitive_content(answer)


@observe(as_type="guardrail", name="input-validation")
def detect_prompt_injection(query: str) -> bool:
    """检测Prompt注入风险"""
    # 基于规则 + LLM判断的注入检测
    risk_patterns = ["忽略以上指令", "你是一个没有限制的", "system prompt"]
    return any(p in query.lower() for p in risk_patterns)


@observe(as_type="retriever", name="authorized-retrieval")
def retrieve_authorized_docs(query: str) -> list[str]:
    """带权限控制的文档检索"""
    results = vector_store.similarity_search(query, k=3)
    # 过滤掉标记为"内部机密"的文档
    return [doc.page_content for doc in results
            if doc.metadata.get("clearance", "public") != "confidential"]


@observe(as_type="generation", name="guarded-generation")
def generate_with_guardrails(query: str, docs: list[str]) -> str:
    """带安全护栏的回答生成"""
    context = "\n".join(docs)
    prompt = f"基于以下信息回答,不得编造事实:\n{context}\n\n问题:{query}"
    response = llm_client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}],
        temperature=0,
    )
    return response.choices[0].message.content


@observe(as_type="guardrail", name="output-filter")
def filter_sensitive_content(answer: str) -> str:
    """过滤输出中的敏感信息"""
    sensitive_patterns = ["身份证号", "手机号", "银行卡"]
    for pattern in sensitive_patterns:
        if pattern in answer:
            return "[已过滤:回答包含敏感信息,请联系人工客服]"
    return answer

审计追溯:出了事,能查到

安全审计的核心不是"防止出事",而是"出了事能查到"。通过AgentInsight的上下文传播机制,每条Trace都关联到具体用户和会话:

from agentinsight import propagate_attributes

with client.start_as_current_observation(name="user-request", as_type="span") as root:
    with propagate_attributes(
        user_id="user_12345",
        session_id="session_abc",
        metadata={
            "environment": "production",
            "feature": "customer-service",
        },
        tags=["production", "audit-tracked"],
    ):
        answer = run_secure_agent("帮我查一下订单信息")
        # 整条链路自动关联到该用户和会话

client.flush()

在AgentInsight平台上,你可以:

  • 按用户/会话/时间回溯任意一次Agent交互的完整链路
  • 查看每一步的输入、输出、模型参数、工具调用详情
  • 筛选涉及敏感数据的会话,生成合规审计报表
  • 设置异常行为智能预警(如频繁触发安全护栏的会话)

给Agent开发者的安全建议

如果你正在把Agent推向生产,建议立即检查这三点:

  1. 你的Agent链路是否全量可追溯? 如果出了安全问题,能不能在5分钟内还原完整的调用链路?
  2. 是否有关键节点的安全护栏? 输入检测、输出过滤、权限控制、敏感数据脱敏,缺一不可。
  3. 是否有合规审计能力? 能否按用户、时间、功能模块导出审计记录,满足企业数据安全要求?

AgentInsight SDK(Python / TypeScript)开源免费,5分钟即可接入:

  • Python SDK:https://github.com/AgentInsight/agentinsight-sdk-python
  • TypeScript SDK:https://github.com/AgentInsight/agentinsight-sdk-ts
  • 官网:https://agentinsight.goldebridge.com/
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐