Files
hr-position-system/docs/prompt.md
DonaldFang 方士碩 a6af297623 backup: 完成 HR_position_ 表格前綴重命名與欄位對照表整理
變更內容:
- 所有資料表加上 HR_position_ 前綴
- 整理完整欄位顯示名稱與 ID 對照表
- 模組化 JS 檔案 (admin.js, ai.js, csv.js 等)
- 專案結構優化 (docs/, scripts/, tests/ 等)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 12:05:20 +08:00

759 lines
25 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# HR 崗位管理系統 - AI 生成功能 Prompt 說明文件
> **文件版本**: v1.0
> **最後更新**: 2024-12-04
> **維護者**: AI所以有問題真的不要問我
---
## 📋 目錄
1. [總覽](#總覽)
2. [頁籤 1: 崗位基礎資料維護](#頁籤-1-崗位基礎資料維護)
3. [頁籤 2: 崗位招聘要求](#頁籤-2-崗位招聘要求)
4. [頁籤 3: 職務基礎資料](#頁籤-3-職務基礎資料)
5. [頁籤 4: 部門職責維護](#頁籤-4-部門職責維護)
6. [頁籤 5: 崗位描述 (JD)](#頁籤-5-崗位描述-jd)
7. [如何修改 Prompt](#如何修改-prompt)
8. [Prompt 設計原則](#prompt-設計原則)
---
## 總覽
系統中共有 **5 個頁籤**提供 AI 自動生成功能,每個頁籤都有一個 "✨ I'm feeling lucky" 按鈕。
### 🎯 核心運作原理
1. **智能空白檢測**: 系統會檢測哪些欄位是空白的
2. **上下文感知**: 將已填寫的欄位作為上下文傳給 LLM
3. **精準生成**: 只生成尚未填寫的欄位
4. **JSON 格式回傳**: 要求 LLM 返回結構化的 JSON 資料
5. **自動填充**: 解析 JSON 並填入對應欄位
### 🔗 對應函式與程式碼位置
| 頁籤名稱 | 函式名稱 | 程式碼位置 | 按鈕 ID/onclick |
|---------|---------|-----------|----------------|
| 崗位基礎資料維護 | `generatePositionBasic()` | [index.html:2179](index.html#L2179) | `onclick="generatePositionBasic()"` |
| 崗位招聘要求 | `generatePositionRecruit()` | [index.html:2253](index.html#L2253) | `onclick="generatePositionRecruit()"` |
| 職務基礎資料 | `generateJobBasic()` | [index.html:2330](index.html#L2330) | `onclick="generateJobBasic()"` |
| 部門職責維護 | `generateDeptFunction()` | [index.html:3778](index.html#L3778) | `onclick="generateDeptFunction()"` |
| 崗位描述 (JD) | `generateJobDesc()` | [index.html:2425](index.html#L2425) | `onclick="generateJobDesc()"` |
---
## 頁籤 1: 崗位基礎資料維護
### 📍 函式位置
- **檔案**: `index.html`
- **行數**: 2179-2251
- **函式**: `async function generatePositionBasic()`
### 📝 完整 Prompt
```
請為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。
[如果有已填寫的資料,會附加此段]
已填寫的資料(請參考這些內容來生成相關的資料):
{JSON格式的已填寫資料}
請「只生成」以下這些尚未填寫的欄位:[動態欄位列表]
欄位說明:
- positionCode: 崗位編號(格式如 ENG-001, MGR-002, SAL-003
- positionName: 崗位名稱
- positionCategory: 崗位類別代碼01=技術職, 02=管理職, 03=業務職, 04=行政職)
- positionNature: 崗位性質代碼FT=全職, PT=兼職, CT=約聘, IN=實習)
- headcount: 編制人數1-10之間的數字字串
- positionLevel: 崗位級別L1到L7
- positionDesc: 崗位描述2-3句話描述工作內容
- positionRemark: 崗位備注(可選的補充說明)
請直接返回JSON格式只包含需要生成的欄位不要有任何其他文字
{
"positionCode": "...",
"positionName": "...",
...
}
```
### 🎯 Prompt 設計依據
1. **上下文感知**: 如果使用者已填寫部分欄位,這些資料會被傳入作為參考
2. **精準指令**: 明確告知只生成「尚未填寫」的欄位,避免覆蓋已有資料
3. **格式規範**: 提供詳細的欄位格式說明和代碼對照表
4. **結構化輸出**: 要求返回純 JSON方便程式解析
### 📦 處理的欄位
```javascript
const allFields = [
'positionCode', // 崗位編號
'positionName', // 崗位名稱
'positionCategory', // 崗位類別代碼
'positionNature', // 崗位性質代碼
'headcount', // 編制人數
'positionLevel', // 崗位級別
'positionDesc', // 崗位描述
'positionRemark' // 崗位備注
];
```
### 🔧 如何修改此 Prompt
在 [index.html:2205-2223](index.html#L2205) 找到以下程式碼:
```javascript
const prompt = `請為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。
${contextInfo}
請「只生成」以下這些尚未填寫的欄位:${emptyFields.join(', ')}
欄位說明:
- positionCode: 崗位編號(格式如 ENG-001, MGR-002, SAL-003
...
`;
```
**修改建議**:
- 如果要改變生成風格:修改第一句的指令(例如:「請以專業正式的語氣生成...」)
- 如果要新增欄位規則:在「欄位說明」中添加新的規範
- 如果要調整格式:修改格式範例(如改變編號規則)
---
## 頁籤 2: 崗位招聘要求
### 📍 函式位置
- **檔案**: `index.html`
- **行數**: 2253-2328
- **函式**: `async function generatePositionRecruit()`
### 📝 完整 Prompt
```
請為HR崗位管理系統生成「{崗位名稱}」的招聘要求資料。請用繁體中文回覆。
已填寫的資料(請參考這些內容來生成相關的資料):
{JSON格式的已填寫資料包含 positionName}
請「只生成」以下這些尚未填寫的欄位:[動態欄位列表]
欄位說明:
- minEducation: 最低學歷代碼HS=高中職, JC=專科, BA=大學, MA=碩士, PHD=博士)
- requiredGender: 要求性別(空字串=不限, M=男, F=女)
- salaryRange: 薪酬范圍代碼A=30000以下, B=30000-50000, C=50000-80000, D=80000-120000, E=120000以上, N=面議)
- workExperience: 工作經驗年數0=不限, 1, 3, 5, 10
- minAge: 最小年齡18-30之間的數字字串
- maxAge: 最大年齡35-55之間的數字字串
- jobType: 工作性質代碼FT=全職, PT=兼職, CT=約聘, DP=派遣)
- recruitPosition: 招聘職位代碼ENG=工程師, MGR=經理, AST=助理, OP=作業員, SAL=業務)
- jobTitle: 職位名稱
- jobDesc: 職位描述2-3句話
- positionReq: 崗位要求(條列式,用換行分隔)
- skillReq: 技能要求(用逗號分隔)
- langReq: 語言要求
- otherReq: 其他要求
請直接返回JSON格式只包含需要生成的欄位
{
"minEducation": "...",
...
}
```
### 🎯 Prompt 設計依據
1. **職位名稱作為核心上下文**: 使用第一個頁籤的崗位名稱作為生成依據
2. **跨頁籤資料引用**: 會從「崗位基礎資料」頁籤讀取 `positionName`
3. **招聘專用代碼**: 提供完整的學歷、薪資、經驗等代碼對照
### 📦 處理的欄位
```javascript
const allFields = [
'minEducation', // 最低學歷
'requiredGender', // 要求性別
'salaryRange', // 薪酬范圍
'workExperience', // 工作經驗年數
'minAge', // 最小年齡
'maxAge', // 最大年齡
'jobType', // 工作性質
'recruitPosition', // 招聘職位
'jobTitle', // 職位名稱
'jobDesc', // 職位描述
'positionReq', // 崗位要求
'skillReq', // 技能要求
'langReq', // 語言要求
'otherReq' // 其他要求
];
```
### 🔧 如何修改此 Prompt
在 [index.html:2275-2301](index.html#L2275) 找到程式碼。
**修改建議**:
- **調整薪資範圍**: 修改 `salaryRange` 的代碼對照(例如增加更高薪資級別)
- **新增性別選項**: 如果需要更多性別選項,在 `requiredGender` 中添加
- **調整經驗年限**: 修改 `workExperience` 的可用選項
---
## 頁籤 3: 職務基礎資料
### 📍 函式位置
- **檔案**: `index.html`
- **行數**: 2330-2423
- **函式**: `async function generateJobBasic()`
### 📝 完整 Prompt
```
請為HR職務管理系統生成職務基礎資料。請用繁體中文回覆。
[如果有已填寫的資料,會附加此段]
已填寫的資料(請參考這些內容來生成相關的資料):
{JSON格式的已填寫資料}
請「只生成」以下這些尚未填寫的欄位:[動態欄位列表,可能包含 checkbox]
欄位說明:
- jobCategoryCode: 職務類別代碼MGR=管理職, TECH=技術職, SALE=業務職, ADMIN=行政職, RD=研發職, PROD=生產職)
- jobCode: 職務編號(格式如 MGR-001, TECH-002
- jobName: 職務名稱
- jobNameEn: 職務英文名稱
- jobHeadcount: 編制人數1-20之間的數字字串
- jobSortOrder: 排列順序10, 20, 30...的數字字串)
- jobRemark: 備注說明
- jobLevel: 職務層級(可以是 *保密* 或具體層級)
- hasAttendanceBonus: 是否有全勤true/false
- hasHousingAllowance: 是否住房補貼true/false
請直接返回JSON格式只包含需要生成的欄位
{
"jobCategoryCode": "...",
...
}
```
### 🎯 Prompt 設計依據
1. **職務 vs 崗位**: 這個頁籤處理的是「職務」Job與「崗位」Position不同
2. **Checkbox 處理**: 特殊處理 `hasAttendanceBonus``hasHousingAllowance` 兩個布林值欄位
3. **排序欄位**: `jobSortOrder` 使用 10 的倍數,方便後續插入新職務
### 📦 處理的欄位
```javascript
const allFields = [
'jobCategoryCode', // 職務類別代碼
'jobCode', // 職務編號
'jobName', // 職務名稱
'jobNameEn', // 職務英文名稱
'jobHeadcount', // 編制人數
'jobSortOrder', // 排列順序
'jobRemark', // 備注說明
'jobLevel' // 職務層級
];
// 額外處理的 checkbox
const checkboxes = [
'hasAttendanceBonus', // 是否有全勤
'hasHousingAllowance' // 是否住房補貼
];
```
### 🔧 如何修改此 Prompt
在 [index.html:2362-2382](index.html#L2362) 找到程式碼。
**修改建議**:
- **新增職務類別**: 在 `jobCategoryCode` 中添加新的類別代碼
- **調整編號格式**: 修改 `jobCode` 的格式範例
- **修改保密設定**: 調整 `jobLevel` 的說明(如不允許保密)
---
## 頁籤 4: 部門職責維護
### 📍 函式位置
- **檔案**: `index.html`
- **行數**: 3778-3839
- **函式**: `function generateDeptFunction()`
### 📝 完整 Prompt
```
請為HR部門職責管理系統生成部門職責資料。請用繁體中文回覆。
[如果有已填寫的資料,會附加此段]
已填寫的資料(請參考這些內容來生成相關的資料):
{JSON格式的已填寫資料}
請「只生成」以下這些尚未填寫的欄位:[動態欄位列表]
欄位說明:
- deptFunctionCode: 部門職責編號(格式如 DF-001, DF-002
- deptFunctionName: 部門職責名稱(例如:軟體研發部職責)
- deptFunctionBU: 事業體代碼SBU/MBU/HQBU/ITBU/HRBU/ACCBU 之一)
- deptFunctionDept: 部門名稱
- deptManager: 部門主管職稱
- deptMission: 部門使命使用「•」開頭的條列式2-3項
- deptVision: 部門願景使用「•」開頭的條列式1-2項
- deptCoreFunctions: 核心職責使用「•」開頭的條列式4-6項
- deptKPIs: 關鍵績效指標使用「•」開頭的條列式3-4項
請直接返回JSON格式只包含需要生成的欄位不要有任何其他文字
{
"deptFunctionCode": "...",
...
}
```
### 🎯 Prompt 設計依據
1. **條列式格式**: 特別要求使用 `•` 開頭的條列式,符合部門職責文件慣例
2. **數量控制**: 明確指定每個欄位的條列項目數量(例如使命 2-3 項)
3. **事業體代碼**: 提供固定的事業體代碼選項
4. **管理導向**: 專注於部門管理層面的使命、願景、職責、KPI
### 📦 處理的欄位
```javascript
const allFields = [
'deptFunctionCode', // 部門職責編號
'deptFunctionName', // 部門職責名稱
'deptFunctionBU', // 事業體代碼
'deptFunctionDept', // 部門名稱
'deptManager', // 部門主管職稱
'deptMission', // 部門使命(條列式)
'deptVision', // 部門願景(條列式)
'deptCoreFunctions', // 核心職責(條列式)
'deptKPIs' // 關鍵績效指標(條列式)
];
```
### 🔧 如何修改此 Prompt
在 [index.html:3800-3819](index.html#L3800) 找到程式碼。
**修改建議**:
- **新增事業體**: 在 `deptFunctionBU` 中添加新的事業體代碼
- **調整條列數量**: 修改各欄位的條列項目數量要求
- **改變條列符號**: 將 `•` 改為其他符號(如 `1.`, `-`, `★`
---
## 頁籤 5: 崗位描述 (JD)
### 📍 函式位置
- **檔案**: `index.html`
- **行數**: 2425-2541
- **函式**: `async function generateJobDesc()`
### 📝 完整 Prompt
```
請為HR崗位描述管理系統生成崗位描述資料。請用繁體中文回覆。
[如果有已填寫的資料,會附加此段]
已填寫的資料(請參考這些內容來生成相關的資料):
{JSON格式的已填寫資料欄位名稱已移除 jd_ 前綴}
請「只生成」以下這些尚未填寫的欄位:[動態欄位列表]
欄位說明:
- empNo: 工號(格式如 A001234
- empName: 員工姓名
- positionCode: 崗位代碼
- versionDate: 版本日期YYYY-MM-DD格式
- positionName: 崗位名稱
- department: 所屬部門
- positionEffectiveDate: 崗位生效日期YYYY-MM-DD格式
- directSupervisor: 直接領導職務
- directReports: 直接下級(格式如「工程師 x 5人」
- workLocation: 任職地點代碼HQ=總部, TPE=台北, TYC=桃園, KHH=高雄, SH=上海, SZ=深圳)
- empAttribute: 員工屬性代碼FT=正式員工, CT=約聘, PT=兼職, IN=實習, DP=派遣)
- positionPurpose: 崗位設置目的1句話說明
- mainResponsibilities: 主要崗位職責用「1、」「2、」「3、」「4、」「5、」格式每項換行用\n分隔
- education: 教育程度要求
- basicSkills: 基本技能要求
- professionalKnowledge: 專業知識要求
- workExperienceReq: 工作經驗要求
- otherRequirements: 其他要求
請直接返回JSON格式只包含需要生成的欄位
{
"empNo": "...",
...
}
```
### 🎯 Prompt 設計依據
1. **最複雜的表單**: 包含最多欄位18 個),涵蓋完整的 JD 內容
2. **日期格式規範**: 明確要求 YYYY-MM-DD 格式
3. **職責編號格式**: 特別指定使用「1、」「2、」格式並用 `\n` 換行
4. **地點代碼對照**: 提供台灣與中國大陸的辦公室代碼
5. **欄位名稱映射**: 程式中會將 `jd_` 前綴移除後再傳給 API
### 📦 處理的欄位
```javascript
const allFields = [
'jd_empNo', // 工號
'jd_empName', // 員工姓名
'jd_positionCode', // 崗位代碼
'jd_versionDate', // 版本日期
'jd_positionName', // 崗位名稱
'jd_department', // 所屬部門
'jd_positionEffectiveDate', // 崗位生效日期
'jd_directSupervisor', // 直接領導職務
'jd_directReports', // 直接下級
'jd_workLocation', // 任職地點
'jd_empAttribute', // 員工屬性
'jd_positionPurpose', // 崗位設置目的
'jd_mainResponsibilities', // 主要崗位職責
'jd_education', // 教育程度要求
'jd_basicSkills', // 基本技能要求
'jd_professionalKnowledge', // 專業知識要求
'jd_workExperienceReq', // 工作經驗要求
'jd_otherRequirements' // 其他要求
];
```
### 🔧 如何修改此 Prompt
在 [index.html:2464-2492](index.html#L2464) 找到程式碼。
**特別注意**: 這個模組有欄位名稱映射機制([index.html:2499-2518](index.html#L2499)),修改欄位時需要同時更新 `fieldMapping` 物件。
**修改建議**:
- **新增辦公室地點**: 在 `workLocation` 中添加新的辦公室代碼
- **調整職責數量**: 修改 `mainResponsibilities` 的編號範圍(如改為 1-10
- **新增員工屬性**: 在 `empAttribute` 中添加新的員工類型
---
## 如何修改 Prompt
### 📝 通用修改步驟
所有 "I'm Feeling Lucky" 按鈕的 Prompt 都遵循相同的修改流程:
#### 步驟 1: 找到對應函式
使用上方表格找到要修改的函式位置,例如:
```
崗位基礎資料維護 → index.html:2179
```
#### 步驟 2: 找到 prompt 變數
在函式中搜尋 `const prompt =``const prompt = \``:
```javascript
const prompt = `請為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。
...
`;
```
#### 步驟 3: 修改 Prompt 內容
根據需求修改:
**A. 修改生成風格**
```javascript
// 修改前
const prompt = `請為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。
// 修改後(加入語氣要求)
const prompt = `請以專業正式且友善的語氣為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。
```
**B. 修改欄位說明**
```javascript
// 修改前
- positionCode: 崗位編號(格式如 ENG-001, MGR-002, SAL-003
// 修改後(改變編號規則)
- positionCode: 崗位編號(格式:部門縮寫-年份-流水號,如 ENG-2024-001
```
**C. 新增欄位規則**
```javascript
// 在「欄位說明」區塊新增
- positionPriority: 優先級HIGH=高, MID=中, LOW=低)
```
**D. 調整輸出格式**
```javascript
// 修改前
請直接返回JSON格式只包含需要生成的欄位不要有任何其他文字
// 修改後(要求更多資訊)
請直接返回JSON格式只包含需要生成的欄位。每個欄位請加上「_note」後綴提供生成理由
{
"positionCode": "ENG-001",
"positionCode_note": "根據技術職的慣例生成",
...
}
```
#### 步驟 4: 測試修改結果
1. 儲存 `index.html` 檔案
2. 重新整理瀏覽器頁面Ctrl+F5 強制重新整理)
3. 點擊對應頁籤的 "✨ I'm feeling lucky" 按鈕
4. 檢查生成的內容是否符合預期
### ⚠️ 修改時的注意事項
1. **保持 JSON 格式要求**: 必須要求 LLM 返回純 JSON否則程式解析會失敗
2. **不要移除欄位動態列表**: `${emptyFields.join(', ')}` 這段必須保留
3. **維持上下文機制**: `${contextInfo}` 這段是自動填入已有資料的機制,不要刪除
4. **注意反引號**: Prompt 使用反引號 `` ` `` 包裹,內部不可再使用反引號
5. **測試跨欄位引用**: 有些頁籤會引用其他頁籤的資料(如招聘要求引用崗位名稱)
---
## Prompt 設計原則
### 🎨 系統採用的 Prompt 設計原則
#### 1. **智能空白檢測**
```javascript
const emptyFields = getEmptyFields(allFields);
```
- 只生成尚未填寫的欄位
- 避免覆蓋使用者已輸入的資料
- 提升生成效率
#### 2. **上下文感知生成**
```javascript
const contextInfo = Object.keys(existingData).length > 0
? `\n\n已填寫的資料請參考這些內容來生成相關的資料\n${JSON.stringify(existingData, null, 2)}`
: '';
```
- 將已填寫的資料作為上下文
- 讓 LLM 生成與現有資料一致的內容
- 提升資料連貫性
#### 3. **結構化輸出**
```javascript
const prompt = `...
請直接返回JSON格式只包含需要生成的欄位不要有任何其他文字
{
${emptyFields.map(f => `"${f}": "..."`).join(',\n ')}
}`;
```
- 要求 LLM 返回純 JSON
- 提供 JSON 格式範本
- 方便程式解析
#### 4. **詳細的欄位說明**
```javascript
欄位說明:
- positionCode: 崗位編號(格式如 ENG-001, MGR-002, SAL-003
- positionCategory: 崗位類別代碼01=技術職, 02=管理職, 03=業務職, 04=行政職)
```
- 提供完整的代碼對照表
- 說明格式規範和範例
- 減少生成錯誤
#### 5. **繁體中文優先**
```javascript
const prompt = `請為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。
```
- 明確要求使用繁體中文
- 避免出現簡體字或英文
### 🚀 進階 Prompt 技巧
#### 技巧 1: 加入企業特色
```javascript
// 在 prompt 開頭加入
const prompt = `你是一位專業的HR顧問熟悉台灣半導體產業的人力資源管理。
請為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。
```
#### 技巧 2: 加入範例
```javascript
// 在欄位說明後加入
生成範例
{
"positionCode": "ENG-001",
"positionName": "前端工程師",
"positionDesc": "負責開發和維護公司網站前端功能,提升使用者體驗。"
}
請參考以上範例生成類似格式的資料
```
#### 技巧 3: 加入條件邏輯
```javascript
// 根據職位類型調整 prompt
const isManagerPosition = existingData.positionCategory === '02';
const extraInstruction = isManagerPosition
? '\n特別注意這是管理職請強調領導能力和團隊管理經驗。'
: '';
const prompt = `請為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。${extraInstruction}
```
#### 技巧 4: 加入驗證規則
```javascript
const prompt = `...
請確保生成的資料符合以下規則:
1. 崗位編號必須以部門代碼開頭
2. 編制人數必須為正整數
3. 崗位描述長度在 20-100 字之間
4. 所有代碼必須從提供的選項中選擇
...`;
```
---
## 🔍 偵錯與問題排查
### 常見問題 1: LLM 返回格式錯誤
**現象**: 點擊按鈕後出現「生成失敗,請稍後再試」
**可能原因**:
- LLM 返回的不是純 JSON 格式
- JSON 中包含多餘的文字說明
- JSON 格式不正確(缺少逗號、括號等)
**解決方法**:
在 Prompt 中加強格式要求:
```javascript
const prompt = `...
請直接返回JSON格式不要包含任何markdown標記如 \`\`\`json不要有任何其他文字說明
{
${emptyFields.map(f => `"${f}": "..."`).join(',\n ')}
}`;
```
### 常見問題 2: 生成內容不符合預期
**現象**: 生成的內容格式正確,但內容不理想
**解決方法**:
1. 檢查上下文資料是否正確傳遞
2. 增加更詳細的欄位說明
3. 提供具體範例
4. 調整 Prompt 語氣和指令
### 常見問題 3: 部分欄位未填充
**現象**: 只填充了部分欄位,其他欄位仍為空
**可能原因**:
- LLM 返回的 JSON 缺少某些欄位
- 欄位名稱不匹配(大小寫、前綴問題)
**解決方法**:
檢查欄位映射邏輯,特別是 `generateJobDesc()` 函式中的 `fieldMapping`
```javascript
const fieldMapping = {
'empNo': 'jd_empNo',
'empName': 'jd_empName',
...
};
```
---
## 📚 參考資源
### 相關檔案
- **主程式**: [index.html](index.html) - 包含所有 AI 生成函式
- **LLM API 配置**: [llm_config.py](llm_config.py) - LLM 模型設定
- **環境變數**: [.env](.env) - API Key 和模型設定
### 相關函式
- **`callClaudeAPI(prompt)`**: 呼叫 LLM API 的核心函式
- **`getEmptyFields(allFields)`**: 檢測空白欄位
- **`fillIfEmpty(fieldId, value)`**: 只填充空白欄位
- **`setButtonLoading(btn, isLoading)`**: 設定按鈕載入狀態
### LLM 模型設定
系統支援多種 LLM 模型,在 `.env` 檔案中設定:
```env
# Gemini API Configuration
GEMINI_API_KEY=your_api_key
GEMINI_MODEL=gemini-1.5-flash
# DeepSeek API Configuration
DEEPSEEK_API_KEY=your_deepseek_api_key
DEEPSEEK_API_URL=https://api.deepseek.com/v1
# OpenAI API Configuration
OPENAI_API_KEY=your_openai_api_key
OPENAI_API_URL=https://api.openai.com/v1
# Ollama API Configuration
OLLAMA_API_URL=https://ollama_pjapi.theaken.com
OLLAMA_MODEL=deepseek-reasoner
```
---
## ✅ 最佳實踐
### ✨ 撰寫好的 Prompt 的建議
1. **明確的指令**: 清楚說明要生成什麼類型的資料
2. **詳細的格式說明**: 提供完整的代碼對照表和格式範例
3. **上下文資訊**: 包含已填寫的資料作為參考
4. **結構化輸出**: 要求返回 JSON 格式,方便解析
5. **語言偏好**: 明確指定使用繁體中文
6. **錯誤處理**: 加入驗證規則,減少生成錯誤
### 📝 Prompt 維護建議
1. **版本控制**: 重大修改前先備份原 Prompt
2. **測試驗證**: 每次修改後都要測試所有情境
3. **文件更新**: 修改後同步更新此說明文件
4. **使用者回饋**: 根據實際使用情況調整 Prompt
---
## 🎯 總結
### 快速參考表
| 頁籤 | 函式 | 程式碼行數 | 主要用途 | 欄位數量 |
|-----|------|-----------|---------|---------|
| 崗位基礎資料 | `generatePositionBasic()` | 2179-2251 | 生成崗位基本資訊 | 8 |
| 崗位招聘要求 | `generatePositionRecruit()` | 2253-2328 | 生成招聘需求 | 14 |
| 職務基礎資料 | `generateJobBasic()` | 2330-2423 | 生成職務資訊 | 8+2 checkbox |
| 部門職責維護 | `generateDeptFunction()` | 3778-3839 | 生成部門職責 | 9 |
| 崗位描述 (JD) | `generateJobDesc()` | 2425-2541 | 生成完整JD | 18 |
### 核心機制
1. **智能檢測**: 自動識別空白欄位
2. **上下文感知**: 參考已填寫資料生成
3. **結構化輸出**: JSON 格式便於解析
4. **安全填充**: 只填充空白欄位,不覆蓋現有資料
---
> **維護提醒**: 當系統新增或修改欄位時,記得同步更新:
> 1. HTML 表單欄位
> 2. JavaScript 函式中的 `allFields` 陣列
> 3. Prompt 中的欄位說明
> 4. 此說明文件
---
**文件結束** | 有問題請找 AI不要找我 ¯\\_(ツ)_/¯