cafetadris · webinar · agentic ai

از چت تا اجرا؛
اولین AI Agent خودت رو
با Claude بساز

ساخت زنده یک عامل هوشمند که تصمیم می‌گیرد، ابزار انتخاب می‌کند و کار را انجام می‌دهد

search
filter
decide
act
01 / 16
اسکرول کن
برنامه امروز

امروز قراره چه اتفاقی بیفتد

از مفهوم تا اجرا؛ همه‌چیز در یک جلسه، با یک ایجنت واقعی که تا پایان جلسه روی کانال تلگرام زنده می‌شود.

1

AI Agent چیست و از چه اجزایی ساخته شده

تعریف دقیق و تفاوتش با یک چت‌بات معمولی

2

Agentic Workflow چیست

وقتی چند ایجنت به‌هم زنجیر می‌شوند؛ مقدمه‌ای برای جلسه بعد

3

کار امروز و نقشه پایپ‌لاین

یک ایجنت واقعی که هر روز یک نکته درباره ایجنت‌های هوشمند در کانال تلگرام منتشر می‌کند

4

پرامپت‌نویسی برای Claude Code

چطور یک پرامپت بسازیم که مراحل ساخت را قدم‌به‌قدم از کلود بگیریم

5

راه‌اندازی طرف تلگرام

ساخت بات، گرفتن توکن، افزودن به کانال

6

Open source، Closed source و Wrapper

مدل باز، مدل بسته و دروازه‌هایی مثل AvalAI کجا می‌ایستند

7

LangChain، LangGraph و Pydantic

جعبه‌ابزار ساخت، نقشه‌ی چندمرحله‌ای، و مقیدکردن خروجی مدل به فیلدهای مشخص

8

اصطلاحات و مفاهیم کلیدی

بعد از دیدن مسیر واقعی، API، Tool، Memory، RAG و بقیه را یک‌جا مرور می‌کنیم

مفهوم پایه

AI Agent چیست؟

یک برنامه که یک هدف می‌گیرد، خودش تصمیم می‌گیرد چه قدم‌هایی لازم است، از ابزارهای در دسترس استفاده می‌کند، و بدون این‌که هر مرحله را از شما بپرسد، جلو می‌رود تا به نتیجه برسد.

agent vs chatbot

فرق آن با یک چت‌بات ساده

یک چت‌بات فقط پاسخ می‌دهد. یک ایجنت تصمیم می‌گیرد و عمل می‌کند: می‌تواند جستجو کند، فایل بنویسد، به یک API وصل شود، و نتیجه‌ی هر قدم را ببیند و قدم بعدی را بر همان اساس انتخاب کند.

think
act
observe

همین چرخه‌ی think → act → observe است که تکرار می‌شود تا هدف محقق شود.

LLM

مغز ایجنت

استدلال، تصمیم‌گیری و انتخاب قدم بعدی

SYS

System Prompt

دستورالعمل ثابت برای نقش، لحن و محدودیت‌های ایجنت

TL

Tools

مدل به‌جای فقط نوشتن متن، یک اکشن مشخص را صدا می‌زند

MEM

Memory

اطلاعاتی که بین اجراها یا در طول مکالمه نگه می‌دارد

CTX

Context Window

حداکثر متنی که مدل هم‌زمان می‌بیند و به آن توجه می‌کند

نمونه واقعی یک AI Agent با مدل چت، حافظه، ابزارها و مسیر تصمیم
نمونه واقعی: یک ایجنت با مدل چت، حافظه و چند ابزار (Microsoft SharePoint، Jira) که بر اساس یک مسیر تصمیم، اکشن را انتخاب می‌کند
یک قدم جلوتر

Agentic Workflow چیست؟

وقتی یک ایجنت تنها کافی نیست، چند ایجنت تخصصی را به‌هم زنجیر می‌کنیم؛ هرکدام مسئولیت مشخص خودش را دارد و نتیجه‌اش ورودی مرحله‌ی بعد می‌شود.

