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, 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, 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, top_p=None, 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, top_p=1.0, top_k=1), Model(name='models/gemini-1.0-pro-001', base_model_id='', version='001', display_name='Gemini 1.0 Pro 001 (Tuning)', description=('The best model for scaling across a wide range of tasks. This is a stable ' 'model that supports tuning.'), input_token_limit=30720, output_token_limit=2048, supported_generation_methods=['generateContent', 'countTokens', 'createTunedModel'], temperature=0.9, top_p=1.0, top_k=1), Model(name='models/gemini-1.0-pro-latest', base_model_id='', version='001', display_name='Gemini 1.0 Pro Latest', description=('The best model for scaling across a wide range of tasks. This is the latest ' 'model.'), input_token_limit=30720, output_token_limit=2048, supported_generation_methods=['generateContent', 'countTokens'], temperature=0.9, top_p=1.0, top_k=1), Model(name='models/gemini-1.0-pro-vision-latest', base_model_id='', version='001', display_name='Gemini 1.0 Pro Vision', description='The best image understanding model to handle a broad range of applications', input_token_limit=12288, output_token_limit=4096, supported_generation_methods=['generateContent', 'countTokens'], temperature=0.4, 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', description='Mid-size multimodal model that supports up to 1 million tokens', input_token_limit=1048576, output_token_limit=8192, supported_generation_methods=['generateContent', 'countTokens'], temperature=1.0, top_p=0.95, 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, top_p=1.0, top_k=1), Model(name='models/gemini-pro-vision', base_model_id='', version='001', display_name='Gemini 1.0 Pro Vision', description='The best image understanding model to handle a broad range of applications', input_token_limit=12288, output_token_limit=4096, supported_generation_methods=['generateContent', 'countTokens'], temperature=0.4, top_p=1.0, top_k=32), 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, 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, 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, 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)