Pereiti prie pagrindinio turinio
OpenAI

2026 m. sausio 29 d.

Inžinerija

Žvilgsnis į „OpenAI“ vidinį duomenų agentą

Autoriai: Bonnie Xu, Aravind Suresh ir Emma Tang

Įkeliama...

Duomenys lemia, kaip sistemos mokosi, produktai tobulėja ir kaip įmonės priima sprendimus. Tačiau gauti atsakymus greitai, teisingai ir turint tinkamą kontekstą dažnai yra sunkiau, nei turėtų būti. Siekdami tai palengvinti plečiantis „OpenAI“, sukūrėme savo specializuotą vidinį DI duomenų agentą, kuris tyrinėja ir analizuoja mūsų pačių platformą.

Mūsų agentas yra specializuotas, tik vidaus naudojimui skirtas įrankis (ne išorinis pasiūlymas), sukurtas specialiai pagal „OpenAI“ duomenis, leidimus ir darbo eigas. Rodome, kaip jį sukūrėme ir naudojame, kad pateiktume realių, reikšmingų pavyzdžių, kaip DI gali padėti atlikti kasdienį darbą visose mūsų komandose. „OpenAI“ įrankiai, kuriuos naudojome jam sukurti ir valdyti (Codex, mūsų GPT‑5 pavyzdinis modelis, Evals API(atsidaro naujame lange) ir Embeddings API(atsidaro naujame lange)), yra tie patys įrankiai, kuriuos teikiame kūrėjams visame pasaulyje.

Mūsų duomenų agentas leidžia darbuotojams gauti įžvalgas iš klausimų per kelias minutes, o ne dienas. Tai sumažina kliūtis traukiant duomenis ir atliekant niuansuotą analizę visose funkcijose, ne tik mūsų duomenų komandoje. Šiandien Inžinerijos, Duomenų mokslo, Patekimo į rinką strategijos, Finansų ir Tyrimų komandos „OpenAI“ viduje pasitelkia agentą atsakydamos į didelio poveikio duomenų klausimus. Pavyzdžiui, jis gali padėti atsakyti, kaip įvertinti pristatymus ir suprasti verslo būklę, visa tai atliekant intuityviu natūraliosios kalbos formatu. Agentas sujungia „Codex“ paremtas lentelių lygmens žinias su produkto ir organizaciniu kontekstu. Jo nuolat besimokanti atminties sistema reiškia, kad jis taip pat tobulėja su kiekvienu veiksmu.

Ekrano kopija, kurioje naudotojas prašo pateikti „ChatGPT“ WAU (savaitės aktyvių naudotojų skaičių) 2025 m. spalio 6 d., palyginti su „DevDay 2023“. Agentas praneša apie ≈800 mln. WAU 2025 m. ir ≈100 mln. 2023 m., pateikdamas pastabas, rodančias +700 mln. pokytį ir padidėjimą apie aštuonis kartus, po kurių pateikiamas paaiškinamasis kontekstas.

Šiame įraše išskaidysime, kodėl mums reikėjo specializuoto DI duomenų agento, kuo naudingas jo kodu praturtintas duomenų kontekstas bei savarankiškas mokymasis, ir ko išmokome šiame procese.

Kodėl mums reikėjo pasirinktinio įrankio

„OpenAI“ duomenų platforma aptarnauja daugiau nei 3,5 tūkst. vidinių naudotojų, dirbančių Inžinerijos, Produktų ir Tyrimų srityse, apimdama daugiau nei 600 petabaitų duomenų 70-yje tūkst. duomenų rinkinių. Esant tokiam mastui, tiesiog rasti tinkamą lentelę gali būti viena daugiausiai laiko reikalaujančių analizės dalių.

Kaip pasakė vienas įmonės naudotojas:

„Turime daugybę lentelių, kurios yra gana panašios; aš praleidžiu marias laiko bandydamas išsiaiškinti, kuo jos skiriasi ir kurią naudoti. Vienose yra neprisijungę naudotojai, kitose – ne. Kai kurios turi persidengiančių laukų; sunku pasakyti, kas yra kas.“

Net pasirinkus tinkamas lenteles, gauti teisingus rezultatus gali būti sudėtinga. Analitikai turi protauti apie lentelių duomenis ir lentelių ryšius, kad užtikrintų tinkamą transformacijų ir filtrų taikymą. Dažni nesėkmės būdai – jungimai „daug su daug“, filtrų nuleidimo (pushdown) klaidos ir neapdorotos „null“ reikšmės – gali tyliai paversti rezultatus neteisingais. „OpenAI“ mastu analitikai neturėtų gaišti laiko derindami SQL semantiką ar užklausų našumą: jie turėtų telkti dėmesį į rodiklių apibrėžimą, prielaidų tikrinimą ir duomenimis pagrįstų sprendimų priėmimą.

SQL kodo, apibrėžiančio dvi bendrąsias lentelių išraiškas (CTE) – <em>order_enriched</em> ir <em>monthly_segment</em>, kurios sujungia klientų geografinius duomenis, išveda užsakymo mėnesio laukus ir apskaičiuoja mėnesinius agreguotus duomenis, pvz., užsakymų skaičių, bendrąsias pajamas, pajamas su mokesčiais ir vidutinį dienų skaičių nuo išsiuntimo iki gavimo, ekrano kopija.

Šis SQL sakinys yra daugiau nei 180 eilučių ilgio. Nelengva žinoti, ar jungiame tinkamas lenteles ir ar vykdome užklausas tinkamuose stulpeliuose.

Kaip tai veikia

Apžvelkime, kas yra mūsų agentas, kaip jis kuruoja kontekstą ir kaip jis nuolat savarankiškai tobulėja.

Mūsų agentas veikia GPT‑5.2 pagrindu ir yra sukurtas protauti „OpenAI“ duomenų platformoje. Jis pasiekiamas visur, kur darbuotojai jau dirba: kaip „Slack“ agentas, per žiniatinklio sąsają, IDE aplinkose, „Codex“ CLI per MCP(atsidaro naujame lange) ir tiesiogiai „OpenAI“ vidinėje „ChatGPT“ programoje per MCP jungtį(atsidaro naujame lange).

Diagrama pavadinimu „How the data agent works“ (Kaip veikia duomenų agentas). Prieigos taškai – „Agent-UI“, „Local Agent-MCP“, „Remote Agent-MCP“ ir „Slack“ agentas – perduoda duomenis į „Agent-API“. API jungiasi prie vidaus duomenų žinių ir įmonės konteksto, sinchronizuojasi su duomenų saugykla bei platformos šaltiniais ir keičiasi užklausomis su GPT-5.2 modeliu per „Agent-MCP“.

Naudotojai gali užduoti sudėtingus, atvirus klausimus, kuriems paprastai prireiktų kelių rankinio tyrimo etapų. Paimkime šią pavyzdinę užklausą, kurioje naudojamas bandomasis duomenų rinkinys: „For NYC taxi trips, which pickup-to-dropoff ZIP pairs are the most unreliable, with the largest gap between typical and worst-case travel times, and when does that variability occur?“ (Kalbant apie Niujorko taksi keliones, kurios įlaipinimo ir išlaipinimo ZIP kodų poros yra pačios nepatikimiausios, t. y. turinčios didžiausią atotrūkį tarp įprastos ir blogiausio atvejo kelionės trukmės, ir kada šis kintamumas pasireiškia?)

Agentas atlieka analizę nuo pradžios iki galo: nuo klausimo supratimo iki duomenų tyrinėjimo, užklausų vykdymo ir išvadų susisteminimo.

Ekrano kopija, kurioje naudotojas klausia, kurios Niujorko taksi įlaipinimo → išlaipinimo ZIP poros yra pačios „nepatikimiausios“. Agentas paaiškina, kad naudoja apie 21 tūkst. kelionių iš samples.nyctaxi.trips, apibrėžia įprastą (p50) ir blogiausio atvejo (p95) trukmę, pritaiko filtrus ir aprašo, kaip nustato, kada įvyko ilgiausia kiekvienos ZIP poros kelionė.

Agento atsakymas į klausimą.

Viena iš agento supergalių yra tai, kaip jis protauja spręsdamas problemas. Užuot sekęs fiksuotu scenarijumi, agentas įvertina savo pažangą. Jei tarpinis rezultatas atrodo neteisingas (pvz., jame yra nulis eilučių dėl netinkamo sujungimo ar filtro), agentas tiria, kas nutiko, pakoreguoja savo metodą ir bando dar kartą. Per visą šį procesą jis išlaiko visą kontekstą ir perkelia išmoktus dalykus į kitus žingsnius. Šis uždarojo ciklo, savarankiško mokymosi procesas leidžia agentui pačiam atlikti iteracijas vietoje naudotojo – taip greičiau gaunami rezultatai ir užtikrinamos nuosekliai kokybiškesnės analizės nei rankinės darbo eigos.

