上下文工程
参考:《AI Agents in Depth》第 2 章:上下文工程 思维导图 mindmap root((上下文工程)) 核心问题 每个决策点让 Agent 看到什么 信息以什么结构出现 如何兼顾正确性、效率与安全 基础认知 Context 是单次推理看到的全部信息 Prompt 只是 Context 的一部分 模型参数提供通用能力 Context 提供任务条件与外部事实 窗口无限也仍需管理信息质量 API 上下文结构 四种消息角色 system:规则与约束 user:任务与追加信息 assistant:历史回复与工具调用 tool:外部工具结果 tools:工具定义与参数 schema Chat Template 转换为 token API 无状态 Agent 框架维护消息轨迹 ReAct 循环 ...
Milvus 从零到面试:RAG 向量数据库原理、架构、索引与选型
一句话回答 Milvus 是一个面向大规模向量检索的开源、云原生数据库。它把向量、标量元数据和索引作为可持久化、可过滤、可扩缩容的数据来管理,适合为 RAG、语义搜索、推荐和多模态检索提供低延迟 ANN 召回。 面试时可以先给出下面这条主线: 文档切块 → Embedding → 写入 Milvus → 对 Query 做 Embedding → 向量 ANN + 元数据过滤/BM25 → 融合与 Rerank → 组装上下文 → LLM 生成。 需要先强调一个容易加分的结论: RAG 不一定必须使用专用向量数据库。 小规模、静态、单机数据可以用 NumPy/Faiss;已有 PostgreSQL 可以先用 pgvector;已有 Elasticsearch 且强依赖全文检索时可以直接做混合搜索。只有当数据量、并发、过滤、实时更新、持久化、高可用或独立扩缩容需求上来后,专用向量数据库的价值才明显。 为什么需要“向量数据库” 这个问题最好从传统关系数据库擅长什么讲起。 MySQL、PostgreSQL 等关系数据库主要面向结构化数据和精确查询。一条典型 SQL 可能是: 1...
RAG 混合检索
一句话回答 混合检索(Hybrid Search)通常是把关键词/稀疏检索与语义/稠密检索并行执行,再通过分数融合或排序融合合并候选集,最后用 Reranker 精排。 稀疏检索擅长精确匹配:专有名词、型号、错误码、人名、数字。 稠密检索擅长语义匹配:同义表达、口语化问题、没有共享关键词的相关文本。 混合检索的目标不是简单地“多查一次”,而是利用两类检索器的互补性,提高 Recall@K,并在精排后提高最终答案质量。 面试时可以先给出下面这条主线: Query 预处理 → 稀疏检索与稠密检索并行召回 → 候选去重与融合 → Reranker 精排 → 上下文组装 → LLM 生成。 为什么需要混合检索 只用一种检索器会有明显盲区。 查询 BM25/关键词检索 向量检索 ORA-01555、iPhone 15 Pro Max 通常很好,能精确命中关键词 可能因罕见 token 或向量平滑而漏召回 “合同到期后还能续多久”与“协议期满可延长三个月” 词面重合少,可能漏召回 能利用语义相近性命中 带数字、版本号、缩写的查询 更稳定 容易忽略数字或细粒度差异...
无标题
H.264 与“闭眼抽帧”学习笔记 在 PPT、网页操作、数据看板这类屏幕录制视频里,不一定要先把每一帧都解码成图像再判断页面变化,而是可以先观察 H.264 压缩码流里的数据包大小变化。编码器本来就已经分析过相邻画面的差异;如果画面很容易预测,压缩数据通常很小,如果画面突然大面积变化,压缩数据往往会明显变大。 所以所谓“闭眼抽帧”,不是完全不处理视频,而是在候选检测阶段不看像素画面,只看压缩数据的时间变化;等找到可能的换页位置后,再解码少量代表帧。 一、为什么这个问题可以从编码数据里找线索 DataAgent 的视频理解任务里,视频内容通常是界面操作、PPT 或类似页面讲解。这类视频有一个很明显的特点:大部分时间画面是静止的,只有在换页、弹窗、表格加载、动画出现时才发生大面积变化。 如果按固定间隔抽帧,会遇到两个问题:一是同一个静止页面会被抽出很多重复帧;二是停留时间很短但重要的页面可能被错过。传统做法是解码所有帧,然后用像素差、直方图、SSIM、感知哈希或视觉模型比较前后画面。这样当然可行,但成本比较高。 H.264 给了另一条线索。它的压缩依赖预测:能从当前画面内部或前后参...
无标题
KDD Cup 2026 DataAgent Top1 ASR 方案学习笔记 这份笔记主要记录我对 DataAgent 赛题中视频 briefing 转写方案的理解。原始方案看起来并不复杂:先把视频里的旁白转成文字,再交给后面的 Agent 去理解任务、操作页面。但真正影响效果的地方不只是“选一个更强的 ASR 模型”,而是语言判断、模型规模、领域上下文、文本归一化和评测口径这些细节如何配合。 一、这个 ASR 模块解决什么问题 DataAgent 的部分任务会给一段 briefing 视频。视频旁白通常会告诉 Agent 当前页面状态、需要操作的表或字段、要关注哪些信息、哪些是干扰项,以及最终要完成什么操作。对 Agent 来说,这段旁白相当于任务说明书;如果转写错了,后面的理解和执行都会被带偏。 整个链路可以简化成: 1briefing 视频 -> 抽取音频 -> ASR 转写 -> 文本后处理 -> DataAgent 执行 这里的 ASR 指 Automatic Speech Recognition,也就是自动语音识别。它负责把语音变成文字。Whi...
记忆系统
该笔记是对于开源项目 ai-agent-book中第三章的内容的个人思考与总结笔记。 本章主线任务是回答Agent 应该记住什么、怎样存、怎样更新、怎样检索,以及如何判断记忆系统真的有用 与第二章的上下文管理不同,本章的记忆系统是一个长期的、跨会话的记忆系统,主要用于存储和检索 Agent 的长期记忆。如何让 Agent 在对话结束后仍然记住用户、记住知识。 学习完本章后应该要能回答: 用户记忆和知识库有什么区别? 为什么不能直接保存全部历史对话? 轨迹、工作记忆、长期记忆有什么区别? 什么信息值得进入长期记忆? 如何判断一个记忆系统是好的? 新信息和旧记忆冲突时怎么办? 四种记忆格式分别适合什么场景? 情景记忆、语义记忆和程序记忆如何转化? 为什么纯文本记忆不擅长聚合、冲突检查和规则执行? 为什么知识库一定要分块? 稠密检索和稀疏检索分别会在哪些问题上失败? 混合检索的三个阶段为什么不能互相替代? HNSW 和 ANNOY 的差异对系统设计有什么影响? recall@k、MRR、nDCG 分别在测什么? 持久化记忆体系 作者认为,持久化记忆体系可以分成两个部分: 一个是用户...
文本编码与tokenizer
文本编码 ASCII编码 标准 ASCII 使用 7 个二进制位,共能表示 128 个字符。 因为 7 位二进制的组合数量是: $$ 2^7 = 128 $$ 编号范围是: $$ 0 \sim 127 $$ 注意,0 到 127 一共有 128 个数,不是 127 个。 例如: A 的 ASCII 码是 65 a 的 ASCII 码是 97 0 的 ASCII 码是 48 ASCII 码 127 是删除控制符 DEL 之所以常说 ASCII 占一个字节,是因为计算机通常以 8 位为一个字节: 10xxxxxxx 标准 ASCII 实际只使用低 7 位,最高位通常为 0。 因此: 编码 位数 编码范围 可表示数量 标准 ASCII 7 位 0~127 128 个 一个字节 8 位 0~255 256 种状态 后来有些编码使用了第 8 位,把范围扩展到 0~255,通常被称为“扩展 ASCII”。但扩展部分并没有完全统一,不同编码页对应的字符可能不同。 一句话记忆: 最大编号是 127,但字符数量是 128,因为还包括编号 0。 无法表示中文等...
开源模型调用
开源模型调用 使用 Hugging Face 的 transformers 库可以比较方便地调用开源大语言模型。为了先把调用链路跑通,这里尽量选择一个小模型: Qwen/Qwen2.5-0.5B-Instruct 这个模型只有 0.5B 参数,适合本地学习和调试。它的能力不能和 7B、14B 甚至更大的模型相比,但胜在下载快、显存占用低、启动成本小。 为什么先选小模型 刚开始学习开源模型调用时,不建议一上来就跑很大的模型,原因是: 大模型对显存要求更高,环境问题会掩盖调用逻辑本身。 小模型启动快,适合反复调试 prompt、tokenizer 和采样参数。 如果只是学习 tokenizer -> model.generate -> decode 这条链路,0.5B 或 1.5B 已经足够。 小模型可以在很多普通 GPU 甚至 CPU 上跑通,虽然 CPU 会慢一些。 模型权重大致显存可以这样估算: $$ \text{显存} \approx \text{参数量} \times \text{每个参数占用字节数} $$ 以 0.5B 参数为例: 精度 每个...
大模型采样参数
temperature和top-p采样 在生成文本时,调整采样策略可以显著影响输出的多样性。两种常用的方法是temperature采样和top-p采样。 temperature和Top-p都是 高->随机,有创造力。 低->确定,偏向保守。 原理 大模型核心任务是预测下一个最可能出现的词,该过程分为生成分数、转换概率、加权采样三个关键步骤。 生成分数 大模型会为其词汇表中所有词(数量通常为几万到几十万)打分,该分数在 AI 领域称为 logit。以用户问题 “可以给我推荐一个讲 ai 的技术频道吗?” 为例,模型会对相关词进行打分,实际应用中通常展示分数最高的前几个词。 转换概率 通过 softmax 函数将分数转换为概率,公式为 $$ \sigma(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} $$ 其中$z_i$为第 i 个词的分数,K 为词的总量。转换后得到每个词的输出概率,使模型能按概率预测下一个词。 加权采样 根据概率生成预测值的过程称为加权采样。将每个词的概率对应分配到 0-100 的数轴区间,生成随机...
语言模型的演化
语言模型最核心的问题其实很简单:给定前面的词,预测下一个词。 $$ P(w_1,w_2,\dots,w_T)=\prod_{t=1}^{T}P(w_t\mid w_1,\dots,w_{t-1}) $$ 但难点在于:上下文可能很长,词表可能很大,语言里还存在大量没有见过的新组合。因此语言模型的发展,基本就是一条不断扩大上下文、改进表示方式、增强长期依赖建模能力的路线。 N-gram模型 N-gram 是最早期、也最直观的统计语言模型。它的核心假设是:预测当前词时,不需要看完整历史,只需要看前面固定长度的 $N-1$ 个词。 例如三元模型(trigram)会把句子概率近似为: $$ P(w_t\mid w_1,\dots,w_{t-1})\approx P(w_t\mid w_{t-2},w_{t-1}) $$ 也就是说,如果我们要预测“学习”,模型只看前面的两个词: N-gram 的训练方式非常朴素:在语料库里数频次。 $$ P(w_t\mid w_{t-2},w_{t-1})= \frac{count(w_{t-2},w_{t-1},w_t)} {count(w_...
