AI Agent 技术月度展望:总结 7 月的收获并规划 8 月的学习与实践方向

📅 2026/8/1 1:15:46 👁️ 阅读次数 📝 编程学习
AI Agent 技术月度展望:总结 7 月的收获并规划 8 月的学习与实践方向

AI Agent 技术月度展望:总结 7 月的收获并规划 8 月的学习与实践方向

一、深度引言与场景痛点

7 月收官了。10 篇文章写完,回头看这个月在 Agent 开发上走过的路,既有成就感也有遗憾。

成就感是实打实的:Agent 流水线从裸奔到分层架构上线,RAG 系统延迟从 5 秒压到 200ms,向量检索从单编码切换到混合检索,Prompt 工程从靠直觉变成了靠量化测试。这些都是这个月的硬产出。

遗憾同样真实:Agent 的并行编排还没实现,依然在串行跑;RAG 的检索精度虽然提升了不少,但在长文档场景仍然会丢失关键细节;向量检索前沿追踪了一堆,真正落地的只有 Scalar 量化。计划做的事比做完的事多——这是每个月的常态,但 7 月尤其明显。

展望 8 月,最迫切的痛点有三个:

并行编排的空白。7 月的 Agent 是串行流水线(路由→记忆→规划→执行→审计),每个环节都在等前一个完成。但实际业务中,很多工具调用是独立的——查天气和查新闻可以同时进行,不需要等查天气完了才查新闻。串行编排白白浪费了时间,P99 延迟被拖到了 500ms+。

多 Agent 协作的低效。三个 Agent(意图识别、执行、总结)之间通过硬编码的 pipeline 串联,没有动态分工。意图识别 Agent 在简单查询上是多余的——直接调用执行 Agent 就够了,但当前架构不允许跳步。需要一个更灵活的"编排引擎",根据任务复杂度动态决定走哪条路径。

RAG 检索精度的天花板。混合检索把精度从 72% 提到 89%,但剩下的 11% 的失败案例几乎都是"长文档中的细节信息被截断丢失"。智能截断策略虽然减少了 Token 数量,但也丢掉了部分关键段落。需要一个更精细的"段落级检索"方案。

下面这张图梳理了 7 月的成果闭环和 8 月的规划方向:

二、底层机制与原理深度剖析

8 月的三个核心规划方向,背后的原理分别对应 Agent 系统的三个进化维度:

DAG 并行编排——从串行流水线到 DAG 执行引擎。串行编排的问题是显而易见的:每一步都要等前一步完成。但大部分 Agent 工具调用之间存在"可并行"的独立关系。比如一个旅行规划 Agent,用户问"明天北京天气怎么样、有什么好吃的餐厅",查天气和查餐厅是完全独立的两个工具调用,不需要串行等待。

DAG 编排引擎的核心是:将任务分解为 DAG(有向无环图),DAG 中的节点是任务步骤,边是依赖关系。无依赖的节点可以并行执行,有依赖的节点必须等前置节点完成。执行引擎按照拓扑排序调度任务,每个"层"内的节点全部并行,不同"层"之间的节点串行等待。这样既保证了依赖关系的正确性,又最大化了并行度。

动态路由引擎——从固定流水线到自适应编排。当前架构是固定的 Router→Memory→Planner→Executor→Auditor 五步流水线。但实际场景中,简单查询("北京今天天气")只需要 Router→Executor 两步就够了,不需要 Planner 拆解、不需要 Auditor 校验。复杂查询("帮我规划下周的出差行程,考虑天气、交通、酒店预订")才需要完整的五步流水线。

动态路由引擎的原理是:在 Router 之后加一个"复杂度评估器",根据任务需要的工具数量、推理步骤数、上下文依赖深度等指标,动态选择执行路径。简单任务走"快速路径"(Router→Executor),复杂任务走"完整路径"(Router→Memory→Planner→Executor→Auditor)。这样简单查询的延迟可以控制在 200ms 以内,复杂查询走完整流程保证质量。

段落级检索——从文档级到 sentence-level 的精度跃升。当前 RAG 系统的检索粒度是"文档级"——每条向量对应一篇完整文档。检索 Top-K 返回的是 K 篇文档,然后在文档内做截断。这种方式的问题是:一篇 5000 字的文档可能只有一小段与用户查询相关,但检索时整篇文档作为一个向量,语义被平均化了——相关段落和不相关段落混在一起,向量表示不够精确。

