Files
group_xinghuo_jinrong/scripts/agent/seed-analyst-query-templates.sql
T
zhanghongyu_0626 a0f550646e feat(analyst): Add analyze endpoint and chart specification validation
- Introduced a new `/analyze` endpoint in the analyst API to process analysis requests, allowing users to receive textual interpretations and chart specifications based on provided prompts.
- Enhanced `analyst_schemas.py` with `AnalyzeRequest` and `ChartSpec` models to structure analysis requests and validate chart specifications.
- Implemented chart validation logic in a new `analyst_chart.py` service, ensuring that chart types and fields are correctly specified and conform to allowed values.
- Updated `AnalystAgent` to handle analysis requests, integrating the new logic for generating responses based on user prompts and data availability.
- Added unit tests to verify the functionality of the new endpoint and validation mechanisms, ensuring robustness and reliability.

This update significantly enhances the analytical capabilities of the application, providing users with improved tools for data interpretation and visualization.
2026-09-12 12:33:37 +08:00

129 lines
4.8 KiB
SQL

-- 数据分析 Agent · 已发布 SQL 模板种子(D-06 · 原句 match_phrases 优先)
-- 用法:mysql -u root -p jinrong_agent < scripts/agent/seed-analyst-query-templates.sql
USE jinrong_agent;
DELETE FROM analytics_query_template WHERE created_by = 'SEED';
INSERT INTO analytics_query_template
(template_key, template_sql, params_schema, tags, status, version, created_by, published_by)
VALUES
(
'customer_total_count',
'SELECT COUNT(*) AS customer_count FROM core_customer',
JSON_OBJECT(
'match_phrases', JSON_ARRAY('平台客户总数是多少'),
'prompt_label', '客户总数',
'featured', true
),
JSON_ARRAY('客户', '总数'),
'published',
1,
'SEED',
'SEED'
),
(
'subscribe_amount_recent_days',
'SELECT COALESCE(SUM(amount), 0) AS subscribe_total FROM core_trade WHERE trade_type = ''subscribe'' AND trade_date >= DATE_SUB(CURDATE(), INTERVAL :days DAY)',
JSON_OBJECT(
'match_phrases', JSON_ARRAY('近30天申购金额总额', '申购金额汇总'),
'prompt_label', '申购金额',
'featured', true,
'params', JSON_ARRAY(
JSON_OBJECT(
'name', 'days',
'placeholder', ':days',
'extract', 'recent_days',
'default', 30
)
)
),
JSON_ARRAY('申购', '金额', '近30天'),
'published',
1,
'SEED',
'SEED'
),
(
'pending_alert_count',
'SELECT COUNT(*) AS pending_count FROM jinrong_agent.risk_alert WHERE status = ''pending_review''',
JSON_OBJECT(
'match_phrases', JSON_ARRAY('待处理预警有多少'),
'prompt_label', '待处理预警',
'featured', true
),
JSON_ARRAY('待处理', '预警'),
'published',
1,
'SEED',
'SEED'
),
(
'total_holding_aum',
'SELECT COALESCE(SUM(market_value), 0) AS total_aum FROM core_holding',
JSON_OBJECT(
'match_phrases', JSON_ARRAY('全平台持仓规模是多少'),
'prompt_label', '持仓规模',
'featured', false
),
JSON_ARRAY('持仓', '规模', 'AUM'),
'published',
1,
'SEED',
'SEED'
),
(
'customer_self_trade_count_recent',
'SELECT COUNT(*) AS trade_count FROM core_trade WHERE customer_id = '':customer_id'' AND trade_date >= DATE_SUB(CURDATE(), INTERVAL :days DAY)',
JSON_OBJECT(
'match_phrases', JSON_ARRAY('我近30天有多少笔交易'),
'prompt_label', '我的交易笔数',
'params', JSON_ARRAY(
JSON_OBJECT(
'name', 'customer_id',
'placeholder', ':customer_id',
'extract', 'scope_customer'
),
JSON_OBJECT(
'name', 'days',
'placeholder', ':days',
'extract', 'recent_days',
'default', 30
)
)
),
JSON_ARRAY('客户', '交易', '笔数', 'self'),
'published',
1,
'SEED',
'SEED'
),
(
'product_nav_max_min_latest',
'(SELECT ''max'' AS extremum, n.product_id, p.product_name, n.nav_date, n.nav, n.daily_chg_pct FROM core_product_nav n INNER JOIN core_product p ON p.product_id = n.product_id WHERE n.nav_date = (SELECT MAX(nav_date) FROM core_product_nav) ORDER BY n.nav DESC LIMIT 1) UNION ALL (SELECT ''min'' AS extremum, n.product_id, p.product_name, n.nav_date, n.nav, n.daily_chg_pct FROM core_product_nav n INNER JOIN core_product p ON p.product_id = n.product_id WHERE n.nav_date = (SELECT MAX(nav_date) FROM core_product_nav) ORDER BY n.nav ASC LIMIT 1)',
JSON_OBJECT(
'match_phrases', JSON_ARRAY('目前净值最高和最低的两个产品', '最新净值日单位净值最高和最低各一只产品'),
'prompt_label', '净值高低(最新日)',
'featured', true
),
JSON_ARRAY('产品', '净值', '最高', '最低'),
'published',
1,
'SEED',
'SEED'
),
(
'product_nav_chg_max_min_latest',
'(SELECT ''max'' AS extremum, n.product_id, p.product_name, n.nav_date, n.nav, n.daily_chg_pct FROM core_product_nav n INNER JOIN core_product p ON p.product_id = n.product_id WHERE n.nav_date = (SELECT MAX(nav_date) FROM core_product_nav) ORDER BY n.daily_chg_pct DESC LIMIT 1) UNION ALL (SELECT ''min'' AS extremum, n.product_id, p.product_name, n.nav_date, n.nav, n.daily_chg_pct FROM core_product_nav n INNER JOIN core_product p ON p.product_id = n.product_id WHERE n.nav_date = (SELECT MAX(nav_date) FROM core_product_nav) ORDER BY n.daily_chg_pct ASC LIMIT 1)',
JSON_OBJECT(
'match_phrases', JSON_ARRAY('最新净值日涨跌幅最高和最低各一只产品'),
'prompt_label', '涨跌幅高低(最新日)',
'featured', true
),
JSON_ARRAY('产品', '涨幅', '最高', '最低'),
'published',
1,
'SEED',
'SEED'
);