Recent Posts
Recent Comments
반응형
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

오늘도 공부

Dexter: 금융 리서치를 위해 태어난 자율형 에이전트, 범용 코드 에이전트와 뭐가 다를까 본문

AI

Dexter: 금융 리서치를 위해 태어난 자율형 에이전트, 범용 코드 에이전트와 뭐가 다를까

행복한 수지아빠 2026. 3. 27. 21:42
반응형

AI 에이전트가 코드를 짜고 문서를 읽고 웹을 탐색하는 시대다. 그런데 투자 리서치나 기업 분석처럼 데이터 정확성, 툴 선택, 반복 검증이 특히 중요한 문제에서는 “그럴듯하게 답하는 LLM”만으로는 부족하다. Dexter는 바로 그 지점을 겨냥한다. 이 프로젝트는 범용 챗봇이 아니라, 복잡한 금융 질문을 단계별 조사 계획으로 쪼개고, 실시간 데이터와 문서를 수집하고, 자기 결과를 다시 점검하면서 답을 완성하는 금융 특화 에이전트다. (GitHub)

저장소 첫 문장도 이 성격을 아주 선명하게 보여준다. Dexter는 “deep financial research”를 위한 autonomous agent로 소개되며, 실제로 코드 구조를 보면 CLI 중심 실행기, 금융 툴 레지스트리, 메모리 계층, 승인 기반 파일 수정, 평가 파이프라인까지 갖춘 작은 에이전트 런타임에 가깝다. 단순히 “주가를 물어보면 알려주는 봇”이 아니라, 조사 워크플로를 수행하는 시스템으로 설계돼 있다. (GitHub)

 

 

GitHub - virattt/dexter: An autonomous agent for deep financial research

An autonomous agent for deep financial research. Contribute to virattt/dexter development by creating an account on GitHub.

github.com

 

프로젝트 소개

Dexter는 금융 질문을 입력받아 이를 조사 가능한 하위 단계로 전개하고, 필요한 툴을 호출해 시장 데이터·재무제표·공시·웹 정보를 수집한 뒤, 충분한 근거가 모일 때까지 반복적으로 응답을 다듬는 자율형 금융 리서치 에이전트다. README에는 task planning, autonomous execution, self-validation, real-time financial data, safety features가 핵심 역량으로 정리돼 있다. (GitHub)

기술 스택도 꽤 실전적이다. 런타임은 Bun이고, 모델 계층은 LangChain 기반으로 OpenAI, Anthropic, Google Gemini, xAI, OpenRouter, Moonshot, DeepSeek, Ollama를 연결할 수 있다. 메모리 저장은 SQLite 계열인 better-sqlite3를 쓰며, 브라우저 자동화와 웹 렌더링에는 Playwright가 들어간다. WhatsApp 연동에는 Baileys가 사용된다. 즉, 이 프로젝트는 “프롬프트 엔지니어링 샘플”이 아니라 실행 가능한 로컬 에이전트 제품에 가깝다. (GitHub)

또 하나 흥미로운 점은 Dexter가 단일 채널만 보는 구조가 아니라는 것이다. 기본 진입점은 CLI지만, 시스템 프롬프트는 channel profile을 바탕으로 바뀌고, README에는 WhatsApp 게이트웨이 사용법도 별도로 안내돼 있다. 즉 같은 에이전트 코어를 두고 터미널형 인터페이스와 메시징 인터페이스를 함께 실험하는 구조다. (GitHub)

왜 이 프로젝트가 등장했을까

금융 분석은 일반적인 QA보다 훨씬 까다롭다. “애플 최근 실적 어때?” 같은 질문도 실제로는 최신 재무제표, 시장 데이터, 멀티턴 비교, 경우에 따라 공시와 뉴스 확인까지 필요하다. README가 강조하듯 Dexter는 복잡한 금융 질문을 step-by-step research plan으로 바꾸고, live market data를 사용해 결과를 검증한다. 이것은 곧 금융 리서치가 단일 프롬프트 응답보다 워크플로 실행 문제에 가깝다는 전제를 드러낸다. (GitHub)

소스 코드를 보면 이 전제가 더 분명해진다. 에이전트는 한 번 답하고 끝나는 구조가 아니라 maxIterations 기본값 10으로 루프를 돌며, 각 반복에서 모델 응답을 받고, 툴 호출이 있으면 실행하고, scratchpad에 결과를 축적한 뒤 다음 iteration prompt를 다시 만든다. 즉 “질문 → 답변”이 아니라 질문 → 계획 → 툴 실행 → 중간 사고 → 재질문 → 최종 답변의 형태다. (GitHub)

