From e949277899c95aaabb8c8c3d8a10c8d22c51b27d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ACT=E4=B8=B6=E6=B5=81=E6=98=9F=E9=9B=A8?= <1340145680@qq.com> Date: Thu, 26 Mar 2026 11:34:56 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=AB=E6=AD=A3=E5=91=BD=E5=90=8D=E8=A7=84?= =?UTF-8?q?=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/skills/production_agent_execution.md | 8 +- ...ptation-format.md => adaptation_format.md} | 0 data/skills/references/cooke.md | 77 +++++++++++++++++++ ...raction.md => derive_assets_extraction.md} | 0 .../{event-extract.md => event_extract.md} | 2 +- .../{event-format.md => event_format.md} | 0 ...-extract.md => novel_character_extract.md} | 2 +- ...rops-extract.md => novel_props_extract.md} | 2 +- ...cene-extract.md => novel_scene_extract.md} | 2 +- ...uality-criteria.md => quality_criteria.md} | 0 .../{script-format.md => script_format.md} | 0 ...{skeleton-format.md => skeleton_format.md} | 0 ...generation.md => storyboard_generation.md} | 4 +- ...e-extract.md => video_dialogue_extract.md} | 2 +- data/skills/script_agent_execution.md | 8 +- data/skills/script_agent_supervision.md | 2 +- data/skills/universal_agent.md | 22 +++--- skillList.json | 10 +-- src/agents/productionAgent/tools.ts | 2 +- src/lib/initDB.ts | 64 +++++++-------- src/router.ts | 52 ++++++++----- src/routes/production/getFlowData.ts | 2 + src/routes/script/getScrptApi.ts | 7 +- src/routes/test/test.ts | 2 +- src/types/database.d.ts | 3 +- src/utils/agent/skillsTools.ts | 2 + 26 files changed, 184 insertions(+), 91 deletions(-) rename data/skills/references/{adaptation-format.md => adaptation_format.md} (100%) create mode 100644 data/skills/references/cooke.md rename data/skills/references/{derive-assets-extraction.md => derive_assets_extraction.md} (100%) rename data/skills/references/{event-extract.md => event_extract.md} (99%) rename data/skills/references/{event-format.md => event_format.md} (100%) rename data/skills/references/{novel-character-extract.md => novel_character_extract.md} (99%) rename data/skills/references/{novel-props-extract.md => novel_props_extract.md} (99%) rename data/skills/references/{novel-scene-extract.md => novel_scene_extract.md} (99%) rename data/skills/references/{quality-criteria.md => quality_criteria.md} (100%) rename data/skills/references/{script-format.md => script_format.md} (100%) rename data/skills/references/{skeleton-format.md => skeleton_format.md} (100%) rename data/skills/references/{storyboard-generation.md => storyboard_generation.md} (98%) rename data/skills/references/{video-dialogue-extract.md => video_dialogue_extract.md} (99%) diff --git a/data/skills/production_agent_execution.md b/data/skills/production_agent_execution.md index 770a378..2c4a31c 100644 --- a/data/skills/production_agent_execution.md +++ b/data/skills/production_agent_execution.md @@ -21,7 +21,7 @@ description: > ### 提取衍生资产流程 1. 调用 `get_flowData` 分别获取 `script`(剧本)和 `assets`(现有资产列表) -2. 根据[衍生资产提取](references/derive-assets-extraction.md)文档中的提取原则,分析剧本内容,为每个角色资产识别出关联的衍生资产(道具、服饰、法器、座驾、场景物件等) +2. 根据[衍生资产提取](references/derive_assets_extraction.md)文档中的提取原则,分析剧本内容,为每个角色资产识别出关联的衍生资产(道具、服饰、法器、座驾、场景物件等) 3. 对每个有衍生状态的资产调用 `set_flowData_assets` 保存 4. 告知用户提取完成,列出为每个角色提取的衍生资产概要 5. **询问用户是否需要生成衍生资产图片**: @@ -32,7 +32,7 @@ description: > ### 生成分镜表流程 1. 调用 `get_flowData` 分别获取 `script`(剧本)和 `assets`(现有资产列表) -2. 根据[分镜表生成](references/storyboard-generation.md)文档中的拆分原则和字段填写指引,将剧本拆分为分镜,填写每条分镜的所有字段(id、title、description、camera、duration、frameMode、prompt、lines、sound、associateAssetsIds) +2. 根据[分镜表生成](references/storyboard_generation.md)文档中的拆分原则和字段填写指引,将剧本拆分为分镜,填写每条分镜的所有字段(id、title、description、camera、duration、frameMode、prompt、lines、sound、associateAssetsIds) 3. 调用 `set_flowData({ key: "storyboard", value: 分镜数组 })` 一次性保存完整分镜表 4. 告知用户分镜表生成完成,列出分镜概要(总条数、主要场景) 5. **询问用户是否需要生成分镜图片**: @@ -43,7 +43,7 @@ description: > 本技能附带以下参考资料,根据任务需要使用 `read_skill_file` 工具按需加载: -- [衍生资产提取](references/derive-assets-extraction.md) — 从剧本和角色资产中提取衍生资产的原则和示例 -- [分镜表生成](references/storyboard-generation.md) — 从剧本和资产生成分镜表的拆分原则、字段规范和示例 +- [衍生资产提取](references/derive_assets_extraction.md) — 从剧本和角色资产中提取衍生资产的原则和示例 +- [分镜表生成](references/storyboard_generation.md) — 从剧本和资产生成分镜表的拆分原则、字段规范和示例 **注意**:根据用户当前任务选择性加载对应参考资料,不要一次性全部加载。 diff --git a/data/skills/references/adaptation-format.md b/data/skills/references/adaptation_format.md similarity index 100% rename from data/skills/references/adaptation-format.md rename to data/skills/references/adaptation_format.md diff --git a/data/skills/references/cooke.md b/data/skills/references/cooke.md new file mode 100644 index 0000000..712bc09 --- /dev/null +++ b/data/skills/references/cooke.md @@ -0,0 +1,77 @@ +# 烤龙肉的做法 + +## 前言 + +龙肉,作为幻想世界中最珍贵的食材之一,其烹饪方法自古以来就是冒险者和宫廷厨师们追求的终极秘技。以下是一份经典的烤龙肉食谱。 + +--- + +## 食材准备 + +| 食材 | 用量 | 备注 | +|------|------|------| +| 龙肉(里脊或腿肉) | 2公斤 | 需提前放血处理 | +| 龙息椒粉 | 2大勺 | 普通辣椒粉可替代 | +| 凤凰蛋黄 | 3个 | 鸡蛋黄可替代 | +| 精灵橄榄油 | 100毫升 | 特级初榨橄榄油可替代 | +| 矮人黑盐 | 适量 | 海盐可替代 | +| 迷迭香、百里香 | 各一把 | 新鲜为佳 | +| 蒜头 | 8瓣 | 拍碎 | +| 蜂蜜 | 3大勺 | 用于表面刷酱 | + +--- + +## 烹饪步骤 + +### 第一步:腌制龙肉(需提前一天) + +1. 将龙肉洗净,用厨房纸巾吸干表面水分 +2. 用锋利的刀在肉面划几道深约1厘米的斜纹,便于入味 +3. 将蛋黄、橄榄油、龙息椒粉、黑盐混合,调成腌料 +4. 均匀涂抹在龙肉表面,放入密封容器 +5. 冷藏腌制12-24小时 + +### 第二步:准备香草束 + +1. 将迷迭香、百里香捆扎成束 +2. 蒜瓣拍碎备用 +3. 准备好蜂蜜刷酱 + +### 第三步:烤制 + +1. **预热烤炉**:将烤炉预热至220°C(若使用龙焰烤炉,调至"青龙"档位) + +2. **初次高温烤制**: + - 将腌制好的龙肉放入烤盘 + - 铺上香草束和蒜瓣 + - 220°C烤制20分钟,封住肉汁 + +3. **转中温慢烤**: + - 温度降至160°C + - 每隔20分钟翻面一次,并刷上蜂蜜 + - 继续烤制约1.5-2小时(视肉块大小调整) + +4. **检验熟度**: + - 用探针温度计测量中心温度达65°C为五分熟 + - 达75°C为全熟 + - 龙肉建议七分熟(约70°C),口感最佳 + +### 第四步:静置与切片 + +1. 出炉后用锡纸包裹,静置15分钟 +2. 逆着纹理切成1厘米厚的片状 +3. 摆盘,淋上烤盘中的肉汁 + +--- + +## 小贴士 + +- ⚠️ **安全提示**:处理龙肉时请佩戴防火手套,残余龙息可能引发灼伤 +- 🍷 **搭配推荐**:建议搭配精灵白葡萄酒或矮人麦芽啤酒 +- 🔥 若龙肉带有冰属性(如霜龙),烤制时间需延长30% + +--- + +## 成品效果 + +外皮金黄酥脆,内部肉质鲜嫩多汁,带有独特的硫磺香气与蜂蜜的甜润,回味中隐约有龙息的微辣感。 \ No newline at end of file diff --git a/data/skills/references/derive-assets-extraction.md b/data/skills/references/derive_assets_extraction.md similarity index 100% rename from data/skills/references/derive-assets-extraction.md rename to data/skills/references/derive_assets_extraction.md diff --git a/data/skills/references/event-extract.md b/data/skills/references/event_extract.md similarity index 99% rename from data/skills/references/event-extract.md rename to data/skills/references/event_extract.md index 628c03f..1c74f41 100644 --- a/data/skills/references/event-extract.md +++ b/data/skills/references/event_extract.md @@ -1,5 +1,5 @@ --- -name: universal-agent +name: universal_agent description: 专注于从小说原文中提取结构化事件信息的助手。 --- diff --git a/data/skills/references/event-format.md b/data/skills/references/event_format.md similarity index 100% rename from data/skills/references/event-format.md rename to data/skills/references/event_format.md diff --git a/data/skills/references/novel-character-extract.md b/data/skills/references/novel_character_extract.md similarity index 99% rename from data/skills/references/novel-character-extract.md rename to data/skills/references/novel_character_extract.md index 8731b37..c536951 100644 --- a/data/skills/references/novel-character-extract.md +++ b/data/skills/references/novel_character_extract.md @@ -1,5 +1,5 @@ --- -name: universal-agent +name: universal_agent description: 专注于从小说原文中提取角色信息并生成视觉化角色描述的助手。 --- diff --git a/data/skills/references/novel-props-extract.md b/data/skills/references/novel_props_extract.md similarity index 99% rename from data/skills/references/novel-props-extract.md rename to data/skills/references/novel_props_extract.md index bc3055a..5c9addd 100644 --- a/data/skills/references/novel-props-extract.md +++ b/data/skills/references/novel_props_extract.md @@ -1,5 +1,5 @@ --- -name: universal-agent +name: universal_agent description: 专注于从小说原文中提取道具物品信息并生成视觉化描述的助手。 --- diff --git a/data/skills/references/novel-scene-extract.md b/data/skills/references/novel_scene_extract.md similarity index 99% rename from data/skills/references/novel-scene-extract.md rename to data/skills/references/novel_scene_extract.md index 7d66444..1486f21 100644 --- a/data/skills/references/novel-scene-extract.md +++ b/data/skills/references/novel_scene_extract.md @@ -1,5 +1,5 @@ --- -name: universal-agent +name: universal_agent description: 专注于从小说原文中提取场景信息并生成视觉化场景描述的助手。 --- diff --git a/data/skills/references/quality-criteria.md b/data/skills/references/quality_criteria.md similarity index 100% rename from data/skills/references/quality-criteria.md rename to data/skills/references/quality_criteria.md diff --git a/data/skills/references/script-format.md b/data/skills/references/script_format.md similarity index 100% rename from data/skills/references/script-format.md rename to data/skills/references/script_format.md diff --git a/data/skills/references/skeleton-format.md b/data/skills/references/skeleton_format.md similarity index 100% rename from data/skills/references/skeleton-format.md rename to data/skills/references/skeleton_format.md diff --git a/data/skills/references/storyboard-generation.md b/data/skills/references/storyboard_generation.md similarity index 98% rename from data/skills/references/storyboard-generation.md rename to data/skills/references/storyboard_generation.md index 18bfd62..3bd98e2 100644 --- a/data/skills/references/storyboard-generation.md +++ b/data/skills/references/storyboard_generation.md @@ -206,7 +206,7 @@ set_flowData({ camera: "中景 · 缓慢推进", duration: 3, frameMode: "endFrame", - prompt: "A white-haired young man in white robes kneeling on the floor, spitting blood, trembling body, pale face, dramatic lighting, cinematic composition", + prompt: "A white_haired young man in white robes kneeling on the floor, spitting blood, trembling body, pale face, dramatic lighting, cinematic composition", lines: null, sound: "喷血声", associateAssetsIds: [0] @@ -218,7 +218,7 @@ set_flowData({ camera: "大特写", duration: 3, frameMode: "firstFrame", - prompt: "Close-up of a jade token with glowing runes fading, fine cracks appearing on the surface, dark moody lighting, cinematic detail shot", + prompt: "Close_up of a jade token with glowing runes fading, fine cracks appearing on the surface, dark moody lighting, cinematic detail shot", lines: null, sound: "玉石碎裂声", associateAssetsIds: [2] diff --git a/data/skills/references/video-dialogue-extract.md b/data/skills/references/video_dialogue_extract.md similarity index 99% rename from data/skills/references/video-dialogue-extract.md rename to data/skills/references/video_dialogue_extract.md index 0f5e19d..1baf004 100644 --- a/data/skills/references/video-dialogue-extract.md +++ b/data/skills/references/video_dialogue_extract.md @@ -1,5 +1,5 @@ --- -name: universal-agent +name: universal_agent description: 专注于从视频分镜提示词中提取结构化台词、旁白与音效信息的助手。 --- diff --git a/data/skills/script_agent_execution.md b/data/skills/script_agent_execution.md index 16c7567..2375fb4 100644 --- a/data/skills/script_agent_execution.md +++ b/data/skills/script_agent_execution.md @@ -77,7 +77,7 @@ const planData = { 4. 生成汇总统计(总章节、强主线章节数、可压缩章节、预估总时长、目标时长、压缩比) 5. 输出 Markdown 表格格式的事件表,作为后续任务上下文(不写入 planData) -**输出格式**:参考 [event-format.md](references/event-format.md) +**输出格式**:参考 [event_format.md](references/event_format.md) **关键原则**: - 核心事件描述必须包含**动作**和**结果**,不能只写状态 @@ -115,7 +115,7 @@ const planData = { 7. 设计付费卡点(位置、内容、钩子类型) 8. 调用 `set_planData_storySkeleton` 保存 -**输出格式**:参考 [skeleton-format.md](references/skeleton-format.md) +**输出格式**:参考 [skeleton_format.md](references/skeleton_format.md) **关键约束**: - 总时长 = 【项目配置】中的集数 × 单集时长 @@ -145,7 +145,7 @@ const planData = { - 角色态度作为世界观锚点 5. 调用 `set_planData_adaptationStrategy` 保存 -**输出格式**:参考 [adaptation-format.md](references/adaptation-format.md) +**输出格式**:参考 [adaptation_format.md](references/adaptation_format.md) **关键原则**: - 故事核优先:主角是"被定义为疯子却选择活下去的人",所有决策服务于此弧线 @@ -179,7 +179,7 @@ const planData = { - 表演指示(情绪、动作细节) 6. 仅当指令中包含 `用户已确认写入SQL: 是` 时,调用 `insert_script_to_sqlite` 写入剧本 -**输出格式**:参考 [script-format.md](references/script-format.md) +**输出格式**:参考 [script_format.md](references/script_format.md) **关键约束**: - 单集总时长严格控制在【项目配置】指定的单集时长 ±10秒 diff --git a/data/skills/script_agent_supervision.md b/data/skills/script_agent_supervision.md index 1fca5b8..38b48d6 100644 --- a/data/skills/script_agent_supervision.md +++ b/data/skills/script_agent_supervision.md @@ -84,7 +84,7 @@ description: >- | 转场标注 | 节拍间转场方式明确 | 轻微 | | 情绪连贯 | 节拍间情绪过渡自然 | 中等 | -详细审核标准请参考 [quality-criteria.md](references/quality-criteria.md)。 +详细审核标准请参考 [quality_criteria.md](references/quality_criteria.md)。 ## 审核报告格式 diff --git a/data/skills/universal_agent.md b/data/skills/universal_agent.md index 32fcc5e..65efb41 100644 --- a/data/skills/universal_agent.md +++ b/data/skills/universal_agent.md @@ -1,5 +1,5 @@ --- -name: universal-agent +name: universal_agent description: 通用文本分析与内容提取 Agent,支持小说事件提取、视频台词提取、角色/场景/道具资产描述生成等多种结构化内容处理任务。 --- @@ -11,36 +11,36 @@ description: 通用文本分析与内容提取 Agent,支持小说事件提取 你拥有以下参考技能(references),根据用户请求自动匹配对应技能执行: -### 1. 小说章节事件提取(event-extract) +### 1. 小说章节事件提取(event_extract) - **触发条件**:用户提供小说原文,要求提取章节事件、生成事件表 -- **参考文件**:`references/event-extract.md` +- **参考文件**:`references/event_extract.md` - **输出**:结构化事件表格(章节、角色、核心事件、主线关系、信息密度、预估集长、情绪强度)+ 汇总统计 -### 2. 视频提示词台词提取(video-dialogue-extract) +### 2. 视频提示词台词提取(video_dialogue_extract) - **触发条件**:用户提供视频分镜提示词/画面描述,要求从中提取或还原台词、旁白、音效文本 -- **参考文件**:`references/video-dialogue-extract.md` +- **参考文件**:`references/video_dialogue_extract.md` - **输出**:结构化台词表(镜号、角色、台词内容、台词类型、情绪标注、时长估算) -### 3. 小说角色提取(novel-character-extract) +### 3. 小说角色提取(novel_character_extract) - **触发条件**:用户提供小说原文,要求提取角色信息、生成角色视觉描述 -- **参考文件**:`references/novel-character-extract.md` +- **参考文件**:`references/novel_character_extract.md` - **资产类型**:`role`(对应 `o_assets.type = "role"`) - **输出**:结构化角色资产表(角色名称、角色定位、外貌特征、服饰描述、体型体态、标志性特征、性格气质、首次出场、出场章节数、状态变体)+ 核心角色卡片 -### 4. 小说场景提取(novel-scene-extract) +### 4. 小说场景提取(novel_scene_extract) - **触发条件**:用户提供小说原文,要求提取场景/地点信息、生成场景视觉描述 -- **参考文件**:`references/novel-scene-extract.md` +- **参考文件**:`references/novel_scene_extract.md` - **资产类型**:`scene`(对应 `o_assets.type = "scene"`) - **输出**:结构化场景资产表(场景名称、场景类型、空间描述、光照氛围、关键陈设、色调基调、首次出场、出场章节数、关联角色、状态变体)+ 核心场景卡片 -### 5. 小说道具提取(novel-props-extract) +### 5. 小说道具提取(novel_props_extract) - **触发条件**:用户提供小说原文,要求提取道具/物品/器物信息、生成道具视觉描述 -- **参考文件**:`references/novel-props-extract.md` +- **参考文件**:`references/novel_props_extract.md` - **资产类型**:`tool`(对应 `o_assets.type = "tool"`) - **输出**:结构化道具资产表(道具名称、类别、外观描述、尺寸参考、材质质感、功能/用途、首次出场、关联角色、状态变体)+ 高频道具排名 diff --git a/skillList.json b/skillList.json index 563d0de..99be541 100644 --- a/skillList.json +++ b/skillList.json @@ -1,23 +1,23 @@ [ { "skillId": "52c51fa8655f899a1b7aae9b6aad7251", - "attribution": "universal-agent.md" + "attribution": "universal_agent.md" }, { "skillId": "6d46cdca10b2f49e07e515885d1387a0", - "attribution": "universal-agent.md" + "attribution": "universal_agent.md" }, { "skillId": "1864df75d1d65f76e275046649ecaef8", - "attribution": "universal-agent.md" + "attribution": "universal_agent.md" }, { "skillId": "3e5efec258c8d8e6a39bcef12f8ee058", - "attribution": "universal-agent.md" + "attribution": "universal_agent.md" }, { "skillId": "7fbce6f90d7d85496ba9817e9622e640", - "attribution": "universal-agent.md" + "attribution": "universal_agent.md" }, { "skillId": "31fb5c5a1f514ec1e66b4eba9f22d4db", diff --git a/src/agents/productionAgent/tools.ts b/src/agents/productionAgent/tools.ts index 17a842a..64f6b8f 100644 --- a/src/agents/productionAgent/tools.ts +++ b/src/agents/productionAgent/tools.ts @@ -492,7 +492,7 @@ export default (resTool: ResTool, toolsNames?: string[]) => { resTool.systemMessage(`图片生成调度计划:共 ${levels.length} 层,${images.length} 张图片`); // --- 准备公共数据 --- - const skill = await useSkill("universal-agent"); + const skill = await useSkill("universal_agent.md"); const projectData = await u.db("o_project").where("id", resTool.data.projectId).select("videoRatio").first(); const imageModel = resTool.data.imageModel; diff --git a/src/lib/initDB.ts b/src/lib/initDB.ts index a6fd40d..db6799d 100644 --- a/src/lib/initDB.ts +++ b/src/lib/initDB.ts @@ -522,8 +522,8 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => { id: "a1e818cc03a0b355b239ac1fb0512969", md5: "1fd22029e8047aa30b0dfd703cb837ed", - path: "universal-agent.md", - name: "universal-agent", + path: "universal_agent.md", + name: "universal_agent", description: "", embedding: "", type: "main", @@ -534,8 +534,8 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => { id: "3e5efec258c8d8e6a39bcef12f8ee058", md5: "efccb0464cfd472861b49ebf737d4820", - path: "references/event-extract.md", - name: "event-extract", + path: "references/event_extract.md", + name: "event_extract", description: "专为小说改编短剧设计的文本分析助手,逐章提取涉及角色、核心事件、主线关系、信息密度、预估集长及情绪强度等结构化信息,以Markdown表格形式输出,并附汇总统计,辅助短剧制作的内容规划与时长估算。", embedding: "", @@ -547,8 +547,8 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => { id: "52c51fa8655f899a1b7aae9b6aad7251", md5: "783678aaab829b34e7c30a414c356bf6", - path: "references/novel-character-extract.md", - name: "novel-character-extract", + path: "references/novel_character_extract.md", + name: "novel_character_extract", description: "专为小说内容分析设计的角色提取助手,从原文中识别并结构化输出所有重要角色的视觉描述信息,包括外貌、服饰、体态、状态变体等字段,供美术制作和AI角色图生成使用。", embedding: "", @@ -560,8 +560,8 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => { id: "6d46cdca10b2f49e07e515885d1387a0", md5: "10544d12c4ef011e6b3b63a99b8c7fa8", - path: "references/novel-props-extract.md", - name: "novel-props-extract", + path: "references/novel_props_extract.md", + name: "novel_props_extract", description: "专注于从小说原文中提取道具物品信息的分析助手,能识别武器、法器、药物等各类道具,生成包含外观、材质、尺寸、功能及状态变体的结构化视觉描述表格,供美术制作和AI绘图使用。", embedding: "", @@ -573,8 +573,8 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => { id: "1864df75d1d65f76e275046649ecaef8", md5: "65603aa495a541f54c55b7f30e149f45", - path: "references/novel-scene-extract.md", - name: "novel-scene-extract", + path: "references/novel_scene_extract.md", + name: "novel_scene_extract", description: "专注于从小说原文中提取并结构化场景信息的分析助手,可识别各类场景地点,输出包含空间描述、光照氛围、关键陈设、色调基调等字段的标准化场景资产表,用于美术制作和AI绘图的场景概念图生成。", embedding: "", @@ -586,8 +586,8 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => { id: "7fbce6f90d7d85496ba9817e9622e640", md5: "830559e8f2cd5d0fa8e6df48a164fe2d", - path: "references/video-dialogue-extract.md", - name: "video-dialogue-extract", + path: "references/video_dialogue_extract.md", + name: "video_dialogue_extract", description: "这是一个专门从视频分镜提示词中提取结构化台词、旁白与音效信息的AI助手配置文档,定义了完整的输出格式(含镜号、角色、台词类型、表演指导等字段)、提取规则及处理流程,用于将视频分镜描述转化为标准化台词表。", embedding: "", @@ -612,8 +612,8 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => { id: "27dc2dfc901de2180227d0269217583a", md5: "7d353be4bab7a794436d9abff2b9c6ee", - path: "references/adaptation-format.md", - name: "adaptation-format", + path: "references/adaptation_format.md", + name: "adaptation_format", description: "本文档规定了改编策略输出的标准格式,包括核心改编原则、删除决策和世界观呈现策略三大模块的书写规范,明确各模块所需涵盖的维度与要素,用于指导竖屏短剧等载体的文学改编工作。", embedding: "", @@ -625,8 +625,8 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => { id: "d49fa09504fe784a8e6eb102756c6d56", md5: "2ef08a7479f29d74986999ceb02092c8", - path: "references/event-format.md", - name: "event-format", + path: "references/event_format.md", + name: "event_format", description: "本文档规定了影视改编项目中事件表的标准输出格式,包括文件头、事件表格、各字段填写规范(章节、角色、核心事件、主线关系、情绪强度、预估时长)及汇总统计模板,用于指导从原著提取事件并评估改编集数与压缩比的第一阶段工作。", embedding: "", @@ -638,8 +638,8 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => { id: "797906c2ddf0750f050bcdeae23eae3d", md5: "f5e7fe6db7e05db69d5dc327c4c538f2", - path: "references/script-format.md", - name: "script-format", + path: "references/script_format.md", + name: "script_format", description: "本文档为竖屏短剧剧本的输出格式规范,定义了文件头、节拍结构、分镜脚本、画面描述、台词、转场标注等标准格式要求,并附有时长控制参数与自查清单,供AI视频生成和导演制作使用。", embedding: "", @@ -651,8 +651,8 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => { id: "1abd8675c0c3e62b20c0b151d2ec0fb1", md5: "a587532c737ce15022e1522021f099bb", - path: "references/skeleton-format.md", - name: "skeleton-format", + path: "references/skeleton_format.md", + name: "skeleton_format", description: "本文档定义了故事骨架文件(skeleton.md)的标准化输出格式,涵盖故事核、人物成长隐线、三幕结构、分集决策模板、全局删减记录、付费卡点设计及自查清单,用于指导编剧将章节事件列表转化为结构完整的剧集改编方案。", embedding: "", @@ -664,8 +664,8 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => { id: "0b7828d7a6ab458a4b201122f08d6c16", md5: "120b3c856f1b2a8a429e11319e8c95fe", - path: "references/quality-criteria.md", - name: "quality-criteria", + path: "references/quality_criteria.md", + name: "quality_criteria", description: "本文档为影视/短剧项目的质量审核标准手册,涵盖事件表、故事骨架、改编策略和剧本四大模块的详细审核规则,规定了格式规范、角色名称统一、时长合理性、画面可执行性及场景氛围一致性等审核要求,用于确保各阶段产出物的内容准确性与制作可行性。", embedding: "", @@ -690,8 +690,8 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => { id: "75a45cf996015ca819582873887ec301", md5: "6045d76873fd58b8b87a914a21a38439", - path: "references/derive-assets-extraction.md", - name: "derive-assets-extraction", + path: "references/derive_assets_extraction.md", + name: "derive_assets_extraction", description: "本文档是一份技术操作指南,说明如何根据剧本内容和已有资产列表,提取每个资产在剧情中出现的不同视觉状态变体(derive),并通过工具函数读取和写入数据,用于后续图片生成参考。", embedding: "", @@ -703,8 +703,8 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => { id: "fce75f69d704c19bebcb356bc1bd6e81", md5: "a3b3432854970f22949ba47236a6532f", - path: "references/storyboard-generation.md", - name: "storyboard-generation", + path: "references/storyboard_generation.md", + name: "storyboard_generation", description: "根据剧本和资产列表生成结构化分镜面板的工具指南,涵盖分镜拆分原则、字段填写规范及工具调用流程,用于将剧本转化为含画面描述、镜头语言、台词和AI绘图提示词的分镜数据。", embedding: "", @@ -727,7 +727,7 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => name: "o_skillAttribution", builder: (table) => { table.text("skillId").notNullable().references("id").inTable("o_skillList").onDelete("CASCADE"); - table.text("attribution").notNullable(); // "production_agent_decision.md" | "production_agent_execution.md" | "production_agent_supervision.md" | "script_agent_decision.md" | "script_agent_execution.md" | "script_agent_supervision.md" | "universal-agent.md" + table.text("attribution").notNullable(); // "production_agent_decision.md" | "production_agent_execution.md" | "production_agent_supervision.md" | "script_agent_decision.md" | "script_agent_execution.md" | "script_agent_supervision.md" | "universal_agent.md" table.primary(["skillId", "attribution"]); table.index(["attribution"]); }, @@ -735,23 +735,23 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => await knex("o_skillAttribution").insert([ { skillId: "52c51fa8655f899a1b7aae9b6aad7251", - attribution: "universal-agent.md", + attribution: "universal_agent.md", }, { skillId: "6d46cdca10b2f49e07e515885d1387a0", - attribution: "universal-agent.md", + attribution: "universal_agent.md", }, { skillId: "1864df75d1d65f76e275046649ecaef8", - attribution: "universal-agent.md", + attribution: "universal_agent.md", }, { skillId: "3e5efec258c8d8e6a39bcef12f8ee058", - attribution: "universal-agent.md", + attribution: "universal_agent.md", }, { skillId: "7fbce6f90d7d85496ba9817e9622e640", - attribution: "universal-agent.md", + attribution: "universal_agent.md", }, { skillId: "31fb5c5a1f514ec1e66b4eba9f22d4db", diff --git a/src/router.ts b/src/router.ts index 291c400..f274003 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -// @routes-hash f5f78866e59979bf30af031c9ea0de82 +// @routes-hash e48d3637c019a24988e008910e734d8c import { Express } from "express"; import route1 from "./routes/agents/clearMemory"; @@ -77,15 +77,22 @@ import route73 from "./routes/setting/loginConfig/getUser"; import route74 from "./routes/setting/loginConfig/updateUserPwd"; import route75 from "./routes/setting/memoryConfig/getMemory"; import route76 from "./routes/setting/memoryConfig/sureMemory"; -import route77 from "./routes/setting/vendorConfig/addVendor"; -import route78 from "./routes/setting/vendorConfig/deleteVendor"; -import route79 from "./routes/setting/vendorConfig/getVendorList"; -import route80 from "./routes/setting/vendorConfig/modelTest"; -import route81 from "./routes/setting/vendorConfig/updateVendor"; -import route82 from "./routes/task/getTaskApi"; -import route83 from "./routes/task/getTaskCategories"; -import route84 from "./routes/task/taskDetails"; -import route85 from "./routes/test/test"; +import route77 from "./routes/setting/skillManagement/addSkill"; +import route78 from "./routes/setting/skillManagement/deleteSkill"; +import route79 from "./routes/setting/skillManagement/embeddingSkill"; +import route80 from "./routes/setting/skillManagement/generateDescription"; +import route81 from "./routes/setting/skillManagement/getSkillList"; +import route82 from "./routes/setting/skillManagement/scanSkills"; +import route83 from "./routes/setting/skillManagement/updateSkill"; +import route84 from "./routes/setting/vendorConfig/addVendor"; +import route85 from "./routes/setting/vendorConfig/deleteVendor"; +import route86 from "./routes/setting/vendorConfig/getVendorList"; +import route87 from "./routes/setting/vendorConfig/modelTest"; +import route88 from "./routes/setting/vendorConfig/updateVendor"; +import route89 from "./routes/task/getTaskApi"; +import route90 from "./routes/task/getTaskCategories"; +import route91 from "./routes/task/taskDetails"; +import route92 from "./routes/test/test"; export default async (app: Express) => { app.use("/api/agents/clearMemory", route1); @@ -164,13 +171,20 @@ export default async (app: Express) => { app.use("/api/setting/loginConfig/updateUserPwd", route74); app.use("/api/setting/memoryConfig/getMemory", route75); app.use("/api/setting/memoryConfig/sureMemory", route76); - app.use("/api/setting/vendorConfig/addVendor", route77); - app.use("/api/setting/vendorConfig/deleteVendor", route78); - app.use("/api/setting/vendorConfig/getVendorList", route79); - app.use("/api/setting/vendorConfig/modelTest", route80); - app.use("/api/setting/vendorConfig/updateVendor", route81); - app.use("/api/task/getTaskApi", route82); - app.use("/api/task/getTaskCategories", route83); - app.use("/api/task/taskDetails", route84); - app.use("/api/test/test", route85); + app.use("/api/setting/skillManagement/addSkill", route77); + app.use("/api/setting/skillManagement/deleteSkill", route78); + app.use("/api/setting/skillManagement/embeddingSkill", route79); + app.use("/api/setting/skillManagement/generateDescription", route80); + app.use("/api/setting/skillManagement/getSkillList", route81); + app.use("/api/setting/skillManagement/scanSkills", route82); + app.use("/api/setting/skillManagement/updateSkill", route83); + app.use("/api/setting/vendorConfig/addVendor", route84); + app.use("/api/setting/vendorConfig/deleteVendor", route85); + app.use("/api/setting/vendorConfig/getVendorList", route86); + app.use("/api/setting/vendorConfig/modelTest", route87); + app.use("/api/setting/vendorConfig/updateVendor", route88); + app.use("/api/task/getTaskApi", route89); + app.use("/api/task/getTaskCategories", route90); + app.use("/api/task/taskDetails", route91); + app.use("/api/test/test", route92); } diff --git a/src/routes/production/getFlowData.ts b/src/routes/production/getFlowData.ts index 5a52ee6..8492a9b 100644 --- a/src/routes/production/getFlowData.ts +++ b/src/routes/production/getFlowData.ts @@ -28,6 +28,7 @@ export default router.post( .db("o_assets") .leftJoin("o_image", "o_assets.imageId", "o_image.id") .select("o_assets.*", "o_image.filePath") + // @ts-ignore .where("o_assets.id", "in", assetIds) .whereNull("o_assets.assetsId") .where("o_assets.projectId", projectId); @@ -36,6 +37,7 @@ export default router.post( .leftJoin("o_image", "o_assets.imageId", "o_image.id") .select("o_assets.*", "o_image.filePath") .where("o_assets.projectId", projectId) + // @ts-ignore .where("o_assets.id", "in", assetIds) .whereNotNull("o_assets.assetsId"); diff --git a/src/routes/script/getScrptApi.ts b/src/routes/script/getScrptApi.ts index c9dc893..9b253b8 100644 --- a/src/routes/script/getScrptApi.ts +++ b/src/routes/script/getScrptApi.ts @@ -22,11 +22,8 @@ export default router.post( const assetsData = await u .db("o_assets") .leftJoin("o_scriptAssets", "o_assets.id", "o_scriptAssets.assetId") - .where( - "o_scriptAssets.scriptId", - "in", - data.map((i) => i.id), - ) + // @ts-ignore + .whereIn( "o_scriptAssets.scriptId", data.map((i) => i.id)) .select("o_assets.id", "o_assets.name", "o_scriptAssets.scriptId"); const scriptAssetsMap: Record = {}; assetsData.forEach((i) => { diff --git a/src/routes/test/test.ts b/src/routes/test/test.ts index 92b9ba3..772634b 100644 --- a/src/routes/test/test.ts +++ b/src/routes/test/test.ts @@ -8,7 +8,7 @@ export default router.get("/", async (req, res) => { const skill = await useSkill("universal_agent.md"); const result = await u.Ai.Text("universalAgent").invoke({ system: "请直接调用activate_skill工具激活技能" + skill.prompt, - messages: [{ role: "user", content: `开始激活,然后随机使用read_skill_file调用一个技能` }], + messages: [{ role: "user", content: `如何烹饪龙肉` }], tools: skill.tools, }); diff --git a/src/types/database.d.ts b/src/types/database.d.ts index 1be7b18..285100a 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,4 +1,4 @@ -// @db-hash 2b2f9f6242d2d20e89412ba5117415df +// @db-hash a4883a3df3fda68054d467ee6dd26523 //该文件由脚本自动生成,请勿手动修改 export interface memories { @@ -155,6 +155,7 @@ export interface o_storyboard { 'filePath'?: string | null; 'frameMode'?: string | null; 'id'?: number; + 'index'?: string | null; 'lines'?: string | null; 'mode'?: string | null; 'model'?: string | null; diff --git a/src/utils/agent/skillsTools.ts b/src/utils/agent/skillsTools.ts index 628b0d0..16bc5ba 100644 --- a/src/utils/agent/skillsTools.ts +++ b/src/utils/agent/skillsTools.ts @@ -123,6 +123,8 @@ function createSkillTools(skill: SkillRecord, mainSkillName: string) { .where("o_skillList.state", 1) .andWhere("o_skillAttribution.attribution", mainSkillName); + console.log("%c Line:120 🌮 resources", "background:#b03734", resources); + activated.add(name); console.log(`[Skill] 📖 已激活:${name}(${body.length} 字符,${resources.length} 资源)`); let content = "";