本节包含对 LangChain 关键部分的介绍。
架构
LangChain 作为一个框架由多个包组成。
langchain-core
该包包含不同组件的基本抽象以及将它们组合在一起的方法。此处定义了LLM、向量存储、检索器等核心组件的接口。这里没有定义第三方集成。依赖项有目的地保持非常轻量级。
LangChain Core 包含为 LangChain 生态系统的其余部分提供基础的抽象。拥有这些抽象的好处是任何提供商都可以实现所需的接口,然后轻松地在 LangChain 生态系统的其余部分中使用。
快速安装
pip install langchain-core
核心接口:可运行文件
Runnable的概念是 LangChain Core 的核心——它是大多数 LangChain Core 组件实现的接口,为它们提供了
- 一个通用的调用接口(调用、批处理、流等)
- 用于重试、回退、模式和运行时可配置性的内置实用程序
- 使用 LangServe 轻松部署
如需更多信息,请查看可运行文档。实现接口的组件示例包括:LLM、聊天模型、提示、检索器、工具、输出解析器。
我们可以通过两种方式使用 LangChain Core 对象:
- 命令式:即。直接调用它们,例如:
model.invoke(...)
- 声明式,带有LangChain表达式语言(LCEL)
- 或者两者兼而有之!例如:LCEL 序列中的一个步骤可以是自定义函数。
合作包
当整合的长尾在 langchain-community
,我们将流行的集成拆分为它们自己的包(例如:langchain-openai
,langchain-anthropic
等)。这样做是为了改进对这些重要集成的支持。
langchain
langchain
包包含构成应用程序认知架构的链、代理和检索策略。这些不是第三方集成。这里的所有链、代理和检索策略都不特定于任何一个集成,而是在所有集成中通用的。
快速安装
pip install langchain or pip install langsmith && conda install langchain -c conda-forge
langchain 具体是什么?
大型语言模型正在成为一种变革性技术,使开发人员能够构建他们以前无法构建的应用程序。然而,孤立地使用这些LLM通常不足以创建一个真正强大的应用程序——当你可以将它们与其他计算或知识来源结合起来时,真正的强大就来了。
该库旨在帮助开发这些类型的应用程序。这些应用程序的常见示例包括:
- 用RAG回答问题:参考
- 提取结构化输出:参考
- 聊天机器人:参考
langchain 有什么帮助?
LangChain 旨在帮助解决以下五个主要领域的问题:
📃 模型和提示: 这包括提示管理、提示优化、所有LLM的通用接口以及用于处理聊天模型和LLM的通用实用程序。
🔗链: 链超越了单个LLM调用,涉及调用序列(无论是对LLM还是不同的实用程序)。LangChain为链提供了标准接口、与其他工具的大量集成以及用于常见应用程序的端到端链。
📚检索增强生成: 检索增强生成涉及特定类型的链,这些链首先与外部数据源交互以获取用于生成步骤的数据。示例包括长文本片段的摘要和对特定数据源的问答。
🤖代理: 代理涉及LLM决定采取哪些行动,采取该行动,查看观察结果,并重复该观察结果,直到完成。LangChain为代理提供了标准接口、可供选择的代理以及端到端代理的示例。
🧐评价: 众所周知,生成模型很难用传统指标进行评估。评估它们的一种新方法是使用语言模型本身进行评估。LangChain提供了一些提示/链来协助这一点。
langchain-community
此包包含由 LangChain 社区维护的第三方集成。关键合作伙伴包被分离出来的。这包含各种组件(LLM、向量存储、检索器)的所有集成。此包中的所有依赖项都是可选的,以保持包尽可能轻量级。
快速安装
pip install langchain-community
langchain-community 是什么?
朗链社区包含实现朗链核心中定义的基本接口的第三方集成,使它们可以在任何朗链应用程序中随时使用。参考API
langgraph
langgraph
是 langchain 的扩展,旨在通过将步骤建模为图中的边和节点,使用LLM构建健壮且有状态的多参与者应用程序。
LangGraph 公开了用于创建通用类型代理的高级接口,以及用于组合自定义流的低级API。
概览
假设您正在构建一个客户支持助理。您希望您的助手能够:
- 使用工具回答问题
- 如果需要,与人类联系
- 能够无限期暂停进程并在人类响应时恢复
LangGraph 让这一切变得简单。
快速安装:
pip install -U langgraph
然后定义我们的助手:
import json
from langchain_anthropic import ChatAnthropic
from langchain_community.tools.tavily_search import TavilySearchResults
from langgraph.checkpoint.sqlite import SqliteSaver
from langgraph.graph import END, MessageGraph
from langgraph.prebuilt.tool_node import ToolNode
# Define the function that determines whether to continue or not
def should_continue(messages):
last_message = messages[-1]
# If there is no function call, then we finish
if not last_message.tool_calls:
return END
else:
return "action"
# Define a new graph
workflow = MessageGraph()
tools = [TavilySearchResults(max_results=1)]
model = ChatAnthropic(model="claude-3-haiku-20240307").bind_tools(tools)
workflow.add_node("agent", model)
workflow.add_node("action", ToolNode(tools))
workflow.set_entry_point("agent")
# Conditional agent -> action OR agent -> END
workflow.add_conditional_edges(
"agent",
should_continue,
)
# Always transition `action` -> `agent`
workflow.add_edge("action", "agent")
memory = SqliteSaver.from_conn_string(":memory:") # Here we only save in-memory
# Setting the interrupt means that any time an action is called, the machine will stop
app = workflow.compile(checkpointer=memory, interrupt_before=["action"])
现在,运行 langgraph:
# Run the graph
thread = {"configurable": {"thread_id": "4"}}
for event in app.stream("what is the weather in sf currently", thread, stream_mode="values"):
event[-1].pretty_print()
LangGraph 是一个工具,可以帮助你构建复杂的、有状态的代理程序,而无需过多关注手动管理状态和中断。你只需要定义节点、边和状态模式,然后让 LangGraph 处理其余的事情。
langserve
将 LangChain 链部署为 REST API 的包。使启动和运行生产就绪API变得容易。
LangSmith
一个开发人员平台,可让您调试、测试、评估和监控 LLM 应用程序。
欢迎关注微信公众号【千练极客】,尽享更多干货文章!
本文由博客一文多发平台 OpenWrite 发布!