痛点解析
我们在使用cc/codex的时候会有开始的时候熟悉项目,需要大量检索,才能检索到正确的文件的情况,会消耗大量的token,为了解决这个问题我们有下面四个工具为代表
codegraph:结构化检索关系的代表
核心机制是将代码转变为知识图谱的形式,类/函数等等作为实体,然后他们的关系做边。是我们通过index命令本地构建的索引,核心是sqllite的邻接表,通过这个来表现节点之间的关系
然后毕竟适合符号、调用关系和影响范围分析,因为核心是图,搜索速度快,但是自然语言检索效果不好
fast-context:是windsurf的子代理,是训练模型检索的代表
主要是提供了专门针对检索场景的训练的模型SWE-grep和对应的mini版本,对grep/read/glob等命令更适配,然后检索的效率更高。是强化学习的代表。是语义检索最好的一位,速度也比较快。
ACE:是Augment Context Engine 的上下文机制,
他的核心就是扫描全部工作区的文件,然后将其向量化,上传到云端,本地留有.ace-tool的缓存。
然后进行检索,核心机制是混合检索,语义搜索+不同类型的 ...
常用表达
系统与操作类:
take control of:控制
deal with:安排,处理,涉及
pop up:突然出现
in operation:在运转中;在实施中
rely on:依赖,依靠
execution time:运行时间
memory space:内存空间
硬件与结构类:
consist of / be made up of:由…组成
data structure:数据结构
a piece of:一块;一个
handhold computer:手持计算机
逻辑与连接词(写作极其好用):
in spite of:不管,尽管
at the same time:同时
in particular:特别地
give rise to:引起,使发生
make sense:有意义,很重要
along with:连同…一起
Redis
1.lua脚本如何实现原子性操作
Lua 脚本实现原子性的根本原因,在于 Redis 的单线程命令执行模型。
排他性执行(阻塞队列): 当 Redis 接收到一个 EVAL 或 EVALSHA 命令来执行 Lua 脚本时,它会将整个脚本视为一个**“超级命令”**。在单线程的主事件循环中,一旦这个脚本开始执行,Redis 就会阻塞其他所有客户端的请求。
不可中断: 在脚本完全执行完毕(或达到超时时间)之前,任何其他命令都无法插队到执行队列中。这就保证了脚本内部的 Get、If、Set 等一系列操作是被打包成一个绝对隔离的整体执行的。
对比 Redis 传统事务 (MULTI/EXEC): Redis 传统的事务只是把命令按顺序放进队列,虽然执行时也不会被打断,但它缺乏逻辑判断能力。你无法在 MULTI 中“根据第一步 GET 的结果,决定第二步是否执行 SET”。而 Lua 是图灵完备的编程语言,完美弥补了这一缺陷。
2.lock 与 tryLock 的核心区别
lock():阻塞式重试
语义:一定要拿到锁,拿不到就死等。
底层机制:
尝试通过 Lua 脚本获取锁( ...
liunx操作
1.linux有哪些常用命令?还问了让脚本后台运行的命令是什么?.
ls -lrt: 按时间倒序查看文件。排查日志时,这能让你一眼看到最新的日志文件。
tail -f / tail -n 500: 实时查看日志输出,或者查看最后 500 行。
grep -i "ERROR" app.log: 忽略大小写搜索错误信息。配合 -A (After) 或 -B (Before) 可以看到上下文。
find / -name "config.yaml": 在全盘或指定目录查找文件。
top / htop: 实时监控系统资源。Java 应用 CPU 飙升时,这是第一现场。
netstat -nltp: 查看端口监听情况。常用于确认你的 Spring Boot 服务是否真的启动成功,或者端口是否被占用。
lsof -i :8080: 查看 8080 端口被哪个进程占用。
df -h & du -sh \*: 磁盘空间排查。当日志把磁盘撑满导致 JVM OOM 时,这两个命令能救命。
free -g: 查看内存使用情况。注意 availab ...
基础知识
1.TCP 三次握手的过程
第一次握手(SYN):
动作: 客户端随机生成一个初始序列号 seq = x,设置 SYN 标志位为 1,发送给服务器。
状态转移: 客户端进入 SYN_SENT(同步已发送)状态。
第二次握手(SYN + ACK):
动作: 服务器收到 SYN 包后,也随机生成自己的初始序列号 seq = y,同时确认客户端的序列号 ack = x + 1,设置 SYN 和 ACK 标志位均为 1,发送给客户端。
状态转移: 服务器从 LISTEN 进入 SYN_RCVD(同步收到)状态。
第三次握手(ACK):
动作: 客户端收到服务器的 SYN+ACK 包,为了确认自己收到了服务器的序列号,发送一个 ack = y + 1,序列号 seq = x + 1,ACK 标志位为 1 的确认包给服务器。(此时,这个包已经可以携带应用层数据了)。
状态转移: 客户端进入 ESTABLISHED(已建立连接)状态。服务器收到此 ACK 后,也进入 ESTABLISHED 状态。
为什么需要三次握手?
防止历史(失效)连接初始化造成混乱(最主要原因): 网络 ...
基础问题
1.一条sql语句中各个关键字的执行顺序
但 MySQL/Oracle 等引擎的真实执行顺序如下:
FROM:选择主表
JOIN:连接其他表
ON:连接条件过滤
WHERE:行级别过滤
GROUP BY:分组
HAVING:分组级别过滤
SELECT:提取目标列 / 计算表达式
DISTINCT:去重
ORDER BY:排序
LIMIT / OFFSET:分页限制
2.where 和 group by走索引的过程
WHERE 子句的主要目的是过滤数据。它利用 B+ 树的查找过程分为以下两种典型情况:
等值查询(Point Query): 例如 WHERE a = 1 AND b = 2。
过程: MySQL 引擎会从 B+ 树的根节点开始,利用二分查找法,沿着多级索引页向下遍历。因为 a 和 b 都是等值,B+ 树保证了这两列是绝对有序的,引擎能够以 $O(\log N)$ 的时间复杂度,精确定位到叶子节点中满足条件的数据边界。
范围查询(Range Query): 例如 WHERE a > 1 AND a < 10 AND b = 2。
过程: 引 ...
Claude code设计
背景
claude code具体是干什么的就不用跟大家说了:
那我们从工程的角度去拆解他:
其产品本质可以理解为:
CLI/TUI 外壳
-> 输入编译器
-> 多轮 Agent Loop
-> 模型调用适配层
-> 工具执行器
-> Hook/Permission
-> Session/Transcript/Plan/FileHistory
设计进化
我们从chatbot到真正的agent就是有了工具调用!
但是工具调用又会带来一些问题:
工具注册与发现:谁来管理工具的注册表?如何让模型知道有哪些工具可用?如何在不重启系统的情况下动态添加新工具?
参数校验:谁来校验工具调用的参数?模型可能传递错误类型的参数、缺少必填字段、或传入超出范围的值。校验逻辑放在哪一层?
权限管控:谁来决定某个工具调用是否应该被执行?模型可能要求执行 rm -rf /,这显然不应该被允许。但有些操作在特定上下文中是安全的——如何平衡安全性与效率?
错误恢复:工具执行可能失败,API 调用可能超时,LLM 的输出可能不符合预期格式。每一种错误场景 ...
Agent
未读对话循环
异步生成器
Claude Code 的对话主循环是一个以 async function* 定义的异步生成器。它不是一次性执行完毕的普通函数,而是一个可暂停、可恢复、可取消的"活"的流程。每一次 yield 就像心跳的一次搏动,将流式事件推向调用方。
这个设计选择值得用更多篇幅来理解。在传统的编程模型中,函数调用是同步的:调用者发起请求,被调用者执行计算,返回结果。但 Agent 的交互模式打破了这种同步假设——模型可能需要几十秒才能完成一次响应,而且响应是逐 token 到达的;工具执行可能耗时数分钟,期间需要实时反馈进度;用户可能随时中断操作,要求立即停止。
面对这些需求,传统的函数调用模型力不从心。异步生成器提供了完美的答案:它像一个可以随时暂停和恢复的"协程",在"生产者"(对话循环)和"消费者"(UI 渲染层)之间建立了一条实时的事件管道。
整个对话循环的入口是一个导出的异步生成器函数,它接受一个参数对象,可向外产出五种类型的事件(流式事件、请求开始事件、消息、墓碑消息、工具调用摘要), ...
Agent
未读架构设计
openclaw最近也是非常火爆啊,作为一个这么优秀的智能体来说,我们最关注的就这个agent的上下文和记忆系统是怎么去设计的!
记忆
openclaw设计最好的就是他的记忆完全是由markdown去做的,AI更好的适配Markdown。
主要是有长期记忆和会话记忆组成:
Memory.md:这里是用户的个性记忆,比如喜好,编码记忆等等,其实就是我们coding agent里面的AGENT.MD 一样,这部分记忆是不会被压缩的
会话记忆:是根据会话sessionID来的,一个session里面包含多个时间的文件夹记忆,这里面详细写了Openclaw的执行过程。然后这部分记忆是进行压缩的时候进行写入的
举例:
123456789101112# 核心记忆与设定## 用户偏好 (User Preferences)* 偏好使用 `pnpm` 而不是 `npm` 或 `yarn`。* 极其讨厌在代码里留 `console.log`,提交代码前必须清理。## 项目架构准则 (Project Directives)* **数据库连接:** 这个项目使用的是 TiDB,所有的数据库查询超 ...
背景
在人工智能走向自主智能体(AI Agents)的进程中,2026年标志着一个关键的转折点。过去,行业的焦点集中在提升大语言模型(LLM)的参数量和推理能力上;但如今,瓶颈已经发生了转移——AI智能体生成代码和解决方案的速度,已经远远超过了人类团队能够验证其安全性和正确性的速度。
“Harness工程”最先由业界从2025年底开始提出。它着眼于为AI智能体提供一个完整的运行环境和工作流,使模型使用工具、执行多步任务,真正“做实事
如果一个演示系统有 90% 的成功率,这仅仅是完成了“第一个九”。在实际生产中,一个包含10个步骤的 Agentic Workflow 如果每步只有 90% 的可靠性,那么它每天会失败超过6次。仅靠提示词工程(Prompt Engineering)根本无法达到生产级别的稳定性。
就是说
真正卡你的不是 Agent 写代码的能力,而是围绕它的结构、工具和反馈机制跟不上
不是我们模型的能力限制,是你没准备好给他一个适于写代码的环境!
所以我们的Harness Engineering就是相当于汽车的壳子,模型相当于我们的发动机!
在OpenAI的定义中,harn ...
核心设计
标准 RAG 系统核心模块
我们将 RAG 系统分为数据准备流 (Offline) 和 查询处理流 (Online) 两大支柱模块:
A. 数据准备模块 (Data Ingestion Pipeline)
这是系统的“知识预处理厂”,负责将非结构化数据转化为机器可理解的格式。
加载器 (Document Loaders):对接多种数据源(PDF, Notion, Confluence, SQL)。
清洗与转换 (Clean & Transform):去除噪声(如 HTML 标签)、处理特殊字符。
分块策略 (Chunking Strategy):将长文拆分为固定长度或语义段落,通常带有重叠部分(Overlap)以保持上下文连贯性。
向量化 (Embedding):利用 $BGE$、$text-embedding-3$ 等模型将文本块转化为高维向量。
存储 (Vector Storage):存入向量数据库(如 Milvus, Pinecone, ElasticSearch),并附带元数据(Metadata)以便后续过滤。
B. 核心功能组件
检索器 (Retr ...


























