ð¯ ã¯ããã«
LLMã䜿ã£ãã¯ãŒã¯ãããŒãæ§ç¯ããŠãããšãããã³ãããã¡ã€ã«ããã€ã®éã«ãæ°çŸè¡ã«èšãã¿ã圹å²å®çŸ©ãã³ãŒãã£ã³ã°èŠçŽãã¿ã¹ã¯æé ãåºåãã©ãŒãããããã¹ãŠã1ã€ã®ãã¡ã€ã«ã«åå± ããŠããããšããç¶æ³ã«åºäŒãããšããããŸããæåã¯ããã®ããã蚱容ç¯å²ããšæã£ãŠããè¥å€§åããããæ¥ãå¢ã«ä¿®æ£ã³ã¹ãã®ããã«ããã¯ã«ãªãã䌌ããããªãšãŒãžã§ã³ãã远å ãããã³ã«å šæã³ããŒããŠã¯åŸ®èª¿æŽããšããè² ã®ã«ãŒãã«å ¥ã£ãŠããã®ã§ãã
ãã®èšäºã§ã¯ãnrsæ°ïŒnrslibïŒãææ¡ããŠãã Faceted Prompting ãšãããã¶ã€ã³ãã¿ãŒã³ ã顿ã«ãããã³ããããé¢å¿ããšããåäœã§åè§£ããŠåå©çšå¯èœãªã¢ãžã¥ãŒã«ã«å€æããèãæ¹ãšããã®å®è£
ã§ããnpmããã±ãŒãž faceted-prompting ã®äœ¿ãæ¹ãæ·±æãããŠãããŸãã
ð ãã®èšäºã§åŠã¹ãããš
| # | åŠã¹ãããš |
|---|---|
| 1ïžâ£ | ã¢ããªã·ãã¯ãªããã³ãããæ±ãã3ã€ã®æ§é çãªåé¡ |
| 2ïžâ£ | Faceted Promptingãæå±ãã 5ã€ã®ãã¡ã»ãã ã®å®çŸ©ãšè²¬åã®éã |
| 3ïžâ£ | åãã¡ã»ãããLLMã® system prompt / user message ã®ã©ãã«é 眮ãã¹ããããããŠãã®èåŸã«ãã recency广 ãšããæ ¹æ |
| 4ïžâ£ | YAMLããŒã¹ã® 宣èšçãªåæ ã«ãã£ãŠåãéšåãè€æ°ã¹ãããã§äœ¿ãåãæ¹æ³ |
| 5ïžâ£ | æ¢åã® Decomposed Prompting / Modular Prompting / Role Prompting ãªã©ãšã® æ ¹æ¬çãªéã |
| 6ïžâ£ | npmããã±ãŒãž faceted-prompting ã䜿ã£ãŠã³ãŒãããåæããå®è·µçãªæ¹æ³ |
ð¥ ãªãããã³ããã¯è¥å€§åããã®ã â 3ã€ã®æ§é çåé¡
Faceted Promptingãçè§£ããåã«ããŸããäœã解決ããããšããŠããã®ãããæŒãããŠããå¿ èŠããããŸããèè ã®nrsæ°ã¯ãããã³ããè¥å€§åã®å®åçãªèŠããããåºçºãããããã3ã€ã®åé¡ãæœåºããŠããŸãã
ð åé¡1: åå©çšãã§ããªã
ãã«ããšãŒãžã§ã³ãåã®ã¯ãŒã¯ãããŒãæžããŠãããšããã¢ãŒããã¯ãã£ã¬ãã¥ã¢ãŒããšãã»ãã¥ãªãã£ã¬ãã¥ã¢ãŒãã®ããã«ã䌌ãŠéãªããã«ãœããè€æ°äœãå Žé¢ ããããããŸããäž¡è ã¯ã¬ãã¥ã¢ãŒãšããç¹ã§ã¯å ±éã§ããã芳ç¹ãå€æåºæºãæé ãéããŸãã
ãã®ãšããã¢ããªã·ãã¯ãªããã³ãããã¡ã€ã«ã§ã¯ãå ±ééšåïŒã¬ãã¥ã¢ãŒãšããŠã®åºæ¬å§¿å¢ãäŸãã°ã建èšçãªææãããããæ ¹æ ãšãšãã«å€å®ããããªã©ïŒã ããåãåºããŠåå©çšããããšãã§ããŸãããçµæãšããŠæ¬¡ã®ãããªèŠãã¿ãçºçããŸãã
- ð ããã³ããã äžžããšã³ã㌠ããŠãã埮調æŽãããããªã
- ð§ å ±ééšåã«ä¿®æ£ãå ¥ã£ãããã³ããŒãããã¹ãŠã®ãã¡ã€ã«ã«åæ ããªããã°ãªããªã
- ð ä¿®æ£æŒããå¿ ãçºçããããããæ°ã¥ãã®ã¯æ¬çªã§åé¡ãåºãåŸ
ð åé¡2: æé»çãªçµåãåºãã
ããã²ãšã€ããããã®ããã³ãŒãã£ã³ã°èŠçŽã®å€æŽ ã§ããäŸãã°ãnullãã§ãã¯ã«ãã©ãŒã«ããã¯ãæ¿«çšããªãããšããååãããŒã ã§è¿œå ããããªã£ããšããŸãããããããã®ååãåç §ããŠããããã³ããã10åã®ã¯ãŒã¯ãããŒã«æ£ãã°ã£ãŠãããã10ãã¡ã€ã«ãæã§éããŠä¿®æ£ããªããã°ãªããŸããã
ããã¯ãã¡ã€ã«å士ã ãç®ã«èŠããªãçµåã ã§ç¹ãã£ãŠããç¶æ ã§ããäŸåé¢ä¿ã¯ããã¥ã¡ã³ãåãããŠããããgrepã§æ¢ããã«ã衚èšããããã£ãŠå®å šã«ã¯æŸããŸããã
| ð¥ çç¶ | ð äŸ |
|---|---|
| 衚èšããã«ããæ€åºæŒã | ããã©ãŒã«ããã¯çŠæ¢ããšã?? ãæ¿«çšããªãããæ··åšããŠããŠçæ¹ã ãçŽããŠããŸã |
| åç §ã°ã©ããååšããªã | ã©ã®ããã³ãããã©ã®ã«ãŒã«ãåç §ããŠããããã©ãã«ãæžãããŠããªã |
| 倿Žåœ±é¿ãäžéæ | ããèŠçŽãåé€ãããšããã©ã®ã¯ãŒã¯ãããŒãå£ãããäºæž¬ã§ããªã |
ð«ïž åé¡3: è²¬ä»»ã®æåšãäžæç
ã¢ããªã·ãã¯ãªããã³ãããèªããšããããäžæãããšãŒãžã§ã³ãã® åœ¹å² ãå®çŸ©ããŠãããã®ãããã®ã¹ãããã§ ããã¹ãæé ãæç€ºããŠãããã®ãããå®ãã¹ã å¶çŽ ãæžããŠãããã®ããããã«ã¯åºå¥ãã€ããªãããšããããŸãã
ãã®ææ§ãã¯ãä¿®æ£ã®ãã³ã«ããããå€ãããšä»ã®ã©ãã«åœ±é¿ãããããšããèæ ®ãé£ããããŸãã責任ã®å¢çãåŒãããŠããªã ãããããã³ããå šäœãæ¯åèªã¿çŽããªããšå®å šãªå€æŽãã§ããªããªãã®ã§ãã
ð 3ã€ã®åé¡ã¯ç¬ç«ããŠããªã
以äžã®å³ã¯ãããã3ã€ã®åé¡ãçžäºã«çµ¡ã¿åã£ãŠã¢ããªã·ãã¯ãªããã³ãããç¶æå°é£ã«ããŠããæ§åã瀺ããŠããŸãã
ð ãã®å³ã®ãã€ã³ã
ãã®3ã€ã®åé¡ã¯ç¬ç«ããŠããã®ã§ã¯ãªãããã¹ãŠ ãé¢å¿ãåé¢ãããŠããªãããšããã²ãšã€ã®æ ¹æ¬åå ããæŽŸçããŠããŸããã€ãŸããåå©çšæ§ã»å€æŽå®¹ææ§ã»è²¬ä»»ã®æçãã¯ã衚é¢çãªçç¶ãšããŠå¥ç©ã«èŠããŠãå®ã¯åãæ§é çæ¬ é¥ã®3ã€ã®è¡šããªã®ã§ãããšããããšã¯ãæ ¹æ¬ã解決ããã°3ã€ã®çç¶ãåæã«æ²»ããããšããããšã§ããããŸãã
ð¡ çµéšè ã®å£°ãšããŠ
ããã³ããã管çããŠããŠãããããåå²ããã»ããããããã ãªããšæããã¿ã€ãã³ã°ã¯ãã ãããããã3ã€ã®çç¶ã®ã©ãããé¡åšåãããšãã§ããæåã«çç¶ãåºãã®ã¯å€ãã®å Žåãåå©çšãããã®ã«ã§ããªããã§ããããããèŠçŽå€æŽã§ä¿®æ£æŒããçºçãããã«é²ã¿ãæåŸã«ãè²¬ä»»ã®æåšãäžæããšããæãåä»ãªç¶æ ã«è³ããŸãã
ð Faceted Promptingã®æ žå¿ â é¢å¿ã®åé¢ãããã³ããã«æã¡èŸŒã
ããã§ç»å Žããã®ã Faceted Prompting ã§ããäžèšã§ããã°ããœãããŠã§ã¢å·¥åŠã§é·ãè°è«ãããŠãã ãé¢å¿ã®åé¢ïŒSeparation of ConcernsïŒã ãšããååããããã³ããèšèšã«ãã®ãŸãŸæã¡èŸŒãã ãã¶ã€ã³ãã¿ãŒã³ã§ãã
ð å®ç³ã®ã¡ã¿ãã¡ãŒ
nrsæ°ã¯å®ç³ã®ã¡ã¿ãã¡ãŒã䜿ã£ãŠãã®ãã¿ãŒã³ã説æããŠããŸãã
ããã€ã€ã¢ã³ãã¯å€é¢äœã«ã«ãããããŠããŸãããããããã®é¢ïŒãã¡ã»ããïŒã¯åºå¥å¯èœãªç¬ç«ããåäœã§ãããããããã¹ãŠã®é¢ãåããã£ãŠäžã€ã®èŒããçã¿åºãã
ããã³ãããåãã§ã圹å²ã»èŠçŽã»æé ã»ç¥èã»åºå圢åŒãšãã£ãé¢ãç¬ç«ã«ä¿ã¡ãªãããå¿ èŠãªãšãã ãåæããããšã§å šäœãšããŠã®æ©èœãæç«ãããããšããèãæ¹ã§ããåãã¡ã»ããã¯ããåäœã§ã¯åãªãæç€ºæã§ãããcomposerãçµã¿åãããç¬éã« LLM ã«ãšã£ãŠã®æå³ã®ããæç€ºã«å€ãããŸãã
ð ãã®å³ã®ãã€ã³ã
åãã¡ã»ããã¯ãããŸã§ ç¬ç«ãããã¡ã€ã« ãšããŠååšããããããåæããå·¥çšïŒcomposerïŒãã©ã³ã¿ã€ã ã«æçµããã³ãããçµã¿ç«ãŠãããšããæ§é ã«ãªã£ãŠããŸããã¯ãŒã¯ãããŒã®äœè ãããããšã¯ãã©ã®ãã¡ã»ãããçµã¿åãããããã宣èšããã ãã§ãçµã¿ç«ãŠãã®ãã®ãæã§æžãããšã¯ãããŸãããããã¯ããªããžã§ã¯ãæåã§èšãã°ãã¡ã¯ããªãã¿ãŒã³ã«DIã³ã³ãããçµã¿åããã£ããããªé¢ä¿ã«è¿ããšèšããŸãã
ð åŸæ¥ãšã®å¯Ÿæ¯
åŸæ¥ã®ã¢ããªã·ãã¯ãªããã³ãããšã®éããäžæã®è¡šã§èŠããšãããªããŸãã
| èŠ³ç¹ | ðïž ã¢ããªã·ã㯠| ð Faceted Prompting |
|---|---|---|
| æ§é | 1ãã¡ã€ã«ã«å šéš | 5ã€ã®ãã¡ã»ããã«åé¢ |
| åå©çšã®åäœ | ããã³ããå šäœ | åã ã®ãã¡ã»ãã |
| 倿Žåœ±é¿ | åç §å ãäžæ | åç §ã°ã©ããæç€ºç |
| æšæºå | ã³ããã§åºãã | 1ãã¡ã€ã«ã§å ±æ |
| çµã¿ç«ãŠ | ææžã | 宣èšçã»æ±ºå®è«ç |
| 責任ã®å¢ç | ææ§ | ãã¡ã€ã«åäœã§æç€º |
ð§© 5ã€ã®ãã¡ã»ãããäžå¯§ã«èŠãŠãã
Faceted Promptingã§ã¯ãããã³ããã以äžã® 5ã€ã®é¢å¿ ã«åè§£ããŸãããããããã©ããªåãã«çããã®ãã察æ¯ããªããèŠãŠãããŸãããã
| ãã¡ã»ãã | ð åã | ð å 容ã®äŸ |
|---|---|---|
| ð€ Persona | 誰ãšããŠå€æããã? | 圹å²å®çŸ©ãå°éæ§ãè¡åå§¿å¢ã圹å²ã®å¢ç |
| ð Policy | äœãå®ãã? | çŠæ¢äºé ãåè³ªåºæºãåªå é äœã暪æçã«ãŒã« |
| ð Instruction | äœãããã? | ãã®ã¹ãããã®ç®æšãšæé |
| ð Knowledge | äœãåç §ããã? | åæç¥èããã¡ã€ã³è³æãAPI仿§ |
| ð€ Output Contract | ã©ãåºãã? | åºåæ§é ãã¬ããŒããã³ãã¬ãŒããå€å®åœ¢åŒ |
ãã®5ã€ã¯ãPersonaãšInstructionã®2ã€ãæäœéå¿ èŠãªã³ã¢ ã§ãæ®ãã®3ã€ãå®åçµéšãããç¬ç«ãã軞ãšããŠæ±ã䟡å€ãããããšå€æãããŠè¿œå ãããããšããæãç«ã¡ã§ããããããé çªã«èŠãŠãããŸãã
ð€ Persona â ã誰ãšããŠæ¯ãèãããã ããå®çŸ©ãã
Personaã¯ãšãŒãžã§ã³ãã® ã¢ã€ãã³ãã£ã㣠ãèšè¿°ããéšåã§ããäŸãã°ä»¥äžã®ãããªå 容ãå«ãŸããŸãã
- ð© 圹å²å®£èš: ãããªãã¯ãœãããŠã§ã¢ã¢ãŒããã¯ãã£ã®å°éå®¶ã§ãã
- ð¬ å°éæ§: ã©ã®é åã«è©³ããããã©ã®ã¬ãã«ã®ç¥èãæã£ãŠããã
- ð§ è¡åå§¿å¢: è¬èã«ææãããæ ¹æ ãããšã«å€æããããªã©
- ð§ 圹å²ã®å¢ç: äœããããäœããããªãã
â ïž Personaã«æžããŠã¯ãããªãããš
Personaã«ã¹ãããåºæã®æé ãæžããªãããš ãéèŠã§ããæé ã¯Instructionã«å±ããŸããPersonaã«ããã®ã¬ãã¥ãŒã§ã¯ä»¥äžã®æé ãå®è¡ããŠãã ããããšæžãå§ããç¬éããã®Personaã¯ç¹å®ã®ã¹ãããã«çžãããŠããŸããä»ã®ã¯ãŒã¯ãããŒã§åå©çšã§ããªããªããŸãã
åå©çšæ§ãä¿ã€ã³ãã¯ãããã®Personaãå¥ã®ã¹ãããã§äœ¿ããããªã£ããšããæžãæããªããŠã䜿ããã?ããšããåããèªåã«æããããããšã§ããæžãæããå¿ èŠãªããããã¯ã¹ãããåºæã®æ å ±ãæ··å ¥ããŠãããµã€ã³ã§ãã
ð Policy â æšªæçãªãå®ãã¹ãããšã
Policyã¯ãè€æ°ã®ã¹ããããã¯ãŒã¯ãããŒããŸããã§é©çšããããå®ãã¹ãã«ãŒã«ã ã§ããã³ãŒãã£ã³ã°èŠçŽãåè³ªåºæºãçŠæ¢äºé ãšãã£ã暪æçé¢å¿äºãããã«å ¥ããŸãã
å ·äœçã«ã¯æ¬¡ã®ãããªãã®ãå žåçã§ãã
| ð åå | ð å 容 |
|---|---|
| DRYåå | 3å以äžã®éè€ã¯REJECT |
| Fail Fast | äžæ£ãªç¶æ ã¯æ©æã«ãšã©ãŒå |
| æå°æš©é | å¿ èŠæå°éã®ã¹ã³ãŒãã«çµã |
| æªäœ¿çšã³ãŒãçŠæ¢ | ã念ã®ãããã®ã¡ãœãããå°æ¥çšãã£ãŒã«ããæžããªã |
| çŽæ¥å€æŽçŠæ¢ | ãªããžã§ã¯ãã¯ã¹ãã¬ããæŒç®åã§æ°èŠäœæ |
| ãã©ãŒã«ããã¯æ¿«çšçŠæ¢ |
?? 'default' ã§äžç¢ºå®æ§ãé ããªã |
Policyã®é¢çœããšããã¯ãå®è£ ã¹ãããã§ãã¬ãã¥ãŒã¹ãããã§ãå ±éããŠåç §ãããããš ã§ããå®è£ æã«å®ãã¹ãã«ãŒã«ã¯ãåœç¶ã¬ãã¥ãŒæã«ãå€å®åºæºã«ãªããŸããã€ãŸãPolicyã¯åäžè²¬ä»»ã®ãŸãŸè€æ°ã®ã·ãŒã³ã«æµçšã§ãããå žåç㪠暪æçé¢å¿äºïŒcross-cutting concernïŒ ãªã®ã§ãã
ð¡ AOPãšã®é¡äŒŒ
ã¢ã¹ãã¯ãæåããã°ã©ãã³ã°ïŒAOPïŒã«ããããã¢ã¹ãã¯ãããš Policy ã¯ãã䌌ãäœçœ®ã¥ãã§ããããžãã¹ããžãã¯ã«çŽæ¥æžããããªãããå šäœã«é©çšãããã¹ãã«ãŒã«ââãããç¬ç«ãããã¡ã€ã«ã«åãåºãããšããçºæ³ãå ±éããŠããŸãã
ð Instruction â ããã®ã¹ãããã§äœããããã
Instructionã¯ãç¹å®ã®ã¹ãããã§ãšãŒãžã§ã³ããå®è¡ãã¹ãäœæ¥æé ãèšè¿°ããŸããããšãã°ä»¥äžã®ãããªå 容ã§ãã
- â èšç»ã«åºã¥ããŠã¿ã¹ã¯ãå®è£ ãã
- â 倿Žã¹ã³ãŒãã宣èšãã
- â ãã¹ããæžããŠå®è¡ãã
- â 倿ãã°ãèšé²ãã
Personaãã誰ãšããŠãã«çããã®ã«å¯ŸããInstructionã¯ãäœãããããã«çããŸãããã®å¢çãåŒãããšã§ãåããã«ãœããç°ãªãInstructionã§äœ¿ãåãã ããã«ãªããŸããäŸãã°åããcoderããã«ãœãããå®è£ ã¹ãããã§ã¯ãæ°æ©èœãå®è£ ãããããªãã¡ã¯ã¿ãªã³ã°ã¹ãããã§ã¯ãæ¢åã³ãŒããæŽçããããšéãInstructionã§äœ¿ããŸãã
ð Knowledge â 倿ã®åæãšãªãåç §æ å ±
Knowledgeã«ã¯ããšãŒãžã§ã³ãã倿ããããã«å¿ èŠãªåææ å ±ãåç §è³æ ãå ¥ããŸããå žåçã«ã¯ãã¡ã€ã³ç¥èãã¢ãŒããã¯ãã£ã®åæãAPIã®ä»æ§æžãªã©ã§ãã
- ð ãã®ãããžã§ã¯ãã®ã¬ã€ã€ãŒæ§é ã¯
Controller â Service â Repositoryã®é ã§äŸåãã - ð Repositoryã¯ä»ã®ã¬ã€ã€ãŒã«äŸåããªã
- ð ããŒã¿ããŒã¹ã¯PostgreSQLã䜿ã£ãŠãã
- ð èªèšŒã«ã¯OAuth 2.0ã®Authorization Code Flowãæ¡çšããŠãã
ããã§æ±ºå®çã«éèŠãªåºå¥ããããŸãã
ð Knowledge ã¯èšè¿°ç (descriptive)ãPolicy ã¯èŠç¯ç (normative)
ã€ãŸã Knowledge ã¯ããããªã£ãŠããããæžããPolicy ã¯ããããã¹ãããæžããŸããnrsæ°ã¯ãã®åºå¥ãæç¢ºã«åŒ·èª¿ããŠãããæ··åãããšãã¡ã»ããã®åå©çšæ§ã厩ããåå ã«ãªãããšããŠããŸãã
äŸãã°ãRepositoryã¬ã€ã€ãŒã¯ä»ã®ã¬ã€ã€ãŒã«äŸåããªãããšæžãããšãããããKnowledgeãªã®ãPolicyãªã®ãã¯æèæ¬¡ç¬¬ã§ããããã®ãããžã§ã¯ãã¯ããèšèšãããŠããããšããäºå®ã®èšè¿°ãªãKnowledgeããä»ã®ãããžã§ã¯ãã§ãããããã¹ãã ããšããã«ãŒã«ãªãPolicyã§ãã
ð€ å€å®ãããŒ
ð ãã®å³ã®ãã€ã³ã
å€å®åºæºã¯ ãäºå®ããã«ãŒã«ãã ãšããäºè æäžã§ããè¿·ã£ããæ¬¡ã®åããèªåãããšããã§ãããã
â ãããã®ãããžã§ã¯ãããããªã£ãŠããªãã£ãããããã¯ãã°ã? ãããšãåãªãå¥ã®èšèšã?
ãã°ãªãPolicyãå¥ã®èšèšãªãKnowledgeã§ããã·ã³ãã«ã§ãããããŒã ã§åæãåãæã«ã䜿ããå®çšçãªå€å®æ¹æ³ã§ãã
ð€ Output Contract â åºåã®æ§é ãç¬ç«ãããã¡ã€ã«ã§ç®¡çãã
æåŸã® Output Contract ã¯ããšãŒãžã§ã³ãã® åºåãã©ãŒããã ãå®çŸ©ããŸããã¬ããŒããã³ãã¬ãŒããçµæã®å€å®åœ¢åŒïŒAPPROVE / REJECTãªã©ïŒãæ§é åãããããŒãã«åœ¢åŒãªã©ã§ãã
Output Contract ãç¬ç«ããé¢å¿ã§ããçç±ã¯ãåãåºåãã©ãŒããããç°ãªããšãŒãžã§ã³ãã§å ±æã§ãããã ã§ãã
- ðïž ã¢ãŒããã¯ãã£ã¬ãã¥ã¢ãŒ â ãã¬ãã¥ãŒçµæãã³ãã¬ãŒããã§åºå
- ð ã»ãã¥ãªãã£ã¬ãã¥ã¢ãŒ â åããã¬ãã¥ãŒçµæãã³ãã¬ãŒããã§åºå
- â¡ ããã©ãŒãã³ã¹ã¬ãã¥ã¢ãŒ â åããã¬ãã¥ãŒçµæãã³ãã¬ãŒããã§åºå
ã¬ãã¥ãŒé ç®ã®äžèº«ã¯éã£ãŠããåºåã®åœ¢ã¯å ±éã§ããã®ã§ããããã«ãããäžæµã®åŠçïŒCI飿ºãèªåãã©ãŒããããããã·ã¥ããŒã衚瀺ãªã©ïŒãæžãããããªããŸãã
ð é 眮æŠç¥ãšrecency广 â ãªãPolicyã¯æ«å°Ÿãªã®ã
5ã€ã®ãã¡ã»ãããæã«å
¥ããããšã次ã«èããã¹ã㯠ãããããLLMã«å¯ŸããŠã©ãæç€ºãããã ã§ããLLM APIã§äœ¿ããã¹ãããã¯å€§ããåã㊠system prompt ãš user message ã®2ã€ã ãã§ãããã5ã€ã®ãã¡ã»ããããã®2ã€ã®ã¹ãããã« ã©ãé
åããã ãæ±ºããªããã°ãªããŸããã
ð¯ æšå¥šãããé 眮
Faceted Promptingãææ¡ããé 眮ã¯ä»¥äžã®ãšããã§ãã
ð ãã®å³ã®ãã€ã³ã
Persona㯠system prompt ã«çœ®ãããã以å€ã®4ã€ã¯ user message ã«åæããŸããæ³šç®ãã¹ãã¯ãuser message å
éšã§ã®ãã¡ã»ããã®é åºã Knowledge â Instruction â Output Contract â Policy ã®é ã«ãªã£ãŠããããšã§ããç¹ã« Policyãæ«å°Ÿã«çœ®ãããŠãã ã®ãç¹åŸŽçã§ãã
ð§ ãªãPolicyãæ«å°Ÿã«çœ®ãã®ã â recency广
ãã®é åºã«ã¯ãLLMã®æåã«é¢ããå®åçãªæ ¹æ ããããŸããLLM㯠çŽåã«èªãã å 容ã«åŒ·ãåŒãããããåŸå ããããããã¯äžè¬ã« recency广ïŒrecency biasïŒ ãšåŒã°ããŠããŸããåºåçæã®çŽåã«ãã£ãå 容ã»ã©ãå®éã®åºåã«åæ ãããããããšããæ§è³ªã§ãã
ãã®æ§è³ªãèžãŸãããšããå¿ ãå®ã£ãŠã»ããçŠæ¢äºé ããREJECTã®å€å®åºæºããšãã£ãPolicyã¯ãåºåçæçŽåãã€ãŸã user message ã®æ«å°Ÿã«çœ®ãã®ãæã广çããšããçµè«ã«ãªããŸããéã«Knowledgeã®ãããªåç §æ å ±ã¯ãæšè«ã®åæãšããŠæåã«æç€ºããŠããã°ãããæ«å°Ÿã«çœ®ãå¿ èŠã¯ãããŸããã
ð ãã®ã·ãŒã±ã³ã¹ã®ãã€ã³ã
Policyã ãæåŸã«èªãŸããã ããšã§ ãæåã«å®ãããã ãšããé説çãªå¹æãçã¿ãŸããé 眮é åºã¯ãã ã®æŽåã§ã¯ãªããLLMã®æšè«ãã€ã¢ã¹ã峿¹ã«ã€ããããã®èšèšå€æ ãªã®ã§ããããã¯Faceted Promptingããã ã®æŽçè¡ã§ã¯ãªããLLMã®ç¹æ§ãçè§£ããäžã§ã®ã¢ãŒããã¯ãã£ãã¿ãŒã³ã§ããããšã象城ããŠããŸãã
ð¡ æ±ºå®è«çãªçµã¿ç«ãŠãæ ä¿ãããã®
ãã®é 眮æŠç¥ã¯ãã¬ãŒã ã¯ãŒã¯åŽïŒcomposerïŒã決å®è«çã«æ±ºãããããã¯ãŒã¯ãããŒäœè ãé åºãæèããå¿ èŠã¯ãããŸããããã©ã®ãã¡ã»ããã䜿ãããã宣èšããã°ãé åºã¯èªåçã«æé©åãããŸãããã㊠composer ã®å®è£ ãå€ãã£ãŠé åºæŠç¥ãæŽæ°ãããã°ãæ¢åã®ã¯ãŒã¯ãããŒå®çŸ©ã¯ãã®ãŸãŸã§æ°ããé çœ®ã®æ©æµãåããããŸããããã¯ãããªã·ãŒãã³ãŒãããåé¢ãããããšã®çã®äŸ¡å€ãšèšããŸãã
â¹ïž è£è¶³: ã³ã³ã»ãããšå®è£ ã®ã¹ã³ãŒãå·®
ããã§ç€ºããŠãããKnowledge â Instruction â Output Contract â Policyããšãã4ãã¡ã»ããã®é 眮ã¯ãåèã®Zennèšäºããã³TAKTã®æèã§èª¬æãããŠãã ã³ã³ã»ããäžã®èšèš ã§ããäžæ¹ãåŸè¿°ããnpmããã±ãŒãž
faceted-promptingã®compose()API ã¯ãçŸæç¹ã§ã¯ãã©ã¡ãŒã¿ãšããŠknowledge / instructions / policiesã®3軞ãçŽæ¥åãåã圢ã«ãªã£ãŠãããOutput Contractã¯ãã³ãã¬ãŒããåæå®çŸ©åŽã§æ±ãèšèšã«ãªã£ãŠããŸããPolicyãæ«å°Ÿã«çœ®ããšããçµè«èªäœã¯äž¡è ã§å ±éããŠãããããèãæ¹ãåŠã¶äžã§ã¯ã©ã¡ãã§çè§£ããŠãæ§ããŸããã
ð å ·äœäŸã§èŠãåãã¡ã»ãã
ããããã¯ãå®éã®ãã¡ã»ãããã¡ã€ã«ãã©ã®ãããªå 容ã«ãªãã®ãããnrsæ°ã®èšäºã§ç€ºãããŠããäŸãããšã«èŠãŠãããŸããæœè±¡è«ã ãã§ã¯æŽã¿ã«ããéšåããå ·äœçãªãã¡ã€ã«ã§æèŠçã«çè§£ããŠãããã®ãçãã§ãã
ð€ Personaã®äŸ â Architecture Reviewer
# Architecture Reviewer
ããªãã¯ãœãããŠã§ã¢ã¢ãŒããã¯ãã£ã®å°éå®¶ã§ãã
## 圹å²ã®å¢ç
**ããããš:**
- æ§é ã»èšèšã®åŠ¥åœæ§æ€èšŒ
- ã³ãŒãå質ã®è©äŸ¡
**ãããªãããš:**
- ã»ãã¥ãªãã£è匱æ§ã®ã¬ãã¥ãŒïŒå¥ã®åœ¹å²ïŒ
- èªåã§ã³ãŒããæžã
ãã®Personaãã¡ã€ã«ã®ãã€ã³ãã¯æ¬¡ã®3ã€ã§ãã
- ð© åé ã®äžæã§ã誰ãšããŠæ¯ãèããããå®£èš ãã
- â ãããããšãã§è²¬åã®ã¹ã³ãŒããæç€º ãã
- ð§ ããããªãããšãã§ä»ã®ãã¡ã»ããããšãŒãžã§ã³ããšã®å¢çãæç€º ãã
ð¡ ãªãããããªãããšããæžãã®ã
ãã«ããšãŒãžã§ã³ãã¯ãŒã¯ãããŒã§ã¯ã圹å²å士ã®å¹²æžãé²ãããšããšãŠãéèŠã§ããã¢ãŒããã¯ãã£ã¬ãã¥ã¢ãŒãã»ãã¥ãªãã£èгç¹ãŸã§å£ãåºãå§ãããšãã»ãã¥ãªãã£ã¬ãã¥ã¢ãŒã®è²¬åãšè¡çªããŠããŸããŸããæç€ºçã«ããããªãããšããæžãããšã§ãLLMã«å¯ŸããŠãèªåã®è·åãæããããšãã§ããã¯ãŒã¯ãããŒå šäœã®äºæž¬å¯èœæ§ãé«ãŸããŸãã
ð Policyã®äŸ â ã³ãŒãã£ã³ã°ããªã·ãŒ
# ã³ãŒãã£ã³ã°ããªã·ãŒ
## åå
| åå | åºæº |
|------|------|
| DRY | 3å以äžã®éè€ã¯REJECT |
| Fail Fast | äžæ£ç¶æ
ã¯æ©æã«ãšã©ãŒ |
| æå°æš©é | å¿
èŠæå°éã®ã¹ã³ãŒã |
## çŠæ¢äºé
- **æªäœ¿çšã³ãŒã** - ã念ã®ãããã®ã¡ãœãããå°æ¥çšãã£ãŒã«ã
- **ãªããžã§ã¯ãã®çŽæ¥å€æŽ** - ã¹ãã¬ããæŒç®åã§æ°èŠäœæ
- **ãã©ãŒã«ããã¯æ¿«çš** - `?? 'default'` ã§äžç¢ºå®æ§ãé ããªã
Policyã®ãã€ã³ãã¯ãããŒãã«ãšç®æ¡æžãã§å€å®åºæºãæ©æ¢°çã«æžãããš ã§ãã
| â è¯ãæžãæ¹ | â æªãæžãæ¹ |
|---|---|
3å以äžã®éè€ã¯REJECT |
ãªãã¹ãéè€ãé¿ãã |
1ãã¡ã€ã«300è¡è¶
ã¯åå²ãæ€èš |
ãã¡ã€ã«ã¯é©åãªãµã€ãºã« |
埪ç°äŸåã¯REJECT |
埪ç°äŸåã¯ãããªã |
èªç¶èšèªã§ææ§ã«æžããªã ã®ããã€ã³ãã§ããLLMã«å¯ŸããŠããå€å®åºæºãæç¢ºã§ããã»ã©å®å®ããæåãåŒãåºããŸããããªãã¹ãããé©åã«ããå¯èœãªããã®ãããªãŒããããã衚çŸã¯ãLLMã®ããããšçµã¿åããã£ãŠäºæž¬å°é£ãªåºåãçã¿ãã¡ã§ãã
ð Knowledgeã®äŸ â ã¢ãŒããã¯ãã£ç¥è
# ã¢ãŒããã¯ãã£ç¥è
## ã¬ã€ã€ãŒæ§é
äŸåã®æ¹å: äžäœå±€ â äžäœå±€ïŒéæ¹åçŠæ¢ïŒ
| ã¬ã€ã€ãŒ | 責å | äŸåå
|
|----------|------|--------|
| Controller | HTTPãªã¯ãšã¹ãåŠç | Service |
| Service | ããžãã¹ããžã㯠| Repository |
| Repository | ããŒã¿ã¢ã¯ã»ã¹ | ãªã |
## ãã¡ã€ã«æ§æ
| åºæº | å€å® |
|------|------|
| 1ãã¡ã€ã«300è¡è¶
| åå²ãæ€èš |
| 1ãã¡ã€ã«ã«è€æ°è²¬å | REJECT |
| 埪ç°äŸå | REJECT |
â¹ïž èšè¿°ç vs èŠç¯çã®å¢çã«ã€ããŠ
ãã®äŸã¯ãKnowledgeïŒããã®ãããžã§ã¯ãã¯ããããã¬ã€ã€ãŒæ§é ãæ¡çšããŠããããšããäºå®ïŒãšPolicyïŒã埪ç°äŸåã¯REJECTããšããã«ãŒã«ïŒãæ··åšããŠããããã«ãèŠããŸãããã ãåèè ã®åé¡ã§ã¯ããã®ãããžã§ã¯ãã«ãããåæããšããŠå šäœãKnowledgeã«å ¥ã£ãŠããŸããããŒã ã®éçšæ¹éã«å¿ããŠå¢çãæ±ºããã°OK ã§ããéèŠãªã®ã¯ãããŒã å ã§å€æåºæºãäžè²«ããŠããããšã§ãã
ð Instructionã®äŸ â å®è£ æé
èšç»ã«åºã¥ããŠã¿ã¹ã¯ãå®è£
ããŠãã ããã
**ããããš:**
1. 倿Žã¹ã³ãŒãã宣èšãã
2. ã³ãŒããå®è£
ãã
3. ãã¹ããæžããŠå®è¡ãã
4. 倿ãã°ãèšé²ãã
Instructionã¯ã·ã³ãã«ã«ããã®ã¹ãããã§å®è¡ãã¹ãè¡åããåæããŸããããã«ã³ãŒãã£ã³ã°èŠçŽãæžãå§ãããšPolicyãšéè€ãã ã®ã§ããããŸã§ãæé ãã«çµãã®ããã€ã³ãã§ããåè©ãäžå¿ã«ãã¢ã¯ã·ã§ã³ã®ã·ãŒã±ã³ã¹ãšããŠæžããšåããããããªããŸãã
ð€ Output Contractã®äŸ â ã¬ãã¥ãŒçµæãã³ãã¬ãŒã
# ã¢ãŒããã¯ãã£ã¬ãã¥ãŒ
## çµæ: APPROVE / REJECT
## ãµããªãŒ
{1-2æã§çµæãèŠçŽ}
## 確èªãã芳ç¹
| èŠ³ç¹ | çµæ | åè |
|------|------|------|
| æ§é ã»èšèš | â
| - |
| ã³ãŒãå質 | â
| - |
## åé¡ç¹ïŒREJECTã®å ŽåïŒ
| # | å Žæ | åé¡ | ä¿®æ£æ¡ |
|---|------|------|--------|
| 1 | `src/file.ts:42` | åé¡èª¬æ | ä¿®æ£æ¹æ³ |
Output Contract㯠ããã®åœ¢åŒã§åºåããããšãããã³ãã¬ãŒã ã§ããäžèº«ãäœã§ããããã®åã«ã¯ããŠåºåããããããäžæµã®åŠçïŒäŸãã°CIã§REJECTãããã¯ããåŠçãããã·ã¥ããŒãã§äžèŠ§è¡šç€ºããåŠçïŒãæ Œæ®µã«æžãããããªããŸãã
ð¡ Output Contractãæ¬é çºæ®ãããšã
è€æ°ã®ãšãŒãžã§ã³ããåããã©ãŒãããã§åºåãããšãããããæ©æ¢°çã«çµ±åã§ããããã«ãªããŸããäŸãã°ãã¢ãŒããã¯ãã£ã¬ãã¥ãŒçµæããã»ãã¥ãªãã£ã¬ãã¥ãŒçµæããããã©ãŒãã³ã¹ã¬ãã¥ãŒçµæããå šéšåããã©ãŒããããªãã1ã€ã®ããã·ã¥ããŒãã«äžŠã¹ãŠè¡šç€ºããããšãã1ã€ã®ããŒãžã¹ã¯ãªããã§éçŽããããšãç°¡åã§ãã
ðŒ 宣èšçãªåæ â TAKTã®YAMLã§çµã¿ç«ãŠã
ãã¡ã»ãããç¬ç«ãããã¡ã€ã«ãšããŠååšããããã«ãªããšã次ã«å¿ èŠãªã®ã¯ ãã©ã®ãã¡ã»ãããçµã¿åãããŠãã©ã®ã¹ãããã§äœ¿ãããã宣èšããä»çµã¿ ã§ããnrsæ°ã¯TAKTãšããã¯ãŒã¯ãããŒå®è¡ãšã³ãžã³ãç¬èªã«éçºããŠãããããã§ã¯YAMLã§ã¯ãŒã¯ãããŒãå®çŸ©ããŸãã
ð YAMLã§ã®å®çŸ©äŸ
name: my-workflow
personas:
coder: ../personas/coder.md
reviewer: ../personas/architecture-reviewer.md
policies:
coding: ../policies/coding.md
instructions:
implement: ../instructions/implement.md
knowledge:
architecture: ../knowledge/architecture.md
output_contracts:
review: ../output-contracts/review.md
movements:
- name: implement
persona: coder
policy: coding
instruction: implement
knowledge: architecture
edit: true
- name: review
persona: reviewer
policy: coding
knowledge: architecture
report:
format: review
edit: false
ãã®YAMLãäŒããŠããã®ã¯ãã¯ãŒã¯ãããŒã®äœè
ãããããšã¯ãã©ã®ãã¡ã»ãããçµã¿åãããããéžã¶ããšãã ã ã ãšããäºå®ã§ããåã¹ãããïŒTAKTã§ã¯ movements ãšåŒã³ãŸãïŒã§ãã©ã®ãã«ãœãããã©ã®ããªã·ãŒãå®ããªãããã©ã®ç¥èãåç
§ããŠãã©ã®æé ãå®è¡ããããåæããŠãããŸãã
ð æ³šç®ãã¹ããã€ã³ã
implementãšreviewã®äž¡æ¹ã®ã¹ãããã åãcodingããªã·ãŒãåç § ããŠããŸããããªã·ãŒãã¡ã€ã«ã¯1ã€ã ããããã䜿ãããã·ãŒã³ã¯2ã€ãããããŸãã« é¢å¿ã®åé¢ã«ããåå©çš ã®åã§ããã³ãŒãã£ã³ã°èŠçŽãå€ããããªã£ãããcoding.mdã1ãã¡ã€ã«ä¿®æ£ããã ãã§äž¡æ¹ã®ã¹ãããã«åæ ãããŸãã
ð åç §é¢ä¿ã®å¯èŠå
ð ãã®å³ã®ãã€ã³ã
äžå€®ã® coding.mdïŒé»è²ïŒã2ã€ã®movementããåæã«åç
§ãããŠããããšã«æ³šç®ããŠãã ããã倿Žããããšãã¯1ãã¡ã€ã«ãçŽãã°ãããäž¡æ¹ã®ã¹ãããã«èªåçã«åæ ãããŸããããã ãæé»çãªçµåããããæç€ºçãªåç
§é¢ä¿ããžã®ç§»è¡ ã§ãã
ãã®å³ã¯ãŸããããã¡ã»ããã¯ã©ã€ãã©ãªãmovementã¯åŒã³åºãå ããšããèãæ¹ ããã衚ããŠããŸããã©ã€ãã©ãªã1ç®æçŽãã°å šåŒã³åºãå ã«åæ ãããããšããã®ã¯ããã°ã©ãã³ã°ã§ã¯åœããåã®æèŠã§ãããããã³ããã®äžçã§ã¯ãŸã åœããåã§ã¯ãããŸããã§ããã
âïž åæã®ã·ãŒã±ã³ã¹
å®éã«ã¯ãŒã¯ãããŒãå®è¡ããããšãããã¡ã»ãããã©ãLLMãžã®ãªã¯ãšã¹ãã«å€æãããŠããããèŠãŠã¿ãŸãããã
ð ãã®ã·ãŒã±ã³ã¹ã®ãã€ã³ã
composer ã ãæ±ºå®è«çã«ã ããã³ãããçµã¿ç«ãŠãããšããç¹ã決å®çã«éèŠã§ãã
ð æ±ºå®è«çãªçµã¿ç«ãŠ = åãå ¥åããåžžã«åãåºå
åãã¯ãŒã¯ãããŒå®çŸ©ãšåããã¡ã»ãããã¡ã€ã«ããã¯ãåžžã«åãæçµããã³ãããçæãããŸããããã¯ä»¥äžã®èгç¹ã§éåžžã«éèŠã§ãã
- ð ãããã°å®¹ææ§ â ããã³ãããæå³éãã«ãªã£ãŠãããåçŸã§ãã
- ð å·®å管ç â ãã¡ã»ãã倿ŽååŸã§ããã³ããã®å·®åãæç¢ºã«åãã
- ð¬ ãã¹ãå¯èœæ§ â ã¹ãããã·ã§ãããã¹ãã§ããã³ããã®å€åãæ€åºã§ãã
- ð°ïž åçŸæ§ â æ°ã¶æåŸã«åãã¯ãŒã¯ãããŒãå®è¡ããŠãåãããã³ãããäœããã
ð ïž ã©ã€ãã©ãªå®è£ ãè§Šã£ãŠã¿ã
Faceted Promptingã¯èšèšãã¿ãŒã³ã§ãããšåæã«ãfaceted-prompting ãšããnpmããã±ãŒãžãšã㊠å®è£
ãæäŸãããŠããŸããTypeScript補ããŒãäŸåïŒç¹å®ã®AIãã¬ãŒã ã¯ãŒã¯ã«äŸåããªãïŒãMITã©ã€ã»ã³ã¹ã§ãã
ðŠ ã€ã³ã¹ããŒã«
# ã©ã€ãã©ãªãšããŠãããžã§ã¯ãã«è¿œå
npm install faceted-prompting
# ã°ããŒãã«CLIãšããŠäœ¿ãå Žå
npm install -g faceted-prompting
âš æå°ã®ã³ãŒãäŸ
ã©ã€ãã©ãªãšããŠã®äœ¿ãæ¹ã¯ã·ã³ãã«ã§ã compose() 颿°ã«ãã¡ã»ãããæž¡ãã ãã§ãã
import { compose } from 'faceted-prompting';
const result = compose(
{
persona: { body: 'You are a senior TypeScript developer.' },
policies: [{ body: 'Follow clean code principles. No any types.' }],
knowledge: [{ body: 'The project uses Vitest for testing.' }],
instructions: [{ body: 'Implement a retry function with exponential backoff.' }],
},
{ contextMaxChars: 8000 },
);
// result.systemPrompt â Persona ã system prompt ãšããŠæ ŒçŽããã
// result.userMessage â Knowledge + Instructions + Policies ãé çªã«é
眮ããã
ãã®ã³ãŒãã®ãã€ã³ããæŽçããŸãã
- ð¥ ãã¡ã»ããã ãã©ãã«çœ®ãããã¯ã©ã€ãã©ãªã決ãããåŒã³åºãåŽã¯
systemPromptãšuserMessageãåãåãã ã - ð
contextMaxCharsã®ãããªç·æåæ°ã®äžéãæž¡ãããé·ããããã¡ã»ããã¯åãè©°ããªã©ãè¡ããã - ð åºåã¯LLM APIã®ãªã¯ãšã¹ãã«ãã®ãŸãŸæž¡ãã圢ã«ãªã£ãŠããïŒREADMEã§ã¯ "LLM-ready" ãšè¡šçŸãããŠããŸãïŒ
ð» CLIã³ãã³ã
ã°ããŒãã«ã€ã³ã¹ããŒã«ãããš facet ã³ãã³ãã䜿ããããã«ãªããŸãããããžã§ã¯ãããšã® .faceted/ ãã£ã¬ã¯ããªãåæåãããããµã³ãã«ãã¡ã»ãããååŸããããåæãå®è¡ãããã§ããŸãã
| ã³ãã³ã | åœ¹å² |
|---|---|
ð facet init
|
ããŒã«ã« .faceted/ ãäœæ |
ð facet init global
|
ã°ããŒãã« ~/.faceted/ ãåæå |
ð¥ facet pull-sample
|
ãµã³ãã«ãã¡ã»ãããååŸ |
âïž facet compose
|
ããã³ãããèªååæ |
ð§© facet install skill
|
ã¹ãã«ãã€ã³ã¹ããŒã« |
ð ãã£ã¬ã¯ããªæ§é
facet init ãå®è¡ãããšããããžã§ã¯ãçŽäžã« .faceted/ ãã£ã¬ã¯ããªãäœãããŸããã°ããŒãã«åŽ ~/.faceted/ 㯠ãã©ãŒã«ããã¯çš ã§ããããžã§ã¯ãåŽã«ååšããªãå Žåã¯ãã¡ããåç
§ãããŸãã
.faceted/ ð ããŒã«ã«ïŒãããžã§ã¯ãåäœïŒ
âââ config.yaml
âââ facets/
â âââ persona/ ð€
â âââ knowledge/ ð
â âââ policies/ ð
â âââ instructions/ ð
â âââ compositions/ ðŒ
âââ templates/ ð
~/.faceted/ ð ã°ããŒãã«ïŒãã©ãŒã«ããã¯ïŒ
âââ config.yaml
âââ facets/
â âââ persona/
â âââ knowledge/
â âââ policies/
â âââ instructions/
â âââ compositions/
âââ templates/
âââ repertoire/ ðµ
ð¡ äºæ®µæ§æã®ãããã
ãããŒã å ±éã®ããªã·ãŒãå人ã®å¥œã¿ã¯ã°ããŒãã«åŽã«çœ®ããŠããããããžã§ã¯ãåºæã®ç¥èã¯ããŒã«ã«åŽã«çœ®ãããšããéçšãèªç¶ã«ã§ããŸããå人ããèªåã¯ã³ãŒãã¬ãã¥ãŒã§ã¯å¿ ãããæ¯ãèã£ãŠã»ããããšæããããªPersonaãã°ããŒãã«åŽã«æã£ãŠããã°ããããžã§ã¯ããè·šãã§åãäœéšãåŸãããŸãã
ðŒ Compositionå®çŸ©
.faceted/facets/compositions/ ã«YAMLãã¡ã€ã«ã眮ãããšã§ãCLIããã¯ãŒã¯ãããŒçãªåæãå®è¡ã§ããŸãã
name: release
description: Release summary composition
persona: coder
knowledge:
- architecture
policies:
- quality
instructions:
- release-summary
order:
- knowledge
- instructions
- policies
ð ãã€ã³ã
- ð¯
orderãã£ãŒã«ãã§ user message å ã®ãã¡ã»ããé åºã æç€ºçã«æå® ã§ãã - ð ããã©ã«ãã§ã¯ã©ã€ãã©ãªåŽãæšå¥šããé åºïŒPolicyãæ«å°Ÿã«çœ®ãé ïŒã䜿ã
- ð§ å¿ èŠãªãäžæžããå¯èœ
ð ã¹ã³ãŒãåç §ã§å€éšããã±ãŒãžãåã蟌ã
faceted-prompting ã§ã¯ããã¡ã»ããã å€éšãªããžããªããåç
§ããä»çµã¿ ããããŸãã @owner/repo/facet-name ãšãã圢åŒã§ãå¥ã®ããã±ãŒãžã«å
¬éãããŠãããã¡ã»ãããèªã¿èŸŒããã®ã§ãã
persona: "@nrslib/takt-fullstack/expert-coder"
knowledge:
- "@nrslib/takt-fullstack/architecture"
ããã¯ããã䜿ãå°éæ§ïŒäŸãã°ãTypeScriptã®ãšãã¹ããŒãããRustã®éåæããã°ã©ãã³ã°ã«è©³ãããã«ãœããïŒã ã³ãã¥ããã£ã§å ±æããããã®ä»çµã¿ ãšèããããšãã§ããŸãã瀟å ã§ã¯ãéšçœ²ãããŒã åäœã§ãã¡ã»ãããããã±ãŒãžåãããããžã§ã¯ãããåç §ããããšããéçšãå¯èœã§ãã
ð§ äž»èŠAPI
ã©ã€ãã©ãªã®äž»èŠAPIã¯ä»¥äžã®ãšããã§ãã
| API | åœ¹å² |
|---|---|
âïž compose()
|
ãã¡ã»ãããåæããŠsystem prompt / user messageãçæ |
ð FileDataEngine
|
ãã¡ã€ã«ã·ã¹ãã ãããã¡ã»ãããèªã¿èŸŒã |
ðïž CompositeDataEngine
|
è€æ°ã®ããŒã¿ãœãŒã¹ïŒããŒã«ã«ã»ã°ããŒãã«ãªã©ïŒãã¬ã€ã€ãªã³ã° |
ð renderTemplate()
|
{{variable}} 圢åŒã®ãã³ãã¬ãŒãåŠç |
ð escapeTemplateChars()
|
ããã³ããã€ã³ãžã§ã¯ã·ã§ã³å¯Ÿçã®ãšã¹ã±ãŒã |
ð¡ CompositeDataEngineã®åšå
CompositeDataEngineããããããã§ãããŸãããŒã«ã«ã®.faceted/ãæ¢ãããªããã°ã°ããŒãã«ã®~/.faceted/ãæ¢ãããšãã£ã éå±€çãªè§£æ±º ãå®çŸã§ããŸããããã¯ããŒã å ±éãšå人èšå®ãäž¡ç«ãããäžã§å®çšçãªä»çµã¿ã§ãIDEèšå®ã«ãããããŠãŒã¶ãŒèšå® vs ã¯ãŒã¯ã¹ããŒã¹èšå®ããšäŒŒãçºæ³ã§ãã
âïž æ¢åææ³ãšã®éã â äœãæ¬åœã«æ°ããã®ã
ãããã³ããã®æ§é åãã¯æ±ºããŠæ°ããããŒãã§ã¯ãªãããããŸã§ã«ãæ§ã ãªææ³ãææ¡ãããŠããŸãããã§ã¯ Faceted Prompting ã¯ãããããšã©ãéãã®ã§ããããã
ð æ¯èŒè¡š
| ææ³ | æŠèŠ | Faceted Promptingãšã®æ ¹æ¬çãªéã |
|---|---|---|
| ð Decomposed Prompting | ã¿ã¹ã¯ããµãã¿ã¹ã¯ã«åè§£ãã | ã¿ã¹ã¯ã§ã¯ãªããããã³ããæ§é ïŒãªãåéšåãååšãããïŒãåè§£ãã |
| ð·ïž Modular Prompting | XMLã¿ã°ã§1ã€ã®ããã³ããå ãã»ã¯ã·ã§ã³åããã | ã»ã¯ã·ã§ã³ã§ã¯ãªãç¬ç«ãã¡ã€ã«ã«åé¢ãã宣èšçã«åæãã |
| ð Prompt Layering | ã¹ã¿ãã¯å¯èœãªã»ã°ã¡ã³ãã§ããã³ãããæ§ç¯ | ããã¯ç®¡çããŒã«ã«å¯ã£ãèãæ¹ã§ãèšèšãã¿ãŒã³ãšããŠã®é¢å¿åè§£ã®ååããªã |
| ð PDL (IBM) | YAMLããŒã¹ã®ããã³ããèšèª | PDLã¯å¶åŸ¡ãããŒã«çŠç¹ãåœãŠãŠãããé¢å¿ã®åè§£ãã®ãã®ã¯å¥ã®èª²é¡ |
| ð Role / Persona Prompting | ãšãŒãžã§ã³ãã«åœ¹å²ãå²ãåœãŠã | Personaã¯5ã€ã®é¢å¿ã®ãã¡1ã€ã«éããªãã圹å²ã ãã§ã¯åå©çšæ§ãæ ä¿ã§ããªã |
ð§ åè§£ã®è»žãéã
ð ãã®å³ã®ãã€ã³ã
æ¢åææ³ã¯ãã¿ã¹ã¯ããæ§é ãã圹å²ããšããç°ãªã軞ã§åè§£ããŠããã®ã«å¯ŸããFaceted Promptingã ãããé¢å¿ïŒãªããã®éšåãååšãããïŒããšãã軞ãæç€ºçã«å°å ¥ ããŠããŸãã
nrsæ°ã¯ãã®éããæ¬¡ã®ããã«è¡šçŸããŠããŸãã
æ¢åææ³ã¯ã¿ã¹ã¯ãåè§£ããããããã³ããã®æžåŒãæŽçãããã®ã©ã¡ããã«éç¹ããããããã«å¯Ÿã㊠Faceted Prompting ã¯ãããã³ããã®åéšåã ããªãååšãããããšããåãã§åè§£ ããç¬ç«ããåå©çšå¯èœãªåäœã«èœãšã蟌ãã
ãã®ããªãããšããåãã¯ããœãããŠã§ã¢èšèšã«ãããé¢å¿ã®åé¢ãšåãåå ã§ãããã¡ã€ã«ãåããã®ã¯è¡æ°ãæžããããã§ã¯ãªãã倿Žã®çç±ãåé¢ãããããåãããšãããã³ããã«ãåœãŠã¯ãŸããŸãã
âš Faceted Promptingãå°å ¥ããå®çšçãªå©ç¹
ãããŸã§ã®è°è«ããŸãšãã圢ã§ãå®åã«Faceted Promptingãå°å ¥ããå Žåã®å©ç¹ãæŽçããŠãããŸãã3ã€ã®ç«å ŽïŒäœè ã»ããŒã ã»ãšã³ãžã³ïŒããèŠãŠãããŸãã
ð§âð» ã¯ãŒã¯ãããŒäœè ã«ãšã£ãŠ
| ã¡ãªãã | 説æ |
|---|---|
| ð¯ 倿Žã®å±æå | ã³ãŒãã£ã³ã°ããªã·ãŒãå€ããããšã㯠policies/coding.md ã®1ãã¡ã€ã«ã ããç·šéããã°ããããåç
§ãããã¹ãŠã®ã¯ãŒã¯ãããŒã«åæ ããã |
| ð§± çµã¿åããã§æ§ç¯ | æ¢åã³ã³ããŒãã³ãã®çµã¿åããã§æ°ããã¯ãŒã¯ãããŒãæ§ç¯ã§ããããŒãããæžãå¿ èŠããªã |
| ð§ èªç¥è² è·ã®äœæž | ãã¡ã€ã«ããšã«åäžè²¬åã«éäžã§ãããããæžããªãããããã¯ããã«æžãã¹ããããšè¿·ãæéãæžã |
| ð ã¬ãã¥ãŒãããã | 倿Žã®å·®åãé¢å¿åäœã«åãããã®ã§ãã¬ãã¥ã¢ãŒãæå³ãèªã¿åãããã |
ð¥ ããŒã ã«ãšã£ãŠ
| ã¡ãªãã | 説æ |
|---|---|
| ð ãããžã§ã¯ãéæšæºå | åãããªã·ãŒããããžã§ã¯ãããŸããã§å ±æã§ãããã¹ã³ãŒãåç §ã䜿ãã°ãã³ããŒããããªããŠãã |
| ðš 圹å²åæ | ãã¡ã€ã³å°éå®¶ã Knowledge ã®ç®¡çãæ åœããã¯ãŒã¯ãããŒèšèšè ã Instruction ã®ç®¡çãæ åœããããšãã£ã忥ãæç«ãã |
| ð ç¬ç«ããã¬ãã¥ãŒ | ããããã®é¢å¿ãç¬ç«ããŠã¬ãã¥ãŒã§ãããããã¬ãã¥ã¢ãŒã®èªç¥è² è·ãäžãã |
| ð ãªã³ããŒãã£ã³ã° | æ°ã¡ã³ããŒããã¡ã»ããã1ã€èªãã ãã§ããã®ãããžã§ã¯ãã®ã³ãŒãã£ã³ã°èŠçŽããçè§£ã§ãã |
ð§ ãšã³ãžã³ïŒcomposerïŒã«ãšã£ãŠ
| ã¡ãªãã | 説æ |
|---|---|
| ð² æ±ºå®è«çãªçµã¿ç«ãŠ | åãã¯ãŒã¯ãããŒå®çŸ©ãšåããã¡ã»ããããã¯ãåžžã«åãæçµããã³ãããåŸããããããã¯åçŸæ§ãšãããã°å®¹ææ§ã«çŽçµãã |
| ð é 眮æé©å | recency广ã®ãããªçµéšåãããšã³ãžã³åŽã§äžå çã«é©çšã§ããããŠãŒã¶ãŒãé åºãæèããå¿ èŠããªã |
| ð§ ã«ã¹ã¿ãã€ãºèªç±åºŠ | ç¹å®ã®ã¹ãããã ãç¹å®ã®ãã¡ã»ãããå·®ãæ¿ãããçç¥ãããããããšããä»ã®ã¹ãããã«åœ±é¿ãäžããã«ã§ãã |
| ð å°æ¥ã®æé©å | ãšã³ãžã³ã®é 眮æŠç¥ãæ¹åãããã°ãæ¢åã¯ãŒã¯ãããŒã¯å€æŽäžèŠã§æ©æµãåãããã |
â ïž å°å ¥ããåã«ç¥ã£ãŠããããæ³šæç¹
äžèœãªèšèšãã¿ãŒã³ã¯ååšããªãã®ã§ãFaceted Promptingãå°å ¥ããåã«é ã«å ¥ããŠããããæ³šæç¹ãæŽçããŠãããŸããå ã ãã§ãªã圱ãçè§£ããŠããããšã§ãé©åãªå Žé¢ã§ã ã䜿ã倿ãã§ããŸãã
ðž åæã³ã¹ãã¯ãŒãã§ã¯ãªã
æ¢åã®ã¢ããªã·ãã¯ãªããã³ããã5ã€ã®ãã¡ã»ããã«åè§£ããäœæ¥ã¯ãçŽç²ãªçœ®ãæãäœæ¥ãšã¯èšãåããŸãããäŸãã° Policy ãš Knowledge ã®å¢çãåŒã ã®ã¯ãæ¢åã®ããã³ãããèªã¿ãªããäœåºŠãæšæ²ãå¿ èŠã§ããæåã¯æéãããããšèŠæããŠãããã»ããããã§ãããã
ð¡ æ®µéçãªå°å ¥ããããã
ãããªãå šã¯ãŒã¯ãããŒãFacetedåããã®ã§ã¯ãªãããŸã1ã€ã®ã¯ãŒã¯ãããŒããã€ãããçã«åè§£ããããŒã å ã§æå¿ãã確èªããŠããæšªå±éããã®ãçŸå®çã§ãããªãã¡ã¯ã¿ãªã³ã°ã®äžè¬çãªã»ãªãªãŒãšåãã§ããåããŠãããã®ã厩ãããæ°ãã圢ã§äžŠèµ°ããããã»ããå®å šã§ãã
ð å°èŠæš¡ãªãããžã§ã¯ãã§ã¯éå°ã«ãªããã
ããã³ããããŸã æ°åè¡ã§ãã¯ãŒã¯ãããŒã1ã€ãããªã段éã§Faceted Promptingãå°å ¥ããã®ã¯ãèšèšãã¿ãŒã³ãšããŠã®æ©æµãã管çã³ã¹ãã®ã»ããäžåã å¯èœæ§ããããŸããè¥å€§åãåå©çšã®æ¬²æ±ãé¡åšåããŠããå°å ¥ããããšããé åºã®ã»ããèªç¶ãããããŸããã
| ð å€å®åºæº | å°å ¥ãã¹ãã? |
|---|---|
| ã¯ãŒã¯ãããŒ1ã€ã»ããã³ãã50è¡ä»¥äž | â ãŸã æ©ã |
| ã¯ãŒã¯ãããŒ2ã3åã»å ±ééšåãã | ð¡ æ€èšã®äŸ¡å€ãã |
| ã¯ãŒã¯ãããŒ5å以äžã»ã³ãããçºç | â åŒ·ãæšå¥š |
| ããŒã 暪æã®ããã³ããéçš | â ã»ãŒå¿ é |
ð åæåŸã®ããã³ãããæ€èšŒããç¿æ £ãã€ãã
composerãæ±ºå®è«çã«çµã¿ç«ãŠãŠããããšã¯ãããæçµçãªããã³ãããæ¬åœã«æå³ã©ããã®å 容ã«ãªã£ãŠããã ã¯ããšãã©ã確èªããå¿ èŠããããŸããå ·äœçã«ã¯æ¬¡ã®ãããªéçšãããã§ãããã
- ð
facet composeã®åºåã ç®èŠç¢ºèª ããïŒç¹ã«å°å ¥åæïŒ - ðž ã¹ãããã·ã§ãããã¹ã ã§ããã³ããã®å·®åã管çãã
- ð ããã³ããã®å·®åãCIã§æ€ç¥ããæå³ããªãå€åãé²ã
ð€ Policy vs Knowledgeã®å€æã¯ããŒã ã§æãã
èšè¿°çãèŠç¯çãããšããåºå¥ã¯æç¢ºãªååã§ãããçŸå Žã§ã¯ ã°ã¬ãŒãŸãŒã³ ãçºçããŸããããã®èšè¿°ã¯PolicyãšKnowledgeã®ã©ã¡ãã«çœ®ãã¹ãããã®å€æåºæºãããŒã ã§åæããŠãããšãã¬ãã¥ãŒæã®èªèéœéœ¬ãæžããŸãã1ããŒãžã®ã¬ã€ãã©ã€ã³ã§ååã§ãã
ð ã¬ã€ãã©ã€ã³ã®æå°æ§æäŸ
- Knowledge ã¯ããã®ãããžã§ã¯ãã§ã¯ãã«ãªã£ãŠããããšæžãæãããããèªåãã
- Policy ã¯ãã©ã®ãããžã§ã¯ãã§ãããã¹ãããšæžãæãããããèªåãã
- ã©ã¡ãã«ãåœãŠã¯ãŸãå Žåã¯ãããŒã ã§åå©çšãããåŽã«å¯ãã
ð¯ ãŸãšã
Faceted Promptingã®èŠç¹ãããã®èšäºã®æµãã«æ²¿ã£ãŠæ¯ãè¿ããŸãã
ð æ žå¿ãã€ã³ã
- ð¥ ã¢ããªã·ãã¯ãªããã³ããã«ã¯3ã€ã®æ§é çåé¡ããã â åå©çšäžå¯ã»æé»ççµåã»è²¬ä»»æåšäžæããããã¯è¡šé¢çã«ã¯å¥ã ã®çç¶ã«èŠãããããã¹ãŠãé¢å¿ãåé¢ãããŠããªãããšããæ ¹æ¬åå ããæŽŸçããŠãã
- ð Faceted Promptingã¯é¢å¿ã®åé¢ãããã³ããèšèšã«æã¡èŸŒããã¶ã€ã³ãã¿ãŒã³ â ããã³ããã Persona / Policy / Instruction / Knowledge / Output Contract ãšãã5ã€ã®ç¬ç«ããé¢å¿ã«åè§£ãã
- ð Knowledge ãš Policy ã¯ãèšè¿°çãèŠç¯çãããšãã軞ã§åºå¥ãã â Persona ãš Instruction ã¯ã誰ãšããŠæ¯ãèããããšããã®ã¹ãããã§äœãããããã§åºå¥ãããå¢çãææ§ã«ãªããšãã¡ã»ããã®åå©çšæ§ã厩ãã
- ð é 眮æŠç¥ã¯recency广ã«åºã¥ã â Policyãuser messageã®æ«å°Ÿã«çœ®ãããšã§éµå®ããããããªãããã®æé©åã¯composerãæ±ºå®è«çã«è¡ããããäœè ã¯æèããå¿ èŠããªã
- ðŒ 宣èšçãªåæã§çµã¿ç«ãŠã³ã¹ãããŒãã«ãªã â TAKTã®YAMLå®çŸ©ã
faceted-promptingnpmããã±ãŒãžã®compose()APIã䜿ãã°ããã¡ã»ããã®çµã¿åããã宣èšããã ãã§åæãå®çµãã - âïž æ¢åææ³ãšã®éãã¯ãã©ã®è»žã§åè§£ãããã â Decomposed / Modular / Role Promptingã¯ã¿ã¹ã¯ãæ§é ã圹å²ã§åè§£ããããFaceted Promptingã¯ãé¢å¿ããšãã軞ã§åè§£ãã
ð± çºå±çãªãããã¯
ãã®èšäºã§ã¯æ±ããŸããã§ããããFaceted Promptingãæ·±ãéçšãããšããã«èžã¿èŸŒããè«ç¹ãããã€ããããŸãã
| ããã㯠| å 容 |
|---|---|
| ð°ïž ããŒãžã§ã³ç®¡ç | ããªã·ãŒãæ¹èšããããšããéå»ã®ã¯ãŒã¯ãããŒã®åçŸæ§ãã©ãæ ä¿ããã |
| ðž ã¹ãããã·ã§ãããã¹ã | composerã®åºåãã¹ãããã·ã§ããåããŠããã¡ã»ãã倿Žã®åœ±é¿ç¯å²ãå¯èŠåãã |
| ð ããŒã éã§ã®ãã¡ã»ããå ±æ | ã¹ã³ãŒãåç §ãæŽ»çšãã瀟å ããã±ãŒãžåã®éçš |
| ð åçãªãã¡ã»ããéžæ | å®è¡æã®ç¶æ³ã«å¿ããŠãcomposerã«æž¡ããã¡ã»ãããæ¡ä»¶åå²ã§åãæ¿ããèšèš |
| 𧪠ãã¡ã»ããåäœã®è©äŸ¡ | åå¥ã®ãã¡ã»ãããã©ãã ãLLMã®æåã«åœ±é¿ããããæž¬å®ããä»çµã¿ |
ãããããããã§ç޹ä»ããåºæ¬ååã®äžã«ä¹ãå¿çšçãªè©±é¡ã§ããåºç€ã身ã«ã€ãããããã²èžã¿èŸŒãã§ã¿ãŠãã ããã
ð æåŸã«äžèš
Faceted PromptingãæããŠãããæã倧ããªæèšã¯ããããã³ããããœãããŠã§ã¢ãšåãèšèšååã§æ±ããã ãšããäºå®ã ãšæããŸããLLMã䜿ãä»äºã¯ãèªç¶èšèªãæ±ããããã«ææ§ããåãå ¥ããã¡ã§ããã管çã®èгç¹ã§ã¯éåžžã®ã³ãŒããšåãèŠåŸãéçšããŸããããããææ§ãªäžçã§åãããããã管çåŽã¯æ±ºå®è«çã§åçŸå¯èœã§ããå¿ èŠãããããšãèšããã§ãããã
ð åè
- ð Faceted Prompting: AIããã³ããèšèšã®ã¢ãžã¥ãŒã«åã¢ãŒããã¯ãã£ïŒZennïŒ â èè nrsæ°ã«ããå šäœè§£èª¬èšäº
- ð nrslib/faceted-promptingïŒGitHubïŒ â TypeScriptå®è£ ã®ã©ã€ãã©ãªãšCLI
- ð Faceted PromptingïŒnrslib.comïŒ â èè å人ããã°ã§ã®è§£èª¬
- ð nrslib/taktïŒGitHubïŒ â èè ãéçºããã¯ãŒã¯ãããŒå®è¡ãšã³ãžã³
