news 2026/8/21 15:16:58

现代AI Agent思维链保持与KV Cache优化实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
现代AI Agent思维链保持与KV Cache优化实践

这次我们来看一个关于 Modern Agent 与思维链(CoT)优化的技术项目。这个项目的核心不是介绍一个全新的工具,而是探讨一个在大型语言模型(LLM)应用开发中至关重要却常被忽视的工程问题:如何在多轮、长序列的 Agent 交互中,高效地保持和利用思维链(Chain-of-Thought, CoT),并优化 KV Cache 等关键资源。

随着 Qwen、DeepSeek 等国产优秀模型在长上下文和推理能力上的突破,开发者构建的 Agent 系统越来越复杂。然而,一个常见的痛点也随之浮现:当 Agent 需要执行多步推理(interleaved thinking)或处理超长对话时,如何避免思维链的断裂?如何管理不断膨胀的 KV Cache 以避免显存溢出和性能下降?这直接决定了 Agent 的稳定性、效率和最终效果。

本文将以 Qwen 系列模型(特别是 Qwen2.5/3.6 等具备优秀长上下文能力的版本)为背景,深入拆解“保持思维链”与“优化 KV Cache”这两个核心议题。我们会从原理出发,结合实际的代码片段和配置思路,告诉你:

  1. CoT 在 Agent 中的核心价值与断裂风险:为什么简单的对话历史拼接会失效?
  2. Interleaved Thinking 的实现策略:如何设计提示词和状态管理来支持交织式思考?
  3. KV Cache 的显存挑战与优化手段:面对长序列,除了换更大显存的卡,我们还能做什么?
  4. 基于 Qwen 模型的实践方案:提供可落地的代码示例和架构思路。

如果你正在构建需要复杂推理、多工具调用或长程记忆的 AI Agent,并且关心其生产环境下的资源消耗与稳定性,那么这篇文章的内容值得你仔细阅读并实践。

1. 核心能力速览:问题定义与解决方向

在深入细节前,我们先通过一个表格快速厘清本文要解决的核心问题、涉及的技术概念以及预期的实践收益。

问题维度具体挑战关键技术点实践目标
思维链保持多轮对话或复杂任务中,模型忘记之前的推理步骤,导致逻辑断裂或重复思考。Chain-of-Thought (CoT) 提示工程,对话历史管理,状态持久化。实现 Agent 的“连贯思考”,确保多步推理的上下文完整性。
交织式思考Agent 需要在用户输入、工具调用结果、自身推理之间灵活切换和交织。Interleaved Thinking 架构设计,提示词模板,推理状态机。构建能进行“边想边做边调整”的灵活 Agent,而非僵化的线性流程。
KV Cache 管理长序列推理导致 KV Cache 显存占用线性增长,极易 OOM(显存溢出),拖慢推理速度。KV Cache 压缩(如 Window Attention)、分页注意力、量化、连续批处理。在有限显存下支持更长的上下文长度,提升吞吐量,降低推理延迟。
模型适配如何针对 Qwen 等特定模型系列应用上述优化。利用模型原生特性(如 Qwen 的长上下文支持),适配其 Attention 实现。最大化发挥 Qwen3.6 等模型在长上下文和推理上的优势,构建高效 Agent。

本文重点:我们将聚焦于工程实现层面,探讨如何将这些理论和技术点融入一个 Modern Agent 的系统架构中,并提供可参考的代码范式。

2. 思维链(CoT)为何在 Agent 中容易“断裂”?

思维链(CoT)通过要求模型输出中间推理步骤,显著提升了其在复杂问题上的表现。但在多轮交互的 Agent 场景中,简单的 CoT 提示会遇到严峻挑战。

2.1 经典 CoT 与 Agent 场景的错配

  1. 单轮 vs 多轮:经典 CoT 研究通常针对单次问答。Agent 的任务可能横跨数十轮对话,将完整的 CoT 历史全部放入上下文,会迅速耗尽令牌限制。
  2. 线性 vs 交织:经典 CoT 是线性的“A -> B -> C -> 答案”。Agent 的思考过程是交织的:用户问题 -> 模型思考 -> 调用工具 -> 工具返回 -> 模型再思考 -> 可能再调用工具 -> 最终回答。这需要更灵活的状态管理。
  3. 状态丢失:如果每次调用模型都只传入当前轮次的输入和上一次的输出,那么模型内部的“思考状态”就会丢失。它无法知道自己上一步为什么决定调用某个工具,或者某个中间结论是如何得出的。

