前言
"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_KEY和OPENAI_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的服务。