今天就要來製作 RAG + LLM 查詢與意圖綜合處理的實作啦!
# chatbot_intents_query_integration.py
import chromadb
from openai import AzureOpenAI
from openai_config import *
from chatbot_intents_function import provide_info, get_embedding
# 初始化 ChromaDB 客戶端
chroma_client = chromadb.PersistentClient(path="./data/cut")
intents_collection = chroma_client.get_collection(name="taipei_tourist_intents")
tourism_collection = chroma_client.get_collection(name="taipei_tourism")
# 初始化 Azure OpenAI 客戶端
client = AzureOpenAI(
azure_endpoint=azure_endpoint, api_key=api_key, api_version=api_version
)
# 意圖識別函數
def detect_intent(user_input):
user_input_embedding = get_embedding(user_input)
result = intents_collection.query(
query_embeddings=[user_input_embedding], n_results=1
)
if not result["documents"]:
return None, "未能識別意圖。"
# 返回的字符串
intents = result["documents"][0][0]
action = result["metadatas"][0][0]["function"]
return intents, action
# 主處理函數
def process_user_input(user_input):
intents, action = detect_intent(user_input)
if not intents:
return action # 返回錯誤信息
# 提供景點信息
if action == "provide_info":
response = provide_info(user_input, tourism_collection)
return response
return "請輸入其他詳細資訊"
# 持續對話
def main_loop():
print("歡迎使用台北旅遊 AI 助手!輸入'退出'來結束對話")
while True:
user_input = input("你:")
if user_input.lower() == "退出":
print("感謝您的使用,掰掰!")
break
response = process_user_input(user_input)
print("AI:",response)
# 啟動聊天機器人
if __name__ == "__main__":
main_loop()
初始化和配置
ChromaDB 客戶端初始化:這裡初始化了 ChromaDB 的客戶端,並設置了數據存儲路徑到 "./data/cut"。它還獲取了兩個數據集合:一個是用來識別用戶意圖的 taipei_tourist_intents 集合,另一個是用於存儲和查詢台北旅遊景點信息的 taipei_tourism 集合。
Azure OpenAI 客戶端初始化:這部分代碼使用從 openai_config 模塊導入的配置(如 API 端點、密鑰等)初始化了 Azure OpenAI 客戶端。這個客戶端主要用來生成文本嵌入向量,幫助在 ChromaDB 中進行更精確的查詢。
功能函數
意圖識別函數 (detect_intent):這個函數接受用戶輸入,通過 Azure OpenAI 客戶端生成嵌入向量,然後在 intents_collection 集合中查詢相應的意圖。如果查詢到相應文檔,它將返回意圖和相對應的動作;如果沒有查到,則返回錯誤信息 "未能識別意圖"。
主處理函數 (process_user_input):此函數根據 detect_intent 函數的結果來處理用戶輸入。如果識別到意圖,它將基於返回的動作名稱調用相應的功能(如 provide_info),這些功能通常在另一個文件 chatbot_intents_function.py 中定義。如果沒有識別到意圖,將提示用戶輸入更多詳細信息。
持續對話
啟動聊天機器人