File size: 2,732 Bytes
6e3dcd4
 
 
69c08a9
 
6e3dcd4
 
69c08a9
6e3dcd4
 
69c08a9
6e3dcd4
 
69c08a9
6e3dcd4
 
 
 
 
 
 
 
 
 
 
 
 
69c08a9
6e3dcd4
 
 
 
 
 
 
 
 
 
69c08a9
6e3dcd4
 
 
 
 
 
69c08a9
6e3dcd4
 
 
69c08a9
6e3dcd4
 
 
 
69c08a9
6e3dcd4
 
 
 
 
 
 
 
 
69c08a9
6e3dcd4
 
 
 
 
 
 
 
 
 
69c08a9
6e3dcd4
 
69c08a9
6e3dcd4
 
 
 
69c08a9
6e3dcd4
69c08a9
6e3dcd4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# app.py
import os
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
import gradio as gr

# 设置缓存目录(节省空间)
os.environ["HF_HOME"] = "/tmp/hf_cache"

# 模型名称(来自 Hugging Face)
model_name = "UnfilteredAI/DAN-L3-R1-8B"

# 加载分词器
tokenizer = AutoTokenizer.from_pretrained(model_name)

# 创建文本生成 pipeline
pipe = pipeline(
    "text-generation",
    model=model_name,
    tokenizer=tokenizer,
    model_kwargs={"torch_dtype": "auto"},  # 自动选择精度(如 float16)
    device_map="auto",  # 自动使用 GPU(如果有)
    max_new_tokens=512,
    temperature=0.7,
    top_p=0.9,
    repetition_penalty=1.1,
    return_full_text=False,  # 只返回生成的回复,不包含输入
)

# 定义生成函数
def generate_response(user_input, history):
    # 将对话历史转换为 messages 格式
    messages = []
    for idx, (user_msg, assistant_msg) in enumerate(history):
        messages.append({"role": "user", "content": user_msg})
        messages.append({"role": "assistant", "content": assistant_msg})
    
    # 添加当前用户输入
    messages.append({"role": "user", "content": user_input})

    # 调用模型生成回复
    try:
        outputs = pipe(messages)
        response = outputs[0]["generated_text"].strip()
    except Exception as e:
        response = f"❌ 模型生成出错:{str(e)}"

    # 返回更新后的对话历史
    history.append((user_input, response))
    return "", history

# 创建 Gradio 界面
with gr.Blocks(title="💬 DAN-L3-R1-8B AI 助手", theme=gr.themes.Soft()) as demo:
    gr.Markdown("# 💬 DAN-L3-R1-8B AI 助手")
    gr.Markdown("基于 [UnfilteredAI/DAN-L3-R1-8B](https://huggingface.co/UnfilteredAI/DAN-L3-R1-8B) 的对话系统")

    chatbot = gr.Chatbot(height=600, show_copy_button=True)
    with gr.Row():
        textbox = gr.Textbox(
            placeholder="请输入你的问题...",
            show_label=False,
            scale=7,
            container=False,
        )
        submit_btn = gr.Button("发送", scale=1)

    # 示例问题
    gr.Examples(
        examples=[
            "你是谁?",
            "讲个笑话",
            "写一首关于秋天的诗",
            "解释量子力学"
        ],
        inputs=textbox
    )

    # 清空按钮
    clear_btn = gr.Button("🗑️ 清空聊天")

    # 事件绑定
    textbox.submit(fn=generate_response, inputs=[textbox, chatbot], outputs=[textbox, chatbot])
    submit_btn.click(fn=generate_response, inputs=[textbox, chatbot], outputs=[textbox, chatbot])
    clear_btn.click(fn=lambda: ("", None), outputs=[textbox, chatbot])

# 启动应用
if __name__ == "__main__":
    demo.launch()