本地构建 RAG 应用的实践指南:使用 LangChain 进行检索增强生成

掌握 RAG:使用 Langchain 和 Ollama 创建本地智能应用程序 学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。 阅读详情

【精选优质专栏推荐】


每个专栏均配有案例与图文讲解,循序渐进,适合新手与进阶学习者,欢迎订阅。

在这里插入图片描述

前言

检索增强生成(RAG)是一类系统,它通过将从文档库中检索到的知识上下文整合到传统语言模型(LLMs,无论大小)中,从而在用户查询时生成更加准确和相关的响应。

在这一背景下,LangChain 作为一个框架受到广泛关注,它简化了 RAG 应用的开发,提供了将 LLM 与外部数据源集成的编排工具,管理检索管道,并能够稳健且可扩展地处理不同复杂程度的工作流。

本文讲解如何使用 LangChain 构建一个简单的本地 RAG 应用,并在每一步详细说明所需的关键组件。为便于实践,本文将使用 Python 进行演示。

教程正文

下图展示了一个基础 RAG 系统的简化示意及其核心组件,我们将手动实现这些组件:

在这里插入图片描述

首先,我们需要安装必要的库和框架。LangChain 的最新版本可能需要 langchain-community,因此也应一并安装。FAISS 是一个用于向量数据库中高效相似性搜索的框架。为了加载和使用现有的 LLM,我们将使用 Hugging Face 的 transformers 和 sentence-transformers 库,其中后者提供了针对句子级别优化的预训练文本嵌入模型。

首先安装上述库:

pip install langchain langchain_community faiss-cpu sentence-transformers transformers

接着,添加必要的导入以开始编码:

from langchain.llms import HuggingFacePipeline
from langchain.chains import RetrievalQA
from langchain.chains.question_answering import load_qa_chain
from langchain.prompts import PromptTemplate
from transformers import pipeline
from langchain_community.vectorstores import FAISS

我们需要的第一个组件是一个知识库,通过向量数据库实现。该数据库存储将被 RAG 系统用于上下文检索的文本文档,信息通常以向量嵌入的形式编码。我们将使用一个小型集合,其中包含九份描述东亚和东南亚多个目的地的简短文档。该数据集以压缩的 .zip 文件形式提供。

下面的代码将在本地下载数据集、解压并提取文本文件:

import urllib.request
import zipfile
import os

zip_url = "https://github.com/gakudo-ai/open-datasets/raw/refs/heads/main/asia_documents.zip"
zip_path = "asia_documents.zip"
extract_folder = "asia_txt_files"

print("Downloading zip file...")
urllib.request.urlretrieve(zip_url, zip_path)
print("Download complete!")

print("Extracting files...")
os.makedirs(extract_folder, exist_ok=True)
with zipfile.ZipFile(zip_path, "r") as zip_ref:
    zip_ref.extractall(extract_folder)

print(f"Files extracted to: {extract_folder}")

print("Extracted files:")
print(os.listdir(extract_folder))

现在我们已有一个“原始”的文本文档知识库,需要将整个数据拆分为若干块并转换为向量嵌入。

在 RAG 系统中,分块(chunking) 非常重要,因为 LLM 存在 token 限制。高效检索相关信息需要将文档切分为可管理的片段,同时保持上下文完整性,这对于 LLM 生成恰当响应至关重要。

关于将文档转化为分块并存入适合 RAG 应用的向量数据库:FAISS 将负责高效存储和索引向量嵌入,从而实现准确且高效的基于相似度的搜索。其 as_retriever() 方法便于与 LangChain 的检索方法集成,使相关文档块能够被动态检索,以优化 LLM 的响应。

在创建嵌入时,我们使用了专门为此任务训练的 Hugging Face 模型,即 all-MiniLM-L6-v2。

import os
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS

folder_path = "asia_txt_files"

documents = []
for filename in os.listdir(folder_path):
    if filename.endswith(".txt"):
        file_path = os.path.join(folder_path, filename)
        loader = TextLoader(file_path)
        documents.extend(loader.load())

