Spring AI

46 阅读4分钟

Spring AI 中模型定制化的方式

背景:模型识别未训练信息

未训练信息的正确理解

知识截止日期之后的信息

例如,基于2023年数据训练的模型,被问及2024年相关的新闻事件

训练数据分布之外的专有或机密信息

例如,询问模型您公司的内部财务数据,或者某个未公开的私人对话。

场景

当模型被问及其未识别的信息时,模型对于这些信息其实并未真正的识别与理解。而是一种基于其庞大训练数据所建立的概率分布和语言模式的“幻觉”或“虚构” 。当模型遇到一个它“不知道”但问题结构又要求它给出具体答案的查询时,它会倾向于生成一个在语法、语义和风格上都符合要求,但在事实上可能是错误的回答。这是自回归生成模型的根本特性——它总是在预测下一个最可能的词元,而非进行事实检索。

方法

模型微调

提示词填充

核心思想

当无法改变模型已有的知识(权重),但我们可以通过精心设计和“填充”提示词,为模型构建一个临时的、上下文相关的“工作记忆区”,引导其行为模式,从而避免直接暴露其知识盲区。 其本质是上下文以及微指令的混合使用而非凭空产生回复

具体策略与技术实现
声明知识边界+行动指令
  • 用户在阐述问题之前或之后追加明确的指令,用于定义角色以及行为准则
  • 示例
“你是一个严谨的AI助手。你的知识截止于2023年10月。请遵循以下规则回答问题:
1. 如果问题涉及的知识在你的知识截止日期之后,或者是你训练数据中未包含的特定、非公开信息,请直接、明确地告知用户你不知道,并解释原因。
2. 如果问题在你的知识范围内,请提供准确、有帮助的回答。
用户问题:`[用户的实际问题]`
  • 技术解析
 角色设定:“严谨的AI助手”` 激活了模型内部与“谨慎”、“可靠”相关的行为模式。
 元认知指令:明确告诉模型它有一个“知识截止日期”,这相当于在模型的上下文窗口中植入了对自身局限性的认知。
 条件逻辑:通过清晰的 `if-then` 规则,为模型提供了决策路径。大模型在大量代码和逻辑文本上训练过,能够理解并执行这种结构化指令。
提供上下文检索RAG + 引用机制
  • 对于需要最新或外部信息的问题,可以通过提示词填充,将模型从一个“知识库”转变为“信息处理与解释器”。这通常需要与外部工具(如搜索引擎API、向量数据库)结合。
  • 示例
“我将为你提供一段来自外部来源的文本,请基于这段文本并仅基于这段文本来回答用户的问题。如果提供的文本中不包含回答问题所需的信息,请说明‘根据所提供的资料,无法找到相关信息’。
【外部文本开始】  
`[由其他系统实时检索或提供的相关文本]`  
【外部文本结束】
基于以上资料,请回答:`[用户的实际问题]`”
  • 技术解析
范围限定:“仅基于这段文本”` 是至关重要的指令,它强制模型将注意力集中在提供的上下文中,抑制其内部参数的先验知识,从而避免幻觉。
引用与归因:模型学会将答案与提供的来源绑定,这不仅提高了准确性,也增加了可信度。这模拟了RAG系统的核心思想,但完全通过提示词实现。
优势与局限性
优势
  1. 零样本/少样本学习:无需重新训练模型,成本极低,部署迅速。
  2. 高灵活性:可以根据具体应用场景快速定制提示词模板。
  3. 可解释性:通过结构化的提示词,模型的决策过程在一定程度上变得更可追溯。
  4. 通用性:适用于任何规模的、具有指令跟随能力的大语言模型。
局限性
  1. 不绝对可靠:模型仍然可能“忘记”或忽略提示词中的指令,尤其是当提示词过长或用户问题诱惑性很强时。
  2. 上下文窗口限制:复杂的提示词填充会消耗宝贵的上下文窗口令牌,可能影响处理长文档的能力
  3. 性能开销:填充的提示词会增加每次推理的计算量。
  4. 治标不治本:它是在“管理”模型的局限性,而非从根本上“消除”它。模型的底层知识并未更新。

工具调用