段落级检索的原理是:把每篇文档按 sentence 或 paragraph 拆分,每个段落单独生成 embedding 和向量索引。检索时直接匹配段落级向量,返回的 Top-K 是 K 个最相关的段落,而不是 K 篇文档。这样检索精度从文档级的 89% 可以提升到段落级的 95% 以上。代价是向量数量增加了(一篇 100 段的文档变成 100 个向量),但通过 metadata 关联(段落→文档→来源)可以轻松回溯完整上下文。

三、生产级代码实现

以下是一个 DAG 并行编排引擎的实现,整合了动态路由和自适应路径选择:

import asyncio import json import time from dataclasses import dataclass, field from enum import Enum from typing import Any import structlog logger = structlog.get_logger() # ========== DAG 任务模型 ========== class TaskStatus(Enum): PENDING = "pending" RUNNING = "running" SUCCESS = "success" FAILED = "failed" SKIPPED = "skipped" class TaskComplexity(Enum): SIMPLE = "simple" # 1-2 步,无需规划 MEDIUM = "medium" # 3-5 步,需要规划 COMPLEX = "complex" # 6+ 步,需要完整流水线 @dataclass class DAGTask: """DAG 中的单个任务节点。""" task_id: str name: str handler_name: str # 对应的处理函数名 args: dict[str, Any] = field(default_factory=dict) depends_on: list[str] = field(default_factory=list) # 依赖的任务 ID status: TaskStatus = TaskStatus.PENDING result: Any = None error: str | None = None latency_ms: float = 0.0 retry_count: int = 0 max_retries: int = 2 # ========== 动态路由引擎 ========== class DynamicRouter: """动态路由引擎:根据任务复杂度选择执行路径。 7 月痛点:固定五步流水线对简单查询浪费步骤。 8 月方案:复杂度评估 → 自适应路径选择。 """ def evaluate_complexity(self, query: str) -> TaskComplexity: """评估任务复杂度。""" # 规则 1:工具数量推断 tool_indicators = [ "查", "搜索", "找", # 单工具 "帮我", "规划", "对比", "分析", # 多工具 "同时", "还要", "并且", # 并行工具 ] single_tool_count = sum( 1 for kw in tool_indicators[:3] if kw in query ) multi_tool_count = sum( 1 for kw in tool_indicators[3:6] if kw in query ) parallel_count = sum( 1 for kw in tool_indicators[6:] if kw in query ) # 规则 2:推理深度推断 reasoning_indicators = [ "为什么", "原因", "如何", # 需要推理 "评估", "优化", "建议", # 需要深度推理 ] reasoning_count = sum( 1 for kw in reasoning_indicators if kw in query ) # 规则 3:查询长度推断 query_length = len(query.split()) # 综合评分 complexity_score = ( multi_tool_count * 2 + parallel_count * 3 + reasoning_count * 2 + min(query_length / 5, 3) ) if complexity_score <= 2: return TaskComplexity.SIMPLE elif complexity_score <= 6: return TaskComplexity.MEDIUM else: return TaskComplexity.COMPLEX def select_pipeline( self, complexity: TaskComplexity ) -> list[str]: """根据复杂度选择执行路径的步骤列表。""" pipelines = { TaskComplexity.SIMPLE: [ "guardrail", "router", "executor", ], TaskComplexity.MEDIUM: [ "guardrail", "router", "memory", "executor", "auditor", ], TaskComplexity.COMPLEX: [ "guardrail", "router", "memory", "planner", "executor", "auditor", ], } return pipelines[complexity] def build_dag( self, query: str, pipeline_steps: list[str], ) -> list[DAGTask]: """根据执行路径和查询内容构建 DAG 任务列表。""" tasks = [] for i, step in enumerate(pipeline_steps): # 基本依赖:每步依赖前一步完成 depends_on = [tasks[i - 1].task_id] if i > 0 else [] # 特殊处理:executor 步骤可能有并行子任务 if step == "executor": # 检查是否需要并行工具调用 parallel_tools = self._extract_parallel_tools(query) if parallel_tools: # 创建并行子任务 for j, tool_name in enumerate(parallel_tools): sub_task = DAGTask( task_id=f"exec_{tool_name}", name=f"并行执行: {tool_name}", handler_name=tool_name, args={"query": query}, depends_on=[tasks[i - 1].task_id], # 依赖前一步 ) tasks.append(sub_task) continue # 跳过串行 executor 节点 task = DAGTask( task_id=f"step_{step}", name=f"步骤: {step}", handler_name=step, args={"query": query}, depends_on=depends_on, ) tasks.append(task) logger.info( "dag_built", query=query[:50], steps=len(tasks), pipeline=pipeline_steps, ) return tasks def _extract_parallel_tools(self, query: str) -> list[str]: """从查询中提取可并行执行的工具列表。""" # 简化版:检测并列关键词 parallel_keywords = { "天气": "weather_api", "餐厅": "restaurant_api", "新闻": "news_api", "酒店": "hotel_api", "地图": "map_api", "汇率": "exchange_api", } tools = [] for keyword, tool_name in parallel_keywords.items(): if keyword in query: tools.append(tool_name) return tools # ========== DAG 执行引擎 ========== class DAGExecutor: """DAG 并行编排执行引擎。 核心逻辑:按拓扑层级调度任务,同一层级内的任务并行执行。 """ def __init__(self, max_parallel: int = 5): self.max_parallel = max_parallel self._handlers: dict[str, Any] = {} self._semaphore = asyncio.Semaphore(max_parallel) def register_handler(self, name: str, handler): """注册任务处理函数。""" self._handlers[name] = handler async def execute_dag( self, tasks: list[DAGTask], context: dict[str, Any] | None = None, ) -> dict[str, Any]: """执行 DAG 任务列表。""" context = context or {} task_map = {t.task_id: t for t in tasks} results: dict[str, Any] = {} total_start = time.monotonic() # 计算拓扑层级(每层的任务互不依赖,可并行) layers = self._compute_topological_layers(tasks, task_map) logger.info( "dag_execution_start", total_tasks=len(tasks), layers=len(layers), ) # 按层执行 for layer_idx, layer_tasks in enumerate(layers): logger.info( "dag_layer_start", layer=layer_idx, tasks=len(layer_tasks), ) # 同一层的任务并行执行 layer_results = await asyncio.gather( *[self._execute_single_task(t, context, results) for t in layer_tasks], return_exceptions=True, ) # 收集结果 for task, result in zip(layer_tasks, layer_results): if isinstance(result, Exception): task.status = TaskStatus.FAILED task.error = str(result) results[task.task_id] = {"error": str(result)} logger.error( "task_failed", task_id=task.task_id, error=str(result), ) else: task.status = TaskStatus.SUCCESS task.result = result results[task.task_id] = result total_latency = (time.monotonic() - total_start) * 1000 success_count = sum( 1 for t in tasks if t.status == TaskStatus.SUCCESS ) logger.info( "dag_execution_complete", total_tasks=len(tasks), success=success_count, failed=len(tasks) - success_count, latency_ms=round(total_latency, 1), ) return { "results": results, "success_count": success_count, "failed_count": len(tasks) - success_count, "total_latency_ms": round(total_latency, 1), } async def _execute_single_task( self, task: DAGTask, context: dict[str, Any], completed_results: dict[str, Any], ) -> Any: """执行单个 DAG 任务,带限流和重试。""" handler = self._handlers.get(task.handler_name) if handler is None: # 没有注册的 handler,用默认模拟处理 async with self._semaphore: start = time.monotonic() await asyncio.sleep(0.05) # 模拟处理时间 task.latency_ms = round((time.monotonic() - start) * 1000, 1) return {"task": task.name, "status": "mock_success"} # 将前置任务的结果注入上下文 task_args = dict(task.args) for dep_id in task.depends_on: if dep_id in completed_results: task_args[f"dep_{dep_id}"] = completed_results[dep_id] # 带限流的执行 for attempt in range(task.max_retries + 1): try: async with self._semaphore: start = time.monotonic() result = await handler(task_args, context) task.latency_ms = round( (time.monotonic() - start) * 1000, 1 ) return result except Exception as e: task.retry_count = attempt + 1 logger.warning( "task_retry", task_id=task.task_id, attempt=attempt + 1, error=str(e), ) if attempt >= task.max_retries: raise def _compute_topological_layers( self, tasks: list[DAGTask], task_map: dict[str, DAGTask], ) -> list[list[DAGTask]]: """计算拓扑层级:将 DAG 分解为可并行执行的层。""" layers: list[list[DAGTask]] = [] completed_ids: set[str] = set() remaining = list(tasks) while remaining: # 找出所有依赖已满足的任务(即前置任务都已完成或无依赖) ready_tasks = [ t for t in remaining if all( dep in completed_ids or dep not in task_map for dep in t.depends_on ) ] if not ready_tasks: # 存在循环依赖或无法解析的依赖 logger.error("dag_deadlock", remaining=len(remaining)) # 将剩余任务标记为 SKIPPED for t in remaining: t.status = TaskStatus.SKIPPED t.error = "dependency_deadlock" break layers.append(ready_tasks) for t in ready_tasks: completed_ids.add(t.task_id) remaining = [t for t in remaining if t not in ready_tasks] return layers # ========== 段落级检索方案 ========== @dataclass class Passage: """段落级检索单元。""" passage_id: str content: str doc_id: str source: str position: int # 在文档中的位置(第几个段落) embedding: list[float] = field(default_factory=list) class PassageLevelSearcher: """段落级检索器:8 月的检索精度优化方案。 解决痛点:文档级检索丢失长文档中的关键段落。 """ def __init__(self, top_k_passages: int = 10, top_k_docs: int = 5): self.top_k_passages = top_k_passages self.top_k_docs = top_k_docs self._passages: list[Passage] = [] def split_document_to_passages( self, doc_id: str, content: str, source: str, min_passage_length: int = 100, ) -> list[Passage]: """将文档按段落拆分为检索单元。""" # 按自然段落分割 raw_paragraphs = content.split("\n\n") passages = [] position = 0 for para in raw_paragraphs: # 过滤过短的段落 if len(para.strip()) < min_passage_length: continue # 对超长段落再做 sentence 级拆分 if len(para) > 500: sentences = self._split_to_sentences(para) # 将连续的 sentence 合并为 200-400 token 的片段 chunks = self._merge_sentences_to_chunks( sentences, max_chunk_length=400 ) for chunk in chunks: p = Passage( passage_id=f"{doc_id}_p{position}", content=chunk, doc_id=doc_id, source=source, position=position, ) passages.append(p) position += 1 else: p = Passage( passage_id=f"{doc_id}_p{position}", content=para, doc_id=doc_id, source=source, position=position, ) passages.append(p) position += 1 logger.info( "document_split", doc_id=doc_id, total_passages=len(passages), original_length=len(content), ) return passages def _split_to_sentences(self, text: str) -> list[str]: """按句号、问号、感叹号分割句子。""" import re sentences = re.split(r'[。?!\.\?\!]\s*', text) return [s.strip() for s in sentences if len(s.strip()) > 20] def _merge_sentences_to_chunks( self, sentences: list[str], max_chunk_length: int = 400 ) -> list[str]: """将句子合并为固定长度的片段。""" chunks = [] current_chunk = "" for sentence in sentences: if len(current_chunk) + len(sentence) > max_chunk_length: if current_chunk: chunks.append(current_chunk.strip()) current_chunk = sentence else: current_chunk += sentence + "。" if current_chunk.strip(): chunks.append(current_chunk.strip()) return chunks async def search( self, query_embedding: list[float], max_results: int = 10, ) -> list[dict[str, Any]]: """段落级检索:返回最相关的段落,按文档聚合。""" # 实际项目中对接向量数据库的段落级搜索 # 这里用模拟数据演示 await asyncio.sleep(0.02) # 模拟检索延迟 # 模拟段落级检索结果 mock_results = [ { "passage_id": "doc_1_p3", "content": "关于 asyncio 的最佳实践段落...", "doc_id": "doc_1", "source": "tech_blog", "score": 0.92, "position": 3, }, { "passage_id": "doc_2_p1", "content": "asyncio 事件循环的核心机制...", "doc_id": "doc_2", "source": "official_doc", "score": 0.88, "position": 1, }, ] # 按文档聚合:同一个文档的多个段落合并展示 aggregated = self._aggregate_by_document(mock_results) logger.info( "passage_search_complete", query_dim=len(query_embedding), passages=len(mock_results), documents=len(aggregated), ) return aggregated[:max_results] def _aggregate_by_document( self, passage_results: list[dict] ) -> list[dict[str, Any]]: """将段落结果按文档聚合,保留最佳段落作为代表。""" doc_groups: dict[str, list[dict]] = {} for p in passage_results: doc_id = p["doc_id"] if doc_id not in doc_groups: doc_groups[doc_id] = [] doc_groups[doc_id].append(p) aggregated = [] for doc_id, passages in doc_groups.items(): # 取该文档中 score 最高的段落 best_passage = max(passages, key=lambda p: p["score"]) aggregated.append({ "doc_id": doc_id, "source": best_passage.get("source", ""), "best_passage": best_passage["content"], "best_score": best_passage["score"], "total_matching_passages": len(passages), "all_passages": passages, }) # 按最高段落 score 降序排序 aggregated.sort(key=lambda d: d["best_score"], reverse=True) return aggregated # ========== 月度复盘工具 ========== @dataclass class MonthlyGoal: """月度目标追踪。""" name: str category: str # agent, rag, infra, learning status: str # done, partial, not_started completion_pct: float # 0-100 lessons: str # 收获/教训 next_action: str # 8 月后续行动 class MonthlyReviewPlanner: """月度复盘与 8 月规划工具。""" def __init__(self): self.july_goals: list[MonthlyGoal] = [] self.august_goals: list[MonthlyGoal] = [] self._load_july_review() def _load_july_review(self): """加载 7 月目标复盘。""" self.july_goals = [ MonthlyGoal( name="Agent 分层架构", category="agent", status="done", completion_pct=100, lessons="分层解耦+审计节点是 Agent 生产化的基础", next_action="升级为 DAG 并行编排", ), MonthlyGoal( name="RAG 延迟压缩", category="rag", status="done", completion_pct=100, lessons="逐段定位瓶颈,逐轮定向爆破", next_action="段落级检索提升精度", ), MonthlyGoal( name="混合检索落地", category="rag", status="done", completion_pct=90, lessons="稀疏+稠密双编码,精度提升 17%", next_action="自适应权重调参 + DiskANN 评估", ), MonthlyGoal( name="Agent 并行编排", category="agent", status="partial", completion_pct=30, lessons="串行架构的并行化改造比预期复杂", next_action="实现 DAG 执行引擎", ), MonthlyGoal( name="动态路由引擎", category="agent", status="not_started", completion_pct=0, lessons="固定流水线对简单查询浪费步骤", next_action="实现复杂度评估+自适应路径", ), MonthlyGoal( name="async 工具箱", category="infra", status="done", completion_pct=100, lessons="限流+Task管理+HTTP单例是基础能力", next_action="增加熔断器模式", ), ] self.august_goals = [ MonthlyGoal( name="DAG 并行编排引擎", category="agent", status="not_started", completion_pct=0, lessons="", next_action="实现拓扑排序调度 + 层级并行执行", ), MonthlyGoal( name="动态路由引擎", category="agent", status="not_started", completion_pct=0, lessons="", next_action="实现复杂度评估器 + 三级路径选择", ), MonthlyGoal( name="段落级检索", category="rag", status="not_started", completion_pct=0, lessons="", next_action="文档拆分为 passage + 独立向量化", ), MonthlyGoal( name="Agent 记忆持久化", category="agent", status="not_started", completion_pct=0, lessons="", next_action="跨 session 的长期记忆存储和检索", ), MonthlyGoal( name="Scalar 量化落地", category="rag", status="not_started", completion_pct=0, lessons="", next_action="Qdrant Scalar Quantization 部署和验证", ), MonthlyGoal( name="全链路可观测性", category="infra", status="not_started", completion_pct=0, lessons="", next_action="Agent 全链路 trace + Token 成本追踪", ), ] def get_review_summary(self) -> dict[str, Any]: """7 月复盘摘要。""" done = [g for g in self.july_goals if g.status == "done"] partial = [g for g in self.july_goals if g.status == "partial"] not_done = [g for g in self.july_goals if g.status == "not_started"] avg_completion = sum(g.completion_pct for g in self.july_goals) / len(self.july_goals) return { "july_total_goals": len(self.july_goals), "completed": len(done), "partial": len(partial), "not_started": len(not_done), "avg_completion_pct": round(avg_completion, 1), "top_lessons": [ g.lessons for g in done if g.lessons ], "carry_over": [ g.name for g in partial + not_done ], } def get_august_plan(self) -> dict[str, Any]: """8 月规划摘要。""" priorities = { "P0": [g for g in self.august_goals if g.category in ["agent", "rag"]], "P1": [g for g in self.august_goals if g.category == "infra"], } return { "august_total_goals": len(self.august_goals), "p0_count": len(priorities["P0"]), "p1_count": len(priorities["P1"]), "p0_goals": [g.name for g in priorities["P0"]], "p1_goals": [g.name for g in priorities["P1"]], "focus_areas": list(set(g.category for g in self.august_goals)), } async def main(): """演示:动态路由 + DAG 执行 + 月度复盘。""" # 1. 动态路由 router = DynamicRouter() queries = [ "北京今天天气怎么样", # simple "帮我对比 Redis 和 Milvus 的性能差异", # medium "规划下周出差行程,查天气、订酒店、查交通", # complex ] for query in queries: complexity = router.evaluate_complexity(query) pipeline = router.select_pipeline(complexity) dag_tasks = router.build_dag(query, pipeline) logger.info( "dynamic_routing", query=query[:50], complexity=complexity.value, pipeline=pipeline, dag_tasks=len(dag_tasks), ) # 2. DAG 执行 executor = DAGExecutor(max_parallel=5) # 注册模拟 handler async def mock_handler(args: dict, ctx: dict) -> dict: await asyncio.sleep(0.05) return {"result": f"mock_{args.get('query', '')[:20]}"} for step in ["guardrail", "router", "executor", "memory", "planner", "auditor"]: executor.register_handler(step, mock_handler) # 构建并执行 DAG tasks = router.build_dag(queries[2], router.select_pipeline(TaskComplexity.COMPLEX)) result = await executor.execute_dag(tasks) logger.info("dag_result", **result) # 3. 月度复盘 planner = MonthlyReviewPlanner() review = planner.get_review_summary() august_plan = planner.get_august_plan() logger.info("july_review", **review) logger.info("august_plan", **august_plan) if __name__ == "__main__": asyncio.run(main())