text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=100)
docs = text_splitter.split_documents(documents)

embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")

vectorstore = FAISS.from_documents(docs, embedding_model)
retriever = vectorstore.as_retriever()

在上一段代码的结尾,我们初始化了 RAG 的关键组件之一:retriever。要让它完全发挥作用,当然需要将 RAG 的其余部分拼接起来。

接下来,将全面发挥 LangChain 的编排能力。下面的代码首先定义了一个用于文本生成的 LLM 管道,使用 Hugging Face 的 Transformers 库和 GPT-2 模型。

参数说明:

  • device=0:确保模型在 GPU 上运行(如果可用),显著提升推理速度。如果在 notebook 环境中运行,建议保持该设置。

  • max_new_tokens:用于控制生成响应的长度,避免过长或被截断,同时保持连贯性。之后可以尝试调整该值,观察其对生成结果质量的影响。

接下来,我们定义一个提示模板,即一个结构化且格式化的提示,能够动态包含检索到的上下文,确保模型生成基于相关知识的响应。这一步对应之前讨论的 RAG 架构中的增强模块。

然后,我们定义 LLM 链,这是 LangChain 的关键组件,用于协调 LLM 与包含增强输入的提示模板之间的交互,确保查询-响应流程结构化。

最后,使用 RetrievalQA 类初始化问答(QA)对象。在 LangChain 中,在创建链之后指定目标语言任务类型,是定义适用于特定任务(例如问答)的应用的关键。上述类将检索器(retriever)与 LLM 链连接起来。现在,我们已经将所有 RAG 构建模块完整拼接在一起。

prompt_template = "Answer the following question based on the provided context: {context}\n\nQuestion: {query}\nAnswer:"
 
prompt = PromptTemplate(input_variables=["query", "context"], template=prompt_template)
 
llm_chain = LLMChain(llm=llm, prompt=prompt)
 
retrieval_qa = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=retriever,
    verbose=True
)

现在只剩最后一步,定义一个辅助函数,用于确保增强上下文保持在 LLM 指定的 token 限制内,并在必要时截断输入。

def truncate_to_max_tokens(text, max_tokens=500):
    tokens = text.split()
    if len(tokens) > max_tokens:
        return " ".join(tokens[:max_tokens])
    return text

现在用一个关于亚洲美食的问题测试我们的 RAG 系统。观察其表现(注意,不要期望过高,因为我们使用的是小型、可管理的预训练模型用于学习目的,输出质量不会达到 ChatGPT 水平)。之后,我们可以尝试将下面注释行中的 1 改为 2 或更多,以调整用于增强的 top K 检索文档数量。

query = "What are the best Asian cuisine dishes?"

# 重要:默认只使用 top-1 文档
retrieved_docs = retriever.get_relevant_documents(query)[:1]
context = " ".join([doc.page_content for doc in retrieved_docs])
context = truncate_to_max_tokens(context, max_tokens=500)
response = retrieval_qa.run(query)
print("Answer:", response)

这是一个示例响应:

问题:What are the best Asian cuisine dishes?
参考答案:许多人希望食用“酸味”食物以获得良好效果。这包括许多受欢迎的亚洲菜肴,如辣米饭、斑豆、酱油等。许多亚洲食品公司将甜味(酱油、酸奶油以及西瓜、卷心菜和姜的组合)作为主要成分,这使得许多人能够享受传统的中国、日本和越南美食,这些菜肴都非常美味。
越南美食通常更受越南学生和专业人士欢迎,他们希望了解本国文化,可能会花时间学习或参加课程以取得优异成绩。
日本料理则呈现多样化。日本料理中最受欢迎的菜肴通常是炒饭(鼘雅)、炒蔬菜(鞊雅)和海藻(雅枊),但还有其他……

总体表现尚可。文本中部分信息可能存在不一致,但整体来看,系统合理利用了从原始文档数据集中检索到的信息,并结合了 GPT-2 的有限能力,这些能力受到其训练时通用数据集的影响。

