MeanAudio / feedback_collector.py
AndreasXi's picture
add rlhf
629a90b
#!/usr/bin/env python3
"""
简单的反馈收集工具
在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)