Аввалин агенти AI-и худро бо як занги асбоб созед

Аввалин агенти AI-и худро бо як занги асбоб созед


Агар шумо дохил карда шуда бошед дар ҷаҳони таҳияи нармафзор, AI ва моделҳои забони калон (LLM), шумо эҳтимол ҳамеша дар бораи агентҳои AI сӯҳбат мекунед ва истифода мебаред. Агар шумо хоҳед, ки аз истифодаи агентҳо берун равед ва ба эҷоди худ шурӯъ кунед, ин мақола барои шумост.

Аммо пеш аз сохтани аввалини худ, оё шумо ягон бор дар бораи он ки агенти AI чист фикр карданро бас кардаед? Биёед аниқ муайян кунем, ки истилоҳ чӣ маъно дорад – агент.

Тавре ки шумо интизор будед, ба ин савол ҳамон қадар ҷавобҳои LLM вуҷуд доранд, аммо ман фикр мекунам, ки таърифи васеъе, ки аксарият бо он розӣ ҳастанд, ин аст …

Агенти AI як системаи нармафзорест, ки LLM-ро истифода мебарад, ки як ё якчанд асбобҳоро дар як ҳалқа барои расидан ба ҳадаф даъват мекунад.

“Ҳадаф”-и агент ба даст оварда метавонад аз посух додан ба саволи оддӣ то назорати браузери шумо барои брон кардани чиптаи ҳавопаймо ё таҳияи нармафзори хеле мураккаб.

Дар хотир доред, ки дар системаҳои агентӣ ҳалқа давраро байни модел, барнома ва асбобҳои он тавсиф мекунад. Он ҳарфро талаб намекунад while ё for изхорот. Намунае, ки ман истифода хоҳам кард, яке аз ин давраро мегузарад: модел асбоберо талаб мекунад, Python онро иҷро мекунад ва модел барои посух додан натиҷаро истифода мебарад. Азбаски як гардиш кофӣ аст, қадамҳо ба таври возеҳ навишта шудаанд.

Дар қисми боқимондаи ин мақола, ман ба шумо нишон медиҳам, ки чӣ гуна аввалин агенти AI-и худро бунёд кунед. Он ҳеҷ чизи мураккабро иҷро намекунад, аммо ин аз рӯи тарҳ барои нигоҳ доштани чизҳои оддӣ барои оғоз кардан аст, на аз он сабаб, ки ин наметавонад.

Мушкилоте, ки агенти AI-и мо ҳал хоҳад кард

Фарз мекунем, ки шумо як мағозаи хурди онлайн кор мекунед ва мехоҳед ёвари дастгирӣ дошта бошед, ки метавонад ба саволҳо дар бораи фармоишҳо ҷавоб диҳад. Маълумоти фармоишӣ дар пойгоҳи додаҳо ҷойгир аст, аз ин рӯ модели забон мустақилона ба ин саволҳо ҷавоб дода наметавонад. Он ба роҳи назоратшаванда ниёз дорад, то аз аризаи шумо далелҳоро талаб кунад.

Мо ин масири идорашавандаро бо истифода аз мағозаи афсонавӣ ва пойгоҳи додаи хурди SQLite месозем. Пойгоҳи додаҳо ду ҷадвал дорад. Дар фармон медихад ҷадвал рақами фармоиш, фармоишгар ва санаро нигоҳ медорад. Дар адад_фармоиш ҷадвал маҳсулот, миқдор ва нархҳоро барои ҳар як фармоиш нигоҳ медорад.

Пойгоҳи намунавии мо дорои фармоиши 1001 барои Сара Ҷонс мебошад. Вай як клавиатураи механикиро бо нархи 79,95 фунт стерлинг ва ду кабели USB-C бо нархи 8,50 фунт стерлинг харидааст. Ҳамин тариқ, маблағи дурусти фармоиш 96,95 GBP аст.

Ба ҷои он ки корбар фармоишро ҷустуҷӯ кунад ва SQL нависед, мо ба онҳо иҷозат медиҳем, ки аз LLM пурсанд:

Арзиши умумии фармоиши 1001 чанд аст?

