<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: IBM Developer</title>
    <description>The latest articles on Forem by IBM Developer (@ibmdeveloper).</description>
    <link>https://forem.com/ibmdeveloper</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F532%2F55bb82ef-84af-4295-b4a9-6731d5b83e1d.png</url>
      <title>Forem: IBM Developer</title>
      <link>https://forem.com/ibmdeveloper</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ibmdeveloper"/>
    <language>en</language>
    <item>
      <title>Java 25: What's new for developers?</title>
      <dc:creator>IBM Developer</dc:creator>
      <pubDate>Fri, 10 Oct 2025 12:58:08 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/java-25-whats-new-for-developers-bjf</link>
      <guid>https://forem.com/ibmdeveloper/java-25-whats-new-for-developers-bjf</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;This article was originally published on &lt;a href="https://developer.ibm.com/articles/java-whats-new-java25/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt; by Alex Soto Bueno.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Java 25 was released on September 16, 2025. This version is important because it is an LTS (Long Term Support) version, the next one after Java 21. As an LTS release, it will receive a minimum of five years of support and updates/bug fixes.&lt;/p&gt;

&lt;p&gt;This new version contains multiple enhancements, both for devs and for the runtime execution.&lt;/p&gt;

&lt;p&gt;In this article, we'll focus on stable and preview features for developers. We won't cover incubator features as they will likely change in future releases. (The Vector API remains in the incubator stage for the tenth time, waiting for the release of Project Valhalla.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Major features and enhancements
&lt;/h2&gt;

&lt;p&gt;These are some of the most significant additions, changes, and previews in Java 25:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JEP 507: Primitive Types in Patterns, &lt;code&gt;instanceof&lt;/code&gt;, and &lt;code&gt;switch&lt;/code&gt; (Third Preview)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;You can use  &lt;em&gt;primitive types&lt;/em&gt; in pattern matching, &lt;code&gt;instanceof&lt;/code&gt;, and &lt;code&gt;switch&lt;/code&gt; constructs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JEP 511: Module Import Declarations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A module import lets you access every class from the packages that the module exports.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JEP 512: Compact Source Files and Instance Main Methods&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;You can write a &lt;code&gt;main&lt;/code&gt; method without needing to create a class.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JEP 513: Flexible Constructor Bodies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;super&lt;/code&gt; and &lt;code&gt;this&lt;/code&gt; statements do not have to be the first statement in a constructor. This is better, for example, for the argument validation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scoped Values (JEP 506)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A simpler way to share immutable variables across a thread and its child threads.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Key Derivation Function API (JEP 510)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Provides standard APIs in the JDK for deriving cryptographic keys (PBKDF2, Argon2, etc.).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JEP 519: Compact Object Headers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Reduces the size of object headers (metadata per object) to make objects use less memory.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JEP 521: Generational Shenandoah Garbage Collector&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Makes the Shenandoah GC use a generational model (young/old generations), improving GC performance especially in startup or mixed-allocation programs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JFR Enhancements&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Improvements to JDK Flight Recorder, like CPU-time profiling, cooperative sampling, method timing, and tracing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stable Values (JEP 502, Preview)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Provides a mechanism to define values that are set once and then treated as constants by the JVM, allowing optimizations beyond what final fields offer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PEM Encodings for Cryptographic Objects (JEP 470, Preview)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Supports encoding and decoding cryptographic keys, certificates in PEM format.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  New stable features for developers
&lt;/h2&gt;

&lt;p&gt;These include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Module import declarations&lt;/li&gt;
&lt;li&gt;Flexible constructor bodies&lt;/li&gt;
&lt;li&gt;Scoped values&lt;/li&gt;
&lt;li&gt;Key derivation function (KDF) API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Continue reading on &lt;a href="https://developer.ibm.com/articles/java-whats-new-java25/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt; to learn about the stable and preview features in this new LTS release of Java...&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>java</category>
    </item>
    <item>
      <title>Build context-aware AI apps using MCP</title>
      <dc:creator>IBM Developer</dc:creator>
      <pubDate>Wed, 23 Jul 2025 10:46:32 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/build-context-aware-ai-apps-using-mcp-3mhg</link>
      <guid>https://forem.com/ibmdeveloper/build-context-aware-ai-apps-using-mcp-3mhg</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;This tutorial was originally published on &lt;a href="https://developer.ibm.com/tutorials/mcp-watsonx/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt;.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Large language models (LLMs) have transformed how developers build applications, but they face a fundamental limitation: they operate in isolation from the data and tools that make applications truly useful. Whether it's accessing your company's database, reading files from your filesystem, or connecting to APIs, LLMs need a standardized way to interact with external systems.&lt;/p&gt;

&lt;p&gt;The Model Context Protocol (MCP) addresses these limitations by providing a standardization layer for AI agents to be context-aware while integrating with the data and tools. Learn more about what MCP is, its client-server architecture components, and its real-world benefits in this “&lt;a href="https://www.ibm.com/think/topics/model-context-protocol" rel="noopener noreferrer"&gt;What is MCP?&lt;/a&gt;” article or in the &lt;a href="https://modelcontextprotocol.io/introduction" rel="noopener noreferrer nofollow"&gt;MCP docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The following figure shows the typical MCP architecture, with MCP hosts, MCP clients, MCP servers, and your own data and tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa22ili0211qbtn3qn63u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa22ili0211qbtn3qn63u.png" alt=" " width="800" height="621"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this comprehensive tutorial, we'll explore MCP and learn how to build a production-ready integration with IBM watsonx.ai, demonstrating how to create AI applications that can seamlessly connect to enterprise data and services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Continue reading on &lt;a href="https://developer.ibm.com/tutorials/mcp-watsonx/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt; to learn how to build context-aware AI applications using MCP with Granite models...&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>llm</category>
      <category>genai</category>
    </item>
    <item>
      <title>Build a RAG-powered assistant</title>
      <dc:creator>IBM Developer</dc:creator>
      <pubDate>Wed, 16 Jul 2025 11:49:09 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/build-a-rag-powered-assistant-4h4h</link>
      <guid>https://forem.com/ibmdeveloper/build-a-rag-powered-assistant-4h4h</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;This tutorial was originally published on &lt;a href="https://developer.ibm.com/tutorials/build-rag-assistant-md-documentation/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt;.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine you’re heads-down focused in a project, searching a GitHub repository’s Markdown files for that one small unit test command or an elusive detail about configuring an API. You’re flipping between READMEs, wikis, and scattered “docs” folders, losing time and patience. What if there was a way to just &lt;em&gt;ask&lt;/em&gt; your documentation? "How do I run a single unit test from the suite?" or "What’s the retry policy for the endpoint?" and get a precise, context-aware answer in seconds? This is where, the technology of Retrieval-Augmented Generation (RAG) can help make your documentation conversational.&lt;/p&gt;

&lt;p&gt;In this tutorial, we’ll build an intelligent documentation assistant that lets you chat with your project’s Markdown documentation (those &lt;code&gt;.md&lt;/code&gt; files you see in GitHub, like READMEs). Using JavaScript, and a tool called &lt;a href="https://www.langchain.com/" rel="noopener noreferrer"&gt;LangChain&lt;/a&gt;, and the IBM &lt;a href="https://www.ibm.com/granite" rel="noopener noreferrer"&gt;Granite model&lt;/a&gt; via &lt;a href="https://ollama.com/" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;, we’ll create a &lt;a href="https://en.wikipedia.org/wiki/Command-line_interface" rel="noopener noreferrer"&gt;command-line interface (CLI)&lt;/a&gt; that connects to your GitHub repository, pulls in your documentation, and answers your questions in plain language. It’s like having a super-seasoned teammate who knows every word of your project’s docs, akin to a pair programming buddy in your day to day workflows.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Why Markdown?&lt;/em&gt; Markdown is the lingua franca of developer documentation. It is lightweight, packed with critical info, readable, and ubiquitous in GitHub repos. They are the go-to format for project documentation on GitHub. Our assistant makes them interactive, saving you time and frustration. It’s the perfect starting point for a RAG-powered assistant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Here’s what we’re building
&lt;/h2&gt;

&lt;p&gt;We’re creating a command-line assistant that lets you chat with any markdown file instantly turning your documentation into an interactive, AI-powered resource.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ask Questions, Get Answers&lt;/strong&gt;: Provide a public URL to a markdown file (like a README or guide from GitHub). The assistant downloads and processes it, so you can ask questions about its content in natural language.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI-Powered, Contextual Responses&lt;/strong&gt;: When you ask a question, the assistant searches the document for the most relevant sections and uses a local large language model (IBM Granite 3.3 via Ollama) to generate accurate, context-aware answers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No Complex Setup&lt;/strong&gt;: There’s no need to clone repositories, manage tokens, or set up databases. Just paste a markdown file URL and start chatting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Proof of Concept&lt;/strong&gt;: This demo focuses on a single markdown file to showcase the Retrieval-Augmented Generation (RAG) workflow. The design is simple, but the approach can be extended to entire documentation sites, web chat interfaces, or large-scale document search.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Continue reading on &lt;a href="https://developer.ibm.com/tutorials/build-rag-assistant-md-documentation/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt; to learn how to build a RAG-powered Markdown documentation assistant...&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>rag</category>
      <category>genai</category>
    </item>
    <item>
      <title>Build a RAG-based AI assistant with Quarkus and LangChain</title>
      <dc:creator>IBM Developer</dc:creator>
      <pubDate>Thu, 10 Jul 2025 17:16:28 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/build-a-rag-based-ai-assistant-with-quarkus-and-langchain-2mom</link>
      <guid>https://forem.com/ibmdeveloper/build-a-rag-based-ai-assistant-with-quarkus-and-langchain-2mom</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;This tutorial was originally published on &lt;a href="https://developer.ibm.com/tutorials/build-ai-assistant-quarkus-langchain/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt;.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enterprise Java developers are familiar with building robust, scalable applications using frameworks like Spring Boot. However, integrating AI capabilities into these applications often involves complex orchestration, high memory usage, and slow startup times.&lt;/p&gt;

&lt;p&gt;In this tutorial, you'll discover how Quarkus combined with LangChain4j provides a seamless way to build AI-powered applications that start in milliseconds and consume minimal resources. &lt;a href="https://quarkus.io/" rel="noopener noreferrer nofollow"&gt;Quarkus&lt;/a&gt; is a Kubernetes-native Java stack tailored for &lt;a href="https://www.graalvm.org/" rel="noopener noreferrer nofollow"&gt;GraalVM&lt;/a&gt; and &lt;a href="https://openjdk.org/groups/hotspot/" rel="noopener noreferrer nofollow"&gt;OpenJDK HotSpot&lt;/a&gt;. Quarkus offers incredibly fast boot times, low RSS memory consumption, and a fantastic developer experience with features like live coding.&lt;/p&gt;

&lt;p&gt;In this tutorial, you'll build a smart document assistant that can ingest PDF documents, create embeddings, and answer questions about the content using retrieval augmented generation (RAG). The application will demonstrate enterprise-grade features like dependency injection, health checks, metrics, and hot reload development, all while integrating cutting-edge AI capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  RAG and why you need it
&lt;/h2&gt;

&lt;p&gt;The retrieval augmented generation (RAG) pattern is a way to extend the knowledge of an LLM used in your applications. While models are pre-trained on large data sets, they have static and general knowledge with a specific knowledge cut-off date. They don't "know" anything beyond that date and also do not contain any company or domain specific data you might want to use in your applications. The RAG pattern allows you to infuse knowledge via the context window of your models and bridges this gab.&lt;/p&gt;

&lt;p&gt;There's some steps that need to happen. First, the domain specific knowledge from documents (txt, PDF, and so on) is parsed and tokenized with a so called embedding generation model. The generated vectors are stored in a vector database. When a user queries the LLM, the vector store is searched with a similarity algorithm and relevant content is added as context to the user prompt before it is passed on to the LLM. The LLM then generates the answer based on the foundational knowledge and the additional context which was augumented from the vector search. A high level overview is shown in the following figure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffljhgu7j11d2pgw8hm84.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffljhgu7j11d2pgw8hm84.png" alt=" " width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning objectives
&lt;/h2&gt;

&lt;p&gt;By the end of this tutorial, you'll be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set up a Quarkus project with LangChain4j for AI integration&lt;/li&gt;
&lt;li&gt;Create declarative AI services using CDI and annotations&lt;/li&gt;
&lt;li&gt;Implement document ingestion and vector embeddings&lt;/li&gt;
&lt;li&gt;Build a RAG (Retrieval Augmented Generation) question-answering system&lt;/li&gt;
&lt;li&gt;Experience Quarkus development mode with instant hot reload&lt;/li&gt;
&lt;li&gt;Deploy as a native executable with sub-second startup times&lt;/li&gt;
&lt;li&gt;Monitor AI operations with built-in observability features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Continue reading on &lt;a href="https://developer.ibm.com/tutorials/build-ai-assistant-quarkus-langchain/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt; to learn how to build your AI-powered document assistant...&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>quarkus</category>
      <category>langchain</category>
      <category>ai</category>
      <category>cloudnative</category>
    </item>
    <item>
      <title>Build Mainframe skills faster with watsonx Assistant for Z</title>
      <dc:creator>IBM Developer</dc:creator>
      <pubDate>Mon, 07 Jul 2025 08:38:07 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/build-mainframe-skills-faster-with-watsonx-assistant-for-z-3pbm</link>
      <guid>https://forem.com/ibmdeveloper/build-mainframe-skills-faster-with-watsonx-assistant-for-z-3pbm</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;This article was originally published on &lt;a href="https://developer.ibm.com/articles/awb-build-mainframe-skills-watsonx-assistant-z/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt; by Sethulekshmi K&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mainframes are known for handling large workloads with high scalability, reliability, and security. They continue to be essential for many industries, including most of the world’s top banks, airlines, and retailers.&lt;/p&gt;

&lt;p&gt;Over the past 20 years, Mainframes have evolved from legacy systems to modern platforms. Today, they support containerization, DevOps, artificial intelligence, machine learning, and generative AI. The latest IBM Z processors take this further by enabling fast, low-latency generative AI directly on the Mainframe.&lt;/p&gt;

&lt;p&gt;Many companies face a shortage of Mainframe experts. Experienced workers are retiring, new talent is hard to find, and Mainframes require specialized skills. The key question is: how can organizations attract new talent and pass on knowledge before it’s lost?&lt;/p&gt;

&lt;p&gt;According to Gartner, using generative AI with Mainframe systems can help address the skills gap. This creates an important opportunity for IBM to offer a solution.&lt;/p&gt;

&lt;p&gt;IBM watsonx Assistant for Z is a generative AI tool designed to help solve Mainframe challenges. This article explains what it can do and how it helps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simplify Mainframe management with IBM watsonx Assistant for Z
&lt;/h2&gt;

&lt;p&gt;IBM watsonx Assistant for Z is a chatbot designed to make Mainframe tasks easier. It provides expert guidance, automates complex steps, and helps both new and experienced IBM Z users.&lt;/p&gt;

&lt;p&gt;The assistant speeds up learning, answers technical questions, and can be customized with your company’s own information.&lt;/p&gt;

&lt;h3&gt;
  
  
  What makes it different from other Chatbots?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Smarter conversations with AI
&lt;/h3&gt;

&lt;p&gt;watsonx Assistant for Z gives fast, accurate answers by using both IBM Z documentation and your company’s own knowledge. It uses &lt;a href="https://www.ibm.com/think/topics/retrieval-augmented-generation" rel="noopener noreferrer"&gt;retrieval augmented generation (RAG)&lt;/a&gt; to pull information from trusted sources, so responses are reliable and relevant.&lt;/p&gt;

&lt;p&gt;The system includes content from over 200 IBM Z products, including IBM Redbooks and technical papers. You can also add your own documents, such as internal guides and best practices, to customize the answers for your team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9m0ej9z5mt45sbde81m5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9m0ej9z5mt45sbde81m5.png" alt="Conversational AI" width="800" height="603"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The assistant uses the granite-3-8b-instruct language model, which is trained on a large and carefully selected dataset. IBM follows strict rules for data quality, filtering out misleading content to improve accuracy and reduce errors in responses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connects with your tools and systems
&lt;/h3&gt;

&lt;p&gt;watsonx Assistant for Z works with many platforms that support Open API, such as Ansible, AIOps tools, z/OS Management Facility (z/OSMF), and ServiceNow. You can follow the assistant’s suggestions and run tasks directly from the chat without needing deep Mainframe knowledge.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Continue reading on &lt;a href="https://developer.ibm.com/articles/awb-build-mainframe-skills-watsonx-assistant-z/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt; to learn more about customizing watsonx Assistant for Z for your team, benefits and use cases, and how IBM’s CIO office used watsonx Assistant for Z to improve Mainframe performance and support new users.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>mainframe</category>
      <category>ai</category>
      <category>developertools</category>
      <category>automation</category>
    </item>
    <item>
      <title>Why sharding is essential to fine-tuning LLMs</title>
      <dc:creator>IBM Developer</dc:creator>
      <pubDate>Wed, 02 Jul 2025 14:35:35 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/why-sharding-is-essential-to-fine-tuning-llms-4he4</link>
      <guid>https://forem.com/ibmdeveloper/why-sharding-is-essential-to-fine-tuning-llms-4he4</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;This article was originally published on &lt;a href="https://developer.ibm.com/articles/llms-sharding/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt;.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Training and fine-tuning large language models (LLMs) is becoming a central requirement for modern AI applications. As these models grow in size—from billions to hundreds of billions of parameters—the demands on computational resources have increased dramatically. Fine-tuning such models on a single GPU is no longer realistic due to memory limitations and training inefficiencies.  &lt;/p&gt;

&lt;p&gt;Sharding is the process of splitting a model’s data or components across multiple devices—such as GPUs or nodes—so that the training workload is distributed. By dividing the model’s parameters, gradients, and optimizer states into smaller “shards,” each device only needs to manage a fraction of the total, making it possible to train models that would not otherwise fit in memory. Sharding also enables parallel training, which speeds up the process and improves scalability.&lt;/p&gt;

&lt;p&gt;In this article, we explore the importance of sharding for scalable LLM fine-tuning, describe various sharding strategies, and provide practical guidance based on industry-standard tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why training and fine-tuning LLMs require sharding
&lt;/h2&gt;

&lt;p&gt;Training large language models (LLMs) involves handling substantial amounts of data and computation during each pass through the network. These passes are generally referred to as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Forward pass&lt;/strong&gt;: When data flows through the model to generate predictions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backward pass&lt;/strong&gt;: When the model computes how wrong the predictions were (loss) and adjusts internal weights accordingly through backpropagation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each training iteration requires tracking and updating several core components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model parameters&lt;/strong&gt;: These are the &lt;em&gt;learnable weights&lt;/em&gt; of the neural network that determine the model’s behaviour. They are updated during training to minimize prediction errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gradients&lt;/strong&gt;: These represent the &lt;em&gt;rate of change of the loss with respect to each model parameter&lt;/em&gt;. Gradients are computed during the backward pass and guide how the model updates its parameters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimizer states&lt;/strong&gt;: These are &lt;em&gt;internal values maintained by optimization algorithms&lt;/em&gt; like Adam or SGD. They help fine-tune how each parameter gets updated based on the gradient and previous updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While inference can be managed on a single GPU using techniques like offloading or quantization, training requires all three of these components to reside in GPU memory simultaneously. This can triple the memory requirement compared to inference. Without sharding, even relatively modest models (7B–13B parameters) can exceed the capabilities of high-end GPUs.&lt;/p&gt;

&lt;p&gt;Moreover, sharding enables:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Larger batch sizes, improving convergence and model generalization.
&lt;/li&gt;
&lt;li&gt;Distributed compute workloads, reducing training time.
&lt;/li&gt;
&lt;li&gt;Better scalability across infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Continue reading on &lt;a href="https://developer.ibm.com/articles/llms-sharding/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt; to see a DeepSpeed ZeRO example of scalable fine-tuning...&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>genai</category>
    </item>
    <item>
      <title>How ColBERT works</title>
      <dc:creator>IBM Developer</dc:creator>
      <pubDate>Wed, 02 Jul 2025 14:30:57 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/how-colbert-works-332f</link>
      <guid>https://forem.com/ibmdeveloper/how-colbert-works-332f</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;This article was originally published on &lt;a href="https://developer.ibm.com/articles/how-colbert-works/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt;.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;re-ranker&lt;/strong&gt; is a model or system that is used in information retrieval to reorder or refine a list of retrieved documents or items based on their relevance to a given query.&lt;/p&gt;

&lt;p&gt;In a typical retrieval pipeline, the process consists of two stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Initial retrieval&lt;/strong&gt;: A lightweight retriever (for example, BM25, or Best Matching 25, is a dense retriever) that fetches a large set of candidate documents quickly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-ranking&lt;/strong&gt;: A more sophisticated and computationally expensive model that reorders the retrieved candidates to improve relevance and accuracy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;ColBERT (Contextualized Late Interaction over BERT)&lt;/strong&gt; is a retrieval model that is designed to strike a balance between the efficiency of traditional methods like BM25 and the accuracy of deep learning models like BERT, an open source deep learning model used for natural language understanding.&lt;/p&gt;

&lt;p&gt;The ColBERT re-ranker is especially effective in retrieval-augmented generation (RAG) pipelines, where precise and contextually rich document retrieval directly impacts the quality of generated answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of re-rankers
&lt;/h2&gt;

&lt;p&gt;Here are different types of re-rankers and their features.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Strengths&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Weaknesses&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Example use cases&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Traditional&lt;/td&gt;
&lt;td&gt;Fast, interpretable, lightweight&lt;/td&gt;
&lt;td&gt;Lack semantic understanding&lt;/td&gt;
&lt;td&gt;Basic search engines, initial filtering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-encoders&lt;/td&gt;
&lt;td&gt;High accuracy, deep interaction&lt;/td&gt;
&lt;td&gt;Computationally expensive&lt;/td&gt;
&lt;td&gt;Document ranking for QA, passage retrieval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bi-encoders&lt;/td&gt;
&lt;td&gt;Efficient, scalable&lt;/td&gt;
&lt;td&gt;Less accurate for fine-grained queries&lt;/td&gt;
&lt;td&gt;Large-scale retrieval, first-pass ranking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Late Interaction Models&lt;/td&gt;
&lt;td&gt;Fine-grained, efficient&lt;/td&gt;
&lt;td&gt;Moderate computational cost&lt;/td&gt;
&lt;td&gt;RAG systems, conversational AI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hybrid&lt;/td&gt;
&lt;td&gt;Best of both worlds&lt;/td&gt;
&lt;td&gt;Integration complexity&lt;/td&gt;
&lt;td&gt;Enterprise search, hybrid RAG systems&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;ColBERT re-ranker&lt;/strong&gt; employs late interaction for scoring, which allows for efficient yet effective ranking of documents.&lt;/p&gt;

&lt;h2&gt;
  
  
  How ColBERT works
&lt;/h2&gt;

&lt;p&gt;Unlike standard transformer-based retrievers, which calculate relevance scores by concatenating a query and a document into a single sequence, ColBERT uses late interaction. This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The query and document embeddings are computed independently.&lt;/li&gt;
&lt;li&gt;The interaction happens later, during scoring, rather than during encoding.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach allows pre-computation of document embeddings, making retrieval much faster without significant loss in accuracy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Continue reading on &lt;a href="https://developer.ibm.com/articles/how-colbert-works/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt;...&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>rag</category>
      <category>llm</category>
      <category>nlp</category>
      <category>deeplearning</category>
    </item>
    <item>
      <title>Why serving large language models is hard ... and how vLLM and KServe can help</title>
      <dc:creator>IBM Developer</dc:creator>
      <pubDate>Mon, 23 Jun 2025 13:53:52 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/why-serving-large-language-models-is-hard-and-how-vllm-and-kserve-can-help-pd6</link>
      <guid>https://forem.com/ibmdeveloper/why-serving-large-language-models-is-hard-and-how-vllm-and-kserve-can-help-pd6</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;This article was originally published on &lt;a href="https://developer.ibm.com/articles/llms-inference-scaling-vllm-kserve/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt;.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My title "Fast inference and furious scaling," obviously inspired by the &lt;a href="https://en.wikipedia.org/wiki/Fast_%26_Furious" rel="noopener noreferrer"&gt;movies&lt;/a&gt;, is not just catchy but also captures the pace of generative AI technology. With new optimization techniques, tools emerging daily, and not enough "good first issues," generative AI is a rapidly evolving landscape that often leaves beginners struggling to find their footing.&lt;/p&gt;

&lt;p&gt;In this article, beginners who are new to the world of LLM inferencing and serving can learn about why it's a complicated thing to do and gain a clearer idea of how to get started using two open source tools: &lt;a href="https://docs.vllm.ai/en/latest/" rel="noopener noreferrer"&gt;vLLM&lt;/a&gt; and &lt;a href="https://kserve.github.io/website/latest/" rel="noopener noreferrer"&gt;KServe&lt;/a&gt;. Instead of bogging down in technical details, the focus of this article is on the 'why' and 'how' of LLM inferencing and serving to give a background context for those who want to participate, while including resources for further deep-diving linked along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does it mean to "serve" an LLM?
&lt;/h2&gt;

&lt;p&gt;Model serving boils down to making a pre-trained model useable. When you try a cloud-based service like ChatGPT, models have been made available for you to send prompts (that is, inference requests) and receive a response (that is, output). Those models are being served for you to consume. Behind the scenes, the model has been made available through an API.&lt;/p&gt;

&lt;p&gt;Sounds simple, right? Well, not quite.&lt;/p&gt;

&lt;p&gt;Serving LLMs isn't just about wrapping them in an API. Just like any memory-intensive software program, large models bring performance trade-offs, infrastructure constraints, and cost considerations.&lt;/p&gt;

&lt;p&gt;Here are just a few reasons that model serving is not simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Massive LLMs require massive resources&lt;/li&gt;
&lt;li&gt;LLMs are complex&lt;/li&gt;
&lt;li&gt;Scaling is hard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Continue reading on &lt;a href="https://developer.ibm.com/articles/llms-inference-scaling-vllm-kserve/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt;...&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>llm</category>
    </item>
    <item>
      <title>Optimize your JVM using memory management and garbage collection</title>
      <dc:creator>IBM Developer</dc:creator>
      <pubDate>Thu, 19 Jun 2025 17:47:32 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/optimize-your-jvm-using-memory-management-and-garbage-collection-88m</link>
      <guid>https://forem.com/ibmdeveloper/optimize-your-jvm-using-memory-management-and-garbage-collection-88m</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;This article was originally published on &lt;a href="https://developer.ibm.com/articles/j-performance-tuning-jvm/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt;.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Java Virtual Machine (JVM) is the engine that runs your Java application. It handles memory allocation, garbage collection (GC), thread management, and JIT compilation.&lt;/p&gt;

&lt;p&gt;VM performance tuning is the process of optimizing the Java Virtual Machine (JVM) configuration and behavior to improve the performance, scalability, and reliability of Java applications. If your JVM is not configured properly, you might experience high latency, out of memory errors, CPU spikes, slow response times, or application crashes.&lt;/p&gt;

&lt;p&gt;In this article, we’ll review two key performance tuning techniques: memory management and garbage collection. By optimizing your JVM with these two techniques, you will improve the performance, scalability, and reliability of your Java applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory management in JVMs
&lt;/h2&gt;

&lt;p&gt;In this article, we will explore these JVM flags:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;-Xmx: The maximum heap size, which you use to limit how much memory is used.&lt;/li&gt;
&lt;li&gt;-Xms: The initial heap size, which you use to pre-allocate memory to improve performance.&lt;/li&gt;
&lt;li&gt;-Xss: The thread stack size, which you use to control how much memory each thread can use.&lt;/li&gt;
&lt;li&gt;-XX or -Xlog:gc*:file: The automatic process of reclaiming memory by removing unused or unreachable objects to ensure efficient memory management and prevent leaks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Maximum heap size (-Xmx)
&lt;/h3&gt;

&lt;p&gt;The -Xmx flag sets the maximum heap memory that the JVM is allowed to use. The JVM will not allocate more heap memory that the value specified.&lt;/p&gt;

&lt;p&gt;For example, if you use -Xmx2G, then the JVM can use up to 2 gigabytes of heap memory.&lt;/p&gt;

&lt;p&gt;If your application needs more heap memory than what is specified during runtime, an OutOfMemoryError exception is thrown.&lt;/p&gt;

&lt;h3&gt;
  
  
  Initial heap size (-Xms)
&lt;/h3&gt;

&lt;p&gt;The -Xms flag sets the initial heap memory that is allocated when the JVM starts. By setting the initial heap memory, you help prevent dynamic memory allocation during early runtime.&lt;/p&gt;

&lt;p&gt;For example, if you specify -Xms512M, then the JVM starts with 512 megabytes of heap memory.&lt;/p&gt;

&lt;p&gt;To avoid heap resizing and improve performance, you can set -Xms to the same value that you set -Xmx.&lt;/p&gt;

&lt;h3&gt;
  
  
  Thread stack size (-Xss)
&lt;/h3&gt;

&lt;p&gt;The -Xss flag sets the stack memory size for each thread. Each thread has its own stack that is used for method calls and local variables.&lt;/p&gt;

&lt;p&gt;For example, if you specify -Xss1M, then each thread will be given 1 megabyte of stack memory.&lt;/p&gt;

&lt;p&gt;If you specify a size that is too small, then a StackOverflowError exception is thrown. If you specify a size that is too large, then you have fewer threads available due to high memory usage per thread.&lt;/p&gt;

&lt;h3&gt;
  
  
  Garbage collection (-XX or -Xlog:gc)
&lt;/h3&gt;

&lt;p&gt;Garbage Collection (GC) in Java is the process by which the Java Virtual Machine (JVM) automatically identifies and removes unused or unreachable objects from memory to free up space and ensure efficient memory management. Garbage collection helps prevent memory leaks, avoid dangling pointers, and reduce programmer error.&lt;/p&gt;

&lt;p&gt;Garbage collection does the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finds objects that are no longer needed. These are objects that your code can no longer access (no active reference to them).&lt;/li&gt;
&lt;li&gt;Reclaims the memory used by these objects. This memory is then made available for new object creation.&lt;/li&gt;
&lt;li&gt;Optionally returns unused memory back to the OS (in some JVMs).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Java 8: -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:&lt;/p&gt;

&lt;p&gt;-XX flags are non-standard, advanced options (as opposed to standard -X or normal flags) and are used to enable, disable, or configure GC behavior, memory management and more.&lt;/p&gt;

&lt;p&gt;Format:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;-XX:+OptionName - Enable the option.&lt;/li&gt;
&lt;li&gt;-XX:-OptionName - Disable the option.&lt;/li&gt;
&lt;li&gt;-XX:OptionName=value - Set the option to a specific value.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Java 9 onwards: -Xlog:gc*:file=&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Continue reading on &lt;a href="https://developer.ibm.com/articles/j-performance-tuning-jvm/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt;...&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>jvm</category>
      <category>performance</category>
    </item>
    <item>
      <title>Top 5 Python blogs, articles, or tutorials on IBM Developer in the first half of 2025</title>
      <dc:creator>IBM Developer</dc:creator>
      <pubDate>Tue, 10 Jun 2025 11:26:02 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/top-5-python-blogs-articles-or-tutorials-on-ibm-developer-in-the-first-half-of-2025-4kl5</link>
      <guid>https://forem.com/ibmdeveloper/top-5-python-blogs-articles-or-tutorials-on-ibm-developer-in-the-first-half-of-2025-4kl5</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;This blog was originally published on &lt;a href="https://developer.ibm.com/blogs/top-5-python-content-1h2025/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt;.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.ibm.com/languages/python/" rel="noopener noreferrer"&gt;Python&lt;/a&gt; is one of the most popular programming languages in the generative AI landscape. Whether you're implementing RAG pipelines, optimizing AI models, or taking advantage of AI agent frameworks, Python is front and center due to it's simplicity and versatility.&lt;/p&gt;

&lt;p&gt;If you're ready to start building with Python, check out this curated list of our top 5 blogs, articles, and tutorials so far this year. They'll help you enhance your Python skills, stay ahead of the curve, and get inspired for your next generative AI project!&lt;/p&gt;

&lt;h2&gt;
  
  
  #5 Enhancing RAG performance with smart chunking strategies
&lt;/h2&gt;

&lt;p&gt;In &lt;a href="https://developer.ibm.com/articles/awb-enhancing-rag-performance-chunking-strategies/" rel="noopener noreferrer"&gt;&lt;strong&gt;Enhancing RAG performance with smart chunking strategies&lt;/strong&gt;&lt;/a&gt;, you learn just how important chunking is when retrieving data in your RAG system. This article explains how you first need to understand the specific nature of your data and then select the right chunking strategy to improve the performance of your RAG system.&lt;/p&gt;

&lt;p&gt;Explore more content on IBM Developer about the &lt;a href="https://developer.ibm.com/technologies/rag/" rel="noopener noreferrer"&gt;retrieval-augmented generation (RAG)&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  #4 Cache augmented generation (CAG): Enhancing speed and efficiency in AI systems
&lt;/h2&gt;

&lt;p&gt;The article &lt;a href="https://developer.ibm.com/articles/awb-cache-rag-efficiency-speed-ai/" rel="noopener noreferrer"&gt;&lt;strong&gt;Cache augmented generation (CAG): Enhancing speed and efficiency in AI systems&lt;/strong&gt;&lt;/a&gt; explains what cache augmented generation (CAG) is, how it works, and its potential impact on AI systems.&lt;/p&gt;

&lt;p&gt;Explore more content on IBM Developer about the &lt;a href="https://developer.ibm.com/technologies/rag/" rel="noopener noreferrer"&gt;retrieval-augmented generation (RAG)&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  #3 Optimizing LLMs with cache augmented generation
&lt;/h2&gt;

&lt;p&gt;In &lt;a href="https://developer.ibm.com/articles/awb-llms-cache-augmented-generation/" rel="noopener noreferrer"&gt;&lt;strong&gt;Optimizing LLMs with cache augmented generation&lt;/strong&gt;&lt;/a&gt;, you learn how cache augmented generation (CAG) and its integration with the Granite models helps to optimize LLM workflows by preloading knowledge and precomputing states, making it ideal for static data set applications with fast response needs.&lt;/p&gt;

&lt;p&gt;Explore more content on IBM Developer about &lt;a href="https://developer.ibm.com/technologies/large-language-models/" rel="noopener noreferrer"&gt;large language models (LLMs)&lt;/a&gt; and the &lt;a href="https://developer.ibm.com/components/granite-models/" rel="noopener noreferrer"&gt;Granite models&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  #2 Comparing AI agent frameworks: CrewAI, LangGraph, and BeeAI
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://developer.ibm.com/articles/awb-comparing-ai-agent-frameworks-crewai-langgraph-and-beeai/" rel="noopener noreferrer"&gt;&lt;strong&gt;Comparing AI agent frameworks: CrewAI, LangGraph, and BeeAI&lt;/strong&gt;&lt;/a&gt; explains the capabilities, features, and implementation considerations of leading AI agent frameworks focused on multi-agent collaboration and orchestration. The article shows how CrewAI, LangGraph, and BeeAI each offer powerful capabilities for implementing AI agent systems, with distinct advantages based on specific requirements and use cases.&lt;/p&gt;

&lt;p&gt;Check out an additional article, &lt;a href="https://developer.ibm.com/articles/awb-implementing-ai-agents-crewai-langgraph-and-beeai/" rel="noopener noreferrer"&gt;&lt;em&gt;Implementing AI agents with AI agent frameworks&lt;/em&gt;&lt;/a&gt;, for a hands-on look at implementing an AI agent in each of these three AI agent frameworks.&lt;/p&gt;

&lt;p&gt;Explore more content on IBM Developer about &lt;a href="https://developer.ibm.com/technologies/agentic-ai/" rel="noopener noreferrer"&gt;agentic AI&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  #1 Create a LangChain AI Agent in Python using watsonx
&lt;/h2&gt;

&lt;p&gt;In the tutorial &lt;a href="https://developer.ibm.com/tutorials/awb-create-langchain-ai-agent-python-watsonx/" rel="noopener noreferrer"&gt;&lt;strong&gt;Create a LangChain AI Agent in Python using watsonx&lt;/strong&gt;&lt;/a&gt;, you learn how to use the LangChain Python package to build an AI agent that uses its custom tools to return a URL directing to NASA's Astronomy Picture of the Day.&lt;/p&gt;

&lt;p&gt;Explore more content on IBM Developer about &lt;a href="https://developer.ibm.com/technologies/agentic-ai/" rel="noopener noreferrer"&gt;agentic AI&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Want more?
&lt;/h2&gt;

&lt;p&gt;Python is a simple and versatile open source programming language that's ideal for AI tasks. Now that you've seen what developers were looking to learn about Python in the first half of 2025, make sure you stay tuned to see what the rest of 2025 brings. We'll bring you the latest in Python concepts, step-by-step tutorials, and AI techniques!&lt;/p&gt;

&lt;p&gt;Check out more of our Python content on our &lt;a href="https://developer.ibm.com/languages/python/" rel="noopener noreferrer"&gt;Python&lt;/a&gt; hub page.&lt;/p&gt;

</description>
      <category>python</category>
      <category>genai</category>
    </item>
    <item>
      <title>Collecting and transporting JFR dumps from containerized environments</title>
      <dc:creator>IBM Developer</dc:creator>
      <pubDate>Thu, 29 May 2025 12:54:43 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/collecting-and-transporting-jfr-dumps-from-containerized-environments-3b22</link>
      <guid>https://forem.com/ibmdeveloper/collecting-and-transporting-jfr-dumps-from-containerized-environments-3b22</guid>
      <description>&lt;p&gt;Authored by: Aditi Srinivas, Gireesh Punathil&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;This article was originally published on &lt;a href="https://developer.ibm.com/articles/j-jfr-dump/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt;.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;JDK Flight Recorder (JFR) was introduced in IBM Semeru Runtimes v11.0.27, v17.0.15 and v21.0.7 releases. JFR provides an industry standard, low overhead, continuous workload monitoring experience to the users of Semeru-based Java workloads that are running in containerized or conventional deployment targets.&lt;/p&gt;

&lt;p&gt;In containerized environments like Red Hat OpenShift, diagnosing performance issues in Java applications often requires capturing JFR data. However, collecting and transporting these recordings from ephemeral, isolated containers poses logistical and technical challenges.&lt;/p&gt;

&lt;p&gt;Traditional monitoring tools often assume direct or SSH access to the host, which is typically restricted in modern cloud-native environments. In addition, many container environments inhibit persistent volumes, so the diagnostic data needs to be taken out through manual means, before the container is recycled. Without streamlined methods to securely extract and manage JFR files, root cause analysis can be delayed, affecting application reliability and supportability.&lt;/p&gt;

&lt;p&gt;To address these challenges, we need a well-defined set of tasks to be carried out to perform the application monitoring and performance analysis seamlessly. This article provides the steps to configure and record a JFR dump from a running Semeru application in a containerized environment (specifically an OpenShift environment) and transport it to your local system, with the assumption that you do not have SSH access to the pod that is running the container.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set up your environment
&lt;/h2&gt;

&lt;p&gt;Make sure rsync is installed beforehand. Perform this step in the Dockerfile itself while defining the image. This step is only required if your JFR dump is abnormally large (more than 2GB).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo apt install rsync&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next, make sure you have the ability to execute shell scripts in the remote OpenShift container.&lt;/p&gt;

&lt;p&gt;Login to Openshift:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# oc login --token=&amp;lt;your_token&amp;gt; --server=&amp;lt;your_cluster_api&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Locate the target pod:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# oc get pods -n &amp;lt;namespace&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Locate the container within the pod:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# oc get pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -o jsonpath='{.spec.containers[*].name}'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Issue sample commands or shell scripts inside the container:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# oc exec -n &amp;lt;namespace&amp;gt; &amp;lt;pod&amp;gt; -c &amp;lt;container&amp;gt; -- /bin/sh -c &amp;lt;cmd&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;To list files in the root directory:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# oc exec -n my-namespace my-pod -c my-container -- /bin/sh -c "ls /"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Print environment variables:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;oc exec -n my-namespace my-pod -c my-container -- /bin/sh -c "env"&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Collect a JFR dump
&lt;/h2&gt;

&lt;p&gt;JFR capabilities are enabled by default in most JVMs, so you don’t need to pass any special arguments to activate them.&lt;/p&gt;

&lt;p&gt;To initiate a JFR recording, you can use the jcmd utility, which allows you to interact with the running JVM process.&lt;/p&gt;

&lt;p&gt;Note down the JVM ID which will be used later using jcmd -l command.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# oc exec -n &amp;lt;namespace&amp;gt; &amp;lt;pod&amp;gt; -c &amp;lt;container&amp;gt; -- /bin/sh -c "jcmd -l"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Make sure to embed the commands in double quotes to avoid truncation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Continue reading on &lt;a href="https://developer.ibm.com/articles/j-jfr-dump/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt;.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>containers</category>
    </item>
    <item>
      <title>How servers become part of the Cloud</title>
      <dc:creator>IBM Developer</dc:creator>
      <pubDate>Tue, 13 May 2025 07:28:33 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/how-servers-become-part-of-the-cloud-3nc1</link>
      <guid>https://forem.com/ibmdeveloper/how-servers-become-part-of-the-cloud-3nc1</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;This tutorial was originally published on &lt;a href="https://developer.ibm.com/articles/awb-servers-become-part-of-cloud/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt; by Zack Grossbart&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Understanding how the cloud works is key to building stable and reliable cloud applications. Should you keep all your servers in one zone or spread them out? What causes capacity errors, and how do you fix them? Where is your workload actually running and what happens if that server fails? How do you ensure it's running on something stable?&lt;/p&gt;

&lt;p&gt;To design secure and resilient applications, you need to answer these questions. Knowing how a server becomes part of the cloud and how IBM monitors, detects issues, and fixes them is essential to trusting your workloads with us.&lt;/p&gt;

&lt;p&gt;If you’ve ever wondered what goes on behind the scenes to bring a new server into the cloud, this article is for you.&lt;/p&gt;

&lt;p&gt;Cloud resiliency and scale come from more than just stacking servers in a room. It takes careful planning, smart design, and coordination of both physical and logical components.&lt;/p&gt;

&lt;p&gt;The IBM Cloud is always evolving. We’re constantly adding capacity, launching new features, fixing servers, and upgrading infrastructure to give our customers the best experience possible.&lt;/p&gt;

&lt;p&gt;Bringing a new server into the cloud involves a lot of moving parts—from configuration and power to networking and placement. In this article, we’ll walk you through how IBM adds new servers to the VPC cloud: where they live, how they’re set up, how they’re connected, and how they become a trusted part of the IBM Cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building blocks of a Cloud
&lt;/h2&gt;

&lt;p&gt;To understand how a cloud works, we need to look at the two main components that make it all possible:   &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Physical components: The actual hardware and infrastructure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Logical components: The software and systems that organize and manage that hardware.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Continue reading on &lt;a href="https://developer.ibm.com/articles/awb-servers-become-part-of-cloud/" rel="noopener noreferrer"&gt;IBM Developer&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>serverconfiguration</category>
      <category>clouddeployment</category>
      <category>cloudservers</category>
    </item>
  </channel>
</rss>
