LangChain 是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化由大型语言模型支持的应用程序开发过程,可以轻松管理与语言模型的交互,将多个组件链接在一起,并集成额外的资源,例如 API 和数据库。
LangChain 的核心概念包括:
一个典型的 Chain 可能包括 Prompt 模板、一个语言模型和一个输出解析器,它们一起工作处理用户输入、生成响应并处理输出。
当想要在 Prompts 中动态包含示例时,Example Selectors 很有用。他们接受用户输入并返回一个示例列表以在提示中使用,使其更强大和特定于上下文。
LangChain 提供了处理不同类型索引和检索器的工具和功能,例如矢量数据库和文本拆分器。
通过理解和利用这些核心概念,你可以使用 LangChain 构建适应性强、高效且能够处理复杂用例的高级语言模型应用程序。
LangChain 中的模型主要分为三类:
LLM(大型语言模型):这些模型将文本字符串作为输入并返回文本字符串作为输出。它们是许多语言模型应用程序的支柱。
聊天模型 (Chat Model):聊天模型由语言模型支持,但具有更结构化的 API。他们将聊天消息列表作为输入并返回聊天消息。这使得管理对话历史记录和维护上下文变得容易。
文本嵌入模型(Text Embedding Models):这些模型将文本作为输入并返回表示文本语义的浮点列表。这些嵌入可用于文档检索、聚类和相似性比较等任务。
LangChain 旨在为六个主要领域的开发人员提供支持:
LLM 和提示:LangChain 使管理提示、优化它们以及为所有 LLM 创建通用界面变得容易,还包括一些用于处理 LLM 的便捷实用程序。
链 (Chain):这些是对 LLM 或其他实用程序的调用序列。LangChain 为链提供标准接口,与各种工具集成,为流行应用提供端到端的链。
数据增强生成:LangChain 使链能够与外部数据源交互,收集生成步骤需要的数据。例如,它可以帮助总结长文本或使用特定数据源回答问题。
Agents:Agents 让 LLM 做出有关行动的决定,采取这些行动,检查结果,并继续前进直到完成。LangChain 提供了代理的标准接口,多种代理可供选择,以及端到端的代理示例。
内存:LangChain 有一个标准的内存接口,有助于维护链或代理调用之间的状态。它还提供了一系列内存实现和使用内存的链或代理的示例。
评估:很难用传统指标评估生成模型。这就是为什么 LangChain 提供提示和链来帮助开发者自己使用 LLM 评估他们的模型。
LCEL 是 LangChain 新一代的表达式语言,让你能够以声明式的方式组合 LangChain 的组件,变得更加灵活和易于组合。
核心优势:
最简 RAG 示例:
1from langchain.chat_models import ChatOpenAI
2from langchain.schema.runnable import RunnablePassthrough
3
4llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
5rag_chain = (
6 {"context": retriever, "question": RunnablePassthrough()}
7 | rag_prompt
8 | llm
9)
10rag_chain.invoke("What is Task Decomposition?")LangChain 可以用来构建多种类型的应用:
Langchain 的令牌计数效率很低,对于小数据集来说尤其明显。 解决方案:使用 Tiktoken 更高效地处理令牌计数。
LangChain 文档不充分且经常不准确,误导性的文档可能导致开发中代价高昂的错误,还有 404 页面。这和 LangChain 快速迭代有关。
LangChain 有很多概念容易混淆,很多函数只是标准 Python 函数的简单包装,增加了不必要的间接层。
LangChain 有时候会隐藏重要细节,行为不一致,可能导致生产系统出现意想不到的问题。例如 ConversationRetrievalChain 会重新措辞问题,有时候会破坏上下文。
缺乏表示数据的标准方法,这种一致性的缺乏可能会阻碍与其他框架和工具的集成,使其在更广泛的机器学习工具生态系统中工作具有挑战性。
回答要点:
回答要点:
回答要点:
回答要点: