Підтримка
Відповідайте на питання підтримки з власної документації
Створіть LiveDoc, завантажте центр допомоги й внутрішній runbook, отримайте уривки, що відповідають тікету, і дозвольте моделі відповідати лише з цих доказів.
Скопіювати промпт
Замініть поля в квадратних дужках і вставте в Claude Code, Codex або AI з доступом до термінала. Він встановить скіл Felo, запитає перед витратою кредитів і запустить процес.
Дай відповідь на це питання підтримки лише з нашої документації: [питання клієнта]. База знань: [URL довідкового центру або LiveDoc short_id]. Шлях ескалації: [відповідальна особа або черга]. Доступний контекст клієнта: [план, регіон, продукт] (ніколи не проси пароль або платіжні дані). Створи: 1. Пряму відповідь у двох-чотирьох реченнях. 2. Підтвердні фрагменти документації з назвою ресурсу. 3. Наступний крок для клієнта. 4. Внутрішню нотатку: використані ресурси й оцінки релевантності. Правила: - Відповідай лише з отриманих фрагментів. Якщо немає результатів або релевантність низька, ескалюй; ніколи не вгадуй. - Не вигадуй політики, повернення коштів, ціни чи дії з акаунтом. - Не залучай приватні дані клієнта, облікові дані чи платіжну інформацію. - Питай перед витратою кредитів на завантаження даних або пошук. - Не надсилай відповідь клієнту; поверни її мені на перевірку.
Копія також містить кроки встановлення й правила безпеки.
Що ви отримаєте
Приклад результату одного запуску. Не живе генерування.
Відповідь: Ваш план поновлюється першого числа місяця. Відхилена картка повторюється три дні, потім місце призупиняється.
Джерела: «часті запитання з оплати» - https://example.com/help/billing
Якщо це не покрито: ескалюйте до черги оплати з ID рахунку.
Точні виклики
Для розробників: той самий процес як код, у порядку виконання.
Показати справжні виклики API
Створіть базу знань
Створіть базу через LiveDoc API і збережіть short_id.
support.ts const BASE = "https://openapi.felo.ai"; const headers = { Authorization: `Bearer ${process.env.FELO_API_KEY}`, "Content-Type": "application/json", }; async function felo<T>(path: string, body?: unknown): Promise<T> { const res = await fetch(`${BASE}${path}`, { method: body ? "POST" : "GET", headers, body: body ? JSON.stringify(body) : undefined, }); if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`); return res.json() as Promise<T>; } type LiveDocData = { data: { short_id: string } }; const kb = await felo<LiveDocData>("/v2/livedocs", { name: "Support knowledge base", description: "Help center, policy pages, and internal runbooks", }); const kbId = kb.data.short_id; // save this in your configПриклад результату
{ "short_id": "PvyKouzJirXjFdst4uKRK3", "name": "Support knowledge base", "description": "Help center, policy pages, and internal runbooks" }Завантажте публічний центр допомоги
Додайте URL центру допомоги як ресурс LiveDoc.
support.ts type UrlResult = { data: { url: string; status: string; fail_reason: string | null; resource_id: string | null; }[]; }; const added = await felo<UrlResult>( `/v2/livedocs/${kbId}/resources/urls`, { urls: [ "https://example.com/help/getting-started", { url: "https://example.com/help/billing", title: "Billing FAQ" }, ], }, ); const failed = added.data.filter((item) => item.status === "failed");Приклад результату
[ { "url": "https://example.com/help/getting-started", "status": "success", "resource_id": "res_003" }, { "url": "https://example.com/help/billing", "status": "existed", "resource_id": "res_004" } ]Додайте внутрішню документацію
Додайте внутрішній runbook як документ.
support.ts type ResourceData = { data: { id: string } }; const runbook = `# Refund policy Refunds are available within 30 days of purchase. Requests after 30 days need a manual review by the billing team. `; const policy = await felo<ResourceData>( `/v2/livedocs/${kbId}/resources/doc`, { title: "Refund policy", content: runbook }, ); console.log(policy.data.id); // use this for updatesОтримайте докази на питання
Семантичний пошук повертає найрелевантніші уривки й оцінки.
support.ts type Hit = { id: string; title: string; content: string; score: number }; async function findEvidence(question: string) { const res = await felo<{ data: Hit[] }>( `/v2/livedocs/${kbId}/resources/retrieve`, { query: question }, ); return res.data.filter((hit) => hit.score >= 0.7).slice(0, 4); } const question = "Can I get a refund after 45 days?"; const hits = await findEvidence(question);Приклад результату
[ { "id": "res_005", "title": "Refund policy", "content": "Refunds are available within 30 days of purchase…", "score": 0.92 } ]Відповідайте лише з доказів
Дозвольте моделі використати лише отримані уривки й ескалуйте без результатів.
support.ts type Completion = { choices: { message: { content: string | null } }[]; usage: { prompt_tokens: number; completion_tokens: number; total_tokens: number }; }; const context = hits .map((hit) => `### ${hit.title}\n${hit.content}`) .join("\n\n"); const completion = await felo<Completion>("/api/v1/chat/completions", { model: "anthropic/claude-haiku-5.5", messages: [ { role: "system", content: "Answer only from the context. If the context does not cover the question, say so and hand the ticket to a human.", }, { role: "user", content: `Context:\n${context}\n\nQuestion: ${question}`, }, ], }); console.log(completion.choices[0].message.content); console.log(completion.usage.total_tokens);Приклад результату
"No. The Refund policy says refunds are available within 30 days of purchase, so a request at 45 days needs a manual review by the billing team."
Що входить
- LiveDoc із центром допомоги й внутрішнім runbook
- Семантичний пошук з уривками й заголовками
- Відповідь із цитованими джерелами
- Чітка ескалація за відсутності покриття
Чого не робить
- Відповідає лише з вашої документації й не ходить відкритим вебом
- Не виконує дій з акаунтом, повернень чи зміни плану
- Без приватних даних клієнтів і облікових даних у базі
- Застаріла документація дає застарілі відповіді; оновлюйте
- Лише чернетка відповіді, без надсилання клієнту
Запитання
Звідки відповідь?
Лише з вашого LiveDoc: сторінок центру допомоги й runbook. Пошук повертає уривки, а агент пише з них.
Якщо документація не покриває?
Ескалація. Відсутність результатів або низька релевантність вважаються непокриттям, не дозволом вгадувати.
Як тримати базу актуальною?
Коли змінюється політика, додайте URL знову й оновіть документи; процес містить команди оновлення й аудиту.
Чи можна використати в черзі тікетів?
Так, як крок чернетки. Тримайте людське схвалення перед надсиланням клієнту.
Чи обробляє питання, специфічні для акаунта?
Лише з документацією ні. Дані акаунта у вашій системі; передавайте лише потрібний безпечний контекст, ніколи облікові дані.
Скільки коштує один запуск?
Інгест і пошук оплачуються за використання; актуальні тарифи на сторінці цін, а промпт просить схвалення перед витратою.
Пов’язані процеси
Перетворіть одне питання на дослідницький бриф із джерелами
Запитайте веб, збережіть сторінки за відповіддю як Markdown, додайте те, що кажуть практики на X, і тримайте докази в LiveDoc, який можна згодом переглянути.
Відкрити робочий процесКонтентПублікуйте щоденний AI-дайджест, який команда справді читає
Отримайте підсумок із джерелами, додайте розмови практиків на X, візьміть транскрипт відео, складіть випуск у Markdown і заархівуйте в LiveDoc.
Відкрити робочий процесОфісПеретворіть дослідницьку сторінку на презентацію
Вилучіть сторінку, збережіть як контекст LiveDoc, дозвольте PPT Task API збудувати дек і питайте, доки не буде готового посилання.
Відкрити робочий процесАдаптуйте
Той самий рецепт, підлаштований під те, як ви насправді працюєте.
Лише одна продуктова лінія
Обмежте одним продуктом, щоб база була чистіша.
Додайте класифікацію тікетів
Спершу класифікуйте тип питання, потім шукайте потрібну документацію.
Періодичний аудит
Щомісяця перевіряйте зламані посилання й старі політики.
Далі
Довідкові сторінки за цим рецептом і наступні кроки.