Search Agent
Filter Agent
Writer Agent
Publisher Agent
single agent

یک ایجنت، یک حلقه

یک مدل، یک System Prompt، چند ابزار: تصمیم‌گیری در یک حلقه‌ی ساده‌ی think → act → observe اتفاق می‌افتد. همان چیزی که امروز می‌سازیم.

agentic workflow

چند ایجنت، یک گراف صریح

مسیر تصمیم‌گیری از قبل به‌صورت یک گراف (مثلاً با LangGraph) مشخص می‌شود؛ state بین مرحله‌ها منتقل می‌شود. موضوع جلسه بعدی.

نمونه واقعی یک Agentic Workflow با ارکستریتور، داور و چند عامل تخصصی
نمونه واقعی: یک ارکستریتور کارها را بین چند عامل تخصصی پخش می‌کند و یک عامل داور خروجی نهایی را تأیید می‌کند
عملی

کار امروز

یک بات تلگرام که هر روز، بدون دخالت ما، یک نکته‌ی تازه درباره‌ی ایجنت‌های هوشمند پیدا می‌کند، فیلتر می‌کند و در کانال منتشر می‌کند.

search web
structure + score
dedupe (vector db)
select best
generate image
publish → telegram
reasoning

DeepSeek

مدل زبانی برای جستجو، امتیازدهی و نوشتن متن نکته

visual

OpenAI Image

ساخت تصویر برای هر پست، بر اساس متن نکته

memory

Vector DB محلی

معنای نکته‌ها را ذخیره می‌کند تا تکراری‌ها با شباهت معنایی پیدا و حذف شوند

gateway

AvalAI

یک کلید API؛ دروازه‌ای استاندارد برای رسیدن به چند مدل، سازگار با OpenAI

نقشه فنی

نقشه کامل پایپ‌لاین امروز

همان شش قدم قبلی، این‌بار با اتصال دقیق هر قدم به مدل، ابزار یا پایگاه داده‌ای که پشتش ایستاده؛ همین نقشه را تا پایان جلسه زنده اجرا می‌کنیم.

نقشه پایپ‌لاین ایجنت تیپس تلگرام: جستجو، ساختاردهی، حذف تکراری، انتخاب، تولید تصویر و انتشار
مسیر استدلال و داده (DeepSeek + Vector DB) مسیر خروجی خلاقانه و انتشار (تصویر + تلگرام)
پرامپت‌نویسی

پرامپتی که به Claude Code می‌دهیم

یک پرامپت خوب برای ساخت، فقط «یک ایجنت بساز» نیست؛ دقیقاً مشخص می‌کند چه چیزی داریم، چه مراحلی لازم است و خروجی نهایی باید چه شکلی باشد.

// اسکلت یک پرامپت ساخت خوب CONTEXT ‑ چه توکن/کلیدهایی داریم (در .env، نه در متن) ‑ کدام سرویس‌ها (تلگرام، AvalAI، ...) PIPELINE 1. search 2. structure 3. dedupe 4. select 5. image 6. publish ‑ هر قدم با ورودی/خروجی مشخص PROJECT STRUCTURE ‑ ساختار فولدرها و فایل‌ها DELIVERABLE ‑ اجرا شود، تست شود، لاگ واضح بدهد
1

اعتبارها را در متن ننویسید

فقط بگویید در .env هستند؛ کلاینت مقدارشان را می‌پرسد

2

مراحل را عددگذاری کنید

هرچه پرامپت دقیق‌تر مرحله‌بندی شود، خروجی قابل‌پیش‌بینی‌تر است

3

ساختار پروژه را بخواهید

یک ریپو تمیز و ماژولار، برای این‌که بعداً بتوانید هر تکه را جدا توضیح دهید

4

معیار پذیرش را مشخص کنید

