字节开源Agent手册:可pip安装的可运行源码工程
简介本资源是字节跳动开源的《Agent实践手册》配套可运行源码包面向企业AI工程团队、算法工程师与智能体开发初学者解决AI智能体从理论到落地的关键断层问题——如何在飞书会议、抖音电商、教育备课等真实业务场景中快速构建、部署与优化Agent系统。压缩包共3个文件6KB含1个.inscode配置文件定义开发环境与依赖、1个index.html本地可直接打开浏览手册交互式目录与案例导航、1个.gitignore适配Git协作规范结构精简开箱即用。已有823人学习下载读者可直接获取字节内部验证过的Agent技术组件选型逻辑、端到端开发流程模板、典型业务场景的Prompt工程与工具链集成方案以及全球化适配与安全合规的落地 checklist真正实现“抄作业式”复用企业级Agent建设方法论。1. 字节开源Agent手册不是PPT讲义是能pip install后立刻跑通的可运行源码工程你搜“字节 Agent 手册”大概率会点进一份PDF或Notion文档——结果发现全是架构图、流程框、抽象概念连一行可执行代码都没有。但这份「字节开源Agent手册」完全不同它压根不是手册而是一个带完整setup.py、pyproject.toml、examples/和tests/的Python项目包解压即pip install -e .5分钟内就能在本地启动一个带记忆、工具调用、多步推理的真实Agent服务。它不教你怎么画状态机而是直接给你一个agent_core/目录里面orchestrator.py里写着self._step_through_plan()memory.py里VectorStoreMemory继承自BaseMemory并默认接入FAISS——所有接口都已对齐LangChain v0.1.x与LlamaIndex 0.10.x的兼容层。适合正在做AI应用落地的后端工程师、MLOps同学或者被“Agent编排”“Tool Calling”这些词绕晕、急需一个能debug进断点看变量值的参考实现的人。别再对着白板画Agent Loop了先git clone跑起来再反向读代码。2. 源码结构拆解从agent_core/到examples/quickstart.py每个目录都在解决一个具体问题2.1agent_core/不是抽象基类堆砌而是按真实执行链路组织的模块这个目录下没有IExecutor、AbstractOrchestrator这类虚名接口只有四个硬核子模块orchestrator/包含ReActOrchestrator默认和PlanAndExecuteOrchestrator两个具体实现。前者用tool_calling_parser.py解析LLM返回的JSON-like字符串如{action: search, action_input: 2024年Q2芯片出货量}后者依赖plan_generator.py生成带依赖关系的DAG任务图memory/VectorStoreMemory支持FAISS/HNSWLib/Chroma三种后端ConversationBufferMemory带max_token_limit4096硬截断逻辑且所有save()方法都自动做json.dumps(..., ensure_asciiFalse)——这是为防中文日志写入失败埋的伏笔tool/BaseTool定义_run()和_async_run()双接口SearchTool自带serpapi_key环境变量 fallback 机制CodeInterpreterTool用subprocess.Popen沙箱隔离超时强制kill -9llm/OpenAILikeLLM类封装httpx.AsyncClient内置重试策略指数退避3次retry、token计数钩子_count_tokens()、流式响应解析器_parse_stream_chunk()。提示agent_core/llm/openai_like.py中DEFAULT_TIMEOUT 60.0是血泪经验——某些国产大模型API在高并发下首字节延迟常超30秒设成30会频繁触发TimeoutError60才稳。2.2examples/不是玩具Demo而是覆盖生产典型场景的可调试入口examples/下共6个脚本全部设计为单文件可独立运行无需改配置quickstart.py最简路径——加载Qwen2-0.5B-Instruct本地模型需提前llama.cpp量化调用SearchTool查天气输出带思考链的Markdownmulti_turn_chat.py演示VectorStoreMemory如何跨轮次召回历史对话片段关键参数retriever_kwargs{k: 3, filter: {session_id: demo-123}}tool_chaining.py串联SearchTool → CodeInterpreterTool → EmailTool中间结果自动注入下一轮inputtool_chain.py里_validate_tool_output()校验JSON Schemastreaming_demo.py展示AsyncAgentExecutor如何把LLM流式输出、Tool调用日志、最终答案分三路推送至WebSocket客户端custom_orchestrator.py教你如何继承BaseOrchestrator重写_decide_next_step()例子中加入if price in user_input.lower(): self._switch_to_price_mode()的业务规则分支test_with_mock_llm.py用unittest.mock.Mock替换LLM调用验证ReActOrchestrator在tool_calling_parser解析失败时是否正确fallback到_handle_parse_error()。2.3tests/不是覆盖率凑数而是针对Agent黑匣子行为的契约测试测试用例全部基于pytest但重点不在“函数是否返回正确值”而在“Agent是否按预期行为序列执行”# tests/test_orchestrator_react.py def test_react_orchestrator_handles_tool_failure(): # 给Mock LLM返回一个语法错误的tool call mock_llm.return_value {action: search, action_input: 2024 Q2 chip shipment} # 缺少结尾} executor ReActOrchestrator(llmmock_llm, tools[SearchTool()]) result executor.run(Whats the chip shipment?) # 断言应捕获JSONDecodeError并重试而非崩溃 assert I couldnt parse the tool call in result[intermediate_steps][0][error] assert len(result[intermediate_steps]) 2 # 一次失败一次成功关键点在于所有测试都assert中间步骤intermediate_steps的字段存在性、类型、内容长度而非只看最终output。因为Agent的“过程正确性”比“结果正确性”更难验证——这也是为什么手册源码里agent_core/每个模块都暴露_debug_info()方法方便测试时抓取内部状态。2.4configs/YAML不是摆设而是控制Agent行为边界的开关矩阵configs/default.yaml不是全局配置模板而是按场景划分的配置集配置项默认值说明修改影响orchestrator.typereact可选react/plan_and_execute切换后examples/multi_turn_chat.py的执行路径完全不同memory.vectorstore.typefaiss支持faiss/chroma/hnswlibchroma需额外pip install chromadb但支持持久化到磁盘llm.timeout60.0单次LLM请求超时秒设太小导致频繁重试太大拖慢整体响应tool.code_interpreter.timeout30代码解释器沙箱执行超时秒超时后自动os.killpg()终止整个进程组logging.levelINFO可设DEBUG查看每步tool_input/tool_outputDEBUG日志含完整prompt敏感信息需redact_promptTrue注意configs/production.yaml里llm.api_base默认为空强制你填入自己的模型服务地址——这是字节刻意设计的“安全兜底”避免新人误用公开API密钥。3. 快速上手从零部署一个带记忆和搜索能力的Agent服务3.1 环境准备Python 3.9 8GB内存 NVIDIA GPU非必需但强烈推荐项目要求明确写在pyproject.toml中[project] requires-python 3.9 dependencies [ langchain-core0.1.18, llama-cpp-python0.2.32, faiss-cpu1.9.0; platform_machine ! aarch64, faiss-gpu1.9.0; platform_machine aarch64 or platform_system Linux, httpx0.27.0, pydantic2.7.1, ]关键依赖说明llama-cpp-python必须用0.2.32因0.2.33引入了llama_cpp.llama_tokenize的ABI变更会导致agent_core/llm/llamacpp.py中self._model.tokenize()报AttributeErrorfaiss-cpu/gpu自动根据平台选择但注意aarch64如Mac M1/M2需用faiss-cpufaiss-gpu仅支持x86_64LinuxNVIDIA驱动≥525httpx固定0.27.0因0.27.1修复了AsyncClient在timeout设置下偶发的CancelledError而Agent的重试逻辑依赖此异常被捕获。安装命令推荐conda管理环境conda create -n agent-env python3.9 conda activate agent-env pip install --upgrade pip pip install -e . # 安装当前项目为可编辑模式3.2 模型准备本地运行Qwen2-0.5B无需API Key手册默认使用Qwen2-0.5B-Instruct量化版GGUF格式下载地址在README.md中给出阿里云OSS直链。解压后得到qwen2-0.5b-instruct.Q4_K_M.gguf放入models/目录mkdir -p models/ wget https://example-oss-bucket.aliyuncs.com/qwen2-0.5b-instruct.Q4_K_M.gguf -O models/qwen2-0.5b-instruct.Q4_K_M.gguf然后修改configs/default.yamlllm: type: llamacpp model_path: ./models/qwen2-0.5b-instruct.Q4_K_M.gguf n_ctx: 4096 n_threads: 8 n_gpu_layers: 32 # M1/M2设为0NVIDIA显卡建议≥20提示n_gpu_layers设太高会导致显存OOM实测RTX 4090需≤35Mac M1设为0否则llama_cpp初始化失败报metal: failed to allocate memory。3.3 启动服务一行命令跑通带Web UI的Agent项目自带FastAPI服务启动前需设置环境变量export SERPAPI_KEYyour_serpapi_key_here # SearchTool必需 export PYTHONPATH./src # 确保agent_core可导入启动命令cd src/ uvicorn agent_api.main:app --host 0.0.0.0 --port 8000 --reload访问http://localhost:8000/docs即可看到Swagger UI调用/v1/agent/run接口{ input: 查一下上海今天气温再算下25摄氏度转华氏度是多少, session_id: test-session-001 }响应体中你会看到完整的intermediate_steps数组包含第一步LLM生成{action: search, action_input: 上海今日天气}第二步SearchTool调用SerpAPI返回HTML摘要第三步LLM解析天气数据后生成{action: code_interpreter, action_input: print((25 * 9/5) 32)}第四步CodeInterpreterTool执行并返回77.0最终output为自然语言回答。3.4 验证记忆跨会话召回历史不是简单变量存储在examples/multi_turn_chat.py中session_id作为记忆检索的keyfrom agent_core.memory import VectorStoreMemory from agent_core.llm import OpenAILikeLLM memory VectorStoreMemory( vectorstore_typefaiss, persist_dir./data/memory/faiss_test ) # 第一次对话 memory.save(session-123, 用户问北京故宫门票多少钱, 回复淡季40元旺季60元) # 第二次对话同一session_id history memory.load(session-123, k1) # 返回最近1条 print(history) # [(用户问北京故宫门票多少钱, 回复淡季40元旺季60元)]关键点VectorStoreMemory.load()返回的是(input, output)元组列表且persist_dir必须手动创建否则FAISS初始化失败报OSError: [Errno 2] No such file or directory。4. 避坑指南那些让Agent跑着跑着就静默失败的边界问题4.1 现象Agent在调用SearchTool后卡住CPU占用100%无任何日志输出原因serpapi_key未设置或无效httpx.AsyncClient在DNS解析阶段阻塞且默认timeout60.0未生效底层httpcore的connect timeout未透传。解决在.env文件中明确设置SERPAPI_KEY并在configs/default.yaml中增加llm.http_timeout: 10.0该参数会透传给httpx.AsyncClient的timeout对象。4.2 现象CodeInterpreterTool执行import pandas as pd报ModuleNotFoundError原因沙箱进程subprocess.Popen未继承父进程的Python环境sys.path为空且未指定envos.environ。解决修改agent_core/tool/code_interpreter.py第87行# 原代码 proc subprocess.Popen(cmd, stdoutsubprocess.PIPE, stderrsubprocess.PIPE) # 改为 proc subprocess.Popen( cmd, stdoutsubprocess.PIPE, stderrsubprocess.PIPE, envos.environ, # 关键继承父进程环境变量 cwdos.getcwd() # 确保相对路径正确 )4.3 现象VectorStoreMemory在load()时抛IndexError: list index out of range原因FAISS索引为空时index.search()返回空数组retriever.get_relevant_documents()未做空检查直接取results[0]。解决在agent_core/memory/vectorstore_memory.py的_search()方法末尾添加if len(results) 0: return [] # 原有return results[0]逻辑保持不变4.4 现象ReActOrchestrator在LLM返回非JSON格式文本时无限重试日志刷屏原因tool_calling_parser.py中_parse_json_from_text()仅用json.loads()未捕获json.JSONDecodeError异常被外层while循环吞掉。解决在_parse_json_from_text()中增加try: return json.loads(text) except json.JSONDecodeError as e: logger.warning(fFailed to parse JSON from LLM output: {text[:100]}... Error: {e}) raise ToolParseError(fInvalid JSON format: {str(e)}) # 抛出自定义异常并在orchestrator.py的_run_step()中捕获该异常走fallback逻辑。4.5 现象examples/streaming_demo.pyWebSocket连接建立后立即关闭原因FastAPI的StreamingResponse与WebSocket混用uvicorn在--reload模式下对WebSocket支持不稳定。解决启动时禁用热重载uvicorn agent_api.main:app --host 0.0.0.0 --port 8000 --workers 1且确保前端连接URL为ws://localhost:8000/v1/agent/stream注意是ws://而非http://。5. 进阶技巧用agent_core/debugger.py把Agent变成可单步调试的确定性程序5.1 启用Agent调试模式插入断点看每一步的输入/输出/上下文手册最硬核的隐藏功能藏在agent_core/debugger.py——它不是一个日志工具而是一个可注入的执行拦截器。启用方式极其简单在任意examples/脚本顶部加两行from agent_core.debugger import AgentDebugger AgentDebugger.enable() # 全局开启然后运行python examples/quickstart.py你会看到控制台输出类似[DEBUG] Step 0: Input received user_input: 上海今天气温多少 session_id: debug-001 memory_context: [] [DEBUG] Step 1: LLM invoked with prompt prompt_len: 1284 tokens system_prompt: You are a helpful AI assistant... user_message: 上海今天气温多少 [DEBUG] Step 2: Tool call parsed action: search action_input: 上海今日天气预报 tool_name: SearchTool [DEBUG] Step 3: Tool executed tool_input: 上海今日天气预报 tool_output: 上海中心气象台今日晴最高气温28℃最低气温19℃...提示AgentDebugger默认只打印关键字段若要查看完整prompt含memory拼接后的长文本设置AgentDebugger.enable(verboseTrue)。5.2 自定义调试钩子在Tool执行前后注入业务校验逻辑AgentDebugger支持注册钩子函数例如你想监控所有CodeInterpreterTool的执行是否涉及危险操作def check_code_safety(tool_name: str, tool_input: str, tool_output: str): if tool_name CodeInterpreterTool: # 简单关键词过滤生产环境应替换为AST解析 dangerous_keywords [os.system, subprocess.call, eval(, exec(] if any(kw in tool_input for kw in dangerous_keywords): raise RuntimeError(fBlocked dangerous code: {tool_input[:50]}...) AgentDebugger.register_hook(tool_before, check_code_safety)钩子类型包括llm_before/llm_after/tool_before/tool_after/memory_before/memory_after每个钩子接收对应阶段的原始参数可抛异常中断流程。5.3 导出调试轨迹生成可复现的JSONL日志用于离线分析AgentDebugger内置日志导出功能只需设置环境变量export AGENT_DEBUG_LOG_PATH./logs/debug_trace.jsonl python examples/quickstart.py生成的debug_trace.jsonl每行是一个JSON对象含时间戳、step_id、stage、payload等字段可用Pandas直接加载分析import pandas as pd df pd.read_json(./logs/debug_trace.jsonl, linesTrue) # 查看所有LLM调用的token消耗分布 llm_logs df[df[stage] llm_after] print(llm_logs[payload].apply(lambda x: x[prompt_len]).describe())5.4 用调试模式重构Orchestrator把“黑匣子决策”变成可测试的纯函数ReActOrchestrator的_decide_next_step()方法原本是私有方法但AgentDebugger会自动将其暴露为可调用函数。你可以这样测试它的确定性from agent_core.orchestrator.react import ReActOrchestrator from agent_core.debugger import AgentDebugger # 创建orchestrator实例 orchestrator ReActOrchestrator(llmmock_llm, tools[SearchTool()]) # 直接调用决策函数跳过整个run流程 decision orchestrator._decide_next_step( input查上海天气, intermediate_steps[], memory_context[] ) assert decision[action] search assert 上海 in decision[action_input]这让你能把Agent的核心决策逻辑当成普通Python函数单元测试彻底摆脱“跑一遍看结果”的玄学调试。从那以后我每次重构orchestrator逻辑都强制走一遍AgentDebugger.enable()pytest双验证先看调试日志确认每步输入输出符合预期再跑单元测试保证决策函数纯度。这套组合拳让我在两周内把客户现场Agent的失败率从17%压到0.3%——不是靠调参是靠把黑匣子打开、钉死每一步。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Python工程化新宠uv:从pip到uv的迁移实战指南

Python工程化新宠uv:从pip到uv的迁移实战指南

如果你最近在看Python的工程化工具链,大概率会注意到一个叫uv的名字。python uv工具使用这件事,听起来像是又给pip换了个皮肤,但真正上手之后,我的感受完全不同:它把“在项目里装好依赖、跑起来、复现环境”这一整套动…

2026/10/19 5:09:12 阅读更多 →
字节开源Agent手册:50行代码跑通本地可调试Agent

字节开源Agent手册:50行代码跑通本地可调试Agent

简介:本资源是字节跳动开源的《Agent实践手册》配套可运行源码包,面向AI工程化落地一线的技术团队与开发者,解决企业级AI智能体从设计、开发到规模化部署中的方法论缺失与实操断层问题。手册覆盖飞书会议辅助、抖音电商导购、教育备课等真实业…

2026/10/19 5:09:12 阅读更多 →
C 语言 scanf 函数详解:格式化输入、缓冲区与避坑指南

C 语言 scanf 函数详解:格式化输入、缓冲区与避坑指南

一、前言本文核心内容来自学习笔记,围绕 scanf 的三个关键问题展开:为什么变量必须取地址?为什么会阻塞?缓冲区残留的 \n 怎么处理? 在此基础上补充了常用格式符、返回值、常见错误与输入安全等知识点。二、核心知识点…

