Claude Code 上下文管理机制详解
Claude Code 上下文管理机制详解 Generated by Claude Code. 目录 上下文窗口基础 上下文中都装了什么 自动压缩机制 (Auto-Compaction) CLAUDE.md 的加载与持久性 文件读取与工具结果管理 子代理 (Subagent) 的上下文隔离 持久化记忆系统 (Auto Memory) Token 计数与预算管理 会话管理与检查点 其他优化机制 最佳实践 深入实现:Memory 机制的内部工作原理 1. 上下文窗口基础Claude Code 使用底层 Claude 模型的上下文窗口限制: 模型 标准上下文窗口 扩展选项 Opus 4.6 ~200K tokens 1M tokens (opus[1m]) Sonnet 4.6 ~200K tokens 1M tokens (sonnet[1m]) Haiku 4.5 较小窗口 无扩展选项 上下文窗口是一个共享资源,所有内容——对话历史、文件内容、系统提示、工具定义——都在同一个窗口内竞争空间。没有独立的 “token 预算” 设置,Claude Code...
没啥写的,就写个三数之和吧
题目链接详情请见链接: https://leetcode.cn/problems/3sum/description/ 思路假设三个有序的数分别为$a,b,c$,可以用: 排序:首先对输入的数组排序,方便后面遍历 双指针: 针对$a$做第一层遍历。因为要求$a+b+c==0$,且数组已经有序,所以必然会满足$a \leq b \leq c$。接下来: left指针指向$b$,在$a$的下一个数据开始,从左往右遍历。 right指针指向$c$,在数组末端开始,从右往左遍历。 当满足三数之和等于0,而且各自的索引不一样,且这个组合不曾出现(需要避免重复),则可以作为新的一个结果,并移动两个指针。但当: $a+b+c>0$时,我们需要将整体的值变小,如今只有$c$能够变小,因此需要调小$c$,right指针左移,再做判断。 $a+b+c<0$时,同理需要将整体的值变大,如今在第一层遍历中$a$是不可变的,只有$b$能够变大,因此需要调大$b$,即left指针往右移。 两层遍历都完成之后,最后返回结果。 第一次尝试代码123456...
SSH端口转发
本地转发基本设置假设有一个启动在远程服务器的service,提供了访问的端口号,而本地的电脑想访问这个服务。但是可能由于远程服务器无公网地址等原因,无法直接访问到这个服务。这时候就可以通过配置ssh的端口转发,将访问本地端口的所有请求,转发到对应的远程端口。在建立ssh连接时可以这样写命令: 1ssh -L <远程服务的端口号>:<本地的ip(127.0.0.1)>:<本地的端口号> <user>@<server_ip> -p <port> -N 参数说明:-L: 表示将本地的访问请求,通过本地的端口,转发到远程的端口上。-p: 连接ssh的端口,默认是22。-N: 表示不运行shell,让ssh只充当端口转发的隧道。 保持链接上面的设置非常常用,短期用来调试一下没有问题。但是,如果想要ssh连接保持较长时间运行,不会因为空闲停止,就需要设置ServerAliveInterval参数ssh使其能够keep alive。 1ssh -L <远程服务的端口号>:<本地的ip(127.0.0.1)...
白话RAG(二):MemoRAG
1 什么是MemoRAG?MemoRAG,顾名思义就是具有记忆功能的RAG。在传统RAG的工作流上,MemoRAG加入了独特的记忆模块,为后续LLM生成答案提供参考。 2 基本原理下图所谓Memory model,其实就是训练微调了一个小规模的大模型(llama2-7b),去将需要索引的文档知识训练到模型中,然后给出一些clue策略,指导最终答案的生成。 Retriever / Generator也是一个大模型,用于接受提示和小规模大模型生成的clue以及Draft answer,并生成最终的回答。 3 总结MemoRAG将知识训练进一个模型中,创新了RAG的整个工作流。或许提供更多数据训练的条件下,泛化能力有望被提高。
白话RAG(一):GraphRAG
1 GraphRAG到底是什么?GraphRAG是由Microsoft推出的一个基于知识图谱的RAG解决方案。本质上就是综合运用知识图谱中节点、连接关系以及子图的信息构建出来的信息检索方案。 2 Pipeline 2.1 Indexing阶段**第一步:**源文档划分Chunks**第二步:**从Chunks中提取实体**第三步:**实体总结**第四步:**社区总结**第五步:**全图总结 2.2 Query阶段**第六步:**从社区总结中获取社区回答**第七步:**从社区回答到全局回答 3 优缺点3.1 优点 综合了关键的节点信息,使得模型的回答具备可解释性 3.2 缺点 性能一般,建议多点部署 无法方便地增、删、改知识。如果执行这些操作,需要重建整个知识图谱。此issue正在由团队解决。 4 总结GraphRAG采用了知识图谱来辅助生成回答,极大提高了模型回答的可解释性。但是,这个solution还是需要根据知识图谱生成子社区的文字总结,本质上还是text-based的解法。而且若真的落地,还需考虑性能的问题。 4 相关链接GraphRAG论文:https://arxiv...
通过命令行配置Ubuntu源
Ubuntu在国内访问速度过慢,但是国内有众多公司和高校创建的源镜像并提供告诉下载的服务。以华为源为例,本文介绍如何通过命令行的方式更换ubuntu的源,方便更新。 备份原有的配置这是为了防止误操作造成的影响,以便恢复。 1sudo cp -a /etc/apt/sources.list /etc/apt/sources.list.bak 命令行换源很多教程都会推荐使用vim进入sources.list修改,但是这样修改的项目太多。如果要通过命令一键修改,可以参考如下: 12sudo sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.listsudo sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list 更新执行sudo apt-get update,观察是否是从已经修改的源中下载所需的文...
Docker常用命令笔记
创建和启动容器1docker run -it --name=容器名称 镜像名称:标签(版本) /bin/bash 参数说明: -i:运行容器 -t:运行之后进入一个终端 --name:创建名称 -v:映射宿主机的目录 -d:守护式运行容器,也就是说在容器里面exit,容器不会关闭 -p:映射端口 查看正在运行的docker1docker ps 查看所有容器1docker ps -a 删除特定容器1docker rm container_id 进入特定容器1docker attach container_id(allow part) 注意:attach是进入正在运行的容器 1docker container start container_id(allow part) 运行了上面的命令之后,才能attach进去 复制文件复制宿主机的文件到容器1docker cp 宿主机文件路径 <容器名>:容器存储文件的路径 复制容器的文件到宿主机1docker cp <容器名>:容器存储文件的路径 宿主机文件路径 结论:要复制的文件跟在cp的后面,而且...
Ubuntu上管理多版本gcc
上回介绍了多版本CUDA的管理方案。实际上在实现安装不同版本的CUDA之后部署模型时,意外发现了还有不同版本GCC共存的需求。同样,我不想删掉较高版本的GCC,进而寻求解决方案。 准备工作首先查看当前gcc的版本。 1gcc -v 然后查看gcc的安装路径是否已经有其他版本。 1ls /usr/bin/gcc** 未安装多版本之前,我的主机仅有的一个gcc版本号为9,而实际部署需要gcc-8。如果已经满足自己的版本要求,就无需吹毛求疵了。如果不能满足,如版本过低或者过高,就要进行下面的步骤。 安装不同的gcc老规矩在安装或者更新前,先运行 1sudo apt-get update 接着安装gcc-8和g++-8,输入 1sudo apt-get install gcc-8 g++-8 等待片刻即可安装成功。 设置优先级不同于CUDA的自由切换,安装了多个版本的gcc之后,要手动设置优先级,来确定每次使用gcc编译时的版本。而优先级最高的,就是默认使用的gcc。由于当前需要的是gcc-8,不妨把这个的优先级设置高一点。 12sudo update-alternatives ...
多个版本的CUDA在Ubuntu上的共存与管理
在Linux系统上,允许某些工具和软件存在多个不同的版本共存,以便满足不同的开发环境需求。因此,学会如何安装和管理这些工具或者软件的方法有时候也很重要。而在实际开发过程中,CUDA的版本五花八门。为了满足特定的开发环境,通常需要装配不同版本的CUDA。 在已经安装了CUDA 11.1的情况下,由于开发部署需要安装CUDA 10.2,而不想舍弃原有的版本,可以这样做。 下载特定版本直接通过搜索引擎找到对应版本的下载地址即可,10.2版本的可见此处。需要注意的是最好选择runfile(.sh)文件,个人认为兼容性较高,出错概率可能会比较低。也可以直接通过下面的命令,自动获取CUDA 10.2的下载包。 1wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run 安装进入下载的目录,使用sudo sh命令+该文件目录及其名称,即可运行。**需要特别注意的是,当询问CUDA安装的内容时,一定要把Drivers里面的...
Tmux最常用的用法
Cheatsheet Ctrl + c: New a window Ctrl + n: Next window Ctrl + p: Previous window Ctrl + ": Split current window vertically Ctrl + %: Split current window horizontally Ctrl + direction: Transfer among windows Tmux是一个终端窗口管理工具。当需要长时间运行某个命令或者操作时,如果只是单纯地用终端窗口,难免会出现长时间闲置导致断连,或者网络原因导致进程中断等问题。为了解决这些问题,Tmux创建的终端会话支持后台运行命令,而且可以随时调出,方便监控。本文整理了作者常用的相关方法。 启动Tmux1tmux new -s session_name 这样便启动了一个Tmux的Session终端。而平时为了贪图方便,直接在终端窗口输入tmux也未尝不可,但是长远来说不建议养成这样的习惯。没有名字的Session,可能会增加运维成本。 切换session会...








