Files

73 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 智能体 agent
Python 3.12 + FastAPI。HTTP 默认 `8910`;Worker 另起进程。
## 基础框架自检
```text
set REDIS_BACKEND=memory
set CHECKPOINT_BACKEND=memory
python -m agent.foundation_selftest
python -m agent.runtime_db.migrate --list
```
PG 真迁移:配好 `PG_*` 后 `python -m agent.runtime_db.migrate`(禁止 `ytd_runtime`)。
消息账本:`MESSAGE_STORE_BACKEND=auto|memory|postgres`(有 DSN 时优先 PG inbox/outbox)。
## Redis 骨架
- 包:`agent/redis_coord/`(连接+前缀、Stream 入队/认领、短幂等、限流、token 缓存)。
- **db1 不是名字**:Redis 只有数字逻辑库(URL `…/1`),与现网 `…/0` 隔离;可读名是键前缀 **`inquiry_robot:`**。
- 自检:`set REDIS_BACKEND=memory` 后 `python -m agent.redis_coord.selftest`。
- 正式:`REDIS_URL=redis://…@host:6379/1` + `REDIS_KEY_PREFIX=inquiry_robot:`(禁止 `ytd:prod:`)。
## LangGraph 骨架
- 包:`agent/graph/`(状态、分文件空节点、interrupt 停点、PG/Memory checkpoint、start/resume/wake)。
- **无询价主逻辑**;节点只打日志。HTTP 回调禁止 `invoke` 整图。
- 自检:`set CHECKPOINT_BACKEND=memory` 后执行 `python -m agent.graph.selftest`。
- 正式:`CHECKPOINT_BACKEND=postgres` + `PG_*` 指向 `inquiry_robot_runtime`(禁止 `ytd_runtime`)。
## 本迭代骨架(路由 / PDF / 识别)
- DeepSeek A:`agent/routing/ordered_actions.py` + `deepseek_a.py`(strict `route_decision` tool;默认 stub,不开费)。
- 分发:`agent/routing/dispatch.py`;通道 inbox → route → handler 表。
- 真网开关:`LLM_DATA_USAGE_CONFIRMED=true` 且 `LLM_ALLOW_NETWORK=true`(Worker)才可能打模型。
- LibreOffice:`agent/jobs/libreoffice.py` + `stream:pdf`(仅 1 槽);路径 `LIBREOFFICE_PATH`。
- 识别 / 存档:`stream:recognition` / `stream:archive` 入队壳。
- 字段合同:仓库 `contracts/*.json`;拉取备份在 `_ref/prod-pull/`(gitignore)。
- 本机密钥:仓库根 `.env`(gitignore);新库口令来自服务器 `E:\wwwroot\ops\inquiry_robot_db_secrets.json`。
- 另:session/suspend/job/死信、LLM 各 mode 空模块、S3 壳、ledger API 签名壳、模板 registry、policy、AIBOT 长连接壳、Java TMS 空包、`deploy/nssm/SERVICES.md`。
链路:回调/注入 → inbox 入队(快回)→ echo handler → outbox → 企微 `message/send`。
### 并存期怎么测(重要)
公网 `https://ai.ytd-scm.com/wecom/callback` **切流前仍进现网**。不要改 Nginx、不要双连 AIBOT。
本机联调(推荐):
1. 配置仓库根 `.env`(从 `.env.example` 复制,填 `WECOM_*`,对齐 `prompt/03`,**勿提交**)。
2. 启动:
```text
cd agent
.\.venv\Scripts\activate
pip install -r requirements.txt
python -m agent.http_app
```
3. 用你的企微 **userid** 注入一条模拟入站(会真发应用到你的企微):
```text
curl -X POST http://127.0.0.1:8910/internal/dev/inject-text -H "Content-Type: application/json" -d "{\"sender_id\":\"你的企微userid\",\"content\":\"你好\"}"
```
4. 手机/桌面企微应收到带 `[test]` 前缀的回复。
若返回企微 `60020 not allow to access from your ip`:当前出口 IP 未进企微应用可信 IP。请在**服务器白名单出口**上跑智能体,或把本机出口 IP 配进企微后台(与现网出口策略一致)。
真要从企微聊天窗口「发消息→新系统回」= **切流**(改 Nginx 反代到 8910 + 停现网对应进程),现网会短暂停收询价,需单独批准。
### 健康检查
`GET http://127.0.0.1:8910/health` 中 `wecom_send_ready` / `wecom_crypto_ready` 应为 true。