本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。

一、LangChain搜索工具实战:集成DuckDuckGo实现实时信息查询

核心场景:解决大模型知识滞后问题,通过搜索引擎获取实时信息

1.1 基础集成方案

from langchain_community.tools import DuckDuckGoSearchRun
# 初始化搜索工具
search = DuckDuckGoSearchRun()
result = search.invoke("OpenAI 2025年最新模型发布计划")
print(result)  # 返回简洁文本摘要

1.2 高级配置(含元数据过滤)

from langchain_community.utilities import DuckDuckGoSearchAPIWrapper
# 定制化搜索参数
wrapper = DuckDuckGoSearchAPIWrapper(region="zh-cn",          # 中文结果max_results=3,           # 限制结果数time="y"                 # 最近一年信息
)
search = DuckDuckGoSearchResults(api_wrapper=wrapper)
result = search.invoke("量子计算机最新突破")
print(result[0]['title'], result[0]['link'])  # 输出标题和链接

1.3 代理解决访问限制

# 通过代理API提升稳定性:cite[1]
proxy_wrapper = DuckDuckGoSearchAPIWrapper(api_endpoint="http://your-proxy-domain.com",  # 自建代理服务max_results=5
)

避坑指南:公共API存在频率限制,建议使用代理或自建网关服务

二、Langchain本地搜索:SearxNG+Agent实战

核心价值:开源、去中心化的搜索引擎,保护隐私且可定制搜索源

2.1 自建SearxNG服务(关键配置)

# settings.yml 启用JSON输出:cite[8]
search:formats:- html- json  # 必须启用API格式

2.2 LangChain集成方案

from langchain_community.utilities import SearxSearchWrapper
# 连接自建实例
searx = SearxSearchWrapper(searx_host="http://localhost:8888")
results = searx.run("Llama3微调教程", engines=["github"])
# 作为Agent工具使用:cite[2]
tools = load_tools(["searx-search"], searx_host="http://localhost:8888")
agent = initialize_agent(tools, llm, agent="structured-chat-react")

2.3 多引擎分流策略

# 创建专用工具链:cite[8]
github_tool = SearxSearchResults(name="Github_Search", wrapper=wrapper, kwargs={"engines": ["github"]}
)
arxiv_tool = SearxSearchResults(name="Arxiv_Search",wrapper=wrapper,kwargs={"engines": ["arxiv"]}
)

三、RAG数据工程起点:文档加载与结构化准备

核心挑战:PDF/Word/HTML等格式的差异化解构

3.1 多格式文档加载

from langchain_community.document_loaders import (PyPDFLoader, Docx2txtLoader,UnstructuredHTMLLoader
)
# PDF解析(保留布局)
pdf_loader = PyPDFLoader("report.pdf")
pdf_pages = pdf_loader.load_and_split()
# Word解析(过滤样式噪声)
docx_loader = Docx2txtLoader("manual.docx")
text = docx_loader.load()[0].page_content
# HTML解析(动态渲染)
html_loader = UnstructuredHTMLLoader("page.html", bs_kwargs={"features": "lxml"}
)

3.2 高级表格提取技巧

import pdfplumber
# 提取PDF表格:cite[3]
with pdfplumber.open("financial.pdf") as pdf:page = pdf.pages[0]table = page.extract_table()for row in table:print(row[0], row[1])  # 输出单元格数据

四、RAG数据工程核心:文本切分

前沿技术:Meta-Chunking动态分块策略

4.1 传统分块方法痛点

  • 固定长度切割破坏句子完整性
  • 语义边界识别不准(如代词跨块指代)

4.2 动态分块解决方案

from langchain_experimental.text_splitter import SemanticChunker
from langchain_community.embeddings import HuggingFaceEmbeddings
# 基于语义相似度的动态分块
splitter = SemanticChunker(HuggingFaceEmbeddings(model_name="BAAI/bge-base-zh"),breakpoint_threshold=0.5  # 相似度低于阈值时切分
)
chunks = splitter.split_text(long_document)

4.3 Late Chunking技术(解决代词问题)

原理:先整文档向量化 → 再按需分块 → 避免上下文丢失
效果:代词召回率提升25%(如“它”正确指向“柏林”)

五、RAG向量数据库实战:初始化+写入与查询

架构图:

5.1 ChromaDB快速入门

import chromadb
from chromadb.utils.embedding_functions import OpenAIEmbeddingFunction
# 初始化客户端
client = chromadb.PersistentClient(path="./vector_db")
collection = client.create_collection(name="tech_docs",embedding_function=OpenAIEmbeddingFunction()
)
# 写入数据
collection.add(documents=["量子计算原理...", "区块链技术..."],metadatas=[{"source": "doc1"}, {"source": "doc2"}],ids=["id1", "id2"]
)
# 相似查询
results = collection.query(query_texts=["量子比特的物理实现"],n_results=2
)

5.2 生产级优化方案

  1. 混合索引:HNSW + 量化压缩(减少40%内存占用)
  2. 元数据过滤:where={"date": {"$gte": "2024-01-01"}}
  3. 多向量支持:为同一文档存储摘要/关键词/正文向量

六、RAG全流程实战:从文档到问答闭环

完整架构图:

6.1 代码实现(LangChain链式集成)

from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
# 构建混合检索链
retriever = vector_db.as_retriever(search_kwargs={"k": 3})
qa_chain = ({"context": lambda x: format_results(retriever.invoke(x["query"]),"question": RunnablePassthrough()}| prompt| ChatOpenAI(model="gpt-4o")| StrOutputParser()
)
# 动态路由:根据问题类型选择来源
def route_query(input):if "最新" in input["query"] or "2025" in input["query"]:return search_tool.invoke(input["query"])else:return retriever.invoke(input["query"])

6.2 性能优化关键指标

完整代码库可参考我为大家整理的飞书文档:

LangChain-Chatchat

更多AI大模型应用开发学习视频内容和资料,尽在聚客AI学院。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91145.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91145.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/91145.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法】贪心算法:将数组和减半的最少操作次数C++

文章目录前言题目解析算法原理代码示例策略证明前言 题目的链接,大家可以先试着去做一下再来看一下思路。2208. 将数组和减半的最少操作次数 - 力扣(LeetCode) 题目解析 要认真去把题目看一遍,画出题目中的有用信息。 示例一定是…

git异常退出,应该是内存不足

这次下载代码: 公司虚拟机到了一定步骤,肯定退出。而家里的虚拟机则完全正常。我把家里的虚拟机复制到公司,还是崩溃。 差异在哪里?公司电脑虚拟机内存设置为10G,家里的16。因为家里电脑64G内存。 后来确认&#xff…

机器学习13——支持向量机下

支持向量机下 非线性支持向量机(Non-linear SVMs)详解 核心思想 当数据在原始空间线性不可分时,通过**核技巧(Kernel Trick)**将数据映射到高维特征空间,使其在该空间中线性可分。 比如以下的样本在一维空间…

GPT-4和Claude哪个好

选择GPT-4还是Claude?这就像在问“苹果还是橙子哪个更好”——‌答案完全取决于你的具体需求‌。两者都是顶尖大语言模型,但各有特色。 我为你做了详细对比,帮你快速定位哪个更适合你: 🧠 核心能力对比 特性GPT-4 (OpenAI)Claude (Anthropic)‌语言理解/推理‌顶尖水平,…

RHCE考试 ——笔记

RHCE模拟测试exam_start ehcerht-vmctl start all考前说明• 请勿更改 IP 地址。DNS 解析完整主机名,同时也解析短名称。• 所有系统的 root 密码都是 redhat• Ansible 控制节点上已创建用户账户 devops。可以使用 ssh 访问• 所需的所有镜像保存在镜像仓库 utilit…

信创 CDC 实战 | TiDB 实时入仓难点与解决方案解析(以 ClickHouse 为例)

国产数据库加速进入核心系统,传统同步工具却频频“掉链子”。本系列文章聚焦 OceanBase、GaussDB、TDSQL、达梦等主流信创数据库,逐一拆解其日志机制与同步难点,结合 TapData 的实践经验,系统讲解从 CDC 捕获到实时入仓&#xff0…

Linux修炼:自动化构建make/Makefile

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《C修炼之路》、《Linux修炼&#xff1a;终端之内 洞悉真理…

GaussDB 分布式部署下创建表方法

1、问题现象 分布式集群采用水平分表的方式,将业务数据表的元组/行打散存储到各个节点内。 2、技术背景 通过全并行数据处理技术和快速定位到数据存储位置等手段可极大提升数据库性能,GaussDB分布式部署下可以创建俩种类型表,在做实际业务系统开发时根据业务场景创建不同表。…

Padavan路由器设置DNSmasq的DHCP Option

是下文的拓展&#xff1a;由于更换路由器为Padavan&#xff0c;需要配置DHCP option才能使得AC能够纳管AP 爱快路由器下水星&#xff08;Mercury&#xff09;无线管理器AC跨三层发现AP_爱快管理第三方ap-CSDN博客 DNSmasq全部配置请参考&#xff1a;Man page of DNSMASQ dhcp-…

Ubuntu 22.04 Server 虚拟机初始化配置与优化指南

✅ Ubuntu 22.04 本地/通用服务器初始化配置清单 1. 设置时区 sudo timedatectl set-timezone Asia/Shanghai2. 防火墙配置&#xff08;UFW&#xff09; sudo ufw enable sudo ufw default deny # 可选放通SSH或其他端口 sudo ufw allow 22/tcp # 查看状态 sudo ufw status # 禁…

如何在服务器上运行一个github项目

一、事情的缘起 今天一个朋友向我推荐了小红书上的一个视频&#xff0c;我看了一下这是一个在演示TypeWords项目的视频。这个项目是Github上采用vue来编写的一个开源项目。我进入该项目后看到了给出的样例网址2study.top&#xff0c;然后到上面看了一下。我发现这是一个通过打…

7.14 Java基础|String 和StringBuilder

补充注意&#xff1a;1、StringBuilder 的 append 方法可以接收整数类型的参数&#xff0c;并将其自动转换为字符串后添加到 StringBuilder 中2、该方法适用于所有基本数据类型&#xff08;如 long、double 等&#xff09;和对象&#xff08;通过调用其 toString() 方法&#x…

React 第六十九节 Router中renderMatches的使用详解及注意事项

前言 renderMatches 是 React Router 的一个高级实用函数&#xff0c;用于根据路由匹配结果渲染对应的组件树。它提供了对路由渲染过程的底层控制能力&#xff0c;特别适用于自定义路由渲染逻辑的场景。 一、基本概念和功能 renderMatches 函数的作用是将路由匹配结果转换为 Re…

esp8266-01S实现PPM波形

esp8266-01虽然小众&#xff0c;但是功能可不能少。因航模需要让ESP8266-01生成PPM波形。#include <ESP8266WiFi.h> #include <Ticker.h> // 仅用于延时函数替代#define PPM_PIN 2 // 使用 GPIO2 (需断开串口上传时的连接) #define CHANNELS 4 // PPM通道数量…

使用 pytest 测试框架构建自动化测试套件之一

pytest 是一个非常灵活且强大的测试框架&#xff0c;它支持简单的单元测试到复杂的功能测试。显著特点是其简洁的语法&#xff0c;可以无需继承 TestCase 类直接使用函数来编写测试用例&#xff0c;并通过 assert语句 进行断言。还支持参数化测试、丰富的插件系统。 pytest自动…

nacos docker 配置

docker.io/nacos 项目中国可用镜像列表 | 高速可靠的 Docker 镜像资源 1、Docker 拉取镜像 docker pull nacos/nacos-server:v2.1.0 2、创建宿主机挂载目录 mkdir -p /mydata/nacos/logs/ mkdir -p /mydata/nacos/conf/ AI写代码 3、启动nacos并复制文件到宿主机&#xff0…

Django 模板(Template)

1. 模板简介 作为 Web 开发框架,Django 提供了模板,可以很便利的动态生成 HTML。模版系统致力于表达外观,而不是程序逻辑。 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用。 模板包含: HTM…

Word 文字编辑状态下按回车换行后是非正文格式

在Word里编辑时&#xff0c;按回车后新段落突然变成标题1、标题2这类格式&#xff0c;不再是正文样式&#xff0c;这通常是因为「正文」的样式设置出了问题——可能被默认设置成“后续段落自动应用标题1/标题2格式”了。 修改方法很简单&#xff1a; 找到并打开「正文」样式的修…

PySide6 UI 灵活性:QToolBar 的浮动与停靠及 QSplitter 的可调整面板

PySide6 UI 灵活性&#xff1a;QToolBar 的浮动与停靠及 QSplitter 的可调整面板 在现代桌面应用程序开发中&#xff0c;提供灵活且用户友好的界面至关重要。PySide6&#xff08;Qt for Python&#xff09;提供了强大的工具来构建这样的界面。本文将深入探讨两个关键的 PySide6…

B4016 树的直径

B4016 树的直径 - 洛谷 题目描述 给定一棵 n 个结点的树&#xff0c;树没有边权。请求出树的直径是多少&#xff0c;即树上最长的不重复经过一个点的路径长度是多少。 输入格式 第一行输入一个正整数 n&#xff0c;表示结点个数。 第二行开始&#xff0c;往下一共 n - 1 行…