# Discord Bot講義-8
1. 使用Google AI Studio編寫AI對話程式
2. 製作AI Discord Bot
## 使用Google AI Studio編寫AI對話程式
為什麼不用Chat GPT的服務呢?
因為Chat GPT提供的免費額度是有限的,而 Google 的免費服務提供在1分鐘內60次的提問
首先,使用Google個人帳戶登入[Google AI Studio](https://aistudio.google.com/app/apikey?hl=zh-tw)獲得金鑰
接著按照前面[IDE教學](https://hackmd.io/@AndrewCho365/S1yXoFC8C)安裝**google.generativeai**套件
安裝完成後輸入以下程式碼⬇️(記得將api_key替換成你自己的)
```py=
import google.generativeai as genai
import os
api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
message = "message"
genai.configure(api_key=api_key)
generation_config = {
"temperature": 0.9,
"top_p": 1,
"top_k": 1,
"max_output_tokens": 2048,
}
safety_settings = [
{
"category": "HARM_CATEGORY_HARASSMENT",
"threshold": "BLOCK_NONE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"threshold": "BLOCK_NONE"
},
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"threshold": "BLOCK_NONE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"threshold": "BLOCK_NONE"
},
]
model = genai.GenerativeModel(model_name="gemini-1.5-pro",
generation_config=generation_config,
safety_settings=safety_settings)
chat = model.start_chat(history=[])
while True:
message = input("message: ")
if message == "stop":
os._exit(0)
else:
response = chat.send_message(message)
print(f"AI:{response.text}")
```
接著就可以輸入文字,送出後AI就會回答
可以輸入stop結束對話
## 製作AI Discord Bot
要製作AI機器人,必須要有一個輸入的地方,
但是使用指令聊天又很奇怪,
所以可以使用訊息偵測的方式,
為了不要影響伺服器原本的對話,
可以使用前綴詞的方式啟動AI,
例如在句子前方加入一個"!"驚嘆號,
並且用程式去除驚嘆號後再交給AI回答。
以下是AI機器人的程式碼⬇️
```py=
import discord
import google.generativeai as genai
bot = discord.Bot(intents=discord.Intents.all())
api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
message = "message"
genai.configure(api_key=api_key)
generation_config = {
"temperature": 0.9,
"top_p": 1,
"top_k": 1,
"max_output_tokens": 2048,
}
safety_settings = [
{
"category": "HARM_CATEGORY_HARASSMENT",
"threshold": "BLOCK_NONE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"threshold": "BLOCK_NONE"
},
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"threshold": "BLOCK_NONE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"threshold": "BLOCK_NONE"
},
]
model = genai.GenerativeModel(model_name="gemini-1.5-pro",
generation_config=generation_config,
safety_settings=safety_settings)
chat = model.start_chat(history=[])
@bot.event
async def on_ready():
print(f"「{bot.user}」已登入")
@bot.event
async def on_message(message):
if message.author == bot.user:
return
if message.content.startswith("!") or message.content.startswith("!"):
response = "ERROR"
response = chat.send_message(message.content[1:])
await message.channel.send(response.text)
bot.run("bot_token")
```
### 圖片判斷
如果想要更進一步加上圖片判斷的功能
需要先按照前面[IDE教學](https://hackmd.io/@AndrewCho365/S1yXoFC8C)安裝**pillow**套件
接著輸入以下程式碼⬇️
```py=
import discord
import google.generativeai as genai
import PIL.Image
bot = discord.Bot(intents=discord.Intents.all())
api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
message = "message"
genai.configure(api_key=api_key)
generation_config = {
"temperature": 0.9,
"top_p": 1,
"top_k": 1,
"max_output_tokens": 2048,
}
safety_settings = [
{
"category": "HARM_CATEGORY_HARASSMENT",
"threshold": "BLOCK_NONE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"threshold": "BLOCK_NONE"
},
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"threshold": "BLOCK_NONE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"threshold": "BLOCK_NONE"
},
]
model = genai.GenerativeModel(model_name="gemini-1.5-pro",
generation_config=generation_config,
safety_settings=safety_settings)
chat = model.start_chat(history=[])
@bot.event
async def on_ready():
print(f"「{bot.user}」已登入")
@bot.event
async def on_message(message):
if message.author == bot.user:
return
if message.content.startswith("!") or message.content.startswith("!"):
response = "ERROR"
img = None
for attachment in message.attachments:
try:
img = PIL.Image.open(requests.get(attachment.url, stream=True).raw)
except Exception as e:
print(f"Error processing image: {e}")
await message.channel.send("I couldn't understand that image.")
if img is not None:
response = model.generate_content([f"{message.content[1:]}(盡量使用繁體中文輸出)", img])
else:
response = chat.send_message(message.content[1:])
await message.channel.send(response.text)
bot.run("bot_token")
```
接著就可以在輸入文字時附上圖片,送出後AI就會回答圖片的內容
### 對話設定
如果你想要設定機器人回答的語言、風格或其他規定時
你可以在啟動時設定
例如使用以下程式碼⬇️
```PY=
@bot.event
async def on_ready():
activity = discord.Activity(
type=discord.ActivityType.playing,
name="/help"
)
await bot.change_presence(activity=activity)
print(f"「{bot.user}」已登入\n")
update_channel_name_time.start()
print("update_channel_name_time 已啟動")
response = chat.send_message("你是一台Discord AI機器人,你有一些設定,請勿違反規定"
"如果沒有特殊要求,請使用繁體中文作為輸出文字"
"如果有人問你是誰,以完整的句子告訴他你的名字叫'XXX',並加上一些自我介紹。"
"盡量適當的用表情符號表達情緒"
"確認此設定後只需要輸出'設定完畢'。"
"以上加上引號的文字輸出前後不可以加入任何文字。")
print(response.text)
```