iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
自我挑戰組

從零打造客製化 AI 聊天機器人系列 第 22

[從零打造客製化 AI 聊天機器人]RAG + LLM 查詢與意圖綜合處理 實作

  • 分享至 

  • xImage
  •  

今天就要來製作 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 中定義。如果沒有識別到意圖,將提示用戶輸入更多詳細信息。

持續對話

  • 持續對話函數 (main_loop):這是一個無限循環,持續接收用戶輸入並處理。當用戶輸入 "退出" 時,程序將終止循環,並結束對話。這讓用戶可以持續與 AI 助手互動,直到他們選擇結束對話。

啟動聊天機器人

  • 啟動條件:這部分確保只有當直接運行這個 Python 文件時,main_loop 函數才會被調用,這樣可以避免在導入此文件時意外運行對話循環。

https://ithelp.ithome.com.tw/upload/images/20241008/20169415fbnKOz0Ozz.png


上一篇
[從零打造客製化 AI 聊天機器人] RAG + LLM 查詢與意圖綜合處理
下一篇
[從零打造客製化 AI 聊天機器人] 初步學習,WebSocket
系列文
從零打造客製化 AI 聊天機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言