์ด ํ๋ก์ ํธ๋ FastAPI๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ๋ชจ๋ธ์ ๊ตฌํํ ํ๋ก์ ํธ ์
๋๋ค. 
์ฃผ์ ๊ธฐ๋ฅ์ผ๋ก๋ ๊ฐ์  ๋ถ์, Q&A ์์ฑ, ์ฑํ
 ๋ด, OCR ์ฒ๋ฆฌ ๋ฑ์ด ํฌํจ๋ฉ๋๋ค.
์์กด์ฑ ์ค์น
pip install --no-cache-dir -r requirements.txt
ํ์ํ ํ์ผ
#.env
OPENAI_API_KEY=
DB_HOST=
DB_PORT=
DB_NAME=
DB_USER=
DB_PASSWORD=
์คํ
uvicorn main:app --reload --port 8001
C:.
โโโโ.github
โ   โโโโISSUE_TEMPLATE
โ   โโโโworkflows
โโโโ.idea
โโโโapp
โ   โโโโapi
โ   โโโโdb
โ   โโโโmodels
โ   โโโโmodules
โ   โโโโprompts
- EmotionReportModel: ๋ค์ํ ๊ฐ์  ์ํ๋ฅผ ๋ถ์ํ์ฌ ๋ณด๊ณ ์๋ฅผ ์์ฑํฉ๋๋ค.
 - QnaModel: ์ฌ์ฉ์ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ์ ๊ณตํ๊ณ MongoDB์์ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํฉ๋๋ค.
 - QnAEditorModel: Q&A ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ FAISS ์ธ๋ฑ์ค๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
 - ChatbotModel: ์ฃผ์ด์ง ๋ํ ๋ชจ๋์ ๋ฐ๋ผ ์ฑํ ๋ด ์๋ต์ ์์ฑํฉ๋๋ค.
 - AnalysisModel: ๋ํ ๋ด์ฉ์ ๋ถ์ํ์ฌ ๊ฐ๋ฑ, ์ฌ๋, ์ฐ์  ๋ฑ์ ์ํฉ์ ํ์ ํฉ๋๋ค.
 - OcrModel: ์ด๋ฏธ์ง์์ ํ ์คํธ๋ฅผ ์ถ์ถํ๊ณ ๋ถ์ํฉ๋๋ค.
 - STTModel: ์์ฑ ํ ์คํธ ๋ณํ(STT) ๊ฒฐ๊ณผ๋ฅผ ๋ถ์ํ์ฌ ๋ํ ์ํฉ์ ํ๊ฐํฉ๋๋ค.
 - ImageProcessor: ์ด๋ฏธ์ง์ ํ ์คํธ ์์ญ์ ์ถ์ถํ๊ณ OCR์ ํตํด ํ ์คํธ๋ฅผ ์ธ์ํฉ๋๋ค.
 
EmotionReportModel์ ์ฌ์ฉ์์ ๊ฐ์  ์ํ๋ฅผ ๋ถ์ํ์ฌ ๋ณด๊ณ ์๋ฅผ ์์ฑํฉ๋๋ค.
 ์ด ๋ชจ๋ธ์ OpenAI์ GPT-4 ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ  ๊ฐ์  ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํฉ๋๋ค.
emotion_report_model = EmotionReportModel(api_key=api_key)
messages_request = {
    "messages": [
        {"role": "user", "content": "I am feeling very stressed and anxious."}
    ]
}
response = await emotion_report_model.generate_messages_response(messages_request)
print(response)
QnaModel์ MongoDB์์ ์ง๋ฌธ๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ณ , GPT-4 ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋ต๋ณ์ ์์ฑํฉ๋๋ค.
 ์ด ๋ชจ๋ธ์ MongoDB์ FAISS ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ฒ์์ ์ ๊ณตํฉ๋๋ค.
qna_model = QnaModel(api_key=api_key)
messages_request = {
    "messages": [
        {"role": "user", "content": "What is the capital of France?"}
    ]
}
response = await qna_model.generate_qna_response(messages_request)
print(response)
QnAEditorModel์ Q&A ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ  MongoDB์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
 ์ด ๋ชจ๋ธ์ ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๊ณ  ์๋ฒ ๋ฉ์ ์์ฑํ์ฌ FAISS ์ธ๋ฑ์ค๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
