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>
111 lines
3.2 KiB
Markdown
111 lines
3.2 KiB
Markdown
# Руководство разработчика
|
|
|
|
## Требования
|
|
|
|
- Go 1.21+
|
|
- [Ollama](https://ollama.com) — установлен и запущен локально
|
|
|
|
## Первый запуск
|
|
|
|
### 1. Скачать модели в Ollama
|
|
|
|
```bash
|
|
ollama pull gemma:1b # Router LLM + документы + общее
|
|
ollama pull qwen2.5-coder:1.5b # Целевая модель для кода
|
|
```
|
|
|
|
Проверить что модели доступны:
|
|
```bash
|
|
ollama list
|
|
```
|
|
|
|
### 2. Настроить .env
|
|
|
|
```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. Запустить прокси
|
|
|
|
```bash
|
|
make run
|
|
# или напрямую:
|
|
go run ./cmd/server
|
|
```
|
|
|
|
---
|
|
|
|
## Команды
|
|
|
|
```bash
|
|
make build # Собрать бинарник ./ollama-proxy
|
|
make run # go run ./cmd/server (читает .env)
|
|
make test # go test ./...
|
|
```
|
|
|
|
---
|
|
|
|
## Тестирование через curl
|
|
|
|
```bash
|
|
# Проверка работоспособности (без токена)
|
|
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` (автомаршрутизация) или конкретная модель
|
|
|
|
---
|
|
|
|
## Как добавить новую модель
|
|
|
|
1. `ollama pull <model-name>`
|
|
2. Добавить переменную в `.env`: `ANALYSIS_MODEL=llama3.2:3b`
|
|
3. Добавить поле в `internal/config/config.go`
|
|
4. Расширить логику в `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-роутер, маршруты |
|