«اجرا کن تا واقعاً کار کند»، نه فقط «کد را بنویس»

راه‌اندازی

چیزهایی که در تلگرام لازم داریم

قبل از اجرای پایپ‌لاین، این چند قدم باید در تلگرام انجام شده باشد.

1

ساخت بات با @BotFather

دستور /newbot را می‌زنید و یک توکن می‌گیرید؛ این توکن هویت بات شماست

2

ساخت یک کانال

عمومی یا خصوصی؛ کانالی که پیام‌ها در آن منتشر می‌شوند

3

افزودن بات به‌عنوان ادمین کانال

بدون دسترسی ادمین، بات اجازه‌ی ارسال پیام در کانال را ندارد

4

گرفتن شناسه کانال

اگر کانال یوزرنیم عمومی دارد، همان @channel_username کافی است؛ در غیر این صورت شناسه‌ی عددی از طریق getUpdates گرفته می‌شود

5

ذخیره در .env

توکن بات و شناسه‌ی کانال، هیچ‌وقت داخل کد

اجرا، گام‌به‌گام

پرامپت‌های گام‌به‌گام برای Claude Code

همان پایپ‌لاین، این‌بار به‌صورت پرامپت‌های جدا که یکی‌یکی به Claude Code می‌دهیم؛ هر پرامپت روی خروجی پرامپت قبلی ساخته می‌شود. جای هر اعتبار/کلید را با یک placeholder پر می‌کنیم و مقدار واقعی‌اش را بعداً خودمان در .env می‌گذاریم.

بخش ۱ · اسکلت پروژه تا حافظه (قدم ۱ تا ۵)
1

اسکلت پروژه + تست اتصال تلگرام

scaffold

فقط یک پیام ثابت به کانال بفرستد؛ همین برای اطمینان از درست‌بودن توکن و دسترسی ادمین کافی است.

Create a new Python project called tips-agent. Set up .env.example with these placeholders only, never real values: TELEGRAM_BOT_TOKEN= TELEGRAM_CHANNEL= # e.g. @agentic_tips_test1 I will fill in the real values myself later. Write a minimal script that sends one static "hello" message to TELEGRAM_CHANNEL using the Telegram Bot API. Run it and confirm a real message appears in the channel.
2

اولین فراخوانی مدل (DeepSeek از طریق AvalAI)

llm call

پیش از هر چیز، لیست مدل‌ها را از AvalAI می‌گیریم تا نام دقیق مدل DeepSeek را حدس نزنیم.

Add AVALAI_API_KEY= to .env.example as a placeholder only. Connect to AvalAI's OpenAI-compatible endpoint (base_url=https://api.avalai.ir/v1) using a DeepSeek chat model. First call GET /models on that base_url and print the result so we see the exact DeepSeek model id AvalAI exposes, then use that id. Write a short system prompt making the model act as an "AI agents educator" and generate ONE short tip about agentic AI in English. Print it to confirm the call works end to end.
3

خروجی دوزبانه: انگلیسی + فارسی طبیعی

bilingual

فارسی باید ترجمه‌ی طبیعی باشد، نه تحت‌اللفظی؛ همان‌طور که یک مدرس فارسی‌زبان واقعاً می‌گوید.

Change the tip schema to Pydantic with these fields: title_en, body_en, title_fa, body_fa, difficulty, source_url title_fa/body_fa must be a natural, fluent Persian version of the same tip -- not a literal word-for-word translation, written the way a Persian tech educator would actually phrase it. Use LangChain's structured output (with_structured_output) so the model returns this schema directly, not raw text.
4

جستجوی واقعی + چند کاندید

search tool

اینجاست که ابزار جستجو به‌صورت tool call وارد می‌شود، نه فقط دانش از‌قبل مدل.

Add a LangChain tool-calling step: before writing the tip, the agent must search the web (DuckDuckGoSearchRun, no key needed) for a recent, real insight about agentic AI, and produce 3-5 candidate tips (each with the bilingual schema above) grounded in what it found.
5

