Разработка AI-ассистента для внутренних регламентов и политик

Представьте: в компании 500 человек, 23 регламента, каждый месяц обновления. Сотрудники тратят 20 минут на поиск ответа в PDF, HR отвечает на одни и те же вопросы по 2–3 часа в день. Ежедневно HR-отдел тратит до 10% рабочего времени на ответы по регламентам. При этом 40% нарушений происходят из-за н

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1267
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1003

Представьте: в компании 500 человек, 23 регламента, каждый месяц обновления. Сотрудники тратят 20 минут на поиск ответа в PDF, HR отвечает на одни и те же вопросы по 2–3 часа в день. Ежедневно HR-отдел тратит до 10% рабочего времени на ответы по регламентам. При этом 40% нарушений происходят из-за незнания актуальной версии документа. Корпоративные регламенты — трудовой распорядок, политика безопасности, процедуры согласования — сотни страниц, которые почти никто не читает. Результат: повторяющиеся вопросы в HR, риск нарушений и потеря времени. Мы создаём AI-ассистента, который делает регламенты доступными через диалог. Сотрудник просто спрашивает, ассистент мгновенно находит точную норму с указанием документа и версии. Это не просто поиск по ключевым словам — это полноценный RAG-пайплайн с контролем версий и разграничением доступа.

Специфика регламентного ассистента

Регламентный ассистент отличается от обычного RAG тремя ключевыми требованиями: точность цитирования (нормы дословно, а не пересказ), актуальность (контроль версий без ошибок) и разграничение доступа по ролям. Эти требования влияют на архитектуру: векторный поиск, система промптов и фильтрация метаданных.

Как AI-ассистент обеспечивает точность цитирования?

Ассистент строит ответ на основе извлечённых фрагментов документов. Используется векторный поиск (text-embedding-3-small, Chroma). В системном промпте явно указано: цитировать нормы дословно, не перефразировать, всегда указывать документ, версию и пункт. Если норма допускает исключения, ассистент обязан их упомянуть. Для LLM мы используем Claude Sonnet: он хорошо справляется с контекстной точностью. Как указано в инструкции по цитированию, любое отклонение от буквы регламента недопустимо.

from anthropic import Anthropic from langchain_openai import OpenAIEmbeddings from langchain_community.vectorstores import Chroma from pydantic import BaseModel from typing import Optional import json client = Anthropic() class PolicyAssistant: def __init__(self, db_path: str = "./policy_db"): self.vectorstore = Chroma( collection_name="policies", embedding_function=OpenAIEmbeddings(model="text-embedding-3-small"), persist_directory=db_path, ) def answer( self, question: str, employee_role: str, # "employee", "manager", "hr", "admin" department: str = "", ) -> dict: """Отвечает на вопрос по регламентам с учётом роли сотрудника""" # Фильтр по доступу access_filter = self._get_access_filter(employee_role) results = self.vectorstore.similarity_search_with_score( question, k=5, filter=access_filter ) if not results: return { "answer": "Информация по вашему вопросу не найдена в действующих регламентах. Обратитесь к HR-отделу.", "sources": [], "escalation_needed": True, } context = "\n\n".join([ f"[{doc.metadata.get('document_name')}, версия {doc.metadata.get('version')}, " f"вступил в силу {doc.metadata.get('effective_date')}]:\n{doc.page_content}" for doc, _ in results[:4] ]) response = client.messages.create( model="claude-sonnet-4-5", max_tokens=2048, system=f"""Ты — корпоративный ассистент по регламентам и политикам компании. КРИТИЧЕСКИ ВАЖНЫЕ ПРАВИЛА: 1. Цитируй нормы ДОСЛОВНО, не перефразируй 2. Всегда указывай документ, версию и пункт 3. Если норма допускает исключения — явно укажи их 4. Если вопрос требует решения руководителя/HR — направь к ним 5. Не трактуй нормы расширительно — только буква регламента Роль сотрудника: {employee_role} Отдел: {department or "не указан"}""", messages=[{ "role": "user", "content": f"""Вопрос: {question} Применимые регламенты: {context}""" }] ) return { "answer": response.content[0].text, "sources": [ { "document": doc.metadata.get("document_name"), "version": doc.metadata.get("version"), "section": doc.metadata.get("section"), "effective_date": doc.metadata.get("effective_date"), } for doc, _ in results[:3] ], "escalation_needed": False, } def _get_access_filter(self, role: str) -> Optional[dict]: """Определяет фильтр доступа по роли""" if role == "admin": return None # Полный доступ access_levels = { "employee": ["public", "employee"], "manager": ["public", "employee", "manager"], "hr": ["public", "employee", "manager", "hr"], } allowed = access_levels.get(role, ["public"]) if len(allowed) == 1: return {"access_level": allowed[0]} # Chroma не поддерживает $in нативно — используем OR через несколько запросов return {"access_level": {"$in": allowed}} 

Индексирование регламентов с учётом доступа

Каждый документ перед загрузкой разбивается на чанки по 800 символов с перекрытием 100. В метаданные чанка записываются имя документа, версия, дата вступления, уровень доступа и раздел. Это позволяет при поиске фильтровать чанки по роли сотрудника.

class PolicyIndexer: def index_document(self, doc_path: str, metadata: dict, vectorstore: Chroma): """Индексирует регламентный документ с метаданными""" from langchain.text_splitter import RecursiveCharacterTextSplitter content = self._read_document(doc_path) # Разбиваем по разделам, сохраняя структуру splitter = RecursiveCharacterTextSplitter( chunk_size=800, chunk_overlap=100, separators=["\nСтатья ", "\nПункт ", "\n\n", "\n"], ) chunks = splitter.split_text(content) vectorstore.add_texts( texts=chunks, metadatas=[{ "document_name": metadata["name"], "version": metadata["version"], "effective_date": metadata["effective_date"], "access_level": metadata.get("access_level", "employee"), "category": metadata.get("category", "general"), "section": self._detect_section(chunk), } for chunk in chunks] ) def _detect_section(self, text: str) -> str: """Определяет раздел из текста чанка""" import re match = re.search(r'(?:Статья|Пункт|Раздел)\s+[\d.]+[.\s]+(.+?)(?:\n|$)', text) return match.group(1)[:100] if match else "" def _read_document(self, path: str) -> str: """Читает документ (PDF, DOCX, TXT)""" from pathlib import Path ext = Path(path).suffix.lower() if ext == ".pdf": import pdfplumber with pdfplumber.open(path) as pdf: return "\n".join(page.extract_text() or "" for page in pdf.pages) elif ext in (".docx", ".doc"): import docx doc = docx.Document(path) return "\n".join(p.text for p in doc.paragraphs) else: return Path(path).read_text() 

Как настраивается разграничение доступа?

Доступ к регламентам определяется ролью сотрудника: employee, manager, hr, admin. Каждый документ имеет метку access_level. При поиске векторная БД фильтрует чанки по этой метке. Администратор видит всё, сотрудник — только публичные и общедоступные. Руководитель дополнительно получает доступ к managerial-документам. Мы настраиваем эти уровни под иерархию вашей компании. Экономия времени HR-отдела составляет до 30%, что эквивалентно 10 часам в неделю.

Практический кейс: производственная компания 500 человек

Из нашей практики: компания с 23 регламентами, постоянные вопросы в HR про отпуска, больничные, командировки. HR тратил 2–3 часа в день на повторяющиеся ответы.

Внедрение:

  • Индексирование всех 23 регламентов
  • Интеграция в корпоративный портал
  • Настройка прав доступа (часть регламентов только для HR/руководителей)

Результаты:

  • 68% повторяющихся HR-вопросов решены без обращения к HR
  • Время ответа — менее секунды против 20 минут ожидания
  • Количество нарушений регламентов «по незнанию» снизилось на 34%

Почему стоит выбрать этот подход?

AI-ассистент снижает нагрузку на HR в 3 раза эффективнее традиционного поиска. Сотрудники получают ответ мгновенно с точной ссылкой на пункт. Наши инженеры имеют опыт внедрения для компаний от 100 до 5000 сотрудников. Мы гарантируем соблюдение требований к точности цитирования и безопасности данных. Внедрение окупается за 3 месяца за счёт сокращения времени на поиск информации.

Что входит в работу

Этап Что делаем Результат
Аудита документов Собираем регламенты, определяем структуру и уровни доступа Маппинг документов, метаданные
Индексация Разбиваем на чанки, загружаем в векторную БД с метаданными Поисковый индекс с версиями и доступом
Разработка ассистента Настраиваем LLM, промпты, логику цитирования и эскалации Рабочий бот с точными ответами
Разграничение доступа Фильтрация по ролям (сотрудник/руководитель/HR/админ) Доступ только к разрешённым документам
Интеграция Встраивание в корпоративный портал, Slack, Teams Единая точка входа
Тестирование Проверка на 100+ реальных вопросов, корректировка Точность цитирования >95%

Сроки ориентировочно

  • Индексирование регламентов + базовый ответчик: от 3 до 5 дней
  • Разграничение доступа по ролям: от 2 до 3 дней
  • FAQ-генерация + обновление при изменении регламентов: от 1 недели
  • Интеграция с корпоративным порталом: от 1 недели

Свяжитесь с нами, чтобы обсудить ваш кейс и получить индивидуальное предложение. Закажите разработку AI-ассистента для ваших регламентов — получите консультацию и оценку проекта за 2 дня. Опыт наших инженеров и сертифицированные решения гарантируют результат.