Context Assembly

块定义
system_instruction系统提示。Langfuse/本地模板 + <<占位符>> 替换。记忆检索还会往这里写
contents对话数组。本页重点
tools工具 schema。不进 contents

1. before_model 之前(动态加载)

何时做什么落到哪
HTTP /run若开了系统提醒,把 <system-reminder> 前置进用户原文(写进 session,后面每轮都会带着)当前轮 user 文本最前面
ADK Runner 组请求用 session.events + 本轮 new_message 填 contents尚未规范化的 contents
ADK 拉工具(get_tools)Skill 工具集发现系统 skill + 用户 skill,把目录写进请求级缓存还不进 contents;等 build_and_inject_context 才贴
Router 并行预取记忆 / 知识库 / 会话相关历史 / 时间解析 / 工具预选,和路由模型一起跑请求级缓存或 session.state,等流水线消费

Skill 正文(SKILL.md)不在首轮 preamble 里。只有模型调用 load_skill 之后,正文作为工具返回进 session.events,下一轮重建历史时才出现。


2. before_model pipeline(静态顺序)

每次模型调用都跑一遍

名单是静态的。content_normalization 清空 contents 再按 session.events 重建,所以自己的拼接必须排在它后面。

#步骤代码改 contents?配置
1指标metrics_and_state_reset否—
2追踪observability_init否—
3取消execution_context_callback否—
4web_search 短路ensure_ppl_agent_search_tool_choice否—
5Router 强制选工具router_tool_choice否—
6系统提示 + 记忆占位符prompt_and_memory否。写 system_instruction;记忆结果放请求级缓存inject_dict + 系统提示模板 <<占位符>>。不读 contextSections
7工具定义tool_definitions否。改 tools[]Langfuse 覆盖描述;动态工具召回
8凭据候选抓取credential_context_capture否有凭据文本才抓
9会话相关历史(持久化模式)qrc_persist_inject改 session.eventsqueryRelatedContextInjectorMode=persistent_injection。默认关,走 qrc_inject
10工具预选注入tool_prefilter_inject改 session.eventstoolPrefilter.enabled,sg-test 默认关
11重建滑动窗口content_normalization清空 contents,从 session.events 重建;当前轮补消息时间;文件/图片历史压缩开关关则跳过重建
12转账成功清袋bank_transfer_event_clear条件改bank_event success
13记忆编辑目标memory_edit_target_inject当前轮 user 末尾加 <memory_edit_target>前端预选了记忆才有
14lite 历史改写lite_history_rewrite改历史 tool 形态只 assistant_lite
15权限permission_status_injection否。写入请求级缓存预取有结果才有
16Shopee 账号shopee_account_context_injection否。写入请求级缓存预取有结果才有
17知识库预取knowledge否。写入请求级缓存预取有结果才有
18拼 preamble / query-contextbuild_and_inject_context头部插入 preamble;当前轮 user 文本前拼接 query-context / 知识库contextSections + skills,见 §4
19会话相关历史(默认模式)qrc_inject插到 preamble 后面、滑动窗口前面enableQueryRelatedContext;Router 跳过
20延迟工具名披露deferred_tools_delta头部(或尾部变更提示)加 <system-reminder>tool_search 对当前用户可用
21搜索结果(改写器)inject_search_results_for_synth条件改只 web_search 改写器
22凭据打码credential_context_redaction改文本,不增语义块—
23供应商格式model_adaptation改文本,不增语义块—
24压图compress_oversized_inline_images改图片,不增语义块—
25时间锚点temporal_anchor_callback在「当前最后一条 user」末尾再开一个 part,贴 <temporal_context>temporalAnchor.enabled + agentWhitelist。sg-test 开;Bank UAT 关
26原文再贴一份ensure_user_query_tail时间块后再开一个 part,<recency_query>只贴在「最后一条 user 仍是用户原话」时;工具返回那一轮不贴
27校验截断context_validation_and_limit截断,不增语义块—
28调用次数llm_call_count_limit短路,不增语义块—
29自部署 Routerrouter_self_deployed_adapter短路,不增语义块—

2.1 用户原话,工具返回的注入

不走 pipeline。ADK 写入 session.events,第 11 步拷进 contents。

谁写入 events形态
用户原话runner.run_async(new_message=),一次 /run 一条role=user 文本
工具返回ADK 跑完工具后追加,每轮工具一条role=user 的 function_response JSON

3. 具体 context

首轮(用户刚说话,还没调工具)

[0] user    preamble(一段文本里按序):
            <skills> 系统 skill + 用户 skill 目录
            <connectors> 连接器目录(有才有)
            <permissions> 设备权限(有才有)
            <shopee_account_actions>(有才有)
            <user-context> 与当前问句无关的画像/记忆(白名单裁)
[1] model   固定一句确认,给请求缓存当断点
[2..K]      会话相关历史(有召回才有)
[K+1..N]    滑动窗口:更早的 user / model / 工具调用 / 工具返回
[N+1] user  同一个 text part 里从前到后:
            (可能有)<system-reminder>
            <query-context>
              <queryed_profile> 跟当前问句相关的画像/记忆
              <queryed_memory>  预取的详细记忆(实验组)
            <knowledge-context> 或 Bank 资源知识库(有才有)
            <msg_time>
            用户原文
            后面另开的 part(有才有):
            <memory_edit_target>
            <temporal_context>
            <recency_query>   ← 再 copy 一份原文

4. Bank assistant_professional 配置

位置段名 contextSectionsBank
<user-context>high_level_profile开
<user-context>communication_style开
<user-context>real_time_update_from_chat开
<user-context>chat_messages_memories开
<user-context>memory_retention开
<user-context>user_emails关
<user-context>personal_particulars关
<user-context>state_of_mind关
<user-context>dynamic_context关
<user-context>explicit_memories关
<query-context>time_summary开
<query-context>chat_topic开
<query-context>predicted_query_memory开
<query-context>detailed_profile开
<query-context>fact_memory开
<query-context>truth开
<query-context>contact_list开
<query-context>personal_particulars_details关
<query-context>state_of_mind_schedule关