【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分 ...

打印 上一主题 下一主题

主题 1869|帖子 1869|积分 5607



  
前言

最近DeepSeek非常火,作为一枚对前言技能非常关注的程序员来说,天然都想对接DeepSeek的API来体验一把。
目前DeepSeek对接API是收费的,需要充值获取Tokens,在对话和推理过程会斲丧token。
免费体验

停止2025年2月8日注册都还会赠送10元,一个月有效期,相当于有一个免费体验期,10元够发起很多次对话了。

具体能够发起多少次对话,我们不妨就基于这个题目,让DeepSeek给我们解答下。
根据ds给出得答案,10元大概能够调用1到5千次,那位小伙伴解答下是否精确。

API-Key申请

申请非常简朴,直接在首页点击进入【API开辟平台】>【API keys】>【创建API key】>【输入一个名称】,创建完成后,还可以修改名称,以及删除。

首次调用API

拿到API-Key之后,可以点击接口文档,使用首次调用API-Python例子开始尝试调用返回内容。
  1. # Please install OpenAI SDK first: `pip3 install openai`
  2. from openai import OpenAI
  3. client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")
  4. response = client.chat.completions.create(
  5.     model="deepseek-chat",
  6.     messages=[
  7.         {"role": "system", "content": "You are a helpful assistant"},
  8.         {"role": "user", "content": "Hello"},
  9.     ],
  10.     stream=False
  11. )
  12. print(response.choices[0].message.content)
复制代码
为什么deepseek是安装openAI SDK
这个有点意思,博主搜了下,得到答复是:DeepSeek使用OpenAI的SDK和API主要是因为OpenAI的大模型在业界具有领先地位,其标准和规范被广泛接受和使用。‌
基本概念

最小单位

Token 是模型用来表现天然语言文本的的最小单位,可以是一个词、一个数字或一个标点符号等。
DS将根据模型输入和输出的总 token 数举行计量计费。
推理模型

deepseek-reasoner 是 DeepSeek 推出的推理模型。在输出终极答复之前,模型会先输出一段头脑链内容,以提拔终极答案的准确性。我们的 API 向用户开放 deepseek-reasoner 头脑链的内容,以供用户查看、展示、蒸馏使用。
在每一轮对话过程中,模型会输出头脑链内容(reasoning_content)和终极答复(content)。在下一轮对话中,之前轮输出的头脑链内容不会被拼接到上下文中,如下图所示:

智能体

创建过AI应用和智能体的小伙伴都知道,都是基于界面可视化页面举行创建和使用。
对于API,现实上在代码层面举行智能体创建,底子的元素包罗chat的人设(提示词Prompt)和用户提问两部分。
代码层对话

下面就创建一个《李白》智能体举行对话。
脚色设定
先给智能体举行脚色定位,就是给智能体加上提示词Prompt。
当然你也可以根据创建智能体一样举行具体设定,这里博主就简朴一句话给智能体举行绑定。
一样平常脚色设定的提示词是不会变的,只会在调优或者未能达到自己满意情况下举行提示词调整。
   你是一位唐朝大诗人李白,你只能答复李白相关的题目,超出李白范围的友好提示。
  用户对话
这里就是界面输入框用户输入的内容。

自定义界面

基于上面两个关键参数,就能够定制属于自己的一个智能体对话界面。
前提需要封装好一个api接口方法,传递用户提问的参数,末了返回DeepSeek响应的内容。
后端API
将上面代码设置成路由,可举行Get请求的API接口。
温馨提示:输出内容记得Unicode转义,同时记得设置可跨域-flask_cors。

主要依靠Flask举行路由设置,需要先安装。
  1. from flask import Flask, request, jsonify
  2. from flask_cors import CORS
  3. from openai import OpenAI
  4. import json
  5. app = Flask(__name__)
  6. cors = CORS(app)  # 这将允许所有域的跨域请求
  7. # 配置OpenAI客户端
  8. openai_client = OpenAI(api_key="你的deepseek的key", base_url="https://api.deepseek.com")
  9. # 系统提示(用于OpenAI API交互)
  10. system_prompt = "你是一位唐朝大诗人李白,你只能回答李白相关的问题,超出李白范围的友好提示。"
  11. # 用户内容(这里可以固定,也可以从GET请求的参数中获取,但为了简化,我们固定它)
  12. # 注意:在实际应用中,用户内容应该从请求参数中安全地获取和处理
  13. # user_content = "输出一首关于月亮的李白风格的诗"
  14. @app.route('/generate_text/<user_content>', methods=['GET'])
  15. def generate_text(user_content):
  16.     try:
  17.         # 与OpenAI API交互,生成文本
  18.         response = openai_client.chat.completions.create(
  19.             model="deepseek-chat",
  20.             messages=[
  21.                 {"role": "system", "content": system_prompt},
  22.                 {"role": "user", "content": user_content},
  23.             ],
  24.             stream=False
  25.         )
  26.         
  27.         # 从响应中提取生成的文本(这里假设响应结构是已知的)
  28.         generated_text = response.choices[0].message.content
  29.         # 默认输出的是编码值:\u300a\u6708\u4e0b\u72ec\u914c\u300b
  30.         
  31.         # 返回生成的文本作为API的响应
  32.         #return jsonify(json.loads(json.dumps({"generated_text": generated_text})))
  33.         return jsonify({"generated_text": generated_text})
  34.     except Exception as e:
  35.         # 在出现异常时返回错误信息
  36.         return jsonify({"error": str(e)}), 500
  37. if __name__ == '__main__':
  38.     app.run(debug=True)
