Skip to main content

CrewAI로 GitHub 저장소 요약기 만들기

멀티 에이전트 조정을 위한 CrewAI와 실시간 디버깅 및 관측 가능성을 위한 Weave를 사용해 완전 자동화된 GitHub 문서화 시스템을 구축하는 실습 가이드. 이 글은 AI 번역본입니다. 오역이 있을 수 있으니 댓글로 자유롭게 알려주세요.
Created on September 12|Last edited on September 12
멀티 에이전트 시스템서로 다른 전문 작업을 수행하는 복수의 AI 에이전트가 협업하는 멀티 에이전트 시스템은 복잡한 워크플로 자동화를 위한 핵심 접근법으로 자리 잡고 있습니다. CrewAI 은 이러한 시스템을 설계하도록 만들어진 플랫폼으로, 개발자가 작업을 할당하고 에이전트 역할을 정의하며 도구를 연결해 실제 프로젝트를 처리할 수 있게 합니다. 와 결합하면 W&B Weave각 에이전트의 동작을 추적하고 디버깅하는 도구와 결합하면, 결과적으로 전체 과정에 대한 완전한 투명성과 통제력을 확보할 수 있습니다. 전체 에이전트형 워크플로 전체 에이전트 워크플로.
이 튜토리얼에서는 GitHub 저장소를 자동으로 문서화하는 멀티 에이전트 시스템을 구축합니다. 에이전트들은 저장소를 탐색하고, 코드를 요약하며, 사용 가이드를 작성하고, 아키텍처 다이어그램을 생성한 뒤, 모든 결과를 하나의 HTML 페이지로 패키징합니다. 전체 흐름 관리는 CrewAI로, 각 의사결정 과정을 모니터링하는 데는 Weave를 사용합니다.


목차



에이전트란 무엇일까요?

AI 에이전트 계획 수립, 외부 도구 활용, 메모리 보존, 시간에 따른 적응을 통해 특정 목표를 달성하도록 설계된 지능형 시스템입니다. 고정된 사전 규칙을 따르는 전통적 자동화와 달리, AI 에이전트는 정보를 동적으로 처리하고 의사결정을 내리며 피드백에 기반해 접근 방식을 지속적으로 개선합니다.
동안 챗봇 주로 대화를 수행하며 매 단계마다 사용자 입력을 요구하는 것과 달리, AI 에이전트는 독립적으로 작동합니다. 이들은 단순히 답변을 생성하는 데 그치지 않고, 실제로 행동을 수행하고 외부 시스템과 상호작용하며 다단계 에이전트 워크플로를 관리하기 지속적인 감독 없이
AI 에이전트를 구성하는 핵심 요소는 다음과 같습니다:
  • 도구: API, 데이터베이스, 소프트웨어에 연결하여 기능을 확장합니다.
  • 메모리: 여러 작업에 걸쳐 정보를 저장하여 일관성과 회상을 높입니다.
  • 지속 학습과거 성과를 바탕으로 전략을 조정하고 정교화하세요.
  • 오케스트레이션: 다단계 프로세스를 관리하고, 작업을 분해하며, 다른 에이전트와 조율합니다

멀티 에이전트 시스템 이해하기

