• 0
  • 0
分享
  • Python+ChatGPT API,搭建专属你的智能聊天机器人
  • 曼倩诙谐 2023-04-12 13:52:18 字数 4610 阅读 2005 收藏 0

  最近火出圈的 ChatGPT 公司 OpenAI 发布了 Chat API 和 gpt-3.5-turbo 模型,我们现在可以通过API 来使用与 ChatGPT 一样的 NLP 模型。

  使用OpenAI API,可以使用gpt-3.5-turbo构建自己的应用程序,可执行以下任务:

  草拟电子邮件或其他文字内容写代码,例如Python代码

  创建对话代理,回答各类问题

  为您的软件提供自然语言界面

  在各种学科中进行辅导

  翻译语言

  为视频游戏模拟角色等

  待发掘的各种应用场景……

  下面用 Python 来讲解如何使用 openai python SDK 实现自己的聊天机器人。如果你之前使用过 openai python SDK,请确保升级到了最新版本 (0.27.0),如果还没有安装 Python 运行环境,请先安装 python 3.10。

  获取API Key

  你需要获取 API Key, 如果你已经使用过 openai SDK 那么你可能已经有 API Key 了(这种情况请跳过本节内容)。

  登录 https://platform.openai.com/ 并导航到 https://platform.openai.com/account/api-keys 点击 Create new secret key 按钮可以获取一个新的 API Key。

  注意:API Key 内容只会显示一次。点击复制按钮把 API Key 复制并保存好。

1-1.png

  创建API

  用 FastAPI 快速创建一个 API,它的接口定义如下:

POST /chatbot/talk
Request Body:
{
“message”: "你好!"
}
Response:
{
  “content”: “bot response message”
}

  首先,你需要安装 FastAPI 和 OpenAI SDK,可以通过以下命令在命令行中安装它们:

pip install fastapi uvicorn openai

  为了演示方便,此处简化了一些最佳实践,下面是一个最基本的 FastAPI 服务实现,文件保存在

main\app.py文件中。
import openai
from typing import List
from fastapi import FastAPI
from pydantic import BaseModel
from starlette.middleware.cors import CORSMiddleware
history = []
app = FastAPI()
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["HEAD", "OPTIONS", "GET", "PUT", "PATCH", "POST", "DELETE"],
    allow_headers=["*"],
    max_age=86400
)
openai.api_key = "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"
class TalkRequest(BaseModel):
    message: str
@app.post("/chatbot/talk")
async def chatbot_talk(user_input: TalkRequest):
    if not history:
        history.append({"role": "system", "content": "You are a helpful assistant."})
    history.append({"role": "user", "content": user_input.message.strip() })
    response = await openai.ChatCompletion.acreate(
         model="gpt-3.5-turbo",
         messages=history)
    bot_response = response.choices[0].message
    history.append(bot_response)
    return bot_response

  现在只需创建一个 run.py文件来启动 FastAPI 服务。

import uvicorn
from main.app import app
if __name__ == '__main__':
    uvicorn.run(
        app=app,
        host="127.0.0.1",
        port=8080,
        use_colors=True,
        log_level="debug"
    )

  接下来运行 run.py。

  在浏览器中打开 http://127.0.0.1:8080/docs 即可看到 Swagger 界面已经加载并显示出我们的 Talk API,如下图所示:

1-2.png

  点击 Try it out, 在 message 里填入一个句子,例如我们这里输入的”你好”,点击 Execute按钮。如果没有问题应该能得到下面的响应结果:

1-3.png

  OK,到这里我们的后台服务就已经准备好了。

  UI界面

  接下来我们做一个基于VUE 的UI 界面来实现聊天窗口。要实现基于VUE的聊天界面,需要执行以下步骤:

  在 Vue 项目中创建一个聊天组件,例如 Chat.vue。

  在 Chat.vue 中添加一个文本框和一个发送按钮,用于向聊天机器人发送消息。

  使用 VUE 的数据绑定功能,将文本框的值绑定到一个名为message的 Vue 组件数据属性。

  在发送按钮上添加一个点击事件,该事件将调用一个发送消息的方法,该方法将使用 Axios(或其他 HTTP 库)将消息 POST 到聊天机器人 API。

  在发送成功后,使用 Axios 响应中的数据更新 Vue 组件数据属性的值,以显示聊天机器人的响应消息。

  下面是一个示例 Chat.vue 文件的基本代码:

<template>
  <div>
    <div v-for="(message, index) in messages" :key="index">
      <div v-if="message.isBot">{{ message.content }}</div>
      <div v-else>{{ message.content }}</div>
    </div>
    <input v-model="message" type="text" placeholder="Type your message here...">
    <button @click="sendMessage">Send</button>
  </div>
</template>
<script>
import axios from 'axios'
export default {
  name: “ChatView”,
  data() { 
    return {
      message: '',
      messages: [],
    }
  },
  methods: {
    async sendMessage() {
      const url = 'http://127.0.0.1:8080/chatbot/talk'
      const data = { message: this.message }
      const response = await axios.post(url, data)
      this.messages.push({ content: this.message, isBot: false })
      this.messages.push({ content: response.data.content, isBot: true })
      this.message = ''
    },
  },
}
</script>

  在这个示例中,messages 是一个数组,它用于存储聊天记录。

  sendMessage 方法将新消息添加到 messages 数组中,并使用 Axios 发送消息并更新响应的数据属性。

  最后,它清空了 message 数据属性,以便用户可以输入下一个消息。

  在模板中,我们使用 v-for 循环遍历 messages 数组,并根据 isBot 数据属性来判断消息是用户的消息还是聊天机器人的消息。

  运行

  最后,要在浏览器中运行 Vue 应用程序,需要执行以下步骤。

  注意:确保已经安装了 Node.js 和 npm,这将使我们能够使用 Vue 的命令行工具来创建和管理的项目。

  (1)打开命令行终端,导航到项目目录,并使用以下命令安装:

