jenspapenhagen/spring-ai-chatml
GitHub: jenspapenhagen/spring-ai-chatml
为 Spring AI 提供 ChatML 格式的提示转换层,使其能够与 Ollama 和 LFM 等本地模型无缝对接并支持工具调用。
Stars: 0 | Forks: 0
# Spring AI ChatML
一个为 [Spring AI](https://spring.io/projects/spring-ai) 实现的类 ChatML 提示格式化工具,专为 [Ollama](https://ollama.com) 和其他 LLM 后端设计。
## 概述
本模块为 Spring AI 聊天模型提供了一个自定义的类 ChatML 提示格式化实现。它将聊天消息(SystemMessage、UserMessage、AssistantMessage、ToolResponseMessage)转换为通过 Ollama 与 LFM(Language Model Framework)模型兼容的格式。
有关 ChatML 格式的更多详细信息,请参阅 [Liquid AI 文档](https://docs.liquid.ai/lfm/key-concepts/chat-template)。
## 功能
- **类 ChatML 格式**:使用 `<|startoftext|>`、`<|im_start|>`、`<|im_end|>` 特殊 token
- **多角色支持**:支持 System、User、Assistant 和 Tool 消息
- **工具调用**:在系统提示中包含工具定义,并从响应中解析工具调用
- **可配置的停止序列**:在 `<|im_end|>` 和 `<|tool_call_end|>` 处停止
## 关键实现细节
### ChatML 格式
格式化工具使用以下模式:
```
<|startoftext|><|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
Hello!<|im_end|>
<|im_start|>assistant
Hi there!<|im_end|>
```
### 消息类型
- **SystemMessage**:格式化为 `<|im_start|>system\n{content}<|im_end|>`
- **UserMessage**:格式化为 `<|im_start|>user\n{content}<|im_end|>`
- **AssistantMessage**:格式化为 `<|im_start|>assistant\n{content}<|im_end|>`
- **ToolResponseMessage**:格式化为 `<|im_start|>tool\n{content}<|im_end|>`
### 工具调用
当提供工具定义时,它们将以 JSON 格式添加到系统提示中:
```
Output function calls as JSON.
List of tools: [{"name":"toolName","description":"...","parameters":{...}}]
```
响应中的工具调用使用以下模式进行解析:
```
<|tool_call_start|>{tool_name}(arg1=value1, arg2=value2)<|tool_call_end|>
```
## 用法
### 基本用法
```
LfmChatmlPromptFormatter formatter = new LfmChatmlPromptFormatter();
List messages = List.of(
new SystemMessage("You are a helpful assistant."),
new UserMessage("What is the weather?")
);
String formattedPrompt = formatter.format(messages);
```
### 带工具定义的用法
```
LfmChatmlPromptFormatter formatter = new LfmChatmlPromptFormatter();
formatter.setToolDefinitions(List.of(toolDefinition1, toolDefinition2));
String formattedPrompt = formatter.format(messages);
```
## 与 LfmChatModel 集成
此格式化工具旨在与 `LfmChatModel`(一个自定义的 ChatModel 实现)配合使用:
```
LfmChatModel chatModel = new LfmChatModel(
baseUrl,
model,
temperature,
numCtx,
numPredict,
topP,
topK,
toolCallingManager
);
```
## 配置
格式化工具使用以下常量:
- `<|startoftext|>` - 文档起始 token
- `<|im_start|>` - 消息起始 token
- `<|im_end|>` - 消息结束 token
- `<|tool_call_start|>` - 工具调用起始 token
- `<|tool_call_end|>` - 工具调用结束 token
## 依赖项
- [Spring AI](https://spring.io/projects/spring-ai) (`org.springframework.ai:spring-ai-core`)
- 用于日志记录的 SLF4J
- Java 25
## 构建
```
./mvnw compile
```
## 许可证
MIT
标签:AI开发框架, AI编程, AI风险缓解, ChatML, DLL 劫持, JSON Schema, JS文件枚举, LFM模型, Liquid AI, LLM, LLM评估, NLP, Ollama, Spring AI, Unmanaged PE, 函数调用, 域名枚举, 大模型后端, 大语言模型, 工具调用, 开源组件, 提示词格式化