Skip to content

Multi-Agent Code Review

Use specialized agents to review code from multiple perspectives.

Basic Multi-Agent Review

from lionagi import Session, Branch, iModel

session = Session()

# Create specialized reviewers
security = Branch(
    chat_model=iModel(provider="openai", model="gpt-4.1-mini"),
    system="Security expert. Focus only on security issues."
)

performance = Branch(
    chat_model=iModel(provider="openai", model="gpt-4.1-mini"),
    system="Performance expert. Focus only on performance issues."
)

maintainability = Branch(
    chat_model=iModel(provider="openai", model="gpt-4.1-mini"),
    system="Code quality expert. Focus on maintainability and readability."
)

session.include_branches([security, performance, maintainability])

# Code to review
code = '''
def login(user, pwd):
    query = f"SELECT * FROM users WHERE name='{user}' AND pass='{pwd}'"
    return db.execute(query).fetchone()
'''

# Parallel reviews
import asyncio

security_result, performance_result, maintainability_result = await asyncio.gather(
    security.chat(f"Security review: {code}"),
    performance.chat(f"Performance review: {code}"),
    maintainability.chat(f"Code quality review: {code}"),
)

review_results = {
    "security": security_result,
    "performance": performance_result,
    "maintainability": maintainability_result,
}

Builder Pattern Review

from lionagi import Session, Builder, Branch, iModel

session = Session()
builder = Builder("code_review")

# Reviewers
security_branch = Branch(
    chat_model=iModel(provider="openai", model="gpt-4.1-mini"),
    system="Security code reviewer"
)
quality_branch = Branch(
    chat_model=iModel(provider="openai", model="gpt-4.1-mini"),
    system="Code quality reviewer"
)

session.include_branches([security_branch, quality_branch])

# Code snippet to review (example with SQL injection vulnerability)
user_input = "1 OR 1=1"  # Example malicious input
code_snippet = "SELECT * FROM users WHERE id=" + user_input

# Parallel review operations
security_review = builder.add_operation(
    "communicate",
    branch=security_branch,
    instruction=f"Review for security issues: {code_snippet}"
)

quality_review = builder.add_operation(
    "communicate", 
    branch=quality_branch,
    instruction=f"Review for code quality: {code_snippet}"
)

# Synthesis
synthesis = builder.add_aggregation(
    "communicate",
    branch=security_branch,
    source_node_ids=[security_review, quality_review],
    instruction="Summarize all review findings"
)

result = await session.flow(builder.get_graph())

Review with Final Decision

session = Session()
builder = Builder("comprehensive_review")

# Create multiple reviewers
review_types = ["security", "performance", "maintainability", "correctness"]
reviewers = {}
review_ops = []

for review_type in review_types:
    branch = Branch(
        chat_model=iModel(provider="openai", model="gpt-4.1-mini"),
        system=f"{review_type.title()} code reviewer"
    )
    reviewers[review_type] = branch

    op_id = builder.add_operation(
        "communicate",
        branch=branch,
        instruction=f"{review_type} review of submitted code"
    )
    review_ops.append(op_id)

# Senior reviewer for final decision
senior = Branch(
    chat_model=iModel(provider="anthropic", model="claude-sonnet-4-20250514"),
    system="Senior code reviewer who makes final approval decisions"
)

session.include_branches([*reviewers.values(), senior])

# Final synthesis
final_decision = builder.add_aggregation(
    "communicate",
    branch=senior,
    source_node_ids=review_ops,
    instruction="Based on all reviews, provide final APPROVE/REJECT decision"
)

result = await session.flow(builder.get_graph())

Best Practices

Specialized Systems

# Good: Clear specialization
security = Branch(system="Focus only on security vulnerabilities")
performance = Branch(system="Focus only on performance bottlenecks")

# Avoid: Generic reviewers
generic = Branch(system="Review all aspects of code")

Structured Output

instruction = """
Review this code for security issues:

Format response as:
- Issues Found: [list]
- Severity: [high/medium/low]  
- Recommendations: [list]
"""

Advanced Parallel Execution

import asyncio

# asyncio.gather() for parallel reviews
reviews = await asyncio.gather(
    security.chat(prompt),
    performance.chat(prompt),
    quality.chat(prompt),
)

Multi-agent code review leverages specialized expertise in parallel, catching issues that single reviewers might miss.