OpenSmith:本地LLM Pipeline追踪与调试实战指南
在本地开发和调试 LLM 应用时你是否遇到过这样的困境想要追踪每个组件的输入输出、查看中间结果、分析性能瓶颈却发现现有的工具要么需要接入云端服务要么配置复杂、难以集成特别是在涉及敏感数据或需要离线工作的场景下云端方案更是直接不可行。OpenSmith 的出现正是为了解决这一痛点——它是一个轻量级的本地工具让你能够像使用专业 APM 工具一样轻松追踪 LLM 工作流Pipeline的完整执行链路所有数据都安全地存储在本地 SQLite 数据库中无需任何云端依赖。本文将带你从零开始完整掌握 OpenSmith 的核心概念、安装配置、基础与高级用法并通过一个实际的 RAG检索增强生成管道示例演示如何利用其强大的追踪能力来调试和优化你的 LLM 应用。无论你是刚接触 LLM 应用开发的初学者还是正在为复杂管道寻找可靠调试方案的经验丰富的开发者这篇文章都能提供一套即学即用的实战指南。1. OpenSmith 与 LLM Pipeline 追踪核心概念在深入代码之前我们有必要先厘清几个核心概念这有助于理解 OpenSmith 的设计理念和解决的问题域。1.1 什么是 LLM PipelineLLM Pipeline大型语言模型工作流是指将多个处理步骤串联起来共同完成一项复杂任务的执行流程。一个典型的 Pipeline 可能包含以下环节文本预处理如分词、清洗、标准化。向量化/嵌入将文本转换为向量表示。检索从向量数据库或知识库中查找相关信息。推理/生成LLM 根据检索到的上下文和用户问题生成回答。后处理对 LLM 的输出进行格式化、过滤或校验。例如一个简单的问答 Pipeline 可能是用户问题 - 检索相关文档 - 组合提示词 - LLM 生成 - 输出答案。随着业务复杂度的提升Pipeline 可能会包含条件分支、循环、并行处理等更复杂的逻辑。1.2 为什么需要追踪 Pipeline开发和使用 LLM Pipeline 时经常会遇到一些棘手问题黑盒调试困难当最终结果不理想时很难确定是哪个环节出了问题——是检索没找到相关文档还是提示词写得不好或是 LLM 本身的理解偏差性能瓶颈定位Pipeline 执行缓慢是网络延迟、模型推理慢还是某个自定义函数效率低下数据流转不透明中间结果的具体形态是什么数据在各个环节之间是如何传递和转换的复现与迭代如何复现某次特定的运行结果以便进行优化和对比实验传统的打印日志Print Debugging方式在简单的线性流程中尚可应付但对于复杂的、有分支的 Pipeline 就显得力不从心日志分散、格式不一、难以关联。而专业的 APM应用性能监控工具往往重量级且通常为云端服务不适合本地开发调试或敏感数据场景。1.3 OpenSmith 的解决方案OpenSmith 定位为一个轻量级的本地 LLM Pipeline 追踪库。它的核心设计目标是本地优先所有追踪数据默认存储在本地 SQLite 数据库无需网络连接保障数据隐私。低侵入性通过装饰器或上下文管理器的方式轻松集成到现有代码中无需大规模重构。结构化记录自动记录每个步骤的输入、输出、开始时间、结束时间、异常信息等元数据。可视化潜力虽然核心是库但其存储的结构化数据可以很容易地被第三方工具如 DB Browser for SQLite查询和分析为未来可能的简单 UI 工具打下基础。它本质上提供了一个统一的“观察点”让你可以清晰地看到数据在 Pipeline 中的“流动”情况。2. 环境准备与安装接下来我们开始动手配置环境。OpenSmith 是一个 Python 库因此你需要一个 Python 环境。2.1 Python 环境要求OpenSmith 通常支持主流的 Python 版本。建议使用 Python 3.8 或更高版本以确保最佳的兼容性和功能支持。# 检查你的 Python 版本 python --version # 或 python3 --version如果你需要管理多个 Python 版本强烈推荐使用pyenvLinux/macOS或conda全平台。2.2 安装 OpenSmith安装 OpenSmith 非常简单直接使用 pip 即可。建议在虚拟环境中进行安装以避免与系统或其他项目的包发生冲突。# 创建并激活一个虚拟环境可选但推荐 python -m venv opensmith-env # Linux/macOS 激活 source opensmith-env/bin/activate # Windows 激活 opensmith-env\Scripts\activate # 使用 pip 安装 OpenSmith pip install opensmith2.3 验证安装安装完成后可以通过一个简单的命令来验证是否安装成功。python -c import opensmith; print(opensmith.__version__)如果安装成功这行命令会输出 OpenSmith 的版本号而不会报错。2.4 可选工具SQLite 数据库浏览器虽然 OpenSmith 的追踪数据可以通过 Python 代码查询但有一个图形化的 SQLite 数据库浏览器会直观很多。推荐使用DB Browser for SQLite (DB4S)它是一个免费、开源、跨平台的工具。官方网站https://sqlitebrowser.org/下载安装根据你的操作系统Windows, macOS, Linux下载对应的安装包或可执行文件进行安装。安装后你就可以直接打开 OpenSmith 生成的.db文件以表格形式浏览和查询追踪记录了。3. OpenSmith 核心 API 与快速入门OpenSmith 的 API 设计力求简洁主要通过装饰器和上下文管理器来使用。让我们通过一个最简单的例子来感受一下。3.1 最基本的追踪装饰器tracetrace装饰器是标记一个函数需要被追踪的最直接方式。# 文件basic_trace.py from opensmith import trace trace # 只需添加这个装饰器 def call_llm(prompt: str) - str: # 模拟调用 LLM 的过程 # 这里用简单的字符串替换模拟响应 response f模拟LLM对提示词 {prompt} 的响应。 return response trace def format_output(raw_response: str) - str: return f格式化后的结果{raw_response} # 运行一个简单管道 if __name__ __main__: prompt 请解释人工智能。 response call_llm(prompt) final_output format_output(response) print(final_output)运行这个脚本python basic_trace.py它不仅会打印最终结果还会在当前目录下自动创建一个名为trace.db的 SQLite 数据库文件默认名称并记录下call_llm和format_output两次函数执行的详细信息。3.2 查看追踪结果使用 DB Browser for SQLite 打开生成的trace.db文件你会看到类似下图的表格数据runs 表存储每次 Pipeline 运行的整体信息idrun_idnamestart_timeend_timestatus...1xyz...root2023-10-...2023-10-...success...spans 表存储每个被追踪步骤的详细信息核心表idtrace_idspan_idparent_span_idnamestart_timeend_timeattributesevents...1abc...001nullcall_llm2023-10-...2023-10-...{prompt: 请解释...}[...]...2abc...002001format_output2023-10-...2023-10-...{raw_response: 模拟LLM...}[...]...从spans表中可以清晰地看到trace_id相同的行属于同一次 Pipeline 执行。parent_span_id字段表明了步骤之间的调用关系例如format_output的父步骤是call_llm。attributes字段以 JSON 形式保存了函数的输入参数经过序列化。name字段就是被追踪的函数名。3.3 使用上下文管理器进行更细粒度的控制装饰器很方便但有时我们需要追踪的不是一个完整的函数而是一段代码块或者想自定义 Span 的名称。这时可以使用上下文管理器。# 文件context_manager_trace.py from opensmith import trace import time def complex_processing(data): # 假设这是一个复杂的处理函数我们只想追踪其中一部分 with trace(data_cleaning_phase): # 自定义步骤名称 # 模拟数据清洗 cleaned_data data.strip().lower() time.sleep(0.1) # 模拟耗时操作 with trace(feature_extraction_phase): # 模拟特征提取 features len(cleaned_data) time.sleep(0.2) return features if __name__ __main__: result complex_processing( Some Mixed CASE Text ) print(f处理结果{result})这种方式提供了更大的灵活性允许你在函数内部标记多个独立的追踪区间。4. 实战构建并追踪一个完整的 RAG Pipeline现在我们将运用前面学到的知识构建一个简化但功能完整的 RAGRetrieval-Augmented Generation管道并使用 OpenSmith 对其进行全面的追踪。这个例子将涵盖从文档加载、检索到LLM调用的全过程。4.1 项目结构与依赖首先创建项目目录和文件。rag_with_tracing/ ├── main.py # 主程序入口 ├── requirements.txt # 项目依赖 └── data/ └── sample_docs.txt # 示例知识库文档在requirements.txt中声明依赖opensmith openai # 用于调用真实的LLM API本例使用模拟 numpy # 用于简单的向量计算模拟安装依赖pip install -r requirements.txt在data/sample_docs.txt中准备一些示例文档每行一个文档Python是一种高级编程语言由Guido van Rossum创建。 机器学习是人工智能的一个分支使计算机能够在没有明确编程的情况下学习。 SQLite是一个C语言库实现了一个小型、快速、自包含、高可靠性、功能齐全的SQL数据库引擎。 OpenSmith是一个用于本地追踪LLM管道的工具。4.2 实现 RAG 组件现在我们来编写main.py逐步实现 RAG 的各个组件。# 文件main.py from opensmith import trace import numpy as np from numpy.linalg import norm import time # 模拟一个简单的文本嵌入模型 trace def get_embedding(text: str) - list: 将文本转换为向量模拟实现。实际项目中可使用 sentence-transformers 等库。 # 这是一个非常简单的模拟将文本长度和字符分布作为向量特征 text_lower text.lower() vec [len(text)] for char in abcdefghijklmnopqrstuvwxyz: vec.append(text_lower.count(char)) # 简单归一化模拟单位向量 vec_array np.array(vec) if norm(vec_array) 0: vec_array vec_array / norm(vec_array) time.sleep(0.05) # 模拟嵌入计算的耗时 return vec_array.tolist() trace def load_and_index_documents(file_path: str) - list: 加载文档并为其生成嵌入向量构建一个简单的内存索引。 documents [] with open(file_path, r, encodingutf-8) as f: for line in f: doc_text line.strip() if doc_text: # 忽略空行 doc_embedding get_embedding(doc_text) documents.append({ text: doc_text, embedding: doc_embedding }) print(f已加载并索引 {len(documents)} 个文档。) return documents trace def retrieve_relevant_docs(query: str, documents: list, top_k: int 2) - list: 根据查询向量从文档索引中检索最相关的top_k个文档。 query_embedding get_embedding(query) similarities [] for doc in documents: # 计算余弦相似度 doc_vec np.array(doc[embedding]) query_vec np.array(query_embedding) cosine_sim np.dot(doc_vec, query_vec) / (norm(doc_vec) * norm(query_vec) 1e-8) similarities.append((cosine_sim, doc)) # 按相似度降序排序取前top_k个 similarities.sort(keylambda x: x[0], reverseTrue) top_docs [doc for sim, doc in similarities[:top_k]] return top_docs trace def build_prompt(query: str, relevant_docs: list) - str: 根据用户问题和检索到的相关文档构建最终提示词。 context \n.join([doc[text] for doc in relevant_docs]) prompt f请根据以下背景知识回答问题。 背景知识 {context} 问题{query} 请给出简洁明了的回答 return prompt # 模拟调用 OpenAI API trace def call_llm_api(prompt: str) - str: 模拟调用LLM API。真实场景中替换为 openai.ChatCompletion.create 等。 # 模拟API调用延迟 time.sleep(0.3) # 模拟一个简单的、基于关键词的响应生成逻辑 if python in prompt.lower(): return Python是一种广泛使用的高级编程语言以其清晰的语法和代码可读性而闻名。它适用于Web开发、数据分析、人工智能等多个领域。 elif 机器学习 in prompt.lower() or ai in prompt.lower(): return 机器学习是AI的核心分支让计算机通过数据自动学习改进而无需显式编程。常见应用包括推荐系统、图像识别等。 elif sqlite in prompt.lower(): return SQLite是一个轻量级、文件型的数据库引擎无需单独服务器进程广泛用于嵌入式设备和移动应用。 else: return 根据所提供的背景知识我暂时无法给出一个精确的回答。建议您提供更具体的上下文信息。 # 主函数串联整个RAG管道 trace(namerag_pipeline) # 为整个管道定义一个总名称 def run_rag_pipeline(query: str, document_file: str): 运行完整的RAG管道。 print(f开始处理查询{query}) # 1. 加载并索引文档在实际应用中索引通常只需构建一次 documents load_and_index_documents(document_file) # 2. 检索相关文档 relevant_docs retrieve_relevant_docs(query, documents) print(f检索到 {len(relevant_docs)} 个相关文档。) # 3. 构建提示词 prompt build_prompt(query, relevant_docs) print(构建的提示词片段, prompt[:100] ...) # 4. 调用LLM response call_llm_api(prompt) # 5. 返回最终答案 print(LLM生成的答案, response) return response if __name__ __main__: # 运行示例 question 请告诉我Python是什么 answer run_rag_pipeline(question, data/sample_docs.txt)4.3 运行与初步分析运行程序python main.py。你将在控制台看到执行日志同时当前目录下会生成trace.db文件。打开 DB Browser for SQLite查看spans表。这次你会看到一次完整的、有层次结构的追踪记录一个名为rag_pipeline的根 Span。其下是load_and_index_documentsSpan。load_and_index_documents内部又多次调用了get_embedding为每个文档生成向量。然后是retrieve_relevant_docsSpan它内部也调用了get_embedding为查询生成向量。接着是build_prompt和call_llm_api。这种父子关系通过parent_span_id字段清晰地联系起来完整地再现了整个管道的调用栈。5. 高级用法与最佳实践掌握了基础用法后我们来看一些提升追踪效果和效率的高级技巧和工程实践。5.1 自定义属性记录更多上下文默认情况下OpenSmith 会记录函数的参数。但有时我们想记录一些额外的信息比如中间计算结果、模型名称、版本号等。可以使用record_attribute方法。from opensmith import trace, record_attribute trace def retrieve_relevant_docs(query: str, documents: list, top_k: int 2) - list: query_embedding get_embedding(query) similarities [] for doc in documents: doc_vec np.array(doc[embedding]) query_vec np.array(query_embedding) cosine_sim np.dot(doc_vec, query_vec) / (norm(doc_vec) * norm(query_vec) 1e-8) similarities.append((cosine_sim, doc)) similarities.sort(keylambda x: x[0], reverseTrue) top_docs [doc for sim, doc in similarities[:top_k]] # 记录自定义属性 record_attribute(retrieval.top_k, top_k) record_attribute(retrieval.max_similarity, similarities[0][0] if similarities else 0.0) record_attribute(retrieval.query_embedding_length, len(query_embedding)) return top_docs这些自定义属性会被保存在对应 Span 的attributes字段中后续分析时非常有用例如可以快速筛选出相似度较低的检索结果进行分析。5.2 追踪异常信息当 Pipeline 中的某个步骤抛出异常时OpenSmith 会自动捕获并记录该异常信息并将该 Span 的状态标记为error。这对于后期排查线上问题或调试至关重要。trace def potentially_failing_step(data): if not data: raise ValueError(输入数据不能为空) # ... 正常处理逻辑在spans表中该步骤的status会是error并且在events或相关字段中会包含异常的详细信息类型、消息、堆栈跟踪。5.3 性能分析与优化OpenSmith 精确记录了每个 Span 的开始和结束时间这使得它成为一个简单的性能分析工具。你可以通过 SQL 查询轻松找出瓶颈。在 DB Browser for SQLite 中执行以下 SQLSELECT name, (julianday(end_time) - julianday(start_time)) * 24 * 3600 as duration_seconds FROM spans WHERE trace_id 你的某次TraceID ORDER BY duration_seconds DESC;这条语句会列出指定一次运行中所有步骤的耗时从高到低排序。你可以快速定位到是检索慢、嵌入计算慢还是 LLM 调用慢从而有针对性地进行优化。5.4 工程化最佳实践有选择地追踪不是所有函数都需要追踪。专注于追踪 Pipeline 中的核心组件、耗时操作以及容易出错的环节。过度追踪会增加存储开销并可能影响性能。命名要有意义使用trace(namedescriptive_name)或上下文管理器中的描述性字符串让 Span 的名称清晰易懂便于后续查询和分析。管理数据库文件对于长期运行或高频调用的应用trace.db文件会不断增大。建议定期归档或清理旧的追踪数据或者配置 OpenSmith 使用不同的数据库文件路径。与日志系统结合OpenSmith 用于记录结构化的执行链路信息而传统的日志如logging模块更适合记录详细的调试信息、业务事件等。两者可以互补。敏感信息处理默认情况下函数参数会被记录。如果参数中包含密码、API密钥等敏感信息务必谨慎。可以考虑在函数内部对参数进行脱敏后再记录自定义属性或者查阅 OpenSmith 文档看是否支持过滤特定参数。6. 常见问题与排查指南在使用 OpenSmith 的过程中你可能会遇到一些典型问题。下面列出了一些常见情况及其解决方法。问题现象可能原因解决思路运行后没有生成trace.db文件1. 代码中没有添加trace装饰器或上下文管理器。2. 程序在执行到被追踪函数前就已退出如语法错误。3. 当前工作目录没有写权限。1. 检查是否在需要追踪的函数上正确添加了装饰器。2. 确保程序能正常执行到被追踪的部分。3. 检查当前目录权限或尝试指定一个绝对路径给 OpenSmith 的配置。数据库文件很大打开缓慢追踪数据积累过多。1. 定期归档或删除旧的trace.db文件。2. 评估是否追踪了过于细粒度的函数适当减少追踪范围。DB Browser 中看不到预期的追踪数据1. 数据库被其他进程锁定如未退出的Python程序。2. 浏览器缓存了旧的数据视图。1. 确保生成追踪数据的Python程序已经退出。2. 在 DB Browser 中刷新数据库File - Reopen Database。自定义属性没有记录record_attribute方法在不活跃的 Span 上下文中调用。确保record_attribute的调用发生在被trace装饰的函数内部或者with trace(...):的代码块内部。追踪对性能有显著影响追踪本身有开销特别是频繁调用的小函数。1. 遵循“有选择地追踪”原则只追踪关键步骤。2. 对于性能极度敏感的场景可以考虑仅在调试阶段开启追踪。7. 总结OpenSmith 作为一个专注于本地 LLM Pipeline 追踪的工具以其轻量、易用和隐私安全的特点为开发者调试和优化复杂 AI 应用提供了强大的支持。通过本文的讲解和实战你应该已经能够理解其价值认识到在本地清晰洞察 LLM 管道数据流和性能的重要性。完成环境搭建正确安装 OpenSmith 和可选的可视化工具。掌握核心API熟练使用trace装饰器和上下文管理器来标记追踪点。进行实战集成在一个完整的 RAG 管道中成功集成 OpenSmith并生成结构化的追踪数据。运用高级技巧通过自定义属性、异常追踪和性能分析来深化使用。规避常见陷阱了解并能够解决使用过程中遇到的一般性问题。下一步你可以尝试将 OpenSmith 应用到你自己的 LLM 项目中无论是简单的聊天机器人还是复杂的企业级应用。从追踪一个核心函数开始逐步扩大范围你会发现它对理解系统行为、加速开发迭代的巨大帮助。

