Search

Software Engineer's Notes

Tag

llm

From String-to-String Matching to Context-to-Context Understanding: The Evolution of LLMs

Cartoon illustration showing the evolution of language technology from exact string matching to embeddings and context-aware AI understanding.

Software once compared characters. Today, AI compares meanings, intentions, relationships, and entire situations.

For many years, computers treated language primarily as a sequence of characters.

When a user entered a search term, the system looked for the same term in a document. When two pieces of text needed to be compared, software checked whether their characters matched.

Even advanced applications often relied on carefully written rules, predefined keywords, and manually maintained dictionaries.

This worked reasonably well when users knew the exact words the system expected.

But human communication does not work that way.

Consider these two sentences:

“I forgot my password.”

“I cannot access my account.”

There may be no important matching keywords between them. A traditional string-comparison system could treat them as unrelated.

A modern language model, however, can recognize that both may describe the same underlying problem: the user needs help signing in.

This shift represents one of the most important developments in artificial intelligence:

The transition from comparing strings to comparing contexts.

It is also a useful way to understand the evolution of natural language processing and large language models.

Stage 1: Exact String Comparison

The earliest and simplest text-processing systems worked through exact matching.

A program could compare two strings like this:

"software testing" == "software testing"

The result would be true.

However:

"software testing" == "testing software"

would be false.

The words are the same, but their order is different.

Similarly:

"color" == "colour"

would also be false, even though the words represent the same concept in American and British English.

Exact matching remains useful.

Password validation, identifiers, configuration values, database keys, and programming-language keywords frequently require precise comparison.

The problem arises when exact string matching is used to understand human language.

People express the same idea in many different ways:

  • “How do I refinance my mortgage?”
  • “Can I replace my home loan?”
  • “Would getting a new mortgage reduce my payment?”
  • “Is now a good time to change my interest rate?”

A string-based system sees different words.

A person sees closely related questions.

Stage 2: Fuzzy String Comparison

Developers eventually created more flexible comparison techniques.

Instead of asking whether two strings were identical, software could measure how many changes were required to transform one string into another.

These changes might include inserting, deleting, or replacing characters.

This made it possible to recognize that:

"mortage"

was probably intended to mean:

"mortgage"

Fuzzy matching became useful for:

  • Spell-checking
  • Autocomplete
  • Duplicate detection
  • Name matching
  • Search suggestions

It was an important improvement, but it still operated primarily at the character level.

Consider these sentences:

“The customer closed the account.”

“The bank terminated the customer’s access.”

They may describe a similar situation, but their strings are not especially close.

Now consider:

“The customer closed the account.”

“The customer did not close the account.”

These sentences are almost identical as strings, even though their meanings are opposites.

Fuzzy comparison could measure textual similarity, but it could not reliably understand meaning.

Stage 3: Keyword and Statistical Comparison

Search engines and information-retrieval systems introduced a more sophisticated idea: words should not all be treated equally.

Some words carry more information than others.

Words such as “the,” “is,” and “and” appear frequently, so their presence may not tell us much about a document.

Less common terms such as “refinancing,” “amortization,” or “cryptography” can be more informative.

Techniques such as Term Frequency-Inverse Document Frequency, commonly called TF-IDF, allowed systems to represent documents according to the words they contained and the relative importance of those words.

Ranking methods such as BM25 improved search by combining signals including:

  • Term frequency
  • Document length
  • Query-term rarity
  • Keyword relevance

This was a major advancement over basic string matching.

A document did not need to exactly match a query. It only needed to contain a useful combination of relevant terms.

However, the system still depended heavily on shared vocabulary.

Suppose a user searches for:

“My application becomes unresponsive after running for several hours.”

A troubleshooting document might say:

“A memory leak eventually causes the service to freeze.”

A keyword-based search engine may struggle if it does not connect “unresponsive” with “freeze” or the observed behavior with a “memory leak.”

