利用谷歌云serverless代码托管服务Cloud Functions构建Gemini Pro API

谷歌在2024年4月发布了全新一代的多模态模型Gemini 1.5 Pro,Gemini 1.5 Pro不仅能够生成创意文本和代码,还能理解、总结上传的图片、视频和音频内容,并且支持高达100万tokens的上下文。在多个基准测试中表现优异,性能超越了ChatGPT 4。

Gemini 1.5 Pro既然功能这么强大,那如何将Gemini 1.5 Pro集成到在谷歌云上或者本地运行的AI软件应用中呢?今天小李哥给大家带来的是一个非常简单的场景,利用谷歌云serverless代码托管服务Cloud Functions构建Gemini Pro 1,5 对外暴露的API。首先小李哥带大家了解一些关于谷歌云的背景信息。

背景信息:

1. Vertex AI

Vertex AI 是一个谷歌云托管的机器学习平台,利用该服务可以训练和部署机器学习模型,以及基础模型(foundation Model)和自定义大型语言模型 (LLM)构建 生成式AI 应用。Vertex AI 集成了多种机器学习工具和服务,赋能开发者整个机器学习生命周期,让开发人员和数据科学家能够专注于应用程序的开发。

该平台包含许多重要功能。比较特色的如 AutoML 功能,这项功能可以通过低代码/无代码的形式来创建机器学习模型,降低AI/ML模型训练门槛。此外还有Vertex AI Studio,可以让开发者在其上直接使用多模态的Google Gemini大语言模型并且对模型进行微调,目前Vertex AI支持以下4种基础模型。在Google AI Studio开发平台中,用户可以免费试用Gemini 1.5 Pro,并且它支持中文提示,可以更好的构建中文语言的生成式AI应用。

2. Cloud Functions

Cloud Functions是由谷歌云托管的,运行代码的serverless(无服务器)服务。相对于传统的服务器如compute engine, 开发者无需维护底层基础设施,比如谷歌云会根据请求量自动扩容底层基础设施,让开发者将精力专注于应用程序开发,提升开发的效率。同时使用Cloud Functions还可以节约成本,Cloud Functions采用即用即付的付费模式,通过API技术和应用运行时间收费,避免传统的长期开启服务器产生的费用浪费。

利用Cloud Function构建Gemini 1.5 Pro公网API的步骤

1. 首先我们进入谷歌云Vertex AI中,获取调用Gemini 1.5 Pro的API调用代码。Vertex AI服务中可以给开发者自动生成调用大模型的API实例代码,大家点击图1中的”Get Code“,然后复制代码直接写到Cldou Functions里。

参考代码如下:

import base64
import vertexai
from vertexai.generative_models import GenerativeModel, Part, FinishReason
import vertexai.preview.generative_models as generative_modelsdef generate():vertexai.init(project="mystic-fountain-365517", location="us-central1")model = GenerativeModel("gemini-1.5-pro-001",system_instruction=["""Write system prompt here"""])responses = model.generate_content(["""Write user prompt here"""],generation_config=generation_config,safety_settings=safety_settings,stream=True,)for response in responses:print(response.text, end="")generation_config = {"max_output_tokens": 8192,"temperature": 1,"top_p": 0.95,
}safety_settings = {generative_models.HarmCategory.HARM_CATEGORY_HATE_SPEECH: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,generative_models.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,generative_models.HarmCategory.HARM_CATEGORY_HARASSMENT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
}generate()

2.创建一个Cloud Functions。进入Cloud Functions中,并开启Cloud Functions创建需要的谷歌云API(会自动弹出,直接点击enable即可)。

3. 接下来配置Cloud Functions的参数。为其选择一个用户所在地的区域,并且选择API的类型Https。由于我们的测试环境,在请求验证选项就点击不对请求验证,但是真实的应用安全设计中,我们是需要对请求通过API Key进行验证的。之后点击左下角的Next。

4. 进入Code编辑界面,选择Python版本号(建议3.12),并且将刚复制的Vertex AI代码替换掉下方红框部分。并且大家需要根据自己请求体和响应体格式,对应修改参考代码中的18和23行(已标注)。

参考代码如下:


import functions_frameworkfrom markupsafe import escape
@functions_framework.http
def hello_http(request):"""HTTP Cloud Function.Args:request (flask.Request): The request object.<https://flask.palletsprojects.com/en/1.1.x/api/#incoming-request-data>Returns:The response text, or any set of values that can be turned into aResponse object using `make_response`<https://flask.palletsprojects.com/en/1.1.x/api/#flask.make_response>."""request_json = request.get_json(silent=True)request_args = request.argsif request_json and "name" in request_json:name = request_json["name"] #根据前端调用的请求体修改的key值获取请求数据elif request_args and "name" in request_args:name = request_args["name"]else:name = "World"return f"Hello {escape(name)}!" #根据前端可以接收的响应体格式修改此处响应数据

5.如果大家需要从前端UI中调用该Cloud Function API。需要如下图添加CORS的配置代码。

参考代码:

import functions_framework@functions_framework.http
def cors_enabled_function(request):# For more information about CORS and CORS preflight requests, see:# https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request# Set CORS headers for the preflight requestif request.method == "OPTIONS":# Allows GET requests from any origin with the Content-Type# header and caches preflight response for an 3600sheaders = {"Access-Control-Allow-Origin": "*","Access-Control-Allow-Methods": "GET","Access-Control-Allow-Headers": "Content-Type","Access-Control-Max-Age": "3600",}return ("", 204, headers)# Set CORS headers for the main requestheaders = {"Access-Control-Allow-Origin": "*"}return ("Hello World!", 200, headers)

6.最后点击左下方的deploy就完成Gemini 1.5 pro API的创建了。

7. 大家可以通过在Cloud Functions中”TRIGGER“页面获取URL,利用POST方法调用API

和AWS的serverless代码运行服务Lambda的使用心得比较

1. 开发体验

小李哥使用的语言是Python,两款产品的编辑器UI基本是相同的没有什么太大的区别,谷歌云的优势是可以直接可以把需要安装的依赖写到编辑器内的requirement.txt文件中,部署代码的时候自动下载,简化了安装依赖的操作难度。AWS需要自己提前在本地封装,上传到云端,这里谷歌云使用更便利。

由于开发GenAI应用过程中,都会写很长的提示词Prompt,需要把编辑器中的文字自动换行,可以更容易的修改提示词。AWS Lambda提供了word wrap的功能(下图),在编辑代码的编辑器里可以自动换行。

但是谷歌云的Cloud Functions里暂时没找到这个功能,修改提示词目前只能在VSCode里修改后,粘贴到Cloud Functions编辑器里,不能把开发流程沉浸在GCP环境中。

2. 部署速度

对于相同的代码部署到AWS Lambda和GCP Cloud Functions中,小李哥做了测试。AWS Lambda基本是几秒内就可以完成。但是对于GCP Cloud Functions,整个代码build构建和部署的时间加在一起要1分钟。在部署速度上AWS体验更好。我觉得这个也是谷歌云用requirement.txt简化依赖安装带来的副作用,AWS的本地封装上传可以大大降低部署的时间。

3. CORS配置

在AWS Lambda中CORS的配置是通过在控制台上配置的,采用无代码的形式,帮助开发者简化代码开发的工作量。

对于谷歌云来说,CORS的配置是写到代码中的,更接近利用Flask框架开发web server的本地开发的习惯。两家的CORS配置方式各有优势,针对不同人群。

4.测试stdout输出延时

在部署代码功能测试的阶段,谷歌云stdout输出日志的速度可以明显感觉到延迟,一般要在Cloud Logging中刷新几次才能找到刚刚测试运行的结果。AWS的日志输出速度基本上是感觉不到延迟的,优化的更好。

以上就是关于利用谷歌云Cloud Functions开发服务端Gemini Pro 1.5对外API的整体流程和步骤,未来小李哥也将分享更多关于谷歌云和AWS上的应用开发方案和生成式AI架构设计场景,欢迎大家持续关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】Python sorted 函数

目录&#xff1a; 什么是sorted()函数列表降序排序应用到字符串自定义排序规则实际应用 Python中的内置函数——sorted()。 1. 什么是sorted()函数 在Python中&#xff0c;sorted()是一个内置函数&#xff0c;用于对任何可迭代对象&#xff08;如列表、元组、字符串等&…

AliyunOS安装Node.js

方法1&#xff1a;dnf软件包安装工具自动安装 最方便的安装方式是通过系统的dnf工具&#xff0c;我测试使用的AliyunOS的版本是Alibaba Cloud Linux 3.2104&#xff0c;具体流程如下&#xff1a; dnf module list nodejs #列出服务器中可以使用的所有nodejs版本确定下来希望安…

【折腾手机】一加6T刷机postmarketOS经历和体验

写在前面 到目前为止&#xff0c;我已经花了非常多的时间去学习和了解x86架构和RISC-V架构&#xff0c;对它们的指令集编程、指令格式的设计、编译套件的使用都亲自去体会和实践过&#xff0c;学到了很多的东西。但是对于离我们最近的arm架构却了解甚少。为什么说离我们最近呢…

2095.删除链表的中间节点

给你一个链表的头节点 head 。删除链表的中间节点 &#xff0c;并返回修改后的链表的头节点 head。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点&#xff08;下标从 0 开始&#xff09;&#xff0c;其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n 1、2、3、4 和…

网络==>总论v4

既然是写ICT方面的文章&#xff0c;就要不断更新版本&#xff0c;不是文学&#xff0c;可以一劳永逸&#xff0c;如果不更新&#xff0c;看十年前或者二十年前的书意义不大&#xff0c;这就是为啥看到很多编程书都更新到第十几版了&#xff0c;因为要与时俱进。 在去一个地方旅…

51单片机第21步_将TIM0用作两个8位定时器同时将TIM1用作波特率发生器

本章重点讲解将TIM0用作两个8位定时器&#xff0c;同时将TIM1用作波特率发生器。 当定时器T0在方式3时&#xff0c;T1不能产生中断&#xff0c;但可以正常工作在方式0、1、2下&#xff0c;大多数情况下&#xff0c;T1将用作串口的波特率发生器。 1、定时器0工作在模式3框图&a…

