从 0 到 1 打造端到端 AI 销售智能体:Spring Boot 4 + Spring AI 2.0 全栈实战复盘(含登录统计曲线图、HTTPS 上线)
一个AI 智能获客助手的真实落地过程潜客挖掘 → 个性化触达 → 转化 → 数据复盘的全链路自动化以及踩过的坑、做过的取舍。一、为什么要做这件事做 B2B 销售的朋友都有体会获客难、触达累、转化靠玄学。潜客数据要手动去查、去整理渠道杂、质量参差不齐一封邮件要针对不同客户反复改写人工成本极高客户画像靠销售脑袋里的经验人走了经验就没了邮件发多了还容易踩反垃圾机制甚至违规被投诉系统上线后到底有多少人用、哪个阶段转化最好两眼一抹黑。所以我决定做一个端到端的 AI 销售智能体让 AI 去挖掘潜客、生成个性化沟通内容、自动发送并追踪把发现-触达-转化-复盘的完整业务闭环自动化同时把关键决策留给人来确认。项目的定位是本地部署 云端 AI混合模式——核心业务数据留在客户自己服务器上满足数据隐私诉求AI 推理走云端大模型 API降低使用门槛。二、整体架构┌─────────────┐ HTTPS(443/80) ┌──────────────────┐ /api/ 反向代理 ┌────────────────┐ │ 浏览器用户 │ ─────────────► │ Nginx (前端静态) │ ────────────────► │ Spring Boot │ └─────────────┘ └──────────────────┘ │ (后端 8080) │ └───────┬────────┘ │ JDBC ┌───────▼────────┐ │ PostgreSQL 16 │ └────────────────┘后端Spring Boot 4.1.0Java 21 Spring AI 2.0.0 PostgreSQL 16 Flyway前端React 18 Vite TypeScriptNginx 托管部署Docker Compose 一键起三个容器PostgreSQL 后端 前端数据库 19 个 Flyway 迁移脚本自动建表AI 模型兼容 OpenAI 协议的大模型DeepSeek 等模型、Key、Base URL 全部可在系统设置页动态配置生产腾讯云 SSL 证书 宿主机 Nginx TLS 终结HTTP 301 自动跳 HTTPS前端子路径/app/部署三、核心功能模块与实现细节1. License 授权体系本地软件的防盗版三板斧本地部署软件最大的痛点是盗版。我做了三层防护激活码离线签名签发厂商用独立的license-tool单文件 Java 程序生成 Ed25519 密钥对用私钥离线签发激活码客户系统内置公钥验签全程不需要连客户数据库也无法伪造激活码。硬件指纹绑定激活码与宿主机machine-id加盐哈希绑定防止一码多机。Docker 部署时把宿主机的/etc/machine-id只读挂载进容器。云端 API 强制校验 Token 配额核心 AI 功能强制走云端大模型 API即使软件被破解没有有效激活码拿不到 Token 配额也无法使用核心功能。激活码带token 上限 金额保险闸门防止异常消耗烧钱用量按激活码独立统计换新激活码从 0 起算。另外做了一个很实用的细节激活成功时自动重置管理员密码——用SecureRandom生成 12 位随机密码去易混淆字符 0/O/1/I/lBCrypt 哈希入库明文只在激活成功响应里显示一次支持前端隐藏/明文切换和一键拷贝。2. AI 能力中台Spring AI 2.0 的正确打开方式项目里所有 AI 能力邮件生成、回复分析、潜客挖掘统一走一个 AI 服务层实现动态构建 ChatModel模型 API Key、Base URL、模型名都存数据库敏感项 AES-256 加密落库运行时用OpenAiChatOptions.builder().apiKey(k).baseUrl(u).model(m).build()动态构建模型系统设置页改完立即生效无需重启。AI 用量统计每次调用按真实 token 数记账结合可调的单价自动算成本前端实时展示。接口限流 Prompt 模板管理防 API 超限Prompt 可维护。3. 潜客挖掘 RAG 客户画像让 AI 像销冠一样思考潜客挖掘配置数据源后通过Function Calling让大模型按结构调用外部数据 API 挖掘潜客人工确认后才入库按公司名去重。RAG 客户画像把历史成交客户通过 CSV 导入 → 自动向量化入库 → 新潜客入库时自动与画像库做语义检索算出profile_score0-100 相似度分并给出相似画像某公司行业相似度 N%的解读。潜客列表按画像分排序优先跟进最像老客户的新客户。这里有个关键选型DeepSeek没有 embedding API所以向量化做了双方案——方案实现特点本地 TF-IDF默认特征哈希映射到 768 维向量L2 归一化余弦相似度零外部依赖、离线可用远程 embeddingOpenAI 兼容端点OpenAiEmbeddingModel配置ai.embedding_model即启用一个EmbeddingRouter统一路由配置了远程模型就走远程否则本地兜底。向量统一存 JSON 文本{dim:768,data:[...]}维度不一致的余弦相似度按 0 处理。4. 邮件触达闭环从生成到发送到合规AI 个性化生成基于客户的沟通记录时间线跟进记录 已发邮件 客户回复续写邮件每次生成必须与历史邮件明显不同换措辞/句子结构/事实组合主题 ≤20 字且不与历史重复。HTML 邮件AI 生成简洁美观的 HTML仅内联样式禁外部 CSS/JS/图片发送时启发式检测 HTML 标签自动切换text/html或纯文本。占位符替换邮件模板支持{companyName}{contactName}{date}{year}等 13 个变量保存草稿时即按客户字段替换草稿箱里看到的就是真实投递内容空字段替换为空串未识别占位符原样保留。合规三件套响应 CAN-SPAM / 《个人信息保护法》邮件正文自动追加退订链接支持{email}占位符域名前缀自动补全路径公开的免登录退订接口点击即生效落库黑名单发送前黑名单拦截——已退订邮箱一律不再发送幂等、按邮箱维度隔离不影响其他客户。每日限频mail.daily_limit控制日发送上限避免触发平台反垃圾机制。5. 收件箱 微信工作台多触达渠道收件箱通过MCP Client 自连本服务/mcp端点按 cron默认每 5 分钟用 IMAP 拉取客户回复邮件支持已读标记、一键转跟进记录、AI 分析回复内容。微信工作台客户挂微信号/昵称消息 in/out 双向记录AI 生成回复建议、人工确认后才落库自动打上AI 辅助徽标——关键触达永远是人来把关。6. 工作台数据复盘登录统计 趋势曲线图产品上线后需要回答系统到底有没有人在用。我基于登录日志做了两层展示统计接口免登录GET /api/auth/login-stats返回{ totalLogins, todayLogins, todayUsers }登录页即可匿名看到「 系统累计登录 N 次 · 今日 N 次 · N 人登录」。趋势曲线图工作台GET /api/auth/login-trend?rangedaily|weekly|monthly|yearly按时间桶聚合login_logs表无数据桶自动补 0 保证曲线连续。前端零依赖 SVG 折线图网格线 折线 面积填充 数据点数值日/周/月/年一键切换range桶数粒度标签示例daily14每天07-28weekly12每周一为一周05-25monthly12每月2026-08yearly5每年20267. MCPModel Context Protocol实践后端通过 Spring AI 的 MCP Server 能力暴露Streamable HTTP/mcp端点McpTool注解的工具如邮件发送自动注册同时自己作为 MCP Client 自连端点调用自己的工具。这套服务即工具的模式让未来的 Agent 编排扩展非常方便。四、踩过的坑都是真金白银换来的Spring Boot 4.x 的版本号是纯数字4.1.0没有.RELEASE后缀。如果从 start.spring.io 生成的 pom 里带着4.1.0.RELEASEMaven Central 和阿里云都会 404——改成4.1.0即可。Spring Boot 4 中 web starter 改名了spring-boot-starter-web→spring-boot-starter-webmvc。Spring AI 2.0 没有OpenAiApi类了动态构建模型要用OpenAiChatOptions.builder()...build()→OpenAiChatModel.builder().options(opts).build()→ChatClient.builder(model).build()这条链路SDK 内部升级为com.openai.client.OpenAIClient。业务校验失败千万别返回 401前端会把任何 401 当成登录过期→ 清 token 跳登录页。改密失败、退订恢复失败这类业务校验一律用 400BadRequest401 只留给真正的未认证场景。DeepSeek 没有 embedding API做 RAG 前先确认模型商的能力边界本地 TF-IDF 兜底是最稳的退路。nginx 1.24 不支持http2 on;独立指令需 1.25.1必须用listen 443 ssl http2;旧语法备份文件不能留在sites-enabled/会被 include 加载导致 duplicate server 报错。前端部署在子路径/app/时静态资源必须用import.meta.env.BASE_URL前缀写死绝对路径会被外层 nginx try_files 回退成落地页 HTML造成HTTP 200 但图片裂图的诡异问题。E2E 测试要用 DOM 几何测量而非截图我用 PlaywrightgetBoundingClientRect()检查关键元素是否超出视口、按钮是否互相重叠、modal 内容是否溢出把界面变形这种回归彻底挡在发布前。五、部署一条命令上线cp .env.example .env # 填数据库密码、JWT 密钥、AES 加密密钥、AI Key docker compose up -d --build后端启动自动执行 Flyway 迁移19 个版本脚本健康检查通过即就绪。前端、后端、数据库三个容器互不干扰数据卷持久化。生产环境再加一层腾讯云 SSL 证书 → 宿主机 Nginx TLS 终结 →listen 443 ssl http2;→ HTTP 301 跳 HTTPS公网https://sales-agent.top无证书告警直接可用。证书到期续期只需替换/etc/nginx/certs/两个文件后nginx -s reload无需重启服务。六、关于产品本身说点实在的这套东西我已经做成了产品——AI 智能获客助手定位就是给中小 B2B 企业、跨境电商、SaaS 服务商这类持续需要获客的团队用✅本地部署客户数据留在自己服务器不碰隐私红线✅AI 个性化触达邮件/微信内容由 AI 按客户画像与沟通历史生成不千篇一律✅合规内置退订链接、频控、黑名单拦截从机制上规避反垃圾与法律风险✅关键动作人确认AI 是助手不是自动群发机器人首次触达人工把关✅数据复盘登录趋势、邮件打开率、AI 用量成本一目了然✅买断 订阅双模式基础版买断、专业版订阅Token 充值、企业版私有化定制如果你也在做 B2B 获客或者对本地部署 云端 AI这类产品形态感兴趣欢迎一起交流。联系方式/链接

