基于 LLM 的小众脚本语言(某仿真软件 DSL)生成方案--2
距离上篇 基于 LLM 的小众脚本语言(某仿真软件 DSL)生成方案 不知不觉已经过去 1 年多了,产品有了付费客户和不少试用客户,提了很多建议。
国内个科研院所的大客户,经过年初 DeepSeek 的爆火,也基本上对 LLM 有比较深入的了解了,自然而然地对 AI 产品有了更高的要求。 2025上半年掏出一个支持仿真软件 DSL 生成的 continual-pretrain Qwen-coder 模型,再加个思维链业务分析,用户直接买单,下半年完全忽悠不动了...
经过几轮迭代,已经不仅仅是一个单纯的 DSL 代码生成工具了。现在除了能生成代码,还要帮用户做仿真业务场景的分析、初始场景的部署、仿真动态逻辑代码的编写,其中难搞的点有:
- 自然语言文本到初始场景的部署。不仅包含了实体关系的抽取,还要把实体部署到地图的合适的位置上(类似于兵棋策略游戏)。
- 模型动态逻辑的生成。这个其实让资深的人类工程师来做也很难,因为仿真是有一个迭代过程的,这一点本文暂不讨论。
本文剩余部分主要分析的就是 自然语言文本到初始场景的部署 功能的实现。
主要流程
这里可以根据实体的属性,来做第一轮初始位置的生成,分别排到 L1/L2/L3 的位置;再根据实体间的关系,根据规则做一层约束,来调整上一步中的位置;最后再将同类型的实体(可能有多个实例),按阵型进行精细化调整
实体关系三元组抽取
第一个版本的 demo,直接使用 LLM 来做 NER,实体关系提取的准确率很差(受限于运行环境的限制,只能使用 30B 的模型)。中间做了一些优化,比如先做实体提取,再做实体关系的分析,并且实体数量比较多的情况下,分批进行实体关系的分析。虽然效果有一定的提升,但整体还是达不到可用的程度,并且在一个 API 中分析实体间的关系,实体数量多效果差,实体数量少又需要多次推理,速度非常慢。
接下来打算用 bert 训小模型来专门做这一块的功能。
规则引擎定义 & 隐性知识补充
收集一些常规战术战法的文献,结合使用 embedding 和关键词召回,将知识整合到前序步骤提取到的实体关系对上,进一步细化调整。
这里技术实现上倒是不难,就是战术战法库的预处理很是麻烦:
- 将战术战法文档中的明确规则提取出来,比如“获取制空权”这种实体要执行任务,或者“掩护”这种实体间的关系
- 实体要执行的任务,如果不是一个明确的原子任务,那么要进行分解,直到不可再分,组成一颗任务树
- 提取后的每一条战术战法,都要处理成结构化的量化指标,比如战斗机的“掩护”关系,对应到双机协同的距离,这样才能在后续的 workflow 中被正确应用
上面仅仅是基于公开数据做的战术库,用户还有不少领域内的垂直数据,当然这个事情就属于产品交付阶段要考虑的事情了。

浙公网安备 33010602011771号