2.2 “断裂”的后果

  • 逻辑不一致:Agent 可能给出与之前推理步骤矛盾的结论。
  • 重复劳动:Agent 可能反复思考同一个已解决的问题。
  • 工具调用混乱:无法基于之前的工具结果进行后续决策。
  • 用户体验差:对话显得笨拙、健忘,不够智能。

解决思路的核心:将 CoT 视为 Agent 的内部状态,而不仅仅是提示词的一部分。我们需要一个机制来持久化、更新和传递这个“思维状态”。

3. 实现 Interleaved Thinking 与 CoT 保持的架构

Interleaved Thinking(交织式思考)是高级 Agent 的标志。它意味着模型能自由地在接收信息、内部推理、决定行动之间循环。实现它的关键是设计一个清晰的状态机状态存储

3.1 Agent 状态设计

我们定义一个AgentState类来封装思维链和上下文:

from typing import List, Dict, Any, Optional from dataclasses import dataclass, field from enum import Enum class ThinkingStepType(Enum): OBSERVATION = "observation" # 观察到用户输入或工具结果 REASONING = "reasoning" # 模型内部推理 ACTION = "action" # 决定采取的行动(如调用工具) RESULT = "result" # 行动的结果 @dataclass class ThinkingStep: step_type: ThinkingStepType content: str # 可附加元数据,如工具名、调用参数、置信度等 metadata: Dict[str, Any] = field(default_factory=dict) @dataclass class AgentState: """Agent 的思维状态""" # 完整的思维链步骤序列 thought_chain: List[ThinkingStep] = field(default_factory=list) # 当前对话的摘要或压缩表示(用于长上下文管理) conversation_summary: str = "" # 当前目标或待办事项 current_goal: Optional[str] = None # 其他会话级上下文 context: Dict[str, Any] = field(default_factory=dict) def add_step(self, step: ThinkingStep): self.thought_chain.append(step) def get_recent_thoughts(self, max_steps: int = 10) -> List[ThinkingStep]: """获取最近 N 步思维,用于构造提示词,避免过长。""" return self.thought_chain[-max_steps:] def to_prompt_context(self) -> str: """将最近的思维链转换为自然语言描述,放入提示词。""" recent = self.get_recent_thoughts() prompt_lines = [] for step in recent: if step.step_type == ThinkingStepType.OBSERVATION: prompt_lines.append(f"Observation: {step.content}") elif step.step_type == ThinkingStepType.REASONING: prompt_lines.append(f"Reasoning: {step.content}") elif step.step_type == ThinkingStepType.ACTION: prompt_lines.append(f"Action: {step.content}") elif step.step_type == ThinkingStepType.RESULT: prompt_lines.append(f"Result: {step.content}") return "\n".join(prompt_lines)

3.2 基于状态机的 Agent 执行循环

下面是一个简化的 Agent 循环,演示了如何利用上述状态进行交织式思考:

