当设计模式牵手LLM

模版方法模式

何为模版设计模式

想象一下 如果我们要泡一杯茶 我们要循序渐进地

  1. 煮水温杯
  2. 注水浸茶
  3. 茶水入杯
  4. 加点配料
如此,泡茶的工序就完成了,那么模板方法模式,相信各位也有了一定的概念:定义了一个算法的骨架,而将一些步骤延迟子类中实现。这样,子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。
也就是说 不问你泡什么茶 一些步骤都是不可省略的 那么既然如此 我们就把这些重复的步骤包装起来成为一个骨架 我们需要的时候 就直接用它 当然你也可以加枸杞 或者加柠檬 可以重新定义

代码实现

// 定义 Tea 构造函数,用于创建泡茶的对象 
function Tea(type,add) { 
    this.add=add
    this.type = type; 
    console.log('你准备泡一杯' + this.type); 
}

Tea 和其它茶之间没有血缘关系 Tea是原型对象 是可执行对象 负责构建对象 this指向的这些属性就是实例的属性模板

原型

每个JavaScript对象都有一个与之关联的原型(prototype) 这个原型也是一个对象 当试图访问对象的某个属性时 如果对象本身没有这个属性 JavaScript引擎会自动查找对象的原型链 直到找到该属性或者到达原型链的末端

原型链:

原型链是JavaScript实现继承的主要方式 当创建一个对象时 JavaScript引擎会为这个对象设置一个原型 指向其构造函数的原型对象 如果原型对象本身也是一个对象 它也有自己的原型 这样就形成了一个链式结构 称为原型链

Tea通过prototype属性添加方法 以他为原型的对象可以共享

// 在 Tea 对象中使用 prototype 添加方法 
Tea.prototype.boilWater = function () {
    console.log("把水煮沸")
} 
Tea.prototype.steepBag = function () {
    console.log("用沸水浸泡茶叶")
} 
Tea.prototype.pourInCap = function () {
    console.log("把茶水倒进杯子") 
} 
Tea.prototype.addtive = function () { 
    if (this.add!=null) {
        console.log("加"+this.add)
       }
       else
       console.log("未添加")  
} 
// 定义模板方法 init,它定义了泡茶的整个流程 
Tea.prototype.init = function () { 
    this.boilWater(); 
    this.steepBag();
    this.pourInCap(); 
    this.addtive(); 
 } 
// 实例化 
var greenTea = new Tea('绿茶','蜂蜜'); 
var wlTea = new Tea('乌龙茶'); 
// 调用模板方法 init 来执行泡茶的流程
greenTea.init();

image.png

这样 我们就可以在各种茶里面加如我们想要的配料 当然 我们还有可以有很多想法 思绪是自由的

优点

  • 封装不变部分,扩展可变部分:模板方法模式将不变的行为搬移到父类中,去除子类中的重复代码,使得子类可以专注于实现自己的特定步骤。
  • 提供了一个很好的代码复用平台:通过模板方法,子类可以复用父类中的代码,同时也可以添加新的行为。

模版模式毫无疑问是很有挖掘价值的,但写到这里 我想到要完成这样一个任务 我们大模型似乎也可以…

//require是node里面的关键字  引入模块
//从本地 node_moudles 引入openai模块
const OpenAI = require('openai')
require('dotenv').config();
//环境变量
// console.log(process.env.OPENAI_API_KEY,'-------');
const client = new OpenAI({
    apiKey: process.env.OPENAI_KEY,
    baseURL: 'https://api.chatanywhere.tech/v1'
})
const getChatResponse = async function (model, prompt) {
    const response = await client.chat.completions.create({
        model: model, //适合聊天的模型  指定一种模型
        messages: [
            {
                role: 'user',
                content: prompt
            }
        ]

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

const main = async () => {
    const text = `
    泡一杯茶很容易,首先需要把水烧开。
    在等待的过程中,把茶包放入一个杯子。
    一旦水烧开了,就把它倒在茶包上,
    等待一会,让茶包浸泡,几分钟后,取出茶包,
    如果你愿意,加一些蔗糖或牛奶调味,
    就这样,你可以享受一杯每位的茶了
    `
    const prompt = `
    你将获得由三个引号括起来的文本。
    如果它包含了一系列的指令,则需要按照以下格式重新编写这些指令,
    第一步 - ...
    第二步 - ...
    ...   - ...
    如果文本不包含一系列指令 则直接写“未提供步骤”
    """"${text}"""
    `
    const chatCompletion = await getChatResponse('gpt-3.5-turbo', prompt)
    console.log(chatCompletion);
}

main();

是的 大模型也可以很僵单地完成任务 大模型自身就具有很强的自然语言处理能力 我想 应该也可以这样

一个自助教程雏形就这样完成了()

const OpenAI = require('openai')
require('dotenv').config();
const client = new OpenAI({
    apiKey: process.env.OPENAI_KEY,
    baseURL: 'https://api.chatanywhere.tech/v1'
})
const getChatResponse = async function (model, prompt) {
    const response = await client.chat.completions.create({
        model: model, 
        messages: [
            {
                role: 'user',
                content: prompt
            }
        ]

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

function Tea(type, add) {
    this.type = type;
    this.add = add || '无';
    this.process = `我准备泡一杯${this.type}`;
}

Tea.prototype.init = function () {
    this.process += `,需要添加:${this.add}`;
    return this.process;
}

// 实例化
var greenTea = new Tea('卡布奇诺', "甜甜的你");
const main = async () => {
    const prompt = `
    你将获得由三个引号括起来的文本。
    如果它包含一个制作饮料的想法,请你提供步骤如
    第一步 - ...
    第二步 - ...
    ...   - ...
    如果文本不包含一个想法 则直接写“没意思”
    """"${greenTea.init()}"""
    `
    const chatCompletion = await getChatResponse('gpt-3.5-turbo', prompt)
    console.log(chatCompletion);
}
main();

image.png

总结

模式与语言模型(LLM)的结合是一种创新的跨领域应用 它将软件工程的最佳实践与AI的强大自然语言处理能力相结合 为软件开发带来了新的可能性和效率提升 我们也将以此为契机 成就更优秀的我们
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值