Aplikasi chatbot medis yang dibangun menggunakan teknologi Retrieval-Augmented Generation (RAG) dengan LangChain, FastAPI, Pinecone, dan model Llama-3 dari Groq.
Proyek ini mengimplementasikan sebuah chatbot medis yang memanfaatkan arsitektur RAG untuk memberikan informasi medis yang akurat berdasarkan basis pengetahuan yang disimpan dalam database vektor Pinecone. Sistem ini memiliki dua implementasi:
- Implementasi FastAPI standar (
app.py) - Implementasi LangServe untuk skalabilitas dan pemantauan yang lebih baik (
app_langserve.py)
- Retrieval-Augmented Generation (RAG) menggunakan penyimpanan vektor Pinecone
- Pipeline pemrosesan dokumen untuk dokumen PDF medis
- Antarmuka web FastAPI dengan UI chat
- Integrasi LangServe untuk pemantauan dan skalabilitas yang lebih baik
- Antarmuka chat responsif dengan UI modern
.
├── Data/ # Direktori untuk dokumen PDF medis
├── static/ # Aset statis
│ ├── chat.js # JavaScript chat untuk implementasi standar
│ └── style.css # Gaya CSS untuk antarmuka chat
├── template/ # Template HTML
│ ├── chat.html # Antarmuka chat standar
│ └── chat_langserve.html # Antarmuka chat khusus LangServe
├── src/ # Kode sumber
│ ├── document_pipeline.py # Pipeline pemrosesan dokumen standar
│ ├── document_pipeline_langserve.py # Pipeline kompatibel LangServe
│ ├── prompt.py # Prompt sistem untuk chatbot
│ └── utils/ # Fungsi utilitas
│ └── utils.py # Utilitas pemuatan lingkungan
├── app.py # Aplikasi FastAPI utama (standar)
├── app_langserve.py # Aplikasi FastAPI utama dengan LangServe
├── requirements.txt # Dependensi proyek
└── setup.py # Skrip instalasi
git clone https://github.com/bayuzen19/medical-chatbot.git
cd medical-chatbotpython -m venv venv
source venv/bin/activate # Pada Windows: venv\Scripts\activatepip install -r requirements.txtBuat file .env di direktori root dengan variabel berikut:
PINECONE_API_KEY=pinecone_api_key_anda
GROQ_API_KEY=groq_api_key_anda
PINECONE_INDEX_NAME=medicalbot
PDF_DIR=Data
Letakkan dokumen PDF medis di direktori Data/. Dokumen-dokumen ini akan diproses dan disimpan dalam database vektor Pinecone.
uvicorn app:app --host 0.0.0.0 --port 8000 --reloaduvicorn app_langserve:app --host 0.0.0.0 --port 8000 --reloadSetelah berjalan, akses antarmuka chat di:
- http://localhost:8000/ untuk antarmuka chat
- http://localhost:8000/docs untuk dokumentasi API
- http://localhost:8000/api/medical-chatbot/playground/ untuk playground LangServe (hanya versi LangServe)
Sistem memproses dokumen PDF menjadi potongan-potongan teks dan menyimpannya dalam database vektor Pinecone:
- Dokumen PDF dimuat dari direktori
Data/ - Dokumen dipecah menjadi potongan-potongan menggunakan
RecursiveCharacterTextSplitter - Potongan teks diubah menjadi embedding menggunakan Hugging Face embeddings (
sentence-transformers/all-MiniLM-L6-v2) - Embedding disimpan dalam database vektor Pinecone
Ketika pengguna mengajukan pertanyaan:
- Query dikonversi menjadi embedding menggunakan model yang sama
- Potongan teks yang serupa diambil dari Pinecone
- Model LLM Groq (Llama-3.3-70b-versatile) menghasilkan jawaban berdasarkan konteks yang diambil
- Jawaban dikembalikan ke pengguna melalui antarmuka chat
Versi LangServe (app_langserve.py) menyediakan:
- Pemantauan yang lebih baik untuk panggilan LLM
- Penanganan kesalahan yang ditingkatkan
- Antarmuka playground untuk pengujian
- Skema input/output yang terstandarisasi
File ini berisi kelas utama DocumentPipeline yang menangani:
- Pemuatan model embedding
- Koneksi ke penyimpanan vektor Pinecone
- Pembuatan rantai tanya jawab berbasis retrieval
- Pemrosesan kueri pengguna
File ini mengatur API FastAPI dengan:
- Titik akhir (endpoint) untuk antarmuka chat
- Titik akhir untuk pemrosesan kueri
- Penanganan kesalahan dan logging
Versi yang ditingkatkan dari app.py yang menggunakan LangServe untuk:
- Pemantauan yang lebih baik
- Integrasi dengan ekosistem LangChain
- Antarmuka playground bawaan
langchain>=0.0.315
pypdf>=3.0.0
python-dotenv>=1.0.0
pinecone-client[grpc]>=3.0.0
langchain-pinecone>=0.0.1
langchain-community>=0.0.16
langchain-experimental>=0.0.49
langchain-groq>=0.1.5
huggingface_hub<1.0.0
sentence-transformers>=2.2.2
uvicorn>=0.24.0
fastapi>=0.104.0
jinja2>=3.1.2
pydantic>=2.4.2
-e .
Di dalam kode, ada bagian yang ditandai dengan #====== Tugas Mandiri ======= yang bisa Anda kerjakan untuk melatih pemahaman Anda tentang sistem:
- Implementasikan metode
load_documents()untuk memuat dokumen PDF - Implementasikan metode
split_text()untuk memecah dokumen menjadi potongan - Tambahkan logika untuk memeriksa apakah indeks sudah ada di Pinecone