ChatGPT與Remix?Api服務(wù)在瀏覽器url地址中對(duì)話詳解
引言
本文討論 ChatGTP 與 Node.js 的結(jié)合,由于最近在學(xué) Remix, 考慮到 Remix 可以單獨(dú)的作為 API 來使用,并且集成了很多常用的功能:
- fetch
- dotenv
- loader
- 文件路由
- ...
彎路
寫一個(gè)簡單的 ChatGPT 服務(wù)鍵值不要太簡單,但是我們?cè)谏厦嬉沧吡艘恍澛贰?/p>
- 直接鏈接
api.openai.com
一直請(qǐng)求超時(shí),這個(gè)浪費(fèi)了很長的時(shí)間,也不知道是什么原因。面對(duì)困難我們應(yīng)該怎么辦?先放下,搜索引里面是不是有相似的問題。結(jié)果真的需要代理
, 嘗試了一個(gè)代理,其中api.openai-proxy.com
還挺好。注意代理的安全性自行判斷。 - 使用 npm 的
openai
還是直接發(fā)送請(qǐng)求到https://api.openai.com/v1/chat/completions
或者https://api.openai.com/v1/completions
,又是不同的做法。經(jīng)過嘗試,選擇了前者 + fetch 方案。 - 使用
axios
還是fetch
呢? 都有嘗試,使用方法不一樣,但是效果基本一致。
最早的思路 1
- 思路使用 remix 構(gòu)建一個(gè)簡單的 ChatGPT + api key 的簡單的應(yīng)用。但是前后端代碼都要寫,還沒有研究 UI 和 對(duì)接文檔。
思路2
- 看別人實(shí)現(xiàn),由于 api 在三月份就發(fā)布了,現(xiàn)在已經(jīng)發(fā)生一些變化,比如訪問 api 的超時(shí)原因的問題。別人的環(huán)境可能與自己的不一樣。
思路3
- 在 github 上模仿一個(gè)簡單的示例,有簡單 UI,結(jié)果還真由于基于 Next.js 的效果還可以的:nextjs-chatgpt-app-enricoros 但是,發(fā)現(xiàn) UI 是有難度的用的 MUI,內(nèi)容是有復(fù)雜度的,不符合快速原則,模仿一個(gè) antd UI 寫一個(gè) UI 自己覺的不理想,先放在那里了。后面做好了考慮開源。
思路4
- 直接用 node.js 跑一個(gè)示例。最簡單的 url 中有 searchParams 就是與 Chat-GPT 的對(duì)話參數(shù)。
從創(chuàng)建一個(gè) Remix 開始
pnpm dlx create-remix@latest chat-app
定義 .env 文件
因?yàn)?Remix 已經(jīng)內(nèi)置 dotenv
使用使用起來非常方便。
OPENAI_API_KEY = "your api key" PROXY_URL = "your api proxy url"
一個(gè)是 api key, 注意不要提交到 git 上, remix 創(chuàng)建項(xiàng)目默認(rèn)將 .env
文件中記錄到 .gitignore
文件中??墒褂?.env.example
文件給個(gè)示例提到 git 上。
定義 chat 路由
/app/routes/chat.tsx
文件即可,注意是用作 api 不要返回一個(gè)默認(rèn)的函數(shù),然后對(duì)外暴露一個(gè) loader 函數(shù),用于處理當(dāng)前路由 get 方法請(qǐng)求。下面是一個(gè)簡單的代碼實(shí)現(xiàn):
async function runCompletion(messages: any) { const response = await fetch( "https://api.openai-proxy.com/v1/chat/completions", { method: "POST", headers: { "Content-Type": "application/json", Authorization: "Bearer " + process.env.OPENAI_API_KEY, }, body: JSON.stringify({ model: "gpt-3.5-turbo", messages: [{ role: "user", content: messages }], }), } ).then((res) => res.json()) return await response.choices[0].message.content; } export async function loader({ request }: any) { const url = new URL(request.url); const text = url.searchParams.get("text")!; return runCompletion(text); }
啟動(dòng) Remix 服務(wù)開始與 ChatGPT 對(duì)話
pnpm dev
默認(rèn)在 3000 端口打開,下面我們?cè)L問 http://localhost:3000/fetch?text=吃了嗎
開始與 Chat-GPT 開始友好問答:
問題二:
問題就不再提了,大家肯定開始各種方式與 AI 對(duì)話了。因?yàn)?API 現(xiàn)在是送的 5 刀,每一個(gè)字都是要計(jì)算 token, 并且也有時(shí)常限制。
這里對(duì) chatapt api 的參數(shù)就不做解讀了,選擇哪種模型合適,就不再解讀。本文的主要目的,就是使用 Remix 對(duì)接服務(wù)。
小結(jié)
搞對(duì)接服務(wù)雖然不是難事,但是也沒有想象中的簡單。這是第一次對(duì)接這類接口。喜歡 Remix 的可以參考一下。
以上就是ChatGPT與Remix Api服務(wù)在瀏覽器url地址中對(duì)話詳解的詳細(xì)內(nèi)容,更多關(guān)于ChatGPT對(duì)話Remix Api的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
最新Adobe?2022全新上線?Adobe?2022永久免費(fèi)使用教程
目前adobe2022的配置要求CPU至少是四核,運(yùn)行內(nèi)存至少是16GB,只支持windows10系統(tǒng),版本號(hào)是1809以及更高的版本,下面跟隨小編看下最新Adobe?2022全新上線?Adobe?2022永久免費(fèi)使用教程,感興趣的朋友一起看看吧2021-12-12申請(qǐng)Jetbrains系列軟件無限期免費(fèi)用的方法
這篇文章主要介紹了如何申請(qǐng)Jetbrains系列軟件無限期免費(fèi)用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09一文讀懂吞吐量(TPS)、QPS、并發(fā)數(shù)、響應(yīng)時(shí)間(RT)概念
這篇文章主要介紹了吞吐量(TPS)、QPS、并發(fā)數(shù)、響應(yīng)時(shí)間(RT)概念,在開發(fā)中需要先搞懂這些基礎(chǔ)知識(shí),才能更好運(yùn)用,需要的朋友可以參考下2020-07-07Iris 環(huán)境搭建詳細(xì)教程(最新版Go&IDEA&IrisV12)
這篇文章主要介紹了Iris 環(huán)境搭建(最新版Go&IDEA&IrisV12),本文通過示例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11lambda 表達(dá)式導(dǎo)致 Arthas 無法 redefine 的問題
這篇文章主要介紹了lambda 表達(dá)式導(dǎo)致 Arthas 無法 redefine 的問題,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Ceph分布式存儲(chǔ)集群Pool資源池簡介及使用小結(jié)
這篇文章主要介紹了Ceph分布式存儲(chǔ)集群Pool資源池的概念以及使用,Pool資源池是Ceph存儲(chǔ)數(shù)據(jù)的邏輯分區(qū),起到Namespace命名空間的作用,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-06-06