Membuat AI Agent yang Bisa Membaca PDF dan Excel

Membuat AI Agent yang Bisa Membaca PDF dan Excel

Pendahuluan

Banyak organisasi mengumpulkan data dalam format PDF dan Excel. Mengambil informasi secara manual menjadi pekerjaan yang memakan waktu. Tutorial ini menunjukkan cara membangun AI Agent yang otomatis mengekstrak data dari kedua format tersebut, menggunakan LangChain sebagai kerangka kerja dan model LLM (ChatGPT Plus, Claude Pro, Gemini Advanced, atau Perplexity Pro) untuk pemahaman teks. Arsitektur sederhana terdiri dari:
1. Input Layer – file PDF/Excel diunggah ke folder data/.
2. Extraction Layer – LangChain PDFLoader dan PandasCSVLoader (untuk Excel).
3. LLM Layer – model LLM pilihan.
4. Agent Layer – ZeroShotAgent yang memutuskan tindakan (extract, summarize, query).
5. Output Layer – JSON atau CSV yang dapat langsung dipakai.

Prasyarat & Persiapan

Item Keterangan
Python 3.10+ Pastikan python --version ≥ 3.10
Virtual Environment python -m venv venv
Akun LLM ChatGPT Plus, Claude Pro, Gemini Advanced, atau Perplexity Pro.
API Key Simpan di file .env
Dependencies pip install -r requirements.txt
Folder Struktur data/ untuk file PDF/Excel, output/ untuk hasil

Akun LLM

Tip: Simpan API key di .env agar aman dan tidak ter-commit ke repositori.

Langkah Demi Langkah

Step 1 – Siapkan Virtual Environment

python -m venv venv
source venv/bin/activate   # Linux/macOS
venv\Scripts\activate.bat   # Windows

Step 2 – Instalasi Dependencies

Buat file requirements.txt:

langchain==0.2.0
openai==1.30.0
anthropic==0.27.0
google-generativeai==0.5.0
perplexity==0.3.0
pandas==2.2.0
openpyxl==3.1.2
python-dotenv==1.0.0

Kemudian jalankan:

pip install -r requirements.txt

Step 3 – Konfigurasi LLM

Buat file .env:

OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-...
GOOGLE_API_KEY=AIza...
PERPLEXITY_API_KEY=pk-...

Step 4 – Membuat Script Python

Buat file agent.py:

import os
import json
import pandas as pd
from langchain.document_loaders import PyPDFLoader, UnstructuredExcelLoader
from langchain.llms import OpenAI, Anthropic, GooglePalm, Perplexity
from langchain.agents import ZeroShotAgent, AgentExecutor, load_tools
from langchain.prompts import PromptTemplate
from dotenv import load_dotenv

load_dotenv()

# 1. Pilih LLM
llm_choice = os.getenv("LLM_CHOICE", "openai")  # openai / anthropic / google / perplexity

if llm_choice == "openai":
    llm = OpenAI(temperature=0, model="gpt-4o-mini")
elif llm_choice == "anthropic":
    llm = Anthropic(temperature=0, model="claude-3-haiku-20240307")
elif llm_choice == "google":
    llm = GooglePalm(temperature=0, model="gemini-1.5-pro")
elif llm_choice == "perplexity":
    llm = Perplexity(temperature=0, model="llama-3.1-70b-instruct")
else:
    raise ValueError("Unsupported LLM")

# 2. Load PDF
pdf_path = "data/sample.pdf"
pdf_loader = PyPDFLoader(pdf_path)
pdf_docs = pdf_loader.load()

# 3. Load Excel
excel_path = "data/sample.xlsx"
excel_loader = UnstructuredExcelLoader(excel_path)
excel_docs = excel_loader.load()

# 4. Agent Prompt
prompt = PromptTemplate(
    input_variables=["input"],
    template=(
        "You are a data extraction assistant. "
        "Given the following documents, answer the query.\n\n"
        "Documents:\n{input}\n\n"
        "Query: {query}\n"
        "Answer:"
    ),
)

# 5. Tools (none needed for simple extraction, but placeholder)
tools = load_tools([], llm=llm)

# 6. Agent
agent = ZeroShotAgent.from_llm_and_tools(
    llm=llm,
    tools=tools,
    prompt=prompt,
)

agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 7. Query
query = "Ringkas isi PDF dan ekstrak tabel utama dari Excel."

# 8. Run
result = agent_executor.run({"input": "\n".join([doc.page_content for doc in pdf_docs + excel_docs]), "query": query})

# 9. Simpan hasil
os.makedirs("output", exist_ok=True)
with open("output/result.json", "w") as f:
    json.dump({"result": result}, f, indent=2)

print("Hasil disimpan di output/result.json")

Catatan: UnstructuredExcelLoader memanfaatkan pandas dan openpyxl untuk membaca Excel. Pastikan file Excel tidak terenkripsi.

Step 5 – Jalankan Agent

python agent.py

Output akan muncul di konsol dan disimpan di output/result.json.

Tips Optimasi & Keamanan

Area Praktik Terbaik
Penggunaan API Key Simpan di .env dan tambahkan ke .gitignore.
Batch Processing Untuk file besar, proses halaman/lembar satu per satu dan gabungkan hasil.
Rate Limiting Gunakan time.sleep() atau retry library untuk menghindari throttling.
Logging Aktifkan logging pada LangChain untuk memantau query dan respon.
Deployment Deploy ke server dengan gunicorn + uvicorn jika ingin expose API.
Keamanan Data Hapus file sementara setelah diproses dan gunakan tempfile untuk penyimpanan sementara.

Troubleshooting Error Umum

Error Penyebab Solusi
ModuleNotFoundError: No module named 'langchain' Dependensi belum terinstal Pastikan pip install -r requirements.txt berhasil.
AuthenticationError: Invalid API key API key salah atau tidak ter-set Periksa .env dan pastikan variabel LLM_CHOICE sesuai.
FileNotFoundError: [Errno 2] No such file or directory: 'data/sample.pdf' Path salah Pastikan file berada di folder data/ dan nama file cocok.
OpenAIError: Rate limit exceeded Terlalu banyak request Tambahkan delay atau gunakan retry logic.
ValueError: Unsupported LLM LLM_CHOICE tidak valid Gunakan openai, anthropic, google, atau perplexity.

Kesimpulan

Dengan LangChain dan LLM pilihan, Anda dapat dengan cepat membangun AI Agent yang mengekstrak informasi dari PDF dan Excel. Proses ini dapat diintegrasikan ke pipeline data, chatbot, atau aplikasi internal. Selalu pertimbangkan keamanan data dan optimasi performa saat memindahkan ke produksi. Selamat mencoba!

🏷️ Topik Terkait: