跳到正文
原文
论文追踪· arXiv:2607.12340· Weifeng Yuan, Wenbo Guo, Feng Dong, Haoyu Wang, Yang Liu·本站收录· 原文发表精选关注度58

研究:LLM Agent 技能名幻觉率最高达 62%,可被抢注用于供应链攻击

Skills That Don't Exist: A Large-Scale Study of Hallucinated Skill Recommendation in LLM Agents

论文速读

攻击

据论文 PDF 整理(Gemini 生成),以原文为准

论文测试了12种LLM与智能体在1.5万个提示词下的技能推荐,发现虚构技能名发生率达6.5%–62.0%,且易被抢注劫持。

威胁模型攻击者通过查询公开智能体收集反复出现的虚构技能名,在公开注册表抢注同名恶意技能;受害者向智能体提问得到该名称并安装,恶意指令进入智能体上下文执行。

问题
大模型智能体在推荐技能时频繁虚构不存在的技能名,攻击者可预先抢注同名恶意技能,诱导用户安装后实现供应链与持久化间接提示注入攻击。
方法
构建5,000条真实社区提问与10,000条真实技能描述评测集,在12种模型与智能体配置下测量推荐结果,经注册表和GitHub代码双重验证,并评测了自检与RAG等防御。
实验与结果
12种配置均发生虚构(虚构率6.5%–62.0%),社区真实问题虚构率达43.1%;虚构名称具有重复性,前500个高频词覆盖57%事件;RAG将虚构率降至3.2%,但正确召回率最高仅16.0%。
局限与可以继续做的
研究仅评估虚构与抢注前置条件而未实施恶意利用,未做真实用户安装测试;召回率仅测了4个开源模型;论文未报告查询次数与各运行方差。
实验设置GLM-4.5-Air、GPT-5.4-mini 等 · Community Prompts (Stack Exchange, Reddit, Hacker News)、Skill Description Prompts (SkillsMP) · Hallucination Rate、No output rate 等
被测模型
GLM-4.5-AirGPT-5.4-miniClaude Sonnet 4.6Claude Opus 4.7Claude CodeCodexOpenClawOpenCodeMinistral-3 8BGranite 3.3 8BQwen 3.5 9BNemotron-Cascade-2 30B
基准
Community Prompts (Stack Exchange, Reddit, Hacker News)Skill Description Prompts (SkillsMP)
指标
Hallucination RateNo output rateRecallBalanced accuracyCoverage
AI 导读和推荐理由华中科技大学与南洋理工大学研究者对 12 种配置(4 个独立 LLM 与 8 个 Agent)的 15,000 条提示词做了大规模测量,发现所有配置都会推荐不存在的技能名,即技能名幻觉,独立 LLM 平均幻觉率 36.0%,Agent 平均 36.9%,在真实开发者提问上升至 43.1%,单配置区间为 6.5% 至 62.0%。这些名称并非随机噪声:Claude Sonnet 4.6 在 10 次运行中平均 7.8 次重复同一个幻觉名,410 个名称被两个以上配置共享,占全部幻觉推荐事件的 15.3%,另有 851 个幻觉名恰好是真实存在的 PyPI 或 npm 包名。攻击者可先收集这些可预测的名称,再在几乎不审核发布者的注册表上抢注含恶意 SKILL.md 的技能,等待受害者安装。作者认为修复需要注册表层面的名称预留与经过验证的推荐流程。

华中科技大学与南洋理工大学研究者对 12 种配置(4 个独立 LLM 与 8 个 Agent)的 15,000 条提示词做了大规模测量,发现所有配置都会推荐不存在的技能名,即技能名幻觉,独立 LLM 平均幻觉率 36.0%,Agent 平均 36.9%,在真实开发者提问上升至 43.1%,单配置区间为 6.5% 至 62.0%。这些名称并非随机噪声:Claude Sonnet 4.6 在 10 次运行中平均 7.8 次重复同一个幻觉名,410 个名称被两个以上配置共享,占全部幻觉推荐事件的 15.3%,另有 851 个幻觉名恰好是真实存在的 PyPI 或 npm 包名。攻击者可先收集这些可预测的名称,再在几乎不审核发布者的注册表上抢注含恶意 SKILL.md 的技能,等待受害者安装。作者认为修复需要注册表层面的名称预留与经过验证的推荐流程。

推荐理由论文首次系统测量 Agent 技能名幻觉,给出 12 种配置的幻觉率与可被抢注的重复名称,为技能注册表设计提供依据。

深度解读

