@lingjingai/scriptctl 0.62.6 → 0.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -45,6 +45,22 @@ Script v4 的新节点使用类型前缀加 6 位 Bitcoin Base58 的 NanoID。
45
45
  1-based `@` 序号定位,修改使用查询返回的正式 ID。已有 Script v3 按显式
46
46
  `version: 3` 继续走原有查询、写入、authoring 和 publish 实现,不改写旧 ID。
47
47
 
48
+ ## 原视频审核的全剧 ASR 校时与补漏
49
+
50
+ `scriptctl review -p <script.json> -s <视频目录>`(或按集排序的完整 `--video` 列表)逐集执行「豆包 Flash ASR → Gemini 对比 → 校时落盘 → Mastra 审核 → 落盘」。`--concurrency` 控制同时进行的整集流程,默认 **5 集并发**。需要 `ffmpeg` 和 `SD_AUDIO_APIKEY`;ASR 协议与 Redraw `subtitle_realign/asr.py` 一致,使用每集完整音轨,以本集 00:00 为原点。
51
+
52
+ Gemini 接收左侧带时间戳、行锚点的亚洲格式剧本正文,以及有句/词编号、起止时间的 ASR 文本,不接收剧本 JSON。按内容与上下文做多对多对应,容许 ASR 同音字、专名、标点及合理拆句差异。
53
+
54
+ - **时间不齐或缺时间**:Gemini 为每条可明确对应的台词选择 ASR 句/词起点。程序取该编号的真实毫秒时间,经 screenplay SDK 批量更新本集时间戳,保留原始文字、说话人、类型及其他字段。本集校时落盘后立即启动本集 Agent,不等待其他集;纯画面动作不按 ASR 猜时间,只有后半句证据时保留整条起点。
55
+ - **漏台词**:记录 ASR 原话、时间范围、邻近位置和理由,不直接插入 ASR 文本。随后对应集 Agent 收到清单和切好的看片窗口,逐项 `watch` 核对原片后修复并记录 finding。每处线索按窗口数增加看片预算,长句拆成不超过 15 秒的窗口。
56
+ - **无法可靠对应**:保留原样,把具体说明交给 Agent。服务请求失败、无效响应或非法修正目标记为本集失败,继续后续集;失败集不应用对比方案、不启动本集 Agent。已完成集的修改保留,失败清单在 `episode` 事件及最终统计中体现。
57
+
58
+ 剧本旁 `.review/asr/episode-N/` 保存按音频 SHA-256 复用的成功 ASR 响应,以及每次对比的 `script.txt`、`asr.txt`、`prompt.txt`、`gemini-response.json` 和 `report.json`(含前后时间、台词、缺漏线索)。当前剧本每次重新对比,不缓存对比结论。
59
+
60
+ `asr-started` / `asr-transcribed` / `asr-compared` NDJSON 按集报告进度与证据;`asr-compared` 不代表修改已落盘,带 `episode_number` 的 `asr-applied` 表示本集校时已经保存。之后的 `episode` 报告本集完成或失败,已有修改已保存;`done.statistics.fixed` 包含自动校时条数,`usage_total` 汇总对比与审核 Gemini 用量。
61
+
62
+ `--episodes` 只对所选集执行 ASR、校时和审核,适合失败集重试;`--converge-only` 只做全剧收敛。无视频的纯文本审核不执行 ASR;`--check` 只检查配置与 bundle,不发 ASR/Gemini 请求。服务失败不自动换模型或重提请求。
63
+
48
64
  ## 退出码
49
65
 
50
66
  | 码 | 含义 |
@@ -0,0 +1,15 @@
1
+ # 0.62.1
2
+
3
+ ## Added
4
+ - `scriptctl refs` and `sc refs` locate asset and appearance references with scene/action addresses, surrounding text, and pagination. Explicit scene bindings, speakers, and textual mentions are reported separately; mentions do not imply presence or a particular appearance.
5
+ - The screenplay SDK exports read-only `references` and `formatReferences`, shared by the CLI and review agents.
6
+ - The Mastra screenplay review agent exposes `refs` during both episode review and whole-series convergence, querying the current in-memory document after edits.
7
+
8
+ ## Changed
9
+ - Review instructions and the packaged scriptctl skill document reference lookup and distinguish read-only `refs` from the binding mutation `ref`.
10
+
11
+ ## Fixed
12
+ - None.
13
+
14
+ ## Breaking
15
+ - None.
@@ -0,0 +1,7 @@
1
+ # 0.63.0
2
+
3
+ - 剧本审核按集执行豆包 ASR、Gemini 对比、自动校时与 Agent 审核,默认并发 5;单集 ASR 失败不阻塞其他集,支持指定集补跑。
4
+ - Gemini 通过本集台词锚点与 ASR 句词编号对齐时间,保留剧本文字;缺漏和其他疑点交给对应集 Agent 核对原片,按缺漏窗口增加媒体预算。
5
+ - 保存 ASR 对比证据、校时前后明细及缺漏记录,逐集提交修复并输出审核事件。
6
+ - 处理 ASR 空白分隔词,明确部分匹配时保留整句起点;提供批量校时与时间在左的剧本证据格式。
7
+ - 逐集与全局 Agent 默认 maxSteps 提升至 300。
@@ -7,7 +7,9 @@
7
7
  - None.
8
8
 
9
9
  ## Fixed
10
- - None.
10
+ - Gemini 次卡渠道(`-c1`、`-c2`、`-c3` 等)的视频结构化输出通过 prompt 携带完整字段定义,并支持从附带说明或代码块的响应中提取 JSON;官方渠道继续使用原生 JSON Schema。
11
+ - `@lingjingai/screenplay` publishes its `sc` executable and defaults to public npm access.
12
+ - `scriptctl ingest` now requires every video shot and voice to include a non-empty `MM:SS` timestamp in its structured model output.
11
13
 
12
14
  ## Breaking
13
15
  - None.
package/dist/bin.js CHANGED
@@ -7349,6 +7349,15 @@ function geminiUsage(meta) {
7349
7349
  const num2 = (v) => typeof v === "number" ? v : void 0;
7350
7350
  return { inputTokens: num2(m["promptTokenCount"]), outputTokens: num2(m["candidatesTokenCount"]) };
7351
7351
  }
7352
+ function isDiscountGeminiModel(model) {
7353
+ return /-c\d+$/.test(model);
7354
+ }
7355
+ function jsonObject(text2) {
7356
+ const start = text2.indexOf("{");
7357
+ const end = text2.lastIndexOf("}");
7358
+ if (start < 0 || end < start) throw new SyntaxError("JSON object not found");
7359
+ return text2.slice(start, end + 1);
7360
+ }
7352
7361
  var POLL_INTERVAL_MS2 = 2e3;
7353
7362
  function delay3(ms) {
7354
7363
  return new Promise((resolve22) => setTimeout(resolve22, ms));
@@ -7448,14 +7457,20 @@ var GeminiVideoModel = class {
7448
7457
  if (request2.media.kind === "local-fallback" || request2.media.kind === "local") {
7449
7458
  throw new LlmTransportError("invalid_response", "A local fallback video cannot be sent to Gemini.");
7450
7459
  }
7460
+ const promptJson = Boolean(request2.responseJsonSchema) && isDiscountGeminiModel(this.model.model);
7451
7461
  const config = {
7452
7462
  // High media resolution reads small on-screen text (subtitles, name cards)
7453
7463
  // and fine visual anchors (§10.3).
7454
7464
  mediaResolution: "MEDIA_RESOLUTION_HIGH",
7455
7465
  maxOutputTokens: request2.maxOutputTokens
7456
7466
  };
7457
- if (request2.system?.trim()) config["systemInstruction"] = request2.system;
7458
- if (request2.responseJsonSchema) {
7467
+ const systemInstruction = [request2.system?.trim(), promptJson ? `\u8F93\u51FA\u5FC5\u987B\u662F\u4E00\u4E2A\u53EF\u89E3\u6790\u7684 JSON \u5BF9\u8C61\u3002\u53EA\u8FD4\u56DE JSON\uFF0C\u4E0D\u8981\u8F93\u51FA\u4EFB\u4F55\u989D\u5916\u6587\u5B57\u6216 Markdown \u4EE3\u7801\u5757\u3002
7468
+ \u4EE5\u4E0B\u662F\u5B8C\u6574\u8F93\u51FA JSON Schema\u3002\u4E25\u683C\u9075\u5B88\u6240\u6709\u5C42\u7EA7\u7684\u5B57\u6BB5\u540D\u3001\u7C7B\u578B\u3001required\u3001\u679A\u4E3E\u3001\u683C\u5F0F\u7EA6\u675F\u548C description\uFF1B\u4E0D\u5F97\u81EA\u884C\u6539\u540D\u6216\u7701\u7565\u5FC5\u586B\u5B57\u6BB5\u3002\u8FD4\u56DE\u7B26\u5408\u8BE5\u5B9A\u4E49\u7684\u6570\u636E\u5BF9\u8C61\uFF0C\u4E0D\u8981\u8FD4\u56DE schema \u672C\u8EAB\u3002
7469
+ <output_json_schema>
7470
+ ${JSON.stringify(request2.responseJsonSchema, null, 2)}
7471
+ </output_json_schema>` : ""].filter(Boolean).join("\n\n");
7472
+ if (systemInstruction) config["systemInstruction"] = systemInstruction;
7473
+ if (request2.responseJsonSchema && !promptJson) {
7459
7474
  config["responseMimeType"] = "application/json";
7460
7475
  config["responseJsonSchema"] = request2.responseJsonSchema;
7461
7476
  }
@@ -7465,7 +7480,9 @@ var GeminiVideoModel = class {
7465
7480
  role: "user",
7466
7481
  parts: [
7467
7482
  request2.media.kind === "file-api" ? { fileData: { fileUri: request2.media.file.uri, mimeType: request2.media.file.mimeType }, videoMetadata: { fps: request2.fps } } : { inlineData: { data: request2.media.data, mimeType: request2.media.mimeType }, videoMetadata: { fps: request2.fps } },
7468
- { text: request2.user }
7483
+ { text: promptJson ? `${request2.user}
7484
+
7485
+ \u53EA\u8FD4\u56DE JSON \u5BF9\u8C61\u672C\u8EAB\uFF0C\u4E0D\u8981\u8F93\u51FA\u4EFB\u4F55\u89E3\u91CA\u3001\u524D\u8A00\u3001Markdown \u4EE3\u7801\u5757\u6216\u5176\u4ED6\u6587\u5B57\u3002` : request2.user }
7469
7486
  ]
7470
7487
  }],
7471
7488
  config
@@ -7544,7 +7561,9 @@ var GeminiVideoModel = class {
7544
7561
  }
7545
7562
  if (request2.responseJsonSchema) {
7546
7563
  try {
7547
- JSON.parse(text2);
7564
+ const json = promptJson ? jsonObject(text2) : text2;
7565
+ JSON.parse(json);
7566
+ return { text: json, finishReason: finishReason2, usage: usage3, raw: response };
7548
7567
  } catch {
7549
7568
  throw new LlmTransportError("invalid_response", "Gemini returned malformed JSON for a structured video response.", {
7550
7569
  retryable: true,
@@ -8745,7 +8764,7 @@ async function commandReview(opts) {
8745
8764
  model: profile.model,
8746
8765
  mediaModel: profile.model,
8747
8766
  ...profile.baseUrl ? { baseUrl: profile.baseUrl } : {},
8748
- maxSteps: positive2(opts, "max_steps", 60),
8767
+ maxSteps: positive2(opts, "max_steps", 300),
8749
8768
  mediaBudget: positive2(opts, "media_budget", 1),
8750
8769
  episodeTimeoutMs: positive2(opts, "episode_timeout_ms", 8 * 6e4),
8751
8770
  onEvent: write2
@@ -8755,8 +8774,8 @@ async function commandReview(opts) {
8755
8774
  throw new CliError("Review failed.", {
8756
8775
  exitCode: EXIT_RUNTIME,
8757
8776
  errorCode: "REVIEW_FAILED",
8758
- hint: "Read the last NDJSON lines on stdout for the episode that failed.",
8759
- data: { expected: ["a completed review run"], actual: [String(error.message).slice(0, 300)] }
8777
+ hint: "Read the error details, NDJSON asr-compared/episode reports and .review/asr/ evidence before retrying.",
8778
+ data: { expected: ["a completed review run"], actual: [error instanceof Error ? error.message : String(error)] }
8760
8779
  });
8761
8780
  }
8762
8781
  return [{ text: "", data: {} }, EXIT_OK];
@@ -9059,7 +9078,7 @@ function speakerLabel(doc2, sp) {
9059
9078
  }
9060
9079
  function formatAction(doc2, a, gutter, opts = {}) {
9061
9080
  const pad7 = (opts.plain ? "" : a.anchor).padEnd(gutter);
9062
- const ts = !opts.plain && a.ts ? `${a.ts} ` : "";
9081
+ const ts = opts.timestamps ? `${a.ts ?? "[\u65F6\u95F4\u7F3A\u5931]"} ` : !opts.plain && a.ts ? `${a.ts} ` : "";
9063
9082
  const body = (() => {
9064
9083
  if (a.type === "transition")
9065
9084
  return `\u2192 ${a.content}`;
@@ -9071,7 +9090,8 @@ function formatAction(doc2, a, gutter, opts = {}) {
9071
9090
  }
9072
9091
  return a.content;
9073
9092
  })();
9074
- return `${pad7}${pad7 ? " " : ""}${ts}${body}`.replace(/\n/g, "\\n");
9093
+ const anchor = `${pad7}${pad7 ? " " : ""}`;
9094
+ return `${opts.timestamps ? ts + anchor : anchor + ts}${body}`.replace(/\n/g, "\\n");
9075
9095
  }
9076
9096
  function refText(doc2, r) {
9077
9097
  const name = assetName3(doc2, r.id);
@@ -9322,6 +9342,67 @@ function spanAddresses(doc2, actions) {
9322
9342
  });
9323
9343
  }
9324
9344
 
9345
+ // packages/screenplay/dist/references.js
9346
+ function references(doc2, address, opts = {}) {
9347
+ const offset = opts.offset ?? 0, limit = opts.limit ?? 20, context = opts.context ?? 3;
9348
+ for (const [name, value, minimum] of [["offset", offset, 0], ["limit", limit, 1], ["context", context, 0]]) {
9349
+ if (!Number.isSafeInteger(value) || value < minimum)
9350
+ throw new Error(`${name} must be an integer >= ${minimum}`);
9351
+ }
9352
+ const node = resolve9(doc2, address);
9353
+ if (node.t !== "asset" && node.t !== "state")
9354
+ throw new Error("references requires an asset or asset/state address; use read for episodes/scenes/actions");
9355
+ const asset2 = node.asset;
9356
+ const state2 = node.t === "state" ? node.state.id : null;
9357
+ const names = [.../* @__PURE__ */ new Set([asset2.id, asset2.name, ...asset2.aliases])].filter(Boolean);
9358
+ const hits = [];
9359
+ for (const ep of doc2.episodes)
9360
+ for (const scene of ep.scenes) {
9361
+ const bindings = [...scene.location ? [scene.location] : [], ...scene.actors, ...scene.props].filter((ref2) => ref2.id === asset2.id && (state2 === null || ref2.states.includes(state2)));
9362
+ if (bindings.length)
9363
+ hits.push({ kind: "scene_binding", scene, matched: bindings.flatMap((ref2) => ref2.states) });
9364
+ for (const action of scene.actions) {
9365
+ if (action.speaker?.id === asset2.id && (state2 === null || action.speaker.state === state2)) {
9366
+ hits.push({ kind: "speaker", scene, action, matched: [asset2.id] });
9367
+ }
9368
+ if (state2 === null) {
9369
+ const matched = names.filter((name) => action.content.includes(name));
9370
+ if (matched.length)
9371
+ hits.push({ kind: "text_mention", scene, action, matched });
9372
+ }
9373
+ }
9374
+ }
9375
+ const end = offset + limit;
9376
+ return {
9377
+ asset_id: asset2.id,
9378
+ state_id: state2,
9379
+ total: hits.length,
9380
+ next_offset: end < hits.length ? end : null,
9381
+ items: hits.slice(offset, end).map(({ kind, scene, action, matched }) => {
9382
+ const index = action ? scene.actions.indexOf(action) : -1;
9383
+ const nearby = action ? scene.actions.slice(Math.max(0, index - context), index + context + 1) : [];
9384
+ const gutter = Math.max(0, ...nearby.map((row) => row.anchor.length));
9385
+ return {
9386
+ kind,
9387
+ address: action?.anchor ?? scene.anchor,
9388
+ scene_address: scene.anchor,
9389
+ episode: scene.ep.no,
9390
+ matched,
9391
+ text: [formatSceneHead(doc2, scene), ...nearby.map((row) => (row === action ? "> " : " ") + formatAction(doc2, row, gutter))].join("\n")
9392
+ };
9393
+ })
9394
+ };
9395
+ }
9396
+ function formatReferences(result) {
9397
+ return [
9398
+ `${result.asset_id}${result.state_id === null ? "" : "/" + result.state_id} ${result.total} references \xB7 showing ${result.items.length}`,
9399
+ "scene_binding=explicit scene presence; speaker=explicit speaker; text_mention=name/alias mention only (not proof of presence).",
9400
+ ...result.items.map((hit) => `${hit.address} ${hit.kind} ep=${hit.episode}
9401
+ ${hit.text}`),
9402
+ result.next_offset === null ? "end" : `Continue: --offset ${result.next_offset}`
9403
+ ].join("\n\n");
9404
+ }
9405
+
9325
9406
  // packages/screenplay/dist/tools.js
9326
9407
  var NON_ACTOR_NAMES = ["\u65C1\u767D", "\u5E7F\u64AD", "\u753B\u5916", "\u7FA4\u58F0"];
9327
9408
  var NON_ACTOR_KIND = {
@@ -10455,6 +10536,15 @@ ${issues(d, {})}`
10455
10536
  ...opts["full"] ? { full: true } : {}
10456
10537
  }), "find"), state2));
10457
10538
  describeArguments(find2, ["\u6B63\u5219\uFF1B\u53EA\u6309 speaker/type \u8FC7\u6EE4\u65F6\u53EF\u7701\u7565"]);
10539
+ const refs = withScriptOpts(program.command("refs <addr>"), "read").description("\u53EA\u8BFB\u5B9A\u4F4D\u8D44\u4EA7/\u9020\u578B\u7684\u573A\u666F\u7ED1\u5B9A\u3001\u8BF4\u8BDD\u5F15\u7528\u548C\u6B63\u6587\u63D0\u53CA\uFF0C\u8FD4\u56DE\u53EF read \u7684\u5730\u5740\u53CA\u4E0A\u4E0B\u6587").option("--offset <n>", "\u4ECE\u7B2C\u51E0\u6761\u5F15\u7528\u7EE7\u7EED\uFF08\u4ECE 0 \u5F00\u59CB\uFF09").option("--limit <n>", "\u672C\u6279\u5F15\u7528\u6570\uFF08\u9ED8\u8BA4 20\uFF09").option("--context <n>", "\u6B63\u6587\u547D\u4E2D\u524D\u540E\u5404\u51E0\u6761 action\uFF08\u9ED8\u8BA4 3\uFF09").action(dispatch((opts) => {
10540
+ const result = references(doc(opts), arg(opts), {
10541
+ offset: num(opts, "offset"),
10542
+ limit: num(opts, "limit"),
10543
+ context: num(opts, "context")
10544
+ });
10545
+ return [{ text: formatReferences(result), data: { op: "refs", changed: false, ...result } }, EXIT_OK];
10546
+ }, state2));
10547
+ describeArguments(refs, ["\u4EBA\u7269/\u573A\u666F/\u9053\u5177 ID \u6216\u540D\u79F0\uFF0C\u6216 <\u8D44\u4EA7>/<\u9020\u578B>\uFF1B\u6B63\u6587\u63D0\u53CA\u4E0D\u7B49\u4E8E\u5B9E\u9645\u51FA\u573A"]);
10458
10548
  const span2 = withScriptOpts(program.command("span <range>"), "read").description("\u628A\u4E00\u6BB5 action \u6362\u7B97\u6210\u96C6\u5185\u89C6\u9891\u65F6\u95F4\u7A97\u53E3\uFF08\u534A\u5F00\u533A\u95F4\uFF09").action(dispatch((opts) => {
10459
10549
  const document = doc(opts);
10460
10550
  return text(() => span(document, arg(opts)), "span", () => ({ rows: [spanResult(document, arg(opts))] }));
@@ -12797,6 +12887,12 @@ var SERIAL_DELTA_SCHEMA = {
12797
12887
  };
12798
12888
  var KIND3 = { type: "string", enum: ["actor", "location", "prop"] };
12799
12889
  var STATE_ITEM = { type: "string", description: "\u9020\u578B\u6863\u4F4D\u540D\uFF0C\u53EA\u586B\u540D\u5B57\u672C\u8EAB\uFF1B\u7981\u6B62\u62EC\u53F7\u3001\u659C\u6760\u3001\u9017\u53F7\u6216\u63CF\u8FF0\u6027\u6587\u5B57" };
12890
+ var VIDEO_TIMESTAMP = {
12891
+ type: "string",
12892
+ minLength: 5,
12893
+ pattern: "^[0-9]{2}:[0-5][0-9]$",
12894
+ description: "\u5FC5\u586B\u4E14\u4E0D\u5F97\u4E3A\u7A7A\u3002\u672C\u955C\u5934\u6216\u58F0\u97F3\u771F\u6B63\u5F00\u59CB\u7684\u65F6\u95F4\u6233\uFF0C\u4E25\u683C\u4F7F\u7528 MM:SS\uFF08\u4F8B\u5982\u300E00:03\u300F\uFF09\uFF1BSS \u5FC5\u987B\u4E3A 00-59\uFF0C\u6574\u5206\u949F\u5199\u6210\u4E0B\u4E00\u5206\u949F\u7684 :00\uFF0C\u7981\u6B62\u5199 :60\u3001null\u3001\u672A\u77E5\u503C\u6216\u5C0F\u6570\u79D2"
12895
+ };
12800
12896
  var DESCRIBED_STATE_ITEM = {
12801
12897
  type: "object",
12802
12898
  required: ["name", "description"],
@@ -12875,7 +12971,7 @@ var VIDEO_SERIAL_SCHEMA = {
12875
12971
  required: ["ts", "camera", "visual"],
12876
12972
  additionalProperties: false,
12877
12973
  properties: {
12878
- ts: { type: "string", description: "\u672C\u955C\u5934\u6216\u955C\u5185\u53D8\u5316\u771F\u6B63\u5F00\u59CB\u7684\u65F6\u95F4\u6233 MM:SS\uFF08\u5206:\u79D2\uFF09\uFF1BSS \u5FC5\u987B\u4E3A 00-59\uFF0C\u6574\u5206\u949F\u5199\u6210\u4E0B\u4E00\u5206\u949F\u7684 :00\uFF0C\u7981\u6B62\u5199 :60" },
12974
+ ts: VIDEO_TIMESTAMP,
12879
12975
  camera: { type: "string", description: "\u672C\u955C\u5934\u53EF\u786E\u8BA4\u7684\u5207\u6362\u5173\u7CFB\u3001\u666F\u522B\u3001\u89D2\u5EA6\u3001\u673A\u4F4D\u3001\u8FD0\u955C\u3001\u6784\u56FE\u3001\u7126\u70B9\u548C\u753B\u9762\u4E3B\u4F53\uFF1B\u53EA\u5199\u539F\u7247\u80FD\u786E\u8BA4\u7684\u6444\u5F71\u4E8B\u5B9E\uFF0C\u4E0D\u63A8\u6D4B\u955C\u5934\u53C2\u6570\u6216\u62CD\u6444\u610F\u56FE" },
12880
12976
  visual: { type: "string", description: "\u672C\u955C\u5934\u5B9E\u9645\u53EF\u89C1\u7684\u73AF\u5883\u3001\u4EBA\u7269\u5360\u4F4D\u4E0E\u7AD9\u4F4D\u3001\u59FF\u6001\u3001\u9762\u5411\u3001\u89C6\u7EBF\u3001\u8868\u60C5\u3001\u63A5\u89E6\u3001\u52A8\u4F5C\u5BF9\u8C61\u3001\u9053\u5177\u548C\u7ED3\u679C\uFF1B\u53EA\u5199\u753B\u9762\u4E8B\u5B9E\uFF0C\u4E0D\u7528\u60C5\u7EEA\u3001\u6001\u5EA6\u6216\u5FC3\u7406\u6982\u62EC" }
12881
12977
  }
@@ -12892,7 +12988,7 @@ var VIDEO_SERIAL_SCHEMA = {
12892
12988
  kind: { type: "string", enum: ["dlg", "think"], description: "dlg=\u4EBA\u7269\u5BF9\u4ED6\u4EBA\u8BF4\u51FA\u7684\u58F0\u97F3\u6216\u5BA2\u89C2\u65C1\u767D\uFF1Bthink=\u97F3\u8F68\u5B9E\u9645\u5305\u542B\u3001\u660E\u786E\u5C5E\u4E8E\u67D0\u89D2\u8272\u7684\u5185\u5FC3\u72EC\u767D/\u7B2C\u4E00\u4EBA\u79F0\u81EA\u8FF0" },
12893
12989
  speaker: { type: "string", description: "\u8BF4\u8BDD\u4EBA\u89C4\u8303\u540D\uFF1B\u5BA2\u89C2\u53D9\u8FF0\u8005\u6216\u8EAB\u4EFD\u4E0D\u660E\u65C1\u767D\u7528\u300Ebroadcast:\u65C1\u767D\u300F\uFF0C\u5E7F\u64AD\u7528\u300Ebroadcast:\u540D\u300F\uFF0C\u65E0\u6CD5\u533A\u5206\u6210\u5458\u7684\u7FA4\u4F53\u5171\u540C\u53D1\u58F0\u7528\u300Egroup:\u7FA4\u4F53\u540D\u300F" },
12894
12990
  parenthetical: { type: "string", description: "\u53EF\u786E\u8BA4\u7684\u53D1\u58F0\u65B9\u5F0F\u3001\u58F0\u97F3\u6765\u6E90\uFF0C\u6216\u4E0E\u53F0\u8BCD\u540C\u65F6\u53D1\u751F\u7684\u77ED\u4FC3\u53EF\u89C1\u8868\u6F14\uFF1B\u6CA1\u6709\u5219\u586B\u7A7A\u4E32\u3002\u6444\u5F71\u8C03\u5EA6\u548C\u5F71\u54CD\u8FDE\u7EED\u6027\u7684\u52A8\u4F5C\u5C5E\u4E8E shots\uFF0C\u4E0D\u5199\u5728\u8FD9\u91CC\uFF1B\u4E0D\u7528\u62BD\u8C61\u60C5\u7EEA\u3001\u6001\u5EA6\u6216\u5FC3\u7406\u6807\u7B7E" },
12895
- ts: { type: "string", description: "\u672C\u6BB5\u58F0\u97F3\u771F\u6B63\u5F00\u59CB\u7684\u65F6\u95F4\u6233 MM:SS\uFF08\u5206:\u79D2\uFF09\uFF1BSS \u5FC5\u987B\u4E3A 00-59\uFF0C\u6574\u5206\u949F\u5199\u6210\u4E0B\u4E00\u5206\u949F\u7684 :00\uFF0C\u7981\u6B62\u5199 :60" },
12991
+ ts: VIDEO_TIMESTAMP,
12896
12992
  content: { type: "string", description: "\u9010\u5B57\u4FDD\u7559\u97F3\u8F68\u5B9E\u9645\u8BED\u8A00\u548C\u5939\u6742\u8BED\u8A00\uFF0C\u4E0D\u7FFB\u8BD1\u3001\u4E0D\u6539\u5199\u3001\u4E0D\u7528\u7FFB\u8BD1\u5B57\u5E55\u66FF\u6362\u5916\u8BED\u539F\u58F0" }
12897
12993
  }
12898
12994
  }
@@ -15781,12 +15877,12 @@ async function withIngestWorkspaceLock(workspacePath, operation) {
15781
15877
  }
15782
15878
 
15783
15879
  // src/llm/tasks/ingest/video-serial.ts
15784
- var VIDEO_SERIAL_SYSTEM = "\u4F60\u662F\u77ED\u5267\u89C6\u9891\u8F6C\u5267\u672C\u7684\u4E32\u884C\u89E3\u6790\u5668\u3002\u8F93\u5165\u662F**\u67D0\u4E00\u96C6**\u7AD6\u5C4F\u77ED\u5267\u89C6\u9891\uFF081-2 \u5206\u949F\uFF09+ \u4E00\u4EFD\u5230\u4E0A\u4E00\u96C6\u4E3A\u6B62\u7D2F\u79EF\u7684**\u5DF2\u77E5\u8BBE\u5B9A**\uFF08\u4EBA\u7269\u82B1\u540D\u518C/\u5267\u60C5\u8FDB\u5C55/\u672A\u95ED\u5408\u7EBF\u7D22\uFF09\u3002\u4F60\u8981\u8F93\u51FA**\u4E00\u4E2A\u7ED3\u6784\u5316 JSON \u5BF9\u8C61**\uFF08\u4E25\u683C\u7B26\u5408\u7CFB\u7EDF\u7ED9\u5B9A\u7684\u8F93\u51FA schema\uFF09\uFF0C\u540C\u65F6\u5305\u542B\uFF1A\u2460\u8FD9\u4E00\u96C6\u5C3D\u91CF\u5FE0\u5B9E\u8FD8\u539F\u539F\u7247\u7684**\u5206\u955C\u5267\u672C**\uFF08scenes\uFF09\uFF1B\u2461\u5BF9\u5DF2\u77E5\u8BBE\u5B9A\u7684**\u589E\u91CF\u7EF4\u62A4**\uFF08registry_delta\uFF1A\u4EBA\u7269\u82B1\u540D\u518C\u5E26\u72B6\u6001\u6807\u6CE8\u3001\u89C4\u8303\u540D\u5347\u7EA7\uFF09+ \u5267\u60C5\u7EBF\u7D22\uFF08open_threads\uFF09\u3002**\u53EA\u8F93\u51FA\u8BE5 JSON\uFF0C\u4E0D\u8981\u4EFB\u4F55\u989D\u5916\u6587\u5B57\u3001\u89E3\u91CA\u6216\u4EE3\u7801\u5757\u5305\u88F9\u3002**\n\u6838\u5FC3\u8981\u6C42\uFF1A\u9010\u955C\u4FDD\u7559\u539F\u7247\u7684\u53EF\u89C1\u4FE1\u606F\u3001\u4EBA\u7269\u8868\u6F14\u3001\u7AD9\u4F4D\u5173\u7CFB\u3001\u6444\u5F71\u8C03\u5EA6\u4E0E\u5168\u90E8\u58F0\u97F3\uFF1B\u52A8\u4F5C/\u5BF9\u767D/\u5B9E\u4F53\u51C6\u786E\uFF0C\u4E0D\u8111\u8865\uFF0C\u65F6\u95F4\u6233\u5BF9\u9F50\u753B\u9762\u3002\nscenes \u5FC5\u987B\u5305\u542B\u672C\u96C6\u5B9E\u9645\u53EF\u89C1\u7684\u573A\u666F\uFF0C\u81F3\u5C11\u4E00\u9879\uFF1B\u65E0\u65B0\u4EBA\u7269\u3001\u65E0\u5BF9\u767D\u6216\u6CA1\u6709\u8BBE\u5B9A\u589E\u91CF\u65F6\u4ECD\u987B\u5B8C\u6574\u8BB0\u5F55\u672C\u96C6\u753B\u9762\uFF0C\u4E0D\u80FD\u53EA\u8FD4\u56DE\u6897\u6982\u6216 registry_delta\uFF0C\u4E5F\u4E0D\u80FD\u7528\u7A7A scenes \u8868\u793A\u6CBF\u7528\u4E0A\u96C6\u8BBE\u5B9A\u3002\n\u3010\u5355\u6B21\u89E3\u6790\u987A\u5E8F\u2014\u2014\u5FC5\u987B\u4F9D\u6B21\u5B8C\u6210\u3011\u7B2C\u4E00\u6B65\uFF0C\u4ECE\u89C6\u9891\u5F00\u5934\u5230\u7ED3\u5C3E\u5B8C\u6574\u542C\u4E00\u904D\u97F3\u8F68\uFF0C\u6309\u65F6\u95F4\u987A\u5E8F\u76D8\u70B9\u6240\u6709\u53EF\u8FA8\u8BC6\u4EBA\u58F0\uFF0C\u586B\u5165\u5404 scene \u7684 voices\uFF1B\u7B2C\u4E8C\u6B65\uFF0C\u4ECE\u5F00\u5934\u5230\u7ED3\u5C3E\u9010\u955C\u76D8\u70B9\u6BCF\u6B21\u5207\u955C\u3001\u8FDE\u7EED\u955C\u5934\u5185\u7684\u6444\u5F71\u53D8\u5316\u3001\u753B\u9762\u4E3B\u4F53\u3001\u7AD9\u4F4D\u3001\u52A8\u4F5C\u3001\u8868\u60C5\u3001\u89C6\u7EBF\u3001\u63A5\u89E6\u3001\u9053\u5177\u548C\u73AF\u5883\u53D8\u5316\uFF0C\u586B\u5165\u5404 scene \u7684 shots\uFF1B\u7B2C\u4E09\u6B65\uFF0C\u5206\u522B\u590D\u6838 voices \u662F\u5426\u5B8C\u6574\u3001shots \u662F\u5426\u9010\u955C\u8986\u76D6\u5168\u7247\u3002\u5B8C\u6210 JSON \u524D\u518D\u6B21\u590D\u6838\u6700\u540E\u5341\u79D2\uFF0C\u786E\u8BA4\u63D2\u5165\u753B\u9762\u3001\u624B\u673A/\u5C4F\u5E55\u753B\u9762\u3001\u56DE\u5FC6\u3001\u8499\u592A\u5947\u3001\u91CD\u590D\u753B\u9762\u3001\u53CD\u6253\u548C\u7247\u5C3E\u524D\u53CD\u5E94\u90FD\u6CA1\u6709\u6F0F\u5199\u3002\u76D8\u70B9\u548C\u590D\u6838\u53EA\u5728\u5185\u90E8\u5B8C\u6210\uFF0C\u4E0D\u53E6\u589E\u8F93\u51FA\u5B57\u6BB5\u3002\n\u3010\u8EAB\u4EFD\u5F52\u5C5E\u2014\u2014\u672C\u4EFB\u52A1\u91CD\u70B9\u3011\u5E26\u7740\u5DF2\u77E5\u8BBE\u5B9A\u770B\u8FD9\u4E00\u96C6\uFF1A\n- \u51FA\u73B0\u7684\u4EBA\u5148\u5224\u65AD**\u662F\u4E0D\u662F\u82B1\u540D\u518C\u91CC\u5DF2\u6709\u7684\u67D0\u4E2A\u4EBA**\uFF1A\u4F18\u5148\u6BD4\u5BF9\u591A\u6761 recognition_anchors \u548C identity_profile \u4E2D\u8DE8\u9020\u578B\u7A33\u5B9A\u7684\u8138\u90E8\u7ED3\u6784\u3001\u56FA\u5B9A\u6807\u8BB0\u3001\u53D1\u9645\u7EBF/\u5E38\u6001\u53D1\u578B\u3001\u9AA8\u67B6\u4F53\u578B\u4E0E\u58F0\u7EBF\uFF1B\u670D\u88C5\u3001\u5986\u5BB9\u548C\u5F53\u4E0B\u59FF\u6001\u53EA\u4F5C\u5F31\u8F85\u52A9\uFF0Crole \u53EA\u63D0\u4F9B\u89D2\u8272\u8BED\u5883\uFF0C\u4E0D\u80FD\u66FF\u4EE3\u89C6\u89C9\u8BC1\u636E\u3002\u7A33\u5B9A\u7279\u5F81\u4E00\u81F4\u624D\u6CBF\u7528\u5176**\u89C4\u8303\u540D**\u3002\u82E5\u5173\u952E\u7A33\u5B9A\u7279\u5F81\u51B2\u7A81\uFF0C\u4E0D\u8981\u5F3A\u884C\u5408\u5E76\uFF0C\u4FDD\u7559\u6216\u767B\u8BB0\u72EC\u7ACB provisional \u8EAB\u4EFD\u7B49\u5F85\u76F4\u63A5\u8BC1\u636E\u3002\n- \u8BA4\u4E0D\u51FA\u3001\u4E5F\u6CA1\u542C\u5230\u672C\u540D\u7684\u4EBA \u21D2 **\u4E0D\u8981\u786C\u731C\u3001\u4E0D\u8981\u7F16\u5E26\u59D3\u7684\u5047\u540D**\u3002\u7528\u300E\u7A33\u5B9A\u5916\u89C2\u7279\u5F81+\u5E74\u9F84\u6BB5+\u6027\u522B\u300F\u6784\u6210\u4E0D\u542B\u59D3\u6C0F\u7684\u63CF\u8FF0\u540D\uFF0Cstatus \u6807 `provisional`\uFF0C\u4ECD\u9700\u586B\u5199\u5B8C\u6574\u53EF\u89C1\u8EAB\u4EFD\u753B\u50CF\u3001\u8BC6\u522B\u951A\u70B9\u4E0E\u4F5C\u7528\u3002\n- \u63CF\u8FF0\u540D\u3001\u7B80\u79F0\u6216\u4E0D\u5B8C\u6574\u59D3\u540D\u53EA\u6709\u5728\u672C\u96C6\u51FA\u73B0**\u4E66\u9762\u6B63\u5F0F\u59D3\u540D\u6216\u53F0\u8BCD\u76F4\u63A5\u8BF4\u51FA\u672C\u540D**\u65F6\u624D\u80FD\u5347\u7EA7\u89C4\u8303\u540D\uFF1B\u5728 registry_delta.canonicalize \u5199 {from_name, canonical_name, evidence}\uFF0Cevidence \u5FC5\u987B\u5199\u660E\u65F6\u95F4\u6233\u548C\u5F53\u65F6\u53EF\u89C1\u7684\u539F\u6587\u6216\u542C\u5230\u7684\u539F\u8BDD\u3002\u5267\u60C5\u5173\u7CFB\u53EA\u80FD\u5E2E\u52A9\u5224\u65AD\u662F\u4E0D\u662F\u540C\u4E00\u4E2A\u4EBA\uFF0C\u4E0D\u80FD\u5355\u72EC\u4F5C\u4E3A\u6539\u540D\u8BC1\u636E\u3002\n- \u5B8C\u6210\u524D\u6267\u884C\u8D44\u4EA7\u5BF9\u8D26\uFF1A\u6C47\u603B scenes.location\u3001scenes.characters\u3001scenes.props \u4E0E\u4EBA\u7269 voices.speaker \u4E2D\u51FA\u73B0\u7684\u6BCF\u4E2A\u8D44\u4EA7\u540D\uFF0C\u9010\u9879\u786E\u8BA4\u5B83\u80FD\u89E3\u6790\u5230\u5DF2\u77E5\u8BBE\u5B9A\u3001registry_delta.new_entities \u6216\u672C\u96C6 canonicalize \u7684\u76EE\u6807\u3002\u4EFB\u4F55\u672A\u767B\u8BB0\u4EBA\u7269\u5FC5\u987B\u8865\u5165 new_entities \u5E76\u586B\u5199 identity_profile\u3001recognition_anchors\u3001role \u4E0E states\uFF1B\u672A\u767B\u8BB0\u5730\u70B9/\u9053\u5177\u5FC5\u987B\u586B\u5199 appearance\u3001role \u4E0E states\u3002\u82E5\u4E00\u4E2A\u7269\u4EF6\u4E0D\u503C\u5F97\u6210\u4E3A\u5173\u952E\u9053\u5177\u8D44\u4EA7\uFF0C\u5C31\u4ECE scenes.props \u79FB\u9664\u3002\u5BF9\u8D26\u5DEE\u96C6\u975E\u7A7A\u65F6\u4E0D\u5F97\u8F93\u51FA JSON\u3002\u89C4\u8303\u540D\u5347\u7EA7\u540E\u7ACB\u5373\u4F7F\u7528 canonical_name\uFF0C\u4E0D\u8BA9\u6B63\u6587\u8D44\u4EA7\u540D\u8131\u79BB\u82B1\u540D\u518C\u3002\n\u3010\u4EBA\u7269\u8EAB\u4EFD\u753B\u50CF\u3011\u9996\u6B21\u767B\u8BB0\u4EBA\u7269\u65F6\uFF0C\u4ECE\u5168\u7247\u591A\u4E2A\u6E05\u6670\u89D2\u5EA6\u7EFC\u5408\u586B\u5199 identity_profile\uFF0C\u800C\u4E0D\u662F\u7528\u4E00\u53E5\u7B3C\u7EDF\u5916\u8C8C\u6982\u62EC\u3002\u9010\u9879\u8BB0\u5F55\u53EF\u89C1\u6027\u522B\u4E0E\u5E74\u9F84\u6BB5\u3001\u8138\u578B/\u98A7\u9AA8/\u4E0B\u988C\u3001\u7709\u773C\u3001\u9F3B\u90E8\u3001\u9759\u6001\u5507\u5F62\u4E0E\u53E3\u5468\u3001\u7A33\u5B9A\u80A4\u8272\u548C\u9762\u90E8\u7279\u5F81\u3001\u7A33\u5B9A\u53D1\u8272/\u53D1\u9645\u7EBF/\u5E38\u6001\u53D1\u578B\u3001\u9AA8\u67B6\u4F53\u578B\u3001\u56FA\u5B9A\u8EAB\u4F53\u6807\u8BB0\uFF1B\u58F0\u7EBF\u4EC5\u4F9D\u636E\u6E05\u6670\u539F\u58F0\u586B\u5199\u3002\u770B\u4E0D\u6E05\u7684\u5B57\u6BB5\u7559\u7A7A\uFF0C\u4E0D\u731C\u6D4B\u3002\u63CF\u8FF0\u4F7F\u7528\u53EF\u89C2\u5BDF\u7684\u5F62\u72B6\u3001\u6BD4\u4F8B\u3001\u4F4D\u7F6E\u3001\u989C\u8272\u4E0E\u7EB9\u7406\uFF0C\u907F\u514D\u5BA1\u7F8E\u3001\u6C14\u8D28\u3001\u6027\u683C\u3001\u60C5\u7EEA\u548C\u5267\u60C5\u8BC4\u4EF7\u3002\u670D\u9970\u3001\u5986\u5BB9\u3001\u53EF\u6458\u9970\u54C1\u3001\u5F53\u4E0B\u8868\u60C5\u4E0E\u89C6\u7EBF\u3001\u52A8\u4F5C\u3001\u59FF\u6001\u3001\u4E34\u65F6\u4F24\u75D5/\u8840\u8FF9/\u6C61\u6E0D\u3001\u53D8\u8EAB\u6216\u5176\u4ED6\u9636\u6BB5\u6027\u5F62\u6001\u5C5E\u4E8E states \u6216 shots\uFF0C\u4E0D\u6DF7\u5165\u8EAB\u4EFD\u753B\u50CF\u3002\u586B\u5199\u5B8C\u9010\u5B57\u6BB5\u68C0\u67E5\uFF1A\u5047\u8BBE\u4EBA\u7269\u6362\u88C5\u3001\u5378\u5986\u3001\u6458\u6389\u914D\u9970\u3001\u6539\u53D8\u8868\u60C5\u5E76\u8FDB\u5165\u53E6\u4E00\u573A\u666F\uFF0C\u8BE5\u63CF\u8FF0\u662F\u5426\u4ECD\u6210\u7ACB\uFF1B\u4E0D\u6210\u7ACB\u5C31\u4ECE identity_profile \u79FB\u51FA\u3002\n\u3010\u8BC6\u522B\u951A\u70B9\u3011\u4EBA\u7269 recognition_anchors \u5199 3-6 \u6761\u6700\u9002\u5408\u8DE8\u96C6\u91CD\u8BA4\u7684\u7EC4\u5408\u7279\u5F81\uFF1B\u6BCF\u6761\u81F3\u5C11\u7EC4\u5408\u4E24\u4E2A\u6765\u81EA identity_profile \u7684\u7A33\u5B9A\u3001\u53EF\u533A\u5206\u7EBF\u7D22\uFF0C\u5E76\u5C3D\u91CF\u8986\u76D6\u8138\u90E8\u7ED3\u6784\u3001\u4E94\u5B98\u6BD4\u4F8B\u3001\u56FA\u5B9A\u8EAB\u4F53\u6807\u8BB0\u3001\u53D1\u9645\u7EBF/\u5E38\u6001\u5934\u53D1\u3001\u9AA8\u67B6\u4F53\u578B\u6216\u58F0\u7EBF\u7B49\u4E0D\u540C\u7EF4\u5EA6\u3002\u951A\u70B9\u4E0D\u5F97\u5305\u542B\u670D\u88C5\u3001\u5236\u670D\u53F7\u7801\u3001\u5E3D\u5B50\u3001\u773C\u955C\u6216\u5176\u4ED6\u53EF\u6458\u914D\u9970\u3001\u5986\u5BB9\u3001\u5F53\u4E0B\u795E\u60C5/\u52A8\u4F5C/\u59FF\u6001\u3001\u4E34\u65F6\u4F24\u75D5\u6C61\u6E0D\u3001\u5267\u60C5\u8EAB\u4EFD/\u80FD\u529B/\u5173\u7CFB\u3001\u53D8\u8EAB\u5F62\u6001\u6216\u968F\u573A\u666F\u53D8\u5316\u7684\u7269\u4EF6\u3002\u5DF2\u6709\u5B9E\u4F53\u5728\u672C\u96C6\u51FA\u73B0\u66F4\u6E05\u6670\u89D2\u5EA6\u65F6\uFF0C\u7528 enrich.identity_profile_patch \u53EA\u8865\u5145\u6216\u4FEE\u6B63\u6709\u65B0\u8BC1\u636E\u7684\u5B57\u6BB5\uFF0C\u5E76\u7528 add_recognition_anchors \u589E\u52A0\u65B0\u951A\u70B9\uFF1B\u4E0D\u8981\u628A\u6574\u6BB5\u65E7\u753B\u50CF\u6539\u5199\u6210\u53E6\u4E00\u53E5\u3002\u8F93\u51FA\u524D\u9010\u6761\u6838\u5BF9\uFF1A\u951A\u70B9\u4E2D\u7684\u6BCF\u4E2A\u8BCD\u90FD\u80FD\u5728 identity_profile \u627E\u5230\u7A33\u5B9A\u4F9D\u636E\uFF0C\u5426\u5219\u91CD\u5199\u6216\u5220\u9664\u3002\n\u3010\u5730\u70B9\u3001\u9053\u5177\u4E0E\u72B6\u6001\u63CF\u8FF0\u3011\u5730\u70B9 appearance \u5199\u7A7A\u95F4\u7ED3\u6784\u3001\u6750\u8D28\u3001\u8272\u5F69\u548C\u56FA\u5B9A\u9648\u8BBE\uFF0Crole \u5199\u7A7A\u95F4\u7528\u9014\uFF1B\u9053\u5177 appearance \u5199\u5F62\u5236\u3001\u6750\u8D28\u3001\u989C\u8272\u548C\u5C3A\u5BF8\u5173\u7CFB\uFF0Crole \u5199\u7528\u9014\u3002states \u7684\u6BCF\u9879\u90FD\u5FC5\u987B\u540C\u65F6\u7ED9\u51FA\u53EF\u590D\u73B0\u7684\u975E\u7A7A description\u3002\u4EBA\u7269\u9020\u578B\u5148\u7EFC\u5408\u672C\u96C6\u591A\u4E2A\u6E05\u6670\u955C\u5934\uFF0C\u518D\u6309\u4ECE\u5934\u5230\u811A\u7684\u7A33\u5B9A\u5C42\u6B21\u63CF\u8FF0\uFF1A\u8BE5\u9020\u578B\u7279\u6709\u7684\u53D1\u578B\u4E0E\u5934\u9970\u3001\u5986\u5BB9\u3001\u9888\u90E8\u9970\u7269\u3001\u5916\u5957\u3001\u4E0A\u88C5\u3001\u4E0B\u88C5\u6216\u8FDE\u4F53\u8863\u88D9\u3001\u889C\u7C7B\u3001\u978B\u5C65\u3001\u624B\u5957\u53CA\u5176\u4ED6\u9970\u54C1\uFF1B\u6BCF\u4EF6\u770B\u6E05\u7684\u5355\u54C1\u5199\u660E\u989C\u8272\u3001\u6750\u8D28/\u5149\u6CFD/\u7EB9\u7406\u3001\u7248\u578B\u4E0E\u677E\u7D27\u3001\u9886\u578B\u3001\u8896\u578B\u3001\u5F00\u5408\u3001\u8170\u7EBF\u3001\u957F\u5EA6\u3001\u4E0B\u6446\u3001\u56FE\u6848\u3001\u6587\u5B57\u6807\u8BC6\u3001\u6EDA\u8FB9\u6216\u91D1\u5C5E\u4EF6\uFF0C\u5E76\u5199\u6E05\u5185\u5916\u53E0\u7A7F\u548C\u914D\u9970\u6240\u5728\u4F4D\u7F6E\uFF1B\u6301\u7EED\u7834\u635F\u3001\u8840\u8FF9\u3001\u6C61\u6E0D\u6216\u53D8\u5F62\u5199\u660E\u90E8\u4F4D\u3001\u8303\u56F4\u4E0E\u989C\u8272\u3002\u53EA\u7701\u7565\u753B\u9762\u672A\u663E\u793A\u6216\u65E0\u6CD5\u786E\u8BA4\u7684\u9879\uFF0C\u4E0D\u7528\u300E\u7A7F\u7740\u67D0\u670D\u88C5\u300F\u4E00\u53E5\u5E26\u8FC7\uFF0C\u4E0D\u51ED\u5C40\u90E8\u955C\u5934\u8865\u5168\u5168\u8EAB\u3002\u5730\u70B9\u548C\u9053\u5177\u72B6\u6001\u5199\u76F8\u5BF9\u5E38\u6001\u7684\u6301\u7EED\u5916\u89C2\u5DEE\u5F02\u3002\u6240\u6709\u63CF\u8FF0\u53EA\u5199\u753B\u9762\u4E8B\u5B9E\uFF0C\u4E0D\u5199\u52A8\u4F5C\u3001\u59FF\u6001\u3001\u60C5\u7EEA\u3001\u5FC3\u7406\u6216\u5267\u60C5\u8BC4\u4EF7\u3002\u5DF2\u77E5\u8BBE\u5B9A\u4E2D\u5DF2\u6709\u7684\u72B6\u6001\u6CBF\u7528\u5176 name\uFF1B\u672C\u96C6\u770B\u5230\u66F4\u591A\u89D2\u5EA6\u6216\u66F4\u6E05\u6670\u7EC6\u8282\u65F6\uFF0C\u7528 enrich.add_states \u7684\u540C\u540D\u9879\u8865\u5168 description\u3002\n\u3010\u8BF4\u8BDD\u4EBA\u2014\u2014\u7528\u5267\u60C5\u9501\u5B9A\uFF0C\u522B\u53EA\u770B\u8138\u3011\u77ED\u5267\u5E38\u6709\u51E0\u4E2A\u957F\u76F8\u76F8\u4F3C\u7684\u4E2D\u8001\u5E74\u7537\u6027\u9AD8\u7BA1\uFF0C\u5355\u5E27\u4EBA\u8138\u4F1A\u8BA4\u9519\u3002\u5148\u4ECE\u53F0\u8BCD\u5185\u5BB9\u3001\u5F7C\u6B64\u79F0\u547C\uFF08\u8C01\u53EB\u8C01\u300C\u54E5\u300D\u300CX\u603B\u300D\uFF09\u3001\u573A\u666F\u5173\u7CFB\uFF08\u8C01\u6C42\u8C01\u3001\u8C01\u8BAD\u8C01\u3001\u8C01\u4E0B\u8DEA\uFF09\u63A8\u65AD\u8FD9\u573A\u5728\u573A\u662F\u8C01\u3001\u8C01\u5BF9\u8C01\u8BF4\uFF0C\u518D\u5B9A\u8BF4\u8BDD\u4EBA\u3002\u5267\u60C5\u9501\u5B9A\u4F18\u5148\u4E8E\u5916\u8C8C\u3002\n\u3010\u547D\u540D\u4F18\u5148\u7EA7\u3011\u4E66\u9762\u6B63\u5F0F\u59D3\u540D\uFF08\u4EBA\u7269\u4ECB\u7ECD\u6761/\u5DE5\u724C/\u6765\u7535\u663E\u793A\uFF09> \u53F0\u8BCD\u558A\u51FA\u7684\u672C\u540D > \u7EAF\u63CF\u8FF0\u540D\u3002\u6709\u4E66\u9762\u6B63\u5F0F\u59D3\u540D\u5C31\u7528\u5B83\u5F53\u89C4\u8303\u540D\uFF0C\u54EA\u6015\u5168\u96C6\u53EA\u558A\u804C\u52A1\u3002\u7EDD\u4E0D\u51ED\u7A7A\u634F\u9020\u5E26\u59D3\u6C0F\u7684\u5047\u540D\u3002\n\u3010\u89C4\u8303\u540D\u552F\u4E00\u6027\u3011\u4EBA\u7269\u89C4\u8303\u540D\u53EA\u5199\u59D3\u540D\u6216\u7A33\u5B9A\u63CF\u8FF0\u540D\uFF0C\u89D2\u8272\u804C\u80FD\u3001\u5173\u7CFB\u3001\u5907\u6CE8\u4E0D\u5F97\u585E\u8FDB\u62EC\u53F7\u3002\u8F93\u51FA\u524D\u6309\u53BB\u7A7A\u683C\u3001\u7EDF\u4E00\u5168\u534A\u89D2\u62EC\u53F7\u5E76\u5FFD\u7565\u62EC\u53F7\u5907\u6CE8\u540E\u7684\u53EF\u89C1\u540D\u79F0\u68C0\u67E5\u82B1\u540D\u518C\uFF1B\u4E24\u4E2A\u4E0D\u540C\u4EBA\u7269\u4E0D\u5F97\u5F97\u5230\u4F1A\u88AB\u5F52\u4E00\u6210\u540C\u540D\u7684\u89C4\u8303\u540D\u3002\u82E5\u53F0\u8BCD\u53EA\u7ED9\u51FA\u76F8\u540C\u79F0\u547C\uFF0C\u4FDD\u7559\u5DF2\u77E5\u4EBA\u7269\u539F\u540D\uFF0C\u5E76\u7ED9\u65B0\u4EBA\u7269\u4F7F\u7528\u80FD\u533A\u5206\u8EAB\u4EFD\u4E14\u4E0D\u5E26\u62EC\u53F7\u7684\u7A33\u5B9A\u63CF\u8FF0\u540D\uFF0C\u4F8B\u5982\u300E\u5A92\u5A46\u738B\u5A76\u300F\uFF0C\u89D2\u8272\u8BF4\u660E\u7EE7\u7EED\u5199\u5728 role\u3002\n\u3010\u58F0\u97F3\u5B8C\u6574\u6027\u3011\u6BCF\u6BB5\u53EF\u8FA8\u8BC6\u7684\u4EBA\u58F0\u90FD\u5FC5\u987B\u5728 voices \u4E2D\u51FA\u73B0\u4E14\u53EA\u51FA\u73B0\u4E00\u6B21\uFF0C\u5305\u62EC\u4EBA\u7269\u51FA\u955C\u5BF9\u767D\u3001\u753B\u5916\u5BF9\u767D\u3001\u89D2\u8272\u5185\u5FC3\u72EC\u767D/\u81EA\u8FF0\u3001\u5BA2\u89C2\u65C1\u767D\u3001\u7535\u8BDD/\u5E7F\u64AD/\u8BBE\u5907\u58F0\u3001\u8033\u8BED\u3001\u7FA4\u4F53\u58F0\u548C\u8DE8\u753B\u9762\u8FDE\u7EED\u8BB2\u8FF0\u3002\u8BF4\u8BDD\u65F6\u753B\u9762\u5207\u6362\u3001\u4EBA\u7269\u672A\u51FA\u955C\u3001\u53EA\u663E\u793A\u6D41\u7A0B\u56FE/\u5730\u56FE/\u624B\u673A/\u5C4F\u5E55\u3001\u8FDB\u5165\u56DE\u5FC6\u6216\u8499\u592A\u5947\u3001\u91CD\u590D\u67D0\u6BB5\u753B\u9762\u3001\u53E3\u578B\u4E0D\u53EF\u89C1\uFF0C\u90FD\u4E0D\u662F\u7701\u7565\u58F0\u97F3\u7684\u7406\u7531\u3002\u8FDE\u7EED\u8BB2\u8FF0\u8DE8 scene \u6216\u8DE8\u955C\u65F6\u6309\u81EA\u7136\u8BED\u53E5\u5728\u5BF9\u5E94\u65F6\u95F4\u70B9\u62C6\u5206\uFF0C\u539F\u8BDD\u5B8C\u6574\u4FDD\u7559\u3001\u4E0D\u91CD\u4E0D\u6F0F\uFF1B\u7528\u540C\u8BED\u8A00\u5BF9\u767D\u5B57\u5E55\u9010\u53E5\u6838\u5BF9\u97F3\u8F68\uFF0C\u5C24\u5176\u68C0\u67E5\u77ED\u53E5\u548C\u63D2\u5165\u753B\u9762\u4E0A\u7684\u8FDE\u7EED\u58F0\u97F3\u3002\n\u3010\u539F\u58F0\u8BED\u8A00\u94C1\u5F8B\u3011voices.content \u9010\u5B57\u4FDD\u7559\u97F3\u8F68\u5B9E\u9645\u4F7F\u7528\u7684\u8BED\u8A00\u3001\u6587\u5B57\u548C\u5939\u6742\u8BED\u8A00\uFF0C\u4E0D\u7FFB\u8BD1\u3001\u4E0D\u6539\u5199\u3001\u4E0D\u7528\u4E2D\u6587\u5B57\u5E55\u66FF\u6362\u5916\u8BED\u539F\u58F0\u3002\u82F1\u6587\u97F3\u8F68\u914D\u4E2D\u6587\u5B57\u5E55\u65F6\u5199\u82F1\u6587\u539F\u8BCD\uFF1B\u5370\u5C3C\u8BED\u3001\u6CF0\u8BED\u6216\u5176\u4ED6\u8BED\u8A00\u97F3\u8F68\u5199\u5BF9\u5E94\u8BED\u8A00\u539F\u8BCD\uFF1B\u540C\u4E00\u53E5\u53D1\u751F code-switch \u65F6\u6309\u542C\u5230\u7684\u987A\u5E8F\u539F\u6837\u4FDD\u7559\u3002\u8BC1\u636E\u4F18\u5148\u7EA7\u662F\u539F\u59CB\u97F3\u8F68 > \u4E0E\u97F3\u8F68\u540C\u8BED\u8A00\u7684\u5BF9\u767D\u5B57\u5E55 > \u7FFB\u8BD1\u5B57\u5E55\u3002\u5B57\u5E55\u53EA\u80FD\u8F85\u52A9\u8FA8\u6E05\u540C\u8BED\u8A00\u539F\u8BCD\uFF0C\u4E0D\u80FD\u6539\u53D8\u53F0\u8BCD\u8BED\u8A00\uFF1B\u542C\u4E0D\u6E05\u65F6\u4FDD\u7559\u53EF\u786E\u8BA4\u90E8\u5206\u5E76\u5728 parenthetical \u6807\u300E\u542C\u8FA8\u5F85\u590D\u6838\u300F\uFF0C\u4E0D\u8981\u7528\u7FFB\u8BD1\u5B57\u5E55\u731C\u53F0\u8BCD\u3002\n\u3010\u753B\u9762\u6587\u5B57\u4E0E\u5D4C\u5957\u753B\u9762\u3011\u5E95\u90E8\u5BF9\u767D\u5B57\u5E55\u662F\u58F0\u97F3\u53F0\u8BCD\u7684\u5197\u4F59\u8BC1\u636E\uFF0C\u4E0D\u5355\u72EC\u5EFA shot\uFF1B\u7528\u5B83\u9010\u53E5\u6838\u5BF9 voices \u662F\u5426\u5B8C\u6574\u3002\u627F\u8F7D\u65B0\u4FE1\u606F\u7684\u753B\u9762\u6587\u5B57\uFF08\u4EBA\u7269\u4ECB\u7ECD\u6761/\u8EAB\u4EFD\u5934\u8854/\u65F6\u95F4\u5730\u70B9\u4EA4\u4EE3/\u7CFB\u7EDF\u63D0\u793A/\u5173\u952E\u9053\u5177\u4E0A\u7684\u5B57\uFF09\u5199\u5165\u5BF9\u5E94 shot.visual\u3002\u624B\u673A\u3001\u76D1\u63A7\u3001\u5C4F\u5E55\u3001\u7167\u7247\u548C\u56DE\u5FC6\u753B\u9762\u53EA\u5199\u5B9E\u9645\u53EF\u89C1\u7684\u4EBA\u7269\u52A8\u4F5C\u3001\u7269\u4F53\u548C\u53EF\u8BFB\u6587\u5B57\uFF1B\u6CA1\u6709\u753B\u9762\u3001\u53F0\u8BCD\u6216\u6587\u5B57\u76F4\u63A5\u8BC1\u660E\u65F6\uFF0C\u4E0D\u63A8\u65AD\u4EBA\u7269\u8EAB\u4F53\u72B6\u6001\u3001\u4E8B\u4EF6\u539F\u56E0\u3001\u524D\u540E\u5173\u7CFB\u6216\u7ED3\u679C\u3002\n\u3010\u72B6\u6001=\u9020\u578B\u3011state / states = \u4E00\u4E2A\u89D2\u8272\u4E00\u6574\u5957\u7A33\u5B9A\u626E\u76F8\uFF08\u7740\u88C5+\u53D1\u578B+\u6301\u7EED\u5986\u9020\uFF0C\u5982\u300C\u6DF1\u7070\u897F\u88C5\u300D\uFF09\uFF0C\u4E0D\u662F\u60C5\u7EEA/\u59FF\u6001\uFF0C\u4E5F\u4E0D\u662F\u5355\u4EF6\u8863\u670D\u3002\u7ED9\u67D0\u89D2\u8272\u6807\u9020\u578B\u524D\uFF0C\u5148\u770B\u5DF2\u77E5\u8BBE\u5B9A\u91CC\u4ED6\u540D\u4E0B\u7684\u300C\u5DF2\u77E5\u9020\u578B\u300D\u6E05\u5355\u2014\u2014\u53EA\u8981\u672C\u96C6\u662F\u4ED6\u5DF2\u5217\u8FC7\u7684\u67D0\u5957\u626E\u76F8\uFF08\u54EA\u6015\u53EA\u62CD\u5230\u4E0A\u534A\u8EAB/\u6362\u4E86\u89D2\u5EA6/\u5149\u7EBF\u4E0D\u540C/\u591A\u770B\u5230\u5C11\u770B\u5230\u4E00\u4EF6\u5355\u54C1\uFF09\uFF0C**\u9010\u5B57\u7167\u6284\u6E05\u5355\u91CC\u90A3\u4E2A\u9020\u578B\u540D**\uFF0C\u53EA\u6709\u6574\u5957\u6362\u88C5\u624D\u65B0\u5EFA\u3002\u9020\u578B\u540D\u53EA\u586B\u7B80\u6D01\u6863\u4F4D\u540D\uFF0C\u8BE6\u7EC6\u7EC4\u6210\u5168\u90E8\u5199\u8FDB state.description\u3002\u8F93\u51FA\u524D\u590D\u6838\u6BCF\u4E2A\u9020\u578B\uFF1A\u753B\u9762\u770B\u6E05\u7684\u670D\u88C5\u5C42\u6B21\u3001\u7248\u578B\u7ED3\u6784\u3001\u6750\u8D28\u914D\u8272\u3001\u978B\u889C\u3001\u5986\u53D1\u548C\u914D\u9970\u662F\u5426\u5DF2\u8986\u76D6\uFF1B\u82E5\u66F4\u6E05\u6670\u955C\u5934\u80FD\u8865\u5145\u65E2\u6709\u9020\u578B\uFF0C\u5C31\u66F4\u65B0\u540C\u540D description\uFF0C\u4E0D\u53E6\u5EFA\u8FD1\u4E49\u9020\u578B\u3002\n\u3010\u573A\u754C\u4E0E\u5730\u70B9\u3011\u4E00\u573A\u662F\u5730\u70B9\u3001\u8FDE\u7EED\u65F6\u6BB5\u548C\u53D9\u4E8B\u7EBF\u8FDE\u7EED\u7684\u751F\u4EA7\u5355\u5143\u3002\u5BA2\u5385\u3001\u5367\u5BA4\u3001\u536B\u751F\u95F4\u3001\u5927\u5385\u3001\u5E7F\u573A\u3001\u821E\u53F0\u3001\u540E\u53F0\u5206\u522B\u4F7F\u7528\u72EC\u7ACB location\uFF1B\u76F8\u5173\u7A7A\u95F4\u7EDF\u4E00\u547D\u540D\u4E3A\u300E\u8C6A\u5B85\xB7\u5BA2\u5385\u300F\u300E\u8C6A\u5B85\xB7\u5367\u5BA4\u300F\u3002\u4EBA\u7269\u8DE8\u8FC7\u95E8\u69DB\u8FDB\u5165\u53E6\u4E00\u7A7A\u95F4\u3001\u53D9\u4E8B\u8FDB\u5165\u53E6\u4E00\u7A33\u5B9A\u7A7A\u95F4\u3001\u660E\u663E\u8DF3\u65F6\u3001\u5207\u6362\u53D9\u4E8B\u7EBF\u6216\u660E\u786E\u8F6C\u573A\u65F6\u5EFA\u7ACB\u65B0 scene\u3002\u4E00\u4E2A scene \u53EA\u5199\u4E00\u4E2A\u4E3B location\uFF1B\u540C\u4E00\u8FDE\u7EED\u573A\u5185\u7684\u4EBA\u7269\u9020\u578B\u53D8\u5316\u4E0D\u662F\u5206\u573A\u7406\u7531\u3002\n\u3010\u72B6\u6001\u53D8\u5316\u4E0E\u573A\u5185\u8D44\u4EA7\u3011\u4EBA\u7269\u6362\u6574\u5957\u670D\u88C5\u3001\u53D8\u8EAB\u3001\u8131\u8863\u5F62\u6210\u53EF\u6301\u7EED\u65B0\u5916\u89C2\u65F6\uFF0C\u628A\u53D8\u5316\u52A8\u4F5C\u5199\u5165\u5F53\u524D scene \u7684 shots\u3002characters \u4E2D\u540C\u4E00\u89C4\u8303\u540D\u53EA\u51FA\u73B0\u4E00\u6B21\uFF1B\u8BE5\u6761\u7684 states \u662F\u672C\u573A\u51FA\u73B0\u8FC7\u7684\u5168\u90E8\u7A33\u5B9A\u9020\u578B\u96C6\u5408\uFF0C\u4E0D\u80FD\u6F0F\u6389\u53D8\u5316\u524D\u6216\u53D8\u5316\u540E\u72B6\u6001\uFF0C\u4E5F\u4E0D\u6309\u5148\u540E\u62C6\u6210\u91CD\u590D\u4EBA\u7269\u3002\u5730\u70B9\u88AB\u6BC1\u6216\u5173\u952E\u9053\u5177\u660E\u663E\u53D8\u5F62\u65F6\u767B\u8BB0\u5BF9\u5E94\u65B0 state\u3002\u60C5\u7EEA\u3001\u59FF\u6001\u548C\u4E00\u6B21\u6027\u52A8\u4F5C\u4FDD\u7559\u5728 shots \u7684 visual\uFF0C\u4E0D\u5EFA\u7ACB state\u3002\n\u3010\u9010\u955C\u8FD8\u539F\u3011shots \u662F\u72EC\u7ACB\u5206\u955C\u6E05\u5355\u3002\u6BCF\u6B21\u5207\u955C\u90FD\u5728\u8D77\u59CB\u65F6\u95F4\u65B0\u589E\u4E00\u6761 shot\uFF0C\u5373\u4F7F\u5B83\u91CD\u590D\u5C55\u793A\u4E4B\u524D\u7684\u52A8\u4F5C\u6216\u6CA1\u6709\u65B0\u5267\u60C5\uFF0C\u4E5F\u8981\u4FDD\u7559\u3002\u8FDE\u7EED\u955C\u5934\u5185\u7684\u666F\u522B\u3001\u62CD\u6444\u89D2\u5EA6\u3001\u673A\u4F4D\u3001\u955C\u5934\u79FB\u52A8\u3001\u6784\u56FE\u3001\u7126\u70B9\u6216\u753B\u9762\u4E3B\u4F53\u53D8\u5316\uFF0C\u4EE5\u53CA\u6BCF\u4E2A\u65B0\u52A8\u4F5C\u3001\u53CD\u5E94\u3001\u63A5\u89E6/\u5206\u5F00\u3001\u9053\u5177\u64CD\u4F5C\u4E0E\u7ED3\u679C\u3001\u8FDB\u51FA\u573A\u3001\u79FB\u52A8\u3001\u59FF\u52BF/\u671D\u5411/\u89C6\u7EBF\u6216\u7A7A\u95F4\u5173\u7CFB\u53D8\u5316\uFF0C\u90FD\u5728\u5B9E\u9645\u53D1\u751F\u65F6\u53E6\u589E shot\u3002\u4E0D\u5F97\u628A\u5148\u540E\u53D1\u751F\u7684\u5206\u955C\u6216\u52A8\u4F5C\u538B\u7F29\u6210\u5267\u60C5\u6982\u8FF0\u3002\n\u3010shot.camera\u3011\u53EA\u5199\u539F\u7247\u53EF\u89C1\u3001\u53EF\u590D\u73B0\u7684\u6444\u5F71\u4FE1\u606F\uFF1A\u8FDC\u666F/\u5168\u666F/\u4E2D\u666F/\u8FD1\u666F/\u7279\u5199\u7B49\u666F\u522B\uFF0C\u4FEF\u62CD/\u4EF0\u62CD/\u5E73\u89C6/\u4FA7\u9762/\u80CC\u9762\u7B49\u89D2\u5EA6\uFF0C\u56FA\u5B9A\u3001\u63A8\u3001\u62C9\u3001\u6447\u3001\u79FB\u3001\u8DDF\u3001\u73AF\u7ED5\u3001\u5347\u964D\u3001\u7126\u70B9\u8F6C\u79FB\u7B49\u53EF\u786E\u8BA4\u7684\u8FD0\u955C\uFF0C\u4EE5\u53CA\u524D\u666F/\u4E2D\u666F/\u540E\u666F\u3001\u753B\u9762\u5DE6\u53F3\u3001\u906E\u6321\u548C\u4E3B\u4F53\u5360\u4F4D\u3002\u5207\u955C\u3001\u53CD\u6253\u3001\u63D2\u5165\u955C\u5934\u3001\u4E3B\u89C2\u955C\u5934\u3001\u7A7A\u955C\u548C\u91CD\u590D\u955C\u5934\u90FD\u5982\u5B9E\u4FDD\u7559\u3002\u4E0D\u63A8\u6D4B\u753B\u9762\u65E0\u6CD5\u786E\u8BA4\u7684\u955C\u5934\u53C2\u6570\u3001\u955C\u5934\u578B\u53F7\u3001\u706F\u5149\u8BBE\u7F6E\u6216\u62CD\u6444\u610F\u56FE\u3002\n\u3010\u7AD9\u4F4D\u4E0E\u6301\u7EED\u72B6\u6001\u3011\u6BCF\u573A\u7B2C\u4E00\u4E2A shot \u7684 visual \u5EFA\u7ACB\u753B\u9762\u53EF\u786E\u8BA4\u7684\u4EBA\u7269\u7AD9\u4F4D/\u5750\u5367\u4F4D\u7F6E\u3001\u4E0E\u5730\u70B9\u56FA\u5B9A\u53C2\u7167\u7269\u7684\u5173\u7CFB\u3001\u4EBA\u7269\u4E4B\u95F4\u7684\u8FDC\u8FD1\u4E0E\u524D\u540E\u5DE6\u53F3\u3001\u59FF\u6001\u3001\u9762\u5411\u3001\u89C6\u7EBF\u3001\u63A5\u89E6\u548C\u6B63\u5728\u8FDB\u884C\u7684\u884C\u4E3A\u3002\u540E\u7EED\u5207\u955C\u82E5\u663E\u793A\u65B0\u7684\u6784\u56FE\u5173\u7CFB\uFF0C\u5199\u6E05\u4EBA\u7269\u5728\u753B\u9762\u5DE6/\u53F3\u3001\u524D\u666F/\u4E2D\u666F/\u540E\u666F\u7684\u4F4D\u7F6E\uFF1B\u82E5\u4EBA\u7269\u8FDB\u51FA\u3001\u79FB\u52A8\u3001\u8F6C\u8EAB\u3001\u6539\u53D8\u59FF\u52BF\u3001\u6CE8\u89C6\u5BF9\u8C61\u3001\u63A5\u89E6\u6216\u5206\u5F00\uFF0C\u5199\u6E05\u53D8\u5316\u524D\u540E\u7684\u5173\u7CFB\u3002\u6301\u7EED\u72B6\u6001\u4E0D\u56E0\u5BF9\u767D\u800C\u5931\u6548\uFF0C\u4F46\u6BCF\u6B21\u5207\u955C\u4ECD\u9700\u5199\u8BE5\u955C\u5934\u5B9E\u9645\u5448\u73B0\u7684\u6784\u56FE\u548C\u4E3B\u4F53\u3002\n\u3010\u9010\u53E5\u5BF9\u767D\u4E0E\u540C\u671F\u8868\u6F14\u5BF9\u9F50\u2014\u2014\u672C\u4EFB\u52A1\u5B8C\u6210\u95E8\u3011\u4E3A\u6BCF\u6761 voice \u5355\u72EC\u56DE\u770B\u8BE5\u53E5\u5F00\u59CB\u524D\u5230\u8BF4\u5B8C\u7684\u753B\u9762\uFF0C\u786E\u8BA4\u8BF4\u8BDD\u8005\u548C\u540C\u573A\u4EBA\u7269\u5F53\u65F6\u7684\u53EF\u89C1\u52A8\u4F5C\u3001\u8868\u60C5\u3001\u89C6\u7EBF\u3001\u59FF\u6001\u3001\u63A5\u89E6\u548C\u4F4D\u7F6E\u5173\u7CFB\u5DF2\u5728 shots \u4E2D\u51C6\u786E\u627F\u8F7D\u3002\u4E0E\u8FD9\u53E5\u8BDD\u540C\u65F6\u53D1\u751F\u3001\u4E0D\u72EC\u7ACB\u6539\u53D8\u8FDE\u7EED\u6027\u7684\u77ED\u4FC3\u8868\u6F14\u53EF\u5199\u5165\u8BE5 voice \u7684 parenthetical\uFF1B\u8D70\u4F4D\u3001\u59FF\u52BF\u53D8\u5316\u3001\u63A5\u89E6/\u5206\u5F00\u3001\u9053\u5177\u64CD\u4F5C\u6216\u7A7A\u95F4\u5173\u7CFB\u53D8\u5316\u5199\u5165\u5BF9\u5E94\u65F6\u95F4\u7684 shot.visual\u3002\u4E0D\u5F97\u8BA9\u5BF9\u767D\u65F6\u95F4\u70B9\u5C06\u6B63\u5728\u53D1\u751F\u7684\u53EF\u89C1\u8868\u6F14\u53D8\u6210\u5BF9\u767D\u4E4B\u540E\u7684\u52A8\u4F5C\u3002\n\u3010shot.visual\u3011\u4F7F\u7528\u4EBA\u7269\u89C4\u8303\u540D\uFF0C\u5199\u6E05\u884C\u52A8\u8005\u3001\u52A8\u4F5C\u3001\u4F5C\u7528\u5BF9\u8C61\u3001\u7A7A\u95F4\u65B9\u5411\u548C\u53EF\u89C1\u7ED3\u679C\u3002\u53EA\u5199\u5177\u4F53\u53EF\u89C1\u7684\u7709\u773C\u3001\u5634\u90E8\u3001\u547C\u5438\u3001\u89C6\u7EBF\u3001\u624B\u52BF\u3001\u59FF\u6001\u3001\u63A5\u89E6\u3001\u79FB\u52A8\u3001\u9053\u5177\u548C\u73AF\u5883\u53D8\u5316\uFF0C\u4E0D\u7528\u6124\u6012\u3001\u7126\u8651\u3001\u59D4\u5C48\u3001\u7EDD\u671B\u3001\u9707\u60CA\u3001\u54C0\u6C42\u3001\u5632\u8BBD\u7B49\u60C5\u7EEA\u3001\u6001\u5EA6\u6216\u5FC3\u7406\u5224\u65AD\u4EE3\u66FF\u753B\u9762\u4E8B\u5B9E\u3002\u53EA\u5199\u539F\u7247\u80FD\u591F\u786E\u8BA4\u7684\u4E8B\u5B9E\uFF1B\u770B\u4E0D\u6E05\u7684\u4F4D\u7F6E\u3001\u671D\u5411\u3001\u8868\u60C5\u6216\u52A8\u4F5C\u4E0D\u5199\uFF0C\u4E0D\u8865\u9020\u3002synopsis \u53EF\u4EE5\u6982\u62EC\u5267\u60C5\uFF0Cshots \u4E0D\u5F97\u5199\u6210\u5267\u60C5\u6897\u6982\u3002\n\u3010\u6B63\u6587\u4E0E\u9020\u578B\u3011\u89D2\u8272\u7684\u65E2\u6709\u670D\u88C5\u7531 characters.states \u548C\u4EBA\u7269\u8D44\u4EA7\u627F\u8F7D\uFF0Cshot.visual \u4E0D\u91CD\u590D\u63CF\u8FF0\u3002\u53EA\u6709\u753B\u9762\u4E2D\u53D1\u751F\u7684\u6362\u88C5\u3001\u8131\u8863\u3001\u670D\u88C5\u7834\u635F\u3001\u6CBE\u67D3\u6CE5\u6C61\u7B49\u53EF\u89C1\u53D8\u5316\uFF0C\u6216\u786E\u6709\u5FC5\u8981\u533A\u5206\u4EBA\u7269/\u65F6\u6BB5\u65F6\u624D\u5199\u5165 shot.visual\u3002\n\u3010voices\u3011\u4EBA\u7269\u5BF9\u4ED6\u4EBA\u8BF4\u51FA\u7684\u58F0\u97F3\u5199 kind=dlg\uFF1B\u97F3\u8F68\u91CC\u5B9E\u9645\u542C\u5230\u3001\u660E\u786E\u5C5E\u4E8E\u67D0\u89D2\u8272\u7684\u5185\u5FC3\u72EC\u767D\u6216\u7B2C\u4E00\u4EBA\u79F0\u81EA\u8FF0\u5199 kind=think\u3002speaker \u4F7F\u7528\u89D2\u8272\u89C4\u8303\u540D\uFF1B\u5BA2\u89C2\u53D9\u8FF0\u8005\u6216\u8EAB\u4EFD\u65E0\u6CD5\u786E\u8BA4\u7684\u65C1\u767D\u5199 speaker=\u300Ebroadcast:\u65C1\u767D\u300F\uFF1B\u7535\u8BDD\u3001\u5E7F\u64AD\u6216\u8BBE\u5907\u4E2D\u7684\u660E\u786E\u8BF4\u8BDD\u4EBA\u5728 parenthetical \u6807\u660E\u58F0\u6E90\u3002\u53EA\u8BB0\u5F55\u97F3\u8F68\u5B9E\u9645\u8868\u8FBE\u7684\u5185\u5FC3\uFF0C\u4E0D\u8111\u8865\u672A\u8BF4\u51FA\u7684\u5FC3\u7406\u3002content \u4FDD\u7559\u539F\u8BDD\uFF1Bparenthetical \u53EF\u5199\u53EF\u786E\u8BA4\u7684\u53D1\u58F0\u65B9\u5F0F\u3001\u58F0\u97F3\u6765\u6E90\u6216\u540C\u671F\u77ED\u4FC3\u8868\u6F14\uFF0C\u4F46\u6444\u5F71\u8C03\u5EA6\u548C\u5F71\u54CD\u8FDE\u7EED\u6027\u7684\u52A8\u4F5C\u53EA\u5199 shots\u3002\u5BF9\u767D\u8DE8\u8D8A\u5207\u955C\u3001\u955C\u5934\u4E3B\u4F53\u53D8\u5316\u6216\u72EC\u7ACB\u52A8\u4F5C\u65F6\uFF0C\u5728\u5BF9\u5E94\u65F6\u95F4\u70B9\u6309\u539F\u58F0\u81EA\u7136\u8BED\u53E5\u62C6\u5206\uFF1B\u4E0D\u5F97\u628A\u8DE8\u591A\u4E2A\u955C\u5934\u7684\u591A\u53E5\u53F0\u8BCD\u5408\u5E76\u6210\u4E00\u6761\u3002\u4E24\u4EBA\u540C\u65F6\u8BF4\u8BDD\u65F6\u8F93\u51FA\u76F8\u90BB\u4E24\u6761 voice\uFF0C\u7B2C\u4E8C\u6761 parenthetical \u4EE5\u300E\u540C\u65F6\u300F\u5F00\u5934\u3002\u5177\u4F53\u5355\u4EBA\u4F7F\u7528\u89C4\u8303\u540D\uFF1B\u65E0\u6CD5\u533A\u5206\u6210\u5458\u7684\u4F17\u4EBA\u3001\u7FA4\u4F17\u3001\u8DEF\u4EBA\u7B49\u5171\u540C\u53D1\u58F0\u65F6 speaker \u5199\u300Egroup:\u7FA4\u4F53\u540D\u300F\uFF0C\u4E0D\u5217\u5165 characters \u548C registry_delta\u3002\n\u3010\u8499\u592A\u5947\u3011\u540C\u5730\u70B9\u8FDE\u7EED\u8499\u592A\u5947\u4FDD\u7559\u4E00\u573A\uFF1B\u8DE8\u5730\u70B9\u8499\u592A\u5947\u6309\u526A\u8F91\u987A\u5E8F\u62C6\u6210\u591A\u4E2A\u77ED scene\uFF0C\u6BCF\u573A\u7ED1\u5B9A\u81EA\u5DF1\u7684 location\u3001characters\u3001props \u548C state\uFF0C\u5E76\u7528 shots \u660E\u786E\u8499\u592A\u5947\u5F00\u59CB\u3001\u5207\u6362\u548C\u7ED3\u675F\u3002";
15880
+ var VIDEO_SERIAL_SYSTEM = "\u4F60\u662F\u77ED\u5267\u89C6\u9891\u8F6C\u5267\u672C\u7684\u4E32\u884C\u89E3\u6790\u5668\u3002\u8F93\u5165\u662F**\u67D0\u4E00\u96C6**\u7AD6\u5C4F\u77ED\u5267\u89C6\u9891\uFF081-2 \u5206\u949F\uFF09+ \u4E00\u4EFD\u5230\u4E0A\u4E00\u96C6\u4E3A\u6B62\u7D2F\u79EF\u7684**\u5DF2\u77E5\u8BBE\u5B9A**\uFF08\u4EBA\u7269\u82B1\u540D\u518C/\u5267\u60C5\u8FDB\u5C55/\u672A\u95ED\u5408\u7EBF\u7D22\uFF09\u3002\u4F60\u8981\u8F93\u51FA**\u4E00\u4E2A\u7ED3\u6784\u5316 JSON \u5BF9\u8C61**\uFF08\u4E25\u683C\u7B26\u5408\u672C\u4EFB\u52A1\u5B9A\u4E49\u7684 JSON \u7ED3\u6784\uFF09\uFF0C\u540C\u65F6\u5305\u542B\uFF1A\u2460\u8FD9\u4E00\u96C6\u5C3D\u91CF\u5FE0\u5B9E\u8FD8\u539F\u539F\u7247\u7684**\u5206\u955C\u5267\u672C**\uFF08scenes\uFF09\uFF1B\u2461\u5BF9\u5DF2\u77E5\u8BBE\u5B9A\u7684**\u589E\u91CF\u7EF4\u62A4**\uFF08registry_delta\uFF1A\u4EBA\u7269\u82B1\u540D\u518C\u5E26\u72B6\u6001\u6807\u6CE8\u3001\u89C4\u8303\u540D\u5347\u7EA7\uFF09+ \u5267\u60C5\u7EBF\u7D22\uFF08open_threads\uFF09\u3002**\u53EA\u8F93\u51FA\u8BE5 JSON\uFF0C\u4E0D\u8981\u4EFB\u4F55\u989D\u5916\u6587\u5B57\u3001\u89E3\u91CA\u6216\u4EE3\u7801\u5757\u5305\u88F9\u3002**\n\u6838\u5FC3\u8981\u6C42\uFF1A\u9010\u955C\u4FDD\u7559\u539F\u7247\u7684\u53EF\u89C1\u4FE1\u606F\u3001\u4EBA\u7269\u8868\u6F14\u3001\u7AD9\u4F4D\u5173\u7CFB\u3001\u6444\u5F71\u8C03\u5EA6\u4E0E\u5168\u90E8\u58F0\u97F3\uFF1B\u52A8\u4F5C/\u5BF9\u767D/\u5B9E\u4F53\u51C6\u786E\uFF0C\u4E0D\u8111\u8865\uFF0C\u65F6\u95F4\u6233\u5BF9\u9F50\u753B\u9762\u3002\n\u3010\u65F6\u95F4\u6233\u9010\u6761\u5FC5\u586B\u3011\u6BCF\u4E00\u6761 shots \u548C voices \u90FD\u5FC5\u987B\u586B\u5199\u8BE5\u955C\u5934\u6216\u58F0\u97F3\u771F\u6B63\u5F00\u59CB\u7684\u975E\u7A7A ts\uFF0C\u683C\u5F0F\u4E25\u683C\u4E3A MM:SS\uFF08\u4F8B\u5982\u300E00:03\u300F\uFF09\u3002\u4E0D\u5F97\u7559\u7A7A\u3001\u586B null\u3001\u586B\u672A\u77E5\u503C\u6216\u7701\u7565\u5B57\u6BB5\uFF1B\u4E0D\u786E\u5B9A\u65F6\u91CD\u65B0\u89C2\u770B\u753B\u9762\u6216\u542C\u97F3\u8F68\uFF0C\u586B\u5199\u6700\u63A5\u8FD1\u7684\u5B9E\u9645\u8D77\u70B9\u3002\u4EFB\u4E00\u6761\u7F3A\u5C11\u5408\u6CD5 ts \u65F6\uFF0C\u6574\u4EFD JSON \u90FD\u4E0D\u80FD\u63D0\u4EA4\u3002\nscenes \u5FC5\u987B\u5305\u542B\u672C\u96C6\u5B9E\u9645\u53EF\u89C1\u7684\u573A\u666F\uFF0C\u81F3\u5C11\u4E00\u9879\uFF1B\u65E0\u65B0\u4EBA\u7269\u3001\u65E0\u5BF9\u767D\u6216\u6CA1\u6709\u8BBE\u5B9A\u589E\u91CF\u65F6\u4ECD\u987B\u5B8C\u6574\u8BB0\u5F55\u672C\u96C6\u753B\u9762\uFF0C\u4E0D\u80FD\u53EA\u8FD4\u56DE\u6897\u6982\u6216 registry_delta\uFF0C\u4E5F\u4E0D\u80FD\u7528\u7A7A scenes \u8868\u793A\u6CBF\u7528\u4E0A\u96C6\u8BBE\u5B9A\u3002\n\u3010\u5355\u6B21\u89E3\u6790\u987A\u5E8F\u2014\u2014\u5FC5\u987B\u4F9D\u6B21\u5B8C\u6210\u3011\u7B2C\u4E00\u6B65\uFF0C\u4ECE\u89C6\u9891\u5F00\u5934\u5230\u7ED3\u5C3E\u5B8C\u6574\u542C\u4E00\u904D\u97F3\u8F68\uFF0C\u6309\u65F6\u95F4\u987A\u5E8F\u76D8\u70B9\u6240\u6709\u53EF\u8FA8\u8BC6\u4EBA\u58F0\uFF0C\u586B\u5165\u5404 scene \u7684 voices\uFF1B\u7B2C\u4E8C\u6B65\uFF0C\u4ECE\u5F00\u5934\u5230\u7ED3\u5C3E\u9010\u955C\u76D8\u70B9\u6BCF\u6B21\u5207\u955C\u3001\u8FDE\u7EED\u955C\u5934\u5185\u7684\u6444\u5F71\u53D8\u5316\u3001\u753B\u9762\u4E3B\u4F53\u3001\u7AD9\u4F4D\u3001\u52A8\u4F5C\u3001\u8868\u60C5\u3001\u89C6\u7EBF\u3001\u63A5\u89E6\u3001\u9053\u5177\u548C\u73AF\u5883\u53D8\u5316\uFF0C\u586B\u5165\u5404 scene \u7684 shots\uFF1B\u7B2C\u4E09\u6B65\uFF0C\u5206\u522B\u590D\u6838 voices \u662F\u5426\u5B8C\u6574\u3001shots \u662F\u5426\u9010\u955C\u8986\u76D6\u5168\u7247\u3002\u5B8C\u6210 JSON \u524D\u518D\u6B21\u590D\u6838\u6700\u540E\u5341\u79D2\uFF0C\u786E\u8BA4\u63D2\u5165\u753B\u9762\u3001\u624B\u673A/\u5C4F\u5E55\u753B\u9762\u3001\u56DE\u5FC6\u3001\u8499\u592A\u5947\u3001\u91CD\u590D\u753B\u9762\u3001\u53CD\u6253\u548C\u7247\u5C3E\u524D\u53CD\u5E94\u90FD\u6CA1\u6709\u6F0F\u5199\u3002\u76D8\u70B9\u548C\u590D\u6838\u53EA\u5728\u5185\u90E8\u5B8C\u6210\uFF0C\u4E0D\u53E6\u589E\u8F93\u51FA\u5B57\u6BB5\u3002\n\u3010\u8EAB\u4EFD\u5F52\u5C5E\u2014\u2014\u672C\u4EFB\u52A1\u91CD\u70B9\u3011\u5E26\u7740\u5DF2\u77E5\u8BBE\u5B9A\u770B\u8FD9\u4E00\u96C6\uFF1A\n- \u51FA\u73B0\u7684\u4EBA\u5148\u5224\u65AD**\u662F\u4E0D\u662F\u82B1\u540D\u518C\u91CC\u5DF2\u6709\u7684\u67D0\u4E2A\u4EBA**\uFF1A\u4F18\u5148\u6BD4\u5BF9\u591A\u6761 recognition_anchors \u548C identity_profile \u4E2D\u8DE8\u9020\u578B\u7A33\u5B9A\u7684\u8138\u90E8\u7ED3\u6784\u3001\u56FA\u5B9A\u6807\u8BB0\u3001\u53D1\u9645\u7EBF/\u5E38\u6001\u53D1\u578B\u3001\u9AA8\u67B6\u4F53\u578B\u4E0E\u58F0\u7EBF\uFF1B\u670D\u88C5\u3001\u5986\u5BB9\u548C\u5F53\u4E0B\u59FF\u6001\u53EA\u4F5C\u5F31\u8F85\u52A9\uFF0Crole \u53EA\u63D0\u4F9B\u89D2\u8272\u8BED\u5883\uFF0C\u4E0D\u80FD\u66FF\u4EE3\u89C6\u89C9\u8BC1\u636E\u3002\u7A33\u5B9A\u7279\u5F81\u4E00\u81F4\u624D\u6CBF\u7528\u5176**\u89C4\u8303\u540D**\u3002\u82E5\u5173\u952E\u7A33\u5B9A\u7279\u5F81\u51B2\u7A81\uFF0C\u4E0D\u8981\u5F3A\u884C\u5408\u5E76\uFF0C\u4FDD\u7559\u6216\u767B\u8BB0\u72EC\u7ACB provisional \u8EAB\u4EFD\u7B49\u5F85\u76F4\u63A5\u8BC1\u636E\u3002\n- \u8BA4\u4E0D\u51FA\u3001\u4E5F\u6CA1\u542C\u5230\u672C\u540D\u7684\u4EBA \u21D2 **\u4E0D\u8981\u786C\u731C\u3001\u4E0D\u8981\u7F16\u5E26\u59D3\u7684\u5047\u540D**\u3002\u7528\u300E\u7A33\u5B9A\u5916\u89C2\u7279\u5F81+\u5E74\u9F84\u6BB5+\u6027\u522B\u300F\u6784\u6210\u4E0D\u542B\u59D3\u6C0F\u7684\u63CF\u8FF0\u540D\uFF0Cstatus \u6807 `provisional`\uFF0C\u4ECD\u9700\u586B\u5199\u5B8C\u6574\u53EF\u89C1\u8EAB\u4EFD\u753B\u50CF\u3001\u8BC6\u522B\u951A\u70B9\u4E0E\u4F5C\u7528\u3002\n- \u63CF\u8FF0\u540D\u3001\u7B80\u79F0\u6216\u4E0D\u5B8C\u6574\u59D3\u540D\u53EA\u6709\u5728\u672C\u96C6\u51FA\u73B0**\u4E66\u9762\u6B63\u5F0F\u59D3\u540D\u6216\u53F0\u8BCD\u76F4\u63A5\u8BF4\u51FA\u672C\u540D**\u65F6\u624D\u80FD\u5347\u7EA7\u89C4\u8303\u540D\uFF1B\u5728 registry_delta.canonicalize \u5199 {from_name, canonical_name, evidence}\uFF0Cevidence \u5FC5\u987B\u5199\u660E\u65F6\u95F4\u6233\u548C\u5F53\u65F6\u53EF\u89C1\u7684\u539F\u6587\u6216\u542C\u5230\u7684\u539F\u8BDD\u3002\u5267\u60C5\u5173\u7CFB\u53EA\u80FD\u5E2E\u52A9\u5224\u65AD\u662F\u4E0D\u662F\u540C\u4E00\u4E2A\u4EBA\uFF0C\u4E0D\u80FD\u5355\u72EC\u4F5C\u4E3A\u6539\u540D\u8BC1\u636E\u3002\n- \u5B8C\u6210\u524D\u6267\u884C\u8D44\u4EA7\u5BF9\u8D26\uFF1A\u6C47\u603B scenes.location\u3001scenes.characters\u3001scenes.props \u4E0E\u4EBA\u7269 voices.speaker \u4E2D\u51FA\u73B0\u7684\u6BCF\u4E2A\u8D44\u4EA7\u540D\uFF0C\u9010\u9879\u786E\u8BA4\u5B83\u80FD\u89E3\u6790\u5230\u5DF2\u77E5\u8BBE\u5B9A\u3001registry_delta.new_entities \u6216\u672C\u96C6 canonicalize \u7684\u76EE\u6807\u3002\u4EFB\u4F55\u672A\u767B\u8BB0\u4EBA\u7269\u5FC5\u987B\u8865\u5165 new_entities \u5E76\u586B\u5199 identity_profile\u3001recognition_anchors\u3001role \u4E0E states\uFF1B\u672A\u767B\u8BB0\u5730\u70B9/\u9053\u5177\u5FC5\u987B\u586B\u5199 appearance\u3001role \u4E0E states\u3002\u82E5\u4E00\u4E2A\u7269\u4EF6\u4E0D\u503C\u5F97\u6210\u4E3A\u5173\u952E\u9053\u5177\u8D44\u4EA7\uFF0C\u5C31\u4ECE scenes.props \u79FB\u9664\u3002\u5BF9\u8D26\u5DEE\u96C6\u975E\u7A7A\u65F6\u4E0D\u5F97\u8F93\u51FA JSON\u3002\u89C4\u8303\u540D\u5347\u7EA7\u540E\u7ACB\u5373\u4F7F\u7528 canonical_name\uFF0C\u4E0D\u8BA9\u6B63\u6587\u8D44\u4EA7\u540D\u8131\u79BB\u82B1\u540D\u518C\u3002\n\u3010\u4EBA\u7269\u8EAB\u4EFD\u753B\u50CF\u3011\u9996\u6B21\u767B\u8BB0\u4EBA\u7269\u65F6\uFF0C\u4ECE\u5168\u7247\u591A\u4E2A\u6E05\u6670\u89D2\u5EA6\u7EFC\u5408\u586B\u5199 identity_profile\uFF0C\u800C\u4E0D\u662F\u7528\u4E00\u53E5\u7B3C\u7EDF\u5916\u8C8C\u6982\u62EC\u3002\u9010\u9879\u8BB0\u5F55\u53EF\u89C1\u6027\u522B\u4E0E\u5E74\u9F84\u6BB5\u3001\u8138\u578B/\u98A7\u9AA8/\u4E0B\u988C\u3001\u7709\u773C\u3001\u9F3B\u90E8\u3001\u9759\u6001\u5507\u5F62\u4E0E\u53E3\u5468\u3001\u7A33\u5B9A\u80A4\u8272\u548C\u9762\u90E8\u7279\u5F81\u3001\u7A33\u5B9A\u53D1\u8272/\u53D1\u9645\u7EBF/\u5E38\u6001\u53D1\u578B\u3001\u9AA8\u67B6\u4F53\u578B\u3001\u56FA\u5B9A\u8EAB\u4F53\u6807\u8BB0\uFF1B\u58F0\u7EBF\u4EC5\u4F9D\u636E\u6E05\u6670\u539F\u58F0\u586B\u5199\u3002\u770B\u4E0D\u6E05\u7684\u5B57\u6BB5\u7559\u7A7A\uFF0C\u4E0D\u731C\u6D4B\u3002\u63CF\u8FF0\u4F7F\u7528\u53EF\u89C2\u5BDF\u7684\u5F62\u72B6\u3001\u6BD4\u4F8B\u3001\u4F4D\u7F6E\u3001\u989C\u8272\u4E0E\u7EB9\u7406\uFF0C\u907F\u514D\u5BA1\u7F8E\u3001\u6C14\u8D28\u3001\u6027\u683C\u3001\u60C5\u7EEA\u548C\u5267\u60C5\u8BC4\u4EF7\u3002\u670D\u9970\u3001\u5986\u5BB9\u3001\u53EF\u6458\u9970\u54C1\u3001\u5F53\u4E0B\u8868\u60C5\u4E0E\u89C6\u7EBF\u3001\u52A8\u4F5C\u3001\u59FF\u6001\u3001\u4E34\u65F6\u4F24\u75D5/\u8840\u8FF9/\u6C61\u6E0D\u3001\u53D8\u8EAB\u6216\u5176\u4ED6\u9636\u6BB5\u6027\u5F62\u6001\u5C5E\u4E8E states \u6216 shots\uFF0C\u4E0D\u6DF7\u5165\u8EAB\u4EFD\u753B\u50CF\u3002\u586B\u5199\u5B8C\u9010\u5B57\u6BB5\u68C0\u67E5\uFF1A\u5047\u8BBE\u4EBA\u7269\u6362\u88C5\u3001\u5378\u5986\u3001\u6458\u6389\u914D\u9970\u3001\u6539\u53D8\u8868\u60C5\u5E76\u8FDB\u5165\u53E6\u4E00\u573A\u666F\uFF0C\u8BE5\u63CF\u8FF0\u662F\u5426\u4ECD\u6210\u7ACB\uFF1B\u4E0D\u6210\u7ACB\u5C31\u4ECE identity_profile \u79FB\u51FA\u3002\n\u3010\u8BC6\u522B\u951A\u70B9\u3011\u4EBA\u7269 recognition_anchors \u5199 3-6 \u6761\u6700\u9002\u5408\u8DE8\u96C6\u91CD\u8BA4\u7684\u7EC4\u5408\u7279\u5F81\uFF1B\u6BCF\u6761\u81F3\u5C11\u7EC4\u5408\u4E24\u4E2A\u6765\u81EA identity_profile \u7684\u7A33\u5B9A\u3001\u53EF\u533A\u5206\u7EBF\u7D22\uFF0C\u5E76\u5C3D\u91CF\u8986\u76D6\u8138\u90E8\u7ED3\u6784\u3001\u4E94\u5B98\u6BD4\u4F8B\u3001\u56FA\u5B9A\u8EAB\u4F53\u6807\u8BB0\u3001\u53D1\u9645\u7EBF/\u5E38\u6001\u5934\u53D1\u3001\u9AA8\u67B6\u4F53\u578B\u6216\u58F0\u7EBF\u7B49\u4E0D\u540C\u7EF4\u5EA6\u3002\u951A\u70B9\u4E0D\u5F97\u5305\u542B\u670D\u88C5\u3001\u5236\u670D\u53F7\u7801\u3001\u5E3D\u5B50\u3001\u773C\u955C\u6216\u5176\u4ED6\u53EF\u6458\u914D\u9970\u3001\u5986\u5BB9\u3001\u5F53\u4E0B\u795E\u60C5/\u52A8\u4F5C/\u59FF\u6001\u3001\u4E34\u65F6\u4F24\u75D5\u6C61\u6E0D\u3001\u5267\u60C5\u8EAB\u4EFD/\u80FD\u529B/\u5173\u7CFB\u3001\u53D8\u8EAB\u5F62\u6001\u6216\u968F\u573A\u666F\u53D8\u5316\u7684\u7269\u4EF6\u3002\u5DF2\u6709\u5B9E\u4F53\u5728\u672C\u96C6\u51FA\u73B0\u66F4\u6E05\u6670\u89D2\u5EA6\u65F6\uFF0C\u7528 enrich.identity_profile_patch \u53EA\u8865\u5145\u6216\u4FEE\u6B63\u6709\u65B0\u8BC1\u636E\u7684\u5B57\u6BB5\uFF0C\u5E76\u7528 add_recognition_anchors \u589E\u52A0\u65B0\u951A\u70B9\uFF1B\u4E0D\u8981\u628A\u6574\u6BB5\u65E7\u753B\u50CF\u6539\u5199\u6210\u53E6\u4E00\u53E5\u3002\u8F93\u51FA\u524D\u9010\u6761\u6838\u5BF9\uFF1A\u951A\u70B9\u4E2D\u7684\u6BCF\u4E2A\u8BCD\u90FD\u80FD\u5728 identity_profile \u627E\u5230\u7A33\u5B9A\u4F9D\u636E\uFF0C\u5426\u5219\u91CD\u5199\u6216\u5220\u9664\u3002\n\u3010\u5730\u70B9\u3001\u9053\u5177\u4E0E\u72B6\u6001\u63CF\u8FF0\u3011\u5730\u70B9 appearance \u5199\u7A7A\u95F4\u7ED3\u6784\u3001\u6750\u8D28\u3001\u8272\u5F69\u548C\u56FA\u5B9A\u9648\u8BBE\uFF0Crole \u5199\u7A7A\u95F4\u7528\u9014\uFF1B\u9053\u5177 appearance \u5199\u5F62\u5236\u3001\u6750\u8D28\u3001\u989C\u8272\u548C\u5C3A\u5BF8\u5173\u7CFB\uFF0Crole \u5199\u7528\u9014\u3002states \u7684\u6BCF\u9879\u90FD\u5FC5\u987B\u540C\u65F6\u7ED9\u51FA\u53EF\u590D\u73B0\u7684\u975E\u7A7A description\u3002\u4EBA\u7269\u9020\u578B\u5148\u7EFC\u5408\u672C\u96C6\u591A\u4E2A\u6E05\u6670\u955C\u5934\uFF0C\u518D\u6309\u4ECE\u5934\u5230\u811A\u7684\u7A33\u5B9A\u5C42\u6B21\u63CF\u8FF0\uFF1A\u8BE5\u9020\u578B\u7279\u6709\u7684\u53D1\u578B\u4E0E\u5934\u9970\u3001\u5986\u5BB9\u3001\u9888\u90E8\u9970\u7269\u3001\u5916\u5957\u3001\u4E0A\u88C5\u3001\u4E0B\u88C5\u6216\u8FDE\u4F53\u8863\u88D9\u3001\u889C\u7C7B\u3001\u978B\u5C65\u3001\u624B\u5957\u53CA\u5176\u4ED6\u9970\u54C1\uFF1B\u6BCF\u4EF6\u770B\u6E05\u7684\u5355\u54C1\u5199\u660E\u989C\u8272\u3001\u6750\u8D28/\u5149\u6CFD/\u7EB9\u7406\u3001\u7248\u578B\u4E0E\u677E\u7D27\u3001\u9886\u578B\u3001\u8896\u578B\u3001\u5F00\u5408\u3001\u8170\u7EBF\u3001\u957F\u5EA6\u3001\u4E0B\u6446\u3001\u56FE\u6848\u3001\u6587\u5B57\u6807\u8BC6\u3001\u6EDA\u8FB9\u6216\u91D1\u5C5E\u4EF6\uFF0C\u5E76\u5199\u6E05\u5185\u5916\u53E0\u7A7F\u548C\u914D\u9970\u6240\u5728\u4F4D\u7F6E\uFF1B\u6301\u7EED\u7834\u635F\u3001\u8840\u8FF9\u3001\u6C61\u6E0D\u6216\u53D8\u5F62\u5199\u660E\u90E8\u4F4D\u3001\u8303\u56F4\u4E0E\u989C\u8272\u3002\u53EA\u7701\u7565\u753B\u9762\u672A\u663E\u793A\u6216\u65E0\u6CD5\u786E\u8BA4\u7684\u9879\uFF0C\u4E0D\u7528\u300E\u7A7F\u7740\u67D0\u670D\u88C5\u300F\u4E00\u53E5\u5E26\u8FC7\uFF0C\u4E0D\u51ED\u5C40\u90E8\u955C\u5934\u8865\u5168\u5168\u8EAB\u3002\u5730\u70B9\u548C\u9053\u5177\u72B6\u6001\u5199\u76F8\u5BF9\u5E38\u6001\u7684\u6301\u7EED\u5916\u89C2\u5DEE\u5F02\u3002\u6240\u6709\u63CF\u8FF0\u53EA\u5199\u753B\u9762\u4E8B\u5B9E\uFF0C\u4E0D\u5199\u52A8\u4F5C\u3001\u59FF\u6001\u3001\u60C5\u7EEA\u3001\u5FC3\u7406\u6216\u5267\u60C5\u8BC4\u4EF7\u3002\u5DF2\u77E5\u8BBE\u5B9A\u4E2D\u5DF2\u6709\u7684\u72B6\u6001\u6CBF\u7528\u5176 name\uFF1B\u672C\u96C6\u770B\u5230\u66F4\u591A\u89D2\u5EA6\u6216\u66F4\u6E05\u6670\u7EC6\u8282\u65F6\uFF0C\u7528 enrich.add_states \u7684\u540C\u540D\u9879\u8865\u5168 description\u3002\n\u3010\u8BF4\u8BDD\u4EBA\u2014\u2014\u7528\u5267\u60C5\u9501\u5B9A\uFF0C\u522B\u53EA\u770B\u8138\u3011\u77ED\u5267\u5E38\u6709\u51E0\u4E2A\u957F\u76F8\u76F8\u4F3C\u7684\u4E2D\u8001\u5E74\u7537\u6027\u9AD8\u7BA1\uFF0C\u5355\u5E27\u4EBA\u8138\u4F1A\u8BA4\u9519\u3002\u5148\u4ECE\u53F0\u8BCD\u5185\u5BB9\u3001\u5F7C\u6B64\u79F0\u547C\uFF08\u8C01\u53EB\u8C01\u300C\u54E5\u300D\u300CX\u603B\u300D\uFF09\u3001\u573A\u666F\u5173\u7CFB\uFF08\u8C01\u6C42\u8C01\u3001\u8C01\u8BAD\u8C01\u3001\u8C01\u4E0B\u8DEA\uFF09\u63A8\u65AD\u8FD9\u573A\u5728\u573A\u662F\u8C01\u3001\u8C01\u5BF9\u8C01\u8BF4\uFF0C\u518D\u5B9A\u8BF4\u8BDD\u4EBA\u3002\u5267\u60C5\u9501\u5B9A\u4F18\u5148\u4E8E\u5916\u8C8C\u3002\n\u3010\u547D\u540D\u4F18\u5148\u7EA7\u3011\u4E66\u9762\u6B63\u5F0F\u59D3\u540D\uFF08\u4EBA\u7269\u4ECB\u7ECD\u6761/\u5DE5\u724C/\u6765\u7535\u663E\u793A\uFF09> \u53F0\u8BCD\u558A\u51FA\u7684\u672C\u540D > \u7EAF\u63CF\u8FF0\u540D\u3002\u6709\u4E66\u9762\u6B63\u5F0F\u59D3\u540D\u5C31\u7528\u5B83\u5F53\u89C4\u8303\u540D\uFF0C\u54EA\u6015\u5168\u96C6\u53EA\u558A\u804C\u52A1\u3002\u7EDD\u4E0D\u51ED\u7A7A\u634F\u9020\u5E26\u59D3\u6C0F\u7684\u5047\u540D\u3002\n\u3010\u89C4\u8303\u540D\u552F\u4E00\u6027\u3011\u4EBA\u7269\u89C4\u8303\u540D\u53EA\u5199\u59D3\u540D\u6216\u7A33\u5B9A\u63CF\u8FF0\u540D\uFF0C\u89D2\u8272\u804C\u80FD\u3001\u5173\u7CFB\u3001\u5907\u6CE8\u4E0D\u5F97\u585E\u8FDB\u62EC\u53F7\u3002\u8F93\u51FA\u524D\u6309\u53BB\u7A7A\u683C\u3001\u7EDF\u4E00\u5168\u534A\u89D2\u62EC\u53F7\u5E76\u5FFD\u7565\u62EC\u53F7\u5907\u6CE8\u540E\u7684\u53EF\u89C1\u540D\u79F0\u68C0\u67E5\u82B1\u540D\u518C\uFF1B\u4E24\u4E2A\u4E0D\u540C\u4EBA\u7269\u4E0D\u5F97\u5F97\u5230\u4F1A\u88AB\u5F52\u4E00\u6210\u540C\u540D\u7684\u89C4\u8303\u540D\u3002\u82E5\u53F0\u8BCD\u53EA\u7ED9\u51FA\u76F8\u540C\u79F0\u547C\uFF0C\u4FDD\u7559\u5DF2\u77E5\u4EBA\u7269\u539F\u540D\uFF0C\u5E76\u7ED9\u65B0\u4EBA\u7269\u4F7F\u7528\u80FD\u533A\u5206\u8EAB\u4EFD\u4E14\u4E0D\u5E26\u62EC\u53F7\u7684\u7A33\u5B9A\u63CF\u8FF0\u540D\uFF0C\u4F8B\u5982\u300E\u5A92\u5A46\u738B\u5A76\u300F\uFF0C\u89D2\u8272\u8BF4\u660E\u7EE7\u7EED\u5199\u5728 role\u3002\n\u3010\u58F0\u97F3\u5B8C\u6574\u6027\u3011\u6BCF\u6BB5\u53EF\u8FA8\u8BC6\u7684\u4EBA\u58F0\u90FD\u5FC5\u987B\u5728 voices \u4E2D\u51FA\u73B0\u4E14\u53EA\u51FA\u73B0\u4E00\u6B21\uFF0C\u5305\u62EC\u4EBA\u7269\u51FA\u955C\u5BF9\u767D\u3001\u753B\u5916\u5BF9\u767D\u3001\u89D2\u8272\u5185\u5FC3\u72EC\u767D/\u81EA\u8FF0\u3001\u5BA2\u89C2\u65C1\u767D\u3001\u7535\u8BDD/\u5E7F\u64AD/\u8BBE\u5907\u58F0\u3001\u8033\u8BED\u3001\u7FA4\u4F53\u58F0\u548C\u8DE8\u753B\u9762\u8FDE\u7EED\u8BB2\u8FF0\u3002\u8BF4\u8BDD\u65F6\u753B\u9762\u5207\u6362\u3001\u4EBA\u7269\u672A\u51FA\u955C\u3001\u53EA\u663E\u793A\u6D41\u7A0B\u56FE/\u5730\u56FE/\u624B\u673A/\u5C4F\u5E55\u3001\u8FDB\u5165\u56DE\u5FC6\u6216\u8499\u592A\u5947\u3001\u91CD\u590D\u67D0\u6BB5\u753B\u9762\u3001\u53E3\u578B\u4E0D\u53EF\u89C1\uFF0C\u90FD\u4E0D\u662F\u7701\u7565\u58F0\u97F3\u7684\u7406\u7531\u3002\u8FDE\u7EED\u8BB2\u8FF0\u8DE8 scene \u6216\u8DE8\u955C\u65F6\u6309\u81EA\u7136\u8BED\u53E5\u5728\u5BF9\u5E94\u65F6\u95F4\u70B9\u62C6\u5206\uFF0C\u539F\u8BDD\u5B8C\u6574\u4FDD\u7559\u3001\u4E0D\u91CD\u4E0D\u6F0F\uFF1B\u7528\u540C\u8BED\u8A00\u5BF9\u767D\u5B57\u5E55\u9010\u53E5\u6838\u5BF9\u97F3\u8F68\uFF0C\u5C24\u5176\u68C0\u67E5\u77ED\u53E5\u548C\u63D2\u5165\u753B\u9762\u4E0A\u7684\u8FDE\u7EED\u58F0\u97F3\u3002\n\u3010\u539F\u58F0\u8BED\u8A00\u94C1\u5F8B\u3011voices.content \u9010\u5B57\u4FDD\u7559\u97F3\u8F68\u5B9E\u9645\u4F7F\u7528\u7684\u8BED\u8A00\u3001\u6587\u5B57\u548C\u5939\u6742\u8BED\u8A00\uFF0C\u4E0D\u7FFB\u8BD1\u3001\u4E0D\u6539\u5199\u3001\u4E0D\u7528\u4E2D\u6587\u5B57\u5E55\u66FF\u6362\u5916\u8BED\u539F\u58F0\u3002\u82F1\u6587\u97F3\u8F68\u914D\u4E2D\u6587\u5B57\u5E55\u65F6\u5199\u82F1\u6587\u539F\u8BCD\uFF1B\u5370\u5C3C\u8BED\u3001\u6CF0\u8BED\u6216\u5176\u4ED6\u8BED\u8A00\u97F3\u8F68\u5199\u5BF9\u5E94\u8BED\u8A00\u539F\u8BCD\uFF1B\u540C\u4E00\u53E5\u53D1\u751F code-switch \u65F6\u6309\u542C\u5230\u7684\u987A\u5E8F\u539F\u6837\u4FDD\u7559\u3002\u8BC1\u636E\u4F18\u5148\u7EA7\u662F\u539F\u59CB\u97F3\u8F68 > \u4E0E\u97F3\u8F68\u540C\u8BED\u8A00\u7684\u5BF9\u767D\u5B57\u5E55 > \u7FFB\u8BD1\u5B57\u5E55\u3002\u5B57\u5E55\u53EA\u80FD\u8F85\u52A9\u8FA8\u6E05\u540C\u8BED\u8A00\u539F\u8BCD\uFF0C\u4E0D\u80FD\u6539\u53D8\u53F0\u8BCD\u8BED\u8A00\uFF1B\u542C\u4E0D\u6E05\u65F6\u4FDD\u7559\u53EF\u786E\u8BA4\u90E8\u5206\u5E76\u5728 parenthetical \u6807\u300E\u542C\u8FA8\u5F85\u590D\u6838\u300F\uFF0C\u4E0D\u8981\u7528\u7FFB\u8BD1\u5B57\u5E55\u731C\u53F0\u8BCD\u3002\n\u3010\u753B\u9762\u6587\u5B57\u4E0E\u5D4C\u5957\u753B\u9762\u3011\u5E95\u90E8\u5BF9\u767D\u5B57\u5E55\u662F\u58F0\u97F3\u53F0\u8BCD\u7684\u5197\u4F59\u8BC1\u636E\uFF0C\u4E0D\u5355\u72EC\u5EFA shot\uFF1B\u7528\u5B83\u9010\u53E5\u6838\u5BF9 voices \u662F\u5426\u5B8C\u6574\u3002\u627F\u8F7D\u65B0\u4FE1\u606F\u7684\u753B\u9762\u6587\u5B57\uFF08\u4EBA\u7269\u4ECB\u7ECD\u6761/\u8EAB\u4EFD\u5934\u8854/\u65F6\u95F4\u5730\u70B9\u4EA4\u4EE3/\u7CFB\u7EDF\u63D0\u793A/\u5173\u952E\u9053\u5177\u4E0A\u7684\u5B57\uFF09\u5199\u5165\u5BF9\u5E94 shot.visual\u3002\u624B\u673A\u3001\u76D1\u63A7\u3001\u5C4F\u5E55\u3001\u7167\u7247\u548C\u56DE\u5FC6\u753B\u9762\u53EA\u5199\u5B9E\u9645\u53EF\u89C1\u7684\u4EBA\u7269\u52A8\u4F5C\u3001\u7269\u4F53\u548C\u53EF\u8BFB\u6587\u5B57\uFF1B\u6CA1\u6709\u753B\u9762\u3001\u53F0\u8BCD\u6216\u6587\u5B57\u76F4\u63A5\u8BC1\u660E\u65F6\uFF0C\u4E0D\u63A8\u65AD\u4EBA\u7269\u8EAB\u4F53\u72B6\u6001\u3001\u4E8B\u4EF6\u539F\u56E0\u3001\u524D\u540E\u5173\u7CFB\u6216\u7ED3\u679C\u3002\n\u3010\u72B6\u6001=\u9020\u578B\u3011state / states = \u4E00\u4E2A\u89D2\u8272\u4E00\u6574\u5957\u7A33\u5B9A\u626E\u76F8\uFF08\u7740\u88C5+\u53D1\u578B+\u6301\u7EED\u5986\u9020\uFF0C\u5982\u300C\u6DF1\u7070\u897F\u88C5\u300D\uFF09\uFF0C\u4E0D\u662F\u60C5\u7EEA/\u59FF\u6001\uFF0C\u4E5F\u4E0D\u662F\u5355\u4EF6\u8863\u670D\u3002\u7ED9\u67D0\u89D2\u8272\u6807\u9020\u578B\u524D\uFF0C\u5148\u770B\u5DF2\u77E5\u8BBE\u5B9A\u91CC\u4ED6\u540D\u4E0B\u7684\u300C\u5DF2\u77E5\u9020\u578B\u300D\u6E05\u5355\u2014\u2014\u53EA\u8981\u672C\u96C6\u662F\u4ED6\u5DF2\u5217\u8FC7\u7684\u67D0\u5957\u626E\u76F8\uFF08\u54EA\u6015\u53EA\u62CD\u5230\u4E0A\u534A\u8EAB/\u6362\u4E86\u89D2\u5EA6/\u5149\u7EBF\u4E0D\u540C/\u591A\u770B\u5230\u5C11\u770B\u5230\u4E00\u4EF6\u5355\u54C1\uFF09\uFF0C**\u9010\u5B57\u7167\u6284\u6E05\u5355\u91CC\u90A3\u4E2A\u9020\u578B\u540D**\uFF0C\u53EA\u6709\u6574\u5957\u6362\u88C5\u624D\u65B0\u5EFA\u3002\u9020\u578B\u540D\u53EA\u586B\u7B80\u6D01\u6863\u4F4D\u540D\uFF0C\u8BE6\u7EC6\u7EC4\u6210\u5168\u90E8\u5199\u8FDB state.description\u3002\u8F93\u51FA\u524D\u590D\u6838\u6BCF\u4E2A\u9020\u578B\uFF1A\u753B\u9762\u770B\u6E05\u7684\u670D\u88C5\u5C42\u6B21\u3001\u7248\u578B\u7ED3\u6784\u3001\u6750\u8D28\u914D\u8272\u3001\u978B\u889C\u3001\u5986\u53D1\u548C\u914D\u9970\u662F\u5426\u5DF2\u8986\u76D6\uFF1B\u82E5\u66F4\u6E05\u6670\u955C\u5934\u80FD\u8865\u5145\u65E2\u6709\u9020\u578B\uFF0C\u5C31\u66F4\u65B0\u540C\u540D description\uFF0C\u4E0D\u53E6\u5EFA\u8FD1\u4E49\u9020\u578B\u3002\n\u3010\u573A\u754C\u4E0E\u5730\u70B9\u3011\u4E00\u573A\u662F\u5730\u70B9\u3001\u8FDE\u7EED\u65F6\u6BB5\u548C\u53D9\u4E8B\u7EBF\u8FDE\u7EED\u7684\u751F\u4EA7\u5355\u5143\u3002\u5BA2\u5385\u3001\u5367\u5BA4\u3001\u536B\u751F\u95F4\u3001\u5927\u5385\u3001\u5E7F\u573A\u3001\u821E\u53F0\u3001\u540E\u53F0\u5206\u522B\u4F7F\u7528\u72EC\u7ACB location\uFF1B\u76F8\u5173\u7A7A\u95F4\u7EDF\u4E00\u547D\u540D\u4E3A\u300E\u8C6A\u5B85\xB7\u5BA2\u5385\u300F\u300E\u8C6A\u5B85\xB7\u5367\u5BA4\u300F\u3002\u4EBA\u7269\u8DE8\u8FC7\u95E8\u69DB\u8FDB\u5165\u53E6\u4E00\u7A7A\u95F4\u3001\u53D9\u4E8B\u8FDB\u5165\u53E6\u4E00\u7A33\u5B9A\u7A7A\u95F4\u3001\u660E\u663E\u8DF3\u65F6\u3001\u5207\u6362\u53D9\u4E8B\u7EBF\u6216\u660E\u786E\u8F6C\u573A\u65F6\u5EFA\u7ACB\u65B0 scene\u3002\u4E00\u4E2A scene \u53EA\u5199\u4E00\u4E2A\u4E3B location\uFF1B\u540C\u4E00\u8FDE\u7EED\u573A\u5185\u7684\u4EBA\u7269\u9020\u578B\u53D8\u5316\u4E0D\u662F\u5206\u573A\u7406\u7531\u3002\n\u3010\u72B6\u6001\u53D8\u5316\u4E0E\u573A\u5185\u8D44\u4EA7\u3011\u4EBA\u7269\u6362\u6574\u5957\u670D\u88C5\u3001\u53D8\u8EAB\u3001\u8131\u8863\u5F62\u6210\u53EF\u6301\u7EED\u65B0\u5916\u89C2\u65F6\uFF0C\u628A\u53D8\u5316\u52A8\u4F5C\u5199\u5165\u5F53\u524D scene \u7684 shots\u3002characters \u4E2D\u540C\u4E00\u89C4\u8303\u540D\u53EA\u51FA\u73B0\u4E00\u6B21\uFF1B\u8BE5\u6761\u7684 states \u662F\u672C\u573A\u51FA\u73B0\u8FC7\u7684\u5168\u90E8\u7A33\u5B9A\u9020\u578B\u96C6\u5408\uFF0C\u4E0D\u80FD\u6F0F\u6389\u53D8\u5316\u524D\u6216\u53D8\u5316\u540E\u72B6\u6001\uFF0C\u4E5F\u4E0D\u6309\u5148\u540E\u62C6\u6210\u91CD\u590D\u4EBA\u7269\u3002\u5730\u70B9\u88AB\u6BC1\u6216\u5173\u952E\u9053\u5177\u660E\u663E\u53D8\u5F62\u65F6\u767B\u8BB0\u5BF9\u5E94\u65B0 state\u3002\u60C5\u7EEA\u3001\u59FF\u6001\u548C\u4E00\u6B21\u6027\u52A8\u4F5C\u4FDD\u7559\u5728 shots \u7684 visual\uFF0C\u4E0D\u5EFA\u7ACB state\u3002\n\u3010\u9010\u955C\u8FD8\u539F\u3011shots \u662F\u72EC\u7ACB\u5206\u955C\u6E05\u5355\u3002\u6BCF\u6B21\u5207\u955C\u90FD\u5728\u8D77\u59CB\u65F6\u95F4\u65B0\u589E\u4E00\u6761 shot\uFF0C\u5373\u4F7F\u5B83\u91CD\u590D\u5C55\u793A\u4E4B\u524D\u7684\u52A8\u4F5C\u6216\u6CA1\u6709\u65B0\u5267\u60C5\uFF0C\u4E5F\u8981\u4FDD\u7559\u3002\u8FDE\u7EED\u955C\u5934\u5185\u7684\u666F\u522B\u3001\u62CD\u6444\u89D2\u5EA6\u3001\u673A\u4F4D\u3001\u955C\u5934\u79FB\u52A8\u3001\u6784\u56FE\u3001\u7126\u70B9\u6216\u753B\u9762\u4E3B\u4F53\u53D8\u5316\uFF0C\u4EE5\u53CA\u6BCF\u4E2A\u65B0\u52A8\u4F5C\u3001\u53CD\u5E94\u3001\u63A5\u89E6/\u5206\u5F00\u3001\u9053\u5177\u64CD\u4F5C\u4E0E\u7ED3\u679C\u3001\u8FDB\u51FA\u573A\u3001\u79FB\u52A8\u3001\u59FF\u52BF/\u671D\u5411/\u89C6\u7EBF\u6216\u7A7A\u95F4\u5173\u7CFB\u53D8\u5316\uFF0C\u90FD\u5728\u5B9E\u9645\u53D1\u751F\u65F6\u53E6\u589E shot\u3002\u4E0D\u5F97\u628A\u5148\u540E\u53D1\u751F\u7684\u5206\u955C\u6216\u52A8\u4F5C\u538B\u7F29\u6210\u5267\u60C5\u6982\u8FF0\u3002\n\u3010shot.camera\u3011\u53EA\u5199\u539F\u7247\u53EF\u89C1\u3001\u53EF\u590D\u73B0\u7684\u6444\u5F71\u4FE1\u606F\uFF1A\u8FDC\u666F/\u5168\u666F/\u4E2D\u666F/\u8FD1\u666F/\u7279\u5199\u7B49\u666F\u522B\uFF0C\u4FEF\u62CD/\u4EF0\u62CD/\u5E73\u89C6/\u4FA7\u9762/\u80CC\u9762\u7B49\u89D2\u5EA6\uFF0C\u56FA\u5B9A\u3001\u63A8\u3001\u62C9\u3001\u6447\u3001\u79FB\u3001\u8DDF\u3001\u73AF\u7ED5\u3001\u5347\u964D\u3001\u7126\u70B9\u8F6C\u79FB\u7B49\u53EF\u786E\u8BA4\u7684\u8FD0\u955C\uFF0C\u4EE5\u53CA\u524D\u666F/\u4E2D\u666F/\u540E\u666F\u3001\u753B\u9762\u5DE6\u53F3\u3001\u906E\u6321\u548C\u4E3B\u4F53\u5360\u4F4D\u3002\u5207\u955C\u3001\u53CD\u6253\u3001\u63D2\u5165\u955C\u5934\u3001\u4E3B\u89C2\u955C\u5934\u3001\u7A7A\u955C\u548C\u91CD\u590D\u955C\u5934\u90FD\u5982\u5B9E\u4FDD\u7559\u3002\u4E0D\u63A8\u6D4B\u753B\u9762\u65E0\u6CD5\u786E\u8BA4\u7684\u955C\u5934\u53C2\u6570\u3001\u955C\u5934\u578B\u53F7\u3001\u706F\u5149\u8BBE\u7F6E\u6216\u62CD\u6444\u610F\u56FE\u3002\n\u3010\u7AD9\u4F4D\u4E0E\u6301\u7EED\u72B6\u6001\u3011\u6BCF\u573A\u7B2C\u4E00\u4E2A shot \u7684 visual \u5EFA\u7ACB\u753B\u9762\u53EF\u786E\u8BA4\u7684\u4EBA\u7269\u7AD9\u4F4D/\u5750\u5367\u4F4D\u7F6E\u3001\u4E0E\u5730\u70B9\u56FA\u5B9A\u53C2\u7167\u7269\u7684\u5173\u7CFB\u3001\u4EBA\u7269\u4E4B\u95F4\u7684\u8FDC\u8FD1\u4E0E\u524D\u540E\u5DE6\u53F3\u3001\u59FF\u6001\u3001\u9762\u5411\u3001\u89C6\u7EBF\u3001\u63A5\u89E6\u548C\u6B63\u5728\u8FDB\u884C\u7684\u884C\u4E3A\u3002\u540E\u7EED\u5207\u955C\u82E5\u663E\u793A\u65B0\u7684\u6784\u56FE\u5173\u7CFB\uFF0C\u5199\u6E05\u4EBA\u7269\u5728\u753B\u9762\u5DE6/\u53F3\u3001\u524D\u666F/\u4E2D\u666F/\u540E\u666F\u7684\u4F4D\u7F6E\uFF1B\u82E5\u4EBA\u7269\u8FDB\u51FA\u3001\u79FB\u52A8\u3001\u8F6C\u8EAB\u3001\u6539\u53D8\u59FF\u52BF\u3001\u6CE8\u89C6\u5BF9\u8C61\u3001\u63A5\u89E6\u6216\u5206\u5F00\uFF0C\u5199\u6E05\u53D8\u5316\u524D\u540E\u7684\u5173\u7CFB\u3002\u6301\u7EED\u72B6\u6001\u4E0D\u56E0\u5BF9\u767D\u800C\u5931\u6548\uFF0C\u4F46\u6BCF\u6B21\u5207\u955C\u4ECD\u9700\u5199\u8BE5\u955C\u5934\u5B9E\u9645\u5448\u73B0\u7684\u6784\u56FE\u548C\u4E3B\u4F53\u3002\n\u3010\u9010\u53E5\u5BF9\u767D\u4E0E\u540C\u671F\u8868\u6F14\u5BF9\u9F50\u2014\u2014\u672C\u4EFB\u52A1\u5B8C\u6210\u95E8\u3011\u4E3A\u6BCF\u6761 voice \u5355\u72EC\u56DE\u770B\u8BE5\u53E5\u5F00\u59CB\u524D\u5230\u8BF4\u5B8C\u7684\u753B\u9762\uFF0C\u786E\u8BA4\u8BF4\u8BDD\u8005\u548C\u540C\u573A\u4EBA\u7269\u5F53\u65F6\u7684\u53EF\u89C1\u52A8\u4F5C\u3001\u8868\u60C5\u3001\u89C6\u7EBF\u3001\u59FF\u6001\u3001\u63A5\u89E6\u548C\u4F4D\u7F6E\u5173\u7CFB\u5DF2\u5728 shots \u4E2D\u51C6\u786E\u627F\u8F7D\u3002\u4E0E\u8FD9\u53E5\u8BDD\u540C\u65F6\u53D1\u751F\u3001\u4E0D\u72EC\u7ACB\u6539\u53D8\u8FDE\u7EED\u6027\u7684\u77ED\u4FC3\u8868\u6F14\u53EF\u5199\u5165\u8BE5 voice \u7684 parenthetical\uFF1B\u8D70\u4F4D\u3001\u59FF\u52BF\u53D8\u5316\u3001\u63A5\u89E6/\u5206\u5F00\u3001\u9053\u5177\u64CD\u4F5C\u6216\u7A7A\u95F4\u5173\u7CFB\u53D8\u5316\u5199\u5165\u5BF9\u5E94\u65F6\u95F4\u7684 shot.visual\u3002\u4E0D\u5F97\u8BA9\u5BF9\u767D\u65F6\u95F4\u70B9\u5C06\u6B63\u5728\u53D1\u751F\u7684\u53EF\u89C1\u8868\u6F14\u53D8\u6210\u5BF9\u767D\u4E4B\u540E\u7684\u52A8\u4F5C\u3002\n\u3010shot.visual\u3011\u4F7F\u7528\u4EBA\u7269\u89C4\u8303\u540D\uFF0C\u5199\u6E05\u884C\u52A8\u8005\u3001\u52A8\u4F5C\u3001\u4F5C\u7528\u5BF9\u8C61\u3001\u7A7A\u95F4\u65B9\u5411\u548C\u53EF\u89C1\u7ED3\u679C\u3002\u53EA\u5199\u5177\u4F53\u53EF\u89C1\u7684\u7709\u773C\u3001\u5634\u90E8\u3001\u547C\u5438\u3001\u89C6\u7EBF\u3001\u624B\u52BF\u3001\u59FF\u6001\u3001\u63A5\u89E6\u3001\u79FB\u52A8\u3001\u9053\u5177\u548C\u73AF\u5883\u53D8\u5316\uFF0C\u4E0D\u7528\u6124\u6012\u3001\u7126\u8651\u3001\u59D4\u5C48\u3001\u7EDD\u671B\u3001\u9707\u60CA\u3001\u54C0\u6C42\u3001\u5632\u8BBD\u7B49\u60C5\u7EEA\u3001\u6001\u5EA6\u6216\u5FC3\u7406\u5224\u65AD\u4EE3\u66FF\u753B\u9762\u4E8B\u5B9E\u3002\u53EA\u5199\u539F\u7247\u80FD\u591F\u786E\u8BA4\u7684\u4E8B\u5B9E\uFF1B\u770B\u4E0D\u6E05\u7684\u4F4D\u7F6E\u3001\u671D\u5411\u3001\u8868\u60C5\u6216\u52A8\u4F5C\u4E0D\u5199\uFF0C\u4E0D\u8865\u9020\u3002synopsis \u53EF\u4EE5\u6982\u62EC\u5267\u60C5\uFF0Cshots \u4E0D\u5F97\u5199\u6210\u5267\u60C5\u6897\u6982\u3002\n\u3010\u6B63\u6587\u4E0E\u9020\u578B\u3011\u89D2\u8272\u7684\u65E2\u6709\u670D\u88C5\u7531 characters.states \u548C\u4EBA\u7269\u8D44\u4EA7\u627F\u8F7D\uFF0Cshot.visual \u4E0D\u91CD\u590D\u63CF\u8FF0\u3002\u53EA\u6709\u753B\u9762\u4E2D\u53D1\u751F\u7684\u6362\u88C5\u3001\u8131\u8863\u3001\u670D\u88C5\u7834\u635F\u3001\u6CBE\u67D3\u6CE5\u6C61\u7B49\u53EF\u89C1\u53D8\u5316\uFF0C\u6216\u786E\u6709\u5FC5\u8981\u533A\u5206\u4EBA\u7269/\u65F6\u6BB5\u65F6\u624D\u5199\u5165 shot.visual\u3002\n\u3010voices\u3011\u4EBA\u7269\u5BF9\u4ED6\u4EBA\u8BF4\u51FA\u7684\u58F0\u97F3\u5199 kind=dlg\uFF1B\u97F3\u8F68\u91CC\u5B9E\u9645\u542C\u5230\u3001\u660E\u786E\u5C5E\u4E8E\u67D0\u89D2\u8272\u7684\u5185\u5FC3\u72EC\u767D\u6216\u7B2C\u4E00\u4EBA\u79F0\u81EA\u8FF0\u5199 kind=think\u3002speaker \u4F7F\u7528\u89D2\u8272\u89C4\u8303\u540D\uFF1B\u5BA2\u89C2\u53D9\u8FF0\u8005\u6216\u8EAB\u4EFD\u65E0\u6CD5\u786E\u8BA4\u7684\u65C1\u767D\u5199 speaker=\u300Ebroadcast:\u65C1\u767D\u300F\uFF1B\u7535\u8BDD\u3001\u5E7F\u64AD\u6216\u8BBE\u5907\u4E2D\u7684\u660E\u786E\u8BF4\u8BDD\u4EBA\u5728 parenthetical \u6807\u660E\u58F0\u6E90\u3002\u53EA\u8BB0\u5F55\u97F3\u8F68\u5B9E\u9645\u8868\u8FBE\u7684\u5185\u5FC3\uFF0C\u4E0D\u8111\u8865\u672A\u8BF4\u51FA\u7684\u5FC3\u7406\u3002content \u4FDD\u7559\u539F\u8BDD\uFF1Bparenthetical \u53EF\u5199\u53EF\u786E\u8BA4\u7684\u53D1\u58F0\u65B9\u5F0F\u3001\u58F0\u97F3\u6765\u6E90\u6216\u540C\u671F\u77ED\u4FC3\u8868\u6F14\uFF0C\u4F46\u6444\u5F71\u8C03\u5EA6\u548C\u5F71\u54CD\u8FDE\u7EED\u6027\u7684\u52A8\u4F5C\u53EA\u5199 shots\u3002\u5BF9\u767D\u8DE8\u8D8A\u5207\u955C\u3001\u955C\u5934\u4E3B\u4F53\u53D8\u5316\u6216\u72EC\u7ACB\u52A8\u4F5C\u65F6\uFF0C\u5728\u5BF9\u5E94\u65F6\u95F4\u70B9\u6309\u539F\u58F0\u81EA\u7136\u8BED\u53E5\u62C6\u5206\uFF1B\u4E0D\u5F97\u628A\u8DE8\u591A\u4E2A\u955C\u5934\u7684\u591A\u53E5\u53F0\u8BCD\u5408\u5E76\u6210\u4E00\u6761\u3002\u4E24\u4EBA\u540C\u65F6\u8BF4\u8BDD\u65F6\u8F93\u51FA\u76F8\u90BB\u4E24\u6761 voice\uFF0C\u7B2C\u4E8C\u6761 parenthetical \u4EE5\u300E\u540C\u65F6\u300F\u5F00\u5934\u3002\u5177\u4F53\u5355\u4EBA\u4F7F\u7528\u89C4\u8303\u540D\uFF1B\u65E0\u6CD5\u533A\u5206\u6210\u5458\u7684\u4F17\u4EBA\u3001\u7FA4\u4F17\u3001\u8DEF\u4EBA\u7B49\u5171\u540C\u53D1\u58F0\u65F6 speaker \u5199\u300Egroup:\u7FA4\u4F53\u540D\u300F\uFF0C\u4E0D\u5217\u5165 characters \u548C registry_delta\u3002\n\u3010\u8499\u592A\u5947\u3011\u540C\u5730\u70B9\u8FDE\u7EED\u8499\u592A\u5947\u4FDD\u7559\u4E00\u573A\uFF1B\u8DE8\u5730\u70B9\u8499\u592A\u5947\u6309\u526A\u8F91\u987A\u5E8F\u62C6\u6210\u591A\u4E2A\u77ED scene\uFF0C\u6BCF\u573A\u7ED1\u5B9A\u81EA\u5DF1\u7684 location\u3001characters\u3001props \u548C state\uFF0C\u5E76\u7528 shots \u660E\u786E\u8499\u592A\u5947\u5F00\u59CB\u3001\u5207\u6362\u548C\u7ED3\u675F\u3002";
15785
15881
  function buildSerialUser(episodeNo, contextText) {
15786
15882
  const ctx = contextText.trim() ? `========== \u5DF2\u77E5\u8BBE\u5B9A\uFF08\u5230\u4E0A\u4E00\u96C6\u4E3A\u6B62\uFF0C\u89C4\u8303\u540D\u4EE5\u6B64\u4E3A\u51C6\uFF09 ==========
15787
15883
  ${contextText}
15788
15884
  ` : "\uFF08\u8FD9\u662F\u7B2C\u4E00\u96C6\uFF0C\u6682\u65E0\u5DF2\u77E5\u8BBE\u5B9A\u3002\uFF09\n";
15789
- return `\u89E3\u6790\u7B2C ${episodeNo} \u96C6\uFF1A\u5BF9\u7167\u672C\u96C6\u539F\u89C6\u9891\uFF0C\u6309\u8F93\u51FA schema \u8FD4\u56DE JSON \u5BF9\u8C61\u3002scenes \u9010\u573A\u8986\u76D6\u5168\u96C6\uFF1B\u6BCF\u573A\u5148\u72EC\u7ACB\u5B8C\u6210\u9010\u955C shots\uFF0C\u518D\u72EC\u7ACB\u5B8C\u6210 voices\u3002shots \u5FC5\u987B\u8986\u76D6\u6BCF\u6B21\u5207\u955C\u548C\u53EF\u786E\u8BA4\u7684\u6444\u5F71/\u8868\u6F14\u53D8\u5316\uFF0C\u4E0D\u53BB\u91CD\u91CD\u590D\u955C\u5934\uFF0C\u4E0D\u5408\u5E76\u5148\u540E\u53D1\u751F\u7684\u5206\u955C\u6216\u52A8\u4F5C\uFF1Bvoices \u5B8C\u6574\u4FDD\u7559\u539F\u58F0\u5E76\u5728\u8DE8\u955C\u65F6\u6309\u81EA\u7136\u8BED\u53E5\u62C6\u5206\u3002registry_delta \u53EA\u62A5\u589E\u91CF\uFF08\u5DF2\u77E5\u4E14\u65E0\u65B0\u4FE1\u606F\u7684\u5B9E\u4F53\u4E0D\u8981\u5199\uFF09\u3002\u5B8C\u6210\u524D\u5206\u522B\u590D\u6838 shots \u7684\u5207\u955C\u3001\u666F\u522B/\u89D2\u5EA6/\u8FD0\u955C/\u6784\u56FE/\u7126\u70B9\u3001\u53EF\u89C1\u8868\u6F14\u548C\u7AD9\u4F4D\u5173\u7CFB\uFF0C\u4EE5\u53CA voices \u7684\u5168\u90E8\u4EBA\u58F0\u4E0E\u89C6\u9891\u6700\u540E\u5341\u79D2\u3002
15885
+ return `\u89E3\u6790\u7B2C ${episodeNo} \u96C6\uFF1A\u5BF9\u7167\u672C\u96C6\u539F\u89C6\u9891\uFF0C\u6309\u672C\u4EFB\u52A1\u5B9A\u4E49\u7684 JSON \u7ED3\u6784\u8FD4\u56DE\u4E00\u4E2A JSON \u5BF9\u8C61\u3002\u53EA\u8FD4\u56DE JSON \u672C\u8EAB\uFF0C\u4E0D\u8981\u8F93\u51FA\u89E3\u91CA\u3001\u524D\u8A00\u6216 Markdown \u4EE3\u7801\u5757\u3002scenes \u9010\u573A\u8986\u76D6\u5168\u96C6\uFF1B\u6BCF\u573A\u5148\u72EC\u7ACB\u5B8C\u6210\u9010\u955C shots\uFF0C\u518D\u72EC\u7ACB\u5B8C\u6210 voices\u3002shots \u5FC5\u987B\u8986\u76D6\u6BCF\u6B21\u5207\u955C\u548C\u53EF\u786E\u8BA4\u7684\u6444\u5F71/\u8868\u6F14\u53D8\u5316\uFF0C\u4E0D\u53BB\u91CD\u91CD\u590D\u955C\u5934\uFF0C\u4E0D\u5408\u5E76\u5148\u540E\u53D1\u751F\u7684\u5206\u955C\u6216\u52A8\u4F5C\uFF1Bvoices \u5B8C\u6574\u4FDD\u7559\u539F\u58F0\u5E76\u5728\u8DE8\u955C\u65F6\u6309\u81EA\u7136\u8BED\u53E5\u62C6\u5206\u3002registry_delta \u53EA\u62A5\u589E\u91CF\uFF08\u5DF2\u77E5\u4E14\u65E0\u65B0\u4FE1\u606F\u7684\u5B9E\u4F53\u4E0D\u8981\u5199\uFF09\u3002\u5B8C\u6210\u524D\u5206\u522B\u590D\u6838 shots \u7684\u5207\u955C\u3001\u666F\u522B/\u89D2\u5EA6/\u8FD0\u955C/\u6784\u56FE/\u7126\u70B9\u3001\u53EF\u89C1\u8868\u6F14\u548C\u7AD9\u4F4D\u5173\u7CFB\uFF0C\u4EE5\u53CA voices \u7684\u5168\u90E8\u4EBA\u58F0\u4E0E\u89C6\u9891\u6700\u540E\u5341\u79D2\u3002
15790
15886
 
15791
15887
  ${ctx}`;
15792
15888
  }