LangChain与大语言模型应用开发实战-第四章 高级应用开发_第1页
LangChain与大语言模型应用开发实战-第四章 高级应用开发_第2页
LangChain与大语言模型应用开发实战-第四章 高级应用开发_第3页
LangChain与大语言模型应用开发实战-第四章 高级应用开发_第4页
LangChain与大语言模型应用开发实战-第四章 高级应用开发_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LangChain与大语言模型应用开发实战第四章:高级应用开发讲师:XXX|XXX年X月课堂导入:企业面临的挑战数据孤岛关键知识散落在PDF、Word、网页等各种非结构化文档中,难以检索与利用。信息过载面对海量且不断增长的业务数据,如何从中快速定位、精准找到所需答案?流程繁琐大量重复性、多步骤的人工业务流程,消耗大量人力且难以保证一致性。智能不足传统系统缺乏对自然语言的理解能力,难以实现像人与人那样的自然、高效的智能化交互。本章目标:本章将探讨如何利用LangChain框架和大语言模型攻克上述挑战,实现文档数据的智能处理、文本信息的深度分析、任务的自动化执行以及复杂业务流程的整体优化。本章教学目标掌握文档数据连接器•理解其作用与原理,打通多源异构数据壁垒。

•掌握加载多种格式文档(如PDF/Word/Excel)的方法。掌握文本向量化处理工具•理解文本向量化的概念、意义及核心算法逻辑。

•掌握嵌入模型的调用与向量数据库的构建和使用。熟悉智能代理开发•理解智能代理的核心原理、Memory与工作流程。

•掌握开发具备自主思考、决策和执行能力的智能代理。掌握复杂业务链设计•理解复杂业务链“解耦-重组”的模块化设计思想。

•掌握组合多个简单的原子链,以完成复杂的端到端任务。PART01文档数据连接器应用DocumentsLoader4.1.1文档数据连接器概述定义DefinitionLangChain框架中的核心组件,充当外部文档与LangChain应用之间的桥梁。它是连接底层数据存储与上层应用逻辑的关键一环,确保数据的有效流转。作用Function负责读取、解析各种格式的文档数据(如PDF、Word、Markdown等),并将异构的原始数据统一转换为LangChain内部可以处理的标准化Document对象。本质Essence从根本上解决了大语言模型(LLM)无法直接访问外部知识库的关键限制,通过引入实时或私有文档数据,赋予LLM处理特定领域、特定场景下最新信息的能力。4.1.1为什么需要文档数据连接器?打破知识边界让LLM能够“阅读”并理解企业内部文档、行业报告、学术论文等专业资料,突破通用模型的知识局限性。提升应用价值基于特定领域的私有文档内容进行精准推理和回答,让通用AI真正落地为解决垂直业务难题的“专家”,大大提升应用价值。实现数据驱动将企业海量的非结构化文本数据转化为可被LLM利用的结构化知识,为构建智能知识库问答、商业智能分析等高级应用奠定坚实基础。4.1.1LangChain中的文档处理管道数据源支持多种来源:

本地文件(PDF,DOCX)

网页/数据库

第三方API接口等加载(Load)使用DocumentLoader

统一接口读取

异构原始数据

提取纯文本内容分割(Split)使用TextSplitter

解决上下文窗口限制

将长文档切分为

语义完整的小块向量化(Embed)调用EmbeddingModel

将文本转化为

计算机可理解的

高维向量(Embedding)存储(Store)存入VectorStore

实现高效的相似性检索

常用:Chroma,FAISS

Pinecone,Milvus等检索(Retrieve)使用Retriever

根据用户查询向量

快速查找最相关的

Top-K文本片段生成(Generate)结合检索到的上下文

通过LLM(大语言模型)

生成精准、有据可依的

最终回答4.1.2连接器实现方法:步骤一:安装依赖目标:安装所有必需的库,为后续开发做好准备。pipinstalllangchainlangchain-openailangchain-communitysentence-transformerschromadbpypdfdocx2txtpython-dotenvLangChain框架包含核心库与社区组件,构建应用的基石。Embedding模型sentence-transformers

提供强大的本地文本向量化能力。向量数据库ChromaDB

轻量级、易用的开源向量存储。文档加载器PyPDF&docx2txt

支持PDF和Word文档的内容读取。环境变量python-dotenv

安全管理OpenAI密钥等敏感信息。4.1.2连接器实现方法:步骤二:选择文档加载器核心目标:建立文件类型与对应加载器的映射关系,实现灵活的文档加载支持fromlangchain_community.document_loadersimportPyPDFLoader,Docx2txtLoader,TextLoaderLOADER_MAPPING={".pdf":(PyPDFLoader,{}),".docx":(Docx2txtLoader,{}),".txt":(TextLoader,{"encoding":"utf8"})}代码逻辑解析●字典结构设计:使用字典作为核心映射结构,键为文件扩展名,值为对应处理逻辑。●元组定义参数:值为元组,第一个元素是加载器类,第二个是初始化该类所需的关键字参数。●可扩展性:如需支持Markdown、Excel等新格式,只需在此字典中增加新的键值对即可。4.1.2连接器实现方法:步骤三:加载文档(核心逻辑)🎯核心目标:实现一个函数,能够递归地遍历目标目录下所有文件,并根据文件的扩展名,自动匹配并调用相应的加载器进行解析,最终将解析后的文档对象统一收集管理。01遍历目录使用os.walk方法递归遍历指定的目标目录及其所有子目录,扫描每一个文件。02获取扩展名对遍历到的每一个文件,提取其文件扩展名(如.md,.txt),作为匹配加载器的“钥匙”。03查找加载器依据扩展名,查找预设的LOADER_MAPPING映射表,找到对应的文件解析加载器。04加载文件如果成功匹配到加载器,调用该加载器对文件进行解析,将原始文本转换为结构化的文档对象。05收集文档将所有成功加载的文档对象收集并汇总到一个统一的列表中,为后续的索引和查询做准备。4.1.2连接器实现方法:步骤三:加载文档(代码实现)importosfromtypingimportListfromlangchain_core.documentsimportDocumentdefload_documents_from_directory(directory_path:str)->List[Document]:documents=[]forroot,_,filesinos.walk(directory_path):forfileinfiles:file_path=os.path.join(root,file)ext=os.path.splitext(file_path)[1].lower()ifextinLOADER_MAPPING:try:loader_class,loader_args=LOADER_MAPPING[ext]loader=loader_class(file_path,**loader_args)loaded_docs=loader.load()#核心加载方法documents.extend(loaded_docs)exceptExceptionase:print(f"加载文件{file_path}失败:{e}")returndocuments4.1.2连接器实现方法:步骤四:内容分割为什么需要分割?01.突破上下文窗口限制

LLM(大语言模型)受限于上下文窗口(ContextWindow),无法一次性处理过长的原始文档内容,会导致输入溢出或信息丢失。02.提升检索与向量化效率

将长文本切分为语义完整的小块(Chunks),既能保留文本的逻辑含义,又能显著提高后续向量化的计算效率,以及检索时的匹配精准度。代码实现(LangChain)#引入文本分割器

fromlangchain.text_splitterimportRecursiveCharacterTextSplitter#定义分割参数:块大小与重叠部分

CHUNK_SIZE=1000#字符数

CHUNK_OVERLAP=150#保持上下文连续splitter=RecursiveCharacterTextSplitter(

chunk_size=CHUNK_SIZE,chunk_overlap=CHUNK_OVERLAP

)

split_docs=splitter.split_documents(documents)4.1.2连接器实现方法:步骤五:自定义加载器适用场景当需要处理LangChain生态默认不支持的、业务定制化的私有文件格式时(例如自定义的.myformat格式),需开发专属的加载器以实现数据读取与结构化解析。核心实现步骤(Python)1.继承基类:继承`langchain.document_loaders.base.BaseLoader`抽象基类。

2.构造方法:实现`__init__`方法,定义并接收文件路径等关键初始化参数。

3.核心逻辑:实现`load`方法,编写读取、解析逻辑,最后返回`Document`对象列表。fromlangchain.document_loaders.baseimportBaseLoader

