昨天我們完成了智慧日期解析功能,讓 AI 能自動辨認會議中的時間表達並標準化處理,接下來會議記錄中經常出現「小明負責處理這個功能」、「請阿志下週二提交報告」這類的任務指派。
今天的目標是建立一個「成員知識庫」,讓 AI 知道我們團隊有哪些成員,並在分析會議紀錄時,能從中辨識出參與者與被指派任務的對象。
我們需要先在「會議記錄」和「GIGI 工作室」中進行一些準備
進入您的「會議記錄」資料庫,新增以下兩個「人員 (Person)」屬性的欄位:
人員 (Person)
人員 (Person)
在「GIGI 工作室」裡建立資料庫,並將資料庫標題命名為「人員資料庫」
我們需要建立以下欄位來支援完整的參與者識別功能:
欄位名稱 | 屬性類型 | 設定說明 | 用途說明 |
---|---|---|---|
姓名 | 標題 |
預設欄位,不需修改 | 正式姓名,作為主要辨認依據 |
暱稱 | 文字 |
單行文字 | 會議中常用的暱稱,用頓號分隔多個暱稱 |
職位 | 文字 |
單行文字 | 職位稱呼,例如「PM」、「技術主管」 |
部門 | 選取 |
單選選項 | 所屬部門 |
Notion 成員 | 人員 |
單人選擇 | 連結到實際的 Notion 工作區成員帳號 |
電子郵件 | 電子郵件 |
標準電子郵件格式 | 聯絡用電子郵件 |
狀態 | 選取 |
單選選項 | 建立「啟用」、「停用」兩個選項 |
建立一些人員資料來做測試
這樣我們就完成人員資料庫的建立了!
資料庫準備好後,在「格式化專案列表」節點後,新增 2 個處理成員資訊的節點。
在「載入成員列表」節點後新增一個 Code 節點,將載入的原始資料,整理成 AI 更容易理解的格式。
// 從人員資料庫載入完整的成員資訊
const membersData = $input.all();
// 支援多種分隔符號的函式
function splitByMultipleDelimiters(text) {
if (!text) return [];
// 支援頓號、逗號、分號等多種分隔符號
return text.split(/[、,;,]/).map(item => item.trim()).filter(item => item);
}
// 建立成員資訊陣列
const memberList = membersData.map(member => {
const memberData = member.json;
// 處理姓名
const name = memberData.properties?.姓名?.title?.[^0]?.plain_text || '未知姓名';
// 處理電子郵件
const email = memberData.properties?.電子郵件?.email || '';
// 處理暱稱(支援多種分隔符號)
const nicknameText = memberData.properties?.暱稱?.rich_text?.[^0]?.plain_text || '';
const nicknames = splitByMultipleDelimiters(nicknameText);
// 處理職位(支援多種分隔符號)
const positionText = memberData.properties?.職位?.rich_text?.[^0]?.plain_text || '';
const positions = splitByMultipleDelimiters(positionText);
// 處理部門
const department = memberData.properties?.部門?.select?.name || '';
// 處理 Notion 成員連結
const notionUserField = memberData.properties?.['Notion 成員']?.people?.[^0];
// 只有當 Notion 成員連結存在時,才將此成員加入清單
if (!notionUserField || !notionUserField.id) {
return null; // 回傳 null
}
const notionUserId = notionUserField.id;
// 處理狀態
const status = memberData.properties?.狀態?.select?.name || '啟用';
// 建立完整的關鍵字清單
const allKeywords = [
name, // 正式姓名
...nicknames, // 所有暱稱
...positions, // 所有職位
department, // 部門
email ? email.split('@')[^0] : '' // 電子郵件帳號部分
].filter(k => k && k.trim() !== '');
return {
id: memberData.id,
name: name,
nicknames: nicknames,
positions: positions,
department: department,
email: email,
notion_user_id: notionUserId, // 實際要用來填入 Person 欄位的 ID
status: status,
keywords: [...new Set(allKeywords)] // 關鍵字陣列
};
}).filter(member => member !== null && member.status === '啟用' && member.name !== '未知姓名'); // 過濾掉無效成員
// 建立給 AI 用的成員清單字串(包含所有可能的稱呼)
const memberListString = memberList.map(member => {
let memberInfo = `${member.name}`;
// 加入暱稱
if (member.nicknames.length > 0) {
memberInfo += ` (別名: ${member.nicknames.join('、')})`;
}
// 加入職位
if (member.positions.length > 0) {
memberInfo += ` [職位: ${member.positions.join('、')}]`;
}
// 加入部門
if (member.department) {
memberInfo += ` {${member.department}}`;
}
// 加入電子郵件
if (member.email) {
memberInfo += ` [${member.email}]`;
}
return memberInfo;
}).join('\n');
return [{
json: {
member_list: memberListString,
member_data: memberList,
total_members: memberList.length
}
}];
在「AI 摘要與任務提取」節點後新增一個 Code 節點,專門用來處理 AI 回傳的成員名稱,並轉換為 Notion API 需要的 ID 格式。
// 從「AI 摘要與任務提取」拿處理結果
const aiResult = $input.first().json;
const meetingInfo = aiResult.meeting_info;
// 加入保護檢查,確保欄位存在且為陣列
const participantIds = meetingInfo.participant_ids || [];
const assignedMemberIds = meetingInfo.assigned_member_ids || [];
// 直接使用 ID 字串陣列,不包裝成物件
const participantPersons = participantIds;
const assignedPersons = assignedMemberIds;
// 回傳結果
return [{
json: {
...aiResult,
meeting_info: {
...meetingInfo,
participant_persons: participantPersons,
assigned_persons: assignedPersons
}
}
}];
現在要在兩個「寫入會議紀錄」節點中新增人員相關欄位。
Properties
區域新增以下欄位:
{{ $('使用者 ID 處理').first().json.meeting_info.participant_persons }}
{{ $('使用者 ID 處理').first().json.meeting_info.assigned_persons }}
{{ $('使用者 ID 處理').first().json.meeting_info.participant_persons }}
{{ $('使用者 ID 處理').first().json.meeting_info.assigned_persons }}
建立包含參與者和任務指派資訊的測試內容。
請分析會議內容,特別注意參與者和任務指派
檢查 Notion「會議記錄」資料庫中的結果
✅ 完成項目
❌ 尚待改善
今天的開發我們成功地搭建了成員辨識的骨架,雖然沒有達到完美的結果,甚至在摘要、任務提取的品質上有所倒退,但這個成功的原型為我們指明了接下來強化的方向。挫折感還是有的,但看到成員頭貼出現在會議記錄欄位的那一刻,還是相當振奮人心的!
🎯 明天計劃
為摘要、任務提取、成員辨識等各設計專用的Prompt,強化指派邏輯精準度,修正分析品質偏差。