حافظه: لاگ JSON محلی + Vector DB

memory

اینجا جلوی تکرار نکته‌های قبلی را با شباهت معنایی می‌گیریم، نه فقط تطبیق متن.

Add a local JSON file (./data/posted_tips.json) logging every tip ever posted, in both languages, plus source_url and date. Add a local Chroma vector DB (./data/chroma_db) that embeds title_en + body_en of every posted tip. Before finalizing today's candidates, embed each one and drop any whose similarity to a past tip is above 0.85 cosine similarity.
اجرا، گام‌به‌گام

ادامه: انتخاب، تصویر و انتشار

قدم تصویر مهم‌ترین جای این بخش است؛ همان‌جایی که سبک بصری بات را برای همیشه تعیین می‌کنیم.

بخش ۲ · انتخاب بهترین کاندید تا انتشار نهایی (قدم ۶ تا ۹)
6

انتخاب بهترین کاندید

select

امتیاز مرتبط‌بودن اول، بعد تنوع سطح سختی نسبت به چند پست اخیر.

From the surviving candidates, pick the single best one: highest relevancy first, then prefer a difficulty level different from the last 2 posted tips (read that from posted_tips.json).
7

تولید تصویر با هویت بصری ثابت

image · style-critical

این پرامپت را عیناً نگه دارید؛ هدف این است که هر پست یک تصویر فضایی و آموزنده بگیرد، نه یک ربات کلیشه‌ای تکراری.

Generate the visual for the chosen tip using AvalAI's image endpoint (OpenAI-compatible image model). Build the image prompt from the tip's own content, always following this style, regardless of topic: - futuristic, sci-fi, editorial illustration - clean 2.5D isometric-leaning style, soft volumetric lighting, depth and layered planes -- NOT flat, NOT a generic mascot robot - the imagery must visually represent the SPECIFIC concept of the tip (e.g. glowing nodes/graph for "tool routing", a layered translucent memory core for "context window"), not a random bot - educational, single clear focal metaphor, no on-image text Save the image to ./data/images/.
8

انتشار: کپشن دوزبانه + نام کانال

publish

نام کانال همیشه سطر آخر کپشن است؛ از همان مقدار TELEGRAM_CHANNEL در .env خوانده می‌شود.

Send the image with sendPhoto to TELEGRAM_CHANNEL. Format the caption as: [title_en bold] [body_en] [title_fa bold] [body_fa] See you tomorrow for another AI agents tip! <channel handle, read from TELEGRAM_CHANNEL> Use Telegram HTML parse mode. The channel handle must always be the last line of the caption.
9

استحکام + زمان‌بندی روزانه

hardening

آخرین قدم، تبدیل یک اسکریپت آزمایشی به چیزی است که واقعاً هر روز بدون نظارت اجرا شود.

Add try/except with retries (tenacity) around each external call, clear step-by-step logging to stdout, and wire everything into one entrypoint run.py so the whole pipeline runs with a single command. Add a short README note on scheduling it daily (cron or APScheduler).
انتخاب مدل

Open Source، Closed Source و Wrapper

سه لایه‌ی متفاوت برای رسیدن به یک مدل زبانی، و هرکدام معامله‌ی خودش را دارد.

closed-source

مدل بسته

  • فقط از طریق API شرکت سازنده در دسترس است
  • وزن مدل و داده‌ی آموزشی منتشر نمی‌شود
  • معمولاً کیفیت بالا و نگه‌داری راحت
GPT
Claude
Gemini
open-source

مدل باز

  • وزن مدل قابل دانلود و میزبانی روی سرور خودتان
  • کنترل بیشتر روی هزینه و حریم خصوصی داده
  • نیاز به زیرساخت یا یک ارائه‌دهنده‌ی میزبانی
DeepSeek
Llama
Qwen
wrapper / gateway

دروازه‌ی یکپارچه

  • یک کلید API، دسترسی به چند مدل مختلف (باز یا بسته)
  • معمولاً سازگار با استاندارد API شرکت‌های بزرگ
  • مناسب برای تست سریع و پروژه‌های آموزشی
AvalAI
OpenRouter
انتخاب مدل، ادامه

هزینه در برابر هوش: انتخاب مدل روی نمودار

شاخص هوش هر مدل در برابر هزینه‌ی هر تسک؛ انتخاب مدل یک تصمیم مهندسی است، نه فقط دنبال «بهترین» رفتن.

نمودار شاخص هوش در برابر هزینه هر تسک برای مدل‌های مختلف، منبع Artificial Analysis
1

ناحیه‌ی سبز سمت راست بالا، بهترین نسبت هوش به هزینه را نشان می‌دهد؛ نقطه‌ی شروع خوب برای اکثر پروژه‌ها

2

مدل‌های بسته و بزرگ‌تر معمولاً هوش بالاتری می‌دهند، اما با هزینه‌ی چند برابر

3

برای یک ایجنت ساده مثل امروز، یک مدل ارزان‌تر روی خط Pareto معمولاً کافی و منطقی‌تر است

ابزارهای ساخت

LangChain، LangGraph و Pydantic

این‌ها مدل زبانی نیستند؛ لایه‌هایی هستند که تکه‌های مختلف (مدل، ابزار، حافظه، خروجی) را به‌هم وصل می‌کنند.

framework

LangChain

مثل یک جعبه‌ابزار پایتون است: به‌جای اینکه برای GPT، Claude یا مدل‌های دیگر جداگانه کد API بنویسید، مدل، پرامپت و ابزار را مثل لگو به هم وصل می‌کنید و همان الگو را دوباره استفاده می‌کنید.

# ساده‌ترین فراخوانی from langchain_openai import ChatOpenAI llm = ChatOpenAI(model="gpt-4o-mini") res = llm.invoke("سلام، خودت را معرفی کن") print(res.content)
orchestration

LangGraph

وقتی کار چند مرحله است (جستجو، تصمیم، نوشتن)، مسیر را مثل نقشه می‌چیند: هر خانه یک کار مشخص است و فلش می‌گوید بعد کجا برویم. مناسب ایجنت‌هایی که نباید همه‌چیز را در یک حلقه‌ی مبهم انجام دهند.

# ساده‌ترین گراف دو‌گره‌ای from langgraph.graph import StateGraph, END g = StateGraph(dict) g.add_node("agent", lambda s: {"reply": "done"}) g.set_entry_point("agent") g.add_edge("agent", END) app = g.compile() print(app.invoke({}))
data validation

Pydantic

مدل معمولاً متن آزاد می‌دهد. Pydantic از قبل می‌گوید خروجی باید چه فیلدهایی داشته باشد (مثلاً title و difficulty). اگر چیزی کم یا غلط باشد همان‌جا خطا می‌گیرید؛ مثل یک فرم با فیلدهای اجباری.

# ساده‌ترین اسکیمای داده from pydantic import BaseModel class Tip(BaseModel): title: str difficulty: str t = Tip(title="RAG یعنی چه", difficulty="beginner") print(t.model_dump_json())
واژه‌نامه

اصطلاحات و مفاهیم کلیدی

حالا که مسیر ساخت را دیده‌اید، این کلمات را یک‌جا مرور می‌کنیم تا در کار بعدی گم نشوند.

