源码解读:如何在智慧园区中接入大模型?从架构设计到代码实现(附完整源码)
·
作为一名技术人,我深知大家最关心的不是“有没有AI”,而是“AI怎么实现的?代码质量怎么样?二次开发难不难?”
今天,我就从技术架构和代码实现两个维度,深度拆解“海创科技城智慧园区”中的 park-agent(AI智能体)模块。
一、为什么要在园区系统中引入大模型?
传统园区系统的痛点:
-
数据多但洞察少:每天产生海量告警、工单、设备日志,但缺乏智能分析
-
决策依赖人经验:派单、处置、调度全靠人工判断,效率低下
-
交互方式单一:只能点点点,不能“问一问”
引入大模型后,以上问题迎刃而解。
二、park-agent 模块架构设计
整体架构分层:
text
┌─────────────────────────────────────────────────────────┐ │ 前端展示层 │ │ admin-vue3 (/views/agent) │ uniapp (AI助手页) │ ├─────────────────────────────────────────────────────────┤ │ API网关层 │ │ Spring Cloud Gateway 路由转发 │ ├─────────────────────────────────────────────────────────┤ │ 业务逻辑层 (park-agent) │ │ ┌────────────┬────────────┬────────────┬───────────┐ │ │ │ 智能研判 │ 模型配置 │ 对话服务 │ Prompt管理 │ │ │ ├────────────┼────────────┼────────────┼───────────┤ │ │ │ 安全分析 │ GLM接入 │ 上下文管理 │ 模板引擎 │ │ │ │ 效率分析 │ 参数调优 │ 流式输出 │ 变量替换 │ │ │ └────────────┴────────────┴────────────┴───────────┘ │ ├─────────────────────────────────────────────────────────┤ │ 大模型接入层 │ │ ┌─────────────────────────────────────────────────────┐│ │ │ LLM Provider 接口 (可扩展) ││ │ ├──────────────┬──────────────┬─────────────────────┤│ │ │ 智谱GLM实现 │ 百度文心实现 │ 阿里通义实现 (预留) ││ │ └──────────────┴──────────────┴─────────────────────┘│ ├─────────────────────────────────────────────────────────┤ │ 数据与业务中台层 │ │ ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┐ │ │ │告警 │工单 │设备 │能耗 │停车 │访客 │巡检 │ │ │ └──────┴──────┴──────┴──────┴──────┴──────┴──────┘ │ └─────────────────────────────────────────────────────────┘
三、核心代码实现亮点
1. 大模型接入的抽象设计(开闭原则典范)
java
// 定义通用LLM Provider接口
public interface LlmProvider {
// 同步对话
ChatResponse chat(ChatRequest request);
// 流式对话(SSE)
void chatStream(ChatRequest request, SseEmitter emitter);
// 获取模型信息
ModelInfo getModelInfo();
}
// 智谱GLM具体实现
@Component
@ConditionalOnProperty(name = "agent.llm.provider", havingValue = "zhipu")
public class ZhipuLlmProvider implements LlmProvider {
// 已实现完整对接
}
// 未来扩展百度文心只需新增实现类
// public class BaiduLlmProvider implements LlmProvider {}
2. 智能研判核心逻辑
java
@Service
public class IntelligenceAnalysisService {
// 安全态势智能分析
public SafetyReport analyzeSafety() {
// 1. 采集数据:近30天告警、工单、设备状态
// 2. 构建Prompt:将数据注入模板
// 3. 调用大模型:获取分析结果
// 4. 解析返回:提取结构化建议
// 5. 持久化存储:记录分析历史
}
}
3. Prompt模板管理
sql
-- 支持动态配置的Prompt模板
CREATE TABLE agent_prompt_template (
id BIGINT PRIMARY KEY,
template_code VARCHAR(50), -- safety_analysis / efficiency_analysis
template_name VARCHAR(100),
template_content TEXT, -- 支持 ${变量} 替换
variables JSON, -- 模板变量定义
status TINYINT
);
四、后台管理界面(views/agent)
我们已经完成了完整的AI管理后台:
| 页面 | 功能 |
|---|---|
| AI仪表盘 | 模型调用次数、Token消耗、响应时间监控 |
| 模型配置 | 选择模型、调整参数(Temperature等) |
| 智能研判 | 查看历史分析报告、手动触发研判 |
| Prompt管理 | 模板列表、编辑、测试 |
| 对话记录 | 用户与大模型的完整对话历史 |
五、二次开发指南
场景1:替换成百度文心大模型
-
新建
BaiduLlmProvider实现LlmProvider接口 -
在
application.yml中配置agent.llm.provider=baidu -
无需修改任何业务代码,开闭原则完美体现
场景2:新增一个“智能巡检建议”功能
-
在
AgentController新增接口 -
编写对应的Prompt模板
-
调用
LlmProvider.chat()获取结果 -
前端
views/agent新增菜单即可
六、部署与性能优化建议
-
并发控制:大模型接口响应较慢(3-5秒),使用
@Async异步处理 + WebSocket/SSE 推送结果 -
缓存策略:相同查询条件的结果缓存1小时,减少API调用费用
-
成本控制:后台可配置每日调用上限,防止费用超支
-
降级方案:大模型不可用时,自动降级为规则引擎分析
七、源码获取
🎯 你不需要自己对接各家大模型的API,我们已经帮你封装好了!
更多推荐





所有评论(0)