众所周知Gemini大模型是谷歌发布的自己的AI模型。除了文本生成之外还支持输入图片,本文将带领大家一起完成Gemini API 的使用。
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'])
if __name__ == '__main__':
apikey = 'xxx'
text = 'say hello'
print('test_gemini_no_stream(apikey, text):')
test_gemini_no_stream(apikey, text)
输出结果:
test_gemini_no_stream(apikey, text):
Hello there! How are you doing today?
json
和 requests
模块。test_gemini_no_stream(apikey, text)
,该函数接受两个参数:apikey
和 text
。apikey
。headers
,指定了 Content-Type 为 application/json
。data
,其中包含了要生成内容的文本。requests.post()
方法,传递了 URL、头部信息和数据,并将响应存储在 response
变量中。if __name__ == '__main__':
来判断是否在直接执行该脚本。如果是,则定义了 apikey
和 text
变量,并调用 test_gemini_no_stream(apikey, text)
函数。注意:在代码中的 apikey
部分需要替换为实际的 API 密钥,而 text
部分是要生成内容的原始文本。
在使用非stream流输出的时候是通过reuqest去访问的API,而google-generativeai则是通过Google的Python库的调用。
pip install -U google-generativeai
注意事项:Python版本需至少为3.9,google-generativeai版本为0.3.1。
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("how are you")
print(response.text)
输出结果:
genai_no_stream(apikey, text):
I am a large language model, trained by Google.
google.generativeai
模块。
genai_no_stream(apikey, text)
,该函数接受两个参数:apikey
和 text
。
genai.configure(api_key=apikey)
来配置 API 密钥。
genai.GenerativeModel()
创建一个名为 'gemini-pro'
的生成模型。
generate_content()
方法,传递原始文本作为参数,生成内容。生成的内容作为响应对象返回。
流式输出只需将generate_content的stream设置为True即可
# 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)
输出结果:
**人工智能发展史**
* **1940年代:**诞生
* 1943年,沃伦·麦卡洛克和沃尔特·皮茨提出神经网络模型。
* 1949年,艾伦·图灵提出图灵检测,用以判断机器是否具有智能。
* **1950年代:**发展
* 1950年,艾伦·纽厄尔和克利福德·肖提出逻辑理论家程序,该程序能够证明定理。
* 1952年,阿瑟·塞缪尔发明会下棋的程序。
* 1956年,约翰·麦卡锡在达特茅斯学院举办了世界上第一次人工智能研讨会,人工智能一词正式诞生。
* **1960年代:**突破
* 1965年,拉斐尔·内尔逊提出通用问题求解器,该程序能够解决各种各样的问题。
* 1966年,弗兰克·罗森布拉特发明感知机,该机器能够识别手写数字。
* 1969年,马文·明斯基和西摩尔·帕帕特出版《感知机》,该书对感知机进行了详细的阐述。
* **1970年代:**停滞
* 1973年,马文·明斯基和西摩尔·帕帕特出版《人工智能框架》,该书对人工智能进行了全面的概述。
* 1974年,罗杰·香克斯和罗伯特·阿贝尔森提出脚本理论,该理论认为人们的行为是基于存储在记忆中的脚本。
* 1979年,爱德华·菲根鲍姆和朱丽叶·费根鲍姆出版《人工智能专家系统》,该书对专家系统进行了详细的阐述。
* **1980年代:**复兴
* 1980年,约翰·霍普菲尔德提出霍普菲尔德网络,该网络能够存储和检索信息。
* 1982年,特伦斯·塞诺夫斯基和杰弗里· Hinton提出多层感知器,该网络能够学习和识别模式。
* 1986年,戴维·鲁梅尔哈特和杰弗里· Hinton出版《并行分布式处理:探索大脑的计算》,该书对并行分布式处理进行了详细的阐述。
* **1990年代:**爆发
* 1997年,IBM的深蓝战胜了世界象棋冠军加里·卡斯帕罗夫。
* 1997年,杨立昆等人提出卷积神经网络,该网络能够识别图像。
* 1998年,吴恩达等人提出长短期记忆网络,该网络能够学习和记忆长时间序列的数据。
* **2000年代:**深化
* 2006年,杰弗里· Hinton等人提出深度信念网络,该网络能够学习和识别复杂的数据。
* 2012年,安德鲁·恩等人提出卷积神经网络,该网络能够识别图像。
* 2015年,谷歌的阿尔法狗战胜了世界围棋冠军李世石。
* **2010年代:**应用
* 2016年,谷歌的阿尔法狗战胜了世界象棋冠军李世石。
* 2017年,百度的人工智能围棋程序AlphaGo Zero战胜了阿尔法狗。
* 2018年,谷歌的 Duplex 人工智能助手能够与人类进行自然的对话。
* 2019年,OpenAI 的 GPT-3 人工智能语言模型能够生成类似人类的文本。
人工智能的发展日新月异,未来人工智能将对人类社会产生深远的影响。
其输出默认为MarkDown格式。
使用chat模式可以自动获取上下文。
def genai_chat(apikey, text):
genai.configure(api_key=apikey)
# 历史消息,必须为偶数
messages = [
{'role':'user',
'parts': ["请将我接下来的任何输入都直接翻译成中文即可。"]},
{'role':'model',
'parts': ["好的。我接下来将任何输入都直接翻译成中文"]}
]
model = genai.GenerativeModel('gemini-pro')
chat = model.start_chat(history=messages)
response = chat.send_message(text)
print(response.text)
输出结果:
电脑就像一个聪明的机器人,可以帮助我们做很多事情。它里面有很多小零件,比如处理器、内存、硬盘、显卡等等。处理器就像电脑的大脑,负责处理信息和计算。内存就像电脑的短期记忆,可以临时存储信息。硬盘就像电脑的长期记忆,可以永久存储信息。显卡负责处理图形和图像。
当我们使用电脑时,我们通过键盘、鼠标或触摸屏等输入设备将信息输入到电脑中。电脑会将这些信息发送给处理器,由处理器进行处理和计算。处理后的结果会存储在内存中,或者永久存储在硬盘中。如果我们想看到处理结果,电脑会将它们发送给显示器或打印机等输出设备,这样我们就可以看到或打印出结果了。
电脑还可以连接到互联网,这样我们就可以与世界各地的其他人交流信息和数据。
genai.configure(api_key=apikey)
来配置 API 密钥。
messages
的列表,其中包含了历史消息。每条消息是一个字典,包含两个键值对:
'role'
:指定消息的角色,可以是 'user'
或 'model'
,分别代表用户和模型。'parts'
:包含了消息的内容,这里是一组文本部分的列表。genai.GenerativeModel()
创建一个名为 'gemini-pro'
的生成模型。
start_chat()
方法,传递历史消息作为参数,开始对话。该方法返回一个对话对象。
send_message()
方法,传递用户输入的文本作为参数,发送消息并获取响应。响应对象包含了模型的回复内容。
尽管以上代码允许添加历史消息,但它无法模拟 OpenAI GPT API 的 "system" 参数或 GPTs 的功能。Gemini 没有 "system" 这个角色。在获取上下文时,messages
列表中的 "model" 信息通常是由 Gemini 生成的。在这里,试图手动设计它,似乎无法达到所需的功能。但这并不是说对话模式存在问题,而是历史消息中 "model" 信息没有正确设置为 Gemini 生成的内容。正常的示例程序如下所示:
model = genai.GenerativeModel('gemini-pro')
chat = model.start_chat(history=[])
response = chat.send_message("In one sentence, explain how a computer works to a young child.")
print(chat.history)
response = chat.send_message("Okay, how about a more detailed explanation to a high schooler?", stream=True)
for chunk in response:
print(chunk.text)
print("_"*80)
def genai_multi_turn(apikey, text):
genai.configure(api_key=apikey)
model = genai.GenerativeModel('gemini-pro')
messages = [
{'role':'user',
'parts': ["请将我接下来的任何输入都直接翻译成中文即可。"]},
{'role':'model',
'parts': ["好的。我接下来将任何输入都直接翻译成中文"]},
{'role':'user',
'parts': [text]}
]
response = model.generate_content(messages)
print(response.text)
输出结果:
电脑就像一个聪明的机器人,它能帮助我们做很多事情。电脑里面有很多零件,就像人有大脑、心脏、手脚一样。电脑的大脑叫中央处理器,它负责处理信息。电脑的心脏叫内存,它负责存储信息。电脑的手脚叫输入输出设备,它们负责与我们交流。
当我们使用电脑时,我们会通过键盘或鼠标把信息输入到电脑里。电脑的大脑会处理这些信息,然后把结果通过显示器或打印机等输出设备显示出来。
电脑还可以存储信息,就像我们的大脑可以记住事情一样。我们可以把照片、音乐、文件等信息存储在电脑里,以后需要的时候随时可以调出来。
电脑还可以帮助我们做很多有趣的事情,比如玩游戏、看电影、听音乐等。它就像一个神奇的工具,可以帮助我们学习、工作和娱乐。
curl -o image.jpg https://t0.gstatic.com/licensed-image?q=tbn:ANd9GcQ_Kevbk21QBRy-PgB4kQpS79brbmmEG7m3VOTShAn4PecDU5H5UxrJxE3Dw1JiaG17V88QIol19-3TM2wCHw
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)
输出结果:
今天分享一道超级简单的快手便当,上班族和学生党都非常适合哦!
所需食材:鸡胸肉、西兰花、胡萝卜、米饭。
制作步骤:
1. 鸡胸肉切小块,用料酒、生抽、黑胡椒粉腌制15分钟。
2. 西兰花和胡萝卜焯水备用。
3. 米饭蒸熟。
4. 锅中热油,放入腌制好的鸡胸肉翻炒至变色。
5. 加入西兰花和胡萝卜,翻炒均匀。
6. 加入米饭,翻炒均匀即可。
这道快手便当就做好啦,是不是超级简单?赶紧动手试试吧!
代码解析:
import PIL.Image
:导入了 Python Imaging Library (PIL) 的 Image 模块,用于处理图像数据。
genai.configure(api_key=apikey)
:配置了 GenerativeAI 库,设置了 API 密钥为提供的 apikey
。
model = genai.GenerativeModel('gemini-pro-vision')
:创建了一个名为 'gemini-pro-vision'
的 GenerativeAI 模型对象,用于图像分析和文本生成。
img = PIL.Image.open(image_path)
:打开了指定路径的图像文件,返回一个 Image 对象,存储在 img
变量中。
response = model.generate_content([text, img], stream=True)
:调用模型对象的 generate_content()
方法,传递了文本数据 text
和图像数据 img
。stream=True
参数指示在处理请求时使用流式处理。
response.resolve()
:解析了响应结果。这个步骤通常用于等待响应的完成。
print(response.text)
:打印了生成的文本内容。这里假设响应对象具有 text
属性,包含生成的文本内容。
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 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("how are you")
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': ["请将我接下来的任何输入都直接翻译成中文即可。"]},
{'role':'model',
'parts': ["好的。我接下来将任何输入都直接翻译成中文"]}
]
model = genai.GenerativeModel('gemini-pro')
chat = model.start_chat(history=messages)
response = chat.send_message(text)
print(response.text)
def genai_multi_turn(apikey, text):
genai.configure(api_key=apikey)
model = genai.GenerativeModel('gemini-pro')
messages = [
{'role':'user',
'parts': ["请将我接下来的任何输入都直接翻译成中文即可。"]},
{'role':'model',
'parts': ["好的。我接下来将任何输入都直接翻译成中文"]},
{'role':'user',
'parts': [text]}
]
response = model.generate_content(messages)
print(response.text)
def genai_system(apikey, text):
genai.configure(api_key=apikey)
model = genai.GenerativeModel('gemini-pro')
response = model.generate_content("请将下面内容翻译成中文。\nBriefly explain how a computer works to a young child.")
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)
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)
if __name__ == '__main__':
apikey = 'xxx'
text = 'say hello'
# print('test_gemini_no_stream(apikey, text):')
# test_gemini_no_stream(apikey, text)
# print('genai_no_stream(apikey, text):')
# genai_no_stream(apikey, text)
# print('genai_stream(apikey, text):')
# genai_stream(apikey, text='请介绍人工智能发展历史')
# print('genai_chat(apikey, text):')
# genai_chat(apikey, text='Briefly explain how a computer works to a young child.')
# print('genai_chat(apikey, text):')
# genai_multi_turn(apikey, text='Briefly explain how a computer works to a young child.')
# print('genai_system(apikey, text):')
# genai_system(apikey, text='请将下面内容翻译成中文。\nBriefly explain how a computer works to a young child.')
# print('gemini-pro-vision(apikey, text, image_path):')
# gemini_pro_vision(apikey, text='请基于图片中内容写一篇小红书文案。', image_path='image.jpg')
print('genai_config(apikey, text)')
genai_config(apikey, text='say hello.')
powered by kaifamiao