复制代码

前端代码
同样是使用DeepSeek举行代码生成,直接生成一个对话vue3前端界面,需要举行多轮对话举行调整满意的vue代码。
然后举行api接口调用测试效果。
  1. <template>
  2.         <div class="chat-interface">
  3.                 <el-card shadow="hover">
  4.                 <div class="chat-history">
  5.                         <div v-for="(message, index) in messages" :key="index" class="chat-message">
  6.                         <div :class="{'message-user': message.type === 'user', 'message-bot': message.type === 'bot'}">
  7.                                 <span class="avatar" :style="{ backgroundColor: message.type === 'user' ? '#409EFF' : '#F56C6C' }">
  8.                                         {{ message.type === 'user' ? '我' : '李白' }}
  9.                                 </span>
  10.                                 <div class="content">
  11.                                 {{ message.content }}
  12.                                 </div>
  13.                         </div>
  14.                         </div>
  15.                 </div>
  16.                 <div class="input-area">
  17.                         <el-input v-model="userInput" placeholder="输入你的问题" class="input-box" clearable></el-input>
  18.                         <el-button type="primary" @click="sendMessage" :loading="loadingFlag">发送</el-button>
  19.                 </div>
  20.                 </el-card>
  21.         </div>
  22. </template>
  23. <script setup lang="ts" name="batchPortfolio">
  24. import { ref } from 'vue';
  25. import axios from 'axios';
  26. const loadingFlag=ref(false)
  27. const userInput = ref('');
  28. const messages: { type: 'user' | 'bot'; content: string }[]= ref([]);
  29. const sendMessage = async () => {
  30.         if (userInput.value.trim()) {
  31.                 messages.value.push({ type: 'user', content: `${userInput.value}` });
  32.                 loadingFlag.value=true;
  33.                 const response = await axios.get(`http://127.0.0.1:5000/generate_text/${userInput.value}`);
  34.                 loadingFlag.value=false;
  35.                 // 机器人回复
  36.                 setTimeout(() => {
  37.                         messages.value.push({ type: 'bot', content: `${response.data.generated_text}` });
  38.                 }, 100);
  39.                
  40.                 // // 模拟机器人回复
  41.                 // setTimeout(() => {
  42.                 //         messages.value.push({ type: 'bot', content: `机器人回复: ${userInput.value.split(' ').join(' ')} 的回复` });
  43.                 // }, 1000);
  44.                 userInput.value = '';
  45.         }
  46. };
  47. </script>
  48. <style scoped lang="scss">
  49. .chat-interface {
  50.   max-width: 600px;
  51.   margin: 0 auto;
  52.   padding: 20px;
  53.   box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
  54.   border-radius: 8px;
  55.   background-color: #fff;
  56. }
  57. .chat-history {
  58.   padding: 16px;
  59.   overflow-y: auto;
  60.   max-height: 400px;
  61.   border-bottom: 1px solid #ebeef5;
  62. }
  63. .chat-message {
  64.   margin-bottom: 16px;
  65.   align-items: center;
  66. }
  67. .message-user {
  68.   display: flex;
  69.   align-items: center;
  70.   justify-content: flex-end;
  71.         line-height: 40px;
  72.         text-align: center;
  73.         color: #fff;
  74. }
  75. .message-bot {
  76.   display: flex;
  77.   align-items: center;
  78.         line-height: 40px;
  79.         text-align: center;
  80.         color: #fff;
  81. }
  82. .avatar {
  83.   width: 40px;
  84.   height: 40px;
  85.   border-radius: 50%;
  86.   margin-right: 12px;
  87. }
  88. .message-user .avatar {
  89.   background-color: #409EFF;
  90. }
  91. .message-bot .avatar {
  92.   background-color: #F56C6C;
  93. }
  94. .content {
  95.   max-width: calc(100% - 52px); /* 40px avatar + 12px margin */
  96.   padding: 8px 16px;
  97.   border-radius: 4px;
  98.   background-color: #f0f0f0;
  99.   color: #333;
  100. }
  101. .message-bot .content {
  102.   background-color: #fff3e0;
  103.   justify-content: flex-start;
  104. }
  105. .message-user .content {
  106.   background-color: #e6f7ff;
  107. }
  108. .input-area {
  109.   display: flex;
  110.   padding: 16px;
  111.   border-top: 1px solid #ebeef5;
  112. }
  113. .input-box {
  114.   flex: 1;
  115.   border-radius: 4px;
  116. }
  117. .el-button {
  118.   margin-left: 12px;
  119. }
  120. </style>
复制代码

总结

DeepSeek的API对接,绝对是博主目前对接最快的一个,非常轻巧清晰,没有那么多花里胡哨的东西和文档,从创建api-key到直接调用api和返回数据不到一分钟就搞定。
当然,后续生成vue对话界面肯定需要自己花点时间多轮对话生成,以及python封装成路由访问的api。同样也是可以使用DS完成。
推荐文章

【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用
【AI大模型】为什么说更倾向于使用DeepSeek,清爽轻巧,输出内容质量高,清晰明白得思考过程,真的值得拥有
【大模型】DeepSeek与chatGPT的区别以及自身的优势

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

怀念夏天

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表