Go-Sandbox 开发实录 (2):特洛伊木马 —— 如何“黑”进 Python 进程?

在上一篇中,我们确定了“进程级沙箱”的路线。但摆在面前的第一个技术难题是:如何在 Python 进程启动的那一刻,强行插入我们的安全代码? 我们需要在用户代码执行之前,完成 Chroot 和 Seccomp 的设置。如果等到用户代码开始跑了再限制,黄花菜都凉了。 尝试一:直接修改解释器源码? 最硬核的办法是下载 CPython 源码,在 main 函数里加几行代码,重新编译一个 safe-python。 但这太蠢了。 1. 维护噩梦:每次 Python 发新版,我们都得重新打补丁、编译。 2. 不通用:那 Node.js 怎么办?Java 怎么办?难道都要改源码? 我们需要一种非侵入式的方案。 尝试二:LD_PRELOAD? Linux 有个黑魔法叫…

Go-Sandbox 开发实录 (1):为了毫秒级启动,我们放弃了 Docker

做 LLM Agent 开发时,Code Interpreter 是个绕不开的功能。让 AI 写代码容易,但让它安全地运行代码,却是个棘手的工程问题。 在设计 go-sandbox 之初,我们面临的最大抉择就是:到底是用 Docker,还是自己造轮子? Docker 的诱惑与代价 最开始,我们自然而然地想到了 Docker。它成熟、安全、隔离性好。我们尝试为每个代码执行请求启动一个容器: docker run --rm -it python:3.10 python -c "print('hello')" 但在高并发测试中,问题很快暴露了: 1. 慢:即使是热启动,容器的创建和销毁也需要几百毫秒。对于用户来说,…

X99 平台下 Docker 部署全攻略

摘要:手持 X99 平台和一张只有 2GB 显存的 GTX 960,还能玩转 Docker 和 AI 吗?本文详细对比了 Docker Desktop 与 WSL Native 两种部署方案,并深入讲解了最令人头秃的网络代理配置、数据迁移。 X99 平台凭借多核心优势,至今仍是很多开发者的主力机。但当你想在 Windows 上通过 Docker 运行 AI 模型时,往往会面临选择困难症:是装简单易用的 Docker Desktop,还是追求极致性能的 WSL 原生命令行? 本文记录了在 Windows (X99) + GTX 960 (2GB) 环境下的完整折腾记录。 第一部分:路线选择——你属于哪一派? 在…

记一次 X99“洋垃圾”平台的卡顿排查、AI 环境搭建与显卡升级避坑

X99 平台(Xeon E5 v3/v4)凭借极其廉价的服务器拆机配件(如 E5-2696 v3 和 DDR3 ECC 内存),成为了很多技术爱好者和“垃圾佬”组建高性价比工作站的首选。 最近我在折腾一台配置为 E5 CPU + 64GB DDR3 内存 + X99-DM3 主板 + GTX 960 的机器时,经历了一系列从系统卡顿排查,到 WSL2 AI 环境搭建,再到显卡升级选型的过程。本文将详细记录这些坑点,特别是关于Tesla 计算卡与 GeForce 游戏卡的区别,以及一线主板与国产“寨板”的差异,希望能帮到同样在使用 X99 平台的朋友。 第一部分:性能排查——大内存为什么还卡? 1. 误区:…

AWS EventBridge Scheduler 未触发 Lambda排查记录

你是否遇到过这样的情况:在 AWS 上配置了一个 EventBridge Scheduler 来定时运行 Lambda(例如每天定时关闭开发环境的 EC2),调度器状态显示“Enabled”,时间到了却什么都没发生? Lambda 控制台没有报错,CloudWatch 甚至没有生成日志流。一切看起来都配置得天衣无缝,但就是不工作。 本文将复盘一次真实的排查过程,带你找出那个导致任务“静默失败”的隐蔽杀手——IAM 策略中的地区(Region)错配。 问题现象 在本次案例中,我们的目标是:每天晚上自动触发一个名为 StopEC2ByTag 的 Lambda 函数。 环境配置如下: * Region: ap-southeast-1 (新加坡) * Service: Amazon EventBridge Scheduler -> AWS Lambda * Status: Scheduler 显示…

爬虫1:从 HTTP 请求伪装到浏览器指纹的攻防博弈

一、 协议层对抗:当 HTTP head不再管用 长期以来,Python 的 Requests 库统治了爬虫领域。对于简单的任务,它依然有效。但在面对 Cloudflare 等现代防火墙时,开发者常会遇到一个困惑:“明明复制了浏览器所有的 Header,为什么还是被拦截?” 答案往往不在应用层(HTTP),而在传输层(TLS)。 1. TLS 指纹 当爬虫发起 HTTPS 请求时,在发送 HTTP 头之前,必须先完成 TLS 握手。在 ClientHello 数据包中,客户端会发送加密套件列表、TLS 版本、压缩算法以及一系列扩展字段。 * 真实浏览器(如 Chrome、Safari)和编程语言库(如 Python urllib3、…

RAG 进阶之路6:优化策略Small-to-Big、HyDE 与上下文压缩

在前几篇文章中,我们搭建起了 RAG 的骨架:选好了向量数据库(Milvus),配置了强大的语义模型(BGE),甚至解决了时间衰减的问题。 现在,你的 RAG 系统已经能跑通了。但在实际测试中,你可能会撞上一堵无形的墙: * 场景 A: 你问“公司迟到怎么罚款?”,系统搜到了“罚款 50 元”的片段,但 LLM 答错了。因为那个片段太短,丢掉了前面关键的主语——“连续三次迟到者”。 * 场景 B: 用户问“怎么治那个一直在嗓子眼里的病?”,系统搜不到任何结果。因为数据库里的文档写的是专业的“慢性咽炎临床治疗方案”。 这标志着我们进入了 RAG 开发的深水区——检索质量优化(Retrieval Quality Optimization)。 不仅仅是“搜得快”,更要“搜得准”且“读得懂”…

RAG 进阶之路5:Milvus 中实现“时间衰减”

在构建 RAG系统时,我们经常会遇到这样一个尴尬的场景: 用户问:“最新的 iPhone 摄像头参数怎么样?” 你的 RAG 系统兴致勃勃地从数据库里找出了 iPhone 11 的评测文章,因为那篇文章写得非常详尽,和问题的语义相似度(Semantic Similarity)极高。而关于 iPhone 12 的介绍可能比较简短,导致向量距离稍远,被排在了后面。 这就是向量检索的“时效性盲区”。 在 HNSW 或 IVF 这样的向量索引眼里,只有空间距离,没有时间概念。数据一旦写入,它在向量空间的位置就是永恒的。但在新闻、金融或日志分析等场景中,“新”往往比“准”更重要。 那么,在使用 Milvus 或 Faiss 时,我们如何引入时间衰减(Time Decay)…