不止语义检索,Milvus+LangChain全文检索RAG教程来了

LangChain与Milvus DQL实战:构建支持复杂过滤的RAG智能检索系统 检索增强生成(RAG)技术通过结合大语言模型的生成能力与外部知识库的检索能力,有效解决了LLM在处理私有、海量数据时面临的上下文窗口有限、幻觉等问题。其核心原理是将非结构化文本转化为向量嵌入,存储于向量数据库中,通过相似性搜索快速定位相关信息。在工程实践中,仅靠基础的向量相似度搜索往往无法满足复杂业务需求,例如需要根据文档类型、时间、部门等多维度属性进行精准过滤。Milvus作为高性能向量数据库,其DQL(数据查询语言)提供了类似SQL的灵活查询能力,支持向量搜索与标量过滤的混合查询。本文以LangChai 阅读详情

前言

最近,OpenAI和LangChain杠上了。一个是大模型扛把子,一个是最受欢迎的大模型框架

而抬杠的原因很简单LangChain觉得OpenAI 根本不懂agent:

但总结一句话来说,就是对于agent开发,OpenAI更倾向于高级抽象能加速开发;而LangChain则觉得大模型要能真正发挥作用,需要精确控制能确保可靠性**,因此workflow和agent都必不可少**。

实际上,两者的争论没有完全的对错之分。OpenAI指出的的是长期趋势,而LangChain给出的,则是立足当下,针对具体问题的更优解决方案。

以企业内部知识库问答系统构建来说,长期看,通过大模型智能调度各种工具然后基于milvus在内的向量数据库进行检索并给出答案,会是大势所趋;

但是具体到各种现实场景,仅仅是对接milvus,向量数据库中的索引算法有几十种,根据用户的需求不同,以及成本的不同考量,要如何对其中进行抉择,往往还需要开发者们的实际经验参与,将其写成workflow。

一个最简单的例子是,全文检索和语义搜索究竟哪个效果更佳?

答案是,看你在搜什么。

比如,同样是检索鲁迅先生的文章,在我们需要查找“藤野先生”“祥林嫂”的时候,全文检索就是最优解;

但是当我们检索诸如“少年在瓜田刺猹”这类描述性内容,那么语义检索就是帮你精准找到相关内容的最优解。

那么,该如何通过LangChain与Milvus构建一个RAG系统?本文将对此做出解读。

01背景科普:如何在向量数据库中实现全文检索

(本章节主要做一些基础技术内容的科普,如果已经了解相关背景,可直接跳过)

全文检索是一种信息检索技术,能够从大量文本数据中快速找出包含特定词语或短语的文档,非常适合精确术语的查找。

例如,当你需要查找包含"Python 3.9新特性"的文档时,全文检索能够精确定位包含这些关键词的内容。

不过,与简单的关键词匹配不同,全文检索考虑了词语在文档中的重要性、出现频率以及上下文关系,从而提供更加精准和相关的搜索结果。

img

与之相对应的是语义搜索,主要关注内容的含义而非具体词语,适合理解查询意图。例如,当你搜索"编程语言最新版本功能"时,语义搜索可能会返回关于Python、Java等多种语言最新版本的信息,即使文档中没有出现你使用的确切词语。

长久以来,很多人可能会有一个误解,那就是ES适合全文检索,而向量数据库只适合语义检索。

其实Milvus等现代****向量数据库的一个重要创新是实现了稀疏向量(用于全文检索)和密集向量(用于语义搜索)的协同工作。这种融合使系统能够同时支持基于关键词的精确匹配和基于语义的相似性搜索,为用户提供更全面的搜索体验。

稀疏向量:想象一个超长的列表,对应词汇表中的每个词。如果文档包含某个词,对应位置标记为1(或词频),其余位置为0。例如,在一个包含10万词的词汇表中,一篇文档可能只包含100个不同的词,所以向量中99.9%的元素都是0。

密集向量:想象一个相对较短的列表(如几百个数字),每个数字都包含文档的某些语义特征。与稀疏向量不同,密集向量中几乎所有元素都有非零值,它们共同表示文档的"意义",而不是具体的词。

稀疏向量和密集向量在表示方式和应用场景上有显著差异:

img

一句话总结来说,就是稀疏向量可以通过更多的维度,以及更少的非零元素,来实现关键词匹配等效果。

在Milvus中,通过内部优化机制,这两种向量表示能够高效协同工作,为用户提供更准确、更全面的搜索结果。

02实战:LangChain与Milvus构建RAG系统

第一步,环境准备

  • Python 3.8+
  • Docker(用于运行Milvus)
  • OpenAI API密钥
  • 基本的Python编程知识
  • 了解向量数据库的基本概念

第二步,启动Milvus服务

使用Docker Compose启动Milvus服务:

wget https://github.com/milvus-io/milvus/releases/download/v2.2.8/milvus-standalone-docker-compose.yml -O docker-compose.ymldocker-compose up -d

验证Milvus服务是否正常运行:

docker ps | grep milvus

安装必要的依赖

pip install --upgrade langchain langchain-core langchain-community langchain-text-splitters langchain-milvus langchain-openai bs4

设置环境变量

# import os  设置OpenAI API密钥os.environ["OPENAI_API_KEY"] = "your-api-key-here"# 设置Milvus连接信息URI = "http://localhost:19530"TOKEN = "your-token-here" # 如果需要

第三步,文档预处理与向量化

文档预处理是构建高效RAG系统的关键第一步。以下是使用LangChain和Milvus进行文档预处理和向量化的详细步骤:

首先,我们需要从各种来源加载文档。LangChain提供了多种文档加载器,可以处理不同格式的文件。

from langchain_community.document_loaders import DirectoryLoader, TextLoader, PyPDFLoader# 加载文本文件def load_text_documents(directory):  loader = DirectoryLoader(directory, glob="**/*.txt", loader_cls=TextLoader)  return loader.load()# 加载PDF文件def load_pdf_documents(directory):  loader = DirectoryLoader(directory, glob="**/*.pdf", loader_cls=PyPDFLoader)  return loader.load()# 组合加载多种格式def load_all_documents(directory):  text_docs = load_text_documents(directory)  pdf_docs = load_pdf_documents(directory)  return text_docs + pdf_docs

接下来,我们需要把长文档分割成较小的块,以便更好地进行向量化和检索。

from langchain.text_splitter import RecursiveCharacterTextSplitterdef split_documents(documents, chunk_size=1000, chunk_overlap=200):  text_splitter = RecursiveCharacterTextSplitter(    chunk_size=chunk_size,    chunk_overlap=chunk_overlap,    separators=["\n\n", "\n", "。", "!", "?", ".", " ", ""]  )  return text_splitter.split_documents(documents)

参数说明:

  • chunk_size:每个文档块的最大字符数
  • chunk_overlap:相邻块之间的重叠字符数,用于保持上下文连贯性
  • separators:分割文本的分隔符列表,按优先级排序

接下来,我们使用OpenAI的嵌入模型将文档块转换为向量,并存储在Milvus中。

from langchain_milvus import Milvus, BM25BuiltInFunctionfrom langchain_openai import OpenAIEmbeddingsdef create_vector_store(documents, collection_name, uri=URI):  # 创建嵌入模型  embeddings = OpenAIEmbeddings()  # 配置BM25分析器参数(用于生成稀疏向量)  analyzer_params = {    "tokenizer": "whitespace",  # 使用空格分词    "filter": ["lowercase", {"type": "stop", "stop_words": ["the", "a", "an", "and", "or", "but", "is", "are", "in", "to", "with", "of"]}]  }  # 创建向量存储  vector_store = Milvus.from_documents(    documents=documents,    embedding=embeddings,    builtin_function=BM25BuiltInFunction(analyzer_params=analyzer_params),    vector_field=["dense", "sparse"],  # 同时存储密集向量和稀疏向量    connection_args={"uri": uri},    collection_name=collection_name,  )  return vector_store

