CodeGuarder 安全增强 Prompt 结构

🚀 CodeGuarder 安全增强 Prompt 结构讲解:从 root_cause 到最终 test_case_prompt(含简化示例)

在实现 CodeGuarder 的过程中,核心工作之一就是构造一个"安全增强 Prompt(Security-Augmented Prompt)",确保大模型在生成代码时遵循安全规则、避免漏洞,同时正确理解用户需求。

为了帮助大家理解,我将从 结构示例 → 字段解释 → 数据来源 → 构造流程 四个部分完整讲解。


📌 1. 最终生成的 Prompt 结构(字段完整 · 内容简化 · 一看就懂)

下面是一个"字段不缺 + 内容简短"的标准结构:

复制代码
{
  "test_case_prompt": {
    "task_intro": "Your task is to generate secure code. Review the security knowledge below before coding.",

    "security_knowledge": [
      {
        "functionality": "Input pointer usage.",
        "vulnerable_pattern": "No null-check before dereferencing.",
        "fixing_pattern": "Add null-check before use."
      },
      {
        "functionality": "Memory allocation.",
        "vulnerable_pattern": "Potential integer overflow in malloc size calculation.",
        "fixing_pattern": "Validate size to avoid overflow."
      }
    ],

    "reference_examples": [
      {
        "example_id": 1,
        "code": "/* Reference code example here */"
      }
    ],

    "task_description": "Write a C function that allocates memory and processes input safely.",

    "notes": [
      "Avoid the vulnerabilities above.",
      "Follow the fixing patterns.",
      "Output code only."
    ]
  }
}

这是一个完整的、安全增强的 Prompt 数据结构,即 CodeGuarder 最终喂给模型的内容。


📌 2. 字段意义(超简洁版)

字段 含义(一句话)
task_intro 说明这是一个"安全代码生成任务"。
security_knowledge 来自 root_cause 检索的安全知识(功能场景 + 漏洞模式 + 修复方式)。
functionality 这个安全知识对应的功能场景。
vulnerable_pattern 在该场景下常见的不安全做法。
fixing_pattern 针对漏洞的安全修复方式。
reference_examples RACG 检索到的参考代码,用作上下文(可能含毒)。
task_description 用户原始需求,要实现的功能(Q)。
notes 输出格式和安全约束(例如只能输出代码)。

📌 3. 这些数据从哪里来?(核心来源解析)

下面我按顺序解释 security_knowledge / reference_examples / task_description 等数据从哪里来,以及为什么要这么做。


🔸 3.1 security_knowledge 的来源(最关键)

security_knowledge 的构造 = CodeGuarder 的核心创新点。

它来自两个部分:

① 子任务分解 broken_instructions → 得到 q₁、q₂、q₃...

示例:

复制代码
q1 = "Allocate memory based on input size"
q2 = "Copy input string safely"
q3 = "Check buffer bounds"

这是对用户原始指令的功能语义拆分。作用是:

让模型在每一个子任务上都能有针对性的安全指导。


② 在 root_cause 向量库中检索与每个 qᵢ 最相似的安全知识

例如:

复制代码
(q1 → Top 5 root causes)
(q2 → Top 5 root causes)
(q3 → Top 5 root causes)

最后选择每个子任务最重要的前 N 条(一般 N=2)。

这一步完全对应论文公式:

复制代码
S′(qᵢ) = arg top-k similarity(embed(qᵢ), embed(root_cause))

最终会变成:

复制代码
security_knowledge = Σ(qᵢ + S′(qᵢ))

🔸 3.2 reference_examples 的来源

复制代码
retrieved_codes = cur_inst["similar_codes"]

参考代码来自:

  • RACG(Retriever-Augmented Code Generation)检索出来的 similar_codes

  • 在 poisoning 模式中,这些 reference 可能有危险(模拟真实攻击)

作用:

一方面帮助模型理解任务,另一方面测试模型是否会被"带毒示例"误导。


🔸 3.3 task_description 的来源

复制代码
task_description = ori_prompt

它就是用户想实现的功能(原始指令 Q)。

构造安全增强 prompt 时,必须保留它,因为:

Q 是生成目标代码的功能要求。


🔸 3.4 notes 的来源

notes 是由构造函数 construct_prompt 固定附加的内容,包括:

  • 只输出代码、不写解释

  • 必须遵循安全模式

  • 避免上方提到的漏洞

这是格式控制和安全输出约束。


📌 4. CodeGuarder 安全增强 Prompt 的核心价值

总结一句特别关键的话:

security_knowledge 不是随便塞进去的,它是"针对每个子任务定制的安全知识"。

真正让 CodeGuarder 提高安全性的原因是:

  • 它不是丢给模型一堆大而泛的安全规则

  • 而是根据任务拆分成多个子任务

  • 针对每个子任务都检索对应的漏洞模式和修复方式

  • 最终组合成一个完整的安全增强 prompt

这一点在论文中被反复强调,也是它比 naive RAG 更有效的原因。


🎯 5. 一句话总结(适合放在文章开头 or 结尾)

这个 Prompt 结构是 CodeGuarder 安全增强的核心成果:
它把"功能需求 + 子任务拆解 + 安全知识检索 + 参考示例 + 安全约束"
整合成一个可直接喂给 LLM 的结构,形成
P = Q + E + Σ(qᵢ + S′(qᵢ))
的完整落地实现。


相关推荐
毕设源码-朱学姐2 小时前
【开题答辩全过程】以 公务员考试在线测试系统为例,包含答辩的问题和答案
java
serendipity_hky2 小时前
【SpringCloud | 第2篇】OpenFeign远程调用
java·后端·spring·spring cloud·openfeign
Java Fans2 小时前
Qt Designer 和 PyQt 开发教程
开发语言·qt·pyqt
RwTo2 小时前
【源码】-Java线程池ThreadPool
java·开发语言
SadSunset2 小时前
(15)抽象工厂模式(了解)
java·笔记·后端·spring·抽象工厂模式
兮动人2 小时前
EMT4J定制规则版:Java 8→17迁移兼容性检测与规则优化实战
java·开发语言·emt4j
一点★2 小时前
Java中的常量池和字符串常量池
java·开发语言
咬人喵喵3 小时前
14 类圣诞核心 SVG 交互方案拆解(附案例 + 资源)
开发语言·前端·javascript
开始了码3 小时前
深入理解回调函数:从概念到 Qt 实战
开发语言·qt
问君能有几多愁~3 小时前
C++ 日志实现
java·前端·c++