
文章目录
关于 LangChain4j
LangChain4j的目标是 简化将AI/LLM功能集成到Java应用程序的过程。
教程资源
LangChain4j于2023年初在ChatGPT的火热中开始开发。
我们注意到大量Python和JavaScript LLM库和框架,缺乏Java对应物,我们不得不解决这个问题!
尽管“LangChain”是以我们的名义命名的,但该项目融合了LangChain、Haystack、LlamaIndex和更广泛的社区的想法和概念,并加入了我们自己的创新。
我们积极监控社区发展,旨在快速融入新技术和集成,确保您保持最新状态。
库正在积极开发中。虽然Python版本的LangChain的一些功能仍在开发中,但核心功能已经到位,允许您现在开始构建LLM驱动的应用程序!
为了更容易集成,LangChain4j还包括与Quarkus (extension) 和 Spring Boot (starters) 的集成。
统一 APIs
LLM提供(如OpenAI或Google Vertex AI)和 嵌入(矢量)存储(如Pinecone或Vespa)使用专有API。
LangChain4j提供了一个统一的API,以避免为每个API学习和实现特定的API。
要尝试不同的LLM或嵌入向量数据库,您可以轻松地在它们之间切换,而无需重写代码。
LangChain4j目前支持超过10个流行的LLM 和超过15个向量数据库。
把它想象成一个Hibernate,但用于LLM和嵌入存储。
丰富的 Toolbox
在过去的一年里,社区已经构建了许多LLM驱动的应用程序,确定了常见的模式、抽象和技术。
LangChain4j已经将这些代码细化为实用代码。我们的toolbox 包括从低级提示模板、内存管理和输出解析到高级模式(如Agent和RAG)的各种工具。
对于每个模式和抽象,我们都提供了一个接口以及基于已验证技术的多个现成实现。
无论您是在构建聊天机器人,还是开发具有从数据接收到检索的完整管道的RAG,LangChain4j都提供了多种选择。
很多 Examples
这些 examples 展示了如何开始创建各种LLM支持的应用程序,提供灵感并使您能够快速开始构建。
特性
与10多个托管和自托管语言模型(LLM)集成,用于聊天提示模板支持文本和图像作为输入(多模态)来自语言模型的响应流用于标记化和估计标记计数的工具常见Java类型(例如 List、LocalDate 等)和自定义POJO的 输出解析器与三种以上托管和自托管的图像生成模型集成与10多个托管和自托管嵌入模型集成与超过15个托管和自托管 向量数据库 集成与一个模型集成:OpenAI与一个评分(re-ranking)模型集成:Cohere(预计还会有更多)工具(函数调用)动态工具(执行动态生成的LLM代码)Lite 代理(OpenAI功能)AI 服务Chains(传统)持久化 和 内存聊天记忆算法的实现:消息窗口和 token 窗口文本分类
- RAG (Retrieval-Augmented-Generation):
- 集成:
从不同源 (file system, URL, GitHub, Azure Blob Storage, Amazon S3, etc.) 导入多种类型文档 (TXT, PDFs, DOC, PPT, XLS etc.)使用分割算法,将本当分成不同的小块。预处理文档和分块使用 Embedding 模型 Embedding 块Storing embeddings in embedding (vector) store
- 检索 (简单和高级):
查询转换(扩展、压缩)检索路由从向量数据库或任意自定义源检索Re-rankingReciprocal Rank Fusion自定义 RAG 流的每一步
2 levels of abstraction
LangChain4j在两个抽象级别上运行:
低水平。在这个级别上,您可以最自由地访问所有底层组件,例如 ChatLanguageModel, UserMessage, AiMessage, EmbeddingStore, Embedding, 等等。
这些是LLM驱动的应用程序的“基元”。
您可以完全控制如何组合它们,但需要编写更多的粘合代码。高水平。在这个级别上,您可以使用高级API与LLM交互,如 AiServices 和 Chains, 它对你隐藏了所有的复杂性和样板。
您仍然可以灵活地调整和微调行为,但这是以声明的方式完成的。

