@lingjingai/scriptctl 0.62.1 → 0.62.3

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.
@@ -0,0 +1,3 @@
1
+ # 0.62.2 Internal release
2
+
3
+ Based on the complete published 0.62.1 package. Ingest source fixes: 39b1cfe. Preserves refs and review-agent functionality. Unifies state identity names and constrains/retries invalid video candidates within the existing two-attempt budget.
@@ -0,0 +1,4 @@
1
+ # 0.62.3
2
+
3
+ - 梗概、文本整理与结构化文本任务遇到明确的内容审核拒绝时,使用已配置的豆包 Pro Ark Responses 端点兜底。
4
+ - 保持原始文本、结构化 Schema、取消信号及每条实际模型线路的 token 与调用成本记录。
package/dist/bin.js CHANGED
@@ -1043,7 +1043,7 @@ var AnthropicModel = class {
1043
1043
  }
1044
1044
  };
1045
1045
 
1046
- // src/infra/llm/doubao-video-model.ts
1046
+ // src/infra/llm/doubao-model.ts
1047
1047
  import * as fs7 from "node:fs";
1048
1048
  import * as path7 from "node:path";
1049
1049
  import { File } from "node:buffer";
@@ -1173,7 +1173,7 @@ function httpError(status, message2, detail, context = {}) {
1173
1173
  });
1174
1174
  }
1175
1175
 
1176
- // src/infra/llm/doubao-video-model.ts
1176
+ // src/infra/llm/doubao-model.ts
1177
1177
  var POLL_INTERVAL_MS = 2e3;
1178
1178
  function delay2(ms) {
1179
1179
  return new Promise((resolve19) => setTimeout(resolve19, ms));
@@ -1203,7 +1203,7 @@ function extractText(res) {
1203
1203
  }
1204
1204
  return parts.join("").trim();
1205
1205
  }
