庆云古诗词

庆云古诗词

顺应潮流,解放双手,让ChatGPT直接编写可融入业务可运行的程序代码(Python3.10实现)

互联资讯 0

淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】

顺应潮流的意思,顺应潮流的好处,顺应潮流用英语怎么说,表示顺应潮流的诗句

众所周知,ChatGPT可以帮助研发人员编写或者Debug程序代码,但是在执行过程中,ChatGPT会将程序代码的一些相关文字解释和代码段混合着返回,如此,研发人员还需要自己进行编辑和粘贴操作,效率上差强人意,本次我们试图将ChatGPT直接嵌入到代码业务中,让ChatGPT生成可以直接运行的代码。

首先,我们向ChatGPT提出一个简单的代码需求:

可以看到,就像上文所描述的那样,ChatGPT会将文字描述和代码片段混合着返回,其实对于真正的需求者来说,文字描述本身是不必要的,因为如果提问者不知道什么是布隆过滤器,也就不会提出布隆过滤器相关的代码需求。

再看ChatGPT返回的布隆过滤器代码:

import hashlib      class BloomFilter:        def __init__(self, size, hash_count):            self.size=size            self.hash_count=hash_count            self.bit_array=[False]* size          def add(self, string):            for seed in range(self.hash_count):                result=hashlib.sha256((string + str(seed)).encode()).hexdigest()                index=int(result, 16) % self.size                self.bit_array[index]=True          def __contains__(self, string):            for seed in range(self.hash_count):                result=hashlib.sha256((string + str(seed)).encode()).hexdigest()                index=int(result, 16) % self.size                if not self.bit_array[index]:                    return False            return True

大体上,没有毛病。但是主观性太强,什么是主观性?就是ChatGPT其实不是站在需求者的视角来编写代码,而是站在自己的角度上,它没有考虑业务的上下文关系,也就是类和方法命名、方法参数、以及参数类型或者返回值以及类型,这些东西是否符合需求者当前的代码业务。

当然,这并不是ChatGPT的错,主要是输入的问题描述不够明确和详细,但如果每次都需要将代码业务逻辑转化为文字告诉ChatGPT,又有些画蛇添足,狗尾续貂之感。

那么怎样将ChatGPT融入业务代码?首先创建Openai接入函数:

import openai      openai.api_key="apikey"      def generate_code(func, docstring):        init_prompt="You are a Python expert who can implement the gichatgpt."        definition=f"def{func}"        prompt=f"Read this incomplete Python code:\  ```python\  {definition}\  ```"        prompt +="\  "        prompt +=f"Complete the Python code that follows this instruction: '{docstring}'. Your response must start with code block '```python'."          response=openai.ChatCompletion.create(            model="gpt-3.5-turbo",            temperature=0,            max_tokens=1024,            top_p=1,            messages=[    {                    "role": "system",                    "content": init_prompt,                },    {                    "role": "user",                    "content": prompt,                },            ],        )          codeblock=response.choices[0].message.content        code=next(filter(None, codeblock.split("```python"))).rsplit("```", 1)[0]      code=code.strip()          return code

诀窍就是提前设置好引导词:

init_prompt="You are a Python expert who can implement the gichatgpt."        definition=f"def{func}"        prompt=f"Read this incomplete Python code:\  ```python\  {definition}\  ```"        prompt +="\  "        prompt +=f"Complete the Python code that follows this instruction: '{docstring}'. Your response must start with code block '```python'."

这里我们提前设置两个参数func和docstring,也就是函数名和功能描述,要求ChatGPT严格按照参数的输入来返回代码,现在运行函数:

if __name__=='__main__':          print(generate_code("test","Sum two numbers"))

程序返回:

?  chatgpt_write_code /opt/homebrew/bin/python3.10 "/Users/liuyue/wodfan/work/chatgpt_write_code/chatgpt_write_code.p    y"    def test(a, b):        return a + b

如此一来,ChatGPT就不会返回废话,而是直接交给我们可以运行的代码。

事实上,函数调用环节也可以省略,我们可以使用Python装饰器的闭包原理,直接将所定义函数的参数和描述传递给ChatGPT,随后再直接运行被装饰的函数,提高效率:

import inspect    from functools import wraps      def chatgpt_code(func):        @wraps(func)        def wrapper(*args, **kwargs):            signature=f'{func.__name__}({", ".join(inspect.signature(func).parameters)}):'            docstring=func.__doc__.strip()            code=generate_code(signature, docstring)            print(f"generated code:\  ```python\  {code}\  ```")            exec(code)            return locals()[func.__name__](*args, **kwargs)          return wrapper

将方法定义好之后,使用基于ChatGPT的装饰器:

if __name__=='__main__':          @chatgpt_code        def sum_two(num1,num2):            """            Sum two numbers.            """          print(sum_two(1,2))