技术说明:

  • OpenAIEmbeddings:使用OpenAI的嵌入模型生成密集向量
  • BM25BuiltInFunction:使用BM25算法生成稀疏向量,用于全文检索
  • vector_field=["dense", "sparse"]:同时存储两种向量,支持混合搜索

下面是一个完整的文档处理流程,从加载到向量化存储:

def process_documents(directory, collection_name, chunk_size=1000, chunk_overlap=200):  try:    # 1. 加载文档    print("正在加载文档...")    documents = load_all_documents(directory)    print(f"成功加载 {len(documents)} 个文档")    # 2. 分割文档    print("正在分割文档...")    chunks = split_documents(documents, chunk_size, chunk_overlap)    print(f"文档已分割为 {len(chunks)} 个块")    # 3. 创建向量存储    print("正在创建向量存储...")    vector_store = create_vector_store(chunks, collection_name)    print(f"向量存储已创建,集合名称:{collection_name}")    return vector_store  except Exception as e:    print(f"处理文档时出错:{str(e)}")    raise

使用示例:

# 处理文档并创建向量存储vector_store = process_documents(  directory="./documents",  collection_name="knowledge_base",  chunk_size=1000,  chunk_overlap=200)保存向量存储配置以便后续使用vector_store.save_local("./vector_store_config")

第四步,知识库问答系统实现

在开始实现之前,需要准备以下环境和依赖:

# 安装必要的依赖包pip install langchain langchain-openai langchain-milvus python-dotenv# 环境变量设置import osfrom dotenv import load_dotenv# 加载环境变量load_dotenv()# 确保设置了OpenAI API密钥if not os.getenv("OPENAI_API_KEY"):  raise ValueError("请设置OPENAI_API_KEY环境变量")# Milvus连接设置MILVUS_URI = os.getenv("MILVUS_URI", "http://localhost:19530")

完整实现方案

import osfrom typing import List, Dict, Any, Optionalfrom langchain_core.documents import Documentfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain_milvus import Milvus, BM25BuiltInFunctionfrom langchain_openai import OpenAIEmbeddings, ChatOpenAIfrom langchain.chains import RetrievalQAfrom langchain.prompts import PromptTemplate# 1. 加载文档def load_documents(directory: str) -> List[Document]:  """  从指定目录加载所有文本文档  Args:    directory: 文档所在目录路径  Returns:    Document对象列表  """  documents = []  try:    for filename in os.listdir(directory):      if filename.endswith(('.txt', '.md', '.pdf')):        file_path = os.path.join(directory, filename)        try:          with open(file_path, 'r', encoding='utf-8') as f:            content = f.read()            documents.append(Document(              page_content=content,              metadata={"source": filename, "path": file_path}            ))        except Exception as e:          print(f"读取文件 {filename} 时出错: {str(e)}")  except Exception as e:    print(f"读取目录 {directory} 时出错: {str(e)}")  print(f"成功加载了 {len(documents)} 个文档")  return documents# 2. 文档分割def split_documents(documents: List[Document],          chunk_size: int = 1000,          chunk_overlap: int = 200) -> List[Document]:  """  将文档分割成更小的块  Args:    documents: 要分割的文档列表    chunk_size: 每个块的最大字符数    chunk_overlap: 相邻块之间的重叠字符数  Returns:    分割后的文档块列表  """  text_splitter = RecursiveCharacterTextSplitter(    chunk_size=chunk_size,    chunk_overlap=chunk_overlap,    separators=["\n\n", "\n", "。", "!", "?", ".", " ", ""]  )  split_docs = text_splitter.split_documents(documents)  print(f"文档被分割为 {len(split_docs)} 个块")  return split_docs# 3. 创建向量存储def create_vector_store(documents: List[Document],            collection_name: str = "knowledge_base",            recreate: bool = False) -> Milvus:  """  创建向量存储  Args:    documents: 要存储的文档列表    collection_name: Milvus集合名称    recreate: 是否重新创建集合  Returns:    Milvus向量存储对象  """  try:    # 配置向量存储    embeddings = OpenAIEmbeddings()    # 配置BM25分析器参数    analyzer_params = {      "tokenizer": "jieba",  # 使用结巴分词器处理中文      "filter": ["lowercase", {"type": "stop", "stop_words": ["的", "了", "是"]}],    }    # 创建向量存储    vector_store = Milvus.from_documents(      documents=documents,      embedding=embeddings,      builtin_function=BM25BuiltInFunction(analyzer_params=analyzer_params),      vector_field=["dense", "sparse"],  # 同时存储密集向量和稀疏向量      connection_args={"uri": MILVUS_URI},      collection_name=collection_name,      drop_old=recreate,  # 是否删除已存在的集合    )    print(f"成功创建向量存储,集合名称: {collection_name}")    return vector_store  except Exception as e:    print(f"创建向量存储时出错: {str(e)}")    raise# 4. 创建问答链def create_qa_chain(vector_store: Milvus,          temperature: float = 0.0,          search_k: int = 5) -> RetrievalQA:  """  创建检索问答链  Args:    vector_store: Milvus向量存储对象    temperature: 生成模型的温度参数    search_k: 检索的文档数量  Returns:    RetrievalQA链对象  """  try:    # 创建混合检索器    retriever = vector_store.as_retriever(      search_type="hybrid",  # 使用混合搜索模式      search_kwargs={        "k": search_k,  # 检索top-k个文档        "hybrid_search": {          "dense_weight": 0.7,  # 密集向量权重          "sparse_weight": 0.3,  # 稀疏向量权重        }      }    )    # 创建自定义提示模板    template = """    使用以下上下文来回答最后的问题。如果你不知道答案,就说你不知道,不要试图编造答案。    {context}    问题: {question}    回答:    """    prompt = PromptTemplate(      template=template,      input_variables=["context", "question"]    )    # 创建大语言模型    llm = ChatOpenAI(temperature=temperature)    # 创建问答链    qa_chain = RetrievalQA.from_chain_type(      llm=llm,      chain_type="stuff",      retriever=retriever,      return_source_documents=True,      chain_type_kwargs={"prompt": prompt}    )    return qa_chain  except Exception as e:    print(f"创建问答链时出错: {str(e)}")    raise# 5. 完整流程示例def build_knowledge_qa_system(docs_directory: str,               collection_name: str = "knowledge_base") -> RetrievalQA:  """  构建完整的知识库问答系统  Args:    docs_directory: 文档目录    collection_name: 向量存储集合名称  Returns:    问答系统链  """  # 加载文档  documents = load_documents(docs_directory)  # 分割文档  split_docs = split_documents(documents)  # 创建向量存储  vector_store = create_vector_store(split_docs, collection_name)  # 创建问答链  qa_chain = create_qa_chain(vector_store)  return qa_chain# 6. 使用示例def query_example():  """示例:如何使用问答系统"""  # 构建问答系统  qa_system = build_knowledge_qa_system("./documents", "company_knowledge")  # 查询示例  query = "公司的年假政策是什么?"  result = qa_system({"query": query})  # 输出结果  print(f"问题: {query}")  print(f"回答: {result['result']}")  # 输出来源文档  print("\n来源文档:")  for i, doc in enumerate(result["source_documents"]):    print(f"文档 {i+1}: {doc.metadata['source']}")    print(f"内容片段: {doc.page_content[:100]}...\n")

第五步,运行效果示例。以下是系统运行的示例输出:

成功加载了 15 个文档文档被分割为 78 个块成功创建向量存储,集合名称: company_knowledge问题: 公司的年假政策是什么?回答: 根据公司政策,正式员工每年享有15天带薪年假。工作满3年的员工额外增加3天年假,满5年的员工额外增加5天年假。年假可以分多次使用,但每次至少使用半天。未使用的年假可以结转到下一年,但最多结转5天。来源文档:文档 1: company_policy.txt内容片段: # 公司员工手册 ## 休假政策 ### 年假 正式员工每年享有15天带薪年假。工作满3年的员工额外增加3天年假,满5年...文档 2: hr_faq.txt内容片段: # 人力资源常见问题 ## 休假相关 Q: 年假如何申请? A: 员工可通过OA系统提交年假申请,需提前3个工作日申请...

03经验总结

通过上文,我们展示了一个比较初级的基于全文检索的企业知识库系统的构建,但是实操中,我们可能还会遇到一些更加具体且琐碎的问题,比如

比如全文检索基于精确的词语匹配,可能无法处理同义词(不同词语表达相同含义)和多义词(同一词语有多种含义)的问题。例如,用户搜索"汽车"时,可能无法找到只包含"轿车"或"车辆"的文档。

**我们可以有三个解决思路。(1)同义词扩展:在索引和查询时添加同义词;(2)****查询扩展:**自动扩展用户查询以包含相关术语;(3)结合语义搜索:通过密集向量捕捉语义关系。

再比如,不同语言有不同的语法结构和词形变化规则,这给全文检索带来挑战。例如,中文不像英文那样有明显的词语边界,需要特殊的分词技术。

解决方案主要有两个。(1)语言特定分词器:为不同语言使用专门的分词技术;(2)**多语言支持:构建支持多种语言的索引。

此外,随着数据量的增长,全文检索系统需要处理越来越多的文档,这对系统性能提出了挑战。

解决方案有三个。(1)**分布式索引:将索引分散到多个服务器;(2)增量索引更新:只更新变化的部分;(3)冷热数据,缓存机制:缓存热门查询结果。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
  • …

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
  • …

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
  • …

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案
  • …

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

在这里插入图片描述

Langchain 集成 Milvus 阅读详情

相关推荐

milvus安装及langchain调用

Milvus 是一款全球领先的开源向量数据库,赋能 AI 应用和向量相似度搜索,加速非结构化数据检索。 Milvus专注于存储、索引及管理由深度神经网络和其他机器学习(ML)模型生成的海量嵌入向量,能够轻松应对万亿级别的向量索引任务。

qq128252的博客 3093

LangChain 查询使用指「北」

这些训练数据是模型能够获取到的知识,这意味着随着时间的推移,在旧数据上训练的 LLM 不仅可能无法处理上下文,其答案准确性也有待提高。不过,如果想以编程的方式与 GPT 进行交互,那么就需要一个像 LangChain 这样的查询接口。LangChain 为 GPT 提供了一系列的查询接口,从【通过一个 prompt 提问】的简单接口,到【通过多个问题让 GPT 进行上下文学习】的复杂接口,一应俱全。与许多 LLM 工具一样,默认情况下,LangChain 使用的 LLM 是 OpenAI 的 GPT。

ZILLIZ 1713

RAG技术详解:从原理到实战,构建高效检索增强生成系统

检索增强生成(RAG)是一种将外部知识库与大语言模型(LLM)结合的架构范式,旨在解决LLM的静态知识局限和幻觉问题。其核心原理是通过向量化技术将文档转换为语义向量,并利用向量数据库实现高效相似性检索,从而为LLM提供实时、准确的上下文信息。该技术的核心价值在于显著提升模型回答的准确性、可信度和可追溯性,同时支持动态知识更新。在应用场景上,RAG广泛应用于智能客服、企业知识库、文档分析等需要处理私有或实时数据的领域。本文以Python、LangChain和Chroma为例,深入解析了RAG的完整实现流程,包

weixin_34319374的博客 1400

