feat: export core Hermes skills
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
# 合同接收分流:邱律师批量文件交叉核对
|
||||
|
||||
当邱律师(QiuTing)一次性发送多份合同时,必须先交叉核对分流,再决定是否启动workflow。
|
||||
|
||||
## 分流四类
|
||||
|
||||
| 类别 | 判定方法 | 处理 |
|
||||
|------|---------|------|
|
||||
| ✅ 今日已交付 | xlsx有今天日期的对应条目 | 跳过 |
|
||||
| 🔄 正在审查 | `uwf thread list`显示running | 等完成,不重复启动 |
|
||||
| 📋 历史已审、今日重发 | xlsx有该文件但日期更早 | **报告Doro**:可能是修改稿需重审,也可能是误发 |
|
||||
| ❌ 全新未处理 | xlsx无匹配条目 | 启动workflow |
|
||||
|
||||
## 核对步骤
|
||||
|
||||
### Step 1: 提取今日QiuTing文件清单
|
||||
```bash
|
||||
for f in ~/.hermes/cache/documents/*.meta; do
|
||||
sender=$(python3 -c "import json; d=json.load(open('$f')); print(d.get('sender_id',''))" 2>/dev/null)
|
||||
if [ "$sender" = "QiuTing" ]; then
|
||||
ts=$(python3 -c "import json; d=json.load(open('$f')); print(int(d.get('timestamp',0)))" 2>/dev/null)
|
||||
# 比对今日时间戳范围
|
||||
filename=$(basename "$f" .meta | sed 's/^doc_[a-f0-9]*_//')
|
||||
echo "$filename"
|
||||
fi
|
||||
done
|
||||
```
|
||||
按北京时间筛选当天00:00~24:00范围内的文件。
|
||||
|
||||
### Step 2: 查xlsx台账匹配
|
||||
```bash
|
||||
sudo /home/maggie/.hermes/hermes-agent/venv/bin/python3 << 'PYEOF'
|
||||
import openpyxl
|
||||
xlsx = "/home/maggie/nextcloud/data/data/doro/files/Doro合同审查任务/合同审查清单.xlsx"
|
||||
wb = openpyxl.load_workbook(xlsx, read_only=True, data_only=True)
|
||||
ws = wb.active
|
||||
# 用关键词模糊匹配文件名(去掉前缀/后缀后取核心词)
|
||||
keywords = ["关键词1", "关键词2"] # 从文件名提取
|
||||
for row in ws.iter_rows(min_row=2, values_only=True):
|
||||
row_str = str(row)
|
||||
for kw in keywords:
|
||||
if kw in row_str:
|
||||
print(f"#{row[0]} | {row[1]} | {row[2]} | {row[3]} | {row[4]}")
|
||||
break
|
||||
wb.close()
|
||||
PYEOF
|
||||
```
|
||||
|
||||
**匹配要点**:文件名常有微小差异(空格、下划线、版本号),用核心关键词模糊匹配,不要精确匹配全名。
|
||||
|
||||
### Step 3: 查uwf运行状态
|
||||
```bash
|
||||
/home/maggie/.hermes/node/bin/uwf thread list | grep running
|
||||
```
|
||||
|
||||
### Step 4: 查/tmp/contract-review/和progress目录
|
||||
确认是否有文件正在队列中等待。
|
||||
|
||||
### Step 5: 汇总报告Doro
|
||||
按四类分类呈现,对「历史已审重发」类必须询问Doro:是修改稿需重审还是误发。
|
||||
|
||||
## 合同发送量核查协议(Doro问"发了几份/审了几份"时)
|
||||
|
||||
⚠️ **Doro问邱律师发了几份合同时,必须多源交叉核对,不能只查一个来源。** 2026-06-29/30教训:Doro问了三遍"邱律师发了几份",每次agent都漏东西。根因:只查了gateway.log的inbound消息,漏了document cache的meta文件(文件消息不产生inbound text log)。
|
||||
|
||||
### 必查5个源(缺一不可)
|
||||
|
||||
| # | 数据源 | 命令 | 提取信息 |
|
||||
|---|--------|------|----------|
|
||||
| 1 | gateway.log inbound消息 | `grep "2026-MM-DD" gateway.log \| grep "QiuTing" \| grep "inbound"` | 文字消息+指令(合同审查等) |
|
||||
| 2 | document cache meta文件 | `for f in ~/.hermes/cache/documents/*.meta; do` 读sender_id+timestamp | 实际收到的文件(⚠️文件消息在gateway.log中msg为空) |
|
||||
| 3 | 待审查目录 | `sudo find .../待审查/ -type f` | 已上传但未审完的合同 |
|
||||
| 4 | 任务交付目录 | `sudo find .../任务交付/ -type f -name "【修】*"` | 已审查交付的合同 |
|
||||
| 5 | xlsx台账 | `sudo python3 -c "openpyxl..."` | 已pass登记的合同 |
|
||||
|
||||
### meta文件时间戳转换
|
||||
```python
|
||||
from datetime import datetime, timezone, timedelta
|
||||
bj = timezone(timedelta(hours=8))
|
||||
# meta的timestamp是Unix秒,转北京时间
|
||||
dt = datetime.fromtimestamp(ts, tz=bj)
|
||||
print(f'{dt.strftime("%m-%d %H:%M")} Beijing - {filename}')
|
||||
```
|
||||
|
||||
### 汇总格式(给Doro的报告)
|
||||
按时间顺序列出每份合同:
|
||||
- 文件名 | 发送时间(北京时间) | 审查状态(已审/待审/未审) | 交付文件(有/无)
|
||||
- 去重:同文件名的重发标记"重发,与XX:XX相同"
|
||||
- 最终统计:N份独立合同,X份已审,Y份未审
|
||||
|
||||
### 关键陷阱
|
||||
1. **gateway.log里文件消息的msg字段为空** — QiuTing发送文件时,gateway记录`msg=''`,看不到文件名。必须查meta文件才能知道发了什么文件
|
||||
2. **服务器时区是UTC,meta时间戳是Unix秒** — 必须转UTC+8才是北京时间,不能直接显示
|
||||
3. **待审查目录可能有未清理的旧文件** — 不能只看待审查目录判断今天收了几份,要按meta时间戳筛选
|
||||
|
||||
## 关键陷阱
|
||||
|
||||
1. **重发≠重审**:邱律师有时重新发送已审查过的文件(今天5/12份是这种情况),不代表需要重新审查。必须报告Doro确认。
|
||||
2. **auto_notify可能漏文件**:`auto_notify_new_file.sh` 监控inotify有时不触发(进程挂掉、文件到达太快等),不能假设自动化已处理所有新文件。手动核对是必要的。
|
||||
3. **xlsx需要sudo+venv Python**:文件权限属于www-data,必须用 `sudo /home/maggie/.hermes/hermes-agent/venv/bin/python3` 读取。
|
||||
4. **同名不同版**:文件名相同但日期不同的可能是新版本(如 `购销合同 朱家角` 在6/27和6/29各有一份),需比较内容确认是否修改稿。
|
||||
Reference in New Issue
Block a user