[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80042":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":13,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":32,"readmeContent":33,"aiSummary":34,"trendingCount":15,"starSnapshotCount":15,"syncStatus":35,"lastSyncTime":36,"discoverSource":37},80042,"pr-review-agent-council","csy-csy123\u002Fpr-review-agent-council","csy-csy123","学习 learn-claude-code 后的 PR Review Agent 实践项目：构建 Debate Council 多 Agent 审查、Tool Calling、结构化报告与 AI Judge 评估。","https:\u002F\u002Fgithub.com\u002Fcsy-csy123\u002Fpr-review-agent-council#readme",null,"Python",71,5,64,0,3,7,9,2.33,false,"main",true,[24,25,26,27,28,29,30,31],"ai-agent","ai-judge","learn-claude-code","llm","multi-agent","pr-review","skills","tool-calling","2026-06-12 02:03:57","# PR Review Agent Council\n\n面向中文用户的 **Debate Council PR Review Agent**。项目基于 `learn-claude-code` 的 Agent 工程思路改造，用 Python + Aliyun DashScope\u002FQwen 实现一个只读 PR Review Agent：读取 Git diff 和 PR 描述，组织多个 reviewer 生成候选问题，再通过 debate loop 对 finding 进行质疑、补证、反驳、合并和裁决，最后输出标准化报告，并可用 AI Judge 做质量评估。\n\n当前默认模式是 `--mode debate`。旧的 `--mode council` 仍然保留，作为固定 workflow baseline，方便复现、教学和效果对比。\n\n本项目适合用来学习：\n\n- 多 Agent 协作审查代码。\n- Tool Calling 和只读代码工具设计。\n- Skill Loading 如何把审查规范注入 prompt。\n- Debate Loop 如何区别于固定 workflow。\n- ReportWriterAgent 如何把 LLM 输出约束为固定 JSON。\n- AI Judge 如何作为 review quality 的辅助评价指标。\n\n详细中文教程见：[docs\u002F中文教程-Agent简历面试.md](docs\u002F中文教程-Agent简历面试.md)\n\n## 功能概览\n\n- **Debate Council 默认审查模式**：以 `--mode debate` 运行，多名 reviewer 先提出候选 finding，再由 Lead Debate Controller 动态决定质疑、补证、反驳、合并、接受或拒绝。\n- **多 Agent 分工协作**：内置 Security、Correctness、Test、Maintainability、Critic、Lead、ReportWriter、Judge 等角色，把 PR Review 拆成覆盖、质检、裁决和评估多个阶段。\n- **动态 Debate Loop**：不同于固定 workflow，系统会围绕每个 finding 的证据质量和误报风险进行多轮处理，重点提升有效问题质量，而不是单纯增加问题数量。\n- **只读 Tool Calling**：通过 `git_diff`、`changed_files`、`read_file_context`、`search_code`、`secret_scan`、受控 `run_tests` 等工具观察仓库，避免 Agent 凭空猜测。\n- **Skill Loading**：从 `skills\u002Fcode-review\u002FSKILL.md` 加载审查规范、严重级别定义和 finding schema，并注入 reviewer、critic、lead、report writer 的 prompt。\n- **FindingLifecycle + EvidenceStore**：记录 candidate、challenged、accepted、rejected、downgraded 等状态，并为每个 finding 绑定 diff 行、文件上下文、critic notes 和裁决理由。\n- **标准化 ReportWriterAgent**：LLM 只能输出固定 JSON schema，Markdown 由程序模板渲染，减少文笔差异对报告质量和 AI Judge 评分的影响。\n- **AI Judge 质量评估**：独立命令触发，默认使用 `qwen-plus`，按 critical issue coverage、evidence quality、severity accuracy、duplicate\u002Fnoise control、actionability、report clarity 等维度评分。\n- **可观测 Transcript**：所有 action、observation、message、evidence、resolution 都写入 JSONL trace，便于复盘、调试和面试展示。\n- **Council Baseline 保留**：`--mode council` 作为旧版固定流程 baseline，方便复现新旧模式对比。\n\n## 新旧模式流程图\n\n旧版 `--mode council` 是固定委员会 workflow，适合作为 baseline 理解：\n\n```mermaid\nflowchart TD\n    A[\"输入\u003Cbr\u002F>repo + base\u002Ftarget + PR 描述\"] --> B[\"ReviewAgent\"]\n    B --> C[\"ReviewTools\u003Cbr\u002F>diff \u002F context \u002F risk_scan \u002F retrieve_company_policy\"]\n    B --> D[\"SkillLoader\u003Cbr\u002F>加载 code-review skill\"]\n    B --> D2[\"CompanyKnowledgeBase\u003Cbr\u002F>company Markdown -> chunks -> index\"]\n    B --> E[\"LLM Client\u003Cbr\u002F>Qwen \u002F fallback\"]\n\n    C --> F[\"ReviewCouncil\u003Cbr\u002F>固定编排\"]\n    D --> F\n    D2 --> F\n    E --> F\n\n    D2 --> G2[\"company_knowledge\u003Cbr\u002F>context injection\"]\n    G2 --> G[\"Lead Reviewer\u003Cbr\u002F>生成 review focus\"]\n    F --> G\n    G --> H[\"Security Reviewer\"]\n    G --> I[\"Correctness Reviewer\"]\n    G --> J[\"Test Reviewer\"]\n    G --> K[\"Maintainability Reviewer\"]\n    G --> K2[\"Company Policy Reviewer\u003Cbr\u002F>risk_scan + policy retrieval\"]\n\n    H --> L[\"Candidate Findings\"]\n    I --> L\n    J --> L\n    K --> L\n    K2 --> L\n\n    L --> L2[\"Finding-level RAG\u003Cbr\u002F>attach matched company policies\"]\n    L2 --> M[\"EvidenceStore\u003Cbr\u002F>diff context + company_policy evidence\"]\n    M --> N[\"Critic Reviewer\u003Cbr\u002F>一轮质疑\"]\n    N --> O[\"Lead Reviewer\u003Cbr\u002F>一轮裁决\"]\n    O --> P[\"Accepted \u002F Rejected \u002F Downgraded\"]\n    P --> Q[\"ReportWriter\"]\n    Q --> R[\"report.md \u002F findings.json \u002F judge_input.json\u003Cbr\u002F>policy_references + transcript.jsonl\"]\n```\n\n当前默认 `--mode debate` 保留 reviewer 团队，但把 finding 质量控制升级为动态 debate loop：\n\n```mermaid\nflowchart TD\n    A[\"输入\u003Cbr\u002F>repo + base\u002Ftarget + PR 描述\"] --> B[\"ReviewAgent\"]\n    B --> C[\"SkillLoader\u003Cbr\u002F>加载 code-review skill\"]\n    B --> D[\"ReviewTools\u003Cbr\u002F>git_diff \u002F changed_files \u002F read_file_context \u002F search_code \u002F risk_scan \u002F retrieve_company_policy\"]\n    B --> D2[\"CompanyKnowledgeBase\u003Cbr\u002F>Markdown chunks + DashScope embeddings\"]\n    B --> E[\"AliyunDashScopeClient\u003Cbr\u002F>Qwen \u002F DashScope\"]\n\n    C --> F[\"skill_context\"]\n    D2 --> F2[\"company_knowledge context\"]\n    D2 --> F3[\"embedding_hybrid\u003Cbr\u002F>or keyword_fallback\"]\n    D --> G[\"DebateCouncilLoop\u003Cbr\u002F>默认模式\"]\n    E --> G\n    F --> G\n    F2 --> G\n\n    G --> H[\"Specialist Reviewers\u003Cbr\u002F>Security \u002F Correctness \u002F Test \u002F Maintainability\"]\n    F3 --> H2[\"Company Policy Reviewer\u003Cbr\u002F>RAG as reviewer\"]\n    H --> I[\"Candidate Findings\"]\n    H2 --> I\n    I --> I2[\"Finding-level policy retrieval\u003Cbr\u002F>title + evidence + impact + suggestion\"]\n    I2 --> J[\"EvidenceStore\u003Cbr\u002F>diff context + company_policy + critic notes\"]\n    I --> K[\"FindingLifecycle\u003Cbr\u002F>candidate \u002F challenged \u002F accepted \u002F rejected \u002F downgraded\"]\n\n    K --> L[\"Lead Debate Controller\u003Cbr\u002F>动态选择下一步 action\"]\n    L --> M{\"Debate Action\"}\n    M --> M1[\"ask_critic\"]\n    M --> M2[\"request_reviewer_defense\"]\n    M --> M3[\"request_more_evidence\"]\n    M --> M4[\"revise_finding\"]\n    M --> M5[\"merge_duplicates\"]\n    M --> M6[\"accept \u002F reject \u002F finalize\"]\n\n    M1 --> N[\"CriticReviewer\"]\n    M2 --> O[\"Reviewer Defense\"]\n    M3 --> J\n    M4 --> K\n    M5 --> K\n    M6 --> K\n    N --> J\n    O --> J\n    J --> L\n\n    K --> P[\"Accepted Findings\"]\n    P --> Q[\"ReportWriterAgent\u003Cbr\u002F>固定 JSON schema\"]\n    Q --> R[\"Template Renderer\u003Cbr\u002F>标准化 Markdown\"]\n    R --> S[\"report.md\"]\n    R --> T[\"findings.json\"]\n    R --> U[\"judge_input.json\u003Cbr\u002F>policy_references\"]\n\n    U --> V[\"AI Judge\u003Cbr\u002F>qwen-plus，一次性评估\"]\n    V --> W[\"judge.json \u002F judge.md\"]\n\n    G --> X[\"transcript.jsonl\"]\n```\n\n## 安装与复现\n\n### 1. 克隆并安装依赖\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fcsy-csy123\u002Fpr-review-agent-council.git\ncd pr-review-agent-council\npython -m venv .venv\n```\n\nWindows PowerShell:\n\n```powershell\n.\\.venv\\Scripts\\Activate.ps1\npython -m pip install -U pip\npython -m pip install -r requirements.txt\n```\n\nmacOS \u002F Linux:\n\n```bash\nsource .venv\u002Fbin\u002Factivate\npython -m pip install -U pip\npython -m pip install -r requirements.txt\n```\n\n### 2. 配置 DashScope API Key\n\n复制 `.env.example` 为 `.env`，然后填入自己的 key：\n\n```text\nDASHSCOPE_API_KEY=your_dashscope_api_key\n```\n\n程序启动时会读取 `.env` 中的 `DASHSCOPE_API_KEY`。\n\n如果只想本地体验，不调用大模型，可以运行时加：\n\n```bash\n--llm-provider none\n```\n\n### 3. 运行测试\n\n```bash\npython -m pytest -p no:cacheprovider\n```\n\n当前测试覆盖 debate loop、工具调用、report writer、AI Judge fallback、council\u002Fsimple 兼容逻辑等。\n\n项目运行代码主要使用 Python 标准库；`requirements.txt` 中的 `pytest` 用于复现测试和验证。\n\n## 快速运行\n\n### 默认：Debate Council Agent\n\n```bash\npython agents\u002Freview_agent.py --repo . --base HEAD~1 --target HEAD --pr-description docs\u002Fdemo-pr.md --language zh\n```\n\n这等价于：\n\n```bash\npython agents\u002Freview_agent.py --repo . --base HEAD~1 --target HEAD --pr-description docs\u002Fdemo-pr.md --language zh --mode debate\n```\n\n### 旧模式：Council Baseline\n\n```bash\npython agents\u002Freview_agent.py --repo . --base HEAD~1 --target HEAD --pr-description docs\u002Fdemo-pr.md --language zh --mode council\n```\n\n这个模式保留固定流程：多个 reviewer 先审查，critic 再质疑，lead reviewer 再裁决。它适合作为 baseline，用来解释为什么后来升级为 debate loop。\n\n### 本地兜底：Simple\n\n```bash\npython agents\u002Freview_agent.py --repo . --base HEAD~1 --target HEAD --pr-description docs\u002Fdemo-pr.md --language zh --mode simple --llm-provider none\n```\n\n## 使用 Demo PR 复现\n\n如果你的当前 `HEAD~1..HEAD` 不是 demo 代码，可以先找到项目内置 demo commit：\n\n```bash\ngit log --format=%H --grep \"Demo PR with payment risks\" --max-count=1\n```\n\n假设输出为 `\u003Cdemo_commit>`，则运行：\n\n```bash\npython agents\u002Freview_agent.py --repo . --base \u003Cdemo_commit>^ --target \u003Cdemo_commit> --pr-description docs\u002Fdemo-pr.md --language zh --mode debate\n```\n\n旧 council 对照：\n\n```bash\npython agents\u002Freview_agent.py --repo . --base \u003Cdemo_commit>^ --target \u003Cdemo_commit> --pr-description docs\u002Fdemo-pr.md --language zh --mode council\n```\n\n## AI Judge 评估\n\n普通 review 不会自动调用 AI Judge。先运行一次 review，生成 `.review-agent\u002Fjudge_input.json`，再显式执行：\n\n```bash\npython agents\u002Freview_agent.py --judge-report .review-agent\u002Fjudge_input.json --repo . --base HEAD~1 --target HEAD --pr-description docs\u002Fdemo-pr.md\n```\n\n默认 judge model 是 `qwen-plus`，也可以指定：\n\n```bash\npython agents\u002Freview_agent.py --judge-report .review-agent\u002Fjudge_input.json --repo . --base HEAD~1 --target HEAD --pr-description docs\u002Fdemo-pr.md --judge-model qwen-plus\n```\n\nAI Judge 不是 ground truth。它的定位是一个自动化 evaluation proxy：在固定输入、固定 JSON schema、固定 rubric、固定模型下，对不同 agent 策略做可追踪的相对比较。更严谨的评估还应该结合人工标注、多次采样、多模型投票和真实 PR 反馈。\n\n## 主要参数\n\n```text\n--repo                 仓库路径，默认当前目录\n--base                 对比基线，例如 HEAD~1、main 或某个 commit\n--target               对比目标，例如 HEAD、feature branch 或某个 commit\n--pr-description       PR 描述文件，可为空\n--language             输出语言，zh 或 en\n--mode                 debate、council 或 simple，默认 debate\n--debate-max-actions   Debate loop 最大 action 数，默认 12\n--critic-pass          是否执行 critic review，默认 true\n--test-command         允许 agent 调用的测试命令；未传入时 run_tests 会受控拒绝\n--llm-provider         aliyun 或 none\n--llm-model            Review 使用的 DashScope 模型，默认 qwen-turbo-latest\n--llm-base-url         OpenAI-compatible DashScope base URL\n--judge-report         对指定 judge_input.json 运行 AI Judge\n--judge-model          Judge 使用的 DashScope 模型，默认 qwen-plus\n```\n\n## 输出文件\n\n```text\n.review-agent\u002Freport.md              # 标准化 Markdown 审查报告\n.review-agent\u002Ffindings.json          # 结构化 findings 和生命周期信息\n.review-agent\u002Fjudge_input.json       # 给 AI Judge 使用的标准化输入\n.review-agent\u002Ftranscript.jsonl       # Review 过程 trace\n.review-agent\u002Fjudge.json             # AI Judge JSON 评分\n.review-agent\u002Fjudge.md               # AI Judge Markdown 评分报告\n.review-agent\u002Fjudge-transcript.jsonl # Judge 调用 trace\n```\n\n## Debate 与 Council 的区别\n\n| 维度 | `--mode council` | `--mode debate` |\n|---|---|---|\n| 定位 | 旧版固定 workflow baseline | 当前默认多 Agent debate 模式 |\n| Reviewer 分工 | Security \u002F Correctness \u002F Test \u002F Maintainability | 保留同样 reviewer 分工 |\n| 控制方式 | 程序固定执行 reviewer -> critic -> lead -> report | Lead Debate Controller 动态选择 action |\n| Finding 质量控制 | 一轮 critic + 一轮 lead resolution | 多轮质疑、补证、反驳、合并、接受、拒绝 |\n| 重复项处理 | 容易出现多个 reviewer 报同一问题 | 支持 `merge_duplicates` |\n| 报告 | 标准化输出 | 标准化输出，并可由 ReportWriterAgent 进一步整理 |\n| 适合用途 | baseline 对照、教学解释 | 默认推荐、项目展示、效果评估 |\n\n核心思想：PR review 不应该用“发现问题数量”作为主要指标。更合理的指标是关键风险覆盖、证据质量、严重级别准确性、重复\u002F噪音控制、修复建议可执行性和报告清晰度。\n\n## Demo 审查质量对比\n\n以下结果来自内置 `payment_risk.py` demo，在相同 diff 和 PR 描述下分别运行 `--mode council` 与 `--mode debate`，再用相同的 `qwen-plus` AI Judge 对标准化 `judge_input.json` 评分。这个分数不是绝对真理，而是用于横向比较两种 agent 策略的 evaluation proxy。\n\n| 指标 | `council` | `debate` | 变化 |\n|---|---:|---:|---:|\n| AI Judge 总分 | 72 | 92 | +20 |\n| critical issue coverage | 100 | 100 | 持平 |\n| evidence quality | 85 | 95 | +10 |\n| severity accuracy | 70 | 90 | +20 |\n| duplicate\u002Fnoise control | 40 | 98 | +58 |\n| actionability | 90 | 96 | +6 |\n| report clarity | 80 | 85 | +5 |\n\n对比结果说明：新版 `debate` 并不是单纯追求更多 findings，而是通过 critic、补证、合并重复项和标准化报告，提升证据质量、严重级别判断和重复\u002F噪音控制。\n\n示例输出已整理在 [docs\u002Fdemo-results](docs\u002Fdemo-results\u002FREADME.md)，包含脱敏后的 council\u002Fdebate 报告和 AI Judge 评分结果。\n\n## 项目结构\n\n```text\nagents\u002Freview_agent.py              # 主实现：CLI、tools、LLM client、agent loop、report、judge\nskills\u002Fcode-review\u002FSKILL.md         # code review skill，注入审查规范和 finding schema\ndocs\u002Fdemo-pr.md                     # Demo PR 描述\ndocs\u002Fdemo-results\u002F                  # 脱敏后的 demo 报告和 AI Judge 评分结果\ndocs\u002F中文教程-Agent简历面试.md       # 中文教程、简历写法、面试问答\ndemo\u002Fpr-fixture\u002Fpayment_risk.py     # Demo 风险代码\ntests\u002Ftest_review_agent.py          # 单元测试与集成测试\nrequirements.txt                    # 运行与测试依赖\n.env.example                        # 环境变量模板\n```\n\n## 和 learn-claude-code \u002F Claude Code 思路的关系\n\n这个项目不是 Claude Code 本身，也没有复制 Claude Code 内部实现。它是基于 `learn-claude-code` 的学习思路做的 PR Review Agent 项目，借鉴并工程化了以下 Agent 技术：\n\n- **Tool Calling**：Agent 只能通过受控只读工具观察仓库，如 `git_diff`、`changed_files`、`read_file_context`、`search_code`、`secret_scan`、受控 `run_tests`。\n- **Skill Loading**：从 `skills\u002Fcode-review\u002FSKILL.md` 加载审查规范和 finding schema，注入到 reviewer、critic、lead、report writer 的 prompt。\n- **Multi-Agent System**：Security、Correctness、Test、Maintainability、Critic、Lead、ReportWriter、Judge 以不同角色协作。\n- **Debate Loop**：不是固定流程结束，而是围绕 finding 进行动态 action 选择。\n- **Todo \u002F Lifecycle 思想**：通过 FindingLifecycle 管理 candidate、challenged、accepted、rejected、downgraded 状态。\n- **Structured Output**：review、debate action、report、judge 都要求 JSON 输出，程序负责校验与模板渲染。\n- **Observability**：用 JSONL transcript 记录每一步，便于调试、复盘和面试展示。\n\n## 简历写法示例\n\n可以根据简历篇幅选择下面任意一种写法：\n\n**偏工程落地版**\n\n> 基于 Python、Aliyun DashScope\u002FQwen 实现 Debate Council PR Review Agent，构建 Security\u002FCorrectness\u002FTest\u002FMaintainability Reviewer、Critic、Lead Debate Controller、ReportWriterAgent 与 AI Judge 的多 Agent 协作审查链路；通过只读 Tool Calling 获取 Git diff、变更文件、代码上下文、关键词检索和密钥扫描结果，并用 EvidenceStore 与 FindingLifecycle 管理候选问题、质疑、补证、合并、接受、拒绝和降级流程。\n\n**偏 Agent 技术版**\n\n> 参考 learn-claude-code 的 Agent 工程思想，设计面向 PR Review 的 Debate Loop：Lead Controller 基于 finding 状态动态选择 `ask_critic`、`request_reviewer_defense`、`request_more_evidence`、`merge_duplicates`、`accept_finding`、`reject_finding` 等 action；结合 Skill Loading、结构化 JSON 输出、受控工具调用和 JSONL Transcript，实现可追踪、可降级、可复现的多 Agent 代码审查系统。\n\n**偏效果评估版**\n\n> 设计标准化 ReportWriterAgent 与 AI Judge 评估链路：ReportWriterAgent 仅输出固定 JSON schema，由程序模板渲染 Markdown，降低文笔对评估的影响；AI Judge 基于 `judge_input.json` 和固定 rubric 从 critical issue coverage、evidence quality、severity accuracy、duplicate\u002Fnoise control、actionability、report clarity 等维度对 review quality 做相对评分，用于比较 debate 模式与 council baseline 的审查质量。\n\n## Company Knowledge RAG\n\n新版本新增 **公司知识对齐 RAG**，用于把通用 PR review 能力对齐到特定公司的编码规范、安全基线、支付规范、测试要求和历史缺陷案例。\n\n默认知识库位于：\n\n```text\nknowledge\u002Fcompany\u002F\n  security_baseline.md\n  payment_review_policy.md\n  testing_policy.md\n  incident_cases.md\n```\n\nRAG 现在接在三层：\n\n- **上下文层**：review 开始前检索相关公司规范，注入 `\u003Ccompany_knowledge>`。\n- **证据层**：每个 candidate finding 生成后检索相关规范，写入 `EvidenceStore`，source 为 `company_policy`。\n- **发现层**：新增 `company-policy-reviewer`，基于 `risk_scan + retrieve_company_policy` 主动发现公司规范违规。\n\n```mermaid\nflowchart TD\n    A[\"PR 输入\u003Cbr\u002F>diff + changed files + description\"] --> B[\"ReviewAgent\"]\n    B --> C[\"SkillLoader\u003Cbr\u002F>code-review skill\"]\n    B --> D[\"CompanyKnowledgeBase\u003Cbr\u002F>Markdown chunks + DashScope embeddings\"]\n    B --> E[\"ReviewTools\u003Cbr\u002F>risk_scan \u002F retrieve_company_policy\"]\n\n    D --> F[\"Company Knowledge RAG\u003Cbr\u002F>embedding_hybrid \u002F keyword_fallback\"]\n    F --> G[\"company_knowledge context\"]\n    C --> H[\"Specialist Reviewers\"]\n    G --> H\n\n    H --> I[\"Candidate Findings\"]\n    I --> J[\"Finding-level policy retrieval\"]\n    J --> K[\"EvidenceStore\u003Cbr\u002F>company_policy evidence\"]\n\n    E --> L[\"CompanyPolicyReviewer\u003Cbr\u002F>RAG as reviewer\"]\n    L --> I\n\n    K --> M[\"Critic + Lead Debate Controller\"]\n    M --> N[\"ReportWriterAgent\"]\n    N --> O[\"policy_references\u003Cbr\u002F>report.md \u002F judge_input.json\"]\n```\n\n常用命令：\n\n```bash\n# 默认启用公司知识 RAG\npython agents\u002Freview_agent.py --repo . --base HEAD~1 --target HEAD --pr-description docs\u002Fdemo-pr.md --language zh --mode debate\n\n# 指定知识库目录\npython agents\u002Freview_agent.py --repo . --base HEAD~1 --target HEAD --company-knowledge-dir knowledge\u002Fcompany\n\n# 关闭 RAG 做对比实验\npython agents\u002Freview_agent.py --repo . --base HEAD~1 --target HEAD --disable-company-rag\n```\n\n有 `DASHSCOPE_API_KEY` 时使用 DashScope OpenAI-compatible embeddings，默认模型 `text-embedding-v4`、维度 `1024`；无 key 或请求失败时自动退化到 `keyword_fallback`，不会阻塞本地 demo。\n\n详细设计见 [docs\u002Fcompany-rag.md](docs\u002Fcompany-rag.md)，demo 快照见 [docs\u002Fdemo-results\u002Fcompany-rag-report.md](docs\u002Fdemo-results\u002Fcompany-rag-report.md)，简历与面试包装见 [docs\u002Fresume-company-rag-update.md](docs\u002Fresume-company-rag-update.md)。\n\n## Star History\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=csy-csy123\u002Fpr-review-agent-council&type=Date)](https:\u002F\u002Fwww.star-history.com\u002F#csy-csy123\u002Fpr-review-agent-council&Date)\n","该项目是一个面向中文用户的多Agent代码审查工具，基于`learn-claude-code`的思路改造，使用Python和阿里云DashScope\u002FQwen实现。其核心功能包括多Agent协作审查代码、动态Debate Loop机制以提高问题质量、只读Tool Calling设计避免无根据猜测、Skill Loading将审查规范注入提示词以及标准化报告生成与AI Judge评估。适合用于学习多Agent系统构建、代码审查自动化、提升代码质量和辅助进行PR审查流程的教学与研究场景。",2,"2026-06-11 03:59:00","CREATED_QUERY"]