测试目标:用Python实现dice formula的语法解析与求值。此处dice formula的语法类似FVTT中所使用的,详见文档:Dice Modifiers | Foundry Virtual Tabletop 与 Advanced Dice | Foundry Virtual Tabletop。具体的语法由我以BNF文法编制。
模型:Gemini-2.0-Flash/Deepseek-R1等
时间:2025-02-09
记录:
- 尝试让LLM直接生成整个程序失败,显然它并不理解BNF/上下文无关文法到底代表什么。由于这个任务并不需要AST,只是简单的解析求值,所以只用正则表达式应该是足够的。在实际中,LLM生成的正则表达式完全不对,我甚至怀疑它能否写一个四则运算计算器(实际应该是可以的)。
- 在加入提示词,要求它使用Parser Generator后,LLM会尝试使用Lark。此时,它产生了一个比较充实的代码骨架,包括模拟骰子的点数、主函数驱动逻辑等。但是BNF的具体语法还是有问题。它似乎也完全不理解Lark的Transformer是怎么用的。
- 我手动实现了基础的Transformer,要求它对语法做扩展。这一步它生成的代码是对的,但是出现冗余。它对BNF的理解真的不太行。
- 我完成了整个程序,然后将FVTT的文档中对某些modifier的描述输入,让其进行扩展。这一步它很好地完成了任务。
结论:
- 一些常见的功能可以完全自动生成
- 对于复杂的业务逻辑,需要使用者已对实现的方法有清晰的认识,此时LLM作为减轻编码负担,提高效率的工具很不错;但如果自己都不知道要怎么实现,LLM大概率也没办法生成可靠的结果。
- 尤其是对于相似性高的重复性代码,让AI来完成一般不会有什么问题
- 用来添加doc string一类的注释倒是很合适