1. 前言

前面说过,大模型开发并不是在浏览器中跟AI聊天。而是通过访问模型对外暴露的API接口,实现与大模型的交互。
所以要学习大模型应用开发,就必须掌握模型的API接口规范。

目前大多数大模型都遵循OpenAI的接口规范,是基于Http协议的接口。因此请求路径、参数、返回值信息都是类似的,可能会有一些小的差别。具体需要查看大模型的官方API文档。

2. 大模型接口规范

我们以DeepSeek官方给出的文档为例:

curl -X POST https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <DeepSeek API Key>" \
  -d '{
          "model": "deepseek-chat",
          "messages": [
              {
                  "role": "system",
                  "content": "You are a helpful assistant."
              },
              {
                  "role": "user",
                  "content": "Hello!"
              }
          ],
          "stream": false
      }'

在这里插入图片描述

2.1 接口说明

  • 请求方式:通常是POST,因为要传递JSON风格的参数
  • 请求URL:与平台有关
    • DeepSeek官方平台:https://api.deepseek.com/chat/completions
    • 阿里云百炼平台:https://dashscope.aliyuncs.com/compatible-mode/v1
    • 本地ollama部署的模型:http://localhost:11434
  • 请求头:开放平台都需要提供API_KEY来校验权限,本地ollama则不需要
    • Content-Type: application/json,请求参数的格式,必须是application/json,稍后解释
    • Authorization: Bearer ,上一节创建的API_KEY
  • 请求参数:JSON格式:
{
    "model": "deepseek-chat",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "Hello!"}
    ],
    "stream": false,
    "temperature": 1.0
}
  • model:模型名称,DeepSeek支持deepseek-reasoner(带思考过程)和deepseek-chat两者模型
  • messages:发送给大模型的消息,[]是数组的意思,里面可以有多条消息。消息结构:
    • content:是消息的内容
    • role:消息的角色,有system、user、assisant三种角色
      • system:是给大模型设定一个角色,比如你让她扮演你的奶奶,让她哄你睡觉
      • user:就是用户提问的问题
      • assisant:是大模型的回答
  • stream:true,代表响应结果流式返回;false,代表响应结果一次性返回,但需要等待
  • temperature:温度。越高,随机性越高;越低则随机性越低。如果需要让AI自由发挥想象创作,可以讲tempreature设置的高一点

注意,这里请求参数中的messages是一个消息数组,而且其中的消息要包含两个属性

  • role:消息对应的角色
  • content:消息内容

其中System和User消息的内容,也被称为提示词(Prompt),也就是用户发送给大模型的指令。

  • System提示词,是系统指令,给大模型设定一个角色,比如你让她扮演你的奶奶,让她哄你睡觉
  • User提示词,是用户指令,也就是用户向大模型的提问或命令

2.2 提示词角色

通常消息的角色有三种:
在这里插入图片描述

其中System类型的消息非常重要!影响了后续AI会话的行为模式。

比如,我们会发现,当我们询问这些AI对话产品“你是谁”这个问题的时候,每一个AI的回答都不一样,这是怎么回事呢?

这其实是因为AI对话产品并不是直接把用户的提问发送给LLM,通常都会在user提问的前面通过System消息给模型设定好背景:

在这里插入图片描述

所以,当你问问题时,AI就会遵循System的设定来回答了。因此,不同的大模型由于System设定不同,回答的答案也不一样。

示例:

## Role
System: 你是一家名为《黑马程序员》的职业教育培训公司的智能客服,你的名字叫小黑。
请以友好、热情的方式回答用户问题。
## Example
User: 你好
Assisant: 你好,我是小黑,很高兴认识你!😊 你是想了解我们的课程信息,
还是有其他关于职业培训的问题需要咨询呢?无论什么问题,我都会尽力帮你解答哦!

3. 会话记忆问题

这里还有一个问题:

  • 我们为什么要把历史消息都放入Messages中,形成一个数组呢?

