LLM 번역 워크플로우 Context-Aware Translation 만들어봄. 과장 좀 보태면 번역가 대체 가능 ㅇㅇ
선 3줄요약
1. GEMINI CLI 사용. 클코드 돈없어서 안씀. 사소넷보단 잼프로가 나을거라 생각해서 CLI로 고정.2. 잼프로는 코드 잘짬. 설계도 나보다 잘함. 근데 내가 프로젝트를 전부 이해하고 있어야됨. pm 역할정돈 해줘야됨. -왠만한건 알아서 잘함. 근데 내가 따로 명령 자주 했던건 1. 객체화, 모듈화 좀 해라. 2. 버그 고치지 말고 ~방식으로 재설계 하자.
얘가 버그 원인을 감을 못잡을때가 종종 있는데 그때 걍 알아서 고쳐라 하고 인풋인풋 넣으면 망하는거임. 버그를 '고치지' 말고 문제가 먼지 먼저 알아보라 명령하는게 효율적. 물론 너도 이해하고는 있어야됨.
3. 성능은 gemini 2.5 flash-lite 기준 '충분히 읽을만 하다' (책 좋아하시는 어머니 평가). 여러가지 형식의 작품들 넣으면서 프롬 계속 개선하는중(컨텍스트 엔지니어링)
ㅡㅡㅡㅡㅡAI 요약 생성 ㅡㅡㅡㅡ
### ? 소설 번역, LLM한테 그냥 시키면 안 되는 이유
1. 일관성 문제: AI는 자기가 방금 전에 뭘 번역했는지 까먹음. 그래서 등장인물 'Holden'을 첨엔 '홀든'이라 했다가, 나중엔 '홀덴'이라고 하는 등 이름이나 용어가 오락가락함.
(이건 내가 다시 설명함. 위에 예시는 마이너 작품, 번역하기 애매한 고유명사에서 두드러짐. 'Arquebusier' 는 뭐라 읽어야되냐? 사실 뭐라 읽어도 상관 없는데 일관성이 있어야 하는게 핵심이겠지?)
그래서 "AI한테 기억을 만들어주고, 효율적으로 정보를 필터링하는 능력을 주면 어떨까?" 라는 생각으로 이 워크플로우를 만들어 봤음.
✨ 그래서 이런 기능들을 한번 구현해 봄
1. AI한테 '기억'을 만들어주기 (동적 가이드)
LLM의 단기 기억상실을 보완하려고, 번역하면서 얻는 정보를 계속 쌓아서 다음 번역에 써먹는 '동적 가이드'를 만들었음.
- 용어집 관리자 (`GlossaryManager`): 번역할 문단에서 "여기 나오는 고유명사(인명, 지명) 싹 다 뽑아봐" 라고 Gemini한테 시켜서 용어집을 자동으로 만듦. 이 용어집은 계속 누적되면서 번역 일관성을 잡아주는 역할을 함.
- 캐릭터 스타일 관리자 (`CharacterStyleManager`): 대화가 나오면 A->B의 존댓말, 반말을 정하고 그걸 컨텍 화
2. 소설 전체의 '분위기' 파악하기
번역 시작 전에, 소설 첫 부분을 AI한테 먼저 보여주고 "이 소설 문체, 톤, 시점 같은 핵심 스타일을 분석해줘" 라고 시킴. 여기서 나온 결과는 모든 프롬프트에 기본값으로 들어가서, 번역이 산으로 가지 않게 잡아주는 기준점이 됨.
자세한건 > 영상에서 설명함 ㅇㅇ
어짜피 워크플로우 자체는 바이브코딩으로 금방 구현함. 근데 '질'이 중요하겠지? 장인정신으로 컨텍 구조 깎는중. 지금까지 코딩:프롬프팅 투자 시간 비율이 15:85 정도 됨.
+ 앞으로는...
업데이트 예시 (방금 만든 거)
매번 모든 용어집을 다 주는 게 비효율적이라, "지금 당장 필요한 정보만 주자" 는 컨셉으로 개선.- 어떻게 했냐면 `translation_engine.py`에서, 번역할 문단(`segment_content`)이랑 지금까지 쌓인 전체 용어집(`job.glossary`)을 비교함. 그리고 파이썬 정규식(`re.search`)으로 현재 문단에 진짜로 있는 단어만 필터링해서 `contextual_glossary`를 따로 만듦.- 결과: 이렇게 하니까 프롬프트도 짧아지고 토큰도 아낄 수 있었음. 능지도 올라가겠지.
궁극적인 목표는 이걸 상용화 수준의 웹 서비스로 키워보는 거임. 누구나 파일만 올리면 쉽게 쓸 수 있고, 설정도 자기 입맛대로 바꾸면서 쓸 수 있게 만들고 싶음. 자세한건 영상에서 설명함.
ㅡㅡㅡㅡㅡ
써보고 싶은 사람 있으면 웹으로 서비스하기 전에 누구나 써볼 수 있도록 베타테스트 프로그램은 만들어서 올릴 생각은 있음. 어짜피 금방 만들어.
프로젝트 같이 개발할 바이브코딩 고수 or etc 있으면 연락좀.. 사실 이게 목적임.
꿀팁 :
한국어로 바이브코딩할거면 걍 제미니 쓰자. 제미니가 한국어 토큰 가성비, 다국어 성능 월등함. 아님말고 ㅋ
gemini cli 쓰다보면 2.5 pro에서 flash로 자꾸 바뀔탠데 그냥 쓰지 말고 api 연결해서 pro로 고정해서 써라. 어짜피 구글 깡계파면 크레딧 무한임. 6~7월에 크레딧 천불 넘게 썼는데 코딩하기전에 구글 쪽으로 세번 절하고 하는중.
번역 예시. 방금 뽑은거임. 영상에 있는거랑 비교하면서 보셈.
개추주면 글 더 올려봄.
상황마다 같은 동사지만 다른 의미로 쓰이는 말들이 굉장히 많은데, 명사도 그렇고... 이런 것들은 혹시 어떻게 예외처리함? (ex. 구멍안에 불!)
고유명사만 뽑게 했음. 영상보면 뽑아지는 명사 나와. 완벽하진 않은데, 동음이의어같은 문제는 없다고 봐도 될듯?
용어집은 따로 관리하면서 계속 참조하나보네 굿
내 생각은.. 고유명사 용어집관리도 굿이지만 , 거기에 인물마다 기본 말투나 사고방식이있잖아? 그런것도 데이터베이스화해서 참조화시키면 더 개연성있게 보일거같다
@fewweekslater 초기 프롬프트엔 놀랍게도 다 들어가 있었는데, flash lite 기준 번역에 실질적인 도움이 되는가?가 애매했고, 오히려 컨텍으로 명시하면 LLM이 자체판단을 덜 하는 경향이 있기 때문에 일관성은 향상되지만 상황에 따른 유동성은 손해를 볼 수 있는 위험이 있었음. 일관성은 유동성보다 중요하지만, 극적인 상황에서 상황에 맞지 않는 말투를 사용하면 몰입도에 큰 악영향을 주기 때문에 컨텍을 깎는 과정에서 빠졌었음.
@fewweekslater 물론 라노벨이나 특정 텍스트는 너가 말한게 굉장히 중요할 것이고 위에 말한 문제는 모델의 능지가 향상되면(2.5 pro) 해결되는 문제기 때문에 나중에 커스터마이징 가능하도록 추가할 예정임. 대신 현재 기본값은 빠져있는 상태고.
@ㅇㅇ 지금은 전략적 후퇴를하고 다른 방법을 찾은거네 굿
함 써보고 싶은데 배포 가능해?
조만간 올려봄
와 대회 참전 재밌는거 많이올라오네 ㅋㅋ 신기하다
이거 일부분은 나도 상상하던건데 실제로 구현했네
LLM에게 CAT을 줬구나 이거 없어서 진짜 픽션 번역으로는 쥐약이라 생각했었는데 굿
근데 말투 같은 부분은 좀.. 종결어미 반복이 한 문단에서 너무 잦아서 어쨌든 사람이 마지막에 건드려줘야 할 거 같고 예시만 보기에는 좀 게으른 번역을 하는 듯 도착어 화자들에게 최적화된 번역이라기보다는 그냥 문장 겉뜻만 충실히 옮기는 정도 같은
그리고 만화 번역 같은 부분에서는 말풍선 속에 원문 레이아웃에 맞춰서 배치할 수 있도록 적합한 길이의 문장만 뽑는 기능도 필요하다고 생각하는데 아직 이건 어쩔 수 없나
아니 워크플로우 약자도 CAT이네 ㅋㅋ
서비스화 기대하노
캬
cli 로는 코딩 어케하는 거야? cli 에서 시작하고 해달라 하는 거?
ㅇㅇ 버그좀 많긴 한데 감수하고 쓸만함
캬
메모리 기능이 중요하긴 하구나 - dc App
이미 ai번역툴 거의 다 용어집 문체 이런 거 반영하고 있음
제미니 번역 돌리면 가끔 번역 안되는 문장들 있는데 이건 어캐 처리했음?
근데 잼미니2.5pro 쓸때 "앞뒤문맥 전체내용을파악해서 자연스러운 한국어로 번역해줘"라고 한줄 프롬프트떤지면 저기능 다포함되게 번역해주는데???
"전체 내용과 앞뒤 문맥을 유기적으로 파악하여, 대화의 흐름에 맞는 자연스러운 문체와 어조를 유지하며 한국인이 보기에 가장 자연스럽게 번역해라." ais에서 이프롬 한줄 입력하고 번역시키면 니가짠 코드에 포함된 내용보다 더자연스럽게 번역함 ㅋㅋㅋㅋㅋㅋㅋ시간 존나 날렸누 ㅋㅋㅋㅋ이미다되는걸
api 어케연결하는거임? - dc App
약간 걱정되는건 일반 텍스트번역은 지금도 잘됨 대부분의 문제는 pdf번역 epub번역 같은거임 레이아웃 유지하면서 원하는것만 잘 반역할수 있느냐 이게 관건 딴지는 아니고 지금까지 네가한건 그냥 대부분의 번역기 개발자들이 모두 이미 했던거임 이제부터가 진짜고
개추받아라