рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдБ

Google рдХреА Agent Development Kit (ADK): рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛

Google рдХреА Agent Development Kit (ADK) рдФрд░ Agent2Agent (A2A) рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рдЯреНрд░реИрд╡рд▓ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдирд╛ рд╕реАрдЦреЗрдВред
┬╖ 12 рдорд┐ре░ рдкрдврд╝реЗрдВ

AI рдХреЗ рд╕рд╛рде рдЦреЛрдЬреЗрдВ

рдЗрд╕ рдмреНрд▓реЙрдЧ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ Google рдХреЗ рдирдП рдУрдкрди-рд╕реЛрд░реНрд╕ Agent Development Kit (ADK) рдФрд░ A2A (Agent-to-Agent) рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ, AI-рд╕рдВрдЪрд╛рд▓рд┐рдд рдЯреНрд░реИрд╡рд▓ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдирд╛ рд╕рд┐рдЦрд╛рдКрдВрдЧрд╛ред

рд╣рдо рдлреНрд▓рд╛рдЗрдЯ, рд╣реЛрдЯрд▓ рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдЕрдиреБрд╢рдВрд╕рд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдПрдЬреЗрдВрдЯреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ REST APIs рдФрд░ FastAPI рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдЬрд░рд┐рдП рд╕рдВрд╡рд╛рдж рдХрд░реЗрдВрдЧреЗред рдЕрдВрдд рдореЗрдВ, рд╕рд╣рдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдПрдХ рд╕рд╛рдл-рд╕реБрдерд░реЗ Streamlit рдлреНрд░рдВрдЯрдПрдВрдб рдореЗрдВ рд╕рдореЗрдЯреЗрдВрдЧреЗред

рдЕрдВрдд рдореЗрдВ, рдореИрдВ рд╣рдорд╛рд░реА Building AI Agents With Google ADK рдХреЛрд░реНрд╕ рд▓реЗрдХрд░ ADK рдХреЗ рд╕рд╛рде рдХрд╕реНрдЯрдорд░-рд╕рдкреЛрд░реНрдЯ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдХрд░ рдЕрдкрдирд╛ рд╕реАрдЦрдирд╛ рдмрдврд╝рд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛/рджреЗрддреА рд╣реВрдВред

рд╣рдо рдЕрдкрдиреЗ рдкрд╛рдардХреЛрдВ рдХреЛ AI рдХреА рддрд╛рдЬрд╝рд╛ рдЦрдмрд░реЛрдВ рд╕реЗ рдЕрдкрдбреЗрдЯ рд░рдЦрддреЗ рд╣реИрдВ The Median рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗтАФрд╣рдорд╛рд░рд╛ рдореБрдлрд╝реНрдд рд╢реБрдХреНрд░рд╡рд╛рд░ рдиреНрдпреВрдЬрд╝рд▓реЗрдЯрд░ рдЬреЛ рд╣рдлреНрддреЗ рдХреА рдореБрдЦреНрдп рдХрд╣рд╛рдирд┐рдпреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ рдФрд░ рд╣рд░ рд╣рдлреНрддреЗ рдЪрдВрдж рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдЕрдкрдбреЗрдЯ рд░рд╣реЗрдВ:

Google рдХреА Agent Development Kit (ADK) рдХреНрдпрд╛ рд╣реИ?

Google рдХреА ADK, LLM-рд╕рдВрдЪрд╛рд▓рд┐рдд рдПрдЬреЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓рд░, рдкреНрд░реЛрдбрдХреНрд╢рди-рд░реЗрдбреА рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред рдпрд╣реА рдЯреВрд▓рдХрд┐рдЯ Google рдХреЗ рдЙрддреНрдкрд╛рджреЛрдВтАФрдЬреИрд╕реЗ Agentspace рдФрд░ Customer Engagement SuiteтАФрдХреЗ рднреАрддрд░ рдПрдЬреЗрдВрдЯреНрд╕ рдХреЛ рд╢рдХреНрддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдм рдУрдкрди-рд╕реЛрд░реНрд╕ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА, рд▓рдЪреАрд▓реЗ рдФрд░ рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд▓ рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

Agent Development Kit (ADK) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?

ADK, Python рдХреА рд▓рдЪреАрд▓рд╛рдкрди рдХреЗ рд╕рд╛рде рд╕реНрдЯреЗрдЯ рдореИрдиреЗрдЬрдореЗрдВрдЯ, рдХреЙрд▓рдмреИрдХреНрд╕, рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ, рдФрд░ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдЗрдирдкреБрдЯ/рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдЯ-рдЗрди рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдЗрд╕рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рджреЗрдЦреЗрдВ:

  • рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реЗ рд╣реА рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ: ADK рдПрдЬреЗрдВрдЯреНрд╕ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░, рдХреНрд░рдорд┐рдХ рдпрд╛ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  • рдореЙрдбрд▓-рдЕрдЬреНрдЮреЗрдп: рдпрд╣ LiteLlm рдХреЗ рдЬрд░рд┐рдП Gemini, GPT-4o, Claude, Mistral рдФрд░ рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  • рдореЙрдбреНрдпреВрд▓рд░ рдФрд░ рд╕реНрдХреЗрд▓реЗрдмрд▓: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдЬреЗрдВрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдмрд┐рд▓реНрдЯ-рдЗрди рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рд╕реЗ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╕реЗ рдбреЗрд▓реАрдЧреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  • рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ-рд░реЗрдбреА: рдпрд╣ рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджреНрд╡рд┐рджрд┐рд╢ рдСрдбрд┐рдпреЛ/рд╡реАрдбрд┐рдпреЛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
  • рдмрд┐рд▓реНрдЯ-рдЗрди рдЯреВрд▓рд┐рдВрдЧ: рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рдЗрд╡реИрд▓реНрдпреВрдПрд╢рди рдХреЗ рд▓рд┐рдП рд▓реЛрдХрд▓ CLI рдФрд░ рд╡реЗрдм UI рдХрд╛ рд╕рдорд░реНрдердиред
  • рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕рдкреЛрд░реНрдЯ: ADK рд╡рд┐рднрд┐рдиреНрди рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯреНрд╕ рдореЗрдВ рдПрдЬреЗрдВрдЯреНрд╕ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрдВрдЯреЗрдирд░рд╛рдЗрдЬрд╝ рдФрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рддрд╛ рд╣реИред

Google рдХрд╛ Agent2Agent (A2A) рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреНрдпрд╛ рд╣реИ?

Agent2Agent (A2A) рдкреНрд░реЛрдЯреЛрдХреЙрд▓, Google рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдПрдХ рдУрдкрди, рд╡реЗрдВрдбрд░-рдиреНрдпреВрдЯреНрд░рд▓ рдорд╛рдирдХ рд╣реИ рдЬреЛ рд╡рд┐рд╡рд┐рдз рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдореНрд╕ рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХреНрд╕ рдкрд░ AI рдПрдЬреЗрдВрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдЖрд╕рд╛рди рд╕рдВрдЪрд╛рд░ рдФрд░ рд╕рд╣рдпреЛрдЧ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред

ADK рдПрдЬреЗрдВрдЯреНрд╕ рдПрдХ рдорд╛рдирдХ /run HTTP рдПрдВрдбрдкреЙрдЗрдВрдЯ рдФрд░ .well-known/agent.json рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдПрдЬреЗрдВрдЯ рдбрд┐рд╕реНрдХрд╡рд░реА рдФрд░ рдПрдЬреЗрдВрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдЖрд╕рд╛рди рд╕рдВрдЪрд╛рд░ рд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИ (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдмрд╛рд╣рд░реА рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░реНрд╕ рдЬреИрд╕реЗ LangGraph рдпрд╛ CrewAI рдХреЗ рд╕рд╛рде рднреА)ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ, A2A рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЖрдкрдХреЗ рдПрдЬреЗрдВрдЯреНрд╕ рдПрдЬреЗрдВрдЯ рдЯреВрд▓реНрд╕ рдФрд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░реНрд╕ рдХреЗ рд╡реНрдпрд╛рдкрдХ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╡реАрдбрд┐рдпреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдпрд╛ рд╣рдорд╛рд░реЗ рд╣реИрдВрдбреНрд╕-рдСрди ADK рдХреЛрд░реНрд╕ рдореЗрдВ Google ADK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЕрдзрд┐рдХ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВред┬а

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдУрд╡рд░рд╡реНрдпреВ: ADK рдФрд░ A2A рдХреЗ рд╕рд╛рде AI-рд╕рдВрдЪрд╛рд▓рд┐рдд рдЯреНрд░реИрд╡рд▓ рдкреНрд▓рд╛рдирд░

рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХ рдЯреНрд░реИрд╡рд▓ рдкреНрд▓рд╛рдирд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ:

  • рдЧрдВрддрд╡реНрдп, рддрд╛рд░реАрдЦреЗрдВ рдФрд░ рдмрдЬрдЯ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИред
  • рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдЬреЗрдВрдЯреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ:
    • flight_agent:┬а рдлреНрд▓рд╛рдЗрдЯ рд╡рд┐рдХрд▓реНрдк рд╕реБрдЭрд╛рддрд╛ рд╣реИред
    • stay_agent: рдмрдЬрдЯ рдХреЗ рднреАрддрд░ рд╣реЛрдЯрд▓ рдвреВрдВрдврддрд╛ рд╣реИред
    • activities_agent: рд░реЛрдЪрдХ рдЧрддрд┐рд╡рд┐рдзрд┐рдпрд╛рдБ рд╕реБрдЭрд╛рддрд╛ рд╣реИред
  • рдлрд┐рд░, рд╕рднреА рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ рдХреЛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЗрдВрджреНрд░реАрдп host_agent рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  • рдЕрдВрдд рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд▓рд┐рдП Streamlit UI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╕рднреА рдПрдЬреЗрдВрдЯреНрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ FastAPI рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдПрдХ /run рдПрдВрдбрдкреЙрдЗрдВрдЯ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрдЪрд╛рд░ рд╕рд╛рдЭрд╛ A2A-рдХрдореНрдкреИрдЯрд┐рдмрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЬрд░рд┐рдП рд╣реЛрддрд╛ рд╣реИред

рдиреЛрдЯ: рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреВрд░реА рддрд░рд╣ рдЖрдкрдХреА рд▓реЛрдХрд▓ рдорд╢реАрди рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдПрдЬреЗрдВрдЯ рдФрд░ UI рдХреЛ Render, Railway, рдпрд╛ Google Cloud Run рдЬреИрд╕реА рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдореНрд╕ рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдбрд┐рдкреНрд▓реЙрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдПрдХреНрд╕реЗрд╕ рдорд┐рд▓ рд╕рдХреЗред

рд╕реНрдЯреЗрдк 1: рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛рдПрдБ

рдЖрдЗрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВ:

pip install google-adk litellm fastapi uvicorn httpx pydantic openai streamlit

рдлрд┐рд░, рдЕрдкрдирд╛ OpenAI API key рд╕реЗрдЯ рдХрд░реЗрдВтАФрдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбрд▓ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред OpenAI рдХрд╛ API key рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ GPT-4o API рдкрд░ рдпрд╣ рд╢реБрд░реБрдЖрддреА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕реБрдЭрд╛рддрд╛/рд╕реБрдЭрд╛рддреА рд╣реВрдВред

export OPENAI_API_KEY="your_key_here"

рд╕реНрдЯреЗрдк 2: рд╕рд╛рдЭрд╛ рд╕реНрдХреАрдорд╛ рдФрд░ рдпреВрдЯрд┐рд▓рд┐рдЯреАрдЬрд╝

рдмреБрджреНрдзрд┐рдорд╛рди рдПрдЬреЗрдВрдЯ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдЖрдкрд╕ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдПрдХ рд╕рд╛рдЭрд╛ рднрд╛рд╖рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреА рд╣реЛрдЧреАред рд╣рдорд╛рд░реЗ рд╕реЗрдЯрдЕрдк рдореЗрдВ, рдпрд╣ рдирд┐рдореНрди рдХреЗ рдЬрд░рд┐рдП рд╣реЛрддрд╛ рд╣реИ:

  • рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЭрд╛ рд╕реНрдХреАрдорд╛ (Pydantic рдХреЗ рдЬрд░рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд)
  • рдПрдЬреЗрдВрдЯреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП REST рдХреНрд▓рд╛рдЗрдВрдЯ рдпреВрдЯрд┐рд▓рд┐рдЯреА
  • рд╕рднреА рдПрдЬреЗрдВрдЯреНрд╕ рдореЗрдВ /run рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП REST рд╕рд░реНрд╡рд░ рд░реИрдкрд░

рдХреЛрдб рдХреЛ рдореЙрдбреНрдпреВрд▓рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдиреНрд╣реЗрдВ shared/ рдФрд░ common/ рдлреЛрд▓реНрдбрд░реНрд╕ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рдПрдХ-рдПрдХ рдХрд░рдХреЗ рджреЗрдЦреЗрдВред

рдПрдХ shared/schemas.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛

рд╣рдо Pydantic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ TravelRequest рд╕реНрдХреАрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдПрдЬреЗрдВрдЯреНрд╕ рдЗрдирдХрдорд┐рдВрдЧ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ рдХреА рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдкрд░ рд╕рд╣рдордд рд╣реЛрдВ, рдЬрд┐рд╕рдореЗрдВ рдЧрдВрддрд╡реНрдп, рдпрд╛рддреНрд░рд╛ рдХреА рддрд┐рдерд┐рдпрд╛рдБ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдЬрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

from pydantic import BaseModel
class TravelRequest(BaseModel):
    destination: str
    start_date: str
    end_date: str
    budget: float

рдпрд╣ рдХреНрд▓рд╛рд╕ рдЗрди рдмрд╛рддреЛрдВ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ:

  • рд╕рднреА рдПрдЬреЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХреЛ рд╕реБрд╕рдВрдЧрдд рд░рдЦрдирд╛ред
  • FastAPI рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡реИрд▓рд┐рдбреЗрд╢рди рдЬреЛрдбрд╝рдирд╛ред
  • рдХреЛрдб рд░реА-рдпреВрдЬрд╝ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдирд╛ред

рдПрдХ common/a2a_client.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛

рдпрд╣ рд╣рд▓реНрдХреА-рдлреБрд▓реНрдХреА async рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХрд┐рд╕реА рднреА рдПрдЬреЗрдВрдЯ (рд╡рд┐рд╢реЗрд╖рдХрд░ рд╣реЛрд╕реНрдЯ) рдХреЛ /run рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЙрд▓ рдХрд░рдХреЗ A2A рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджреВрд╕рд░реЗ рдПрдЬреЗрдВрдЯ рдХреЛ рдЗрдирд╡реЛрдХ рдХрд░рдиреЗ рджреЗрддреА рд╣реИред

import httpx
async def call_agent(url, payload):
    async with httpx.AsyncClient() as client:
        response = await client.post(url, json=payload, timeout=60.0)
        response.raise_for_status()
        return response.json()

рдпрд╣ рдпреВрдЯрд┐рд▓рд┐рдЯреА httpx рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рджреВрд╕рд░реЗ рдПрдЬреЗрдВрдЯ рдХреЗ /run рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрд░ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ POST рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рднреЗрдЬрддреА рд╣реИред рдпрд╣ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рд╣реБрдЖ JSON рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рд▓реМрдЯрд╛рддреА рд╣реИ рдФрд░ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдЕрд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐ рдЙрдард╛рддреА рд╣реИред

рд╣рдо рдЗрд╕ рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рд╣реЛрд╕реНрдЯ рдПрдЬреЗрдВрдЯ рдореЗрдВ flight_agent, stay_agent рдФрд░ activities_agent рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред

рдПрдХ common/a2a_server.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛

рдкреНрд░рддреНрдпреЗрдХ рдПрдЬреЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо FastAPI рд░реВрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рдмрдЬрд╛рдп, рд╣рдо рдЗрд╕реЗ create_app(agent) рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЬрд░рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдирд┐рдореНрди рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ:

  • /run рдкрд░ рдПрдЬреЗрдВрдЯ рдХреЛ рд╕рд░реНрд╡ рдХрд░рдирд╛
  • рдпрд╛рддреНрд░рд╛ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
  • рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рд▓реМрдЯрд╛рдирд╛
from fastapi import FastAPI
import uvicorn
def create_app(agent):
    app = FastAPI()
    @app.post("/run")
    async def run(payload: dict):
        return await agent.execute(payload)
    return app

рдпрд╣ рдпреВрдЯрд┐рд▓рд┐рдЯреА рдПрдХ рдорд╛рдирдХ /run рд░реВрдЯ рдХреЗ рд╕рд╛рде FastAPI рдРрдк рдмрдирд╛рддреА рд╣реИ рдЬреЛ рджрд┐рдП рдЧрдП рдПрдЬреЗрдВрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдбреЗрд▓реАрдЧреЗрдЯ рдХрд░рддреА рд╣реИред рдпрд╣ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб JSON рдЗрдирдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд╕рдВрдЧрдд рдПрдЬреЗрдВрдЯ-рдЯреВ-рдПрдЬреЗрдВрдЯ (A2A) рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИред

рд╕рд╛рде рдорд┐рд▓рдХрд░, рдпреЗ рд╕рд╛рдЭрд╛ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рд╣рдорд╛рд░реЗ рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЕрдзрд┐рдХ рдореЗрдВрдЯреЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп, рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдФрд░ Google рдХреА A2A рдлрд┐рд▓реЙрд╕рдлрд╝реАтАФрд╕рд░рд▓, рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдЗрдВрдЯрд░-рдПрдЬреЗрдВрдЯ рдореИрд╕реЗрдЬрд┐рдВрдЧтАФрдХреЗ рдЕрдиреБрд░реВрдк рдмрдирд╛рддреЗ рд╣реИрдВред

рд╕реНрдЯреЗрдк 3: ADK рдФрд░ A2A рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдирд╛

рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд╛рдЭрд╛ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рдФрд░ рдпреВрдЯрд┐рд▓рд┐рдЯреАрдЬрд╝ рдореМрдЬреВрдж рд╣реИрдВ, рддреЛ рдЖрдЗрдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рдПрдЬреЗрдВрдЯреНрд╕ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЙрдбреНрдпреВрд▓рд░ рдФрд░ рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Google рдХреЗ A2A рдкреНрд░реЛрдЯреЛрдХреЙрд▓тАФрдПрдХ рд╕рд░рд▓ HTTP-рдЖрдзрд╛рд░рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕тАФрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдПрдЬреЗрдВрдЯреНрд╕ рдХреЛ рд╕реБрд╕рдВрдЧрдд рдФрд░ рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд▓ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред

A2A (Agent-to-Agent) рдПрдЬреЗрдВрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдкреНрд▓рдЧ-рдПрдВрдб-рдкреНрд▓реЗ рдХреЛрдСрд░реНрдбрд┐рдиреЗрд╢рди рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╡реЗ рд▓реЛрдХрд▓ Python рдлрдВрдХреНрд╢рдВрд╕ рд╣реЛрдВ рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рдкрд░ рд╣реЛрд╕реНрдЯреЗрдбред рдкреНрд░рддреНрдпреЗрдХ рдПрдЬреЗрдВрдЯ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдХреАрдорд╛ рдХреЗ рд╕рд╛рде /run рдПрдВрдбрдкреЙрдЗрдВрдЯ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реЗрд╡рд╛ рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдбреЗрдореЛ рдореЗрдВ рдЪрд╛рд░ рдПрдЬреЗрдВрдЯреНрд╕ рд╣реИрдВ:

  • host_agent: рдЕрдиреНрдп рд╕рднреА рдПрдЬреЗрдВрдЯреНрд╕ рдХреЛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ
  • flight_agent: рдЙрдкрдпреБрдХреНрдд рдлреНрд▓рд╛рдЗрдЯ рдвреВрдВрдврддрд╛ рд╣реИ
  • stay_agent: рдард╣рд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рд╕реБрдЭрд╛рддрд╛ рд╣реИ
  • activities_agent: рд╕реНрдерд╛рдиреАрдп рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИ

рд╕рднреА рдПрдЬреЗрдВрдЯреНрд╕ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рд╣реИрдВ, 3 рдлрд╛рдЗрд▓реЛрдВ рдФрд░ рдПрдХ рд╕рдмрдлреЛрд▓реНрдбрд░ рдХреЗ рд╕рд╛рде:

agents/
тФЬтФАтФА host_agent/
тФВ   тФВ   тФЬтФАтФА agent.py              # Optional if host logic is minimal
тФВ   тФВ   тФЬтФАтФА task_manager.py       # Calls other agents and aggregates responses
тФВ   тФВ   тФЬтФАтФА __main__.py           # Starts FastAPI app via common/a2a_server.py
тФВ   тФВ   тФФтФАтФА .well-known/
тФВ   тФВ       тФФтФАтФА agent.json        # A2A Agent Card metadata
тФЬтФАтФА flight_agent/
тФЬтФАтФА stay_agent/
тФФтФАтФА activities_agent/

рд╣рд░ рдПрдЬреЗрдВрдЯ google.adk.agents.Agent, рдПрдХ LiteLlm рдореЙрдбрд▓ рд░реИрдкрд░, рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП Runner рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред activities_agent рдлреЛрд▓реНрдбрд░ рдХреЗ рднреАрддрд░ рдирд┐рдореНрди рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВ, рдФрд░ рдпрд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ flight_agent рдФрд░ stay_agent рдХреЗ рд▓рд┐рдП рджреЛрд╣рд░рд╛рдПрдБред

рдПрдХ agent.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛

рдЕрдм рд╣рдо рдЕрдкрдиреЗ activities_agent рдХреА рд▓реЙрдЬрд┐рдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдпрд╛рддреНрд░рд╛ рдпреЛрдЬрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░реЛрдЪрдХ рд╕реНрдерд╛рдиреАрдп рдЕрдиреБрднрд╡ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред┬а

рд╕реНрдЯреЗрдк 1: рдЗрдореНрдкреЛрд░реНрдЯреНрд╕

рд╣рдо рдЕрдкрдиреЗ рдПрдЬреЗрдВрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

from google.adk.agents import Agent
from google.adk.models.lite_llm import LiteLlm
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.genai import types
import json

рдпрд╣ рдПрдЬреЗрдВрдЯ Google ADK рдХреЗ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдЬреИрд╕реЗ Agent, ' Runner, ' рдФрд░ LiteLlm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ InMemorySessionService рдХреЗ рдЬрд░рд┐рдП рд╕реНрдЯреЗрдЯ рдореИрдиреЗрдЬрдореЗрдВрдЯ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред Types рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдкреНрд░реЙрдореНрдкреНрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рд╣реЛрддреА рд╣реИред

рд╕реНрдЯреЗрдк 2: рдПрдХреНрдЯрд┐рд╡рд┐рдЯреАрдЬрд╝ рдПрдЬреЗрдВрдЯ┬а

рдЕрдм, рд╣рдо ADK рдХреА Agent рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдЬреЗрдВрдЯ рдХреЛ рд╣реА рдЗрдВрд╕реНрдЯреИрдВрд╢рд┐рдПрдЯ рдХрд░рддреЗ рд╣реИрдВред

activities_agent = Agent(
    name="activities_agent",
    model=LiteLlm("openai/gpt-4o"),
    description="Suggests interesting activities for the user at a destination.",
    instruction=(
        "Given a destination, dates, and budget, suggest 2-3 engaging tourist or cultural activities. "
        "For each activity, provide a name, a short description, price estimate, and duration in hours. "
        "Respond in plain English. Keep it concise and well-formatted."
    )
)

instruction рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╣ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдореНрдкреНрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ LLM рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рднрд▓реЗ рд╣реА рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЕрдВрдЧреНрд░реЗрдЬрд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк рдЖрд╕рд╛рди рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП instruction рдХреЛ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб JSON рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╣реЗрддреБ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реНрдЯреЗрдк 3: рд╕реЗрд╢рди рдореИрдиреЗрдЬрдореЗрдВрдЯ

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рдВрд╕ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реЗрд╢рди рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде Runner рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред

session_service = InMemorySessionService()
runner = Runner(
    agent=activities_agent,
    app_name="activities_app",
    session_service=session_service
)
USER_ID = "user_activities"
SESSION_ID = "session_activities"

Runner рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдРрдк рд╕реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдЬреЗрдВрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдореИрдиреЗрдЬ рдХрд░рддрд╛ рд╣реИред рд╡рд╣реАрдВ InMemorySessionService рдХреНрд▓рд╛рд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░, рд╣рдо рдпреВрдЬрд╝рд░ рдФрд░ рд╕реЗрд╢рди IDs рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░реЛрдбрдХреНрд╢рди рдореЗрдВ рдпреЗ рдбрд╛рдпрдиреЗрдорд┐рдХ рдпрд╛ рдпреВрдЬрд╝рд░-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ LLM рдПрдЬреЗрдВрдЯ рдХреЛ рдХреЛрдИ рдкреНрд░реЙрдореНрдкреНрдЯ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдирдпрд╛ ADK рд╕реЗрд╢рди рдореМрдЬреВрдж рд╣реЛред

рд╕реНрдЯреЗрдк 4: рдПрдЬреЗрдВрдЯ рд▓реЙрдЬрд┐рдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛

execute() рдлрд╝рдВрдХреНрд╢рди рдЗрдирдХрдорд┐рдВрдЧ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИ, рдкреНрд░реЙрдореНрдкреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдореЙрдбрд▓ рдХреЛ рдЗрдирд╡реЛрдХ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред

async def execute(request):
    session_service.create_session(
        app_name="activities_app",
        user_id=USER_ID,
        session_id=SESSION_ID
    )
    prompt = (
        f"User is flying to {request['destination']} from {request['start_date']} to {request['end_date']}, "
        f"with a budget of {request['budget']}. Suggest 2-3 activities, each with name, description, price estimate, and duration. "
        f"Respond in JSON format using the key 'activities' with a list of activity objects."
    )
    message = types.Content(role="user", parts=[types.Part(text=prompt)])
    async for event in runner.run_async(user_id=USER_ID, session_id=SESSION_ID, new_message=message):
        if event.is_final_response():
            response_text = event.content.parts[0].text
            try:
                parsed = json.loads(response_text)
                if "activities" in parsed and isinstance(parsed["activities"], list):
                    return {"activities": parsed["activities"]}
                else:
                    print("'activities' key missing or not a list in response JSON")
                    return {"activities": response_text}  # fallback to raw text
            except json.JSONDecodeError as e:
                print("JSON parsing failed:", e)
                print("Response content:", response_text)
                return {"activities": response_text}  # fallback to raw text

