# Побудова " Lawier GPT " для вашого блогу - Частина 1: Вступ і архітектура

<!--category-- AI, LLM, RAG, C#, AI-Article, mostlylucid.blogllm -->
<datetime class="hidden">2025-11-12T22:45</datetime>

> ПОПЕРЕДЖЕННЯ: ТАКІ ПОСТА, ЯКІ ВАЖЛИВІ.

Це, ймовірно, багато з того, що нижче не спрацює, я генерую їх як як як як як-до мене, а потім роблю всі кроки і отримати зразок додатку працює... ви були підступні і бачили їх! вони ймовірно будуть готові до середини грудня.

<img src="https://media1.tenor.com/m/_rQc7PIEqwQAAAAd/cat-hello-cat-peek.gif" height="300px" />
## Вступ

Пристебнися, бо це буде довга серія!

> Якщо ви стежите разом з цим блогом, ви зрозумієте, що я трохи одержимий пошуками цікавих способів використання LLM та ШІ у практичних програмах.

У мене є новий проект, який поєднує мою любов до блогу, блогу C#, і ШІ: будівництво асистента-письменника, який допомагає мені складати нові блогові дописи, використовуючи мій існуючий контент як базу знань.

ЗАУВАЖЕННЯ: це частина мого експерименту з комп'ютером (заступною чернеткою) + моїм власним редагуванням.

- Той самий голос, той самий прагматизм, тільки швидші пальці.
- Подумайте про те, як сучасні законні практики використовують LLMs навчений з права справи, щоб складати брифси, рухи та контракти.
- Вони не починаються з нуля - системні посилання, що стосуються справи, пропонують мову, засновану на успішних минулих документах, і підтримують послідовність з усталеними шаблонами.
- Це саме те, що ми тут створюємо, але для вмісту блогу.
- Метою створення досвідченого асистента письма комп' ютерів, який сказав:

Допомагає створювати дописи нових блогів у моєму встановленому стилі[Запропонує доречний зміст з попередніх статей для посилання](https://www.anthropic.com/index/contextual-retrieval)Знаходить подібні дописи для підтримки послідовності

## Автоматично створює внутрішні посилання на споріднені статті

**Діяє як "GitHub Copilot для вашого блогу"**

- **Ця серія статей охопить повне будівництво.**Покоління, яке отримує аугенція (RAG) Noun, a currency
- **system у C#, запущеному на Windows. Description**Ми використаємо останні підходи та рамки, і я поясню кожну нову технологію, коли ми стикаємося з нею.
- **Мої налаштування обладнання (і мінімізації)**Мій комп' ютер розробки:

GPU**: NVIDIA RTX A4000 (16GB VRAM)**Процесор

### : AMD Richen 9 9 9950X

- **RAM**: 96GB DDR5
  - Це моя конкретна установа, але ти
  - мені не потрібне це обладнання
- **слідувати за ними.**Ось мінімальні специфікації для різних компонентів:
  - Прискорення GPU (завершено, не обов' язково)
- **Мінімальний**: NVIDIA GPU з 8GB VRAM (наприклад, RTX 3060, GTX 1070 Ti)

### Може запускати моделі параметрів 7Б з квантуванням

- **Швидкість вбудовування відсотку**Зручний
- **: 12GB+ VRAM (наприклад, RTX 3060 12GB, RTX 4060 Ti)**Запускати більші моделі або високоякісні класифікації
- Мої налаштування
  - : 16GB (A4000) - Може працювати з 13B моделей комфортно
  - Альтернативна лише ЦП
  - Мінімальний

### : Сучасний критерій ЦП

- **Рекомендовано**: 8+ ядер (для розумного створення вбудовування)
  - Все працює лише для процесора, лише повільніше:
- **Покоління вбудовування: ~5- 10x повільніше**LLMCE: ~10- 50x повільніший
  - Все еще подходящий для сценариста!
- **Вимоги до RAM**Мінімальний

### : 16GB системна пам'ять

- **Вибір ЦП лише для моделей 7Б**Зручний
- **: 32 ГБ**Краща для більших моделей процесора

### Мої налаштування

: 96GB - overkille, 32GB досить

- **Зберігання**SSD
- **: Рекомендовано для зразкового завантаження**Пробіл
- **: ~20GB для моделей і векторної бази даних**А як щодо Intel/AMD NPU?

**У сучасних процесорах тепер є присвячені акселератори AI:**Core Intel Ultra*(Meteor Lake+) - Intel AI Boost (NPU)*AMD Richen AI

**(7040/8040 серія) - XDNA NPU**

- ✅ Great for: On-device inference, battery efficiency (laptops)
- ⚠️ Limited for our use: Immature .NET/ONNX Runtime support
- ❌ Not ready for: This project's primary path

**AMD Richen AI Max**

1. **До 50 ТОПІВ**Важливим є те, що NPU призначено лише для підрахунку!
2. **Ви не "будуєте" і не тренуєте моделі на NPU - вони призначені для**run
3. **Ефективно розроблені моделі.**Моделі тренують на хмарних GPU (або робочих станціях), а потім завантажують і розсилають у NPU для вираховування.
4. **Поточний стан запуску моделей на NPU (як запис):**Чому б вам не скористатися NPU для цієї серії статей?
5. **Екосистема програм**: CUDA має 15+довжину зрілості, підтримка NPU в NET є наочним

**Сумісність з моделлю**

- : більшість моделей GGUF спрямовані на CUDA/CPU, моделі NPU-оптимізовані дуже рідко[Документація](https://github.com/microsoft/DirectML): Обмежені ресурси для розробки NPU у C#
- Швидкодія
- : Зараз повільніше, ніж дискретні GPU для нашої роботи
- Підтримка DirectML

**: все ще експериментально для LLM Culture**

```bash
# Use DirectML execution provider (supports NPU)
dotnet add package Microsoft.ML.OnnxRuntime.DirectML

# In code:
var sessionOptions = new SessionOptions();
sessionOptions.AppendExecutionProvider("DML"); // DirectML
var session = new InferenceSession("model.onnx", sessionOptions);
```

**Вы можете использовать NPU для осведомления?**Так, але:[Вимагається](https://onnxruntime.ai/)DirectML[провайдер виконання у ONNX Runtime](https://github.com/microsoft/DirectML)Моделі мають бути у форматі ONNX (не GGUF)

**Підтримка C# є експериментальною**Зараз швидкодію недооцінюють проти CUDA

[TOC]

## Як спробувати визначити NPU (додаткові користувачі):

Поміркованість у майбутньому

1. **: Один раз**ONNX Runtime
2. **і**DirectML
3. **Зростити підтримку НПУ (правдоподібно 2024-2025), вони стануть життєздатними альтернативами для вираховування!**Нижній рядок
4. **: Я покажу вам маршрут GPU, але бачитиму варіанти, які стосуються лише процесора.**Ви можете запустити лише процесор і оновити його пізніше!
5. **Що ми будуємо**Остаточна система матиме декілька компонентів:
6. **Лінія розмітки трубопроводу**- Оброблює всі дописи блогу, пов'язує їх з розумом і створює вбудовування

База даних векторів

## - Зберігає вбудовування і вмикає семантичний пошук подібного вмісту

Програма для роботи з клієнтами WindowsName

- - Помічник запису на стільниці з інтерфейсом редактора і панелі пропозицій
- Інтеграція LLM
- - Локальні висновки щодо створення вмісту GPU
- Створення посилання

- Автоматично встановлювати внутрішні посилання і посилання на пов' язані з ними дописи

- Рушій сумісності стилюName
- - Вчиться візерунків з існуючих постів, щоб підтримувати голос і структуру
- Думайте про це як про "GitHub Copilot" - "Grammarly," але спеціально тренувався на змісті та стилі вашого блогу.
- Почему "Лауиер-ГПД"?
- Сучасні юридичні фірми користуються ЛЛМС, вивченими у великих бібліотеках судового права, щоб допомогти у створенні правових документів.

Коли пишеш рух, система:

## Посилання на важливі прецеденти і попередні успішні аргументи

Запропонує шаблони мови, які раніше працювали

### Підтримує відповідність з нормами, що стосуються юридичного запису

Джерела Cites автоматично

### [Це наша модель.](/blog/building-a-lawyer-gpt-for-your-blog-part2)

Коли я починаю писати " Додавання блоку сутності для... ," система повинна:[Знайти мої попередні повідомлення, пов' язані з EF](https://developer.nvidia.com/cuda-toolkit), [Запропонувати структурні візерунки, які я використовував раніше](https://developer.nvidia.com/cudnn)Пропонувати відповідні фрагменти коду з попередніх статей

### [Автоматично створювати посилання на споріднені дописи](/blog/building-a-lawyer-gpt-for-your-blog-part3)

Підтримую стиль письма і технічну глибину[На відміну від звичайних асистентів ШІ, наша система базується на реальному змісті минулого, тому вона не натякає на суперечність того, що я вже написав.](https://qdrant.tech/)Огляд серії[Ось що ми покриємо протягом наступних тижнів.](https://github.com/pgvector/pgvector)).

### [Частина 1 (цьий допис): Вступ і архітектура](/blog/building-a-lawyer-gpt-for-your-blog-part4)

Ми встановимо те, що ми будуємо, і чому, плюс розглянути архітектурні рішення.

### [Частина 2: налаштування і налаштування CUDA у C#](/blog/building-a-lawyer-gpt-for-your-blog-part5)

Отримання налаштувань вікон для завантажених комп' ютером GPU, встановленняName[КУДА](https://docs.microsoft.com/en-us/dotnet/desktop/wpf/), [кДНunit description in lists](https://avaloniaui.net/)І тестування того, що C# дійсно може бачити і використовувати ваш ВПУ.[Частина 3: Розуміння вбудовування баз даних та векторів](https://dotnet.microsoft.com/en-us/apps/maui)Глибоко занурившись у те, чим насправді є вбудовування, як уможливити семантичний пошук і обрати правильну векторну базу даних (скупець: ми, ймовірно, використаємо

### [Qdrant](/blog/building-a-lawyer-gpt-for-your-blog-part6)

або[pgvector](https://onnxruntime.ai/), [Частина 4.](https://github.com/ggerganov/llama.cpp)Обробка файлів з відміткою, інтелектуальні стратегії поділу (ви не можете просто розділити на абзаци!), і створення вбудовування для всього нашого вмісту.

### [Частина 5: Клієнт Windows](/blog/building-a-lawyer-gpt-for-your-blog-part7)

Вибір правої оболонки (

### [WPF](/blog/building-a-lawyer-gpt-for-your-blog-part8)

Авалоніяgreece_ prefectures. kgm

## , або

МАУЇ

### ?), будування інтерфейсу, і зробити його дійсно приємно вживати.

Частина 6: Інтеграція локального LLM

1. **Запуск моделей локального використання**ONNX Runtime
2. **Lama. cpp**Прив'язки, або інші підходи.
3. **Повністю користуюся цим A4000!**Частина 7: створення вмісту і сприяння інженерії
4. **Об'єднання всього цього - семантичний пошук відповідної інформації, керування контекстним вікном, спонукання до розробки допомоги в написанні та створення послідовних пропозицій.**Частина 8: Додаткові можливості і підвищення виробництва
5. **Автоматично з'єднуватися з відповідними дописами, перевіркою у стилі, пропозиціями фрагментів коду та створенням системи для щоденного запису.**Чому RAG?

### Перед тим, як ми зануримося в архітектуру, давайте поговоримо про те, чому РАГ (Rrieval Augmented Generation) - це правильний підхід.

Проблема з якісним налаштуванням

Ви можете подумати: "Чому б не налагодити LLM на всіх блогових дописах?" Існує декілька проблем з цим:

1. & Складність вартості
2. - Точне налаштування дорого коштує (як обчислення, так і зусилля)
3. Невтомність
4. - Кожен допис нового блогу означає повторне повторення
5. Чорна скринька

- Важко зрозуміти, що таке "навчений"

- ✅ Always up-to-date (just re-index new posts as you write them)
- ✅ Grounded in your actual writing (maintains consistency)
- ✅ Traceable (know which past posts influenced suggestions)
- ✅ Efficient (no expensive retraining for every new post)
- ✅ Flexible (can swap out LLMs or adjust search strategies)
- ✅ Privacy-preserving (everything runs locally)

## Галюцинація

- Не гарантую, що модель нічого не вигадає.

```mermaid
graph TB
    A[Markdown Files] -->|Ingest| B[Chunking Service]
    B -->|Text Chunks| C[Embedding Model]
    C -->|Vectors| D[Vector Database]

    E[User Writing] -->|Current Draft| F[Windows Client]
    F -->|Embed Context| C
    C -->|Query Vector| D
    D -->|Similar Content| G[Context Builder]

    G -->|Relevant Past Articles| H[Prompt Engineer]
    H -->|Prompt + Context| I[Local LLM]
    I -->|Generated Suggestions| J[Link Generator]
    J -->|Suggestions + Citations| F

    F -->|Display| K[Editor with Suggestions]

    class C,I embedding
    class D,K output

    classDef embedding stroke:#333,stroke-width:4px
    classDef output stroke:#333,stroke-width:4px
```

### Без посилань

- Не можу легко відстежити відповіді до джерел

- Як RAG вирішує це
- RAG поєднує найкращі з обох світів: потужність LLM з точністю пошуку, щоб створити створення вмісту контексту.
- Потік:
- Користувач починає запис (наприклад, " Побудова програмного інтерфейсу REST з ядром ASP. NET...)
- Система знаходить семантичні статті, подібні до попередніх

**Система постачає відповідні шматки як контекст для LLM**LLM створює пропозиції/ продовження, засновані на минулому змісті

### Система пропонує пропозиції з посиланнями на дописи джерела

Це означає:

Архітектура системи

Дозвольте мені розбити ключові компоненти, які ми будемо будувати:

- 1.
- Лінія розмітки трубопроводу

**Цей компонент:**Прочитує файли з каталогу блогуName

- [Видобуває метадані (написи, категорії, дату, кількість слів)](https://www.sbert.net/)Інтелектуальні шматки вмісту (зберігання блоків коду для повторного використання)
- Визначення структурних візерунків (впорядкування постів)
- [Відомості про джерело доріжок для створення посилань](https://huggingface.co/BAAI/bge-base-en-v1.5)Виклик на ключ

### - Стратегія розпилювання має неабияке значення.

Замаленький і втрачаєш контекст.

**Завелика і ви марнуєте контекстне вікно LLM.**Нам потрібні фрагменти, які семантично змістовні, - повна думка або розділ, а не випадкові перерви абзаців.

- **[2.](https://qdrant.tech/)**Вмонтована модель
- **[Вбудовування - це магія, яка робить семантичну роботу пошуку.](https://github.com/pgvector/pgvector)**Модель вбудовування перетворює текст на високовимірний вектор (масив чисел), який передає семантичне значення.
- **[Подібні концепції закінчуються "закрити" у векторному просторі, навіть якщо вони використовують різні слова.](https://weaviate.io/)**Наприклад:
- **["міграція бази даних" і "розробка схеми DB" матимуть подібні вбудовування](https://www.trychroma.com/)**" cat " і " kiten " будуть ближчі, ніж " cat " і " database "

Вибір технології

### : Скоріше за все, ми використаємо такі варіанти:

речення- передавач

**[моделі (можна запустити за допомогою ONNX Runtime у C#)](https://docs.microsoft.com/en-us/dotnet/desktop/wpf/)**

- ✅ Mature, stable, lots of resources
- ✅ Native Windows performance
- ❌ Windows-only
- ❌ Looks dated unless you invest in UI libraries

**[Моделі вбудовування OpenAI (за допомогою API)](https://avaloniaui.net/)**

- ✅ Cross-platform (XAML-based)
- ✅ Modern, actively developed
- ✅ Similar to WPF
- ❌ Smaller ecosystem

**[Моделі BGE](https://dotnet.microsoft.com/en-us/apps/maui)**

- ✅ Cross-platform
- ✅ Microsoft-backed
- ❌ Still maturing
- ❌ More mobile-focused

(встановлення відкритого джерела)**3.[База даних векторів](https://github.com/Kinnara/ModernWpf)**Вбудовування баз даних у векторах і пришвидшення пошуку подібності.**Коли ви пишете про "Скомпонований Докер," він знаходить K найбільш семантично схожий з минулого зміст - не лише відповідники ключових слів, але, концептуально пов'язаний матеріал.**Вибір технології

### Ми підрахуємо:

Qdrant

- - Сучасний, написаний на Rust, чудовий клієнт C#, дружній Docker
- pgvector
- - Розширення для PostgreSQL (ми вже використовуємо Postgres!)
- Тяжкі

**- Ще один надійний варіант з хорошою підтримкою. NET**:

**[Хрома](https://onnxruntime.ai/)**

- - Популярний в країні Python, менше в C#
- Я схиляюся до Кданта за його простоту та швидкодію, або Pgvector, щоб тримати все в Postgres.
- 4.
- Клієнт Windows

**[Нам нужен хороший информатор, чтобы писать за помощью информатора.](https://github.com/ggerganov/llama.cpp)Розділений режим редактора з пропозиціями.**

- Параметри:[WPF (Фонд презентації вікон)](https://github.com/SciSharp/LLamaSharp))
- Авалоніяgreece_ prefectures. kgm
- Інтерфейс програми MAUI (Multi- platform)
- Оскільки ми круті на Windows, і я хочу чогось стабільного, я схиляюся до

**[WPF з](https://github.com/dotnet/TorchSharp)**

- Сучасний інтерфейс WWPF
- або
- Авалоніяgreece_ prefectures. kgm

для цього міжплатформного потенціалу.**5.**Інтеграція локального LLM

### Здесь светит A4000 GPU.

Ми хочемо запустити LLM локально для:

- Конфіденційність (без даних, надісланих до API)
- Швидкість (швидка локальна оцінка)
- Вартість (без внесків API)
- Керування (ми обираємо модель)

Параметри технології

- ONNX Runtime
- Перетворити моделі у формат ONNX
- Чудове прискорення GPU
- Підтримка C# рідної

### Внизу: не всі моделі конвертуються добре.

Lama. cpp

- прив' язки
- Бібліотека C++ з прив' язками C# (
- LLamaSap
- Підтримує СУДУ
- Підтримка широкої моделі (Llama, Mistral тощо)

Дуже активний розвиток

## TorchSap

Прив' язки PyTorch для.NET

1. **Найбільш гнучкий**Крива навчання уніфікатора
2. **Я прив'язуюся до**LLamaSap
3. **за його зрілість і легкість у використанні у популярних моделях.**6.
4. **Керування контекстними вікнами і запити до інженерії**У LLM обмежені контекстні вікна (наприклад, 4K, 8K, 32K- маркери).
5. **Нам потрібно:**Отримати найвідповідніший попередній вміст (верхній K з векторного пошуку)

## Вмістити їх у контекстне вікно з поточним чернетом

Структурувати запит на допомогу у запису

### Залишати місце для створеної пропозиції

- **Це складніше, ніж здається.**Ми будемо вивчати стратегії, такі як:
- **Динамічний K- вибір, заснований на тому, що ви зараз пишете**Перевпорядкування отриманих шматків за допомогою рецензування

### Інтелектуальне придушення контексту

- **[Запит з декількома ударами з прикладами з минулих дописів](https://onnxruntime.ai/)**7.**[Створення посилання і посилання](https://github.com/SciSharp/LLamaSharp)**Кожен шматок потребує метаданих:
- **[Файл/ post джерела](https://dotnet.microsoft.com/en-us/apps/machinelearning-ai/ml-dotnet)**Розташування у початковому документі
- **Дата оприлюднення**Категорії

### Використані фрагменти коду

- **[Коли LLM створює пропозиції, ми автоматично створюємо зворотні посилання на джерела і визначаємо повторні шаблони коду.](https://qdrant.tech/)**Чим це відрізняється?**[Існує багато підручників з RAG, але ця серія статей буде різною:](https://github.com/pgvector/pgvector)**C# Перший

### - Більшість прикладів з РАГ є в Python.

- **We're going full .NET**Вікна і GPUName**- Передача NVIDIA CUDA на Windows, а не Linux/ WSL**Виробництво готове**[- Не просто доказ-концепт, а реальний код.](https://avaloniaui.net/)**Залежно від домену

### - Оптимізовано для допомоги в записуванні блогів, а не для загального створення вмісту

- **[Глибокі пояснення](https://github.com/xoofx/markdig)**- Ми пояснимо "чому" за рішеннями
- **[Технології, які ми використаємо](https://www.docker.com/)**Ось комп'ютерний набір, який я планую:
- **[Core Framework](https://docs.microsoft.com/en-us/ef/core/)**. NET 9

### (заклади на час написання)

- **[C# 13](https://developer.nvidia.com/cuda-toolkit)- Сучасні особливості мови.**Бібліотеки AI/ML
- **[ONNX Runtime](https://developer.nvidia.com/cudnn)**або

## LLamaSap

- LM Culse

### Microsoft.ML

- **- Потенційно для деяких завдань**RecordTranssexer через ONNX
- **- Вбудовані**База даних векторів
- **Qdrant**або
- **pgvector**- Щоб бути визначеним

### Робота з блоками інтерфейсу

- **WPF**на
- **Сучасний WPF**або
- **Авалоніяgreece_ prefectures. kgm**- Сучасний інтерфейс стільниці

### Підтримувальні інструменти

- **Markdig**- Вже використано для аналізу.
- **Панель**- За запуск QDrant або інших служб
- **Ядро блокування сутності**- Якщо ми використаємо pgvector
- **Стек GPU**КУДА

### 12.x

- **(заклади на час написання)**кДНunit description in lists
- **- Примітиви глибокого навчання**Обмірковування швидкодії
- **Різні налаштування обладнання мають різні можливості:**З 8GB VRAM (minimum)
- **Розмір моделі**: моделі параметрів 7Б з квантизацією Q4

## Пакетна обробка

: Вбудовування процесів у менші пакети

1. Керування пам' яттю
2. : Потрібні ретельні моніторинги VRAM
3. Працює добре для
4. : Помічник написання, створення вбудовування
5. З 12GB+ VRAM (Comfortable)
6. Розмір моделі

: 7Б з високою якістю квантування (Q5/Q6)

## Пакетна обробка

: Більші пакети для швидшого проходження**[Крім того, можна запустити](/blog/building-a-lawyer-gpt-for-your-blog-part2)**: Деякі моделі 13Б з агресивною квантацією

- З 16GB+ VRAM (Моє налаштування)
- Розмір моделі
- : зручно використовувати моделі параметрів 7B- 13B
- Пакетна обробка
- : Повні пакети, мінімальні обмеження

Швидкі висновки

## : Час напівсекунди відповіді

Верхня кімната

- **: Може експериментувати з різними моделями**Лише ЦП (зворотна)
- **Все працює**, тільки повільніше
- **Вбудовані**: 5- 10x повільніше, ніж GPU
- **Підсумок LLM**: 10- 50x повільніше, ніж GPU
- **Все ще придатний для використання**: За помічника з терпінням!

Наближається розвиток

## Ми побудуємо це поступово:

Почати з найпростіших компонентів (читання знаків, кусочок)

Додати створення вбудовування (можна почати з API, заснованого на локальному інтерфейсі)

Отримати роботу з векторним пошуком

Створити базовий інтерфейс

## Інтегрувати LLM

- **Польська і оптимізована**Кожна частина буде розглянута і перевірена самостійно.
- [Ніяких інтеграційних кошмарів.](/blog/building-a-lawyer-gpt-for-your-blog-part2)
- [Що далі?](/blog/building-a-lawyer-gpt-for-your-blog-part3)
- [Вхід](/blog/building-a-lawyer-gpt-for-your-blog-part4)
- [Частина 2: налаштування і налаштування CUDA у C#](/blog/building-a-lawyer-gpt-for-your-blog-part5)
- [Ми захопимо руки за налаштування GPU:](/blog/building-a-lawyer-gpt-for-your-blog-part6)
- [Встановлення CUDA і cuDN на Windows](/blog/building-a-lawyer-gpt-for-your-blog-part7)
- [Налаштування середовища розробки](/blog/building-a-lawyer-gpt-for-your-blog-part8)

## Запис простої програми C# для перевірки доступу до GPU

Виконання базової перевірки оцінки з ONNX Runtime

- [Помітка в A4000, щоб зрозуміти, що ми можемо зробити.](https://onnxruntime.ai/)
- [Це може здаватися базовим, але зробити це правильно - дуже важливо.](https://github.com/SciSharp/LLamaSharp)
- [Я змарнировала час на усування проблем, які призвели до невідповідність версії або пропущення ДЛТ.](https://qdrant.tech/documentation/)
- [Чому це важливо](https://www.sbert.net/)
- [Окрім того, що цей підхід є просто крутим проектом, він має реальні застосування:](https://www.anthropic.com/index/contextual-retrieval)

Технічна документація[- Збереження послідовного стилю у великих наборах документів](/blog/building-a-lawyer-gpt-for-your-blog-part2)!