KevinLuo8012 commited on
Commit
42f12cb
·
verified ·
1 Parent(s): e99b879

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +104 -47
app.py CHANGED
@@ -1,69 +1,126 @@
1
- import streamlit as st
2
- import openai
3
- import os
4
- from dotenv import load_dotenv
5
- from sentence_transformers import SentenceTransformer, util
6
- from langchain.embeddings import OpenAIEmbeddings
7
- from openai import embeddings_utils
8
 
9
- # 定義一個主函数,它將包含我們的 Streamlit 應用邏輯
10
- def main(api_key):
11
 
12
- openai.api_key = api_key
13
 
14
 
15
- # 初始化 Sentence Transformer 模型
16
- sentence_model = SentenceTransformer('all-MiniLM-L6-v2')
17
 
18
- # 初始化 LangChain OpenAI Embeddings
19
- embeddings = OpenAIEmbeddings()
20
 
21
- st.title('智能讀書會問答系統')
22
 
23
- user_query = st.text_input("請輸入您的問題:", "")
24
 
25
- def generate_answers_with_gpt4(question, max_tokens=50, num_responses=3):
26
- response = openai.Completion.create(
27
- model="gpt-4", # 根據情況選擇模型
28
- prompt=question,
29
- temperature=0.7,
30
- max_tokens=max_tokens,
31
- n=num_responses,
32
- stop=None
33
- )
34
- return [completion['text'].strip() for completion in response['choices']]
35
 
36
- def calculate_similarity(answers, user_query):
37
- query_embedding = sentence_model.encode(user_query, convert_to_tensor=True)
38
- answer_embeddings = sentence_model.encode(answers, convert_to_tensor=True)
39
- cosine_scores = util.pytorch_cos_sim(query_embedding, answer_embeddings)
40
- return cosine_scores[0].tolist()
41
 
42
- if st.button('提交'):
43
- answers = generate_answers_with_gpt4(user_query)
44
 
45
- # 將用戶問題轉換成向量 embeddings
46
- embedded_query = embeddings.embed_documents([user_query])[0]
47
 
48
- # 計算每個答案與用戶問題的similarity numbers
49
- similarities = []
50
- for answer in answers:
51
- answer_embedding = embeddings.embed_documents([answer])[0]
52
- similarity = embeddings_utils.cosine_similarity(embedded_query, answer_embedding)
53
- similarities.append(similarity)
54
 
55
- # 根據相似度分數進行排序 -1~1
56
- answers_with_scores = sorted(zip(answers, similarities), key=lambda x: x[1], reverse=True)
57
 
58
- for answer, score in answers_with_scores:
59
- st.write(f"答案: {answer}\n相似度分數: {score:.2f}")
 
 
 
 
 
 
 
 
 
 
60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
  if __name__ == "__main__":
63
  st.sidebar.title("配置")
64
- api_key = st.sidebar.text_input("請輸入您的 OpenAI API KEY:", type="password")
65
 
66
  if api_key:
67
  main(api_key)
68
  else:
69
- st.sidebar.warning("請輸入 OpenAI API KEY 來啟動程式。")
 
1
+ # import streamlit as st
2
+ # import openai
3
+ # import os
4
+ # from dotenv import load_dotenv
5
+ # from sentence_transformers import SentenceTransformer, util
6
+ # from langchain.embeddings import OpenAIEmbeddings
7
+ # from openai import embeddings_utils
8
 
9
+ # # 定義一個主函数,它將包含我們的 Streamlit 應用邏輯
10
+ # def main(api_key):
11
 
12
+ # openai.api_key = api_key
13
 
14
 
15
+ # # 初始化 Sentence Transformer 模型
16
+ # sentence_model = SentenceTransformer('all-MiniLM-L6-v2')
17
 
18
+ # # 初始化 LangChain OpenAI Embeddings
19
+ # embeddings = OpenAIEmbeddings()
20
 
21
+ # st.title('智能讀書會問答系統')
22
 
23
+ # user_query = st.text_input("請輸入您的問題:", "")
24
 
25
+ # def generate_answers_with_gpt4(question, max_tokens=50, num_responses=3):
26
+ # response = openai.Completion.create(
27
+ # model="gpt-4", # 根據情況選擇模型
28
+ # prompt=question,
29
+ # temperature=0.7,
30
+ # max_tokens=max_tokens,
31
+ # n=num_responses,
32
+ # stop=None
33
+ # )
34
+ # return [completion['text'].strip() for completion in response['choices']]
35
 