【AI大模型】不止语义检索,Milvus+LangChain全文检索RAG教程来了

最近,OpenAI和LangChain杠上了。一个是大模型扛把子,一个是最受欢迎的大模型框架 而抬杠的原因很简单LangChain觉得OpenAI 根本不懂agent: 但总结一句话来说,就是对于agent开发,OpenAI更倾向于高级抽象能加速开发;而LangChain则觉得大模型要能真正发挥作用,需要精确控制能确保可靠性 ,因此workflow和agent都必不可少。 实际上,两者的争论没有完全的对错之分。OpenAI指出的的是长期趋势,而LangChain给出的,则是立足当下,针对具体问题的更优

Android23333的博客 1275

从RAG到智能体:LangChain、Milvus与LangGraph构建AI应用全栈指南

检索增强生成(RAG)是一种通过结合外部知识库来增强大语言模型生成能力的技术范式。其核心原理是将非结构化文档转换为向量表示,通过语义搜索从向量数据库中检索相关信息,再将其作为上下文输入给大模型,从而生成更准确、更具事实依据的答案。这项技术的价值在于有效解决了大模型知识静态化、无法处理私有或实时数据的痛点,显著提升了问答系统的可靠性和实用性。在应用场景上,RAG广泛用于智能客服、企业知识库问答、文档分析与总结等领域。本文聚焦于如何将RAG与智能体(Agent)技术结合,并利用LangChain框架、Milvu

weixin_28362173的博客 297

从原理到实战:Embedding模型如何驱动RAG系统实现精准语义检索

在人工智能与自然语言处理领域,将非结构化的文本数据转化为机器可理解的数值表示,是实现语义理解的基础。其核心原理在于通过深度神经网络(如Transformer的Encoder部分)对文本进行上下文编码,将高维、稀疏的词语映射为低维、稠密的语义向量。这一过程,即encoder得到embedding,使得语义相近的文本在向量空间中距离更近。该技术的核心价值在于为海量文本信息建立了可计算、可比较的数学基础,从而支撑起智能搜索、推荐系统、文本分类等上层应用。尤其在当前热门的检索增强生成(RAG)架构中,高质量的文本向

weixin_33919950的博客 320

大模型应用开发实战:LangChain、RAG、Agent与向量数据库Milvus全栈解析

在人工智能应用开发领域,检索增强生成(RAG)和智能体(Agent)是两种核心范式,它们共同解决了大语言模型的知识更新与任务执行难题。RAG通过从外部知识库检索相关信息来增强模型生成,有效应对了模型知识过时和“幻觉”问题,其技术核心在于高效的向量检索与上下文构建。智能体则赋予模型规划与工具调用的能力,使其能够自主完成多步骤复杂任务。这两种技术通常需要与向量数据库(如Milvus)和应用框架(如LangChain)协同工作,构建起从数据处理、知识存储到智能交互的完整链路。本文将以一个完整的智能问答系统为例,深

weixin_30644369的博客 372

基于FAISS与LangChain的RAG系统实战:从原理到企业级应用

向量数据库与语义搜索是构建现代智能应用的核心技术。其原理在于将文本、图像等高维数据转换为向量表示,通过计算向量间的相似度(如余弦相似度)实现超越关键词匹配的语义检索。这项技术的核心价值在于解决了传统搜索无法理解语义、以及大语言模型(LLM)知识更新滞后与幻觉问题,为AI应用提供了准确、可追溯的外部知识源。其典型应用场景包括智能客服、企业知识库、个性化推荐和内容生成助手。本文以RAG(检索增强生成)这一热门AI应用架构为例,详细演示了如何利用FAISS向量数据库和LangChain框架,从文档加载、文本分割、

weixin_30568591的博客 569

基于LangChain与Milvus构建电子书RAG问答系统实战指南

