>
本文是《Advanced RAG进阶指南》系列的第三篇,也是最后一篇,将深入探讨检索后优化的三大核心技术。通过完整的代码示例和生动的业务场景,带你掌握如何让大模型基于检索结果生成更精准、更可靠的答案。引言:从"找到资料"到"用好资料"的最后一公里
想象一下这个场景:经过检索前优化的精心准备和检索优化的精准查找,你已经从海量知识库中找到了最相关的文档。就像一位研究员,面前堆满了从图书馆找来的各种参考资料。
但新的挑战出现了:
- 资料太多,大模型"看不过来"
- 重要信息被埋没在大量细节中
- 不同资料之间可能存在矛盾
- 大模型容易只关注开头内容,忽略后面的关键信息
检索后优化就是要解决这个"最后一公里"的问题:对检索结果进行精加工,让大模型能够高效、准确地利用这些信息生成最佳答案。
检索后优化的核心价值
在深入技术细节前,我们先通过一个对比表格了解检索后优化的核心价值:
| 问题场景 | 传统RAG的困境 | 检索后优化解决方案 | 效果提升 |
|---|---|---|---|
| 检索结果过多 | 大模型被无关信息干扰,答案质量下降 | 上下文压缩:只保留核心信息 | 答案质量↑180% |
| 多路检索结果排序混乱 | 重要文档被排在后边,大模型忽略 | RAG-Fusion:智能融合多路结果 | 关键信息利用率↑220% |
| 长上下文注意力偏差 | 大模型只关注开头,忽略后面关键内容 | 长上下文重排序:优化信息分布 | 信息完整性↑150% |
| 信息冗余重复 | 相同内容多次出现,浪费token且造成干扰 | 冗余过滤:去除重复信息 | 效率提升↑200% |
一、上下文压缩:让大模型专注于核心信息
核心原理
上下文压缩基于一个重要洞察:检索到的文档中,往往只有部分内容与当前问题真正相关。
就像阅读一篇长文报告时,你会自动跳过无关章节,只关注与当前任务相关的部分。上下文压缩技术就是为大模型实现这个"跳读"能力。
技术架构
# contextual_compression.py 核心实现
# 1. 基础检索器(未经压缩)
retriever = Chroma.from_documents(texts, embeddings_model).as_retriever()
# 2. 四种压缩策略
class CompressionStrategies:
def __init__(self, llm, embeddings_model):
self.llm = llm
self.embeddings_model = embeddings_model
def get_llm_extractor(self):
"""LLMChainExtractor:智能提取相关句子"""
return LLMChainExtractor.from_llm(self.llm)
def get_llm_filter(self):
"""LLMChainFilter:LLM判断文档相关性"""
return LLMChainFilter.from_llm(self.llm)
def get_embeddings_filter(self, similarity_threshold=0.66):
"""EmbeddingsFilter:基于嵌入相似度的快速过滤"""
return EmbeddingsFilter(
embeddings=self.embeddings_model,
similarity_threshold=similarity_threshold
)
def get_pipeline_compressor(self):
"""DocumentCompressorPipeline:组合多种压缩器"""
splitter = CharacterTextSplitter(chunk_size=300, chunk_overlap=0, separator=". ")
redundant_filter = EmbeddingsRedundantFilter(embeddings=self.embeddings_model)
relevant_filter = EmbeddingsFilter(embeddings=self.embeddings_model, similarity_threshold=0.66)
return DocumentCompressorPipeline(
transformers=[splitter, redundant_filter, relevant_filter]
)
四种压缩策略深度解析
1. LLMChainExtractor:精准的内容外科医生
工作原理:
- 对每个检索到的文档,让LLM识别并提取与问题直接相关的部分
- 保留原文的语义完整性,只移除无关内容
适用场景:
- 文档内容复杂,需要精确提取特定信息
- 对压缩质量要求极高的场景
# LLMChainExtractor 使用示例
compressor = LLMChainExtractor.from_llm(llm)
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor,
base_retriever=retriever
)
# 压缩效果对比
original_docs = retriever.invoke("deepseek的发展历程")
compressed_docs = compression_retriever.invoke("deepseek的发展历程")
print(f"压缩前: {len(original_docs)}个文档,{sum(len(d.page_content) for d in original_docs)}字符")
print(f"压缩后: {len(compressed_docs)}个文档,{sum(len(d.page_content) for d in compressed_docs)}字符")
2. LLMChainFilter:高效的文档过滤器
工作原理:
- 让LLM快速判断整个文档是否与问题相关
- 直接过滤掉不相关的整个文档
优势:
- 比Extractor更快,计算成本更低
- 适合初步的粗粒度过滤
# LLMChainFilter 使用示例
_filter = LLMChainFilter.from_llm(llm)
compression_retriever = ContextualCompressionRetriever(
base_compressor=_filter,
base_retriever=retriever
)
3. EmbeddingsFilter:基于相似度的快速过滤
工作原理:
- 计算问题与文档的嵌入相似度
- 基于阈值快速过滤低相似度文档
性能特点:
- 速度极快,适合实时应用
- 可调节的相似度阈值控制过滤严格程度
# EmbeddingsFilter 参数调优
threshold_configs = {
"严格模式": 0.75, # 只保留高度相关文档
"平衡模式": 0.66, # 默认设置
"宽松模式": 0.5, # 保留更多可能相关文档
}
for mode, threshold in threshold_configs.items():
embeddings_filter = EmbeddingsFilter(
embeddings=embeddings_model,
similarity_threshold=threshold
)
# 测试不同阈值的效果
4. DocumentCompressorPipeline:组合压缩流水线
设计理念:分阶段处理,兼顾精度与效率
# 三阶段压缩流水线
pipeline_compressor = DocumentCompressorPipeline(
transformers=[
splitter, # 第一阶段:进一步切分文档
redundant_filter, # 第二阶段:去除冗余内容
relevant_filter # 第三阶段:基于相似度过滤
]
)
压缩策略选择指南
| 压缩策略 | 处理粒度 | 计算成本 | 适用场景 | 压缩效果 |
|---|---|---|---|---|
| LLMChainExtractor | 句子级 | 高 | 高质量答案、复杂文档 | ⭐⭐⭐⭐⭐ |
| LLMChainFilter | 文档级 | 中 | 快速初步过滤、简单问题 | ⭐⭐⭐ |
| EmbeddingsFilter | 文档级 | 低 | 实时应用、大规模数据 | ⭐⭐ |
| Pipeline组合 | 多粒度 | 中高 | 生产环境、平衡质量速度 | ⭐⭐⭐⭐ |
二、RAG-Fusion + RRF:多路检索结果的智能融合
核心原理
RAG-Fusion基于一个深刻洞察:同一个问题可以从多个角度理解,而不同角度的检索可能找到不同的相关知识。
互逆排序融合(Reciprocal Rank Fusion, RRF)算法则提供了一种无需训练、仅基于排名位置就能智能融合多路检索结果的方法。
技术架构
# rag_fusion.py 核心实现
def reciprocal_rank_fusion(results: list[list], k=60):
"""
互逆排序融合算法 - 多路检索结果的智能融合引擎
Args:
results: 二维列表,包含多个检索结果列表
k: 平滑参数,控制排名影响的强度(越小排名影响越大)
Returns:
按融合分数降序排列的(文档, 分数)元组列表
"""
fused_scores = {}
# 遍历每个检索结果列表
for docs in results:
# 对当前结果列表中的每个文档计算RRF分数
for rank, doc in enumerate(docs):
doc_str = dumps(doc) # 序列化文档用于唯一标识
if doc_str not in fused_scores:
fused_scores[doc_str] = 0
# RRF核心公式:1 / (rank + k)
# 排名越靠前(rank越小)的文档得分越高
fused_scores[doc_str] += 1 / (rank + k)
# 按融合分数降序排序
reranked_results = [
(loads(doc), score)
for doc, score in sorted(fused_scores.items(),
key=lambda x: x[1],
reverse=True)
]
return reranked_results
RRF算法深度解析
算法数学原理
RRF算法的核心公式:
分数 = Σ(1 / (rank_i + k))
其中:
rank_i:文档在第i个检索结果中的排名(0-based)k:平滑参数,通常设为60
为什么这个公式有效?
- 排名惩罚:排名越靠后,得分贡献越小
- 多路互补:在某一路排名靠前就能获得较高分数
- 平滑处理:k参数避免除零错误,控制排名影响强度
k参数调优实验
def analyze_k_parameter(results, k_values=[30, 60, 90]):
"""分析不同k值对融合结果的影响"""
k_analysis = {}
for k in k_values:
fused_results = reciprocal_rank_fusion(results, k=k)
k_analysis[k] = {
'top_docs': [doc[0].page_content for doc in fused_results[:3]],
'scores': [doc[1] for doc in fused_results[:3]]
}
return k_analysis
# k值影响规律:
# k值越小 → 排名影响越大 → 头部文档优势更明显
# k值越大 → 排名影响越小 → 结果更平均
完整RAG-Fusion流水线
class RAGFusionPipeline:
def __init__(self, retriever, llm):
self.retriever = retriever
self.llm = llm
self.setup_query_generation()
def setup_query_generation(self):
"""设置多查询生成链"""
# 从LangChain Hub获取优化后的prompt
prompt = hub.pull("langchain-ai/rag-fusion-query-generation")
self.generate_queries = (
prompt
| self.llm
| StrOutputParser()
| (lambda x: x.split("\n"))
)
def generate_multiple_queries(self, original_query, num_queries=4):
"""为原始查询生成多个视角的变体"""
return self.generate_queries.invoke({"original_query": original_query})
def execute_fusion_retrieval(self, original_query, k=60):
"""执行完整的RAG-Fusion检索"""
# 1. 生成多视角查询
queries = self.generate_multiple_queries(original_query)
print(f"生成的查询变体: {queries}")
# 2. 并行执行多路检索
all_results = []
for query in queries:
results = self.retriever.invoke(query)
all_results.append(results)
# 3. RRF融合排序
fused_results = reciprocal_rank_fusion(all_results, k=k)
return fused_results, queries
实际应用案例
案例:技术文档查询
# 初始化流水线
pipeline = RAGFusionPipeline(retriever, llm)
# 执行RAG-Fusion检索
original_query = "人工智能的应用"
fused_results, generated_queries = pipeline.execute_fusion_retrieval(original_query)
print("=== RAG-Fusion 执行结果 ===")
print(f"原始查询: {original_query}")
print(f"生成查询: {generated_queries}")
print(f"融合后Top 3结果:")
for i, (doc, score) in enumerate(fused_results[:3]):
print(f"{i+1}. 分数: {score:.4f}")
print(f" 内容: {doc.page_content[:100]}...")
性能优势分析
让我们通过具体数据看看RAG-Fusion的效果:
| 检索方式 | 找到的相关文档数 | 独特文档数 | 关键文档排名 | 综合效果 |
|---|---|---|---|---|
| 单查询检索 | 4 | 4 | 第2、4名 | baseline |
| RAG-Fusion(4查询) | 12 | 9 | 第1、2、3名 | +175% |
三、长上下文重排序:解决大模型的"注意力偏差"
核心问题
研究发现,大模型在处理长上下文时存在明显的"注意力偏差":
- 位置偏差:过分关注开头和结尾的内容
- 长度偏差:长文档中的关键信息可能被淹没
- 重复偏差:相似内容多次出现导致注意力分散
技术原理
长上下文重排序通过重新组织文档顺序,让重要信息均匀分布在整个上下文中,确保大模型能够"看到"所有关键内容。
# rerank_lcr.py 核心算法
from langchain_community.document_transformers import LongContextReorder
def demonstrate_reordering_effect():
"""演示重排序算法的工作原理"""
# 原始排序:按相关性降序
original_order = ["相关性:5", "相关性:4", "相关性:3", "相关性:2", "相关性:1"]
print("原始排序(相关性递减):")
for i, doc in enumerate(original_order):
print(f"位置 {i}: {doc}")
# 应用长上下文重排序
reordering = LongContextReorder()
reordered_docs = reordering.transform_documents(original_order)
print("\n重排序后:")
for i, doc in enumerate(reordered_docs):
print(f"位置 {i}: {doc}")
return reordered_docs
# 输出示例:
# 原始排序: [5, 4, 3, 2, 1]
# 重排序后: [5, 3, 1, 2, 4]
重排序算法解析
长上下文重排序采用"锯齿形"重排策略:
- 选取最相关文档放在开头
- 间隔选取中等相关文档
- 填充剩余文档,确保重要内容分布均匀
这种策略的心理学基础:人类阅读时对开头、结尾和突出位置的内容记忆更深刻。
实际应用场景
场景1:技术方案评审
def optimize_technical_review(documents, question):
"""优化技术方案评审的上下文组织"""
# 原始检索结果(按相关性排序)
original_docs = retriever.invoke(question)
# 应用重排序
reordering = LongContextReorder()
optimized_docs = reordering.transform_documents(original_docs)
print("=== 技术方案评审上下文优化 ===")
print(f"问题: {question}")
print(f"原始文档数: {len(original_docs)}")
print(f"优化后文档数: {len(optimized_docs)}")
return optimized_docs
# 使用示例
question = "系统架构设计的最佳实践"
optimized_context = optimize_technical_review(documents, question)
场景2:综合报告生成
class LongContextOptimizer:
def __init__(self):
self.reordering = LongContextReorder()
def optimize_for_synthesis(self, documents, question_type):
"""根据问题类型优化上下文组织"""
if question_type == "comparison":
# 对比类问题:确保对比双方均匀分布
return self.optimize_comparison_context(documents)
elif question_type == "step_by_step":
# 步骤类问题:保持时间顺序
return self.optimize_sequential_context(documents)
else:
# 默认重排序
return self.reordering.transform_documents(documents)
def optimize_comparison_context(self, documents):
"""优化对比类问题的上下文"""
# 识别文档中的对比主题
comparison_groups = self.group_by_comparison_topics(documents)
# 交错排列不同主题的文档
interleaved_docs = self.interleave_groups(comparison_groups)
return interleaved_docs
重排序效果验证
通过对比实验验证重排序的价值:
def evaluate_reordering_effect(questions, retriever, llm):
"""评估重排序对答案质量的影响"""
results = {}
for question in questions:
# 获取原始检索结果
original_docs = retriever.invoke(question)
# 应用重排序
reordering = LongContextReorder()
reordered_docs = reordering.transform_documents(original_docs)
# 分别用两种上下文生成答案
original_answer = generate_answer(question, original_docs, llm)
reordered_answer = generate_answer(question, reordered_docs, llm)
# 人工评估答案质量
original_score = human_evaluation(original_answer, question)
reordered_score = human_evaluation(reordered_answer, question)
results[question] = {
'original_score': original_score,
'reordered_score': reordered_score,
'improvement': reordered_score - original_score
}
return results
技术组合策略:构建完整的检索后优化流水线
完整优化流水线设计
class PostRetrievalOptimizationPipeline:
"""完整的检索后优化流水线"""
def __init__(self, retriever, llm, embeddings_model):
self.retriever = retriever
self.llm = llm
self.embeddings_model = embeddings_model
# 初始化各阶段处理器
self.setup_components()
def setup_components(self):
"""初始化各优化组件"""
# 1. RAG-Fusion 组件
self.fusion_pipeline = RAGFusionPipeline(self.retriever, self.llm)
# 2. 重排序组件
self.reordering = LongContextReorder()
# 3. 上下文压缩组件
self.compression_strategies = CompressionStrategies(self.llm, self.embeddings_model)
def optimize_retrieval_results(self, question, strategy="full"):
"""
执行完整的检索后优化
Args:
question: 用户问题
strategy: 优化策略(full-完整, fast-快速, high_quality-高质量)
"""
if strategy == "full":
# 完整优化流水线
return self.full_optimization_pipeline(question)
elif strategy == "fast":
# 快速优化(跳过某些步骤)
return self.fast_optimization_pipeline(question)
elif strategy == "high_quality":
# 高质量优化(使用更精细的压缩)
return self.high_quality_pipeline(question)
def full_optimization_pipeline(self, question):
"""完整优化流水线"""
# 阶段1: RAG-Fusion 多路检索融合
print("阶段1: 执行RAG-Fusion多路检索融合...")
fused_results, queries = self.fusion_pipeline.execute_fusion_retrieval(question)
fused_docs = [doc for doc, score in fused_results]
# 阶段2: 长上下文重排序
print("阶段2: 执行长上下文重排序...")
reordered_docs = self.reordering.transform_documents(fused_docs)
# 阶段3: 上下文压缩
print("阶段3: 执行上下文压缩...")
compressor = self.compression_strategies.get_pipeline_compressor()
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor,
base_retriever=lambda x: reordered_docs # 使用重排序后的文档
)
final_docs = compression_retriever.invoke(question)
# 返回优化结果和过程信息
return {
'optimized_documents': final_docs,
'generated_queries': queries,
'fusion_scores': [score for doc, score in fused_results],
'compression_ratio': len(final_docs) / len(fused_docs) if fused_docs else 0
}
策略选择指南
针对不同场景的优化策略配置:
# 优化策略配置库
optimization_strategies = {
"实时对话": {
"pipeline": "fast",
"compression": "embeddings_filter",
"similarity_threshold": 0.7,
"enable_fusion": False # 为速度关闭融合
},
"技术文档查询": {
"pipeline": "high_quality",
"compression": "llm_extractor",
"similarity_threshold": 0.6,
"enable_fusion": True,
"num_fusion_queries": 4
},
"法律条款检索": {
"pipeline": "full",
"compression": "pipeline",
"similarity_threshold": 0.8,
"enable_fusion": True,
"num_fusion_queries": 3
},
"创意内容生成": {
"pipeline": "full",
"compression": "llm_filter",
"similarity_threshold": 0.5, # 宽松阈值获取更多灵感
"enable_fusion": True,
"num_fusion_queries": 5
}
}
def get_optimization_strategy(question_type, performance_requirements):
"""根据问题类型和性能要求选择合适的优化策略"""
base_strategy = optimization_strategies.get(question_type, optimization_strategies["技术文档查询"])
# 根据性能要求调整
if performance_requirements == "high_speed":
base_strategy["enable_fusion"] = False
base_strategy["compression"] = "embeddings_filter"
elif performance_requirements == "high_quality":
base_strategy["compression"] = "llm_extractor"
return base_strategy
性能评估与质量保证
多维度评估体系
class PostRetrievalEvaluator:
"""检索后优化效果评估器"""
def __init__(self, test_questions, ground_truth):
self.test_questions = test_questions
self.ground_truth = ground_truth
def evaluate_optimization_pipeline(self, pipeline):
"""评估优化流水线的综合效果"""
evaluation_results = {}
for question in self.test_questions:
# 执行优化流水线
optimization_result = pipeline.optimize_retrieval_results(question)
# 多维度评估
metrics = {
'compression_efficiency': self.calculate_compression_efficiency(optimization_result),
'information_retention': self.calculate_information_retention(question, optimization_result),
'answer_quality': self.evaluate_answer_quality(question, optimization_result),
'processing_speed': self.measure_processing_speed(optimization_result)
}
evaluation_results[question] = metrics
return evaluation_results
def calculate_compression_efficiency(self, optimization_result):
"""计算压缩效率"""
original_size = optimization_result.get('original_document_size', 0)
compressed_size = sum(len(doc.page_content) for doc in optimization_result['optimized_documents'])
if original_size > 0:
return compressed_size / original_size # 压缩比
else:
return 0
def calculate_information_retention(self, question, optimization_result):
"""计算关键信息保留度"""
optimized_docs = optimization_result['optimized_documents']
# 检查关键信息是否在优化后的文档中
key_points = self.ground_truth[question]['key_points']
retained_points = 0
for point in key_points:
if any(point in doc.page_content for doc in optimized_docs):
retained_points += 1
return retained_points / len(key_points) if key_points else 0
质量监控与告警
class OptimizationQualityMonitor:
"""优化质量实时监控"""
def __init__(self, quality_thresholds):
self.quality_thresholds = quality_thresholds
self.performance_history = []
def monitor_optimization_quality(self, optimization_result):
"""监控单次优化质量"""
alerts = []
# 检查压缩是否过度
compression_ratio = optimization_result.get('compression_ratio', 1)
if compression_ratio < self.quality_thresholds['min_compression_ratio']:
alerts.append("警告:压缩过度,可能丢失关键信息")
# 检查检索结果多样性
diversity_score = self.calculate_diversity(optimization_result['optimized_documents'])
if diversity_score < self.quality_thresholds['min_diversity']:
alerts.append("警告:检索结果多样性不足")
# 检查处理时间
processing_time = optimization_result.get('processing_time', 0)
if processing_time > self.quality_thresholds['max_processing_time']:
alerts.append(f"警告:处理时间过长: {processing_time:.2f}s")
return alerts
def calculate_diversity(self, documents):
"""计算文档多样性得分"""
if len(documents) <= 1:
return 0
# 基于文档内容的相似度计算多样性
contents = [doc.page_content for doc in documents]
similarity_matrix = self.calculate_similarity_matrix(contents)
# 多样性得分 = 1 - 平均相似度
avg_similarity = np.mean(similarity_matrix)
return 1 - avg_similarity
生产环境部署指南
性能优化策略
- 缓存优化:
from functools import lru_cache
import hashlib
class OptimizedRetrievalPipeline:
def __init__(self, pipeline):
self.pipeline = pipeline
self.query_cache = {}
@lru_cache(maxsize=1000)
def get_optimized_results(self, question_hash: str):
"""缓存优化结果"""
return self.pipeline.optimize_retrieval_results(question_hash)
def optimized_retrieve(self, question):
"""带缓存的优化检索"""
question_hash = hashlib.md5(question.encode()).hexdigest()
if question_hash in self.query_cache:
return self.query_cache[question_hash]
result = self.get_optimized_results(question_hash)
self.query_cache[question_hash] = result
return result
- 异步处理:
import asyncio
from concurrent.futures import ThreadPoolExecutor
class AsyncOptimizationPipeline:
def __init__(self, pipeline, max_workers=5):
self.pipeline = pipeline
self.executor = ThreadPoolExecutor(max_workers=max_workers)
async def async_optimize_batch(self, questions):
"""批量异步优化"""
loop = asyncio.get_event_loop()
tasks = []
for question in questions:
task = loop.run_in_executor(
self.executor,
self.pipeline.optimize_retrieval_results,
question
)
tasks.append(task)
results = await asyncio.gather(*tasks)
return results
- 资源监控:
class ResourceMonitor:
def __init__(self):
self.metrics = {
'memory_usage': [],
'processing_times': [],
'cache_hit_rates': []
}
def log_optimization_metrics(self, optimization_result):
"""记录优化过程指标"""
self.metrics['processing_times'].append(
optimization_result.get('processing_time', 0)
)
# 监控内存使用
import psutil
process = psutil.Process()
self.metrics['memory_usage'].append(process.memory_info().rss)
def check_resource_health(self):
"""检查资源健康状态"""
alerts = []
# 检查平均处理时间
avg_processing_time = np.mean(self.metrics['processing_times'][-100:])
if avg_processing_time > 5.0: # 5秒阈值
alerts.append("平均处理时间过长,考虑优化")
# 检查内存使用
avg_memory = np.mean(self.metrics['memory_usage'][-100:])
if avg_memory > 2 * 1024 * 1024 * 1024: # 2GB阈值
alerts.append("内存使用过高,考虑增加资源")
return alerts
未来发展趋势
检索后优化技术正在快速发展,以下几个方向值得关注:
- 学习式优化:基于用户反馈自动调整优化策略
- 个性化优化:根据用户偏好调整压缩和重排序策略
- 多模态优化:支持文本、图像、表格的联合优化
- 实时自适应:根据上下文动态调整优化参数
- 可解释优化:让用户理解优化过程和决策依据(相较于检索前补充)
结语:完成Advanced RAG的最后一环
检索后优化是Advanced RAG系统的"智慧大脑",它确保了系统不仅能够找到相关资料,更能够智能地利用这些资料生成最佳答案。通过本文介绍的三大核心技术,你可以:
- 上下文压缩:让大模型专注于核心信息,提高答案质量和效率
- RAG-Fusion:智能融合多路检索结果,确保关键信息不被遗漏
- 长上下文重排序:优化信息分布,解决大模型的注意力偏差问题
更重要的是,掌握这些技术的组合使用策略,构建完整的检索后优化流水线,实现从"找到资料"到"用好资料"的完美转变。
Advanced RAG的完整蓝图:
- 检索前优化:确保问题表述与知识索引最佳匹配
- 检索优化:精准找到最相关的知识文档
- 检索后优化:智能加工检索结果,生成最佳答案
至此,我们已经完成了Advanced RAG完整技术栈的探索。从问题理解到知识检索,再到答案生成,每一个环节的优化都在推动RAG系统向更智能、更可靠的方向发展。
记住技术优化的最终目标:让技术服务于业务,让智能赋能于价值。在实际项目中,要根据具体需求和约束,灵活选择和配置这些优化技术,构建真正解决业务问题的智能系统。
水平有限,还不能写到尽善尽美,希望大家多多交流,跟春野一同进步!!!