Foxtable(狐表)用户栏目专家坐堂 → [建议] 接入deepseek的API示例


  共有575人关注过本帖树形打印复制链接

主题:[建议] 接入deepseek的API示例

帅哥哟,离线,有人找我吗?
zcgmxf
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1665 积分:14848 威望:0 精华:0 注册:2014/6/6 8:42:00
[建议] 接入deepseek的API示例  发帖心情 Post By:2025/2/7 9:03:00 [只看该作者]

老师,是否可以做一个foxtable接入deepseek的示例。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112219 积分:571309 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/2/7 9:14:00 [只看该作者]

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=194892&page=2

试试
Dim hc As New HttpClient("https://api.deepseek.com/v1/chat/completions")
hc.ContentType = "application/json"
dim API_KEY As String = "your_api_key_here"
hc.Headers.Add("Authorization", "Bearer " & API_KEY)
Dim jo As New JObject
jo
("model") = "deepseek-chat"
jo
("messages") = new JArray
jo("messages").Add(New Jobject)
jo("messages")(0)("role") = "user"
jo("messages")(0)("content") = "某某prompt"
hc.Content = jo.tostring
Dim
 ret As String = hc.GetData()
MessageBox
.Show(ret)

 回到顶部
帅哥哟,离线,有人找我吗?
百灵
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:747 积分:7854 威望:0 精华:0 注册:2015/3/3 14:34:00
  发帖心情 Post By:2025/2/7 11:48:00 [只看该作者]

用deepseek给出的vue代码对接成功,就是有点卡
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
   <meta name="viewport" c>
    <meta http-equiv="X-UA-Compatible" c>
    <title></title>
    <script src="libs/vue3.js"></script>    
    <script src="libs/axios.min.js"></script>  
</head>

<body>
    <div id="app" v-cloak="">
        <div>
    <h1>DeepSeek 流式输出示例</h1>
    <textarea v-model="prompt" placeholder="请输入提示内容"></textarea>
    <button @click="generateText">生成文本</button>
    <div>
      <h2>生成的文本:</h2>
      <pre>{{ generatedText }}</pre>
    </div>
  </div>
    </div>
    <script type="module">
    var data =    {
      prompt: '', // 用户输入的提示内容
      generatedText: '', // 生成的文本
    };
  
  var methods = {
    async generateText() {
      // 清空之前的生成结果
      this.generatedText = '';

      // DeepSeek API 的 URL 和 API 密钥
      const API_URL = 'https://api.deepseek.com/v1/chat/completions';
      const API_KEY = 'your key';

      try {
        // 使用 Fetch API 发送请求
        const response = await fetch(API_URL, {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
            Authorization: `Bearer ${API_KEY}`,
          },
          body: JSON.stringify({
            model: 'deepseek-chat',
            messages: [{ role: 'user', content: this.prompt }],
            stream: true, // 开启流式输出
          }),
        });

        // 检查响应是否成功
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }

        // 获取流式响应的读取器
        const reader = response.body.getReader();
        const decoder = new TextDecoder('utf-8');

        // 读取流式数据
        while (true) {
          const { done, value } = await reader.read();
          if (done) break;

          // 解码流式数据
          const chunk = decoder.decode(value, { stream: true });
          const lines = chunk.split('\n').filter((line) => line.trim() !== '');

          // 处理每一行数据
          lines.forEach((line) => {
            try {
               
                if(line!==': keep-alive' && line.includes('data:')){
                    
                    const json = JSON.parse(line.replace('data: ', ''));
                    const content = json.choices[0].delta.content;
                    if (content) {
                       // 将生成的文本片段追加到结果中
                        this.generatedText += content;
                    }
                }
             
             
            } catch (error) {
              console.error('Error parsing JSON:', error);
            }
          });
        }
      } catch (error) {
        console.error('Error calling DeepSeek API:', error);
      }
    }
    }

     
        var app = Vue.createApp({
            data: function() {
                return data;
            },
            methods:methods,        
        });     
        app.mount("#app");
    </script>  
    <style>
        [v-cloak] {
            display: none;
        }
    </style>
</body>

