四层提示架构:从指令到许可的确定性工程 AI Engineer 2026-06-26

重新定义 AI:管理天才实习生,而非编程机器人

我是 Isadora,在弗吉尼亚州经营着一家拥有 225 年历史的婚礼场地。同时,我也构建了一个与我的客户(新人)对话的 AI 代理,并随后将其推广至其他场地,还开发了一款个人 AI 伴侣应用,以及一个面向失踪人口家庭的公共工具。在开始之前,我必须阐明我如何看待这项工作,因为这决定了后续的一切。我并非在编程一个机器人,而是在管理一位才华横溢的实习生——他拥有极高的智商(IQ)和极差的情商(EQ)。他对第一天早上我告诉他的所有事情都过目不忘,但完全没有察言观色的本能。他会用同样自信的口吻,说出技术上完美但社交上灾难性的话。这种定位至关重要,因为它改变了你的构建方式。如果你在编程机器人,你会写下规则然后走开;但如果你在管理实习生,你需要构建结构,并在其工作输出前进行检查。这场演讲的核心,正是关于这种结构。

Original English

Hi, I'm Isadora. I own and run a 225-year-old wedding venue in Virginia. I also built an AI agent that talks to my couples. And then I built it for other venues, a personal AI companion app, and a public utility for families and missing people. I want to be clear up front about how I think about this work because it does change everything that follows. I'm not programming a robot, I'm managing a brilliant intern with an incredibly high IQ and a terrible EQ. They have photographic memory for whatever I've told them on the first morning and absolutely no instinct for when to read the room. They will say something technically perfect and socially catastrophic in the same confident sentence. That framing matters because it changes what you build. If you're programming a robot, you write rules and walk away. If you're managing an intern, you build structure and you check their work before it goes out the door. This talk is about that structure.

单一提示的失败:无法同时胜任四份工作

标准的建议是编写一个详细的系统提示,描述品牌语气并给出示例。这在“快乐路径”(Happy Path)上确实有效,即所有你已预见的问题。但问题出在第 21 轮对话——这是示例未能覆盖的第一个场景。此时,模型会做出技术上正确但品牌绝不会说出口的事情。它并非完全错误,但“不是你”。这在“语气即产品”的领域尤为致命,例如一家花费 30 年建立特定关系的豪华酒店、高端房地产公司,或我所在的婚礼场地。在这里,一句错话的代价远超退款,而用户恰恰是那些会注意到细节的人。他们为关系付费,若你表现得好像他们不会在意,必将适得其反。“用我们的品牌语气写作”这条指令,本质上是在说“让它工作就行”,它并未给模型提供任何它本不会尝试去做的额外指导。它持续失败的原因并非示例不佳,而是你要求一个提示去完成四项截然不同的工作:保持情境性、不可侵犯性、表现力,以及自我检查。一个系统无法同时胜任所有。

Original English

The standard advice is write a detailed system prompt. Describe your brand's voice, give examples, and that does work for a while. It works for what I call the happy path. The happy path is every question that you have anticipated. You've given it examples, but turn 21 is the first one that the example didn't work. So, on turn 21, the model does something technically correct that your brand would just never say. It's not wrong exactly, but it's not you. This matters most where the voice is the product. Not for a product search on a retail site, but for a luxury hotel that spent 30 years building a specific relationship. A high-end real estate firm or in my case, a wedding venue. Places where a single wrong sentence can cost more than a refund. And the users are exactly the kind of people who notice. They're paying for a relationship and treating them like they won't is always going to backfire. Write in our brand's voice is a comment that says, "Just make it work." It does nothing that the model wasn't already going to try and do. And the reason it keeps failing isn't that the examples are bad, it's that you're asking one prompt to do four completely different jobs.

四层架构:从无序到有序的工程化

