AIDER가 코드베이스 인덱싱 하는 법

Cursor같은 Code agent가 어떻게 코드 베이스를 검색하고 관련 코드를 읽어서 동작하는지 알고싶어서, 비슷한데 오픈소스인 aider를 둘러보다가 블로그 글을 찾아서 정리한다. aider는 repository map이라는 것을 만들어서 AI Agent가 관련된 코드를 찾아서 활용할 수 있도록 한다. 블로그 링크 AI는 코드베이스 전부를 알고 있을 때, 어떤 테스크가 주어졌을 때 해결하는 걸 잘한다. 하지만 코드베이스가 커지면 테스크와 관련된 정보 중 누락하는게 발생하게되고, 그러면 성능이 떨어진다. 따라서 관련 정보를 최대한 잘 줄 수 있도록 AI를 위한 code search 툴을 매우 잘 제공할 필요가 있다. Repo Map 이라는 걸 빌드해서 컨텍스트를 제공한다. repo map에는 중요한 심볼들이 저장되어 있고, 이를 LLM에게 넘겨주는 방식으로 코드베이스 전반에 대한 지식을 넘겨준다. aider/coders/base_coder.py: class Coder: abs_fnames = None ... @classmethod def create(self, main_model, edit_format, io, skip_model_availabily_check=False, **kwargs): ... def abs_root_path(self, path): ... def run(self, with_message=None): ... aider/commands.py: class Commands: voice = None ... def get_commands(self): ... def get_command_completions(self, cmd_name, partial): ... def run(self, inp): ... 하지만 레포의 사이즈가 크다면 전부 넘겨주지는 못할 것이다. 그래서 repo map 에서도 관련이 있는 부분을 ranking하는 로직이 있어서, 관련성이 높은 부분만 추려서 보낸다. 좋은 Repo map 만들기 Aider는 Tree-sitter를 이용해서 Repo map을 만든다. Tree sitter는 전체 코드베이스를 AST(Abstract Syntax Tree)로 만드는데, AST를 이용하면 우리는 함수, 클래스, 변수, 타입 등이 어디에 쓰이는 지 알 수 있다. AI code search 결국 어떤 정보들을 잘 넣어주느냐가 아직도 중요하다. AI가 기존 코드베이스에서 잘 찾아서 일을 수행할 수 있게 하려면 좋은 AI code search 툴이 필요하다. probe https://sourcegraph.com/docs/code-search/features

Apr 26, 2025 - 09:52
 0
AIDER가 코드베이스 인덱싱 하는 법

Cursor같은 Code agent가 어떻게 코드 베이스를 검색하고 관련 코드를 읽어서 동작하는지 알고싶어서, 비슷한데 오픈소스인 aider를 둘러보다가 블로그 글을 찾아서 정리한다.

aider는 repository map이라는 것을 만들어서 AI Agent가 관련된 코드를 찾아서 활용할 수 있도록 한다.

블로그 링크

AI는 코드베이스 전부를 알고 있을 때, 어떤 테스크가 주어졌을 때 해결하는 걸 잘한다.
하지만 코드베이스가 커지면 테스크와 관련된 정보 중 누락하는게 발생하게되고, 그러면 성능이 떨어진다.
따라서 관련 정보를 최대한 잘 줄 수 있도록 AI를 위한 code search 툴을 매우 잘 제공할 필요가 있다.

Repo Map 이라는 걸 빌드해서 컨텍스트를 제공한다.

repo map에는 중요한 심볼들이 저장되어 있고, 이를 LLM에게 넘겨주는 방식으로 코드베이스 전반에 대한 지식을 넘겨준다.

aider/coders/base_coder.py:
    class Coder:
        abs_fnames = None
    ...
    @classmethod
    def create(self, main_model, edit_format, io, skip_model_availabily_check=False, **kwargs):
    ...
    def abs_root_path(self, path):
    ...
    def run(self, with_message=None):
    ...

aider/commands.py:
    class Commands:
        voice = None
    ...
    def get_commands(self):
    ...
    def get_command_completions(self, cmd_name, partial):
    ...
    def run(self, inp):
    ...

하지만 레포의 사이즈가 크다면 전부 넘겨주지는 못할 것이다. 그래서 repo map 에서도 관련이 있는 부분을 ranking하는 로직이 있어서, 관련성이 높은 부분만 추려서 보낸다.

좋은 Repo map 만들기

Aider는 Tree-sitter를 이용해서 Repo map을 만든다.

Tree sitter는 전체 코드베이스를 AST(Abstract Syntax Tree)로 만드는데, AST를 이용하면 우리는 함수, 클래스, 변수, 타입 등이 어디에 쓰이는 지 알 수 있다.

AI code search

결국 어떤 정보들을 잘 넣어주느냐가 아직도 중요하다. AI가 기존 코드베이스에서 잘 찾아서 일을 수행할 수 있게 하려면 좋은 AI code search 툴이 필요하다.