본질적으로 멀티 에이전트 시스템은 다음으로 이루어진 네트워크입니다 자율형 AI 에이전트 서로 소통하고 조율하여 단일 에이전트보다 더 효율적으로 복잡한 작업을 수행합니다. 각 에이전트는 특정 역할과 책임을 부여받아 전문화를 가능하게 하고, 필요할 때는 병렬 처리도 수행합니다. 예를 들어 뉴스 집계 시스템에서는 한 에이전트가 최신 헤드라인을 수집하는 동안 다른 에이전트가 상세 분석을 수행할 수 있습니다. 효과적인 멀티 에이전트 설계는 모듈성, 명확한 작업 위임, 원활한 데이터 교환에 달려 있으며, 그 결과 인간 팀의 역학을 닮은 확장 가능하고 적응적인 AI 솔루션을 구현할 수 있습니다.
여러 전문화된 에이전트를 활용하면 개발자는 크고 복잡한 문제를 더 작고 명확하게 정의된 하위 작업으로 분해할 수 있습니다. 워크플로의 모든 측면을 하나의 거대한 단일 시스템으로 처리하도록 설계하는 대신, 각 구성 요소나 단계를 해당 책임에 가장 적합하게 준비된 에이전트에게 할당할 수 있습니다. 예를 들어 다음과 같은 방식입니다— 요약 텍스트, 코드 스니펫 생성, 감성 분석, 또는 출력 서식 지정이러한 분업은 시스템을 이해하기 쉽게 만들 뿐만 아니라 유지보수성과 견고성도 높여 줍니다. 각 에이전트를 전체 파이프라인을 방해하지 않고 개별적으로 업데이트하거나 교체하거나 확장할 수 있기 때문입니다.
또한 모델의 컨텍스트 한계를 관리하고, 특정 작업에 다른 모델을 교체 적용하며, 시스템 전반에서 프롬프트 사용을 미세 조정하거나 제어하기가 쉬워집니다. 이를 통해 각 단계에서 자원 사용과 정확도를 최적화할 수 있습니다.

CrewAI 플랫폼의 핵심 기능

CrewAI 플랫폼 구조화된 추상화와 유연한 오케스트레이션 메커니즘을 제공하여 확장 가능한 멀티 에이전트 워크플로의 구축을 용이하게 하도록 설계되었습니다:
  • 자동화 프레임워크: CrewAI의 핵심에는 에이전트, 태스크, 그리고 도구의 명확한 분리가 있습니다. 에이전트는 명확한 역할과 목표를 가진 자율적 주체를 의미하고, 태스크는 이들에게 할당되는 개별 작업 단위를 뜻합니다. 도구는 에이전트가 태스크를 수행하거나 고도화하기 위해 활용하는 외부 API, 검색 엔진, 맞춤 함수 등을 말합니다. 이 세 가지—에이전트, 태스크, 도구—가 모듈성 있고 유지보수 가능한 AI 워크플로를 구성하는 기본 요소를 이룹니다.
  • 크루와 플로우: CrewAI는 Crews를 사용해 여러 에이전트와 그들의 태스크를 오케스트레이션합니다. Crews는 에이전트 간의 전체 실행 흐름과 데이터 교환을 제어합니다. 이 플랫폼은 Process 클래스 통해 다양한 워크플로 처리 전략을 지원합니다:
  • 순차적: 태스크는 순차적으로, 하나씩 차례대로 실행되며, 앞선 태스크의 출력이 다음 태스크의 입력으로 이어집니다.
  • 계층적: 태스크는 중첩되거나 상호 의존적인 구조로 구성할 수 있어, 에이전트 간의 복잡한 조정과 위임을 가능하게 합니다.
  • 유연한 배포: CrewAI는 민첩한 개발을 위한 인라인 Python 스크립팅과 더 체계적이고 확장 가능한 YAML 구성 파일을 모두 지원합니다. 이러한 유연성 덕분에 개발자는 빠르게 프로토타입을 만든 뒤, 더 복잡한 멀티 에이전트 시스템을 무리 없이 처리할 수 있도록 원활하게 확장할 수 있습니다.
  • 외부 도구와의 통합: CrewAI 에이전트는 웹 검색 API, 데이터베이스, 기타 서비스와 같은 외부 데이터와 기능에 연결하는 다양한 도구를 연동해 확장할 수 있습니다. 도구를 활용하면 에이전트는 최신 정보를 조회하고, 특화된 계산을 수행하며, 서드파티 시스템과 상호작용할 수 있어 자동화 워크플로의 범위를 크게 넓힐 수 있습니다.
  • 명시적 태스크 할당: CrewAI는 태스크를 에이전트에 명시적으로 정의하고 할당해야 합니다. 자율적인 자기 모니터링이나 위임에 의존하는 대신, 개발자가 각 태스크의 책임과 담당 에이젠트를 구체적으로 지정합니다. 이러한 명시성은 복잡한 멀티 에이전트 상호작용에서 투명성, 예측 가능성, 디버깅 용이성을 높여 줍니다.

튜토리얼: CrewAI와 Weave로 GitHub 저장소 문서화 멀티 에이전트 시스템 구축

이 튜토리얼에서는 CrewAI를 사용해 GitHub 저장소를 자동으로 탐색하고, 이해하고, 문서화하고, 시각화하는 멀티 에이전트 AI 시스템을 구축하는 방법을 보여줍니다. 목표는 원시 코드베이스를 포괄적인 사용 가이드와 아키텍처 다이어그램으로 변환하여, 깔끔한 HTML 문서로 패키징하는 완전 자동화 파이프라인을 만드는 것입니다.
AI 에이전트를 만들기 전에, 먼저 GitHub 저장소와 상호작용하는 데 필요한 기능을 제공할 전문화된 도구 세트를 구축해야 합니다도구는 에이전트가 파일 검색, 콘텐츠 읽기, 코드 요약과 같은 특정 기능을 수행하기 위해 호출하는 외부 인터페이스 또는 유틸리티로 작동합니다.
이 튜토리얼에서는 핵심 도구 세 가지를 구현합니다:
  1. Repo 탐색기 도구 사용자의 질의를 입력받아 저장소 전체의 파일 구조를 검색하고, 질의와 관련된 파일 경로를 반환하여 에이전트가 분석을 집중해야 할 위치를 식별하도록 돕습니다.
  2. 뷰 파일 도구 지정한 파일 경로의 전체 내용을 읽어 반환하여, 에이전트가 원본 소스 코드나 문서에 접근할 수 있게 합니다.
  3. 요약 파일 도구 언어 모델을 사용해 파일의 내용을 소화하고 간결한 요약을 생성하여, 에이전트가 모든 내용을 줄줄이 읽지 않고도 복잡한 코드나 문서를 파악할 수 있게 합니다.
import os
import subprocess
from typing import Type
from pydantic import BaseModel, Field
from crewai.tools import BaseTool
from langchain_openai import ChatOpenAI

# Clone the repo if not already cloned
REPO_URL = "https://github.com/karpathy/nanogpt.git"
REPO_DIR = "./nanogpt"

if not os.path.exists(REPO_DIR):
subprocess.run(["git", "clone", REPO_URL])

# --- Define the Repo Explorer Tool ---
class RepoQueryInput(BaseModel):
query: str = Field(..., description="Describe what you are looking for in the codebase.")

class RepoExplorerTool(BaseTool):
name: str = "Repo Explorer"
description: str = "Given a query, find relevant file paths from the nanogpt repo."
args_schema: Type[BaseModel] = RepoQueryInput

def _run(self, query: str) -> str:
file_list = []
for root, _, files in os.walk(REPO_DIR):
for file in files:
full_path = os.path.join(root, file)
file_list.append(full_path)

llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0)
prompt = f"""
You are a codebase expert. Here is a list of files:\n{file_list}\n\n
Based on the user query "{query}", return ONLY the full file paths that are most relevant.
Respond with one file path per line, no extra text.
"""
response = llm.invoke(prompt)
return response.content.strip()

# --- Define the View File Content Tool ---
class ViewFileInput(BaseModel):
filepath: str = Field(..., description="Full path to the file you want to read.")

class ViewFileTool(BaseTool):
name: str = "View File Content"
description: str = "Reads the full content of a given file path from the nanogpt repo."
args_schema: Type[BaseModel] = ViewFileInput

def _run(self, filepath: str) -> str:
filepath = filepath.strip() # <<< add this
try:
with open(filepath, "r", encoding="utf-8") as f:
content = f.read()
return content
except Exception as e:
return f"Error reading file: {str(e)}"

