feat: 添加线索引擎、NLQ、场景检测、前端界面等核心功能模块

This commit is contained in:
freedakgmail
2026-06-16 08:15:15 +08:00
parent 7b1e2b10a8
commit 48340f6011
62 changed files with 6772 additions and 65 deletions
View File
+53
View File
@@ -0,0 +1,53 @@
"""生成演示数据:跑两个场景扫描,落库若干线索,供前端看板演示。
用法:python -m scripts.seed_demo
仅用于本地演示,使用脱敏/虚构数据,不涉及真实业务数据。
"""
from __future__ import annotations
from app.db import get_sessionmaker
from app.engines import scan
from app.scenarios.churn_fraud import CohortPoint
from app.scenarios.split_contract import ContractRecord
def main() -> None:
sm = get_sessionmaker()
with sm() as session:
# 场景一:8 个客户拆单 + 同一实控人
contracts = [
ContractRecord(f"HT-{i}", f"政企客户{i}", 790000 + i * 25000) for i in range(8)
]
r1 = scan.run_split_contract_scan(
session, contracts, approval_threshold=1_000_000, shared_controller=True
)
# 场景二:养卡骗补,第 3 月断崖退订
curve = [
CohortPoint(0, 1.0), CohortPoint(1, 0.96),
CohortPoint(2, 0.92), CohortPoint(3, 0.08),
]
r2 = scan.run_churn_scan(
session, retention_curve=curve, commission_paid=360000,
active_ratio=0.04, zero_usage_ratio=0.93, channel_key="渠道-华南-001",
)
# 再来一条中置信
curve2 = [CohortPoint(0, 1.0), CohortPoint(1, 0.7), CohortPoint(2, 0.55)]
r3 = scan.run_churn_scan(
session, retention_curve=curve2, commission_paid=80000,
active_ratio=0.4, zero_usage_ratio=0.5, channel_key="渠道-西南-007",
)
session.commit()
for r in (r1, r2, r3):
if r.clue:
print(f"已生成线索 [{r.scenario_code}] {r.clue.title} "
f"置信={r.clue.confidence.value} 评分={r.clue.score}")
else:
print(f"[{r.scenario_code}] 未命中阈值,无线索")
if __name__ == "__main__":
main()