</html>
[此贴子已经被作者于2025/2/7 12:18:52编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
aix
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:211 积分:6239 威望:0 精华:0 注册:2012/4/29 13:09:00
  发帖心情 Post By:2025/2/7 12:58:00 [只看该作者]

'http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=191179
Net.ServicePointManager.SecurityProtocol = Net.SecurityProtocolType.Tls12 '选择一个协议Tls11,不行就Tls12、Tls13都试一遍

Dim hc As New HttpClient("https://api.deepseek.com/v1/chat/completions")
hc.ContentType = "application/json"
Dim API_KEY As String = "your_api_key_here"
hc.Headers.Add("Authorization", "Bearer " & API_KEY)
Dim jo As New JObject
Dim ja As New JArray
jo("model") = "deepseek-chat"
jo("messages") = ja
ja.Add(New JObject)
ja(0)("role") = "user"
ja(0)("content") = "某某prompt"
hc.Content = jo.ToString
Dim ret As String = hc.GetData()
MessageBox.Show(ret)

[此贴子已经被作者于2025/2/7 13:58:35编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cnhh
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:164 积分:1562 威望:0 精华:0 注册:2013/2/18 21:15:00
  发帖心情 Post By:2025/2/10 23:50:00 [只看该作者]

这个可用,谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
listfor
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:181 积分:1647 威望:0 精华:0 注册:2017/11/6 17:23:00
  发帖心情 Post By:2025/2/11 8:21:00 [只看该作者]

作一个实例出来

 回到顶部
帅哥哟,离线,有人找我吗?
洮沙
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:840 积分:7243 威望:0 精华:0 注册:2017/8/31 12:07:00
  发帖心情 Post By:2025/2/12 9:48:00 [只看该作者]

用阿里云百炼DeepSeek-V3 api 接口测试成功(请有水平狐友接龙将foxtable格式及HTML格式回传后数据解析整理方便阅读,这方面本人技不如人):

此主题相关图片如下:微信截图_20250212094609.png
按此在新窗口浏览图片
Dim hc As New HttpClient("https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions")
hc.ContentType = "application/json"
Dim API_KEY As String = "sk-88888888888888888888888888"
hc.Headers.Add("Authorization", "Bearer " & API_KEY)
Dim jo As New JObject
Dim ja As New JArray
jo("model") = "deepseek-r1"
jo("messages") = ja
ja.Add(New JObject)
ja(0)("role") = "user"
ja(0)("content") = "9.9和9.11谁大"
hc.Content = jo.ToString
Dim ret As String = hc.GetData()
MessageBox.Show(ret)

此主题相关图片如下:微信截图_20250212092513.png
按此在新窗口浏览图片
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>DeepSeek Chat</title>
   <link href="./layui/css/layui.css" rel="stylesheet">
    <style>
        body { background-color: #f5f5f5; }
        .container { margin: 20px auto; max-width: 1200px; }
        .chat-box { background: #fff; border-radius: 10px; box-shadow: 0 2px 12px rgba(0,0,0,.1); }
        .chat-history { height: 70vh; overflow-y: auto; padding: 20px; }
        .message { margin-bottom: 20px; }
        .user-message { text-align: right; }
        .bot-message { text-align: left; }
        .message-content {
            display: inline-block;
            max-width: 80%;
            padding: 12px 20px;
            border-radius: 20px;
            word-break: break-word;
        }
        .user-message .message-content { background: #1890ff; color: #fff; }
        .bot-message .message-content { background: #f0f2f5; }
        .input-box { border-top: 1px solid #eee; padding: 20px; position: relative; }
        .layui-textarea { border: none; resize: none; }
        .send-btn { position: absolute; right: 30px; bottom: 30px; }
    </style>
</head>
<body>
<div class="container layui-row">
    <!-- 左侧导航 -->
    <div class="layui-col-md3">
        <div class="layui-card">
            <div class="layui-card-header">历史会话</div>
            <div class="layui-card-body" id="history-list"></div>
        </div>
    </div>

    <!-- 右侧聊天区 -->
    <div class="layui-col-md9">
        <div class="chat-box">
            <div class="chat-history" id="chat-container"></div>
            <div class="input-box">
                <form class="layui-form" >
                    <div class="layui-form-item">
                        <textarea id="input-area" class="layui-textarea" rows="3" placeholder="输入你的问题..."></textarea>
                        <button class="layui-btn send-btn" >发送</button>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>

 <script type="text/javascript" src="./layui/layui.js"></script>
<script>
let isGenerating = false;
let controller = null;

// 初始化
layui.use(['form', 'util'], function(){
    const form = layui.form;
    const util = layui.util;
    
    // 绑定Enter键
    util.event('keydown', '#input-area', function(e){
        if(e.key === 'Enter' && !e.shiftKey) {
            e.preventDefault();
            sendMessage();
        }
    });
});

async function sendMessage() {
    if (isGenerating) return;
    const input = document.getElementById('input-area');
    const question = input.value.trim();
    if (!question) return;

    isGenerating = true;
    input.value = '';
    controller = new AbortController();
    
    // 添加用户消息
    appendMessage(question, 'user');
    const API_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions';
    const API_KEY = 'sk-888888888888888888888888888';
    try {
        const response = await fetch(API_URL, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${API_KEY}`
            },
            body: JSON.stringify({
                model: "deepseek-r1",
                messages: [{ role: "user", content: question }],
                stream: true
            }),
            signal: controller.signal
        });

        const reader = response.body.getReader();
        const decoder = new TextDecoder();
        let buffer = '';
        let partialLine = '';

        while (true) {
            const { done, value } = await reader.read();
            if (done) break;

            buffer += decoder.decode(value, { stream: true });
            let lines = buffer.split('\n');
            
            // 保留最后不完整的行
            buffer = lines.pop() || '';

            for (const line of lines) {
                try {
                    // 处理可能存在的data:前缀
                    const cleanLine = line.replace(/^data: /, '').trim();
                    if (!cleanLine) continue;
                    if (cleanLine === '[DONE]') break;

                    const data = JSON.parse(cleanLine);
                    const content = data.choices[0]?.delta?.content || '';
                    if (content) {
                        appendMessage(content, 'bot', true);
                    }
                } catch (e) {
                    console.error('解析错误:', e, '原始数据:', line);
                }
            }
        }
    } catch (error) {
        if (error.name !== 'AbortError') {
            appendMessage('请求出错,请重试', 'bot');
        }
    } finally {
        isGenerating = false;
        controller = null;
    }
}

function appendMessage(content, role, isAppend = false) {
    const container = document.getElementById('chat-container');
    let messageElement;
    
    if (isAppend && container.lastElementChild?.classList.contains('bot-message')) {
        messageElement = container.lastElementChild.querySelector('.message-content');
        messageElement.innerHTML += content;
    } else {
        const messageDiv = document.createElement('div');
        messageDiv.className = `message ${role}-message`;
        messageDiv.innerHTML = `
            <div class="message-content">
                ${content.replace(/\n/g, '<br>')}
            </div>
        `;
        container.appendChild(messageDiv);
        messageElement = messageDiv.querySelector('.message-content');
    }

    // 自动滚动
    container.scrollTop = container.scrollHeight;
}

// 停止生成
function stopGenerate() {
    if (controller) {
        controller.abort();
        isGenerating = false;
    }
}
</script>
</body>
</html>

此主题相关图片如下:微信截图_20250212094548.png
按此在新窗口浏览图片




[此贴子已经被作者于2025/2/12 21:25:43编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
bobolan521
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:638 积分:7397 威望:0 精华:1 注册:2013/11/26 7:49:00
  发帖心情 Post By:2025/2/12 10:04:00 [只看该作者]

楼上的兄弟,你把代码复制出来给我们大家试试啊

 回到顶部
帅哥哟,离线,有人找我吗?
百灵
  9楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:747 积分:7854 威望:0 精华:0 注册:2015/3/3 14:34:00
  发帖心情 Post By:2025/2/12 11:38:00 [只看该作者]

foxtable接入deepseek代码可用,但是不能流式显示,要全部生成后才能显示,会有一段时间卡死,不适用。最好的方法还是用网页对接比较好,可流式显示无卡顿

 回到顶部
帅哥哟,离线,有人找我吗?
abcdzabcdz
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:329 积分:3855 威望:0 精华:0 注册:2008/9/1 7:34:00
  发帖心情 Post By:2025/2/12 18:58:00 [只看该作者]

这个功能可接入foxtable,方便用户使用了。

 回到顶部
总数 12 1 2 下一页