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, 函数调用, 域名枚举, 大模型后端, 大语言模型, 工具调用, 开源组件, 提示词格式化