Kalian pernah nggak sih duduk depan laptop, siap nulis artikel, tapi malah habis 30 menit cuma buat mikirin strukturnya? Mau bahas apa dulu, poin-poinnya apa, urutan logisnya gimana. Baru mulai nulis, energi udah kebakar setengah di sana.
Nah, saya juga ngalamin itu. Sampai akhirnya saya coba bikin solusinya sendiri pakai Anthropic SDK. Hasilnya? Sebuah AI agent sederhana yang bisa generate outline blog lengkap dalam hitungan detik. Dan di artikel ini, saya mau ngajak kalian bikin hal yang sama dari nol.
Agent vs Prompt Biasa, Apa Bedanya?
Kalau kalian pernah pakai Claude atau ChatGPT langsung, itu yang kalian lakuin adalah prompting biasa. Satu pertanyaan, satu jawaban, selesai.
AI agent beda. Agent bisa memutuskan sendiri tool apa yang mau dipakai, berdasarkan konteks yang diberikan. Kalian kasih dia kemampuan (tool), dia yang milih kapan dan gimana cara makenya. Ini yang disebut agentic workflow.
Dalam kasus ini, tool yang kita kasih adalah fungsi untuk generate outline. Claude yang akan memutuskan kapan harus manggilnya, dengan parameter apa, dan hasilnya dikembalikan ke kita dalam format yang rapi.
Yang Kalian Butuhkan
- Python 3.8+ sudah terinstall
- Anthropic API key dari console.anthropic.com
- Library anthropic versi terbaru
Install dulu dependencynya:
pip install anthropic
Simpan API key kalian sebagai environment variable:
export ANTHROPIC_API_KEY="sk-ant-..."
Step 1: Definisikan Tool-nya
Pertama, kita kasih tahu Claude tool apa yang tersedia. Di Anthropic SDK, tool didefinisikan sebagai JSON schema dengan tiga bagian utama: nama, deskripsi, dan input_schema.
tools = [
{
"name": "generate_outline",
"description": "Generate a structured blog outline based on a given topic and target audience.",
"input_schema": {
"type": "object",
"properties": {
"topic": {
"type": "string",
"description": "The main topic of the blog post"
},
"audience": {
"type": "string",
"description": "Target audience (e.g., beginners, developers, marketers)"
},
"num_sections": {
"type": "integer",
"description": "Number of main sections in the outline"
}
},
"required": ["topic", "audience"]
}
}
]
Bagian description di dalam tool itu penting banget. Claude baca ini untuk memahami kapan dan gimana cara memanggil tool yang tepat.
Step 2: Bikin Agent Loop-nya
Ini bagian paling krusial. Agent loop adalah siklus di mana Claude berpikir, memutuskan pakai tool atau tidak, lalu kita kasih hasilnya balik ke dia. Terus berputar sampai Claude bilang selesai.
import anthropic
import json
client = anthropic.Anthropic()
def run_agent(user_request: str) -> str:
messages = [{"role": "user", "content": user_request}]
while True:
response = client.messages.create(
model="claude-opus-4-7-20250219",
max_tokens=4096,
tools=tools,
messages=messages
)
# Claude selesai, tidak perlu tool lagi
if response.stop_reason == "end_turn":
for block in response.content:
if hasattr(block, "text"):
return block.text
# Claude mau pakai tool
if response.stop_reason == "tool_use":
messages.append({"role": "assistant", "content": response.content})
tool_results = []
for block in response.content:
if block.type == "tool_use":
result = handle_tool(block.name, block.input)
tool_results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": result
})
messages.append({"role": "user", "content": tool_results})
Yang perlu kalian perhatikan di sini adalah stop_reason. Kalau nilainya "tool_use", berarti Claude minta kita jalankan tool dan kembalikan hasilnya. Kalau "end_turn", berarti Claude sudah selesai berpikir dan hasilnya siap diambil.
Step 3: Implementasi Handler dan Jalankan
Sekarang kita bikin fungsi yang sebenarnya menghasilkan outline ketika dipanggil:
def handle_tool(name: str, inputs: dict) -> str:
if name == "generate_outline":
topic = inputs["topic"]
audience = inputs.get("audience", "general")
num_sections = inputs.get("num_sections", 5)
outline = f"# Blog Outline: {topic}nn"
outline += f"**Target Audience:** {audience}nn"
outline += "## Sections:n"
sections = [
"Pendahuluan dan Pain Point",
"Konsep Dasar",
"Panduan Step by Step",
"Tips dan Best Practice",
"Kesimpulan dan Next Step"
]
for i, section in enumerate(sections[:num_sections], 1):
outline += f"n{i}. **{section}**n"
outline += f" - Sub-poin An"
outline += f" - Sub-poin Bn"
outline += f" - Sub-poin Cn"
return outline
return "Tool not found"
# Jalankan agentnya
if __name__ == "__main__":
request = "Buatkan outline untuk artikel tentang cara setup Proxmox untuk homelab, target pembaca adalah sysadmin pemula."
result = run_agent(request)
print(result)
Jalankan dengan:
python agent.py
Dan outputnya akan langsung muncul, outline lengkap sesuai topik yang kalian minta.
Boom.
Tantangan yang Mungkin Kalian Temui
Ada beberapa hal yang biasanya jadi stumbling block pertama kali bikin agent:
- API key tidak terbaca: pastikan environment variable sudah diexport sebelum jalankan script. Kalau di Windows, pakai
set ANTHROPIC_API_KEY=...bukanexport. - Tool tidak pernah dipanggil: cek bagian
descriptiondi definisi tool. Claude butuh deskripsi yang jelas untuk tahu kapan menggunakannya. - Loop tidak berhenti: pastikan kondisi
stop_reason == "end_turn"selalu ada dan bisa direached. Kalau tidak, agent akan looping terus.
Dari Sini, Kalian Bisa Kemana?
Ini baru agent paling dasar. Setelah ini, kalian bisa tambahkan lebih banyak tool, misalnya tool untuk riset keyword, tool untuk cek panjang artikel, atau bahkan tool yang langsung posting ke WordPress lewat MCP.
Yang menarik dari agentic workflow ini adalah skalabilitasnya. Satu agent dengan banyak tool bisa menyelesaikan workflow yang kompleks secara otomatis. Saya sendiri sudah pakai konsep ini untuk otomasi beberapa proses di blog ini.
AI bukan cuma buat chat. Dengan tool use, kalian bisa bikin sesuatu yang benar benar kerja di dunia nyata.
Kalian sudah pernah bikin AI agent sebelumnya? Atau ada use case lain yang mau kalian coba? Share di komentar, saya baca semua kok.