昨天已把意圖資料庫設定好,今天我們要來查詢意圖資料庫。
# 初始化 Azure OpenAI 客戶端
client = AzureOpenAI(
azure_endpoint=azure_endpoint,
api_key=api_key,
api_version=api_version
)
# 初始化 ChromaDB 客戶端
chroma_client = chromadb.PersistentClient(path="./data/cut")
# 取得 collection
collection_name = "taipei_tourist_intents"
collection = chroma_client.get_collection(name=collection_name)
# 測試意圖查詢
def query_intent(user_input):
# 使用 jieba 分詞
user_input_cut = " ".join([w for w in list(jb.cut(user_input))])
# 生成用戶輸入的向量
response = client.embeddings.create(
input=user_input_cut,
model=embedding_model_name
)
embedding = response.data[0].embedding
# 查詢最相似的意圖
results = collection.query(
query_embeddings=[embedding],
n_results=1,
include=['distances']
)
# 提取距離
distance = results['distances'][0][0] # 提取第一個匹配的距離
print(f"相似度距離: {distance}")
# 設置相似度閾值
distance_threshold = 0.8 # 可根據實驗調整此值
if distance < distance_threshold:
matched_intent = results['documents'][0]
action = results['metadatas'][0]
print(f"匹配到的意圖: {matched_intent}")
print(f"對應的行動: {action}")
else:
print("無法匹配到相關意圖,請重新輸入。")
# 測試輸入
user_input = input("我:")
query_intent
函數:
以下就是執行查詢的程式結果:
若輸入"我想了解景點介紹",匹配結果正確,就會顯示意圖。
若輸入"今天天氣",無匹配的結果正確,就會顯示沒有意圖