fromlangchain.docstore.documentimportDocument

classMyCustomFormatLoader(BaseLoader):

def__init__(self,file_path:str):

self.file_path=file_path

defload(self):

#自定义解析逻辑:读取文件内容并构造元数据

withopen(self.file_path,'r')asf:

content=f.read()

metadata={"source":self.file_path,"format":"myformat"}

return[Document(page_content=content,metadata=metadata)]4.1.2连接器实现方法:步骤六:处理网络/API数据源适用场景当需要从外部网站、在线文档或公开的WebAPI接口加载文本内容时使用。可高效抓取并解析多种格式的网页内容。核心工具LangChain内置组件:WebBaseLoader•底层依赖:使用requests库发送HTTP请求获取页面。

•内容解析:利用BeautifulSoup解析HTML,去除冗余标签。

•结果封装:将清洗后的文本内容标准化为Document对象。💻代码示例(Python)#1.安装必要依赖$pipinstallbeautifulsoup4langchain-community#2.加载单页或多页网页内容fromlangchain_community.document_loadersimportWebBaseLoader#加载单个URLloader=WebBaseLoader("/article")docs=loader.load()#返回Document对象列表#加载多个URL列表loader=WebBaseLoader(["url1","url2"])4.1.3应用案例分析:企业知识库问答系统案例目标:构建一个能深度理解企业内部各类文档(如PDF、DOCX、TXT等)并基于内容准确回答员工业务与知识类问题的智能系统,以提升企业内部信息流转效率与知识复用率。01配置在系统后台完成基础参数设定,包括API密钥认证、指定文档读取目录以及大模型关键参数配置。02加载利用文档连接器自动扫描并加载指定目录下的所有企业文档,支持多种主流格式的解析与识别。03处理将长文档进行语义化分割,并调用Embedding模型对分割后的文本片段进行向量化,转化为计算机可理解的数值形式。04存储将生成的文本向量批量存入高性能向量数据库中,建立索引以支持后续毫秒级的相似度检索。05问答用户通过自然语言提问,系统将问题向量化后检索匹配文档,结合大模型能力生成精准、可溯源的答案。案例分析:配置与文档加载环境配置与密钥管理最佳实践:使用.env文件和python-dotenv库来管理敏感信息(如API密钥),从环境变量读取而非硬编码在源码中,有效降低泄露风险。fromdotenvimportload_dotenvimportos#加载项目根目录下的.env文件load_dotenv()DEEPSEEK_API_KEY=os.getenv("DEEPSEEK_API_KEY")文档加载核心流程核心函数:load_documents_from_directory()这是整个知识库问答系统的数据起点。它负责将存储在本地的非结构化文件(如PDF、TXT、MD)解析并转化为系统可处理的Document对象。后续所有的文本分割、向量化处理、向量库存储和语义检索,都建立在这一步成功加载的数据之上,决定了回答的准确性和相关性。PART02文本向量化处理工具TextEmbedding4.2.1文本向量化概述什么是文本向量化?📌定义将文本(单词、句子、段落)转换为计算机可以理解的数值向量的过程。💡核心思想“语义相似的文本,其向量表示在多维空间中的距离也相近”。👀示例“猫”和“狗”的向量距离,比“猫”和“书”的向量距离更近。为什么需要文本向量化?🧠语义理解让计算机能够捕捉文本背后的深层语义信息,超越简单的关键词匹配。🔍实现检索是实现“语义搜索”的基础,让用户能找到意思相近而非仅字面对应的内容。🛠️下游任务为文本分类、情感分析、聚类等机器学习任务提供高质量的数值特征输入。4.2.2常见的向量化方法:传统方法TF-IDF(词频-逆文档频率)▍核心原理

衡量一个词在文档中的重要性。词在单篇文档中出现越频繁,且在整个语料库的所有文档中出现越少,则该词的权重越高。▍主要特点

算法逻辑简单、计算效率高、可解释性强。但仅基于统计词频,无法捕捉词语之间的深层语义关联。▍典型应用

经典的搜索引擎文档检索、新闻/文章的关键词提取、早期的文本相似度计算。Word2Vec(词向量神经网络)▍核心原理

