이 사이트는 hugo 기반이지만, 글 제목을 항상 중국어로 사용했기 때문에 생성되는 기사 링크가 친절하지 않습니다. 쉽게 말해서, 공유할 때 보기 좋지 않고, 중국어 문자가 링크에서 %E4%BD%A0%E5%A5%BD 와 같은 형태로 변환되기 때문입니다. 슬러그를 설정하여 해결할 수 있지만, 매번 수동으로 설정해야 해서 번거롭습니다.
그래서 오늘 클로드4를 활용하여 중국어 제목을 영어 슬러그로 자동 변환하고, 기사에 하이퍼링크를 추가하는 번역 도우미를 개발해 보았습니다. 이렇게 하면 수동 설정의 번거로움을 피할 수 있습니다.
클로드4는 정말 좋네요, 문맥 이해 능력과 복잡한 작업 처리 효율이 크게 향상되었습니다
프로젝트 주소
국내 프로젝트 주소: https://cnb.cool/ttf248/hugo-content-suite 해외 프로젝트 주소: https://github.com/ttf248/hugo-content-suite
코드 구현
먼저 구현 아이디어부터 설명드리자면, 모든 문서를 스캔하여 태그 정보와 문서 제목을 추출한 다음, 로컬 모델(예: gemma-3-12b-it)을 호출하여 번역합니다
실제 개발에서 Claude4
는 이전 세대 대규모 언어 모델과 비교하여 몇 가지 뚜렷한 특징을 보여줍니다. 다양한 기능 요구 사항으로 인해 Claude4
는 자동 인터랙티브 메뉴를 설계하고, 모든 사용 시나리오를 포괄적으로 고려했습니다. 예를 들어, 태그 처리 측면에서 Claude4
는 태그의 통계 및 분석은 물론 분류 통계까지 지원하며, 심지어 비표시된 문서도 감지할 수 있습니다. 또한 미리 보기와 태그 페이지 생성 기능도 제공합니다.
로컬 모델 연동, 번역 캐시 추가, 대규모 코드 리팩토링 등 무엇이든 한 번에 처리하며 거의 문제 없이 완료됩니다. 프로젝트 규모는 크지 않지만 다양한 기능들을 포함하고 있었는데, 기존의 거대 언어 모델들이 개발 과정에서 앞뒤 맥락을 잊는 경우가 많았지만 이번 Claude4
는 거의 맥락을 잊지 않았습니다.
간단히 말해서, 지능이 향상되었고, 이후 개발 작업은 주력 모델로 일상 코딩에 활용하기 위해 Claude4
로 전환할 준비를 하고 있습니다
번역 캐시
이 점은 단독으로 볼 때, 거대 모델 호출 횟수를 줄이는 것 외에도 실제 로컬에서 12B 모델을 실행하면 효율이 괜찮고 업무를 방해하지 않지만, 매번 거대 모델을 호출해야 하면 조금 느려지는 경향이 있습니다. 또한, 기사의 연결을 고정하기 위해 전체 업데이트 작업을 수행할 때 기사 제목이 길면 가끔씩 두 번 번역된 결과가 달라져서 기사 링크가 변경되는 상황이 발생하는데, 이 부분은 상당히 난감합니다.
기능 개선
전체 프로젝트를 클로드4
에 맡겨 분석 및 최적화 공간을 확인한 결과, 다음과 같은 제안을 받았습니다
配置外置化 - 提高可维护性和灵活性
结构化日志 - 便于问题排查和监控
性能监控 - 了解系统运行状况
用户体验 - 进度条等视觉反馈
错误处理 - 更完善的异常处理机制
代码组织 - 更清晰的模块划分
코드 검토 결과, 문제 없습니다. 예를 들어 설정 파일의 경우, 기존 코드 설정을 기본 설정으로 변환하고, 설정 파일을 읽을 때 해당 파일이 없으면 자동으로 생성하여 사용자 실수로 인한 오류를 방지합니다.
요구 사항: 본문 번역 시 현재 번역 효율을 동적으로 계산하고, 남은 시간을 예측하여 콘솔에 관련 정보를 출력합니다. 현재 획득한 문서의 문자 수, 각 행 번역 시 현재 번역된 문자 수, 시간, 100자당 예상 번역 시간 등을 계산하며, 문서의 남은 번역 예상 시간도 함께 계산합니다.
코드는 마무리했는데, 결과가 만족스럽지 않아 AI에게 새로운 디자인 방안을 제시하도록 했어:
다양한 효율성 계산 방식 제공: 실시간 효율, 평균 효율, 슬라이딩 윈도우 효율 표시 방식 개선: 진행률 표시줄, 단계별 통계, 동적 새로 고침 더 유용한 지표 추가: API 호출 횟수, 성공률 등
코드 완성 후 새로운 깜짝 놀랄 일이 발견되었는데, 번역 효율 통계 정보가 실시간으로 화면을 채우지만 맹목적으로 아래로 스크롤되지는 않는다
번역 전문을 영어로 번역 중입니다 (총 7163자) 53행이 번역 필요로 감지됨 [1/53] Stage1/6 [░░░░░░░░░░░░░░░░░░░░░░░░░] 1.9% 번역 354자.. ✅ 완료 (3.1초) | API 호출 #1 ✅ 완료 (1.5초) | API 호출 #2 완료 (0.9초) | API 호출 #3 완료 (0.2초) | API 호출 #4 완료 (1.0초) | API 호출 #5 완료 (1.0초) | API 호출 #6 완료 (0.2초) | API 호출 #7 📊 진행률: 행 13.2% (7/53) | 문자 12.9% (925/7163) 114.6자/초 📊 ⚡ 효율성: 실시간 76.4 | 평균 117.9 | 최근 109.0 | 단계별 113.6 자/초 📊 성공률: 100.0% (7/7) | 남은 항목: 46행 7초] 9.4% 번역 110자.. 예상 남은 시간: 55초 | 완료 예상: 00:10:19 8초] 11.3% 번역 114자… 처리 속도: 3211.3 행/분 | 총 소요 시간: 8초] 13.2% 번역 16 문자.. [8/53] Stage1/6 [███░░░░░░░░░░░░░░░░░░░░░░] 15.1% 번역 166자..
이전에는 제어 프로그램 코드를 많이 작성해보지 않아서 어떻게 구현되었는지 궁금해서 코드를 살펴봤다
// 清屏并重新显示 (动态刷新效果)
if translationCount > 1 {
fmt.Print("\033[6A\033[K") // 上移6行并清除
}
성능 통계 메뉴
새로 추가된 성능 통계 메뉴는 제가 직접 디자인했는데, 이렇게 완벽하게 만들 수 있을 줄은 몰랐습니다
성능 통계: 번역 횟수: 360 ⚡ 캐시 적중률: 1.4% (5/365) 평균 번역 시간: 315.927234ms 파일 작업: 73 오류 횟수: 0
진행률 표시
새로운 진행률 표시, 상세한 진행 상황, 경과 시간, 남은 예상 시간
기능 선택 (0-13): 10 번역 목표를 수집 중입니다… 📄 캐시 파일이 로드되었습니다. 번역 기록 0개 포함
번역 캐시 통계: 🏷️ 총 태그 수: 229개 📝 총 기사 수: 131건 ✅ 캐시됨: 0개 🔄 번역 필요: 360개
전체 번역 캐시 생성 확인하시겠습니까? (y/n): y 🚀 전체 번역 캐시 생성 중… 📄 캐시 파일이 로드되었습니다. 번역 기록 0개 포함 검색 중인 번역을 캐시에서 확인 중… 새로운 태그 360개 번역 필요 [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 5/360 (1.4%) - 소요시간: 3초 - 예상 남은 시간: 3분 8초💾 캐시 파일 저장, 번역 기록 5개 포함 [█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 10/360 (2.8%) - 소요시간: 6초 - 예상 남은 시간: 3분 28초💾 캐시 파일 저장, 번역 기록 10개 포함 [██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 15/360 (4.2%) - 소요시간: 9초 - 예상 남은 시간: 3분 30초💾 캐시 파일 저장 완료, 번역 기록 15개 포함 [██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 20/360 (5.6%) - 소요시간: 13초 - 예상 남은 시간: 3분 36초💾 캐시 파일 저장 완료, 번역 기록 20개 포함 [███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 25/360 (6.9%) - 소요시간: 16초 - 예상 남은 시간: 3분 33초💾 캐시 파일 저장 완료, 번역 기록 25개 포함 [████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 30/360 (8.3%) - 소요시간: 19초 - 예상 남은 시간: 3분 30초💾 캐시 파일 저장 완료, 번역 기록 30개 포함 [████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 35/360 (9.7%) - 용량: 22s - 예상 남은 시간: 3분 25초💾 캐시 파일 저장 완료, 번역 기록 35개 포함
=== Hugo 博客管理工具 ===
🚀 核心功能
1. 一键处理全部 (完整博客处理流程)
📝 内容管理
2. 生成标签页面
3. 生成文章Slug
4. 翻译文章为多语言版本
💾 缓存管理
5. 查看缓存状态
6. 生成全量翻译缓存
7. 清空翻译缓存
0. 退出程序