Агентҳои зеҳни сунъӣ

Китоб дар бораи он, ки агентҳои зеҳни сунъӣ чӣ гуна кор мекунанд, чӣ гуна онҳоро бояд сохт ва чӣ гуна бехатар ва боэътимод ба кор андохт: давраи «мулоҳиза — амал — мушоҳида», абзорҳо, меъмориҳо, хотира, арзёбӣ ва иҷрои бехатар.
Агенти Зеҳнӣ · 20 октябри 2026 · 17 саҳифа
Боби 5. Аввалин агент
Боби 5. Аввалин агент
Бобҳои 1–5 ба чаҳорчӯбаи муайян вобаста нестанд. Мо мехоҳем ба мафҳумҳои агентҳои зеҳни сунъӣ диққат диҳем ва дар ҷузъиёти як чаҳорчӯбаи махсус дармонда нашавем.
Ҳамчунин мехоҳем, ки шумо мафҳумҳои омӯхтаро дар лоиҳаҳои худ бо ҳар чаҳорчӯбаи дилхоҳ истифода баред.
Аз ҳамин сабаб дар ин боб агенти содаи омӯзиширо худамон месозем ва ба LLM тавассути интернет — бо API-и Hugging Face — муроҷиат мекунем.
Эҳтимол ин намунаҳоро дар муҳити истеҳсолӣ истифода намекунед, аммо онҳо барои фаҳмидани кори агентҳо оғози хубанд.
Дар қисми дуюми ҳамин боб бо smolagents агенти сода месозем. Аз боби 6 сар карда бо китобхонаи LangGraph кор мекунем.
Барои сода нигоҳ доштани мисол, аз функсияҳои одии Python истифода мекунем. Модулҳои дарунсохт, монанди datetime ва os, имкон медиҳанд мисолҳоро дар муҳитҳои гуногун санҷед.
Дар меъмории агентҳои зеҳни сунъӣ (ба монанди сикли ReAct: Reason + Act + Observe), сегонаи Thought (Мулоҳиза) $\rightarrow$ Action (Амал) $\rightarrow$ Observation (Мушоҳида) асоси кории агентро ташкил медиҳад.
Барои фаҳмидани он ки чаро Observation ҷудошнашаванда ва зарур аст, аввал сохтори ин сиклро бинед:
- Thought (Фикр): Агент фикр мекунад ва нақша мекашад: "Ба ман лозим аст, ки нархи долларро тафтиш кунам".
- Action (Амал): Агент абзорро даъват мекунад:
get_exchange_rate(currency="USD"). - Observation (Мушоҳида): Натиҷае, ки абзор ба охир мерасонад ва ба агент бармегардонад:
"1 USD = 10.95 TJS".
🎯 Чаро Observation (Мушоҳида) ба Агент лозим аст?
Агар Observation набошад, агент мисли одами чашмбастае мешавад, ки тугмаро мебарораду аммо асло намебинад, ки чӣ ҳодиса рӯх дод!
Инак 4 сабаби асосии муҳиммияти он:
1. Фидбек (Feedback / Алоқаи баргаштан)
Моделҳои зеҳни сунъӣ (LLM) дар дохили худ хотира ё воқеияти зинда надоранд. Онҳо намедонанд, ки функсия ё абзор чӣ натиҷа дод, то даме ки он натиҷа ҳамчун матн дар Observation ба онҳо фиристода нашавад.
2. Гузоштани қадами навбатӣ
Агент танҳо пас аз дидани Observation метавонад фикри навбатии худро (Thought-и нав) шакл диҳад.
Мисол:
Action: Ҷустуҷӯи чиптаи ҳавопаймо.
Observation: "Чиптаҳо барои 10-уми октябр тамом шудаанд".
Thought-и нав: "Азбаски чипта нест, ман бояд рӯзи 11-умро тафтиш кунам". (Бе Observation, агент намедонад, ки чипта ҳаст ё не!)
3. Ислоҳи хатогиҳо (Error Handling)
Агар коди навиштаи агент ё даъвати абзор хато (error) диҳад, он хатогӣ дар Observation чоп мешавад (масалан: 404 Not Found ё ZeroDivisionError). Агент ин хатогиро мушоҳида карда, дар қадами баъдӣ онро ислоҳ мекунад.
4. Муайян кардани соати тамомшавии кор
Агент мушоҳида мекунад, ки оё маълумоти гирифтааш барои ҷавоби ниҳоӣ кифоя аст ё на. Агар кифоя бошад, сиклро мепӯшад ва ҷавоби ниҳоиро ба корбар пешниҳод мекунад.
💡 Ҷамъбаст
- Action — ин корест, ки агент ба ҷаҳон (барнома) мекунад.
- Observation — ин посухест, ки ҷаҳон (барнома) ба агент бармегардонад.
Бе Observation, сикли фаъолияти чандқадамии агент (★ ★ ★) шикаста мешавад ва идомаи барнома имконнопазир мегардад.
Дар ин боб меомӯзем
- Чӣ гуна ба LLM тавассути интернет муроҷиат кунем.
- Агенти содаро аз сифр бо як промпти системавӣ ва як абзор созем.
- Чаро тавлидро пеш аз
Observation:қатъ кардан лозим аст ва чӣ гуна қадамҳоро дар ҳалқаиwhileҷамъ кунем. - Аввалин агентро бо китобхонаи smolagents созем ва дар Hugging Face Space ба кор андозем.
Китобхонаи содаи омӯзишии агент
Даъвати модел тавассути интернет — Serverless API
Дар Hugging Face имконияти Serverless API ҳаст: шумо моделеро, ки дар серверҳои Hugging Face кор мекунад, тавассути интернет даъват мекунед. Моделро боргирӣ ё насб кардан лозим нест ва сервери худатонро идора намекунед — калимаи «serverless» («бе сервер») маҳз ҳаминро мефаҳмонад.
Барои даъват танҳо токени API лозим аст: калиди махфие, ки Hugging Face аз рӯи он шуморо мешиносад — монанди пароле, ки барои барномаҳо дода мешавад. Токенро ба касе нишон надиҳед ва дар коди ошкоро нанависед.
import os
from huggingface_hub import InferenceClient
# Аз https://hf.co/settings/tokens токен гиред.
# Барои ин мисол токени навъи «read» кифоя аст.
#
# Агар Google Colab истифода баред, онро дар бахши
# «Secrets» — нишонаи калид дар панели чап —
# бо номи HF_TOKEN илова кунед.
try:
from google.colab import userdata
HF_TOKEN = userdata.get("HF_TOKEN")
except ImportError:
HF_TOKEN = os.environ.get("HF_TOKEN")
client = InferenceClient(
model="moonshotai/Kimi-K2.5",
token=HF_TOKEN
)
Аз усули чат истифода мебарем, зеро он роҳи қулай ва боэътимоди татбиқи қолабҳои чат мебошад:
output = client.chat.completions.create(
messages=[
{
"role": "user",
"content": "Пойтахти Фаронса"
},
],
stream=False, # ҷавобро якбора мегирем, на қисм-қисм
max_tokens=1024, # ҳадди дарозии ҷавоб (бо токенҳо)
# Параметри иловагии хоси ҳамин модел: реҷаи «фикр кардани»
# дохилиро хомӯш мекунад, то модел фавран ҷавоб диҳад.
extra_body={
"thinking": {
"type": "disabled"
}
},
)
print(output.choices[0].message.content)
Баромади намунавӣ:
Париж.
Мо усули чатро тавсия медиҳем, зеро гузариш байни моделҳоро осон мекунад.
Агенти содаи омӯзишӣ
Дар бобҳои пешин дидем, ки яке аз вазифаҳои асосии китобхонаи агентӣ ба контексти модел ворид кардани иттилооти зарурӣ мебошад.
Промпти системавии зерин аз намунаҳои пешина каме мураккабтар аст. Он аллакай инҳоро дар бар мегирад:
- Маълумот дар бораи абзорҳо.
- Дастурҳои давраи «Мулоҳиза → Амал → Мушоҳида».
Дар матни промпт аломатҳои Question:, Thought:, Action:, Observation: ва Final Answer:-ро нигоҳ медорем, зеро код ва қоидаҳои таҳлили баромад ба онҳо такя мекунанд.
# Ин промпти системавӣ аллакай тавсифи функсияро дорад.
# Фарз мекунем, ки тавсифи матнии абзорҳо ворид шудааст.
SYSTEM_PROMPT = """Ба саволҳои зерин то ҳадди имкон хуб ҷавоб деҳ.
Ту ба абзорҳои зерин дастрасӣ дорӣ:
get_weather: Обу ҳавои ҷории ҷойи муайянро мегирад.
Барои истифодаи абзор объекти JSON пешниҳод кун.
Ин JSON бояд калиди `action` дошта бошад, ки номи
абзори истифодашавандаро нишон медиҳад, ва калиди
`action_input`, ки вуруди абзорро дар бар мегирад.
Дар майдони "action" танҳо чунин қимат иҷозат дода мешавад:
get_weather: Обу ҳавои ҷории ҷойи муайянро мегирад.
Аргументҳо: {"location": {"type": "string"}}
Намунаи истифода:
{
"action": "get_weather",
"action_input": {"location": "New York"}
}
ҲАМЕША аз қолаби зерин истифода бар:
Question: саволи вурудие, ки бояд ба он ҷавоб диҳӣ
Thought: дар бораи як амали навбатӣ мулоҳиза кун.
Дар ҳар қадам танҳо як амал пешниҳод намо.
Action:
$JSON_BLOB — дар дохили блоки коди Markdown
Observation: натиҷаи амал. Ин мушоҳида ягона,
пурра ва манбаи маълумоти воқеии ҳамин қадам аст.
Ин давраи Thought/Action/Observation метавонад N бор
такрор шавад. Ҳангоми зарурат чанд қадам анҷом деҳ.
$JSON_BLOB бояд дар қолаби Markdown бошад ва дар ҳар
қадам танҳо ЯК амалро дар бар гирад.
Баромадро ҳамеша бо қолаби зерин анҷом деҳ:
Thought: Акнун ҷавоби ниҳоиро медонам.
Final Answer: ҷавоби ниҳоӣ ба саволи аслии корбар
Акнун оғоз кун! Ҳангоми пешниҳоди ҷавоби ниҳоӣ
ҲАМЕША аломатҳои дақиқи `Final Answer:`-ро истифода бар.
"""
Баъд аз паёми системавӣ дастури корбарро илова мекунем. Усули чат қолаббандии ин паёмҳоро анҷом медиҳад:
messages = [
{
"role": "system",
"content": SYSTEM_PROMPT
},
{
"role": "user",
"content": "Обу ҳавои Лондон чӣ гуна аст?"
},
]
print(messages)
Бо қолаби Llama паёмҳо бо аломатҳои махсус чунин ҷойгир мешаванд:
system
[Матни пурраи SYSTEM_PROMPT аз боло]
user
Обу ҳавои Лондон чӣ гуна аст?
assistant
Қисми [Матни пурраи SYSTEM_PROMPT аз боло] дар ин намоиши кӯтоҳ ҷойи матни такрории промптро гирифтааст. Токенҳои воқеии қолаб ба модели интихобшуда вобастаанд.
Акнун усули чатро даъват мекунем:
output = client.chat.completions.create(
messages=messages,
stream=False,
max_tokens=200,
extra_body={
"thinking": {
"type": "disabled"
}
},
)
print(output.choices[0].message.content)
Баромади намунавӣ:
Thought: Барои ҷавоб додан бояд обу ҳавои ҷории Лондонро гирам.
Action:
```
{
"action": "get_weather",
"action_input": {"location": "London"}
}
```
Observation: Ҳоло дар Лондон ҳаво қисман абрнок аст ва ҳарорат 12°C мебошад.
Thought: Акнун ҷавоби ниҳоиро медонам.
Final Answer: Ҳоло дар Лондон ҳаво қисман абрнок аст ва ҳарорат 12°C мебошад.
Оё мушкилро мебинед?
Дар ин марҳала модел мушоҳидаи сохта тавлид кардааст.
Маълумоти дар Observation: овардашуда натиҷаи иҷрои воқеии функсия ё абзор нест. Модел онро худаш навиштааст.
Барои пешгирии ин мушкил, тавлидро пеш аз Observation: қатъ мекунем. Ин имкон медиҳад функсияи get_weather-ро воқеан иҷро карда, натиҷаи онро ҳамчун мушоҳида ворид намоем.
# Ҷавоби пешина маълумоти сохта дошт.
# Бояд тавлидро қатъ кунем ва функсияро воқеан иҷро намоем.
output = client.chat.completions.create(
messages=messages,
max_tokens=150,
stop=["Observation:"], # модел ҳамин ки «Observation:» нависад, тавлид қатъ мешавад
extra_body={
"thinking": {
"type": "disabled"
}
},
)
print(output.choices[0].message.content)
Баромади намунавӣ:
Thought: Барои ҷавоб додан бояд обу ҳавои ҷории Лондонро гирам.
Action:
```
{
"action": "get_weather",
"action_input": {"location": "London"}
}
```
Акнун беҳтар шуд: модел амалро пешниҳод кард ва натиҷаи абзорро аз худ насохт.
Сохтани функсияи намунавии обу ҳаво
Ҳоло функсияи содаи get_weather месозем. Дар системаи воқеӣ ин функсия метавонад API-ро даъват кунад.
# Функсияи омӯзишӣ: ба API пайваст намешавад.
def get_weather(location):
return (
f"Обу ҳавои {location} офтобӣ "
"ва ҳарорат паст аст.\n"
)
get_weather("London")
Баромад:
Обу ҳавои London офтобӣ ва ҳарорат паст аст.
Ин маълумоти воқеии обу ҳаво нест: функсия барои нишон додани раванди кори агент ҷавоби пешакӣ муайяншударо бармегардонад.
Илова кардани мушоҳида ва идома додани тавлид
Акнун инҳоро ба гуфтугӯ ворид мекунем:
- Промпти системавӣ.
- Саволи корбар.
- Баромади модел то нуқтаи иҷрои функсия.
- Натиҷаи функсия ҳамчун
Observation.
Сипас тавлидро идома медиҳем:
messages = [
{
"role": "system",
"content": SYSTEM_PROMPT
},
{
"role": "user",
"content": "Обу ҳавои Лондон чӣ гуна аст?"
},
{
"role": "assistant",
"content": (
output.choices[0].message.content
+ "Observation:\n"
+ get_weather("London")
)
},
]
output = client.chat.completions.create(
messages=messages,
stream=False,
max_tokens=200,
extra_body={
"thinking": {
"type": "disabled"
}
},
)
print(output.choices[0].message.content)
Промпти нав, бо ҳамон қолаби намунавӣ, чунин сохтор дорад:
system
[Матни пурраи SYSTEM_PROMPT аз боло]
user
Обу ҳавои Лондон чӣ гуна аст?
assistant
Thought: Барои ҷавоб додан бояд обу ҳавои ҷории Лондонро гирам.
Action:
```json
{
"action": "get_weather",
"action_input": {"location": "London"}
}
```
Observation: Обу ҳавои London офтобӣ ва ҳарорат паст аст.
Ҷавоби ҳосилшуда:
Final Answer: Обу ҳавои Лондон офтобӣ ва ҳарорат паст аст.
Дар ин мисол раванди асосӣ чунин аст: модел амалро пешниҳод мекунад → тавлид қатъ мешавад → код абзорро иҷро мекунад → натиҷа ба контекст илова мешавад → модел ҷавобро месозад.
Ҳамаи қадамҳо дар як ҳалқа
Дар боби 4 гуфтем, ки агент ба ҳалқаи while монанд аст. Қадамҳои болоро мо дастӣ, як ба як иҷро кардем. Акнун онҳоро дар як ҳалқа ҷамъ мекунем: модел амал менависад, мо абзорро иҷро карда, мушоҳидаро илова мекунем ва ин то пайдо шудани Final Answer: такрор мешавад.
import json
tools = {"get_weather": get_weather} # номи абзор → функсия
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": "Обу ҳавои Лондон чӣ гуна аст?"},
]
step = 0
while step < 5: # ҳадди қадамҳо, то агент беохир давр назанад
step += 1
output = client.chat.completions.create(
messages=messages,
max_tokens=200,
stop=["Observation:"], # пеш аз мушоҳида қатъ мекунем
extra_body={"thinking": {"type": "disabled"}},
)
reply = output.choices[0].message.content
if "Final Answer:" in reply: # ҷавоби ниҳоӣ омад — давра тамом
print(reply)
break
# Мулоҳиза ва амал: JSON-и байни ``` ва ```-ро мехонем
action = json.loads(reply.split("```")[1].removeprefix("json"))
# Амалро худамон иҷро мекунем ва мушоҳидаро ба гуфтугӯ илова мекунем
observation = tools[action["action"]](**action["action_input"])
messages.append({
"role": "assistant",
"content": reply + "Observation:\n" + observation,
})
Ин ҳалқа ҳамон қадамҳои дастии болоро такрор мекунад: даъвати модел бо stop=["Observation:"], иҷрои воқеии get_weather ва илова кардани натиҷа ҳамчун Observation. Коди мо қасдан сода аст: агар модел JSON-ро дар шакли дигар нависад, json.loads хато медиҳад. Китобхонаҳои агентӣ, монанди smolagents, ин ҳолатҳоро бо эҳтиёт коркард мекунанд.
Биёед аввалин агенти худро бо smolagents созем
Дар бахши пешин омӯхтем, ки чӣ гуна бо коди Python агентро аз сифр сохтан мумкин аст. Ҳамчунин дидем, ки ин раванд то чӣ андоза заҳматталаб мебошад. Хушбахтона, китобхонаҳои агентӣ қисми зиёди кори мураккабро барои мо анҷом медиҳанд.
Дар ин бахш аввалин агенти худро месозед, ки метавонад амалҳои гуногунро иҷро кунад: тасвир созад, дар веб ҷустуҷӯ намояд, вақти минтақаҳои гуногунро муайян кунад ва ғайра.
Ҳамчунин агентро дар Hugging Face Space нашр мекунед, то онро бо дӯстон ва ҳамкоронатон мубодила намоед.
Биёед оғоз кунем!
smolagents чист?
Барои сохтани агент аз smolagents истифода мебарем. Ин китобхона чаҳорчӯбаеро пешниҳод мекунад, ки таҳияи агентҳоро осон менамояд.
Китобхона сабук ва сода тарҳрезӣ шудааст. Он қисми зиёди мураккабии сохтани агентро пинҳон мекунад, то шумо ба тарҳрезии рафтори агент диққат диҳед.
Дар ин китоб smolagents танҳо дар ҳамин боб истифода мешавад; аз боби 6 сар карда бо LangGraph кор мекунем. Барои омӯзиши амиқтари smolagents ҳуҷҷатҳои расмии онро бинед: https://huggingface.co/docs/smolagents
smolagents ба CodeAgent диққат медиҳад: навъи агенте, ки амалҳоро тавассути блокҳои код ифода мекунад ва баъди иҷрои код натиҷаҳоро мушоҳида менамояд.
Масалан, ба агент абзори тавлиди тасвир медиҳем ва хоҳиш мекунем, ки тасвири гурба созад.
Агенти smolagents ҳамон рафтори агенти махсуси пештар сохтаи моро дорад: мулоҳиза мекунад, амал менамояд ва натиҷаро мушоҳида мекунад, то ба ҷавоби ниҳоӣ бирасад.
Агентро месозем
Аввал аз ин Space нусха созед:
Қолаби аввалин агент — First_agent_template
Барои ин қолаб аз Aymeric ташаккур! 🙌
Нусхабардории Space маънои сохтани нусхаи он дар ҳисоби шахсии шумо дар Hugging Face-ро дорад.
Илова кардани токени Hugging Face
Пас аз нусхабардорӣ токени API-и Hugging Face-ро илова кунед, то агент ба API-и модел дастрасӣ дошта бошад:
- Агар токен надошта бошед, аз саҳифаи токенҳо токене бо иҷозати иҷрои модел — inference — гиред.
- Space-и нусхабардоришудаатонро кушоед ва ба бахши Settings гузаред.
- Бахши Variables and Secrets-ро пайдо карда, New Secret-ро пахш кунед.
- Сирри навро бо номи
HF_TOKENсозед ва токенро ҳамчун қимати он гузоред. - Барои нигоҳ доштани токен Save-ро пахш кунед.
Дар ин мисол танҳо файли ҳоло нопурраи app.py-ро тағйир медиҳед.
Барои ёфтани он, Space-и худро кушоед, ба бахши Files гузаред ва аз рӯйхати файлҳо app.py-ро интихоб кунед.
Биёед кодро якҷоя баррасӣ кунем.
Ворид кардани китобхонаҳо
Файл бо ворид кардани китобхонаҳои сода, вале зарурӣ оғоз мешавад:
from smolagents import (
CodeAgent,
DuckDuckGoSearchTool,
InferenceClientModel,
load_tool,
tool,
)
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool # файли қолаби Space
from Gradio_UI import GradioUI # интерфейси веб аз қолаби Space
FinalAnswerTool ва GradioUI аз файлҳои худи қолаби Space (tools/final_answer.py ва Gradio_UI.py) ворид мешаванд; онҳоро навиштан лозим нест.
Тавре пештар гуфтем, мустақиман аз синфи CodeAgent-и smolagents истифода мебарем.
Абзорҳо
Акнун абзорҳоро мебинем. Агар шарҳи онҳоро аз нав хондан хоҳед, ба боби 3 баргардед.
@tool
def my_custom_tool(arg1: str, arg2: int) -> str:
# Муайян кардани навъи баромад муҳим аст.
# Қолаби тавсифи абзор ва аргументҳоро нигоҳ доред,
# аммо вазифаи абзорро метавонед тағйир диҳед.
"""Абзоре, ки ҳоло кори муфиде анҷом намедиҳад.
Args:
arg1: Аргументи аввал.
arg2: Аргументи дуюм.
"""
return "Шумо чӣ имконияти ҷолибе месозед?"
@tool
def get_current_time_in_timezone(timezone: str) -> str:
"""Вақти ҷории маҳаллиро дар минтақаи муайян мегирад.
Args:
timezone: Номи дурусти минтақаи вақт,
масалан 'America/New_York'.
"""
try:
# Сохтани объекти минтақаи вақт
tz = pytz.timezone(timezone)
# Гирифтани вақти ҷорӣ дар ҳамин минтақа
local_time = datetime.datetime.now(tz).strftime(
"%Y-%m-%d %H:%M:%S"
)
return (
f"Вақти ҷории маҳаллӣ дар {timezone}: "
f"{local_time}"
)
except Exception as e:
return (
f"Хатои гирифтани вақт барои минтақаи "
f"'{timezone}': {str(e)}"
)
Дар ин бахш шуморо ба сохтани абзорҳои худ ташвиқ мекунем. Ду намуна дода шудааст:
- Абзори намунавӣ, ки ҳоло кори муфиде намекунад. Метавонед онро тағйир диҳед.
- Абзори коркунанда, ки вақти ҷории минтақаи муайяни ҷаҳонро мегирад.
Барои муайян кардани абзор муҳим аст:
-
Навъҳои вуруд ва баромадро нишон диҳед, масалан:
def get_current_time_in_timezone(timezone: str) -> str: -
Тавсифи дурусти
docstringнависед. smolagents интизор аст, ки ҳамаи аргументҳо дар бахшиArgs:тавсифи матнӣ дошта бошанд. -
Декоратори
@tool-ро фаромӯш накунед. Бе он smolagents функсияро ҳамчун абзор намешиносад:
@tool
def get_current_time_in_timezone(timezone: str) -> str:
...
Агент
Дар ин намуна Qwen/Qwen2.5-Coder-32B-Instruct ҳамчун модели забонӣ истифода мешавад. Ба он тавассути API дастрасӣ мегирем.
final_answer = FinalAnswerTool()
model = InferenceClientModel(
max_tokens=2096,
temperature=0.5,
model_id="Qwen/Qwen2.5-Coder-32B-Instruct",
)
with open("prompts.yaml", "r") as stream:
prompt_templates = yaml.safe_load(stream)
# Сохтани CodeAgent
agent = CodeAgent(
model=model,
tools=[final_answer], # Абзорҳоро дар ин ҷо илова кунед.
max_steps=6,
verbosity_level=1,
prompt_templates=prompt_templates,
)
GradioUI(agent).launch()
Параметрҳои асосӣ:
temperature— дараҷаи «тасодуфӣ» будани ҷавоб: қимати паст (наздик ба 0) ҷавобҳои устувортар медиҳад, қимати баланд ҷавобҳои гуногунтар.max_tokens— ҳадди дарозии як ҷавоби модел.max_steps— ҳадди қадамҳои давраи «Мулоҳиза → Амал → Мушоҳида»; пас аз 6 қадам агент кор қатъ мекунад, ҳатто агар ҷавоб наёфта бошад.verbosity_level— чӣ қадар тафсилоти кори агент дар экран чоп шавад (0 — кам, рақами калонтар — бештар).
FinalAnswerTool-ро аз рӯйхати абзорҳои ин қолаб хориҷ накунед.
Синфи InferenceClientModel дар паси саҳна аз ҳамон InferenceClient истифода мебарад, ки дар бахши пешин дидем.
Мисолҳои муфассалтари чаҳорчӯбаҳо, аз ҷумла LangGraph, дар бобҳои 6–13 оварда шудаанд. Ҳоло ба илова кардани абзорҳо ба параметри tools диққат диҳед.
Масалан, метавонед:
- Аз
DuckDuckGoSearchTool, ки дар аввали файл ворид шудааст, истифода баред. - Абзори
image_generation_tool-ро, ки баъдтар аз Hub бор мешавад, баррасӣ кунед. - Абзорҳои махсуси худро созед.
Илова кардани абзорҳо ба агент қобилиятҳои нав медиҳад. Дар ин ҷо эҷодкор бошед!
Промпти системавӣ
Промпти системавии агент дар файли алоҳидаи prompts.yaml нигоҳ дошта мешавад.
Ин файл дастурҳои пешакӣ муайяншударо дар бар мегирад, ки рафтори агентро роҳнамоӣ мекунанд.
Нигоҳ доштани промптҳо дар YAML имкон медиҳад онҳоро осон тағйир диҳед ва барои агентҳо ё истифодаҳои гуногун такроран истифода баред.
Сохтори файлҳои Space-ро бинед, то ҷойгиршавӣ ва тартиби файли prompts.yaml-ро дар лоиҳа фаҳмед.
Коди пурраи app.py
Коди зер тарҷумаи намунаи пешниҳодшуда аст. Он ҳанӯз илова кардани абзорҳоро ба рӯйхати tools талаб мекунад.
from smolagents import (
CodeAgent,
DuckDuckGoSearchTool,
InferenceClientModel,
load_tool,
tool,
)
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI
# Намунаи абзоре, ки ҳоло кори муфиде намекунад.
# Онро мувофиқи ғояи худ тағйир диҳед.
@tool
def my_custom_tool(arg1: str, arg2: int) -> str:
"""Абзоре, ки ҳоло кори муфиде анҷом намедиҳад.
Args:
arg1: Аргументи аввал.
arg2: Аргументи дуюм.
"""
return "Шумо чӣ имконияти ҷолибе месозед?"
@tool
def get_current_time_in_timezone(timezone: str) -> str:
"""Вақти ҷории маҳаллиро дар минтақаи муайян мегирад.
Args:
timezone: Номи дурусти минтақаи вақт,
масалан 'America/New_York'.
"""
try:
# Сохтани объекти минтақаи вақт
tz = pytz.timezone(timezone)
# Гирифтани вақти ҷорӣ дар ҳамин минтақа
local_time = datetime.datetime.now(tz).strftime(
"%Y-%m-%d %H:%M:%S"
)
return (
f"Вақти ҷории маҳаллӣ дар {timezone}: "
f"{local_time}"
)
except Exception as e:
return (
f"Хатои гирифтани вақт барои минтақаи "
f"'{timezone}': {str(e)}"
)
final_answer = FinalAnswerTool()
model = InferenceClientModel(
max_tokens=2096,
temperature=0.5,
model_id="Qwen/Qwen2.5-Coder-32B-Instruct",
)
# Бор кардани абзор аз Hub (огоҳиро дар зери код бинед)
image_generation_tool = load_tool(
"agents-course/text-to-image",
trust_remote_code=True,
)
# Бор кардани қолабҳои промпт аз файли YAML
with open("prompts.yaml", "r") as stream:
prompt_templates = yaml.safe_load(stream)
agent = CodeAgent(
model=model,
# Абзорҳои худро дар ин ҷо илова кунед.
# final_answer-ро хориҷ накунед.
tools=[final_answer],
max_steps=6,
verbosity_level=1,
# Додани қолабҳои промпт ба CodeAgent
prompt_templates=prompt_templates,
)
GradioUI(agent).launch()
Огоҳӣ:
trust_remote_code=Trueмаънои онро дорад, ки коди абзор аз Hub боргирӣ шуда, дар компютер ё Space-и шумо иҷро мешавад. Инро танҳо барои манбаъҳое истифода баред, ки ба онҳо бовар доред ва кодашонро дидаед: коди бегона метавонад ҳар кореро иҷро кунад, ки барномаи шумо иҷозат дорад.
Ҳадафи шумо шинос шудан бо Space ва агент мебошад.
Дар қолаби ҳозира ғайр аз абзори ҷавоби ниҳоӣ, абзорҳои дигар ба агент дода нашудаанд. Аз ин рӯ абзорҳои омодаро илова кунед ё абзорҳои нави худро созед.
Масалан, рӯйхати tools-ро чунин пур кардан мумкин аст:
tools=[
final_answer,
DuckDuckGoSearchTool(),
get_current_time_in_timezone,
image_generation_tool,
]
Дар ин ҳолат агент ба ҷустуҷӯи веб, муайян кардани вақт ва тавлиди тасвир дастрасӣ пайдо мекунад.
Агентро санҷед
- Пас аз тағйир додани
app.pyонро нигоҳ доред (тугмаи Commit). Space худкор аз нав сохта мешавад; ин метавонад якчанд дақиқа вақт гирад. - Вақте Space омода шуд, саҳифаи асосии онро кушоед. Дар он интерфейси чат (Gradio) мебинед.
- Саволе нависед, ки ба абзорҳои шумо мувофиқ бошад. Масалан, агар
get_current_time_in_timezone-ро баtoolsилова карда бошед: «Ҳоло дар Токио соат чанд аст?»
Агент на танҳо ҷавоби ниҳоӣ, балки қадамҳои худро низ нишон медиҳад: мулоҳизаи модел, коди Python-е, ки навиштааст (масалан, даъвати абзори вақт бо номи минтақаи вақт), натиҷаи иҷрои ин код ва дар охир ҷавоби ниҳоӣ. Ин ҳамон давраи «Мулоҳиза → Амал → Мушоҳида» аст, ки дар боби 4 омӯхтем. Модел метавонад дар қадами аввал хато кунад ва дар қадами дигар онро ислоҳ намояд — ин муқаррарист. Агар Space кор накунад, сабтҳои (Logs) онро бинед: сабаб метавонад, масалан, токени илованашуда ё хатои навиштан дар app.py бошад.
Хулоса
Дар ин боб агентро ду бор сохтем. Аввал худамон: промпти системавӣ навиштем, тавлидро пеш аз Observation: қатъ кардем, абзорро воқеан иҷро карда, натиҷаро ба гуфтугӯ илова намудем ва ҳамаи ин қадамҳоро дар ҳалқаи while ҷамъ кардем. Баъд ҳамон корро бо smolagents кардем, ки ин давраро барои мо идора мекунад.
Табрик, шумо аввалин агенти худро сохтед! Онро метавонед бо дӯстон ва ҳамкоронатон мубодила намоед.
Чиро бояд дар ёд дошт
- Ба модел тавассути интернет муроҷиат кардан мумкин аст (Serverless API): моделро насб кардан лозим нест, танҳо токени API лозим аст.
- Агенти аз сифр сохташуда аз се чиз иборат аст: промпти системавӣ бо тавсифи абзорҳо ва қолаби Thought/Action/Observation, функсияи абзор ва ҳалқае, ки онҳоро пайваст мекунад.
- Тавлидро пеш аз
Observation:қатъ кардан лозим аст (stop=["Observation:"]); вагарна модел натиҷаи абзорро аз худ месозад. - Китобхонаҳое монанди smolagents ҳамин давраро барои мо идора мекунанд: мо танҳо модел, абзорҳо (бо
@tool) ва ҳадди қадамҳоро (max_steps) медиҳем. - Коди бегонаро (
trust_remote_code=True) танҳо аз манбаъҳои боэътимод иҷро кунед.

Барномасозӣ
Олами Афсонаҳо
Ахбор
Саломатӣ
Дунё