Scott

deepseek将英文翻译成中文 5 months ago

go
AI
2422个字符
共有65人围观
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)
}