perf: reduce LLM input tokens by ~50% via prompt deduplication

- Remove JSON appendix from user_prompt (saves ~3000 chars, 85% reduction)
- Consolidate identity: remove English system_prompt identity, merge into agent_prompt Chinese identity
- Simplify system_prompt output rules: keep only Language Requirement, remove Answer Rules (duplicate with agent_prompt)
- Enhance follow-up context: include more divination_derived fields (changing_yaos, fushen, wu_xing, etc.)
- Fix bug: lowerName -> lower_name in user_prompt (Pydantic snake_case)
- Update tests to reflect new prompt structure
This commit is contained in:
qzl
2026-04-14 11:18:59 +08:00
parent 6bc9c88ce8
commit dc66afb5a8
6 changed files with 227 additions and 73 deletions
+16 -5
View File
@@ -321,16 +321,27 @@ class AgentScopeRunner:
run_input: RunAgentInput,
derived_divination: DerivedDivinationData | None,
) -> list[Msg]:
if derived_divination is not None:
user_text = build_divination_user_prompt(derived=derived_divination)
else:
_, latest_user_text = extract_latest_user_payload(run_input)
user_text = latest_user_text
if derived_divination is not None and context_messages:
last = context_messages[-1]
if last.role == "user":
context_messages[-1] = Msg(
name=last.name,
role=last.role,
content=user_text,
)
return context_messages
if context_messages:
last = context_messages[-1]
if last.role == "user":
return context_messages
_, latest_user_text = extract_latest_user_payload(run_input)
if derived_divination is None:
user_text = latest_user_text
else:
user_text = build_divination_user_prompt(derived=derived_divination)
user_blocks = [{"type": "text", "text": user_text}]
if (
user_blocks