Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

README.md

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.

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.

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):

summary = self.chat_ctx.items[-1]

And we generate a candidate evaluation based off of the summary:

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.