使用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.js的openai组件可以直接调用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.js、package.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接口应用实战这本书
感兴趣的朋友可以看看~
最后
包邮送书
抽奖规则
:
1:从「本文在看」中随机抽取 2名幸运读者
2:在07月26日 开奖前我会随机时间发布一条朋友圈,第 22个点赞的人即可中奖
一共送 三 本!!!
开奖时间:2024 年 07 月 26 日 21:00
注意事项:提前加我微信好友,避免开奖后联系不到导致机会作废