v1.0.0-002 : Item-Level RAG
Catatan rilis untuk fitur Item-Level RAG. Memecahkan masalah resolusi nama item dengan memanfaatkan memori vektor di MCP Server secara dinamis.
Dokumen ini mendokumentasikan implementasi fitur Item-Level RAG (Alias Pintar) via MCP Server yang telah selesai dieksekusi.
Memecahkan masalah salah ketik atau singkatan nama produk pada struk (contoh: “Indm Grg” -> “Indomie Goreng”) dengan mengandalkan mesin Vector Database bawaan MCP Server, tanpa membebani database PostgreSQL operasional (sajen) dengan logika fuzzy matching (pg_trgm).
Kita akan menambahkan context baru khusus untuk alias barang (app_context: 'sajen_item_alias') agar tidak tercampur dengan template struk utuh (sajen_ocr).
- Buat Endpoint
POST /api/v1/rag/ingest-item- Menerima payload:
{ "raw_name": "Indm Grg", "resolved_name": "Indomie Goreng", "tenant_id": 1 }. - Memasukkan string
"raw_name"keknowledge_vectors.contentdan"resolved_name"ke dalammetadata.expected_output.
- Menerima payload:
- Buat Endpoint
POST /api/v1/rag/search-item- Menerima payload:
{ "query": "indomi goreng", "tenant_id": 1 }. - Melakukan embedding dari
query, lalu mencari diknowledge_vectorsdenganapp_context = 'sajen_item_alias'. - Mengembalikan hasil pencocokan teratas (jika similarity > 0.85).
- Menerima payload:
Fokus pada fungsi create_transaction di app/services/accounting.py di mana barang-barang dicari pasangannya di tabel Product.
- Tambahkan Fungsi
search_item_aliaspadamcp_client.py(Atau langsung di logicaccounting.py)- Fungsi ini memanggil
POST /api/v1/rag/search-itemke MCP Server.
- Fungsi ini memanggil
- Cegat Pembuatan Produk Baru di
accounting.py- Saat sistem mencari barang dan tidak ditemukan secara eksak, JANGAN LANGSUNG buat barang baru.
- Panggil
mcp_client.search_item_alias(item.name). - Jika MCP mengembalikan resolved_name dengan kecocokan (similarity) tinggi, cari ulang di DB lokal menggunakan resolved_name tersebut.
- Jika tetap tidak ketemu, baru buat produk baru.
Agar RAG semakin pintar seiring berjalannya waktu:
- Trigger Ingestion dari Frontend/Sajen
- Saat pengguna menyimpan / merevisi transaksi, jika ada perbedaan antara teks mentah dari OCR (raw) dengan nama barang yang dikonfirmasi (resolved), data tersebut akan dilempar ke
/api/v1/rag/ingest-item. - Dengan begini, setiap kali pengguna mengkoreksi singkatan, kecerdasan sistem bertambah secara permanen untuk nama tersebut.
- Saat pengguna menyimpan / merevisi transaksi, jika ada perbedaan antara teks mentah dari OCR (raw) dengan nama barang yang dikonfirmasi (resolved), data tersebut akan dilempar ke
(Catatan: Rencana ini telah selesai dieksekusi dan di-deploy ke sistem produksi)