惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CXSECURITY Database RSS Feed - CXSecurity.com
L
LINUX DO - 热门话题
S
Secure Thoughts
TaoSecurity Blog
TaoSecurity Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Threat Research - Cisco Blogs
AI
AI
B
Blog RSS Feed
S
Schneier on Security
雷峰网
雷峰网
Schneier on Security
Schneier on Security
Help Net Security
Help Net Security
Cloudbric
Cloudbric
L
LINUX DO - 最新话题
罗磊的独立博客
有赞技术团队
有赞技术团队
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
The Hacker News
The Hacker News
博客园 - Franky
Attack and Defense Labs
Attack and Defense Labs
The Cloudflare Blog
Webroot Blog
Webroot Blog
Last Week in AI
Last Week in AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 叶小钗
美团技术团队
L
Lohrmann on Cybersecurity
T
The Blog of Author Tim Ferriss
The Last Watchdog
The Last Watchdog
T
Troy Hunt's Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Vercel News
Vercel News
Know Your Adversary
Know Your Adversary
O
OpenAI News
博客园 - 【当耐特】
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
Cybersecurity and Infrastructure Security Agency CISA
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
PCI Perspectives
PCI Perspectives
H
Heimdal Security Blog
I
InfoQ
GbyAI
GbyAI
T
Threatpost
C
Cisco Blogs

Analytics Vidhya

