1,888 karma · joined April 2, 2023
The only way I can think to prevent this is to run a separate copy of the agent for each user, which sounds pretty expensive. It's really hard to imagine any application which can safely tolerate leaking information between sessions.
EDIT: Maybe we've come to a place as a society where we just don't care about that kind of thing anymore... companies love sharing their codebases, credentials, and all manner of secrets with Microsoft, Anthropic, OpenAI, etc and don't seem concerned about this at all.
What I'm talking about is something like a customer support agent. If that thing can take any consequential action other than simply parroting publicly available documentation back to users, that's unsafe, or at least likely to cause problems. If you believe me that it would probably be a bad idea for a customer support agent to, say, be able to twiddle RBAC entitlements then probably we can't replace our support staff with an AI agent. OK, so maybe the AI agent can be sort of a front-line filter. Now we need some way for this front-line filter to bubble tasks up to the second line. This fits with how many support orgs work, seems sensible right? But how might this be abused, and what can an attacker do? Potential consequences include DoSing your entire support org, flooding your jira/salesforce/whatever instance with garbage, etc.
So even the most limited, almost useless application is kind of dangerous.
EDIT: one thing people really seem to like the idea of is "natural language queries" in data intensive products. Personally I believe this idea is misguided--query languages exist for a reason, they're really useful tools for thinking about queries. But giving these people the benefit of that doubt, I still can't think of any way to do this safely unless every user gets their own sandboxed model instance. Otherwise it seems likely someone will be able to exfil another user's queries. This is of course assuming there's sufficient security between the LLM and the database that's actually _running_ the queries, which is not trivial.
NSA and others employ thousands of people who actually are super good at computers. If this message was coming from those people--actual credible experts--I'd be a lot more interested. Instead, what it seems like is happening here is the same organizational brain rot that's happening everywhere. Out of touch leadership, a skewed information environment, and bad incentives align to produce utterly insane conclusions divorced from reality. In short, psychotic delusions.
This is, probably, just marketing noise. Nothing to worry about, except that the people spouting it have been psychologically compromised. So if their job function is essential, that's a problem.
How do you sanitize inputs to an LLM? Like how can you even make a secure user-facing product with this thing?
Maybe I'm lacking imagination, but it seems to me all the great "natural language interface" solutions this is supposed to enable are pretty badly hobbled by this issue.
EDIT: LLM or not, this is still true. If you have LLMs pumping out tons of duplicate code you're wasting tokens, and probably more importantly wasting engineer hours reviewing duplicate code.
In some cases it might be a fair trade, in moderation. In general it's certainly wrong.
When that happens there's a major engineering leadership failure currently in progress, even if engineering leadership isn't aware of it.
EDIT: I guess intuitively, big (lots of inertia) damped systems are probably pretty safe--you can do all kinds of crazy things with the control input and it won't really have much effect. The only way you could go wrong is drift.. Anything that is inherently stable seems like it should be "easy"--like a high-wing monoplane with lots of dihedral angle, you release all control inputs and it defaults to straight and level flight.
I feel like we're about to learn a similar lesson with generative AI. Things don't always get easier/better/faster.
> registrants returned again and again to the same theme: that AI will reorder work, war, education, and belief within a few years.
lmao. nvm. they're idiots.
1. Some event triggers the function (HTTP request hits load balancer or whatever)
2. A VM is loaded from NVMe (possibly on another computer, and transferred over the network) into RAM
3. That VM boots up
4. The function code runs
5. The VM is terminated
Naively, this probably takes a lot more RAM (not to mention all the other computing resources) than to just have another HTTP handler sitting idle on some computer somewhere.
So this is only a reasonable choice if doing this intensive computation for a short amount of time, and using a large amount of resources for that short amount of time, is somehow better than doing a much smaller amount (maybe none at all) of computing over a longer amount of time. It's kind of hard to tell what the actual conditions are that merit one solution over the other. The other layer is the cloud pricing model, but that's a whole other can of worms..
I have yet to encounter a system that didn't have at least some computers (or cloud instances) that always need to be running. Those computers are almost always a bit overprovisioned (not using 100% of their CPU or RAM or IO all the time). So it has always seemed to me that instead of running a cloud function, it would be cheaper in terms of compute resources to execute the code from step 4 above on one of those machines.
Obviously we have cloud functions for a reason, people like them and find them useful. But is there ever a regime where they're optimal?
EDIT: I guess I've implicitly assumed the code in step 4 is doing a small amount of work. Maybe there's a goldilocks zone of work-per-invocation where this model is more optimal? But then of course there's always the standard executor pool model, and that way you don't have to spin up a VM per task invocation...
Sometimes when some janky p.o.s. solution works well enough, it truly is good enough.
EDIT: It's also possible that the era of hypergrowth might end. Most of the world's addressable eyeballs are already being monetized. There's no new coal seam to mine. If tech becomes more about doing the same with less, and less about explosively growing at all costs, we'll probably see more efficient systems. And fewer people building them. I think this kind of larger systemic change would be more likely to drive efficiency improvements than the (probably more temporary) RAM crunch.
Agree, but it's going to be a long, hard, potentially ultimately unsuccessful uphill slog. I think the main obstacle is basically 2 decades of inertia. Approximately everyone believes that server side software needs to scale horizontally. So we optimize systems for this property--I can make it work better by just throwing more computers at it. This was a lot more important ca. 2004 (MapReduce) than it is ca. 2026. For resiliency and redundancy, how many nodes does your service actually need? If you're running more than that number, do you have some kind of justification as to why? This is the mindset we need to try to move towards, but it's very different from how we currently do it.
EDIT: Another good question to ask, which we don't do enough: "does it really need to be a separate service?" Using data in RAM that's already been allocated is probably better than allocating more and shipping data over the network...
Absolutely. The AI ROI question is the entire ballgame. Earlier today I heard the term "jagged technology" for the first time, and it's an extremely good one. Given how jagged AI appears to be, anecdotal reports are all over the place. It also doesn't help that it appears heavily using this technology can affect people psychologically. The information environment for someone who wants to know what this tool is good for and what it isn't is.. treacherous. Some clear, objective grounding would really help.
I think this touches obliquely on a point I keep coming back to, that one of the most important things a codebase does is to communicate ideas about how a process should work. Yes, it also produces some binary that runs on a bunch of servers or whatever, but that's a really temporary, ephemeral artifact. The lasting thing is the idea. Making your ideas (expressed in code) easy to understand, easy to work with, and easy to evolve in time is the art of software engineering. I 100% agree, from my own experimentation with LLMs, glancing at something a model has produced and checking that it has some test coverage isn't enough to know whether it's well-engineered. You'll only find out later when you try to work with the code.