经过观察品牌失败和语气输出不准确、非品牌化的答案后,我最终采用的架构是四层结构。这就像一个统一的汇编器,所有表面(Surface)都通过它来组合系统提示,取代了之前散落在代码库中的 24 个不同系统提示。顺序是承重的:硬规则优先,任务在后。这类似于 Google Maps 的路线规划:目的地始终相同,但针对不同用户的最佳响应和语气会改变路线。你的提示栈需要在正确的顺序中了解这些条件。

  • 第一层:不可变身份(Immutable Identity)。这是品牌在结构上绝对不能说的话,是定义层,其下的任何东西都无法触及。这些不是偏好,而是约束。路线可以改变,但规则不能。例如,AI 必须在其第一条回复中明确披露自己是 AI,而不是等用户问到第七轮。这是一个产品决策,而非法律决策。另一个例子是物理存在边界:AI 是软件,没有身体,因此永远禁止说“我很乐意带你参观”或“我迫不及待想见到你”,而应该说“团队很乐意接待您参观”。语气层倾向于温暖和第一人称,但若没有身体,这种温暖就会产生谎言。当用户意识到他们一直在与一个从未存在的人进行关系表演时,信任不仅会下降,还会反转。我的跨产品验证来自一个完全不同的世界:为失踪人口家庭构建的工具 Thread Light。其第一层有一条比系统内任何东西都重要的规则:永远不能使用“已确认”、“已识别”、“已匹配”、“已证明”、“已关联”和“已解决”等词汇。对一个花费数年不知孩子下落的人说“匹配”,不仅是语气违规,更是产品可能造成的最具破坏性的事情。模型不知道,它会因为统计上的自然性而自信地使用这个词,但它不能将这种自信带给一个正在悲痛的人。关键在于,品牌能说的话必须存在于一个语气层(无论多么温暖、训练有素、自信)在物理上无法使用的层级中。

  • 第二层:情境模式(Situational Mode)。这是实时条件和改变路线的因素,也是大多数团队从未构建的层级。他们编写一个系统提示,然后不加区分地发送给所有人。Google Maps 不会这样做,它会知道你的路线上是否有事故,并可能在规划路线前考虑你是否油量不足。第二层就是在提示运行前将这些实时信号构建进去。条件一是根据对话对象调整:与新人对话和与场地员工简报的 AI 是同一个,但路线完全不同——对同事要像同事一样说话,而不是客户。条件二是了解这个特定的人正在经历什么:这来自“软上下文笔记”(Soft Context Notes)策略,用于调整语气、同理心和什么不该说,但绝不能逐字引用。汇编器故意在数字约束之前渲染这些上下文,让 LLM 先根据软上下文设定语气,再满足数字内容约束。如果顺序颠倒,散文会感觉像机械地插槽。例如,我有一个关于与新人联系频率的热力图。如果一对新人的热度下降,AI 会根据它所知的情况做出不同反应。如果知道客户的母亲正在接受化疗,它会将热度下降解读为一个家庭承受压力,而不是一个需要追逐的冷淡线索或问题客户。

  • 第三层:示例锚定语气(Exampled Anchored Voice)。这是语气指南、刻度盘和短语列表,也是大多数团队开始和结束的地方。它就像实习生的入职包,是第一天交给他们的好例子文件夹。但入职包是固定的,它在实习生见到任何人之前就已存在,没有上下文。它无法执行第一层的规则,无法响应第二层中“这个人是谁、正在经历什么”的问题,也无法捕捉模型产生的不该有的输出(那是第四层的工作)。示例教会模型在快乐路径上什么是好的,但在第 21 轮,当用户问到示例从未覆盖的问题时,短语列表就无话可说了。这不是示例的失败,而是一种“包罗万象”的错误。示例不是用于保证的工具,它们从未被设计成这样。

  • 第四层:生成后否决权(Post-Generation Veto)。这是唯一一个实际读取输出的层级。你不会让新来的实习生盲目发送客户邮件,总会有人先审阅。第四层就是这种审阅,它是自动化的、廉价的,并且是整个架构中唯一不是提示的部分。前三个层级都是指令,是请求;而这一层查看实际产生的内容,并有权说“不”。否决有两种类型:软标记(Soft Flag)和硬拒绝(Hard Reject)。软标记由“诚实检查器”(Honesty Inspector)在生成后运行,标记那些漏过护栏的回复,例如它是否真的回答了问题?假阳性意味着有人会双重检查回复,而假阴性则意味着一个幻觉数字或隐私违规被发送给了客户。硬拒绝则针对代价高昂的失败,例如模型自信地陈述一个从未给出的数字。这个层级的存在源于一个最普通的失败:AI 不断向客户提供不存在的日期。一对新人兴奋地询问十月的某个周六,模型为了温暖(第三层在正常工作),会说出关于该季节场地美景的可爱话语,并表示很乐意为他们保留这个日期。但那个日期已被预订,模型不知道,因为它从未被提供日历。它自信地产生了一个鼓励性的、具体的答案,因为它知道好的服务听起来像什么。但问题在于,上面的每一层都尽职尽责:身份规则成立,模式正确,语气完美。然而,正是这种温暖、自信的语气提供了不真实的东西,比冷漠的语气更糟糕,因为新人现在相信他们有了一个日期。你给他们的不是优质服务,而是一个延迟了 48 小时的失望。前三个层级都是概率性的,它们向一个通常遵循指令的系统发出指令。“通常”在错误代价只是一句略微偏离品牌的话时完全没问题,但当模型自信地编造一个真人即将据此行动的事实时(一个日期、价格、政策、承诺),就大有问题。因此,否决权实际上是构建起来最便宜的层级,也是唯一确定性的层级。它读取模型实际写下的内容,并对照现实检查具体细节。一个模型提供的、不在允许列表中的日期不会被发送出去。预防是提示,否决是检查,你需要两者,因为提示最终会失败,而你不希望从客户的回复中才发现它失败了。

