Knaph

حلقه14 از 37

حلقه را بچرخانید

در درس «[حلقه در بیست خط](the-loop-in-twenty-lines)» حلقه‌ی عاملِ mini را خواندید. اینجا خودتان یکی می‌نویسید، و یک مدلِ ساختگی هر درخواستی را که حلقه‌ی شما می‌فرستد بررسی می‌کند. ## مدلِ ساختگی تمرین‌ها بدونِ اینترنت اجرا می‌شوند، پس نقشِ مدل را FakeModel بازی می‌کند که از قبل در کدِ آغازین هست. به آن یک متنِ از پیش نوشته داده می‌شود: پاسخ‌هایی که «مدل» به ترتیب خواهد نوشت. هر بار که حلقه‌ی شما model.create(messages) را صدا بزند، پاسخِ بعدی را برمی‌گرداند، به شکلِ دیکشنری‌ای شبیهِ پاسخِ واقعی: ``json {"stop_reason": "tool_use", "content": [ {"type": "thinking", "thinking": ""}, {"type": "tool_use", "id": "toolu_01", "name": "add", "input": {"a": 2, "b": 3}} ]} ` پیش از جواب دادن هر درخواست را هم بررسی می‌کند، همان‌طور که API واقعی درخواستِ نادرست را رد می‌کند: پیامِ اول و آخر باید مالِ user باشند، نقش‌ها باید یکی‌درمیان بیایند، و به هر فراخوانیِ ابزار باید در پیامِ بعدی، با شناسه‌اش، جواب داده شود. اگر حلقه‌ی شما چیزِ نادرستی بفرستد، اجرا با bad request: و دلیلش متوقف می‌شود. run_tool(block) برایتان نوشته شده، با دو ابزار: add و word_count. ## چه بنویسید run_agent(task, model, max_turns)، طبقِ docstring آن: - گفت‌وگو را با کار شروع کنید؛ - در هر نوبت، گفت‌وگو را بفرستید و کلِ contentِ پاسخ را به‌عنوانِ یک پیامِ assistant اضافه کنید؛ - با "end_turn"، متنِ پاسخ را برگردانید؛ - با "tool_use"، همه‌ی فراخوانی‌های ابزار را اجرا کنید و برای هر کدام یک خط چاپ کنید، بعد **یک** پیامِ user با همه‌ی نتیجه‌ها اضافه کنید؛ - با هر دلیلِ ایستادنِ دیگری، هیچ چیز را اجرا نکنید و stopped: <reason> را برگردانید؛ - بعد از max_turns نوبت، stopped: no answer after <max_turns> turns را برگردانید. خطِ هر فراخوانی نوبت (با شمارشِ از ۱)، ابزار، ورودی و نتیجه را نشان می‌دهد: `text turn 1: add {"a": 2, "b": 3} -> 5 ` برای ورودی از json.dumps(block["input"], sort_keys=True) استفاده کنید. کدِ زیرِ تابعِ شما چیزی را که برمی‌گردانید چاپ می‌کند، و اینکه در هر نوبت چند پیام برای مدل فرستاده شد. برای متنی که در آن مدل ۲ و ۳ را جمع می‌کند و بعد جواب می‌دهد، خروجی این است: `text turn 1: add {"a": 2, "b": 3} -> 5 result: 2 + 3 is 5. messages sent each turn: 1, 3 `` درخواستِ دوم سه پیام دارد: کار، فراخوانیِ ابزارِ مدل و نتیجه‌های شما. اگر خروجیِ شما چیزِ دیگری می‌گوید، ببینید چه چیزی را اضافه می‌کنید.

ورود برای امتحان این تمرین.