Archive
Micro AI Agents
As a writer and reviewer of documents, I’ve spent a lot of time considering how I would want to leverage AI tools to improve my writing. In most cases, I’ve observed the development of models that are similar to what something like Grammarly might provide. They can correct grammar, make suggestions on sentence structure, and potentially point out complex or unconfident words.
There is an AI improvement tool available within the portal I use to write my blog posts. I agree with only about half of what it suggests. As an immediate example, “provide” is not a complex word, but my AI suggestion bot thinks it is. I’m a linear writer by and large; I still outline my thoughts before I start, because I want to be sure I progress from idea to idea in a way that is easy to follow. Sometimes that results in long sentences, but when I use them, it’s with a purpose in mind. I’m very deliberate about my choices when I write.
And that’s where I tend to disagree with most modern writing agents when it comes to providing writing feedback. They can correct mechanics, possibly better and more consistently than I can. But where they miss is in language tone, word choice, elegance of phrase, use of techniques like alliteration even in prose, and other more subjective applications of writing skill.
They lose the uniqueness of the human perspective.
One of the topics that came up often as I reviewed documents at Amazon is how do we distill each reviewer’s unique approach to analysis into models that we can then deploy, and the concept I landed on was what I called “micro agents”. Rather than incorporate everything into a single large model that would then have to make judgments about which feedback to apply, I thought it would be more effective to be able to train a model how I, Rob, would review a document. I would then train another model how another reviewer would review the same document, because the feedback would be different. If I could come up with 10 or 20 models containing each reviewer’s “personalities”, and then deploy those, an author could then select which reviewer or reviewers they would like to apply.
There are several advantages to this approach.
First, the author could target tonally consistent perspectives. I don’t mind complex words, so I’d prefer to get feedback from someone (or something) that likewise is OK with complex words. And as a developer of a model, I don’t want to introduce that feedback loop into a model of another reviewer who has a different perspective on complex words.
Second, the author could leverage feedback with different perspectives from a consistent source without having an AI filter that perspective down or summarize options that are contradictory. I’ve literally had my AI arguing with itself at times as I’ve been writing content because it can’t maintain tonal consistency.
And third, the models could learn independently across many different iterations of different documents without all of them ending up at the same conclusion point. While there is an element of a selection bias by allowing the author to pick specific “experts” to give them advice, that also means that the feedback loop is relevant specifically to the expertise the model has been trained in.
In practice, I don’t want an all knowing model telling me what to do against a filtered set of options with a potential learning bias. I want to seek out the advice of experts at the thing I am doing who can be very, very good at the analysis I require; if I can’t get to them personally, then a model that thinks like them is the next best thing.
I don’t want my writing to end up sounding like everyone else’s because I used AI.
The same thing could apply to my composition of music. In a previous post, I talked about my interactions with ChatGPT as I composed my latest work, a Baroque style symphony. Imagine a composing world where you could pick two or three specific composers from a list and get feedback on how they specifically might approach a problem rather than a generalized answer. Several times I found myself disregarding feedback because it was tonally out of place. Several times I found myself arguing with ChatGPT about specific applications of things, and the answers, while thorough and grounded in theory, didn’t always tell me why they were being suggested or even if they aligned with the style of music I was writing.
As part of my interest in writing, I’ll be exploring if I can train an AI agent to review documents like I do, including analyzing where my approach differs from conventional wisdom. It will be interesting to see where that lands.
Happy writing!
Using ChatGPT As A Composer
I’ve experimented with AI quite a bit over the last year. I’ve used it to try to train a model to adopt my specific document review approaches. I’ve used it to build a portal on the fly to manage document uploads. I’ve used it when allowed during coding interviews. I even used it to a degree when building the scaffolding I used for those coding interviews, including a basic code, API, and test project.
Where I was most resistant to using it, though, was in my composing. I want what I produce to reflect me, not a machine. That said, I’ve found a specific and effective use for ChatGPT, in spite of all the ads telling me to stop using it “like Google”, because that’s exactly what I do with it.
When composing, I used ChatGPT to unblock by having it hopefully coalesce Google searches I would have executed myself and had to sift through to arrive at an answer.
I am currently writing a symphony. My first question to ChatGPT was to outline a typical approach to a Baroque style symphony and how I should think about structure. That’s pretty basic.
But recently I was writing the second piece in the orchestral suite. It requires the second part of the piece to transition from D major to A major, and then close in D major at the end. I was really struggling based on my melodies and progressions to get from D to A without it feeling like it was absolutely dying to resolve back to the D major chord.
So I sent over a prompt:
Sadly my A section ends naturally on an A for a measure to an A7 for an extra measure before returning to D major. At the end of my second A section, how do I now get to A? I feel like just staying there won’t work. Can I shift to F# minor instead? Or is there a turnaround since this is supposed to transition keys to the major 5?
ChatGPT suggested two responses, which I tried.
Option A – Classic ii–V–I into A
Near the end of the section, let D go, and instead:Treat B minor as ii of A
E7 as V of A
Then A as I (new key)
Example last 3 chords of the section:B minor → E7 → A
Coming out of D‑world you can arrive on Bm very naturally (vi in D, ii in A),
Then Bm–E7–A is a textbook ii–V–I in A major.
You can still touch D before that (so it feels like you’re still in D), but your final phrase should clearly choose Bm–E7–A instead of A7–D.Option B – Use F♯ minor as a pivot (your idea)
Yes, you can go via F♯ minor: it’s vi in A and iii in D, so it’s a legit pivot.Something like:
… D → F♯m → Bm → E7 → A
In D: F♯m = iii, Bm = vi. Still sounds like D.
In A: F♯m = vi, Bm = ii, then E7 = V, A = I.
Both sounded pretty harsh, so I let ChatGPT know I wasn’t fond of either choice after giving each a listen. After doing the usual “Oh You Are Right” false praise that AIs love to do, ChatGPT offered a few suggestions, and in going through them I figured out why they weren’t working: the D natural in the suggested E7 chord was still pulling back to D major. Once I came up with my conclusion I let ChatGPT know.
Ok so this is what ended up working. The original turnaround at the end was 1 bar D, 1/2 bar Bm, 1/2 bar C#dim, leading into an F# minor, which is how this progression starts. I replaced that with 1 bar Bm, then 2 bars E without the 7; the D in the E7 was wreaking havoc with my ear.
And ChatGPT gave me positive feedback on why it worked.
That’s a very sensible fix, and it explains why your ear finally relaxed.
What you had before:
Old turnaround:
D (1 bar) → Bm (½) → C♯dim (½) → F♯m …
That strongly re‑stated D as “home” right before moving on, so anything after felt like it still wanted to resolve back there.What you changed to:
New turnaround:
Bm (1 bar) → E (2 bars, no 7) → F♯m …
Why this works:No strong D at the end
By removing that full bar of D, you stop telling the listener “we’re safely back at tonic.”
Bm → E already steers the harmony toward A/F♯‑world instead of D‑world.
Plain E instead of E7E7 (E–G♯–B–D) introduces a dominant‑of‑A feeling plus that D natural, which:
still evokes the original tonic D major in the background,
and makes the ear half‑expect A (and then D after that).
Using E major (E–G♯–B) without the D:
keeps the pull toward F♯m/A,
but doesn’t slam a dominant function in the listener’s face.
The result is more ambiguous / modal and less “I must cadence.”
Bm → E → F♯m is a smooth directional lineIn D terms: Bm feels like vi, E like a chromatic “brightening” step, and F♯m like iii/vi.
In A terms: Bm is ii, E is V, F♯m is vi; that’s all compatible with A/F♯ as a new region.
But because you don’t resolve E7 to A, the progression flows forward rather than closing.
So the new version:Stops reaffirming D right at the end,
Points gently into the new harmonic area via Bm → E → F♯m,
Avoids the D that made everything sound like “prep for a cadence.”
This is exactly the kind of local surgery you want in a modulation: same broad shape, but you trim out the one chord tone (D in E7, and the big D bar) that kept yanking your ear backward.
This is actually the critical bit that’s super helpful. While I don’t always adopt the suggestions, I have a concrete list of reasons why something worked or maybe didn’t, and a concrete list of options when I’m stuck that would have taken a while to pull together from searches if I couldn’t dig myself out on my own.
So, in this case, ChatGPT has become what AIs should be. A useful tool. But definitely not a replacement for the creative magic.
Keys to a good technical interview
Hi there,
So you see these all the time, especially on job sites or on MSN.com. The keys to nailing the interview. I have a few myself, and I thought I’d share them with you all. Who knows, maybe it will help you when you are faced with the dreaded technical interrogation.
If you can’t explain it, it shouldn’t be on your resume
I realize that people tend to put everything on their resume that they’ve ever encountered, either at work or in the classroom. This certainly tends to make a resume more appealing, more engaging, and implies a breadth and depth of experience.
The problem occurs when the candidate doesn’t really know the skill they’ve listed, and are not prepared to discuss the skill or technology in depth. Let’s face it, if you can’t explain to me how to store someone’s name in a database table, you probably shouldn’t have any database technologies on your resume. And the same goes for web design or web development. If you can’t explain the basic functional tags of HTML, such as tables and divs, or you can’t tell me what CSS stands for (Cascading Style Sheets), anything related to front end web design probably shouldn’t be on your resume.
Be prepared for niche assignments to work against you…and prepare to counter it
If your work history is peppered with contract jobs, or your technical expertise is limited due to the type of work you’ve done, it’s probably in your best interest to be able to list on your resume technologies outside of your normal job functions. For example, if you have mostly been a Windows developer, take the time to learn Web development enough to be able to speak intelligently about it. If you’ve always been a web developer, learn basic database technologies enough that you can demonstrate that you can work with it, or at worst that you will be able to learn it quickly.
During the course of an interview, I will drill down to determine where the line in your technology stack stops, and where it stops will tell me much about what I perceive to be your drive to learn and excel at technology in general.
Be prepared to justify any technical decisions you reveal
I’ll be honest, I don’t necessarily plan ahead when I interview. Instead, I ask a ton of questions to get the candidate to talk…and let what they reveal lead to my next question. If the candidate reveals that they built an ecommerce site, I might start by asking what merchant provider they used, or how they maintained PCI compliance (the security standard for accepting credit cards). If the candidate mentions a particular technology concept such as MVC, I might dig into why they chose that over MVP or MVVM or standard Web forms architecture. Those answers will reveal the candidate’s true involvement in the project as well as how they think when they design and build systems.
Integrating third party tools is not enough
There are so many niche third party tools out there these days. JQuery for JavaScript, Lucene for full text searching, Twitter’s bootstrap for UI controls. But if that’s all you’ve ever done, that does not qualify you for a developer position per se. We’re approaching a time where people who are into development haven’t lived in a world without JQuery or some of these other tools. As a result, many times they can’t explain what JQuery actually is, or how it actually works, because they are so accustomed to the “magic” of it “just working”. I will take a candidate who understands the fundamental operational concepts of the tools they use over someone counting on “the magic taking over” any time.
Be prepared to honestly answer “I don’t know”
Without a doubt I will stump you somewhere. Well, almost without a doubt! There is no developer on the planet who knows everything, and how you handle your lack of knowledge is just as critical as what you know. If you can’t admit to not knowing, and attempt to answer with a best, perhaps informed perhaps not guess, I’ll likely recognize that for what it is and that will be a point against you.
Bring your success stories, in particular crises or major problems solved
Everyone who has worked in this industry has battle stories. I have a list longer than I care to mention, including the day a single bad value passed into one of our web pages hung 14 million queue messages on 20 servers on a Monday morning. It took me 36 hours (straight, no break) to fix it. That is one of many stories I could tell during an interview about something I’ve faced that was difficult that I solved. Bring yours. I’ll likely ask you if you have any moments in your career that you were particularly proud of, and if you don’t have any, I will wonder how much troubleshooting you’ve done and how many roadblocks you’ve managed to push through.
Communication is key
Be able to communicate clearly and concisely. But more importantly, show that you can communicate with others. Many times developers are working with product managers, general managers, designers, marketers, and others. A good developer is able to communicate effectively with all of the different types of people they will encounter. Indeed, fleshing out software requirements, getting clarity around what needs to be done and what use cases might exist, are all part of what will set a candidate apart.