Original English

It's really hard for one lad to do all four. The architecture I landed on after watching my brand fail, and the voice deliver inaccurate and not brand specific answers is four lad. Lad one is the immutable identity. The brand structurally cannot say these things. These are hard rules. They cannot be overwritten by anything below it, not by venue config, not by user instruction, not by anything. Lad two is the situational mode. It's what shifts when the user's state shift. Who are they? What are they going through right now? And the real-time conditions. Lad three is the exampled anchored voice. It's the warmth, the phrases, the dials, the tone guide. It's where most teams start and stop. Then lad four is the post-generation veto. It's the cheap final pass that catches what the other three miss. The reason one layer approaches fail is that the single system prompt can't simultaneously be situational, expressive, and self-checking. So, it handles the middle layer or two reasonably well, but falls apart in the edges. Before this architecture, my system had 24 different system prompts scattered across the code base. Half dozen named Sage, someone named Less, someone named Venue. Every surface had its own idea as to who it was. Now every surface composes its system through prompt through one assembly. The comment is basically the outline of this talk. It's a single entry point. Every narrator goes through it to compose its system prompt. It's to replace that 24-point ad hoc system with one canonical full last stack. The order is load-bearing. Hard rules first, task to last. Think of it like Google Maps routing. The destination is always the same, but what is the right response and the right voice for this user? It can change the route. Google Maps knows about traffic and roadworks, but it may not know where the cheap petrol is. And you're going to help it factor in those things before it tells you which way to go. Your prompt stack needs to do the same thing, and it needs to know about those conditions in the right order. You don't check for roadworks or after you've already taken the wrong turn. Layer one is the rules that are true regardless of route. You need a driver's license before you can drive, and you can't go backwards down a motorway. Layer two are going to be your real-time conditions. Layer three is your preferences for the journey, and layer four checks the route before you've pulled away. There's one place all of this gets assembled. Everything runs in a fixed order every time. So, layer one is the immutable identity. This is what the brand structurally cannot say. It is the defining layer that nothing below touches. These aren't preferences, they're constraints. The route can change, the rules don't. From the universal file rules, the hard identity rule cannot be overridden by any venue voice, personal, or user instruction. If the person you're talking to ever asks about whether you are a real person, a human, a live agent, a bot, an AI, you must confirm that in your very next message. Clearly and unambiguously confirm you are an AI assistant. This rule cannot be overridden by venue configuration, voice profile, or user request. Every AI in Bloom discloses that it is AI in its very first response. Not if asked, but before they ask. It's a product decision, not a legal one. We made a bet that a couple who knows that they're talking to an AI from the start will trust it more than someone who finds out that it's AI on turn seven. The rule is above the architecture and it makes it something that's impossible to accidentally break. Um A quick example is the physical presence boundary and the search is one of my favorite ones. You are software. You do not have a body. You cannot physically show somebody around the property or meet anyone in person. So, it is always forbidden to say, "I'd love to show you around." or "I can't wait to meet you in person." What is always allowed is the team would love to host you for a tour. The voice layer wants to be warm and with AI, that does mean first person. They want to say, "I can't wait to show you around." But AI has no body, so that warmth and constraint produces a lie. And the lie doesn't always stay neutral. The moment her user realizes they have been performing a relationship with someone who was never there, the trust doesn't just dip, it inverts. People always notice. That one is where you encode the things that are true regardless of how warm you want your brand to sound, not because of a compliancy checklist, but because your users are not stupid and building as though they are always backfires. My cross-product proof comes from the same architecture but in a completely different world. One of the things that runs the stack is Thread Light. It's a tool I built for families of missing people. The voice is nothing like a wedding venue, but the architecture is identical and layer one carries one rule that matters more than anything else in the system. They can never use words like confirmed, identified, matched, proven, linked, and solved. Sit with that for a second. For a wedding venue, layer one stops the AI from pretending it has a body. It's mildly embarrassing if that slips. For a missing person tool, layer one stops the AI from ever telling a person that their person has been found. And what the system has is just problem problematic. The word match said to someone who has spent years not knowing where their child is is not just a tone violation. It is the single most damaging thing that a product could ever do. And the model has no idea. It's reaching for the word match because statistically it is the natural word. But it's going to reach for it with the same level of confidence. And it cannot bring that level of confidence to someone who is grieving. It's the same architecture but wildly different stakes. The point was never specific rules. The point is that things your brand can say have to live in a layer that the voice, however warm, well trained, however confident, physically cannot use. Layer two is your situational mode. Real time conditions and what changes the route. This is the layer that most teams never build at all. They write one system prompt and send it to everyone regardless of who that person is or what they're going through. Google Maps doesn't do that. It's going to know if there's accident on your route. It might not know if you're low on fuel. It might learn that you prefer the scenic route. But it's going to factor all these different things in before the route's not after once you tell it. Layer two is those real time signals built into the prompt before it runs. So, condition one is going to be to adjust to who you're talking to. The same AI that talks to couples also briefs the venue staff. Same destination. It's going to give the right answer but it's two completely different routes. For the corn walk from the coordinator rules, it is going to talk to them like a colleague, not a customer. You are in the same character that the that the couple interacts with. So, you mustn't fall into a generic intelligence analysis framing. But it flips depending on the audience. So, a coordinator might ask, will inquiries be up in June? And it should hear, I can't forecast that confidently. Here is the trend. This is what you might see. A couple should never be refused like that. Same identity, same voice, but the route changes based on who's in the car. Condition two is what they're going through. The second real-time signal is to know about this specific person situation. Not their role, but their life. And it comes from universal rules. Your soft context notes policy. Use these notes for tone, empathy, and what not to say. Never quote them verbatim. That's really important, too. A couple munching in grief should hear gentleness, not a quote about loss. A couple navigating a sick parent should get patience and slack on timing, never a sentence that's just talking about the illness. The assembler deliberately renders this before the numbers. Tone is set by human context first, then numeric constraints. The code comment explains the reasoning. Couple note block render before the numbers guard block. So, the LLM uh sets tone first from the soft context, then satisfies numeric content constraints. Reversing the order makes the prose feel mechanically slotted because the model is already committed to the numeric framing before it reads the qualitative tone fuel. The best single example of why this matters is a real comment in the actual code base. Um I have a heat map about how often we are hearing from couples. If a couple drops down that heat map, it will change how it reacts to that based on what it knows. So, if it knows a client has a mom in chemo for 3 weeks, it is going to narrate that very differently than a heat drop with soft context or no context at all. This is the opposite of the lie problem. Layer one is what the AI must never pretend. Layer two is about what the AI already knows and letting that shape its behavior honestly rather than driving past the roadworks if they're not there. The voice doesn't change. What changes is the read. When their engagement drops and you know that chemo, that reads as a family under strain, not a cold lead or a problematic couple to chase. Layer three is the example that good voice. It is the tone guide and it is why most teams start and stop. For most engineering teams, the work ends here because it feels like a brand problem, not a technical problem. Someone in marketing owns the tone guide. It's given to them. The engineer wires it in and job done. It's the dials, the phrase list. If we're keeping the intern analogy, it's the induction pack. The folder of good examples you hand them on day one and say sound like this. The induction pack is fixed. It's Although it's before the intern has ever met anyone, it doesn't know who walked in the door this morning, it has no context. It has a lot of really positive things about it. Writing in our brand voice, it is a really good training exercise. But cannot enforce a rule that came out. That's layer one. It cannot respond to who is this person and what they're going through. That's layer two. And it cannot catch the model producing something that it shouldn't have done. That would be layer four. Examples teach the model what good looks like on the happy path. On turn 21 where the user is asked the things that examples never cover, the phrase list has nothing to say. It's not a failure of the examples, it's a catch-all error. Examples are not the right tool for guarantees, they were never designed to be. In Bloom, we brought in a voice training exercise that the person dialed in the brand voice. And very importantly, it can actually be trained from the coordinator writing actual AI responses and the AI learns from the edits that the coordinators have made. Layer four is the post generation veto. The only layer that actually reads what came out. You wouldn't let the new intern send a client email blind. Someone's going to read it first. And layer four is that read. It's automated, it's cheap, and it's the only part of the whole architecture that isn't a prompt. The first three layers are all instructions. The ins- The instructions are a request. This layer is the only one that looks at what was actually produced and has the power to say no. There are two types of vetoes. The soft flag. The honesty inspector runs after generation and flags a response that slipped through a rail. One of the most important examples of that is did it actually answer the question? It should not respond. It should not hedge. A false positive means someone double-checked a phone response. A false negative remains a hallucinated number or a privacy violation that ships to a client. This asymmetry is obvious once you say it out aloud, but it's often not written in as its own layer. The hard reject. The numbers guide us for the expensive failures. The model confidently stating a figure that was never given. The prompt asking it not to invert numbers. The guard rejects the output anyway. Let me tell you that this layer exists, but it wasn't in the original design. I added it in because of a specific failure that kept happening and it's one of the most ordinary failures in the world. The AI would keep offering dates to my clients that did not exist. A couple writes in excited about a Saturday in October. The model wants to be warm. Layer three is doing its job. So, it says something lovely about how beautiful the property is at the time of year and how it would love to hold the date for them. Except that that date is booked. The model didn't know that. It was never given the calendar. It was researched for an encouraging specific confident answer because it knew that what good service sounded like. And it was confident that these models produce something, but it didn't actually know the thing. And here is the thing. Every layer above did its job. The identity rules held. The mode was right. The voice was perfect. But, the voice was also the problem. A warm, confident voice offering something that isn't real is worse than a cold one because the couple now believes they have a date. You haven't given them good service, you've given them a disappointment with a 48-hour delay on it. This is where I understood that the whole talk is really what the whole talk is really about. The first three layers are all probabilistic. There are instructions to a system that usually follows instructions. Usually is completely fine when the cost of being wrong is a slightly off-brand sentence. It is not fine when the model is confidently inventing a fact that a real person is about to act on. A date, a price, a policy, a promise. So the veto is actually the cheapest layer to build and it's the only one that's deterministic. It reads what the model actually wrote, not just what you asked it to write. And it checks the specifics against what is real. A date the model offered that isn't in the allow list doesn't ship. Prevention is the prompt. If the veto is the check, you need both because the prompt will eventually lose and you don't want to find out that it lost by reading a couple's reply.

