庆云古诗词

庆云古诗词

五款超好用的chatgpt程序 如何用chatgpt写中文文章

互联资讯 0

2023年11月20日 每日一猜答案: 答案:ABC
每日一猜答案分析:

五款超好用的百乐笔

在我上一篇文章里,我详细介绍了怎么用ChatGPT 3.5 API搭建一个私人聊天机器人网站,让它跟ChatGPT的用户体验极其类似,但又没有ChatGPT那些糟心的流量控制问题。还用了Streamlit这个超棒的Python库来开发Web应用,不用懂HTML也行。如果你没有看过那篇文章,链接就在这里哦。其实不用看也行,因为我会在这篇文章里从头到尾给你详细讲解这些工具和技术框架。

也鱼实验室:如何花10分钟做一个自己专属的ChatGPT网站

今天,我们要集中精力开发一个基于ChatGPT API的私人语音聊天机器人的Web应用。我们的目标是深入挖掘AI的潜在用途和商业机会。尽管比较简单,但我会一步步地给你讲解开发过程,保证自己也能做出来。让我们开始吧!

除了我在上一篇文章中提到的创建自己的聊天机器人应用程序的必要性之外,还有更多理由说明你应该开发一个语音驱动的聊天机器人:

  1. 并不是每个人都喜欢基于打字的服务。想象一下,还在学拼音的孩子或者视力不好,看不清屏幕上文字的老年人,用语音聊天机器人解决这个问题就很好,就像它帮助我家小朋友要求语音聊天机器人为他现编睡前故事一样。
  2. 鉴于现有的智能助手选项,如苹果的Siri和亚马逊的Alexa,将语音交互融入GPT模型可以开启更广泛的可能性。ChatGPT API在创造连贯、相关背景的回复方面有着出色的能力,结合基于语音的智能家居,物联网的想法,可能会提供大量的商业机会。我们在本文中创建的语音助手将成为入门的关键。

在这个应用中,我们有三个主要模块:

  • 语音转文字 - Bokeh和WebSpeech API
  • 对话生成 - OpenAI GPT-3.5 API
  • 文字转语音 - gTTS

然后我们使用Streamlit库进行Web框架开发。

如果你在上一篇文章已经了解了如何使用OpenAI的GPT-3.5 API,并且也知道如何用Streamlit开发一个Web应用,可以直接跳过下面两个章节。

如果你已经拥有了OpenAI API Key,请继续使用它,而不是创建一个新的。如果你是OpenAI的新手,请注册一个新账号,并在你的账户菜单中找到下面这个页面:

生成Key之后,需要马上复制保存下来,因为网站上在创建时显示一次后就再也不允许完整显示Key的内容了。

目前GPT-4.0已经发布,但是该模型的API还没有完全发布,所以我们的应用程序调用的仍然是GPT 3.5模型,不过它足够强大,可以完成我们的AI语音对话机器人的应用。

现在让我们看一下来自 OpenAI 的最简单的演示,来了解下 ChatCompletion API(或称为 gpt-3.5 API 或 ChatGPT API)的基本定义:

安装包:

!pip install openai

如果的OpenAI包下载安装的比较早,那么你可能需要升级一下:

!pip install --upgrade openai

创建和发出Prompt:

import openai  complete = openai.ChatCompletion.create(    model="gpt-3.5-turbo",    messages=[          {"role": "system", "content": "You are a helpful assistant."},          {"role": "user", "content": "Who won the world series in 2020?"},          {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},          {"role": "user", "content": "Where was it played?"}      ]  ) 

接收回答:

message=complete.choices[0].message.content

由于GPT 3.5 API是基于对话的文本完成API,因此确保你的ChatCompletion请求消息体包含对话历史作为上下文,以使模型能够更加相关地回应你当前的请求。

为了实现这个功能,消息体的列表对象应按以下顺序组织:

  • system消息被定义为在消息列表顶部的内容中添加指令以设置AI的对话风格。如介绍中所提到的,目前这种功能在gpt-3.5-turbo-0301中尚未完全释放。
  • User消息表示用户的输入或查询,而Assistant消息则指GPT-3.5 API返回的相应响应。这些对话配对给出了模型关于上下文的参考。
  • 最后一条User消息则是指当前时刻请求的Prompt。

与我们上一篇文章介绍的项目一样,我们将继续使用强大的Streamlit库来构建Web应用程序。

Streamlit是一个开源框架,使得数据科学家和开发者能够快速构建和分享用于机器学习和数据科学项目的交互式Web应用程序。它还提供了一堆小部件(Widgets),只需要一行Python代码即可创建,如st.table(...)。如果你不太擅长Web开发,并且像我一样也不想构建一个大型商业网站,那么几乎不需要HTML方面专业知识的Streamlit,始终是你的最佳选择之一。

让我们来看一个最简单的应用案例。

安装包:

!pip install streamlit

创建一个叫做demo.py的python文件:

import streamlit as st    st.write("""  # My First App  Hello *world!*  """)

在本地或服务器上运行:

!python -m streamlit run demo.py

如出现了以下打印,那么说明你的网站成功上线了:

You can now 【【微信】】 in your browser.      Network URL: http://xxx.xxx.xxx.xxx:8501    External URL: http://xxx.xxx.xxx.xxx:8501

这个AI语音聊天机器人的关键特点之一是它能够识别用户的语音并生成适当的文本,供我们的ChatCompletion API用作输入。

OpenAI的Whisper API提供的高质量语音识别是一个不错的选择,但它的代价也相应昂贵。另一方面,Javascript提供的免费Web Speech API具有可靠的多语言支持和出色的性能。虽然在开发Python项目时使用自定义Javascript可能看起来不兼容,但不用担心!在下一节中,我将介绍一种在Python程序中调用Javascript代码的简单技术。

先让我们看看使用Web Speech API来实现一个简单的语音识别的代码案例:

【【微信】】ew webkitSpeechRecognition();  recognition.continuous=false;  recognition.interimResults=true;  recognition.lang='en';    recognition.start();

在调用 webkitSpeechRecognition() 方法初始化识别对象后,需要定义一些属性。continuous 属性表示是否希望 SpeechRecognition 函数在成功处理一次语音输入后持续采集并转换。由于我希望语音 Chatbot 能够稳定地基于用户语音输入生成每个答案,因此将其设置为 false。interimResults 属性设置为 true,将在用户语音期间生成一些中间结果,以便用户可以看到从其语音输入产生的动态识别过程。lang 属性将为请求设置识别的语言。如果代码中未设置它,则默认语言将来自识别到的HTML元素中的访问者语言,因此具有不同语言设置的用户可能会有不同的体验。识别对象具有多个事件,我们使用 .onresult() 回调来处理来自中间结果和最终结果的文本生成结果。

recognition.onresult=function (e){      var value, value2="";      for (va【【微信】】; i < e.results.length; ++i){          if (e.results[i].isFinal){              value +=e.results[i][0].transcript;              rand=Math.random();                        }else{              value2 +=e.results[i][0].transcript;          }      }  }

从用户界面上的定义,我们想要设计一个按钮来启动语音识别,而我们在上一节中已经用Javascript实现了它的功能,现在要把它结合到Web应用里来。

Streamlit库不支持自定义JS代码,所以我们用到了Bokeh。Bokeh库是Python中另一个强大的数据可视化工具。之所以引入它,是因为可以嵌入自定义的Javascript代码,这意味着我们可以在Bokeh的按钮小部件下运行我们的语音识别脚本。为了实现这一点,我们应该安装Bokeh软件包。为了与稍后我们将提到的streamlit-bokeh-events库兼容,Bokeh的版本应该是2.4.2:

!pip install bokeh==2.4.2

Import必要的包

from bokeh.models.widgets import Button  from bokeh.models import CustomJS

创建按钮控件

spk_button=Button(label='SPEAK', button_type='success')

定义控件回调事件

spk_button.js_on_event("button_click", CustomJS(code="""      ...js code...  """))

.js_on_event()方法用于注册spk_button的事件。在这个例子中,我们注册了“button_click”事件,该事件将在用户点击后触发由CustomJS()方法嵌入的JS代码块的执行。

