Hugging Face 聊天

Hugging Face Text Generation Inference (TGI) 是一种专门用于在云端服务大型语言模型 (LLM) 的部署解决方案,通过 API 使其可访问。TGI 通过连续批处理、令牌流和高效内存管理等功能,为文本生成任务提供了优化的性能。

Text Generation Inference 要求模型与其架构特定的优化兼容。虽然许多流行的 LLM 都受支持,但并非 Hugging Face Hub 上的所有模型都可以使用 TGI 进行部署。如果您需要部署其他类型的模型,请考虑使用标准的 Hugging Face Inference Endpoints。
有关支持模型和架构的完整和最新列表,请参阅 Text Generation Inference 支持模型文档

先决条件

您需要在 Hugging Face 上创建一个 Inference Endpoint,并创建一个 API 令牌以访问该端点。更多详细信息请参阅 此处

Spring AI 项目定义了两个配置属性

  1. spring.ai.huggingface.chat.api-key: 将此设置为从 Hugging Face 获取的 API 令牌的值。

  2. spring.ai.huggingface.chat.url: 将此设置为在 Hugging Face 中配置模型时获得的推理端点 URL。

您可以在推理端点 UI 此处 找到您的推理端点 URL。

您可以在 application.properties 文件中设置这些配置属性

spring.ai.huggingface.chat.api-key=<your-huggingface-api-key>
spring.ai.huggingface.chat.url=<your-inference-endpoint-url>

为了在处理 API 密钥等敏感信息时增强安全性,您可以使用 Spring 表达式语言 (SpEL) 来引用自定义环境变量

# In application.yml
spring:
  ai:
    huggingface:
      chat:
        api-key: ${HUGGINGFACE_API_KEY}
        url: ${HUGGINGFACE_ENDPOINT_URL}
# In your environment or .env file
export HUGGINGFACE_API_KEY=<your-huggingface-api-key>
export HUGGINGFACE_ENDPOINT_URL=<your-inference-endpoint-url>

您还可以在应用程序代码中以编程方式设置这些配置

// Retrieve API key and endpoint URL from secure sources or environment variables
String apiKey = System.getenv("HUGGINGFACE_API_KEY");
String endpointUrl = System.getenv("HUGGINGFACE_ENDPOINT_URL");

添加存储库和 BOM

Spring AI 工件发布在 Maven Central 和 Spring Snapshot 存储库中。请参阅 工件存储库 部分,将这些存储库添加到您的构建系统。

为了帮助管理依赖项,Spring AI 提供了一个 BOM(物料清单),以确保在整个项目中使用的 Spring AI 版本一致。请参阅 依赖项管理 部分,将 Spring AI BOM 添加到您的构建系统。

自动配置

Spring AI 自动配置、启动模块的工件名称发生了重大变化。请参阅 升级说明 以获取更多信息。

Spring AI 为 Hugging Face 聊天客户端提供了 Spring Boot 自动配置。要启用它,请将以下依赖项添加到您的项目的 Maven pom.xml 文件中

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-huggingface</artifactId>
</dependency>

或添加到您的 Gradle build.gradle 构建文件中。

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-model-huggingface'
}
请参阅 依赖项管理 部分,将 Spring AI BOM 添加到您的构建文件中。

聊天属性

聊天自动配置的启用和禁用现在通过以spring.ai.model.chat为前缀的顶级属性进行配置。

要启用,请设置 spring.ai.model.chat=huggingface(默认已启用)

要禁用,请设置 spring.ai.model.chat=none(或任何不匹配 huggingface 的值)

此更改是为了允许配置多个模型。

前缀 spring.ai.huggingface 是属性前缀,用于配置 Hugging Face 的聊天模型实现。

财产

描述

默认值

spring.ai.huggingface.chat.api-key

用于与推理端点进行身份验证的 API 密钥。

-

spring.ai.huggingface.chat.url

要连接的推理端点的 URL

-

spring.ai.huggingface.chat.enabled(已移除且不再有效)

启用 Hugging Face 聊天模型。

true

spring.ai.model.chat

启用 Hugging Face 聊天模型。

huggingface

示例控制器(自动配置)

创建一个新的 Spring Boot 项目,并将 spring-ai-starter-model-huggingface 添加到您的 pom(或 gradle)依赖项中。

src/main/resources 目录下添加一个 application.properties 文件,以启用和配置 Hugging Face 聊天模型

spring.ai.huggingface.chat.api-key=YOUR_API_KEY
spring.ai.huggingface.chat.url=YOUR_INFERENCE_ENDPOINT_URL
api-keyurl 替换为您的 Hugging Face 值。

这将创建一个 HuggingfaceChatModel 实现,您可以将其注入到您的类中。以下是一个简单的 @Controller 类的示例,它使用聊天模型进行文本生成。

@RestController
public class ChatController {

    private final HuggingfaceChatModel chatModel;

    @Autowired
    public ChatController(HuggingfaceChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", this.chatModel.call(message));
    }
}

手动配置

HuggingfaceChatModel 实现了 ChatModel 接口,并使用 [低级 API] 连接到 Hugging Face 推理端点。

spring-ai-huggingface 依赖项添加到您的项目的 Maven pom.xml 文件中

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-huggingface</artifactId>
</dependency>

或添加到您的 Gradle build.gradle 构建文件中。

dependencies {
    implementation 'org.springframework.ai:spring-ai-huggingface'
}
请参阅 依赖项管理 部分,将 Spring AI BOM 添加到您的构建文件中。

接下来,创建一个 HuggingfaceChatModel 并将其用于文本生成

HuggingfaceChatModel chatModel = new HuggingfaceChatModel(apiKey, url);

ChatResponse response = this.chatModel.call(
    new Prompt("Generate the names of 5 famous pirates."));

System.out.println(response.getResult().getOutput().getText());
© . This site is unofficial and not affiliated with VMware.