使用Node js来调用chat API实现智能问答的功能

前端大神之路

共 8283字,需浏览 17分钟

 ·

2024-07-23 08:00

本文适合对OPenAI的API接口应用实战感兴趣的小伙伴阅读。

欢迎关注前端早茶,与广东靓仔携手共同进阶~


前言

下面我们利用参数,使用node js来调用chat API实现智能问答的功能。

为了使朋友们更清晰地了解怎么去调用chat API去生成一个智能问答系统,这里采用了基于node.js Visual Studio Code的极简代码的方式来进行示例。

正文

使用Visual Studio Code来对接Chat API的具体流程如图3.2所示。

3.2 智能问答交互序列图

序列图解释如下:

1)输入答案:用户在UI界面输入其需要回答的问题。

2)调用Chat API:前端直接传入参数,调用chat API服务。

3)用户身份校验:OpenAI 服务器利用调用者提供的key,校验用户身份。

4)获取问题的答案:OpenAI 服务器生成问题的答案。

5)返回答案:前端UI获取Chat API的相应结果。

6)处理答案:前端UI根据需要对答案进行处理。

7)展示答案:前端UI将处理后的答案展示给用户。

后面是利用Visual Studio Code 来调用Chat API去实现智能问答的步骤。

具体步骤

初始化node.js项目

首先,打开VS Code,新建项目。项目建好后,在主菜单选择”Terminal”,打开终端,输入命令:

npm init -y 

注意:此命令会将项目初始化,生成项目所需的文件夹和模块。

然后,我们在项目初始化后,新建“.evn”文件,作为环境变量文件,evn文件里输入申请OpenAI API时获得的key,如下:

API_KEY=sk-XWre0xkvyusgJHqODU8LQIE5bkFJxrlT1A9zR3276FRSH0WA

最后在终端子输入命令进行加载环境变量:

npm i dotenv openai

引入环境变量文件

完成node.js项目初始化之后,开始配置并引入环境变量。

首先新建名为“question.js”的文件,在第一行加上引入环境变量的代码,具体如下:

import { config } from "dotenv"               //引入配置环境变量组件
config()                                  //进行环境变量配置
console.log(process.env.API_KEY)

然后打开同一目录下的“package.json”文件,在其中加入运行配置,代码结果如下:

{
  "name""vs",
  "version""1.0.0",
  "description""",
  "type""module",
  "main""index.js",
  "scripts": {
    "dev""node question.js"
  },
  "keywords": [],
  "author""",
  "license""ISC",
  "dependencies": {
    "dotenv""^16.0.3",
    "openai""^3.2.1"
  }
}

最后,在完成上面的配置修改后,打开终端,输入npm run dev并回车,可以看到引入环境变量成功,输出结果如下:

sk-XWre0xkvyusgJHqODU8LQIE5bkFJxrlT1A9zR3276FRS

调用chat API接口

由于node.jsopenai组件可以直接调用chat API的接口,因此引入openai组件即可省去很多步骤。

首先,在代码中加上引入openai组件中的Configuration,OpenAIApi两个类,具体如下:

import { Configuration, OpenAIApi } from "openai"

然后,引入上述两个类之后,在其后定义接口及接口配置,其中的请求参数具体赋值按照上一节所述写入,代码如下:

const res = await openai
    .createChatCompletion({
        //请求参数
        model: "gpt-3.5-turbo",
        messages: [{ role: "user", content: input }],
        temperature: 0.2,
        max_tokens: 1000,
        top_p: 1,
        n: 1,
    }
    )

增加输入输出命令行

在完成了接口及其配置的代码之后,需要对问题的输入与答案输出进行处理。这是一个轻量级代码的极简示例,因而我们使用简洁的readline组件来作为输入输出介质。

首先,定义输入输出的代码如下:

import readline from "readline"   //引入readline组件的readline类
//定义输入输出界面
const userInterface = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})

然后对调用openai的类的方法进行改造,使其将问题内容作为输入,Chat API返回的答案作为输出,具体代码如下:

