Referensi cepat AI engineering. LLM API, prompt engineering, RAG, vector database, embeddings, function calling, fine-tuning, dan AI SDK. Perfect buat developer yang bangun AI app.
Login atau daftar akun gratis untuk membaca cheat sheet ini.
Instalasi library utama yang dipake buat AI engineering dengan Python.
Cara install library AI yang paling sering dipake.
# OpenAI Python SDK
pip install openai
# Anthropic SDK (Claude)
pip install anthropic
Simpan API key di environment variable, jangan hardcode di kode.
# .env file
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
HUGGINGFACE_TOKEN=hf_...
PINECONE_API_KEY=...from dotenv import load_dotenv
load_dotenv() # Load dari .env file
import os
api_key = os.getenv("OPENAI_API_KEY")Pola dasar pemanggilan OpenAI API buat chat completion, streaming, dan structured output.
Cara paling dasar panggil LLM lewat OpenAI API.
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content"
Kirim jawaban token per token, biar user nggak nunggu full response selesai.
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Ceritakan tentang sejarah Java"}],
stream=True
)
for chunk in stream:
Paksa model balikin JSON dengan schema yang udah ditentukan.
response = client.chat.completions.create(
model="gpt-4o",
response_format={"type": "json_object"},
messages=[
{"role": "system", "content"
Kirim gambar ke model buat dianalisis.
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": [
{"type": "text", "text": "Deskripsikan gambar ini"},
Cara pakai Claude API, sebagai alternatif atau pelengkap OpenAI.
import anthropic
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1000,
system="Kamu adalah senior code reviewer yang memberi feedback singkat.",
messages=
Pola prompt yang terbukti efektif untuk berbagai skenario.
Tanya langsung tanpa contoh, cocok buat task simpel.
prompt = "Klasifikasikan sentiment: 'Pelayanan toko ini parah banget'"
# negatifKasih beberapa contoh biar model paham pola yang diinginkan.
messages = [
{"role": "user", "content": """
Klasifikasikan sentiment review berikut:
Review: 'Mantap, kualitas oke banget!' => positif
Review: 'Lama banget pengirimannya' => negatif
Review: 'Sesuai deskripsi, oke lah' => netral
Review: 'Rusak, kecewa berat' =>
"""}
]Minta model berpikir bertahap sebelum kasih jawaban akhir.
system_prompt = """
Sebelum menjawab, pikirkan langkah demi langkah.
1. Identifikasi informasi yang diketahui
2. Identifikasi yang ditanyakan
3. Hitung langkah demi langkah
4. Berikan jawaban akhir dengan format: JAWABAN: [angka]
"""Template system prompt buat berbagai use case.
# Code reviewer
"Kamu adalah senior developer. Review kode dengan fokus pada: bug, performance, readability. Berikan saran dengan contoh kode perbaikan."
# Customer support
"Kamu adalah customer support untuk [produk]. Jawab dengan ramah, singkat, dan akurat. Jika tidak tahu, arahkan ke human agent."
# Data extraction
"Ekstrak informasi dari teks. Kembalikan HANYA dalam format JSON dengan field: nama, tanggal, jumlah, mata_uang. Jangan tambahkan teks lain."
# Tutor
"Kamu adalah tutor programming. Jangan kasih jawaban langsung. Beri petunjuk dan biarkan murid berpikir."Cara mengubah teks jadi representasi vektor untuk semantic search dan RAG.
Buat embedding pakai model OpenAI text-embedding-3-small (1536 dimensi, murah) atau text-embedding-3-large (3072 dimensi, lebih akurat).
from openai import OpenAI
client = OpenAI()
# Single text
response = client.embeddings.create(
model="text-embedding-3-small",
input="Belajar AI engineering untuk developer"
)
vector =
Alternatif gratis tanpa API cost, jalanin lokal.
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2') # 384 dimensi, cepat
embeddings = model.encode([
"Laptop gaming murah",
"Notebook untuk bermain game",
"Resep nasi goreng spesial"
])
# Cek similarity
Hitung kemiripan dua vektor tanpa library tambahan.
import numpy as np
def cosine_sim(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
sim = cosine_sim(vector_a, vector_b)
# Range 0-1 (atau -1 sampai 1). Makin deket ke 1, makin mirip.Langkah-langkah membangun sistem Retrieval-Augmented Generation dari nol.
Cara motong dokumen panjang jadi chunk yang optimal untuk RAG.
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=500, # Maksimal karakter per chunk
chunk_overlap=50, # Overlap antar chunk biar konteks nggak putus
separators=["\n\n"
Implementasi RAG lengkap pakai ChromaDB sebagai vector store.
import chromadb
from openai import OpenAI
client = OpenAI()
db
Versi yang lebih clean pakai LangChain abstraction.
from langchain_community.document_loaders import TextLoader
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.chains import
Tabel pemilihan vector database berdasarkan kebutuhan.
+------------+-------------+----------+------------+-----------+
| Database | Type | Language | Best For | Open Src? |
+------------+-------------+----------+------------+-----------+
| Chroma | Embedded | Python | Prototype | Ya |
| Pinecone | Managed SaaS| Any | Production | Tidak |
| Weaviate | Self-host | Go/Python| Hybrid src | Ya |
| Qdrant | Self-host | Rust API | High speed | Ya |
| Milvus | Distributed | Go/C++ | Scale | Ya |
| pgvector | PG Extension| SQL | Sudah pakai| Ya |
| FAISS | Library | Python | In-memory | Ya |
+------------+-------------+----------+------------+-----------+Cara cepat setup Pinecone untuk production.
from pinecone import Pinecone, ServerlessSpec
pc = Pinecone(api_key="your-api-key")
# Buat index
pc.create_index(
name="dokumen",
dimension=1536,
Kalau kamu udah pakai PostgreSQL, tinggal tambahin extension pgvector. Nggak perlu database baru.
-- Install extension
CREATE EXTENSION vector;
-- Buat table
CREATE TABLE dokumen (
id SERIAL PRIMARY KEY,
content TEXT,
embedding VECTOR(1536)
);
Cara kasih kemampuan ke LLM buat memanggil function eksternal.
Definisikan tool, biar model otomatis panggil saat dibutuhkan.
Gunakan model open source secara lokal, tanpa biaya API.
Shortcut buat task ML umum dengan satu baris kode.
from transformers import pipeline
# Sentiment analysis
classifier = pipeline("sentiment-analysis")
classifier("Filmnya bagus banget!")
# [{'label': 'POSITIVE', 'score': 0.999}]
Kontrol penuh atas model dan tokenizer.
from transformers import AutoTokenizer, AutoModelForCausalLM
model_name = "meta-llama/Llama-3.2-1B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Generate text
inputs = tokenizer("Belajar AI itu", return_tensors=
Untuk developer yang bangun AI app di React atau Next.js.
npm install ai @ai-sdk/openai @ai-sdk/anthropicimport { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';
import { anthropic } from '@ai-sdk/anthropic';
// OpenAI
const { text } = await generateText
import { useChat } from '@ai-sdk/react';
function Chat() {
const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat();
// app/api/chat/route.ts
import { openai } from '@ai-sdk/openai';
import { streamText } from 'ai';
export async function POST(req: Request) {
const { messages }
import { generateObject } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';
const { object } = await generateObject({
model:
Parameter-efficient fine-tuning buat adaptasi pre-trained model.
from peft import LoraConfig, get_peft_model, TaskType
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.2-1B",
load_in_4bit=True, # 4-bit quantization (QLoRA)
from trl import SFTTrainer
from transformers import TrainingArguments
from datasets import load_dataset
dataset = load_dataset("json", data_files="training_data.json")
Perbandingan model populer yang sering dipake di 2025 sampai 2026.
+------------------+-----------+----------------+----------+--------+
| Model | Provider | Context Window | API Cost | Open? |
+------------------+-----------+----------------+----------+--------+
| GPT-4o | OpenAI | 128K tokens | $$$ | Tidak |
| GPT-4o mini | OpenAI | 128K tokens | $ | Tidak |
| Claude Sonnet 4 | Anthropic | 200K tokens | $$ | Tidak |
| Claude Haiku 3.5 | Anthropic | 200K tokens | $ | Tidak |
| Gemini 2.0 Flash | Google | 1M tokens | $ | Tidak |
| Gemini 2.5 Pro | Google | 1M tokens | $$ | Tidak |
Cara jalanin model secara lokal atau di server sendiri.
Jalanin model open source di laptop kamu, tanpa internet.
# Install Ollama
curl -fsSL https://ollama.com/install.sh | sh
# Download dan jalanin model
ollama run llama3.2 # Model 1B-3B
ollama run mistral # Model 7B
ollama run qwen2.5 # Model Qwen
# Via API (Ollama menyediakan endpoint OpenAI-compatible)
# Pakai Ollama dari Python (OpenAI-compatible)
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # Bebas, nggak dicek
)
response = client.chat.completions.create(
model="llama3.2"
Buat production serving dengan throughput tinggi dan batching otomatis.
# Install
pip install vllm
# Serve model
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.2-3B \
--port 8000Pola kode yang sering muncul di AI engineering.
Tambahkan retry logic biar aplikasi nggak crash kalau API ke-limit.
import time
from openai import OpenAI
client = OpenAI()
def call_with_retry(messages, max_retries=3):
for attempt in range(max_retries):
try
Hitung token sebelum dikirim, biar nggak kelebihan context window.
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4o")
text = "Ini adalah contoh teks untuk dihitung tokennya."
tokens = enc.encode(text)
print(f"Jumlah token: {len(tokens)}")
# Estimasi biaya
Validasi output LLM biar nggak bikin error downstream.
from pydantic import BaseModel, ValidationError
class ProductInfo(BaseModel):
name: str
price: float
stock: int
def extract_product(llm_output):
"""Parse dan validasi output LLM ke schema."""
try:
Simpan riwayat percakapan biar model ingat konteks.
class ConversationManager:
def __init__(self, system_prompt, max_messages=20):
self.system_prompt = system_prompt
self
Token Unit pemrosesan LLM (~4 karakter / 3/4 kata)
Context Window Maksimal token yang bisa diproses sekaligus
Temperature Kontrol kreativitas (0=konsisten, 1=kreatif)
Embedding Representasi numerik teks yang nangkap makna
Vector DB Database khusus simpan dan cari embeddings
RAG Sistem ambil data eksternal, inject ke prompt
Fine-Tuning Latih ulang model dengan data spesifik
LoRA Fine-tuning efisien, update sedikit parameter
QLoRA LoRA + quantization 4-bit, butuh GPU lebih kecil
import json
from openai import OpenAI
client = OpenAI()
# Definisikan tools
tools = [
{
"type": "function",
"function": {
"name": "get_product_info",
"description": "Dapatkan info produk berdasarkan ID",
"parameters": {
"type": "object",
"properties": {
"product_id": {