Files
group_fqcd_jr/docs/15-金融NL2SQL工具接入说明.md
T

106 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 金融 NL2SQL 工具接入说明
## 1. 工具定位
`query_financial_data` 是运营和投顾共用的金融只读 NL2SQL 工具。业务 Agent 只负责判断是否调用工具,不直接连库、不读取密钥、不自行写审计。
调用链固定为:
```text
业务 Agent -> BaseAgent.call_tool -> ToolExecutor -> query_financial_data -> 金融只读表
```
## 2. 工具声明
业务 Agent 的 `AgentDefinition.allowed_tools` 需要包含:
```python
allowed_tools=("query_financial_data",)
supported_intents=("financial_query", "general")
```
发布配置需要按意图开启工具白名单:
```json
{
"namespace": "agent_tools",
"config_key": "<agent_type>:financial_query",
"value_json": {"allowed_tools": ["query_financial_data"]}
}
```
工具权限码:
```text
financial:nl2sql:read
```
允许角色:
```text
advisor、operator、admin、super_admin
```
## 3. 调用示例
```python
result = await self.call_tool(
"query_financial_data",
{"question": request.message, "dry_run": False, "limit": 50},
intent="financial_query",
context=context,
)
```
低置信度或模糊问题会返回:
```json
{"status": "need_confirmation", "message": "请确认查询范围、指标口径和时间条件。"}
```
Agent 应把 `message` 原样返回给用户,等待用户补充或确认后再次调用,并传入 `confirmation`。
## 4. MVP 范围
当前纳入 NL2SQL 的表:
```text
sys_customer_assignment
fin_customer_profile
fin_risk_assessment
fin_product
fin_fee_rule
fin_market_price
fin_nav_history
fin_holding
fin_transaction
fin_sim_order
fin_sim_account
fin_cash_ledger
client_facing_content
```
第一期只支持只读查询;支持跨两个或三个业务域查询;支持历史范围查询。历史时点查询如果依赖当前快照表,例如 `fin_holding`、`fin_sim_account`、`sys_customer_assignment`,会拒绝执行。
## 5. 审计与持久化
工具输出包含 `audit`,其中有:
- `query_plan`:查询计划;
- `generated_sql`:生成 SQL;
- `permission_check`:权限校验结果;
- `execution`:执行状态和返回行数。
`ToolExecutor` 会把这些摘要写入 `ToolCallRecord.output_summary`,公共运行持久化会最终写入 `conversation_message.tool_calls`。
## 6. 接入验收
运营或投顾 Agent 接入时至少验证:
- AgentDefinition 声明了 `query_financial_data`;
- 发布配置按目标意图放行该工具;
- 调用方角色具备 `financial:nl2sql:read`;
- 模糊问题会先要求确认;
- 生成 SQL 只包含 `SELECT`,且表名均在白名单内;
- `conversation_message.tool_calls` 能看到查询计划、SQL 和权限校验摘要。