The words are different, but the contexts may be strongly related.

Stage 4: Words Become Vectors

A major conceptual change occurred when words began to be represented as numerical vectors.

Instead of treating a word only as a sequence of letters, machine-learning systems learned its position in a multidimensional space.

Words used in similar linguistic environments tended to receive similar representations.

Word2Vec, introduced in 2013, demonstrated that high-quality word vectors could capture useful syntactic and semantic relationships while being trained efficiently on very large text collections.

This changed what text comparison could mean.

A system could now recognize that words such as the following were related:

  • “Car” and “vehicle”
  • “Developer” and “programmer”
  • “Purchase” and “buy”
  • “Error” and “failure”

The strings were different, but their meanings were similar.

Similarity was no longer limited to shared characters or exact keywords. It could be calculated using the distance between vectors.

This made several technologies more practical:

  • Semantic search
  • Recommendation systems
  • Document clustering
  • Content classification
  • Similarity detection
  • Intelligent information retrieval

However, early word embeddings had an important limitation:

A word usually had one fixed vector, regardless of how it was used.

Consider the word “bank”:

“I deposited money at the bank.”

“We sat on the bank of the river.”

A static embedding had to combine both meanings into one representation.

Humans resolve the meaning immediately by examining the surrounding words. Early embedding models had much more difficulty doing that.

Stage 5: Contextual Word Representations

The next major step was to generate a word’s representation from its surrounding context.

Instead of asking:

“What does the word ‘bank’ generally mean?”

a contextual model could ask:

“What does ‘bank’ mean in this particular sentence?”

ELMo introduced deep contextualized word representations that modeled both the characteristics of word usage and how those characteristics changed across linguistic contexts.

BERT pushed contextual understanding further by learning bidirectional representations.

It examined information on both the left and right sides of a token when constructing its representation.

This distinction was transformational.

Consider the sentence:

“The developer fixed the bug.”

The word “bug” likely refers to a software defect.

Now consider:

“The scientist photographed the bug.”

The same word probably refers to an insect.

The characters are identical.

The meaning is not.

Contextual representations allowed the same token to have different numerical representations depending on:

  • Its surrounding words
  • Its grammatical role
  • The sentence structure
  • The topic being discussed
  • Its meaning within the broader passage

This is where natural language processing began to move decisively away from word matching and toward contextual interpretation.

The Transformer Changes the Direction of AI

The Transformer architecture was introduced in the 2017 research paper Attention Is All You Need.

It replaced the strong dependence on recurrent or convolutional sequence processing with an architecture based primarily on attention mechanisms.

It was also more parallelizable than the dominant sequence models of the time.

Attention allows a model to determine which parts of an input are especially relevant to other parts.

Consider this sentence:

“The server could not process the request because it was overloaded.”

What does “it” refer to?

A language model must connect “it” with “the server,” not “the request.”

Attention helps the model learn such relationships across a sequence.

This approach also supports relationships that extend beyond neighboring words.

In a long technical document, the meaning of a sentence may depend on a definition introduced several paragraphs earlier.

In a conversation, the meaning of a one-word response such as “yes” may depend entirely on a question from a previous message.

The Transformer provided the architectural foundation for many modern language models, including:

  • BERT-style language-understanding models
  • GPT-style generative models
  • Text-embedding models
  • Multimodal AI systems
  • Modern conversational assistants

Stage 6: From Understanding Sentences to Representing Their Meaning

Once contextual models became available, researchers could create representations for complete sentences and passages.

Sentence-BERT, for example, modified BERT using siamese and triplet network structures to produce semantically meaningful sentence embeddings.

These embeddings could be compared efficiently using techniques such as cosine similarity.

Consider these two sentences:

“The API rejected the request because the access token had expired.”

“Authentication failed after the user’s credentials timed out.”

They do not share many exact words, but their sentence-level meanings are related.

A semantic system can convert both sentences into embeddings and determine that they occupy nearby positions in a vector space.

This enables what we might informally call context-to-context comparison.

Instead of comparing only:

String A ↔ String B

the system compares something closer to:

Meaning of Situation A ↔ Meaning of Situation B

This is not a perfect description of every model’s internal operation, but it captures the conceptual evolution.

The model is no longer concerned only with whether the same words appear.

It evaluates patterns involving:

  • Meaning
  • Intent
  • Entities
  • Relationships
  • Sentence structure
  • Surrounding information
  • The broader situation

Stage 7: Large Language Models and In-Context Learning

Large language models expanded contextual processing beyond individual words and sentences.

A prompt can now contain:

  • Instructions
  • Examples
  • Conversation history
  • Business rules
  • Source documents
  • User preferences
  • Output requirements
  • Corrections from previous interactions

The model uses that combined context to predict an appropriate continuation or response.

GPT-3 demonstrated that scaling language models could significantly improve their ability to perform tasks from instructions and a small number of examples.

This could happen without updating the model’s parameters for every new task.

This behavior became widely known as few-shot learning or in-context learning.

Imagine giving a traditional program this instruction:

“Review this customer complaint, determine whether the main issue concerns billing, technical support, account access, or cancellation, and explain your decision.”

A conventional system might require:

  • A keyword dictionary
  • Classification rules
  • Training data
  • Separate exception handling
  • Confidence thresholds
  • Continuous rule maintenance

An LLM can often infer the requested classification task directly from the instruction and examples included in the prompt.

This does not mean the model understands language exactly as a human does.

At its core, a generative language model still predicts tokens based on learned statistical patterns.

However, those predictions are conditioned on rich contextual representations learned from enormous amounts of language data.

The result behaves very differently from a simple string-processing system.

What Context-to-Context Comparison Looks Like

Suppose a company has the following support article:

“When a user repeatedly enters an invalid password, the security service temporarily locks the account. Access is restored automatically after 30 minutes.”

A customer writes:

“I tried signing in several times, and now it says I have to wait before trying again.”

A string-matching system may focus on the lack of common phrases.

A keyword system might connect “signing in” with account access but miss the lockout policy.

A contextual system can identify several relationships:

  • Repeated sign-in attempts correspond to repeated password entries.
  • Being forced to wait corresponds to a temporary account lock.
  • The support article describes a likely explanation.
  • The 30-minute recovery policy may answer the customer’s question.

The system is not merely matching words.

It is comparing the context of the customer’s experience with the context described in the support documentation.

This pattern now appears in many applications:

  • Semantic search
  • Customer-support automation
  • Duplicate bug detection
  • Resume and job-description matching
  • Fraud investigation
  • Legal document review
  • Medical information retrieval
  • Recommendation systems
  • Code search
  • Question-answering systems

How Contextual Comparison Improves Software Development

Context-to-context comparison is especially valuable in software development.

Traditional development tools often rely on exact error messages, keywords, file names, and predefined rules.

Modern AI-powered tools can examine a much broader situation.

For example, a developer might ask:

“Why does this API occasionally return an unauthorized response after the application has been running for an hour?”

An AI assistant may connect this question with:

  • Access-token expiration
  • Refresh-token failures
  • Session timeout configuration
  • Authentication logs
  • API gateway policies
  • Similar incidents from the past
  • Recent code changes

The developer may never use the phrase “token expiration,” but the model can infer that it is a likely cause from the broader context.

This capability is now being used for:

  • AI-assisted coding
  • Code review
  • Test generation
  • Documentation search
  • Incident analysis
  • Log investigation
  • Bug triage
  • Architecture recommendations
  • Security analysis

The system does not simply search for a matching line of code.

It evaluates the developer’s question within the broader technical situation.

Retrieval-Augmented Generation Extends the Context

An LLM’s internal knowledge is not always current, complete, or reliable.

Retrieval-Augmented Generation, commonly called RAG, addresses part of this problem by retrieving relevant external material and adding it to the model’s context before an answer is generated.

