tenmenbot commited on
Commit
667ac72
·
verified ·
1 Parent(s): 70cfce1

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +9 -14
app.py CHANGED
@@ -5,16 +5,15 @@ import openai
5
  import csv
6
  from sentence_transformers import SentenceTransformer, util
7
 
8
- # OpenAIキー
9
  openai.api_key = os.getenv("OPENAI_API_KEY")
10
 
11
- # ZIPを展開
12
  if not os.path.exists("articles"):
13
  with zipfile.ZipFile("articles.zip", "r") as zip_ref:
14
  zip_ref.extractall("articles")
15
 
16
- # CSVから記事とURLを読み込み
17
- documents, file_map = [], {}
 
18
  with open("articles/articles.csv", "r", encoding="cp932") as f:
19
  reader = csv.DictReader(f)
20
  for row in reader:
@@ -22,11 +21,9 @@ with open("articles/articles.csv", "r", encoding="cp932") as f:
22
  documents.append(content)
23
  file_map[content] = {"title": row["title"], "url": row["url"]}
24
 
25
- # 埋め込みモデル
26
  model = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
27
  document_embeddings = model.encode(documents, convert_to_tensor=True)
28
 
29
- # 回答生成
30
  def generate_answer(query):
31
  query_embedding = model.encode(query, convert_to_tensor=True)
32
  hits = util.semantic_search(query_embedding, document_embeddings, top_k=2)[0]
@@ -39,8 +36,7 @@ def generate_answer(query):
39
 
40
  context = "\n\n".join(documents[hit["corpus_id"]][:300] for hit in hits)
41
  prompt = (
42
- f"以下の内容をふまえて、転職面接に関する質問に自然で丁寧な日本語で答えてください。"
43
- f"できるだけ共感から始めて、最後は応援の言葉で締めくくってください。\n"
44
  f"質問: {query}\n"
45
  f"---\n{context}\n---"
46
  )
@@ -52,12 +48,11 @@ def generate_answer(query):
52
  temperature=0.6,
53
  )
54
  answer = response.choices[0].message.content.strip()
55
- html_links = "".join([f'<a href="{url}" target="_blank">{url}</a><br>' for url in sources])
56
- return f"{answer}<br><br>もっと詳しく知りたい方はこちら:<br>{html_links}<br>応援しています!あなたらしく、面接に臨んでくださいね 😊"
57
  except Exception as e:
58
  return f"エラーが発生しました: {str(e)}"
59
 
60
- # Gradio UI(Blocks形式)
61
  with gr.Blocks(title="面接で不安なことを入力して下さい") as demo:
62
  gr.Markdown("## 面接で不安なことを入力して下さい")
63
 
@@ -68,12 +63,12 @@ with gr.Blocks(title="面接で不安なことを入力して下さい") as demo
68
  placeholder="例:面接で緊張してしまいます。どうすればよいですか?",
69
  lines=2,
70
  )
71
- submit_btn = gr.Button("転職面接ナビに回答してもらう", elem_id="submit-btn")
72
  clear_btn = gr.Button("リセット")
73
  with gr.Column():
74
- answer = gr.HTML(label="回答")
75
 
76
  submit_btn.click(fn=generate_answer, inputs=question, outputs=answer)
77
  clear_btn.click(fn=lambda: ("", ""), inputs=None, outputs=[question, answer])
78
 
79
- demo.launch()
 
5
  import csv
6
  from sentence_transformers import SentenceTransformer, util
7
 
 
8
  openai.api_key = os.getenv("OPENAI_API_KEY")
9
 
 
10
  if not os.path.exists("articles"):
11
  with zipfile.ZipFile("articles.zip", "r") as zip_ref:
12
  zip_ref.extractall("articles")
13
 
14
+ documents = []
15
+ file_map = {}
16
+
17
  with open("articles/articles.csv", "r", encoding="cp932") as f:
18
  reader = csv.DictReader(f)
19
  for row in reader:
 
21
  documents.append(content)
22
  file_map[content] = {"title": row["title"], "url": row["url"]}
23
 
 
24
  model = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
25
  document_embeddings = model.encode(documents, convert_to_tensor=True)
26
 
 
27
  def generate_answer(query):
28
  query_embedding = model.encode(query, convert_to_tensor=True)
29
  hits = util.semantic_search(query_embedding, document_embeddings, top_k=2)[0]
 
36
 
37
  context = "\n\n".join(documents[hit["corpus_id"]][:300] for hit in hits)
38
  prompt = (
39
+ f"以下の内容をふまえて、転職面接に関する質問に自然で丁寧な日本語で答えてください。\n"
 
40
  f"質問: {query}\n"
41
  f"---\n{context}\n---"
42
  )
 
48
  temperature=0.6,
49
  )
50
  answer = response.choices[0].message.content.strip()
51
+ reference = "\n".join(sources)
52
+ return f"{answer}\n\nもっと詳しく知りたい方は、以下もご覧ください:\n{reference}"
53
  except Exception as e:
54
  return f"エラーが発生しました: {str(e)}"
55
 
 
56
  with gr.Blocks(title="面接で不安なことを入力して下さい") as demo:
57
  gr.Markdown("## 面接で不安なことを入力して下さい")
58
 
 
63
  placeholder="例:面接で緊張してしまいます。どうすればよいですか?",
64
  lines=2,
65
  )
66
+ submit_btn = gr.Button("転職面接ナビに回答してもらう", elem_classes="submit-btn")
67
  clear_btn = gr.Button("リセット")
68
  with gr.Column():
69
+ answer = gr.Textbox(label="回答", lines=10)
70
 
71
  submit_btn.click(fn=generate_answer, inputs=question, outputs=answer)
72
  clear_btn.click(fn=lambda: ("", ""), inputs=None, outputs=[question, answer])
73
 
74
+ demo.launch()