赞
踩
LangChain4j是LangChain的Java版本,上篇文章也介绍了它们之间的关系,介绍LangChain4j功能之前,先介绍下LangChain的功能,LangChain4j是否完全实现了LangChain的功能,是否又扩展了新的功能,接下来让我们一一分享。
管理大语言模型(Models)及其输入(Prompts)和格式化输出(Output Parsers)。
帮助开发者连接和管理外部数据源,以便在AI应用中集成丰富的知识和信息。管理主要用于建设私域知识(库)的向量数据存储(Vector Stores)、内容数据获取(Document Loaders)和转化(Transformers),以及向量数据查询(Retrievers)。
用于存储和获取对话历史记录,在连续对话或复杂任务中,Memory模块能够保持对话的上下文,确保模型能够理解和响应之前的对话内容。
串联 Memory ↔️ Model I/O ↔️ Data Connection,以实现串行化的连续对话、推测流程。Chains模块是LangChain的核心,它能够将不同的模块和功能组合起来,也可以连接不同的模型,形成一个完整的业务流程。开发者可以根据需求,定制特定的Chains,实现复杂的AI应用。
基于Chains进一步串联工具(Tools),从而将大语言模型的能力和本地、云服务能力结合。Agents模块能够整合各种工具和服务,使得AI应用能够与实际业务场景更加紧密地结合。
提供了一个回调系统,可连接到LLM申请的各个阶段,便于进行日志记录、追踪等。Callbacks模块使得开发者能够在AI应用的各个阶段添加自定义的回调函数,从而进行更细致的控制和监控。
本文是基于LangChain4j版本0.29.1总结的,LangChain4j版本还在继续升级中,版本更新链接
模型接口
ChatLanguageModel LanguageModel StreamingChatLanguageModel StreamingLanguageModel EmbeddingModel ModerationModel ...... 以上都是langchain4j提供的大模型接口,都有不同的实现,比如ChatLanguageModel就有OpenAi提供的OpenAiChatModel和LocalAi提供的LocalAiChatModel实现等等,每个模型接口实现都有各自的模型参数,可在源码中看到。
注1:后面也会专门出一篇博客讲解参数。
注2:模型的分类和使用也会专门出一篇文章详解。
PromptTemplate 提示模板,是一种可复制的生成Prompt的方式
Prompt 提示,模型的输入,具体的输入文本,
注3:还有通过注解@SystemMessage、@UserMessage和@StructuredPrompt给出提示信息,会在后面文章中分享。
链接:https://mp.csdn.net/mp_blog/creation/success/137930436
如果希望从大模型接收结构化输出,可以设置返回值类型,目前支持以下返回值类型:
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:具体如何应用,会专门出一边博客讲解,后面会附上链接。
该模块工作中还未用到,后面会补充
EmbeddingStoreIngestor:表示一个摄取管道,负责讲Document摄取到EmbeddingStore
使用DocumentSplitter将Document分割成TextSegment
手动管理ChatMessage(后面会讲)非常麻烦,所以,产生了ChatMemory,充当ChatMessage的容器,具有持久性。
用于存储和获取对话历史记录,多用于Chain和Aiservice中。
ChatMemory
是用于存储和管理聊天对话的上下文信息的组件。在连续对话或复杂任务中,保持对话的上下文信息对于确保模型能够理解和响应之前的对话内容至关重要。ChatMemory
负责存储对话历史记录,并提供接口来读取和更新这些历史记录。
ChatMemory
通常与 Agent
和 Chain
一起使用,以支持连续对话任务。当用户输入一个问题时,Agent
会从 ChatMemory
中读取相关的对话历史信息,并结合当前的输入构建出一个完整的上下文。然后,Agent
会使用工具链(Chain
)来处理这个上下文,并生成一个回复。这个回复会作为新的对话历史信息保存在 ChatMemory
中,供之后的对话使用
ChatMemoryStore表示ChatMessage状态的存储,允许在聊天内存存储的位置和方式方面有灵活性,目前唯一可用的实现时InMemoryChatMemoryStore,使用者也可以自己实现ChatMemoryStore接口连接到任意存储。
前面提到的底层组件ChatLanguageModel、ChatMessage、ChatMemory等,在这个级别上工作非常灵活和自由,但是会迫使使用者编写大量样本代码,由于LLM驱动的应用程序通过不仅需要一个组件,还需要多个组件一起工作,例如prompt、chatmemory、LLM、output parsers等,并且涉及多个交互,因此编排它们变得更加麻烦。
使用者需要更关注业务逻辑,而非底层现,因为langchain4j有两个高级概念可以帮助实现这一点,Chain和Aiservice(后面会讲),Chain可以连接多个组件,如ChatLanguageModel、ChatMemory。
LangChain有多个类型的Chain,但是目前,LangChain只实现了两个Chain,分别是ConversationalChain和ConversationalRetievalChain,并且暂时不打算添加更多(LangChain4j-0.29.1版本)。
官网对agent介绍不多,目前也只讲了tool功能,需要结合Aiservice和Model来生成代理,执行某些方法。
使用@Tool标注需要执行的方法,调用AiServices.builder().()...会生成接口MathGeinus的代理,执行ask()方法时底层会根据输入的问题执行相对应的方法(被@Tool标注的方法)。
新版本中生成代理的方法不需要自己写代码了,只需要在接口上使用@AiService注解,同时使用@Tool注解的类上增加@Component注解即可。
并非所有的模型都支持Tool,目前只有如下模型支持:
OpenAiChatModel
AzureOpenAiChatModel
LocalAiChatModel
QianfanChatModel
该模块工作中还未用到,后面会补充
Aiservice为Chain提供了一种更简单更灵活的替代方案,可以定义自己的API(一个带有一个或者多个方法的接口),目前,Aiservice支持:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。