設定意圖檔案:intents.txt
[
{
"intents": "景點介紹, 景點交通, 景點地址, 景點營業時間",
"action": {"function": "provide_info", "parameters": "景點名稱", "confirm": "false"}
}
]
# 初始化 Azure OpenAI 客戶端
client = AzureOpenAI(
azure_endpoint=azure_endpoint,
api_key=api_key,
api_version=api_version
)
# 意圖內容
with open("./intents.txt","r",encoding='utf-8') as f:
data = json.load(f)
intents_list = []
action_list = []
# 提取內容
for item in data:
intents = item['intents']
action = item['action']
intents_list.append(intents)
action_list.append(action)
# 使用 jieba 分詞
for i in range(len(intents_list)):
intents_list[i] = " ".join([w for w in list(jb.cut(intents_list[i]))])
# 生成唯一 ID 和向量
ids = [str(uuid.uuid1()) for _ in intents_list]
embeddings = []
for i in range(len(intents_list)):
response = client.embeddings.create(
input=intents_list[i],
model=embedding_model_name
)
embedding = response.data[0].embedding
embeddings.append(embedding)
# 初始化 ChromaDB 客戶端
chroma_client = chromadb.PersistentClient(path="./data/cut")
# 建立或取得 collection
collection_name = "taipei_tourist_intents"
collection = chroma_client.get_or_create_collection(name=collection_name)
# 將意圖、向量和行動資料存入 ChromaDB
collection.add(
embeddings=embeddings,
documents=intents_list,
metadatas=action_list,
ids=ids
)
print("台北旅遊意圖資料已生成並存入 ChromaDB!")
intents.txt
包含各種使用者意圖,意圖包含訓練模型的意圖識別和實體識別。intents
(表示使用者可能會說的指令或問題)和對應的 action
(表示應該觸發的動作和參數)。jieba
對意圖進行中文分詞,分割成單獨的詞,更好生成語意嵌入AzureOpenAI
來生成這些意圖的語義嵌入,嵌入是將文本轉換為向量,用於後續的相似度計算。ChromaDB
來存儲這些語義嵌入。每個意圖都有一個唯一的 ID (uuid
),並將 intents_list
(文本)和對應的 action
一起存儲在 chroma_client
中。PersistentClient
用於持久存儲這些資料,從而讓系統可以在之後檢索。