asyncio重构Flask接口:并发等待缩短3.2倍响应时间
一个内部工单系统的列表接口,在日均调用量2万次时P95延迟飙到1.8秒,数据库连接池被打满。我用asyncio配合httpx和asyncpg,把三个串行的HTTP调用和两次SQL查询改造成并发协程,顺手解决了事件循环中同步阻塞的坑。改造后P95降至560ms,依赖服务超时不再拖垮主流程。这篇文章记录完整的重构过程、对比代码和压测数据,包括asyncio.Semaphore限流、awaitable与
LangChain+AutoGPT架构手写Agent:循环控制与记忆管理的7个关键坑
上周在电商智能客服场景中,我用LangChain 0.1.0重写了一个基于AutoGPT思路的Agent,处理2000条真实用户咨询时,任务完成率从纯Prompt工程的63%提升到89%。但这中间踩了记忆膨胀、工具死循环、错误恢复策略失效三个大坑。本文不聊虚的,直接给你看一个能跑的最小Agent代码,包含工具注册、Token级记忆裁剪、最大迭代保护、异常隔离四个模块,并附上压测数据(QPS=12.
Python异步编程:用asyncio把API响应时间从3.2秒压到0.4秒
一个后台管理系统的列表接口,因为串行调用外部服务,响应时间飙到3.2秒。我用asyncio重构后,降到0.4秒,QPS从50提升到400。这篇文章记录完整过程:从同步代码的问题分析,到async/await改造,再到信号量限流、超时控制、连接池复用这些坑。版本是Python 3.10.9 + FastAPI 0.95.2 + httpx 0.24.1。如果你也遇到IO密集型的性能瓶颈,这篇文章应该
LangChain与AutoGPT思想碰撞:手写轻量AI Agent的五个核心机制
当AutoGPT的自主循环遇上LangChain的工具调用,我们能否用300行代码实现一个可用的Agent?本文记录了一次真实开发经历:基于LangChain 0.1.0与GPT-4-turbo,手写了一个支持工具注册、短期记忆、异常自愈与步数限制的Agent内核。在“查询数据库并发送邮件”的测试场景中,该Agent在6轮对话内完成任务,工具调用成功率97%,对比直接调用LLM的基线方案,错误率下
Milvus与Qdrant选型实测:千万级向量下的部署、性能与资源博弈
在千万级128维向量、QPS约200的实时检索业务中,我对Milvus 2.4.1与Qdrant 1.9.0进行了全流程对比。从Docker部署到性能压测,Qdrant在单机8C16G下P99延迟稳定在12ms,而Milvus在同等资源下P99达到35ms,但Milvus在批量写入(5000条/批)时吞吐量高出Qdrant约40%。本文记录了两者的配置参数、资源占用曲线及一个诡异的“内存不释放”坑
LangChain与AutoGPT思想融合:手写轻量级Agent的六个关键实现
当AutoGPT的自主循环遇到LangChain的工具抽象,我花了3天在Python 3.11环境下用两者思想手写了一个120行核心代码的Agent。它能在MMLU子集上完成87%的工具调用准确率,单次任务平均耗时2.3秒。本文将拆解工具定义schema、基于消息窗口的记忆压缩、三次重试熔断机制以及while循环的退出条件设计——这些细节决定Agent是“玩具”还是“工具”。不堆砌概念,直接上可运
asyncio重构Flask接口:请求耗时从2.1秒降至0.4秒
我负责的报表服务中,一个聚合三个外部API的接口在压测时P99延迟飙到2.1秒,TPS只有80。在Python 3.10.12环境下,我用asyncio + aiohttp替换了原本基于requests的串行调用,配合信号量限流和超时重试机制,将P99降到0.4秒,TPS提升到320。本文记录了完整的重构过程,包括协程设计、事件循环监控、以及一个差点让我放弃的SSL坑。
Milvus与Qdrant选型实录:千万级向量检索与资源消耗对比
在智能问答系统的语义召回模块中,我们需要从1200万条768维向量中实现毫秒级Top-K检索。本文记录了Milvus 2.4.x与Qdrant 1.9.x在同一批数据、同一台物理机(32C/64G/SSD)下的完整对比:包括Docker部署细节、HNSW索引调参过程、真实QPS曲线以及内存/磁盘占用。实测发现:Milvus在批量写入(5k/s vs 1.2k/s)和吞吐量(单机QPS 1800 v
Prompt Engineering调优实录:实体抽取任务下5轮迭代的token消耗与精度对比
在实体抽取任务中,我针对同一份法律文书数据,设计了5种不同结构的Prompt(零样本、少样本、CoT、Self-Consistency、角色约束),在GPT-4-turbo(1106版本)下分别测试。实验结果显示:角色约束+少样本的组合F1值最高(0.87),但token消耗是零样本的3.2倍;而CoT在复杂嵌套实体上召回率提升11%,但输出延迟增加1.8秒。本文记录了完整的迭代过程、踩坑点和成本
7B模型LoRA微调显存压至16G:Qwen2.5指令遵循提升42%
用一张RTX 4090对Qwen2.5-7B-Instruct做LoRA微调,处理一个客服意图识别+槽位填充的混合任务。经过96小时训练(batch size 128,学习率2e-4),在500条测试集上意图准确率从78.3%提升到91.2%,槽位F1从0.71提升到0.88。同时尝试了QLoRA(4bit NF4量化),训练显存从24G降到14.5G,推理速度仅下降12%。本文记录完整的数据准备
asyncio重构Flask API:请求耗时从380ms降至47ms
某个周末,我负责的订单查询接口在压测时P99延迟飙到1.2秒,数据库连接池被占满,CPU却只有30%利用率。排查后发现罪魁祸首是串行调用三个上游HTTP服务——每个耗时120ms,加起来360ms,加上业务逻辑正好380ms。我用asyncio+httpx重写了这个接口,配合信号量控制并发,P99降到47ms,QPS从80提升到620。本文记录完整的重构过程、代码对比、踩坑经历(包括协程泄漏和Ev
Milvus与Qdrant实测:亿级向量检索资源消耗与延迟对比
在电商图搜业务中,我们对Milvus 2.4.1与Qdrant 1.9.2进行了为期两周的对比测试。使用4096维图像特征向量,1000万条数据规模,在同等资源(8C32G)下,Qdrant的RPS达到3200,P99延迟12ms,而Milvus的RPS为2100,P99延迟19ms。但Milvus在冷数据导入和批量删除场景下表现更优。本文记录了完整的部署参数、性能调优过程和踩坑记录,供选型参考。
FastAPI/Flask压测对比与PySpy定位慢查询的缓存优化记录
某电商订单接口在QPS 200时P99延迟飙至1.8s,通过PySpy现场抓栈确认瓶颈为N+1查询与模板渲染。用SQLAlchemy 2.0的selectinload替代lazy load,配合Redis二级缓存与gzip中间件,最终在wrk压测下QPS从412提升至3200,P99降至87ms。本文记录Flask迁移FastAPI时的性能差异,并给出可直接复用的profiling脚本。
asyncio重构Flask接口,QPS提升3.2倍与CPU占用降40%
一个电商订单导出接口,单次请求耗时3.8秒,并发20时CPU直接飙到85%。用asyncio+httpx重写后,单次耗时降到1.1秒,QPS从32涨到103,CPU稳定在45%左右。本文记录了完整的优化过程:从同步阻塞的requests调用,到异步非阻塞的httpx client,再到信号量控制并发上限,最后用aiofiles做异步文件写入。中间踩了三个坑——协程泄漏、事件循环阻塞、以及async
FastAPI异步改造与Redis缓存:记一次API响应从2.1s到180ms的调优
生产环境某报表接口在300并发下P95延迟飙至2.1s,CPU空闲但数据库连接池被打满。本文记录一次完整的FastAPI性能调优过程:使用py-spy定位GIL锁竞争,通过SQLAlchemy 2.0的`selectinload`消除N+1查询,引入Redis二级缓存并设计缓存击穿保护,最终将P95延迟降至180ms,吞吐量提升4.7倍。文中包含完整的profiling命令、优化前后代码对比及wr
7B模型LoRA微调显存爆炸?QLoRA+4bit量化训练全记录
上周用单张RTX 4090微调Qwen2-7B-Instruct做法律文书抽取,直接全参微调显存爆到24G不够用。改用LoRA后显存降到14G,但训练速度慢得离谱。最后换上QLoRA+4bit NF4量化,显存峰值11.2G,训练速度提升2.3倍,F1从0.82涨到0.87。本文记录完整调参过程,包括torch 2.1.2 + transformers 4.38.1 + peft 0.9.0的版本
React 19与Vue 3.5项目从Props drilling到Zustand/Pinia的迁移实录
在三个中大型项目(React 18+TS、Vue 3.4+setup语法)中,我将跨层级状态从多层Props/Context/Provide-inject迁移至Zustand 4.5与Pinia 2.1。迁移后,组件重渲染次数平均减少63%(React)与58%(Vue),代码行数缩减40%以上。本文记录方案选型对比、分步迁移策略、以及我在React 19 RC环境下遇到的Concurrent渲染
Docker Compose编排三层应用:网络隔离与健康检查的落地实践
生产环境迁移容器化时,我在一个Spring Boot + Redis + MySQL + Nginx的四服务项目上踩遍Compose编排的坑——从卷挂载权限到服务启动竞态,再到健康检查失效导致流量打到未就绪节点。本文基于Docker Compose v2.24 + Docker Engine 24.0,分享一套包含自定义网络、命名卷、显式依赖和健康门控的编排方案。配置后,服务启动耗时从原先的35秒
asyncio重构Flask接口:QPS翻3倍与线程池的取舍实录
一次真实的Web API性能优化:某用户列表接口在QPS 200时P99延迟飙到1.2秒,CPU和内存双双告急。通过引入asyncio + httpx并发调用下游服务,将同步阻塞的requests改为异步IO,QPS从185提升至620,P99从980ms降至210ms,内存占用下降40%。本文记录完整的重构过程,包括asyncio.Semaphore限流、aiohttp连接池复用、以及async
Prompt工程化调优实录:基于GPT-4o的SQL生成任务token成本削减43%
用GPT-4o做自然语言转SQL,基线prompt的准确率仅67%,且单次查询平均消耗1820 tokens。经过五轮结构化迭代(角色注入、few-shot示例、格式约束、自校验链),最终将准确率提升至91%,token消耗降至1040 tokens,响应时间缩短38%。文中记录了完整的实验对比数据、踩坑过程与可复用的Prompt模板,并附上基于OpenAI SDK的自动化评测代码。