Модел эътироф мекунад, ки ба он миқдори умумии фармоиш ниёз дорад ва функсияи Python-ро талаб мекунад умумии_фармоишро гиред. Ин функсия SQLite-ро дархост мекунад ва арзиши воқеиро бармегардонад. Он гоҳ модел метавонад натиҷаро ба як ҷумлаи оддӣ табдил диҳад.

Модел метавонад амалиётро талаб кунад, аммо Python тасмим мегирад, ки оё он иҷозат аст ва онро иҷро мекунад.

Варианти якуми мо дорои чор қисмати ҳаракаткунанда аст:

1. Модели забон савол ва тавсифи функсияи Python мегирад.
2. Модел хоҳиш мекунад, ки ин функсия бо баъзе аргументҳо даъват карда шавад.
3. Python номи функсияи дархостшударо тафтиш мекунад, функсияи иҷозатдодашударо даъват мекунад ва натиҷаи онро бармегардонад.
4. Модел бо истифода аз натиҷа ҷавоб менависад.

Модел функсияро иҷро намекунад ё ба SQLite пайваст намешавад. Барномаи Python-и шумо то ҳол ҳардуро назорат мекунад. Мо моделро ба таври маҳаллӣ тавассути Ollama иҷро хоҳем кард, бинобар ин барои мисол ҳисоби абрӣ ё калиди API лозим нест. Барнома инчунин функсияи дархостшуда, аргументҳои он ва натиҷаи пойгоҳи додаҳоро чоп мекунад ва мубодиларо ба ҷои пинҳон кардани он дар чаҳорчӯбаи агент намоён месозад.

Рамзи ин мақола китобхонаи Python-и Ollama-ро истифода мебарад, аммо намунаи умумии асбоби муштарӣ аз ҷониби дигар API-ҳои LLM, аз ҷумла OpenAI ва Anthropic мубодила мешавад. Синфҳои SDK, номҳои майдонҳо ва форматҳои паёмҳо аз рӯи провайдер фарқ мекунанд, аз ин рӯ ин скрипт ҳамчунон қобили интиқол нест. Қисмҳое, ки бояд интиқол дода шаванд, ин рӯйхати иҷозатдодашуда, тасдиқи далелҳо, фиристодани функсия, натиҷаи баргардонидашудаи асбоб ва ҳалқаи маҳдуд мебошанд.

Чӣ ба шумо лозим аст

Ба шумо Windows 10 ё 11, фазои кофӣ дар диск барои модели маҳаллӣ ва PowerShell лозим аст. Мисол инчунин дар macOS ва Linux кор мекунад, гарчанде ки фармонҳои насбкунӣ фарқ мекунанд.

Мо истифода мебарем uv барои насб кардани Python ва идоракунии лоиҳа. Агар uv аллакай насб нашуда бошад, PowerShell-ро кушоед ва иҷро кунед:

PS D:\projects> powershell -ExecutionPolicy ByPass -c "irm  | iex"

PowerShell-ро пӯшед, равзанаи навро кушоед ва онро санҷед:

PS D:\projects> uv --versionuv 0.12.5 (210d1f678 2026-08-14 x86_64-pc-windows-msvc)

Баъд, Ollama-ро насб кунед. Агар шумо ҳеҷ гоҳ дар бораи Оллама нашунида бошед, ин як абзори бисёрҷониба ва пурқувватест, ки ба шумо имкон медиҳад, ки моделҳои забонҳои калонро мустақиман дар мошини маҳаллии худ иҷро кунед, ба шарте ки шумо барои ҷойгир кардани модели интихобкардаи худ RAM кофӣ дошта бошед. Насбкунандаи Windows-ро аз иҷро кардани он зеркашӣ кунед, пас равзанаи нави PowerShell-ро кушоед ва фармони дар зер нишон додашударо иҷро кунед.

PS D:\projects> ollama pull qwen3.5:4bpulling manifestpulling 81fb60c7daa8: 100% ▕██████████████████████████████████████████████████████████▏ 3.4 GBpulling 7339fa418c9a: 100% ▕██████████████████████████████████████████████████████████▏  11 KBpulling 9371364b27a5: 100% ▕██████████████████████████████████████████████████████████▏   65 Bpulling de9fed2251b3: 100% ▕██████████████████████████████████████████████████████████▏  475 Bverifying sha256 digestwriting manifestsuccess

