探索大模型世界_什么是大模型

img

大模型(Large Model),通常是指参数量非常庞大的深度学习模型,特别是在自然语言处理(NLP)、计算机视觉(CV)等领域中,模型参数数量达到数十亿甚至数千亿的规模。

大模型的特点

图片

特点

  1. 庞大的参数量
  2. 海量的数据训练
  3. 强大的计算能力

图片

大模型的分类

图片

  • 语言大模型:专注于解析和理解文本
  • 视觉大模型:擅长图像识别和分析
  • 多模态大模型:则能够综合处理包括文本、图像和音频在内的多种数据类型

按照应用领域的不同,大模型主要可以分为 L0、L1、L2 三个层级

image-20241031155404152

L0(高中生):通用模型,知识面广,但不够深入,能做基础工作。

L1(大学生):行业模型,针对某个领域有深入理解,能解决更复杂的问题,但还有限制。

L2(研究生):垂直模型,专注于一个领域,深度专业,能够处理高难度、细节化的问题。

大语言模型LLM的应用场景

  • 智能客服与聊天机器人

  • 内容创作与生成

  • 翻译与多语言处理

  • 文档摘要与信息提取

  • 搜索与推荐系统

  • 情感分析与情感计算

  • 代码自动化与开发辅助

探索大模型世界_Java AI 开发工具

图片

为了弥补Java开发者在AI领域的工具短板,市面上已经出现了几款针对Java的AI开发工具。

LangChain4J

  • 提供标准化API,支持超过15个主流大模型提供商和嵌入存储,
  • 提供工具箱,从低级提示词模板到高级AI服务,适合构建聊天机器人和检索增强生成(RAG)管道。
  • 社区支持活跃,能够快速整合最新的AI技术,便于Java开发者将AI功能集成到现有项目中。

Spring Al

  • 深度集成到Spring框架中,Java开发者可以轻松将AI功能嵌入到现有Spring项目中。
  • 尽管Spring Al仍处于发展阶段,尚未发布正式版本,但其凭借Spring生态系统,具备了极强的扩展性和集成能力。

Spring AI Alibaba

  • 提供多种大模型服务对接能力,包括主流开源与阿里云通义大模型服务(百炼)等
  • 支持的模型类型包括聊天、文生图、音频转录、文生语音等

image-20241025112931734

对比

LangChain4JSpring AISpring AI Alibaba
功能成熟度功能全面,适合大规模AI应用发展中,功能有待完善功能全面,适合大规模AI应用
集成能力支持多种LLM和嵌入存储,适合多样化场景集成到Spring项目中,扩展性强集成到Spring项目中,扩展性强
社区支持社区活跃,反馈迅速项目正在成长,API变更较大社区活跃
兼容性Java8 +Java17 + SpringBoot3JDK 要求 17 及以上版本

ava AI 开发工具_介绍LangChain4j

image-20241017103024417

介绍

LangChain4j 是一个专为Java开发者设计的开源库,旨在简化将大型语言模型(LLM)集成到Java应用程序中的过程。它于2023年初开发,灵感来源于Python和JavaScript的LLM库,特别是为了填补Java领域在这一方面的空白。

官网 https://docs.langchain4j.dev/intro

LangChain4j 的核心功能

  1. 统一API:LangChain4j 提供统一 API,避免了学习和实现每个 API 的特定 API。
  2. 全面的工具箱:该框架包含多种工具,从低级的提示模板、聊天记忆管理到高级模式(如AI服务和RAG)。
  3. 大量的示例:LangChain4j提供大量的使用示例,与 Quarkus 和 Spring Boot 的集成等。

能干什么

  • 集成了 15+个 语言大模型 15+ LLM providers
  • 集成了 15+个 向量数据库 15+ embedding (vector) stores
  • 集成了 10+个 嵌入模型 10+ embedding models
  • 集成了 4个 图片大模型 4 cloud and local image generation models
  • 集成了 2个 评分重排名模型 2 scoring (re-ranking) models
  • 集成 1个 OpenAI 审核模型(检测prompt与响应是否有有害内容)
  • 支持文本和图像作为输入(多模态)
  • 更高层次的抽象,针对复杂的场景更方便集成。 AI Services
  • 支持提示词模板、聊天记忆、聊天持久化、聊天记忆淘汰算法(消息窗口和令牌窗口) chat memory
  • 支持同步/流式响应,支持常见 Java 类型和自定义 POJO 的输出解析器
  • 支持工具(函数调用)Tools (function calling), 动态工具(执行动态生成LLM的代码)
  • 支持检索增强生成技术 RAG (Retrieval-Augmented-Generation)

image-20241014110331953

LangChain4j支持的LLMs

image-20241014144832827

Java AI 开发工具_Langchain4j入门示例

介绍

如何通过低级 API 接入阿里百炼平台的通义模型 qwen-max。通过使用 LangChain4j 框架,开发者可以轻松调用该模型并集成到 Java 应用中。

image-20241014112245046

阿里云百练:https://bailian.console.aliyun.com/?switchAgent=10032291&productCode=p_efm&switchUserType=3#/model-market

Maven 依赖配置

首先,需要在项目中引入以下 Maven 依赖,用于集成 LangChain4j 与 DashScope:

<dependencies>
    <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>
  </dependencies>


  <!-- 加载bom 后,所有langchain4j引用不需要加版本号 -->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-bom</artifactId>
        <version>0.35.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

YML 配置文件

在项目的 application.yml 中设置所使用的通义模型 qwen-max,以下是示例配置:

langchain4j:
  open-ai:
   chat-model:
   # 课程测试 KEY,需要更换为实际可用 KEY  
    api-key: sk-xx
    model-name: qwen-xxx
   # 百炼兼容OpenAI接口规范,base_url为https://dashscope.aliyuncs.com/compatible-mode/v1
    base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
    logging://日志功能
      requests: true
      responses: true
logging:
  level:
    dev.langchain4j: DEBUG //日志的级别


代码实现

使用以下代码,快速启动一个基于 LangChain4j 和 Spring Boot 的 Java 应用,集成并调用阿里百炼平台的通义大语言模型。

/**
 * 用于处理与通义模型的交互请求测试。
 */
@RestController
public class ChatController {


  @Autowired
  private ChatLanguageModel chatLanguageModel;


  /**
   * 聊天
   * @param message
   * @return
   */
  @GetMapping("/ai/generate")
  public String testChat(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message){
    String generate = chatLanguageModel.generate(message);
    return generate;
   }
  
}

Java AI 开发工具_LangChain4j 高级API

创建子项目模块

创建子模块langchain4j_chatapi

image-20241014145111189

Maven 依赖配置

pom.xml中添加以下依赖:

 <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j</artifactId>
    </dependency>
    <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j-open-ai</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

配置模型元信息

新建LLMConfig文件,配置 ChatLanguageModel 提供模型元信息。

@Bean
public ChatLanguageModel chatLanguageModel() {
  return OpenAiChatModel.builder()
       .apiKey(System.getenv("DASHSCOPE_KEY"))
       .modelName("qwen-turbo")
       .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
       .build();
}

编写控制器

@RestController
public class ChatController {


  @Autowired
  ChatLanguageModel chatLanguageModel;


  @GetMapping("/ai/generate")
  public String testChat(String msg){
    String generate = chatLanguageModel.generate(msg);
    System.out.println(generate);
    return generate;
   }
}

Java AI 开发工具__LangChain4j 高级LLM API

为了简化开发,LangChain4j提供了高层API,使开发者能够更专注于业务逻辑,而无需关注底层实现细节。高层API中,AiService 用于定义一个集成大模型的服务。

定义AI Service

/**
 *  AI 助手接口
 */
public interface ChatAssistant {


  /**
   * 聊天
   * @param message
   * @return {@link String}
   */
  String chat(String message);


}

注入模型

/**
 * 大模型配置
 */
@Configuration(proxyBeanMethods = false)
public class LLMConfig
{


  @Bean
  public ChatLanguageModel chatLanguageModel() {
    return OpenAiChatModel.builder()
//         .apiKey(System.getenv("sk-46aeef92a70d4a86bc04e6c9d04d9db1"))
         .apiKey("sk-46aeef92a70d4a86bc04e6c9d04d9db1")
         .modelName("qwen-plus")
         .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
         .build();
   }




  @Bean
  public ChatAssistant chatAssistant() {
    return AiServices.builder(ChatAssistant.class)
         .chatLanguageModel(chatLanguageModel())
         .build();
   }
  
}

测试功能

@RestController
public class ChatController {
  
  @Autowired
  private ChatAssistant chatAssistant;




  /**
   * 测试高级LLM API
   * @param msg
   * @return
   */
  @GetMapping("/ai/chatassistant")
  public String testChat2(String msg){
    String response = chatAssistant.chat(msg);
    return response;
   }
}


Java AI 开发工具_LangChain4j日志配置

日志配置 (Logging)

LangChain4j 使用 SLF4J 作为日志接口,支持集成各种日志后端,如 Logback 或 Log4j。

Spring Boot 环境

在 Spring Boot 集成时,可以通过 application.yml 文件配置日志级别:

langchain4j.open-ai.chat-model.log-requests = true
langchain4j.open-ai.chat-model.log-responses = true
logging.level.dev.langchain4j = DEBUG
logging.level.dev.ai4j.openai4j = DEBUG

监控

LangChain4j 提供了一些语言模型(如 ChatLanguageModel 和 StreamingChatLanguageModel),支持通过 ChatModelListener 监听以下事件:

  • 请求到达 LLM
  • LLM 返回的响应
  • 错误处理

重试机制 (Retry Configuration)

LangChain4j 支持重试配置,可用于处理失败的请求。可以通过 maxRetries 来配置重试逻辑,指定重试次数和延迟等参数:

ChatLanguageModel model = OpenAiChatModel.builder()
   .maxRetries(5) // 设置重试策略
   .build();

超时配置 (Timeout Configuration)

对于超时配置,可以通过 timeout 设置请求的超时时间:

ChatLanguageModel model = OpenAiChatModel.builder()
   .timeout(Duration.ofSeconds(10)) // 设置10秒超时
   .build();

Java AI 开发工具_流式输出

image-20241018162233882

介绍

LLM 每次生成一个标记,因此许多 LLM 提供商都提供逐个标记流式传输响应的方法,而不是等待生成整个文本。这显著改善了用户体验,因为用户无需等待未知的时间,几乎可以立即开始阅读响应。

流式响应处理

StreamingResponseHandler 接口流式响应的关键接口是 StreamingResponseHandler。它允许开发者定义在响应生成过程中的各个事件的处理逻辑。

<dependencies>
    <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j</artifactId>
    </dependency>
    <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j-open-ai</artifactId>
    </dependency>


    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>


    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>


    <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j-reactor</artifactId>
      <version>0.35.0</version>
    </dependency>
  </dependencies>

Java AI 开发工具_视觉理解

创建子模块

langchain-4j_image

image-20241014164556048

Maven依赖

<dependencies>
    <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j</artifactId>
    </dependency>
    <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j-open-ai</artifactId>
    </dependency>


    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>


    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>


  </dependencies>

更多推荐