LangChain与AutoGPT思想融合:手写可观测AI Agent核心循环
本文不讨论概念,直接展示一个基于LangChain 0.2.7与GPT-4o-mini(温度0.2)的Agent实现,重点解决三个真实痛点:如何用Pydantic模型定义带参数约束的工具、如何用有限大小滑动窗口管理超过8k token的对话历史、以及如何设计带最大迭代次数(默认10次)的循环控制并捕获JSON解析异常。代码仓库实测单次任务调用LLM次数从裸写prompt的15次降至7次,成功率从6
FastAPI慢查询调优实录:profiling定位与缓存策略压测对比
接手一个FastAPI服务,单接口响应从200ms恶化到2.3s,QPS从380跌到45。本文记录完整调优过程:先用cProfile和py-spy定位到N+1查询和JSON序列化瓶颈,再通过SQLAlchemy joinedload合并查询、引入Redis缓存热点数据、优化ORM懒加载策略。压测数据对比:P95延迟从2100ms降至180ms,吞吐量提升5.2倍。文末附踩坑记录和通用调优check
asyncio重构Flask接口:并发提升17倍与连接池压测实录
一个基于Flask+Requests的聚合查询API,在QPS 200时P99延迟高达2.3秒,数据库连接频繁超时。通过引入asyncio+aiohttp+asyncpg重构,将阻塞IO替换为事件循环驱动,配合连接池限流,QPS 200时P99降至135ms,吞吐量从120req/s提升至2050req/s。本文完整记录重构思路、核心代码、以及踩过的坑(如asyncio.Semaphore滥用、u
Git分支模型与Code Review流水线:支撑30人团队的协作体系
当团队从5人扩张到30人,基于主干开发的Git协作模式彻底失控——频繁的冲突、被绕过的Code Review、破碎的CI构建。本文记录了我们在2024年Q2完成的一次Git工作流重构:基于`trunk-based`与`GitFlow`的混合分支策略、基于`git diff --stat`的自动化Review检查、以及将`husky`+`lint-staged`+`GitHub Actions`串成
7B模型LoRA/QLoRA微调实录:显存从80G降到24G的工程化调优
在金融领域情感分析任务中,直接全参微调Qwen2-7B-Instruct需要4张A100-80G,而通过QLoRA(4bit NF4量化+双LoRA适配器)将显存压至单卡24G,训练速度仅下降18%。本文记录完整微调流程,包含数据清洗规则(去重/截断/标签平衡)、Peft与BitsAndBytes配置细节,并给出loss曲线从2.1降至0.35的收敛过程,以及微调前后模型在测试集上的F1值对比(0
Prompt Engineering实测对比:三版指令调优GPT-4o输出质量与Token成本
本文以“电商评论情感分类+原因抽取”为任务,对GPT-4o(0613版本)设计了三版Prompt:零样本基线、结构化指令、带Few-shot与JSON Schema约束的进阶版。实验基于OpenAI API(max_tokens=800,temperature=0.2),共测试200条真实评论。结果显示:进阶版在F1分数上比基线提升21.3%(0.712→0.925),但Token消耗增加38%(
Prompt Engineering实测:四版指令调优百度ERNIE 4.0抽取F1值提升22%
同一份千行合同文本,用默认Prompt跑百度ERNIE 4.0(2024年3月版),实体抽取F1值只有0.63,token消耗却高达4821。经过四轮指令重构——加入角色约束、输出Schema、否定指令和示例驱动后,F1飙到0.85,token直降37%。本文用真实业务场景(企业采购合同关键条款抽取)记录完整的Prompt实验日志,包含每版Prompt的完整代码、API参数配置、失败案例分析,以及
Git分支策略与Code Review流水线:日均200次合并的团队协作方案
当团队从15人扩张到40人,主干分支从每周3次冲突演变为每天20+次合并阻塞。本文记录我们基于Git 2.39重构的分支策略与Code Review流水线:采用Trunk-based + 短生命周期特性分支,配合GitLab 15.11的Merge Request审批规则与Jenkins 2.414自动构建,将合并等待时间从平均47分钟压缩到8分钟,线上事故率下降62%。文中给出完整的.gitla
RAG召回率从61%到89%:chunk重构与embedding重选全记录
线上客服知识库RAG系统一度召回升至瓶颈,Top-5命中率仅61%。通过将固定256字符chunk改为语义段落+重叠窗口、将bge-large-zh替换为bge-m3、并引入bge-reranker-base重排,最终Top-5命中率提升至89%,单次检索耗时从380ms增至520ms但可接受。本文记录完整调优路径,含全部核心代码与参数配置。
LoRA微调Llama-3-7B中文医疗问答:显存8G跑通全流程与效果实测
微调7B大模型一定需要A100?本文记录使用单张RTX 3090(24G显存)通过QLoRA(4bit NF4量化)微调Llama-3-8B-Instruct,在自建的中文医疗指令集(2.1万条)上训练3个epoch,显存峰值仅14.7G,训练时长6小时40分。对比Base模型与LoRA(16G显存)和QLoRA的推理效果,发现QLoRA在医学领域F1-score提升12.3%,且模型幻觉率下降明
LangChain 0.3手写Agent:记忆与循环控制从零实现
当AutoGPT的自动化任务在复杂场景中频繁失控时,自己手写Agent成为可控性的关键。本文基于LangChain 0.3.7,从零构建一个具备工具调用、滑动窗口记忆、try-except错误恢复及最大迭代限制的Agent。实测在18个工具调用场景下,循环控制将死循环率从AutoGPT的23%降至0%,单次任务内存占用控制在45MB以内。代码全公开,含三个可运行示例,重点拆解工具描述如何影响LLM
FastAPI接口300ms压到38ms:profile、SQL三板斧与Redis缓存实战
一个真实的后台查询接口,P95延迟从312ms降到38ms,吞吐量提升4.6倍。文章记录了完整的调优链路:先用cProfile和py-spy定位CPU热点,发现SQLAlchemy ORM隐式N+1查询和JSON序列化是两大元凶;随后用`explain ANALYZE`重写SQL,引入联合索引与`selectinload`;最后在Redis层做二级缓存,配合`lru_cache`做热点参数缓存。文
asyncio重构Flask API:QPS从37到312的完整改造记录
在一次外部接口压测中,我发现一个基于Flask 2.1 + Requests库的聚合API在50并发下QPS仅37,P99延迟高达4.8秒。通过将阻塞IO替换为asyncio + aiohttp,并在Flask中嵌入asyncio.run,仅改动80行代码,QPS提升至312(8.4倍),P99降至410ms。本博客完整记录这次改造的全部细节:包括事件循环冲突的坑、Semaphore信号量控制并发
RAG召回率从61%到89%:chunk重构与embedding重排的工程实践
在基于LangChain构建的金融文档问答系统中,通过三个阶段的优化——滑动窗口chunk策略替代固定长度切分、bge-large-zh-v1.5替换text2vec-large-chinese、以及引入bge-reranker-base重排序模型,将Top-5召回准确率从61.3%提升至89.7%。本文记录了完整的调优过程,包括向量维度对检索延迟的影响、chunk重叠率与上下文丢失的权衡、以及重
向量数据库选型:Milvus与Qdrant在百万级影视素材检索中的实测对比
在影视素材库的以图搜图业务中,我们对比了Milvus 2.4.1与Qdrant 1.9.2在百万级768维向量下的表现。Qdrant在单机部署上节省了约40%内存,查询P95延迟低至12ms,而Milvus在批量写入吞吐上领先35%。本文记录了两者的Docker部署、Python客户端代码、HNSW参数调优过程,以及一次关于内存溢出的惨痛踩坑经历,希望能为同样在做向量检索选型的朋友提供一份量化参考
Prompt工程化实验:实体抽取任务中5种模板的token与F1权衡
在实体抽取任务中,我对比了5种Prompt模板(零样本、少样本、思维链、结构化输出、角色扮演)在GPT-4-turbo(1106版本)下的表现。实验基于自建的中文金融公告数据集(200条),发现结构化输出模板在F1分数(0.82)与token消耗(平均412 tokens/条)之间取得了最佳平衡。而角色扮演模板虽然F1达到了0.85,但token开销暴涨至687 tokens/条,性价比骤降。文中
asyncio重构Flask接口,QPS从120飙到850的详细记录
一个内部报表API,单次查询需聚合3个微服务数据,平均耗时1.2秒,压测QPS仅120。我用asyncio+httpx将其重构为并发IO后,P95延迟从2.1s降到380ms,QPS稳定在850。本文记录从同步阻塞到异步非阻塞的完整改造过程,包含asyncio.Semaphore限流、超时控制、Python 3.11的asyncio.TaskGroup用法,以及一个差点导致连接池耗尽的坑。
Python asyncio重构Flask接口:耗时从2.3秒降至0.4秒
一个内部报表API,单次请求需聚合三个外部服务数据,平均耗时2.3秒。用asyncio + httpx重写后,耗时降至0.4秒,QPS从45提升到220。本文记录了完整的改造过程,包括event loop线程冲突的坑、信号量限流配置、以及Python 3.11 vs 3.10的性能差异。代码可直接复用到任何IO密集型的Web接口。
FastAPI+SQLAlchemy 2.0 性能调优:从1200ms到80ms的profiling与缓存实践
一个真实的生产环境接口,单次请求耗时1200ms,QPS仅能支撑50。通过py-spy定位到N+1查询与JSON序列化两大瓶颈,配合SQLAlchemy 2.0的selectinload优化和Redis二级缓存,最终将P95延迟压至80ms,QPS提升至800+。本文记录了完整的profiling工具链(py-spy、cProfile、Prometheus)、缓存策略设计(Cache-Aside
Python异步编程:asyncio重构Flask接口吞吐量提升3.2倍
在一次电商大促压测中,我发现某个订单查询接口在QPS达到200时RT飙升至2.8s,而数据库负载却不足30%。通过引入asyncio+httpx将串行RPC调用改为并发协程,接口吞吐量从320 QPS提升至1024 QPS,P99延迟从1.2s降至380ms。本文记录了完整的重构过程,包括asyncio.Semaphore限流、aiohttp连接池调优、以及uvloop替换事件循环的实测数据。踩坑