<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>Microsoft Community at Perficient, Inc.</title>
	<atom:link href="https://blogs.perficient.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://blogs.perficient.com/</link>
	<description>Perficient is one of only 40 Microsoft National Systems Integrators. We are a national IT consulting firm serving the world's most successful and innovative companies.</description>
	<lastBuildDate>Fri, 14 Aug 2026 18:00:55 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://blogs.perficient.com/wp-content/uploads/2026/03/cropped-Perficient-Favicon-512-150x150.png</url>
	<title>Perficient Blogs</title>
	<link>https://blogs.perficient.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">30508587</site>	<item>
		<title>Sitemap: The Heart of Marketing Could Personalization</title>
		<link>https://blogs.perficient.com/sitemap-the-heart-of-marketing-could-personalization/</link>
		
		<dc:creator><![CDATA[Raul Juliao Colina]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 18:00:55 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=392228</guid>

					<description><![CDATA[<p>Personalization (formerly known as Interaction Studio) is a tool that exists inside the Marketing Cloud tenant and is mostly used to help the customer improve&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/sitemap-the-heart-of-marketing-could-personalization/">Sitemap: The Heart of Marketing Could Personalization</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span class="TextRun SCXW14732981 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW14732981 BCX0">P</span><span class="NormalTextRun SCXW14732981 BCX0">ersonalization</span><span class="NormalTextRun SCXW14732981 BCX0"> (formerly known as Interaction Studio)</span> <span class="NormalTextRun SCXW14732981 BCX0">is a tool that</span> <span class="NormalTextRun SCXW14732981 BCX0">exists</span><span class="NormalTextRun SCXW14732981 BCX0"> inside the Marketing Cloud tenant and is mostly used to</span><span class="NormalTextRun SCXW14732981 BCX0"> help the customer</span><span class="NormalTextRun SCXW14732981 BCX0"> improve </span><span class="NormalTextRun SCXW14732981 BCX0">the user experience with </span><span class="NormalTextRun SCXW14732981 BCX0">their</span><span class="NormalTextRun SCXW14732981 BCX0"> business </span><span class="NormalTextRun SCXW14732981 BCX0">through</span><span class="NormalTextRun SCXW14732981 BCX0"> web, mobile</span><span class="NormalTextRun SCXW14732981 BCX0">, </span><span class="NormalTextRun SCXW14732981 BCX0">and </span><span class="NormalTextRun SCXW14732981 BCX0">email</span><span class="NormalTextRun SCXW14732981 BCX0">.</span></span><span class="EOP Selected SCXW14732981 BCX0" data-ccp-props="{}"> </span></p>
<p><img decoding="async" data-attachment-id="392229" data-permalink="https://blogs.perficient.com/sitemap-the-heart-of-marketing-could-personalization/sm1/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/sm1.png" data-orig-size="232,122" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Sm1" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/sm1.png" class="alignnone wp-image-392229 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/sm1.png" alt="Sm1" width="232" height="122" /></p>
<p>The <strong>sitemap</strong> is the heart of Personalization. A good sitemap code implementation can lead you to a successful understanding about how the user is interacting with your site, how much time they are spending on different pages and where they are going next. Let’s look at this in a more relatable way to see how this code works.</p>
<p><img fetchpriority="high" decoding="async" data-attachment-id="392232" data-permalink="https://blogs.perficient.com/sitemap-the-heart-of-marketing-could-personalization/sm2/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/sm2.jpg" data-orig-size="401,225" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Sm2" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/sm2.jpg" class="alignnone wp-image-392232 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/sm2.jpg" alt="Sm2" width="401" height="225" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/sm2.jpg 401w, https://blogs.perficient.com/wp-content/uploads/2026/08/sm2-300x168.jpg 300w" sizes="(max-width: 401px) 100vw, 401px" /></p>
<p>I like to make the resemblance with this scene from the movie <em>Toy Story 3</em> in which the vigilant monkey is watching all the building through the Daycare’s CCTV waiting for a toy to show in a place and hour where they shouldn’t be; so he can warn Lotso the villain purple teddy bear.</p>
<p>We can use this scenario to create a comparison between the movie and how the sitemap and Personalization works inside the site. Like this:</p>
<ul>
<li>The <em>Daycare building</em> where they are is the <em>website</em> that the client wants us to work with, and <em>each room on the building</em> is a different page inside the site.</li>
<li>The <em>toys</em> Buzz, Woody, Mr. and Mrs. Potato Head, Rex and the others, are the <em>users of the web site</em>.</li>
<li>The <em>security cameras</em> are the <em>Sitemap </em>registering where the toys (users) are, where they went after that, the location and time of the interaction.</li>
<li>The <em>tv screens </em>and the <em>vigilant monkey</em> do the role of<em> Personalization</em> that tells Lotso (customer) where the toys (users) are.</li>
</ul>
<p>Certainly, in this case we want to know where the user is for marketing and statistical purposes and not punish our user in the same way Lotso wants to hurt the toys (ironic because they are from plastic).</p>
<p>Back to business, this JavaScript code captures important elements across your website, such as products, forms, login pages, and action buttons, and makes them available within the Personalization tool. This gives your marketing team a complete view of how visitors engage with your site, helping them determine where, when, and how to deliver personalized experiences.</p>
<p>Of course, Personalization only gives you the data and statistics it collects through its reports. What you and your team do with that information is entirely up to you. Will it be a call to action? A banner on the homepage? A list of product recommendations? A message that appears before someone closes the tab? Maybe even an email. Honestly, the limit is your imagination. The real value comes from turning those insights into experiences that make sense for your audience.</p>
<p><img decoding="async" data-attachment-id="392235" data-permalink="https://blogs.perficient.com/sitemap-the-heart-of-marketing-could-personalization/sm3/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/sm3.gif" data-orig-size="370,273" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Sm3" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/sm3.gif" class="alignnone wp-image-392235 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/sm3.gif" alt="Sm3" width="370" height="273" /></p>
<h2>What Do We Need to Take into Account When We Want to Create a Good Sitemap?</h2>
<p>The most important rule here is that the client needs to know what they want to do here. We need to meet with them, so we understand the business context of the site to create the solution architecture that we are going to implement. This is a list of the thing that we MUST consider when we are about to start the sitemap, personalization, and implementation:</p>
<ul>
<li>Have a clear goal of what does the customer wants to achieve with this tool. If they know what they can do with the campaigns, it will be easier to move along with this process.</li>
<li>Figure out the <strong>identity management</strong> and <strong>attribute setup</strong>. Understanding which user values (email, names, zip code, address, pet name, etc.), we plan to collect will help us to define the sitemap and configure Personalization.
<ul>
<li>This configuration is important to set because Personalization looks for the identity configuration to match existing users with unknown users that are trying to login.</li>
</ul>
</li>
<li>Create the Sitemap Blueprint by documenting every page on the website and assigning it to a page type within the sitemap. Think of this as the sitemap written on paper (or, more realistically, in an Excel spreadsheet).
<ul>
<li>Inside this document we are going to define how those pages will be grouped, because the purpose behind the <em>pagetype </em>is to create “groups of pages”, in a manner of speaking, so considering this information and having make the client create this list of the sites they have, we are going to set those groups in this way:
<ul>
<li>The home page will be in one pagetype called <em>home_page</em>, and here we will select, or ask for creation, a CSS (Cascading Style Sheets) selector, this element tells the browser which HTML elements should be selected to have the CSS property values inside the rule applied to them, or in our case a zone we are going to use to target for campaigns and it is called <em>Content Zone</em>.</li>
<li>The shirts, pants, shoes, and underwear are general sites that can be grouped into the <em>category_page.</em></li>
<li>The 50+ products they have will fall into the <em>product_page </em> From these pages we are also going to grab the product information like product name, URL, value, stock amount, and description.</li>
<li>The login form will have its own pagetype called <em>login_form</em> and from here we are going to scrap the email. Personalization itself will take care of looking at what identity value you select to match existing users.</li>
<li>The registering form will have another pagetype called <em>register_from</em>, for users that register on the site for the first time (we can also combine this page and the promotion form, so we can reuse what we have). For that pagetype, we are going to get information like, first name, last name, email, location, if they will want to receive marketing information.</li>
<li>The shopping cart will also have a pagetype called <em>shopping_cart</em>. Here we will be able to implement the functionality for Personalization to save which products the user is selecting, deleting and buying.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>After defining, validating, and approving the blueprint, it will be time for your developers to start the development of the sitemap. It is always recommended to start in a Development in a dataset, so you keep the Production dataset clean.</p>
<h2>Hey, I Just Finished with the Sitemap Development, What Now?</h2>
<p><img loading="lazy" decoding="async" data-attachment-id="392234" data-permalink="https://blogs.perficient.com/sitemap-the-heart-of-marketing-could-personalization/sm4/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/sm4.gif" data-orig-size="500,250" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Sm4" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/sm4.gif" class="alignnone wp-image-392234 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/sm4.gif" alt="Sm4" width="500" height="250" /></p>
<p>Well honestly, you’ll never end with the sitemap. This is a code that is always evolving, always changing to be better and more accurate. You need to  pay attention about how the user behaves and if your <em>pagetypes</em> are matching the correct pages, how the information comes in so you can clean that data and makes it useful for campaigns purposes or to create Einstein Recipes (a very exciting functionality to makes recommendations based on AI algorithms).</p>
<p>The sitemap is only the starting point inside the Personalization work. With this tool, you can do many great things that will benefit customer engagement with the user. You will need to work hand in hand with the customer to create a successful implementation that will benefit both of you.</p>
<p>The post <a href="https://blogs.perficient.com/sitemap-the-heart-of-marketing-could-personalization/">Sitemap: The Heart of Marketing Could Personalization</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/08/UX_prototype_wireframe-1-1024x636.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">392228</post-id>	</item>
		<item>
		<title>The Rise of the Agentic Enterprise: What Snowflake Intelligence Means for Business Leaders</title>
		<link>https://blogs.perficient.com/the-rise-of-the-agentic-enterprise-what-snowflake-intelligence-means-for-business-leaders/</link>
		
		<dc:creator><![CDATA[Vivek Nigam]]></dc:creator>
		<pubDate>Tue, 11 Aug 2026 14:51:08 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=392205</guid>

					<description><![CDATA[<p>For years, BI platforms have run on the same logic: someone formulates a query, the system returns a result, and an analyst interprets what it means. That&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/the-rise-of-the-agentic-enterprise-what-snowflake-intelligence-means-for-business-leaders/">The Rise of the Agentic Enterprise: What Snowflake Intelligence Means for Business Leaders</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span data-contrast="none">For years, BI platforms have run on the same logic: someone formulates a query, the system returns a result, and an analyst interprets what it means. That model works fine when questions are simple, and the data lives in one place.</span><span data-ccp-props="{&quot;335559739&quot;:200}"> </span></p>
<p><span data-contrast="none">But enterprise questions are rarely simple, and the data almost never lives in one place.</span><span data-ccp-props="{&quot;335559739&quot;:200}"> </span></p>
<p><span data-contrast="none">At Summit 2026, Snowflake introduced Snowflake Intelligence, the orchestration and reasoning layer at the heart of its new Agentic Enterprise architecture. Unlike traditional BI tools that respond to queries, Snowflake Intelligence enables autonomous reasoning across an organization&#8217;s entire data estate, planning multi-step tasks, delegating subtasks to specialized agents, and coordinating workflows that span structured data, unstructured documents, and real-time streams, all within Snowflake&#8217;s governance perimeter.</span><span data-ccp-props="{&quot;335559739&quot;:200}"> </span></p>
<p><span data-contrast="none">For leaders, that shift changes what needs to sit at the center of the enterprise stack. Snowflake describes Snowflake Intelligence as the brain connecting enterprise data, AI models, applications, and reasoning workflows into a single system, the piece leadership teams will need to understand as they plan their own agentic architecture.</span><span data-ccp-props="{&quot;335559739&quot;:200}"> </span></p>
<h2><b><span data-contrast="none">What Is Snowflake Intelligence?</span></b><span data-ccp-props="{&quot;335559738&quot;:300,&quot;335559739&quot;:150}"> </span></h2>
<p><span data-contrast="none">Snowflake Intelligence operates within what Snowflake calls the Agentic Control Plane, the central component that connects AI models, enterprise data, and software applications into a unified execution model. Rather than functioning as one more tool in the analytics stack, it acts as the layer that coordinates how those three pieces work together.</span><span data-ccp-props="{&quot;335559739&quot;:200}"> </span></p>
<p><b><span data-contrast="none">Technical Architecture</span></b><span data-ccp-props="{&quot;335559738&quot;:300,&quot;335559739&quot;:150}"> </span></p>
<p><span data-contrast="none">Snowflake Intelligence sits at the intersection of four architectural layers:</span><span data-ccp-props="{&quot;335559739&quot;:200}"> </span></p>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><b><span data-contrast="none">Enterprise Data and Context: </span></b><span data-contrast="none">the governed data foundation, including tables, stages, streams, and semantic metadata from Horizon Context.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><b><span data-contrast="none">AI Models: </span></b><span data-contrast="none">foundation models (including Anthropic Claude, Meta Llama, and Mistral) accessible through Cortex AI, plus custom fine-tuned models.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><b><span data-contrast="none">Agentic Control Plane: </span></b><span data-contrast="none">where Intelligence lives, orchestrating reasoning, planning, tool use, and agent coordination.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="4" data-aria-level="1"><b><span data-contrast="none">Software and Applications: </span></b><span data-contrast="none">end-user surfaces including Snowsight, CoWork, partner applications, and custom Snowflake Apps.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<p><b><span data-contrast="none">Key Technical Capabilities</span></b><span data-ccp-props="{&quot;335559738&quot;:300,&quot;335559739&quot;:150}"> </span></p>
<p><span data-contrast="none">Six capabilities define what Snowflake Intelligence does differently at an operational level:</span><span data-ccp-props="{&quot;335559739&quot;:200}"> </span></p>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="5" data-aria-level="1"><b><span data-contrast="none">Multi-step reasoning: </span></b><span data-contrast="none">decomposes complex questions into sub-tasks, executes them in sequence or parallel, and synthesizes results.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="6" data-aria-level="1"><b><span data-contrast="none">Agentic Search: </span></b><span data-contrast="none">searches across thousands of data assets, documents, and semantic views to find relevant context for answering enterprise questions.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="7" data-aria-level="1"><b><span data-contrast="none">Tool orchestration: </span></b><span data-contrast="none">invokes SQL queries, Python functions, Cortex AI models, and external APIs as tools within a reasoning chain.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="8" data-aria-level="1"><b><span data-contrast="none">Context-aware governance: </span></b><span data-contrast="none">every reasoning step natively respects RBAC, data masking, row-level security, and audit logging.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="9" data-aria-level="1"><b><span data-contrast="none">Feedback loops: </span></b><span data-contrast="none">an Observe → Decide → Act → Learn cycle that improves agent performance over time.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="10" data-aria-level="1"><b><span data-contrast="none">Knowledge worker empowerment: </span></b><span data-contrast="none">designed so business users can interact via natural language, not just developers.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<h2><b><span data-contrast="none">How It Differs from Traditional Analytics</span></b><span data-ccp-props="{&quot;335559738&quot;:300,&quot;335559739&quot;:150}"> </span></h2>
<p><span data-contrast="none">Traditional BI requires humans to formulate precise queries, join datasets manually, and interpret results. Snowflake Intelligence inverts that model: a user expresses intent in natural language, for example, “Which accounts are at highest churn risk and what drove the change?” and the system autonomously identifies relevant data sources, executes the necessary analysis, and returns a synthesized answer with provenance.</span><span data-ccp-props="{&quot;335559739&quot;:200}"> </span></p>
<table data-tablestyle="MsoNormalTable" data-tablelook="0">
<tbody>
<tr>
<td data-celllook="69905"><b><span data-contrast="none">Dimension</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="69905"><b><span data-contrast="none">Traditional BI</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="69905"><b><span data-contrast="none">Snowflake Intelligence</span></b><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><span data-contrast="none">How it starts</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="none">User formulates a precise query</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="none">User expresses intent in natural language</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><span data-contrast="none">Who joins the data</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="none">The analyst, manually</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="none">The system, autonomously</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><span data-contrast="none">Scope of the answer</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="none">A single result to a single query</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="none">A synthesized, multi-step analysis</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><span data-contrast="none">Governance</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="none">Varies by tool</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="none">Natively inherits RBAC, masking, and audit logging</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><span data-contrast="none">Data copies</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="none">Often requires separate environments</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="none">Operates on the same governed data</span><span data-ccp-props="{}"> </span></td>
</tr>
</tbody>
</table>
<p><span data-contrast="none">Snowflake sums up this principle as “</span><i><span data-contrast="none">same context, same governance, different superpowers</span></i><span data-contrast="none">”: Intelligence operates on the same governed data that an organization&#8217;s analysts and dashboards already use. There is no separate data copy, no shadow analytics environment, and no governance gap.</span><span data-ccp-props="{&quot;335559738&quot;:200,&quot;335559739&quot;:200}"> </span></p>
<h2><b><span data-contrast="none">Use Cases</span></b><span data-ccp-props="{&quot;335559738&quot;:300,&quot;335559739&quot;:150}"> </span></h2>
<p><span data-contrast="auto">From a leadership perspective,</span><b><span data-contrast="auto"> </span></b><span data-contrast="auto">these are the scenarios where that shift shows up first:</span><span data-ccp-props="{&quot;335559739&quot;:200}"> </span></p>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="11" data-aria-level="1"><b><span data-contrast="none">Executive decision support: </span></b><span data-contrast="none">leadership asks complex, cross-domain questions and gets sourced, multi-step answers in seconds.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="12" data-aria-level="1"><b><span data-contrast="none">Cross-functional analytics: </span></b><span data-contrast="none">finance, operations, and customer success data joined and reasoned over without manual ETL.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="13" data-aria-level="1"><b><span data-contrast="none">Investigation and root cause: </span></b><span data-contrast="none">autonomous exploration of anomalies across metrics, logs, and business data.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="14" data-aria-level="1"><b><span data-contrast="none">Report generation: </span></b><span data-contrast="none">automatic creation of quarterly business reviews, compliance reports, and investor summaries from live data.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<p><b><span data-contrast="none">Architectural Considerations for Adoption</span></b><span data-ccp-props="{&quot;335559738&quot;:300,&quot;335559739&quot;:150}"> </span></p>
<p><span data-contrast="auto">When assessing readiness,</span><span data-contrast="auto"> </span><span data-contrast="none">Intelligence is most effective when an organization&#8217;s data estate is semantically rich. That means:</span><span data-ccp-props="{&quot;335559739&quot;:200}"> </span></p>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="15" data-aria-level="1"><b><span data-contrast="none">Semantic Views: </span></b><span data-contrast="none">define business-level meaning on top of raw tables, so Intelligence understands context.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="16" data-aria-level="1"><b><span data-contrast="none">Horizon Context: </span></b><span data-contrast="none">enrich metadata with descriptions, tags, lineage, and popularity signals.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="17" data-aria-level="1"><b><span data-contrast="none">Data quality: </span></b><span data-contrast="none">agents cannot distinguish good data from bad; quality must be established upstream.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<ul>
<li data-leveltext="•" data-font="Aptos" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="18" data-aria-level="1"><b><span data-contrast="none">Access controls: </span></b><span data-contrast="none">RBAC and masking policies must be complete and up to date, since Intelligence inherits them.</span><span data-ccp-props="{&quot;335559739&quot;:150}"> </span></li>
</ul>
<h2><b><span data-contrast="none">Getting Ready for the Agentic Enterprise</span></b><span data-ccp-props="{&quot;335559738&quot;:300,&quot;335559739&quot;:150}"> </span></h2>
<p><span data-contrast="none">The success of any agentic architecture hinges on data readiness. Autonomous reasoning is only as effective as the enterprise data estate supporting it.</span><span data-ccp-props="{&quot;335559739&quot;:200}"> </span></p>
<p><span data-contrast="auto">For enterprise leaders, </span><span data-contrast="none">that puts data governance and semantic readiness on the same strategic agenda as the AI models and applications built on top of them.</span><span data-ccp-props="{&quot;335559739&quot;:200}"> </span></p>
<p><span data-contrast="none">If you&#8217;re exploring how Snowflake Intelligence fits into your data strategy, reach out to </span><span data-contrast="none">Perficient&#8217;s Snowflake experts</span><span data-contrast="none">.</span><span data-ccp-props="{&quot;335559739&quot;:200}"> </span></p>
<p>The post <a href="https://blogs.perficient.com/the-rise-of-the-agentic-enterprise-what-snowflake-intelligence-means-for-business-leaders/">The Rise of the Agentic Enterprise: What Snowflake Intelligence Means for Business Leaders</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/05/Copy-of-Emma_S_Snowflake_Premier-1.png"/>
<post-id xmlns="com-wordpress:feed-additions:1">392205</post-id>	</item>
		<item>
		<title>Perficient and AWS vs. Technical Debt: How AI Is Accelerating Modernization</title>
		<link>https://blogs.perficient.com/perficient-and-aws-vs-technical-debt-how-ai-is-accelerating-modernization/</link>
		
		<dc:creator><![CDATA[Perficient Expert]]></dc:creator>
		<pubDate>Mon, 10 Aug 2026 18:14:27 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[AWS Transform]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[Modernization]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=392192</guid>

					<description><![CDATA[<p>For years, technical debt has been treated as something organizations could manage over time and chip away at between larger priorities. That’s no longer the&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/perficient-and-aws-vs-technical-debt-how-ai-is-accelerating-modernization/">Perficient and AWS vs. Technical Debt: How AI Is Accelerating Modernization</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>For years, technical debt has been treated as something organizations could manage over time and chip away at between larger priorities. That’s no longer the case.</p>
<p>Today, technical debt is actively working against transformation. It’s slowing down cloud adoption, increasing costs, and limiting how quickly organizations can respond to change. And in many cases, it’s becoming the biggest barrier to modernization itself.</p>
<p>At Perficient, we&#8217;re seeing this challenge play out across industries as organizations face increasing pressure to modernize infrastructure, applications, and development practices without disrupting the business.</p>
<p>What has changed is the scale, but also the urgency.</p>
<p>&nbsp;</p>
<p><strong>Infrastructure, Applications, and Legacy Systems Are Breaking in Different Ways</strong></p>
<p>Across enterprise environments, multiple pressure points are converging.</p>
<p>The first is happening at the infrastructure layer. <a href="https://investors.broadcom.com/news-releases/news-release-details/broadcom-completes-acquisition-vmware">Broadcom’s acquisition of VMware</a> has forced organizations to re-evaluate long-standing virtualization strategies almost overnight. Pricing models have shifted, licensing costs have increased dramatically, and systems that once felt stable are now under scrutiny.</p>
<p>For many teams, this isn’t theoretical anymore. The cost implications are real with approaching renewal cycles.</p>
<p>The second pressure point is happening within application portfolios. Organizations still running large volumes of .NET Framework applications are facing a different kind of constraint. These applications are tied to Windows Server, which brings ongoing licensing costs, aging frameworks, and limited ability to take advantage of modern, cloud-native services.</p>
<p>For some organizations, the challenge goes even deeper. Mission-critical <a href="https://aws.amazon.com/transform/mainframe/">mainframe systems</a> continue to consume large portions of IT budgets while relying on shrinking pools of specialized expertise. Others are struggling with custom-built applications that have accumulated years of technical debt and complexity, making modernization difficult to scale.</p>
<p>Individually, these challenges are difficult but manageable. Together, they create a compounding effect:</p>
<ul>
<li>Higher costs at the infrastructure level</li>
<li>Slower innovation at the application layer</li>
<li>Limited ability to move forward without addressing both</li>
</ul>
<p>This is where many modernization efforts stall.</p>
<p>&nbsp;</p>
<p><strong>Why Traditional Approaches Can’t Keep Up</strong></p>
<p>The problem isn’t a lack of tools or ambition, but rather the model itself. For years, modernization has followed a familiar pattern: Assess the environment &#8211;&gt; Build a plan &#8211;&gt; Execute in phases &#8211;&gt; Repeat</p>
<p>It works but it doesn’t scale.</p>
<p>Large VMware estates can take 18 to 36 months to migrate using traditional approaches. Application modernization often takes even longer, because it happens one system at a time.</p>
<p>By the time organizations complete one phase, the environment has already evolved, costs have increased, priorities have shifted, and technical debt continues to grow.</p>
<blockquote><p><em>Most organizations don’t struggle to define a modernization strategy; they struggle to execute it at scale.</em></p>
<p><em>—Larry Cusick, Senior Solutions Architect</em></p></blockquote>
<p>What’s been missing is a way to compress timelines and remove the manual bottlenecks that slow everything down.</p>
<p>&nbsp;</p>
<p><strong>What AI Changes</strong></p>
<p>This is where Perficient and AWS start to shift the equation.</p>
<p>Rather than treating modernization as a manual, step-by-step process, <strong><a href="https://aws.amazon.com/transform/">AWS Transform</a></strong> introduces an AI-driven model that automates many of the most time-intensive tasks:</p>
<ul>
<li>Discovering infrastructure and application dependencies</li>
<li>Analyzing environments and identifying risks</li>
<li>Planning migration waves based on real relationships between systems</li>
<li>Translating complex environments into AWS-native architectures</li>
</ul>
<p>Instead of large teams manually coordinating every step, the AI handles the repetitive work while teams focus on decision-making and direction.</p>
<p>This distinction doesn’t eliminate the need for expertise. It changes where that expertise is applied. At Perficient, we see organizations getting the greatest value when AI-driven automation is paired with experienced architects, engineers, and modernization teams who can guide strategy, governance, sequencing, and implementation.</p>
<blockquote><p><em>AI enables modernization teams to move at the speed the business now requires.</em></p>
<p><em>—Steve Holstad, VP AWS Practice</em></p></blockquote>
<p>Modernization itself is no longer one-size-fits-all. Organizations are evaluating everything from VMware estates and .NET portfolios to custom applications and broader transformation initiatives. The common challenge remains the same: finding a scalable path from strategy to execution.</p>
<p>&nbsp;</p>
<p><strong>Organizations Are Putting Theory Into Action</strong></p>
<p>What we’re seeing in practice is that organizations are starting where the pressure is greatest and where Perficient can create immediate impact. While modernization needs vary by organization, a few common entry points are emerging across infrastructure, applications, and legacy platforms.</p>
<ol>
<li><strong> VMware Modernization</strong></li>
</ol>
<p>For infrastructure teams facing rising VMware costs, the priority is speed. Perficient and AWS enable organizations to move from analysis to execution much faster than before. Instead of spending months planning migration waves, teams can begin moving workloads to AWS in a matter of weeks.</p>
<p>For many organizations, <a href="https://aws.amazon.com/transform/vmware/">VMware licensing changes</a> have become the forcing function that finally moved modernization from a future initiative to an immediate business priority.</p>
<p>The goal is momentum, not just migration. Early wins create the foundation for scaling the approach across the rest of the environment.</p>
<ol start="2">
<li><strong> Windows and .NET Modernization</strong></li>
</ol>
<p>On the application side, the challenge has always been scale. Modernizing a single application is achievable, but modernizing hundreds with traditional methods is not.</p>
<p>Perficient and AWS change that by automating large portions of the code analysis and transformation process. What once required deep, specialized expertise for every application can now be executed more consistently across a portfolio.</p>
<p>At the same time, organizations are looking to reduce Windows and SQL Server licensing costs while creating a foundation for cloud-native development, containers, and modern runtimes.</p>
<p>The result is a shift from sequential modernization to parallel execution and individual apps to portfolio-level transformation.</p>
<ol start="3">
<li><strong> Mainframe Modernization</strong></li>
</ol>
<p>Organizations running mainframe environments face a unique challenge: balancing decades of business-critical functionality with growing cost and talent pressures. Traditional modernization approaches can take years and carry significant risk.</p>
<p>AI-driven modernization is helping teams accelerate code analysis, documentation, business logic extraction, and transformation planning, making mainframe modernization more achievable than it has been in the past.</p>
<ol start="4">
<li><strong> Custom Application Transformation</strong></li>
</ol>
<p>Many organizations are also finding that their biggest modernization roadblocks are not commercial platforms, but the custom applications built over years of growth, acquisitions, and changing business requirements.</p>
<p>By applying <a href="https://aws.amazon.com/transform/custom/">AI-assisted transformation patterns</a> to application portfolios, teams can modernize APIs, frameworks, runtimes, and architectures more consistently and at greater scale than traditional manual approaches allow.</p>
<p>&nbsp;</p>
<p><strong>The Bigger Shift: From Planning to Execution</strong></p>
<p>The most important change is an organization’s mindset. Those who are making progress aren’t waiting to fully de-risk modernization before they begin. They’re using approaches like AI to:</p>
<ul>
<li>Prove value quickly</li>
<li>Establish repeatable models</li>
<li>Build confidence with real outcomes</li>
</ul>
<p>Instead of treating modernization as a multi-year program, they’re treating it as a series of focused, accelerated initiatives. AI is accelerating modernization, but technology alone doesn&#8217;t guarantee outcomes. Organizations still need experienced partners to align business priorities, define modernization paths, and translate recommendations into production-ready solutions.</p>
<p>At Perficient, we combine AWS Transform capabilities with deep migration and modernization experience to help organizations move from planning to measurable progress faster.</p>
<p>&nbsp;</p>
<p><strong>Where This Leads Next</strong></p>
<p>Technical debt isn’t going away, but the way organizations address it is starting to change.</p>
<p>AI-driven approaches are making it possible to move faster, scale more effectively, and close the gap between strategy and execution.</p>
<p>From accelerating VMware migrations and transforming .NET application portfolios to modernizing mainframe systems and custom applications, organizations are already using Perficient to turn strategy into execution.</p>
<p>Whether you&#8217;re evaluating VMware migration, Windows and .NET modernization, mainframe transformation, or custom application modernization, the first step is understanding where AI-driven transformation can create the greatest impact.</p>
<p><strong>Click <a href="https://www.perficient.com/partners/aws/aws-ai-transform">here</a> to explore how Perficient and AWS are helping organizations modernize faster.</strong></p>
<p>&nbsp;</p>
<p>The post <a href="https://blogs.perficient.com/perficient-and-aws-vs-technical-debt-how-ai-is-accelerating-modernization/">Perficient and AWS vs. Technical Debt: How AI Is Accelerating Modernization</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/08/Blgo-1-Featured-Photo-2-1024x683.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">392192</post-id>	</item>
		<item>
		<title>From SharePoint to Vector DB: How Enterprise RAG Ingestion Actually Works</title>
		<link>https://blogs.perficient.com/from-sharepoint-to-vector-db-how-enterprise-rag-ingestion-actually-works/</link>
		
		<dc:creator><![CDATA[Venkata Sreeram Murthy Gonella]]></dc:creator>
		<pubDate>Wed, 05 Aug 2026 12:50:31 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=392184</guid>

					<description><![CDATA[<p>Series: Enterprise GenAI &#38; RAG Architecture — Part 2 of 5  The Foundation Everything Else Depends On  In Part 1, we explained what RAG is and why it&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/from-sharepoint-to-vector-db-how-enterprise-rag-ingestion-actually-works/">From SharePoint to Vector DB: How Enterprise RAG Ingestion Actually Works</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em><span class="TextRun SCXW4104587 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW4104587 BCX0"><strong>Series</strong>: </span></span><span class="TextRun SCXW4104587 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW4104587 BCX0">Enterprise GenAI &amp; RAG Architecture — Part 2 of 5</span></span><span class="EOP Selected SCXW4104587 BCX0" data-ccp-props="{&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></em></p>
<h2><b><span data-contrast="none">The Foundation Everything Else Depends On</span></b><span data-ccp-props="{&quot;335559738&quot;:400,&quot;335559739&quot;:200}"> </span></h2>
<p><span data-contrast="auto">In </span><a href="https://blogs.perficient.com/why-your-llm-doesnt-know-anything-about-your-company-and-how-rag-fixes-that/"><span data-contrast="none">Part 1</span></a><span data-contrast="auto">, we explained what RAG is and why it matters for enterprises. Now we’ll look at the technical foundation that makes effective retrieval possible: the ingestion pipeline. </span></p>
<p><span data-contrast="auto">Before a RAG system can answer a single question, it must go through a four-stage ingestion pipeline: <strong>Extract → Chunk → Embed → Store</strong>.</span><span data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<p><span data-contrast="auto">Each stage influences how accurately and efficiently the system retrieves relevant information. A well-designed ingestion pipeline improves retrieval quality and gives the LLM stronger context for generating useful answers. When ingestion falls short, even a highly capable model may struggle to produce consistently reliable results.</span><span data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<blockquote><p><b><span data-contrast="none">The most common reason enterprise RAG fails in production is poor chunking and ingestion, rather than the LLM itself.</span></b></p></blockquote>
<h2><b><span data-contrast="none">Stage 1: Data Extraction — Getting Documents into the System</span></b><span data-ccp-props="{&quot;335559738&quot;:400,&quot;335559739&quot;:200}"> </span></h2>
<p><span data-contrast="auto">Enterprise data lives in many places. Your ingestion pipeline needs to reach all of them:</span><span data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<table data-tablestyle="MsoNormalTable" data-tablelook="0">
<tbody>
<tr>
<td data-celllook="69905"><b><span data-contrast="none">Data Source</span></b><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><b><span data-contrast="none">Extraction Method / Library</span></b><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">SharePoint / Microsoft 365</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Microsoft Graph API — ms-graph Python SDK</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Websites / Web Pages</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">BeautifulSoup, Scrapy — extract and clean HTML</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">PDF Documents</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">PyMuPDF (fitz) or pdfminer.six — extract raw text</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Word Documents (docx)</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">python-docx — preserve structure and headings</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Jira Tickets</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Jira REST API — extract titles, descriptions, comments</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Azure DevOps (ADO)</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">azure-devops Python SDK — work items, wikis</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
</tbody>
</table>
<h3><b><span data-contrast="none">Cleaning and Normalizing</span></b><span data-ccp-props="{&quot;335559738&quot;:220,&quot;335559739&quot;:100}"> </span></h3>
<p><span data-contrast="auto">Raw extracted text is messy. Before chunking, always clean it:</span><span data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<ul>
<li data-leveltext="●" data-font="" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;●&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Remove HTML tags, navigation menus, cookie banners</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></li>
</ul>
<ul>
<li data-leveltext="●" data-font="" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;●&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="auto">Fix encoding issues — normalize everything to UTF-8</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></li>
</ul>
<ul>
<li data-leveltext="●" data-font="" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;●&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><span data-contrast="auto">Strip page numbers, headers, footers from PDFs</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></li>
</ul>
<ul>
<li data-leveltext="●" data-font="" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;●&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="4" data-aria-level="1"><span data-contrast="auto">Remove duplicate documents — same content from multiple sources</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></li>
</ul>
<ul>
<li data-leveltext="●" data-font="" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;●&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="5" data-aria-level="1"><span data-contrast="auto">Normalize whitespace and line breaks</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></li>
</ul>
<p><span class="TextRun SCXW80182634 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW80182634 BCX0">Skipping the cleaning step is the fastest way to pollute your vector database with noise that degrades retrieval quality.</span></span><span class="EOP Selected SCXW80182634 BCX0" data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<h2><b><span data-contrast="none">Stage 2: Chunking — Splitting Documents into Meaningful Pieces</span></b><span data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></h2>
<p><span data-contrast="auto">LLMs and embedding models have strict token limits. A 50-page PDF cannot be embedded as one unit. Chunking breaks documents into smaller, semantically coherent pieces that can be individually embedded and retrieved.</span><span data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<h3><b><span data-contrast="none">Chunking Strategies Compared</span></b><span data-ccp-props="{&quot;335559738&quot;:220,&quot;335559739&quot;:100}"> </span></h3>
<table data-tablestyle="MsoNormalTable" data-tablelook="0">
<tbody>
<tr>
<td data-celllook="69905"><b><span data-contrast="none">Strategy</span></b><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><b><span data-contrast="none">How It Works</span></b><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><b><span data-contrast="none">Best Used When</span></b><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Fixed-Size Chunks</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Split every N tokens regardless of content</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Simple pipelines, quick setup</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Sentence Chunks</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Split on sentence boundaries</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Conversational content, FAQs</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Semantic Chunks</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Group sentences by topic using embeddings</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Long documents, best quality</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Recursive Split</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Try paragraphs → sentences → words in order</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">General-purpose (recommended default)</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
</tbody>
</table>
<h3><b><span data-contrast="none">The Overlap Strategy — Why It Matters</span></b><span data-ccp-props="{&quot;335559738&quot;:220,&quot;335559739&quot;:100}"> </span></h3>
<p><span data-contrast="auto">Imagine a critical sentence sitting right at the boundary of two chunks. Without overlap, that sentence gets split and its context is lost in both chunks.</span><span data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<p><span class="TextRun SCXW188399810 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW188399810 BCX0">Overlap solves this by making each chunk share tokens with its neighbours:</span></span><span class="EOP Selected SCXW188399810 BCX0" data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<pre><span data-contrast="none">Chunk 1:  [token 1 ............. token 512]</span><span data-ccp-props="{&quot;335559685&quot;:576,&quot;335559738&quot;:40,&quot;335559739&quot;:40}"> </span>

<span data-contrast="none">Chunk 2:              [token 463 ........... token 975]</span><span data-ccp-props="{&quot;335559685&quot;:576,&quot;335559738&quot;:40,&quot;335559739&quot;:40}"> </span>

<span data-contrast="none">Overlap:              [token 463 .. 512]  &lt;-- shared context</span><span data-ccp-props="{&quot;335559685&quot;:576,&quot;335559738&quot;:40,&quot;335559739&quot;:40}"> 
</span></pre>
<p><b><span data-contrast="auto">Recommended settings: </span></b><span data-contrast="auto">512 tokens per chunk, 50-token overlap (≈10%)</span><span data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<table data-tablestyle="MsoNormalTable" data-tablelook="0">
<tbody>
<tr>
<td data-celllook="69905"><b><span data-contrast="none">Chunk Size</span></b><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><b><span data-contrast="none">Effect</span></b><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Too small (&lt; 128 tokens)</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Chunks lose context — retrieval returns fragments, not answers</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Too large (&gt; 1024 tokens)</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Irrelevant content retrieved, wastes expensive LLM tokens</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">256–512 tokens (sweet spot)</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Semantic coherence maintained, retrieval stays precise</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
</tbody>
</table>
<p><b><span data-contrast="auto">Tools: </span></b><span data-contrast="auto">LangChain RecursiveCharacterTextSplitter, LlamaIndex node parsers, custom Python logic</span><span data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<h2><b><span data-contrast="none">Stage 3: Embeddings — Converting Text into Searchable Vectors</span></b><span data-ccp-props="{&quot;335559738&quot;:400,&quot;335559739&quot;:200}"> </span></h2>
<p><span data-contrast="auto">An embedding is a list of numbers that encodes the semantic meaning of a piece of text. The closer two vectors are in mathematical space, the more similar their meaning.</span><span data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<p><span data-contrast="auto">Example: &#8216;annual leave entitlement&#8217; and &#8216;how many vacation days do I get?&#8217; will produce very similar vectors — even though they share no words. This is what makes semantic search so powerful.</span><span data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<h3><b><span data-contrast="none">How Embedding Generation Works</span></b><span data-ccp-props="{&quot;335559738&quot;:220,&quot;335559739&quot;:100}"> </span></h3>
<ul>
<li data-leveltext="●" data-font="" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;●&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="6" data-aria-level="1"><span data-contrast="auto">Each text chunk is passed to an embedding model</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></li>
</ul>
<ul>
<li data-leveltext="●" data-font="" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;●&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="7" data-aria-level="1"><span data-contrast="auto">The model outputs a vector — e.g. [0.23, -0.87, 0.41, &#8230; 1536 numbers]</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></li>
</ul>
<ul>
<li data-leveltext="●" data-font="" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;●&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="8" data-aria-level="1"><span data-contrast="auto">This vector is stored alongside the chunk text and its metadata</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></li>
</ul>
<ul>
<li data-leveltext="●" data-font="" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;●&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="9" data-aria-level="1"><span data-contrast="auto">At query time, the user&#8217;s question is embedded using the SAME model</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></li>
</ul>
<ul>
<li data-leveltext="●" data-font="" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;●&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="10" data-aria-level="1"><span data-contrast="auto">Cosine similarity between query vector and stored vectors finds the best matches</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></li>
</ul>
<blockquote><p><b><span data-contrast="none">CRITICAL: The same embedding model used at indexing time MUST be used at query time. Switching models require complete re-indexing of all chunks.</span></b><span data-ccp-props="{&quot;335559685&quot;:431,&quot;335559738&quot;:100,&quot;335559739&quot;:100}"> </span></p></blockquote>
<h3><b><span data-contrast="none">Embedding Models by Cloud</span></b><span data-ccp-props="{&quot;335559738&quot;:220,&quot;335559739&quot;:100}"> </span></h3>
<table data-tablestyle="MsoNormalTable" data-tablelook="0">
<tbody>
<tr>
<td data-celllook="69905"><b><span data-contrast="none">Cloud Platform</span></b><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><b><span data-contrast="none">Embedding Model</span></b><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><b><span data-contrast="none">Vector Dimensions</span></b><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Azure</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">text-embedding-3-small / text-embedding-3-large</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">1536 / 3072</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">AWS</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Amazon Titan Embeddings V2</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">1024</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">OCI (Oracle Cloud)</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">OCI Embed Models (Cohere embed-english-v3.0)</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">1024</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
</tbody>
</table>
<p><span data-contrast="auto">Higher dimensions generally mean better semantic capture — but also higher storage cost and slightly slower search. For most enterprise use cases, 1024–1536 dimensions is the sweet spot.</span><span data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<h2><b><span data-contrast="none">Stage 4: Vector Databases — The Brain Behind Retrieval</span></b><span data-ccp-props="{&quot;335559738&quot;:400,&quot;335559739&quot;:200}"> </span></h2>
<p><span data-contrast="auto">A vector database stores your embedded chunks and enables fast similarity search at scale. When a user asks a question, the vector DB returns the Top-K most semantically similar chunks in milliseconds — even across millions of documents.</span><span data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<h3><b><span data-contrast="none">What Gets Stored in the Vector Database</span></b><span data-ccp-props="{&quot;335559738&quot;:220,&quot;335559739&quot;:100}"> </span></h3>
<pre><span data-contrast="none">{</span><span data-ccp-props="{&quot;335559685&quot;:576,&quot;335559738&quot;:40,&quot;335559739&quot;:40}"> </span>

<span data-contrast="none">  'chunk_id':   'hr_policy_001_chunk_003',</span><span data-ccp-props="{&quot;335559685&quot;:576,&quot;335559738&quot;:40,&quot;335559739&quot;:40}"> </span>

<span data-contrast="none">  'text':       'Employees are entitled to 20 days annual leave per year...',</span><span data-ccp-props="{&quot;335559685&quot;:576,&quot;335559738&quot;:40,&quot;335559739&quot;:40}"> </span>

<span data-contrast="none">  'embedding':  [0.23, -0.87, 0.41, ... ],  // 1536 numbers</span><span data-ccp-props="{&quot;335559685&quot;:576,&quot;335559738&quot;:40,&quot;335559739&quot;:40}"> </span>

<span data-contrast="none">  'metadata': {</span><span data-ccp-props="{&quot;335559685&quot;:576,&quot;335559738&quot;:40,&quot;335559739&quot;:40}"> </span>

<span data-contrast="none">    'source':   'HR_Policy_2024.pdf',</span><span data-ccp-props="{&quot;335559685&quot;:576,&quot;335559738&quot;:40,&quot;335559739&quot;:40}"> </span>

<span data-contrast="none">    'page':     3,</span><span data-ccp-props="{&quot;335559685&quot;:576,&quot;335559738&quot;:40,&quot;335559739&quot;:40}"> </span>

<span data-contrast="none">    'date':     '2024-01-15',</span><span data-ccp-props="{&quot;335559685&quot;:576,&quot;335559738&quot;:40,&quot;335559739&quot;:40}"> </span>

<span data-contrast="none">    'category': 'HR'</span><span data-ccp-props="{&quot;335559685&quot;:576,&quot;335559738&quot;:40,&quot;335559739&quot;:40}"> </span>

<span data-contrast="none">  }</span><span data-ccp-props="{&quot;335559685&quot;:576,&quot;335559738&quot;:40,&quot;335559739&quot;:40}"> </span>

<span data-contrast="none">}</span></pre>
<h3><b><span data-contrast="none">How Similarity Search Works (ANN Search)</span></b><span data-ccp-props="{&quot;335559738&quot;:220,&quot;335559739&quot;:100}"> </span></h3>
<p><span data-contrast="auto">The vector DB uses an Approximate Nearest Neighbour (ANN) algorithm — typically HNSW (Hierarchical Navigable Small World) to find the closest vectors without scanning every single entry. This is what makes it millisecond-fast even at millions of chunks.</span><span data-ccp-props="{&quot;335559738&quot;:80,&quot;335559739&quot;:80}"> </span></p>
<h3><b><span data-contrast="none">Vector Database Comparison Across Clouds</span></b><span data-ccp-props="{&quot;335559738&quot;:220,&quot;335559739&quot;:100}"> </span></h3>
<table data-tablestyle="MsoNormalTable" data-tablelook="0">
<tbody>
<tr>
<td data-celllook="69905"><b><span data-contrast="none">Feature</span></b><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><b><span data-contrast="none">Azure AI Search</span></b><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><b><span data-contrast="none">AWS OpenSearch</span></b><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><b><span data-contrast="none">OCI Vector Search (DB 23ai)</span></b><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Search Type</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Hybrid: BM25 + Vector + Semantic Ranker</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">k-NN Vector Plugin</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">SQL-native VECTOR type</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Index Algorithm</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">HNSW + Microsoft Semantic Ranker</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">HNSW via k-NN plugin</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">IVF / HNSW in Oracle DB</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Metadata Filtering</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Rich filter expressions</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Boolean + field filters</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Full SQL WHERE clauses</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">LLM Integration</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Native Azure OpenAI connector</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Native Amazon Bedrock</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Native OCI GenAI Service</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
<tr>
<td data-celllook="69905"><span data-contrast="auto">Unique Advantage</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Best hybrid search (keyword + semantic)</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">Widest model choice</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
<td data-celllook="69905"><span data-contrast="auto">No separate DB needed</span><span data-ccp-props="{&quot;335559738&quot;:60,&quot;335559739&quot;:60}"> </span></td>
</tr>
</tbody>
</table>
<blockquote><p><span data-ccp-props="{&quot;335559685&quot;:576,&quot;335559738&quot;:40,&quot;335559739&quot;:40}"><span class="NormalTextRun SCXW244958035 BCX0">Azure</span><span class="NormalTextRun SCXW244958035 BCX0"> AI Search&#8217;s hybrid mode (BM25 + vector + semantic ranker) consistently outperforms pure vector search for enterprise content </span><span class="NormalTextRun SCXW244958035 BCX0">— especially f</span><span class="NormalTextRun SCXW244958035 BCX0">or technical documentation and policy documents.</span></span></p></blockquote>
<h2><span class="TextRun SCXW37332219 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW37332219 BCX0">Putting It All Together — The Full Ingestion Flow</span></span><span class="EOP Selected SCXW37332219 BCX0" data-ccp-props="{&quot;335559738&quot;:400,&quot;335559739&quot;:200}"> </span></h2>
<p>Here is the complete flow from raw document to queryable knowledge:</p>
<p><img loading="lazy" decoding="async" data-attachment-id="392188" data-permalink="https://blogs.perficient.com/from-sharepoint-to-vector-db-how-enterprise-rag-ingestion-actually-works/rag1/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/RAG1.png" data-orig-size="845,563" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Rag1" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/RAG1.png" class="alignnone wp-image-392188 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/RAG1.png" alt="Rag1" width="845" height="563" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/RAG1.png 845w, https://blogs.perficient.com/wp-content/uploads/2026/08/RAG1-300x200.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/08/RAG1-768x512.png 768w, https://blogs.perficient.com/wp-content/uploads/2026/08/RAG1-600x400.png 600w" sizes="auto, (max-width: 845px) 100vw, 845px" /></p>
<table width="100%">
<thead>
<tr>
<td><strong>Stage</strong></td>
<td><strong>Input → Output</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td>1. Extract</td>
<td>SharePoint / PDF / Jira → Raw text strings</td>
</tr>
<tr>
<td>2. Clean</td>
<td>Raw text →  Normalized, deduplicated text</td>
</tr>
<tr>
<td>3. Chunk</td>
<td>Full document text → List of 512-token chunks</td>
</tr>
<tr>
<td>4. Embed</td>
<td>Each chunk text → 1536-dimensional vector</td>
</tr>
<tr>
<td>5. Store</td>
<td>Chunk + vector + metadata → Vector database record</td>
</tr>
<tr>
<td>6. Index</td>
<td>All vectors → HNSW ANN index built for fast search</td>
</tr>
</tbody>
</table>
<p>This entire pipeline runs whenever new documents are added or existing ones are updated. In production, it&#8217;s typically triggered automatically — by a file upload, a Jira update, or a scheduled job.</p>
<p><strong><em><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/27a1.png" alt="➡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></em></strong><strong><em> In Part 3, we&#8217;ll go hands-on with the Azure implementation — showing exactly how Azure Functions, Azure OpenAI, Azure AI Search, and Azure DevOps work together to build a production RAG system.</em></strong></p>
<p>The post <a href="https://blogs.perficient.com/from-sharepoint-to-vector-db-how-enterprise-rag-ingestion-actually-works/">From SharePoint to Vector DB: How Enterprise RAG Ingestion Actually Works</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/08/iStock-915524384-1-1024x695.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">392184</post-id>	</item>
		<item>
		<title>Perficient’s Pradeep Jain Named Microsoft FastTrack Recognized Solution Architect for Second Consecutive Year</title>
		<link>https://blogs.perficient.com/perficients-pradeep-jain-named-microsoft-fasttrack-recognized-solution-architect-for-second-consecutive-year/</link>
		
		<dc:creator><![CDATA[Editorial Team]]></dc:creator>
		<pubDate>Tue, 04 Aug 2026 15:37:34 +0000</pubDate>
				<category><![CDATA[News and Events]]></category>
		<category><![CDATA[Technical Expertise]]></category>
		<category><![CDATA[Award]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft Power Platform]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=392068</guid>

					<description><![CDATA[<p>Perficient is proud to announce that Pradeep Jain, Senior Solution Architect, has once again been recognized by Microsoft as a FastTrack Recognized Solution Architect (FTRSA)&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/perficients-pradeep-jain-named-microsoft-fasttrack-recognized-solution-architect-for-second-consecutive-year/">Perficient’s Pradeep Jain Named Microsoft FastTrack Recognized Solution Architect for Second Consecutive Year</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Perficient is proud to announce that <a href="https://www.linkedin.com/in/pradeep-jain-a0343716">Pradeep Jain</a>, Senior Solution Architect, has once again been recognized by Microsoft as a <a href="https://ftrsa.microsoft.com/">FastTrack Recognized Solution Architect (FTRSA)</a> for 2026.</p>
<p>This prestigious designation honors solution architects who consistently demonstrate deep architectural expertise and deliver high-quality, enterprise-scale business solutions that drive meaningful customer outcomes. Microsoft&#8217;s FastTrack Recognized Solution Architect program is one of the company&#8217;s most respected technical recognition programs for partners, celebrating individuals who exemplify technical excellence, innovation, and customer success across the Microsoft ecosystem.</p>
<p>This year, only 80 professionals worldwide received the recognition, placing Pradeep among an elite group of architects helping organizations accelerate digital transformation through Microsoft technologies.</p>
<p>Pradeep shared:</p>
<blockquote><p>&#8220;I&#8217;m honored to receive Microsoft FastTrack Recognized Solution Architect status for a second consecutive year. This recognition reflects not only my passion for helping clients solve complex business challenges with Power Platform and AI, but also the incredible support of the Perficient team and our partnership with Microsoft. I&#8217;m excited to continue driving innovation and delivering meaningful outcomes for our clients.&#8221;</p></blockquote>
<p><strong>A Continued Commitment to Excellence</strong></p>
<p>Receiving the award for a second consecutive year reflects Pradeep&#8217;s continued leadership in designing and delivering transformative solutions built with Microsoft Power Platform technologies, including Power Automate, Power Apps, and emerging AI capabilities.</p>
<p>Throughout his career, Pradeep has partnered with clients across industries to modernize operations, streamline complex processes, and create scalable, intelligent solutions that generate measurable business value. His ability to combine strong technical architecture with a deep understanding of customer needs has earned the trust of clients and colleagues alike.</p>
<p>Beyond project delivery, Pradeep is known for mentoring fellow consultants, advancing architecture best practices, and helping organizations establish governance frameworks that support long-term success with Microsoft technologies.</p>
<p><strong>What Is a Microsoft FastTrack Recognized Solution Architect?</strong></p>
<p>The <a href="https://ftrsa.microsoft.com/">FastTrack Recognized Solution Architect program</a> was established by Microsoft to identify and celebrate practicing solution architects who consistently exhibit exceptional architecture expertise and create high-quality solutions during customer engagements. Candidates undergo a rigorous evaluation process that assesses technical depth, implementation experience, customer impact, and architectural leadership.</p>
<p>Recognized architects become part of an exclusive global community that collaborates closely with Microsoft engineering teams and helps influence the future direction of Microsoft business applications and Power Platform technologies.</p>
<p><strong>Reflecting Perficient&#8217;s Microsoft Expertise</strong></p>
<p>Pradeep&#8217;s recognition also reflects Perficient&#8217;s commitment to helping clients maximize their investments in Microsoft technologies. Our experts combine deep platform knowledge with industry experience to deliver secure, scalable, and AI-enabled solutions that drive operational efficiency, empower employees, and accelerate innovation.</p>
<p>As organizations increasingly look to leverage automation and AI to transform business processes, Perficient remains dedicated to delivering solutions that create lasting value and measurable outcomes.</p>
<p>Congratulations, Pradeep, on this outstanding achievement. Your expertise, leadership, and dedication to client success continue to exemplify the best of Perficient and our Microsoft practice.</p>
<p>The post <a href="https://blogs.perficient.com/perficients-pradeep-jain-named-microsoft-fasttrack-recognized-solution-architect-for-second-consecutive-year/">Perficient’s Pradeep Jain Named Microsoft FastTrack Recognized Solution Architect for Second Consecutive Year</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/08/FastTrack-Solution-Architect-Blog-Image.png"/>
<post-id xmlns="com-wordpress:feed-additions:1">392068</post-id>	</item>
		<item>
		<title>K8s DevOps AI Agent: AI-Powered KUBERNETES Operations</title>
		<link>https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/</link>
		
		<dc:creator><![CDATA[Harsha Satpute]]></dc:creator>
		<pubDate>Tue, 04 Aug 2026 14:15:02 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=392145</guid>

					<description><![CDATA[<p>Introduction Kubernetes has become the backbone of modern cloud-native applications, enabling organizations to deploy and scale workloads with unprecedented flexibility. However, managing production Kubernetes environments&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/">K8s DevOps AI Agent: AI-Powered KUBERNETES Operations</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2><strong>Introduction</strong></h2>
<p>Kubernetes has become the backbone of modern cloud-native applications, enabling organizations to deploy and scale workloads with unprecedented flexibility. However, managing production Kubernetes environments remains a significant challenge for DevOps and Site Reliability Engineering (SRE) teams.</p>
<p>When incidents occur, engineers often spend hours analyzing logs, checking cluster events, reviewing deployment configurations, and executing multiple kubectl commands before identifying the root cause. This traditional troubleshooting approach increases Mean Time To Resolution (MTTR) and impacts business continuity.</p>
<p>To address these challenges, We developed a K8s DevOps AI Agent, an intelligent platform that combines Azure Kubernetes Service (AKS), Azure OpenAI, and an AI-powered orchestration layer to automate Kubernetes troubleshooting, root cause analysis (RCA), and operational guidance.</p>
<h2><strong>Why Kubernetes Operations Need AI</strong></h2>
<p>Modern Kubernetes environments generate massive amounts of telemetry data, logs, events, metrics, and deployment information. While this data is valuable, it often creates operational complexity.</p>
<p>Some common challenges faced by DevOps teams include:</p>
<p><strong>1. High MTTR During Production Incidents</strong></p>
<p>Engineers must manually correlate pod logs, cluster events, deployment specifications, and node health information. This investigative process can consume valuable time during outages.</p>
<p><strong>2. Diagnostic Fatigue</strong></p>
<p>Production clusters generate enormous volumes of logs and alerts. Identifying the actual issue among thousands of events can be exhausting and error-prone.</p>
<p><strong>3. Command-Line Complexity</strong></p>
<p>Kubernetes troubleshooting often requires extensive knowledge of troubleshooting commands and scripts. Manual execution can slow response times and increase operational risk.</p>
<p><strong>4. Repetitive Remediation Tasks</strong></p>
<p>Many operational issues require repetitive troubleshooting steps that can be automated using intelligent workflows instead of manual intervention</p>
<h2><strong>Solution Overview: K8s DevOps AI Agent</strong></h2>
<p>The K8s DevOps AI Agent acts as an intelligent operational assistant for Kubernetes environments.</p>
<p>The platform combines:</p>
<ul>
<li>Azure Kubernetes Service (AKS)</li>
<li>Azure OpenAI</li>
<li>React-based SRE Dashboard</li>
<li>FastAPI Backend</li>
<li>AI Agent Orchestration Layer</li>
<li>Azure Container Registry</li>
<li>Portkey AI Gateway Integration</li>
</ul>
<p>Instead of manually investigating incidents, engineers can simply interact with the platform through a natural language chat interface.</p>
<p>For example:</p>
<blockquote><p>Why pod is failing?</p></blockquote>
<p>The AI agent automatically gathers logs, pod descriptions, cluster events, and deployment information before generating a structured root cause analysis along with remediation recommendations.</p>
<h2><strong>High-Level Architecture</strong></h2>
<p><img loading="lazy" decoding="async" data-attachment-id="392152" data-permalink="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/kubernetes1/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes1.png" data-orig-size="586,310" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Kubernetes1" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes1.png" class="alignnone wp-image-392152 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes1.png" alt="Kubernetes1" width="586" height="310" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes1.png 586w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes1-300x159.png 300w" sizes="auto, (max-width: 586px) 100vw, 586px" /></p>
<p>The solution follows a modern cloud-native architecture:</p>
<h3><strong>Frontend Layer</strong></h3>
<p>A React.js-based SRE Dashboard provides:</p>
<ul>
<li>Cluster insights</li>
<li>Incident analytics</li>
<li>Chat-based interactions</li>
<li>AI recommendations</li>
</ul>
<h3><strong>Backend Layer</strong></h3>
<p>A FastAPI backend handles:</p>
<ul>
<li>API requests</li>
<li>Agent orchestration</li>
<li>Kubernetes interactions</li>
<li>Response generation</li>
</ul>
<h3><strong>AI Agent Layer</strong></h3>
<p>The intelligence of the system resides here through:</p>
<ul>
<li>Intent Classification</li>
<li>Log Analysis</li>
<li>Pod and Node Discovery</li>
<li>Evidence Collection</li>
<li>AI-Powered YAML Editing</li>
<li>Deployment Scaling Operations</li>
<li>Automated RCA Generation</li>
</ul>
<h3><strong>Kubernetes Layer</strong></h3>
<p>The agent continuously interacts with AKS resources including:</p>
<ul>
<li>Pods</li>
<li>Nodes</li>
<li>Deployments</li>
<li>Services</li>
<li>Persistent Volumes</li>
<li>Cluster Events</li>
</ul>
<h3><strong>AI Layer</strong></h3>
<p>Azure OpenAI generates:</p>
<ul>
<li>Root Cause Analysis Reports</li>
<li>Operational Recommendations</li>
<li>Incident Summaries</li>
<li>Remediation Guidance</li>
</ul>
<h2><strong>AI-Driven Root Cause Analysis Workflow</strong></h2>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" data-attachment-id="392160" data-permalink="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/kubernetes2/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes2.png" data-orig-size="640,265" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Kubernetes2" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes2.png" class="alignnone wp-image-392160 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes2.png" alt="Kubernetes2" width="640" height="265" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes2.png 640w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes2-300x124.png 300w" sizes="auto, (max-width: 640px) 100vw, 640px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="392162" data-permalink="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/kubernetes3/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes3.png" data-orig-size="405,608" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Kubernetes3" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes3.png" class="alignnone wp-image-392162 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes3.png" alt="Kubernetes3" width="405" height="608" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes3.png 405w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes3-200x300.png 200w" sizes="auto, (max-width: 405px) 100vw, 405px" /></p>
<p>One of the most powerful capabilities of the platform is automated incident investigation. The workflow consists of five simple steps:</p>
<ol>
<li><strong>User Incident Query:</strong> The engineer submits a natural language question through the chat interface.</li>
<li><strong>Intent Classification:</strong> The AI engine determines whether the query involves pod failures, deployment issues, node problems, scaling operations, or cluster health investigations.</li>
<li><strong>Evidence Collection:</strong> The agent automatically gathers pod logs, cluster events, pod specifications, deployment configurations, and namespace details.</li>
<li><strong>LLM-Based Analysis:</strong> Azure OpenAI processes the collected telemetry and synthesizes findings into a human-readable root cause report.</li>
<li><strong>Remediation Recommendations:</strong> The platform responds with a root cause summary, corrective actions, copy-paste Kubernetes commands, verification steps, and best-practice recommendations.</li>
</ol>
<p>This entire process takes seconds instead of hours.</p>
<h2><strong>SRE Dashboard</strong></h2>
<ul>
<li>The React-based dashboard provides a centralized experience for Kubernetes operations, enabling engineers to:</li>
<li>Monitor cluster health</li>
<li>View AI-generated RCA reports</li>
<li>Interact with the AI agent using natural language</li>
<li>Review incident analytics</li>
<li>Access recommended remediation actions</li>
</ul>
<p><img loading="lazy" decoding="async" data-attachment-id="392163" data-permalink="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/kubernetes4/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes4.png" data-orig-size="746,437" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Kubernetes4" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes4.png" class="alignnone wp-image-392163 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes4.png" alt="Kubernetes4" width="746" height="437" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes4.png 746w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes4-300x176.png 300w" sizes="auto, (max-width: 746px) 100vw, 746px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="392164" data-permalink="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/kubernetes5/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes5.png" data-orig-size="739,403" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Kubernetes5" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes5.png" class="alignnone wp-image-392164 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes5.png" alt="Kubernetes5" width="739" height="403" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes5.png 739w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes5-300x164.png 300w" sizes="auto, (max-width: 739px) 100vw, 739px" /></p>
<h2><strong>Real Incident</strong> <strong>Example</strong></h2>
<p>Consider a production workload experiencing a pending error.<br />
<strong>Traditional Troubleshooting</strong></p>
<p><strong>kubectl get pods</strong></p>
<p><strong>kubectl logs pod-name</strong></p>
<p><strong>kubectl describe pod pod-name</strong></p>
<p><strong>kubectl get events</strong></p>
<p>Engineers manually correlate logs, events, and deployment configurations before identifying the root cause.</p>
<h3><strong>AI Agent Approach</strong></h3>
<p>User:</p>
<blockquote><p>Why pod is failing?</p></blockquote>
<h3><strong>AI Response &amp; Execution:</strong></h3>
<p>This typically reduces troubleshooting effort from hours to seconds.</p>
<p>As shown in the dashboard screenshots below, the SRE Copilot immediately identifies the failing pod (test-scale-deployment-7dd76c8dc5-7hszc), pulls cluster evidence, and presents an interactive Root Cause Analysis:</p>
<ul>
<li><strong>Root Cause Identified:</strong> Resource constraints (0/1 nodes are available: 1 Insufficient cpu, 1 Insufficient memory).</li>
<li><strong>Evidence Gathered:</strong> Automatically executes and outputs results for kubectl describe pod and kubectl get events.</li>
<li><strong>Actionable Remediation:</strong> Generates exact copy-paste kubectl edit deployment commands with recommended CPU/memory requests and limits.</li>
<li><strong>Verification &amp; Safety:</strong> Provides post-fix verification steps and explicit <em>&#8220;What NOT to do&#8221;</em> safety guidelines to avoid cluster instability.</li>
</ul>
<p>This automated workflow reduces troubleshooting effort from hours to seconds.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="392166" data-permalink="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/kubernetes6/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes6.png" data-orig-size="738,369" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Kubernetes6" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes6.png" class="alignnone wp-image-392166 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes6.png" alt="Kubernetes6" width="738" height="369" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes6.png 738w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes6-300x150.png 300w" sizes="auto, (max-width: 738px) 100vw, 738px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="392167" data-permalink="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/kubernetes7/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes7.png" data-orig-size="739,403" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Kubernetes7" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes7.png" class="alignnone wp-image-392167 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes7.png" alt="Kubernetes7" width="739" height="403" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes7.png 739w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes7-300x164.png 300w" sizes="auto, (max-width: 739px) 100vw, 739px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="392168" data-permalink="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/kubernetes8/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes8.png" data-orig-size="764,438" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Kubernetes8" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes8.png" class="alignnone wp-image-392168 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes8.png" alt="Kubernetes8" width="764" height="438" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes8.png 764w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetes8-300x172.png 300w" sizes="auto, (max-width: 764px) 100vw, 764px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="392175" data-permalink="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/kubernetesnew/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew.png" data-orig-size="764,420" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Kubernetesnew" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew.png" class="alignnone wp-image-392175 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew.png" alt="Kubernetesnew" width="764" height="420" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew.png 764w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew-300x165.png 300w" sizes="auto, (max-width: 764px) 100vw, 764px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="392176" data-permalink="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/kubernetesnew1/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew1.png" data-orig-size="784,446" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Kubernetesnew1" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew1.png" class="alignnone wp-image-392176 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew1.png" alt="Kubernetesnew1" width="784" height="446" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew1.png 784w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew1-300x171.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew1-768x437.png 768w" sizes="auto, (max-width: 784px) 100vw, 784px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="392177" data-permalink="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/kubernetesnew2/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew2.png" data-orig-size="785,441" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Kubernetesnew2" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew2.png" class="alignnone wp-image-392177 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew2.png" alt="Kubernetesnew2" width="785" height="441" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew2.png 785w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew2-300x169.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew2-768x431.png 768w" sizes="auto, (max-width: 785px) 100vw, 785px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="392178" data-permalink="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/kubernetesnew3/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew3.png" data-orig-size="772,434" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Kubernetesnew3" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew3.png" class="alignnone wp-image-392178 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew3.png" alt="Kubernetesnew3" width="772" height="434" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew3.png 772w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew3-300x169.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew3-768x432.png 768w" sizes="auto, (max-width: 772px) 100vw, 772px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="392179" data-permalink="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/kubernetesnew4/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew4.png" data-orig-size="774,431" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Kubernetesnew4" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew4.png" class="alignnone wp-image-392179 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew4.png" alt="Kubernetesnew4" width="774" height="431" srcset="https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew4.png 774w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew4-300x167.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/08/Kubernetesnew4-768x428.png 768w" sizes="auto, (max-width: 774px) 100vw, 774px" /></p>
<h2><strong>Technical Implementation</strong></h2>
<p>The solution is built using a modern technology stack:</p>
<table>
<tbody>
<tr>
<td width="185"><strong>Component</strong></td>
<td width="309"><strong>Technology</strong></td>
</tr>
<tr>
<td width="185">Hosting Platform</td>
<td width="309">Azure App Service</td>
</tr>
<tr>
<td width="185">Frontend</td>
<td width="309">React.js</td>
</tr>
<tr>
<td width="185">Backend</td>
<td width="309">FastAPI (Python)</td>
</tr>
<tr>
<td width="185">Kubernetes</td>
<td width="309">Azure Kubernetes Service (AKS)</td>
</tr>
<tr>
<td width="185">AI Engine</td>
<td width="309">Azure OpenAI GPT via Portkey</td>
</tr>
<tr>
<td width="185">Container Management</td>
<td width="309">Azure Container Registry</td>
</tr>
</tbody>
</table>
<p>The architecture enables scalable, secure, and enterprise-ready AI operations for Kubernetes environments.</p>
<h2><strong>AI Safety Guardrails</strong></h2>
<p>The AI agent operates within predefined operational boundaries:</p>
<ul>
<li>Read-only diagnostics by default</li>
<li>Controlled access to cluster resources</li>
<li>Prompt validation and sanitization</li>
<li>Audit trail for every AI recommendation</li>
<li>Human approval for remediation actions</li>
</ul>
<p>These controls ensure recommendations remain transparent, explainable, and secure.</p>
<h2><strong>Benefits</strong></h2>
<h3><strong>Faster Incident Resolution</strong></h3>
<p>AI-generated root cause analysis dramatically reduces MTTR by shortening troubleshooting cycles from hours to seconds.</p>
<h3><strong>Enhanced Operational Efficiency</strong></h3>
<p>SRE teams spend less time analyzing logs and more time improving platform reliability and automation.</p>
<h3><strong>Explainable Recommendations</strong></h3>
<p>Unlike black-box automation, the AI agent provides evidence-based explanations supported by logs, events, and Kubernetes metadata.</p>
<h3><strong>Reduced Downtime</strong></h3>
<p>Faster diagnostics lead directly to improved service availability and business continuity.</p>
<h3><strong>Improved User Experience</strong></h3>
<p>Engineers can interact with Kubernetes using natural language rather than memorizing complex command-line workflows.</p>
<h2><strong>Conclusion</strong></h2>
<p>AI is rapidly transforming how organizations operate cloud-native platforms. The K8s DevOps AI Agent demonstrates how Azure OpenAI and Kubernetes can work together to simplify operations, accelerate incident response, and improve system reliability.</p>
<p>By combining intelligent root cause analysis, automated evidence collection, and natural language interactions, organizations can significantly reduce operational overhead while empowering engineers to focus on innovation rather than repetitive troubleshooting.</p>
<p>The future of Kubernetes operations is not just automated, it is intelligent.</p>
<p>The post <a href="https://blogs.perficient.com/k8s-devops-ai-agent-ai-powered-kubernetes-operations/">K8s DevOps AI Agent: AI-Powered KUBERNETES Operations</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/07/iStock-2256678023-1024x576.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">392145</post-id>	</item>
		<item>
		<title>AI’s Next Phase: Erin Rushman on Turning AI Adoption Into Business Value</title>
		<link>https://blogs.perficient.com/crains-notable-leader-erin-rushman-ai-adoption-business-value/</link>
		
		<dc:creator><![CDATA[Editorial Team]]></dc:creator>
		<pubDate>Mon, 03 Aug 2026 21:28:26 +0000</pubDate>
				<category><![CDATA[News and Events]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=392084</guid>

					<description><![CDATA[<p>Erin Rushman has been named one of Crain&#8217;s Detroit Business&#8217; Notable Leaders in Accounting, Consulting &#38; Law. The honor comes at a pivotal moment. Across&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/crains-notable-leader-erin-rushman-ai-adoption-business-value/">AI&#8217;s Next Phase: Erin Rushman on Turning AI Adoption Into Business Value</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Erin Rushman has been named one of <strong>Crain&#8217;s Detroit Business&#8217; Notable Leaders</strong> in Accounting, Consulting &amp; Law. The honor comes at a pivotal moment. Across industries, organizations are moving beyond AI experimentation and pilot programs and confronting a more difficult question: <strong>How do we turn AI investments into meaningful business outcomes?</strong></p>
<p>As Vice President of Strategy, Experience &amp; Automation at Perficient, Erin helps organizations align customer experience, workforce enablement, and technology strategy to realize measurable value from AI and digital investments.</p>
<p>We recently sat down with her to discuss the question she hears most often from clients, how customer expectations are evolving, why organizations are shifting from change management to change enablement, and how AI is changing the way work gets organized and executed.</p>
<h2>How Can Organizations Use AI to Make Employees More Productive?</h2>
<p>It&#8217;s probably the most common AI question I hear from clients.</p>
<p>What&#8217;s interesting is that productivity isn&#8217;t actually the destination. It&#8217;s the starting point.</p>
<p>One of the biggest mistakes organizations make is measuring time saved instead of value created. Leaders naturally want to quantify efficiency gains, but hours saved only matter if they&#8217;re reinvested in better decisions, stronger customer experiences, and higher-value work.</p>
<p>The organizations creating the greatest business value aren&#8217;t asking how AI can help employees work faster or simply accelerate existing ways of working. They&#8217;re asking a different question: <strong>How should work change?</strong></p>
<p>AI can accelerate analysis, content creation, and execution. What it cannot do is eliminate uncertainty. The people closest to a business challenge still provide the judgment, context, and interpretation needed to determine whether AI&#8217;s outputs create value or create risk.</p>
<p>The organizations pulling ahead aren&#8217;t replacing human decision-making. They&#8217;re redesigning workflows so people spend less time on routine tasks and more time applying expertise where nuance matters most.</p>
<h2>How Is AI Changing Competitive Differentiation and Customer Experience?</h2>
<p>Many organizations still think about customer experience through the lens of channels they own: websites, mobile apps, contact centers, and digital platforms.</p>
<p>But customer behavior is changing.</p>
<p>Increasingly, customers are relying on AI-powered assistants and intelligent systems to research products, compare providers, surface recommendations, and complete transactions. In many cases, decisions are being made before a customer ever directly engages with a brand.</p>
<p>That&#8217;s why we&#8217;re seeing growing interest in <a href="https://www.perficient.com/insights/perspectives/defining-your-brand-in-an-agentic-world">agentic customer experience</a>.</p>
<p>In an agentic environment, organizations must think beyond traditional customer journeys and focus on how decisions are made, executed, and governed in real time.</p>
<p>The companies that will win in this next phase aren&#8217;t simply creating better digital experiences. They&#8217;re combining machine intelligence with business context and governance to ensure decisions remain accurate, explainable, and aligned to customer needs.</p>
<p>To compete in an agentic environment, organizations need foundational capabilities: <strong>real-time decisioning, orchestrated workflows, and governed personalization.</strong></p>
<p>Together, these capabilities help organizations remain relevant even when customer interactions happen in environments they don&#8217;t control.</p>
<p>At the same time, leaders should be careful not to become overly focused on agents themselves.</p>
<blockquote>
<h3>Many executive conversations today begin with the question, &#8220;How do we implement agentic AI?&#8221; The more important question is, &#8220;<strong>What work are we trying to improve and what business outcomes are we trying to achieve?&#8221;</strong></h3>
</blockquote>
<p>Organizations create value when they align AI, automation, governance, and human expertise to the work being performed. The most successful companies won&#8217;t be the ones with the most agents. They&#8217;ll be the ones that apply the right mix of technologies, workflows, and human judgment to deliver meaningful impact.</p>
<h2>How Do Organizations Turn AI Adoption Into Meaningful Behavior Change?</h2>
<p>Historically, change management often focused on helping people adapt to a new process, platform, or organizational initiative.</p>
<p>AI introduces a different challenge. Organizations aren&#8217;t simply implementing a new technology. They&#8217;re asking employees to rethink how decisions are made, how expertise is applied, and how work is performed.</p>
<p>That&#8217;s one reason we&#8217;re increasingly using the term <em>change enablement</em>. The shift may seem subtle, but it&#8217;s important.</p>
<p><strong>Change management</strong> can imply that change is happening to people and we&#8217;re helping them cope with it.</p>
<p><strong>Change enablement</strong> shifts the focus toward helping people develop the confidence, skills, behaviors, and habits needed to succeed in a new environment.</p>
<blockquote>
<h3>The biggest barriers aren&#8217;t always technical. They often involve trust, uncertainty, behavior, and psychology.</h3>
</blockquote>
<p>Interestingly, many organizations assume employees are primarily worried about job displacement. In practice, we often see something different. Employees want clarity on how to use AI appropriately, when to trust it, how it&#8217;s governed, and how success will be measured.</p>
<p>The organizations that succeed focus just as much on behavioral adoption as they do on technology implementation.</p>
<p>One example involved a large insurance broker implementing AI tools across the organization. Rather than delivering traditional one-time training, the organization invested in a phased enablement program designed to change daily behaviors and work habits. Within three weeks, AI usage increased by 37%, demonstrating the difference between tool deployment and meaningful adoption.</p>
<p>Ultimately, AI delivers value when people change how they work, not when technology gets deployed.</p>
<h2>Why Are Operating Models Becoming Critical for AI Success?</h2>
<p>Many organizations still view AI primarily as a technology initiative. We challenge leaders to consider it a question of how work gets organized, governed, and executed.</p>
<p><strong>The most important questions are no longer</strong>: <em>Which model should we use? Which platform should we implement? Which agent should we build?</em></p>
<p><strong>Instead, leaders are asking</strong>: <em>How should decisions be made? Which work should be performed by humans versus AI? How do we govern human-agent collaboration? Who owns accountability when decisions are automated? And—importantly—how does this work support the business outcomes that matter most?</em></p>
<p>What&#8217;s particularly interesting is that the biggest disruption isn&#8217;t occurring at the enterprise level. It&#8217;s happening within functions and teams, where leaders are redefining workflows, roles, decision rights, and governance.</p>
<p>Looking ahead, the advantage won&#8217;t come from choosing the latest AI platform. It will come from building an organization that can continuously adapt as technology evolves. The leaders making the greatest progress are embedding operational governance, experimentation, and learning directly into how work gets done.</p>
<h2>What&#8217;s the Biggest Mistake Organizations Are Making With AI?</h2>
<p>They&#8217;re treating AI as a technology initiative instead of a business strategy.</p>
<p>Organizations that pull ahead view AI as a driver of business value, not simply another technology investment.</p>
<p>Technology matters. But organizations that focus on technology alone often struggle to scale results because customer experience, workforce adoption, and operating model evolution are deeply interconnected.</p>
<p>The next phase of AI won&#8217;t be defined by who deploys the most tools. It will be defined by who can most effectively combine technology, human judgment, and organizational adaptability to create measurable business value.</p>
<p><strong>That&#8217;s ultimately what separates experimentation from impact and investment from value.</strong></p>
<p>____</p>
<h2>Ready to rethink how work gets done in an AI-first world?</h2>
<p>Erin and Perficient&#8217;s Strategy &amp; Experience experts partner with organizations to redesign customer experiences, enable new ways of working, and evolve operating models for the age of AI. Learn more about our <a href="https://www.perficient.com/ai-first-solutions/strategy-experience">Strategy &amp; Experience capabilities</a> or <a href="https://www.perficient.com/contact-us">contact us</a> to discuss your organization&#8217;s next step.</p>
<p>The post <a href="https://blogs.perficient.com/crains-notable-leader-erin-rushman-ai-adoption-business-value/">AI&#8217;s Next Phase: Erin Rushman on Turning AI Adoption Into Business Value</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/08/2026_Erin_Rushman_CDB_Notable-1200x800-px-High-Quality-1024x683.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">392084</post-id>	</item>
		<item>
		<title>Shift-Left Infrastructure Compliance Automation</title>
		<link>https://blogs.perficient.com/shift-left-infrastructure-compliance-automation/</link>
		
		<dc:creator><![CDATA[Suraj Thakur]]></dc:creator>
		<pubDate>Thu, 30 Jul 2026 15:15:42 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=392120</guid>

					<description><![CDATA[<p>Using n8n, Azure DevOps, FastAPI, RAG, and AI to audit Terraform changes before merge Infrastructure teams are increasingly using Infrastructure-as-Code to define, review, and deploy&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/shift-left-infrastructure-compliance-automation/">Shift-Left Infrastructure Compliance Automation</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Using n8n, Azure DevOps, FastAPI, RAG, and AI to audit Terraform changes before merge</em></p>
<p>Infrastructure teams are increasingly using Infrastructure-as-Code to define, review, and deploy cloud resources. Terraform makes infrastructure repeatable and version-controlled, but compliance review often still depends on manual checks, late-stage audit activity, or reviewer experience. That creates a gap between how fast infrastructure code moves and how quickly teams can validate security and compliance expectations.</p>
<p>This automation initiative was built to close that gap. The objective was to automate Terraform compliance review during the Azure DevOps pull request process, before code is merged or deployed. The result is a working shift-left audit flow that detects changed Terraform files, audits the content, maps findings to CIS and SOC2 context, uses AI to express the finding clearly, and sends PASS, FAIL, or SKIPPED notifications to reviewers.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="392122" data-permalink="https://blogs.perficient.com/shift-left-infrastructure-compliance-automation/terra1/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/terra1.png" data-orig-size="1037,567" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Terra1" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/terra1-1024x560.png" class="alignnone wp-image-392122 size-large" src="https://blogs.perficient.com/wp-content/uploads/2026/07/terra1-1024x560.png" alt="Terra1" width="1024" height="560" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/terra1-1024x560.png 1024w, https://blogs.perficient.com/wp-content/uploads/2026/07/terra1-300x164.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/07/terra1-768x420.png 768w, https://blogs.perficient.com/wp-content/uploads/2026/07/terra1.png 1037w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<h2>Why This Automation Was Needed</h2>
<p>In a traditional process, infrastructure code is written, reviewed, merged, and deployed before deeper compliance issues are discovered. A reviewer may catch obvious mistakes during pull request review, but detailed compliance checks are hard to perform manually. This becomes even more difficult when a pull request contains multiple Terraform files or mixed changes such as README files, YAML files, scripts, and infrastructure code.</p>
<p>The risk is both technical and operational. A small Terraform setting can become a security or audit finding if it violates a control expectation. If this is discovered after merge or deployment, the team must revisit the code, redeploy the infrastructure, and manually collect evidence. The automation solution was designed around a simple question: can we give reviewers meaningful compliance feedback while the pull request is still open?</p>
<h2>The Logic Behind the Automation Flow</h2>
<p>The logic behind the automation solution is intentionally simple: treat every infrastructure pull request as an opportunity to validate compliance before risk enters the environment. The workflow does not try to audit everything blindly. It first understands what changed, filters only relevant Terraform files, and then audits the actual Terraform content from the pull request commit.</p>
<p>This makes the workflow practical. If a pull request has only documentation changes, the audit is skipped. If the pull request has Terraform files, the workflow processes each file. If one file fails and another passes, the result is aggregated into one pull-request-level decision. This keeps the result easy for reviewers to understand.</p>
<h3 style="text-align: center"><strong>Trigger → Validate → Execute → Decide → Notify</strong></h3>
<p>The trigger is the Azure DevOps pull request event. The validation step checks changed files and keeps only Terraform content. The execution step sends Terraform content to the audit backend. The decision step determines PASS, FAIL, or SKIPPED. The notification step sends a clean email to reviewers with the result and context.</p>
<h2>Where AI and RAG Add Value</h2>
<p>The most important part of this automation solution is not only automation. The value increases when automation is combined with RAG and AI. Traditional automation can tell whether a rule passed or failed. RAG and AI help explain why the result matters and turn raw compliance checks into readable, evidence-backed findings.</p>
<p>RAG, or Retrieval-Augmented Generation, is used to bring relevant compliance knowledge into the audit process. Instead of asking the AI model to answer from general knowledge, the workflow retrieves related CIS and SOC2 context from a knowledge store. This allows the audit response to be grounded in the controls that matter for the resource being reviewed.</p>
<p>AI then uses the Terraform configuration and retrieved compliance context to generate a structured finding. For example, if a storage account does not enforce HTTPS-only traffic, the AI-assisted finding can explain the failed setting, the current value, the expected value, the risk, and the relevant CIS/SOC2 mapping. This makes the output easier for both engineers and reviewers to act on.</p>
<ul>
<li>RAG improves context by retrieving relevant CIS and SOC2 control information.</li>
<li>AI improves readability by converting raw audit results into clear findings.</li>
<li>The combined approach helps produce evidence-backed, reviewer-friendly notifications.</li>
</ul>
<h2>AI/RAG Request and Response Flow</h2>
<p>The backend does not send only raw Terraform code to the language model. It builds a controlled audit context that includes the resource configuration, the applicable CIS rule, the mapped SOC2 controls, and strict output instructions. This keeps the AI response grounded in known compliance evidence instead of open-ended reasoning.</p>
<h3>Backend request context sent to the AI model</h3>
<ul>
<li>Role: act as a SOC2 and CIS Azure compliance auditor.</li>
<li>Strict rules: use only provided CIS rules, do not invent control IDs, use severity from metadata, and return valid JSON.</li>
<li>Resource: azurerm_storage_account.bad_storage with enable_https_traffic_only set to false.</li>
<li>Applicable CIS rule: cis-3.1 expects enable_https_traffic_only to be true and marks severity as HIGH.</li>
<li>Mapped SOC2 controls: soc2-CC6.6 and soc2-CC6.7 for logical access and security controls.</li>
</ul>
<pre>Compact prompt context

RESOURCE: azurerm_storage_account.bad_storage

CONFIG: enable_https_traffic_only = false

CIS RULE: cis-3.1 | expected_value = true | severity = HIGH

SOC2: soc2-CC6.6, soc2-CC6.7

TASK: Evaluate resource against provided CIS rules only.

OUTPUT: JSON with resource, findings, status, risk, current_value, expected_value, overall_risk.</pre>
<h3>AI-generated audit response</h3>
<p>The AI model returns a structured finding that the backend can parse and pass back to n8n. The result is not free-form text; it is a predictable JSON response that supports aggregation, branching, and notification formatting.</p>
<pre>{

  "resource": "bad_storage",

  "resource_type": "azurerm_storage_account",

  "findings": [

    {

      "cis_id": "cis-3.1",

      "soc2_controls": ["soc2-CC6.6", "soc2-CC6.7"],

      "status": "FAIL",

      "finding": "Storage account does not enforce HTTPS traffic only",

      "risk": "Unencrypted HTTP traffic allows potential interception and unauthorized access to storage account data in transit",

      "attribute": "enable_https_traffic_only",

      "current_value": "false",

      "expected_value": "true"

    }

  ],

  "overall_risk": "HIGH"

}</pre>
<p>This design is important because the AI is used as an audit reasoning layer, while the backend still controls the source of truth. The CIS and SOC2 context is retrieved first, then the model explains the finding using only the provided rules and controls.</p>
<h2>Representative Backend Structure</h2>
<p>The backend is structured as a small audit service. The exact folder names can evolve, but the separation of responsibility keeps the system easier to maintain and extend.</p>
<pre>backend/

├─ app/

│  ├─ api/

│  │  └─ api.py                  # FastAPI routes for health, ingestion, retrieval, and audit endpoints

│  ├─ parsers/

│  │  └─ terraform_parser.py     # Extracts Terraform resources and attributes from .tf content

│  ├─ services/

│  │  └─ audit_service.py        # Orchestrates parsing, retrieval, AI request, and final audit response

│  ├─ rag/

│  │  └─ retriever.py            # Retrieves relevant CIS and SOC2 context from the vector store

│  ├─ llm/

│  │  └─ claude_client.py        # Sends controlled audit prompt to the LLM and receives JSON findings

│  ├─ ingest/

│  │  ├─ cis_loader.py           # Loads CIS rules into the knowledge base

│  │  └─ soc2_loader.py          # Loads SOC2 controls into the knowledge base

│  └─ models/

│     └─ schemas.py              # Defines request/response models for API contracts

├─ data/                         # Sample CIS and SOC2 source files

├─ chroma_db/                    # Local vector store persistence

├─ tests/tf_samples/             # Terraform examples used for validation

└─ requirements.txt              # Python dependencies</pre>
<p>&nbsp;</p>
<p>In this structure, FastAPI exposes the service, the parser understands Terraform, the retriever brings compliance evidence, the LLM client generates structured findings, and the audit service ties everything together into one response.</p>
<h2>Where n8n Fits in the Automation Flow</h2>
<p>n8n is the workflow automation layer in this automation solution. It does not replace Azure DevOps, FastAPI, or the AI layer. Instead, n8n connects these systems and controls the end-to-end sequence from pull request trigger to audit notification.</p>
<p>The main value of n8n is orchestration. It receives the Azure DevOps PR event, extracts metadata, calls Azure DevOps APIs, applies conditions, loops through Terraform files, calls the audit backend, aggregates the results, and sends the final email notification. This makes the process easier to visualize, modify, and extend without hard-coding every integration into one application.</p>
<p>In the workflow, n8n also acts as the decision engine. If no Terraform files are found, n8n sends a SKIPPED notification. If the audit backend returns high-risk findings, n8n sends a FAILED notification. If the audit passes, n8n sends a PASSED notification. This branching logic turns raw automation into a usable audit process.</p>
<ul>
<li>Receives Azure DevOps PR events through a webhook.</li>
<li>Filters changed files and selects only Terraform .tf files.</li>
<li>Loops through one or many Terraform files in a PR.</li>
<li>Calls FastAPI to audit Terraform content.</li>
<li>Aggregates file-level findings into one PR-level result.</li>
<li>Sends a clear email notification to reviewers.</li>
</ul>
<p><img loading="lazy" decoding="async" data-attachment-id="392134" data-permalink="https://blogs.perficient.com/shift-left-infrastructure-compliance-automation/terra2/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/terra2.png" data-orig-size="1037,519" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Terra2" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/terra2-1024x512.png" class="alignnone wp-image-392134 size-large" src="https://blogs.perficient.com/wp-content/uploads/2026/07/terra2-1024x512.png" alt="Terra2" width="1024" height="512" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/terra2-1024x512.png 1024w, https://blogs.perficient.com/wp-content/uploads/2026/07/terra2-300x150.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/07/terra2-768x384.png 768w, https://blogs.perficient.com/wp-content/uploads/2026/07/terra2.png 1037w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<h2>How the Automation Solution Works</h2>
<p>The automation solution connects several components into one automated flow. Azure DevOps provides the source repository and pulls request event. n8n receives the event and manages the workflow. FastAPI receives Terraform content and performs the audit logic. ChromaDB and RAG provide compliance context from CIS and SOC2 controls. Claude helps generate structured audit findings. The final result is delivered by email.</p>
<p>The workflow audits the actual Terraform content from the pull request commit, not a stale local file. This is important because the audit result should reflect the exact code being reviewed. The workflow also supports multiple Terraform files in one pull request, which makes it useful for realistic infrastructure changes.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="392135" data-permalink="https://blogs.perficient.com/shift-left-infrastructure-compliance-automation/terra3/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/terra3.png" data-orig-size="1037,400" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Terra3" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/terra3-1024x395.png" class="alignnone wp-image-392135 size-large" src="https://blogs.perficient.com/wp-content/uploads/2026/07/terra3-1024x395.png" alt="Terra3" width="1024" height="395" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/terra3-1024x395.png 1024w, https://blogs.perficient.com/wp-content/uploads/2026/07/terra3-300x116.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/07/terra3-768x296.png 768w, https://blogs.perficient.com/wp-content/uploads/2026/07/terra3.png 1037w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<h3>Key n8n Workflow Logic</h3>
<p>The key workflow is the Azure DevOps PR Terraform Audit workflow. It receives a pull request event, extracts metadata, gets changed files, filters only .tf files, fetches file content, calls the audit backend, aggregates results, and sends the final notification.</p>
<ul>
<li>No Terraform files changed: send a SKIPPED notification.</li>
<li>One or more compliance findings detected: send a FAILED notification.</li>
<li>Terraform files audited with no high-risk finding: send a PASSED notification.</li>
</ul>
<h2>What the Automation Successfully Demonstrated</h2>
<p>The completed automation solution validated the end-to-end automation path. Azure DevOps PR events successfully triggered the n8n workflow. n8n identified changed files, filtered Terraform files, ignored non-Terraform changes, and handled multiple Terraform files in the same pull request. The FastAPI backend audited Terraform content and returned structured results. The workflow generated professional email notifications for PASS, FAIL, and SKIPPED outcomes.</p>
<p>The strongest scenario was a mixed pull request with one failing Terraform file, one passing Terraform file, and one README change. The workflow ignored the README file, audited both Terraform files, detected the failing resource, and generated one pull-request-level result. This proved the automation solution could support realistic review scenarios rather than only a simple single-file example.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="392136" data-permalink="https://blogs.perficient.com/shift-left-infrastructure-compliance-automation/terra4/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/terra4.png" data-orig-size="664,308" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Terra4" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/terra4.png" class="alignnone wp-image-392136 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/terra4.png" alt="Terra4" width="664" height="308" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/terra4.png 664w, https://blogs.perficient.com/wp-content/uploads/2026/07/terra4-300x139.png 300w" sizes="auto, (max-width: 664px) 100vw, 664px" /></p>
<h2>Business and Engineering Benefits</h2>
<p>The main benefit of the automation solution is earlier feedback. Reviewers can see compliance issues before code is merged, which reduces the chance of deploying non-compliant infrastructure. It also reduces manual review effort by automating repetitive checks and surfacing only the relevant findings.</p>
<ul>
<li>Reduces late-stage compliance rework by checking Terraform during pull request review.</li>
<li>Improves consistency by applying the same audit logic across pull requests.</li>
<li>Provides evidence-backed findings using CIS and SOC2 context.</li>
<li>Uses AI to make audit results easier to understand and act on.</li>
<li>Supports realistic pull requests with multiple Terraform files and mixed file types.</li>
<li>Creates a reusable automation model for broader SDLC workflows.</li>
</ul>
<h2>Beyond Terraform Compliance</h2>
<p>Although this automation solution focused on Terraform audit, the automation pattern is reusable. The same model can support automated testing, deployment validation, security checks, PR quality gates, release approvals, audit evidence reporting, and team notifications. The real value is the pattern: integrate triggers, validation, execution, decisioning, and notification into a repeatable workflow.</p>
<p>As a next step, this automation solution can be extended by adding a full CIS Azure Benchmark dataset, broader SOC2 control mappings, Azure DevOps PR comments, merge gates, remediation suggestions, and a reporting dashboard. The AI and RAG layer can also be improved over time by adding richer compliance knowledge, historical findings, internal standards, and remediation guidance.</p>
<h2>Conclusion</h2>
<p>This automation solution shows that infrastructure compliance does not need to remain a manual or post-deployment activity. By combining Azure DevOps, n8n, FastAPI, RAG, CIS/SOC2 context, AI reasoning, and email notification, compliance feedback can be delivered earlier and in a format that reviewers can act on quickly.</p>
<p>The result is a practical shift-left audit flow: faster feedback, reduced manual effort, better audit readiness, and a reusable automation foundation for modern DevOps and cloud governance. Most importantly, the use of RAG and AI turns compliance automation from a simple rule-checking process into an intelligent, contextual, and reviewer-friendly experience.</p>
<p>The post <a href="https://blogs.perficient.com/shift-left-infrastructure-compliance-automation/">Shift-Left Infrastructure Compliance Automation</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/07/iStock-2217031205-1024x683.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">392120</post-id>	</item>
		<item>
		<title>Why Your LLM Doesn’t Know Anything About Your Company And How RAG Fixes That</title>
		<link>https://blogs.perficient.com/why-your-llm-doesnt-know-anything-about-your-company-and-how-rag-fixes-that/</link>
		
		<dc:creator><![CDATA[Venkata Sreeram Murthy Gonella]]></dc:creator>
		<pubDate>Wed, 29 Jul 2026 19:05:30 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=392101</guid>

					<description><![CDATA[<p>Series: Enterprise GenAI &#38; RAG Architecture — Part 1 of 5 The Problem Nobody Talks About Your organization has rolled out a new AI assistant.&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/why-your-llm-doesnt-know-anything-about-your-company-and-how-rag-fixes-that/">Why Your LLM Doesn&#8217;t Know Anything About Your Company And How RAG Fixes That</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em><strong>Series: </strong>Enterprise GenAI &amp; RAG Architecture — Part 1 of 5</em></p>
<h2><strong>The Problem Nobody Talks About</strong></h2>
<p>Your organization has rolled out a new AI assistant. Your team is excited. Someone asks it, “What is our leave policy?”. It responds quickly and confidently, but the answer misses the mark.</p>
<p>This does not mean the model is broken. It means the model only knows what it has been trained on and what information it can access at the moment of the request.</p>
<blockquote><p><strong>LLMs are trained on broad data sources up to a cutoff date. Unless they are connected to your enterprise content, they do not know your internal systems, policies, documents, or processes. </strong></p></blockquote>
<p>Think about everything an LLM may not know about your company:</p>
<ul>
<li>Your SharePoint intranet and HR policies</li>
<li>Your product documentation and release notes</li>
<li>Your Jira tickets and project history</li>
<li>Your internal PDFs, SOPs, and compliance documents</li>
<li>Any update that happened after the model&#8217;s training cutoff</li>
</ul>
<p>For consumer chatbots, this may not matter as much. For enterprise AI, it creates a clear need for trusted, company-specific context.</p>
<h2><strong>Enter RAG: Retrieval-Augmented Generation</strong></h2>
<p>RAG is the architecture pattern that solves this problem. The name tells you exactly what it does:</p>
<p><strong>Retrieval — </strong>Search your private enterprise knowledge base to find relevant content.</p>
<p><strong>Augmented — </strong>Add that content as context to the LLM&#8217;s prompt.</p>
<p><strong>Generation — </strong>Let the LLM generate an answer grounded in YOUR data.</p>
<p>Instead of relying solely on what the model was trained on, RAG dynamically fetches the right information at query time and hands it to the LLM. The result: accurate, current, enterprise-aware answers.</p>
<blockquote><p><strong>RAG is not a product. It is an architecture pattern. It works with GPT-4, Claude, Llama, and virtually any LLM.</strong></p></blockquote>
<h3><strong>A Simple Analogy</strong></h3>
<p>Imagine hiring a brilliant consultant who has read every book ever published but has never worked at your company. If you ask them about your internal processes, they&#8217;ll guess, improvise, or politely say they don&#8217;t know.</p>
<p>Now give that consultant access to your company&#8217;s document library before every meeting. They can look up the right information, cite the exact source, and give you a confident, accurate answer.</p>
<p>That&#8217;s RAG. The consultant is the LLM. The document library is your vector database.</p>
<h2><strong>How RAG Works — The Architecture</strong></h2>
<p>Every enterprise RAG system — whether built on Azure, AWS, or Oracle Cloud — follows the same five-stage architecture. The diagram below shows the complete flow from raw enterprise data to a grounded, cited answer.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="392114" data-permalink="https://blogs.perficient.com/why-your-llm-doesnt-know-anything-about-your-company-and-how-rag-fixes-that/enterprise_rag_architecture_high_res/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/Enterprise_RAG_Architecture_high_res-scaled.png" data-orig-size="2560,1740" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Enterprise Rag Architecture High Res" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/Enterprise_RAG_Architecture_high_res-1024x696.png" class="alignnone wp-image-392114 size-large" src="https://blogs.perficient.com/wp-content/uploads/2026/07/Enterprise_RAG_Architecture_high_res-1024x696.png" alt="Enterprise Rag Architecture High Res" width="1024" height="696" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/Enterprise_RAG_Architecture_high_res-1024x696.png 1024w, https://blogs.perficient.com/wp-content/uploads/2026/07/Enterprise_RAG_Architecture_high_res-300x204.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/07/Enterprise_RAG_Architecture_high_res-768x522.png 768w, https://blogs.perficient.com/wp-content/uploads/2026/07/Enterprise_RAG_Architecture_high_res-1536x1044.png 1536w, https://blogs.perficient.com/wp-content/uploads/2026/07/Enterprise_RAG_Architecture_high_res-2048x1392.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<pre><em>Figure 1: Enterprise RAG Architecture — 5-Stage Flow (Data Sources → Ingestion → Vector DB → RAG Layer → LLM Response)</em></pre>
<p><strong>Stage 1 — Data Sources</strong></p>
<p>Enterprise documents from SharePoint, websites, PDFs, Word files, and Jira are the raw knowledge base. These are ingested automatically whenever content changes.</p>
<p><strong>Stage 2 — Ingestion Pipeline</strong></p>
<p>Each document is extracted, cleaned, and split into small chunks (typically 512 tokens). Every chunk is then converted into a vector embedding — a list of numbers that encodes its semantic meaning — using an embedding model such as Azure OpenAI text-embedding-3-small, Amazon Titan, or OCI Embed.</p>
<p><strong>Stage 3 — Vector Database</strong></p>
<p>Each chunk, its embedding vector, and its metadata (source, page, date) are stored in a Vector Database. On Azure this is Azure AI Search; on AWS it is OpenSearch; on Oracle Cloud it is Oracle DB 23ai with native VECTOR support.</p>
<p><strong>Stage 4 — RAG Layer</strong></p>
<p>When a user asks a question, it is embedded using the same model. The vector database returns the Top-5 most semantically similar chunks. These are injected into the LLM prompt as grounding context.</p>
<p><strong>Stage 5 — LLM Response</strong></p>
<p>The LLM (GPT-4o, Claude, or Llama) generates an answer constrained to the retrieved context only. Every claim in the answer can be traced back to a source document — which helps reduce unsupported or inaccurate responses.</p>
<blockquote><p><strong>The LLM is instructed: &#8216;Answer ONLY using the provided context. If the context does not contain the answer, say so.&#8217; This instruction helps ensure responses stay grounded in provided information. </strong></p></blockquote>
<h3><strong>RAG Components at a Glance</strong></h3>
<table width="100%">
<thead>
<tr>
<td><strong>RAG Component</strong></td>
<td><strong>What It Does</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td>1. Data Sources</td>
<td>SharePoint, PDFs, Websites, Jira, Word Docs — your enterprise knowledge</td>
</tr>
<tr>
<td>2. Data Ingestion</td>
<td>Extract → Clean → Chunk (512 tokens) → Embed → Store</td>
</tr>
<tr>
<td>3. Vector Database</td>
<td>Stores all chunk embeddings, enables millisecond similarity search</td>
</tr>
<tr>
<td>4. RAG Layer</td>
<td>Retrieve Top-K context → Build grounded prompt → Call LLM</td>
</tr>
<tr>
<td>5. LLM Response</td>
<td>Generates accurate, cited answer from retrieved context only</td>
</tr>
<tr>
<td>Testing &amp; Evaluation</td>
<td>RAGAS, DeepEval, PromptFoo — validates quality at every stage</td>
</tr>
<tr>
<td>CI/CD Pipeline</td>
<td>Automates ingestion, evaluation, and deployment on every change</td>
</tr>
</tbody>
</table>
<h2><strong>Why This Matters for Enterprises</strong></h2>
<p>RAG is now the standard architecture for enterprise AI. Here is why organizations are adopting it at scale:</p>
<p><strong>Accuracy: </strong>Answers are grounded in real, current company data — not stale training data.</p>
<p><strong>No retraining required: </strong>Add new documents and they&#8217;re immediately searchable. No expensive fine-tuning.</p>
<p><strong>Source attribution: </strong>Every answer can cite which document it came from — enabling full auditability.</p>
<p><strong>Cost efficiency: </strong>Retrieval is cheap. You only send relevant chunks to the LLM, saving tokens.</p>
<p><strong>Data security: </strong>Your private data stays in your infrastructure — never sent to train external models.</p>
<blockquote><p><strong>RAG doesn&#8217;t replace the LLM&#8217;s intelligence. It gives the LLM the right information to be intelligent about YOUR business.</strong></p></blockquote>
<p><strong>What&#8217;s Coming in This Series</strong></p>
<p>This is part 1 of a 5-part series on building, deploying, and testing enterprise RAG systems:</p>
<p><strong><em><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/27a1.png" alt="➡" class="wp-smiley" style="height: 1em; max-height: 1em;" />  </em>In Part 2, we&#8217;ll walk through exactly how documents get ingested, chunked, and stored in a vector database — the foundation your RAG system&#8217;s quality depends on.</strong></p>
<p>The post <a href="https://blogs.perficient.com/why-your-llm-doesnt-know-anything-about-your-company-and-how-rag-fixes-that/">Why Your LLM Doesn&#8217;t Know Anything About Your Company And How RAG Fixes That</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/07/iStock-2284923048-1024x540.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">392101</post-id>	</item>
		<item>
		<title>DeepEval vs Ragas vs LangSmith</title>
		<link>https://blogs.perficient.com/deepeval-vs-ragas-vs-langsmith/</link>
		
		<dc:creator><![CDATA[Spandana Vanamala]]></dc:creator>
		<pubDate>Wed, 29 Jul 2026 15:53:45 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=392054</guid>

					<description><![CDATA[<p>A QA Engineer&#8217;s Guide to Testing GenAI Applications  Testing software is no longer enough. In the age of generative AI, quality engineers must learn to test intelligence itself.  Executive&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/deepeval-vs-ragas-vs-langsmith/">DeepEval vs Ragas vs LangSmith</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2><span data-contrast="none">A QA Engineer&#8217;s Guide to Testing GenAI Applications</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<p><span data-contrast="auto">Testing software is no longer enough. In the age of generative AI, quality engineers must learn to test intelligence itself.</span><span data-ccp-props="{&quot;335559685&quot;:180,&quot;335572083&quot;:18,&quot;335572084&quot;:4,&quot;335572085&quot;:10921638,&quot;469789810&quot;:&quot;single&quot;}"> </span></p>
<h2><span data-contrast="none">Executive Summary</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}"> </span></h2>
<p><span data-contrast="auto">Generative AI is transforming enterprise software at an unprecedented pace.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">Organizations are rapidly deploying:</span><span data-ccp-props="{}"> </span></p>
<ul>
<li><span data-contrast="auto">AI chatbots</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">AI-powered search systems</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Document assistants</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Coding copilots</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Autonomous AI agents</span><span data-ccp-props="{}"> </span></li>
</ul>
<p><span data-contrast="auto">Unlike traditional applications, generative AI systems are </span><b><span data-contrast="auto">non-deterministic</span></b><span data-contrast="auto">. The same prompt can produce multiple valid answers.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">This introduces new quality challenges, including:</span></p>
<ul>
<li><span data-contrast="auto">Response accuracy issues </span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Retrieval failures</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Prompt sensitivity</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Agent workflow failures</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Toxicity and bias</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Non-deterministic outputs</span><span data-ccp-props="{}"> </span></li>
</ul>
<p><span data-contrast="auto">To address these challenges, organizations are increasingly turning to three widely adopted platforms for AI testing and evaluation:</span><span data-ccp-props="{}"> </span></p>
<table data-tablestyle="MsoTable15Grid4Accent1" data-tablelook="1184">
<tbody>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Tool</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><b><span data-contrast="auto">Primary Focus</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><b><span data-contrast="auto">Best For</span></b><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">DeepEval</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">LLM Evaluation</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Automated AI Testing</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Ragas</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">RAG Evaluation</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Retrieval Validation</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">LangSmith</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Observability &amp; Monitoring</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Agent Debugging</span><span data-ccp-props="{}"> </span></td>
</tr>
</tbody>
</table>
<h2><span class="TextRun SCXW101466456 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW101466456 BCX0" data-ccp-parastyle="heading 1">The Evolution of Software Testing</span></span><span class="EOP Selected SCXW101466456 BCX0" data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}"> </span></h2>
<p><img loading="lazy" decoding="async" data-attachment-id="392063" data-permalink="https://blogs.perficient.com/deepeval-vs-ragas-vs-langsmith/phase1v2/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase1v2.jpg" data-orig-size="715,274" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Phase1v2" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase1v2.jpg" class="alignnone wp-image-392063 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/phase1v2.jpg" alt="Phase1v2" width="715" height="274" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/phase1v2.jpg 715w, https://blogs.perficient.com/wp-content/uploads/2026/07/phase1v2-300x115.jpg 300w" sizes="auto, (max-width: 715px) 100vw, 715px" /></p>
<h2>Phase 1: Manual Testing</h2>
<h3>Focus Areas:</h3>
<ul>
<li>Functional Validation</li>
<li>User Acceptance Testing</li>
<li>Defect Identification</li>
</ul>
<h2>Phase 2: Automation Testing</h2>
<p><strong>Popular Tools:</strong></p>
<ul>
<li>Selenium</li>
<li>JUnit</li>
<li>TestNG</li>
<li>Playwright</li>
</ul>
<h3>Focus Areas:</h3>
<ul>
<li>Regression Testing</li>
<li>CI/CD Integration</li>
<li>Cross-Browser Validation</li>
</ul>
<h2>Phase 3: AI-Assisted Testing</h2>
<p>AI started helping engineers generate:</p>
<ul>
<li>Test Cases</li>
<li>Test Data</li>
<li>Automation Scripts</li>
</ul>
<p>Popular Examples:</p>
<ul>
<li>GitHub Copilot</li>
<li>Cursor</li>
<li>ChatGPT</li>
</ul>
<h2>Phase 4: GenAI Testing</h2>
<p>The challenge is no longer generating tests.</p>
<p>The challenge is:</p>
<blockquote><p>How do we validate AI-generated responses?</p></blockquote>
<p>This is where evaluation frameworks become essential.</p>
<h2>Why Traditional Testing Fails for AI Systems</h2>
<h3>Traditional Software</h3>
<h3>Input</h3>
<p><img loading="lazy" decoding="async" data-attachment-id="392070" data-permalink="https://blogs.perficient.com/deepeval-vs-ragas-vs-langsmith/phase2/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase2.jpg" data-orig-size="709,106" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Phase2" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase2.jpg" class="alignnone wp-image-392070 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/phase2.jpg" alt="Phase2" width="709" height="106" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/phase2.jpg 709w, https://blogs.perficient.com/wp-content/uploads/2026/07/phase2-300x45.jpg 300w" sizes="auto, (max-width: 709px) 100vw, 709px" /></p>
<h3><span class="TextRun SCXW252465953 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW252465953 BCX0" data-ccp-parastyle="heading 3">Expected Output</span></span><span class="EOP Selected SCXW252465953 BCX0" data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<p><img loading="lazy" decoding="async" data-attachment-id="392071" data-permalink="https://blogs.perficient.com/deepeval-vs-ragas-vs-langsmith/phase3/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase3.jpg" data-orig-size="706,76" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Phase3" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase3.jpg" class="alignnone wp-image-392071 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/phase3.jpg" alt="Phase3" width="706" height="76" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/phase3.jpg 706w, https://blogs.perficient.com/wp-content/uploads/2026/07/phase3-300x32.jpg 300w" sizes="auto, (max-width: 706px) 100vw, 706px" /></p>
<p><span class="TextRun SCXW3371495 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW3371495 BCX0">Simple and deterministic.</span></span><span class="EOP Selected SCXW3371495 BCX0" data-ccp-props="{}"> </span></p>
<h2><span data-contrast="none">Generative AI System</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<h3><span data-contrast="none">Question</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<blockquote><p><span data-contrast="auto">What are the benefits of opening a savings account?</span><span data-ccp-props="{&quot;335559685&quot;:180,&quot;335572083&quot;:18,&quot;335572084&quot;:4,&quot;335572085&quot;:10921638,&quot;469789810&quot;:&quot;single&quot;}"> </span></p></blockquote>
<h4><span data-contrast="none">Response A</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h4>
<p><span data-contrast="auto"><strong>|</strong> A savings account helps you earn interest while safely storing your money.</span><span data-ccp-props="{&quot;335559685&quot;:180,&quot;335572083&quot;:18,&quot;335572084&quot;:4,&quot;335572085&quot;:10921638,&quot;469789810&quot;:&quot;single&quot;}"> </span></p>
<h4><span data-contrast="none">Response B</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h4>
<p><span data-contrast="auto"><strong>|</strong> Savings accounts provide liquidity, security and interest earnings.</span><span data-ccp-props="{&quot;335559685&quot;:180,&quot;335572083&quot;:18,&quot;335572084&quot;:4,&quot;335572085&quot;:10921638,&quot;469789810&quot;:&quot;single&quot;}"> </span></p>
<ul>
<li data-leveltext="" data-font="Wingdings" data-listid="18" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Both responses are correct.</span><span data-ccp-props="{}"> </span></li>
</ul>
<p><span data-contrast="auto">This creates a new testing model:</span><span data-ccp-props="{}"> </span></p>
<table data-tablestyle="MsoTable15Grid4Accent1" data-tablelook="1184">
<tbody>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Traditional Testing</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><b><span data-contrast="auto">GenAI Testing</span></b><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Exact Match</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Quality Evaluation</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Pass / Fail</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Scored Metrics</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Assertions</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Relevance &amp; Accuracy</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Deterministic</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Probabilistic</span><span data-ccp-props="{}"> </span></td>
</tr>
</tbody>
</table>
<h2><span class="TextRun SCXW147713189 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW147713189 BCX0" data-ccp-parastyle="heading 1">Understanding the GenAI Quality Engineering Stack</span></span><span class="EOP Selected SCXW147713189 BCX0" data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}"> </span></h2>
<p><img loading="lazy" decoding="async" data-attachment-id="392072" data-permalink="https://blogs.perficient.com/deepeval-vs-ragas-vs-langsmith/phase4/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase4.jpg" data-orig-size="712,579" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Phase4" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase4.jpg" class="alignnone wp-image-392072 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/phase4.jpg" alt="Phase4" width="712" height="579" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/phase4.jpg 712w, https://blogs.perficient.com/wp-content/uploads/2026/07/phase4-300x244.jpg 300w" sizes="auto, (max-width: 712px) 100vw, 712px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="392073" data-permalink="https://blogs.perficient.com/deepeval-vs-ragas-vs-langsmith/phase5/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase5.jpg" data-orig-size="712,132" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Phase5" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase5.jpg" class="alignnone wp-image-392073 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/phase5.jpg" alt="Phase5" width="712" height="132" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/phase5.jpg 712w, https://blogs.perficient.com/wp-content/uploads/2026/07/phase5-300x56.jpg 300w" sizes="auto, (max-width: 712px) 100vw, 712px" /></p>
<p><span class="TextRun SCXW141688683 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW141688683 BCX0">Each platform </span><span class="NormalTextRun SCXW141688683 BCX0">operates</span><span class="NormalTextRun SCXW141688683 BCX0"> at a different layer of the AI ecosystem.</span></span><span class="EOP Selected SCXW141688683 BCX0" data-ccp-props="{}"> </span></p>
<h2><span data-contrast="none">DeepEval: Bringing Unit Testing to LLM Applications</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}"> </span></h2>
<h2><span data-contrast="none">What is DeepEval?</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<p><span data-contrast="auto">DeepEval is often called:</span><span data-ccp-props="{}"> </span></p>
<blockquote><p><span data-contrast="auto">&#8220;PyTest for LLM Applications&#8221;</span><span data-ccp-props="{&quot;335559685&quot;:180,&quot;335572083&quot;:18,&quot;335572084&quot;:4,&quot;335572085&quot;:10921638,&quot;469789810&quot;:&quot;single&quot;}"> </span></p></blockquote>
<p><span data-contrast="auto">It allows QA teams to create automated evaluation suites for AI systems.</span><span data-ccp-props="{}"> </span></p>
<h2><span data-contrast="none">Core Evaluation Metrics</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<table data-tablestyle="MsoTable15Grid4Accent1" data-tablelook="1184">
<tbody>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Metric</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><b><span data-contrast="auto">Purpose</span></b><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Answer Relevancy</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Does the answer address the question?</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Faithfulness</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Is the answer grounded in context?</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Hallucination Detection</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Is unsupported information generated?</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Toxicity</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Is the output harmful?</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto"> Bias Detection</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Is the response fair and neutral?</span><span data-ccp-props="{}"> </span></td>
</tr>
</tbody>
</table>
<h2><span class="TextRun SCXW200558834 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW200558834 BCX0" data-ccp-parastyle="heading 2">Banking Chatbot Example</span></span></h2>
<p><img loading="lazy" decoding="async" data-attachment-id="392075" data-permalink="https://blogs.perficient.com/deepeval-vs-ragas-vs-langsmith/phase6/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase6.jpg" data-orig-size="706,216" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Phase6" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase6.jpg" class="alignnone wp-image-392075 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/phase6.jpg" alt="Phase6" width="706" height="216" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/phase6.jpg 706w, https://blogs.perficient.com/wp-content/uploads/2026/07/phase6-300x92.jpg 300w" sizes="auto, (max-width: 706px) 100vw, 706px" /></p>
<p><span data-contrast="auto">DeepEval helps catch these issues before production.</span><span data-ccp-props="{}"> </span></p>
<h3><span data-contrast="none">Strengths</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<ul>
<li><span data-contrast="auto">Excellent Regression Testing</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">CI/CD Friendly</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Rich Evaluation Metrics</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Familiar with QA Engineers</span><span data-ccp-props="{}"> </span></li>
</ul>
<h3><span data-contrast="none">Limitations</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<ul>
<li><span data-contrast="auto">Requires Evaluation Datasets</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Limited Production Monitoring</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Basic Observability</span><span data-ccp-props="{}"> </span></li>
</ul>
<h2><span data-contrast="none">Ragas: The Gold Standard for RAG Evaluation</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}"> </span></h2>
<h3><span data-contrast="none">What is RAG?</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<p><span data-contrast="auto">RAG stands for:</span><span data-ccp-props="{}"> </span></p>
<p><b><span data-contrast="auto">Retrieval-Augmented Generation</span></b><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">Instead of relying solely on model training data, the system retrieves relevant information before generating an answer.</span><span data-ccp-props="{}"> </span></p>
<p><img loading="lazy" decoding="async" data-attachment-id="392076" data-permalink="https://blogs.perficient.com/deepeval-vs-ragas-vs-langsmith/phase7/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase7.jpg" data-orig-size="712,274" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Phase7" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase7.jpg" class="alignnone wp-image-392076 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/phase7.jpg" alt="Phase7" width="712" height="274" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/phase7.jpg 712w, https://blogs.perficient.com/wp-content/uploads/2026/07/phase7-300x115.jpg 300w" sizes="auto, (max-width: 712px) 100vw, 712px" /></p>
<h2><span data-contrast="none">Example</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<p><span data-contrast="auto">Question:</span><span data-ccp-props="{}"> </span></p>
<blockquote><p><span data-contrast="auto">What is our refund policy?</span><span data-ccp-props="{&quot;335559685&quot;:180,&quot;335572083&quot;:18,&quot;335572084&quot;:4,&quot;335572085&quot;:10921638,&quot;469789810&quot;:&quot;single&quot;}"> </span></p></blockquote>
<p><span data-contrast="auto">Retrieved Sources:</span><span data-ccp-props="{}"> </span></p>
<ul>
<li><span data-contrast="auto">Refund Policy PDF</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Knowledge Base Articles</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Support Documentation</span><span data-ccp-props="{}"> </span></li>
</ul>
<p><span data-contrast="auto">Critical Question:</span><span data-ccp-props="{}"> </span></p>
<blockquote><p><span data-contrast="auto">Did the system retrieve the right information?</span><span data-ccp-props="{&quot;335559685&quot;:180,&quot;335572083&quot;:18,&quot;335572084&quot;:4,&quot;335572085&quot;:10921638,&quot;469789810&quot;:&quot;single&quot;}"> </span></p></blockquote>
<p><span data-contrast="auto">This is where Ragas shines.</span><span data-ccp-props="{}"> </span></p>
<h2><span data-contrast="none">Core Metrics</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<table data-tablestyle="MsoTable15Grid4Accent1" data-tablelook="1184">
<tbody>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Metric</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><b><span data-contrast="auto">Purpose</span></b><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Context Precision</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">How much retrieved content is relevant?</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Context Recall</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Was important content retrieved?</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Faithfulness</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Is response supported by sources?</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Answer Relevancy</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Does the answer solve the question?</span><span data-ccp-props="{}"> </span></td>
</tr>
</tbody>
</table>
<h3><span data-contrast="none">Strengths</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<ul>
<li><span data-contrast="auto">Purpose Built for RAG</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Open Source</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Industry Adoption</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Powerful Retrieval Metrics</span><span data-ccp-props="{}"> </span></li>
</ul>
<h3><span data-contrast="none">Limitations</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<ul>
<li><span data-contrast="auto">Limited Agent Testing</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Minimal Observability</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Mainly RAG-Focused</span><span data-ccp-props="{}"> </span></li>
</ul>
<h2><span data-contrast="none">LangSmith: Observability for AI Systems</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}"> </span></h2>
<h3><span data-contrast="none">Why LangSmith?</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<p><span data-contrast="auto">Imagine an AI Agent receives this request:</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto"><strong>|</strong> Create a Jira defect and send a Slack notification.</span><span data-ccp-props="{&quot;335559685&quot;:180,&quot;335572083&quot;:18,&quot;335572084&quot;:4,&quot;335572085&quot;:10921638,&quot;469789810&quot;:&quot;single&quot;}"> </span></p>
<p><span data-contrast="auto">The agent will:</span><span data-ccp-props="{}"> </span></p>
<p><img loading="lazy" decoding="async" data-attachment-id="392077" data-permalink="https://blogs.perficient.com/deepeval-vs-ragas-vs-langsmith/phase8/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase8.jpg" data-orig-size="709,355" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Phase8" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase8.jpg" class="alignnone wp-image-392077 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/phase8.jpg" alt="Phase8" width="709" height="355" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/phase8.jpg 709w, https://blogs.perficient.com/wp-content/uploads/2026/07/phase8-300x150.jpg 300w" sizes="auto, (max-width: 709px) 100vw, 709px" /></p>
<p><span data-contrast="auto">If something fails, identifying the root cause becomes difficult.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">LangSmith provides full execution visibility.</span><span data-ccp-props="{}"> </span></p>
<h2><span data-contrast="none">What LangSmith Tracks</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<table data-tablestyle="MsoTable15Grid4Accent1" data-tablelook="1184">
<tbody>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Capability</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><b><span data-contrast="auto">Description</span></b><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Prompt Traces</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Every LLM interaction</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Agent Execution</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Decision Flow Tracking</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Tool Calls</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">External API Visibility</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Monitoring</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Production Insights</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Dataset Management</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Evaluation Dataset Storage</span><span data-ccp-props="{}"> </span></td>
</tr>
</tbody>
</table>
<h3><span data-contrast="none">Strengths</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<ul>
<li><span data-contrast="auto">Exceptional Observability</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Agent Debugging</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Root Cause Analysis</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Production Monitoring</span><span data-ccp-props="{}"> </span></li>
</ul>
<h3><span data-contrast="none">Limitations</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<ul>
<li><span data-contrast="auto">Fewer Evaluation Metrics</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Advanced Features May Require Paid Plans</span><span data-ccp-props="{}"> </span></li>
</ul>
<h2 data-ccp-border-top="2px solid #000000" data-ccp-padding-top="0px"><span data-contrast="none">Head-to-Head Comparison</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:0,&quot;335572071&quot;:12,&quot;335572072&quot;:0,&quot;335572073&quot;:4278190080,&quot;469789798&quot;:&quot;single&quot;}"> </span></h2>
<table data-tablestyle="MsoTable15Grid4Accent1" data-tablelook="1184">
<tbody>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Feature</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><b><span data-contrast="auto">DeepEval</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><b><span data-contrast="auto">Ragas</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><b><span data-contrast="auto">LangSmith</span></b><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">LLM Evaluation</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">RAG Evaluation</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Hallucination Detection</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Faithfulness</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Agent Testing</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Tracing</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Monitoring</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">QA Friendly</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span data-ccp-props="{}"> </span></td>
</tr>
</tbody>
</table>
<h2><span data-contrast="none">Which Tool Should QA Teams Choose?</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}"> </span></h2>
<h3><span data-contrast="none">If You&#8217;re Testing LLM Applications</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<h3><span data-contrast="none">       &gt; Choose DeepEval</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<p><span data-contrast="auto">Best for:</span><span data-ccp-props="{}"> </span></p>
<ul>
<li><span data-contrast="auto">Prompt Regression Testing</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Hallucination Detection</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Automated Quality Validation</span><span data-ccp-props="{}"> </span></li>
</ul>
<h2><span data-contrast="none">If You&#8217;re Testing RAG Systems</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<h3><span data-contrast="none">     &gt; Choose Ragas</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<p><span data-contrast="auto">Best for:</span><span data-ccp-props="{}"> </span></p>
<ul>
<li><span data-contrast="auto">Retrieval Evaluation</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Knowledge Assistants</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Enterprise Search Solutions</span><span data-ccp-props="{}"> </span></li>
</ul>
<h2><span data-contrast="none">If You&#8217;re Testing AI Agents</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<h3><span data-contrast="none">    &gt; Choose LangSmith</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<p><span data-contrast="auto">Best for:</span><span data-ccp-props="{}"> </span></p>
<ul>
<li><span data-contrast="auto">Agent Debugging</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Tool Call Visibility</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Production Monitoring</span><span data-ccp-props="{}"> </span></li>
</ul>
<h2><span data-contrast="none">Enterprise Recommendation</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}"> </span></h2>
<p><span data-contrast="auto">The most mature organizations use all three together.</span><span data-ccp-props="{}"> </span></p>
<p><img loading="lazy" decoding="async" data-attachment-id="392080" data-permalink="https://blogs.perficient.com/deepeval-vs-ragas-vs-langsmith/phase9/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase9.jpg" data-orig-size="709,213" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Phase9" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/phase9.jpg" class="alignnone wp-image-392080 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/phase9.jpg" alt="Phase9" width="709" height="213" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/phase9.jpg 709w, https://blogs.perficient.com/wp-content/uploads/2026/07/phase9-300x90.jpg 300w" sizes="auto, (max-width: 709px) 100vw, 709px" /></p>
<h2><span data-contrast="none">Traditional QA vs GenAI QA</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}"> </span></h2>
<table data-tablestyle="MsoTable15Grid4Accent1" data-tablelook="1184">
<tbody>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Traditional QA</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><b><span data-contrast="auto">GenAI QA</span></b><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Test Cases</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Evaluation Datasets</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Assertions</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Evaluation Metrics</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Regression Suite</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Prompt Regression Suite</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Defects</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Hallucinations</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Application Logs</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Agent Traces</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="4369"><b><span data-contrast="auto">Test Automation Framework</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="4369"><span data-contrast="auto">Evaluation Pipeline</span><span data-ccp-props="{}"> </span></td>
</tr>
</tbody>
</table>
<h2 data-ccp-border-top="2px solid #000000" data-ccp-padding-top="0px"><span data-contrast="none">The Future of AI Testing</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:0,&quot;335572071&quot;:12,&quot;335572072&quot;:0,&quot;335572073&quot;:4278190080,&quot;469789798&quot;:&quot;single&quot;}"> </span></h2>
<p><span data-contrast="auto">Over the next 3 years, we are likely to see:</span><span data-ccp-props="{}"> </span></p>
<ul>
<li><span data-contrast="auto">Autonomous testing agents</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Continuous LLM evaluation</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Synthetic evaluation dataset generation</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">AI governance platforms</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Agent observability frameworks</span><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Dedicated AI quality engineering teams</span><span data-ccp-props="{}"> </span></li>
</ul>
<p><span data-contrast="auto">The future of testing is moving beyond software validation to intelligence validation.</span><span data-ccp-props="{&quot;335559685&quot;:180,&quot;335572083&quot;:18,&quot;335572084&quot;:4,&quot;335572085&quot;:10921638,&quot;469789810&quot;:&quot;single&quot;}"> </span></p>
<h2 data-ccp-border-top="2px solid #000000" data-ccp-padding-top="0px"><span data-contrast="none">Recommended Learning Resources</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:0,&quot;335572071&quot;:12,&quot;335572072&quot;:0,&quot;335572073&quot;:4278190080,&quot;469789798&quot;:&quot;single&quot;}"> </span></h2>
<h2><span data-contrast="none">Official Documentation</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<ul>
<li><span data-contrast="auto">DeepEval Documentation: </span><a href="https://deepeval.com/docs"><span data-contrast="none">https://deepeval.com/docs</span></a><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Ragas Documentation: </span><a href="https://docs.ragas.io/en/latest/"><span data-contrast="none">https://docs.ragas.io/en/latest/</span></a><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">LangSmith Documentation: </span><a href="https://docs.smith.langchain.com/"><span data-contrast="none">https://docs.smith.langchain.com/</span></a><span data-ccp-props="{}"> </span></li>
</ul>
<h2><span data-contrast="none">YouTube Tutorials (Hands-on Use Cases)</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<h3><span data-contrast="none">DeepEval</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<ul>
<li><span data-contrast="auto">RAG Evaluation Using DeepEval &amp; Confident AI (Full Tutorial) – </span><a href="https://www.youtube.com/watch?v=402EyLS59ho"><span data-contrast="none">https://www.youtube.com/watch?v=402EyLS59ho</span></a><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">DeepEval Tutorial: Unit Testing LLM AI Applications – </span><a href="https://www.youtube.com/watch?v=ZHiJ12MhfQ8"><span data-contrast="none">https://www.youtube.com/watch?v=ZHiJ12MhfQ8</span></a><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">Evaluate LLMs in Python with DeepEval – </span><a href="https://www.youtube.com/watch?v=HAoKJT3af7Y"><span data-contrast="none">https://www.youtube.com/watch?v=HAoKJT3af7Y</span></a><span data-ccp-props="{}"> </span></li>
</ul>
<h3><span data-contrast="none">Ragas</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<ul>
<li><span data-contrast="auto">RAG Evaluation Metrics Tutorial using RAGAS – </span><a href="https://www.youtube.com/watch?v=f8zMrSysnjY"><span data-contrast="none">https://www.youtube.com/watch?v=f8zMrSysnjY</span></a><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">How to Evaluate RAG Models Using RAGAS (Step-by-Step) – </span><a href="https://www.youtube.com/watch?v=ahDqIQb3\_8w"><span data-contrast="none">https://www.youtube.com/watch?v=ahDqIQb3\_8w</span></a><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">RAGAS: Evaluate a RAG Application Like a Pro – </span><a href="https://www.youtube.com/watch?v=5fp6e5nhJRk"><span data-contrast="none">https://www.youtube.com/watch?v=5fp6e5nhJRk</span></a><span data-ccp-props="{}"> </span></li>
</ul>
<h3><span data-contrast="none">LangSmith</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h3>
<ul>
<li><span data-contrast="auto">Getting Started with LangSmith: Tracing – </span><a href="https://www.youtube.com/watch?v=fA9b4D8IsPQ"><span data-contrast="none">https://www.youtube.com/watch?v=fA9b4D8IsPQ</span></a><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">LangSmith Tutorial: Observability and Tracing for AI Agents – </span><a href="https://www.youtube.com/watch?v=EdzAH5\_PppM"><span data-contrast="none">https://www.youtube.com/watch?v=EdzAH5\_PppM</span></a><span data-ccp-props="{}"> </span></li>
<li><span data-contrast="auto">LangSmith + LangChain: Full AI Agent Tracing &amp; Debugging Tutorial – </span><a href="https://www.youtube.com/watch?v=DmEEZ2TiKfY"><span data-contrast="none">https://www.youtube.com/watch?v=DmEEZ2TiKfY</span></a><span data-ccp-props="{}"> </span></li>
</ul>
<h2><span data-contrast="none">Final Thoughts</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:360,&quot;335559739&quot;:80}"> </span></h2>
<p><span data-contrast="auto">Generative AI introduces a new set of different quality considerations.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">Traditional testing frameworks remain important, but they are no longer sufficient on their own:</span><span data-ccp-props="{}"> </span></p>
<ul>
<li><b><span data-contrast="auto">DeepEval</span></b><span data-contrast="auto"> helps validate LLM quality.</span><span data-ccp-props="{}"> </span></li>
<li><b><span data-contrast="auto">Ragas</span></b><span data-contrast="auto"> ensures retrieval systems work correctly.</span><span data-ccp-props="{}"> </span></li>
<li><b><span data-contrast="auto">LangSmith</span></b><span data-contrast="auto"> provides visibility into complex AI workflows.</span><span data-ccp-props="{}"> </span></li>
</ul>
<p><span data-contrast="auto">For modern QA engineers, understanding these platforms is rapidly becoming a core skill rather than a nice-to-have capability.</span><span data-ccp-props="{}"> </span></p>
<p>The post <a href="https://blogs.perficient.com/deepeval-vs-ragas-vs-langsmith/">DeepEval vs Ragas vs LangSmith</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/07/iStock-1180547354-1024x561.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">392054</post-id>	</item>
	</channel>
</rss><!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin


Served from: blogs.perficient.com @ 2026-08-14 14:06:56 by W3 Total Cache
-->