核心概念:链 (Chain)

LangChain4j 的核心思想是将复杂的任务拆解为一系列可组合的步骤(链接),形成一个“链”。这有助于模块化、复用和更清晰的逻辑。

基本使用步骤

  1. 添加依赖 在你的 Maven 或 Gradle 项目中引入 LangChain4j 的核心库以及你计划使用的 LLM 提供商的适配器库(如 OpenAI, HuggingFace, LocalAI 等)。例如,对于 OpenAI:

    <!-- Maven -->
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-open-ai</artifactId>
        <version>0.28.0</version> <!-- 请使用最新版本 -->
    </dependency>
    

  2. 配置 LLM 客户端 创建一个连接到你选择的 LLM 服务的客户端实例。这通常需要提供 API 密钥或其他认证信息。

    import dev.langchain4j.model.openai.OpenAiChatModel;
    
    // 使用 OpenAI (需要 OPENAI_API_KEY 环境变量)
    OpenAiChatModel model = OpenAiChatModel.builder()
            .modelName("gpt-3.5-turbo") // 指定模型
            .temperature(0.3) // 控制随机性
            .build();
    
  3. 创建并执行链 最简单的链是直接向模型发送消息并获取回复。

    String userMessage = "Java-LangChain4j 的基本使用是怎样的?";
    String response = model.generate(userMessage);
    System.out.println(response);
    

  4. 使用 Prompt Templates (提示模板) 为了更结构化地生成输入,可以使用提示模板。模板中可以用 {{variable}} 的形式定义占位符。

    import dev.langchain4j.model.openai.OpenAiChatModel;
    import dev.langchain4j.model.input.Prompt;
    import dev.langchain4j.model.input.structured.StructuredPrompt;
    import dev.langchain4j.model.input.template.Template;
    
    // 定义模板
    Template template = Template.from("请用 {{language}} 解释 {{framework}} 的基本使用。");
    
    // 填充模板变量
    Prompt prompt = template.render("language", "中文", "framework", "Java-LangChain4j");
    
    // 发送给模型
    String response = model.generate(prompt.text());
    System.out.println(response);
    

  5. 结构化输出 有时我们希望模型的输出是结构化的(如 JSON 对象)。可以结合提示模板和 @StructuredPrompt 注解来引导模型。

    import dev.langchain4j.model.output.Response;
    import dev.langchain4j.model.output.structured.Description;
    import dev.langchain4j.model.output.structured.StructuredOutput;
    
    @StructuredOutput
    public class FrameworkInfo {
        @Description("框架的名称")
        public String name;
        @Description("核心概念,用逗号分隔")
        public String coreConcepts;
        @Description("一个简单的使用示例代码片段")
        public String exampleCode;
    }
    
    // 在提示中要求结构化输出
    Template template = Template.from("请提供关于 {{framework}} 的基本信息,包括名称、核心概念和一个简单示例代码。\n{{format_instructions}}");
    // ... 填充模板,特别注意 format_instructions 需要描述 FrameworkInfo 的结构
    Prompt prompt = ...;
    
    // 获取结构化响应
    Response<FrameworkInfo> response = model.generate(prompt, FrameworkInfo.class);
    FrameworkInfo info = response.content();
    System.out.println("名称: " + info.name);
    System.out.println("核心概念: " + info.coreConcepts);
    System.out.println("示例:\n" + info.exampleCode);
    

常见应用场景

  • 问答系统:基于特定文档或知识库回答问题。
  • 摘要生成:总结长文本内容。
  • 文本生成:撰写邮件、故事、代码等。
  • 数据提取:从非结构化文本中提取结构化信息。
  • 翻译:文本翻译。
  • 聊天机器人:构建对话接口。

注意事项

  • API 成本与限制:注意 LLM API 的调用成本和速率限制。
  • 提示工程:提示 (Prompt) 的质量对输出结果影响巨大,需要精心设计。
  • 错误处理:网络错误、API 限制、模型错误等都需要妥善处理。
  • 内容安全:对模型生成的内容进行必要的安全检查和过滤。
  • 模型选择:不同的模型在能力、成本和速度上有差异,需根据需求选择。
  • 并发OpenAiChatModel 等客户端通常是线程安全的,可以安全地在多线程环境中使用。

以上介绍了 LangChain4j 最基础的使用方式。实际应用中,你会接触到更复杂的链结构(如 SequentialChainConditionalChain)、记忆管理、工具调用(让模型使用外部工具或函数)等高级功能。建议从官方文档和示例开始深入学习。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