返回顶部
首页 > 资讯 > 精选 >与ChatGPT结对编程怎么实现
  • 738
分享到

与ChatGPT结对编程怎么实现

2023-07-05 14:07:26 738人浏览 八月长安
摘要

今天小编给大家分享一下与ChatGPT结对编程怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。如何编写一个节点编写主干

今天小编给大家分享一下与ChatGPT结对编程怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    如何编写一个节点

    编写主干逻辑

    我们以dsl_translator这个节点为例,一开始,我只是这么提问(并没有,我只是演示一个错误示范):

    我想用nodejs用下面的yaml描绘的数据结构得到一个新的数组:

    base:  steps: 10  batch_size: 1poly:  - template_prompt:      template: >          a cat,          ${ chara }          ${ facial_expressions }      meta:        view_angle:           - side_view,          - front_view,        faal_expressions:          - (smile:1.5),            - (smile:1.2),            - smile,

    果然,ChatGPT也不惯着我,给出了我下面的代码:

    //......const newArray = [];data.poly.forEach(item => {const obj = {    template: item.template_prompt.template,    meta: item.template_prompt.meta};newArray.push(obj);});console.log(newArray);

    我仿佛听到ai在说:“你就说是不是数组吧,你要数组,我给你数组,没毛病~”

    遇到这种问题,只能反思是自己没说清楚,那么该怎么说清楚呢?

    我们这个程序是服务于AI画图的,其实我们也可以从AI画图中借鉴不少经验,比如说在AI画图中,有一个control net里的open pose技术,我可以画个骨架,就像下面这样:

    与ChatGPT结对编程怎么实现

    我就可以用这个骨架图去画个穿靴子的猫,拿着个刺剑什么的。这个技术告诉我们什么呢?我们可以通过描述一个骨架来控制AI生成的内容。那么图片可以,编程是不是也可以?

    于是经过一段时间的摸索,最后我写出了下面的描述:

    我想用nodejs用下面的yaml描绘的数据结构得到一个新的数组:

    base:  steps: 10  batch_size: 1poly:  - template_prompt:      template: >          a cat,          ${ chara }          ${ facial_expressions }      meta:        chara:           - Abyssinian,          - cat_in_boots,        facial_expressions:          - (smile:1.5),            - (smile:1.2),            - smile,

    要求:

    假设上面的yaml转成JSON的转换代码我已经写完了

    我需要遍历poly下的所有的顶层元素

    遍历过程中,要处理template_prompt元素的子元素:

    从template中读取作为模版。

    读取meta中的属性,因为属性可能每次都不一样,是不确定的,所以不能硬编码。

    然后基于meta中的属性,把template作为 string literal 解析,这个解析代码我已经有了,假设名为render_string_template,可以不实现,留一个函数接口即可。

    要遍历组合meta中的属性形成一个数组,比如chara 有两个值,facial_expressions 有三个值,那么应该生成2*3也就是六组属性放入这个数组中,这个数组和template会被传入render_string_template函数,最后会获得两个prompt字符串

    将生成的prompt字符串数组和template_prompt元素之外的其他元素合并成一个对象,要求在同一级别。prompt字符串数组有几个元素,就会合并成几个对象,并放入一个新数组中,我们称之为ploys。

    继续遍历,直到遍历完所有顶层元素,所有元素都放入了polys中。polys是一个一维数组。

    将ploys中的每一个元素与base中的属性合成一个新的对象,base的属性展开与prompt属性同级,当ploys中的每一个元素的属性名与base中的属性名相同时,覆盖base中的属性。这些新对象组合出的数组就是我要的数组

    可以看到,我在之前的prompt的后面加了很多的描述,其中的2-6就是用自然语言讲了我期望这个函数实现整个过程的大概逻辑。这个手法就很像Open Pose。通过这个操作,我得到了我想要的代码,毕竟这个逻辑不复杂。

    边界划分

    上面prompt的要求里除了表达了主干逻辑,其实也用了一些其他的技巧。比如“1. 假设上面的yaml转成json的转换代码我已经写完了”,“把template作为 string literal 解析,这个解析代码我已经有了,假设名为render_string_template,可以不实现,留一个函数接口即可。”

    这个呢有点像control net里的seg技术,他就是把图片上的东西都分区域,就像下面这样:

    与ChatGPT结对编程怎么实现

    然后再生成的就靠谱很多,甚至你还可以对其中特定部分进行针对性的描述。这个技术就很适合用来控制AI生成的注意力焦点。

    那么在我们这个例子,上面提到的那些描述就起到了seg的作用。他可以让我们不用在一个prompt描述里编写所有的细节,这对于复杂的逻辑很有帮助。因为即便是一个小节点,其实逻辑也可能有点复杂的,就像这里面,我们可以把meta数据与tempalte合并的功能延迟实现,只描述与他的交互,使生成的程序先把参数扔给它。有的时候,我们想要使用特定的库,也可以用这个方式,比如我在另外一个场景下是这么实现的这个效果:

    读取文件的fs,要使用const fs = require('fs/promise')引入。

    用js-yaml库解析yaml。

    通过这样的技巧,我们就可以把代码进行进一步的分解,让我们更容易描述清楚我们想要部分的业务逻辑,而且也可以给我们节省点算力,毕竟ChatGPT生成的时候如果太长也会中断,你让他继续的话,有时候也续不上。这个技巧就可以让他专注于你希望他专注的地方,从而提高表现力。

    功能迭代

    上面的写完之后呢,我发现一个问题,这个DSL还不是我想要的最终形态,对于同一套模板,我可能需要多种meta,因为有些属性的组合是没有意义的,我也不想浪费我宝贵的GPU。那么我们就不能太暴力的让它穷举所有的组合,我要针对同一个tempalte给他不同的属性组合,所以meta的值就必须是个列表,大概如下所示:

    base:  steps: 10  batch_size: 1poly:  - template_prompt:      template: >          a cat,          ${ chara }          ${ facial_expressions }      meta:        - chara: #  这里改成了数组            - Abyssinian,            - cat_in_boots,          facial_expressions:            - (smile:1.5),              - (smile:1.2),              - smile,

    于是现在我们就面临一个问题:改代码。而这个时候就体现出我们之前拆任务的价值了,因为各个模块都是隔离的,那就没有什么改代码,重新生成一份就好了,所以我改了改要求:

    要求:

    假设上面的yaml转成json的转换代码我已经写完了

    我需要遍历poly下的所有的顶层元素

    遍历过程中,要处理template_prompt元素的子元素:

    从template中读取作为模版。

    读取meta中的属性,因为属性可能每次都不一样,是不确定的,所以不能硬编码。

    然后基于meta中的属性,把template作为 string literal 解析,这个解析代码我已经有了,假设名为render_string_template,可以不实现,留一个函数接口即可。

    要遍历组合meta中的每一个属性组形成一个数组,

    每一个属性组可能只需要看做一个对象,当且仅当每一个属性值都为单值

    每一个属性组可能也需要展开,当且仅当任何一个属性值有多值,比如 chara 有两个值,facial_expressions 有三个值,那么应该生成2*3也就是六组属性放入这个数组中,这个数组和template会被传入render_string_template函数,最后会获得两个prompt字符串

    将生成的prompt字符串数组和template_prompt元素之外的其他元素合并成一个对象,要求在同一级别。prompt字符串数组有几个元素,就会合并成几个对象,并放入一个新数组中,我们称之为ploys。

    继续遍历,直到遍历完所有顶层元素,所有元素都放入了polys中。polys是一个一维数组。

    将ploys中的每一个元素与base中的属性合成一个新的对象,base的属性展开与prompt属性同级,当ploys中的每一个元素的属性名与base中的属性名相同时,覆盖base中的属性。这些新对象组合出的数组就是我要的数组

    改完要求,配上上面的DSL直接扔给了它,得到了我们想要的代码。

    所以在今天这个时刻,有些重构工作突然变得没有那么大价值了,因为在划定好的边界里,重写比重构更快,尽管两次输出的代码并不一样,但是他们的功能是一样的。

    以上就是“与ChatGPT结对编程怎么实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: 与ChatGPT结对编程怎么实现

    本文链接: https://lsjlt.com/news/352421.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • 与ChatGPT结对编程怎么实现
      今天小编给大家分享一下与ChatGPT结对编程怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。如何编写一个节点编写主干...
      99+
      2023-07-05
    • 与ChatGPT结对编程实现代码详解
      目录以终为始如何编写一个节点编写主干逻辑边界划分功能迭代总结一下以终为始 按照上一篇的架构,我们整个程序最后写完的运行视图大概是下面这个样子的: 可以看出我们的实际结果比我们上一...
      99+
      2023-03-21
      ChatGPT编写代码 ChatGPT编程
    • ChatGPT怎么写好Prompt编程
      这篇文章主要讲解了“ChatGPT怎么写好Prompt编程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ChatGPT怎么写好Prompt编程”吧!好的 prompt 具有的设计原则清晰,切...
      99+
      2023-07-05
    • python面向对象编程怎么实现
      这篇文章主要介绍“python面向对象编程怎么实现”,在日常操作中,相信很多人在python面向对象编程怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python面向...
      99+
      2024-04-02
    • 怎么测试驱动ChatGPT编程
      这篇“怎么测试驱动ChatGPT编程”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么测试驱动ChatGPT编程”文章吧。n...
      99+
      2023-07-05
    • java中怎么实现面向对象编程
      这篇文章给大家介绍java中怎么实现面向对象编程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1:允许将子类的引用付给父类的对象,但子类中的那些不是从父类继承来的成员将不再可见。例:Bus bus=new&n...
      99+
      2023-06-17
    • ChatGPT的API中怎么实现支持多轮对话
      这篇文章主要介绍“ChatGPT的API中怎么实现支持多轮对话”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ChatGPT的API中怎么实现支持多轮对话”文章能帮助大家解决问题。一、问题ChatGP...
      99+
      2023-07-05
    • Python+ChatGPT实现5分钟快速上手编程
      目录1、chatGPT是个啥2、chatGPT怎么注册3、chatGPT怎么用4、小结最近一段时间chatGPT火爆出圈!无论是在互联网行业,还是其他各行业都赚足了话题。 俗话说:&...
      99+
      2023-02-16
      Python ChatGPT编程 Python ChatGPT
    • Java与C++中怎么实现混合编程
      Java与C++中怎么实现混合编程,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现原理实现Java和C++的交互,使用的技术是称为JNI( Java Nati...
      99+
      2023-06-17
    • ChatGPT怎么用Python实现BinarySearchTree
      本篇内容介绍了“ChatGPT怎么用Python实现BinarySearchTree”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ChatG...
      99+
      2023-07-05
    • Java面向对象编程的多态怎么实现
      本文小编为大家详细介绍“Java面向对象编程的多态怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java面向对象编程的多态怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Java面向对象编程之多态...
      99+
      2023-06-26
    • 对象编程算法与NumPy库:如何将它们结合起来在Go中实现?
      Go语言是一门强大的编程语言,它支持面向对象编程和函数式编程等多种编程范式。Go语言的标准库提供了很多有用的工具和函数,但是如果我们需要进行科学计算或者数据分析等任务,就需要使用NumPy库。NumPy库是Python语言中的一个科学计算...
      99+
      2023-10-24
      对象 编程算法 numy
    • Python 数据结构与其他编程语言的对比:发现差异
      ...
      99+
      2024-04-02
    • ChatGPT怎么实现PHP中的AOP
      这篇文章主要讲解了“ChatGPT怎么实现PHP中的AOP”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ChatGPT怎么实现PHP中的AOP”吧!在 PHP 中,AOP 的实现方式主要包括...
      99+
      2023-07-05
    • Java并发编程之对象的共享怎么实现
      这篇文章主要介绍“Java并发编程之对象的共享怎么实现”,在日常操作中,相信很多人在Java并发编程之对象的共享怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java并发编程之对象的共享怎么实现”的疑...
      99+
      2023-06-29
    • Java结合JS实现URL编码与解码
      通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。 例如,Url参数...
      99+
      2024-04-02
    • .Net结合JS实现URL编码与解码
      目录解决问题1.为什么需要编码?1.1 浏览器对于中文的编码1.2 需要编码的原因还有几点2.怎样编码?3.实际出现的问题解决方法3.1.escape函数:3.2.encodeURI...
      99+
      2024-04-02
    • 使用C语言怎么实现面向对象编程OOP
      本篇文章为大家展示了使用C语言怎么实现面向对象编程OOP,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。过程&对象?一个对象就是由或多或少的针对这个对象的过程构成的,当然其中是少不了必要的属性...
      99+
      2023-06-16
    • Java中怎么实现线程编程
      Java中怎么实现线程编程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、继承Threadpublic class T4 {public&n...
      99+
      2023-06-20
    • Python中怎么实现线程编程
      Python中怎么实现线程编程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、调用thread模块中的start_new_thread()函数来产生新的线程,请看代码:p...
      99+
      2023-06-17
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作