当前位置: 首页 > web >正文

【每天一个知识点】LangChain

“LangChain” 是一个用于构建由大语言模型(LLMs)驱动的可组合、可交互、多工具协作的智能应用开发框架。它不仅能管理 Prompt、上下文、记忆和工具,还支持构建复杂的“多步骤推理”任务流程。


一、LangChain 简介

1. 核心定位

LangChain 旨在把大语言模型作为决策引擎和控制中枢,支持你快速构建像 ChatGPT 插件、智能问答系统、智能体(Agent)等复杂任务应用。

2. 编程语言支持

主要支持 PythonJavaScript/TypeScript 两种语言版本,社区主要以 Python 为主。


二、LangChain 主要组成模块(Python版)

模块作用描述
PromptTemplates提示词模板构建与变量注入,适配不同任务语境
LLMs/ChatModels封装 OpenAI、Anthropic、Cohere 等模型
Chains把多个组件串联起来构成完整流程(如提问 → 搜索 → 回答)
Agents引入“工具调用”能力,通过思考和行动完成任务(如 ReAct Agent)
Tools第三方工具,如搜索引擎、Python 解释器、API 接口
Memory会话记忆,适用于多轮对话场景
Retrievers向量检索组件,支持 RAG 应用
Document Loaders & Text Splitters文档读取与分块,用于知识库构建


三、典型使用场景

1. 文档问答系统(RAG)

  • 流程:文档 → 向量化 → 查询 → LLM 生成回答

  • 模块:Document Loaders + FAISS/Chroma + Retriever + Chain

2. Agent 多工具智能体

  • 通过 ReAct Agent 实现“观察-思考-行动”闭环

  • 可调用:Google 搜索、Python 执行、网页抓取、数据库查询等

3. 任务编排(Multi-step Reasoning)

  • 使用 SequentialChainRouterChainConversationChain 等模块完成复杂任务分解与流程管理


四、LangChain 示例代码(RAG 简易文档问答)

from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter# 加载文档并切分
loader = TextLoader("example.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
texts = text_splitter.split_documents(documents)# 构建向量库
embeddings = OpenAIEmbeddings()
db = FAISS.from_documents(texts, embeddings)# 构建问答系统
retriever = db.as_retriever()
llm = ChatOpenAI(temperature=0)
qa = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)# 测试提问
query = "这篇文档讲了什么?"
response = qa.run(query)
print(response)

五、LangChain 与智能体系统的关系

特性LangChain 实现方式
工具调用通过 ToolsAgentExecutor 完成
思维链推理(Chain of Thought)通过 Chain 的分步提示构建多轮逻辑链
多Agent协同支持 MultiAgentChain 和外部任务调度引擎集成
RAG 问答与向量数据库 + Retriever 高度集成
http://www.xdnf.cn/news/9553.html

相关文章:

  • 针对Python开发的工具推荐及分析,涵盖集成开发环境(IDE)、轻量级工具、在线开发平台、代码管理工具等)
  • 智能手表怎么申请欧盟EN 18031认证
  • 主流 AI IDE 之一的 Windsurf 介绍
  • MySQL 数据迁移Postgresql(openGuass) 之 pg_chameleon
  • BGP实验报告
  • SQLiteStudio - 免费开源、轻量高效,跨平台的 SQLite 数据库管理工具,代替 Navicat for SQLite
  • 【已解决】windows gitbash 出现CondaError: Run ‘conda init‘ before ‘conda activate‘
  • 深入探讨集合与数组转换方法
  • 如何实现电竞比赛的实时直播?
  • 如何收集Oracle DB SQL Monitor报告
  • JavaScript性能优化实战大纲
  • win10 pip安装插件包报错:No matching distribution found for pytest-xlsx
  • nohup命令基本用法
  • delta 流响应
  • 华为手机用的时间长了,提示手机电池性能下降,需要去换电池吗?平时要怎么用能让电池寿命长久一些?
  • Android Compose开发架构选择指南:单Activity vs 多Activity
  • Nginx代理SSL 到Spring boot
  • 多相电机驱动控制学习(2)——基于双dq的双三相PMSM学习(考虑互感/交叉耦合)
  • Chroma 向量数据库使用示例
  • UE5 Niagara 如何让四元数进行旋转
  • 单片机 串口发送和接收
  • ⚡ Linux 系统安装与配置 Vim 编辑器(包括 Vim 插件管理器)
  • RTOS 完整概述与实战应用:从基础原理到产业实情
  • 论文略读:Deep reinforcement learning for community architectural layout generation
  • Dolphinscheduler-3.2.0分布式集群详细部署
  • 时间的基本概念与相关技术二
  • 如何将多张图组合到一张图里同时保留高的分辨率(用PPT+AdobeAcrobat)
  • 用 Appuploader,让 iOS 上架流程真正“可交接、可记录、可复用”:我们是这样实现的
  • 能按需拆分 PDF 为多个文档的工具
  • Linux C++ 开发基础命令指南