467 字
2 分钟
通过TypeScript语法让大模型(LLMs)理解树形json结构

动机#

最近在工作中需要针对大量的语料去抽取出树形json结构。 现有的让大模型输出json的方法一般是设置response_formatjson_object,在你指定输出样例的key是固定的时候,能够起到很好的效果。比如:

{
"name": "John",
"age": 30,
"city": "New York"
}

但是当key是动态的时候,你很难通过自然语言准确的传达出一个key名、value可变的树形结构(可以无限延伸)。

下图这样的节点树很难用自然语言或者json格式描述出来

基于TypeScript语言描述节点树#

经过搜索资料发现了采用typescriptinterface类来描述你想要的树,可以让大模型理解树的嵌套结构,而且有更多丰富的表达。

参考prompt#

  • 请返回json数据,并严格遵循这个Treeinterface
type Tree = {
[一级节点: string]: {
[二级节点: string]: Level2Node;
};
};
interface Level2Node {
"节点描述": string;
"节点任务": string[];
// 以XXX条件作为分支,进入更深层递归节点
[分支条件: string]: DeepNode;
}
interface DeepNode {
"节点描述": string;
"节点任务": string[];
"节点内容"?:string[] | string;
[分支条件: string]: DeepNode;
}
  • 在prompt中,可以通过string或string[]来告诉模型,希望在这个key下的value是纯字符串还是字符串数组,也可以使用?来表示这个key是一个可选key。
  • 可以使用|符号表示多个可选类型

总结#

事实上应该还有基于json schema方式的指定方式,但是笔者当时搜索了资料较少,自己摸索出来的基于typescript语法的方式有非常显著的成效,所以一直在使用这个方法,希望可以对需要指定llm生成json的读者有所帮助

通过TypeScript语法让大模型(LLMs)理解树形json结构
https://yunqing.org/posts/通过typescript语法让大模型llms理解树形json结构/
作者
Yunqing
发布于
2025-08-21
许可协议
CC BY-NC-SA 4.0