程序返回:

?  chatgpt_write_code /opt/homebrew/bin/python3.10 "/Users/liuyue/wodfan/work/chatgpt_write_code/chatgpt_write_code.p    y"    sum_two(num1, num2):    generated code:      def sum_two(num1, num2):        """        Sum two numbers.        """        return num1 + num2      3

直接将业务逻辑和运行结果全部返回。

那么现在,回到开篇的关于布隆过滤器的问题:

if __name__=='__main__':          @chatgpt_code        def bloom(target:str,storage:list):            """            Use a Bloom filter to check if the target is in storage , Just use this func , no more class            """          print(bloom("你好",["你好","Helloworld"]))

程序返回:

?  chatgpt_write_code /opt/homebrew/bin/python3.10 "/Users/liuyue/wodfan/work/chatgpt_write_code/chatgpt_write_code.p    y"    generated code:      def bloom(target, storage):        # Initialize the Bloom filter with all zeros        bloom_filter=[0]* len(storage)          # Hash the target and set the corresponding bit in the Bloom filter to 1        for i in range(len(storage)):            if target in storage[i]:                bloom_filter[i]=1          # Check if all the bits corresponding to the target are set to 1 in the Bloom filter        for i in range(len(storage)):            if target in storage[i]and bloom_filter[i]==0:                return False          return True      True    ?  chatgpt_write_code

丝滑流畅,和业务衔接得天衣无缝,拉链般重合,不需要挑挑拣拣,也不必复制粘贴。

毫无疑问,ChatGPT确然是神兵利器,吹毛可断,无坚不摧。但工具虽好,也需要看在谁的手里,所谓工具无高下,功力有高深,类比的话,如果倚天剑握在三岁孩童手中,不仅毫无增益,还可能伤其自身,但是握在峨眉掌门灭绝师太手里,那就可以横扫千军如卷席了,那才能体现大宗匠的手段。最后,奉上项目代码,与众乡亲同飨:


微信如何使用Chat Gpt 如何自己开发一个微信聊天机器人

微信如何使用拍一拍功能,微信如何使用指纹支付功能,微信如何使用零钱支付,微信如何使用信用卡支付

近期公众号关注人数增长迅猛,大家各类场景各种姿势与chatgpt交互也让我大开眼界。

周末刚好有点时间,写一篇稍长一点的干货文章:深度拆解chatgpt接入微信全流程攻略,以及使用场景方面的优劣分析。并进一步阐述未来可能有的扩展场景应用,欢迎大家参考后多提提建议,一起拓展AIGC/chatgpt方面的实际应用和场景化体验~

可以直接先看一下一个普通国内用户在chatgpt官网的注册使用流程:

买梯子―进入chatgpt pc官网―进入注册流程--使用国外手机号注册―pc网页开始使用。如果想体验最新模型还需要国外银行卡升级到Plus账号

可以看出几个主要的门槛:梯子、国外手机号、电脑网页端使用。门槛带来的效率和成本问题

以及潜在的成本与限制:使用与注册方法调研、账号访问数量限制、高峰期chatgpt账号限流、全英文环境适应等。普通账号使用起来其实也是限制重重,除非升级Plus账号才有更多保障(限流减弱,能力增强)

基于以上思考以及对微信体系的理解,博主考虑提供基于微信公众号/个人号触达体系能力,与chatgpt全面打通整合的解决方案,为国内用户提供在微信体系内的实时触达体验,并保障/增强链路中chatgpt的问答质量体验以及稳定性,保证是原汁原味、甚至能力可进一步调校增强的官方chatgpt能力体验。

方案关键点包含:微信公众号/个人号能力集成、chatgpt官网通信打通以及多账号轮转分流、chatgpt场景增强与限制、未来扩展性分析与新特性集成等方面

可以先从流程节点上分为微信端和chatgpt端

公众号

公众号如何注册?如何接收普通消息并及时回复?消息回复方面是否有限制?

个人号

个人号微信没有任何能力开放,没有接口,个人号如何与服务器打通,使用微信能力收发消息?

GPT3.5版本(chatgpt)一开始没有开放接口,如何与chatgpt网站直接通信?是否有防刷策略?

除此以外,服务器服务的搭建、存储搭建,也是需要整体去调研解决的,成本方面也需要重点考虑。毕竟前期可能没有用户付费,没有收入,成本方面要比较克制一些。

主要经历了个人可用的MVP版本、公众号版本1、高可用高容量版本2的技术能力演进~

针对上述概要的挑战和问题,近一个月从最初版本开始迭代,经历3-5轮优化,目前已沉淀了较完善的、可用性、扩展性较高的微信+chatgpt解决方案能力。

该版本搭建历时两天,为MVP实验版本

