趋近智
现代应用,包括用LangChain构建的那些,很少是单一的。它们是通过组合许多第三方库和包构建的,每个都可能带来自己的一套依赖项。尽管这加速了开发,但它也引出了一个重要的安全考量:从这些外部组件继承的弱点。管理项目依赖项的安全性是构建有弹性、值得信赖的LangChain应用的一个必要方面。
你的LangChain项目不仅依赖于langchain本身,还依赖于它使用的库(例如langchain-core、langchain-community、langsmith)、用于特定LLM提供商的库(如openai、anthropic)、向量数据库(pinecone、chromadb)、数据加载器(unstructured)、API交互(requests)以及核心Python环境。任何一个依赖项中的弱点,即使是传递性依赖(一个依赖项的依赖项),都可能危及你的整个应用。
与不安全依赖项相关的常见风险有:
第一步是了解你的项目使用了哪些依赖项。这通常通过requirements.txt (pip) 或 pyproject.toml (Poetry, PDM) 等文件进行管理。但是,仅仅列出直接依赖项还不够;你需要全面查看整个依赖项树,包括传递性依赖项。
有些工具可以自动识别你的依赖项中已知的弱点:
pip-audit: 这是Python打包管理机构 (PyPA) 的一个工具,它根据弱点数据库(主要是Python打包建议数据库 - PyPI)检查你已安装的环境或需求文件。你可以这样运行它:
# 检查当前环境
pip-audit
# 检查需求文件
pip-audit -r requirements.txt
safety: 另一个常用的命令行工具,它根据精心维护的已知安全弱点数据库检查已安装的依赖项。
# 扫描当前环境
safety check
# 扫描需求文件
safety check -r requirements.txt
这些工具将你项目中列出的库的特定版本与常见的弱点和暴露 (CVE) 列表以及平台专用建议等数据库进行比较。它们会报告查到的弱点,通常包括严重程度(例如:致命、高、中、低)以及关于弱点详情和可能修正方法的链接。
积极主动的管理对于降低依赖项相关风险是必要的。
固定依赖项和使用锁定文件:
避免在你的主要需求文件(requirements.txt、pyproject.toml)中使用如>=1.0.0这样不限定的N版本说明符。尽管这方便获取最新更新,但未经明确审查,它可能引入意料之外的破坏性改变或新的弱点。相反,应固定特定版本(例如,langchain==0.3.0)。
另外,使用锁定文件(requirements.lock、poetry.lock、pdm.lock)。这些文件记录了安装期间解析的所有依赖项(包括传递性依赖项)的精确版本。将锁定文件提交到你的仓库可以确保每个开发人员和部署环境都使用完全相同的依赖项集,从而实现可复现的构建并防止依赖项树出现意外变动。pip-tools(使用pip-compile)之类的工具或Poetry和PDM等包管理器会自动生成并管理这些锁定文件。
定期扫描和更新: 依赖项安全并非一次性检查。新的弱点会持续被查到。将依赖项扫描整合到你的开发流程中:
pip-audit之类的工具。减少依赖项占用: 每增加一个依赖项都会增加潜在的攻击面。定期审查项目的依赖项,并移除不再需要的。在选择提供类似功能的库时,考虑它们的依赖项树——一个拥有更少、维护良好的依赖项的库,从安全角度来看可能更具优势。
审查依赖项: 在添加新依赖项之前,进行一些必要的检查:
LangChain本身是一个快速发展的框架。保持你的langchain、langchain-core及相关包更新到合理的新版本通常是明智的,因为更新通常包含错误修正、性能提升和安全补丁。密切留意发布说明。
另外,考虑特定LangChain集成引入的依赖项。如果你使用Pinecone向量数据库,你依赖于pinecone。如果你使用Anthropic模型,你依赖于anthropic库。这些底层SDK和驱动程序的安全性与LangChain本身一样必要。对这些集成专用依赖项应用相同的扫描和管理原则。
在你的CI/CD流水线中自动化依赖项检查提供了一个持续的安全保障。这是一个使用GitHub Actions和pip-audit的例子:
name: 安全检查
on: [push, pull_request]
jobs:
dependency-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 设置 Python
uses: actions/setup-python@v5
with:
python-version: '3.11' # 使用你项目的Python版本
- name: 安装依赖项
run: |
python -m pip install --upgrade pip
pip install pip-audit
# 假设你使用 requirements.txt 和锁定文件机制
pip install -r requirements.txt # 或者使用你的锁定文件安装(例如 poetry install)
- name: 运行 pip-audit
run: |
# 如果查到任何弱点则失败。根据需要调整参数。
# 例如,使用 --ignore-vuln ID 忽略特定弱点
# 或者在哈希检查模式下使用 --require-hashes 进行更严格的检查。
pip-audit
运行
pip-audit的GitHub Actions工作流程步骤示例。
此步骤确保引入有弱点依赖项的代码更改在合并或部署前被标记出来。
有效管理依赖项安全需要持续的警惕。通过实施自动化扫描、使用锁定文件维护可复现的环境、定期更新软件包并减少项目依赖项占用,你可以大大提升生产LangChain应用的安全状态。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
pip-audit 的官方文档,详细说明其用于识别 Python 依赖项中已知漏洞的用法。© 2026 ApX Machine Learning用心打造