Užduoties darbo eigos ekrano kopija, rodanti laipsnišką DI agento planą analizuojant Niujorko taksi kelionių trukmę. Jame numatyti tikslai, vidinės paieškos, schemos tikrinimas, kodo fragmentai ir protavimas apie p50 / p95 sklaidos skaičiavimą, nepatikimų ZIP porų nustatymą ir SQL užklausų planavimą.

Agento protavimas nustatant nepatikimiausias Niujorko taksi įlaipinimo–išlaipinimo poras.

Agentas apima visą analizaės darbo eigą: duomenų atradimą, SQL vykdymą ir užrašinių bei ataskaitų publikavimą. Jis supranta vidines įmonės žinias, gali ieškoti išorinės informacijos internete ir laikui bėgant tobulėja dėl išmokto naudojimo ir atminties.

Viską lemia kontekstas

Aukštos kokybės atsakymai priklauso nuo turtingo, tikslaus konteksto. Be konteksto net stiprūs modeliai gali pateikti klaidingus rezultatus, pavyzdžiui, visiškai neteisingai įvertinti naudotojų skaičių arba klaidingai interpretuoti vidinę terminiją.

Ekrano kopija, kurioje naudotojas klausia: „What was ChatGPT Image Gen logged-in DAU for the last 30 days?“ (Koks buvo „ChatGPT Image Gen“ prisijungusių kasdienių aktyvių naudotojų skaičius per pastarąsias 30 dienų?), o žemiau esančioje būsenos eilutėje rodoma, kad agentas „Working for 22m 41s“ (Dirba 22 min. 41 s) – tai rodo ilgai vykdomą užklausą.

Agentas be atminties, negalintis efektyviai vykdyti užklausų.

Ekrano kopija, kurioje naudotojas klausia: „What was ChatGPT Image Gen logged-in DAU for the last 30 days?“ (Koks buvo „ChatGPT Image Gen“ prisijungusių kasdienių aktyvių naudotojų skaičius per pastarąsias 30 dienų?). Po žinute esančioje būsenos eilutėje rašoma „Worked for 1m 22s“ (Dirbo 1 min. 22 s) – tai rodo, kad užklausa vis dar vykdoma ir užtrunka ilgai.

Agento atmintis leidžia greičiau atlikti užklausas surandant tinkamas lenteles.

Kad būtų išvengta šių nesėkmės būdų, agentas sukurtas remiantis keliais konteksto sluoksniais, kurie jį pagrindžia „OpenAI“ duomenimis ir institucinėmis žiniomis.

Diagrama pavadinimu „Data agent’s layers of context“ (Duomenų agento konteksto sluoksniai), rodanti šešis vienas ant kito sudėtus lygmenis: 1) lentelių naudojimas; 2) žmogaus anotacijos; 3) „Codex“ praturtinimas; 4) institucinės žinios; 5) atmintis; ir 6) vykdymo laiko kontekstas. Kiekvienas sluoksnis vaizduojamas kaip horizontali juosta piramidės formoje.

1 sluoksnis: lentelių naudojimas

  • Pagrindimas metaduomenimis: agentas remiasi schemos metaduomenimis (stulpelių pavadinimais ir duomenų tipais) rašydamas SQL ir naudoja lentelių kilmę (pvz., pirmesnių ir tolesnių grandžių lentelių ryšius), kad suteiktų kontekstą apie tai, kaip skirtingos lentelės yra susijusios.
  • Užklausų modelio vykdymas: istorinių užklausų įkėlimas padeda agentui suprasti, kaip rašyti savo užklausas ir kurios lentelės paprastai jungiamos kartu.

2 sluoksnis: žmogaus anotacijos

  • Kuruojami lentelių ir stulpelių aprašymai, kuriuos pateikia srities ekspertai, apimantys ketinimą, semantiką, verslo prasmę ir žinomas išlygas, kurios nėra lengvai numanomos iš schemų ar ankstesnių užklausų.a

