臭名昭著aTrust隔离计划1.臭名昭著aTrust隔离计划2.VPN原理与aTrust隔离网络实践3.docker-easyconnect到底做了什么4.TUN(tunnel-隧道-虚拟网卡)模式
个人项目
personal(个人展示)GitHub Actions 自动部署个人展示项目
基于Quartz搭建的个人博客1.Quartz个人博客使用教程2.使用 rsync 增量部署 Quartz 博客3.使用 GitHub Actions 自动部署 Quartz 博客5.域名绑定6.CDN加速Obsidian、双向链接与知识图谱
旅行
行程攻略青岛三日游行程攻略
前端
NginxNginx配置与反向代理入门
Nodenpm与npx的区别
中华财险-公司项目
对外接口文档
基础数据码表对外接口(仅支持rpc调用)业务码表对外接口应用主数据对外接口
基础运营查询版本更新日志详情消息中心对外接口站内信对外接口站内信模板配置手册
权限中心权限中心对外接口文档(最新)权限中心对外接口文档前端ACL-CORE FACADE依赖版本
审计中心审计中心对外接口文档audit-center-facade版本
审批中心工作流迁审批流现状工作流迁审批流API能力替换方案老审批流接口文档审批中心接口文档审批中心业务回调FAQ
账号中心内部系统对接单点登录内部系统对接认证中心三方网页应用登录授权账号中心对外接口文档前端账号中心RPC接口文档账户变更对外广播消息文档账户中心对外接口HRMS外部员工变更广播消息文档HRMS外部员工对外接口
组织员工岗位🔥机构映射SDK接口文档员工岗位变更通知说明组织机构管营一体概念与用法组织员工对外广播消息文档组织员工岗位对外接口文档组织员工岗位对外接口文档前端组织员工岗位数据模型组织员工主数据业务场景案例organization-facade版本
hrms(大型人力资源外包管理系统)
项目架构说明HRMS Maven模块与依赖说明
项目说明0.流程中心模块0.组织模块说明1.业务线模块2.计划模块3.项目模块4.协议模块5.供应商模块6.合约域模块7.外包人员模块*核心:外包人员生命周期
项目运维外包人员项目编制差异排查与修复2.HRMS相关问题排查4.修改externalId(externalId和accountId不一致)
需求-系分
1.内部转外包0723外包人员关联历史内部账号系分新增外包人员关联历史账号内容(紧急0723上线)需求
2.工作岗位0820工作岗位0820需求工作岗位0820需求-系分
3.用工模式调整0917内部人员转外包用工系统需求2内部人员转外包用工系统需求-系分
sso(账号中心-单点登录)
项目架构说明aboss-sso项目架构入门AOP统一日志打印链路Maven多模块项目高级知识OAuth2.0
项目说明1.SSO-OAuth2.0与IDaaS登录流程2.外部账号创建流水号并发问题分析
AI
使用说明
第三方插件&技能简介Archify使用与安装指南Ponytail使用指南
CodexCodex CLI与IDE区别及使用指南Codex Hook单独配置与提交通知Codex MCP安装与使用指南Codex第三方插件安装与使用指南
Agent开发1.LLM、Token、上下文窗口与模型参数2.大模型 API、请求参数与响应结构3.Spring AI ChatClient4.Prompt、System Prompt、Prompt 模板6.结构化输出、JSON Schema7.SSE 流式响应8.会话 ID、聊天记录、Redis9.超时、重试、限流、降级10.完成可运行聊天接口
GitGit常用命令与Obsidian推送排查
Java
面试题Java基础与集合面试题
AtomicInteger原子计数与并发安全ConcurrentHashMap并发安全与计数Java线程、线程池与Future
python
基础Python基础语法
HTTPXHRMS员工详情接口调用(Python HTTPX)

一、💡 一句话理解

核心结论

API 是调用入口,请求参数是你告诉模型“使用什么模型、处理什么内容、遵循什么规则”,响应结构则是模型返回的回答、状态、请求编号和 Token 用量。

可以把一次大模型调用记成:

准备 HTTP 请求
  → 携带身份认证和请求参数
  → 发送给模型服务
  → 接收 JSON 或流式响应
  → 提取回答并返回给业务系统

本文以通用 HTTP/JSON 方式讲解,并用 DeepSeek 兼容 OpenAI 格式的 Chat Completions API 作示例。不同厂商的接口名称和字段可能不同,实际开发时应以对应厂商的官方文档为准。

二、🧭 理论:它是什么

2.1 大模型 API 是什么

API 是 Application Programming Interface 的缩写,中文通常叫“应用程序编程接口”。

它可以理解为模型服务提供的一扇标准窗口:应用程序按照约定的地址、请求格式和认证方式发送请求,模型服务再按照约定返回结果。

大模型 API 通常建立在 HTTP 和 JSON 之上,因此 Java、Python、JavaScript 等语言都可以调用。

2.2 一次请求由什么组成

请求部分示例作用
请求方法POST表示提交一次生成请求
URL/chat/completions指定调用哪个接口
请求头Authorization进行身份认证
请求头Content-Type: application/json说明请求体格式
请求体modelmessages提供模型、问题和其他配置

在大模型调用中,最重要的通常是请求头和 JSON 请求体。

2.3 请求参数和模型参数不是一回事

“请求参数”是本次调用时传入的配置,例如 modelmessages 和输出长度限制。

“模型参数”则是模型训练后形成的内部数值,属于模型本身的能力结构。

概念发生时间示例
模型参数训练模型时形成模型内部的大量权重数值
请求参数每次调用时传入modelmessagesstream

三、⚙️ 理论:它是怎么工作的

3.1 请求参数的主要类别