检索增强生成(RAG)技术通过结合信息检索与大型语言模型,有效解决了传统搜索在语义理解上的局限。其核心原理是先将知识库文档转化为向量嵌入,利用向量数据库进行高效语义检索,再将检索到的相关上下文提供给LLM生成精准答案,从而显著提升回答的准确性与可追溯性。这项技术在构建智能知识库、企业文档查询和教育辅助等场景中具有重要价值。本文以电子书智能问答为具体应用场景,详细阐述了如何运用LangChain框架编排流程,并集成Milvus向量数据库与BGE嵌入模型,实现一个从文档处理到Web交互的完整RAG系统解决方案。

weixin_33158887的博客 241

RAG全链路调优实战:从文档切片到混合检索的工程化落地

检索增强生成(RAG)是解决大模型知识过时与幻觉问题的关键技术,其核心原理是将外部知识库与LLM结合,通过检索相关文档片段作为上下文,生成更准确、更具事实依据的答案。这项技术的价值在于显著提升了模型在专业领域问答中的可靠性与实用性,广泛应用于企业知识库、智能客服和文档分析等场景。在实际工程落地中,文档切片策略、向量化索引和混合检索等环节的精细调优至关重要,例如通过合理的chunkSize设置和重叠策略优化文本块质量,并引入重排序模型提升语义相关性。本文以Spring Boot和Milvus为例,深入探讨了如

weixin_30600197的博客 1048

向量数据库Milvus实战:从Docker部署到RAG知识库构建

向量数据库是大模型时代支撑RAG与知识库的核心组件,它通过Embedding将非结构化数据转换为高维向量,并利用近似最近邻算法实现毫秒级相似检索。与关系型数据库不同,向量数据库解决的是“相似”而非“等于”的问题,因此在企业知识库、智能客服、智能体问答等场景中不可或缺。Milvus作为开源向量数据库的代表,具备完整的架构、丰富的索引类型和成熟的生态集成。本文从Milvus的安装部署入手,涵盖Docker Compose、Windows环境、外部MinIO配置,并通过PyMilvus演示集合创建、数据写入、向量

weixin_33391446的博客 295

基于Milvus 3.0搭建企业级RAG知识库:从向量检索到完整问答链路

在人工智能应用落地中,如何让大模型更准确地回答私有领域问题?检索增强生成(RAG)技术通过外部知识库增强模型回答能力,而向量数据库在其中扮演“记忆”角色。本文从向量检索原理出发,分析企业级RAG知识库对底层存储与检索的诉求,介绍Milvus 3.0在混合检索、高并发、存算分离等方面的技术价值,并结合LangChain与Embedding模型,完整演示文档切分、向量写入、索引构建、相似度检索及大模型生成的工程实践,帮助读者构建一套可扩展的智能知识库系统。

weixin_33981932的博客 334

提升语义搜索效率:LangChain 与 Milvus 的混合搜索实战

LangChain与Milvus的结合构建了一套高效的语义搜索系统。LangChain负责处理多模态数据(如文本、PDF等)的嵌入生成与任务编排,Milvus作为向量数据库提供大规模向量相似性检索能力。二者协同实现从非结构化数据到结构化检索的完整流程。在本文我们将从最常见的密集+稀疏情况开始,然后介绍各种通用的混合搜索使用方法。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1953

基于Milvus与Spring Boot构建企业级RAG知识库:从原理到实战

向量数据库是处理非结构化数据(如文本、图像)的核心基础设施,它通过将数据转换为高维向量并利用相似性搜索原理,使AI模型能够“理解”和检索语义信息。这项技术为AI应用提供了高效、可扩展的数据存储与检索能力,其核心价值在于解决了大语言模型的知识更新、事实依据和幻觉问题。在检索增强生成(RAG)等应用场景中,向量数据库负责存储文档的向量化表示,当用户提问时,它能快速找到语义相关的知识片段。本文聚焦于如何将专业的开源向量数据库Milvus与RAG流程深度结合,并提供了基于Spring Boot和LangChain4