# --- Instantiate the tools ---
repo_explorer_tool = RepoExplorerTool()
view_file_tool = ViewFileTool()

# --- Example usage ---
if __name__ == "__main__":
# Step 1: Find files related to training loop
query = "Where is the training loop defined?"
result_paths = repo_explorer_tool._run(query=query)
print("Relevant Files:\n", result_paths)

# Step 2: Read the first file found
first_file = result_paths.splitlines()[0]
file_content = view_file_tool._run(filepath=first_file)
print("\nContent of the first relevant file:\n")
print(file_content[:3000]) # only print first 3000 chars to keep output readable

이제 우리가 만든 도구를 활용해 AI 에이전트와 그들이 수행할 작업을 정의할 준비가 되었습니다.
우리 시스템은 최종 문서 결과물을 제공하기 위해 여러 전문화된 에이전트가 순차적으로 협업하는 구조로 이루어져 있습니다:
  • 데모 생성기저장소를 위한 초보자 친화적인 초기 사용 가이드를 작성하고, 최소 실행 예제 명령을 포함합니다.
  • 후속 분석가: 생성된 사용 가이드를 검토하고, 누락된 부분을 식별하며, 명확화를 위한 질문을 제기하고, 개선을 위한 구체적인 제안을 제공합니다.
  • 리포 요약기: 저장소의 주요 파일을 스캔하고 요약하여, 개발자가 이해하는 데 도움이 되는 간결한 설명을 제공합니다.
  • 다이어그램 생성기: 파일 요약을 바탕으로 텍스트 기반 아키텍처 다이어그램(예: PlantUML 또는 ASCII)을 생성하여 리포의 상위 수준 구조를 개괄합니다.
  • 셸 스크립트 자동화 엔지니어: 모든 저장소 설정 단계를 자동화하는 포괄적이고 멱등적인 Bash 스크립트를 생성합니다. 여기에는 의존성 설치, 환경 구성, 데모 실행이 포함되며, 개발자가 단 한 번의 명령으로 시작할 수 있도록 합니다.
  • HTML 코더: 개선된 사용 가이드, 아키텍처 다이어그램, 생성된 설정 스크립트를 하나의 깔끔하고 스타일이 적용된 HTML 문서 페이지로 통합하여 쉽게 열람할 수 있도록 제공합니다.
코드는 다음과 같습니다:
import os
import subprocess
from typing import Type, List
from pydantic import BaseModel, Field
from crewai import Agent, Task, Crew, Process
from crewai.tools import BaseTool
from langchain_openai import ChatOpenAI
import weave; weave.init("crewai_git_documenter")
# --- Repo Setup ---

REPO_URL = os.getenv('REPO_URL', 'https://github.com/LiveCodeBench/LiveCodeBench')
REPO_NAME = REPO_URL.split("/")[-1].replace(".git", "")
REPO_DIR = f"./{REPO_NAME}"

if not os.path.exists(REPO_DIR):
subprocess.run(["git", "clone", REPO_URL])

# --- Tools ---

class RepoQueryInput(BaseModel):
query: str = Field(..., query="Describe what you are looking for in the codebase.")

class RepoExplorerTool(BaseTool):
name: str = "Repo Explorer"
description: str = "Given a query, find relevant file paths from the repo."
args_schema: Type[BaseModel] = RepoQueryInput

def _run(self, query: str) -> str:
file_list = []
for root, _, files in os.walk(REPO_DIR):
for file in files:
full_path = os.path.join(root, file)
file_list.append(full_path)

llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0)
prompt = f"""
Here is a list of files:\n{file_list}\n\n
User query: "{query}"
Return ONLY full file paths that match. One per line.
"""
response = llm.invoke(prompt)
return response.content.strip()

class ViewFileInput(BaseModel):
filepath: str = Field(..., description="Full path to the file you want to read.")

class ViewFileTool(BaseTool):
name: str = "View File Content"
description: str = "Reads the full content of a given file path from the repo."
args_schema: Type[BaseModel] = ViewFileInput

def _run(self, filepath: str) -> str:
filepath = filepath.strip()
try:
with open(filepath, "r", encoding="utf-8") as f:
return f.read()
except Exception as e:
return f"Error reading file: {str(e)}"

class SummarizeFileTool(BaseTool):
name: str = "Summarize File Content"
description: str = "Summarizes a given file's content into a short description."
args_schema: Type[BaseModel] = ViewFileInput

def _run(self, filepath: str) -> str:
filepath = filepath.strip()
try:
with open(filepath, "r", encoding="utf-8") as f:
content = f.read()
llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0)
prompt = f"Summarize the following code file in 5 sentences:\n\n{content}"
response = llm.invoke(prompt)
return response.content.strip()
except Exception as e:
return f"Error summarizing file: {str(e)}"

# --- Instantiate tools ---
repo_explorer_tool = RepoExplorerTool()
view_file_tool = ViewFileTool()
summarize_file_tool = SummarizeFileTool()

# --- Agents ---

demo_generator_agent = Agent(
role="Demo Generator",
goal="Write and expand a basic usage example for the repo.",
backstory="Expert technical writer.",
tools=[repo_explorer_tool, view_file_tool],
allow_delegation=False,
verbose=True,
llm=ChatOpenAI(model_name="gpt-4o-mini", temperature=0.5)
)

followup_analyst_agent = Agent(
role="Follow-Up Analyst",
goal="Analyze the usage guide, find missing info, suggest improvements.",
backstory="Developer experience expert.",
allow_delegation=False,
verbose=True,
llm=ChatOpenAI(model_name="gpt-4o-mini", temperature=0.3)
)

html_coder_agent = Agent(
role="HTML Coder",
goal="Turn the improved usage guide into a clean HTML page.",
backstory="Frontend dev specializing in docs websites. DO NOT GENERATE IMAGES MAN eg dont do src=data:image/png etc etc",
allow_delegation=False,
verbose=True,
llm=ChatOpenAI(model_name="gpt-4o-2024-08-06", temperature=0.4)
)

repo_summarizer_agent = Agent(
role="Repo Summarizer",
goal="Summarize all important files in the repo for easier understanding.",
backstory="Documentation architect.",
tools=[repo_explorer_tool, view_file_tool, summarize_file_tool],
allow_delegation=False,
verbose=True,
llm=ChatOpenAI(model_name="gpt-4o-mini", temperature=0.4)
)

diagram_generator_agent = Agent(
role="Diagram Generator",
goal="Using file summaries, generate a full architecture diagram of the repo.",
backstory="System architect skilled in explaining large codebases.",
allow_delegation=False,
verbose=True,
llm=ChatOpenAI(model_name="gpt-4o-mini", temperature=0.4)
)


shell_script_agent = Agent(
role="Shell Script Automation Engineer",
goal="Create a working shell script that sets up all requirements and runs the repo's demo or basic usage.",
backstory="Expert in bash scripting, devops, and repo onboarding automations.",
tools=[repo_explorer_tool, view_file_tool, summarize_file_tool], # Optional, useful for reading files
allow_delegation=False,
verbose=True,
llm=ChatOpenAI(model_name="gpt-4o-mini", temperature=0.3)
)

# --- Tasks ---


demo_generation_task = Task(
description=f"Write a beginner-friendly usage guide explaining how to use {REPO_NAME}. Include a minimal example command.",
expected_output="Markdown snippet with instructions.",
agent=demo_generator_agent,
output_file="basic_usage.md"
)

followup_task = Task(
description="Read 'basic_usage.md', find confusing parts, generate 5+ questions and improvements.",
expected_output="List of questions + feedback report.",
agent=followup_analyst_agent,
context=[demo_generation_task],
output_file="feedback_report.md"
)

improvement_task = Task(
description="Use 'feedback_report.md' to expand and improve the usage guide.",
expected_output="New improved guide.",
agent=demo_generator_agent,
context=[followup_task],
output_file="improved_usage.md"
)

repo_summarization_task = Task(
description="Scan the repo, summarize the major files (training, models, data utils, etc.).",
expected_output="List of file summaries.",
agent=repo_summarizer_agent,
output_file="repo_summary.md"
)

diagram_generation_task = Task(
description="Using 'repo_summary.md', create an overall architecture diagram of the repo in text/plantuml format.",
expected_output="Architecture diagram text.",
agent=diagram_generator_agent,
context=[repo_summarization_task],
tools=[repo_explorer_tool, view_file_tool, summarize_file_tool],

output_file="architecture_diagram.md"
)

shell_script_task = Task(
description=(
"Read the improved usage guide and repo summary. Write a BASH shell script that fully sets up the repo from scratch, "
"including dependency installation, environment setup, any required downloads, and running the minimal example demo. "
"The script should be idempotent (safe to rerun), and **explain each step with comments**. Output the script in a codeblock."
),
expected_output="A complete shell script (setup_and_run_demo.sh) with comments.",
agent=shell_script_agent,
context=[improvement_task, repo_summarization_task], # Uses improved usage and file summaries
output_file="setup_and_run_demo.sh"
)



html_generation_task = Task(
description="Combine 'improved_usage.md', and 'architecture_diagram.md' into a final HTML file. Make sure to append the full setup_and_run_demo.sh script at the end",
expected_output="Final styled HTML guide. Follow styling similar to Wandb's website styling",
agent=html_coder_agent,
context=[improvement_task, diagram_generation_task, shell_script_task],
output_file="final_guide.html"
)


# --- Run Crew ---
crew = Crew(
agents=[
demo_generator_agent,
followup_analyst_agent,
repo_summarizer_agent,
diagram_generator_agent,
html_coder_agent,
shell_script_agent, # <-- Add here
],
tasks=[
demo_generation_task,
followup_task,
improvement_task,
repo_summarization_task,
diagram_generation_task,
shell_script_task, # <-- Add here, before html_generation_task
html_generation_task,
],
process=Process.sequential,
verbose=True
)

if __name__ == "__main__":
result = crew.kickoff()
print("\n\nFinal HTML Guide and Repo Diagram Created:\n")
print(result)

이 코드는 CrewAI와 Weave를 사용해 GitHub 리포의 문서를 자동화하는 멀티 에이전트 시스템을 구성합니다. 먼저 리포지토리를 클론하고, 에이전트가 파일을 검색하고 내용을 읽고 요약을 생성할 수 있도록 도구들을 초기화합니다. 각 에이전트는 서로 다른 역할을 맡습니다: 사용 가이드 작성, 가이드 검토 및 개선, 소스 파일 요약, 설정용 셸 스크립트 생성, 아키텍처 다이어그램 작성, 그리고 모든 결과를 하나의 HTML 페이지로 통합합니다.
이 작업들은 엄격한 순서로 실행됩니다. 앞선 에이전트의 출력물(예: 사용 가이드나 리포 요약)은 이후 에이전트에 컨텍스트로 전달됩니다. 시스템은 모든 로그를 기록합니다. 대규모 언어 모델 상호작용 관찰 가능성을 위해 Weave 사용하기실행하면 소스 코드에서 자동으로 생성된 개선된 사용 가이드, 리포 구조의 시각적 개요, 실행 가능한 설정 스크립트를 모두 포함한 전체 HTML 문서를 만들어 냅니다.
우리는 CrewAI의 Agent, Task, Crew 클래스를 사용해 전체 워크플로를 오케스트레이션합니다. 각 에이전트에는 전문화된 작업을 할당하고, 모든 작업은 순차적으로 실행되어 한 단계의 출력이 다음 단계의 입력이 되도록 합니다. 이를 통해 초기 가이드와 파일 요약에서 시작해 다이어그램과 셸 스크립트 생성으로 이어지며, 최종적으로 모든 결과를 통합한 포괄적인 HTML 문서 페이지를 완성하는 단계적 정보 구축을 보장합니다.
스크립트를 실행하면 다음 이름의 새 파일이 생성됩니다 final_guide.html, 리포를 사용하는 데 도움이 되는 가이드를 포함하고 있습니다! 아래는 화면 예시 몇 가지입니다!



