Lanjut ke konten
Samkarsa Logbook

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.

MCP1mnt baca

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" ke knowledge_vectors.content dan "resolved_name" ke dalam metadata.expected_output.
  • Buat Endpoint POST /api/v1/rag/search-item
    • Menerima payload: { "query": "indomi goreng", "tenant_id": 1 }.
    • Melakukan embedding dari query, lalu mencari di knowledge_vectors dengan app_context = 'sajen_item_alias'.
    • Mengembalikan hasil pencocokan teratas (jika similarity > 0.85).

Fokus pada fungsi create_transaction di app/services/accounting.py di mana barang-barang dicari pasangannya di tabel Product.

  • Tambahkan Fungsi search_item_alias pada mcp_client.py (Atau langsung di logic accounting.py)
    • Fungsi ini memanggil POST /api/v1/rag/search-item ke MCP Server.
  • 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.

(Catatan: Rencana ini telah selesai dieksekusi dan di-deploy ke sistem produksi)