Spaces:
Build error
Build error
commit
Browse files- app.py +115 -0
- requirements.txt +1 -0
app.py
ADDED
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import gradio as gr
|
3 |
+
import openai
|
4 |
+
|
5 |
+
class OpenAIUtils:
|
6 |
+
|
7 |
+
@classmethod
|
8 |
+
def use_openai_chatgpt_base(cls, prompt):
|
9 |
+
"""
|
10 |
+
Use OpenAI's GPT-3 model, Davinci, to generate text based on the given prompt
|
11 |
+
"""
|
12 |
+
openai.api_key = os.getenv('OPENAI_API_KEY')
|
13 |
+
print("prompt")
|
14 |
+
print(prompt)
|
15 |
+
|
16 |
+
try:
|
17 |
+
res = openai.ChatCompletion.create(
|
18 |
+
# res = openai.Completion.create(
|
19 |
+
model="gpt-3.5-turbo",
|
20 |
+
messages=[
|
21 |
+
{"role": "system", "content": "あなたは企業の採用担当です"},
|
22 |
+
# {"role": "user", "content": prompt},
|
23 |
+
{"role": "user", "content": f"{prompt}"},
|
24 |
+
]
|
25 |
+
)
|
26 |
+
string = res.choices[0]['message']['content']
|
27 |
+
except openai.error.InvalidRequestError as e:
|
28 |
+
print(f"Error: {e}")
|
29 |
+
return None
|
30 |
+
return string
|
31 |
+
@classmethod
|
32 |
+
def use_openai_davinci_base(cls, prompt):
|
33 |
+
"""
|
34 |
+
Use OpenAI's GPT-3 model, Davinci, to generate text based on the given prompt
|
35 |
+
"""
|
36 |
+
openai.api_key = os.getenv('OPENAI_API_KEY')
|
37 |
+
try:
|
38 |
+
res = openai.Completion.create(
|
39 |
+
model="text-davinci-003",
|
40 |
+
prompt=prompt,
|
41 |
+
max_tokens=1024,
|
42 |
+
temperature=0.5
|
43 |
+
)
|
44 |
+
string = res.choices[0].text
|
45 |
+
except openai.error.InvalidRequestError as e:
|
46 |
+
print(f"Error: {e}")
|
47 |
+
return None
|
48 |
+
return string
|
49 |
+
|
50 |
+
class CalqOffer:
|
51 |
+
@classmethod
|
52 |
+
def generate_reply_mail_prompt(cls, offer, company, depart):
|
53 |
+
prompt = f"""
|
54 |
+
{offer}
|
55 |
+
上記の内容をもとにして以下を必須項目として、求人票を作成してください(1000文字程度)。
|
56 |
+
【法人名】:{company}
|
57 |
+
【部門】:{depart}
|
58 |
+
【求人票のタイトル案】
|
59 |
+
[落ち着いたタイトル案(3つ提案して)]
|
60 |
+
[ポップなタイトル案(3つ提案して)]
|
61 |
+
【仕事内容】
|
62 |
+
【必要なスキル・経験(箇条書き)】
|
63 |
+
【歓迎するスキル・経験(箇条書き)】
|
64 |
+
【給与】
|
65 |
+
【勤務地】
|
66 |
+
【雇用形態】
|
67 |
+
【待遇】
|
68 |
+
"""
|
69 |
+
print(prompt)
|
70 |
+
# return OpenAIUtils.use_openai_davinci_base(prompt)
|
71 |
+
return OpenAIUtils.use_openai_chatgpt_base(prompt)
|
72 |
+
|
73 |
+
def post_process_mail_reply(offer_reply):
|
74 |
+
remove_list = ["(箇条書き)"]
|
75 |
+
|
76 |
+
for item in remove_list:
|
77 |
+
offer_reply = offer_reply.replace(item, "")
|
78 |
+
|
79 |
+
offer_reply = offer_reply.replace("(3つ提案して)", "(3つ)")
|
80 |
+
return offer_reply
|
81 |
+
|
82 |
+
|
83 |
+
def greet(offer, company, depart):
|
84 |
+
offer_reply = CalqOffer.generate_reply_mail_prompt(offer, company, depart)
|
85 |
+
# print(offer_reply)
|
86 |
+
offer_reply = CalqOffer.post_process_mail_reply(offer_reply)
|
87 |
+
print(offer_reply)
|
88 |
+
return offer_reply
|
89 |
+
|
90 |
+
input_offer = gr.Textbox(label="採用したい人材の情報を列挙してください(例:マネージャー、年収500万円、東京)")
|
91 |
+
input_company = gr.Textbox(label="あなたの会社名(オプション)")
|
92 |
+
input_depart = gr.Textbox(label="部門(オプション)")
|
93 |
+
output_offer = gr.Textbox(label="求人票提案文章(最大1分ほどお待ちください)")
|
94 |
+
description="""
|
95 |
+
"""
|
96 |
+
|
97 |
+
|
98 |
+
article = """
|
99 |
+
<h5>注意事項</h5>
|
100 |
+
<p><small>*当商品は、GPT API[gpt-3.5-turbo]を利用した株式会社KandaQuantumが提供するGenAI(ジェネレーションAI)ソリューションです。</small></p>
|
101 |
+
<p><small>*本プロダクトに内蔵されるGPTのAPI提供元OpenAIはAPIを介してユーザーから送信されたデータをモデルのトレーニングや改善に使わないことを明示しました。</small></p>
|
102 |
+
<p><small>*当社もデータ保持に関してOpenAIと同様の方針です(ユーザービリティ向上のため変更する可能性はございます)。</small></p>
|
103 |
+
<p><small>*当社は、製品の使用により発生したいかなる損害についても一切の責任を負いません。</small></p>
|
104 |
+
"""
|
105 |
+
|
106 |
+
iface = gr.Interface(
|
107 |
+
fn=greet,
|
108 |
+
inputs=[input_offer, input_company, input_depart],
|
109 |
+
outputs=[output_offer],
|
110 |
+
title="求人票作成AI CalqOffer",
|
111 |
+
description=description,
|
112 |
+
article=article
|
113 |
+
|
114 |
+
)
|
115 |
+
iface.launch()
|
requirements.txt
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
openai==0.27.0
|