9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

十分钟内,用 Serverless 构建自己的“ChatGPT”

  • 2023-02-27
    北京
  • 本文字数:2681 字

    阅读完需:约 9 分钟

十分钟内,用 Serverless 构建自己的“ChatGPT”

点击查看 Serverless 系列文章:

Serverless 时代的微服务开发指南:华为云提出七大实践新标准

华为云发布冷启动加速解决方案:助力 Serverless 计算速度提升 90%+

Serverless Streaming:毫秒级流式大文件处理探秘


果宝 | 华为云 Severless 研发工程师

历川 | 华为云 Severless 研发专家

ChatGPT | OpenAI 聊天机器人


背景


ChatGPT 是一个基于 GPT-3 模型的聊天机器人,可以与用户进行自然、流畅和有趣的对话。它可以理解和使用多种语言,如英语、中文、日语、西班牙语、法语或德语;还可以根据用户的兴趣和需求,提供相关建议和创意内容,如诗歌、故事、代码、歌词等。ChatGPT 是一个强大而灵活的工具,可以用于娱乐、学习或工作。


我们是否可以基于 OpenAI 开放的 API 做一个给自己或者同事们使用的聊天机器人,甚至集成到更多场景中。简易效果如下图所示:



方案选型


说干就干,我们先从做一个自己的机器人开始,首先我们从 OpenAI 获取用于鉴权的秘钥。



然后写一个请求 OpenAI 接口的代码,并写一个 web 服务接口开放出去,再搭配一个交互用的前端即可。看起来是 1 小时的工作量,但是如何部署这个服务呢?购买一个云服务器 再安装环境或者配置容器也太麻烦了,于是我向 ChatGPT 请教:



可以看到, 使用 FunctionGraph 只需要聚焦完成请求 OpenAI 接口的功能函数,不需要购买和配置资源,甚至不需要写 Web 接口的代码。一个简单的方案如下:



其中,


  • 对象存储服务 OBS:用于托管前端页面

  • FunctionGraph : 用于响应前端请求,运行代码向 OpenAI 发送问题

  • API 网关:对外开放调用函数的 API


注:FunctionGraph 是华为云 Serverless 产品[1];“函数” 是指客户部署在 FunctionGraph 上的代码,它可以是一个或多个代码文件组成的程序,编译好的二进制文件等;如 Python 脚本文件,Java 的 jar 包。


开发并部署聊天应用


3.1 创建 FunctionGraph 函数处理用户提问的请求


首先创建并开发 FunctionGraph 函数,打开华为云 FunctionGraph 产品页面,由于只有一个简单的问题查询接口,这里我们选用 事件函数 使用 Python 3.9 运行时。



注:事件函数,可以由某类事件触发函数运行,如用户对该函数发送了 HTTP 请求,关联到该函数的消息队列里产生了新消息,都会自动触发函数运行。


对于事件函数,通常程序入口方法(这里是 handler)会有两个参数:


  • event 参数 :包含触发用户函数的事件的相关信息。HTTP 请求也是一种事件,event 里会包含请求的 body、 header 等;

  • context 参数: 调用平台的相关能力,如获取在函数配置里设置的加密环境变量等



上图为本次调用的入口方法 handler(),在函数中,我们:


1. 从 event 里取得请求的参数 prompt


2. 调用 OpenAI 的 Python SDK,向 OpenAI 发送请求调用 OpenAI 开放的模型[2]


3. Handler 方法中我们使用了 context 获取访问 OpenAI 的 key ,获取前需要在函数上配置对应环境变量,如下图所示:



注:示例中我们使用了 OpenAI 的 sdk ,也可以将 sdk 放在函数代码里一起上传,或利用平台的依赖管理能力,通过添加依赖的方式实现:



在编辑好代码后,只需要点击部署按钮即可完成部署。


3.2 创建 APIG 触发器来开放接口


通常对于使用函数开发 WEB 后端的场景,我们使用 API 网关服务,来将函数开放出去供前端访问。为函数在 API 网关上注册 API 非常简单,只需要在函数页面上创建 APIG 触发器:



注意:这里将后端超时时间设定为一个较大的时间,如 60s,因为 OpenAI 的接口响应较慢。



APIG 触发器上的调用 URL,可以直接用于向后端发送请求,该 URL 为测试 URL,每日仅可访问 1000 次,可以点击触发器跳转到 APIG 页面绑定自己的域名。


3.3 托管前端页面到 OBS


  • 我们准备了一个简单的前端,只需改下前端页面配置的后端地址即可。

  • 创建一个 OBS 桶,上传前端文件



  • 配置 OBS 静态文件托管,将桶访问权限设置为公共读,并在静态网站托管选项里配置默认首页,将自己的域名指向访问地址。


最后,通过访问配置的域名访问页面,开始体验!



至此,我们已经完成了整个简单聊天系统的搭建,案例中我们使用了一个简单的前端页面,开发者也可以考虑集成到如 VSCode 插件,语音聊天机器人,微信公众号,等等。


为后端服务增加接口鉴权


以上我们已经基于 FunctionGraph 函数创建了一个简易聊天系统的后端的服务,但是该接口没有任何鉴权,如果开放接口,所有用户都可以访问。


如果需要用户登录后才可以使用,如何做?一个思路是在原有业务代码里增加鉴权,这里我们也可以考虑使用 APIG 自定义鉴权即 APIG 组合 FunctionGraph 鉴权的形式。一个新的解决方案,如下。



4.1 创建并配置 APIG 自定义鉴权函数


使用 APIG 结合函数进行自定义鉴权有以下优势:


1. 提升开发效率:鉴权与业务解耦,新增逻辑只需关注业务,无需引入鉴权;鉴权代码集中而非分散在多个业务模块,更新鉴权逻辑只需要更新鉴权模块而非所有业务模块;


2. 降低成本:对于使用大规格函数进行后端服务的代码,无效请求可以直接由较小规格的鉴权函数拦截,降低大中规格资源服务的运行成本;


  • 创建鉴权函数


和普通函数的创建流程一样,只需要注意响应的格式,一个使用 JWT 鉴权的简单案例如下。



  • 编辑对应的 API, 选择自定义鉴权,选择到我们创建的函数


4.2 创建授权函数


基于以上自定义鉴权模式,开发者可以组合自己已有的鉴权逻辑放到自定义鉴权函数中。如果进一步再想实现“登录”功能可以创建一个函数来接收请求查询数据库,如:


  • 创建授权函数


创建一个普通的事件函数即可,一个简单的示例如下,随后可以为其创建 APIG 触发器。



“ChatGPT”的升级和观测


5.1 日志与监控


Serverless 计算 平台会自动收集用户打印在控制台的日志,用户无需处理日志落盘,收集或直接上报。用户可以基于关键词,请求状态进行过滤和检索。



同时,平台自动收集函数运行指标,如调用次数、运行时间、错误次数、被拒绝次数,并发数等。



5.2 版本迭代


在用户更新函数代码时,为保障机器人业务稳定运行,可以配置 APIG 触发器的后端服务指向函数别名,更新完代码后创建新版本,将别名指向该版本即可:



[1] 华为云 Severless FunctionGraph https://www.huaweicloud.com/product/functiongraph.html?utm_source=&utm_medium=&utm_campaign=roma&utm_content=technical-articles


[2] OpenAI 开放的各模型 https://platform.openai.com/docs/model-index-for-researchers#footnote-2


今日好文推荐


阿里过去一年裁员达19000人;字节跳动布局中国版 ChatGPT;马斯克称下周将开源推特算法代码 | Q资讯


技术裁员正在助长新的创业潮:本来犹豫要不要创业,没想到公司替我做了决定


入行 14 年,我还是觉得编程很难:给大项目写代码没意思还危险


