Далучайцеся да нашага Тэлеграм-канала

Bel-Geek - гэта адкрытая пляцоўка для публікацыі артыкулаў розных аўтараў на беларускай мове на свабодныя тэмы.

Перад тым як прыступіць да стварэння ўласнага артыкула, трэба аўтарызавацца. Калі ў вас няма акаунта, то трэба зарэгістравацца на сайце па спасылцы: https://bel-geek.com/register.

Далей трэба націснуць на тры кропкі ў шапцы сайта, каб з'явілася меню. Выбраць пункт "Стварыць артыкул", і перайсці на старонку рэдактара, ці скарыстацца спасылкай: https://bel-geek.com/editor/add

Пры стварэнні артыкула абавязкова трэба дадаць назву артыкула, імя аўтара ды тэгі ў адпаведныя палі формы, пажадана дадаць апісанне.

Напрыклад:

Як бачна на малюнку, з правага боку будзе панэль, на якой знаходзіцца прадагляд артыкула. З левага боку - рэдактар.

Важна!

Захоўвайце час ад часу свае артыкулы з дапамогай кнопкі "Захаваць" (працуем над аўтазахаваннем), каб выпадкова не згубіць напісанае. Таксама можна захаваць напісанае і адкласці работу з артыкулам на іншы дзень.

Калі вы ўжо вядзеце блогі ў іншых сацыяльных сетках, то дадавайце спасылкі на іх у сваіх артыкулах, каб чытачы маглі знайсці больш цікавай ім інфармацыі.

Калі артыкул будзе гатовы, трэба перавесці перамыкач над рэдактарам тэксту "Паказваць усім" у актыўнае становішча і націснуць кнопку "Захаваць".

PS. Калі вы ствараеце пераклад - то абавязкова пакідайце спасылкі на арыгінал.


Карысныя спасылкі, якімі можна карыстацца падчас напісання артыкулаў:

Мноства слоўнікаў: https://slounik.org/

Правапіс слоў у розных склонах і ліках: https://starnik.by/

Артыкул
LoveJS, 2023-08-06

Вітанкі! Сення невялікі гайд пра тое як наладзіць праект для працы з Github Copilot. Таксама не забудзьце азнаеміцца з папярэднімі артыкуламі:


Надзейны AI‑workflow з GitHub Copilot: поўны гайд з прыкладамі (2025)

Гэты гайд паказвае, як збудаваць прадказальныя і паўтаральныя AI‑працэсы (workflow) у вашым рэпазіторыі і IDE/CLI праз агентныя прымітывы (agentic primitives) і інжынерыю кантэксту (context engineering). Тут вы знойдзеце структуру файлаў, гатовыя шаблоны, правілы бяспекі і таксама каманды.

⚠️ Заўвага: функцыянал prompt‑файлаў і агентны рэжым у IDE/CLI можа змяняцца - прыстасоўвайце гайд да канкрэтнай версіі вашага Copilot і VS Code.


1) Абагульненне: з чаго складаецца workflow

Асноўная мэта - гэта раскласці працу агента на празрыстыя крокі і зрабіць іх кіраванымі. Для гэтага існуюць наступныя інструменты:

  • Custom Instructions (.github/copilot-instructions.md) - глабальныя правілы праекта (як збіраць, як тэставаць, стыль кода, палітыкі PR).
  • Path‑specific Instructions (.github/instructions/*.instructions.md) - даменныя правілы з таргетаваннем праз applyTo (glob‑шаблоны).
  • Chat Modes (.github/chatmodes/*.chatmode.md) - спецыялізаваныя рэжымы чату (напрыклад, Plan/Frontend/DBA) з фіксаванымі інструментамі і мадэллю.
  • Prompt Files (.github/prompts/*.prompt.md) - паўторныя сцэнары/«праграмы» для тыпавых задач (агляды, рэфактарынг, генерацыя).
  • Context helpers (docs/*.spec.md, docs/*.context.md, docs/*.memory.md) - спецыфікацыі, даведкі і памяць праекта для дакладнага кантэксту.
  • MCP servers (.vscode/mcp.j son або праз UI) - інструменты і знешнія рэсурсы, якімі можа карыстацца агент.

2) Файлавая структура праекту

Наступная структура адпавядае разгледжаным вышэй інструментам і дапамагае скласці паўнавартасны workflow для працы агентаў.

text
1.github/
2  copilot-instructions.md
3  instructions/
4    backend.instructions.md
5    frontend.instructions.md
6    actions.instructions.md
7  prompts/
8    implement-from-spec.prompt.md
9    security-review.prompt.md
10    refactor-slice.prompt.md
11    test-gen.prompt.md
12  chatmodes/
13    plan.chatmode.md
14    frontend.chatmode.md
15.vscode/
16  mcp.json
17docs/
18  feature.spec.md
19  project.context.md
20  project.memory.md

3) Файлы і іх прызначэнні - тэхнічнае тлумачэнне

А зараз разгледзім асобна кожны з інтсрументаў і іх ролю. Ніжэй - «як гэта ўладкавана пад капотам»: што за файлы, навошта яны, як яны ўплываюць на разуменне задачы агентам, і ў якім парадку аб’ядноўваюцца (merge/override). Код‑прыклады прадстаўленыя далей адпавядаюць спецыфікацыі.

Файл/папкаШто гэтаНавоштаДзе дзейнічае
.github/copilot-instructions.mdГлабальныя правілы праектаАднолькавыя стандарты для ўсіх адказаўУвесь рэпазіторый
.github/instructions/*.instructions.mdТаргетаваныя інструкцыі для пэўных шляхоўРозныя правілы для фронту/беку/CIТолькі для файлаў, што трапляюць пад applyTo
.github/chatmodes/*.chatmode.mdНабор правіл + дазволеных інструментаў для рэжыму чатуПадзяляць фазы працы (план/рэфактар/DBA)Калі выбраны гэты chat mode
.github/prompts/*.prompt.md«Сцэнар» задач (workflow)Паўторна запускаць тыпавыя працэсыКалі запускаецца праз /name або CLI
docs/*.spec.mdСпецыфікацыіДакладная пастаноўка задачыКалі вы іх @‑згадваеце ў дыялогу
docs/*.context.mdСталыя даведкіСкарочваць «шум» у чатахПа спасылцы/@‑згадцы
docs/*.memory.mdПамяць праектаФіксаваць рашэнні, каб не паўтарацьПа спасылцы/@‑згадцы
.vscode/mcp.jsonКанфіг MCP сервераўДоступ да GitHub/інш. інструментаўДля гэтага workspace

Парадак аб’яднання правіл і настроек: Prompt frontmatter → Chat mode → Repo/Path instructions → Defaults.


І так разгледзім зараз кожны інструмент паасобку.

3.1. Глабальныя правілы - .github/copilot-instructions.md

Што гэта: Markdown‑файл з кароткімі, правяраемымі правіламі: як збіраць, як тэставаць, стыль кода, палітыкі PR.

Навошта: Каб усе адказы апіраліся на адзіныя стандарты (без дублявання ў кожным prompt).

Як працуе: Файл аўтаматычна трапляе ў сістэмны кантэкст для ўсіх пытанняў у межах рэпазіторыя. Ніякіх applyTo (пра яго далей) - дзейнічае ўсюды.

Мінімальны прыклад:

md
1# Repository coding standards
2- Build: `npm ci && npm run build`
3- Tests: `npm run test` (coverage ≥ 80%)
4- Lint/Typecheck: `npm run lint && npm run typecheck`
5- Commits: Conventional Commits; keep PRs small and focused
6- Docs: update `CHANGELOG.md` in every release PR

Парады.

  1. Кароткія пункты;
  2. без агульных фраз;
  3. толькі тое, што можа паўплываць на вынік (build/test/lint/type/PR policy).

3.2. Таргетаваныя інструкцыі - .github/instructions/*.instructions.md

Што гэта: Модульныя правілы з YAML‑frontmatter applyTo - glob‑шаблоны файлаў, для якіх яны ўключаюцца.

Навошта: Адрозніваць стандарты для розных зон (frontend/backend/CI). Дазваляе кіраваць кантэкстам у залежнасці ад тыпу задачы.

Як працуе: Пры апрацоўцы задачы Copilot шукае ўсе *.instructions.md, чые applyTo супадаюць з актуальным кантэкстам (файлы, якія вы абмяркоўваеце/рэдагуеце). Супадаючыя правілы дадаюцца да глабальных.

Прыклад:

md
1---
2applyTo: "apps/web/**/*.{ts,tsx},packages/ui/**/*.{ts,tsx}"
3---
4- React: function components and hooks
5- State: Zustand; data fetching with TanStack Query
6- Styling: Tailwind CSS; avoid inline styles except dynamic cases
7- Testing: Vitest + Testing Library; avoid unstable snapshots

Увага.

  1. Не дубліруйце тое, што ўжо ёсць у глабальных правілах;
  2. правярайце, што glob сапраўды трапляе ў патрэбныя шляхі.

3.3. Chat modes - .github/chatmodes/*.chatmode.md

Што гэта: файлы‑канфігі, што задаюць аперацыйны рэжым агента для дыялогу: кароткае апісанне, мадэль (пры патрэбе) і спіс дазволеных інструментаў.

Навошта: каб аддзяліць фазы працы (планаванне/фронтэнд/DBA/бяспека) і абмежаваць інструменты у кожнай фазе. Так вынікі становяцца больш прадказальнымі.

Структура файла:

md
1---
2description: "Plan - analyze code/specs and propose a plan; read-only tools"
3model: GPT-4o
4tools: ['search', 'codebase']
5---
6In this mode:
7- Produce a structured plan with risks and unknowns
8- Do not edit files; output a concise task list instead

Як працуе:

  • Дзеянне chat mode распаўсюджваецца на бягучы чат у IDE.
  • Калі актывуеце prompt‑файл, яго frontmatter мае прыярытэт над chat mode (можа змяніць мадэль і звузіць tools).
  • Фактычна дазволеныя інструменты : (tools chat mode) / (tools prompt) / (CLI‑флагі --allow/--deny).

Кіраванне і пераключэнне:

  • У IDE (VS Code):

    1. Адкрыйце панэль Copilot Chat.
    2. У верхняй панэлі абярыце патрэбны chat mode з выпадаючага спісу (спіс збіраецца з .github/chatmodes/*.chatmode.md + убудаваныя рэжымы).
    3. Рэжым дзейнічае толькі для гэтага трэда. Каб змяніць - абярыце іншы або стварыце новы трэд з патрэбным рэжымам.
    4. Праверыць актыўны рэжым можна ў загалоўку/панэлі размовы і ў References (файл *.chatmode.md будзе пазначаны).
  • У CLI: *(неяк кастыльна, лепш праз промпты) *

    • Пераключальніка рэжыму як флага звычайна няма; энкодзьце патрэбныя абмежаванні ў frontmatter prompt‑файла і/або праз флагі --allow-tool/--deny-tool.
    • Можна даць інструкцыю ў першым радку: “Use the i18n chat mode.” - калі версія падтрымлівае, агент пераключыцца; калі не, frontmatter prompt усё роўна зафіксуе інструменты.
  • Без пераключэння рэжыму: запускайце prompt з патрэбным tools: у frontmatter - ён абмяжуе інструменты незалежна ад рэжыму чату.

Дыягностыка: калі агент выкарыстоўвае «лішнія» інструменты або не бачыць патрэбныя - праверце: (1) які chat mode выбраны; (2) tools у frontmatter prompt; (3) флагі --allow/--deny у CLI; (4) References у адказе (бачныя файлы *.chatmode.md/*.prompt.md).


3.4. Prompt files - .github/prompts/*.prompt.md

Што гэта: Файлы‑сцэнары для паўторных задач. Складаюцца з YAML‑frontmatter (канфіг) і цела (інструкцыі/крокі/критэрыі прыёмкі). Запускаюцца ў чаце як /name або праз CLI.

Калі выкарыстоўваць. Калі трэба зрабіць працэс прадказальным і аўтаматызаваным: агляд PR, генерацыя тэстаў, рэалізацыя фіч па спецыфікацыі і г.д.

Структура frontmatter

  • description - кароткая мэта сцэнару.
  • mode - ask (Q&A, без змен файлаў) · edit (лакальныя змены ў адкрытых файлах) · agent (шматкрокавы працэс з інструментамі).
  • model - жаданы мадэльны профіль.
  • tools - спіс дазволеных інструментаў для сцэнару (абмяжоўвае нават тое, што дазволіў chat mode).

Алгарытм выканання (паслядоўнасць)

  1. Дзе запускаем:

    • У чаце: у полі паведамлення ўводзіце /імя‑prompt і аргументы.
    • У CLI: выклікаеце copilot і перадаеце радок з /імя‑prompt … (інтэрактыўна або праз heredoc / флаг -p).
  2. Збор кантэксту: Copilot будуе схему выканання ў такім парадку: repo‑instructionspath‑instructions (applyTo)chat modefrontmatter prompt (мае найвышэйшы прыярытэт і можа звузіць інструменты/змяніць мадэль).

  3. Парсінг параметраў (дзе і як):

    • У чаце: параметры ідуць у тым жа паведамленні пасля назвы, напрыклад: /security-review prNumber=123 target=apps/web.
    • У CLI: параметры ідуць у тым жа радку /… у stdin або пасля флага -p.
    • Унутры prompt‑файла яны даступныя як ${input:імя}. Калі патрэбнага параметра няма - prompt можа запытаць яго тэкстава ў дыялогу.
  4. Вырашэнне дазволаў інструментаў:

    • Фактычна дазволеныя інструменты : (chat mode tools) / (prompt tools) /(CLI‑флагі --allow/--deny).
    • Калі інструмент забаронены, адпаведны крок пропускаецца або патрабуе пацвярджэння/змены палітык.
  5. Выканаўчыя крокі з цела prompt: агент ідзе строга па парадку Steps, робячы толькі тое, што дазволена палітыкамі/інструментамі (пошук у кодзе, генерацыя diff, запуск тэстаў і г.д.). Для патэнцыйна рызыковых дзеянняў просіцца пацвярджэнне.

  6. Validation gates: у канцы prompt запускае праверкі (build/tests/lint/typecheck, праверка фармату выхаду). Калі gate не пройдзены - вяртаецца спіс праблем і прапанова наступных крокаў (без аўта‑мерджа/запісаў).

  7. Дзе з'яўляецца вынік (што і дзе бачым):

    • Асноўны адказ - у панэлі чату (IDE) або ў stdout (CLI): табліцы, спісы, тэкставыя справаздачы, code blocks з diff.
    • Змены ў файлах - у вашым working tree: у IDE бачыце diff/тыповыя прапанаваныя патчы; у CLI - файлы змяняюцца лакальна (калі гэта дазволена інструментамі).
    • Дадатковыя артыфакты - напрыклад, каментар у PR, калі дазволены інструменты GitHub і так прапісана ў prompt.

Выніковы фармат і праверкі (рэкамендавана)

  • Абавязкова задавайце фармат выхаду (напрыклад, табліца «issue | file | line | severity | fix»).
  • Дадайце validation gates: build/tests/lint/typecheck; патрабаванне unified‑diff для прапанаваных змен; TODO‑спіс на вырашэнне спрэчных пытанняў.

Прыклад поўнага prompt‑файла

md
1---
2mode: 'agent'
3model: GPT-4o
4tools: ['search/codebase']
5description: 'Implement a feature from a spec'
6---
7Goal: Implement the feature described in @docs/feature.spec.md.
8
9Steps:
101) Read @docs/feature.spec.md and produce a short implementation plan (bullets)
112) List files to add/modify with paths
123) Propose code patches as unified diff; ask before installing new deps
134) Generate minimal tests and run them (report results)
14
15Validation gates:
16- Build, tests, lint/typecheck must pass
17- Output includes the final diff and a TODO list for anything deferred
18- If any gate fails, return a remediation plan instead of "done"

Анты‑патэрны

  • «Вада» ў апісанні: трымайце description 1–2 радкі.
  • Адсутнасць фармату выніку.
  • Празмерная колькасць інструментаў: дазваляйце толькі патрэбныя (tools).

Хуткі запуск

  • Чат: /implement-from-spec
  • CLI: copilot <<<'/implement-from-spec' або copilot -p "Запусці /implement-from-spec"

3.5. Кантэкст‑файлы - specs/context/memory

Што гэта: Дапаможныя Markdown‑файлы (не спецыяльныя тыпы), якія вы @‑згадваеце ў дыялогу/прампце. Звычайна размешчаны як дакументацыя.

  • docs/*.spec.md - дакладная пастаноўка (goal, acceptance, edge cases, non‑goals).
  • docs/*.context.md - кароткія даведкі (API policies, security, UI styleguide, SLA).
  • docs/*.memory.md - «журнал рашэнняў» з датамі і прычынамі, каб agent не вяртаўся да старых спрэчак.

Прыклад:

md
1# Feature: Export report to CSV
2Goal: Users can export the filtered table to CSV.
3Acceptance criteria:
4- "Export CSV" button on /reports
5- Server generates file ≤ 5s for 10k rows
6- Column order/headers match UI; locale-independent values
7Edge cases: empty values, large numbers, special characters
8Non-goals: XLSX, multi-column simultaneous filters

3.6. MCP - .vscode/mcp.json

Што гэта: Канфігурацыя Model Context Protocol сервераў (напрыклад, GitHub MCP), якія адкрываюць інструменты для агента. Мы разглядалі гэта раней у артыкуле Ствараем свой першы MCP-сервер

Навошта: Каб агент мог чытаць PR/issues, запускаць тэсты, працаваць з БД/браузерам - у межах дазволаў.

Прыклад:

json
1{
2  "servers": {
3    "github-mcp": {
4      "type": "http",
5      "url": "https://api.githubcopilot.com/mcp"
6    }
7  }
8}

Бяспека. Падлучайце толькі давераныя серверы; выкарыстоўвайце allow/deny‑спісы інструментаў у prompt/chat mode/CLI.


3.7. Агульны парадак аб’яднання кантэксту і прыярытэтаў (rules & tools)

  1. Instructions: copilot-instructions + усе *.instructions.md з applyTo, якія супалі з актуальнымі шляхамі. Канкрэтная інструкцыя дадаецца да агульнага кантэксту.
  2. Chat mode: абмяжоўвае набор інструментаў і (пры патрэбе) мадэль для сесіі.
  3. Prompt frontmatter: мае найвышэйшы прыярытэт; можа абмежаваць інструменты і перазапісаць мадэль.
  4. Кантэкст: тое, што вы @‑згадаеце, гарантавана трапіць ва ўвагу мадэлі.

Дыягностыка. Правярайце ў выдачы раздзел References - там бачна, якія файлы інструкцый былі ўлічаныя і які prompt быў запушчаны.

3.8. Прыклад - поўны i18n‑цыкл з Goman MCP (стварэнне/абнаўленне/ачыстка)

Ніжэй - дакладны працэс і шаблоны, як гарантаваць: (а) пры стварэнні UI‑кампанентаў ключы лакалізацыі ствараюцца/абнаўляюцца ў Goman; (б) пры выдаленні кампанентаў - выяўляюцца і (пасля пацвярджэння) выдаляюцца непатрэбныя запісы.

Код‑фрагменты і frontmatter - англійскай, па дыяпазоне дакументацыі.

3.8.1. MCP канфіг - падключаем Goman

/.vscode/mcp.json

json
1{
2  "servers": {
3    "goman-mcp": {
4      "type": "http",
5      "url": "https://mcp.goman.live/mcp",
6      "headers": {
7        "apiKey": "<YOUR_API_KEY>",
8        "applicationid": "<YOUR_APPLICATION_ID>"
9      }
10    }
11  }
12}

3.8.2. Repo/Path‑правілы - прымушаем i18n па змаўчанні

/.github/instructions/frontend.instructions.md (дапаўненне)

md
1---
2applyTo: "apps/web/**/*.{ts,tsx}"
3---
4- All user‑facing strings **must** use i18n keys (no hardcoded text in JSX/TSX)
5- Key naming: `<ui_component_area>.<name>` (e.g., `ui_button_primary.label`)
6- When creating components, run `/i18n-component-scaffold` and commit both code and created keys
7- When deleting components, run `/i18n-prune` and confirm removal of unused keys

3.8.3. Chat mode - абмежаваны набор інструментаў i18n

/.github/chatmodes/i18n.chatmode.md

md
1---
2description: "i18n - manage localization keys via Goman MCP; enforce no hardcoded strings"
3model: GPT-4o
4tools: ["files","goman-mcp:*"]
5---
6In this mode, prefer:
7- Creating/updating keys in Goman before writing code
8- Checking for existing keys and reusing them
9- Producing a table of changes (created/updated/skipped)

3.8.4. Prompt - стварэнне кампанента + ключы ў Goman

/.github/prompts/i18n-component-scaffold.prompt.md

md
1---
2mode: 'agent'
3model: GPT-4o
4tools: ['files','goman-mcp:*']
5description: 'Scaffold a React component with i18n keys synced to Goman'
6---
7Inputs: componentName, namespace (e.g., `ui.button`), path (e.g., `apps/web/src/components`)
8
9Goal: Create a React component and ensure all user‑visible strings use i18n keys stored in Goman.
10
11Steps:
121) Plan the component structure and list all user‑visible strings
132) For each string, propose a key under `${namespace}`; reuse if it exists
143) Using Goman MCP, create/update translations for languages: en, be, ru (values may be placeholders)
154) Generate the component using `t('<key>')` and export it; add a basic test
165) Output a Markdown table: key | en | be | ru | action(created/updated/reused)
17
18Validation gates:
19- No hardcoded literals in the produced .tsx
20- Confirm Goman actions succeeded (report tool responses)
21- Tests and typecheck pass