1206
- var DoubaoVideoModel = class {
1206
+ var DoubaoModel = class {
1207
1207
  constructor(model, timeoutMs, maxAttempts, apiKey, baseUrl, client) {
1208
1208
  this.model = model;
1209
1209
  this.timeoutMs = timeoutMs;
@@ -1278,12 +1278,45 @@ var DoubaoVideoModel = class {
1278
1278
  if (request2.responseJsonSchema) {
1279
1279
  params["text"] = { format: { type: "json_schema", name: "video_serial", schema: request2.responseJsonSchema } };
1280
1280
  }
1281
+ return this.generateResponse(params, request2.signal, Boolean(request2.responseJsonSchema));
1282
+ }
1283
+ async generateText(request2) {
1284
+ const params = this.textParams(request2);
1285
+ if (request2.responseFormat) params["text"] = { format: { type: request2.responseFormat } };
1286
+ return this.generateResponse(params, request2.signal, Boolean(request2.responseFormat));
1287
+ }
1288
+ async generateTool(request2) {
1289
+ const params = this.textParams(request2);
1290
+ params["text"] = { format: {
1291
+ type: "json_schema",
1292
+ name: request2.tool.name,
1293
+ description: request2.tool.description,
1294
+ schema: request2.tool.inputSchema
1295
+ } };
1296
+ const response = await this.generateResponse(params, request2.signal, true);
1297
+ return {
1298
+ input: JSON.parse(response.text),
1299
+ finishReason: response.finishReason,
1300
+ attempts: response.attempts,
1301
+ usage: response.usage,
1302
+ raw: response.raw
1303
+ };
1304
+ }
1305
+ textParams(request2) {
1306
+ return {
1307
+ model: this.model,
1308
+ max_output_tokens: request2.maxOutputTokens,
1309
+ instructions: request2.system,
1310
+ input: [{ role: "user", content: [{ type: "input_text", text: request2.user }] }]
1311
+ };
1312
+ }
1313
+ async generateResponse(params, signal, structured) {
1281
1314
  const { value, attempts, failedUsage } = await withTransientRetry(this.maxAttempts, async () => {
1282
1315
  let res;
1283
1316
  try {
1284
- res = await this.client.createResponse(params, request2.signal);
1317
+ res = await this.client.createResponse(params, signal);
1285
1318
  } catch (error) {
1286
- throw toArkError(error, request2.signal, "generate", this.model);
1319
+ throw toArkError(error, signal, "generate", this.model);
1287
1320
  }
1288
1321
  const status = (res.status ?? "").toLowerCase();
1289
1322
  const usage = arkUsage(res.usage);
@@ -1294,11 +1327,11 @@ var DoubaoVideoModel = class {
1294
1327
  }
1295
1328
  const text2 = extractText(res);
1296
1329
  if (!text2) throw new LlmTransportError("empty_response", "Doubao returned an empty response.", { retryable: true, usage });
1297
- if (request2.responseJsonSchema) {
1330
+ if (structured) {
1298
1331
  try {
1299
1332
  JSON.parse(text2);
1300
1333
  } catch {
1301
- throw new LlmTransportError("invalid_response", "Doubao returned malformed JSON for a structured video response.", {
1334
+ throw new LlmTransportError("invalid_response", "Doubao returned malformed JSON for a structured response.", {
1302
1335
  retryable: true,
1303
1336
  usage,
1304
1337
  context: { provider: "doubao", model: this.model, operation: "generate" }
@@ -2457,6 +2490,12 @@ var ModelRouter = class {
2457
2490
  // Resolve an explicit Doubao route or the default fallback; absent fallback credentials skip it.
2458
2491
  // Overridable in tests to inject a fake Ark client.
2459
2492
  doubaoAdapter(route) {
2493
+ return this.arkAdapter(route);
2494
+ }
2495
+ doubaoTextAdapter() {
2496
+ return this.arkAdapter();
2497
+ }
2498
+ arkAdapter(route) {
2460
2499
  const apiKey = route ? this.videoCredential(route) : (process.env[DOUBAO_FALLBACK.apiKeyEnv] ?? "").trim();
2461
2500
  if (!apiKey) return null;
2462
2501
  const model = route?.info.model ?? this.doubaoModel();
@@ -2464,7 +2503,7 @@ var ModelRouter = class {
2464
2503
  const key = `doubao ${baseUrl} ${model}`;
2465
2504
  const cached2 = this.doubaoAdapters.get(key);
2466
2505
  if (cached2) return cached2;
2467
- const adapter = new DoubaoVideoModel(model, DOUBAO_FALLBACK.timeoutMs, DOUBAO_FALLBACK.maxAttempts, apiKey, baseUrl);
2506
+ const adapter = new DoubaoModel(model, DOUBAO_FALLBACK.timeoutMs, DOUBAO_FALLBACK.maxAttempts, apiKey, baseUrl);
2468
2507
  this.doubaoAdapters.set(key, adapter);
2469
2508
  return adapter;
2470
2509
  }
@@ -2472,19 +2511,29 @@ var ModelRouter = class {
2472
2511
  doubaoModel() {
2473
2512
  return (process.env[DOUBAO_FALLBACK.modelEnv] ?? "").trim() || DOUBAO_FALLBACK.model;
2474
2513
  }
2514
+ async withModerationFallback(task, signal, generate) {
2515
+ const route = this.resolve(task);
2516
+ const adapter = this.adapter(route);
2517
+ try {
2518
+ return await this.tracked(route.info, () => generate(adapter));
2519
+ } catch (error) {
2520
+ if (signal?.aborted || !(error instanceof LlmTransportError) || error.code !== "content_filtered") throw error;
2521
+ const doubao = this.doubaoTextAdapter();
2522
+ if (!doubao) throw error;
2523
+ process.stderr.write(`\u21AA\uFE0F \u6587\u672C\u5185\u5BB9\u5BA1\u6838\u62D2\u7EDD\uFF0C\u56DE\u9000\u5230\u8C46\u5305 ${this.doubaoModel()}
2524
+ `);
2525
+ return this.tracked(this.doubaoRoute(task), () => generate(doubao));
2526
+ }
2527
+ }
2475
2528
  async generateText(task, request2) {
2476
2529
  const spec2 = LLM_TASK_REGISTRY[task];
2477
2530
  if (spec2.mode !== "text") throw configRuntimeError("The task does not support text generation.", ["text task"], [`task: ${task}`]);
2478
- const route = this.resolve(task);
2479
- const adapter = this.adapter(route);
2480
- return this.tracked(route.info, () => adapter.generateText({ ...request2, maxOutputTokens: spec2.maxOutputTokens }));
2531
+ return this.withModerationFallback(task, request2.signal, (adapter) => adapter.generateText({ ...request2, maxOutputTokens: spec2.maxOutputTokens }));
2481
2532
  }
2482
2533
  async generateTool(task, request2) {
2483
2534
  const spec2 = LLM_TASK_REGISTRY[task];
2484
2535
  if (spec2.mode !== "tool") throw configRuntimeError("The task does not support tool generation.", ["tool task"], [`task: ${task}`]);
2485
- const route = this.resolve(task);
2486
- const adapter = this.adapter(route);
2487
- return this.tracked(route.info, () => adapter.generateTool({ ...request2, maxOutputTokens: spec2.maxOutputTokens }));
2536
+ return this.withModerationFallback(task, request2.signal, (adapter) => adapter.generateTool({ ...request2, maxOutputTokens: spec2.maxOutputTokens }));
2488
2537
  }
2489
2538
  };
2490
2539
  function createLlmExecutor(explicitConfigPath, options) {
@@ -5922,6 +5971,9 @@ var PRODUCTION_LLM_COMPOSITION = {
5922
5971
  import * as fs19 from "node:fs";
5923
5972
  import * as path13 from "node:path";
5924
5973
 
5974
+ // src/domain/ingest/state-identity.ts
5975
+ var stateIdentityName = (name) => name.normalize("NFC").replace(/\s+/g, " ").trim().toLowerCase();
5976
+
5925
5977
  // src/domain/ingest/assembler.ts
5926
5978
  var pad = (n) => String(n).padStart(3, "0");
5927
5979
  var norm = (s) => s.normalize("NFC").replace(/\s+/g, " ").trim();
@@ -6042,8 +6094,8 @@ var Registry = class {
6042
6094
  return a;
6043
6095
  }
6044
6096
  stateId(a, state2) {
6045
- const key = norm(state2);
6046
- const existing = a.states.find((s) => norm(s.name) === key);
6097
+ const key = stateIdentityName(state2);
6098
+ const existing = a.states.find((s) => stateIdentityName(s.name) === key);
6047
6099
  if (existing) return existing.id;
6048
6100
  const id = this.nextStateId();
6049
6101
  a.states.push({ name: state2, id });
@@ -8207,6 +8259,7 @@ var VIDEO_SERIAL_SCHEMA = {
8207
8259
  synopsis: { type: "string", description: "\u672C\u96C6\u5267\u60C5\u6897\u6982\uFF0C\u6309\u53D1\u751F\u987A\u5E8F\uFF0C200-300 \u5B57\u7EAF\u6587\u672C" },
8208
8260
  scenes: {
8209
8261
  type: "array",
8262
+ minItems: 1,
8210
8263
  description: "\u672C\u96C6\u6240\u6709\u573A\u666F\u5355\u5143\uFF0C\u6309\u65F6\u95F4\u987A\u5E8F\u6392\u5217\u3002\u573A\u5185\u5C3D\u91CF\u5FE0\u5B9E\u8FD8\u539F\u539F\u7247\u5206\u955C\uFF1A\u6BCF\u6B21\u5207\u955C\u3001\u8FDE\u7EED\u955C\u5934\u5185\u7684\u6444\u5F71\u53D8\u5316\u3001\u53EF\u89C1\u8868\u6F14\u548C\u58F0\u97F3\u4E8B\u4EF6\u6309\u5B9E\u9645\u65F6\u95F4\u4EA4\u9519\u4FDD\u7559\uFF0C\u91CD\u590D\u955C\u5934\u4E5F\u4E0D\u53BB\u91CD\uFF1B\u5730\u70B9\u3001\u660E\u663E\u65F6\u6BB5\u6216\u53D9\u4E8B\u7EBF\u53D8\u5316\u65F6\u62C6\u573A\uFF0C\u666E\u901A\u5207\u955C\u4E0D\u5355\u72EC\u62C6 scene\uFF1B\u540C\u4E00\u8FDE\u7EED\u573A\u5185\u7684\u4EBA\u7269\u9020\u578B\u53D8\u5316\u4FDD\u7559\u5728\u540C\u4E00\u573A\uFF1B\u8DE8\u5730\u70B9\u8499\u592A\u5947\u62C6\u6210\u591A\u4E2A\u77ED\u573A",
8211
8264
  items: {
8212
8265
  type: "object",
@@ -10176,7 +10229,7 @@ function upsertState(states, incoming, overwrite) {
10176
10229
  const name = incoming.name.trim();
10177
10230
  if (!name) return;
10178
10231
  const description = incoming.description.trim();
10179
- const existing = states.find((state2) => norm4(state2.name) === norm4(name));
10232
+ const existing = states.find((state2) => stateIdentityName(state2.name) === stateIdentityName(name));
10180
10233
  if (!existing) {
10181
10234
  states.push({ name, description });
10182
10235
  return;
@@ -10437,7 +10490,7 @@ function stampRegistryMetadata(script, registry) {
10437
10490
  const description = entity.kind === "actor" ? actorAssetDescription(entity) : [entity.appearance, entity.role].map((part) => (part?.trim() ?? "").replace(/[。;]+$/, "")).filter(Boolean).join("\uFF1B");
10438
10491
  if (description) a.description = `${description}\u3002`;
10439
10492
  for (const state2 of a.states ?? []) {
10440
- const registryState = entity.states.find((candidate) => norm4(candidate.name) === norm4(state2.state_name));
10493
+ const registryState = entity.states.find((candidate) => stateIdentityName(candidate.name) === stateIdentityName(state2.state_name));
10441
10494
  if (registryState?.description) state2.description = registryState.description;
10442
10495
  else if (state2.state_name === "default" && entity.kind !== "actor" && entity.appearance) state2.description = entity.appearance;
10443
10496
  }
@@ -11152,7 +11205,7 @@ async function withIngestWorkspaceLock(workspacePath, operation) {
11152
11205
  }
11153
11206
 
11154
11207
  // src/llm/tasks/ingest/video-serial.ts
11155
- 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\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";
11208
+ 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";
11156
11209
  function buildSerialUser(episodeNo, contextText) {
11157
11210
  const ctx = contextText.trim() ? `========== \u5DF2\u77E5\u8BBE\u5B9A\uFF08\u5230\u4E0A\u4E00\u96C6\u4E3A\u6B62\uFF0C\u89C4\u8303\u540D\u4EE5\u6B64\u4E3A\u51C6\uFF09 ==========
11158
11211
  ${contextText}
@@ -11439,7 +11492,7 @@ function failureFromError(error) {
11439
11492
  return { failure: error.failure, attempts: error.modelFailures };
11440
11493
  }
11441
11494
  if (error instanceof CliError) {
11442
- const retryable = error.errorCode === "INGEST_VALIDATION_FAILED";
11495
+ const retryable = error.errorCode === "INGEST_VALIDATION_FAILED" || error.errorCode === "INGEST_VIDEO_SERIAL_FAILED";
11443
11496
  return {
11444
11497
  failure: createOperationalFailure(classificationForCliError(error), {
11445
11498
  retryable,
@@ -11866,7 +11919,7 @@ function videoIdentityKeys(assets, registry) {
11866
11919
  state2[asset2.provisional_id] = Object.fromEntries(
11867
11920
  asset2.states.map((state3) => [
11868
11921
  state3.id,
11869
- `${key}:state:${identityNorm(state3.name)}`
11922
+ `${key}:state:${stateIdentityName(state3.name)}`
11870
11923
  ])
11871
11924
  );
11872
11925
  }
@@ -12062,15 +12115,24 @@ async function runVideoIngestUnlocked(opts) {
12062
12115
  );
12063
12116
  let generationContext = ctxMd;
12064
12117
  for (let attempt = 1; attempt <= VIDEO_VALIDATION_ATTEMPTS; attempt++) {
12065
- const generated = await runVideoSerial(
12066
- port,
12067
- media,
12068
- e.episode,
12069
- generationContext,
12070
- fps,
12071
- sig,
12072
- { path: enc.path, mime: enc.mime }
12073
- );
12118
+ let generated;
12119
+ try {
12120
+ generated = await runVideoSerial(
12121
+ port,
12122
+ media,
12123
+ e.episode,
12124
+ generationContext,
12125
+ fps,
12126
+ sig,
12127
+ { path: enc.path, mime: enc.mime }
12128
+ );
12129
+ } catch (error) {
12130
+ if (!(error instanceof CliError) || error.errorCode !== "INGEST_VIDEO_SERIAL_FAILED" || attempt === VIDEO_VALIDATION_ATTEMPTS) throw error;
12131
+ generationContext = `${ctxMd}
12132
+
12133
+ \u4E0A\u4E00\u6B21\u8F93\u51FA\u672A\u88AB\u63A5\u53D7\uFF0C\u4E5F\u672A\u63A8\u8FDB checkpoint\uFF1A${error.message}\u3002\u8BF7\u91CD\u65B0\u89C2\u770B\u5F53\u524D\u96C6\uFF0C\u53EA\u6309\u89C6\u9891\u4E8B\u5B9E\u8FD4\u56DE\u7B26\u5408 schema \u7684\u5B8C\u6574 JSON\uFF0Cscenes \u81F3\u5C11\u5305\u542B\u4E00\u4E2A\u5B9E\u9645\u573A\u666F\uFF1B\u4E0D\u8981\u53EA\u5199\u6897\u6982\u6216\u8BBE\u5B9A\u589E\u91CF\u3002`;
12134
+ continue;
12135
+ }
12074
12136
  const candidateDoc = deltaToDoc(generated.output, e.episode);
12075
12137
  const candidateContext = structuredClone(ctx);
12076
12138
  applyDelta2(candidateContext, generated.output, e.episode);