将水印嵌入 LLM 生成的代码进行识别,在保持功能准确性方面存在挑战。现有方法假设将水印嵌入高熵标记中能够有效保持输出质量。然而,语法上重要的标记(例如关键词)通常具有最高的熵,这使得现有方法容易受到逻辑损坏的影响。本文提出了 STONE,一种语法感知的水印方法,通过仅在非语法标记中嵌入水印来保持代码完整性。我们还介绍了 STEM,这是一个在准确性、可检测性和不可感知性之间取得平衡的综合框架。对于 Python、C++ 和 Java,STONE 能够保持准确性,保持强大的可检测性,并以最小的开销实现均衡的性能。