feat: 示例问题按场景过滤,防止跨场景混淆
后端: - filter_by_scene(): 关键词判断问题归属场景,过滤跨场景问题 legal: 仲裁/诉讼/合同/税务/股权等 decision: 扩张/定价/招人/融资/现金流/竞争等 life: 孩子/父母/养老/健康/睡眠等 emotion: 焦虑/失眠/自我怀疑/崩溃/拖延症等 - generate_daily_topics: prompt加场景边界说明,返回前双重过滤(老板视角+场景归属) - /samples: prompt加场景边界说明,返回前双重过滤 - /topics: prompt加禁止清单+正确视角示例 Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
@@ -18,7 +18,7 @@ from bossai import (
|
||||
ExpertStore, ConsultationStore, RatingStore,
|
||||
DocumentGenerator, RegulationUpdateManager, FactFinder,
|
||||
ChatStore, redact,
|
||||
DailyTopicStore, generate_daily_topics, filter_boss_perspective,
|
||||
DailyTopicStore, generate_daily_topics, filter_boss_perspective, filter_by_scene,
|
||||
)
|
||||
|
||||
# ===== 日志脱敏 =====
|
||||
@@ -461,10 +461,14 @@ def generate_samples(req: SampleRequest):
|
||||
return {"samples": builtin.get(req.scene, builtin["legal"])}
|
||||
|
||||
scene_config = {
|
||||
"legal": {"desc": "法律/法务", "focus": "劳动用工、合同审查、债权债务、股东纠纷、税务风险、诉讼仲裁等法律问题"},
|
||||
"decision": {"desc": "经营决策", "focus": "扩张收缩、定价策略、招人裁员、融资合伙、项目承接、业务转型等经营决策"},
|
||||
"life": {"desc": "生活助理", "focus": "家庭沟通、子女教育、父母养老、睡眠压力、出差日程、健康习惯等个人生活问题,不是企业经营问题"},
|
||||
"emotion": {"desc": "情绪疏导", "focus": "压力、焦虑、愤怒、拖延、疲惫等情绪状态,老板可能倾诉的心理感受"},
|
||||
"legal": {"desc": "法律/法务", "focus": "劳动用工、合同审查、债权债务、股东纠纷、税务风险、诉讼仲裁等法律问题",
|
||||
"boundary": "只关注法律/法务问题,不要生成纯经营策略、纯情绪疏导、纯生活问题"},
|
||||
"decision": {"desc": "经营决策", "focus": "扩张收缩、定价策略、招人裁员、融资合伙、项目承接、业务转型等经营决策",
|
||||
"boundary": "只关注经营决策问题。不要生成纯法律问题(如合同违约金怎么约定)、纯情绪问题(如焦虑失眠、自我怀疑、凌晨怀疑人生)、纯生活问题。情绪相关的决策问题可以,但必须是'该怎么做'而非'我很难受'"},
|
||||
"life": {"desc": "生活助理", "focus": "家庭沟通、子女教育、父母养老、睡眠压力、出差日程、健康习惯等个人生活问题,不是企业经营问题",
|
||||
"boundary": "只关注个人生活问题,不要生成纯法律问题、纯经营决策问题、纯情绪疏导问题"},
|
||||
"emotion": {"desc": "情绪疏导", "focus": "压力、焦虑、愤怒、拖延、疲惫等情绪状态,老板可能倾诉的心理感受",
|
||||
"boundary": "关注情绪与心理疏导,核心是情绪感受和心理状态,不是经营策略或法律方案"},
|
||||
}
|
||||
config = scene_config.get(req.scene, scene_config["legal"])
|
||||
|
||||
@@ -473,6 +477,7 @@ def generate_samples(req: SampleRequest):
|
||||
f"你是{config['desc']}领域的专业顾问。请生成 4 个该领域的典型问题,"
|
||||
f"用户(中小企业老板)可能会问的问题。\n\n"
|
||||
f"问题方向:{config['focus']}\n\n"
|
||||
f"场景边界:{config['boundary']}\n\n"
|
||||
)
|
||||
if req.topic:
|
||||
prompt += f"具体话题:{req.topic}\n\n"
|
||||
@@ -538,9 +543,11 @@ def generate_samples(req: SampleRequest):
|
||||
if start == -1 or end == -1:
|
||||
return {"samples": builtin.get(req.scene, builtin["legal"])}
|
||||
samples = json.loads(answer[start:end + 1])
|
||||
# 过滤:老板视角 + 非字符串 + 去重
|
||||
samples = filter_boss_perspective(
|
||||
[s for s in samples if isinstance(s, str) and s.strip()]
|
||||
# 过滤:老板视角 + 场景归属 + 非字符串
|
||||
samples = filter_by_scene(
|
||||
filter_boss_perspective(
|
||||
[s for s in samples if isinstance(s, str) and s.strip()]
|
||||
), req.scene
|
||||
)[:4]
|
||||
if len(samples) < 2:
|
||||
return {"samples": builtin.get(req.scene, builtin["legal"])}
|
||||
|
||||
Reference in New Issue
Block a user