Skip to content

πŸ€– HOW? ν‚€ν‚€ - μ΄ν™”μ—¬μžλŒ€ν•™κ΅ μΊ‘μŠ€ν†€λ””μžμΈ 23 AI λ ˆν¬μ§€ν† λ¦¬μž…λ‹ˆλ‹€.

Notifications You must be signed in to change notification settings

Clover-21/Howkiki_AI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ€– ν•˜μš°ν‚€ν‚€

고객의 상황을 λ°˜μ˜ν•œ μ‘λŒ€μ™€ μ£Όλ¬Έ 결제 μžλ™ν™”λ₯Ό μ œκ³΅ν•˜λŠ” νœ΄λ¨Όν„°μΉ˜ AI μ±—μ˜€λ”


πŸŽ™οΈ [μΊ‘μŠ€ν†€λ””μžμΈ ν”„λ‘œμ νŠΈ 23νŒ€] ν•˜μš°ν‚€ν‚€ AI λ ˆν¬μ§€ν† λ¦¬μž…λ‹ˆλ‹€.

  • λ³Έ AI λ ˆν¬μ§€ν† λ¦¬λŠ” 고객 λŒ€ν™”λ₯Ό μ΄ν•΄ν•˜κ³ , μ£Όλ¬Έ 및 λ§€μž₯ 정보 등을 μžλ™ μ‘λ‹΅ν•˜λŠ” AI μ±—μ˜€λ” μ„œλ²„λ₯Ό κ΅¬ν˜„ν•œ μ½”λ“œμž…λ‹ˆλ‹€.
  • GPT-4o 기반 μžμ—°μ–΄ 처리 λͺ¨λΈκ³Ό RAG ꡬ쑰λ₯Ό ν™œμš©ν•˜μ—¬ λ§€μž₯ 정보λ₯Ό λ°˜μ˜ν•œ μ‘λŒ€λ₯Ό μ œκ³΅ν•˜λ©°, Function Calling으둜 μ£Όλ¬Έ 및 μš”μ²­ μžλ™ν™”λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • Redisλ₯Ό μ΄μš©ν•œ μ„Έμ…˜ 관리, MongoDB 기반 벑터 검색, Flask 기반 REST API, EC2 + GitHub Actions 기반 CI/CD μžλ™ 배포 ν™˜κ²½μ„ κ΅¬μΆ•ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

πŸ”§ 기술 μŠ€νƒ

πŸ“Œ Language & Framework

Python Flask

πŸ“Œ LLM & RAG

OpenAI LangChain

πŸ“Œ Database

MongoDB Redis

πŸ“Œ Server & Web

Gunicorn Nginx

πŸ“Œ DevOps & Deployment

AWS EC2 GitHub Actions AWS CodeDeploy

πŸ“Œ Version Control

Git GitHub

πŸ”Ž 기술 λ””ν…ŒμΌ

  • Language: Python 3.10
  • Framework: Flask
  • LLM Model: OpenAI GPT-4o
  • Embedding & RAG: LangChain + MongoDB
  • Database: MongoDB, Redis
  • Server ꡬ성: Gunicorn + Nginx (HTTPS + λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ)
  • Deployment: AWS EC2 + GitHub Actions & AWS CodeDeploy 기반 CI/CD

1. ν”„λ‘œμ νŠΈ ꡬ쑰 및 μ£Όμš” Source code μ„€λͺ…

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