Webpack: 核心配置结构

概述 Webpack 是一种 「配置」 驱动的构建工具&#xff0c;所以站在应用的角度&#xff0c;必须深入学习 Webpack 的各项配置规则&#xff0c;才能灵活应对各种构建需求。本文将作为小册应用系列的一个总结&#xff0c;汇总与应用配置相关的各项知识点&#xff0c;包括&#x…

高并发场景下的热点key问题探析与应对策略

目录 一、问题描述 二、发现机制 三、解决策略分析 &#xff08;一&#xff09;解决策略一&#xff1a;多级缓存策略 客户端本地缓存 代理节点本地缓存 &#xff08;二&#xff09;解决策略二&#xff1a;多副本策略 &#xff08;三&#xff09;解决策略三&#xff1a;热点…

XJTUSE-数据结构-homework1

任务 1 题目&#xff1a; 排序算法设计&#xff1a; 需要写Selection、Shell、Quicksort 和 Mergesort四种排序算法&#xff0c;书上讲述比较全面而且不需要进行额外的优化&#xff0c;下面我简要地按照自己的理解讲述。 Selection&#xff08;选择排序&#xff09;&#xff…

关于Redisson分布式锁的用法

关于Redisson分布式锁的用法 Redisson是一个基于Redis的Java分布式对象和服务框架&#xff0c;它提供了多种分布式锁的实现&#xff0c;包括可重入锁、公平锁、读写锁等。Redisson实现分布式锁的核心原理主要依赖于Redis的数据结构和Redisson框架提供的高级功能。以下详细讲解…

深度学习11-20

1.神经元的个数对结果的影响&#xff1a; &#xff08;http://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html&#xff09; &#xff08;1&#xff09;神经元3个的时候 &#xff08;2&#xff09;神经元是10个的时候 神经元个数越多&#xff0c;可能会产生…

第3章-数据类型和运算符

#本章目标 掌握Python中的保留字与标识符 理解Python中变量的定义及使用 掌握Python中基本数据类型 掌握数据类型之间的相互转换 掌握eval()函数的使用 了解不同的进制数 掌握Python中常用的运算符及优先级1&#xff0c;保留字与标识符 保留字 指在Python中被赋予特定意义的一…

[C++][设计模式][备忘录模式]详细讲解

目录 1.动机2.模式定义3.要点总结4.代码感受 1.动机 在软件构建过程中&#xff0c;某些对象的状态转换过程中&#xff0c;可能由于某中需要&#xff0c;要求程序能够回溯到对象之前处于某个点的状态。 如果使用一些公开接口来让其他对象得到对象的状态&#xff0c;便会暴露对象…

pygame下载安装流程

方案一&#xff1a;直接下载 使用cmd打开窗口&#xff1a; 使用命令&#xff1a;pip install pygame即可下载最新pygame安装包 方案二&#xff1a;下载指定版本 我们需要去python官网查看对应包和发布版本&#xff1a; python官网 进去后点击PyPI&#xff0c;查找python发布…

初阶数据结构之堆讲解

本篇文章带大家学习的是堆&#xff0c;还请各位观众老爷给个三连 正片开始 堆的概念 如果有一个关键码的集合 K { &#xff0c; &#xff0c; &#xff0c; … &#xff0c; } &#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中&#xff0c;并满…

【Redis】主从复制

https://www.bilibili.com/video/BV1cr4y1671t?p101 https://blog.csdn.net/weixin_54232666/article/details/128825763 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redist的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。 主从搭建 这…

访客(UV)、点击量(PV)、IP、访问量(VV)概念

1、https://www.cnblogs.com/QingPingZm/articles/13855808.htmlhttps://www.cnblogs.com/QingPingZm/articles/13855808.html

监控电脑的软件有哪些?精选8大监控电脑的软件

根据当前市场反馈和功能评价&#xff0c;以下是八款备受推崇的电脑监控软件推荐&#xff0c;适合不同企业和组织的监控与管理需求&#xff1a; 1.安企神监控软件 特点&#xff1a;全面的局域网监控工具&#xff0c;擅长网络设备监控、网络性能管理和故障诊断。提供员工电脑屏幕…

计算机网络:408考研|湖科大教书匠|原理参考模型II|学习笔记

系列目录 计算机网络总纲领 计算机网络特殊考点 计算机网络原理参考模型I 计算机网络原理参考模型II 目录 系列目录更新日志前言应用层(Application Layer)一、应用层概述二、客户/服务器方式和对等方式三、动态主机配置协议(DHCP, Dynamic Host Configuration Protocol)四、域…

微机原理与接口技术:重点内容|计算机系统|学习笔记

系列目录 前言 只将最重要的知识点考点列出来方便学习复习 目录 系列目录前言第1章 微型计算机概述第2章 16位和32位微处理机&#x1f31f;16位微处理器 8086 第3章 Pentium 的指令系统常用指令 第4章 存储器、存储管理和高速缓存技术第5章 微型计算机和外设的数据传输第6章 串…