링크알파코리아
경력근거: 마켓 브리핑 자동화, 실사(DD) 리포트 에이전트, 비정형 문서 검색
링크알파는 기관투자자의 리서치를 돕는 에이전트를 만들고, 공고는 에이전트가 조율할 대상으로 실사 리포트와 비정형 문서 검색·인용 워크플로우를 명시했으며, 금융 답변은 출처 귀속이 품질의 필수 요건이라고 못박았습니다. 이 도구는 그중 실사 리포트와 문서 인용이 만나는 지점 하나만 골라, 고객사에서 받은 자료 묶음을 인용 가능한 단위로 정규화하고 항목마다 붙인 인용을 원문 대조로 확정하는 데까지 좁혀 담았습니다. 근거를 못 찾은 항목을 빈칸이 아니라 확인 필요 목록으로 돌려주는 방식은 문제를 풀기에 충분한 데이터와 컨텍스트의 경계를 정의하라는 공고의 요구와 같은 방향이고, 정답 인용표를 고정해 두고 프롬프트 변경 효과를 비교하는 방식은 좋아 보인다가 아니라 고정 분포 위에서 검증하라는 이 팀의 기준과 같은 방향입니다. 다만 이 포트폴리오가 보여주는 것은 지저분한 문서를 정규화하고 인용의 진위를 규칙으로 확정하는 기술이며, buy/sell-side 리서치나 실사 실무의 도메인 전문성은 주장하지 않습니다. 모르는 금융 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
공고는 에이전트가 조율할 대상으로 마켓 브리핑·실사 리포트·비정형 문서 검색과 인용 워크플로우를 나란히 열거했습니다. 그래서 여러 워크플로우를 얕게 걸치지 않고 실사 리포트와 문서 인용이 만나는 지점 하나만 골라 자료 입력부터 메모 파일까지 끝까지 만듭니다.
공고는 인용과 출처 grounding 검증을 평가 체계의 축으로 적었고, 금융 답변에서 출처 귀속이 품질의 필수 요건이라고 못박았습니다. 그래서 인용의 진위를 모델 판단에 맡기지 않고 원문 문자열 대조로 확정하며, 대조를 통과한 문장만 메모 본문에 올립니다.
프롬프트와 규칙을 코드 배포 없이 갈아끼우고, 좋아 보인다가 아니라 고정된 분포 위에서 변경 효과를 재는 것이 이 팀의 기준입니다. 그래서 정답 인용표를 고정해 두고 프롬프트를 바꿀 때마다 같은 항목에 다시 돌리며, 고객사별 체크리스트 프로파일은 코드가 아니라 설정 파일로 뺍니다.
운용사에서 받은 실사 자료 묶음으로 실사 메모 초안을 만드는 CLI입니다. 어닝콜 녹취록과 공시 발췌, 브로커 노트가 섞인 폴더와 체크리스트 항목표를 입력으로 받아, 반복되는 머리글과 쪽번호를 걷어내고 줄바꿈으로 끊긴 문장을 이어 인용 가능한 단위로 정규화합니다. 항목마다 근거 문장을 찾아 원문 인용과 출처(문서 이름·쪽 표기)를 붙이고, 인용한 문구가 원문에 글자 그대로 있는지 대조해 통과한 문장만 메모 본문에 올립니다. 근거를 못 찾은 항목은 빈칸으로 두지 않고 확인 필요 목록에 담고, 같은 항목에 서로 다른 수치가 잡히면 한쪽을 고르지 않고 두 인용을 나란히 남깁니다. 산출물은 마크다운 메모 파일과 항목별 인용 대장 CSV 라서 화면 없이 CLI에서 완결됩니다.
고객사 운용사에서 투자심의 자료에 넣을 실사 메모를 쓰는 애널리스트입니다. 공유 폴더에 흩어진 녹취록과 공시 발췌를 하나씩 열어 항목마다 근거 문장을 찾아 옮겨 적고 출처를 다시 확인하느라 이틀을 쓰던 일을, 폴더를 지정해 초안을 받고 확인 필요 항목만 직접 채우는 반나절로 줄이고 싶은 사람입니다.
인용의 진위를 모델 판단이 아니라 원문 문자열 대조로 확정하면, (a) 원문에 없는 문구가 인용 칸에 오르지 못해 지어낸 근거가 메모 본문에 섞이지 않고, (b) 근거를 못 찾은 항목이 빈칸이 아니라 확인 필요 목록으로 드러나 무엇을 더 받아야 하는지 사람이 알게 되며, (c) 같은 항목에 상충하는 수치가 잡히면 한쪽을 고르지 않고 두 인용을 나란히 남겨 판단을 사람에게 넘길 수 있습니다.
만드는 덩어리를 둘로 좁힙니다. 하나는 자료 폴더를 읽어 반복 머리글·쪽번호·끊긴 문장·뭉개진 표를 인용 가능한 단위로 정규화하는 부분이고, 다른 하나는 체크리스트 항목마다 근거 문장을 찾아 인용을 붙이고 그 문구가 원문에 글자 그대로 있는지 대조하는 부분입니다. 명령 한 줄로 마크다운 메모 초안과 인용 대장 CSV 가 나오고, 근거를 못 찾은 항목은 확인 필요로 빠집니다. 화면·서버·배포는 만들지 않고, 자료 묶음은 합성 문서로 시작합니다.
1주차 도구를 작성자가 만든 정답 인용표 40건에 돌려 항목별 인용이 정답 출처와 일치한 건수와 확인 필요로 빠져야 할 항목이 실제로 빠진 건수를 세고, 프롬프트를 바꿔 다시 돌리면 버전별 수치와 실패 유형(엉뚱한 문서 인용·문구 불일치·놓친 근거)이 표 파일로 남는 평가 명령입니다.
체크리스트 항목 목록과 문서 우선순위, 인용 길이 기준을 코드가 아니라 설정 파일로 빼서 고객사별로 코드 수정 없이 갈아끼우고, 어느 프로파일에서 어떤 항목이 자주 미근거로 빠지는지 실패 케이스로 태깅해 남기는 단계입니다.
자료 폴더를 지정하고 명령 한 줄을 치면 체크리스트 12개 항목에 인용이 붙은 마크다운 메모 초안과 인용 대장 CSV 가 만들어지는 흐름을 시연합니다.
반복 머리글과 줄바꿈으로 끊긴 문장, 별칭 표기, 근거가 아예 없는 항목, 상충 수치를 섞은 자료 묶음에서도 도구가 죽지 않고, 원문에 없는 문구가 인용 칸에 한 건도 오르지 않는 것을 보입니다.
정답 인용표 40건에 돌려 항목별 인용이 정답 출처와 일치한 건수를 셉니다. 다만 자료와 정답을 모두 작성자가 만든 합성 기준이라 성능 검증이 아니라 데모 조건 동작입니다.
프롬프트를 바꾼 뒤 같은 정답표에 다시 돌려 인용 정확도와 실패 유형(엉뚱한 문서 인용·문구 불일치·놓친 근거)이 버전별로 어떻게 달라졌는지 표 파일로 비교해 보여줍니다.
위 수치는 전부 작성자가 만든 합성 자료와 정답표 위 자가채점이며, 실제 인용 정확도는 링크알파의 실 금융 문서와 실 애널리스트 검수가 있어야 측정 가능합니다. 이 도구는 그 검증을 바로 돌릴 수 있는 상태로 만듭니다.
이건 고객과 실데이터 없이 혼자 만든 포트폴리오입니다. 모든 수치는 합성 자료 자가채점이라 성능 증명이 아닙니다. 면접에서는 데모가 도는 상태와 실검증 준비 상태로 솔직히 설명합니다
정답 인용표를 작성자가 만들었으니 잘 맞는 것이 당연합니다. 반복 머리글과 끊긴 문장, 뭉개진 표, 별칭 표기, 자료에 아예 없는 항목, 같은 지표에 다른 수치가 잡히는 상충 문단을 일부러 섞어 두었습니다.
인용이 원문에 존재한다고 해서 그 문장이 그 항목에 맞는 근거인지까지 대조로 잡지는 못합니다. 회사 가이던스와 컨센서스처럼 상충하는 수치 중 무엇이 맞는지도 도메인 판단이 필요하므로, 인용의 존재와 해석의 정확은 분리해서 보고 상충은 사람에게 넘깁니다.
이 포트폴리오가 보여주는 것은 지저분한 문서를 인용 가능한 단위로 정규화하고 인용의 진위를 규칙으로 확정하는 기술이며, buy/sell-side 리서치나 실사 실무의 도메인 전문성은 주장하지 않습니다. 모르는 금융 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
공고가 함께 요구하는 스트리밍 응답과 세션 격리 런타임, 컨테이너 배포는 이 산출물이 다루지 않습니다. 한 사람이 짧은 기간에 만들 수 있는 범위로 자료 정규화와 인용 대조 둘만 남겼고, 실 도입에서는 문서 종류가 훨씬 많아 정규화 규칙부터 다시 맞춰야 하며 자료 접근 권한 분리도 도입 단계 과제로 남습니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
고객사 공유 폴더에서 받은 실사 자료를 문단 단위로 담은 합성 코퍼스입니다. 반복 머리글과 쪽번호가 섞인 문단, 줄바꿈으로 끊긴 문장, 줄바꿈으로 뭉개진 표, 별칭 표기, 발행일이 유실된 문단, 자료 목록에 없는 문서, 같은 지표에 다른 수치를 말하는 상충 문단을 일부러 섞어, 정규화와 인용 대조가 하드 케이스에서도 안 깨지는지 보이는 입력입니다.
| para_id | doc_id | doc_type | page_label | ticker_raw | published_at | text |
|---|---|---|---|---|---|---|
| para_0001 | doc_smsn_call | earnings_call | p.3 | 삼성전자 | 2026-04-24 | 경영진은 2분기 DS 부문 영업이익 가이던스를 전분기 대비 15% 상… |
| para_0002 | doc_smsn_call | earnings_call | p.4 | 삼전 | 2026-04-24 | 삼성전자 2026년 1분기 실적발표 4 / 18 연간 설비투자 계획은… |
| para_0003 | doc_smsn_broker | broker_note | p.1 | Samsung Electronics | 2026-04-25 | 컨센서스는 2분기 DS 영업이익을 전분기 대비 9% 증가로 보고 있어… |
| para_0004 | doc_smsn_call | earnings_call | p.11 | 삼성전자 | 2026-04-24 | 질의응답에서는 2분기 DS 부문 영업이익 가이던스를 전분기 대비 5%… |
| para_0005 | doc_hynix_filing | filing_excerpt | p.42 | SK하이닉스 | 2026-04-22 | 공시는 메모리 가격 변동성과 고객사 재고 조정을 주요 위험으로 적시했… |
아래 JSON Schema 에 맞는 실사 자료 문단을 40건 더 만들어 주세요. 국내 상장 종목의 어닝콜 녹취록·공시 발췌·브로커 노트·담당자 메모가 섞인 묶음이고, text 는 한국어 금융 문장입니다.
{"type":"object","properties":{"para_id":{"type":"string"},"doc_id":{"type":"string"},"doc_type":{"type":"string","enum":["earnings_call","filing_excerpt","broker_note","internal_note"]},"page_label":{"type":["string","null"]},"ticker_raw":{"type":"string"},"published_at":{"type":["string","null"]},"text":{"type":"string"}},"required":["para_id","doc_id","doc_type","ticker_raw","text"]}
쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라. 첫째 문단 맨 앞에 문서 제목과 쪽번호가 반복해 붙은 행 4건 이상, 둘째 문장이 줄바꿈으로 끊긴 행 3건 이상, 셋째 표가 줄바꿈으로 뭉개진 행 2건, 넷째 같은 종목이 별칭으로 다르게 적힌 행(삼성전자와 삼전과 Samsung Electronics 같은 짝) 4건 이상, 다섯째 page_label 과 published_at 이 null 인 출처 유실 행 2건, 여섯째 자료 목록에 없는 doc_id 를 쓴 행 1건, 일곱째 같은 지표를 다른 수치로 말하는 상충 문단 2건, 여덟째 text 가 10자 안팎인 초단문 경계값 1건. JSON 배열만 출력해 주세요.{"type":"object","properties":{"para_id":{"type":"string"},"doc_id":{"type":"string"},"doc_type":{"type":"string","enum":["earnings_call","filing_excerpt","broker_note","internal_note"]},"page_label":{"type":["string","null"]},"ticker_raw":{"type":"string"},"published_at":{"type":["string","null"]},"text":{"type":"string"}},"required":["para_id","doc_id","doc_type","ticker_raw","text"]}고객사가 엑셀로 건네준 실사 체크리스트를 행 단위로 읽어 담은 항목표입니다. 자료 묶음으로 답이 나오는 항목과 함께, 자료에 아예 없어 확인 필요로 빠져야 하는 항목, 두 가지 이상으로 읽혀 되물어야 하는 항목, 병합셀 때문에 섹션이 비어 있는 행, 다른 시트에서 한 번 더 들어온 중복 행을 섞어, 항목표 자체의 지저분함까지 처리하는지 보이는 입력입니다.
| item_id | section | question | answer_type | required | source_hint | note |
|---|---|---|---|---|---|---|
| item_01 | 실적 | 직전 분기 DS 부문 영업이익 가이던스와 컨센서스의 차이는 얼마입니까? | number | true | 어닝콜 녹취록·브로커 노트 | — |
| item_02 | 실적 | 연간 설비투자 계획에 변동이 있었습니까? | sentence | true | — | 근거 문장이 줄바꿈으로 끊긴 문단에 있습니다. |
| item_03 | 위험 | 공시가 적시한 주요 위험 요인은 무엇입니까? | list | true | 공시 발췌 | — |
| item_04 | — | 클라우드 부문 흑자 전환 시점은 언제로 제시되었습니까? | sentence | true | — | 엑셀 병합셀이라 섹션 값이 비어 있는 행입니다. |
| item_05 | 밸류에이션 | 목표주가 컨센서스는 얼마입니까? | number | true | — | 자료 묶음에 목표주가 문서가 없어 확인 필요로 빠져야 정답입니다. |
아래 JSON Schema 에 맞는 실사 체크리스트 항목을 30건 더 만들어 주세요. 운용사가 엑셀로 건네준 항목표를 행 단위로 읽은 결과이고, question 은 한국어 실사 질문입니다.
{"type":"object","properties":{"item_id":{"type":"string"},"section":{"type":["string","null"]},"question":{"type":"string"},"answer_type":{"type":"string","enum":["number","sentence","list"]},"required":{"type":"boolean"},"source_hint":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["item_id","question","answer_type","required"]}
쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라. 첫째 자료 묶음에 근거가 아예 없어 확인 필요로 빠져야 하는 항목을 전체의 2할 이상, 둘째 두 가지 이상으로 읽혀 되물어야 하는 모호한 항목 3건 이상, 셋째 병합셀 탓에 section 이 null 인 행 3건, 넷째 다른 시트에서 한 번 더 들어와 질문 문구가 같은 중복 행 2건, 다섯째 질문 문구가 중간에서 잘린 행 2건, 여섯째 사실이 아니라 전망이나 의견을 묻는 항목 2건. JSON 배열만 출력해 주세요.{"type":"object","properties":{"item_id":{"type":"string"},"section":{"type":["string","null"]},"question":{"type":"string"},"answer_type":{"type":"string","enum":["number","sentence","list"]},"required":{"type":"boolean"},"source_hint":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["item_id","question","answer_type","required"]}| Python | 자료 폴더 파싱과 정규화, 인용 대조 검증기, 메모 파일 생성, 평가 명령을 잇는 CLI 본체를 만듭니다. |
| LangGraph | 항목 읽기에서 후보 문단 검색, 인용 초안 작성, 원문 대조 검증으로 이어지는 그래프를 만들고, 대조에 실패하면 후보를 바꿔 한 번만 다시 시도하는 분기를 둡니다. |
| Claude Code | 설계와 구현과 검증 사이클을 빠르게 돌리는 개발 도구로 쓰고, 정규화 규칙의 경계 테스트를 만드는 데 활용합니다. |
| LLM-as-judge | 2주차 평가에서 정답 판정이 아니라 실패 유형 분류 보조로만 넣습니다. 인용의 진위 판정은 원문 문자열 대조가 맡습니다. |
| 설정 파일(YAML) | 3주차에 체크리스트 항목과 문서 우선순위를 코드 배포 없이 갈아끼우는 고객사별 프로파일로 씁니다. |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우려면 2주차에서 정답 인용표 위 인용 정확도를 버전별로 비교합니다.
✓ pass → 여기까지도 완결입니다. 더 키우려면 3주차에서 고객사별 체크리스트 프로파일을 설정 파일로 빼고 실패 케이스를 태깅합니다.
체크리스트 항목 한 건에 대한 결과 한 벌입니다. 1) 근거를 찾은 경우 메모 본문에 올릴 문장과 원문 인용, 출처 문서와 쪽 표기, 원문 대조 통과 여부, 2) 같은 항목에 다른 수치가 잡힌 경우 두 인용을 함께 남긴 상충 표시, 3) 자료에 근거가 없는 경우 무엇이 없는지, 4) 두 가지 이상으로 읽히는 경우 되물을 후보를 담습니다. 항목 한 건이 이 형식 하나로 채점됩니다.
{"type":"object","properties":{"item_id":{"type":"string"},"status":{"type":"string","enum":["cited","conflicting","unresolved","needs_question"]},"findings":{"type":"array","items":{"type":"object","properties":{"sentence":{"type":"string"},"quote":{"type":"string"},"doc_id":{"type":"string"},"page_label":{"type":["string","null"]},"verified":{"type":"boolean"}},"required":["sentence","quote","doc_id","verified"]}},"missing_reason":{"type":["string","null"]},"clarify_options":{"type":"array","items":{"type":"string"}},"hedge":{"type":["string","null"]}},"required":["item_id","status","findings"]}[
{
"input_ref": "item_03 공시가 적시한 주요 위험 요인을 묻는 정상 항목",
"output": {
"item_id": "item_03",
"status": "cited",
"findings": [
{
"sentence": "공시는 메모리 가격 변동성과 고객사 재고 조정을 주요 위험으로 적었습니다.",
"quote": "메모리 가격 변동성과 고객사 재고 조정을 주요 위험으로 적시했습니다",
"doc_id": "doc_hynix_filing",
"page_label": "p.42",
"verified": true
}
],
"missing_reason": null,
"clarify_options": [],
"hedge": "작성자가 만든 합성 자료 기준이라 실제 공시 문구가 아닙니다."
}
},
{
"input_ref": "item_01 같은 지표에 15% 와 5% 두 수치가 잡힌 상충 항목",
"output": {
"item_id": "item_01",
"status": "conflicting",
"findings": [
{
"sentence": "본문에서는 2분기 DS 부문 영업이익 가이던스를 전분기 대비 15% 상향한다고 밝혔습니다.",
"quote": "2분기 DS 부문 영업이익 가이던스를 전분기 대비 15% 상향한다고 밝혔습니다",
"doc_id": "doc_smsn_call",
"page_label": "p.3",
"verified": true
},
{
"sentence": "질의응답에서는 같은 지표를 전분기 대비 5% 상향으로 말했습니다.",
"quote": "전분기 대비 5% 상향한다고 다시 언급했습니다",
"doc_id": "doc_smsn_call",
"page_label": "p.11",
"verified": true
}
],
"missing_reason": null,
"clarify_options": [],
"hedge": "같은 문서 안에서 같은 지표가 두 수치로 적혀 있어 어느 쪽이 최종인지는 사람이 확인해야 합니다. 컨센서스 9% 와의 갭도 어느 수치를 쓰느냐에 따라 달라집니다."
}
},
{
"input_ref": "item_05 목표주가처럼 자료 묶음에 근거가 없는 항목",
"output": {
"item_id": "item_05",
"status": "unresolved",
"findings": [],
"missing_reason": "자료 폴더에 목표주가를 적은 문서가 없습니다. 지금 묶음에는 어닝콜 녹취록과 공시 발췌, 브로커 노트만 있고 브로커 노트에도 목표주가 수치가 아니라 상향 사실만 적혀 있어, 목표주가 컨센서스 자료를 추가로 받아야 채울 수 있습니다.",
"clarify_options": [],
"hedge": null
}
},
{
"input_ref": "item_06 문구가 잘려 두 가지 이상으로 읽히는 항목",
"output": {
"item_id": "item_06",
"status": "needs_question",
"findings": [],
"missing_reason": null,
"clarify_options": [
"직전 분기 매출을 묻는 것인지",
"직전 분기 영업이익을 묻는 것인지",
"최근 두 분기 흐름을 함께 묻는 것인지"
],
"hedge": "고른 해석을 항목표에 적어 다시 돌리면 그 해석으로 근거를 찾습니다."
}
}
][자동 검증: 규칙으로 객관 채점] 1. 출력이 위 JSON Schema 를 통과하는지 확인합니다. 통과하지 못하면 메모에 올리지 않고 다시 뽑습니다. 2. status 가 cited 나 conflicting 이면 각 finding 의 quote 가 그 doc_id 문단 원문 안에 공백 정규화 뒤 글자 그대로 있는지 대조하고, 하나라도 어긋나면 verified 를 false 로 내려 항목을 unresolved 로 옮깁니다. 3. 인용에 쓰인 doc_id 가 자료 목록에 있는 문서인지 확인해, 목록에 없는 문서를 인용한 항목은 메모 본문에서 빼고 확인 필요로 옮깁니다. 4. status 가 unresolved 면 findings 가 비어 있고 missing_reason 이 채워졌는지, needs_question 이면 clarify_options 가 두 개 이상인지 확인합니다. 5. 정답 인용표 위에서는 finding 의 doc_id 와 page_label 이 정답 출처와 일치하는지 세고, 확인 필요로 빠져야 할 항목이 cited 로 나오면 실패로 셉니다. [수동 검증: 사람과 LLM 보조] 1. 인용이 존재할 뿐 아니라 그 항목에 맞는 근거인지는 실 애널리스트가 항목의 5% 를 골라 훑어봅니다. 2. 값이 틀린 항목의 실패 원인을 엉뚱한 문서 인용과 문구 불일치와 놓친 근거로 나누는 분류는 Claude Haiku 4.5 보조로 돌린 뒤 사람이 확인합니다.
근거: 마켓 브리핑 자동화, 실사(DD) 리포트 에이전트, 비정형 문서 검색