Library Structure
LangChain4j采用模块化设计,包括:
langchain4j-core 模块,定义了核心抽象 (比如 ChatLanguageModel 和 EmbeddingStore) 和他们的 APIs。主要的 langchain4j 模块, 包含诸如 ChatMemory, OutputParser 的工具, 以及高级功能,如 AiServices.一系列的langchain4j-{integration} 模块, 每个提供与各种LLM的集成,并将存储嵌入到LangChain4j中。
你可以独立的使用 langchain4j-{integration} 模块。
对于其他功能,只需导入主要的 langchain4j 依赖项即可。
Tutorials (User Guide)
发现鼓舞人心的use cases ,或者跟随我们在 Tutorials 下对LangChain4j功能的逐步介绍, 您将逐步了解LangChain4j的所有功能。所有步骤都通过完整的代码示例和代码解释进行了演示。
Code Examples
Integrations and Models
LangChain4j提供与OpenAI、HuggingFace、谷歌、Azure等模型的现成集成。
它具有适用于所有常见文档类型的文档加载器,并与大量嵌入模型和嵌入存储集成,以促进检索增强生成和人工智能分类。
所有继承都列在 https://docs.langchain4j.dev/category/integrations。
免责声明
请注意,该库正在积极开发中,并且:
一些功能仍然缺失。我们正在努力尽快实施。API随时可能更改。在这一点上,我们优先考虑未来的良好设计,而不是现在的向后兼容性。我们希望你能理解。我们需要您的意见!请告诉我们您需要什么功能以及您对当前实现的关注。
Highlights
定义由LLM提供支持的声明性 AI Services:
- interfaceAssistant{Stringchat(String userMessage);}Assistant assistant =AiServices.create(Assistant.class, model);String answer = assistant.chat("Hello");System.out.println(answer);// Hello! How can I assist you today?
复制代码 使用 LLM 分类
- enumSentiment{POSITIVE,NEUTRAL,NEGATIVE}interfaceSentimentAnalyzer{@UserMessage("Analyze sentiment of {{it}}")SentimentanalyzeSentimentOf(String text);@UserMessage("Does {{it}} have a positive sentiment?")booleanisPositive(String text);}SentimentAnalyzer sentimentAnalyzer =AiServices.create(SentimentAnalyzer.class, model);Sentiment sentiment = sentimentAnalyzer.analyzeSentimentOf("It is good!");// POSITIVEboolean positive = sentimentAnalyzer.isPositive("It is bad!");// false
复制代码 从非结构数据中提取结构化信息
- classPerson{privateString firstName;privateString lastName;privateLocalDate birthDate;}interfacePersonExtractor{@UserMessage("Extract information about a person from {{text}}")PersonextractPersonFrom(@V("text")String text);}PersonExtractor extractor =AiServices.create(PersonExtractor.class, model);String text ="In 1968, amidst the fading echoes of Independence Day, "+"a child named John arrived under the calm evening sky. "+"This newborn, bearing the surname Doe, marked the start of a new journey.";Person person = extractor.extractPersonFrom(text);// Person { firstName = "John", lastName = "Doe", birthDate = 1968-07-04 }
复制代码 你也可以提供 LLM 可以使用的工具,可以是任何,如从数据库提取信息,调动 APIs 等。
可见案例:https://github.com/langchain4j/langchain4j-examples/blob/main/other-examples/src/main/java/ServiceWithToolsExample.java
Getting started
兼容性
1、在你的工程 添加 LangChain4j OpenAI 依赖
Maven:- <dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId><version>0.30.0</version></dependency>
复制代码 Gradle:- implementation 'dev.langchain4j:langchain4j-open-ai:0.30.0'
复制代码 2、导入 OpenAI API key:- String apiKey =System.getenv("OPENAI_API_KEY");
复制代码 你也可以使用我们提供的免费 API key demo 来测试 OpenAI。
How to get an API key?
3、Create an instance of a model and start interacting:- OpenAiChatModel model =OpenAiChatModel.withApiKey(apiKey);String answer = model.generate("Hello world!");System.out.println(answer);// Hello! How can I assist you today?
复制代码 支持的 LLM 集成
2024-04-23(二) 大雨 |