API
دروازه‌ای استاندارد برای صحبت با یک سرویس نرم‌افزاری دیگر
MCP
پروتکل استاندارد برای وصل‌کردن ابزارها و داده به هر ایجنتی، بدون کدنویسی جدا برای هرکدام
Tool / Function Calling
توانایی مدل برای فراخوانی یک اکشن مشخص به‌جای فقط نوشتن متن
Memory
اطلاعاتی که ایجنت بین چند اجرا یا در طول یک مکالمه نگه می‌دارد
Database (DB)
محل ذخیره‌ی داده‌های ساختاریافته؛ در ایجنت‌ها معمولاً حافظه‌ی بلندمدت
Context Window
حداکثر مقدار متنی که مدل هم‌زمان می‌بیند و به آن توجه می‌کند
System Prompt
دستورالعمل ثابتی که رفتار، نقش و محدودیت‌های ایجنت را تعیین می‌کند
RAG
پاسخ‌دادن بر اساس اطلاعات بازیابی‌شده‌ی واقعی، نه فقط چیزی که مدل از قبل می‌داند
Vector DB
پایگاه داده‌ای که «معنا»ی متن را ذخیره می‌کند و بر اساس شباهت معنایی جستجو می‌کند
Embedding
تبدیل یک متن به یک بردار عددی که معنای آن را نشان می‌دهد
Open vs Closed LLM
مدل قابل دانلود و میزبانی شخصی در برابر مدلی که فقط از طریق API یک شرکت در دسترس است
LangChain
جعبه‌ابزار پایتون: مدل، پرامپت و ابزار را مثل لگو به هم وصل می‌کنید، بدون کد جدا برای هر شرکت
LangGraph
وقتی کار چند مرحله است، مسیر را مثل نقشه می‌چیند؛ هر خانه یک کار است و فلش می‌گوید بعد کجا برویم
Pydantic
خروجی آزاد مدل را به فیلدهای مشخص (مثل title و difficulty) مقید می‌کند؛ اگر چیزی کم یا غلط باشد همان‌جا خطا می‌گیرید
جمع‌بندی

چند نکته‌ی دیگر و قدم بعدی

چیزهایی که در پیاده‌سازی واقعی زود به سراغتان می‌آیند.

before production

نکاتی که فراموش نشود

  • هزینه و محدودیت تعداد درخواست (rate limit) هر API را از روز اول اندازه بگیرید.
  • تصمیم‌های ایجنت را لاگ کنید تا بفهمید چرا یک ابزار را انتخاب کرده است.
  • مرز حریم خصوصی را مشخص کنید: چه داده‌ای ذخیره می‌شود و کجا می‌رود.
  • برای خطا و تکرار تلاش (retry) برنامه داشته باشید؛ ابزارهای خارجی قطع می‌شوند.
  • جایی برای دخالت انسان بگذارید؛ همه‌چیز را بدون نظارت به تولید نفرستید.
جلسه بعد · webinar 2

از پیام مشتری تا پاسخ هوشمند؛ ساخت یک تیم AI Agent

وارد دنیای سیستم‌های چندعاملی می‌شویم و در یک Coding Session زنده، یک سیستم پشتیبانی مشتری مبتنی بر چند Agent می‌سازیم؛ می‌بینیم چطور چند عامل هوشمند با نقش‌های مختلف کنار هم یک فرآیند واقعی را مدیریت می‌کنند.

پشتیبانی هوشمند مشتریان خودکارسازی فرآیندهای کسب‌وکار دستیارهای تخصصی سازمانی تحلیل اطلاعات و تصمیم‌گیری هوشمند
ثبت‌نام در جلسه بعد
برای رفتن جلوتر

اگر این جلسه برایتان مفید بود

بوتکمپ کامل «ایجنت‌های هوش مصنوعی» همین مسیر را قدم‌به‌قدم و عمیق‌تر جلو می‌برد؛ جزئیات ثبت‌نام و هدایا در تصویر زیر.

هدایای ثبت‌نام بوتکمپ ایجنت‌های هوش مصنوعی کافه‌تدریس، کد تخفیف و راه ارتباطی در تلگرام
تیم بوتکمپ ایجنت‌های هوش مصنوعی: رضا شکرزاد و دستیاران دوره
01 / 16