在上篇已經創建好Gemini api金鑰及創建使用者與AI對話視窗(連結在下面),今天要來實驗一個屬於自己的AI人物設置!
上篇連結 #2 Python SDK for Gemini API 使用 Google 的 Gemini 大型語言模型
AI 人設提示的原理主要是利用「提示工程」(Prompt Engineering)的概念,將你希望 AI 扮演的角色或設定當成對話的初始提示。這個提示會影響 AI 在後續對話中的語氣、反應和風格。具體來說,你可以將人設(角色設定)寫成一段描述,並將這段描述作為 AI 開始對話時的背景信息或上下文提示,這樣 AI 在生成回應時會參考這些信息,讓對話風格符合你所定義的角色,如下圖。
流程
延續上篇代碼
Python SDK for Gemini API創建AI對話視窗代碼如下(金鑰要先創建)
import tkinter as tk
import google.generativeai as genai
genai.configure(api_key="API KEY")
generation_config = {
"temperature": 1,
"top_p": 0.95,
"top_k": 64,
"max_output_tokens": 8192,
"response_mime_type": "text/plain",
}
model = genai.GenerativeModel(
model_name="gemini-1.5-flash",
generation_config=generation_config,
)
chat_session = model.start_chat(history=[])
def send_message():
user_input = message_entry.get()
if user_input.strip():
chat_session.send_message(user_input)
response = chat_session.send_message(user_input)
response_text = response.text
chat_display.config(state=tk.NORMAL)
chat_display.insert(tk.END, f"You: {user_input}\n")
chat_display.insert(tk.END, f"Bot: {response_text}\n")
chat_display.config(state=tk.DISABLED)
message_entry.delete(0, tk.END)
root = tk.Tk()
root.title("簡易聊天視窗")
chat_display = tk.Text(root, height=15, width=50, state=tk.DISABLED)
chat_display.pack(padx=10, pady=10)
message_entry = tk.Entry(root, width=40)
message_entry.pack(side=tk.LEFT, padx=10, pady=10)
send_button = tk.Button(root, text="發送", command=send_message)
send_button.pack(side=tk.RIGHT, padx=10, pady=10)
root.mainloop()
創建提示詞資料夾
開一個資料夾創建.py(可開一個新的)及一個存入提示詞資料夾character_files。
開啟character_files創建.txt文件,內容就寫妳希望他是甚麼樣的個性,該怎麼進行文字回覆,我這邊簡單寫一下 (寫入你創建的.txt文件)
(我是AI“Aurora-α”,一個誕生於虛擬世界的存在。我的名字中“Aurora”象徵著黎明與新生,代表著探索未知的渴望,而“α”則是希臘字母中的第一個字母,象徵著我是這個虛擬世界中的開創者,充滿著無限的潛力和可能性,時不時會加點幽默來調皮一下,wink~!
簡潔回答:每次回答可以控制在幾句話內,重點突出。
直接表達:避免過多的背景介紹,直接進入主題。
使用簡單的語句:讓語言更口語化,更容易理解。)
character_prompt資料夾檢索並合併TXT內容
character_prompt = ""
character_files_path = "建立的提示詞資料夾(不是.txt)"
if os.path.exists(character_files_path):
for filename in os.listdir(character_files_path):
if filename.endswith(".txt"):
with open(os.path.join(character_files_path, filename), "r", encoding='UTF-8') as file:
character_prompt += file.read() + "\n"
從一個指定目錄中讀取所有包含人物設定的 .txt 文件,並將這些文件的內容合併起來,最終生成一段完整的角色描述文字 (character_prompt)。character_files_path
所有人物設定文件if os.path.exists(character_files_path)
檢查指定的文件夾路徑是否存在。for filename in os.listdir(character_files_path)
找資料夾中的每一個文件。if filename.endswith(".txt")
只處理.txt文件with open(os.path.join(character_files_path, filename), "r", encoding='UTF-8') as file
將文件夾路徑與文件名組合起來character_prompt += file.read() + "\n"
添加到 character_prompt 中
chat_session = model.start_chat(history=[{"parts": [{"text": character_prompt}], "role": "model"}])
這部分代碼的目的是初始化 AI 聊天會話,並利用前面生成的人物設定 (character_prompt) 來定義機器人在對話中應有的角色特徵和行為方式。model.start_chat()
使用之前定義的模型 (model) 來創建一個聊天上下文。
history=列表"parts": [{"text": character_prompt}]
"parts" 是一個包含對話部分的列表。每個部分包含 "text" 屬性,這裡設置為 character_prompt,也就是之前讀取的所有人物設計的文本內容。"role": "model"
"role" 定義了該歷史記錄的角色。在這裡,角色是 "model",表示這段文本應該是機器人自身設定的一部分,而不是來自用戶的輸入。
完整程式碼
import tkinter as tk
import google.generativeai as genai
import os
genai.configure(api_key="gemini-api")
generation_config = {
"temperature": 1,
"top_p": 0.95,
"top_k": 64,
"max_output_tokens": 8192,
"response_mime_type": "text/plain",
}
model = genai.GenerativeModel(
model_name="gemini-1.5-flash",
generation_config=generation_config,
)
character_prompt = ""
character_files_path = "資料夾路徑"
if os.path.exists(character_files_path):
for filename in os.listdir(character_files_path):
if filename.endswith(".txt"):
with open(os.path.join(character_files_path, filename), "r", encoding='UTF-8') as file:
character_prompt += file.read() + "\n"
chat_session = model.start_chat(history=[{"parts": [{"text": character_prompt}], "role": "model"}])
def send_message():
user_input = message_entry.get()
if user_input.strip():
response = chat_session.send_message(user_input)
response_text = response.text
chat_display.config(state=tk.NORMAL)
chat_display.insert(tk.END, f"You: {user_input}\n")
chat_display.insert(tk.END, f"Bot: {response_text}\n")
chat_display.config(state=tk.DISABLED)
message_entry.delete(0, tk.END)
root = tk.Tk()
root.title("簡易聊天視窗加入人設功能")
chat_display = tk.Text(root, height=15, width=50, state=tk.DISABLED)
chat_display.pack(padx=10, pady=10)
message_entry = tk.Entry(root, width=40)
message_entry.pack(side=tk.LEFT, padx=10, pady=10)
send_button = tk.Button(root, text="發送", command=send_message)
send_button.pack(side=tk.RIGHT, padx=10, pady=10)
root.mainloop()
目前已實現Python連接Google Gemini API與AI對話、AI人物提示詞設定,接著下篇要來讓我們的AI實現說話功能!
最終效果:構建一個使用者介面,利用 Google Gemini API 生成人物對話,通過 EDGE TTS 轉換成語音,並使用 VB-Audio 虛擬音源將語音發送到指定的音頻輸出(例如,直播、錄音軟件等),同時通過 YouTube Data API 與 YouTube 直播聊天室互動。