LangChain4j是LangChain的Java版本,上篇文章也介绍了它们之间的关系,介绍LangChain4j功能之前,先介绍下LangChain的功能,LangChain4j是否完全实现了LangChain的功能,是否又扩展了新的功能,接下来让我们一一分享。

一.LangChain主要模块

1.Model I/O

管理大语言模型(Models)及其输入(Prompts)和格式化输出(Output Parsers)。

  • Model 集成不同的大模型
  • Prompts 提示词,大模型的输入
  • Output Parsers   格式化输出

2.Data Connection | Indexs

帮助开发者连接和管理外部数据源,以便在AI应用中集成丰富的知识和信息。管理主要用于建设私域知识(库)的向量数据存储(Vector Stores)、内容数据获取(Document Loaders)和转化(Transformers),以及向量数据查询(Retrievers)。

  • Vector Stores 非结构化数据的向量存储
  • Document Loaders 加载不同类型数据源
  • Transformers  数据转化
  • Retrievers 文档数据检索

3.Memory

用于存储和获取对话历史记录,在连续对话或复杂任务中,Memory模块能够保持对话的上下文,确保模型能够理解和响应之前的对话内容。

4.Chains

串联 Memory ↔️ Model I/O ↔️ Data Connection,以实现串行化的连续对话、推测流程。Chains模块是LangChain的核心,它能够将不同的模块和功能组合起来,也可以连接不同的模型,形成一个完整的业务流程。开发者可以根据需求,定制特定的Chains,实现复杂的AI应用。

5.Agents

基于Chains进一步串联工具(Tools),从而将大语言模型的能力和本地、云服务能力结合。Agents模块能够整合各种工具和服务,使得AI应用能够与实际业务场景更加紧密地结合。

6.Callbacks

提供了一个回调系统,可连接到LLM申请的各个阶段,便于进行日志记录、追踪等。Callbacks模块使得开发者能够在AI应用的各个阶段添加自定义的回调函数,从而进行更细致的控制和监控。

二.LangChain4j主要模块

本文是基于LangChain4j版本0.29.1总结的,LangChain4j版本还在继续升级中,版本更新链接

1.Model I/O

1.1Model

模型接口

ChatLanguageModel
LanguageModel 
StreamingChatLanguageModel
StreamingLanguageModel 
EmbeddingModel
ModerationModel
......
以上都是langchain4j提供的大模型接口,都有不同的实现,比如ChatLanguageModel就有OpenAi提供的OpenAiChatModel和LocalAi提供的LocalAiChatModel实现等等,每个模型接口实现都有各自的模型参数,可在源码中看到。

注1:后面也会专门出一篇博客讲解参数。

注2:模型的分类和使用也会专门出一篇文章详解。

链接:langchain4j模型分类和使用

1.2prompt提示词

PromptTemplate 提示模板,是一种可复制的生成Prompt的方式

Prompt 提示,模型的输入,具体的输入文本,

注3:还有通过注解@SystemMessage、@UserMessage和@StructuredPrompt给出提示信息,会在后面文章中分享。

链接:https://mp.csdn.net/mp_blog/creation/success/137930436

1.3 Output Parsers 格式化输出

如果希望从大模型接收结构化输出,可以设置返回值类型,目前支持以下返回值类型:

  • String
  • AiMessage
  • Response<AiMessage> 
  • boolean/Boolean 
  • byte/Byte/short/Short/int/Integer/BigInteger/long/Long/float/Float/double/Double/BigDecimal
  • Date/LocalDate/LocalTime/LocalDateTime
  • List<String>/Set<String> 
  • Enum 枚举类
  • 自定义对象,实际上是JSON,会解析为自定义对象,例如Person类
  • JSON

注4:具体如何应用,会专门出一边博客讲解,后面会附上链接。

2.Data Connection | Indexs

->RAG(Retrieval-Augmented Generation)

该模块工作中还未用到,后面会补充

2.1EmbeddingStore  嵌入式存储

EmbeddingStoreIngestor:表示一个摄取管道,负责讲Document摄取到EmbeddingStore

2.2Document

2.3Document Loader

2.4Document Parser

2.5Document Transformer

2.6Text Segment 

使用DocumentSplitter将Document分割成TextSegment

2.7Document Splitter

2.8ContentRetriever 内容检索器

2.9RetrievalAugmentor 检索增强器

2.10Content Injector

2.11ContentAggregator

2.12TextClassifier 文本分类器

3.Memory

手动管理ChatMessage(后面会讲)非常麻烦,所以,产生了ChatMemory,充当ChatMessage的容器,具有持久性。

3.1ChatMemory

用于存储和获取对话历史记录,多用于Chain和Aiservice中。

ChatMemory 是用于存储和管理聊天对话的上下文信息的组件。在连续对话或复杂任务中,保持对话的上下文信息对于确保模型能够理解和响应之前的对话内容至关重要。ChatMemory 负责存储对话历史记录,并提供接口来读取和更新这些历史记录。

ChatMemory 通常与 Agent 和 Chain 一起使用,以支持连续对话任务。当用户输入一个问题时,Agent 会从 ChatMemory 中读取相关的对话历史信息,并结合当前的输入构建出一个完整的上下文。然后,Agent 会使用工具链(Chain)来处理这个上下文,并生成一个回复。这个回复会作为新的对话历史信息保存在 ChatMemory 中,供之后的对话使用

3.2ChatMemoryStore

ChatMemoryStore表示ChatMessage状态的存储,允许在聊天内存存储的位置和方式方面有灵活性,目前唯一可用的实现是InMemoryChatMemoryStore,使用者也可以自己实现ChatMemoryStore接口连接到任意存储。

4.Chain

       前面提到的底层组件ChatLanguageModel、ChatMessage、ChatMemory等,在这个级别上工作非常灵活和自由,但是会迫使使用者编写大量样本代码,由于LLM驱动的应用程序通过不仅需要一个组件,还需要多个组件一起工作,例如prompt、chatmemory、LLM、output parsers等,并且涉及多个交互,因此编排它们变得更加麻烦。

       使用者需要更关注业务逻辑,而非底层现,因此langchain4j有两个高级概念可以帮助实现这一点,Chain和Aiservice(后面会讲),Chain可以连接多个组件,如ChatLanguageModel、ChatMemory。

       LangChain有多个类型的Chain,但是目前,LangChain4j只实现了两个Chain,分别是ConversationalChain和ConversationalRetievalChain,并且暂时不打算添加更多(LangChain4j-0.29.1版本)。

5.Agent

官网对agent介绍不多,目前也只讲了tool功能,需要结合Aiservice和Model来生成代理,执行某些方法。

5.1Tool

使用@Tool标注需要执行的方法,调用AiServices.builder().()...会生成接口MathGeinus的代理,执行ask()方法时底层会根据输入的问题执行相对应的方法(被@Tool标注的方法)。

新版本中生成代理的方法不需要自己写代码了,只需要在接口上使用@AiService注解,同时使用@Tool注解的类上增加@Component注解即可。

并非所有的模型都支持Tool,目前只有如下模型支持:

  • OpenAiChatModel
  • AzureOpenAiChatModel
  • LocalAiChatModel
  • QianfanChatModel

6.Callbacks

该模块工作中还未用到,后面会补充

7.Aiservice 

Aiservice为Chain提供了一种更简单更灵活的替代方案,可以定义自己的API(一个带有一个或者多个方法的接口),目前,Aiservice支持:

  • 使用UserMessage和SystemMessage的用户和系统消息提示模板
  • 共享每个用户的聊天内存ChatStore
  • 结构化提示作为方法参数@StructuredPrompt
  • 各种工具Tool
  • 各种返回类型,结合上面讲的Output Parsers
  • 流Streaming
  • 使用审核模型ModerationModel进行检查
  • RAG

三.重新分类

1.Embedding

1.1EmbeddingModel

1.2EmbeddingStore

1.3TextClassifier

2.ChatMessage

2.1UserMessage

2.2SystemMessage

详解看:https://mp.csdn.net/mp_blog/creation/success/137930436

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