From 705defde31ff2cdc16fc9f4dd7c8433469aea3f4 Mon Sep 17 00:00:00 2001 From: sunnyineverywhere Date: Mon, 11 Sep 2023 14:48:18 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[FIX]=20=EC=9D=B8=ED=84=B0=EB=B7=B0=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=EC=B9=B4=ED=85=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=20=EA=B0=9C=EC=88=98=EC=97=90=20=EB=94=B0=EB=9D=BC=20?= =?UTF-8?q?=EB=82=98=EB=8D=98=20500=20=EC=97=90=EB=9F=AC=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0=20#1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crud.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/crud.py b/crud.py index 7879c88..5d345ef 100644 --- a/crud.py +++ b/crud.py @@ -28,15 +28,25 @@ def find_question_by_id(db: Session, question_id: int): def find_question_by_categories(db: Session, categories: list): + db_questions = None if len(categories) == 1: - categories.append(None) - categories.append(None) + db_questions = db.query(Question).filter( + categories[0] == Question.category + ) elif len(categories) == 2: - categories.append(None) - - db_questions = db.query(Question).filter(or_( - categories[0] == Question.category, categories[1] == Question.category, categories[2] == Question.category)) - return random.sample(list(db_questions), 10) + db_questions = db.query(Question).filter(or_( + categories[0] == Question.category, categories[1] == Question.category + )) + elif len(categories) == 3: + db_questions = db.query(Question).filter(or_( + categories[0] == Question.category, categories[1] == Question.category, categories[2] == Question.category)) + else: + db_questions = db.query(Question) + + if len(list(db_questions)) >= 10: + return random.sample(list(db_questions), 10) + else: + return list(db_questions) # interview From 698f506a687d76d5b89c8254c2eb96a1888b34c0 Mon Sep 17 00:00:00 2001 From: sunnyineverywhere Date: Mon, 11 Sep 2023 14:51:43 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[FIX]=20=EC=9D=B8=ED=84=B0=EB=B7=B0=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=EC=B9=B4=ED=85=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=20=EA=B0=9C=EC=88=98=20=EC=A1=B0=EC=A0=95=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?#1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/main.py b/main.py index f3be335..aa97af0 100644 --- a/main.py +++ b/main.py @@ -39,11 +39,7 @@ async def root(): async def start_interview(req: InterviewStartReq, Authorization: str | None = Header(default=None), db: Session = Depends(get_db)): account = crud.find_account_by_email(db=db, email=jwt_util.decode_jwt(access_token=Authorization)) - questions = [] - if len(req.categories) < 1: - questions = crud.find_all_question(db=db) - else: - questions = crud.find_question_by_categories(db=db, categories=req.categories) + questions = crud.find_question_by_categories(db=db, categories=req.categories) interview, interview_question = crud.create_interview(db=db, account=account, questions=questions, categories=req.categories) return { @@ -119,3 +115,9 @@ async def answer_interview_additional(req: AdditionalInterviewReq, Authorization @app.get("/interview/all/{id}") async def get_interviw_question_by_pk(id: int, db: Session = Depends(get_db)): return crud.find_interview_question_by_pk(db=db, iq_id=id) + + +# 배포금지 +@app.put("/gpt/question") +async def modify_gpt_question(db: Session = Depends(get_db)): + questions = crud.find_all_question(db=db) From 64fc4f08bc11ee4dd2157a128c1e47a36040a6cf Mon Sep 17 00:00:00 2001 From: sunnyineverywhere Date: Mon, 11 Sep 2023 16:42:51 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[FEAT]=20gpt=20answer=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20#2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crud.py | 21 +++++++++++++++++++-- main.py | 6 ++++++ model.py | 8 ++++++++ util/gpt_util.py | 13 ++++++++++++- 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/crud.py b/crud.py index 5d345ef..468e066 100644 --- a/crud.py +++ b/crud.py @@ -5,7 +5,7 @@ import scheme from sqlalchemy.orm import Session, joinedload -from model import Account, Question, InterviewQuestion, Inteverview +from model import Account, Question, InterviewQuestion, Inteverview, Answer import random @@ -20,7 +20,7 @@ def find_account_by_email(db: Session, email): # question def find_all_question(db: Session): db_questions = db.query(Question).all() - return random.sample(db_questions, 10) + return list(db_questions) def find_question_by_id(db: Session, question_id: int): @@ -126,6 +126,23 @@ def update_interview_question_additional_answer(db: Session, sequence: int, ques db.commit() +def update_question_gpt_answer(db: Session, db_question, gpt_answer): + answer = Answer( + question=db_question.id, + content=gpt_answer, + type="TYPE_GPT" + ) + db.add(answer) + db.commit() + db.refresh(answer) + +def delete_gpt_answers(db: Session): + db.query(Answer).filter( + Answer.type == "TYPE_GPT" + ).delete() + db.commit() + + def find_interview_question_by_pk(db, iq_id: int): return list(db.query(InterviewQuestion).options( joinedload(InterviewQuestion.question_model)).filter(InterviewQuestion.id == iq_id))[0] diff --git a/main.py b/main.py index aa97af0..22f4512 100644 --- a/main.py +++ b/main.py @@ -120,4 +120,10 @@ async def get_interviw_question_by_pk(id: int, db: Session = Depends(get_db)): # 배포금지 @app.put("/gpt/question") async def modify_gpt_question(db: Session = Depends(get_db)): + crud.delete_gpt_answers(db) questions = crud.find_all_question(db=db) + for q in questions: + answer = gpt_util.get_gpt_answer_static(question=q) + print(q.title) + print(answer) + crud.update_question_gpt_answer(db=db, db_question=q, gpt_answer=answer) diff --git a/model.py b/model.py index 546bb8c..8bcb0fe 100644 --- a/model.py +++ b/model.py @@ -18,6 +18,14 @@ class Question(Base): category = Column(String) +class Answer(Base): + __tablename__ = "answer" + id = Column(BigInteger, primary_key=True, index=True, autoincrement=True) + question = Column(BigInteger, ForeignKey("question.id")) + content = Column(String) + type = Column(String) + + class Inteverview(Base): __tablename__ = "interview" id = Column(BigInteger, primary_key=True, index=True, autoincrement=True) diff --git a/util/gpt_util.py b/util/gpt_util.py index 296f918..109de10 100644 --- a/util/gpt_util.py +++ b/util/gpt_util.py @@ -19,10 +19,21 @@ def get_gpt_answer(question, prompt, model="gpt-3.5-turbo-0613"): return response.choices[0].message["content"] +def get_gpt_answer_static(question, model="gpt-3.5-turbo-0613"): + content = "나는 " + question.title + "이라는 질문에 대해 구체적이고 정확한 답변을 알려줘. 그리고 답변에 대해 설명해줘." + messages = [{"role": "assistant", "content": content}] + response = openai.ChatCompletion.create( + model=model, + messages=messages, + temperature=0 + ) + return response.choices[0].message["content"] + + def get_gpt_questions(question, answer, model="gpt-3.5-turbo-0613"): content = "나는 " + question + "이라는 질문에 대해 나는 " + answer + " 라고 답변했어." \ + "네가 면접관이라면, 나에게 할 추가 질문을 3개 줘." \ - + "json 형식으로, {'question_1':"", 'question_2':"", 'question_3':""}로 응답해줘." + + "json 형식으로, {'question_1':"", 'question_2':"", 'question_3':""}로 응답해줘." messages = [{"role": "assistant", "content": content}] response = openai.ChatCompletion.create( model=model,