RAG检索八股
RAG检索增强生成专题简述RAG的定义及核心工作流程+局限性RAG 是检索增强生成,本质是让大模型在回答前先从外部知识库中检索相关资料,再把检索到的内容作为上下文交给大模型生成答案。它不改变模型参数,主要解决大模型知识过时、缺少企业私有知识以及幻觉较高的问题。
标准流程一般是:先对企业文档做采集、清洗和结构化解析,然后按语义或固定长度切分成 Chunk,调用 Embedding 模型生成向量并写入向量库;用户提问时,对 Query 做改写或向量化,通过向量检索、关键词检索或混合检索召回 TopK 文档片段,再通过 Rerank 精排,最后把高相关上下文、用户问题和约束规则拼成 Prompt,调用大模型生成答案,并返回引用来源。
它的局限也很明显。RAG 的效果强依赖知识库质量、切分策略、Embedding 模型、召回和重排质量;如果文档解析错、召回错或上下文不足,大模型仍然会答错。它也不能彻底消除幻觉,对跨文档复杂推理、表格图片解析、权限控制、实时更新、长上下文成本和延迟都有工程挑战。所以企业落地时,RAG 不是简单接一个向量库,而是一整套知识治理、检索、生成、评估和监控体系。
RAG ...
DevMate智能助手项目QA
项目常见问题总结项目类项目背景介绍一下随着存储业务持续扩张,内部沉淀了海量私有技术资料:包含存储架构手册、接口文档、运维方案、故障案例、会议纪要、产品文档等,文档格式混杂 PDF、Word、Markdown等多种格式
原有知识管理存在以下痛点
文档分散、检索低效:资料散落在wiki、内部系统、组织群空间等多处,员工信息检索效率低
无法联动内部工具:查完文档还要手动登录 DTS、需求平台、调度系统查数据,信息割裂,重复操作多
新人上手成本极高:存储业务专业门槛高,新人遇到问题只能频繁请教老员工,资深工程师大量时间消耗在重复性答疑,挤占核心开发工作
平台上线后覆盖存储全业务线数百研发、运维人员,成为部门常态化知识查询、问题分析工具,有效释放资深工程师人力投入核心业务开发
你在项目中的角色/职责是什么我主要负责企业知识助手 RAG 链路,包括文档解析、结构化切分、向量化入库、ES + Milvus 混合召回、RRF 融合、rerank 排序以及离线评测闭环。
多模态文档解析表格怎么做切分表格没有简单地按 Markdown 文本一刀切,而是按表格类型和表格规模做多粒度切分。
对于小表 ...
RAG Q&A
RAG Q&A
使用方式:面试时先答 结论,再按 流程/原因/取舍 展开。加粗部分是建议必须说到的关键词。
你在项目中采用的 RAG 向量数据库是什么?我们生产方案里主选 Milvus 2.x,同时保留 PostgreSQL pgvector 作为 MVP 或轻量部署阶段的备选。
核心原因是 DevMate 面向公司内部约 1000 名用户,规划知识库规模在 100 万到 300 万 chunk,向量数据量大概 100GB 到 500GB。这个规模下需要考虑 集群化、水平扩容、索引性能和高并发检索,所以生产阶段更适合用 Milvus。
在 RAG 链路里,Milvus 不单独工作,而是和 Elasticsearch 组成 混合检索:
用户问题 -> Query Rewrite -> 权限过滤 -> Elasticsearch BM25 + Milvus 向量召回 -> bge-reranker 重排 -> 组装上下文 -> 大模型生成带引用答案
面试可以总结为:Milvus 负责语义召回,Elasticsearch 负责 ...
Agent Q&A
Agent Q&A
使用方式:面试时先答 结论,再按 流程/控制点/总结 展开。加粗部分是必须说到的关键词。
上下文压缩是怎么做的?结论:上下文压缩不是简单截断,而是 近期对话保留原文,早期历史沉淀为结构化摘要,RAG 证据和工具结果按引用保留。
整体由 devmate-conversation 管理会话历史,devmate-agent-runtime 在编排时决定哪些内容进入本轮 Prompt。
关键流程:
保留最近上下文:最近 3-5 轮 用户问题、助手回答和追问澄清保留原文。
历史转摘要快照:更早历史写入 context_snapshot,保留用户目标、已确认事实、关键约束、工具结果、引用来源和待解决问题。
证据结构化压缩:RAG 和工具结果不长期塞原文,只保留 结论 + 来源编号 + 关键字段。
触发压缩:token 接近阈值、深度研究多轮工具调用后、长会话历史膨胀时触发。
可追溯恢复:完整消息、原始文档、工具日志仍落库,后续可按 DTS 编号、chunkId、traceId 回查。
安全控制:
摘要必须区分 事实、推断、待确认事项。
从 R ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
AI学习笔记
Function Calling什么是 Function Calling传统聊天大模型只会说话,没有工具调用能力,这使得大模型:
无法感知环境:无法与外部数据源交互,如通过 API 查询网页、查看用户本地文件、访问远程数据库等等
无法改变环境:无法帮用户实际执行任务,如跑代码、发邮件、上传作业等
因此,Function Calling 是给大模型提供调用工具的能力
Function Calling 是怎么做的基于提示词的 Function Calling
输出格式不稳定:如调用指令中存在多余自然语言。
容易出现幻觉:模型可能编造并不存在的函数名或参数。
对开发者依赖度高:函数描述、调用指令格式、提示词逻辑完全由开发者设计。
上下文冗长,Token 消耗大:为确保调用逻辑正确,往往需要在 system prompt 中加入大量说明与规则。
基于 API 的Function Calling
流程:
用户发起提问
后端第一次向大模型 API 发起请求,获取函数调用指令
12345678910111213141516171819202122232425262728293031323 ...
前后端跨域问题
前后端跨域问题什么是前后端跨域问题启动前端工程,工程首页不能正常显示,查看浏览器报错如下
1Access to XMLHttpRequest at 'http://localhost:63110/system/dictionary/all' from origin 'http://localhost:8601' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
提示:从http://localhost:8601 访问 http://localhost:63110/system/dictionary/all 被 CORS policy 阻止,因为没有Access-Control-Allow-Origin 头信息。CORS全称是 cross origin resource share 表示跨域资源共享。
从一个地址请求另一个地址,如果协议、主机、端口三者全部一 ...
Swagger
Swagger什么是Swagger?
OpenAPI规范(OpenAPI Specification 简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程,并且已经发布并开源在GitHub上:https://github.com/OAI/OpenAPI-Specification
Swagger是全球最大的OpenAPI规范(OAS)API开发工具框架,Swagger是一个在线接口文档的生成工具,前后端开发人员依据接口文档进行开发,只要添加Swagger的依赖和配置信息即可使用它
1.引入依赖
123456<!-- Spring Boot 集成 swagger --><dependency> <groupId>com.spring4all</groupId> <artifactId>swagger-spring-boot-starter</artifactId> <version>1.9.0.RELEASE ...
RPC小记
RPC小记
源码参考:https://github.com/Snailclimb/guide-rpc-framework
参考文档:https://www.yuque.com/books/share/b7a2512c-6f7a-4afe-9d7e-5936b4c4cab0
动态代理首先看客户端的代码
12345678@RpcScan(basePackage = {"com.richcoder"})public class ClientMain { public static void main(String[] args) throws InterruptedException { AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ClientMain.class); HelloController controller = (HelloControll ...
Netty优化与源码
Netty优化序列化序列化和反序列化主要用在对消息正文的转换上
序列化时,需要将 Java 对象变为要传输的数据
反序列化时,需要将传入的正文数据还原成 Java 对象
目前我们的代码仅支持 Java 自带的序列化和反序列化方式
123456789// 序列化ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(message);byte[] bytes = bos.toByteArray();// 反序列化ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(content));Message message = (Message) ois.readObject();
为了后续能更好的扩展序列化的使用,我们抽象一个 Serializer 接口,专门用于处理序列化的方式
1234567public ...