相关新闻

libsvm python模型秒变API?MLServer这招绝了,不用Flask也能跑

libsvm python模型秒变API?MLServer这招绝了,不用Flask也能跑

你有没有碰到过这种情形, 就是当你训练好了一个新的模型之后, 有时候你不想费神去编写那个Flask Code(也就是web框架), 也不想把模型进行容器化并且在某个环境里运行它, 只是想要借助API马上就能使用这个模型?要是你存在这样的需求, 那必然是会希望去了…

2026/7/29 2:30:19阅读更多 →
基于热释电红外传感器与Arduino的智能安防报警系统DIY全攻略

基于热释电红外传感器与Arduino的智能安防报警系统DIY全攻略

1. 项目概述:从“被动防御”到“主动预警”的跨越提起家庭或小型场所的安全防护,很多人第一时间想到的是摄像头。但摄像头更多是“事后追溯”的工具,它记录下发生了什么,却无法在入侵发生的瞬间发出即时警报。而红外报警装置&…

2026/7/29 2:30:19阅读更多 →
基于Arduino与状态机的智能红绿灯系统设计与实现

基于Arduino与状态机的智能红绿灯系统设计与实现

1. 项目概述:从“拍脑袋”到“动手做”的智能路口构想每次在路口等红绿灯,看着空无一人的斑马线和倒计时几十秒的红灯,心里总会冒出个念头:这时间是不是有点浪费?尤其是深夜或者车流稀少的时段,让行人干等那…

