import streamlit as st import requests import json # 创建 Streamlit 页面布局 st.title('RWKV6 Query/Context相关性测试') # 初始化 session state 中的 query 和 contexts 数组 if 'query' not in st.session_state: st.session_state['query'] = '' if 'contexts' not in st.session_state: st.session_state['contexts'] = [] # 输入框用于输入 Query query = st.text_input('Query', value=st.session_state['query']) # 添加按钮,按下后增加一个输入框到 contexts 数组中 if st.button('Add'): st.session_state['contexts'].append('') # 显示所有的 contexts 输入框 for i, context in enumerate(st.session_state['contexts']): st.session_state['contexts'][i] = st.text_input(f'Context {i+1}', value=context, key=f'context_{i}') # 发送 HTTP 请求的函数 def send_post_request(query, contexts, url): headers = { 'accept': 'application/json', 'Content-Type': 'application/json' } data = { 'input_text': query, 'compared_texts': contexts } response = requests.post(url, headers=headers, data=json.dumps(data)) return response.json() import pandas as pd def process_and_display_response(query, contexts, url, score_key='similarities'): st.write('Query:', query) # 发送 POST 请求 response = send_post_request(query, contexts, url) # 显示返回的内容 if response: scores = response.get(score_key, []) elapsed_time = response.get('elapsed_time', '未知') st.write(f'计算花费时间为:{elapsed_time}秒') # 创建一个包含上下文和分数的数据框 df = pd.DataFrame({ 'Context': contexts, 'Score': scores }) # 找出最高分数的索引 max_score_index = df['Score'].idxmax() # 创建 HTML 表格 table_html = "" table_html += "" for index, row in df.iterrows(): bg_color = "yellow" if index == max_score_index else "white" table_html += f"" table_html += f"" table_html += f"" table_html += "" table_html += "
ContextScore
{row['Context']}{row['Score']:.4f}
" # 使用 st.write 显示 HTML st.write(table_html, unsafe_allow_html=True) # Commit 按钮 if st.button('Commit'): process_and_display_response( query, st.session_state['contexts'], 'http://47.113.113.230:6969/compute_sentence_similarities', 'similarities' ) # Rerank 按钮 if st.button('Rerank'): process_and_display_response( query, st.session_state['contexts'], 'http://47.113.113.230:6969/compute_scores', 'similarities' ) # Clear 按钮 if st.button('Clear'): st.session_state['query'] = '' st.session_state['contexts'] = [] st.rerun() # 示例数据 demos = [ { 'query': '小米汽车价格区间是多少?', 'contexts': [ '小米汽车首款作品Xiaomi SU7 Logo三年打磨,满怀敬畏之心十倍投入,自研关键技术融汇优雅设计、澎湃性能与生态科技C 级豪华科技轿车人车合一,我心澎湃', '遵循「符合直觉」的美学设计理念,造就 Xiaomi SU7 经典的流畅车身线条。', '细节设计与整体外观相得益彰。水滴形大灯、全车低风阻设计,配合四种轮毂设计,与整车的优雅外观浑然一体。', '3000mm 超长轴距 带来宽敞的车内乘坐空间充裕的头部和腿部空间 前后排都有自在的乘坐体验', '座椅采用多层三明治结构坐垫 针对性优化腰部和脊椎承托 Nappa 真皮包裹,触感柔软舒适', '小米工况算法,在 CLTC 工况的基础上,针对气温差异和人的驾驶习惯差异,加入高温工况、低温工况、激烈驾驶工况,续航预测更准确。', '小米汽车统一零售价SU7:¥ 215,900 SU7 Pro:¥ 245,900 SU7 Max:¥ 299,900' ] }, { 'query': '成年人右下腹很痛怎么办?', 'contexts': [ '肚子疼,学名腹痛,是临床常见的症状。绝大部分人都会有过腹痛的经历,感觉忍忍就过去了,其实没有那么简单。腹痛其实是人体的自我保护反应,一般而言,无法及时引起腹痛示警的只有肿瘤。从常见的消化道疾病,到急性心肌梗死、妇科疾病或者一些全身性疾病,都可能引起腹痛', '上腹部疼痛 可以定位于胃、胆囊或者小肠上段,可能发生的疾病有烧心、胃炎、胆石症以及消化性溃疡等。', '中腹部疼痛 可以定位于小肠或者大肠,可能发生的疾病有阑尾炎、结肠炎、肠胀气、肠胃炎、肠易激综合征以及由精神刺激引起的“胃痛”等。', '下腹部疼痛 可定位于结肠下段或者盆腔器官,可能发生的疾病有阑尾炎晚期、结肠炎、肠胀气、肠易激综合征及一些膀胱疾病,女性还可发生子宫、输卵管或者卵巢问题。', '分不出来,感觉哪里都疼 可能是肠梗阻(呕吐腹胀,不排便不排气),阑尾炎初期(转移性疼痛)。也有可能病因不在腹部,比方说急性心肌梗死、脊柱增生性骨关节炎、肿瘤等,只有去医院才能查出来。', '肚子疼几乎每个人都经历过,有些疼痛忍一忍就过去了,那么什么样的腹痛,需要去医院呢? 气温变化、大量饮酒、摄入过多油腻或不洁食物、外伤、过度劳累、睡眠不足等因素都可能诱发腹痛, 多数情况并不严重,部分可自行缓解。 若腹痛严重、不能缓解或反复出现,应及时前往医院就诊。 尤其是在剧烈腹痛的同时伴有发热、黑便或血便、无法控制的呕吐和呕血、无尿、晕厥或昏迷,或其他部位的疼痛延续到腹部,需紧急就诊。如果不知道该去哪个科室,可以直接挂急诊。', '切记,这篇文章并非要教你如何自己给自己看病,这样的事情还是交给专业的人来做;而是想要告诉你,因为腹痛就医,怎么样才能准确地向医生描述自己的症状,方便医生诊断。良好的医患沟通能减小误诊风险,患者也能早些康复。 个别人抱着考验医生的心态,故意隐瞒病症,只会害人害己。难倒了医生,自己也受罪,何必呢?' ] }, { 'query':'现在几点了?', 'contexts':[ '现在下雨了', '现在是晚上', '现在下午8点15分', '我去踢球了', '现在是夏天', ] }, ] # 显示示例数据 st.write('示例数据:') for demo in demos: if st.button(f"Apply: {demo['query']}"): st.session_state['query'] = demo['query'] st.session_state['contexts'] = demo['contexts'] st.rerun() st.write('Query:', demo['query']) st.write('Contexts:', demo['contexts'])