Go語言調(diào)用DeepSeek?API實(shí)現(xiàn)流式輸出和對(duì)話
引言
DeepSeek 是一個(gè)強(qiáng)大的 AI 模型服務(wù)平臺(tái),本文將詳細(xì)介紹如何使用 Go 語言調(diào)用 DeepSeek API,實(shí)現(xiàn)流式輸出和對(duì)話功能。
Deepseek的api因?yàn)楸还粢巡荒苡?,本文?DeepSeek:https://cloud.siliconflow.cn/i/vnCCfVaQ 為例子進(jìn)行講解。
1. 環(huán)境準(zhǔn)備
首先,我們需要準(zhǔn)備以下內(nèi)容:
Go 語言環(huán)境
DeepSeek API 訪問權(quán)限
開發(fā)工具(如 VS Code)
2. 基礎(chǔ)代碼實(shí)現(xiàn)
2.1 創(chuàng)建項(xiàng)目結(jié)構(gòu)
mkdir deepseek-go cd deepseek-go go mod init deepseek-go
2.2 核心代碼實(shí)現(xiàn)
package main
import (
"bufio"
"encoding/json"
"fmt"
"net/http"
"os"
"strings"
"time"
)
// 定義響應(yīng)結(jié)構(gòu)
type ChatResponse struct {
Choices []struct {
Delta struct {
Content string `json:"content"`
} `json:"delta"`
} `json:"choices"`
}
func main() {
// 創(chuàng)建輸出文件
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ǐng)輸入您的問題 (輸入 q 退出): ")
reader := bufio.NewReader(os.Stdin)
question, _ := reader.ReadString('\n')
question = strings.TrimSpace(question)
if question == "q" {
break
}
// 記錄對(duì)話時(shí)間
timestamp := time.Now().Format("2006-01-02 15:04:05")
file.WriteString(fmt.Sprintf("\n[%s] Question:\n%s\n\n", timestamp, question))
// 構(gòu)建請(qǐng)求體
payload := fmt.Sprintf(`{
"model": "deepseek-ai/DeepSeek-V3",
"messages": [
{
"role": "user",
"content": "%s"
}
],
"stream": true,
"max_tokens": 2048,
"temperature": 0.7
}`, question)
// 發(fā)送請(qǐng)求
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
// 獲取響應(yīng)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
// 處理流式響應(yīng)
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),通過設(shè)置 "stream": true,我們可以實(shí)現(xiàn)實(shí)時(shí)顯示 AI 回復(fù)的效果。這帶來了更好的用戶體驗(yàn):
- 即時(shí)看到響應(yīng)內(nèi)容
- 減少等待時(shí)間
- 更自然的對(duì)話體驗(yàn)
3.2 參數(shù)配置
{
"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
}
參數(shù)說明:
- model: 選擇使用的模型
- max_tokens: 最大輸出長(zhǎng)度
- temperature: 溫度參數(shù),控制輸出的隨機(jī)性
- top_p, top_k: 控制采樣策略
- frequency_penalty: 控制重復(fù)度
3.3 對(duì)話記錄
程序會(huì)自動(dòng)將所有對(duì)話保存到 conversation.txt 文件中,包含:
- 時(shí)間戳
- 用戶問題
- AI 回答
- 格式化的分隔符
4. 使用示例
運(yùn)行程序:
go run main.go
輸入問題,比如:
請(qǐng)輸入您的問題: 介紹一下 DeepSeek 的主要特點(diǎn)
觀察實(shí)時(shí)輸出和 conversation.txt 文件記錄
5. 錯(cuò)誤處理和最佳實(shí)踐
1.API 密鑰管理
- 使用環(huán)境變量存儲(chǔ) API 密鑰
- 不要在代碼中硬編碼密鑰
- 定期輪換密鑰
2.錯(cuò)誤處理
- 檢查網(wǎng)絡(luò)連接
- 驗(yàn)證 API 響應(yīng)
- 處理流式輸出中斷
3.性能優(yōu)化
- 使用適當(dāng)?shù)?buffer 大小
- 及時(shí)關(guān)閉連接
- 處理并發(fā)請(qǐng)求
總結(jié)
通過本文的介紹,你應(yīng)該已經(jīng)掌握了如何使用 Go 語言調(diào)用 DeepSeek API 的基本方法。DeepSeek 提供了強(qiáng)大的 AI 能力,配合 Go 語言的高效性能,可以構(gòu)建出各種有趣的應(yīng)用。
到此這篇關(guān)于Go語言調(diào)用DeepSeek API的完整指南的文章就介紹到這了,更多相關(guān)Go調(diào)用DeepSeek API內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang網(wǎng)絡(luò)數(shù)據(jù)包捕獲庫(kù)gopacket詳解
gopacket/pcap是Go語言網(wǎng)絡(luò)數(shù)據(jù)包捕獲庫(kù),支持實(shí)時(shí)捕獲、過濾、解析pcap文件及接口統(tǒng)計(jì),結(jié)合layers包可分析DNS流量,處理CNAME、多IP等復(fù)雜情況,需注意權(quán)限和性能優(yōu)化,適用于網(wǎng)絡(luò)監(jiān)控與安全工具開發(fā)2025-07-07
go開源Hugo站點(diǎn)構(gòu)建三步曲之集結(jié)渲染
這篇文章主要為大家介紹了go開源Hugo站點(diǎn)構(gòu)建三步曲之集結(jié)渲染詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Go實(shí)現(xiàn)自己的網(wǎng)絡(luò)流量解析和行為檢測(cè)引擎原理
這篇文章主要為大家介紹了Go實(shí)現(xiàn)自己的網(wǎng)絡(luò)流量解析和行為檢測(cè)引擎原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
Go語言學(xué)習(xí)之golang-jwt/jwt的教程分享
jwt是?json?web?token的簡(jiǎn)稱。go使用jwt目前,主流使用的jwt庫(kù)是golang-jwt/jwt。本文就來和大家講講golang-jwt/jwt的具體使用,需要的可以參考一下2023-01-01
Go通過goroutine實(shí)現(xiàn)多協(xié)程文件上傳的基本流程
多協(xié)程文件上傳是指利用多線程或多協(xié)程技術(shù),同時(shí)上傳一個(gè)或多個(gè)文件,以提高上傳效率和速度,本文給大家介紹了Go通過goroutine實(shí)現(xiàn)多協(xié)程文件上傳的基本流程,需要的朋友可以參考下2024-05-05
GO語言實(shí)現(xiàn)簡(jiǎn)單的目錄復(fù)制功能
這篇文章主要介紹了GO語言實(shí)現(xiàn)簡(jiǎn)單的目錄復(fù)制功能,通過新建及復(fù)制內(nèi)容等操作最終實(shí)現(xiàn)復(fù)制目錄的功能效果,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12

