refactor: 品牌统一为「南方财富」(项目方定)

背景:品牌名此前三处不一致 —— 后端 Agent 自称「奶龙基金」(customer_service_rules
的防诈骗/转人工话术、risk_agent 与 risk_analysis_service 的系统提示词)、前端全站
「南方财富」、闲聊提示词与知识素材「南方科技」。docs/36 已把它登记为"上报项目方后
待定",现按项目方决定统一为「南方财富」。

改动:
- app/core/customer_service_rules.py:P0 防诈骗话术与 P2 转人工话术里的品牌名
- app/service/agent/implementations/customer_service.py:COMPANY 常量,
  以及那处引用实测样本的注释(改为不绑定具体品牌名,免得下次改名又过时)
- app/service/agent/implementations/risk_agent.py:docstring、自我介绍、system prompt
- app/service/risk_analysis_service.py:SYSTEM_PROMPT
- app/worker/risk_scan_scheduler.py:--help 描述
- app/static/index.html(旧联调页 4 处)、portal/employee-risk/dashboard/index.html
- tests/unit/api/test_customer_service_test_page.py:同步断言(它断言的正是页面里的品牌名)
- tools/publish_chitchat_prompt.py:SYSTEM_PROMPT 改品牌;并修掉"存在即跳过"的检查
  —— 原来只判当前版本有没有这一行,于是改了文案也发不出去(脚本打印"无需发布"直接
  退出),没有任何提示。改为比对 system_prompt/user_prompt_template 内容。

闲聊提示词已重发为 release 308 / v5,生效内容为"你是南方财富的智能客服助手…"。

刻意未动:
- fin_product.fund_manager = "南方基金" —— 它被 market_quote_sync_service 与
  product_history_sync_service 当过滤条件使用,改名会让同步链路查不到产品
- knowledge_search_service.py 注释里引用的知识库实际标题「南方科技有限公司…」
- docs/客服docs 下的历史素材与 docs/ 下的过程记录(属历史留痕)

⚠️ Milvus 里的知识条目仍写「奶龙基金」(RAG-*/NF-*)与「南方科技」(PROD-*),
属知识数据,需重灌才能统一;本轮不动。

同时:
- docs/40 把品牌条目标为已处理,并补上知识库缺口的现状
- 新增 docs/42-场内基金知识条目草稿.md:按 fin_product 的 20 只产品生成,
  含通用交易规则与产品清单;费率等缺失字段一律标"以交易页面为准",未编造数字。
  **该文件是草稿,未入库**,待审核后走 POST /api/v1/knowledge/documents 灌库。
This commit is contained in:
2026-09-13 19:17:56 +08:00
parent 52ae38efd7
commit f72a545c39
11 changed files with 199 additions and 23 deletions
+17 -7
View File
@@ -52,7 +52,7 @@ AGENT_TYPE = "customer_service"
# (Agent 侧仍保留代码默认值作为兜底,两者内容相同,所以发布前后行为一致、
# 区别只在于"能不能改")。
SYSTEM_PROMPT = (
"你是南方科技的智能客服助手。回应要简短、礼貌,并自然引导用户提出与基金、理财、"
"你是南方财富的智能客服助手。回应要简短、礼貌,并自然引导用户提出与基金、理财、"
"账户相关的问题。禁止承诺收益,禁止出现「保本」「稳赚」「无风险」「保证收益」"
"「预期收益率」「年化收益率」「安全」等表述。"
)
@@ -79,12 +79,17 @@ async def active_release_id() -> int | None:
return await ConfigReleaseService(session).active_release_id()
async def prompt_already_in_active_release() -> bool:
"""当前生效版本里是否已经有这条提示词 —— 有就说明无需重发。"""
async def prompt_needs_publish() -> bool:
"""当前生效版本里的这条提示词,是否与脚本定义**一致** —— 一致才算无需重发。
⚠️ 不能只判「有没有这一行」:那样改了文案也发不出去(脚本会认为"已存在"直接退出),
表现是"改了 SYSTEM_PROMPT、跑完脚本、生效的还是旧话术",而且没有任何提示。
品牌名从「南方科技」改成「南方财富」时正好撞上这个坑。
"""
async with SessionFactory() as session:
release_id = await ConfigReleaseService(session).active_release_id()
if release_id is None:
return False
return True
row = await session.scalar(
select(PromptTemplateVersion).where(
PromptTemplateVersion.release_id == release_id,
@@ -92,7 +97,12 @@ async def prompt_already_in_active_release() -> bool:
PromptTemplateVersion.agent_type == AGENT_TYPE,
)
)
return row is not None
if row is None:
return True
return (
row.system_prompt != SYSTEM_PROMPT
or row.user_prompt_template != USER_PROMPT_TEMPLATE
)
async def next_prompt_version(prompt_code: str) -> int:
@@ -162,8 +172,8 @@ def prompt_payload(release_id: int, version: int) -> dict[str, object]:
async def main() -> int:
if await prompt_already_in_active_release():
print("当前生效版本已包含该提示词,无需发布")
if not await prompt_needs_publish():
print("当前生效版本里的提示词与脚本定义一致,无需发布")
return 0
release = await active_release_id()