快速结论:该 Issue 是“Feature Request: Improve Security against Prompt Injection attacks”,属于 llama.cpp 的功能请求与设计讨论,并非一个可复现的运行时报错。用户希望在 system prompt 中注入 secret key,让模型借此识别 prompt injection,同时用于按需加载工具定义以复用 prompt cache;维护者的结论是 secret key 并不能提供真正的安全保证,工具后置追加也存在 chat template 和位置偏差等未验证风险。优先排查方向应放在现有 --cache-reuse 缓存复用能力,以及把安全边界交给应用层(沙箱、最小权限、human-in-the-loop)。
适用环境:Issue 中用户自述运行 llama.cpp,模型为 Qwen3.6-27B,并加载 mmproj(多模态投影);该模型不支持 SWA,也不支持 context shifting。维护者提到 SWA 模型需要 --swa-full,且该缓存复用功能在加载 mmproj、M-RoPE 以及 hybrid/recurrent 模型时当前被禁用。未确认的操作系统、CUDA、Python、PyTorch 或显卡版本,不在本指南中补写。
最快修复方案:暂无确认的一步修复方案。该 Issue 被标记为 enhancement 并已关闭,未合入任何代码改动;它不是“报错—修复”类问题,不能通过改配置或升级依赖一步解决。
注意事项:secret key 方案无法被模型真正验证,注入内容可以直接声称已通过验证,任何编码都能绕过服务端输出过滤,且密钥会以明文形式留在保存的会话与导出记录中。工具定义后置追加需要先做基准测试,因为 Qwen3.6 等 chat template 只在开头渲染 system 消息、会静默丢弃后续 system/developer 消息;长上下文中部还存在位置偏差,工具在 50K 处注入、150K 处使用时召回质量可能下降。
问题场景
用户在使用 llama.cpp 进行长对话推理时,发现每当顶部工具定义块发生变化,整个会话的 prompt cache 就会被“驱逐”,需要重新 prefill 整个上下文。该用户以约 1 小时生成 64K token、再额外花约 30 分钟重新 prefill 为例,希望实现两点:一是用 system prompt 内的 secret key 让模型识别伪造的“SYSTEM UPDATE”类 prompt injection;二是把工具定义从顶部移到对话中按需懒加载,从而避免改动顶部工具块导致缓存失效。Issue 属于功能请求与安全模型讨论,而非某个节点、脚本或依赖的前置报错。
报错原文
Feature Request: Improve Security against Prompt Injection attacks
原因分析
可能原因在于 llama.cpp 的 prompt cache 以 token 前缀匹配为基础,一旦顶部工具定义块被修改,其后的内容前缀不再稳定,缓存命中率下降,进而触发大范围重新 prefill。用户把“避免重算”和“防御 prompt injection”两件事绑定到 secret key 方案上。维护者指出,secret key 对模型不可验证,注入内容可自称已验证,输出过滤可被编码绕过;真正的防注入应属于应用层职责。对于性能诉求,现有机制是 --cache-reuse N,它会在工具块变化时把已缓存对话中匹配的块平移到新位置,只重算增量部分。工具后置追加则被指出受 chat template 与模型位置偏差限制,尚无基准结论。
环境排查
- 确认 llama.cpp 版本,Issue 要求使用最新代码,但未给出具体 commit 或 tag。
- 确认模型是否为 Qwen3.6-27B,以及是否加载了 mmproj;加载 mmproj 时缓存复用当前被禁用。
- 确认模型是否属于 SWA 模型,若是则需要
--swa-full。 - 确认是否属于 M-RoPE 或 hybrid/recurrent 模型,这些情况下缓存复用当前被禁用。
- 确认现有启动参数中是否已启用
--cache-reuse N,以及 N 的取值是否足以覆盖工具块的变化范围。 - 操作系统、CUDA、Python、PyTorch、显卡型号在本 Issue 中未提供,无需作为排查前提。
解决步骤
- 先区分目标:如果目的是减少工具块变化带来的重新 prefill,优先采用 llama.cpp 已有的
--cache-reuse N,而不是在 system prompt 中引入 secret key。 - 检查当前模型/加载方式是否落在缓存复用的禁用范围:加载 mmproj、M-RoPE、hybrid/recurrent 模型时该功能当前被禁用,此时
--cache-reuse可能不生效。 - 若模型为 SWA 模型,需要同时启用
--swa-full,否则缓存复用行为可能不符合预期。 - 不要把 prompt injection 防护寄托在 secret key 上;按维护者建议,把工具执行放在无 root 的沙箱中,遵循最小权限原则。
- 在 agent 迭代之间保留 human-in-the-loop,并为每一次迭代限定作用范围,将安全责任放在应用层而非模型输出层。
- 如仍想推进“工具定义后置追加”方案,先做基准测试:在若干模型上对比工具定义前置与后置时的 tool call 准确率,并测量工具激活位置与使用位置之间的距离,尤其关注 hybrid 模型。
- 注意 chat template 限制:Qwen3.6 模板只在开头渲染 system 消息,会静默丢弃后续 system/developer 消息,其他模板可能直接抛异常;唯一可行通道是 tool result,模板会把它渲染成普通内容。
验证方法
确认缓存复用生效的方法是:在工具块发生变化后观察 prefill 阶段实际重算的 token 数是否明显减少,而不是整段对话全部重算。安全层面无法通过“模型是否报出正确 secret key”来验证,因为注入内容可以伪造验证声明;应以沙箱隔离、最小权限和人工确认等应用层控制是否到位作为判断依据。若推进工具后置方案,则需以多模型 tool call 准确率基准结果作为通过标准,而非单一对话的直观表现。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Vulkan] GGML_ASSERT(neq0 == HSK) failed in ggml-vulkan.cpp during speculative draft decoding (MTP) with tensor split](https://www.chat-gpts.plus/wp-content/uploads/2026/10/29418-35687e0f-768x403.jpg)

![How to install faster-whisper [guide]](https://www.chat-gpts.plus/wp-content/uploads/2026/10/1240-4be1f140-768x403.jpg)