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
- ChatGPT Plus: https://tools.jartekindo.com/tool/chatgpt-plus/
- Claude Pro: https://tools.jartekindo.com/tool/claude-pro/
- Gemini Advanced: https://tools.jartekindo.com/tool/gemini-advanced/
- Perplexity Pro: https://tools.jartekindo.com/tool/perplexity-pro/
Tip: Simpan API key di
.envagar 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:
UnstructuredExcelLoadermemanfaatkanpandasdanopenpyxluntuk 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!