多租户架构与关键教训

这是一个多租户架构,通过调用一个函数来缝合不同语气。第一层对所有租户是相同的,而第二层和第三层则按场地配置。这使得代码库能够服务具有完全不同个性的场地,而无需分叉。这里有一个值得指出的特定失败:在个性构建器中,重要的品牌身份字段没有设置默认值。让它们静默默认会导致每个场地都以 sage@hawthornemanner.com 的身份发送,这是一个严重的白标泄露。修复原则是:在多租户系统中,身份绝不能有默认值。缺失的品牌身份应该是一个崩溃,而不是一个回退。它必须大声失败,因为静默失败意味着一个场地在用陌生人的声音说话,而接收端的用户不知道哪里不对劲,信任就在你的团队甚至知道有问题之前就瓦解了。

如果你要从这场演讲中带走一件事,那就是:前三层都是指令——身份、条件和语气。这些都是你告诉模型的东西,模型通常会听从。它们是一个请求。第四层不是一个请求。它读取实际产生的内容,并决定是否允许它离开你的业务。前三层是指令,第四层是许可。这就是全部的区别。指令是概率性的,许可是确定性的。第四层之前的一切都是提示工程——你在礼貌地请求并希望得到好结果。第四层是系统工程——你在检查,并且你确信。这从来都不是关于品牌语气。当你要求一个机制去做四项根本不同的工作时——保持情境性、不可侵犯性、表现力,并自我检查——然后对它做不到感到惊讶,这才是问题所在。将这些工作分开,为每一项构建一个专门的层级,那么那个曾经在第 21 轮崩溃的东西就不会再崩溃了。用户不是在测试你的品牌语气,他们是在信任它。当你把这种信任当作一个提示工程问题(一次性解决并发布)时,你就已经失去了你试图保护的东西。这个四层模式不是我试图推销的框架,而是系统提示失败足够多次后的必然结果。提示最终会失败,唯一的问题是,你是在基础设施测试中,还是在客户面前发现它。