Handling Imbalanced Classification: What Works Better Than SMOTE GPT-5.6 Is Here: Sol, Terra, and Luna Loop Engineering for AI Agents: How /loop is Changing AI Workflows DeepSeek DSpark: The Speculative Decoding Trick Behind 400% Faster LLM OKF: Redefining Knowledge Bases for AI Agents Modern VLMs Explained: How GPT-4o, Gemini, Claude Vision, and Qwen-VL Work YOLO26 Tutorial: Object Detection, Pose Estimation & More Large Action Models (LAMs) vs Agentic LLMs: What's the Real Difference? Claude Sonnet 5: The Fable 5 at Home The Best $20 AI Plan: ChatGPT Plus vs Claude Pro vs Gemini Pro GraphRAG vs Vector RAG: Which Retrieval Method is Best? Using AI When You Don’t Trust AI The Self-Improving Loop in AI Agents: Architecture, Benefits, and How it Outperforms Traditional Agent Workflows Harness-1: The 20B Retrieval Subagent That Beats GPT-5.4 at Search Sakana Fugu: Multi-Agent System as a Model Claude's Hidden Art Skill: Making Illustrations With Code System Design for ML Interviews: 10 Real Problems Walked Through Most People Use ChatGPT Wrong: 10 Features and Tips That Changed How I Work OpenAI Just Launched 3 Free AI Courses with Certificates Autoregressive Models: Predicting the Future Using the Past Gemini Omni: AI Video Generation Inside Gemini DiffusionGemma: Google’s Diffusion-Based Open Model for Faster Text Generation Top 10 AI Engineering Tools Everyone is Using in 2026 I Tested Claude Fable 5: Can Anthropic’s Newest AI Deliver on the Hype? Prophet vs NeuralProphet vs TimeGPT vs Chronos: A Practical Comparison Build an Emergency Helpline Voice Agent with LangChain Choosing the Right Vector Database for RAG and AI Applications Google Gemma 4 12B: Architecture, Benchmarks, Access, and Hands-on Guide for Developers How to Choose the Right AI Model for Your Needs Agent Observability with LangSmith, Langfuse, and Arize: A Hands-On Comparison How to Use Claude Managed Agents? Google AI Studio vs Gemini App: What’s the Difference? AI Workflows for Sales Teams: Prospect Research, Lead Qualification, and CRM Updates on Autopilot Using LangGraph 25 Most Influential AI Pioneers to Meet at DataHack Summit 2026 Claude Opus 4.8: A Smarter Model in the Right Direction PySpark Optimization: 12 Proven Techniques to Speed Up Your Spark Jobs 10 Everyday Tasks You Can Automate with AI Today (With n8n Templates) Google Antigravity 2.0: The Full Developer Guide (I/O 2026) Build a Claude Cowork-Like Browser Agent Using Playwright MCP and Claude Desktop Pandas vs Polars vs DuckDB: Which Library Should You Choose? Qwen3.7-Max: Alibaba’s New Agent-First LLM for Coding, Reasoning, and Long-Horizon AI Workflows The Biggest Announcements from Google I/O 2026 Top 9 AI Events and Conferences in 2026 that you Must Attend Gemini 3.5 Flash: Frontier Intelligence with Speed Kimi WebBridge: Hands-on Guide to Kimi’s Browser Extension for AI Agents 40 Advanced SQL Window Functions Every Data Scientist Must Know(with examples) Top 10 AI Research Papers of 2025 6 Steps to Crack GenAI Case Study Interviews (With Real Examples) OpenAI Omni Moderation: How to Filter Text & Images for Free DataHack Summit 2026: You Just Cannot Skip This AI Event of the Year OpenAI’s New API Voice Models Will Change the Way You Use AI Hermes Agent Guide: What is it and How to Use it? Top 10 LLM Research Papers of 2026 10 AI Agents Every AI Engineer Must Build (with GitHub Samples) 23 Tips for Smart Claude Code Token Saving and Workflow Optimization Feature Engineering with LLMs: Techniques & Python Examples ChatGPT is Now Inside Excel and Google Sheets: Here is How to Use it Gemini API File Search: The Easy Way to Build RAG Top 10 Open-Source Libraries to Fine-Tune LLMs Locally ML Intern in Practice: From Prompt to a Shipped Hugging Face Model 15+ Solved Agentic AI Projects with Github Links How People are Figuring Out Life With Claude MemPalace Explained: Building Long-Term Memory for AI Agents Beyond RAG Grok Voice Think Fast 1.0: Build Voice AI Agents That Actually Think Compressing LSTM Models for Retail Edge Deployment: A Practical Comparison MCP vs Agent Skills: Different Altogether GPT 5.5 vs Opus 4.7: Which is the Best AI Model Today? What is Agentic AI? Claude Code vs Codex: A Detailed Terminal Agent Comparison Google Deep Research Max: Build Autonomous AI Research Agents in Minutes Meta Muse Spark Review: Is It Worth the Hype? ChatGPT Images 2.0 vs Nano Banana 2: Which is Better? Cursor V3 Explained: The AI Coding Agent That’s Replacing Traditional IDEs in 2026 DeepSeek-V4: The Most Powerful Open-Source Model Ever Is GPT Image 2 the Best Image Generation Model? Token Economics: Why AI is Getting “Cheaper” From Idea to Output: Claude Does the Design Work Opus 4.7 vs Opus 4.6: Should You Switch? Build Human-Like AI Voice App with Gemini 3.1 Flash TTS How to Structure a Claude Code Project that Thinks Like an Engineer Gemma 4 Tool Calling Explained: Build AI Agents with Function Calling (Step-by-Step Guide) Anthropic Launches Claude Opus 4.7 For “Most Difficult Tasks” Top 28 Claude Shortcuts that will 10X your Speed GPT-5.4-Cyber: Why OpenAI is Keeping its Most Powerful Model Under Lock and Key Google AI Studio Guide: Every Feature Explained Mastering Deep Agents: Context Engineering that Actually Works 21 Computer Vision Projects from Beginner to Advanced (2026 Guide) Excel 101: Excel Agent Mode Explained MiniMax M2.7 Goes Open-Weight to Let You Run Agents Locally Top 10 Gemma 4 Projects That Will Blow Your Mind GLM-5.1: Architecture, Benchmarks, Capabilities & How to Use It Understanding BERTopic: From Raw Text to Interpretable Topics From Karpathy’s LLM Wiki to Graphify: AI Memory Layers are Here 10 Most Important AI Concepts Explained Simply Project Glasswing is World’s Most Powerful AI in Action How to Run Gemma 4 on Your Phone Without Internet: A Hands-On Guide Running Claude Code for Free with Gemma 4 and Ollama LLM Wiki Revolution: How Andrej Karpathy’s Idea is Changing AI Rethinking Enterprise Search: How Cortex Search Turns Data into Business Impact Google’s Gemma 4: Is it the Best Open-Source Model of 2026?
Agent Memory Patterns in Cognitive Science and AI Systems
Janvi Kumari · 2026-05-09 · via Analytics Vidhya

Memory shapes how humans think and how AI agents act. Without it, an agent only responds to the current input; with it, it can keep context, recall past actions, and reuse useful knowledge.

AI memory spans short-term, episodic, semantic, and long-term memory, each with different design trade-offs around storage, retention, retrieval, and control. In this article, we’ll explore agent memory patterns, a practical bridge between cognitive science and AI engineering.

What Agent Memory Means

Agent memory is the ability of an AI agent to store information, recall it later, and use it to improve future responses or actions. It allows the agent to remember past experiences, maintain context, recognize useful patterns, and adapt across interactions. 

This is important because an LLM does not automatically remember everything across sessions. By default, it mainly works with the input available in the current context window. Memory must be added as a separate design layer around the model. This layer decides what should be saved, how it should be organized, and when it should be retrieved. 

In a simple chatbot, memory may only mean keeping the last few messages in the conversation. In a more advanced AI agent, memory can include user preferences, past actions, task history, tool outputs, decisions, mistakes, and learned facts. This helps the agent avoid starting from zero every time. 

For example, a deployment assistant may remember that a user works on the api-gateway service. It may also remember that production deployments need approval on Fridays. When the user later asks, “Can I deploy today?”, the agent can use that stored information to give a more useful answer. 

So, agent memory is not just storage. It is a full process: 

Agent Memory flowchart

Each step matters. A good memory system should store useful information, retrieve only what is relevant, and keep the final response grounded in reliable context. This is why agent memory must be treated as part of system design, not just as a database feature. 

Memory Types: From Cognitive Science to AI Agents

AI agent memory is easier to understand when we connect it with human memory. In cognitive science, memory is divided into different systems because each system has a different purpose. The same idea applies to AI agents. A well-designed agent should not store every memory in one place. It should use different memory types for different tasks. 

  • Short-term memory handles the current task using recent messages, temporary notes, tool outputs, or the current goal. It is usually implemented through a rolling buffer, conversation state, or context window.
  • Long-term memory stores information across sessions, such as user preferences, past interactions, policies, documents, or learned facts. It is often implemented using databases, knowledge graphs, vector embeddings, or persistent stores.
  • Episodic memory records specific past events, including user actions, tool calls, decisions, and outcomes. It helps with auditability, debugging, and learning from previous cases.
  • Semantic memory stores reusable knowledge such as facts, rules, preferences, and concepts. For example, “Production deployments on Fridays require approval” is semantic memory because it can guide future responses.

A simple way to compare these memory types is shown below: 

Memory Type What It Stores AI Agent Example Main Use
Short-term memory Current context and recent turns Last few user messages Maintain conversation flow
Long-term memory Information saved across sessions User profile or project history Personalization and continuity
Episodic memory Specific events and outcomes “User asked about deployment approval yesterday” Traceability and learning from history
Semantic memory Facts, rules, and concepts “Friday production deploys need SRE approval” Reusable knowledge and reasoning
Types of Agent Memory

Agent Memory Architecture and Data Flow

After understanding memory types, the next step is seeing how they work together inside an AI agent. A good memory system does not store everything in one place. It separates memory into layers and moves information carefully between them.

The agent receives user input, uses short-term memory for the current conversation, and retrieves relevant long-term memory when needed. After responding or acting, it can save the interaction as episodic memory. Over time, important or repeated information can become semantic memory.

This flow keeps the agent useful without overloading the context window. Since LLMs do not remember everything across sessions by default, memory must be added around the model. A good system stores only useful information and retrieves only what is relevant.

User Input

In this architecture, short-term memory supports the current task. Episodic memory records what happened. Semantic memory stores stable facts, rules, and preferences. Long-term memory connects these layers and makes useful information available in future sessions. 

A practical agent memory pipeline usually follows these steps: 