利用浅层神经网络模型,通过上下文来预测目标词或通过目标词预测上下文,将词语映射到低维稠密的实数向量空间中。▍主要特点

能有效捕捉词与词之间的语义关系和类比逻辑(如“国王-男人+女人≈女王”),向量的几何距离可反映语义相似度。▍典型应用

推荐系统中的语义匹配、复杂文本分类任务、命名实体识别、以及作为深度学习模型的预训练词嵌入层。4.2.2常见的向量化方法:基于预训练模型BERT嵌入💡核心原理直接利用BERT等预训练大模型的隐藏层输出作为文本的向量表示,无需重新训练。✨主要特点能精准捕捉上下文语境中的深层语义信息,语义理解能力强,是NLP领域的基石。OpenAIEmbeddings💡核心原理使用OpenAI专为语义检索、文本匹配等任务微调优化的嵌入模型生成向量。✨主要特点生成高质量向量,与OpenAI的大语言模型(LLM)生态结合完美,检索准确性极高。MiniLM(s-t)💡核心原理基于知识蒸馏技术,将BERT等大型模型的知识“迁移”到小模型中,实现模型压缩。✨主要特点体积极小、推理速度极快、资源占用低,效果与大模型接近,非常适合本地化部署。4.2.3文本向量化工具实现:步骤一:选择嵌入模型核心目标选择并实例化一个合适的嵌入模型,将文本转换为计算机可理解的向量形式。案例选型方案采用HuggingFaceEmbeddings集成类+sentence-transformers/all-MiniLM-L6-v2模型。开源免费支持本地部署运行

无API调用成本性能均衡在推理速度与

向量质量间平衡易于集成LangChain提供

完善的原生支持embedding_model.pyfromlangchain_community.embeddingsimportHuggingFaceEmbeddings#1.定义要使用的模型名称EMBEDDING_MODEL="sentence-transformers/all-MiniLM-L6-v2"#2.实例化嵌入模型对象embeddings=HuggingFaceEmbeddings(model_name=EMBEDDING_MODEL)#后续:可直接调用embeddings.embed_query()方法进行向量化4.2.3文本向量化工具实现:步骤二:向量化操作▍核心方法解析embed_documents(texts:List[str])→List[List[float]]用于对知识库文档列表进行批量向量化。输入为字符串列表,输出为向量列表,是构建检索数据库的关键步骤。embed_query(text:str)→List[float]专门用于处理用户输入的单个查询文本。将问题转化为与知识库文档维度一致的向量,用于后续计算余弦相似度进行检索。▍Python代码实现#1.向量化单个查询(用户问题)query_vector=embeddings.embed_query("什么是人工智能?")print(f"查询向量维度:{len(query_vector)}")#2.向量化文档列表(知识库)docs=["AI是一门旨在使计算机系统模拟人类智能的技术科学...","机器学习是AI的核心分支..."]doc_vectors=embeddings.embed_documents(docs)print(f"文档向量数量:{len(doc_vectors)}")4.2.3文本向量化工具实现:步骤三:向量存储与检索为什么需要向量存储?核心目的是实现高效的相似性搜索(SimilaritySearch)。传统数据库无法处理高维向量数据的快速比对。将所有文本块生成的Embedding向量存入专门的向量数据库,当收到新的查询请求时,系统能在海量数据中快速计算并返回最相似的Top-K个结果,这是构建检索增强生成(RAG)系统的关键一环。Chroma轻量级、开源、易于上手。非常适合原型开发、本地测试及中小型项目部署。FAISS由FacebookAI开源,专为海量向量数据优化,检索性能强大,适合处理大规模数据集。Pinecone/Weaviate全托管云服务。提供开箱即用的高可用性、高扩展性与低延迟,适合生产级应用直接集成。4.2.3文本向量化工具实现:步骤三:向量存储与检索(代码)#使用Chroma向量数据库进行创建或加载fromlangchain_community.vectorstoresimportChromadefcreate_or_load_vectorstore(docs,persist_dir):ifos.path.exists(persist_dir):#从已存在的目录加载vectorstore=Chroma(persist_directory=persist_dir,embedding_function=embeddings)else:#从文档创建新库并持久化vectorstore=Chroma.from_documents(docs,embeddings,persist_directory=persist_dir)vectorstore.persist()#写入磁盘returnvectorstore关键转换:Retrievervectorstore.as_retriever()01.对象转换