class ModernAgent: def __init__(self, llm_client, tools): self.llm = llm_client self.tools = tools self.state = AgentState() def process(self, user_input: str): # 1. 记录观察(用户输入) self.state.add_step(ThinkingStep( step_type=ThinkingStepType.OBSERVATION, content=f"User said: {user_input}" )) max_iterations = 5 for i in range(max_iterations): # 2. 构造提示词,包含最近的思维链 prompt = self._construct_prompt() # 3. 调用模型进行推理/决策 llm_response = self.llm.generate(prompt) # 4. 解析模型响应(这里简化,实际需用 JSON 格式或函数调用) parsed_action = self._parse_response(llm_response) # 5. 记录推理步骤 self.state.add_step(ThinkingStep( step_type=ThinkingStepType.REASONING, content=parsed_action.get("reasoning", "") )) action_type = parsed_action.get("action") if action_type == "final_answer": # 6. 如果是最终答案,记录并返回 final_answer = parsed_action.get("content") self.state.add_step(ThinkingStep( step_type=ThinkingStepType.ACTION, content=f"Decide to give final answer: {final_answer}" )) return final_answer elif action_type == "use_tool": # 7. 如果是使用工具,执行并记录 tool_name = parsed_action["tool_name"] tool_args = parsed_action["tool_args"] self.state.add_step(ThinkingStep( step_type=ThinkingStepType.ACTION, content=f"Call tool `{tool_name}` with args: {tool_args}" )) # 执行工具 tool_result = self._execute_tool(tool_name, tool_args) # 记录工具结果 self.state.add_step(ThinkingStep( step_type=ThinkingStepType.RESULT, content=f"Tool `{tool_name}` returned: {tool_result}" )) # 循环继续,基于工具结果进行下一轮思考 else: # 处理未知动作 break return "I'm unable to complete the task after several attempts." def _construct_prompt(self): # 这是一个简化的提示词模板,实际应用需要更精细的设计 base_instruction = """You are a helpful assistant. Maintain a chain of thought. You can use tools. Your recent thoughts are below:""" recent_thoughts = self.state.to_prompt_context() current_goal = f"\nCurrent goal: {self.state.current_goal}" if self.state.current_goal else "" # 提示模型以特定格式(如 JSON)响应,便于解析 response_format = """ Respond in JSON format: { "reasoning": "你的推理过程...", "action": "final_answer" | "use_tool", "content": "如果是 final_answer,这里是答案文本", "tool_name": "如果是 use_tool,这里是工具名", "tool_args": {...} } """ return f"{base_instruction}\n{recent_thoughts}{current_goal}\n\n{response_format}" # _parse_response, _execute_tool 等方法需要具体实现...

关键点

  • 状态持久化AgentState在循环中持续存在并更新。
  • 提示词注入:每次调用模型前,都将最近的思维链作为上下文注入。
  • 结构化输出:要求模型以结构化格式(如 JSON)响应,便于程序化解析出reasoningaction等,从而更新状态。
  • 循环控制:通过max_iterations防止无限循环。

这样,思维链(reasoning字段)被显式地记录、传递和利用,实现了 CoT 的保持,也支撑了交织式思考。

4. 长上下文与 KV Cache 的显存挑战及优化

当我们的 Agent 状态很复杂、对话轮次很多时,提示词会变得非常长。对于 Transformer 模型,其注意力机制中的 Key-Value Cache(KV Cache)会随着序列长度线性增长,这是显存占用的主要部分。

4.1 KV Cache 为何消耗显存?

在自回归生成中,模型为了高效计算,会缓存之前所有令牌的 Key 和 Value 向量。对于长度为L的序列,单层注意力头的 KV Cache 大小约为2 * L * d_headd_head是注意力头维度)。对于拥有数十层、多头注意力的大模型,总 KV Cache 大小非常可观。

简单估算:对于 Qwen2.5-7B,假设d_model=4096,n_heads=32,n_layers=32,使用半精度(2字节)。生成一个长度为 1 的新 token,其 KV Cache 大小约为:L * n_layers * 2 * n_heads * d_head * 2 bytes。其中d_head = d_model / n_heads = 128。 如果上下文长度L = 8192,那么 KV Cache 约为8192 * 32 * 2 * 32 * 128 * 2 ≈ 4.3 GB。这仅仅是缓存,还不包括模型参数和激活值的显存。

4.2 针对 Qwen 及类似模型的优化策略

策略一:利用模型原生长上下文与优化注意力机制

Qwen2.5/3.6 系列模型原生支持超长上下文(如 128K)。其背后通常采用了优化的注意力算法,如FlashAttention-2窗口注意力(Window Attention)分页注意力(PagedAttention)。这些算法能更高效地管理显存。

  • 行动建议:确保你使用的推理库(如 vLLM, Hugging Facetransformers,llama.cpp)支持并启用了这些优化。例如,使用vLLM部署 Qwen 时,其内置的 PagedAttention 能极大缓解长序列下的显存碎片和压力。
策略二:压缩或丢弃历史 KV Cache

对于非常长的对话,并非所有历史信息都对当前推理至关重要。

  • 流式摘要:像之前AgentState中的conversation_summary,我们可以定期用模型将遥远的对话历史总结成一个简短的摘要。后续对话只需携带摘要和近期详细历史,从而大幅缩短有效上下文长度。
  • 滑动窗口:只保留最近 N 个 token 的 KV Cache。这对于许多“最近的信息最重要”的任务很有效。一些推理框架支持此功能。
  • 提示词压缩:使用小型模型或特定算法,将长的思维链和对话历史压缩成更短的提示,再输入给大模型。