在实现SPEAK按钮及其回调方法之后,下一步是将Bokeh事件的输出(识别的文本)连接到其他函数块,以便将提示文本发送给ChatGPT API。由于Streamlit的开放特性,有一个名为“Streamlit Bokeh Events”的开源项目,旨在提供与Bokeh控件的双向通信。

这个库的使用非常简单。首先安装该库包:

!pip install streamlit-bokeh-events

使用【【微信】】nts方法创建一个result对象

【【微信】】treamlit_bokeh_events(      【【微信】】=spk_button,      events="GET_TEXT,GET_ONREC,GET_INTRM",      key="listen",      refresh_on_update=False,      o【【微信】】=75,      debounce_time=0)

使用 【【微信】】 属性来注册上一节中创建的 spk_button按钮。使用 events 属性来传递几个自定义 HTML Documents事件:

  • GET_TEXT,用于接收最终的识别文本。
  • GET_INTRM,用于接收过程中的识别文本。
  • GET_ONREC,用于接收语音处理阶段。
  • 我们可以使用 JS 函数 document.dispatchEvent(new CustomEvent(…)) 来生成事件,例如 GET_TEXT 和 GET_INTRM 事件:
spk_button.js_on_event("button_click", CustomJS(code="""      【【微信】】ew webkitSpeechRecognition();      recognition.continuous=false;      recognition.interimResults=true;      recognition.lang='en';            var value, value2="";      for (va【【微信】】; i < e.results.length; ++i){          if (e.results[i].isFinal){              value +=e.results[i][0].transcript;              rand=Math.random();                        }else{              value2 +=e.results[i][0].transcript;          }      }      document.dispatchEvent(new CustomEvent("GET_TEXT",{detail:{t:value, s:rand}}));      document.dispatchEvent(new CustomEvent("GET_INTRM",{detail: value2}));        recognition.start();      }  """))

然后,查看result.get()方法返回的内容查看GET_INTRM事件的内容,如:

tr=st.empty()  if result:      if "GET_INTRM" in result:          if result.get("GET_INTRM") !='':              tr.text_area("**Your input**", result.get("GET_INTRM"))

这两段代码实现了,当用户的语音输入正在进行时,任何临时识别出来的文本都将显示在 Streamlit 的 text_area 控件上:

在通过ChatGPT API生成响应文本并完成提示请求后,我们使用Streamlit的st.write()方法将响应文本直接显示在网页上。

然而,我们需要将文本转换为语音以完善我们的AI语音聊天机器人的双向语音功能。

有一个比较流行的Python库叫做“gTTS”,能够完美地完成这项工作。它支持多种语音数据输出格式,在与Google翻译的文本转语音API接口交互后,生成mp3或stdout。

只需几行代码即可完成转换。首先安装这个包:

!pip install gTTS

在这个应用里,我们不打算把语音保存在硬盘里,因此我们使用BytesIO()来暂存语音数据:

sound=BytesIO()  tts=gTTS(output, lang='en', tld='com')  tts.write_to_fp(sound)

output对象是要转换的文本字符串,可以通过tld从不同的Google域选择不同的语言。例如,可以设置tld='co.uk'来生成英国口音。

然后,通过Streamlit控件创建一个简洁的音频播放器:

st.audio(sound)

整合上述所有模块,完成所有功能:

  1. 与 ChatCompletion API 的完整交互,包括在User和Assistant消息块中定义的附加历史对话。使用 Streamlit 的 st.session_state 存储运行变量。
  2. 完成 SPEAK 按钮的 CustomJS 中的事件生成,考虑到多个事件,如 .onspeechstart()、.onsoundend() 和 .onerror(),以及识别过程。
  3. 完成事件处理,以处理“GET_TEXT,GET_ONREC,GET_INTRM”事件,在用户讲话时在 Web 界面上显示适当的信息并管理文本显示和拼接。
  4. 所有必要的 Streamit 小控件

请查看以下完整演示代码:

import streamlit as st  from bokeh.models.widgets import Button  from bokeh.models import CustomJS    from streamlit_bokeh_e【【微信】】_bokeh_events    from gtts import gTTS  from io import BytesIO  import openai    openai.api_key='{Your API Key}'    if 'prompts' not in st.session_state:      st.session_state['prompts']=[{"role": "system", "content": "You are a helpful assistant. Answer as concisely as possible with a little humor expression."}]    def generate_response(prompt):        st.session_state['prompts'].append({"role": "user", "content":prompt})      completion=openai.ChatCompletion.create(          model="gpt-3.5-turbo",          me【【微信】】['prompts']      )            message=completion.choices[0].message.content      return message    sound=BytesIO()    placeholder=st.container()    placeholder.title("Yeyu's 【【微信】】")  stt_button=Button(label='SPEAK', button_type='success', margin=(5, 5, 5, 5), width=200)      stt_button.js_on_event("button_click", CustomJS(code="""      var value="";      var rand=0;      【【微信】】ew webkitSpeechRecognition();      recognition.continuous=false;      recognition.interimResults=true;      recognition.lang='en';        docume

怎么让chatgpt帮你写代码 如何用chat gpt写一个完整的软件

怎么让chatGPT帮你写论文

自从去年ChatGPT问世以来,代替程序员开发的话题一直不断。最近一个月更是火的一塌糊涂。ChatGPT到底能不能真的代替程序员?

如果我只是略微懂一点前端知识的新人,了解 HTML、CSS、JS 相关的知识,想开发一个安卓 App ,我应该如何利用 ChatGPT 这样的工具呢?

如果让我现在直接去用 ChatGPT 开发一个 App 肯定也不靠谱,毕竟过程中还得看问题,对于比较新晋的开发者来说,debug 也是一个非常上头的工作。但是如果让他帮我生成一个微信小程序,那就能顺利拿捏住了,后面再利用其他工具直接把这个小程序转为 App 就可以了。

思路确定,说搞就搞!

我发现虽然现在ChatGPT能够非常友好的帮助开发者完成各项任务,但是有一个非常重要的前提就是你需要懂得如何有效的给出命令,让他能够理解你的需求描述。这一点非常重要,我个人认为大家平时的工作中也需要有意识的训练自己的文字、语言表达能力。

我这里为了让整个流程更简单一些,我直接让ChatGPT帮我生成一个时钟小程序,能够以大号字体显示当前的时间,另外我希望时间字体是宇宙蓝,背景是纯黑色。

为了让ChatGPT能够更快理解我的描述,我将需求重新排了一个格式:

代码需求:开发一个微信小程序

功能描述:屏幕中间显示当前的日期和时间,日期在上,时间在下。时间的显示需要大号字体,字体颜色为宇宙蓝,整个背景是全屏纯黑色。

接下来就是ChatGPT的表演了:

因为我后续需要将小程序转为 App,经过技术的调研,发现现在 FinClip 是可以直接将小程序转为 App ,并且这个工具可以兼容微信代码,于是我直接在 FinClip 创建小程序项目,为方便后续的小程序转 App,开发工具也使用使用的 FIDE。

下面我们看看在上面的实现情况:

直接把 ChatGPT 生成的代码复制粘贴到开发工具对应的页面中,不要太爽。

前面也说到了假设我是个只懂 HTML、CSS、JS 相关知识的小白型开发者,直接上手 App 是有难度的,但是做一个小程序是基本能应付的,这里就可以借用 FinClip 开发工具的小程序转 App 功能。

整个过程跟着弹窗的提示操作就好,没有太大的难度。

后续系统会生成一个工程文件,放到 Android Studio 也能正常打开,并能后续根据自己的需求进行优化更改。

市面中出现了越来越多的 Ai 工具,例如 ChatGPT 还可以用到文字创作、想法启迪等很多场景中,我们只要用的恰当,会实打实的帮我们提升工作的效率。

以上是我以一个完全小白的开发者角度使用 ChatGPT 开发小程序再用其他工具转 App 的实现路径。

另外,实践发现 GPT3.5 可能出现给的代码无法运行的情况,GPT4.0 是没问题的,如果大家使用3.5给出的代码无法用,可以用4.0试试,欢迎大家拍砖。