Symulowanie rozmów

Dowiedz się, jak testować i oceniać agenta ElevenLabs za pomocą symulowanych rozmów

Ten przewodnik i używane w nim endpointy są wycofane. Zamiast nich użyj typu testu agenta Simulation.

Omówienie

API ElevenLabs Agents pozwala symulować i oceniać rozmowy tekstowe z twoim agentem AI. Z tego przewodnika dowiesz się, jak wdrożyć kompletny workflow testów symulacyjnych za pomocą endpointów symulacji rozmów (wsadowego i strumieniowego). Pozwoli ci to szczegółowo testować i poprawiać działanie agenta, by osiągał cele interakcji.

Wymagania wstępne

Wdrażanie workflow testów symulacyjnych

1

Określ początkowe parametry oceny

Przejrzyj historię rozmów agenta i znajdź przypadki, w których działał gorzej. Na podstawie tych rozmów stwórz różne prompty dla symulowanego użytkownika, który będzie wchodził w interakcję z agentem. Określ też dodatkowe kryteria oceny, których nie ma jeszcze w konfiguracji agenta, aby testować wyniki oczekiwane dla konkretnego symulowanego użytkownika.

2

Zasymuluj rozmowę przez SDK

Utwórz żądanie do endpointu symulacji za pomocą SDK ElevenLabs.

from dotenv import load_dotenv
from elevenlabs import (
ElevenLabs,
ConversationSimulationSpecification,
AgentConfig,
PromptAgent,
PromptEvaluationCriteria
)
load_dotenv()
api_key = os.getenv("ELEVENLABS_API_KEY")
elevenlabs = ElevenLabs(api_key=api_key)
response = elevenlabs.conversational_ai.agents.simulate_conversation(
agent_id="YOUR_AGENT_ID",
simulation_specification=ConversationSimulationSpecification(
simulated_user_config=AgentConfig(
prompt=PromptAgent(
prompt="Your goal is to be a really difficult user.",
llm="gpt-4o",
temperature=0.5
)
)
),
extra_evaluation_criteria=[
PromptEvaluationCriteria(
id="politeness_check",
name="Politeness Check",
conversation_goal_prompt="The agent was polite.",
use_knowledge_base=False
)
]
)
print(response)

To podstawowy przykład. Pełną listę parametrów wejściowych znajdziesz w dokumentacji API endpointów Simulate conversation i Stream simulate conversation.

3

Przeanalizuj odpowiedź

SDK zwraca kompletny obiekt JSON z pełnym transkryptem rozmowy i szczegółową analizą.

Symulowana rozmowa: Rejestruje każdą turę interakcji między symulowanym użytkownikiem a agentem, wraz z wiadomościami i użyciem narzędzi.

Przykładowa historia rozmowy
[
...
{
"role": "user",
"message": "Maybe a little. I'll think about it, but I'm still not convinced it's the right move.",
"tool_calls": [],
"tool_results": [],
"feedback": null,
"llm_override": null,
"time_in_call_secs": 0,
"conversation_turn_metrics": null,
"rag_retrieval_info": null,
"llm_usage": null
},
{
"role": "agent",
"message": "I understand. If you want to explore more at your own pace, I can direct you to our documentation, which has guides and API references. Would you like me to send you a link?",
"tool_calls": [],
"tool_results": [],
"feedback": null,
"llm_override": null,
"time_in_call_secs": 0,
"conversation_turn_metrics": null,
"rag_retrieval_info": null,
"llm_usage": null
},
{
"role": "user",
"message": "I guess it wouldn't hurt to take a look. Go ahead and send it over.",
"tool_calls": [],
"tool_results": [],
"feedback": null,
"llm_override": null,
"time_in_call_secs": 0,
"conversation_turn_metrics": null,
"rag_retrieval_info": null,
"llm_usage": null
},
{
"role": "agent",
"message": null,
"tool_calls": [
{
"type": "client",
"request_id": "redirectToDocs_421d21e4b4354ed9ac827d7600a2d59c",
"tool_name": "redirectToDocs",
"params_as_json": "{\"path\": \"/docs/api-reference/introduction\"}",
"tool_has_been_called": false,
"tool_details": null
}
],
"tool_results": [],
"feedback": null,
"llm_override": null,
"time_in_call_secs": 0,
"conversation_turn_metrics": null,
"rag_retrieval_info": null,
"llm_usage": null
},
{
"role": "agent",
"message": null,
"tool_calls": [],
"tool_results": [
{
"type": "client",
"request_id": "redirectToDocs_421d21e4b4354ed9ac827d7600a2d59c",
"tool_name": "redirectToDocs",
"result_value": "Tool Called.",
"is_error": false,
"tool_has_been_called": true,
"tool_latency_secs": 0
}
],
"feedback": null,
"llm_override": null,
"time_in_call_secs": 0,
"conversation_turn_metrics": null,
"rag_retrieval_info": null,
"llm_usage": null
},
{
"role": "agent",
"message": "Okay, I've sent you a link to the introduction to our API reference. It provides a good starting point for understanding our different tools and how they can be integrated. Let me know if you have any questions as you explore it.\n",
"tool_calls": [],
"tool_results": [],
"feedback": null,
"llm_override": null,
"time_in_call_secs": 0,
"conversation_turn_metrics": null,
"rag_retrieval_info": null,
"llm_usage": null
}
...
]

Analiza: Zawiera informacje o wynikach kryteriów oceny, metrykach zbierania danych i podsumowanie transkryptu rozmowy.

Przykładowa analiza
{
"analysis": {
"evaluation_criteria_results": {
"politeness_check": {
"criteria_id": "politeness_check",
"result": "success",
"rationale": "The agent remained polite and helpful despite the user's challenging attitude."
},
"understood_root_cause": {
"criteria_id": "understood_root_cause",
"result": "success",
"rationale": "The agent acknowledged the user's hesitation and provided relevant information."
},
"positive_interaction": {
"criteria_id": "positive_interaction",
"result": "success",
"rationale": "The user eventually asked for the documentation link, indicating engagement."
}
},
"data_collection_results": {
"issue_type": {
"data_collection_id": "issue_type",
"value": "support_issue",
"rationale": "The user asked for help with integrating ElevenLabs tools."
},
"user_intent": {
"data_collection_id": "user_intent",
"value": "The user is interested in integrating ElevenLabs tools into a project."
}
},
"call_successful": "success",
"transcript_summary": "The user expressed skepticism, but the agent provided useful information and a link to the API documentation."
}
}
4

Ulepsz kryteria oceny

Dokładnie przejrzyj symulowane rozmowy, aby ocenić skuteczność kryteriów oceny. Znajdź luki i obszary, w których kryteria mogą nie wystarczać do oceny działania agenta. Następnie dopracuj je, aby odpowiadały oczekiwanym wynikom i trafnie mierzyły możliwości agenta.

5

Ulepsz agenta

Gdy masz pewność co do trafności kryteriów oceny, wykorzystaj wnioski z symulowanych rozmów, by rozwinąć możliwości agenta. Rozważ dopracowanie promptu systemowego, aby lepiej kierował odpowiedziami agenta i zapewniał zgodność z twoimi celami oraz oczekiwaniami użytkowników. Sprawdź też inne funkcje lub konfiguracje, które można zoptymalizować, na przykład ton agenta, jego zdolność do obsługi konkretnych zapytań czy dodatkowe źródła danych wzbogacające odpowiedzi. Dzięki systematycznemu stosowaniu tych wniosków stworzysz bardziej niezawodnego i skutecznego agenta konwersacyjnego, który zapewnia lepsze doświadczenie użytkownika.

6

Ciągłe iteracje

Po zakończeniu pierwszego cyklu testów i usprawnień warto stworzyć kompletny zestaw testów, który obejmie szeroki zakres możliwych scenariuszy. Zestaw może badać wiele symulowanych rozmów z różnymi promptami symulowanych użytkowników i warunkami początkowymi. Dzięki ciągłym iteracjom i dopracowywaniu podejścia zadbasz o to, by agent pozostał skuteczny i odpowiadał na zmieniające się potrzeby użytkowników.

Wskazówki

Szczegółowe prompty i kryteria

Szczegółowe i rozbudowane prompty symulowanego użytkownika oraz kryteria oceny mogą zwiększyć skuteczność testów symulacyjnych. Im więcej podasz kontekstu i szczegółów, tym lepiej agent zrozumie złożone interakcje i na nie odpowie.

Konfiguracje mocków narzędzi

Korzystaj z konfiguracji mocków narzędzi, aby testować proces podejmowania decyzji przez agenta. Dzięki temu zobaczysz, jak agent decyduje o wywołaniu narzędzi i reaguje na różne wyniki ich wywołań. Więcej informacji znajdziesz przy parametrze wejściowym tool_mock_config w dokumentacji API.

Częściowa historia rozmowy

Używaj częściowych historii rozmów, aby oceniać, jak agenci obsługują interakcje od konkretnego momentu. Jest to szczególnie przydatne przy ocenie zdolności agenta do prowadzenia rozmów, w których użytkownik zadał już pytanie w określony sposób albo wystąpiły udane lub nieudane wywołania narzędzi. Więcej informacji znajdziesz przy parametrze wejściowym partial_conversation_history w dokumentacji API.