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>
This commit is contained in:
758
docs/prompt.md
Normal file
758
docs/prompt.md
Normal file
@@ -0,0 +1,758 @@
|
||||
# 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,不要找我 ¯\\_(ツ)_/¯
|
||||
Reference in New Issue
Block a user