Java实现论文查重系统:余弦相似度算法与Spring Boot服务封装实战

发布时间:2026/10/8 8:28:20

Java实现论文查重系统:余弦相似度算法与Spring Boot服务封装实战 简介这是一份基于Java实现的论文查重系统源码与配套工程面向需要理解文本相似度计算、余弦相似性算法落地及完整查重流程的开发者或学生。系统覆盖分词、去除停用词、词干提取、TF-IDF权重构建、倒排索引匹配等关键环节并涉及Java多线程处理、用户界面设计、安全隐私及性能优化思路适合作为毕业设计、课程项目或算法学习参考。压缩包共106个文件以41个java源码与26个jar依赖为主附带png/gif界面设计图、properties配置文件、项目工程文件及开发日记整体约67.78MB结构较为完整便于导入IDE后对照阅读和二次开发。已有3854人学习下载。除核心查重逻辑外资源还呈现了从上传论文、文本预处理、文档向量化到计算余弦相似度并标记相似部分的完整流程同时提供开发记录帮助排错使用者可借此快速梳理项目脉络、理解各模块职责并在此基础上扩展功能。1. Java 论文查重是什么一个能直接嵌入教务系统的相似度服务很多刚接触论文查重的开发者以为它是拿论文去比对数据库跑一遍重复率就出来。真正做过才知道论文查重的核心是把两篇文档转成可计算的数字向量再判断它们“像不像”这就是文本相似度计算。用 Java 做这件事最大的优势不是算法炫而是能直接打包成 Spring Boot 服务嵌进学校教务系统、期刊投稿系统或企业内部文档审核流程查重结果能以 API 形式给别的业务调用。这个项目适合两类人一类是实验室里需要给导师搭一个论文预检工具的 Java 工程师另一类是正在做毕业设计、想完整走一遍“分词 → 向量化 → 相似度计算 → 接口封装”流程的学生。下面我会从算法选型开始到能跑的代码再到实际环境里的坑把“JAVA论文查重”这个方向完整拆开。2. 查重算法选型为什么我用余弦相似度而不是 SimHash2.1 三种常见相似度算法怎么选论文查重首先要选对相似度算法。常见做法是拿余弦相似度、SimHash、编辑距离三者比较。编辑距离适合短文本比如标题、摘要里的一句话对于几万字的论文计算代价太高基本不用于全文比对。SimHash 适合海量文档去重可以快速生成 64 位指纹但它的原理是“近似”对局部抄袭不敏感而且中文分词质量差时指纹很容易乱。余弦相似度基于词频向量符合人对“重复使用词汇”的直觉判断既能看到全局重复又能拆成段落细看所以工程上最常用。算法适合场景对局部抄袭计算开销Java 实现难度编辑距离短句、标题高高低但长文本不可用SimHash海量文档去重低低中需要做 64 位哈希余弦相似度论文整篇、段落级中中低依赖词频统计我一般会把余弦相似度作为主算法把 SimHash 放到后面的海明距离初筛里做加速。这里要说明一个关键点论文查重的“重复率”不是两篇全文的相似度而是要找到“某一段和某一段高度相似”。所以算法选型时最好能支持段落级计算。后续评分层的设计会回到这个需求上。2.2 最小实现HanLP 分词 词频向量计算相似度选定了余弦相似度第一步是分词。中文和英文不同不能直接按空格切必须用分词器。Java 生态里HanLP 是比较好用的选择自带标准分词、NLP 分词、自定义词典Maven 引入即可。下面是两篇短文本的最小查重实现用 HanLP 分词后统计词频再计算余弦相似度。import com.hankcs.hanlp.HanLP; import com.hankcs.hanlp.seg.common.Term; import java.util.HashMap; import java.util.List; import java.util.Map; public class MinPaperChecker { public static MapString, Integer vectorize(String text) { MapString, Integer freq new HashMap(); ListTerm terms HanLP.segment(text); for (Term term : terms) { String word term.word.trim(); if (word.length() 1) { continue; } freq.put(word, freq.getOrDefault(word, 0) 1); } return freq; } public static double cosine(MapString, Integer v1, MapString, Integer v2) { double dot 0, norm1 0, norm2 0; for (Map.EntryString, Integer entry : v1.entrySet()) { String word entry.getKey(); int count entry.getValue(); if (v2.containsKey(word)) { dot count * v2.get(word); } norm1 count * count; } for (int count : v2.values()) { norm2 count * count; } if (norm1 0 || norm2 0) { return 0; } return dot / (Math.sqrt(norm1) * Math.sqrt(norm2)); } public static void main(String[] args) { String a 基于Java的论文查重系统设计与实现; String b 使用Java实现的论文查重系统设计和实现; System.out.println(cosine(vectorize(a), vectorize(b))); } }这段代码里有三个重点第一HanLP.segment 返回的是 Term 列表代码里只取了 word忽略了词性。第二词频向量是 HashMapkey 是词value 是出现次数这种稀疏表示在论文长度下内存可以接受。第三余弦相似度公式里只统计 v1 的范数时恰好 v2 的范数单独算这是因为两个向量可能词表不同但要统一到所有词的空间所以计算内积时只取交集。这个最小实现能跑但直接用于论文查重会出现很多误判。原因很简单它没有过滤停用词也没有考虑词频过低的噪声词。比如中文里的“的”“了”“是”会同时出现在两篇无关论文中把相似度抬高。下一步必须加停用词表和词频过滤。2.3 参数怎么调切词粒度、停用词表和最低词频阈值在正式接入论文库之前参数配置比算法本身更影响结果。第一个参数是切词粒度。HanLP 默认的标准分词已经够用但论文里会出现大量专业术语比如“支持向量机”标准分词可能切成“支持”“向量”和“机”。解决办法是加载自定义词典或者用 HanLP 的 N-gram 模型。切词粒度太细会把术语拆碎太粗又会漏掉同义表达。我一般先用标准分词跑一遍看结果里术语是否被切错再手动加自定义词典。第二个参数是停用词表。网上可以找到常见的中文停用词表但论文场景需要额外处理“文中”“如下”“文献”“研究”这类高频连接词。停用词表不是越多越好太激进会把“方法”“数据”“论文”这类正常主题词也过滤掉导致相似度偏低。第三个参数是最低词频阈值。在段落级查重时只出现一次的词往往不是核心特征可以在向量化时直接丢弃让相似度判断更稳健。// 在 vectorize 里增加停用词过滤和最低词频限制 public static MapString, Integer vectorize(String text, SetString stopWords, int minFreq) { MapString, Integer freq new HashMap(); ListTerm terms HanLP.segment(text); for (Term term : terms) { String word term.word.trim(); if (word.length() 1 || stopWords.contains(word)) { continue; } freq.put(word, freq.getOrDefault(word, 0) 1); } freq.entrySet().removeIf(e - e.getValue() minFreq); return freq; }这里的 minFreq 一般取 2段落长度较短时取 1 也可以。停用词表的构建要放在项目里作为独立文件比如 stopwords.txt不要每次启动都去网络加载否则离线环境会翻车。参数调完最小查重逻辑就能用但要在真实论文上跑还需要把预处理、向量化和评分拆成三个独立模块这样后期换算法才不用改业务代码。3. 把查重逻辑封装成模块预处理、向量化、评分三件套3.1 预处理层PDF 文本噪声清理与全角转半角论文查重系统拿到的输入往往不是干净文本而是从 PDF、Word 或 LaTeX 导出的文件。PDF 里经常出现意外换行、全角空格、不可见控制字符这些如果不处理分词会把“神经网 络”切错。预处理层就是把原始文本统一成“半角 归一化换行 去除控制字符”的标准格式。public class Preprocessor { public static String normalize(String raw) { if (raw null) { return ; } // 全角转半角 StringBuilder sb new StringBuilder(); for (char c : raw.toCharArray()) { if (c \u3000) { sb.append( ); } else if (c \uFF01 c \uFF5E) { sb.append((char) (c - 0xFEE0)); } else { sb.append(c); } } String normalized sb.toString(); // 统一换行符去掉回车和制表符造成的中断 normalized normalized.replaceAll(\r\n, \n).replaceAll(\\r, \n).replaceAll(\\t, ); // 去掉控制字符保留常见标点 normalized normalized.replaceAll([\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F], ); return normalized; } }这段代码做了三件事全角空格转半角、全角标点转半角、统一换行后删除控制字符。全角转半角的范围 \uFF01 到 \uFF5E 覆盖了常用全角标点和字母ASCII 的 0x20 是空格所以不用转。控制字符正则删掉了换行制表之外的所有不可见字符避免 PDF 提取出的垃圾字节干扰分词。预处理阶段还要处理 PDFBox 提取文本时的“单词内部换行”问题。PDF 排版中一行文字被硬断成两行提取后单词中间出现 \n。我常用的策略是如果换行符前后都是英文字母或数字就直接删除这个换行符如果是中文则保留换行因为中文句子本身不需要分词空格。这个逻辑可以加在 normalize 之后。3.2 向量化层TF 与 TF-IDF 两种策略的选择向量化是把文本变成数字。最简单的 TF 策略就是统计词频上一节的最小实现已经在用。但 TF 策略有个问题两篇不同专业的论文都会高频出现“研究”“方法”“结果”“分析”这类通用词这些词会让相似度虚高。TF-IDF 能解决这个问题IDF 表示一个词在整个论文库中的区分能力越通用权重越低。public class Vectorizer { private MapString, Double idfMap new HashMap(); // 使用已有论文库计算 IDF public void buildIdf(ListString corpus) { int total corpus.size(); MapString, Integer docFreq new HashMap(); for (String doc : corpus) { SetString uniqueWords new HashSet(vectorize(doc).keySet()); for (String word : uniqueWords) { docFreq.put(word, docFreq.getOrDefault(word, 0) 1); } } for (Map.EntryString, Integer entry : docFreq.entrySet()) { double idf Math.log((total 1.0) / (entry.getValue() 1.0)) 1.0; idfMap.put(entry.getKey(), idf); } } public MapString, Double tfIdfVectorize(String text) { MapString, Integer tf vectorize(text); MapString, Double result new HashMap(); for (Map.EntryString, Integer entry : tf.entrySet()) { String word entry.getKey(); double idf idfMap.getOrDefault(word, 1.0); result.put(word, entry.getValue() * idf); } return result; } private MapString, Integer vectorize(String text) { // 复用 HanLP 停用词过滤逻辑 return MinPaperChecker.vectorize(text, stopWords, 2); } }这里buildIdf需要预先读取一批论文语料语料规模越大IDF 越稳定。如果一开始没有语料可以先用 TF 策略上线等到系统积累了上千篇论文后再训练 IDF。工程里要注意TF-IDF 的向量变成了 double余弦相似度公式中的范数和内积也要改成 double 运算。另一个容易踩坑的点是IDF 应该在每次新增论文库后重算否则新词永远拿不到合理的权重。3.3 评分层全局相似度 段落级相似度双路判定只算整篇论文的相似度会掩盖局部抄袭。一篇两万字的论文抄了其中三千字整体相似度可能只有 20%看起来不严重但那三千字恰恰是核心章节。评分层要把文本先按段落或句子拆开对每一段计算相似度再和全局相似度汇总。public class PaperScorer { public double globalSimilarity(MapString, Double vec1, MapString, Double vec2) { return cosine(vec1, vec2); } public double paragraphSimilarity(String doc1, String doc2) { ListString paragraphs1 splitParagraphs(doc1); ListString paragraphs2 splitParagraphs(doc2); double maxScore 0; // 对每个段落找最优匹配段落取最高值 for (String p1 : paragraphs1) { for (String p2 : paragraphs2) { if (p1.length() 10 || p2.length() 10) { continue; } MapString, Integer v1 MinPaperChecker.vectorize(p1); MapString, Integer v2 MinPaperChecker.vectorize(p2); double score MinPaperChecker.cosine(v1, v2); if (score maxScore) { maxScore score; } } } return maxScore; } private ListString splitParagraphs(String text) { // 按换行和中文句号拆成片段并过滤太短的片段 String[] parts text.split([\n。]); return Arrays.stream(parts).filter(p - p.trim().length() 10).collect(Collectors.toList()); } }段落级相似度采用“段落对段落”的双重循环复杂度是段落数的平方但论文段落通常只有几十个性能可以接受。最终判定时我会同时看全局分数和段落最高分数全局分数能看出整体重复程度段落最高分能抓住局部抄袭。比如全局相似度 0.35但某一段相似度 0.95那基本就是整段复制后台应该标红。4. Java 论文查重避坑指南5 个让检测结果翻车的细节4.1 整篇复制却查不出来全局向量被长文本稀释我遇到过最奇怪的现象一篇论文几乎整篇复制查出来相似度只有 0.4反而两篇小摘要相似度有 0.9。原因是论文越长词汇表越大共有词占所有词的比例被稀释。比如两篇文章都有“的”“了”“研究”这些基础词但真正相同的专业词占比不高。解决方法是采用 3.3 节的段落级双路判定把长文本拆成短片段局部重复自然暴露。同时调整停用词表把“论文”“本章”“如下”这类论文通用连接词过滤掉。4.2 改几个同义词就漏报词袋模型对同义替换不敏感同学把“机器学习”改成“人工智能”把“算法”改成“方法”相似度从 0.9 掉到 0.5这是词袋模型的天然缺陷。词袋模型只认词面匹配不认语义。解决思路有两种第一种是在向量化前加入同义词替换把同义词映射到同一个标准词第二种是引入词向量把每个词的 one-hot 向量替换成 Word2Vec 向量再用平均词向量计算语义相似度。工程上第一种更可控因为你可以在同义词表里按论文领域自定义。4.3 高频虚词干扰停用词表不全导致虚高相似度只过滤了“的”“了”“是”但没过滤“进行”“可以”“我们”“本文”结果两篇毫无关系的论文相似度也达到 0.6。中文论文里有大量套话比如“本文首先介绍了……然后……最后……”。这些套话是默认连接词所有论文都会写属于噪声特征。需要准备一份论文专用停用词表覆盖“针对”“相关”“以来”“随着”“基于”等词。如果项目已经上线可以统计高频词时人工过滤一批。4.4 PDF 文本提取乱码扫描版 PDF 不能用 PDFBox 直接读PDFBox 提取文字只对文本型 PDF 有效。扫描版论文是图片PDFBox 会输出一堆乱码或空白查重结果直接翻车。真正能做的是加一层 OCR比如调用 Tesseract 或者百度 OCR 的 Java SDK把扫描件转成文本再做后续处理。OCR 本身不完美所以我把“PDF 预处理”和“OCR 服务”拆成两个独立接口方便替换供应商。另一个坑是 PDF 里的公式变成特殊字符可以在分词前把数学公式、引用编号用正则替换成统一占位符避免干扰相似度。4.5 两两比对太慢O(n²) 性能瓶颈与初步优化论文库里有几千篇论文时每来一篇新论文都要和全部论文算一次余弦相似度课设能跑生产就崩。初步优化是“倒排索引 候选集”思路先提取新论文的 TF-IDF 高权重词只去论文库里找包含这些词的文档计算相似度跳过完全不包含的文档。这样能把候选集从几千篇缩小到几十篇。更进一步可以为每篇论文生成 SimHash 指纹在内存里按海明距离做初筛距离小于阈值的才进入余弦相似度计算。这个优化在下一章会说到。5. 做成查重服务Spring Boot API 与批量检测任务5.1 用 REST API 暴露单篇查重能力把查重模块封装成 Spring Boot 服务后前后端或其他系统就可以通过 HTTP 接口调用了。接口输入两段文本输出相似度分数、风险等级和重复段落。这里要设计好输入输出格式否则后续接前端会很痛苦。RestController RequestMapping(/api/check) public class PaperCheckController { private final PaperScorer scorer new PaperScorer(); PostMapping(/similarity) public Result check(RequestBody CheckRequest request) { MapString, Double vec1 request.getVectorizer().tfIdfVectorize(request.getText1()); MapString, Double vec2 request.getVectorizer().tfIdfVectorize(request.getText2()); double global scorer.globalSimilarity(vec1, vec2); double paragraph scorer.paragraphSimilarity(request.getText1(), request.getText2()); return new Result(global, paragraph, riskLevel(global, paragraph)); } private String riskLevel(double global, double paragraph) { if (paragraph 0.75 || global 0.8) { return high; } if (global 0.5) { return medium; } return low; } }这个接口把 3.2 节的 Vectorizer 和 3.3 节的 PaperScorer 组合起来。注意 CheckRequest 里必须包含 Vectorizer 实例否则每次请求都重新构建停用词表性能很差。风险等级不能只看全局相似度段落相似度超过 0.75 就应当判高风险。返回给前端时除了分数建议带上“重复段落原文片段”方便人工复核。5.2 批量查重的异步线程池与结果落库批量查重场景下比如老师一下子提交 30 篇学生论文做预检同步 HTTP 接口会等很久。常见做法是把批量任务丢到线程池每个任务单独跑查重结果写到数据库里前端轮询任务状态。线程池大小要根据 CPU 核数和文本长度调整默认 4 个线程就够。Service public class BatchCheckService { private final ExecutorService pool Executors.newFixedThreadPool( Runtime.getRuntime().availableProcessors()); public void submitBatch(ListPaper papers) { for (Paper paper : papers) { pool.submit(() - { try { // 查重并写库 CheckResult result doCheck(paper); paper.setSimilarity(result.getGlobalScore()); paperDao.update(paper); } catch (Exception e) { log.error(check failed: {} paper.getId(), e); } }); } } }这里有个隐藏坑线程池里共享 HanLP 分词器实例是安全的因为它底层不持有会话状态但 TF-IDF 的 idfMap 是全局共享的如果一边在批量跑查重一边训练 IDF 模型就会产生数据竞争。建议把 idfMap 设置成不可变对象训练完成后替换整个实例而不是在原有 Map 上 put。5.3 查重率阈值怎么定相似度分数和风险等级的关系很多客户问“相似度多少算重复”其实没有绝对答案。学校查重通常用“重复率”这个概念它指的是论文中被判定为重复的字符数占总字符数的比例和两篇全文字级相似度不是一回事。在内部系统里我会用相似度分数做参考大于 0.9 是整段逐字复制0.7 到 0.9 是大段复制但改了部分措辞0.4 到 0.7 是局部相似低于 0.4 基本安全。但最终报告应该把相似度转换成“重合字数”和“重复位置”比如“第三章 3.2 节与网络来源重复 3000 字”。相似度区间风险等级建议人工处理0.9 - 1.0高危直接查重写0.7 - 0.9偏高逐段核对引用是否规范0.4 - 0.7中等检查是否有未标注引用0.0 - 0.4安全常规保存阈值表要放在配置文件里因为不同学校要求不同有的学校要求总重复率低于 30%有的要求低于 20%。把阈值做成可配置项比硬编码在代码里更稳妥。6. 验证与进阶用回归集压住误判再用 SimHash 提速6.1 最小回归集设计与验证脚本查重系统改完算法后不能只看一两篇论文的效果必须有回归集。我维护了一个很小的回归测试集包含 5 类样本原文复制、同义词改写、段落顺序调整、无关论文、引用拼接。每次改完参数跑一遍回归保证原来能查出的还能查出原来误判的不要加重。实现方式很简单写一个 Main 方法对每对样本调用查重服务用断言检查相似度是否落在预期区间。public class RegressionTest { public static void main(String[] args) { // 预期复制文本相似度 0.9 assertSimilarity(复制文本, 0.9, 1.0); // 预期同义词改写相似度在 0.5-0.8 assertSimilarity(同义词改写, 0.5, 0.8); // 预期无关论文相似度 0.4 assertSimilarity(无关论文, 0.0, 0.4); } private static void assertSimilarity(String caseName, double min, double max) { // 从资源文件读入样本调用查重服务 double score PaperCheckApp.check(sampleA(caseName), sampleB(caseName)); if (score min || score max) { throw new AssertionError(caseName 不在预期区间: score); } System.out.println(caseName 通过); } }回归集的价值在于阈值调整时心里有底。比如你为了压制误判把停用词表扩大有可能把同义词改写的检测能力也降下来回归集会在第一时间把这种变化暴露出来。6.2 进一步提速64 位 SimHash 与海明距离初筛当论文库增长到上万篇余弦相似度即使加了倒排索引全库扫描仍然吃力。这时候采用 SimHash 做粗筛是常见做法将每篇论文生成 64 位指纹新论文也生成指纹两两之间计算海明距离距离小于等于 3 才进入余弦相似度精排。SimHash 的原理是把每个词哈希成 64 位按词频加权累加正位加 1负位减 1最后每一位按总和正负转成 0 或 1。import java.math.BigInteger; public class SimHash { public long hash(String text) { // 简化用词频加权叠加每一维 MapString, Integer vector MinPaperChecker.vectorize(text); int[] bits new int[64]; for (Map.EntryString, Integer entry : vector.entrySet()) { BigInteger hash BigInteger.valueOf(entry.getKey().hashCode()); int weight entry.getValue(); for (int i 0; i 64; i) { BigInteger bit hash.and(BigInteger.ONE.shiftLeft(i)).shiftRight(i); bits[i] bit.equals(BigInteger.ONE) ? weight : -weight; } } long result 0; for (int i 0; i 64; i) { if (bits[i] 0) { result | 1L i; } } return result; } public int hammingDistance(long a, long b) { return Long.bitCount(a ^ b); } }这段代码用了 BigInteger 做位运算实际生产建议用 long 数组实现效率更高。Java 的 hashCode 质量对中文词来说足够但不稳定更严谨的做法是给每个词分配一个 64 位 MurmurHash。SimHash 不是银弹它会把相似但不同序的文本误判为不同所以只用来缩小候选集最终判定还是要回到余弦相似度。做查重系统这几年我最大的教训是不要迷信某一个算法的输出。第一版只算全局相似度被整篇复制漏报狠狠坑了一次后来加了段落级判定又发现同义词改写判断太严格把引用规范的论文也标红。查重本质上是一个“宁可错杀一千也不漏掉一个”的场景但“错杀”会让系统被老师骂不专业。最后我习惯的做法是算法给出分数人工规则给出风险等级报告里必须附上重复片段原文让审核者有据可查。希望这份从选型到落地的清单能帮你在 Java 论文查重这条路上少走几个弯路。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/10/8 8:28:20

Unraid精英版实战:U盘引导与Docker打造个人云全攻略

简介:这份 unraid 精英版.zip 是面向个人云存储与 NAS 搭建爱好者的 unraid 系统资源包,适合想体验灵活硬盘阵列、媒体中心与虚拟机托管等家庭数据中心功能的初学者及小型企业用户。压缩包共 141 个文件,整体约 295.66MB,涵盖 bzi…

2026/10/8 8:28:20

Text-to-CAD实战:从自然语言到可编辑三维参数化模型

在CAD建模这个圈子里,这几年“AI替代人工画图”的话题一直很热,但真正让我觉得有质变意义的,是最近集中爆发的text-to-cad方向。先说人话:这个技术就是把“给我一个带加强筋的L型支架,壁厚3mm,带四个直径6m…

2026/10/8 9:28:58

Text-to-CAD:从自然语言到可制造工程模型的技术落地路径

1. “Text-to-CAD”不是又一个AI画图玩具,而是工程设计链路的断点重构“text-to-cad”这个词最近在工程师群、CAD插件讨论区和高校机器人实验室里频繁冒头,但多数人第一反应是:“这不就是用文字生成CAD模型?跟MidJourney画图差不多…

2026/10/8 9:28:58

Ponytail CLI:轻量级API调试终端工具实战指南

