Tool Use Intro: Function Calling
এতদিন model শুধু text লিখত। আজ থেকে সে একটা function ডাকার request দিতে পারে — এটাই prompting agentic হয়ে ওঠার মুহূর্ত, আর Claude Code-এর পুরো ভিত্তি।
- •Tool use / function calling কী — model talk না, act করতে পারে।
- •একটা tool definition-এর তিন অংশ — `name`, `description`, `input_schema`।
- •Agentic loop trace করা — user → tool_use → execute → tool_result → answer।
- •Model request করে, তোমার কোড execute করে — brain vs hands-এর পার্থক্য (ও safety)।
- •`tool_choice` (auto / any / tool) আর কখন model tool ডাকে।
- •Claude Code-এর Read/Edit/Bash যে এই একই tool_use loop — সেটা বোঝা (Day 16-র ভিত্তি)।
- •Day 9 — structured output / JSON schema (input_schema চেনা লাগবে)।
- •Day 5 — system/user/assistant message roles।
- •Day 6 — clear-and-direct prompt; tool description ও একটা prompt।
The Big Picture
যেখানে prompting agentic হয়ে ওঠে — model শুধু বলে না, চায়।
এতদিন যা prompt লিখেছ, তার ফলাফল ছিল একটাই — model text লিখে ফেরত দিত। আজ থেকে সেটা বদলে যায়। Model এখন শুধু বলে না — একটা function ডাকার request পাঠাতে পারে, আর তোমার কোড সেটা চালিয়ে ফলাফল ফিরিয়ে দেয়। এটাই tool use, বা function calling।
Tool usefunction calling — model can act
Model-কে কিছু function-এর তালিকা দাও; ও দরকার বুঝলে "এই function-টা এই input দিয়ে চালাও" বলে একটা structured request দেয়। এতদিন model শুধু text লিখত — এবার সে action নিতে পারে (নিজে না, তোমার কোড দিয়ে)।
এটাই সেই মুহূর্ত যেখানে prompting agentic হয়। Model-এর knowledge frozen, আর তোমার private system সে দেখতে পায় না — tool সেই দেয়াল ভাঙে। আর Claude Code, যেটা তুমি শিখতে চাও, পুরোটাই tool use-এর উপর দাঁড়ানো।
Model-এর জ্ঞান training-এর সময়েই জমাট বাঁধা, আর তোমার order database বা inventory-র মতো private system সে দেখতে পায় না। একই প্রশ্ন — tool ছাড়া আর tool দিয়ে — কী রকম আলাদা ফল দেয়, নিচে দেখো।
তাহলে model-কে একটা tool কীভাবে দাও? কোনো fine-tuning লাগে না — শুধু তিনটা জিনিস লিখে request-এর সাথে পাঠাও। এটাই একটা tool-এর পুরো সংজ্ঞা।
Tool definitionname + description + input_schema
একটা tool define করতে তিনটা জিনিস: `name` (identifier), `description` (কখন/কেন ডাকবে — model এটা পড়ে সিদ্ধান্ত নেয়), আর `input_schema` (কী argument, JSON Schema-তে)। কোনো fine-tuning লাগে না — শুধু request-এর সাথে এই list পাঠাও।
description-টাই আসল lever — ওটা model-এর জন্য একটা prompt (Day 6)। "Use when the user asks where an order is" লিখলে model ঠিক সময়ে ডাকে; অস্পষ্ট হলে ভুল সময়ে বা miss করে। Tool লেখা মানে prompt engineering, JSON ভরাট না।
{
"name": "get_order_status",
"description": "Look up the live delivery status and ETA of a customer order by its ID. Use when the user asks where an order is or when it will arrive.",
"input_schema": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "The order ID, e.g. 4821"
}
},
"required": ["order_id"]
}
}রাফির delivery কোম্পানির এই real tool-টার তিনটা অংশ নিচে ভেঙে দেখো — কোনটা চাপলে কোন অংশের কাজ কী বোঝা যায়।
Core Concepts
Request থেকে answer পর্যন্ত — পুরো loop, আর কে আসলে কী চালায়।
Tool definition আছে হাতে। কিন্তু conversation-এ আসলে কী ঘটে, যখন model সেটা ডাকতে চায়? Model response দেয় `stop_reason: "tool_use"` সহ একটা `tool_use` block নিয়ে; তোমার কোড চালিয়ে একটা `tool_result` block ফেরত পাঠায়।
// tool_use — model চায় (stop_reason: "tool_use")
{ "type": "tool_use", "id": "toolu_01A", "name": "get_order_status", "input": { "order_id": "4821" } }
// tool_result — তোমার কোড ফেরত দেয়
{ "type": "tool_result", "tool_use_id": "toolu_01A", "content": "in_transit, ETA tomorrow 2 PM" }The agentic looptool_use → execute → tool_result → repeat
Flow-টা: user বলে → model `tool_use` request দেয় → তোমার কোড function চালায় → `tool_result` ফেরত যায় → model উত্তর দেয়, বা আরেকটা tool ডাকে → loop। এই বারবার-চলা loop-ই one-shot chatbot-কে agent বানায়।
একটা tool call-এ থেমে গেলে সেটা শুধু lookup। কিন্তু model যখন result দেখে পরের পদক্ষেপ ঠিক করে — "status পেলাম, এবার refund policy দেখি" — তখনই সেটা agent। Module 5-এ পুরো agent এই loop-এর উপরেই বানাবে।
রাফির delivery কোম্পানির একটা প্রশ্ন নিয়ে পুরো loop-টা ধাপে ধাপে দেখো — কে কখন কথা বলে, আর tool_use থেকে tool_result-এ হাত-বদলটা কোথায়।
লক্ষ করেছ? Model দুবার কথা বলল, কিন্তু মাঝখানে আসল কাজটা — function চালানো — করল তোমার কোড, model না। এই boundary-টাই সবচেয়ে জরুরি।
Brain vs handsmodel requests, your code executes
এটা পরিষ্কার রাখো: model কিছুই run করে না। সে শুধু একটা `tool_use` request দেয় — "please run get_order_status(4821)"। আসল function চালায় তোমার কোড, তারপর `tool_result` ফেরত দেয়। Model = brain, তোমার runtime = hands।
এই boundary-টাই safety। তোমার কোড চালানোর আগে যাচাই বা থামাতে পারে। এই কারণেই Claude Code একটা bash command চালানোর আগে permission চায় — model proposes, তুমি approve/deny করো। Module 4/6-এর guardrail এখান থেকেই শুরু।
তাহলে model কি সবসময় tool ডাকে, যখনই সেটা দেওয়া থাকে? না — সেটা ঠিক করে আরেকটা parameter।
tool_choiceauto / any / tool
Default `auto` — model প্রতি turn-এ নিজে ঠিক করে: জানা উত্তর হলে সরাসরি দেয়, live/private data লাগলে tool ডাকে। জোর করতে চাইলে `any` (অবশ্যই কোনো একটা tool) বা `tool` (নির্দিষ্ট একটা)। System prompt দিয়েও নাজ করা যায়: "Use the tools to investigate before responding."
Tool থাকা মানেই সবসময় ডাকবে না — auto-তে model judge করে। তোমার agent যদি tool কম ডাকে, description শক্ত করো বা একটা light instruction দাও; বেশি ডাকলে উল্টোটা। এটাই tool-triggering নিয়ন্ত্রণ।
Try It Yourself
আজকের ধারণাই Claude Code-এর মেঝে — Day 16-র আগে শেষ ধাপ।
এতক্ষণ যা শিখলে, সেটা তুমি প্রতিদিন নিজের চোখে দেখো — Claude Code-এ। ও file পড়ে (Read), command চালায় (Bash), code এডিট করে (Edit) — প্রতিটাই আজকের এই একই tool_use loop।
Claude Code= tool use — Read / Edit / Bash, same loop
তুমি Claude Code-এ যা দেখো — ও file পড়ছে (Read), command চালাচ্ছে (Bash), code এডিট করছে (Edit), খুঁজছে (Grep) — প্রতিটাই আজকের সেই tool_use loop। Claude Code = Claude + একটা toolbox। আজকের `get_order_status` আর Claude Code-এর `Read` একই জিনিস।
এই কারণেই tool use না বুঝে Claude Code ভালোভাবে use করা যায় না। Day 16-এ যখন Claude Code চালাবে, screen-এ এই loop-টাই ঘটতে দেখবে — ও tool ডাকছে, result পাচ্ছে, পরের পদক্ষেপ নিচ্ছে। আজকের ধারণাই পুরো Module 3-র মেঝে।
নিচে একটা Claude Code action বেছে দেখো — ভিতরে কোন tool_use আর কোন tool_result ঘটছে।
আজ তিনটা জিনিস মনে রাখো এমনভাবে যেন নিজে ব্যাখ্যা করতে পারো — (১) tool call একটা request, action না; (২) description-ই আসল lever, ওটা model-এর জন্য একটা prompt; (৩) Claude Code-এর Read/Edit/Bash এই একই loop-এর tool — Day 16-এ এই loop নিজের চোখে চলতে দেখবে।
Check Your Understanding
ভুল হলে সমস্যা নেই — প্রতিটার ব্যাখ্যা আছে।
Tool দিলে model নিজেই API call করে বা command চালায়
Tool use করতে model fine-tune / retrain করতে হয়
Tool দেওয়া থাকলে model প্রতিবার সেটা ডাকবে
Tool-এর description একটা formality — model schema দেখেই বুঝে নেয়
এক tool call-এই কাজ শেষ — loop-টা বাড়াবাড়ি
Client tool use-এ আসল function কে চালায়?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
একটা tool definition-এর তিনটা মূল অংশ কী?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
Model একটা tool ডাকতে চাইলে response-এ কী আসে?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
Agentic loop-এর ঠিক ক্রম কোনটা?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
`tool_choice: "auto"` মানে কী?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
Claude Code-এর Read / Bash / Edit আসলে কী?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
Prove It To Yourself
চারটা takeaway মনে রাখো — Day 16-এ Claude Code দিয়ে এই loop-টাই চালাবে।
চারটা জিনিস মনে রাখো — Model request করে, তোমার কোড execute করে: tool_use একটা request, action না। Brain vs hands — তাই Claude Code permission চায়। একটা tool = name + description + input_schema: description-ই prompt, model এটা পড়েই ঠিক করে কখন ডাকবে। The agentic loop: user → tool_use → execute → tool_result → answer (দরকারে repeat) — এটাই chatbot-কে agent বানায়। Claude Code is tool use: Read/Edit/Bash এই একই loop-এর tool — আজকের ধারণাই Day 16-র মেঝে।
আজকের শব্দগুলো — tool use, function calling, tool definition, input_schema, tool_use, tool_result, stop_reason, tool_choice, agentic loop, client tool, server tool, JSON Schema — এখন থেকে English-ই থাকবে; API call, playground, Claude Code session-এ এভাবেই দেখবে। পুরো তালিকা নিচের glossary-তে। Module 3 এখন থেকে Claude Code আর tool-ভিত্তিক workflow নিয়ে এগোবে — পরের lesson-এ (Day 16) নিজে Claude Code চালাবে, আর আজকের এই loop-টাই চোখের সামনে ঘটতে দেখবে।
শব্দার্থ — পরে ফিরে দেখার জন্য
একনজরে সব key term। কোনো শব্দ ভুলে গেলে এখানে এসে খুঁজে নিও।
- Agentic loop
- user → tool_use → execute → tool_result → answer (দরকারে repeat)।
- Brain vs hands
- Model সিদ্ধান্ত নেয় (brain); তোমার runtime চালায় (hands)।
- Client tool
- তোমার কোডে চলা tool (user-defined)।
- Function calling
- Tool use-এর আরেক নাম (OpenAI-র term)।
- input_schema
- Tool-এর argument-এর JSON Schema (Day 9-র structured output)।
- JSON Schema
- Structured data-র shape বর্ণনার standard — input_schema এতেই লেখা।
- Server tool
- Anthropic-এর infra-তে চলা tool (যেমন web_search)।
- stop_reason
- Model কেন থামল — tool ডাকতে চাইলে "tool_use"।
- Strict tool use
- strict: true — model-এর tool input হুবহু schema মেনে চলে।
- Tool definition
- একটা tool-এর spec: name + description + input_schema।
- Tool use
- Model-কে function ডাকার ক্ষমতা দেওয়া — talk না, act।
- tool_choice
- auto (model ঠিক করে) / any (অবশ্যই কোনো tool) / tool (নির্দিষ্ট একটা)।
- tool_result (block)
- তোমার কোডের ফেরত: function চালানোর ফলাফল, tool_use_id-সহ।
- tool_use (block)
- Model-এর request: কোন tool, কোন input। stop_reason হয় "tool_use"।
Sources consulted to author this lesson. Citation style is informal — follow the links if you want to dig deeper.
- Tool use with Claude — Anthropic (2025)
- How tool use works / Define tools — Anthropic (2025)
- Function Calling in AI Agents — Prompt Engineering Guide (DAIR.AI) (2024)
- Function Calling: The Bridge to Agentic AI — Fireworks AI (2024)
- Build a tool-using agent (tutorial) — Anthropic (2025)
দুই বাক্যে নিজের ভাষায় লেখো
নিজের ভাষায় দুই বাক্যে লেখো — একটা tool definition-এর তিনটা অংশ কী কী, আর model tool ডাকতে চাইলে response-এ ঠিক কী আসে (stop_reason + tool_use block)।