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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user