四、边界分析与架构权衡

DAG 编排 vs 固定流水线:DAG 编排灵活度高,但调试复杂度也高。固定流水线串行执行,行为可预测、日志易追踪;DAG 编排并行执行,任务间依赖关系动态变化,一个节点失败可能触发多条路径的异常处理。我的策略是:第一版 DAG 只支持两层并行(预计算层 + 执行层),不搞复杂的 DAG 嵌套。等两层并行稳定了,再增加层级。

动态路由的误判风险:复杂度评估器是规则驱动的,不是模型驱动的。规则简单可靠,但覆盖不了所有场景。"帮我查一下 Python 的装饰器用法"——规则判断为 SIMPLE(单工具),但实际上用户可能期待详细的代码示例和对比分析,需要 MEDIUM 级别的路径。更精细的方案是用小模型做意图分类,但增加了延迟和成本。

段落级检索的向量膨胀:一篇 100 段的文档变成 100 个向量,10 万篇文档就是 1000 万个向量。向量数量增加 10 倍,索引构建时间、内存占用、检索延迟都受影响。解决方案是:段落级索引只对高频查询的热门文档启用,冷门文档保留文档级索引。这种"分级索引"策略在向量数量和检索精度之间做了折中。

8 月目标数量控制:规划了 6 个目标,但 8 月只有 4 周。我的原则是 P0 目标最多 3 个(DAG 编排、动态路由、段落级检索),P1 目标按精力弹性推进(记忆持久化、量化落地、可观测性)。宁可少做几个但做完,不要贪多但每个都半成品。

