自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 构建 LangGraph Code Review Agent(七):实现规则匹配、Finding Guardrails 与 Markdown 报告

read_fileread_difffind_files模型不再只能读取固定 Prompt,而是可以根据当前代码变更自主决定是否补充上下文。"summary": "发现一个需要修复的问题。","message": "空值会导致运行时异常。","suggestion": "在访问属性前处理空值。但是,“结构合法”并不等于“位置可信”。path 指向本次没有修改的文件path 属于仓库,但不属于当前 AnalysisPackage。

2026-07-28 14:41:07 319

原创 构建 LangGraph Code Review Agent(六):实现安全的代码上下文工具与 Tool-Using Agent

Git Diff-> 确定性输入准备-> LangGraph 条件路由-> 并行调用 Reviewer-> 结构化 ReviewerOutput-> 合并 Finding模型可以接收经过过滤、分组和预算控制的 Diff Package,并返回结构化审查结果。但是上一阶段的模型只能看到提前放进 Prompt 的内容。如果一个问题需要结合未修改文件、函数定义、调用方或配置文件才能判断,模型没有办法主动补充上下文。仅看这一行,很难确定200.2真正的参数约束可能写在未修改的pricing.py。

2026-07-24 16:41:46 332

原创 构建 LangGraph Code Review Agent(五):接入 StateGraph 与结构化 LLM Reviewer

前四个阶段已经完成代码审查 Agent 的确定性输入链路。FastAPI 项目骨架;Pydantic 请求与响应模型;环境配置;执行预算;pytest 与 Ruff;LangGraph 依赖准备。仓库允许根目录;规范路径校验;路径穿越防护;符号链接逃逸防护;结构化路径错误。安全 Git 子进程;Git 仓库和 Ref 校验;工作区 Diff;未跟踪文件采集;Unified Diff 解析;与DiffHunk。FileFilter;结构化。

2026-07-23 20:00:13 462

原创 构建 LangGraph Code Review Agent(四):文件过滤与 AnalysisPackage 分包

前面三个阶段完成了代码审查服务的确定性输入基础。FastAPI 项目骨架;Pydantic 请求与响应模型;配置和执行预算;pytest 与 Ruff;LangGraph 依赖准备。仓库允许根目录;规范路径校验;路径穿越防护;仓库与文件符号链接逃逸防护;结构化路径错误响应。安全 Git 子进程;Git 仓库与 Ref 校验;工作区和提交区间 Diff;未跟踪文件采集;Unified Diff 解析;修改、新增、删除、重命名和二进制文件识别;与。

2026-07-23 14:28:37 382

原创 构建 LangGraph Code Review Agent(三):实现安全 Git Diff 采集与结构化解析

前两篇分别完成了两个基础阶段。使用 FastAPI 提供 HTTP 接口;使用 Pydantic 定义请求、Diff、分析包和审查结果模型;使用配置项限制仓库目录、文件大小和执行时间;建立 pytest 与 Ruff 检查体系;为后续 LangGraph 工作流预留明确的数据合同。repo_path必须是存在的绝对目录;仓库必须位于下;使用规范路径判断真实位置;阻止..、盘符和绝对文件路径逃逸;阻止仓库和文件符号链接跳出允许范围;

2026-07-22 19:23:44 446

原创 构建 LangGraph Code Review Agent(二):建立仓库路径安全边界

创建 FastAPI 项目骨架;定义配置系统;定义 Git Diff、AnalysisPackage 和 Finding 等 Pydantic 模型;预留本地代码审查接口;建立 pytest 和 Ruff 检查体系。但是,上一篇的只完成了请求模型校验。只要请求 JSON 格式正确,接口就会直接返回repo_path 是否存在?repo_path 是否为目录?repo_path 是否位于允许访问的目录下?repo_path 是否通过符号链接跳到了其他位置?

2026-07-21 21:35:19 369

原创 构建 LangGraph Code Review Agent(一):搭建 FastAPI 项目骨架与核心数据模型

