Hugging Face 聊天

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

重要提示:文本生成推理要求模型与其架构特定的优化兼容。虽然支持许多流行的LLM,但并非所有Hugging Face Hub上的模型都可以使用TGI部署。如果您需要部署其他类型的模型,请考虑使用标准的Hugging Face推理端点。

提示:有关支持的模型和架构的完整和最新列表,请参阅文本生成推理支持的模型文档

前提条件

您需要在Hugging Face上创建一个推理端点,并创建一个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)来引用自定义环境变量:

# 在application.yml中
spring:
  ai:
    huggingface:
      chat:
        api-key: ${HUGGINGFACE_API_KEY}
        url: ${HUGGINGFACE_ENDPOINT_URL}
# 在您的环境或.env文件中
export HUGGINGFACE_API_KEY=<your-huggingface-api-key>
export HUGGINGFACE_ENDPOINT_URL=<your-inference-endpoint-url>

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

// 从安全源或环境变量中获取API密钥和端点URL
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自动配置、starter模块的构件名称发生了重大变化。 请参阅https://docs.spring.io/spring-ai/reference/upgrade-notes.html[升级说明]了解更多信息。

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

提示:用您的Hugging Face值替换`api-key`和`url`。

这将创建一个`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`接口,并使用[low-level-api]连接到Hugging Face推理端点。

在项目的Maven `pom.xml`文件中添加`spring-ai-huggingface`依赖:

<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.getGeneration().getResult().getOutput().getContent());