๐Ÿฆ Membuat Aplikasi Manajemen Keuangan dengan Python, SQLite, dan LangChain.

Pernah ingin membuat aplikasi manajemen keuangan yang bisa berinteraksi menggunakan bahasa natural? Dalam tutorial ini, kita akan membuat sistem manajemen keuangan berbasis CLI menggunakan Python, SQLite, dan LangChain. Sistem ini memungkinkan pengguna…


This content originally appeared on DEV Community and was authored by Ogi Wemy

Pernah ingin membuat aplikasi manajemen keuangan yang bisa berinteraksi menggunakan bahasa natural? Dalam tutorial ini, kita akan membuat sistem manajemen keuangan berbasis CLI menggunakan Python, SQLite, dan LangChain. Sistem ini memungkinkan pengguna untuk mencatat pengeluaran, mencari riwayat pengeluaran, dan berinteraksi dengan database menggunakan bahasa sehari-hari! ๐Ÿš€

๐ŸŽฏ Prerequisites

  • Python 3.7+ ๐Ÿ
  • Pemahaman dasar SQL dan Python ๐Ÿ’ป
  • OpenAI API key ๐Ÿ”‘

๐Ÿ“ฆ Required Packages

pip install sqlite3 pytz langchain openai

๐Ÿ—๏ธ Struktur Proyek

Mari kita bagi aplikasi ini menjadi beberapa komponen utama:

  1. ๐Ÿ—„๏ธ Konfigurasi dan Setup Database
  2. ๐Ÿ› ๏ธ SQL Execution Tool
  3. ๐Ÿค– LangChain Agent Integration
  4. ๐Ÿ“… Date Handling Utilities
  5. ๐Ÿ”„ Main Application Loop

1. ๐Ÿ—„๏ธ Konfigurasi Database

Pertama, mari kita siapkan database SQLite dengan tabel yang diperlukan:

import sqlite3
import pytz
from langchain.tools import tool

# Konfigurasi โš™๏ธ
wita = pytz.timezone("Asia/Makassar")
CURRENT_USER = "Ogi"  # Pengguna default

def setup_database():
    conn = sqlite3.connect("database.db")
    cursor = conn.cursor()

    # Tabel Pengguna ๐Ÿ‘ฅ
    cursor.execute("""
        CREATE TABLE IF NOT EXISTS users (
            name TEXT PRIMARY KEY,
            email TEXT
        )""")

    # Tabel Pengeluaran dengan foreign key pengguna ๐Ÿ’ฐ
    cursor.execute("""
        CREATE TABLE IF NOT EXISTS expenses (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            user TEXT,
            description TEXT,
            amount REAL,
            date TEXT,
            FOREIGN KEY(user) REFERENCES users(name)
        )""")

    # Inisialisasi pengguna default ๐Ÿ‘ค
    cursor.execute("INSERT OR IGNORE INTO users (name, email) VALUES (?, ?)", 
                 (CURRENT_USER, "contoh@email.com"))
    conn.commit()
    conn.close()

2. ๐Ÿ›ก๏ธ SQL Execution Tool yang Aman

Salah satu bagian terpenting dari aplikasi kita adalah tool eksekusi SQL. Mari buat wrapper yang aman untuk operasi SQLite:

@tool
def execute_sql(query: str):
    """Eksekusi SQL dengan validasi dan keamanan ketat ๐Ÿ”’"""
    try:
        conn = sqlite3.connect("database.db")
        cursor = conn.cursor()

        # Pemeriksaan keamanan ๐Ÿšซ
        forbidden_patterns = [
            "DROP TABLE", "CREATE TABLE", 
            "INSERT INTO users", "UPDATE users",
            ";--", "/*", "*/"
        ]

        if any(patt in query.upper() for patt in forbidden_patterns):
            return "๐Ÿšซ Operasi dilarang!"

        # Filter otomatis berdasarkan pengguna ๐Ÿ‘ค
        if "WHERE" in query.upper() and "expenses" in query.upper():
            query += f" AND user='{CURRENT_USER}'"
        elif "WHERE" not in query.upper() and "expenses" in query.upper():
            query += f" WHERE user='{CURRENT_USER}'"

        cursor.execute(query)
        conn.commit()

        # Format hasil ๐Ÿ“Š
        if query.strip().upper().startswith("SELECT"):
            cols = [desc[0] for desc in cursor.description]
            rows = cursor.fetchall()
            return format_results(cols, rows) if rows else "๐Ÿ“ญ Data tidak ditemukan"

        elif query.strip().upper().startswith(("UPDATE", "DELETE")):
            return f"โœ… {cursor.rowcount} data terpengaruh"

        return "โœ… Operasi berhasil"

    except sqlite3.Error as e:
        return f"๐Ÿšจ Error: {str(e)}"
    finally:
        conn.close()