범용 코드 에이전트와 비교하면 Dexter의 차별점은 도메인 최적화에 있다. 시스템 프롬프트에는 get_market_data, get_financials, stock_screener를 어떤 상황에서 써야 하는지가 명시돼 있고, “자연어 질의를 한 번에 넣으면 내부에서 다중 회사/다중 지표 요청을 처리한다”는 정책도 포함된다. 이건 도구가 많다는 의미보다, 모델이 금융 질의를 효율적으로 라우팅하도록 강하게 유도한다는 뜻이다. (GitHub)

핵심 기능

1) 금융 특화 툴셋

Dexter의 툴 레지스트리에는 get_financials, get_market_data, read_filings, stock_screener가 기본 축으로 들어가 있다. 여기에 web_search, browser, web_fetch가 추가되어 정형 데이터와 비정형 정보를 함께 조사할 수 있다. 즉, 숫자만 보는 툴도 아니고 웹 검색만 하는 툴도 아니다. 기업 분석에 필요한 두 세계를 같이 다룬다. (GitHub)

2) 에이전트 루프와 자기 검증

핵심 Agent 클래스는 반복 루프를 돌면서 모델 호출 결과를 받고, 텍스트 사고를 scratchpad에 남기고, tool call이 있으면 실행한 뒤 다시 iteration prompt를 구성한다. 툴 호출이 더 이상 없을 때만 final answer로 종료한다. 이 구조 덕분에 한 번에 성급히 결론을 내리기보다 증거를 모으면서 답을 수렴하는 방식을 취한다. (GitHub)

3) 안전장치와 승인 기반 실행

에이전트는 무한 실행 방지를 위해 기본 최대 반복 횟수를 두고, 컨텍스트 초과가 발생하면 가장 오래된 tool result부터 비우는 로직을 갖고 있다. 또 파일 쓰기 계열 툴인 write_file, edit_file은 별도 승인 대상이며, 컨트롤러는 pending approval 상태를 관리한다. 즉 Dexter는 “스스로 행동하는 에이전트”이지만, 위험한 행동까지 무조건 자동 실행하지는 않는다. (GitHub)

4) 지속 메모리

프롬프트 빌더에는 .dexter/memory/ 기반의 persistent memory 섹션이 포함된다. 특히 개인화된 금융 조언 전에는 memory_search를 먼저 호출하라는 정책이 명시돼 있고, 실제 툴 레지스트리에도 memory_search, memory_get, memory_update가 들어 있다. Dexter는 단순히 “현재 질문만 처리하는 봇”이 아니라, 사용자의 성향과 과거 맥락을 유지하려는 금융 보조자로 설계돼 있다. (GitHub)

5) 검색 품질을 높이는 메모리 인덱싱

메모리 계층은 꽤 공들여 설계돼 있다. 데이터베이스에는 chunks 테이블과 chunks_fts FTS5 가상 테이블이 존재하고, 검색 단계에서는 벡터 검색과 키워드 검색 결과를 합친 뒤 temporal decay와 MMR 재정렬을 적용한다. 임베딩은 OpenAI, Gemini, Ollama 중 사용 가능한 공급자를 자동 선택할 수 있다. 이 말은 곧 Dexter의 메모리가 단순 파일 append가 아니라 검색 가능한 개인 지식 베이스라는 뜻이다. (GitHub)

6) 평가와 디버깅

README에 따르면 Dexter는 금융 질문 데이터셋으로 평가를 수행하고, LangSmith 기반 추적과 LLM-as-judge 방식을 사용한다. 또 각 질의마다 .dexter/scratchpad/ 아래 JSONL 로그가 생성되어 init, tool_result, thinking 이벤트를 추적할 수 있다. 에이전트 프로젝트에서 이런 디버깅 흔적은 아주 중요하다. 왜냐하면 문제가 프롬프트에 있는지, 툴 선택에 있는지, 데이터 해석에 있는지 보려면 중간 실행 상태가 보여야 하기 때문이다. (GitHub)

프로젝트 아키텍처 분석

