Solon v3.2.0

chat - 聊天模型的接口及字典

</> markdown

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);
}