在我学习Javascript的过程中,由于项目中需要输入个人的api-key,而这些是不太能泄露出去的(自己周围人用下得了,哪能真的分享出去)--其实是因为这么些key,有些是有使用次数的。我个人有这问题,那就更别说是那些大规模企业了,这么多key,是肯定要管理使用的,我个人呢,找到了一种解决方法,那就是利用dotenv保管,通过将key的val保存在环境变量中,调用而不是直接输入的方法来在分享代码时防止泄露这些key。
,让我们直接进入正题。
首先,我们在控制台项目路径下输入
npm i dotenv
然后在项目路径下创建一个.env文件
env文件是环境变量对象,其中包括所有的环境变量,而设置在其中的key = val可以通过调用dotenv().config()来设置为环境变量,以openai的API-key来演示
通过在
.env文件中写入
OPENAI_API_KEY= ******(填入自己的key),然后在项目中调用
require('dotenv').config();
然后让我们console.log(process.env),看下是否成功写入
可以发现已是成功写入。
这里就有人要问了,?这个process是什么东西
process在node中是全局对象,代表进程,进程是分配资源的最小单位,而线程是代码执行的最小单位。这俩的关系就好比公司中的董事长和ceo(首席执行官)的一样,一个负责调配资源,一个负责执行,是上下级的关系。而对于一个项目来说:
操作系统(window/mac/linux)<- 进程(process)<- 环境变量(env)<- project(项目)
好了,回到正题。这时我们会发现我们的key就已经存入到·env(环境变量)中去了,那我们怎么去调用它呢?与查询类似
process.env.OPENAI_API_KEY
这就表示了我们调用了key的值,下面是一个实例
require('dotenv').config();
const OpenAI = require('openai')
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL:'https://api.chatanywhere.tech/v1'
})
const getChatResponse = async function(model,prompt,n){
const response = await client.chat.completions.create({
model:model, // 适合聊天的模型 有很多种
messages: [{
role : 'user',
content : prompt
}]
})
return response.choices[0].message.content;
}
async function main(){
let prompt2 = `
您的任务是以一致的风格回答问题。
<孩子>: 教我耐心。
<祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。
<孩子>: 教我韧性。
`
const chatCompletion = await getChatResponse('gpt-3.5-turbo',prompt2)
console.log(chatCompletion);
}
main();
这里是调用openai的gpt-3.5-turbo适合聊天的模型,我们在apiKey上调用了process.env.OPENAI_API_KEY,我们看下能否运行
结果:
这样就结束了,我是Ace,我们下次分享再见!!!