Golang中調(diào)用deepseekr1的教程詳解
1.官方文檔
2.請(qǐng)求看一下
因?yàn)閐eepseek官方API的deepssek-r1響應(yīng)太慢,于是用了騰訊的API來(lái)測(cè)試
func main() { cfg := config.Config{ BaseURL: "https://api.lkeap.cloud.tencent.com", APIKey: "API-KEY", HTTPClient: &http.Client{}, } // 初始化deepseek d := deepseek.NewDeepSeek(cfg) // 封裝請(qǐng)求體 body := model.Request{ Model: "deepseek-r1", Messages: []model.Message{{Role: "system", Content: "You are a helpful assistant."}, {Role: "user", Content: "你是誰(shuí)"}}, } // 同步調(diào)用 chat, err := d.Chat(context.Background(), body) if err != nil { panic(err) } fmt.Println(chat.Content) // 流式調(diào)用 //stream, _ := d.Stream(context.Background(), body) //console.ConsoleContent(stream) }
響應(yīng)的格式
{"id":"ab6e60c5df865a38a", "object":"chat.completion", "created":1739782294, "model":"deepseek-r1", "choices":[ {"index":0, "message":{ "role":"assistant", "content":"\n\n您好!我是DeepSeek-R1,一個(gè)由深度求索公司開發(fā)的智能學(xué),代碼和邏輯推理等理工類問題。我會(huì)保持誠(chéng)實(shí),如果不知道答案會(huì)明確告知,并始終聚焦于提供最有幫助的信息。", "reasoning_content":"\n嗯,用戶問我是誰(shuí),我需要用中文回答。首先,我要明確自己的身份,是DeepSeek-R1,一個(gè)由深度求索公司開發(fā),可能無(wú)法提供最新信息。同時(shí),要避免使用復(fù)雜術(shù)語(yǔ),保持口語(yǔ)化,讓回答更自然??赡苡脩魟偨佑|我,所以需要簡(jiǎn)潔明了,不需要太長(zhǎng)的解釋。還要注意語(yǔ)氣友好,表現(xiàn)出愿意幫助的態(tài)度。有沒有遺漏什么?比如是否需要提到公司背景或者隱私政策?不過ens":230, "total_tokens":246 }}
發(fā)現(xiàn)跟deepseek-chat的響應(yīng)只是多路一個(gè)reasoning_content,在響應(yīng)上面加上就可以了
type Response struct { Content string `json:"content"` ReasoningContent string `json:"reasoning_content"` // 思考回答 }
3.改造后的整個(gè)訪問流程
1. 調(diào)用流式請(qǐng)求
stream, _ := d.Stream(context.Background(), body)
2. 發(fā)起流式請(qǐng)求
func (d *DeepSeek) Stream(ctx context.Context, request model.Request) (<-chan model.Response, error) { return http_parse.HandleStreaming(ctx, request, &d.Cfg) }
3. 響應(yīng)處理
func HandleStreaming(ctx context.Context, req model.Request, c *config.Config) (<-chan model.Response, error) { ch := make(chan model.Response) go func() { defer close(ch) // 發(fā)起流式請(qǐng)求 resp, err := DoRequest(ctx, req, true, c) if err != nil { ch <- model.Response{Content: "request error!"} return } defer resp.Body.Close() scanner := bufio.NewScanner(resp.Body) for scanner.Scan() { select { case <-ctx.Done(): ch <- model.Response{Content: "ctx done!"} return default: // 解析事件流 event := ParseEvent(scanner.Bytes()) if event != nil { ch <- *event } } } }() return ch, nil }
4. 打印結(jié)果
func Content(ch <-chan model.Response) { for chunk := range ch { if chunk.ReasoningContent != "" { fmt.Printf(chunk.ReasoningContent) continue } // 打印回答 fmt.Printf(chunk.Content) } }
4.代碼地址
https://gitee.com/li-zhuoxuan/go_ai
到此這篇關(guān)于Golang中調(diào)用deepseekr1的教程詳解的文章就介紹到這了,更多相關(guān)Go調(diào)用deepseekr1內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang使用ReverseProxy實(shí)現(xiàn)反向代理的方法
本文介紹了如何使用Golang的ReverseProxy實(shí)現(xiàn)反向代理,包括源碼結(jié)構(gòu)解析和官方單機(jī)示例NewSingleHostReverseProxy,同時(shí)指出,若要實(shí)現(xiàn)負(fù)載均衡,需要自行開發(fā),還提供了一個(gè)簡(jiǎn)單的HTTP服務(wù)用于測(cè)試,感興趣的朋友跟隨小編一起看看吧2024-09-09Go語(yǔ)言dolphinscheduler任務(wù)調(diào)度處理
這篇文章主要為大家介紹了Go語(yǔ)言dolphinscheduler任務(wù)調(diào)度處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Go語(yǔ)言學(xué)習(xí)筆記之錯(cuò)誤和異常詳解
Go語(yǔ)言采用返回值的形式來(lái)返回錯(cuò)誤,這一機(jī)制既可以讓開發(fā)者真正理解錯(cuò)誤處理的含義,也可以大大降低程序的復(fù)雜度,下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言學(xué)習(xí)筆記之錯(cuò)誤和異常的相關(guān)資料,需要的朋友可以參考下2022-07-07淺談beego默認(rèn)處理靜態(tài)文件性能低下的問題
下面小編就為大家?guī)?lái)一篇淺談beego默認(rèn)處理靜態(tài)文件性能低下的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-06-06golang中time包之時(shí)間間隔格式化和秒、毫秒、納秒等時(shí)間戳格式輸出的方法實(shí)例
時(shí)間和日期是我們編程中經(jīng)常會(huì)用到的,下面這篇文章主要給大家介紹了關(guān)于golang中time包之時(shí)間間隔格式化和秒、毫秒、納秒等時(shí)間戳格式輸出的方法實(shí)例,需要的朋友可以參考下2022-08-08