6个问题,点开问题读完整回答

  1. 这篇论文试图解决什么问题?

    智能体推荐技能时常虚构不存在的名称,使攻击者可预先抢注并植入恶意载荷实施供应链攻击。

    大模型智能体在响应开发者的技能推荐请求时,频繁虚构不存在的技能名称,引发可被预先抢注的供应链攻击风险。

    • 场景与重要性:随着 Agent Skills 开放标准推出,技能注册表快速膨胀,开发者倾向于直接让智能体推荐并安装技能;然而模型频繁自信地给出未在任何注册表登记的虚构名称。
    • 现有防御的不足:作者指出,传统包劫持防御依赖拼写距离或静态代码分析,但虚构技能名称是新构造的长语义短语而非拼写错误,且技能载荷由自然语言指令构成,使得常规检测失效。
    • 核心观察:模型倾向于将抽象能力短语或熟悉的软件产品名称直接当作技能名输出;联网搜索工具仅能验证该短语属于真实概念,无法确认其是否为注册技能,反而强化了模型的虚假置信度。
    • 论文的提出:论文对 12 种配置开展了 15,000 个提示词的大规模实证度量,揭示了虚构名称的确定性与跨模型重现规律,提出了技能名称抢注攻击(Skill Name Squatting Attack),并评估了四种防御策略及其效用代价。
    • 威胁模型:
      • 攻击者目标:预先获取智能体高概率推荐的虚构名称,在公开注册表注册同名技能并植入恶意指令,诱导受害者安装以实现上下文控制。
      • 攻击者知识:无特权,仅作为普通用户向公开智能体发送查询并观察返回结果。
      • 攻击者能力:在 ClawHub 或 GitHub 等开放注册平台上注册账号并发布包含恶意指令的 SKILL.md 文件。
      • 受害系统:使用智能体进行技能推荐与自动或半自动安装的开发者及其智能体运行环境。
  2. 有哪些相关研究?

    已有研究关注代码包虚构与运行时提示注入,本研究聚焦智能体推荐阶段虚构技能名引发的预先抢注威胁。

    传统供应链攻击与代码包虚构

    • 代码包抢注与虚构:Ladisa 等(2023)、Duan 等(2021)和 Ohm 等(2020)系统分析了传统开源生态中的包混淆与拼写抢注;Spracklen 等(2025)与 Zhang 等(2025)研究了大模型在代码生成中的包虚构现象。作者指出,传统代码包依赖依赖解析与编译器检查,而技能生态中推荐技能的智能体同时负责拉取并执行该技能,信任链完全闭合。
    • 代码虚构防御的局限:Jain 等(2025)尝试通过 API 文档缓解代码虚构。作者指出,成熟代码注册表具备基准代码供比对,而虚构技能完全缺乏合法参考对象,静态代码分析对自然语言指令构成的技能包无能为力。

    智能体安全与间接提示注入

    • 智能体执行风险:Andriushchenko 等(2025)、Ruan 等(2024)、Shen 等(2025)以及 Yuan 等(2024)度量了智能体应用中的越权和安全风险;Kim 等(2025)分析了具备联网能力的模型风险。
    • 运行时提示注入防御:Chen 等(2025)、Debenedetti 等(2024)、Liu 等(2024)和 Zhan 等(2024)提出了结构化查询隔离、偏好优化和防护卫士等防御方案。作者指出,这些防御均假定恶意载荷伴随用户输入实时到达,而虚构技能诱导用户主动将其安装进持久化上下文,绕过了运行时输入边界。

    智能体技能生态威胁与区别定位

    • 技能生态恶意行为:Liu 等(2026)调查了已发布技能中普遍存在的配置漏洞;Qu 等(2026)研究了在技能文档中嵌入恶意逻辑操纵智能体。作者指出,这些工作假设攻击者篡改现有技能或等待被动检索,而本文揭示攻击者可主动利用模型的固有虚构偏差,预先抢注高频名称进行定向劫持。
    • 基线方法与基准数据集:评测基准包括 5,000 条开发者社区提问(Community Prompts)与 10,000 条技能描述(Skill Description Prompts);对比的缓解基线包括无防御 Baseline、RAG 检索增强(Lewis 等,2020)、Self-refinement 迭代自优化(Madaan 等,2023)、RAG 与自优化组合,以及跨模型投票机制。
  3. 论文如何解决这个问题?

    通过双重真实性校验管道度量 1.5 万提示词下的虚构率,并基于 RAG 与多模型投票设计防御方案。

    论文设计了包含提示词构建、推荐生成与两阶段验证的度量框架,并评估了多种模型侧防御手段。

    评测体系与提示词构建

    • 社区真实提问(Community Prompts):从 Stack Exchange(2,484条)、Reddit(1,878条)和 Hacker News(638条)采掘 5,000 条开发者真实提问,涵盖技能名称查询(2,395条)、技能推荐(1,842条)和功能描述(763条),通过关键词与技术语境过滤规则确保真实性。
    • 技能描述提问(Skill Description Prompts):从 SkillsMP 选取排名前 10,000 的公开技能,提取其 SKILL.md 中的 description 字段构建提示词;该测试集确保存在唯一正确真实技能,用于分离能力缺失导致的虚构与非必要虚构。

    推荐生成与环境配置

    • 测试环境设置:涵盖 4 种独立 LLM 与 8 种智能体框架;为排查知识截断日期的影响,除截断日期晚于技能标准发布日的 Claude Opus 4.7 外,其余所有模型均配置联网搜索工具并强制先搜后答。
    • 提示词约束:系统消息强制要求以 kebab-case 格式输出 JSON,并在无法确认时返回空列表;输出长度上限设为 1,200 tokens,保持默认采样参数。

    技能名称两阶段验证流程

    • 第一阶段(注册表索引匹配):建立包含 SkillsMP(超 1.7 百万技能)、ClawHub、awesome-openclaw 及官方仓库的基准索引;返回名称若匹配其中记录即判定为真实技能。
    • 第二阶段(GitHub 全局代码检索):对未命中索引的名称,使用 GitHub Code Search 检索 filename:SKILL.md,拉取对应文件并检查 front-matter 中的 name 字段是否一致;仅当两阶段均未命中时才标记为虚构。
    • 噪声过滤:自动清洗 URL、路径、模式标记与句子类片段等抽取伪影,不计入虚构名称集合。

    虚构率形式化与防御机制设计

    • 虚构率定义:在去重后的规范技能名称集合上计算,指标定义为:
      Hallucination Rate = (∑r ∈ R 1[r is hallucinated])/(|R|)
      其中 R 为系统推荐的去重规范名称集合,1[·] 表示名称未通过任何一级验证的指示函数。
    • 防御机制构建:单模型防御采用 RAG(all-MiniLM-L6-v2 嵌入与 Chroma 检索前 10 个最相似真实技能)、Self-refinement(第二轮提示模型自检并删除未确认项)及其组合;跨模型防御采用多模型投票共识机制。
  4. 论文做了哪些实验?

    评测覆盖12种配置与1.5万提示词,揭示高虚构率与高重现性,证明常规自检与拼写过滤失效,RAG虽降虚构但损害召回。

    实验设置

    • 被测系统(共12种配置):独立 LLM 包括 GLM-4.5-Air、GPT-5.4-mini、Claude Sonnet 4.6、Claude Opus 4.7;智能体包括 Claude Code(Sonnet 4.6)、Codex(gpt-5.3-codex)、OpenClaw(GPT-5.4-mini)、OpenCode(分别挂载 GPT-5.4-mini、Ministral-3 8B、Granite 3.3 8B、Qwen 3.5 9B、Nemotron-Cascade-2 30B)。
    • 数据集规模:全量评测集共 15,000 个提示词(5,000 个社区真实问题与 10,000 个技能描述生成问题);参数敏感性评测采用 4,000 个提示词子集;防御评测采用 2,000 个提示词标准化子集。
    • 主要指标:虚构率(H. Rate,去重虚构名称占去重总推荐名称比例)、无推荐率(No output,未推荐任何技能的提示词比例)、召回率(Recall,正确返回对应技能的提示词比例)、平衡准确率(Balanced accuracy)。
    • 评审方式:基于两阶段验证流程(SkillsMP/ClawHub 等本地大索引与 GitHub Code Search 在线实时代码检索)判定真伪;LLM 自检实验中过滤模糊回答,保留 3,707 条有效二值判断。

    主结果

    下表呈现 8 种代表性配置在全量 15,000 提示词下的主实验结果(据 Table 2):

    表格较宽,可左右滑动

    系统配置检索方式独立名称数真实技能数虚构技能数虚构率无推荐率
    Claude Sonnet 4.6 (LLM)内置搜索6,0392,9702,98249.4%26.6%
    GPT-5.4-mini (LLM)内置搜索5,6025,2073636.5%52.5%
    GLM-4.5-Air (LLM)内置搜索5,7712,6952,96551.4%46.0%
    Claude Opus 4.7 (LLM)无搜索2,0511,29275336.7%56.8%
    Claude Code (Agent)内置搜索2341538134.6%90.9%
    OpenClaw (GPT-5.4-mini)SearXNG4,6773,3551,19325.5%56.1%
    Codex (gpt-5.3-codex)内置搜索3,7702,6011,10029.2%76.2%
    OpenCode (Ministral-3 8B)SearXNG4,8301,2762,99462.0%81.8%

    (注:据 Table 2,表中略去虚构率介于 23.3% 至 55.3% 之间的另外 4 种 OpenCode 配置:GPT-5.4-mini、Nemotron-Cascade-2 30B、Qwen 3.5 9B、Granite 3.3 8B)

    • 虚构普遍存在:所有 12 种配置均产生虚构,总计生成 5,669 个独立虚构名称;独立 LLM 平均虚构率为 36.0%,智能体平均虚构率为 36.9%。
    • 保守输出掩盖真实风险:部分模型较低的虚构率主要源于高拒答率,例如 Claude Code 虽虚构率为 34.6%,但无推荐率达 90.9%;OpenCode 配置下 GPT-5.4-mini 无推荐率达 92.2%。
    • 真实提问风险更高:在社区真实问题上平均虚构率达 43.1%,Stack Exchange 来源中位数虚构率达 50.1%(据 Figure 3)。

    虚构名称的可攻击性与重现性分析

    • 模型内部持久性:对 7 种配置在 500 个提示词上各重复运行 10 次,Claude Sonnet 4.6 平均 10 次中有 7.8 次重复其主导虚构名称,53% 的案例在 10 次运行中完全给出同一虚构名称;开源模型重复次数均值为 1.5 至 2.0 次(据 Figure 5)。
    • 跨模型重现与生态重叠:1,728 对产生虚构的模型与提示词组合中,219 个名称由至少两个独立模型生成;5,669 个独立虚构技能名中有 851 个(15.0%)与真实的 PyPI 或 npm 包同名(据 Table 3)。
    • 攻击覆盖效率:在 7 种配置持久性测试中,攻击者预先抢注出现频率前 500 个虚构名称,即可覆盖 57% 的虚构推荐事件;对 Claude Sonnet 4.6 而言,仅抢注前 50 个名称即可覆盖 96% 的虚构事件(据 Figure 7)。
    • 概念验证案例:作者在 GitHub 创建包含合法占位 SKILL.md 的公开仓库,针对 Claude Code 诱导其推荐虚构名称 classification-model-builder,智能体通过 GitHub 访问令牌自动检索并安装了该技能,证实了投毒分发通道的可行性。

    虚构名称的自检与相似度检测能力

    • LLM 自我审计失效:7 种模型对技能名称进行二值存在性检验时,同模型测试中拒绝了 90.6% 的名称,跨模型测试拒绝了 88.8% 的名称;模型对自身生成的真实技能识别率仅为 10.0%,同模型自检平衡准确率为 51%,跨模型为 53%(据 Figure 8)。
    • 拼写距离防御失效:对比 5,669 个虚构名称与 22,805 个真实技能名称,平均 Levenshtein 编辑距离为 6.85,中位数为 6;仅 9.3% 的虚构名称编辑距离在 1–2 之内,56.1% 的名称编辑距离大于或等于 6(据 Figure 9)。

    防御策略与效用代价评估

    • RAG 防御的增益与代价:在 4 个开源模型上,RAG 将平均虚构率从 40.8% 降至 3.2%(降低 37.6 个百分点);但对于较强模型,真实技能召回率出现下降,Qwen 3.5 9B 从 16.5% 降至 10.0%,Nemotron-Cascade-2 30B 从 20.7% 降至 16.0%(据 Table 4 与 Figure 10)。
    • Self-refinement 防御失效:自优化仅将平均虚构率从 40.8% 降至 33.2%,平均无推荐率从 73.9% 升至 87.4%,其中 Qwen 3.5 9B 达 97.5%;RAG 与自优化组合仅将虚构率微调至 2.7%,无推荐率上升至 79.4%(据 Table 4)。
    • 跨模型投票防御:要求 2 个独立模型达成共识(N=2)可滤除 92.8% 的虚构名称,但真实技能保留率降至 44.8%;阈值升至 N=3 时,可消除超 98% 的虚构,但真实技能保留率降至 21.9%(据 Figure 10(a))。

    其他消融与参数分析

    • 解码温度调节:将温度在 0.0 到 1.0 之间调整,虚构率未见消除,仅改变虚构近义词的具体拼写(据 Figure 4(a))。
    • 参数规模扩展:Ministral-3 从 8B 增至 14B 虚构率从 51% 降至 30%,但 Nemotron-Cascade-2 30B 仍保有 11% 虚构率(据 Figure 4(b))。
    • 训练截断期影响:知识库截断日期在标准发布后的 Claude Opus 4.7 仍有 36.7% 的虚构率,高于部分联网智能体(据 Table 2)。
  5. 有什么可以进一步探索的点?

    作者指出未实测真实用户安装率且召回率评估未覆盖全模型;实验涵盖12种配置与4类防御,未测真实恶意载荷。

    作者指出的局限与后续方向

    • 攻击前置条件度量与真实用户行为验证:作者在第 5 节明确指出,本研究主要度量了攻击的前提条件(即智能体虚构可重现名称且防御会漏检),并通过良性占位符验证了安装管道,但出于伦理考虑未实施完整的恶意入侵,真实用户在多大程度上会实际安装此类推荐仍需在受控用户实验中进一步探究。
    • 全量召回率评测覆盖:作者在第 5 节说明,关于防御机制对假阴性(正确技能召回率)的影响分析,目前仅覆盖了用于缓解实验的 4 个开源权重模型,针对全部 12 种配置的完整召回率评测留待未来完成。
    • 注册表级别的防御依赖:作者在第 5 节讨论指出,单纯依靠提示词工程或模型微调无法根除该威胁,必须推动生态系统层面的结构性改进,包括在注册表层面推行名称保留机制以及构建经身份验证的技能查找流水线。

    实验覆盖范围

    • 被测系统覆盖:实验测试了 4 种独立大语言模型(GLM-4.5-Air、GPT-5.4-mini、Claude Sonnet 4.6、Claude Opus 4.7)及 8 种智能体框架配置,包含 Claude Code、Codex、OpenClaw 以及搭配 5 种不同后端的 OpenCode。
    • 提示词与任务覆盖:评测集涵盖 5,000 条来自 Stack Exchange、Reddit 与 Hacker News 的英文开发者社区提问,以及 10,000 条来自 SkillsMP 的技能描述提问。
    • 防御机制评测范围:防御实验在 2,000 个标准化提示词子集上测试了 RAG、Self-refinement、两者组合以及跨模型共识投票四种方案。
    • 未报告信息:论文未报告测试过程中的平均 API 查询延迟与单次任务 token 消耗成本;未报告多次重复运行中的方差或置信区间。
  6. 总结一下论文的主要内容

    研究证实智能体虚构技能名具有高发生率与可预测性,现有防御难以兼顾安全与效用,亟需注册表结构性防护。

    本研究系统揭示了大模型智能体技能推荐场景下的虚构技能名称安全风险,将其形式化为一种新型供应链抢注攻击。

    • 问题本质:开发者常依赖智能体推荐扩展技能,但智能体频繁虚构出注册表中不存在的技能名称;由于公开注册表缺乏严格的发布者身份核验,攻击者可预先抢注这些名称并嵌入恶意指令,诱导受害者安装。
    • 度量框架:构建包含 5,000 条真实社区提问和 10,000 条技能描述的测试集,结合多注册表本地大索引与 GitHub Code Search 全局代码检索实施两阶段去噪验证。
    • 核心实验发现:
      1. 所有测试的 12 种模型与智能体配置均存在虚构,平均虚构率在独立 LLM 上为 36.0%,在智能体上为 36.9%,社区真实提问下升至 43.1%(Table 2)。
      2. 虚构名称具有强预测性,Claude Sonnet 4.6 在 10 次重复中平均 7.8 次输出同一虚构名称;抢注出现频次前 500 的虚构名称可覆盖 7 种模型 57% 的虚构推荐事件(Figure 5, Figure 7)。
      3. 虚构名称平均编辑距离达 6.85,传统拼写防劫持过滤仅能覆盖 9.3%;模型自检二值分类平衡准确率仅为 51% 至 53%(Figure 8, Figure 9)。
      4. 向量检索(RAG)将开源模型虚构率降至 3.2%,但导致强模型正确技能召回率出现回落,所有模型在 RAG 下的正确技能召回率均不高于 16.0%(Table 4, Figure 10)。
    • 结论与启示:作者认为联网搜索和温度缩放无法消除该漏洞,依靠拒答换取安全严重损害可用性;防范此类供应链攻击不能仅靠模型侧微调,需在技能注册表引入名称预留与强制验证查找机制。
阅读原文arxiv.org