bebo231312312321

Untitled

Jun 23rd, 2026
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.04 KB | None | 0 0
  1. //примера за СЕО оптимизация на 50 странции примерно
  2.  
  3.  
  4. import Anthropic from "@anthropic-ai/sdk";
  5.  
  6.   const client = new Anthropic();
  7.   const MODEL = "claude-opus-4-8";
  8.   const MAX_ITERS = 4;
  9.  
  10.   const RUBRIC = `
  11.   - title: 5060 знака, съдържа ключовата дума, уникален
  12.   - meta_description: 120158 знака, съдържа ключовата дума + подкана
  13.   - h1: един, съдържа ключовата дума
  14.   - slug: кратък, с ключовата дума, без стоп-думи
  15.   `;
  16.  
  17.   // Хелпер : Claude връща масив от блокове като в този пример Ели вадим само текста
  18.   function firstText(message) {
  19.     return message.content.find((b) => b.type === "text")?.text ?? "";
  20.   }
  21.  
  22.   // BUILD (и FIX): тука специално м усе подава issuee и преписва по тях
  23.   async function build(page, rubric, issues = null) {
  24.     const fix = issues
  25.       ? `\n\nПоправи тези проблеми от предишния опит:\n- ${issues.join("\n- ")}`
  26.       : "";
  27.     const msg = await client.messages.create({
  28.       model: MODEL,
  29.       max_tokens: 1500,
  30.       system: "Ти си SEO специалист. Спазвай стриктно рубриката.",
  31.       messages: [{
  32.         role: "user",
  33.         content: `РУБРИКА:\n${rubric}\n\nСтраница: ${page.url}\nКлючова дума: ${page.keyword}\nСъдържание:\n${page.content}${fix}`,
  34.       }],
  35.       output_config: { format: { type: "json_schema", schema: {
  36.         type: "object",
  37.         properties: {
  38.           title: { type: "string" }, meta_description: { type: "string" },
  39.           h1: { type: "string" }, slug: { type: "string" },
  40.         },
  41.         required: ["title", "meta_description", "h1", "slug"],
  42.         additionalProperties: false,
  43.       }}},
  44.     });
  45.     return JSON.parse(firstText(msg));
  46.   }
  47.  
  48.   // REVIEW / GRADE: оценява срещу рубриката. Чисто оценяване коеот връща pass според issue
  49.   async function review(assets, page, rubric) {
  50.     const msg = await client.messages.create({
  51.       model: MODEL,
  52.       max_tokens: 1000,
  53.       system: "Ти си строг SEO рецензент. Провери всеки ред от рубриката. pass=true само ако ВСИЧКО е изпълнено; иначе изброй конкретните проблеми.",
  54.       messages: [{
  55.         role: "user",
  56.         content: `РУБРИКА:\n${rubric}\n\nКлючова дума: ${page.keyword}\nАктиви:\n${JSON.stringify(assets)}`,
  57.       }],
  58.       output_config: { format: { type: "json_schema", schema: {
  59.         type: "object",
  60.         properties: {
  61.           pass: { type: "boolean" },
  62.           issues: { type: "array", items: { type: "string" } },
  63.         },
  64.         required: ["pass", "issues"],
  65.         additionalProperties: false,
  66.       }}},
  67.     });
  68.     return JSON.parse(firstText(msg));
  69.   }
  70.  
  71.   //  build ⇆ review, докато pass=true. С две думи това е цикалът
  72.   async function optimizePage(page, rubric) {
  73.     let issues = null;
  74.     for (let i = 1; i <= MAX_ITERS; i++) {
  75.       const assets = await build(page, rubric, issues); // build / fix
  76.       const verdict = await review(assets, page, rubric); // grade
  77.       if (verdict.pass) return { ok: true, iters: i, assets }; // спира на pass
  78.       issues = verdict.issues; // тука връщаме грешките и  следващият build ги поправя
  79.     }
  80.     return { ok: false, iters: MAX_ITERS };
  81.   }
  82.  
  83.   // мАСИВА със страници
  84.   const pages = [
  85.     { url: "/kursove/finansirane-za-startap", keyword: "финансиране за стартъп", content: "..." },
  86.   ];
  87.   for (const page of pages) {
  88.     const r = await optimizePage(page, RUBRIC);
  89.     console.log(`${page.url} — ${r.ok ? "OK" : "НЕ мина"} (${r.iters} итерации)`);
  90.   }
Advertisement
Add Comment
Please, Sign In to add comment