Hugging Face Chat
Hugging Face Text Generation Inference (TGI) 是一种用于在云端部署大型语言模型 (LLMs) 的专门解决方案,通过 API 使其可被访问。TGI 通过连续批处理、令牌流式传输和高效内存管理等特性,为文本生成任务提供优化的性能。
:::重要
文本生成推理服务要求模型与其架构特定的优化兼容。虽然支持许多流行的LLM,但并非所有Hugging Face Hub上的模型都能使用TGI部署。如需部署其他类型的模型,请考虑改用标准的Hugging Face推理终端。
:::
如需查看完整且最新的支持模型和架构列表,请参阅 Text Generation Inference 支持模型文档。
前提条件
您需要在 Hugging Face 上创建一个推理终端并生成一个 API 令牌来访问该终端。更多详细信息请参阅此处。
Spring AI 项目定义了两个配置属性:
-
spring.ai.huggingface.chat.api-key: 设置为从 Hugging Face 获取的 API 令牌的值。 -
spring.ai.huggingface.chat.url: 设置为在 Hugging Face 配置模型时获取的推理端点 URL。
您可以在推理端点的用户界面 此处 找到推理端点 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");
添加存储库和物料清单
Spring AI构件发布在Maven Central和Spring Snapshot仓库中。请参考构件仓库章节,将这些仓库添加到您的构建系统中。
为了帮助进行依赖管理,Spring AI 提供了一个物料清单(BOM),以确保在整个项目中使用的 Spring AI 版本保持一致。请参考依赖管理部分,将 Spring AI BOM 添加到您的构建系统中。
Auto-configuration
自动配置 {#_auto_configuration}
Spring AI 自动配置和 starter 模块的构件名称发生了重大变化。更多信息请参阅升级说明。
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项目,并在你的pom(或gradle)依赖项中添加 spring-ai-starter-model-huggingface。
在 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-key 和 url 替换为您的 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 接口,并使用 [low-level-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());