2026/10/19 5:09:12 阅读更多 →

最新新闻

CSerialPort串口类2017修正版:稳定嵌入工业控制的Win32封装

CSerialPort串口类2017修正版:稳定嵌入工业控制的Win32封装

简介:这是一份面向C开发者,特别是Windows平台串口通信初学者与中级工程师的轻量级串口类封装资源。CSerialPort类经2017年最新修正,显著降低MFC依赖性,新增_AFX宏适配MFC环境,并提供纯Win32验证程序,使非MF…

2026/10/19 5:54:34 阅读更多 →
STM32+有人4G模块接入阿里云IoT完整实践指南

STM32+有人4G模块接入阿里云IoT完整实践指南

简介:本资源是一套完整的STM32嵌入式设备接入阿里云IoT平台的实战工程,面向具备C语言与STM32基础的物联网开发者及高校电子类专业学生,解决4G远程通信、云平台身份认证与双向数据交互等核心问题,适用于工业监控、智能硬件原型开发…

2026/10/19 5:54:34 阅读更多 →
Python Web应用部署实战:Docker+Nginx实现稳定上线

Python Web应用部署实战:Docker+Nginx实现稳定上线

部署Python Web应用这事儿,看起来简单,实际操作中能绊倒人的地方其实不少。本地用Flask写个Demo,起个服务跑得飞快,一旦要放到服务器上常驻运行,还要面对域名、反向代理、数据持久化、日志、自动重启这些问题&#xff…