Dexter를 크게 나누면 다음 다섯 레이어로 볼 수 있다.

  1. 입력/채널 레이어
    CLI 또는 WhatsApp 게이트웨이가 사용자 질의를 받는다. (GitHub)
  2. 컨트롤러 레이어
    AgentRunnerController가 실행 상태, 히스토리, 승인 흐름, 중단 신호를 관리한다. for await로 에이전트 이벤트 스트림을 소비하는 구조다. (GitHub)
  3. 에이전트 코어 레이어
    Agent.create()가 모델, 툴, 시스템 프롬프트, 메모리 컨텍스트를 묶어 에이전트를 구성하고, run()이 반복 루프를 수행한다. (GitHub)
  4. 툴/데이터 레이어
    금융 데이터, 공시 읽기, 스크리닝, 웹 검색, 브라우저, 파일 시스템, 메모리 툴 등이 레지스트리로 연결된다. 웹 검색은 Exa → Perplexity → Tavily 순으로 키가 있을 때 활성화된다. (GitHub)
  5. 메모리/인덱스 레이어
    Markdown 파일 기반 저장소와 SQLite/FTS/벡터 검색 기반 인덱스가 함께 동작한다. 필요 시 메모리 flush도 수행된다. (GitHub)

아키텍처를 Mermaid로 그리면 이런 형태다.

이 구조에서 특히 좋은 점은 프롬프트, 툴, 메모리, 컨트롤러가 적당히 분리돼 있다는 것이다. 예를 들어 모델 제공자를 바꾸는 일은 주로 model/llm.ts 쪽 문제이고, 새로운 금융 툴을 추가하는 일은 tools/registry.ts와 각 툴 구현에 집중된다. 그래서 실험성이 높은 에이전트 프로젝트치고는 구조가 비교적 깔끔하다. (GitHub)

코드로 보면 더 잘 보이는 포인트

진입점은 놀랄 정도로 단순하다.

#!/usr/bin/env bun

import { config } from 'dotenv';
import { runCli } from './cli.js';

config({ quiet: true });
await runCli();

이 단순함이 의미하는 바는 분명하다. 복잡성은 entrypoint가 아니라 컨트롤러와 에이전트 코어 내부로 모아져 있다는 뜻이다. 운영 관점에서는 이런 구조가 좋다. 배포 진입점은 작고, 실험은 내부 레이어에서 일어난다. (GitHub)

에이전트의 실행 감각은 아래와 비슷하게 이해하면 된다.

const agent = await Agent.create({
  model: 'gpt-5.4',
  memoryEnabled: true,
  requestToolApproval,
});

for await (const event of agent.run(query, inMemoryHistory)) {
  if (event.type === 'thinking') {
    // 중간 사고 표시
  }

  if (event.type === 'tool_start' || event.type === 'tool_end') {
    // 툴 실행 상태 표시
  }

  if (event.type === 'done') {
    console.log(event.answer);
  }
}

실제 구현도 AgentRunnerController가 이런 스트리밍 흐름을 소비하는 방식이다. 그래서 Dexter는 “최종 답만 주는 블랙박스”가 아니라, 중간 상태를 UI에 노출할 수 있는 이벤트 기반 런타임이라고 보는 편이 정확하다. (GitHub)

또 시스템 프롬프트 쪽 정책은 금융 도메인에 특화돼 있다.

- For stock and crypto prices, company news, and insider trades, use get_market_data
- For financials, metrics, and estimates, use get_financials
- For screening stocks by financial criteria, use stock_screener
- Call get_financials or get_market_data ONCE with the full natural language query

이런 문장은 단순 가이드가 아니라 성능 최적화 장치다. 툴을 잘게 여러 번 호출하게 두면 비용도 늘고, 컨텍스트도 빨리 부풀고, 중간 해석 오류도 커진다. Dexter는 애초에 “한 번에 잘 던져라” 쪽으로 설계돼 있다. (GitHub)

실제로 언제 쓰면 좋을까

Dexter가 특히 잘 맞는 상황은 이런 경우다.

기업 비교 리서치

예를 들어 “AAPL, MSFT, NVDA의 최근 5년 매출 성장률과 영업이익률 추세를 비교하고, 현재 밸류에이션이 역사 평균 대비 어떤지 요약해줘” 같은 질문이다. 이런 질의는 재무 데이터, 멀티 기업 비교, 요약 해석이 동시에 필요하다. Dexter의 툴 정책과 에이전트 루프는 이런 종류의 조사형 질문에 잘 맞는다. (GitHub)

포트폴리오 맥락이 중요한 조언

메모리 정책에는 개인화된 금융 조언 전 memory_search를 먼저 하라는 문구가 있다. 즉, 사용자의 위험 성향이나 과거 선호를 누적하면서 대화하고 싶다면 Dexter의 persistent memory는 큰 장점이 된다. 일반 챗봇은 이 부분이 쉽게 날아가지만, Dexter는 이를 아예 시스템 정책으로 박아 놓았다. (GitHub)

금융 에이전트 연구용 베이스 프로젝트