2026/7/29 2:30:19阅读更多 →
Unity iOS内购服务器端验证:从原理到Node.js实战,构建安全支付系统

Unity iOS内购服务器端验证:从原理到Node.js实战,构建安全支付系统

1. 项目概述:为什么后台验证是IAP的“生命线”做Unity游戏内购,尤其是面向iOS平台,很多开发者朋友可能觉得,只要在Unity里把IAP插件配好,客户端能弹出购买窗口、能收到购买成功的回调,这事儿就算成了。如果…

2026/7/29 3:52:35阅读更多 →
SpringBoot+Vue2智能垃圾分类系统开发实战

SpringBoot+Vue2智能垃圾分类系统开发实战

1. 项目概述:SpringBoot智能垃圾分类管理系统的核心价值这套基于SpringBootVue2的智能垃圾分类管理系统源码,是我在参与某市智慧社区建设项目时沉淀下来的实战成果。系统通过图像识别与数据联动,实现了从垃圾投放到清运调度的全流程数字化管理…

2026/7/29 3:52:35阅读更多 →
电力电子器件串并联实战:从均压均流原理到IGBT/MOSFET布局避坑指南

电力电子器件串并联实战:从均压均流原理到IGBT/MOSFET布局避坑指南

1. 项目概述:为什么器件串并联是电力电子工程师的必修课?干了十几年电力电子,从做小功率开关电源到搞大功率变频器,有一个话题是绕不开的,那就是器件的串联和并联。乍一看,这好像是个基础得不能再基础的问题…

