jolchmo commited on
Commit
3e90f7a
·
1 Parent(s): 7339dac

创建FinGPT chatbot应用

Browse files
Files changed (3) hide show
  1. README.md +35 -6
  2. app.py +124 -0
  3. requirements.txt +6 -0
README.md CHANGED
@@ -1,12 +1,41 @@
1
  ---
2
- title: FinGPT
3
- emoji: 🐨
4
- colorFrom: gray
5
- colorTo: red
6
  sdk: gradio
7
- sdk_version: 6.0.2
8
  app_file: app.py
9
  pinned: false
 
10
  ---
11
 
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: FinGPT Chatbot
3
+ emoji: 💰
4
+ colorFrom: blue
5
+ colorTo: green
6
  sdk: gradio
7
+ sdk_version: 5.9.1
8
  app_file: app.py
9
  pinned: false
10
+ license: mit
11
  ---
12
 
13
+ # 🤖 FinGPT Chatbot
14
+
15
+ 这是一个基于 **FinGPT/fingpt-mt_llama3-8b_lora** 模型的金融对话助手Spaces应用。
16
+
17
+ ## 功能特性
18
+
19
+ - 💬 实时对话:支持多轮对话,保持上下文
20
+ - 🧠 金融专业:基于Llama 3-8B微调的金融领域模型
21
+ - 🚀 GPU加速:使用Hugging Face Spaces的GPU支持
22
+
23
+ ## 使用说明
24
+
25
+ 1. 在输入框中输入您的金融相关问题
26
+ 2. 点击"发送"按钮或按Enter键
27
+ 3. 等待模型生成回复
28
+ 4. 可以点击"清空对话历史"重新开始
29
+
30
+ ## 模型信息
31
+
32
+ - 基础模型:meta-llama/Meta-Llama-3-8B
33
+ - LoRA适配器:FinGPT/fingpt-mt_llama3-8b_lora
34
+ - 任务类型:金融对话和分析
35
+
36
+ ## 示例问题
37
+
38
+ - 什么是量化宽松政策?
39
+ - 如何评估一只股票的价值?
40
+ - 请解释一下技术分析中的MACD指标
41
+ - 当前市场环境下应该如何配置资产?
app.py ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import spaces
3
+ import torch
4
+ from transformers import AutoTokenizer, AutoModelForCausalLM
5
+ from peft import PeftModel
6
+
7
+ # 加载模型和tokenizer
8
+ model_name = "meta-llama/Meta-Llama-3-8B"
9
+ adapter_name = "FinGPT/fingpt-mt_llama3-8b_lora"
10
+
11
+ print("正在加载模型...")
12
+ tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
13
+ tokenizer.pad_token = tokenizer.eos_token
14
+
15
+ base_model = AutoModelForCausalLM.from_pretrained(
16
+ model_name,
17
+ torch_dtype=torch.float16,
18
+ device_map="auto",
19
+ trust_remote_code=True
20
+ )
21
+
22
+ model = PeftModel.from_pretrained(base_model, adapter_name)
23
+ model = model.eval()
24
+
25
+ print("模型加载完成!")
26
+
27
+ @spaces.GPU
28
+ def chat(message, history):
29
+ """
30
+ 聊天函数,处理用户消息并返回模型响应
31
+ """
32
+ # 构建对话历史
33
+ conversation = []
34
+ for user_msg, bot_msg in history:
35
+ conversation.append(f"User: {user_msg}")
36
+ conversation.append(f"Assistant: {bot_msg}")
37
+
38
+ conversation.append(f"User: {message}")
39
+ conversation.append("Assistant:")
40
+
41
+ prompt = "\n".join(conversation)
42
+
43
+ # 编码输入
44
+ inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=2048)
45
+ inputs = {k: v.to(model.device) for k, v in inputs.items()}
46
+
47
+ # 生成响应
48
+ with torch.no_grad():
49
+ outputs = model.generate(
50
+ **inputs,
51
+ max_new_tokens=512,
52
+ temperature=0.7,
53
+ top_p=0.9,
54
+ do_sample=True,
55
+ pad_token_id=tokenizer.eos_token_id
56
+ )
57
+
58
+ # 解码输出
59
+ response = tokenizer.decode(outputs[0], skip_special_tokens=True)
60
+
61
+ # 提取助手的回复
62
+ if "Assistant:" in response:
63
+ response = response.split("Assistant:")[-1].strip()
64
+
65
+ return response
66
+
67
+ # 创建Gradio Chatbot界面
68
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
69
+ gr.Markdown(
70
+ """
71
+ # 🤖 FinGPT Chatbot
72
+
73
+ 这是一个基于 **FinGPT/fingpt-mt_llama3-8b_lora** 模型的金融对话助手。
74
+
75
+ 您可以询问关于金融市场、投资、经济分析等问题。
76
+ """
77
+ )
78
+
79
+ chatbot = gr.Chatbot(
80
+ label="聊天记录",
81
+ height=500,
82
+ bubble_full_width=False
83
+ )
84
+
85
+ with gr.Row():
86
+ msg = gr.Textbox(
87
+ label="输入您的消息",
88
+ placeholder="在这里输入您的问题...",
89
+ scale=4
90
+ )
91
+ submit = gr.Button("发送", scale=1, variant="primary")
92
+
93
+ clear = gr.Button("清空对话历史")
94
+
95
+ gr.Examples(
96
+ examples=[
97
+ "什么是量化宽松政策?",
98
+ "如何评估一只股票的价值?",
99
+ "请解释一下技术分析中的MACD指标",
100
+ "当前市场环境下应该如何配置资产?"
101
+ ],
102
+ inputs=msg
103
+ )
104
+
105
+ # 事件处理
106
+ def user_message(user_msg, history):
107
+ return "", history + [[user_msg, None]]
108
+
109
+ def bot_message(history):
110
+ user_msg = history[-1][0]
111
+ bot_response = chat(user_msg, history[:-1])
112
+ history[-1][1] = bot_response
113
+ return history
114
+
115
+ msg.submit(user_message, [msg, chatbot], [msg, chatbot], queue=False).then(
116
+ bot_message, chatbot, chatbot
117
+ )
118
+ submit.click(user_message, [msg, chatbot], [msg, chatbot], queue=False).then(
119
+ bot_message, chatbot, chatbot
120
+ )
121
+ clear.click(lambda: None, None, chatbot, queue=False)
122
+
123
+ if __name__ == "__main__":
124
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ gradio==5.9.1
2
+ transformers>=4.35.0
3
+ torch>=2.0.0
4
+ peft>=0.7.0
5
+ accelerate>=0.24.0
6
+ spaces