当前位置:   article > 正文

LangChain4j

langchain4j

在这里插入图片描述


关于 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类型(例如 ListLocalDate 等)和自定义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交互,如 AiServicesChains, 它对你隐藏了所有的复杂性和样板。
    您仍然可以灵活地调整和微调行为,但这是以声明的方式完成的。

在这里插入图片描述


Library Structure

LangChain4j采用模块化设计,包括:

  • langchain4j-core 模块,定义了核心抽象 (比如 ChatLanguageModelEmbeddingStore) 和他们的 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

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?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

使用 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!"); // POSITIVE

boolean positive = sentimentAnalyzer.isPositive("It is bad!"); // false
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

从非结构数据中提取结构化信息

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 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

你也可以提供 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>
  • 1
  • 2
  • 3
  • 4
  • 5

Gradle:

implementation 'dev.langchain4j:langchain4j-open-ai:0.30.0'
  • 1

2、导入 OpenAI API key:

String apiKey = System.getenv("OPENAI_API_KEY");
  • 1

你也可以使用我们提供的免费 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?
  • 1
  • 2
  • 3
  • 4
  • 5

支持的 LLM 集成

ProviderNative ImageSync CompletionStreaming CompletionEmbeddingImage GenerationScoringFunction 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(二) 大雨

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/659995
推荐阅读
相关标签
  

闽ICP备14008679号