五、总结

7 月收官,10 篇文章写完。回头看,这个月在 Agent 和 RAG 上走了很远的路,但还有更长的路要走。

7 月的硬产出是六件事:Agent 分层架构、RAG 延迟压缩、混合检索、Prompt 量化方法论、Redis 向量运维、async 工具箱。每一件都是从痛点出发、有代码落地、有数据验证的实打实的成果。没有"值得关注式发现",没有"推荐阅读级突破",只有一个个具体的问题被一个个具体的方案解决。

7 月的遗憾也是三个:Agent 并行编排只实现了 30%、动态路由引擎没启动、长文档检索精度仍有瓶颈。这些遗憾不是失败,是"未完成"——它们已经从痛点变成了明确的 8 月规划。

8 月的方向很清晰:DAG 并行编排是 Agent 进化的下一步,动态路由引擎是效率优化的关键,段落级检索是精度跃升的路径。三个方向都是从 7 月的遗憾中生长出来的——每一个未解决的问题,都指向了下一步的明确方向。

做技术规划的本质不是列清单,是排优先级。6 个目标看起来很多,但 P0 只有 3 个。3 个 P0 目标在 4 周内做完是有把握的——每个目标 1 周的核心开发 + 1 周的验证打磨。P1 目标看精力弹性推进,做不完就顺延到 9 月。不焦虑,不贪多,一步步走。

7 月,充实收官。8 月,继续迭代。

资料说明

本文中的协议、版本、性能、成本和行业趋势应以可核验的一手资料为准。未标注统计口径的比例、时间表和预测仅作工程讨论,不应视为行业事实。可参考 0731 资料来源索引,并在发布前将具体来源贴到对应断言之后。