---
# System prepended metadata

title: Gemini AI API

---

# 參考網址
https://chrislee0728.medium.com/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8-gemini-api-4458fecbd50f
https://ai.google.dev/tutorials/python_quickstart



# CODE 
#### 初次對話
AI.py
```
import google.generativeai as genai
import os
from dotenv import load_dotenv


load_dotenv(".env")
api_key = os.getenv('Gemini_API_KEY')
genai.configure(api_key = api_key)

model = genai.GenerativeModel('gemini-pro')

# 初次對話
response = model.generate_content('你好')
print(response.text)
```
輸出結果:
![image](https://hackmd.io/_uploads/HJ8zgu6y0.png)


#### 連續對話
AI.py
```
import google.generativeai as genai
import os
from dotenv import load_dotenv

# 安裝pip install google-generativeai 需要用管理員權限開啟cmd後再安裝

load_dotenv(".env")
api_key = os.getenv('Gemini_API_KEY')
genai.configure(api_key = api_key)

# 調用模型
model = genai.GenerativeModel('gemini-pro')

#找尋歷史對話紀錄以方便延續對話
chat = model.start_chat(history=[])

# 對話的接續,使用chat.send_message函式執行
response = chat.send_message("我想學習deep learning要從哪邊開始入手")
print(response.text)
```

輸出結果:
![image](https://hackmd.io/_uploads/Skdaed6kR.png)


# 差別
差異比較：model.generate_content() vs. chat.send_message()
這兩個方法都是用來與語言模型互動，但它們的用途和功能略有不同：
###### model.generate_content()
用途: 主要用於生成文本內容，例如文章、故事、詩歌等。
輸入: 通常接受一個字符串作為提示或上下文，模型會根據此輸入生成新的文本。
輸出: 返回生成的文本字符串。
功能:
更注重文本的創造性和連貫性。
可以控制生成文本的长度、风格等参数。
不具備記憶先前对话的能力。
###### chat.send_message()
用途: 主要用於進行对话式交互，例如聊天机器人。
輸入: 接受一个字符串作为用户的消息。
輸出: 返回模型的回复消息。
功能:
更注重对话的交互性和流畅性。
可以记住先前的对话内容，并根据上下文进行回复。
可能不擅长生成长篇或富有创意的文本。
###### 總結
model.generate_content() 适合生成文本内容，而 chat.send_message() 适合进行对话交互。
选择哪种方法取决于你的具体需求。
例子
如果你想要写一篇关于未来的科幻故事，可以使用 model.generate_content() 并提供一些相关的提示，例如 "22世纪的火星殖民地"。
如果你想要构建一个可以回答用户问题的聊天机器人，可以使用 chat.send_message() 来处理用户的提问。


# 其他常用方法
除了 model.generate_content() 和 chat.send_message()，还有许多其他方法可用于与语言模型交互，以下列举一些常见例子：
1. model.embedding():
用途: 将文本转换为向量表示，用于语义相似度计算、文本分类等任务。
输入: 文本字符串。
输出: 向量 (通常是高维向量)。
2. model.translate():
用途: 进行机器翻译，将文本从一种语言翻译成另一种语言。
输入: 源语言文本和目标语言代码。
输出: 目标语言文本。
3. model.summarize():
用途: 将长文本摘要成简短的概述。
输入: 长文本字符串。
输出: 摘要文本。
4. model.answer_question():
用途: 根据提供的上下文回答问题。
输入: 问题和相关上下文文本。
输出: 问题的答案。
5. 模型微调 (Fine-tuning):
用途: 根据特定任务和数据集，对预训练模型进行微调，使其在该任务上表现更佳。
方法: 通常需要编写代码，使用训练数据对模型进行训练。