总结

我们已经初步了解了如何在本地构建第一个 RAG 应用,具体是依靠 LangChain 来编排其主要组件,主要包括检索器(retriever)和语言模型。

通过这些步骤和技术,我们可以构建符合自身需求的本地 RAG 应用,应用潜力巨大。

从零构建RAG系统:基于LangChain与本地模型的检索增强生成实践 检索增强生成(RAG)是一种将大语言模型与外部知识库相结合的技术范式,其核心原理是通过向量化检索将用户查询与相关文档片段进行语义匹配,再将匹配结果作为上下文输入给大语言模型生成答案。这项技术的核心价值在于有效缓解了大语言模型的幻觉问题,使其能够基于私有、最新、专业的领域知识生成可靠回答,大幅提升了问答系统的准确性与专业性。在工程实践中,RAG系统通常包含文档加载、文本分割、向量化嵌入、向量存储与相似性检索等关键环节,需要综合考量嵌入模型性能、向量数据库选型、提示工程优化等要素。本文以构建企业内部知识库问答系 阅读详情

相关推荐

如何使用 Langchain、Ollama 和 Streamlit 构建 RAG

在本博客完成中,我们将指导您创建可在本地运行的 RAG 的过程。这个过程不仅会加深您对尖端语言如何计算机工作的理解,还将使您能够在自己的项目中实施它们无论您是希望将 RAG 集成到现有应用程序中,还是只是探索 NLP 的前沿领域,本教程都是您的入门之选。

songgz的专栏 6331

AI应用开发-Python:RAG-检索增强生成

大模型应用开发与RAG技术实践 摘要 本文系统介绍了大模型应用开发的三种模式,重点解析了RAG(检索增强生成)技术原理与实现路径。内容涵盖: 开发模式:模型构建、应用交互、错误修正三阶段,提出Prompt优化、RAG和微调三种纠错路径 RAG核心:通过"检索-增强-生成"流程,将外部知识库与大模型生成能力结合,有效降低幻觉风险 实践方案:基于LangChain框架的本地知识库搭建流程,包括文档加载、文本切割、向量存储等关键步骤 技术细节:详细代码实现PDF文本提取、分页处理、向量数据库构

paopao_wu的专栏 1091

使用LangChain与AWS Bedrock实现RAG管道的实战指南

在AI应用开发中,检索增强生成(RAG)是一种将信息检索和生成结合的有效方式。AWS Bedrock服务提供了一系列基础模型,通过集成Anthropic Claude用于文本生成和Amazon Titan用于文本嵌入,开发者能够更轻松地构建RAG应用程序。本文将详细介绍如何设置开发环境并实现RAG管道。

bavDHAUO的博客 430

【值得收藏】LangChain实现RAG架构:构建智能问答系统的完整指南

本文详解了LangChain框架与RAG(检索增强生成)技术的结合应用。LangChain作为大模型应用开发框架,提供了实现RAG所需的完整工具箱,包括文档加载、文本处理、向量检索等模块。通过RAG架构,可构建能理解特定领域知识的智能问答系统,解决大模型知识更新和幻觉问题。文章还介绍了LangChain的核心模块、Chain Type选择及实际应用案例,帮助开发者快速构建高效、准确的智能应用。

2401_84815887的博客 1061

从零搭建个人AI智能体:本地部署、RAG与LangChain实践指南

大语言模型(LLM)作为当前人工智能的核心技术,通过理解与生成自然语言,为构建智能应用提供了基础。其工作原理基于Transformer架构,通过海量数据预训练获得通用语言理解能力。在工程实践中,检索增强生成(RAG)技术通过结合外部知识库,有效解决了模型幻觉与知识更新滞后的问题,显著提升了回答的准确性与时效性。向量数据库作为RAG的关键组件,负责存储和高效检索文本的向量化表示。基于这些技术,开发者可以构建私有化、定制化的AI应用,例如常驻个人AI智能体。这类智能体能够7x24小时在线,结合本地知识库与工具调