1. 项目概述:从“ponytail”热词切入,还原一个被误读的实用工具本质 最近刷到不少人在问“ponytail插件怎么用”,点开评论区全是“找不到下载”“安装失败”“是不是病毒”,甚至有人把“ponytail”和某类浏览器扩展、桌面美化工具…

2026/10/8 9:28:58

Agent-Reach实战:打通多Agent协作的注册、路由与上下文传递

上个月我们在生产环境里做了一次非常难看的实验:两个AI Agent各自负责一段业务闭环,A负责接收用户需求,B负责执行数据回流,结果A在大模型能力上表现很好,却怎么也够不到B的接口。最后我从日志里翻出来,A在上…

2026/10/8 9:28:58

软件测试面试题攻略:四大底层能力与高频考点拆解

1. 先把话说在前面:面试题这东西,到底该怎么刷做了这么多年测试,也面试过不少人,我越来越觉得"软件测试面试题"这个关键词背后,藏着两种完全不同的需求。一种是刚入行或者准备跳槽的朋友,想找一份…

2026/10/8 9:28:58

计算机网络技术备考:用真题吃透TCP/IP与子网掩码核心考点

简介:《计算机网络技术》考试试题及答案PDF,面向高校计算机网络课程学习者、备考学生及自学者,以客观题和主观题相结合的形式覆盖核心考点。内容涉及数据通信与调制解调、交换方式(电路交换/报文分组交换/虚电路)、传输…

