gemini 试用(python)

32 篇文章 5 订阅
6 篇文章 0 订阅

在这里插入图片描述

1. 非stream方式(requests)

import os
import json
import requests

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'])

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 genai
 
def 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.Image
    genai.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 genai

def 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.Image
    genai.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)
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值