55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
"""剧本优化 Agent:ScriptOptimizerAgent"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from typing import Any
|
||
|
||
from langchain_core.prompts import PromptTemplate
|
||
|
||
from app.chains.agents.base import AgentBase
|
||
from app.schemas.skills.script_processing import ScriptOptimizationResult
|
||
|
||
_SCRIPT_OPTIMIZER_SYSTEM_PROMPT = """\
|
||
你是\"剧本优化师\"。仅当一致性检查发现角色混淆问题时,对原文进行最小改写以消除混淆。
|
||
|
||
输入:
|
||
- script_text:原文
|
||
- consistency_json:一致性检查输出(ScriptConsistencyCheckResult)
|
||
|
||
输出 ScriptOptimizationResult:
|
||
- optimized_script_text:优化后的完整剧本文本(尽量少改,只改与 issues 相关的段落)
|
||
- change_summary:逐条对应 issues 的改动摘要
|
||
|
||
只输出 JSON。
|
||
"""
|
||
|
||
SCRIPT_OPTIMIZER_PROMPT = PromptTemplate(
|
||
input_variables=["script_text", "consistency_json"],
|
||
template="## 一致性检查结果\n{consistency_json}\n\n## 原文剧本\n{script_text}\n\n## 输出\n",
|
||
)
|
||
|
||
|
||
class ScriptOptimizerAgent(AgentBase[ScriptOptimizationResult]):
|
||
"""剧本优化 Agent:输入一致性检查输出 + 原文,输出优化后的剧本。"""
|
||
|
||
@property
|
||
def system_prompt(self) -> str:
|
||
return _SCRIPT_OPTIMIZER_SYSTEM_PROMPT
|
||
|
||
@property
|
||
def prompt_template(self) -> PromptTemplate:
|
||
return SCRIPT_OPTIMIZER_PROMPT
|
||
|
||
@property
|
||
def output_model(self) -> type[ScriptOptimizationResult]:
|
||
return ScriptOptimizationResult
|
||
|
||
def _normalize(self, data: dict[str, Any]) -> dict[str, Any]:
|
||
data = dict(data)
|
||
if "optimized_script_text" not in data:
|
||
data["optimized_script_text"] = ""
|
||
if "change_summary" not in data:
|
||
data["change_summary"] = ""
|
||
return data
|
||
|