<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI and Large Language Models on Software Engineering Learning Paths</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/</link><description>Recent content in AI and Large Language Models on Software Engineering Learning Paths</description><generator>Hugo</generator><language>en</language><atom:link href="https://kyngo.github.io/learning-paths/paths/ai-llms/index.xml" rel="self" type="application/rss+xml"/><item><title>Neural Networks and Deep Learning</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/01-neural-networks-deep-learning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/01-neural-networks-deep-learning/</guid><description>&lt;p&gt;This guide covers the foundational concepts of neural networks — from the single perceptron to deep architectures. By the end, you&amp;rsquo;ll understand how networks learn, why they work, and how to prevent them from failing.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Linear algebra basics (vectors, matrices, dot products)&lt;/li&gt;
&lt;li&gt;Calculus (derivatives, chain rule)&lt;/li&gt;
&lt;li&gt;Basic probability and statistics&lt;/li&gt;
&lt;li&gt;Python familiarity&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="the-perceptron"&gt;The Perceptron&lt;a class="anchor" href="#the-perceptron"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The perceptron is the simplest neural unit — a linear classifier inspired by biological neurons.&lt;/p&gt;</description></item><item><title>The Transformer Architecture</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/02-transformer-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/02-transformer-architecture/</guid><description>&lt;p&gt;The Transformer is the architecture behind virtually all modern language models (GPT, BERT, Claude, Llama, T5). Introduced in &amp;ldquo;Attention Is All You Need&amp;rdquo; (Vaswani et al., 2017), it replaced recurrent networks by processing all positions in parallel through a mechanism called &lt;strong&gt;self-attention&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This guide breaks down every component — from the attention mechanism to the full architecture variants.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Neural network basics (forward/backward pass, loss functions)&lt;/li&gt;
&lt;li&gt;Matrix multiplication&lt;/li&gt;
&lt;li&gt;Basic understanding of sequence processing (what a &amp;ldquo;token&amp;rdquo; is)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="the-core-idea-attention"&gt;The Core Idea: Attention&lt;a class="anchor" href="#the-core-idea-attention"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The fundamental question attention answers: &lt;strong&gt;&amp;ldquo;When processing token X, how much should I look at every other token in the sequence?&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Language Models</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/03-language-models/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/03-language-models/</guid><description>&lt;p&gt;This guide traces the evolution of language models — from counting word sequences to trillion-parameter neural networks that exhibit emergent reasoning. Understanding this history reveals why modern LLMs work the way they do and what trade-offs each generation made.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Basic probability (conditional probability, Bayes&amp;rsquo; theorem)&lt;/li&gt;
&lt;li&gt;Neural network fundamentals (layers, training, loss functions)&lt;/li&gt;
&lt;li&gt;Transformer architecture basics (attention, encoder/decoder)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="what-is-a-language-model"&gt;What Is a Language Model?&lt;a class="anchor" href="#what-is-a-language-model"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A language model assigns probabilities to sequences of tokens:&lt;/p&gt;</description></item><item><title>Training and Fine-Tuning Language Models</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/04-training-fine-tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/04-training-fine-tuning/</guid><description>&lt;p&gt;This guide covers the full lifecycle of making a language model useful — from pre-training on raw text to aligning it with human preferences. You&amp;rsquo;ll understand when to fine-tune, when to prompt, and when to use RAG instead.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Transformer architecture (attention, decoder-only models)&lt;/li&gt;
&lt;li&gt;Neural network training (loss functions, optimizers, backpropagation)&lt;/li&gt;
&lt;li&gt;Basic understanding of what language models do (next-token prediction)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="the-three-stages-of-llm-development"&gt;The Three Stages of LLM Development&lt;a class="anchor" href="#the-three-stages-of-llm-development"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Stage 1: Pre-training → &amp;#34;Learn language and world knowledge&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Stage 2: Supervised Fine-tuning → &amp;#34;Learn to follow instructions&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Stage 3: Alignment (RLHF/DPO) → &amp;#34;Learn human preferences&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="mermaid"&gt;graph LR
 PT[Pre-training&amp;lt;br/&amp;gt;Trillions of tokens&amp;lt;br/&amp;gt;Next token prediction] --&amp;gt; SFT[Supervised Fine-tuning&amp;lt;br/&amp;gt;Thousands of examples&amp;lt;br/&amp;gt;Instruction-response pairs]
 SFT --&amp;gt; ALIGN[Alignment&amp;lt;br/&amp;gt;RLHF or DPO&amp;lt;br/&amp;gt;Human preferences]
 ALIGN --&amp;gt; DEPLOY[Deployed Model&amp;lt;br/&amp;gt;Helpful, harmless&amp;lt;br/&amp;gt;honest]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="stage-1-pre-training"&gt;Stage 1: Pre-training&lt;a class="anchor" href="#stage-1-pre-training"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pre-training creates the &lt;strong&gt;foundation model&lt;/strong&gt; — a model that understands language, facts, reasoning patterns, and code, but doesn&amp;rsquo;t yet know how to be a helpful assistant.&lt;/p&gt;</description></item><item><title>Prompt Engineering</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/05-prompt-engineering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/05-prompt-engineering/</guid><description>&lt;p&gt;Prompt engineering is the discipline of crafting inputs to large language models to elicit desired outputs. It ranges from simple instruction writing to sophisticated multi-step reasoning strategies. Mastering prompt engineering is the highest-leverage skill for working with LLMs — it requires no training data, no compute, and produces immediate results.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Understanding of how language models generate text (autoregressive, token-by-token)&lt;/li&gt;
&lt;li&gt;Familiarity with the transformer architecture and attention mechanism&lt;/li&gt;
&lt;li&gt;Basic understanding of tokenization&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="prompting-fundamentals"&gt;Prompting Fundamentals&lt;a class="anchor" href="#prompting-fundamentals"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A prompt is the text input provided to an LLM. The model generates a completion conditioned on this input. The quality, specificity, and structure of the prompt directly determine the quality of the output.&lt;/p&gt;</description></item><item><title>Retrieval-Augmented Generation (RAG)</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/06-retrieval-augmented-generation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/06-retrieval-augmented-generation/</guid><description>&lt;p&gt;Retrieval-Augmented Generation combines the generative power of large language models with external knowledge retrieval. Instead of relying solely on what the model memorized during training, RAG fetches relevant documents at inference time and includes them in the prompt context. This grounds the model&amp;rsquo;s responses in factual, up-to-date information.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Understanding of how LLMs generate text and their context windows&lt;/li&gt;
&lt;li&gt;Basic familiarity with embeddings and vector spaces&lt;/li&gt;
&lt;li&gt;Knowledge of prompt engineering fundamentals&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="why-rag"&gt;Why RAG?&lt;a class="anchor" href="#why-rag"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="the-problem-with-pure-llms"&gt;The Problem with Pure LLMs&lt;a class="anchor" href="#the-problem-with-pure-llms"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Large language models have fundamental limitations that RAG addresses:&lt;/p&gt;</description></item><item><title>Agents and Tool Use</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/07-agents-tool-use/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/07-agents-tool-use/</guid><description>&lt;p&gt;AI agents are systems where a language model autonomously decides what actions to take, executes those actions via external tools, observes the results, and iterates until a goal is achieved. Unlike simple prompt-response interactions, agents maintain state, plan multi-step strategies, and interact with the real world through APIs, databases, file systems, and other software.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Understanding of LLM inference and prompt engineering&lt;/li&gt;
&lt;li&gt;Familiarity with function calling and structured output&lt;/li&gt;
&lt;li&gt;Basic knowledge of API design and software architecture&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="function-and-tool-calling"&gt;Function and Tool Calling&lt;a class="anchor" href="#function-and-tool-calling"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Tool calling is the mechanism by which an LLM requests execution of external functions. The model doesn&amp;rsquo;t execute code — it generates structured requests that the application fulfills.&lt;/p&gt;</description></item><item><title>Inference and Deployment</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/08-inference-deployment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/08-inference-deployment/</guid><description>&lt;p&gt;Deploying large language models in production requires understanding the mechanics of text generation, memory constraints, optimization techniques, and the tradeoffs between latency, throughput, and cost. This chapter covers how LLMs generate text at the hardware level and how to serve them efficiently at scale.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Understanding of transformer architecture (attention, KV cache)&lt;/li&gt;
&lt;li&gt;Basic knowledge of GPU computing and memory hierarchies&lt;/li&gt;
&lt;li&gt;Familiarity with model parameters and floating-point representations&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="inference-mechanics"&gt;Inference Mechanics&lt;a class="anchor" href="#inference-mechanics"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="autoregressive-generation"&gt;Autoregressive Generation&lt;a class="anchor" href="#autoregressive-generation"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;LLMs generate text one token at a time. Each new token is conditioned on all previous tokens. This sequential dependency is the fundamental constraint of LLM inference.&lt;/p&gt;</description></item><item><title>Evaluation, Safety, and Alignment</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/09-evaluation-safety/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/09-evaluation-safety/</guid><description>&lt;p&gt;Measuring model quality and ensuring safe, responsible AI deployment are two sides of the same coin. This chapter covers how we evaluate LLMs, detect and mitigate their failure modes, align them with human values, and build guardrails for production systems.&lt;/p&gt;
&lt;h2 id="benchmarks-and-evaluation-frameworks"&gt;Benchmarks and Evaluation Frameworks&lt;a class="anchor" href="#benchmarks-and-evaluation-frameworks"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="why-benchmarks-matter"&gt;Why Benchmarks Matter&lt;a class="anchor" href="#why-benchmarks-matter"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Benchmarks provide standardized, reproducible measurements of model capabilities. Without them, comparing models would be purely anecdotal. However, benchmarks are imperfect proxies — a model that scores well on a benchmark may still fail in your specific use case.&lt;/p&gt;</description></item><item><title>Multimodal Models</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/10-multimodal-models/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/10-multimodal-models/</guid><description>&lt;p&gt;Multimodal AI systems process and generate content across multiple modalities — text, images, audio, and video. This chapter covers the architectures, capabilities, and practical applications of models that bridge these domains.&lt;/p&gt;
&lt;h2 id="vision-language-models"&gt;Vision-Language Models&lt;a class="anchor" href="#vision-language-models"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="how-vision-language-models-work"&gt;How Vision-Language Models Work&lt;a class="anchor" href="#how-vision-language-models-work"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Vision-language models (VLMs) combine a visual encoder with a language model, enabling understanding of images through natural language.&lt;/p&gt;
&lt;pre class="mermaid"&gt;graph LR
 I[Image] --&amp;gt; VE[Vision Encoder&amp;lt;br/&amp;gt;ViT / SigLIP]
 VE --&amp;gt; P[Projection Layer&amp;lt;br/&amp;gt;Linear or MLP]
 P --&amp;gt; LLM[Language Model&amp;lt;br/&amp;gt;Decoder]
 T[Text Prompt] --&amp;gt; TOK[Tokenizer]
 TOK --&amp;gt; LLM
 LLM --&amp;gt; O[Text Output]&lt;/pre&gt;&lt;h3 id="architecture-patterns"&gt;Architecture Patterns&lt;a class="anchor" href="#architecture-patterns"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Model&lt;/th&gt;
					&lt;th&gt;Vision Encoder&lt;/th&gt;
					&lt;th&gt;Language Model&lt;/th&gt;
					&lt;th&gt;Connection Method&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;GPT-4V / GPT-4o&lt;/td&gt;
					&lt;td&gt;Proprietary&lt;/td&gt;
					&lt;td&gt;GPT-4&lt;/td&gt;
					&lt;td&gt;Native multimodal training&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Claude 3.x Vision&lt;/td&gt;
					&lt;td&gt;Proprietary&lt;/td&gt;
					&lt;td&gt;Claude&lt;/td&gt;
					&lt;td&gt;Native multimodal training&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;LLaVA&lt;/td&gt;
					&lt;td&gt;CLIP ViT-L/14&lt;/td&gt;
					&lt;td&gt;Vicuna / LLaMA&lt;/td&gt;
					&lt;td&gt;Linear projection + instruction tuning&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Gemini&lt;/td&gt;
					&lt;td&gt;Proprietary&lt;/td&gt;
					&lt;td&gt;Gemini&lt;/td&gt;
					&lt;td&gt;Native multimodal (all modalities)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Qwen-VL&lt;/td&gt;
					&lt;td&gt;ViT-bigG&lt;/td&gt;
					&lt;td&gt;Qwen&lt;/td&gt;
					&lt;td&gt;Cross-attention + compression&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;InternVL&lt;/td&gt;
					&lt;td&gt;InternViT-6B&lt;/td&gt;
					&lt;td&gt;InternLM&lt;/td&gt;
					&lt;td&gt;Dynamic resolution + pixel shuffle&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="using-vision-models"&gt;Using Vision Models&lt;a class="anchor" href="#using-vision-models"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;base64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;analyze_image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;Analyze an image with GPT-4o.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;rb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;image_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;standard_b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;gpt-4o&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;role&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;user&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;image_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;image_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;data:image/png;base64,&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;image_data&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;detail&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;high&amp;#34;&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#34;low&amp;#34;, &amp;#34;high&amp;#34;, or &amp;#34;auto&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;analyze_image_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;Analyze an image from URL.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;gpt-4o&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;role&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;user&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;image_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;image_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="vision-model-capabilities"&gt;Vision Model Capabilities&lt;a class="anchor" href="#vision-model-capabilities"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Capability&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Use Cases&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Image description&lt;/td&gt;
					&lt;td&gt;Detailed natural language descriptions&lt;/td&gt;
					&lt;td&gt;Accessibility, cataloging&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;OCR / text extraction&lt;/td&gt;
					&lt;td&gt;Read text from images&lt;/td&gt;
					&lt;td&gt;Document processing, receipts&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Visual reasoning&lt;/td&gt;
					&lt;td&gt;Answer questions requiring inference&lt;/td&gt;
					&lt;td&gt;Diagram understanding, charts&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Object detection&lt;/td&gt;
					&lt;td&gt;Identify and locate objects&lt;/td&gt;
					&lt;td&gt;Inventory, safety monitoring&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Spatial understanding&lt;/td&gt;
					&lt;td&gt;Understand layout and relationships&lt;/td&gt;
					&lt;td&gt;UI analysis, architecture&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Multi-image comparison&lt;/td&gt;
					&lt;td&gt;Compare or relate multiple images&lt;/td&gt;
					&lt;td&gt;Before/after, product matching&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Chart/graph reading&lt;/td&gt;
					&lt;td&gt;Extract data from visualizations&lt;/td&gt;
					&lt;td&gt;Report analysis, data extraction&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="practical-considerations"&gt;Practical Considerations&lt;a class="anchor" href="#practical-considerations"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Token Cost for Images (GPT-4o):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Detail Level Tokens Used Best For
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;─────────────────────────────────────────────────
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;low 85 tokens Quick classification, simple questions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;high 85-1105 tokens OCR, detailed analysis, small text
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;auto Model decides General use
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;High detail: image split into 512x512 tiles
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Each tile = 170 tokens + 85 base tokens
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Max: 2048x2048 before downscaling&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="llava-architecture-deep-dive"&gt;LLaVA Architecture Deep Dive&lt;a class="anchor" href="#llava-architecture-deep-dive"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;LLaVA (Large Language and Vision Assistant) demonstrates a clean, reproducible VLM architecture:&lt;/p&gt;</description></item><item><title>Building LLM Applications</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/11-building-llm-applications/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/11-building-llm-applications/</guid><description>&lt;p&gt;Moving from prototype to production with LLMs requires engineering discipline around reliability, cost, observability, and testing. This chapter covers the patterns and practices for building robust LLM-powered applications.&lt;/p&gt;
&lt;h2 id="api-integration-patterns"&gt;API Integration Patterns&lt;a class="anchor" href="#api-integration-patterns"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="streaming-responses"&gt;Streaming Responses&lt;a class="anchor" href="#streaming-responses"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Streaming delivers tokens as they&amp;rsquo;re generated, reducing perceived latency from seconds to milliseconds for the first token:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;stream_response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;Stream a response, yielding tokens as they arrive.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;stream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;gpt-4o&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;full_response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;full_response&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;full_response&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Server-Sent Events (SSE) for web applications:&lt;/p&gt;</description></item><item><title>AI-Assisted Development</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/12-ai-assisted-development/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/12-ai-assisted-development/</guid><description>&lt;p&gt;AI coding assistants have become standard tools in software engineering. This chapter covers how to use them effectively, understand their limitations, and integrate them into development workflows without compromising code quality or security.&lt;/p&gt;
&lt;h2 id="code-generation-tools"&gt;Code Generation Tools&lt;a class="anchor" href="#code-generation-tools"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="the-landscape"&gt;The Landscape&lt;a class="anchor" href="#the-landscape"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Tool&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Model&lt;/th&gt;
					&lt;th&gt;Integration&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;GitHub Copilot&lt;/td&gt;
					&lt;td&gt;Inline completion + chat&lt;/td&gt;
					&lt;td&gt;GPT-4o / Claude&lt;/td&gt;
					&lt;td&gt;VS Code, JetBrains, Neovim&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Cursor&lt;/td&gt;
					&lt;td&gt;AI-native IDE&lt;/td&gt;
					&lt;td&gt;Claude, GPT-4o, custom&lt;/td&gt;
					&lt;td&gt;Fork of VS Code&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Claude (Anthropic)&lt;/td&gt;
					&lt;td&gt;Chat + artifacts + computer use&lt;/td&gt;
					&lt;td&gt;Claude 4 family&lt;/td&gt;
					&lt;td&gt;Web, API, IDE extensions&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;ChatGPT&lt;/td&gt;
					&lt;td&gt;Chat interface&lt;/td&gt;
					&lt;td&gt;GPT-4o&lt;/td&gt;
					&lt;td&gt;Web, API, plugins&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Amazon Q Developer&lt;/td&gt;
					&lt;td&gt;Inline + chat + agents&lt;/td&gt;
					&lt;td&gt;Proprietary&lt;/td&gt;
					&lt;td&gt;VS Code, JetBrains, CLI&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Codeium / Windsurf&lt;/td&gt;
					&lt;td&gt;Inline + chat&lt;/td&gt;
					&lt;td&gt;Proprietary&lt;/td&gt;
					&lt;td&gt;Multi-IDE&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Aider&lt;/td&gt;
					&lt;td&gt;Terminal-based pair programming&lt;/td&gt;
					&lt;td&gt;Any (OpenAI, Anthropic, local)&lt;/td&gt;
					&lt;td&gt;CLI, git-integrated&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Kiro&lt;/td&gt;
					&lt;td&gt;Spec-driven development&lt;/td&gt;
					&lt;td&gt;Claude&lt;/td&gt;
					&lt;td&gt;VS Code&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="how-code-completion-works"&gt;How Code Completion Works&lt;a class="anchor" href="#how-code-completion-works"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Code Completion Pipeline:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1: Context Gathering
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── Current file (cursor position)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── Open tabs / related files
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── Import statements (dependency hints)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── Recent edits (intent signals)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── Project structure (file tree)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2: Prompt Construction
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── Prefix (code before cursor)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── Suffix (code after cursor)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── Metadata (language, framework, file path)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3: Model Inference
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── Generate completion tokens
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4: Post-Processing
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── Filter low-confidence suggestions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── Deduplicate
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── Format to match style
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── Present to user (inline ghost text)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ide-integration-patterns"&gt;IDE Integration Patterns&lt;a class="anchor" href="#ide-integration-patterns"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Pattern&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Example&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Inline ghost text&lt;/td&gt;
					&lt;td&gt;Grayed-out suggestion at cursor&lt;/td&gt;
					&lt;td&gt;Copilot tab-to-accept&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Chat panel&lt;/td&gt;
					&lt;td&gt;Conversational coding assistant&lt;/td&gt;
					&lt;td&gt;Cursor chat, Copilot chat&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Inline edit&lt;/td&gt;
					&lt;td&gt;Select code → describe change&lt;/td&gt;
					&lt;td&gt;Cursor Cmd+K&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Agent mode&lt;/td&gt;
					&lt;td&gt;Multi-file autonomous changes&lt;/td&gt;
					&lt;td&gt;Cursor composer, Copilot agent&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Terminal assist&lt;/td&gt;
					&lt;td&gt;Command suggestions in terminal&lt;/td&gt;
					&lt;td&gt;Amazon Q, GitHub Copilot CLI&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="effective-prompting-for-code"&gt;Effective Prompting for Code&lt;a class="anchor" href="#effective-prompting-for-code"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="principles"&gt;Principles&lt;a class="anchor" href="#principles"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Principle&lt;/th&gt;
					&lt;th&gt;Bad Example&lt;/th&gt;
					&lt;th&gt;Good Example&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Be specific&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;Make a function&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;Write a Python function that validates email addresses using regex, returning True/False&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Provide context&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;Fix this bug&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;This function should return sorted results but returns unsorted when the input has duplicates&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Specify constraints&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;Make it fast&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;Optimize for O(n log n) time complexity, input size up to 1M elements&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Include examples&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;Parse dates&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;Parse dates like &amp;lsquo;2024-01-15&amp;rsquo;, &amp;lsquo;Jan 15, 2024&amp;rsquo;, &amp;lsquo;15/01/2024&amp;rsquo; into ISO format&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;State the stack&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;Build an API&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;Build a REST endpoint using FastAPI with Pydantic validation and SQLAlchemy ORM&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="comment-driven-development"&gt;Comment-Driven Development&lt;a class="anchor" href="#comment-driven-development"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Write comments describing what you want, then let the AI generate the implementation:&lt;/p&gt;</description></item><item><title>Using AI Effectively</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/13-using-ai-effectively/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/13-using-ai-effectively/</guid><description>&lt;p&gt;This chapter is about practical wisdom — how to get the most value from AI tools as an end user, whether you&amp;rsquo;re writing, researching, analyzing data, or building workflows. The goal is to develop intuition for when AI helps, when it misleads, and how to collaborate with it productively.&lt;/p&gt;
