allinaigc commited on
Commit
e023114
·
verified ·
1 Parent(s): 944dc18

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +159 -125
app.py CHANGED
@@ -1,17 +1,29 @@
1
  '''
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  '''
4
- ##TODO: 1. 转换成Qwen的API。 2.
5
 
6
  import time
7
  import os
8
  import pandas as pd
9
  import streamlit as st
10
  from code_editor import code_editor
 
 
11
  # from utils.setup import setup_connexion, setup_session_state
12
  # from utils.vanna_calls import (
13
  # generate_questions_cached,
14
- # generate_sql_cached,
15
  # run_sql_cached,
16
  # generate_plotly_code_cached,
17
  # generate_plot_cached,
@@ -54,133 +66,155 @@ st.title("本地化国产大模型数据库查询演示")
54
  st.markdown("_声明:内容由人工智能生成,仅供参考。如果您本人使用或对外传播本服务生成的输出,您应当主动核查输出内容的真实性、准确性,避免传播虚假信息。_")
55
 
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  ### Streamlit Sidebar 左侧工具栏
58
  # st.sidebar.write(st.session_state)
59
- with st.sidebar:
60
- st.markdown(
61
- """
62
- <style>
63
- [data-testid="stSidebar"][aria-expanded="true"]{
64
- min-width: 500px;
65
- max-width: 500px;
66
- }
67
- """,
68
- unsafe_allow_html=True,
69
- )
70
- ### siderbar的题目。
71
- ### siderbar的题目。
72
- # st.header(f'**大语言模型专家系统工作设定区**')
73
- st.header(f'**系统控制面板** ')
74
- # st.header(f'**欢迎 **{username}** 使用本系统** ') ## 用户登录显示。
75
- st.write(f'_Large Language Model Expert System Working Environment_')
76
- st.sidebar.button("清除记录,重启一轮新对话", on_click=clear_all, use_container_width=True, type='primary')
77
- # st.sidebar.button("清除记录,重启一轮新对话", on_click=setup_session_state, use_container_width=True, type='primary')
78
-
79
- ### 展示当前数据库
80
- # st.markdown("#### 当前数据库中的数据:")
81
- with st.expander("#### 当前数据库中的数据", expanded=True):
82
- my_db = pd.read_sql_table('table01', 'sqlite:///myexcelDB.db')
83
- st.dataframe(my_db, width=400)
84
-
85
- ## 在sidebar上的三个分页显示,用st.tabs实现。
86
- tab_1, tab_2, tab_4 = st.tabs(['使用须知', '模型参数', '角色设定'])
87
- # tab_1, tab_2, tab_3, tab_4 = st.tabs(['使用须知', '模型参数', '提示词模板', '系统角色设定'])
88
-
89
- # with st.expander(label='**使用须知**', expanded=False):
90
- with tab_1:
91
- # st.markdown("#### 快速上手指南")
92
- # with st.text(body="说明"):
93
- # st.markdown("* 重启一轮新对话时,只需要刷新页面(按Ctrl/Command + R)即可。")
94
- with st.text(body="说明"):
95
- st.markdown("""* 简介
96
-
97
- 本系统使用大模型技术,将自然语言描述转换为SQL查询语句。用户可以输入自然语言问题,系统会自动生成相应的SQL语句,并返回查询结果。
98
-
99
- * 使用步骤
100
-
101
- 在文本框中输入您的自然语言问题。
102
- 系统会自动生成相应的SQL语句,并显示在下方。
103
- 点击“满意,请执行语句”选项,可查看查询结果。点击”不满意,需要改正语句“可以手动修改SQL语句。
104
-
105
- * 注意事项
106
-
107
- 本系统仍在开发中,可能会存在一些错误或不准确的地方。
108
- 自然语言描述越清晰,生成的SQL语句越准确。
109
- 系统支持的SQL语法有限,请尽量使用简单易懂的语法。
110
- """)
111
- # with st.text(body="说明"):
112
- # st.markdown("""在构建大语言模型本地知识库问答系统时,需要注意以下几点:
113
-
114
- # LLM的选择:LLM的选择应根据系统的应用场景和需求进行。对于需要处理通用问题的系统,可以选择通用LLM;对于需要处理特定领域问题的系统,可以选择针对该领域进行微调的LLM。
115
- # 本地知识库的构建:本地知识库应包含系统所需的所有知识。知识的组织方式应便于LLM的访问和处理。
116
- # 系统的评估:系统应进行充分的评估,以确保其能够准确地回答用户问题。
117
- # 大语言模型本地知识库问答系统具有以下优势:
118
-
119
- # 准确性:LLM和本地知识库的结合可以提高系统的准确性。
120
- # 全面性:LLM和本地知识库的结合可以使系统能够回答更广泛的问题。
121
- # 效率:LLM可以快速生成候选答案,而本地知识库可以快速评估候选答案的准确性。
122
- # """)
123
-
124
-
125
- # with st.text(body="说明"):
126
- # st.markdown(
127
- # "* “数据分析模式”暂时只支持1000个单元格以内的数据分析,单元格中的内容不支持中文数据(表头也尽量不使用中文)。一般运行时间在1至10分钟左右,期间需要保持网络畅通。")
128
- # with st.text(body="说明"):
129
- # st.markdown("* “数据分析模式”推荐上传csv格式的文件,部分Excel文件容易出现数据不兼容的情况。")
130
-
131
- ## 大模型参数
132
- # with st.expander(label='**大语言模型参数**', expanded=True):
133
- with tab_2:
134
- max_tokens = st.slider(label='Max_Token(生成结果时最大字数)', min_value=100, max_value=4096, value=2048, step=100)
135
- temperature = st.slider(label='Temperature (温度)', min_value=0.0, max_value=1.0, value=0.8, step=0.1)
136
- top_p = st.slider(label='Top_P (核采样)', min_value=0.0, max_value=1.0, value=0.6, step=0.1)
137
- frequency_penalty = st.slider(label='Frequency Penalty (重复度惩罚因子)', min_value=-2.0, max_value=2.0, value=1.0, step=0.1)
138
- presence_penalty = st.slider(label='Presence Penalty (控制主题的重复度)', min_value=-2.0, max_value=2.0, value=1.0, step=0.1)
139
-
140
- ## reset password widget
141
- # try:
142
- # if authenticator.reset_password(st.session_state["username"], 'Reset password'):
143
- # st.success('Password modified successfully')
144
- # except Exception as e:
145
- # st.error(e)
146
-
147
- # with st.header(body="欢迎"):
148
- # st.markdown("# 欢迎使用大语言模型商业智能中心")
149
- # with st.expander(label=("**重要的使用注意事项**"), expanded=True):
150
- # with st.container():
151
-
152
- ##NOTE: 在SQL场景去不需要展示这些提示词。
153
- # with tab_3:
154
- # # st.markdown("#### Prompt提示词参考资料")
155
- # # with st.expander(label="**大语言模型基础提示词Prompt示例**", expanded=False):
156
- # st.code(
157
- # body="继续用中文写一篇关于 [文章主题] 的文章,以下列句子开头:[文章开头]。", language='plaintext')
158
- # st.code(body="将以下文字概括为 100 个字,使其易于阅读和理解。避免使用复杂的句子结构或技术术语。",
159
- # language='plaintext')
160
- # st.code(body="给我出一个迪奥2023春季发布会活动策划。", language='plaintext')
161
- # st.code(body="帮我按照正式会议结构写一个会邀:主题是xx手机游戏立项会议。", language='plaintext')
162
- # st.code(body="帮我写一个车内健康监测全场景落地的项目计划,用表格。", language='plaintext')
163
- # st.code(
164
- # body="同时掷两枚质地均匀的骰子,则两枚骰子向上的点数之和为 7 的概率是多少。", language='plaintext')
165
- # st.code(body="写一篇产品经理的演讲稿,注意使用以下词汇: 赋能,抓手,中台,闭环,落地,漏斗,沉淀,给到,同步,对齐,对标,迭代,拉通,打通,升级,交付,聚焦,倒逼,复盘,梳理,方案,联动,透传,咬合,洞察,渗透,兜底,解耦,耦合,复用,拆解。", language='plaintext')
166
-
167
- # with st.expander(label="**数据分析模式的专用提示词Prompt示例**", expanded=False):
168
- # # with st.subheader(body="提示词Prompt"):
169
- # st.code(body="分析此数据集并绘制一些'有趣的图表'。", language='python')
170
  # st.code(
