昨天我成功完成了將龐大的「巨石應用」節點拆分為三個職責分明的 AI 任務鏈,讓系統的整體架構變得更加模組化也更容易維護。
今天的目標是在這個基礎上,進一步將系統的智慧化程度往「精準」的方向推進。
在先前的版本中,系統有時會將資料庫中所有的成員都標記為參與者,這會導致任務指派的資訊過於泛濫,不夠精準。因此,我決定在「獲取參與者」節點中徹底移除這種策略。新的邏輯將嚴格遵守 AI 的判斷結果:
為了實現精準配對,我強化了 matchParticipantsToNotionIds
這個函式,它會接收 AI 辨識出的參與者姓名陣列,然後遍歷這個陣列,為每個名字在我們的成員資料庫中尋找對應的 Notion User ID。
這個函式支援了正名和暱稱兩種配對方式,大幅提高了配對的成功率與準確性。
// 將參與者姓名對應到 Notion User ID
function matchParticipantsToNotionIds(participants, memberData) {
const participantIds = [];
participants.forEach(participantName => {
// 尋找配對的成員,支援正名和暱稱比對
const matchedMember = memberData.find(member => {
// 條件為成員姓名須完全相符或參與者名稱出現在該成員的暱稱清單中
return member.name === participantName || (member.nicknames && member.nicknames.includes(participantName));
});
// 如果找到配對成員且該成員有 Notion ID,就加入清單
if (matchedMember && matchedMember.notion_user_id) {
participantIds.push(matchedMember.notion_user_id);
}
});
return participantIds;
}
在昨天的架構中,期限解析是在最後的步驟中進行的,這表示它只能提取一個最晚的期限。為了實現讓每個任務都有自己獨立的截止日期,我對「提取結構化任務」節點的邏輯進行了升級。
在 AI 透過 extractStructuredTasks
函式回傳結構化的任務清單(tasks
陣列)後,我不再直接將它傳遞給下一步,而是先用一個迴圈來遍歷這個陣列。
在迴圈裡會為每一個任務單獨調用日期解析的功能,簡單來說就是為每個任務都指派一位「時間解析專家」,它會專注於該任務的 time_expression
(原始時間描述),並且將其轉換為標準的 YYYY-MM-DD
格式。
當日期解析完成後再將解析出的標準化日期,作為一個新的屬性,像是 deadline_date
,新增回該任務的物件中。這樣一來每個任務物件都同時擁有了 original_time_expression
和 deadline_date
這兩個欄位,讓資料結構變得更加完整。
完成以上的兩大強化後,我將配對好的參與者 Notion ID 陣列,以及處理完獨立期限的任務清單,送入後續的流程裡。
我使用了之前準備的音訊檔案進行進行測試,結果驗證了
✅ 完成項目
如果說昨天的架構重構是「搭骨架」,那麼今天的進度就是對這個骨架進行「精雕細琢」。😁
透過參與者的精準配對,我解決了過去任務指派可能不夠準確的問題;而透過獨立的期限解析,我讓系統的時間管理能力從「單一期限」進化到了「多重期限」,這對於真實際會發生的情況來說,是一個非常大的進步。
每一步的最佳化都讓這個 AI 會議助理變得更加可靠與實用。看著系統從一個模糊的雛形,逐漸變得清晰、精準,這種感覺真的很有成就感。
🎯 明天計劃
將 AI 任務鏈與所有 Code 節點進行測試,並建立包含多種場景的測試案例,對系統進行全面驗證與微調,目標是讓摘要、參與者、任務、指派、期限等項目的準確率達到 90% 以上!