diff --git a/docs/evidence/20260910-customer-service-knowledge-preflight.json b/docs/evidence/20260910-customer-service-knowledge-preflight.json new file mode 100644 index 0000000..33c31b4 --- /dev/null +++ b/docs/evidence/20260910-customer-service-knowledge-preflight.json @@ -0,0 +1,1192 @@ +{ + "source_name": "客服Agent一期_QA结构化记录_v2_角色路由版.jsonl", + "summary": { + "total_records": 105, + "eligible_records": 52, + "excluded_rule_records": 53, + "publication_state": "pending_review" + }, + "records": [ + { + "qa_id": "RAG-PER-008", + "knowledge_type": "faq", + "title": "你们公司叫什么?", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "公司名称", + "虚拟设定", + "公司信息" + ], + "content_text": "{\"qa_id\":\"RAG-PER-008\",\"question\":\"你们公司叫什么?\",\"paraphrases\":[\"公司全称是什么?\",\"你是哪家公司?\",\"平台名称是什么?\",\"奶龙基金是哪家?\"],\"answer\":\"公司名称是奶龙基金责任有限公司。公司注册地址和联系地址均为深圳市南湾街道布吉路66号;统一社会信用代码为 91440300MA5H666666,工商登记状态为存续。注册资本为 2000 万元人民币,实缴资本为 1200 万元人民币。公司法人为袁聪,股东及持股比例为张胜宇 51%、王建龙 20%、张帅 10%、李卓凡 10%、梁正樑 8%、袁聪 1%。上述均为本系统虚拟设定。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:你们公司叫什么?\n相似问法:公司全称是什么?;你是哪家公司?;平台名称是什么?;奶龙基金是哪家?\n标签:公司名称、虚拟设定、公司信息", + "snippet": "你们公司叫什么?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PER-009", + "knowledge_type": "faq", + "title": "你们公司地址在哪里?", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "公司地址", + "联系地址", + "邮寄地址" + ], + "content_text": "{\"qa_id\":\"RAG-PER-009\",\"question\":\"你们公司地址在哪里?\",\"paraphrases\":[\"办公地址是什么?\",\"总部在哪?\",\"公司在哪办公?\",\"联系地址是什么?\"],\"answer\":\"奶龙基金责任有限公司的公司地址是深圳市南湾街道布吉路66号。邮政编码为 518100;前台电话为 15936583816;投诉邮寄地址为深圳市龙岗区南湾街道布吉路66号。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:你们公司地址在哪里?\n相似问法:办公地址是什么?;总部在哪?;公司在哪办公?;联系地址是什么?\n标签:公司地址、联系地址、邮寄地址", + "snippet": "你们公司地址在哪里?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PER-010", + "knowledge_type": "faq", + "title": "你们客服电话是多少?", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "客服电话", + "服务时间", + "官网", + "App", + "官方渠道" + ], + "content_text": "{\"qa_id\":\"RAG-PER-010\",\"question\":\"你们客服电话是多少?\",\"paraphrases\":[\"怎么打人工?\",\"热线电话是什么?\",\"客服联系方式\",\"有没有客服电话?\"],\"answer\":\"奶龙基金责任有限公司的客服电话为 15936583816,人工服务时间为工作日 09:00-18:00。官网为 www.nailong.com,App 下载入口为 www.nainong.com。请不要相信搜索引擎、短信或陌生人提供的其他号码。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:你们客服电话是多少?\n相似问法:怎么打人工?;热线电话是什么?;客服联系方式;有没有客服电话?\n标签:客服电话、服务时间、官网、App、官方渠道", + "snippet": "你们客服电话是多少?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PER-011", + "knowledge_type": "product_inquiry", + "title": "你们有哪些基金?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "产品清单", + "基金代码", + "产品风险等级" + ], + "content_text": "{\"qa_id\":\"RAG-PER-011\",\"question\":\"你们有哪些基金?\",\"paraphrases\":[\"产品清单在哪?\",\"有没有 QDII?\",\"有哪些基金可以买?\",\"你们卖哪些产品?\"],\"answer\":\"奶龙基金责任有限公司的首版虚拟产品清单包括 NL-M001 奶龙零钱宝货币基金(R1)、NL-B001 奶龙稳享纯债基金(R2)、NL-H001 奶龙均衡优选混合基金(R3)、NL-I001 奶龙核心指数基金(R4)和 NL-G001 奶龙成长精选混合基金(R4)。首版仅配置 A 类和 C 类份额;未进入清单的产品不推断其是否在售或可交易。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:你们有哪些基金?\n相似问法:产品清单在哪?;有没有 QDII?;有哪些基金可以买?;你们卖哪些产品?\n标签:产品清单、基金代码、产品风险等级", + "snippet": "你们有哪些基金?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PER-012", + "knowledge_type": "faq", + "title": "你们公司主要做什么业务?", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "公司业务", + "服务范围", + "一期边界" + ], + "content_text": "{\"qa_id\":\"RAG-PER-012\",\"question\":\"你们公司主要做什么业务?\",\"paraphrases\":[\"经营范围是什么?\",\"是基金公司吗?\",\"能办理哪些业务?\",\"公司资质如何?\"],\"answer\":\"奶龙基金责任有限公司当前面向个人客户提供基金公开信息、产品资料、交易规则和服务路径说明;首版暂不提供机构客户服务。奶龙基金智能助手不提供个性化投资咨询、资产配置或定制服务,也不会根据您的账户情况推荐产品;需要人工核实服务事项时,请联系人工客服 15936583816。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:你们公司主要做什么业务?\n相似问法:经营范围是什么?;是基金公司吗?;能办理哪些业务?;公司资质如何?\n标签:公司业务、服务范围、一期边界", + "snippet": "你们公司主要做什么业务?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-001", + "knowledge_type": "faq", + "title": "单位净值和累计净值是什么意思?", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "净值", + "累计净值", + "基础概念" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-001\",\"question\":\"单位净值和累计净值是什么意思?\",\"paraphrases\":[\"单位净值是什么?\",\"累计净值怎么看?\",\"估值能当净值吗?\",\"净值怎么看?\"],\"answer\":\"单位净值反映每一份基金在某一估值日的价值;累计净值通常用于反映基金成立以来的净值表现,并可能包含分红再投资等影响。盘中估值只是一种参考,不等同于最终确认净值。具体口径以基金公告和产品页面说明为准。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:单位净值和累计净值是什么意思?\n相似问法:单位净值是什么?;累计净值怎么看?;估值能当净值吗?;净值怎么看?\n标签:净值、累计净值、基础概念", + "snippet": "单位净值和累计净值是什么意思?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-002", + "knowledge_type": "faq", + "title": "七日年化和万份收益是什么?", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "七日年化", + "万份收益", + "货币基金" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-002\",\"question\":\"七日年化和万份收益是什么?\",\"paraphrases\":[\"七日年化是什么?\",\"万份收益怎么看?\",\"货币基金收益怎么算?\",\"7 日年化可靠吗?\"],\"answer\":\"七日年化和每万份收益是货币市场基金常见的历史收益展示指标。七日年化是按最近一段期间收益折算的年化参考,不是对未来收益的承诺;每万份收益反映每一万份基金在某日实现的收益。具体数值以基金管理人最新披露为准。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:七日年化和万份收益是什么?\n相似问法:七日年化是什么?;万份收益怎么看?;货币基金收益怎么算?;7 日年化可靠吗?\n标签:七日年化、万份收益、货币基金", + "snippet": "七日年化和万份收益是什么?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-003", + "knowledge_type": "faq", + "title": "基金有哪些费用?", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "基金费用", + "管理费", + "托管费", + "销售服务费" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-003\",\"question\":\"基金有哪些费用?\",\"paraphrases\":[\"申购费怎么收?\",\"赎回费怎么算?\",\"管理费在哪里扣?\",\"基金手续费有哪些?\"],\"answer\":\"基金费用可能包括申购费、赎回费、管理费、托管费和销售服务费等,具体项目、费率、计提方式和减免条件因基金份额类别及持有期限而异。请以对应基金合同、招募说明书、销售文件和最新公告为准;我不会依据未核验资料计算具体金额。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:基金有哪些费用?\n相似问法:申购费怎么收?;赎回费怎么算?;管理费在哪里扣?;基金手续费有哪些?\n标签:基金费用、管理费、托管费、销售服务费", + "snippet": "基金有哪些费用?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-004", + "knowledge_type": "product_inquiry", + "title": "15 点后还能买基金吗?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "交易日", + "15点", + "申购受理", + "T日" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-004\",\"question\":\"15 点后还能买基金吗?\",\"paraphrases\":[\"周末能申购吗?\",\"T 日是什么意思?\",\"什么时候算当天申请?\",\"交易日怎么判断?\"],\"answer\":\"基金交易申请是否按当日处理,通常与交易日、申请受理截止时间以及基金的具体规则有关。非交易日或截止时间后提交的申请,通常顺延至下一交易日处理。不同基金和渠道可能存在差异,请以产品规则和交易页面提示为准。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:15 点后还能买基金吗?\n相似问法:周末能申购吗?;T 日是什么意思?;什么时候算当天申请?;交易日怎么判断?\n标签:交易日、15点、申购受理、T日", + "snippet": "15 点后还能买基金吗?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-005", + "knowledge_type": "product_inquiry", + "title": "基金可以提现吗,怎么赎回?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "赎回", + "提现", + "办理路径", + "到账" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-005\",\"question\":\"基金可以提现吗,怎么赎回?\",\"paraphrases\":[\"基金怎么卖?\",\"赎回钱什么时候到?\",\"卖出后多久到账?\",\"可以提现吗?\"],\"answer\":\"赎回需由您本人在官方交易渠道提交。到账时间受基金类型、交易申请时间、交易日、登记确认和支付渠道等因素影响,具体以基金合同、公告及交易页面显示为准。我可以解释规则,但不能替您赎回或承诺到账时间。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:基金可以提现吗,怎么赎回?\n相似问法:基金怎么卖?;赎回钱什么时候到?;卖出后多久到账?;可以提现吗?\n标签:赎回、提现、办理路径、到账", + "snippet": "基金可以提现吗,怎么赎回?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-006", + "knowledge_type": "product_inquiry", + "title": "刚买的基金能撤单吗?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "撤单", + "取消申购", + "取消赎回" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-006\",\"question\":\"刚买的基金能撤单吗?\",\"paraphrases\":[\"能撤单吗?\",\"取消申购\",\"赎回可以撤销吗?\",\"当天提交能取消吗?\"],\"answer\":\"能否撤销申请取决于基金类型、申请状态、交易时间和渠道规则。当前客服 Agent 不能读取您的订单或确认撤销入口;如需核实或办理,请保留订单号、错误提示和发生时间后联系人工客服 15936583816。我不能代您撤单或改变订单状态。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:刚买的基金能撤单吗?\n相似问法:能撤单吗?;取消申购;赎回可以撤销吗?;当天提交能取消吗?\n标签:撤单、取消申购、取消赎回", + "snippet": "刚买的基金能撤单吗?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-007", + "knowledge_type": "product_inquiry", + "title": "什么是定投?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "定投", + "定期定额", + "扣款周期" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-007\",\"question\":\"什么是定投?\",\"paraphrases\":[\"怎么做定投?\",\"定投最低多少钱?\",\"哪天扣款?\",\"定投有什么规则?\"],\"answer\":\"定投是按约定周期和金额进行基金投资的一种方式。可设置的扣款周期、扣款日、最低金额和适用基金以官方页面及产品规则为准。定投不能规避市场风险,也不保证收益;具体开通和修改应由您本人在官方渠道操作。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:什么是定投?\n相似问法:怎么做定投?;定投最低多少钱?;哪天扣款?;定投有什么规则?\n标签:定投、定期定额、扣款周期", + "snippet": "什么是定投?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-008", + "knowledge_type": "product_inquiry", + "title": "基金会分红吗?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "基金分红", + "现金分红", + "红利再投资" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-008\",\"question\":\"基金会分红吗?\",\"paraphrases\":[\"现金分红和红利再投资有什么区别?\",\"分红什么时候到账?\",\"能改分红方式吗?\"],\"answer\":\"基金是否分红、分红方式、权益登记日和到账安排以基金合同及最新公告为准。现金分红与红利再投资的适用条件可能不同;涉及本人持有份额或修改分红方式时,应由您本人在官方渠道办理。我不能保证分红发生或代为修改设置。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:基金会分红吗?\n相似问法:现金分红和红利再投资有什么区别?;分红什么时候到账?;能改分红方式吗?\n标签:基金分红、现金分红、红利再投资", + "snippet": "基金会分红吗?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-009", + "knowledge_type": "policy_explain", + "title": "为什么要做风险测评?", + "milvus_collection": "fin_policy_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "风险测评", + "适当性", + "C1-C5", + "R1-R5" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-009\",\"question\":\"为什么要做风险测评?\",\"paraphrases\":[\"不测能买吗?\",\"C3 能买 R4 吗?\",\"风险等级怎么来的?\",\"风险测评过期怎么办?\"],\"answer\":\"风险测评用于了解投资者的风险承受能力,并与产品风险等级严格一一匹配。当前首版规则为 C1 对应 R1、C2 对应 R2、C3 对应 R3、C4 对应 R4;不支持跨级购买、风险揭示后购买或由客服人工放行。首版没有 R5 产品,因此 C5 当前没有对应的可购产品。客服 Agent 只能解释规则,不能替您填写或修改测评、认定资格或绕过系统校验;最终以受控交易页面的实时结果为准。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:为什么要做风险测评?\n相似问法:不测能买吗?;C3 能买 R4 吗?;风险等级怎么来的?;风险测评过期怎么办?\n标签:风险测评、适当性、C1-C5、R1-R5", + "snippet": "为什么要做风险测评?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-014", + "knowledge_type": "policy_explain", + "title": "C3 能买 R4 基金吗?", + "milvus_collection": "fin_policy_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "C3", + "R4", + "适当性", + "风险等级匹配" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-014\",\"question\":\"C3 能买 R4 基金吗?\",\"paraphrases\":[\"平衡型能买高风险基金吗?\",\"C3 买指数基金行不行?\",\"风险等级差一级能买吗?\",\"签风险揭示后能买 R4 吗?\"],\"answer\":\"不能。奶龙基金首版执行严格的风险等级一一匹配规则:C3 仅可购买 R3 产品,不能购买 R4 产品;签署风险揭示、联系人工或咨询客服均不能改变该限制。请以受控交易页面的风险测评和产品风险等级校验结果为准,客服 Agent 不会替您修改测评或绕过拦截。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:C3 能买 R4 基金吗?\n相似问法:平衡型能买高风险基金吗?;C3 买指数基金行不行?;风险等级差一级能买吗?;签风险揭示后能买 R4 吗?\n标签:C3、R4、适当性、风险等级匹配", + "snippet": "C3 能买 R4 基金吗?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-015", + "knowledge_type": "policy_explain", + "title": "为什么没有双录或跨级购买入口?", + "milvus_collection": "fin_policy_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "双录", + "跨级购买", + "风险揭示", + "严格匹配" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-015\",\"question\":\"为什么没有双录或跨级购买入口?\",\"paraphrases\":[\"双录怎么做?\",\"签风险揭示能跨级买吗?\",\"为什么不能买高一级产品?\",\"人工能给我开通吗?\"],\"answer\":\"奶龙基金首版不提供通过双录、风险揭示或人工确认办理跨级购买的能力,而是执行风险等级与产品等级严格一一匹配。请按本人有效风险测评结果选择对应等级产品;客服 Agent 和投资顾问均不能通过聊天或人工方式修改测评结果、开通跨级权限或替您完成交易。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:为什么没有双录或跨级购买入口?\n相似问法:双录怎么做?;签风险揭示能跨级买吗?;为什么不能买高一级产品?;人工能给我开通吗?\n标签:双录、跨级购买、风险揭示、严格匹配", + "snippet": "为什么没有双录或跨级购买入口?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-016", + "knowledge_type": "policy_explain", + "title": "风险测评过期后还能买基金吗?", + "milvus_collection": "fin_policy_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "风险测评有效期", + "重新测评", + "交易限制" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-016\",\"question\":\"风险测评过期后还能买基金吗?\",\"paraphrases\":[\"测评过期可以提现吗?\",\"风评失效能定投吗?\",\"重测前能买 R4 吗?\",\"风险测评多久有效?\"],\"answer\":\"当前虚拟规则中,风险测评有效期为 12 个月。测评过期且未重新完成时,系统会限制新申购、定投和转换等新增交易;您可按规则处理存量持仓的赎回。客服 Agent 不能替您填写、修改或判断结果,也不能为您解除系统限制;如需确认重测办理方式,请联系人工客服 15936583816。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:风险测评过期后还能买基金吗?\n相似问法:测评过期可以提现吗?;风评失效能定投吗?;重测前能买 R4 吗?;风险测评多久有效?\n标签:风险测评有效期、重新测评、交易限制", + "snippet": "风险测评过期后还能买基金吗?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-010", + "knowledge_type": "policy_explain", + "title": "基金保本吗?", + "milvus_collection": "fin_policy_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "基金风险", + "不保本", + "不保证收益", + "风险教育" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-010\",\"question\":\"基金保本吗?\",\"paraphrases\":[\"会不会亏?\",\"风险大不大?\",\"基金跌了怎么办?\",\"收益能保证吗?\"],\"answer\":\"基金投资不等同于存款,存在市场波动和本金损失的可能,不保证本金或未来收益。不同基金风险特征不同,请在交易前阅读基金合同、招募说明书和风险揭示材料,并根据自身情况谨慎决策。过往业绩不代表未来表现。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:基金保本吗?\n相似问法:会不会亏?;风险大不大?;基金跌了怎么办?;收益能保证吗?\n标签:基金风险、不保本、不保证收益、风险教育", + "snippet": "基金保本吗?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-011", + "knowledge_type": "faq", + "title": "基金公告和合同在哪里看?", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "信息披露", + "基金合同", + "招募说明书", + "公告" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-011\",\"question\":\"基金公告和合同在哪里看?\",\"paraphrases\":[\"招募说明书怎么找?\",\"哪里看最新消息?\",\"定期报告在哪?\",\"基金合同在哪?\"],\"answer\":\"基金合同、招募说明书、定期报告和临时公告应以官方信息披露渠道发布的版本为准。请在本平台官方 App、官网或监管认可的信息披露渠道查询;阅读时注意公告日期和适用基金,避免使用转载或过期内容。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:基金公告和合同在哪里看?\n相似问法:招募说明书怎么找?;哪里看最新消息?;定期报告在哪?;基金合同在哪?\n标签:信息披露、基金合同、招募说明书、公告", + "snippet": "基金公告和合同在哪里看?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-PUB-012", + "knowledge_type": "policy_explain", + "title": "为什么需要补充或更新资料?", + "milvus_collection": "fin_policy_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "客户身份识别", + "资料更新", + "反洗钱" + ], + "content_text": "{\"qa_id\":\"RAG-PUB-012\",\"question\":\"为什么需要补充或更新资料?\",\"paraphrases\":[\"身份证过期怎么办?\",\"为什么问资金来源?\",\"不补可以提现吗?\",\"资料完善有什么用?\"],\"answer\":\"金融机构依法需要持续识别和核实客户身份信息,并在必要时补充或更新资料。资料不完整可能影响部分业务办理,具体以本平台通知和适用规则为准。请仅通过官方渠道更新资料,不要在聊天中提交完整证件号、银行卡号、密码或验证码。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:为什么需要补充或更新资料?\n相似问法:身份证过期怎么办?;为什么问资金来源?;不补可以提现吗?;资料完善有什么用?\n标签:客户身份识别、资料更新、反洗钱", + "snippet": "为什么需要补充或更新资料?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-SVC-001", + "knowledge_type": "faq", + "title": "怎么联系你们?", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "联系方式", + "人工客服", + "官网", + "App", + "官方微信" + ], + "content_text": "{\"qa_id\":\"NF-SVC-001\",\"question\":\"怎么联系你们?\",\"paraphrases\":[\"怎么联系你们?\",\"客服入口在哪?\",\"除了电话还有什么渠道?\",\"本平台怎么找人工?\"],\"answer\":\"您可通过官网 www.nailong.com、App、官方微信和全国统一客服热线 15936583816 获取服务。官网、App 和官方微信可提供公开信息与自助入口;当前需要人工处理时,请在工作日 09:00-18:00 直接联系人工客服 15936583816。奶龙基金智能助手当前不能确认官网在线人工或人工工单是否已接入。涉及账户和交易问题,请不要在聊天中发送密码、验证码或完整银行卡号。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:怎么联系你们?\n相似问法:怎么联系你们?;客服入口在哪?;除了电话还有什么渠道?;本平台怎么找人工?\n标签:联系方式、人工客服、官网、App、官方微信", + "snippet": "怎么联系你们?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-SVC-003", + "knowledge_type": "faq", + "title": "什么问题能自助解决?", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "自助服务", + "人工边界", + "服务范围" + ], + "content_text": "{\"qa_id\":\"NF-SVC-003\",\"question\":\"什么问题能自助解决?\",\"paraphrases\":[\"什么问题能自助解决?\",\"为什么要我转人工?\",\"智能客服能办什么?\",\"你和人工有什么区别?\"],\"answer\":\"自助服务适合基金公开信息、交易规则、费率说明、开户和资料完善指引等问题。涉及本人订单、账户异常、投诉纠纷、身份核验、可疑交易、赔偿和个性化投资建议时,需要人工处理;请在工作日 09:00-18:00 联系人工客服 15936583816。客服 Agent 不会代您发起或确认交易。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:什么问题能自助解决?\n相似问法:什么问题能自助解决?;为什么要我转人工?;智能客服能办什么?;你和人工有什么区别?\n标签:自助服务、人工边界、服务范围", + "snippet": "什么问题能自助解决?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-SVC-004", + "knowledge_type": "faq", + "title": "我要开户", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "开户", + "个人开户", + "身份核验", + "风险测评" + ], + "content_text": "{\"qa_id\":\"NF-SVC-004\",\"question\":\"我要开户\",\"paraphrases\":[\"我要开户\",\"个人怎么开户?\",\"哪里注册?\",\"开本平台账户\"],\"answer\":\"您可从官网 www.nailong.com的“个人开户”入口或奶龙基金 App 办理个人开户。开户应由本人完成身份信息填写、必要核验和风险测评,并按页面提示绑定可用的支付方式。客服 Agent 可以说明步骤,但不会代为开户、代填资料或接收您的证件和验证码。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:我要开户\n相似问法:我要开户;个人怎么开户?;哪里注册?;开本平台账户\n标签:开户、个人开户、身份核验、风险测评", + "snippet": "我要开户", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-SVC-005", + "knowledge_type": "faq", + "title": "在哪里登录?", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "登录", + "个人账户", + "密码安全" + ], + "content_text": "{\"qa_id\":\"NF-SVC-005\",\"question\":\"在哪里登录?\",\"paraphrases\":[\"在哪里登录?\",\"个人账户怎么进?\",\"官网能登录吗?\",\"App 登录不了怎么办?\"],\"answer\":\"官网 www.nailong.com提供“个人登录”入口,App 也可登录个人直销账户。若您忘记密码、收不到验证码或提示账户异常,请仅在官方登录页处理,并通过官方客服渠道核实。客服 Agent 不会索要密码、验证码、完整身份证号或完整银行卡号。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:在哪里登录?\n相似问法:在哪里登录?;个人账户怎么进?;官网能登录吗?;App 登录不了怎么办?\n标签:登录、个人账户、密码安全", + "snippet": "在哪里登录?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-SVC-006", + "knowledge_type": "faq", + "title": "开户总失败", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "开户失败", + "实名失败", + "错误码", + "绑卡失败" + ], + "content_text": "{\"qa_id\":\"NF-SVC-006\",\"question\":\"开户总失败\",\"paraphrases\":[\"开户总失败\",\"实名过不了怎么办?\",\"绑卡不成功\",\"人脸识别失败\"],\"answer\":\"请先保留页面错误提示和发生时间,再在官方开户页面重试。首版虚拟错误码包括:NL-BANK-1001 表示银行卡暂不支持,NL-BANK-1002 表示开户身份信息与银行卡预留信息不一致,NL-PAY-2001 表示交易金额超过平台限额,NL-PAY-2002 表示银行卡状态或可用余额异常。仍无法完成时,请在工作日 09:00-18:00 联系人工客服 15936583816;不要在聊天中发送证件照片、完整证件号、卡号、密码或验证码。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:开户总失败\n相似问法:开户总失败;实名过不了怎么办?;绑卡不成功;人脸识别失败\n标签:开户失败、实名失败、错误码、绑卡失败", + "snippet": "开户总失败", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-P1-001", + "knowledge_type": "faq", + "title": "支持哪些银行卡,交易限额是多少?", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "支持银行卡", + "借记卡", + "交易限额", + "定投限额" + ], + "content_text": "{\"qa_id\":\"RAG-P1-001\",\"question\":\"支持哪些银行卡,交易限额是多少?\",\"paraphrases\":[\"能绑什么卡?\",\"工行卡能用吗?\",\"单笔最多买多少?\",\"定投限额是多少?\"],\"answer\":\"首版支持本人名下的中国银行、中国工商银行、中国农业银行、中国招商银行和中国建设银行借记卡。平台交易限额为单笔 10,000 元、单日累计 500,000 元、单月累计 1,500,000 元;该限额适用于申购和定投,基金自身的申购限额仍以产品页面为准。客服 Agent 不会在聊天中收取完整银行卡号、密码或验证码。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:支持哪些银行卡,交易限额是多少?\n相似问法:能绑什么卡?;工行卡能用吗?;单笔最多买多少?;定投限额是多少?\n标签:支持银行卡、借记卡、交易限额、定投限额", + "snippet": "支持哪些银行卡,交易限额是多少?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-SVC-007", + "knowledge_type": "faq", + "title": "App 去哪下?", + "milvus_collection": "fin_faq_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "App下载", + "官网", + "防诈骗", + "官方渠道" + ], + "content_text": "{\"qa_id\":\"NF-SVC-007\",\"question\":\"App 去哪下?\",\"paraphrases\":[\"App 去哪下?\",\"怎么下载本平台?\",\"有官网吗?\",\"怎么确认不是假 App?\"],\"answer\":\"请通过官网 www.nailong.com展示的 App 下载入口或正规应用商店获取客户端,并核对应用名称、开发者和官网链接。不要通过陌生短信、群聊链接或他人发送的安装包下载应用;如遇冒用本平台名义的链接或客服,请先通过官方渠道核验。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:App 去哪下?\n相似问法:App 去哪下?;怎么下载本平台?;有官网吗?;怎么确认不是假 App?\n标签:App下载、官网、防诈骗、官方渠道", + "snippet": "App 去哪下?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-STS-004", + "knowledge_type": "product_inquiry", + "title": "为什么不能赎回?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "最短持有期", + "滚动持有期", + "赎回限制" + ], + "content_text": "{\"qa_id\":\"NF-STS-004\",\"question\":\"为什么不能赎回?\",\"paraphrases\":[\"为什么不能赎回?\",\"一年持有期能提前卖吗?\",\"滚动持有是什么意思?\",\"锁定期怎么算?\"],\"answer\":\"部分基金设置最短持有期或滚动运作期。投资者在每笔份额的持有期或运作期未届满前,通常不能提出赎回申请;不同份额的可赎回日期可能不同。请以具体基金合同、产品状态表和本人份额的确认日期为准。当前客服 Agent 不能核算您某笔份额的到期日。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:为什么不能赎回?\n相似问法:为什么不能赎回?;一年持有期能提前卖吗?;滚动持有是什么意思?;锁定期怎么算?\n标签:最短持有期、滚动持有期、赎回限制", + "snippet": "为什么不能赎回?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-STS-006", + "knowledge_type": "product_inquiry", + "title": "奶龙基金支持哪些份额类别?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "A类", + "C类", + "份额类别", + "产品范围" + ], + "content_text": "{\"qa_id\":\"NF-STS-006\",\"question\":\"奶龙基金支持哪些份额类别?\",\"paraphrases\":[\"首版支持 A 类还是 C 类?\",\"有没有 B 类或 E 类?\",\"只有 A/C 类吗?\",\"份额能互转吗?\"],\"answer\":\"奶龙基金首版仅配置 A 类和 C 类份额。同一基金的 A/C 类在申购费、销售服务费和适用规则上可能不同,具体以产品资料和交易页面为准;首版未开放 B、E 或其他份额类别,不能将 A/C 类规则套用于未开放类别。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:奶龙基金支持哪些份额类别?\n相似问法:首版支持 A 类还是 C 类?;有没有 B 类或 E 类?;只有 A/C 类吗?;份额能互转吗?\n标签:A类、C类、份额类别、产品范围", + "snippet": "奶龙基金支持哪些份额类别?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-STS-007", + "knowledge_type": "product_inquiry", + "title": "为什么不能转换?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "基金转换", + "转换转入", + "转换转出" + ], + "content_text": "{\"qa_id\":\"NF-STS-007\",\"question\":\"为什么不能转换?\",\"paraphrases\":[\"为什么不能转换?\",\"A 转 C 可以吗?\",\"基金转换灰了\",\"转换入暂停\"],\"answer\":\"基金转换需要同时满足转出基金、转入基金、份额类别、渠道和状态条件。公开状态表会分别展示转换入和转换出是否开放,部分基金或份额类别不支持转换。请先查询两只基金的最新状态;客服 Agent 不能代为发起转换或替您判断具体交易是否成功。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:为什么不能转换?\n相似问法:为什么不能转换?;A 转 C 可以吗?;基金转换灰了;转换入暂停\n标签:基金转换、转换转入、转换转出", + "snippet": "为什么不能转换?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-STS-008", + "knowledge_type": "product_inquiry", + "title": "ETF 为什么不能定投?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "ETF", + "ETF联接", + "场内基金", + "产品范围" + ], + "content_text": "{\"qa_id\":\"NF-STS-008\",\"question\":\"ETF 为什么不能定投?\",\"paraphrases\":[\"ETF 为什么不能定投?\",\"ETF 怎么申购赎回?\",\"ETF 的限额在哪看?\",\"联接基金和 ETF 一样吗?\"],\"answer\":\"ETF 与普通场外开放式基金的申购赎回机制不同,通常需要区分场内 ETF、场外联接基金和普通开放式基金。奶龙基金首版暂不开放 ETF 或 ETF 联接基金,因此不提供 ETF 的申购、赎回、定投或转换办理;我可以说明其通用概念,但不会把其他平台的 ETF 规则套用于本平台。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:ETF 为什么不能定投?\n相似问法:ETF 为什么不能定投?;ETF 怎么申购赎回?;ETF 的限额在哪看?;联接基金和 ETF 一样吗?\n标签:ETF、ETF联接、场内基金、产品范围", + "snippet": "ETF 为什么不能定投?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-STS-009", + "knowledge_type": "product_inquiry", + "title": "本平台有 QDII、FOF 或养老基金吗?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "QDII", + "FOF", + "养老基金", + "Y类", + "未开放产品" + ], + "content_text": "{\"qa_id\":\"NF-STS-009\",\"question\":\"本平台有 QDII、FOF 或养老基金吗?\",\"paraphrases\":[\"有没有 QDII?\",\"有没有 FOF?\",\"养老基金怎么买?\",\"Y 类份额是什么?\"],\"answer\":\"奶龙基金首版暂不开放 QDII、FOF、养老目标基金和个人养老金 Y 类份额,也不支持对应的申购、赎回、定投或转换办理。我可以说明这些产品的通用概念;后续如开放,以届时的官方产品目录、公告和交易页面规则为准。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:本平台有 QDII、FOF 或养老基金吗?\n相似问法:有没有 QDII?;有没有 FOF?;养老基金怎么买?;Y 类份额是什么?\n标签:QDII、FOF、养老基金、Y类、未开放产品", + "snippet": "本平台有 QDII、FOF 或养老基金吗?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-STS-010", + "knowledge_type": "product_inquiry", + "title": "为什么个人买不了?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "个人投资者", + "资格限制", + "产品开放范围" + ], + "content_text": "{\"qa_id\":\"NF-STS-010\",\"question\":\"为什么个人买不了?\",\"paraphrases\":[\"为什么个人买不了?\",\"提示不对个人开放\",\"机构才能买吗?\",\"我的账户不能申购\"],\"answer\":\"部分基金或份额可能不面向个人投资者开放申购、定投或转换转入,或者仅向满足特定账户条件的投资者开放。请以产品状态表、基金合同和交易页面提示为准。客服 Agent 可以解释公开资格限制,但不能绕过系统校验或为您变更投资者身份。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:为什么个人买不了?\n相似问法:为什么个人买不了?;提示不对个人开放;机构才能买吗?;我的账户不能申购\n标签:个人投资者、资格限制、产品开放范围", + "snippet": "为什么个人买不了?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-TRD-001", + "knowledge_type": "product_inquiry", + "title": "怎么买一只基金?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "申购流程", + "买基金", + "风险揭示" + ], + "content_text": "{\"qa_id\":\"NF-TRD-001\",\"question\":\"怎么买一只基金?\",\"paraphrases\":[\"怎么买一只基金?\",\"申购步骤是什么?\",\"第一次下单怎么操作?\",\"为什么让我做测评?\"],\"answer\":\"典型直销申购流程包括:登录本人账户,搜索基金名称或代码,阅读产品资料和风险揭示,确认风险测评与产品匹配,输入金额并由本人确认交易。实际页面会根据基金状态、份额类别和账户资格校验。客服 Agent 只能讲解流程,不能替您下单、输入交易密码或确认交易。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:怎么买一只基金?\n相似问法:怎么买一只基金?;申购步骤是什么?;第一次下单怎么操作?;为什么让我做测评?\n标签:申购流程、买基金、风险揭示", + "snippet": "怎么买一只基金?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-TRD-002", + "knowledge_type": "product_inquiry", + "title": "基金怎么赎回?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "赎回流程", + "卖基金", + "确认到账" + ], + "content_text": "{\"qa_id\":\"NF-TRD-002\",\"question\":\"基金怎么赎回?\",\"paraphrases\":[\"基金怎么赎回?\",\"我要全部卖掉\",\"赎回要填什么?\",\"预计到账金额怎么看?\"],\"answer\":\"赎回应由您本人在官方交易页面选择基金和赎回份额后确认。页面展示的预计到账金额和时间只作交易前参考,实际结果受确认净值、费用、持有期、基金类型和支付处理影响。客服 Agent 不会替您赎回,也不能承诺最终到账金额或到账时间。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:基金怎么赎回?\n相似问法:基金怎么赎回?;我要全部卖掉;赎回要填什么?;预计到账金额怎么看?\n标签:赎回流程、卖基金、确认到账", + "snippet": "基金怎么赎回?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-TRD-003", + "knowledge_type": "product_inquiry", + "title": "15 点后买算哪天?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "交易日", + "15点", + "T日", + "受理日期" + ], + "content_text": "{\"qa_id\":\"NF-TRD-003\",\"question\":\"15 点后买算哪天?\",\"paraphrases\":[\"15 点后买算哪天?\",\"周末提交算什么时候?\",\"今天还能撤吗?\",\"为什么显示下一交易日?\"],\"answer\":\"基金申请的受理日期与交易日和该产品的受理截止时间有关。截止时间后或非交易日提交的申请,通常会顺延至下一交易日处理;具体以基金合同、交易规则和页面提示为准。客服 Agent 不能仅凭聊天时间判断您某笔订单的实际受理日期。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:15 点后买算哪天?\n相似问法:15 点后买算哪天?;周末提交算什么时候?;今天还能撤吗?;为什么显示下一交易日?\n标签:交易日、15点、T日、受理日期", + "snippet": "15 点后买算哪天?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-TRD-008", + "knowledge_type": "product_inquiry", + "title": "怎么设置定投?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "定投设置", + "定期定额", + "定期不定额" + ], + "content_text": "{\"qa_id\":\"NF-TRD-008\",\"question\":\"怎么设置定投?\",\"paraphrases\":[\"怎么设置定投?\",\"定投有哪几种?\",\"每月自动买怎么开?\",\"定期不定额是什么?\"],\"answer\":\"官网 www.nailong.com公开业务规则包含电子直销定期定额和定期不定额投资业务。具体支持的基金、扣款周期、金额、日期、银行卡和限额应以交易页面及对应规则为准。定投不保证收益,且客服 Agent 不会代为开通或设置计划。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:怎么设置定投?\n相似问法:怎么设置定投?;定投有哪几种?;每月自动买怎么开?;定期不定额是什么?\n标签:定投设置、定期定额、定期不定额", + "snippet": "怎么设置定投?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-TRD-011", + "knowledge_type": "policy_explain", + "title": "为什么不让我买?", + "milvus_collection": "fin_policy_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "风险不匹配", + "适当性", + "系统校验", + "风险测评" + ], + "content_text": "{\"qa_id\":\"NF-TRD-011\",\"question\":\"为什么不让我买?\",\"paraphrases\":[\"为什么不让我买?\",\"风险不匹配怎么办?\",\"能跳过测评吗?\",\"我的等级不够能买吗?\"],\"answer\":\"系统会根据有效风险测评结果与产品风险等级进行适当性校验。客服 Agent 可以解释规则和提示重新完成测评,但不能替您修改结果、绕过拦截或将不匹配产品推荐给您。是否可交易以系统实时校验结果为准。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:为什么不让我买?\n相似问法:为什么不让我买?;风险不匹配怎么办?;能跳过测评吗?;我的等级不够能买吗?\n标签:风险不匹配、适当性、系统校验、风险测评", + "snippet": "为什么不让我买?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "NF-CMP-008", + "knowledge_type": "policy_explain", + "title": "为什么让我补资料?", + "milvus_collection": "fin_policy_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "客户身份识别", + "资料更新", + "资金来源", + "反洗钱" + ], + "content_text": "{\"qa_id\":\"NF-CMP-008\",\"question\":\"为什么让我补资料?\",\"paraphrases\":[\"为什么让我补资料?\",\"身份证过期怎么办?\",\"为什么问资金来源?\",\"不更新会怎样?\"],\"answer\":\"金融机构需要持续识别和核实客户身份信息,并在必要时更新资料。资料不完整可能影响部分业务办理;客服 Agent 不会在聊天中收集完整证件信息,也不能代您更新资料。当前如需办理或核实资料更新方式,请联系人工客服 15936583816。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:为什么让我补资料?\n相似问法:为什么让我补资料?;身份证过期怎么办?;为什么问资金来源?;不更新会怎样?\n标签:客户身份识别、资料更新、资金来源、反洗钱", + "snippet": "为什么让我补资料?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-RVW-001", + "knowledge_type": "product_inquiry", + "title": "我搜不到这只基金。", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "基金搜索", + "基金代码", + "份额类别", + "产品目录" + ], + "content_text": "{\"qa_id\":\"RAG-RVW-001\",\"question\":\"我搜不到这只基金。\",\"paraphrases\":[\"基金代码查不到\",\"名字不对吗?\",\"为什么产品列表没有?\",\"是不是下架了?\"],\"answer\":\"请先核对完整基金名称、基金代码和份额类别。同名或相近名称、不同份额类别以及产品状态变化,都可能影响搜索结果。若该产品不在本平台已审核目录中,我不能推断它是否在售、已下架或可交易;请以官方产品目录和公告为准。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:我搜不到这只基金。\n相似问法:基金代码查不到;名字不对吗?;为什么产品列表没有?;是不是下架了?\n标签:基金搜索、基金代码、份额类别、产品目录", + "snippet": "我搜不到这只基金。", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-RVW-005", + "knowledge_type": "policy_explain", + "title": "我已经登录了,为什么还要重新验证身份?", + "milvus_collection": "fin_policy_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "身份核验", + "权限边界", + "敏感数据" + ], + "content_text": "{\"qa_id\":\"RAG-RVW-005\",\"question\":\"我已经登录了,为什么还要重新验证身份?\",\"paraphrases\":[\"提示重新核验\",\"为什么权限不足?\",\"登录了还不能查?\",\"身份验证失败。\"],\"answer\":\"登录状态不等于客服 Agent 已获得读取敏感服务的权限。当前客服 Agent 不读取您的账户、交易或资料数据,也不能为您发起身份核验;如页面提示需要重新核验或无法完成,请联系人工客服 15936583816,且不要在聊天中发送敏感凭据。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:我已经登录了,为什么还要重新验证身份?\n相似问法:提示重新核验;为什么权限不足?;登录了还不能查?;身份验证失败。\n标签:身份核验、权限边界、敏感数据", + "snippet": "我已经登录了,为什么还要重新验证身份?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-RVW-008", + "knowledge_type": "product_inquiry", + "title": "买 1000 元基金实际会扣多少钱?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "申购费", + "赎回费", + "确认份额", + "金额试算" + ], + "content_text": "{\"qa_id\":\"RAG-RVW-008\",\"question\":\"买 1000 元基金实际会扣多少钱?\",\"paraphrases\":[\"手续费怎么算?\",\"到账份额怎么计算?\",\"赎回能拿回多少?\",\"费用能帮我算吗?\"],\"answer\":\"实际扣款金额、确认份额或赎回到账金额会受基金代码、份额类别、费率、优惠、持有期、确认净值和交易状态影响。当前客服 Agent 不具备实时费率、优惠、净值和交易参数的试算能力,不能根据“买 1000 元”承诺实际扣款或到账金额;我可以说明已审核的公开费率规则,具体金额请以最终确认结果或人工客服核实为准。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:买 1000 元基金实际会扣多少钱?\n相似问法:手续费怎么算?;到账份额怎么计算?;赎回能拿回多少?;费用能帮我算吗?\n标签:申购费、赎回费、确认份额、金额试算", + "snippet": "买 1000 元基金实际会扣多少钱?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-RVW-010", + "knowledge_type": "policy_explain", + "title": "未成年人、港澳台或境外人士能开户吗?", + "milvus_collection": "fin_policy_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "开户资格", + "未成年人", + "港澳台", + "境外人士" + ], + "content_text": "{\"qa_id\":\"RAG-RVW-010\",\"question\":\"未成年人、港澳台或境外人士能开户吗?\",\"paraphrases\":[\"孩子能买基金吗?\",\"未成年怎么开户?\",\"港澳台居民能开户吗?\",\"外国人能注册吗?\"],\"answer\":\"开户资格、监护关系、证件要求和适用渠道需以本平台最新开户规则及适用法律要求为准。客服 Agent 不会依据聊天内容判断您的资格,也不会收取证件材料;请先查看官方开户说明,情况特殊时转人工核验。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:未成年人、港澳台或境外人士能开户吗?\n相似问法:孩子能买基金吗?;未成年怎么开户?;港澳台居民能开户吗?;外国人能注册吗?\n标签:开户资格、未成年人、港澳台、境外人士", + "snippet": "未成年人、港澳台或境外人士能开户吗?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-RVW-011", + "knowledge_type": "policy_explain", + "title": "风险测评过期了怎么办?", + "milvus_collection": "fin_policy_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "风险测评有效期", + "重新测评", + "存量赎回" + ], + "content_text": "{\"qa_id\":\"RAG-RVW-011\",\"question\":\"风险测评过期了怎么办?\",\"paraphrases\":[\"测评失效\",\"怎么重新测?\",\"风险等级能改吗?\",\"为什么不让我交易?\"],\"answer\":\"当前虚拟规则中,风险测评有效期为 12 个月。过期且未完成重测时,系统会限制新申购、定投和转换等新增交易;存量持仓可按规则赎回。客服 Agent 不能替您填写、修改结果、解除限制或根据结果推荐具体基金;当前如需确认重测办理方式,请联系人工客服 15936583816。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:风险测评过期了怎么办?\n相似问法:测评失效;怎么重新测?;风险等级能改吗?;为什么不让我交易?\n标签:风险测评有效期、重新测评、存量赎回", + "snippet": "风险测评过期了怎么办?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-CONFIG-001", + "knowledge_type": "product_inquiry", + "title": "奶龙基金有哪些产品?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "产品清单", + "NL-M001", + "NL-B001", + "NL-H001", + "NL-I001", + "NL-G001" + ], + "content_text": "{\"qa_id\":\"RAG-CONFIG-001\",\"question\":\"奶龙基金有哪些产品?\",\"paraphrases\":[\"产品清单\",\"有哪些基金可以买\",\"你们卖什么基金\",\"基金代码是什么\"],\"answer\":\"当前虚拟产品池包括:NL-M001 奶龙零钱宝货币基金(R1)、NL-B001 奶龙稳享纯债基金(R2)、NL-H001 奶龙均衡优选混合基金(R3)、NL-I001 奶龙核心指数基金(R4)和 NL-G001 奶龙成长精选混合基金(R4)。首版仅配置 A 类和 C 类份额;未列入清单的产品,我不能推断其是否在售或可交易。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:奶龙基金有哪些产品?\n相似问法:产品清单;有哪些基金可以买;你们卖什么基金;基金代码是什么\n标签:产品清单、NL-M001、NL-B001、NL-H001、NL-I001、NL-G001", + "snippet": "奶龙基金有哪些产品?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-CONFIG-002", + "knowledge_type": "product_inquiry", + "title": "你们支持哪些类型的基金?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "货币基金", + "债券基金", + "混合基金", + "指数基金", + "未开放产品" + ], + "content_text": "{\"qa_id\":\"RAG-CONFIG-002\",\"question\":\"你们支持哪些类型的基金?\",\"paraphrases\":[\"有 QDII 吗\",\"有 FOF 吗\",\"有 ETF 吗\",\"有养老基金吗\",\"有私募吗\"],\"answer\":\"首版虚拟产品池支持货币基金、纯债基金、混合基金和指数基金。QDII、FOF、ETF、ETF 联接、养老目标基金、个人养老金 Y 类份额和私募基金首版暂不开放;我可以提供这些类型的通用概念说明。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:你们支持哪些类型的基金?\n相似问法:有 QDII 吗;有 FOF 吗;有 ETF 吗;有养老基金吗;有私募吗\n标签:货币基金、债券基金、混合基金、指数基金、未开放产品", + "snippet": "你们支持哪些类型的基金?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-CONFIG-003", + "knowledge_type": "product_inquiry", + "title": "A 类和 C 类有什么区别?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "A类", + "C类", + "申购费", + "销售服务费" + ], + "content_text": "{\"qa_id\":\"RAG-CONFIG-003\",\"question\":\"A 类和 C 类有什么区别?\",\"paraphrases\":[\"份额类别怎么选\",\"A/C 类费率\",\"为什么有两个代码\",\"C 类是不是没有申购费\"],\"answer\":\"首版虚拟规则中,A 类申购费为 0.60%,不收销售服务费;C 类申购费为 0%,按年收取 0.40%销售服务费。不同份额的费用和适用规则不同,不能仅根据持有时间作出购买建议,请以交易确认页和产品资料为准。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:A 类和 C 类有什么区别?\n相似问法:份额类别怎么选;A/C 类费率;为什么有两个代码;C 类是不是没有申购费\n标签:A类、C类、申购费、销售服务费", + "snippet": "A 类和 C 类有什么区别?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-CONFIG-004", + "knowledge_type": "product_inquiry", + "title": "申购费和赎回费怎么收?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "申购费", + "赎回费", + "持有7日", + "费率" + ], + "content_text": "{\"qa_id\":\"RAG-CONFIG-004\",\"question\":\"申购费和赎回费怎么收?\",\"paraphrases\":[\"买入手续费\",\"卖出手续费\",\"持有几天有赎回费\",\"手续费怎么算\"],\"answer\":\"首版虚拟费率规则为:A 类申购费 0.60%,C 类申购费 0%;货币基金申购费和赎回费为 0%;其他演示产品持有少于 7 日按 1.50%收取赎回费,持有满 7 日暂免。管理费、托管费和销售服务费按具体产品及份额类别计提,最终以交易页面显示为准。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:申购费和赎回费怎么收?\n相似问法:买入手续费;卖出手续费;持有几天有赎回费;手续费怎么算\n标签:申购费、赎回费、持有7日、费率", + "snippet": "申购费和赎回费怎么收?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-CONFIG-005", + "knowledge_type": "product_inquiry", + "title": "15 点前后买基金有什么区别?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "交易日", + "15点", + "T日", + "非交易日" + ], + "content_text": "{\"qa_id\":\"RAG-CONFIG-005\",\"question\":\"15 点前后买基金有什么区别?\",\"paraphrases\":[\"什么时候算 T 日\",\"周末申购算哪天\",\"15:00 后还能买吗\",\"交易日怎么判断\"],\"answer\":\"虚拟交易规则为:交易日 15:00 前提交的申请按当日申请处理;15:00 后、周末或法定节假日提交的申请按下一交易日处理。交易日以系统维护的中国内地交易日历为准,具体以交易页面提示为准。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:15 点前后买基金有什么区别?\n相似问法:什么时候算 T 日;周末申购算哪天;15:00 后还能买吗;交易日怎么判断\n标签:交易日、15点、T日、非交易日", + "snippet": "15 点前后买基金有什么区别?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-CONFIG-006", + "knowledge_type": "product_inquiry", + "title": "申购和赎回什么时候确认、到账?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "申购确认", + "T+1", + "赎回到账", + "T+3" + ], + "content_text": "{\"qa_id\":\"RAG-CONFIG-006\",\"question\":\"申购和赎回什么时候确认、到账?\",\"paraphrases\":[\"买完多久有份额\",\"赎回几天到账\",\"T+1 是什么意思\",\"钱什么时候回来\"],\"answer\":\"普通虚拟产品申购按 T+1 交易日确认;NL-M001 货币基金赎回预计 T+1 到账,其余演示产品预计 T+3 到账。实际结果还会受到产品状态、确认净值、费用和支付处理影响,页面预计时间不等于最终承诺。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:申购和赎回什么时候确认、到账?\n相似问法:买完多久有份额;赎回几天到账;T+1 是什么意思;钱什么时候回来\n标签:申购确认、T+1、赎回到账、T+3", + "snippet": "申购和赎回什么时候确认、到账?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-CONFIG-007", + "knowledge_type": "product_inquiry", + "title": "定投怎么设置?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "定投", + "最低100元", + "扣款周期", + "扣款失败" + ], + "content_text": "{\"qa_id\":\"RAG-CONFIG-007\",\"question\":\"定投怎么设置?\",\"paraphrases\":[\"每月自动买\",\"定投最低多少钱\",\"哪天扣款\",\"定投失败怎么办\"],\"answer\":\"首版虚拟规则支持普通定投,最低金额 100 元,扣款周期为每周、每两周或每月,可选日期为每月 1 日、8 日、15 日和 25 日。扣款失败不自动补扣,连续 3 期失败后自动暂停计划;智能定投首版暂不支持。定投设置、修改和终止必须由本人在受控页面操作。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:定投怎么设置?\n相似问法:每月自动买;定投最低多少钱;哪天扣款;定投失败怎么办\n标签:定投、最低100元、扣款周期、扣款失败", + "snippet": "定投怎么设置?", + "review_status": "pending_review", + "status": "active" + }, + { + "qa_id": "RAG-CONFIG-008", + "knowledge_type": "product_inquiry", + "title": "基金转换和转托管支持吗?", + "milvus_collection": "fin_product_collection", + "version": "v5.8", + "source_file": "客服Agent知识库_QA问答对_v5_RAG发布候选版.txt", + "source_type": "qa_pair", + "source_url": null, + "effective_date": null, + "expire_date": null, + "tags": [ + "基金转换", + "转托管", + "份额兼容", + "风险匹配" + ], + "content_text": "{\"qa_id\":\"RAG-CONFIG-008\",\"question\":\"基金转换和转托管支持吗?\",\"paraphrases\":[\"A 转 C\",\"基金换成另一只\",\"能转到别的平台吗\",\"转托管怎么办\"],\"answer\":\"首版虚拟规则支持同一演示产品池内、份额兼容、状态开放且风险匹配的基金转换;转托管首版暂不支持。客服 Agent 只能解释规则,不能替您发起、确认或撤销交易。\",\"audience\":[\"visitor\",\"authenticated_user\"],\"agent_data_access\":\"none\",\"source_version\":\"v5.8\"}", + "retrieval_text": "标准问题:基金转换和转托管支持吗?\n相似问法:A 转 C;基金换成另一只;能转到别的平台吗;转托管怎么办\n标签:基金转换、转托管、份额兼容、风险匹配", + "snippet": "基金转换和转托管支持吗?", + "review_status": "pending_review", + "status": "active" + } + ] +} diff --git a/tests/unit/tools/test_knowledge_import_preflight.py b/tests/unit/tools/test_knowledge_import_preflight.py new file mode 100644 index 0000000..b00c7c5 --- /dev/null +++ b/tests/unit/tools/test_knowledge_import_preflight.py @@ -0,0 +1,75 @@ +import json + +import pytest + +from tools.knowledge_import_preflight import build_import_manifest + + +def vector_candidate() -> dict[str, object]: + return { + "qa_id": "RAG-PUB-001", + "title": "基金交易确认时间说明", + "question": "基金什么时候确认?", + "paraphrases": ["申购何时确认", "赎回多久确认"], + "answer": "交易确认时间以产品规则和实际交易日为准。", + "scope": "public", + "intent": "policy_explain", + "collection": "fin_policy_collection", + "execution_mode": "vector_search", + "retrieval_status": "approved_candidate", + "audience": ["visitor", "authenticated_user"], + "agent_data_access": "none", + "tags": ["交易规则", "确认"], + "phase": "phase_1", + "source_type": "qa_pair", + "source_file": "qa-v5.8.txt", + "source_url": None, + "source_version": "v5.8", + "review_status": "approved_candidate", + "status": "active", + "effective_date": None, + "expire_date": None, + } + + +def rule_only_record() -> dict[str, object]: + return { + "qa_id": "RAG-SEC-001", + "scope": "security_notice", + "collection": None, + "execution_mode": "fixed_route", + "retrieval_status": "rule_only", + } + + +def test_manifest_contains_only_eligible_public_records_pending_admin_review() -> None: + manifest = build_import_manifest( + [vector_candidate(), rule_only_record()], source_name="qa-v5.8.jsonl" + ) + + assert manifest["summary"] == { + "total_records": 2, + "eligible_records": 1, + "excluded_rule_records": 1, + "publication_state": "pending_review", + } + entry = manifest["records"][0] + assert entry["qa_id"] == "RAG-PUB-001" + assert entry["knowledge_type"] == "policy_explain" + assert entry["milvus_collection"] == "fin_policy_collection" + assert entry["review_status"] == "pending_review" + assert entry["status"] == "active" + assert entry["retrieval_text"] == ( + "标准问题:基金什么时候确认?\n" + "相似问法:申购何时确认;赎回多久确认\n" + "标签:交易规则、确认" + ) + assert json.loads(entry["content_text"])["answer"] == "交易确认时间以产品规则和实际交易日为准。" + + +def test_invalid_public_record_is_rejected_instead_of_silently_entering_manifest() -> None: + invalid = vector_candidate() + invalid["agent_data_access"] = "account" + + with pytest.raises(ValueError, match="RAG-PUB-001"): + build_import_manifest([invalid], source_name="qa-v5.8.jsonl") diff --git a/tools/knowledge_import_preflight.py b/tools/knowledge_import_preflight.py new file mode 100644 index 0000000..ea6d927 --- /dev/null +++ b/tools/knowledge_import_preflight.py @@ -0,0 +1,221 @@ +"""将一期公开 QA 候选转换为不含外部写入的待审核导入清单。""" + +import argparse +import json +from collections.abc import Mapping, Sequence +from pathlib import Path +from typing import Any + +from app.core.knowledge_contracts import ALLOWED_KNOWLEDGE_COLLECTIONS +from app.service.knowledge_config import KnowledgeRuntimeConfig + + +# 仅允许一期三类公开知识按既定路由进入后续发布流程。 +EXPECTED_COLLECTIONS = { + intent: collection + for intent, (collection, _top_k) in KnowledgeRuntimeConfig.DEFAULT_ROUTES.items() +} +# 公开候选必须具备的字段,缺失时不能生成不完整的发布清单。 +REQUIRED_PUBLIC_FIELDS = frozenset({ + "qa_id", + "title", + "question", + "paraphrases", + "answer", + "scope", + "intent", + "collection", + "execution_mode", + "retrieval_status", + "audience", + "agent_data_access", + "tags", + "source_type", + "source_file", + "source_version", + "review_status", + "status", +}) + + +def _required_string(record: Mapping[str, object], field: str, qa_id: str) -> str: + """读取非空字符串字段,拒绝将不完整资料带入后续发布阶段。""" + value = record.get(field) + if not isinstance(value, str) or not value.strip(): + raise ValueError(f"{qa_id}: {field} must be a non-empty string") + return value.strip() + + +def _required_strings(record: Mapping[str, object], field: str, qa_id: str) -> list[str]: + """读取非空字符串数组,并保持来源中已经审核的条目顺序。""" + value = record.get(field) + if not isinstance(value, list) or not value: + raise ValueError(f"{qa_id}: {field} must be a non-empty string list") + strings = [item.strip() for item in value if isinstance(item, str) and item.strip()] + if len(strings) != len(value): + raise ValueError(f"{qa_id}: {field} must contain only non-empty strings") + return strings + + +def _is_rule_only(record: Mapping[str, object]) -> bool: + """控制类记录必须由应用层固定路由处理,绝不能进入向量导入清单。""" + return ( + record.get("collection") is None + and record.get("execution_mode") == "fixed_route" + and record.get("retrieval_status") == "rule_only" + ) + + +def _validate_public_record(record: Mapping[str, object]) -> None: + """验证候选是否符合一期公开知识与最小权限边界。""" + qa_id = _required_string(record, "qa_id", "") + missing = sorted(field for field in REQUIRED_PUBLIC_FIELDS if field not in record) + if missing: + raise ValueError(f"{qa_id}: missing required fields: {', '.join(missing)}") + intent = _required_string(record, "intent", qa_id) + collection = _required_string(record, "collection", qa_id) + if intent not in EXPECTED_COLLECTIONS: + raise ValueError(f"{qa_id}: unsupported public intent: {intent}") + if collection not in ALLOWED_KNOWLEDGE_COLLECTIONS: + raise ValueError(f"{qa_id}: collection is not allowlisted: {collection}") + if collection != EXPECTED_COLLECTIONS[intent]: + raise ValueError(f"{qa_id}: collection does not match intent route") + if record.get("scope") != "public": + raise ValueError(f"{qa_id}: public vector record must have scope=public") + if record.get("execution_mode") != "vector_search": + raise ValueError(f"{qa_id}: public record must use vector_search") + if record.get("retrieval_status") != "approved_candidate": + raise ValueError(f"{qa_id}: record is not an approved candidate") + if record.get("review_status") != "approved_candidate": + raise ValueError(f"{qa_id}: review state cannot enter preflight") + if record.get("status") != "active": + raise ValueError(f"{qa_id}: inactive record cannot enter preflight") + if record.get("agent_data_access") != "none": + raise ValueError(f"{qa_id}: agent data access must remain none") + audience = _required_strings(record, "audience", qa_id) + if set(audience) != {"visitor", "authenticated_user"}: + raise ValueError(f"{qa_id}: audience must be visitor and authenticated_user") + _required_string(record, "title", qa_id) + _required_string(record, "question", qa_id) + _required_strings(record, "paraphrases", qa_id) + _required_string(record, "answer", qa_id) + _required_strings(record, "tags", qa_id) + _required_string(record, "source_type", qa_id) + _required_string(record, "source_file", qa_id) + _required_string(record, "source_version", qa_id) + + +def _public_entry(record: Mapping[str, object]) -> dict[str, object]: + """构造供管理员审核的确定性条目,不生成数据库主键或向量。""" + qa_id = _required_string(record, "qa_id", "") + question = _required_string(record, "question", qa_id) + paraphrases = _required_strings(record, "paraphrases", qa_id) + tags = _required_strings(record, "tags", qa_id) + answer = _required_string(record, "answer", qa_id) + content = { + "qa_id": qa_id, + "question": question, + "paraphrases": paraphrases, + "answer": answer, + "audience": _required_strings(record, "audience", qa_id), + "agent_data_access": "none", + "source_version": _required_string(record, "source_version", qa_id), + } + return { + "qa_id": qa_id, + "knowledge_type": _required_string(record, "intent", qa_id), + "title": _required_string(record, "title", qa_id), + "milvus_collection": _required_string(record, "collection", qa_id), + "version": _required_string(record, "source_version", qa_id), + "source_file": _required_string(record, "source_file", qa_id), + "source_type": _required_string(record, "source_type", qa_id), + "source_url": record.get("source_url"), + "effective_date": record.get("effective_date"), + "expire_date": record.get("expire_date"), + "tags": tags, + "content_text": json.dumps(content, ensure_ascii=False, separators=(",", ":")), + "retrieval_text": ( + f"标准问题:{question}\n" + f"相似问法:{';'.join(paraphrases)}\n" + f"标签:{'、'.join(tags)}" + ), + "snippet": question[:300], + # 管理员填入真实审核人并批准前,预检清单绝不伪装成已发布数据。 + "review_status": "pending_review", + "status": "active", + } + + +def build_import_manifest( + records: Sequence[Mapping[str, object]], *, source_name: str +) -> dict[str, object]: + """构建可复查的导入清单,并拒绝任何不满足公开边界的非控制类记录。""" + entries: list[dict[str, object]] = [] + seen_ids: set[str] = set() + excluded_rule_records = 0 + for record in records: + if _is_rule_only(record): + excluded_rule_records += 1 + continue + _validate_public_record(record) + entry = _public_entry(record) + qa_id = str(entry["qa_id"]) + if qa_id in seen_ids: + raise ValueError(f"duplicate qa_id: {qa_id}") + seen_ids.add(qa_id) + entries.append(entry) + return { + "source_name": source_name, + "summary": { + "total_records": len(records), + "eligible_records": len(entries), + "excluded_rule_records": excluded_rule_records, + "publication_state": "pending_review", + }, + "records": entries, + } + + +def load_jsonl(source: Path) -> list[dict[str, object]]: + """读取 UTF-8 JSONL,并为每个无效 JSON 行返回带行号的明确错误。""" + records: list[dict[str, object]] = [] + for line_number, line in enumerate(source.read_text(encoding="utf-8").splitlines(), start=1): + if not line.strip(): + continue + try: + value: Any = json.loads(line) + except json.JSONDecodeError as exc: + raise ValueError(f"line {line_number}: invalid JSON") from exc + if not isinstance(value, dict): + raise ValueError(f"line {line_number}: record must be an object") + records.append(value) + return records + + +def write_manifest(target: Path, manifest: Mapping[str, object]) -> None: + """仅在调用者显式传入输出路径时,写入本地待审核 JSON 清单。""" + target.parent.mkdir(parents=True, exist_ok=True) + target.write_text( + json.dumps(manifest, ensure_ascii=False, indent=2) + "\n", encoding="utf-8" + ) + + +def main() -> int: + """执行本地预检;该入口不读取配置也不连接任何外部服务。""" + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--input", type=Path, required=True) + parser.add_argument("--output", type=Path) + arguments = parser.parse_args() + manifest = build_import_manifest( + load_jsonl(arguments.input), source_name=arguments.input.name + ) + if arguments.output is None: + print(json.dumps(manifest, ensure_ascii=False, indent=2)) + else: + write_manifest(arguments.output, manifest) + print(f"WROTE: {arguments.output}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main())