back

by cainxinth·9mo ago·view on hn ↗
I don't use any of these type of LLM tools which basically amount to just a prompt you leave in place. They make it harder to refine my prompts and keep track of what is causing what in the outputs. I write very precise prompts every time.

Also, I try not work out a problem over the course of several prompts back and forth. The first response is always the best and I try to one shot it every time. If I don't get what I want, I adjust the prompt and try again.

28 comments
Strong agree. For every time that I'd get a better answer if the LLM had a bit more context on me (that I didn't think to provide, but it 'knew') there seems to be a multiple of that where the 'memory' was either actually confounding or possibly confounding the best response.

I'm sure OpenAI and Antropic look at the data, and I'm sure it says that for new / unsophisticated users who don't know how to prompt, that this is a handy crutch (even if it's bad here and there) to make sure they get SOMETHING useable.

But for the HN crowd in particular, I think most of us have a feeling like making the blackbox even more black -- i.e. even more inscrutable in terms of how it operates and what inputs it's using -- isn't something to celebrate or want.

I'm pretty deep in this stuff and I find memory super useful.

For instance, I can ask "what windshield wipers should I buy" and Claude (and ChatGPT and others) will remember where I live, what winter's like, the make, model, and year of my car, and give me a part number.

Sure, there's more control in re-typing those details every single time. But there is also value in not having to.

Both of you are missing a lot of use cases. Outside of HN, not everyone uses an LLM for programming. A lot of these people use it as a diary/journal that talks back or as a Walmart therapist.
Anecdotally, LLMs also get less intelligent when the context is filled up with a lot of irrelevant information.
Nah, they don't look at the data. They just try random things and see what works. That's why there's now the whole skills thing. They are all just variations of ideas to manage context basically.

LLMs are very simply text in and text out. Unless the providers begin to expand into other areas, there's only so much they can do other than simply focus on training better models.

In fact, if they begin to slow down or stop training new models and put focus elsewhere, it could be a sign that they are plateauing with their models. They will reach that point some day after all.

If I find that previous prompts are polluting the responses I tell Claude to "Forget everything so far"

BUT I do like that Claude builds on previous discussions, more than once the built up context has allowed Claude to improve its responses (eg. [Actual response] "Because you have previously expressed a preference for SOLID and Hexagonal programming I would suggest that you do X" which was exactly what I wanted)

All those moments will be lost in time, like tears in rain.
> For every time that I'd get a better answer if the LLM had a bit more context on me

If you already know what a good answer is why use a LLM? If the answer is "it'll just write the same thing quicker than I would have", then why not just use it as an autocomplete feature?

> The first response is always the best and I try to one shot it every time. If I don't get what I want, I adjust the prompt and try again.

I've really noticed this too and ended up taking your same strategy, especially with programming questions.

For example if I ask for some code and the LLM initially makes an incorrect assumption, I notice the result tends to be better if I go back and provide that info in my initial question, vs. clarifying in a follow-up and asking for the change. The latter tends to still contain some code/ideas from the first response that aren't necessarily needed.

Humans do the same thing. We get stuck on ideas we've already had.[1]

---

[1] e.g. Rational Choice in an Uncertain World (1988) explains: "Norman R. F. Maier noted that when a group faces a problem, the natural tendency of its members is to propose possible solutions as they begin to discuss the problem. Consequently, the group interaction focuses on the merits and problems of the proposed solutions, people become emotionally attached to the ones they have suggested, and superior solutions are not suggested. Maier enacted an edict to enhance group problem solving: 'Do not propose solutions until the problem has been discussed as thoroughly as possible without suggesting any.'"

  > Humans do the same thing. We get stuck on ideas we've already had.
Not in the same way. LLMs are far more annoying about it.

I can say: I'm trying to solve problem x. I've tried solutions a,b, and c. Here are the outputs to those (with run commands, code, and in markdown code blocks). Help me find something that works " (not these exact words. I'm way more detailed). It'll frequently suggest one of the solutions I've attempted if they are very common. If it doesn't have a solution d it will go a>b>c>a>... and get stuck in the loop. If a human did that you'd be rightfully upset. They literally did the thing you told them not to, then when you remind them and they say "ops sorry" they do it again. I'd rather argue with a child

A wise mentor once said “fall in love with the problem, not the solution”
When you get the answer you want, follow up with "How could I have asked my question in a way to get to this answer faster?" and the LLM will provide some guidance on how to improve your question prompt. Over time, you'll get better at asking questions and getting answers in fewer shots.
> Humans do the same thing. We get stuck on ideas we've already had.

Humans usually provide the same answer when asked the same question. LLMs almost never do, even for the exact same prompt.

Stop anthropomorphizing these tools.

Yes, your last paragraph is absolutely the key to great output: instead of entering a discussion, refine the original prompt. It is much more token efficient, and gets rid of a lot of noise.

I often start out with “proceed by asking me 5 questions that reduce ambiguity” or something like that, and then refine the original prompt.

It seems like we’re all discovering similar patterns on how to interact with LLMs the best way.