将Chroma生成的VectorStore向量库对象,转化为LangChain标准的Retriever检索器对象。02.统一接口

Retriever是连接大模型问答链(QAChain)的标准接口,负责从海量知识库中精准检索相关文本片段。案例分析:文本向量化在知识库问答中的作用流程回顾1加载文档:load_documents_from_directory2文本分割:RecursiveCharacterTextSplitter3文本向量化:HuggingFaceEmbeddings4.向量存储Chroma.from_documents5.相似性检索vectorstore.as_retriever()核心价值非结构化->结构化将海量的非结构化文档知识,转化为计算机能理解的、可快速检索与计算的向量数据,为知识库构建打下坚实的数据基础。实现“语义级”搜索突破了传统关键词匹配的局限,系统能够理解用户提问的真实语义和意图,从而在知识库中找到最相关的答案片段。PART03智能代理开发模式AGENTS4.3.1智能代理定义什么是智能代理(Agent)?📌定义

一个能够根据用户输入,自主地规划、决策并执行一系列动作来完成复杂任务的系统。💡核心思想

LLM不仅用于生成文本,更作为一个“大脑”来指挥工具的使用。🗣️通俗类比

就像一个拥有各种工具(计算器、搜索引擎)的全能助理,能够理解你的深层意图,并自主选择合适的工具来一步步完成任务。智能代理的核心组件LLM(大脑)|核心中枢负责理解用户意图、拆解任务步骤、做出决策并选择合适的工具。Tools(工具)|执行手脚一系列可被LLM调用的外部函数或服务,如代码解释器、搜索引擎、数据库接口等。Memory(记忆)|历史档案负责存储长期的对话历史上下文和任务执行过程中的中间结果,供大脑参考。4.3.1智能代理工作流程(ReAct框架)Reasoning·思考核心逻辑:利用LLM强大的理解与推理能力,分析当前任务目标与上下文环境。

关键动作:判断下一步最合理的操作,并生成对应的计划或指令。Action·行动核心逻辑:将思考转化为实际的外部交互行为,突破LLM自身能力的局限。

关键动作:精准调用外部工具(如计算器、搜索引擎、代码解释器等)。Observation·观察核心逻辑:获取客观的外部反馈,为下一轮决策提供依据。

关键动作:解析并记录工具调用后的返回结果(成功、失败或具体数据)。Repeat·持续迭代:将“观察”到的结果重新纳入“思考”的上下文,循环往复,直至任务达成或无法继续。这就是ReAct框架的核心逻辑。4.3.2智能代理开发方法:步骤一:定义工具🎯核心目标将普通的业务逻辑函数,封装成Agent能够“理解”并主动“调用”的标准化工具对象。01.name工具的唯一标识名称,供Agent识别和引用。02.func工具实际执行的核心逻辑,通常是一个可调用的Python函数。03.description关键要素:描述工具用途,是Agent判断是否调用此工具的依据。💡开发提示:工具描述的准确性和场景覆盖度,直接决定了Agent的“智商”表现。PythonCode:定义一个乘法工具(LangChain)#1.导入Tool基类fromlangchain.toolsimportTool#2.定义原始功能函数defmultiply(a:float,b:float)->float:"""Multiplytwonumbers."""returna*b#3.封装为Agent可用的工具tools=[Tool(name=“Multiplier”,#工具名称func=multiply,#执行函数description=“当你需要计算两个数的乘积时使用此工具”)]4.3.2智能代理开发方法:步骤二:初始化代理核心目标:将大语言模型(LLM)、功能工具集和记忆模块组合,构建一个可独立运行的Agent系统。💻核心代码实现(Python)fromlangchain.agentsimportinitialize_agent,AgentType

fromlangchain.memoryimportConversationBufferMemory

#1.初始化LLM与记忆模块

llm=OpenAI(temperature=0)#低温度保证推理稳定

memory=ConversationBufferMemory(memory_key="chat_history")

#2.组装并初始化Agent

agent=initialize_agent(

tools,llm,memory=memory,

agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,

verbose=True

)agent·代理类型(ZERO_SHOT_REACT_DESCRIPTION)最常用的类型,不需要额外训练,仅通过“工具描述”进行推理和动作选择。memory·记忆模块用于存储和检索对话历史,让Agent具备上下文感知能力,而不是“一次性”对话。verbose·调试模式设置为True时,控制台会打印Agent详细的思考逻辑、调用的工具和观测结果,便于开发调试。4.3.3实现智能代理:代码实战任务指令给智能代理下达一个需要分步计算的数学任务:“计算5乘以3,然后将结果加上10。”目标:验证Agent是否能拆解任务,并按逻辑顺序调用工具。代码实现result=agent.run("计算5乘以3,然后将结果加上10。")print(result)简洁的API调用,背后是Agent复杂的逻辑链规划与工具调用。执行日志(Verbose)>EnteringnewAgentExecutorchain...Action:Multiplier→5,3→Observation:15Action:Adder→15,10→Observation:25>Finishedchain.FinalAnswer:25Agent自主拆解了步骤,并依次调用乘法和加法工具,最终得出正确结果。4.3.4智能代理实现案例:企业知识库问答与任务处理系统📝案例核心目标系统需具备多模态处理能力,自动判断用户输入是“知识查询”还是“指令执行”,并做出相应响应。🧠Agent核心定位作为系统的“总调度”与“大脑”,分析用户意图并进行决策:调用知识库问答工具,或分发任务至执行工具。知识库问答工具•封装RetrievalQA问答链,通过RAG技术检索内部文档库。

•处理:“公司的考勤制度是什么?”、“产品A的技术参数有哪些?”决策与分发中心基于大语言模型的意图识别能力,解析用户prompt,决定路由方向:

1.知识性问题→左侧工具

2.行动性指令→右侧工具任务执行工具•封装函数(如create_reminder),直接调用企业内部API或脚本。

•处理:“提醒我明天下午两点开会”、“帮我生成并发送一份周报”案例分析:工具定义与代理决策01/代码定义:封装能力为工具#1.知识库问答工具(KnowledgeBaseQ&A)qa_tool=Tool(

name="KB_Q&A",func=qa_chain.run,

description="回答公司政策、产品信息等业务问题"

)#2.提醒任务工具(CreateReminder)defcreate_reminder(text):returnf"提醒已创建:{text}"

reminder_tool=Tool(name="Reminder",func=create_reminder,...)#整合工具集,供Agent调度

tools=[qa_tool,reminder_tool]业务咨询场景👤用户提问:“公司的年假政策具体是怎么规定的?”

🤖Agent决策:调用“KnowledgeBaseQ&A”工具进行检索回答。任务执行场景👤用户要求:“帮我设定一个提醒,明天下午3点参加技术评审会。”

🤖Agent决策:调用“CreateReminder”工具完成日程创建。PART04复杂业务链设计ComplexChains4.4.1复杂业务链定义01/什么是复杂业务链?💡核心定义将多个简单的Chain(如LLMChain)组合串联,形成一个处理复杂、多步骤任务的自动化流水线。⚖️简单Chainvs复杂Chain•简单:通常是“一个Prompt+一个LLM调用”的单步执行模式。•复杂:包含多个步骤,步骤间通常存在依赖关系,形成逻辑闭环。02/为什么需要复杂业务链?🚩现实世界的挑战许多现实任务逻辑冗长、信息分散,无法通过“单次LLM调用”直接得到准确、可执行的结果。📝典型场景示例“请先阅读这份长达50页的公司财报,提炼出其中的关键财务数据和业务指标,然后根据提炼的信息,撰写一份针对管理层的深度分析报告。”4.4.2业务链设计方法:设计原则与步骤01/设计原则模块化(Modularity)将复杂的大任务拆解为独立、可复用、低耦合的原子化子任务(子链),降低系统复杂度。清晰接口(ClearInterface)明确每个子链的输入(Inputs)和输出(Outputs),确保数据流转准确、无歧义,易于连接与维护。关注点分离(SeparationofConcerns)不同的业务链专注处理单一职责,避免功能混杂,便于独立调试与逻辑优化。02/核心步骤01任务逻辑分解将业务目标拆解为逻辑清晰、有序列关系的子任务集合,梳理出任务的执行流程。02定义独立子链针对每一个原子化子任务,配置对应的LLMChain,封装Prompt、LLM模型参数及输出解析逻辑。03组装与集成使用SequentialChain(顺序链)或自定义编排逻辑,将独立的子链连接,形成完整的业务闭环。4.4.2业务链设计方法:常用链类型SequentialChain💡核心作用

