UNPKG

cw-ai-backlog

Version:

AI-powered tool to generate backlog items from meeting documents and output to Google Sheets

124 lines (105 loc) 4.4 kB
const { OpenAI } = require('openai'); /** * 使用 OpenAI API 生成 backlog 項目 * @param {string} content 會議內容 * @param {Object} config 配置物件 * @returns {Array} backlog 項目陣列 */ async function generateBacklog(content, config) { const openai = new OpenAI({ apiKey: config.apiKey }); const prompt = createPrompt(content, config.keepPhrases, config.customPrompt); try { const response = await openai.chat.completions.create({ model: config.model, messages: [ { role: 'system', content: getSystemPrompt() }, { role: 'user', content: prompt } ], max_tokens: config.maxTokens, temperature: config.temperature, response_format: { type: "json_object" } }); const result = JSON.parse(response.choices[0].message.content); return result.backlog_items || []; } catch (error) { throw new Error(`OpenAI API 調用失敗: ${error.message}`); } } /** * 建立系統提示詞 * @returns {string} 系統提示詞 */ function getSystemPrompt() { return `你是一位專業的軟體專案管理分析師。你的任務是根據會議內容分析並產出需要建立的 Backlog 項目。 請遵循以下原則: 1. 如果一個功能需要前端和後端共同實作,請分成兩張 backlog 2. 每張 backlog 必須包含:title、type、description、acceptance_criteria、effort、effort_analysis、source_text、ai_suggestions 3. effort 請使用費波那契數列 (1, 2, 3, 5, 8, 13, 21, 34, 55, 89) 來評估 4. type 應為 "frontend""backend",若功能涉及全端開發,請開兩張 backlog 5. description 必須包含詳細的功能描述,若會議內容中有 v0 連結,必須在 description 中包含這些 v0 連結 6. acceptance_criteria 需明確定義驗收的條件,定義這個backlog是否完成的標準,若有v0連結,則驗收條件應包含符合v0設計的要求 7. effort_analysis 要說明為什麼給這個 effort 值 8. source_text 必須包含生成此 backlog 的相關原文摘要片段(約 50-150 字),只能包含純文字描述,絕對不可以包含任何 v0 連結或網址 9. ai_suggestions 要分析這個 backlog 是否有疑慮或需要補充考慮的部分,如果沒有就給空字串 請以 JSON 格式回應,結構如下: { "backlog_items": [ { "title": "功能標題", "type": "frontend|backend", "description": "詳細描述要做什麼,若會議內容中有 v0 連結,必須在此欄位中包含相關的 v0 連結", "acceptance_criteria": [ "驗收條件1", "驗收條件2" ], "effort": 5, "effort_analysis": "解釋為什麼是這個工作量", "source_text": "來自原文的純文字摘要片段,約50-150字,絕對不可包含任何v0連結或網址,只能是文字描述", "ai_suggestions": "分析此backlog是否有疑慮或建議補充考慮的部分,如果沒有就給空字串" } ] }`; } /** * 建立使用者提示詞 * @param {string} content 會議內容 * @param {Array} keepPhrases 保留字 * @param {Array} customPrompt 自訂提示指令 * @returns {string} 使用者提示詞 */ function createPrompt(content, keepPhrases, customPrompt) { let prompt = `請根據以下會議內容,分析並產出需要建立的 Backlog 項目: 會議內容: ${content} `; if (customPrompt && customPrompt.length > 0) { prompt += `🎯 特別指示: ${customPrompt.map(instruction => `- ${instruction}`).join('\n')} `; } if (keepPhrases && keepPhrases.length > 0) { prompt += `🔍 特別注意以下關鍵詞,在分析時請特別關注: ${keepPhrases.map(phrase => `- ${phrase}`).join('\n')} `; } prompt += `請確保: 1. 每個功能如果涉及前後端,請分開建立 2. 提供清楚的驗收條件 3. 給出合理的工作量評估 4. description 欄位必須包含所有相關的 v0 連結(如果會議內容中有的話) 5. source_text 欄位只能包含純文字摘要(50-150字),絕對不可以包含任何 v0 連結、網址或超連結 6. 分析每個 backlog 是否有疑慮或建議補充考慮的部分 (ai_suggestions),如果沒有就給空字串 7. 只回應 JSON 格式,不要包含其他說明文字`; return prompt; } module.exports = { generateBacklog };