Commit 25bd6025 authored by 方海彤's avatar 方海彤 👶🏻

update

parent 3f8a636f
......@@ -47,12 +47,15 @@ ai-code-review:
### 必要配置
在 GitLab **Settings > CI/CD > Variables** 中添加:
推荐在 GitLab **Group → Settings → CI/CD → Variables** 配置一次,所有子项目自动继承;项目级变量会覆盖 group 级。
| 变量 | 必填 | 说明 |
|------|------|------|
| `AI_REVIEW_API_KEY` | ✅ | LLM API 密钥 |
| `FEISHU_WEBHOOK_URL` | 否 | 飞书机器人 Webhook 地址 |
| 变量 | 说明 |
|------|------|
| `AI_REVIEW_API_KEY` | LLM API 密钥(或本地 codex 代理的 Bearer token)。空值会以空 Bearer 调用,公有云 API 会返回 401,本地代理开放模式可接受 |
| `AI_REVIEW_API_URL` | LLM API 地址,缺省指向阿里云百炼;走本地代理时填 `http://<MacIP>:8088/v1` |
| `FEISHU_WEBHOOK_URL` | 飞书机器人 Webhook(建议项目级配置,每项目独立的群) |
> 没有 LLM API key?见下方 [本地 Codex 代理](#本地-codex-代理可选),可用本机 ChatGPT 订阅替代。
## 环境变量
......@@ -99,6 +102,58 @@ git diff → 文件过滤 → LLM 分流判定 → 审查 → 飞书通知
• 命中安全关键词 → 升级为 deep
```
## 本地 Codex 代理(可选)
如果你不想买 LLM API key,但有:① 一台**常开**的 Mac、② **ChatGPT 订阅**(已 `codex login`)、③ CI runner 在内网可访问该 Mac,可以用 `proxy/codex_proxy.py` 把本机 codex CLI 包成 OpenAI 兼容 HTTP 接口。
业务项目侧 **`.gitlab-ci.yml` 完全不动**,只是 GitLab Variables 里的 `AI_REVIEW_API_URL` / `AI_REVIEW_API_KEY` 指向代理而已。
### 部署(Mac 侧,一次性)
1. 确认 codex 已登录:`codex login status` 应显示 `Logged in using ChatGPT`
2. 生成一个 token(任意 32 位随机串),启动代理:
```bash
export CODEX_PROXY_TOKEN=<你的token>
python3 proxy/codex_proxy.py
# 默认监听 0.0.0.0:8088
```
3. 找内网 IP:`ipconfig getifaddr en0`
4. 防睡眠:`caffeinate -di -w $(pgrep -f codex_proxy.py)` 或 系统设置 → 电池/电源 → 防止自动休眠
5. 验证(在另一个终端):
```bash
curl -X POST http://127.0.0.1:8088/v1/chat/completions \
-H "Authorization: Bearer $CODEX_PROXY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"messages":[{"role":"user","content":"回复:ok"}]}'
```
6. 开机自启(可选):编辑 `proxy/com.codex-proxy.plist` 把里面的 `__PROXY_PATH__` / `__SET_YOUR_TOKEN_HERE__` / `__HOME__` 替换好,拷到 `~/Library/LaunchAgents/`,然后 `launchctl load ~/Library/LaunchAgents/com.codex-proxy.plist`
7. macOS 防火墙若开启,第一次访问会弹出"是否允许 python3 接受连接",选允许;或在 系统设置 → 网络 → 防火墙 里手动加 python3 例外
### GitLab 配置(一次性)
在 Group 级 Variables 里设置:
| 变量 | 值 |
|------|------|
| `AI_REVIEW_API_URL` | `http://<你Mac内网IP>:8088/v1` |
| `AI_REVIEW_API_KEY` | 上面的 `CODEX_PROXY_TOKEN` |
| `AI_REVIEW_MODEL` | 任意值(代理忽略,例如 `codex`) |
> 已有项目检查项目级 Variables 里有没有 `AI_REVIEW_API_KEY` —— 项目级会覆盖 group 级,要么删掉让它继承,要么改成新 token。
### 简化版:完全信任内网,关掉鉴权
如果 CI runner 与代理在同一可信内网、不担心被无意调用,可以省掉 Bearer token:
- **Mac 侧**:启动代理时**不设** `CODEX_PROXY_TOKEN`,代理进入开放模式(启动会打 WARNING)
- **GitLab 侧**`AI_REVIEW_API_KEY` 不需要配置(留空或不设都可以),代理不校验
### 注意事项
- **TOS**:把个人 ChatGPT 订阅暴露成内部服务在 OpenAI 条款里属灰色地带,仅限自用、不要对外
- **并发**:代理强制串行(一次只跑一个 codex),多 CI 并发会排队,必要时调高 `STANDARD_TIMEOUT` / `DEEP_TIMEOUT`
- **可用性**:Mac 一旦睡眠/重启/codex 登录失效,所有项目 CI 会挂 —— 关键时刻请用真 API key 兜底
## 项目结构
```
......@@ -112,6 +167,9 @@ ai_review/
├── notify.py # 飞书通知
└── main.py # 主流程编排
ci_review.py # 薄包装入口(兼容现有 CI 调用)
proxy/
├── codex_proxy.py # 本地 Codex CLI -> OpenAI 兼容 HTTP 代理
└── com.codex-proxy.plist # macOS launchd 自启模板
templates/
└── ai-review.yml # GitLab CI 模板
```
......
......@@ -2,11 +2,10 @@
"""主流程编排。"""
import os
import sys
import time
from ai_review.config import (
API_KEY, MODEL, TRIAGE_MODEL,
MODEL, TRIAGE_MODEL,
MAX_DIFF_LINES, STANDARD_MAX_TOKENS, DEEP_MAX_TOKENS,
STANDARD_TIMEOUT, DEEP_TIMEOUT,
format_duration,
......@@ -23,11 +22,6 @@ from ai_review.notify import send_feishu
def main():
total_start = time.time()
if not API_KEY:
print("错误: 未设置 AI_REVIEW_API_KEY 环境变量")
print("请在 GitLab Settings > CI/CD > Variables 中添加。")
sys.exit(0)
branch = os.environ.get("CI_COMMIT_BRANCH", os.environ.get("CI_COMMIT_REF_NAME", "unknown"))
committer = os.environ.get("CI_COMMIT_AUTHOR", os.environ.get("GITLAB_USER_NAME", "unknown"))
commit_msg = os.environ.get("CI_COMMIT_MESSAGE", "")[:100]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment