大模型调用: DeepSeek、Coze

631 阅读5分钟

引言

在大模型技术飞速发展的今天, 前端工程师也逐渐站上了与 AI 技术深度融合的前沿。越来越多的前端项目开始引入大模型能力, 不再局限于传统交互, 而是试图借助 AI 提升用户体验、增强数据处理能力。幸运的是, 大多数模型服务商都通过 HTTP API 提供了标准化的接口, 使得前端调用变得简单。本节内容将以 DeepSeekCoze 两个平台为例, 带你一步步理解和掌握大模型 API 的基本调用方法。

一、DeepSeek

我们先从 DeepSeek 开始....

1.1 为什么选择 DeepSeek

  • 火: 最近国内哪个大模型得到最多人关注, 那毫无疑问应该是 DeepSeek
  • 效果也不错: DeepSeek v3R1 推出也有挺长时间了, 模型在性能和效果上都表现极其优越
  • 便宜: 它不仅以极低的成本实现了和行业巨头相媲美的推理能力和性能
  • 氪金方便: 因为是国内, 充钱还是很方便的, 支付宝微信都是 OK

1.2 申请 API Keys

要调用 DeepSeek 开发接口, 免不了要注册 DeepSeek 开发平台、氪金、创建 API Keys...

  1. 注册账号: 进入 DeepSeek 官方 API 开发平台 根据提示完成注册登录

image

  1. 刚进入界面如下, 就是常规的数据统计, 可以直观的查看当前账户的消费情况

image

  1. 然后先氪个金, 因为要调用接口是需要消费 Token, 根据消耗的 Token 则需要一定的费用! 如果是第一次氪金还需要进行实名认证

image

  1. 如何计价: 两种模型计价情况如下, 扣费规则为 扣减费用 = token 消耗量 * 模型单价, 费用将直接从充值余额或赠送余额中进行扣减。 具体计价说明可查看 官方文档

image

补充: 如果你是第一次接触大模型 API 调用, 需要了解一下 Token 的概念。在大型语言模型中, Token 是指文本中的一个最小单位。通常, 一个 Token 可以是一个单词、一个标点符号、一个数字、一个符号等。针对我们的提示词, 大模型背后是会先进行拆分成多个 Token, 大模型的计价就是根据拆分后的 Token 来进行计价。在每次 API 调用成功后, 我们可以通过返回结果的 usage 得到 Token 的消耗量。

  1. 创建 API Keys: API Keys 它是我们的应用调用 API 的许可凭证。根据下图来创建 API Keys

image

1.3 常规调用

大模型接口其实都是常规的 RESTful API 接口, 也就正常调用即可, 只需要 根据文档 设置正确的参数、请求头即可!

如下代码代码定义了一个方法 send 使用 fetch 调用 DeepSeek 对话接口, 该方法在浏览器和 Node 都是通用的:

  1. 根据官方 API 文档, 需要将 Deepseek Platform 申请的 API Keys 放在 Authorization 请求头字段中传给服务器以完成权限验证。至于项目中 API Keys 要如何管理这就随意了, 根据你自己项目来, 一般都是通过环境变量来进行配置的, 但是这 Key 肯定是不能泄露给用户的
  2. 剩下其实就是常规的 POST 请求的调用, 唯一需要关注的是请求头的组装, 本案例也就就涉及了三个参数
  • model: 指定本次请求使用何种模型, Deepseek Platform 也就支持两个模型。其中 deepseek-chat 是基础模型, 目前版本是 v3, deepseek-reasoner 是深度思考模型, 目前版本号是 r1。与基础模型相比, 深度思考模型的推理能力更强, 相应的响应速度要慢一些, 价格也要贵不少。这里我们先使用基础模型。
  • messages: 本次请求携带的消息(对话), messages 字段是要发送给大模型的具体消息, role 字段是一个枚举字段, 可选的值分别是 systemuserassistant, 依次表示该条消息是系统消息(也就是我们一般俗称的提示词)、用户消息和 AI 应答消息。其中 userassistant 消息是必须成对的, 以表示聊天上下文, 且最后一条消息必须是 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 文档

  1. id: 本次对话的唯一标识符
  2. created: 本轮对话创建时间
  3. model: 本轮对话使用的模型
  4. choices: 本轮对话, 模型给出的回复信息
  5. object: 用于 标识返回数据的类型 可帮助开发者理解响应结构, 告诉开发者如何解析响应
  6. usage: 本轮对话 Token 消耗情况, 从该结果可以计算出我们这一次调用的费用消耗
  7. system_fingerprint: 模型/系统版本的唯一标识符, 用于追踪更新或调试

image

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); // 打印返回内容

也是能正常返回的:

image

二、Coze

下面我们再看另一个平台 --- Coze(扣子), 该平台是字节推出的一款 AI 机器人和智能体创建平台, 旨在帮助用户快速构建、调试和优化 AI 聊天机器人应用程序。

严格来说, Coze 不同于 Deepseek Platform, 因为它不仅提供 API, 更重要的是集成了创建智能体和 AI 应用机器人的能力。智能体和 AI 机器人可以理解为上层应用, API 则是它的底层。

好在的是, Coze 允许我们将创建的 AI 机器人和智能体发布为 API, 供第三方进行调用。

image

2.1 创建智能体

  1. 首先先注册登录: coze

image

  1. 创建智能体: 工作空间 --> 项目开发 --> 创建 --> 创建智能体

image

  1. 编辑智能体并发布:
  • Coze 智能体允许接受参数, 所以这里在 人设与回复逻辑 中只输入模版字符串 {{prompt}} 这样的话在调用智能体的时候就可以通过 prompt 来为智能体传数据
  • 模型这里选择 豆包.1.5 Pro 32k
  • 最终发布为 API, 这样的话外部环境就可以通过 Coze 官方开放接口来调用智能体

image

  1. 获取智能体 ID: 发布完成后会回到智能体编辑页面, 从地址栏 URL 中我们可以获取到智能体的 ID, 后面我们需要通过该 ID 去调用我们的智能体

image

  1. 创建访问令牌: 接下来选择 扣子 API --> 授权 --> 个人访问令牌 --> 新令牌 --> 个人访问令牌, 如下图所示, 这里我把权限拉满

image

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); // 打印返回内容
};

结果就不看了, 因为这里如果不是采用非流式输出, 在请求结束时居然拿不到具体的对话内容, 需要通过轮训才能查看到回话结果...

image

三、参考