策略三:量化与卸载
  • KV Cache 量化:将 KV Cache 从 FP16/BF16 量化为 INT8 甚至 INT4。这能直接减半或更多显存占用。需要推理库支持(如ExLlamaV2,GPTQ-for-LLaMA对 KV Cache 量化的支持)。
  • CPU 卸载:将不活跃的、较早的 KV Cache 卸载到 CPU 内存。当需要时再加载回 GPU。这会增加延迟,但能突破 GPU 显存限制。llama.cpp等项目支持此特性。
策略四:优化批处理与请求调度
  • 连续批处理:在服务多个并发请求时,动态地将请求组合到同一个批处理中,并共享前缀部分的 KV Cache(如果请求有相同的历史)。vLLMTGI在这方面做得很好。
  • 请求优先级:对于交互式 Agent,优先处理当前活跃的思考链,暂停或缓慢处理背景任务。

4.3 实践示例:使用 vLLM 部署带长上下文支持的 Qwen Agent

vLLM是一个高性能的 LLM 推理和服务库,其 PagedAttention 特性非常适合需要长上下文的 Agent 场景。

# 安装 vLLM pip install vllm # 启动一个支持长上下文和 OpenAI 兼容 API 的 Qwen 服务 # 假设我们使用 Qwen2.5-7B-Instruct 模型 vllm serve Qwen/Qwen2.5-7B-Instruct \ --max-model-len 8192 \ # 设置模型支持的最大长度 --gpu-memory-utilization 0.9 \ # GPU 显存利用率 --enforce-eager \ # 在某些环境下可能需要 --api-key your-api-key-here # 可选,设置 API 密钥

然后,我们的 Agent 可以通过 HTTP 调用这个服务:

from openai import OpenAI import json # 指向本地 vLLM 服务 client = OpenAI( api_key="your-api-key-here", base_url="http://localhost:8000/v1" ) class VLLMAgent(ModernAgent): def __init__(self, tools): # 使用 OpenAI 兼容的客户端 self.llm_client = client super().__init__(self.llm_client, tools) def _call_llm(self, prompt): # 利用 vLLM 的高效长上下文支持 response = self.llm_client.chat.completions.create( model="Qwen/Qwen2.5-7B-Instruct", messages=[ {"role": "system", "content": "You are a helpful assistant that reasons step-by-step and uses tools."}, {"role": "user", "content": prompt} ], max_tokens=500, temperature=0.1, # 低温度使推理更确定 # vLLM 特有参数,例如控制 KV Cache 行为(如果 API 暴露) # extra_body={"ignore_eos": True, "skip_special_tokens": False} ) return response.choices[0].message.content

vLLM 的优势

  • PagedAttention:自动高效管理 KV Cache 显存,类似操作系统管理内存。
  • 高吞吐量:优秀的连续批处理能力。
  • OpenAI 兼容 API:易于集成。
  • 支持多种量化:可以加载 GPTQ、AWQ 等量化模型,进一步节省显存。

5. 完整实践:构建一个支持长对话的 Qwen Agent

让我们将上述所有点整合起来,勾勒一个更完整的、注重资源管理的 Agent 系统架构。

5.1 系统组件设计

+-------------------+ +-----------------------+ | Agent Core |<--->| State Manager | | (思维链循环逻辑) | | (管理AgentState) | +-------------------+ +-------+---------------+ | | v v +-------------------+ +-----------------------+ | LLM Gateway | | Memory Compression | | (适配不同后端) | | (历史总结/压缩) | +-------------------+ +-----------------------+ | v +-----------------------+ | Inference Backend | | (vLLM, TGI, HF管道) | +-----------------------+

5.2 关键代码实现:带记忆压缩的 Agent

我们在AgentState基础上增加记忆压缩功能。

class CompressiveStateManager: """管理长对话状态,在必要时进行压缩""" def __init__(self, compression_llm_client, max_detailed_steps=20): self.state = AgentState() self.compression_llm = compression_llm_client self.max_detailed_steps = max_detailed_steps self.compression_trigger_length = 30 # 思维链超过此长度则触发压缩 def add_step_and_manage(self, step: ThinkingStep): self.state.add_step(step) # 检查是否需要压缩 if len(self.state.thought_chain) > self.compression_trigger_length: self._compress_memory() def _compress_memory(self): """将早期的详细思维压缩成摘要""" # 保留最近的一些详细步骤 steps_to_keep = self.state.thought_chain[-self.max_detailed_steps:] steps_to_compress = self.state.thought_chain[:-self.max_detailed_steps] if not steps_to_compress: return # 构建压缩提示 compress_prompt = f""" Below is a sequence of thoughts and actions from an AI assistant. Please summarize the key decisions, findings, and the current status concisely. Thoughts to compress: {self._steps_to_text(steps_to_compress)} Provide a concise summary that can be used to retain the essential context for future reasoning. Summary: """ # 调用一个较小的、高效的模型进行压缩 summary = self.compression_llm.generate(compress_prompt, max_tokens=150) # 更新状态:用摘要替换被压缩的步骤 self.state.conversation_summary = ( (self.state.conversation_summary + "\n" + summary).strip() ) self.state.thought_chain = steps_to_keep def get_context_for_prompt(self) -> str: """获取用于构造提示词的上下文,包含摘要和近期思维""" context_parts = [] if self.state.conversation_summary: context_parts.append(f"Previous context summary: {self.state.conversation_summary}") recent_thoughts_text = self.state.to_prompt_context() if recent_thoughts_text: context_parts.append(f"Recent thoughts:\n{recent_thoughts_text}") return "\n\n".join(context_parts) def _steps_to_text(self, steps: List[ThinkingStep]) -> str: # ... 将思维步骤列表转换为文本 ...

5.3 配置与启动建议

  1. 模型选择:对于生产环境,考虑使用量化版本(如 Qwen2.5-7B-Instruct-GPTQ-Int4)以降低显存占用,换取更长的上下文支持。
  2. 推理后端选择
    • 追求极致吞吐和长上下文:选择vLLM
    • 需要丰富的内置工具和优化:选择Text Generation Inference (TGI)
    • 快速原型或 CPU/边缘部署:考虑llama.cpp
  3. 监控与告警:监控 Agent 服务的显存占用、平均响应延迟、思维链长度。设置告警,当显存使用率持续高于阈值时,触发自动的记忆压缩或告警。

6. 常见问题与排查方法

在实现和运行此类 Modern Agent 时,你可能会遇到以下典型问题:

问题现象可能原因排查方式解决方案
Agent 回答前后矛盾,忘记之前步骤思维链未正确持久化或注入提示词。检查AgentStatethought_chain是否在每轮都被更新和读取。打印出构造的提示词,查看是否包含完整的历史推理。确保add_step被正确调用,并且to_prompt_context方法包含了所有必要步骤。使用结构化的输出格式(JSON)确保解析可靠。
显存溢出(OOM),尤其是在长对话后KV Cache 随序列长度线性增长,超出 GPU 显存。使用nvidia-smi监控显存变化。检查模型配置的max_model_len是否设置过高。1. 启用 KV Cache 量化。2. 使用 vLLM 等支持 PagedAttention 的后端。3. 实现记忆压缩(CompressiveStateManager)。4. 降低max_model_len
推理速度随着对话进行越来越慢序列变长导致注意力计算复杂度增加,KV Cache 读写变慢。同上,监控显存和 GPU 利用率。检查是否使用了低效的注意力实现。确保使用了 FlashAttention-2 等优化内核。考虑使用滑动窗口注意力,限制有效上下文长度。
模型不遵循指定的 JSON 输出格式提示词中格式指令不够清晰,或模型微调数据中此类格式较少。检查提示词中关于格式的指令是否明确、突出。测试模型在简单任务上是否能输出正确 JSON。1. 强化系统提示词中的格式要求。2. 在 few-shot 示例中提供完美的 JSON 样例。3. 使用输出解析库(如Pydantic+instructor)进行后处理和重试。4. 考虑对模型进行轻量级微调(LoRA)以适配你的输出格式。
工具调用结果未被有效利用工具返回的结果没有被正确添加到思维链中,或添加的格式不利于模型理解。检查ThinkingStepType.RESULT类型步骤的内容是否清晰。在提示词中观察模型是否“看到”了结果。将工具结果以清晰、结构化的方式格式化后,再作为RESULT步骤加入。例如:“Search result for ‘xxx’: 1. ... 2. ...”。
服务并发能力差每个请求独立加载模型和 KV Cache,未做批处理。检查推理后端是否支持连续批处理。切换到支持连续批处理的后端,如 vLLM 或 TGI。将多个 Agent 请求路由到同一个后端服务实例。

