Skip to content

生成策略 ​

生成 ADV.JS 可直接运行的游戏配置有两种方案。

  • JSON 方案:直接按照约定的格式生成 JSON 文件,包含剧本内容、图片链接等。
  • Markdown 方案:生成剧本 Markdown 文件,再通过脚本转换为 JSON 格式读取。
方案优点缺点
JSON直接生成 JSON 文件,易于读取和使用。- 嵌套较深,AI 难以直接生成符合标准的 JSON。(豆包的 JSON 结构只支持三层嵌套。)
- Token 消耗较大。(例如多轮会话,每轮会话都需要占用重复的字段名 content 等。)
Markdown生成 Markdown 文件,易读性好,易于编辑和修改。需要约定特殊语法,编写额外的转换脚本,增加了复杂性。

混合方案 ​

我们计划探索混合方案,结合 JSON 和 Markdown 的优点。

专门设计针对 AI 生成的 JSON 格式,简化嵌套结构,减少重复字段。 后续再解析成游戏的 JSON 格式。

  • 章节节点列表中存在一个 AdvFountainNode,遵循特定的 Fountain 语法。通过 Markdown 展示剧本会话内容以节约 Token。
json
{
  "title": "第一章",
  "id": "chapter1",
  "nodes": [
    {
      "type": "fountain",
      "plotSummary": "这个节点的剧情概要",
      "content": "@老邢\n我得走\n\n@掌柜\n老邢\n\n@老邢\n我公务在身 我心系百姓 我公务在身 我心系百姓\n\n@掌柜\n你听我说\n\n@老邢\n啥也别说了 事已至此 各安天命"
    }
  ]
}

此时,content 可以通过特定的语法,以最少的 token 表现出多轮会话内容。 但此时 Markdown 丢失了一部份易读易编辑的特性。

json
{
  "title": "第一章",
  "id": "chapter1",
  "nodes": [
    {
      "type": "fountain",
      "src": "wlwz/ch1/node1.md"
    }
  ]
}
wlwz/ch1/node1.md
md
---
plotSummary: 这个节点的剧情概要
---

@老邢
我得走

@掌柜
老邢

@老邢
我公务在身 我心系百姓 我公务在身 我心系百姓

@掌柜
你听我说

@老邢
啥也别说了 事已至此 各安天命

除了一次性生成后处理外,也可以分段生成。 以避免上下文长度不足的问题。(但也可能导致上下文关联性不够)

每个节点应当包含一个 plotSummary 字段,描述该节点的剧情概要。 以便后续基于此扩展剧情。