
大型语言模型(LLM)非常强大,但它们并不是自动确定的。
问同样的问题两次,可能会得到略有不同的答案。如果缺乏足够的背景信息询问事实,模型可能会填补空白。直接用自然语言要求它进行复杂的匹配或计算,你可能会得到一个听起来很有信心但不足以用于生产的答案。
这并不意味着LLM默认是不可靠的。这意味着我们需要围绕它们的工作方式来设计。
当构建人工智能应用程序时,提高确定性通常归结为四种实用方法:
目标不是让LLM神奇地变得完美。目标是通过减少歧义、提高准确性和防止模型在没有足够信息时发明答案来提升模型的表现。
Prompt工程是提高LLM可靠性的最简单方法之一。一个模糊的提示给了模型太多的自由。一个具体的提示则给了它边界。
而不是这样问:
比较这些记录,告诉我哪些是匹配的。
你可以通过给模型一个明确的流程来改进提示:
逐步比较记录。
首先,规范公司名称。
其次,比较地址。
第三,比较电话号码。
第四,分配置信度分数。
如果没有足够的证据确定匹配,则返回“未知”。
好的提示工程通常包括:
最后一点很重要。
LLM通常被优化为具有帮助性,这有时会使它们在不需要时回答问题。
允许模型说它不知道可以减少幻觉。
例如:
如果答案不能从提供的背景信息中确定,请以以下方式回复:
"根据提供的信息,我不知道。"
不要猜测。
不要使用外部知识。
这种指示有助于模型保持在任务的边界内。单独的提示并不能保证完美的结果,但通常是控制的第一层。
并非所有的LLM在每一项任务上都表现相同。
有些模型在推理方面更强。有些在编码方面更出色。有些模型优化了速度和成本。有些是为图像生成、文档理解或跨模态工作流程而设计的。
例如,像Claude Opus 4.7这样的模型通常用于复杂的推理和编码密集型任务。像Nano Banana Pro这样的模型设计用于高质量的图像生成和编辑,包括图像中精确文本渲染的用例。
关键点很简单:
根据任务选择模型,而不仅仅是品牌名称。
如果你的任务是代码生成,请将模型与编码基准和您自己项目的真实编码示例进行比较。如果您的任务是医学文档摘要、法律审查、财务提取或数据匹配,请将其与该主题领域的示例进行比较。如果您的任务是图像生成,请使用专为图像生成设计的模型。
模型设置也很重要。
温度是决定性的重要设置之一。较低的温度通常使响应更加可预测和专注,而较高的温度则增加了创造性和变化。
对于结构提取、分类、JSON输出或数据处理等注重准确性的任务,我通常更喜欢低温(通常接近0)。相反,对于创意写作、头脑风暴或营销文案,较高的温度可能更合适。
另一个有用的模式是智能模型路由。
与其将每个提示都发送到同一个模型,不如根据意图路由任务:
如果用户要求代码生成,请使用编码模型。
如果用户要求图像生成,请使用图像模型。
如果用户要求摘要,请使用快速摘要模型。
如果用户要求复杂的推理,请使用推理模型。
这种路由可以是基于规则的,或者你可以使用一个LLM来分类任务并选择最佳的模型。任务越专业化,模型选择就越重要。
背景信息是提高LLM准确性的最大因素之一。
没有背景信息的LLM可能会根据一般知识来回答。这可能很有用,但当你需要基于特定文档、公司政策、用户数据、合同、代码库或特定领域内容的答案时,它是有风险的。
背景信息给模型设置了边界。
例如:
只使用提供的背景信息进行回答。
如果背景信息中不包含答案,说明你不知道。
这就是RAG变得极其有用的地方。
RAG代表检索增强生成。在RAG系统中,您的文档通常被分块、嵌入并存储在向量数据库中。当用户提出一个问题时,系统会执行语义搜索以找到相关内容,并将该内容作为背景信息传递给LLM。
您不是让模型仅仅依赖它已经知道的内容,而是给它应该使用的内容来源。
简化的RAG流程如下:
用户提出问题
↓
搜索相关文档
↓
检索最佳匹配片段
↓
将这些片段传递给LLM
↓
生成基于检索到的背景信息的答案
这提高了确定性,因为模型不再以开放的方式操作。它有一个定义明确的事实来源。
RAG对于以下用途特别有用:
然而,RAG并不能自动解决所有问题。您仍然需要良好的分块、检索、元数据和良好的提示。如果检索到错误的背景信息,模型仍然可能产生错误的答案。
一个强大的RAG提示建立在严格的边界之上。虽然生产提示会更加详细,但核心指令的简化示例如下:
仅使用提供的背景信息。
引用使用的源部分。
不要从一般知识中回答。
如果答案不在背景信息中,请说明。
这有助于减少幻觉并使答案更容易验证。
工具是提高可靠性的最佳方法之一。
有许多任务,如果需要一致、高质量的输出,LLM不应该直接执行。
例如:
LLM可以推理这些任务,但它不应该是执行它们的事物。
例如,如果你需要比较成千上万的记录,不要依赖LLM手动在提示中检查所有这些记录。相反,创建一个工具。
例如,可以编写一个模糊匹配工具,用Python编写并暴露给LLM:
def fuzzy_match_records(source_records, target_records, threshold=0.85):
"""
确定性地比较两个数据集并返回可能的匹配项。
"""
matches = []
for source in source_records:
for target in target_records:
score = calculate_similarity(source, target)
if score >= threshold:
matches.append({
"source_id": source["id"],
"target_id": target["id"],
"score": score
})
return matches
LLM可以决定何时使用工具,解释结果,并帮助用户解释输出。但匹配本身发生在代码中,这要可靠得多。
计算也是如此。如果您需要进行精确的计算,请使用计算器工具或Python函数。如果您需要从数据库中获取数据,请使用查询工具。如果您需要检查实时信息,请使用API。
模式是:
使用LLM进行推理、语言、协调和解释。
使用工具进行确定性执行。
这对于具有自主性的工作流程尤为重要。
您给予AI代理的自主权越多,工具的边界就越重要。工具应该有明确的范围、经过验证、记录和限制。工具应该明确地并且安全地完成一件事。
工具使LLM系统更加可靠,因为它们将关键操作从自然语言移出,进入确定性代码。
一个重要的澄清:工具并不保证结果正确,仅仅因为它是一个工具。它保证代码的一致性运行,前提是实现和输入是正确的。这仍然是比让LLM在纯文本中进行即兴的计算或匹配逻辑的巨大改进。
使用LLM提高确定性不是关于一个魔法技巧。这是一种分层方法。
这些方法结合起来,可以显着提高LLM驱动的应用程序的可靠性。
一种实用的架构可能如下所示:
用户提示
↓
提示分类
↓
模型路由
↓
使用RAG检索背景信息
↓
LLM推理
↓
工具调用进行确定性工作
↓
验证的响应
这种设计给您带来了两种世界的最佳之处。您得到了LLM的灵活性和推理能力,同时也得到了结构化提示、有根据的背景信息、模型专业化和确定性工具的可靠性。
这就是LLM应用变得更加适合生产的原因。
LLM很强大,但它们需要护栏。如果您希望获得更高的准确性、更少的幻觉和更多可重复的结果,请先问自己四个问题:
您越是有意地回答这些问题,您的AI系统就越具有确定性。LLM不再仅仅是聊天机器人。它们是推理引擎、协调者和工具的接口。
但对于生产系统,最好的结果是当我们停止期望模型自己完成所有工作,而是设计结合LLM智能和确定性软件工程相结合的系统时。