2026/7/29 3:52:35阅读更多 →
STM32 ADC从原理到实战:高精度数据采集与DMA应用详解

STM32 ADC从原理到实战:高精度数据采集与DMA应用详解

1. 项目概述:从模拟世界到数字世界的桥梁玩过STM32的朋友,肯定都听过“AD转换”这个词。听起来挺高大上,但说白了,它就是单片机的“耳朵”和“眼睛”。我们生活的世界是连续的、模拟的,比如温度的变化、声音的强弱、光…

2026/7/29 3:52:35阅读更多 →
环保AI模型正在被黑客逆向?(2024Q2攻防实测报告首发):3类侧信道攻击暴露、轻量化加密加固方案与等保2.0三级适配清单

环保AI模型正在被黑客逆向?(2024Q2攻防实测报告首发):3类侧信道攻击暴露、轻量化加密加固方案与等保2.0三级适配清单

更多请点击: https://codechina.net 第一章:环保AI模型安全态势总览 环保AI模型正逐步成为绿色计算与可持续人工智能发展的关键载体,其安全态势不仅关乎传统AI系统的鲁棒性与隐私性,更深度耦合能源效率、碳足迹透明度及生命周期可…

2026/7/29 3:52:35阅读更多 →
Spring AI Alibaba 的 PoiDocumentReader 把 docx 灌进向量库,跑起来直接抛异常

Spring AI Alibaba 的 PoiDocumentReader 把 docx 灌进向量库,跑起来直接抛异常

— 一次 POI 版本不一致导致的 SPI 加载异常排查记录 — 一、问题现场 今天用 Spring AI Alibaba 的 PoiDocumentReader 把 docx 灌进向量库,跑起来直接抛异常: Your InputStream was neither an OLE2 stream, nor an OOXML stream or you havent prov…

2026/7/29 3:50:34阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →