전체 글 569

Pydantic Serialize시 오류 : Object of type <Enum> is not JSON serializable 해결방법

공식문서 참조: https://docs.pydantic.dev/latest/api/config/#pydantic.config.ConfigDict.use_enum_valuesEnum을 Enum 값으로 사용할지 여부를 정의할 수 있는 use_enum_values라는 Model Configuration을 True로 설정할 경우에 Serialize 가능해진다.class SomeEnum(Enum): FOO = 'foo' BAR = 'bar' BAZ = 'baz'class SomeModelCls(BaseModel): e: SomeEnumm = SomeModelCls(e=SomeEnum.FOO)m.model_dump() # TypeError: Object of type SomeEnum is no..

반쪽짜리 Contextual Retrieval로 RAG 강화 해보기

2024년 9월 20일, Anthropic은 Contextual Retrieval이라는 개념을 제시했다. Contextual Retrieval은 기존의 RAG의 검색 성공률을 향상시키기 위한 방법으로, Contextual Embeddings와 Contextual BM25의 두가지 하위 기술을 사용한다. Anthropic에 따르면 이 방법을 이용할 경우 실패한 검색 수를 49%까지 줄일 수 있으며, ReRanking과 함께 사용하면 67%까지 줄일 수 있다고한다. 최근에는 RAG에 이어 CAG(Cache-Augmented Generation)도 등장했다. CAG는 더 길어진 LLM의 Context Window를 충분히 활용하여, 검색 증강하려는 문서의 전체 내용이 Context Window에 들어갈 수 있..

[내방] 아지트 - 한식백반

급히 먹느라 사진을 못찍었는데, 다음에 방문하면 사진을 업데이트 하도록 하겠다.내방역에서 조금만 올라가면 나오는 보드게임 카페같은 간판을 가진 곳인데, 겉보기에는 평범해보이지만 비범한 요리가 나온다! 고등어 구이, 차돌 청국장, 보쌈, 닭도리탕 같은 메뉴들을 팔고있고, 저녁에는 더 다양하다. 맛있는 간장게장을 먹어본적이 없었는데 여기서 처음 먹어봤다. 시키는 것마다 왠만한 집보다 맛있어서 메뉴를 하나씩 시켜보는 재미가있었다. 그냥 주방장 선생님 능력치가 다른듯...미안하지만 엄마밥이 그리워지지않는 맛이었다. 엄마도 인정할것이다. 내방역 주변에 맛집이랄게 그닥 없는데 여긴 맛있다.

화등초상

이라는 드라마를 요즘 재미있게 보고있다.80년대의 대만을 배경으로 하고있는데 배우들의 연기도 훌륭하고, 대사도 하나하나 생각할 거리를 던져준다.빠르게 지나가는 대사들 중에서 곱씹고 싶은 것들을 몇 가지 주웠다. 사실 드라마를 보면 많은 대사를 이해못해서...대사에 있는 내용과 내가 든 생각이 영 딴판일수도 있겠지만! ㅋㅋㅋ이 생각을 잊고싶지 않아서 적어둔다.# 차오 바에 앉아있는 유리에게 헨리가 다가가며유리: 난 혼자이기를 원해.사랑 같은 건 원하지 않아. 어떤 것 같아?다들 좋은 상대를 찾으려고 해.여자는 꼭 결혼해서 아이를 낳아야 한다고 생각해.안 그러면 잘못된 거라고 하지.헨리: 거짓말!유리: 무슨 뜻이야?헨리: 이 사람들을 봐 (차오의 손님들) 다들 외로워서 여기 오는 거잖아?넌 사랑을 원치 않는..

사내 AI Agent 구축기

이건 정말 Agent를 만들어야하는데...사원들의 온보딩을 위해 회사업무에 필요한 질문에 대한 답변들을 제공해주는 챗봇을 개발하게 되었다. 노션도, 슬랙도 통합해야하고 사용자의 다양한 질문에 대답할 수 있어야했다. 꼼짝없이 Agent를 만들어야할 순간이 왔다. 이때까지도 번역을 위한 작은 RAG앱만 만들어본터라, Agent를 개발하는 것은 좀 막막했다. 심지어 시작은 신입 “개발자”들을 위한 챗봇이었다. 기본적인 회사 문서들 외에 코드베이스도 통합해야했다. 코드베이스 통합을 위해서 이리저리 찾아보다가 Codegen의 CodeAgent를 사용해봤다. CodeAgent를 사용하면서 어떻게 Agent를 개발해야하는지에 대한 많은 힌트를 얻었다. 내가 개발한 Agent도 CodeAgent와 크게 다르지않다. 그..

[01/28] <어둠속의유산> 6일차 : 리팩토링

어둠속의유산을 배포하고, 원래 하고있던 8시간의 Croptails 튜토리얼을 끝냈다.어둠속의유산을 개발하면서 우려스러웠던건 테스트였다. 지금은 플레이타임 30초짜리 게임이라서 테스트가 금방금방 끝났지만, 게임의 규모가 커지면 복잡하게 얽혀있는 상태들을 재현하고 관리하기가 어려울 것 같았다. Croptails 튜토리얼 선생님은 항상 Test Scene을 만드는 것을 강조하셨는데,어둠속의 유산은 각 오브젝트마다 함수가 붙어있고, 정확히 그 오브젝트가 Scene에 있어야만 작동하도록 개발했기때문에 TestScene이 올바로 작동하려면 해당 레벨에 있는 모든 Object가 Scene에 붙어있어야만 했다. 그래서 이번에는 그 관계를 뒤집었다. GameDialogueManager를 만들어서 게임 진행과 관계되는 ..

게임/게임개발 2025.01.28

Cannot call method 'get_first_node_in_group' on a null value 해결방법

씬을 오가다보면 Cannot call method 'get_first_node_in_group' on a null value라며 문제가 생기는 경우가 있다. 대표적인 예시코드는 다음과 같다.@onready var player: Player = get_tree().get_first_node_in_group("player") 이는 첫번째 프레임이 처리되기도 전에 group에 있는 노드를 가져오려고 해서 생기는 이슈로, 프레임이 처리되기까지 기다린 후 트리가 셋업된 후에 노드를 가져오면 해결된다.var player: Playerfunc _ready() -> void: await get_tree().process_frame player = get_tree().get_first_node_in_group("play..