- 新增小红书前端模块(启动服务、内容分析、爆款创作、发布记录、技能卡片、拟人设置、AI 助手) - 新增 xhs-agent-desktop 独立桌面 Agent,对接 OMS 任务调度 - 登录页重构,整合微信登录与 OMS JWT 认证 - 订单、渠道、用户中心等页面与 API 增强 Co-authored-by: Cursor <cursoragent@cursor.com>
11 KiB
小红书模块 — 联调与验收
关联:小红书模块设计-063001.md · rbac系统设计-060801.md
代码:E:\oms0414·C:\Users\wilso\Desktop\oms0414-back·C:\Users\wilso\Desktop\LIKE AI
版本:v0.1 · 2026-06-30
1 部署清单
1.1 数据库(两个库)
| 库 | 脚本 | 说明 |
|---|---|---|
OMS 业务库(如 fake_simple_admin) |
sql/install_xhs_module.sql |
建 8 张 t_xhs_* 表 + 技能/AI 提供商种子(推荐一键) |
| 同上(仅表结构) | sql/migrate_t_xhs.sql |
只建表 |
| 同上(可选拆分) | seed_xhs_skills.sql · seed_xhs_ai_providers.sql |
单独补种子 |
| RBAC 库 | sql/fix_xhs_menu_bad_guids.sql |
仅 menu 曾误写 CreateUserId=0 时执行 |
| RBAC 库 | sql/seed_xhs_rbac_menu.sql |
菜单;@ADMIN_USER_ID 改为实际超级管理员 user.Id |
| RBAC 库 | sql/seed_xhs_role_permissions.sql |
给 Customer / Admin 追加 Xhs.* 权限(幂等) |
推荐顺序
OMS 业务库:install_xhs_module.sql
RBAC 库:fix_xhs_menu_bad_guids.sql(若已报错)→ seed_xhs_rbac_menu.sql → seed_xhs_role_permissions.sql
重启 OMS API(会自动跑 XhsRolePermissionSeedContributor 合并权限,与 SQL 二选一即可)
重新登录 OMS(刷新 JWT 与菜单)
1.2 后端
cd C:\Users\wilso\Desktop\oms0414-back
dotnet build SimpleAdmin.sln
dotnet run --project src/SimpleAdmin.Api
默认监听以 launchSettings.json / 环境配置为准(常见 http://localhost:5281)。
1.3 前端
cd E:\oms0414
pnpm install # 首次
pnpm dev
生产构建:pnpm build,Nginx 配置见 nginx-default.conf(仅 SPA 页面路径走 index.html,/xhs/agent/list 等 API 走 admin 后端,勿整段 /xhs 当 SPA)。
1.4 LIKE AI Agent
cd "C:\Users\wilso\Desktop\LIKE AI"
py -3 main.py activate <本地激活码> # License 仍本地校验,与 OMS 无关
py -3 main.py agent --oms-url <API根> --token <JWT>
| 场景 | --oms-url 示例 |
|---|---|
| 本机后端 | http://localhost:5281/admin |
| 远程 admin | https://api.nanafa.com/admin |
注意:浏览器 dev 时前端走 Vite 代理
/xhs → admin,Python Agent 不能用http://localhost:5173;必须指向真实 Admin API 根地址(含/admin后缀)。
2 环境自检
2.1 菜单与权限
| 检查项 | 预期 |
|---|---|
GET /rbac/menu/get-menu-tree |
无 Guid: 0 报错 |
| 客户账号登录 | 左侧出现「小红书」6 个子菜单 |
| 系统菜单 | 「AI 助手」在「系统管理」下(/system/xhsAiAssistant) |
| 权限 | 客户角色含 Xhs.Agent.Query 等(查 role_permission 或管理端角色页) |
-- RBAC 库
SELECT Code, Name FROM role WHERE Code IN ('Customer', 'Admin');
SELECT PermissionCode FROM role_permission rp
JOIN role r ON r.Id = rp.RoleId
WHERE r.Code = 'Customer' AND PermissionCode LIKE 'Xhs.%';
2.2 业务表
-- OMS 业务库
SHOW TABLES LIKE 't_xhs_%';
SELECT COUNT(*) FROM t_xhs_skill;
SELECT COUNT(*) FROM t_xhs_ai_provider;
2.3 API 冒烟(Swagger 分组 OMS-Xhs 或 curl)
需 客户账号 JWT(loginType=1):
POST /xhs/agent/list
Authorization: Bearer <token>
Content-Type: application/json
{"page":1,"pageSize":30}
返回 { items, total } 即通路正常。
3 端到端联调 Checklist
按顺序勾选;每步失败先查「5 常见问题」。
阶段 A — 连接与 Agent
- A1 客户账号登录 OMS Web
- A2 打开「小红书 → 启动服务」,复制 JWT 与启动命令
- A3 本机执行
py -3 main.py agent --oms-url ... --token ...,窗口保持运行 - A4 约 30s 内列表出现 Agent,状态 在线(心跳间隔 30s,在线阈值 90s)
- A5 点击「启动引擎」→ 任务创建成功;Agent 日志有 claim/report
- A6 点击「扫码登录」→ 本机 Chrome 弹出;登录后「检查登录」为已登录
阶段 B — 拟人设置
- B1 「拟人设置」页加载 JSON 配置
- B2 修改并保存 → 成功提示
- B3 Agent 下次心跳后拉取新配置(
human-config/pull),本机行为生效
阶段 C — 内容分析
- C1 「新建采集」→ 选「关键词搜索」+ Agent → 提交
- C2 左侧会话列表出现新记录;详情任务状态由 pending → succeeded
- C3 「采集结果」Tab 出现笔记列表(或原始 JSON)
- C4 系统 → AI 助手:至少一个提供商已填 ApiSecret(Key) 与模型名
- C5 选提供商 →「AI 分析」→「AI 报告」Tab 有 Markdown
- C6 对某笔记 点赞 / 收藏 / 评论 → 提示任务号;Agent 执行后无报错
阶段 D — 爆款创作与发布
- D1 上传图片 → 返回
publicUrl - D2 「AI 生成」文案(需提供商 Key)→ 标题/正文/标签填充
- D3 立即发布 → 发布记录状态 publishing → succeeded
- D4 定时发布(未来 5+ 分钟)→ 记录为 scheduled;到点后 Worker 触发(每分钟扫描)
- D5 定时任务 取消 / 失败任务 重试 可用
阶段 E — 技能卡片
- E1 列表可见 5 条系统技能(种子)
- E2 新建/编辑/删除自定义技能
- E3
analyze_only一键执行 → 产生分析会话 - E4
create_and_publish+ 图片 → 发布记录新增
阶段 F — AI 助手
- F1 系统 → AI 助手:提供商列表(DeepSeek / 豆包等模板)
- F2 编辑提供商:BaseUrl、Model、ApiSecret 保存成功
- F3 对话发送消息 → 流式/完整回复正常
阶段 G — 生产/nginx(上线前)
- G1
nginx -t && nginx -s reload已执行 - G2 刷新
/xhs/analysis等页面返回 SPA,不 404 - G3
POST https://api.nanafa.com/admin/xhs/agent/list(带 Token)正常 - G4 Agent 使用生产
--oms-url https://api.nanafa.com/admin
4 验收标准(P0–P3)
| 模块 | 通过标准 |
|---|---|
| Agent 连接 | 注册、心跳、列表、远程 control 四类动作可创建任务 |
| 内容分析 | 三种采集类型、轮询详情、AI 分析、笔记互动 |
| 爆款创作 | 上传、AI 生成、立即/定时发布 |
| 发布记录 | 筛选、取消定时、失败重试 |
| 技能卡片 | CRUD + 三种 runMode |
| 拟人设置 | 读写 + Agent 拉取 |
| AI 助手 | 提供商 CRUD + 对话 |
| 权限隔离 | 客户 A 看不到客户 B 的 Agent/任务/发布记录 |
| 明确不做 | 物流查价、CLI 日志、License 不在 OMS 内 |
5 常见问题
5.1 get-menu-tree / 登录报错 Could not parse CHAR(36) value as Guid: 0
原因:RBAC 库某表 GUID 列被写成 "0"(常见于 menu.CreateUserId,也可能是 PId / role 审计字段等)。
⚠️ 本地 dev 易踩坑:pnpm dev 时 localhost:5173/rbac/* 经 Vite 代理到远程 http://api.nanafa.com/admin,在本机 MySQL 跑修复脚本不会影响登录。请确认 Navicat 连的是 API 实际使用的 RBAC 库(与 api.nanafa.com 同一实例)。
验证是否远程报错:
curl.exe -s "http://api.nanafa.com/admin/rbac/auth/login" -H "Content-Type: application/json" -d "{\"account\":\"admin\",\"password\":\"123456\",\"type\":0}"
本地 API 联调应直连:
curl.exe -s "http://localhost:5281/admin/rbac/auth/login" ...
处理(RBAC 库):
sql/diagnose_rbac_bad_guids.sql— 查出脏行(勿只查menu.Id,要看CreateUserId/PId)sql/fix_rbac_bad_guids.sql— 全表修复(或fix_xhs_menu_bad_guids.sql仅 menu)
勿用 WHERE CreateUserId = 0(整数),会触发 MySQL 1292。
5.2 登录后看不到「小红书」菜单
- 确认
seed_xhs_rbac_menu.sql已执行 - 确认角色有
Xhs.*(SQL 或重启 API 种子) - 退出重新登录
- 子客户需在主客户权限范围内单独分配
5.3 1146 Table 't_xhs_skill' doesn't exist
在 OMS 业务库 执行 migrate_t_xhs.sql 或 install_xhs_module.sql。
5.4 Agent 一直离线
| 可能 | 处理 |
|---|---|
| Token 过期 | 重新复制 JWT 重启 Agent |
--oms-url 错误 |
必须含 /admin,且 Agent 能访问该地址 |
| 非客户账号 Token | 使用客户登录(loginType=1) |
| 防火墙 | 本机 Agent 需出网访问 OMS API |
5.5 前端 dev 正常、生产 404
- Nginx 仅对 页面路径 回退
index.html(见nginx-default.conf第 63–66 行) - API 请求应走
VITE_API_ADMIN_URL(如https://api.nanafa.com/admin),不要打到 oms 静态站点的/xhs/agent/list
5.6 AI 生成 / 分析失败
- 系统 → AI 助手:提供商 已启用、
ApiSecret已填、Model 名称 与厂商一致 - BaseUrl 为 OpenAI 兼容 Chat Completions 地址
- 看后端日志 / Swagger 返回
BusinessException文案
5.7 定时发布未触发
- 确认
XhsScheduledPublishWorker随 API 宿主运行(默认已注册) - 服务器时间正确;记录状态为
scheduled且ScheduledTime <= now
6 关键路径速查
Agent lifecycle : POST /xhs/agent/register | heartbeat | list | control
Task pipeline : POST /xhs/task/claim | report (Agent 侧)
Analysis : POST /xhs/analysis/start | list | detail | run-ai | interact
Creation : POST /xhs/creation/generate | publish
Publish : POST /xhs/publish/list | cancel | retry
Skills : POST /xhs/skill/list | save | delete | run
Human config : POST /xhs/human-config/get | save | pull
AI : POST /xhs/ai/provider/list | save | chat
Media : POST /xhs/media/upload (multipart)
设计细节(表结构、字段、权限码全集)见 小红书模块设计-063001.md。
7 SQL 脚本索引
| 文件 | 库 | 用途 |
|---|---|---|
migrate_t_xhs.sql |
OMS | 8 张业务表 |
install_xhs_module.sql |
OMS | 建表 + 技能 + AI 提供商 |
seed_xhs_skills.sql |
OMS | 5 条系统技能 |
seed_xhs_ai_providers.sql |
OMS | AI 提供商模板 |
seed_xhs_rbac_menu.sql |
RBAC | 菜单(含 AI 助手挂系统管理) |
seed_xhs_role_permissions.sql |
RBAC | Customer / Admin 权限 |
fix_xhs_menu_bad_guids.sql |
RBAC | 修复 menu GUID 脏数据 |
代码种子:SimpleAdmin.Api/Auth/XhsRolePermissionSeedContributor.cs — API 启动时幂等合并 Xhs.* 到 Customer / Admin 角色。