Files
AIOA/AI原生OA技术架构方案.md

864 lines
26 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.
# AI 原生 OA 技术架构方案
> 文档状态:技术栈定稿
> 系统形态:完全移动端
> 目标平台:iOS、Android
> 核心后端:Kotlin + Spring Boot + Flowable
> 主数据库:PostgreSQL
## 1. 项目目标
本项目建设一套全新的 AI 原生移动办公系统,不复制传统 OA 的“菜单—表单—审批”使用方式,而是以移动工作台、AI 助手和任务中心为主要入口。
系统需要同时满足以下目标:
- 完全移动端运行,统一支持 iOS 和 Android。
- 覆盖组织、人员、权限、动态表单、审批、知识、通知和文件等 OA 基础能力。
- 支持员工通过自然语言查询信息、生成材料、填写表单和发起业务流程。
- 支持 AI 在明确授权范围内调用业务能力,但不得绕过权限、审批和审计。
- 支持企业私有化部署,并保留接入不同大模型的能力。
- 支持从数百用户扩展至数万用户。
- 业务数据、流程数据和 AI 操作全过程可追溯、可审计、可恢复。
## 2. 总体设计原则
### 2.1 确定性业务与 AI 分离
权限判断、审批结果、金额计算、状态变更和事务一致性由 Kotlin 核心后端负责。AI 负责意图理解、知识检索、任务规划、信息提取和内容生成。
大模型不得直接访问生产数据库,不得直接修改审批状态,也不得自行获得高于当前用户的权限。
### 2.2 模块化单体优先
第一阶段采用模块化单体,而不是全面微服务。核心业务部署为一个应用,但在代码、数据库访问和领域接口层面保持清晰的模块边界。
以下服务可以独立部署:
- AI 服务
- 文档处理服务
- 消息通知服务
- 搜索与索引任务
- 外部系统集成任务
只有当某个模块确实需要独立扩容、独立发布、故障隔离或由不同团队负责时,才将其拆为微服务。
### 2.3 移动优先
所有功能首先按照手机操作场景设计:
- 减少复杂菜单和多层导航。
- 表单适合单手操作和分步填写。
- 支持拍照、扫码、语音、定位、文件上传和生物识别。
- 弱网状态下提供本地草稿、失败重试和状态恢复。
- 重要写操作提供明确的确认界面。
### 2.4 默认安全
权限、数据范围、日志、审计、加密和敏感操作确认必须从第一版进入系统设计,不能作为后期补充功能。
### 2.5 技术可替换
大模型、向量模型、对象存储、搜索引擎和消息基础设施通过内部接口隔离,避免核心业务绑定某个云厂商或模型供应商。
## 3. 确定技术栈
| 层级 | 确定选型 |
|---|---|
| 移动端框架 | Flutter + Dart |
| 状态管理 | Riverpod |
| 路由 | GoRouter |
| HTTP 客户端 | Dio |
| 数据模型 | Freezed + json_serializable |
| 本地数据库 | Drift + SQLite |
| 安全存储 | flutter_secure_storage |
| 移动端监控 | Sentry |
| 核心后端 | Kotlin + Spring Boot |
| Java 运行时 | JDK 21 LTS |
| 构建系统 | Gradle Kotlin DSL |
| 工作流 | Flowable BPMN + DMN |
| 数据访问 | jOOQ + HikariCP |
| 数据库迁移 | Flyway |
| 主数据库 | PostgreSQL |
| 向量检索 | pgvector |
| 数据库连接代理 | PgBouncer |
| 缓存和分布式锁 | Redis |
| 消息队列 | Kafka |
| 企业全文搜索 | OpenSearch |
| 文件与对象存储 | MinIO(S3 兼容) |
| AI 服务 | Python + FastAPI + LangGraph |
| 身份认证 | Keycloak + OAuth 2.1/OIDC |
| API 网关 | Apache APISIX |
| 实时业务消息 | WebSocket |
| AI 流式响应 | SSE |
| 接口规范 | REST + OpenAPI 3 |
| 可观测性 | OpenTelemetry + Prometheus + Grafana + Loki + Tempo |
| 密钥管理 | HashiCorp Vault |
| 容器与编排 | Docker + Kubernetes |
| 发布管理 | Helm |
| CI/CD | GitLab CI |
| 后端测试 | Kotest + MockK + Testcontainers |
| 代码质量 | Detekt + ktlint |
| 移动端测试 | flutter_test + integration_test |
| 性能测试 | k6 |
项目创建时选择各组件的稳定版本,并使用依赖锁文件、容器镜像版本及镜像摘要固定版本。生产环境禁止使用浮动的 `latest` 标签。
## 4. 总体架构
```text
Flutter iOS / Android
HTTPS
Apache APISIX
Keycloak 身份认证
┌──────────────┴──────────────┐
│ │
Kotlin + Spring Boot Python AI 服务
核心业务与权限 检索、规划、生成
│ │
Flowable 模型网关
│ │
├──────────────┬──────────────┤
│ │ │
PostgreSQL Kafka Redis
│ │ │
pgvector 异步事件 缓存与锁
┌─────┴──────────┐
│ │
MinIO OpenSearch
文件存储 全文检索
```
主要调用路径:
```text
用户操作
→ Flutter 客户端
→ APISIX 网关
→ Kotlin 核心后端
→ 身份、权限和数据范围校验
→ 业务服务或 Flowable
→ PostgreSQL 事务提交
→ Kafka 发布领域事件
→ 通知、索引、AI 或外部集成异步处理
```
AI 操作路径:
```text
用户自然语言请求
→ Kotlin 后端验证身份并整理上下文
→ AI 服务理解意图并生成执行计划
→ Kotlin 后端验证工具和参数权限
→ Flutter 展示确认卡片
→ 用户确认
→ Kotlin 后端执行实际业务操作
→ 写入业务数据和完整审计记录
```
## 5. 移动端技术方案
### 5.1 选择 Flutter
移动端确定使用 Flutter,不采用 React Native,也不分别开发 Kotlin Android 和 Swift iOS 客户端。
选择 Flutter 的主要理由:
- 一套代码同时覆盖 iOS 和 Android。
- 复杂表单、审批时间线、流程图和工作台在双端保持一致。
- 渲染行为可控,便于形成统一企业设计系统。
- 具备拍照、扫码、定位、推送、生物识别和安全存储等成熟能力。
- 相比维护两套原生客户端,可降低长期研发和测试成本。
- Dart 强类型体系适合大型、长期维护的企业应用。
### 5.2 客户端架构
采用 Feature-first + Clean Architecture
```text
mobile/
├── app/ # 初始化、环境、主题、路由
├── core/ # 网络、安全、存储、错误模型
├── design_system/ # 颜色、字号、间距和通用组件
└── features/
├── auth/ # 登录、设备和身份
├── workspace/ # 工作台
├── assistant/ # AI 助手
├── approval/ # 待办与审批
├── form/ # 动态表单
├── workflow/ # 流程详情
├── knowledge/ # 企业知识
├── notification/ # 消息中心
├── contact/ # 组织与通讯录
└── profile/ # 用户设置
```
每个业务功能内部保持以下结构:
```text
feature/
├── data/ # API、DTO、本地数据
├── domain/ # 实体、仓库接口、用例
└── presentation/ # 页面、组件、状态控制器
```
### 5.3 一级导航
移动端固定设置四个一级入口:
```text
工作台 | AI 助手 | 待办 | 我的
```
- 工作台:常用服务、日程、公告、数据卡片和快捷操作。
- AI 助手:对话、任务发起、知识查询和执行确认。
- 待办:审批、抄送、任务、提醒及状态跟踪。
- 我的:个人信息、权限、设备、安全和偏好设置。
### 5.4 离线与弱网
Drift + SQLite 保存:
- 未提交表单草稿
- 最近访问的非敏感数据
- 待上传附件状态
- 客户端操作队列
- 消息与页面缓存
所有写操作必须携带幂等键。客户端断网恢复后可以安全重试,但不能因此重复发起流程或重复审批。
高敏感数据不进入普通缓存;必要的本地数据采用操作系统安全能力保护。
### 5.5 推送与安全存储
- iOS 使用 APNs。
- Android 使用 FCM;如需适配特殊终端,可在通知服务中增加厂商通道。
- 服务端维护统一通知抽象,不让业务模块直接调用具体推送平台。
- Access Token、Refresh Token 和设备密钥存入 iOS Keychain 或 Android Keystore。
- 高风险操作支持系统生物识别二次确认。
## 6. Kotlin 核心后端
### 6.1 架构形式
核心后端采用:
```text
模块化单体
+ 领域驱动的模块划分
+ 六边形架构
+ 领域事件
+ 异步任务
```
初始模块:
```text
backend/
├── boot # 应用启动与配置
├── identity # 用户身份和账号
├── organization # 组织、岗位和人员关系
├── authorization # 角色、权限和数据范围
├── workflow # Flowable 适配和流程管理
├── form # 表单模型和版本
├── approval # 审批业务
├── document # 文件元数据与文档业务
├── knowledge # 知识库和权限
├── notification # 站内消息和通知
├── integration # 外部系统适配
├── ai-orchestration # AI 上下文和工具执行
└── audit # 审计事件和查询
```
模块之间通过应用服务接口和领域事件协作。一个模块不得直接读取或修改另一个模块拥有的数据库表。
### 6.2 Spring 编程模型
业务接口采用 Spring MVC,不以 WebFlux 作为核心编程模型。Flowable、jOOQ 和企业集成大量使用阻塞式接口,采用 MVC 能降低事务、调试和维护复杂度。
AI 流式输出使用 SSE;实时消息和状态更新使用 WebSocket,不需要为此将整个系统改为响应式架构。
### 6.3 数据访问
确定使用 jOOQ,不采用 JPA/Hibernate。
原因包括:
- 与 Kotlin 的空安全和不可变数据模型配合更自然。
- 支持类型安全 SQL。
- 复杂筛选、统计、报表和关联查询更透明。
- 能充分利用 PostgreSQL 的 JSONB、数组、CTE 和窗口函数。
- SQL 性能更容易分析和优化。
数据库连接由 HikariCP 管理,数据库外部增加 PgBouncer 控制连接总量。
## 7. Flowable 工作流方案
### 7.1 Flowable 职责
Flowable 负责:
- BPMN 流程执行
- 用户任务
- 会签和或签
- 条件分支
- 子流程
- 定时任务
- 超时提醒与升级
- 流程撤回和终止控制
- 流程版本管理
- DMN 决策表
### 7.2 业务数据边界
完整表单和业务数据存放在自有业务表中。Flowable 只保存流程运行所需的少量变量,例如:
```text
businessId
applicantId
departmentId
amount
riskLevel
formVersion
```
不得将完整表单 JSON、附件内容或大量业务字段长期放入流程变量,以免造成运行时表膨胀、查询困难和升级风险。
### 7.3 流程发布
流程生命周期固定为:
```text
草稿
→ BPMN/DMN 静态校验
→ 测试环境运行
→ 业务负责人审核
→ 正式发布
→ 版本冻结
```
运行中的流程固定引用已发布版本。新版本不能直接改变正在执行的旧流程实例。
AI 可以根据自然语言生成 BPMN 或决策表草案,但不能自动发布生产流程。
## 8. PostgreSQL 数据方案
### 8.1 扩展组件
| 扩展 | 用途 |
|---|---|
| pgvector | 文档和知识向量检索 |
| pg_trgm | 模糊查询和相似文本搜索 |
| unaccent | 搜索文本规范化 |
| uuid-ossp | UUID 支持 |
| pg_stat_statements | SQL 性能分析 |
### 8.2 Schema 划分
```text
identity
organization
authz
workflow
form
business
knowledge
integration
audit
flowable
```
Flowable 使用独立的 `flowable` Schema。业务模块根据归属访问对应 Schema,但仍由同一个 PostgreSQL 集群统一管理事务和备份。
### 8.3 数据建模规范
- 主键统一采用 UUIDv7。
- 所有业务表包含 `tenant_id`
- 所有可修改实体包含创建时间、更新时间和乐观锁版本号。
- 所有写请求包含业务幂等键。
- 使用 `timestamptz` 保存时间,并统一以 UTC 入库。
- 金额采用 `numeric`,禁止使用浮点类型。
- 高频查询字段采用结构化列。
- 低频扩展字段可以存入 JSONB。
- 不采用“所有动态表单数据都存 JSONB”的设计。
- 审计数据与普通业务日志分离。
- 禁止在生产环境使用 ORM 或 Flowable 自动建表。
### 8.4 动态表单
动态表单采用:
- JSON Schema:字段、类型和数据约束。
- UI Schema:布局、控件和移动端展示规则。
- 受限规则表达式:显隐、只读、校验和字段联动。
- BPMN:表单提交后的业务流转。
规则表达式采用 CEL 或 FEEL 等受限语言,不允许直接执行用户提供的 JavaScript。
表单定义必须版本化。已提交记录必须保留提交时的表单版本和数据快照。
### 8.5 高可用与备份
- PostgreSQL 采用主从或托管高可用部署。
- 配置持续归档和时间点恢复能力。
- 定期进行全量备份和恢复演练。
- 备份文件加密并与生产集群隔离。
- 使用 PgBouncer 控制连接规模。
- 使用 `pg_stat_statements` 和慢查询监控持续优化 SQL。
## 9. AI 服务
### 9.1 服务边界
AI 服务独立使用 Python + FastAPI + LangGraph
```text
ai-service/
├── model_gateway/ # 模型统一接口、路由和故障切换
├── retrieval/ # 检索、重排序和引用
├── agents/ # 有状态任务编排
├── tools/ # 工具定义,不直接实现核心业务
├── guardrails/ # 输入输出和安全规则
├── prompts/ # 提示词及版本
├── evaluation/ # 离线评测和回归测试
└── telemetry/ # 调用、成本、延迟和质量监控
```
职责划分:
- Kotlin:身份、权限、业务规则、事务和实际工具执行。
- Flowable:确定性流程执行和状态推进。
- Python:意图识别、任务规划、知识检索和内容生成。
- 大模型:生成建议和结构化调用请求,不直接拥有业务权限。
### 9.2 模型网关
模型网关提供统一内部协议,并兼容主流 OpenAI API 风格接口。网关负责:
- 云端模型和私有模型切换
- 按任务选择模型
- 超时、重试和熔断
- 速率和成本控制
- 敏感信息处理
- 提示词版本记录
- 模型调用审计
- 输出结构校验
核心业务代码不得直接调用具体模型供应商 SDK。
### 9.3 Agent 运行规则
- Agent 任务状态持久化,不能仅存在内存。
- 每个工具都有确定的输入 Schema、权限要求和风险等级。
- 工具调用由 Kotlin 后端重新鉴权。
- 任何写操作都必须具备幂等机制。
- 中高风险操作必须人工确认。
- 长任务支持超时、取消、重试和人工接管。
- 工具执行失败后不能由模型无限重试。
- 所有关键步骤保存模型、提示词、参数、结果和确认记录。
## 10. 企业知识与搜索
采用 PostgreSQL + pgvector + OpenSearch 的混合检索架构:
- PostgreSQL:文档元数据、权限、版本、分片和向量。
- MinIO:原始文件、附件和预览文件。
- OpenSearch:全文检索、关键词匹配、过滤和聚合。
- pgvector:语义召回。
- AI 服务:混合召回、重排序、引用组织和答案生成。
每个文档分片至少携带:
```text
tenant_id
document_id
document_version
department_id
security_level
permission_tags
effective_time
```
知识查询必须先按照用户身份和数据范围生成过滤条件,再执行全文或向量召回。禁止先检索企业全部文档,再依赖大模型隐藏无权查看的内容。
AI 回答必须提供来源文档和版本引用。无法找到可靠依据时,应明确说明,而不是生成看似确定的企业制度答案。
## 11. 身份与权限
### 11.1 认证
Keycloak 负责身份协议、登录会话和统一认证,采用:
```text
OAuth 2.1
+ OpenID Connect
+ Authorization Code
+ PKCE
```
Keycloak 可以对接企业 LDAP、Active Directory、企业微信、钉钉或其他身份提供方。
### 11.2 授权
业务后端采用:
```text
RBAC + 数据范围 + ABAC
```
- RBAC:角色可以使用哪些功能和工具。
- 数据范围:本人、本部门、本部门及下级、项目或全公司。
- ABAC:根据金额、密级、时间、岗位、设备和业务属性判断。
必须支持:
- 多岗位和多角色
- 临时授权
- 代理审批
- 权限生效与失效时间
- 项目成员权限
- 组织调整后的权限重算
- AI 工具级权限
- 敏感字段级权限
Keycloak 不负责所有业务授权。具体业务资源和数据范围仍由 Kotlin 后端判断。
## 12. 消息与实时能力
### 12.1 Kafka
Kafka 承担:
- 流程状态事件
- 审批结果事件
- 通知事件
- 文档解析和向量化任务
- AI 长任务
- 搜索索引更新
- 外部系统同步
- 审计事件投递
事件采用明确的版本号和 Schema。消费者必须实现幂等处理和死信机制。
### 12.2 Redis
Redis 用于:
- 短期缓存
- API 限流
- 幂等令牌
- 分布式锁
- 在线状态
- 短期会话状态
- 短生命周期任务进度
Redis 不作为权威业务数据源。重要状态必须持久化到 PostgreSQL。
### 12.3 通知
```text
业务事件
→ Kafka
→ 通知中心
→ 站内消息
→ APNs / FCM
→ Flutter 客户端
```
推送只用于提醒。完整通知内容及已读状态保存在通知中心,确保推送丢失后仍可查询。
## 13. 文件与对象存储
文件内容统一存储到 MinIO,PostgreSQL 只保存元数据、业务关系、哈希、状态和审计信息。
上传过程:
```text
Flutter 请求上传任务
→ Kotlin 鉴权并生成临时凭证
→ Flutter 直接分片上传 MinIO
→ Flutter 通知上传完成
→ Kotlin 校验并创建文件记录
→ Kafka 启动扫描、解析和预览任务
```
文件服务负责:
- 文件类型和大小校验
- 哈希校验和去重
- 分片上传与断点续传
- 病毒扫描
- 敏感内容检测
- 图片压缩和缩略图
- PDF 预览
- Office 文档转换
- 水印
- 下载权限审计
- 生命周期和归档策略
下载使用短期签名 URL。敏感文件每次生成下载地址前必须重新鉴权。
## 14. 多租户
即使首期只服务一个组织,核心业务表也保留 `tenant_id`
初期采用:
```text
共享 PostgreSQL 集群
+ 共享 Schema
+ tenant_id 行级隔离
```
高敏感表可额外启用 PostgreSQL Row-Level Security,但数据库策略不能替代应用层鉴权。
初期不采用每租户独立数据库。未来对隔离要求极高的客户,可以通过租户路由扩展至独立数据库或独立集群。
## 15. API 设计
- 面向客户端采用 REST API。
- 接口使用 OpenAPI 3 描述并生成客户端类型。
- URL 包含显式 API 大版本,如 `/api/v1`
- 使用统一错误结构和业务错误码。
- 分页统一采用游标或明确的分页对象。
- 写操作支持 `Idempotency-Key`
- 资源更新采用版本号或 ETag 防止覆盖。
- 批量接口设置最大数量和速率限制。
- AI 流式回答使用 SSE。
- 实时待办和消息更新使用 WebSocket。
客户端不得直接调用 Flowable、Keycloak 管理端、MinIO 管理端或 AI 模型供应商接口。
## 16. 安全基线
系统第一版必须包含:
- 全链路 TLS。
- Access Token 短有效期。
- Refresh Token 轮换和复用检测。
- 设备注册、设备撤销和远程注销。
- API 限流和异常行为监控。
- 写接口防重放和幂等控制。
- 数据传输加密与静态加密。
- 高敏感字段应用层加密。
- 日志敏感字段脱敏。
- 完整审批和工具调用审计。
- 高风险操作二次确认或生物识别。
- 外部文档不可信标记。
- 提示词注入检测和工具参数约束。
- AI 输出结构验证。
- AI 不能直接将自然语言输出作为数据库语句或业务指令执行。
- Secret 统一保存在 Vault,不写入代码仓库或容器镜像。
## 17. 审计体系
每个关键操作至少记录:
- 租户和用户
- 登录身份与代理身份
- 设备和会话
- 操作时间和来源 IP
- 业务对象与操作类型
- 操作前后关键状态
- 权限判断结果
- 幂等键和关联追踪 ID
- Flowable 流程实例和任务 ID
- AI 模型、提示词版本和工具调用
- 人工确认记录
- 执行结果和失败原因
审计事件写入独立审计表,并通过 Kafka 异步归档。普通管理员不得修改或删除审计记录。
## 18. 可观测性
OpenTelemetry 统一采集 Trace、Metric 和 Log 关联信息:
- Prometheus:指标存储。
- Grafana:仪表盘和告警。
- Loki:日志聚合。
- Tempo:分布式追踪。
- SentryFlutter 崩溃和前端异常。
重点监控:
- API 延迟、错误率和吞吐量
- PostgreSQL 连接、锁和慢查询
- Flowable 待执行任务、失败任务和定时任务积压
- Kafka 消费延迟和死信数量
- Redis 命中率和内存
- 文档解析及索引积压
- AI 请求延迟、Token 消耗、成本、失败率和人工拒绝率
- 移动端启动速度、崩溃率和网络失败率
所有请求使用统一 Trace ID,贯穿 Flutter、APISIX、Kotlin、AI 服务、Kafka 消费者和外部系统调用。
## 19. 部署方案
### 19.1 环境
```text
development
testing
staging
production
```
生产数据库、Kafka、对象存储、搜索引擎和密钥系统不得与非生产环境共享。
### 19.2 Kubernetes 部署单元
- APISIX 网关
- Kotlin OA Backend
- AI Service
- Document Worker
- Notification Worker
- Integration Worker
- Keycloak
- PostgreSQL 或外部高可用数据库
- PgBouncer
- Redis
- Kafka
- MinIO
- OpenSearch
- 可观测性组件
核心后端初期作为一个部署单元运行多个副本。AI、文档、通知和集成任务根据实际负载独立扩容。
### 19.3 发布
- GitLab CI 执行代码检查、测试、构建和镜像扫描。
- Helm 管理 Kubernetes 发布配置。
- 数据库变更使用 Flyway,并在应用发布前单独执行。
- 生产发布采用滚动或金丝雀策略。
- 高风险变更必须提供回滚方案。
- 数据库迁移遵循向前兼容,避免新版本发布期间旧实例无法运行。
## 20. 测试策略
### 20.1 后端
- Kotest:单元测试和业务规则测试。
- MockK:外部依赖模拟。
- TestcontainersPostgreSQL、Kafka、Redis 和其他集成测试。
- Flowable 测试:流程路径、条件分支、会签、超时和撤回。
- 契约测试:移动端、AI 服务和外部系统接口。
- k6API 和关键流程压力测试。
权限和流程规则优先使用真实数据库和真实 Flowable 引擎做集成测试,避免仅依赖 Mock 得到错误信心。
### 20.2 Flutter
- 领域和状态管理单元测试。
- Widget 组件测试。
- Golden UI 回归测试。
- iOS 和 Android 集成测试。
- 弱网、断网、后台恢复和 Token 过期测试。
- 上传中断和幂等重试测试。
### 20.3 AI
- 固定评测集。
- 意图识别准确率。
- 知识引用正确率。
- 无权限信息泄漏测试。
- 工具选择与参数正确率。
- 提示词注入测试。
- 不同模型版本回归测试。
- 高风险操作人工确认覆盖率。
## 21. 第一阶段不引入的技术
为保证可交付性,第一阶段明确不引入:
- 全面微服务
- 服务网格
- GraphQL
- 自研 Kubernetes Operator
- 独立向量数据库
- 多 Agent 自主协作网络
- Event Sourcing
- 自研工作流引擎
- 自研身份认证系统
- 用户脚本或动态 JavaScript 表单规则
- 大模型直接访问业务数据库
- 大模型自主发布流程
## 22. 建议实施阶段
### 阶段一:基础平台
- Flutter 应用骨架和设计系统
- Keycloak 登录、设备注册和组织同步
- 组织、人员、岗位、角色和数据权限
- PostgreSQL、Flyway、jOOQ 和审计基础设施
- APISIX、Kubernetes、监控和日志
### 阶段二:OA 核心
- 动态表单
- Flowable 流程设计、发布和执行
- 待办、已办、抄送和流程详情
- 文件上传、预览和通知中心
- 移动端离线草稿和弱网恢复
### 阶段三:AI 助手
- 模型网关
- 企业知识库和混合检索
- 带引用的制度问答
- 表单自动填写和材料检查
- AI 操作确认卡片
- 工具权限和 AI 审计
### 阶段四:自动化与集成
- ERP、CRM、财务、人力和邮件集成
- 跨系统任务编排
- 低风险任务自动执行
- 异常监控、任务补偿和人工接管
- AI 质量、成本和业务收益评估
## 23. 最终技术基线
```text
客户端:
Flutter + Riverpod + GoRouter + Dio + Drift
核心业务:
Kotlin + Spring Boot + Flowable + jOOQ
AI
Python + FastAPI + LangGraph
数据:
PostgreSQL + pgvector + PgBouncer + Flyway
Redis + OpenSearch
基础设施:
Kafka + MinIO + Keycloak + APISIX + Vault
部署:
Docker + Kubernetes + Helm + GitLab CI
运维:
OpenTelemetry + Prometheus + Grafana + Loki + Tempo + Sentry
```
技术架构的核心边界如下:
- Flutter 负责统一移动体验。
- Kotlin 负责确定性业务、权限和事务。
- Flowable 负责可审计的流程执行。
- Python AI 服务负责理解、检索、规划和生成。
- PostgreSQL 保存权威业务数据。
- Kafka 承担异步事件和系统解耦。
- MinIO 保存文件,OpenSearch 与 pgvector 提供混合检索。
- Keycloak 负责身份协议,Kotlin 后端负责业务授权。
- AI 永远不能绕过权限、确认和审计直接执行高风险操作。
该技术基线兼顾移动体验、企业级可靠性、AI 扩展能力、私有化部署和长期维护成本,可作为项目立项、原型开发和架构评审的统一依据。