2026/10/8 9:23:55

Agent-Reach:为AI Agent构建统一工具触达层的架构实践

1. 项目背景与设计思路拆解 1.1 这个项目解决的是什么问题 先聊点实在的。做过AI Agent项目的朋友应该都有感受:模型本身的能力提升很快,但真正让Agent“干成事”的,往往是外围那几十个工具调用。今天接一个天气API,明天接一个数…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/7 8:18:33

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

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

2026/10/8 0:02:17

自然数立方等于连续奇数之和:从证明到编程验证

十几年来我一直游走在数学科普和编程教学这两块内容之间,对“看起来像魔法、拆开全是数学”的结论总是格外敏感。最近翻资料时又撞见一句话:任何一个自然数 m 的立方,都可以写成 m 个连续奇数之和。2 的立方等于 3 加 5,3 的立方等…

2026/10/8 0:02:17

C#上位机SSH连接实战:用SSH.NET补齐超时、批量与密钥认证

简介:这是一份基于 C# 开发的 SSH 连接功能半成品工程,原本作为另一个主项目的子功能模块,现独立打包分享。工程采用 WinForms 界面,包含源码、解决方案、安装部署工程、NuGet 依赖包及说明文档,适合正在做远程连接、网…

2026/10/8 0:02:17

Java SpringBoot一体化智能售后系统设计与实现全解析

毕业设计年年做,Java Web 方向的题目翻来覆去就那么几个,但“一体化智能售后系统”这个题,每次看到我都觉得值得认真聊一聊。它不是一个简单 curd 堆出来的管理系统,而是把客户、工单、派单、处理、回访、统计整条链路串起来的一套…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