I packaged up the "autoresearch" project into a new self-contained minimal repo if people would like to play over the weekend. It's basically nanochat LLM training core stripped down to a single-GPU, one file version of ~630 lines of code, then:
- the human iterates on the prompt (.md)
- the AI agent iterates on the training code (.py)
The goal is to engineer your agents to make the fastest research progress indefinitely and without any of your own involvement. In the image, every dot is a complete LLM training run that lasts exactly 5 minutes. The agent works in an autonomous loop on a git feature branch and accumulates git commits to the training script as it finds better settings (of lower validation loss by the end) of the neural network architecture, the optimizer, all the hyperparameters, etc. You can imagine comparing the research progress of different prompts, different agents, etc.
https://t.co/YCvOwwjOzF
Part code, part sci-fi, and a pinch of psychosis :)
🚨 Anthropic dropped a FREE 33-page playbook revealing Claude's very own cheat code:
The 'Skills' folder.
Spend 30 minutes building it,
and you’ll never have to explain your process again.
Top-tier users don't just type commands, they build systems.
Playbook link in 🧵↓
Fusion of 𝗥𝗔𝗚 (Retrieval Augmented Generation) and 𝗖𝗔𝗚 (Cache Augmented Generation). You must understand fundamentals behind this architecture to save costs and reduce your system latency efficiently. So how can you benefit from it as AI Engineer?
Let’s see what it looks like and what additional considerations should be taken into account.
Here are example steps to implement CAG + RAG architecture:
𝘋𝘢𝘵𝘢 𝘗𝘳𝘦𝘱𝘳𝘰𝘤𝘦𝘴𝘴𝘪𝘯𝘨:
𝟭. We use only rarely changing data sources for Cache Augmented Generation. On top of the requirement of data changing rarely we should also think about which of the sources are often hit by relevant queries. Once we have this information, only then we pre-compute all of this selected data into a KV Cache of the LLM. Cache it in memory. This only needs to be done once, the following steps can be run multiple times without recomputing the initial cache.
𝟮. For RAG, if necessary, precompute and store vector embeddings in a compatible database to be searched later in step 4. Sometimes simpler data types are enough for RAG, a regular database might suffice.
𝘘𝘶𝘦𝘳𝘺 𝘗𝘢𝘵𝘩:
We can now utilise the preprocessed data.
𝟯. Compose a prompt including user query and the system prompt with instructions on how cached context and retrieved external context should be used by the LLM.
𝟰. Embed a user query to be used for semantic search via vector DBs and query the context store to retrieve relevant data. If semantic search is not required, query other sources, like real time databases or web.
𝟱. Enrich the final prompt with external context retrieved in step 4.
𝟲. Return the final answer to the user.
𝘚𝘰𝘮𝘦 𝘊𝘰𝘯𝘴𝘪𝘥𝘦𝘳𝘢𝘵𝘪𝘰𝘯𝘴:
➡️ Context window is not infinite and even while some models boast enormous context window sizes, the needle in the haystack problem has not yet been solved so use available context wisely and cache only the data you really need.
✅ For some business cases, specific datasets are extremely valuable to be passed to the model as cache. Think about an assistant that has to always comply with a lengthy set of internal rules stored in multiple documents.
✅ While CAG has been popularised for Open Source just recently, it is already viable for some time via Prompt Caching features in OpenAI and Anthropic APIs. It is really easy to start prototyping there.
✅ You should always separate hot and cold data sources, only use cold (data that changes rarely) in your cache, otherwise the data will go stale and the application will go out of sync.
❌ Be very careful about what you cache as the data will be available for all users to query.
❌ It is very hard to ensure RBAC for cached data unless you have a separate model with its own cache per role.
Have you used the combination already?
OpenAI, Google, and Anthropic just published guides on:
• Prompt engineering
• Building agents
• AI in business
• 601 AI use cases
9 of the best guides you can't miss:
"Context Engineering for Multi-Agent Systems: Move beyond prompting to build a Context Engine, a transparent architecture of context and reasoning" — at https://t.co/r81mcAePuF v/ @PacktDataML
𝓦𝓱𝓪𝓽 𝓨𝓸𝓾 𝓦𝓲𝓵𝓵 𝓛𝓮𝓪𝓻𝓷:
🔵Develop memory models to retain short-term and cross-session context
🟣Craft semantic blueprints and drive multi-agent orchestration with MCP
🟠Implement high-fidelity RAG pipelines with verifiable citations
🟡Apply safeguards against prompt injection and data poisoning
🔵Enforce moderation and policy-driven control in AI workflows
🟣Repurpose the Context Engine across legal, marketing, and beyond
🟠Deploy a scalable, observable Context Engine in production
The LLM Engineering Roadmap.
If you want to start today, here's the roadmap👇
1️⃣ LLM Foundations
Start by understanding Python and LLM APIs and how they work.
Learn prompt engineering, structured outputs, and tool use.
↳ Python/Typescript Basics
↳ LLM APIs
↳ Prompt Engineering
↳ Structured Outputs
↳ Function Calling
2️⃣ Vector Stores
Before building anything, you need to understand how text becomes vectors.
Learn embedding models, chunking strategies, and similarity search.
↳ Embedding Models (OpenAI Ada, Cohere, BGE)
↳ Vector Databases (Pinecone, Qdrant, ChromaDB, FAISS)
↳ Chunking Strategies
↳ Similarity Search
3️⃣ Retrieval-Augmented Generation (RAG)
This is how LLMs answer questions using your data.
You learn how to retrieve context and feed it correctly.
↳ Orchestration Frameworks (LangChain, LlamaIndex)
↳ Ingesting Documents
↳ Retrieval Methods (Dense, BM25, Hybrid)
↳ Reranking
↳ Prompt Templates
4️⃣ Advanced RAG
This steps helps you understand how to make RAGs reliable and accurate.
↳ Query Transformation
↳ HyDE
↳ Corrective RAG
↳ Self-RAG
↳ Graph RAG
5️⃣ Fine-Tuning
Sometimes prompts are not enough for a specialised use case.
Fine-tuning will help you understand how models learn domain-specific behaviour.
↳ Data Preparation
↳ LoRA, QLoRA, DoRA
↳ SFT, DPO, RLHF
↳ Training Tools (Unsloth, Axolotl, HF TRL)
6️⃣ Inference Optimization
Once systems work, they need to be fast and affordable.
This step focuses on learning performance and cost efficiency.
↳ Quantization (GGUF, GPTQ, AWQ)
↳ Serving Engines (vLLM, TGI, llama.cpp)
↳ KV Cache
↳ Flash Attention
↳ Speculative Decoding
7️⃣ Deployment
Models are useless if they stay in notebooks.
Here you learn how to ship LLM systems to users.
↳ GPU Scheduling
↳ Cloud Platforms (AWS Bedrock, GCP Vertex AI)
↳ Docker, Kubernetes
↳ FastAPI, Streaming (SSE)
8️⃣ Observability
This step helps you track quality, latency, and cost.
↳ Tracing (LangSmith, Langfuse, Arize Phoenix)
↳ Latency (TTFT)
↳ Token Usage
↳ Cost Tracking
9️⃣ Agents
Agents allows LLMs to plan and use tools.
Learn them to understand how LLMs solve multi-step and complex tasks.
↳ Frameworks (LangGraph, CrewAI, Autogen)
↳ Function Calling
↳ Memory Systems
↳ Patterns (ReAct, Plan-and-Execute, Multi-Agent)
🔟 Production & Security
Production LLM systems can fail in subtle ways.
This step helps you prevent misuse, outages, and cost spikes.
↳ Prompt Injection Defense
↳ Guardrails (NeMo, Guardrails AI)
↳ Semantic Caching
↳ Fallbacks & Rate Limiting
♻️ Repost if you found this insightful
Follow us for more AI engineering content!
This Novak Djokovic piece by Billy Oppenheimer is one of the best I've ever read.
"Days after a quarterfinals loss in the 2010 French Open, Novak Djokovic told his coach, Marian Vajda, that he had decided to quit playing tennis.
He was No. 3 in the world, a grand slam winner, and a favorite to win Wimbledon.
After Djokovic said he was quitting, Vajda asked,
“Why did you start playing this sport?”
Vajda immediately sensed what the problem was:
Djokovic was focusing too much on rankings, records, titles, and external expectations. As a result, Djokovic said, “I was mentally at one very messed up place.”
As Djokovic thought about Vajda’s question, he thought about how many of his earliest childhood memories include his “most beloved toy”—a mini tennis racket and a soft foam ball.
He started playing tennis, answering Vajda’s question, “because I just really loved holding that racket in my hand.”
“Do you still love holding a racket in your hand?” Vajda asked.
Djokovic thought about it for a few seconds, got excited, and said:
“I do. I still love holding a racket in my hand. Whether it’s a grand slam final on center court or just playing around on a public court, I like playing for the sake of playing.”
Vajda nodded, “Well that’s your source. That's what you need to tap into. Put aside rankings and what you want to achieve and what you think others are expecting of you.”
Vajda then suggested that Djokovic take a few weeks off.
Djokovic agreed that he would.
But when he woke up the next morning, Djokovic was dying to hit tennis balls. He went to the courts to play for the sake of playing. “And I never looked back ever since that moment.”
The following season, Djokovic enjoyed one of the greatest seasons in sports history. He won 43 straight matches. He won three Grand Slams, including his first Wimbledon title. And he finished the year as the number one player in the world.
“I started to play freely,” he says of that season. “I became the kid that I was when I started playing.”
Takeaway 1:
There's a word for being like the kid who does something for the sake of doing it:
Autotelic.
From the Greek "auto" (self) & "telos" (end)—an Autotelic is "someone or something that has a purpose in, and not apart from, itself."
As opposed to someone who focuses on rankings, records, titles, and external expectations—for an Autotelic.
”The work is the win,” as Ryan Holiday once told me.
Since you control the effort more than the outcome,
“Ultimately, you have to love doing it,” Ryan said. “You have to get to a place where doing the work is the win and everything else is extra.”
Takeaway 2:
When reading about Autotelics—people who describe their work as play, who simply seem to love what they do—a common mistake is to think that it’s all bliss all the time.
One of my favorite Autotelics is the legendary skateboarder Rodney Mullen, who is in his 50s and still skateboards every day.
“There are days,” Rodney said, “where you don’t want to go out. Or it hurts. Or you’re sore. Or you just suck—you're not making progress, and you feel defeated...But that's the nature of love—it's got hate in there, it's got pain in there. And that’s what draws you in, that's the magnetism.”
At one point during the recent Wimbledon final, Djokovic angrily smashed and shattered his racket. And after losing the match, he admitted that it will take him a while to get over the loss.
That’s the nature of love—it’s got hate in there, it’s got pain in there."
Multi-vector embeddings (ColBERT, ColPali) are budget killers.
But MUVERA can cut your memory footprint by 70%.
Multi-vector models offer incredible retrieval but suffer from massive memory overhead and slow indexing. MUVERA (Multi-Vector Retrieval via Fixed Dimensional Encodings) compresses these into single, fixed-dimensional vectors.
How it works:
MUVERA condenses a sequence of vectors (e.g., 100x96d) into one vector via:
1️⃣ Space Partitioning: Groups vectors into buckets using SimHash or k-means clustering.
2️⃣ Dimensionality Reduction: Applies random linear projection to compress each sub-vector while preserving dot products.
3️⃣ Repetitions: Repeats the process multiple times and concatenates results to improve accuracy.
4️⃣ Final Projection: Optional final compression (not used in Weaviate's implementation).
The impact (LoTTE benchmark):
- Memory: 12GB → <1GB.
- Indexing: 20+ mins → 3-6 mins.
- HNSW Graph: 99% smaller.
There’s a trade-off:
You trade a slight dip in raw recall for massive efficiency gains. However, by tuning the HNSW `ef` parameter (e.g., `ef=512`), you can recover 80-90%+ recall while keeping costs low.
When should you use MUVERA?
→ Large-scale production RAG
→ Systems where memory/infrastructure costs are the direct bottleneck
→ Use cases requiring fast indexing
MUVERA in @weaviate_io 1.31+ takes just a couple of lines of code. You can tune three parameters (k_sim, d_proj, r_reps) to balance memory usage and retrieval accuracy for your specific use case.
Read the full technical deep-dive here: https://t.co/Umn6gPQMuh