使用Node js來調(diào)用chat API實現(xiàn)智能問答的功能
共 8283字,需瀏覽 17分鐘
·
2024-07-23 08:00
本文適合對OPenAI的API接口應(yīng)用實戰(zhàn)感興趣的小伙伴閱讀。
歡迎關(guān)注前端早茶,與廣東靚仔攜手共同進階~
前言
下面我們利用參數(shù),使用node js來調(diào)用chat API實現(xiàn)智能問答的功能。
為了使朋友們更清晰地了解怎么去調(diào)用chat API去生成一個智能問答系統(tǒng),這里采用了基于node.js 的Visual Studio Code的極簡代碼的方式來進行示例。
正文
使用Visual Studio Code來對接Chat API的具體流程如圖3.2所示。
圖3.2 智能問答交互序列圖
序列圖解釋如下:
(1)輸入答案:用戶在UI界面輸入其需要回答的問題。
(2)調(diào)用Chat API:前端直接傳入?yún)?shù),調(diào)用chat API服務(wù)。
(3)用戶身份校驗:OpenAI 服務(wù)器利用調(diào)用者提供的key,校驗用戶身份。
(4)獲取問題的答案:OpenAI 服務(wù)器生成問題的答案。
(5)返回答案:前端UI獲取Chat API的相應(yīng)結(jié)果。
(6)處理答案:前端UI根據(jù)需要對答案進行處理。
(7)展示答案:前端UI將處理后的答案展示給用戶。
后面是利用Visual Studio Code 來調(diào)用Chat API去實現(xiàn)智能問答的步驟。
具體步驟
初始化node.js項目
首先,打開VS Code,新建項目。項目建好后,在主菜單選擇”Terminal”,打開終端,輸入命令:
npm init -y
注意:此命令會將項目初始化,生成項目所需的文件夾和模塊。
然后,我們在項目初始化后,新建“.evn”文件,作為環(huán)境變量文件,evn文件里輸入申請OpenAI API時獲得的key,如下:
API_KEY=sk-XWre0xkvyusgJHqODU8LQIE5bkFJxrlT1A9zR3276FRSH0WA
最后在終端子輸入命令進行加載環(huán)境變量:
npm i dotenv openai
引入環(huán)境變量文件
完成node.js項目初始化之后,開始配置并引入環(huán)境變量。
首先新建名為“question.js”的文件,在第一行加上引入環(huán)境變量的代碼,具體如下:
import { config } from "dotenv" //引入配置環(huán)境變量組件
config() //進行環(huán)境變量配置
console.log(process.env.API_KEY)
然后打開同一目錄下的“package.json”文件,在其中加入運行配置,代碼結(jié)果如下:
{
"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并回車,可以看到引入環(huán)境變量成功,輸出結(jié)果如下:
sk-XWre0xkvyusgJHqODU8LQIE5bkFJxrlT1A9zR3276FRS
調(diào)用chat API接口
由于node.js的openai組件可以直接調(diào)用chat API的接口,因此引入openai組件即可省去很多步驟。
首先,在代碼中加上引入openai組件中的Configuration,、OpenAIApi兩個類,具體如下:
import { Configuration, OpenAIApi } from "openai"
然后,引入上述兩個類之后,在其后定義接口及接口配置,其中的請求參數(shù)具體賦值按照上一節(jié)所述寫入,代碼如下:
const res = await openai
.createChatCompletion({
//請求參數(shù)
model: "gpt-3.5-turbo",
messages: [{ role: "user", content: input }],
temperature: 0.2,
max_tokens: 1000,
top_p: 1,
n: 1,
}
)
增加輸入輸出命令行
在完成了接口及其配置的代碼之后,需要對問題的輸入與答案輸出進行處理。這是一個輕量級代碼的極簡示例,因而我們使用簡潔的readline組件來作為輸入輸出介質(zhì)。
首先,定義輸入輸出的代碼如下:
import readline from "readline" //引入readline組件的readline類
//定義輸入輸出界面
const userInterface = readline.createInterface({
input: process.stdin,
output: process.stdout
})
然后對調(diào)用openai的類的方法進行改造,使其將問題內(nèi)容作為輸入,Chat API返回的答案作為輸出,具體代碼如下:
//調(diào)用openai組件,發(fā)送請求
userInterface.on("line", async input => {
const res = await openai
.createChatCompletion({
//請求參數(shù)
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()
})
完整代碼
至此,我們的極簡智能問答功能已經(jīng)完成??偞a清單包括以下文件:
l.env文件:該文件通常用于存儲應(yīng)用程序的環(huán)境變量,這些變量可以包含敏感的配置信息,如數(shù)據(jù)庫連接字符串、API 密鑰、密碼等。環(huán)境變量可以在應(yīng)用程序的不同部分之間共享,并且可以在運行時根據(jù)不同的環(huán)境進行配置,這個例子里存儲了key的值。
lpackage-lock.json文件:該文件是項目中的一個自動生成的文件,用于管理項目的依賴關(guān)系和版本信息。它主要用于鎖定依賴版本、提高項目的構(gòu)建速度、確保依賴的完整性、版本控制中的共享和協(xié)作。文件通常由 npm 在安裝依賴時自動生成和更新,無需手動編輯。
lpackage.json文件:該文件在項目中起著非常重要的作用,它用于管理項目的元數(shù)據(jù)、依賴關(guān)系、腳本和其他配置信息,幫助開發(fā)者更好地組織和管理項目,并與其他開發(fā)者共享和協(xié)作。
lquestion.js文件:主要代碼執(zhí)行的js文件,此系統(tǒng)的功能性代碼在這里實現(xiàn)。
lworkspace.code-workspace文件:該文件在 中用于定義工作區(qū)的配置信息,包括項目管理、編輯器布局、首選項設(shè)置等,幫助開發(fā)者更好地組織和管理項目,并在團隊協(xié)作中提供一致的開發(fā)環(huán)境。
lnode_modules文件夾:此文件夾是在 Node.js 項目中用于存儲第三方依賴模塊的文件夾。當你在 Node.js 項目中使用 npm 或者 yarn 等包管理工具安裝依賴時,這些依賴模塊會被下載并存放在 node_modules 文件夾中。通常來說,此文件夾由項目自動產(chǎn)生及維護,無需人工干預(yù)。
這里需要手動添加或修改的代碼有三個文件: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()
//調(diào)用openai組件,發(fā)送請求
userInterface.on("line", async input => {
const res = await openai
.createChatCompletion({
//請求參數(shù)
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接口應(yīng)用實戰(zhàn)這本書
感興趣的朋友可以看看~
最后
包郵送書
抽獎規(guī)則
:
1:從「本文在看」中隨機抽取 2名幸運讀者
2:在07月26日 開獎前我會隨機時間發(fā)布一條朋友圈,第 22個點贊的人即可中獎
一共送 三 本?。。?/p>
開獎時間:2024 年 07 月 26 日 21:00
注意事項:提前加我微信好友,避免開獎后聯(lián)系不到導(dǎo)致機會作廢