相关新闻

现代网络安全防护体系:从三位一体到实战策略

现代网络安全防护体系:从三位一体到实战策略

1. 网络安全新形势:从防病毒到三位一体防护十年前提起网络安全,大多数人第一反应就是"装个杀毒软件"。但如今网络安全早已不是简单的病毒查杀,而是演变为覆盖保密性、完整性和可用性的三位一体防护体系。我从事企业安全建设八年&am…

2026/10/18 8:36:02 阅读更多 →
嵌入式 Linux 巡检开发短记:启动链路怎么核对

嵌入式 Linux 巡检开发短记:启动链路怎么核对

嵌入式 Linux 巡检开发短记:启动链路怎么核对 嵌入式 Linux 的巡检不应照搬服务器清单。重点是启动链路、存储寿命、时间同步和业务进程是否仍处在预期状态。 每次启动都能自证 采集内核版本、设备树标识、根文件系统挂载方式、启动槽位和应用版本,并把它…

2026/10/18 8:36:25 阅读更多 →
Vue3 还原一个企业级后台-02-技术选型

Vue3 还原一个企业级后台-02-技术选型

技术选型:Vue3 vs React,为什么选 Element Plus 技术选型不是"我喜欢什么就用什么",而是"在当前场景下,什么组合能让开发效率最高、维护成本最低、读者最容易跟上"。 一、选型为什么重要 在动手写第一行代码…

