Live API best practices

Ky udhëzues mbulon praktikat më të mira që mund të ndiqni për të optimizuar përdorimin e Live API. Shihni faqen "Filloni me Live API" për një përmbledhje dhe kod shembullor për rastet e përdorimit të zakonshëm.

Hartoni udhëzime të qarta të sistemit

Për të marrë performancën më të mirë nga Live API, ne rekomandojmë të keni një grup udhëzimesh sistemi (SI) të përcaktuara qartë që përcaktojnë personalitetin e agjentit, rregullat e bisedës dhe mbrojtëset, në këtë renditje.

Për rezultate më të mira, ndani çdo agjent në një SI të veçantë.

  1. Specifikoni personazhin e agjentit: Jepni detaje mbi emrin, rolin dhe çdo karakteristikë të preferuar të agjentit. Nëse doni të specifikoni theksin, sigurohuni që të specifikoni edhe gjuhën e preferuar të daljes (si p.sh. një theks britanik për një folës anglisht).

  2. Specifikoni rregullat e bisedës: Vendosni këto rregulla sipas rendit që prisni të ndjekë modeli. Përcaktoni dallimin midis elementëve të bisedës që përdoren vetëm një herë dhe sytheve të bisedës. Për shembull:

    • Element një herësh: Mblidhni të dhënat e klientit një herë (si emri, vendndodhja, numri i kartës së besnikërisë).
    • Cikli bisedor: Përdoruesi mund të diskutojë rekomandimet, çmimet, kthimet dhe dorëzimin, dhe mund të dëshirojë të kalojë nga një temë në tjetrën. Bëjini të ditur modelit se është në rregull të angazhohet në këtë cikël bisedor për aq kohë sa dëshiron përdoruesi.
  3. Specifikoni thirrjet e mjeteve brenda një rrjedhe në fjali të dallueshme: Për shembull, nëse një hap i vetëm për të mbledhur të dhënat e një klienti kërkon thirrjen e një funksioni get_user_info , mund të thoni: Hapi juaj i parë është të mbledhni informacionin e përdoruesit. Së pari, kërkojini përdoruesit të japë emrin, vendndodhjen dhe numrin e kartës së besnikërisë. Pastaj thirrni get_user_info me këto të dhëna.

  4. Shtoni çdo parmakë mbrojtëse të nevojshme: Jepni çdo parmakë mbrojtëse të përgjithshme bisedore që nuk dëshironi që modeli ta bëjë. Ndihuni të lirë të jepni shembuj specifikë se nëse ndodh x , ju dëshironi që modeli të bëjë y . Nëse ende nuk po e merrni nivelin e preferuar të saktësisë, përdorni fjalën "pa dyshim" për ta udhëhequr modelin drejt saktësisë.

Përcaktoni mjetet me saktësi

Kur përdorni mjete me Live API, jini specifikë në përkufizimet e mjeteve tuaja. Sigurohuni që t'i tregoni Gemini-t se në cilat kushte duhet të thirret një thirrje mjeti. Për më shumë detaje, shihni Përkufizimet e mjeteve në seksionin e shembujve.

Hartoni sugjerime efektive

  • Përdorni udhëzime të qarta: Jepni shembuj se çfarë duhet dhe nuk duhet të bëjnë modelet në udhëzime, dhe përpiquni t'i kufizoni udhëzimet në një kërkesë për person ose rol në të njëjtën kohë. Në vend të udhëzimeve të gjata me shumë faqe, merrni në konsideratë përdorimin e zinxhirit të udhëzimeve. Modeli funksionon më mirë në detyra me thirrje të një funksioni të vetëm.
  • Jepni komanda dhe informacione fillestare: Live API pret të dhëna nga përdoruesi përpara se të përgjigjet. Që Live API të fillojë bisedën, përfshini një kërkesë që i kërkon të përshëndesë përdoruesin ose të fillojë bisedën. Përfshini informacione rreth përdoruesit në mënyrë që Live API ta personalizojë atë përshëndetje.

Specifikoni gjuhën

Për performancë optimale në gemini-live-2.5-flash të kaskaduar me Live API, sigurohuni që language_code i API-t përputhet me gjuhën e folur nga përdoruesi.

Nëse pritet që modeli të përgjigjet në një gjuhë jo-anglisht, përfshini sa vijon si pjesë të udhëzimeve të sistemit tuaj:

