Spaces:
Running
Running
Update prompt_engine.py
Browse files- prompt_engine.py +78 -4
prompt_engine.py
CHANGED
|
@@ -52,13 +52,77 @@ class PromptGenerator:
|
|
| 52 |
2. その後に「解説:」という見出しをつけて、使用したテクニックの説明を記載してください。
|
| 53 |
"""
|
| 54 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 55 |
def generate_prompt(self, groq_client, params):
|
| 56 |
"""プロンプト生成のメインメソッド"""
|
| 57 |
try:
|
| 58 |
-
#
|
| 59 |
-
|
| 60 |
|
| 61 |
-
#
|
|
|
|
|
|
|
|
|
|
| 62 |
model = params.get("model", "llama-3.3-70b-versatile")
|
| 63 |
|
| 64 |
# モデルごとの最適なパラメータ設定
|
|
@@ -90,7 +154,7 @@ class PromptGenerator:
|
|
| 90 |
except Exception as e:
|
| 91 |
return f"エラーが発生しました: {str(e)}"
|
| 92 |
|
| 93 |
-
def _build_user_message(self, params):
|
| 94 |
"""ユーザーメッセージの構築"""
|
| 95 |
# 基本情報
|
| 96 |
mode = "MidJourney" if params["mode"] == "midjourney" else "nijiJourney"
|
|
@@ -109,6 +173,16 @@ class PromptGenerator:
|
|
| 109 |
入力: {params["input"]}
|
| 110 |
モード: {mode}
|
| 111 |
複雑さ: {complexity}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 112 |
"""
|
| 113 |
|
| 114 |
# 基本設定
|
|
|
|
| 52 |
2. その後に「解説:」という見出しをつけて、使用したテクニックの説明を記載してください。
|
| 53 |
"""
|
| 54 |
|
| 55 |
+
def analyze_user_input(self, groq_client, user_input, model="qwen-qwq-32b"):
|
| 56 |
+
"""Qwenモデルでユーザー入力を分析する"""
|
| 57 |
+
# 中国語のプロンプトを使用
|
| 58 |
+
analysis_prompt = """
|
| 59 |
+
你是一个具有高级思维能力的AI。在解决问题时,必须严格按照以下"思维链"格式执行,确保真正的链式思考得以展现。你需要分析用户对AI绘画的输入要求,深入理解用户想要生成的图像。
|
| 60 |
+
## 重要禁止事项
|
| 61 |
+
- 禁止输出任何形式的代码!
|
| 62 |
+
- 禁止输出任何调试或系统信息!
|
| 63 |
+
- 禁止跳过任何分析步骤!
|
| 64 |
+
- 禁止使用自己的格式代替指定模板!
|
| 65 |
+
- 禁止使用<tool_response>、</tool_call>或任何其他未指定的标签!
|
| 66 |
+
## 1. 思考结构(必须严格遵循)
|
| 67 |
+
`<think>
|
| 68 |
+
### 初始分析(每项≤30字)
|
| 69 |
+
- 要求分析: [详述显性与隐性要素]
|
| 70 |
+
- 主题元素: [主要主题/对象]
|
| 71 |
+
- 背景元素: [场景/环境/时间]
|
| 72 |
+
- 情感元素: [应表达的情感/氛围]
|
| 73 |
+
- 风格元素: [期望的艺术形式/风格]
|
| 74 |
+
|
| 75 |
+
### 视觉洞察(每项≤40字)
|
| 76 |
+
- 初始洞察→[对用户要求的第一印象]
|
| 77 |
+
- 构图洞察→[最佳构图和视角]
|
| 78 |
+
- 色彩洞察→[色调和对比度的考量]
|
| 79 |
+
- 技术洞察→[应用的绘画技术/效果]
|
| 80 |
+
- 隐藏元素→[未明确但重要的视觉元素]
|
| 81 |
+
|
| 82 |
+
### 改进洞察(每项≤40字)
|
| 83 |
+
- 具体化→[如何使模糊表达更具体]
|
| 84 |
+
- 强调→[应特别强调的视觉元素]
|
| 85 |
+
- 添加→[添加后效果更佳的元素]
|
| 86 |
+
- 平衡→[元素间的优先级和平衡]
|
| 87 |
+
|
| 88 |
+
### 最终分析
|
| 89 |
+
- 最佳表达:[最有效的表达方式建议]
|
| 90 |
+
- 重要关键词:[应包含在提示中的重要英文单词,用逗号分隔]
|
| 91 |
+
</think>\n`
|
| 92 |
+
## 2. 输出格式
|
| 93 |
+
完成思考后,必须以以下格式输出:
|
| 94 |
+
1. **"TYPE:AI_ART"**
|
| 95 |
+
2. **"SUBJECT:[用英文简述主题]"**
|
| 96 |
+
3. **"STYLE:[用英文简述最佳艺术风格]"**
|
| 97 |
+
4. **"KEYWORDS:[用英文列出重要关键词,逗号分隔]"**
|
| 98 |
+
5. **"MEMO:[用日语特别说明,≤50字]"**
|
| 99 |
+
"""
|
| 100 |
+
|
| 101 |
+
try:
|
| 102 |
+
response = groq_client.chat.completions.create(
|
| 103 |
+
model=model,
|
| 104 |
+
messages=[
|
| 105 |
+
{"role": "system", "content": analysis_prompt},
|
| 106 |
+
{"role": "user", "content": user_input}
|
| 107 |
+
],
|
| 108 |
+
temperature=0.7,
|
| 109 |
+
max_tokens=1024,
|
| 110 |
+
)
|
| 111 |
+
|
| 112 |
+
return response.choices[0].message.content
|
| 113 |
+
except Exception as e:
|
| 114 |
+
return f"分析エラー: {str(e)}"
|
| 115 |
+
|
| 116 |
def generate_prompt(self, groq_client, params):
|
| 117 |
"""プロンプト生成のメインメソッド"""
|
| 118 |
try:
|
| 119 |
+
# 1. まずQwenモデルでユーザー入力を分析
|
| 120 |
+
analysis = self.analyze_user_input(groq_client, params["input"])
|
| 121 |
|
| 122 |
+
# 2. 分析結果を含めたユーザーメッセージの構築
|
| 123 |
+
user_message = self._build_user_message(params, analysis)
|
| 124 |
+
|
| 125 |
+
# 3. 選択されたモデルでプロンプト生成
|
| 126 |
model = params.get("model", "llama-3.3-70b-versatile")
|
| 127 |
|
| 128 |
# モデルごとの最適なパラメータ設定
|
|
|
|
| 154 |
except Exception as e:
|
| 155 |
return f"エラーが発生しました: {str(e)}"
|
| 156 |
|
| 157 |
+
def _build_user_message(self, params, analysis=None):
|
| 158 |
"""ユーザーメッセージの構築"""
|
| 159 |
# 基本情報
|
| 160 |
mode = "MidJourney" if params["mode"] == "midjourney" else "nijiJourney"
|
|
|
|
| 173 |
入力: {params["input"]}
|
| 174 |
モード: {mode}
|
| 175 |
複雑さ: {complexity}
|
| 176 |
+
"""
|
| 177 |
+
|
| 178 |
+
# 分析結果があれば追加
|
| 179 |
+
if analysis:
|
| 180 |
+
message += f"""
|
| 181 |
+
\n分析結果:
|
| 182 |
+
{analysis}
|
| 183 |
+
|
| 184 |
+
この分析結果を考慮して、ユーザーの元の入力内容({params["input"]})の本質を必ず維持してください。
|
| 185 |
+
特に主体となる対象や重要な要素は絶対に変更せず、それらを基に最適なプロンプトを生成してください。
|
| 186 |
"""
|
| 187 |
|
| 188 |
# 基本設定
|