Howkiki_AI/
β”œβ”€β”€ chatbot/                # GPT μ±—μ˜€λ” 및 RAG κ΄€λ ¨ 둜직
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ bot.py              # μ‚¬μš©μž μ§ˆλ¬Έμ„ μ²˜λ¦¬ν•˜κ³  GPT 응닡 생성 (Function Calling 포함)
β”‚   β”œβ”€β”€ embedding.py        # λ§€μž₯ 정보 벑터화 및 MongoDB μ €μž₯
β”‚   β”œβ”€β”€ retriever.py        # μœ μ‚¬ λ¬Έμž₯ 검색을 μœ„ν•œ 벑터 검색 λͺ¨λ“ˆ (RAG)
β”œβ”€β”€ api/                    # Flask API 라우트 및 μ„œλ²„ ꡬ성
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ routes.py           # /chat 라우트: μ‚¬μš©μž μ§ˆλ¬Έμ„ λ°›μ•„ GPT 응닡 λ°˜ν™˜
β”‚   β”œβ”€β”€ config.py           # ν™˜κ²½ λ³€μˆ˜ λ˜λŠ” κ³ μ • μ„€μ • 정보 (Redis, OpenAI, MongoDB μ„€μ • λ“±)
β”‚   β”œβ”€β”€ redis_client.py     # Redis ν΄λΌμ΄μ–ΈνŠΈ μ΄ˆκΈ°ν™” 및 μ„Έμ…˜ 기반 λŒ€ν™” 기둝 μ €μž₯/쑰회/μ‚­μ œ
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ housum.txt          # λ§€μž₯ 정보 ν…μŠ€νŠΈ (μƒ˜ν”Œ 데이터, μΆ”ν›„ ꡐ체 κ°€λŠ₯)
β”œβ”€β”€ scripts/                # μ„œλ²„ μ‹€ν–‰/쀑지/배포 슀크립트
β”‚   β”œβ”€β”€ start.sh
β”‚   β”œβ”€β”€ stop.sh
β”‚   β”œβ”€β”€ deploy.sh
β”œβ”€β”€ app.py                  # Flask μ‹€ν–‰ μ§„μž…μ 
β”œβ”€β”€ requirements.txt        # μ˜μ‘΄μ„± λͺ©λ‘
β”œβ”€β”€ .gitignore              # git 좔적 μ œμ™Έ 파일 λͺ©λ‘
β”œβ”€β”€ appspec.yml
└── README.md

πŸ“ μ£Όμš” Source code μ„€λͺ…

경둜 μ„€λͺ…
app.py Flask μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜λŠ” 메인 μ§„μž…μ 
chatbot/bot.py μ‚¬μš©μžμ˜ μ§ˆλ¬Έμ„ GPTμ—κ²Œ μ „λ‹¬ν•˜κ³ , ν•„μš” μ‹œ Function Calling을 톡해 λ™μž‘ μˆ˜ν–‰ (예: μ£Όλ¬Έ 처리)
chatbot/embedding.py housum.txt νŒŒμΌμ—μ„œ 쀄 λ‹¨μœ„ λ¬Έμž₯을 μΆ”μΆœν•˜μ—¬ OpenAI μž„λ² λ”© ν›„ MongoDB에 μ €μž₯ (embedding, text, user_id, timestamp 포함)
chatbot/retriever.py 쿼리 λ¬Έμž₯을 μž„λ² λ”©ν•˜κ³ , MongoDBμ—μ„œ λ™μΌν•œ user_idλ₯Ό κ°–λŠ” λ¬Έμ„œλ“€κ³Ό 코사인 μœ μ‚¬λ„λ₯Ό κ³„μ‚°ν•˜μ—¬ μƒμœ„ top_k λ¬Έμ„œλ₯Ό λ°˜ν™˜
api/routes.py /chat 라우트λ₯Ό 톡해 μ‚¬μš©μžμ˜ μ§ˆλ¬Έμ„ μˆ˜μ‹ ν•˜κ³ , GPT 응닡을 μƒμ„±ν•˜μ—¬ JSON으둜 λ°˜ν™˜ (μœ νš¨μ„± 검사 및 둜그 기둝 포함)
api/redis_client.py Redis ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ΄ˆκΈ°ν™”ν•˜λ©°, μ‚¬μš©μž 토큰 기반의 λŒ€ν™” 기둝 μ €μž₯, 쑰회, μ‚­μ œ κΈ°λŠ₯을 제곡 (μ„Έμ…˜ μœ μ§€μ— μ‚¬μš©)
api/config.py Redis, MongoDB, OpenAI API ν‚€ λ“±μ˜ μ„€μ • 정보λ₯Ό 관리
data/housum.txt λ§€μž₯ 정보가 ν¬ν•¨λœ ν…μŠ€νŠΈ 파일, RAG 검색을 μœ„ν•œ 벑터 인덱싱 λŒ€μƒ

2. How to build and install

1. AI λ ˆν¬μ§€ν† λ¦¬ Clone

