8.7 KiB
现状总览:语言、技术、框架、数据库、部署、域名
产品是什么
货代询价智能体:销售在企业微信私聊/群聊发文字、图片、Excel/PDF;系统抽字段、补问、建工单、查 TMS 报价、需要时建协同群、生成 Excel/PDF 报价、成交闭环。管理后台查看工单、报价、人员、模板、异常。
当前不是单体,而是多进程组合。
开发语言
| 语言 | 版本(建议/源码) | 用在哪 |
|---|---|---|
| Python | 3.12 | 智能体、企微 Worker、LangGraph、LLM/识别/报价/存档 |
| Java | 1.8(JDK 8) | JeecgBoot 工单/TMS 主账 |
| TypeScript / JavaScript | Node 18 或 20 | Vue3 管理后台;企微 AIBOT 长连接是 Node .cjs |
| PowerShell | 7(本机开发建议) | 环境导入、累计部署、远程运维 |
| SQL | MySQL / PostgreSQL 方言 | Java 业务库、Python 运行账迁移 |
主要框架与库
Python(现网)
- FastAPI 0.137 + Uvicorn:HTTP 入口
- LangGraph 1.2.5 +
langgraph-checkpoint-postgres:业务流程编排与 checkpoint(何时用、怎么用见14) - httpx:出站 HTTP
- psycopg / psycopg2:PostgreSQL
- redis:队列、限流、token 缓存;现网还有 Worker 全局单例锁(新系统不要)。何时用见
14 - openpyxl / PyMuPDF / pypdf:Excel、PDF
- cryptography / python-dotenv
- PyMySQL:仅 metrics 等旁路读 MySQL(正式写走 Java)
Java(现网主账)
- JeecgBoot 3.5.3
- Spring Boot 2.7.10
- Spring Cloud / Alibaba 组件在仓库里有,生产活动形态是单体
jeecg-system-start,不是必开微服务 - MyBatis-Plus 3.5.1、Druid、Shiro、JWT
- MinIO Java SDK、Hutool、Fastjson、Knife4j
- 询价业务在 Jeecg 的 inquiry 模块
前端(现网管理后台)
- JeecgBoot Vue3 3.5.3
- Vue 3.2、Vite 3、Ant Design Vue 3、Pinia、TypeScript
- pnpm 7.33.x(锁文件
pnpm-lock v5.4,不要用 pnpm 11 重新生成锁文件) - Axios、ECharts 等 Jeecg 全家桶
其它运行时
- Node.js:AIBOT 长连接脚本(只做传输)
- Nginx 1.18.0:
C:\nginx-1.18.0,反代前端与 Java - LibreOffice:报价 Excel → PDF(默认
C:\Program Files\LibreOffice\program\soffice.exe)
数据库与存储
| 组件 | 角色 | 谁写 |
|---|---|---|
| MySQL | 正式业务主账:工单六态、运输段、源报价/客户报价/版本、费用、附件元数据、人员角色、时间线、Jeecg 系统表。库名源码默认 jeecg-boot |
仅 Java |
| PostgreSQL | 运行账:企微 inbox/outbox、Graph checkpoint、conversation session、suspend、clarification/卡片绑定、LLM/识别/报价任务 | 仅 Python |
| Redis | 缓存、LLM 队列、限流。不能当业务真相 | Python + Java |
| MinIO / S3 兼容 | 报价文件、附件对象;元数据仍在 Java/任务账 | Python object_storage + Jeecg 上传配置 |
| 本地磁盘 | 企微 spool、release 目录、Nginx 静态、上传目录 | 运维/进程 |
现网 Redis 另有两样,新系统都不要:wecom:worker:singleton(全机只准一个 Worker 的锁);按销售 UserID 伪造 TMS 无价/异常。并发靠「一条任务认领 + 超时回收」和「服务只起一份」。
新系统库名(同机 10.206.0.14,空库待建,口令新开)
| 现网(禁止新系统连接) | 新系统 | |
|---|---|---|
| MySQL 主账 | jeecg-boot / 用户 ytd_jeecg |
库 inquiry_robot / 用户 inquiry_robot |
| PostgreSQL 运行账 | ytd_runtime / 用户 ytd_runtime |
库 inquiry_robot_runtime / 用户 inquiry_robot_runtime |
| Redis | db0 前缀 ytd:prod:node01-07 |
db1,前缀 inquiry_robot: |
| MinIO 桶 | ytd-inquiry |
inquiry_robot |
仍用现网端口 3306 / 5432 / 6379 / 9000。账号口令不要抄现网,由甲方新建。变量名与正式/测试取值见 13。
外部系统(非本仓库)
| 系统 | 职责 |
|---|---|
| 企业微信 | 私聊、群聊、模板卡、应用消息、AIBOT |
微盛会话存档 open.wshoto.com |
群/会话 Archive、附件下载 |
| TMS(友商/自有 TMS V2) | 报价查询、详情、字典、空运锁舱/释放;外部报价与舱位事实 Owner |
| DeepSeek API | 意图路由(A)+ 字段语义(B) |
| 阿里云百炼/DashScope 千问 | 附件/图片、报价表映射等 |
| 现网 Git | 对照地址见 03;本仓库用自己的远程 |
部署环境
| 项 | 值 |
|---|---|
| 形态 | 甲方 Windows 服务器,不可变 release 目录 |
| 公网 IP | 129.211.181.80(SSH 22) |
| 主机名 | 10_206_0_15 |
| 运行根 | C:\yutongda |
| 版本目录 | C:\yutongda\releases\ |
| 运维指针 | C:\yutongda\ops\(active-release*.json) |
| SSH 账号 | ytd_extdev_0903,仅 Ed25519 公钥 |
| 允许出口 | 38.175.103.103、113.119.172.108、115.159.76.75 |
| 部署方式 | 固定脚本 Deploy-YtdCumulativeRelease.ps1,禁止手工覆盖活动目录 |
| OS 本机开发 | Windows 10/11 + PowerShell 7 |
新系统与现网 同机并存:不占用上表 C:\yutongda 活动指针;TMS、域名 ai.ytd-scm.com、询价企微 1000010、AIBOT Bot 与正式相同。库、Redis 前缀、监听端口另起。运维通知 1000014 也相同。并存期不要改 Nginx 回调、不要双连 AIBOT。
公开域名与路径
| 地址 | 用途 |
|---|---|
https://ai.ytd-scm.com |
正式站点(Nginx ai.conf)。测试环境域名配置与此相同,切流前公网仍进现网 |
https://ai.ytd-scm.com/inquiry-form |
H5(测试 .env 也填这一条) |
https://ai.ytd-scm.com/inquiry-form/upload |
H5 询价附件上传 |
/jeecgboot(生产前端 VITE_GLOB_API_URL) |
浏览器到 Java 的反代前缀 |
| Java context-path | /jeecg-boot(服务端口 8080) |
| 现网 Git | 地址见 03;本仓库用新远程 |
https://work.weixin.qq.com/ |
企微卡片跳转占位 |
https://open.wshoto.com |
微盛 Archive API 默认基址 |
https://api.deepseek.com / /beta |
DeepSeek |
DashScope 兼容基址(环境变量 QWEN_BASE_URL) |
千问 |
源码里的 minio.jeecg.com、fileview.jeecg.com、cas.test.com 是 Jeecg 模板默认值,不等于生产。生产对象存储与域名以服务器环境文件为准。
监听端口
公网对外只需 443(Nginx)。下面多数是本机回环或数据机,不是都要映射到公网。
现网应用口(拆得过细)
| 端口 | 现网进程 | 新系统 |
|---|---|---|
| 8080 | Java JeecgBoot | 保留(主账,本机,Nginx 反代) |
| 8810 | Python agent_api |
保留,并承接原 8809/8811 |
| 8809 | Python bridge_api |
砍,并进 8810 |
| 8811 | Python wecom_callback |
砍,并进 8810 |
| 8812 | Python wecom_robot |
砍,现网基本空配置 |
| 8813 | AIBOT Bridge | 保留,仅 127.0.0.1 |
| 3100 | Vite 开发服 | 生产不要开 |
基础设施(不是询价业务端口)
数据在 10.206.0.14:MySQL 3306、PostgreSQL 5432、Redis 6379。本机还有 MinIO 9000。Worker 不占对外端口。
新系统并存期应用口:8180 + 8910 + 8913,外加 Nginx 80/443。切流前不要占用现网 8080/8810/8813。
目标进程(不要复现现网拆法)
现网 Python 拆成多个 uvicorn + 五个 Worker,是发布/隔离习惯,不是业务必需。新系统交付形态:
| 进程 | 端口(可沿用) | 职责 |
|---|---|---|
| Nginx | 443 / 80 | TLS、静态后台、反代 |
| 主账 API | 并存时不要用 8080(示例 8180) | 工单、权限、TMS、后台 API |
| 智能体 HTTP | 并存时不要用 8810(示例 8910) | H5、企微 HTTP 回调、主账唤醒;只入队、快回 |
| AIBOT 桥 | 并存时不要用 8813(示例 8913)仅回环 | 长连接转发,无业务状态 |
| 后台 Worker 一个进程 | 无对外端口 | LLM、识别、报价(LibreOffice)、存档;进程内分并发槽 |
Worker 并发约定(不允许系统卡顿,尽量多线程):
- 1 个槽专跑 LibreOffice(避免本机两台 soffice 互抢)。不是整进程单线程。
- 2~3 个线程槽跑 HTTP 类(模型、识别、存档下载、主账)。不同工单并行。
- inbox / outbox 独立线程,禁止和转 PDF 串在一条阻塞线上。
- 回调 / H5 只入队快回;禁止在请求线程转 PDF、等完整 LLM、忙等 Redis 结果。
- 禁止全局大锁把所有询价排成单行。同一任务认领即可。
不要:群机器人独立 8812(现网空配置);五个 NSSM Worker;把慢活塞回回调请求。
业务六态(Java 唯一)
询价中、已报价、协商中、已成交、未成交、已关闭。
补字段、附件识别中、生成文件、异常、人工协同 不是第七态,属于 Graph/任务/异常正交状态。