LLM 路由:策略、技术及 Python 实现
介绍
在当今快速发展的大型语言模型环境中,每个模型都有其独特的优缺点。例如,一些LLM擅长生成创意内容,而其他模型在事实准确性或特定领域专业知识方面表现更好。鉴于这种多样性,依赖单一LLM处理所有任务往往会导致次优结果。相反,我们可以通过将任务路由到最适合每个特定目的的模型,利用多个LLM的优势。这种方法被称为LLM路由,通过动态选择适合特定任务的正确模型,允许我们实现更高的效率、准确性和性能。
LLM路由通过将任务指向最合适的模型来优化多种大型语言模型的使用。不同模型具有不同的能力,而LLM路由确保每个任务都由最佳模型处理。这一策略最大化了效率和输出质量。高效的路由机制对可扩展性至关重要,使系统能够在保持高性能的同时管理大量请求。通过智能地分配任务,LLM路由增强了AI系统的有效性,减少了资源消耗,并最小化了延迟。本文将探讨路由策略并提供代码示例以展示其实现。
学习成果
- 理解LLM路由的概念及其重要性。
- 探索各种路由策略:静态、动态和模型感知。
- 使用 Python 代码示例实现路由机制。
- 检查高级路由技术,如哈希和上下文路由。
- 讨论负载均衡策略及其在 LLM 环境中的应用。
目录
大型语言模型的路由策略
在大型语言模型(LLMs)的背景下,路由策略对优化模型选择和确保任务高效处理至关重要。通过使用静态路由方法,如轮询,开发人员可以确保任务的均衡分配,但这些方法缺乏在更复杂场景中的适应性。动态路由通过实时条件调整,提供了更具响应性的解决方案,而模型感知路由则进一步考虑了每个LLM的具体优缺点。在本节中,我们将考虑三种著名的LLM,它们均可通过API访问:
- GPT-4 (OpenAI): 以其多功能性和在广泛任务中高准确性而闻名,特别是在生成详细且连贯的文本方面。
- Bard(谷歌):在提供简明、信息丰富的回答方面表现出色,特别是在事实查询中,并与谷歌庞大的知识图谱很好地整合。
- Claude (Anthropic): 专注于安全性和伦理考虑,适合需要谨慎处理敏感内容的任务。
这些模型具有不同的能力,我们将探讨如何根据任务的具体要求将任务路由到适当的模型。
静态路由与动态路由
现在让我们来看看静态路由与动态路由。
静态路由:
静态路由涉及为可用模型分配任务的预定规则。一种常见的静态路由策略是轮询,在这种策略中,任务以固定顺序分配给模型,无论其内容或模型当前的性能如何。虽然这种方法简单,但在模型的强项和工作负载不同的情况下,它可能效率低下。
动态路由:
动态路由适应于系统的当前状态和每个任务的具体特征。动态路由不是使用固定的顺序,而是基于实时数据做出决策,例如任务的需求、每个模型的当前负载和过去的性能指标。这种方法确保任务被路由到最有可能提供最佳结果的模型。
代码示例:在Python中实现静态和动态路由
这里有一个如何使用API调用这三个大型语言模型来实现静态和动态路由的示例:
import requests
import random
# 不同 LLM 的 API 端点
API_URLS = {
"GPT-4": "https://api.openai.com/v1/completions",
"Gemini": "https://api.google.com/gemini/v1/query",
"Claude": "https://api.anthropic.com/v1/completions"
}
# API 密钥(替换为实际密钥)
API_KEYS = {
"GPT-4": "your_openai_api_key",
"Gemini": "your_google_api_key",
"Claude": "your_anthropic_api_key"
}
def call_llm(api_name, prompt):
url = API_URLS[api_name]
headers = {
"Authorization": f"Bearer {
API_KEYS[api_name]}",
"Content-Type": "application/json"
}
data = {
"prompt": prompt,
"max_tokens": 100
}
response = requests.post(url, headers=headers, json=data)
return response.json()
# 静态轮询路由
def round_robin_routing(task_queue):
llm_names = list(API_URLS.keys())
idx = 0
while task_queue:
task = task_queue.pop(0)
llm_name = llm_names[idx]
response = call_llm(llm_name, task)
print(f"{
llm_name} 正在处理任务: {
task}")
print(f"响应: {
response}")
idx = (idx + 1) % len(llm_names) # 循环通过 LLMs
# 基于负载或其他因素的动态路由
def dynamic_routing(task_queue):
while task_queue:
task = task_queue.pop(0)
# 为简单起见,随机选择一个 LLM 来模拟基于负载的路由
# 实际上,您应该根据实时指标选择
best_llm = random.choice(list(API_URLS.keys()))
response = call_llm(best_llm, task)
print(f"{
best_llm} 正在处理任务: {
task}")
print(f"响应: {
response}")
# 示例任务队列
tasks = [
"生成一个关于机器人的创意故事",
"提供 2024 年奥运会的概述",
"讨论 AI 开发中的伦理考虑"
]
# 静态路由
print("静态路由(轮询):")
round_robin_routing(tasks[:])
# 动态路由
print("\n动态路由:")
dynamic_routing(tasks[:])
在这个例子中,round_robin_routing函数以固定顺序静态地将任务分配给三个LLM,而dynamic_routing随机选择一个LLM以模拟动态任务分配。在实际实现中,动态路由将考虑当前负载、响应时间或模型特定的优势等指标,以选择最合适的LLM。
静态路由的预期输出
静态路由(轮询法):
GPT-4 正在处理任务:生成一个关于机器人的创意故事
回应:{
'text': '从前...'}
Gemini 正在处理任务:提供 2024 年奥林匹克运动会的概述
回应:{
'text': '2024 年奥林匹克运动会将在...举行'}
Claude 正在处理任务:讨论人工智能发展的伦理考虑
回应:{
'text': '人工智能的发展引发了几个伦理问题...'}
解释: 输出显示任务是按顺序由 GPT-4、Bard 和 Claude 处理的。这个静态方法并没有考虑任务的性质;它只是按照循环顺序进行。
预期的动态路由输出
动态路由:
Claude 正在处理任务:生成一个关于机器人的创意故事
回应:{
'text': '很久以前...'}
Gemini 正在处理任务:提供2024年奥运会的概述
回应:{
'text': '2024年奥运会将举行在...'}
GPT-4 正在处理任务:讨论人工智能发展的伦理考虑
回应:{
'text': '人工智能发展提出了若干伦理问题...'}
解释: 输出显示任务被不同的LLM随机处理,这模拟了动态路由过程。由于随机选择,每次运行可能导致任务分配给LLM的结果不同。
理解模型感知路由
模型感知路由通过结合每个模型的特定特征增强动态路由策略。例如,如果任务涉及生成创意故事,GPT-4可能是最佳选择,因为它具有强大的生成能力。对于基于事实的查询,优先选择Bard,因为它与Google的知识库集成。对于需要仔细处理敏感或伦理问题的任务,选择Claude。
模型剖析技术
要实现模型感知路由,您必须首先对每个模型进行分析。这涉及收集它们在不同任务上的性能数据。例如,您可能会测量响应时间、准确性、创造力和伦理内容处理。这些数据可用于实时做出明智的路由决策。
代码示例:Python中的模型分析与路由
这是一个如何实现简单的模型感知路由机制的方法:
# 每个LLM的配置文件(基于假设的指标)
model_profiles = {
"GPT-4": {
"speed": 50, "accuracy": 90, "creativity": 95, "ethics": 85},
"Gemini": {
"speed": 40, "accuracy": 95, "creativity": 85, "ethics": 80},
"Claude": {
"speed": 60, "accuracy": 85, "creativity": 80, "ethics": 95}
}
def call_llm(api_name, prompt):
# 模拟函数调用;替换为实际实现
return {
"text": f"来自{
api_name}的响应,提示: '{
prompt}'"}
def model_aware_routing(task_queue, priority='accuracy'):
while task_queue:
task = task_queue.pop(0)
# 根据优先指标选择模型
best_llm = max(model_profiles, key=lambda llm: model_profiles[llm][priority])
response = call_llm(best_llm, task)
print(f"{
best_llm}(优先级: {
priority})正在处理任务: {
task}")
print(f"响应: {
response}")
# 示例任务队列
tasks = [
"生成关于机器人的创意故事",
"提供2024年奥运会的概述",
"讨论人工智能开发中的伦理考量"
]
# 基于不同优先级的模型感知路由
print("模型感知路由(优先考虑准确性):")
model_aware_routing(tasks[:], priority='accuracy')
print("\n模型感知路由(优先考虑创意):")
model_aware_routing(tasks[:], priority='creativity')
在这个例子中,model_aware_routing 使用预定义的配置文件来根据任务的优先级选择最佳的 LLM。无论你是优先考虑准确性、创造力还是伦理处理,这种方法都确保你将每个任务路由到最适合的模型,以实现预期的结果。
模型感知路由的预期输出(优先考虑准确性)
Model-Aware Routing (优先考虑准确性):
Gemini (优先级: 准确性) 正在处理任务: 生成关于机器人的创意故事
Response: {
'text': 'Response from Gemini for prompt: \'生成关于机器人的创意故事\''}
Gemini (优先级: 准确性) 正在处理任务: 提供2024年奥运会的概述
Response: {
'text': 'Response from Gemini for prompt: \'提供2024年奥运会的概述\''}
Gemini (优先级: 准确性) 正在处理任务: 讨论人工智能发展的伦理考量
Response: {
'text': 'Response from Gemini for prompt: \'讨论人工智能发展的伦理考量\''}
说明: 输出显示系统根据LLM的准确性评分将任务路由。例如,如果准确性是优先考虑的,系统可能会选择Bard处理大多数任务。
模型感知路由的预期输出(优先考虑创意)
模型感知路由 (优先考虑创造力):
GPT-4 (优先级: 创造力) 正在处理任务: 生成关于机器人的创意故事
响应: {
'text': 'GPT-4 对提示的响应: \'生成关于机器人的创意故事\''}
GPT-4 (优先级: 创造力) 正在处理任务: 提供 2024 年奥运会的概述
响应: {
'text': 'GPT-4 对提示的响应: \'提供 2024 年奥运会的概述\''}
GPT-4 (优先级: 创造力) 正在处理任务: 讨论 AI 发展的伦理考虑
响应: {
'text': 'GPT-4 对提示的响应: \'讨论 AI 发展的伦理考虑\''}
解释: 输出表明系统根据创意评分将任务分配给LLM。如果GPT-4的创意评分更高,系统在这种情况下可能更常选择它。
实施这些策略与现实世界的LLM如GPT-4、Bard和Claude结合,可以显著提升AI系统的可扩展性、效率和可靠性。这确保了每个任务都由最适合的模型处理。下面的比较提供了对每种方法的简要总结和比较。
这里是转换为表格格式的信息:
方面 | 静态路由 | 动态路由 | 模型感知路由 |
---|---|---|---|
定义 | 使用预定义规则来指导任务。 | 基于当前条件实时调整路由决策。 | 根据模型能力和性能路由任务。 |
实现 | 通过静态配置文件或代码实现。 | 需要实时监控系统和动态决策算法。 | 涉及整合模型性能指标和基于这些指标的路由逻辑。 |
对变化的适应性 | 低;需要手动更新规则。 | 高;自动适应条件变化。 | 中等;根据预定义的模型性能特征适应。 |
复杂性 | 低;使用静态规则简单设置。 | 高;涉及实时系统监控和复杂决策算法。 | 中等;涉及设置模型性能追踪和基于这些指标的路由逻辑。 |
可扩展性 | 有限;可能需要大量重新配置以扩展。 | 高;可通过动态调整路由高效扩展。 | 中等;通过利用特定模型的优势扩展,但随着模型变化可能需要调整。 |
资源效率 | 如果规则与系统需求不匹配,可能效率低下。 | 通常高效,因为路由会适应以优化资源使用。 | 通过利用不同模型的优势高效,潜在地优化整体系统性能。 |
实现示例 | 静态基于规则的系统用于固定任务。 | 具有实时流量分析和调整的负载均衡器。 | 基于性能指标的模型特定路由算法(例如,任务特定的模型部署)。 |
实现技术
在本节中,我们将深入探讨两种在多个LLM之间路由请求的高级技术:哈希技术和上下文路由。我们将探讨其基本概念,并提供Python代码示例来说明如何实现这些技术。和之前一样,我们将使用真实的LLM(GPT-4、Bard和Claude)来演示这些技术的应用。
一致性哈希技术用于路由
哈希技术,特别是一致性哈希,通常用于将请求均匀分配到多个模型或服务器。其思想是根据键(如任务 ID 或输入文本)的哈希值将每个传入请求映射到特定模型。一致性哈希通过最小化重新映射现有请求的需要,有助于在模型数量变化时保持模型之间的负载平衡。
代码示例:一致性哈希的实现
这里有一个 Python 代码示例,实现了一致性哈希将请求分配到 GPT-4、Bard 和 Claude。
import hashlib
# 定义 LLMs
llms = ["GPT-4", "Gemini", "Claude"]
# 生成给定键的一致哈希的函数
def consistent_hash(key, num_buckets):
hash_value = int(hashlib.sha256(key.encode('utf-8')).hexdigest(), 16)
return hash_value % num_buckets
# 使用一致哈希将任务路由到 LLM 的函数
def route_task_with_hashing(task):
model_index = consistent_hash(task, len(llms))
selected_model = llms[model_index]
print(f"{
selected_model} 正在处理任务: {
task}")
# 模拟对选定模型的 API 调用
return {
"choices": [{
"text": f"{
selected_model} 对任务的回复: {
task}"}]}
# 示例任务
tasks = [
"生成一个关于机器人的创意故事",
"提供 2024 年奥运会的概述",
"讨论 AI 发展的伦理考虑"
]
# 使用一致哈希路由任务
for task in tasks:
response = route_task_with_hashing(task)
print("响应:", response)
预期输出
代码的输出将显示系统根据任务描述的哈希值将每个任务一致地路由到特定模型。
GPT-4 正在处理任务:生成关于机器人的创意故事
响应:{
'choices': [{
'text': 'GPT-4 对于任务的响应:生成关于机器人的创意故事'}]}
Claude 正在处理任务:提供 2024 年奥林匹克运动会的概述
响应:{
'choices': [{
'text': 'Claude 对于任务的响应:提供 2024 年奥林匹克运动会的概述'}]}
Gemini 正在处理任务:讨论人工智能发展的伦理考虑
响应:{
'choices': [{
'text': 'Gemini 对于任务的响应:讨论人工智能发展的伦理考虑'}]}
解释: 每个任务每次都被路由到同一个模型,只要可用模型的集合没有变化。这是由于一致性哈希机制,该机制根据任务的哈希值将任务映射到特定的LLM。
上下文路由
上下文路由涉及根据输入上下文或元数据(如语言、主题或请求的复杂性)将任务路由到不同的LLM。该方法确保系统使用最适合特定上下文的LLM处理每个任务,从而提高响应的质量和相关性。
代码示例:上下文路由的实现
这里有一个 Python 代码示例,它使用元数据(例如,主题)将任务路由到最适合的模型,分别是 GPT-4、Bard 和 Claude。
# 定义LLMs及其专业领域
llm_specializations = {
"GPT-4": "复杂的伦理讨论",
"Gemini": "概述和总结",
"Claude": "创意故事讲述"
}
# 根据上下文路由任务的函数
def route_task_with_context(task, context):
selected_model = None
for model, specialization in llm_specializations.items():
if specialization == context:
selected_model = model
break
if selected_model:
print(f"{
selected_model} 正在处理任务: {
task}")
# 模拟对选定模型的API调用
return {
"choices": [{
"text": f"{
selected_model} 对任务的响应: {
task}"}]}
else:
print(f"没有找到适合上下文的模型: {
context}")
return {
"choices": [{
"text": "没有适合的响应可用"}]}
# 带上下文的示例任务
tasks_with_context = [
("生成一个关于机器人的创意故事", "创意故事讲述"),
("提供2024年奥运会的概述", "概述和总结"),
("讨论人工智能发展的伦理考量", "复杂的伦理讨论")
]
# 使用上下文路由路由任务
for task, context in tasks_with_context:
response = route_task_with_context(task, context)
print("响应:", response)
预期输出
这段代码的输出将显示每个任务被路由到专门处理相关上下文的模型。
Claude正在处理任务:生成一个关于机器人的创意故事
响应:{
'choices': [{
'text': 'Claude的响应,用于任务:生成一个关于机器人的创意故事'}]}
Gemini正在处理任务:提供2024年奥运会的概述
响应:{
'choices': [{
'text': 'Gemini的响应,用于任务:提供2024年奥运会的概述'}]}
GPT-4正在处理任务:讨论人工智能发展中的伦理考量
响应:{
'choices': [{
'text': 'GPT-4的响应,用于任务:讨论人工智能发展中的伦理考量'}]}
解释: 系统将每个任务路由到最适合特定内容类型的大语言模型。例如,它将创造性任务指向Claude,将复杂的伦理讨论指向GPT-4。这种方法将每个请求与最有可能基于其专业化提供最佳响应的模型相匹配。
下面的比较将提供两种方法的摘要和比较。
方面 | 一致性哈希 | 上下文路由 |
---|---|---|
定义 | 一种基于哈希的任务分配技术,确保在添加或移除节点时最小化重组。 | 一种基于请求的上下文或特征(例如用户行为或请求类型)自适应的路由策略。 |
实现 | 使用哈希函数将任务映射到节点,通常在分布式系统和数据库中实现。 | 利用上下文信息(例如请求元数据)来确定最佳路由路径,通常通过机器学习或启发式方法实现。 |
对变化的适应性 | 中等;优雅地处理节点变化,但如果节点数量显著变化,可能需要重新哈希。 | 高;实时适应传入请求的上下文或特征变化。 |
复杂性 | 中等;涉及管理一致性哈希环和处理节点的添加/移除。 | 高;需要维护和处理上下文信息,通常涉及复杂的算法或模型。 |
可扩展性 | 高;在添加或移除节点时,能够实现良好的扩展,干扰最小。 | 中到高;可以根据上下文信息和路由逻辑的复杂度进行扩展。 |
资源效率 | 在平衡负载和最小化重组方面高效。 | 潜在高效;基于上下文信息优化路由,但可能需要额外资源进行上下文处理。 |
实现示例 | 分布式哈希表(DHTs)、分布式缓存系统。 | 自适应负载均衡器、个性化推荐系统。 |
LLM路由中的负载均衡
在 LLM 路由中,负载均衡通过有效地在多个语言模型 (LLMs) 之间分配请求发挥着至关重要的作用。它有助于避免瓶颈、减少延迟并优化资源利用。 本节探讨常见的负载均衡算法,并提供代码示例,演示如何实现这些策略。
负载均衡算法
常见负载均衡策略概述:
- 加权轮询
- 概念: 加权轮询是基本轮询算法的扩展。它为每个服务器或模型分配权重,向权重较高的模型发送更多的请求。当一些模型的容量更大或效率更高时,这种方法很有用。
- LLM路由中的应用: 加权轮询可以用于平衡不同处理能力的LLM之间的负载。例如,像GPT-4这样更强大的模型可能会比像Bard这样较轻的模型接收更多的请求。
- 最少连接
- 概念: 最少连接算法将请求路由到活动连接或任务最少的模型。此策略在任务执行时间差异显著的环境中有效,有助于防止任何单个模型过载。
- 应用于LLM路由: 最少连接可以确保工作负荷较低的LLM接收更多任务,从而在模型之间保持处理的均匀分配。
- 自适应负载均衡
- 概念: 自适应负载均衡涉及根据实时性能指标(如响应时间、延迟或错误率)动态调整请求的路由。这种方法确保表现良好的模型接收更多请求,而表现不佳的模型则分配更少的任务,从而优化整体系统效率。
- 在LLM路由中的应用: 在一个具有多个LLM的客户支持系统中,自适应权重平衡可以将复杂的技术查询路由到GPT-4,如果它显示出最佳的性能指标,而一般查询可能被指向Bard,创意请求则指向Claude。通过持续监控和调整每个LLM的权重,基于它们的实时表现,系统确保高效处理请求,减少响应时间,并提高整体用户满意度。
案例研究:多模型环境中的LLM路由
现在让我们研究多模型环境中的LLM路由。
问题陈述
在一个多模型环境中,一家公司部署了多个LLM来处理各种类型的任务。例如:
- GPT-4: 专注于复杂的技术支持和详细的分析。
- Claude AI: 在创意写作和头脑风暴会议中表现出色。
- Bard: 对于一般信息检索和摘要效果很好。
挑战是实现一种有效的路由策略,利用每个模型的优势,确保每个任务都由最合适的 LLM 处理,基于其能力和当前表现。
路由解决方案
为了优化性能,公司实施了一种路由策略,该策略根据模型的专业化和当前负载动态路由任务。以下是该方法的高层概述:
- 任务分类: 每个传入请求根据其性质进行分类(例如,技术支持、创意写作、一般信息)。
- 性能监控: 每个LLM的实时性能指标(例如,响应时间和吞吐量)被持续监测。
- 动态路由: 任务被路由到最适合任务性质和当前性能指标的LLM,使用静态规则和动态调整的组合。
**代码示例:**以下是一个详细的代码实现,演示路由策略:
import requests
import random
# 定义 LLM 端点
llm_endpoints = {
"GPT-4": "https://api.example.com/gpt-4",
"Claude AI": "https://api.example.com/claude",
"Gemini": "https://api.example.com/gemini"
}
# 定义模型能力
model_capabilities = {
"GPT-4": "technical_support",
"Claude AI": "creative_writing",
"Gemini": "general_information"
}
# 分类任务的函数
def classify_task(task):
if "technical" in task:
return "technical_support"
elif "creative" in task:
return "creative_writing"
else:
return "general_information"
# 根据分类和性能路由任务的函数
def route_task(task):
task_type = classify_task(task)
# 模拟性能指标
performance_metrics = {
"GPT-4": random.uniform(0.1, 0.5), # 评分越低越好
"Claude AI": random.uniform(0.2, 0.6),
"Gemini": random.uniform(0.3, 0.7)
}
# 根据任务类型和性能指标确定最佳模型
best_model = None
best_score = float('inf')
for model, capability in model_capabilities.items():
if capability == task_type:
score = performance_metrics[model]
if score < best_score:
best_score = score
best_model = model
if best_model:
# 模拟对选定模型的 API 调用
response = requests.post(llm_endpoints[best_model], json={
"task": task})
print(f"任务 '{
task}' 路由到 {
best_model}")
print("响应:", response.json())
else:
print("未找到适合该任务的模型:", task)
# 示例任务
tasks = [
"解决与服务器相关的技术问题",
"写一个关于龙的创意故事",
"总结最新的科技新闻"
]
# 路由任务
for task in tasks:
route_task(task)
预期输出
此代码的输出将显示每个任务所选择的模型,基于其分类和实时性能指标。注意:请小心将API端点替换为您自己的端点以适应使用场景。这里提供的端点是虚拟端点,以确保遵循伦理规范。
Task '解决服务器的技术问题' routed to GPT-4
Response: {
'text': 'Response from GPT-4 for task: 解决服务器的技术问题'}
Task '写一个关于龙的创意故事' routed to Claude AI
Response: {
'text': 'Response from Claude AI for task: 写一个关于龙的创意故事'}
Task '总结最新的科技新闻' routed to Gemini
Response: {
'text': 'Response from Gemini for task: 总结最新的科技新闻'}
输出说明:
- 路由决策: 每个任务根据其分类和当前性能指标被路由到最合适的LLM。例如,技术任务被指向GPT-4,创意任务被指向Claude AI,常规询问则指向Bard。
- 性能考虑: 路由决策受实时性能指标的影响,确保为每种任务类型选择最适合的模型,优化响应时间和准确性。
本案例研究强调了基于任务分类和实时性能的动态路由如何有效利用多个LLM在多模型环境中提供最佳结果。
结论
大规模语言模型(LLMs)的高效路由对于优化性能和在各种应用中取得更好的结果至关重要。通过采用静态、动态和模型感知路由等策略,系统可以利用不同模型的独特优势,有效满足多样化的需求。先进的技术,如一致性哈希和上下文路由,进一步增强了任务分配的精确性和平衡性。实施稳健的负载均衡机制确保资源的高效利用,防止瓶颈的出现,并保持高吞吐量。
随着大型语言模型(LLMs)的不断发展,智能地路由任务的能力将变得越来越重要,以充分发挥它们的潜力。通过理解和应用这些路由策略,组织可以实现更高的效率、准确性和应用性能。
主要收获
- 基于模型的优势分配任务可以提升性能和效率。
- 固定的任务分配规则可能很简单,但可能缺乏适应性。
- 适应实时条件和任务需求,提高整体系统的灵活性。
- 考虑特定模型的特征,以根据准确性或创造力等优先级优化任务分配。
- 像一致性哈希和上下文路由这样的算法提供了平衡和指导任务的复杂方法。
- 有效的策略可以防止瓶颈并确保在多个大语言模型中最佳利用资源。