weixin_34248705的博客 307

CAPL编程的催化剂——CAPLdll的实现

CANoe作为一款功能强大的总线开发及测试工具,不仅仅是因为其丰富的库函数,最重要的是其兼容了多种编程语言,可以实现灵活的开发,极大的解决了纯CAPL编程所带来的限制,如通过动态链接库(DLL)来实现复杂函数的编写,使其能够在CAPL中可以调用,下面将对DLL的实现进行分析。capldll.cpp这个文件初看相当复杂,从整体上来说,这段代码主要包含了两部分:自定义函数实现和回调函数定义,今天的主要任务是实现自定义函数,这里的函数定义与普通函数定义差不多,只是利用了CAPL的格式。在VS2017工程中打开。

车载控制器AutoSAR软件开发工程师 4649

MediaCreationToolW11:Windows11系统升级与修复利器

在日常使用Windows11系统的过程中,我们可能会遇到一些棘手的问题,比如系统更新时出现异常导致无法成功更新,或者系统本身出现异常需要进行无损修复。此外,当我们的电脑尚未升级到Windows11,而我们又希望进行升级时,一款高效且可靠的工具就显得尤为重要。接下来,MediaCreationToolW11将开始下载Windows11的安装文件,并创建Windows11介质。在“选择你要执行的操作”界面中,选择“ISO文件”。此时,你可以使用你的账户登录系统,并开始使用全新的Windows11系统了。

nntxthml的博客 2409

LangChain RAG实战:从原理到部署的检索增强生成全链路指南

检索增强生成(RAG)是解决大语言模型知识幻觉与时效性问题的关键技术框架。其核心原理在于通过外部知识库检索与生成模型结合,为模型提供实时、准确的上下文信息,从而提升回答的可靠性与针对性。在工程实践中,RAG的价值体现在能够将通用大模型快速适配到企业私有知识库、客服系统、智能文档问答等具体业务场景。本文以LangChain框架为例,深入剖析了RAG流水线中**文档分割**与**向量检索**等关键环节的优化策略,并提供了从零搭建到生产部署的完整实战方案,帮助开发者构建高效、稳定的AI应用。

weixin_30266885的博客 356

ULN2003驱动28BYJ-48步进电机详解(附:51 32代码讲解)

本文介绍了28BYJ-48步进电机的驱动原理以及注意事项,并展示了极简 32 51驱动代码

qq_41818650的博客 1万+

工业级RAG向量数据库选型:Elasticsearch与Milvus的深度对比与实战指南

向量数据库作为检索增强生成(RAG)系统的核心组件,其选型直接关系到AI应用在工业场景下的成败。向量数据库的核心原理是通过将非结构化数据转化为高维向量,并利用近似最近邻(ANN)等索引算法实现高效语义检索,从而突破传统关键词匹配的局限,解锁深层次的数据关联价值。在工业级应用中,技术选型需额外考量混合检索、复杂过滤、高并发与可观测性等工程实践要求。Elasticsearch凭借其强大的全文检索与多类型索引原生支持,在需要结合复杂业务规则过滤的混合检索场景中表现卓越;而Milvus作为原生向量数据库,则为超大规

weixin_30546189的博客 405

人工智能机器学习从入门到高级学习资料(含资料下载地址)

机器学习是一个技术含量较高的领域,高效学习需要多种途径相结合.以下是一些推荐的学习资源。首先介绍几个比较有用的社区,包含了丰富的学习资料

2401_86900375的博客 1648

AI视频生成本地搭建图文详细过程

在自己的电脑上搭建一个AI,主要用于通过自己输入的关键字来自动生成视频文案,把视频文案自动生成视频,再自动给视频配音配字幕。

张小三的博客 4695
上一篇: Oliva:一个多智能体,开源语音 RAG 助手
下一篇: 为什么一定要做Agent智能体?
Python_金钱豹
博客等级 码龄5年 1万+粉丝 2840原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值