Kyudan commited on
Commit
8c76211
Β·
verified Β·
1 Parent(s): 33fcc82

error control

Browse files
Files changed (1) hide show
  1. app.py +41 -37
app.py CHANGED
@@ -20,43 +20,47 @@ vectorstore = FAISS.load_local(save_path, embedding_model, allow_dangerous_deser
20
 
21
  def chatbot(input_question, eng_trans=True, num_ref=3):
22
  """챗봇 ν•¨μˆ˜"""
23
- retriever = vectorstore.as_retriever(search_kwargs={"k": num_ref})
24
-
25
- # ν•œκ΅­μ–΄λ‘œ 질의
26
- if not eng_trans:
27
- basic_docs = retriever.invoke(input_question)
28
- # μ˜μ–΄λ‘œ λ²ˆμ—­ ν›„ 질의(μ˜μ–΄, ν•œκΈ€ λ‘˜ λ‹€ 검색)
29
- else:
30
- eng = translate_ko_to_en(input_question)
31
- basic_docs = retriever.invoke(input_question)
32
- eng_docs = retriever.invoke(eng)
33
- basic_docs = basic_docs + eng_docs
34
-
35
- context = "\n".join([doc.page_content for doc in basic_docs])
36
-
37
- client = OpenAI(api_key=YOUR_OPENAI_API_KEY)
38
-
39
- # GPT-4 or GPT-4o-mini λ“± λͺ¨λΈ 지정
40
- completion = client.chat.completions.create(
41
- model="gpt-4o-mini",
42
- messages=[
43
- {
44
- "role": "user",
45
- "content": f"""당신은 λ°˜λ„μ²΄μ™€ μ°¨μ„ΈλŒ€λ°˜λ„μ²΄ν•™κ³Όμ— λŒ€ν•΄μ„œ μ„€λͺ…ν•˜λŠ” Assistantμž…λ‹ˆλ‹€.
46
- μ°¨μ„ΈλŒ€λ°˜λ„μ²΄ν•™κ³ΌλŠ” μ„œμšΈμ˜ μ€‘μ•™λŒ€ν•™κ΅ 창의ICTκ³΅κ³ΌλŒ€ν•™μ— μ„€λ¦½λœ ν•™κ³Όμž…λ‹ˆλ‹€. ν•™κ³Όμž₯ 및 단μž₯은 μ†‘μƒν—Œ ꡐ수이며 ν˜„μž¬ μ„œν¬ν„°μ¦ˆ 3κΈ° νŒ€μž₯은 μ •κ·œλ‹¨ ν•™μƒμž…λ‹ˆλ‹€.
47
- 이 ν•™κ³ΌλŠ” μ„œμšΈλŒ€ν•™κ΅, μ€‘μ•™λŒ€ν•™κ΅, ν¬ν•­κ³΅κ³ΌλŒ€ν•™κ΅, μˆ­μ‹€λŒ€ν•™κ΅, κ°•μ›λŒ€ν•™κ΅, λŒ€κ΅¬λŒ€ν•™κ΅, μ‘°μ„ μ΄κ³΅λŒ€ν•™κ΅κ°€ 학점ꡐλ₯˜λ₯Ό 톡해 μˆ˜κ°•ν•  수 μžˆλŠ” ν•™κ³Όμž…λ‹ˆλ‹€.
48
- λ‹€μŒ λ§₯락에 맞게 μ§ˆλ¬Έμ— ν•œκΈ€λ‘œ λ‹΅ν•˜μ„Έμš”. 닡을 λͺ¨λ₯΄κ² λ‹€λ©΄ semicon@cau.ac.kr λ˜λŠ” 02-881-7301 둜 λ¬Έμ˜ν•˜λΌκ³  ν•˜μ„Έμš”.
49
-
50
- λ§₯락: {context}
51
-
52
- 질문: {input_question}
53
- """
54
- }
55
- ]
56
- )
57
-
58
- return completion.choices[0].message.content
59
-
 
 
 
 
60
  # Gradio Blocks λ ˆμ΄μ•„μ›ƒμœΌλ‘œ κΎΈλ―Ό 버전
61
  with gr.Blocks() as demo:
62
  # 상단 이미지
 
20
 
21
  def chatbot(input_question, eng_trans=True, num_ref=3):
22
  """챗봇 ν•¨μˆ˜"""
23
+ try:
24
+ retriever = vectorstore.as_retriever(search_kwargs={"k": num_ref})
25
+
26
+ # ν•œκ΅­μ–΄λ‘œ 질의
27
+ if not eng_trans:
28
+ basic_docs = retriever.invoke(input_question)
29
+ # μ˜μ–΄λ‘œ λ²ˆμ—­ ν›„ 질의(μ˜μ–΄, ν•œκΈ€ λ‘˜ λ‹€ 검색)
30
+ else:
31
+ eng = translate_ko_to_en(input_question)
32
+ basic_docs = retriever.invoke(input_question)
33
+ eng_docs = retriever.invoke(eng)
34
+ basic_docs = basic_docs + eng_docs
35
+
36
+ context = "\n".join([doc.page_content for doc in basic_docs])
37
+
38
+ client = OpenAI(api_key=YOUR_OPENAI_API_KEY)
39
+
40
+ # GPT-4 or GPT-4o-mini λ“± λͺ¨λΈ 지정
41
+ completion = client.chat.completions.create(
42
+ model="gpt-4o-mini",
43
+ messages=[
44
+ {
45
+ "role": "user",
46
+ "content": f"""당신은 λ°˜λ„μ²΄μ™€ μ°¨μ„ΈλŒ€λ°˜λ„μ²΄ν•™κ³Όμ— λŒ€ν•΄μ„œ μ„€λͺ…ν•˜λŠ” Assistantμž…λ‹ˆλ‹€.
47
+ μ°¨μ„ΈλŒ€λ°˜λ„μ²΄ν•™κ³ΌλŠ” μ„œμšΈμ˜ μ€‘μ•™λŒ€ν•™κ΅ 창의ICTκ³΅κ³ΌλŒ€ν•™μ— μ„€λ¦½λœ ν•™κ³Όμž…λ‹ˆλ‹€. ν•™κ³Όμž₯ 및 단μž₯은 μ†‘μƒν—Œ ꡐ수이며 ν˜„μž¬ μ„œν¬ν„°μ¦ˆ 3κΈ° νŒ€μž₯은 μ •κ·œλ‹¨ ν•™μƒμž…λ‹ˆλ‹€.
48
+ 이 ν•™κ³ΌλŠ” μ„œμšΈλŒ€ν•™κ΅, μ€‘μ•™λŒ€ν•™κ΅, ν¬ν•­κ³΅κ³ΌλŒ€ν•™κ΅, μˆ­μ‹€λŒ€ν•™κ΅, κ°•μ›λŒ€ν•™κ΅, λŒ€κ΅¬λŒ€ν•™κ΅, μ‘°μ„ μ΄κ³΅λŒ€ν•™κ΅κ°€ 학점ꡐλ₯˜λ₯Ό 톡해 μˆ˜κ°•ν•  수 μžˆλŠ” ν•™κ³Όμž…λ‹ˆλ‹€.
49
+ λ‹€μŒ λ§₯락에 맞게 μ§ˆλ¬Έμ— ν•œκΈ€λ‘œ λ‹΅ν•˜μ„Έμš”. 닡을 λͺ¨λ₯΄κ² λ‹€λ©΄ semicon@cau.ac.kr λ˜λŠ” 02-881-7301 둜 λ¬Έμ˜ν•˜λΌκ³  ν•˜μ„Έμš”.
50
+
51
+ λ§₯락: {context}
52
+
53
+ 질문: {input_question}
54
+ """
55
+ }
56
+ ]
57
+ )
58
+
59
+ return completion.choices[0].message.content
60
+ except openai.error.RateLimitError:
61
+ return 'API μ‚¬μš© λΉ„μš©μ„ μ΄ˆκ³Όν•˜μ—¬ μ—λŸ¬κ°€ λ‚¬μŠ΅λ‹ˆλ‹€. κ΄€λ¦¬μžμ—κ²Œ λ¬Έμ˜ν•˜μ‹­μ‹œμ˜€.'
62
+ except Exception as e:
63
+ return f'였λ₯˜ λ°œμƒ: {str(e)}'
64
  # Gradio Blocks λ ˆμ΄μ•„μ›ƒμœΌλ‘œ κΎΈλ―Ό 버전
65
  with gr.Blocks() as demo:
66
  # 상단 이미지