1월 4일 가짜연구소 9th 깃허브에 잔디심기 일정이 모두 막을 내렸습니다. 처음에는 말 그대로 깃허브에 잔디심기 Commit의 목적으로 조금 러프하게 하지 않을까 생각했지만, 누구보다 프로젝트에 진심이었던 기잔심분들 덕에 동기부여도 되고 성장을 수집하지 않았나 생각합니다. 다시 한번 좋은 스터디를 마련해 주신 가짜연구소와 정한결 님에게 감사인사 드립니다.
스터디는 각자 원하는 프로젝트 개발과 함께 이 개발한 프로덕트를 통한 부가가치 창출이란 좋은 목표와 함께 매주 팀별 LLM Engineering 을 위한 handbook에 들어가기 위한 발표 자료를 공유하는 자리였습니다. 저 같은 경우는 Context Retrieval을 발표했지만 시간도 아쉽고 발표준비도 미숙해서 조금 아쉬움이 남는 발표였던 것 같습니다.
저 같은 경우는 'Stockelper' 라는 주식 초보를 위한 AI 보조 서비스를 개발하는 팀에 합류하게 되었습니다. 사실 이전에도 LLM RAG 스터디 등을 해보면서 금융 관련 사례와 접목은 해보고 싶다 생각을 매번 막연하게 하였으나, 게으르기도 했고, 데이터, 시간, 팀원등 다양한 이슈로 못했던 것 같은데 이번에는 꼭 해봐야겠다는 심정으로 참여했던 것 같습니다. 저희 리더셨던 영상님이 이전 깃수에서도 네이버 하이퍼크로버기반의 stockelper 개발을 하셔서 고도화 깃수로 진행을 하셨고, 영상님, 천솔님 두 분 다 링크드인에서 소통을 했던 열정 가득한 분들과 팀원을 하게 되었습니다. 또 희주님, 정열님도 stockelper에 합류하게 되어서 누구보다 든든한 팀원들이 구성이 되었습니다.
초반 stockelper 의 고도화에서 여러 아이디어들이 제시가 되었는데, 저도 한참 주식을 하고 있었던 터라 내 UX 경험을 통해 반영해 보면 어떨까? 란 생각을 가지고 있었습니다. ETF 레버리지를 단타로 하고 있던 저에게 조금은 도박적인 리스크가 있지만 이걸 챗봇으로 구현해 내면 재밌지 않을까 생각해도 스탁헬퍼 역시 해외주식 쪽도 업데이트를 준비하고 있었던 터라 제가 담당을 해보게 되었습니다. 그러나 생각보다 해외주식이 구매하는 건 쉽지만 , API를 호출해 오는 과정이 다른 국내주식 API처럼 쉽게 호출해 오기는 어려웠습니다. Polygon과 같은 유로 API 툴도 있고, 다양하게 실시간 티커 가격을 지원해 주는 곳들이 있었지만 호출제한과 유로라서 서비스를 만들기에는 적합하지 않았고, 스터디였기 때문에 크게 투자하는 건 어려움이 있었습니다. 계속 찾던 중 yhfinance 라이브러리가 있었고, OHLCV 데이터를 불러올 수 있었고, 다양한 데이터를 불러올 수 있었습니다. 이것도 결국 라이브러리라 어느 정도 레이턴시가 발생했기 때문에 제가 원하는 뭔가 실시간 서비스에는 부적합했습니다.
그렇게 스터디를 하다가 팀원들은 Graph DB, Agent, ML 기반의 감성분석 등 다양한 주제를 도입하고 있어서, 그중에서는 제가 재밌게 해볼껄 해보자 생각을 해서 Agent로 도메인을 선정해서 팀원 정열님 코드 기반으로 스터디를 해보고 랭그래프 홈페이지 테디노트님의 독스를 보면서 개발을 진행하게 되었습니다.
제가 만든 서비스는 다음과 같습니다.
1. 사용자 가이드 기반 ReAct 에이전트
- Function Calling 기능을 통해서 Multi Vector Store(Faiss) 에서 유저 질문에 적합한 벡터디비에서 hybrid Search를 해와서 RAG 기반 답변을 하는 에이전트를 개발했습니다. 단일 테스트에선 일반 채팅이 나오면 따로 Function call을 하지 않고 일반적인 질문에 대한 답변을 할 수 있는 에이전트였습니다.
Tip. 사용자 가이드 계좌개설, 거래리스크, 수수료, 인증 센터, 매매 안내 등 금융사에서 사용자 가이드에 만들어둔 내용을 기반으로 벡터스토어를 구성해서 임베딩 해서 데이터를 넣어두었습니다.
2. Custom Tool 기반의 ReAct 에이전트
- 야후 파이낸스가 결국 레이턴시가 느리기 때문에 이걸 메인으로 API 적용은 어렵겠다 생각을 했었고, 문제는 Perplexity를 써보던 중 검색엔진 기반의 무서움을 느껴서, 내가 만드는 프로덕트가 이것과는 달라야 하지 않을까 생각을 했습니다. 주식가격은 당연히 조회해야 할 거고 종합 분석은 해야 할 것이다. 그리고 내가 주식매매 할 때 했던 방법을 녹여봐도 재밌겠다 생각을 했었고, 유튜브, 멀티모달 툴이 그에 기반이 되었습니다.
사실 LLM으로 주식가격을 예측한다는 것은 어려운 일입니다. 그러나 생각은 해보게 할 수 있지 않을까? 란 접근을 하였습니다. 일단 전통적인 시계열 데이터기반의 주가 예측은 시장에서도 적용하기 어렵기 때문에 실제 증권 관련 매매는 국장의 경우 뉴스도 봐야 하고, 기업의 재무제표, 또 어이없는 커뮤니티의 유저들에 의한 매매, 미국 시장 나스닥 지수에 따른 영향 등 다양하게 고려해야 할 게 많습니다. 그래서 그것들을 다 줘보자 했던 게 첫 시작이었습니다. ETF 테슬라 TSLL을 예측하기 위해서 테슬라의 주가, 테슬라의 다양한 지표들 최신 테슬라 뉴스, 그리고 3대 지수인 나스닥, 다우존스 S&P 500, 자동차 섹터의 가격 등 을 녹여보자 생각했습니다.
1. 시장 환경 분석
- 3대 지수(S&P 500, 다우존스, 나스닥) 현황
- 주요 시장 뉴스 (GoogleNews에서 최근 5개)
2. 기업 기본 정보
- 회사명, 섹터, 산업군
- 시가총액, 웹사이트
- 사업 개요
3. 주가 데이터
- 현재가, 시가, 고가, 저가
- 거래량
- 일간 변동률
4. 재무지표
- PE비율, EPS
- 배당수익률, 베타
- 수익성장률, 이익
5. 기술적 분석
- RSI (과매수/과매도 판단)
- MACD (상승/하락 신호)
- 볼린저 밴드 (가격 변동성)
- 이동평균선 (50일, 200일)
- 거래량 분석 (20일 평균 대비)
Google news와, yfinance 기반이다 보니 레이턴시가 좀 느리기 때문에 사용자가 종합적인 분석을 요청하는 경우 이 둘은 호출되게끔 하였습니다. 빠르게 기본 주가정보를 봐야 하는 경우는 야후파이낸스에서 단순가격호출로 레이턴시를 개선을 하였습니다. 그리고 유튜브 tool 이 약간의 key point였는데요. 이걸 멀티모달 스위퍼를 써서 해볼까도 생각했으나 가격문제도 있고, 레이턴시 문제도 있을 것 같아서 지금 언어모델의 강점인 Long context를 활용해 보자 란 생각이었습니다.
이미 랭체인에는 youtube tool의 기능이 있긴 했는데 이상하게 제가 커스텀으로 쓰려고 하니 에러가 나길래 다시 코드를 만들었습니다. 먼저 사용자 쿼리가 들어오면 그에 맞는 유튜브 검색을 하고 동영상 3개의 자막 스크립트 내용을 가져오게 됩니다. (내용이 없다면 다른 영상을 가져오도록 업데이트 예정)
예로 들어 평소에 저는 아침에 이 채널을 보면서 주식매매를 했었고, 아침 2시간 주식 관련 분석 소식을 요약해서 넣어준다면 오늘의 추천 종목을 바로 미리 받아보면 시간적으로 이득이겠다 생각을 했습니다. 그래서 제가 주식 투자 매매법 기반으로 tool을 만들게 되었습니다. React Agent의 장점은 사용자 요청 흐름에 따라 도구를 여러 개를 쓸 수도 한 개만 쓸 수 도 있다는 장점을 가지고 있습니다. 이점을 적극 활용하면 되겠다 생각을 하였습니다.
마지막 툴은 Multimodal로 아이디어 관점은 나도 나름 차트 분석쟁이다 생각한다면 차트를 보고 , 캔들 거래량 RSI 등 다양한 지표와 함께 매매를 한다 생각하고 ETF레버리지나 단타적인 관점에서는 충분히 활용될만한 context 일 수 있겠다 생각을 해서 만들었습니다.
사용자가 선택한 기준 일자를 기준으로 파이썬 차트를 만들어서 , 그에 기반해서 Claude 멀티모달 기반 예측을 진행하게 하였습니다.
3. Super Visior Agent 에이전트를 라우팅
두 개의 리엑트 에이전트를 만들고, 이걸 라우팅 해줄 슈퍼바이저 에이전트가 사용자가 쿼리가 들어오면 그에 맞게 다음 동작을 실행할 에이전트를 라우팅 하는 로직을 만들었습니다.
def create_supervisor_agent(memory=None):
"""슈퍼바이저 에이전트를 생성하는 메인 함수"""
logger.info("슈퍼바이저 에이전트 생성 시작")
# 메모리 저장소 설정
if memory is None:
try:
# 기본 메모리 저장소 사용
memory = MemorySaver()
logger.info("기본 메모리 저장소 초기화 완료")
except Exception as e:
logger.error(f"메모리 저장소 초기화 실패: {e}")
# 폴백: 인메모리 저장소
memory = MemorySaver()
# 워크플로우 체크포인터 설정
checkpointer = memory
# 하위 에이전트들 초기화
finance_agent = create_finance_agent(memory)
market_agent = create_market_agent(memory)
logger.info("하위 에이전트 초기화 완료")
# GPT-4 모델 초기화 (온도값 0.7로 설정하여 적당한 창의성 부여)
model = ChatOpenAI(model="gpt-4o-mini", temperature=0.7)
logger.info("LLM 모델 초기화 완료")
# 슈퍼바이저의 메인 프롬프트 설정
supervisor_prompt = ChatPromptTemplate.from_messages([
("system", """
당신은 친절하고 전문적인 AI 어시스턴트입니다.
입력을 정확히 분석하여 다음과 같이 라우팅하세요:
1. 주가/시장 관련 키워드:
- 주가, 차트, 시세, 전망, 분석 → MarketAgent
- 예: "삼성전자 주가", "코스피 전망", "주식 시장 분석", "금일 주가 예측"
2. 금융 서비스 관련 키워드:
- 계좌, 수수료, 매매, 인증, 위험 → FinanceAgent
- 예: "계좌 개설 방법", "매매 수수료", "금융 정보 확인", "계좌 인증 절차"
3. 기타 일반 대화:
- 인사, 감사, 일상 대화 → CHAT
- 예: "안녕하세요", "감사합니다", "오늘 날씨는 어떤가요?"
명확하지 않은 경우, 사용자에게 구체적인 의도를 물어보세요. 예를 들어, "어떤 정보를 찾으시나요?" 또는 "어떤 도움이 필요하세요?"와 같은 질문을 통해 사용자의 의도를 확인하세요.
"""),
MessagesPlaceholder(variable_name="chat_history"),
MessagesPlaceholder(variable_name="messages"),
("system", "다음 중 하나를 선택하세요: FinanceAgent, MarketAgent, CHAT")
])
결국은 에이전트도 말이 알아서 다 해주는 것 같지만 MSA처럼 잘게 조게서 체이닝 하는 형태라고 볼 수 있습니다. 그래서 먼저 3개의 흐름을 시스템 프롬프트로 정해주고, 그중 나오는 답변을 토대로 다음 액션을 진행하게끔 코드를 짜주면 됩니다.
def supervisor_node(state: SupervisorState) -> Dict:
"""사용자 입력을 분석하여 적절한 에이전트로 라우팅하는 슈퍼바이저 노드
Args:
state: 현재 대화 상태 정보
Returns:
Dict: 업데이트된 상태 정보와 다음 실행할 에이전트
"""
try:
# 채팅 기록을 메시지로 변환
chat_history_messages = []
for history in state["chat_history"]:
if history["role"] == "user":
chat_history_messages.append(HumanMessage(content=history["content"]))
elif history["role"] == "assistant":
chat_history_messages.append(SystemMessage(content=history["content"]))
# 라우팅 결정
route_chain = supervisor_prompt | model.with_structured_output(RouteResponse)
result = route_chain.invoke({
"messages": state["messages"],
"chat_history": chat_history_messages
})
logger.info(f"라우팅 결정: {result.next}")
# 일반 대화(CHAT)인 경우 HyperCLOVA X로 응답 생성
if result.next == "CHAT":
# HyperCLOVA X 모델 초기화
clova_model = ChatClovaX(
model="HCX-003",
temperature=0.1,
max_tokens=1000,
task_id="oi5ojnb8"
)
chat_prompt = ChatPromptTemplate.from_messages([
("system", "당신은 경제유투버 슈카입니다.당신의 말투로 답변하세요.유저의 질문에 대하여 정확하게 답변하세요."),
MessagesPlaceholder(variable_name="chat_history"),
MessagesPlaceholder(variable_name="messages")
])
# HyperCLOVA X로 응답 생성
response = clova_model.invoke(chat_prompt.format_messages(
messages=state["messages"],
chat_history=chat_history_messages
))
new_messages = list(state["messages"])
new_messages.append(response)
# 대화 기록 업데이트
chat_history = state["chat_history"]
if state["messages"]:
chat_history.append({
"role": "user",
"content": state["messages"][-1].content
})
chat_history.append({
"role": "assistant",
"content": response.content
})
return {
"messages": new_messages,
"chat_history": chat_history,
"next": "FINISH"
}
# 다른 에이전트로 라우팅
return {
"messages": state["messages"],
"chat_history": state["chat_history"],
"next": result.next
}
except Exception as e:
logger.error(f"슈퍼바이저 노드 에러: {str(e)}")
return {
"messages": [SystemMessage(content="죄송합니다. 일시적인 오류가 발생했습니다.")],
"chat_history": state["chat_history"],
스트럭쳐 아웃풋을 저도 다른 데서 많이 사용했었는데, 예로 들어 카테고리를 정하는 프롬프트를 짰지만 예상과다르게 일반 Chat 이렇게 나와야 한다면 일반 chat입니다, 자연어가 더 붙어서 나오는 경우를 명확하게 구조화된 답변으로 출력시켜 주는 방법이다. 그래서 2개의 에이전트 값과 Chat 값을 라우팅 해주게 된다. 일반 채팅이라면 슈카파인튜닝된 하이퍼크로버기반의 챗봇으로 사용자쿼리에 대해 답변을 하게 되고 그다음은 Finish로 가게 된다. 이 과정에서 langchain Command라는 기능을 적용하려 했지만, 현재 포맷과 일치하지 않는지 오류가 계속 뜨길래 이 부분도 고도화 업데이트 예정이다. 그래서 접리턴값을 잘 지정한다면 다양한 기능을 쓸 수 있다.
이전에 만들어둔 모델을 활용하려고 했다. 이번에 AWS 크레디트를 받으면서 aws - nova 파인튜닝도 해보았는데, 높은 과금료로 적용은 해보지 못했다. 여기서 팁은 nova로 파인튜닝을 해보고 싶다면 노바 독스를 꼭 봐야 한다. 계속삽질을 했었는데 aws bedrock 기준으로 파인튜닝 데이터셋을 만들어서 계속 에러가 떴었다. 아래와 같이 스키마 지정을 반드시 해주어야 한다.
{
"schemaVersion": "bedrock-conversation-2024",
"system": [
{
"text": "당신은 경제 유튜버 슈카입니다. 사용자 답변에 성의껏 당신의 말투로 답변하세요."
}
],
"messages": [
{
"role": "user",
"content": [
{
"text": "한국의 스타크래프트 브루드워 게임 대회의 역대 우승자를 알려줘"
}
]
},
{
"role": "assistant",
"content": [
{
"text": "한국의 스타크래프트 브루드워 게임 대회의 역대 우승자를 알려줄게! 역시 형들이야~ 뿌우- 우어어~ 시간이 언제 이렇게 됐어? 다들 아시겠지만, 박상현 선수가 정말 대단했어! 1999년 12월부터 2004년 8월까지 온게임넷 컵에서 박상현 선수가 우승을 휩쓸었지! 1위가 어딜까! 자 1위!! 박상현 선수, 프로토스! 형들 진~짜 대단하다~ 이 말씀이야. 여러분 다 아시죠? 너와 내가~ 스타크래프트 전성시대를 함께 보냈잖아! 후루룩짭짭 (머리를 긁으며) 근데 이걸 왜 할까? 왜 할까 여러분? 그래설라므네~ 게임 역사에 남을 전설적인 순간들이지! 야! 잠깐만! 믿어 의심치 않지만, 박상현 선수의 기록은 정말 대단해! 이거 나만 몰랐어? 다른 선수들도 많이 있었는데, 그 중에서도 박상현 선수의 우승 횟수는 정말 놀라워! 이 말이야."
}
]
}
]
}
aws 크레디트가 어차피 낭랑했기 때문에 합성데이터를 노바로 만들었다. 단순 대화내용이 아닌 코드, 요약 분석 등 다양한 고품질 한국어데이터셋을 기반으로 rewrite 해서 파인튜닝을 진행하였고, 기존의 데이터와 함께 더해서 하이퍼크로버 X를 파인튜닝을 하였다.
약 400만 토큰이 학습 비용에 쓰였고, 확실히 시스템 프롬프팅 없이도 슈카말투가 많이 자연스러워졌다 역시 데이터가 중요하다고 다시 한번 느꼈고 , Loss 가 다 안 떨어졌길래 파라미터를 바꾸어서 학습을 해봤지만 아쉽게 성능개선이 어려웠다. 오히려 로스가 올라갔는데 이 부분은 다시 고려해봐야 할 듯하다.
시스템 프롬프트에 조금 더 명확한 Role을 부여하고 시스템 프롬프트 도 넣어서 다음엔 파인튜닝을 해봐야 하는데 크레디트가 거의 다 떨어져서 해볼 수 있을지는 모르겠다. 파인튜닝하는데 9만원가량이 들었다 네이버 하이퍼클로바의 장점은 aws처럼 높은 과금이 부가되지는 않는다. 학습한 모델은 그만큼 토큰 비용에 따른 차감이 되지만 계속 쓸 수 있다. aws 같은 경우는 만들어두고 사용하면 시간에 따라 비용이 과금이 되는데 이건 대기업이나 대규모 프로덕트에서 적용할게 아니라면 한달에 만불을 낼 수 있을까 과연.. 이란 생각을 했다. 그래도 1시간은 써볼걸 그랬나 생각은 했지만 일반 채팅이란 특수성에선 네이버 하이퍼크로버가 적합하다고 생각을 했다. 추후 업데이트 계획은 데이터를 더추가해서 학습을 해보고 런닝레이트를 조절을 더해봐야겠다. 남은 크레딧이 아쉬워서 2번정도는 더 할 수 있지않을까 생각한다. 또 하이퍼클로바가 이젠 LangChain에서 공식지원하기 때문에 더욱 쓰기가 편해졌다. 앱심사만 통과하면 진짜 나만의 페르소나 학습된 챗봇을 운용할 수 있는 접근성이 더욱 편해진 셈이다.
4. Memory를 통한 Chat history 관리와 연계적용
이전 포스트에서 human in the loop을 스터디한 내용을 게시했었는데 이 내용을 기반으로, Postgres SQL 기반으로 랭체인에서 memory savor를 활용해서 챗 히스토리를 관리하였고, 이 걸기반으로 휴먼인 더 루프에 적용하려고 했습니다.
class PostgresConnectionManager:
def __init__(self):
self.pool = None
async def get_pool(self):
if self.pool is None:
self.pool = AsyncConnectionPool(
conninfo=f"postgres://{os.getenv('PSQL_USERNAME')}:{os.getenv('PSQL_PASSWORD')}"
f"@{os.getenv('PSQL_HOST')}:{os.getenv('PSQL_PORT')}/{os.getenv('PSQL_DATABASE')}"
f"?sslmode={os.getenv('PSQL_SSLMODE')}",
max_size=20,
kwargs={
"autocommit": True,
"prepare_threshold": 0,
"row_factory": dict_row,
}
)
위와 같은 클래스를 통해서 효율적인 DB 관리를 위해 풀형태로 구성을 해서 비동기 커넥션풀을 구성했고, 자동으로 데이터가 잘 적재될 수 있게 됩니다.
이런 식으로 에이전트 관련 로깅내용과 답변 내용부터 모든 로그가 잘 적재가 됩니다. 저는 여기서 체크포인트 테이블에서 세션 id 맵핑을 통해서 대화내용을 추출해서 매번 새로운 채팅기반의 경제리포트 분석 내용을 적용하려고 하였습니다. 아이디어는 다음과 같습니다.
사용자가 먼저 챗봇에서 대화를 나눕니다. 여러 인사이트를 나누고, 다양한 내용을 하게 됩니다. 휴먼인 더 루프 기반의 보고서 작성을 누르게 되면 DB에서 챗히스토리기반의 내용을 summary 하여 topic으로 넣어주고 UI 에선 사용자가 원하는 사용자 취향 및 기반의 분석가와 리포트를 생성해서 분석가와 리포트들이 설정해 둔 휴먼피드백을 반영하여 대화를 나누고 그에 맞는 리포트를 출력하고, MD 파일로 다운로드가 가능하게끔 합니다.
시연 당시에는 업데이트를 하지 못했는데 추후 고도화 예정입니다. 가짜연 발표를 하면서 질문도 받았지만 타깃자체는 어떻게 보면 나만의 주식 일지 주식 매매일지를 기록하는 용도로 쓰이게 됩니다.
5. 기타 기능
이미 대외 프로젝트를 수행하면서 현업 리얼데이터에선 Batch 작업이 많이 이루어진다는 사실을 알게 되고 개발을 하게 되었습니다. 여기서도 컨테이너로 배치를 돌려놔야겠다 생각을 했습니다. 야후파이낸스의 레이턴시를 고려해서 바로 프런트를 찌르는 게 아니고 디비에 일정 시간 텀을 두고 1분 간격으로 지수데이터를 가져와서 저장 후 찌른다면 더 안정된 서비스를 개발이 가능하다고 판단하였고, 뉴스데이터도 일마다 업데이트가 되게끔 배치기능을 업데이트하였습니다. 크론잡이라고 하지만 FastAPI 에선 APScheduler를 사용했습니다.
from fastapi import FastAPI
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.cron import CronTrigger
app = FastAPI()
scheduler = AsyncIOScheduler()
# 서버 시작시 스케줄러도 시작
@app.on_event("startup")
async def start_scheduler():
scheduler.start()
# 서버 종료시 스케줄러도 종료
@app.on_event("shutdown")
async def shutdown_scheduler():
scheduler.shutdown()
프런트는 리액트로 구성을 하였고, 백엔드는 FastAPI , DB는 Postgres로 구성을 하였습니다.
구현 예시
전체적인 UI/UX
챗봇 - AI Agent
시장 뉴스 - symbol 별 뉴스 (코스피기준)
내 투자 항목 구성
더미 데이터를 활용하여 일단 주식 매수 내용을 표시해두었습니다 추후 증권사 API 연동하여 반영할 예정입니다.
채팅에서 멀티모달 기능을 활용하는 경우 위에서 말한 대로 차트기반의 멀티모달용 차트가 저장이 되는데, 그 걸기반으로 사용자도 볼 수 있게끔 처리하였습니다.
휴먼 인 더 루프 피드백을 반영할 수 있게끔 구성하였습니다. 위 내용을 반영해서 입력하면 그에 따라 기반의 리포트가 생성이 되고 MD 파일로 저장이 되어 다운로드할 수 있습니다.
주가지수/ 빅테크 / 해외 선물 지표가 표시되고 빅테크는 M7 데이터가 표시되고, 통합검색 같은 경우는 구현 예시지만 나중에 사용자 채팅 기반, 클릭기반 count를 종목별로 매겨서 실시간 인기 주가를 표시하는 로직을 엘라스틱서치로 구현해 볼 예정입니다.
우선 고도화를 해야 하는 부분이 엄청 많지만 차근차근 업데이트해볼 예정입니다.
고도화 부분
이렇게 저는 프로젝트를 구현하였고, stockelper에서 따로 떨어진 서비스인 감은 있지만 나중에 위 기능들을 잘 혼합한다면 좋은 프로덕트가 나오지 않을까 생각이 듭니다. 추가적으로 휴먼이 더 루프에서의 퀄리티 좋은 사용자기반 보고서도 고도화를 해야 하고, 서비스 단위에서의 좋은 개발을 많이 해봐야 할 것 같습니다.
고도화 point
1. Memory 와 Caching 기능을 강화 (Redis 도입 생각)
- > 프롬프트 캐싱을 통해서 토큰 비용 절감 및 빠른 응답속도 개선
2. 매수 Agent 를 도입
- > 채팅에서 매수 를 시키면 직접 API 연결해서 구매를 할 수 있는 로직으로 발전 시켜볼 예정입니다.
3. ML 스페이스를 도입
- > 전통 ML 이 강력한 통계 / 추론 부분에서의 ML 스페이스 구성과 데이터를 효과적인 적재를 위한 Mind Mart(store) 를 만들어서 데이터 파이프라인을 구축하는것을 목표로 합니다.
이번 스터디를 통해서 나만의 프로덕트를 a to z 개발해보는 좋은 기회였습니다. 내 생각을 아이디어로 구현한다는 것이 너무 재밌었던 것 같고 그에 따라 결과가 잘 나왔던 것 같습니다.
이번 기잔심 프로젝트를 통해서 저 또한 많이 배우고 성장한 것 같아서 좋았고 좋은 팀원들을 만나서 이만큼 개발을 할 수 있지 않았나 싶습니다. 다음 가짜연구소를 할지 안 할지 모르겠지만 올해는 저도 성장 수집가라는 좋은 말처럼 성장을 수집하고 나눠줄 수 있는 사람이 되고 싶습니다.
'NLP' 카테고리의 다른 글
[Agent Study]RAG 성능을 올리기 위한 Context Retrieval 을 적용 (0) | 2025.01.12 |
---|---|
[Agent Study] LangGraph Human in the loop (경제 리포트 작성하기) (0) | 2024.12.29 |
[Agent Study] 에이전트를 활용하여 멀티 DB 연결 구축하기 (1) | 2024.12.20 |
[Agent Study] Multi-Agent , Multi-tool 만들기 - (1) : Custom Tool 만들기 (0) | 2024.12.18 |
AWS Nova를 SuperNova 로 전환하기 (feat. LangGraph 멀티툴 에이전트) (0) | 2024.12.06 |