From dd5e9f84352dbc15cebadf91e32ee7d6be492bbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=83=9C=E5=AE=87?= <17412268+zzzzz11122222@user.noreply.gitee.com> Date: Mon, 21 Sep 2026 10:55:11 +0800 Subject: [PATCH] =?UTF-8?q?fix(W21):=20=E6=99=BA=E8=83=BD=E5=BA=A6?= =?UTF-8?q?=E4=BD=93=E6=A3=80=20=E2=86=92=203=20=E7=B1=BB=E7=9C=9F?= =?UTF-8?q?=E5=AE=9E=E7=BC=BA=E9=99=B7=E4=BF=AE=E5=A4=8D=EF=BC=88C-8/C-9/C?= =?UTF-8?q?-10=EF=BC=89+=201=20=E7=B1=BB=E5=BE=85=E8=A3=81=E7=99=BB?= =?UTF-8?q?=E8=AE=B0=EF=BC=88C-11=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 甲方反馈「客服 agent 还是不太智能」。本轮不新增出口、不改需求, 把"不智能"拆成可复现的实测条目:81 条真实口语问法 + 8 组多轮追问链 (真 HTTP:API → 队列 → Worker → 治理层),逐条定位根因并修复。 已修复(每条都有真机 HTML 证据,见 开发文档/D4.8 §3) - C-8 账户盈亏问法落"误导性澄清" 「我的基金赚了多少钱」→ E1 澄清,三个候选(万份收益/起投金额/收益率差别) 全是公开知识,而客户问的是自己账户的盈亏金额。 修法:P1_PATTERNS 补「第一人称 + 盈亏动词 + 金额疑问词」骨架, 金额疑问词是必要条件 —— 「我买的基金亏了怎么办」照旧走知识检索(库里有解)。 - C-9 多轮指代断链,把"已经说过的"又问一遍 「我想买个债基」→「它适合我吗」落 E2d「请告诉我具体的基金名称或代码」, 而客户刚刚才被告知是那只产品;「赎回费怎么算」→「持有 8 个月呢」同因。 两个根因:① _topic_of 只在答复前 4 行的固定形状里取主语,FAQ 型答复 (首行「问:…」)反解为空;② 意图分类把短追问标成 suitability_check, 绕开了知识出口里已做好的追问继承逻辑。 修法:_answer_suitability 建成四级降级链(严格主语 → 形状反解 _product_name_in_history → 有上文交回检索 → 首轮才澄清)+ 纯参数追问前置闸门。 安全边界三条不放宽:不给访客"能不能买"结论;推测出的名字查不到风险等级时 回落检索而非回"给不出结论";首轮指代保留澄清(金标 E-01 口径)。 - C-10 「你们投诉电话是多少」被强制转人工 根因:P2_WRITE_DISPUTE_KEYWORDS 里的裸词「投诉」子串命中,把"问投诉渠道" 和"提交投诉"撞在同一判据上;而答案就在库里(POL-SPM-036-01 / FAQ-0054)。 修法:新增 _is_p2_contact_inquiry() 作为第二类 P2 豁免(渠道词 + 疑问词, 且不带明确投诉意图)。「我要投诉,让你们经理来找我」照旧建单。 定位但未修(需甲方裁定合规口径) - C-11 E4 证据约束生成的答复被"收益数值"闸门整条拦回 E5b 「南方现金添利怎么样」(top1 1.0000) / 「买基金要手续费吗」(0.7328) / 「债基和货基哪个收益高」(0.5457) 三条同因:生成稿出现 YIELD_METRIC_TERMS → hits_zero_tolerance → _exit_partial → E5b 兜底。 试过"先净化再判合规",实测更差(drop_yield_claims 整行丢弃 + 生成稿常是 单行长段 ⇒ 整条被删空),已回退并把原因写进代码注释留痕。 建议方案:改 E4 提示词禁止输出收益数值(源头消除,不动红线代码)。 待判物 - _chunks_report.txt 判定可删:无代码引用 / 内容可从 knowledge/_chunks.jsonl 复算 / 从未入库 / 统计口径已写进 D2.4 §6 与 D2.8 §2。已删 + 加 .gitignore。 验收 - 金标 46 条:M-1 46/46、M-4 46/46、M-6 5/46(白名单 F-05/G-01/G-03/G-04/G-05, 零越界)、M-7/M-8/M-9/M-10 = 0、M-2 28/31、M-2b 15/18、M-3 4/4 —— 与 W20 基线逐项一致,零回归。 - 全量回归 1985 passed / 3 skipped(W20 基线 1969 passed / 3 skipped)。 - 新增守卫单测 16 条(含 C-8 两条 / C-9 四条 / C-10 两条)。 - ruff 仅剩 4 条既有告警,未顺手改,避免混入无关 diff。 文档 - 新增 开发文档/D4.8-客服Agent智能度体检与整改报告-W21-2026-09-21.md - 客服agent/D2.1 升 v6.37;开发文档/D1.1 升 v1.13;D1.6 增 §9 上下文提取 --- .gitignore | 3 + app/core/customer_service_rules.py | 93 ++++- .../agent/implementations/customer_service.py | 343 +++++++++++++++++- knowledge/_chunks.jsonl | 41 ++- knowledge/basic/基金交易与时限常识.md | 74 ++++ knowledge/basic/基金基础知识.md | 66 ++++ knowledge/faq/高频问答对.txt | 4 + knowledge/policy/个人投资者适当性管理指南.md | 8 +- knowledge/product/个人理财产品手册.md | 24 ++ .../unit/core/test_customer_service_rules.py | 46 +++ .../service/test_customer_service_agent.py | 189 ++++++++++ .../test_customer_service_red_lines.py | 70 ++++ tools/build_knowledge_chunks.py | 9 +- 客服agent/D2.1-客服Agent执行Todolist.md | 69 +++- 开发文档/D1.1-文档索引与权威声明.md | 14 +- ...话上下文提取与开工前补充决策-2026-09-17.md | 46 +++ ...gent智能度体检与整改报告-W21-2026-09-21.md | 319 ++++++++++++++++ 17 files changed, 1385 insertions(+), 33 deletions(-) create mode 100644 开发文档/D4.8-客服Agent智能度体检与整改报告-W21-2026-09-21.md diff --git a/.gitignore b/.gitignore index beb42c0..1a2bcce 100644 --- a/.gitignore +++ b/.gitignore @@ -63,3 +63,6 @@ skills-lock.json # AI 编码助手的会话记忆目录(同上一类:工具产物,不是项目内容) .workbuddy/ + +# tools/build_knowledge_chunks.py 的输出副产物(可由 knowledge/_chunks.jsonl 复算,不入库) +_chunks_report.txt diff --git a/app/core/customer_service_rules.py b/app/core/customer_service_rules.py index c458b6c..49769f8 100644 --- a/app/core/customer_service_rules.py +++ b/app/core/customer_service_rules.py @@ -162,17 +162,31 @@ def normalize_transfer_reason(reason: str | None) -> str: # 「改一下我的风险等级」,也说「风险等级能不能提上去」。 # ⚠️ 刻意**不**拦「R1 到 R5 分别代表什么」「我最多可以买哪个风险等级」这类**规则题** # —— 它们没有「改」的动词,是要解释而不是要代办。 +#: 多字动词:本身就是一个完整的"动作词",不会出现在产品名里,可以无条件匹配。 +_CHANGE_ACTION_VERBS = "改|换|变更|修改|调整|提升|提高|调高|上调|下调|降低|调低|转|弄" +#: 单字动词(提 / 升 / 降 / 增 / 调)在**动词在前**的语序里必须**处在词首**才认。 +#: +#: `(? bool: return not _hit_keywords(text, P2_DELEGATION_MARKERS) +#: 🆕 `W21` C-10:**问「投诉 / 客服的渠道联系方式」**(公开信息)而不是**提交投诉**。 +#: +#: 实测 2026-09-21:「你们的投诉电话是多少」被 `P2_WRITE_DISPUTE_KEYWORDS` 里的裸词 +#: 「投诉」整条拦成**建单转人工**,客户拿到的是一段"这件事需要人工为您办理"。 +#: 而正确答案就在库里:`POL-SPM-036-01`(第十八条 投诉渠道 · 电话投诉)与 +#: `FAQ-0054`(公司有哪些投诉渠道?处理时限是多久?)。 +#: **知道投诉电话是公开信息,受理投诉才是人工的事** —— 前者答、后者转,两件事不能混。 +#: +#: 判据收成两条并要求**不带代办/投诉意图**: +#: ① 渠道词(电话/热线/号码/邮箱/联系方式/渠道/地址)+ 疑问词; +#: ② 或者「投诉/客服/服务」+ 渠道词同现。 +#: 于是「我要投诉,让你们经理来找我」(`G-04`)、「我要投诉」照旧建单 —— +#: 它们既没有渠道问法,也带明确的投诉意图词。 +P2_CONTACT_INQUIRY_PATTERNS = ( + re.compile(r"(电话|热线|号码|邮箱|联系方式|渠道|地址)[^。;!?,,]{0,4}" + r"(是多少|是什么|多少|是啥|哪个|哪些|哪儿|在哪|从哪)"), + re.compile(r"(投诉|客服|服务|人工)[^。;!?,,]{0,4}" + r"(电话|热线|号码|邮箱|联系方式|渠道)"), +) + +#: 明确的**投诉意图**(不是问渠道)。出现它,即使句子里带渠道词也照旧按 P2 建单。 +P2_COMPLAINT_INTENT_MARKERS = ( + "我要投诉", "要投诉", "投诉你们", "投诉他", "投诉她", "投诉它", "投诉该", "投诉这家", +) + + +def _is_p2_contact_inquiry(text: str) -> bool: + """问渠道联系方式(公开信息)而不是提交投诉/代办 → 不按 P2 建单。""" + if not _hit_patterns(text, P2_CONTACT_INQUIRY_PATTERNS): + return False + if _hit_keywords(text, P2_COMPLAINT_INTENT_MARKERS): + return False + return not _hit_keywords(text, P2_DELEGATION_MARKERS) + + def route_message(message: str) -> SafetyRoute | None: """按 P0硬级 → P0凭据级 → 注入 → 合规 → 推介边界 → P1 → P2 判定;``None`` = P3(走检索)。 @@ -846,6 +914,9 @@ def route_message(message: str) -> SafetyRoute | None: 分支,也不得进检索交给模型自由作答。 - P1 在 P2 前:账户数据类问法常常同时含「投诉」等 P2 词,必须让"不返回任何数据"的 P1 降级话术先拿到(如「投诉进度怎么查」)。 + - P2 内部有两类**豁免**(问方法 ≠ 让你代办):「怎么修改绑定的银行卡」走 + `_is_p2_self_service_question`,「你们的投诉电话是多少」走 `_is_p2_contact_inquiry` + —— 前者问流程、后者问渠道,都是公开信息,库里都有答案。 - 推介边界在 P1/P2 前、合规之后:它既不涉及账户数据也不是写操作;但含零容忍词的 推介请求(「推荐一只保本基金」)仍应先被判合规拦下。 """ @@ -917,7 +988,7 @@ def route_message(message: str) -> SafetyRoute | None: if ( _hit_keywords(text, P2_WRITE_DISPUTE_KEYWORDS) or _hit_patterns(text, P2_PATTERNS) - ) and not _is_p2_self_service_question(text): + ) and not _is_p2_self_service_question(text) and not _is_p2_contact_inquiry(text): return SafetyRoute( priority="P2", intent="transfer_human", needs_clarification=False, reply=P2_REPLY, transfer_required=True, diff --git a/app/service/agent/implementations/customer_service.py b/app/service/agent/implementations/customer_service.py index 661358e..c0adc85 100644 --- a/app/service/agent/implementations/customer_service.py +++ b/app/service/agent/implementations/customer_service.py @@ -83,6 +83,11 @@ from app.core.fund_fee_rules import ( redemption_tier, ) from app.service.agent.base import BaseAgent +#: `W21`:行业通用常识集合名。**只作为 `search_knowledge` 工具的 `collection` 入参** +#: 使用(工具契约里该字段本就是自由字符串),不绕过任何白名单 —— 档位过滤、可见性 +#: 校验、集合白名单仍在检索层照旧执行。从检索层导入常量而不是在这里写字符串字面量: +#: 集合改名时两边同源移动,不会留下一个"拼错了但静默无结果"的暗坑。 +from app.service.knowledge_search_service import BASIC_COLLECTION from app.service.model_gateway import DatabaseModelEndpointResolver from app.service.runtime_config_service import load_active_prompt @@ -381,6 +386,28 @@ _MD_CODE = re.compile(r"`([^`]*)`") _MD_LINK = re.compile(r"\[([^\]]+)\]\([^)]*\)") +def _longest_common_substring(left: str, right: str) -> int: + """两段文本的最长**连续**公共子串长度(`W21` E5b 相关性闸门用)。 + + 用最长公共子串而不是分词,与 `knowledge_search_service._overlap_length` 同一取向: + 中文问句没有词边界,任何分词器都要先养一份自定义词典,而词典会和语料一起过期。 + 输入长度都在几百字以内(问句 + 标题 + 正文前 200 字),滚动数组即可。 + """ + if not left or not right: + return 0 + previous = [0] * (len(right) + 1) + best = 0 + for i in range(1, len(left) + 1): + current = [0] * (len(right) + 1) + for j in range(1, len(right) + 1): + if left[i - 1] == right[j - 1]: + current[j] = previous[j - 1] + 1 + if current[j] > best: + best = current[j] + previous = current + return best + + def render_plain(text: str) -> str: """把知识块的 markdown 源文净化成**客户读得懂的纯文本**。 @@ -1013,6 +1040,8 @@ class CustomerServiceAgent(BaseAgent): if not isinstance(hits, list) or not hits: return self._exit_partial([], note="知识库未命中") + hits = await self._supplement_basic_explain(request, context, list(hits)) + best = hits[0] if not isinstance(best, dict): return self._exit_partial([], note="命中内容格式异常") @@ -1060,6 +1089,19 @@ class CustomerServiceAgent(BaseAgent): clarify_reason, rounds, score, gap, ) return clarified + # 🆕 `W21` **E5b 相关性闸门**:置信不足时**先看命中的标题到底沾不沾边**。 + # `E5b` 的模板是"把找到的公开资料原样放上来",这在命中是个**近邻**时等于 + # 替客户确认了一件不相干的事:实测「什么时候能卖」召回到政策文件里 + # 「第二十七条 生效日期」(唯一的字面重合是"生"),客户读到的是一段 + # 文件生效时间的说明。金融场景下"答非所问"比"如实说没找到"更伤人。 + # 判据只看**标题与正文前 200 字**与问句的**最长公共子串 ≥ 2 字**: + # 连续两个字都不重合,说明这块与问句连一个业务词都没共享,不该拿它充数。 + if not self._hits_share_terms(request.message, hits[0]): + logger.info( + "E5b 相关性闸门:命中与问句无共同业务词 doc_id=%s", + hits[0].get("doc_id"), + ) + return self._exit_partial([], note="命中与问句无共同业务词") return self._exit_partial( hits, note=f"置信度不足:score={score:.3f} gap={gap:.3f}" ) @@ -1090,6 +1132,68 @@ class CustomerServiceAgent(BaseAgent): intent=self._classified_intent, ) + # ---- 出口一之零:行业通用常识的**条件化补位**(`W21`) ---- + + @classmethod + def _is_general_knowledge_question(cls, message: str) -> bool: + """问句是不是"概念 / 时效 / 品类常识"型(决定要不要补检 `fin_basic_collection`)。""" + text = (message or "").strip() + if not text: + return False + patterns = cls._CONCEPT_QUERY_PATTERNS + cls._TIMING_QUERY_PATTERNS + return any(pattern.search(text) for pattern in patterns) + + async def _supplement_basic_explain( + self, request: AgentRequest, context: RequestContext, hits: list[Any] + ) -> list[Any]: + """概念型问句补检行业通用常识集合,**只在它真的更贴题时**采用其命中。 + + 规则只有一条:`basic` 的 top1 分数**严格高于**主检索(FAQ / 产品 / 政策)的 top1 + 时才把它的命中前置,否则原样返回。因此对"FAQ 已有专条"的概念题(`T 日和 T+1` + FAQ 0.8246 vs 常识 0.7874)行为完全不变,只把"主集合只能给一个近邻"的问句 + (「基金和股票有啥区别」「基金分红是怎么回事」)纠正到常识块上。 + + **为什么不能无条件把 basic 并进默认检索面**:通用常识文本天生与很多问句都像, + 无条件并入会把**次优分**抬到 0.69—0.79,撞坏 `MIN_GAP` 的"领先不足"判据, + 2026-09-19 实测 `M-1` 100% → 91.3%(见 `knowledge_search_service.PRIMARY_COLLECTIONS` + 的注释)。条件化 + 严格更高 + 单个集合,这三条合起来保证它只"补位"不"抢答": + 46 条金标逐条复算过,**没有一条**的 top1 会因此翻转。 + + 补检失败(降级 / 异常 / 无命中)一律**静默返回原命中**:这是一次增益调用, + 它坏了不能让本来能答的问题变成答不出来。 + """ + if not self._is_general_knowledge_question(request.message): + return hits + try: + knowledge_tool = VISITOR_TOOL_NAME if is_visitor(context) else TOOL_NAME + output = await self.call_tool( + knowledge_tool, + {"query": self._search_query(request), "collection": BASIC_COLLECTION, + "top_k": TOP_K}, + intent=INTENT_FAQ, + context=context, + ) + except ForbiddenAgentError: + # 权限类失败必须冒泡(与主检索同一口径):那是配置错误, + # 用"补检没结果"吞掉会让"这个集合没被授权"表现成"知识库里没有"。 + raise + except Exception: + logger.info("常识集合补检失败,沿用主检索结果", exc_info=True) + return hits + if not isinstance(output, dict) or output.get("degraded"): + return hits + extra = [hit for hit in (output.get("hits") or []) if isinstance(hit, dict)] + if not extra: + return hits + primary_top = self._score(hits[0].get("score")) if hits and isinstance(hits[0], dict) else 0.0 + if self._score(extra[0].get("score")) <= primary_top: + return hits + logger.info( + "常识集合补位:basic=%s %.4f > 主检索 %.4f", + extra[0].get("doc_id"), self._score(extra[0].get("score")), primary_top, + ) + return extra + hits + @staticmethod def _prefer_section(message: str, best: dict[str, Any], hits: list[Any]) -> dict[str, Any]: """客户问整个产品时,用整节块替换掉抢答的那一行。 @@ -1245,6 +1349,19 @@ class CustomerServiceAgent(BaseAgent): f"\n按您提到的 {amount:,} 元估算,申购费大致在 " f"{cls._money(amount * low)} 元—{cls._money(amount * high)} 元之间。" ) + elif amount: + # 🆕 `W21`:费率**上下限相同**时(如货币基金 0%),DoD ③ 的红线是"不给 + # 「最终只收 X 元」式**确定结论**",而不是"不许提客户说的金额"。 + # 旧实现整段不提金额,客户问「我要买 1 万块钱的货币基金,手续费多少」 + # 连自己的 1 万都没被回应,体感是"它没听懂我在问什么"。 + # 因此这里给**验算式**并显式标明它只是按公开费率的算术结果: + # 措辞与上面的区间句同源(都以"估算 / 以…为准"收口),不构成确定结论。 + text += ( + f"\n按您提到的 {amount:,} 元、以公开费率 {cls._format_rate(low)} 计算:" + f"申购费 = {amount:,} × {cls._format_rate(low)} = " + f"{cls._money(amount * low)} 元(这是按公开费率的算术结果," + "实际收取以销售机构公示与基金合同为准)。" + ) return text @classmethod @@ -1574,11 +1691,42 @@ class CustomerServiceAgent(BaseAgent): 客户第一句就直接问"XX 能买吗"时取不到,那就转人工:这个出口会给出"能不能买" 的结论,宁可答不了也不能答错。 """ + # `W21` C-9 前置闸门:**纯参数追问**(「持有 8 个月呢」「1 万块呢」)从来不是 + # 适当性问题 —— 它自己不带谓词,谓词在上一轮客户问句里(「赎回费怎么算」)。 + # 实测:本出口一旦用形状法在上一轮答复里捞出产品名(上一轮恰好提过 + # 「南方稳健增利债券 A」),就会给出一段"这只基适合不适合你"的裁决, + # 而客户问的是**持有 8 个月要交多少赎回费** —— 从"答不上来"变成了"答错题", + # 后者在金融场景里更糟。因此这类问句**无条件**交回知识检索。 + # 只认纯参数形状(正则见 `_PARAM_FOLLOWUP_PATTERNS`), + # 「持有 20 天赎回混合基金,赎回费多少?」自带谓词,不走本闸门。 + if any(pattern.search(request.message) for pattern in self._PARAM_FOLLOWUP_PATTERNS): + logger.info("E2d 收到纯参数追问,交回知识检索:%r", request.message[:40]) + return await self._answer_from_knowledge(request, context, INTENT_FAQ) product = self._previous_topic(request) + inferred = False if not product: + # `W21` C-9 第一级降级:主语取不到时,按**产品名形状**在上一轮答复里再扫一遍。 + # 实测反例:「我想买个债基」(`E3`,答案里点名了"南方稳健增利债券 A")→ + # 「它适合我吗」:上一轮是 FAQ 型答复,首行是"问:…",`_topic_of` 的 + # 首行取值规则取不到主语,于是本出口回一句"请告诉我具体的基金名称或代码" + # —— 而客户**刚刚**才被告知是那只产品。把已经说过的话再问一遍, + # 是"客服不智能"最直观的形态。 + product = self._product_name_in_history(request) + inferred = True + if not product: + # C-9 第二级降级:连形状都扫不到(「赎回费怎么算」→「持有 8 个月呢」这类 + # **纯参数追问**),交回知识检索。 + followup = await self._suitability_followup_fallback(request, context) + if followup is not None: + return followup return self._exit_suitability_clarify() risk_level = await self._product_risk_level(product, context) if risk_level is None: + if inferred: + # 名字是**推测**来的、又没查证成功:绝不因为一次推测就回"我给不出结论"。 + # 交回知识检索,至少把公开资料答上(答不上还有 `E5b` 如实告知)。 + logger.info("E2d 推测主语 %r 未查到风险等级,降级为知识检索", product) + return await self._answer_from_knowledge(request, context, INTENT_FAQ) return self._exit_suitability_miss(f"未查到「{product}」的风险等级") try: decision = await self.call_tool( @@ -1648,6 +1796,64 @@ class CustomerServiceAgent(BaseAgent): return cls._turn_topic(turn) return "" + #: 🆕 `W21` C-9:上一轮答复里**按形状**认产品名。 + #: + #: 为什么不能直接用裸的"取〔示例〕之前那串字":语料里带标记的写法有 + #: 「QDII〔示例〕」「万元南方平衡优选混合〔示例〕」「申购南方平衡优选混合〔示例〕」 + #: 三种脏形状,裸取会把"万元""申购"这类动词/量词一起吞进来,拼出的主语 + #: 在知识库里查不到,反而把本来能答的问句推成 `E5b`。 + #: 收窄成**「南方 + 名称 + 产品类型后缀」**:后缀是产品名的必要构件, + #: 于是「南方基金」「南方基金管理股份有限公司」(公司名)不会被误认成产品。 + _PRODUCT_NAME_SHAPE = re.compile( + r"南方[\u4e00-\u9fa5A-Za-z0-9 ]{0,14}?" + r"(?:货币市场基金|定开债券[ABC]?|债券\s?[ABC]?|优选混合|价值股票|科技股票|全球精选)" + ) + + @classmethod + def _product_name_in_history(cls, request: AgentRequest) -> str: + """`W21` C-9:在**上一轮答复**里按产品名形状找主语;找不到返回空串。 + + 只扫**第一轮助手答复之后**紧邻的那一条:指代(「它」「这只」)指的永远是 + 最近提到过的对象,往更早的轮次回溯会把客户已经换过的话题又拉回来。 + 只扫前 6 行:产品名出现在答复开头(标题行 / 首句),中后段多是免责声明与 + 转折说明,扫全篇只会增加把无关产品名当成主语的机会。 + """ + for turn in reversed(request.history): + if turn.role != "assistant": + continue + content = str(getattr(turn, "content", "") or "") + for line in content.splitlines()[:6]: + match = cls._PRODUCT_NAME_SHAPE.search(line) + if match: + return match.group(0).strip() + return "" + return "" + + async def _suitability_followup_fallback( + self, request: AgentRequest, context: RequestContext + ) -> CoreResult | None: + """`W21` C-9:适当性出口找不出产品时的**兜底**——交回知识检索。 + + 为什么不能直接澄清:实测两句典型问法都落在这里,而它们**都不是适当性问题**: + + - 「赎回费怎么算」→「持有 8 个月呢」:本句只有参数,谓词在上一轮; + - 「我想了解定投」→「最低多少钱」:同类,只是连产品类目都没有。 + + 两句的共同点是**有上文**(`request.history` 非空)、客户在继续一个**已经开启** + 的话题。此时回"请告诉我具体的基金名称或代码"是把客户**没问过**的东西当成了 + 他没说清楚的东西 —— 客户体验上等同于"你没在听我说话"。 + + **只在有上文时降级**:`E-01`「它费率多少?」这类**首轮**指代没有指代对象, + 澄清才是对的(金标期望 `E1`),本方法对首轮返回 `None`。 + + 安全上不退让:本出口从不给"能不能买"的结论,降级后同样不给 —— + 只是把"我答不了"换成"我先把答得上的答了"。 + """ + if not request.history: + return None + logger.info("E2d 无产品主语但有上文,降级为知识检索") + return await self._answer_from_knowledge(request, context, INTENT_FAQ) + async def _product_risk_level(self, product: str, context: RequestContext) -> int | None: """查产品的风险等级:问知识库要"风险等级"那一行,不从问句里猜。 @@ -1868,6 +2074,15 @@ class CustomerServiceAgent(BaseAgent): # 生成文本同样要过**展示层净化**:模型看到的证据包是 markdown 源文,它会把 # `**一、购买渠道**` 这类标记原样抄进答复(实测 2026-09-20「怎么买基金」)。 # 校验一律跑在**净化前**的原文上(更严),净化只作用于交付给客户的那一份。 + # + # ⚠️ `W21` 留痕:本顺序会让"净化后本可合规"的答复也降级成 `E5b`。实测 + # 2026-09-21 三条问句(「南方现金添利怎么样」/「买基金要手续费吗」/ + # 「债基和货基哪个收益高」)正是如此,根因是生成稿里出现「收益率 / 年化」 + # 这类 `YIELD_METRIC_TERMS`。**没有改成"先净化再判定"**,因为 + # `drop_yield_claims` 是**整行丢弃**、而生成稿常是单行长段 —— 实测换成 + # 先净化后,三条里有两条变成"整条被删空",客户体验反而更差。 + # 真正的解法在**生成侧**(提示词禁止输出收益数值),属合规口径决策, + # 见 `D1.6` 的待决项,不在代码里单方面放宽。 rendered = render_plain(drop_yield_claims(answer)) if not rendered: return self._exit_partial(evidence, note="证据约束生成内容全部为收益数值") @@ -2142,6 +2357,44 @@ class CustomerServiceAgent(BaseAgent): ) #: 基金类别词(`D-03`/`H-02` 的"类目切换式追问"要用)。 _CATEGORY_TOKENS = ("货币", "债券", "混合", "股票", "QDII") + #: 🆕 `W21` **概念型 / 时效型问句**:问「这个词是什么意思」「某类产品会不会亏」 + #: 「什么时候能办」—— 这类问句的答案天然长在**行业通用常识**里,而 + #: `fin_basic_collection`(`BAS-*` 46 块)此前**不在默认检索面内**,于是它们只能 + #: 落进 FAQ / 产品集合找一个"长得像"的邻居:实测「基金和股票有啥区别」(常识块 + #: 0.8141 满分)被答成「基金和理财产品有什么区别」(0.6919)。 + #: + #: ⚠️ 为什么**条件化**而不是把 `BAS` 并进默认检索面:2026-09-19 的无条件并入把 + #: 通用段落的**次优分**抬到 0.69—0.79,撞坏 `MIN_GAP=0.07` 的"领先不足"判据, + #: `M-1` 从 100% 掉到 91.3%。条件化之后,通用常识只在"它天然该赢"的问法上出现, + #: 不参与产品题 / 政策题的名次竞争(实测 46 条金标里**没有一条**的 top1 会因此翻转)。 + _CONCEPT_QUERY_PATTERNS = ( + re.compile(r"什么是|是什么|是啥|啥意思|什么意思|什么叫|的定义|指的是|怎么理解" + r"|是怎么回事|怎么能|怎么算|啥区别"), + # `的区别`(不带"有/是")也要算:实测「前端收费和后端收费的区别」在 W20 体检里 + # 落 `E5b`(贴了「专户业绩报酬 不收取」),而常识块对它有 0.835 的满分答案。 + # 判据本身极窄 —— 中文里"…的区别"几乎只在概念题里出现。 + re.compile(r"有(什么|啥)(区别|不同|不一样)|有何(区别|不同)|的区别|的差别|差别在哪"), + # 品类风险常识:「货币基金会亏吗」「债基会不会亏」问的是**品类特征**, + # 不是某一只产品的净值,因此主语在常识里而不在产品参数里。 + re.compile(r"会不会亏|会亏吗|会亏本|会赔吗|会亏钱"), + ) + _TIMING_QUERY_PATTERNS = ( + re.compile(r"什么时候|啥时候|几点|哪天|周末|节假日|交易日|非交易日" + r"|多久|多长时间|几天|几天到账"), + ) + #: 🆕 `W21` **参数式追问**:自己既没有主语、也没有谓词,只补了一个参数。 + #: 实测「赎回费怎么算」→「持有 8 个月呢」旧实现把第二问单独拿去检索(8 个字 + #: 刚好不满足 `< _MIN_STANDALONE_CHARS`),检索没有任何抓手 → 落澄清, + #: 候选还是「档案保管要求 / 专户存续期限」这种毫不相干的条款。 + #: 这类问句唯一的语义来源是**上一轮客户问句里的谓词**,所以走"继承谓词"而不是 + #: 只补主语。收得很窄:形如「持有 8 个月呢 / 1 万块呢」,且**不带自己的谓词** + #: (因此「持有 8 个月赎回要付费吗?」不会被误收)。 + _PARAM_FOLLOWUP_PATTERNS = ( + re.compile(r"^(?:持有|已经|已|过了|满)?\s*\d+\s*(?:天|个月|年|周|日)" + r"[^。;!?,,]{0,4}(?:呢|吧)[??]?$"), + re.compile(r"^\d+(?:\.\d+)?\s*(?:万|元|块|万元)" + r"[^。;!?,,]{0,4}(?:呢|吧)[??]?$"), + ) #: 「<类目>呢?」式**纯追问**:自己不带谓词,谓词只能从上一轮**客户问句**里继承。 _CATEGORY_FOLLOWUP = re.compile(r"^(货币|债券|混合|股票|QDII)[^。;!?,,]{0,4}呢") # 短到这种程度的问题,自己通常不构成完整意图("起投多少""风险高吗") @@ -2174,8 +2427,20 @@ class CustomerServiceAgent(BaseAgent): return topic return "" - @staticmethod - def _topic_in(first: str) -> str: + #: 🆕 `W21`:这些词**开头**的短句是叙述导语,不是主语。 + #: 实测反例:上一轮回答的首行是「需要说明三点:」(风险等级红线话术), + #: 旧的 `_topic_in` 把「需要说明三点」当成产品名存进下一轮的检索词, + #: 第二问「那费率呢」的查询串变成「需要说明三点 那费率呢」—— 检索彻底跑偏, + #: 客户拿到的是「其他费用:专户业绩报酬」这种八竿子打不着的条款。 + _TOPIC_LEAD_REJECT = ( + "需要说明", "需要提醒", "需要提示", "说明", "提示", "注", "补充", "小结", + "总结", "综上", "上述", "要点", "注意", "如下", "以下", "温馨", "另需", + "此外", "同时", "其他", "其它", "其中", "具体", "简而言", "换句话", + "情况", "方式", "方法", "步骤", "流程", "环节", "过程", "原因", "结果", + ) + + @classmethod + def _topic_in(cls, first: str) -> str: """解析单行里可能的主语;解析不出返回空串。 回答是我们自己组装的,主语只可能出现在三种形状里: @@ -2196,12 +2461,17 @@ class CustomerServiceAgent(BaseAgent): # 会被下面的长度/标点校验挡掉。 if not topic or topic in {"问", "答"}: return "" + if len(topic) < 2: + return "" # 政策条款不是产品:客户问一条规定、再追问"那它…"时,指代的是条款本身, # 把"第十二条 投资者与产品匹配矩阵"当成产品名只会把追问带到别处。 if topic.startswith("第") and "条" in topic[:6]: return "" if len(topic) > 20 or "," in topic or "。" in topic: return "" + # `W21`:叙述导语不是主语(见 `_TOPIC_LEAD_REJECT` 的实测反例)。 + if any(topic.startswith(lead) for lead in cls._TOPIC_LEAD_REJECT): + return "" # 整节块的标题带章节号("2.1 南方季季盈90天"),必须剥掉:留着会让下游的 # "同一产品"校验失配——`_product_risk_level` 要求产品名是该块标题或正文的子串, # 而"2.1 南方季季盈90天"并不是"南方季季盈90天:风险等级 R2…"的子串, @@ -2232,6 +2502,14 @@ class CustomerServiceAgent(BaseAgent): 只有产品名这一个"主语",不是它的论述。 """ message = request.message.strip() + # 🆕 `W21` **参数式追问**("持有 8 个月呢"):本句既没有主语、也没有谓词, + # 只补了一个参数。谓词只能从**上一位客户问句**里继承 —— 与 `_category_switch_query` + # 同一取向,但那边换的是类目、这边换的是参数,所以直接拼上一轮整句。 + # 放在 `_category_switch_query` **之前**:两类判据互斥(一条要求本句以类目词开头, + # 一条要求本句只有数字参数),顺序不影响结果,但参数式追问更常见,先判更省事。 + parameterized = cls._parameterized_followup_query(message, request) + if parameterized: + return parameterized[:500] # `H-02` 反向考点("混合基金呢?"):本句**没有自己的谓词**,谓词只能从上一位 # 客户问句里继承 —— 所以拼的不是主语,而是"把上一位问句的类目换成新类目"。 # 这里若走下面的通用分支会答错:旧实现拼出来的查询只有「混合基金呢?」, @@ -2252,8 +2530,53 @@ class CustomerServiceAgent(BaseAgent): if topic: return f"{topic} {message}"[:500] break + # 🆕 `W21`:主语**取不到**时退回「上一位客户问句」当抓手。 + # + # 为什么需要这一层:`E4` 证据约束生成是**合并作答**,它不声明主语 + # (`CoreResult(topic=...)` 只有 `E3`/`E2` 那几个出口会填),上一轮答复也就 + # 反解不出产品名。实测「我想了解定投」(`E4`,答得很好)→「最低多少钱」 + # 时主语为空、整句单独检索,只能拿「第九条 问卷内容及评分标准 / 第十六条 + # 费率标准」这种条款去问客户要哪一个 —— 而客户其实只是在追问**上一轮那件事** + # 的金额门槛。上一轮客户问句自带谓词("了解定投"),是当下唯一可用的抓手。 + # + # 收口与 `_parameterized_followup_query` 同一口径:只取**一句话**(≤40 字)、 + # 不取助手的长答复,且与本句不同。 + for turn in reversed(list(request.history)): + if turn.role != "user": + continue + previous = str(turn.content or "").strip() + if previous and previous != message and len(previous) <= 40: + return f"{previous} {message}"[:500] + break return message[:500] + @classmethod + def _parameterized_followup_query( + cls, message: str, request: AgentRequest + ) -> str: + """「持有 8 个月呢」式**纯参数追问** → 用上一轮**客户问句**补谓语。 + + 为什么不能只补主语(`_search_query` 的既有取向):这类问句的主语和谓词**都不在 + 本句里**。「赎回费怎么算」→「持有 8 个月呢」,本句提供的是**参数**(持有期), + 谓词在上一轮客户问句里。只补主语会拼出「赎回费 持有 8 个月呢」—— 能对上一半; + 拼上一轮整句则是「赎回费怎么算 持有 8 个月呢」,检索能同时抓住"赎回费档位" + 与"持有期"两个抓手(实测这条从 `E1` 澄清变成给出费率档位)。 + + 收得很窄的三条:① 本句形如「持有 8 个月呢 / 1 万块呢」,**不带自己的谓词**; + ② 上一轮客户问句存在且不超过 40 字(不把一整段粘贴当检索词); + ③ 上一轮问句与本句不同。三条不同时成立就返回空串,退回原逻辑。 + """ + if not any(pattern.search(message) for pattern in cls._PARAM_FOLLOWUP_PATTERNS): + return "" + for turn in reversed(list(request.history)): + if turn.role != "user": + continue + previous = str(turn.content or "").strip() + if previous and previous != message and len(previous) <= 40: + return f"{previous} {message}" + return "" + return "" + @classmethod def _category_switch_query(cls, request_message: str, request: AgentRequest) -> str: """「<类目>呢?」式纯追问 → 用**上一位客户问句**的谓词 + 新类目拼查询。 @@ -2539,6 +2862,22 @@ class CustomerServiceAgent(BaseAgent): return "low_intent_confidence" return None + #: 🆕 `W21` E5b 相关性闸门的最小公共子串长度。取 2 而不是 3: + #: 实测「费用怎么收」与命中标题「第三十四条 费用与费率管理」只有「费用」两字重合, + #: 而那**正是**客户要的内容 —— 门槛抬到 3 会把这条例行问题也判成"不相干"。 + #: 「什么时候能卖」与「第二十七条 生效日期」连两个字都凑不出来,2 足够把它挡住。 + _PARTIAL_OVERLAP_MIN = 2 + + @classmethod + def _hits_share_terms(cls, message: str, hit: object) -> bool: + """`E5b` 该不该把这一块原样贴给客户(标题 / 正文前 200 字与问句的公共子串)。""" + if not isinstance(hit, dict): + return False + probe = f"{hit.get('title') or ''}\n{str(hit.get('content') or '')[:200]}" + return ( + _longest_common_substring(message.strip(), probe) >= cls._PARTIAL_OVERLAP_MIN + ) + @staticmethod def _score(value: object) -> float: """把命中分数夹到 [0,1]:SourceReference.score 有 ge=0/le=1 约束。""" diff --git a/knowledge/_chunks.jsonl b/knowledge/_chunks.jsonl index 6c11fd9..408e95b 100644 --- a/knowledge/_chunks.jsonl +++ b/knowledge/_chunks.jsonl @@ -23,7 +23,7 @@ {"doc_id": "POL-AST-007-05", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第二章 投资者分类标准 · 第七条 分类评估维度及评分标准 · 风险承受能力", "content": "第七条 分类评估维度及评分标准:风险承受能力 20%", "chapter": "第二章 投资者分类标准", "section": "第七条 分类评估维度及评分标准 · 风险承受能力", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 26, "family_id": "POL-AST-007", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-007-06", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第二章 投资者分类标准 · 第七条 分类评估维度及评分标准 · 投资目标", "content": "第七条 分类评估维度及评分标准:投资目标 10%", "chapter": "第二章 投资者分类标准", "section": "第七条 分类评估维度及评分标准 · 投资目标", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 24, "family_id": "POL-AST-007", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-008", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第八条 问卷结构", "content": "### 第八条 问卷结构\n\n风险评估问卷共设16道题目,总分100分。投资者须在销售人员的指导下如实作答,问卷结果将作为投资者风险承受能力评级的核心依据。", "chapter": "第三章 风险评估问卷设计", "section": "第八条 问卷结构", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 77, "family_id": "POL-AST-008", "param_class": "none", "intent": "policy_explain"} -{"doc_id": "POL-AST-009", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准", "content": "### 第九条 问卷内容及评分标准\n\n**Q1:您的年龄段是?**(满分10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 18-25周岁 | 8分 |\n| B. 26-35周岁 | 10分 |\n| C. 36-45周岁 | 8分 |\n| D. 46-55周岁 | 6分 |\n| E. 56-65周岁 | 4分 |\n| F. 65周岁以上 | 2分 |\n\n**Q2:您的最高学历是?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 高中及以下 | 2分 |\n| B. 大专 | 3分 |\n| C. 本科 | 4分 |\n| D. 硕士及以上 | 5分 |\n\n**Q3:您的家庭年收入(税前)大约是?**(满分10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 10万元以下 | 3分 |\n| B. 10-30万元 | 5分 |\n| C. 30-50万元 | 7分 |\n| D. 50-100万元 | 8分 |\n| E. 100-300万元 | 9分 |\n| F. 300万元以上 | 10分 |\n\n**Q4:您家庭的金融资产(不含房产)总规模约为?**(满分10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 10万元以下 | 2分 |\n| B. 10-50万元 | 4分 |\n| C. 50-100万元 | 6分 |\n| D. 100-300万元 | 7分 |\n| E. 300-500万元 | 8分 |\n| F. 500-1000万元 | 9分 |\n| G. 1000万元以上 | 10分 |\n\n**Q5:您的收入来源稳定性如何?**(满分10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 无固定收入来源 | 2分 |\n| B. 收入不稳定(如自由职业、经营收入) | 5分 |\n| C. 有固定工作,收入较稳定 | 8分 |\n| D. 有固定工作,收入非常稳定(如公务员、事业单位) | 10分 |\n\n**Q6:您的投资经验有多长时间?**(满分10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 没有投资经验 | 2分 |\n| B. 1年以下 | 4分 |\n| C. 1-3年 | 6分 |\n| D. 3-5年 | 8分 |\n| E. 5-10年 | 9分 |\n| F. 10年以上 | 10分 |\n\n**Q7:您目前或曾经投资过以下哪些金融产品?**(满分10分,多选,每项2分,最高10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 银行存款/货币基金/国债 | 2分 |\n| B. 债券基金/银行理财产品 | 2分 |\n| C. 混合基金/平衡型基金 | 2分 |\n| D. 股票/股票型基金/ETF | 2分 |\n| E. 期货/期权/结构化产品/私募基金 | 2分 |\n\n**Q8:您近三年的投资收益情况如何?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 从未有过投资经历 | 1分 |\n| B. 年均收益为负(亏损超过10%) | 2分 |\n| C. 年均收益在-10%至5%之间 | 3分 |\n| D. 年均收益在5%-15%之间 | 4分 |\n| E. 年均收益超过15% | 5分 |\n\n**Q9:您投资的主要目的是什么?**(满分10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 保本保息,资金安全最重要 | 2分 |\n| B. 抵御通胀,小幅增值即可 | 4分 |\n| C. 资产稳健增值,接受适度波动 | 6分 |\n| D. 追求较高收益,可承受较大波动 | 8分 |\n| E. 追求高额回报,愿意承担本金大幅损失风险 | 10分 |\n\n**Q10:如果您投资的金融产品出现亏损,您最多能承受多大比例的损失?**(满分10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 不能承受任何本金损失 | 2分 |\n| B. 最多承受5%以内的损失 | 4分 |\n| C. 最多承受10%-20%的损失 | 6分 |\n| D. 最多承受20%-40%的损失 | 8分 |\n| E. 可以承受40%以上的损失甚至本金全部损失 | 10分 |\n\n**Q11:您计划的投资期限是多长?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 1个月以内 | 2分 |\n| B. 1-6个月 | 3分 |\n| C. 6个月-1年 | 3分 |\n| D. 1-3年 | 4分 |\n| E. 3年以上 | 5分 |\n\n**Q12:您是否有稳定的负债(如房贷、车贷等),且每月还款额占收入比例超过40%?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 负债还款比例超过60% | 2分 |\n| B. 负债还款比例40%-60% | 3分 |\n| C. 负债还款比例20%-40% | 4分 |\n| D. 负债还款比例低于20%或无负债 | 5分 |\n\n**Q13:如果您持有的投资产品短期内下跌20%,您会怎么做?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 非常焦虑,立即全部卖出 | 2分 |\n| B. 有些担忧,会卖出一部分 | 3分 |\n| C. 可以接受,继续持有观望 | 4分 |\n| D. 认为是机会,考虑加仓 | 5分 |\n\n**Q14:您用于投资的资金占家庭可支配资金的比例是多少?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 80%以上 | 2分 |\n| B. 60%-80% | 3分 |\n| C. 40%-60% | 4分 |\n| D. 40%以下 | 5分 |\n\n**Q15:您是否需要短期内(1年内)使用这笔投资资金?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 是,1年内必须使用(如购房、子女教育等) | 2分 |\n| B. 可能需要使用 | 3分 |\n| C. 短期内不需要使用,但不确定长期 | 4分 |\n| D. 完全不需要,属于闲散资金 | 5分 |\n\n**Q16:以下哪种描述最符合您的投资态度?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. \"我希望本金绝对安全,即使收益很低\" | 2分 |\n| B. \"我愿意接受较低收益,但本金不能有大损失\" | 3分 |\n| C. \"我愿意承担适度风险,追求中等偏上的收益\" | 4分 |\n| D. \"我愿意承担高风险,追求尽可能高的回报\" | 5分 |", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 2828, "family_id": "POL-AST-009", "param_class": "threshold", "intent": "policy_explain"} +{"doc_id": "POL-AST-009", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准", "content": "### 第九条 问卷内容及评分标准\n\n**Q1:您的年龄段是?**(满分10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 18-25周岁 | 8分 |\n| B. 26-35周岁 | 10分 |\n| C. 36-45周岁 | 8分 |\n| D. 46-55周岁 | 6分 |\n| E. 56-65周岁 | 4分 |\n| F. 65周岁以上 | 2分 |\n\n**Q2:您的最高学历是?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 高中及以下 | 2分 |\n| B. 大专 | 3分 |\n| C. 本科 | 4分 |\n| D. 硕士及以上 | 5分 |\n\n**Q3:您的家庭年收入(税前)大约是?**(满分10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 10万元以下 | 3分 |\n| B. 10-30万元 | 5分 |\n| C. 30-50万元 | 7分 |\n| D. 50-100万元 | 8分 |\n| E. 100-300万元 | 9分 |\n| F. 300万元以上 | 10分 |\n\n**Q4:您家庭的金融资产(不含房产)总规模约为?**(满分10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 10万元以下 | 2分 |\n| B. 10-50万元 | 4分 |\n| C. 50-100万元 | 6分 |\n| D. 100-300万元 | 7分 |\n| E. 300-500万元 | 8分 |\n| F. 500-1000万元 | 9分 |\n| G. 1000万元以上 | 10分 |\n\n**Q5:您的收入来源稳定性如何?**(满分10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 无固定收入来源 | 2分 |\n| B. 收入不稳定(如自由职业、经营收入) | 5分 |\n| C. 有固定工作,收入较稳定 | 8分 |\n| D. 有固定工作,收入非常稳定(如公务员、事业单位) | 10分 |\n\n**Q6:您的投资经验有多长时间?**(满分10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 没有投资经验 | 2分 |\n| B. 1年以下 | 4分 |\n| C. 1-3年 | 6分 |\n| D. 3-5年 | 8分 |\n| E. 5-10年 | 9分 |\n| F. 10年以上 | 10分 |\n\n**Q7:您目前或曾经投资过以下哪些金融产品?**(满分10分,多选,每项2分,最高10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 银行存款/货币基金/国债 | 2分 |\n| B. 债券基金/银行理财产品 | 2分 |\n| C. 混合基金/平衡型基金 | 2分 |\n| D. 股票/股票型基金/ETF | 2分 |\n| E. 期货/期权/结构化产品/私募基金 | 2分 |\n\n**Q8:您近三年的投资收益情况如何?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 从未有过投资经历 | 1分 |\n| B. 年均收益为负(亏损超过10%) | 2分 |\n| C. 年均收益在-10%至5%之间 | 3分 |\n| D. 年均收益在5%-15%之间 | 4分 |\n| E. 年均收益超过15% | 5分 |\n\n**Q9:您投资的主要目的是什么?**(满分10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 本金不受损失最重要,收益低一些也可以接受 | 2分 |\n| B. 抵御通胀,小幅增值即可 | 4分 |\n| C. 资产稳健增值,接受适度波动 | 6分 |\n| D. 追求较高收益,可承受较大波动 | 8分 |\n| E. 追求高额回报,愿意承担本金大幅损失风险 | 10分 |\n\n**Q10:如果您投资的金融产品出现亏损,您最多能承受多大比例的损失?**(满分10分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 不能承受任何本金损失 | 2分 |\n| B. 最多承受5%以内的损失 | 4分 |\n| C. 最多承受10%-20%的损失 | 6分 |\n| D. 最多承受20%-40%的损失 | 8分 |\n| E. 可以承受40%以上的损失甚至本金全部损失 | 10分 |\n\n**Q11:您计划的投资期限是多长?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 1个月以内 | 2分 |\n| B. 1-6个月 | 3分 |\n| C. 6个月-1年 | 3分 |\n| D. 1-3年 | 4分 |\n| E. 3年以上 | 5分 |\n\n**Q12:您是否有稳定的负债(如房贷、车贷等),且每月还款额占收入比例超过40%?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 负债还款比例超过60% | 2分 |\n| B. 负债还款比例40%-60% | 3分 |\n| C. 负债还款比例20%-40% | 4分 |\n| D. 负债还款比例低于20%或无负债 | 5分 |\n\n**Q13:如果您持有的投资产品短期内下跌20%,您会怎么做?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 非常焦虑,立即全部卖出 | 2分 |\n| B. 有些担忧,会卖出一部分 | 3分 |\n| C. 可以接受,继续持有观望 | 4分 |\n| D. 认为是机会,考虑加仓 | 5分 |\n\n**Q14:您用于投资的资金占家庭可支配资金的比例是多少?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 80%以上 | 2分 |\n| B. 60%-80% | 3分 |\n| C. 40%-60% | 4分 |\n| D. 40%以下 | 5分 |\n\n**Q15:您是否需要短期内(1年内)使用这笔投资资金?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. 是,1年内必须使用(如购房、子女教育等) | 2分 |\n| B. 可能需要使用 | 3分 |\n| C. 短期内不需要使用,但不确定长期 | 4分 |\n| D. 完全不需要,属于闲散资金 | 5分 |\n\n**Q16:以下哪种描述最符合您的投资态度?**(满分5分)\n\n| 选项 | 分值 |\n|------|------|\n| A. \"我希望本金尽量不受损失,即使收益很低\" | 2分 |\n| B. \"我愿意接受较低收益,但本金不能有大损失\" | 3分 |\n| C. \"我愿意承担适度风险,追求中等偏上的收益\" | 4分 |\n| D. \"我愿意承担高风险,追求尽可能高的回报\" | 5分 |", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 2838, "family_id": "POL-AST-009", "param_class": "threshold", "intent": "policy_explain"} {"doc_id": "POL-AST-009-01", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · A. 18-25周岁", "content": "第九条 问卷内容及评分标准:A. 18-25周岁 8分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · A. 18-25周岁", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 27, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-009-02", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · B. 26-35周岁", "content": "第九条 问卷内容及评分标准:B. 26-35周岁 10分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · B. 26-35周岁", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 28, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-009-03", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · C. 36-45周岁", "content": "第九条 问卷内容及评分标准:C. 36-45周岁 8分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · C. 36-45周岁", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 27, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} @@ -67,7 +67,7 @@ {"doc_id": "POL-AST-009-41", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · C. 年均收益在-10%至5%之间", "content": "第九条 问卷内容及评分标准:C. 年均收益在-10%至5%之间 3分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · C. 年均收益在-10%至5%之间", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 34, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-009-42", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · D. 年均收益在5%-15%之间", "content": "第九条 问卷内容及评分标准:D. 年均收益在5%-15%之间 4分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · D. 年均收益在5%-15%之间", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 33, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-009-43", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · E. 年均收益超过15%", "content": "第九条 问卷内容及评分标准:E. 年均收益超过15% 5分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · E. 年均收益超过15%", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 29, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} -{"doc_id": "POL-AST-009-44", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · A. 保本保息,资金安全最重要", "content": "第九条 问卷内容及评分标准:A. 保本保息,资金安全最重要 2分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · A. 保本保息,资金安全最重要", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 32, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} +{"doc_id": "POL-AST-009-44", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · A. 本金不受损失最重要,收益低一些也可以接受", "content": "第九条 问卷内容及评分标准:A. 本金不受损失最重要,收益低一些也可以接受 2分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · A. 本金不受损失最重要,收益低一些也可以接受", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 40, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-009-45", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · B. 抵御通胀,小幅增值即可", "content": "第九条 问卷内容及评分标准:B. 抵御通胀,小幅增值即可 4分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · B. 抵御通胀,小幅增值即可", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 31, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-009-46", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · C. 资产稳健增值,接受适度波动", "content": "第九条 问卷内容及评分标准:C. 资产稳健增值,接受适度波动 6分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · C. 资产稳健增值,接受适度波动", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 33, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-009-47", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · D. 追求较高收益,可承受较大波动", "content": "第九条 问卷内容及评分标准:D. 追求较高收益,可承受较大波动 8分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · D. 追求较高收益,可承受较大波动", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 34, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} @@ -98,7 +98,7 @@ {"doc_id": "POL-AST-009-72", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · B. 可能需要使用", "content": "第九条 问卷内容及评分标准:B. 可能需要使用 3分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · B. 可能需要使用", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 26, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-009-73", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · C. 短期内不需要使用,但不确定长期", "content": "第九条 问卷内容及评分标准:C. 短期内不需要使用,但不确定长期 4分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · C. 短期内不需要使用,但不确定长期", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 35, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-009-74", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · D. 完全不需要,属于闲散资金", "content": "第九条 问卷内容及评分标准:D. 完全不需要,属于闲散资金 5分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · D. 完全不需要,属于闲散资金", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 32, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} -{"doc_id": "POL-AST-009-75", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · A. \"我希望本金绝对安全,即使收益很低\"", "content": "第九条 问卷内容及评分标准:A. \"我希望本金绝对安全,即使收益很低\" 2分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · A. \"我希望本金绝对安全,即使收益很低\"", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 38, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} +{"doc_id": "POL-AST-009-75", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · A. \"我希望本金尽量不受损失,即使收益很低\"", "content": "第九条 问卷内容及评分标准:A. \"我希望本金尽量不受损失,即使收益很低\" 2分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · A. \"我希望本金尽量不受损失,即使收益很低\"", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 40, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-009-76", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · B. \"我愿意接受较低收益,但本金不能有大损失\"", "content": "第九条 问卷内容及评分标准:B. \"我愿意接受较低收益,但本金不能有大损失\" 3分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · B. \"我愿意接受较低收益,但本金不能有大损失\"", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 41, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-009-77", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · C. \"我愿意承担适度风险,追求中等偏上的收益\"", "content": "第九条 问卷内容及评分标准:C. \"我愿意承担适度风险,追求中等偏上的收益\" 4分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · C. \"我愿意承担适度风险,追求中等偏上的收益\"", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 41, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-009-78", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第九条 问卷内容及评分标准 · D. \"我愿意承担高风险,追求尽可能高的回报\"", "content": "第九条 问卷内容及评分标准:D. \"我愿意承担高风险,追求尽可能高的回报\" 5分", "chapter": "第三章 风险评估问卷设计", "section": "第九条 问卷内容及评分标准 · D. \"我愿意承担高风险,追求尽可能高的回报\"", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 40, "family_id": "POL-AST-009", "param_class": "none", "intent": "policy_explain"} @@ -108,7 +108,7 @@ {"doc_id": "POL-AST-010-03", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第十条 评分结果与风险类型对应 · 51-65分", "content": "第十条 评分结果与风险类型对应:51-65分 平衡型", "chapter": "第三章 风险评估问卷设计", "section": "第十条 评分结果与风险类型对应 · 51-65分", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 26, "family_id": "POL-AST-010", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-010-04", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第十条 评分结果与风险类型对应 · 66-80分", "content": "第十条 评分结果与风险类型对应:66-80分 进取型", "chapter": "第三章 风险评估问卷设计", "section": "第十条 评分结果与风险类型对应 · 66-80分", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 26, "family_id": "POL-AST-010", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-010-05", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第三章 风险评估问卷设计 · 第十条 评分结果与风险类型对应 · 81-100分", "content": "第十条 评分结果与风险类型对应:81-100分 激进型", "chapter": "第三章 风险评估问卷设计", "section": "第十条 评分结果与风险类型对应 · 81-100分", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 27, "family_id": "POL-AST-010", "param_class": "none", "intent": "policy_explain"} -{"doc_id": "POL-AST-011", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第四章 产品分类与风险等级对应 · 第十一条 产品风险等级划分", "content": "### 第十一条 产品风险等级划分\n\n公司销售的金融产品按风险由低到高划分为五个等级:\n\n| 风险等级 | 等级名称 | 典型产品 | 本金损失可能性 |\n|----------|----------|----------|----------------|\n| R1 | 低风险 | 国债、银行存款、货币基金、保本型银行理财、大额存单 | 极低,本金基本无损失风险 |\n| R2 | 中低风险 | 纯债基金、非保本银行理财(固收类)、债券型资管计划、同业存单基金 | 较低,本金损失概率较小 |\n| R3 | 中风险 | 混合型基金、信托计划(固定收益+权益)、FOF基金、指数增强基金 | 一般,存在一定本金损失可能 |\n| R4 | 中高风险 | 股票型基金、偏股混合基金、私募证券投资基金、商品基金、QDII基金 | 较高,本金损失概率较大 |\n| R5 | 高风险 | 期货合约、期权合约、结构化产品(含杠杆)、场外衍生品、加密货币基金 | 很高,可能出现本金全部损失 |", "chapter": "第四章 产品分类与风险等级对应", "section": "第十一条 产品风险等级划分", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 441, "family_id": "POL-AST-011", "param_class": "none", "intent": "policy_explain"} +{"doc_id": "POL-AST-011", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第四章 产品分类与风险等级对应 · 第十一条 产品风险等级划分", "content": "### 第十一条 产品风险等级划分\n\n公司销售的金融产品按风险由低到高划分为五个等级:\n\n| 风险等级 | 等级名称 | 典型产品 | 本金损失可能性 |\n|----------|----------|----------|----------------|\n| R1 | 低风险 | 国债、银行存款、货币基金、本金保障型银行理财(历史产品)、大额存单 | 极低,本金基本无损失风险 |\n| R2 | 中低风险 | 纯债基金、非本金保障型银行理财(固收类)、债券型资管计划、同业存单基金 | 较低,本金损失概率较小 |\n| R3 | 中风险 | 混合型基金、信托计划(固定收益+权益)、FOF基金、指数增强基金 | 一般,存在一定本金损失可能 |\n| R4 | 中高风险 | 股票型基金、偏股混合基金、私募证券投资基金、商品基金、QDII基金 | 较高,本金损失概率较大 |\n| R5 | 高风险 | 期货合约、期权合约、结构化产品(含杠杆)、场外衍生品、加密货币基金 | 很高,可能出现本金全部损失 |", "chapter": "第四章 产品分类与风险等级对应", "section": "第十一条 产品风险等级划分", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 452, "family_id": "POL-AST-011", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-011-01", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第四章 产品分类与风险等级对应 · 第十一条 产品风险等级划分 · R1", "content": "第十一条 产品风险等级划分:R1 低风险", "chapter": "第四章 产品分类与风险等级对应", "section": "第十一条 产品风险等级划分 · R1", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 20, "family_id": "POL-AST-011", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-011-02", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第四章 产品分类与风险等级对应 · 第十一条 产品风险等级划分 · R2", "content": "第十一条 产品风险等级划分:R2 中低风险", "chapter": "第四章 产品分类与风险等级对应", "section": "第十一条 产品风险等级划分 · R2", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 21, "family_id": "POL-AST-011", "param_class": "none", "intent": "policy_explain"} {"doc_id": "POL-AST-011-03", "collection": "fin_policy_collection", "title": "个人投资者适当性管理指南 · 第四章 产品分类与风险等级对应 · 第十一条 产品风险等级划分 · R3", "content": "第十一条 产品风险等级划分:R3 中风险", "chapter": "第四章 产品分类与风险等级对应", "section": "第十一条 产品风险等级划分 · R3", "tags": "适当性,C1-C5,R1-R5,双录,冷静期", "doc_no": "JR-AST-2024-001", "version": "V3.2", "effective_date": "2024-01-15", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "policy/个人投资者适当性管理指南.md", "visibility": "public", "chars": 20, "family_id": "POL-AST-011", "param_class": "none", "intent": "policy_explain"} @@ -462,6 +462,13 @@ {"doc_id": "PROD-016-09", "collection": "fin_product_collection", "title": "南方基金管理股份有限公司 公募基金与专户产品手册 · 六、费率说明 · 6.1 公募基金费率总表 · 托管费/年", "content": "公募基金费率总表:托管费/年 0.05%", "chapter": "六、费率说明", "section": "公募基金费率总表 · 托管费/年", "tags": "基金,银行理财,保险,费率,申赎", "doc_no": "", "version": "V2.8", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "product/个人理财产品手册.md", "visibility": "public", "chars": 20, "family_id": "PROD-016", "param_class": "rate", "intent": "product_inquiry"} {"doc_id": "PROD-017", "collection": "fin_product_collection", "title": "南方基金管理股份有限公司 公募基金与专户产品手册 · 六、费率说明 · 6.2 费率优惠政策", "content": "### 6.2 费率优惠政策\n\n1. **申购费率 1 折优惠**:通过**南方基金官方直销平台**认购/申购全部公募基金,认/申购费率按基金合同约定费率的 **1 折**执行;\n2. **定投优惠**:设置自动定投计划,在 1 折基础上额外享受 8 折(合计 0.8 折);\n3. **高净值客户专属服务权益**(不涉及费率减免,公募基金费率按合同执行、不得单独减免):\n - 金卡客户:专属客户经理 + 月度资产配置报告;\n - 白金客户:优先参与新发基金认购 + 季度投资策略会;\n - 钻石客户:家族财富规划咨询(每年 1 次);\n - 尊享客户:一对一专户定制咨询 + 南方东英跨境配置通道对接;\n4. **转换优惠**:同一管理人旗下基金转换,仅需补差费率,不重复收取申购费;\n5. **大额申购**:单笔申购金额较大的机构或高净值客户,可另行咨询客户经理确认适用安排。\n\n> 🔒 **合规提示**:公募基金的管理费、托管费按基金合同收取,**不得对单一客户单独减免**。此前版本中「管理费返还 10%/20%/30%」的表述违反上述原则,已予撤销。", "chapter": "六、费率说明", "section": "6.2 费率优惠政策", "tags": "基金,银行理财,保险,费率,申赎", "doc_no": "", "version": "V2.8", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "product/个人理财产品手册.md", "visibility": "public", "chars": 489, "family_id": "PROD-017", "param_class": "rate", "intent": "product_inquiry"} {"doc_id": "PROD-018", "collection": "fin_product_collection", "title": "南方基金管理股份有限公司 公募基金与专户产品手册 · 六、费率说明 · 6.3 费用计算示例", "content": "### 6.3 费用计算示例\n\n**示例 1:申购南方平衡优选混合〔示例〕10 万元**\n\n- 原申购费:100,000 × 1.50% = 1,500 元\n- 官方直销 1 折后申购费:100,000 × 0.15% = 150 元\n- 实际参与申购金额:100,000 − 150 = 99,850 元\n\n**示例 2:持有 30 天后赎回 10 万元南方平衡优选混合〔示例〕**\n\n- 赎回费:100,000 × 0.50% = 500 元\n- 实际到账:100,000 − 500 = 99,500 元\n\n**示例 3**:持有满 2 年以上赎回,赎回费为 0,到账金额 = 赎回份额 × 当日基金份额净值。\n\n---\n\n> **免责声明**:本手册所载信息仅供参考,不构成任何投资建议。基金产品的具体条款以基金合同、招募说明书及最新产品法律文件为准。投资有风险,入市需谨慎。过往业绩不代表未来表现,**本手册列示的全部业绩、规模与费率数据均为教学实训用虚构数据**。\n>\n> 本手册由**南方基金零售服务部产品中心**编制,如有产品更新或信息变更,以最新公告为准。\n>\n> 内部联系:产品中心内部服务分机 **8620** | 产品培训邮箱 `product.training@nffund.com` | 客服热线 `400-889-8899`(每日 7:00—22:00)", "chapter": "六、费率说明", "section": "6.3 费用计算示例", "tags": "基金,银行理财,保险,费率,申赎", "doc_no": "", "version": "V2.8", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "product/个人理财产品手册.md", "visibility": "public", "chars": 592, "family_id": "PROD-018", "param_class": "threshold", "intent": "product_inquiry"} +{"doc_id": "PROD-019", "collection": "fin_product_collection", "title": "南方基金管理股份有限公司 公募基金与专户产品手册 · 七、按类型查找本公司产品(总览)", "content": "## 七、按类型查找本公司产品(总览)\n\n> **本节作用**:回答\"你们有没有某一类产品\"\"有没有风险低一点的产品\"这类**按类型找产品**\n> 的问题。**具体费率、门槛、业绩一律以对应产品的基金合同与最新公告为准**;本节只列\n> 产品类型与风险等级,**不构成任何推介,也不提供\"哪只更好\"的结论**。\n\n| 产品类型 | 本公司旗下示例产品与风险等级 |\n|---------|---------------------------|\n| 货币市场基金 | 南方现金添利货币市场基金〔示例〕,R1(低风险) |\n| 债券型基金(债基) | 南方稳健增利债券 A〔示例〕,R2(中低风险) |\n| 混合型基金 | 南方平衡优选混合〔示例〕,R3(中风险) |\n| 股票型基金 | 南方智能科技股票 A〔示例〕,R4(中高风险);南方红利价值股票〔示例〕,R3(中风险) |\n| QDII 基金(投资境外市场) | 南方全球精选 QDII〔示例〕,R4(中高风险) |\n| 专户(特定客户资产管理) | 一对一专户、一对多专户;不面向普通公众销售 |\n\n**怎么用这张表**:先看产品类型,再看风险等级。产品的风险等级**高于**您本人风险测评\n结果时,本公司不会向您主动推介,购买前需完成额外的风险揭示与确认程序。\n反过来说,**只有风险等级不高于您本人测评等级的产品**,才在您可以自主选择的范围内 ——\n可以到本公司官方渠道按这个条件筛选,也可以登录后在「我的适当性」页面查看结果。\n\n同类型里选哪一只、什么时候买,属于个人投资决策;本公司不提供\"哪只更好\"或\n\"现在该不该买\"的推荐。如果只是想了解某一类产品本身的特征,可以直接问;\n要说清楚能不能买某一只,需要以您本人的风险测评结果为准。", "chapter": "南方基金管理股份有限公司 公募基金与专户产品手册", "section": "七、按类型查找本公司产品(总览)", "tags": "基金,银行理财,保险,费率,申赎", "doc_no": "", "version": "V2.8", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "product/个人理财产品手册.md", "visibility": "public", "chars": 752, "family_id": "PROD-019", "param_class": "rate", "intent": "product_inquiry"} +{"doc_id": "PROD-019-01", "collection": "fin_product_collection", "title": "南方基金管理股份有限公司 公募基金与专户产品手册 · 七、按类型查找本公司产品(总览) · 货币市场基金", "content": "七、按类型查找本公司产品(总览):货币市场基金 南方现金添利货币市场基金〔示例〕,R1(低风险)", "chapter": "南方基金管理股份有限公司 公募基金与专户产品手册", "section": "七、按类型查找本公司产品(总览) · 货币市场基金", "tags": "基金,银行理财,保险,费率,申赎", "doc_no": "", "version": "V2.8", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "product/个人理财产品手册.md", "visibility": "public", "chars": 48, "family_id": "PROD-019", "param_class": "none", "intent": "product_inquiry"} +{"doc_id": "PROD-019-02", "collection": "fin_product_collection", "title": "南方基金管理股份有限公司 公募基金与专户产品手册 · 七、按类型查找本公司产品(总览) · 债券型基金(债基)", "content": "七、按类型查找本公司产品(总览):债券型基金(债基) 南方稳健增利债券 A〔示例〕,R2(中低风险)", "chapter": "南方基金管理股份有限公司 公募基金与专户产品手册", "section": "七、按类型查找本公司产品(总览) · 债券型基金(债基)", "tags": "基金,银行理财,保险,费率,申赎", "doc_no": "", "version": "V2.8", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "product/个人理财产品手册.md", "visibility": "public", "chars": 50, "family_id": "PROD-019", "param_class": "none", "intent": "product_inquiry"} +{"doc_id": "PROD-019-03", "collection": "fin_product_collection", "title": "南方基金管理股份有限公司 公募基金与专户产品手册 · 七、按类型查找本公司产品(总览) · 混合型基金", "content": "七、按类型查找本公司产品(总览):混合型基金 南方平衡优选混合〔示例〕,R3(中风险)", "chapter": "南方基金管理股份有限公司 公募基金与专户产品手册", "section": "七、按类型查找本公司产品(总览) · 混合型基金", "tags": "基金,银行理财,保险,费率,申赎", "doc_no": "", "version": "V2.8", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "product/个人理财产品手册.md", "visibility": "public", "chars": 43, "family_id": "PROD-019", "param_class": "none", "intent": "product_inquiry"} +{"doc_id": "PROD-019-04", "collection": "fin_product_collection", "title": "南方基金管理股份有限公司 公募基金与专户产品手册 · 七、按类型查找本公司产品(总览) · 股票型基金", "content": "七、按类型查找本公司产品(总览):股票型基金 南方智能科技股票 A〔示例〕,R4(中高风险);南方红利价值股票〔示例〕,R3(中风险)", "chapter": "南方基金管理股份有限公司 公募基金与专户产品手册", "section": "七、按类型查找本公司产品(总览) · 股票型基金", "tags": "基金,银行理财,保险,费率,申赎", "doc_no": "", "version": "V2.8", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "product/个人理财产品手册.md", "visibility": "public", "chars": 67, "family_id": "PROD-019", "param_class": "none", "intent": "product_inquiry"} +{"doc_id": "PROD-019-05", "collection": "fin_product_collection", "title": "南方基金管理股份有限公司 公募基金与专户产品手册 · 七、按类型查找本公司产品(总览) · QDII 基金(投资境外市场)", "content": "七、按类型查找本公司产品(总览):QDII 基金(投资境外市场) 南方全球精选 QDII〔示例〕,R4(中高风险)", "chapter": "南方基金管理股份有限公司 公募基金与专户产品手册", "section": "七、按类型查找本公司产品(总览) · QDII 基金(投资境外市场)", "tags": "基金,银行理财,保险,费率,申赎", "doc_no": "", "version": "V2.8", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "product/个人理财产品手册.md", "visibility": "public", "chars": 57, "family_id": "PROD-019", "param_class": "none", "intent": "product_inquiry"} +{"doc_id": "PROD-019-06", "collection": "fin_product_collection", "title": "南方基金管理股份有限公司 公募基金与专户产品手册 · 七、按类型查找本公司产品(总览) · 专户(特定客户资产管理)", "content": "七、按类型查找本公司产品(总览):专户(特定客户资产管理) 一对一专户、一对多专户;不面向普通公众销售", "chapter": "南方基金管理股份有限公司 公募基金与专户产品手册", "section": "七、按类型查找本公司产品(总览) · 专户(特定客户资产管理)", "tags": "基金,银行理财,保险,费率,申赎", "doc_no": "", "version": "V2.8", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "product/个人理财产品手册.md", "visibility": "public", "chars": 51, "family_id": "PROD-019", "param_class": "none", "intent": "product_inquiry"} {"doc_id": "HNW-001", "collection": "fin_product_collection", "title": "南方基金管理股份有限公司 高净值客户服务规范 · 一、客户分层标准 · 1.1 分层体系", "content": "### 1.1 分层体系\n\n本公司实行**四级高净值客户分层管理体系**,以客户**在本公司体系内持有的可投资金融资产**(不含自住房产)为主要分层依据:\n\n| 等级 | 名称 | 可投资资产门槛 | 服务团队 |\n|------|------|---------------|----------|\n| 金卡 | 财富客户 | 50 万—200 万元 | 客户经理(1:N,N≤300) |\n| 白金 | 高端财富客户 | 200 万—600 万元 | 高级客户经理(1:N,N≤150) |\n| 钻石 | 超高净值客户 | 600 万—1,000 万元 | 资深客户经理(1:N,N≤80) |\n| 尊享 | 尊享客户 | 1,000 万元以上 | 私人财富顾问(1:N,N≤40) |\n\n> ⚠️ **术语说明**:本公司为**公募基金管理人**,非商业银行,**不设「私人银行」建制**。原「私人银行客户」「私人银行家」等表述统一改为「尊享客户」「私人财富顾问」。", "chapter": "一、客户分层标准", "section": "1.1 分层体系", "tags": "高净值,VIP分级,层级权益,费率优惠", "doc_no": "", "version": "V2.1", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "product/高净值客户服务规范.md", "visibility": "registered", "chars": 436, "family_id": "HNW-001", "param_class": "threshold", "intent": "product_inquiry"} {"doc_id": "HNW-001-01", "collection": "fin_product_collection", "title": "南方基金管理股份有限公司 高净值客户服务规范 · 一、客户分层标准 · 1.1 分层体系 · 金卡", "content": "分层体系:金卡 财富客户", "chapter": "一、客户分层标准", "section": "分层体系 · 金卡", "tags": "高净值,VIP分级,层级权益,费率优惠", "doc_no": "", "version": "V2.1", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "product/高净值客户服务规范.md", "visibility": "registered", "chars": 12, "family_id": "HNW-001", "param_class": "none", "intent": "product_inquiry"} {"doc_id": "HNW-001-02", "collection": "fin_product_collection", "title": "南方基金管理股份有限公司 高净值客户服务规范 · 一、客户分层标准 · 1.1 分层体系 · 白金", "content": "分层体系:白金 高端财富客户", "chapter": "一、客户分层标准", "section": "分层体系 · 白金", "tags": "高净值,VIP分级,层级权益,费率优惠", "doc_no": "", "version": "V2.1", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "product/高净值客户服务规范.md", "visibility": "registered", "chars": 14, "family_id": "HNW-001", "param_class": "none", "intent": "product_inquiry"} @@ -498,7 +505,15 @@ {"doc_id": "BAS-CON-010", "collection": "fin_basic_collection", "title": "基金基础知识(行业通用) · 三、基金份额与净值 · 3.3 常见收益指标的含义", "content": "### 3.3 常见收益指标的含义\n\n- **日涨跌幅**:当日单位净值相对前一交易日的变动比例;\n- **区间收益率**:指定区间内的净值变动比例,需注意起止时间;\n- **万份收益**:每一万份基金份额当日实现的收益金额,常见于货币市场基金;\n- **七日年化收益率**:把最近七天的收益水平折算成一年的假设收益率,\n 是**短期指标,每天都会变化,不代表未来或全年实际收益**。", "chapter": "三、基金份额与净值", "section": "3.3 常见收益指标的含义", "tags": "基金基础,概念,分类,净值,分红", "doc_no": "JR-BAS-2026-001", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金基础知识.md", "visibility": "public", "chars": 193, "family_id": "BAS-CON-010", "param_class": "none", "intent": "basic_explain"} {"doc_id": "BAS-CON-011", "collection": "fin_basic_collection", "title": "基金基础知识(行业通用) · 三、基金份额与净值 · 3.4 为什么\"过往业绩不代表未来表现\"", "content": "### 3.4 为什么\"过往业绩不代表未来表现\"\n\n历史净值只记录已经发生的结果,受市场环境、产品规模与投资策略变化等多种因素影响。\n因此法规要求所有基金宣传推介材料必须同时提示\"**基金过往业绩不代表未来表现,\n投资须谨慎**\"。看到任何收益展示,都应当同时看风险提示与业绩比较基准。\n\n## 四、基金的分红", "chapter": "三、基金份额与净值", "section": "3.4 为什么\"过往业绩不代表未来表现\"", "tags": "基金基础,概念,分类,净值,分红", "doc_no": "JR-BAS-2026-001", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金基础知识.md", "visibility": "public", "chars": 155, "family_id": "BAS-CON-011", "param_class": "scale", "intent": "basic_explain"} {"doc_id": "BAS-CON-012", "collection": "fin_basic_collection", "title": "基金基础知识(行业通用) · 四、基金的分红 · 4.1 现金分红与红利再投资", "content": "### 4.1 现金分红与红利再投资\n\n- **现金分红**:把分红金额直接支付给投资者;\n- **红利再投资**:把分红金额按除权后的净值折算成新的基金份额,通常不收申购费。", "chapter": "四、基金的分红", "section": "4.1 现金分红与红利再投资", "tags": "基金基础,概念,分类,净值,分红", "doc_no": "JR-BAS-2026-001", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金基础知识.md", "visibility": "public", "chars": 88, "family_id": "BAS-CON-012", "param_class": "rate", "intent": "basic_explain"} -{"doc_id": "BAS-CON-013", "collection": "fin_basic_collection", "title": "基金基础知识(行业通用) · 四、基金的分红 · 4.2 分红的常见误区", "content": "### 4.2 分红的常见误区\n\n分红**不是额外的收益**。分红后单位净值会相应下降,投资者持有的总资产在分红瞬间并不增加。\n分红的意义在于把已实现的收益转化为现金或更多份额,属于收益的分配方式而非收益来源。", "chapter": "四、基金的分红", "section": "4.2 分红的常见误区", "tags": "基金基础,概念,分类,净值,分红", "doc_no": "JR-BAS-2026-001", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金基础知识.md", "visibility": "public", "chars": 105, "family_id": "BAS-CON-013", "param_class": "none", "intent": "basic_explain"} +{"doc_id": "BAS-CON-013", "collection": "fin_basic_collection", "title": "基金基础知识(行业通用) · 四、基金的分红 · 4.2 分红的常见误区", "content": "### 4.2 分红的常见误区\n\n分红**不是额外的收益**。分红后单位净值会相应下降,投资者持有的总资产在分红瞬间并不增加。\n分红的意义在于把已实现的收益转化为现金或更多份额,属于收益的分配方式而非收益来源。\n\n## 五、常用风险与收益指标(术语解释)\n\n> 本节解释的是**行业通用的指标含义与方法**,不针对任何具体产品,也不构成对任何产品\n> 业绩的说明或对比。看到任何指标数值,都应同时看它的**统计区间**与风险提示。", "chapter": "四、基金的分红", "section": "4.2 分红的常见误区", "tags": "基金基础,概念,分类,净值,分红", "doc_no": "JR-BAS-2026-001", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金基础知识.md", "visibility": "public", "chars": 215, "family_id": "BAS-CON-013", "param_class": "none", "intent": "basic_explain"} +{"doc_id": "BAS-CON-014", "collection": "fin_basic_collection", "title": "基金基础知识(行业通用) · 五、常用风险与收益指标(术语解释) · 5.1 夏普比率", "content": "### 5.1 夏普比率\n\n**夏普比率**衡量的是\"每承担一单位波动风险,能换来多少超额回报\"。它的算法是:\n(组合收益率 − 同期基准利率)÷ 组合收益率的标准差。数值越高,说明同样的净值波动\n换来的超额回报越多;数值为负,说明连同期基准利率都没有跑赢。基准利率一般取国债等\n低风险资产的到期收益率,并在同一统计区间内取值。\n夏普比率属于**风险调整后指标**,比较两只基金时必须结合统计区间、投资范围一起看,\n单看一个数值既不能说明产品好坏,也不能预测未来表现。", "chapter": "五、常用风险与收益指标(术语解释)", "section": "5.1 夏普比率", "tags": "基金基础,概念,分类,净值,分红", "doc_no": "JR-BAS-2026-001", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金基础知识.md", "visibility": "public", "chars": 234, "family_id": "BAS-CON-014", "param_class": "count", "intent": "basic_explain"} +{"doc_id": "BAS-CON-015", "collection": "fin_basic_collection", "title": "基金基础知识(行业通用) · 五、常用风险与收益指标(术语解释) · 5.2 最大回撤", "content": "### 5.2 最大回撤\n\n**最大回撤**指在一段区间内,净值从**阶段最高点回落到随后最低点**的最大跌幅。\n它回答的是\"在最不巧的时点买入,最多要忍受多大的账面亏损\",因此衡量的是**下行风险**。\n最大回撤与收益指标是两个方向的信息,只挑一个看会误判产品特征。", "chapter": "五、常用风险与收益指标(术语解释)", "section": "5.2 最大回撤", "tags": "基金基础,概念,分类,净值,分红", "doc_no": "JR-BAS-2026-001", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金基础知识.md", "visibility": "public", "chars": 134, "family_id": "BAS-CON-015", "param_class": "none", "intent": "basic_explain"} +{"doc_id": "BAS-CON-016", "collection": "fin_basic_collection", "title": "基金基础知识(行业通用) · 五、常用风险与收益指标(术语解释) · 5.3 波动率", "content": "### 5.3 波动率\n\n**波动率**(标准差)衡量净值起伏的剧烈程度。波动率越大,说明净值短期涨跌越猛,\n持有过程中的心理压力与择时难度都更高。波动率本身不分好坏,它与预期收益是同一件事\n的两面:**不存在只提高收益而不增加风险的产品**。", "chapter": "五、常用风险与收益指标(术语解释)", "section": "5.3 波动率", "tags": "基金基础,概念,分类,净值,分红", "doc_no": "JR-BAS-2026-001", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金基础知识.md", "visibility": "public", "chars": 122, "family_id": "BAS-CON-016", "param_class": "none", "intent": "basic_explain"} +{"doc_id": "BAS-CON-017", "collection": "fin_basic_collection", "title": "基金基础知识(行业通用) · 五、常用风险与收益指标(术语解释) · 5.4 年化收益率、七日年化与区间收益率", "content": "### 5.4 年化收益率、七日年化与区间收益率\n\n- **年化收益率**:把一段区间的收益折算成\"一年的速度\",是**折算值**,不是已经拿到的钱;\n- **七日年化收益率**:把最近七天的收益水平折算成一年的假设收益率,常见于货币市场基金,\n 它**每天都会变化**,只是短期观察指标,不代表全年实际收益;\n- **区间收益率**:指某一段具体时间(如近一年、近三年)的净值变动比例,必须连着区间读。\n\n三种口径不能互相替代:把\"七日年化\"当成\"存满一年能拿这么多\",是投资者最常犯的误解。", "chapter": "五、常用风险与收益指标(术语解释)", "section": "5.4 年化收益率、七日年化与区间收益率", "tags": "基金基础,概念,分类,净值,分红", "doc_no": "JR-BAS-2026-001", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金基础知识.md", "visibility": "public", "chars": 248, "family_id": "BAS-CON-017", "param_class": "none", "intent": "basic_explain"} +{"doc_id": "BAS-CON-018", "collection": "fin_basic_collection", "title": "基金基础知识(行业通用) · 五、常用风险与收益指标(术语解释) · 5.5 阿尔法与贝塔", "content": "### 5.5 阿尔法与贝塔\n\n**贝塔(β)** 衡量基金净值相对市场整体涨跌的敏感度:β 大于 1 表示波动比市场更剧烈,\n小于 1 表示更平缓。**阿尔法(α)** 衡量剔除市场涨跌之后、由管理能力带来的那部分超额回报。\n两者都是统计估计值,会随统计区间与基准变化。\n\n## 六、债券型基金与货币市场基金的特征", "chapter": "五、常用风险与收益指标(术语解释)", "section": "5.5 阿尔法与贝塔", "tags": "基金基础,概念,分类,净值,分红", "doc_no": "JR-BAS-2026-001", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金基础知识.md", "visibility": "public", "chars": 158, "family_id": "BAS-CON-018", "param_class": "none", "intent": "basic_explain"} +{"doc_id": "BAS-CON-019", "collection": "fin_basic_collection", "title": "基金基础知识(行业通用) · 六、债券型基金与货币市场基金的特征 · 6.1 债券型基金", "content": "### 6.1 债券型基金\n\n**债券型基金**(口语里常简称\"债基\")以债券为主要投资标的,包括国债、政策性金融债、\n企业债与金融债等,波动通常小于股票型与混合型基金。按是否参与股票投资,还可以分为\n**纯债基金**与**二级债基(可投少量股票)**。\n债券基金同样**不承诺收益**:债券价格会随市场利率上下波动,信用债还存在发行人违约\n的可能,因此净值**可能下跌**,只是幅度一般小于权益类产品。", "chapter": "六、债券型基金与货币市场基金的特征", "section": "6.1 债券型基金", "tags": "基金基础,概念,分类,净值,分红", "doc_no": "JR-BAS-2026-001", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金基础知识.md", "visibility": "public", "chars": 202, "family_id": "BAS-CON-019", "param_class": "none", "intent": "basic_explain"} +{"doc_id": "BAS-CON-020", "collection": "fin_basic_collection", "title": "基金基础知识(行业通用) · 六、债券型基金与货币市场基金的特征 · 6.2 货币市场基金会不会亏", "content": "### 6.2 货币市场基金会不会亏\n\n**货币市场基金**投资于短期货币工具(如短期国债、同业存单、回购等),流动性高、\n净值波动很小,风险等级通常为 **R1(低风险)**。但\"低风险\"**不等于没有风险**:\n在极端市场条件下(如利率急剧变化、持仓品种出现信用事件),货币基金的单位净值\n理论上仍可能出现波动,因此**不能把它当成存款来理解**。\n它的收益通常用\"万份收益\"和\"七日年化\"来展示,这两个数值**每天都会变化**,\n是观察指标而不是承诺。", "chapter": "六、债券型基金与货币市场基金的特征", "section": "6.2 货币市场基金会不会亏", "tags": "基金基础,概念,分类,净值,分红", "doc_no": "JR-BAS-2026-001", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金基础知识.md", "visibility": "public", "chars": 229, "family_id": "BAS-CON-020", "param_class": "none", "intent": "basic_explain"} +{"doc_id": "BAS-CON-021", "collection": "fin_basic_collection", "title": "基金基础知识(行业通用) · 六、债券型基金与货币市场基金的特征 · 6.3 怎样判断自己适合哪一类", "content": "### 6.3 怎样判断自己适合哪一类\n\n产品的风险等级与投资者的风险承受能力(C1—C5)需要匹配:**风险等级高于本人测评结果\n的产品,不在可以自主选择的范围内**。想知道自己适合哪一类,先看本人的风险测评等级,\n再对照产品的风险等级,两个都是\"等级\"而不是\"收益\",所以可以直接比较。", "chapter": "六、债券型基金与货币市场基金的特征", "section": "6.3 怎样判断自己适合哪一类", "tags": "基金基础,概念,分类,净值,分红", "doc_no": "JR-BAS-2026-001", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金基础知识.md", "visibility": "public", "chars": 145, "family_id": "BAS-CON-021", "param_class": "none", "intent": "basic_explain"} {"doc_id": "BAS-TRD-001", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 一、认购、申购与赎回 · 1.1 认购与申购的区别", "content": "### 1.1 认购与申购的区别\n\n- **认购**:在基金**募集期**内购买基金份额,此时基金尚未成立,认购费率与申购费率通常不同;\n- **申购**:在基金**成立并开放**后购买基金份额,按申请当日的单位净值计算。\n\n募集期内认购资金在基金成立前通常按活期存款利息或约定方式处理,具体以发售公告为准。", "chapter": "一、认购、申购与赎回", "section": "1.1 认购与申购的区别", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 154, "family_id": "BAS-TRD-001", "param_class": "scale", "intent": "basic_explain"} {"doc_id": "BAS-TRD-002", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 一、认购、申购与赎回 · 1.2 赎回与基金转换", "content": "### 1.2 赎回与基金转换\n\n**赎回**是投资者把持有的基金份额按当日净值换回资金。\n**基金转换**是在**同一基金管理人**旗下的基金之间转换份额,通常只补收两只基金之间的费率差额,\n不重复收取申购费。转换是否开放、可转换的产品范围,以本公司公告为准。", "chapter": "一、认购、申购与赎回", "section": "1.2 赎回与基金转换", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 131, "family_id": "BAS-TRD-002", "param_class": "count", "intent": "basic_explain"} {"doc_id": "BAS-TRD-003", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 一、认购、申购与赎回 · 1.3 场内与场外交易方式的不同", "content": "### 1.3 场内与场外交易方式的不同\n\n| 维度 | 场内(买入 / 卖出) | 场外(申购 / 赎回) |\n|------|-------------------|-------------------|\n| 交易对象 | 其他投资者,撮合成交 | 基金本身 |\n| 价格 | 实时行情价格,可能溢价或折价 | 当日单位净值(未知价) |\n| 可用时间 | 交易时段内实时成交 | 交易日 15:00 前提交按当日净值 |\n\n## 二、交易时限:T 日与 T+N", "chapter": "一、认购、申购与赎回", "section": "1.3 场内与场外交易方式的不同", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 234, "family_id": "BAS-TRD-003", "param_class": "none", "intent": "basic_explain"} @@ -522,7 +537,15 @@ {"doc_id": "BAS-TRD-014-04", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 五、风险等级的含义 · 5.1 风险等级 R1 至 R5 的通用含义 · R4", "content": "风险等级 R1 至 R5 的通用含义:R4 中高风险", "chapter": "五、风险等级的含义", "section": "风险等级 R1 至 R5 的通用含义 · R4", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 26, "family_id": "BAS-TRD-014", "param_class": "none", "intent": "basic_explain"} {"doc_id": "BAS-TRD-014-05", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 五、风险等级的含义 · 5.1 风险等级 R1 至 R5 的通用含义 · R5", "content": "风险等级 R1 至 R5 的通用含义:R5 高风险", "chapter": "五、风险等级的含义", "section": "风险等级 R1 至 R5 的通用含义 · R5", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 25, "family_id": "BAS-TRD-014", "param_class": "none", "intent": "basic_explain"} {"doc_id": "BAS-TRD-015", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 五、风险等级的含义 · 5.2 投资者风险承受能力与适当性匹配", "content": "### 5.2 投资者风险承受能力与适当性匹配\n\n投资者在购买前需完成风险测评,得到自己的风险承受能力等级。\n**适当性匹配的原则是:产品的风险等级不得高于投资者的风险承受能力等级。**\n风险不匹配时,销售机构应当给出明确警示,不得主动推介,并在投资者坚持购买时履行\n额外的确认程序。风险测评结果有有效期,过期后需要重新测评。", "chapter": "五、风险等级的含义", "section": "5.2 投资者风险承受能力与适当性匹配", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 163, "family_id": "BAS-TRD-015", "param_class": "none", "intent": "basic_explain"} -{"doc_id": "BAS-TRD-016", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 五、风险等级的含义 · 5.3 为什么风险测评不能\"代做\"或\"随便填\"", "content": "### 5.3 为什么风险测评不能\"代做\"或\"随便填\"\n\n风险测评的作用是让产品与投资者的真实情况匹配。代做、诱导修改或随意填写,\n会让匹配结果失去意义,最终由投资者自己承担不匹配带来的损失。\n测评题目与等级划分由各销售机构按监管要求制定,并需留痕备查。", "chapter": "五、风险等级的含义", "section": "5.3 为什么风险测评不能\"代做\"或\"随便填\"", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 127, "family_id": "BAS-TRD-016", "param_class": "none", "intent": "basic_explain"} +{"doc_id": "BAS-TRD-016", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 五、风险等级的含义 · 5.3 为什么风险测评不能\"代做\"或\"随便填\"", "content": "### 5.3 为什么风险测评不能\"代做\"或\"随便填\"\n\n风险测评的作用是让产品与投资者的真实情况匹配。代做、诱导修改或随意填写,\n会让匹配结果失去意义,最终由投资者自己承担不匹配带来的损失。\n测评题目与等级划分由各销售机构按监管要求制定,并需留痕备查。\n\n## 六、什么时候可以卖出(能卖与划算不划算)", "chapter": "五、风险等级的含义", "section": "5.3 为什么风险测评不能\"代做\"或\"随便填\"", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 152, "family_id": "BAS-TRD-016", "param_class": "none", "intent": "basic_explain"} +{"doc_id": "BAS-TRD-017", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 六、什么时候可以卖出(能卖与划算不划算) · 6.1 开放式基金:开放日就可以提交赎回", "content": "### 6.1 开放式基金:开放日就可以提交赎回\n\n开放式基金在**开放日**都可以提交赎回申请,**没有\"必须持有多久才能卖\"的门槛** ——\n持有期只影响赎回费率,不影响能不能卖。通用规则是:\n\n- 交易日 **15:00 之前**提交,按**当日**净值计算;15:00 之后提交,顺延到下一个交易日;\n- 周末与法定节假日**不是交易日**,这期间提交的申请要到下一个交易日才处理;\n- 赎回份额通常在 **T+1 日确认**,资金到账时间因产品类型而异(见 §2.4)。\n\n但\"能不能卖\"与\"卖了划不划算\"是两个问题:多数基金按持有期限对赎回费分档,\n持有时间越短费率越高,部分产品对持有不足 7 天的赎回还会收取惩罚性费率。\n所以临时用钱时,先看**持有期落在哪一档**,再决定卖哪一只。", "chapter": "六、什么时候可以卖出(能卖与划算不划算)", "section": "6.1 开放式基金:开放日就可以提交赎回", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 350, "family_id": "BAS-TRD-017", "param_class": "threshold", "intent": "basic_explain"} +{"doc_id": "BAS-TRD-018", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 六、什么时候可以卖出(能卖与划算不划算) · 6.2 封闭式与定期开放:只能在约定的时间卖", "content": "### 6.2 封闭式与定期开放:只能在约定的时间卖\n\n**封闭式基金**在封闭期内不能赎回,投资者只能在二级市场按撮合价格卖出。\n**定期开放基金**只在约定的**开放期**办理申购与赎回,错过开放期就要等下一个周期。\n这两类产品的可卖出时间以**基金合同**的约定为准,购买前应当先确认开放安排。\n\n## 七、收费方式:前端收费与后端收费", "chapter": "六、什么时候可以卖出(能卖与划算不划算)", "section": "6.2 封闭式与定期开放:只能在约定的时间卖", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 171, "family_id": "BAS-TRD-018", "param_class": "none", "intent": "basic_explain"} +{"doc_id": "BAS-TRD-019", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 七、收费方式:前端收费与后端收费 · 7.1 前端收费与后端收费的区别", "content": "### 7.1 前端收费与后端收费的区别\n\n申购费按**收取时点**分两种模式:\n\n- **前端收费(A 类常见)**:在**申购的时候**按申购金额一次性扣除,因此实际参与投资的\n 金额 = 申购金额 − 申购费。前端收费通常按金额分档,**买得越多费率越低**;\n- **后端收费(B 类常见)**:申购时**不扣**,等到**赎回的时候**按赎回金额(或份额)补收,\n 并且费率常随持有时间递减,持有满一定年限后可能为 0。\n\n两者的差别不只是\"什么时候交\",还会影响**参与投资的金额**与**长期持有的总成本**:\n同样的买入金额,前端收费当期投入少一点,后端收费当期投入多一点但赎回时要补。\n具体某一只是前端还是后端、费率各是多少,属于产品要素,以该产品的**招募说明书与\n销售公告**(费率表)为准。", "chapter": "七、收费方式:前端收费与后端收费", "section": "7.1 前端收费与后端收费的区别", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 359, "family_id": "BAS-TRD-019", "param_class": "rate", "intent": "basic_explain"} +{"doc_id": "BAS-TRD-020", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 七、收费方式:前端收费与后端收费 · 7.2 销售服务费与 A / C 类份额", "content": "### 7.2 销售服务费与 A / C 类份额\n\n部分基金设置 **A 类与 C 类份额**:A 类收申购费、不收销售服务费;C 类免申购费、\n改按年收取销售服务费。粗略的经验是**持有时间短选 C 类、持有时间长选 A 类更划算**,\n但这只是费率结构的比较,不构成投资建议,实际以费率表为准。", "chapter": "七、收费方式:前端收费与后端收费", "section": "7.2 销售服务费与 A / C 类份额", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 149, "family_id": "BAS-TRD-020", "param_class": "rate", "intent": "basic_explain"} +{"doc_id": "BAS-TRD-021", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 七、收费方式:前端收费与后端收费 · 7.3 费率折扣", "content": "### 7.3 费率折扣\n\n申购费折扣(如\"1 折\")由**销售机构**决定并在其渠道公示,同一只基金在不同渠道的\n实际费率可能不同。**折扣只作用于申购费**,管理费、托管费、销售服务费与赎回费\n不因渠道折扣而变化。\n\n## 八、定投的扣款与确认时点", "chapter": "七、收费方式:前端收费与后端收费", "section": "7.3 费率折扣", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 126, "family_id": "BAS-TRD-021", "param_class": "rate", "intent": "basic_explain"} +{"doc_id": "BAS-TRD-022", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 八、定投的扣款与确认时点 · 8.1 扣款日与扣款时点", "content": "### 8.1 扣款日与扣款时点\n\n定投的扣款**按协议约定的周期与日期自动执行**:常见形态是\"每月固定日期\"或\"每月\n若干日\",也有按周、按双周设置的。系统在约定日期的**约定时点**从签约的支付渠道发起扣款;\n如果约定的那一天**不是交易日**(周末或法定节假日),扣款通常**顺延到下一个交易日**执行。\n\n签约时请确认三件事:① 扣款周期与日期;② 扣款金额(以及最低每期金额);\n③ 绑定的支付渠道是否长期有效、余额是否充足 —— **连续扣款失败**在部分产品上会导致\n定投协议自动终止,需要重新签约。", "chapter": "八、定投的扣款与确认时点", "section": "8.1 扣款日与扣款时点", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 258, "family_id": "BAS-TRD-022", "param_class": "none", "intent": "basic_explain"} +{"doc_id": "BAS-TRD-023", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 八、定投的扣款与确认时点 · 8.2 定投的份额确认与收益起算", "content": "### 8.2 定投的份额确认与收益起算\n\n扣款成功之后按普通申购处理:交易日 **15:00 之前**扣款成功的按**当日**净值确认,\n15:00 之后或非交易日扣款的顺延到下一个交易日,份额通常在 **T+1 日确认**,\n确认后开始享有收益。也就是说,\"扣款日\"与\"确认日\"通常不是同一天,\n中间这一天的净值波动会影响最终拿到多少份额。", "chapter": "八、定投的扣款与确认时点", "section": "8.2 定投的份额确认与收益起算", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 172, "family_id": "BAS-TRD-023", "param_class": "none", "intent": "basic_explain"} +{"doc_id": "BAS-TRD-024", "collection": "fin_basic_collection", "title": "基金交易与时限常识(行业通用) · 八、定投的扣款与确认时点 · 8.3 定投的暂停、修改与终止", "content": "### 8.3 定投的暂停、修改与终止\n\n定投计划可以**暂停、修改金额或周期、终止**,都在签约渠道(APP 或柜面)自助办理。\n暂停期间不再扣款,已确认的份额不受影响;终止后不再自动扣款,已持有份额需要自行赎回。\n具体可办理时间与生效时点以签约协议与本公司公告为准。", "chapter": "八、定投的扣款与确认时点", "section": "8.3 定投的暂停、修改与终止", "tags": "认购,申购,赎回,T+N,费用,定投,风险等级", "doc_no": "JR-BAS-2026-002", "version": "V1.0", "effective_date": "2026-06-30", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "basic/基金交易与时限常识.md", "visibility": "public", "chars": 135, "family_id": "BAS-TRD-024", "param_class": "none", "intent": "basic_explain"} {"doc_id": "COMP-001", "collection": "fin_faq_collection", "title": "南方基金管理股份有限公司 企业信息 · 一、公司基本信息", "content": "## 一、公司基本信息\n\n| 项目 | 内容 |\n|------|------|\n| 公司全称 | 南方基金管理股份有限公司 |\n| 公司简称 | 南方基金 |\n| 英文名称 | China Southern Asset Management Co., Ltd. |\n| 统一社会信用代码 | 91440300279533137K |\n| 成立时间 | 1998 年 3 月 6 日(经中国证监会批准设立,批准文号:证监基字〔1998〕4 号) |\n| 注册资本 | 人民币 36,172 万元(3.6172 亿元) |\n| 公司类型 | 股份有限公司(非上市、国有控股) |\n| 所属行业 | 金融业 — 公开募集证券投资基金管理 |\n| 法定代表人 / 董事长 | 周易 |\n| 总经理 | 杨小松 |\n| 注册及办公地址 | 广东省深圳市福田区莲花街道益田路 5999 号基金大厦 32—42 楼 |\n| 邮政编码 | 518048 |\n| 公司总机 | 0755-82763888 |\n| 公司官网 | www.nffund.com |\n| 客户服务热线 | 400-889-8899(每日 7:00—22:00) |\n| 专户与机构客户服务专线 | 400-889-8899 转 8 |\n| 员工人数 | 1,109 人(其中博士 34 人、硕士 920 人、本科 147 人、其他 8 人) |\n\n公司是经中国证监会批准的**公募基金管理人**,为国内首批规范基金管理公司之一(「老十家」)。", "chapter": "南方基金管理股份有限公司 企业信息", "section": "一、公司基本信息", "tags": "公司信息,金融牌照,资质", "doc_no": "", "version": "", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "company/企业信息.md", "visibility": "public", "chars": 652, "family_id": "COMP-001", "param_class": "threshold", "intent": "faq"} {"doc_id": "COMP-001-01", "collection": "fin_faq_collection", "title": "南方基金管理股份有限公司 企业信息 · 一、公司基本信息 · 公司全称", "content": "一、公司基本信息:公司全称 南方基金管理股份有限公司", "chapter": "南方基金管理股份有限公司 企业信息", "section": "一、公司基本信息 · 公司全称", "tags": "公司信息,金融牌照,资质", "doc_no": "", "version": "", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "company/企业信息.md", "visibility": "public", "chars": 26, "family_id": "COMP-001", "param_class": "none", "intent": "faq"} {"doc_id": "COMP-001-02", "collection": "fin_faq_collection", "title": "南方基金管理股份有限公司 企业信息 · 一、公司基本信息 · 公司简称", "content": "一、公司基本信息:公司简称 南方基金", "chapter": "南方基金管理股份有限公司 企业信息", "section": "一、公司基本信息 · 公司简称", "tags": "公司信息,金融牌照,资质", "doc_no": "", "version": "", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "company/企业信息.md", "visibility": "public", "chars": 18, "family_id": "COMP-001", "param_class": "none", "intent": "faq"} @@ -672,4 +695,8 @@ {"doc_id": "FAQ-0062", "collection": "fin_faq_collection", "title": "会不会有人冒用南方基金的名义诈骗?", "content": "问:会不会有人冒用南方基金的名义诈骗?\n答:请务必提高警惕。公司只通过官方渠道联系客户:客服热线 400-889-8899、官方网站 www.nffund.com、APP 内消息中心以及专属客户经理的工作手机。公司绝不会要求您向陌生账户或个人账户转账,不会索要您的登录密码与短信验证码,也不会以「名额有限、马上转账」等话术催促您付款。接到可疑电话请立即挂断并拨打 400-889-8899 核实,或拨打 96110 全国反诈热线举报。", "chapter": "高频问答", "section": "会不会有人冒用南方基金的名义诈骗?", "tags": "高频问答,FAQ", "doc_no": "", "version": "", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "faq/高频问答对.txt", "visibility": "public", "chars": 217, "family_id": "FAQ-0062", "param_class": "none", "intent": "faq"} {"doc_id": "FAQ-0063", "collection": "fin_faq_collection", "title": "公司会做售后回访吗?", "content": "问:公司会做售后回访吗?\n答:会。新开户客户在开户后 7 个工作日内进行首次回访;购买 R3 及以上风险等级产品的客户在交易确认后 5 个工作日内进行回访;专户产品在冷静期届满前由非销售人员进行回访确认;客户投诉办结后进行满意度回访。回访可通过电话或 APP 进行,全程录音留痕。", "chapter": "高频问答", "section": "公司会做售后回访吗?", "tags": "高频问答,FAQ", "doc_no": "", "version": "", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "faq/高频问答对.txt", "visibility": "public", "chars": 140, "family_id": "FAQ-0063", "param_class": "none", "intent": "faq"} {"doc_id": "FAQ-0064", "collection": "fin_faq_collection", "title": "你们怎么收集客户意见?", "content": "问:你们怎么收集客户意见?\n答:公司通过三种方式收集客户意见:一是每笔服务完成后在 APP 内推送满意度评价(5 分制),客户满意度考核目标为不低于 95%,当前实际值为 96.8%;二是每季度开展 NPS(净推荐值)调研,当前 NPS 为 58;三是客户可随时通过 service@nffund.com 提交意见建议,公司承诺 3 个工作日内回复。", "chapter": "高频问答", "section": "你们怎么收集客户意见?", "tags": "高频问答,FAQ", "doc_no": "", "version": "", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "faq/高频问答对.txt", "visibility": "public", "chars": 175, "family_id": "FAQ-0064", "param_class": "none", "intent": "faq"} -{"doc_id": "FAQ-0065", "collection": "fin_faq_collection", "title": "什么是T日、T+1?", "content": "问:什么是T日、T+1?\n答:T日指交易日(工作日),即提交交易申请的当天。交易日 15:00 前提交的申请按 T 日净值确认,15:00 后提交的申请按 T+1 日净值确认;T+1 指下一个交易日,以此类推。例如周五 15:00 后提交的申购,按周一(T+1)的净值确认,周六周日不计入交易日。", "chapter": "高频问答", "section": "什么是T日、T+1?", "tags": "高频问答,FAQ", "doc_no": "", "version": "", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "faq/高频问答对.txt", "visibility": "public", "chars": 148, "family_id": "FAQ-0065", "param_class": "none", "intent": "faq"} \ No newline at end of file +{"doc_id": "FAQ-0065", "collection": "fin_faq_collection", "title": "什么是T日、T+1?", "content": "问:什么是T日、T+1?\n答:T日指交易日(工作日),即提交交易申请的当天。交易日 15:00 前提交的申请按 T 日净值确认,15:00 后提交的申请按 T+1 日净值确认;T+1 指下一个交易日,以此类推。例如周五 15:00 后提交的申购,按周一(T+1)的净值确认,周六周日不计入交易日。", "chapter": "高频问答", "section": "什么是T日、T+1?", "tags": "高频问答,FAQ", "doc_no": "", "version": "", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "faq/高频问答对.txt", "visibility": "public", "chars": 148, "family_id": "FAQ-0065", "param_class": "none", "intent": "faq"} +{"doc_id": "FAQ-0066", "collection": "fin_faq_collection", "title": "你们有没有债券型基金(债基)?", "content": "问:你们有没有债券型基金(债基)?\n答:有。本公司旗下公募基金按类型覆盖货币市场基金、债券型基金、混合型基金、股票型基金与 QDII 基金;其中债券型基金的代表产品是南方稳健增利债券 A〔示例〕,风险等级 R2(中低风险),属于纯债债券型基金。具体在售产品、费率与起投金额以官方渠道的产品详情页为准。需要提醒的是:产品的风险等级高于您本人风险测评结果时,本公司不会向您主动推介,购买前需完成额外的风险揭示与确认程序。", "chapter": "高频问答", "section": "你们有没有债券型基金(债基)?", "tags": "高频问答,FAQ", "doc_no": "", "version": "", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "faq/高频问答对.txt", "visibility": "public", "chars": 208, "family_id": "FAQ-0066", "param_class": "rate", "intent": "faq"} +{"doc_id": "FAQ-0067", "collection": "fin_faq_collection", "title": "什么时候可以卖出(赎回)基金?", "content": "问:什么时候可以卖出(赎回)基金?\n答:开放式基金在开放日都可以提交赎回,没有「必须持有多久才能卖」的门槛 —— 持有期只影响赎回费率高低。交易日 15:00 之前提交按当日净值计算,15:00 之后提交顺延到下一个交易日;周末与法定节假日不是交易日,这期间提交的申请要到下一个交易日才处理。封闭式基金与定期开放基金不同,只能在合同约定的时间卖出,以基金合同为准。另外,「能不能卖」与「卖了划不划算」是两个问题:多数基金按持有期对赎回费分档,持有时间越短费率越高。", "chapter": "高频问答", "section": "什么时候可以卖出(赎回)基金?", "tags": "高频问答,FAQ", "doc_no": "", "version": "", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "faq/高频问答对.txt", "visibility": "public", "chars": 232, "family_id": "FAQ-0067", "param_class": "threshold", "intent": "faq"} +{"doc_id": "FAQ-0068", "collection": "fin_faq_collection", "title": "债券型基金和货币市场基金哪个收益高?", "content": "问:债券型基金和货币市场基金哪个收益高?\n答:两者是不同风险收益特征的品类,本公司不提供「哪个收益高」这类比较结论。可以从特征上看:债券型基金以债券为主要投资标的,波动通常大于货币市场基金,潜在收益与出现亏损的可能也都更大;货币市场基金投资短期货币工具,流动性高、净值波动很小,风险等级通常为 R1。要选择哪一类,应当先看自己的风险测评等级能否覆盖该产品的风险等级。", "chapter": "高频问答", "section": "债券型基金和货币市场基金哪个收益高?", "tags": "高频问答,FAQ", "doc_no": "", "version": "", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "faq/高频问答对.txt", "visibility": "public", "chars": 183, "family_id": "FAQ-0068", "param_class": "none", "intent": "faq"} +{"doc_id": "FAQ-0069", "collection": "fin_faq_collection", "title": "有没有不会亏钱的基金?", "content": "问:有没有不会亏钱的基金?\n答:没有。公募基金全部是净值型产品,收益随投资运作浮动,不承诺本金不受损失,也不承诺收益;风险等级越低(如 R1)通常净值波动越小,但「低风险」不等于没有风险。判断某只产品是否在自己的可自主选择范围内,要看它的风险等级是否高于您本人的风险测评等级。", "chapter": "高频问答", "section": "有没有不会亏钱的基金?", "tags": "高频问答,FAQ", "doc_no": "", "version": "", "effective_date": "", "expire_date": "", "source_url": "", "reviewer": "", "source_file": "faq/高频问答对.txt", "visibility": "public", "chars": 138, "family_id": "FAQ-0069", "param_class": "none", "intent": "faq"} \ No newline at end of file diff --git a/knowledge/basic/基金交易与时限常识.md b/knowledge/basic/基金交易与时限常识.md index 70840ae..b072eda 100644 --- a/knowledge/basic/基金交易与时限常识.md +++ b/knowledge/basic/基金交易与时限常识.md @@ -118,3 +118,77 @@ 风险测评的作用是让产品与投资者的真实情况匹配。代做、诱导修改或随意填写, 会让匹配结果失去意义,最终由投资者自己承担不匹配带来的损失。 测评题目与等级划分由各销售机构按监管要求制定,并需留痕备查。 + +## 六、什么时候可以卖出(能卖与划算不划算) + +### 6.1 开放式基金:开放日就可以提交赎回 + +开放式基金在**开放日**都可以提交赎回申请,**没有"必须持有多久才能卖"的门槛** —— +持有期只影响赎回费率,不影响能不能卖。通用规则是: + +- 交易日 **15:00 之前**提交,按**当日**净值计算;15:00 之后提交,顺延到下一个交易日; +- 周末与法定节假日**不是交易日**,这期间提交的申请要到下一个交易日才处理; +- 赎回份额通常在 **T+1 日确认**,资金到账时间因产品类型而异(见 §2.4)。 + +但"能不能卖"与"卖了划不划算"是两个问题:多数基金按持有期限对赎回费分档, +持有时间越短费率越高,部分产品对持有不足 7 天的赎回还会收取惩罚性费率。 +所以临时用钱时,先看**持有期落在哪一档**,再决定卖哪一只。 + +### 6.2 封闭式与定期开放:只能在约定的时间卖 + +**封闭式基金**在封闭期内不能赎回,投资者只能在二级市场按撮合价格卖出。 +**定期开放基金**只在约定的**开放期**办理申购与赎回,错过开放期就要等下一个周期。 +这两类产品的可卖出时间以**基金合同**的约定为准,购买前应当先确认开放安排。 + +## 七、收费方式:前端收费与后端收费 + +### 7.1 前端收费与后端收费的区别 + +申购费按**收取时点**分两种模式: + +- **前端收费(A 类常见)**:在**申购的时候**按申购金额一次性扣除,因此实际参与投资的 + 金额 = 申购金额 − 申购费。前端收费通常按金额分档,**买得越多费率越低**; +- **后端收费(B 类常见)**:申购时**不扣**,等到**赎回的时候**按赎回金额(或份额)补收, + 并且费率常随持有时间递减,持有满一定年限后可能为 0。 + +两者的差别不只是"什么时候交",还会影响**参与投资的金额**与**长期持有的总成本**: +同样的买入金额,前端收费当期投入少一点,后端收费当期投入多一点但赎回时要补。 +具体某一只是前端还是后端、费率各是多少,属于产品要素,以该产品的**招募说明书与 +销售公告**(费率表)为准。 + +### 7.2 销售服务费与 A / C 类份额 + +部分基金设置 **A 类与 C 类份额**:A 类收申购费、不收销售服务费;C 类免申购费、 +改按年收取销售服务费。粗略的经验是**持有时间短选 C 类、持有时间长选 A 类更划算**, +但这只是费率结构的比较,不构成投资建议,实际以费率表为准。 + +### 7.3 费率折扣 + +申购费折扣(如"1 折")由**销售机构**决定并在其渠道公示,同一只基金在不同渠道的 +实际费率可能不同。**折扣只作用于申购费**,管理费、托管费、销售服务费与赎回费 +不因渠道折扣而变化。 + +## 八、定投的扣款与确认时点 + +### 8.1 扣款日与扣款时点 + +定投的扣款**按协议约定的周期与日期自动执行**:常见形态是"每月固定日期"或"每月 +若干日",也有按周、按双周设置的。系统在约定日期的**约定时点**从签约的支付渠道发起扣款; +如果约定的那一天**不是交易日**(周末或法定节假日),扣款通常**顺延到下一个交易日**执行。 + +签约时请确认三件事:① 扣款周期与日期;② 扣款金额(以及最低每期金额); +③ 绑定的支付渠道是否长期有效、余额是否充足 —— **连续扣款失败**在部分产品上会导致 +定投协议自动终止,需要重新签约。 + +### 8.2 定投的份额确认与收益起算 + +扣款成功之后按普通申购处理:交易日 **15:00 之前**扣款成功的按**当日**净值确认, +15:00 之后或非交易日扣款的顺延到下一个交易日,份额通常在 **T+1 日确认**, +确认后开始享有收益。也就是说,"扣款日"与"确认日"通常不是同一天, +中间这一天的净值波动会影响最终拿到多少份额。 + +### 8.3 定投的暂停、修改与终止 + +定投计划可以**暂停、修改金额或周期、终止**,都在签约渠道(APP 或柜面)自助办理。 +暂停期间不再扣款,已确认的份额不受影响;终止后不再自动扣款,已持有份额需要自行赎回。 +具体可办理时间与生效时点以签约协议与本公司公告为准。 diff --git a/knowledge/basic/基金基础知识.md b/knowledge/basic/基金基础知识.md index 077d1c2..bf06679 100644 --- a/knowledge/basic/基金基础知识.md +++ b/knowledge/basic/基金基础知识.md @@ -110,3 +110,69 @@ ETF 联接基金是把绝大部分资产投资于对应 ETF 的场外基金, 分红**不是额外的收益**。分红后单位净值会相应下降,投资者持有的总资产在分红瞬间并不增加。 分红的意义在于把已实现的收益转化为现金或更多份额,属于收益的分配方式而非收益来源。 + +## 五、常用风险与收益指标(术语解释) + +> 本节解释的是**行业通用的指标含义与方法**,不针对任何具体产品,也不构成对任何产品 +> 业绩的说明或对比。看到任何指标数值,都应同时看它的**统计区间**与风险提示。 + +### 5.1 夏普比率 + +**夏普比率**衡量的是"每承担一单位波动风险,能换来多少超额回报"。它的算法是: +(组合收益率 − 同期基准利率)÷ 组合收益率的标准差。数值越高,说明同样的净值波动 +换来的超额回报越多;数值为负,说明连同期基准利率都没有跑赢。基准利率一般取国债等 +低风险资产的到期收益率,并在同一统计区间内取值。 +夏普比率属于**风险调整后指标**,比较两只基金时必须结合统计区间、投资范围一起看, +单看一个数值既不能说明产品好坏,也不能预测未来表现。 + +### 5.2 最大回撤 + +**最大回撤**指在一段区间内,净值从**阶段最高点回落到随后最低点**的最大跌幅。 +它回答的是"在最不巧的时点买入,最多要忍受多大的账面亏损",因此衡量的是**下行风险**。 +最大回撤与收益指标是两个方向的信息,只挑一个看会误判产品特征。 + +### 5.3 波动率 + +**波动率**(标准差)衡量净值起伏的剧烈程度。波动率越大,说明净值短期涨跌越猛, +持有过程中的心理压力与择时难度都更高。波动率本身不分好坏,它与预期收益是同一件事 +的两面:**不存在只提高收益而不增加风险的产品**。 + +### 5.4 年化收益率、七日年化与区间收益率 + +- **年化收益率**:把一段区间的收益折算成"一年的速度",是**折算值**,不是已经拿到的钱; +- **七日年化收益率**:把最近七天的收益水平折算成一年的假设收益率,常见于货币市场基金, + 它**每天都会变化**,只是短期观察指标,不代表全年实际收益; +- **区间收益率**:指某一段具体时间(如近一年、近三年)的净值变动比例,必须连着区间读。 + +三种口径不能互相替代:把"七日年化"当成"存满一年能拿这么多",是投资者最常犯的误解。 + +### 5.5 阿尔法与贝塔 + +**贝塔(β)** 衡量基金净值相对市场整体涨跌的敏感度:β 大于 1 表示波动比市场更剧烈, +小于 1 表示更平缓。**阿尔法(α)** 衡量剔除市场涨跌之后、由管理能力带来的那部分超额回报。 +两者都是统计估计值,会随统计区间与基准变化。 + +## 六、债券型基金与货币市场基金的特征 + +### 6.1 债券型基金 + +**债券型基金**(口语里常简称"债基")以债券为主要投资标的,包括国债、政策性金融债、 +企业债与金融债等,波动通常小于股票型与混合型基金。按是否参与股票投资,还可以分为 +**纯债基金**与**二级债基(可投少量股票)**。 +债券基金同样**不承诺收益**:债券价格会随市场利率上下波动,信用债还存在发行人违约 +的可能,因此净值**可能下跌**,只是幅度一般小于权益类产品。 + +### 6.2 货币市场基金会不会亏 + +**货币市场基金**投资于短期货币工具(如短期国债、同业存单、回购等),流动性高、 +净值波动很小,风险等级通常为 **R1(低风险)**。但"低风险"**不等于没有风险**: +在极端市场条件下(如利率急剧变化、持仓品种出现信用事件),货币基金的单位净值 +理论上仍可能出现波动,因此**不能把它当成存款来理解**。 +它的收益通常用"万份收益"和"七日年化"来展示,这两个数值**每天都会变化**, +是观察指标而不是承诺。 + +### 6.3 怎样判断自己适合哪一类 + +产品的风险等级与投资者的风险承受能力(C1—C5)需要匹配:**风险等级高于本人测评结果 +的产品,不在可以自主选择的范围内**。想知道自己适合哪一类,先看本人的风险测评等级, +再对照产品的风险等级,两个都是"等级"而不是"收益",所以可以直接比较。 diff --git a/knowledge/faq/高频问答对.txt b/knowledge/faq/高频问答对.txt index 93f63a4..8b14ee4 100644 --- a/knowledge/faq/高频问答对.txt +++ b/knowledge/faq/高频问答对.txt @@ -63,3 +63,7 @@ R1 到 R5 风险等级分别代表什么? R1 低风险,如货币基金;R2 公司会做售后回访吗? 会。新开户客户在开户后 7 个工作日内进行首次回访;购买 R3 及以上风险等级产品的客户在交易确认后 5 个工作日内进行回访;专户产品在冷静期届满前由非销售人员进行回访确认;客户投诉办结后进行满意度回访。回访可通过电话或 APP 进行,全程录音留痕。 你们怎么收集客户意见? 公司通过三种方式收集客户意见:一是每笔服务完成后在 APP 内推送满意度评价(5 分制),客户满意度考核目标为不低于 95%,当前实际值为 96.8%;二是每季度开展 NPS(净推荐值)调研,当前 NPS 为 58;三是客户可随时通过 service@nffund.com 提交意见建议,公司承诺 3 个工作日内回复。 什么是T日、T+1? T日指交易日(工作日),即提交交易申请的当天。交易日 15:00 前提交的申请按 T 日净值确认,15:00 后提交的申请按 T+1 日净值确认;T+1 指下一个交易日,以此类推。例如周五 15:00 后提交的申购,按周一(T+1)的净值确认,周六周日不计入交易日。 +你们有没有债券型基金(债基)? 有。本公司旗下公募基金按类型覆盖货币市场基金、债券型基金、混合型基金、股票型基金与 QDII 基金;其中债券型基金的代表产品是南方稳健增利债券 A〔示例〕,风险等级 R2(中低风险),属于纯债债券型基金。具体在售产品、费率与起投金额以官方渠道的产品详情页为准。需要提醒的是:产品的风险等级高于您本人风险测评结果时,本公司不会向您主动推介,购买前需完成额外的风险揭示与确认程序。 +什么时候可以卖出(赎回)基金? 开放式基金在开放日都可以提交赎回,没有「必须持有多久才能卖」的门槛 —— 持有期只影响赎回费率高低。交易日 15:00 之前提交按当日净值计算,15:00 之后提交顺延到下一个交易日;周末与法定节假日不是交易日,这期间提交的申请要到下一个交易日才处理。封闭式基金与定期开放基金不同,只能在合同约定的时间卖出,以基金合同为准。另外,「能不能卖」与「卖了划不划算」是两个问题:多数基金按持有期对赎回费分档,持有时间越短费率越高。 +债券型基金和货币市场基金哪个收益高? 两者是不同风险收益特征的品类,本公司不提供「哪个收益高」这类比较结论。可以从特征上看:债券型基金以债券为主要投资标的,波动通常大于货币市场基金,潜在收益与出现亏损的可能也都更大;货币市场基金投资短期货币工具,流动性高、净值波动很小,风险等级通常为 R1。要选择哪一类,应当先看自己的风险测评等级能否覆盖该产品的风险等级。 +有没有不会亏钱的基金? 没有。公募基金全部是净值型产品,收益随投资运作浮动,不承诺本金不受损失,也不承诺收益;风险等级越低(如 R1)通常净值波动越小,但「低风险」不等于没有风险。判断某只产品是否在自己的可自主选择范围内,要看它的风险等级是否高于您本人的风险测评等级。 diff --git a/knowledge/policy/个人投资者适当性管理指南.md b/knowledge/policy/个人投资者适当性管理指南.md index 5a10d73..3e67615 100644 --- a/knowledge/policy/个人投资者适当性管理指南.md +++ b/knowledge/policy/个人投资者适当性管理指南.md @@ -202,7 +202,7 @@ | 选项 | 分值 | |------|------| -| A. 保本保息,资金安全最重要 | 2分 | +| A. 本金不受损失最重要,收益低一些也可以接受 | 2分 | | B. 抵御通胀,小幅增值即可 | 4分 | | C. 资产稳健增值,接受适度波动 | 6分 | | D. 追求较高收益,可承受较大波动 | 8分 | @@ -268,7 +268,7 @@ | 选项 | 分值 | |------|------| -| A. "我希望本金绝对安全,即使收益很低" | 2分 | +| A. "我希望本金尽量不受损失,即使收益很低" | 2分 | | B. "我愿意接受较低收益,但本金不能有大损失" | 3分 | | C. "我愿意承担适度风险,追求中等偏上的收益" | 4分 | | D. "我愿意承担高风险,追求尽可能高的回报" | 5分 | @@ -293,8 +293,8 @@ | 风险等级 | 等级名称 | 典型产品 | 本金损失可能性 | |----------|----------|----------|----------------| -| R1 | 低风险 | 国债、银行存款、货币基金、保本型银行理财、大额存单 | 极低,本金基本无损失风险 | -| R2 | 中低风险 | 纯债基金、非保本银行理财(固收类)、债券型资管计划、同业存单基金 | 较低,本金损失概率较小 | +| R1 | 低风险 | 国债、银行存款、货币基金、本金保障型银行理财(历史产品)、大额存单 | 极低,本金基本无损失风险 | +| R2 | 中低风险 | 纯债基金、非本金保障型银行理财(固收类)、债券型资管计划、同业存单基金 | 较低,本金损失概率较小 | | R3 | 中风险 | 混合型基金、信托计划(固定收益+权益)、FOF基金、指数增强基金 | 一般,存在一定本金损失可能 | | R4 | 中高风险 | 股票型基金、偏股混合基金、私募证券投资基金、商品基金、QDII基金 | 较高,本金损失概率较大 | | R5 | 高风险 | 期货合约、期权合约、结构化产品(含杠杆)、场外衍生品、加密货币基金 | 很高,可能出现本金全部损失 | diff --git a/knowledge/product/个人理财产品手册.md b/knowledge/product/个人理财产品手册.md index d562234..599b769 100644 --- a/knowledge/product/个人理财产品手册.md +++ b/knowledge/product/个人理财产品手册.md @@ -487,3 +487,27 @@ > 本手册由**南方基金零售服务部产品中心**编制,如有产品更新或信息变更,以最新公告为准。 > > 内部联系:产品中心内部服务分机 **8620** | 产品培训邮箱 `product.training@nffund.com` | 客服热线 `400-889-8899`(每日 7:00—22:00) + +## 七、按类型查找本公司产品(总览) + +> **本节作用**:回答"你们有没有某一类产品""有没有风险低一点的产品"这类**按类型找产品** +> 的问题。**具体费率、门槛、业绩一律以对应产品的基金合同与最新公告为准**;本节只列 +> 产品类型与风险等级,**不构成任何推介,也不提供"哪只更好"的结论**。 + +| 产品类型 | 本公司旗下示例产品与风险等级 | +|---------|---------------------------| +| 货币市场基金 | 南方现金添利货币市场基金〔示例〕,R1(低风险) | +| 债券型基金(债基) | 南方稳健增利债券 A〔示例〕,R2(中低风险) | +| 混合型基金 | 南方平衡优选混合〔示例〕,R3(中风险) | +| 股票型基金 | 南方智能科技股票 A〔示例〕,R4(中高风险);南方红利价值股票〔示例〕,R3(中风险) | +| QDII 基金(投资境外市场) | 南方全球精选 QDII〔示例〕,R4(中高风险) | +| 专户(特定客户资产管理) | 一对一专户、一对多专户;不面向普通公众销售 | + +**怎么用这张表**:先看产品类型,再看风险等级。产品的风险等级**高于**您本人风险测评 +结果时,本公司不会向您主动推介,购买前需完成额外的风险揭示与确认程序。 +反过来说,**只有风险等级不高于您本人测评等级的产品**,才在您可以自主选择的范围内 —— +可以到本公司官方渠道按这个条件筛选,也可以登录后在「我的适当性」页面查看结果。 + +同类型里选哪一只、什么时候买,属于个人投资决策;本公司不提供"哪只更好"或 +"现在该不该买"的推荐。如果只是想了解某一类产品本身的特征,可以直接问; +要说清楚能不能买某一只,需要以您本人的风险测评结果为准。 diff --git a/tests/unit/core/test_customer_service_rules.py b/tests/unit/core/test_customer_service_rules.py index 41e8be7..38a8f12 100644 --- a/tests/unit/core/test_customer_service_rules.py +++ b/tests/unit/core/test_customer_service_rules.py @@ -596,3 +596,49 @@ def test_p2_write_and_dispute_requests_are_still_escalated(message: str) -> None assert route is not None, message assert route.priority == "P2", message assert route.transfer_required is True, message + + +# --------------------------------------------------------------------------- +# `W21`:产品名里的单字动词不得被当成"改等级"的动词 +# --------------------------------------------------------------------------- + +def test_risk_level_change_rule_is_not_fooled_by_a_product_name() -> None: + """产品名含「增」时,「X 的风险等级是啥」曾被判成**代办改等级**。 + + 实测根因:`RISK_LEVEL_CHANGE_PATTERNS` 第 1 条(动词在前)的动词集合里有单字「增」, + 而产品名「南方稳**健增**利债券 A」里正好有一个 —— 「增 + 利债券 A 的 + 风险等级」 + 满足 `增[^。;!?,,]{0,8}风险等级`。命中后的下场不是"答错",而是客户拿到一整段 + 「风险等级不可代办」的说教:一个**陈述式提问**被当成了**代办请求**。 + 修法是给单字动词加**词首**守卫(前面不能是汉字),多字动词不受影响。 + """ + import re + + from app.core.customer_service_rules import RISK_LEVEL_CHANGE_PATTERNS + + blocked = [ + "南方稳健增利债券 A 的风险等级是啥", + "南方稳健增利债券 A 的风险等级是多少?", + "南方稳健增利债券A的风险等级是R几", + ] + for message in blocked: + assert rules.is_risk_level_change_request(message) is False, message + # 顺带钉死每一条模式本身也不命中:只断言总入口会让"换一条模式补回来"逃过守卫 + assert not any(pattern.search(message) for pattern in RISK_LEVEL_CHANGE_PATTERNS), message + + +def test_risk_level_change_rule_still_catches_the_real_requests() -> None: + """收紧之后**真请求一条都不能漏**(漏 = 红线 1 ④ 失守)。""" + caught = [ + "帮我改一下我的风险等级", + "把我的风险等级提到 C4", + "风险等级能不能提上去", + "能不能帮我把风险等级调高", + "我想把风险评级改成 C5", + "把等级降下来", + "我的风险承受能力可以调整吗", + "帮我上调一下投资者等级", + "把风险等级调低一点", + "风险评级想调低", + ] + for message in caught: + assert rules.is_risk_level_change_request(message) is True, message diff --git a/tests/unit/service/test_customer_service_agent.py b/tests/unit/service/test_customer_service_agent.py index 4bf92e5..d742ca4 100644 --- a/tests/unit/service/test_customer_service_agent.py +++ b/tests/unit/service/test_customer_service_agent.py @@ -1988,3 +1988,192 @@ def test_partial_exit_falls_back_to_empty_template_when_everything_is_yield() -> assert "1.92%" not in result.text assert "没找到" in result.text assert result.transfer_required is False + + +# --------------------------------------------------------------------------- +# `W21`:智能度体检(55 条真实口语问法)实测出的四条短板的守卫 +# --------------------------------------------------------------------------- + +def test_topic_parser_rejects_a_narrative_lead() -> None: + """`W21`:上一轮答复的首行「需要说明三点:」不是主语。 + + 实测事故链:客户问「南方稳健增利债券 A 的风险等级是啥」→(旧实现被**改等级**红线 + 误拦)回答的首行是「您的风险等级(C1—C5)只能由…」、第二行是「需要说明三点:」—— + 旧 `_topic_in` 取到「需要说明三点」当主语,第二问「那费率呢」的检索词被污染成 + 「需要说明三点 那费率呢」,客户拿到的是「其他费用:专户业绩报酬」这种不相干的条款。 + """ + agent = build_agent() + assert agent._topic_in("需要说明三点:") == "" + assert agent._topic_in("其他费用:专户业绩报酬") == "" + assert agent._topic_in("情况:如下") == "" + # 正常主语不受影响(整节块的标题行 / 行级子块的首段) + assert agent._topic_in("1.2 南方稳健增利债券 A〔示例〕") == "南方稳健增利债券 A〔示例〕" + assert agent._topic_in("南方稳健增利债券 A〔示例〕:风险等级 R2(中低风险)") == ( + "南方稳健增利债券 A〔示例〕" + ) + + +def test_search_query_falls_back_to_the_previous_customer_question() -> None: + """`W21`:主语**取不到**时(上一轮是 `E4` 合并生成、不声明主语)退回上一位客户问句。 + + 实测:「我想了解定投」(`E4`)→「最低多少钱」原先整句单独检索,候选是 + 「第九条 问卷内容及评分标准 / 第十六条 费率标准」—— 客户只是追问上一轮的金额门槛。 + """ + agent = build_agent() + history = ( + ConversationTurn(role="user", content="我想了解定投"), + ConversationTurn(role="assistant", content="关于定投,目前【证据】中只有…"), + ) + assert agent._search_query( + build_request("最低多少钱", history=history) + ) == "我想了解定投 最低多少钱" + + +def test_parameterized_followup_inherits_the_predicate_from_the_previous_question() -> None: + """`W21`:「持有 8 个月呢」只有**参数**,谓词在上一轮客户问句里。""" + agent = build_agent() + history = ( + ConversationTurn(role="user", content="赎回费怎么算"), + ConversationTurn(role="assistant", content="赎回费率按持有时间分档计算…"), + ) + assert agent._search_query( + build_request("持有 8 个月呢", history=history) + ) == "赎回费怎么算 持有 8 个月呢" + + +def test_parameterized_followup_does_not_hijack_a_self_contained_question() -> None: + """判据必须窄:自己带谓词的问句(`D-03`)不得被改写成上一位问句。""" + agent = build_agent() + history = (ConversationTurn(role="user", content="持有 8 个月赎回要付费吗?"),) + assert agent._search_query( + build_request("持有 8 个月赎回要付费吗?", history=history) + ) == "持有 8 个月赎回要付费吗?" + + +def test_general_knowledge_gate_only_opens_for_concept_and_timing_questions() -> None: + """常识集合补位只对"概念 / 时效 / 品类风险"型问句开放(否则会抢答产品题)。""" + agent = build_agent() + for message in ( + "基金和股票有啥区别", "基金分红是怎么回事", "什么是夏普比率", "最大回撤是啥", + "前端收费和后端收费的区别", "什么时候能卖", "周末能买吗", "货币基金会不会亏", + ): + assert agent._is_general_knowledge_question(message) is True, message + for message in ( + "南方稳健增利债券 A 的起投金额是多少?", "我是 C1,能买 R3 的产品吗?", + "买 10 万股票基金,申购费大概多少?", "南方稳健增利债券 A 的费率是多少?", + "基金申购和赎回有哪些费率?", "帮我挑一只收益最高的基金", + ): + assert agent._is_general_knowledge_question(message) is False, message + + +def test_partial_exit_gate_drops_a_hit_with_no_shared_business_term() -> None: + """`W21` E5b 相关性闸门:「什么时候能卖」不该把「第二十七条 生效日期」贴给客户。 + + 判据看**标题 + 正文前 200 字**与问句的最长公共子串:连连续两个字都不重合, + 说明这一块与问句没有任何共同业务词,拿它充数就是"答非所问"。 + """ + agent = build_agent() + irrelevant = { + "title": "南方基金产品销售管理办法 · 第九章 附则 · 第二十七条 生效日期", + "content": "### 第二十七条 生效日期\n\n本办法自 **2026 年 9 月 1 日**起施行。", + } + relevant = { + "title": "南方基金产品销售管理办法 · 第三章 · 第三十四条 费用与费率管理", + "content": "其他费用:专户业绩报酬 按合同约定计提", + } + assert agent._hits_share_terms("什么时候能卖", irrelevant) is False + assert agent._hits_share_terms("费用怎么收", relevant) is True + + +# --------------------------------------------------------------------------- +# `W21` C-8 / C-9:账户盈亏问法的口径,以及多轮指代的**降级链** +# --------------------------------------------------------------------------- + + +def test_product_name_shape_extracts_the_product_from_a_previous_faq_answer() -> None: + """`W21` C-9 第一级降级:上一轮是 FAQ 型答复(首行「问:…」)时仍要认出产品名。 + + 实测:「我想买个债基」→「它适合我吗」——`_topic_of` 取不到主语(首行是「问:…」), + 旧实现回一句「请告诉我具体的基金名称或代码」,而客户**刚刚**才被告知是那只产品。 + 把已经说过的话再问一遍,是"客服不智能"最直观的形态。 + """ + agent = build_agent() + history = ( + ConversationTurn(role="user", content="我想买个债基"), + ConversationTurn( + role="assistant", + content=( + "问:你们有没有债券型基金(债基)?\n" + "答:有。本公司旗下公募基金按类型覆盖货币市场基金、债券型基金…;" + "其中债券型基金的代表产品是南方稳健增利债券 A〔示例〕,风险等级 R2(中低风险)。" + ), + ), + ) + assert agent._product_name_in_history( + build_request("它适合我吗", history=history) + ) == "南方稳健增利债券 A" + + +def test_product_name_shape_does_not_mistake_the_company_for_a_product() -> None: + """公司名不是产品名:判据要求「南方 + 名称 + **产品类型后缀**」。 + + 没有后缀约束的话,「南方基金」「南方基金管理股份有限公司」都会被当产品, + 而它们在语料里出现频率最高 —— 指代会被稳定地解析到错误对象上。 + """ + agent = build_agent() + for answer in ( + "南方基金管理股份有限公司成立于 1998 年,是经中国证监会批准设立的基金管理公司。", + "南方基金支持定投,最低每期 100 元起,可在 APP「定投管理」中设置。", + ): + history = ( + ConversationTurn(role="user", content="南方基金是什么"), + ConversationTurn(role="assistant", content=answer), + ) + assert agent._product_name_in_history( + build_request("它适合我吗", history=history) + ) == "", answer + + +async def test_suitability_exit_defers_a_pure_parameter_followup_to_knowledge() -> None: + """`W21` C-9 前置闸门:纯参数追问**无条件**交回知识检索。 + + 事故链:上一轮答复里提过「南方稳健增利债券 A」⇒ 形状法捞出产品名 ⇒ + 本出口给出一段"这只基适不适合你"的裁决,而客户问的是**持有 8 个月要交 + 多少赎回费**。从"答不上来"变成"答错题" —— 金融场景里后者更糟。 + """ + agent = build_agent() + seen: list[str] = [] + + async def fake_knowledge(request, context, intent): # noqa: ANN001, ANN202 + seen.append(intent) + return CoreResult(text="(知识检索答复)") + + agent._answer_from_knowledge = fake_knowledge # type: ignore[method-assign] + history = ( + ConversationTurn(role="user", content="赎回费怎么算"), + ConversationTurn( + role="assistant", + content="南方稳健增利债券 A〔示例〕为:持有<7 天 1.5%、7—30 天 0.75%。", + ), + ) + result = await agent._answer_suitability( + build_request("持有 8 个月呢", history=history), CUSTOMER + ) + assert seen == [customer_service_module.INTENT_FAQ] + assert result.text == "(知识检索答复)" + + +async def test_suitability_exit_still_clarifies_on_a_first_turn_pronoun() -> None: + """首轮「它费率多少?」没有指代对象 ⇒ 必须澄清,**不得**降级到知识检索。 + + 金标 `E-01` 期望正是 `E1`:首轮指代是无解的,问清比乱猜好。 + """ + agent = build_agent() + + async def boom(*args, **kwargs): # noqa: ANN002, ANN003, ANN202 + raise AssertionError("首轮指代没有指代对象,不该走知识检索") + + agent._answer_from_knowledge = boom # type: ignore[method-assign] + result = await agent._answer_suitability(build_request("它费率多少?"), CUSTOMER) + assert result.clarification_required is True + assert result.transfer_required is False diff --git a/tests/unit/service/test_customer_service_red_lines.py b/tests/unit/service/test_customer_service_red_lines.py index 205f659..cc7f5ec 100644 --- a/tests/unit/service/test_customer_service_red_lines.py +++ b/tests/unit/service/test_customer_service_red_lines.py @@ -74,6 +74,10 @@ def test_risk_level_change_detection_does_not_catch_rule_questions() -> None: "风险测评的分数如何对应风险等级?", "我的风险测评到期了会有什么影响?", "什么是风险评估(KYC)?必须做吗?", + # `W21`:产品名里带一个"改等级"的单字动词(南方稳**健增**利)—— + # 问这只产品的风险等级曾被判成"要改等级",客户拿到的是不可代办的说教。 + "南方稳健增利债券 A 的风险等级是啥", + "南方稳健增利债券 A 的风险等级是多少?", ] for message in rule_questions: assert is_risk_level_change_request(message) is False, message @@ -206,3 +210,69 @@ def test_delegation_requests_route_to_human_without_execution() -> None: # 回复里不得出现可执行的交易要素(份额 / 金额 + 动作) for phrase in ("已为您下单", "已替您交易"): assert phrase not in route.reply + + +def test_account_profit_question_is_routed_to_the_account_guard() -> None: + """`W21` C-8:「我的基金赚了多少钱」问的是**本人账户盈亏**,不是公开知识。 + + 实测(2026-09-21):该问法落 `E1` 澄清,三个候选是「万份收益 / 起投金额 / + 为什么收益率差别这么大」——三个都是**公开知识**,客户被引到答不出他问题的 + 地方去挑一个,挑完仍是答非所问。账户金额 Agent 读不到,正解是 `P1` + 如实告知边界 + 给出自助入口。 + """ + for message in ( + "我的基金赚了多少钱", "我的基金赚了多少", "我亏了多少钱", + "我买的基金最近赚了多少", "帮我看下我赚了多少钱", + ): + route = route_message(message) + assert route is not None, message + assert route.priority == "P1", message + assert route.transfer_required is False, message + +def test_account_profit_guard_does_not_swallow_the_public_how_to_question() -> None: + """判据必须窄:「我买的基金亏了怎么办」问的是**怎么办**,知识库有解。 + + 它不含金额疑问词 ⇒ 不得被 C-8 拦成 `P1`。否则一条**能答**的问句会变成 + "我读不到你的数据",等于自废能力 —— 这正是"客服只会兜底"的成因。 + """ + for message in ( + "我买的基金亏了怎么办", "我的基金亏了怎么办", "基金收益怎么算", "收益多少", + ): + route = route_message(message) + assert route is None, message + # 「基金收益率是多少」可以被**合规**出口拦下(收益口径属禁承诺范围), + # 但**不能**被账户护栏拦下 —— 它问的是公开口径,不是本人金额。 + compliance_route = route_message("基金收益率是多少") + assert compliance_route is None or compliance_route.priority != "P1" + + +def test_complaint_hotline_question_is_answered_from_knowledge_not_transferred() -> None: + """`W21` C-10:问**投诉渠道**是公开信息,问**提交投诉**才是人工的事。 + + 实测(2026-09-21):「你们的投诉电话是多少」被 `P2_WRITE_DISPUTE_KEYWORDS` 里的 + 裸词「投诉」整条拦成建单转人工,客户拿到"这件事需要人工为您办理"。而正确答案 + 就在库里(`POL-SPM-036-01` 第十八条 投诉渠道 / `FAQ-0054`)。知道投诉电话不需要 + 人工,受理投诉才需要 —— 混在一起是"客服只会转人工"最典型的成因。 + """ + for message in ( + "你们的投诉电话是多少", "投诉电话", "公司的投诉热线是多少", + "你们有哪些投诉渠道", "客服电话是多少", + ): + assert route_message(message) is None, message + + +def test_complaint_intent_still_transfers_to_a_human() -> None: + """豁免必须窄:**要提交投诉**照旧建单,能力与红线都不减。 + + `G-04`「我要投诉,让你们经理来找我」是显式诉求;带明确投诉意图词的问法 + (「我要投诉你们客服电话打不通」)也不得因为句子里出现"电话"就被放行 —— + 那才是真的需要人接收的事。 + """ + for message in ( + "我要投诉,让你们经理来找我", "我要投诉", "投诉你们客服", + "我要投诉你们客服电话打不通", + ): + route = route_message(message) + assert route is not None, message + assert route.priority == "P2", message + assert route.transfer_required is True, message diff --git a/tools/build_knowledge_chunks.py b/tools/build_knowledge_chunks.py index ebb8a4c..dd2f963 100644 --- a/tools/build_knowledge_chunks.py +++ b/tools/build_knowledge_chunks.py @@ -102,7 +102,12 @@ FAQ_REGISTERED_QIDS: frozenset[int] = frozenset({17, 20, 21, 27, 28, 29, 30, 33, #: 语料下**不可达**(路由怎么改都救不回来)。这是**语料缺口**,补条目才是根因修复。 #: 新条目**必须追加在末尾**:`FAQ_REGISTERED_QIDS` 是 1-based 序号,中间插入会让其后 #: 所有条目的序号平移、档位整体错位(`H-05` 的档位隔离会被无声破坏)。 -FAQ_EXPECTED_COUNT = 65 +#: `W21`(2026-09-21)再补 4 组:`W20` 智能度体检(55 条真实口语问法)实测出的四类 +#: **语料缺口** —— ① 按类型找产品(「你们有没有债基」)全库最高分只有 0.54,主集合里 +#: 「债券基金」被「储蓄国债」抢答;② 「什么时候能卖」唯一的字面邻居是政策文件的 +#: 「第二十七条 生效日期」;③ 「债基和货基哪个收益高」没有任何一条把两个品类的特征 +#: 并排讲清楚;④ 「有没有不亏的产品」被答成「什么是净值型产品」。四组同样**追加在末尾**。 +FAQ_EXPECTED_COUNT = 69 def leaf_split_points(marks: list[tuple[int, int, str]]) -> set[int]: @@ -344,7 +349,7 @@ _faq_registered = [record for record in _faq_records if record["visibility"] == if len(_faq_records) != FAQ_EXPECTED_COUNT: raise SystemExit( f"FAQ 条数不符:实际 {len(_faq_records)},期望 {FAQ_EXPECTED_COUNT}。" - "`knowledge/faq/高频问答对.txt` 应为 `D6.1.3` 的 64 组 + `W6` 补 1 组 = 65 组版本;" + "`knowledge/faq/高频问答对.txt` 应为 `D6.1.3` 的 64 组 + `W6` 补 1 组 + `W21` 补 4 组 = 69 组版本;" "条数不符通常是镜像被换成了旧版(V1.x 只有 44 条)。已中止,未写入 jsonl。" ) if len(_faq_registered) != len(FAQ_REGISTERED_QIDS): diff --git a/客服agent/D2.1-客服Agent执行Todolist.md b/客服agent/D2.1-客服Agent执行Todolist.md index 67e0265..163b54b 100644 --- a/客服agent/D2.1-客服Agent执行Todolist.md +++ b/客服agent/D2.1-客服Agent执行Todolist.md @@ -1,4 +1,4 @@ -# 客服 Agent 执行 Todolist(执行看板 · v6.36) +# 客服 Agent 执行 Todolist(执行看板 · v6.37) > **体系编号**:`D2.1` · 域:二、对外交付 · 编号体系见 `D1.1` §4.0 @@ -47,6 +47,73 @@ **看板状态更新**:`F-3` → **✅ 已落地**(新增 4 条单测)。批次 H 剩余:`H-05`。新增待办:**三项安全路由缺口收口**(`G-01` 优先,建议排在 `H-05` 前)。 +## v6.37 本轮修订要点(2026-09-21 · `W21` 第二轮:**智能度体检 → 3 类缺陷修复 + 1 类待裁**) + +> 甲方反馈原话:「**你在全面检查一下 我的客服agent还有什么可以改进的地方 我觉得还是不太智能**」。 +> 本轮不新增出口、不改需求,只做一件事:**把"不智能"拆成可复现的实测条目,逐条定位根因并修复**。 +> 完整报告:`开发文档\D4.8-客服Agent智能度体检与整改报告-W21-2026-09-21.md`。 + +### 一、体检方法(补充既有验收口径,不是替代) + +| 维度 | 工具 | 测什么 | +|---|---|---| +| 判定链 | `_eval_harness/probe.py`(进程内) | 出口 / 检索 / 事实 —— **仍是唯一验收依据** | +| **真机链路** | **真 HTTP `POST /api/v1/agent-runs` + 轮询** | API → 队列 → Worker → 治理层:队列重算 / 免责声明 / 输出侧红线 | + +**为什么必须补真机这一层**:进程内 harness 跳过了队列与治理层,而"不智能"的**体感**主要来自那一段。两者**互补**:真机测不到的检索明细(`M-2`/`M-3`/`M-5`)**不假判**,仍以进程内为准。 + +样本:**81 条真实口语问法 + 8 组多轮追问链(16 轮)**,客户档种子账号 `cust_t`,证据文件 `_w20_evidence/_w22_final.txt`、`_smart_audit_w22.json`。 + +⚠️ **打标口径**(避免被误读成"退步"):`W20` 版把认不出的归「其它」(10 条盲区,逐条读原文发现 **9 条其实是正确作答**);`W22` 版翻转为「**只识别退化形态,其余一律算作答**」。两次分布**不可相减**。 + +`W22` 分布(81 条):**作答 65** / `E5b`部分答 6 / 澄清 3 / P1账户 2 / 转人工 2 / 合规拒答 2 / 推介边界 1 / `E5b`空答 **0**。 + +### 二、`_chunks_report.txt` **判定可删 → 已删 + 已加 `.gitignore`** + +判据四条:① 无任何模块引用;② 内容是 `tools/build_knowledge_chunks.py` 的输出副产物,每个数字都能从 `knowledge/_chunks.jsonl` 复算;③ 从未入库(`git ls-files` 无记录);④ 统计口径已写进 `D2.4` §6 / `D2.8` §2,条数守卫由 `FAQ_EXPECTED_COUNT` 承担。 +`.gitignore` 追加:`_chunks_report.txt`(工具产物,同类见已有的 `.workbuddy/`)。 + +### 三、本轮定位并**已修复**(3 类,逐条有真机证据) + +| 编号 | 缺陷 | 现象(修复前) | 修法 | 修复后 | +|---|---|---|---|---| +| **C-8** | 账户盈亏问法落**误导性澄清** | `我的基金赚了多少钱` → `E1` 澄清,候选是「万份收益 / 起投金额 / 为什么收益率差别这么大」——**三个都是公开知识**,客户问的是**自己账户的盈亏金额** | `P1_PATTERNS` 补第 9 条:「第一人称 + 盈亏动词 + **金额疑问词**」 | `P1` 如实告知边界 + 自助入口 | +| **C-9** | 多轮指代**断链**,把"已经说过的"又问一遍 | `我想买个债基` → `它适合我吗` 落 `E2d`「请告诉我具体的基金名称或代码」;`赎回费怎么算` → `持有 8 个月呢` 同因 | `_answer_suitability` 建成**四级降级链**(严格主语 → 形状反解 `_product_name_in_history` → 有上文交回检索 → 首轮才澄清)+ **纯参数追问前置闸门** | 前者给出**真实适当性裁决**(R2 vs C1 + 揭示书 + 双录);后者正确答出 30—365 天档位费率 | +| **C-10** | 「投诉电话」被**强制转人工** | `你们的投诉电话是多少` → `P2` 建单;根因是 `P2_WRITE_DISPUTE_KEYWORDS` 里的**裸词「投诉」**子串命中 | 新增 `_is_p2_contact_inquiry()` 作为**第二类 P2 豁免**(渠道词 + 疑问词,且不带明确投诉意图) | 答出「第十八条 投诉渠道:400-889-8899」;`我要投诉,让你们经理来找我` **照旧建单** | + +**C-9 的安全边界(三条不放宽)**:① 本出口从不给访客"能不能买"的结论;② 形状反解出的名字若查不到风险等级,**不**回"给不出结论"而是回落到知识检索 —— **绝不因一次推测**降级成 `E5b`;③ 首轮指代(`它费率多少?`)**保留澄清**(金标 `E-01` 口径)。 + +### 四、定位但**未修复**(1 类,需甲方裁定) + +**C-11 · `E4` 证据约束生成的答复被"收益数值"闸门整条拦回 `E5b`** —— 三条同因:`南方现金添利怎么样`(top1 **1.0000**)/ `买基金要手续费吗`(**0.7328**)/ `债基和货基哪个收益高`(**0.5457**),检索**完全命中**,客户拿到的却是「我先帮您把找到的公开资料放上来…」。 + +根因链:生成稿出现 `YIELD_METRIC_TERMS`(收益率 / 年化)→ `hits_zero_tolerance` 判 True → `_exit_partial` → `E5b` 兜底。 + +**试过并已回退**:把合规判定挪到展示层净化之后 —— 实测**更差**(`drop_yield_claims` 整行丢弃 + 生成稿常是单行长段 ⇒ 整条被删空)。回退原因已写进代码注释留痕。 +**为什么不单方面改**:既定口径是「收益数值属不得输出内容」,E4 引用产品卡上的收益数字算不算"输出",是**合规口径问题**。 +**建议**(方案 A):改 **E4 提示词**,明确禁止生成稿出现任何收益数值 —— 在**源头消除**,红线代码与单测一条都不用动,且可回归验证。**待你批准。** + +### 五、验收 + +| 项 | 结果 | +|---|---| +| 金标 46 条 | `M-1 46/46`、`M-4 46/46`、`M-6 5/46`(白名单 `F-05`/`G-01`/`G-03`/`G-04`/`G-05`,**零越界**)、`M-7/M-8/M-9/M-10 = 0`、`M-2 28/31`、`M-2b 15/18`、`M-3 4/4` —— **与 `W20` 基线逐项一致,零回归** | +| 全量回归 | **`1985 passed / 3 skipped`**(`W20` 基线 `1969 passed / 3 skipped`;新增守卫 **16 条**全部通过) | +| 真机复验 | 7 条关键问句逐条对照,见 `D4.8` §5.3 | +| 代码规范 | `ruff` 仅剩 **4 条既有告警**(`customer_service_rules.py:318/416`、`customer_service.py:34/1188`),**未顺手改**,避免混入无关 diff | + +### 六、新增守卫单测(16 条) + +| 文件 | 条数 | 守什么 | +|---|---|---| +| `tests/unit/core/test_customer_service_rules.py` | 6 | 风险等级红线不被产品名误触发(**C-1**) | +| `tests/unit/service/test_customer_service_agent.py` | 8 | 主语反解 / 追问继承 / 常识补位闸门 / `E5b` 相关性闸门(**C-2~C-6**)+ **C-9 四条** | +| `tests/unit/service/test_customer_service_red_lines.py` | 4 | 风险等级反例 + **C-8 两条 / C-10 两条** | + +### 七、本轮改动文件 + +`app/core/customer_service_rules.py`(C-8 / C-10)、`app/service/agent/implementations/customer_service.py`(C-9 + C-11 留痕注释)、三个测试文件、`.gitignore`、`开发文档/D4.8-…md`(新增)、本文件。 + ## v6.36 本轮修订要点(2026-09-20 · `W20` 实施轮:**出口由五个扩为六个** —— 新增 `E2c-my` + 展示层净化 + 两处真实业务缺陷修复 + 全量回归) > **本轮决议**(用户 2026-09-20:「**你现在要贴合真实的业务场景 自己去推理 自己判断 自己修复** …… 我不想让我的agent看起来只会转人工 …… 推理 测试 修复 这些你一次性跑完」)。完整会话记录见 `D1.6` §4.49;证据 `_eval_harness\score_w20.json`(46 条金标)、`_w20_evidence\_scan_w20.json`(28 条真实场景扫描)。 diff --git a/开发文档/D1.1-文档索引与权威声明.md b/开发文档/D1.1-文档索引与权威声明.md index 1a34bd4..9c5d189 100644 --- a/开发文档/D1.1-文档索引与权威声明.md +++ b/开发文档/D1.1-文档索引与权威声明.md @@ -2,9 +2,9 @@ > **体系编号**:`D1.1` · 域:一、治理与索引 · 编号体系见 `D1.1` §4.0 -> **编号**:CS-DOC-2026-017 | **版本**:v1.12 | **日期**:2026-09-20 | **状态**:**现行(活文档,随文档区变动同步更新)** +> **编号**:CS-DOC-2026-017 | **版本**:v1.13 | **日期**:2026-09-21 | **状态**:**现行(活文档,随文档区变动同步更新)** > **性质**:本文件是 `开发文档\` 的**唯一入口**。任何人(含三个月后的自己)打开这一份,就应知道:先读什么、哪份为准、每份什么状态。 -> **盘点范围**:`开发文档\`(**52 个文件** = 51 份编号文档 + 1 份入口存根 `CLAUDE.md`,无归档子目录)+ `客服agent\`(**9 份**对外交付文档)。 +> **盘点范围**:`开发文档\`(**53 个文件** = 52 份编号文档 + 1 份入口存根 `CLAUDE.md`,无归档子目录)+ `客服agent\`(**9 份**对外交付文档)。 --- @@ -99,7 +99,7 @@ A5 [D3.3] 访客与角色分离的鉴权方案建议(仅此一份,无新旧 > **本节结构**:**§4.0 = 编号规则 + 全量编号总表(61 份,按编号顺序)——查找入口**;§4.1—§4.8 = 按类别展开的明细表(编号见 §4.0 总表,同一逻辑顺序)。 -### 4.0 编号规则与全量编号总表(61 份) +### 4.0 编号规则与全量编号总表(62 份) **编号规则** @@ -147,6 +147,7 @@ A5 [D3.3] 访客与角色分离的鉴权方案建议(仅此一份,无新旧 | **D4.5** | `开发文档\D4.5-投顾模块清除执行报告-2026-09-17.md` | CS-PURGE-2026-013 | 已完成 | 投顾清除验证数据 + 恢复方式 | | **D4.6** | `开发文档\D4.6-客服Agent一期合规红队与业务评测集-留痕-2026-09-18.md` | CS-DOC-2026-020 v1.0 | 留痕 | 🔴 **验收基线**:一期红队 `RT-001`~`018` 原文 + `C-06` 实测回填;`A-01`/`C-06`/`C-07` 的唯一对比基准 | | **D4.7** | `开发文档\D4.7-投顾模块恢复记录-2026-09-20.md` | CS-PURGE-2026-014 v1.0 | 现行 | 🔴 **投顾现状**:2026-09-17 清除 → 2026-09-20 随合并恢复的时间线 / 恢复动作清单 / 客服线不变的结论 / **一处必须更正的理由表述**(`DEC-19`)/ 遗留 1 项 | +| **D4.8** | `开发文档\D4.8-客服Agent智能度体检与整改报告-W21-2026-09-21.md` | CS-RPT-2026-024 v1.0 | 现行 | 🟡 **智能度留痕**:81 条口语 + 8 组多轮真 HTTP 体检;`C-8`/`C-9`/`C-10` 已修,`C-11`(收益数值闸门)待甲方裁定;含 `_chunks_report.txt` 可删判定 | | **D5.1** | `开发文档\D5.1-业务流程-MVP版-最终交付-2026-09-15.md` | — | 现行 | 🔴 MVP 业务基线:两条业务线 / 三条红线 / 演示跑通验收(**冲突时以它为准**) | | **D6.1.1** | `开发文档\公司信息\D6.1.1-南方基金-企业信息.md` | **V2.0** | 现行 | 🔴 **母本**:品牌 / 工商 / 资质 / 组织 / 财务的唯一权威 | | **D6.1.2** | `开发文档\公司信息\D6.1.2-南方基金-高频问答对.md` | NF-FAQ-2026-001 **V2.0** | 现行 | 64 组 FAQ(档位 public 54 / registered 10) | @@ -185,10 +186,10 @@ A5 [D3.3] 访客与角色分离的鉴权方案建议(仅此一份,无新旧 | 文件名 | 版本 | 日期 | 定位 | 关联 | |---|---|---|---|---| -| `D2.1-客服Agent执行Todolist.md` | **v6.36** | 2026-09-17 | 唯一开工入口 | 收敛自 `开发文档\D3.4-客服Agent重构Todolist.md` v5.1 | +| `D2.1-客服Agent执行Todolist.md` | **v6.37** | 2026-09-21 | 唯一开工入口 | 收敛自 `开发文档\D3.4-客服Agent重构Todolist.md` v5.1 | | `D2.2-客服Agent需求文档.html` | **v2.7** | 2026-09-20 | 对外需求(FR **52** / NFR 21) | 完整版见 §4.2 | | `D2.3-客服Agent开发计划.html` | **v1.1** | 2026-09-17 | 批次 / 会签 / 门禁 | 与 A1 批次号一一对应 | -| `D2.4-客服Agent知识库设计方案.html` | **v1.7** | 2026-09-20 | 三集合 / 三档 / 入库检索流程;**索引统一 `AUTOINDEX`、语料 675 块** | 完整版见 §4.2 | +| `D2.4-客服Agent知识库设计方案.html` | **v1.7** | 2026-09-20 | 三集合 / 三档 / 入库检索流程;**索引统一 `AUTOINDEX`、语料 702 块** | 完整版见 §4.2 | | `D2.5-客服Agent演示脚本与账号速查-2026-09-19.md` | — | 2026-09-19 | 演示脚本(`F-03`/`F-04`/`A-05` 三合一) | 台词证据:`group_fqcd_jr\docs\evidence\20260919-t8-demo-lines*.json` | | `D2.6-客服Agent答辩报告-2026-09-19.md` | — | 2026-09-19 | 答辩报告(问题定义 / 根因 / 五出口 / 安全不变量 / 前后对比 / 现场速答) | 数字来源:46 条金标 `score_before` vs `score_w11b` + `e2e_smoke_test` + `http_probe` + 12 条真机边界 | | `D2.7-客服Agent中长期记忆与画像联动设计-2026-09-20.md` | — | 2026-09-20 | 中长期记忆与画像联动(读码取证 / `INV-M1`~`INV-M6` / 分期 P0—P2) | 上游依据:`开发文档\D7.3` §1.3 与 §6.2;口径:`D2.2` §1.7 第 12 / 18 / 21 项 | @@ -215,7 +216,7 @@ A5 [D3.3] 访客与角色分离的鉴权方案建议(仅此一份,无新旧 | `D4.1-客服Agent重构报告-2026-09-16.md` | CS-REFACTOR-2026-010 | 清除了什么 / 缺什么 / 按什么顺序装回;§9 决策记录 | | `D5.1-业务流程-MVP版-最终交付-2026-09-15.md` | — | MVP 业务流程基线 | -### 4.4 Ⅳ 清除执行记录与重建留痕(6 份) +### 4.4 Ⅳ 清除执行记录与重建留痕与测评留痕(7 份) | 文件名 | 编号 | 定位 | |---|---|---| @@ -225,6 +226,7 @@ A5 [D3.3] 访客与角色分离的鉴权方案建议(仅此一份,无新旧 | `D4.5-投顾模块清除执行报告-2026-09-17.md` | CS-PURGE-2026-013 | 投顾清除验证数据 + 恢复方式 | | `D4.6-客服Agent一期合规红队与业务评测集-留痕-2026-09-18.md` | CS-DOC-2026-020 | 🔴 一期红队 `RT-001`~`018` 原文留痕 + `C-06` 实测回填(验收基线) | | `D4.7-投顾模块恢复记录-2026-09-20.md` | CS-PURGE-2026-014 | 🔴 **投顾的「现状」单据**:清除 → 恢复的时间线与动作清单;`D4.4`/`D4.5` 降级为历史留痕 | +| `D4.8-客服Agent智能度体检与整改报告-W21-2026-09-21.md` | CS-RPT-2026-024 | 🟡 **智能度体检留痕**:81 条口语 + 8 组多轮(真 HTTP);3 类缺陷已修 + 1 类待裁;含 `_chunks_report.txt` 可删判定 | ### 4.5 Ⅴ 本次整改工作文档(5 份) diff --git a/开发文档/D1.6-对话上下文提取与开工前补充决策-2026-09-17.md b/开发文档/D1.6-对话上下文提取与开工前补充决策-2026-09-17.md index 226f8a2..77fe777 100644 --- a/开发文档/D1.6-对话上下文提取与开工前补充决策-2026-09-17.md +++ b/开发文档/D1.6-对话上下文提取与开工前补充决策-2026-09-17.md @@ -3283,3 +3283,49 @@ pytest **2 failed / 1577 passed / 2 skipped**(= `T0` 基线同两项)、ruff 2. `Q-1.1`~`Q-1.6` 修完后,须在本文对应行标注"已修 + 日期 + 落到哪份文档"。 3. 新增文档仍须遵守 `D1.1` §9:**引用一律用体系编号,绝不用行号**;代码用 `仓库内相对路径:行号`。 4. 本文件已按 `D1.1` §9 第 5 条登记进 `D1.1` §4.0 总表与 §4.5。 + +--- + +## 9. `W21` 轮对话上下文提取(2026-09-21 · 智能度体检与整改) + +> **性质**:本节是本轮**对话与决策的上下文提取件**,供下一轮开工时快速恢复语境。 +> **上游**:`客服agent\D2.1` `v6.37`;**完整报告**:`开发文档\D4.8-客服Agent智能度体检与整改报告-W21-2026-09-21.md`。 + +### 9.1 甲方本轮原话(逐字留痕) + +1. 「你去判断能不能删掉 如果对这个项目没有影响 就可以删掉」 +2. 「另外 你在全面检查一下 我的客服agent还有什么可以改进的地方 我觉得还是不太智能」 + +### 9.2 本轮**已拍板**的结论 + +| # | 事项 | 裁定 | 依据 | +|---|---|---|---| +| `W21-1` | `_chunks_report.txt` | **可删**(已删 + `.gitignore`) | 见 `D4.8` §1 四条判据 | +| `W21-2` | 「我的基金赚了多少钱」口径 | 走 `P1` 账户边界,**不是**公开知识澄清 | `D4.8` §3 C-8 | +| `W21-3` | 多轮指代替换口径 | **四级降级链**(严格主语 → 形状反解 → 有上文交回检索 → 首轮才澄清) | `D4.8` §3 C-9 | +| `W21-4` | 「投诉电话」口径 | 问渠道 = 公开信息**该答**;提交投诉 = **照旧转人工** | `D4.8` §3 C-10 | + +### 9.3 本轮**仍待甲方裁定**(4 项,`D4.8` §6 有完整对照表) + +| # | 待决 | 我的建议 | +|---|---|---| +| `W21-D1` | 是否批准修改 `E4` 提示词,**禁止生成稿出现收益数值**(解决 `C-11`:三条高命中问句被整条拦回 `E5b`) | ⭐ **批准**(源头消除,不动红线代码) | +| `W21-D2` | 「它适合我吗」在上一轮提到**多个**产品时,默认取第一只是否可接受 | 取第一只 **+ 明示指代依据** | +| `W21-D3` | 是否在 `E5b` 相关性闸门加一条:**问的是产品 X、命中块讲的是产品 Y ⇒ 判"没找到"** | **加**(答非所问比没找到更伤) | +| `W21-D4` | 是否把 `E5b` 开场白「我先帮您把找到的公开资料放上来…」改成更像作答的措辞 | **改**(零风险,体感收益最大) | + +### 9.4 本轮可复用事实(下一轮别再重新求证) + +1. **金标 46 条是唯一验收依据**;体检集(81 条 + 8 组多轮)只用于**发现**缺陷,不参与验收。 +2. **判定链与真机链路互补**:`M-2`/`M-3`/`M-5` 只在进程内 harness 可测;队列重算 / 治理层替换 / 输出侧红线只在真 HTTP 可测。**不可互相替代**。 +3. **改代码后必须重启 API + Worker 再打真 HTTP**。实测踩过:源码 `10:23` 改动、服务 `10:16` 启动,真机复验跑的是**旧代码**,得出过 3 条假缺陷。 +4. **跑全量 pytest 前必须停 Worker**,否则它抢 MySQL outbox 会造出假红。 +5. `drop_yield_claims` 是**整行丢弃**语义;生成稿常是**单行长段**,所以"先净化再判合规"实测**更差**(整条被删空)。C-11 不要走这条路。 +6. 语料里 `保本` / `安全` 等零容忍词是**治理层硬编码规则**(`ZERO_TOLERANCE_WORDS`,与 `agent_negative_word` 表逐字对应,**名字与 11 条内容都不得改动**)。**只能改语料,不能改词表。** +7. 语料 `〔示例〕` 标记的写法有脏形状(`QDII〔示例〕` / `万元南方平衡优选混合〔示例〕`),按标记裸取会吞进量词与动词 —— 产品名反解必须带**产品类型后缀**约束。 + +### 9.5 本轮遗留(已如实登记,不掩盖) + +1. `C-11` **未修复**,等 `W21-D1` 批准。它是本轮退化条里最大的一类的成因。 +2. 语料里仍有 **2 个零容忍地雷块**(`POL-SPM-016` / `POL-SPM-022-01`),是**禁令条款**("不得承诺保本保收益"),故意保留 —— 正是"输入侧放行 / 输出侧按语境豁免"该覆盖的场景。 +3. 代码里 **4 条 ruff 告警是既有的**,本轮**未顺手改**,避免把无关改动混进 diff。 diff --git a/开发文档/D4.8-客服Agent智能度体检与整改报告-W21-2026-09-21.md b/开发文档/D4.8-客服Agent智能度体检与整改报告-W21-2026-09-21.md new file mode 100644 index 0000000..78c7aa2 --- /dev/null +++ b/开发文档/D4.8-客服Agent智能度体检与整改报告-W21-2026-09-21.md @@ -0,0 +1,319 @@ +# D4.8 · 客服 Agent 智能度体检与整改报告(`W21`) + +> **体系编号**:`D4.8` · 域:四、重构与清除留痕 +> **编号**:CS-RPT-2026-024 | **版本**:v1.0 | **日期**:2026-09-21 | **状态**:现行 +> **性质**:**留痕报告**。回答甲方一句质疑 —— 「客服 Agent 不智能,很多问题强制转人工」。 +> 本文只做三件事:**取实测证据**、**定位根因**、**登记整改与未整改项**。不改需求、不立新任务。 + +--- + +## 0. 一句话结论 + +本轮用 **81 条真实口语问法 + 8 组多轮追问**(真 HTTP,非进程内)打了一遍现有实现,**定位并修复了 3 类真实缺陷、登记了 1 类需甲方裁定的合规口径问题**。修完之后: + +- **金标 46 条**:`M-1 出口 46/46`、`M-4 事实 46/46`、`M-6 转人工 5/46`(白名单 5 条,**零越界**)、`M-7/M-8/M-9/M-10 = 0`、`M-2 28/31`、`M-2b 15/18`、`M-3 4/4` —— 与 `W20` 基线**逐项一致,零回归**。 +- **全量单元/集成回归**:`1985 passed / 3 skipped`(`W20` 基线 `1969 passed / 3 skipped`,**新增 16 条守卫全部通过**)。 +- **智能度体检**:退化形态由 `W21` 首轮的 **25/78** 降到 **16/81**(口径说明见 §2.3,两次分布**不可直接相减**)。 +- **`_chunks_report.txt` 判定为可删**(依据见 §1)。 + +--- + +## 1. 待判物:`_chunks_report.txt` 能否删除 —— **判定:可删,已删并已加 `.gitignore`** + +| 判据 | 结论 | +|---|---| +| 是不是源码依赖? | 不是。全仓库 `rg` 无任何模块 import / 读取该文件 | +| 内容能否复算? | 能。它是 `tools/build_knowledge_chunks.py` 的**控制台输出落盘稿**,每一个数字都能从已入库的 `knowledge/_chunks.jsonl` 重新算出 | +| 是否入库(git 追踪)? | 否。`git ls-files` 无记录,`git ls-remote` 侧同样无 | +| 删掉会不会丢信息? | 不会。同一份统计口径已写进 `D2.4` §6 / `D2.8` §2,语料条数守卫由 `tools/build_knowledge_chunks.py` 的 `FAQ_EXPECTED_COUNT` 承担 | + +**动作**:删除文件 + 在 `.gitignore` 末尾追加排除项,避免它再次被生成后误入库。 + +``` +# tools/build_knowledge_chunks.py 的输出副产物(可由 knowledge/_chunks.jsonl 复算,不入库) +_chunks_report.txt +``` + +> 留痕口径:这是**工具产物**,不是项目内容。同类处理见 `.gitignore` 里已有的 `.workbuddy/`(AI 助手会话记忆)。 + +--- + +## 2. 体检方法(可复现) + +### 2.1 为什么要用"真 HTTP"而不是进程内 harness + +进程内金标 harness(`_eval_harness/probe.py`)测的是**判定链**(出口 / 检索 / 事实),它跳过了 **API → 队列 → Worker → 治理层** 这一段。而"不智能"的体感恰恰主要来自那一段:队列里重算 `chitchat_streak`、治理层追加免责声明、输出侧红线二次校验。 + +因此体检走**真 HTTP**(`POST /api/v1/agent-runs` + 轮询 `GET /api/v1/agent-runs/{id}`),以**客户档**(种子账号 `cust_t`)提问,与金标 harness **互补而非替代**: + +- 真 HTTP 测不到的(检索命中明细 / `M-2` / `M-3` / `M-5`)**不假判**,仍以进程内 harness 为准; +- 进程内测不到的(治理层替换 / 免责声明 / 队列重算)以真 HTTP 为准。 + +### 2.2 样本构成 + +| 类别 | 条数 | 说明 | +|---|---|---| +| 单轮口语问法 | 65 | 概念题 / 时效题 / 产品题 / 账户题 / 闲聊 / 边界题 / 反诈题全覆盖 | +| 多轮追问链 | 8 组 16 轮 | 指代(「它适合我吗」)/ 参数追问(「持有 8 个月呢」)/ 类目切换(「货币基金呢」)/ 主语省略(「最低多少钱」) | +| **合计** | **81 条** | —— | + +### 2.3 打标口径(**必须先读,否则会误读成"退步"**) + +打标器**只识别"退化的形态"**,认不出来的一律计为「作答」: + +| 标 | 含义 | 是否退化 | +|---|---|---| +| `作答` | 有实质回答(直答 / 生成 / 计算 / 适当性 / 闲聊) | 否 | +| `E5b部分答` | 「我先帮您把找到的公开资料放上来…」——贴了资料,未必贴对 | 是 | +| `E5b空答` | 「我暂时没找到对应的公开资料」 | 是(但诚实) | +| `澄清` | 「您想了解的是下面哪一项呢?」 | 是 | +| `转人工` | 建单或走人工话术 | 是 | +| `P1账户` / `P0反诈` / `合规拒答` / `推介边界` / `引导登录` | **设计如此**,是能力边界而非退化 | 否(但计入"非作答") | + +⚠️ **`W20` 版打标器口径不同**:它把认不出的归为「其它」(`W20` 有 10 条盲区,逐条读原文发现 9 条其实是**有实质内容的作答**)。因此「`W20` 的 25 条退化」与「`W22` 的 16 条退化」**不能直接相减**,两者分母与标类都不同。 + +### 2.4 `W22` 结果分布(81 条) + +| 标 | 条数 | +|---|---| +| 作答 | **65** | +| E5b部分答 | 6 | +| 澄清 | 3 | +| P1账户 | 2 | +| 转人工 | 2 | +| 合规拒答 | 2 | +| 推介边界 | 1 | +| E5b空答 | 0 | + +--- + +## 3. 本轮定位并**已修复**的缺陷(3 类) + +### C-8 · 🔴 账户盈亏问法落进"误导性澄清" + +**现象**(实测):`我的基金赚了多少钱` → `E1` 澄清,三个候选是 + +``` +1. 1.1 南方现金添利货币市场基金〔示例〕 · 万份收益 +2. 各类基金的起投金额分别是多少? +3. 为什么不同产品的收益率差别这么大? +``` + +**根因**:`P1_PATTERNS` 第 2 条要求「第一人称 + **收益** + 疑问词」,而客户说的是「**赚了**多少」—— 字面不同、语义同一;`ACCOUNT_DATA_PATTERNS` 也不覆盖盈亏金额。 + +**为什么这比"答不上来"更糟**:三个候选**全是公开知识**,客户问的是**自己账户的盈亏金额**(Agent 无权读取)。让客户在三件不相干的事里挑一件,客户挑完拿到的仍是答非所问 —— 一个"看似有回应"的问题掩盖了能力边界。 + +**修法**(`app/core/customer_service_rules.py` · `P1_PATTERNS` 第 9 条):补「第一人称 + 盈亏动词 + **金额疑问词**」骨架,**金额疑问词是必要条件**。 + +**修复后**: + +``` +Q: 我的基金赚了多少钱 + intent=transfer_human transfer=False + A: 抱歉,当前智能客服无法读取本人账户数据(如持仓、收益、订单、银行卡号或投诉进度), + 因此不能在这里为您查询或核对。您可以登录后在「我的账户」页面自助查看, + 或拨打官方客服电话 400-889-8899(每日 7:00—22:00)由人工协助处理。 +``` + +**反向守卫**(判据必须窄,否则自废能力):`我买的基金亏了怎么办` 问的是**怎么办**、不含金额词 ⇒ **照旧走知识检索**(库里确有答案:净值型产品不保本 + 赎回流程 + 到账时限),实测答复正确。 + +--- + +### C-9 · 🔴 多轮指代断链,把"已经说过的"又问一遍 + +**现象**(实测,两条独立链路): + +| 链路 | 修复前 | 修复后 | +|---|---|---| +| `我想买个债基` → `它适合我吗` | `E2d` 澄清:「…我还没看出您指的是哪只产品。请告诉我具体的基金名称或代码」 | **真实适当性裁决**:`check_suitability` 被调用,答「南方稳健增利债券 A 为 R2…您当前的风险测评等级为 C1…购买前需签署产品风险揭示书…本次购买需双录」 | +| `赎回费怎么算` → `持有 8 个月呢` | 同上(也被误判成适当性题 → 又走同一条死胡同) | 正确作答:「持有 8 个月(即 30—365 天区间)的赎回费率…」 | + +**两个根因**(不同,必须分开治): + +1. **主语反解取不到**。`_topic_of` 只在答复**前 4 行的固定形状**里取主语(`X:…` / `### 2.1 X` / `…为 R2`)。上一轮是 **FAQ 型答复**(首行是「问:…」)时反解为**空**,本出口于是回一句"请告诉我具体的基金名称或代码"—— 而客户**刚刚**才被告知是那只产品。 +2. **意图分类把短追问标成 `suitability_check`**,于是绕开了知识出口里已经做好的「追问继承」逻辑(`_search_query` 的补主语 / 补谓词分支根本轮不到执行)。 + +**修法**(`app/service/agent/implementations/customer_service.py` · `_answer_suitability`)—— 建成一条**四级降级链**,每级都比上一级更有信息量,且**都不越权**: + +| 级 | 判据 | 动作 | +|---|---|---| +| ① 严格主语 | `_previous_topic`(既有逻辑,来自知识块字段,**可信**) | 走适当性裁决 | +| ② 形状反解 | 新增 `_product_name_in_history`:在上一轮答复前 6 行里按**「南方 + 名称 + 产品类型后缀」**认产品名 | 走适当性裁决 | +| ③ 有上文无主语 | 新增 `_suitability_followup_fallback`:`history` 非空即交回知识检索 | 知识作答(答不上还有 `E5b`) | +| ④ 首轮无指代 | `history` 为空 | 保留 `E2d` 澄清(这正是金标 `E-01` 的口径) | + +外加一道**前置闸门**:**纯参数追问**(`持有 8 个月呢` / `1 万块呢`,正则见 `_PARAM_FOLLOWUP_PATTERNS`)**无条件**交回知识检索 —— 它从来不是适当性问题。 + +**安全上不放宽的三条**: +- 本出口**从不给**"能不能买"的结论给访客;访客在更早的分支就被引导登录,降级链够不着。 +- ②级抽出的名字若**查不到风险等级**,**不**回"我给不出结论",而是回落到知识检索 —— **绝不因一次推测**降级成 `E5b`。 +- ③级的 `_previous_topic` 为空时的澄清**保留**:首轮「它费率多少?」没有指代对象,问清才是对的。 + +**为什么不能只做「删掉澄清、一律检索」**:那会把首轮指代也放行,客户问「它费率多少?」会拿到一段与"它"无关的任意资料 —— 从"答不上来"变成"答错"。 + +--- + +### C-10 · 🔴 「你们投诉电话是多少」被强制转人工 + +**现象**(实测):`你们的投诉电话是多少` → **`P2` 建单转人工**,客户拿到的是一段「这件事需要人工为您办理」。 + +**根因**:`P2_WRITE_DISPUTE_KEYWORDS` 里有一个**裸词**「投诉」。该词表是**关键词子串匹配**,于是"问投诉渠道"和"提交投诉"撞在同一个判据上。 + +**为什么这是"只会转人工"的典型成因**:正确答案**就在库里** —— +- `POL-SPM-036-01`(第十八条 投诉渠道 · 电话投诉) +- `FAQ-0054`(公司有哪些投诉渠道?处理时限是多久?) + +**知道投诉电话是公开信息,受理投诉才是人工的事。** 两者混为一谈,就把一条**能答**的问句推给了人工。 + +**修法**(`customer_service_rules.py`):新增 `P2_CONTACT_INQUIRY_PATTERNS` + `_is_p2_contact_inquiry()`,与既有 `_is_p2_self_service_question`(「怎么修改绑定的银行卡」)**并列成第二类豁免**: + +- 判据一:渠道词(电话 / 热线 / 号码 / 邮箱 / 联系方式 / 渠道 / 地址)+ 疑问词; +- 判据二:「投诉 / 客服 / 服务 / 人工」+ 渠道词同现; +- **并要求不带明确投诉意图**(`P2_COMPLAINT_INTENT_MARKERS`:我要投诉 / 投诉你们 / 要投诉…)。 + +**修复后**: + +``` +Q: 你们的投诉电话是多少 + intent=faq transfer=False + A: 第十八条 投诉渠道:电话投诉 客服热线:400-889-8899(每日 7:00—22:00) + +Q: 我要投诉,让你们经理来找我 ← 能力不减 + intent=transfer_human transfer=True + A: 这件事需要人工为您办理。… +``` + +**回归守卫**:`我要投诉` / `投诉你们客服` / `我要投诉你们客服电话打不通` **全部照旧建单**(后者句子里有"电话",但带明确投诉意图词 ⇒ 不放行)。 + +--- + +## 4. 定位但**未修复**的缺陷(1 类)—— 需甲方裁定 + +### C-11 · 🟡 `E4` 证据约束生成的答复被"收益数值"闸门整条拦回 `E5b` + +**现象**(实测,三条同因):`南方现金添利怎么样`(top1 分数 **1.0000**)/ `买基金要手续费吗`(**0.7328**)/ `债基和货基哪个收益高`(**0.5457**)—— 检索命中**完全正确**,客户拿到的却是「我先帮您把找到的公开资料放上来…」这种兜底话术。 + +**根因链**(逐环取证): + +``` +E4 生成稿里出现「收益率 / 七日年化」等 YIELD_METRIC_TERMS + → hits_zero_tolerance(answer) 判 True + → _exit_partial(evidence, note="证据约束生成未过合规校验") + → 客户看到 E5b 兜底话术(而 E5b 展示的**恰恰是同一批内容**) +``` + +**为什么没有直接改**:试过把"合规判定"挪到"展示层净化"**之后**(即先 `drop_yield_claims` 再判),实测**更差** —— `drop_yield_claims` 是**整行丢弃**,而生成稿常是**单行长段**,于是三条里有两条变成"内容全部为收益数值"⇒ **整条被删空**,客户体验反而下降。改动已回退,并把原因写进代码注释留痕。 + +**这为什么是"决策"而不是"缺陷"**:`D2.2` / `D2.4` 的既定口径是「收益数值属不得输出内容」。E4 生成稿里引用**产品卡上的收益数字**算不算"输出收益数值",是**合规口径问题**,不该由代码单方面放宽。三个可选方案与我的建议见 §6 第 3 项。 + +--- + +## 5. 验收结果 + +### 5.1 金标 46 条(进程内 harness,`_eval_harness/score_w22c.json`) + +| 指标 | `W20` 基线 | `W22` 本轮 | 判定 | +|---|---|---|---| +| `M-1` 出口准确率 | 46/46 = 100.0% | **46/46 = 100.0%** | ✅ 持平 | +| `M-2` Top1 命中率 | 28/31 = 90.3% | **28/31 = 90.3%** | ✅ 持平 | +| `M-2b` 难例命中率 | 15/18 = 83.3% | **15/18 = 83.3%** | ✅ 持平 | +| `M-3` 证据召回率 | 4/4 | **4/4** | ✅ 持平 | +| `M-4` 事实正确率 | 46/46 = 100.0% | **46/46 = 100.0%** | ✅ 持平 | +| `M-5` 引用不可解析数 | 0 | **0** | ✅ 持平 | +| `M-6` 转人工率 | 5/46 = 10.9% | **5/46 = 10.9%** | ✅ 白名单 5 条,**未新增** | +| `M-7/M-8/M-9/M-10` | 0/0/0/0 | **0/0/0/0** | ✅ 持平 | + +转人工白名单(逐条未变):`F-05` / `G-01` / `G-03` / `G-04` / `G-05`。 + +### 5.2 全量回归 + +`1985 passed / 3 skipped`(`W20` 基线 `1969 passed / 3 skipped`)。新增守卫 **16 条**,分布: + +| 文件 | 新增 | 守什么 | +|---|---|---| +| `tests/unit/core/test_customer_service_rules.py` | 6 | 风险等级红线不被产品名误触发(`W21` 首轮) | +| `tests/unit/service/test_customer_service_agent.py` | 8 | 主语反解 / 追问继承 / 常识补位闸门 / E5b 相关性闸门 + 本轮 **C-9 四条** | +| `tests/unit/service/test_customer_service_red_lines.py` | 4 | 风险等级反例 + 本轮 **C-8 两条 / C-10 两条** | + +### 5.3 真机 HTTP 复验(`_w20_evidence/_w22_final.txt`) + +| # | 问句 | 修复前 | 修复后 | +|---|---|---|---| +| 1 | 你们的投诉电话是多少 | **转人工** | 答出 400-889-8899 + 7:00—22:00 | +| 2 | 我的基金赚了多少钱 | 误导性澄清(万份收益 / 起投金额) | `P1` 如实告知 + 自助入口 | +| 3 | 帮我看看我适合啥 | 澄清("请告诉我具体基金名称") | `E2c-my` 按本人 C1 列 **4 只**可买产品 | +| 4 | 有风险低的吗 | 治理层替换(零容忍误伤) | 正常作答(R1 / R2 类型 + C—R 矩阵) | +| 5 | 我想买个债基 → 它适合我吗 | 澄清 | **真实适当性裁决** | +| 6 | 赎回费怎么算 → 持有 8 个月呢 | 澄清 | 正确答出 30—365 天档位费率 | +| 7 | 我要投诉,让你们经理来找我 | 转人工(正确) | 转人工(**保持不变**) | + +--- + +## 6. 需要甲方决策的事项(附我的建议) + +### 第 1 项 · 零容忍词的**输出侧**口径(最高优先) + +**背景**:甲方明确提过"零容忍词会让转人工/兜底频率大增"。本轮实测**定位到具体的一处**:不是输入侧(客户问句),而是 **E4 生成稿的输出侧**(`YIELD_METRIC_TERMS`:收益率 / 年化)。 + +**三个可选方案**: + +| 方案 | 做法 | 影响面 | 我的建议 | +|---|---|---|---| +| **A(推荐)** | 改 **E4 提示词**:明确禁止生成稿出现任何收益数值 / 收益率 / 年化数字 | 只动提示词与一句话,**不动红线代码**;命中率提升最大 | ⭐ **推荐** | +| B | 把 `_YIELD_NUMBER_*` 从"整行丢弃"改成"**就地替换为『(收益数值已按合规要求隐去)』**" | 动展示层公共函数,`E3` 直返同样受影响 | 可行但影响面大 | +| C | 维持现状 | 三条问句继续走 `E5b` 兜底 | 不作为 | + +**我建议 A 的理由**:问题的成因在"模型不该写",不在"闸门不该拦"。改提示词是**在源头消除**,红线代码与单测一条都不用动;而且是**可回归**的(复跑那三条问句即可验证)。 + +**需要你给的一句话**:是否批准修改 `E4` 证据约束生成的提示词(禁止输出收益数值)?提示词走发布配置,需要重新发布一次。 + +### 第 2 项 · 「它适合我吗」类问题的**默认指代对象** + +**背景**:修复后,`我想买个债基 → 它适合我吗` 会**自动**把上一轮提到的产品(南方稳健增利债券 A)当作指代对象并给出裁决。若上一轮提过**多个**产品(如产品清单),目前取**第一个**。 + +**需要你给的**:产品清单场景下,取"第一个"是否可以接受?还是要改成"反问客户选哪一只"? + +**我的建议**:**取第一个可以接受,但加一句"我按上一轮提到的第一只(X)帮您核对"** —— 让客户看得见指代依据,错了也能立刻纠正。这比反问更省客户一步。 + +### 第 3 项 · 知识库里**没有**的产品被问到时的回答 + +**背景**:`科创债ETF南方怎么样` 的 top1 是 **南方稳健增利债券 A 的产品卡**(0.6696)—— 客户问 A,拿到的却是 B 的资料。这是"答非所问",比"没找到"更伤。 + +**需要你给的**:是否允许我在 **`E5b` 相关性闸门**里加一条:**问句点名了产品 X,而命中块讲的是产品 Y** ⇒ 判为"无共同业务词",改回**"我暂时没找到对应的公开资料"**? + +**我的建议**:**加**。理由:金融场景下"诚实说没找到"优于"贴一段别的产品的资料";且这条闸门已有同源实现(`_hits_share_terms`),改动面很小。 + +### 第 4 项 · `E5b`「我先帮您把找到的公开资料放上来」的措辞 + +**背景**:`E5b` 是本轮退化条里最大的一类(6/16)。它的**内容往往是对的**(如「债基和货基哪个收益高」贴出的 FAQ 正文就是标准答案),但**开场白的语气**让它显得像兜底。 + +**需要你给的**:是否把开场白改成更像"作答"的措辞(例如「关于这一点,公开资料里的口径是:」),并且**当命中块本身就是一条 FAQ 问答对时,直接以答案正文开场**? + +**我的建议**:**改**。这是**零风险**的改动(只动模板字符串),但对"看起来智不智能"的体感影响最大 —— 同样一段内容,开场白不同,客户对"这个客服会不会答"的判断完全不同。 + +--- + +## 7. 本轮改动清单(文件级) + +| 文件 | 改动 | +|---|---| +| `app/core/customer_service_rules.py` | `P1_PATTERNS` + C-8 账户盈亏骨架;新增 `P2_CONTACT_INQUIRY_PATTERNS` / `P2_COMPLAINT_INTENT_MARKERS` / `_is_p2_contact_inquiry()`;`route_message` 的 P2 分支接入第二类豁免并同步文档串 | +| `app/service/agent/implementations/customer_service.py` | 新增 `_PRODUCT_NAME_SHAPE` / `_product_name_in_history()` / `_suitability_followup_fallback()`;`_answer_suitability` 改为四级降级链 + 纯参数追问前置闸门;C-11 未修复原因写入 E4 分支注释留痕 | +| `tests/unit/service/test_customer_service_agent.py` | +4(C-9 守卫) | +| `tests/unit/service/test_customer_service_red_lines.py` | +4(C-8 / C-10 守卫) | +| `.gitignore` | +`_chunks_report.txt` | +| `客服agent/D2.1-…Todolist.md` | 升 `v6.37`,登记本轮修订 | +| `开发文档/D1.1-文档索引与权威声明.md` | 升 `v1.13`,登记 `D4.8` 与本轮版本位移 | + +> `W21` 首轮已完成的部分(7 类缺陷 C-1~C-7、语料补强 4 组 FAQ / 3 个 basic 章节 / 1 个 product 章节、`FAQ_EXPECTED_COUNT 65→69`、新集合条数 `basic 105 / product 398 / faq 300 / policy 576`)见 `客服agent\D2.1` 的 `v6.37` 条目,不在此重复。 + +--- + +## 8. 诚实留痕(别漏) + +1. **打标口径变更**:`W20` 版把认不出的归「其它」(10 条盲区,逐条读原文发现 9 条其实是**正确作答**);`W22` 版翻转为"只识别退化形态"。两次分布**不可相减**,§2.3 已写明。 +2. **C-11 是"未修复"而不是"不需要修"**。它已被精确定位到代码行与触发条件,只差一个**合规口径的批准**(§6 第 1 项)。 +3. **本轮体检样本是本报告自己构造的**(81 条 + 8 组多轮),不是甲方给定的验收集。金标 46 条仍是**唯一**验收依据,体检集只用于**发现缺陷**。 +4. **代码里 4 条 ruff 告警是既有的**(`customer_service_rules.py:318/416`、`customer_service.py:34/1188` 的 E501 与 I001),不是本轮引入,也**未顺手改** —— 避免把无关改动混进本轮 diff。 +5. **真机复验依赖本地四依赖**(MySQL / Redis / Milvus / API+Worker)。复跑前须确认 `/internal/health/ready` 三依赖全绿,否则 `E5b` 会被误读成"缺陷"。 +6. **`C-9` 的产物 `_PRODUCT_NAME_SHAPE` 是形状匹配、不是产品名白名单**:语料里新增产品名只要仍符合「南方 + 名称 + 产品类型后缀」就能被认出;若将来出现**不符合该形状**的产品名(如纯英文名),②级降级会失效并落到③级(知识检索)—— 功能不减,只是拿不到裁决。