npm install -g cnpm --registry=https://registry.npmmirror.com
cnpm install -g @vue/cli

  (2)使用以下命令创建一个新的 Vue 项目:

vue create my-chat-app

  这将提示选择一些选项来配置我们的项目,例如要使用哪个包管理器,要使用哪些插件等等。

  可以根据需求进行选择,稍等片刻项目即可创建成功,如下图所示:

-4.png

  (3)进入 my-chat-app 目录,安装 Axios,可以使用以下命令:

cnpm install axios --save

  打开创建的项目文件夹,将 Chat.vue 组件添加到 src/components 文件夹中。

  打开 src/App.vue 文件,并将以下代码添加到模板中:

<template>
  <div>
    <Chat />
  </div>
</template>
<script>
import Chat from './components/Chat.vue'
export default {
  name: 'App',
  components: {
    Chat,
  },
}
</script>

  这将把 Chat 组件添加到 App.vue 模板中,以便您可以在浏览器中查看聊天界面。

  (4)在命令行终端中运行以下命令启动开发服务器:

pm run serve

1-5.png

  如上图所示,Web Server 已经启动完毕,用浏览器打开 http://localhost:8081/ 可以看到一个基本的聊天窗口,当然这里只有一个简单的示例来展示基本操作:

1-6.png

  因文章篇幅有限,感兴趣的同行完全可以利用前端技术做出更精美的机器人聊天窗口。



作者:肥狗Mark    

来源:http://www.51testing.com/html/12/n-7795512.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 流程和规范,是控制软件质量不可或缺的一种手段。在现在复杂的软件产品开发流程中,任何一个环节如果没有做好,其引发的质量风险就像地雷一样,随时可能被下游团队引爆。下面是血淋淋的例子:搜狗某产品在进行通知栏消息下发时,没有严格遵守“先测试环境,后线上环境”的验证流程,直接将通知信息发布在线上环境,致使下发的通知存在异常无法打开落地页的问题,最终导致市场推广计划告吹。搜狗某产品,开发没有提交测试验证,私自打包上线,致使上线的数据存在异常,导致用户大面积出现崩溃问题,崩溃率成倍飙升。好了,现在开始正题。Bug管理规范bug提交规范Bug的报告要求描述内容清晰、简介、易懂,让用根据简要描述就可以大致了解问...
            0 0 424
            分享
          • 概述记得2019年,微信支付出过一个故障,用户发起支付给了钱后,微信一直不回调,导致使用了微信支付的商家的订单都成了未支付状态了,如果业务系统设计的不好,那瞬间就会有大量的客诉出现。像下面的对话场景,我相信当时肯定非常的多:用户:我支付了好几次了,你说你没收到?别开玩笑了。 商家:我这边真的没收钱。然后心想:这家伙不会是想吃霸王餐吧?虽然像微信和支付宝这样的大牌支付平台,出大故障的几率比较少,但是也不得不防。下面列举几个支付问题以及对应的解决思路。第三方支付平台无法支付以微信为例子,像2019年微信支付出故障时,美团那边,是在APP侧,立刻将微信支付置灰了,引导用户使用支付宝支付,将损失和影响...
            0 0 2369
            分享
          •   性能测试用例设计通常不会一次设计到位,是一个不断迭代完善的过程,即使在使用过程中,也不是完全按照设计好的测试用例来执行,需要根据需求的变化进行调整和修改。  WEB性能测试用例设计模型是一个内容全面比较容易组织和调整的模型架构。  预期性能指标测试用例  指一些十分明确的,在系统需求设计阶段预先提出的,期望系统达到的,或者向用户保证的性能指标。  针对每个指标都要编写一个或者多个测试用例来验证系统是否达到要求,预期性能指标测试用例主要参考需求和设计文档,把里面十分明确的性能要求提取出来,指标中通常以单用户为主。  如:对于普通的客户端,系统上传5MB以内的文件,速度不低于2MB/S。  输...
            0 0 192
            分享
          •   我是一个刚进入社会的测试新人,在刚踏入社会时,根本不知道自己能够干嘛,自己想干嘛,我很羡慕那些知道自己喜欢什么,自己想干什么的人,有一件自己喜欢的东西真得很好。  我找工作的时候心情非常焦虑,因为没有什么面试机会,每天去招聘网站上跟人交流寻找面试机会,好不容易有几个面试机会,但也因为准备不充分等原因,没有通过面试,没有得到工作机会。  我很苦恼,我在想自己是否适合这个行业,是否适合这个工作岗位。家人呢也很关心自己的工作情况,每天会打电话询问,其实情况是很糟糕的,但不想让家人担心,只能说自己过得还挺好,面试机会也挺多,让他们不要跟着自己忧心。  因为刚出来没有什么收入,每天的开销也挺大,一直...
            14 14 1647
            分享
          •   微软已经宣布结束对Windows 10 21H2版本的支持。该操作系统的特定版本将不再收到带有安全改进、错误修复和其他必要变化的每月更新。因此,那些使用Windows 10 21H2版本的人应该尽快更新到一个较新的版本,以保持他们的系统得到保护和更新。  Windows 10 21H2版在2021年下半年到来,变化清单不大。微软随产品对家庭版、专业版、专业教育版和工作站专业版SKU的18个月的技术支持。以商业为重点的版本,企业版、教育版、物联网企业版和企业多会话版将继续接受一年的更新 - 微软计划在2024年6月11日放弃对它们的支持。  微软在发布Windows 11原始版本的同时,还发...
            0 0 792
            分享
      • 51testing软件测试圈微信