The original RAG research combined a pretrained generative model with a retrievable non-parametric memory.

This allowed the model to use external passages for knowledge-intensive tasks.

A typical RAG process looks like this:

  1. A user asks a question.
  2. The system creates a numerical representation of the question.
  3. It searches a document collection for contextually relevant passages.
  4. The retrieved passages are added to the prompt.
  5. The LLM generates an answer grounded in those passages.

This is another form of context-to-context processing.

The system compares the context of the question with the contexts of available documents.

It then gives the language model the most relevant information.

For example, a user may ask:

“Can I remove mortgage insurance from my loan?”

The source document may never use that exact wording.

It may instead discuss:

“Borrower-requested PMI cancellation after reaching the required loan-to-value threshold.”

Semantic retrieval can connect the user’s everyday language with the more formal language in the source material.

Context Windows as Temporary Working Memory

Modern language models process information inside a context window.

A context window can be thought of as the model’s temporary working space.

It may contain:

  • The user’s latest question
  • Previous messages
  • Documents
  • Code samples
  • Application data
  • Tool results
  • Formatting instructions
  • Examples of expected output

The model uses all available information inside that window when generating its response.

A larger context window allows the model to consider more information at once.

However, a larger context window does not automatically guarantee a better result.

Problems can still occur when:

  • Important information is buried inside long documents.
  • Irrelevant content distracts the model.
  • Multiple sources contradict each other.
  • Instructions are ambiguous.
  • The provided information is outdated.
  • The system retrieves the wrong documents.

Effective context management is therefore becoming an important part of AI application design.

Developers must decide:

  • What information should be included?
  • What information should be removed?
  • Which sources are trustworthy?
  • How should documents be divided into chunks?
  • How many passages should be retrieved?
  • How should conflicting information be handled?

The quality of the context often determines the quality of the response.

Context Is Powerful, but It Is Not Truth

The transition to contextual processing is a major technological improvement, but context does not guarantee correctness.

An LLM can misunderstand an ambiguous request.

It can give too much importance to irrelevant information.

It can produce a plausible answer unsupported by reliable evidence.

It can also be affected by incomplete, outdated, misleading, or intentionally manipulated context.

This leads to an essential distinction:

Semantic similarity is not the same as factual correctness.

Two passages can be contextually related while disagreeing with each other.

A model can understand what a user is asking and still provide the wrong answer.

Responsible LLM applications therefore need more than a large model.

Depending on the use case, they may also require:

  • Reliable source retrieval
  • Citation and provenance tracking
  • Structured validation
  • Business-rule enforcement
  • Permission controls
  • Human review
  • Monitoring and evaluation
  • Clear uncertainty handling
  • Security protections
  • Data-quality controls

The quality of an answer depends not only on the model but also on the quality of the context supplied to it.

Traditional Algorithms Still Matter

The rise of contextual AI does not mean traditional text-processing algorithms are obsolete.

Exact matching remains essential when working with:

  • Passwords
  • Unique identifiers
  • Database keys
  • Configuration settings
  • Programming-language syntax
  • Security rules

Regular expressions remain valuable for:

  • Input validation
  • Pattern extraction
  • Log processing
  • Data cleaning
  • Format checking

Fuzzy matching remains useful for:

  • Typographical errors
  • Name matching
  • Duplicate records
  • Search suggestions

Keyword search remains effective when:

  • Exact terminology matters
  • Users know the correct vocabulary
  • Deterministic behavior is required
  • Search results must be easily explainable

In many production systems, the strongest solution combines multiple techniques.

For example, an application might use:

  1. Exact matching for security and business rules.
  2. Keyword search for high-precision retrieval.
  3. Embeddings for semantic similarity.
  4. An LLM for explanation and response generation.
  5. Validation logic to verify the final result.

Contextual AI adds another powerful tool. It does not replace every tool that came before it.

