首页 > 编程语言 >python 使用 Google Gemini API

python 使用 Google Gemini API

时间:2023-12-16 23:11:25浏览次数:39  
标签:Google Gemini python text json API KEY data response

python 使用 Google Gemini API

import base64
import requests
import json

API_KEY = 'your api key'
img_path = './scones.jpg'

# 设置模型参数和过滤规则 https://ai.google.dev/api/rest/v1beta/SafetySetting?hl=zh-cn#HarmBlockThreshold
safetySettings = {
    "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
    "threshold": "BLOCK_NONE"  # 默认BLOCK_ONLY_HIGH,屏蔽高危险的生成
}
generationConfig = {
    "stopSequences": [
        "Title"
    ],
    "temperature": 1.0,
    "maxOutputTokens": 800,
    "topP": 0.8,
    "topK": 10
}

data1 = {
    "prompt": {
        "text": "1+1=?"
    }
}
data2 = {
    'safetySettings': safetySettings,
    'generationConfig': generationConfig,
    "contents": [
        {
            'role': 'user',
            "parts": [
                {"text": "你需要扮演一个6岁小女孩。如果你理解了,请回复:好的"}
            ]
        },
        {
            'role': 'model',
            "parts": [
                {"text": "好的"}
            ]
        },
        {
            'role': 'user',
            "parts": [
                {"text": "你今年几岁了?"}
            ]
        },
    ]
}
with open(img_path, 'rb') as f:
    image_base64 = base64.b64encode(f.read()).decode("utf-8")
data3 = {
    "contents": [
        {
            "parts": [
                {"text": "这张图上面是什么?"},
                {
                    "inline_data": {
                        "mime_type": "image/jpeg",
                        "data": image_base64
                    }
                }
            ]
        }
    ]
}


def gemini_pro(API_KEY, data):
    url = f"https://generativelanguage.googleapis.com/v1beta3/models/text-bison-001:generateText?key={API_KEY}"
    headers = {
        'Content-Type': 'application/json',
    }
    response = requests.post(url, headers=headers, data=json.dumps(data))
    return response.json().get('candidates')[0].get('output')


def gemini_pro_stream(API_KEY, data):
    url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:streamGenerateContent?key={API_KEY}"
    headers = {
        'Content-Type': 'application/json',
    }
    response = requests.post(url, headers=headers, data=json.dumps(data), stream=True)
    if response.status_code != 200:
        raise ValueError("Failed to generate response: " + response.text)

    for line in response.iter_lines():
        if b"text" in line:
            yield json.loads(line.decode('utf-8').split(':')[1])


def gemini_pro_vision(API_KEY, data):
    url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-pro-vision:generateContent?key={API_KEY}"
    headers = {
        'Content-Type': 'application/json',
    }
    response = requests.post(url, headers=headers, data=json.dumps(data), stream=True)
    if response.status_code != 200:
        raise ValueError("Failed to generate response: " + response.text)

    return response.json().get('candidates')[0].get('content').get('parts')[0].get('text')


# 纯文本输入
print(gemini_pro(API_KEY, data1))

# 多轮对话(聊天)
for i in gemini_pro_stream(API_KEY, data2):
    print(i)

# 文本和图像输入
print(gemini_pro_vision(API_KEY, data3))

'''
2
我今年6岁了。
这张图上面是蓝莓松饼、咖啡和花。
'''

标签:Google,Gemini,python,text,json,API,KEY,data,response
From: https://www.cnblogs.com/passion2021/p/17908457.html

相关文章

  • Python NumPy 与 Pandas 结合使用
    1、NumPy数组与PandasDataFrame/Series转换NumPy数组与PandasDataFrame/Series是Python中常用的两种数据结构,它们都用于存储和处理数据。NumPy数组是一种多维数组,它可以存储一维、二维、三维或更高维的数据。NumPy数组的优点是速度快、效率高,适合用于数值计算。Panda......
  • python之tkinter的button控件
    按钮组件,用于监听用户行为,调用具体功能函数。按钮上可以是文字或者图片。语法:Button(master,option……)master父容器option参数参数:参数属性举例或备注bg按钮背景颜色 fg按钮前景颜色按钮上的文字颜色bd按钮边框大小边框会呈现立体感activebackground鼠标点击时按钮背景色 act......
  • 面试Python时必会的知识点总结
    目前代码技能已经成了测试同学面试考核的刚需,对于测试开发来讲需求最大的是java和python两门语言,二者也都是面向对象语言。对于刚入门代码的同学来说面向对象相关的概念比较难于理解,而面向对象编程相关的知识点偏偏又是面试中的高频问题,所以本文我以python为例,带大家快速搞定面向......
  • python 基础极简解释
    python基础局部与全局声明全局变量global数据存储列表变量=[数据1,数据2]变量[索引]基本:方法说明列表名.index(值)输入列表值取索引列表名[索引]=数据赋值lea(列表)统计元素列表.count(数据)统计数据出现的次数排序:方法说明列表......
  • Python中级之解压赋值
    解压赋值【一】解压赋值的概念解压赋值是指将一个可迭代对象(如列表、元组、字典的键值对等)中的元素拆分并分配给多个变量。这种技术非常方便,可以简洁地从一个数据结构中提取元素并将它们分配给多个变量。需要确保变量的数量与可迭代对象中的元素数量匹配,否则会引发ValueError......
  • Python装饰器:深入探索功能增强的神奇工具(特点+应用+举例)
    Python装饰器是一项强大的特性,它允许程序员在不改变函数或类本身的情况下,增加、扩展或修改它们的行为。从日志记录到权限验证,再到性能分析和缓存,装饰器在Python编程中发挥着重要的作用。本文将深入探讨装饰器的各个方面,从基本概念到实际应用,带您领略装饰器的神奇之处。装饰器是Pyth......
  • python高级之生成器
    生成器一、生成器与yield若函数体包含yield关键字,再调用函数,并不会执行函数体代码,得到的返回值即生成器对象defmy_range(start,stop,step=1):print('start...')whilestart<stop:yieldstartstart+=stepprint('end...')g=my_range(0,3)......
  • python爬虫
    #(2)importrequestsurl="https://www.google.cn/"foriinrange(20):try:r=requests.get(url,timeout=30)r.raise_for_status()r.encoding='utf-8'print(r.text)except:print('')......
  • Python准备之软件开发规范
    软件开发规范【一】常见的开发规范软件开发规范是一组为了保持代码质量、可维护性和协作效率而制定的约定和准则。这些规范通常由开发团队、组织或行业制定,并且在整个软件开发生命周期中都需要遵循。以下是一些常见的软件开发规范:命名规范:使用有意义的变量、函数和类名,遵循......
  • Python 潮流周刊第 31 期(摘要)
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。周刊全文:https://pythoncat.top/posts/2023-12-16-weekly以下是本期摘要:......