Skip to content

A translation service API server utilizing FastAPI and Ollama as a Custom Server for XUnity.AutoTranslator. This project includes the ability to provide text translation using a large-scale language model (LLM), evaluate translation quality, and manage external translation dictionaries.

License

Notifications You must be signed in to change notification settings

mannago/CustomOllamaTranslatorServer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🌐 Ollama 기반 λ²ˆμ—­ μ„œλΉ„μŠ€ API

FastAPI와 Ollamaλ₯Ό ν™œμš©ν•œ λ²ˆμ—­ μ„œλΉ„μŠ€ API μ„œλ²„μž…λ‹ˆλ‹€. 이 ν”„λ‘œμ νŠΈλŠ” λŒ€κ·œλͺ¨ μ–Έμ–΄ λͺ¨λΈ(LLM)을 μ‚¬μš©ν•˜μ—¬ ν…μŠ€νŠΈ λ²ˆμ—­μ„ μ œκ³΅ν•˜κ³ , λ²ˆμ—­ ν’ˆμ§ˆμ„ ν‰κ°€ν•˜λ©°, μ™ΈλΆ€ λ²ˆμ—­ 사전을 κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯을 ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

✨ μ£Όμš” κΈ°λŠ₯

  • βœ… μ–Έμ–΄ κ°„ ν…μŠ€νŠΈ λ²ˆμ—­ (LLM이 μ²˜λ¦¬ν•  수 μžˆλŠ” μ–Έμ–΄)
  • βœ… REST API μΈν„°νŽ˜μ΄μŠ€ (FastAPI)
  • βœ… λ²ˆμ—­ ν’ˆμ§ˆ 평가 및 κ°œμ„  μ‹œμŠ€ν…œ (선택 사항)
  • βœ… μ™ΈλΆ€ JSON νŒŒμΌμ„ ν†΅ν•œ λ²ˆμ—­ 사전 관리
  • βœ… λ²ˆμ—­ μš”μ²­ 및 κ²°κ³Ό λ‘œκΉ…
  • βœ… 캐싱 μ‹œμŠ€ν…œμœΌλ‘œ 쀑볡 μš”μ²­ μ΅œμ ν™”

πŸ“‹ μš”κ΅¬μ‚¬ν•­

  • Python 3.12 이상 ꢌμž₯ (3.12둜 κ°œλ°œλ˜μ—ˆμŒ)
  • Ollama μ„€μΉ˜ 및 μ‹€ν–‰
  • Ollama 지원 LLM λͺ¨λΈ
  • Docker Desktop (Docker μ‚¬μš© μ‹œ)

🎯 μ£Ό μ‚¬μš©μ²˜

λ³Έ ν”„λ‘œμ νŠΈλŠ” XUnity.AutoTranslator의 Custom μ„œλ²„ μ—­ν•  μš©λ„λ‘œ μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

πŸš€ μ„€μΉ˜ 방법

Docker μ‚¬μš© (ꢌμž₯)

  1. μ €μž₯μ†Œ 클둠:

    git clone https://github.com/mannago/CustomOllamaTranslatorServer.git
    cd CustomOllamaTranslatorServer
  2. ν™˜κ²½ λ³€μˆ˜ μ„€μ •: .env.example νŒŒμΌμ„ λ³΅μ‚¬ν•˜μ—¬ .env νŒŒμΌμ„ μƒμ„±ν•˜κ³  λ‹€μŒ 값듀을 μ„€μ •ν•˜μ„Έμš”:

    OLLAMA_MODEL="huihui_ai/kanana-nano-abliterated"
    
  3. Docker Compose μ‹€ν–‰:

    docker compose up
  4. μ„œλ²„ λΉŒλ“œ 및 λͺ¨λΈ λ‹€μš΄λ‘œλ“œ λŒ€κΈ° (λͺ¨λΈ ꡬ성에 μ‹œκ°„μ΄ μ†Œμš”λ  수 μžˆμŠ΅λ‹ˆλ‹€)

직접 ꡬ동

  1. Ollama μ„€μΉ˜ 및 λͺ¨λΈ λ‹€μš΄λ‘œλ“œ:

    ollama pull huihui_ai/kanana-nano-abliterated
  2. μ €μž₯μ†Œ 클둠:

    git clone https://github.com/mannago/CustomOllamaTranslatorServer.git
    cd CustomOllamaTranslatorServer
  3. 가상 ν™˜κ²½ 생성 및 ν™œμ„±ν™”:

    python -m pip install virtualenv
    python -m virtualenv .venv
    
    # Linux/Mac
    source .venv/bin/activate
    
    # Windows
    .venv\Scripts\activate
  4. μ˜μ‘΄μ„± μ„€μΉ˜:

    pip install -r requirements.txt
  5. ν™˜κ²½ λ³€μˆ˜ μ„€μ •: .env.example νŒŒμΌμ„ λ³΅μ‚¬ν•˜μ—¬ .env νŒŒμΌμ„ μƒμ„±ν•˜κ³  λ‹€μŒ 값듀을 μ„€μ •ν•˜μ„Έμš”:

    OLLAMA_BASE_URL=http://localhost:11434
    OLLAMA_MODEL="huihui_ai/kanana-nano-abliterated"
    