Зеркашӣ тақрибан 3,4 ГБ аст, то ин ки ин навиштан. Мавҷудияти модел ва андозаҳо метавонанд тағир ёбанд, бинобар ин ҳангоми иҷро кардани фармони боло хатогиҳоро тафтиш кунед ва боварӣ ҳосил кунед, ки модел дар хотираи шумо мувофиқ аст.

Лоиҳа эҷод кунед

Феҳристи нав эҷод кунед ва китобхонаи Ollama Python -ро илова кунед:

uv init local-shop-agentcd local-shop-agentuv python pin 3.14uv add ollama

uv Python 3.14-ро зеркашӣ хоҳад кард, агар он нусхаи мувофиқро наёбад. Ба шумо лозим нест, ки муҳити виртуалиро фаъол созед; uv run онро ба таври худкор истифода мебарад.

Мо пеш аз ҷалби модел базаи маълумотро месозем. Ин ба мо чизи муайянкунанда медиҳад, ки тафтиш кунем: агар махзани маълумот маълумоти нодуруст дошта бошад, барои ислоҳ кардани агент ҳеҷ маъно надорад.

Пойгоҳи додаҳо дар паҳлӯи скриптҳои Python ҷойгир хоҳад шуд ва мумкин аст, вақте ки шумо мехоҳед намунаро аз нав барқарор кунед.

Эҷоди пойгоҳи тестии мо

Файлро эҷод кунед сохтани_мағозаи_database.py бо ин код:

import sqlite3from contextlib import closingfrom pathlib import PathDATABASE_PATH = Path(__file__).with_name("shop_agent.db")DATABASE_PATH.unlink(missing_ok=True)with closing(sqlite3.connect(DATABASE_PATH)) as connection:    connection.executescript(        """        CREATE TABLE orders (            order_id INTEGER PRIMARY KEY,            customer_name TEXT NOT NULL,            order_date TEXT NOT NULL        );        CREATE TABLE order_items (            order_id INTEGER NOT NULL REFERENCES orders(order_id),            product_name TEXT NOT NULL,            quantity INTEGER NOT NULL,            unit_price REAL NOT NULL        );        """    )    connection.execute(        "INSERT INTO orders VALUES (?, ?, ?)",        (1001, "Sarah Jones", "2026-08-03"),    )    connection.executemany(        "INSERT INTO order_items VALUES (?, ?, ?, ?)",        [            (1001, "Mechanical keyboard", 1, 79.95),            (1001, "USB-C cable", 2, 8.50),        ],    )    connection.commit()print(f"Created {DATABASE_PATH}")

Онро чунин иҷро кунед:

PS D:\projects\local-shop-agent> uv run python build_shop_database.pyCreated D:\projects\local-shop-agent\shop_agent.db

SQLite як қисми китобхонаи стандартии Python аст, бинобар ин ба шумо сервери пойгоҳи додаҳо насб кардан лозим нест. Дар баста (…) wrapper талаб карда мешавад, зеро, гарчанде sqlite3.Connection дар як ҳамвор истифода бурда мешавад бо блок амалиётҳоро идора мекунад, вақте ки блок ба итмом мерасад, он пайвастро намебандад. Ба таври возеҳ пӯшидани он аз файли махзани қулфшуда дар Windows канорагирӣ мекунад

Эҷоди агенти AI-и мо

Файлро эҷод кунед ягона_tool.py ва рамзи зеринро ворид кунед.

