文章目录
- 关于 LangChain4j
- 特性
- 2 levels of abstraction
- Library Structure
- Tutorials (User Guide)
- Integrations and Models
- 免责声明
- Highlights
- 定义由LLM提供支持的声明性 `AI Services`:
- 使用 LLM 分类
- 从非结构数据中提取结构化信息
- Getting started
- 兼容性
- 支持的 LLM 集成
关于 LangChain4j
LangChain4j的目标是 简化将AI/LLM功能集成到Java应用程序的过程。
- 官方文档:https://docs.langchain4j.dev
- github : https://github.com/langchain4j/langchain4j
- twitter : https://twitter.com/intent/follow?screen_name=langchain4j
教程资源
- langchain4j-examples : https://github.com/langchain4j/langchain4j-examples
- 学习材料:https://docs.langchain4j.dev/useful-materials/
- Tutorials : https://docs.langchain4j.dev/category/tutorials
- use cases : https://docs.langchain4j.dev/tutorials/#or-consider-some-of-the-use-cases
- Amazing 90-minute tutorial : https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/
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-ranking
- Reciprocal Rank Fusion
- 自定义 RAG 流的每一步
- 集成:
2 levels of abstraction
LangChain4j在两个抽象级别上运行:
- 低水平。在这个级别上,您可以最自由地访问所有底层组件,例如
ChatLanguageModel
,UserMessage
,AiMessage
,EmbeddingStore
,Embedding
, 等等。
这些是LLM驱动的应用程序的“基元”。
您可以完全控制如何组合它们,但需要编写更多的粘合代码。 - 高水平。在这个级别上,您可以使用高级API与LLM交互,如
AiServices
和Chain
s, 它对你隐藏了所有的复杂性和样板。
您仍然可以灵活地调整和微调行为,但这是以声明的方式完成的。
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
- langchain4j-examples
- Examples in plain Java
- Examples with Quarkus (uses quarkus-langchain4j dependency)
- Example with Spring Boot
Integrations and Models
LangChain4j提供与OpenAI、HuggingFace、谷歌、Azure等模型的现成集成。
它具有适用于所有常见文档类型的文档加载器,并与大量嵌入模型和嵌入存储集成,以促进检索增强生成和人工智能分类。
所有继承都列在 https://docs.langchain4j.dev/category/integrations。
免责声明
请注意,该库正在积极开发中,并且:
- 一些功能仍然缺失。我们正在努力尽快实施。
- API随时可能更改。在这一点上,我们优先考虑未来的良好设计,而不是现在的向后兼容性。我们希望你能理解。
- 我们需要您的意见!请告诉我们您需要什么功能以及您对当前实现的关注。
Highlights
定义由LLM提供支持的声明性 AI Services
:
interface Assistant {String chat(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 分类
enum Sentiment {POSITIVE, NEUTRAL, NEGATIVE
}interface SentimentAnalyzer {@UserMessage("Analyze sentiment of {{it}}")Sentiment analyzeSentimentOf(String text);@UserMessage("Does {{it}} have a positive sentiment?")boolean isPositive(String text);
}SentimentAnalyzer sentimentAnalyzer = AiServices.create(SentimentAnalyzer.class, model);Sentiment sentiment = sentimentAnalyzer.analyzeSentimentOf("It is good!"); // POSITIVEboolean positive = sentimentAnalyzer.isPositive("It is bad!"); // false
从非结构数据中提取结构化信息
class Person {private String firstName;private String lastName;private LocalDate birthDate;
}interface PersonExtractor {@UserMessage("Extract information about a person from {{text}}")Person extractPersonFrom(@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
兼容性
- Java: 8+
- Spring Boot: 2+
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 集成
Provider | Native Image | Sync Completion | Streaming Completion | Embedding | Image Generation | Scoring | Function Calling |
---|---|---|---|---|---|---|---|
OpenAI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
Azure OpenAI | ✅ | ✅ | ✅ | ✅ | ✅ | ||
Hugging Face | ✅ | ✅ | |||||
Amazon Bedrock | ✅ | ✅ | ✅ | ||||
Google Vertex AI Gemini | ✅ | ✅ | ✅ | ✅ | |||
Google Vertex AI | ✅ | ✅ | ✅ | ✅ | |||
Mistral AI | ✅ | ✅ | ✅ | ✅ | |||
DashScope | ✅ | ✅ | ✅ | ||||
LocalAI | ✅ | ✅ | ✅ | ✅ | |||
Ollama | ✅ | ✅ | ✅ | ||||
Cohere | ✅ | ||||||
Qianfan | ✅ | ✅ | ✅ | ✅ | |||
ChatGLM | ✅ | ||||||
Nomic | ✅ | ||||||
Anthropic | ✅ | ✅ | ✅ | ✅ | |||
Zhipu AI | ✅ | ✅ | ✅ | ✅ |
2024-04-23(二) 大雨