▢️ μ‹€ν–‰ 방법

python run.py

μ„œλ²„λŠ” 기본적으둜 http://localhost:8000μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.

πŸ§ͺ ν…ŒμŠ€νŠΈ 방법

curl -G "http://localhost:8000/translate?from=en&to=ko&text=Hello%20World"

μ˜ˆμƒ 응닡:

μ•ˆλ…•ν•˜μ„Έμš” 세계

πŸ“š API μ‚¬μš© 방법

λ²ˆμ—­ μ—”λ“œν¬μΈνŠΈ

GET http://localhost:8000/translate?from=en&to=ko&text=hello

응닡:

μ•ˆλ…•ν•˜μ„Έμš”

πŸ“˜ λ²ˆμ—­ 사전 관리

μ™ΈλΆ€ JSON νŒŒμΌμ„ 톡해 λ²ˆμ—­ 사전을 관리할 수 μžˆμŠ΅λ‹ˆλ‹€. κΈ°λ³Έ κ²½λ‘œλŠ” resources/dictionaries/ ν΄λ”μž…λ‹ˆλ‹€.

사전 파일 ꡬ쑰

  • resources/dictionaries/ko_dictionary.json: ν•œκ΅­μ–΄ λ²ˆμ—­ 사전
  • resources/dictionaries/ja_dictionary.json: 일본어 λ²ˆμ—­ 사전
  • resources/dictionaries/en_dictionary.json: μ˜μ–΄ λ²ˆμ—­ 사전
  • resources/dictionaries/lang_dictionary.json.example: λ²ˆμ—­ 사전 예제 파일

λ²ˆμ—­ 사전 JSON 파일 ꡬ쑰:

{
  "ui": {
    "NEW GAME": "μƒˆ κ²Œμž„",
    "CONTINUE": "κ³„μ†ν•˜κΈ°"
  },
  "legal": {
    "All Rights Reserved": "λͺ¨λ“  ꢌ리 보유",
    "Version": "버전"
  }
}

πŸ” λ²ˆμ—­ ν’ˆμ§ˆ 평가 및 κ°œμ„ 

λ²ˆμ—­ ν’ˆμ§ˆμ„ μžλ™μœΌλ‘œ ν‰κ°€ν•˜κ³  κ°œμ„ ν•˜λŠ” κΈ°λŠ₯이 κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

  • λ²ˆμ—­ κ²°κ³Όλ₯Ό 0-100 점수둜 평가
  • 평가 κΈ°μ€€:
    • μ •ν™•μ„±: 40%
    • μœ μ°½μ„±: 30%
    • μš©μ–΄: 20%
    • μ™„μ „μ„±: 10%
  • μ„€μ •λœ ν’ˆμ§ˆ κΈ°μ€€(κΈ°λ³Έκ°’: 90점) 미달 μ‹œ μžλ™ μž¬λ²ˆμ—­
  • μ΅œλŒ€ κ°œμ„  μ‹œλ„ 횟수 μ œν•œμœΌλ‘œ λ¬΄ν•œ 루프 λ°©μ§€
  • 평가 κ²°κ³Ό λ‘œκΉ… (logs/evaluations.jsonl)

πŸ“Š λ‘œκΉ… μ‹œμŠ€ν…œ

λ‹€μ–‘ν•œ ν˜•νƒœμ˜ 둜그λ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€:

둜그 μœ ν˜• 파일 경둜
일반 둜그 logs/translation.log
λ²ˆμ—­ μš”μ²­/κ²°κ³Ό 둜그 logs/translations.jsonl
λ²ˆμ—­ 평가 둜그 logs/evaluations.jsonl
였λ₯˜ 둜그 logs/errors.jsonl

βš™οΈ ν™˜κ²½ λ³€μˆ˜ μ„€μ •

.env νŒŒμΌμ΄λ‚˜ Docker ν™˜κ²½ λ³€μˆ˜λ₯Ό 톡해 λ‹€μŒ 섀정을 μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

Ollama μ„€μ •

ν™˜κ²½ λ³€μˆ˜ μ„€λͺ… κΈ°λ³Έκ°’
OLLAMA_BASE_URL Ollama 호슀트 URL http://localhost:11434
OLLAMA_MODEL μ‚¬μš©ν•  Ollama λͺ¨λΈ huihui_ai/kanana-nano-abliterated
OLLAMA_TIMEOUT Ollama μš”μ²­ Timeout μ‹œκ°„ μ„€μ • (초) 300
OLLAMA_SERVER_CHECK_ENABLE Ollama μ„œλ²„ν™•μΈ 반볡 μ‹€ν–‰ μ—¬λΆ€ False
OLLAMA_HEALTH_CHECK_ENABLE Ollama 주기적인 μƒνƒœν™•μΈ μ‹€ν–‰ μ—¬λΆ€ False