2026/10/18 1:28:16 阅读更多 →

最新新闻

GESP五级筛法精讲:埃氏筛与线性筛的原理、选择与考场模板

GESP五级筛法精讲:埃氏筛与线性筛的原理、选择与考场模板

GESP C五级的知识点里,埃氏筛和线性筛是公认的“第一次让你真正感受到算法效率”的内容。很多同学刚学到这里都会有个共同的困惑:代码看起来差不多,名字又很像,到底学哪个?考试默写哪个?为什么明明暴力也能…

2026/10/18 12:41:33 阅读更多 →
句子嵌入模型解析:paraphrase-multilingual-MiniLM-L12-v2 语义相似度实战

句子嵌入模型解析:paraphrase-multilingual-MiniLM-L12-v2 语义相似度实战

简介:本资源为 sentence-transformers 库下的 paraphrase-multilingual-MiniLM-L12-v2 多语言句向量模型本地包,面向从事自然语言处理、语义检索、问答系统与文本蕴含等任务的开发者及研究者。模型基于轻量级 MiniLM 架构,含 12 层 Transform…

2026/10/18 12:41:33 阅读更多 →
日文说明书图片翻译实测:客服如何用OCR与多模态大模型提升效率

日文说明书图片翻译实测:客服如何用OCR与多模态大模型提升效率

白天最容易让我上头的瞬间,不是什么难缠的差评,而是买家突然甩来一张图,图上是一大段密密麻麻的日文说明书,然后问一句“亲,这个是什么意思?”做客服久了你就知道,英语多少还能靠单词蒙一蒙&…

2026/10/18 12:41:33 阅读更多 →
C# Word文档处理实战:基于Spire.Doc的创建、替换、转换与表格操作

C# Word文档处理实战:基于Spire.Doc的创建、替换、转换与表格操作

简介:这份资源面向使用 C# 与 .NET 进行 Word 文档自动化处理的开发者,重点解决在无 Microsoft Word 环境下创建、修改和操作文档的需求。包内提供 Spire.Doc 的附加使用 Demo,并附带 Spire.License.dll 授权文件,可激活无限制使用…

2026/10/18 12:41:33 阅读更多 →
Excel批量生成SQL脚本工具:POI+JDBC实现数据迁移提效

Excel批量生成SQL脚本工具:POI+JDBC实现数据迁移提效

简介:这是一份面向Java开发者与数据库运维人员的数据处理工具源码包,用于将Excel表格数据自动解析并生成可执行的SQL脚本,再通过JDBC连接写入目标数据库,适用于数据迁移、批量导入与数据分析等场景。压缩包共56个文件,…

2026/10/18 12:41:33 阅读更多 →
汽车制造数据孤岛怎么破?多智能体协同架构实战解析

汽车制造数据孤岛怎么破?多智能体协同架构实战解析

做汽车制造数字化转型这几年,最让我头疼的不是算法精度不够,也不是算力不够,而是数据孤岛。设计部门用一套PLM,工艺部门用一套CAPP,车间MES是另一套,质量系统QMS又自己一套,采购和物流走的ERP/S…

2026/10/18 12:40:33 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →