AI带你出海--多国语言just a piece of cake😎

217 阅读3分钟

前言

"La performance du systeme est plus lente que d'habitude.", ///系统的性能比平时慢
"Mi monitor tiene pixeles que no se iluminan.",//我的显示器有些像素
"Il mio mouse non funziona",//我的鼠标坏了
"M6j klawisz Ctrl jest zepsuty",//我的ctrl键坏了

懂英语的倔友是否读的懂这段语言 , 我想看不懂 , 因为这是法语、西班牙语、意大利语、波兰语和中文的混合🤡。

在如今走向海外市场的趋势下 , AI 正凭借着强大的 translate 的能力 , 为我们的交流 , 产品的迭代提供了新的挖掘点 , 在之前 , 要想做一个翻译的小 demo 还是需要一定的专业知识 , 而现在 , 小白也可以做 ,凭借着 AI 强大的能力 , 只需要简单的配置即可 ,让我们来看看 !

代码

import { OpenAI } from "openai";
import dotenv from "dotenv";

// 环境配置,加载环境变量
dotenv.config();


//启动一个进程
//在进程中加载环境变量 env环境对象
//什么是进程 ? 进程是一个程序的执行过程,分配资源的最小单位
//console.log(process.env.OPENAI_API_KEY)
const client =new OpenAI({
    //process 是node里面的进程对象
    // node 里的进程对象
  apiKey: process.env.OPENAI_API_KEY,
  baseURL:process.env.OPENAI_BASE_URL
})

//es6 的默认参数值 model = "gpt-3.5-turbo"
//通用LLM完成接口函数的调用
//model = "gpt-3.5-turbo" 默认参数值 可选参数
const getComleteion = async (prompt , model = "gpt-3.5-turbo") => {
   const messages = [{
        role: "user",
        content: prompt,
   }];

   const response = await client.chat.completions.create({
        model : model,
        messages : messages,
        temperature : 0.1,
   })

   return response.choices[0].message.content;

};

const main= async () =>{
    //const声明 进入词法环境中
    const user_messages =[
        "La performance du systeme est plus lente que d'habitude.", ///系统的性能比平时慢
        "Mi monitor tiene pixeles que no se iluminan.",//我的显示器有些像素
        "Il mio mouse non funziona",//我的鼠标坏了
        "M6j klawisz Ctrl jest zepsuty",//我的ctrl键坏了
        "我的屏幕在闪烁"
    ]
    // for of es6 的遍历数组的方式
    //和计数循环  ,有什么好的地方 ?  答 : 可读性高 , 简洁明了
    for(let issue of user_messages){
        const resultPrompt = `请帮我翻译为中文: ${issue}`
        const result = await getComleteion(resultPrompt)
        console.log(result)
    }
    
    //console.log(issue)
    //为什么在外面  ,访问不到issue ?  答: 因为issue是因为在词法变量环境中 , 不断入栈 , 之后出栈,  被垃圾回收机制回收,所以在外面访问不到issue
    //变量提升 ? 作用域 ? 执行上下文 ? 上下文栈 ?   

    const prompt = ` Tell me what language is this: ${user_messages}`

    const response = await getComleteion(prompt);
    
    const resultPrompt = `请帮我翻译为中文: ${response}`

    const result = await getComleteion(resultPrompt)

    console.log(result)

}

main()

运行结果

以下是对这段代码的详细解释:

1. 模块导入

import { OpenAI } from "openai";
import dotenv from "dotenv";
  • 这两行代码分别导入了 openai 库中的 OpenAI 模块以及 dotenv 库。openai 库通常用于与OpenAI的相关服务进行交互,比如调用其语言模型等。dotenv 库用于加载环境变量,以便在代码中方便地使用一些敏感信息(如API密钥)而无需将其硬编码在代码中。

2. 环境变量配置

// 环境配置,加载环境变量
dotenv.config();
  • 这行代码调用了 dotenv 库的 config 方法,它会在项目根目录下查找名为 .env 的文件(默认情况),并将其中定义的环境变量加载到 process.env 对象中,使得这些变量可以在代码的其他部分被访问和使用。

3. OpenAI客户端初始化

const client = new OpenAI({
    apiKey: process.env.OPENAI_API_KEY,
    baseURL: process.env.OPENAI_BASE_URL
});
  • 这里创建了一个 OpenAI 的客户端实例 client。通过从 process.env 中获取之前加载的 OPENAI_API_KEYOPENAI_BASE_URL 作为参数来初始化该客户端。apiKey 是用于认证访问OpenAI服务的密钥,baseURL 则指定了要访问的OpenAI服务的基础URL。

4. 定义获取完成内容的函数

const getComleteion = async (prompt, model = "gpt-3.5-turbo") => {
    const messages = [{
        role: "user",
        content: prompt
    }];

    const response = await client.chat.completions.create({
        model: model,
        messages: messages,
        temperature: 0.1
    });

    return response.choices[0].message.content;
};
  • 定义了一个名为 getComleteion 的异步函数。它接受两个参数:
    • prompt:这是要发送给OpenAI语言模型的提示信息,用于指定任务或询问内容。
    • model:指定要使用的OpenAI语言模型,默认值为 "gpt-3.5-turbo"。如果在调用函数时没有传入该参数,就会使用默认值。
  • 在函数内部,首先创建了一个包含用户角色和提示内容的消息数组 messages。然后使用之前初始化的 client 实例调用 chat.completions.create 方法,向OpenAI服务发送请求,请求中包含指定的模型、消息内容以及温度参数(temperature 用于控制生成结果的随机性,这里设置为 0.1)。最后,函数返回从OpenAI服务响应中获取的第一个选择项的消息内容。

5. 主函数定义与执行

const main = async () => {
    // const声明 进入词法环境中
    const user_messages = [
        "La performance du systeme est plus lente que d'habitude.",
        "Mi monitor tiene pixeles que no se iluminan.",
        "Il mio mouse non funziona",
        "M6j klawisz Ctrl jest zepsuty",
        "我的屏幕在闪烁"
    ];

    // for of es6 的遍历数组的方式
    //和计数循环 ,有什么好的地方?  答 : 可读性高, 简洁明了
    for (let issue of user_messages) {
        const resultPrompt = `请帮我翻译为中文: ${issue}`;
        const result = await getComleteion(resultPrompt);
        console.log(result);
    }

    const prompt = ` Tell me what language is this: ${user_messages}`;

    const response = await getComleteion(prompt);

    const resultPrompt = `请帮我翻译为中文: ${response}`;

    const result = await getComleteion(resultPrompt);

    console.log(result);
};

main();
  • 定义了一个名为 main 的异步主函数,并在最后调用了它。在 main 函数内部:
    • 首先定义了一个包含多种语言描述设备问题的字符串数组 user_messages
    • 然后使用 for...of 循环遍历这个数组。对于数组中的每一个元素 issue,构造一个新的提示 resultPrompt,要求将该语句翻译为中文,接着调用 getComleteion 函数获取翻译结果并打印出来。
    • 之后,构造一个提示 prompt,询问 user_messages 数组中的语句是什么语言,调用 getComleteion 函数获取响应 response。再构造一个新的提示 resultPrompt,要求将 response 翻译为中文,最后再次调用 getComleteion 函数获取最终的翻译结果并打印出来。

这段代码的主要功能是与OpenAI的语言模型进行交互,先将一些描述设备问题的语句逐个翻译为中文,然后询问这些语句是什么语言并将回答也翻译为中文。在实现过程中充分利用了ES6的特性,如默认参数、for...of 循环、const 声明等,以及通过 dotenv 加载环境变量来安全地使用OpenAI的服务。