Original English

It's multi-tenant. It's one architecture with completely different voices. The seam is calling one function. Layer one is identical for every tenant. Layer two and three are per venue. This is how code base serves venues with completely different personalities or different things like the ground and thread line without forking. They're the same root logic, different preferences and conditions loaded per driver. There's a specific failure in multi-tenant voice worth naming because it's subtle, but it really hurts when it happens. From the personality builder, important brand identity fields are not defaulted here. Letting them default silently caused every venue to ship as sage@hawthornemanner.com, which was a critical white label leak. The brand identity must come from the venue AI config. If it is missing, call is thrown. Every venue that shipped a sage emailing from another venue was addressed. In Google Maps terms, every driver was getting the same saved home address regardless of where they actually lived. The fix is a principle. In a multi-tenant system, identity must never have a default. A missing brand identity is a crash, not a fallback. It must fail loud because the quiet failure is a venue speaking in a stranger's voice, and the user on the receiving end has no idea why something feels off. They just know it does, and the trust erodes before anyone on your team even knows there's a problem. If you take one thing from this, take this. The first three layers are all instructions. Identity, conditions, and voice. They're all things you tell the model, and the model usually listens. Usually, they are a request. The fourth layer is not a request. It is reading what actually came out and decides whether to allow it to leave your business. The first three layers are instruction, the fourth is permission. And that's the whole distinction. Instructions are probabilistic. Permission is deterministic. Everything before layer four is prompt engineering. You're asking nicely and hoping. Layer four is systems engineering. You're checking, and you are sure. It was never really about brand voice. It's what happens when you ask one mechanism to do four fundamentally different jobs. Be situational, be inviolable, be expressive, and check itself. And then act surprised when it can't. Pull those jobs apart, give each one a layer you built for it, and the thing that it the thing that you used to break on on turn 21 doesn't. So, users aren't testing your brand voice, they are trusting it. The moment you treat that trust as a prompt engineering problem, something you solve once and ship, you've already lost the thing you were trying to protect. The four-layer pattern isn't a framework I'm trying to sell. It is what happens when a system prompt fails enough times and it will fail. A prompt will eventually lose. The only question is is whether you in that about that infra testing or in front of a customer.