36
+ # def calculate_similarity(answers, user_query):
37
+ # query_embedding = sentence_model.encode(user_query, convert_to_tensor=True)
38
+ # answer_embeddings = sentence_model.encode(answers, convert_to_tensor=True)
39
+ # cosine_scores = util.pytorch_cos_sim(query_embedding, answer_embeddings)
40
+ # return cosine_scores[0].tolist()
41
 
42
+ # if st.button('提交'):
43
+ # answers = generate_answers_with_gpt4(user_query)
44
 
45
+ # # 將用戶問題轉換成向量 embeddings
46
+ # embedded_query = embeddings.embed_documents([user_query])[0]
47
 
48
+ # # 計算每個答案與用戶問題的similarity numbers
49
+ # similarities = []
50
+ # for answer in answers:
51
+ # answer_embedding = embeddings.embed_documents([answer])[0]
52
+ # similarity = embeddings_utils.cosine_similarity(embedded_query, answer_embedding)
53
+ # similarities.append(similarity)
54
 
55
+ # # 根據相似度分數進行排序 -1~1
56
+ # answers_with_scores = sorted(zip(answers, similarities), key=lambda x: x[1], reverse=True)
57
 
58
+ # for answer, score in answers_with_scores:
59
+ # st.write(f"答案: {answer}\n相似度分數: {score:.2f}")
60
+
61
+
62
+ # if __name__ == "__main__":
63
+ # st.sidebar.title("配置")
64
+ # api_key = st.sidebar.text_input("請輸入您的 OpenAI API KEY:", type="password")
65
+
66
+ # if api_key:
67
+ # main(api_key)
68
+ # else:
69
+ # st.sidebar.warning("請輸入 OpenAI API KEY 來啟動程式。")
70
 
71
+ import streamlit as st
72
+ import openai
73
+ from dotenv import load_dotenv
74
+ import os
75
+ # 使用 langchain-community 中的 embeddings 功能
76
+ from langchain_community.embeddings import Embeddings
77
+
78
+ # 载入环境变量(如 OpenAI API Key)
79
+ load_dotenv()
80
+
81
+ def main(api_key):
82
+ openai.api_key = api_key
83
+
84
+ st.title('智能阅读会问答系统')
85
+
86
+ user_query = st.text_input("请输入您的问题:", "")
87
+
88
+ # 初始化 embeddings 对象
89
+ embeddings = Embeddings()
90
+
91
+ def generate_answers_with_gpt_chat(question):
92
+ response = openai.ChatCompletion.create(
93
+ model="gpt-3.5-turbo", # 或根据需要调整为其他模型
94
+ messages=[{"role": "user", "content": question}]
95
+ )
96
+ return [response['choices'][0]['message']['content']]
97
+
98
+ def calculate_similarity(answers, user_query):
99
+ # 获取问题的 embedding
100
+ query_embedding = embeddings.embed_text(user_query)
101
+ # 计算每个答案的 embedding 并计算与问题的相似度
102
+ similarities = [embeddings.similarity(query_embedding, embeddings.embed_text(answer)) for answer in answers]
103
+ return similarities
104
+
105
+ if st.button('提交'):
106
+ if user_query:
107
+ answers = generate_answers_with_gpt_chat(user_query)
108
+ # 计算相似度
109
+ similarities = calculate_similarity(answers, user_query)
110
+ # 根据相似度进行排序
111
+ answers_with_scores = sorted(zip(answers, similarities), key=lambda x: x[1], reverse=True)
112
+
113
+ st.subheader("生成并排序的答案:")
114
+ for answer, score in answers_with_scores:
115
+ st.text(f"答案: {answer}\n相似度分数: {score:.2f}")
116
+ else:
117
+ st.warning("请输入一个问题。")
118
 
119
  if __name__ == "__main__":
120
  st.sidebar.title("配置")
121
+ api_key = st.sidebar.text_input("请输入您的 OpenAI API KEY:", type="password")
122
 
123
  if api_key:
124
  main(api_key)
125
  else:
126
+ st.sidebar.warning("请输入 OpenAI API KEY 来启动程序。")