langchain1.X学习笔记-2-开发前的准备工作

发布时间:2026/7/24 22:04:46
langchain1.X学习笔记-2-开发前的准备工作 文章目录1 前置知识1.1 Python基础语法1.2 大语言模型基础2 相关环境的安装2.1 代码管理方案2.2 虚拟环境的设置方案2.2.1 方案1-conda适合Python非Python依赖的复杂环境2.2.2 方案2-uv适合纯Python项目的现代包管理2.2.3 方案3-venvPython自带的轻量级虚拟环境工具2.3 安装虚拟环境2.3.1 安装conda虚拟环境2.3.2 安装venv虚拟环境2.4 PyCharm开发环境2.4.1 PyCharm项目的虚拟环境(英文路径)2.4.2 PyCharm项目的虚拟环境(中文路径)2.4.3 jupyter lab3 大模型应用场景介绍3.1 RAG开发3.2 Agent开发3.3 大模型应用开发的4个递进场景3.3.1 场景1纯Prompt3.3.2 场景2Agent Function Calling3.3.3 场景3RAG (Retrieval-Augmented Generation)3.3.4 场景4Fine-tuning(精调/微调)3.4 如何选择相关的技术虚拟环境的三种安装方式conda、uv、venv。构建Pycharm开发环境和虚拟环境中的jupyter lab。大模型应用开发主要两个方向RAG开发和Agent开发。从实现角度有四个递进场景纯PromptAgentFunction CallingRAGFine-tuning。1 前置知识1.1 Python基础语法变量、流程控制、函数与参数机制、类与对象、装饰器。常用的容器(列表、元组、集合、字典)、JSON处理、异常处理。模块导入、包管理(推荐用pip或conda) 、线程与协程。LangChain生态支持包括Python和JavaScript语言实现。其中Python版本仍是功能最完整、更新最及时、社区最活跃的核心实现。像其他的一些语言比如说javac#等等这些语言他们也有对应的一些框架也可以开发大模型的应用只不过在整个大模型开发当中咱们说Python的语言是首选的然后LangChain框架也是首选的。1.2 大语言模型基础了解什么是LLM、Token、Prompt、Embedding。OpenAI API或其他模型提供商如Anthropic、阿里云百炼、DeepSeek等。通过浏览器或app使用过大模型(比如豆包、千问、DeepSeek等)。2 相关环境的安装2.1 代码管理方案相较于全局环境(系统环境) 各个虚拟环境都有自己独立的一套Python解释器、pip命令、第三方依赖包不和其它项目产生干扰。2.2 虚拟环境的设置方案2.2.1 方案1-conda适合Python非Python依赖的复杂环境conda不只是Python包管理工具它还可以管理Python解释器、Python包以及很多非Python依赖。比如 CUDA、编译器、系统库、数据库驱动、科学计算底层库等Python依赖。因此在数据科学、深度学习、AI工程、科学计算等场景中conda更稳妥、优先推荐。注意conda环境中可以使用pip但建议先用conda装底层依赖再用pip补充Python包不要随意反复交替使用。2.2.2 方案2-uv适合纯Python项目的现代包管理uv是一个现代Python包管理工具主要管理Python生态依赖 不能像conda那样管理CUDA、系统级数据库驱动、编译器这类通用非Python依赖。如果项目主要是普通Python开发这类项目通常可以优先考虑uv。例如FastAPI 项目 LangChain 项目 脚本工具 Web 后端 普通 AI Agent 应用 RAG 应用层代码2.2.3 方案3-venvPython自带的轻量级虚拟环境工具venv是Python官方自带的虚拟环境工具不需要额外安装。它的特点是简单、轻量python-mvenv .venv注意 venv不负责安装新的Python解释器只能基于当前已经安装好的Python解释器创建虚拟环境。同时venv也不负责管理CUDA、系统库等非Python依赖。2.3 安装虚拟环境2.3.1 安装conda虚拟环境LangChain基于Python开发因此需确保系统中安装了Python解释器我们在创建虚拟环境过程中安装Python解释器。LangChain 1.2版本要求Python版本为3.10以上 这里我们使用python3.13.12版本。注意如下包的安装必须显式指明版本否则可能会出现不兼容情况。1、创建conda环境#创建一个名为langchain1.2的环境指定Python版本是3.13.12conda create--namelangchain1.2python3.13.12#查看anconda安装好的python环境condaenvlist#初始化虚拟环境 (执行完此指令重新启动命令行窗口)conda init#在命令行窗口切换到某python环境conda activate langchain1.2#验证python版本(langchain1.2)C:\Users\shkstartpython-V#或 调用python --version2、退出/删除conda环境#在命令行退出当前python环境(langchain1.2)C:\Users\shkstconda deactivate#删除一个已有的anconda管理的python环境conda remove--namelangchain1.2--all3、下载langchain安装包# 安装指定版本。比如1.2.2condainstalllangchain1.2.12# 或者安装最新版默认仓库condainstalllangchain# 指定频道如 conda-forgecondainstall-cconda-forgelangchain1.2.12# 更新包conda update langchain# 卸载包conda uninstall langchain# 查看已安装包conda list2.3.2 安装venv虚拟环境1、本地已经安装了三个版本的Python解释器2、创建一个工作目录langchainlearn。以后就在这个目录下创建ven虚拟环境和用pycharm管理此处的项目文件。3、虚拟环境管理选择python3.12版本创建虚拟环境 D:\PythonEnv\Python312\python.exe-mvenv myenv(1)激活虚拟环境 创建完成后需要激活它激活后终端提示符前通常会显示环境名称如(myenv) Windows(CMD): myenv\Scripts\activate.bat(2)退出虚拟环境 deactivate(3)删除虚拟环境 如果不再需要直接在文件系统中删除对应的文件夹(如myenv)即可 这不会对系统环境造成任何影响。执行后当前目录下会生成一个名为myenv的文件夹里面包含了独立的Python解释器和pip工具。4、安装langchain包# 安装指定版本pipinstalllangchain1.2.12#安装最新版不推荐pip install langchain# 使用指定源国内镜像加速 解决下载慢 -i指定镜像源pipinstalllangchain1.2.12-ihttps://pypi.tuna.tsinghua.edu.cn/simple# 从旧版本升级到新版本pipinstall--upgradelangchain#或者 pip install -U langchain1.2.12# 卸载包pip uninstall langchain# 查看已安装包pip list2.4 PyCharm开发环境PyCharm作为专业的Python IDE具有强大的代码编辑、调试和版本控制功能。打开创建的工程目录并设置Python解释器(选择myenv环境)。2.4.1 PyCharm项目的虚拟环境(英文路径)原来是中文改成英文所以会复杂一些。若一开始就是英文路径就简单一些了。1、把目录名改成英文。Windows下开发工具链(Python、Node、Java等)遇到中文路径经常出现这种编码不一致的问题能避则避。虚拟环境不能通过复制/重命名项目目录来迁移因为它的激活脚本里记录了绝对路径。(1)关闭所有已打开的PyCharm。(2)删除myenv和.idea这两个文件夹。(3)进入项目目录重新创建虚拟环境D:\PythonEnv\Python312\python.exe-mvenv myenv(4)设置解释器File-Settings-Project-Python Interpreter(5)使用Pycharm打开项目会自动激活虚拟环境(6)查看虚拟变量echo %VIRTUAL_ENV%echo %PATH%全新的环境。importlangchain print(langchain.__version__)2.4.2 PyCharm项目的虚拟环境(中文路径)中文目录不是不能用只是要绕开CMD的编码坑。PyCharm Terminal改用PowerShell(最推荐)。PowerShell对中文路径的处理比CMD好得多基本不会出现乱码。1、修改Terminal为PowerShell2、创建虚拟环境D:\PythonEnv\Python312\python.exe-mvenv myenv3、设置解释器4、重新打开终端自动激活虚拟环境2.4.3 jupyter lab虚拟环境安装pip install jupyterlab。若虚拟环境里没有 jupyter但终端jupyter命令能用 → 情况一用的是系统的。1、看终端里jupyter命令来自哪(Get-Command jupyter).Source2、使用的python版本为项目虚拟版本3 大模型应用场景介绍大模型应用技术特点门槛低天花板高。3.1 RAG开发(1)背景大模型的知识冻结 随着LLM规模扩大训练成本与周期相应增加模型无法实时学习到最新的信息或动态变化。导致LLM难以应对诸如“请推荐现在的热门影片”等时间敏感的问题。大模型幻觉 涉及到大模型从未在训练过程中学习过的信息时大模型无法给出准确的答复转而开始臆想和编造答案。(2)举例LLM在考试的时候面对陌生的领域答复能力有限然后就准备放飞自我了而此时RAG给了一些提示和思路让LLM懂了开始往这个提示的方向做最终考试的正确率从60%到了90%(3)何为RAGRetrieval-Augmented Generation检索增强生成这是网上非常流行的啊一张图这涉及到我们本地的各种各样的语料可能是PDFwordmarkdownhtml等等各种各样格式的文件然后我们使用这种非结构化的加载器把它们加载成具体的文本然后这些文本有的可能非常的大你像一个word文件里边可能十几万字几10万字那文件非常大我们在检索的时候就不方便所以我们需要把它切割成一个一个的chunks咱们称做切片一个一个小的切片那么这个切片咱们给它做一个持久化的一个存储但是这块存的话咱们不是存这些具体的语料了而是需要经过一个叫embedding model做一个向量嵌入把每一个chunk都编写成高维度的一串数字把它们存储在这个叫向量数据库当中。这个数据已经存储起来了这个就是我们说最初的这个语料知识库就构建好了接下来的话用户可能会问一个具体的问题比如说这里面存储的就是医疗的相关的知识那问了一个问题说我现在身体感冒发烧特别冷那该吃什么药呢这个问题首先我们也需要把这一个文本内容转化成是一个向量所以使用的就是这个嵌入模型变成一个向量以后我们依照于叫向量相似度的一个算法去我们庞大的这个向量库当中开始去做检索看看跟哪个数据比较接近或者跟哪些比较接近那我们这就挑取了相关的一些语料过来把相关的这个切片就取到把这个文本的内容塞到我们的提示词模板当中这个所谓的提示词模板就是我们后续给到大模型的那个提示词。检索增强就是我们原来这个提示词里边没有相关的一些语料现在是不是有了这是不是就有一种增强生成就是大模型最后生成的这个结果比之前更靠谱所以就是检索增强生成。这里边几个难点首先第一个叫做文件解析这里边涉及到问题这个文本的格式非常多样其次的话就是一个文本内它的数据类型也可能很多样比如说像一个PDF它里边可能有文件有图片有表格而图片当中可能也有文字这些是不是都要考虑去做一些提取所以解析这块是一个问题。下个问题叫文件切割这个文件我们前面也提到了需要把它分成很多的小的切片你要不切片的话这一个文件又特别大你要把这个大的文件塞给这个大模型首先它有一个上下文的限制其次的话就是你要给非常多的不相关的语料那这个结果可能也不能太准确所以我们需要把这个文件给它切割成很多的小切片就挑选那些最准确的切片最相关的切片我们给到大模型那这时候切片到底怎么切我们就提到了很多种方案比如说依照这个字符数去切依照这个token数去切或者我们依照这个语义去切还是说呢我们最常用的递归字符的方式去切。后续我们通过一个prompt提问的方式是不是要做这检索了那到底怎么检索呀有哪些算法支持我们去做检索这是我们的知识检索这也是一个难点假设一共搜取到200个相关的这个chunks那200个里边有一些其实不够精准尤其当我们检索到的这个chunk数量比较多的时候你要都搜塞给这个大模型那这个结果准确率可能也会降低所以我们就有必要对检索到的这样一些chunk进行一个排序排序完以后我们就挑选比如说top100或者top50挑选相似度最高的那样的一些chunk我们塞给这个提示词然后再给到大模型所以这就涉及到叫知识重排序的问题。3.2 Agent开发充分利用LLM的推理决策能力通过增加规划、记忆和工具调用的能力构造一个能够独立思考、逐步完成给定目标的Agent(智能体)。1、大模型(LLM)作为“大脑”提供推理、规划和知识理解能力是AI Agent的决策中枢。大脑主要由一个大型语言模型LLM组成承担着信息处理和决策等功能 并可以呈现推理和规划的过程能很好地应对未知任务。2、规划决策(Planning)通过任务分解、反思与自省框架实现复杂任务处理。例如利用思维链(Chain of Thought)将目标拆解为子任务并通过反馈优化策略。3、工具使用(Tool Use)调用外部工具(如API、数据库)扩展能力边界。4、记忆Memory智能体像人类一样能留存学到的知识以及交互习惯等这样的机制能让智能体在处理重复工作时调用以前的经验从而避免用户进行大量重复交互。(1)短期记忆存储单次对话周期的上下文信息属于临时信息存储机制。受限于模型的上下文窗口长度。(2)长期记忆可以 横跨多个会话或时间周期 可存储并调用核心知识非即时任务。比如关于用户的偏好过去执行过的指令等。长期记忆可以通过模型参数微调(固化知识) 、 知识图谱(结构化语义网络)或向量数据库(相似性检索)方式实现。5、行动Action实际执行决策的模块涵盖软件接口操作如自动订票和物理交互如机器人执行搬运。比如检索、推理、编程等。Agent也翻译成叫智能体那有的地方把Agent翻译成代理差点意思啊智能体要更合适一些那么这里有个问题说我们Agent的创建的时候是不是每次都要用当前市面上最强的大模型注意啊还真不是这样为啥呢因为我们一个agent的调用过程当中可能要多次调用大模型如果每次都用最强的大模型当然效果很好呀但这里边的问题是什么呢首先花费比较高前段时间这个open claw小龙虾一夜之间花了好多钱这个模型你不能每次都用最强的特别贵那其次的话这个模型特别强的时候它的响应时间也会更慢一些你要多次调用的话这个给用户的体验也可能会差一些所以我们在一些这个难度不是很大的任务上咱们可以用一些小的模型更便宜然后响应速度也更快好。3.3 大模型应用开发的4个递进场景那在大家对RAG和agent有了基础的认识以后咱们接着来看大模型应用开发的四个场景。3.3.1 场景1纯PromptPrompt是操作大模型的唯一接口。当人看你说一句ta回一句你再说一句ta再回一句…这个也是大家最熟悉的就是我们在程序当中问一个prompt提示词然后大模型给我们一个响应你一句他一句这样的方式来进行交互那如果在这个基础之上大家发现你后续问的问题他还能够记得你之前交互过什么那这显然就具备了记忆的能力那这时候它就不是一个简单的大模型了而是一个智能体。3.3.2 场景2Agent Function CallingAgentAI主动提要求Function Calling需要对接外部系统时AI 要求执行某个函数当人看你问 ta「我明天去杭州出差要带伞吗」ta 让你先看天气预报你看了告诉tata再告诉你要不要带伞。工具调用很显然也是agent才具备的功能比如说我们有个需求说我明天要去杭州出差要带伞吗这显然需要调用外部的一些工具可能是墨迹天气也可能是open wider的接口总之我们调用完以后把这个结果再融合在我们的提示词当中给到大模型大模型就给到我们一个更准确的一个回。3.3.3 场景3RAG (Retrieval-Augmented Generation)RAG需要补充领域知识时使用。Embeddings把文字转换为更易于相似度计算的编码。这种编码叫向量。向量数据库把向量存起来方便查找。向量搜索根据输入向量找到最相似的向量。举例考试答题时到书上找相关内容再结合题目组成答案。如果我们问的相关问题发现大模型的语料比较少我们需要专门的知识库作为一个支撑这就提到了RAG这个RG可以作为我们Agent开发的一个部分出现那我们结合RAG检索到的更精准的语料再融合到我们的提示词当中给到大模型大模型再给一个更靠谱的响应。3.3.4 场景4Fine-tuning(精调/微调)举例努力学习考试内容长期记住活学活用。特点成本最高在前面的方式解决不了问题的情况下再使用。微调是作为我们解决大模型幻觉问题的非常重要的一个手段但是也是比较靠后的一个手段因为它的成本比较高一方面大家能够招聘到相关的懂模型微调的这些人最好还有经验这些人通常都比较贵。另外一点的话就是我们做微调的话你得需要具备相关的语料这都需要人力和时间成本的投入所以这个相对来说成本会比较高。而且可能还要面对一个风险就是你微调以后的模型可能幻觉问题更严重这个大家都要考虑得到。3.4 如何选择相关的技术首先准备测试数据用对话应用去验证它的可行性如果发现相关的语料比较缺所以我们优先考虑去补充RAG再补充完以后发现还是不行那我们考虑是不是需要对接相关的外部系统这那就涉及到工具的调用然后的话如果幻觉问题仍然存在啊那我们就考虑东西也都给了这个工具也都调了这个模型这块是不是会有一些问题我们可能要尝试进行模型的微调了最后把这个结果交付给用户。整个这个流程的话比较简洁我们只提到了三种措施但是在实际的项目开发当中其实我们对应的措施非常多这是三种比较主要的措施大家先构成一个基础的理解就可以了。