通过喝茶实现传统经典编程和AIGC的结合

1,092 阅读2分钟

前言

闲来无事在喝茶,突然想到如果喝茶的步骤用传统编程一步步实现会是怎样的?那如果再结合AIGC又是怎样的呢?

使用传统经典编程来泡茶

构造函数Tea

function Tea(type) {  
this.type = type  
console.log('您准备泡一杯' + this.type);  
}

添加方法

// 对象 prototype 添加方法  
Tea.prototype.boilWater = function() {  
console.log('把水煮沸')  
}  
Tea.prototype.steepTeaBag = function() {  
console.log('用沸水浸泡茶叶')  
}  
Tea.prototype.pourInCup = function() {  
console.log('把茶水倒进杯子')  
}  
Tea.prototype.addLemon = function() {  
console.log('加柠檬')  
}

实例化与方法调用

var lemonTea = new Tea('柠檬茶');  
lemonTea.boilWater();  
lemonTea.steepTeaBag();  
lemonTea.pourInCup();  
lemonTea.addLemon();

传统经典编程遇上模板方法模式

在前面的实例化与方法调用中,每增加一个实例,都需重新调用泡茶的四个方法,于是我们在 Tea.prototype 上定义了一个模板方法 init,它调用了上述的四个步骤方法。这个方法就是所谓的“模板”,定义了泡茶的固定流程。通过在子类中调用 init,可以保证每种茶的制作都遵循这个流程。

模板方法 init

Tea.prototype.init = function() {
            this.boilWater();
            this.steepTeaBag();
            this.pourInCup();
            this.addLemon();
        }

实例化与调用

var lemonTea = new Tea('柠檬茶');
        lemonTea.init();

传统经典编程和AIGC结合

安装dotenv

在集成终端打开,输入

  • npm i dotenv

安装openai

  • npm i openai

创建.env文件

利用dotenv库(通过dotenv.config()方法)可以将Key等敏感信息存储在项目根目录下的.env文件中。这样可以避免将密钥直接写入源代码,减少泄露风险。

  • OPENAI_KEY =YOUR_API_KEY

创建main.js

此时您的目录应该如下所示

image.png

① 环境变量配置
require('dotenv').config();
② 导入OpenAI模块并创建实例
const OpenAI = require('openai')
const client = new OpenAI({
    apiKey: process.env.OPENAI_KEY,
    baseURL:'https://api.chatanywhere.tech/v1'
})
③ 创建异步函数getChatResponse
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;
}
④ 主函数mian()

利用AIGC的优势处理文本,生成内容

const main = async () => {
    const text = `
        泡一杯茶很容易。首先,需要把水烧开。
        在等待期间,拿一个杯子并把茶包放进去。
        一旦水开了,就把它倒在茶包上。
        等待一会儿,让茶叶浸泡,几分钟后,取出茶包。
        如果你愿意,可以加一些糖或牛奶调味。
        就这样,您可以享受一杯美味的茶了。
    `
    const prompt = `
    您将获得由三个引号括起来的文本。
    如果它包含一系列的指令,则需要按照以下格式重新编写这些指令。

    第一步 - ...
    第二部 - ...
    ...
    第N步 - ...

    如果文本中不含一系列的指令,则直接写“未提供步骤”
    
    """${text}"""
    `

    const result = await getChatResponse('gpt-3.5-turbo', prompt);
    console.log(result);
}
⑤ 运行

调用main()函数运行程序。

main()

总结

模板方法模式通过将不变的流程放在父类的模板方法中,减少了代码重复;结合AIGC,模板方法中的部分内容可以由AI模型自动填充或优化,使得算法更加灵活高效。