Java与SpringAI应用
Java 和 Spring 项目接入 AI,本质上是把模型能力封装成稳定的业务服务。重点不是在 Controller 里直接调用模型,而是做好抽象、上下文、限流、日志和安全。
# 1. 分层建议
Controller
-> Application Service
-> AI Orchestration Service
-> Model Client
-> Provider API
AI Orchestration Service
-> Prompt Template
-> RAG Service
-> Tool Service
-> Safety Service
业务层不应直接依赖具体模型供应商。
# 2. 核心抽象
| 抽象 | 作用 |
|---|---|
| ModelClient | 统一模型调用 |
| PromptTemplate | 管理 Prompt 模板 |
| ConversationService | 管理会话和消息 |
| RagService | 负责检索和上下文拼接 |
| ToolRegistry | 管理工具描述和执行 |
| SafetyService | 做输入输出安全检查 |
| AiLogService | 记录调用日志和指标 |
# 3. 请求链路
用户请求
-> 参数校验
-> 权限校验
-> 构造 Prompt
-> 检索上下文
-> 调用模型
-> 解析输出
-> 安全校验
-> 返回结果
每一步都应可观测、可测试。
# 4. 流式接口
Java Web 应用常用 SSE 返回流式内容。
设计关注:
- 连接关闭时停止模型调用。
- 处理模型异常并给前端结束事件。
- 记录完整输出和 Token 用量。
- 防止长连接占满线程。
# 5. 配置管理
建议配置:
- 模型名称。
- API 地址。
- 超时时间。
- 最大 Token。
- temperature。
- 限流策略。
- 降级模型。
- Prompt 版本。
这些配置应支持按环境和业务场景区分。
# 6. 工程风险
| 风险 | 建议 |
|---|---|
| 供应商绑定 | 做 ModelClient 抽象 |
| 超时拖垮接口 | 设置超时和线程隔离 |
| 成本不可控 | 记录 Token,做限额 |
| 输出格式错 | Schema 校验 |
| 敏感信息泄露 | 脱敏和权限过滤 |
| 难以排查 | 记录 Prompt 版本、模型和检索结果 |
# 7. Tips 快问快答
Q:Spring 项目接 AI 要不要引框架?
A:简单场景可以自己封装 HTTP Client;复杂场景涉及 RAG、工具调用和多模型路由时,再考虑引入 AI 框架。
Q:Prompt 应该写在代码里吗?
A:早期可以,生产建议模板化和版本化,方便评估、回滚和灰度。
Q:模型返回结果能直接入库吗?
A:要先做格式校验、安全校验和业务规则校验,不能直接信任。
上次更新: 2026/06/25, 17:53:09