Not quite, I think: the idea is tempting. You collect everything you have ever written, train a model on it, and afterwards it writes like you. I tried it. It works. Partly. Sometimes well.
The idea
The idea is not new. Paul Iusztin made it public with "LLM Twin": collect your own posts, fine-tune a language model on them so it imitates your writing style, and make your own knowledge searchable on top, so it answers based on your content. There is code and a book. Second Me from Mindverse goes in the same direction, there it is called an "AI Self", trained on personal memories.
I found that interesting for two reasons. First, because I wanted to know whether it works. Second, because I have been trying to write more often for a year, and I thought: if a model does the first draft in my tone, I save the part I find hardest.
What I built
Nothing big. A small model, the kind we keep by the dozen. Training data: my texts. Blog articles, posts, longer emails, notes from projects. Plus a search over the same texts, so the model does not only sound like me but also knows what I have already said.
The effort was manageable. A few training runs, a few evenings. The expensive part, again, was not compute. The expensive part was the data. More on that further down.
How I set it up
If you want to rebuild it: the LLM Twin repo on GitHub (decodingai-magazine/llm-twin-course, MIT licence) is a good starting point. It is designed as a course, with twelve lessons, and the code is split into four Python services. That is more structure than you need for one evening, but the structure is right.
1. Data crawling: crawlers fetch your own texts from Medium, Substack, GitHub or LinkedIn and store them cleaned in a MongoDB. Changes go into a RabbitMQ queue via change data capture. I took a shortcut: one script that reads my markdown files and exported posts. No Mongo, no queue. For one person a folder is enough.
2. Feature pipeline: a Bytewax streaming pipeline takes the texts, cleans them, cuts them into chunks, computes embeddings and loads them into a Qdrant vector database. Qdrant runs locally in Docker for me. Chunking is the part I fiddled with longest: pieces too small lose context, pieces too large water down the search.
3. Training pipeline: an instruction dataset is generated from the texts, meaning pairs of task and my answer. A base model is then fine-tuned with LoRA or QLoRA. In the repo this runs on AWS SageMaker with Comet as experiment tracker and Opik for evaluation. I did it on my own GPU, with a model that fits on a single card. One run: under an hour.
4. Inference pipeline: the fine-tuned model is loaded, the request is enriched with matching chunks from Qdrant, and the answer goes out. In the repo as a REST endpoint on SageMaker with a Gradio UI. For me: a FastAPI service and a command line. I do not need more.
What convinced me about the repo: it separates retrieval and training cleanly. The model learns the tone, the vector database delivers the facts. Whoever packs both into one fine-tuning gets a model that knows my old numbers by heart and repeats them in the wrong places. Separated like this, I can update the texts without retraining.
Costs according to the repo: around one dollar of OpenAI API for generating the instruction dataset, under ten dollars of AWS for training. For me on my own hardware: the electricity bill and three evenings. That is the point I made in "Factor 400,000", only the other way round. My experience: a model that sounds like me is cheap. A model that thinks is not.
What I left out and still recommend as soon as it becomes more than a toy: experiment tracking. After the fifth training run you no longer know which data version produced which result. That is the same lesson as with our fifty micro-models. Without a log, at some point you just nod things through.
Where it is good
The tone. That surprised me. After a few training runs the twin had learned that I like short sentences, that I open with "Let me be honest", that I back a claim with a number and leave a sentence at the end that works on its own.
If I give it a topic I have already written about, I get a first draft I can read without getting annoyed. That is more than I can say about most generated text. It takes my examples, the 900 categories, the 80 MB for Apple, the rule that an agent never signs off its own work, and puts them where they fit.
Where it misses
As soon as I ask it something I have never written about, it gets interesting. It answers in my tone. Confident, short, with a number. Only the number is invented and the opinion is one I do not hold.
That is exactly the problem I know from the first months with language models: convincing and wrong. Only now it is wrong in my words, which is worse. Whoever reads the text takes it for my opinion.
And then there are the cases where it exaggerates me. I sometimes write "honestly". The twin writes it in every second paragraph. It learned what I do and does it three times as often. You read yourself as a caricature. That is instructive and uncomfortable.
The real problem is me
As with every model: the data was the problem. And the data was me.
For years I wrote little. What was there was inconsistent. Emails in a different tone than articles. Notes meant only for me. Old texts in which I claimed things I see differently today. The model took all of it equally seriously.
So I had to pick up the broom. Sort out what is no longer true. Separate opinion from note. Mark what was public and what was not. That was most of the work, and it was work on me, not on the model.
Along the way I learned something I was not looking for: how I write when I am not paying attention. No editor would have shown me that so clearly.
What I use it for today
For first drafts on topics I have already talked about. For the question "have I said something about this before, and what". And as a mirror: when the twin writes a sentence that embarrasses me, that sentence was probably in me before.
Not for: an opinion on something new. Not for numbers. Not for anything that goes out without me. What it writes is a beginning, and the beginning is good. The rest is still me.
A model that sounds like me is built in a few evenings. A model that thinks like me does not exist. In between is a tool that is sometimes good. And sometimes it shows me who I am when I am not looking.
Written by me. The thoughts, the values, the learnings, the mistakes: all mine. Grammar and spelling are corrected by a twin model of my own, trained on my texts. Sometimes that turns into a mix. Of course I read everything again, but nobody is infallible. Whatever stays in is mine too.