KevinLuo8012's picture
Update app.py
8cf618e verified
import streamlit as st
import openai
from dotenv import load_dotenv
import os
from sentence_transformers import SentenceTransformer, util
# 从 .env 文件加载环境变量
load_dotenv()
api_key = os.getenv("")
def main():
openai.api_key = api_key
st.title('智能閱讀會問答系統')
user_query = st.text_input("請輸入您的問題:", "")
detail_level = st.select_slider("選擇回答的詳細程度:", options=['摘要', '中等', '詳細'])
max_tokens_dict = {'摘要': 50, '中等': 100, '詳細': 150}
# 初始化 Sentence Transformer 模型
model = SentenceTransformer('all-MiniLM-L6-v2')
def generate_answers_with_gpt_chat(question, detail):
# 注意这里我们使用的是 ChatCompletion.create 方法
response = openai.ChatCompletion.create(
model="gpt-4", # 使用 GPT-4 模型
messages=[{"role": "system", "content": "您好,我是一个 AI 助手。请问有什么可以帮助您的?"},
{"role": "user", "content": question}],
temperature=0.7,
max_tokens=max_tokens_dict[detail]
)
return [message['content'] for message in response['messages'] if message['role'] == 'assistant']
def calculate_similarity(answers, user_query):
query_embedding = model.encode(user_query, convert_to_tensor=True)
answer_embeddings = model.encode(answers, convert_to_tensor=True)
cosine_scores = util.pytorch_cos_sim(query_embedding, answer_embeddings)[0]
return cosine_scores.tolist()
if st.button('提交'):
if user_query:
answers = generate_answers_with_gpt_chat(user_query, detail_level)
similarities = calculate_similarity(answers, user_query)
answers_with_scores = sorted(zip(answers, similarities), key=lambda x: x[1], reverse=True)
st.subheader("生成並排序的答案:")
for answer, score in answers_with_scores:
st.text(f"答案: {answer}\n相似度分數: {score:.2f}")
else:
st.warning("請輸入一個問題。")
if __name__ == "__main__":
main()