Skip to content

DTSense/dtsense-api

 
 

Repository files navigation

Medical Chatbot dengan RAG

Aplikasi chatbot medis yang dibangun menggunakan teknologi Retrieval-Augmented Generation (RAG) dengan LangChain, FastAPI, Pinecone, dan model Llama-3 dari Groq.

Gambaran Umum Proyek

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:

  1. Implementasi FastAPI standar (app.py)
  2. Implementasi LangServe untuk skalabilitas dan pemantauan yang lebih baik (app_langserve.py)

Fitur

  • 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

Struktur Proyek

.
├── 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

Pengaturan dan Instalasi

1. Clone repositori

git clone https://github.com/bayuzen19/medical-chatbot.git
cd medical-chatbot

2. Menyiapkan lingkungan virtual

python -m venv venv
source venv/bin/activate  # Pada Windows: venv\Scripts\activate

3. Menginstal dependensi

pip install -r requirements.txt

4. Menyiapkan variabel lingkungan

Buat 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

5. Menyiapkan dokumen medis

Letakkan dokumen PDF medis di direktori Data/. Dokumen-dokumen ini akan diproses dan disimpan dalam database vektor Pinecone.

Menjalankan Aplikasi

Aplikasi FastAPI Standar

uvicorn app:app --host 0.0.0.0 --port 8000 --reload

Aplikasi LangServe

uvicorn app_langserve:app --host 0.0.0.0 --port 8000 --reload

Setelah berjalan, akses antarmuka chat di:

Cara Kerja Sistem

Pipeline Dokumen

Sistem memproses dokumen PDF menjadi potongan-potongan teks dan menyimpannya dalam database vektor Pinecone:

  1. Dokumen PDF dimuat dari direktori Data/
  2. Dokumen dipecah menjadi potongan-potongan menggunakan RecursiveCharacterTextSplitter
  3. Potongan teks diubah menjadi embedding menggunakan Hugging Face embeddings (sentence-transformers/all-MiniLM-L6-v2)
  4. Embedding disimpan dalam database vektor Pinecone

Pemrosesan Query

Ketika pengguna mengajukan pertanyaan:

  1. Query dikonversi menjadi embedding menggunakan model yang sama
  2. Potongan teks yang serupa diambil dari Pinecone
  3. Model LLM Groq (Llama-3.3-70b-versatile) menghasilkan jawaban berdasarkan konteks yang diambil
  4. Jawaban dikembalikan ke pengguna melalui antarmuka chat

Integrasi LangServe

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

Penjelasan Kode Utama

document_pipeline.py

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

app.py

File ini mengatur API FastAPI dengan:

  • Titik akhir (endpoint) untuk antarmuka chat
  • Titik akhir untuk pemrosesan kueri
  • Penanganan kesalahan dan logging

app_langserve.py

Versi yang ditingkatkan dari app.py yang menggunakan LangServe untuk:

  • Pemantauan yang lebih baik
  • Integrasi dengan ekosistem LangChain
  • Antarmuka playground bawaan

Dependensi

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 .

Tugas Mandiri

Di dalam kode, ada bagian yang ditandai dengan #====== Tugas Mandiri ======= yang bisa Anda kerjakan untuk melatih pemahaman Anda tentang sistem:

  1. Implementasikan metode load_documents() untuk memuat dokumen PDF
  2. Implementasikan metode split_text() untuk memecah dokumen menjadi potongan
  3. Tambahkan logika untuk memeriksa apakah indeks sudah ada di Pinecone

About

fastapi and langserve

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • HTML 46.3%
  • Python 26.4%
  • Jupyter Notebook 18.0%
  • JavaScript 7.0%
  • CSS 2.3%