Go
go对接DeepSeek实现文本对话

go对接DeepSeek实现文本对话
沉了一段时间,今天跟大家分享go对接deepSeek实现文本对话,后面会跟大家分享如何返回流模式,今天先分享文本模式返回。
这里我还是在我自己的项目里面直接对接,我是用gin框架开发,我们先封装一个调用函数,文件名叫deepSeek.go吧,代码如下
package utils //引入模块 import ( "net/http" "encoding/json" "bytes" "github.com/gin-gonic/gin" "io/ioutil" "bufio" "io" "fmt" "strings" ) /** deepSeek */ const deepSeekChatApiUrl = "chat/completions" //文本对话请求地址 /** 文本对话-全文模式 */ func DeepSeekSendText(content string) (int, string) { //获取配置 apiUrl := "https://api.deepseek.com/" + deepSeekChatApiUrl authorization := "自己API KEY" //组合信息体结构 messages := make(map[string]interface{}) messages["role"] = "user" messages["content"] = content messagesList := make([]map[string]interface{}, 1) messagesList[0] = messages //组合请求结构 params := make(map[string]interface{}) params["model"] = "deepseek-chat" params["messages"] = messagesList //转化为json bytesData, err := json.Marshal(params) if err != nil { return 404, "转化结构失败" } //组合请求内容 payload := bytes.NewReader(bytesData) req, _ := http.NewRequest("POST", apiUrl, payload) //设置请求头部 req.Header.Add("cache-control", "no-cache") req.Header.Add("Content-Type", "application/json") req.Header.Add("Authorization", "Bearer "+authorization) //调用api res, _ := http.DefaultClient.Do(req) //关闭链接 defer res.Body.Close() //获取返回结果 body, _ := ioutil.ReadAll(res.Body) //处理json var resultList interface{} errResult := json.Unmarshal(body, &resultList) if errResult != nil { return 404, "网络繁忙,请稍后重试" } //提取数据 resultDataList, _ := resultList.(map[string]interface{}) //提取choices结构体 choices, errChoices := resultDataList["choices"].([]interface{}) if !errChoices { return 404, "API调用失败" } //获取结果集第一个 choicesFirst, choicesFirstErr := choices[0].(map[string]interface{}) if !choicesFirstErr { return 404, "获取第一结果集失败" } //获取message结构体 messageList, messageListErr := choicesFirst["message"].(map[string]interface{}) if !messageListErr { return 404, "获取message结构失败" } //获取答案 answer, answerErr := messageList["content"].(string) if !answerErr { return 404, "AI回复获取失败" } //返回结果 return 200, answer }
我们在控制器写一个方法来调用上面写的函数,代码如下
/** DeepSeek-文生文全文模式 */ func ChatDeepSeekSendText(c *gin.Context) { // 获取内容 _, content := GetRequestParameters(c, "content", 1) // 内容 if content == "" { ReturnError("请输入内容", c) return } //调用chatAI获取结果 apiCode, apiResult := utils.DeepSeekSendText(content) if apiCode != 200 { ReturnError(apiResult, c) return } //组合返回数据 dataList := make(map[string]interface{}) dataList["content"] = apiResult //返回 ReturnSuccess("请求成功", c, dataList) }
然后再命名一个路由,代码如下
chatAi := router.Group("ai") { chatAi.Any("/deepSeekSendText", ChatDeepSeekSendText) }
我们可以请求看下效果
这样便成功的对接API,实现文本对话,后面跟大家分享流模式如何写。
0条评论