按顺序执行一系列链,将多个简单任务组合成复杂流程。✨关键特点

前一个链的输出数据可以无缝传递并作为后一个链的输入,形成单向数据流。🎯适用场景

线性的、有明确先后顺序依赖的任务,如:先总结文档,再根据总结生成报告。RouterChain💡核心作用

充当“智能调度员”,根据用户输入的内容动态判断并选择最合适的子链执行。✨关键特点

实现了条件分支逻辑,解决了“不同类型的问题用不同方法处理”的场景。🎯适用场景

需要根据不同情况采取不同处理路径的任务,如:根据用户提问的语言,选择中文或英文翻译链。TransformChain💡核心作用

专门在链与链之间进行数据格式转换和清洗,确保数据的兼容性。✨关键特点

支持灵活定义转换函数,将输入数据映射为下一个链所需的格式。🎯适用场景

当上下游链之间的数据结构或字段名称不匹配时,起到承上启下的桥梁作用。4.4.3业务链实现案例:自动化报告生成🎯任务目标给定一份产品用户反馈的长文本,自动生成一份包含“用户痛点总结”、“功能建议”和“情感分析”的结构化分析报告,辅助产品团队快速决策。提取痛点利用NLP技术,精准识别并提取用户反馈中的负面信息,总结用户抱怨的产品核心问题,形成痛点清单。提取建议从非结构化文本中识别出用户对产品功能的改进要求、新功能期望,提炼可落地的产品建议。情感分析对文本进行情绪分类(正面/负面/中性),量化整体情感倾向,并输出情感分布数据,直观展示用户满意度。整合报告将提取的痛点、建议和情感分析结果进行结构化整合,自动生成格式规范、逻辑清晰的Markdown报告,便于阅读与归档。案例分析:定义子链(1/2)链1:提取用户痛点#定义提取痛点的提示词模板与链fromlangchain.chainsimportLLMChainfrommptsimportPromptTemplatepain_point_prompt=PromptTemplate(input_variables=["feedback"],template="从以下反馈中提取用户抱怨的痛点:\n{feedback}\n痛点列表:")pain_point_chain=LLMChain(llm=llm,prompt=pain_point_prompt,output_key="pain_points")链2:提取改进建议#定义提取建议的提示词模板与链fromlangchain.chainsimportLLMChainfrommptsimportPromptTemplatesuggestion_prompt=PromptTemplate(input_variables=["feedback"],template="从以下反馈中提取用户提出的功能建议:\n{feedback}\n建议列表:")suggestion_chain=LLMChain(llm=llm,prompt=suggestion_prompt,output_key="suggestions")案例分析:定义子链(2/2)链3:情感分析sentiment_prompt=PromptTemplate(input_variables=["feedback"],template="分析以下用户反馈的整体情感倾向,用一个词总结:\n{feedback}\n情感倾向:")sentiment_chain=LLMChain(llm=llm,prompt=sentiment_prompt,output_key="sentiment")链4:整合报告report_prompt=PromptTemplate(input_variables=["pain_points","suggestions","sentiment"],template="根据以下信息,生成一份用户反馈分析报告:\n##用户痛点总结\n{pain_points}\n##功能建议\n{suggestions}\n##整体情感倾向\n{sentiment}")report_chain=LLMChain(llm=llm,prompt=report_prompt,output_key="final_report")案例分析:组合子链01.定义链式流程fromlangc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论