μ„±λŠ₯ μ΅œμ ν™” μ„€μ •

ν™˜κ²½ λ³€μˆ˜ μ„€λͺ… κΈ°λ³Έκ°’
PRELOAD_MODEL λ²ˆμ—­ μš”μ²­ μ „ Ollama λͺ¨λΈ λ‘œλ“œν• μ§€ μ—¬λΆ€ True

지원 μ–Έμ–΄ μ„€μ •

ν™˜κ²½ λ³€μˆ˜ μ„€λͺ… κΈ°λ³Έκ°’
SUPPORTED_LANGUAGES μ§€μ›λ˜λŠ” μ–Έμ–΄ λͺ©λ‘ (μ‰Όν‘œλ‘œ ꡬ뢄) en,ko

캐싱 μ„€μ •

ν™˜κ²½ λ³€μˆ˜ μ„€λͺ… κΈ°λ³Έκ°’
ENABLE_CACHE 캐싱 ν™œμ„±ν™” μ—¬λΆ€ True
CACHE_EXPIRATION μΊμ‹œ 만료 μ‹œκ°„ (초) 3600

사전 λ²ˆμ—­ μ„€μ •

ν™˜κ²½ λ³€μˆ˜ μ„€λͺ… κΈ°λ³Έκ°’
ENABLE_DICTIONARY 사전 기반 λ²ˆμ—­ ν™œμ„±ν™” μ—¬λΆ€ True

λ²ˆμ—­ ν’ˆμ§ˆ 평가 μ„€μ •

ν™˜κ²½ λ³€μˆ˜ μ„€λͺ… κΈ°λ³Έκ°’
ENABLE_EVALUATION λ²ˆμ—­ ν’ˆμ§ˆ 평가 ν™œμ„±ν™” μ—¬λΆ€ False
QUALITY_THRESHOLD λ²ˆμ—­ κ°œμ„  μž¬μ‹œλ„ ν’ˆμ§ˆ 점수 κΈ°μ€€μΉ˜ (0-100) 90
MAX_IMPROVEMENT_ATTEMPTS μ΅œλŒ€ κ°œμ„  μ‹œλ„ 횟수 3

평가 μ œμ™Έ 쑰건

ν™˜κ²½ λ³€μˆ˜ μ„€λͺ… κΈ°λ³Έκ°’
MIN_TEXT_LENGTH_FOR_EVALUATION 평가에 ν•„μš”ν•œ μ΅œμ†Œ ν…μŠ€νŠΈ 길이 8
MAX_TEXT_LENGTH_FOR_EVALUATION 평가에 ν•„μš”ν•œ μ΅œλŒ€ ν…μŠ€νŠΈ 길이 1000

이λ ₯ 관리 μ„€μ •

ν™˜κ²½ λ³€μˆ˜ μ„€λͺ… κΈ°λ³Έκ°’
MAX_HISTORY_PER_LANG_PAIR μ–Έμ–΄ μŒλ³„ μ΅œλŒ€ 이λ ₯ 수 10

πŸ’‘ λ²ˆμ—­ ν’ˆμ§ˆ κ°œμ„  λ°©μ•ˆ

  1. 더 κ°•λ ₯ν•œ LLM μ‚¬μš©ν•˜κΈ°: λ²ˆμ—­ ν’ˆμ§ˆμ€ LLM의 μ„±λŠ₯에 크게 μ˜μ‘΄ν•©λ‹ˆλ‹€. OpenAI, Google Gemini, Anthropic Claude와 같은 더 κ°•λ ₯ν•œ LLM을 μ‚¬μš©ν•˜μ—¬ ν’ˆμ§ˆμ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

  2. 사전 κ°œμ„  μž‘μ—… μ μš©ν•˜κΈ°: λ²ˆμ—­ ν›„ μƒμ„±λœ 사전을 λŒ€ν˜• λͺ¨λΈ(OpenAI, Gemini, Claude λ“±)에 μ œκ³΅ν•˜μ—¬ κ°œμ„ λœ λ²„μ „μœΌλ‘œ λ³€κ²½ν•˜κ³  μž¬λ²ˆμ—­μ„ μ‹œλ„ν•©λ‹ˆλ‹€.

  3. μˆ˜λ™ κ²€μˆ˜ 및 ν”Όλ“œλ°± λ°˜μ˜ν•˜κΈ°: λ²ˆμ—­ 사전을 κ²€μˆ˜ν•˜μ—¬ μ›ν•˜λŠ” ν˜•νƒœλ‘œ λ³€κ²½ ν›„ μž¬λ²ˆμ—­ν•©λ‹ˆλ‹€.

πŸ“„ λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” MIT λΌμ΄μ„ μŠ€λ‘œ λ°°ν¬λ©λ‹ˆλ‹€.

About

A translation service API server utilizing FastAPI and Ollama as a Custom Server for XUnity.AutoTranslator. This project includes the ability to provide text translation using a large-scale language model (LLM), evaluate translation quality, and manage external translation dictionaries.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published