{
"path": "/posts/2025/strategies-to-make-llms-useful",
"site": "at://did:plc:mracrip6qu3vw46nbewg44sm/site.standard.publication/self",
"$type": "site.standard.document",
"title": "A few strategies to make LLMs useful for you",
"updatedAt": "2025-07-18T23:39:33.000Z",
"publishedAt": "2025-06-24T23:39:33.000Z",
"textContent": "import Chat from '@components/prose/Chat.astro';\n\n> I was reading your blog and had a question about this:\n>\n> \"I noticed that my coworker was prompting for specific technical implementations, and Claude was struggling, pulling in too much context and taking an unfocused approach, whereas I would have been much more vague and general to start and refined as I saw whether Claude was on the right track.\"\n>\n> Would you be able to elaborate more on your thought process on how to prompt an LLM to code a task for you based on its complexity? [I ...] would appreciate any examples you have from experience.\n\nI think part of why I get good results from prompting LLMs is because I'm both willing to engage in and enjoy the process of thinking and writing with clarity.\nI'm the software engineer who likes to write air tight documentation, with working copy-pasteable example code in different languages.\nI like to be thorough, mentioning issues I ran into in the process, but I also try and value the reader's time and attention, giving them the thing they are looking for if they aren't interested in reading about the details.\n\nI've found this process is highly effective for getting good results from LLMs as well.\n\nBut it's not always so easy to just start writing.\n\nLet's say your university CS class project is to build a snake game.\nIf you prompt an LLM to build you a snake game>), it can probably do it with no further prompts.\nThere are tons of open source implementations of snake games and even if there weren't, the model already knows how the game works, the rules, the mechanics, and the win conditions.\n\nHowever if you just prompt\n\n<Chat\n messages={[\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: 'write me a snake game',\n },\n ],\n },\n {\n role: 'assistant',\n content: [\n {\n type: 'text',\n text: \"I'll create a Snake game using Python and Pygame. Here's a complete implementation:\\n\\n\",\n },\n ],\n },\n ]}\n/>\n\nthe model will have to fill in a vast number of details to build the game to completion.\n\nThis includes things like\n\n- the size of the grid\n- the colors of the snake, food, and background\n- the speed of the game\n- whether the game should speed up over time\n- whether the game should have multiple levels\n\nThe list goes on.\n\nIf you prompt the model in a vague manner, it can often deliver something in the direction of what you are looking for, but it will fill in a lot of details in ways you might not want.\nThis seems to be the default behavior of most models these days, especially coding agents.\nYou prompt them and they get to work.\nThey assume you've given them all the information they need to do the task.\n\nHowever, if you're working on something particularly complex and you know you may have some gaps in your question, you can prompt the model to prompt _you_ for more details.\n\nOpenAI does this with deep research agents.\nAfter you send your first prompt, the model prompts you for more details.\n\nYou can add a system prompt to any language model you are working with to get it to do this for you whenever you want.\n\n<Chat\n messages={[\n {\n role: 'system',\n content: [\n {\n type: 'text',\n text: 'You are an assistant to a user in a coding task. When they ask you to help them do something, prompt them for more information if anything about the task is unclear or requires more details.',\n },\n ],\n },\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: 'write me a snake game',\n },\n ],\n },\n {\n role: 'assistant',\n content: [\n {\n type: 'text',\n text: \"I'd be happy to help you create a Snake game! To make sure I build exactly what you're looking for, could you provide some more details?\\n\\n1. Platform/Technology: What would you like me to use?\\n - Python with Pygame\\n - JavaScript (HTML5 Canvas)\\n - Python with Tkinter\\n - Another language/framework?\\n\\n2. Features: What functionality do you want?\\n - Basic snake movement and food collection\\n - Score tracking\\n - Game over screen\\n - Different difficulty levels\\n - Sound effects\\n - High score saving\\n\\n3. Visual style: Any preferences for:\\n - Window size\\n - Colors\\n - Grid-based or smooth movement\\n\\n4. Controls: \\n - Arrow keys\\n - WASD keys\\n - Both options\\n\\nLet me know your preferences and I'll create a Snake game tailored to your needs!\",\n },\n ],\n },\n ]}\n/>\n\nThis difference in behavior is already a substantially different approach to working with a language model.\nIn the first case, you are largely delegating work to the model.\nYou have some task you need to get done, you ask the model to do it, maybe it comes up with something close to what you wanted.\n\nFor most tasks, there are a lot of details.\n\nYou _can_ offload decisions about the details to the model, but then you're not really intellectually participating in the process of creating the thing.\n\nMaybe you don't care about _most_ of the details but now you have the opportunity to specify the ones you _do_ care about.\n\nA follow up prompt as simple as\n\n<Chat\n messages={[\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: \"use python. let's get to work\",\n },\n ],\n },\n {\n role: 'assistant',\n content: [\n {\n type: 'text',\n text: \"Perfect! I'll create a Snake game in Python using Pygame. Let me build a complete, playable version for you: ...\",\n },\n ],\n },\n ]}\n/>\n\nis enough to send the agent to work, but a lot of good things happen in the interim.\n\nGetting the model to prompt you for more details is an easy and effective way to make sure it is on the right track and make sure it understands what you are asking it to do.\nYou then also have the opportunity to fill in the details you care about, steering the model to giving you a much better result.\nIf it clearly doesn't understand what you are asking for, you can start over with different instructions until you are convinced it does (I recommend starting over rather than trying to fix it with a follow up prompt).\n\nThis is one of several ways I experiment with models to build things.\n\nThey're also excellent brainstorming partners, to challenge you to think through details and assumptions you've made about your plans.\nI frequently use a model with a version of the following system prompt to help me think through some new idea I have to see where it leads.\n\n> You are a thought partner to the user.\n> You will have a conversation with the user, asking thoughtful follow up questions about what they say.\n> You will allow the user to steer the conversation in whatever direction they choose.\n> Only provide feedback when asked.\n> Focus on following up to help the user deepen and clarify the ideas they are exploring.\n\nThe model's prompt makes my thought process more of a conversation designed to elicit further thought than an independent exercise in putting words on a page -- something which can oftentimes be a lot more effortful than doing what feels more or less like texting your friend about an idea you just thought of and them enthusiastically saying \"tell me more\" in lots of different ways.\n\nIf you feel this approach results in too much sycophancy, modify the prompt to instruct the model to challenge you more.\n\nFind what works well for you!\n\nThat is one of the best parts about working with these incredibly flexible models.\n\nEven just a few lines of a system prompt can change the model from something that feels difficult to use to a highly effective collaborative partner you work with daily.",
"canonicalUrl": "https://www.danielcorin.com/posts/2025/strategies-to-make-llms-useful"
}