Solon AI 开发学习 3 - chat - 模型配置与请求选项
1、聊天模型配置(ChatConfig) ChatConfig,聊天模型配置 属性 要求 描述 apiUrl:String 必须 模型服务接口地址(是完整地址) apiKey:String 接口令牌 provider:String 服务提供者(如ollama、dashscope、openai),默认为 openai model:String 必须 模型名字 headers:Map<String, String> 头信息(其它配置,都以头信息形式添加) timeout:Duration 请求超时(默认:60s) proxy:ProxyDesc 网络代理 defaultTools:Map 默认工具(每次请求,都会附上) defaultToolsContext:Map 默认工具上下文(每次请求,都会附上) defaultInterceptors:List 默认拦截器(每次请求,都会附上) defaultOptions:Map 默认选项(每次请求,都会附上) 关于 model 配置: 如果是 ollama ,运行什么模型即填什么(如:ollama run deepseek-r1:7b,则填:deepseek-r1:7b) 如果是其它服务平台,请按平台的接口说明填写 更多可参考:《模型实例的构建和简单调用》 示例: //用 ChatConfig 构建聊天模型(ChatConfig 一般用于接收配置注入) public void case1(@Inject("${xxx.yyy}") ChatConfig config) { ChatModel chatModel = ChatModel.of(config).build(); } //直接构建聊天模型(ChatModel.Builder 内置 ChatConfig) public void case2() { ChatModel chatModel = ChatModel.of(apiUrl).apiKey(apiKey).model(model).build(); } 2、聊天模型请求选项(ChatOptions) ChatOptions,聊天请求选项(不同模型,支持情况不同) 方法 描述 toolsContext():Map 获取工具上下文(附加参数)。v3.4.0 后支持 toolsContext(Map):self 设置工具上下文(附加参数)。v3.4.0 后支持 tools():FunctionTool[] 获取所有函数工具(内部构建请求时用) tool(name):FunctionTool 获取函数工具 toolsAdd(FunctionTool):self 添加函数工具 toolsAdd(Iterable<FunctionTool>):self 添加函数工具 toolsAdd(ToolProvider):self 添加函数工具 toolsAdd(Object):self 添加函数工具(@ToolMappingobject) toolsAdd(String, Consumer<FunctionToolDesc>):self 添加函数工具(构建模式) interceptors():ChatInterceptor[] 获取所有聊天拦截器(内部构建请求时用) interceptorAdd(ChatInterceptor):self 添加聊天拦截器 interceptorAdd(int, ChatInterceptor):self 添加聊天拦截器 options():Map<String, Object> 获取所有选项(内部构建请求时用) option(key):Object 获取选项 optionAdd(key,val):self 添加选项(常用选项之外的选项) tool_choice(choiceOrName):self 常用选项:工具选择(可选:none,auto,required,或 tool-name) 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 常用选项:存在惩罚 response_format(map):self 常用选项:响应格式 user(user):self 常用选项:用户 示例: public void case1(ChatConfig config) { ChatModel chatModel = ChatModel.of(config).build(); //使用聊天配置 chatModel.prompt("hello") .options(o->o.max_tokens(500)) //使用聊天选项 .call(); } public void case2(ChatConfig config, String user) { ChatModel chatModel = ChatModel.of(config).build(); //使用聊天配置 chatModel.prompt("hello") .options(o->o.toolsAdd(new WeatherTool()).toolsContext(Utils.asMap("user", user))) //使用聊天选项 .call(); } //user 参数不加 @Param(即不要求 llm 输出),由 toolsContext 传入(扩展参数)! public class WeatherTool { @ToolMapping(description = "获取指定城市的天气情况") public String get_weather(@Param(description = "根据用户提到的地点推测城市") String location, String user) { return "晴,24度"; //可使用 “数据库” 或 “网络” 接口根据 location 查询合适数据; } } 3、关于 response_format (模型的响应格式) 每个模型可能不同,一般:默认为 md 格式。其它格式参考(具体要看模型的说明): chatModel.prompt("hello") .options(o->o.response_format(Utils.asMap("type", "json_object"))) //使用聊天选项 .call(); chatModel.prompt("hello") .options(o->o.response_format(Utils.asMap("type", "json_schema", "json_schema", Utils.asMap("type","object","properties",Utils.asMap()), "strict", true))) //使用聊天选项 .call();