马斯克猛烈抨击 ChatGPT引轰动:“这不是我想要的”


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2023-02-27 18:104030

评论 2 条评论

发布
用户头像
问题是,你怎么保证他只回答关于你产品的内容,保证不出大错误?我不可能问huawei 的chat关于阿里的内容把
2023-03-01 17:25 · 中国香港
回复
用户头像
卖云软文,chatGPT 背后的算法模型才值得研究,调用人家 api 叫什么技术。
2023-02-28 16:35 · 广东
回复
没有更多了
发现更多内容

粤港澳大湾区第一届量子科技与产业应用研讨会在穗成功举办

启科量子开发者官方号

Trending热榜关闭前,我把Github今年最火Java面试题汇总扒下来了

Java全栈架构师

Java 程序员 面试 程序人生 八股文

java培训哪里比较好?

小谷哥

SpringBoot源码 | prepareEnvironment方法解析

六月的雨在InfoQ

源码 springboot 源码刨析 SpringBoot实战 9月月更

JAVA StreamAPI

流火

Stream API java 8 的新特性

一文讲透B端和C端产品经理的区别

产品海豚湾

产品经理 SaaS 职业发展 B端产品 9月月更

一起玩转!SOFA 飞船 Layotto 星球登陆计划

SOFAStack

golang 微服务 云原生 新手指南 开源软件

SLO新解,一种行之有效的故障处理方法

华明

监控系统 SLO 稳定性保障

Java培训值不值得?

小谷哥

云速ERP(WeLink认证版)上线,加速中小微企业数字化经营创新

科技云未来

人工智能、机器学习和深度学习,到底有什么区别?

Finovy Cloud

人工智能 云计算 影视渲染

量子计算与PKS信创体系首次融合,实现算力跨越

启科量子开发者官方号

学完Java培训后有哪些就业机会呢

小谷哥

【荣耀开发者服务平台—百亿曝光扶持等你来】智慧服务快应用卡片接入指南(下)

荣耀开发者服务平台

前端 手机 新手指南 安卓 honor

【译】像CSS一样在Flutter里应用滤镜效果

iofod jude

启科量子出席首届量子计算产业峰

启科量子开发者官方号

启科量子离子阱全系列教学模拟机多版本满足客户需求

启科量子开发者官方号

数学基础查可以参加Java培训

小谷哥

计算机网络——时延、时延带宽积

StackOverflow

计算机网络 编程‘ 9月月更

Linux云主机安全入侵排查步骤

京东科技开发者

Linux 安全 云主机 排查方法 云主机安全

下(应用篇)| 量子计算与开源软件

启科量子开发者官方号

2022年应届毕业生就业率惨淡怎么办?不要错过多金的数据科学行业

雨果

数据分析师 数据科学 数据工程师

英特尔oneAPI工具大幅提升腾讯云数据库MySQL的性能

科技之家

通过Jenkins构建CI/CD实现全链路灰度

阿里巴巴中间件

阿里云 云原生 jenkins 全链路灰度

极狐GitLab CI 月来袭!2小时 get CI 流水线设计秘籍

极狐GitLab

DevOps gitlab 运维 CI/CD 持续交付

揭秘 · 机器人酒店

澳鹏Appen

人工智能 nlp 语音识别 数据标注 语音标注

小六六学Netty系列之Netty群聊

自然

Netty 网络 9月月更

小六六学Netty系列之unix IO模型

自然

Netty 网络 9月月更

云脉芯联自研RDMA技术成果公开亮相ODCC峰会

科技热闻

港股交易系统解决方案/券商APP该何去何从?

软件开发大鱼V15988750073

证券 基金 港股交易系统开发 证券交易系统 港股多账户系统

上(市场篇)| 量子计算与开源软件

启科量子开发者官方号

  • 扫码添加小助手
    领取最新资料包
十分钟内,用 Serverless 构建自己的“ChatGPT”_语言 & 开发_果宝_InfoQ精选文章