[2024-12-15追記] Gemini 2.0 (experimental) のページの下に書いてあるように、新しい Google Gen AI SDK (experimental) が出ました。これは pip install google-genai
で入れるもので、従来の pip install google-generativeai
で入れるものとは別物です。
[2024-11-09追記] Gemini is now accessible from the OpenAI Library というわけでOpenAIのAPIを使うの方法がそのまま使えるようになりました。ドキュメントにも OpenAI compatibility が加わりました。
Gemini API: Quickstart with Pythonに従って、Pythonパッケージを
pip install google-generativeai
でインストールすれば、
import google.generativeai as genai
で使えるようになる。
Google AI StudioのAPI keysで「Create API key in new project」を選んでAPIキーを発行してもらう。キーは
export GOOGLE_API_KEY="..."
のようにして環境変数としておくと勝手に使ってもらえるが、うまくいかなければ
genai.configure(api_key="...")
で指定する。
list(genai.list_models())
と打ち込めば、使えるモデルが一覧できる。例:
[Model(name='models/chat-bison-001', base_model_id='', version='001', display_name='PaLM 2 Chat (Legacy)', description='A legacy text-only model optimized for chat conversations', input_token_limit=4096, output_token_limit=1024, supported_generation_methods=['generateMessage', 'countMessageTokens'], temperature=0.25, max_temperature=None, top_p=0.95, top_k=40), Model(name='models/text-bison-001', base_model_id='', version='001', display_name='PaLM 2 (Legacy)', description='A legacy model that understands text and generates text as an output', input_token_limit=8196, output_token_limit=1024, supported_generation_methods=['generateText', 'countTextTokens', 'createTunedTextModel'], temperature=0.7, max_temperature=None, top_p=0.95, top_k=40), Model(name='models/embedding-gecko-001', base_model_id='', version='001', display_name='Embedding Gecko', description='Obtain a distributed representation of a text.', input_token_limit=1024, output_token_limit=1, supported_generation_methods=['embedText', 'countTextTokens'], temperature=None, max_temperature=None, top_p=None, top_k=None), Model(name='models/gemini-1.0-pro-latest', base_model_id='', version='001', display_name='Gemini 1.0 Pro Latest', description=('The original Gemini 1.0 Pro model. This model will be discontinued on ' 'February 15th, 2025. Move to a newer Gemini version.'), input_token_limit=30720, output_token_limit=2048, supported_generation_methods=['generateContent', 'countTokens'], temperature=0.9, max_temperature=None, top_p=1.0, top_k=None), Model(name='models/gemini-1.0-pro', base_model_id='', version='001', display_name='Gemini 1.0 Pro', description='The best model for scaling across a wide range of tasks', input_token_limit=30720, output_token_limit=2048, supported_generation_methods=['generateContent', 'countTokens'], temperature=0.9, max_temperature=None, top_p=1.0, top_k=None), Model(name='models/gemini-pro', base_model_id='', version='001', display_name='Gemini 1.0 Pro', description='The best model for scaling across a wide range of tasks', input_token_limit=30720, output_token_limit=2048, supported_generation_methods=['generateContent', 'countTokens'], temperature=0.9, max_temperature=None, top_p=1.0, top_k=None), Model(name='models/gemini-1.0-pro-001', base_model_id='', version='001', display_name='Gemini 1.0 Pro 001 (Tuning)', description=('The original Gemini 1.0 Pro model version that supports tuning. Gemini 1.0 ' 'Pro will be discontinued on February 15th, 2025. Move to a newer Gemini ' 'version.'), input_token_limit=30720, output_token_limit=2048, supported_generation_methods=['generateContent', 'countTokens', 'createTunedModel'], temperature=0.9, max_temperature=None, top_p=1.0, top_k=None), Model(name='models/gemini-1.0-pro-vision-latest', base_model_id='', version='001', display_name='Gemini 1.0 Pro Vision', description=('The original Gemini 1.0 Pro Vision model version which was optimized for ' 'image understanding. Gemini 1.0 Pro Vision was deprecated on July 12, 2024. ' 'Move to a newer Gemini version.'), input_token_limit=12288, output_token_limit=4096, supported_generation_methods=['generateContent', 'countTokens'], temperature=0.4, max_temperature=None, top_p=1.0, top_k=32), Model(name='models/gemini-pro-vision', base_model_id='', version='001', display_name='Gemini 1.0 Pro Vision', description=('The original Gemini 1.0 Pro Vision model version which was optimized for ' 'image understanding. Gemini 1.0 Pro Vision was deprecated on July 12, 2024. ' 'Move to a newer Gemini version.'), input_token_limit=12288, output_token_limit=4096, supported_generation_methods=['generateContent', 'countTokens'], temperature=0.4, max_temperature=None, top_p=1.0, top_k=32), Model(name='models/gemini-1.5-pro-latest', base_model_id='', version='001', display_name='Gemini 1.5 Pro Latest', description=('Alias that points to the most recent production (non-experimental) release ' 'of Gemini 1.5 Pro, our mid-size multimodal model that supports up to 2 ' 'million tokens.'), input_token_limit=2000000, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=40), Model(name='models/gemini-1.5-pro-001', base_model_id='', version='001', display_name='Gemini 1.5 Pro 001', description=('Stable version of Gemini 1.5 Pro, our mid-size multimodal model that ' 'supports up to 2 million tokens, released in May of 2024.'), input_token_limit=2000000, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens', 'createCachedContent'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=64), Model(name='models/gemini-1.5-pro-002', base_model_id='', version='002', display_name='Gemini 1.5 Pro 002', description=('Stable version of Gemini 1.5 Pro, our mid-size multimodal model that ' 'supports up to 2 million tokens, released in September of 2024.'), input_token_limit=2000000, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens', 'createCachedContent'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=40), Model(name='models/gemini-1.5-pro', base_model_id='', version='001', display_name='Gemini 1.5 Pro', description=('Stable version of Gemini 1.5 Pro, our mid-size multimodal model that ' 'supports up to 2 million tokens, released in May of 2024.'), input_token_limit=2000000, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=40), Model(name='models/gemini-1.5-pro-exp-0801', base_model_id='', version='exp-0801', display_name='Gemini 1.5 Pro Experimental 0801', description=('Experimental release (August 1st, 2024) of Gemini 1.5 Pro, our mid-size ' 'multimodal model that supports up to 2 million tokens, with across the board ' 'improvements. Replaced by Gemini-1.5-pro-002 (stable).'), input_token_limit=2000000, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=64), Model(name='models/gemini-1.5-pro-exp-0827', base_model_id='', version='exp-1206', display_name='Gemini Experimental 1206', description='Experimental release (December 6th, 2024) of Gemini.', input_token_limit=2097152, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=64), Model(name='models/gemini-1.5-flash-latest', base_model_id='', version='001', display_name='Gemini 1.5 Flash Latest', description=('Alias that points to the most recent production (non-experimental) release ' 'of Gemini 1.5 Flash, our fast and versatile multimodal model for scaling ' 'across diverse tasks.'), input_token_limit=1000000, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=40), Model(name='models/gemini-1.5-flash-001', base_model_id='', version='001', display_name='Gemini 1.5 Flash 001', description=('Stable version of Gemini 1.5 Flash, our fast and versatile multimodal model ' 'for scaling across diverse tasks, released in May of 2024.'), input_token_limit=1000000, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens', 'createCachedContent'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=64), Model(name='models/gemini-1.5-flash-001-tuning', base_model_id='', version='001', display_name='Gemini 1.5 Flash 001 Tuning', description=('Version of Gemini 1.5 Flash that supports tuning, our fast and versatile ' 'multimodal model for scaling across diverse tasks, released in May of 2024.'), input_token_limit=16384, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens', 'createTunedModel'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=64), Model(name='models/gemini-1.5-flash', base_model_id='', version='001', display_name='Gemini 1.5 Flash', description=('Alias that points to the most recent stable version of Gemini 1.5 Flash, our ' 'fast and versatile multimodal model for scaling across diverse tasks.'), input_token_limit=1000000, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=40), Model(name='models/gemini-1.5-flash-exp-0827', base_model_id='', version='exp-1206', display_name='Gemini Experimental 1206', description='Experimental release (December 6th, 2024) of Gemini.', input_token_limit=2097152, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=64), Model(name='models/gemini-1.5-flash-002', base_model_id='', version='002', display_name='Gemini 1.5 Flash 002', description=('Stable version of Gemini 1.5 Flash, our fast and versatile multimodal model ' 'for scaling across diverse tasks, released in September of 2024.'), input_token_limit=1000000, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens', 'createCachedContent'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=40), Model(name='models/gemini-1.5-flash-8b', base_model_id='', version='001', display_name='Gemini 1.5 Flash-8B', description=('Stable version of Gemini 1.5 Flash-8B, our smallest and most cost effective ' 'Flash model, released in October of 2024.'), input_token_limit=1000000, output_token_limit=8192, supported_generation_methods=['createCachedContent', 'generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=40), Model(name='models/gemini-1.5-flash-8b-001', base_model_id='', version='001', display_name='Gemini 1.5 Flash-8B 001', description=('Stable version of Gemini 1.5 Flash-8B, our smallest and most cost effective ' 'Flash model, released in October of 2024.'), input_token_limit=1000000, output_token_limit=8192, supported_generation_methods=['createCachedContent', 'generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=40), Model(name='models/gemini-1.5-flash-8b-latest', base_model_id='', version='001', display_name='Gemini 1.5 Flash-8B Latest', description=('Alias that points to the most recent production (non-experimental) release ' 'of Gemini 1.5 Flash-8B, our smallest and most cost effective Flash model, ' 'released in October of 2024.'), input_token_limit=1000000, output_token_limit=8192, supported_generation_methods=['createCachedContent', 'generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=40), Model(name='models/gemini-1.5-flash-8b-exp-0827', base_model_id='', version='001', display_name='Gemini 1.5 Flash 8B Experimental 0827', description=('Experimental release (August 27th, 2024) of Gemini 1.5 Flash-8B, our ' 'smallest and most cost effective Flash model. Replaced by ' 'Gemini-1.5-flash-8b-001 (stable).'), input_token_limit=1000000, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=40), Model(name='models/gemini-1.5-flash-8b-exp-0924', base_model_id='', version='001', display_name='Gemini 1.5 Flash 8B Experimental 0924', description=('Experimental release (September 24th, 2024) of Gemini 1.5 Flash-8B, our ' 'smallest and most cost effective Flash model. Replaced by ' 'Gemini-1.5-flash-8b-001 (stable).'), input_token_limit=1000000, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=40), Model(name='models/gemini-2.0-flash-exp', base_model_id='', version='2.0', display_name='Gemini 2.0 Flash Experimental', description='Gemini 2.0 Flash Experimental', input_token_limit=1048576, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens', 'bidiGenerateContent'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=40), Model(name='models/gemini-exp-1206', base_model_id='', version='exp_1206', display_name='Gemini Experimental 1206', description='Experimental release (December 6th, 2024) of Gemini.', input_token_limit=2097152, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=64), Model(name='models/gemini-exp-1121', base_model_id='', version='exp-1121', display_name='Gemini Experimental 1121', description='Experimental release (November 21st, 2024) of Gemini.', input_token_limit=32768, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=64), Model(name='models/gemini-exp-1114', base_model_id='', version='exp-1121', display_name='Gemini Experimental 1121', description='Experimental release (November 21st, 2024) of Gemini.', input_token_limit=32768, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=64), Model(name='models/learnlm-1.5-pro-experimental', base_model_id='', version='001', display_name='LearnLM 1.5 Pro Experimental', description=('Alias that points to the most recent stable version of Gemini 1.5 Pro, our ' 'mid-size multimodal model that supports up to 2 million tokens.'), input_token_limit=32767, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens'], temperature=1.0, max_temperature=2.0, top_p=0.95, top_k=64), Model(name='models/embedding-001', base_model_id='', version='001', display_name='Embedding 001', description='Obtain a distributed representation of a text.', input_token_limit=2048, output_token_limit=1, supported_generation_methods=['embedContent'], temperature=None, max_temperature=None, top_p=None, top_k=None), Model(name='models/text-embedding-004', base_model_id='', version='004', display_name='Text Embedding 004', description='Obtain a distributed representation of a text.', input_token_limit=2048, output_token_limit=1, supported_generation_methods=['embedContent'], temperature=None, max_temperature=None, top_p=None, top_k=None), Model(name='models/aqa', base_model_id='', version='001', display_name='Model that performs Attributed Question Answering.', description=('Model trained to return answers to questions that are grounded in provided ' 'sources, along with estimating answerable probability.'), input_token_limit=7168, output_token_limit=1024, supported_generation_methods=['generateAnswer'], temperature=0.2, max_temperature=None, top_p=1.0, top_k=40)]
models/
は省略できるようだ。
'gemini-1.5-pro-latest'
を使って何か聞いてみよう:
model = genai.GenerativeModel('gemini-1.5-pro-latest') response = model.generate_content("What is the meaning of life?") print(response.text)
もし検閲に引っかかるようなら response.prompt_feedback
を表示してみれば詳細がわかる。
上の方法では一つしか質問できない。会話は、次のようにする。
model = genai.GenerativeModel('gemini-1.5-pro-latest') chat = model.start_chat(history=[]) response = chat.send_message("What is your knowledge cutoff?") print(response.text) response = chat.send_message("What are reputable news sources?") print(response.text) ...
会話全体は chat.history
で参照できる。
for h in chat.history: print(f"[{h.role}]\n{h.parts[0].text}")
温度(ランダムさの度合い)などを指定することもできる:
config = genai.GenerationConfig(temperature=0) model = genai.GenerativeModel('gemini-1.5-pro-latest', generation_config=config)