📝随笔周刊——第 24 期
type
status
date
slug
summary
tags
category
icon
password
AI summary
三月的一个周末,北京突然飘起了大雪❄️,补上了这个冬天的最后一场雪




🎶𝓦𝓮𝓮𝓴𝓵𝔂 𝓼𝓸𝓷𝓰 𝓹𝓲𝓬𝓴 🪗:
知识小品
这周有好多关于 CodeLLM 在 Repo 或者 Project 粒度上的研究和 Benchmark,我也一直在关注在 Repo 粒度上有没有好的处理方法,下面简单介绍一下相关论文的主要内容和方法(没时间细看 🥹,先留个印象吧)。
Is Your Benchmark (Still) Useful? Dynamic Benchmarking for Code Language Models
这篇论文试图解决在模型评估中遇到的一个关键挑战:如何保持代码基准测试的有效性,即使这些基准测试可能已经被模型在训练过程中见过。具体来说,随着大型语言模型的快速发展,现有的代码基准测试可能已经被包含在模型的训练数据中,导致模型在这些基准测试上的表现不能准确反映其真正的代码理解和推理能力,而是可能依赖于记忆训练数据中的特定模式。这种数据泄露问题严重削弱了基准测试的可靠性和有效性。
为了解决这一问题,论文提出了一种名为“动态基准测试框架”的创新解决方案。该框架通过一系列语义保持的变异,动态地转换每个输入代码,生成在语法上不同但在语义上相同的新的基准测试。这样,即使模型在训练中见过原始基准测试,也无法简单地依赖记忆来应对变异后的基准测试,从而确保评估能够真正衡量模型的代码理解和推理能力。
- 变异方法:
- 代码语法变异:
- 变量归一化:将变量名替换为顺序命名或随机字符串,消除变量名中的语义信息。
- 常量展开:将整数常量替换为等价的算术表达式。
- 代码结构变异:
- For 到 While:将
for
循环替换为功能等价的while
循环。 - 条件增强:在条件语句中引入永真表达式。
- 多变异:将不同的变异方法组合使用,进一步增加语法变化。

- 单变异的影响:
- 大多数变异方法导致模型性能显著下降,表明模型在处理变异代码时的推理能力显著降低。
- 例如,在CRUXEval基准测试中,应用常量展开后,GPT-4o mini的Pass@1性能从53.60%下降到34.51%。
- 多变异的影响:
- 多变异方法导致的性能下降比单变异更为显著。
- 例如,在CRUXEval基准测试中,应用FUV多变异方法后,GPT-4o mini的Pass@1性能从53.60%下降到31.28%。
- 多变异还导致模型排名的变化,表明原始静态基准测试可能无法准确评估模型的推理能力。

但不得不说,不是创新方法了,感觉这种方法有段时间了~
RepoST: Scalable Repository-Level Coding Environment Construction with Sandbox Testing
目前大多数代码生成模型主要是在算法问题上进行训练和评估,而不是在真实的仓库级别代码上。这种不匹配在研究基准和实际应用之间造成了巨大的差距。仓库级别代码生成的挑战:
- 复杂依赖关系:真实世界的代码通常依赖于多个文件、外部库和特定的环境配置。
- 集成复杂性:设置环境以执行来自仓库的代码需要处理复杂的构建系统和依赖关系树。
- 执行反馈:如果没有正确配置的环境,运行测试来验证生成的代码是很困难的。
- 规模:创建具有执行支持的大型仓库级别代码数据集的成本非常高。

论文提出了一种名为 REPOST 的自动化框架,旨在自动从真实世界的仓库构建可执行的编码环境。该框架遵循一种系统的方法:
- 仓库和函数管理:随机抽样 Python GitHub 仓库并提取单个函数。
- 沙盒化:将目标函数及其本地依赖项隔离到独立的评估脚本中,避免了构建整个仓库的复杂性。
- 测试生成:创建合成测试以验证沙盒化函数的功能。
- 质量控制和过滤:通过迭代执行、调试和测试来确保评估脚本的质量。
- 论文利用 REPOST 方法构建了两个数据集:REPOST-TRAIN 和 REPOST-EVAL。REPOST-TRAIN 是一个大规模的训练集,包含来自 824 个仓库的 7,415 个函数。通过在 REPOST-TRAIN 上进行训练,模型在 HumanEval 和 RepoEval 等基准测试上表现出显著的性能提升。
- REPOST-EVAL 是一个评估数据集,包含来自 99 个仓库的 296 个函数,用于评估代码生成模型的性能。通过在这些数据集上进行训练和评估,论文展示了 REPOST 方法在提供执行反馈方面的有效性。
FEA-Bench: A Benchmark for Evaluating Repository-Level Code Generation for Feature Implementation
本文介绍了FEA-Bench,这是一个用于评估 LLM 在代码库级别进行增量代码开发能力的基准测试框架。当前的基准测试缺乏专门评估 LLM 在代码库中实现新功能的能力。FEA-Bench 通过收集83个GitHub仓库的 PRs,并使用基于规则和意图的过滤方法构建专注于新功能开发的任务实例。每个任务实例包含代码更改,并配对了相关的单元测试文件,以确保解决方案可以被验证。实验结果表明,LLMs在FEA-Bench上的表现显著不佳,显示出在代码库级别增量代码开发中面临的巨大挑战。


