Code Agent 解剖(04):系统提示词是怎么组装的,agent 的「人格」从哪来?
Code Agent è§£åï¼04ï¼ï¼ç³»ç»æç¤ºè¯æ¯æä¹ç»è£ çï¼agent çãäººæ ¼ãä»åªæ¥ï¼
å¬å¥Lab 2026-08-20 0 é 读6åéãäººæ ¼ã䏿¯ä¸æ®µå符串
å¾å¤äººç¬¬ä¸æ¬¡å agentï¼ä¼æèº«ä»½ãå·¥å
·è¯´æã项ç®çº¦å®æè¿ä¸ä¸ªå·¨å¤§ç system_promptãè½è·ï¼ä½é¾ç»´æ¤ï¼æ¹ä¸ä¸ªå·¥å
·ç¨æ³è¦ç¿»æ´æ®µææ¬ï¼å 项ç®è§å伿±¡æå
¨å±äººè®¾ï¼Skills / MCP ä¸åï¼æ´æ®µç¼å失æã
MyCodeAgent æãåç»æ¨¡åç system é¨åãææå¯ç¬ç«æ¼è¿çå å±ï¼ç± runtime/prompt_builder.py ç ContextBuilder ç»è£
ãä¸ä¸ç¯è®²äºæ¨¡åååºæä¹å½ä¸ï¼è¿ç¯è®²è¯·æ±å¦ä¸ä¾§ââæ¨¡åè¿æ²¡å¼å£åï¼å®çè¡ä¸ºè¾¹çä»åªæ¥ã
ç»è®ºå æ¾è¿
åç» LLM ç messages =
[system] Constitution â L1ï¼èº«ä»½ãè¯æ°ãå®å
¨ã工使¹å¼
[system] Tool Contracts â åå·¥å
·çèªç¶è¯è¨ç¨æ³è¯´æ
[system] Project Rules â ä»åºéç code_law.mdï¼è¥æï¼
[system] Runtime Signals â è¿è¡æ¶éç¥åï¼å¯åï¼
[system] Session Memory â 跨轮æè¦åé¦ï¼å¯éï¼å¨ ContextEngine 注å
¥ï¼
+ history æå½±åç user/assistant/tool/...
åå±ï¼å å¯éç session memoryï¼åå¨ä¸èµ·ï¼ææ¯ agent çãäººæ ¼ + è½å说æä¹¦ + 项ç®è®°å¿ãã
å Function Calling çå ³ç³»è¦å 忏 ï¼
| éé | å 容 | èµ°åª |
|---|---|---|
| Tool Contractsï¼æ¬æï¼ | èªç¶è¯è¨ï¼æä¹ç¨ãä»ä¹æ¶åç¨ãååºé¿ä»ä¹æ · | prompts/tools_prompts/*.py â system æ¶æ¯ |
| tools schemaï¼ä¸ä¸ç¯ï¼ | JSON Schemaï¼åæ°åãç±»åãrequired | ToolRegistry.get_openai_tools() â API ç tools= |
æ¨¡åæ¢è¯»ã说æä¹¦ãï¼åæ¿ãæºå¨å¯æ ¡éªçåæ°è¡¨ãã两å¥ä¿¡æ¯äºè¡¥ï¼ä¸æ¯éå¤ç²è´´ã
ç»è£ å ¥å£ï¼ä» Model View 忍
æ¯ä¸æ¥ ReAct æå»ºä¸ä¸ææ¶ï¼ContextEngine.build_model_view() åçäºå¯ä»¥ç®åæï¼
# runtime/context/engine.py â æ¼è£
顺åºï¼ç®åï¼
system_messages = self.context_builder.get_system_messages()
# å¯éï¼session memory åæä¸æ¡ system
messages = system_messages + dynamic_messages + history_messages
history_messages æ¯æå½±åç对è¯äºå®ï¼äººæ ¼å±å
¨é¨æ¥èª context_builderãæä»¥è¯» prompt ç»è£
ï¼å
¥å£å°±æ¯ ContextBuilder.get_prompt_assembly()ã
åå± system æ¶æ¯
# runtime/prompt_builder.py â get_prompt_assembly() æ ¸å¿åå±
# â Constitutionï¼èº«ä»½ä¸è¡ä¸ºå®ªæ³ï¼L1_system_prompt.pyï¼
constitution_messages = [{"role": "system", "content": constitution_text}]
# â¡ Tool Contractsï¼æ« prompts/tools_prompts/*.pyï¼æ¼æä¸ç¯å·¥å
·è¯´æä¹¦
tool_contract_messages = [{"role": "system", "content": "# Tool Contracts " + ...}]
# ⢠Project Rulesï¼è¯»é¡¹ç®æ ¹ç®å½ code_law.md / CODE_LAW.md
project_rule_messages = [{"role": "system", "content": "# Project Rules (CODE_LAW) " + ...}]
# ⣠Runtime Signalsï¼set_runtime_system_blocks() 注å
¥ç临æ¶éç¥
runtime_signal_messages = [{"role": "system", "content": block}, ...]
stable = constitution + tool_contracts + project_rules
all_system = stable + runtime_signals
â Constitutionï¼é»è®¤äººè®¾
æ¥æºï¼prompts/agents_prompts/L1_system_prompt.py éç system_promptã
å®è§å®çæ¯è·¨é¡¹ç®ç¨³å®çä¸è¥¿ï¼ä½ æ¯ CLI coding agentãç¨ Function Calling è䏿¯ææ Actionãæä¹ç¨ Todo / Skills / Taskãè¯æ°è¦çãå®å ¨æç»æ¶æä»£ç ãæ¹ä»£ç åå æ¸æ¸ 约å®â¦â¦
注æä¸ä¸ªæ¼è¿ç迹ï¼L1 ææ¬æ«å°¾è¿æ {tools} å ä½ç¬¦ï¼ç»è£
æ¶ä¼è¢«å»ææ¸
空ï¼
constitution_text = self._load_system_prompt().replace("{tools}", "").strip()
å·¥å
·ç»èå·²è¿å°ç¬ç«ç Tool Contracts å±ï¼é¿å
人设æä»¶åå·¥å
·åè¡¨è¦æ»ãCLI ç --system ä»å¯éè¿ system_prompt_override æ´æ®µæ¿æ¢ Constitutionï¼æ¹ä¾¿å®éªã
â¡ Tool Contractsï¼å·¥å ·çã说æä¹¦ã
_load_tool_prompts() æ«æ prompts/tools_prompts/ï¼å è½½æ¯ä¸ª *_prompt åç¬¦ä¸²ï¼ææä»¶åæåºæ¼æ¥ãä¾å¦ Read ç prompt ä¼åè¯æ¨¡åï¼ç¨è¡å·æ ¼å¼ãæä¹å页ãstatus=partial æå³çä»ä¹ãå«ç¨ catã
ä¸¤ä¸ªå¨æææ§½ï¼
- Skillsï¼Skill å·¥å
· prompt éæ
{{available_skills}}ï¼è¿è¡æ¶æ¿æ¢æå½åæè½ç®å½æè¦ï¼æ¯è½®_prepare_runå¯è½å·æ°ï¼ - MCP / çæï¼MCP å·¥å
·è¯´æè¿½å 为
## MCP Toolsï¼è¢«çæçå·¥å ·è¿½å## Disabled Toolsï¼åå°æ æè°ç¨
tool_prompt_allowlist åªå 载已注åå·¥å
·å¯¹åºç promptï¼é¿å
ãæ³¨åè¡¨éæ²¡æçå·¥å
·è¿åºç°å¨è¯´æä¹¦éãã
⢠Project Rulesï¼è¿ä¸ªä»åºç¹æçè®°å¿
è¥é¡¹ç®æ ¹æ code_law.md æ CODE_LAW.mdï¼æ´æä»¶æ³¨å
¥ä¸º Project Rulesãå
¸åå
容ï¼ç®å½ç»æãå¸¸ç¨æµè¯/æå»ºå½ä»¤ãæ¬ä»åºä¸åéã
Constitution æãæä¹å½ coding agentãï¼CODE_LAW æãå¨è¿ä¸ªä»åºéå ·ä½æä¹å¹²ããæ¢é¡¹ç®åªæ¢è¿ä¸å±ï¼äººè®¾ä¸ç¨æ¹ã
å è½½æ mtime + å
容 hash ç¼åï¼ä½ æ¹äº code_law.mdï¼ä¸ä¸è½®ç»è£
ä¼èªå¨å¤±æé读ã
⣠Runtime Signalsï¼ä¸æ±¡æ user 轮次çéç¥
éè¿ set_runtime_system_blocks() 注å
¥ã设计æå¾æ¯ï¼è¿è¡æ¶æéèµ° systemï¼è䏿¯ä¼ªè£
æç¨æ·å说äºä¸å¥è¯ââåå²è½®æ¬¡è¯ä¹æ´å¹²åã
Session Memory ä¸å¨ PromptAssembly çåå±éï¼èå¨ build_model_view éæå符é¢ç®åæä¸æ¡ systemã宿¯ãè·¨ run çæè¦åé¦ãï¼å稳å®äººè®¾åå±åæ¾ã
æçº¹ä¸ç¼åï¼æ¹åªä¸å±ï¼ä¸ç¼è½çåºæ¥
æ¯å±ç®ä¸ä¸ª SHA256 fingerprintï¼ç¨³å®ä¸å±ååæ system_fingerprintï¼
constitution_fp
tool_contracts_fp
project_rules_fp
â
system_fingerprint â 稳å®å±æ¯å¦åå
runtime_signals_fp â å¯å屿¯å¦åå
ç¨éæäºï¼
- ç¼åï¼fingerprint 没åå°±å¤ç¨
_cached_assemblyï¼é¿å æ¯æ¥éæ«ç£çãéæ¼å¤§æ®µææ¬ - å¯è§æµï¼
trace_model_request_state()æåå± fingerprint æè¿ traceï¼å¹¶æ åºchanged_layersââè°è¯ãè¿è½®æ¨¡åæä¹çªç¶æ¢é£æ ¼äºãæ¶ï¼å çæ¯äººè®¾ãå·¥å ·è¯´æè¿æ¯é¡¹ç®è§ååäº
Skills / MCP / runtime blocks 䏿´æ°ï¼å¯¹åº setter 伿 _cached_assembly = Noneï¼å¼ºå¶ä¸ä¸è½®éè£
ã
æç»é¿ä»ä¹æ ·
䏿¬¡å ¸å请æ±ç messages 头é¨ç±»ä¼¼ï¼
[0] system Constitutionï¼èº«ä»½ä¸æ¿çï¼
[1] system Tool Contractsï¼Read/Edit/Bash/... 说æä¹¦ï¼
[2] system Project Rulesï¼code_law.mdï¼
[3] system ï¼å¯éï¼Session Memory / Runtime Signals
[4] user ç¨æ·é®é¢
[5] assistant + tool_calls
[6] tool è§æµç»æ
...
è¿æ¯ Message List èªç¶ç´¯ç§¯ï¼ä¸æ¯æ§å¼ãæ Thought/Action æ¼è¿ä¸ä¸ª scratchpad å符串ãã对è¯äºå®å¨ historyï¼è¡ä¸ºçº¦æå¨ system å±ï¼ä¸¤è
å¨ build_model_view ææ±åã
设计亮ç¹
- ç¨³å® vs å¯åå离ï¼Constitution / Contracts / CODE_LAW å¯ç¼åï¼Skillsãruntimeãsession memory å¯çæ´æ°
- 人设ä¸é¡¹ç®è§£è¦ï¼æ¢ä»åºä¸»è¦æ¢ CODE_LAWï¼ä¸æ¹ L1
- 说æä¹¦ â schemaï¼èªç¶è¯è¨æçç¥ï¼JSON Schema ç®¡åæ°ââä¸ä¸ç¯è®²åè
æä¹è¿
tools= - fingerprint å¯å®¡è®¡ï¼prompt æ¼ç§»åæå¯å¯¹æ¯çåå¸ï¼è䏿¯ãæè§æ¨¡ååäºã
å°ç»
| å± | æ¥æº | åä¸å |
|---|---|---|
| Constitution | L1_system_prompt.py æ --system | ç¸å¯¹ç¨³å® |
| Tool Contracts | tools_prompts/*.py + Skills/MCP/çæ | å·¥å ·ææè½ååæ¶å |
| Project Rules | code_law.md | éä»åºææ¡£å |
| Runtime Signals / Session Memory | è¿è¡æ¶æ³¨å ¥ | é«é¢å¯å |
agent çãäººæ ¼ã= Constitution çè¯æ°ä¸æ¿ç + Tool Contracts çè½åè¾¹ç + Project Rules çæ¬å°è®°å¿ãç»è£ å¨çå·¥ä½ï¼æ¯æè¿ä¸æ ·ï¼å¤å å°éè¿è¡æ¶ä¿¡å·ï¼ç¨³å®å°æ¾è¿æ¯ä¸æ¥ç Model View 头é¨ã
ä¸ä¸ç¯è¿å ¥å·¥å ·ç³»ç»ï¼æ¨¡åæä¹éè¿ Function Calling çæ£ãçè§ãå¯è°ç¨çå·¥å ·ï¼ä»¥ååæ°å¦ä½èµ°è¿æ§è¡ç®¡éã
å ³äºæ¬ç³»åçæºç
æ¬ç³»åææåæååºäºå¼æºé¡¹ç® MyCodeAgentã
æºç éå·²ç»æç §æ¬ç³»åæç« ç讲解顺åºï¼å¨å ³é®ä½ç½®å å ¥äºé 奿³¨éââ读æç« æ¶å¯ä»¥å¯¹ç §ä»£ç ï¼ä¹å¯ä»¥ç´æ¥å é䏿¥èªå·±è·ãæ¹ãæ©å±ï¼åºäºå®å¼åä½ èªå·±ç agentã
git clone https://github.com/chendongqi/MyCodeAgent
cd MyCodeAgent
cp .env.example .env # å¡«å
¥ä½ ç LLM API key
uv sync
uv run python main.py
欢è¿è®¿é® PrimeSkills ââ ä¸ä¸ªç²¾å¿çåç AI Agent 䏿è½å¸åºï¼ææå 容åç»è¿çå®ä¼ä¸çº§å·¥ä½æµéªè¯ã没æå±å¤´ï¼åªæçæ£ææçä¸è¥¿ã
æ´å¤å®ç¨ç¥è¯åæè¶£äº§åï¼æ¬¢è¿è®¿é®æç个人主页
Aitishiku.com