Dexter는 모델 교체, 툴 추가, 평가, 로그 추적, 메모리 계층까지 이미 들어 있다. 그래서 “금융용 에이전트를 처음부터 만들기”보다, 기본기를 갖춘 연구 베이스를 포크해서 확장하기에 좋다. 특히 LangChain 기반이라 여러 모델 공급자를 빠르게 바꿔 실험하기 편하다. (GitHub)

설치와 실행

README 기준 기본 실행은 꽤 간단하다.

git clone https://github.com/virattt/dexter.git
cd dexter
bun install
cp env.example .env
bun start

필수에 가까운 키는 LLM API 키와 Financial Datasets API 키다. 웹 검색은 Exa가 우선이며 Tavily는 대안이고, 최신 env.example에는 Perplexity와 X 검색용 토큰, LangSmith 설정도 포함돼 있다. 즉 실행 환경은 “모델 + 금융 데이터 + 선택적 웹 검색 + 선택적 관찰성” 조합으로 이해하면 된다. (GitHub)

WhatsApp 연동도 별도로 제공된다.

bun run gateway:login
bun run gateway

이 부분은 데모성 기능으로 보일 수 있지만, 실제로는 금융 분석 에이전트를 “앱”이 아니라 “항상 옆에 있는 비서”처럼 쓰게 만드는 인터페이스 실험이라는 점에서 꽤 흥미롭다. (GitHub)

이 프로젝트의 장점

Dexter의 가장 큰 장점은 도메인 집중도다. 범용 에이전트 프레임워크는 많지만, 금융 조사 문제를 중심에 놓고 툴 정책·메모리 정책·평가 방식까지 맞춘 사례는 생각보다 드물다. README와 시스템 프롬프트, 툴 레지스트리를 함께 보면 이 프로젝트는 “금융 리서치 작업을 잘하게 만들기 위한 제약”을 꽤 의식적으로 걸어 두고 있다. (GitHub)

두 번째 장점은 실행 흔적이 잘 남는다는 점이다. scratchpad JSONL, LangSmith eval, 이벤트 스트리밍, 승인 흐름까지 있어서 에이전트 실패를 추적하기 쉽다. 에이전트는 성공보다 실패 분석이 더 중요한데, Dexter는 이 부분이 비교적 잘 준비돼 있다. (GitHub)

세 번째 장점은 확장성이다. 모델 공급자를 여러 개 붙일 수 있고, 로컬 Ollama도 연결 가능하며, 메모리 임베딩도 OpenAI/Gemini/Ollama 중 자동 선택할 수 있다. 즉 비용, 속도, 프라이버시 요구에 따라 실험 폭을 넓히기 좋다. (GitHub)

아쉬운 점도 있다

반대로 말하면 Dexter는 도메인 특화가 강한 만큼 범용성은 제한적이다. 예를 들어 일반적인 리서치 에이전트나 코딩 에이전트로 바로 쓰기보다는, 금융 중심 태스크에 맞춰진 사고 구조와 툴 정책을 먼저 이해하고 손봐야 한다. 시스템 프롬프트도 그 방향으로 강하게 편향돼 있다. (GitHub)

또 하나는 외부 API 의존성이다. 실시간 금융 데이터, 웹 검색, 모델 공급자, 평가 도구가 각기 다른 서비스 키에 기대고 있어, 완전한 로컬 독립 실행 환경과는 거리가 있다. Ollama와 로컬 메모리 임베딩 옵션이 있긴 하지만, 프로젝트가 제일 빛나는 지점은 여전히 외부 금융 데이터와 결합했을 때다. (GitHub)

정리

Dexter는 “금융 질문에 답하는 챗봇”이 아니다. 더 정확히 말하면, 금융 질문을 해결 가능한 조사 작업으로 변환하는 자율형 리서치 런타임이다. 툴 호출 규칙, 반복 실행 루프, scratchpad, 메모리 검색, 승인 흐름, 평가 파이프라인까지 갖추고 있어, 금융 도메인에서 에이전트를 진지하게 실험해보고 싶은 개발자에게 꽤 좋은 출발점이 된다. (GitHub)

개발자 관점에서 이 프로젝트의 핵심 가치는 분명하다. “LLM 하나 붙여서 금융 분석 흉내 내기”가 아니라, 금융 조사라는 어려운 문제를 에이전트 시스템 설계로 풀어낸다는 점이다. 그래서 Dexter는 단순한 오픈소스 데모보다 훨씬 흥미롭다. 이 저장소를 보면 앞으로의 전문 에이전트는 범용 모델 경쟁보다, 도메인 워크플로를 얼마나 정교하게 소프트웨어로 감쌀 수 있느냐에서 차이가 날 가능성이 크다는 걸 잘 보여준다. (GitHub)

반응형