171
- # body="对于这个文件中的数据,你需要要找出[X,Y]数据之间的寻找'相关性'。", language='python')
172
- # st.code(body="对于这个文件中的[xxx]数据给我一个'整体的分析'。", language='python')
173
- # st.code(body="对于[xxx]数据给我一个'直方图',提供图表,并给出分析结果。", language='python')
174
- # st.code(body="对于[xxx]数据给我一个'小提琴图',并给出分析结果。", language='python')
 
 
175
  # st.code(
176
- # body="对于[X,Y,Z]数据在一个'分布散点图 (stripplot)',所有的数据在一张图上展现, 并给出分析结果。", language='python')
177
- # st.code(body="对于[X,Y]数据,进行'T检验',你需要展示图表,并给出分析结果。",
178
- # language='python')
179
- # st.code(body="对于[X,Y]数据给我一个3个类别的'聚类分析',并给出分析结果。",
180
- # language='python')
181
-
182
- with tab_4:
183
- st.text_area(label='系统角色设定', value='你是一个人工智能,你需要回答我提出的问题,或者完成我交代的任务。你需要使用我提问的语言(如中文、英文)来回答。', height=200, label_visibility='hidden')
 
 
 
 
 
 
 
 
 
 
 
 
184
 
185
 
186
  myavatar = "./2D.png"
 