Прыклад кода кампанента:

tsx
1import { t } from '@/i18n';
2import React from 'react';
3
4type Props = { onClick?: () => void };
5
6export function PrimaryButton({ onClick }: Props) {
7  return (
8    <button aria-label={t('ui.button.primary.aria')} onClick={onClick}>
9      {t('ui.button.primary.label')}
10    </button>
11  );
12}

3.8.5. Prompt - ачысціць непатрэбныя ключы пры выдаленні

/.github/prompts/i18n-prune.prompt.md

md
1---
2mode: 'agent'
3model: GPT-4o
4tools: ['files','goman-mcp:*']
5description: 'Find and prune unused localization keys in Goman after code deletions'
6---
7Inputs: pathOrDiff (e.g., a deleted component path or a PR number)
8
9Goal: Detect keys that are no longer referenced in the codebase and remove them from Goman after confirmation.
10
11Steps:
121) Compute the set of removed/renamed UI elements (scan git diff or provided paths)
132) Infer candidate keys by namespace (e.g., `ui.<component>.*`) and check code references
143) For keys with **zero** references, ask for confirmation and delete them via Goman MCP
154) Produce a Markdown table: key | status(kept/deleted) | reason | notes
16
17Validation gates:
18- Never delete keys that still have references
19- Require explicit confirmation before deletion
20- Provide a rollback list of deleted keys

3.8.6. Prompt - сінхранізацыя і праверка прапушчаных лакалізацый (апцыянальна)

/.github/prompts/i18n-sync.prompt.md

md
1---
2mode: 'agent'
3model: GPT-4o
4tools: ['files','goman-mcp:*']
5description: 'Sync new/changed i18n keys and check for missing translations'
6---
7Goal: Compare code references vs Goman and fill gaps.
8
9Steps:
101) Scan code for `t('...')` keys under provided namespaces
112) For missing keys in Goman - create them (placeholder text ok)
123) For missing languages - create placeholders and report coverage
134) Output coverage table: key | en | be | de | missing

4) Як гэтым карыстацца (IDE і CLI)

4.1. У VS Code / іншай IDE

  • Адкрыйце Copilot Chat - выберыце Agent/Edit/Ask у выпадаючым меню.
  • Для prompt‑файлаў проста набярыце /назва‑файла без пашырэння (напр. /security-review).
  • Дадавайце кантэкст з дапамогай @‑згадвання файлаў і каталогаў.
  • Пераключайце chat mode (Plan/Frontend/DBA), калі задача змянілася.

4.2. У Copilot CLI (тэрмінал)

  • Усталёўка (прыклад): npm install -g @github/copilot → запусціце copilot.
  • Інтэрактыўна: «Запусці /implement-from-spec па @docs/feature.spec.md».
  • Праграмна/у CI: copilot -p "Рэалізуй фічу з @docs/feature.spec.md" --deny-tool shell("rm *").
  • Дадайце/абмяжуйце інструменты флагамі: --allow-all-tools, --allow-tool, --deny-tool (глабальныя або па шаблонах, напр. shell(npm run test:*)).

4.3. Cookbook каманд для CLI (chat modes і prompts)

Ніжэй - гатовыя рэцэпты. Усе каманды выконваюцца ў карані праекта і падтрымліваюць вашыя deny/allow‑спісы.

A. Запусціць prompt‑файл у інтэрактыўнай сесіі

bash
1copilot
2# унутры сесіі (радок уводзіцца як ёсць)
3/security-review prNumber=123

B. Запусціць prompt‑файл неінтэрактыўна (heredoc)

bash
1copilot <<'EOF'
2/security-review prNumber=123
3EOF

C. Перадаць параметры prompt‑файлу

bash
1copilot <<'EOF'
2/implement-from-spec path=@docs/feature.spec.md target=apps/web
3EOF

Унутры prompt можна чытаць значэнні праз ${input:target} і ${input:path}.

D. Запусціць prompt з бяспечнымі дазволамі інструментаў

bash
1copilot --allow-tool "shell(npm run test:*)" \
2        --deny-tool  "shell(rm*)" \
3        <<'EOF'
4/security-review prNumber=123
5EOF

E. Выкарыстаць chat mode (спецыялізаваны рэжым) у CLI

bash
1copilot
2# унутры сесіі - папрасіце перайсці ў патрэбны рэжым і запусціце prompt
3Use the i18n chat mode.
4/i18n-component-scaffold componentName=PrimaryButton namespace=ui.button path=apps/web/src/components

Калі ваш кліент падтрымлівае выбар рэжыму праз меню - абярыце i18n перад запускам prompt. Калі не - пазначайце абмежаванні ў самым prompt (frontmatter tools і правілы ў целе файла).

F. Адправіць спасылкі на файлы/дыфы як кантэкст

bash
1copilot <<'EOF'
2Please review these changes:
3@apps/web/src/components/PrimaryButton.tsx
4@docs/feature.spec.md
5/security-review prNumber=123
6EOF

G. Змяніць мадэль для канкрэтнага запуску

Рэкамендуем указваць мадэль у frontmatter prompt‑файла. Калі падтрымліваецца флаг, можна вызначыць мадэль пры запуску:

bash
1copilot --model GPT-4o <<'EOF'
2/implement-from-spec
3EOF

H. i18n‑цыкл з Goman MCP (CHAT)

У чат‑трэды запускайце паслядоўна:

text
1/i18n-component-scaffold componentName=PrimaryButton namespace=ui.button path=apps/web/src/components
2/i18n-prune pathOrDiff=@last-diff
3/i18n-sync namespace=ui.button

Што атрымаеце:

  • выніковыя табліцы/справаздачы - у панэлі чату;
  • змяненні кода - у вашым working tree (IDE пакажа diff);
  • ніякіх CLI‑камандаў для Goman MCP тут не патрабуецца.

5) Інжынерыя кантэксту: як не «заліваць» лішняе

  1. Дзяліце сесіі па фазах: План → Рэалізацыя → Агляд/Тэсты. У кожнай - свой Chat Mode.
  2. Падключайце толькі патрэбныя інструкцыі: праз path‑specific *.instructions.md замест «усё ў кучы».
  3. Памяць праекта: рабіце кароткія ADR у project.memory.md - гэта зніжае «забыццё» агента паміж задачамі.
  4. Кантэкст‑хэлперы: частыя даведкі (API/бяспека/UI) трымайце ў *.context.md і спасылайцеся на іх з prompt‑файлаў.
  5. Канцэнтрацыя на задачы: у prompt‑файлах заўсёды пішыце мэту, крокі і фармат выніку (табліца, diff, чэк‑ліст).

