Install any skill in seconds. Free to start, no credit card required.
Get Started Free →异常账户调查摘要助手,适用于券商合规调查、风控核查、监管报送、内部审计等场景。 以下情况请主动触发此技能: - 用户提供了异常账户数据,问"帮我总结一下""调查结论是什么" - 用户问"异常账户怎么调查""调查要点有哪些" - 用户需要:异常账户调查摘要、调查结论、处置建议 - 用户提到:异常账户、可疑交易、调查摘要、核查报告、监管问询 - 用户需要形成调查摘要、核查报告、监管回复 不要等用户明确说"异常账户调查"——只要涉及异常账户核查、可疑交易调查、监管问询回复,就应主动启动此技能。
.claude/skills/aifinlab-abnormal-account-investigation/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 179% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 61% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 98% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 147% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 133% | 0% |
你的核心职责:整理异常账户调查信息,提炼调查结论,形成清晰的调查摘要和处置建议,支持合规调查和监管报送。
收到用户请求后,先做两个判断:
判断 1:是否有调查数据?
判断 2:用户需要哪种深度?
| 用户意图 | 适用模板 | |---------|---------| | "总结一下""快速摘要" | 模板 A:快速摘要 | | "详细报告""调查结论" | 模板 B:标准报告 | | "监管回复""报送材料" | 模板 C:报送版 | | 未明确说明 | 默认模板 A,再提供"需要详细报告可继续" |
账户基本信息:
异常信息:
调查信息:
结论信息:
1. 交易异常
2. 资金异常
3. 行为异常
4. 关联异常
1. 账户背景调查
2. 交易行为调查
3. 关联关系调查
4. 主观意图调查
| 结论类型 | 判定标准 | 处置建议 | |---------|---------|---------| | 确认异常 | 证据充分,异常行为成立 | 限制交易、上报监管 | | 高度可疑 | 证据较多,异常可能性大 | 加强监控、进一步调查 | | 无法排除 | 证据不足,无法确认或排除 | 持续监控、收集证据 | | 排除异常 | 证据充分,异常行为不成立 | 解除监控、恢复正常 |
> 适用:"总结一下""快速摘要"
**异常账户调查摘要** | YYYY-MM-DD
**账户**:XXX
**异常类型**:xxx
**调查结论**:[确认异常/高度可疑/无法排除/排除异常]
**关键发现**:
1. xxx
2. xxx
**处置建议**:xxx
**后续跟进**:xxx> 适用:"详细报告""调查结论"
**异常账户调查报告** | YYYY-MM-DD
## 一、账户基本信息
- 账户名称:XXX
- 账户号码:XXX
- 开户时间:XXX
- 客户类型:个人/机构
- 风险等级:XXX
## 二、异常情况
**异常发现**:
- 发现时间:XXX
- 触发规则:XXX
- 异常类型:XXX
- 风险等级:XXX
**异常表现**:
1. xxx
2. xxx
3. xxx
## 三、调查过程
**调查方式**:系统核查/人工访谈/现场调查
**调查内容**:
1. 账户背景调查:xxx
2. 交易行为分析:xxx
3. 关联关系核查:xxx
4. 主观意图了解:xxx
**调查证据**:
- 证据 1:xxx
- 证据 2:xxx
- 证据 3:xxx
## 四、调查结论
**结论类型**:[确认异常/高度可疑/无法排除/排除异常]
**判定依据**:
1. xxx
2. xxx
3. xxx
**排除因素**(如有):
- xxx
## 五、处置建议
**建议措施**:
1. xxx
2. xxx
**上报要求**:xxx
**后续跟进**:xxx> 适用:"监管回复""报送材料"
**异常账户调查报送材料** | YYYY-MM-DD
**报送事项**:关于 XXX 账户异常交易情况的调查回复
**一、账户基本情况**
(账户基本信息、开户背景、客户身份等)
**二、异常交易情况**
(异常交易发现过程、具体表现、涉及金额等)
**三、调查核实情况**
(调查方式、调查内容、核实结果等)
**四、调查结论**
(结论类型、判定依据、排除因素等)
**五、处置措施**
(已采取措施、拟采取措施、上报情况等)
**六、后续安排**
(持续监控计划、风险防范措施等)
**附件**:
1. 账户交易明细
2. 调查访谈记录
3. 相关证据材料证据不足:如调查证据不足,说明"建议继续收集证据,暂无法做出明确结论"
客户不配合:如客户不配合调查,说明"记录不配合情况,作为可疑因素考虑"
跨机构调查:如涉及跨机构调查,说明"建议协调相关机构,共享调查信息"
监管问询:如为监管问询回复,说明"严格按照问询要求,逐项回复,确保准确完整"
监管法规:
调查指引:
报送要求:
Python 调查摘要生成示例:
pythonimport pandas as pd from datetime import datetime def generate_investigation_summary(account_data, trade_data, investigation_data): """ 生成调查摘要 参数: account_data: 账户信息字典 trade_data: 交易数据 DataFrame investigation_data: 调查信息字典 返回: 摘要字典 """ # 异常交易统计 abnormal_trades = trade_data[trade_data['is_abnormal'] == True] summary = { 'account_info': { 'account_name': account_data.get('account_name', ''), 'account_id': account_data.get('account_id', ''), 'open_date': account_data.get('open_date', ''), 'client_type': account_data.get('client_type', '') }, 'abnormal_summary': { 'abnormal_type': investigation_data.get('abnormal_type', ''), 'discovery_date': investigation_data.get('discovery_date', ''), 'abnormal_count': len(abnormal_trades), 'abnormal_amount': abnormal_trades['amount'].sum() if 'amount' in abnormal_trades.columns else 0 }, 'investigation': { 'investigator': investigation_data.get('investigator', ''), 'investigation_date': investigation_data.get('investigation_date', ''), 'investigation_method': investigation_data.get('investigation_method', []), 'findings': investigation_data.get('findings', []) }, 'conclusion': { 'conclusion_type': investigation_data.get('conclusion_type', ''), 'basis': investigation_data.get('conclusion_basis', []), 'disposition': investigation_data.get('disposition', []) } } return summary def format_summary_text(summary): """ 格式化摘要文本 参数: summary: 摘要字典 返回: 格式化文本 """ text = f"""**异常账户调查摘要** **账户**:{summary['account_info']['account_name']} **异常类型**:{summary['abnormal_summary']['abnormal_type']} **调查结论**:{summary['conclusion']['conclusion_type']} **关键发现**: """ for i, finding in enumerate(summary['investigation']['findings'], 1): text += f"{i}. {finding}\n" text += f""" **处置建议**: """ for i, disposition in enumerate(summary['conclusion']['disposition'], 1): text += f"{i}. {disposition}\n" return text
SQL 查询示例:
sql-- 查询异常账户调查信息 SELECT a.account_id, a.account_name, a.open_date, a.client_type, i.abnormal_type, i.discovery_date, i.investigator, i.investigation_date, i.conclusion_type, i.disposition, COUNT(t.trade_id) as abnormal_trade_count, SUM(t.amount) as abnormal_amount FROM account_info a JOIN investigation i ON a.account_id = i.account_id LEFT JOIN abnormal_trade t ON a.account_id = t.account_id WHERE i.investigation_date >= DATE_SUB(CURDATE(), INTERVAL 90 DAY) GROUP BY a.account_id, a.account_name, a.open_date, a.client_type, i.abnormal_type, i.discovery_date, i.investigator, i.investigation_date, i.conclusion_type, i.disposition ORDER BY i.discovery_date DESC;
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-17 | fail→fail | 16,690 | 16,650 | -0% | 1 | 1 | 0% | 2,496 | 5,348 | +114% | 0 | 0 | — |
case-18 | pass→pass | 15,743 | 11,053 | -30% | 1 | 1 | 0% | 2,379 | 4,680 | +97% | 0 | 0 | — |
case-01 | fail→pass | 7,530 | 22,389 | +197% | 1 | 1 | 0% | 1,442 | 4,023 | +179% | 0 | 0 | — |
case-02 | fail→fail | 25,062 | 16,408 | -35% | 1 | 1 | 0% | 3,749 | 5,542 | +48% | 0 | 0 | — |
case-03 | pass→pass | 17,070 | 15,773 | -8% | 1 | 1 | 0% | 2,625 | 5,234 | +99% | 0 | 0 | — |
case-04 | pass→pass | 18,012 | 12,076 | -33% | 1 | 1 | 0% | 2,680 | 4,426 | +65% | 0 | 0 | — |
case-05 | fail→fail | 25,991 | 20,349 | -22% | 1 | 1 | 0% | 3,785 | 5,823 | +54% | 0 | 0 | — |
case-06 | fail→pass | 19,408 | 12,226 | -37% | 1 | 1 | 0% | 2,920 | 4,688 | +61% | 0 | 0 | — |
case-07 | fail→pass | 18,834 | 13,552 | -28% | 1 | 1 | 0% | 2,443 | 4,839 | +98% | 0 | 0 | — |
case-23 | pass→pass | 29,997 | 22,433 | -25% | 1 | 1 | 0% | 4,201 | 7,026 | +67% | 0 | 0 | — |
case-08 | fail→pass | 12,789 | 11,262 | -12% | 1 | 1 | 0% | 1,897 | 4,691 | +147% | 0 | 0 | — |
case-09 | pass→pass | 15,201 | 14,889 | -2% | 1 | 1 | 0% | 2,359 | 5,076 | +115% | 0 | 0 | — |
case-10 | fail→pass | 12,371 | 9,623 | -22% | 1 | 1 | 0% | 1,868 | 4,356 | +133% | 0 | 0 | — |
case-11 | fail→pass | 17,154 | 18,106 | +6% | 1 | 1 | 0% | 2,427 | 5,156 | +112% | 0 | 0 | — |
case-12 | pass→pass | 12,533 | 14,066 | +12% | 1 | 1 | 0% | 1,959 | 4,938 | +152% | 0 | 0 | — |
case-13 | pass→pass | 17,947 | 16,594 | -8% | 1 | 1 | 0% | 2,627 | 5,181 | +97% | 0 | 0 | — |
case-14 | pass→fail | 22,335 | 24,851 | +11% | 1 | 1 | 0% | 3,377 | 6,316 | +87% | 0 | 0 | — |
case-15 | pass→pass | 18,284 | 17,841 | -2% | 1 | 1 | 0% | 2,669 | 5,531 | +107% | 0 | 0 | — |
case-16 | pass→pass | 22,921 | 23,226 | +1% | 1 | 1 | 0% | 2,845 | 6,175 | +117% | 0 | 0 | — |
case-19 | fail→pass | 13,829 | 9,892 | -28% | 1 | 1 | 0% | 2,115 | 4,007 | +89% | 0 | 0 | — |
case-20 | fail→pass | 9,644 | 12,013 | +25% | 1 | 1 | 0% | 1,478 | 3,987 | +170% | 0 | 0 | — |
case-21 | pass→pass | 27,624 | 31,784 | +15% | 1 | 1 | 0% | 4,177 | 7,193 | +72% | 0 | 0 | — |
case-22 | pass→pass | 23,611 | 17,746 | -25% | 1 | 1 | 0% | 3,320 | 5,832 | +76% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +30 percentage points is the difference between those two pass rates over the 23 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.