Vien metaduomenų nepakanka. Norint iš tikrųjų atskirti lenteles, reikia suprasti, kaip jos buvo sukurtos ir iš kur jos atsirado.

3 sluoksnis: „Codex“ praturtinimas

  • Išvesdamas kodo lygmens lentelės apibrėžimą, agentas geriau supranta, kas iš tikrųjų yra duomenyse.
    • Niuansai apie tai, kas saugoma lentelėje ir kaip ji išvedama iš analizės įvykio, suteikia papildomos informacijos. Pavyzdžiui, tai gali suteikti konteksto apie reikšmių unikalumą, kaip dažnai atnaujinami lentelės duomenys, duomenų apimtį (pvz., jei lentelėje nėra tam tikrų laukų, ji pasižymi tokiu detalumu) ir t. t.
  • Tai suteikia patobulintą naudojimo kontekstą parodant, kaip lentelė naudojama ne tik SQL, bet ir „Spark“, „Python“ bei kitose duomenų sistemose.
  • Tai reiškia, kad agentas gali atskirti lenteles, kurios atrodo panašios, bet skiriasi kritiniais aspektais. Pavyzdžiui, jis gali pasakyti, ar lentelė apima tik tiesioginį „ChatGPT“ srautą. Šis kontekstas taip pat atnaujinamas automatiškai, todėl jis išlieka naujas be rankinės priežiūros.
Diagrama pavadinimu „Codex-enriched knowledge pipeline“ („Codex“ praturtintas žinių konvejeris). Populiarios lentelės tiekiamos į kelias „Codex“ užduotis, kurios išgauna informaciją iš „OpenAI“ kodų bazės, įskaitant lentelės paskirtį, detalumą ir pirminius raktus, tolesnio naudojimo modelius, alternatyvias lentelių parinktis ir duomenų naujumą.

4 sluoksnis: institucinės žinios 

  • Agentas gali pasiekti „Slack“, „Google Docs“ ir „Notion“, kuriuose fiksuojamas svarbus įmonės kontekstas, pavyzdžiui, pristatymai, patikimumo incidentai, vidiniai kodiniai pavadinimai ir įrankiai bei pagrindinių rodiklių kanoninės apibrėžtys ir skaičiavimo logika.
  • Šie dokumentai įkeliami, paverčiami vektoriniais duomenimis ir saugomi su metaduomenimis bei leidimais. Gavimo paslauga valdo prieigos kontrolę ir kaupimą talpykloje vykdymo metu, leisdama agentui efektyviai ir saugiai gauti šią informaciją.
Ekrano kopija, kurioje naudotojas klausia, kodėl gruodžio mėnesį sumažėjo jungties naudojimas. Agentas paaiškina, kad sumažėjimą lėmė 2025 m. lapkričio 13 d. prasidėjusi registravimo problema, dėl kurios po „ChatGPT 5.1“ paleidimo buvo netiksliai skaičiuojamas naudojimas. Senosios telemetrijos duomenys liko tušti, kol naujesnis įvykis tapo pagrindiniu patikimu duomenų šaltiniu.

5 sluoksnis: atmintis

  • Kai agentui pateikiami taisymai arba jis aptinka niuansų apie tam tikrus duomenų klausimus, jis gali įrašyti šiuos išmoktus dalykus kitam kartui, taip nuolat tobulėdamas kartu su naudotojais. 
    • Dėl to būsimi atsakymai pradedami nuo tikslesnio atskaitos taško, užuot pakartotinai susidūrus su tomis pačiomis problemomis.
    • Atminties tikslas – išsaugoti ir pakartotinai naudoti neakivaizdžius taisymus, filtrus ir apribojimus, kurie yra labai svarbūs duomenų teisingumui, bet sunkiai nustatomi vien iš kitų sluoksnių.
    • Pavyzdžiui, vienu atveju agentas nežinojo, kaip filtruoti tam tikrą analizės eksperimentą (jis rėmėsi atitikties tikrinimu pagal konkrečią eilutę, apibrėžtą eksperimento vartuose). Atmintis šiuo atveju buvo labai svarbi siekiant užtikrinti tinkamą filtravimą, užuot netiksliai bandžius derinti eilutes.
  • Kai agentui pateikiate taisymą arba kai jis pokalbio metu kažką išmoksta, jis pasiūlys išsaugoti šią atmintį kitam kartui. 
    • Atmintis taip pat gali rankiniu būdu sukurti ir redaguoti naudotojai.
    • Atminčių apimtis nustatoma visuotiniu ir asmeniniu lygmeniu, o agento įrankiai leidžia lengvai jas redaguoti.
