尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从 0 到 1 打造端到端 AI 销售智能体:Spring Boot 4 + Spring AI 2.0 全栈实战复盘(含登录统计曲线图、HTTPS 上线)

从 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这类产品形态感兴趣欢迎一起交流。联系方式/链接
返回列表