1
  '''
2
+ 1. 大模型以Qwen API形式提供。
3
+ 1. 重塑了Qwen作为大语言模型做Text2SQL的提示词:
4
+ sys_prompt = """
5
+ 1. 你是一个将文字转换成SQL语句的人工智能。
6
+ 2. 你需要注意:你只需要用纯文本回复代码的内容,即你不允许回复代码以外的任何信息。
7
+ 3. SQL变量默认是中文,而且只能从如下的名称列表中选择,你不可以使用这些名字以外的变量名:"长度","宽度","价格","产品ID","比率","类别","*"
8
+ 4. 你不能写IF, THEN的SQL语句,需要使用CASE。
9
+ 5. 我需要你转换的文字如下:"""
10
+
11
+ total_prompt = sys_prompt + "在数据表格table01中," + prompt
12
+
13
 
14
  '''
15
+ ##TODO: 2. 账号功能。
16
 
17
  import time
18
  import os
19
  import pandas as pd
20
  import streamlit as st
21
  from code_editor import code_editor
22
+ import streamlit_authenticator as stauth
23
+
24
  # from utils.setup import setup_connexion, setup_session_state
25
  # from utils.vanna_calls import (
26
  # generate_questions_cached,
 
27
  # run_sql_cached,
28
  # generate_plotly_code_cached,
29
  # generate_plot_cached,
 
66
  st.markdown("_声明:内容由人工智能生成,仅供参考。如果您本人使用或对外传播本服务生成的输出,您应当主动核查输出内容的真实性、准确性,避免传播虚假信息。_")
67
 
68
 
69
+ ### authentication with a local yaml file.
70
+ import yaml
71
+ from yaml.loader import SafeLoader
72
+ with open('./config.yaml') as file:
73
+ config = yaml.load(file, Loader=SafeLoader)
74
+ authenticator = stauth.Authenticate(
75
+ config['credentials'],
76
+ config['cookie']['name'],
77
+ config['cookie']['key'],
78
+ config['cookie']['expiry_days'],
79
+ config['preauthorized']
80
+ )
81
+
82
+ user, authentication_status, username = authenticator.login('用户登录', 'main')
83
+ print('登录的用户:', username)
84
+
85
  ### Streamlit Sidebar 左侧工具栏
86
  # st.sidebar.write(st.session_state)