We sure are. We are all discovering context rot on our own timelines. One thing that has really helped me when working with LLMs is to notice when it begins looping on itself, asking it to summarize all pertinent information and to create a prompt to continue in a new conversation. I then review the prompt it provides me, edit it, and paste it into a new chat. With this approach I manage context rot and get much better responses.
The trick to do this well is to split the part of the prompt that might change and won't change. So if you are providing context like code, first have it read all of that, then (new message) give it instructions. This way that is written to the cache and you can reuse it even if you're editing your core prompt.

If you make this one message, it's a cache miss / write every time you edit.

You can edit 10 times for the price of one this way. (Due to cache pricing)

> It is much more token efficient

Is it? Aren't input tokens are like 1000x cheaper than output tokens? That's why they can do this memory stuff in the first place.

Plan mode is the extent of it for me. It’s essentially prompting to produce a prompt, which is then used to actually execute the inference to produce code changes. It’s really upped the quality of the output IME.

But I don’t have any habits around using subagents or lots of CLAUDE.md files etc. I do have some custom commands.

Cursor’s implementation of plan mode works better for me simply because it’s an editable markdown file. Claude code seems to really want to be the driver and you be the copilot. I really dislike that relationship and vastly prefer a workflow that lets me edit the LLM output rather than have it generate some plan and then piss away time and tokens fighting the model so it updates the plan how I want it. With cursor I just edit it myself and then edit its output super easy.
Yeah they just gets all in a muddle.

The other day I was asking ChatGPT about types of mortgages and it began:

As a creative technologist using mostly TypeScript lets analyse the type of mortgage that would work for you.

It just doesn’t understand how to use its memory or the personalisation settings for relevant things and ignore it for irrelevant things.

I completely agree. ChatGPT put all kinds of nonsense into its memory. “Cruffle is trying to make bath bombs with baking soda and citric acid” or “Cruffle is deciding between a red colored bedsheet or a green colored bedsheet”. Like great both of those are “time bound” and have no relevance after I made the bath bomb or picked a white bedsheet…

All these LLM manufacturers lack ways to edit these memories either. It’s like they want you to treat their shit as “the truth” and you have to “convince” the model to update it rather than directly edit it yourself. I feel the same way about Claude’s implementation of artifacts too… they are read only and the only way to change them is via prompting (I forget if ChatGPT lets you edit its canvas artifacts). In fact the inability to “hand edit” LLM artifacts is pervasive… Claude code doesn’t let you directly edit its plans, nor does it let you edit the diffs. Cursor does! You can edit all of the artifacts it generates just fine, putting me in the drivers seat instead of being a passive observer. Claude code doesn’t even let you edit previous prompts, which is incredibly annoying because like you, editing your prompt is key to getting optimal output.

Anyway, enough rambling. I’ll conclude with a “yes this!!”. Because yeah, I find these memory features pretty worthless. They never give you much control over when the system uses them and little control over what gets stored. And honestly, if they did expose ways to manage the memory and edit it and stuff… the amount of micromanagement required would make it not worth it.

From the linked post:

> If you use projects, Claude creates a separate memory for each project. This ensures that your product launch planning stays separate from client work, and confidential discussions remain separate from general operations.

If for some reason you want Claude's help making bath bombs, you can make a separate project in which memory is containerized. Alternatively, the bath bomb and bedsheet questions seem like good candidates for the Incognito Chat feature that the post also describes.

> All these LLM manufacturers lack ways to edit these memories either.

I'm not sure if you read through the linked post or not, but also there:

> Memory is fully optional, with granular user controls that help you manage what Claude remembers. (...) Claude uses a memory summary to capture all its memories in one place for you to view and edit. In your settings, you can see exactly what Claude remembers from your conversations, and update the summary at any time by chatting with Claude. Based on what you tell Claude to focus on or to ignore, Claude will adjust the memories it references.

So there you have it, I guess. You have a way to edit memories. Personally, I don't see myself bothering, since it's pretty easy and straightforward to switch to a different LLM service (use ChatGPT for creative stuff, Gemini for general information queries, Claude for programming etc.) but I could see use cases in certain professional contexts.

In fairness, you can always ask Claude Code to write it's plan to an MD file, make edits to it, and then ask it to execute the updated plan you created. I suppose it's an extra step or two vs directly editing from the the terminal, but I prefer it overall. It's nice to have something to reference while the plan is being implemented
You can delete memories in ChatGPT and ask your bot to add a custom ones; memories can be instructions too. Gemini lets you create and edit memories.
Were the bath bombs any good? Did the LLM's advice(?) make a meaningful difference? I didn't know making them was so simple.
I wish the LLMs would tell you exactly what the input was (system prompt, memory, etc, at least, the ones we have control over, not necessarily their system prompts) that resulted in the output.

Also, out of curiosity, do you use LLMs for coding? Claude Code, Cursor, etc? I think it's a good idea to limit llm conversations to one input message but it makes me wonder how that could work with code generation given that the first step is often NOT to generate code but to plan? Pipe the plan to a new conversation?

I make heavy use of the "temporary chat" feature on ChatGPT. It's great whenever I need a fresh context or need to iteratively refine a prompt, and I can use the regular chat when I want it to have memory.

Granted, this isn't the best UX because I can't create a fresh context chat without making it temporary. But I'd say it allows enough choice that overall having the memory feature is a big plus.

Yeah same. And I'd rather save the context space. Having custom md docs per lift per project is what I do. Really dials it in.
Claude is (in my limited experience so far) more useful after a bit of back and forth where you can explain to it what's going on in your codebase. Although I suspect if you have a lot of accurate comments in your code then it will be able to extract more of that information for itself.
Memory is ok when it's explicitly created/retrieved as part of a tool, and even better if the tool is connected to your knowledge bases rather than just being silod. Best of all is to create a knowledge agent that can synthesize relevant instructions from memory and knowledge. Then take a team of those and use them on a partitioned dataset, with a consolidation protocol, and you have every deep research tool on the market.
It really resonates with me, I often run into this situation when I'm trying to fix a bug with llm: if my first prompt is not good enough, then I end up stuck in a loop where I keep asking llm to refine its solution based on the current context.

The result is llm still doesn't output what I want even after 10 rounds of fixing requests.

so I just start a new session and give llm a well-crafted prompt, and suddenly it produce a great result.

Yes, but I find it difficult to stop most LLMs once they start generating.

Ideally, you'd just click on the input textbox, a cursor appears and the generation stops.

Exactly... this is just another unwanted 'memory' feature that I now need to turn off, and then remember to check periodically to make sure it's still turned off.
Honestly it feels weird to call these features "memory". I think it just confuses users and over encourages inappropriate anthropomorphism. It's not like they're fine tuning or building LoRAs. Feels more appropriate to call them "project notes".

And I agree with your overall point. I wish there was a lot more clarity too. Like is info from my other chats infecting my current one? Sometimes it seems that way. And why can't I switch to a chat with a standard system prompt? Incognito isn't shareable nor can I maintain a history. I'm all for this project notes thing but I'd love to have way more control over it. Really what makes it hard to wrangle is that I don't know what's being pulled into context or not. That's the most important thing with these tools.

but if we don't keep adding futuristic sounding wrappers to the same LLMs how can we convince investors to keep dumping money in?

Hard agree though, these token hungry context injectors and "thinking" models are all kind of annoying to me. It is a text predictor I will figure out how to make it spit out what I want.

Intuitively this feels like what happens with long Amazon or YT histories: you get erroneous context across independent sessions. The end result is my feed is full of videos from one-time activities and shopping recommendations packed with "washing machine replacement belt".
I do get a lot of value out of a project wide system prompt that gets automatically addded (Cursor has that built in). For a while I kept refining it when I saw it making incorrect assumptions about the codebase. I try to keep it brief though, about 20 bullet points.
I use projects for sandboxing context, I find it really useful. A lot of the stuff I'm using Claude for needs a decent chunk of context, too much for a single prompt.

Memory is going to make that easier/better, I think. It'll be interesting to find out.

Could you share some suggestions or links on how to best craft such very precise prompts?
There is some research that supports this approach. Essentially once the LLM starts down a bad path (or gets a little bit of "context poisoning"), it's very hard for it to escape and starting fresh is the way to go
I think you're saying a functional LLM is easier to use than a stateful LLM.
Basics of control theory: Use (energy storage), add some lag and maybe a bit of amplification and then the instability fun begins.
That's mostly been my experience as well... That said, there always seems to be something wrong on a technical response and it's up to you to figure out what.

It has been relatively good for writing out custom cover letters for jobs though... I created an "extended" markdown file with everything I would put into a resume and more going back a few decades and it does a decent job of it. Now, if only I could convince every company on earth to move away from Workday, god I hate that site, and there's no way to get a resume to submit clean/correctly. Not to mention, they can't manage to just have one profile for you and your job history to copy from instead of a separate one for each client.

I often edit a prompt using feedback from the LLM and run it again.
They should just give the user some control over this
Regardless, whatever memory engines people come up with, it's not in anyone's interest to have the memory layer sitting on Anthropic or Open AIs server. The memory layer should exist locally, with these external servers acting as nothing else but LLM request fulfillment.

Now, we'll never be able to educate most of the world on why they should seek out tools that handle the memory layer locally, and these big companies know that (the same way they knew most of the world would not fight back against data collection), but that is the big education that needs to spread diligently.

To put it another way, some games save your game state locally, some save it in the cloud. It's not much of a personal concern with games because what the fuck are you really going to learn from my Skyrim sessions? But the save state for my LLM convos? Yeah, that will stay on my computer, thank you very much for your offer.

> If I don't get what I want, I adjust the prompt and try again.

This feels like cheating to me. You try again until you get the answer you want. I prefer to have open ended conversations to surface ideas that I may not be be comfortable with because "the truth sometimes hurts" as they say.