package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"net/url"
"os"
)
type DeepSeekRequest struct {
Model string `json:"model"`
Messages []Message `json:"messages"`
Temperature float64 `json:"temperature"`
}
type Message struct {
Role string `json:"role"`
Content string `json:"content"`
}
type DeepSeekResponse struct {
Choices []struct {
Message Message `json:"message"`
} `json:"choices"`
}
func Translate(text string) (string, error) {
apiKey := os.Getenv("DEEPSEEK_API_KEY")
if apiKey == "" {
return "", fmt.Errorf("请设置DEEPSEEK_API_KEY环境变量")
}
// 准备请求数据
requestData := DeepSeekRequest{
Model: "deepseek-chat",
Messages: []Message{
{
Role: "user",
Content: fmt.Sprintf("请将以下内容翻译成中文:%s", text),
},
},
Temperature: 0.7,
}
jsonData, err := json.Marshal(requestData)
if err != nil {
return "", fmt.Errorf("序列化请求数据失败: %v", err)
}
// 创建HTTP请求
req, err := http.NewRequest("POST", "https://api.deepseek.com/v1/chat/completions", bytes.NewBuffer(jsonData))
if err != nil {
return "", fmt.Errorf("创建请求失败: %v", err)
}
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Content-Type", "application/json")
// 配置客户端
var client *http.Client
if proxy := os.Getenv("HTTP_PROXY"); proxy != "" {
proxyURL, err := url.Parse(proxy)
if err != nil {
return "", fmt.Errorf("解析代理URL失败: %v", err)
}
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
}
client = &http.Client{Transport: transport}
} else {
client = &http.Client{}
}
resp, err := client.Do(req)
if err != nil {
return "", fmt.Errorf("请求失败: %v", err)
}
defer resp.Body.Close()
// 处理响应
body, err := io.ReadAll(resp.Body)
if err != nil {
return "", fmt.Errorf("读取响应失败: %v", err)
}
log.Println(body)
if resp.StatusCode != http.StatusOK {
return "", fmt.Errorf("API请求失败: %s", string(body))
}
// 解析响应
var deepseekResponse DeepSeekResponse
err = json.Unmarshal(body, &deepseekResponse)
if err != nil {
return "", fmt.Errorf("解析响应失败: %v", err)
}
if len(deepseekResponse.Choices) == 0 {
return "", fmt.Errorf("未找到翻译结果")
}
return deepseekResponse.Choices[0].Message.Content, nil
}
func main() {
// 测试翻译功能
text := "Hello, world! 111"
translated, err := Translate(text)
if err != nil {
fmt.Printf("翻译失败: %v\n", err)
return
}
fmt.Printf("原文: %s\n翻译: %s\n", text, translated)
}