用asyncio将Flask API吞吐量提升3倍:协程改造实践与坑点解析
一个基于Flask 2.2.3 + Gunicorn 20.1.0的订单查询接口,在QPS 500时P99延迟飙到800ms,CPU利用率只有30%。通过asyncio 3.10.7配合`async/await`重构IO密集路径,并引入`asyncio.Queue`做限流,最终在相同硬件下QPS提升至1500,P99降到210ms。本文记录完整的改造过程,包含before/after代码、压测数据
7B模型LoRA/QLoRA微调实录:显存从24G降到6G,效果却提升了3.2%
本文记录了一次完整的LLM微调实践,使用LoRA和QLoRA技术对Qwen2.5-7B-Instruct模型进行领域适应训练。在单张RTX 3090(24GB)上,通过QLoRA将显存占用从全参微调的23.5G降至6.1G,训练速度仅下降18%。微调后的模型在代码生成任务上BLEU分数提升3.2%,在特定领域问答准确率从68.4%提升至91.7%。文中详细展示了数据准备、bitsandbytes
Milvus与Qdrant选型实测:千万级向量下的部署与延迟对比
在内容审核场景中,我们需对每日新增的200万条文本向量进行近实时检索。本文基于Milvus 2.4.5与Qdrant 1.9.7,在相同的16C32G裸金属环境下完成部署,并使用500万条768维向量(SGPT-125M生成)进行压测。实测结果显示:Qdrant在P99查询延迟上比Milvus低38%(23ms vs 37ms),但Milvus在批量写入吞吐上反超42%(8.2k QPS vs 4
FastAPI性能调优实录:Profiling定位+SQL优化+Redis缓存,接口从2.1s降到180ms
一个订单查询接口,压测P95延迟2.1秒,QPS仅230。通过cProfile定位到90%时间耗在N+1查询和JSON序列化,用SQLAlchemy 2.0的selectinload重写查询,配合Redis 7缓存热点数据,最终P95降到180ms,QPS提升到2100。本文记录完整的调优链路,包含工具用法、代码改动和压测数据对比,不吹不黑,全是实操。
asyncio重构Flask接口,QPS从120飙到980的完整记录
一个内部报表接口,单次查询需聚合5张表数据,平均响应时间850ms,压测QPS仅120。我用asyncio+aiomysql重写后,响应时间降到96ms,QPS达到980,数据库连接数从50降到8。本文完整记录了这次优化的全过程:从同步阻塞的痛点分析,到asyncio事件循环设计,再到aiomysql连接池配置,最后还有协程并发数调优的实战踩坑。所有代码和压测数据均来自真实项目,Python 3.
Milvus 2.4 vs Qdrant 1.9图像检索实测:吞吐差42%资源占用翻倍
在商品以图搜图场景下,我用10万张128维特征向量对比了Milvus 2.4.1与Qdrant 1.9.2。部署上Milvus采用Docker Compose(含Etcd、MinIO),Qdrant单容器运行。实测Qdrant的RPS达到2140,而Milvus仅1240,但Milvus在P99延迟上稳定在8ms,Qdrant波动至23ms。内存占用Milvus 3.2GB,Qdrant仅1.1G
7B模型LoRA/QLoRA微调实录:显存从80G降到24G的工程化方案
微调7B模型对很多团队来说是一道坎:单卡A100 80G勉强跑Full Fine-tuning,但多卡并行通信开销大、显存瓶颈明显。我基于Llama-2-7B和ChatGLM3-6B分别做了LoRA与QLoRA微调,最终把单卡显存压到24G内,训练速度稳定在1100 tokens/s(单卡A10),推理效果在领域数据集上逼平全参微调。本文记录完整的工程链路:数据清洗、loRA rank选择、量化配
RAG召回率从63%到89%:chunk重构与混合检索调优实录
上周处理了一个医疗问答RAG系统的召回瓶颈问题,基于BGE-large-zh的向量检索在500条测试集上命中率仅63%,且长尾实体问题严重。通过将固定512字符切块改为按语义段落自适应切块(平均长度降至186字符),并引入BM25+向量混合检索(权重0.3/0.7),最终叠加bge-reranker-base重排(取top20重排至top5),命中率提升至89%,幻觉率下降12%。本文记录了完整的
Git工作流重构记:从分支混乱到CI/CD门禁的30天改造
三个月前,我们团队还在为“提交到master的代码让CI红了三天”而焦头烂额。50人的研发团队,每天平均60次提交,代码合并冲突频发,发布前总要花半天手动处理分支。这篇文章记录了我们如何通过引入Git Flow + Trunk Based的混合模式,配合GitLab CI的自动化门禁,将分支生命周期从平均7天缩短到1.5天,代码评审通过率从68%提升到92%,线上故障率下降40%。全文包含完整的`
RAG准确率从61%到89%:chunk、embedding与rerank全量调优记录
在医疗知识库问答项目中,Naive RAG的答案准确率仅61%,主要问题集中在段落截断导致上下文丢失、embedding模型对专业术语表征不足。本文记录一次完整的RAG系统优化:将固定512字符chunk改为结构感知的递归切分,embedding从bge-large-zh切换至text2vec-large-chinese(微调后),并引入bge-reranker-base做两阶段召回。优化后,在2
7B模型LoRA微调实录:显存9.3G与推理幻觉率下降18.7%
本文记录了我用单张RTX 3090对Llama-2-7B-Chat做LoRA微调的全过程。通过QLoRA 4-bit量化,将训练显存峰值控制在9.3GB,微调仅耗时2小时47分(训练集1.2万条指令数据)。最终在领域问答评测集上,BLEU分数从12.6提升至16.8,关键信息幻觉率从22.4%降至3.7%。文中包含完整的Trainer配置代码、loss曲线分析、以及微调前后对同一问题的推理对比,希
RAG召回率从68%到91%:chunk重构与重排序全记录
在构建企业知识库问答系统时,我们遇到了一个典型困境:embedding模型从bge-large切换至bge-m3后,Top-20召回率仅提升3%,但最终答案准确率反而下降。本文记录了完整的优化链路——将固定512字符chunk改为语义感知的递归切分、引入混合检索(BM25+向量)、以及部署bge-reranker重排序。通过A/B测试对比了各阶段在CMRC2018数据集上的命中率变化,并给出了具体
向量数据库选型:Milvus与Qdrant在广告粗排场景下的实测对比
广告召回后的粗排环节需要处理亿级向量、QPS峰值过万。本文基于8核16G内存的物理机,部署Milvus 2.3.3与Qdrant 1.7.3,使用Glove-200d数据集(100万条)压测。结果显示:Qdrant在纯向量查询P95延时低至12ms,Milvus在标量过滤+向量混合查询场景吞吐量高出35%。同时给出各自的Docker部署命令、Python初始化代码,以及高频踩坑点(如Milvus的
React 19与Vue 3.5下从Context到Zustand/Pinia的迁移实录与性能对比
接手一个维护了两年的中后台项目,组件树深度超过8层,Context频繁触发全树渲染,导致列表页输入卡顿(实测输入延迟从180ms飙升至600ms)。本文记录从React Context(或Vue Provide/Inject)迁移至Zustand 4.5(或Pinia 2.1)的完整过程,包含方案选型对比、分步迁移策略(按模块灰度切换)、核心代码改造示例,以及迁移前后的Performance面板数
Git分支策略与CI/CD集成:从混乱到有序的团队协作重构
当5人团队在master上直接开发,平均每天3次冲突、2次误推送,发布前需手动合并2小时。引入Git Flow + 受保护分支 + Jenkins流水线后,冲突率下降90%,发布耗时从2小时缩短至8分钟。本文基于Git 2.39.1、Jenkins 2.414.2、SonarQube 9.9,详细拆解分支策略设计、Code Review强制规则、以及自动化流水线的完整配置,附赠3个真实踩坑记录。
Git分支策略与CI/CD集成:团队协作中的版本控制落地实践
当团队从5人扩张到20人,主分支直接提交导致的代码冲突率飙升300%,发布流程耗时从30分钟延长到2小时。本文基于Git 2.39.1与GitLab 15.11,分享一套经过生产验证的分支策略(Trunk-based + 短生命周期特性分支)、Code Review强制规则(至少2人批准+流水线绿灯),以及Jenkins Pipeline与GitLab CI的双轨集成方案。通过引入pre-comm
Prompt Engineering实测:从7.2%到91.4%准确率的金融意图识别调优全记录
在金融领域意图识别任务中,我通过系统性实验对比了4种Prompt策略:零样本、少样本、结构化输出与思维链(CoT)。在1000条真实用户咨询数据上,准确率从基线零样本的7.2%提升至最终方案的91.4%,单条token消耗从342降至187,成本下降45%。本文记录了完整的实验设计、代码实现与踩坑细节,包括GPT-4o-mini版本下的温度参数敏感性分析、JSON Schema强制输出对解析失败率
asyncio重构Flask API:请求耗时从980ms降至210ms
在一次电商订单导出功能优化中,我使用Python 3.10的asyncio将三个串行HTTP调用改为并发协程,配合httpx.AsyncClient连接复用,将接口P95延迟从980ms压到210ms,吞吐量提升4.2倍。文章会给出完整的before/after代码、asyncio.Semaphore限流细节、以及uvloop替换事件循环的实测数据。如果你是Flask/Django开发者,且接口里
RAG召回率从61%到89%:chunk重构与rerank二阶段调优实录
在私有知识库问答项目中,基线RAG体系(BGE-large + 固定256字chunk)的Hit@5召回率仅61.3%,答案准确率不足五成。本文记录完整调优链路:通过自适应chunk(按Markdown标题与段落切分,窗口重叠64字)将召回率提升至74.8%;切换bge-m3 embedding(输出维度1024)后召回率升至81.2%,但引入bge-reranker-large进行二阶段精排后,
LangChain 0.3手写Agent循环:工具记忆异常全解
当AutoGPT的自主循环在真实业务中频繁陷入死循环或工具调用幻觉时,我决定用LangChain 0.3.7从零手写一个仅200行代码的Agent内核。本文记录了在Python 3.11环境下,如何用Pydantic v2定义严格工具Schema、实现基于Message的滑动窗口记忆、通过try-except重构工具异常并注入ReAct循环。实测在10轮MaxStep限制下,工具调用成功率从Aut