free514dom's picture
Update app.py
83dbe28 verified
Raw
History Blame Contribute Delete
3.69 kB
import gradio as gr
from huggingface_hub import hf_hub_download
from llama_cpp import Llama
from faster_whisper import WhisperModel
# ==========================================
# 1. 初始化大语言模型 (反欺诈分析大脑)
# ==========================================
REPO_ID = "mradermacher/AntiFraud-SFT-GGUF"
MODEL_FILE = "AntiFraud-SFT.Q4_K_M.gguf"
print("正在下载 LLM 模型文件...")
model_path = hf_hub_download(repo_id=REPO_ID, filename=MODEL_FILE)
print("正在加载大语言模型...")
# 移除之前的 Llava Handler,现在作为纯文本模型加载
llm = Llama(
model_path=model_path,
n_ctx=2048, # 上下文窗口
n_threads=4 # CPU 线程数
)
# ==========================================
# 2. 初始化语音识别模型 (充当模型的"耳朵")
# ==========================================
print("正在加载 Whisper 语音识别模型...")
# 使用 "base" 模型,体积小巧(约140MB),在免费 CPU 上运行飞快
asr_model = WhisperModel("medium", device="cpu", compute_type="int8")
# ==========================================
# 3. 核心处理逻辑:先听后想
# ==========================================
def predict_fraud(audio_file, text_prompt):
transcribed_text = ""
# 步骤 A:语音转文字 (ASR)
if audio_file is not None:
print("开始提取音频文字...")
# beam_size 适当调小加快 CPU 推理速度
segments, info = asr_model.transcribe(audio_file, beam_size=3, language="zh")
transcribed_text = "".join([segment.text for segment in segments])
# 步骤 B:构建最终给大模型的 Prompt
if transcribed_text:
combined_prompt = (
f"以下是拦截到的通话录音文本:\n「{transcribed_text}」\n\n"
f"用户指令:{text_prompt if text_prompt else '请分析这段对话是否存在电信诈骗风险,并指出可疑点。'}"
)
else:
combined_prompt = text_prompt if text_prompt else "请分析是否存在电信诈骗风险。"
# 步骤 C:将拼接好的文本发给大模型进行反诈分析
messages = [
{"role": "system", "content": "你是一个专业的反电信诈骗分析专家。你的任务是根据通话文本识别潜在的诈骗风险,并给出客观的分析。"},
{"role": "user", "content": combined_prompt}
]
print("开始进行反诈推理解析...")
response = llm.create_chat_completion(
messages=messages,
max_tokens=512,
temperature=0.2,
)
analysis_result = response["choices"][0]["message"]["content"]
# 返回两个结果:让用户看到转录文字,以及最终的分析报告
return transcribed_text if transcribed_text else "未检测到音频或上传为空", analysis_result
# ==========================================
# 4. 构建 Gradio 可视化界面
# ==========================================
demo = gr.Interface(
fn=predict_fraud,
inputs=[
gr.Audio(type="filepath", label="1. 上传或录制可疑音频 (WAV/MP3等)"),
gr.Textbox(label="2. 输入附加提示 (可选)", value="请分析这段对话是否存在电信诈骗。")
],
outputs=[
gr.Textbox(label="🎧 Whisper 音频识别结果 (校对用)", lines=2),
gr.Textbox(label="🛡️ 模型反欺诈分析报告", lines=6)
],
title="AntiFraud-SFT 智能反欺诈检测站 (ASR级联版)",
description="通过 Faster-Whisper 进行极速语音识别,再由 Qwen2-Audio 微调模型进行欺诈逻辑分析。完全兼容免费 CPU 部署。",
api_name="analyze"
)
if __name__ == "__main__":
demo.launch()