Spaces:
Running
Running
Update prompt_engine.py
Browse files- prompt_engine.py +51 -9
prompt_engine.py
CHANGED
@@ -1,4 +1,6 @@
|
|
1 |
import json
|
|
|
|
|
2 |
|
3 |
class PromptGenerator:
|
4 |
def __init__(self):
|
@@ -113,11 +115,11 @@ class PromptGenerator:
|
|
113 |
except Exception as e:
|
114 |
return f"分析エラー: {str(e)}"
|
115 |
|
116 |
-
def generate_prompt(self,
|
117 |
"""プロンプト生成のメインメソッド"""
|
118 |
try:
|
119 |
# 1. まずQwenモデルでユーザー入力を分析
|
120 |
-
analysis = self.analyze_user_input(
|
121 |
|
122 |
# 2. 分析結果を含めたユーザーメッセージの構築
|
123 |
user_message = self._build_user_message(params, analysis)
|
@@ -136,9 +138,12 @@ class PromptGenerator:
|
|
136 |
elif "qwen" in model:
|
137 |
# 創造性に特化したモデルはさらに高い値
|
138 |
temperature = 0.85
|
|
|
|
|
|
|
139 |
|
140 |
# Groq APIでプロンプト生成
|
141 |
-
response =
|
142 |
model=model, # 選択されたモデルを使用
|
143 |
messages=[
|
144 |
{"role": "system", "content": self.system_prompt},
|
@@ -154,6 +159,45 @@ class PromptGenerator:
|
|
154 |
except Exception as e:
|
155 |
return f"エラーが発生しました: {str(e)}"
|
156 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
157 |
def _build_user_message(self, params, analysis=None):
|
158 |
"""ユーザーメッセージの構築"""
|
159 |
# 基本情報
|
@@ -184,7 +228,7 @@ class PromptGenerator:
|
|
184 |
この分析結果を考慮して、以下の重要なガイドラインに従ってプロンプトを生成してください:
|
185 |
|
186 |
1. プロンプトは必ず英語で生成すること(システムタグやパラメータ名も含め)
|
187 |
-
2. ユーザーの元の入力内容({params["input"]}
|
188 |
3. 主体となる対象や重要な要素は絶対に変更しないこと
|
189 |
例:「イルカ」を「シャチ」に変えるなど種類/種別を変更しない
|
190 |
例:「猫」を「虎」に変えるなど、近い種でも誤変換しない
|
@@ -197,11 +241,9 @@ class PromptGenerator:
|
|
197 |
7. 代替解釈の可能性がある場合は、ユーザーの意図に最も近いと思われる解釈を選択すること
|
198 |
8. システムタグやパラメータ内の言語も必ず英語にすること(例:「图像:」→「image:」)
|
199 |
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
- 重み付けシステム(::1.2など)で重要な要素を強調
|
204 |
-
- MidJourney/nijiJourney固有のパラメータを効果的に活用
|
205 |
"""
|
206 |
|
207 |
# 基本設定
|
|
|
1 |
import json
|
2 |
+
import os
|
3 |
+
import requests
|
4 |
|
5 |
class PromptGenerator:
|
6 |
def __init__(self):
|
|
|
115 |
except Exception as e:
|
116 |
return f"分析エラー: {str(e)}"
|
117 |
|
118 |
+
def generate_prompt(self, client, params):
|
119 |
"""プロンプト生成のメインメソッド"""
|
120 |
try:
|
121 |
# 1. まずQwenモデルでユーザー入力を分析
|
122 |
+
analysis = self.analyze_user_input(client, params["input"])
|
123 |
|
124 |
# 2. 分析結果を含めたユーザーメッセージの構築
|
125 |
user_message = self._build_user_message(params, analysis)
|
|
|
138 |
elif "qwen" in model:
|
139 |
# 創造性に特化したモデルはさらに高い値
|
140 |
temperature = 0.85
|
141 |
+
elif "o4-mini" in model:
|
142 |
+
# OpenAI GPT APIの場合
|
143 |
+
return self._generate_with_openai(params, user_message)
|
144 |
|
145 |
# Groq APIでプロンプト生成
|
146 |
+
response = client.chat.completions.create(
|
147 |
model=model, # 選択されたモデルを使用
|
148 |
messages=[
|
149 |
{"role": "system", "content": self.system_prompt},
|
|
|
159 |
except Exception as e:
|
160 |
return f"エラーが発生しました: {str(e)}"
|
161 |
|
162 |
+
def _generate_with_openai(self, params, user_message):
|
163 |
+
"""OpenAI GPT APIを使用してプロンプトを生成"""
|
164 |
+
try:
|
165 |
+
# OpenAI APIキーを環境変数から取得
|
166 |
+
api_key = os.environ.get("OPENAI_API_KEY")
|
167 |
+
if not api_key:
|
168 |
+
return "OpenAI APIキーが設定されていません。"
|
169 |
+
|
170 |
+
# OpenAI APIのエンドポイント
|
171 |
+
url = "https://api.openai.com/v1/chat/completions"
|
172 |
+
|
173 |
+
# ヘッダー情報
|
174 |
+
headers = {
|
175 |
+
"Content-Type": "application/json",
|
176 |
+
"Authorization": f"Bearer {api_key}"
|
177 |
+
}
|
178 |
+
|
179 |
+
# リクエストボディ
|
180 |
+
data = {
|
181 |
+
"model": "o4-mini-2025-04-16",
|
182 |
+
"max_tokens": 2048,
|
183 |
+
"temperature": 0.75,
|
184 |
+
"messages": [
|
185 |
+
{"role": "system", "content": self.system_prompt},
|
186 |
+
{"role": "user", "content": user_message}
|
187 |
+
]
|
188 |
+
}
|
189 |
+
|
190 |
+
# APIリクエスト送信
|
191 |
+
response = requests.post(url, headers=headers, json=data)
|
192 |
+
response.raise_for_status()
|
193 |
+
|
194 |
+
# レスポンスの解析
|
195 |
+
result = response.json()
|
196 |
+
return result["choices"][0]["message"]["content"]
|
197 |
+
|
198 |
+
except Exception as e:
|
199 |
+
return f"OpenAI APIエラー: {str(e)}"
|
200 |
+
|
201 |
def _build_user_message(self, params, analysis=None):
|
202 |
"""ユーザーメッセージの構築"""
|
203 |
# 基本情報
|
|
|
228 |
この分析結果を考慮して、以下の重要なガイドラインに従ってプロンプトを生成してください:
|
229 |
|
230 |
1. プロンプトは必ず英語で生成すること(システムタグやパラメータ名も含め)
|
231 |
+
2. ユーザーの元の入力内容({params["input"]})を最優先し、その意図と本質を100%維持すること
|
232 |
3. 主体となる対象や重要な要素は絶対に変更しないこと
|
233 |
例:「イルカ」を「シャチ」に変えるなど種類/種別を変更しない
|
234 |
例:「猫」を「虎」に変えるなど、近い種でも誤変換しない
|
|
|
241 |
7. 代替解釈の可能性がある場合は、ユーザーの意図に最も近いと思われる解釈を選択すること
|
242 |
8. システムタグやパラメータ内の言語も必ず英語にすること(例:「图像:」→「image:」)
|
243 |
|
244 |
+
【重要】ユーザーの元の入力({params["input"]})を最も重視してください。分析結果はあくまで補助情報として使用し、
|
245 |
+
元の入力内容の意図を変えたり、要素を追加/除外したりしないでください。
|
246 |
+
プロンプトは必ずユーザーの入力を正確に英語に変換し、その上で適切なテクニックを適用してください。
|
|
|
|
|
247 |
"""
|
248 |
|
249 |
# 基本設定
|