87
+ if authentication_status:
88
+
89
+ with st.sidebar:
90
+ st.markdown(
91
+ """
92
+ <style>
93
+ [data-testid="stSidebar"][aria-expanded="true"]{
94
+ min-width: 500px;
95
+ max-width: 500px;
96
+ }
97
+ """,
98
+ unsafe_allow_html=True,
99
+ )
100
+
101
+ # st.header(f'**大语言模型专家系统工作设定区**')
102
+ st.header(f'**欢迎 **{username}** 使用本系统** ')
103
+ st.write(f'_Large Language Model Expert System Working Environment_')
104
+ # st.write(f'_Welcome and Hope U Enjoy Staying Here_')
105
+ authenticator.logout('登出', 'sidebar')
106
+ ### siderbar的题目。
107
+ ### siderbar的题目。
108
+ # st.header(f'**大语言模型专家系统工作设定区**')
109
+ # st.header(f'**欢迎 **{username}** 使用本系统** ') ## 用户登录显示。
110
+ st.sidebar.button("清除记录,重启一轮新对话", on_click=clear_all, use_container_width=True, type='primary')
111
+ # st.sidebar.button("清除记录,重启一轮新对话", on_click=setup_session_state, use_container_width=True, type='primary')
112
+
113
+ ### 展示当前数据库
114
+ # st.markdown("#### 当前数据库中的数据:")
115
+ with st.expander("#### 当前数据库中的数据", expanded=True):
116
+ my_db = pd.read_sql_table('table01', 'sqlite:///myexcelDB.db')
117
+ st.dataframe(my_db, width=400)
118
+
119
+ ## 在sidebar上的三个分页显示,用st.tabs实现。
120
+ tab_1, tab_2, tab_4 = st.tabs(['使用须知', '模型参数', '角色设定'])
121
+ # tab_1, tab_2, tab_3, tab_4 = st.tabs(['使用须知', '模型参数', '提示词模板', '系统角色设定'])
122
+
123
+ # with st.expander(label='**使用须知**', expanded=False):
124
+ with tab_1:
125
+ # st.markdown("#### 快速上手指南")
126
+ # with st.text(body="说明"):
127
+ # st.markdown("* 重启一轮新对话时,只需要刷新页面(按Ctrl/Command + R)即可。")
128
+ with st.text(body="说明"):
129
+ st.markdown("""* 简介
130
+
131
+ 本系统使用大模型技术,将自然语言描述转换为SQL查询语句。用户可以输入自然语言问题,系统会自动生成相应的SQL语句,并返回查询结果。
132
+
133
+ * 使用步骤
134
+
135
+ 在文本框中输入您的自然语言问题。
136
+ 系统会自动生成相应的SQL语句,并显示在下方。
137
+ 点击“满意,请执行语句”选项,可查看查询结果。点击”不满意,需要改正语句“可以手动修改SQL语句。
138
+
139
+ * 注意事项
140
+
141
+ 本系统仍在开发中,可能会存在一些错误或不准确的地方。
142
+ 自然语言描述越清晰,生成的SQL语句越准确。
143
+ 系统支持的SQL语法有限,请尽量使用简单易懂的语法。
144
+ """)
145
+ # with st.text(body="说明"):
146
+ # st.markdown("""在构建大语言模型本地知识库问答系统时,需要注意以下几点:
147
+
148
+ # LLM的选择:LLM的选择应根据系统的应用场景和需求进行。对于需要处理通用问题的系统,可以选择通用LLM;对于需要处理特定领域问题的系统,可以选择针对该领域进行微调的LLM。
149
+ # 本地知识库的构建:本地知识库应包含系统所需的所有知识。知识的组织方式应便于LLM的访问和处理。
150
+ # 系统的评估:系统应进行充分的评估,以确保其能够准确地回答用户问题。
151
+ # 大语言模型本地知识库问答系统具有以下优势:
152
+
153
+ # 准确性:LLM和本地知识库的结合可以提高系统的准确性。
154
+ # 全面性:LLM和本地知识库的结合可以使系统能够回答更广泛的问题。
155
+ # 效率:LLM可以快速生成候选答案,而本地知识库可以快速评估候选答案的准确性。
156
+ # """)
157
+
158
+
159
+ # with st.text(body="说明"):
160
+ # st.markdown(
161
+ # "* “数据分析模式”暂时只支持1000个单元格以内的数据分析,单元格中的内容不支持中文数据(表头也尽量不使用中文)。一般运行时间在1至10分钟左右,期间需要保持网络畅通。")
162
+ # with st.text(body="说明"):
163
+ # st.markdown("* “数据分析模式”推荐上传csv格式的文件,部分Excel文件容易出现数据不兼容的情况。")
164
+
165
+ ## 大模型参数
166
+ # with st.expander(label='**大语言模型参数**', expanded=True):
167
+ with tab_2:
168
+ max_tokens = st.slider(label='Max_Token(生成结果时最大字数)', min_value=100, max_value=4096, value=2048, step=100)
169
+ temperature = st.slider(label='Temperature (温度)', min_value=0.0, max_value=1.0, value=0.8, step=0.1)
170
+ top_p = st.slider(label='Top_P (核采样)', min_value=0.0, max_value=1.0, value=0.6, step=0.1)
171
+ frequency_penalty = st.slider(label='Frequency Penalty (重复度惩罚因子)', min_value=-2.0, max_value=2.0, value=1.0, step=0.1)
172
+ presence_penalty = st.slider(label='Presence Penalty (控制主题的重复度)', min_value=-2.0, max_value=2.0, value=1.0, step=0.1)
173
+
174
+ ## reset password widget
175
+ # try:
176
+ # if authenticator.reset_password(st.session_state["username"], 'Reset password'):
177
+ # st.success('Password modified successfully')
178
+ # except Exception as e:
179
+ # st.error(e)
180
+
181
+ # with st.header(body="欢迎"):
182
+ # st.markdown("# 欢迎使用大语言模型商业智能中心")
183
+ # with st.expander(label=("**重要的使用注意事项**"), expanded=True):
184
+ # with st.container():
185
+
186
+ ##NOTE: 在SQL场景去不需要展示这些提示词。
187
+ # with tab_3:
188
+ # # st.markdown("#### Prompt提示词参考资料")
189
+ # # with st.expander(label="**大语言模型基础提示词Prompt示例**", expanded=False):
 
 
 
 
 
 
 
 
190
  # st.code(
