# 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:分布式追踪。 - Sentry:Flutter 崩溃和前端异常。 重点监控: - 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:外部依赖模拟。 - Testcontainers:PostgreSQL、Kafka、Redis 和其他集成测试。 - Flowable 测试:流程路径、条件分支、会签、超时和撤回。 - 契约测试:移动端、AI 服务和外部系统接口。 - k6:API 和关键流程压力测试。 权限和流程规则优先使用真实数据库和真实 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 扩展能力、私有化部署和长期维护成本,可作为项目立项、原型开发和架构评审的统一依据。