3. ๐Ÿค– Integrasi LangChain

Sekarang, mari siapkan LangChain agent dengan pesan sistem yang disesuaikan:

from langchain.chat_models import ChatOpenAI
from langchain.agents import initialize_agent, AgentType

SYSTEM_TEMPLATE = """Anda adalah asisten SQL expert dengan kemampuan:
1. ๐Ÿ“… Format Tanggal: YYYY-MM-DD HH:MM:SS (Zona waktu WITA)
2. ๐Ÿ‘ค Pengguna saat ini: {user}
3. โœจ Contoh Query Valid:
   - UPDATE: UPDATE expenses SET description='Makan', amount=25000 WHERE id=3
   - DELETE: DELETE FROM expenses WHERE id=2 AND user='{user}'
   - DATE: SELECT * FROM expenses WHERE date BETWEEN '2024-05-30 00:00:00' AND '2024-05-30 23:59:59'
4. โฐ Untuk operasi tanggal, SELALU gunakan BETWEEN dengan rentang waktu
5. ๐ŸŽฏ Langsung jalankan query SQL sesuai pertanyaan pengguna"""

llm = ChatOpenAI(
    model="gpt-4o-mini",
    temperature=0.7,
    openai_api_key="your-api-key"
)

agent = initialize_agent(
    tools=[execute_sql],
    llm=llm,
    agent=AgentType.OPENAI_FUNCTIONS,
    agent_kwargs={
        'system_message': SYSTEM_TEMPLATE.format(user=CURRENT_USER)
    }
)

4. ๐Ÿ“… Utilitas Penanganan Tanggal

Untuk memudahkan penanganan query berbasis tanggal:

def get_date_range(days_ago: int):
    """Buat rentang tanggal untuk filter โฐ"""
    today = datetime.datetime.now(wita)
    target_date = today - datetime.timedelta(days=days_ago)
    start = target_date.replace(hour=0, minute=0, second=0)
    end = target_date.replace(hour=23, minute=59, second=59)
    return (
        start.strftime("%Y-%m-%d %H:%M:%S"),
        end.strftime("%Y-%m-%d %H:%M:%S")
    )

5. ๐Ÿ”„ Loop Aplikasi Utama

Akhirnya, mari gabungkan semuanya dalam loop aplikasi utama:

print("๐Ÿ’ป ** Sistem Manajemen Keuangan Ogi **")
while True:
    try:
        user_input = input("\n๐Ÿ“ Anda: ").strip()
        if user_input.lower() in ["exit", "keluar"]:
            break

        # Penanganan query spesifik tanggal ๐Ÿ“…
        if "kemarin" in user_input.lower():
            start, end = get_date_range(1)
            user_input += f" (rentang: {start} sampai {end})"

        response = agent.run(user_input)
        print(f"\n๐Ÿค– Bot: {response}")

    except Exception as e:
        print(f"\n๐Ÿค– Bot: ๐Ÿ’ฅ Error sistem: {str(e)}")

๐Ÿ›ก๏ธ Pertimbangan Keamanan

Implementasi kita mencakup beberapa langkah keamanan:

  1. ๐Ÿ”’ Pencegahan SQL Injection: Memblokir operasi SQL berbahaya
  2. ๐Ÿ” Isolasi Pengguna: Setiap query otomatis difilter berdasarkan pengguna
  3. โœ… Validasi Input: Memvalidasi dan membersihkan semua query SQL
  4. ๐Ÿšจ Penanganan Error: Penanganan error yang kuat mencegah sistem crash

๐ŸŽฎ Contoh Penggunaan

Berikut beberapa contoh interaksi dengan sistem:

  1. Menambah pengeluaran:
Anda: Tambah pengeluaran makan siang hari ini, jumlah 50000
Bot: โœ… Pengeluaran berhasil ditambahkan
  1. Melihat pengeluaran:
Anda: Tampilkan pengeluaran saya kemarin
Bot: id | deskripsi  | jumlah | tanggal
    ----------------------------------
    1  | makan siang | 50000  | 2024-01-29 12:30:00
  1. Mengupdate pengeluaran:
Anda: Update pengeluaran id 1 menjadi 45000
Bot: โœ… 1 data terpengaruh

๐ŸŽฏ Kesimpulan

Proyek ini mendemonstrasikan cara membuat sistem manajemen keuangan yang aman dan mudah digunakan menggunakan Python, SQLite, dan LangChain. Kombinasi pemrosesan bahasa alami dan operasi database tradisional membuatnya mudah diakses oleh pengguna sambil tetap menjaga keamanan dan integritas data.

Beberapa potensi pengembangan yang bisa dilakukan:

  • ๐Ÿ“Š Menambahkan kategori untuk pengeluaran
  • ๐Ÿ’ฐ Mengimplementasikan tracking budget
  • ๐Ÿ“ˆ Menambahkan visualisasi data
  • ๐Ÿ‘ฅ Mendukung multiple user
  • ๐Ÿ” Menambahkan autentikasi

Source code lengkap tersedia di bagian atas tutorial ini. Silakan modifikasi dan kembangkan sesuai kebutuhan Anda!

โš ๏ธ Jangan lupa untuk mengganti OpenAI API key dengan API key Anda sendiri sebelum menjalankan aplikasi.

๐Ÿท๏ธ Tags

python #sqlite #langchain #tutorial #finance #ai

Selamat mencoba! ๐Ÿš€


This content originally appeared on DEV Community and was authored by Ogi Wemy


Print Share Comment Cite Upload Translate Updates
APA

Ogi Wemy | Sciencx (2025-01-29T17:06:08+00:00) ๐Ÿฆ Membuat Aplikasi Manajemen Keuangan dengan Python, SQLite, dan LangChain.. Retrieved from https://www.scien.cx/2025/01/29/%f0%9f%8f%a6-membuat-aplikasi-manajemen-keuangan-dengan-python-sqlite-dan-langchain/

MLA
" » ๐Ÿฆ Membuat Aplikasi Manajemen Keuangan dengan Python, SQLite, dan LangChain.." Ogi Wemy | Sciencx - Wednesday January 29, 2025, https://www.scien.cx/2025/01/29/%f0%9f%8f%a6-membuat-aplikasi-manajemen-keuangan-dengan-python-sqlite-dan-langchain/
HARVARD
Ogi Wemy | Sciencx Wednesday January 29, 2025 » ๐Ÿฆ Membuat Aplikasi Manajemen Keuangan dengan Python, SQLite, dan LangChain.., viewed ,<https://www.scien.cx/2025/01/29/%f0%9f%8f%a6-membuat-aplikasi-manajemen-keuangan-dengan-python-sqlite-dan-langchain/>
VANCOUVER
Ogi Wemy | Sciencx - » ๐Ÿฆ Membuat Aplikasi Manajemen Keuangan dengan Python, SQLite, dan LangChain.. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2025/01/29/%f0%9f%8f%a6-membuat-aplikasi-manajemen-keuangan-dengan-python-sqlite-dan-langchain/
CHICAGO
" » ๐Ÿฆ Membuat Aplikasi Manajemen Keuangan dengan Python, SQLite, dan LangChain.." Ogi Wemy | Sciencx - Accessed . https://www.scien.cx/2025/01/29/%f0%9f%8f%a6-membuat-aplikasi-manajemen-keuangan-dengan-python-sqlite-dan-langchain/
IEEE
" » ๐Ÿฆ Membuat Aplikasi Manajemen Keuangan dengan Python, SQLite, dan LangChain.." Ogi Wemy | Sciencx [Online]. Available: https://www.scien.cx/2025/01/29/%f0%9f%8f%a6-membuat-aplikasi-manajemen-keuangan-dengan-python-sqlite-dan-langchain/. [Accessed: ]
rf:citation
» ๐Ÿฆ Membuat Aplikasi Manajemen Keuangan dengan Python, SQLite, dan LangChain. | Ogi Wemy | Sciencx | https://www.scien.cx/2025/01/29/%f0%9f%8f%a6-membuat-aplikasi-manajemen-keuangan-dengan-python-sqlite-dan-langchain/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.