最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

如何在10分鐘內(nèi)創(chuàng)建無服務(wù)器 ChatGPT 應(yīng)用程序

2023-06-05 05:23 作者:科技前沿AI  | 我要投稿

自 OpenAI在 2023 年 3 月發(fā)布了 ChatGPT 的官方 API以來,許多開發(fā)人員和企業(yè)家有興趣將其集成到自己的業(yè)務(wù)運(yùn)營中。

但仍然存在一些重大障礙,使他們難以做到這一點(diǎn):

  • OpenAI 為 ChatGPT 提供了一個(gè)簡單的無狀態(tài) API。開發(fā)人員需要在應(yīng)用程序管理的緩存或數(shù)據(jù)庫中跟蹤每個(gè)對話的歷史和上下文。開發(fā)人員還需要管理和保護(hù) API 密鑰。有很多與應(yīng)用程序的業(yè)務(wù)邏輯無關(guān)的樣板代碼。

  • ChatGPT API 應(yīng)用程序的“自然”用戶界面是線程聊天。但是很難在傳統(tǒng)的 Web 或應(yīng)用程序框架中創(chuàng)建“聊天 UI”。事實(shí)上,最常用的聊天 UI 已經(jīng)存在于 Slack、Discord 甚至論壇(例如 GitHub Discussions)等消息應(yīng)用程序中。我們需要一種簡單的方法將 ChatGPT API 響應(yīng)連接到現(xiàn)有的消息服務(wù)。

在本文中,我將向您展示如何創(chuàng)建無服務(wù)器 GitHub 機(jī)器人。該機(jī)器人允許 GitHub 用戶在 GitHub Issues 中與 ChatGPT 和彼此聊天。您可以通過提問來嘗試,或通過發(fā)表評(píng)論加入另一個(gè)對話線程。換句話說,這個(gè)項(xiàng)目使用 GitHub Issues 的線程消息 UI 作為它自己的聊天 UI。


該機(jī)器人是用 Rust 編寫的無服務(wù)器功能。只需分叉示例,將您的分叉部署到flows.network上,并將其配置為與您自己的 GitHub 存儲(chǔ)庫和 OpenAI 密鑰交互。您將在 10 分鐘內(nèi)擁有一個(gè)功能齊全的 GitHub 機(jī)器人。無需為 GitHub API 或緩存/數(shù)據(jù)庫服務(wù)器設(shè)置 Web 服務(wù)器或 Webhook。

如何分叉模板回購

首先,從 GitHub fork 這個(gè)模板倉庫。

src/lib.rs文件包含機(jī)器人應(yīng)用程序(也稱為流函數(shù))。該run()函數(shù)在啟動(dòng)時(shí)被調(diào)用。它偵聽GitHub 存儲(chǔ)庫中的issue_comment事件。當(dāng)在回購中創(chuàng)建新問題評(píng)論或新問題時(shí),會(huì)發(fā)出這些事件。issuesowner/repo

#[no_mangle]#[tokio::main(flavor?=?"current_thread")]pub?async?fn?run()?{
????//?Setup?variables?for
????//???ower:?GitHub?org?to?install?the?bot
????//???repo:?GitHub?repo?to?install?the?bot
????//???openai_key_name:?Name?for?your?OpenAI?API?key
????//?All?the?values?can?be?set?in?the?source?code?or?as?env?vars
????
????listen_to_event(&owner,?&repo,?vec!["issue_comment",?"issues"],?|payload|?{
????????handler(&owner,?&repo,?&openai_key_name,?payload)
????})
????.await;}

handler()函數(shù)處理 接收到的事件listen_to_event()。如果事件是問題中的新評(píng)論,則機(jī)器人會(huì)調(diào)用 OpenAI 的 ChatGPT API 以將評(píng)論文本添加到由issue.number.?它收到來自 ChatGPT 的響應(yīng),并在問題中添加評(píng)論。

此處的流功能自動(dòng)透明地管理本地存儲(chǔ)中與 ChatGPT API 的對話歷史記錄。OpenAI API 密鑰也存儲(chǔ)在本地存儲(chǔ)中,因此無需將密文放在源代碼中,密鑰可以通過openai_key_name.

EventPayload::IssueCommentEvent(e)?=>?{
????if?e.comment.user.r#type?!=?"Bot"?{
????????if?let?Some(b)?=?e.comment.body?{
????????????if?let?Some(r)?=?chat_completion?(
????????????????????openai_key_name,
????????????????????&format!("issue#{}",?e.issue.number),
????????????????????&b,
????????????????????&ChatOptions::default(),
????????????)?{
????????????????if?let?Err(e)?=?issues.create_comment(e.issue.number,?r.choice).await?{
????????????????????write_error_log!(e.to_string());
????????????????}
????????????}
????????}
????}}

如果該事件是一個(gè)新問題,流函數(shù)將創(chuàng)建一個(gè)由 標(biāo)識(shí)的新對話issue.number,并請求 ChatGPT 的響應(yīng)。

EventPayload::IssuesEvent(e)?=>?{
????if?e.action?==?IssuesEventAction::Closed?{
????????return;
????}
????let?title?=?e.issue.title;
????let?body?=?e.issue.body.unwrap_or("".to_string());
????let?q?=?title?+?"
"?+?&body;
????if?let?Some(r)?=?chat_completion?(
????????????openai_key_name,
????????????&format!("issue#{}",?e.issue.number),
????????????&q,
????????????&ChatOptions::default(),
????)?{
????????if?let?Err(e)?=?issues.create_comment(e.issue.number,?r.choice).await?{
????????????write_error_log!(e.to_string());
????????}
????}}

Serverless Flow功能如何部署

我們可以看到,流程功能代碼調(diào)用SDK API來執(zhí)行復(fù)雜的操作。例如,

  • listen_to_event()函數(shù)通過 GitHub API 注冊一個(gè) webhook URL,以便handler()在 GitHub 中發(fā)生某些事件時(shí)調(diào)用該函數(shù)。

  • chat_completion()函數(shù)使用指定對話的指定 API 密鑰和過去的歷史/上下文調(diào)用 ChatGPT API。API 密鑰和對話歷史記錄存儲(chǔ)在 Redis 緩存中。

Webhook服務(wù)器和Redis緩存都是SDK依賴的外部服務(wù)。這意味著流功能必須在提供此類外部服務(wù)的托管主機(jī)環(huán)境中運(yùn)行。Flows.network是流功能 SDK 的 PaaS(平臺(tái)即服務(wù))主機(jī)。

為了在 flows.network 上部署流功能,您只需將其源代碼導(dǎo)入 PaaS。

首先,從您的 GitHub 帳戶登錄 flows.network。導(dǎo)入包含流函數(shù)源代碼的分叉 GitHub 存儲(chǔ)庫并選擇“使用環(huán)境變量”。

請注意,這不是您要部署機(jī)器人的 GitHub 存儲(chǔ)庫。這是您的分叉流函數(shù)源代碼的存儲(chǔ)庫。

圖 2. 將您從流函數(shù)模板派生的 GitHub 存儲(chǔ)庫導(dǎo)入 flows.network。

設(shè)置環(huán)境變量以將流函數(shù)指向 OpenAI API 密鑰名稱 (?open_ai_key) 和 GitHub 存儲(chǔ)庫 (ownerrepo)。

此處的GitHubownerrepo變量指向您要部署機(jī)器人的 GitHub 存儲(chǔ)庫,而不是流函數(shù)源代碼的存儲(chǔ)庫。

圖 3. 為要部署機(jī)器人的 GitHub 存儲(chǔ)庫設(shè)置環(huán)境變量,以及 OpenAI API 密鑰名稱。

Flows.network 將獲取源代碼并使用標(biāo)準(zhǔn)工具鏈將 Rust 源代碼構(gòu)建為 Wasm 字節(jié)碼cargo。然后它將在WasmEdge Runtime中運(yùn)行 Wasm 流功能。

如何將流功能連接到 GitHub 和 OpenAI

雖然流函數(shù)需要連接到 OpenAI 和 GitHub API,但源代碼沒有硬編碼的 API 密鑰、訪問令牌或 OAUTH 邏輯。流功能 SDK 使開發(fā)人員可以輕松、安全地與外部 SaaS API 服務(wù)進(jìn)行交互。

Flows.network 發(fā)現(xiàn)流函數(shù)需要連接到 OpenAI 和 GitHub API。它為開發(fā)人員提供了 UI 工作流,以便:

  • 登錄 GitHub,授權(quán)訪問事件,并將流函數(shù)注冊為 webhook 以接收這些事件。

  • 將 OpenAI API 密鑰與名稱相關(guān)聯(lián)openai_key_name。

圖 4. 流功能所需的外部服務(wù)已連接并變綠。

連接并授權(quán)外部 SaaS API 后,它們會(huì)在流功能儀表板上變?yōu)榫G色。流程功能現(xiàn)在將接收它所針對的事件listen_to_event()。它還將透明訪問 Redis 以獲取指定的 OpenAI API 密鑰和緩存的對話上下文以支持chat_completion()SDK 功能。

下一步是什么

GitHub 機(jī)器人只是 flows.network 可以支持的眾多機(jī)器人類型之一。通過將流功能連接到 Slack 頻道,您可以獲得 ChatGPT 來參與您的小組討論。下面是一個(gè)基于 Slack 的 ChatGPT 機(jī)器人的示例。

圖 5.Slack ChatGPT 機(jī)器人。

另一個(gè)例子是讓 ChatGPT 在 Slack 頻道中回答法律問題。流程功能在法律問題前加上提示。

圖 6.Slack 機(jī)器人律師機(jī)器人。

除了 GitHub 和 Slack,還有許多 SaaS 產(chǎn)品可以通過它們的 API 集成到 flows.network 中。

雖然示例流函數(shù)是用 Rust 編寫的,但我們的目標(biāo)是支持基于 JavaScript 的流函數(shù) SDK。也就是說,平臺(tái)SDK等功能listen_to_event()都會(huì)chat_completion()有JavaScript版本。JavaScript 流功能通過WasmEdge-QuickJS模塊在 flows.network 平臺(tái)上的WasmEdge Runtime內(nèi)部運(yùn)行。

如何在10分鐘內(nèi)創(chuàng)建無服務(wù)器 ChatGPT 應(yīng)用程序的評(píng)論 (共 條)

分享到微博請遵守國家法律
仁寿县| 方山县| 仪征市| 青铜峡市| 封丘县| 太白县| 启东市| 东源县| 孝感市| 南昌市| 洞口县| 舟山市| 吕梁市| 高安市| 武城县| 西乌珠穆沁旗| 麦盖提县| 汽车| 新巴尔虎右旗| 桂东县| 集贤县| 绥化市| 杭州市| 安丘市| 上栗县| 明光市| 梅河口市| 平阳县| 延吉市| 乌拉特前旗| 庐江县| 鄂托克前旗| 东光县| 湟源县| 双桥区| 万年县| 寿阳县| 宁陕县| 泰和县| 怀远县| 托克托县|