2. Prompt 设计相关问题
问题 2.1:为什么要设计那么长的 Prompt?会不会导致模型的处理效率降低?
Prompt 的长度是经过权衡的:我们必须提供足够的上下文和规则指导,确保模型准确理解任务。实际测试中,过于简短的 Prompt 会导致 LLM 的输出质量下降,LLM容易对任务产生误解,特别是在复杂任务中容易生成不准确或不完整的结果。我们也优化精简了非必要的描述,例如减少多余的背景信息和推理链条,并直接嵌入关键任务规则,避免信息过载。
问题 2.2:Prompt 中的规则为什么需要这么详细?是否可能让模型困惑?
详细规则的目的是为模型提供明确的判断依据,特别是在提取复杂字段(如危险函数名或编程语言)时,确保推理链条完整。我们通过示例和分步描述,降低了模型的困惑风险,测试中证明这样能显著提升输出稳定性和准确率。
问题 2.3:为什么要使用递归验证?会不会增加不必要的计算复杂度?
递归验证的目的是确保模型输出的准确性和逻辑自洽性,特别是在处理模糊或不完整信息时,避免直接输出不合理的结果。我们对递归验证进行了优化,只在初次提取失败或存在矛盾时触发,因此不会显著增加计算复杂度。
问题 2.4:针对危险函数名的提取,如何解决 do_system 被误提取为 system 的问题?
我们通过在 Prompt 中明确要求提取完整函数名,包括前后缀,并强调不简化自定义函数。此外,我们在代码中添加了上下文验证逻辑,确保提取的函数名符合漏洞描述的语境。
问题2.5: Prompt 的语言对模型性能是否有影响?
事实上在这一任务上我们并未观察到明显的性能差异,但由于大部分大模型的英文 Prompt 的表现比中文更稳定,尤其是复杂逻辑推理任务,因此我们在都测试了几遍之后选择英文设计prompt。
同时,因为网页内容都是全英的,因此选用英文还有一个目的是避免同时使用多种语言对模型理解任务造成干扰。
问题 2.6:Prompt 中如何防止模型"幻觉"?
在 Prompt 中,明确列出约束条件,如:
- 禁止推测未明确提到的信息。
- 要求模型保留字段的完整性,例如危险函数名不得简化。
引入字段验证规则和示例,确保模型遵循逻辑推理。
模型回复CoT示例: