|
|
|
""" |
|
简单的反馈收集工具 |
|
在MeanAudio生成音频后,运行此脚本收集用户偏好 |
|
""" |
|
|
|
import json |
|
import os |
|
import sys |
|
from datetime import datetime |
|
from pathlib import Path |
|
import gradio as gr |
|
|
|
|
|
FEEDBACK_DIR = Path("./rlhf_feedback") |
|
FEEDBACK_DIR.mkdir(exist_ok=True) |
|
FEEDBACK_FILE = FEEDBACK_DIR / "user_preferences.jsonl" |
|
|
|
def save_feedback(audio1_path, audio2_path, prompt, preference, comment=""): |
|
"""保存反馈数据""" |
|
feedback_data = { |
|
"timestamp": datetime.now().isoformat(), |
|
"prompt": prompt, |
|
"audio1_path": audio1_path, |
|
"audio2_path": audio2_path, |
|
"preference": preference, |
|
"additional_comment": comment |
|
} |
|
|
|
with open(FEEDBACK_FILE, "a", encoding="utf-8") as f: |
|
f.write(json.dumps(feedback_data, ensure_ascii=False) + "\n") |
|
|
|
return f"✅ 反馈已保存!偏好: {preference}" |
|
|
|
def create_feedback_interface(): |
|
"""创建反馈收集界面""" |
|
|
|
with gr.Blocks(title="MeanAudio 反馈收集器") as demo: |
|
gr.Markdown("# MeanAudio 反馈收集器") |
|
gr.Markdown("*请输入生成的音频文件路径和提示词,然后选择您的偏好*") |
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
prompt_input = gr.Textbox( |
|
label="提示词", |
|
placeholder="输入用于生成音频的提示词..." |
|
) |
|
|
|
audio1_path = gr.Textbox( |
|
label="音频文件1路径", |
|
placeholder="./output/gradio/prompt_timestamp_0.flac" |
|
) |
|
|
|
audio2_path = gr.Textbox( |
|
label="音频文件2路径", |
|
placeholder="./output/gradio/prompt_timestamp_1.flac" |
|
) |
|
|
|
with gr.Column(): |
|
|
|
audio1_player = gr.Audio(label="音频1") |
|
audio2_player = gr.Audio(label="音频2") |
|
|
|
load_btn = gr.Button("🔄 加载音频文件") |
|
|
|
|
|
gr.Markdown("---") |
|
gr.Markdown("### 请选择您的偏好") |
|
|
|
preference = gr.Radio( |
|
choices=[ |
|
("音频1更好", "audio1"), |
|
("音频2更好", "audio2"), |
|
("两者质量相等", "equal"), |
|
("两者都不好", "both_bad") |
|
], |
|
label="哪个音频更好?" |
|
) |
|
|
|
comment = gr.Textbox( |
|
label="额外评论 (可选)", |
|
placeholder="关于音频质量的具体反馈...", |
|
lines=3 |
|
) |
|
|
|
submit_btn = gr.Button("📝 提交反馈", variant="primary") |
|
|
|
result = gr.Textbox(label="结果", interactive=False) |
|
|
|
|
|
def load_audio_files(path1, path2): |
|
"""加载音频文件用于播放""" |
|
audio1 = path1 if os.path.exists(path1) else None |
|
audio2 = path2 if os.path.exists(path2) else None |
|
return audio1, audio2 |
|
|
|
load_btn.click( |
|
fn=load_audio_files, |
|
inputs=[audio1_path, audio2_path], |
|
outputs=[audio1_player, audio2_player] |
|
) |
|
|
|
submit_btn.click( |
|
fn=save_feedback, |
|
inputs=[audio1_path, audio2_path, prompt_input, preference, comment], |
|
outputs=[result] |
|
) |
|
|
|
|
|
gr.Markdown("---") |
|
gr.Markdown(""" |
|
### 使用说明 |
|
1. 先运行 MeanAudio 生成两个音频文件 |
|
2. 将生成的音频文件路径复制到上面的输入框中 |
|
3. 点击"加载音频文件"来播放音频 |
|
4. 选择您的偏好并提交反馈 |
|
5. 反馈数据将保存到 `./rlhf_feedback/user_preferences.jsonl` |
|
6. 使用 `python analyze_feedback.py` 分析收集的反馈数据 |
|
""") |
|
|
|
return demo |
|
|
|
if __name__ == "__main__": |
|
demo = create_feedback_interface() |
|
print("启动反馈收集界面...") |
|
print(f"反馈数据将保存到: {FEEDBACK_FILE}") |
|
demo.launch(server_name="127.0.0.1", server_port=7861) |
|
|