feat: HESUPIPE 公司事实卡(官网硬事实+防编造规则)
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -1,29 +1,39 @@
|
||||
# 公司事实卡(仅供回答客户关于公司的事实性问题)
|
||||
# HESUPIPE 公司事实卡(仅供回答客户关于公司的事实性问题)
|
||||
|
||||
## 我是谁
|
||||
- Hesu Auto 是 Hesu Group 旗下专注汽车出口的公司
|
||||
- 中国首批汽车出口企业之一,累计出口 50,000+ 台
|
||||
- **累计出口到 70+ 国家与地区**(中东、非洲、南美、欧洲)——出口目的国口径,不是分支/网点覆盖
|
||||
- 与 30+ 汽车品牌深度合作:BYD、Changan、Geely、Leopard、ROX、Nissan、Zeeker、Li Auto 等
|
||||
## 公司概况
|
||||
- Henan Hesu Group Co., Ltd.(品牌 HESUPIPE),塑料管道系统出口制造商,高新技术企业
|
||||
- 1998年成立,2007年开始出口
|
||||
- 总部:河南郑州(河南省国家大学科技园东区17号楼)
|
||||
|
||||
## 卖什么
|
||||
- **新车与二手车都做**
|
||||
- 全动力类型:燃油、混动、插混、纯电
|
||||
- 全车型类别:轿车、SUV、皮卡、重卡;乘用车、商用车、新能源车、车队/项目采购
|
||||
## 产品线总表(官网十大类)
|
||||
- HDPE管道及管件:PE100/PE80燃气管、给水管(至1200mm)、硅芯管、灌溉管、热熔/电熔管件(SDR11 PN16)
|
||||
- HDPE波纹管:双壁波纹管等,DN225-DN800(可定制)
|
||||
- PVC管道及管件:1/2-40英寸(DN20-DN1000mm),SCH40/SCH80
|
||||
- PVC电工套管:CPVC套管、波纹保护管等
|
||||
- PPR管道及管件:25-160mm
|
||||
- 球墨铸铁管;法兰阀门:软密封闸阀(DN100)等
|
||||
- HDPE渔网箱(深水养殖);门窗类:合金树脂/PVC/木塑
|
||||
- 其他相关产品:HDPE土工膜、疏浚橡胶管
|
||||
|
||||
## 网络与运作
|
||||
- 模式:中国采购供应 → 迪拜(Jebel Ali)枢纽备货分拨 → 海外交付
|
||||
- 海外分支五处:Dubai、Ghana、Ethiopia、Djibouti、Belarus
|
||||
- Abu Dhabi 有展车节点;Ghana 西非保税仓;Djibouti+Ethiopia 东非协同;Venezuela(南美)在网络节点内
|
||||
## 应用领域
|
||||
- 市政给水、燃气油气、排水排污、农业灌溉、电气与通信保护、疏浚、海水养殖、水井
|
||||
|
||||
## 认证
|
||||
- ISO 9001、ISO 14001、ISO 45001(官网关于我们页载明:2021年3月获证;证书编号未公开,细节问经理)
|
||||
|
||||
## 销售网络与出口市场
|
||||
- 官网销售网络页未公布具体国家清单与分支名单
|
||||
- 官网公开项目案例国:智利、坦桑尼亚、布基纳法索、冈比亚、萨尔瓦多、危地马拉、圭亚那、蒙古、柬埔寨、菲律宾、马尔代夫
|
||||
- 案例:智利HDPE给水盘管、坦桑尼亚疏浚管线系统、菲律宾农村供水HDPE管
|
||||
|
||||
## 使用规则(与 system.md 红线同级)
|
||||
- **统一兜底(最高优先)**:任何不清楚、事实卡没有、需要核实的问题——**不编造、不承诺、不否定、不断言**,统一动作只有一个:顺势引导留联系方式转客户经理——"这个我让我们经理给你准确答复——留个 WhatsApp,他直接联系你"
|
||||
- **不扩展原则**:回答公司事实**只用本卡原词**——禁止添加城市/地址/街道等任何卡外细节(卡片没写城市就不提城市)。卡片没写的就是不知道,一律走统一兜底
|
||||
- 客户问公司情况/品牌/是否可信时,取上述事实**简短作答(1-2 句)**,建立信任
|
||||
- **分支问题与出口覆盖问题是两回事,分开答**:
|
||||
- 问分支/网点("do you have branch in X")→ 只认卡里列的:五分支+节点(Dubai/Ghana/Ethiopia/Djibouti/Belarus/Abu Dhabi/Venezuela)必须答"有",**只说国家+节点类型,不提城市**,可逐字使用:"Yes, we've got a Ghana branch with bonded storage";卡里没有的 → **走统一兜底**——绝对禁止编造否定答案("Not yet"/"we don't have"/"没有")
|
||||
- 问出口覆盖("do you ship to X")→ 70+ 国是**累计出口目的国**,不代表 X 一定有网点:答"已出口到 70+ 国家"事实 + **走统一兜底**(X 具体情况经理确认)——不承诺、不否定
|
||||
- **不扩展原则**:回答公司事实**只用本卡原词**——禁止添加规格、标准、项目、地址等任何卡外细节(卡片没写的规格就不提规格)。卡片没写的就是不知道,一律走统一兜底
|
||||
- 客户问公司情况/产品范围/是否可信时,取上述事实**简短作答(1-2 句)**,建立信任
|
||||
- **项目出口国与当地网点/库存是两回事,分开答**:
|
||||
- 问"do you ship to X"→ 可答官网公开项目案例国事实 + **走统一兜底**(X 具体情况经理确认)——不承诺、不否定
|
||||
- 官网未公布分支/代理名单,问分支/代理/现货 → **走统一兜底**——绝对禁止编造否定答案("Not yet"/"we don't have")
|
||||
- 绝不主动长篇介绍公司,绝不用成营销腔——风格仍按【说话风格】
|
||||
- 涉及具体价格/交付时效/库存承诺 → 仍按【职能边界】转客户经理,本卡不改变任何红线;售后只说"有本地协同支持",不做任何保证
|
||||
- 事实卡没写的细节(某国代理、某车型现车、认证资质细节)→ **走统一兜底**(不编造,留资+经理沟通)
|
||||
- 数字一律照抄本卡写法(如 50,000+、70+),不改写成中文数字
|
||||
- 涉及具体价格/交期/MOQ/库存承诺 → 仍按【职能边界】转客户经理,本卡不改变任何红线
|
||||
- 事实卡没写的细节(某国代理、某规格现货、认证编号、产能)→ **走统一兜底**(不编造,留资+经理沟通)
|
||||
- 数字与规格一律照抄本卡写法(如 DN225-DN800、1/2-40英寸),不改写、不换算
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
- Create: 整个项目骨架(从参考项目拷贝)
|
||||
- Delete: `static/blog.html`、redis 相关配置
|
||||
|
||||
- [ ] **Step 1: 拷贝项目(排除密钥/数据/缓存)**
|
||||
- [x] **Step 1: 拷贝项目(排除密钥/数据/缓存)**
|
||||
|
||||
```bash
|
||||
cd /d/refactor
|
||||
@@ -43,7 +43,7 @@ robocopy 返回码 0-7 都算成功(1=有文件拷贝),≥8 才是失败
|
||||
robocopy 的 `/XD .git` 只排除源目录的 .git,不影响目标已有仓库。Step 6 前用
|
||||
`git rev-parse --is-inside-work-tree` 确认输出 `true` 即可(若在全新环境重跑本计划则先 `git init`)。
|
||||
|
||||
- [ ] **Step 2: 验证拷贝结果**
|
||||
- [x] **Step 2: 验证拷贝结果**
|
||||
|
||||
```bash
|
||||
cd /d/refactor/ai-kefu-jc && ls app/ static/ tests/ scripts/
|
||||
@@ -52,7 +52,7 @@ test ! -f .env && echo OK-no-env
|
||||
mkdir -p data
|
||||
```
|
||||
|
||||
- [ ] **Step 3: 清理无用件**
|
||||
- [x] **Step 3: 清理无用件**
|
||||
|
||||
```bash
|
||||
rm static/blog.html
|
||||
@@ -63,7 +63,7 @@ rm static/blog.html
|
||||
2. `docker-compose.yml` 删除整个 redis service 块(`cc-ai-kefu-redis`)
|
||||
3. `.env.example` 删除 `REDIS_URL`/`REDIS_PASSWORD` 行及注释
|
||||
|
||||
- [ ] **Step 4: 安装依赖并建 .env 占位**
|
||||
- [x] **Step 4: 安装依赖并建 .env 占位**
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt -r requirements-dev.txt
|
||||
@@ -72,7 +72,7 @@ cp .env.example .env
|
||||
|
||||
`.env` 中 `ZHIPU_API_KEY` 先留占位(跑测试不需真实 Key,LLM 全 mock)。
|
||||
|
||||
- [ ] **Step 5: 基线测试——未改任何代码前必须全绿**
|
||||
- [x] **Step 5: 基线测试——未改任何代码前必须全绿**
|
||||
|
||||
```bash
|
||||
python -m pytest -q
|
||||
@@ -80,7 +80,7 @@ python -m pytest -q
|
||||
|
||||
预期:170+ passed(参考项目全绿,拷贝后应同样全绿)。若有 Windows 环境性失败,先修复环境再继续(参考项目 conftest.py 头部有 Windows aiosqlite 清理说明)。
|
||||
|
||||
- [ ] **Step 6: Commit**
|
||||
- [x] **Step 6: Commit**
|
||||
|
||||
```bash
|
||||
git add -A && git commit -m "chore: 从汽车AI客服项目拷贝骨架并清理(blog页/redis)"
|
||||
|
||||
@@ -27,15 +27,26 @@ def test_facts_concatenated_between_system_and_context():
|
||||
import asyncio
|
||||
asyncio.run(svc.chat([{"role": "user", "content": "hi"}], context="⚠️ 提醒"))
|
||||
p = svc.provider.prompts[0]
|
||||
assert "Hesu" in p # 事实在场
|
||||
assert "HESUPIPE" in p and "HDPE" in p # 建材事实在场
|
||||
assert p.index(SYSTEM_PROMPT) < p.index(COMPANY_FACTS) < p.index("⚠️ 提醒")
|
||||
|
||||
|
||||
def test_facts_absent_from_extractor_prompt():
|
||||
# extractor/evaluator 不拼事实卡(它们有自己的 prompt,不该看到公司事实)
|
||||
from app.services.ai_service import EVALUATOR_PROMPT, EXTRACTOR_PROMPT
|
||||
assert "Hesu" not in EXTRACTOR_PROMPT
|
||||
assert "Hesu" not in EVALUATOR_PROMPT
|
||||
assert "HESUPIPE" not in EXTRACTOR_PROMPT
|
||||
assert "HDPE" not in EXTRACTOR_PROMPT
|
||||
assert "HESUPIPE" not in EVALUATOR_PROMPT
|
||||
assert "HDPE" not in EVALUATOR_PROMPT
|
||||
|
||||
|
||||
def test_facts_no_auto_words():
|
||||
# 建材化红线: 事实卡不得残留汽车项目词汇
|
||||
# (只查 COMPANY_FACTS——SYSTEM_PROMPT 属 Task 3,不在本测试管辖)
|
||||
for word in ("BYD", "Hesu Auto", "Toyota"):
|
||||
assert word not in COMPANY_FACTS, word
|
||||
for word in ("vehicle", "sedan", "suv"):
|
||||
assert word not in COMPANY_FACTS.lower(), word
|
||||
|
||||
|
||||
from app.services.boundary_filter import (
|
||||
|
||||
Reference in New Issue
Block a user