添加默认添加数据

This commit is contained in:
zhishi 2026-04-13 04:12:56 +08:00
parent 20d9a787eb
commit 00e9539533
5 changed files with 40 additions and 25 deletions

View File

@ -47,7 +47,7 @@
"ai": "^6.0.67",
"axios": "^1.13.2",
"axios-retry": "^4.5.0",
"better-sqlite3": "^12.8.0",
"better-sqlite3": "^12.9.0",
"compressing": "^2.1.0",
"cors": "^2.8.5",
"dotenv": "^17.2.3",

View File

@ -66,6 +66,38 @@ export default async (knex: Knex): Promise<void> => {
// 添加新字段
await addColumn("o_agentDeploy", "maxOutputTokens", "integer");
//添加数据高级配置
const advancedAgentList = [
{ key: "scriptAgent:decisionAgent", name: "剧本Agent:决策层", desc: "决策层" },
{ key: "scriptAgent:supervisionAgent", name: "剧本Agent:监督层", desc: "监督层" },
{ key: "scriptAgent:storySkeletonAgent", name: "剧本Agent:故事骨架", desc: "故事骨架生成" },
{ key: "scriptAgent:adaptationStrategyAgent", name: "剧本Agent:改编策略", desc: "改编策略生成" },
{ key: "scriptAgent:scriptAgent", name: "剧本Agent:剧本生成", desc: "剧本生成" },
{ key: "productionAgent:decisionAgent", name: "生产Agent:决策层", desc: "决策层" },
{ key: "productionAgent:supervisionAgent", name: "生产Agent:监督层", desc: "监督层" },
{ key: "productionAgent:deriveAssetsAgent", name: "生产Agent:衍生资产", desc: "衍生资产" },
{ key: "productionAgent:generateAssetsAgent", name: "生产Agent:生成资产", desc: "生成资产" },
{ key: "productionAgent:directorPlanAgent", name: "生产Agent:导演规划", desc: "导演规划" },
{ key: "productionAgent:storyboardGenAgent", name: "生产Agent:分镜生成", desc: "分镜生成" },
{ key: "productionAgent:storyboardPanelAgent", name: "生产Agent:分镜面板", desc: "分镜面板生成" },
{ key: "productionAgent:storyboardTableAgent", name: "生产Agent:分镜表格", desc: "分镜表格生成" },
];
for (const agent of advancedAgentList) {
const exists = await db("o_agentDeploy").where("key", agent.key).select("*").first();
if (!exists) {
await db("o_agentDeploy").insert({
model: "",
modelName: "",
vendorId: null,
key: agent.key,
name: agent.name,
desc: agent.desc,
temperature: 1,
maxOutputTokens: 0,
disabled: false,
});
}
}
//矫正提示词
await db("o_prompt").where("type", "scriptAssetExtraction").update({
data: `---\nname: universal_agent\ndescription: 专注于从剧本内容中提取所使用的资产(角色、场景、道具)并生成结构化资产列表的助手。\n---\n\n# Script Assets Extract\n\n你是一个专业的剧本内容分析助手专注于从剧本文本中识别和提取所有涉及的资产角色、场景、道具并为每项资产生成可供下游制作流程使用的结构化描述和提示词。\n\n## 何时使用\n\n用户提供剧本内容你需要逐段阅读并提取其中涉及的所有资产人物角色、场景地点、道具物件输出为结构化的资产列表。产出的资产描述将用于后续 AI 图片生成和制作流程。\n\n## 与系统的对应关系\n\n- 资产类型:\n - \`role\` — 角色(对应 \`o_assets.type = "role"\`\n - \`scene\` — 场景(对应 \`o_assets.type = "scene"\`\n - \`tool\` — 道具(对应 \`o_assets.type = "tool"\`\n- 下游用途:资产提示词生成 → AI 资产图生成 → 分镜制作\n\n## 输出要求\n\n**必须通过调用 \`resultTool\` 工具返回结果**禁止以纯文本、Markdown 表格或 JSON 代码块等形式直接输出资产列表。\n\`resultTool\` 的 schema 会对字段类型和枚举值做强校验,调用时请严格按照下方字段定义填写,确保数据结构正确、字段完整、类型匹配。\n\n每个资产对象包含以下字段\n\n| 字段 | 类型 | 必填 | 说明 |\n| ---- | ---- | ---- | ---- |\n| \`name\` | string | 是 | 资产名称,使用剧本中的原始称呼,不做其他多余描述 |\n| \`desc\` | string | 是 | 资产描述30-80 字的视觉化描述 |\n| \`prompt\` | string | 是 | 生成提示词,英文,用于 AI 图片生成 |\n| \`type\` | enum | 是 | 资产类型:\`role\` / \`scene\` / \`tool\` |\n\n## 提取规则\n\n### 角色role\n\n- 提取剧本中出现的所有有名字的角色\n- \`desc\`:包含性别、外貌特征、服饰风格、体态气质等视觉要素,需在描述开头明确标注角色性别(如"男性,……"或"女性,……"\n- \`prompt\`:英文提示词,描述角色的外观特征,需以性别词开头(如 \`a young man, ...\`\`a young woman, ...\`),适用于 AI 角色图生成\n- 同一角色有多个称呼时,取最常用的作为 \`name\`\n- 无名龙套(如"路人甲"、"士兵")可跳过,除非其造型对剧情有重要视觉意义\n\n### 场景scene\n\n- 提取剧本中出现的所有场景/地点\n- \`desc\`:包含空间结构、光照氛围、关键陈设、色调基调等视觉要素\n- \`prompt\`:英文提示词,描述场景的整体视觉风格,适用于 AI 场景图生成\n- 同一场景的不同状态(如白天/夜晚)不重复提取,在 \`desc\` 中注明即可\n\n### 道具tool\n\n- 提取剧本中出现的重要道具/物品\n- \`desc\`:包含外观形状、颜色材质、尺寸参考、特殊效果等视觉要素\n- \`prompt\`:英文提示词,描述道具的外观细节,适用于 AI 道具图生成\n- 仅提取有独立视觉意义或剧情功能的道具,通用物品可跳过\n\n\n## 提示词prompt生成规范\n\n- 采用逗号分隔的关键词/短语格式\n- 优先描述**视觉特征**,避免抽象概念\n- 包含风格关键词(如 anime style, manga style 等,根据项目风格决定)\n- 角色 prompt 示例:\`a young man, sharp eyebrows, black hair, pale skin, wearing a gray Taoist robe, slender build, cold expression\`\n- 场景 prompt 示例:\`dark cave interior, glowing crystals on walls, misty atmosphere, dim blue lighting, stone altar in center\`\n- 道具 prompt 示例:\`ancient jade pendant, oval shape, translucent green, carved dragon pattern, glowing faintly\`\n\n## 提取流程\n\n1. 通读剧本全文,识别所有出现的角色、场景、道具\n2. 对每个资产生成结构化的 \`name\`\`desc\`\`prompt\`\`type\`\n3. 去重:同一资产不重复提取\n4. **必须通过调用 \`resultTool\` 工具输出完整资产列表**,不要分多次调用,一次性将所有资产放入 \`assetsList\` 数组中提交\n\n## 提取原则\n\n1. **忠于剧本**:所有提取基于剧本中的实际内容,不臆造未出现的资产\n2. **视觉优先**:描述和提示词聚焦视觉特征,便于 AI 图片生成\n3. **精简实用**:只提取对制作有实际意义的资产,避免过度提取\n4. **分类准确**:严格按照 role/scene/tool 分类,不混淆\n5. **提示词质量**:英文提示词应具体、可执行,能直接用于 AI 图片生成\n\n## 注意事项\n\n- 资产列表中**不要包含剧本内容本身**,仅提取所使用到的资产\n- 角色的随身物品如果有独立剧情功能,应单独作为道具提取\n- 场景中的固定陈设不需要单独提取为道具,除非该物件有独立剧情作用`,

View File

@ -71,7 +71,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
table.text("vendorId");
table.string("desc");
table.string("name");
table.string("type");
table.integer("temperature");
table.integer("maxOutputTokens");
table.boolean("disabled").defaultTo(false);
@ -87,7 +86,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "scriptAgent",
name: "剧本Agent",
desc: "用于读取原文生成故事骨架、改编策略,建议使用具备强大文本理解和生成能力的模型",
type: "普通",
disabled: false,
},
{
@ -97,7 +95,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "productionAgent",
name: "生产Agent",
desc: "对工作流进行调度和管理,建议使用具备较强的逻辑推理和任务管理能力的模型",
type: "普通",
disabled: false,
},
{
@ -107,7 +104,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "universalAi",
name: "通用AI",
desc: "用于小说事件提取、资产提示词生成、台词提取等边缘功能,建议使用具备较强文本处理能力的模型",
type: "普通",
disabled: false,
},
{
@ -117,7 +113,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "ttsDubbing",
name: "TTS配音",
desc: "根据剧本内容生成角色配音,支持多种声音风格和情绪",
type: "普通",
disabled: true,
},
{
@ -127,7 +122,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "scriptAgent:decisionAgent",
name: "剧本Agent:决策层",
desc: "决策层",
type: "高级",
temperature: 1,
maxOutputTokens: 0,
disabled: false,
@ -139,7 +133,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "scriptAgent:supervisionAgent",
name: "剧本Agent:监督层",
desc: "监督层",
type: "高级",
temperature: 1,
maxOutputTokens: 0,
disabled: false,
@ -151,7 +144,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "scriptAgent:storySkeletonAgent",
name: "剧本Agent:故事骨架",
desc: "故事骨架生成",
type: "高级",
temperature: 1,
maxOutputTokens: 0,
disabled: false,
@ -163,7 +155,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "scriptAgent:adaptationStrategyAgent",
name: "剧本Agent:改编策略",
desc: "改编策略生成",
type: "高级",
temperature: 1,
maxOutputTokens: 0,
disabled: false,
@ -175,7 +166,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "scriptAgent:scriptAgent",
name: "剧本Agent:剧本生成",
desc: "剧本生成",
type: "高级",
temperature: 1,
maxOutputTokens: 0,
disabled: false,
@ -187,7 +177,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "productionAgent:decisionAgent",
name: "生产Agent:决策层",
desc: "决策层",
type: "高级",
temperature: 1,
maxOutputTokens: 0,
disabled: false,
@ -199,7 +188,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "productionAgent:supervisionAgent",
name: "生产Agent:监督层",
desc: "监督层",
type: "高级",
temperature: 1,
maxOutputTokens: 0,
disabled: false,
@ -211,7 +199,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "productionAgent:deriveAssetsAgent",
name: "生产Agent:衍生资产",
desc: "衍生资产",
type: "高级",
temperature: 1,
maxOutputTokens: 0,
disabled: false,
@ -223,7 +210,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "productionAgent:generateAssetsAgent",
name: "生产Agent:生成资产",
desc: "生成资产",
type: "高级",
temperature: 1,
maxOutputTokens: 0,
disabled: false,
@ -235,7 +221,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "productionAgent:directorPlanAgent",
name: "生产Agent:导演规划",
desc: "导演规划",
type: "高级",
temperature: 1,
maxOutputTokens: 0,
disabled: false,
@ -247,7 +232,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "productionAgent:storyboardGenAgent",
name: "生产Agent:分镜生成",
desc: "分镜生成",
type: "高级",
temperature: 1,
maxOutputTokens: 0,
disabled: false,
@ -259,7 +243,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "productionAgent:storyboardPanelAgent",
name: "生产Agent:分镜面板",
desc: "分镜面板生成",
type: "高级",
temperature: 1,
maxOutputTokens: 0,
disabled: false,
@ -271,7 +254,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
key: "productionAgent:storyboardTableAgent",
name: "生产Agent:分镜表格",
desc: "分镜表格生成",
type: "高级",
temperature: 1,
maxOutputTokens: 0,
disabled: false,

View File

@ -4,7 +4,8 @@ import u from "@/utils";
const router = express.Router();
export default router.post("/", async (req, res) => {
const qrdinaryData = await u.db("o_agentDeploy").where("type", "普通").leftJoin("o_vendorConfig", "o_vendorConfig.id", "o_agentDeploy.vendorId").select("o_agentDeploy.*");
const advancedData = await u.db("o_agentDeploy").where("type", "高级").leftJoin("o_vendorConfig", "o_vendorConfig.id", "o_agentDeploy.vendorId").select("o_agentDeploy.*");
const allData = await u.db("o_agentDeploy").leftJoin("o_vendorConfig", "o_vendorConfig.id", "o_agentDeploy.vendorId").select("o_agentDeploy.*");
const qrdinaryData = allData.filter((item: any) => !item.key?.includes(":"));
const advancedData = allData.filter((item: any) => item.key?.includes(":"));
res.status(200).send(success({ qrdinaryData, advancedData }));
});

View File

@ -1338,10 +1338,10 @@ basic-auth@~2.0.1:
dependencies:
safe-buffer "5.1.2"
better-sqlite3@^12.8.0:
version "12.8.0"
resolved "https://registry.npmmirror.com/better-sqlite3/-/better-sqlite3-12.8.0.tgz#ec9ccd4a426a35f3b9355c147af6c92a6ddd6862"
integrity sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ==
better-sqlite3@^12.9.0:
version "12.9.0"
resolved "https://registry.npmmirror.com/better-sqlite3/-/better-sqlite3-12.9.0.tgz#32498c99ba3fb36f604fbb5c70667c5f68c00414"
integrity sha512-wqUv4Gm3toFpHDQmaKD4QhZm3g1DjUBI0yzS4UBl6lElUmXFYdTQmmEDpAFa5o8FiFiymURypEnfVHzILKaxqQ==
dependencies:
bindings "^1.5.0"
prebuild-install "^7.1.1"