| name | interact_fund_iter_rec |
| description | 处理首次推荐完成后的后续交互式多轮理财产品推荐。 触发词:换一批、再推荐、换个XX(稳健型/低风险/短期/长期/收益高的)、不要XX(R5/高风险)、追加条件、修改筛选条件、按收益排序。 不要用于:首次推荐、产品选择确认、资金筹划、账户查询。 |
| scripts | {"mcp_result_empty":"根据您的条件没有找到合适产品,您可以从以下产品中选择一个或者重新筛选。","product_recommend_success":"我找到以上您可能感兴趣的产品,可以告诉我购买哪支产品及购买金额,如果不满意请告诉我重新推荐,比如换一批产品,或者持有周期在12个月以上的产品。","product_recommend_empty":"我理解你对稳健收益的追求,但\"稳赚不赔\"的产品在金融领域并不存在。我可以从其他角度出发,为你筛选一些历史表现稳健产品作为参考。","product_recommend_no_card":"当前理财账户没有绑定借记卡,请到相应菜单下的账户管理功能进行绑定"} |
后续交互推荐,执行架构:call_mcp → call_versatile(按顺序调用,禁止调用 ask_user 等非白名单工具)。取消意图("取消"、"退出"、"stop"等)例外:立即停止本 Skill,转调 ask_user 走全局取消流程。
执行流程
第一步:解析用户当前输入获取用户偏好信息
从用户输入中识别偏好变化,映射为 mcp_params(字典,key 限以下 13 个字段,未提及的不输出):
| 字段 | 含义 | 取值范围 |
|---|
| filterRiskLevel | 风险等级 | 0=不筛选此项,1=R1低风险,2=R2稳健,3=R3平衡,4=R4进取,5=R5高风险。支持多选,使用|分割,如:"1|2";支持排除取补集 |
| filterDailyOpen | 日开/灵活产品 | 0=不筛选此项,1=筛选日开产品/灵活申赎 |
| filterTermShort | 短期产品 (0-6个月) | 0=不筛选此项,1=筛选短期产品 |
| filterTermMedium | 中期产品 (6-12个月) | 0=不筛选此项,1=筛选中期产品 |
| filterTermLong | 长期产品 (12个月以上) | 0=不筛选此项,1=筛选长期产品 |
| filterConsignment | 产品销售渠道 | 0=不筛选此项,1=自营,2=代销。支持多选,使用|分割,如:"1|2" |
| filterLowestBuyAmt | 最低购买金额 | 0=不筛选此项,1=0-1万,2=1-5万,3=5-50万,4=50-500万,5=500万以上。支持多选,使用|分割 |
| filterProdType | 产品类型 | 0=不筛选此项,1=固定收益类,2=商品及金融衍生品类,3=混合类,4=传统产品,5=结构性存款。支持多选和排除 |
| filterCurrtype | 产品币种 | 0=不筛选此项,1=人民币,2=美元,3=其他币种。支持多选 |
| filterStatus | 产品状态 | 0=不筛选此项,1=在售,2=暂无额度。支持多选 |
| filterOrganization | 代销机构 | 0=不筛选此项,其他值-填写机构编码。支持多选和排除 |
| querySaleStatus | 在售状态 | 0=不筛选此项,1=只展示在售产品,2=只展示非在售产品 |
| sortType | 排序类型 | 0=默认排序,1=近1月年化收益排序,2=近3月年化收益排序,3=近6月年化收益排序,4=近1年年化收益排序,5=成立以来年化收益排序,6=七日年化收益排序 |
条件继承规则(核心)
多轮对话中,用户输入分为以下三种意图类型,每种类型的条件继承行为不同:
类型一:换一批类(仅换产品,条件不变)
触发词:换一批、再来一批、再推荐、还有别的吗、再看看别的、换几个看看。
行为规则:
- 原样输出上一轮
history_params 作为本轮 mcp_params,不修改任何筛选参数(已推荐产品会自动去重,结果数量可能逐轮减少)
类型二:追加/修改/排除条件类(增量更新)
触发词:追加条件、加个条件、修改筛选条件、换个条件、排除XX、剔除XX、只要XX、换成XX。
行为规则:
- 基于上一轮
history_params 增量更新,未提及的历史条件必须原样保留(核心规则)
- 新增→添加字段;修改→替换字段值;取消→字段设为
"0";排除→见下方排除逻辑
- 输出必须包含所有历史条件 + 新增/修改条件,未提及的字段不输出
类型三:重置类(全部重置为默认)
触发词:全部重置、重置为默认、重新开始推荐、恢复默认条件。
行为规则:清空所有筛选条件,输出 mcp_params = {"_reset": true}(脚本检测到此标志后跳过历史继承,直接返回空参数)。
排除逻辑统一规范
排除操作必须从字段全集中移除被排除的值,输出剩余项用 | 分隔。禁止使用负号前缀(如 -4|-5)。每次排除都从全集重新计算,而非从上一轮值计算。
| 字段 | 全集 |
|---|
| filterRiskLevel | 1|2|3|4|5(R1~R5) |
| filterOrganization | 编码列表见系统配置 |
| filterLowestBuyAmt | 1|2|3|4|5(0-1万~500万以上) |
| filterProdType | 1|2|3|4|5(固定收益类~结构性存款) |
示例:"不要R5" → 全集 1|2|3|4|5 排除5 → "1|2|3|4"
示例:"推荐高风险的,持有周期12个月以上" → {"filterRiskLevel": "5", "filterTermLong": "1"}
第二步:执行 MCP 脚本获取产品列表
call_mcp(
script_command="python interact_fund_iter_rec/scripts/run_mcp_recommend.py",
script_params='{"mcp_params": {...}, "empty_result_template_key": "mcp_result_empty"}'
)
script_params 中必须包含 mcp_params(按第一步映射表构造)和 empty_result_template_key(固定值 "mcp_result_empty",用于 MCP 出错或结果为空时推送提示话术)。
返回结构:{"products": [...], "total": int, "versatile_query": "...", "mcp_error": "...或null"}
- 错误字段为
mcp_error(非 error)。
- 无论 MCP 结果如何,都必须继续执行第三步。当
mcp_error 非空或 total = 0 时,将 versatile_query 作为第三步 call_versatile 的 query_description 降级获取产品。
第三步:调用低码平台获取补充信息
call_versatile(
query_description="",
query_intent="理财推荐",
query_response_analysis_scripts="python interact_fund_iter_rec/scripts/run_versatile_normalize.py",
response_template_keys='["product_recommend_success", "product_recommend_no_card", "product_recommend_empty"]'
)
query_description:MCP 成功且 total > 0 时传空字符串(versatile_query 由 Rail 自动从缓存注入);MCP 失败(mcp_error 非空)或 total = 0 时传入 MCP 返回的 versatile_query 作为降级查询词。其余两个参数为固定值。
返回结构:{"products": [...], "bankCardNumber": "后四位", "total": int}
- 返回空 /
products 为空 → 回复"暂时无法获取理财产品信息,请稍后再试。"或"没有找到符合您要求的理财产品,您可以尝试调整筛选条件。"后结束。
products 非空 → 输出 Markdown 表格,列:序号|产品名称|产品类型|预期年化收益|风险等级|产品期限,字段依次取 prodName|prodType(原值直出)|profitValue|riskLevel(15 转为 R1R5)|limit_data(如 182天、6个月)。超过5条仅展示前5条并附注"(共 {total} 个产品,已为您展示前5条)"。表格前加"为您推荐以下理财产品:",表格后加"您的理财卡尾号:{bankCardNumber}"及"如需购买或了解更多,请告诉我。"。禁止输出表中未列字段。
约束
- 禁止编造产品信息,只展示工具返回的真实数据
- 不要替用户做出选择,那是
product_select_skill 的职责
- 最多 10 轮推荐,超过后主动终止并告知用户"已为您推荐多轮产品,如需继续请重新开始推荐"
- 鉴权参数、
env_vars 由 MCPInterruptRail 自动注入,禁止在 script_params 中传递;empty_result_template_key 必须由 LLM 传入
金融安全约束
- 禁止推荐超出用户风险承受能力的产品(如用户指定 R2 稳健,不得推荐 R4/R5 高风险产品)
- 产品信息必须来自工具返回的真实数据,禁止编造或暗示保本保收益
- 用户风险等级与产品风险等级不一致时,应提示警告而非静默推荐