读paper13-Multi-Agent盘点
读paper13:Multi-Agent盘点 MetaGPT 论文:https://arxiv.org/abs/2308.00352 代码:https://github.com/geekan/MetaGPT MetaGPT 以一行需求作为输入,输出用户故事/竞争分析/需求/数据结构/API/文档等 MetaGPT利用SOP(Standard Operating Procedures,标准作业程序)来协调基于大语言模型的多智能体系统,从而实现元编程技术。该框架使用智能体模拟了一个虚拟软件团队,包含产品经理、架构师、项目经理、工程师、质量工程师等角色,并引入SOP成为框架的虚拟软件团队的开发流程。其专注于软件开发,覆盖了从需求分析到代码实现的全生命周期覆盖。 架构 框架采用双层架构设计: 基础组件层以AI Agent为核心,提供了观察、思考等能力。其建立了个体智能体操作和在系统范围内进行信息交换所需的核心模块,包括环境、记忆、角色、行动和工具。 环境:为智能体提供协作工作空间和交流平台。 记忆:存储和检索历史消息。 角色:根据领域封装专业技能和工作流程。 行动:执行模块化的子任务 ...
数值分析大作业-PageRank
数值分析大作业-PageRank 题目 互联网的使用已经深入人们的日常生活中,其巨大的信息量和强大的功能给人们的生产、生活带来了很大使利。随着网络信息量越来越庞大,如何有效地搜索出用户真正需要的信息变得十分重要。互联网巨头Google公司的核心技术就是通过PageRank 技术对海量的网页进行重要性分析。该技术利用网页相互链接的关系对网页进行组织,确定出每个网页的重要级别(PageRank)。当用户进行搜索时,Google找出符合搜索要求的网页,并按它们的PageRank 大小依次列出。这样,用户一般在显示结果的第一页或者前几页就能找到真正有用的结果。形象地解释,PageRank 技术的基本原理是:如果网页A 链接到网页B ,则认为“网页A投了网页B”一票,而且如果网页A 是级别高的网页,则网页B 的级别也相应地高。 假设 nnn是 Internet 中所有可访问网页的数目,此数值非常大,2010 年已接近 100亿。定义n×nn\times nn×n 的网页链接矩阵 G=(gij)∈Rn×nG=(g_{ij})\in\mathbb{R}^n\times nG=(gij)∈Rn×n, ...
默认参数的最优化
默认参数的最优化 场景:速读时,有些学生速读 1 次就能复述,有些需要 2 次,有些需要 N 次,而建议速读次数 X 是个默认值,这个默认值到底取多少合适 技术:使用线性回归技术 什么是好的超参数优化算法 如果说只是为了找到最优的超参数组合而不考虑其他的因素,那么我们那可以用穷举法,把所有超参数组合都尝试一遍,这样肯定能找到最优的。但是我们都知道这样肯定不行,因为我们还需要考虑时间,计算资源等因素。而这些因素我们可以称为 Budget, 用 BBB 表示。 假设一开始候选的超参数组合数量是 nnn,那么分配到每个超参数组的预算就是 Bn\frac{B}{n}nB。所以 Hyperband 做的事情就是在 nnn 与 Bn\frac{B}{n}nB 做权衡 (tradeoff)。 也就是说如果我们希望候选的超参数越多越好,因为这样能够包含最优超参数的可能性也就越大,但是此时分配到每个超参数组的预算也就越少,那么找到最优超参数的可能性就降低了。反之亦然。所以 Hyperband 要做的事情就是预设尽可能多的超参数组合数量,并且每组超参数所分配的预算也尽可能的多,从而确保尽可能地找到 ...
读paper12-静态警报自动确认
读paper12-静态警报自动确认 基于历史缺陷信息检索的语句级软件缺陷定位方法 一个比较有创新性的点是 通过分析类的 AST 可以获取到与此语句相关的 AST 片段,依次提取 AST 片段中的节点类型信息,组成语句的结构信息序列,使用最短编辑距离 (edit distance) 计算两个结构信息序列间的相似程度 编辑距离指的是在两个单词之间,由其中一个单词转换为另一个单词所需要的最少单字符编辑操作次数。 所以相当于将图相似度问题转化为了序列的相似度问题。 基于路径语义表示的静态警报自动确认方法 整体流程如上图,比较关键的两个步骤是: 基于 CFG 路径的 token 序列的提取 基于路径token序列的语义表示的学习 基于 CFG 路径的 token 序列的提取 基本步骤如下: 通过静态分析工具 DTS (defect testing system)将源代码文件解析为 CFG 利用面向目标的路径生成算法生成从入口节点到缺陷节点的 CFG 路径 对于CFG路径的节点,选取两种类型的路径节点进行 token 提取. 第 1 类节点是所有包含警报 IP 处导致潜在缺陷的 ...
AutoGen-multiple agents framework
AutoGen:multiple agents framework AutoGen 提供了一个统一的多智能体对话框架,作为使用基础模型的高级抽象。它具有功能强大、可定制和可对话的代理,通过自动代理聊天将 LLM、工具和人类整合在一起。 通过自动化多个能力强的代理之间的聊天,可以轻松使它们集体自主执行任务,或者在人类反馈下执行任务,包括需要通过代码使用工具的任务。 该框架简化了复杂 LLM 工作流的编排、自动化和优化。它最大化了 LLM 模型的性能并克服了它们的弱点。它使基于多智能体对话的下一代 LLM 应用程序的构建变得轻而易举。 主要特点 AutoGen 抽象并实现了旨在通过智能体间对话解决任务的可对话智能体。具体来说,AutoGen 中的智能体具有以下显著特点: 可对话:AutoGen 中的智能体是可对话的,这意味着任何智能体都可以发送和接收来自其他智能体的消息,以启动或继续对话。 可定制:AutoGen 中的智能体可以定制,以整合 LLM、人类、工具或它们的组合。 AutoGen 设计与实现要点 下图显示了 AutoGen 中内置的智能体。 AssistantAgent ...
读paper11-基于LLM的缺陷修复3
读paper11-基于LLM的缺陷修复3 InferFix: End-to-End Program Repair with LLMs 主要关注:Null Pointer Dereference (NPD), Resource Leak (RL), and Thread Safety Violation (TSV)三种缺陷 对于缺陷修复部分:上下文预处理模块使用分析器提供的信息来提取有问题的方法,并保留与修复错误最相关的周围上下文 - import 语句、类签名、在 buggy 行调用的 getResourceResolver 方法的主体。然后,检索增强引擎在历史数据库中搜索语义相似的错误代码片段,并在prompt前加上类似的错误修复。最后,将增强的prompt发送到微调的 Codex 模型进行推理。然后,通过执行 Infer 静态分析器和单元测试作为 CI 管道的一部分来验证预测的补丁,以确保错误确实已修复,并且代码库中没有引入回归。 静态分析使用的是开源工具Infer:https://github.com/facebook/infer 代码匹配 https://aclantholo ...
研一课程笔记-数值分析4-6
研一课程笔记-数值分析4-6 非线性方程迭代解法 n次方程根的个数与次数相同(实根或者复根) 设有非线性方程 f(x)=0(4.1)f(x)=0\tag{4.1} f(x)=0(4.1) 其中 f(x)f(x)f(x) 是一元非线性函数。若常数 sss 使 f(s)=0f(s)=0f(s)=0,则称 sss 是方程(4.1)的根,又称 sss 是函数 f(x)f(x)f(x)的零点。若 f(x)f( x)f(x) 能分解为 f(x)=(x−s)mφ(x)f(x)=(x-s)^m\varphi(x) f(x)=(x−s)mφ(x) 其中 mmm 是正整数,φ(s)≠0\varphi(s)\neq0φ(s)=0 ,则称 sss 是方程(4.1)的 mmm 重根和 f(x)f(x)f(x) 的 mmm 重零点。当 m=1m=1m=1 时,sss 称为方程(4.1)的单根和 f(x)f(x)f(x) 的单零点。 二分法 用 C[a,b]C[a,b]C[a,b] 和 C(a,b)C(a,b)C(a,b) 分别表示在闭区间 [a,b][a,b][a,b] 和开区间 (a,b)(a,b)(a, ...
读paper10-代码相似度
读paper10-代码相似度 2024.10.14:项目换血,这个用不到了。。。。。 Learning graph-based code representations for source-level functional similarity detection https://github.com/jun-zeng/Tailor https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=10172499 代码相似性通常被划分为这四种类型: 类型 I–除空白、代码注释和布局外,代码完全相同。 类型 II–代码结构和语法完全相同,标识符名称、类型、布局和注释除外。 类型 III–符合类型 II 的特征,但有添加、删除或修改的声明。 类型 IV–代码具有相同的功能和效果,但通过不同的语法结构实现。 不过,AST 与程序语义(如控制流)无关,这限制了它识别语法不同但语义相似的程序的能力。作为一种补救措施,基于图的方法建立了程序依赖图(PDG),纳入了控制/数据依赖关系,通过发现同构子图来预测语义相似的功能 ...
RLHF-从基础到Claude中的应用探索
RLHF-从基础到Claude中的应用探索 强化学习基础知识: 马尔可夫决策过程(Markov Decision Processes,MDPs) 例行回顾,但不是核心内容 MDPs 简单说就是一个智能体(Agent)采取行动(Action)从而改变自己的状态(State)获得奖励(Reward)与环境(Environment)发生交互的循环过程。 MDP 的策略完全取决于当前状态(Only present matters),这也是它马尔可夫性质的体现。 其可以简单表示为: M=<S,A,Ps,a,R>M=<S,A,P_{s,a},R>M=<S,A,Ps,a,R> 基本概念 s∈Ss∈Ss∈S:有限状态 state 集合,s 表示某个特定状态 a∈Aa∈Aa∈A:有限动作 action 集合,a 表示某个特定动作 Reward R(s,a)=E[Rt+1∣s,a]R(s,a)=E[R_{t+1}|s,a]R(s,a)=E[Rt+1∣s,a]:表示 agent 采取某个动作后的即时奖励,它还有 R(s,a,s’)R(s, a, s’)R(s ...
读paper9-基于LLM的缺陷修复2
读paper9-基于LLM的缺陷修复2 Evaluating Large Language Models for Real-World Vulnerability Repair in C/C++ Code 提到了三点关于修复效果增强的点: 变量上下文:相当于对变量的解释 外部函数、数据结构或变量 代码思想、逻辑 Impact of Code Language Models on Automated Program Repair 关于微调的几个发现,比较有价值: 微调将 CLM 的修复能力提高了 31%-1,267% ,经过微调的 CLM 显著优于基于 DL 的 APR 技术,提高了 46%-164% 。 虽然微调有所帮助,但有时会使 CLM 过度依赖于错误行,从而无法解决一些无需微调即可解决的错误。 CodeT5 和 CodeGen 模型在使用 10,000 个 APR 训练实例进行微调后,达到了最佳修复能力,而使用更多 APR 数据进行微调后,修复的错误数量更少(减少了 8%-19%)。InCoder 模型在使用 50,000 个训练实例进行微调后,缺陷数量最多,使用 ...
读paper8-Copiloting_the_Copilots
读paper8:Copiloting the Copilots Copiloting the Copilots: Fusing Large Language Models with Completion Engines for Automated Program Repair https://github.com/ise-uiuc/repilot INTRODUCTION 现有 LLM 在 APR 工具上的局限性的三个场景: 生成不可行的token:即91%概率会生成 asString() ,而不是代码中的 asEndTag() 相当于LLM从其学习的知识库中选择了概率最大的结果,但是不是针对该项目代码的修复(无导向性,无针对性 很难生成少见的token 比如 asEndTag() 这种更自定义的方法名,就很难生成 原因其实还是跟上一个场景类似,没有针对当前项目进行学习 突然想起一个办法,先让LLM分析所有代码,再去进行缺陷检测与修复,但是这个要怎么实现呢。。。。。 没有明确的类型考虑 对于自定义的实体类,显然我们的返回值是EndTag对象,但是LLM并不会学习到这一 ...
读paper7-RAP-Gen_Retrieval_Augmented_Patch_Generation_with_CodeT5
读paper7-RAP-Gen: Retrieval Augmented Patch Generation with CodeT5 INTRODUCTION 名为RAP-Gen的新型检索增强补丁生成框架,通过从补丁检索器中获取相关的修复模式来增强自动程序修复。 模型在性质上是半参数化的,旨在结合隐式(参数化)端到端程序修复学习和显式(非参数化)修复模式挖掘的双重优势。 与先前的修复模式挖掘工作的区别之一是,我们利用最相关的错误-修复对作为有关错误补丁的指导修复模式,而不是使用手工设计的启发式方法对修复模板进行聚类。 RAP-Gen采用了阶段式学习策略来连接补丁检索器和补丁生成器:补丁检索器首先搜索相关的错误修复模式,然后将其传递给CodeT5补丁生成器,根据源代码和检索的外部错误修复知识合成一个修复补丁候选列表。 对于检索器,我们提出了一种混合方法,通过基于原始源代码的稀疏(BM25 )和密集(DPR)检索来考虑词法和语义匹配。我们使用CodeT5的编码器作为我们的密集DPR检索器,并提出使用对比学习目标对其进行训练,使用先前的错误-修复对作为修复补丁通常与其错误补丁共享大部分语义。 ...
深度学习-注意力机制
注意力机制 注意力机制概述 自主性的与非自主性的注意力提示解释了人类的注意力的方式, 下面来看看如何通过这两种注意力提示, 用神经网络来设计注意力机制的框架, 首先,考虑一个相对简单的状况, 即只使用非自主性提示。 要想将选择偏向于感官输入, 则可以简单地使用参数化的全连接层, 甚至是非参数化的最大汇聚层或平均汇聚层。 因此,“是否包含自主性提示”将注意力机制与全连接层或汇聚层区别开来。 在注意力机制的背景下,自主性提示被称为查询(query)。 给定任何查询,注意力机制通过注意力汇聚(attention pooling) 将选择引导至感官输入(sensory inputs,例如中间特征表示)。 在注意力机制中,这些感官输入被称为值(value)。 更通俗的解释,每个值都与一个键(key)配对, 这可以想象为感官输入的非自主提示。 如下图所示,可以通过设计注意力汇聚的方式, 便于给定的查询(自主性提示)与键(非自主性提示)进行匹配, 这将引导得出最匹配的值(感官输入)。 此外,注意力机制的设计有许多替代方案。 例如可以设计一个不可微的注意力模型, 该模型可以使用强化学习方法 (Mni ...
研一课程笔记-并行计算
研一课程笔记-并行计算 一、多核体系结构概述 指令级并行 在多核时代到来之前,倾向于提升晶体管集成度,通过集成,可以将更多的原本片外的部件集成到片内中,从而开发出了诸如流水线、乱序执行、动态分支预测和缓存等,这些“低挂果”虽然硬件实现较为复杂,但生产之后的成本相对较低,开发人员无需考虑数据竞争、同步、通信等问题。 逻辑复杂度:例如超标量处理器中大部分部件都用于确保指令的分隔执行。 功耗问题:功耗和电容 CCC、电压V2V^2V2 和时钟频率 fff 相关,CCC 和集成度相关,VVV 如果降低,将导致 fff 变慢。 fmax=c(V−Vthd)αVf_{\max}=c\frac{(V-V_{\mathrm{thd}})^\alpha}Vfmax=cV(V−Vthd)α。其中 VthdV_{thd}Vthd 为阈值电压 如果降低阈值电压,则会导致处理器静态功耗指数级增长 数据级并行 由于之前的问题导致集成度无法再提高,频率无法再提升,产生了多核概念。 并行计算机分类: SISD,串行体系结构通用模型,但可以实现指令级并行 SIMD,多用于向量处理器结构 MISD, ...
研一课程笔记-数值分析1-3
研一课程笔记-数值分析1-3 绪论与预备知识 概论 衡量数值算法的几个标准 衡量算法的优劣有两个标准,一是要有可靠的理论基础,包括收敛性、数值稳定性和算法精度等;二是要有较好的计算复杂度。 数值稳定性 数值稳定性即算法对舍入误差的敏感性。舍入误差对计算结果的精确性影响小的算法,具有较好的数值稳定性;反之,算法的数值稳定性差。 算法精度 数值算法的精度衡量了近似解对精确解的近似程度。算法的精度越高并不一定导致近似解的误差越小。精度的具体定义依赖于所考虑的问题类型。在偏微分方程的数值算法中我们一般考虑收敛精度,它指的是算法的收敛速率。 计算复杂度 计算复杂度指的是通过数值计算解决问题的困难程度。最常见的是时间复杂度和空间复杂度 收敛性 算法的收敛性一般指数值解逼近精确解的性质,而对于不同的问题,其定义也是有区别的。例如在迭代算法中,收敛性指的是近似解能够随着迭代过程趋向于精确解,它通常与迭代矩阵的谱半径相关。在偏微分方程数值算法中,收敛性指的是随网格尺寸等参数变化的数值解的收敛性质,它与算法的收敛精度密切相关。 误差理论 误差按照它们的来源可分为以下四种 ...
读paper6-缺陷样本生成
VGX: Large-Scale Sample Generation for Boosting Learning-Based Software Vulnerability Analyses VGX通过设计基于代码tokens之间的值流关系(value flow relationships)的绝对和相对位置编码的注意力机制,构建了一个基于Transformer的上下文化模型,并在大型代码语料库上对自定义的Transformer进行预训练,然后针对现有(task-specific 的)易受攻击代码位置数据集进行微调。然后,VGX利用从历史修复和人类对真实世界漏洞的知识中学习的编辑模式,在识别到的上下文中实现漏洞代码注入。 至于什么是值流,国内没有很规范的解释,国外对此有一定的应用,比如静态值流分析工具SVF :https://blog.csdn.net/gitblog_00087/article/details/138841899 。指的应该是数据流 源码与数据集地址:https://zenodo.org/records/10443177 Background and motivati ...
读paper5-基于图的缺陷检测与修复两篇
读paper5-基于图的缺陷检测与修复两篇 CSGVD: A deep learning approach combining sequence and graph embedding for source code vulnerability detection 一种结合序列和图嵌入的深度学习方法用于源代码漏洞检测 利用原始源代码的控制流图,将函数级的漏洞检测视为一个图二分类任务。首先,我们提出了一个PE-BL模块,它继承并增强了预训练语言模型的知识。通过使用序列嵌入,它提取了代码在控制流图中的局部语义特征作为节点嵌入。其次,CSGVD使用具有残差连接的(with residual connectivity)图神经网络来提取图的结构化信息。最后,我们提出了一种均值双仿射注意力池化(M-BFA)方法,以更好地聚合节点信息作为图的特征表示。 符号定义如下: {(ci,yi)∣ci∈C,yi∈Y}i=1N\{(c_i,y_i)\mid c_i\in\mathbb{C},y_i\in\mathbb{Y}\}_{i=1}^N{(ci,yi)∣ci∈C,yi∈Y}i=1N :数据 ...
cs224w-图机器学习2
cs224w-图机器学习2:GNN 图神经网络 前面几节内容主要介绍了节点嵌入的概念,也就是说我们可以将一个图中的节点映射到一个的 d 维向量上,而这种映射方式使得相似的节点对应的向量更接近,但主要的问题还是,我们如何学习出一个映射函数 f,而图嵌入的两个核心组件是编码器和相似度函数,图神经网络 GNN 提供了一种基于深度学习的节点嵌入方法。 深度学习基础 介绍了监督学习、损失函数、机器学习中的优化、梯度向量、随机梯度下降等基本概念,不过这些内容已经反复接触过了,因此也就不再专门整理记录 深度学习中的函数往往更为复杂,并且在反向传播进行参数更新的过程中需要用链式法则来求梯度,但总的来讲,不管是传统的监督机器学习还是深度学习,我们的优化目标都是: minL(y,f(x))\min\mathcal{L}(y,f(x)) minL(y,f(x)) 图深度学习 问题的定义 我们把要研究的图记为 GGG,图中所有节点构成集合 VVV,AAA 是图的接邻矩阵 用 XXX 表示图节点的特征矩阵,每个节点具有 mmm 维的特征,节点的特征可以根据图的实际情况来选取 一种很 naive 的方法是将图 ...