引言
在大模型技术飞速发展的今天, 前端工程师也逐渐站上了与 AI 技术深度融合的前沿。越来越多的前端项目开始引入大模型能力, 不再局限于传统交互, 而是试图借助 AI 提升用户体验、增强数据处理能力。幸运的是, 大多数模型服务商都通过 HTTP API 提供了标准化的接口, 使得前端调用变得简单。本节内容将以 DeepSeek 和 Coze 两个平台为例, 带你一步步理解和掌握大模型 API 的基本调用方法。
一、DeepSeek
我们先从 DeepSeek 开始....
1.1 为什么选择 DeepSeek
- 火: 最近国内哪个大模型得到最多人关注, 那毫无疑问应该是
DeepSeek - 效果也不错:
DeepSeekv3和R1推出也有挺长时间了, 模型在性能和效果上都表现极其优越 - 便宜: 它不仅以极低的成本实现了和行业巨头相媲美的推理能力和性能
- 氪金方便: 因为是国内, 充钱还是很方便的, 支付宝微信都是
OK的
1.2 申请 API Keys
要调用
DeepSeek开发接口, 免不了要注册DeepSeek开发平台、氪金、创建API Keys...
- 注册账号: 进入 DeepSeek 官方 API 开发平台 根据提示完成注册登录
- 刚进入界面如下, 就是常规的数据统计, 可以直观的查看当前账户的消费情况
- 然后先氪个金, 因为要调用接口是需要消费
Token, 根据消耗的Token则需要一定的费用! 如果是第一次氪金还需要进行实名认证
- 如何计价: 两种模型计价情况如下, 扣费规则为
扣减费用 = token 消耗量 * 模型单价, 费用将直接从充值余额或赠送余额中进行扣减。 具体计价说明可查看 官方文档。
补充: 如果你是第一次接触大模型
API调用, 需要了解一下Token的概念。在大型语言模型中,Token是指文本中的一个最小单位。通常, 一个Token可以是一个单词、一个标点符号、一个数字、一个符号等。针对我们的提示词, 大模型背后是会先进行拆分成多个Token, 大模型的计价就是根据拆分后的Token来进行计价。在每次API调用成功后, 我们可以通过返回结果的usage得到Token的消耗量。
- 创建
API Keys:API Keys它是我们的应用调用API的许可凭证。根据下图来创建API Keys。
1.3 常规调用
大模型接口其实都是常规的 RESTful API 接口, 也就正常调用即可, 只需要 根据文档 设置正确的参数、请求头即可!
如下代码代码定义了一个方法 send 使用 fetch 调用 DeepSeek 对话接口, 该方法在浏览器和 Node 都是通用的:
- 根据官方
API文档, 需要将Deepseek Platform申请的API Keys放在Authorization请求头字段中传给服务器以完成权限验证。至于项目中API Keys要如何管理这就随意了, 根据你自己项目来, 一般都是通过环境变量来进行配置的, 但是这Key肯定是不能泄露给用户的 - 剩下其实就是常规的
POST请求的调用, 唯一需要关注的是请求头的组装, 本案例也就就涉及了三个参数
model: 指定本次请求使用何种模型,Deepseek Platform也就支持两个模型。其中deepseek-chat是基础模型, 目前版本是v3,deepseek-reasoner是深度思考模型, 目前版本号是r1。与基础模型相比, 深度思考模型的推理能力更强, 相应的响应速度要慢一些, 价格也要贵不少。这里我们先使用基础模型。messages: 本次请求携带的消息(对话),messages字段是要发送给大模型的具体消息,role字段是一个枚举字段, 可选的值分别是system、user和assistant, 依次表示该条消息是系统消息(也就是我们一般俗称的提示词)、用户消息和AI应答消息。其中user和assistant消息是必须成对的, 以表示聊天上下文, 且最后一条消息必须是user消息, 而system消息的条数和位置一般没有限制。消息体的content则是具体的消息文本内容。stream: 是否开启流式输出
const ENDPOINT = 'https://api.deepseek.com/chat/completions';
const API_KEY = 'sk-*************************************5e7';
const send = async () => {
// 组装请求头
const headers = {
'Content-Type': 'application/json',
Authorization: `Bearer ${API_KEY}`, // 需要通过请求头(Authorization)设置 API Keys
};
// 组装请求体
const payload = {
model: 'deepseek-chat', // 选择模型
messages: [
{ role: 'user', content: '你好 Deepseek' }
], // 消息体
stream: false, // 是否开启流式输出
};
// 发送请求(其实就是正常发个 POST 请求)
const response = await fetch(ENDPOINT, {
method: 'POST',
headers,
body: JSON.stringify(payload),
});
// 等待结果的返回
const res = await response.json();
console.log(res); // 打印返回内容
};
如下是返回结果, 关键字段说明, 更多内容直接查阅 API 文档
id: 本次对话的唯一标识符created: 本轮对话创建时间model: 本轮对话使用的模型choices: 本轮对话, 模型给出的回复信息object: 用于标识返回数据的类型可帮助开发者理解响应结构, 告诉开发者如何解析响应usage: 本轮对话Token消耗情况, 从该结果可以计算出我们这一次调用的费用消耗system_fingerprint: 模型/系统版本的唯一标识符, 用于追踪更新或调试
1.4 使用 openai SDK 调用接口
上面是常规调用方式, DeepSeek 也是允许我们使用 openai SDK 进行调用, 需要注意的是该方式只能在 Node 端使用, 演示代码如下:
import OpenAI from 'openai';
// 创建实例
const openai = new OpenAI({
apiKey: 'sk-***************************e7',
baseURL: 'https://api.deepseek.com',
});
const completion = await openai.chat.completions.create({
model: 'deepseek-chat', // 选择模型
messages: [
{ role: 'user', content: '你好 Deepseek' }
], // 消息体
stream: false, // 是否开启流式输出
});
console.log(completion); // 打印返回内容
也是能正常返回的:
二、Coze
下面我们再看另一个平台 --- Coze(扣子), 该平台是字节推出的一款 AI 机器人和智能体创建平台, 旨在帮助用户快速构建、调试和优化 AI 聊天机器人应用程序。
严格来说, Coze 不同于 Deepseek Platform, 因为它不仅提供 API, 更重要的是集成了创建智能体和 AI 应用机器人的能力。智能体和 AI 机器人可以理解为上层应用, API 则是它的底层。
好在的是, Coze 允许我们将创建的 AI 机器人和智能体发布为 API, 供第三方进行调用。
2.1 创建智能体
- 首先先注册登录: coze
- 创建智能体:
工作空间-->项目开发-->创建-->创建智能体
- 编辑智能体并发布:
Coze智能体允许接受参数, 所以这里在人设与回复逻辑中只输入模版字符串{{prompt}}这样的话在调用智能体的时候就可以通过prompt来为智能体传数据- 模型这里选择
豆包.1.5 Pro 32k - 最终发布为
API, 这样的话外部环境就可以通过Coze官方开放接口来调用智能体
- 获取智能体
ID: 发布完成后会回到智能体编辑页面, 从地址栏URL中我们可以获取到智能体的ID, 后面我们需要通过该ID去调用我们的智能体
- 创建访问令牌: 接下来选择
扣子 API-->授权-->个人访问令牌-->新令牌-->个人访问令牌, 如下图所示, 这里我把权限拉满
2.2 调用智能体 API
至于接口调用就和上文的 DeepSeek 基本差不多, 也就是参数需要根据 官方 API 文档 来进行调整
const ENDPOINT = 'https://api.coze.cn/v3/chat';
const API_KEY = 'pat_YnA******************************************NJfpp';
const send = async () => {
// 组装请求头
const headers = {
'Content-Type': 'application/json',
Authorization: `Bearer ${API_KEY}`, // 需要通过请求头(Authorization)设置 API Keys
};
// 组装请求体
const payload = {
bot_id: '74986**************72', // 智能体 ID
user_id: '123', // 这个随意
// 给智能体发送的对话内容
additional_messages: [
{
role: 'user',
content: '早上好',
content_type: 'text',
},
],
// 传给智能体的参数
custom_variables: {
prompt: '你是一个AI助手',
},
stream: false, // 是否流式输出
};
// 发送请求(其实就是正常发个 POST 请求)
const response = await fetch(ENDPOINT, {
method: 'POST',
headers,
body: JSON.stringify(payload),
});
// 等待结果的返回
const res = await response.json();
console.log(res); // 打印返回内容
};
结果就不看了, 因为这里如果不是采用非流式输出, 在请求结束时居然拿不到具体的对话内容, 需要通过轮训才能查看到回话结果...