forked from templates/template-go-orm
Go-сервис-прокси между Codex CLI и Ollama. Добавляет Bearer-авторизацию, LLM-маршрутизатор (deepseek классифицирует запросы: code/doc/general), поддержку OpenAI Responses API для Codex CLI, стриминг SSE, кеш модели. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.2 KiB
3.2 KiB
Руководство разработчика
Требования
- Go 1.21+
- Ollama — установлен и запущен локально
Первый запуск
1. Скачать модели в Ollama
ollama pull gemma:1b # Router LLM + документы + общее
ollama pull qwen2.5-coder:1.5b # Целевая модель для кода
Проверить что модели доступны:
ollama list
2. Настроить .env
PROXY_PORT=11435
AUTH_TOKEN=my-secret-token
OLLAMA_URL=http://localhost:11434
ROUTER_MODEL=gemma:1b
CODE_MODEL=qwen2.5-coder:1.5b
DOC_MODEL=gemma:1b
GENERAL_MODEL=gemma:1b
3. Запустить прокси
make run
# или напрямую:
go run ./cmd/server
Команды
make build # Собрать бинарник ./ollama-proxy
make run # go run ./cmd/server (читает .env)
make test # go test ./...
Тестирование через curl
# Проверка работоспособности (без токена)
curl http://localhost:11435/health
# Без токена → 401
curl -X POST http://localhost:11435/api/chat \
-d '{"model":"auto","messages":[{"role":"user","content":"привет"}]}'
# Auto-маршрутизация → Router LLM (gemma:1b) выберет модель
curl http://localhost:11435/api/chat \
-H "Authorization: Bearer my-secret-token" \
-d '{"model":"auto","messages":[{"role":"user","content":"напиши функцию на Go"}]}'
# → классифицирует как "code" → запрос идёт в qwen2.5-coder:1.5b
# Явная модель (без маршрутизации)
curl http://localhost:11435/api/chat \
-H "Authorization: Bearer my-secret-token" \
-d '{"model":"gemma:1b","messages":[{"role":"user","content":"расскажи про Go"}]}'
# Список моделей
curl http://localhost:11435/api/tags \
-H "Authorization: Bearer my-secret-token"
Настройка Codex CLI
- Base URL:
http://localhost:11435 - API Key: значение из
AUTH_TOKEN - Model:
auto(автомаршрутизация) или конкретная модель
Как добавить новую модель
ollama pull <model-name>- Добавить переменную в
.env:ANALYSIS_MODEL=llama3.2:3b - Добавить поле в
internal/config/config.go - Расширить логику в
internal/service/router.go
Структура кода
| Файл | Ответственность |
|---|---|
cmd/server/main.go |
Точка входа, инициализация |
internal/config/config.go |
Env-переменные |
internal/model/ollama.go |
Go-типы Ollama API |
internal/handler/middleware.go |
Проверка токена |
internal/handler/proxy.go |
HTTP-хендлеры |
internal/service/ollama_client.go |
Клиент к Ollama (streaming + sync) |
internal/service/router.go |
LLM-маршрутизатор |
internal/router/router.go |
chi-роутер, маршруты |