## 配置GitLab Personal Access Token
登录GitLab,前往Settings → Access Tokens,勾选 **【api】** 与 **【read_repository】** 权限后创建Token,并立即复制保存——此Token仅显示一次,丢失需重新生成。随后进入Dify控制台 → 项目设置 → 环境变量(Environment Variables),新建变量 `GITLAB_TOKEN`,填入刚复制的Token。注意变量名需全大写且包含下划线,否则后续HTTP节点无法正确读取。该配置是整个流程的基础,务必仔细核对。
## 在Dify工作流中添加HTTP请求节点获取MR数据
在Dify工作流编辑器中,点击“+ 添加节点” → 选择“HTTP Request”。将Method设为GET,URL填写:`https://gitlab.example.com/api/v4/projects/{project_id}/merge_requests/{mr_iid}`。其中`{project_id}`需进行URL编码(可直接使用数字ID,或采用`namespace%2Fname`格式),`{mr_iid}`为MR编号(如123)。在Headers中添加 `Authorization: Bearer {{GITLAB_TOKEN}}`,使用双大括号引用环境变量。若缺少此头,GitLab将返回401错误且响应体为空,不明确提示原因。开启“Parse JSON response”选项,后续节点即可直接访问`response.body.title`、`response.body.diff_refs.base_sha`等字段。
## 提取代码变更内容用于LLM分析
首先添加一个“Code”节点(或“Script”节点),编写简单逻辑:从输入中获取`project_id`和`iid`,拼接diff的URL。示例代码如下:
```javascript
const mr = $input;
const projectId = mr.project_id;
const mrIid = mr.iid;
const diffUrl = `https://gitlab.example.com/api/v4/projects/${projectId}/merge_requests/${mrIid}/diffs`;
return { diffUrl };
```
接着连接另一个HTTP Request节点,Method仍为GET,URL使用上一步输出的`diffUrl`,Headers同样包含`Authorization: Bearer {{GITLAB_TOKEN}}`。GitLab的`/diffs`接口返回数组,每个元素包含`old_path`、`new_path`、`diff`字段。需将所有`diff`字段拼接为字符串传递给LLM。后续接入“Text Concatenate”节点,使用表达式 `{{map($input, item => item.diff).join('nn')}}` 聚合所有差异块。注意:若MR涉及大量文件,GitLab默认仅返回前20个diff项,可通过在URL末尾添加`?per_page=100`提升上限,但Dify当前不支持循环分页,因此建议限制MR的文件变更数不超过5个,以避免数据遗漏。
## 构造评审提示词并调用LLM生成意见
添加“LLM”节点,选择已部署的模型(如Qwen2.5-7B-Instruct)。在Prompt中清晰定义上下文与要求:
```
你是一名资深后端工程师,正在评审以下GitLab合并请求:
标题:{{mr.title}}
描述:{{mr.description}}
变更摘要:
{{diff_text}}
请严格按三部分输出:1. 风险点(最多3条,每条以⚠️开头);2. 改进建议(最多3条,每条以?开头);3. 总体结论(仅用“通过”或“拒绝”二字)。不加任何额外说明、不换行、不加序号。
```
注意:`{{diff_text}}`必须为上一步拼接后的完整diff字符串。若此处为空或被截断,LLM将因缺乏上下文而输出“未发现风险”,导致评审失效。
## 将评审结果以评论形式提交回GitLab
最后一步为回写评论。添加“HTTP Request”节点,Method设为POST,URL填写 `https://gitlab.example.com/api/v4/projects/{project_id}/merge_requests/{mr_iid}/notes`。Body选择JSON格式,填入:
```json
{"body": "{{llm_output}}"}
```
其中`{{llm_output}}`直接引用LLM节点的原始输出。Headers中除`Authorization: Bearer {{GITLAB_TOKEN}}`外,必须添加`Content-Type: application/json`——若遗漏,GitLab将返回415 Unsupported Media Type,且错误提示不明确。对于自托管GitLab且证书不可信的情况,可勾选“Ignore SSL errors”,但生产环境建议使用有效证书,尽量避免开启此选项。Dify接入GitLab API实现代码合并自动评审
通过Dify工作流调用GitLabAPI获取合并请求详情与代码差异,结合LLM生成评审意见并回传评论。需配置PersonalAccessToken、设置环境变量,利用HTTP节点获取数据,Script节点处理分页,LLM按格式输出风险与建议,最终以POST提交评论至MR。
要在Dify中实现自动化评审GitLab合并请求(Merge Request),工作流需具备通过GitLab API获取MR详情、评论及代码差异的能力,并结合大语言模型(LLM)生成评审意见,最终将结果回传至评论区。这要求Dify工作流支持外部API调用、提供安全敏感凭据存储,且GitLab实例需启用Personal Access Token认证。核心链路如下:配置环境变量 → 调用API拉取MR数据与diff → 使用Script节点处理分页限制 → LLM按指定格式生成评审意见 → 通过POST请求提交评论。
## 配置GitLab Personal Access Token
登录GitLab,前往Settings → Access Tokens,勾选 **【api】** 与 **【read_repository】** 权限后创建Token,并立即复制保存——此Token仅显示一次,丢失需重新生成。随后进入Dify控制台 → 项目设置 → 环境变量(Environment Variables),新建变量 `GITLAB_TOKEN`,填入刚复制的Token。注意变量名需全大写且包含下划线,否则后续HTTP节点无法正确读取。该配置是整个流程的基础,务必仔细核对。
## 在Dify工作流中添加HTTP请求节点获取MR数据
在Dify工作流编辑器中,点击“+ 添加节点” → 选择“HTTP Request”。将Method设为GET,URL填写:`https://gitlab.example.com/api/v4/projects/{project_id}/merge_requests/{mr_iid}`。其中`{project_id}`需进行URL编码(可直接使用数字ID,或采用`namespace%2Fname`格式),`{mr_iid}`为MR编号(如123)。在Headers中添加 `Authorization: Bearer {{GITLAB_TOKEN}}`,使用双大括号引用环境变量。若缺少此头,GitLab将返回401错误且响应体为空,不明确提示原因。开启“Parse JSON response”选项,后续节点即可直接访问`response.body.title`、`response.body.diff_refs.base_sha`等字段。
## 提取代码变更内容用于LLM分析
首先添加一个“Code”节点(或“Script”节点),编写简单逻辑:从输入中获取`project_id`和`iid`,拼接diff的URL。示例代码如下:
```javascript
const mr = $input;
const projectId = mr.project_id;
const mrIid = mr.iid;
const diffUrl = `https://gitlab.example.com/api/v4/projects/${projectId}/merge_requests/${mrIid}/diffs`;
return { diffUrl };
```
接着连接另一个HTTP Request节点,Method仍为GET,URL使用上一步输出的`diffUrl`,Headers同样包含`Authorization: Bearer {{GITLAB_TOKEN}}`。GitLab的`/diffs`接口返回数组,每个元素包含`old_path`、`new_path`、`diff`字段。需将所有`diff`字段拼接为字符串传递给LLM。后续接入“Text Concatenate”节点,使用表达式 `{{map($input, item => item.diff).join('nn')}}` 聚合所有差异块。注意:若MR涉及大量文件,GitLab默认仅返回前20个diff项,可通过在URL末尾添加`?per_page=100`提升上限,但Dify当前不支持循环分页,因此建议限制MR的文件变更数不超过5个,以避免数据遗漏。
## 构造评审提示词并调用LLM生成意见
添加“LLM”节点,选择已部署的模型(如Qwen2.5-7B-Instruct)。在Prompt中清晰定义上下文与要求:
```
你是一名资深后端工程师,正在评审以下GitLab合并请求:
标题:{{mr.title}}
描述:{{mr.description}}
变更摘要:
{{diff_text}}
请严格按三部分输出:1. 风险点(最多3条,每条以⚠️开头);2. 改进建议(最多3条,每条以?开头);3. 总体结论(仅用“通过”或“拒绝”二字)。不加任何额外说明、不换行、不加序号。
```
注意:`{{diff_text}}`必须为上一步拼接后的完整diff字符串。若此处为空或被截断,LLM将因缺乏上下文而输出“未发现风险”,导致评审失效。
## 将评审结果以评论形式提交回GitLab
最后一步为回写评论。添加“HTTP Request”节点,Method设为POST,URL填写 `https://gitlab.example.com/api/v4/projects/{project_id}/merge_requests/{mr_iid}/notes`。Body选择JSON格式,填入:
```json
{"body": "{{llm_output}}"}
```
其中`{{llm_output}}`直接引用LLM节点的原始输出。Headers中除`Authorization: Bearer {{GITLAB_TOKEN}}`外,必须添加`Content-Type: application/json`——若遗漏,GitLab将返回415 Unsupported Media Type,且错误提示不明确。对于自托管GitLab且证书不可信的情况,可勾选“Ignore SSL errors”,但生产环境建议使用有效证书,尽量避免开启此选项。
## 配置GitLab Personal Access Token
登录GitLab,前往Settings → Access Tokens,勾选 **【api】** 与 **【read_repository】** 权限后创建Token,并立即复制保存——此Token仅显示一次,丢失需重新生成。随后进入Dify控制台 → 项目设置 → 环境变量(Environment Variables),新建变量 `GITLAB_TOKEN`,填入刚复制的Token。注意变量名需全大写且包含下划线,否则后续HTTP节点无法正确读取。该配置是整个流程的基础,务必仔细核对。
## 在Dify工作流中添加HTTP请求节点获取MR数据
在Dify工作流编辑器中,点击“+ 添加节点” → 选择“HTTP Request”。将Method设为GET,URL填写:`https://gitlab.example.com/api/v4/projects/{project_id}/merge_requests/{mr_iid}`。其中`{project_id}`需进行URL编码(可直接使用数字ID,或采用`namespace%2Fname`格式),`{mr_iid}`为MR编号(如123)。在Headers中添加 `Authorization: Bearer {{GITLAB_TOKEN}}`,使用双大括号引用环境变量。若缺少此头,GitLab将返回401错误且响应体为空,不明确提示原因。开启“Parse JSON response”选项,后续节点即可直接访问`response.body.title`、`response.body.diff_refs.base_sha`等字段。
## 提取代码变更内容用于LLM分析
首先添加一个“Code”节点(或“Script”节点),编写简单逻辑:从输入中获取`project_id`和`iid`,拼接diff的URL。示例代码如下:
```javascript
const mr = $input;
const projectId = mr.project_id;
const mrIid = mr.iid;
const diffUrl = `https://gitlab.example.com/api/v4/projects/${projectId}/merge_requests/${mrIid}/diffs`;
return { diffUrl };
```
接着连接另一个HTTP Request节点,Method仍为GET,URL使用上一步输出的`diffUrl`,Headers同样包含`Authorization: Bearer {{GITLAB_TOKEN}}`。GitLab的`/diffs`接口返回数组,每个元素包含`old_path`、`new_path`、`diff`字段。需将所有`diff`字段拼接为字符串传递给LLM。后续接入“Text Concatenate”节点,使用表达式 `{{map($input, item => item.diff).join('nn')}}` 聚合所有差异块。注意:若MR涉及大量文件,GitLab默认仅返回前20个diff项,可通过在URL末尾添加`?per_page=100`提升上限,但Dify当前不支持循环分页,因此建议限制MR的文件变更数不超过5个,以避免数据遗漏。
## 构造评审提示词并调用LLM生成意见
添加“LLM”节点,选择已部署的模型(如Qwen2.5-7B-Instruct)。在Prompt中清晰定义上下文与要求:
```
你是一名资深后端工程师,正在评审以下GitLab合并请求:
标题:{{mr.title}}
描述:{{mr.description}}
变更摘要:
{{diff_text}}
请严格按三部分输出:1. 风险点(最多3条,每条以⚠️开头);2. 改进建议(最多3条,每条以?开头);3. 总体结论(仅用“通过”或“拒绝”二字)。不加任何额外说明、不换行、不加序号。
```
注意:`{{diff_text}}`必须为上一步拼接后的完整diff字符串。若此处为空或被截断,LLM将因缺乏上下文而输出“未发现风险”,导致评审失效。
## 将评审结果以评论形式提交回GitLab
最后一步为回写评论。添加“HTTP Request”节点,Method设为POST,URL填写 `https://gitlab.example.com/api/v4/projects/{project_id}/merge_requests/{mr_iid}/notes`。Body选择JSON格式,填入:
```json
{"body": "{{llm_output}}"}
```
其中`{{llm_output}}`直接引用LLM节点的原始输出。Headers中除`Authorization: Bearer {{GITLAB_TOKEN}}`外,必须添加`Content-Type: application/json`——若遗漏,GitLab将返回415 Unsupported Media Type,且错误提示不明确。对于自托管GitLab且证书不可信的情况,可勾选“Ignore SSL errors”,但生产环境建议使用有效证书,尽量避免开启此选项。来源:https://www.php.cn/faq/2773294.html?uid=1589237
相关热点
继续查看同栏目近期热点。
延伸阅读
补充最近整理过的热点入口。
