Vacancy catalog
OLD

Long-running vacancy

This listing is older than 30 days but its source has not removed it. Verify availability on the original company page before applying.

Sapiens International
Open role>1 month

Senior AI Engineer

Sapiens InternationalBengaluru, India
Work model
Hybrid
Experience
5+ years
Employment
Not specified
Compensation
Not disclosed
Technology signal
13 tags

Technology context

13

Parsed from the vacancy text; ordered by relevance to this role.

Full listing

Role description

class="jobdescription"> Senior Agentic AI Engineer

About the Role

Insurance software implementations are among the most complex, document-heavy, and process-intensive programmes in enterprise technology. A single implementation can involve thousands of configuration decisions, hundreds of requirement documents, and years of delivery time. Sapiens is rebuilding how that work gets done - using production-grade AI agents that operate across the full implementation lifecycle, from pre-sales and scoping through to configuration, testing, and go-live.

Work You'll Do

Agent architecture & orchestration

  • Design and implement agentic systems capable of multi-step reasoning, planning, tool use, and workflow execution against complex, document-intensive implementation processes
  • Build stateful workflows using LangGraph or equivalent - including branching, retries, self-correction, human-in-the-loop checkpoints, and reusable orchestration patterns
  • Engineer for long-horizon reliability - multi-step task completion, recovery from compounding errors, planning under uncertainty, and robust tool use when individual steps fail
  • Build the reasoning behind high-stakes implementation decisions - criteria-grounded outputs, structured review patterns, and auditable rationales that delivery consultants can act on and defend

Retrieval, grounding & context engineering

  • Develop end-to-end RAG pipelines: ingestion, chunking, embeddings, vector and hybrid retrieval, reranking, contextual compression, and grounding strategies
  • Engineer memory and context management - conversational state, persistent memory, retrieval-aware context assembly, and token-efficient context selection
  • Apply MCP-style tool and context interfaces so agents access the right information at the right time across enterprise knowledge repositories, document sources, and structured configuration data

Reliability, evaluation & safety

  • Implement observability and tracing for prompts, tool calls, retrieval quality, agent traces, failures, drift, latency, and production behaviour
  • Apply guardrails, safety controls, and failure-handling to reduce hallucinations in agents whose outputs practitioners act on directly in live client settings
  • Evaluate agents at trajectory and task level - multi-step task success, failure-mode and regression analysis, sandboxed test environments - alongside retrieval and generation quality metrics, automated checks, and human review

Integration & production craft

  • Build integrations with internal and external tools, APIs, enterprise systems, databases, and model providers so agents operate reliably within real delivery workflows
  • Deliver production-quality Python code with strong practices in testing, CI/CD, logging, versioning, and documentation; make architecture decisions that balance quality, reliability, latency, cost, and model risk
  • Translate ambiguous, high-complexity implementation processes into robust system logic and reusable AI patterns; stay current with advances in agentic systems and translate research into practical engineering decisions

Required Qualifications

  • Demonstrated depth building and shipping production agentic AI systems - we weigh shipped systems over years in a title
  • Strong, hands-on experience with LangGraph or equivalent agentic orchestration frameworks, including custom orchestration
  • Deep proficiency in Python - clean, testable, production-ready code
  • Experience designing and optimising end-to-end RAG systems: indexing, retrieval, reranking, grounding, and evaluation
  • Daily working proficiency with Claude (Anthropic API) and Claude Code - you use these tools every day, not occasionally
  • Experience building and deploying agents on Azure AI Foundry or an equivalent enterprise cloud AI platform
  • Practical understanding of LLM behaviour - strengths, limitations, hallucination risks, reasoning constraints, and the evaluation methods used to measure them
  • Experience evaluating and debugging agent behaviour at trajectory and task level, not just output quality
  • Hands-on experience with MCP-based interoperability patterns and tool-calling agent design
  • Modern software practices: testing, CI/CD, observability, tracing, and debugging for LLM-based systems in production

Preferred Qualifications

  • Experience with multi-agent orchestration and agent collaboration patterns
  • Familiarity with vector databases - Pinecone, Weaviate, Azure AI Search, OpenSearch
  • Experience building agents that process complex, unstructured document types - contracts, RFPs, configuration files, regulatory documents
  • Exposure to model adaptation techniques such as LoRA or QLoRA
  • Prior work in insurance, financial services, or enterprise SaaS implementation environments
  • Demonstrated habit of staying current with AI research, benchmarks, and emerging engineering patterns

We Are

Sapiens International Corporation N.V. is a global leader of AI-centric, SaaS-based insurance software, delivering hyper-relevant experiences that are efficient, compliant, and innovative. With agile intelligence, Sapiens' solutions turn real-time data and human insight into precise action at every moment, across every risk.

The Sapiens platform includes agentic workflows accelerating every capability across policy, underwriting, claims, reinsurance, decisioning, and finance and compliance.

With more than 600 insurers in over 30 countries running on Sapiens, our deep industry expertise is the foundation of our long-term relationships, from initial implementation through to modernization and market transformation.

Sapiens is headquartered in London, serving customers in property and casualty, life, reinsurance, specialty, and workers' compensation from offices across North America, Europe, the Middle East, and Asia Pacific.

Your Recruitment Journey

We will keep you in the loop, as we focus on providing an inclusive screening and interview process. Each country has a local flavor, but here's what you can expect during our recruitment process:

Apply

Take the first step in our journey by submitting an application that reflects your skills, experiences, and professional aspirations.

1

Review

Your CV will be carefully reviewed by our talent team to explore how your unique skills and potential align with Sapiens' needs and culture

2

Interview

This is your opportunity to shine! Meet with our team, showcase your abilities, and learn more about Sapiens

3

Offer

If there's a great match, we'll extend an offer to welcome you to our team. This is the exciting moment when your new journey begins to take shape

4

Onboard

Once you accept, we'll guide you through a comprehensive onboarding process, introducing you to your new colleagues, roles, and the exciting challenges ahead

5

Disclaimer

Sapiens India does not authorize any third parties to release employment offers or conduct recruitment drives via a third party. Hence, beware of inauthentic and fraudulent job offers or recruitment drives from any individuals or websites purporting to represent Sapiens. Further, Sapiens does not charge any fee or other emoluments for any reason (including without limitation, visa fees) or seek compensation from educational institutions to participate in recruitment events.

Accordingly, please check the authenticity of any such offers before acting on them and were acted upon, you do so at your own risk. Sapiens shall neither be responsible for honoring or making good the promises made by fraudulent third parties, nor for any monetary or any other loss incurred by the aggrieved individual or educational institution.

In the event that you come across any fraudulent activities in the name of Sapiens, please feel free report the incident at sapiens to

sharedservices@sapiens.com .

Apply now »

Apply now

-

Start apply with LinkedIn

-

Apply Now

Start

-

Please wait...

Find similar jobs

  • Corporate
  • Sapiens Global Community
  • FAQs
  • My Profile
  • career@sapiens.com

-

Opens in a new tab.

-

Opens in a new tab.

-

Opens in a new tab.

-

Opens in a new tab.

-

Opens in a new tab.

  • Legal Notice
  • Privacy Policy
  • Candidate Privacy Policy

© 2025 Copyright Sapiens International. All Rights Reserved.

var url_explore_all_locations = '/lp/Sapiens%20Community/c805ef18b6954472/'

const socialIconsGradientHTML = `

  • `

const socialIconsHTML = `

`

const breadcrumbsHTML = `

-

  • Jobs

`

const searchResultsTitleHTML = `

120 Search Results for "developer"

`;

const copySVG = ` `

const arrowSVG = ` `

const searchResultHTML = `

Fulltime

Hybrid

Subtitle 2

Resident Evil

`;

const favoriteButtonHTML = `

Add to my Favorites

`;

const myNotificationHTML = `

Message here

`;

const COUNTRIES = {

IN: "India",

US: "United States",

CA: "Canada",

GB: "United Kingdom",

IL: "Israel",

PL: "Poland",

LV: "Latvia",

LT: "Lithuania",

TR: "Türkiye",

PT: "Portugal"

}

const myDefaultSlickSettings = {

infinite: false,

slidesToShow: 3,

accessibility: false,

slidesToScroll: 1,

autoplay: false,

autoplaySpeed: 7 * 1000,

dots: true,

arrows: true,

responsive: [

{

breakpoint: 1024,

settings: {

slidesToShow: 2,

}

},

{

breakpoint: 768,

settings: {

slidesToShow: 1.25,

},

}

],

nextArrow: ' ',

prevArrow: ' ',

}

const myExtraSettings = {

slidesToShow: 4,

responsive: [

{

breakpoint: 1660,

settings: {

slidesToShow: 3,

}

},

{

breakpoint: 1024,

settings: {

slidesToShow: 2,

}

},

{

breakpoint: 768,

settings: {

slidesToShow: 1.25,

},

}

]

}

const singleSlideSettings = {

infinite: false,

slidesToShow: 1,

accessibility: false,

slidesToScroll: 1,

autoplay: false,

autoplaySpeed: 7 * 1000,

dots: true,

arrows: true,

nextArrow: ' ',

prevArrow: ' ',

}

function fixDropDownsAndToggles() {

document.querySelectorAll(".dropdown [data-toggle=collapse]").forEach(function (button) {

button.addEventListener('click', function (ev) {

ev.preventDefault();

ev.stopPropagation()

button.toggleAttribute('aria-expanded')

var target = document.querySelector(button.getAttribute("data-target"))

target.classList.toggle("show")

}, true)

})

document.querySelectorAll(".dropdown [data-toggle=dropdown]").forEach(function (button) {

button.addEventListener('click', function (ev) {

ev.preventDefault();

ev.stopPropagation();

var target = button.closest(".dropdown").querySelector("ul");

target.classList.toggle("show")

}, true)

})

}

function fixCountryInLocation(location) {

var country = location.substring(location.lastIndexOf(',') + 1).trim().toUpperCase();

var addr = location.substring(0, location.lastIndexOf(', ')).trim()

if (country.length == 2) {

country = COUNTRIES[country] || country;

location = (addr ? (addr + ", ") : "") + " " + country;

}

return location

}

function extractJobInfo() {

var reqId = null;

var location = "";

document.querySelectorAll(".joblayouttoken").forEach(function (token) {

if (reqId && location) {

return;

}

var text = token.innerText.trim();

if (text.indexOf("Req ID:") == 0) {

reqId = text.replace(/[^0-9]/g, '');

token.remove();

}

if (text.indexOf("Location:") == 0) {

location = text.replace("Location:", "").trim();

token.remove();

}

})

var h1 = document.querySelector(".joblayouttoken h1");

var position = h1.innerText

location = fixCountryInLocation(location)

return { reqId, location, position };

}

function setupFavoriteButton(elem, jobId) {

function setStarState(star, is_active) {

const starContainer = star.closest(".star-container")

if (is_active) {

starContainer.title = "Remove Job from Favorites"

} else {

starContainer.title = "Add Job to Favorites"

}

star.classList.toggle("active", is_active);

const favElem = star.closest(".add-to-favorites");

const starLink = favElem.querySelector(".star-link")

if (starLink) {

starLink.innerHTML = !is_active ? `Add to my Favorites` : `Remove from my Favorites`

}

}

elem.setAttribute('data-favorite-job-id', jobId)

var starContainer = elem.querySelector(".star-container")

var starLink = elem.querySelector(".star-link")

var star = htmlStringToElement(starSVG)

starContainer.appendChild(star);

const bookmarks = JSON.parse(localStorage.getItem("jobBookmarks") || "{}");

var state = bookmarks[jobId];

setStarState(star, !!state)

const starClick = function (ev) {

ev.preventDefault();

ev.stopPropagation();

const bookmarks = JSON.parse(localStorage.getItem("jobBookmarks") || "{}");

var state = bookmarks[jobId];

if (!state) {

var card = elem.closest(".my-search-result");

if (card) {

bookmarks[jobId] = {

location: card.querySelector('.location').innerText.trim(),

position: card.querySelector('.position').innerText.trim(),

href: card.href,

jobId: jobId,

};

} else {

bookmarks[jobId] = {

location: document.querySelector(".value-location").innerText.trim(),

position: document.querySelector(".joblayouttoken h1").innerText.trim(),

href: window.location.href,

jobId: jobId,

};

}

notify("Job added to Favorites")

} else {

delete bookmarks[jobId];

notify("Job removed from Favorites")

}

localStorage.setItem("jobBookmarks", JSON.stringify(bookmarks));

document.querySelectorAll(`[data-favorite-job-id="${jobId}"] .star`).forEach(el => setStarState(el, !state, false))

}

star.addEventListener("click", starClick)

if (starLink) {

starLink.addEventListener('click', starClick)

}

}

