1. 项目概述
在快递物流、电商配送等业务场景中,用户经常需要填写详细的地址信息。传统的表单填写方式往往需要用户手动拆分省市区等字段,操作繁琐且容易出错。更理想的体验是允许用户直接粘贴一段包含地址的自然语言文本,由系统自动解析出结构化的地址信息。
两年前,我们团队在开发一个快递业务系统时,就遇到了这样的需求。当时我们使用的是百度提供的收费地址解析API,虽然效果不错,但存在两个明显痛点:一是按调用次数收费,长期使用成本可观;二是对行政区域编码的识别准确率有限,经常需要人工二次核对。
随着大模型技术的普及,我们发现这个场景非常适合作为LLM(大语言模型)落地的试验田。本文将详细介绍如何基于SpringAI框架和智谱大模型,用不到200行代码实现一个高精度的"地址提取智能体"。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 技术栈选型
经过评估,我们选择了以下技术组合:
- SpringAI 1.1.2:作为统一的AI调用框架,它提供了标准化的API来对接不同厂商的大模型,未来切换模型成本低
- 智谱GLM-4-Flash:选择它的免费版本,支持function calling功能,满足我们的核心需求
- Function Calling:让大模型具备调用外部API的能力,这是实现行政编码实时查询的关键
- SpringBoot 3.x:现代化Java框架,提供完善的依赖管理和自动配置
- JDK17+:使用Records等新特性简化数据模型定义
- 行政区划编码库:基于开源项目Administrative-divisions-of-China构建本地查询服务
2.2 系统架构
整个系统的数据流如下图所示:
- 用户输入自然语言文本(如:"礼盒20个吉林省长春市朝阳区开运街领秀朝阳小区 田甜 18692093383")
- 系统调用大模型进行结构化解析
- 大模型通过function calling查询行政区域编码
- 返回完整的结构化地址信息
这种架构的核心优势在于:
- 用户无需学习任何规则,用最自然的方式表达即可
- 通过function calling机制,将大模型的"想象力"与本地数据的"准确性"完美结合
- 完全摆脱了对第三方收费API的依赖
3. 核心实现步骤
3.1 环境配置与依赖
首先创建SpringBoot项目,添加关键依赖:
xml复制<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot
