diff --git a/examples/realtime/app/agent.py b/examples/realtime/app/agent.py index 6ade2fea1..81d8db7c1 100644 --- a/examples/realtime/app/agent.py +++ b/examples/realtime/app/agent.py @@ -1,10 +1,46 @@ from agents import function_tool -from agents.realtime import RealtimeAgent +from agents.extensions.handoff_prompt import RECOMMENDED_PROMPT_PREFIX +from agents.realtime import RealtimeAgent, realtime_handoff """ When running the UI example locally, you can edit this file to change the setup. THe server will use the agent returned from get_starting_agent() as the starting agent.""" +### TOOLS + + +@function_tool( + name_override="faq_lookup_tool", description_override="Lookup frequently asked questions." +) +async def faq_lookup_tool(question: str) -> str: + if "bag" in question or "baggage" in question: + return ( + "You are allowed to bring one bag on the plane. " + "It must be under 50 pounds and 22 inches x 14 inches x 9 inches." + ) + elif "seats" in question or "plane" in question: + return ( + "There are 120 seats on the plane. " + "There are 22 business class seats and 98 economy seats. " + "Exit rows are rows 4 and 16. " + "Rows 5-8 are Economy Plus, with extra legroom. " + ) + elif "wifi" in question: + return "We have free wifi on the plane, join Airline-Wifi" + return "I'm sorry, I don't know the answer to that question." + + +@function_tool +async def update_seat(confirmation_number: str, new_seat: str) -> str: + """ + Update the seat for a given confirmation number. + + Args: + confirmation_number: The confirmation number for the flight. + new_seat: The new seat to update to. + """ + return f"Updated seat to {new_seat} for confirmation number {confirmation_number}" + @function_tool def get_weather(city: str) -> str: @@ -12,25 +48,46 @@ def get_weather(city: str) -> str: return f"The weather in {city} is sunny." -@function_tool -def get_secret_number() -> int: - """Returns the secret number, if the user asks for it.""" - return 71 - +faq_agent = RealtimeAgent( + name="FAQ Agent", + handoff_description="A helpful agent that can answer questions about the airline.", + instructions=f"""{RECOMMENDED_PROMPT_PREFIX} + You are an FAQ agent. If you are speaking to a customer, you probably were transferred to from the triage agent. + Use the following routine to support the customer. + # Routine + 1. Identify the last question asked by the customer. + 2. Use the faq lookup tool to answer the question. Do not rely on your own knowledge. + 3. If you cannot answer the question, transfer back to the triage agent.""", + tools=[faq_lookup_tool], +) -haiku_agent = RealtimeAgent( - name="Haiku Agent", - instructions="You are a haiku poet. You must respond ONLY in traditional haiku format (5-7-5 syllables). Every response should be a proper haiku about the topic. Do not break character.", - tools=[], +seat_booking_agent = RealtimeAgent( + name="Seat Booking Agent", + handoff_description="A helpful agent that can update a seat on a flight.", + instructions=f"""{RECOMMENDED_PROMPT_PREFIX} + You are a seat booking agent. If you are speaking to a customer, you probably were transferred to from the triage agent. + Use the following routine to support the customer. + # Routine + 1. Ask for their confirmation number. + 2. Ask the customer what their desired seat number is. + 3. Use the update seat tool to update the seat on the flight. + If the customer asks a question that is not related to the routine, transfer back to the triage agent. """, + tools=[update_seat], ) -assistant_agent = RealtimeAgent( - name="Assistant", - instructions="If the user wants poetry or haikus, you can hand them off to the haiku agent via the transfer_to_haiku_agent tool.", - tools=[get_weather, get_secret_number], - handoffs=[haiku_agent], +triage_agent = RealtimeAgent( + name="Triage Agent", + handoff_description="A triage agent that can delegate a customer's request to the appropriate agent.", + instructions=( + f"{RECOMMENDED_PROMPT_PREFIX} " + "You are a helpful triaging agent. You can use your tools to delegate questions to other appropriate agents." + ), + handoffs=[faq_agent, realtime_handoff(seat_booking_agent)], ) +faq_agent.handoffs.append(triage_agent) +seat_booking_agent.handoffs.append(triage_agent) + def get_starting_agent() -> RealtimeAgent: - return assistant_agent + return triage_agent