Skip to content

如何实现程序和 AI 大模型的集成?有哪些方式? ​

  • 标签:后端、编程导航

🏛 业务架构师 ​

程序集成大模型的方式按控制力与成本分档:

  • 官方 SDK / HTTP API:最直接,功能最全(各家新特性第一时间可用),但要处理各家的差异——多模型并存时业务代码里会长出一堆 if/else;
  • OpenAI 兼容协议:多数国产模型(DeepSeek、通义、智谱)都提供兼容端点——按 OpenAI 格式写一套,多家模型即插即用,是当前性价比最高的接入层;
  • 统一框架层(Spring AI / LangChain4j):抽象模型接口,配置切换 provider——防锁定 + 统一治理(重试、降级、监控一处收口);
  • 私有化部署(Ollama/vLLM + 开源模型):数据不出域——合规敏感场景(医疗、金融内部知识)的必选项,代价是 GPU 资源与运维能力。

我的集成架构决策:

  1. 供应商抽象必做:模型能力(chat/embedding)接口化,业务只依赖自己的接口——模型市场每季度都在洗牌,路由层是换模型的止损线;
  2. 降级链配置化:主模型超时/限流自动切备用模型(国外→国产),AI 服务的可用性 SLA 要靠多供应商保障,单一供应商的限流就是你的业务上限;
  3. 成本与合规前置:token 计量埋进调用层(按用户/功能统计成本)、敏感数据出域审查——集成方式不只是技术选型,是成本结构与合规边界的定义。

一句话:集成方式的演进方向是——协议标准化(OpenAI 兼容)、供应商抽象化(框架层)、能力商品化(按量付费),业务侧保留随时换模型的自由。

🏗 系统架构师 ​

程序与大模型集成的方式按"控制权由低到高"排:

  • HTTP API 直接调用:最原始,OpenAI 兼容的 /chat/completions 接口,自己管重试、超时、密钥、流式解析——学习协议有价值,工程上重复造轮子;
  • 官方/第三方 SDK:OpenAI Java SDK、LangChain4j 等,封装请求响应,但各家 API 不统一;
  • Spring AI 框架集成(我的选择):ChatModel 抽象 + 自动配置 + Starter,供应商可换,与 Spring 生态(事务、监控、配置中心)无缝;
  • 本地模型集成:Ollama/LM Studio/vLLM 部署开源模型,OpenAI 兼容端点接入——数据不出域;
  • Function Calling / Tool Calling 协议:不止"调模型",让"模型调程序"——注册工具描述,模型决策调用,程序执行后回填结果,这是 Agent 的基础;
  • MCP 标准协议:工具生态的统一接入层,客户端/服务端解耦,跨应用复用工具;
  • RAG 集成:Embedding API + 向量库,知识注入而非参数注入。

架构关注点(比方式更重要):

  • 流式:LLM 生成慢(秒级),必须 SSE/流式返回,否则用户体验和网关超时都过不去;
  • 超时重试:LLM 延迟方差大(P99 可能 30s+),超时要按阶段配(首 token / 全量);
  • 成本控制:token 计费,模型分级路由 + 缓存高频问题;
  • 密钥治理:统一网关代理 LLM 调用,密钥不落应用。

💻 全栈开发专家 ​

本质就一条路:调大模型的 HTTP API(绝大多数兼容 OpenAI 协议),工程上分四种落地姿势:

1. 直接 HTTP 调用(理解原理用):

java
// POST https://api.openai.com/v1/chat/completions
// body: {"model":"deepseek-chat","messages":[...],"stream":true}
WebClient.create(baseUrl).post().uri("/chat/completions")
    .bodyValue(Map.of("model", "deepseek-chat",
                      "messages", messages, "stream", true))
    .retrieve().bodyToFlux(String.class);   // SSE 流式

2. 官方/三方 SDK:openai-java、各厂商 SDK——封装好但绑死厂商。

3. Spring AI 统一抽象(我的主选):一套 ChatClient API,换模型只换 starter 和配置,还白拿 Advisor/工具/RAG 生态。

4. 本地/私有化部署:Ollama(开发联调)、vLLM(生产级推理服务,OpenAI 兼容 API)——数据不出域时用。

工程上必须处理的四件事(比接入方式更重要):

  1. 超时与重试:LLM 首 token 延迟 1~5 秒很正常,普通 3 秒超时会误杀,读超时要放宽到 30s+,流式按"两个 chunk 间隔"控制;
  2. 限流降级:厂商 QPM 配额、429 错误的退避重试、多模型互备;
  3. Key 管理:环境变量/KMS,绝不进代码库;
  4. 成本可观测:每次调用记录 prompt/completion token 数,按用户/会话聚合出账单预警。