Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共12 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

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

1楼
zcgmxf 发表于:2025/2/7 9:03:00
老师,是否可以做一个foxtable接入deepseek的示例。
2楼
有点蓝 发表于: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楼
百灵 发表于: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编辑过]
4楼
aix 发表于: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编辑过]
5楼
cnhh 发表于:2025/2/10 23:50:00
这个可用,谢谢!
6楼
listfor 发表于:2025/2/11 8:21:00
作一个实例出来
7楼
洮沙 发表于: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编辑过]
8楼
bobolan521 发表于:2025/2/12 10:04:00
楼上的兄弟,你把代码复制出来给我们大家试试啊
9楼
百灵 发表于:2025/2/12 11:38:00
foxtable接入deepseek代码可用,但是不能流式显示,要全部生成后才能显示,会有一段时间卡死,不适用。最好的方法还是用网页对接比较好,可流式显示无卡顿
10楼
abcdzabcdz 发表于:2025/2/12 18:58:00
这个功能可接入foxtable,方便用户使用了。
共12 条记录, 每页显示 10 条, 页签: [1] [2]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .04492 s, 2 queries.