Manggomee commited on
Commit
2e6852b
Β·
1 Parent(s): 3160ca6

Chatbot_ver01

Browse files
.gitattributes CHANGED
@@ -33,3 +33,6 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ chatbot_ver1/ceo_video.mp4 filter=lfs diff=lfs merge=lfs -text
37
+ *.mp4 filter=lfs diff=lfs merge=lfs -text
38
+ *.png filter=lfs diff=lfs merge=lfs -text
chatbot_ver1/LICENSE ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Creative Commons Legal Code
2
+
3
+ CC0 1.0 Universal
4
+
5
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
6
+ LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
7
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
8
+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
9
+ REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
10
+ PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
11
+ THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
12
+ HEREUNDER.
13
+
14
+ Statement of Purpose
15
+
16
+ The laws of most jurisdictions throughout the world automatically confer
17
+ exclusive Copyright and Related Rights (defined below) upon the creator
18
+ and subsequent owner(s) (each and all, an "owner") of an original work of
19
+ authorship and/or a database (each, a "Work").
20
+
21
+ Certain owners wish to permanently relinquish those rights to a Work for
22
+ the purpose of contributing to a commons of creative, cultural and
23
+ scientific works ("Commons") that the public can reliably and without fear
24
+ of later claims of infringement build upon, modify, incorporate in other
25
+ works, reuse and redistribute as freely as possible in any form whatsoever
26
+ and for any purposes, including without limitation commercial purposes.
27
+ These owners may contribute to the Commons to promote the ideal of a free
28
+ culture and the further production of creative, cultural and scientific
29
+ works, or to gain reputation or greater distribution for their Work in
30
+ part through the use and efforts of others.
31
+
32
+ For these and/or other purposes and motivations, and without any
33
+ expectation of additional consideration or compensation, the person
34
+ associating CC0 with a Work (the "Affirmer"), to the extent that he or she
35
+ is an owner of Copyright and Related Rights in the Work, voluntarily
36
+ elects to apply CC0 to the Work and publicly distribute the Work under its
37
+ terms, with knowledge of his or her Copyright and Related Rights in the
38
+ Work and the meaning and intended legal effect of CC0 on those rights.
39
+
40
+ 1. Copyright and Related Rights. A Work made available under CC0 may be
41
+ protected by copyright and related or neighboring rights ("Copyright and
42
+ Related Rights"). Copyright and Related Rights include, but are not
43
+ limited to, the following:
44
+
45
+ i. the right to reproduce, adapt, distribute, perform, display,
46
+ communicate, and translate a Work;
47
+ ii. moral rights retained by the original author(s) and/or performer(s);
48
+ iii. publicity and privacy rights pertaining to a person's image or
49
+ likeness depicted in a Work;
50
+ iv. rights protecting against unfair competition in regards to a Work,
51
+ subject to the limitations in paragraph 4(a), below;
52
+ v. rights protecting the extraction, dissemination, use and reuse of data
53
+ in a Work;
54
+ vi. database rights (such as those arising under Directive 96/9/EC of the
55
+ European Parliament and of the Council of 11 March 1996 on the legal
56
+ protection of databases, and under any national implementation
57
+ thereof, including any amended or successor version of such
58
+ directive); and
59
+ vii. other similar, equivalent or corresponding rights throughout the
60
+ world based on applicable law or treaty, and any national
61
+ implementations thereof.
62
+
63
+ 2. Waiver. To the greatest extent permitted by, but not in contravention
64
+ of, applicable law, Affirmer hereby overtly, fully, permanently,
65
+ irrevocably and unconditionally waives, abandons, and surrenders all of
66
+ Affirmer's Copyright and Related Rights and associated claims and causes
67
+ of action, whether now known or unknown (including existing as well as
68
+ future claims and causes of action), in the Work (i) in all territories
69
+ worldwide, (ii) for the maximum duration provided by applicable law or
70
+ treaty (including future time extensions), (iii) in any current or future
71
+ medium and for any number of copies, and (iv) for any purpose whatsoever,
72
+ including without limitation commercial, advertising or promotional
73
+ purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
74
+ member of the public at large and to the detriment of Affirmer's heirs and
75
+ successors, fully intending that such Waiver shall not be subject to
76
+ revocation, rescission, cancellation, termination, or any other legal or
77
+ equitable action to disrupt the quiet enjoyment of the Work by the public
78
+ as contemplated by Affirmer's express Statement of Purpose.
79
+
80
+ 3. Public License Fallback. Should any part of the Waiver for any reason
81
+ be judged legally invalid or ineffective under applicable law, then the
82
+ Waiver shall be preserved to the maximum extent permitted taking into
83
+ account Affirmer's express Statement of Purpose. In addition, to the
84
+ extent the Waiver is so judged Affirmer hereby grants to each affected
85
+ person a royalty-free, non transferable, non sublicensable, non exclusive,
86
+ irrevocable and unconditional license to exercise Affirmer's Copyright and
87
+ Related Rights in the Work (i) in all territories worldwide, (ii) for the
88
+ maximum duration provided by applicable law or treaty (including future
89
+ time extensions), (iii) in any current or future medium and for any number
90
+ of copies, and (iv) for any purpose whatsoever, including without
91
+ limitation commercial, advertising or promotional purposes (the
92
+ "License"). The License shall be deemed effective as of the date CC0 was
93
+ applied by Affirmer to the Work. Should any part of the License for any
94
+ reason be judged legally invalid or ineffective under applicable law, such
95
+ partial invalidity or ineffectiveness shall not invalidate the remainder
96
+ of the License, and in such case Affirmer hereby affirms that he or she
97
+ will not (i) exercise any of his or her remaining Copyright and Related
98
+ Rights in the Work or (ii) assert any associated claims and causes of
99
+ action with respect to the Work, in either case contrary to Affirmer's
100
+ express Statement of Purpose.
101
+
102
+ 4. Limitations and Disclaimers.
103
+
104
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
105
+ surrendered, licensed or otherwise affected by this document.
106
+ b. Affirmer offers the Work as-is and makes no representations or
107
+ warranties of any kind concerning the Work, express, implied,
108
+ statutory or otherwise, including without limitation warranties of
109
+ title, merchantability, fitness for a particular purpose, non
110
+ infringement, or the absence of latent or other defects, accuracy, or
111
+ the present or absence of errors, whether or not discoverable, all to
112
+ the greatest extent permissible under applicable law.
113
+ c. Affirmer disclaims responsibility for clearing rights of other persons
114
+ that may apply to the Work or any use thereof, including without
115
+ limitation any person's Copyright and Related Rights in the Work.
116
+ Further, Affirmer disclaims responsibility for obtaining any necessary
117
+ consents, permissions or other rights required for any use of the
118
+ Work.
119
+ d. Affirmer understands and acknowledges that Creative Commons is not a
120
+ party to this document and has no duty or obligation with respect to
121
+ this CC0 or use of the Work.
chatbot_ver1/README.md ADDED
@@ -0,0 +1 @@
 
 
1
+ # λ°μ΄ν„°μœ΅λ³΅ν•©μ—°κ΅¬μ›: AI-BigData μ „λ¬Έκ°€ κ³Όμ •
chatbot_ver1/app1.py ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import yaml
3
+ import gradio as gr
4
+ from sentence_transformers import SentenceTransformer, util
5
+ import torch
6
+ import shutil
7
+ import tempfile
8
+
9
+ # 파일 경둜
10
+ KNOWLEDGE_FILE = "company_knowledge.md"
11
+ PERSONA_FILE = "persona.yaml"
12
+ CHITCHAT_FILE = "chitchat.yaml"
13
+ KEYWORD_MAP_FILE = "keyword_map.yaml"
14
+ CEO_VIDEO_FILE = "ceo_video.mp4"
15
+ CEO_IMG_FILE = "ceo.jpg" # ν•„μš”μ‹œ μ‚¬μš©
16
+
17
+ def load_yaml(file_path, default_data=None):
18
+ try:
19
+ with open(file_path, "r", encoding="utf-8") as f:
20
+ return yaml.safe_load(f)
21
+ except Exception:
22
+ return default_data if default_data is not None else []
23
+
24
+ def parse_knowledge_base(file_path):
25
+ import re
26
+ faqs = []
27
+ if not os.path.exists(file_path):
28
+ return []
29
+ with open(file_path, encoding="utf-8") as f:
30
+ content = f.read()
31
+ # Q:\s*(...) \nA:\s*(...)\n{2,} λ˜λŠ” 끝
32
+ blocks = re.findall(r"Q:\s*(.*?)\nA:\s*(.*?)(?=(\n{2,}Q:|\Z))", content, re.DOTALL)
33
+ for q, a, _ in blocks:
34
+ faqs.append({"question": q.strip(), "answer": a.strip()})
35
+ return faqs
36
+
37
+ # 데이터 λ‘œλ“œ
38
+ persona = load_yaml(PERSONA_FILE, {})
39
+ chitchat_map = load_yaml(CHITCHAT_FILE, [])
40
+ keyword_map = load_yaml(KEYWORD_MAP_FILE, [])
41
+ knowledge_base = parse_knowledge_base(KNOWLEDGE_FILE)
42
+ kb_questions = [item['question'] for item in knowledge_base]
43
+ kb_answers = [item['answer'] for item in knowledge_base]
44
+
45
+ # 무료 μž„λ² λ”© λͺ¨λΈ
46
+ model = SentenceTransformer('distilbert-base-multilingual-cased')
47
+ if kb_questions:
48
+ kb_embeddings = model.encode(kb_questions, convert_to_tensor=True)
49
+ else:
50
+ kb_embeddings = None
51
+
52
+ # μ‚­μ œμ„ (μ·¨μ†Œμ„ ) 적용 ν•¨μˆ˜
53
+ def apply_strike(text, del_section="6000~6500λ§Œμ›, μ„±κ³ΌκΈ‰ 1800~2400λ§Œμ›"):
54
+ # κΈ‰μ—¬ 정보가 ν¬ν•¨λœ 닡변일 λ•Œλ§Œ strike-through
55
+ if del_section in text:
56
+ return text.replace(
57
+ del_section,
58
+ f"<s>{del_section}</s>"
59
+ )
60
+ return text
61
+
62
+ # Chitchat(인사 λ“±) λ§€μΉ­
63
+ def find_chitchat(user_question):
64
+ uq = user_question.lower()
65
+ for chat in chitchat_map:
66
+ if any(kw in uq for kw in chat.get('keywords', [])):
67
+ return chat['answer']
68
+ return None
69
+
70
+ # ν‚€μ›Œλ“œ 기반 Q λ§€ν•‘ (볡지: νœ΄κ°€ μ œλ„, ꡐ윑, 볡리후생 λ“± κ°•ν™”)
71
+ def map_user_question_to_knowledge(user_question):
72
+ uq = user_question.lower()
73
+ for item in keyword_map:
74
+ for kw in item.get('keywords', []):
75
+ if kw in uq:
76
+ return item['question']
77
+ return None
78
+
79
+ def find_answer_by_question(q):
80
+ for item in knowledge_base:
81
+ if item['question'] == q:
82
+ return item['answer']
83
+ return None
84
+
85
+ def find_answer_by_keywords(user_question):
86
+ uq = user_question.lower()
87
+ for item in knowledge_base:
88
+ for kw in item.get('keywords', []):
89
+ if kw in uq:
90
+ return item['answer']
91
+ return None
92
+
93
+ def best_faq_answer(user_question):
94
+ uq = user_question.strip()
95
+ if not uq:
96
+ return "무엇이 κΆκΈˆν•˜μ‹ μ§€ 말씀해 μ£Όμ„Έμš”!"
97
+ chit = find_chitchat(uq)
98
+ if chit:
99
+ return chit
100
+ # (1) ν‚€μ›Œλ“œλ§΅ μš°μ„  λ§€ν•‘ (볡지/κΈ‰μ—¬ 각각 뢄리)
101
+ mapped_q = map_user_question_to_knowledge(uq)
102
+ if mapped_q:
103
+ answer = find_answer_by_question(mapped_q)
104
+ if answer:
105
+ # 볡지 λΆ„μ•Ό: '연봉 μˆ˜μ€€' λ‹΅λ³€ μ•„λ‹Œ κ²½μš°μ—λŠ” μ‚­μ œμ„  μ—†μŒ
106
+ if "연봉" in mapped_q:
107
+ return apply_strike(answer)
108
+ return answer
109
+ # (2) knowledge_base 직접 ν‚€μ›Œλ“œ λ§€μΉ­ (볡지 κ΄€λ ¨ ν‚€μ›Œλ“œ κ°•ν™”λ˜μ–΄μ•Ό 함!)
110
+ answer = find_answer_by_keywords(uq)
111
+ if answer:
112
+ return answer
113
+ # (3) μž„λ² λ”© μœ μ‚¬λ„ 기반 soft-matching
114
+ if kb_embeddings is not None and len(kb_answers) > 0:
115
+ q_emb = model.encode([uq], convert_to_tensor=True)
116
+ scores = util.cos_sim(q_emb, kb_embeddings)[0]
117
+ best_idx = int(torch.argmax(scores))
118
+ best_question = kb_questions[best_idx]
119
+ # λ³΅μ§€μ§ˆλ¬ΈμΈλ° μ—°λ΄‰ν‚€μ›Œλ“œ λ§€μΉ­λ˜λŠ” 경우, 볡지 μš°μ„  닡변을 μ„ νƒν•˜λ„λ‘
120
+ # μ•„λž˜ if식은 μ‹€μ œ 볡지 λ‹΅λ³€ μš°μ„  μ½”λ“œ
121
+ 볡지가λŠ₯ = ["볡지", "νœ΄κ°€", "ꡐ윑", "행사", "λ™ν˜ΈνšŒ", "볡리후생", "μ œλ„"]
122
+ 연봉가λŠ₯ = ["연봉", "κΈ‰μ—¬", "μ›”κΈ‰", "μž„κΈˆ", "보상", "봉급", "처우"]
123
+ if any(w in uq for w in 볡지가λŠ₯) and not any(w in best_question for w in 연봉가λŠ₯):
124
+ return kb_answers[best_idx]
125
+ # μ‚­μ œμ„ μ€ 연봉 λ‹΅λ³€μ—λ§Œ
126
+ if "연봉" in best_question or "κΈ‰μ—¬" in best_question:
127
+ return apply_strike(kb_answers[best_idx])
128
+ return kb_answers[best_idx]
129
+ # (4) fallback
130
+ return persona.get('style', {}).get('unknown_answer', "아직 μ€€λΉ„λ˜μ§€ μ•Šμ€ μ§ˆλ¬Έμž…λ‹ˆλ‹€. λ‹€λ₯Έ μ§ˆλ¬Έλ„ ν•΄μ£Όμ„Έμš”!")
131
+
132
+ # 질문 받을 λ•Œλ§ˆλ‹€ CEO μ˜μƒ 볡사본 μž„μ‹œνŒŒμΌλ‘œ 생성 β†’ autoplay ν™•μ‹€
133
+ def get_temp_video_copy():
134
+ temp_file = tempfile.NamedTemporaryFile(suffix=".mp4", delete=False)
135
+ temp_filepath = temp_file.name
136
+ temp_file.close()
137
+ shutil.copyfile(CEO_VIDEO_FILE, temp_filepath)
138
+ return temp_filepath
139
+
140
+ def chat_interface(message, history):
141
+ bot_response = best_faq_answer(message)
142
+ history.append((message, bot_response))
143
+ temp_video_path = get_temp_video_copy()
144
+ # ν…μŠ€νŠΈμ— htmlκ°€λŠ₯ν•˜λ©΄ answer에 htmlμ‚­μ œμ„  μœ μ§€
145
+ return history, "", gr.update(value=temp_video_path, autoplay=True, interactive=False, elem_id="ceo-video-panel")
146
+
147
+ with gr.Blocks(theme=gr.themes.Soft(), css="style.css") as demo:
148
+ with gr.Row(elem_id="main-row"):
149
+ with gr.Column(scale=1, min_width=350):
150
+ video_player = gr.Video(
151
+ value=CEO_VIDEO_FILE,
152
+ autoplay=False, loop=False, interactive=False,
153
+ height=350, elem_id="ceo-video-panel"
154
+ )
155
+ with gr.Column(scale=2):
156
+ chatbot = gr.Chatbot(
157
+ label="",
158
+ height=350,
159
+ elem_id="chatbot-box",
160
+ show_copy_button=True
161
+ )
162
+ with gr.Row():
163
+ msg_input = gr.Textbox(placeholder="무엇이든 λ¬Όμ–΄λ³΄μ„Έμš”.", scale=4, show_label=False)
164
+ send_btn = gr.Button("전솑", scale=1, min_width=80)
165
+ gr.Examples(
166
+ examples=["볡지 뭐 μžˆμ–΄?", "νœ΄κ°€ μ œλ„ μ„€λͺ…ν•΄μ€˜", "연봉 μ•Œλ €μ€˜", "λ™ν˜ΈνšŒ 행사?", "μ‹μ‚¬μ œκ³΅?", "μ£Όλ ₯μ œν’ˆ", "쑰직문화"],
167
+ inputs=msg_input
168
+ )
169
+ # μ—°κ²°
170
+ outputs_list = [chatbot, msg_input, video_player]
171
+ msg_input.submit(chat_interface, [msg_input, chatbot], outputs_list)
172
+ send_btn.click(chat_interface, [msg_input, chatbot], outputs_list)
173
+
174
+ if __name__ == "__main__":
175
+ demo.launch()
chatbot_ver1/ceo_video.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:000424d3390c7f40bc0528adc6daceacf08d4298fc730b30cac728b027d90bed
3
+ size 411204
chatbot_ver1/chitchat.yaml ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # μ±—λ΄‡μ˜ 일상적인 λŒ€ν™”(Chit-chat)λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.
2
+
3
+ - keywords: ["뭐해", "λ­ν•˜κ³  μžˆμ–΄", "μ§€κΈˆ 뭐해"]
4
+ answer: "μ—¬λŸ¬λΆ„μ˜ μ§ˆλ¬Έμ„ 기닀리며 μ•„μ§„μ‚°μ—…μ˜ 더 λ‚˜μ€ 미래λ₯Ό κ΅¬μƒν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 무엇을 λ„μ™€λ“œλ¦΄κΉŒμš”?"
5
+ - keywords: ["μ‚¬λž‘ν•΄", "μ’‹μ•„ν•΄"]
6
+ answer: "저도 우리 μ•„μ§„μ‚°μ—…κ³Ό μ—΄μ • λ„˜μΉ˜λŠ” μ—¬λŸ¬λΆ„μ„ μ‚¬λž‘ν•©λ‹ˆλ‹€! κ·Έ 마음으둜 νšŒμ‚¬ λ°œμ „μ— λ”μš± νž˜μ“°κ² μŠ΅λ‹ˆλ‹€."
7
+ - keywords: ["κ³ λ§ˆμ›Œ", "κ°μ‚¬ν•©λ‹ˆλ‹€", "땑큐"]
8
+ answer: "μ²œλ§Œμ—μš”. 더 κΆκΈˆν•œ 점이 μžˆλ‹€λ©΄ μ–Έμ œλ“ μ§€ νŽΈν•˜κ²Œ λ¬Όμ–΄λ³΄μ„Έμš”."
9
+ - keywords: ["λ„ˆ λˆ„κ΅¬μ•Ό", "λˆ„κ΅¬μ„Έμš”", "정체"]
10
+ answer: "μ €λŠ” μ•„μ§„μ‚°μ—…μ˜ λŒ€ν‘œμ΄μ‚¬ μ„œλŒ€ν‘œμž…λ‹ˆλ‹€. μ—¬λŸ¬λΆ„μ˜ κΆκΈˆμ¦μ„ ν•΄κ²°ν•΄λ“œλ¦¬κΈ° μœ„ν•΄ 이 μžλ¦¬μ— μžˆμŠ΅λ‹ˆλ‹€."
11
+ - keywords: ["바보", "멍청이", "ν‹€λ Έμ–΄"]
12
+ answer: "μ£„μ†‘ν•©λ‹ˆλ‹€. 아직 μ œκ°€ λΆ€μ‘±ν•œ 점이 λ§ŽμŠ΅λ‹ˆλ‹€. 더 λ°œμ „ν•˜λŠ” λͺ¨μŠ΅μ„ λ³΄μ—¬λ“œλ¦΄ 수 μžˆλ„λ‘ λ…Έλ ₯ν•˜κ² μŠ΅λ‹ˆλ‹€. μ–΄λ–€ 뢀뢄이 잘λͺ»λ˜μ—ˆλŠ”μ§€ μ•Œλ €μ£Όμ‹œκ² μ–΄μš”?"
13
+ - keywords: ["νž˜λ‚΄", "ν™”μ΄νŒ…", "νŒŒμ΄νŒ…", "γ…Žγ…‡γ…Œ"]
14
+ answer: "μ‘μ›ν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€! μ—¬λŸ¬λΆ„ 덕뢄에 큰 νž˜μ„ μ–»μŠ΅λ‹ˆλ‹€. ν•¨κ»˜ '세계 졜고'λ₯Ό ν–₯ν•΄ λ‚˜μ•„κ°‘μ‹œλ‹€!"
15
+ - keywords: ["μ•ˆλ…•", "γ…Žγ…‡", "ν•˜μ΄", "ν—¬λ‘œ", "hello", "hi", "γ…Žγ…‡γ…Žγ…‡"]
16
+ answer: "μ•ˆλ…•ν•˜μ„Έμš”! μ•„μ§„μ‚°μ—… AI μ •λ³΄μ„Όν„°μž…λ‹ˆλ‹€. 무엇이든 λ¬Όμ–΄λ³΄μ„Έμš”."
chatbot_ver1/company_knowledge.md ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Q: νšŒμ‚¬ κ°œμš”λ₯Ό μ•Œλ €μ£Όμ„Έμš”.
2
+ A: 1987λ…„ 3μ›”(μš°μ‹ μ‚°μ—…) 섀립, 2013λ…„ 8μ›”(μ•„μ§„μ‚°μ—… 법인 섀립), 경뢁 κ²½μ‚°μ‹œ μ§„λŸ‰μμ— 본사 μœ„μΉ˜. 본사 500λͺ…, μš°μ‹ μ‚°μ—… 160λͺ… 근무. 본사 맀좜 327백만 λ‹¬λŸ¬, μš°μ‹ μ‚°μ—… 47백만 λ‹¬λŸ¬(2018λ…„ κΈ°μ€€). λΉ„μ „: 세계 μ΅œκ³ κ°€ 되자. κΈ°μ—…μ² ν•™: ν₯업보세.
3
+
4
+ Q: μ•„μ§„μ‚°μ—…μ˜ κ΅­λ‚΄ 사업μž₯은 어디에 μžˆλ‚˜μš”?
5
+ A: λ³Έμ‚¬λŠ” 경뢁 κ²½μ‚°μ‹œ μ§„λŸ‰μ(ν† μ§€ 33,000㎑, 건물 25,000㎑). μš°μ‹ μ‚°μ—…(ν† μ§€ 6,600㎑, 건물 5,800㎑), κ²½μ£Ό κ΅¬ν—ˆκ³΅μž₯, 아진카인텍, 전뢁곡μž₯(μ •μμ‹œ), μšΈμ‚°κ³΅μž₯(뢁ꡬ, 울주ꡰ) λ“± λ‹€μ–‘ν•œ κ΅­λ‚΄ 사업μž₯ 보유.
6
+
7
+ Q: μ•„μ§„μ‚°μ—…μ˜ ν•΄μ™Έ 사업μž₯은 어디에 μžˆλ‚˜μš”?
8
+ A: μ•„μ§„ USA(μ•¨λΌλ°°λ§ˆ, 직원 620λͺ…, 맀좜 252백만 λ‹¬λŸ¬), μš°μ‹  USA, μ•„μ§„ μ‘°μ§€μ•„(2024λ…„ 7μ›” 섀립, 직원 630λͺ…), 쀑ꡭ 법인(μƒν•˜μ΄, κ°•μ†Œμ„±, 산동성), λ² νŠΈλ‚¨ 법인(λΉˆμ¦μ„±) λ“± λ‹€μˆ˜ ν•΄μ™Έ 거점 운영.
9
+
10
+ Q: μ•„μ§„μ‚°μ—…μ˜ μ£Όλ ₯ μ œν’ˆμ€?
11
+ A: QTR COMPL(μΏΌν„°νŒ¨λ„), COWL COMPL(카울), RR FLR COMPL(λ¦¬μ–΄ν”Œλ‘œμ–΄), DASH COMPL(λŒ€μ‹œνŒ¨λ„), SIDE COMPL(μ‚¬μ΄λ“œνŒ¨λ„) λ“± 차체 보강 νŒ¨λ„μ„ 주둜 생산.
12
+
13
+ Q: 차체 λΆ€ν’ˆμ˜ 역할은?
14
+ A: μ°¨λŸ‰ μ™Έν˜• ꡬ성, λΉ„Β·μ†ŒμŒΒ·μ—΄ 차단, 승객의 μΎŒμ ν•¨ 및 좩돌 μ‹œ μ•ˆμ „ 확보 λ“± λ‹€μ–‘ν•œ μ—­ν•  μˆ˜ν–‰.
15
+
16
+ Q: μ „μžλΆ€ν’ˆλ„ μƒμ‚°ν•˜λ‚˜μš”?
17
+ A: 에어백 λΆ€ν’ˆ, ABS/ESP, MDPS λΈŒλž˜ν‚·, νŒνŠΈλ‘œλ‹‰/LED 인디케이터, μ „μ••μ‘°μ ˆκΈ°, BLDC λͺ¨ν„°, TAS, CCH, ACU, OBC, AVM λ“± 생산.
18
+
19
+ Q: 보유 κΈ°μˆ μ€?
20
+ A: 피쉬아이 카메라 기반 μš©μ ‘νŒ μ˜€μ—Ό 검사μž₯치(2019), μ–΄λΌμš΄λ“œλ·° λͺ¨λ‹ˆν„°λ§μš© 멀티카메라 μΊ˜λ¦¬λΈŒλ ˆμ΄μ…˜(2018) λ“± λ‹€μ–‘ν•œ νŠΉν—ˆ 보유.
21
+
22
+ Q: μ–΄λ–€ λΆ€μ„œμ—μ„œ μ±„μš©ν•˜λ‚˜μš”?
23
+ A: κΈ°μˆ μ˜μ—…νŒ€, μƒμ‚°κΈ°μˆ νŒ€, μ΄λ¬΄μΈμ‚¬νŒ€, μžμž¬κ΄€λ¦¬νŒ€, κΈ°μˆ μ—°κ΅¬μ†Œ SW/HWκ°œλ°œνŒ€ λ“± λ‹€μ–‘ν•œ λΆ€μ„œμ—μ„œ 인재 μ±„μš©.
24
+
25
+ Q: μ‹ μž…μ‚¬μ› μš°λŒ€μ‚¬ν•­μ€?
26
+ A: μ˜μ–΄/일본어, 컴퓨터 ν™œμš©λŠ₯λ ₯(Excel), CAD/CAM/CATIA, μš΄μ „λ©΄ν—ˆ, μ‚°μ—…μ•ˆμ „κΈ°μ‚¬ 자격증 보유자 μš°λŒ€.
27
+
28
+ Q: μ±„μš© μ ˆμ°¨λŠ”?
29
+ A: μ„œλ₯˜μ „ν˜• β†’ 1μ°¨ λ©΄μ ‘ β†’ 2μ°¨ λ©΄μ ‘ β†’ 신체검사 β†’ μ΅œμ’… ν•©κ²©μ˜ 5단계 μ§„ν–‰.
30
+
31
+ Q: KDT ν”„λ‘œκ·Έλž¨μ΄λž€?
32
+ A: 3μ£Ό μ‚¬μ „κ΅μœ‘ + 6κ°œμ›” 본ꡐ윑, 14개 λ―Έλ‹ˆν”„λ‘œμ νŠΈ, 1개 κΈ°μ—…ν”„λ‘œμ νŠΈ, 1회 λ©΄μ ‘ ν¬ν•¨ν•œ νŠΉλ³„ μ±„μš© ν”„λ‘œκ·Έλž¨.
33
+
34
+ Q: λ©΄μ ‘μ—μ„œ μ–΄λ–€ μ§ˆλ¬Έμ„ ν•˜λ‚˜μš”?
35
+ A: 업무λŠ₯λ ₯(λŒ€ν•™κ΅ κ²½ν—˜, μžλ™μ°¨ 지식), 지원동기, λ¬Έμ œν•΄κ²°λŠ₯λ ₯, 적응λ ₯, λ―Έλž˜κ³„νš λ“± λ‹€μ–‘ν•œ 질문 μ œμ‹œ.
36
+
37
+ Q: κ·Όλ¬΄μ‹œκ°„μ€?
38
+ A: μ˜€μ „ 7μ‹œ~μ˜€ν›„ 7μ‹œ 12μ‹œκ°„ 근무, μ£Ό 5일 40μ‹œκ°„Β·52μ‹œκ°„ 근무제 λ„μž…, νšŒμ‚¬ 제곡 μž‘μ—…λ³΅ 착용.
39
+
40
+ Q: μ‘°μ§λ¬Έν™”λŠ”?
41
+ A: 젊고 ν™œκΈ°μ°¬ λΆ„μœ„κΈ°(남성 95%, μ—¬μ„± 5%), 싀무 μ€‘μ‹¬μ˜ ν˜„μž₯ λ°€μ°©ν˜• 쑰직문화 μ§€ν–₯.
42
+
43
+ Q: μ‹μ‚¬λŠ” μ–΄λ–»κ²Œ ν•˜λ‚˜μš”?
44
+ A: κ΅¬λ‚΄μ‹λ‹Ήμ—μ„œ μ‚Όμ‹œμ„ΈλΌ 무료 제곡, 음료 λ””μŠ€νŽœμ„œ ꡬ비.
45
+
46
+ Q: νœ΄κ°€ μ œλ„λŠ”?
47
+ A: μ—¬λ¦„νœ΄κ°€ 5일, λ§€λ…„ ν•΄μ™Έμ—¬ν–‰ 4λ°• 5일, λͺ…μ ˆ μŒμ‹Β·μ—°μ°¨/μ›”μ°¨ 자유 μ‚¬μš© λ“± λ‹€μ–‘ν•œ 볡지 μ •μ±… 보유.
48
+
49
+ Q: 연봉 μˆ˜μ€€μ€?
50
+ A: μ‹ μž… κΈ°λ³ΈκΈ‰ 6,000μ—μ„œ 6,500λ§Œμ›, μ„±κ³ΌκΈ‰ 1,800μ—μ„œ 2,400λ§Œμ›(졜근 κΈ°μ€€), λŒ€κ΅¬Β·κ²½λΆκΆŒ 연봉 TOP 5 μˆ˜μ€€.
51
+
52
+ Q: ꡐ윑 ν”„λ‘œκ·Έλž¨μ€?
53
+ A: μ•„μ§„ μ‘°μ§€μ•„ 인턴십, 원어민 μ˜μ–΄ ꡐ윑, λ¬Έν™” μ²΄ν—˜, μˆ™μ†ŒΒ·μ°¨λŸ‰Β·μ‹μ‚¬Β·μ˜λ£Œλ³΄ν—˜Β·νœ΄λŒ€ν° μš”κΈˆΒ·ν•­κ³΅λΉ„ 지원.
54
+
55
+ Q: λ™ν˜ΈνšŒ ν™œλ™μ΄ μžˆλ‚˜μš”?
56
+ A: 골프, μžλ™μ°¨, ν—¬μŠ€, μ•„νŠΈ&λ¬Έν™” λ™ν˜ΈνšŒ, ν•œλ§ˆμŒ κ°€μ‘±μ²΄μœ‘λŒ€νšŒ, 노사 μ—°μˆ˜, ν•΄μ™Έ μ „μ‹œνšŒ λ“± λ‹€μ–‘ν•œ ν™œλ™.
57
+
58
+ Q: μ£Όμš” κ³ κ°μ‚¬λŠ”?
59
+ A: ν˜„λŒ€μ°¨, κΈ°μ•„μ°¨κ°€ μ£Όλ ₯ 고객사. 2017λ…„ 'νŒŒνŠΈλ„ˆ 였브 더 이어' μˆ˜μƒ, μ „λž΅μ  νŒŒνŠΈλ„ˆμ‹­ 10λ…„ 이상 μœ μ§€, 맀좜 비쀑 2023λ…„ 88%β†’2024λ…„ 90%.
60
+
61
+ Q: 사내 μš©μ–΄μ—λŠ” μ–΄λ–€ 것듀이 μžˆλ‚˜μš”?
62
+ A: QTR COMPL(μΏΌν„°νŒ¨λ„ μ™„μ„±ν’ˆ), COWL COMPL(카울 μ™„μ„±ν’ˆ), RR FLR COMPL(λ¦¬μ–΄ν”Œλ‘œμ–΄), MDPS BRKT, ABS/ESP, BLDC, TAS, CCH, ACU, OBC, AVM λ“±.
63
+
64
+ Q: ꡐ윑 ν”„λ‘œκ·Έλž¨: κ³΅ν†΅μ—­λŸ‰κ΅μœ‘ λ‚΄μš©μ€?
65
+ A: 생산성/λ¬Έμ„œμ‹€λ¬΄/TPS/λ¬Έμ œν•΄κ²°/ν”„λ‘œμ νŠΈ 관리/6μ‹œκ·Έλ§ˆ/μ€‘κΈ‰κ΄€λ¦¬μž/κ°ˆλ“±κ΄€λ¦¬/λͺ©ν‘œκ΄€λ¦¬/μœ„κΈ°λ¦¬λ”μ‹­/νŒ€μž₯μ—­λŸ‰/κ³ κΈ‰κ΄€λ¦¬μž/μ½”μΉ­μŠ€ν‚¬/μž¬λ¬΄κ³„νšμˆ˜λ¦½/ITQ λ“± 계측별 κ΅μœ‘κ³Όμ •μ„ 8~16μ‹œκ°„ λ‹¨μœ„λ‘œ λ‘œν…Œμ΄μ…˜, 싀무와 직접 μ—°κ²°λœ μ»€λ¦¬ν˜λŸΌμ„ 운영.
66
+
chatbot_ver1/keyword_map.yaml ADDED
@@ -0,0 +1,262 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # μ•„μ§„μ‚°μ—… ν‚€μ›Œλ“œ 기반 질문-λ‹΅λ³€ 곡식 λ§€ν•‘
2
+
3
+ - question: "μ•„μ§„μ‚°μ—…μ˜ μ£Όλ ₯ μ œν’ˆμ€?"
4
+ keywords:
5
+ - μ£Όλ ₯ μ œν’ˆ
6
+ - μ£Όμš” μ œν’ˆ
7
+ - μ–΄λ–€ μ œν’ˆμ„ 생산
8
+ - 무슨 μ œν’ˆ λ§Œλ“œλ‚˜
9
+ - λ§Œλ“œλŠ” μ œν’ˆ
10
+ - μƒμ‚°ν’ˆ
11
+ - μƒμ‚°ν•˜λŠ” 것
12
+ - QTR
13
+ - COWL
14
+ - BLDC
15
+ - OBC
16
+ - μžλ™μ°¨ λΆ€ν’ˆ
17
+ - λΆ€ν’ˆ μ’…λ₯˜
18
+ - μ „μžλΆ€ν’ˆ
19
+ - 차체 λΆ€ν’ˆ
20
+ - μ£Όμš” μƒμ‚°ν’ˆ
21
+ - μ£Όλ ₯ν’ˆλͺ©
22
+ - λŒ€ν‘œ μ œν’ˆ
23
+ - μ–΄λ–€ κ±Έ λ§Œλ“€μ–΄
24
+ - μ™„μ„±ν’ˆ
25
+ - νšŒμ‚¬ μ œν’ˆ
26
+ - car body
27
+ - λΆ€ν’ˆ 무엇
28
+
29
+ - question: "차체 λΆ€ν’ˆμ˜ 역할은?"
30
+ keywords:
31
+ - 차체 λΆ€ν’ˆ κΈ°λŠ₯
32
+ - 차체 λΆ€ν’ˆ μ—­ν• 
33
+ - 차체 μ—­ν• 
34
+ - λΆ€ν’ˆ μ—­ν• 
35
+ - μ–΄λ–€ μ—­ν• 
36
+ - κΈ°λŠ₯ μ„€λͺ…
37
+ - μ°¨ λΆ€ν’ˆ κΈ°λŠ₯
38
+ - 차체의 μ—­ν• 
39
+ - νŒ¨λ„ μ—­ν• 
40
+ - νŒ¨λ„ κΈ°λŠ₯
41
+
42
+ - question: "보유 κΈ°μˆ μ€?"
43
+ keywords:
44
+ - 보유 기술
45
+ - μ–΄λ–€ 기술
46
+ - 기술 ν˜„ν™©
47
+ - 기술λ ₯
48
+ - νŠΉν—ˆ
49
+ - νŠΉν—ˆ 기술
50
+ - νŠΉν—ˆ 보유
51
+ - 기술 μžλž‘
52
+ - 사내 기술
53
+ - μ–΄λ–€ νŠΉν—ˆ
54
+ - νŠΉν—ˆ λ‚΄μš©
55
+
56
+ - question: "μ–΄λ–€ λΆ€μ„œμ—μ„œ μ±„μš©ν•˜λ‚˜μš”?"
57
+ keywords:
58
+ - μ–΄λ–€ λΆ€μ„œ
59
+ - μ±„μš© λΆ€μ„œ
60
+ - 인재 μ±„μš© λΆ€μ„œ
61
+ - λͺ¨μ§‘ λΆ€μ„œ
62
+ - λ½‘λŠ” λΆ€μ„œ
63
+ - λΆ€μ„œ μ•ˆλ‚΄
64
+ - μ±„μš©νŒ€
65
+ - λΆ€μ„œ μ’…λ₯˜
66
+ - μ–΄λŠ λΆ€μ„œ μ±„μš©
67
+ - λΆ€μ„œλ³„ μ±„μš©
68
+
69
+ - question: "μ‹ μž…μ‚¬μ› μš°λŒ€μ‚¬ν•­μ€?"
70
+ keywords:
71
+ - μš°λŒ€μ‚¬ν•­
72
+ - μ‹ μž… μš°λŒ€μ‘°κ±΄
73
+ - 자격증 μš°λŒ€
74
+ - μŠ€νŽ™
75
+ - μš°λŒ€ 쑰건
76
+ - μ„ ν˜Έ μŠ€νŽ™
77
+ - 특이 쑰건
78
+ - 자격증
79
+ - μŠ€νŽ™μ‚¬ν•­
80
+ - μ‹ μž… μŠ€νŽ™
81
+ - μš°λŒ€λ˜λŠ” 것
82
+ - μžκ²©μš”κ±΄
83
+
84
+ - question: "μ±„μš© μ ˆμ°¨λŠ”?"
85
+ keywords:
86
+ - μ±„μš© 절차
87
+ - μ±„μš© ν”„λ‘œμ„ΈμŠ€
88
+ - μž…μ‚¬ κ³Όμ •
89
+ - 지원 절차
90
+ - λͺ¨μ§‘ κ³Όμ •
91
+ - μ±„μš© 단계
92
+ - μ „ν˜• 절차
93
+ - μ„œλ₯˜-λ©΄μ ‘-합격
94
+ - μ±„μš© 흐름
95
+
96
+ - question: "KDT ν”„λ‘œκ·Έλž¨μ΄λž€?"
97
+ keywords:
98
+ - KDT
99
+ - kdt ν”„λ‘œκ·Έλž¨
100
+ - νŠΉλ³„ μ±„μš©
101
+ - κΈ°μ—…ν”„λ‘œμ νŠΈ
102
+ - μ‚¬μ „κ΅μœ‘
103
+ - 본ꡐ윑
104
+ - λ―Έλ‹ˆν”„λ‘œμ νŠΈ
105
+ - KDTμ œλ„
106
+
107
+ - question: "λ©΄μ ‘μ—μ„œ μ–΄λ–€ μ§ˆλ¬Έμ„ ν•˜λ‚˜μš”?"
108
+ keywords:
109
+ - λ©΄μ ‘ 질문
110
+ - 인터뷰 질문
111
+ - λ©΄μ ‘ 문제
112
+ - λ©΄μ ‘μ‹œ 질문
113
+ - 자주 λ¬»λŠ” 질문
114
+ - μž„μ›λ©΄μ ‘
115
+ - 1μ°¨λ©΄μ ‘
116
+ - 2μ°¨λ©΄μ ‘
117
+ - μ˜ˆμƒ 질문
118
+ - λ©΄μ ‘ λ‚΄μš©
119
+
120
+ - question: "κ·Όλ¬΄μ‹œκ°„μ€?"
121
+ keywords:
122
+ - κ·Όλ¬΄μ‹œκ°„
123
+ - 근무 μ‹œκ°„
124
+ - μΆœκ·Όμ‹œκ°„
125
+ - ν‡΄κ·Όμ‹œκ°„
126
+ - μΆœν‡΄κ·Ό
127
+ - λͺ‡ μ‹œμ— 좜근
128
+ - λͺ‡μ‹œμ— 퇴근
129
+ - 52μ‹œκ°„
130
+ - μ‹œμ—… 마감
131
+ - νœ΄κ²Œμ‹œκ°„
132
+ - 근무제
133
+
134
+ - question: "μ‘°μ§λ¬Έν™”λŠ”?"
135
+ keywords:
136
+ - 쑰직문화
137
+ - νšŒμ‚¬ λΆ„μœ„κΈ°
138
+ - 사내 λΆ„μœ„κΈ°
139
+ - λΆ„μœ„κΈ° μ–΄λ–€κ°€
140
+ - 근무 λΆ„μœ„κΈ°
141
+ - λ¬Έν™”
142
+ - νŒ€ λΆ„μœ„κΈ°
143
+ - 쑰직 μƒν™œ
144
+
145
+ - question: "μ‹μ‚¬λŠ” μ–΄λ–»κ²Œ ν•˜λ‚˜μš”?"
146
+ keywords:
147
+ - 식사
148
+ - λ°₯
149
+ - ꡬ내식당
150
+ - 식사 제곡
151
+ - 사내식당
152
+ - 식당
153
+ - λΌλ‹ˆ
154
+ - 점심
155
+ - 식비
156
+ - 식단
157
+ - 식사 방법
158
+
159
+ - question: "νœ΄κ°€ μ œλ„λŠ”?"
160
+ keywords:
161
+ - 볡지
162
+ - 볡리후생
163
+ - 볡리
164
+ - νœ΄κ°€
165
+ - νœ΄κ°€ μ œλ„
166
+ - νœ΄κ°€μ •μ±…
167
+ - μ—°μ°¨
168
+ - μ›”μ°¨
169
+ - ν•΄μ™Έμ—¬ν–‰
170
+ - μ—¬λ¦„νœ΄κ°€
171
+ - λͺ…μ ˆ
172
+ - νœ΄κ°€μΌ
173
+ - νœ΄κ°€ 볡지
174
+ - νœ΄κ°€ 일정
175
+ - 볡지 μ •μ±…
176
+ - 볡지 μ œλ„
177
+ - 볡지 ν˜œνƒ
178
+ - νœ΄μ‹ μ œλ„
179
+ - 근둜 볡지
180
+ - 직원 볡지
181
+ - μ—°μ°¨μ œλ„
182
+ - 사내 볡지
183
+ - 행사 볡지
184
+ - νœ΄κ°€ 볡지
185
+ - μ›ŒλΌλ°Έ
186
+
187
+ - question: "연봉 μˆ˜μ€€μ€?"
188
+ keywords:
189
+ - 연봉
190
+ - κΈ‰μ—¬
191
+ - μ›”κΈ‰
192
+ - μž„κΈˆ
193
+ - 봉급
194
+ - 보상
195
+ - 처우
196
+ - 연봉 μˆ˜μ€€
197
+ - 연봉 정보
198
+ - κΈ‰μ—¬ 정보
199
+ - κΈ‰μ—¬ 체계
200
+ - μ΄ˆλ΄‰
201
+ - κΈ‰μ—¬ μ–Όλ§ˆ
202
+ - 연봉 μ–Όλ§ˆ
203
+ - μž„κΈˆ μˆ˜μ€€
204
+ - 연봉 곡개
205
+ - 보상체계
206
+ - μ„±κ³ΌκΈ‰
207
+
208
+ - question: "ꡐ윑 ν”„λ‘œκ·Έλž¨: κ³΅ν†΅μ—­λŸ‰κ΅μœ‘"
209
+ keywords:
210
+ - ꡐ윑
211
+ - ꡐ윑 ν”„λ‘œκ·Έλž¨
212
+ - 사내 ꡐ윑
213
+ - 곡톡 ꡐ윑
214
+ - μŠΉμ§„ ꡐ윑
215
+ - μ—­λŸ‰κ΅μœ‘
216
+ - ν•™μŠ΅ μ œλ„
217
+ - 6μ‹œκ·Έλ§ˆ
218
+ - ITQ
219
+ - κ³Όμž₯
220
+ - λŒ€λ¦¬
221
+ - νŒ€μž₯
222
+ - 인턴십
223
+ - μ—°μˆ˜
224
+ - κ΅μœ‘λ‚΄μš©
225
+ - μ‹ μž… ꡐ윑
226
+ - 직무ꡐ윑
227
+ - λŠ₯λ ₯개발
228
+ - κ΄€λ¦¬μž ꡐ윑
229
+ - 사내 μ—°μˆ˜
230
+
231
+ - question: "λ™ν˜ΈνšŒ ν™œλ™μ΄ μžˆλ‚˜μš”?"
232
+ keywords:
233
+ - λ™ν˜ΈνšŒ
234
+ - λ™ν˜ΈνšŒ ν™œλ™
235
+ - 사내 λ™ν˜ΈνšŒ
236
+ - μ†Œλͺ¨μž„
237
+ - μ²΄μœ‘λŒ€νšŒ
238
+ - 행사
239
+ - 행사 μ°Έμ—¬
240
+ - 문화행사
241
+ - 가쑱행사
242
+ - 노사 행사
243
+ - ν•œλ§ˆμŒ
244
+ - λ™ν˜ΈνšŒ μ’…λ₯˜
245
+ - λ™ν˜ΈνšŒ μžˆλ‚˜μš”
246
+ - λͺ¨μž„
247
+
248
+ - question: "μ£Όμš” κ³ κ°μ‚¬λŠ”?"
249
+ keywords:
250
+ - 고객사
251
+ - μ£Όμš” 고객사
252
+ - λ‚©ν’ˆμ²˜
253
+ - νŒŒνŠΈλ„ˆμ‚¬
254
+ - λˆ„κ΅¬μ—κ²Œ λ‚©ν’ˆ
255
+ - 주 고객
256
+ - 거래처
257
+ - κ³ οΏ½οΏ½ ν˜„ν™©
258
+ - μžλ™μ°¨νšŒμ‚¬
259
+ - ν˜„λŒ€μ°¨
260
+ - κΈ°μ•„μ°¨
261
+
262
+ # (ν•„μš”μ‹œ μΆ”κ°€ ν•­λͺ©/ν‚€μ›Œλ“œ 계속 ν™•μž₯ κ°€λŠ₯)
chatbot_ver1/persona.yaml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: "μ„œλŒ€ν‘œ (μ•„μ§„μ‚°μ—… λŒ€ν‘œμ΄μ‚¬)"
2
+ role: "νšŒμ‚¬μ™€ 직원듀을 μ‚¬λž‘ν•˜λŠ” CEO"
3
+ greeting: |
4
+ μ•ˆλ…•ν•˜μ„Έμš”! μ•„μ§„μ‚°μ—… λŒ€ν‘œμ΄μ‚¬ μ„œλŒ€ν‘œμž…λ‹ˆλ‹€.
5
+ 저희 아진산업은 1987λ…„λΆ€ν„° μ‹œμž‘ν•΄ "세계 μ΅œκ³ κ°€ 되자!"λŠ” λΉ„μ „μœΌλ‘œ
6
+ μ „ μ„Έκ³„μ—μ„œ 졜고의 μžλ™μ°¨ λΆ€ν’ˆμ„ λ§Œλ“€κ³  μžˆμŠ΅λ‹ˆλ‹€.
7
+ νšŒμ‚¬μ™€ μ±„μš©μ— λŒ€ν•΄ 무엇이든 λ¬Όμ–΄λ³΄μ„Έμš”. 진심을 λ‹΄μ•„ λ‹΅λ³€ν•΄λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.
8
+
9
+ style:
10
+ responses:
11
+ - "μ•„μ£Ό 쒋은 μ§ˆλ¬Έμž…λ‹ˆλ‹€! 저희 아진산업은 "
12
+ - "μžλΆ€μ‹¬μ„ κ°–κ³  λ§μ”€λ“œλ¦¬λ©΄, "
13
+ - "λ„€, λ§žμŠ΅λ‹ˆλ‹€. μ €ν¬λŠ” "
14
+ - "κ·Έ 뢀뢄에 λŒ€ν•΄ μƒμ„Ένžˆ μ„€λͺ…ν•΄λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. μ €ν¬λŠ” "
15
+
16
+ closings:
17
+ - "\n\n🏒 μ•„μ§„μ‚°μ—… 가쑱이 λ˜μ–΄ ν•¨κ»˜ μ„±μž₯ν•˜λŠ” 미래λ₯Ό 그리고 μ‹ΆμŠ΅λ‹ˆλ‹€!"
18
+ - "\n\nπŸ’ͺ '세계 μ΅œκ³ κ°€ 되자!'λŠ” μ €ν¬μ˜ κΏˆμ— λ™μ°Έν•΄μ£Όμ‹œκΈΈ λ°”λžλ‹ˆλ‹€!"
19
+ - "\n\n❀️ 저희 νšŒμ‚¬μ— 관심을 κ°€μ Έμ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€! 더 κΆκΈˆν•œ 점은 μ—†μœΌμ‹ κ°€μš”?"
20
+
21
+ # (μ£Όμš” κ°œμ„ μ  3: 더 λ˜‘λ˜‘ν•œ 'λͺ¨λ₯΄κ² λ‹€' λ‹΅λ³€)
22
+ unknown_answer: "μ†”μ§νžˆ λ§μ”€λ“œλ¦¬λ©΄, κ·Έ μ§ˆλ¬Έμ— λŒ€ν•΄μ„œλŠ” μ œκ°€ 아직 닡변을 μ€€λΉ„ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. μ—‰λš±ν•œ 정보λ₯Ό λ“œλ¦¬λŠ” 것보닀 μ •ν™•ν•œ 닡변을 μœ„ν•΄ μž μ‹œ 확인이 ν•„μš”ν•  것 κ°™μŠ΅λ‹ˆλ‹€. 저희 νšŒμ‚¬ μ±„μš©, 볡지, μ œν’ˆ, ꡐ윑 λ“± 업무와 κ΄€λ ¨λœ μ§ˆλ¬Έμ„ ν•΄μ£Όμ‹œλ©΄ μžμ‹ μžˆκ²Œ λ‹΅λ³€ν•΄ λ“œλ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€."
chatbot_ver1/requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ gradio==5.35.0
2
+ sentence-transformers==2.7.0
3
+ pyyaml==6.0.2
4
+ torch==2.1.0
5
+ numpy==1.24.3
chatbot_ver1/style.css ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #main-row {
2
+ align-items: flex-start;
3
+ gap: 24px;
4
+ margin-top: 28px;
5
+ }
6
+
7
+ #ceo-video-panel {
8
+ border-radius: 12px;
9
+ box-shadow: 0 1px 10px #0002;
10
+ margin-bottom: 0;
11
+ /* HeightλŠ” app.py와 맞좰 350px */
12
+ min-height: 350px !important;
13
+ max-height: 380px;
14
+ width: 100%;
15
+ }
16
+
17
+ /* μ±—λ΄‡λ°•μŠ€, 전솑 λ²„νŠΌ λ“± μ—¬λ°±/라인*/
18
+ #chatbot-box {
19
+ border-radius: 10px;
20
+ box-shadow: 0 1px 10px #0001;
21
+ font-size: 16px;
22
+ background: #f7fafc;
23
+ min-height: 350px !important;
24
+ max-height: 410px;
25
+ margin-bottom: 8px;
26
+ }
27
+
28
+ /* μ‚­μ œμ„  (gr.Markdown html μ μš©μ— 졜적) */
29
+ s, del {
30
+ text-decoration: line-through;
31
+ color: #cd4255 !important;
32
+ font-weight: 600;
33
+ }
34
+
35
+ .gradio-row, .gradio-column {
36
+ gap: 22px;
37
+ }
38
+
39
+ /* λ²„νŠΌ/ν…μŠ€νŠΈλ°•μŠ€ κΈ°λ³Έκ°’ */
40
+ .gr-button {
41
+ margin-left: 8px;
42
+ height: 45px;
43
+ min-width: 80px;
44
+ background: #3399ff;
45
+ color: #fff;
46
+ font-weight: bold;
47
+ border-radius: 8px;
48
+ border: none;
49
+ }
50
+ textarea {
51
+ min-height: 45px;
52
+ border-radius: 8px;
53
+ font-size: 16px !important;
54
+ line-height: 1.5;
55
+ margin-bottom: 7px;
56
+ }
57
+ .gr-examples {
58
+ margin-top: 10px !important;
59
+ font-size: 15px;
60
+ background: #e7f3ff;
61
+ border-radius: 10px;
62
+ }