DependEval: Benchmarking LLMs for Repository Dependency Understanding
这篇论文旨在解决大型语言模型 (LLMs) 在理解和处理复杂代码仓库方面的能力尚未得到充分探索的问题。
具体来说,虽然 LLMs 在代码生成、代码补全、bug 修复和文档编写等任务上展现出潜力,但现实世界的软件开发通常涉及复杂的仓库级推理,包括:
- 依赖理解: 理解代码库中不同文件和模块之间的依赖关系。
- 项目结构: 理解代码库的组织结构和模块化布局。
- 多文件修改:协调跨多个文件的代码更改并保持一致性。
现有的基准测试通常在函数或文件级别评估 LLMs,侧重于孤立的代码片段,缺乏评估 LLMs 在仓库级别进行推理的能力。此外,即使是一些仓库级别的基准测试,例如 SWE-bench,也主要关注 bug 修复,而忽略了依赖关系解析、项目构建和结构化多文件编辑等挑战。而且,现有的方法也缺乏对模型在仓库推理各个方面性能的细粒度洞察。

DependEval 的核心方法是其提出的 分层基准测试框架,包含三个任务:
- 依赖识别:
- 任务设置: 给定一组代码文件 F 和预先提取的依赖关系 D,模型需要生成一个有序的文件列表 P,其中文件顺序必须尊重依赖关系 D。
- 评估指标: 使用精确匹配率评估预测的依赖链是否完全匹配真实情况。
- 仓库构建:
- 任务设置: 给定自然语言需求 R 和一组带有功能描述 D 的文件 F,模型需要生成一组有效的有序列表 P,每个列表代表一种可能的项目文件结构,并展示文件间的依赖关系。
- 评估指标: 使用图匹配 F1 分数评估预测的依赖关系图与真实图的结构相似性,包括节点和边的精确率、召回率和 F1 分数。
- 多文件编辑:
- 任务设置: 给定一组文件 C 和功能需求 R,模型需要在两种场景下进行多文件编辑:
- In-place Edits (原地编辑): 修改现有文件 C 以实现 R,保持文件间依赖关系。
- Expansion Edits (扩展编辑): 修改 C 并创建新文件 f_new 来整合 R,并确保正确的调用关系。
下面是一些实验结果和 insight,还挺有意思的:
- 语言特性显著影响性能
- Python和JavaScript因模块化结构清晰,任务表现最优(DR平均EMR达60%以上)。
- C++和PHP因复杂头文件包含和动态加载机制,在动态依赖解析(如PHP的
require_once
)和全局变量追踪等场景中错误率高,显示其对隐式依赖的捕捉能力不足,成为挑战(ME任务得分低于30%)。
- 任务难度层级明显
- 依赖识别(平均EMR 40.2%) > 仓库构建(平均F1 35.1%) > 多文件编辑(平均得分26.8%),显示跨文件协同修改是当前LLMs的瓶颈。
- 依赖识别能力与多文件编辑表现高度相关(Pearson系数0.82),表明跨文件推理依赖精准的依赖链解析。
Awesome-Repo-Level-Code-Generation
一个关于代码库级别代码生成领域的高质量资源和研究论文的汇总。
- 代码库级别问题解决
- 代码库级别自动补全
- 数据集与基准

CodeFuse-Query
CodeFuse-Query 是一个面向数据的静态代码分析系统,专注于大规模软件开发中的复杂分析需求。系统核心包括三大部分:代码数据模型(COREF)、代码查询DSL语言(Gödel)以及平台化服务(Sparrow CLI 和在线 Query Center)。目前支持11种编程语言分析,其中5种语言已成熟,6种语言处于测试阶段。
OREF主要包含以下几种信息: COREF = AST (抽象语法树) + ASG(抽象语义图) + CFG(控制流图) + PDG(程序依赖图)+ Call Graph(函数调用图) + Class Hierarchy (类继承关系)+ Documentation(文档/注释信息)。
应该是借鉴了 CodeQL 的思想,将代码视为数据,然后对代码的静态分析操作通过 query 来完成。而且使用语法都很像,code → database,然后 query database。
还是对这个比较感兴趣的,最近也在通过 Tree-Sitter 构建源代码的 AST,然后通过 AST 生成代码的 Call Graph 和 Control Flow Graph,需要考虑不同 statement 的 type,不断查阅tree-sitter 的 grammar,为不同类型的 statement 设计不同的 CFG 处理规则。后续应该会整理出一个 blog 来系统梳理一下,也有可能会是几篇,内容还是比较多的~