강화된 LLM 관찰성과 디버깅을 위한 Weave 통합

이 다중 에이전트 시스템을 효율적으로 모니터링하고 디버깅하기 위해 Weave를 통합하며, 시작 시 다음과 같이 초기화합니다: import weave; weave.init("crewai_git_documenter"). 이 설정은 각 에이전트가 OpenAI 모델에 수행하는 모든 호출을 포착하여, 프롬프트와 응답, 관련 컨텍스트를 중앙에서 기록합니다.
와 함께 Weave 시각화 대시보드, 개발자는 각 에이전트의 LLM 호출에 대한 상세한 요청-응답 사이클을 점검하고, 에이전트가 정보를 검색·분석·생성하는 흐름을 추적하며, 체인에서의 병목, 예기치 않은 출력, 오류를 신속히 식별하고, 실제 사용 데이터를 바탕으로 프롬프트 지침과 파라미터를 튜닝할 수 있습니다. 아래는 Weave의 스크린샷으로, 우리의 에이전트가 LLM에 수행하는 모든 개별 호출을 어떻게 손쉽게 시각화할 수 있는지 보여줍니다:

이처럼 에이전트 상호작용을 세밀하게 가시화하면, 여러 모델이 전문 지식을 나눠 담당하는 우리의 다중 에이전트 워크플로우에서 특히 큰 가치를 제공합니다. 로컬 파일의 흩어진 로그를 뒤지는 대신, Weave는 전체 파이프라인의 이력을 웹 기반으로 조회 가능하게 제공하므로, 더 효과적인 반복적 개발과 유지보수를 가능하게 합니다.
전문화된 에이전트들에 책임을 분산하고 Weave로 모든 단계를 추적함으로써, CrewAI 기반의 이 다중 에이전트 시스템은 자동화된 소프트웨어 문서화에 대해 확장 가능하고 유지보수 용이하며 투명한 접근 방식을 제공합니다.

결론

다중 에이전트 시스템은 AI 에이전트가 복잡한 작업을 협업해 수행할 수 있게 하여 자동화를 혁신하고 있습니다. CrewAI는 이를 위해 설계되어, 개발자가 특정 역할을 가진 에이전트를 정의하고 그들을 도구와 작업에 연결할 수 있게 합니다. 코드 기반과 설정 기반 워크플로우를 모두 지원하며, 디버깅과 확장을 용이하게 하는 명확한 오케스트레이션을 제공합니다. Weave와 결합하면 모든 모델 호출이 추적되고 시각화되어, 에이전트가 어떻게 사고하고 행동하며 협업하는지에 대한 전체적인 가시성을 개발자에게 제공합니다.
GitHub 문서화 시스템에서는 각 에이전트가 특정 역할을 맡아 코드 요약, 다이어그램 생성, 사용 가이드 작성, 설정 스크립트 작성 등을 수행합니다. 시스템은 순차적으로 실행되며, 각 단계의 결과가 다음 단계에 입력됩니다. Weave가 통합되면 개발자는 프롬프트–응답 쌍을 모니터링하고, 논리 흐름을 추적하며, 오류를 수정하고, 출력 품질을 개선할 수 있습니다. CrewAI는 자동화를 담당하고, Weave는 내부 동작을 드러내며, 두 가지를 함께 사용하면 유지보수 가능하고 투명한 다중 에이전트 시스템을 구축할 수 있습니다.



이 글은 AI로 번역된 기사입니다. 오역이 의심되면 댓글로 알려주세요. 원문 링크는 다음과 같습니다: 원문 보고서 보기