import jsonimport osimport sqlite3from contextlib import closingfrom pathlib import Pathfrom ollama import chatMODEL = os.getenv("OLLAMA_MODEL", "qwen3.5:4b")DATABASE_PATH = Path(__file__).with_name("shop_agent.db")def get_order_total(order_id: int) -> str:    """Calculate the total value of an order.    Args:        order_id: The numeric order ID.    Returns:        JSON containing the order ID, item count and total in pounds.    """    uri = f"file:{DATABASE_PATH.as_posix()}?mode=ro"    with closing(sqlite3.connect(uri, uri=True)) as connection:        connection.row_factory = sqlite3.Row        row = connection.execute(            """            SELECT                o.order_id,                COALESCE(SUM(oi.quantity), 0) AS item_count,                ROUND(                    COALESCE(SUM(oi.quantity * oi.unit_price), 0),                    2                ) AS total_gbp            FROM orders AS o            LEFT JOIN order_items AS oi ON oi.order_id = o.order_id            WHERE o.order_id = ?            GROUP BY o.order_id            """,            (order_id,),        ).fetchone()    if row is None:        return json.dumps({"error": f"Order {order_id} wasn't found"})    return json.dumps(dict(row))messages = [    {        "role": "system",        "content": (            "Use tools for shop facts. Write currency as GBP, "            "without a currency symbol."        ),    },    {        "role": "user",        "content": "What is the total value of order 1001?",    },]response = chat(    model=MODEL,    messages=messages,    tools=[get_order_total],)messages.append(response.message)if not response.message.tool_calls:    raise RuntimeError("The model answered without calling get_order_total")for call in response.message.tool_calls:    if call.function.name != "get_order_total":        raise RuntimeError(            f"The model requested an unknown tool: {call.function.name}"        )    arguments = call.function.arguments    print(f"Model requested: get_order_total({arguments})")    result = get_order_total(**arguments)    print(f"Python returned: {result}")    messages.append(        {            "role": "tool",            "tool_name": call.function.name,            "content": result,        }    )final_response = chat(    model=MODEL,    messages=messages,    tools=[get_order_total],)print(f"Agent: {final_response.message.content}")

Чӣ тавр рамзи агент кор мекунад

Тағйирёбандаи MODEL дорои номи модели Ollama мебошад. Хондани он аз муҳити OLLAMA_MODEL ба шумо имкон медиҳад, ки модели дигари насбшударо бидуни таҳрири скрипт санҷед. DATABASE_PATH ба файли пойгоҳи додаҳо ишора мекунад shop_agent.db дар ҳамон феҳрист ягона_tool.pyбинобар ин фармон новобаста аз диски ҷории шумо ё ҷузвдони корбари шумо кор мекунад.

get_order_total() рамзи маъмулии барнома аст. Он SQLite-ро дар реҷаи танҳо барои хондан мекушояд, дархости параметриро иҷро мекунад ва JSON-ро бармегардонад. Модел ҳеҷ гоҳ SQL-ро намебинад ва наметавонад ба худи махзани маълумот пайваст шавад.

Номи функсия, тавзеҳи навъи ва ҳуҷҷатҳо инчунин асбобро ба Оллама тавсиф мекунанд. Вақте ки скрипт мегузарад восита =[get_order_total]китобхонаи Ollama он маълумотро ба схемаи JSON табдил медиҳад. Он схемаро ба модел мефиристад, на рамзи сарчашмаи Python.

паёмҳо то ҳол сӯҳбат аст. Паёми системавӣ ба модел чӣ гуна рафтор карданро мегӯяд ва паёми корбар саволро дар бар мегирад. Аввал сӯҳбат () занг ин паёмҳоро дар якҷоягӣ бо схемаи асбоб мефиристад

Он занг иҷро намекунад get_order_total() асбоб. Агар модел қарор кунад, ки ба асбоб ниёз дорад, он дархостро дар он бармегардонад answer.message.tool_calls. Барои ин савол, дархост ба инҳо баробар аст:

Скрипт замима мешавад посух.хабар ба таърих, зеро занги модели навбатӣ бояд дархости асбоби худро бубинад. Он гоҳ тафтиш мекунад, ки асбоб дархост шудааст ва номи он дақиқ аст умумии_фармоишро гиред.

Ин сатр дар он ҷоест, ки асбоб воқеан кор мекунад:

result = get_order_total(**arguments)

** далелҳо гардиш мекунад {“order_id”: 1001} ба занги муқаррарии Python гирифтани_тартибот. Натиҷа ба сӯҳбат бо нақши асбоб илова карда мешавад. асбоб_номи моделеро мегӯяд, ки кадом функсияи дархостшуда онро тавлид кардааст.