Pranešimų juosta, kurioje matyti tekstas „Data agent wants to save 2 learnings to memory“ (Duomenų agentas nori į atmintį įrašyti du išmoktus dalykus), su pažymėtu elementu „ChatGPT Top-level Metrics“ (ChatGPT aukščiausio lygio rodikliai) ir patvirtinimo pranešimu dešinėje, kuriame rašoma „Saved to global memory“ (Įrašyta į visuotinę atmintį) su žalia varnele.

6 sluoksnis: vykdymo laiko kontekstas

  • Kai nėra ankstesnio konteksto apie lentelę arba kai turima informacija yra pasenusi, agentas gali pateikti tiesiogines užklausas duomenų saugyklai, kad tiesiogiai patikrintų lentelę ir atliktų užklausą. Tai leidžia realiuoju laiku patvirtinti schemas, suprasti duomenis ir atitinkamai reaguoti.
  • Agentas taip pat gali susisiekti su kitomis Duomenų platformos sistemomis (metaduomenų paslauga, „Airflow“, „Spark“), kai reikia gauti platesnį duomenų kontekstą, esantį už saugyklos ribų.

We run a daily offline pipeline that aggregates table usage, human annotations, and Codex-derived enrichment into a single, normalized representation. This enriched context is then converted into embeddings using the OpenAI embeddings API(atsidaro naujame lange) and stored for retrieval. At query time, the agent pulls only the most relevant embedded context via retrieval-augmented generation(atsidaro naujame lange) (RAG) instead of scanning raw metadata or logs. This makes table understanding fast and scalable, even across tens of thousands of tables, while keeping runtime latency predictable and low. Runtime queries are issued to our data warehouse live as needed.

Diagrama pavadinimu „Context retrieval in the data agent“ (Konteksto gavimas duomenų agente). Išankstinio apdorojimo neprisijungus sluoksniai – lentelių naudojimas, žmogaus anotacijos, „Codex“ praturtinimas, institucinės žinios ir atmintis – perduodami į RAG įtaisytuosius duomenis. Tiesioginis gavimas rodo agentą, vykdantį užklausą duomenų bazėje per semantinę paiešką arba tikslią teksto paiešką, kad sukurtų vykdymo laiko kontekstą.

Together, these layers ensure the agent’s reasoning is grounded in OpenAI’s data, code, and institutional knowledge, dramatically reducing errors and improving answer quality.

Built to think and work like a teammate

One-shot answers work when the problem is clear, but most questions aren’t. More often, arriving at the correct result requires back-and-forth refinement and some course correction.

The agent is built to behave like a teammate you can reason with. It’s a conversational, always-on and handles both quick answers and iterative exploration.

It carries over complete context across turns, so users can ask follow-up questions, adjust their intent, or change direction without restating everything. If the agent starts heading down the wrong path, users can interrupt mid-analysis and redirect it, just like working with a human collaborator who listens instead of plowing ahead.

When instructions are unclear or incomplete, the agent proactively asks clarifying questions. If no response is provided, it applies sensible defaults to make progress. For example, if a user asks about business growth with no date range specified, it may assume the last seven or 30 days. These priors allow it to stay responsive and non-blocking while still converging on the right outcome.

The result is an agent that works well both when you know exactly what you want (e.g., “Tell me about this table”) and just as strong when you’re exploring (e.g., “I’m seeing a dip here, can we break this down by customer type and timeframe?”). 

After rollout, we observed that users frequently ran the same analyses for routine repetitive work. To expedite this, the agent's workflows package recurring analyses into reusable instruction sets. Examples include workflows for weekly business reports and table validations. By encoding context and best practices once, workflows streamline repeat analyses and ensure consistent results across users.

Naudotojo sąsajos įvesties juosta su vietos rezervavimo tekstu „Ask a data question“ (Užduokite duomenų klausimą). Po ja yra mygtukas su užrašu „Use a workflow“ (Naudoti darbo eigą), o dešinėje – mikrofono ir siuntimo piktogramos. Juosta užapvalintais kampais tamsiame fone.

