[GenAI] 外接DeepSeek

deepseek 开发平台 申请一个 api key

申请 api key 的时候,只有在创建的时候才能看到完整的 key,所以创建的时候一定要妥善保存

有了 api key 后,我们就可以和 deepseek 大模型进行一个交互,这里我们用 curl 命令发送一个 POST 请求 到 DeepSeek 的接口 /chat/completions

curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-f5f93edf175c42ee8683691f8aacfdab" \
  -d '{
        "model": "deepseek-chat",
        "messages": [
          {"role": "user", "content": "你是谁?"}
        ],
        "stream": false
      }'
  • -H "Content-Type: application/json" \
    • -H 指定一个 HTTP Header。
    • Content-Type: application/json 告诉服务器:请求体是 JSON 格式的数据。
  • -H "Authorization: Bearer sk-f5f93edf175c42ee8683691f8aacfdab" \
    • 这是 认证信息
    • 使用 Bearer Token 方式授权,sk-xxx 是 API 密钥。
  • -d '{ "model": "deepseek-chat", "messages": [{"role": "user", "content": "你是谁?"}],"stream": true}'
    • 请求体(Request Body),使用 -d 传递 JSON 数据。
    • "model": "deepseek-chat":指定使用的模型名。
    • "messages": [...]:消息对象
    • "content": "你是谁?":用户发出的具体问题或对话内容。

大模型返回内容:

{
  "id": "81dddbb5-c01b-476b-a5d5-c5ac87e31b92", // 每次请求的唯一标识符(UUID)
  "object": "chat.completion",                 // 返回对象类型,这里表示是聊天补全结果
  "created": 1751766353,                       // 响应生成时间(Unix 时间戳,单位秒)
  "model": "deepseek-chat",                    // 使用的模型名称

  "choices": [                                 // 模型返回的一个或多个回答(通常只会有一个)
    {
      "index": 0,                              // 当前回答的索引(从 0 开始)
      "message": {
        "role": "assistant",                   // 消息角色,这里是 AI 助手
        "content": "我是一个智能AI助手,随时为你提供帮助和解答问题。有什么我可以帮你的吗?" // 模型生成的文本内容
      },
      "logprobs": null,                        // token 概率信息(如未启用 logprobs 则为 null)
      "finish_reason": "stop"                  // 结束原因:stop 表示正常生成结束
    }
  ],

  "usage": {                                   // 本次请求的 Token 使用情况
    "prompt_tokens": 25,                       // 用户输入占用的 token 数
    "completion_tokens": 19,                   // 模型回复占用的 token 数
    "total_tokens": 44,                        // 总共使用的 token 数
    "prompt_tokens_details": {
      "cached_tokens": 0                       // 命中缓存的 token 数(如启用 prompt 缓存机制)
    },
    "prompt_cache_hit_tokens": 0,              // 缓存命中 token 数(本次为 0,表示未命中)
    "prompt_cache_miss_tokens": 25             // 缓存未命中 token 数(本次为 25,即全部未命中)
  },

  "system_fingerprint": "fp_8802369eaa_prod0623_fp8_kvcache" // 系统/模型运行环境指纹,用于追踪模型版本等
}

当然,我们也可以开启流式回复:

curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-f5f93edf175c42ee8683691f8aacfdab" \
  -d '{
        "model": "deepseek-chat",
        "messages": [
          {"role": "user", "content": "你是谁?"}
        ],
        "stream": true
      }'

得到的回复如下:

data: {"id":"83e0da03-9eb4-4883-887c-14847e88a441","object":"chat.completion.chunk","created":1751767365,"model":"deepseek-chat","system_fingerprint":"fp_8802369eaa_prod0623_fp8_kvcache","choices":[{"index":0,"delta":{"content":"我是一个"},"logprobs":null,"finish_reason":null}]}


...


data: {"id":"83e0da03-9eb4-4883-887c-14847e88a441","object":"chat.completion.chunk","created":1751767365,"model":"deepseek-chat","system_fingerprint":"fp_8802369eaa_prod0623_fp8_kvcache","choices":[{"index":0,"delta":{"content":"吗"},"logprobs":null,"finish_reason":null}]}


data: {"id":"83e0da03-9eb4-4883-887c-14847e88a441","object":"chat.completion.chunk","created":1751767365,"model":"deepseek-chat","system_fingerprint":"fp_8802369eaa_prod0623_fp8_kvcache","choices":[{"index":0,"delta":{"content":""},"logprobs":null,"finish_reason":"stop"}],"usage":{"prompt_tokens":25,"completion_tokens":19,"total_tokens":44,"prompt_tokens_details":{"cached_tokens":0},"prompt_cache_hit_tokens":0,"prompt_cache_miss_tokens":25}}

data: [DONE]

目前的大模型仅仅是简单的 输入输出,甚至连上下文都不支持。

例如下面的例子:

curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-f5f93edf175c42ee8683691f8aacfdab" \
  -d '{
        "model": "deepseek-chat",
        "messages": [
          {"role": "user", "content": "你是谁?"}
        ],
        "stream": false
      }'
curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-f5f93edf175c42ee8683691f8aacfdab" \
  -d '{
        "model": "deepseek-chat",
        "messages": [
          {"role": "user", "content": "我刚才说的啥?"}
        ],
        "stream": false
      }'

模型给出的回复:

你之前没有发送过任何内容哦~可能是消息没发送成功?你可以重新告诉我你的问题或需求,我会尽力帮你解答! 😊

🙋那有没有办法让模型支持上下文呢?

其实非常简单,只需要将之前的会话,加入到 messges 数组里面就行了,如下:

curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-f5f93edf175c42ee8683691f8aacfdab" \
  -d '{
        "model": "deepseek-chat",
        "messages": [
          {"role": "user", "content": "你知道大象么?"},
          {"role": "assistant", "content": "大象是陆地上体型最大的哺乳动物,以其智慧、社会性和标志性的长鼻子(象鼻)而闻名。它们分为非洲象和亚洲象两个主要种类,具有高度发达的家庭结构和情感能力。"},
          {"role": "user", "content": "我们刚才聊了啥?"}
        ],
        "stream": false
      }'

模型给出的回复如下:

我们刚才的对话非常简短,你问的是关于大象的基本信息。具体内容如下:  \n\n1. **你的提问**:你知道大象么?  \n2. **我的回答**:介绍了大象是陆地上最大的哺乳动物,提到它们的智慧、社会性、象鼻的功能,以及非洲象和亚洲象的区别。  \n\n然后你接着问到了**之前的聊天内容**,也就是现在这一轮对话。  \n\n如果需要更详细的大象知识(比如习性、保护现状等),或者想聊其他话题,可以随时告诉我! 😊

所以,大模型支持上下文的原理非常的简单,就是将之前的聊天记录一并给它。

posted @ 2025-09-11 13:22  Zhentiw  阅读(102)  评论(0)    收藏  举报