//调用openai组件,发送请求
userInterface.on("line", async input => {
    const res = await openai
        .createChatCompletion({
            //请求参数
            model: "gpt-3.5-turbo",
            messages: [{ role: "user", content: input }],
            temperature: 0.2,
            max_tokens: 1000,
            top_p: 1,
            n: 1,
        }
        )
    console.log(res.data.choices[0].message.content)
    userInterface.prompt()
})

完整代码

至此,我们的极简智能问答功能已经完成。总代码清单包括以下文件:

l.env文件:该文件通常用于存储应用程序的环境变量,这些变量可以包含敏感的配置信息,如数据库连接字符串、API 密钥、密码等。环境变量可以在应用程序的不同部分之间共享,并且可以在运行时根据不同的环境进行配置,这个例子里存储了key的值。

lpackage-lock.json文件:该文件是项目中的一个自动生成的文件,用于管理项目的依赖关系和版本信息。它主要用于锁定依赖版本、提高项目的构建速度、确保依赖的完整性、版本控制中的共享和协作。文件通常由 npm 在安装依赖时自动生成和更新,无需手动编辑。

lpackage.json文件:该文件在项目中起着非常重要的作用,它用于管理项目的元数据、依赖关系、脚本和其他配置信息,帮助开发者更好地组织和管理项目,并与其他开发者共享和协作。

lquestion.js文件:主要代码执行的js文件,此系统的功能性代码在这里实现。

lworkspace.code-workspace文件:该文件在 中用于定义工作区的配置信息,包括项目管理、编辑器布局、首选项设置等,帮助开发者更好地组织和管理项目,并在团队协作中提供一致的开发环境。

lnode_modules文件夹:此文件夹是在 Node.js 项目中用于存储第三方依赖模块的文件夹。当你在 Node.js 项目中使用 npm 或者 yarn 等包管理工具安装依赖时,这些依赖模块会被下载并存放在 node_modules 文件夹中。通常来说,此文件夹由项目自动产生及维护,无需人工干预。

这里需要手动添加或修改的代码有三个文件:question.jspackage.json.evn,其余文件均使用初始化(前面输入的“npm init -y ”命令)后生成的文件即可。

question.js代码如下:

import { config } from "dotenv"
import { Configuration, OpenAIApi } from "openai"
import readline from "readline"
//读取配置文件中的key
const openai = new OpenAIApi(
    new Configuration({
        apiKey: process.env.API_KEY,
    })
)

//定义输入输出界面
const userInterface = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})

userInterface.prompt()

//调用openai组件,发送请求
userInterface.on("line", async input => {
    const res = await openai
        .createChatCompletion({
            //请求参数
            model: "gpt-3.5-turbo",
            messages: [{ role: "user", content: input }],
            temperature: 0.2,
            max_tokens: 1000,
            top_p: 1,
            n: 1,
        }
        )
    console.log(res.data.choices[0].message.content)
    userInterface.prompt()
})
package.json代码如下:
{
  "name""vs",
  "version""1.0.0",
  "description""",
  "type""module",
  "main""index.js",
  "scripts": {
    "dev""node question.js"  //手动修改此行
  },
  "keywords": [],
  "author""",
  "license""ISC",
  "dependencies": {
    "dotenv""^16.0.3",
    "openai""^3.2.1"
  }
}

上面的demo出至OPenAI的API接口应用实战这本书

感兴趣的朋友可以看看~

最后

包邮送书

免费抽送 3 本包邮
OPenAI的API接口应用实战
活动规则如下:

 抽奖规则 

1:从「本文在看」中随机抽取 2幸运读者

2:在07月26日 开奖前我会随机时间发布一条朋友圈,第 22个点赞的人即可中奖

一共送 三 本!!!

开奖时间2024 年 07 月 26 日 21:00

注意事项:提前加我微信好友,避免开奖后联系不到导致机会作废

浏览 23
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报