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)     
}

      我们可以请求看下效果

123.png

这样便成功的对接API,实现文本对话,后面跟大家分享流模式如何写。


0条评论

发表评论