代码审查并不只是把一段代码交给大模型。一个能够持续处理真实仓库和 Pull Request 的系统,还需要理解 Git Diff、补充代码上下文、限制工具访问范围、校验模型输出,并把结果转换为可执行的工程反馈。如果只在命令行外面包装一次 LLM 调用,就很难掌握 Agent 后端从输入、状态、工具到输出的完整过程。FastAPILangGraphPydanticpytestRuff只审查真实发生变化的代码;限制模型能够读取的仓库范围;使用工具补充代码上下文;

2026-07-21 16:47:13 782

原创 从 0 学习 Alibaba Open Code Review(十三):PR Range Mode 与 ReviewEngine 抽象

Git diff↓↓JSON 结构化结果↓风险分级↓LangGraph 工作流↓↓S10 使用 LangGraph 管理审查状态,S11 将本地流程接入 GitHub Actions,S12 又把审查结果发布到 Pull Request 页面。但是,S12 中还存在一个需要解决的问题:本地开发环境和 GitHub Actions 对“代码变更”的表现形式并不相同。

2026-07-19 13:59:05 363

原创 从 0 学习 Alibaba Open Code Review(十二):把 AI Review 结果自动发布到 GitHub PR

Git diff↓↓JSON 结构化结果↓风险分级↓LangGraph 工作流↓↓Artifact 与 Job SummaryS11 已经可以在 GitHub Actions 中自动运行 Code Review Agent,并将和历史记录上传为 Artifact。但是,这个流程还有一个很明显的问题:开发者必须进入 Actions 页面,再查看 Job Summary 或下载 Artifact,才能看到完整审查结果。审查结果还没有真正回到 Pull Request 的协作页面。↓。

2026-07-18 15:03:01 367

原创 从 0 学习 Alibaba Open Code Review(十一):用 GitHub Actions 自动生成 AI Code Review 报告

前面几篇已经完成了本地版 Code Review Agent 的核心能力。Git 变更检测OpenCodeReview 调用OCR JSON 解析风险分级Markdown 报告生成LangGraph 状态编排历史归档但是这些能力目前主要还是在本地运行。开发者手动执行命令本地已经配置好环境本地已经有 OpenCodeReview本地已经有 Python 依赖输出文件保存在本机目录有人提交 Pull Request↓CI 自动触发↓运行代码审查↓生成审查报告↓。

2026-07-16 21:30:16 422

原创 从 0 学习 Alibaba Open Code Review(十):引入 LangGraph 管理 Code Review Agent 工作流

前面几篇已经完成了两个阶段:安装 OpenCodeReview运行 ocr review理解 Git Diff理解 rule.json理解 Agent 工具调用理解 JSON 输出和 Markdown 报告Git diff↓Run OCR↓Parse JSON↓↓CriticalWarningSuggestion并且在 JSON 和 Markdown 报告中都展示了风险统计。但是第九篇还有一个明显问题:它本质上仍然是一个顺序脚本。

2026-07-16 16:13:15 471

原创 从 0 学习 Alibaba Open Code Review(九):为 Code Review Agent 增加风险分级

第八篇已经把 Code Review Agent MVP 的 V1 跑通了。Git diff↓↓↓也就是说,第八篇解决的是“能不能跑起来”的问题。但是只生成报告还不够。哪些问题最严重?哪些问题应该优先修?哪些只是建议?所以第九篇开始给 Agent MVP 增加一个新能力:风险分级。本篇完成了 Code Review Agent MVP 的风险分级能力。新增。为每条 OCR comment 增加severity。为每条 OCR comment 增加。

2026-07-08 12:54:10 382

原创 从 0 学习 Alibaba Open Code Review(八):实现 Git Diff 到 Markdown 报告的 Agent MVP

第七篇已经完成了 Code Review Agent MVP 的设计和项目骨架。为什么要新建独立项目为什么不直接改 OpenCodeReview 源码为什么要拆成 git_tools / ocr_tools / report_tools / agent_graphAgentState 为什么重要这一篇继续往前走:把这个 MVP 真正跑起来。Git 变更检测↓↓解析结构化结果↓生成 Markdown 报告本篇会基于这个项目实际运行命令,并把运行结果写下来。