&lt;h2 id="choosing-the-right-model"&gt;Choosing the Right Model&lt;a class="anchor" href="#choosing-the-right-model"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="capability-vs-cost-matrix"&gt;Capability vs Cost Matrix&lt;a class="anchor" href="#capability-vs-cost-matrix"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Not every task needs the most powerful model. Matching task complexity to model capability saves money and often improves speed.&lt;/p&gt;</description></item><item><title>Agents, Skills, Steering, and System Prompts</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/14-agents-skills-steering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/14-agents-skills-steering/</guid><description>&lt;h2 id="what-are-ai-agents"&gt;What Are AI Agents?&lt;a class="anchor" href="#what-are-ai-agents"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;An AI agent is a system that uses a language model as its reasoning core, enhanced with the ability to take actions in the world — calling tools, reading files, querying databases, browsing the web, or interacting with APIs. Unlike a simple chatbot that only generates text, an agent observes, reasons, acts, and iterates.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 USER[&amp;#34;User&amp;lt;br/&amp;gt;Task / Goal&amp;#34;] --&amp;gt; AGENT[&amp;#34;Agent&amp;lt;br/&amp;gt;(LLM + Tools + Memory)&amp;#34;]
 AGENT --&amp;gt; THINK[&amp;#34;Think:&amp;lt;br/&amp;gt;Plan next step&amp;#34;]
 THINK --&amp;gt; ACT[&amp;#34;Act:&amp;lt;br/&amp;gt;Call tool or API&amp;#34;]
 ACT --&amp;gt; OBSERVE[&amp;#34;Observe:&amp;lt;br/&amp;gt;Process result&amp;#34;]
 OBSERVE --&amp;gt; THINK
 THINK --&amp;gt; RESPOND[&amp;#34;Respond:&amp;lt;br/&amp;gt;Final answer&amp;#34;]&lt;/pre&gt;&lt;h3 id="core-agent-loop"&gt;Core Agent Loop&lt;a class="anchor" href="#core-agent-loop"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Most agent frameworks implement some variant of this loop:&lt;/p&gt;</description></item><item><title>MCP (Model Context Protocol)</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/15-mcp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/15-mcp/</guid><description>&lt;h2 id="what-is-mcp"&gt;What Is MCP?&lt;a class="anchor" href="#what-is-mcp"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Model Context Protocol&lt;/strong&gt; (MCP) is an open standard for connecting AI models to external data sources and tools. Created by Anthropic and open-sourced in late 2024, it provides a universal interface between AI applications (clients) and integrations (servers), much like USB-C standardized device connectivity.&lt;/p&gt;
&lt;h3 id="the-problem-mcp-solves"&gt;The Problem MCP Solves&lt;a class="anchor" href="#the-problem-mcp-solves"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Before MCP, every AI application had to build custom integrations for each tool:&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 subgraph Before[&amp;#34;Before MCP: N×M integrations&amp;#34;]
 A1[&amp;#34;App 1&amp;#34;] --&amp;gt; T1[&amp;#34;Tool 1&amp;#34;]
 A1 --&amp;gt; T2[&amp;#34;Tool 2&amp;#34;]
 A1 --&amp;gt; T3[&amp;#34;Tool 3&amp;#34;]
 A2[&amp;#34;App 2&amp;#34;] --&amp;gt; T1
 A2 --&amp;gt; T2
 A2 --&amp;gt; T3
 A3[&amp;#34;App 3&amp;#34;] --&amp;gt; T1
 A3 --&amp;gt; T2
 A3 --&amp;gt; T3
 end&lt;/pre&gt;&lt;pre class="mermaid"&gt;flowchart LR
 subgraph After[&amp;#34;After MCP: N+M integrations&amp;#34;]
 A1[&amp;#34;App 1&amp;#34;] --&amp;gt; MCP[&amp;#34;MCP Protocol&amp;#34;]
 A2[&amp;#34;App 2&amp;#34;] --&amp;gt; MCP
 A3[&amp;#34;App 3&amp;#34;] --&amp;gt; MCP
 MCP --&amp;gt; T1[&amp;#34;Server 1&amp;#34;]
 MCP --&amp;gt; T2[&amp;#34;Server 2&amp;#34;]
 MCP --&amp;gt; T3[&amp;#34;Server 3&amp;#34;]
 end&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;N apps × M tools = N×M custom integrations&lt;/strong&gt; becomes &lt;strong&gt;N + M&lt;/strong&gt; — each app implements the client protocol once, each tool implements the server protocol once.&lt;/p&gt;</description></item><item><title>ACP (Agent Communication Protocol)</title><link>https://kyngo.github.io/learning-paths/paths/ai-llms/16-acp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/ai-llms/16-acp/</guid><description>&lt;h2 id="what-is-acp"&gt;What Is ACP?&lt;a class="anchor" href="#what-is-acp"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Agent Communication Protocol&lt;/strong&gt; (ACP) — also known as &lt;strong&gt;A2A&lt;/strong&gt; (Agent-to-Agent) in Google&amp;rsquo;s implementation — is an emerging open standard for &lt;strong&gt;agent-to-agent communication&lt;/strong&gt;. While MCP connects an AI agent to tools and data sources, ACP connects agents to each other, enabling them to discover capabilities, delegate tasks, and collaborate without knowing each other&amp;rsquo;s internal implementation.&lt;/p&gt;
&lt;h3 id="mcp-vs-acp-different-problems"&gt;MCP vs ACP: Different Problems&lt;a class="anchor" href="#mcp-vs-acp-different-problems"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class="mermaid"&gt;flowchart TB
 subgraph MCP[&amp;#34;MCP: Agent ↔ Tools&amp;#34;]
 AGENT1[&amp;#34;Agent&amp;#34;] &amp;lt;--&amp;gt;|&amp;#34;MCP&amp;#34;| TOOL1[&amp;#34;File System&amp;#34;]
 AGENT1 &amp;lt;--&amp;gt;|&amp;#34;MCP&amp;#34;| TOOL2[&amp;#34;Database&amp;#34;]
 AGENT1 &amp;lt;--&amp;gt;|&amp;#34;MCP&amp;#34;| TOOL3[&amp;#34;API&amp;#34;]
 end
 
 subgraph ACP[&amp;#34;ACP: Agent ↔ Agent&amp;#34;]
 AGENT2[&amp;#34;Research Agent&amp;#34;] &amp;lt;--&amp;gt;|&amp;#34;ACP&amp;#34;| AGENT3[&amp;#34;Coding Agent&amp;#34;]
 AGENT3 &amp;lt;--&amp;gt;|&amp;#34;ACP&amp;#34;| AGENT4[&amp;#34;Review Agent&amp;#34;]
 AGENT2 &amp;lt;--&amp;gt;|&amp;#34;ACP&amp;#34;| AGENT4
 end&lt;/pre&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Protocol&lt;/th&gt;
					&lt;th&gt;Connects&lt;/th&gt;
					&lt;th&gt;Primary Use&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;MCP&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Agent ↔ Tools/Data&lt;/td&gt;
					&lt;td&gt;Give an agent access to external capabilities&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;ACP/A2A&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Agent ↔ Agent&lt;/td&gt;
					&lt;td&gt;Let agents collaborate, delegate, and communicate&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="why-agent-to-agent-communication"&gt;Why Agent-to-Agent Communication?&lt;a class="anchor" href="#why-agent-to-agent-communication"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As AI systems become more complex, no single agent can do everything well. Multi-agent architectures emerge:&lt;/p&gt;</description></item></channel></rss>