2-qism · Agentlarni qurish·04-bob
Ko'p agentli tizimlar
AutoGen va CrewAI bilan bir necha agent hamkorlik qiladigan tizimlar qurish. UserProxy, tanqidchi agentlar, guruh chati va agent ekipaji — ishlaydigan kod bilan.
Bitta agent bitta ishni qiladi. Lekin kod yozuvchi + tester + tanqidchi birga ishlasa — natija sifati keskin oshadi.
Bu bobda ikki asosiy vositani ko'ramiz: AutoGen (Microsoft) va CrewAI. Ikkalasi ham bir necha agentni bir tizimda birlashtiradi, lekin turli falsafa bilan.
AutoGen: suhbatlashuvchi agentlar#
AutoGen tadqiqotdan tug'ilgan va kengaytirilgan. Uning yuragida ikki tur agent bor:
- 1
- ConversableAgentLLM bilan bevosita gaplashadigan agent. U vazifani bajaradi — kod yozadi, savolga javob beradi.
- 2
- UserProxyAgentFoydalanuvchi nomidan ish qiluvchi agent. U suhbatni boshqaradi, kodni ishga tushiradi va — muhimi — kerak bo'lganda odamdan feedback so'raydi.
O'rnatish#
pip install pyautogenSuccessfully installed pyautogen-0.2.32 ...
Sozlama fayli OAI_CONFIG_LIST — modelni ulaydi:
[
{
"model": "gpt-4",
"api_key": "sizning-kalitingiz",
"tags": ["gpt-4", "tool"]
}
]Ikki agentli tizim#
from autogen import ConversableAgent, UserProxyAgent, config_list_from_json
config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST")
# Vazifani bajaradigan agent
assistant = ConversableAgent(
"agent",
llm_config={"config_list": config_list},
)
# Foydalanuvchi nomidan ish qiluvchi agent
user_proxy = UserProxyAgent(
"user",
code_execution_config={
"work_dir": "working", # kod shu papkada saqlanadi
"use_docker": False, # xavfsizlik uchun True tavsiya etiladi
},
human_input_mode="ALWAYS", # har qadamda odamdan so'raydi
is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),
)
# Suhbatni boshlaymiz
user_proxy.initiate_chat(
assistant,
message="Fizz-buzz masalasini bir qatorda yeching",
)Tanqidchi agent qo'shish#
Ko'p agentning eng kuchli tomoni — rollar. Kod yozildi, lekin uni tekshirsak-chi?
# Kod yozuvchi
coder = ConversableAgent(
"coder",
system_message="Siz tajribali Python dasturchisiz. Toza, ishlaydigan kod yozasiz.",
llm_config={"config_list": config_list},
)
# Tanqidchi
critic = ConversableAgent(
"critic",
system_message="""Siz talabchan kod tekshiruvchisiz. Kodni tekshirasiz:
- Xatolar bormi?
- Xavfsizlik zaifliklari bormi?
- Uslub to'g'rimi?
Aniq muammolarni ko'rsatasiz va yaxshilanish taklif qilasiz.""",
llm_config={"config_list": config_list},
)
# Ular birga ishlaydi — coder yozadi, critic tekshiradi, coder tuzatadiBu muhokama naqshi: bir agent yechim beradi, ikkinchisi tanqid qiladi, birinchisi yaxshilaydi. Natija bitta agentnikidan sifatliroq bo'ladi.
Guruh chati#
Ikki agent yetarli bo'lmasa — guruh chati. Bir necha agent bitta suhbatda:
from autogen import GroupChat, GroupChatManager
agentlar = [coder, critic, tester, user_proxy]
guruh = GroupChat(agents=agentlar, messages=[], max_round=12)
manager = GroupChatManager(groupchat=guruh, llm_config={"config_list": config_list})
user_proxy.initiate_chat(manager, message="Kalkulyator ilovasini yozing va test qiling")Manager qaysi agent qachon gapirishini boshqaradi. Coder yozadi, tester test yozadi, critic tekshiradi — hammasi bitta suhbatda.
CrewAI: agent ekipaji#
CrewAI yangiroq va korxona tizimlari uchun mo'ljallangan. AutoGen tadqiqotdan o'sgan bo'lsa, CrewAI amaliyot uchun qurilgan — mustahkamroq, lekin ba'zi joylarda kamroq moslashuvchan.
Asosiy farq: CrewAI'da UserProxy kerak emas — agentlar faqat o'zaro ishlaydi.
Agentlarni ta'riflash#
CrewAI AutoGen'dan ko'proq sozlama talab qiladi — bu ko'proq nazorat beradi:
from crewai import Agent, Crew, Process, Task
from dotenv import load_dotenv
load_dotenv()
tadqiqotchi = Agent(
role="Katta hazil tadqiqotchisi",
goal="{mavzu} nima uchun kulgili ekanini o'rganish",
verbose=True, # terminalga chiqishni ko'rsatadi
memory=True, # xotira yoqilgan
backstory=(
"Siz tajribali hazil tadqiqotchisiz. Odamlarni nima kuldirishini "
"bilasiz. Kundalik holatlardagi kulgilini topib, zerikarli lahzani "
"kulgiga aylantira olasiz."
),
allow_delegation=True, # boshqa agentga vazifa topshira oladi
)
yozuvchi = Agent(
role="Hazil yozuvchisi",
goal="{mavzu} bo'yicha kulgili hazil yozish",
verbose=True,
memory=True,
backstory=(
"Siz hazil yozuvchisisiz. Oddiy g'oyani kulgi portlashiga "
"aylantira olasiz. So'z bilan o'ynashni bilasiz."
),
)Vazifalar va ekipaj#
# Vazifalarni ta'riflaymiz
tadqiqot_vazifasi = Task(
description="{mavzu} nima uchun kulgili ekanini tahlil qil",
expected_output="Kulgi manbalarining qisqa ro'yxati",
agent=tadqiqotchi,
)
yozuv_vazifasi = Task(
description="Tadqiqotga tayanib {mavzu} haqida hazil yoz",
expected_output="Bitta kulgili hazil",
agent=yozuvchi,
)
# Ekipajni yig'amiz
ekipaj = Crew(
agents=[tadqiqotchi, yozuvchi],
tasks=[tadqiqot_vazifasi, yozuv_vazifasi],
process=Process.sequential, # ketma-ket: avval tadqiqot, keyin yozuv
)
natija = ekipaj.kickoff(inputs={"mavzu": "dasturchilar"})
print(natija)Ketma-ket va iyerarxik ishlov#
CrewAI ikki turdagi ishlovni qo'llab-quvvatlaydi:
- Vazifalar navbat bilan bajariladi
- Bir agent natijasi keyingisiga o'tadi
- Oddiy, bashoratli oqim
- Ko'p holat uchun yetarli
- Menejer agent vazifalarni taqsimlaydi
- Ishchi agentlar bajaradi
- Murakkab, moslashuvchan
- Katta, ko'p bosqichli loyihalar uchun
Boshlash uchun ketma-ket. Vazifa murakkablashib, dinamik taqsimlash kerak bo'lganda iyerarxikka o'ting.
AutoGen yoki CrewAI?#
- Tadqiqotdan o'sgan — moslashuvchan
- UserProxy bilan odam feedbacki oson
- Kod ishga tushirish kuchli
- Ko'proq eksperimental erkinlik
- Korxona uchun qurilgan — mustahkam
- Rol/maqsad/backstory aniq tuzilma
- Ko'proq sozlama, ko'proq nazorat
- Ba'zi joyda kamroq moslashuvchan
Tez tajriba va odam-ichida-sikl uchun AutoGen. Aniq tuzilgan, production-ga yaqin tizim uchun CrewAI. Ikkalasi ham OpenAI-mos, ya'ni istalgan modelga ishlaydi.
Kod tekshiruvchi ekipaj quring
Kod yozadigan, test yozadigan va tekshiradigan uch agentli ekipaj quring (AutoGen yoki CrewAI).
Keyin solishtiring:
- Bir xil vazifani bitta agentga bering
- Uch agentli ekipajga bering
- Natija sifatini va narxni o'lchang
Savollar:
- Uch agent kod sifatini oshirdimi?
- Necha barobar qimmat bo'ldi?
- Qo'shimcha narx oqlandimi? Javobingizni raqamlar bilan asoslang.
Maslahatni ko'rsatish
AutoGen yoki CrewAI tanlang (CrewAI aniqroq tuzilgan). CrewAI bilan uch agent: coder = Agent(role='Dasturchi', goal='{vazifa} uchun Python kod yoz', backstory='Siz tajribali dasturchisiz...') tester = Agent(role='Tester', goal='Kod uchun testlar yoz va ishga tushir', backstory='Siz sinchkov testersiz...') reviewer = Agent(role='Tekshiruvchi', goal='Kodni xavfsizlik va sifat uchun tekshir', backstory='Siz talabchan code reviewersiz...') Uch vazifa yarating, ketma-ket process bilan Crew qiling. Solishtiring: 1. Bitta agentga bir xil vazifani bering 2. Uch agentli ekipajga bering 3. Natija sifatini va NARXNI solishtiring AgentOps yoki oddiy hisoblash bilan har chaqiruvni sanang. Uch agent qo'shimcha narxni oqladimi?
Xulosa#
- 01AutoGen tadqiqotdan o'sgan va moslashuvchan; CrewAI korxona uchun qurilgan va mustahkam. Ikkalasi ham OpenAI-mos.
- 02AutoGen'da UserProxyAgent odam feedbackini va kod ishga tushirishni boshqaradi. Kodni Docker'da ishga tushiring — xavfsizlik uchun majburiy.
- 03Tanqidchi agent qo'shish — ko'p agentning eng kuchli tomoni. Bir yozadi, ikkinchisi tekshiradi, natija sifatliroq.
- 04CrewAI'da agent = rol + maqsad + backstory. Backstory boy bo'lsa, xatti-harakat izchilroq.
- 05Ketma-ket ishlov oddiy va yetarli; iyerarxik murakkab loyihalar uchun. Boshlash uchun ketma-ket.
- 06Ko'p agent ko'p narx. Tadqiqotlar ko'pincha kichik yaxshilanish ko'rsatadi. Aniq sabab bo'lganda o'ting va sarfni kuzating.
Keyingi bobda agentlarga haqiqiy harakat berishni ko'ramiz: OpenAI function calling va Semantic Kernel bilan agent tashqi funksiyalarni chaqiradigan qilamiz.