Moving fast without breaking trust

Building an always-on, evolving agent means quality can drift just as easily as it can improve. Without a tight feedback loop, regressions are inevitable and invisible. The only way to scale capability without breaking trust is through systematic evaluation.

In this section, we’ll discuss how we leverage OpenAI’s Evals API(atsidaro naujame lange) to measure and protect the agent’s response quality.

Its Evals are built on curated sets of question-answer pairs. Each question targets an important metric or analytical pattern we care deeply about getting right, paired with a manually authored “golden” SQL query that produces the expected result. For each eval, we send the natural language question to its query-generation endpoint, execute the generated SQL, and compare the output against the result of the expected SQL.

Diagrama pavadinimu „Data agent’s evaluation pipeline“ (Duomenų agento įvertinimo konvejeris). Klausimų ir atsakymų įvertinimo poros su numatytu SQL perduodamos į generavimo etapą, kuriame sukuriamas SQL ir rezultatai. „OpenAI Evals“ palygina sugeneruotus ir numatytus rezultatus naudodama duomenų rėmelių ir SQL palyginimą, pateikdama įvertinimą ir argumentus.

Evaluation doesn’t rely on naive string matching. Generated SQL can differ syntactically while still being correct, and result sets may include extra columns that don’t materially affect the answer. To account for this, we compare both the SQL and the resulting data, and feed these signals into OpenAI’s Evals grader. The grader produces a final score along with an explanation, capturing both correctness and acceptable variation.

These evals are like unit tests that run continuously during development to identify regressions as canaries in production; this allows us to catch issues early and confidently iterate as the agent's capabilities expand.

Agent security

Our agent plugs directly into OpenAI’s existing security and access-control model. It operates purely as an interface layer, inheriting and enforcing the same permissions and guardrails that govern OpenAI’s data. 

All of the agent’s access is strictly pass-through, meaning users can only query tables they already have permission to access. When access is missing, it flags this or falls back to alternative datasets the user is authorized to use.

Finally, it's built for transparency. Like any system, it can make mistakes. It exposes its reasoning process by summarizing assumptions and execution steps alongside each answer. When queries are executed, it links directly to the underlying results, allowing users to inspect raw data and verify every step of the analysis.

Lessons learned

Building our agent from scratch surfaced practical lessons about how agents behave, where they struggle, and what actually makes them reliable at scale.

Lesson #1: Less is More

Early on, we exposed our full tool set to the agent, and quickly ran into problems with overlapping functionality. While this redundancy can be helpful for specific custom cases and is more obvious to a human when manually invoking, it’s confusing to agents. To reduce ambiguity and improve reliability, we restricted and consolidated certain tool calls.

Lesson #2: Guide the Goal, Not the Path

We also discovered that highly prescriptive prompting degraded results. While many questions share a general analytical shape, the details vary enough that rigid instructions often pushed the agent down incorrect paths. By shifting to higher-level guidance and relying on GPT‑5’s reasoning to choose the appropriate execution path, the agent became more robust and produced better results.

Lesson #3: Meaning Lives in Code

Schemas and query history describe a table’s shape and usage, but its true meaning lives in the code that produces it. Pipeline logic captures assumptions, freshness guarantees, and business intent that never surface in SQL or metadata. By crawling the codebase with Codex, our agent understands how datasets are actually constructed and is able to better reason about what each table actually contains. It can answer “what’s in here” and “when can I use it” far more accurately than from warehouse signals alone. 

Same vision, new tools

We’re constantly working to improve our agent by increasing its ability to handle ambiguous questions, improving its reliability and accuracy with stronger validations, and integrating it more deeply into workflows. We believe it should blend naturally into how people already work, instead of functioning like a separate tool.

While our tooling will keep benefiting from underlying improvements in agent reasoning, validation, and self-correction, our team’s mission remains the same: seamlessly deliver fast, trustworthy data analysis across OpenAI’s data ecosystem.

Autorius

Bonnie Xu, Aravind Suresh ir Emma Tang

Padėkos

Ypatingai dėkojame Duomenų produktyvumo ir Duomenų mokslo komandoms, taip pat daugybei įvairių funkcijų naudotojų už jų eksperimentavimą ir atsiliepimus.