当前位置: 代码网 > it编程>前端脚本>Golang > Go语言调用DeepSeek API实现流式输出和对话

Go语言调用DeepSeek API实现流式输出和对话

2025年02月13日 Golang 我要评论
引言deepseek 是一个强大的 ai 模型服务平台,本文将详细介绍如何使用 go 语言调用 deepseek api,实现流式输出和对话功能。deepseek的api因为被功击已不能用,本文以 d

引言

deepseek 是一个强大的 ai 模型服务平台,本文将详细介绍如何使用 go 语言调用 deepseek api,实现流式输出和对话功能。

deepseek的api因为被功击已不能用,本文以 deepseek:https://cloud.siliconflow.cn/i/vnccfvaq 为例子进行讲解。

1. 环境准备

首先,我们需要准备以下内容:

go 语言环境

deepseek api 访问权限

开发工具(如 vs code)

2. 基础代码实现

2.1 创建项目结构

mkdir deepseek-go
cd deepseek-go
go mod init deepseek-go

2.2 核心代码实现

package main

import (
    "bufio"
    "encoding/json"
    "fmt"
    "net/http"
    "os"
    "strings"
    "time"
)

// 定义响应结构
type chatresponse struct {
    choices []struct {
        delta struct {
            content string `json:"content"`
        } `json:"delta"`
    } `json:"choices"`
}

func main() {
    // 创建输出文件
    file, err := os.openfile("conversation.txt", os.o_append|os.o_create|os.o_wronly, 0644)
    if err != nil {
        fmt.printf("error opening file: %v\n", err)
        return
    }
    defer file.close()

    // api 配置
    url := "https://api.siliconflow.cn/v1/chat/completions"
    
    for {
        // 获取用户输入
        fmt.print("\n请输入您的问题 (输入 q 退出): ")
        reader := bufio.newreader(os.stdin)
        question, _ := reader.readstring('\n')
        question = strings.trimspace(question)
        
        if question == "q" {
            break
        }

        // 记录对话时间
        timestamp := time.now().format("2006-01-02 15:04:05")
        file.writestring(fmt.sprintf("\n[%s] question:\n%s\n\n", timestamp, question))

        // 构建请求体
        payload := fmt.sprintf(`{
            "model": "deepseek-ai/deepseek-v3",
            "messages": [
                {
                    "role": "user",
                    "content": "%s"
                }
            ],
            "stream": true,
            "max_tokens": 2048,
            "temperature": 0.7
        }`, question)

        // 发送请求
        req, _ := http.newrequest("post", url, strings.newreader(payload))
        req.header.add("content-type", "application/json")
        req.header.add("authorization", "bearer your_api_key")  // 替换为你的 api key

        // 获取响应
        res, _ := http.defaultclient.do(req)
        defer res.body.close()

        // 处理流式响应
        scanner := bufio.newreader(res.body)
        for {
            line, err := scanner.readstring('\n')
            if err != nil {
                break
            }

            line = strings.trimspace(line)
            if line == "" || line == "data: [done]" {
                continue
            }

            if strings.hasprefix(line, "data: ") {
                line = strings.trimprefix(line, "data: ")
            }

            var response chatresponse
            if err := json.unmarshal([]byte(line), &response); err != nil {
                continue
            }

            if len(response.choices) > 0 {
                content := response.choices[0].delta.content
                if content != "" {
                    fmt.print(content)
                    file.writestring(content)
                }
            }
        }
    }
}

3. 主要特性说明

3.1 流式输出

deepseek api 支持流式输出(stream),通过设置 "stream": true,我们可以实现实时显示 ai 回复的效果。这带来了更好的用户体验:

  • 即时看到响应内容
  • 减少等待时间
  • 更自然的对话体验

3.2 参数配置

{
    "model": "deepseek-ai/deepseek-v3",
    "messages": [...],
    "stream": true,
    "max_tokens": 2048,
    "temperature": 0.7,
    "top_p": 0.7,
    "top_k": 50,
    "frequency_penalty": 0.5
}

参数说明:

  • model: 选择使用的模型
  • max_tokens: 最大输出长度
  • temperature: 温度参数,控制输出的随机性
  • top_p, top_k: 控制采样策略
  • frequency_penalty: 控制重复度

3.3 对话记录

程序会自动将所有对话保存到 conversation.txt 文件中,包含:

  • 时间戳
  • 用户问题
  • ai 回答
  • 格式化的分隔符

4. 使用示例

运行程序:

go run main.go

输入问题,比如:

请输入您的问题: 介绍一下 deepseek 的主要特点

观察实时输出和 conversation.txt 文件记录

5. 错误处理和最佳实践

1.api 密钥管理

  • 使用环境变量存储 api 密钥
  • 不要在代码中硬编码密钥
  • 定期轮换密钥

2.错误处理

  • 检查网络连接
  • 验证 api 响应
  • 处理流式输出中断

3.性能优化

  • 使用适当的 buffer 大小
  • 及时关闭连接
  • 处理并发请求

总结

通过本文的介绍,你应该已经掌握了如何使用 go 语言调用 deepseek api 的基本方法。deepseek 提供了强大的 ai 能力,配合 go 语言的高效性能,可以构建出各种有趣的应用。

到此这篇关于go语言调用deepseek api的完整指南的文章就介绍到这了,更多相关go调用deepseek api内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com