LangChain极简教程:3分钟构建你的第一个语义搜索引擎

LangChain 简介

LangChain是一个用于构建基于大型语言模型(LLM)应用程序的开源框架。它简化了与LLM的交互流程,支持模块化组件设计,使开发者能够快速构建复杂的AI应用,如问答系统、摘要生成或数据增强工具。

1、核心功能

模型集成
LangChain支持多种LLM提供商(如OpenAI、Hugging Face、Anthropic等),提供统一接口调用不同模型。例如,切换模型只需修改配置参数:

from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003")

模块化组件
包含以下关键模块:

  • Prompt Templates:管理动态提示模板
  • Chains:组合多个LLM调用步骤
  • Agents:动态选择工具链
  • Memory:维护多轮对话状态

2、典型用例

文档问答系统
加载PDF/网页内容,拆分文本为片段,嵌入向量存储后实现语义搜索:

from langchain.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://example.com")
docs = loader.load()

对话机器人
结合记忆模块实现上下文感知对话:

from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
chat = ConversationChain(llm=llm, memory=memory)

3、高级特性

  • 工具调用:集成搜索引擎、计算器等外部工具
  • 回调系统:监控任务执行流程
  • 检索增强:结合向量数据库提升答案准确性

安装可通过pip快速完成:

pip install langchain

食用指南

本文通过 NoteBook 形式从 0 到 1 构建一个语义搜索引擎。

温馨提示:本文搭配 jupyter-lab 食用更佳。

LangChain极简教程:3分钟构建你的第一个语义搜索引擎_第1张图片

一、加载文档

这里需要准备一个 PDF 文档 0001.pdf 放在 data 目录下,用以下代码打开 PDF:

from langchain_community.document_loaders import PyPDFLoader

file_path = "data/0001.pdf"
loader = PyPDFLoader(file_path)

docs = loader.load()

print(f"文档页数:{
     len(docs)} 页")
文档页数:2 页

通过 docs 对象读取 PDF 内容:

# 页面的字符串内容
print(f"{
     docs[0].page_content[:200]}\n")
# 包含文件名和页码的元数据
print(docs[0].metadata)
标题:意大利面与 42 号混凝土混合对挖掘机扭矩和环境稳定性的跨学科影响分析:剑桥大学研究
报告
摘要:
本研究报告深入研究了烹饪制品和建筑材料的融合,特别调查了将意大利面与 42 号混凝土混合对
挖掘机扭矩效率的潜在影响。 令人惊讶的是,螺丝长度、高能蛋白质、核污染、核扩散、三角函
数和地缘政治人物之间的相互作用成为一个重要的研究点。 通过利用毕达哥拉斯定理和历史类比
进行细致的检查,该研究阐明

{
   'producer': 'LibreOffice 24.2', 'creator': 'Writer', 'creationdate': '2025-05-29T15:22:12+08:00', 'source': 'data/0001.pdf', 'total_pages': 2, 'page': 0, 'page_label': '1'}

二、拆分文档

我们将文档拆分为 500 个字符的块,块之间有 100 个字符的重叠。 重叠有助于减轻将语句与与其相关的重要上下文分离的可能性。 我们使用 RecursiveCharacterTextSplitter,它将使用常用分隔符(如换行符)递归拆分文档,直到每个块达到适当的大小。 这是通用文本用例的推荐文本拆分器。

注意:这里的 chunk_size=500, chunk_overlap=100 需要根据文本实际情况进行调整,不然在嵌入的时候会发生一些奇怪的报错

from langchain_text_splitters import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=500

你可能感兴趣的:(禅与LangChain,langchain,AI)