weixin_34008933的博客 306

使用Python和LangChain构建本地RAG应用程序的全面指南

在当前的大数据和人工智能时代,如何高效地利用本地资源来运行复杂的语言模型(LLM)是一个非常重要的问题。特别是随着PrivateGPT、llama.cpp、GPT4All和llamafile等项目的流行,运行本地LLM的需求变得越来越迫切。本篇博客将详细介绍如何使用Python和LangChain库来构建一个本地运行的检索增强生成(RAG)应用程序。

m0_57781768的博客 1635

SpringBoot整合LangChain4j实现RAG (检索增强生成)

本文介绍了使用langchain4j,整合SpringBoot开发RAG应用的方法。

m0_71741473的博客 2206

【操作系统】Hello CTF-专为CTF比赛封装的虚拟机 Beta版

很多师傅在学习与研究CTF的道路上,总是碰到想提升自我水平,但缺少本地化的训练环境以及安装各类软件的烦恼现象;因此拥有一些趁手“武器”,干起活来将会事半功倍。CTFos是探姬(ProbiusOfficial)专为CTF比赛封装的虚拟机,基于工具集封装多个版本和系统。CTF入门选手各行业网络/信息从业人员安全相关工作人员但不想在工作机上安装CTF一些奇葩的软件…该系统是通过虚拟机封装的,需要使用打开!一个专为CTF比赛封装的虚拟机,开箱即用。

qq_47493625的博客 1万+

LangChain 与 RAG

本文包含核心概念、常见组件(Models、Prompts、Memory、Indexes、Chains、Agents)和实战要点。

xgysj的博客 1890

Python + DeepSeek 完美结合:本地部署提效指南

随着生成式 AI 和深度学习技术的快速发展,如何将智能搜索工具与本地部署结合以提升效率成为了许多企业和开发者关注的重点。DeepSeek 是一款开源的智能搜索框架,结合 Python 的灵活性,能够实现高效、可靠的本地部署方案。本文将介绍如何通过 Python 和 DeepSeek 的完美结合,实现本地化部署并提升工作效率。通过将 Python 与 DeepSeek 结合,可以快速实现语义搜索的本地化部署,确保数据安全的同时提升工作效率。文件可直接作为 DeepSeek 的输入数据。

weixin_44872675的博客 1万+

LS-DYNA超高速碰撞仿真入门:从SPH算法配置到铝靶板穿孔分析(附K文件模板)

本文详细介绍了使用LS-DYNA中的SPH(光滑粒子流体动力学)算法进行超高速碰撞仿真的完整流程。以铝弹丸撞击铝靶板为例,从SPH算法原理、LS-PrePost前处理、材料模型与状态方程设置,到接触定义、边界条件及K文件生成,提供了系统的入门指导和关键参数调试经验,帮助工程师高效模拟材料破碎、穿孔等极端变形问题。

h0i1j2k3l的博客 726

RAG 知识库搭建实战教程:从零到一构建本地问答系统

本文是一份面向初学者的RAG(检索增强生成)技术实战指南,帮助用户在Windows系统上从零搭建完整的RAG问答系统。指南分为六个阶段:1)环境准备(安装Python和VS Code);2)创建项目文件夹;3)安装必要的Python依赖库;4)创建测试文档;5)编写并运行RAG检索脚本(本地测试);6)集成大语言模型API实现完整问答功能。教程详细说明了每个步骤的操作方法,包括如何获取API密钥、处理中文文档、配置向量数据库等,确保即使没有AI开发经验的用户也能在30分钟内完成系统搭建。最终实现的效果是系统

weixin_46191006的博客 1589

scratch lenet(4): 开根号的C语言实现

使用C语言,分别使用二分法、牛顿法、卡马克快速法,求解正实数的开根号。包括公式推导、代码实现、运行结果,不使用任何第三方库和C标准库的数学库。

baiyu33的博客 4969

Prompt工程之LangChain 4)知识库集成(RAG 检索增强生成)

Retrieval:从外部知识库中检索相关内容(如本地文档、数据库、网页)Generation:将检索结果作为上下文交给语言模型生成答案你可以使用query = "这家公司成立于哪一年?

qq_42540492的博客 1194

使用Python实现深度学习模型:智能极端天气事件预测

在本项目中,我们成功利用Python和Keras库构建了一个基于LSTM的极端天气预测模型。通过时间序列数据,模型能够识别天气趋势并预测未来的极端天气事件。尽管这是一个简化的示例,但它为实际应用中如何利用深度学习进行天气预测提供了一个很好的基础。随着更精确的数据和更多的特征信息,类似的模型可以进一步扩展到其他极端事件预测上,如风暴预警、气象灾害评估等。

Echo_Wish 730

2万字长文:海豚调度器(DolphinScheduler)面试题深入了解

DAG图(有向无环图)是海豚调度器中表示工作流任务依赖关系的一种方式。在DolphinScheduler中,每个任务是一个节点,任务之间的依赖关系通过有向边连接这些节点来表示。无环:保证了工作流的执行顺序是确定的,避免了无限循环的问题。有向:箭头指示了任务的执行方向,即上一个任务的输出可以作为下一个任务的输入。依赖表示:通过图形化界面,用户可以通过拖拽连接线来定义任务之间的先后顺序和依赖关系。并行处理:DAG图可以表示出任务的并行关系,允许多个任务在没有直接依赖关系的情况下同时执行。条件分支。

大模型大数据攻城狮的专栏 1329

Chroma + Ollama 搭建本地RAG应用

LLM) 是通过使用海量的文本数据集(书籍、网站等)训练出来的,具备通用语言理解和生成的能力。虽然它可以推理许多内容,但它们的知识仅限于特定时间点之前用于训练的数据。是一个用于开发由大型语言模型(LLM)驱动的应用程序的框架。提供了丰富的接口、组件、能力简化了构建LLM应用程序的过程。[Ollama]是一个免费的开源框架,可以让大模型很容易的运行在本地电脑上。RAG)是一种利用额外数据增强LLM知识的技术,它通过从外部数据库获取当前或相关上下文信息,并在请求大型语言模型(LLM。

2401_85343303的博客 1577

自动分割和测量混凝土钢筋的思路与原理

该文提出了一种基于PCL库的点云处理系统,用于自动测量混凝土结构中钢筋的几何参数。系统采用多阶段处理流程:首先通过RANSAC算法提取地面并旋转对齐;接着使用区域生长算法分割混凝土结构;然后采用RANSAC线检测识别钢筋,按方向分类;最后通过圆柱拟合和坐标差计算获得钢筋间距、直径和高度差等参数。文章详细介绍了各模块的核心算法,包括地面检测、坐标变换、钢筋识别和几何计算等关键步骤,并分析了主要参数的敏感性。系统通过分层处理和坐标变换确保测量精度,为混凝土结构的无损检测提供了自动化解决方案。

weixin_45196569的博客 680

Java开发者LLM实战——使用LangChain4j构建本地RAG系统,大模型入门到精通,收藏这篇就足够了!

最新的chatGPT-4o只能基于2023年6月之前的数据进行回答,距离目前已经快一年的时间,如果想让GPT基于近一年的时间回复问题,就需要RAG(检索增强生成)技术了。

pythonhy的博客 1171

基于Simulink的单级式光伏并网系统MPPT控制仿真

本文基于Simulink平台,详细介绍了单级式光伏并网系统的MPPT控制仿真实现。主要内容包括:1)阐述MPPT作为光伏系统"智能大脑"的核心作用;2)解析单级式系统架构及扰动观察法(P&O)算法原理;3)以10kW户用系统为例,分步骤演示建模过程,包括光伏阵列搭建、P&O控制器实现(含MATLAB代码)、并网控制设计等;4)通过仿真验证系统在光照突变下的动态响应性能,MPPT效率达98.3%。文章还提出了变步长P&O等优化方向,为光伏系统仿真与控制提供实用指导。

