Agent example: a multi-agent help desk
The job: customers ask about deliveries and about invoices. A front desk agent reads each question and hands it to the right specialist. Each specialist has its own tool and instructions.
Tools used: the OpenAI Agents SDK on /v1/responses, with
function tools and handoffs, all on the Fast tier.
The code
Section titled “The code”from agents import Agent, OpenAIResponsesModel, Runner, function_tool, set_tracing_disabledfrom openai import AsyncOpenAI
set_tracing_disabled(True) # keep every prompt and answer on your own server
client = AsyncOpenAI(base_url="https://dummydomain/v1", api_key="YOUR_API_KEY")fast = OpenAIResponsesModel(model="Fast", openai_client=client)
ORDERS = {"SO-4471": "shipped on 12-10-2026, delivery expected 15-10-2026"}INVOICES = {"SO-4471": {"invoice": "INV-2026-0587", "amount_inr": 42500, "status": "unpaid, due 30-10-2026"}}
@function_tooldef get_order_status(order_id: str) -> str: """Look up where an order is.""" return ORDERS.get(order_id, "no such order")
@function_tooldef get_invoice(order_id: str) -> str: """Look up the invoice for an order.""" return str(INVOICES.get(order_id, "no invoice for this order"))
orders_agent = Agent( name="Orders desk", handoff_description="Questions about where an order is and when it will arrive", instructions="Answer delivery questions with get_order_status. Be brief and polite.", model=fast, tools=[get_order_status],)billing_agent = Agent( name="Billing desk", handoff_description="Questions about invoices, amounts and payment due dates", instructions="Answer invoice questions with get_invoice. Write amounts as Rs with Indian grouping.", model=fast, tools=[get_invoice],)triage = Agent( name="Front desk", instructions="Send each customer to the right desk. Do not answer yourself.", model=fast, handoffs=[orders_agent, billing_agent],)
for question in ["Where is my order SO-4471?", "How much do I owe for order SO-4471, and by when?"]: result = Runner.run_sync(triage, question) print(f"[{result.last_agent.name}] {result.final_output}")What it prints
Section titled “What it prints”[Orders desk] Your order SO-4471 was shipped on 12-10-2026 and is expected to be delivered by 15-10-2026.[Billing desk] You owe Rs 42,500 for order SO-4471, which is due by 30-10-2026.How it works
Section titled “How it works”- Handoffs are tools. The SDK gives the front desk one tool per specialist. Calling it moves the
conversation to that agent, which
result.last_agentreports. - Each desk sees only its tools. The billing desk can’t look up deliveries, and the orders desk can’t read invoices. Smaller tool lists give steadier answers.
- Everything stays on your server.
set_tracing_disabled(True)stops the SDK from uploading run traces to OpenAI.
Where else this works
Section titled “Where else this works”An IT help desk (passwords, laptops, access requests), an HR desk (leave, payslips, policies), a hospital front desk (appointments, reports, billing), or a college office (admissions, fees, exams).
Common questions
Does the OpenAI Agents SDK work with ZenithAI?
Yes, through OpenAIResponsesModel pointed at your server. Agents, tools and handoffs between agents all run on /v1/responses. Turn tracing off so the SDK sends nothing to OpenAI.
Why split a help desk into several agents?
Each desk gets short instructions and only the tools it needs, so it answers more reliably. The front desk only decides who should answer, and you can add a desk without touching the others.
