官网改版上线:关于我们与联系我们页重构、首页AI主视觉v4、品牌标识与导航交互;同步测试与设计文档
这个提交包含在:
@@ -5,101 +5,143 @@
|
||||
2. 确保面向客户与访客,使用大白话、实在话(如防重复扣款、源码交付、内网部署数据不泄露、标注文档原文);
|
||||
3. 确保各个独立页面文案短小精悍、不啰嗦、讲人话。
|
||||
"""
|
||||
|
||||
import os
|
||||
import unittest
|
||||
|
||||
ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
class TestPlainAndConciseCopywriting(unittest.TestCase):
|
||||
|
||||
class TestPlainAndConciseCopywriting(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.files = {
|
||||
'index': os.path.join(ROOT_DIR, 'addons/official/view/web/official_home/index.html'),
|
||||
'index_e': os.path.join(ROOT_DIR, 'addons/official/view/web/official_home/index_e.html'),
|
||||
'service_page': os.path.join(ROOT_DIR, 'addons/official/view/web/official_product/service_page.html'),
|
||||
'service_software': os.path.join(ROOT_DIR, 'addons/official/view/web/official_product/service_software.html'),
|
||||
'service_app': os.path.join(ROOT_DIR, 'addons/official/view/web/official_product/service_app.html'),
|
||||
'service_agent': os.path.join(ROOT_DIR, 'addons/official/view/web/official_product/service_agent.html'),
|
||||
'product_page': os.path.join(ROOT_DIR, 'addons/official/view/web/official_product/product_page.html'),
|
||||
'cases_page': os.path.join(ROOT_DIR, 'addons/official/view/web/official_case_show/list.html'),
|
||||
'cases_e': os.path.join(ROOT_DIR, 'addons/official/view/web/official_case_show/list_e.html'),
|
||||
'about_page': os.path.join(ROOT_DIR, 'addons/official/view/web/official_home/single.html'),
|
||||
'about_e': os.path.join(ROOT_DIR, 'addons/official/view/web/official_home/single_e.html'),
|
||||
'contact_page': os.path.join(ROOT_DIR, 'addons/official/view/web/official_online_message/list.html'),
|
||||
'contact_e': os.path.join(ROOT_DIR, 'addons/official/view/web/official_online_message/list_e.html'),
|
||||
'nav_pc': os.path.join(ROOT_DIR, 'addons/official/view/web/official_common/pc/nav.html'),
|
||||
'footer_pc': os.path.join(ROOT_DIR, 'addons/official/view/web/official_common/pc/footer.html'),
|
||||
"index": os.path.join(
|
||||
ROOT_DIR, "addons/official/view/web/official_home/index.html"
|
||||
),
|
||||
"index_e": os.path.join(
|
||||
ROOT_DIR, "addons/official/view/web/official_home/index_e.html"
|
||||
),
|
||||
"service_page": os.path.join(
|
||||
ROOT_DIR, "addons/official/view/web/official_product/service_page.html"
|
||||
),
|
||||
"service_software": os.path.join(
|
||||
ROOT_DIR,
|
||||
"addons/official/view/web/official_product/service_software.html",
|
||||
),
|
||||
"service_app": os.path.join(
|
||||
ROOT_DIR, "addons/official/view/web/official_product/service_app.html"
|
||||
),
|
||||
"service_agent": os.path.join(
|
||||
ROOT_DIR, "addons/official/view/web/official_product/service_agent.html"
|
||||
),
|
||||
"product_page": os.path.join(
|
||||
ROOT_DIR, "addons/official/view/web/official_product/product_page.html"
|
||||
),
|
||||
"cases_page": os.path.join(
|
||||
ROOT_DIR, "addons/official/view/web/official_case_show/list.html"
|
||||
),
|
||||
"cases_e": os.path.join(
|
||||
ROOT_DIR, "addons/official/view/web/official_case_show/list_e.html"
|
||||
),
|
||||
"about_page": os.path.join(
|
||||
ROOT_DIR, "addons/official/view/web/official_home/single.html"
|
||||
),
|
||||
"about_e": os.path.join(
|
||||
ROOT_DIR, "addons/official/view/web/official_home/single_e.html"
|
||||
),
|
||||
"contact_page": os.path.join(
|
||||
ROOT_DIR, "addons/official/view/web/official_online_message/list.html"
|
||||
),
|
||||
"contact_e": os.path.join(
|
||||
ROOT_DIR, "addons/official/view/web/official_online_message/list_e.html"
|
||||
),
|
||||
"nav_pc": os.path.join(
|
||||
ROOT_DIR, "addons/official/view/web/official_common/pc/nav.html"
|
||||
),
|
||||
"footer_pc": os.path.join(
|
||||
ROOT_DIR, "addons/official/view/web/official_common/pc/footer.html"
|
||||
),
|
||||
}
|
||||
|
||||
self.contents = {}
|
||||
for key, path in self.files.items():
|
||||
if os.path.exists(path):
|
||||
with open(path, encoding='utf-8') as f:
|
||||
with open(path, encoding="utf-8") as f:
|
||||
self.contents[key] = f.read()
|
||||
else:
|
||||
self.contents[key] = ''
|
||||
self.contents[key] = ""
|
||||
|
||||
self.all_text = "\n".join(self.contents.values())
|
||||
|
||||
def test_forbid_ai_jargon_and_cliches(self):
|
||||
"""严格杜绝 AI/互联网黑话与套话口癖"""
|
||||
forbidden_jargon = [
|
||||
'闭环', # 典型大厂/AI黑话(如“业务闭环”、“闭环协同”、“交付闭环”)
|
||||
'工匠精神打磨', # 空洞煽情修饰
|
||||
'准备开启您的', # 典型 AI 祈使反问句
|
||||
'矩阵赋能', # AI 常用生造词
|
||||
'双向幂等校验', # 过于晦涩的技术术语,应通俗化为防重复扣款/防重复提交
|
||||
'多路向量重排召回',# 技术晦涩,应通俗化说明知识库检索精准
|
||||
'多路向量召回', # 算法黑话
|
||||
'无感幂等同步', # 技术行话,应通俗化为自动同步防重复
|
||||
'数字化落地样本', # 典型公关大词,客户需要的是业务系统而非“样本”
|
||||
'确定性数字化样本',
|
||||
'知识管线', # 算法黑话,应通俗化为企业知识库
|
||||
'语料处理管线', # 算法行话,应通俗化为知识库处理脚本
|
||||
'操作链路', # UX大厂黑话,应通俗化为操作步骤
|
||||
'脱敏数据沙箱', # 过于晦涩,应通俗化为演示环境
|
||||
'厘清业务痛点', # 居高临下大厂套话,应为调研实际业务流程
|
||||
'全链路打通', # 大厂黑话,应为全面打通或全面贯通
|
||||
'全链路压测', # 应为高并发压力测试
|
||||
"闭环", # 典型大厂/AI黑话(如“业务闭环”、“闭环协同”、“交付闭环”)
|
||||
"工匠精神打磨", # 空洞煽情修饰
|
||||
"准备开启您的", # 典型 AI 祈使反问句
|
||||
"矩阵赋能", # AI 常用生造词
|
||||
"双向幂等校验", # 过于晦涩的技术术语,应通俗化为防重复扣款/防重复提交
|
||||
"多路向量重排召回", # 技术晦涩,应通俗化说明知识库检索精准
|
||||
"多路向量召回", # 算法黑话
|
||||
"无感幂等同步", # 技术行话,应通俗化为自动同步防重复
|
||||
"数字化落地样本", # 典型公关大词,客户需要的是业务系统而非“样本”
|
||||
"确定性数字化样本",
|
||||
"知识管线", # 算法黑话,应通俗化为企业知识库
|
||||
"语料处理管线", # 算法行话,应通俗化为知识库处理脚本
|
||||
"操作链路", # UX大厂黑话,应通俗化为操作步骤
|
||||
"脱敏数据沙箱", # 过于晦涩,应通俗化为演示环境
|
||||
"厘清业务痛点", # 居高临下大厂套话,应为调研实际业务流程
|
||||
"全链路打通", # 大厂黑话,应为全面打通或全面贯通
|
||||
"全链路压测", # 应为高并发压力测试
|
||||
]
|
||||
for jargon in forbidden_jargon:
|
||||
self.assertNotIn(jargon, self.all_text, f"全站文案仍包含黑话或AI套话: '{jargon}'")
|
||||
|
||||
|
||||
self.assertNotIn(
|
||||
jargon, self.all_text, f"全站文案仍包含黑话或AI套话: '{jargon}'"
|
||||
)
|
||||
|
||||
def test_customer_friendly_plain_language(self):
|
||||
"""面向客户与访客的大白话表达:突出价值与保障"""
|
||||
# 首页:通俗的防重复扣款与数据安全
|
||||
self.assertIn('防重复扣款', self.contents['index'], "首页产品指标应使用客户一目了然的'防重复扣款'")
|
||||
self.assertIn(
|
||||
"防重复扣款",
|
||||
self.contents["index"],
|
||||
"首页产品指标应使用客户一目了然的'防重复扣款'",
|
||||
)
|
||||
|
||||
# 智能体页:通俗解释
|
||||
self.assertTrue(
|
||||
'完全离线运行' in self.contents['service_agent'] or '私有化部署' in self.contents['service_agent'],
|
||||
"智能体页必须用通俗大白话说明部署方式与数据边界"
|
||||
"完全离线运行" in self.contents["service_agent"]
|
||||
or "私有化部署" in self.contents["service_agent"],
|
||||
"智能体页必须用通俗大白话说明部署方式与数据边界",
|
||||
)
|
||||
self.assertTrue(
|
||||
any(label in self.contents['service_agent'] for label in ('引用来源', '引用溯源', '引用展示')),
|
||||
"智能体页必须讲清楚回答带有引用来源"
|
||||
any(
|
||||
label in self.contents["service_agent"]
|
||||
for label in ("引用来源", "引用溯源", "引用展示")
|
||||
),
|
||||
"智能体页必须讲清楚回答带有引用来源",
|
||||
)
|
||||
|
||||
# 案例页:拒绝“样本”,使用“数字化系统”;使用“自动同步防重复”
|
||||
self.assertIn('数字化系统', self.contents['cases_page'])
|
||||
self.assertIn('自动同步防重复', self.contents['cases_page'])
|
||||
self.assertNotIn('多路向量召回', self.contents['cases_page'])
|
||||
self.assertIn("数字化系统", self.contents["cases_page"])
|
||||
self.assertIn("自动同步防重复", self.contents["cases_page"])
|
||||
self.assertNotIn("多路向量召回", self.contents["cases_page"])
|
||||
|
||||
# 联系我们表单:使用通俗的“业务需求”而非大厂“痛点”
|
||||
self.assertNotIn('系统痛点', self.contents['contact_page'])
|
||||
self.assertIn('业务需求', self.contents['contact_page'])
|
||||
self.assertNotIn("系统痛点", self.contents["contact_page"])
|
||||
self.assertIn("业务需求", self.contents["contact_page"])
|
||||
|
||||
# 软件开发页:面向客户的直白 CTA
|
||||
self.assertNotIn('准备开启您的企业级定制软件工程?', self.contents['service_software'])
|
||||
self.assertNotIn(
|
||||
"准备开启您的企业级定制软件工程?", self.contents["service_software"]
|
||||
)
|
||||
|
||||
# APP与小程序页:通俗表述
|
||||
self.assertNotIn('私域闭环', self.contents['service_app'])
|
||||
self.assertNotIn("私域闭环", self.contents["service_app"])
|
||||
|
||||
# 产品页:开箱即用与源码买断清晰明了
|
||||
self.assertIn('成熟商业系统', self.contents['product_page'])
|
||||
self.assertIn("成熟商业系统", self.contents["product_page"])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
在新工单中引用
屏蔽一个用户