execute() рдлрд╝рдВрдХреНрд╢рди рдЗрдирдХрдорд┐рдВрдЧ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕тАФрдЬреИрд╕реЗ рдЧрдВрддрд╡реНрдп, рддрд╛рд░реАрдЦреЗрдВ рдФрд░ рдмрдЬрдЯтАФрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░реЙрдореНрдкреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдЕрдВрджрд░рдЦрд╛рдиреЗ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ:

  • рдкреНрд░реЙрдореНрдкреНрдЯ рдореЙрдбрд▓ рдХреЛ рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рд╕рдореЗрдЯреЗ рд╣реБрдП рдПрдХ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб JSON рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИред
  • рдПрдХ Content рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ ADK Runner рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЬреЗрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдореЙрдбрд▓ рдХреЗ рдЕрдВрддрд┐рдо рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
  • рдЬрдм рдЕрдВрддрд┐рдо рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ, рдПрдЬреЗрдВрдЯ рдХрдЪреНрдЪреЗ рдЯреЗрдХреНрд╕реНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ JSON рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред
  • рдпрджрд┐ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рдлрд▓ рд╣реЛрддреА рд╣реИ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд activities рдХреБрдВрдЬреА рдореМрдЬреВрдж рд╣реЛрддреА рд╣реИ, рддреЛ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдпрджрд┐ рдХреБрдВрдЬреА рдЧреБрдо рд╣реИ рдпрд╛ рд╡рд┐рдХреГрдд рд╣реИ, рддреЛ рдлреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд░реЙ рдЯреЗрдХреНрд╕реНрдЯ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ UI рдХреЗ рдкрд╛рд╕ рдлрд┐рд░ рднреА рдЙрдкрдпреЛрдЧреА рдЖрдЙрдЯрдкреБрдЯ рд╣реЛред
  • рдпрд╣ рдбреБрдЕрд▓-рд╣реИрдВрдбрд▓рд┐рдВрдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рддрдм рднреА рд╕рд╣рдЬ рдЕрдиреБрднрд╡ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрдм LLM рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб JSON рдХреА рдмрдЬрд╛рдп рд╕рд╛рджрд╛ рдЯреЗрдХреНрд╕реНрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдпрд╣ рд░рдгрдиреАрддрд┐ рдордЬрд╝рдмреВрддреА рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдореЙрдбрд▓ рдЖрдЙрдЯрдкреБрдЯ рддрд╛рдкрдорд╛рди рдпрд╛ рдкреНрд░реЙрдореНрдкреНрдЯ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рдХрд╛рд░рдг рдереЛрдбрд╝рд╛-рдмрд╣реБрдд рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ task_manager.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛

agent.py рдХреЗ рдЕрдВрджрд░ execute() рд▓реЙрдЬрд┐рдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдм рд╣рдо рдЗрд╕реЗ task_manager.py рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ADK-рдХрдореНрдкреИрдЯрд┐рдмрд▓ рд╕рд░реНрд╡рд░ рд╕реЗрдЯрдЕрдк рдореЗрдВ рд╡рд╛рдпрд░ рдХрд░рддреЗ рд╣реИрдВред

from .agent import execute
async def run(payload):
    return await execute(payload)

рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдкрд╣рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд execute() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдкрддрд▓рд╛ рд░реИрдкрд░ рдХрд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдпрд╣ run() рдореЗрдердб рдХреЛ рдмрд╛рд╣рд░реА рдореЙрдбреНрдпреВрд▓реНрд╕тАФрдЦрд╛рд╕рдХрд░ __main__.py рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯтАФрдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддреА рд╣реИред

рдПрдХ __main__.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛

__main__.py рдлрд╝рд╛рдЗрд▓ рдкреЛрд░реНрдЯ 8003 рдкрд░ рдПрдХ FastAPI рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд░рддреА рд╣реИ, рдЬреЛ рдПрдЬреЗрдВрдЯ рдХреЛ /run рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрд░ рд╕рд░реНрд╡ рдХрд░рддреА рд╣реИред

from common.a2a_server import create_app
from .task_manager import run
app = create_app(agent=type("Agent", (), {"execute": run}))
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, port=8003)

рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ:

  • create_app() (common/a2a_server.py рд╕реЗ) рд╣рдорд╛рд░реЗ рдПрдЬреЗрдВрдЯ рдХреЛ рдПрдХ рдорд╛рдирдХ A2A-рдХрдореНрдкреИрдЯрд┐рдмрд▓ FastAPI рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рд░реИрдк рдХрд░рддрд╛ рд╣реИред
  • рд╣рдо рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдРрд╕рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ execute() рдореЗрдердб рд╣реЛ рддрд╛рдХрд┐ ADK, run() рдХреЛ рдареАрдХ рд╕реЗ рдЗрдирд╡реЛрдХ рдХрд░ рд╕рдХреЗред
  • рдпрд╣ рдкреГрдердХреНрдХрд░рдг рд╣рдореЗрдВ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ API рдЗрдВрдЯрд░рдлреЗрд╕реЗрдЬрд╝ рдмрдирд╛рдП рд░рдЦрдиреЗ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХреЛрд░ рдПрдЬреЗрдВрдЯ рд▓реЙрдЬрд┐рдХ рдХреЛ рд░реА-рдпреВрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ .well-known/agent.json рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛

рд╣рдо рдЗрд╕ JSON рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ A2A (Agent-to-Agent) рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рдПрдЬреЗрдВрдЯ рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рдЙрджреНрджреЗрд╢реНрдп рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред

{
    "name": "activity_agent",
    "description": "Agent providing activity details."
  }

рдиреЛрдЯ: рднрд▓реЗ рд╣реА рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣рдорд╛рд░реЗ рдПрдЬреЗрдВрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ .well-known/agent.json рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реЛрддрд╛, рдпрд╣ A2A рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреА рд╣реИ рдФрд░ LangGraph, CrewAI рдпрд╛ Google рдХреЗ рдПрдЬреЗрдВрдЯ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдЬреИрд╕реЗ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдбрд┐рд╕реНрдХрд╡рд░реА, рдЗрдВрдЯреНрд░реЛрд╕реНрдкреЗрдХреНрд╢рди рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреА рдХрдореНрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдЗрд╕реА рддрд░рд╣ рдХреА рд▓реЙрдЬрд┐рдХ flight_agent рдФрд░ stay_agent рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧ рд╣реЛрддреА рд╣реИред

рд╕реНрдЯреЗрдк 4: host_agent рдХреЗ рд╕рд╛рде рд╕рдордиреНрд╡рдп

