상장 기업을 위한 경쟁사 인텔리전스 에이전트 구축 방법
요약
본 글은 상장 기업을 위한 경쟁사 인텔리전스 에이전트 구축 방법을 다루는 튜토리얼입니다. 이 에이전트는 SEC 제출 서류, 뉴스, 웹 컨텍스트 등 다양한 출처의 증거를 검색하고, 이를 구조화하여 인용(citation)과 함께 브리핑을 생성하는 워크플로우를 제공합니다.
핵심 포인트
- SEC 자료, 뉴스, 시장 데이터 등을 활용한 경쟁사 분석 에이전트 구축 방법 제시
- 검색(retrieval)과 추론(reasoning)을 분리하여 모든 주장에 출처 인용을 보장하는 것이 핵심
- 동종 업계 식별 및 경쟁적 움직임을 구조화된 표로 추출하는 기능 포함
- 투자 조언이 아닌, 리서치 워크플로우에 초점을 맞춘 에이전트 설계의 중요성 강조
30일간의 검색 여정, 10일차.
대부분의 경쟁사 리서치는 같은 방식으로 실패합니다. 몇 가지 최근 헤드라인만 찾고, 모델에게 요약해달라고 요청한 다음, 그 주장이 어디에서 왔는지 잊어버립니다.
이것으로는 상장 기업에 대한 경쟁사 인텔리전스(competitive intelligence)가 되기에 충분하지 않습니다. 경쟁사 인텔리전스 에이전트는 경쟁사 증거를 수집하고, 전략적 신호를 추출하며, 출처를 명시한 브리핑을 생성하여 인간의 검토에 돌려주는 검색 및 합성(retrieval-and-synthesis) 워크플로우입니다. 상장 기업들은 SEC(미국 증권거래위원회) 제출 서류, 실적 코멘터리, 투자자 페이지, 제품 페이지, 가격 책정 페이지, 뉴스, 시장 데이터, 애널리스트 코멘터리 등 라이선스되거나 공개적으로 이용 가능한 곳에 흔적을 남깁니다. 유용한 에이전트는 이러한 출처를 검색하고, 정규화하며, 주제별로 경쟁사들을 비교하고, 자신이 하는 모든 주장에 대한 인용(citation)을 보존해야 합니다.
본 튜토리얼에서는 상장 기업을 위한 TypeScript 기반의 경쟁사 인텔리전스 에이전트를 구축할 것입니다. 이 에이전트는 다음 기능을 수행합니다:
- 대상 회사에 대한 동종 업계(peer set)를 식별합니다.
- SEC 제출 서류, 뉴스, 웹 컨텍스트 및 시장 신호를 검색합니다.
- 경쟁적 움직임을 구조화된 표로 추출합니다.
- 인용이 포함된 브리핑을 생성합니다.
- Valyu competitor analysis app와 같은 심층 리서치 모드(Deep Research mode)를 추가합니다.
워크플로우는 다음과 같습니다:
대상 회사 → 동종 업계 → 증거 검색 → 신호 추출 → 인용 브리핑 → 선택적 심층 리서치 보고서.
요약 (TL;DR)
- SEC 제출 서류, 뉴스, 웹 증거 및 시장 컨텍스트를 사용하여 상장 기업을 비교하는 TypeScript 기반의 경쟁사 인텔리전스 에이전트를 구축합니다.
- 검색(retrieval)과 추론(reasoning)을 분리하여 모든 경쟁적 신호가 출처 ID를 인용하도록 합니다.
- 반복적인 모니터링을 위해 가벼운 브리핑 모드를 사용합니다.
- 더 긴 인용 보고서, PDF 출력 및 다단계 합성(multi-step synthesis)이 필요할 때 Valyu Deep Research로 확장합니다.
- 이는 투자 조언이 아닌 리서치 워크플로우입니다.
상장 기업 경쟁사 인텔리전스 에이전트가 추적해야 할 것은 무엇인가요?
상장 기업은 여러 증거 계층(evidence layers)을 제공합니다:
| Evidence layer | 중요성 |
|---|---|
| SEC filings and EDGAR records | 전략, 위험 요소, 부문별 실적, 인수합병(acquisitions), 고객 집중도 및 규제 공시 자료 |
| ... | |
| 경험 에이전트는 “이 회사가 좋은 투자처인가요?”라고 답변해서는 안 됩니다. 이는 투자 자문 영역에 해당합니다. 대신 다음과 같은 더 좁은 연구 질문에 답해야 합니다: |
- 어떤 경쟁사들이 동일한 고객 부문을 공략하고 있나요?
- 이번 주 경쟁 환경에서 무엇이 바뀌었나요?
- 주장하는 내용 중 SEC 공시 자료로 뒷받침되는 것과 뉴스 보도로 커버된 것은 무엇인가요?
- 추가 조사할 만큼 중요해 보이는 움직임은 무엇인가요?
1단계: TypeScript 프로젝트 설정하기
Node.js 22 이상과 Valyu API 키를 사용하세요.
npm init -y
npm install [email protected]
npm install --save-dev [email protected]
.env 파일 생성:
VALYU_API_KEY=replace-with-your-valyu-key
.env는 버전 관리에서 제외하세요. 쿼리할 수 있는 금융 데이터셋은 사용자의 Valyu 계정과 플랜에 따라 다릅니다. SEC 공시 자료 예시는 Valyu의 SEC 공시 소스를 사용하며, 시장 데이터 및 프리미엄 금융 소스의 경우 금융 가이드와 가격 책정(pricing)에서 접근 권한을 확인하세요.
competitive-intel-agent.ts 파일을 생성하고 임포트 및 공유 타입을 추가하세요:
import { writeFile } from
운영 환경을 위해 표준 회사 식별자(ticker, CIK, 거래소, 웹사이트 및 알려진 자회사)를 저장해야 합니다. 이름만으로는 충돌이 발생할 수 있습니다. 공기업인 “Apple”이 사과라는 단어를 언급하는 모든 출처는 아닙니다.
## 3단계: 제출 서류, 뉴스, 시장 및 웹 증거 검색하기
검색(retrieval)을 추론(reasoning)과 분리할 것입니다. 각 결과는 모델이 인용해야 하는 ID를 가진 `Evidence` 기록이 됩니다.
async function searchValyu(query: string, kind: EvidenceKind, company: string): Promise<Evidence[]> {
const valyu = new Valyu();
const options =
...
이는 느리게 변하는 공시 자료와 빠르게 변화하는 뉴스를 의도적으로 혼합합니다. 그러면 에이전트는 경쟁 신호가 지속적인지, 최근의 것인지, 아니면 여전히 추측에 불과한 것인지를 알려줄 수 있습니다.
운영 환경에서는 검색된 모든 청크를 모델에 전달해서는 안 됩니다. URL을 중복 제거하고, 관련성 및 최신순으로 순위를 매기며, 출처별 텍스트 양을 제한하고, 추출 전에 전체 증거 예산(evidence budget)을 적용해야 합니다. 위의 `evidenceBudget` 함수는 그러한 가드레일의 작은 버전입니다.
[](https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs4wh3eezzco43ntwq4bf.webp)
## 4단계: 인용을 통해 경쟁 신호 추출하기
경량 모드(lightweight mode)는 모델에게 논지(thesis)를 지어내라고 요청해서는 안 됩니다. 이는 검색된 증거를 결정론적 규칙으로 인용된 신호 후보로 변환하고, 장문의 종합 분석은 Deep Research에 맡깁니다.
function classifyTheme(row: Evidence): CompetitiveSignal["theme"] {
const text = ${row.title} ${row.text}.toLowerCase();
if (/price|pricing|subscription|discount|margin/.test(text)) return "pricing";
...
좋은 경쟁 인텔리전스는 단순한 요약이 아닙니다. 그것은 다음을 분리합니다:
- **발생한 일 (What happened)**: 제품 출시, 파트너십 체결, 가격 변경, 인수합병(acquisition), 또는 위험 공시
- **출처 (Where it came from)**: 공시 자료, 뉴스 기사, 시장 데이터, 또는 회사 페이지
- **중요성 (Why it matters)**: 대상 기업의 전략 중 어떤 부분을 영향을 미칠 수 있는지
- **신호 신뢰도 (How confident the signal is)**: 공시 자료가 일회성 웹 언급보다 더 강력한 증거임
## Step 5: 작성 전 인용 출처 확인하기(check citations before writing the brief)
경쟁사 인텔리전스 에이전트는 실패 시 안전하게 작동해야 합니다 (fail closed). 만약 모델이 존재하지 않는 소스 ID를 인용한다면, 코드는 해당 보고서 작성을 거부해야 합니다.
function verifyBrief(brief: Brief, evidence: Evidence[], expectedTarget: string, expectedPeers: string[]) {
if (brief.target !== expectedTarget) throw new Error(Unexpected target: ${brief.target});
...
이것이 유용한 리서치 에이전트와 자신감 넘치는 자동 완성 래퍼(autocomplete wrapper)를 가르는 선입니다. 보고서는 자신이 가진 증거 패킷을 초과하여 작성되어서는 안 됩니다.
## Step 6: 경량 경쟁사 인텔리전스 에이전트 실행하기(run the lightweight competitive intelligence agent)
작은 `main` 함수를 추가합니다:
async function main() {
if (!process.env.VALYU_API_KEY) throw new Error("Set VALYU_API_KEY in .env");
const evidence = await collectEvidence(input.target, input.peers, input.focus);
...
실행합니다:
npx tsx --env-file=.env competitive-intel-agent.ts "NVIDIA" "AMD, Intel, Broadcom" "AI data center accelerators and inference infrastructure"
출력은 주식 투자 제안서(stock pitch)가 아니라 인용된 신호 후보 보고서여야 합니다. 소스 인덱스는 분석가들이 근본적인 문서를 검사해야 하므로 의도적으로 상세합니다. 세련된 서술형 보고서(polished narrative report)를 원할 때는 아래의 Deep Research 모드를 사용하세요.
[](https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frv46m8tewqe6rvxftt8e.webp)
## 경쟁사 분석 앱처럼 Deep Research 모드 추가하기
위의 경량 에이전트는 빠르고 구조화된 모니터링을 원할 때 가장 좋습니다. 하지만 일부 경쟁사 질문은 짧은 검색(retrieval) 과정으로는 너무 광범위합니다:
- “이 경쟁사의 제품 전략을 여러 부문으로 매핑해 주세요.”
- “타겟의 포지셔닝을 세 개의 공개된 동종업계 기업과 비교해 주세요.”
- “최근 파트너십, 제품 출시, 시장 변화를 찾아낸 다음, 출처가 명시된 보고서를 작성해 주세요.”
- “팀과 공유할 수 있는 PDF 파일을 생성해 주세요.”
이런 경우에 Deep Research가 유용합니다.
[competitor-analysis app](https://competitor-analysis.up.railway.app/)은 두 개의 패널로 구성된 흐름을 사용합니다:
1. 사용자가 경쟁사 웹사이트와 컨텍스트를 입력합니다.
2. 백엔드가 Valyu Deep Research 작업을 생성합니다.
3. UI가 몇 초마다 작업 상태를 폴링(polling)합니다.
4. UI는 상태 엔드포인트를 폴링하여 리서치가 진행되는 동안 진행 상황 업데이트를 표시합니다.
5. 최종 결과에는 Markdown, 출처(citations), 그리고 PDF 내보내기 기능이 포함됩니다.
해당 레포지토리의 핵심 구성 요소는 다음과 같습니다:
- 모델: 빠른 보고서를 위한 `fast` 모드와, 더 깊은 리서치나 높은 비용 또는 지연 시간이 정당화되는 경우 사용 가능한 `standard`, `heavy`, `max` 모드가 있습니다.
- 비동기 작업 생성(asynchronous task creation)
- 서버 시간 초과를 방지하기 위한 클라이언트 측 폴링
- 출력 형식: Markdown 및 PDF
- 보고서에 첨부된 출처(cited sources)
이 공개 기업 에이전트에는 두 가지 모드를 노출합니다:
| 모드 | 적합한 경우 | 출력물 |
| --- | --- | --- |
| `brief` | 주기적 모니터링, 대시보드, 알림 | 구조화된 출처 표 |
| `deepresearch` | 장문 경쟁사 분석, 전략 메모, 공유 가능한 보고서 | Markdown + PDF 보고서 |
백엔드 라우트에 추가할 수 있는 Deep Research 작업 생성기입니다:
type DeepResearchTask = {
deepresearch_id: string;
status:
Next.js 앱에서 UI는 작업을 생성하고 반환된 deepresearch_id를 저장한 다음, 보고서가 완료될 때까지 10초마다 상태 경로(status route)에 폴링해야 합니다. 이러한 아키텍처는 중요합니다. 왜냐하면 심층 연구(deep research)는 일반적인 서버리스 요청 제한 시간보다 더 오래 실행될 수 있기 때문입니다.
좋은 Deep Research 프롬프트는 “이 회사를 분석해 주세요”보다 훨씬 구체적이어야 합니다. 다음 정보를 제공해야 합니다:
- 대상 회사 및 티커(ticker)
- 경쟁사 및 티커
- 초점 영역(focus area)
- 날짜 범위(date range)
- 출처 선호도(source preferences)
- 출력 섹션(output sections)
- 주장하는 자료를 인용하라는 명시적 지침
- 투자 조언을 제공하지 말라는 명시적 지침
이 심층 보고서는 경량 에이전트(lightweight agent)를 대체할 수 없습니다. 이는 질문에 종합(synthesis), 출처 발견(source discovery), 그리고 공유 가능한 보고서가 필요할 때의 상위 단계 경로(escalation path)입니다.
구현
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기