使用dotenv处理安全问题,Prompt设计惊叹AIGC强大的学习能力!

188 阅读3分钟

在昨天的学习中“新手对于经典传统编程“爬虫”与AIGC的融合的学习”,使用AIGC构建了“爬虫”,其中导入了openai工具包,并使用了apiKey

const client = new OpenAI({
    apiKey: '*************************************',
    baseURL: 'https://api.chatanywhere.tech/v1'
})

而众所周知apiKey是一个私人所有的安全密钥,为了解决我们的代码能正常运行,并且不会被他人肆意使用的安全问题,就可以使用dotenv处理。

npm i request-promise cheerio等一样,dotenv也是npm(Node Package Manager) Node.js 的包管理器中的一条命令。

在终端输入npm i dotenv等命令引用外部文件 bc375437dc68693d1a442151a2eb12b.png

设置安全的环境变量

创建一个.env文件存储需要安全处理的信息,比如openai密钥(apiKey)数据库(Mysql)等等

  • env 环境变量对象,包含着所有的环境变量 9f536ffcf9f10692f89f160f68b9521.png
  • dotenv().config()会读取根目录下.env key=val 添加到.env 中 代码中读取到env对象
  • process 在node中是全局对象,代表进程,process.env 是分配资源的最小单位 而线程是进程的小弟,执行的最小单位
操作系统 (window/mac/linux) <- 进程(process)<- 环境变量(env)<- project
require('dotenv').config();
// 环境变量
//console.log(process.env.OPENAI_API_KEY,'------');
const OpenAI = require('openai');

const client = new OpenAI({
    apiKey: process.env.OPENAI_API_KEY,
    baseURL:'https://api.chatanywhere.tech/v1'
})

这样就不害怕自己的密钥存在安全问题了

Prompt设计,感受AIGC强大学习能力

构造一个异步函数,名为getChatCompletion,它接受两个参数modelprompt。通过调用client.chat.completions.create方法,使用modelprompt生成聊天回复。函数会返回生成的聊天回复内容。

const getChatCompletion = async function (model,prompt) {
    const response = await client.chat.completions.create({
        model:model,
        n:2,//生成几个结果
        messages:[{role:'user',content:prompt}],
    })

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

封装完毕之后,接下来就开始体验prompt对于ai的玩法

1、让它将文本总结为一句话

async function main(){
    let texk = `
    您应该提供尽可能清晰、具体的指示,以表达您希望模型执行的任务
    这将引导模型朝向所需的输出并降低收到无关或不正确响应的可能性
    不要将写清晰的提示词与简短的提示词混淆
    在许多情况下,更多的提示词可以为模型提供更多的清晰度和上下文信息,
    从而拿到更详细的相关输出。
    `

    let prompt =`
    把三个反引号括起来的文本总结为一句话。
    \`\`\` ${texk}\`\`\`
    `

0264deae8f9de1f190465b43d800efa.png 2.想要答案更加精简使文本总结为20字以内

let prompt =`
    把三个反引号括起来的文本总结为20字以内。
    \`\`\` ${texk}\`\`\`
    `

7905ec89d1d5ee890b1dfbf2070d26a.png

3.想要答案为英文输出

let prompt =`
    把三个反引号括起来的文本总结输出英文。
    \`\`\` ${texk}\`\`\`
    `

4c4042151816fb8186b5fadf8393756.png

除此之外,AIGC还具有强大的学习能力

给他一个回答的模板,他就可以进行学习该回答问题的风格

<孩子>: 教我耐心。

<祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。

再输入其他需求时,便能获得一样风格的回答

let prompt2 =`
    您的任务是以一致的风格回答问题。

    <孩子>: 教我耐心。

    <祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。

    <孩子>: 教我韧性。
    `

fd96b8a249f3c3bb5bb96d5d5e97ce8.png

附上完整代码(apiKey得使用自己的)

//require是node模块化里面的关键字,引入模块
// 从本地node_modules目录中引入openai模块,OpenAI
require('dotenv').config();
// 环境变量
//console.log(process.env.OPENAI_API_KEY,'------');
const OpenAI = require('openai');

const client = new OpenAI({
    apiKey: process.env.OPENAI_API_KEY,
    baseURL:'https://api.chatanywhere.tech/v1'
})

const getChatCompletion = async function (model,prompt) {
    const response = await client.chat.completions.create({
        model:model,
        n:2,//生成几个结果
        messages:[{role:'user',content:prompt}],
    })

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

async function main(){

    let prompt2 =`
    您的任务是以一致的风格回答问题。

    <孩子>: 教我耐心。

    <祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。

    <孩子>: 教我韧性。
    `

    const chatCompletion = await getChatCompletion('gpt-3.5-turbo',prompt2)
    console.log(chatCompletion)

}

main();