Langchain接入LlamaIndex Retriever
前言Langchain和LlamaIndex都是在 构建LLM应用当中最常用的两个库,但是他们的侧重点不一样:
Langchain侧重于构建更复杂的LLM应用流程,因为足够自定义,帮你解决了围绕大模型应用开发的基础的脏活。
LlamaIndex是可以更快速的基于文档进行问答,封装度更高,侧重点在于快速集成数据和大模型,可以快速构建一个RAG系统。
为什么要采用Langchain和LlamaIndex相结合的方式,因为Langchain更偏基础层可以很方便扩展或者对接其他服务,因此整个大模型的编排交互依然由Langchain进行,但是LlamaIndex擅长什么?没错,就是文档的加载和检索,除了官方提供的一些基础加载库或者检索器,背后还有一个LlamaHub的社区库。提供了更多的解析器或者检索器,可以方便接入LlamaIndex使用。
那么现在思路很明确,整个大模型应用的链路流程由Langchain构建,包括提示词、包括对大模型进行交互、包括后续各种各样的功能,而链路中如果有需要查找知识库(或者构建知识库),由LlamaIndex进行处理。因此可能需要把LlamaIndex的检索 ...
Langchain流式问题
前言构建好chain,正常run或者invoke没问题但是流式一直是连接后等半天单次就输出完毕了
123456789async for chunk in qa_llm_chain.astream({ "query": query, "chat_history": chat_history, "context": context, "tone": tone}): # 打印 chunk 的内容和类型 logger.info(f"chunk type: {type(chunk)}") logger.info(f"chunk content: {chunk}")
解决挺奇怪的,按理来说应该是可以的。一直好像解决不了,最终是选择直接通过llm调用,而不是chain的方式
12345678910111213# 手动构造 prompt 文本prompt_str = promp ...
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构建的智能体包含三个复杂的级别,每一层都建立在前一层的基础上:
级别一:检索处理大 ...
LlamaIndex对于向量库的持久化与加载
前言之前使用LlamaIndex做RAG环节的文档加载和检索,使用Faiss作为向量库。知识库构建进行持久化存储,再次加载进行检索时出现维度不匹配的情况。
12345678query_result = self._vector_store.query(query, **self._kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\MySpace\dev\python\3.11\Lib\site-packages\llama_index\vector_stores\faiss\base.py", line 195, in query dists, indices = self._faiss_index.search( ^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\MySpace\dev\python\3.11\Lib\site-packages\faiss\class_wrappers.py ...
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、特征提取和余弦相似要想实现近似内容推荐首先我们就要理解特征和这个余弦相似度两个概念首先余弦相似度就是判断两个向量的余弦 ...
技术栈导致后续流式响应的坑
[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等)
对角色的简单的鉴权( ...