一、简介
1.介绍
官网介绍到LangChain的目标是简化LLM与Java应用程序的集成。
统一的API:每一个LLM提供商(如Open AI 或Google vetex AI)和向量存储(如Pinecone或Milvus)使用专有的API。LangChain4j提供了一个统一的API,以避免需要为每个API学习和实现特定的API。要尝试不同的LLM或嵌入存储,可以轻松地在它们之间切换,而无需重写代码,目前支持15个流行的LLM提供商和15个嵌入商店。
功能全面的工具箱:LLM的应用程序,确定了常见的抽象、模式和技术。LangChain4j将这些改进为一个可用的包。我们的工具箱包括从低级提示模板、聊天内存管理和输出解析到高级模式(如AI Services和RAG)的各种工具。对于每个抽象,我们提供了一个接口以及基于通用技术的多个现成的实现。无论您是构建聊天机器人还是开发具有从数据摄取到检索的完整管道的RAG。
支持的LLM和其他支持情况(Stream流式回答)
核心功能:
- Chat and Language Models:切换大模型
- Chat Memory:对系统内聊天指定聊天memoryId进行分区,可以根据memoryId来持续对话内容。
- Model Parameters:根据选择模型型号和提供程序,可以调整许多参数
- Response Streaming:响应式处理,LLM提供程序一种逐个令牌传输相应的方法,不用等待整个文本
- AI Services:高级的核心功能,通过代理的形式帮我们实现特定的
- Service层放服务,只需要关注业务,不需要关注底层实现
- Tools:除了生成本文以外,还可以触发操作。在tools层可以根据触发条件调用不同的函数
- RAG:根据特定的文档 + 向量化 数据,来扩展模型的知识库,提高搜索的有效性
- Embedding Stores:向量数据库存储功能,提供很多事例,可以使用ES、Redis
2.SpringAI区别
二、使用
1.主要模型接口
- ChatLanguageModel
- LanguageModel
- StreamingChatLanguageModel
- StreamingLanguageModel
- EmbeddingModel
- ModerationModel
以上都是langchain4j提供的大模型接口,都有不同的实现,比如ChatLanguage就有OpenAi提供的OpenAiChatModel和LocalAi提供的LocalAiChat Model实现等等。
例子:使用QianfanChatModel创建一个基础语言模型,进行LLM的基础调用
具体结构如下
1.1 导入依赖
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>0.31.0</version>
</dependency>
1.2 核心代码
//基础模型 ->ChatLanguageModel, 接收多个CharMessages作为输入并返回AiMessage,ChatLanguage属于LangChain4j的基础Api
QianfanChatModel model = QianfanChatModel.builder()
.apiKey("Your apiKey")
.secretKey("Your secretKey")
.modelName("modelName")
.build();
String answer = model.generate("你叫什么名字");
System.out.println(answer);
//2.定制化模型
QianfanChatModel model1 = QianfanChatModel.builder()
.apiKey("xrvMCg8jUn9XFjlweo5yCzZL")
.secretKey("2oDq7RMIakIVHdMfYmpHuoGa9HtD6YEH")
.temperature(50.00)
.maxRetries(2)
.topP(2.00)
.modelName("Yi-34B-Chat")
.endpoint("12")
.responseFormat("21")
.penaltyScore(2.00)
.logRequests(true)
.logResponses(true)
.build();
//1.单轮聊天ChatMessage
String answer = model.generate("你好,我的名字是小思");
String answer1 = model.generate("我的名字是什么呀");
System.out.println(answer);
System.out.println(answer1);
System