host_agent рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЗрдВрджреНрд░реАрдп рдкреНрд▓рд╛рдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред host_agent рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдореНрд╕ рдореЗрдВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдгрдп-рдирд┐рд░реНрдорд╛рдг рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдПрдЬреЗрдВрдЯ рдЕрдкрдиреЗ рд╡рд┐рд╢реЗрд╖ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХреЗ, рдЬрдмрдХрд┐ рд╕рдордиреНрд╡рдп рд▓реЙрдЬрд┐рдХ рдХреЗрдВрджреНрд░реАрдХреГрдд рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рди рдХреЗрд╡рд▓ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдФрд░ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдореНрд╕ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рднреА рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рддреАрдиреЛрдВ рдПрдЬреЗрдВрдЯреНрд╕ рдХреЛ рдЙрдирдХреЗ рдПрдХреНрд╕рдкреЛрдЬрд╝реНрдб /run APIs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рдорд╛рди payload рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП host_agent рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдирд┐рдореНрди рдлрд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝реЗрдВред

рдПрдХ agent.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛

рдмреЗрд╕рд┐рдХ рдЗрдореНрдкреЛрд░реНрдЯреНрд╕ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

from google.adk.agents import Agent
from google.adk.models.lite_llm import LiteLlm
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.genai import types

рдпрд╣ рдЗрдореНрдкреЛрд░реНрдЯ рдмреНрд▓реЙрдХ Google ADK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ LLM-рдЖрдзрд╛рд░рд┐рдд рдПрдЬреЗрдВрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдХреЛрд░ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рд▓рд╛рддрд╛ рд╣реИ: Agent рдХреНрд▓рд╛рд╕, рд▓рд╛рдЗрдЯрд╡реЗрдЯ LLM рд░реИрдкрд░, рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП Runner, рдФрд░ рдЗрди-рдореЗрдореЛрд░реА рд╕реЗрд╢рди рдореИрдиреЗрдЬрдореЗрдВрдЯред

host_agent = Agent(
    name="host_agent",
    model=LiteLlm("openai/gpt-4o"),
    description="Coordinates travel planning by calling flight, stay, and activity agents.",
    instruction="You are the host agent responsible for orchestrating trip planning tasks. "
                "You call external agents to gather flights, stays, and activities, then return a final result."
)
session_service = InMemorySessionService()
runner = Runner(
    agent=host_agent,
    app_name="host_app",
    session_service=session_service
)
USER_ID = "user_host"
SESSION_ID = "session_host"

рдКрдкрд░ рдХрд╛ рдХреЛрдб рдкреВрд░реНрдг рдЯреНрд░рд┐рдк рдкреНрд▓рд╛рди рдХреЛрдСрд░реНрдбрд┐рдиреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдЯреЙрдк-рд▓реЗрд╡рд▓ ADK рдПрдЬреЗрдВрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рднрд▓реЗ рд╣реА рдЗрд╕ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рдореЗрдВ рд╣рдо LLM рд╕реЗ рд╕рдм-рдПрдЬреЗрдВрдЯреНрд╕ рдХреЛ рдЗрдирд╡реЛрдХ рдирд╣реАрдВ рдХрд░рддреЗ, рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдореНрдкреНрдЯ рднрд╡рд┐рд╖реНрдп рдХреЗ рдРрд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рднреВрдорд┐рдХрд╛ рддрдп рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ LLM рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЯреВрд▓-рдпреВрдЬрд╝ рдФрд░ рдореЗрдЯрд╛-рд░реАрдЬрд╝рдирд┐рдВрдЧ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред

async def execute(request):
    # Ensure session exists
    session_service.create_session(
        app_name="host_app",
        user_id=USER_ID,
        session_id=SESSION_ID
    )
    prompt = (
        f"Plan a trip to {request['destination']} from {request['start_date']} to {request['end_date']} "
        f"within a total budget of {request['budget']}. Call the flights, stays, and activities agents for results."
    )
    message = types.Content(role="user", parts=[types.Part(text=prompt)])
    async for event in runner.run_async(user_id=USER_ID, session_id=SESSION_ID, new_message=message):
        if event.is_final_response():
            return {"summary": event.content.parts[0].text}

рдпрд╣ execute() рдлрд╝рдВрдХреНрд╢рди рд╣реЛрд╕реНрдЯ рдПрдЬреЗрдВрдЯ рдХреЗ LLM рдХреЗ рдореБрдЦреНрдп рдПрдВрдЯреНрд░реА рдкреНрд╡рд╛рдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдпрд╣:

  • рдПрдХ рд╕реЗрд╢рди рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ (рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдореЗрдореЛрд░реА рд╕рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП)
  • рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдк рд╕реЗ рдпреВрдЬрд╝рд░ рдкреНрд░реЙрдореНрдкреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ
  • ADK рдХреЗ runner.run_async() рдореЗрдердб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдореЙрдбрд▓ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ
  • рдЕрдВрддрддрдГ, рдЕрдВрддрд┐рдо рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ

рдПрдХ task_manager.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛

рдЯрд╛рд╕реНрдХ рдореИрдиреЗрдЬрд░ рд░рд┐рдореЛрдЯ рдПрдЬреЗрдВрдЯреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдФрд░ рдкреВрд░реНрдг рдЯреНрд░рд┐рдк-рдкреНрд▓рд╛рдирд┐рдВрдЧ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдХреЗ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рд▓реЙрдЬрд┐рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЪрд╛рдЗрд▓реНрдб рдПрдЬреЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд┐рд╕ URLs рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ A2A /run рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рдЭрд╛ TravelRequest` JSON рд╕реНрдХреАрдорд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред

from common.a2a_client import call_agent
FLIGHT_URL = "http://localhost:8001/run"
STAY_URL = "http://localhost:8002/run"
ACTIVITIES_URL = "http://localhost:8003/run"

рдЕрдм, рд╣рдо payload рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

async def run(payload):
    #Print what the host agent is sending
    print("Incoming payload:", payload)
    flights = await call_agent(FLIGHT_URL, payload)
    stay = await call_agent(STAY_URL, payload)
    activities = await call_agent(ACTIVITIES_URL, payload)
    # Log outputs
    print("flights:", flights)
    print("stay:", stay)
    print("activities:", activities)
    # Ensure all are dicts before access
    flights = flights if isinstance(flights, dict) else {}
    stay = stay if isinstance(stay, dict) else {}
    activities = activities if isinstance(activities, dict) else {}
    return {
        "flights": flights.get("flights", "No flights returned."),
        "stay": stay.get("stays", "No stay options returned."),
        "activities": activities.get("activities", "No activities found.")
    }

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди call_agent() рд╣реЗрд▓реНрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ payload рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рд╕реЗрд╡рд╛ рддрдХ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рджреМрд░рд╛рди рджреГрд╢реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣реА рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд╣рд╛рдБ рд╕рдЪреНрдЪрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рд▓реЙрдЬрд┐рдХ рд░рд╣рддрд╛ рд╣реИред

рдПрдХ __main__.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛

__main__.py рдлрд╝рд╛рдЗрд▓ рдЙрд╕ FastAPI рд╕рд░реНрд╡рд░ рдХреЗ рдПрдВрдЯреНрд░реА рдкреНрд╡рд╛рдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИ рдЬреЛ рд╣реЛрд╕реНрдЯ рдПрдЬреЗрдВрдЯ рдХреЛ рд░реИрдк рдХрд░рддрд╛ рд╣реИред┬а

from common.a2a_server import create_app
from .task_manager import run
app = create_app(agent=type("Agent", (), {"execute": run}))
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, port=8000)

рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдпрд╣ рдХрд░рддреА рд╣реИ:

  • рдпрд╣ common/a2a_server.py рдХреА create_app() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдорд╛рдирдХреАрдХреГрдд /run рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рд╕рд╛рде FastAPI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬрдирд░реЗрдЯ рдХрд░рддреА рд╣реИред
  • рдлрд┐рд░, рдпрд╣ execute() рдореЗрдердб рд╡рд╛рд▓реЗ рдПрдХ рд╕рд░рд▓ рдПрдЬреЗрдВрдЯ-рдЬреИрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рддреА рд╣реИ рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ task_manager.run() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдбреЗрд▓реАрдЧреЗрдЯ рдХрд░рддрд╛ рд╣реИред
  • рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреЛрд░реНрдЯ (рдЖрдорддреМрд░ рдкрд░ 8000) рдкрд░ uvicorn рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ FastAPI рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддреА рд╣реИред

рдпрд╣ рд╣реЛрд╕реНрдЯ рдПрдЬреЗрдВрдЯ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдЕрдиреНрдп рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдПрдЬреЗрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рднрд░ рдореЗрдВ рд╕реБрд╕рдВрдЧрддрддрд╛ рдмрдиреА рд░рд╣рддреА рд╣реИред

рдПрдХ .well-known/agent.json рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛

рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рдкреИрдЯрд░реНрди рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИ рдЬрд╣рд╛рдБ рдПрдХ рдХреЗрдВрджреНрд░реАрдп рдиреЛрдб рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдбреЗрд▓реАрдЧреЗрдЯ рдФрд░ рдХрдВрдкреЛрдЬрд╝ рдХрд░рддрд╛ рд╣реИред┬а

{
  "name": "host_agent",
  "description": "Coordinates travel planning among specialized agents."
}

рдпрджреНрдпрдкрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдЬреИрд╕рд╛ рдкрд╣рд▓реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛, рдЗрд╕реЗ рд╕рднреА рдПрдЬреЗрдВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реАрдЬрд╝ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЕрднреНрдпрд╛рд╕ рд╣реИред

рд╕реНрдЯреЗрдк 5: Streamlit рдХреЗ рд╕рд╛рде UI рдмрдирд╛рдирд╛

рдЕрдВрддрддрдГ, рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдРрдк рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдБ рджрд░реНрдЬ рдХрд░ рд╕рдХреЗрдВ рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдпрд╛рддреНрд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВред рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдПрдХ travel_ui.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдХрд░ рдирд┐рдореНрди рдХреЛрдб рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

import streamlit as st
import requests

рд╣рдо UI рд╕рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП Streamlit рдФрд░ requests рдЬреИрд╕реА рдмреЗрд╕рд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВред

st.set_page_config(page_title="ADK-Powered Travel Planner", page_icon="тЬИя╕П")
st.title("ЁЯМН ADK-Powered Travel Planner")
origin = st.text_input("Where are you flying from?", placeholder="e.g., New York")
destination = st.text_input("Destination", placeholder="e.g., Paris")
start_date = st.date_input("Start Date")
end_date = st.date_input("End Date")
budget = st.number_input("Budget (in USD)", min_value=100, step=50)
if st.button("Plan My Trip тЬи"):
    if not all([origin, destination, start_date, end_date, budget]):
        st.warning("Please fill in all the details.")
    else:
        payload = {
            "origin": origin,
            "destination": destination,
            "start_date": str(start_date),
            "end_date": str(end_date),
            "budget": budget
        }
        response = requests.post("http://localhost:8000/run", json=payload)
        if response.ok:
            data = response.json()
            st.subheader("тЬИя╕П Flights")
            st.markdown(data["flights"])
            st.subheader("ЁЯПи Stays")
            st.markdown(data["stay"])
            st.subheader("ЁЯЧ║я╕П Activities")
            st.markdown(data["activities"])
        else:
            st.error("Failed to fetch travel plan. Please try again.")

Streamlit рдРрдк, ADK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдиреЗ рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рдЯреНрд░реИрд╡рд▓ рдкреНрд▓рд╛рдирд░ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдЕрдиреБрдХреВрд▓ UI рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рд╣рдо рдХреБрдЫ рдмрд╛рддреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВред

  • рдпрд╣ origin, destination, рддрд╛рд░реАрдЦреЗрдВ рдФрд░ рдмрдЬрдЯ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП text_input, date_input рдФрд░ number_input рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  • тАЬPlan My TripтАЭ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рд╡реИрд▓рд┐рдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдлрд╝реАрд▓реНрдб рдЦрд╛рд▓реА рди рд░рд╣реЗред
  • рдпрджрд┐ рд╡реИрдз рд╣реИ, рддреЛ рдпрд╣ рдПрдХ JSON payload рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ http://localhost:8000/run. рдкрд░ host_agent рдХреЛ POST рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рднреЗрдЬрддрд╛ рд╣реИред
  • host_agent рд╕рднреА рдЪрд╛рдЗрд▓реНрдб рдПрдЬреЗрдВрдЯреНрд╕ (рдлреНрд▓рд╛рдЗрдЯ, рд╕реНрдЯреЗ, рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА) рдХреЛ рдЗрдирд╡реЛрдХ рдХрд░рддрд╛ рд╣реИ, рдЙрдирдХреЗ рд░рд┐рд╕реНрдкреЙрдиреНрд╕реЗрдЬ рдХреЛ рдПрдЧреНрд░реАрдЧреЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдПрдХреАрдХреГрдд рдЯреНрд░реИрд╡рд▓ рдкреНрд▓рд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
  • рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдХреЗ рдлреНрд▓рд╛рдЗрдЯреНрд╕, рд╕реНрдЯреЗрдЬрд╝ рдФрд░ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреАрдЬрд╝ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЗрдбрд░реНрд╕ рдХреЗ рдЕрдВрддрд░реНрдЧрдд st.markdown() рдХреЗ рдЬрд░рд┐рдП рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдпрджрд┐ рдмреИрдХрдПрдВрдб рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ st.error() рдХреЗ рдЬрд░рд┐рдП рдПрдХ рдлреЙрд▓рдмреИрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм, рдЕрдкрдиреА рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рд▓реЛрдХрд▓реА рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

uvicorn agents.host_agent.__main__:app --port 8000 &
uvicorn agents.flight_agent.__main__:app --port 8001 &
uvicorn agents.stay_agent.__main__:app --port 8002 &      
uvicorn agents.activities_agent.__main__:app --port 8003 &
streamlit run travel_ui.py

рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ тАЬPlan My TripтАЭ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛/рдХрд░рддреА рд╣реИ, рддреЛ рд╣реЛрд╕реНрдЯ рдПрдЬреЗрдВрдЯ рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрднрд╛рд▓ рд▓реЗрддрд╛ рд╣реИ, рдПрдЬреЗрдВрдЯреНрд╕ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ рдФрд░ UI рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ:

Google рдХреА Agent Development Kit (ADK) рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рдЧрдП рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП Streamlit рдЗрдВрдЯрд░рдлреЗрд╕

рдЖрдкрдХреА рд╕рдордЧреНрд░ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧреА:

ADK_demo/
тФЬтФАтФА agents/
тФВ   тФЬтФАтФА host_agent/
тФВ   тФВ   тФЬтФАтФА agent.py              
тФВ   тФВ   тФЬтФАтФА task_manager.py      
тФВ   тФВ   тФЬтФАтФА __main__.py         
тФВ   тФВ   тФФтФАтФА .well-known/
тФВ   тФВ       тФФтФАтФА agent.json   
тФВ   тФВ
тФВ   тФЬтФАтФА flight_agent/
тФВ   тФВ   тФЬтФАтФА agent.py        
тФВ   тФВ   тФЬтФАтФА task_manager.py    
тФВ   тФВ   тФЬтФАтФА __main__.py         
тФВ   тФВ   тФФтФАтФА .well-known/
тФВ   тФВ       тФФтФАтФА agent.json        
тФВ   тФВ
тФВ   тФЬтФАтФА stay_agent/
тФВ   тФВ   тФЬтФАтФА agent.py              
тФВ   тФВ   тФЬтФАтФА task_manager.py       
тФВ   тФВ   тФЬтФАтФА __main__.py           
тФВ   тФВ   тФФтФАтФА .well-known/
тФВ   тФВ       тФФтФАтФА agent.json     
тФВ   тФВ
тФВ   тФФтФАтФА activities_agent/
тФВ       тФЬтФАтФА agent.py              
тФВ       тФЬтФАтФА task_manager.py       
тФВ       тФЬтФАтФА __main__.py           
тФВ       тФФтФАтФА .well-known/
тФВ           тФФтФАтФА agent.json       
тФВ
тФЬтФАтФА common/
тФВ   тФЬтФАтФА a2a_client.py             # Utility to send requests to other agents
тФВ   тФФтФАтФА a2a_server.py             # Shared FastAPI A2A-compatible server template
тФВ
тФЬтФАтФА shared/
тФВ   тФФтФАтФА schemas.py                # Shared Pydantic schema
тФВ
тФЬтФАтФА streamlit_app.py             # Frontend UI for user input and response rendering
тФЬтФАтФА requirements.txt           
тФФтФАтФА README.md                    

Google рдХреА Agent Development Kit (ADK) рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рдЧрдП рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП Streamlit рдЗрдВрдЯрд░рдлреЗрд╕

Google рдХреА Agent Development Kit (ADK) рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рдЧрдП рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП Streamlit рдЗрдВрдЯрд░рдлреЗрд╕

Google рдХреА Agent Development Kit (ADK) рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рдЧрдП рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП Streamlit рдЗрдВрдЯрд░рдлреЗрд╕

Google рдХреА Agent Development Kit (ADK) рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рдЧрдП рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП Streamlit рдЗрдВрдЯрд░рдлреЗрд╕

рдФрд░ рдмрд╕! рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рднреА рд╣рдордиреЗ рдмрдирд╛рдпрд╛ рд╣реИ, рдЙрд╕реЗ рдЗрд╕ GitHub рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖

рд╕рд┐рд░реНрдл рдХреБрдЫ FastAPI рдРрдкреНрд╕ рдФрд░ ADK рдПрдЬреЗрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде, рд╣рдордиреЗ рдПрдХ рд╕рд╣рдпреЛрдЧреА рдЯреНрд░реИрд╡рд▓ рдкреНрд▓рд╛рдирд░ рдмрдирд╛рдпрд╛ рдЬреЛ:

  • A2A рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЬрд░рд┐рдП рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ
  • рдлреНрд▓рд╛рдЗрдЯ, рд╕реНрдЯреЗ рдФрд░ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреАрдЬрд╝ рдХреЗ рд▓рд┐рдП LLM рдПрдЬреЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
  • рдирддреАрдЬреЛрдВ рдХреЛ рд╕рд╛рдл-рд╕реБрдерд░реЗ Streamlit UI рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдХрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ

рднрд▓реЗ рд╣реА рд╕рднреА рдПрдЬреЗрдВрдЯреНрд╕ рднреАрддрд░рдЦрд╛рдиреЗ рдПрдХ рд╣реА рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реЛрдВ, рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рд╣реИтАФрдпрд╛рдиреА рдПрдЬреЗрдВрдЯреНрд╕ рдХреА рднреВрдорд┐рдХрд╛рдПрдБ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░рд┐рдпрд╛рдБ рдкреГрдердХ рд╣реИрдВ рдФрд░ рд╕рдВрдЪрд╛рд░ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рд╣реИред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдВрд╕рд╛рдзрди рдпрд╣рд╛рдБ рд╣реИрдВ:

Aashi Dutt

рд▓реЗрдЦрдХ

Aashi Dutt

рдореИрдВ рдПрдордПрд▓ (Gen AI) рдореЗрдВ Google Developers Expert, Kaggle 3x Expert, рдФрд░ Women Techmakers рдПрдВрдмреЗрд╕рдбрд░ рд╣реВрдБ, рддрдерд╛ рддрдХрдиреАрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ 3+ рд╡рд░реНрд╖реЛрдВ рдХрд╛ рдЕрдиреБрднрд╡ рд░рдЦрддреА рд╣реВрдБред рдореИрдВрдиреЗ 2020 рдореЗрдВ рдПрдХ рд╣реЗрд▓реНрде-рдЯреЗрдХ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреА рд╕рд╣-рд╕реНрдерд╛рдкрдирд╛ рдХреА рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ Georgia Tech рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ рдорд╛рд╕реНрдЯрд░ рдХрд░ рд░рд╣реА рд╣реВрдБ, рдЬрд┐рд╕рдореЗрдВ рдореЗрд░рд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреНрд╖реЗрддреНрд░ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рд╣реИред

рд╡рд┐рд╖рдп