Дуюм сӯҳбат () занг таърихи пурраро мегирад: саволи аслӣ, дархости абзори модел ва натиҷаи JSON, ки аз ҷониби Python баргардонида шудааст. Модел ҳоло тамоми маълумоти заруриро дорад ва метавонад ҳукми ниҳоиро нависад.

Иҷрои агент

Танҳо онро тавре иҷро кунед, ки шумо ягон скрипти дигари муқаррарии Python, ба монанди ин

PS D:\projects\local-shop-agent> uv run python single_tool.py

Давраи аввал метавонад таваққуф кунад, вақте ки Оллама моделро ба хотира бор мекунад. Ҳангоми санҷиши ман, барнома чоп кард:

Model requested: get_order_total({'order_id': 1001})Python returned: {"order_id": 1001, "item_count": 3, "total_gbp": 96.95}Agent: The total value of order 1001 is 96.95 GBP.

Ҷумлаи ниҳоӣ метавонад фарқ кунад. Моделҳои забони маҳаллӣ ба ҷои интихоби посухи собит матн тавлид мекунанд, аммо арзиш бояд 96,95 боқӣ монад, зеро Python онро ҳисоб кардааст. Масалан, вақте ки ман онро бори дуюм иҷро кардам, ман натиҷаи каме дигар гирифтам.

Model requested: get_order_total({'order_id': 1001})Python returned: {"order_id": 1001, "item_count": 3, "total_gbp": 96.95}Agent: The total value of order 1001 is 96.95 GBP. This order contains 3 items with a combined total of 96.95 British Pounds.

Санҷиши роҳҳои нокомӣ

Чӣ мешавад, агар мо саволро ба тартиби мавҷуда иваз кунем:

"content": "What is the total value of order 9999?"

Ин баромади ман буд.

Model requested: get_order_total({'order_id': 9999})Python returned: {"error": "Order 9999 wasn't found"}Agent: I was unable to calculate the total value of order 9999 because the order wasn't found in our system. It's possible there may be a typo or the order ID might need verification.

Функсия маълумоти хатои сохториро бармегардонад. Модел бояд тавзеҳ диҳад, ки фармоиш ба ҷои ихтироъ кардани маҷмӯъ пайдо нашудааст.

Ҳоло барои пурсидани чизе, ки асбоб наметавонад муқаррар кунад:

"content": "When will order 1001 arrive?"

Ҷавоби ман чунин буд:

Model requested: get_order_total({'order_id': 1001})Python returned: {"order_id": 1001, "item_count": 3, "total_gbp": 96.95}Agent: I'm sorry, but I can only calculate the total value of orders with my available tool. For order 1001, the total amount is £96.95 (3 items), but I don't have access to information about delivery or arrival dates. To find out when your order will arrive, you'll need to check with the shop directly or look at the order confirmation email you received.

Модел метавонад то ҳол аз маълумоти умумӣ ё тахмин ҷавоб диҳад. Паёми система кӯмак мекунад, аммо он сарҳади сахти амниятӣ нест. Агар ҷавоб бояд аз маълумоти тасдиқшуда гирифта шавад, барномаи шумо бояд тафтиш кунад, ки асбоби мувофиқ даъват карда шудааст ва қарор кунад, ки дар сурати набудани он чӣ кор кардан лозим аст. Бо вуҷуди ин, ҷавобе, ки мо гирифтем, ба назари ман хеле хуб буд.

Схемаеро, ки модел қабул мекунад, бубинед

Бароҳатии интиқоли функсияи Python метавонад як ҷузъи муҳимро пинҳон кунад. Оллама рамзи сарчашмаи шуморо ба модел намефиристад. SDK функсияро тафтиш мекунад ва схемаи JSON-ро ба ин монанд месозад:

{ "type": "function", "function": { "name": "get_order_total", "description": "Calculate the total value of an order.", "parameters": { "type": "object", "required": ["order_id"], "properties": { "order_id": { "type": "integer", "description": "The numeric order ID."     }   }  } }}

Модел инро дар баробари сӯҳбат мебинад. Вазифаи он муайян кардани он аст, ки оё функсия мувофиқ аст ва агар ин тавр бошад, далелҳои мувофиқи схемаро эҷод кунед. Аз ин рӯ, ба функсияи худ илова кардани ҳуҷҷати хуб муҳим аст, зеро модел метавонад аз он самаранок истифода барад.

