使用函数工作流 FunctionGraph开发准备

在国内使用ChatGPT有些不便,是否可以基于OpenAI开放的API做一个给自己或者同事们使用的聊天机器人,甚至集成到更多的场景。

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

然后写一个请求OpenAI接口的代码,并写一个web服务接口开放出去,再搭配一个交互用的前端即可。看起来是1小时的工作量,但是如何部署这个服务呢? 购买一个云服务器再安装环境或者配置容器也太麻烦了,于是我问了ChatGPT:建议我选择华为云提供的函数工作流 FunctionGraph 这款Serverless函数计算与编排服务。

我们选选择

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

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

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

说明:“函数” 是指客户部署在FunctionGraph上的代码,它可以是一个或多个文件组成的程序,甚至编译好的二进制文件。 如Python 脚本文件,Java的jar 包。

函数工作流 FunctionGraph开发并部署聊天应用

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

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

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

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

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

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

从event 里取得请求的参数 prompt。

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

创建APIG触发器来开放接口

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

注意:这里将后端超时时间设定为一个较大的时间,如60s,因为OpenAi的接口响应较慢。在北京4局点中,APIG服务有共享版,支持按需计费,若有较大的流量可以考虑购买APIG独享实例。

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

托管前端页面到OBS

我们准备了一个简单的前端,只需改下前端页面配置的后端地址即可。创建一个OBS 桶,上传前端文件。

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

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

点击此处前往操作详情→

后端服务增加接口鉴权

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

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

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

使用APIG 自定义鉴权有以下优势:

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

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

创建鉴权函数

和普通函数的创建流程一样,只需要注意响应的格式。

编辑接口,配置自定义鉴权

创建授权函数

基于以上自定义鉴权模式,开发者可以组合自己已有的鉴权逻辑放到自定义鉴权函数中。如果进一步想基于FunctionGraph 创建一个 “登录” 或token授权函数,可以考虑以下方案。

我们首先需要创建一个函数,该函数用于接收用户登录请求,然后去数据库请求,判断用户合法则返回鉴权token。编辑对应的API,选择自定义鉴权,选择到我们创建的函数即可。

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

注意,如果需要函数访问VPC里的资源,如本例中的RDS,需要在函数页面配置RDS所在的VPC。

点击此处前往增加接口鉴权详情→

“ChatGPT”的升级和运维

日志与监控

使用函数,系统会自动收集用户打印在控制台的日志,用户无需处理日志落盘,收集或直接上报。对于每一条请求日志,FunctionGraph 还会显示请求执行耗时,使用内存及请求状态。

用户可以基于关键词,请求状态进行过滤和检索。

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

版本迭代

在用户更新函数代码时,为保障“ChatGPT”业务稳定运行,可以配置APIG触发器的后端服务指向函数别名。

函数工作流 FunctionGraph教程视频

函数工作流

03:15

函数工作流

02:10

函数工作流

03:10

函数工作流

1对1咨询专属顾问

1对1免费咨询华为云专属顾问,为您量身定制产品推荐方案
立即咨询

华为云咨询电话:950808或4000-955-988 转1

华为云咨询电话:950808或4000-955-988 转1

华为云专业的服务团队,致力于为您提供专业的售前购买咨询服务,及完善的售后技术服务,助您云上无忧