|
|
|
|
|
|
|
|
|
|
|
|
|
|
import re |
|
|
import gradio as gr |
|
|
from transformers import pipeline |
|
|
|
|
|
|
|
|
prompt_analyzer = pipeline("text2text-generation", model="google/flan-t5-base") |
|
|
|
|
|
def analyze_prompt(user_prompt: str): |
|
|
""" |
|
|
ฟังก์ชันนี้จะ: |
|
|
1. ตรวจสอบความว่างเปล่าของ Prompt |
|
|
2. ส่ง Prompt เข้าโมเดล text2text-generation เพื่อขอ: |
|
|
- Rating (1–10) |
|
|
- Feedback (เหตุผลหรือคำแนะนำ) |
|
|
- Improvements (ตัวอย่าง Prompt ที่ปรับปรุงแล้ว) |
|
|
3. แยกวิเคราะห์ (Parse) ข้อความที่โมเดลตอบมา ด้วย Regex |
|
|
4. คืนค่าผลลัพธ์เป็น (rating, feedback, suggestions) |
|
|
""" |
|
|
|
|
|
if not user_prompt.strip(): |
|
|
return "N/A", "กรุณากรอก Prompt ที่ถูกต้อง", "ไม่มีคำแนะนำ" |
|
|
|
|
|
instruction = f""" |
|
|
คุณคือนักออกแบบ Prompt มืออาชีพ |
|
|
โปรดวิเคราะห์ Prompt ด้านล่างสำหรับการสร้างภาพด้วย AI |
|
|
|
|
|
Prompt: {user_prompt} |
|
|
|
|
|
1. ให้คะแนน (Rating) Prompt นี้แบบเต็ม 10 คะแนน |
|
|
2. อธิบายสั้น ๆ ว่าทำไมถึงได้คะแนนนี้ (Feedback) |
|
|
3. เขียน Prompt ที่ปรับปรุงให้ดีขึ้น (Improvements) อย่างน้อย 3 รูปแบบ |
|
|
|
|
|
กรุณาเรียบเรียงผลลัพธ์ตามโครงสร้าง: |
|
|
|
|
|
Rating: X |
|
|
Feedback: (อธิบาย) |
|
|
Improvements: |
|
|
1. ... |
|
|
2. ... |
|
|
3. ... |
|
|
""" |
|
|
|
|
|
|
|
|
model_response = prompt_analyzer(instruction, max_length=300)[0]["generated_text"] |
|
|
|
|
|
|
|
|
|
|
|
rating_pattern = r"Rating:\s*(\d+)" |
|
|
feedback_pattern = r"Feedback:\s*(.*?)(?=Improvements:|$)" |
|
|
improvements_pattern = r"Improvements:\s*(.*)" |
|
|
|
|
|
rating_match = re.search(rating_pattern, model_response) |
|
|
feedback_match = re.search(feedback_pattern, model_response, re.DOTALL) |
|
|
improvements_match = re.search(improvements_pattern, model_response, re.DOTALL) |
|
|
|
|
|
if rating_match: |
|
|
rating = rating_match.group(1).strip() |
|
|
else: |
|
|
rating = "N/A" |
|
|
|
|
|
if feedback_match: |
|
|
feedback = feedback_match.group(1).strip() |
|
|
else: |
|
|
feedback = "ไม่พบคำแนะนำ" |
|
|
|
|
|
if improvements_match: |
|
|
suggestions = improvements_match.group(1).strip() |
|
|
else: |
|
|
suggestions = "ไม่พบคำแนะนำ" |
|
|
|
|
|
return rating, feedback, suggestions |
|
|
|
|
|
|
|
|
example_prompts = [ |
|
|
"A majestic dragon soaring above a medieval castle, fantasy art style, highly detailed", |
|
|
"A peaceful countryside landscape with rolling hills and a small cottage at sunset", |
|
|
"A cyberpunk city scene with neon lights, flying cars, and towering skyscrapers", |
|
|
] |
|
|
|
|
|
|
|
|
def set_example_prompt(example): |
|
|
return example |
|
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
|
gr.Markdown(""" |
|
|
# แอปพลิเคชันเรียนรู้ Prompt Engineering แบบโต้ตอบ |
|
|
**(โดย สถาบัน Prompt Engineers Academy)** |
|
|
|
|
|
1. พิมพ์ Prompt ของคุณในช่องด้านล่าง |
|
|
2. คลิก "Evaluate Prompt" เพื่อรับคะแนน (Rating), ข้อเสนอแนะ (Feedback) และตัวอย่าง Prompt ที่ปรับปรุงแล้ว (Improvements) |
|
|
3. เลือก Prompt จากตัวอย่าง (Dropdown) เพื่อศึกษาเพิ่มเติมได้ |
|
|
""") |
|
|
|
|
|
with gr.Row(): |
|
|
with gr.Column(): |
|
|
example_dropdown = gr.Dropdown( |
|
|
label="ตัวอย่าง Prompt ที่มีให้", |
|
|
choices=example_prompts, |
|
|
value=None, |
|
|
interactive=True |
|
|
) |
|
|
user_prompt_input = gr.Textbox( |
|
|
label="ใส่ Prompt ของคุณ:", |
|
|
lines=4, |
|
|
placeholder="เช่น 'A futuristic cityscape with neon lights at night, highly detailed...'" |
|
|
) |
|
|
load_example_btn = gr.Button("Load Example Prompt") |
|
|
analyze_btn = gr.Button("Evaluate Prompt") |
|
|
|
|
|
with gr.Column(): |
|
|
score_output = gr.Textbox( |
|
|
label="คะแนน (Rating)", |
|
|
interactive=False |
|
|
) |
|
|
feedback_output = gr.Textbox( |
|
|
label="คำแนะนำ (Feedback)", |
|
|
lines=3, |
|
|
interactive=False |
|
|
) |
|
|
suggestions_output = gr.Textbox( |
|
|
label="Prompt ที่ปรับปรุงแล้ว (Improvements)", |
|
|
lines=6, |
|
|
interactive=False |
|
|
) |
|
|
|
|
|
load_example_btn.click( |
|
|
fn=set_example_prompt, |
|
|
inputs=[example_dropdown], |
|
|
outputs=[user_prompt_input] |
|
|
) |
|
|
|
|
|
analyze_btn.click( |
|
|
fn=analyze_prompt, |
|
|
inputs=[user_prompt_input], |
|
|
outputs=[score_output, feedback_output, suggestions_output] |
|
|
) |
|
|
|
|
|
|
|
|
demo.launch() |
|
|
|