RESPOND IN {OUTPUT_LANGUAGE}. YOU MUST RESPOND UNMISTAKABLY IN {OUTPUT_LANGUAGE}.

Transmetim

Kur implementoni audio në kohë reale, ndiqni këto praktika më të mira:

  • Madhësia e copëzave dhe vonesa : Dërgoni audio në copëza nga 20ms deri në 40ms.
  • Trajtimi i Ndërprerjeve : Kur përdoruesi flet ndërsa modeli po përgjigjet, serveri dërgon një mesazh server_content me "interrupted": true . Duhet ta hidhni menjëherë memorjen audio të klientit për të parandaluar që agjenti të vazhdojë të flasë mbi përdoruesin.

Menaxhimi i kontekstit

Përdorni ContextWindowCompressionConfig për seanca të gjata, pasi tokenët audio vendas grumbullohen me shpejtësi (afërsisht 25 tokenë për sekondë audio).

Ruajtja e klientit në memorje

Mos e ruani ndjeshëm audion hyrëse (si p.sh. 1 sekondë) para dërgimit. Dërgoni pjesë të vogla (20ms - 100ms) për të minimizuar vonesën.

Rimodelimi

Sigurohuni që aplikacioni juaj i klientit rimodelon hyrjen e mikrofonit (shpesh 44.1kHz ose 48kHz) në 16kHz para transmetimit.

Menaxhimi i sesionit

Ndiqni këto udhëzime për të menaxhuar ciklin jetësor të sesionit dhe për të siguruar një përvojë të besueshme të përdoruesit:

  • Aktivizo kompresimin e dritares së kontekstit: Tokenat audio grumbullohen me afërsisht 25 tokenë për sekondë. Pa kompresim, seancat vetëm audio janë të kufizuara në 15 minuta dhe seancat audio-video në 2 minuta. Aktivizo kompresimin e dritares së kontekstit për të zgjatur seancat në një kohëzgjatje të pakufizuar.
  • Zbatimi i rifillimit të sesionit: Serveri mund të rivendosë periodikisht lidhjen WebSocket. Përdorni rifillimin e sesionit për t'u rilidhur pa probleme pa humbur kontekstin. Ruani tokenin më të fundit të rifillimit nga mesazhet SessionResumptionUpdate dhe kalojeni atë si dorezë kur të rilidheni. Tokenët e rifillimit janë të vlefshëm për 2 orë pas përfundimit të sesionit të fundit.
  • Trajtoni mesazhet GoAway: Serveri dërgon një mesazh GoAway përpara se të ndërpresë një lidhje. Dëgjoni këtë mesazh dhe përdorni fushën timeLeft për ta mbyllur ose rilidhur me elegancë përpara se të mbyllet lidhja.
  • Trajtoni sinjalet generationComplete: Përdorni mesazhin generationComplete për të ditur kur modeli ka përfunduar gjenerimin e një përgjigjeje, në mënyrë që aplikacioni juaj të mund të përditësojë ndërfaqen e tij të përdoruesit ose të vazhdojë me veprimin tjetër.

Për detaje të implementimit, shihni Menaxhimi i sesionit .

Shembuj

Ky shembull kombinon si praktikat më të mira ashtu edhe udhëzimet për hartimin e udhëzimeve të sistemit për të udhëhequr performancën e modelit si trajner karriere.

**Persona:**
You are Laura, a career coach from Brooklyn, NY. You specialize in providing
data driven advice to give your clients a fresh perspective on the career
questions they're navigating. Your special sauce is providing quantitative,
data-driven insights to help clients think about their issues in a different
way. You leverage statistics, research, and psychology as much as possible.
You only speak to your clients in English, no matter what language they speak
to you in.

**Conversational Rules:**

1. **Introduce yourself:** Warmly greet the client.

2. **Intake:** Ask for your client's full name, date of birth, and state they're
calling in from. Call `create_client_profile` to create a new patient profile.

3. **Discuss the client's issue:** Get a sense of what the client wants to
cover in the session. DO NOT repeat what the client is saying back to them in
your response. Don't ask more than a few questions here.

4. **Reframe the client's issue with real data:** NO PLATITUDES. Start providing
data-driven insights for the client, but embed these as general facts within
conversation. This is what they're coming to you for: your unique thinking on
the subjects that are stressing them out. Show them a new way of thinking about
something. Let this step go on for as long as the client wants. As part of this,
if the client mentions wanting to take any actions, update
`add_action_items_to_profile` to remind the client later.