xiaoheshang_123的博客 111

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LangChain实战进阶:检索生成(RAG)+Agent+MCP工具全解析

在大模型应用开发中,检索增强生成(RAG)是解决大模型知识过时、幻觉问题的核心方案,而Agent 智能体则是让大模型具备自主决策、工具调用能力的关键,也是实现 AI 工程化落地的重要方向。本文将基于 LangChain 框架,从检索与生成的核心实现,到Agent 智能体的基础构建、工具扩展、MCP 协议集成及记忆功能添加,进行一站式实战讲解,所有代码均可直接运行,助力开发者快速掌握大模型应用进阶开发技能。向量检索核心算法(KNN/ANN/HNSW)及 Milvus 实战实现。

实战怎么玩,你就怎么学 1267

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

使用本地组件构建RAG应用:通过Ollama与LLaMA 3.1实现

使用本地组件构建RAG应用:通过Ollama与LLaMA 3.1实现

Y525698136的博客 1361

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

text-humanizer 混合引擎 mixed_engine 详解:如何用双向翻译打分选出最自然文本的完整指南

text-humanizer 是一款完全免费的开源 AI 文本拟人化工具,能将 AI 生成的文本改写为更自然的"人类风格",并可绕过 Turnitin、GPTZero 等大多数 AI 检测器。其中 `mixed_engine`(混合引擎)是项目里一个巧妙的策略模块:它把同一句话丢给多个翻译引擎做**双向翻译打分**,再自动挑出得分最高、也就是"最像人写的"那一版输出。这篇文章为你拆解这套机制的完整

gitblog_00319的博客 201

【实战】LangChain|Ollama本地模型快速集成与RAG应用构建指南(附完整代码)

本文详细介绍了如何利用LangChain和Ollama快速集成本地大语言模型并构建RAG应用。从环境准备、文档处理到向量存储与检索,提供了完整的代码示例和实战指南,帮助开发者高效实现基于私有知识库的智能问答系统。

weixin_30899023的博客 330

RAG实战:构建基于本地大模型的智能问答系统

检索(Retrieval)从知识库检索相关文档利用向量数据库进行高效存储和检索通过语义相似度找到最相关内容增强(Augmentation)将检索内容注入提示模板为模型提供准确的上下文确保回答基于可靠信息生成(Generation)利用大模型生成回答保证回答的准确性和可追溯性本文介绍的RAG问答系统结合了最新的AI技术,实现了一个既智能又可靠的问答系统。通过使用本地大模型和RAG技术,我们可以构建出适合特定领域的智能问答应用,为用户提供准确、可靠的答案。

大白菜代码的博客 1703

从零搭建RAG系统:基于LangChain与Milvus的检索增强生成实践

检索增强生成(RAG)是当前连接大语言模型与私有知识库的关键技术范式。其核心原理在于通过向量化技术将非结构化文档转换为语义向量,并利用向量数据库进行高效相似度检索,从而为模型提供精准、实时的外部知识参考。这一技术有效缓解了大模型普遍存在的“幻觉”与知识滞后问题,显著提升了生成内容的准确性与可信度。在工程实践中,RAG系统通常涉及文档加载、文本分割、向量化嵌入、向量存储检索及提示工程等多个环节,广泛应用于智能问答、知识库AI化、企业级助手等场景。本文以LangChain应用框架和Milvus向量数据库为核心,

weixin_28678151的博客 246
上一篇: 【人工智能】构建基于 Qwen1.5-7B-Chat 的轻量级 Python 对话助手
下一篇: 从零开始构建推荐系统:Python 中的矩阵分解方法
秋说
秋说 优质创作者: 编程框架、信息安全技术领域 优质创作者: 编程框架、信息安全技术领域
博客等级 码龄4年 3万+粉丝 1906原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值