6) Бяспека і кіраванне інструментамі

  • Яўнае пацвярджэнне запуску камандаў/інструментаў. У CLI выкарыстоўвайце --deny-tool па змаўчанні і дадавайце лакальныя allow‑спісы.
  • Патэрны дазволаў: дазвольце толькі тое, што трэба (shell(npm run test:*), playwright:*), забараніце небяспечнае (shell(rm*)).
  • Сакрэты: ніколі не кладзіце ключы ў prompt/інструкцыі; карыстайцеся GitHub Environments або .env з .gitignore.
  • Любы MCP - толькі з давераных крыніц; аглядайце код/канфіг перад уключэннем.
  • Праверка патчаў: у prompt‑файлах патрабуйце unified‑diff і тлумачэнні - гэта спросціць рэўю.

7) CI/CD рэцэпт (апцыянальны прыклад)

Пацвярджанне, што «ўсё збіраецца»: запускаем Copilot CLI ў «сухім» рэжыме, каб атрымаць каментар да PR.

yaml
1# .github/workflows/ai-review.yml
2name: AI Review (Copilot CLI)
3on:
4  pull_request:
5    types: [opened, synchronize, reopened]
6
7jobs:
8  ai_review:
9    runs-on: ubuntu-latest
10    permissions:
11      contents: read
12      pull-requests: write
13    steps:
14      - uses: actions/checkout@v4
15      - uses: actions/setup-node@v4
16        with:
17          node-version: 22
18      - name: Install Copilot CLI
19        run: npm install -g @github/copilot
20      - name: Run security review prompt (no dangerous tools)
21        env:
22          PR: ${{ github.event.pull_request.number }}
23        run: |
24          copilot -p "Запусці /security-review з prNumber=${PR}" \
25            --deny-tool shell("rm*") --deny-tool shell("curl*") \
26            --allow-tool shell("npm run test:*") \
27            --allow-tool "github:*" \
28            > ai-review.txt || true
29      - name: Comment PR with results
30        if: always()
31        run: |
32          gh pr comment ${{ github.event.pull_request.number }} --body-file ai-review.txt

Парада: захоўвайце строгія deny/allow‑спісы; не давайце агенту «поўнай свабоды» ў CI.


8) невялікія сцэнары і парады якія могуць спатрэбіцца

  • З ідэі да PR: /plan - абмеркаванне плана - /implement-from-spec → лакальныя тэсты - PR - /security-review.
  • Падтрымка: /refactor-slice для лакальных паляпшэнняў без змен паводзінаў.
  • Тэсты: /test-gen на новыя модулі + ручное дапаўненне гранічных сцэнарыяў.
  • Паступовае ўвядзенне: пачынайце з 1–2 prompt‑файлаў і аднаго chat‑mode; далей пашырайце.

9) Праверкі якасці (validation gates)

У кожным prompt‑файле зафіксуйце «што лічыцца гатовым»:

  • Фармат выхаду: табліца рызыкаў, unified‑diff, чэк‑ліст.
  • Аўтаматычныя праверкі: build, unit/integration‑тэсты, lint/typecheck.
  • Мануальная праверка: «OK to merge?» з аргументацыяй і residual‑рызыкамі.

10) Анты‑патэрны і лайфхакі

  • Анты‑патэрн: адзін велізарны instructions.md. Лепш замяніце на некалькі *.instructions.md з applyTo.
  • Анты‑патэрн: агульныя словы замест правілаў. Лепш пішыце канкрэтныя каманды/крокі.
  • Анты‑патэрн: запуск небяспечных shell‑каманд без gate. Карыстайцеся deny/allow і ручным пацвярджэннем.
  • Анты‑патэрн: «забыліся» пра specs/memory. Вядзіце feature.spec.md і project.memory.md.
  • Анты‑патэрн: змешванне задач у адной сесіі. Пад кожную фазу стварайце свой Chat Mode.

11) Чэк‑ліст імплементацыі

  1. Дадайце .github/copilot-instructions.md (мінімум 5–8 булшытаў пра зборку/тэсты/стыль).
  2. Стварыце 1–2 *.instructions.md з applyTo (frontend/backend або workflows).
  3. Дадайце plan.chatmode.md і адзін prompt (напрыклад, implement-from-spec.prompt.md).
  4. Стварыце docs/feature.spec.md і docs/project.memory.md.
  5. Уключыце MCP (GitHub MCP як мінімум) праз .vscode/mcp.json.
  6. Запусціце workflow у VS Code: /implement-from-spec - праверка - PR.
  7. (Апцыянальна) Дадайце просты AI‑агляд у CI праз Copilot CLI з жорсткім deny/allow‑спісам.

12) Пытанні і адказы (FAQ)

Q: Як пераканацца, што Copilot «бачыць» мае інструкцыі? A: У адказах глядзіце рэзюмэ/References; акрамя таго, трымайце правілы кароткімі і канкрэтнымі.

Q: Ці можна дынамічна перадаваць параметры ў prompt‑файл? A: Так, звычайна праз падстаўныя зменныя (кшталту ${prNumber}) або проста праз тэкст запыту пры запуску /prompt у чаце.

Q: Дзе лепш захоўваць сакрэты для MCP? A: У Environments GitHub або ў лакальных сакрэт‑менеджарах; не ў .prompt.md/.instructions.md.

Q: Што выбраць: Chat Mode vs Prompt File? A: Chat Mode задае «раму» (мадэль/інструменты/роля). Prompt File - «сцэнар» у гэтай раме.


13) Далейшыя крокі

  • Дадайце другі prompt для вашага найбольш частага «ручнога» працэсу.
  • Увядзіце project.memory.md як абавязковы пункт пасля ўсіх архітэктурных рашэнняў.
  • Паступова пераносьце калектыўныя веды ў *.context.md і спасылайцеся на іх з prompt‑файлаў.

Appendix A - Quickstart templates

All keys, paths, and flags match the docs (Oct 28, 2025).

/.github/copilot-instructions.md - repository-wide rules

md
1# Repository coding standards
2- Build: `npm ci && npm run build`
3- Tests: `npm run test` (coverage ≥ 80%)
4- Lint/Typecheck: `npm run lint && npm run typecheck`
5- Commits: Conventional Commits; keep PRs small and focused
6- Docs: update `CHANGELOG.md` in every release PR

/.github/instructions/frontend.instructions.md - path‑specific rules

md
1---
2applyTo: "apps/web/**/*.{ts,tsx},packages/ui/**/*.{ts,tsx}"
3---
4- React: function components and hooks
5- State: Zustand; data fetching with TanStack Query
6- Styling: Tailwind CSS; avoid inline styles except dynamic cases
7- Testing: Vitest + Testing Library; avoid unstable snapshots

/.github/instructions/backend.instructions.md - path‑specific rules

md
1---
2applyTo: "services/api/**/*.{ts,js},packages/server/**/*.{ts,js}"
3---
4- HTTP: Fastify; version APIs under `/v{N}`
5- DB access: Prisma; migrations via `prisma migrate`
6- Security: schema validation (zod), rate limits, audit logs
7- Testing: integration tests via `vitest --config vitest.integration.ts`

/.github/instructions/actions.instructions.md - GitHub Actions

md
1---
2applyTo: ".github/workflows/**/*.yml"
3---
4- Keep jobs small; reuse via composite actions
5- Cache: `actions/setup-node` + built-in cache for npm/pnpm
6- Secrets: only through GitHub Environments; never hardcode

/.github/chatmodes/plan.chatmode.md - custom chat mode

md
1---
2description: "Plan - analyze code/specs and propose a plan; read-only tools"
3model: GPT-4o
4tools:
5  - "search/codebase"
6---
7In this mode:
8- Produce a structured plan with risks and unknowns
9- Do not edit files; output a concise task list instead

/.github/prompts/security-review.prompt.md - prompt file

md
1---
2mode: 'agent'
3model: GPT-4o
4tools: ['search/codebase']
5description: 'Perform a security review of a pull request'
6---
7Goal: Review PR ${input:prNumber} for common security issues.
8
9Checklist:
10- Authentication/authorization coverage
11- Input validation and output encoding (XSS/SQLi)
12- Secret management and configuration
13- Dependency versions and known CVEs
14
15Output:
16- A Markdown table: issue | file | line | severity | fix
17- If trivial, include a unified diff suggestion

/.github/prompts/implement-from-spec.prompt.md - prompt file

md
1---
2mode: 'agent'
3model: GPT-4o
4tools: ['search/codebase']
5description: 'Implement a feature from a spec'
6---
7Your task is to implement the feature described in @docs/feature.spec.md.
8
9Steps:
101) Read @docs/feature.spec.md and summarize the plan
112) List files to add or modify
123) Propose code changes; ask before installing new dependencies
134) Generate minimal tests and run them
14
15Validation gates:
16- Build, tests, lint/typecheck must pass
17- Provide a TODO list for anything deferred

/.github/prompts/refactor-slice.prompt.md - prompt file

