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
JavaScript
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
};