MCP
最近 MCP 的热度上来了,之前刚推出的时候,没怎么关注,也是趁着这波热度看了看相关的技术文章,简单了解一下。
文章:
Awesome MCP Servers and Clients:
一些 MCP 项目:
claude-debugs-for-you:一个 MCP 服务端和 VS Code 扩展,支持使用 Claude 或其他大语言模型以交互方式调试代码。
firecrawl-mcp-server:一个集成了 Firecrawl 的 Model Context Protocol (MCP) 服务端实现,提供强大的网页爬取与数据提取功能。

你知道这种动图怎么做的吗?
在 X 上经常看到一些博主的图做的非常好看,也挺好奇做法的,评论区有一位网友分享了制作的网站!那就是平常用的 drawio 哈哈哈😂,文档就是上面贴的

langgraph-101
LangGraph 101 是一个简化版的 LangChain Academy 项目,旨在通过系列 Jupyter Notebook 教用户 LangGraph 的基础知识。LangGraph 是一个用于构建单代理和多代理应用的框架,专注于为复杂的现实系统提供更高的精度和控制。

随便看看
The world's largest tree ! Trip to the American West,
相爱的人,共同的爱好,一起游历世界,看世间美景,太幸福了🥹

他带着最近“上头”的东西走来了!
这期视频挺好看的,被胡彦斌的挺多东西都种草了,而且这期真的好自然哦,很搞笑:
- 倍思快充头
- Anker 安克快充头 + 闪充数据线
- 微软 Xbox 手柄无线控制器

Auto_Typst_Resume_Template
Auto_Typst_Resume_Template 是一个支持中英文双语的 Typst 简历模板项目,无需本地环境即可通过 Github Actions 或 Typst 官网在线编译完成简历。主要特点包括:
- 模板功能:支持中文(思源宋体)和英文(Centaur字体)的双语简历生成,支持插入证件照(可选)。
- 使用方式:
- 推荐通过 Typst Web 在线编辑和预览。
- 可通过 "Use this template" 按钮创建新仓库,并修改
src
文件夹内容生成个人简历。 - 本地可以安装所需字体后,通过 Makefile 提供的命令进行编译。
- Github Actions 支持:配置了自动部署,提交后可自动生成 PDF 文件;支持 Github Release,通过版本标签发布完整简历文件。

Typst 是一种新的基于标记的排版系统,旨在提供与 LaTeX 同等的强大功能,同时更易于学习和使用。以下是关于它的详细介绍:
- 特点
- 语法简洁:上手难度与 Markdown 相当,文本源码阅读性高,不像 LaTeX 那样充斥着反斜杠与花括号。
- 编译速度快:使用 Rust 语言编写,目标运行平台是 WASM,可在浏览器本地离线运行,也可编译成命令行工具。采用增量编译算法和有约束的版面缓存方案,文档长度基本不影响编译速度。
- 环境搭建简单:不需要像 LaTeX 那样折腾几个 G 的开发环境,原生支持中日韩等非拉丁语言。无论是通过官方 Web App 在线编辑,还是使用 VS Code 安装插件进行本地开发,都可即开即用。
- 具备现代编程语言特性:是可用于出版的可编程标记语言,拥有变量、函数、包管理与错误检查等特性,还提供闭包等,便于进行函数式编程。包括标记模式、脚本模式与数学模式等多种模式的作用域,且可不限深度地交互嵌套。通过包管理,可按需自动从云端下载所需宏包,无需在本地安装大量不必要的宏包。
数万张 Midjourney 官方精选 Showcase 的图集网站
- 向量搜索: 输入任何英文提示词,即可快速获取相似的图片。
- 图集浏览: 除了精选图片外,还可以查看另外三张相似图片,激发您的灵感。
- 以图搜图: 通过解析图片的 prompt ,即可找到与之相似的 Midjourney 作品。
- 原图下载: 通过内部链接下载原图,让您拥有更高的图片质量。

随便玩玩
rcode-go
rcode-go
旨在通过 SSH 将远程开发工作流与本地环境集成,提升开发效率和便利性。- GCode: 用于在本地 IDE(如 VS Code 或 Cursor)中打开远程服务器目录的命令行工具。
- GSSH: 增强版 SSH 命令,支持会话管理和安全隧道功能,通过 GCode 实现高级的远程开发能力。
随便说说
这周都在和 tree-sitter 打交道,AST,CG,CFG…
周末突然下雪啦❄️(◕‿◕✿),开心,正赶上女朋友来湖里找我玩,一起在大雪中拍拍拍,成都四年还没一起看过雪😀
Loading...