> For clean Markdown of any page, append `.md` to the page URL.
> For a complete documentation index, see https://docs.sarvam.ai/llms.txt.
> For full documentation content in one file, see https://docs.sarvam.ai/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.sarvam.ai/_mcp/server.

# EdTech Voice Tutors

> Architecture, model configuration, and pitfalls for building voice-based tutoring agents with Sarvam AI.

A voice tutor has different priorities than a contact-center bot. Clarity and patience matter more than shaving milliseconds off every turn, and factual accuracy matters more than in almost any other vertical: a hallucinated collections policy is annoying, but a hallucinated math step teaches a student the wrong thing.

This guide covers the architecture and tuning common to EdTech voice agents, then walks through the [Tutor Agent](/api-reference-docs/cookbook/Examples/Tutor_Agent_Pipecat) example as the concrete implementation.

**In short:** slow the TTS down, let the LLM reason through step-by-step problems, and turn on `wiki_grounding` for anything factual so the tutor doesn't confidently teach something wrong.

## Architecture

```
Student Audio → STT (streaming) → Context Aggregator → LLM (reasoning-friendly) → TTS (streaming, slower pace) → Student
```

This is the standard voice-agent pipeline with a few deliberate changes from a latency-first setup like IVR:

Unlike a single-intent contact-center call, a tutoring session builds on itself. A student's question 10 turns in often references something explained earlier, so keep the full session in context (within the model's context window) rather than resetting per question.

Math and science explanations benefit from the model actually reasoning through steps before answering. This is a case where the latency cost of `reasoning_effort` is worth paying, unlike routine conversational turns elsewhere.

Set `pace` below the 1.0 conversational default. Students need time to process spoken explanations, especially numbers and multi-step instructions.

For "what is X" or "explain Y" style questions, especially history, science, and general knowledge, use `wiki_grounding` to retrieve and cite real content instead of relying purely on the model's parametric knowledge.

## Recommended models & params

| Layer      | Setting                                                                                 | Why                                                                                                                                                                                                                                               |
| ---------- | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| STT        | `saaras:v3`, `mode="transcribe"`, `language="unknown"`                                  | Students code-mix (Hinglish, Tanglish) constantly, especially when discussing technical terms in English within a regional-language conversation                                                                                                  |
| LLM        | `sarvam-105b` for problem-solving and explanations; `sarvam-30b` for quick fact lookups | Step-by-step math/science reasoning benefits from the larger model's reasoning depth, and session pacing is more forgiving of latency here than in a live phone call                                                                              |
| LLM params | `wiki_grounding=True` for factual/general-knowledge questions                           | Reduces hallucination on "explain X" questions. See [Improve response factual accuracy](/api-reference-docs/chat-completion/How-to/wiki_grounding)                                                                                                |
| TTS        | `bulbul:v3`, WebSocket streaming, `pace=0.9`, `temperature=0.6`                         | Matches the "EdTech Narration" preset in [TTS Best Practices](/api-reference-docs/text-to-speech/best-practices#11-use-case-quick-reference): slightly slower than the conversational default, natural enough to hold a young learner's attention |
| Speaker    | A clear, articulate voice (e.g. `ishita`) rather than one optimized purely for warmth   | Intelligibility matters more than personality when the content is instructional                                                                                                                                                                   |

## Latency targets

EdTech is more tolerant of latency than telephony IVR. A 1–2 second pause while `sarvam-105b` reasons through a step-by-step explanation reads as "thinking," not as a dropped connection, especially in an app UI where you can show a typing/thinking indicator.

* Don't let it drift too far, though: still use streaming STT and streaming TTS so the student hears the first words of a response quickly, even while the full explanation is still generating.
* For quick factual lookups (definitions, quick facts) that don't need deep reasoning, route to `sarvam-30b` to keep the interaction snappy. Save the extra latency budget for genuinely hard problems.

## Pitfalls

An EdTech bot that confidently states something wrong is worse than one that says "let me think about that differently." Enable `wiki_grounding` for factual/general-knowledge questions rather than trusting the model's parametric memory unconditionally.

The 1.0 conversational default is tuned for natural dialogue, not for a student parsing a multi-step algebra explanation for the first time. Use `pace=0.9` (or slower) as the default for instructional content specifically.

The [Tutor Agent](/api-reference-docs/cookbook/Examples/Tutor_Agent_Pipecat) system prompt explicitly instructs the model to "ask questions to check understanding" and adapt explanations. Don't skip this in your own prompt: a tutor that only lectures isn't actually tutoring.

`reasoning_effort` (and the default "low" thinking mode) adds latency and cost. That's fine for problem-solving but wasted on "good job, next question" style turns. Consider disabling it (`reasoning_effort=None`) for short acknowledgement or encouragement turns.

A single generic system prompt won't serve a 6th grader and a 12th grader equally well. Pass grade level and subject as session context rather than baking one difficulty level into the prompt.

## Full example

The [Tutor Agent](/api-reference-docs/cookbook/Examples/Tutor_Agent_Pipecat) guide has the complete, runnable code (Pipecat-based). The teaching-approach portion of the system prompt:

```python
messages = [
    {
        "role": "system",
        "content": """You are an expert tutor designed to help students understand and excel in their studies.
...
Teaching approach:
- Start with the basics and build up to complex concepts
- Use real-world examples and analogies to explain abstract concepts
- Break down complex problems into smaller, manageable steps
- Encourage students and praise their efforts
- Ask questions to check understanding
- Adapt your explanations based on the student's level
""",
    },
]
```

TTS tuned for instructional pacing:

```python
tts = SarvamTTSService(
    api_key=os.getenv("SARVAM_API_KEY"),
    target_language_code="en-IN",
    model="bulbul:v3",
    speaker="ishita",
    pace=0.9,  # Slightly slower for better understanding
)
```