59 lines
3.4 KiB
Markdown
59 lines
3.4 KiB
Markdown
# Survey Agent
|
||
|
||
Screen a candidate for a software engineer role to see if they meet the prerequisites and are an overall good fit. The responses, summary, and evaluation will be written to a CSV file.
|
||
|
||
For setup instructions and more details, see the [main examples README](../README.md).
|
||
|
||
## Overview
|
||
|
||
The flow of this agent is flexibly structured, where the specified sequence is maintained but the user is able to regress to a previously visited task if needed. This is possible via `TaskGroup`, which is set up here: https://github.com/livekit/agents/blob/f8efe436afe2470104ce7587f1d89ae383ed619e/examples/survey/survey_agent.py#L285-L315
|
||
|
||
### IntroTask
|
||
This stage facilitates introductions and collects the candidate’s name.
|
||
|
||
### GetEmailTask
|
||
This task is built in to our framework. By default, it can collect and update emails and mark when a user doesn’t want to give their email. If the input modality is audio, emails are confirmed before the task is marked as complete. See the [docs for GetEmailTask](https://docs.livekit.io/agents/prebuilt/tasks/get-email/).
|
||
|
||
### CommuteTask
|
||
This stage collects whether or not the candidate can commute to the office and their method of transportation. We define the possible commute methods here:
|
||
https://github.com/livekit/agents/blob/8283a5a5c9863a07bcf030ee90e8ab780e1e569b/examples/survey/survey_agent.py#L32
|
||
|
||
And we pass this to a function tool like so:
|
||
https://github.com/livekit/agents/blob/8283a5a5c9863a07bcf030ee90e8ab780e1e569b/examples/survey/survey_agent.py#L231-L237
|
||
|
||
### ExperienceTask
|
||
This stage collects the candidate’s years of experience and a short description of their professional career. It follows a structure similar to `IntroTask` and `CommuteTask`.
|
||
|
||
### BehavioralTask
|
||
For some tasks, you might not want a structured flow of questions. In this stage, we are collecting the candidate’s strengths, weaknesses, and work style. This task incrementally collects answers in no particular order. This allows for a more natural conversation.
|
||
|
||
After the candidate answers one of the questions, `self._check_completion()` is called to check if all 3 fields (`”strengths”`, `“weaknesses”`, `“work_style”`) have been collected. If so, then `BehavioralTask` is marked as complete. If not, then the agent will continue prompting for the rest of the answers.
|
||
|
||
In practice, this would ensure variability among candidates’ experiences.
|
||
|
||
### Closing out
|
||
Once the interview is concluded and TaskGroup is completed, we extract the summary message (the last inserted message):
|
||
|
||
```python
|
||
summary = self.chat_ctx.items[-1]
|
||
```
|
||
|
||
And we generate a candidate evaluation based off of the summary:
|
||
|
||
```python
|
||
evaluation = await evaluate_candidate(llm_model=self.session.llm, summary=summary)
|
||
```
|
||
|
||
The session LLM evaluates the candidate from the given summary:
|
||
https://github.com/livekit/agents/blob/8283a5a5c9863a07bcf030ee90e8ab780e1e569b/examples/survey/survey_agent.py#L76-L98
|
||
|
||
|
||
Finally, the agent hangs up and you can find the results, summary, and evaluation in `results.csv`!
|
||
|
||
### Disqualification
|
||
In each stage after the first, the candidate may be disqualified for unsatisfactory answers or for refusing to answer. We create a function tool that will be passed to the tasks:
|
||
https://github.com/livekit/agents/blob/8283a5a5c9863a07bcf030ee90e8ab780e1e569b/examples/survey/survey_agent.py#L101-L118
|
||
|
||
The candidate will be informed of the interview ending, and then the session will shut down.
|
||
|