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-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;需…

PCL官方demo的编译使用教程

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

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…

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…

电脑蓝牙在哪里打开?不同系统详解

在现代计算机的多功能性中&#xff0c;蓝牙技术的广泛应用使得我们能够轻松连接各种外部设备&#xff0c;实现无线传输和分享。无论是连接无线耳机、键盘&#xff0c;还是与其他设备快速交换文件&#xff0c;蓝牙在电脑中的角色很重要。然而&#xff0c;对于一些用户而言&#…

centos7 使用rpm包部署filebeat

先决条件参考 虚拟机部署elasticsearch集群-CSDN博客 下载并安装filebeat的rpm包 curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.18-x86_64.rpmrpm -vi filebeat-7.17.18-x86_64.rpm 修改配置文件 配置文件内容可以参考 Repositories…

5G工业网关是什么?

随着科技的飞速发展&#xff0c;5G技术已经逐渐渗透到我们生活的方方面面。而在工业领域&#xff0c;5G工业网关作为连接工业设备与网络的关键组件&#xff0c;正发挥着越来越重要的作用。HiWoo Box其5G工业网关产品以其卓越的性能和稳定性&#xff0c;正助力企业实现数字化转型…

【异常处理】Vue报错 Component template should contain exactly one root element.

问题描述 启动VUE项目后控制台报错&#xff1a; Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.翻译为&#xff1a;组件模板应该只包含一个根元素 查看vue代码&#xff0…

【Redis】Redis的应用场景

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Redis ⛺️稳中求进&#xff0c;晒太阳 Redis的应用场景&#xff1a; 限流 要求10s内只能访问一次 RequestMapping("xian")public String xianLiu(String sign){String sign1 …

前端处理接口直接返回的图片

有时候接口会直接返回图片而不是连接&#xff0c;前端需要处理后才能使用。 首先你可能需要设置responseType: blob’处理响应数据格式。 直接使用 将接口及参数动态拼接成img.src直接使用 <img src"http://test.com/api/img?size50x50" alt"">i…

SpringBoot和Vue 实现增删改查、分页查询、模糊查询

文章目录 前言统一的设置返回类型Vue安装axios&#xff0c;封装request查询所有的用户前端页面请求后端接口编写 条件查询前台请求后台处理请求 分页查询前台发送请求后台接受请求 新增、编辑管理员信息前台后台 删除操作前台请求后台 前言 SpringBoot实现增删改查、分页查询、…

出口内销双循环,诺赛特企业走出发展新路子

在外贸圈这个深水池中&#xff0c;企业的命脉早已与规模、市场地位等因素牢牢绑定。大型外贸企业掌握大资源、大曝光&#xff0c;不用为订单发愁&#xff1b;中型外贸企业&#xff0c;投入相当大的人力、财力、物力&#xff0c;孤注一掷&#xff0c;虎口夺食&#xff1b;小型外…

LLM 大模型框架 LangChain 可观测性最佳实践

LLM&#xff08;Large Language Model&#xff09;大模型的可观测性是指对模型内部运行过程的理解和监控能力。由于LLM大模型通常具有庞大的参数量和复杂的网络结构&#xff0c;因此对其内部状态和运行过程的理解和监控是一个重要的问题。 什么是 LangChain&#xff1f; Lang…

中华财险启动“3·15”金融消费者权益保护教育宣传活动!

2024年中国银行保险业“3•15”消费者权益保护教育宣传活动拉开帷幕。中华财险始终坚持“中华保险•服务中华”&#xff0c;切实履行险企责任&#xff0c;为主动保护金融消费者合法权益&#xff0c;在国家监督管理总局和中华保险集团的指导下&#xff0c;全面开展“3•15” 金融…