function fixJobPage() {

try {

if (!document.body.classList.contains("job-page")) {

return

}

var jobName = document.querySelector(".joblayouttoken h1").textContent

document.querySelectorAll(".job-name").forEach(el => el.textContent = jobName)

document.querySelectorAll(".joblayouttoken *").forEach(function (elem) {

if (elem.style) {

if (elem.style.fontFamily) {

elem.style.fontFamily = "";

}

if (elem.style.fontSize) {

elem.style.fontSize = "";

}

if (elem.style.lineHeight) {

elem.style.lineHeight = "";

}

}

})

var jobId = document.querySelector("[data-careersite-propertyid=facility]").textContent.trim();

var linkedInMode = true;

var apply = document.querySelector(".btn-social-apply");

if (!apply) {

linkedInMode = false

apply = document.querySelector(".dialogApplyBtn");

apply.innerText = "Apply now"

}

apply.classList.add("normal-link")

var cloned = apply.cloneNode(true)

var cloned2 = apply.cloneNode(true)

var container = document.querySelector(".apply-btn-container")

container.appendChild(cloned)

var tokens = document.querySelectorAll(".joblayouttoken");

const lastToken = tokens.length ? tokens[tokens.length - 1] : null;

if (lastToken) {

if (linkedInMode) {

lastToken.after(document.querySelector(".social-apply-button-container"))

} else {

var boo = htmlStringToElement('

')

lastToken.after(boo)

boo.appendChild(cloned2)

}

}

var info = extractJobInfo()

document.querySelector(".job-header-container .value-location").innerText = info.location

document.querySelector(".job-header-container .value-req-id").innerText = info.reqId

// swap between h1 and job header

var jobHeader = document.querySelector(".job-header-container").closest(".customPlugin")

var h1Container = document.querySelector(".joblayouttoken h1").closest(".joblayouttoken")

if (jobHeader && h1Container) {

h1Container.after(jobHeader)

// h1Container.remove()

}

var buttonsContainer = document.querySelector(".joblayouttoken+.social-apply-button-container");

buttonsContainer.style.display = 'flex'

btn = htmlStringToElement(favoriteButtonHTML)

buttonsContainer.appendChild(btn)

document.querySelectorAll(".add-to-favorites").forEach(function (elem) {

setupFavoriteButton(elem, jobId)

});

if (linkedInMode) {

var lastSubmitBtn = [...document.querySelectorAll(".social-apply-button-container")].pop();

} else {

var lastSubmitBtn = [...document.querySelectorAll(".dialogApplyBtn")].pop();

}

lastSubmitBtn.remove()

var copyContainer = document.querySelector(".copy-container")

var copyLink = document.querySelector(".copy-link")

var copy = htmlStringToElement(copySVG)

copyContainer.appendChild(copy);

copyLink.addEventListener('click', function (ev) {

ev.preventDefault();

ev.stopPropagation();

navigator.clipboard.writeText(window.location.href);

notify("Link copied to clipboard")

})

console.log(info)

if (info.country === 'IN') {

document.querySelector(".section.disclaimer").style.display = 'block'

} else {

document.querySelector(".section.disclaimer").style.display = 'none'

}

} catch (ex) {

console.warn("fixJobPage failed", ex)

}

}

function fixSearchResultsPage() {

try {

if (!document.body.classList.contains("search-page")) {

return

}

// breadcrumbs

var before = document.querySelector(".search-page #search-wrapper")

before && before.after(htmlStringToElement(searchResultsTitleHTML))

before && before.after(htmlStringToElement(breadcrumbsHTML))

var options = {

addH1: true,

};

fixSearch(options);

var child = document.querySelector("#search-wrapper");

child.style.visibility = "visible";

var child = document.querySelector("#search-wrapper .span6");

if (child) {

child.classList.remove("col-sm-6")

child.parentNode.classList.add("container")

var child = document.querySelector("#search-wrapper .frequencySpinBtn");

child.type = "text"

child.oninput = null;

var child = document.querySelector("#search-wrapper #savesearch-link");

child.classList.add("form-control")

var label = document.querySelector(".subscribe-frequency-label label");

label.innerHTML = ` Job Alert: I want to receive an alert every`

var child = document.querySelector("#search-wrapper .subscribe-frequency-label");

const textNode = document.createElement("label");

textNode.innerHTML = "days";

child.appendChild(textNode)

}

var bs = document.querySelectorAll(".paginationLabel b");

var count = bs.length > 1 ? bs[1].textContent : 0;

document.querySelector(".search-results-title .number").textContent = count

var searchQuery = document.querySelector(".securitySearchQuery").textContent.trim();

searchQuery = searchQuery.substring(1, searchQuery.length - 2);

document.querySelector(".search-results-title .for-query").textContent = searchQuery ? `for "${searchQuery}"` : '';

renderSearchResults();

doPagination();

} catch (ex) {

console.warn("fixSearchResultsPage failed", ex)

}

}

function doPagination() {

function convertPagination() {

// Find the original pagination

const originalPagination = document.querySelector('.pagination-bottom .pagination');

if (!originalPagination) {

console.error('Original pagination not found');

return;

}

// Extract pagination data from original structure

const paginationData = extractPaginationData(originalPagination);

// Create new Figma-style pagination

const newPaginationDesktop = createFigmaPagination(paginationData, 7);

const newPaginationMobile = createFigmaPagination(paginationData, 4);

newPaginationDesktop.classList.add("flex-on-desktop")

newPaginationMobile.classList.add("flex-on-mobile")

// Insert into target container

const targetContainer = document.getElementById('converted-pagination');

targetContainer.innerHTML = '';

targetContainer.appendChild(newPaginationDesktop);

targetContainer.appendChild(newPaginationMobile);

}

function extractPaginationData(originalPagination) {

const data = {

pages: [],

currentPage: 1,

firstPageUrl: '',

lastPageUrl: '',

totalPages: 0,

totalItems: 0,

itemsPerPage: 15,

currentItemStart: 1,

currentItemEnd: 15

};

// Extract pagination info from label (e.g., "Results 1 - 15 of 299")

const paginationContainer = originalPagination.closest('.pagination-bottom') ||

originalPagination.closest('.paginationShell') ||

document;

const paginationLabel = paginationContainer.querySelector('.paginationLabel');

if (paginationLabel) {

const labelText = paginationLabel.textContent || paginationLabel.innerText;

// Parse "Results 1 - 15 of 299" format

const resultsMatch = labelText.match(/Results?\s+(\d+)\s*[ - -]\s*(\d+)\s+of\s+(\d+)/i);

if (resultsMatch) {

data.currentItemStart = parseInt(resultsMatch[1]);

data.currentItemEnd = parseInt(resultsMatch[2]);

data.totalItems = parseInt(resultsMatch[3]);

data.itemsPerPage = data.currentItemEnd - data.currentItemStart + 1;

data.totalPages = Math.ceil(data.totalItems / data.itemsPerPage);

data.currentPage = Math.floor((data.currentItemStart - 1) / data.itemsPerPage) + 1;

}

// Alternative: Parse "Page X of Y" format from srHelp

const srHelp = paginationContainer.querySelector('.srHelp');

if (srHelp && !resultsMatch) {

const pageMatch = srHelp.textContent.match(/Page\s+(\d+)\s+of\s+(\d+)/i);

if (pageMatch) {

data.currentPage = parseInt(pageMatch[1]);

data.totalPages = parseInt(pageMatch[2]);

}

}

}

const listItems = originalPagination.querySelectorAll('li');

let foundCurrentPage = false;

listItems.forEach(li => {

const link = li.querySelector('a');

if (!link) return;

// Check for first page link

if (link.classList.contains('paginationItemFirst')) {

data.firstPageUrl = link.href;

}

// Check for last page link

else if (link.classList.contains('paginationItemLast')) {

data.lastPageUrl = link.href;

// Try to extract total pages from last page URL

const urlParams = new URLSearchParams(link.href.split('?')[1] || '');

const startRow = urlParams.get('startrow');

if (startRow && data.itemsPerPage) {

const lastPageStart = parseInt(startRow);

const calculatedTotalPages = Math.floor(lastPageStart / data.itemsPerPage) + 1;

if (calculatedTotalPages > data.totalPages) {

data.totalPages = calculatedTotalPages;

}

}

}

// Check for numbered pages (ignore hidden-phone class, it's just for responsive design)

else if (link.textContent.match(/^\d+$/)) {

const pageNum = parseInt(link.textContent);

const isActive = li.classList.contains('active');

if (isActive) {

data.currentPage = pageNum;

foundCurrentPage = true;

}

data.pages.push({

number: pageNum,

url: link.href,

isActive: isActive,

title: link.title || `Page ${pageNum}`

});

// Update total pages based on visible page numbers

data.totalPages = Math.max(data.totalPages, pageNum);

}

});

// If we didn't find current page from results label, but found it from active class, recalculate

if (!foundCurrentPage && data.pages.length > 0) {

// Find the active page from the pages array

const activePage = data.pages.find(p => p.isActive);

if (activePage) {

data.currentPage = activePage.number;

}

}

// Final calculation if we have total items but not total pages

if (data.totalItems > 0 && data.itemsPerPage > 0 && data.totalPages === 0) {

data.totalPages = Math.ceil(data.totalItems / data.itemsPerPage);

}

// Ensure we have at least the current page in totalPages

if (data.totalPages

`;

prevLi.appendChild(prevLink);

ul.appendChild(prevLi);

// Add page numbers

pagesToShow.forEach(item => {

const li = document.createElement('li');

if (item.type === 'dots') {

li.className = 'dots';

li.textContent = '...';

} else {

// Find existing page data or generate URL

let pageData = data.pages.find(p => p.number === item.page);

if (!pageData && item.page = data.totalPages) {

nextLink.style.opacity = '0.5';

nextLink.style.pointerEvents = 'none';

}

nextLink.innerHTML = `

<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://ww