目录1.Spring AI中模型选择的优先级机制2. 模型参数options决定了什么2.1 temperature温度控制生成文本的随机性或创造性程度2.2. topP核心采样从概率最高的前 K 个候选词中随机选择2.3 topK采样从概率最高的前 K 个候选词中随机选择2.4. maxTokens最大令牌数限制模型生成的最大令牌token数量2.5 presencePenalty存在惩罚降低重复使用同一主题的可能性2.6 应用场景3. advisors参数3.1 QuestionAnswerAdvisor问答顾问3.2 MessageChatMemoryAdvisor聊天记忆顾问3.3 PromptTemplateAdvisor提示模板顾问3.4 LoggingAdvisor日志顾问1.Spring AI中模型选择的优先级机制模型选择的优先级顺序在 Spring AI 框架中模型选择遵循以下优先级顺序从高到低代码中显式指定的模型在调用时通过.options()方法指定ChatClient Bean 定义中的默认模型通过.defaultOptions()设置application.yml 中的配置如spring.ai.openai.chat.options.model框架内置的默认值如果以上都未指定则使用框架的默认值第一种情况代码中指定了模型String result chatClient.prompt() .user(你好请介绍一下自己) .options(ChatOptions.builder().model(deepseek-v3-friday).build()) .call() .content();第二种情况ChatClient Bean 定义中设置默认模型Bean public ChatClient chatClient(ChatModel chatModel) { return ChatClient.builder(chatModel) .defaultOptions(ChatOptions.builder().model(deepseek-r1-friday).build()) .build(); }2. 模型参数options决定了什么大模型一站式平台可以设置的参数如下代码中模型可设置的参数有2.1 temperature温度控制生成文本的随机性或创造性程度取值范围0.0 - 2.0通常不超过 1.0作用机制温度越低模型输出越确定、越可预测温度越高模型输出越多样、越创造性举例大型语言模型如 GPT 系列在预测下一个词时实际上是在计算一个概率分布这个分布覆盖了词汇表中的每一个词。AI 模型必须完成句子“一只猫正在____”。下一个字具有以下标记概率玩0.5 睡0.25 吃0.15 驾0.05 飞0.05低温例如0.2AI模型变得更加专注和确定性选择概率最高的标记例如“玩”。中温例如1.0AI模型在创造力和专注度之间保持平衡根据概率选择标记没有明显的偏见例如“玩”、“睡”或“吃”。高温例如2.0AI模型变得更加冒险增加了选择不太可能的标记的机会例如“驾”和“飞”。2.2. topP核心采样从概率最高的 token 开始累加直到累计概率达到P例如 0.9然后只从这个核心集合中随机采样。取值范围0.0 - 1.0原理# 假设词汇表概率分布 vocabulary_probs { 天气: 0.4, 今天: 0.25, 明天: 0.15, 气温: 0.08, 下雨: 0.05, 晴天: 0.03, 多云: 0.02, 其他: 0.02 } # topK 3 的情况 topK_candidates [天气, 今天, 明天] # 只考虑前3个 # 从这3个词中按概率随机选择概率分布集中# 高置信度的预测 probs { 北京: 0.7, 上海: 0.2, 广州: 0.05, 深圳: 0.03, 其他: 0.02 } # topK3: 候选[北京, 上海, 广州] # topP0.8: 候选[北京, 上海] # 0.70.20.9 0.8所以只需前2个概率分布均匀# 低置信度的预测 probs { 可能: 0.15, 也许: 0.14, 大概: 0.13, 估计: 0.12, 应该: 0.11, 或许: 0.10, 可以: 0.09, 能够: 0.08, 其他: 0.08 } # topK3: 候选[可能, 也许, 大概] # 固定3个 # topP0.8: 候选前6个词 # 需要累积到0.8要选更多词特点固定候选数量始终从前K个词中选择简单直观容易理解和实现可能包含低概率词如果前K个词中有概率很低的也会被考虑2.3 topK采样从概率最高的前 K 个候选词中随机选择原理# 假设词汇表概率分布 vocabulary_probs { 天气: 0.4, 今天: 0.25, 明天: 0.15, 气温: 0.08, 下雨: 0.05, 晴天: 0.03, 多云: 0.02, 其他: 0.02 } # topK 3 的情况 topK_candidates [天气, 今天, 明天] # 只考虑前3个 # 从这3个词中按概率随机选择特点固定候选数量始终从前K个词中选择简单直观容易理解和实现可能包含低概率词如果前K个词中有概率很低的也会被考虑temperature、topK、topP组合使用优先顺序# 常见的组合策略 generation_config { topK: 40, # 先筛选前40个候选 topP: 0.8, # 再从中选择累积概率0.8的子集 temperature: 0.7 # 控制随机性强度 } # 执行顺序 Temperature 先调整概率分布的形状陡峭或平坦 Top-K 过滤掉概率最低的 token只保留前 K 个 Top-P 在 Top-K 的基础上进一步动态过滤只保留累计概率达到 P 的 token 最后从剩余的 token 中按概率随机采样2.4. maxTokens最大令牌数限制模型生成的最大令牌token数量取值范围1 - 模型上限如 GPT-4 为 8192DeepSeek 可能有不同限制作用机制一个令牌大约相当于 4 个字符或 0.75 个英文单词中文每个字符通常是一个令牌参数影响低值50-200适合简短回答、标题生成、分类任务特点回答简洁可能不完整中值500-1000适合一般解释、中等长度内容特点平衡详细度和效率高值2000适合长篇内容、详细分析特点回答全面但可能冗长2.5 presencePenalty存在惩罚降低重复使用同一主题的可能性取值范围-2.0 - 2.0作用机制正值降低已出现过的词的概率负值增加已出现过的词的概率参数影响负值倾向于重复和强化已提到的主题适合需要聚焦特定主题的场景零值中性不特别鼓励或抑制重复适合一般对话正值鼓励引入新主题和概念适合头脑风暴、创意写作2.6 应用场景以上大模型参数在不同的场景需要设置不同值以保证输出结果符合预期保守配置追求准确性conservative_config { temperature: 0.2, # 低随机性 topP: 0.6, # 限制候选范围 topK: 10, # 少量候选词 repetition_penalty: 1.1 # 避免重复 }平衡配置日常对话balanced_config { temperature: 0.7, # 适度随机性 topP: 0.8, # 合理候选范围 topK: 40, # 中等候选词数量 repetition_penalty: 1.0 }创意配置创作任务creative_config { temperature: 1.0, # 高随机性 topP: 0.9, # 广泛候选范围 topK: 50, # 大量候选词 repetition_penalty: 0.9 # 允许适度重复 }任务特定优化temperature数学计算0.1-0.2翻译任务0.2-0.4摘要生成0.3-0.5对话聊天0.6-0.8故事创作0.8-1.2诗歌创作1.0-1.53. advisors参数Advisors 的本质在 Spring AI 框架中advisors 参数是一个强大的增强机制允许您在大模型调用过程中添加额外的处理逻辑和上下文信息。它的设计灵感来自于 Spring AOP面向切面编程的概念允许在不修改核心代码的情况下扩展功能。Advisors 的作用上下文增强向模型提供额外的上下文信息请求修改在请求发送前修改请求内容响应处理在响应返回后处理响应内容向量搜索集成与向量数据库集成实现 RAG检索增强生成记忆管理管理对话历史和上下文窗口常见advisor3.1 QuestionAnswerAdvisor问答顾问功能分析用户问题从向量数据库中检索相关文档将检索到的文档作为上下文添加到提示中支持过滤表达式、相似度阈值等参数常用参数FILTER_EXPRESSION元数据过滤表达式SIMILARITY_THRESHOLD相似度阈值TOP_K返回的最相似文档数量3.2 MessageChatMemoryAdvisor聊天记忆顾问功能管理对话历史维护上下文窗口支持多会话管理.advisors(MessageChatMemoryAdvisor.builder( MessageWindowChatMemory.builder() .chatMemoryRepository(new InMemoryChatMemoryRepository()) .maxWindowSize(10) .build()3.3 PromptTemplateAdvisor提示模板顾问功能应用预定义的提示模板支持变量替换标准化提示格式.advisors(PromptTemplateAdvisor.builder() .template(你是一个医药专家请回答关于{topic}的问题) .variables(Map.of(topic, 药品相关性)) .build())3.4 LoggingAdvisor日志顾问功能记录请求和响应支持不同级别的日志便于调试和监控.advisors(LoggingAdvisor.builder() .logRequests(true) .logResponses(true) .build())