2026-07-07 15:12:16 408

原创 从 0 学习 Alibaba Open Code Review(七):设计一个 Code Review Agent MVP

前面六篇已经把 OpenCodeReview 的核心链路基本走了一遍。跑通最小 Demo,知道ocr review可以审查 Git diff。从源码入口理解ocr review命令如何执行。学习 Git diff,理解 OpenCodeReview 如何确定审查范围。学习,理解自定义规则如何影响审查重点。学习 Agent 工具调用,理解file_readfile_find的作用。学习 JSON 输出结构,理解summarytool_callscomments如何支撑后续工程化。

2026-07-06 18:42:07 377

原创 从 0 学习 Alibaba Open Code Review(六):JSON 输出结构与 Markdown 报告设计

第一篇:跑通最小 Demo,知道ocr review能审查 Git diff。第二篇:从 CLI 入口追踪ocr review的执行流程。第三篇:理解 Git diff 如何决定审查范围。第四篇:理解如何影响规则加载。第五篇:分析 Agent 工具调用,理解file_readfile_find的作用。这一篇继续往后看:OpenCodeReview 审查完成后,结果是如何以 JSON 形式输出的?JSON 里有哪些字段?

2026-07-05 21:38:21 438

原创 从 0 学习 Alibaba Open Code Review(五):Agent 工具调用源码分析

前面几篇文章中,从不同角度学习了 Open Code Review 的核心流程。第一篇从使用者角度跑通了最小 Demo,观察到了ocr reviewfile_readfile_findfile_read 用来读取文件;code_search 用来搜索代码;code_comment 用来生成评论。第二篇分析了ocr review命令入口,知道了命令会从main.goGit diff 决定本次审查哪些文件。第四篇分析了rule.json 决定这些文件按照什么规则审查。这些工具是在哪里注册的?

2026-07-05 16:03:17 526

原创 从 0 学习 Alibaba Open Code Review(四):自定义规则 rule.json 解析

上一篇文章中,我学习了 Open Code Review 的 Git Diff 解析流程。git diffGit diff 决定本次审查哪些文件;[M] 表示文件被修改;+7 -1 表示新增 7 行、删除 1 行;ocr review --preview 可以在不调用 LLM 的情况下预览审查范围。ocr review 看哪些代码?ocr review 按什么规则审查代码?重点检查 SQL 注入、硬编码密钥、空值异常、异步错误处理、权限校验缺失和删除类危险操作。

2026-07-03 13:56:02 446

原创 从 0 学习 Alibaba Open Code Review(三):Git Diff 解析流程

上一篇文章中,从源码角度找到了ocr review的命令入口。ocr review程序会从解析命令行参数。ocr review 是从哪里启动的?ocr review 为什么知道我改了哪个文件?Open Code Review 识别到了 src/user.js 的变更。[M] 是什么意思?+7 -1 是怎么来的?为什么它知道要审查这个文件?ocr review --preview 和 git diff 有什么关系?Git Diff。通过这一篇,对ocr review的输入有了更清晰的理解。

2026-07-03 12:54:44 332

原创 从 0 学习 Alibaba Open Code Review(二):ocr review 命令入口分析

上一篇文章中,从使用者角度跑通了 Alibaba Open Code Review 的基础流程,包括安装配置、ocr review、JSON 输出、自定义规则配置,以及工具调用日志分析。ocr review 可以识别 Git diff;ocr review 可以对变更代码生成审查意见;ocr review --preview 可以预览本次会审查哪些文件;ocr review --format json 可以输出结构化结果;.opencodereview/rule.json 可以影响审查重点。

2026-07-02 17:25:22 315

原创 从 0 学习 Alibaba Open Code Review(一):用最小 Demo 跑通 AI 代码审查