Step What Happens Example
Input The user sends a query “Can I deploy today?”
Short-term memory The agent checks recent context User is working on api-gateway
Retrieval The agent searches stored memory Friday deployments need approval
Reasoning The agent combines query and memory Today is Friday, approval is needed
Response The agent gives an answer “You can deploy only after SRE approval.”
Episodic write The interaction is logged User asked about Friday deployment
Semantic update Stable facts may be saved Production Friday deploys require approval

This design keeps the system clean. Raw events are stored first. Stable knowledge is created later. The agent retrieves only the most relevant memories instead of placing all past data into the prompt. This makes the system faster, easier to evaluate, and safer to manage.  

Hands-on: Building Agent Memory with LangGraph in Google Colab

In this hands-on section, we will build one LangGraph agent that uses three memory patterns: 

Memory Type Purpose
Short-term memory Keeps the current conversation thread active
Episodic memory Stores what happened in past interactions
Semantic memory Stores reusable facts, rules, and preferences

We want to build an agent that can: 

1. Remember the current conversation.
2. Save past interactions as episodic memory.
3. Store reusable facts as semantic memory.
4. Retrieve useful memory before answering. 

Example flow: 

Example Flow

Step 1: Install Required Packages 

!pip -q install -U langgraph langchain-openai 

Step 2: Set the API Key 

In Colab, use getpass so the key is hidden. 

import os
from getpass import getpass

if "OPENAI_API_KEY" not in os.environ:
    os.environ["OPENAI_API_KEY"] = getpass("Enter your OpenAI API key: ") 

Step 3: Import Libraries 

from dataclasses import dataclass
from datetime import datetime, timezone
import uuid

from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langgraph.graph import StateGraph, MessagesState, START
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.store.memory import InMemoryStore
from langgraph.runtime import Runtime 

Step 4: Create the Model 

model = ChatOpenAI(
    model="gpt-4o-mini",
    temperature=0
) 

We use temperature=0 so the output is more stable during the demo. 

Step 5: Create Shared Memory Components 

This demo uses one checkpointer and one memory store. 

embeddings = OpenAIEmbeddings(
    model="text-embedding-3-small"
)

store = InMemoryStore(
    index={
        "embed": embeddings,
        "dims": 1536
    }
)

checkpointer = InMemorySaver()

Here is what each component does: 

Component Purpose
InMemorySaver Stores short-term thread state
InMemoryStore Stores episodic and semantic memories
OpenAIEmbeddings Helps retrieve semantic memories using similarity search

Step 6: Define User Context 

We use user_id to keep memory separated by user. 

@dataclass
class AgentContext:
    user_id: str 

This is important because one user’s memory should not appear in another user’s conversation. 

Step 7: Add Helper Functions 

This helper extracts a semantic memory when the user says “remember that”. 

def extract_semantic_memory(message: str):
    lower_message = message.lower()

    if lower_message.startswith("remember that"):
        return message.replace("Remember that", "").replace("remember that", "").strip()

    return None

This helper formats stored memories before passing them to the model. 

def format_memories(items, key):
    if not items:
        return "No relevant memories found."

    return "\n".join(
        f"- {item.value[key]}"
        for item in items
    )

Step 8: Define the Agent Node 

This is the main part of the demo. The agent does four things: 

1. Reads the latest user message.
2. Retrieves semantic memories.
3. Generates a response.
4. Saves episodic and semantic memory. 

def agent_node(state: MessagesState, runtime: Runtime[AgentContext]):
    user_id = runtime.context.user_id
    latest_user_message = state["messages"][-1].content

    episodic_namespace = (
        "episodic_memory",
        user_id
    )

    semantic_namespace = (
        "semantic_memory",
        user_id
    )

    semantic_memories = runtime.store.search(
        semantic_namespace,
        query=latest_user_message,
        limit=5
    )

    semantic_memory_text = format_memories(
        semantic_memories,
        key="fact"
    )

    system_message = {
        "role": "system",
        "content": f"""
You are a helpful deployment assistant.

Use the memory below only when it is relevant.

Semantic memory:
{semantic_memory_text}
"""
    }

    response = model.invoke(
        [system_message] + state["messages"]
    )

    episode = {
        "timestamp": datetime.now(timezone.utc).isoformat(),
        "event": f"User asked: {latest_user_message}. Agent replied: {response.content}",
        "user_message": latest_user_message,
        "agent_response": response.content,
        "memory_type": "episodic"
    }

    runtime.store.put(
        episodic_namespace,
        str(uuid.uuid4()),
        episode
    )

    semantic_fact = extract_semantic_memory(latest_user_message)

    if semantic_fact:
        runtime.store.put(
            semantic_namespace,
            str(uuid.uuid4()),
            {
                "fact": semantic_fact,
                "memory_type": "semantic",
                "created_at": datetime.now(timezone.utc).isoformat()
            }
        )

    return {
        "messages": [response]
    }

Step 9: Build the LangGraph Agent 

builder = StateGraph(
    MessagesState,
    context_schema=AgentContext
)

builder.add_node("agent", agent_node)
builder.add_edge(START, "agent")

graph = builder.compile(
    checkpointer=checkpointer,
    store=store
)
LangGraph Agent diagram

At this point, the agent is ready. 

Step 10: Create a Thread and User Context 

config = {
    "configurable": {
        "thread_id": "deployment-thread-1"
    }
}

context = AgentContext(
    user_id="user-123"
)

The thread_id controls short-term memory. The user_id controls long-term memory separation. 

Demo 1: Short-Term Memory

Short-term memory helps the agent remember the current conversation thread. 

Run the first turn: 

response_1 = graph.invoke(
    {
        "messages": [
            {
                "role": "user",
                "content": "My service is api-gateway."
            }
        ]
    },
    config=config,
    context=context
)

print(response_1["messages"][-1].content)
Short-Term memory of LangGraph Agent

Run the second turn: 

response_2 = graph.invoke(
{
    "messages": [
        {
            "role": "user",
            "content": "Production has a freeze on Fridays."
        }
    ]
    },
    config=config,
    context=context
)

print(response_2["messages"][-1].content) 
Short-Term memory of LangGraph Agent 2

Now ask a follow-up question: 

response_3 = graph.invoke(
    {
        "messages": [
            {
                "role": "user",
                "content": "Can I deploy today?"
            }
        ]
    },
    config=config,
    context=context
)

print(response_3["messages"][-1].content)

Output: 

Short-Term memory of LangGraph Agent followup questions

From the output we can see that the agent remembers that the service is api-gateway and that production has a freeze on Fridays. 

This shows short-term memory because the agent uses earlier messages from the same thread. 

Demo 2: Episodic Memory

Episodic memory stores what happened during interactions. In our agent, every user message and agent response is saved as an episode. 

Run this cell to inspect saved episodic memories: 

episodic_namespace = (
    "episodic_memory",
    "user-123"
)

episodes = store.search(
    episodic_namespace,
    limit=10
)

for episode in episodes:
    print(episode.value["event"])
    print()

Output:

Episodic memory of LangGraph Agent

This is episodic memory because it stores specific events. It records what happened, when it happened, and how the agent responded. 

Demo 3: Semantic Memory

Semantic memory stores reusable facts. In this demo, the agent saves a semantic memory when the user starts a message with “Remember that”. 

Run this cell: 

response_4 = graph.invoke(
    {
        "messages": [
            {
                "role": "user",
                "content": "Remember that production deployments on Fridays require SRE approval."
            }
        ]
    },
    config=config,
    context=context
)

print(response_4["messages"][-1].content)
Semantic Memory

Now ask a question that should use this stored fact: 

response_5 = graph.invoke(
    {
        "messages": [
            {
                "role": "user",
                "content": "Can I deploy api-gateway on Friday?"
            }
        ]
    },
    config=config,
    context=context
)

print(response_5["messages"][-1].content)

Output: 

LangGraph Agent final response

We can see that the agent  answered that Friday production deployments require SRE approval. 

This shows semantic memory because the stored fact is reusable. It is not just a record of one event. It is knowledge the agent can use again later. 

Inspect Semantic Memory

Run this cell to see the saved semantic facts: 

semantic_namespace = (
    "semantic_memory",
    "user-123"
)

semantic_memories = store.search(
    semantic_namespace,
    query="Friday deployment approval",
    limit=5
)

for memory in semantic_memories:
    print(memory.value["fact"])

Output:

Inspecting Semantic Response
Memory Type Where It Appears in the Demo What It Does
Short-term memory Same thread_id Keeps the conversation connected
Episodic memory episodic_memory namespace Stores interaction history
Semantic memory semantic_memory namespace Stores reusable facts
User separation user_id in namespace Prevents memory mixing across users

This hands-on demo shows how different memory types can work together in one LangGraph agent. Short-term memory keeps the current conversation active. Episodic memory stores what happened. Semantic memory stores reusable knowledge. In Google Colab, in-memory storage is simple and useful for learning. For production systems, these memory layers should be moved to persistent storage so the agent can preserve memory after restarts.  

Choosing the Right Storage Backend

After building memory into an agent, the next question is where to store it. The best storage backend depends on how the memory will be used. 

Short-term memory needs fast access during the current conversation. Episodic memory needs to store events and history. Semantic memory needs search over facts, rules, and preferences. Long-term memory needs to stay available across sessions. 

Memory Type Good Storage Choice Why
Short-term memory In-memory store, Redis, PostgreSQL checkpointer Fast access during the active thread
Episodic memory SQLite, PostgreSQL, MongoDB Stores events, timestamps, and history
Semantic memory Vector store, Chroma, FAISS, PostgreSQL with vector support Supports search over meaning
Long-term memory PostgreSQL, MongoDB, durable key-value store Keeps memory across sessions

A good memory backend should also support separation by user, thread, and memory type. This prevents memory from mixing across users and makes retrieval easier to control. 

Choose the backend based on the memory’s job. Short-term memory needs speed. Episodic memory needs history. Semantic memory needs search. Long-term memory needs durability. A well-designed agent separates these memory layers so the system stays fast, searchable, and easier to manage. 

Security, Privacy, and Governance

Memory makes an agent more useful, but it also increases risk. When information is stored across sessions, wrong or sensitive memories can affect future responses. A memory system must therefore control what is saved, who can access it, how long it stays, and how it can be deleted. 

The main risks include memory poisoning, prompt injection through stored content, sensitive data leakage, cross-user memory leakage, and stale memory. For example, an agent should not save API keys, passwords, tokens, or private user data as memory. 

A safe memory system should follow a few clear rules: 

Rule Why It Matters
Store only useful information Reduces noise and unnecessary risk
Avoid secrets and sensitive data Prevents accidental exposure
Separate memory by user and project Avoids cross-user leakage
Validate important memories Prevents false or harmful memories
Support deletion Allows unsafe or outdated memory to be removed
Keep memory below system rules Prevents stored content from overriding core instructions

Memory should also include provenance when possible. The system should know where a memory came from, when it was created, and whether it is still valid. 

Agent memory should be useful, but it must also be controlled. A good memory system stores only safe and valuable information, separates users clearly, supports deletion, and prevents stored memories from overriding fixed system rules. This makes agent memory safer, more reliable, and easier to manage 

Conclusion

Agent memory helps AI agents maintain context, recall past interactions, and reuse useful knowledge. By separating memory into short-term, episodic, semantic, and long-term layers, developers can build agents that are more organized and reliable. Short-term memory supports the current conversation. Episodic memory records events. Semantic memory stores reusable facts. Long-term memory keeps important information across sessions. The LangGraph demo shows how these ideas can be implemented in practice. However, memory must be controlled carefully. A good system should store only useful information, protect sensitive data, support deletion, and prevent memory leakage. Well-designed memory makes agents more consistent, personalized, and trustworthy. 

Frequently Asked Questions

Q1. What is agent memory?

A. Agent memory lets AI agents store, recall, and reuse information to improve future responses.

Q2. Why do AI agents need different memory types?

A. Different memory types handle current context, past events, reusable facts, and long-term continuity.

Q3. What makes agent memory safe?

A. Safe memory stores only useful information, protects sensitive data, separates users, supports deletion, and prevents leakage.

Hi, I am Janvi, a passionate data science enthusiast currently working at Analytics Vidhya. My journey into the world of data began with a deep curiosity about how we can extract meaningful insights from complex datasets.