qna_editor_model = QnAEditorModel(api_key=api_key)
messages_request = "New Q&A data to be indexed in the database."
response = await qna_editor_model.generate_qna_edit_response(messages_request)
print(response)
ChatbotModel์ ์ฌ์ฉ์๊ฐ ์ ํํ ๋ํ ๋ชจ๋์ ๋ฐ๋ผ ์ฑํ
 ๋ด ์๋ต์ ์์ฑํฉ๋๋ค. 
 ๊ธฐ๋ณธ ๋ชจ๋์ ๋ชจ๋ 2๊ฐ ์์ผ๋ฉฐ, ๊ฐ ๋ชจ๋๋ ์๋ก ๋ค๋ฅธ ํ๋กฌํํธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ต์ ์์ฑํฉ๋๋ค.
chatbot_model = ChatbotModel(api_key=api_key)
mode_request = {"mode": "2"}
recent_messages_request = {
    "RecentMessages": [
        "user : Hello, how are you?",
        "assistant : I am fine, thank you! How can I assist you today?"
    ]
}
response = await chatbot_model.generate_chat_response(mode_request, recent_messages_request)
print(response)
AnalysisModel์ ๋ํ ๋ด์ฉ์ ๋ถ์ํ์ฌ ๊ฐ๋ฑ, ์ฌ๋, ์ฐ์  ๋ฑ์ ์ํฉ์ ํ์
ํฉ๋๋ค. 
 ํ
์คํธ๋ฅผ ์ ์ฒ๋ฆฌํ๊ณ  ์ง์ ๋ ๋ถ์ ์ ํ์ ๋ฐ๋ผ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค.
analysis_model = AnalysisModel(api_key=api_key)
text = "I feel like there is a lot of tension between us lately."
analysis_type = "conflict"
response = await analysis_model.analyze(text, analysis_type)
print(response)
OcrModel์ ์ด๋ฏธ์ง์์ ํ
์คํธ๋ฅผ ์ถ์ถํ๊ณ  ๋ถ์ํฉ๋๋ค.  
 ์ด ๋ชจ๋ธ์ OpenAI์ GPT-4 ๋ชจ๋ธ๊ณผ PaddleOCR์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ๋ด ํ
์คํธ๋ฅผ ์ธ์ํ๊ณ , 
  ๋ถ์ ์ ํ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค.
ocr_model = OcrModel(api_key=api_key)
files = [open('path/to/image1.png', 'rb'), open('path/to/image2.png', 'rb')]
analysis_type = "love"
response = await ocr_model.process_uploaded_files(files, analysis_type)
print(response)
STTModel์ ์์ฑ ํ
์คํธ ๋ณํ(STT) ๊ฒฐ๊ณผ๋ฅผ ๋ถ์ํ์ฌ ๋ํ ์ํฉ์ ํ๊ฐํฉ๋๋ค.
  ๋จ์ผ ํ์์ ๋ค์ค ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ ํ๋กฌํํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ํฉ๋๋ค.
stt_model = STTModel(api_key=api_key)
stt_response = STTResponse(
    id="12345",
    status="completed",
    results=STTResults(
        utterances=[
            Utterance(start_at=0, duration=5, spk=0, spk_type="user", msg="Hello, how can I help you?"),
            Utterance(start_at=6, duration=4, spk=1, spk_type="assistant", msg="I need some assistance with my account.")
        ],
        verified=[True, True]
    )
)
response = await stt_model.analyze_stt(stt_response)
print(response)
ImageProcessor๋ ์ด๋ฏธ์ง์ ํ
์คํธ ์์ญ์ ์ถ์ถํ๊ณ  OCR์ ํตํด ํ
์คํธ๋ฅผ ์ธ์ํฉ๋๋ค.
 ๋๋น๋ฅผ ์กฐ์ ํ๊ณ  ์ปจํฌ์ด๋ฅผ ์ฐพ์ ํ
์คํธ ์์ญ์ ์๋ณํฉ๋๋ค.
image_processor = ImageProcessor()
image_files = [open('path/to/image1.png', 'rb'), open('path/to/image2.png', 'rb')]
all_left_text, all_right_text = await image_processor.process_images(image_files)
print("Left Text:", all_left_text)
print("Right Text:", all_right_text)