We Are Moving Toward Situation-Aware Systems

The history of text-processing software can be summarized as a progression.

Exact matching asked:

“Are these characters identical?”

Fuzzy matching asked:

“How similar are these character sequences?”

Keyword retrieval asked:

“How many important words do these texts share?”

Static embeddings asked:

“Are these words generally related?”

Contextual embeddings asked:

“What do these words and sentences mean here?”

Large language models ask, in effect:

“Given this entire situation, what response or continuation is most appropriate?”

The next generation of AI systems will expand the definition of context even further.

Context may include not only text, but also:

  • Images
  • Audio
  • Video
  • Application state
  • Tool results
  • Database records
  • User history
  • Real-time events
  • Organizational policies
  • Long-term memory

The comparison will increasingly move from text-to-text toward situation-to-situation.

A future software assistant may not simply compare a new error message with an old error message.

It may compare:

  • Current application logs
  • Recent code changes
  • Infrastructure metrics
  • Previous incidents
  • Service dependencies
  • Deployment history
  • Test results
  • The developer’s question

with the complete context of earlier production failures.

That is a much richer form of intelligence than searching for a matching string.

Final Thoughts

The evolution of language technology is not simply a story about models becoming larger.

It is a story about representation.

Characters became words.

Words became weighted features.

Words became vectors.

Vectors became contextual.

Sentences became semantic representations.

Prompts became temporary task environments.

External documents became retrievable memory.

Today, LLM-powered systems can compare not only what two pieces of text say, but also what they are trying to communicate within a larger situation.

That is the transition from string-to-string comparison to context-to-context comparison.

It does not eliminate the need for traditional algorithms.

Exact matching, regular expressions, edit distance, keyword search, and deterministic rules remain valuable.

In many production systems, the best solution combines these techniques with embeddings, retrieval systems, and language models.

The real advancement is not that software has stopped processing strings.

It is that software can now build representations that go far beyond the strings themselves.

And that change is transforming how we search, communicate, automate, and build software.

Understanding Model Context Protocol (MCP) and the Role of MCP Servers

What is Model Context Protocol?

The rapid evolution of AI tools—especially large language models (LLMs)—has brought a new challenge: how do we give AI controlled, secure, real-time access to tools, data, and applications?
This is exactly where the Model Context Protocol (MCP) comes into play.

In this blog post, we’ll explore what MCP is, what an MCP Server is, its history, how it works, why it matters, and how you can integrate it into your existing software development process.

MCP architecture

What Is Model Context Protocol?

Model Context Protocol (MCP) is an open standard designed to allow large language models to interact safely and meaningfully with external tools, data sources, and software systems.

Traditionally, LLMs worked with static prompts and limited context. MCP changes that by allowing models to:

  • Request information
  • Execute predefined operations
  • Access external data
  • Write files
  • Retrieve structured context
  • Extend their abilities through secure, modular “servers”

In short, MCP provides a unified interface between AI models and real software environments.

What Is a Model Context Protocol Server?

An MCP server is a standalone component that exposes capabilities, resources, and operations to an AI model through MCP.

Think of an MCP server as a plugin container, or a bridge between your application and the AI.

An MCP Server can provide:

  • File system access
  • Database queries
  • API calls
  • Internal business logic
  • Real-time system data
  • Custom actions (deploy, run tests, generate code, etc.)

MCP Servers work with any MCP-compatible LLM client (such as ChatGPT with MCP support), and they are configured with strict permissions for safety.

History of Model Context Protocol

Early Challenges with LLM Tooling

Before MCP, LLM tools were fragmented:

  • Every vendor used different APIs
  • Extensions were tightly coupled to the model platform
  • There was no standard for secure tool execution
  • Maintaining custom integrations was expensive

As developers started using LLMs for automation, code generation, and data workflows, the need for a secure, standardized protocol became clear.

Birth of MCP (2023–2024)

