AI代码安全审计:从语义理解到DevSecOps落地的实践指南

news2026/5/3 2:53:54
1. 项目概述当AI成为代码审查员最近在开源社区和内部安全团队里一个叫kilogrametz/ai-security-audit的项目讨论度挺高。简单来说这是一个利用大语言模型LLM来自动化进行代码安全审计的工具。听起来是不是有点意思传统的安全审计要么靠安全专家手动一行行看代码费时费力要么依赖一些静态分析工具SAST但误报漏报是家常便饭规则库更新也总慢半拍。而这个项目试图让AI来扮演这个“安全审查员”的角色通过分析代码上下文智能地识别潜在的安全漏洞。我最初接触这个想法是因为团队里代码提交量激增安全人力完全跟不上。传统的SAST工具扫一遍报告里一堆“狼来了”的误报真正的高危漏洞可能又藏在复杂的业务逻辑里静态规则根本抓不到。ai-security-audit的出现像是一个新的解题思路它不依赖固定的漏洞模式库而是尝试理解代码的“意图”从而判断一段代码是否在“做危险的事情”。比如它不仅能发现明显的SQL注入拼接还能识别出经过多层封装、间接产生的命令注入风险或者上下文相关的权限绕过逻辑。这对于现代快速迭代的开发流程尤其是DevSecOps的落地提供了一个颇具潜力的自动化抓手。当然把AI用于安全审计绝不是简单地调个API完事。背后涉及到提示词工程、代码解析、上下文构建、结果可信度评估等一系列复杂问题。这个项目就是一个将这些环节串联起来的实践框架。接下来我就结合对这个项目思路的拆解和实际应用中的体会详细聊聊如何构建一个真正可用的AI安全审计工具里面有哪些门道以及我们踩过哪些坑。2. 核心设计思路超越模式匹配的智能审计2.1 从规则驱动到语义理解驱动传统静态应用安全测试工具的核心是“规则”。无论是正则表达式匹配敏感函数名还是数据流分析追踪污点传播本质都是预定义模式的匹配。这种方法的优势是速度快、确定性高但劣势也非常明显规则维护成本高无法理解业务逻辑对代码重构、新框架或冷门漏洞变种适应性差。ai-security-audit项目的核心思路转变在于它将审计任务从“模式匹配”转向了“语义理解”。它利用大语言模型对代码和自然语言强大的理解能力将代码片段、相关上下文如函数定义、类结构、导入语句以及一个精心设计的审计任务描述即提示词一起提交给模型。模型需要理解“这段代码在干什么”并基于通用的安全知识这些知识在训练时已被编码进模型参数中来判断“这么干是否安全”。举个例子传统工具可能有一条规则“检测os.system()调用且参数包含用户输入”。但如果代码是这样的def execute_command(user_input): # 一些复杂的清洗逻辑 cleaned_input some_complex_validation(user_input) if is_safe(cleaned_input): # 动态构建命令 cmd fecho {cleaned_input} subprocess.run(cmd, shellTrue) # 传统工具可能漏报传统工具可能因为没匹配到os.system或者数据流分析无法穿透复杂的some_complex_validation函数而漏报。而AI模型在接收到整个函数代码后可能会注意到subprocess.run与shellTrue的组合并且参数cmd中拼接了经过处理的用户输入cleaned_input。即使清洗逻辑看起来复杂模型基于对“命令注入”风险的通用理解仍有可能标记出此处为潜在风险并建议更安全的做法比如使用参数列表方式调用subprocess.run。注意这并不意味着AI是万能的。它的判断基于概率而非确定性的规则。因此其输出是“可能存在漏洞”的提示而非“肯定存在漏洞”的断言。这要求使用者必须具备解读和验证AI结果的能力。2.2 项目架构的关键组件拆解虽然我无法看到kilogrametz/ai-security-audit项目的全部源码但基于其项目名和常见实现模式一个完整的AI安全审计工具通常包含以下几个核心组件理解它们对后续的实操和调优至关重要代码解析与切片模块这是审计的“前处理”。工具需要解析目标代码如Python、JavaScript、Go等将其从文本转化为结构化的抽象语法树。更重要的是它需要将庞大的代码库切割成适合LLM处理的“上下文窗口”大小的片段。简单的按文件切割不行因为一个漏洞的上下文可能跨多个函数或文件。高级的做法会进行过程内或过程间的数据流分析将与一个“入口点”如API处理函数相关的所有代码路径收集起来形成一个完整的审计单元。提示词工程引擎这是项目的“大脑”或“指挥棒”。提示词的质量直接决定审计的准确性和深度。一个基础的提示词可能包括角色定义“你是一个资深网络安全专家和代码审计员。”任务描述“请仔细分析以下代码片段识别其中所有可能的安全漏洞、弱点或不良实践。请特别关注注入类漏洞、敏感信息泄露、不安全的反序列化、访问控制缺陷、加密误用等。”输出格式要求“对于每个发现的问题请按以下格式输出【严重等级】、【漏洞类型】、【位置】、【描述】、【修复建议】。”待审计代码将上一步准备好的代码片段放入。 更复杂的提示词会包含少量示例Few-shot Learning教模型如何识别特定漏洞。大语言模型接口层负责与具体的LLM API如OpenAI GPT-4、Anthropic Claude、开源Llama系列或本地部署的模型进行通信。这一层需要处理API调用、速率限制、错误重试、成本控制等。模型的选择是核心决策点需要在成本、速度、准确性和上下文长度之间权衡。结果后处理与聚合模块LLM返回的是自然语言文本。这个模块需要解析这些文本提取结构化的漏洞信息如位置、类型、严重性去重因为同一段代码可能被不同上下文片段多次分析并可能与企业现有的漏洞管理平台如Jira, GitHub Issues集成自动创建工单。反馈与迭代循环一个优秀的系统必须具备学习能力。审计人员对AI报告进行验证确认是真阳性还是误报这些反馈应该能用于优化提示词、调整代码切片策略甚至在有条件时用于微调专属的审计模型。3. 实操部署与核心配置详解了解了核心思路我们来看看如何具体搭建和配置这样一个系统。这里我会基于常见的开源技术栈给出一个可操作的方案你可以将其视为ai-security-audit类项目的一个实现参考。3.1 环境准备与模型选型首先你需要一个Python环境建议3.9和基本的开发工具。核心依赖通常包括tree-sitter及其语言语法库用于高效解析多种编程语言的AST。langchain或llama-index用于构建复杂的LLM应用链管理上下文和提示词模板。对应LLM的SDK如openai,anthropic,litellm后者是一个统一的多模型接口库。一个向量数据库可选如chromadb,qdrant用于当代码库巨大时实现基于语义的代码检索只将最相关的代码片段送入审计。模型选型是第一个关键决策模型类型代表优点缺点适用场景顶级闭源模型GPT-4, Claude-3 Opus理解能力、推理能力最强代码分析准确率高遵循指令好。API调用成本高数据需出境有合规风险有速率限制。对准确性要求极高、审计关键核心代码、不计成本。高性能开源模型DeepSeek-Coder, CodeLlama, Qwen-Coder可本地部署数据可控无使用成本仅有硬件成本上下文长。需要较强的GPU资源整体能力略逊于顶级闭源模型。企业内网环境、代码涉密、大规模常态化扫描、成本敏感。轻量级开源模型StarCoder, Phi-2资源需求低可在CPU或边缘设备运行速度快。代码理解和复杂推理能力有限可能漏报或误报率高。快速预览、个人开发者、对深度审计要求不高的辅助工具。实操心得对于初次尝试我建议从GPT-4或Claude-3的API开始。虽然贵但它能给你建立一个“效果上限”的基准让你知道AI审计能做到多好。在优化了提示词和工作流后再尝试用高性能开源模型如DeepSeek-Coder-33B进行本地化替代平衡成本与效果。3.2 构建高效的代码上下文直接把整个项目代码扔给LLM是不现实的上下文长度和成本都不允许。因此智能地切片和构建上下文是成败的关键。策略一基于AST的函数/方法级切片这是最基础的方法。使用tree-sitter解析代码提取出所有独立的函数或方法定义。将每个函数与其直接的上下文如所属的类名、导入的模块一起作为审计单元。这种方法简单但可能丢失跨函数的漏洞链。策略二基于入口点的调用链分析更高级的方法是先识别“入口点”如Web框架中的路由处理函数、对外暴露的API方法、命令行工具的main函数。然后通过静态分析可以是简单的符号跟踪也可以用更专业的工具如pycgfor Python找出从这个入口点开始所有可能被调用到的函数形成一个“调用子树”。将这个子树的所有代码合并为一个上下文。这样审计时AI就能看到完整的逻辑链路。策略三结合向量检索的语义切片对于大型单体仓库可以先将所有代码块函数、类转换成向量嵌入存入向量数据库。当审计一个特定入口点时不仅提取其调用链还用这个入口点的代码描述去向量数据库中检索语义上相似的其他代码块可能没有直接的调用关系但功能相关一并送入审计。这有助于发现“模式重复”的漏洞。示例一个简单的函数切片器Python tree-sitterimport tree_sitter_python as tspython from tree_sitter import Language, Parser # 加载Python语言 PYTHON_LANGUAGE Language(tspython.language()) parser Parser(PYTHON_LANGUAGE) def extract_functions(code): tree parser.parse(bytes(code, utf8)) root_node tree.root_node functions [] # 查询所有函数定义节点 query PYTHON_LANGUAGE.query( (function_definition name: (identifier) func_name body: (block) func_body) func_def ) captures query.captures(root_node) # 简单按节点位置提取代码 for node, _ in captures: if node.type function_definition: func_code code[node.start_byte:node.end_byte] functions.append(func_code) return functions # 使用示例 code_text import os def unsafe_exec(data): cmd ls data os.system(cmd) # 高危 def safe_func(): print(hello) for func in extract_functions(code_text): print(--- 审计函数 ---) print(func) # 这里可以将 func 送入LLM进行审计3.3 设计高命中率的审计提示词提示词是引导AI工作的剧本。一个糟糕的提示词会让最强大的模型也表现平平。基础提示词模板你是一个经验丰富的应用程序安全工程师擅长在代码中寻找安全漏洞。 请分析以下 [编程语言] 代码找出所有可能的安全漏洞、弱点或不良的安全实践。请重点关注 1. 注入漏洞SQL注入、NoSQL注入、命令注入、LDAP注入等。 2. 敏感数据泄露硬编码密钥、日志泄露敏感信息、错误的异常信息暴露。 3. 不安全的反序列化。 4. 访问控制缺陷缺失权限检查、不安全的直接对象引用。 5. 加密相关误用弱哈希算法、自定义加密、IV复用等。 6. 依赖项中的已知漏洞如果上下文提供了依赖信息。 对于每一个你发现的问题请提供 - **漏洞类型** - **风险等级**[高危/中危/低危/信息] - **代码位置**尽可能精确如函数名、行号 - **问题描述**简明解释为什么这是一个安全问题。 - **修复建议**提供具体的代码修复方案或安全实践建议。 请只报告你确信的安全问题避免过度猜测。如果代码看起来是安全的请输出“未发现明显安全问题”。 待审计代码{code_snippet}进阶优化技巧角色扮演与链式思考Chain-of-Thought在提示词开头要求模型“逐步推理”。例如“首先梳理代码的数据流识别所有用户可控的输入源。其次分析这些输入流经了哪些危险函数如执行命令、查询数据库、渲染模板。最后判断是否存在未经验证或清洗的输入到达了危险函数。”提供正反示例Few-shot Learning在提示词中给出一两个漏洞代码和修复后代码的例子以及一个安全代码的例子。这能显著提升模型对特定漏洞模式的识别精度。分阶段审计不要指望一个提示词解决所有问题。可以设计多轮审计第一轮快速扫描识别明显的“高危”模式如eval(),os.system(user_input)。第二轮深度数据流分析要求模型追踪输入从源头到汇聚点的路径。第三轮业务逻辑审计针对特定框架如Django的权限装饰器、Spring Security的配置进行检查。利用模型的内置知识对于Claude或GPT可以提示它“请运用OWASP Top 10、CWE Top 25中的知识进行分析”激活其训练时学到的结构化安全知识。踩坑记录初期我们让模型一次性报告所有问题结果输出非常冗长且重复。后来改为要求“按严重性降序排列最多报告前5个最关键问题”并严格限定输出格式为JSON大大提升了结果的可处理性。格式约束对LLM的输出稳定性至关重要。4. 结果处理、集成与验证流程AI审计工具的输出不是终点而是起点。如何将AI的“自然语言报告”整合进开发流程并验证其有效性是决定工具能否落地的关键。4.1 解析与结构化输出LLM的回复是文本我们需要将其解析为机器可读的数据。强制要求模型以指定格式如JSON、YAML输出是最佳实践。示例要求JSON输出在提示词末尾添加请将审计结果以如下JSON格式输出不要包含任何其他解释 { issues: [ { type: 漏洞类型, severity: 高危/中危/低危, location: 代码位置, description: 问题描述, recommendation: 修复建议 } ] }然后在你的代码中使用json.loads()来解析响应。务必做好异常处理因为模型偶尔可能不遵守格式。4.2 与现有开发工作流集成孤立的工具没有价值。必须将AI审计嵌入CI/CD流水线。Git预提交钩子Pre-commit Hook对开发者本地提交的代码进行轻量级AI扫描。适合扫描速度快的模型或仅扫描差异文件。优点是即时反馈缺点可能拖慢提交速度。CI流水线步骤在GitHub Actions、GitLab CI、Jenkins等工具中增加一个审计步骤。可以对每次Pull Request的完整变更集进行扫描并将结果以评论形式提交到PR中。这是最常用的方式。定时全量扫描每周或每天对主分支进行全仓库扫描用于发现存量漏洞或新出现的漏洞模式。示例GitHub Actions集成片段name: AI Security Audit on: [pull_request] jobs: audit: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Set up Python uses: actions/setup-pythonv4 with: python-version: 3.10 - name: Install dependencies run: | pip install openai tree-sitter-languages - name: Run AI Audit on Changed Files env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | python ai_audit_runner.py --diff-only --output sarif audit_results.sarif - name: Upload SARIF results uses: github/codeql-action/upload-sarifv2 with: sarif_file: audit_results.sarif这个工作流会1) 获取PR代码2) 安装环境3) 运行你的AI审计脚本仅扫描变更文件4) 将结果转换为SARIF格式一种安全结果标准格式5) 上传到GitHub在PR的“Security”标签页显示。4.3 验证与反馈校准AI的“判断力”AI审计的准确率精确度和召回率需要通过人工验证来持续校准。建立一个简单的反馈循环机制建立黄金数据集收集一批已知安全True Negative和已知有漏洞True Positive的代码片段。每次更新提示词或模型后用这个数据集进行测试计算精确率、召回率。人工验证流程在CI中AI发现的高危问题可以自动阻塞合并并指派给代码作者和安全团队复审。复审者标记“确认”、“误报”或“需修改”。误报分析定期分析被标记为“误报”的结果。是因为提示词不准确上下文不足还是模型能力有限根据分析结果优化提示词或代码切片策略。漏报分析当其他渠道如人工审计、漏洞赏金发现了AI未报告的问题时将这些漏洞代码加入数据集并反思为何AI没发现。是否需要增加针对此类漏洞的示例到提示词中重要提醒切勿完全依赖AI审计结果作为安全质量的唯一标准。它应该作为传统SAST、DAST动态扫描和人工审计的强力补充而非替代。尤其是在审计业务逻辑漏洞、架构设计缺陷方面AI目前仍有很大局限性。5. 常见问题、挑战与优化策略实录在实际部署和运行这类工具的过程中你会遇到一系列预料之中和预料之外的问题。下面是我和团队遇到的一些典型挑战及应对策略。5.1 成本与性能的平衡问题使用GPT-4审计一个中型项目数千个函数API调用成本可能高达数十甚至上百美元且扫描耗时很长。应对策略分层审计不是所有代码都需要最强大的模型。可以先用一个轻量、快速的模型或规则引擎进行初筛只对初筛发现“可疑”的代码片段如包含危险函数调用、用户输入处理再用大模型进行深度分析。缓存结果对未修改的代码文件其审计结果可以缓存起来。结合Git哈希值只有当文件内容真正改变时才重新审计。使用更经济的模型对于内部代码可以尝试部署开源的DeepSeek-Coder或CodeLlama 34B在自有机器上运行虽然单次推理慢但总体成本可控且无数据泄露风险。优化上下文长度精心设计代码切片只送入最必要的上下文。移除无关的注释、空白行甚至可以将长变量名进行哈希缩短需确保模型能理解。5.2 误报与漏报的处理问题AI有时会“疑神疑鬼”将安全的代码误判为漏洞误报有时又会“视而不见”漏掉真正的漏洞漏报。应对策略针对误报丰富上下文很多误报是因为AI看不到完整的防护逻辑。尝试将相关的输入验证函数、权限检查装饰器的定义也包含进上下文中。优化提示词在提示词中明确排除某些情况。例如“注意如果输入已经通过re.match(^[a-zA-Z0-9]$, input)进行了严格的白名单验证则不应报告命令注入风险。”建立忽略列表对于反复误报的同一模式如公司内部某个安全工具函数的特定用法可以建立规则化的忽略列表在送入AI前就过滤掉。针对漏报漏洞模式示例在提示词中加入你想要捕捉的、具体的漏洞代码示例及其修复方案。Few-shot learning对提升特定漏洞的召回率非常有效。组合多种分析角度用不同的提示词对同一段代码审计多次。例如一次聚焦“数据流”一次聚焦“API误用”一次聚焦“配置安全”。合并多次的结果。保持模型更新定期评估并切换到能力更强的模型。模型的能力在快速进化。5.3 复杂代码与上下文管理的挑战问题面对高度抽象、设计模式复杂、依赖框架特性的现代代码AI可能难以理解其真实意图。应对策略框架感知为流行框架如Spring Boot, Django, React定制提示词。例如“这是一段Django视图代码请重点检查login_required装饰器是否缺失、ModelForm的保存操作是否直接使用了用户输入、查询是否使用了参数化filter(userrequest.user)而非拼接。”符号链接与依赖分析确保你的代码解析器能正确处理项目中的符号链接、子模块并能解析import/require语句将依赖库的公共API信息作为背景知识可通过文档或类型存根文件提供提供给AI。分而治之对于特别复杂的类或模块不要试图一次性审计整个文件。按照“单一职责原则”将其拆分成多个独立的审计任务每个任务聚焦一个方法或一个功能组。5.4 安全与合规考量问题将公司源代码发送到第三方AI服务商如OpenAI、Anthropic存在数据泄露和合规风险。应对策略首选本地模型对于处理敏感代码如核心算法、未公开API优先考虑部署开源模型在内部GPU服务器或私有云上。虽然效果可能打折扣但数据安全是底线。使用合规的云服务如果必须使用云API选择那些提供明确数据处理协议、承诺数据不用于训练的服务商并评估其合规认证如SOC2, ISO27001。代码脱敏在发送前对代码进行脱敏处理如替换掉真实的业务密钥名、内部API地址、数据库表名为通用占位符。但这可能影响AI对代码语义的理解需要权衡。签订NDA与评估协议与AI服务提供商签订严格的保密协议并明确代码数据的用途和留存期限。6. 未来展望与进阶玩法AI代码安全审计还处于早期阶段但发展迅猛。除了基本的漏洞发现还有一些更前沿或更深入的应用方向值得探索漏洞修复代码自动生成不仅仅是发现问题还能直接生成修复后的代码补丁Patch。这需要模型具备更强的代码生成和编辑能力。目前可以在提示词中要求“请提供具体的修复代码示例”部分先进模型已经可以做到。架构与设计层面审计让AI审查架构图、设计文档或高层次代码结构发现诸如“服务间认证缺失”、“敏感数据流经日志系统”、“错误的信任边界”等设计缺陷。这需要给模型输入更抽象的文档挑战更大。与SCA工具深度集成将AI审计与软件成分分析工具结合。当SCA工具报告某个依赖库有漏洞时AI可以自动分析你的代码中是否真正调用了该库的脆弱函数以及调用路径是否可能被攻击者利用从而将“存在漏洞的组件”警报升级为“可被利用的漏洞”警报。定制化模型微调收集你所在行业或公司特有的安全代码和漏洞代码数据对开源的基础代码模型进行微调得到一个更懂你业务、误报率更低的“专属安全审计模型”。这需要一定的机器学习工程能力但可能是效果提升的终极路径。实时IDE插件将AI审计引擎集成到VS Code、IntelliJ等IDE中在开发者编写代码时实时提供安全建议就像高级的语法检查一样实现“左移”安全。从我个人的实践来看ai-security-audit这类工具最大的价值不在于完全取代安全专家而在于充当一个“永不疲倦的初级审计员”能够以极低的边际成本覆盖海量的代码变更将安全专家从繁琐的重复性模式检查中解放出来去专注于更复杂的逻辑漏洞和架构评审。它正在改变应用安全的工作模式从“事后救火”和“抽样检查”向“实时防护”和“全量覆盖”演进。当然这条路还很长需要安全人员、开发人员和AI研究者共同努力不断校准和优化这个“AI同事”的判断力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2576934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…