被字节面试官嘲笑没Agent项目?啃透这篇LoRA+RAG大模型教程,直接降维打击!

张开发
2026/4/15 21:33:15 15 分钟阅读

分享文章

被字节面试官嘲笑没Agent项目?啃透这篇LoRA+RAG大模型教程,直接降维打击!
老王就看了一眼我的简历就一眼0.1秒都不到就开始上压力了“你不知道现在是 AI 时代吗简历上连个 Agent 项目都没有你是怎么敢投 AI 岗的”“王哥你能不能瞪大眼睛仔细瞧瞧。”我直接反击。老王是真没想到我敢回怼立马怂了。“压力你一下嘛看你急的。”老王态度 180 度大转弯啊“简历写得真不错这恐怕是这一个月来我见过写得最漂亮的简历了。”PS面试的时候一定要自信已经上战场了就没有退路可言。面试考察的除了实力就是你对这份工作的热情对自己的认可。宁可盲目的自信也不要畏畏缩缩的自卑尤其是面对压力的时候一定要不卑不亢。content01、PaiAgent 项目的背景介绍下老王开始了他的第一问“介绍一下 PaiAgent 的背景吧”我说“PaiAgent 是我 Vibe Coding 出来的一个 dify 工作流编排 Agent。我想通过实际的项目把 AI 发展过程中的核心技术栈应用实操起来真正能达到一个 AI 应用开发工程师的水平。”“后端技术栈用到了 Spring AI用到了 LangGraph4J这些都是 Java 领域最热门的 AI 应用开发框架。”同时我又串联了 Skill、ReAct、MCP、Function Calling 这些热门概念让自己在做的过程中去理解技术的底层原理。双引擎是 PaiAgent 的一个亮点。简单场景用我自己写的 DAG 引擎——里面用 Kahn 算法做拓扑排序DFS 做循环检测跑简单的线性工作流足够。复杂场景比如说带条件分支、循环、状态回溯的可以切到 LangGraph4j 引擎。LLM 这块我统一走的 Spring AI 框架。对接了多家顶级国内模型DeepSeek、通义千问、智谱 GLM。切换模型不需要改代码切换一下全局的 LLM 配置就行。像火爆全网的 Skill我也做了应用。在我看来每个 Skill 就是一个目录核心文件是SKILL.md可以用 YAML Frontmatter 定义名称和描述Markdown 写执行规则。然后在项目启动时扫描 classpath把 Skill 对象缓存 Redis 中。加载机制也完全符合三级渐进式——第一级只加载名字和描述第二级加载完整内容第三级按需加载 reference 目录。这样 LLM 在决策的时候也可以省去非必要的上下文。比如说我有这样一个 AI 播客工作流用户只需要输入一段文字LLM 节点就能够根据 Prompt 把输入转成符合播客的脚本然后再通过 TTS 节点转成音频最后通过 SSE 推送给用户。代码在 GitHub 上也是完全开源的已经有 300 star 了这让我感觉非常有成就感。https://github.com/itwanger/PaiAgent02、派聪明 RAG 的流程讲一下老王继续追问“聊聊派聪明 RAG流程讲一下”派聪明是一个企业级的 AI 知识库管理系统 。它的核心功能是对用户上传的私有文档比如 Word、PDF、txt 等进行语义解析和向量处理然后存储到 ElasticSearch 中以供后续的关键词检索和语义检索。派聪明的整体流程是这样的用户上传文档后系统会先对文档进行分片处理把长文档切成若干个 chunk每个 chunk 生成对应的向量embedding然后和原始文本一起存入 ElasticSearch。用户提问时系统对问题向量化在 ES 中执行混合检索向量检索 BM25 关键词检索把召回的相关 chunk 拼接进 prompt交给大模型生成答案最后通过 WebSock 流式返回给前端。两个比较值得说的难点第一个是分片策略。文档分片不是随便切的切太短会丢失上下文切太长会超出 embedding 模型的 token 限制而且会稀释语义。派聪明采用的是固定大小分片加上 overlap重叠保证相邻 chunk 之间有一定内容重叠避免关键信息刚好落在切割边界上。第二个是对话上下文管理。多轮对话时需要把历史记录带入 prompt但上下文越来越长会超出大模型的 context window。如何在保留足够上下文的前提下控制 token 数是 RAG 项目里很实际的工程问题。03、lora 的原理和 qlora 的原理讲一下qlora 怎么优化显存老王话锋一转“LoRA 的原理讲一下QLoRA 怎么优化显存”大模型全参数微调的成本太高——一个几十亿甚至几百亿参数的模型全量微调需要的显存、算力、存储都是天文数字普通团队根本玩不起。LoRA 的核心思路是低秩分解。打个比方。大模型的权重矩阵是一本 10 万页的百科全书全量微调等于把这 10 万页全部重新印刷一遍。LoRA 的思路是不改原书在原书上做注解。这个注解是两个很小的矩阵 B 和 A原始权重 W 完全不动训练的时候只更新 B 和 A。推理时把注解的内容“叠加”到原书上h Wx BAx。原始矩阵可能有几百万个参数B 和 A 加起来可能只有几千个。参数量少了几个数量级但效果能达到全量微调的 99%。这就是所谓的“低秩分解”——用两个小矩阵的乘积去近似一个大矩阵的变化量。秩r一般取 8 到 64r越大注解越厚模拟能力越强但训练成本也越高。老王追问“QLoRA 呢”LoRA 解决了“参数多”的问题但模型本身还是要完整加载到显存里。一个 65B 的模型光加载权重就要 130GB 显存——普通显卡根本装不下。QLoRA 要做的事事压缩体积。第一把模型权重从 16 位压缩到 4 位。正常模型每个参数用 16 位浮点数存储2 字节QLoRA 用一种叫 NF44-bit NormalFloat的格式压到 4 位0.5 字节。因为模型权重的分布接近正态分布钟形曲线NF4 是专门按照这个分布设计的——在权重密集的区间分配更多量化值稀疏区间少分一点精度损失很小。第二双重量化——压缩参数。压缩过程中需要记一些“压缩参数”量化常数这些参数本身也占显存。QLoRA 把这些参数也压缩了一遍。第三显存不够就借内存。训练时优化器Adam要记录每个参数的历史梯度信息这部分占的显存比模型本身还多。QLoRA 在显存快满的时候自动把这些信息临时挪到内存里用的时候再搬回来——类似操作系统的虚拟内存机制。04、演示 PaiAgent 项目的实现细节尤其是 Skill 的实现老王说“回到项目上Skill 的实现能再深入讲讲代码层面吗”每个 Skill 本质上就是一个目录核心文件是 SKILL.md用 YAML Frontmatter 定义名称和描述Markdown 写执行规则。项目启动时 SkillRegistry 会扫描所有 Skill 目录把元信息缓存起来。关键设计是三级渐进加载第一级只加载名字和描述给 LLM 做决策用——“我有哪些 Skill 可以选”第二级加载 SKILL.md 的完整内容第三级按需加载 reference 目录下的参考文件。这样 LLM 在选 Skill 的时候不用把所有内容都塞进 context省 token。工作流执行到某个 LLM 节点时如果配置了 skillName就从 SkillRegistry 拿到对应的 Skill把内容拼成系统提示词塞进去。05、讲一下你对 AI 辅助开发的实践经验老王问“讲一下你对 AI 辅助开发的实践经验”先说 OpenAI 的 Codex这货量大管饱代码质量也高。近一个月吧我所有的项目开发都交给它了包括技术派、派聪明 RAG、PaiFlow Agent、PaiAgent 工作流、PaiSwitch一个类似 CC Switch 的项目、派简历。可以在 IntelliJ IDEA 装一个 Codex 插件日常开发一些后端代码的时候非常方便。教程https://paicoding.com/article/detail/2607900057933824Codex 还有个杀手锏配合 Chrome Devtools MCP 可以进行网页测试。有些页面上的 bug 很难用语言描述清楚让 Codex 直接操作浏览器调试比你自己折腾半天强多了。教程https://paicoding.com/article/detail/2606800001310720再说 A 厂 的 Claude。讲真Claude 在文本方面的表现无可替代解决一些 bug 的时候那也是真神。有时候一些线上的 bug 我描述不清楚Codex 经常也是胡言乱语但 Claude 这玩意就好像装了监控真的能 get 到我真正的诉求。另外不得不提的就是 Claude Code。这就是目前最强的 Agent 工具。国内的模型配上 Claude Code战斗力直接翻倍。比如 GLM-5.1在 Claude Code 的助阵下能力就很强。我之前用这套组合完成了一个简历 Agent 项目。教程https://paicoding.com/article/detail/2609300013893632Claude Code 最大的优势在于端到端能力从拆解需求、生成规范、编写代码到执行测试一条龙搞定。复杂任务、多文件重构、自主调试这些场景 Claude Code 是目前的天花板。06、觉得当前的 agent 达到预期了吗对 agent 的预期是什么老王追问“觉得当前的 Agent 达到预期了吗”说实话没有差得还远。我理想中的 Agent 是能自主完成一个完整的功能开发理解需求 → 设计方案 → 写代码 → 跑测试 → 修 bug→ 提 PR全程不用我插手。但现在的 Agent包括 Claude Code还是需要人在旁边盯着。哪怕是 Qoder 的专家团模式。不过 Agent 的进步速度是真快。明年这个时候Agent 给我们的感觉应嘎就完全不同了尤其是 OpenClaw、爱马仕 Agent 带给大家的震撼。07、项目中 AI 贡献的代码占比有多少老王问“AI 贡献的代码占比有多少”PaiAgent 大概 95%。派聪明 RAG 的 AI 代码占比比较低大概 10%。当时做这个项目的时候AI 辅助开发的工具还不太成熟很多东西只能靠我自己写。08、怎么进行多模态的知识检索老王问“怎么进行多模态的知识检索”传统 RAG 只能处理文本遇到图片、表格、PDF 里的图表就抓瞎。派聪明最开始也是这样——用户上传的技术文档里经常有架构图、时序图、流程图Tika 完全没办法处理。// 文档处理流程解析 - 分块 - 向量化 - 存储public void vectorizeFile(MultipartFile file, String userId, String orgTag, boolean isPublic) { // 1. 文档解析和分块 ListString chunks fileParsingService.parseAndChunk(file); // 2. 批量向量化 Listfloat[] vectors embeddingClient.batchEmbedding(chunks); // 3. 构建文档对象 ListEsDocument documents buildDocuments(chunks, vectors, metadata); // 4. 批量存储 elasticsearchService.bulkIndex(documents);}视频音频 RAG 的核心思路是先把它们转成文本或者其他可向量化的表示再走传统 RAG 的流程。核心流程是这样的把音频通过 ASR自动语音识别转成文字稿文字稿按时间戳切分成片段每个片段做 Embedding 向量化存到向量库里。用户提问的时候做语义检索找到最相关的文字片段然后基于这些片段生成回答同时返回对应的时间戳。视频场景如果不需要画面信息也可以用这个方案把视频里的音轨提取出来做 ASR 就行。如果视频里的画面信息很重要比如教学视频里的板书、商品视频里的展示、监控视频里的事件那纯 ASR 就不够了需要把画面信息也利用起来。核心流程是这样的把视频按一定频率抽帧比如每秒抽一帧或每个关键帧抽一张用多模态 Embedding 模型把每一帧图像转成向量存到向量库里。用户提问的时候用同一个多模态 Embedding 模型把问题向量化多模态模型可以同时处理文本和图像做语义检索找到最相关的视频帧然后基于这些帧的时间戳定位到视频片段。多模态 Embedding 模型的选择主要是 CLIP 系列。OpenAI 的 CLIP 是开山之作中文场景下可以用 Chinese-CLIP 或者 BGE-M3 的多模态版本。09、A2A 与 MCP 区别说一下老王问“A2A 与 MCP 区别说一下”MCP 解决的是一个 Agent 怎么调用工具定位“AI 的 USB 接口”。Agent 通过 MCP Client 连 MCP ServerServer 暴露 tools、resources、prompts 三种能力。A2A 解决的是多个 Agent 怎么协作。每个 Agent 发布一个 Agent CardJSON 格式描述能力其他 Agent 通过 Agent Card 发现并调用它。举个例子一个库存 Agent 用 MCP 连自己的数据库查库存同时用 A2A 和供应商的订货 Agent 通信库存不够就自动下单。MCP 管“我怎么用工具”A2A 管“我怎么找别人帮忙”。10、RAG 遇到较长较多的上下文怎么解决老王问“RAG 检索回来几十个 chunk上下文太长怎么办”“第一层检索前置过滤。”“搜索阶段用小粒度 chunk256 token做高精度召回召回 30 条候选。然后用重排模型Reranker对这 30 条打分只取 Top-5 到 Top-8 最相关的喂给模型。”“这里有个技巧叫‘分层召回’第一轮用向量检索快速缩小范围第二轮用关键词匹配精确定位第三轮用 Reranker 做最终排序。”“第二层context window 预算管理——给 token 定额度。”“我的分配策略是系统提示词占 20%检索结果占 50%对话历史占 30%。比如 8K 的 context window系统提示词 1.6K检索结果 4K历史对话 2.4K。”“超出预算的旧消息直接砍掉会丢失信息我用的方法是渐进式摘要。最近三轮对话保留原文再往前的对话压缩成 200 token 的摘要。”“第三层长文档的特殊处理。”“如果是整本书、长篇报告这种单条就超过 8K token。”“方案一是 Map-Reduce把长文档切分成多个 chunk每个 chunk 单独问模型然后把多个回答再合并。缺点是丢失跨 chunk 的关联信息。”“方案二是 RAG 递归摘要先对长文档做分层摘要——每 5 个 chunk 生成一个中间摘要每 5 个中间摘要再生成一个高层摘要。检索时先匹配高层摘要定位到相关章节再深入匹配原始 chunk。”“方案三是用支持长上下文的模型。最新的 Claude Code 已经支持 1M 上下文了。”endingAgent 开发 PaiAgent/PaiFlow 2026-03 至今项目简介基于 LangGraph4j Spring AI 的企业级 AI 工作流平台支持通过可视化拖拽界面编排多种大模型和工具节点使用状态图引擎执行复杂 AI 任务。技术栈Java 21、Spring Boot 3.4、Spring AI 1.0、LangGraph4j 1.8、React 18、ReactFlow基于 LangGraph4j StateGraph 构建工作流引擎实现 GraphBuilder 节点注册和边连接、NodeAdapter 适配器桥接现有执行器、StateManager 管理节点间状态传递。设计 ChatClientFactory 动态工厂运行时根据节点配置动态创建 OpenAI 兼容的 ChatClient实现 OpenAI、DeepSeek、通义千问等多厂商 LLM 无缝切换。使用模板方法模式重构 5 个 LLM 节点执行器抽象 AbstractLLMNodeExecutor 基类子类仅需实现 getNodeType()代码量从 800 行精简至每个 10 行。实现 Skill 预置知识包机制支持 SkillRegistry 自动加载、Reference 缓存、全量/渐进式两种注入模式。派聪明 RAG 知识库 AI 应用开发 2026-01 2026-02项目描述派聪明是一个基于私有知识库的企业级智能对话平台允许用户上传文档构建专属知识空间并通过自然语言交互方式查询和获取知识。它结合了大语言模型和向量检索技术能够让用户能够通过对话的形式与自己的知识库进行高效交互。技术栈SpringBoot、MySQL、Redis、Apache Tika、Ollama、Elasticsearch、MinIO、Kafka、Spring Security、WebSocket、Linux、Shell核心职责利用 Elasticsearch IK 分词器对知识库文档进行索引和向量检索支持 Word、PDF 和 TXT 等多种文本类型并集成阿里 Embedding 模型进行文本到向量的转换支持 2048 维再结合 ES 的 KNN 向量召回、关键词过滤和 BM25 重排序实现「关键词语义」 的双引擎搜索。编写 shell 脚本一键启动 Kafka 的 KRaft 模式自动处理 cluster ID 的冲突问题包括清理日志、生成集群 ID、格式化存储目录、启动 Kafka 服务器等。基于 WebSocket 实现长连接用户可主动停止并结合 DeepSeek 大模型的 Stream API 实现流式响应返回只要 LLM 有新的内容生成前端就能实时接收并呈现出“打字机”式的逐字生成。引入 MCP 协议对本地文件操作、PDF 生成及数据库查询等能力进行 Server 端封装实现了 Agent 与工具生态的解耦。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

更多文章