FileGram: Grounding Agent Personalization in File-System Behavioral Traces
Paper: arXiv:2604.04901 Code: synvo-ai/FileGram Code reference:
main@7f6d174f(2026-04-13)
1. Motivation(研究动机)
FileGram 关注的是一个很具体但现有 Agent memory 系统很少正面处理的问题:如果 AI coworker 长期在用户本地 file system 里协作,它不应该只记住“用户说过什么”,还应该从文件操作轨迹里学到“用户怎么工作”。例如用户是先通读再写,还是先搜索再改;喜欢深层目录还是扁平目录;倾向小步迭代还是一次性重写;偏好多模态产物还是纯文本产物。这些偏好不是静态文档内容本身,而是跨 session 的行为模式。
Figure 1 解读:这张 overview 把论文的问题设定讲得很直观:AI coworker 不是在一个孤立 chat 里回答问题,而是嵌入用户文件系统,观察跨 session 的文件创建、重命名、移动、编辑和多模态输出。核心目标是把这些 operation-level 证据 consolidation 成长期 behavioral memory,让 Agent 在未来任务中能主动同步 workspace、推断用户偏好,并给出个性化动作。
现有方法的瓶颈主要有三类。第一,数据稀缺:真实 file-system traces 有强隐私约束,且同时收集 action logs、file snapshots、edit diffs、multimodal outputs 很困难,所以很难构造可控的大规模训练/评测数据。第二,benchmark 偏差:已有 long-memory 或 GUI Agent benchmark 要么偏 conversational recall,要么只测 GUI task success;Table 1 中只有 FileGramBench 同时覆盖 multi-session、multimodal、user profile、explicit memory、fact retrieval、reasoning、knowledge management 和 personalization。第三,方法形态不匹配:Mem0、Zep、MemOS、EverMemOS 等主流 memory architecture 多从 dialogue summary 或 narrative summary 出发,过早把 action counts、directory depth、edit granularity 等底层行为信号压扁成“structured / methodical / comprehensive”这类泛化描述。
这件事值得研究,是因为 file system 是真实个人工作流的长期载体:项目目录结构、命名规则、编辑粒度、归档方式、跨文件引用、图表/文本偏好都包含比对话更稳定的个性化证据。如果 Agent 可以在本地、可控、隐私边界内学习这些行为,它就不只是“记忆事实”,而是能预测用户下一步会如何组织、修改、检索和交付文件。
2. Idea(核心思想)
FileGram 的核心 insight 是:个性化 Agent memory 不应只从 top-down dialogue summaries 中抽象用户画像,而应从 bottom-up 的 file-system behavioral traces 中构建 memory;也就是先保留 atomic actions 与 content deltas,再在 query time 做语义解释。这样可以避免 ingestion 阶段过早总结造成的行为细节丢失。
论文把这个 insight 拆成三个互相支撑的组件:FileGramEngine 生成可控的 profile-conditioned file-system trajectories;FileGramBench 把这些 trajectories 转成 memory-centric QA;FileGramOS 则是 bottom-up memory framework,把每条 trajectory 编码成 Engram,再 consolidated 到 procedural、semantic、episodic 三个 channel。与 EverMemOS / Mem0 这类 narrative-first memory 相比,FileGramOS 的根本差异不是“用更强 LLM 总结”,而是把 action statistics、file content descriptors 和 temporal episodes 分开保存,直到问题到来时才做 query-adaptive composition。
3. Method(方法)
3.1 Overall framework:从 profile-conditioned traces 到三通道 memory
FileGram 的 pipeline 可以理解为“先造可控行为数据,再造评测,再给出一个底层 memory baseline”。
Figure 2 解读:FileGramEngine 的输入是 behavioral profile 与 curated file task,执行过程发生在 profile-isolated workspace 中。原始轨迹里既有真实工具调用,也有 simulation artifact(如 LLM thought / session markers),因此 pipeline 先做 filtering,再把 raw tool traces canonicalize 成 typed atomic actions,并把每个 action 与对应 content snapshot 或 edit diff 绑定。这个设计的关键是“action–content 对齐”:只看 action 只能知道用户做了什么,只看文件只能知道结果是什么,二者结合才解释用户为什么以某种方式完成任务。
3.2 Profile 与 task formulation
论文用 19 个细粒度 profile attributes 描述用户,其中 6 个核心 behavioral dimensions 用 L/M/R 三档离散化:
| Dim | Name | L | M | R |
|---|---|---|---|---|
| A | Consumption Pattern | Sequential deep reading | Targeted search-first | Breadth-first browsing |
| B | Production Style | Comprehensive & detailed | Balanced | Minimal & concise |
| C | Organization Preference | Deeply nested (3+ levels) | Adaptive (1–2 levels) | Flat (root only) |
| D | Iteration Strategy | Incremental small edits | Balanced refinement | Bulk rewrite |
| E | Curation | Selective active cleanup | Pragmatic moderate cleanup | Preservative accumulative |
| F | Cross-Modal Behavior | Visual-heavy | Balanced tables | Text-only |
作者实例化 20 个 profile,并通过两种粒度制造评测难度:细粒度 profile pair 只差 1–2 个维度,用来测 subtle behavioral shift;宏观 pair 差 5 个维度,用来测较容易区分的用户画像。为了避免 profile 过于静态,每个 profile 的 32 条 trajectory 中有 5 条被强制在某个 task-relevant dimension 上移动一个 tier,这些 controlled perturbations 后续用于 Track 3 的 anomaly / shift evaluation。
Task pool 共 32 个任务,覆盖 Understand、Create、Organize、Synthesize、Iterate、Maintain 六类;主文报告 16 个 text-centric 与 16 个 multimodal tasks,初始化 workspace 来自 HippoCamp 的真实个人文件集合,共 615 diverse input files,覆盖 videos、audio、images、spreadsheets、presentations、PDFs 等格式。每个 profile × task pair 产生一条执行组合,因此总计 20 × 32 = 640 trajectories。
Figure 3 解读:这张数据分布图展示了 FileGramEngine 的规模与覆盖面:20 profiles × 32 tasks 产生 640 trajectories,并进一步产出约 10K multimodal output files 与 20,028 atomic actions。它强调评测不是单一任务成功率,而是把 profile coverage、task coverage、input file coverage 和 action coverage 都纳入控制。
3.3 FileGramBench:四条 track 的 memory-centric QA
FileGramBench 包含 4.6K QA pairs,覆盖 procedural、semantic、episodic 三种 memory channel。自动 QA 生成使用 template-based pipeline:MCQ 的 distractors 来自只差 1–2 个维度的 profile pair,以保证不是靠表面差异作答;GPT-4.1 负责把结构化模板转成自然语言问题;open-ended Profile Reconstruction 由 LLM judge 按每个 attribute 的 1–5 Likert rubric 评分。
Figure 4 解读:FileGramQA 的问题分布被组织成四条 track 和九个 sub-task。内圈是 track-level 结构,外圈是具体 sub-task,这种设计让评测既能测“能否识别用户画像”,也能测“能否把行为差异归因到某个维度”。
Figure 5 解读:这张图给出各 track 的代表性题型。Track 1 包括 Attribute Recognition、Behavioral Fingerprint、Profile Reconstruction;Track 2 包括 Behavioral Inference 与 Trace Disentanglement;Track 3 包括 Anomaly Detection 与 Shift Analysis;Track 4 把输入扩展到 rendered documents / images / screen recordings,要求模型从多模态文件或视频中 grounding 用户行为。
四个 tracks 的含义如下:
- T1 Understanding:从同一用户的 条 trajectories 恢复 profile。AttrRec 有 326 个 3-choice MCQ;BehavFP 有 560 个 4-choice MCQ;ProfRec 是 free-form reconstruction,覆盖 6 dimensions / 19 attributes。
- T2 Reasoning:做 pattern-level inference。Behavioral Inference 给 31 条 trajectories、hold out 一个 task,预测 unseen task 上的行为;Trace Disentanglement 给两个用户在同一 task 上的 interleaved events,要求找出主导行为差异。
- T3 Detection:利用每个 profile 的 5 条 perturbed trajectories 测 drift。AnomDet 在 5–6 个 sessions 中找 impostor;ShiftAna 要指出哪个 dimension 朝哪个方向变化。
- T4 Multimodal Grounding:File Grounding 用 rendered PDFs/images 代替 raw text;Visual Grounding 给真实参与者 screen recording 的前半段,预测后续 file operations 与 behavior patterns。
3.4 FileGramOS:bottom-up 三阶段 memory framework
FileGramOS 的设计目标是避免“先总结再检索”的信息损失。直觉上,用户偏好常常隐藏在微观分布里:平均读多少文件、是否反复 revisit、每次 edit 改多少行、目录深度、是否创建 backup、是否把表格转成 visual。若 ingestion 时直接让 LLM 写一句“用户很有条理”,这些统计差异会被抹平;FileGramOS 因此先把每条 trajectory 编码成结构化 Engram,再跨 trajectories 聚合,最后按 query 取出最相关 channel。
Figure 6 解读:FileGramOS 分三步:Stage 1 对每条 trace 做 per-trajectory encoding,三条并行 stream 分别抽取 procedural features、semantic parsing 和 episode segmentation,形成 Engram;Stage 2 做 cross-engram consolidation,把 Engram 拆到 procedural / semantic / episodic 三个 MemoryStore channel;Stage 3 做 query-adaptive retrieval,把结构化 clues 拼成回答上下文。图中可以看到 procedural channel 保存 feature statistics,semantic channel 保存 file metadata / content chunks / style summary,episodic channel 保存 episode clusters 和 anomaly judge 结果。
Stage 1:Per-trajectory Encoding 与 Engram
每条 trajectory 先经过 EventNormalizer,把 raw event type 对齐到 code 中的 ConsumerEventType,包括 file_read、file_write、file_edit、file_search、file_browse、file_rename、file_move、dir_create、file_delete、file_copy、dir_delete、cross_file_reference 等可消费事件。FeatureExtractor.extract_all() 针对 9 个属性抽特征:reading_strategy、output_detail、output_structure、directory_style、naming、edit_strategy、version_strategy、tone、cross_modal_behavior。
然后 compute_fingerprint() 把这些特征压成 17-D vector,覆盖六个 L/M/R 维度:search/browse/revisit ratios,average output length / files created / total output chars,dirs created / max depth / files moved,edits / changed lines / small edit ratio,delete ratios,以及 structured/table/image output counts。Semantic unit 则保存 created files、edit chains、cross-file references、filenames 和 directory diffs;EpisodeSegmenter 用 LLM 在 compact timeline 上找 2–5 个 focus-shift boundaries,并为每段生成 narrative。
关键公式是对每条 session fingerprint 做 per-dimension z-score,并计算到 profile centroid 的距离:
论文设置 ,先用 numeric outlier 检测候选异常,再把 flagged session 交给 LLM Anomaly Judge:
论文公式与 released code 实现差异:论文写的是 分母;released code bench/filegramos/fingerprint.py 的 normalize_fingerprints() 在 std > 0 时做 z-score,在 std == 0 时直接把该维度置为 0.0,没有显式使用 。阈值逻辑与论文一致:compute_deviations(..., threshold=1.5) 使用 。
Stage 2:Cross-Engram Consolidation
EngramConsolidator.consolidate() 接收同一 profile 的多个 Engram,先计算 normalized fingerprints、centroid、per-session distances 与 deviation flags。deviant engrams 在 aggregation 中被 lower-weighted,以免 perturbed trajectory 污染稳定 profile。Procedural channel 用 FeatureAggregator 聚合每个 feature 的 mean / median / std / min / max,并通过 LLM classification 把统计值解释成 profile dimension labels 与 behavioral patterns。
Semantic channel 合并 filenames、directory structures、LLM trajectory narratives,并按 CONTENT_CHUNK_SIZE=800、CONTENT_CHUNK_MAX=50 存储 content chunks。SEMANTIC_BUDGET=8000 控制 sampled semantic evidence 的预算。Episodic channel 则对 episodes 做 clustering,对 trace-level deviations 做 dimension localization,并让 LLM 判断是 task-dependent variation、genuine perturbation 还是 uncertain。
Stage 3:Query-adaptive Retrieval
QueryAdaptiveRetriever.retrieve() 不做全局重排,而是按固定顺序拼接三段 context:Procedural Patterns、Semantic Content、Episodic Consistency。Appendix B.5 与 code 都显示:procedural dimension summary 和 aggregate stats 总是包含;semantic content 用 Cohere embed-english-v3.0 做 top-5 content chunks;episodic channel 返回 behavioral clusters、anomalous sessions 与 top-5 episode narratives。retriever display 默认 RETRIEVER_DISPLAY_CHARS=800,该值也在 Table 14 中被验证为较优 trade-off。
3.5 Released code-grounded pseudocode
def encode_trajectory(raw_events, task_id, trajectory_id, llm_fn):
normalized = EventNormalizer().normalize_all(raw_events)
extractor = FeatureExtractor(normalized)
procedural = extractor.extract_all()
auxiliary = extractor.extract_auxiliary()
fingerprint = compute_fingerprint(procedural) # 17-D behavioral vector
raw_semantic = extractor.extract_semantic_channel()
semantic = build_semantic_unit(
created_files=raw_semantic["created_files"],
edit_diffs=raw_semantic["edit_diffs"],
cross_refs=normalized,
)
if semantic.created_files or semantic.edit_chains:
semantic.llm_encoding = llm_encode_semantic(semantic, procedural, task_id, llm_fn)
semantic.episodes = EpisodeSegmenter(llm_fn).segment(normalized, trajectory_id)
sequence_features = SequenceAnalyzer(normalized).analyze()
return Engram(
trajectory_id=trajectory_id,
task_id=task_id,
procedural=procedural,
auxiliary=auxiliary,
semantic=semantic,
fingerprint=fingerprint,
sequence_features=sequence_features,
)def consolidate_engrams(engrams, llm_fn, tau=1.5):
raw_fps = {e.trajectory_id: e.fingerprint for e in engrams}
norm_fps = normalize_fingerprints(raw_fps)
centroid, distances, deviation_flags = compute_deviations(norm_fps, threshold=tau)
deviation_details = {}
for e in engrams:
if deviation_flags.get(e.trajectory_id, False):
deviation_details[e.trajectory_id] = locate_shifted_dimensions(
norm_fps[e.trajectory_id], centroid, top_k=3
)
weighted_features = weight_deviant_sessions_lower(engrams, deviation_flags)
procedural_aggregate = FeatureAggregator(weighted_features).aggregate_all()
dimension_labels, patterns = llm_classify(procedural_aggregate, llm_fn)
content_chunks = chunk_and_embed_content(engrams, chunk_size=800, max_chunks=50)
episode_clusters = cluster_episode_narratives(engrams, threshold=0.6)
deviation_labels = llm_verify_deviations(engrams, deviation_flags, llm_fn)
return MemoryStore(
procedural_aggregate=procedural_aggregate,
dimension_classifications=dimension_labels,
behavioral_patterns=patterns,
content_chunks=content_chunks,
episode_clusters=episode_clusters,
per_session_distances=distances,
deviation_flags=deviation_flags,
deviation_details=deviation_details,
llm_deviation_analysis=deviation_labels,
)def retrieve_behavioral_memory(store, query=None, disabled_channels=None):
disabled_channels = disabled_channels or set()
parts = []
if "episodic" not in disabled_channels:
n_dev = sum(store.deviation_flags.values())
parts.append(f"## Behavioral Memory Profile ({len(store.engrams)} sessions, {n_dev} anomalous)")
else:
parts.append(f"## Behavioral Memory Profile ({len(store.engrams)} sessions)")
if "procedural" not in disabled_channels:
parts.append(render_procedural_patterns(store.procedural_aggregate,
store.dimension_classifications))
if "semantic" not in disabled_channels:
parts.append(render_semantic_content(store, query=query, top_k=5))
if "episodic" not in disabled_channels:
parts.append(render_episodic_consistency(store, query=query, episode_top_k=5))
if "procedural" not in disabled_channels and "episodic" not in disabled_channels:
parts.append(render_session_table(store))
return "\n\n".join(parts)def filegramos_profile_inference(trajectories, profile_attributes, llm_fn):
adapter = FileGramOSAdapter(llm_fn=llm_fn, config={"ingest_parallel": 4})
adapter.ingest(trajectories) # parallel Engram encoding, deterministic sort, consolidation
channel_context = adapter._retriever.retrieve(adapter.get_store(), query_type="profile")
prompt = SYNTHESIS_PROMPT.format(
n_trajectories=len(adapter.get_store().engrams),
channel_context=channel_context,
attributes_list="\n".join(f"- {a}" for a in profile_attributes),
)
return llm_fn(prompt)Code reference:
main@7f6d174f(2026-04-13) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| Event canonicalization / simulation filtering | bench/filegramos/normalizer.py, bench/filegramos/schema.py | EventNormalizer, ConsumerEventType, SIMULATION_TYPES |
| Per-trajectory Engram encoding | bench/filegramos/encoder.py | EngramEncoder.encode, _build_semantic_unit, _llm_encode_semantic |
| Procedural feature extraction | bench/filegramos/feature_extraction.py, bench/filegramos/fingerprint.py | FeatureExtractor.extract_all, compute_fingerprint, FINGERPRINT_FEATURES |
| Episode segmentation | bench/filegramos/episode.py | EpisodeSegmenter.segment, _detect_boundaries, _generate_narratives |
| Cross-Engram consolidation | bench/filegramos/consolidator.py | EngramConsolidator.consolidate, _llm_classify, _llm_verify_deviations |
| Query-adaptive retrieval | bench/filegramos/retriever.py | QueryAdaptiveRetriever.retrieve, _channel_procedural, _channel_semantic, _channel_episodic |
| Benchmark adapter | bench/baselines/filegramos_adapter.py | FileGramOSAdapter.ingest, infer_profile |
| Evaluation / ablation runners | bench/run_ablation.py, bench/run_cross_backbone.py, filegramQA/run_qa_eval.py | run_qa, run_one, QA evaluation CLI |
4. Experimental Setup(实验设置)
4.1 Data / benchmark scale
实验使用 FileGramEngine 生成的 640 trajectories(20 profiles × 32 tasks),包含 20,028 atomic actions、约 2.5K agent-generated files,并通过 decomposition/rendering 扩展为超过 10K multimodal files。FileGramBench 总计 4.6K memory-targeted QA pairs,九个 sub-task 的规模在 Table 3 注释中给出:AttrRec 326、BehavFP 560、ProfRec 320、BehavInf 560、TraceDis 1,134、AnomDet 815、ShiftAna 288、FileGrd 550、VisGrd 100。
实验输入分三种 setting:Text 使用原始 Markdown agent outputs;Multimodal 将 outputs 渲染成 PDFs/images;Real-World 用 human screen recordings 替换 simulated traces。前两种 setting 的 behavioral event logs 保持一致,video captioner 统一使用 Gemini 2.5-Flash。
4.2 Baselines and metrics
所有方法共享 Gemini 2.5-Flash 作为 QA backbone。对比方法分三组:context methods(No Context、Full Context、Naive RAG、Eager Summ.、VisRAG)、text interaction memory methods(Mem0、Zep、MemOS、SimpleMem、EverMemOS)、multimodal memory methods(MemU、MMA)。
主要指标是 accuracy (%),open-ended sub-tasks 用 LLM judge 的 1–5 Likert 分数重标定为 0–100。额外报告 Tokens In.(每 profile 存储 memory 平均 tokens)和 Tokens Out.(每 query 检索 context 平均 tokens),用于比较 memory 压缩和回答上下文成本。
4.3 Implementation / config details
Released code 的关键配置来自实际文件而非 README 默认值:bench/run_ablation.py 默认 GEMINI_MODEL=gemini-2.5-flash;bench/filegramos/tuning.py 设置 SEMANTIC_BUDGET=8000、RETRIEVER_DISPLAY_CHARS=800、EPISODE_MIN_EVENTS=3、EPISODE_MAX_PER_TRAJECTORY=5、CONTENT_CHUNK_SIZE=800、CONTENT_CHUNK_MAX=50、EPISODE_CLUSTER_THRESHOLD=0.6、PHASE_WINDOW_SIZE=5、BEHAVIORAL_CLUSTER_MAX=3;FileGramOSAdapter 默认 ingest_parallel=4。README 的 evaluation command 使用 python -m filegramQA.run_qa_eval --cache-dir gemini_2.5_flash --api gemini --mode qa --settings 1 2 3 4 --parallel 20。
论文/代码没有详细说明 GPU 型号或本地硬件训练配置;该工作主要是 API-driven data generation / memory ingestion / QA evaluation,而不是神经网络参数训练。论文明确说明 synthetic traces 由 Claude Haiku 4.5 生成;QA phrasing 使用 GPT-4.1;cross-backbone validation 固定 judge 为 Gemini 2.5-Flash。
5. Experimental Results(实验结果)
5.1 Main results on FileGramBench
| Method | In. | Out. | Avg | 关键信号 |
|---|---|---|---|---|
| Full Context | 625.2K | 45.9K | 48.0 | raw evidence 很强,但缺少跨 session aggregation |
| Eager Summ. | 625.2K | 3.7K | 49.5 | narrative summary 保留部分信息,但仍丢微观统计 |
| VisRAG | 609.8K | 10.0K | 51.9 | semantic / layout grounding 强,procedural 仍弱 |
| Mem0 | 119.9K | 3.0K | 33.2 | flat key-value memory 接近随机于行为任务 |
| SimpleMem | 9.3K | 3.5K | 32.9 | token 省但行为辨别能力弱 |
| EverMemOS | 1098.9K | 8.4K | 49.9 | 最强 narrative baseline,但不如 bottom-up structure |
| MemU | 293.6K | 7.9K | 44.4 | multimodal ingestion 不等于行为建模 |
| MMA | 331.8K | 4.5K | 44.7 | VLM captioning 对局部任务有帮助,整体不足 |
| FileGramOS | 109.7K | 4.3K | 59.6 | 三通道 structured memory 最优 |
FileGramOS 在平均 accuracy 上达到 59.6%,比最强 narrative baseline EverMemOS 的 49.9% 高 9.7 pp,同时比 Full Context 少用大量 output context(4.3K vs 45.9K)。具体到 sub-task,FileGramOS 的 TraceDis 为 80.9,AnomDet 为 70.2,FileGrd 为 55.8,VisGrd 为 8.5;VisGrd 仍很低,说明真实 screen recording 的多模态行为 grounding 仍是难点。
Figure 7 解读:qualitative comparison 展示了 narrative-first 方法的问题:Mem0、Zep、MemOS、SimpleMem、EverMemOS 容易把不同 profile 总结成相似的泛化词,而 FileGramOS 保留了分布统计和操作结构,因此能区分例如 directory depth、edit granularity、read/search ratio 这类真正决定个性化行为的证据。
5.2 Ablation and sensitivity
Table 13 的 channel ablation 说明 procedural channel 最关键。Full FileGramOS 在 T1/T2/T3 与 channel 平均上分别为 AttrRec 50.6、BehavFP 35.2、BehavInf 42.1、TraceDis 80.9、AnomDet 70.2、ShiftAna 37.8、Proc 60.1、Sem 55.0、Epi 58.9、Avg 59.6。移除 Procedural channel 让平均分下降 11.1 pp(Δ=-11.1 pp),其中 TraceDis 从 80.9 下降 27.8 pp 到 53.1;移除 Semantic channel 平均下降 5.5 pp(Δ=-5.5 pp);移除 Episodic channel 平均下降 4.2 pp(Δ=-4.2 pp)。
Parameter sensitivity 中,retriever display length 从 300 chars 到 800 chars 把 Tracks 1–3 平均从 53.5 提到 54.5(+1.0),1000 chars 略降到 54.3;context presentation 中,preview 200→400 chars 得 55.2(+0.7),files/task 3→5 得 54.5(±0.0),files/task 3→2 得 53.5(−1.0),加入 edit chain diffs 得 53.2(−1.3),去掉 content previews 得 52.3(−2.2)。作者的解释是:Track 2 主要依赖 procedural statistics,因此对 display 配置近似不敏感;Track 1 更依赖 content-sensitive evidence,所以 800-char preview 是较好的折中。
Cross-backbone validation 表明 behavioral signal 不是单一生成模型 artifact:在相同 FileGramOS memory context 下,Gemini 2.5-Flash 的 Proc/Sem/Avg 为 84.4/80.0/82.8,GPT-4.1 为 82.5/78.3/80.9,Claude Sonnet 4 为 83.8/80.0/82.2,inter-backbone variance 小于 2.0 pp。
5.3 Limitations and takeaways
作者明确列出几个限制。第一,所有 synthetic traces 都由 Claude Haiku 4.5 生成,虽然用 20 个 profile 与 human verification 减轻偏差,但仍可能有单一 LLM 风格统一性。第二,behavioral shifts 是 single-tier perturbation,而真实用户 drift 往往更渐进且多维。第三,32 个 tasks 不覆盖 code development、real-time collaboration、system administration。第四,20 profiles / 640 trajectories 属于中等规模,Real-World setting 的明显性能下降说明 sim-to-real transfer 仍未解决。第五,file-system traces 本身高度敏感,即使 procedural channel 只保存 17-D aggregate fingerprints、semantic channel 保存 descriptors 而非完整文件内容,episodic channel 的 temporal patterns 仍可能被 re-identify;真实部署需要 consent、data minimization、deletion right、access control 与 per-directory opt-in/out。
总体结论是:FileGram 不是证明“现有模型已经会个性化”,而是提出了一个更贴近真实 file-system coworking 的数据/评测/方法闭环。实验显示,单纯扩大 context 或加入 multimodal captioning 不足以解决个性化 memory;真正有用的是把 atomic actions、content deltas、episode structure 分开保留,并在 query time 做结构化组合。