最近学习 Alibaba 开源的open-code-review项目。这个项目的核心目标是利用大模型能力,对代码变更进行自动化 Code Review。安装 Open Code Review;配置 LLM Provider;执行测试模型连接;创建一个最小 JavaScript Demo 项目;制造一次待审查的 Git diff;使用预览审查范围;使用ocr review审查 Git diff;使用保存结构化审查结果;配置自定义审查规则;使用验证规则是否命中;对比自定义规则前后的审查结果;

2026-06-30 22:33:13 1299

原创 力扣12&13. 整数转罗马数字、罗马数字转整数

力扣12&13. 整数转罗马数字、罗马数字转整数

2024-06-17 15:02:01 359

原创 力扣11. 盛最多水的容器

11. 盛最多水的容器

2024-06-17 11:37:27 230

原创 力扣10.正则表达式匹配(动态规划)

10. 正则表达式匹配

2024-06-14 17:58:11 648

原创 9. 回文数

9.回文数 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

2024-06-13 16:49:03 223

原创 力扣8. 字符串转换整数 (atoi)

8. 字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数。

2024-06-13 15:56:44 458

原创 力扣7. 整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

2024-06-12 18:01:43 279 1

原创 目前有100名囚犯,每个囚犯的编号是1-200之间的随机数。现在要求依次随机生成100名囚犯的编号。输出幸存者的编号,以及他第一次所占的位置值是多少?

目前有100名囚犯,每个囚犯的编号是1-200之间的随机数。现在要求依次随机生成100名囚犯的编号(要求这些囚犯的编号是不能重复的),然后让他们依次站成一排。(注:位置是从1开始计数的),接下来,国王命令手下先干掉全部奇数位置处的人。剩下的人,又从新按位置1开始,再次干掉全部奇数位置处的人,依此类推,直到最后剩下一个人为止,剩下的这个人为幸存者。

2024-06-12 17:08:12 510

原创 力扣3-6 Z 字形变换

首先定义一个数组,还有一个行数和方向变量。当方向向下时,行数加一,当方向向上时,行数减一,当遇到首行或最后一行时改变方向。最后再把数组中元素拼接起来。class Solution {public: string convert(string s, int numRows) { if (numRows == 1) return s; vector<string> rows(numRows, ""); bool down = false.

2022-01-06 17:20:50 217

原创 力扣3-5 最长回文子串

1.暴力法暴力求解,列举所有的子串,判断是否为回文串,保存最长的回文串。class Solution { public boolean isPalindromic(String s) {//判断是否回文 int len = s.length(); for (int i = 0; i < len / 2; i++) { if (s.charAt(i) != s.charAt(len - i - 1)) { return false; } } return tr.

2022-01-04 17:48:48 264

原创 力扣 2-4 寻找两个正序数组的中位数

1.归并(暴力法)合并 nums1,nums2 为第三个数组 排序第三个数组按下标,找出中位数。指针 i,指向数组 nums1;指针 j,指向数组 nums2;指针 k,指向数组 sub。while (i < m && j < n) 使用指针,每次从数组 nums1 nums2 选出当前最小那个数,合并到 sub 中,并同时移动选出了最小那个数的指针。当合并完第三个数组后,我们再根据第三个数组的大小来选出中位数。class Solution {public:

2022-01-02 22:47:06 373

原创 力扣2-3 无重复字符的最长子串

1.暴力法遍历数组的所有的区间,然后找到最长没有重复字符的区间将区间所有元素放入hashset,若有重复返回 false存在重复计算,同一个子串会进行多次判断是否存在重复字符。运行后直接超时。class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(); if (n <= 1) return n; int maxLen = 1;

2022-01-02 21:06:26 259

原创 力扣1-2 两数相加

力扣第二题两数相加

2022-01-02 12:17:23 381

原创 力扣1-1 两数之和

***有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。1.直接暴力法双层for循环遍历,先选中其中一个数,再依次对比后面的数与该数之和是否等于target,满足则输出数组下标。class Solution { public int[] twoSum(int[] nums, int target) { int[] indexs = new int[2]; for(int i = 0; i < nums.length; i++){

2022-01-01 23:25:37 332

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除