Skip to main content

Langchain

LangChain 是一个用于开发由大型语言模型(LLM)驱动的应用程序的框架。

LangChain 简化了 LLM 应用程序生命周期的每个阶段:

  • 开发: 使用 LangChain 的开源构建模块组件构建您的应用程序。使用第三方集成和模板运行。
  • 生产化: 使用 LangSmith 检查、监控和评估您的链,这样您就可以持续优化并放心部署。
  • 部署: 使用 LangServe 将任何链转化为 API。

具体来说,该框架由以下开源库组成:

  • langchain-core:基础抽象和 LangChain 表达语言。
  • langchain-community: 第三方集成。
    • 合作伙伴软件包(如 langchain-openai、langchain-anthropic 等): 一些集成已被进一步拆分为各自的轻量级软件包,这些软件包仅依赖于 langchain-core。
  • langchain: 构成应用程序认知架构的链、代理和检索策略。
  • langgraph: 通过将步骤建模为图中的边和节点,使用 LLM 构建稳健且有状态的多角色应用程序。
  • langserve: 将 LangChain 链作为 REST API 部署。

更广泛的生态系统包括

  • LangSmith: 开发人员平台,可让您调试、测试、评估和监控 LLM 应用程序,并与 LangChain 无缝集成。

Expression Language (LCEL)

LCEL 可以轻松地从基本组件构建复杂的链,并支持流、并行和日志等开箱即用的功能。

安全

最佳实践

在构建此类应用程序时,开发人员应牢记遵循良好的安全规范:

  • 限制权限: 根据应用程序的需要确定权限范围。授予广泛或过多的权限会带来严重的安全漏洞。为避免此类漏洞,可考虑使用只读凭证、禁止访问敏感资源、使用沙箱技术(如在容器内运行)等适合您应用程序的方法。
  • 预测潜在误用: 人类会犯错,大语言模型(LLM)也会犯错。始终假定任何系统访问或凭证都可能以其分配权限所允许的任何方式被使用。例如,如果一对数据库凭据允许删除数据,那么最安全的做法就是假设任何能够使用这些凭据的 LLM 事实上都可以删除数据。
  • 深度防御: 没有一种安全技术是完美无缺的。微调和良好的链设计可以减少但不能消除大型语言模型(LLM)犯错的几率。最好是结合多层次的安全方法,而不是依赖任何单一的防御层来确保安全。例如:同时使用只读权限和沙箱,确保大型语言模型只能访问明确指定给它们使用的数据。

不这样做的风险包括但不限于

  • 数据损坏或丢失。
  • 未经授权访问机密信息。
  • 关键资源的性能或可用性受损。

示例情景和缓解策略:

  • 用户可能会要求具有文件系统访问权限的 代理 agent 删除不应删除的文件或读取包含敏感信息的文件内容。为减轻这种情况,可限制 代理 agent 只使用特定目录,并只允许其读取或写入可安全读取或写入的文件。考虑通过在容器中运行 代理 agent 来进一步沙箱化,从硬件上就隔离开。
  • 用户可能会要求具有外部 API 写访问权限的 代理 agent 向 API 写入恶意数据,或删除 API 中的数据。为减少这种情况,可为 代理 agent 提供只读 API 密钥,或限制其仅使用已经可以抵御此类滥用的 API 接口。
  • 用户可能会要求拥有数据库访问权限的 代理 agent 删除表格或更改内容结构 schema。为减少这种情况,应将数据库凭证范围限定在 代理 agent 需要访问的表上,并考虑签发只读凭证。

如果您正在构建访问外部资源(如文件系统、应用程序接口或数据库)的应用程序,请考虑与贵公司的安全团队沟通,以确定如何以最佳方式设计和保护您的应用程序。