chat - 聊天模型的接口及字典
solon-ai 旨在提供一套通用的接口(通过适配)。可访问各种不同的大模型接口。
1、聊天模型(ChatModel)相关的接口
接口 | 描述 | |
---|---|---|
ChatModel | 聊天模型通用客户端(通过 ChatConfig 构建) | |
ChatConfig | 聊天模型配置 | |
ChatDialect | 聊天方言(用于适配不同的大模型接口规范) | |
ChatRequest | 聊天请求 | |
ChatOptions | 聊天请求选项(单次请求时的选项) | |
ChatMessage | 聊天消息(分为:用户、系统、工具、助理四种消息) | |
ChatResponse | 聊天响应 | |
ChatFunction | 聊天本地函数 | |
ChatFunctionCall | 聊天本地函数调用(由AI发起) | |
ChatSession | 聊天会话(方便聊天历史记录管理) |
2、模型配置(ChatConfig)与请求选项(ChatOptions)
聊天模型配置
属性 | 要求 | 描述 |
---|---|---|
apiUrl:String | 必须 | 大语言模型接口地址 |
apiKey:String | 接口令牌 | |
provider:String | 服务提供者(如,ollama、gitee) | |
model:String | 必须 | 大语言模型 |
headers:Map<String, String> | 头信息(其它配置,都以头信息形式添加) | |
globalFunctions:Map | 全局函数(每次请求,都会附上) | |
timeout:Duration | 请求超时(默认:60s) |
关于 model 配置:
- 如果是 ollama ,运行什么模型即填什么(如:
ollama run deepseek-r1:7b
,则填:deepseek-r1:7b
) - 如果是其它服务平台,请按平台的接口说明填写
聊天请求选项(不同模型,支持情况不同)
方法 | 描述 | |
---|---|---|
functions():ChatFunction[] | 获取所有函数(内部构建请求时用) | |
function(name):ChatFunction | 获取函数 | |
functionAdd(ChatFunction):self | 添加函数 | |
options():Map<String, Object> | 获取所有选项(内部构建请求时用) | |
option(key):Object | 获取选项 | |
optionAdd(key,val):self | 添加选项 | |
max_tokens(val):self | 常用选项:最大提示语令牌数限制 | |
max_completion_tokens(val):self | 常用选项:最大完成令牌数限制 | |
temperature(val):self | 常用选项:temperature 采样 | |
top_p(val):self | 常用选项:top_p 采样 | |
top_k(val):self | 常用选项:top_k 采样 | |
frequency_penalty(val):self | 常用选项:频率惩罚 | |
presence_penalty(val):self | 常用选项:存在惩罚 |
示例:
public void test(ChatConfig config) {
ChatModel chatModel = ChatModel.of(config).build(); //使用聊天配置
chatModel.prompt("hello")
.options(o->o.max_tokens(500)) //使用聊天选项
.call();
}
3、四种聊天消息(ChatMessage)
消息 | 描述 |
---|---|
AssistantMessage | 助理消息(由大模型生成的消息) |
SystemMessage | 系统消息(为AI定义角度的初始化消息) |
ToolMessage | 工具消息(本地函数生成的消息) |
UserMessage | 用户消息(用户输入的消息) |
4、主要接口字典
- ChatModel
public interface ChatModel {
/**
* 提示语
*/
ChatRequest prompt(List<ChatMessage> messages);
/**
* 提示语
*/
default ChatRequest prompt(ChatMessage... messages) {
return prompt(new ArrayList<>(Arrays.asList(messages)));
}
/**
* 提示语
*/
default ChatRequest prompt(String content) {
return prompt(ChatMessage.ofUser(content));
}
/// /////////////////////////////////
/**
* 构建
*/
static ChatModelBuilder of(ChatConfig config) {
return new ChatModelBuilder(config);
}
/**
* 开始构建
*/
static ChatModelBuilder of(String apiUrl) {
return new ChatModelBuilder(apiUrl);
}
}
- ChatRequest
public interface ChatRequest {
/**
* 选项设置
*/
ChatRequest options(ChatOptions options);
/**
* 选项配置
*/
ChatRequest options(Consumer<ChatOptions> optionsBuilder);
/**
* 调用
*/
ChatResponse call() throws IOException;
/**
* 流响应
*/
Publisher<ChatResponse> stream();
}
- ChatResponse
public interface ChatResponse {
/**
* 获取模型
*/
String getModel();
/**
* 获取错误
*/
@Nullable
ChatException getError();
/**
* 获取所有选择
*/
List<ChatChoice> getChoices();
/**
* 是否有消息
*/
boolean hasMessage();
/**
* 获取消息
*/
@Nullable
AssistantMessage getMessage();
/**
* 获取使用情况(完成时,才会有使用情况)
*/
@Nullable
ChatUsage getUsage();
/**
* 是否完成
*/
boolean isFinished();
}
- ChatDialect(可以自己扩展适配,增加不同方言支持)
public interface ChatDialect extends AiModelDialect {
/**
* 匹配检测
*
* @param config 聊天配置
*/
boolean matched(ChatConfig config);
/**
* 构建请求数据
*
* @param config 聊天配置
* @param options 聊天选项
*/
String buildRequestJson(ChatConfig config, ChatOptions options, List<ChatMessage> messages, boolean stream);
/**
* 分析响应数据
*
* @param config 聊天配置
*/
boolean parseResponseJson(ChatConfig config, boolean isStream, ChatResponseDefault resp, String respJson);
}