ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

为什么大厂都在用LangChain?一文拆解大模型应用主流开发框架!

为什么大厂都在用LangChain?一文拆解大模型应用主流开发框架! 前言本文主要从Why、What、How的角度拆解目前主流的大模型应用开发框架LangChain之后给到一个带RAG能力的聊天机器人Chatbot项目来感受下LangChain在大模型应用开发方面的实战效果。你将获得什么开发一个AI大模型应用需要考虑哪些内容LangChain的核心架构都有哪些RAG的核心思路是什么实战如何5分钟实现一个极简智能聊天机器人Chatbot一、Why为啥会有LangChain假如从OpenAI 的API开始构建大模型应用的话那么就得需要考虑这些问题。Prompt 管理不同的场景需要手写不同的提示词Prompt****还要维护多个 prompt 的版本和结构很容易混乱。调用逻辑的组织如果你想让模型先问用户问题然后再去查资料再回答——你得自己写一整套逻辑流程。多模型集成假如你不想用OpenAI的大模型想尝试下HuggingFace上的其他大模型就得需要自己封装和管理它们的接口。与外部工具对接想要模型查数据库、搜索引擎、文件系统你要自己写代码去连接、格式化、处理这些数据。内存管理聊天上下文比如让 AI 记住用户之前说过什么你要自己存储这些对话记录并加到 prompt 里。调试 追踪如果模型表现不对你很难知道是哪一步出了问题。没有自动化的 trace 系统。现在有了LangChain你可以不用特别关注那些底层的工作专注在你的业务即可。比如你想基于LLM开发一个问答系统几行代码就可以完成最内核的功能fromlangchain_community.chat_modelsimportChatOllamafromlangchain_core.messagesimportHumanMessage# 初始化模型modelChatOllama(modelqwen2.5:1.5b,base_urlhttp://localhost:11434# Ollama 服务地址)# 发送请求responsemodel.invoke([HumanMessage(content用中文写一首关于秋天的短诗)])print(response.content)对就是这么简洁。二、WhatLangChain框架拆解官网的定义是LangChain是一个用于开发由大型语言模型 (LLMs) 驱动的应用程序的框架。想要理解LangChain的封装逻辑就得先理解LLM的技术堆栈思路。2.1 LLM技术栈设计思路当你想开发一款大模型应用的时候直接使用其已经封装好的组件就可以。甚至针对常规的应用流程它利用链(LangChain中Chain的由来)这个概念已经内置标准化方案了。这里我们从新兴的大语言模型LLM技术栈的角度来看看为何它的理念这么受欢迎。LLM技术栈主要由四个主要部分组成数据预处理data preprocessing pipeline主要包括了数据源连接、数据转化、下游连接器如向量数据库特别是对于繁杂的数据源如数千个PDF、PPTX、聊天记录、抓取的HTML等这里需要大量的数据提取、清理、转换工作这点上跟大数据分析任务的前期步骤很类似不同的是大模型的数据处理可能会用到OCR模型、Python脚本和正则表达式等方式并以API方式向外部提供JSON数据以便嵌入终端和存储在向量数据库中。嵌入与向量存储embeddings vector store 以往嵌入主要用于如文档聚类之类的特定任务新的架构中直接将文档及其嵌入存储在向量数据库中可以通过LLM端点实现关键的交互模式。直接存储原始嵌入意味着数据可以以其自然格式存储从而实现更快的处理时间和更高效的数据检索。LLM 终端LLM endpointsLLM终端负责管理模型的资源包括内存和计算资源并提供可扩展和容错的接口用于向下游应用程序提供LLM输出。LLM 编程框架LLM programming frameworkLLM编程框架提供了一套工具和抽象用于使用语言模型构建应用程序。在现代技术栈中出现了各种类型的组件包括LLM提供商、嵌入模型、向量存储、文档加载器、其他外部工具谷歌搜索等这些框架的一个重要功能是协调各种组件。2.2 LangChain框架核心模块langchain-core聊天模型和其他组件的基础抽象。Integration packages负责维护不同厂家的大模型由轻量级的包组成例如 langchain-openai、langchain-anthropic 等。langchain构成应用程序认知架构的链、代理和检索策略。langchain-community由社区维护的第三方集成工具。langgraph编排框架用于将 LangChain 组件组合成具有持久化、流式处理和其他关键功能的生产就绪型应用程序。完整的框架如这里补充框架中的两个组成LangGraph是一个基于 LangChain 的扩展库用于构建有状态、多角色的智能体Agents应用。它通过将任务流程建模为状态图StateGraph实现对复杂任务的精细控制和管理。LangSmith通俗一点来说LangSmith 是一个用于开发、调试、测试和监控基于大语言模型LLM应用的平台它有点像你写 LLM 应用时的 “全能开发调试仪表盘”。三、How基于LangChain开发带RAG能力的ChatBot项目3.1 项目效果先直接看下项目效果。注用户在位置1进行输入在位置2 Jupyter的Cell底部可以看到大模型回复的结果。3.2 关键步骤解析项目技术开发环境LangChainOllamaQwen2.5Jupyter1. 基础构建可以看到这里主要引用了LangChain框架中的langchain_core、langchain_community并进行了模型初始化和文件的加载处理。importosfromtypingimportList,Optionalfromlangchain_community.chat_modelsimportChatOllamafromlangchain_core.promptsimportChatPromptTemplate,MessagesPlaceholderfromlangchain_core.messagesimportHumanMessage,AIMessagefromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.runnablesimportRunnablePassthroughfromlangchain_community.vectorstoresimportFAISSfromlangchain_text_splittersimportRecursiveCharacterTextSplitterfromlangchain_community.embeddingsimportOllamaEmbeddingsfromlangchain_community.document_loadersimportPyPDFLoader,TextLoader# 配置常量DEFAULT_MODELqwen2.5:1.5bOLLAMA_BASE_URLhttp://localhost:11434# 初始化模型definit_model(model_name:strDEFAULT_MODEL)-ChatOllama:returnChatOllama(modelmodel_name,base_urlOLLAMA_BASE_URL,temperature0.7,num_ctx4096,streamTrue,stop[|im_end|]# 防止模型无限生成)# 加载文档支持PDF/TXTdefload_documents(file_path:str)-Optional[List]:ifnot os.path.exists(file_path):print(f⚠️ 文件不存在:{file_path})returnNonetry:iffile_path.endswith(.pdf):loaderPyPDFLoader(file_path)eliffile_path.endswith(.txt):loaderTextLoader(file_path)else:print(❌ 不支持的文件格式仅支持PDF/TXT)returnNonereturnloader.load()exceptExceptionase:print(f❌ 文档加载失败:{str(e)})returnNone2. 构建智能链这一步是整个应用的核心。在这一步中完成应用的文件解析、向量化、查询检索。并结合用户输入完成对LLM的交互。defbuild_chain(model:ChatOllama,documents:Optional[List]None):# 提示模板设计 base_promptChatPromptTemplate.from_messages([(system,你是{persona}请用{language}回答。对话历史{history}),(human,{input})])doc_promptChatPromptTemplate.from_messages([(system, 根据以下上下文和对话历史回答问题 ---上下文--- {context} ---历史记录--- {history} 请用{language}以{persona}的身份回答 ),(human,{input})])# 链式逻辑 ifdocuments:# 文档处理流程embeddingsOllamaEmbeddings(modelnomic-embed-text)splitsRecursiveCharacterTextSplitter(chunk_size1000,chunk_overlap200).split_documents(documents)vectorstoreFAISS.from_documents(splits,embeddings)retrievervectorstore.as_retriever(search_kwargs{k:3})chain(RunnablePassthrough.assign(contextlambdax:\n.join(f[来源{i1}]:{doc.page_content}fori,docinenumerate(retriever.get_relevant_documents(x[input]))),personalambda_:专业AI助手,languagelambda_:中文,historylambdax:\n.join(f{msg.type}:{msg.content}formsginx.get(history,[])))|doc_prompt|model|StrOutputParser())else:# 基础对话流程chain(RunnablePassthrough.assign(personalambda_:友好AI伙伴,languagelambda_:中文,historylambdax:\n.join(f{msg.type}:{msg.content}formsginx.get(history,[])))|base_prompt|model|StrOutputParser())returnchain3.构建交互式聊天框架这一步主要构建起用于与大模型聊天的用户界面。可以看到从用户输入到LLM相应以及保留最近10轮的对话上下文信息。defchat(model_name:strDEFAULT_MODEL,file_path:Optional[str]None):# 初始化modelinit_model(model_name)documentsload_documents(file_path)iffile_path elseNone chainbuild_chain(model,documents)history[]print(f\n 已启动{model_name}聊天机器人{文档模式ifdocumentselse纯对话模式})print(输入 exit 退出 | reset 清空历史 | switch 切换模型\n)whileTrue:try:# 用户输入user_inputinput( 你: )ifuser_input.lower()exit:breakelifuser_input.lower()reset:history[]print( 历史已清空)continueelifuser_input.lower()switch:new_modelinput(f当前模型:{model_name}→ 输入新模型名如 deepseek-r1:7b: )model_namenew_model.strip()modelinit_model(model_name)chainbuild_chain(model,documents)print(f 已切换至模型:{model_name})continue# 流式输出print(\n AI: ,end,flushTrue)full_responseforchunkinchain.stream({input:user_input,history:history}):print(chunk,end,flushTrue)full_responsechunk# 更新历史限制最大长度history.extend([HumanMessage(contentuser_input),AIMessage(contentfull_response)])historyhistory[-10:]# 保留最近10轮对话print(\n─*50\n)exceptKeyboardInterrupt:print(\n⏹️ 对话已终止)breakexceptExceptionase:print(f\n❌ 错误:{str(e)})4.运行应用程序这个应用不仅支持纯LLM对话的还支持RAG的方式进行对话。if__name____main__:# 示例带PDF文档的聊天# chat(file_pathknowledge.pdf)# 纯对话模式chat()最后的最后感谢你们的阅读和喜欢作为一位在一线互联网行业奋斗多年的老兵我深知在这个瞬息万变的技术领域中持续学习和进步的重要性。为了帮助更多热爱技术、渴望成长的朋友我特别整理了一份涵盖大模型领域的宝贵资料集。这些资料不仅是我多年积累的心血结晶也是我在行业一线实战经验的总结。这些学习资料不仅深入浅出而且非常实用让大家系统而高效地掌握AI大模型的各个知识点。如果你愿意花时间沉下心来学习相信它们一定能为你提供实质性的帮助。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】大模型知识脑图为了成为更好的 AI大模型 开发者这里为大家提供了总的路线图。它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。经典书籍阅读阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。面试资料我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表