# langchain-scratch **Repository Path**: zypdominate/langchain-scratch ## Basic Information - **Project Name**: langchain-scratch - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-30 - **Last Updated**: 2026-02-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LangChain 学习与实践项目 这个项目是我在学习 LangChain 框架过程中整理的一些示例代码和实战项目。主要目的是通过实际动手来理解 LangChain 的各种功能,包括模型调用、提示模板、链式组合、RAG 检索增强生成、Agent 工具调用等等。 ## 项目结构 项目主要分为两部分:学习示例和实战项目。 ### 学习示例 在 `demo` 目录下,我按照学习顺序整理了一系列示例代码: - `1.langchain_deepseek-api.py` - 调用 DeepSeek API 的基础示例 - `2.langchain-ollama-local.py` - 使用本地 Ollama 部署的模型 - `3.prompt_template.py` - 学习 PromptTemplate 字符串模板 - `4.chat_prompt_template.py` - 学习 ChatPromptTemplate 对话模板 - `5.StrOutputParser.py` - 字符串输出解析器 - `6.JsonOutputParser.py` - JSON 输出解析器 - `7.PydanticOutputParser.py` - Pydantic 结构化输出解析器 - `8.chain_lcel.py` - LCEL 链式组合语法 - `9.chain_stream.py` - 流式输出处理 - `10.langchain_text_load.py` - 文档加载示例 - `11.langchain_text_splitter.py` - 文本切分示例 - `12.embedding_huggingface.py` - 使用 HuggingFace 的嵌入模型 - `13.RAG.py` - RAG 检索增强生成完整示例 - `14.RunnerableWithMsgHistory.py` - 消息历史记录 - `15.persist_chat_history.py` - 持久化聊天历史 - `16.agent_tool.py` - Agent 和自定义工具 - `17.agent_langchain_tools.py` - 使用 LangChain 内置工具 这些示例代码基本覆盖了 LangChain 的核心功能,每个文件都可以独立运行,方便学习和调试。 ### 实战项目 #### 1. RAG 知识库问答系统 位置:`demo/rag_project/` 这是一个基于 RAG 技术的知识库问答系统,主要功能包括: - 支持上传 PDF、Markdown、Word 等多种格式的文档 - 自动将文档切分、向量化并存储到 Chroma 向量数据库 - 通过自然语言查询,从知识库中检索相关内容并生成答案 - 支持流式输出,实时显示回答内容 - 显示答案的来源文档,方便追溯 使用 Streamlit 构建了简单的 Web 界面,可以直接在浏览器中上传文档和提问。 运行方式: ```bash cd demo/rag_project streamlit run app.py ``` #### 2. Swagger 接口测试代码生成器 位置:`demo/swagger_testgen/` 这个工具可以自动从 Swagger 接口文档生成 Pytest 测试代码,主要功能: - 上传 Swagger JSON 或 YAML 文件 - 自动解析接口列表 - 选择指定接口后,使用大模型生成对应的测试代码 - 生成的代码可以直接使用,包含基本的断言和请求发送逻辑 同样使用 Streamlit 构建界面,操作简单直观。 运行方式: ```bash cd demo/swagger_testgen streamlit run app.py ``` ## 环境配置 ### 创建 Python 环境 推荐使用 conda 创建独立的 Python 环境: ```bash conda create -n langchain python=3.12 -y conda activate langchain ``` ### 依赖安装 项目依赖都在 `requirements.txt` 中,直接安装即可: ```bash pip install -r requirements.txt ``` 如果需要手动安装核心依赖,也可以使用以下命令: ```bash pip install langchain==0.3.25 pip install langchain-openai==0.3.16 pip install langchain-deepseek==0.1.3 pip install langchain-ollama==0.3.2 ``` 主要依赖包括: - LangChain 核心库和社区扩展 - 文档处理相关库(pypdf、python-docx 等) - 向量数据库 ChromaDB - 嵌入模型相关库(HuggingFace) - Streamlit 用于构建 Web 界面 ### 模型配置 项目支持多种大模型调用方式,通过 `demo/llm_factory.py` 统一管理。需要在项目根目录创建 `.env` 文件配置: ```ini # 选择使用的模型提供商:ollama_deepseek | ollama_qwen | deepseek | openai LLM_PROVIDER=ollama_deepseek # Ollama 配置(如果使用本地模型) OLLAMA_DEEPSEEK_MODEL=deepseek-r1:1.5b OLLAMA_QWEN_MODEL=qwen2.5:7b OLLAMA_TEMPERATURE=0.5 # DeepSeek API 配置 DEEPSEEK_API_KEY=your_api_key_here DEEPSEEK_MODEL=deepseek-chat DEEPSEEK_TEMPERATURE=0.5 # OpenAI API 配置 OPENAI_MODEL=gpt-4 OPENAI_TEMPERATURE=0.5 ``` 如果使用本地 Ollama 模型,需要先安装并配置 Ollama 服务。如果使用云端 API,需要先获取对应的 API Key。 ### Ollama 本地模型配置 **安装 Ollama** 下载安装 Ollama:[https://ollama.com/download](https://ollama.com/download) Windows 系统默认会安装到 `C:\Users\username\AppData\Local\Programs\Ollama` 验证安装是否成功: ```bash ollama --version ``` **下载和运行模型** 选择并下载模型,例如 [deepseek-r1:1.5b](https://ollama.com/library/deepseek-r1:1.5b): ```bash ollama run deepseek-r1:1.5b # 运行模型,第一次会自动下载 ollama list # 列出所有已安装的模型 ollama remove deepseek-r1:1.5b # 删除指定模型 ``` **迁移模型存放位置(可选)** 为了避免模型文件占满 C 盘,可以将模型文件迁移到其他盘: 1. 退出 Ollama 服务 2. 将 `C:\Users\<用户名>\.ollama\models` 目录剪切到目标位置(如 `D:\ProgramData\Ollama\models`) 3. 在默认目录创建符号链接(需要管理员权限): ``` mklink /D C:\Users\<用户名>\.ollama\models D:\ProgramData\Ollama\models ``` **配置代理问题** Windows 环境下如果出现 502 错误,但命令行可以使用 ollama 命令,可能是本地代理导致的问题。可以在代码中关闭代理: ```python # 在初始化 llm 之前添加,确保不走代理 import os os.environ['HTTP_PROXY'] = "" os.environ['HTTPS_PROXY'] = "" os.environ['NO_PROXY'] = "localhost,127.0.0.1" ``` > 提示:更多关于 Ollama 的使用说明,可以参考 `LangChain框架.md` 文档中的 "1.3.3 调用本地 Ollama 部署的 DeepSeek" 章节。 ## 使用说明 ### 运行单个示例 直接运行对应的 Python 文件即可: ```bash python demo/1.langchain_deepseek-api.py ``` 所有示例代码都是可以直接运行的,只需要确保 `.env` 文件配置正确。 ### 运行实战项目 两个实战项目都使用 Streamlit 构建,启动后会在浏览器中打开界面: ```bash # RAG 知识库问答系统 cd demo/rag_project streamlit run app.py # Swagger 测试代码生成器 cd demo/swagger_testgen streamlit run app.py ``` ## 学习路径 如果是第一次接触 LangChain,建议按照以下顺序学习: 1. 先看基础示例 1-2,了解如何调用不同的模型 2. 学习 3-4,理解提示模板的使用 3. 学习 5-7,掌握输出解析器的用法 4. 学习 8-9,理解链式组合和流式输出 5. 学习 10-12,了解文档处理和向量化 6. 学习 13,完整理解 RAG 的实现流程 7. 学习 14-15,掌握对话历史管理 8. 学习 16-17,了解 Agent 和工具调用 9. 最后看两个实战项目,理解如何将知识点组合成完整应用 ## 注意事项 ### 通用注意事项 - 使用本地 Ollama 模型时,需要先确保 Ollama 服务正在运行 - 使用云端 API 时,注意 API Key 的安全性,不要提交到代码仓库 - 向量数据库会占用一定磁盘空间,ChromaDB 的数据默认存储在 `vectorstore` 目录 - 首次使用 HuggingFace 嵌入模型时会自动下载,需要一定时间 ### Windows 环境常见问题 **PyTorch DLL 加载失败** 如果遇到以下错误: ``` OSError: [WinError 127] 找不到指定的程序。 Error loading "D:\software\miniforge3\envs\langchain\Lib\site-packages\torch\lib\shm.dll" or one of its dependencies. ``` 解决方案: 1. 先安装 [Visual C++ Redistributable](https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170),安装后重启电脑 2. 如果问题依然存在,重新安装 PyTorch(CPU 版本): ```bash conda run -n langchain pip uninstall -y torch torchvision torchaudio transformers sentence-transformers conda install -n langchain pytorch torchvision torchaudio cpuonly -c pytorch -y ``` 3. 或者使用 FastEmbedEmbeddings 替代,避免依赖 transformers/torch,解决 Windows 上 torch DLL 加载失败的问题: ```bash pip install "langchain-community[fastembed]" fastembed ``` 然后在代码中使用 `FastEmbedEmbeddings` 替代 `HuggingFaceEmbeddings`。 ## 参考资料 项目中还包含了一个 `LangChain框架.md` 文档,详细介绍了 LangChain 的各个模块和使用方法,可以作为学习参考。 ## 后续计划 这个项目还在持续更新中,后续可能会添加: - 更多实用的示例代码 - 其他类型的实战项目 - 性能优化和最佳实践 如果有什么问题或建议,欢迎提出。