chatgpt应用软件怎么注册 五分钟创建一个 Serverless ChatGPT GitHub App

默认分类1年前 (2023)发布 admin
546 0
ChatGPT国内版

自从 在2023年3月发布了 的官方 API[1] 和插件系统[2]以来,许多开发者和创业者都兴致勃勃地想办法将其整合到自己的业务中。

本文讨论的 函数相当于 插件[3]。它们由 Web 事件触发,可以检索实时信息以输入 ,使用动态提示词问询 ,然后通过外向的 Web 服务调用执行实际操作。

(本图由 生成)

但是,想要集成 ,仍然困难重重:

本文将展示如何用 函数创建一个完整的 应用程序。它是个 机器人。与 插件一样,该机器人使 能够实时读取和写入互联网。

有了这个机器人, 用户就能在 中与 进行对话。可以通过提新的 issue[5] 或在已有的 issue 的下面发表评论[6],来和 聊天。换句话说,这个项目使用 的 消息 UI 作为它聊天的 UI。

图1. 用 学习Rust编程。

查看

该机器人是用 Rust 编写的 函数。只需 fork 该 模版,将你的 fork 部署到 work[7] 上,并配置你的 repo 和 密钥。只需 5 分钟,就能拥有一个功能齐全的 机器人。无需设置 Web 服务器、为 API 设置 、或设置缓存/数据库服务器。

Fork 模板 Repo

首先,从[8] fork 该模版repo[9]。

地址:

chatgpt应用软件怎么注册 五分钟创建一个 Serverless ChatGPT GitHub App

src/lib.rs[10] 文件包含 bot 应用 (也称为 flow 函数)。run() 函数在启动时就被调用。它从 repo owner/repo[11] 监听 和 事件。这些事件会出现在 repo 中创建新 issue 或新 issue 评论时。

#[no_mangle]
#[tokio::main(flavor = "current_thread")]
pub async fn run() {
    // Setup variables for
    //   login: GitHub account for the bot (typically just your personal account)
    //   owner: GitHub org (or user) 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(&login, &owner, &repo, vec!["issue_comment", "issues"], |payload| {
        handler(&login, &owner, &repo, &openai_key_name, payload)
    })
    .await;
}

() 函数处理 () 接收到的事件。如果事件是 issue 中的新评论,则机器人会调用 的 API 将评论文本添加到由 issue. 标识的现有对话中。它收到来自 的响应,并添加到 issue 的评论。

此处的 flow 函数自动并透明地管理本地存储中与 API 的对话历史记录。 API 密钥也存储在本地存储中,因而可以通过 中的字符串名称来识别密钥,而不必将密钥放在源代码中。

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());
                }
            }
        }
    }
}

如果事件是一个新的 issue,flow 函数创建一个新的对话,由 issue.识别,并向 请求响应。

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 + "n" + &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());
}
}
}

如何部署 Flow 函数

可以看到,flow 函数代码调用 SDK API 来执行复杂的操作。例如

服务器和 Redis 缓存都是 SDK 依赖的外部服务。这意味着 flow 函数必须在提供此类外部服务的托管 host 环境中运行。work[12] 是 flow 函数 SDK 的 PaaS(平台即服务)host。

为了在 work 上部署 flow 函数,只需将其源代码导入 PaaS。

首先,从你的 账户登录 work。导入你刚刚 fork 的包含 flow 函数源代码的 repo,并选择 “ ”。

请注意,这里不是选要部署机器人的 repo;而是选择你 fork 的 flow函数源代码的 repo –app。

© 版权声明
广告也精彩

相关文章

暂无评论

暂无评论...