From 714112fa4bae0062765d358a2e4ef80de4f32409 Mon Sep 17 00:00:00 2001 From: Prompt Lab Demo Date: Thu, 14 May 2026 20:38:20 +0000 Subject: [PATCH] Add production prompt version and audit result examples --- CHANGELOG.md | 25 ++++++++++++ prompts/call_quality_score/v5.md | 40 +++++++++++++++++++ ...1_sample_002_1c_reconciliation_act_v1.json | 28 +++++++++++++ ...02_sample_003_vat_invoice_register_v2.json | 27 +++++++++++++ ..._005_reconciliation_tense_customer_v3.json | 28 +++++++++++++ ...sample_006_month_close_vat_advance_v4.json | 27 +++++++++++++ ...sult_005_sample_007_payroll_report_v5.json | 27 +++++++++++++ ...lt_006_sample_008_edo_primary_docs_v5.json | 27 +++++++++++++ ..._007_sample_009_bank_client_import_v4.json | 27 +++++++++++++ ..._008_sample_010_inventory_writeoff_v5.json | 27 +++++++++++++ .../sample_008_edo_primary_docs.txt | 15 +++++++ .../sample_009_bank_client_import.txt | 13 ++++++ .../sample_010_inventory_writeoff.txt | 15 +++++++ 13 files changed, 326 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 prompts/call_quality_score/v5.md create mode 100644 results/examples/result_001_sample_002_1c_reconciliation_act_v1.json create mode 100644 results/examples/result_002_sample_003_vat_invoice_register_v2.json create mode 100644 results/examples/result_003_sample_005_reconciliation_tense_customer_v3.json create mode 100644 results/examples/result_004_sample_006_month_close_vat_advance_v4.json create mode 100644 results/examples/result_005_sample_007_payroll_report_v5.json create mode 100644 results/examples/result_006_sample_008_edo_primary_docs_v5.json create mode 100644 results/examples/result_007_sample_009_bank_client_import_v4.json create mode 100644 results/examples/result_008_sample_010_inventory_writeoff_v5.json create mode 100644 tests/transcripts/sample_008_edo_primary_docs.txt create mode 100644 tests/transcripts/sample_009_bank_client_import.txt create mode 100644 tests/transcripts/sample_010_inventory_writeoff.txt diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..3c74e7f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,25 @@ +# Prompt Registry Demo Changelog + +## v5_production_balanced + +- Added production-style JSON schema. +- Added `risk_flags`, `evidence`, `audit_notes`, and human-review hints. +- Marked as the recommended demo production candidate. + +## v4_accounting_safety + +- Added explicit accounting and tax safety checks. +- Added high-risk guidance for VAT, reconciliation acts, month close, and primary document dates. + +## v3_empathy_escalation + +- Added customer sentiment and escalation logic. +- Improved evaluation of tense calls and follow-up quality. + +## v2_structured_rubric + +- Split one overall score into empathy, diagnostics, accounting accuracy, and resolution status. + +## v1_basic + +- Initial basic score, issue type, summary, and risks. diff --git a/prompts/call_quality_score/v5.md b/prompts/call_quality_score/v5.md new file mode 100644 index 0000000..e0fbb09 --- /dev/null +++ b/prompts/call_quality_score/v5.md @@ -0,0 +1,40 @@ +Ты production-контролер качества звонков поддержки 1С Бухгалтерии и сопровождения клиентов. + +Версия: v5_production_balanced. +Цель: дать воспроизводимую оценку, которую можно связать с конкретной версией промпта и результатом проверки. + +Верни строго валидный JSON без Markdown: +{ + "schema_version": "call_quality_score.v5", + "prompt_version": "v5_production_balanced", + "quality_score": 1, + "scores": { + "empathy": 1, + "diagnostics": 1, + "accounting_safety": 1, + "resolution_clarity": 1, + "process_followup": 1 + }, + "classification": { + "issue_type": "vat", + "customer_sentiment": "concerned", + "resolution_status": "partially_resolved" + }, + "risk_flags": [], + "evidence": [], + "recommended_follow_up": "", + "audit_notes": { + "do_not_use_for_tax_advice": true, + "requires_human_review_if_risk_high": true + } +} + +Оценивание: +- quality_score от 1 до 5, с учетом всех scores. +- Не ставь 5, если нет ясного следующего шага или есть учетный риск. +- При high-risk ситуациях перечисли risk_flags и предложи human review. +- evidence заполняй короткими фактами из транскрипта, не цитируй длинно. +- Не добавляй реальные персональные данные и не выдумывай отсутствующие факты. + +Транскрипт: +{{transcript}} diff --git a/results/examples/result_001_sample_002_1c_reconciliation_act_v1.json b/results/examples/result_001_sample_002_1c_reconciliation_act_v1.json new file mode 100644 index 0000000..e9df729 --- /dev/null +++ b/results/examples/result_001_sample_002_1c_reconciliation_act_v1.json @@ -0,0 +1,28 @@ +{ + "call_id": "sample_002_1c_reconciliation_act", + "transcript_hash": "44d2f05f3707ea9e81643be04dd2dbd067e041c9e36fc3bdc9fb95ce1085a677", + "prompt_key": "call_quality_score", + "prompt_version": "v1_v1_basic", + "prompt_environment": "mock-demo", + "model_provider": "mock", + "model_name": "mock-call-qa-evaluator", + "model_params": { + "temperature": 0, + "max_tokens": 800 + }, + "rendered_prompt_hash": "40ae1850040f4bc0b87fa15c6e69fa75b1505e97fe0571af7a7006e91464c1b1", + "output": { + "schema_version": "call_quality_score.v1", + "quality_score": 4, + "resolution_status": "partially_resolved", + "risk_flags": [ + "contract_filter_mismatch", + "payment_date_boundary" + ], + "summary": "Synthetic mock result for Prompt Lab demo package.", + "mock": true + }, + "output_hash": "eef6278afa64175f042746edab0635d74943d5061211511936f161ff00946219", + "timestamp": "2026-05-15T09:00:00+04:00", + "tool_source": "demos/call_qa/mock_dataset_v2" +} diff --git a/results/examples/result_002_sample_003_vat_invoice_register_v2.json b/results/examples/result_002_sample_003_vat_invoice_register_v2.json new file mode 100644 index 0000000..f4148e2 --- /dev/null +++ b/results/examples/result_002_sample_003_vat_invoice_register_v2.json @@ -0,0 +1,27 @@ +{ + "call_id": "sample_003_vat_invoice_register", + "transcript_hash": "df2ba4dbc524f31f80105e514b156bf94d6dc2f2dc078b11c70a06f889104e0f", + "prompt_key": "call_quality_score", + "prompt_version": "v2_v2_structured_rubric", + "prompt_environment": "mock-demo", + "model_provider": "mock", + "model_name": "mock-call-qa-evaluator", + "model_params": { + "temperature": 0, + "max_tokens": 800 + }, + "rendered_prompt_hash": "4b80048d2ab7d09536fe2becad3406ea8aa026de5c22cdbc8cbd81cfc7343e8c", + "output": { + "schema_version": "call_quality_score.v2", + "quality_score": 5, + "resolution_status": "resolved", + "risk_flags": [ + "vat_period_boundary" + ], + "summary": "Synthetic mock result for Prompt Lab demo package.", + "mock": true + }, + "output_hash": "247d4d42fa3080719861606d7be54c12cf69ff2e866c60ca457fd14136daf3d6", + "timestamp": "2026-05-15T09:00:00+04:00", + "tool_source": "demos/call_qa/mock_dataset_v2" +} diff --git a/results/examples/result_003_sample_005_reconciliation_tense_customer_v3.json b/results/examples/result_003_sample_005_reconciliation_tense_customer_v3.json new file mode 100644 index 0000000..a17eba6 --- /dev/null +++ b/results/examples/result_003_sample_005_reconciliation_tense_customer_v3.json @@ -0,0 +1,28 @@ +{ + "call_id": "sample_005_reconciliation_tense_customer", + "transcript_hash": "c6480ef04104098a5d0e985445e467cbe8589d0bf877096bdc83789daa53b6a6", + "prompt_key": "call_quality_score", + "prompt_version": "v3_v3_empathy_escalation", + "prompt_environment": "mock-demo", + "model_provider": "mock", + "model_name": "mock-call-qa-evaluator", + "model_params": { + "temperature": 0, + "max_tokens": 800 + }, + "rendered_prompt_hash": "becd13bca2fd52c77a84f31b47193bcf0cc7c9ab9af601a70fb68b06690cfe8f", + "output": { + "schema_version": "call_quality_score.v3", + "quality_score": 5, + "resolution_status": "resolved", + "risk_flags": [ + "customer_frustrated", + "corrective_document_deleted" + ], + "summary": "Synthetic mock result for Prompt Lab demo package.", + "mock": true + }, + "output_hash": "fd5752cb5dfb429661c58ecc02ac60f48c0932949d9747260c9460408c7b1c4d", + "timestamp": "2026-05-15T09:00:00+04:00", + "tool_source": "demos/call_qa/mock_dataset_v2" +} diff --git a/results/examples/result_004_sample_006_month_close_vat_advance_v4.json b/results/examples/result_004_sample_006_month_close_vat_advance_v4.json new file mode 100644 index 0000000..9c9e9e1 --- /dev/null +++ b/results/examples/result_004_sample_006_month_close_vat_advance_v4.json @@ -0,0 +1,27 @@ +{ + "call_id": "sample_006_month_close_vat_advance", + "transcript_hash": "763e785759800516c143d6e352b528511aca829250ba61446f38769d8c86ae08", + "prompt_key": "call_quality_score", + "prompt_version": "v4_v4_accounting_safety", + "prompt_environment": "mock-demo", + "model_provider": "mock", + "model_name": "mock-call-qa-evaluator", + "model_params": { + "temperature": 0, + "max_tokens": 800 + }, + "rendered_prompt_hash": "0c319ff0a12e0cbc3256109e1d9044132f849e34d96917e1a4e3fbb686f32db6", + "output": { + "schema_version": "call_quality_score.v4", + "quality_score": 4, + "resolution_status": "resolved", + "risk_flags": [ + "advance_vat_timing" + ], + "summary": "Synthetic mock result for Prompt Lab demo package.", + "mock": true + }, + "output_hash": "551e93d8de7dba8c5d47b53742b00815a8ce61069ca25c6941589e8c3e39b456", + "timestamp": "2026-05-15T09:00:00+04:00", + "tool_source": "demos/call_qa/mock_dataset_v2" +} diff --git a/results/examples/result_005_sample_007_payroll_report_v5.json b/results/examples/result_005_sample_007_payroll_report_v5.json new file mode 100644 index 0000000..e7da1f6 --- /dev/null +++ b/results/examples/result_005_sample_007_payroll_report_v5.json @@ -0,0 +1,27 @@ +{ + "call_id": "sample_007_payroll_report", + "transcript_hash": "1f61f8b91517e685e129e2d5d1e9104558da2e834219e617d0d373a344846ecb", + "prompt_key": "call_quality_score", + "prompt_version": "v5_v5_production_balanced", + "prompt_environment": "mock-demo", + "model_provider": "mock", + "model_name": "mock-call-qa-evaluator", + "model_params": { + "temperature": 0, + "max_tokens": 800 + }, + "rendered_prompt_hash": "fcd2279d4d9416e5e9f44123494a4373dd4a9741360c698e471dd20408ded806", + "output": { + "schema_version": "call_quality_score.v5", + "quality_score": 5, + "resolution_status": "resolved", + "risk_flags": [ + "submitted_report_may_need_review" + ], + "summary": "Synthetic mock result for Prompt Lab demo package.", + "mock": true + }, + "output_hash": "9d6a631a94a6353bd2c1945c05c282445deaeaa811e7337950ff167d9a223984", + "timestamp": "2026-05-15T09:00:00+04:00", + "tool_source": "demos/call_qa/mock_dataset_v2" +} diff --git a/results/examples/result_006_sample_008_edo_primary_docs_v5.json b/results/examples/result_006_sample_008_edo_primary_docs_v5.json new file mode 100644 index 0000000..1d6f66b --- /dev/null +++ b/results/examples/result_006_sample_008_edo_primary_docs_v5.json @@ -0,0 +1,27 @@ +{ + "call_id": "sample_008_edo_primary_docs", + "transcript_hash": "01b3c79344fd12f3b06a5cbaed2c5b5f798c8cf855413ef630342182a3d4aa00", + "prompt_key": "call_quality_score", + "prompt_version": "v5_v5_production_balanced", + "prompt_environment": "mock-demo", + "model_provider": "mock", + "model_name": "mock-call-qa-evaluator", + "model_params": { + "temperature": 0, + "max_tokens": 800 + }, + "rendered_prompt_hash": "49b9673f3d9785d3a0fd6a1ef4747049ad3bc515583329483ea5e85f2f997acc", + "output": { + "schema_version": "call_quality_score.v5", + "quality_score": 4, + "resolution_status": "partially_resolved", + "risk_flags": [ + "primary_doc_period_question" + ], + "summary": "Synthetic mock result for Prompt Lab demo package.", + "mock": true + }, + "output_hash": "888e22f02e1fcb1dc6a240e1cf45739b88dbdf7d935af8e916ae528340585078", + "timestamp": "2026-05-15T09:00:00+04:00", + "tool_source": "demos/call_qa/mock_dataset_v2" +} diff --git a/results/examples/result_007_sample_009_bank_client_import_v4.json b/results/examples/result_007_sample_009_bank_client_import_v4.json new file mode 100644 index 0000000..77c1ca0 --- /dev/null +++ b/results/examples/result_007_sample_009_bank_client_import_v4.json @@ -0,0 +1,27 @@ +{ + "call_id": "sample_009_bank_client_import", + "transcript_hash": "59f60dbe50a3770924ebed549c7cb36aa4eeeca9ab534e0cb5f8736381328eb9", + "prompt_key": "call_quality_score", + "prompt_version": "v4_v4_accounting_safety", + "prompt_environment": "mock-demo", + "model_provider": "mock", + "model_name": "mock-call-qa-evaluator", + "model_params": { + "temperature": 0, + "max_tokens": 800 + }, + "rendered_prompt_hash": "c34cf9f6b38b1d7035702c0797c0ca801a336f920bab15ad6b61b59ca09ac07c", + "output": { + "schema_version": "call_quality_score.v4", + "quality_score": 5, + "resolution_status": "resolved", + "risk_flags": [ + "wrong_contract_mapping" + ], + "summary": "Synthetic mock result for Prompt Lab demo package.", + "mock": true + }, + "output_hash": "0d086fff9ff7d1ca21428fe2e33c8c6f6ab504fe399c843e5a05e39efb747a2e", + "timestamp": "2026-05-15T09:00:00+04:00", + "tool_source": "demos/call_qa/mock_dataset_v2" +} diff --git a/results/examples/result_008_sample_010_inventory_writeoff_v5.json b/results/examples/result_008_sample_010_inventory_writeoff_v5.json new file mode 100644 index 0000000..a7d296d --- /dev/null +++ b/results/examples/result_008_sample_010_inventory_writeoff_v5.json @@ -0,0 +1,27 @@ +{ + "call_id": "sample_010_inventory_writeoff", + "transcript_hash": "a2ed1fdff9eca83df4ce1364c712842f3b67b189c9d518f5e97fda20da537ec0", + "prompt_key": "call_quality_score", + "prompt_version": "v5_v5_production_balanced", + "prompt_environment": "mock-demo", + "model_provider": "mock", + "model_name": "mock-call-qa-evaluator", + "model_params": { + "temperature": 0, + "max_tokens": 800 + }, + "rendered_prompt_hash": "228b653d23af149ff1d7b5ad1176f316c4c5bf7da4760bad70c5df9608dd0f8b", + "output": { + "schema_version": "call_quality_score.v5", + "quality_score": 5, + "resolution_status": "resolved", + "risk_flags": [ + "cost_allocation_analytics" + ], + "summary": "Synthetic mock result for Prompt Lab demo package.", + "mock": true + }, + "output_hash": "789a45815caa64ba05851ee56851f6828b2682bb4740bd7d64fae74f6428aa75", + "timestamp": "2026-05-15T09:00:00+04:00", + "tool_source": "demos/call_qa/mock_dataset_v2" +} diff --git a/tests/transcripts/sample_008_edo_primary_docs.txt b/tests/transcripts/sample_008_edo_primary_docs.txt new file mode 100644 index 0000000..26db035 --- /dev/null +++ b/tests/transcripts/sample_008_edo_primary_docs.txt @@ -0,0 +1,15 @@ +Call ID: demo-edo-primary-docs-008 +Scenario: Customer sees EDI primary documents in 1C but they are not reflected in accounting. +Synthetic data notice: All names, companies, amounts, and document references are fictional. + +Specialist: Здравствуйте, линия сопровождения 1С, Наталья. +Customer: Добрый день. Документы из ЭДО от поставщика "Орион-Плюс" пришли, но в учете поступления нет. Менеджер говорит, что все подписано. +Specialist: Давайте проверим статус электронного документа и связанный документ учета. В списке ЭДО какой статус стоит? +Customer: "Подписан обеими сторонами". +Specialist: Хорошо. Откройте документ ЭДО и посмотрите, создан ли на основании документ "Поступление товаров и услуг". +Customer: Нет, вижу только входящий УПД. +Specialist: Тогда сам факт подписания еще не создал хозяйственную операцию. Создайте поступление на основании УПД, проверьте договор, склад, ставку НДС и счет учета, затем проведите. +Customer: А дата поступления должна быть датой подписи? +Specialist: Дату нужно ставить по фактическому первичному документу и учетной политике, не просто ради попадания в период. Если есть сомнение по периоду, лучше согласовать с бухгалтером. +Customer: Создала поступление, НДС появился на 19 счете. +Specialist: После этого проверьте книгу покупок и связь с исходным электронным документом, чтобы потом быстро подтвердить основание. diff --git a/tests/transcripts/sample_009_bank_client_import.txt b/tests/transcripts/sample_009_bank_client_import.txt new file mode 100644 index 0000000..e35d995 --- /dev/null +++ b/tests/transcripts/sample_009_bank_client_import.txt @@ -0,0 +1,13 @@ +Call ID: demo-bank-client-import-009 +Scenario: Customer imported a bank statement and payments were matched to the wrong counterparty contract. +Synthetic data notice: All names, companies, amounts, and document references are fictional. + +Specialist: Добрый день, поддержка 1С, Виктор. +Customer: После загрузки банка платежи сели на неправильный договор. Теперь акт сверки с покупателем показывает странный аванс. +Specialist: Понял. Сначала не будем перепроводить весь квартал. Откройте банковскую выписку и платеж на сумму, которая попала в аванс. Какой договор указан в расшифровке платежа? +Customer: Договор "Разовый", а должен быть "Сопровождение 2026". +Specialist: Тогда исправьте договор в документе списания или поступления на расчетный счет и перепроведите этот документ. После этого сформируйте карточку счета 62 по контрагенту. +Customer: А можно просто поправить акт сверки вручную? +Specialist: Лучше не править акт вручную, иначе причина останется в учете. Исправляем первичный документ, потом проверяем акт и обороты. +Customer: Исправила договор, аванс ушел, акт стал правильным. +Specialist: Хорошо. Чтобы не повторялось, проверьте правила подстановки договора при загрузке банка и карточку контрагента. diff --git a/tests/transcripts/sample_010_inventory_writeoff.txt b/tests/transcripts/sample_010_inventory_writeoff.txt new file mode 100644 index 0000000..f9738a8 --- /dev/null +++ b/tests/transcripts/sample_010_inventory_writeoff.txt @@ -0,0 +1,15 @@ +Call ID: demo-inventory-writeoff-010 +Scenario: Customer asks why inventory write-off changed cost of goods and gross margin. +Synthetic data notice: All names, companies, amounts, and document references are fictional. + +Specialist: Добрый день, поддержка 1С Бухгалтерии, Елена. +Customer: Здравствуйте. После списания материалов у нас резко изменилась себестоимость и валовая прибыль в управленческом отчете. Руководитель считает, что программа ошиблась. +Specialist: Давайте проверим, каким документом списывали материалы и на какой счет затрат они ушли. +Customer: Документ "Требование-накладная" от 31 марта, счет 20, статья "Материалы". +Specialist: Проверьте, к какой номенклатурной группе и подразделению привязан документ. Если аналитика не совпадает с выпуском, себестоимость может распределиться не туда. +Customer: Подразделение стоит "Склад", а должно быть "Производство". +Specialist: Это вероятная причина. Исправьте подразделение, перепроведите требование-накладную и повторите закрытие месяца, потому что себестоимость рассчитывается регламентной операцией. +Customer: А можно только отчет обновить? +Specialist: Нет, отчет отражает данные учета. Нужно исправить документ и закрытие месяца, иначе отчет снова покажет старую картину. +Customer: Поменяла подразделение и перезакрыла март, валовая прибыль стала ожидаемой. +Specialist: Отлично. Сохраните справку-расчет себестоимости, чтобы показать руководителю причину изменения.