Интеграция локального LLM с 1С: пошаговая схема
Архитектура
1С:Предприятие (клиент) → HTTP-запрос (JSON) → Middleware (Node.js/FastAPI) → vLLM / TGI → LLM → ответ → 1С.
1С не умеет в длинные промпты и потоковую генерацию напрямую. Нужен middleware.
Шаг 1. Поднимаем LLM-сервер vLLM с API, совместимым с OpenAI
python -m vllm.entrypoints.openai.api_server
—model meta-llama/Llama-2-7b-chat-hf
—api-key secret-key
—port 8000
Шаг 2. Пишем middleware (FastAPI)
from fastapi import FastAPI, HTTPException from pydantic import BaseModel import httpx
app = FastAPI()
class PromptRequest(BaseModel): doc_id: str user_question: str
@app.post(“/generate”) async def generate(req: PromptRequest): # 1. Достаём документ из базы 1С (через REST или ODATA) # 2. Формируем промпт: prompt = f”Контекст: {doc_content}\nВопрос: {req.user_question}\nОтвет:” # 3. Шлём в vLLM async with httpx.AsyncClient() as client: resp = await client.post( “http://localhost:8000/v1/completions”, headers={“Authorization”: “Bearer secret-key”}, json={“prompt”: prompt, “max_tokens”: 256} ) return resp.json()
Шаг 3. Запрос из 1С
// 1С: ВнешняяОбработка Запрос = Новый HTTPЗапрос(); Запрос.URL = “http://middleware-server:8080/generate”; Запрос.Метод = “POST”; Запрос.Заголовки.Вставить(“Content-Type”, “application/json”);
Данные = Новый Структура(); Данные.Вставить(“doc_id”, “Документ-001”); Данные.Вставить(“user_question”, “Какова себестоимость?”);
Запрос.ТелоКакСтрока = JSON.Записать(Данные);
Соединение = Новый HTTPСоединение(); Ответ = Соединение.Выполнить(Запрос);
Результат = JSON.Прочитать(Ответ.ТелоКакСтрока).Ответ; Сообщить(Результат);
Итог
1С → HTTP-запрос к middleware (без прямого доступа к LLM).
Middleware → авторизация, валидация, форматирование промпта.
LLM возвращает JSON → 1С показывает ответ.
Готово. Данные не покидают периметр.