参数类别常见字段作用
模型选择model指定使用哪个模型
输入内容messages提供问题、上下文和角色信息
生成控制温度、最大输出长度等控制回答的随机性和长度
输出格式JSON Schema、结构化输出约束模型返回的数据格式
工具调用tools允许模型调用外部函数或系统能力
流式控制stream决定一次性返回还是边生成边返回

不同厂商的字段名称不完全相同。例如,OpenAI Responses API 使用 input,而 DeepSeek 的 Chat Completions API 使用 messages。因此不能只背参数名,要结合实际接口文档理解参数含义。

3.2 响应结构的主要组成

一个完整响应通常包含四类信息:

响应
├── 身份信息:id、model
├── 状态信息:status、finish_reason
├── 内容信息:回答文本、结构化对象或工具调用
└── 用量信息:输入 Token、输出 Token、总 Token
  • id:本次请求的唯一标识,排查问题时很有用。
  • status:本次生成是否完成。
  • outputchoices:模型真正生成的内容,字段名取决于 API 类型;DeepSeek Chat Completions 使用 choices
  • usage:本次请求消耗的 Token 数量,可用于成本统计和限流分析。

3.3 普通响应和流式响应

普通响应是等待模型生成完成后,一次性返回完整 JSON。

流式响应则是边生成边返回文本片段,最后再返回结束事件。它适合聊天页面,但后端解析方式不同:普通响应通常解析一个 JSON,流式响应通常解析多个 SSE 事件。

四、🚀 实践:可以拿来干什么

理解 API、请求参数和响应结构后,可以完成:

  • 在 Java 后端中调用大模型完成问答。
  • 根据业务场景控制输出长度、格式和风格。
  • 实现普通聊天接口和 SSE 流式聊天接口。
  • 统计 Token 用量、调用次数和成本。
  • 处理超时、重试、限流、降级和错误响应。
  • 为 Tool Calling、RAG 和 Agent 工作流提供模型调用基础。

推荐由后端屏蔽第三方模型的原始响应,返回自己的业务响应结构。这样将来更换模型供应商时,前端接口不需要跟着大幅修改。

五、🔍 最小例子

5.1 用 HTTP 调用模型

下面的示例解决“向 DeepSeek 发送一句话并获得回答”这个最小问题:

export DEEPSEEK_API_KEY="你的 DeepSeek API Key"
 
curl https://api.deepseek.com/chat/completions \
  -H "Authorization: Bearer $DEEPSEEK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-flash",
    "messages": [
      {
        "role": "user",
        "content": "用一句话解释什么是 API"
      }
    ],
    "thinking": {
      "type": "disabled"
    },
    "stream": false
  }'

这个请求中,Authorization 用于身份认证,model 指定模型,messages 指定对话内容,stream: false 表示一次性返回完整结果。DeepSeek 官方当前提供 deepseek-v4-flashdeepseek-v4-pro,并使用 https://api.deepseek.com/chat/completions 调用 Chat API。DeepSeek 官方快速开始

5.2 读取简化后的响应

{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "model": "deepseek-v4-flash",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "API 是应用程序之间进行通信的接口。"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 20,
    "completion_tokens": 12,
    "total_tokens": 32
  }
}

DeepSeek Chat Completions 的回答通常从 choices[0].message.content 读取,Token 用量从 usage 读取。这是帮助理解的简化示意,不代表所有字段都会在每次响应中出现。业务代码需要根据实际 API 文档定义 DTO,并处理可选字段、错误状态和空内容。

5.3 Java 后端中的调用链

Controller 接收用户问题
  → Service 组装请求参数
  → HTTP Client 调用模型 API
  → 解析响应结构
  → 提取模型文本
  → 转换成业务响应
  → 返回给前端

后端可以对外统一返回:

{
  "conversationId": "conversation-001",
  "answer": "API 是应用程序之间的通信接口。",
  "usage": {
    "inputTokens": 20,
    "outputTokens": 12
  }
}

这样前端只依赖自己的接口,不需要知道第三方模型响应中 outputcontent 等内部嵌套结构。

六、⚠️ 边界与常见误区

  • 请求头不是请求体参数,Authorization 通常放在 Header 中。
  • model 写错会导致请求失败,模型名称必须以供应商实际提供的名称为准。
  • 不同厂商的 inputmessagescontent 结构可能不同;DeepSeek 使用 messages
  • DeepSeek 的回答通常位于 choices[0].message.content,不能假设所有接口都使用 response.content
  • 流式响应和普通响应不能使用同一种解析方式。
  • 即使要求模型返回 JSON,后端仍然需要进行 JSON 解析、字段校验和异常处理。
  • 模型生成的是概率性结果,不代表事实一定正确。
  • API Key 不能写死在 Java 源码、前端代码或 Git 仓库中。
  • 重试请求可能重复扣费;如果后续接入工具调用或写操作,还可能造成重复业务执行。
  • 生产环境应记录请求 ID、响应状态、耗时和用量,但不要记录 API Key 或不必要的敏感内容。

七、📌 总结

  • 快速回顾:API 是应用程序调用大模型的标准入口。
  • 快速回顾:请求通常由 URL、请求方法、请求头和 JSON 请求体组成。
  • 快速回顾:请求参数负责描述模型、输入内容和生成规则。
  • 快速回顾:响应结构通常包含回答内容、状态、请求 ID 和 Token 用量。
  • 快速回顾:普通响应一次返回完整结果,流式响应分片返回结果。
  • 快速回顾:Java 后端应封装第三方 API,向前端返回稳定的业务结构。

记忆句:请求把问题和规则交给模型,响应把回答和调用结果交还给业务系统。

相关笔记:1.LLM、Token、上下文窗口与模型参数0-学习路线