gemini 试用(python)

在这里插入图片描述

1. 非stream方式(requests)

import os
import json
import requestsdef test_gemini_no_stream(apikey, text):url = f'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key={apikey}'headers = {'Content-Type': 'application/json'}data = {'contents': [{'parts': [{'text': text}]}]}response = requests.post(url, headers=headers, data=json.dumps(data))# print(response.json())print(response.json()['candidates'][0]['content']['parts'][0]['text'])if __name__ == '__main__':apikey = os.getenv('GEMINI_API_KEY')text   = '请将`我喜欢吃话梅糖`翻译成英文,只保留翻译后的结果!'print('test_gemini_no_stream(apikey, text):')test_gemini_no_stream(apikey, text)

在这里插入图片描述

2. google-generativeai非stream输出

# Python版本需至少为3.9,google-generativeai版本为0.3.1
pip install -U google-generativeai

在这里插入图片描述

import google.generativeai as genaidef genai_no_stream(apikey, text):genai.configure(api_key=apikey)# 支持的模型列表for m in genai.list_models():if 'generateContent' in m.supported_generation_methods:print(m.name)model = genai.GenerativeModel('gemini-pro')response = model.generate_content(text)print(response.text)if __name__ == '__main__':apikey = os.getenv('GEMINI_API_KEY')text   = '请将`我喜欢吃话梅糖`翻译成英文,只保留翻译后的结果!'print('test_gemini_no_stream(apikey, text):')genai_no_stream(apikey, text)

在这里插入图片描述

3. google-generativeai stream输出

流式输出只需将generate_content的stream设置为True即可

def genai_stream(apikey, text):genai.configure(api_key=apikey)model = genai.GenerativeModel('gemini-pro')response = model.generate_content(text, stream=True)for chunk in response:print(chunk.text, end='', flush=True)if __name__ == '__main__':apikey = os.getenv('GEMINI_API_KEY')#text  = '请将`我喜欢吃话梅糖`翻译成英文,只保留翻译后的结果!'print('test_gemini_no_stream(apikey, text):')#est_gemini_no_stream(apikey, text)#genai_no_stream(apikey, text)text = '你是一个讲故事的专家并且擅长处理数据!首先你需要写一个500字的历史故事;然后你需要将故事中的人物关系以json格式展示出来。只保留故事和最后的json数据。'genai_stream(apikey, text)

故事是流式输出的,json好像是一下出来的,速度很快(总共几秒钟就完成了)!
在这里插入图片描述

尝试下数据提取能力 (有默认英文偏向(中英文不稳定,如有需求请指定好))
def genai_stream(apikey, text):genai.configure(api_key=apikey)model = genai.GenerativeModel('gemini-pro')response = model.generate_content(text, stream=True)for chunk in response:print(chunk.text, end='', flush=True)if __name__ == '__main__':apikey = os.getenv('GEMINI_API_KEY')#text  = '请将`我喜欢吃话梅糖`翻译成英文,只保留翻译后的结果!'print('test_gemini_no_stream(apikey, text):')#est_gemini_no_stream(apikey, text)#genai_no_stream(apikey, text)text = """将下面故事里的人物名字提取出来,结果是python的list格式,结果只保留这个list!**故事:**在12世纪的英格兰,诺曼底的贵族威廉·德·伯格纳 (William de Bourgneuf) 踏上了萨塞克斯郡的海岸。他勇敢无畏,野心勃勃,并渴望征服这片土地。威廉迅速征服了莱文斯 (Lewes) 城堡,并确立了自己的统治。他召集当地萨克森人效忠,承诺尊重他们的习俗和法律。然而,一些萨克森人仍然反对他的统治,其中包括一位名叫埃德蒙 (Edmund) 的勇敢战士。埃德蒙率领着一群忠诚的追随者,发动了一场激烈的抵抗。他们在森林中发动游击战,伏击诺曼军队并破坏他们的补给线。威廉决心镇压叛乱,派出他的军队追击埃德蒙。最终,在一次激烈的战斗中,埃德蒙被俘虏。威廉把他关进了莱文斯城堡的地牢,并计划将他处决。但埃德蒙的妹妹埃尔莎 (Aelfa) 向威廉求情,恳求他饶恕他的生命。威廉被埃尔莎的美丽和决心所打动。他同意宽恕埃德蒙,但条件是埃尔莎必须嫁给他。埃尔莎勉强同意了,以拯救她兄弟的生命。婚后,埃尔莎和埃德蒙对威廉忠诚,但他们心中永远铭记着他们的萨克森遗产。他们悄悄地支持抵抗运动,并向当地萨克森人提供庇护和支持。"""genai_stream(apikey, text)

