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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 1、引言在上一章, 我封装了http_service,  如果你不知道的话, 直接点击《Python3,接口自动化框架之封装http_service》跳转去看。 当然,也有小伙伴私下跟我说, 没想到, http_service的封装, 会这么简单。其实... 确实... 不难...今天,我们继续来封装接口自动化框架。在封装之前, 我们先想一个问题:你喜欢使用脚本来维护测试用例, 还是喜欢用excel来维护测试用例?如果你的接口参数经常改变, 使用脚本来维护,必然不是一个最高效的方式, 这个时候, excel的维护方式,就排上用场了。 让代码直接读取exc...
            1 0 1538
            分享
          •   本次上线的项目属于OA系统中的一个子模块。OA系统,百度百科上解释,Office Automation(简称OA),即办公自动化,是将计算机、通信等现代化技术运用到传统办公方式,进而形成的一种新型办公方式。办公自动化利用现代化设备和信息化技术,代替办公人员传统的部分手动或重复性业务活动,优质而高效地处理办公事务和业务信息,实现对信息资源的高效利用,进而达到提高生产率、辅助决策的目的,最大限度地提高工作效率和质量、改善工作环境。笔者所在公司的OA项目提供已授权的同事浏览各家公司首页、申请单据、审批单据等功能。本次谈及的项目模块即包含给公司首页浏览、公司专题配置以及模块编码功能。  产品提出的...
            0 0 476
            分享
          • 简介在测试中,为了度量产品质量,代码覆盖率被作为一种测试结果的评判依据,在Python代码中用来分析代码覆盖率的工具当属Coverage。代码覆盖率是由特定的测试套件覆盖被测源代码的程度来度量,Coverage是一种用于统计Python代码覆盖率的工具,通过它可以检测测试代码的有效性,即测试case对被测代码的覆盖率几何。Coverage支不仅持分支覆盖率统计,还可以生成HTML/XML报告。并且XML报告可以结合Jenkins和Sonar集成工具一起使用。Coverage官方文档:http://coverage.readthedocs.org/en/latest/安装Coverage作为Py...
            0 0 3582
            分享
          •   无论是要理解测试,还是做好软件测试,都要抓住这7个核心问题:  1. 测试选择标准与测试充分性 (终止原则)  测试选择标准是选择测试集或确定?个测试集是否满足指定目标的方法。测试充分性标准可以用来决定何时测试充分或者是否完成。  2. 测试有效性与测试目标  通过一系列程序的执行对测试的效率进行分析。对将要执行的测试用例的选择因其目标而异, 即测试集的效率评价基于具体想要实现的目标。  3. 以寻找缺陷为目标的测试  在以寻找缺陷为目标的测试活动中, 是否能够导致系统失效,这是测试是否成功的标准。这与测试软件是否满足设计规约或其它属性有很大的不同, 后者的成功取决于软件在现实的测试用例和...
            0 0 1051
            分享
          • 在日常的编写SQL中,我们都会遇到一些自以为很简单实际却又不怎么熟练的内置函数,虽然我们不一定都用的上,但是要用上的时候我们得知道。为了记录最近遇到的坑,决定把它以场景模式记录下来,方便日后使用,也是一次记忆的加深场景1:当你sql查询出来的字段没有值,或者为null时,做数据分析时,这些个为null的字段会造成很大的困扰,所以我们需要给可能出现null的字段添加一个默认值,这个时候SQL的内置函数IFNULL()与COALESCE() 就能很好的满足我们的需求 IFNULL() 函数作用: IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返...
            0 3 2684
            分享
      • 51testing软件测试圈微信