docs: site-import spec 复审建议四项(测试覆盖/时间口径/max_tokens 目标值/非 HTML 入口映射)
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
|
||||
新租户接入目前靠人工:管理员给 Claude 官网 URL,人工抓取分析后手工生成全套行业化配置(两次实操约 30-40 分钟/租户)。本功能把该流程产品化:**给 URL → 服务端抓取 → AI 生成草稿包 → 管理员审核页确认/修改 → 保存进租户配置(热生效)**,使租户接入自助化。
|
||||
|
||||
成功判据:一个新建的空租户,管理员(超管或租户管理员)输入官网 URL,3 分钟内拿到可审核的完整草稿包,审核保存后 AI 客服即以该行业身份正确应答(对照 televicsic/yotaienergys 的实际配置质量)。
|
||||
成功判据:一个新建的空租户,管理员(超管或租户管理员)输入官网 URL,**典型路径约 3 分钟**(抓取正常 + AI 两段顺利;最坏重试链路 7 分钟见 §3.3)拿到可审核的完整草稿包,审核保存后 AI 客服即以该行业身份正确应答(对照 televicsic/yotaienergys 的实际配置质量)。
|
||||
|
||||
## 2. 方案总览
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
### 3.2 生成器 `generator.py`
|
||||
|
||||
- **行为骨架模板**(实施时从 jiancai `system.md` 抽取通用纪律制成):语言规则/职能边界/红线/磨价应对/联系方式策略/对话推进/上下文追踪等段落为固定文本;行业占位符:`{{身份描述}}`、`{{产品线总述}}`、{{规格追问路径}}、`{{好差示例组}}`、`{{推荐建议}}` 等(占位符清单一并定义在模板文件中)。**红线/联系方式策略零 AI 参与。**
|
||||
- **AI 调用**(走平台 resolver 的 AI 配置——租户 ai 组→平台设置→env;**超时 120s 经 `asyncio.wait_for` 包裹(wait_for 是放弃非取消,to_thread 卸载的调用不中断——记档)、max_tokens 需 GLMProvider 小扩展(参数透传)且实施时核查配置模型的上限**(resolver 默认 glm-4-flash 的旧接口 max_tokens 封顶 4095——传 8K 会报错;实施首步实测当前配置模型可接受的 max_tokens,取 min(目标, 模型上限),记入实施记档)**;**两次调用):
|
||||
- **AI 调用**(走平台 resolver 的 AI 配置——租户 ai 组→平台设置→env;**超时 120s 经 `asyncio.wait_for` 包裹(wait_for 是放弃非取消,to_thread 卸载的调用不中断——记档)、max_tokens **目标 8192**(需 GLMProvider 小扩展参数透传)且实施时核查配置模型的上限**(resolver 默认 glm-4-flash 的旧接口 max_tokens 封顶 4095——传 8K 会报错;实施首步实测当前配置模型可接受的 max_tokens,取 min(目标, 模型上限),记入实施记档)**;**两次调用):
|
||||
- **调用 1「行业分析」**:输入=各页清洗文本(截断后总量 ≤24K 字符)→ 输出=结构化 JSON:公司概况/产品线(名称+要点)/规格公开与否(bool+依据)/应用领域/联系方式/目标客户/行业关键词/西语尾巴产品词(es tail 用)。
|
||||
- **调用 2「内容生成」**:输入=调用 1 的 JSON + 占位符清单 + **few-shot 范例**(落位 `app/platform/site_import/fewshot/` 包内数据文件,从生产两租户 yotaienergys/televicsic 的实际配置摘录——身份段/追问路径/好差示例对/事实卡骨架/提取器字段/评估器示例各取范式,总量 ≤6K tokens;**数据治理注记**:摘录内容为提示词/品牌文案非密钥,属用户自有内容入库本仓——客户自有产品的公开话术,风险接受,记档)→ 输出=各占位符内容 + **品牌文案四件**(JSON 键值):`brand_title`(公司名/品牌名+Support 形态)、`welcome`(一句开放式提问,范式照 few-shot)、`topics`(3-5 个产品线短标签)、`placeholder`(输入框占位一句)。品牌四件与占位符同源生成——否则草稿包品牌字段无生成路径(评审抓漏)。
|
||||
- **生成物语言写死中文**(示例对为英文),与既有提示词体系一致——提示词中明确指令,抓取文本为西语/英语不改变产出语言。
|
||||
@@ -99,7 +99,7 @@
|
||||
|---|---|
|
||||
| URL 打不开/404/超时 | failed:「网站打不开或响应太慢——检查 URL」 |
|
||||
| SPA 空壳 | failed:「该网站需要浏览器渲染,暂不支持——请手动配置」 |
|
||||
| 内容不足(清洗后总文本 <1K 字符,或调用 1 输出产品线为空) | failed:「网站内容不足以生成配置,请在配置中心手动配置」 |
|
||||
| 内容不足(清洗后总文本 <1K 字符,或调用 1 输出产品线为空,或入口页非 text/html 导致零页) | failed:「网站内容不足以生成配置,请在配置中心手动配置」 |
|
||||
| AI 限流/超时 | failed 带原因;`retry=generate` 只重生成不重抓 |
|
||||
| 内网/非法地址 | POST 即拒(400「仅支持公网网站地址」),连接层二次兜底 |
|
||||
| 生成数字违例 | 剔除 + warnings 注记 |
|
||||
@@ -108,9 +108,9 @@
|
||||
## 7. 测试策略
|
||||
|
||||
- **抓取器**:SSRF 拒绝矩阵(私网段/端口/逐跳重定向/rebinding 连接层钩子被调用);页数/深度/大小/超时上限;清洗与抽取(本地固定 HTML fixture:WP 形态/内联色/外链 CSS/logo/wa.me/mailto/模板残留样本);SPA 空壳判定。
|
||||
- **生成器**:AI provider 注入 fake(固定 JSON/内容)测管线;数字归一化校验器(全半角/单位/波浪号);行业分支选择;占位符填充完整性(模板零残留);生成物语言断言;模板残留剔除。
|
||||
- **生成器**:AI provider 注入 fake(固定 JSON/内容)测管线;数字归一化校验器(全半角/单位/波浪号);行业分支选择;占位符填充完整性(模板零残留);生成物语言断言;模板残留剔除;**空占位符出厂兜底分支;品牌四件生成(fake 返回含 brand_title/welcome/topics/placeholder);墙尾巴按池形态分派(出厂单句→替换 / 多句→追加)。**
|
||||
- **任务**:状态机流转、并发上限 409、30 分钟过期惰性清理、retry=generate 不重抓。
|
||||
- **API**:两角色 200/未认证 401/停用租户 403/进行中 409/跨租户越权(租户管理员打别的租户 → 403(_tenant_guard 依赖先于处理器,含不存在 slug——勿误写 404))。
|
||||
- **API**:两角色 200/未认证 401/停用租户 403/进行中 409/**频控 429(每租户 3 次/15 分钟,新建与 retry 同计)**/GET 过期 404(终态语义)/跨租户越权(租户管理员打别的租户 → 403(_tenant_guard 依赖先于处理器,含不存在 slug——勿误写 404))。
|
||||
- **前端**:草稿包→表单、保存序列、warnings 分级纯函数 vitest。
|
||||
- 基线:**计划开工前实跑确认当前基线数**(shared-domain 合入后演进,勿沿用旧数);新增只增不减。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user