CallLens
CallLens
Открытый инструмент анализа разговоров и оценки поведения на базе LangGraph.
Загрузите звонок. CallLens расшифровывает его, реконструирует разговор, измеряет детерминированные метрики общения, оценивает семантическое поведение по настраиваемым рубрикам, проверяет подтверждающие доказательства и формирует объяснимую аналитику разговора.
CallLens превращает сырые разговоры — записи или транскрипты — в структурированную поведенческую аналитику с подтверждением доказательствами: диаризованные транскрипты, метрики времени речи и темпа, продольный анализ тональности, темы, обнаружение возможностей/рисков и аналитика по каждому представителю — всё оценивается по декларативным версионируемым рубрикам.
Каждая семантическая оценка подтверждена доказательствами. Никогда просто Discovery: 8/10. Вместо этого:
Discovery: 8.7/10
Confidence: 0.91
Evidence:
04:32 Representative asks customer about their current operational bottleneck.
05:17 Representative asks about business impact.
07:02 Customer explains delivery delays.
Missing behavior:
Representative never established urgency or implementation timeframe.Пользователи нажимают на временную метку, и аудиоплеер переходит к этому точному моменту.
Зачем это существует
Большинство инструментов оценки звонков либо (a) отправляют весь транскрипт в LLM и просят дать оценку, либо (b) подсчитывают ключевые слова. CallLens не делает ни того, ни другого:
Многоэтапная оценка — извлечение кандидатных доказательств → детерминированная проверка → оценка по рубрикам → проверка согласованности → порог уверенности → ограниченная повторная оценка. Никогда не используется единый запрос «оцени этот транскрипт».
Детерминированно где возможно, семантически только где нужно — время речи, слова в минуту, перебивания, реплики и паузы — это чистый Python. LLM используются для рассуждений: тональность, темы, намерения, поведение, коучинг.
Изоляция провайдеров — абстракция речи (сегодня ElevenLabs) и абстракция LLM (OpenAI / Anthropic / любая OpenAI-совместимая конечная точка), так что ничего не привязано к одному вендору.
Аудируемость по дизайну — каждый анализ записывает версии модели, промпта, рубрики и конвейера.
Related MCP server: sales-chat-quality
Архитектура
flowchart TD
A[Audio / Transcript] --> B[Ingestion]
B --> C[ElevenLabs STT + Diarization]
C --> D[Transcript Normalization]
D --> E[LangGraph]
E --> F[Deterministic Metrics]
E --> G[Semantic Analysis]
G --> H[Sentiment]
G --> I[Topics]
G --> J[Intents]
F --> K[Evidence Verification]
H --> K
I --> K
J --> K
K --> L[Confidence Gate]
L -->|sufficient| M[Report]
L -->|insufficient| N[Bounded Re-score]
N --> KСм. docs/ARCHITECTURE.md, docs/LANGGRAPH.md и docs/DATA_MODEL.md.
Быстрый старт
Docker (рекомендуется)
cp .env.example .env
docker compose upAPI + документация OpenAPI: http://localhost:8000/docs
Дашборд: http://localhost:3000
Для запуска не требуются API-ключи: без ELEVENLABS_API_KEY речевой провайдер и LLM для рассуждений переключаются на детерминированные офлайн-заглушки, так что весь конвейер (транскрибация → метрики → оценка по рубрикам с подтверждением доказательствами → коучинг) работает от начала до конца.
Локально (Python)
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
# Analyze a transcript (offline, deterministic)
calllens analyze sample.txt
# Start the API server
calllens server
# Run the evaluation harness
calllens eval runФронтенд
cd apps/web
npm install
NEXT_PUBLIC_API_URL=http://localhost:8000 npm run devCLI
calllens analyze call.mp3
calllens analyze call.mp3 --rubric consultative_sales --output report.json
calllens rubric list
calllens rubric validate ./my_rubric.yaml
calllens eval run
calllens serverPython SDK
import asyncio
from calllens import CallLens
async def main():
async with CallLens(base_url="http://localhost:8000") as client:
call = await client.calls.upload("sales-call.mp3")
await call.analyze(rubric="consultative_sales")
report = await call.report()
print(report["overall_score"], report["confidence"])
asyncio.run(main())REST API (подмножество)
POST /api/v1/calls upload a recording or transcript
GET /api/v1/calls
GET /api/v1/calls/{id}
POST /api/v1/calls/{id}/analyze
GET /api/v1/calls/{id}/analysis the evidence-backed CallReport
GET /api/v1/calls/{id}/transcript
DELETE /api/v1/calls/{id} privacy/retention deletion
POST /api/v1/rubrics register a declarative rubric
GET /api/v1/rubrics
POST /api/v1/rubrics/validate
GET /api/v1/reps/{id}/analytics
POST /api/v1/evals/runИнтерактивная документация по адресу /docs.
Рубрики
Рубрики — это декларативные и версионируемые YAML-документы. Сам движок универсален — продажи это лишь первая встроенная рубрика. Приносите свои: поддержка клиентов, подбор персонала, взыскание задолженности, страхование, недвижимость, успех клиента, собеседования, AI-голосовые агенты.
name: consultative_sales
version: "1.0"
dimensions:
rapport:
label: Rapport
weight: 0.08
discovery:
label: Problem Discovery
weight: 0.16Веса измерений должны в сумме давать 1.0. См. rubrics/ и docs/custom-rubrics.
Провайдеры
Слой | Провайдер | Конфигурация |
Речь (STT/TTS) | ElevenLabs Scribe v2 |
|
LLM для рассуждений | OpenAI |
|
LLM для рассуждений | Anthropic |
|
LLM для рассуждений | Любая OpenAI-совместимая конечная точка |
|
LLM для рассуждений | Офлайн-заглушка (по умолчанию) |
|
Все тесты и CI выполняются с заглушками — никаких платных API-вызовов.
Пример: живой анализ с реальными провайдерами
Настройте оба провайдера в .env и проанализируйте реальную запись:
# .env — speech + reasoning
ELEVENLABS_API_KEY=sk_...
ELEVENLABS_STT_MODEL=scribe_v2
# Any OpenAI-compatible endpoint, e.g. Melious (https://api.melious.ai/v1)
LLM_PROVIDER=compatible
COMPATIBLE_BASE_URL=https://api.melious.ai/v1
COMPATIBLE_API_KEY=sk-mel-...
LLM_MODEL=gpt-oss-120bЗатем запустите полный конвейер на записи — это должен быть предварительно записанный файл звонка (MP3/WAV), но вы можете синтезировать его, если у вас нет под рукой записи:
# Option A — you have a recording: transcribe + analyze it live
# (Scribe v2 STT → metrics → evidence-backed scoring → coaching)
calllens analyze call.mp3 --rubric consultative_sales --output report.json
# Option B — no recording? Synthesize a two-speaker sample call with ElevenLabs TTS
python examples/generate_sample_call.py # → sample_call.mp3
calllens analyze sample_call.mp3 --rubric consultative_sales --output report.json
# Both write the evidence-backed report (scores + timestamped evidence + coaching)
# to report.json; omit --output to print it to stdout.Конечная точка
compatibleдолжна поддерживать структурированные выходные данные OpenAI JSON-schema (response_format: {type: "json_schema"}) — от этого зависитstructured_completionконвейера. Не каждая модель на каждом шлюзе это поддерживает; например,gpt-oss-120bна Melious работает, а некоторые другие (GLM, Kimi, DeepSeek v4 на Melious) отклоняют режим схемы. Проверьте с помощью небольшого структурированного вызова, прежде чем остановиться на модели.
MCP / MCPize
CallLens поставляется с MCP-сервером, предоставляющим analyze_transcript, score_dimension и list_rubrics, развертываемым на MCPize:
mcpize analyze && mcpize doctor && mcpize deployЛокальный stdio:
pip install -r requirements.txt
python mcp-server/server.pyОценка
| Dimension | MAE | Correlation |
|-----------|-----|-------------|
| Discovery | .61 | .88 |
| Rapport | .74 | .81 |Тестовый стенд (calllens.evals) запускает полный конвейер на синтетическом наборе данных из 13 сценариев (отличный продавец, плохой продавец, слабое выявление потребностей, злой клиент, многоязычность, …) и сообщает MAE, RMSE, корреляцию и точность/полноту доказательств по сравнению с метками человеческого качества.
Дорожная карта
См. docs/ROADMAP.md. Основные моменты: аутентификация Supabase/RLS и объектное хранилище, асинхронные бэкенды заданий (Redis/SQS), запросы к дашборду GraphQL, режим живого звонка, режим ролевой игры с ИИ, тренды по каждому представителю, мониторинг дрейфа.
Безопасность и конфиденциальность
API-ключи существуют только в переменных окружения; они никогда не фиксируются в коде, не логируются и не передаются в браузер.
Записи звонков считаются чувствительными: изоляция арендаторов, приватное/подписанное хранилище, удаление и настраиваемый срок хранения.
Полные транскрипты по умолчанию никогда не логируются.
См. SECURITY.md и docs/ARCHITECTURE.md.
Лицензия
MIT © Yabloko Labs
This server cannot be deployed
Maintenance
Related MCP Connectors
Test the voice agents you run: scored transcripts, pass/fail verdicts, latency and WER metrics.
Build datasets and rubrics, then run evals that score your AI in Caliper.
451AI call analysis and voice agents for sales teams. Signup, usage, agents and call data over MCP.
- RulebaseOAuthco.rulebase
CX ops: read conversations, calls and QA evaluations from Zendesk, Freshdesk, Five9 and more.
Related MCP Servers
- AlicenseAqualityFmaintenanceProvides advanced analysis of conversations from Limitless Pendant recordings, including intelligent meeting detection, action item extraction, natural language time queries, and comprehensive conversation analytics with smart pagination support.1422 npm24MIT
- FlicenseNot gradedqualityBmaintenanceEnables collection and scoring of sales chat conversations via CDP, computing response times and generating evidence-linked LLM quality reviews.-
- AlicenseAqualityDmaintenanceEnables querying and analyzing Genesys Cloud data such as queues, conversations, voice call quality, sentiment, topics, transcripts, and OAuth client usage through natural language.1025 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables coding agents to run offline voice-agent call forensics over local stdio, scoring recordings and reading/verifying evidence to isolate failures. It also proposes fixes and regression checks so broken calls can be pinned and prevented from shipping again.49 PyPI2MIT