核心思路是通过chatgpt框架,调用微信个人号通信能力实现实时对话,通过开源封装的nodejs版本chatgpt网站http调用框架实现与chatgpt的通信。

整体思路比较简单且直接,具体框架方面可参考下方:

chatgpt官方文档,nodejs的微信个人号通信框架

chatgpt官方网站接入,nodejs版本框架

该版本优势:简单方便容易实现,个人随便玩玩基本够用了

该版本主要问题:

  • 主要为对话交互不稳定。个人号和chatgpt的稳定性问题,chatgpt通信稳定性和容量问题。
  • 个人号较难支撑多人同时对话,除了上述稳定性问题外,还有微信本身的风控机制,可能被封号

经历了个人号的初步尝试和实验,发现微信端与chatgpt的能力整合打通基本可行,主要需要进一步解决个人号上存在的一些使用限制问题,同时为了让更多用户可以发现且直接使用chatgpt能力,我们加入了公众号端的尝试和研发。

主要方案要点为:公众号的注册申请、以及回复能力调用。chatgpt端的通信和调用能力与版本1一致

公众号申请可参考:Sun穿搭:怎样申请公众号?史上最详细步骤,小白都能看得懂!

公众号接收消息与回复能力,直接使用微信公众平台的开放API能力:文本消息 | 微信开放文档

注意上方的公众号接收和回复消息能力,接收用户消息后有15秒超时限制,如果15秒内无法回复,就无法推送消息给到用户了,这也是前期在公众号消息通信方面的较大限制和挑战。

该版本优势:公众号推广覆盖较容易,有官方api接入稳定性保障

该版本主要问题:

  • 公众号接收和回复消息能力,接收用户消息后有15秒超时限制。而chatgpt的长文回复一般时间为2-5分钟,基本都无法在一次超时时间内回复用户。(我们通过引导用户重发问题,缓存回答发给用户绕开该问题,但用户体验不佳)
  • chatgpt我们这边就一个Plus账号,只能支持同一时间一个用户聊天,如果用户过多需要排队等待,可用性依然较差

基于版本2的回复消息15秒超时限制,以及单账号的并发量承载问题。随着公众号粉丝快速增加。版本2的问题我们需要快速解决,不然与官方的体验差距会持续拉开,价值提供有限。

基于此,我们主要解决了两个问题:

  • 公众号被动回复消息的15秒超时限制,我们通过公众号客服消息能力解决。实现任何时刻,想回就回的效果
    • 需要注意使用该能力要有企业资质认证,一次认证流程不管是否通过,都要付认证费300元
  • 单账号的通信并发、额度限制,我们通过多账号轮转分流解决。截止当前我们已经通过配置化能力上线了10+个新注册的账号,支持百人同时在线访问。账号方面可以根据当前在线人数动态调控和分流。

该版本优势:高可用、服务容量保障,实时触达体验保障。实战下来在百人以上同时使用时也可以提供较好体验和扩展性。用户使用感受与官方原版基本完全一致,遇到官网高峰期限流场景,也可以通过账号检测和切换规避,理论上比官方申请的单账号对单用户可用性更强

该版本主要问题:

  • 费账号
  • 实现复杂度稍高,涉及账号轮转路由策略、高保障策略
  • 与官方网站比,还差一个逐字展现、逐字输出能力,受限于微信本身不具备不提供该接口能力

基础体验问题与容量问题在版本3已得到比较完善的解决

这个最新版本还在研发中,主要能力为场景化的提示工程与chatgpt能力增强引入,以及GPT4.0的能力接入调试(较贵),大家可以继续交流以及期待一下

经历了上述版本历程,我们得到了一个可用性较高、可扩展、体验与官方一致甚至略有增强的微信+chatgpt整合解决方案

因为笔者本身就是AI工程相关的互联网多年从业者,对AI技术的实际应用有着非常浓厚的热情。

大概3年前,GAN这种生成式模型开始风靡,就开始研究AIGC的能力与落地场景。但当时的AI能力应用短板相当明显。

直到近期chatgpt横空出世,让我体会到AI模型能力与应用出现了又一次质的飞跃。

到近期的GPT4.0感觉愈发明显。

而GPT本身目前仍主要在自然语言处理与生成领域,个人判断GPT也好,Stable Diffusion这类图像生成模型,在不远的将来也许会产生更多的碰撞融合,从视觉、听觉、语言表达等多领域、多模态处理提供全新的整合模型能力与解决方案。

从商业场景端,不管是论文写作、行业/日常咨询、图像设计、情绪陪聊,具备广阔的场景~

笔者将在AIGC应用领域持续深耕,也欢迎感兴趣的朋友一起加入探讨,集思广益!

公众号“AI智能畅聊”,随时等你来聊~