小本本系列:langchain 编程框架(1)

是什么

LangChain 是一个开源的工具包,专注于利用人工智能和自然语言处理技术来增强应用的开发。它特别强调了如何将大型语言模型(如OpenAI的GPT系列、阿里云的通义千问等)集成到实际的应用场景中,以实现自动化、智能化的解决方案。LangChain的核心目标是简化开发者构建基于语言模型的应用程序的过程,让非AI专业的开发者也能快速上手,创建具有复杂自然语言处理能力的应用。

核心特性

  1. 易用性:LangChain 提供了一系列预构建的模块和组件,使得开发者能够快速搭建起基于语言模型的服务或工作流,而无需从零开始编写复杂的 NLP 代码。
  2. 灵活性:它支持多种语言模型和后端服务,比如可以通过更换不同的 LLM(Large Language Model) 提供商来适应不同的需求或成本考虑。同时,它也支持与多种数据源和工具集成,如知识库、数据库、文档存储等。
  3. 可扩展性:LangChain 设计了模块化的架构,允许用户根据自己的需求添加自定义的组件,比如新的数据处理器、链式逻辑、或是模型解释器,以满足特定应用场景的需求。
  4. 社区驱动:作为一个开源项目,LangChain 鼓励社区贡献和协作,不断丰富其功能和应用场景。社区提供了大量的示例、教程和最佳实践,帮助开发者快速学习和应用。
  5. 应用场景广泛:LangChain 可以被应用于各种领域,包括但不限于智能客服、内容生成、代码助手、数据分析、信息检索、知识管理等。

技术栈

LangChain 本身主要使用的是 JavaScript 和 Python,不过由于它的设计原则和 API 的通用性,理论上开发者可以将其与任何支持 HTTP 请求的语言或框架集成。

langchain 架构

Image from LangChain Community

langchain-core

该模块包括了langchain基本的抽象以及将它们组成的方法例如 LLM,vector store,retriever 等等核心组件的接口,该组件为了保持非常轻巧依赖项没有集成第三方定义。

langchain

该模块包含构成应用程序认知架构的 chain,agents 和 retrieval strategies,它们不是第三方集成的,这里的所有 chain,agents 和 retrieval strategies 不是特定的而是通用的定义。

langchain-community

该模块集成了 langchain 社区维护的第三方包,这些三方包都是可选的,有些三方包已经做到轻量级套件即仅依赖 langchain-core(例如 langchain-openai, langchain-anthropic)。

langgraph

langgraph 公开了用于创建常见类型代理的高级接口,以及用于组成自定义流的低级API。它通过将应用中的步骤建模为图中的边和节点,构建使用 LLMs 的强大和状态的多元素的应用程序。

langserve

部署 langchain 链式服务提供 REST API 访问。

langsmith

一个开发人员平台,可让您调试,测试,评估和监视 LLM 应用程序,并与 langchain 无缝集成。

LCEL

langchain 表达式语言(LCEL)是链接 langchain 组件的声明性方式。LCEL从第一天开始就被设计为支持将原型投入生产,无需更改代码,从最简单的 “prompt+LLM” 链到最复杂的链都可以使用。

LCEL 特点

LCEL链的特点包括:

  • 一流的 streaming 支持
  • async 支持
  • 优化并行执行
  • 重试和回退(retries and fallbacks)
  • 获取中间结果
  • 输入输出的模式
  • 无缝支持 langsmith

runnable 协议

为了使创建自定义 chain 的尽可能容易,langchain 实现了一个 “Runnable” 协议。许多 langchain 组件实现了可运行的协议,包括聊天模型,LLMS,输出解析器,检索器,提示模板等。还有几个有用的原语用在 Runnable 中:

1. 标准调用接口
  • stream: stream back chunks of the response
  • invoke: call the chain on an input
  • batch: call the chain on a list of inputs
2. 标准异步调用接口
  • astream: stream back chunks of the response async
  • ainvoke: call the chain on an input async
  • abatch: call the chain on a list of inputs async
  • astream_log: stream back intermediate steps as they happen, in addition to the final response
  • astream_events: beta stream events as they happen in the chain (introduced in langchain-core 0.1.14)
3. 输入输出模式
  • input_schema: an input Pydantic model auto-generated from the structure of the Runnable
  • output_schema: an output Pydantic model auto-generated from the structure of the Runnable

为什么

使用 Langchain 可以为 LLM 应用开发带来以下几个好处和原因:

1. 模块化设计

Langchain 提供了一套模块化的组件,允许开发者根据需要组合不同的功能。例如,支持各种文档载入、文本处理、输出格式等,可以灵活地构建多样化的应用。

2. 简化多轮对话管理

在构建需要多轮对话的应用时,Langchain 帮助管理对话状态、上下文和用户输入,降低了开发复杂度,使得开发者更专注于业务逻辑而不是对话管理。

3. 集成外部数据源

Langchain 支持从多种外部数据源(如 API、数据库或文件)获取信息,允许 LLM 在生成响应时利用额外的上下文。这种集成能够提升应用的智能性和实用性。

4. 文本生成与后处理

Langchain 内置了多种文本生成和后处理方法,例如文本摘要、翻译、编码等功能,使得开发者可以更高效地实现复杂的文本处理任务。

5. 支持链式调用

Langchain 允许将多个操作以链式方式执行。这意味着可以构建复杂的任务流,让模型不仅仅是对输入的直接响应,而是在多个步骤下逐步生成输出。

6. 易于扩展

Langchain 的架构允许开发者很容易地添加新功能和扩展现有功能。这种灵活性使得在不断演进的项目中,可以快速适应新的需求或技术。

7. 提高生产力

通过提供现成的组件和功能,Langchain 显著提高了开发效率。开发者可以专注于创意和实现核心功能,而不必为每个功能从头开始开发。

8. 社区支持

Langchain 作为一个开源项目,拥有积极的开发者社区。用户可以方便地获取支持、分享经验和最佳实践,从而加速学习和实现过程。

总结

在 LLM 应用开发中,Langchain 提供了模块化、可扩展和高效的解决方案,简化了多轮对话管理和数据源集成,从而提高了开发者的生产力和应用的智能性。因此,对于想要快速构建和部署 LLM 应用的开发者,Langchain 是一个非常有价值的工具。

怎么用

Langchain 框架包括非常多的组件:

Chat models
LLMS
Messages
Prompt templates
Example selectors
Output parsers
Chat history
Documents
Document loaders
Text splitters
Embedding models
Vector stores
Retrievers
Key-value stores
Tools
Toolkits
Agents
Callbacks
后续会采用 Qwen + langchain 来学习和使用 langchain 的各个组件