[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:ai-engineer\u002Fmid":4,"config":193},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":8,"spec_key":8,"spec_name":8,"locale":9,"cell_total":10,"field_total":11,"seniorities":12,"topics":15,"specs":98,"samples":109},"ai-engineer","AI Engineer","mid","","en",1713,2025,[13,7,14],"junior","senior",[16,20,23,26,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95],{"key":17,"name":18,"count":19},"agents-tool-use","Agents Tool Use",75,{"key":21,"name":22,"count":19},"aimlops-deployment-strategies-ml","Aimlops Deployment Strategies Ml",{"key":24,"name":25,"count":19},"aimlops-experiment-tracking-reproducibility","Aimlops Experiment Tracking Reproducibility",{"key":27,"name":28,"count":19},"aimlops-feature-store-data-versioning","Aimlops Feature Store Data Versioning",{"key":30,"name":31,"count":19},"aimlops-ml-cicd-pipelines","Aimlops Ml Cicd Pipelines",{"key":33,"name":34,"count":19},"aimlops-model-monitoring-drift-detection","Aimlops Model Monitoring Drift Detection",{"key":36,"name":37,"count":19},"aimlops-model-versioning-registry","Aimlops Model Versioning Registry",{"key":39,"name":40,"count":19},"aipy-async-concurrency-ml-serving","Aipy Async Concurrency Ml Serving",{"key":42,"name":43,"count":19},"aipy-data-pipeline-dataloader","Aipy Data Pipeline Dataloader",{"key":45,"name":46,"count":19},"aipy-gpu-memory-management","Aipy Gpu Memory Management",{"key":48,"name":49,"count":19},"aipy-numpy-vectorization-broadcasting","Aipy Numpy Vectorization Broadcasting",{"key":51,"name":52,"count":19},"aipy-python-ml-packaging-environments","Aipy Python Ml Packaging Environments",{"key":54,"name":55,"count":19},"aipy-tensor-ops-autograd","Aipy Tensor Ops Autograd",{"key":57,"name":58,"count":19},"embeddings-vector-search","Embeddings Vector Search",{"key":60,"name":61,"count":19},"evaluation-testing","Evaluation Testing",{"key":63,"name":64,"count":19},"fine-tuning-adaptation","Fine Tuning Adaptation",{"key":66,"name":67,"count":19},"inference-serving","Inference Serving",{"key":69,"name":70,"count":19},"llm-fundamentals","Llm Fundamentals",{"key":72,"name":73,"count":19},"prompt-engineering","Prompt Engineering",{"key":75,"name":76,"count":19},"rag-chunking-indexing","Rag Chunking Indexing",{"key":78,"name":79,"count":19},"rag-embeddings-similarity","Rag Embeddings Similarity",{"key":81,"name":82,"count":19},"rag-evaluation","Rag Evaluation",{"key":84,"name":85,"count":19},"rag-generation-context","Rag Generation Context",{"key":87,"name":88,"count":19},"rag-reranking-fusion","Rag Reranking Fusion",{"key":90,"name":91,"count":19},"rag-retrieval","Rag Retrieval",{"key":93,"name":94,"count":19},"rag-retrieval-search","Rag Retrieval Search",{"key":96,"name":97,"count":19},"safety-guardrails","Safety Guardrails",[99,103,106],{"key":100,"name":101,"count":102},"llm-rag","LLM\u002FRAG",450,{"key":104,"name":105,"count":102},"mlops","MLOps",{"key":107,"name":108,"count":102},"python","Python",[110,128,141,154,167,180],{"id":111,"topic":18,"difficulty":112,"body":113,"options":114,"correct_key":122,"explanation":127},"019f5912-456f-7228-983d-cd3cee4bf968",2,"An agent is designed to keep calling tools and reasoning until it decides the task is complete. What safeguard should be included to prevent it from running forever due to a bug or a confusing tool result?",[115,118,121,124],{"key":116,"text":117},"a","Remove the ability to call any tool more than once per conversation.",{"key":119,"text":120},"b","Let the loop run indefinitely with no cap at all, since a well-written prompt reliably guarantees the model will eventually decide to stop calling tools on its own.",{"key":122,"text":123},"c","A maximum number of iterations or a time\u002Fcost budget, so the loop is forcibly stopped and a fallback response is returned at the limit.",{"key":125,"text":126},"d","Increase the model's temperature so it produces more varied actions and breaks out of repetitive patterns.","A hard iteration or budget limit is the standard safeguard against runaway agent loops; once reached, the application stops the loop and returns a fallback rather than relying on the model to self-terminate. A prompt alone cannot guarantee termination, and raising temperature does not address the underlying loop-control problem.",{"id":129,"topic":18,"difficulty":112,"body":130,"options":131,"correct_key":116,"explanation":140},"019f5912-4570-7ac2-801b-b378acec5e45","A tool call fails because the target service returns an error (e.g., an invalid parameter). What is the recommended way to handle this inside the agent loop?",[132,134,136,138],{"key":116,"text":133},"Feed the error back to the model as the tool's result, so it can reason about the failure and decide whether to retry, adjust arguments, or give up.",{"key":119,"text":135},"Silently discard the error entirely and let the model simply assume that the tool call must have succeeded as originally intended.",{"key":122,"text":137},"Immediately crash the whole conversation and surface a raw, unhandled exception directly to the end user without any attempt to recover gracefully.",{"key":125,"text":139},"Automatically retry the exact same call an unlimited number of times in the background without ever informing the model that anything actually went wrong.","Errors should be surfaced to the model as an observation, the same way a successful result would be, so the model has the information it needs to adapt (fix the arguments, try a different approach, or stop). Hiding the error, crashing, or retrying blindly forever all remove the model's ability to reason about the failure.",{"id":142,"topic":18,"difficulty":112,"body":143,"options":144,"correct_key":119,"explanation":153},"019f5912-4573-7530-a999-dcc3a2850554","Why is idempotency an important property for a tool the agent might call, such as `create_order`?",[145,147,149,151],{"key":116,"text":146},"It makes the tool's JSON schema noticeably smaller and easier for the model to parse quickly, which is actually the main practical reason schemas are designed to be idempotent in the first place.",{"key":119,"text":148},"An agent loop may retry a call after a timeout, so an idempotent tool ensures repeating the same call doesn't create a duplicate side effect like placing the order twice.",{"key":122,"text":150},"It guarantees the model will always prefer that tool over other available tools.",{"key":125,"text":152},"It removes the need for the tool to validate its input parameters.","Agent loops can end up calling the same side-effecting tool more than once (e.g., after a timeout where the outcome is unclear), so idempotency is what prevents that repetition from causing duplicate real-world effects. It has nothing to do with schema size, tool selection preference, or skipping input validation.",{"id":155,"topic":18,"difficulty":112,"body":156,"options":157,"correct_key":125,"explanation":166},"019f5912-4575-7480-bf2f-7dadec0e4a5d","You are adding a `charge_customer` tool that an agent can call autonomously. What is a reasonable safety practice before this tool actually executes?",[158,160,162,164],{"key":116,"text":159},"Let the agent execute charges freely as long as the tool's description mentions the amount involved.",{"key":119,"text":161},"Rely only on the model's own judgment about when charging is appropriate, without any additional check in the application.",{"key":122,"text":163},"Log the charge in the system only after it has already gone through, and skip any check beforehand entirely, since after-the-fact logging on its own is generally considered a sufficient control here.",{"key":125,"text":165},"Require an explicit confirmation step, such as human approval, before a side-effecting, hard-to-reverse action like a real charge is actually executed.","Side-effecting, hard-to-reverse actions like real payments warrant an extra confirmation or business-rule check outside the model's own judgment, precisely because the model can make mistakes. Description text, model judgment alone, or after-the-fact logging do not prevent an incorrect charge from actually happening.",{"id":168,"topic":18,"difficulty":112,"body":169,"options":170,"correct_key":116,"explanation":179},"019f5912-4576-7dac-910a-013795714434","Two versions of the same tool's schema are shown below:\n```\n\u002F\u002F Version 1\n{\"name\": \"search\", \"description\": \"Searches.\", \"parameters\": {\"query\": \"string\"}}\n\n\u002F\u002F Version 2\n{\"name\": \"search_orders\", \"description\": \"Searches the customer's past orders by order ID or date range. Use only for order lookups, not general product search.\", \"parameters\": {\"query\": \"string\"}}\n```\nWhich statement is most accurate?",[171,173,175,177],{"key":116,"text":172},"Version 2 is more likely to be selected correctly and called with sensible arguments, because its name and description clarify scope and disambiguate it from other tools.",{"key":119,"text":174},"Both versions behave identically to the model, since only parameter names affect tool selection.",{"key":122,"text":176},"Version 1 is preferable because a shorter description reduces the number of tokens sent to the model.",{"key":125,"text":178},"The description field has no effect on tool selection; only the function's internal implementation matters.","A descriptive name and a scoped, specific description give the model the context it needs to pick this tool correctly (and avoid confusing it with, say, a general product search tool). Token savings from a shorter description are a poor trade-off against selection errors, and the description does meaningfully affect model behavior.",{"id":181,"topic":18,"difficulty":112,"body":182,"options":183,"correct_key":122,"explanation":192},"019f5912-457a-703a-a9ae-f2138d193356","A travel-booking agent needs to: (1) look up available flights, (2) check the user's saved payment method, and (3) book the selected flight. Why is this a good candidate for an agent loop rather than a single tool call?",[184,186,188,190],{"key":116,"text":185},"Because a single tool call can never return more than one field of data, regardless of how the underlying API itself happens to be designed.",{"key":119,"text":187},"Because agent loops always run faster than a single well-designed API call, regardless of the actual implementation details involved.",{"key":122,"text":189},"The steps depend on each other — which flight to book depends on availability, and booking depends on the chosen flight — so tools must be called in sequence.",{"key":125,"text":191},"The model is technically unable to generate a JSON payload containing more than one distinct tool call name across the entire lifetime of a single conversation session.","The core reason to use an agent loop here is data dependency between steps: the outcome of one call determines the input to the next. This is exactly the scenario an iterative loop is designed for, unlike tasks where all needed information is already known upfront.",{"fields":194,"seniorities":373,"interview_shapes":374,"locales":379,"oauth":381,"question_count":384,"coach_enabled":385,"jd_match_enabled":385},[195,219,239,256,280,287,306,325,347,354,360,367],{"key":196,"name_tr":197,"name_en":197,"sort":198,"specializations":199},"backend","Backend",1,[200,203,206,207,210,213,216],{"key":201,"name":202,"field":196},"general","Genel",{"key":204,"name":205,"field":196},"go","Go",{"key":107,"name":108,"field":196},{"key":208,"name":209,"field":196},"java","Java",{"key":211,"name":212,"field":196},"csharp","C#\u002F.NET",{"key":214,"name":215,"field":196},"nodejs","Node.js",{"key":217,"name":218,"field":196},"php","PHP",{"key":220,"name_tr":221,"name_en":221,"sort":112,"specializations":222},"frontend","Frontend",[223,224,227,230,233,236],{"key":201,"name":202,"field":220},{"key":225,"name":226,"field":220},"javascript","JavaScript",{"key":228,"name":229,"field":220},"typescript","TypeScript",{"key":231,"name":232,"field":220},"react","React",{"key":234,"name":235,"field":220},"vue","Vue",{"key":237,"name":238,"field":220},"angular","Angular",{"key":240,"name_tr":241,"name_en":241,"sort":242,"specializations":243},"fullstack","Fullstack",3,[244,245,246,247,248,249,250,251,252,253,254,255],{"key":201,"name":202,"field":240},{"key":204,"name":205,"field":196},{"key":107,"name":108,"field":196},{"key":208,"name":209,"field":196},{"key":211,"name":212,"field":196},{"key":214,"name":215,"field":196},{"key":217,"name":218,"field":196},{"key":225,"name":226,"field":220},{"key":228,"name":229,"field":220},{"key":231,"name":232,"field":220},{"key":234,"name":235,"field":220},{"key":237,"name":238,"field":220},{"key":257,"name_tr":258,"name_en":258,"sort":259,"specializations":260},"devops-cloud","DevOps \u002F Cloud",4,[261,262,265,268,271,274,277],{"key":201,"name":202,"field":257},{"key":263,"name":264,"field":257},"aws","AWS",{"key":266,"name":267,"field":257},"gcp","GCP",{"key":269,"name":270,"field":257},"azure","Azure",{"key":272,"name":273,"field":257},"kubernetes","Kubernetes",{"key":275,"name":276,"field":257},"terraform","Terraform",{"key":278,"name":279,"field":257},"linux","Linux",{"key":5,"name_tr":6,"name_en":6,"sort":281,"specializations":282},5,[283,284,285,286],{"key":201,"name":202,"field":5},{"key":107,"name":108,"field":5},{"key":100,"name":101,"field":5},{"key":104,"name":105,"field":5},{"key":288,"name_tr":289,"name_en":290,"sort":291,"specializations":292},"database","Veritabanı","Database",6,[293,294,297,300,303],{"key":201,"name":202,"field":288},{"key":295,"name":296,"field":288},"postgresql","PostgreSQL",{"key":298,"name":299,"field":288},"mysql","MySQL",{"key":301,"name":302,"field":288},"mongodb","MongoDB",{"key":304,"name":305,"field":288},"redis","Redis",{"key":307,"name_tr":308,"name_en":309,"sort":310,"specializations":311},"mobile","Mobil","Mobile",7,[312,313,316,319,322],{"key":201,"name":202,"field":307},{"key":314,"name":315,"field":307},"ios-swift","iOS (Swift)",{"key":317,"name":318,"field":307},"android-kotlin","Android (Kotlin)",{"key":320,"name":321,"field":307},"flutter","Flutter",{"key":323,"name":324,"field":307},"react-native","React Native",{"key":326,"name_tr":327,"name_en":328,"sort":329,"specializations":330},"security","Güvenlik","Security",8,[331,332,335,338,341,344],{"key":201,"name":202,"field":326},{"key":333,"name":334,"field":326},"appsec","AppSec",{"key":336,"name":337,"field":326},"offensive-pentest","Offensive \u002F Pentest",{"key":339,"name":340,"field":326},"cloud-security","Cloud Security",{"key":342,"name":343,"field":326},"devsecops","DevSecOps",{"key":345,"name":346,"field":326},"blue-team-incident","Blue Team \u002F Incident",{"key":348,"name_tr":349,"name_en":350,"sort":351,"specializations":352},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[353],{"key":201,"name":202,"field":348},{"key":355,"name_tr":356,"name_en":356,"sort":357,"specializations":358},"data-engineer","Data Engineer",10,[359],{"key":201,"name":202,"field":355},{"key":361,"name_tr":362,"name_en":363,"sort":364,"specializations":365},"game-dev","Oyun Geliştirme","Game Development",11,[366],{"key":201,"name":202,"field":361},{"key":368,"name_tr":369,"name_en":369,"sort":370,"specializations":371},"ml-engineer","ML Engineer",12,[372],{"key":201,"name":202,"field":368},[13,7,14],{"junior":375,"mid":377,"senior":378},{"questions":376,"median_sec":3},20,{"questions":376,"median_sec":3},{"questions":376,"median_sec":3},[380,9],"tr",[382,383],"google","github",21750,true]