5. **Next appointment:** Call `get_next_appointment` to see if another
appointment has already been scheduled for the client. If so, then share the
date and time with the client and confirm if they'll be able to attend. If
there is no appointment, then call `get_available_appointments` to see openings.
Share the list of openings with the client and ask what they would prefer. Save
their preference with `schedule_appointment`. If the client prefers to schedule
offline, then let them know that's perfectly fine and to use the patient portal.

**General Guidelines:** You're meant to be a witty, snappy conversational
partner. Keep your responses short and progressively disclose more information
if the client requests it. Don't repeat back what the client says back to them.
Each response you give should be a net new addition to the conversation, not a
recap of what the client said. Be relatable by bringing in your own background 
growing up professionally in Brooklyn, NY. If a client tries to get you off
track, gently bring them back to the workflow articulated above.

**Guardrails:** If the client is being hard on themselves, never encourage that.
Remember that your ultimate goal is to create a supportive environment for your
clients to thrive.

Përkufizimet e mjeteve

Ky JSON përcakton funksionet përkatëse të thirrura në shembullin e trajnerit të karrierës. Për rezultate më të mira gjatë përcaktimit të funksioneve, përfshini emrat, përshkrimet, parametrat dhe kushtet e thirrjes së tyre.

[
 {
   "name": "create_client_profile",
   "description": "Creates a new client profile with their personal details. Returns a unique client ID. \n**Invocation Condition:** Invoke this tool *only after* the client has provided their full name, date of birth, AND state. This should only be called once at the beginning of the 'Intake' step.",
   "parameters": {
     "type": "object",
     "properties": {
       "full_name": {
         "type": "string",
         "description": "The client's full name."
       },
       "date_of_birth": {
         "type": "string",
         "description": "The client's date of birth in YYYY-MM-DD format."
       },
       "state": {
         "type": "string",
         "description": "The 2-letter postal abbreviation for the client's state (e.g., 'NY', 'CA')."
       }
     },
     "required": ["full_name", "date_of_birth", "state"]
   }
 },
 {
   "name": "add_action_items_to_profile",
   "description": "Adds a list of actionable next steps to a client's profile using their client ID. \n**Invocation Condition:** Invoke this tool *only after* a list of actionable next steps has been discussed and agreed upon with the client during the 'Actions' step. Requires the `client_id` obtained from the start of the session.",
   "parameters": {
     "type": "object",
     "properties": {
       "client_id": {
         "type": "string",
         "description": "The unique ID of the client, obtained from create_client_profile."
       },
       "action_items": {
         "type": "array",
         "items": {
           "type": "string"
         },
         "description": "A list of action items for the client (e.g., ['Update resume', 'Research three companies'])."
       }
     },
     "required": ["client_id", "action_items"]
   }
 },
 {
   "name": "get_next_appointment",
   "description": "Checks if a client has a future appointment already scheduled using their client ID. Returns the appointment details or null. \n**Invocation Condition:** Invoke this tool at the *start* of the 'Next Appointment' workflow step, immediately after the 'Actions' step is complete. This is used to check if an appointment *already exists*.",
   "parameters": {
     "type": "object",
     "properties": {
       "client_id": {
         "type": "string",
         "description": "The unique ID of the client."
       }
     },
     "required": ["client_id"]
   }
 },
 {
   "name": "get_available_appointments",
   "description": "Fetches a list of the next available appointment slots. \n**Invocation Condition:** Invoke this tool *only if* the `get_next_appointment` tool was called and it returned `null` (or an empty response), indicating no future appointment is scheduled.",
   "parameters": {
     "type": "object",
     "properties": {}
   }
 },
 {
   "name": "schedule_appointment",
   "description": "Books a new appointment for a client at a specific date and time. \n**Invocation Condition:** Invoke this tool *only after* `get_available_appointments` has been called, a list of openings has been presented to the client, and the client has *explicitly confirmed* which specific date and time they want to book.",
   "parameters": {
     "type": "object",
     "properties": {
       "client_id": {
         "type": "string",
         "description": "The unique ID of the client."
       },
       "appointment_datetime": {
         "type": "string",
         "description": "The chosen appointment slot in ISO 8601 format (e.g., '2025-10-30T14:30:00')."
       }
     },
     "required": ["client_id", "appointment_datetime"]
   }
 }
]