191
+ # body="继续用中文写一篇关于 [文章主题] 的文章,以下列句子开头:[文章开头]。", language='plaintext')
192
+ # st.code(body="将以下文字概括为 100 个字,使其易于阅读和理解。避免使用复杂的句子结构或技术术语。",
193
+ # language='plaintext')
194
+ # st.code(body="给我出一个迪奥2023春季发布会活动策划。", language='plaintext')
195
+ # st.code(body="帮我按照正式会议结构写一个会邀:主题是xx手机游戏立项会议。", language='plaintext')
196
+ # st.code(body="帮我写一个车内健康监测全场景落地的项目计划,用表格。", language='plaintext')
197
  # st.code(
198
+ # body="同时掷两枚质地均匀的骰子,则两枚骰子向上的点数之和为 7 的概率是多少。", language='plaintext')
199
+ # st.code(body="写一篇产品经理的演讲稿,注意使用以下词汇: 赋能,抓手,中台,闭环,落地,漏斗,沉淀,给到,同步,对齐,对标,迭代,拉通,打通,升级,交付,聚焦,倒逼,复盘,梳理,方案,联动,透传,咬合,洞察,渗透,兜底,解耦,耦合,复用,拆解。", language='plaintext')
200
+
201
+ # with st.expander(label="**数据分析模式的专用提示词Prompt示例**", expanded=False):
202
+ # # with st.subheader(body="提示词Prompt"):
203
+ # st.code(body="分析此数据集并绘制一些'有趣的图表'。", language='python')
204
+ # st.code(
205
+ # body="对于这个文件中的数据,你需要要找出[X,Y]数据之间的寻找'相关性'。", language='python')
206
+ # st.code(body="对于这个文件中的[xxx]数据给我一个'整体的分析'。", language='python')
207
+ # st.code(body="对于[xxx]数据给我一个'直方图',提供图表,并给出分析结果。", language='python')
208
+ # st.code(body="对于[xxx]数据给我一个'小提琴图',并给出分析结果。", language='python')
209
+ # st.code(
210
+ # body="对于[X,Y,Z]数据在一个'分布散点图 (stripplot)',所有的数据在一张图上展现, 并给出分析结果。", language='python')
211
+ # st.code(body="对于[X,Y]数据,进行'T检验',你需要展示图表,并给出分析结果。",
212
+ # language='python')
213
+ # st.code(body="对于[X,Y]数据给我一个3个类别的'聚类分析',并给出分析结果。",
214
+ # language='python')
215
+
216
+ with tab_4:
217
+ st.text_area(label='系统角色设定', value='你是一个人工智能,你需要回答我提出的问题,或者完成我交代的任务。你需要使用我提问的语言(如中文、英文)来回答。', height=200, label_visibility='hidden')
218
 
219
 
220
  myavatar = "./2D.png"