7. 最佳实践与使用建议

  1. 从简开始,逐步复杂化:先实现一个没有记忆压缩、上下文较短的基础 Agent。确保思维链的基本保持工作正常。然后再引入状态压缩、长上下文优化等高级特性。
  2. 结构化输出是生命线:强制模型以 JSON、XML 或特定标记格式输出,是构建可靠 Agent 的基石。这比依赖自然语言解析要稳定得多。
  3. 显存监控与预算管理:为你的 Agent 服务设定显存预算。根据预算选择模型尺寸、量化等级和最大上下文长度。记忆压缩的触发阈值应基于显存使用率或思维链长度动态调整。
  4. 测试长尾场景:专门测试超长对话、复杂多轮工具调用、故意提供矛盾信息等边缘情况,观察 Agent 的思维链是否稳固。
  5. 利用模型原生能力:Qwen 等模型在长上下文和工具调用上有良好基础。仔细阅读其官方文档,使用其推荐的对话格式和工具调用格式,往往能事半功倍。
  6. 安全与合规:Agent 能自主调用工具和进行长链推理,也带来了新的风险。确保对工具的执行权限有严格限制,对最终输出有内容安全过滤,并记录完整的思维链日志用于审计和调试。

构建一个能够保持连贯思维、高效利用资源的 Modern Agent 是一个系统工程,涉及提示工程、状态管理、资源优化和模型服务等多个层面。本文提供的架构和代码示例是一个起点,你可以根据具体任务和模型特性进行调整和深化。核心在于理解思维链作为状态的核心价值,并有意识地管理好承载这个状态的长上下文资源。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 15:15:58

Natalie快速上手指南:5分钟告别Storyboard字符串魔法

Natalie快速上手指南&#xff1a;5分钟告别Storyboard字符串魔法 【免费下载链接】Natalie Natalie - Storyboard Code Generator (for Swift) 项目地址: https://gitcode.com/gh_mirrors/na/Natalie 在Swift开发中&#xff0c;你是否曾被Storyboard里的Segue标识符、St…

作者头像 李华
网站建设 2026/8/21 15:14:27

JSX 语法揭秘:HTML 与 JavaScript 的完美结合

1. 什么是 JSX&#xff1f;JSX&#xff08;JavaScript XML&#xff09;是一种 JavaScript 的语法扩展&#xff0c;它允许我们在 JavaScript 代码中编写类似 HTML 的结构。虽然它看起来像 HTML&#xff0c;但 JSX 在编译时会被转换为普通的 JavaScript 函数调用&#xff08;通常…

作者头像 李华
网站建设 2026/8/21 15:14:12

基于BERT模型的文本分类

一、源代码和数据集下载 二、代码部署运行&#xff08;MRPC为例&#xff09; 1、配置参数 --task_nameMRPC \ 任务名称&#xff0c;其他任务相应修改任务 --do_traintrue \ 是否做训练 --do_evaltrue \ 训练完是否做验证 --data_d…

作者头像 李华
网站建设 2026/8/21 15:08:27

FFmpeg 6 + QOpenGLWidget + PBO:从“能跑”到“能打”的视频渲染架构演进

目录 一、引子:为什么你的视频播放器总是卡顿? 二、核心概念:为什么 PBO 是视频渲染的“分水岭”? 1. 传统方式:CPU 到 GPU 的“搬运工” 2. PBO 方式:GPU 之间的“快递员” 三、架构设计:双 PBO 乒乓缓冲 工作原理 四、关键难点:正确处理 YUV420P 的 linesize …

作者头像 李华
网站建设 2026/8/21 15:05:18

从零开始的人工智能之路(2)【Anaconda+YOLOv8】

大家好&#xff0c;今天给大家带来的是Anaconda的安装并且利用Anaconda安装和配置YOLOv8。【Windows下】 下载Anaconda 1、官方渠道下载 这里是Anaconda的官网 这里是Anaconda的下载页 或者点击此处直接开始下载&#xff08;版本&#xff1a;Anaconda3-2024.10-1-Windows-…

作者头像 李华