Насли схема тасдиқ нест. Модел ҳоло ҳам метавонад сатреро фиристад, ки дар он рақами бутун дархост шуда буд, майдони мавҷуд нест ё функсияеро, ки таблиғ нашудааст, дархост кунад. Мо дар қисматҳои оянда чӣ гуна ҳалли баъзе аз ин масъалаҳоро меомӯзем.

Ислоҳоти натиҷа, агар модел хато кунад

Вақте ки агент ҷавоби нодуруст медиҳад, бо пайгирии асбоб оғоз кунед. Се нокомии гуногун метавонанд ба корбар монанд бошанд.

  • Агар не асбоб_зангҳо баргардонида шуданд, модел қарор кард, ки он метавонад бидуни функсия ҷавоб диҳад. Паёми системаро пурзӯр кунед, тавсифи асбобро такмил диҳед ё моделеро бо рафтори қавитари занги асбоб истифода баред.

  • Он чизеро, ки шумо ҳамчун аргумент ба Python фиристодаед, тавассути тафтиши натиҷаи чопи call.function.arguments, тавре ки ин скрипт мекунад, дубора санҷед. Махзани маълумот наметавонад фармоиши 1001-ро баргардонад, вақте ки модел 1010 дархост кардааст.

  • Агар натиҷаи Python дуруст бошад, аммо ҷавоби ниҳоӣ нодуруст бошад, нокомӣ дар ҳоле рух дод, ки модел баромади асбобро тафсир мекард. Натиҷаҳоро кӯтоҳ ва сохторӣ нигоҳ доред. Барои намуна, {“total_gbp”: 96,95} нисбат ба параграфе, ки якчанд рақам дорад, нодуруст хондан душвортар аст. Агар ҳама чизи дигар наояд, ба шумо шояд модели пурқувват лозим шавад.

Истифодаи модели дигар

Скрипт тағирёбандаи муҳити OLLAMA_MODEL-ро мехонад, ки ҳангоми зарурат иваз кардани моделҳоро осон мекунад. Олламаро барои кашидани модели дигари қобили истифода истифода баред ва пас тағирёбандаро барои як сессияи PowerShell насб кунед. Барои намуна,

PS D:\projects\local-shop-agent> ollama pull gpt-oss:20bPS D:\projects\local-shop-agent> $env:OLLAMA_MODEL = "gpt-oss:20b"PS D:\projects\local-shop-agent> uv run python single_tool.py

Модели калонтар ба хотираи бештар ва фазои диск ниёз дорад ва одатан дар ҳамон сахтафзор сусттар ҷавоб медиҳад. Фикр накунед, ки ҳукми ниҳоии равон маънои истифодаи беҳтари абзорро дорад. Кӯшиш кунед, ки идентификаторҳои фармоиш, саволҳои номуайян ва калимаҳои номуайянро санҷед, пас функсия ва далелҳои дархостшударо муқоиса кунед.

Хулоса

Аз таърифи воқеан агенти AI сар карда, ин мақола ба шумо нишон дод, ки чӣ гуна як агенти оддиро бо истифода аз Python, Ollama ва SQLite созед, ки бе ҳисоби абрӣ ё калиди API ба таври маҳаллӣ кор мекунад.

Бо истифода аз маълумот оид ба фармоиши дӯкони афсонавӣ, он фаҳмид, ки чӣ гуна модели забон асбоберо дархост мекунад, чӣ гуна Python ин дархостро тафтиш ва иҷро мекунад ва чӣ гуна модел натиҷаро ба ҷавоб табдил медиҳад.

Дар ин роҳ, шумо фаҳмидед, ки схемаҳои асбобҳо чӣ гуна кор мекунанд ва чӣ гуна мушкилотро ҳангоми хатогиҳои модел ташхис кардан мумкин аст.

Ин мисоли дидаю дониста содда механикаро намоён нигоҳ медорад ва барои агентҳое, ки асбобҳои гуногунро дар якчанд марҳила истифода мебаранд, нуқтаи ибтидоӣ фароҳам меорад.

Ин кори мақолаи оянда аст.



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *

Instagram Posts Collection

Instagram Posts Collection