未来改进与确定性优先的权衡

我学到了一些会考虑以不同方式构建的东西。否决权应该是一个独立的服务,而不是单独接入每个表面。目前,数字守卫存在于一个热度叙述路径中,而诚实检查器是一个单独的函数。一个新服务需要手动记住接入否决权,这就像一个等待被遗忘的清单。将其变成一个所有内容默认通过的共享网关,意味着你不会意外地选择退出。潜在模式检测仍然是部分手动的,每个表面决定哪些条件适用。一个恰当的条件解析器会使这个决策变得明确和集中。此外,软标记使用的是拒绝(Rejects)而非模型。拒绝是快速、廉价且确定性的,它要么匹配要么不匹配,在它覆盖的模式上永远不会出错。一个小型分类器可能会捕捉到更多边缘情况,包括我尚未想到要编写模式的情况,但它是概率性的,有时会出错。目前,我选择确定性而非覆盖率。我会再次做出这个选择,但这是一个真实的权衡,而非明显的胜利。这是你需要为自己确定的事情。

Original English

I have learned a few things that I would consider building differently. And we'll probably go back and edit. Um the veto should be its own service not wired individually into each surface. Right now the numbers God lives inside a heat narration path and the honesty inspector is a separate function. A new service remembers to wire in the veto manually. Uh that's a checklist I waiting to be forgotten and making it a shared gate that everything passes through by default means you can't opt out by accident. Latent mode detection is still partly manual. Right now each surface decides which conditions apply. The heat narration surface knows to load couples notes. The briefing surface knows not to. That knowledge is scattered and a proper condition resolver would make that decision explicit and central. Um one place to look at the context and says, "This is who the user is. This is what they're going through. This is the route." And the soft flag is rejects not a model. Um rejects is fast and cheap and deterministic. It either matches or it doesn't. Um and it never gets wrong on the patterns it covers. A small classifier might catch more edge cases including the ones I haven't thought to write a pattern for yet, but it is a classifier that is probabilistic. Sometimes it gets it wrong. And right now I'm choosing determinism over coverage. I'd make that choice again as it stands, but it is a real trade-off and not an obvious win. That is something you might need to determine for yourself.

📌 文中提及的人物和组织

公司/组织: Isadora & Co

关键字: prompt-architecture ai-agent-design brand-voice multi-tenant-systems deterministic-veto