MCP originated from OpenAI’s efforts to unify:

  • Function calling
  • Extended tool access
  • Notebook-like interaction
  • File system operations
  • Secure context and sandboxing

The idea was to create a vendor-neutral protocol, similar to how REST standardized web communication.

Open Adoption and Community Growth (2024–2025)

By 2025, MCP gained widespread support:

  • OpenAI integrated MCP into ChatGPT clients
  • Developers started creating custom MCP servers
  • Tooling ecosystems expanded (e.g., filesystem servers, database servers, API servers)
  • Companies adopted MCP to give AI controlled internal access

MCP became a foundational building block for AI-driven software engineering workflows.

How Does MCP Work?

MCP works through a client–server architecture with clearly defined contracts.

1. The MCP Client

This is usually an AI model environment such as:

  • ChatGPT
  • VS Code AI extensions
  • IDE plugins
  • Custom LLM applications

The client knows how to communicate using MCP.

2. The MCP Server

Your MCP server exposes:

  • Resources → things the AI can reference
  • Tools / Actions → things the AI can do
  • Prompts / Templates → predefined workflows

Each server has permissions and runs in isolation for safety.

3. The Protocol Layer

Communication uses JSON-RPC over a standard channel (typically stdio or WebSocket).

The client asks:

“What tools do you expose?”

The server responds with:

“Here are resources, actions, and context you can use.”

Then the AI can call these tools securely.

4. Execution

When the AI executes an action (e.g., database query), the server performs the task on behalf of the model and returns structured results.

Why Do We Need MCP?

– Standardization

No more custom plugin APIs for each model. MCP is universal.

– Security

Strict capability control → AI only accesses what you explicitly expose.

– Extensibility

You can build your own MCP servers to extend AI.

– Real-time Interaction

Models can work with live:

  • data
  • files
  • APIs
  • business systems

– Sandbox Isolation

Servers run independently, protecting your core environment.

– Developer Efficiency

You can quickly create new AI-powered automations.

Benefits of Using MCP Servers

  • Reusable infrastructure — write once, use with any MCP-supported LLM.
  • Modularity — split responsibilities into multiple servers.
  • Portability — works across tools, IDEs, editor plugins, and AI platforms.
  • Lower maintenance — maintain one integration instead of many.
  • Improved automation — AI can interact with real systems (CI/CD, databases, cloud services).
  • Better developer workflows — AI gains accurate, contextual knowledge of your project.

How to Integrate MCP Into Your Software Development Process

1. Identify AI-Ready Tasks

Good examples:

  • Code refactoring
  • Automated documentation
  • Database querying
  • CI/CD deployment helpers
  • Environment setup scripts
  • File generation
  • API validation

2. Build a Custom MCP Server

Using frameworks like:

  • Node.js MCP Server Kits
  • Python MCP Server Kits
  • Custom implementations with JSON-RPC

Define what tools you want the model to access.

3. Expose Resources Safely

Examples:

  • Read-only project files
  • Specific database tables
  • Internal API endpoints
  • Configuration values

Always choose minimum required permissions.

4. Connect Your MCP Server to the Client

In ChatGPT or your LLM client:

  • Add local MCP servers
  • Add network MCP servers
  • Configure environment variables
  • Set up permissions

5. Use AI in Your Development Workflow

AI can now:

  • Generate code with correct system context
  • Run transformations
  • Trigger tasks
  • Help debug with real system data
  • Automate repetitive developer chores

6. Monitor and Validate

Use logging, audit trails, and usage controls to ensure safety.

Conclusion

Model Context Protocol (MCP) is becoming a cornerstone of modern AI-integrated software development. MCP Servers give LLMs controlled access to powerful tools, bridging the gap between natural language intelligence and real-world software systems.

By adopting MCP in your development process, you can unlock:

  • Higher productivity
  • Better automation
  • Safer AI integrations
  • Faster development cycles

Powered by WordPress.com.

Up ↑