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


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

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

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


加好友 发短信
等级:四尾狐 帖子:842 积分:7253 威望:0 精华:0 注册:2017/8/31 12:07:00
  发帖心情 Post By:2025/2/12 9:48:00 [显示全部帖子]

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

此主题相关图片如下:微信截图_20250212094609.png
按此在新窗口浏览图片
Net.ServicePointManager.SecurityProtocol = Net.SecurityProtocolType.Tls12 '选择一个协议Tls11,不行就Tls12、Tls13都试一遍
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/15 14:30:20编辑过]

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


加好友 发短信
等级:四尾狐 帖子:842 积分:7253 威望:0 精华:0 注册:2017/8/31 12:07:00
  发帖心情 Post By:2025/2/15 19:44:00 [显示全部帖子]

蓝老师,我问deepseek 流式显示功能,给出附件代码,看样子foxtabl能够流式接入deepseek,只是本人不会将vb.net代码转为foxtabl进行测试,所以烦请老师抽时间修改测试一下,最好做一个示例,好满足广大狐友,先行谢过!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:foxtable接入deepseek流式显示代码.txt

 回到顶部