RAG高级技术与最佳实践
RAG技术树![[Pasted image 20250323163322.png]]
RAG研究的技术树主要涉及预训练(Pre-training)- 微调(Fine-tuning)- 推理(Inference)等阶段
随着LLM的出现,RAG的研究最初侧重于利用LLMs强大的上下文学习能力,主要集中在推理阶段。
随后进一步深入,逐渐与LLMs的模型微调阶段更加融合。研究人员也在探索通过检索增强技术来提升预训练阶段语言模型的性能
回顾NativeRAG过程:indexing:如何更好的把知识存起来 (分割、embedding、存入)retrieval:如何在大量的知识中,找到一部分有用的,给模型参考generation:如何结合用户的提问和检索的知识,让模型生成有用的答案
Qwen-Agent之前使用了coze或者完全自己编码去使用了RAG,除此之外还可以使用Qwen-Agent这样的工具库来更好的应用上RAG![[Pasted image 20250319183148.png]]
Qwen-Agent构建的智能体包含三个复杂的级别,每一层都建立在前一层的基础上:
级别一:检索处理大 ...
RAG技术与应用
1、大模型应用开发的三种模式首先要提到进行大模型应用设计时可能会用到三种方式。
分别是 【提示工程 、RAG 、微调】
那么这三种分别应该在什么时候使用呢?
一般来说是需要有一个循序渐进的过程,比如当回答出现问题,先思考提示词是否不够准确,然后才考虑是否知识信息不具备(比如一些内部私有信息),在此基础上提示词已经非常准确,需要的知识也通过RAG进行了提供但还是有问题,此时说明大模型能力还不够这个时候就需要微调了或者换大模型
微调成本很高所以基本上应该优先在原有的基础上优化,微调的成本体现在:首先数据集的建立就很耗人力,而且特定数据多了还会导致破坏大模型原有的能力有这种风险。以及需要的硬件成本。
2、什么是RAG
回到正题那么什么是RAG呢?
RAG全称Retrieval-Augmented Generation 翻译过来就是 检索增强生成,是一种结合信息检索(Retrieval)和文本生成(Gen)的技术
优势是什么?
解决知识的时效性
减少模型幻觉
提升专业领域的回答质量
2.1 RAG构建的步骤step1 数据预处理知识库构建:收集并整理文档、网页、数据等多元数据, ...
Embedding:推荐系统中从词袋到向量空间的技术跃迁
1、 基于内容推荐
依赖性低,不需要动态的用户行为,只要有内容就可以进行推荐
系统不同阶段都可以用:
系统冷启动:内容是任何系统天生的属性,可以从中挖掘特征,实现推荐系统的冷启动。一个复杂的推荐系统都是基于内容推荐成长起来
商品冷启动:不论什么阶段都会有新商品加入,只要商品有内容信息,就可以帮他进行推荐
数据中台越来越显示其价值结构化数据 => 分析、预测、洞察非结构化数据 => 检索、推荐、撰写
业务驱动数据数据流:企业中的数据中台 => 上层业务分析实现路径:业务驱动,由各个部门、小组发起指定数据(结构化、非结构化)以部门业务为导向,规划结构化数据和非结构化数据
[!note] 应用形式以智能体展示为主,需要结合员工权限管理和数据安全考虑在用户停留的地方进行集成办公IM:企业微信、钉钉、飞书企业OA、SAP、CRM
[!note] PMO角色AI助手需求收集、推广、运营反馈、开发迭代安排
1.1、特征提取和余弦相似要想实现近似内容推荐首先我们就要理解特征和这个余弦相似度两个概念首先余弦相似度就是判断两个向量的余弦值:完全相同时为1,垂直时为0 ...
技术栈导致后续流式响应的坑
[toc]
前言之前无聊做了一款工具app,需要使用到流式响应
因为想着快速启动,所以选择了客户端用uniapp 服务端用uncloud云开发
后来在实现unicloud流式响应给uniapp时,发现没法自定义响应,unicloud的函数只能返回数据,响应动作只能由框架操作,将你云函数响应的数据进行send。
方案一:Uni-push后来查官网,发现也是有解决方案就是开通他们提供的uni-push服务,其中有一个信道对象ssechannel
我们可以在客户端创建信道,给信道绑定监听几种监听事件函数,比如信道接收消息事件、信道结束事件。
绑定了事件函数后,我们就可以把信道传给后端,后端拿到反序列化后,就可以通过send发送消息,通过end结束信道
这样在客户端那边的两个事件就可以接收到。
整天来说使用也很简单,如下:
1234567891011121314151617181920212223242526// 客户端代码export default { data() {}, onLoad() {}, methods: { ...
SpringSecurity详解
一、SpringSecurity入门1.1 Spring Security简介 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于 Spring的应用程序的实际标准。Spring Security是一个框架,致力于为Java应用程序提供身份验证和授权。与所有Spring项目一样,Spring Security的真正强大之处在于可以轻松扩展以满足自定义要求.
官网地址:https://spring.io/projects/spring-security
1.2 安全技术方案对比目前在整个Java开发的系统中,需要用于身份验证和访问控制框架的框架除了Spring Security, 还有一个就是Apache shiro框架.
Shiro
Shiro是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。如下是它所具有的特点:
易于理解的 Java Security API;
简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory等)
对角色的简单的 ...
LeetCode初级算法之其他:268.缺失的数字
题目信息给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
题目地址:https://leetcode.cn/problems/missing-number/
示例 1:
123输入:nums = [3,0,1]输出:2解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。
示例 2:
123输入:nums = [0,1]输出:2解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。
示例 3:
123输入:nums = [9,6,4,2,3,5,7,0,1]输出:8解释:n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。
示例 4:
123输入:nums = [0]输出:1解释:n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。1 是丢失的数字,因为它没有出现在 nums 中。 ...
LeetCode初级算法之其他:20.有效括号
题目信息
题目地址:https://leetcode-cn.com/problems/valid-parentheses
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
示例 1:
12输入:s = "()"输出:true
示例 2:
12输入:s = "()[]{}"输出:true
示例 3:
12输入:s = "(]"输出:false
示例 4:
12输入:s = "([)]"输出:false
示例 5:
12输入:s = "{[]}"输出:true
题解一要满足括号的规则,那么一个括号里面不能有残缺的括号。 那么对于{[]} 它是一个括号且包含一个子括号,如果当当前括号完整时,子括号仍不完整即为false.
我们可以用包含自己和子节点的结构来去记录,就是一个链表,要必须按照 ...
风吹麦浪
《风吹麦浪》谱子收藏、全文查看👉