大模型的API接口是"无状态"的,服务端不会记录用户请求的上下文。因此我们调用API接口与大模型对话时,每一次对话信息都不会保留,多次对话之间都是独立的,没有关联的。

因此大模型并不知道之前的聊天历史,也就是说大模型是没有记忆的。

测试,我询问AI一个问题:

12个苹果分给3个人,每人能分几个?

在这里插入图片描述

AI的答案是:

每人可以分到4个苹果。

我们接着问:

如果是分给4个人呢?

由于AI没有记忆,它不知道我是接着上一题问的,因此不知道要分的是12个苹果,答案就有问题:

[图片]

可以看到,AI完全不知道我们聊天的背景是上一次的分12个苹果。

那么,如何才能让AI具备记忆呢?

要想让大模型有记忆,必须在每次请求时,将之前所有对话的历史拼接好,传递给对话API接口

官方文档说明:
https://api-docs.deepseek.com/zh-cn/guides/multi_round_chat
在这里插入图片描述
在这里插入图片描述

要想让AI具备记忆,就必须把对话历史都添加到请求体中的messages数组中,像这样:

{
    "model": "deepseek-chat",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "12个苹果分给3个人,每人能分几个?直接告诉我答案"},
      {"role": "assistant", "content": "每人可以分到4个苹果。"},
      {"role": "user", "content": "如果是分给4个人呢?"}
    ],
    "stream": false
  }

测试结果:
[图片]

好了,现在我们能用图形界面的Http客户端发送http请求,调用大模型了。

但是这样还不够,如果要开发AI应用,肯定是要通过编程的方式发送Http请求,调用大模型。

4. 编程调用大模型

在这里插入图片描述

OpenAI作为全球最早,也是最火的大模型公司之一,占据了先发优势。因此其制定的API规范几乎成为了大模型API的默认规范,几乎所有的大模型API都兼容OpenAI的规范。

在任何模型的官方文档中都能看到基于OpenAI提供的SDK的代码示例,例如DeepSeek:
https://api-docs.deepseek.com/zh-cn/

本节我们来学习如何使用OpenAI提供的SDK工具来访问大模型。

4.1 基本使用

首先,我们需要安装OpenAI的SDK,以python为例:

  • 使用pip安装:pip install openai
  • 使用uv安装:uv add openai

接下来,就可以使用SDK调用任何兼容OpenAI规范的模型了,只要将base_url和api_key设定为对应的模型提供者的url和api_key即可:

from openai import OpenAI
client = OpenAI(
    api_key="sfxxxxx",
    base_url="https://api.deepseek.com"
)

print("🚀 正在调用大模型...")
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "你是一名友好的AI助教。"},
        {"role": "user", "content": "你好,你是谁?"}
    ],
    stream=False
)

print(response)

4.2 环境变量

将api_key直接写在代码中非常危险,所以通常我们都将其写入环境变量,程序运行时加载。

  1. 配置环境变量。
    在项目根目录创建一个.env文件:
    [图片]
    在其中配置自己的API_KEY,我们以Deepseek为例:
# deepseek
DEEPSEEK_API_KEY=sk-1234567890

# 阿里云
DASHSCOPE_API_KEY=sk-1234567890
  1. 安装python-dotenv。
    在项目中,我们通过python-dotenv库来读取环境变量,所以要先安装依赖:uv add python-dotenv。安装成功后,会在pyproject.toml中看到新添加的依赖:
[project]
name = "lc-course"
version = "0.1.0"
description = "Add your description here"
requires-python = ">=3.13"
dependencies = [
    "notebook>=7.5.5",
    "openai>=2.28.0",
    "python-dotenv>=1.2.2",
]
  1. 读取环境变量。
    最后,我们就可以在代码中读取环境变量了:
from openai import OpenAI
from dotenv import load_dotenv
import os

# 加载环境变量
load_dotenv()

client = OpenAI(
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url="https://api.deepseek.com"
)

print("🚀 正在调用大模型...")
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "你是一名友好的AI助教。"},
        {"role": "user", "content": "你好,你是谁?"}
    ],
    stream=False
)

print(response)
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