git clone https://github.com/Clover-21/Howkiki_AI.git
cd Howkiki_AI  # 클둠 ν›„ ν•΄λ‹Ή ν”„λ‘œμ νŠΈλ‘œ 이동

2. κ°€μƒν™˜κ²½ ꡬ성 (선택 사항)

python -m venv venv
source venv/bin/activate  # (Windows의 경우: venv\Scripts\activate)

3. μ˜μ‘΄μ„± μ„€μΉ˜

pip install -r requirements.txt

4. ν™˜κ²½ λ³€μˆ˜ μ„€μ • (.env)

ν”„λ‘œμ νŠΈ 루트 디렉토리에 .env νŒŒμΌμ„ μƒμ„±ν•œ ν›„, μ•„λž˜μ™€ 같은 ν˜•μ‹μœΌλ‘œ ν™˜κ²½ λ³€μˆ˜λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€:

# OpenAI API Key
OPENAI_API_KEY=your_openai_api_key

# λ°±μ—”λ“œ API URL
api_url=your_backend_api_url

# Redis μ„€μ •
REDIS_HOST=your_redis_host
REDIS_PORT=your_redis_port
REDIS_DB=0
REDIS_PASSWORD=your_redis_password

# MongoDB μ„€μ •
MONGODB_URI=your_mongodb_url

⚠️ .env νŒŒμΌμ€ λ³΄μ•ˆμƒ GitHub에 ν¬ν•¨λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
ν•„μš”ν•œ ν‚€ 값은 κ΅μˆ˜λ‹˜κ»˜ μ΄λ©”μΌλ‘œ 별도 μ „λ‹¬λ“œλ ΈμŠ΅λ‹ˆλ‹€.

5. (선택) μ΄ˆκΈ°ν™”: 벑터 μž„λ² λ”© 등둝

⚠️ 이 μž‘μ—…μ€ 데이터 μ΄ˆκΈ°ν™”λ‚˜ λ§€μž₯ 정보 μˆ˜μ • μ‹œμ—λ§Œ ν•„μš”ν•©λ‹ˆλ‹€.

data/housum.txt νŒŒμΌμ„ 기반으둜 λ§€μž₯ 정보λ₯Ό μž„λ² λ”©ν•˜μ—¬ MongoDB 벑터 DB에 μ €μž₯ν•˜λ €λ©΄ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜μ„Έμš”:

python chatbot/embedding.py

ν•΄λ‹Ή λͺ…λ Ήμ–΄λŠ” λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€:

  • data/housum.txt의 각 쀄을 λ¬Έμ„œλ‘œ κ°„μ£Όν•˜κ³  μž„λ² λ”© 생성
  • MongoDB의 howkiki.store μ»¬λ ‰μ…˜μ— user_id, text, embedding, timestamp ν•„λ“œλ‘œ μ €μž₯
  • κΈ°μ‘΄ λ°μ΄ν„°λŠ” μ΄ˆκΈ°ν™”λ¨ (drop() 처리)

3. How to test

μ±—μ˜€λ” AI μ„œλ²„λŠ” 두 κ°€μ§€ λ°©μ‹μœΌλ‘œ ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€:

  1. Postman을 μ΄μš©ν•œ HTTP μš”μ²­ ν…ŒμŠ€νŠΈ
  2. ν„°λ―Έλ„μ—μ„œ μΈν„°λž™ν‹°λΈŒ λͺ¨λ“œ μ‹€ν–‰

이 쀑 μΈν„°λž™ν‹°λΈŒ λͺ¨λ“œκ°€ 더 λΉ λ₯΄κ³  νŽΈλ¦¬ν•˜κ²Œ ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ„œλ²„λŠ” 기본적으둜 http://localhost:5000μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.

방법 1. Postman을 μ΄μš©ν•œ ν…ŒμŠ€νŠΈ

λ¨Όμ € μ„œλ²„λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€:

# μ•„λž˜ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜μ„Έμš”
flask run
# λ˜λŠ”
python app.py

Postmanμ—μ„œ λ‹€μŒκ³Ό 같이 μš”μ²­μ„ λ³΄λƒ…λ‹ˆλ‹€:

  • URL: http://127.0.0.1:5000/api/chat
  • Method: POST
  • Body (JSON):
{
  "question": "여기에 μ‚¬μš©μž μž…λ ₯ μž‘μ„±",
  "storeId": "1",
  "tableNum": "1",
  "token": "123456789"
}

응닡 μ˜ˆμ‹œ:

{
  "function_call_result": "Assistant Response: ν•¨μˆ˜ 호좜이 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.",
  "response": "건물 λ‚΄ μ£Όμ°¨μž₯은 3μ‹œκ°„ κΈ°λ³Έ 무료둜 μ΄μš©ν•  수 μžˆμ–΄μš”. 😊 μΆ”κ°€λ‘œ κΆκΈˆν•˜μ‹  사항이 μžˆλ‹€λ©΄ μ–Έμ œλ“ μ§€ 말씀해 μ£Όμ„Έμš”!",
  "storeId": "1",
  "tableNum": "1",
  "token": "123456789"
}

각 ν•„λ“œ μ„€λͺ…:

  • function_call_result: ν•¨μˆ˜ 호좜이 κ°μ§€λ˜μ—ˆλŠ”μ§€ μ—¬λΆ€ (ν…ŒμŠ€νŠΈμš©)
  • response: μ‚¬μš©μž μ§ˆλ¬Έμ— λŒ€ν•œ 응닡
  • storeId, tableNum, token: μš”μ²­μ—μ„œ μž…λ ₯ν•œ κ°’ κ·ΈλŒ€λ‘œ λ°˜ν™˜λ¨

방법 2. μΈν„°λž™ν‹°λΈŒ λͺ¨λ“œ (터미널 μ‹€ν–‰)

ν„°λ―Έλ„μ—μ„œ μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜μ„Έμš”:

python chatbot/bot.py

μ˜ˆμ‹œ:

μ•ˆλ…•ν•˜μ„Έμš”. ν˜Έμš°μ„¬μž…λ‹ˆλ‹€. λŒ€ν™”λ₯Ό μ’…λ£Œν•˜λ €λ©΄ 'μ’…λ£Œ'λ₯Ό μž…λ ₯ν•˜μ„Έμš”.
고객 > μ•ˆλ…•
μ±—μ˜€λ” > μ•ˆλ…•ν•˜μ„Έμš”! 😊 무엇을 λ„μ™€λ“œλ¦΄κΉŒμš”? μ£Όλ¬Έν•˜μ‹œκ±°λ‚˜ κΆκΈˆν•œ 사항이 μžˆλ‹€λ©΄ μ–Έμ œλ“ μ§€ 말씀해 μ£Όμ„Έμš”.
ν•¨μˆ˜ 호좜 κ²°κ³Ό: Assistant Response: ν•¨μˆ˜ 호좜이 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • 고객 >: μ‚¬μš©μžκ°€ μž…λ ₯ν•˜λŠ” λΆ€λΆ„μž…λ‹ˆλ‹€.
  • λŒ€ν™” μ’…λ£Œ: μ’…λ£Œ μž…λ ₯ λ˜λŠ” Ctrl + C
  • ν•¨μˆ˜ 호좜 κ²°κ³ΌλŠ” ν…ŒμŠ€νŠΈμš©μœΌλ‘œ ν•¨κ»˜ 좜λ ₯λ©λ‹ˆλ‹€.

*Postman을 μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ λŒ€λΆ€λΆ„μ˜ κΈ°λŠ₯은 μΈν„°λž™ν‹°λΈŒ λͺ¨λ“œμ—μ„œ κ°„νŽΈν•˜κ²Œ ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.


4. Sample Data 및 λ°μ΄ν„°λ² μ΄μŠ€ ꡬ성

πŸ“ μƒ˜ν”Œ 데이터 μ„€λͺ…

  • data/housum.txt νŒŒμΌμ€ κΈ°λ³Έ ν…ŒμŠ€νŠΈμš© μƒ˜ν”Œ λ§€μž₯ 정보λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
  • 각 쀄은 ν•˜λ‚˜μ˜ λ¬Έμ„œλ‘œ κ°„μ£Όλ˜λ©°, μž„λ² λ”© μ²˜λ¦¬λ˜μ–΄ MongoDB(howkiki.store μ»¬λ ‰μ…˜)에 μ €μž₯λ©λ‹ˆλ‹€.
  • 이 λ°μ΄ν„°λŠ” μ±—μ˜€λ”κ°€ μ§ˆμ˜μ— λ‹΅λ³€ν•  수 μžˆλ„λ‘ 정보 검색(RAG) 기반으둜 μ‚¬μš©λ©λ‹ˆλ‹€.

μ‹€μ œ μ„œλΉ„μŠ€ μ „ν™˜ μ‹œ, housum.txt νŒŒμΌμ„ μ‹€μ œ λ§€μž₯ μ •λ³΄λ‘œ κ΅μ²΄ν•©λ‹ˆλ‹€.

πŸ—ƒοΈ λ°μ΄ν„°λ² μ΄μŠ€ μ„€λͺ…

  • MongoDB:

    • μ‚¬μš© λͺ©μ : λ§€μž₯ μ •λ³΄μ˜ 벑터 μ €μž₯ 및 μœ μ‚¬λ„ 기반 검색
    • μ‚¬μš© μ»¬λ ‰μ…˜: howkiki.store
    • μ£Όμš” ν•„λ“œ:
      • user_id: λ§€μž₯을 μ‹λ³„ν•˜λŠ” ID
      • text: 원본 ν…μŠ€νŠΈ
      • embedding: OpenAI μž„λ² λ”© 벑터
      • timestamp: 생성 μ‹œκ°„
  • Redis:

    • μ‚¬μš© λͺ©μ : μ‹€μ‹œκ°„ μ„Έμ…˜ 데이터, μ£Όλ¬Έ μš”μ²­ κ²°κ³Ό μ €μž₯ 및 곡유
    • κΈ°λ³Έ DB: 0번 (λ³€κ²½ μ‹œ REDIS_DB ν™˜κ²½ λ³€μˆ˜λ‘œ μ„€μ •)
    • μ €μž₯ μ˜ˆμ‹œ: 토큰 기반 λŒ€ν™” 기둝, μ£Όλ¬Έ μš”μ²­ κ²°κ³Ό λ“±

5. Open Source Used

λ³Έ ν”„λ‘œμ νŠΈλŠ” λ‹€μŒ μ˜€ν”ˆμ†ŒμŠ€ 라이브러리λ₯Ό 기반으둜 κ°œλ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€:

  • LangChain

    • λͺ©μ : λ¬Έμ„œ μž„λ² λ”©, Retriever ꡬ성, LLM μΈν„°νŽ˜μ΄μŠ€ 톡합에 μ‚¬μš©
  • OpenAI API (openai-python)

    • λͺ©μ : GPT-4o 기반 응닡 생성을 μœ„ν•œ LLM 연동에 μ‚¬μš©λ˜λ©°, Function Calling κΈ°λŠ₯을 ν™œμš©ν•˜μ—¬ μ£Όλ¬Έ 처리 λ“±μ˜ μžλ™ν™”λ₯Ό 지원
  • Flask

    • λͺ©μ : RESTful API μ„œλ²„ κ΅¬ν˜„μ— μ‚¬μš©λ˜λ©°, λΌμš°νŒ… 및 μš”μ²­/응닡 처리λ₯Ό λ‹΄λ‹Ή
  • pymongo

    • λͺ©μ : MongoDBμ™€μ˜ 데이터 μž…μΆœλ ₯ 및 μ—°κ²° 관리λ₯Ό μœ„ν•΄ μ‚¬μš©
  • redis-py

    • λͺ©μ : Redis 기반의 μ„Έμ…˜ 관리 및 μƒνƒœ 정보 κ³΅μœ μ— μ‚¬μš©
  • NumPy

    • λͺ©μ : 벑터 μ—°μ‚° 및 코사인 μœ μ‚¬λ„ 계산 등에 ν™œμš©

✏️ SW ꡬ쑰도

ν•˜μš°ν‚€ν‚€_SWꡬ쑰도

🎬 ν•˜μš°ν‚€ν‚€ DEMO

YouTube

About

πŸ€– HOW? ν‚€ν‚€ - μ΄ν™”μ—¬μžλŒ€ν•™κ΅ μΊ‘μŠ€ν†€λ””μžμΈ 23 AI λ ˆν¬μ§€ν† λ¦¬μž…λ‹ˆλ‹€.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published