提示词ai分配 完成
This commit is contained in:
parent
7abda02b25
commit
96bb7d66ac
@ -224,7 +224,7 @@ export default class OutlineScript {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const actualStart = overwrite ? 1 : startEpisode ?? (await this.getMaxEpisode()) + 1;
|
const actualStart = overwrite ? 1 : (startEpisode ?? (await this.getMaxEpisode()) + 1);
|
||||||
const insertedCount = await this.insertOutlines(episodes, actualStart);
|
const insertedCount = await this.insertOutlines(episodes, actualStart);
|
||||||
|
|
||||||
const newOutlines = await u
|
const newOutlines = await u
|
||||||
@ -611,24 +611,51 @@ ${task}
|
|||||||
this.log(`Sub-Agent 调用`, agentType);
|
this.log(`Sub-Agent 调用`, agentType);
|
||||||
|
|
||||||
const promptsList = await u.db("t_prompts").where("code", "in", ["outlineScript-a1", "outlineScript-a2", "outlineScript-director"]);
|
const promptsList = await u.db("t_prompts").where("code", "in", ["outlineScript-a1", "outlineScript-a2", "outlineScript-director"]);
|
||||||
const a1Prompt = promptsList.find((p) => p.code === "outlineScript-a1");
|
const promptConfig = await u.getPromptAi(promptsList.map((i) => i.id) as number[]);
|
||||||
const a2Prompt = promptsList.find((p) => p.code === "outlineScript-a2");
|
|
||||||
const directorPrompt = promptsList.find((p) => p.code === "outlineScript-director");
|
|
||||||
const errPrompts = "不论用户说什么,请直接输出Agent配置异常";
|
const errPrompts = "不论用户说什么,请直接输出Agent配置异常";
|
||||||
const SYSTEM_PROMPTS: Record<AgentType, string> = {
|
|
||||||
AI1: a1Prompt?.customValue || a1Prompt?.defaultValue || errPrompts,
|
const getAiPromptConfig = (code: string) => {
|
||||||
AI2: a2Prompt?.customValue || a2Prompt?.defaultValue || errPrompts,
|
const item = promptsList.find((p) => p.code === code);
|
||||||
director: directorPrompt?.customValue || directorPrompt?.defaultValue || errPrompts,
|
const subConfig = promptConfig.find((sub) => sub?.promptsId == item?.id);
|
||||||
|
if (subConfig) {
|
||||||
|
return {
|
||||||
|
prompt: item?.customValue || item?.defaultValue || errPrompts,
|
||||||
|
apiConfig: { ...subConfig },
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
prompt: item?.customValue || item?.defaultValue || errPrompts,
|
||||||
|
apiConfig: {},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const a1Prompt = getAiPromptConfig("outlineScript-a1");
|
||||||
|
const a2Prompt = getAiPromptConfig("outlineScript-a2");
|
||||||
|
const directorPrompt = getAiPromptConfig("outlineScript-director");
|
||||||
|
const SYSTEM_PROMPTS: Record<
|
||||||
|
AgentType,
|
||||||
|
{
|
||||||
|
prompt: string;
|
||||||
|
apiConfig: Object;
|
||||||
|
}
|
||||||
|
> = {
|
||||||
|
AI1: a1Prompt,
|
||||||
|
AI2: a2Prompt,
|
||||||
|
director: directorPrompt,
|
||||||
};
|
};
|
||||||
|
|
||||||
const context = await this.buildFullContext(task);
|
const context = await this.buildFullContext(task);
|
||||||
|
|
||||||
const { fullStream } = await u.ai.text.stream({
|
const { fullStream } = await u.ai.text.stream(
|
||||||
system: SYSTEM_PROMPTS[agentType],
|
{
|
||||||
tools: this.getSubAgentTools(),
|
system: SYSTEM_PROMPTS[agentType].prompt,
|
||||||
messages: [{ role: "user", content: context }],
|
tools: this.getSubAgentTools(),
|
||||||
maxStep: 100,
|
messages: [{ role: "user", content: context }],
|
||||||
});
|
maxStep: 100,
|
||||||
|
},
|
||||||
|
SYSTEM_PROMPTS[agentType].apiConfig,
|
||||||
|
);
|
||||||
|
|
||||||
let fullResponse = "";
|
let fullResponse = "";
|
||||||
for await (const item of fullStream) {
|
for await (const item of fullStream) {
|
||||||
@ -690,15 +717,18 @@ ${task}
|
|||||||
const envContext = await this.buildEnvironmentContext();
|
const envContext = await this.buildEnvironmentContext();
|
||||||
|
|
||||||
const prompts = await u.db("t_prompts").where("code", "outlineScript-main").first();
|
const prompts = await u.db("t_prompts").where("code", "outlineScript-main").first();
|
||||||
|
const promptConfig = await u.getPromptAi(prompts?.id);
|
||||||
const mainPrompts = prompts?.customValue || prompts?.defaultValue || "不论用户说什么,请直接输出Agent配置异常";
|
const mainPrompts = prompts?.customValue || prompts?.defaultValue || "不论用户说什么,请直接输出Agent配置异常";
|
||||||
|
|
||||||
const { fullStream } = await u.ai.text.stream({
|
const { fullStream } = await u.ai.text.stream(
|
||||||
system: `${envContext}\n${mainPrompts}`,
|
{
|
||||||
tools: this.getAllTools(),
|
system: `${envContext}\n${mainPrompts}`,
|
||||||
messages: this.history,
|
tools: this.getAllTools(),
|
||||||
maxStep: 100,
|
messages: this.history,
|
||||||
});
|
maxStep: 100,
|
||||||
|
},
|
||||||
|
promptConfig,
|
||||||
|
);
|
||||||
|
|
||||||
let fullResponse = "";
|
let fullResponse = "";
|
||||||
for await (const item of fullStream) {
|
for await (const item of fullStream) {
|
||||||
|
|||||||
@ -98,26 +98,29 @@ async function generateGridPrompt(options: GridPromptOptions): Promise<GridPromp
|
|||||||
: "";
|
: "";
|
||||||
|
|
||||||
const promptsData = await u.db("t_prompts").where("code", "generateImagePrompts").first();
|
const promptsData = await u.db("t_prompts").where("code", "generateImagePrompts").first();
|
||||||
|
const promptAiConfig = await u.getPromptAi(promptsData?.id);
|
||||||
const mainPrompts = promptsData?.customValue || promptsData?.defaultValue;
|
const mainPrompts = promptsData?.customValue || promptsData?.defaultValue;
|
||||||
const errData = `请输出${options.prompts.length}张图片\n提示词如下:\n${options.prompts.map((p, i) => `第${i + 1}格: ${p}`).join("\n")}`;
|
const errData = `请输出${options.prompts.length}张图片\n提示词如下:\n${options.prompts.map((p, i) => `第${i + 1}格: ${p}`).join("\n")}`;
|
||||||
|
|
||||||
if (!mainPrompts) return { prompt: errData, gridLayout: layout };
|
if (!mainPrompts) return { prompt: errData, gridLayout: layout };
|
||||||
|
|
||||||
const result = await u.ai.text.invoke({
|
const result = await u.ai.text.invoke(
|
||||||
messages: [
|
{
|
||||||
{
|
messages: [
|
||||||
role: "system",
|
{
|
||||||
content: mainPrompts,
|
role: "system",
|
||||||
},
|
content: mainPrompts,
|
||||||
{
|
},
|
||||||
role: "user",
|
{
|
||||||
content: `请优化以下分镜提示词:\n\n【布局】${layout.cols}列×${layout.rows}行=${
|
role: "user",
|
||||||
layout.totalCells
|
content: `请优化以下分镜提示词:\n\n【布局】${layout.cols}列×${layout.rows}行=${
|
||||||
}格\n【比例】${aspectRatio}(${aspectRatioDesc})\n【风格】${style}\n${assetsSection}\n\n【原始内容】\n${gridPositions.join("\n")}`,
|
layout.totalCells
|
||||||
},
|
}格\n【比例】${aspectRatio}(${aspectRatioDesc})\n【风格】${style}\n${assetsSection}\n\n【原始内容】\n${gridPositions.join("\n")}`,
|
||||||
],
|
},
|
||||||
});
|
],
|
||||||
|
},
|
||||||
|
promptAiConfig,
|
||||||
|
);
|
||||||
|
|
||||||
// const result = await chatModel!.invoke({
|
// const result = await chatModel!.invoke({
|
||||||
// messages: [
|
// messages: [
|
||||||
|
|||||||
@ -594,22 +594,49 @@ ${task}
|
|||||||
this.log(`Sub-Agent 调用`, agentType);
|
this.log(`Sub-Agent 调用`, agentType);
|
||||||
|
|
||||||
const promptsList = await u.db("t_prompts").where("code", "in", ["storyboard-segment", "storyboard-shot"]);
|
const promptsList = await u.db("t_prompts").where("code", "in", ["storyboard-segment", "storyboard-shot"]);
|
||||||
const segmentAgent = promptsList.find((p) => p.code === "storyboard-segment");
|
const promptConfig = await u.getPromptAi(promptsList.map((i) => i.id) as number[]);
|
||||||
const shotAgent = promptsList.find((p) => p.code === "storyboard-shot");
|
|
||||||
const errPrompts = "不论用户说什么,请直接输出Agent配置异常";
|
const errPrompts = "不论用户说什么,请直接输出Agent配置异常";
|
||||||
const SYSTEM_PROMPTS: Record<AgentType, string> = {
|
|
||||||
segmentAgent: segmentAgent?.customValue || segmentAgent?.defaultValue || errPrompts,
|
const getAiPromptConfig = (code: string) => {
|
||||||
shotAgent: shotAgent?.customValue || shotAgent?.defaultValue || errPrompts,
|
const item = promptsList.find((p) => p.code === code);
|
||||||
|
const subConfig = promptConfig.find((sub) => sub?.promptsId == item?.id);
|
||||||
|
if (subConfig) {
|
||||||
|
return {
|
||||||
|
prompt: item?.customValue || item?.defaultValue || errPrompts,
|
||||||
|
apiConfig: { ...subConfig },
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
prompt: item?.customValue || item?.defaultValue || errPrompts,
|
||||||
|
apiConfig: {},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const segmentAgent = getAiPromptConfig("storyboard-segment");
|
||||||
|
const shotAgent = getAiPromptConfig("storyboard-shot");
|
||||||
|
const SYSTEM_PROMPTS: Record<
|
||||||
|
AgentType,
|
||||||
|
{
|
||||||
|
prompt: string;
|
||||||
|
apiConfig: Object;
|
||||||
|
}
|
||||||
|
> = {
|
||||||
|
segmentAgent: segmentAgent,
|
||||||
|
shotAgent: shotAgent,
|
||||||
};
|
};
|
||||||
|
|
||||||
const context = await this.buildFullContext(task);
|
const context = await this.buildFullContext(task);
|
||||||
|
|
||||||
const { fullStream } = await u.ai.text.stream({
|
const { fullStream } = await u.ai.text.stream(
|
||||||
system: SYSTEM_PROMPTS[agentType],
|
{
|
||||||
tools: this.getSubAgentTools(agentType),
|
system: SYSTEM_PROMPTS[agentType].prompt,
|
||||||
messages: [{ role: "user", content: context }],
|
tools: this.getSubAgentTools(agentType),
|
||||||
maxStep: 100,
|
messages: [{ role: "user", content: context }],
|
||||||
});
|
maxStep: 100,
|
||||||
|
},
|
||||||
|
SYSTEM_PROMPTS[agentType].apiConfig,
|
||||||
|
);
|
||||||
|
|
||||||
let fullResponse = "";
|
let fullResponse = "";
|
||||||
for await (const item of fullStream) {
|
for await (const item of fullStream) {
|
||||||
@ -673,15 +700,19 @@ ${task}
|
|||||||
const envContext = await this.buildEnvironmentContext();
|
const envContext = await this.buildEnvironmentContext();
|
||||||
|
|
||||||
const prompts = await u.db("t_prompts").where("code", "storyboard-main").first();
|
const prompts = await u.db("t_prompts").where("code", "storyboard-main").first();
|
||||||
|
const promptConfig = await u.getPromptAi(prompts?.id);
|
||||||
|
|
||||||
const mainPrompts = prompts?.customValue || prompts?.defaultValue || "不论用户说什么,请直接输出Agent配置异常";
|
const mainPrompts = prompts?.customValue || prompts?.defaultValue || "不论用户说什么,请直接输出Agent配置异常";
|
||||||
|
|
||||||
const { fullStream } = await u.ai.text.stream({
|
const { fullStream } = await u.ai.text.stream(
|
||||||
system: `${envContext}\n${mainPrompts}`,
|
{
|
||||||
tools: this.getAllTools(),
|
system: `${envContext}\n${mainPrompts}`,
|
||||||
messages: this.history,
|
tools: this.getAllTools(),
|
||||||
maxStep: 100,
|
messages: this.history,
|
||||||
});
|
maxStep: 100,
|
||||||
|
},
|
||||||
|
promptConfig,
|
||||||
|
);
|
||||||
|
|
||||||
let fullResponse = "";
|
let fullResponse = "";
|
||||||
for await (const item of fullStream) {
|
for await (const item of fullStream) {
|
||||||
|
|||||||
@ -88,16 +88,31 @@ export default router.post(
|
|||||||
const result: ResultItem[] = Object.values(itemMap);
|
const result: ResultItem[] = Object.values(itemMap);
|
||||||
|
|
||||||
const promptsList = await u.db("t_prompts").where("code", "in", ["role-polish", "scene-polish", "storyboard-polish", "tool-polish"]);
|
const promptsList = await u.db("t_prompts").where("code", "in", ["role-polish", "scene-polish", "storyboard-polish", "tool-polish"]);
|
||||||
|
const propmptIds = promptsList.map((i) => i.id);
|
||||||
|
const mapList = await u
|
||||||
|
.db("t_aiModelMap")
|
||||||
|
.leftJoin("t_config", "t_config.id", "t_aiModelMap.configId")
|
||||||
|
.whereIn("t_aiModelMap.promptsId", propmptIds as number[])
|
||||||
|
.select("t_config.model", "t_config.apiKey", "t_config.baseUrl", "t_config.manufacturer", "t_aiModelMap.promptsId");
|
||||||
const errPrompts = "不论用户说什么,请直接输出AI配置异常";
|
const errPrompts = "不论用户说什么,请直接输出AI配置异常";
|
||||||
const getPromptValue = (code: string): string => {
|
const getPromptValue = (code: string) => {
|
||||||
const item = promptsList.find((p) => p.code === code);
|
const item = promptsList.find((p) => p.code === code);
|
||||||
return item?.customValue ?? item?.defaultValue ?? errPrompts;
|
if (item) {
|
||||||
|
const apiData = mapList.find((i) => i.promptsId == item.id);
|
||||||
|
if (apiData) delete apiData?.promptsId;
|
||||||
|
return { prompt: item?.customValue ?? item?.defaultValue ?? errPrompts, apiData: { ...(apiData ?? {}) } };
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
prompt: errPrompts,
|
||||||
|
apiData: {},
|
||||||
|
};
|
||||||
|
}
|
||||||
};
|
};
|
||||||
const role = getPromptValue("role-polish");
|
const role = getPromptValue("role-polish");
|
||||||
const scene = getPromptValue("scene-polish");
|
const scene = getPromptValue("scene-polish");
|
||||||
const tool = getPromptValue("tool-polish");
|
const tool = getPromptValue("tool-polish");
|
||||||
const storyboard = getPromptValue("storyboard-polish");
|
const storyboard = getPromptValue("storyboard-polish");
|
||||||
|
let apiConfig = {};
|
||||||
let systemPrompt = "";
|
let systemPrompt = "";
|
||||||
let userPrompt = "";
|
let userPrompt = "";
|
||||||
if (type == "role") {
|
if (type == "role") {
|
||||||
@ -105,7 +120,8 @@ export default router.post(
|
|||||||
const chapterRange = Array.isArray(data?.chapterRange) ? data.chapterRange : [data?.chapterRange];
|
const chapterRange = Array.isArray(data?.chapterRange) ? data.chapterRange : [data?.chapterRange];
|
||||||
const novelData = (await u.db("t_novel").whereIn("chapterIndex", chapterRange).select("*")) as NovelChapter[];
|
const novelData = (await u.db("t_novel").whereIn("chapterIndex", chapterRange).select("*")) as NovelChapter[];
|
||||||
const results: string = mergeNovelText(novelData);
|
const results: string = mergeNovelText(novelData);
|
||||||
systemPrompt = role;
|
systemPrompt = role.prompt;
|
||||||
|
apiConfig = role.apiData;
|
||||||
userPrompt = `
|
userPrompt = `
|
||||||
请根据以下参数生成角色标准四视图提示词:
|
请根据以下参数生成角色标准四视图提示词:
|
||||||
|
|
||||||
@ -128,7 +144,8 @@ export default router.post(
|
|||||||
const chapterRange = Array.isArray(data?.chapterRange) ? data.chapterRange : [data?.chapterRange];
|
const chapterRange = Array.isArray(data?.chapterRange) ? data.chapterRange : [data?.chapterRange];
|
||||||
const novelData = (await u.db("t_novel").whereIn("chapterIndex", chapterRange).select("*")) as NovelChapter[];
|
const novelData = (await u.db("t_novel").whereIn("chapterIndex", chapterRange).select("*")) as NovelChapter[];
|
||||||
const results: string = mergeNovelText(novelData);
|
const results: string = mergeNovelText(novelData);
|
||||||
systemPrompt = scene;
|
systemPrompt = scene.prompt;
|
||||||
|
apiConfig = scene.apiData;
|
||||||
userPrompt = `
|
userPrompt = `
|
||||||
请根据以下参数生成场景图提示词:
|
请根据以下参数生成场景图提示词:
|
||||||
|
|
||||||
@ -151,7 +168,8 @@ export default router.post(
|
|||||||
const chapterRange = Array.isArray(data?.chapterRange) ? data.chapterRange : [data?.chapterRange];
|
const chapterRange = Array.isArray(data?.chapterRange) ? data.chapterRange : [data?.chapterRange];
|
||||||
const novelData = (await u.db("t_novel").whereIn("chapterIndex", chapterRange).select("*")) as NovelChapter[];
|
const novelData = (await u.db("t_novel").whereIn("chapterIndex", chapterRange).select("*")) as NovelChapter[];
|
||||||
const results: string = mergeNovelText(novelData);
|
const results: string = mergeNovelText(novelData);
|
||||||
systemPrompt = tool;
|
systemPrompt = tool.prompt;
|
||||||
|
apiConfig = tool.apiData;
|
||||||
userPrompt = `
|
userPrompt = `
|
||||||
请根据以下参数生成道具图提示词:
|
请根据以下参数生成道具图提示词:
|
||||||
|
|
||||||
@ -170,7 +188,8 @@ export default router.post(
|
|||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
if (type == "storyboard") {
|
if (type == "storyboard") {
|
||||||
systemPrompt = storyboard;
|
systemPrompt = storyboard.prompt;
|
||||||
|
apiConfig = storyboard.apiData;
|
||||||
userPrompt = `
|
userPrompt = `
|
||||||
请根据以下参数生成分镜图提示词:
|
请根据以下参数生成分镜图提示词:
|
||||||
|
|
||||||
@ -188,22 +207,27 @@ export default router.post(
|
|||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
async function generatePrompt() {
|
async function generatePrompt() {
|
||||||
const { prompt } = await u.ai.text.invoke({
|
apiConfig = {};
|
||||||
messages: [
|
const result = await u.ai.text.invoke(
|
||||||
{
|
{
|
||||||
role: "system",
|
messages: [
|
||||||
content: systemPrompt,
|
{
|
||||||
|
role: "system",
|
||||||
|
content: systemPrompt,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
role: "user",
|
||||||
|
content: userPrompt,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
output: {
|
||||||
|
prompt: zod.string().describe("提示词"),
|
||||||
},
|
},
|
||||||
{
|
|
||||||
role: "user",
|
|
||||||
content: userPrompt,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
output: {
|
|
||||||
prompt: zod.string().describe("提示词"),
|
|
||||||
},
|
},
|
||||||
});
|
{
|
||||||
|
...apiConfig,
|
||||||
|
},
|
||||||
|
);
|
||||||
// const result = await model.invoke({
|
// const result = await model.invoke({
|
||||||
// messages: [
|
// messages: [
|
||||||
// {
|
// {
|
||||||
@ -224,7 +248,7 @@ export default router.post(
|
|||||||
// },
|
// },
|
||||||
// },
|
// },
|
||||||
// });
|
// });
|
||||||
return prompt;
|
return result.prompt;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const prompt = (await generatePrompt()) as any;
|
const prompt = (await generatePrompt()) as any;
|
||||||
|
|||||||
@ -8,25 +8,47 @@ const router = express.Router();
|
|||||||
|
|
||||||
type GenerateMode = "startEnd" | "multi" | "single";
|
type GenerateMode = "startEnd" | "multi" | "single";
|
||||||
|
|
||||||
const getSystemPrompt = async (mode: GenerateMode): Promise<string> => {
|
const getSystemPrompt = async (mode: GenerateMode): Promise<{ prompt: string; apiConfig: Object }> => {
|
||||||
const promptsList = await u.db("t_prompts").where("code", "in", ["video-startEnd", "video-multi", "video-single", "video-main"]);
|
const promptsList = await u.db("t_prompts").where("code", "in", ["video-startEnd", "video-multi", "video-single", "video-main"]);
|
||||||
|
|
||||||
|
const promptAiConfig = await u.getPromptAi(promptsList.map((i) => i.id) as number[]);
|
||||||
|
|
||||||
const errPrompts = "不论用户说什么,请直接输出AI配置异常";
|
const errPrompts = "不论用户说什么,请直接输出AI配置异常";
|
||||||
const getPromptValue = (code: string): string => {
|
const getPromptValue = (code: string) => {
|
||||||
const item = promptsList.find((p) => p.code === code);
|
const item = promptsList.find((p) => p.code === code);
|
||||||
return item?.customValue ?? item?.defaultValue ?? errPrompts;
|
const subData = promptAiConfig.find((i) => i?.promptsId == item?.id);
|
||||||
|
const returnData = {
|
||||||
|
prompt: item?.customValue ?? item?.defaultValue ?? errPrompts,
|
||||||
|
apiConfig: {},
|
||||||
|
};
|
||||||
|
if (subData) {
|
||||||
|
returnData.apiConfig = { ...subData };
|
||||||
|
return returnData;
|
||||||
|
} else {
|
||||||
|
return returnData;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
const startEnd = getPromptValue("video-startEnd");
|
const startEnd = getPromptValue("video-startEnd");
|
||||||
const multi = getPromptValue("video-multi");
|
const multi = getPromptValue("video-multi");
|
||||||
const single = getPromptValue("video-single");
|
const single = getPromptValue("video-single");
|
||||||
const main = getPromptValue("video-main");
|
const main = getPromptValue("video-main");
|
||||||
|
|
||||||
const modeDescriptions: Record<GenerateMode, string> = {
|
const modeDescriptions: Record<
|
||||||
|
GenerateMode,
|
||||||
|
{
|
||||||
|
prompt: string;
|
||||||
|
apiConfig: Object;
|
||||||
|
}
|
||||||
|
> = {
|
||||||
startEnd: startEnd,
|
startEnd: startEnd,
|
||||||
multi: multi,
|
multi: multi,
|
||||||
single: single,
|
single: single,
|
||||||
};
|
};
|
||||||
|
const modeData = modeDescriptions[mode];
|
||||||
return `${main}\n\n${modeDescriptions[mode]}`;
|
return {
|
||||||
|
prompt: `${main}\n\n${modeData.prompt}`,
|
||||||
|
apiConfig: modeData.apiConfig,
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const getModeDescription = (mode: GenerateMode): string => {
|
const getModeDescription = (mode: GenerateMode): string => {
|
||||||
@ -59,16 +81,17 @@ export default router.post(
|
|||||||
|
|
||||||
const shotCount = images.length;
|
const shotCount = images.length;
|
||||||
const avgDuration = (parseFloat(duration) / shotCount).toFixed(1);
|
const avgDuration = (parseFloat(duration) / shotCount).toFixed(1);
|
||||||
|
const promptConfig = await getSystemPrompt(mode);
|
||||||
const result = await u.ai.text.invoke({
|
const result = await u.ai.text.invoke(
|
||||||
messages: [
|
{
|
||||||
{
|
messages: [
|
||||||
role: "system",
|
{
|
||||||
content: await getSystemPrompt(mode),
|
role: "system",
|
||||||
},
|
content: promptConfig.prompt,
|
||||||
{
|
},
|
||||||
role: "user",
|
{
|
||||||
content: `Mode: ${getModeDescription(mode)}
|
role: "user",
|
||||||
|
content: `Mode: ${getModeDescription(mode)}
|
||||||
|
|
||||||
Reference Images:
|
Reference Images:
|
||||||
${imagePrompts}
|
${imagePrompts}
|
||||||
@ -82,10 +105,11 @@ Parameters:
|
|||||||
- Average Duration: ${avgDuration}s per shot
|
- Average Duration: ${avgDuration}s per shot
|
||||||
|
|
||||||
Generate storyboard prompts:`,
|
Generate storyboard prompts:`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
},
|
||||||
console.log("%c Line:64 🥕 result", "background:#7f2b82", result.text);
|
promptConfig.apiConfig,
|
||||||
|
);
|
||||||
|
|
||||||
res.status(200).send(success(result.text));
|
res.status(200).send(success(result.text));
|
||||||
},
|
},
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import AIText from "@/utils/ai/text/index";
|
|||||||
import AIImage from "@/utils/ai/image/index";
|
import AIImage from "@/utils/ai/image/index";
|
||||||
import AIVideo from "@/utils/ai/video/index";
|
import AIVideo from "@/utils/ai/video/index";
|
||||||
|
|
||||||
|
import getPromptAi from "./utils/getPromptAi";
|
||||||
export default {
|
export default {
|
||||||
db,
|
db,
|
||||||
oss,
|
oss,
|
||||||
@ -28,4 +29,5 @@ export default {
|
|||||||
uuid,
|
uuid,
|
||||||
error,
|
error,
|
||||||
imageTools,
|
imageTools,
|
||||||
|
getPromptAi,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import { devToolsMiddleware } from "@ai-sdk/devtools";
|
|||||||
import { parse } from "best-effort-json-parser";
|
import { parse } from "best-effort-json-parser";
|
||||||
import modelList from "./modelList";
|
import modelList from "./modelList";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
import { OpenAIProvider } from "@ai-sdk/openai";
|
||||||
|
|
||||||
interface AIInput<T extends Record<string, z.ZodTypeAny> | undefined = undefined> {
|
interface AIInput<T extends Record<string, z.ZodTypeAny> | undefined = undefined> {
|
||||||
system?: string;
|
system?: string;
|
||||||
@ -19,17 +20,22 @@ interface AIConfig {
|
|||||||
model?: string;
|
model?: string;
|
||||||
apiKey?: string;
|
apiKey?: string;
|
||||||
baseURL?: string;
|
baseURL?: string;
|
||||||
|
manufacturer?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const buildOptions = async (input: AIInput<any>, config: AIConfig) => {
|
const buildOptions = async (input: AIInput<any>, config: AIConfig) => {
|
||||||
let sqlTextModelConfig = {};
|
let sqlTextModelConfig = {};
|
||||||
if (!config || !config?.model || !config?.apiKey || !config?.baseURL) sqlTextModelConfig = await u.getConfig("text");
|
if (!config || !config?.model || !config?.apiKey || !config?.baseURL) sqlTextModelConfig = await u.getConfig("text");
|
||||||
const { model, apiKey, baseURL } = { ...sqlTextModelConfig, ...config };
|
const { model, apiKey, baseURL, manufacturer } = { ...(sqlTextModelConfig as Awaited<ReturnType<typeof u.getConfig>>), ...config };
|
||||||
|
let owned;
|
||||||
const owned = modelList.find((m) => m.model === model);
|
if (manufacturer == "other") {
|
||||||
|
owned = modelList.find((m) => m.manufacturer === manufacturer);
|
||||||
|
} else {
|
||||||
|
owned = modelList.find((m) => m.model === model);
|
||||||
|
}
|
||||||
if (!owned) throw new Error("不支持的模型或厂商");
|
if (!owned) throw new Error("不支持的模型或厂商");
|
||||||
|
|
||||||
const modelInstance = owned.instance({ apiKey, baseURL });
|
const modelInstance = owned.instance({ apiKey, baseURL: baseURL!, name: "xixixi" });
|
||||||
|
|
||||||
const maxStep = input.maxStep ?? (input.tools ? Object.keys(input.tools).length * 5 : undefined);
|
const maxStep = input.maxStep ?? (input.tools ? Object.keys(input.tools).length * 5 : undefined);
|
||||||
const outputBuilders: Record<string, (schema: any) => any> = {
|
const outputBuilders: Record<string, (schema: any) => any> = {
|
||||||
@ -46,16 +52,16 @@ const buildOptions = async (input: AIInput<any>, config: AIConfig) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const output = input.output ? (outputBuilders[owned.responseFormat]?.(input.output) ?? null) : null;
|
const output = input.output ? (outputBuilders[owned.responseFormat]?.(input.output) ?? null) : null;
|
||||||
|
const modelFn = owned.manufacturer == "doubao" ? (modelInstance as OpenAIProvider).chat(model!) : modelInstance(model!);
|
||||||
return {
|
return {
|
||||||
config: {
|
config: {
|
||||||
model:
|
model:
|
||||||
process.env.NODE_ENV === "dev"
|
process.env.NODE_ENV === "dev"
|
||||||
? wrapLanguageModel({
|
? wrapLanguageModel({
|
||||||
model: modelInstance.chat(model!) as any,
|
model: modelFn as any,
|
||||||
middleware: devToolsMiddleware(),
|
middleware: devToolsMiddleware(),
|
||||||
})
|
})
|
||||||
: (modelInstance(model!) as LanguageModel),
|
: (modelFn as LanguageModel),
|
||||||
...(input.system && { system: input.system }),
|
...(input.system && { system: input.system }),
|
||||||
...(input.prompt ? { prompt: input.prompt } : { messages: input.messages! }),
|
...(input.prompt ? { prompt: input.prompt } : { messages: input.messages! }),
|
||||||
...(input.tools && owned.tool && { tools: input.tools }),
|
...(input.tools && owned.tool && { tools: input.tools }),
|
||||||
|
|||||||
@ -127,15 +127,18 @@ ${episodePrompt}
|
|||||||
${novelData}`;
|
${novelData}`;
|
||||||
|
|
||||||
const prompts = await u.db("t_prompts").where("code", "script").first();
|
const prompts = await u.db("t_prompts").where("code", "script").first();
|
||||||
|
const promptConfig = await u.getPromptAi(prompts?.id);
|
||||||
const mainPrompts = prompts?.customValue || prompts?.defaultValue || "不论用户说什么,请直接输出AI配置异常";
|
const mainPrompts = prompts?.customValue || prompts?.defaultValue || "不论用户说什么,请直接输出AI配置异常";
|
||||||
|
|
||||||
const result = await u.ai.text.invoke({
|
const result = await u.ai.text.invoke(
|
||||||
messages: [
|
{
|
||||||
{ role: "system", content: mainPrompts },
|
messages: [
|
||||||
{ role: "user", content: userPrompt },
|
{ role: "system", content: mainPrompts },
|
||||||
],
|
{ role: "user", content: userPrompt },
|
||||||
});
|
],
|
||||||
|
},
|
||||||
|
promptConfig,
|
||||||
|
);
|
||||||
|
|
||||||
return result.text ?? "";
|
return result.text ?? "";
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,12 +10,12 @@ interface BaseConfig {
|
|||||||
|
|
||||||
interface TextResData extends BaseConfig {
|
interface TextResData extends BaseConfig {
|
||||||
baseURL: string;
|
baseURL: string;
|
||||||
manufacturer: "deepseek" | "openAi" | "doubao";
|
manufacturer: "deepseek" | "openAi" | "doubao" | "other";
|
||||||
}
|
}
|
||||||
|
|
||||||
// 图像模型配置接口
|
// 图像模型配置接口
|
||||||
interface ImageResData extends BaseConfig {
|
interface ImageResData extends BaseConfig {
|
||||||
manufacturer: "gemini" | "volcengine" | "kling" | "vidu" | "runninghub" | "apimart";
|
manufacturer: "gemini" | "volcengine" | "kling" | "vidu" | "runninghub" | "apimart" | "other";
|
||||||
}
|
}
|
||||||
|
|
||||||
interface VideoResData extends BaseConfig {
|
interface VideoResData extends BaseConfig {
|
||||||
|
|||||||
26
src/utils/getPromptAi.ts
Normal file
26
src/utils/getPromptAi.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import { db } from "./db";
|
||||||
|
interface AiConfig {
|
||||||
|
model: string;
|
||||||
|
apiKey: string;
|
||||||
|
baseUrl: string;
|
||||||
|
manufacturer: string;
|
||||||
|
promptsId: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default async function getPromptAi(promptsId: number | undefined): Promise<AiConfig | {}>;
|
||||||
|
export default async function getPromptAi(promptsId: number[]): Promise<AiConfig[]>;
|
||||||
|
|
||||||
|
export default async function getPromptAi(promptsId: number | number[] | undefined): Promise<AiConfig | AiConfig[] | {}> {
|
||||||
|
if (!promptsId) return {};
|
||||||
|
const ids = Array.isArray(promptsId) ? promptsId.filter(Boolean) : [promptsId];
|
||||||
|
const mapList = await db("t_aiModelMap")
|
||||||
|
.leftJoin("t_config", "t_config.id", "t_aiModelMap.configId")
|
||||||
|
.whereIn("t_aiModelMap.promptsId", ids)
|
||||||
|
.select("t_config.model", "t_config.apiKey", "t_config.baseUrl", "t_config.manufacturer", "t_aiModelMap.promptsId");
|
||||||
|
|
||||||
|
if (Array.isArray(promptsId)) {
|
||||||
|
return mapList as AiConfig[];
|
||||||
|
} else {
|
||||||
|
return mapList[0] ? (mapList[0] as AiConfig) : {};
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user