/install ai-huiji
\r \r
AI慧记\r
\r 当前版本: v2.6.0\r \r
AI慧记 提供四类核心能力:\r
- 📋 查询列表 — 从「我的慧记」或「视频会议号」两个维度查询会议记录\r
- 📄 获取原文 — 拿到转写原文作为分析素材(支持全量 / 增量 / 改写三种模式)\r
- 🔗 分享解析 — 支持一键接收分享的慧记链接并内容解读(短链 / 长链)\r
- 🧠 AI 分析 — 基于原文进行总结、待办提取、专题分析\r \r ---\r \r
能力概览\r
\r | # | 接口 | 路径 | 说明 |\r |---|---|---|---|\r | 1 | chatListByPage | /ai-huiji/meetingChat/chatListByPage | 分页查询我的慧记列表(归属维度) |\r | 2 | listHuiJiIdsByMeetingNumberV2 | /ai-huiji/meetingChat/listHuiJiIdsByMeetingNumberV2 | 按视频会议号查询慧记列表(会议维度) |\r | 3 | splitRecordList | /ai-huiji/meetingChat/splitRecordList | 全量查询分片转写原文 |\r | 4 | splitRecordListV2 | /ai-huiji/meetingChat/splitRecordListV2 | 增量查询分片转写原文 |\r | 5 | checkSecondSttV2 | /ai-huiji/meetingChat/checkSecondSttV2 | 已结束会议的改写原文(更高质量,可能有发言人) |\r | 6 | getChatFromShareId | /ai-huiji/meetingChat/getChatFromShareId | 通过分享链接的 shareId 获取原文 |\r \r ---\r \r
强制前置(保持不变)\r
\r
调用任何脚本前,必须先通过依赖 Skill cms-auth-skills 获取有效 AppKey。 \r
未鉴权时,不允许执行本 Skill 的任何 Python 脚本。\r
本 Skill 发起的所有 CWork API 请求均基于该 AppKey 鉴权。\r
\r
AppKey 的获取与传递方式必须为:由上游 cms-auth-skills 注入/传递到本 Skill 执行命令中(--app-key)。\r
\r
\r
---\r
\r
意图路由表\r
\r
📋 列表查询\r
\r
| 用户说 | 路由 | 说明 |\r
|---|---|---|\r
| "我的慧记" / "我的会议纪要" / "最近有什么会议" | chatListByPage | 归属维度,无需会议号 |\r
| "会议号 xxx" / "这场会议的纪要"(提供了会议号时) | listHuiJiIdsByMeetingNumberV2 | 会议维度,需要会议号 |\r
| "帮我找 xxx 的会议" / "搜索 xxx" | chatListByPage + nameBlur | 搜索模式 |\r
| "进行中的会议" / "正在开的会" | chatListByPage --state 0 | 进行中,一条命令搞定 |\r
| "历史会议" / "已结束的会议" | chatListByPage --state 2 | 历史,一条命令搞定 |\r
\r
📄 原文获取\r
\r | 用户说 | 路由 | 说明 |\r |---|---|---|\r | "这个会议的原文" / "会议内容" / "转写" | get-transcript.py | 统一入口,自动处理全量/增量/改写 |\r | "最新的" / "刚才说的" / "最近几分钟的" | get-transcript.py | 自动增量拉取最新内容 |\r \r
🔗 分享链接解析\r
\r | 用户说 | 路由 | 说明 |\r |---|---|---|\r | "帮我看下这个分享链接" / "这个慧记分享里的内容" | get-chat-from-share-id.py | 脚本自动解析 shareId 并获取原文 |\r | "http://s.medihub.cn/p/xxx" | get-chat-from-share-id.py | 短链自动解析 307 Location,提取 shareId |\r | "https://任意域名/#/shareLinkPage?shareId=xxx" | get-chat-from-share-id.py | 长链(域名可变),脚本自动提取 shareId |\r | "https://任意域名/#/meetingChatNew?shareId=xxx" | get-chat-from-share-id.py | 新版长链(域名可变),脚本自动提取 shareId |\r | "https://任意域名/#/meetingChatNew?shareId=xxx&userName=张三&personId=123" | get-chat-from-share-id.py | 带扩展参数也可解析,只使用 shareId |\r \r
🧠 AI 分析\r
\r | 用户说 | 能力 | 说明 |\r |---|---|---|\r | "总结一下" / "会议纪要" / "概要" / "说了什么" | 📝 会议总结 | 基于原文生成结构化纪要 |\r | "有什么待办" / "谁负责什么" / "跟进事项" | ✅ 待办提取 | 从原文中提取待办 |\r | "关于 xxx 讨论了什么" / "财务那块" | 🔍 专题分析 | 按主题提取相关内容 |\r \r ---\r \r
列表查询详解\r
\r
两个维度的区别\r
\r | 维度 | 接口 | 口径 | 适用场景 |\r |---|---|---|---|\r | 归属维度 | chatListByPage | 查「我的」慧记(归属在当前用户名下的记录) | 浏览自己的纪要、搜索、筛选 |\r | 会议维度 | listHuiJiIdsByMeetingNumberV2 | 按「我参加的视频会议」查(即使他人录制也可查到) | 已知会议号、查找特定会议的纪要 |\r \r
路由规则(⚠️ 必须严格遵守)\r
\r
用户提供了会议号?\r
├─ 是 → listHuiJiIdsByMeetingNumberV2(按会议号精确查)\r
└─ 否 → chatListByPage(走归属维度查询)\r
```\r
\r
**⚠️ 常见错误:用户说"我的进行中会议"但 AI 跳过 chatListByPage 直接用了 listHuiJiIdsByMeetingNumberV2 + 上下文中记的会议号。这是错误的。没有明确会议号时必须走 chatListByPage。**\r
\r
**⚠️ `lastTs` 默认值**:调用 listHuiJiIdsByMeetingNumberV2 时**必须传 `lastTs`**,默认限制为**最近 10 天**(`当前时间 - 10天` 的毫秒时间戳),避免返回过多无关记录。除非用户明确要求查更早的记录,否则一律带上此参数。\r
\r
### 按状态查询(⚠️ 一步到位)\r
\r
脚本已内置 `--state` 参数,**一次 API 调用 + 客户端过滤**,不要分多次查询:\r
\r
```bash\r
# 进行中的会议(一条命令,无需二次查询)\r
python3 chat-list-by-page.py --human --state 0 0 10\r
\r
# 已完成的会议\r
python3 chat-list-by-page.py --human --state 2 0 10\r
```\r
\r
> 接口默认按 `updateTime` 倒序,进行中的会议必然排在最前面,`pageSize: 10` 绰绰有余。不需要额外加时间范围或多次查询。\r
\r
### 无结果引导(⚠️ 必须执行)\r
\r
当用户查询列表(chatListByPage)未找到任何结果时,AI 应主动引导:\r
\r
- **chatListByPage 查无进行中会议**:提醒用户"归属维度没有找到你名下的进行中会议。如果你正在参加别人发起/录制的会议,请提供会议号,我按会议号帮你查。"\r
- **chatListByPage 查无任何会议**:提醒用户"归属维度没有找到记录。如果你参加的是他人录制的会议,请提供会议号试试。"\r
\r
> **原因**:chatListByPage 只查归属在当前用户名下的记录,不包含用户仅"参加"但非"发起/录制"的会议。listHuiJiIdsByMeetingNumberV2 覆盖范围更广(按会议号查所有参与过的记录),但需要用户主动提供会议号。\r
\r
### 会议状态判断\r
\r
- **chatListByPage 返回** `combineState`: `0` = 进行中, `1` = 处理中, `2` = 已完成, `3` = 失败\r
- **listHuiJiIdsByMeetingNumberV2 返回** `recordState` 直接判断:\r
\r
| `recordState` | 判断结果 | 说明 |\r
|---|---|---|\r
| `0` | 进行中 | 实时录制中 |\r
| `1` |已完成 | 可获取改写原文 |\r
\r
> 注意:`recordState` 与 chatListByPage 返回的 `combineState` 含义不同,不可混用。\r
\r
---\r
\r
## 原文获取策略\r
\r
这是本 Skill 的核心逻辑。AI 在需要获取会议原文时,**只需调用一个脚本**:\r
\r
```bash\r
python3 scripts/huiji/get-transcript.py \x3CmeetingChatId> [--name "会议名称"]\r
```\r
\r
脚本自动处理全量/增量切换、缓存读写、二次改写,AI **不需要**直接调用 `splitRecordList` / `splitRecordListV2` / `checkSecondSttV2` 接口。\r
\r
## 分享链接解析策略\r
\r
当用户消息中出现 AI 慧记分享链接时,AI 统一调用分享脚本,由脚本自动解析 shareId:\r
\r
```bash\r
# 直接传 shareId\r
python3 scripts/huiji/get-chat-from-share-id.py 11be5542-c940-42e4-8528-be71d94f5b53\r
\r
# 或直接传短链 URL / 短码(脚本自动解析)\r
python3 scripts/huiji/get-chat-from-share-id.py http://s.medihub.cn/p/128eeeOS\r
python3 scripts/huiji/get-chat-from-share-id.py 128eeeOS\r
```\r
\r
### 支持的链接(域名可变)\r
\r
- 短链:`http://s.medihub.cn/p/xxxxx`\r
- 长链:`https://\x3C任意域名>/#/shareLinkPage?shareId=...`\r
- 新版长链:`https://\x3C任意域名>/#/meetingChatNew?shareId=...`\r
- 带扩展参数:`https://\x3C任意域名>/#/meetingChatNew?shareId=...&userName=...&personId=...`\r
\r
### 处理流程\r
\r
```\r
用户发送分享链接/短码/shareId\r
│\r
├─ 统一调用 get-chat-from-share-id.py(脚本内部自动解析 shareId)\r
├─ 解析规则:优先直接 shareId,其次 URL query/hash,最后短链 307 Location\r
└─ 取 srcText 进行总结/待办/专题分析并直接输出结论\r
```\r
\r
### 失败处理\r
\r
- 不能提取 `shareId`:提醒用户重新粘贴完整链接\r
- 业务错误(`resultCode != 1`):停止重试并直接反馈原因\r
- 无 `srcText`:提示暂无可用原文\r
- 成功拿到 `srcText` 后必须继续执行分析并回复结果,不得只回传中间数据\r
\r
### 分享场景输出模板(必须遵守)\r
\r
拿到分享数据后,向用户输出时应先给出基础信息头,再给分析结果:\r
\r
- 标题:使用会议标题(如 `name`)\r
- 分享人:使用分享人姓名(如 `srcUser.name`)\r
- 纪要时间:使用 `createTime`(转换为可读时间)\r
- 时长:使用 `meetingLength`(转换为分钟/小时)\r
\r
> 说明:括号内字段仅用于取值,不可原样向用户展示;对外输出必须使用自然语言标签(如"分享人""纪要时间""会议时长")。\r
\r
然后再输出:总结 / 待办 / 专题分析等内容。\r
\r
**禁止项**:\r
- 不展示 `updateTime`\r
- 不展示原始 JSON、API 字段名、技术过程描述\r
\r
### 统一脚本工作流程\r
\r
```\r
用户请求会议原文\r
│\r
├─ _final 缓存存在? → 直接返回(二次改写,最优质量)✅\r
│\r
├─ _live 缓存标记 completed? → 尝试拉 checkSecondSttV2\r
│ ├─ state=2 成功 → 写入 _final 缓存 → 返回\r
│ └─ state=1/3 未就绪 → 返回 _live 缓存\r
│\r
├─ _live 缓存存在? → splitRecordListV2 增量拉取 → 合并到 _live\r
│\r
└─ 无缓存 → splitRecordList 全量拉取 → 写入 _live 缓存\r
```\r
\r
### 双缓存机制\r
\r
| 缓存文件 | 来源 | 质量 | 说明 |\r
|---|---|---|---|\r
| `{id}_live.json` | splitRecordList + splitRecordListV2 | 实时转写 | 进行中会议的增量数据 |\r
| `{id}_final.json` | checkSecondSttV2 | 二次改写 | 已结束会议的最优数据(可能有发言人) |\r
\r
**质量优先级**:`_final`(改写) > `_live`(实时) > 全量拉取\r
\r
### 输出 JSON 结构\r
\r
```json\r
{\r
"source": "full | incremental | cache_live | cache_final | second_stt",\r
"meetingChatId": "xxx",\r
"name": "会议名称",\r
"status": "ongoing | completed",\r
"lastSyncAt": 1716349200000,\r
"lastStartTime": 120034,\r
"fullText": "拼接好的全文...",\r
"fragments": [...]\r
}\r
```\r
\r
`source` 字段说明当前数据来源,AI 可据此判断数据新鲜度,但**不需要向用户暴露此信息**。\r
\r
### ⚠️ 防丢失保障\r
\r
- **原子写入**:先写临时文件再 rename,防止写入崩溃损坏缓存\r
- **自动备份**:每次写入前备份旧缓存为 `.bak`\r
- **增量校验**:合并后分片数不能比旧缓存少,否则保留旧数据并输出 warning\r
- **去重策略**:同 startTime 保留 text 更长的版本,防止截断覆盖\r
\r
---\r
\r
## AI 分析能力\r
\r
拿到原文后,AI 根据用户意图提供以下分析。所有分析基于原文内容,不依赖平台预生成的报告或待办。\r
\r
### 📝 会议总结\r
\r
**触发**:"总结一下"、"会议纪要"、"概要"、"说了什么"\r
\r
**输出结构**:\r
- **会议主题**:一句话概括\r
- **讨论要点**:按议题分段,每段包含核心观点和关键信息。有发言人信息时标注谁说了什么\r
- **决策/结论**:达成的共识和决定\r
- **遗留问题**:未解决的事项\r
\r
**注意事项**:\r
- 进行中会议必须明确告知"这是截至目前的内容,会议仍在进行中"\r
- 已结束会议优先使用 checkSecondSttV2 改写原文(有发言人区分);进行中会议不可使用此接口\r
- 原文较长时,分段总结后合并,避免遗漏\r
\r
**⚠️ 严格约束:防幻觉与术语准确性**\r
\r
原文由语音转文字生成,AI 在总结/待办提取/专题分析时必须遵守以下原则:\r
\r
1. **禁止虚构以下任何信息**:\r
- ❌ 时间信息:会议时间、截止时间、时间节点等\r
- ❌ 人物信息:参会人员、负责人、相关人员等\r
- ❌ 具体数据:数字、数量、百分比等\r
- ❌ 决策结论:会议决策、结论、判断等\r
- 只能总结和提炼会议内容中明确提到的信息\r
- 所有引用的信息必须能在原始会议内容中找到对应依据\r
\r
2. **专业术语智能纠错**:\r
- 药品名称、疾病名称、医学术语、公司名称等专业领域术语,结合上下文判断是否为语音识别错误(同音字、近音字)\r
- 同一术语在报告中统一使用正确标准表述\r
- ⚠️ 仅纠正有把握确认的明显错误,无法确定时保持原文,不要臆测\r
\r
3. **归纳需诚实标注**:\r
- AI 归纳的框架名称、分类体系、流程总结等,需标注"AI 根据会议内容归纳"或类似说明\r
- 区分"原文原话"和"AI 的归纳提炼"\r
- 零散发言拼凑的时间线/决策链,需如实说明"根据多次讨论综合"\r
\r
### ✅ 待办提取\r
\r
**触发**:"有什么待办"、"谁负责什么"、"跟进事项"\r
\r
**输出格式**:\r
- 每条待办:`[待办内容] → [责任人] → [截止时间/优先级]`\r
- 无法从原文确认的部分标注 ⚠️ 待确认\r
- 区分「明确分配的待办」和「讨论中未定的事项」\r
- 按优先级或提及顺序排列\r
- ⚠️ 待办的责任人、截止时间必须严格来自原文,不可推测或默认\r
\r
### 🔍 专题分析\r
\r
**触发**:"关于 xxx 讨论了什么"、"财务那块说了什么"\r
\r
**输出**:\r
- 相关讨论内容的摘要\r
- 涉及的发言人(如有)\r
- 对应的大致时间位置(如"会议中段"、"后半段")\r
- 关联的决策或待办(如有)\r
\r
---\r
\r
## 本地缓存机制\r
\r
### 缓存目录(相对 Skill 根目录)\r
\r
```\r
.cache/huiji/\r
```\r
\r
### 双缓存文件\r
\r
| 文件 | 命名 | 说明 |\r
|---|---|---|\r
| 实时缓存 | `{meetingChatId}_live.json` | 进行中会议(splitRecordList + splitRecordListV2) |\r
| 改写缓存 | `{meetingChatId}_final.json` | 已结束会议(checkSecondSttV2,最优质量) |\r
\r
两份数据格式相同:\r
\r
```json\r
{\r
"meetingChatId": "xxx",\r
"name": "产品周会",\r
"status": "ongoing | completed",\r
"source": "full | incremental | second_stt | cache_live | cache_final",\r
"lastSyncAt": 1716349200000,\r
"lastStartTime": 120034,\r
"fullText": "拼接好的全文...",\r
"fragments": [\r
{ "startTime": 0, "text": "第一段内容...", "realTime": 1716345600000 },\r
{ "startTime": 120034, "text": "第二段内容...", "realTime": 1716345720000 }\r
]\r
}\r
```\r
\r
### 字段说明\r
\r
| 字段 | 说明 |\r
|---|---|\r
| `meetingChatId` | 会议 ID |\r
| `name` | 会议名称(来自列表或 `--name` 参数) |\r
| `status` | `ongoing`(进行中)/ `completed`(已结束) |\r
| `source` | 数据来源标识 |\r
| `lastSyncAt` | 上次同步的 Unix 毫秒时间戳 |\r
| `lastStartTime` | splitRecordListV2 增量查询的游标(分片的 startTime 值) |\r
| `fullText` | 按 startTime 排序拼接的完整转写文本 |\r
| `fragments` | 全部分片明细(startTime / text / realTime) |\r
\r
### 缓存策略\r
\r
- 用户每次请求会议原文时,`get-transcript.py` 自动管理缓存\r
- **进行中会议**:增量更新(splitRecordListV2 + `lastStartTime`),合并到 `_live`\r
- **已结束会议**:`_live` 标记 completed 后自动尝试拉改写,成功写入 `_final`\r
- 缓存无自动过期,由 AI 在必要时清理或用户主动清理\r
- ⚠️ AI **不需要**直接操作缓存文件,统一通过 `get-transcript.py` 管理\r
- **自动清理**:每次运行时自动清理超过 15 天的过期缓存(已结束会议 + 共享资料)\r
\r
---\r
\r
## 共享资料机制\r
\r
多用户可以针对同一场会议共享分析资料,供其他人查看和讨论。\r
\r
### 共享目录结构(相对 Skill 根目录)\r
\r
```\r
.cache/huiji/shared/\r
└── {meetingNumber}/ # 按会议号隔离\r
└── {yyyyMMdd}/ # 按天隔离\r
├── 184500_王晓辉_发言总结.md\r
├── 185200_成伟_AI训练方案.md\r
└── ...\r
```\r
\r
### 共享文件格式\r
\r
```markdown\r
---\r
meetingNumber: 103760\r
meetingChatId: huijiXgMt_69c8cc89a61e5c000a9f8b72\r
author: 王晓辉\r
created: 2026-03-29 18:45:00\r
---\r
\r
## 正文内容...\r
```\r
\r
### 使用规则\r
\r
1. **用户明确说"共享"时才写入**,不自动共享\r
2. **写入前必须确认**:告知用户即将共享的内容摘要和文件名\r
3. **文件名规范**:`{HHmmss}_{人名}_{原始标题}.md`,标题必须用原始标题,不额外处理\r
4. **查询时自动发现**:AI 在查询某场会议时,应检查 `shared/{meetingNumber}/` 目录,如有共享资料需主动提示用户\r
5. **读取共享**:用户说"看看有什么共享资料"或"分析下XX的那个总结"时,从对应目录读取\r
6. **时效性**:共享资料超过 15 天自动清理(与缓存同步清理)\r
\r
### 典型场景\r
\r
| 用户说 | AI 行为 |\r
|---|---|\r
| "把这个分析共享给其他人" | 写入 shared/{meetingNumber}/{yyyyMMdd}/ |\r
| "103760有什么共享资料" | 列出 shared/103760/ 下的所有文件 |\r
| "分析下王晓辉刚才的那个总结" | 从 shared/{meetingNumber}/ 下找到对应文件并读取分析 |\r
\r
---\r
\r
## _id 字段处理(重要)\r
\r
chatListByPage 返回的 `_id` 可能有 `__数字` 后缀(如 `abc123__45678`),不能直接用作 `meetingChatId`:\r
\r
- **处理方式一**:截取双下划线前的部分 → `abc123`\r
- **处理方式二**:使用 `originChatId` 字段的值\r
\r
脚本和 AI 在将 chatListByPage 列表项传给 splitRecordList / checkSecondSttV2 / splitRecordListV2 时,必须做此处理。\r
\r
---\r
\r
## 时间戳处理规范(⚠️ 必须严格遵守)\r
\r
所有接口返回的时间字段均为 **13 位毫秒级 Unix 时间戳**(如 `1774763950431`)。\r
\r
### 转换规则\r
\r
```\r
毫秒时间戳 → 秒:除以 1000(1774763950431 / 1000 = 1774763950.431)\r
秒 → 本地时间:UTC+8(Asia/Shanghai)\r
```\r
\r
### 展示规则\r
\r
**向用户展示时,必须将时间戳转换为人类可读格式**,禁止直接展示原始数字。\r
\r
- **日期时间**:`2026-03-29 13:59:10`\r
- **仅日期**:`2026-03-29`\r
- **仅时间**:`13:59`\r
- **时长**:毫秒转分钟 → `7624789 ms ≈ 127 分钟 ≈ 2小时7分钟`\r
\r
### 转换示例\r
\r
| 原始值(毫秒时间戳) | 转换结果 |\r
|---|---|\r
| `1774763950431` | `2026-03-29 13:59:10` |\r
| `1774704179623` | `2026-03-28 22:42:59` |\r
| `7624789`(meetingLength,毫秒) | `2小时7分钟` |\r
\r
### 分片时间戳\r
\r
- `realTime`:现实时间戳(毫秒),转换为绝对时间展示\r
- `startTime`(splitRecordList/splitRecordListV2):录音内偏移量(毫秒),转换为 `00:12:34` 格式的录音内时间点\r
\r
---\r
\r
## 多环境部署\r
\r
本 Skill 可部署在任意 OpenClaw / EasyClaw 环境中。脚本调用使用相对于 SKILL.md 的路径:\r
\r
```\r
scripts/huiji/\x3C脚本名>.py\r
```\r
\r
OpenClaw 在加载 Skill 时会将完整路径注入上下文,AI 直接拼接使用即可,无需硬编码绝对路径。\r
\r
---\r
\r
## 约束\r
\r
### 执行硬约束(最高优先级)\r
\r
1. **仅用现有脚本**:只允许调用 `scripts/huiji/` 下已存在脚本完成查询、取数与原文获取。\r
2. **禁止临时脚本**:禁止创建任何临时调用脚本(如 `temp_*.py`)、一次性中转脚本或额外落盘编排脚本。\r
3. **失败处理边界**:现有脚本失败时,仅允许重试或切换到其它已存在脚本;若能力缺口确实存在,必须先向用户说明并确认后再改代码。\r
\r
### 统一规范\r
\r
1. **鉴权**:所有接口只需 `appKey`(`XG_BIZ_API_KEY`),无需 access-token\r
2. **生产域名**:`sg-al-ai-voice-assistant.mediportal.com.cn/api/open-api`\r
3. **重试策略**:脚本内置最多重试 3 次,间隔 1 秒\r
4. **依赖声明**:鉴权依赖 `cms-auth-skills`\r
\r
### 脚本使用规则\r
\r
1. **统一入口**:获取会议原文时**必须使用 `get-transcript.py`**,禁止直接调用 `splitRecordList` / `splitRecordListV2` / `checkSecondSttV2` 脚本\r
2. **分页默认值**:chatListByPage 的 `pageNum` 从 0 开始;未经用户明确指定时,默认传 `pageNum=0`、`pageSize=10`,查询最新一页记录,禁止自行推断或沿用上下文中的历史页码\r
3. **增量优先**:有缓存时优先用 splitRecordListV2 增量拉取,减少重复传输\r
4. **checkSecondSttV2 容错**:已结束会议必须 fallback 到 splitRecordList,刚结束时 checkSecondSttV2 可能无内容\r
5. **_id 后缀处理**:chatListByPage 返回的 `_id` 可能有 `__数字` 后缀,用作 `meetingChatId` 时需截取或用 `originChatId`\r
\r
### 路由与加载规则\r
\r
1. **路由严格遵守**:用户未提供会议号时必须走 chatListByPage(归属维度),禁止从上下文记忆中自动取会议号跳过路由\r
2. **无结果引导**:chatListByPage 查无结果时,必须主动提醒用户可提供会议号走 listHuiJiIdsByMeetingNumberV2 查询(因为 chatListByPage 不含他人录制/发起的会议)\r
3. **进行中会议时间过滤**:查询进行中会议时,API 可能返回历史异常数据(录音未正常结束导致状态卡在"进行中")。AI 必须过滤掉创建时间超过 **2 天**的"进行中"记录,只保留今天和昨天的。向用户展示前静默过滤,无需解释\r
4. **分享链接识别**:域名不做强绑定。只要消息中出现可解析 URL,且命中任一条件即识别为 AI 慧记分享链接:\r
- URL 中包含 `shareId=` 参数;\r
- hash 路由包含 `#/shareLinkPage` 或 `#/meetingChatNew`;\r
- 或短链形态 `s.medihub.cn/p/`(由脚本内解析 307 Location 并提取 shareId)。\r
- URL 中的其它参数(如 `userName`、`personId`、渠道参数等)一律忽略,不参与路由判断。\r
5. **分享原文入口**:分享链接原文获取统一使用 `get-chat-from-share-id.py`。允许直接传 `shareId`、短链 URL 或短码;优先让脚本内部自动解析,避免在外部额外引入 `web_fetch` 前置步骤\r
\r
### 宪章\r
\r
1. **AI 分析基于原文**:所有分析由 AI 基于转写原文完成,不依赖平台预生成的报告或待办\r
2. **时间戳必须转换**:所有时间戳字段(createTime、startTime、realTime、meetingLength 等)向用户展示时必须转换为可读格式,禁止直接展示原始数字。详见上方「时间戳处理规范」\r
3. **防幻觉与术语准确性**:总结/待办/专题分析时,禁止虚构时间、人物、数据、决策;专业术语结合上下文智能纠错但不确定时保持原文;AI 归纳需诚实标注来源。详见上方「严格约束:防幻觉与术语准确性」\r
4. **API 校验错误不重试**:接口返回 `resultCode` 不为 `1` 的业务错误时,AI 必须**停止执行**,直接向用户展示错误原因,不得反复修改参数重试同一条接口\r
5. **隐藏技术细节**:向用户输出时禁止展示内部技术过程,包括但不限于:\r
- 原文获取策略的选择过程(如"先尝试 checkSecondSttV2"、"fallback 到 splitRecordList"等)\r
- 接口调用细节(如"调了 chatListByPage 接口"、"返回 resultCode: 1"等)\r
- 脚本名称、缓存机制、增量拉取等实现细节\r
- **所有 API 字段名**(后端返回的任何 JSON key),必须全部翻译为人类语言后呈现\r
- 原始 JSON 数据结构\r
- **原则**:用户只需要看到结果(会议内容/总结/待办),不需要知道你怎么拿到的\r
6. **输出约束(分享场景)**:拿到分享原文后,AI 必须先输出基础信息头(标题、分享人、纪要时间、会议时长),再输出总结/待办/专题分析结果;禁止直接向用户展示原始 JSON 结构、API 字段名或仅回传 `srcText`\r
\r
\r
---\r
\r
## 能力树\r
\r
```\r
ai-huiji/\r
├── SKILL.md\r
├── .cache/\r
│ └── huiji/ # 会议原文缓存(按 meetingChatId 存储)\r
│ └── shared/ # 共享资料(按 meetingNumber/yyyyMMdd 存储)\r
├── openapi/\r
│ └── huiji/\r
│ ├── api-index.md # 接口索引\r
│ ├── chat-list-by-page.md # chatListByPage 查询我的慧记列表\r
│ ├── list-by-meeting-number.md # listHuiJiIdsByMeetingNumberV2 按会议号查询慧记列表\r
│ ├── split-record-list.md # splitRecordList 全量分片转写\r
│ ├── split-record-list-v2.md # splitRecordListV2 增量分片转写\r
│ ├── check-second-stt-v2.md # checkSecondSttV2 改写原文状态\r
│ └── get-chat-from-share-id.md # 通过 shareId 获取分享原文\r
├── examples/\r
│ └── huiji/\r
│ └── README.md # 面向外部部署者的 Quick Start 手册(触发示例 + 脚本用法)\r
└── scripts/\r
└── huiji/\r
├── README.md # 脚本清单 + 使用示例\r
├── get-transcript.py # 🌟 统一入口(自动处理全量/增量/改写/缓存)\r
├── chat-list-by-page.py # chatListByPage 分页查询\r
├── list-by-meeting-number.py # listHuiJiIdsByMeetingNumberV2 按会议号查询\r
├── split-record-list.py # splitRecordList 全量分片转写(内部使用)\r
├── split-record-list-v2.py # splitRecordListV2 增量分片转写(内部使用)\r
├── check-second-stt-v2.py # checkSecondSttV2 改写原文状态(内部使用)\r
└── get-chat-from-share-id.py # 按 shareId 获取分享原文\r
```\r
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install ai-huiji - After installation, invoke the skill by name or use
/ai-huiji - Provide required inputs per the skill's parameter spec and get structured output
What is AI慧记?
AI慧记能力:查询个人会议(进行中/历史)基于会议号查询参与会议的相关纪要、支持一键接收分享的慧记链接并内容解读、基于原文进行AI分析(总结/待办提取/专题分析)。本 Skill 通过依赖 `cms-auth-skills` 获取 `AppKey` 并完成鉴权后,才允许进入脚本调用链路。 It is an AI Agent Skill for Claude Code / OpenClaw, with 151 downloads so far.
How do I install AI慧记?
Run "/install ai-huiji" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is AI慧记 free?
Yes, AI慧记 is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does AI慧记 support?
AI慧记 is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created AI慧记?
It is built and maintained by spzwin (@spzwin); the current version is v2.6.0.