在这里插入图片描述

4. chat模式

使用chat模式可以自动获取上下文

def genai_chat(apikey, text):genai.configure(api_key=apikey)# 历史消息,必须为偶数messages = [{'role':'user','parts': ["请将我接下来的任何输入都提取人物名,并将人物名以python list的格式输出,只保留list!"]},{'role':'model','parts': ["好的。我接下来将任何输入都提取人物名,并将人物名以python list的格式输出,只保留list!"]}]model = genai.GenerativeModel('gemini-pro')chat = model.start_chat(history=messages)response = chat.send_message(text)print(response.text)if __name__ == '__main__':apikey = os.getenv('GEMINI_API_KEY')#text  = '请将`我喜欢吃话梅糖`翻译成英文,只保留翻译后的结果!'#print('test_gemini_no_stream(apikey, text):')#est_gemini_no_stream(apikey, text)#genai_no_stream(apikey, text)text = """将下面故事里的人物名字提取出来,结果是python的list格式,结果只保留这个list!**故事:**在12世纪的英格兰,诺曼底的贵族威廉·德·伯格纳 (William de Bourgneuf) 踏上了萨塞克斯郡的海岸。他勇敢无畏,野心勃勃,并渴望征服这片土地。威廉迅速征服了莱文斯 (Lewes) 城堡,并确立了自己的统治。他召集当地萨克森人效忠,承诺尊重他们的习俗和法律。然而,一些萨克森人仍然反对他的统治,其中包括一位名叫埃德蒙 (Edmund) 的勇敢战士。埃德蒙率领着一群忠诚的追随者,发动了一场激烈的抵抗。他们在森林中发动游击战,伏击诺曼军队并破坏他们的补给线。威廉决心镇压叛乱,派出他的军队追击埃德蒙。最终,在一次激烈的战斗中,埃德蒙被俘虏。威廉把他关进了莱文斯城堡的地牢,并计划将他处决。但埃德蒙的妹妹埃尔莎 (Aelfa) 向威廉求情,恳求他饶恕他的生命。威廉被埃尔莎的美丽和决心所打动。他同意宽恕埃德蒙,但条件是埃尔莎必须嫁给他。埃尔莎勉强同意了,以拯救她兄弟的生命。婚后,埃尔莎和埃德蒙对威廉忠诚,但他们心中永远铭记着他们的萨克森遗产。他们悄悄地支持抵抗运动,并向当地萨克森人提供庇护和支持。"""#genai_stream(apikey, text)print('\n')genai_chat(apikey, text)

在这里插入图片描述
在获取上下文时,messages里的model信息正常情况下是由Gemini生成的。这里想人为进行设计的,似乎达不到想要的功能,但并不是说chat模式有问题,而是历史消息中的model信息没有正确设置为Gemini生成的内容。

5 多轮对话

def genai_loops_chat(apikey, text):genai.configure(api_key=apikey)model = genai.GenerativeModel('gemini-pro')messages = [{'role':'user','parts': ["简单地向孩子解释一下电脑是如何工作的。"]}]response = model.generate_content(messages)messages.append({'role':'model','parts':[response.text]})messages.append({'role':'user','parts':["好的,再给大学生一个更详细的解释?"]})response = model.generate_content(messages)print(response.text)
if __name__ == '__main__':apikey = os.getenv('GEMINI_API_KEY')#text  = '请将`我喜欢吃话梅糖`翻译成英文,只保留翻译后的结果!'#print('test_gemini_no_stream(apikey, text):')#est_gemini_no_stream(apikey, text)#genai_no_stream(apikey, text)text = """    """#genai_stream(apikey, text)print('\n')#genai_chat(apikey, text)genai_loops_chat(apikey, text)

在这里插入图片描述

多模态 (gemini-pro-vision)

在这里插入图片描述

pip install pillow
def gemini_pro_vision(apikey, text, image_path):import PIL.Imagegenai.configure(api_key=apikey)model = genai.GenerativeModel('gemini-pro-vision')img = PIL.Image.open(image_path)response = model.generate_content([text, img], stream=True)response.resolve()print(response.text)if __name__ == '__main__':apikey = os.getenv('GEMINI_API_KEY')#text  = '请将`我喜欢吃话梅糖`翻译成英文,只保留翻译后的结果!'#print('test_gemini_no_stream(apikey, text):')#est_gemini_no_stream(apikey, text)#genai_no_stream(apikey, text)#genai_stream(apikey, text)print('\n')#genai_chat(apikey, text)#enai_loops_chat(apikey, text)text = """对图片进行一个详细的描述,谢谢"""image_path = '../img/二傻子.jpg'gemini_pro_vision(apikey, text, image_path)

在这里插入图片描述

在这里插入图片描述

模型配置

Gemini也有与常规LLM或GPT相类似的配置方式

def genai_config(apikey, text):genai.configure(api_key=apikey)model = genai.GenerativeModel('gemini-pro')response = model.generate_content(text,generation_config=genai.types.GenerationConfig(# Only one candidate for now.candidate_count=1,stop_sequences=['x'],max_output_tokens=20,temperature=1.0))print(response.text)

完整代码

import os
import json
import requests
# 非stream方式
def test_gemini_no_stream(apikey, text):url = f'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key={apikey}'headers = {'Content-Type': 'application/json'}data = {'contents': [{'parts': [{'text': text}]}]}response = requests.post(url, headers=headers, data=json.dumps(data))# print(response.json())print(response.json()['candidates'][0]['content']['parts'][0]['text'])##########################################################################################import google.generativeai as genaidef genai_no_stream(apikey, text):genai.configure(api_key=apikey)# 支持的模型列表for m in genai.list_models():if 'generateContent' in m.supported_generation_methods:print(m.name)#model = genai.GenerativeModel('gemini-pro')response = model.generate_content(text)print(response.text)###########################################################################################def genai_stream(apikey, text):genai.configure(api_key=apikey)model = genai.GenerativeModel('gemini-pro')response = model.generate_content(text, stream=True)for chunk in response:print(chunk.text, end='', flush=True)##########################################################################################def genai_chat(apikey, text):genai.configure(api_key=apikey)# 历史消息,必须为偶数messages = [{'role':'user','parts': ["请将我接下来的任何输入都提取人物名,并将人物名以python list的格式输出,只保留list!"]},{'role':'model','parts': ["好的。我接下来将任何输入都提取人物名,并将人物名以python list的格式输出,只保留list!"]}]model = genai.GenerativeModel('gemini-pro')chat = model.start_chat(history=messages)response = chat.send_message(text)print(response.text)###########################################################################################def genai_loops_chat(apikey, text):genai.configure(api_key=apikey)model = genai.GenerativeModel('gemini-pro')messages = [{'role':'user','parts': ["简单地向孩子解释一下电脑是如何工作的。"]}]response = model.generate_content(messages)messages.append({'role':'model','parts':[response.text]})messages.append({'role':'user','parts':["好的,再给大学生一个更详细的解释?"]})response = model.generate_content(messages)print(response.text)##############################################################################################def gemini_pro_vision(apikey, text, image_path):import PIL.Imagegenai.configure(api_key=apikey)model = genai.GenerativeModel('gemini-pro-vision')img = PIL.Image.open(image_path)response = model.generate_content([text, img], stream=True)response.resolve()print(response.text)if __name__ == '__main__':apikey = os.getenv('GEMINI_API_KEY')#text  = '请将`我喜欢吃话梅糖`翻译成英文,只保留翻译后的结果!'#print('test_gemini_no_stream(apikey, text):')#est_gemini_no_stream(apikey, text)#genai_no_stream(apikey, text)text = """将下面故事里的人物名字提取出来,结果是python的list格式,结果只保留这个list!**故事:**在12世纪的英格兰,诺曼底的贵族威廉·德·伯格纳 (William de Bourgneuf) 踏上了萨塞克斯郡的海岸。他勇敢无畏,野心勃勃,并渴望征服这片土地。威廉迅速征服了莱文斯 (Lewes) 城堡,并确立了自己的统治。他召集当地萨克森人效忠,承诺尊重他们的习俗和法律。然而,一些萨克森人仍然反对他的统治,其中包括一位名叫埃德蒙 (Edmund) 的勇敢战士。埃德蒙率领着一群忠诚的追随者,发动了一场激烈的抵抗。他们在森林中发动游击战,伏击诺曼军队并破坏他们的补给线。威廉决心镇压叛乱,派出他的军队追击埃德蒙。最终,在一次激烈的战斗中,埃德蒙被俘虏。威廉把他关进了莱文斯城堡的地牢,并计划将他处决。但埃德蒙的妹妹埃尔莎 (Aelfa) 向威廉求情,恳求他饶恕他的生命。威廉被埃尔莎的美丽和决心所打动。他同意宽恕埃德蒙,但条件是埃尔莎必须嫁给他。埃尔莎勉强同意了,以拯救她兄弟的生命。婚后,埃尔莎和埃德蒙对威廉忠诚,但他们心中永远铭记着他们的萨克森遗产。他们悄悄地支持抵抗运动,并向当地萨克森人提供庇护和支持。"""#genai_stream(apikey, text)print('\n')#genai_chat(apikey, text)#enai_loops_chat(apikey, text)text = """对图片进行一个详细的描述,谢谢"""image_path = '../img/二傻子.jpg'gemini_pro_vision(apikey, text, image_path)

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

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

相关文章

BUUCTF--极客大挑战php

文章目录 1.网站备份文件www.zip2.下载后发现class.phpindex.phpflag.php 3.分析php代码绕过__wakeup方法变量权限为私有或保护python方法url方法 1.网站备份文件www.zip 2.下载后发现 class.php <?php include flag.php; error_reporting(0);class Name{private $usernam…

创邻科技获评环紫金港创新生态圈智源创新企业

3月1日&#xff0c;由杭州城西科创大走廊管理委员会指导&#xff0c;中共杭州市西湖区委员会、西湖区人民政府主办的“环紫金港创新生态圈”行动推进大会暨2024年紫金港科技城经济高质量发展大会在杭州举办。凭借重要的生态位置和创新业务成果&#xff0c;创邻科技受邀参会并被…

java常用的上传下载工具类

在日常开发过程中&#xff0c;文件的上传下载是最常用的功能&#xff0c;通常我们需要把文件上传到某个特定的影像平台&#xff0c;由平台统一管理文件&#xff0c;当我们需要时&#xff0c;则从平台下载 文件上传 1.上传到本地指定路径 file.transferTo() 2.hutool中的HttpU…

构建高效Web服务:深入理解RESTful架构与实践指南

RESTful&#xff08;Representational State Transfer&#xff0c;表现层状态转移&#xff09;是一种软件架构风格&#xff0c;它定义了一组约束和原则&#xff0c;用于创建Web服务。RESTful架构的核心思想是将网络应用分解为独立的资源&#xff0c;每个资源都有一个唯一的标识…

Matter 笔记2-OT-BR-POSIX编译配置

1. 代码 git clone https://github.com/openthread/ot-br-posix2. 环境准备 配置参考&#xff1a;GitHub cd ot-br-posix默认&#xff1a; ./script/bootstrap带网络管理器的如下配置&#xff1a; NETWORK_MANAGER1 NETWORK_MANAGER_WIFI1 ./script/bootstrap硬件固件准备…

SQL 注入攻击 - cookie base64编码注入

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、Base64编码介绍 原理 Base64编码的原理是将三个字节的二进制数据(共24位)转换成四个ASCII字符。由于每个ASCII字符可以表示64种状态(2^6),刚好可以用来表示24位二进制数…

java-springboot 源码 01

01.springboot 是一个启动器 先安装maven&#xff0c;按照网上的流程来。主要是安装完成后&#xff0c;要修改conf目录下的setting.xml文件。 添加&#xff1a;阿里云镜像 <mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>ali…

【vue3之Pinia:状态管理工具】

Pinia:状态管理工具 一、认识Pinia二、定义store三、gettters四、Action1.定义普通函数2.异步实现 五、storeToRefs工具函数六、pinia持久化插件1. 安装插件2. main.js 使用3. 开启4.其他配置 一、认识Pinia Pinia 是 Vue 的最新 状态管理工具 &#xff0c;是 Vuex 的 替代品 …

OpenCV 视频处理(关于摄像头和视频文件的读取、显示、保存等等)

1、前言 OpenCV不仅能够处理图像&#xff0c;还能够处理视频 视频是由大量的图像构成的&#xff0c;这些图像是以固定的时间间隔从视频中获取的。这样&#xff0c;就能够使用图像处理的方法对这些图像进行处理&#xff0c;进而达到处理视频的目的。要想处理视频&#xff0c;需…

【 Go】GoFrame 框架下执行 SQL 语句并获取结果

在 GoFrame 框架中&#xff0c;可以使用db包来执行 SQL 语句并获取结果。以下是一个简单的示例代码&#xff0c;演示如何在 GoFrame 中调用一个 SQL 语句并获取结果&#xff1a; package mainimport ("fmt""github.com/gogf/gf/frame/g" )func main() {//…

PCL官方demo的编译使用教程

写在前面 本文内容 PCL官方demo的编译使用教程&#xff1b; 后续对PCL demo中比较常用的算法、应用demo会出专门的博客讲解、拓展&#xff1b; 更多点云基础、算法相关内容请关注专栏&#xff1a; 点云处理基础 点云配准(PointCloud Registration) Open3D点云处理 PCL点云处理 …

boost.redis崩溃的解决方法

使用boost.redis的协程一定要co_spawn在strand对象中。 正确的用法&#xff1a; boost::asio::co_spawn(boost::dasio::make_strand(ioc),XXXCoroutine(),boost::asio::detached ); 错误的用法&#xff1a; boost::asio::co_spawn(ioc,XXXCoroutine(),boost::asio::detache…

极狐GitLab 16.3 重磅发布,极致的 DevOps 体验等你来【二】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 极狐GitLab 在去年 8 月份发布了 16.3 版本。此次发布带来了价…

Python程序设计通常涵盖以下主题:

Python程序设计通常涵盖以下主题&#xff1a; 基础语法&#xff1a;包括变量、数据类型&#xff08;如整数、浮点数、字符串、列表、元组、字典等&#xff09;、条件语句、循环语句等。 函数&#xff1a;如何定义函数、传递参数、返回值等。 模块和包&#xff1a;如何导入和使…

【Office】Word、Excel 和 PowerPoint 中常用的一些快捷键

以下是 Microsoft Word、Excel 和 PowerPoint 的全部常用快捷键&#xff1a; Microsoft Word 快捷键&#xff1a; 常用快捷键&#xff1a; 新建文档&#xff1a;Ctrl N打开文档&#xff1a;Ctrl O保存文档&#xff1a;Ctrl S复制&#xff1a;Ctrl C粘贴&#xff1a;Ctrl …

Docker本地部署Redis容器结合内网穿透实现无公网ip远程连接

文章目录 前言1. 安装Docker步骤2. 使用docker拉取redis镜像3. 启动redis容器4. 本地连接测试4.1 安装redis图形化界面工具4.2 使用RDM连接测试 5. 公网远程访问本地redis5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Ub…

代码随想录算法训练营第23天

509. 斐波那契数 class Solution:def fib(self, n: int) -> int:if n 1:return 1if n 0:return 0 dp [0]*(n1)dp[1] 1for i in range(2,n1):dp[i] dp[i-1] dp[i-2]return dp[-1] 70. 爬楼梯 class Solution:def climbStairs(self, n: int) -> int:dp [0] * (n1)i…

Python与FPGA——局部二值化

文章目录 前言一、局部二值化二、Python局部二值化三、FPGA局部二值化总结 前言 局部二值化较全局二值化难&#xff0c;我们将在此实现Python与FPGA的局部二值化处理。 一、局部二值化 局部二值化就是使用一个窗口&#xff0c;在图像上进行扫描&#xff0c;每扫出9个像素求平均…

探索AI视频创新:Sora的奇迹

探索AI视频创新&#xff1a;Sora的奇迹 随着科技的不断演进&#xff0c;AI视频模型已经成为人工智能领域的一颗新星。在这场技术的风暴中&#xff0c;OpenAI的Sora模型以其杰出的性能和前瞻性的技术脱颖而出&#xff0c;正引领着AI视频领域的全新创新浪潮。 Sora的技术之光 …

【深度学习笔记】优化算法——小批量随机梯度下降

小批量随机梯度下降 到目前为止&#xff0c;我们在基于梯度的学习方法中遇到了两个极端情况&#xff1a; :numref:sec_gd中使用完整数据集来计算梯度并更新参数&#xff0c; :numref:sec_sgd中一次处理一个训练样本来取得进展。 二者各有利弊&#xff1a;每当数据非常相似时&a…