md
1---
2mode: 'agent'
3model: GPT-4o
4description: 'Refactor a specific code slice without changing behavior'
5---
6Goal: Improve readability and reduce side effects in @src/feature/* while keeping behavior unchanged.
7Criteria: fewer side effects, clearer structure, all tests pass.

/.github/prompts/test-gen.prompt.md - prompt file

md
1---
2mode: 'agent'
3model: GPT-4o-mini
4description: 'Generate tests for a given file/module'
5---
6Ask the user to @-mention the target file; generate unit/integration tests and edge cases.

/docs/feature.spec.md - spec skeleton

md
1# Feature: Export report to CSV
2Goal: Users can export the filtered table to CSV.
3Acceptance criteria:
4- "Export CSV" button on /reports
5- Server generates file ≤ 5s for 10k rows
6- Column order/headers match UI; locale-independent values
7Edge cases: empty values, large numbers, special characters
8Non-goals: XLSX, multi-column simultaneous filters

/.vscode/mcp.json - minimal MCP config

json
1{
2  "servers": {
3    "github-mcp": {
4      "type": "http",
5      "url": "https://api.githubcopilot.com/mcp"
6    }
7  }
8}

Appendix B - Operational extras (CLI & CI examples)

These examples complement Appendix A; they cover runtime/automation usage and do not duplicate templates above.

Copilot CLI - safe tool permissions (interactive/CI)

bash
1# Start an interactive session in your repo
2copilot
3
4# Allow/deny specific tools (exact flags per GitHub docs)
5copilot --allow-tool "shell(npm run test:*)" --deny-tool "shell(rm*)"
6
7# Run a prompt file non-interactively (example)
8copilot <<'EOF'
9/security-review prNumber=123
10EOF

GitHub Actions - comment review results on a PR

yaml
1name: AI Security Review (Copilot CLI)
2on:
3  pull_request:
4    types: [opened, synchronize, reopened]
5
6jobs:
7  review:
8    runs-on: ubuntu-latest
9    permissions:
10      contents: read
11      pull-requests: write
12    steps:
13      - uses: actions/checkout@v4
14      - uses: actions/setup-node@v4
15        with:
16          node-version: 22
17      - name: Install Copilot CLI
18        run: npm install -g @github/copilot
19      - name: Run security review prompt
20        env:
21          PR: ${{ github.event.pull_request.number }}
22        run: |
23          copilot --allow-tool "shell(npm run test:*)" --deny-tool "shell(rm*)" <<'EOF'
24          /security-review prNumber=${PR}
25          EOF
26      - name: Post results
27        run: |
28          gh pr comment ${{ github.event.pull_request.number }} --body "Copilot review completed. See artifacts/logs for details."

Крыніцы

Custom chat modes in VS Code

Use MCP servers in VS Code

Adding repository custom instructions for GitHub Copilot

How to build reliable AI workflows with agentic primitives and context engineering

🙌 PS:

Дзякуй, што дачытаў(-ла) да канца! Калі матэрыял быў карысны - будзем вельмі рады, калі:

  • 💬 Напішаш каментар ці пытанне,
  • 📨 Падкінеш ідэю для наступнага артыкула,
  • 🚀 Або проста падзелішся з сябрамі!

Тэхналогіі становяцца бліжэй, калі іх разумець. І ты ўжо зрабіў(ла) першы важны крок 💪

Да сустрэчы ў наступным артыкуле! Дзякуй вам за падтрымку!

AI
Copilot
Admin, 2025-10-28

goman

Прывітанне, спадарства!

Як вы, напэўна, заўважылі, апошнім часам я стаў менш пісаць артыкулаў, а ўвогуле мая актыўнасць крыху спала.

Дык вось — увесь гэты час я працаваў над уласным праектам, прызначаным для кіравання лакалізацыямі і перакладамі. І сёння хачу крыху распавесці пра яго.

Што гэта за сэрвіс і навошта ён патрэбны

Ужо даўно я займаюся распрацоўкай і часта сутыкаюся з патрэбай падтрымкі шматлікіх лакалізацый і моваў. Звычайна гэта выглядала так: у кодзе ўручную прапісваліся ключы, а ў файлы лакалізацыі дадаваліся пераклады. Гэта заўсёды займала шмат часу і высілкаў.

Таму я вырашыў стварыць уласны сэрвіс, які дазваляе кіраваць лакалізацыямі і кантэнтам непасрэдна праз VS Code, Cursor. На дадзены момант ўжо атрымалася зрабіць так, што агенты (Copilot і іншыя) праз MCP могуць падключацца да сэрвісу, і дадаваць, выдаляць, рэдактаваць лакалізацыі

Сам сэрвіс не абмежаваны MCP: ён таксама падтрымлівае ШІ-пераклад, рэдагаванне і іншыя функцыі.


ШІ-перакладчык

ШІ-перакладчык дазваляе генераваць пераклады з улікам загадзя падрыхтаваных промптаў, што значна паляпшае якасць выніку. Акрамя таго, сэрвіс можа ўлічваць папярэднія пераклады пры стварэнні новых — гэта бывае вельмі карысна. Промпты падтрымліваюць версіяніраванне, і іх можна пераключаць перад выкарыстаннем.

Экспарт і сумесная праца

Усе створаныя пераклады можна выгрузіць у фармаце JSON у розных структурах (якія можна выбраць перад спампоўкай). Сэрвіс дазваляе працаваць над лакалізацыямі некалькім карыстальнікам адначасова, дзяліцца доступам з іншымі членамі каманды.

Дадатковыя магчымасці

Акрамя лакалізацый, сэрвіс мае просты мэнэджар промптаў і SDK, які дазваляе запускаць аддалена розныя мадэлі і сэрвісы, а таксама назіраць вынікі. Але пра гэта будзе асобны артыкул.

Пра бэкапы

Зараз у распрацоўцы магчымасць версіяніравання лакалізацый, каб іх можна было аднавіць у выпадку праблем. Але ўжо цяпер сервер кожныя 6 гадзін робіць бэкапы базы дадзеных, якія захоўваюцца цягам аднаго тыдня.

Пра бэта-тэставанне і далейшае развіццё

Зараз сэрвіс знаходзіцца на стадыі бэта-тэставання. Мы запрашаем усіх жадаючых далучыцца, паспрабаваць яго ў працы і падзяліцца сваімі ўражаннямі.

Асабліва важная для нас ваша зваротная сувязь: усе слушныя парады і пажаданні будуць уважліва разгледжаныя і ўлічаныя ў далейшай распрацоўцы.

У будучыні будуць розныя тарыфныя планы, але пакуль галоўная мэта — атрымаць водгукі, зрабіць сэрвіс зручным і карысным для супольнасці.

Пра планы

У бліжэйшы час я планую больш шчыльна працаваць над магчымасцямі ШІ-перакладу. Будзе дададзена падтрымка новых рэдактараў, акрамя Cursor і VS Code. З’явіцца функцыя нататак — яны будуць даступныя ўсім, хто працуе над перакладамі.

Для беларускамоўнай супольнасці

Таксама я планую рабіць добрыя зніжкі для беларускамоўнага кам’юніці. Вы заўсёды можаце звярнуцца за зніжкай або павелічэннем лімітаў.

📩 Звязацца з намі можна праз пошту goman.live.service@gmail.com

💬 Або далучайцеся да нашага Discord-сервера

Ну і першае невялікае прома пра тое як працуе MCP разам з сэрвісам

AI
ШІ
Admin, 2025-09-25

header

Вітанкі!

Я ўжо больш за месяц як пачаў пісаць гэты артыкул , але то часу няма, то настрою. Але ўсё ж я сабраўся з думкамі і нарэшце нешта зляпіў. Спадзяюся вам будзе карысна. Зьвярніце ўвагу на гітхаб - там ужо гатовыя працуючыя прыклады, якія можна запускаць. Для лепшага разумення што адбываецца - азнаемцеся з структурай і кодам MCP сервера

Сёння мы падключаем Cursor і VS Code да вашых API праз MCP.

Часам глядзіш на ўласныя карысныя скрыпты і думаеш: «Як акуратна, без лішняй мукі падключыць іх да ШІ? Што для гэтага трэба? З якога боку падысці?». І вось сёння ў гэтым артыкуле мы паспрабуем вырашыць гэтую праблему і навучыцца ствараць уласныя MCP.

Ну і можаце глянуць мае папярэднія артыкулы пра ШІ


MCP у двух словах

MCP (Model Context Protocol) - уніфікаваны «перакладчык» паміж вашымі інструментамі і разумнымі кліентамі (чат-асістэнтамі, напрыклад агентамі ў Cursor). Замест чарговага разрозненага API вы дакладна апісваеце, што ўмее ваш інструмент і якія ў яго ўваходы/выхады - далей усё працуе па стандарце.

Чым MCP зручны

Асноўная ідэя MCP у тым, што ваша API можа быць падлучана да мадэлі як асобны агент з празрыстымі правіламі:

  • Стандартызацыя. Адзіная мова для інструментаў і кліентаў замест набора разнастайных пратаколаў.
  • Кіраванасць. Падлучаныя да мадэлі інструменты маюць яўныя схемы, прадказальныя паводзіны, выразныя правы.
  • Хуткая інтэграцыя. Падключылі API/FS/БД/DevOps-працэсы - і карыстаецеся з IDE або з чата.

Дзе MCP асабліва дарэчны

MCP падыходзіць для розных задач, найчасцей звязаных з распрацоўкай (цяпер найперш рэдактары адаптаваныя для працы з вонкавымі інструментамі праз MCP). Напрыклад:

  • DevTools і ChatOps: CI/CD-каманды, дыягностыка, доступ да логаў.
  • Data/BI: агрэгаваныя запыты, разумныя зводкі.
  • Унутраныя API: адзіная кантрольная кропка для каманды.
  • RAG/аўтаматызацыя: збор, перад-/пасляапрацоўка дадзеных.
  • Праца з дакументацыяй (напрыклад, Confluence) і інш.

Спіс прапанаваных MCP для VS Code: github


Як зрабіць просты MCP-сервер з HTTP-транспартам (Bun/Node)

Вернемся да стварэння нашага сервера. Я ўжо падрыхтаваў некалькі прыкладаў інструментаў у навучальным рэпазіторыі; азнаёміцца з імі можна па спасылцы lesson8_mcp/mcp_server у рэпазіторыі bel_geek. Код сумяшчальны з Bun і Node.js.

Што збудуем

Створым просты сервер без лішніх «наваротаў». Гэта будзе лакальны HTTP-сервер з /healthz і /mcp, без стану (stateless), з трыма дэма-інструментамі (тым жа наборам, што ў рэпазіторыі) - каб адразу «памацаць» MCP:

  • Маршруты:
    • GET /healthz - праверка здароўя.
    • /mcp - MCP-эндапоінт (GET, POST, DELETE).
  • Stateless-рэжым (без сесій).
  • Тры інструменты:
    • echo - вяртае перададзены тэкст.
    • get_proverb_by_topic - прыказкі па тэме (topic, random, limit).
    • get_weather - лаканальнае надвор’е з wttr.in.


🚀 Збіраем сервер і падключаем яго да Cursor/VS Code

Тэорыя скончана, час дзейнічаць: клон, усталёўка, запуск - і MCP ўжо працуе.

🔑 Перадумовы (што трэба перад стартам)

Тут без сюрпрызаў:

  • Node.js ≥ 18 або Bun ≥ 1.x (Bun хутчэйшы пры старце - менш лішніх рухаў).
  • Два пакеты: @modelcontextprotocol/sdk (аснова MCP) і zod (каб апісваць уваходныя параметры дакладна і надзейна).
  • Docker - толькі калі хочаце адразу пакласці ўсё ў кантэйнер. Для лакальнага тэставання не патрэбны.

⚡️ Запускаем прыклад

Без лішняй філасофіі - проста клануем рэпазіторый і запускаем:

text
1
2git clone https://github.com/bel-frontend/RAG
3cd RAG/lesson8_mcp/mcp_server
text
1
2bun install
3bun index.ts

Калі ўсё добра - у кансолі з’явіцца паведамленне:

text
1MCP Streamable HTTP Server on http://localhost:3002/mcp
2Available endpoints: /healthz, /mcp

🎉 Сервер! Жыві!

Праверым яго «пульс»:

text
1curl -s http://localhost:3002/healthz

Адказ павінен быць у фармаце { ok: true, timestamp: ... }.

🧩 Архітэктура простымі словамі

Як працуе сервер:

  1. Ствараецца MCP-сервер - у ім рэгіструюцца інструменты (echo, get_proverb_by_topic, get_weather).
  2. Дадаецца HTTP-транспарт - MCP можа прымаць і адпраўляць запыты праз /mcp.
  3. Маршруты:
    • /healthz - вяртае просты JSON, каб праверыць, што сервер жывы.
    • /mcp - асноўны эндпоінт, праз які Cursor або VS Code звязваюцца з інструментамі.
  4. Кантэкст - загалоўкі (apikey, applicationid) кладуцца ў сховішча, каб інструменты маглі іх выкарыстоўваць.
  5. Завяршэнне - пры спыненні (SIGINT/SIGTERM) сервер карэктна закрываецца.

🛠 Інструменты - галоўная магія тут

Дададзены тры простыя інструменты для хуткага эксперымента:

  • echo - вяртае тэкст, які вы яму перадалі (карысна для праверак).
  • get_proverb_by_topic - выдае прыказкі па тэме; падтрымлівае random і limit.
  • get_weather - паказвае надвор’е праз сэрвіс wttr.in.

Кожны інструмент апісаны праз zod-схему. Гэта гарантуе дакладнасць: калі карыстальнік пераблытаў параметры, MCP паведаміць пра няправільны фармат.

🖇 Падключаемся да Cursor і VS Code

І тут пачынаецца самае цікавае - інтэграцыя. Калі MCP працуе, мы можам выкарыстоўваць яго праз Cursor або GitHub Copilot у VS Code.

Cursor:

  1. Запусці сервер (bun index.ts).
  2. Ствары ў праекце файл ./.cursor/mcp.json з канфігурацыяй:
text
1{
2  "mcpServers": {
3    "test-mcp": {
4      "type": "http",
5      "url": "http://localhost:3002/mcp",
6      "headers": {
7        "apiKey": "API_KEY_1234567890",
8        "applicationid": "APPLICATION_ID"
9      }
10    }
11  }
12}

Адкрый налады → Model Context Protocol і пераканайся, што test-mcp ёсць у спісе. У чаце Cursor напішы (пераканайся, што ўключаны менавіта агент): «Выкліч тул get_weather для Minsk» - і паглядзі адказ.

VS Code (Copilot Chat)

Тут амаль тое самае, толькі файл трэба пакласці ў .vscode/mcp.json. Пасля гэтага ў панэлі інструментаў Copilot Chat павінен з’явіцца ваш інструмент.

text
1{
2    "servers": {
3        "test-mcp": {
4            "type": "http",
5            "url": "http://localhost:3002/mcp",
6            "headers": {
7                "apiKey": "API_KEY_1234567890",
8                "applicationid": "APPLICATION_ID"
9            }
10        }
11    }
12}

🐳 Docker-рэжым

Хочаце адразу ўпакоўку? Збіраем і запускаем у Docker:

text
1docker compose build --no-cache
2docker compose up -d

MCP будзе даступны на http://localhost:3002/mcp. Зручна для каманднай працы: усе карыстаюцца аднолькавым вобразам і не марнуюць час на «у мяне працуе - у цябе не».

🤔 Тыповыя «граблі» і як іх абысці

  • CORS - калі падключаецеся з браўзера, трэба дазволіць загалоўкі. Мы дадалі базавы варыянт у код.
  • Stateless/Stateful - ў прыкладзе сервер «без памяці». Калі патрэбныя сесіі - уключайце sessionIdGenerator.
  • API-загалоўкі - - у Node.js яны прыходзяць у ніжнім рэгістры (apikey, а не apiKey). Лёгка заблытацца.
  • Знешнія сэрвісы - прыказкі і надвор’е могуць тармазіць. Дадавайце таймаўты і кэш.

✍️ Як зрабіць свой інструмент

Просты прыклад:

text
1import { z } from 'zod';
2import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
4export function registerMyTools(mcp: McpServer) {
5  mcp.registerTool(
6    'my_tool',
7    {
8      title: 'my_tool',
9      description: 'Просты інструмент, які складае 2+2',
10      inputSchema: { name: z.string() },
11    },
12    async ({ name }) => ({
13      content: [{ type: 'text', text: `Вітаю, ${name}! 2+2 = 4` }],
14    }),
15  );
16}

Гатова - цяпер вы можаце дадаваць свае «чараўніцтвы» ў MCP і карыстацца імі з IDE.

🎯 Вынікі

Мы сабралі MCP-сервер на Bun/Node, дадалі тры дэма-інструменты, падключылі яго да Cursor і VS Code, запусцілі ў Docker і абмеркавалі тыповыя праблемы. Галоўнае - MCP робіць падключэнне ўласных інструментаў да разумных IDE простым і стандартызаваным.

Далейшае - толькі ваша фантазія: можна інтэграваць DevOps-працэсы, базу дадзеных, BI-запыты, унутраныя API. MCP дазваляе гэта зрабіць так, каб іншыя члены каманды маглі проста ўзяць і выкарыстоўваць.

Што далей

Мы сабралі акуратны MCP-сервер з HTTP-транспартам, дадалі тры наглядныя інструменты, наладзілі CORS і паказалі канфігурацыі для Cursor і GitHub Copilot (VS Code), а таксама Docker-запуск. Наступныя крокі - пашырэнне набору інструментаў, аўтэнтыфікацыя, лагіраванне, кэш; пры патрэбе - stateful-сесіі і вынясенне ў prod.

Калі гэта вас зачапіла - стварайце ўласныя інструменты і дзяліцеся імі з супольнасцю! Запрашаем далучацца да аўтараў bel-geek.com - будзем разам ствараць разумныя і карысныя рэчы.

MCP
Admin, 2025-08-13

дарожная карта

Гэты артыкул - абагульненне некалькіх артыкулаў пра новы напрамак, які ўжо зараз ператвараецца у новую прафесію , якая з часам будзе вельмі запатрабаванай.

Context Engineering: Новая прафесія на скрыжаванні інтэлекту і інфармацыі

1. Чаму гэта важна?

Сённяшнія LLMs — гэта не проста тэкставыя генератары. Гэта магутныя сістэмы, здольныя:

  • аналізаваць інфармацыю;
  • будаваць лагічныя ланцужкі;
  • прымаць рашэнні;
  • падтрымліваць складаныя дыялогі.

Аднак іх здольнасці абмяжоўваюцца толькі тым, які кантэкст яны атрымліваюць. І нават самая дасканалая мадэль будзе марнаваць свой патэнцыял, калі “не зразумее”, што ад яе патрабуецца.

Кантэкст — гэта не проста запыт. Гэта цэлае інфармацыйнае асяроддзе, у якім працуе ШІ: дакументы, прыклады, накіраванні, ранейшыя размовы, — усё, што ўплывае на разуменне і прыняцце рашэння. І тое, як мы ствараем і падаем гэты кантэкст, — вызначае эфектыўнасць усяго ўзаемадзеяння з мадэллю.

Так з’явілася цэлая галіна — context engineering. Яна вырасла з prompt engineering і ператварылася ў асобную прафесію, якая спалучае тэхналогіі, логіку і інфармацыйны дызайн. Гаворка ідзе пра сістэмны падыход да працы з кантэкстам: ад яго пошуку да кіравання ім у рэжыме рэальнага часу.

2. Аснова context engineering — што яна сабой уяўляе?

Калі prompt engineering — гэта пра тое, як сфармуляваць запыт, то context engineering — гэта пра стварэнне ўмоў для разумнага адказу. Гэта як не проста задаць пытанне, а даць чалавеку дакументы, факты, прыклады і мову, якой варта карыстацца.

Context engineering ахоплівае тры асноўныя кампаненты:

2.1. Context retrieval and generation

На першым этапе трэба знайсці і падаць мадэлі патрэбную інфармацыю:

  • Prompt engineering — базавыя запыты і іх структура.
  • In-context learning — метады накшталт zero-shot, few-shot, chain-of-thought, калі мадэль вучыцца на прыкладах унутры кантэксту.
  • Retrieval знешніх ведаў — напрыклад, з баз дадзеных ці дакументаў (retrieval-augmented generation).
  • Дынамічныя шаблоны — адаптыўныя запыты (напрыклад, CLEAR framework), якія змяняюцца ў залежнасці ад сітуацыі.

2.2. Context processing

Далей — апрацоўка інфармацыі:

  • Працэсінг доўгіх паслядоўнасцей — мадэлі, здольныя працаваць з тэкстамі на тысячы токенаў (Mamba, LongNet).
  • Самаўдасканаленне — мадэлі, што вучацца з уласных адказаў і карэктуюць кантэкст.
  • Мультымадальнасць — камбінацыя тэксту, гуку, выяваў, табліц.
  • Аптымізацыя ўвагі і памяці — тэхнікі сціску, sparsity, забывання непатрэбнага.

2.3. Context management

І, нарэшце, кіраванне кантэкстам у часе:

  • Памяць: кароткатэрміновая (размова), доўгатэрміновая (біяграфія карыстальніка), знешняя (базы дадзеных).
  • Context compression — аўтакодэры, рэкурэнтнае сцісканне.
  • Paging — падзел кантэксту на старонкі з доступам да патрэбнай інфармацыі.
  • Маштабаванае кіраванне — для складаных сцэнароў з некалькімі агентамі.

3. Як гэта працуе: архітэктурныя рашэнні

Context engineering ужо ўвасабляецца ў канкрэтныя тэхнічныя мадэлі і архітэктуры. Вось некалькі прыкладаў:

3.1. Retrieval-augmented generation (RAG)

Калі мадэль не мае патрэбнай інфармацыі — яна можа “запытаць” яе звонку. RAG дазваляе LLM:

  • шукаць дадатковыя звесткі;
  • выкарыстоўваць іх у рэжыме рэальнага часу;
  • абапірацца на факты пры генерацыі адказу.

3.2. Сістэмы памяці

LLM з памяццю — гэта мадэль, што не “забывае”:

  • можа весці працяглыя дыялогі;
  • успамінае вашыя папярэднія пытанні;
  • адаптуецца да вашых інтарэсаў (напрыклад, MemGPT).

3.3. Інструментальныя агенты (tools, agents)

Мадэль, што не толькі адказвае, але і дзейнічае:

  • запускае код;
  • шукае інфармацыю ў інтэрнэце;
  • узаемадзейнічае з API.

3.4. Шматагентныя сістэмы

Некаторыя задачы патрабуюць каманды. Шматагентныя сістэмы:

  • падзяляюць ролі;
  • абменьваюцца кантэкстам;
  • працуюць сінхронна для вырашэння складаных задач.

4. Што яшчэ не зроблена: асноўныя праблемы

Тэхналогія развіваецца імкліва, але ёсць і праблемы:

  • Разрыў разумення і генерацыі — LLM можа зразумець складаны кантэкст, але не заўсёды здольны стварыць якасны вынік на яго аснове.
  • Метрыкі ацэнкі — класічныя метрыкі (BLEU, ROUGE) недастатковыя для ацэнкі reasoning або кааперацыі агентаў.
  • Мультымадальная інтэграцыя — цяжка аб’яднаць тэкст, гук, выявы, табліцы ў адзінны лагічны ланцуг.
  • Бяспека і этыка — кантэкст можа быць скажоны, маніпулятыўны або прыватны.

5. Напрамкі будучыні: што чакае context engineering

Што будзе развівацца:

  • Уніфікаваная тэорыя — фармалізацыя прынцыпаў context engineering.
  • Новая генерацыя памяці — мадэлі, што памятаюць не толькі тэкст, але і сэнс.
  • Поўная мультымадальная інтэграцыя — тэкст + відэа + аўдыё + графы.
  • Лепшыя метады ацэнкі — метрыкі, што ўлічваюць логіку, паслядоўнасць, адаптыўнасць.
  • Этычнае разгортванне — празрыстасць, тлумачальнасць, справядлівасць.

6. Рэзюмэ

Context engineering — гэта не проста новы трэнд. Гэта аснова новай хвалі штучнага інтэлекту:

  • разумнага;
  • адаптыўнага;
  • карыснага;
  • адказнага.

І калі вы працуеце з LLM, то хутчэй за ўсё — вы ўжо context engineer. Пытанне толькі ў тым, ці робіце вы гэта інтуітыўна — ці свядома і прафесійна.

Крыніцы

  1. https://github.com/Marktechpost/AI-Tutorial-Codes-Included
  2. https://www.marktechpost.com/2025/08/03/a-technical-roadmap-to-context-engineering-in-llms-mechanisms-benchmarks-and-open-challenges/
  3. https://arxiv.org/abs/2507.13334
context
engineering
Admin, 2025-08-06

head

1. Першае знаёмства: уваход у вайб-кодынг

Не так даўно я выпадкова натрапіў на відэа, дзе нейкі распрацоўшчык за некалькі хвілін стварыў цэлы дадатак з дапамогай штучнага інтэлекту. Сэрвіс называўся bolt.new. Ну і, як не цяжка здагадацца, я вырашыў сам выпрабаваць гэтага звера.

Першыя ўражанні былі, скажам шчыра, вельмі натхняльнымі. Ты даеш каманду — атрымліваеш код. Як у марах юнага дэвелопера: без мітынгаў, рэв’ю і вечаровых званкоў ад праектавага менеджара. Але, як гэта бывае ў казках, усё ішло добра… да пэўнага моманту.

Калі ўзнікла патрэба штосьці змяніць у кодзе — пачаліся праблемы. Bolt вельмі хутка “з’ядае” токены, а з пошукам і выпраўленнем памылак у яго, скажам мякка, праблемы. У выніку — выдатны інструмент для хуткага MVP, але ніяк не для падтрымкі або маштабавання. Так пачалася мая вайб-кодынгавая эпапея.

2. План Б: Copilot і боль у сэрцы

Пасля першага расчаравання я перанёс распрацоўку на лакальны кампутар. Уключыў VS Code, падключыў Copilot — і зноў у бой. Па змаўчанні ён працуе з мадэллю GPT-4.1. Для простых задач — піша, каментуе, дапамагае. Усё выглядае нядрэнна.

Але варта было папрасіць яго зрабіць нешта сур’ёзнае — напрыклад, прааналізаваць некалькі файлаў і прапрацаваць логіку — як усё пачало сыпацца. Памылкі, некансістэнтнасць, кодавы кактэйль з глюкаў. Стала відавочна: праблема — у абмежаваным кантэксце. У рэжыме “агента” мадэль не цягне вялікі аб’ём дадзеных.

Я пераключыўся на Claude Sonnet 3.7 — і тут ужо было лепш. З’явілася надзея. Потым выяыіў што ёсць Sonnet 4 — і тут сапраўды пачалася магія: мадэль пісала код, правярала лінтары і выпраўляла сва ж памылкі, запускала скрыпты ў тэрмінале… Але — так, вы ўжо здагадаліся — токены скончыліся.... І свет зноў стаў шэрым.

3. Cursor: другая спроба магіі

Пасля чарговага фіяска, калі токены скончыліся, а душа — апусцела, я не здаўся. Я вырашыў: “Хопіць гэтага здзеку!” І пайшоў качаць Cursor. Купіў PRO-версію і адразу — у бой.

Cursor у спалучэнні з Sonnet-4 + Max(пашырае кантэкст) працаваў нармальна. Не так глянцава, як Copilot, але дастаткова эфектыўна. Пачаў ствараць дадатак: адзін файл, другі, трэці… Усё ішло добра. Пакуль не стала зразумела — нават з Max мадэль пачынае “забывацца”: губляе кантэкст, выдаляе важныя часткі кода, забывае пра логіку папярэдняй ітэрацыі. Але пакуль — трывожны, але не крытычны сігнал.

Крытычна стала… на наступны дзень. Вы не паверыце — зноў скончыліся токены! Я забіў іх за два дні на 10-экранным дадатку. Было адчуванне, быццам я гляджу, як мая зарплата проста ператвараецца ў пустэчу. Але не здаўся! Купіў Cursor Pro+ і працягнуў (зарплата - да сустрэчы). Бо вайб-кодзінг — ён такі.

4. Момант ісціны: архітэктура ці хаос

Калі дадатак стаў выглядаць як нешта жывое, я вырашыў правесці код-рэв’ю сам сабе. І — жах! Кожны экран быў асобнай “планетай”, ніякіх шаблонаў, усе элементы дубляваліся, як быццам нейкая таямнічая сіла вырашыла паказаць мне, што такое пекла для UI-дызайнера. Кожны асобны экран хоць і быў падоны да папярэдняга але не.

Звычайныя рэчы — кшталту афсэтаў ці водступаў — трэба было выпраўляць рукамі на кожным экране. Прасіць мадэль зрабіць гэта аўтаматычна — марная справа. Яна выпраўляла ў адным месцы, і адначасова ламала у іншым. У гэты момант я ўсвядоміў сваю галоўную памылку: я не прапрацаваў архітэктуру дадатку з самага пачатку.

Па сутнасці, я далей я ўвесь час працаваў як “сеньёр, што на хаду дрэсіруе мадэль-джуна”: “Не! Гэта — асобны кампанент! Тут — вынесем стылі! Не пхай чатыры кампаненты ў адзін файл!” (былі файлы больш за 1000 радкоў). І гэта, канешне, крыху выбівала з каляі.

5. Рэкамендацыі: як не патануць у вайбе

Пасля ўсіх гэтых перыпетый я вырашыў — трэба падзяліцца досведам. Вось некалькі парад тым, хто хоча вайб-кодзіць, але не трапіць у багну:

  1. Стварыце структуру. Адразу вызначце, як будуць выглядаць папкі і файлы.
  2. Правярайце стылі. Пасля кожнай ітэрацыі сачыце за кансістэнтнасцю.
  3. Выносіце кампаненты. Калі нешта паўтараецца — у асобны файл! Але дакладна ўказвайце, куды.
  4. Адна задача — адзін промпт. Інакш атрымаеце салянку.
  5. Цярпенне — ключ. Мадэль часам бачыць памылку і сама яе выпраўляе. Не спяшайцеся.
  6. Каміт — ваш сябра. Калі нешта працуе — фіксуйце. Наступны крок можа ўсё зламаць.
  7. Абнуляйце кантэкст. Пачынаеце новую фічу? Стварыце новы чат. І не забывайце пра git commit!

І галоўнае — не губляйце кантроль над грашыма. Гэтыя звяры любяць есці токены, як галодны студэнт — піцу. Не паспееш азірнуцца — усё скончылася. Зноў.

6. Вынікі: без прафесіяналаў — няма магіі

Пасля ўсяго перажытага, адна рэч стала цалкам зразумелай: на дадзены момант без прафесіяналаў штучны інтэлект не здольны ствараць сапраўды якасныя прадукты. Так, ШІ значна паскарае распрацоўку, выконвае шмат руціннай працы, дапамагае “выплюхнуць” MVP у рэкордна кароткія тэрміны. Але ўсё гэта працуе толькі пры ўмове, што побач ёсць чалавек, які ведае, што робіць.

Без правільнага кіравання, мадэлі губляюць кантэкст, паўтараюцца, робяць “выпадковыя” архітэктурныя рашэнні — і вынік нагадвае кодавых маўпаў, якія з нейкай верагоднасцю усё ж напішуць кнігу. Таму, як бы гэта парадаксальна ні гучала, каб не пісаць код — трэба ўсё яшчэ добра яго разумець.

У будучыні, відавочна, мы будзем усё менш і менш пісць код уручную. Але каб сапраўды эфектыўна выкарыстоўваць ШІ, мы павінны вучыцца думаць як інжынеры і кіраваць працэсам — а не проста “размаўляць з ботам”.

І так, халера, токены зноў скончыліся. Але цяпер вы хаця б будзеце ведаць, што рабіць далей.

MVP
Admin, 2025-06-01

space

Прывітанне! Спадарства!

Працягваем наш цыкл артыкулаў пра ШІ (Штучны інтэлект) і як ім карыстацца. Сёння наш артыкул будзе больш тэарытычны. Мы паспрабуем разабрацца, што такое мадэлі, якія яны бываюць, як іх выкарыстоўваць, і якія яны маюць асаблівасці.

Калі вы не чыталі нашыя папярэднія артыкулы - раю пачытаць.

Спадзяюся вам будзе цікава, таму паехалі!

І так, як звычайна (ну падаецца ж так у школе рабілі) - давайце разбярэмся з паняццем ШІ-мадэлі.


Штучны інтэлект — гэта не чараўніцтва, гэта матэматыка на стэроідах

Калі чуеце “ШІ-мадэль”, можа здацца, што гаворка пра нешта накшталт робата, які думае, як чалавек. Але насамрэч усё куды прасцей (і складаней адначасова). ШІ-мадэль — гэта матэматычная канструкцыя, якая вучылася на даных, каб пасля прадказваць, класіфікаваць ці нават генераваць новыя тэксты, выявы ці коды.

Прыкладам, калі вы карыстаецеся перакладчыкам, атрымліваеце рэкамендацыі ў Spotify або фільтруеце спам у пошце — там працуе адна ці некалькі такіх мадэляў. Але важна разумець: мадэль — гэта не сам алгарытм, а вынік яго прымянення да даных.

Звычайна працэс выглядае так: вы бераце алгарытм (напрыклад, градыентны бустынг, нейронную сетку ці SVM), “корміце” яго дадзенымі — і атрымліваеце мадэль. Потым гэтая мадэль ужо можа самастойна прымаць рашэнні — напрыклад, вызначыць, ці ёсць на здымку котка, ці гэта проста пухнаты коўдрык.

У гэтым артыкуле мы разбярэмся глыбей: чым розныя мадэлі адрозніваюцца, навошта патрэбныя фундаментавыя мадэлі (як GPT,Claude і г.д.), і чаму без магутных GPU сёння не зварганіш нават простага чат-бота.


Як ШІ-мадэль “запамінае” інфармацыю: вектары, прасторы і матэматычная магія

Добра, мы ўжо ведаем, што мадэль — гэта вынік навучання на даных. Але ўзнікае лагічнае пытанне: а як яна ўсё гэта захоўвае? Ці не захоўвае, як Google Docs?

Не. ШІ-мадэль нічога не запамінае “па-людску”. Яна не ведае, што “котка” мякае, а “піцца” смачная. Замест гэтага яна ўяўляе сабе свет праз вектары — гэта матэматычныя аб’екты, якія складаюцца з набораў лікаў. Груба кажучы, кожнае слова, карцінка, запыт ці нават паняцце пераўтвараецца ў лічбавы код — набор значэнняў у прасторы з сотнямі ці тысячамі вымярэнняў.


🧠 Прыклад:

text
1“котка” = [0.12, -0.98, 3.45, …]

Калі мадэль “думае” пра слова “котка” (звыяайна яна стварае вектары для цэлых выразаў), яна працуе не з тэкстам, а з яго вектарным уяўленнем. Тое ж самае са словам “сабака”, “пухнаты”, “мурлыкае” і г.д.


vectors

(Візуалізацыя вектараў. Зверху злева - вектары тэкстаў пра промптынг. Знізу справа - вектары тэкстаў пра беларускую мову. )


Цікава, што вектары, блізкія ў гэтай шматмернай прасторы, азначаюць паняцці, блізкія па сэнсе. Напрыклад, калі вектар “котка” побач з “сабака”, гэта значыць, што мадэль навучылася бачыць нешта агульнае паміж імі (жывёлы, хатнія, пухнатыя).

Як вектары параўноўваюцца?

Мадэль вымярае косінуснае падабенства або эўклідаву адлегласць паміж вектарамі. Прасцей кажучы — яна вылічвае, наколькі “паралельныя” ці “блізкія” вектары адзін да аднаго. Чым меншая адлегласць або большы косінус, тым мацней сувязь паміж паняццямі.

Так, напрыклад, у вялікіх мовахвых мадэлях (LLM) тыпу GPT:

  • “Мінск” + “Беларусь” ≈ “Парыж” + “Францыя”
  • “Кніга” + “чытаць” — “папера” ≈ “электронная”

І навошта гэта трэба?

Усё, ад разумення пытанняў карыстальніка да генерацыі адказаў, адбываецца праз маніпуляцыю гэтымі вектарамі. Калі вы пішаце ў чат: “парай фільм як Inception”, мадэль шукае вектар “Inception”, знаходзіць яго суседзяў у прасторы (напрыклад, “Interstellar”, “Tenet”), і на аснове гэтага генеруе рэкамендацыю.

Не ўсе ШІ-мадэлі аднолькавыя: як іх падзяляюць

Разнастайнасць мадэляў уражвае. Так можна знайсці мадэлі якія займаюцца аналізам мапаў ці выяўленнем хвароб па здымках.

Давайце паспрабуем неяк тыпізаваць ШІ мадэлі.

Пачнем з таго, што мадэлі могуць падзяляцца па тыпах дадзеных з якімі яны працуюць:

🧠 Моўныя мадэлі (LLM)

Працуюць з тэкстам: разумеюць, працягваюць, аналізуюць, генеруюць. Сучасныя прыклады:

  • Qwen 3 — падтрымлівае як dense, так і Mixture-of-Experts архітэктуры.
  • Gemma 3 — кампактная, эфектыўная, працуе нават на 1 GPU.
  • DeepSeek-R1 — робіць упор на разважанне і лагіку.
  • LLaMA 3.3 / 4 — новыя open-source LLM.

👁 Візуальныя мадэлі (Computer Vision / Multimodal Vision)

Працуюць з выявамі: распазнаюць, аналізуюць, генеруюць.

  • LLaMA 4 Vision — разумее малюнкі і можа адказваць на пытанні па візуальным кантэксце.
  • Gemma Vision — маштабаваная візуальная мадэль ад Google.
  • DALL-E
🎤 Гукавыя і маўленчыя мадэлі

Для распазнавання маўлення, генерацыі голасу, эмоцый і г.д. (Пакуль найноўшых open-source канкурэнтаў Whisper або VALL-E не шмат, але чакаюцца.)

🔀 Мультымадальныя (Multimodal)

Здольныя апрацоўваць некалькі тыпаў дадзеных: тэкст + выява, тэкст + аўдыё і інш. Напрыклад LLaMA 4 — аб’ядноўвае моўную мадэль з магчымасцю анвлізаваць выявы і падтрымлівае агенты (Пра іх у наступных артыкулах).


🧰 Па функцыянальнасці мадэлі можна падзяліць:
  1. Адназадачныя мадэлі (Task-specific) Тонка адаптаваныя пад адну задачу (напрыклад, генерацыя SQL, аўтаматычны медыцынскі аналіз).
  2. Шыроказадачныя мадэлі (General-purpose) Выконваюць мноства задач без спецыфічнай адаптацыі. Сюды адносяцца ўсе сучасныя флагманскія мадэлі: Qwen 3, LLaMA 3.3, Gemma 3, DeepSeek-R1.
  3. Агенты з інструментамі (Tool-augmented models) Могуць карыстацца раўзам з калькулятарамі, пошукам, базамі даных, нават іншымі ШІ. Прыклад: GPT-4 Turbo з інструментамі, LLaMA 4 Agents, DeepSeek Agent (на базе R1).

🏋️ Па памеры мадэлі можна падзяліць па колькасці параметраў якія яны падтрымліваюць (В - Мільярды):
  • Tiny / Small (0.6B – 4B параметраў) — працуе на лакальных прыладах.
  • Medium (7B – 14B) — патрабуе GPU, працуе стабільна.
  • Large (30B – 70B) — для дата-цэнтраў або энтузіястаў з кластарамі.
  • Ultra-large (100B – 700B+) — патрэбен спец-абсталяванне.

Давайце разгледзім асаблівасці мадэляў, пра якія вы магчыма і не ведалі.

🧠 Мадэль — не чалавек. Яна нічога не “памятае”

Можна падумаць, што калі мадэль адказвае на вашы пытанні з улікам папярэдніх, то яна “памятае” размову. Але гэта ілюзія. У рэчаіснасці мадэль — гэта матэматычная функцыя, якая не мае памяці ў чалавечым сэнсе.


Кантэкст — вось дзе “жыве” ўся памяць

Кожны раз, калі вы адпраўляеце запыт у мадэль, разам з ім перадаецца так званы кантэкст — тэкст папярэдніх размоў, дакументаў, інструкцый. Гэта як калі б вы далі чалавеку шпаргалку перад тым, як нешта спытаць. І калі наступны запыт не ўтрымлівае папярэдні тэкст — мадэль усё “забывае”.

📌 Мадэль не захоўвае ніякай інфармацыі пасля адказу. Усё, што яна “ведае”, — гэта тое, што вы ёй перадалі ў бягучы момант.


Чаму гэта важна?

Бо гэта азначае, што мадэль не можа запамінаць карыстальнікаў, кантэкст размовы ці падзеі. Мадэль памятае толькі тыя дадзеныя якім яе навучылі пад час навучання ці файн-цюнінгу. Калі вам здаецца, што яна “памятае”, гэта не заслуга мадэлі, а сістэмы вакол яе, якая:

  • захоўвае кантэкст,
  • дынамічна яго падгружае,
  • або выкарыстоўвае вектарныя базы даных ці іншыя інструменты, каб аднавіць патрэбную інфармацыю.
🧊 Мадэль — гэта “замарожаная матэматыка”

Калі вельмі спрасціць: мадэль — гэта функцыя, якая пераўтварае ўваход (запыт + кантэкст) у выхад (адказ). І ўсё. У ёй няма ніякай унутранай дынамікі, якая б змянялася паміж выклікамі. (У больш простых мадэлях можна заўважыць што на адзін і той жа промпт будзе адзін і той жа адказ)

Гэта як калькулятар: вы ўвялі 2 + 2 — атрымалі 4. Калі хочаце атрымаць 4 зноў — трэба зноў увесці 2 + 2.

Усё, што звязана з “памяццю”, “асабістай гісторыяй”, “ўзгадваннем”, — гэта архітэктурныя надбудовы. Напрыклад, агенты з “памяццю” працуюць так:

  1. Увесь дыялог захоўваецца звонку (у базе, файле ці вектарнай сістэме).
  2. Пры кожным новым запыце, агент адшуквае адпаведныя фрагменты з “памяці”.
  3. Ён дадае іх у кантэкст, і толькі потым перадае ўсё мадэлі.

Сама мадэль нават не “ведае”, што гэты тэкст з памяці — для яе гэта проста яшчэ адна частка ўваходу.

🙅‍♂️ Ці можа мадэль навучацца падчас размовы?

Не. Тыповая ШІ-мадэль (у тым ліку GPT, Claude, LLaMA) не мяняе сябе падчас працы. Каб яна нешта “навучылася”, трэба прайсці працэс рэтрэйнінгу або файнт’юнінгу, і гэта цэлы асобны этап, які не адбываецца падчас чата.

Нават калі мадэль 100 разоў адказала няправільна — яна працягне рабіць тое ж самае, пакуль вы самі не створыце новую мадэль або не зменіце кантэкст.

📏 Кантэкст не гумавы: чаму мадэль не можа “прачытаць усё”

Адна з найбольш частых памылак карыстальнікаў у разуменні ШІ — ілюзія, што мадэль можа працаваць з “усёй кнігай”, “усёй базай даных”, ці “вялікай колькасцю дакументаў адначасова”. Але гэта не так. Мадэлі маюць строгае абмежаванне на памер кантэксту, які яны могуць апрацаваць за раз.


Што такое кантэкст у тэхнічным сэнсе?

Кантэкст — гэта ўвесь набор інфармацыі, якую вы перадаеце мадэлі пры адным выкліку: ваш запыт, інструкцыі, дакументы, гісторыя дыялогу і г.д. Гэта не проста “тэкст”, а набор токенаў — спецыяльных адзінак, на якія разбіваецца тэкст для апрацоўкі.

Прыклад:

Слова “котка” — гэта 1 токен. Слова “аўтамабілебудаванне” — можа змяшчаць 2-3 токены. Англійскае “The quick brown fox jumps over the lazy dog.” — гэта 9 токенаў.

Колькі токенаў “могуць трымаць” сучасныя мадэлі?
  1. GPT-3.5 - 4 096 токенаў
  2. GPT-4 - 8 192 - 32 000 токенаў
  3. GPT-4o - да 128 000 токенаў
  4. Claude 3 - да 200 000 токенаў
  5. LLaMA 3 - звычайна - 8k - 32k токенаў

128 000 токенаў — гэта прыкладна 300 старонак тэксту. Здаецца шмат? Але гэта хутка скончваецца, калі вы дадаеце, напрыклад, тэхнічную дакументацыю або код.

🧨 Што адбываецца, калі перадаць занадта шмат?

  1. Промпт не змесціцца — мадэль адмовіцца апрацоўваць яго або абрэжа частку (звычайна пачатак) і згубіцца частка дадзеных.
  2. Калі вы падаеце занадта доўгія тэксты, важныя часткі могуць быць “адсунуты” за межы бачнасці.
  3. Меншая дакладнасць — нават калі ўся інфармацыя змяшчаецца, мадэль можа “згубіцца” ў аб’ёме і прапусціць важнае.

Чаму проста не зрабіць “бясконцы кантэкст”?

Праблема ў тым, што ўсе токены апрацоўваюцца разам — і чым іх больш, тым:

  • больш памяці патрабуецца на GPU (Працэсары якія апрацоўваюць дадзеныя),
  • больш часу займае вылічэнне,
  • горш працуе ўвага (attention): мадэль “распыляецца” і не разумее, на што глядзець.

Як працаваць з вялікімі дадзенымі?

Калі тэкст не ўмяшчаецца ў кантэкст, існуюць рашэнні:

  1. 🔍 RAG (Retrieval-Augmented Generation) — выбар найбольш рэлевантных кавалкаў перад кожным запытам
  2. 📚 Вектарны пошук — знаходжанне блізкіх па сэнсе тэкстаў
  3. 🪓 Разбіццё — вы даяце інфармацыю часткамі
  4. 🧠 Агент з памяццю — выкарыстоўвае знешнюю базу, каб “узгадваць” ранейшае

✨ Падвядзем вынікі…

Фух! Калі вы дачыталі да гэтага моманту — вы ўжо амаль эксперт 😎 Давайце яшчэ раз коратка прабяжымся па галоўным:

✅ ШІ-мадэль — гэта не магія, а матэматыка, якая вучылася на даных ✅ Усе “веды” мадэлі захоўваюцца не як у чалавечай памяці, а ў вектарах ✅ Мадэль не памятае вас — уся “памяць” жыве ў кантэксце ✅ Ёсць шмат розных мадэляў: па тыпу дадзеных, функцыянальнасці і памеры ✅ Кантэкст абмежаваны — і гэта не баг, а фіча, з якой трэба працаваць ✅ “Навучыць мадэль у размове” — пакуль не зусім рэальнасць

Так што, калі вам здаецца, што ШІ “разумее” або “памятае” — успомніце, што на самой справе перад вамі вельмі разумны калькулятар, а не віртуальны Ян Баян з амнэзіяй 🙂


✍️ ЗЫ: Хочаце стаць суаўтарам?

Калі вы чытаеце гэта і думаеце: “О, я б таксама мог/магла напісаць пра што-небудзь па-беларуску!” — мы вас чакаем! Хутка будзе новы артыкул пра агентаў і інструменты, але мы адкрытыя да новых тэм, голасаў і ідэй. Калі ласка далучайцеся да нас! Пішыце, прапаноўвайце, далучайцеся! Ну і вы можаце падтрымаць нашы высілкі праз кнопку "Падтрымаць праект" у версе старонкі

ШІ
AI
мадэлі
models
Admin, 2025-05-02

agents Прывітанне, спадарства!

Сёння працягваем цыкл артыкулаў пра ШІ.

I на гэты раз мы з вамі занырнем у бязконцую тэму ШІ-агентаў (ці проста агентаў). А што гэта такое і куды мы будзем занырваць мы даведаемся ніжэй! І так пачынаем!

Як мы ўжо пісалі у папярэдніх артыкулах, ШІ-мадэлі (далей проста мадэлі) адарваныя ад сусвету гэтак жа як племя індзейцаў у Амазоніі. Мадэлі не маюць уласнай караткачасовай памяці і не могуць самастойна узаемадзейнічаць з інтэрнэтам і іншым сусветам. І вось тут у гульню урываюцца агенты.

Агент Сміт (Нашчасце не гэтыя)

Добра ўсё ўмець, ды не ўсё рабіць.

Гэтая народная мудрасць добра пасуе і да свету штучнага інтэлекту. Мадэлі валодаюць велізарнымі ведамі і могуць падрабязна распавесці, як выканаць амаль любую задачу. Але — як і сапраўдны мудрэц — самі ў справы не ўмешваюцца. Іх справа — ведаць, тлумачыць, планаваць. А ўжо рабіць павінны іншыя — у нашым выпадку, агенты.

Агент слухае парады мадэлі і бярэ справу ў свае рукі:

  • выкарыстоўвае інтэлект мадэлі, але і ўмее самастойна:
  • рабіць запыты да API,
  • чытаць і пісаць файлы,
  • працаваць з базамі дадзеных,
  • аўтаматызаваць задачы і кіраваць працэсамі.

Калі параўноўваць з жыццём — мадэль як вопытны архітэктар: плануе, раіць, у дэталях распісвае, што і як павінна быць. А агент — гэта будаўнічая брыгада, якая бярэ чарцяжы і ўзводзіць дом. Такім чынам камбінацыі мадэляў ды агентаў могуць рабіць вялікую колькасць рэчаў якія недасяжныя проста мадэлям.

Калі вы карыстаецеся чатам GPT - то магчыма заўважылі што Яго магчымасці не абмежаваныя толькі напісаннем тэкста. Ен можа напрыклад, і csv файл стварыць і нешта намаляваць. Гэтыя і іншыя яго магчымасці рэалізаваныя праз агенты.

Хто дарогу пытаець, той не блукаець.

Каб не заблытацца ў тэрмінах, давайце адразу разбярэмся, хто ёсць хто ў гэтым свеце.

  • Функцыі (Functions) — гэта канкрэтныя дзеянні, якія можа выканаць агент. Напрыклад, зрабіць API-запыт, захаваць файл, правесці разлік ці нават намаляваць графік. Гэта як асобныя інструменты ў скрыні: малаток, адвёртка, ключ — кожны мае сваё прызначэнне. Часцей за ўсё функцыі - тое ж што і ў праграмаванні
  • Тулы (Tools) — гэта наборы функцый (ці адна), сабраныя для пэўнай задачы. Напрыклад, тул для працы з API можа мець функцыі для GET і POST запытаў, а тул для працы з файламі — функцыі чытання і запісу CSV або JSON. Іншымі словамі, тул — гэта як добра ўкамплектаваная скрыня інструментаў для канкрэтнай працы.
  • Агенты (Agents) — гэта арганізатары ўсяго гэтага працэсу. Агент атрымлівае задачу, аналізуе, якія тулы і функцыі патрэбныя, і кіруе іх выкарыстаннем. Ён, быццам прараб на будоўлі, раздае каманды: «Ты ідзі зрабі API-запыт», «Ты прачытай файл», «Ты згенеруй справаздачу».

📌 Важна! Агент сам не выконвае працу — ён кіруе працэсам і прымае рашэнні, калі і што трэба выкарыстоўваць.

Трэба адзначыць што розніца паміж туламі і функцыямі вельмі абстрактная і ў многіх артыкулах выкарыстоўваецца ці адно ці другое. Таму калі што - то будзеце ведаць што розніцы амаль няма.

схема

Пачынаем ствараць сусвет з блэкджэкам і ... агентамі

І так практыка. Шмат коду пісаць не будзем, баяцца не трэба. Але я б рэкамендаваў стварыць тэлеграм бота для зручнасці тэсціравання і выкарыстання нашага бота.

Паехалі!

Першае - ствараем бота:

Каб стварыць бота - дастаткова перайсці ў афіцыйны бот тэлеграма https://t.me/BotFather - і націснуць кнопку "старт". Затым са спісу каманд выбраць /newbot і ўвесці імя бота. (Павінна скончвацца на _bot). У выніку мы атрымаем спасылку на нашага бота і HTTP API. Усё! Бот створаны. зараз трэба заставіць яго працаваць. (Ключ нам спатрэбіцца - не выдаляем) кросны бацька

Другое - наладжваем асяроддзе

Бярэм гатовы код з https://github.com/bel-frontend/RAG у тэчцы lesson4_agent ствараем файл .env. І запісваем туды свой ключ

text
1TELEGRAM_BOT_TOKEN=your_token 

Далей выконваем каманду у тэрмінале

text
1bun install

Калі ў цябе bun не ўсталяваны - то глядзі тут

Не забываем пра ollama. Калі не ўсталявана - глядзім там жа і правяраем каб была ўсталявана мадэль mistral-small3.1

(Яе абраў таму, што гэта мадэль падтрымлівае tools і яна бясплатная. Так, не ўсе мадэлі могуць працаваць з агентамі):

text
1ollama list

У спісе няма гэтай мадэлі? - усталёўваем

text
1ollama run mistral-small3.1

Ну, лічы ўсё гатова.

Трэцяе - запускаем чатбота. Надвор'е, прыказкі і сабачкі.

Ну што, даражэнькія, вось мы і дабраліся да самага цікавага — глядзім, на што наш агент здатны! 😎

Запускаем бота камандай у тэрмінале:

text
1bun  index.ts

І… пагналі тэставаць яго ў тэлеграме!

  • «Якое надвор’е ў Менску?» — спойлер: як заўсёды — хмурна і вільготна. Нічога новага, Менск жыве па сваіх правілах! 🌧️
  • «Пакажы сабачку!» — і экран імгненна напаўняецца пазітывам у выглядзе мілай сабачай мордачкі 🐶. Ну скажыце, хіба можна не ўсміхнуцца?
  • «Дай прыказку пра сяброўства» — тут хацелі як лепш, але атрымалася… ну, як атрымалася.🤷

📸 Глядзіце, вось наш агент з MISTRAL у справе:

Вынікі

Як бачна, з надвор’ем і сабачкамі ён спраўляецца на ўсе сто. А вось з народнай мудрасцю — мудрасці не завезлі (і беларускай мовы, калі па праўдзе 😅).

Але не спяшаемся засмучацца! Давайце правядзём невялічкі батл: наш агент з мадэллю mistral-small3.1 супраць нашага агента з GPT-4o!

📸 Вось як спраўляецца ён жа з GPT-4o (хто б сумняваўся — значна лепш):

Вынікі1

Вынікі батлу - 3:2 на карысць GPT-4o.

Так што галоўная выснова — чым больш магутная мадэль, тым лепш працуе агент, нават калі код не змяняецца ні на радок!

Ну а зараз, мы ж сюды не сабачак глядзець прышлі, давайце зазірнем, як жа мы ўсё гэта накодзілі! 👇

Код — дзе тут агент і хто ва ўсім вінаваты? 🤖

text
1import { createReactAgent } from '@langchain/langgraph/prebuilt';
2import { chatModel, Model } from './model';
3import { tool } from '@langchain/core/tools';
4import { z } from 'zod';
5import { SystemMessage } from '@langchain/core/messages';
6
7const fetchJson = async (url: string) => {
8    const res = await fetch(url);
9    if (!res.ok) throw new Error(`Fetch error ${res.status}`);
10    return res.json();
11};
12
13const fetchText = async (url: string) => {
14    const res = await fetch(url);
15    if (!res.ok) throw new Error(`Fetch error ${res.status}`);
16    return res.text();
17};
18
19// 📦 Інструмент 1: надвор'е
20const weatherTool = tool(
21    async ({ city }: { city: string }) => {
22        const res = await fetchText(`https://wttr.in/${city}?format=3`);
23        return res || 'Cannot find weather.';
24    },
25    {
26        name: 'get_weather',
27        description: 'Get current weather for a given city',
28        schema: z.object({ city: z.string() }), // выкарыстоўваецца для валідацыі
29    }
30);
31
32const getProverbByTopic = tool(
33    async () => {
34        console.log('Fetching proverbs');
35
36        const res = (await fetchJson(
37            'https://gist.githubusercontent.com/bel-frontend/41775a79904f2535c4dd97d7990ad83d/raw/dc6c5cb1a849961833dd157454fd3ec11129883b/index.json'
38        )) as { message: string }[];
39
40        console.log(res);
41
42        const allProverbsInOneString = res.reduce((acc, curr) => {
43            return acc + curr.message + '\n';
44        }, '');
45
46        return allProverbsInOneString || 'Cannot find proverbs.';
47    },
48    {
49        name: 'get_proverb_by_topic',
50        description:
51            'Get full list of proverbs for search or selecting by topic or random',
52    }
53);
54
55const model = await chatModel(Model.MISTRAL);
56
57export const agentApp = ({ bot, userId }: { bot: any; userId: number }) => {
58    const getDogPhoto = tool(
59        async () => {
60            const res = (await fetchJson(
61                'https://dog.ceo/api/breeds/image/random'
62            )) as { message: string };
63            const imageUrl = res?.message;
64            if (!imageUrl) return 'Не ўдалося атрымаць выяву сабакі.';
65            bot.sendPhoto(userId, imageUrl);
66
67            return 'Выява сабакі дасланая.';
68        },
69        {
70            name: 'get_dog_photo',
71            description: `Send to user random dog photo`,
72        }
73    );
74
75    return createReactAgent({
76        llm: model,
77        tools: [weatherTool, getProverbByTopic, getDogPhoto],
78        messageModifier:
79            new SystemMessage(`Ты разумны памочнік. Адказвай зразумела і каротка. Адказвай на пытанні толькі
80      адносна надвор'я, генерацыі прыказак і фоты сабакі. Калі пытанне не адносіцца да гэтых тэм, скажы "Я не ведаю".`),
81    });
82};

Больш за ўсе нас цікавіць вось гэты кавалак -

text
1return createReactAgent({
2    llm: model,
3    tools: [weatherTool, getProverbByTopic, getDogPhoto],
4    messageModifier: new SystemMessage(`Ты разумны памочнік...`)
5});

🛠️ Што тут адбываецца?

  1. llm: model — тут мы падключаем нашу мадэль. У нашым выпадку — MISTRAL, таму і працуем скромна, без паэзіі, затое бясплатна!
  2. tools: [weatherTool, getProverbByTopic, getDogPhoto] — гэта як быццам мы перадалі агенту скрыню з інструментамі і сказалі: «Вось табе малаток, адвёртка і фотапарат.»
  3. messageModifier: SystemMessage(…) — а гэта ўжо інструкцыя для нашага агента.

Калі глядзець на тулы- то на прыкладзе

text
1const weatherTool = tool(
2    async ({ city }: { city: string }) => {
3        const res = await fetchText(`https://wttr.in/${city}?format=3`);
4        return res || 'Cannot find weather.';
5    },
6    {
7        name: 'get_weather',
8        description: 'Get current weather for a given city',
9        schema: z.object({ city: z.string() }), // выкарыстоўваецца для валідацыі
10    }
11);

Тут можам пабачыць базавую структуру функцыі, якая атрымлівае горад і выртае надвор'е. Звярніце увагу на тое як мы апісваем тул і як мы параметрызуем уваходзячыя дадзеныя. Гэта важна і спатрэбіцца пры напісанні больш складаных тулоў.

Так агент і працуе — разумнае кіраўніцтва (залежыць ад мадэлі канешне), мінімум разважанняў і максімум дакладнасці.

Вынікі:

Ну што, уся філасофія агенцкай працы цяпер як на далоні! Далей — альбо пашыраем яго магчымасці, альбо ганарымся тым, што ўжо маем! 😉

💡 Але гэта толькі размінка!

Тое, што мы зрабілі — самы просты варыянт агента. А ў сапраўдным жыцці агенты могуць быць нашмат магутнейшымі:

  • выкарыстоўваць іншыя ШІ-мадэлі як інструменты;
  • працаваць у камандзе з іншымі агентамі;
  • будаваць цэлыя ланцужкі рашэнняў і аўтаматызаваць складаныя бізнес-працэсы.

📅 У наступным артыкуле мы падрабязна пагаворым пра:

  • архітэктуры працы агентаў (ReAct, AutoGPT, LangGraph і іншыя);
  • як правільна ствараць і арганізоўваць складаных агентаў;
  • і як навучыць агента прымаць рашэнні, а не толькі выконваць загады.

Так што заставайцеся з намі — далей будзе толькі цікавей! 😉

ШІ
AI
agents
Admin, 2025-04-29

header

Прывітанне, спадарства!

Працягваем наш цудоўны цыкл артыкулаў пра промптынг 🤖✨

Сёння мы разбяром 4 эфектыўныя тэхнікі фідбэк-промптынгу, якія дапамогуць атрымліваць ад AI яшчэ лепшыя вынікі! 🚀

Папярэднія артыкулы:

🧠 Што за тэхнікі і адкуль яны?

Каб працаваць з AI максімальна эфектыўна, спецыялісты стварылі шэраг магутных тэхнік 🛠️. Яны нарадзіліся на скрыжаванні навукі, інжынернай практыкі і штодзённага досведу карыстальнікаў.

Асноўныя метады фідбэк-промптынгу:

  • ✍️ Explicit Feedback Prompting — адкрытае выказванне заўваг і пажаданняў.
  • 🔄 Iterative Refinement — паступовае ўдакладненне адказаў праз некалькі ітэрацый.
  • 🧐 Critique and Revision Prompting — мадэль сама крытыкуе і паляпшае вынік.
  • 🧩 RLHF (Reinforcement Learning from Human Feedback) — выбар найлепшага з некалькіх варыянтаў.

✍️ 1. Explicit Feedback Prompting

Пачнем з простага, але вельмі дзейнага спосабу!

Што гэта:

Вы даяце мадэлі канкрэтны і ветлівы фідбэк 📜: што трэба змяніць і як палепшыць адказ.

Калі карысна:

Калі першы адказ выглядае павярхоўным або няпоўным 🔍

Як гэта выглядае:

Промпт:

text
1Напішы артыкул пра цікавыя факты пра Антарктыду.

Першы адказ:

text
1Антарктыда — халодны кантынент. Тут амаль няма расліннасці і жывёл.

Фідбэк:

text
1Тэкст выглядае занадта агульна.
2Калі ласка, дадай канкрэтныя дадзеныя пра тэмпературы, даследчыя станцыі
3і мясцовую фаўну

Перапрацаваны адказ:

text
1Антарктыда — самы халодны кантынент,
2дзе сярэдняя тэмпература ўзімку дасягае -60°C.
3Тут каля 70 даследчых станцый, а з жывёл вядомыя імператарскія пінгвіны і цюлені Уэдэла.

🔄 2. Iterative Refinement

Працягваем! Паглядзім, як можна шліфаваць вынікі крок за крокам 🔧

Што гэта:

Паступовае ўдакладненне і паляпшэнне адказаў у некалькі этапаў.

Калі карысна:

Калі хочаце дамагчыся максімальнай якасці ✨

Промпт 1:

text
1Напішы рэзюмэ кнігі "1984" Джорджа Оруэла.

Адказ:

text
1"1984" — гэта раман пра таталітарную дзяржаву, дзе герой Уінстан спрабуе супраціўляцца сістэме.

Фідбэк:

text
1Дадай больш эмацыйных момантаў і падкрэслі страх Уінстана перад Вялікім Братам

Перапрацаваны адказ:

text
1
2"1984" распавядае пра жыццё пад татальным наглядам, дзе Уінстан Сміт жыве ў пастаянным страху і спрабуе захаваць чалавечнасць.

І гэтак далей. Такім чынам мы кожную ітэрацыю ўдакладняем вынікі працы мадэлі да таго моманту пакуль не атрымаем неабхоодны нам фармат.


🧐 3. Critique and Revision Prompting

Наступны ўзровень! Прымушаем AI крытыкаваць самога сябе 🕵️‍♂️

Што гэта:

Мадэль сама ацэньвае якасць свайго адказу і прапануе паляпшэнні.

Калі карысна:

Калі хочаце прабудзіць у мадэлі крытычнае мысленне 🧠

Промпт:

text
1Напішы эсэ пра важнасць экалагічнай свядомасці. Потым ацэні і паляпшай свой тэкст 

Першы адказ:

text
1Экалагічная свядомасць дапамагае захаваць прыроду і жыццё на планеце. Трэба сартыраваць смецце і эканоміць рэсурсы.

Крытыка мадэлі:

text
1Прааналізуй тэкст, знайдзі  сталыістычныя і граматычныя памылкі і выпраў  іх.

Перапрацаваны адказ:

text
1Кожны дзень мы выбіраем будучыню: перапрацоўваючы пластык , ашчаджаючы ваду, падтрымліваючы мясцовых вытворцаў. Экалагічная свядомасць — наш унёсак у здаровую планету 

Такім чынам мы застаўляем мадэль зрабіць аналіз і яго ж прымяніць для перапрацоўкі тэксту. Часам гэта бывае вельмі карысна. Гэтая тэхніка актыўна выкарыстоўваецца пры стварэнні агентаў. Падрабязней з вамі разгледзім гэта ў наступныя разы.


🧩 4. RLHF (імітацыя ў практыцы)

І нарэшце, тэхніка для тых, хто хоча выбраць самае лепшае 🔥

Што гэта:

Стварэнне некалькіх варыянтаў → выбар лепшага → яго паляпшэнне.

Калі карысна:

Калі хочаце сапраўды ідэальны вынік 🌟

Промпт:

text
1Дай 3 варыянты адказаў на пытанне: чаму важна захоўваць біяразнастайнасць?
2

Варыянты:

text
1
21. Падтрымка экалагічнай раўнавагі 
32. Забеспячэнне ежы і лекаў для чалавецтва 
43. Уплыў на стабільнасць клімату 
5

Фідбэк:

text
1Трэці варыянт выглядае лепшым! Дадай канкрэтныя факты

Паляпшэнне:

text
1Біяразнастайнасць адыгрывае цэнтральную ролю ў стабільнасці клімату: лясы паглынаюць CO2, а акіяны рэгулююць тэмпературу . Страта відаў вядзе да экалагічных катастроф 

Такая тэхніка працуе калі вы самі правялі нейкі аналіз і больш-менш ведаеце што хочаце атрымаць.

🎯 Вынікі

Цяпер вы ведаеце:

  1. Як даваць AI выразны і дакладны фідбэк ✍️
  2. Як удасканальваць вынікі праз некалькі ітэрацый 🔄
  3. Як прымушаць мадэль самаацэньваць свае адказы 🧐
  4. Як выбіраць і паляпшаць лепшыя варыянты 🧩

Увага! Найбольш добрыя вынікі атрымліваюцца пры камбінацыі розных падыходаў. Але трэба адзначыць, што, паколькі памер кантэксту ў мадэляў не бязмежны, з часам яны могуць згубіць першапачатковыя патрабаванні або панізіць іх вагу. Таму пры астаўленні фідбэка пажадана перыядычна ўдакладняць папярэднія патрабаванні.


📣 Паспрабуйце самі!

Напішыце просты промпт і:

  1. Ацаніце вынік 🎯
  2. Дайце фідбэк 🤓
  3. Папрасіце мадэль удакладніць ці крытыкаваць сябе 🔍
  4. Стварыце некалькі варыянтаў і выберыце лепшы 🌟

PS:

Дзякуй сябры што застаецеся з намі! Спадзяюся, як заўсёды мой артыкул будзе для вас карысным. Буду вельмі ўдзячны вам за лайкі, каментары, і падтрымку праекта!

AI
Prompts
промпты
ШІ
Admin, 2025-04-26

header

Прывітанне, спадарства!

Працягваем наш цыкл артыкулаў пра prompt-дызайн — мастацтва і рамяство працы з вялікімі моўнымі мадэлямі (LLM). Сённяшні артыкул будзе больш агульны, але не менш карысны. Мы сабралі для вас асноўныя прынцыпы, правілы і лайфхакі, як пісаць якасныя промпты. І ўсё гэта — з прыкладамі, тлумачэннямі і звыклым (на самой справе не) лёгкім тонaм. 😌

Калі вы яшчэ не чыталі папярэднія артыкулы — настойліва раім пачаць з іх:

Пра што сёння гаворка

Сёння мы сфармулюем базавыя рэкамендацыі да промптаў. Гэта свайго роду “памятка дызайнера” — толькі не для інтэрфейсаў, а для разумных тэкставых запытаў. Усе прынцыпы былі пераасэнсаваныя на падставе рэальных эксперыментаў і праз уласны досвед на лабараторных работах ад Google. Што такое prompt-дызайн?

Prompt-дызайн — гэта не проста “напісаць запыт у чат”. Гэта сумесь лагічнага мыслення, выразнасці і крэатыву, якая дапамагае атрымаць ад штучнага інтэлекту дакладныя, карысныя і асэнсаваныя адказы. У нейкім сэнсе — гэта як добрае пытанне да мудрага сябра: чым лепш сфармулюеш, тым лепш зразумеюць.

Асноўныя правілы prompt-дызайну:

1. Будзь лаканічным

🟥 Дрэнна:

text
1What do you think could be a good name for a flower shop that specializes
2in selling bouquets of dried flowers more than fresh flowers? 
3Thank you!
4

🟩 Добра:

text
1Suggest a name for a flower shop that sells dried flower bouquets.

📌 Чаму гэта важна:

Чым карацей і дакладней ваш запыт, тым менш шанцаў, што мадэль “сыдзе ўбок” ці пачне фантазіраваць. Размытасць = няпэўны вынік.

2. Будзь канкрэтным

🟥 Дрэнна:

text
1Tell me about Earth

🟩 Добра:

text
1Generate a list of ways that makes Earth unique compared to other planets.

📌 Чаму гэта важна:

Чым дакладней вы сфармулюеце сваю задачу, тым больш трапны і структураваны атрымаеце адказ.

3. Адна задача — адзін промпт

🟥 Дрэнна:

text
1What’s the best method of boiling water and why is the sky blue?

🟩 Добра:

text
1Prompt 1: What’s the best method of boiling water?  
2Prompt 2: Why is the sky blue?

📌 Чаму гэта важна:

LLM лепш спраўляюцца з адзінкавымі задачамі. Камбінаванне часта дадае блытаніну — для вас і для мадэлі.

4. Пакажы, што ты маеш на ўвазе (праз прыклады)

Хоць мы гэта ўжо разбіралі, але напомнім яшчэ раз: прыклад — лепшы настаўнік.

Zero-shot (без прыкладаў):
text
1Decide whether a Tweet’s sentiment is positive, neutral, or negative.
2Tweet: I loved the new YouTube video you made!
3Sentiment:
One-shot (з адным прыкладам):
text
1Decide whether a Tweet’s sentiment is positive, neutral, or negative.
2Tweet: I loved the new YouTube video you made!
3Sentiment: positive
4
5Tweet: That was awful. Super boring 😠
6Sentiment:
Few-shot (некалькі прыкладаў):
text
1Tweet: I loved the new YouTube video you made!
2Sentiment: positive
3Tweet: That was awful. Super boring 😠
4Sentiment: negative
5Tweet: The video was actually original and fresh.
6Sentiment:

📌 Чаму гэта важна:

Прыклад паказвае мадэлі, што ад яе чакаецца. Але памятайце: занадта шмат прыкладаў — гэта ўжо “падручнік”, а не запыт. Дастаткова 3–5.

5. Дадай сістэмныя інструкцыі (калі патрэбны абмежаванні)

Інструкцыі на ўзроўні сістэмы дапамагаюць “трымаць мадэль у межах”.

text
1System Instruction:
2You are an AI travel assistant. Only answer questions related to travel.
3
4Prompt:
5What’s the best place to visit in Milan? ✅  
6What’s for dinner? ❌ — “Sorry, I can’t answer that.”

📌 Чаму гэта важна:

Інструкцыя як “кантрольная мяжа” — мадэль ведае, дзе ёй працаваць, а дзе — не.

6. Замяняй “творчыя” задачы на выбар з варыянтаў

🟥 Дрэнна:

text
1I’m a high school student. Recommend me a programming activity.

🟩 Добра:

text
1Which of these activities should I choose and why?
2a) learn Python  
3b) learn JavaScript  
4c) learn Fortran

📌 Чаму гэта важна: Чым больш структураў вы даяце — тым прасцей кантраляваць вынік.

7. Сачы за “галюцынацыямі”

Так, LLM — разумныя, але не настолькі. Без доступу да актуальных дадзеных, яны могуць “прыдумаць” адказы:

text
1What day is it today?

👉 І адказ можа быць няправільны.

📌 Рашэнне: Для фактычных дадзеных — лепш інтэграваць LLM з API, базамі даных ці рэальнымі календарамі.

Абагульненне: як выглядае добры промпт

КрытэрыйАпісанне
ЯснасцьАдназначнае, зразумелае фармуляванне
КароткасцьМінімум тэксту, максімум сэнсу
КанкрэтнасцьДакладна сфармуляваная задача
АдназначнасцьАдна задача — адзін промпт
Наяўнасць прыкладаўПрыклады дапамагаюць мадэлі лепш зразумець сутнасць
КантрольСтруктураванасць прукладаў адказаў, магчымасць выбару
БяспекаМінімізацыя “галюцынацый” праз сістэмныя рамкі і яснасць кантэксту

На наступны раз…

На гэтым усё на сёння! У наступных артыкулах паглядзім, як працаваць з вынікамі працы мадэляў - пра фідбэкі

Пішыце свае пытанні, ідэі або фішкі, якія вам дапамагаюць — зробім гэты матэрыял жывым і супольным! Ну і як вам такі стыль напісання? Спадзяюся ён адчуваецца больш жывым чым папярэднія.

Да пабачэння! 👋

AI
Prompting
Promptdesigne
Admin, 2025-04-02

Пераклад групы артыкулаў пра складаныя сістэмы простымі словамі System Design. Добра падыходзіць для падрыхтоўкі да сумоўя. Github тут

1. Short/long polling, SSE, WebSocket

Short/long polling, SSE, WebSocket

HTTP-сервер не можа самастойна ініцыяваць злучэнне з браўзерам. У выніку менавіта веб-браўзер з'яўляецца ініцыятарам. Што ж рабіць далей, каб атрымліваць абнаўленні ў рэальным часе ад HTTP-сервера?

Як веб-браўзер, так і HTTP-сервер могуць быць адказнымі за гэтую задачу.

Браўзеры выконваюць асноўную працу: кароткія або доўгія апытанкі. Пры кароткім апытанні (short pooling) браўзер перыядычна паўтарае запыт, пакуль не атрымае актуальныя даныя. Пры доўгім апытанні (long pooling) HTTP-сервер не вяртае адказ, пакуль не з’явяцца новыя даныя.

HTTP-сервер і браўзер супрацоўнічаюць: праз WebSocket або SSE (падзеі, што адпраўляюцца серверам). У абодвух выпадках HTTP-сервер можа непасрэдна дасылаць апошнія даныя браўзеру пасля ўсталявання злучэння. Розніца ў тым, што SSE — аднабаковы пратакол, таму браўзер не можа дасылаць новыя запыты, у той час як WebSocket — двухбаковы, і браўзер можа працягваць дасылаць запыты.

interview
SystemDesign
LoveJS, 2025-05-11