ОРРКЕСТРАЦИЯ - Усилить agent loop object-centric аудитом и добить pronoun follow-up по документам закупки

This commit is contained in:
2026-04-14 18:47:38 +03:00
parent cb0eb450d7
commit 97b2a9b028
19 changed files with 469 additions and 44 deletions
+66 -15
View File
@@ -41,9 +41,9 @@
"buyer_candidate": "Департамент капитального ремонта города Москвы"
},
"question_pool": {
"total_questions": 20,
"total_questions": 21,
"core_questions_total": 17,
"followup_checkpoints_total": 3,
"followup_checkpoints_total": 4,
"questions": [
{
"question_id": "Q01",
@@ -224,6 +224,15 @@
"role": "critical_child",
"wording_family": "ui_selected_object_colloquial",
"semantic_goal": "проверить selected-object follow-up в закупочные документы без ручного переписывания item"
},
{
"question_id": "Q21",
"text": "покажи документы по этой позиции",
"layer": "selected_item_provenance",
"node_id": "N05_selected_item_purchase_documents",
"role": "critical_child",
"wording_family": "pronoun_followup",
"semantic_goal": "проверить короткий местоименный follow-up по активному товару без съезда в counterparty drilldown"
}
]
},
@@ -247,6 +256,10 @@
{
"family_id": "followup_date_carryover",
"description": "follow-up с фразой `на эту дату` или `на ту дату`, где дата обязана тянуться из предыдущего шага"
},
{
"family_id": "pronoun_followup",
"description": "короткий follow-up по активному объекту через местоимение или указатель типа `по ней`, `по этой позиции`, `ее`"
}
],
"scenario_tree": {
@@ -277,8 +290,8 @@
"covers_question_ids": ["Q06", "Q19"],
"expected_intents": ["inventory_purchase_provenance_for_item"],
"expected_answer_shape": "direct_supplier_answer_first_then_evidence",
"required_wording_families": ["canonical", "colloquial", "ui_selected_object", "ui_selected_object_colloquial"],
"required_carryover_invariants": ["selected_object", "date_scope", "warehouse_scope", "organization_scope"],
"required_wording_families": ["canonical", "colloquial", "ui_selected_object", "ui_selected_object_colloquial", "pronoun_followup"],
"required_carryover_invariants": ["selected_object", "focus_object", "date_scope", "warehouse_scope", "organization_scope", "reusable_bundle"],
"children": ["N04_selected_item_purchase_date", "N05_selected_item_purchase_documents", "N09_old_purchase_aging"]
},
{
@@ -293,11 +306,11 @@
{
"node_id": "N05_selected_item_purchase_documents",
"title": "Закупочные документы выбранного товара",
"covers_question_ids": ["Q10", "Q20"],
"covers_question_ids": ["Q10", "Q20", "Q21"],
"expected_intents": ["inventory_purchase_documents_for_item"],
"expected_answer_shape": "document_list_for_selected_item",
"required_wording_families": ["canonical", "ui_selected_object", "ui_selected_object_colloquial"],
"required_carryover_invariants": ["selected_object", "date_scope", "warehouse_scope"]
"required_wording_families": ["canonical", "ui_selected_object", "ui_selected_object_colloquial", "pronoun_followup"],
"required_carryover_invariants": ["selected_object", "focus_object", "date_scope", "warehouse_scope", "reusable_bundle", "followup_action_resolution"]
},
{
"node_id": "N09_old_purchase_aging",
@@ -381,7 +394,7 @@
"to_node": "N05_selected_item_purchase_documents",
"transition_type": "selected_object_deeper_trace",
"primary_user_path": true,
"required_carryover_invariants": ["selected_object", "date_scope"],
"required_carryover_invariants": ["selected_object", "focus_object", "date_scope", "reusable_bundle", "followup_action_resolution"],
"failure_means": "сломано углубление из поставщика в документы закупки"
},
{
@@ -527,13 +540,13 @@
{
"scenario_id": "inventory_selected_item_provenance",
"title": "Selected-item supplier provenance",
"question_ids": ["Q02", "Q06", "Q09", "Q10", "Q19", "Q20"],
"question_ids": ["Q02", "Q06", "Q09", "Q10", "Q19", "Q20", "Q21"],
"node_ids": ["N01_stock_snapshot", "N03_selected_item_supplier", "N04_selected_item_purchase_date", "N05_selected_item_purchase_documents"],
"acceptance_canon": {
"root_step_id": "step_01_snapshot_historical",
"primary_user_path": ["step_01_snapshot_historical", "step_02_selected_item_supplier_colloquial", "step_05_selected_item_documents_ui"],
"required_paraphrase_families": ["canonical", "colloquial", "ui_selected_object", "ui_selected_object_colloquial"],
"required_carryover_invariants": ["selected_object", "date_scope", "warehouse_scope", "organization_scope", "answer_shape"]
"primary_user_path": ["step_01_snapshot_historical", "step_02_selected_item_supplier_colloquial", "step_06_selected_item_documents_pronoun"],
"required_paraphrase_families": ["canonical", "colloquial", "ui_selected_object", "ui_selected_object_colloquial", "pronoun_followup"],
"required_carryover_invariants": ["selected_object", "focus_object", "date_scope", "warehouse_scope", "organization_scope", "answer_shape", "reusable_bundle", "followup_action_resolution"]
},
"steps": [
{
@@ -606,10 +619,26 @@
"source": "binding_target_date_historical"
},
"expected_capability": "inventory_purchase_documents_for_item",
"required_carryover_invariants": ["selected_object", "date_scope"]
"required_carryover_invariants": ["selected_object", "focus_object", "date_scope", "reusable_bundle", "followup_action_resolution"]
},
{
"step_id": "step_06_selected_item_documents_canonical",
"step_id": "step_06_selected_item_documents_pronoun",
"question_id": "Q21",
"node_id": "N05_selected_item_purchase_documents",
"node_role": "critical_child",
"paraphrase_family": "pronoun_followup",
"title": "Selected item purchase documents pronoun follow-up",
"question": "покажи документы по этой позиции",
"depends_on": ["step_01_snapshot_historical", "step_02_selected_item_supplier_colloquial"],
"analysis_context": {
"as_of_date": "2019-03-31",
"source": "binding_target_date_historical"
},
"expected_capability": "inventory_purchase_documents_for_item",
"required_carryover_invariants": ["selected_object", "focus_object", "date_scope", "reusable_bundle", "followup_action_resolution"]
},
{
"step_id": "step_07_selected_item_documents_canonical",
"question_id": "Q10",
"node_id": "N05_selected_item_purchase_documents",
"node_role": "critical_child",
@@ -841,10 +870,18 @@
"business_utility_required": true,
"state_continuity_required": true,
"selected_object_memory_required": true,
"focus_object_required": true,
"pronoun_followup_resolution_required": true,
"followup_action_resolution_required": true,
"bundle_reuse_required": true,
"field_truth_checks": [
"supplier_vs_organization",
"buyer_vs_organization"
],
"required_state_objects": [
"focus_object",
"provenance_bundle"
],
"reusable_answer_object_expectations": [
"current_item",
"current_as_of_date",
@@ -857,6 +894,7 @@
"do_not_accept_if": [
"работает только root snapshot, но ломается critical selected-object edge",
"работает только canonical wording, но ломается colloquial или ui_selected_object wording",
"работает только quoted selected-object wording, но ломается короткий местоименный follow-up по активной позиции",
"теряется date_scope на follow-up с `на эту дату` или `на ту дату`",
"ответ меняет business object, например вместо item-level ответа отдаёт dump документов",
"нарушается ordering semantics, например `старые закупки` идут не oldest-first"
@@ -866,11 +904,14 @@
"critical edges on primary_user_paths",
"canonical coverage on critical nodes",
"colloquial coverage on critical nodes",
"ui_selected_object coverage where UI supports object selection"
"ui_selected_object coverage where UI supports object selection",
"pronoun_followup coverage where the UX already established an active selected object"
],
"required_defect_classes": [
"semantic_understanding_gap",
"edge_carryover_gap",
"followup_action_resolution_gap",
"bundle_reuse_gap",
"answer_shape_mismatch",
"ordering_semantics_mismatch",
"runtime_capability_gap",
@@ -903,6 +944,16 @@
"pattern_id": "F05_oldest_first_violation",
"symptom": "`старые закупки` are listed newest-first or in another non-business order",
"defect_class": "ordering_semantics_mismatch"
},
{
"pattern_id": "F06_pronoun_item_documents_misroute",
"symptom": "short follow-up like `покажи документы по этой позиции` drifts into `documents_by_counterparty` instead of selected-item purchase documents",
"defect_class": "followup_action_resolution_gap"
},
{
"pattern_id": "F07_provenance_bundle_not_reused",
"symptom": "supplier/date/document lookup was already resolved for the selected item but adjacent follow-up recomputes broadly or loses the reusable bundle",
"defect_class": "bundle_reuse_gap"
}
],
"legacy_references": [
@@ -16,6 +16,10 @@
"state_continuity_score",
"answer_shape_score",
"evidence_clarity_score",
"focus_object_continuity_ok",
"bundle_reuse_ok",
"followup_action_resolution_ok",
"recommended_state_objects",
"loop_decision",
"requires_user_decision",
"user_decision_type",
@@ -78,6 +82,21 @@
"minimum": 0,
"maximum": 100
},
"focus_object_continuity_ok": {
"type": "boolean"
},
"bundle_reuse_ok": {
"type": "boolean"
},
"followup_action_resolution_ok": {
"type": "boolean"
},
"recommended_state_objects": {
"type": "array",
"items": {
"type": "string"
}
},
"loop_decision": {
"type": "string",
"enum": ["accepted", "continue", "partial", "blocked", "needs_exact_capability"]
@@ -121,6 +140,8 @@
"runtime_capability_gap",
"edge_carryover_gap",
"object_memory_gap",
"followup_action_resolution_gap",
"bundle_reuse_gap",
"field_mapping_gap",
"answer_shape_mismatch",
"ordering_semantics_mismatch",
@@ -170,6 +191,8 @@
"semantic_understanding_gap",
"edge_carryover_gap",
"object_memory_gap",
"followup_action_resolution_gap",
"bundle_reuse_gap",
"field_mapping_gap",
"answer_shape_mismatch",
"ordering_semantics_mismatch",