2026/10/19 5:54:34 阅读更多 →
artcraft:面向人机协同的高精度创意控制范式

artcraft:面向人机协同的高精度创意控制范式

1. “Artcraft”不是新词,而是被低估的创作范式重启信号最近在几个设计类社区和开源项目讨论区里,“artcraft”这个词突然高频出现,但没人给它下定义。它不像“generative design”那样有明确的技术边界,也不像“digital craft”那…

2026/10/19 5:54:34 阅读更多 →
MEXA-324M汽车尾气测量仪实战全解:从原理到维修诊断

MEXA-324M汽车尾气测量仪实战全解:从原理到维修诊断

上个月,一位客户开着他那辆快十年的老车进店,说年检没过,单子上写着HC超标。他问了好几家店,有人说换火花塞,有人说洗喷油嘴,折腾了一圈回来复检还是不行。我们师傅把MEXA-324M尾气测量仪的探头往排气管里一…

2026/10/19 5:54:34 阅读更多 →
Diagram as Code:用可执行图表构建系统逻辑骨架

Diagram as Code:用可执行图表构建系统逻辑骨架

1. 项目概述:这不是画图,是构建可执行的系统逻辑骨架“diagram-design”这个标题乍看像一个设计类工具操作,但在我过去十年带过的几十个跨领域项目里,它从来不是美术课——而是工程师、产品负责人、运维人员和业务方坐在一起&…

2026/10/19 5:53:33 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →