38 karma · joined April 25, 2022
- the agent under test - a user simulator agent, sending messages as a user would - a judge agent, overlooking and stopping the simulation with a verdict when achieved
it then takes a description of the simulation scenario, and a list of criteria for the judge to eval, and that's enough to run the simulation
this is allowing us to tdd our way into building those agents, like, before adding something to the prompt, we can add a scenario/criteria first, see it fail, then fix the prompt, and see it playing out nicely (or having to vibe a bit further) until the test is green
we put this together in a framework called Scenario:
https://github.com/langwatch/scenario
the cool thing is that we also built in a way to control the simulation, so you can go as flexible as possible (just let it play out on autopilot), or define what the user said, mock what agent replied and so on to carry on a situation
and then in the middle of this turns we can throw in any additional evaluation, for example checking if a tool was called, it's really just a simple pytest/vitest assertion, it's a function callback so any other eval can also be called
just wanted then to shameless plug this lib I've built recently for this very topic, because it's been much easier to sell that into our clients than evals really, because it's closer to e2e tests: https://github.com/langwatch/scenario
instead of 100 examples, it's easier for people to think on just the anecdotal example where the problem happens and let AI expand it, or replicate a situation from prod and describe the criteria in simple terms or code
I think AI slop on the editor changed for me when I was typing it and I didn't notice
fixed now, thanks!
Generally I don’t care much about the embedding and retrieval and connectors etc for playing with the LLMs, I imagined much more robust tools were available already indeed, my focus was more on the prompt development actually, connecting many prompts together for a better chain of thought kinda of thing, working out the memory and stateful parts of it and so on, and I think there might be a case for an “LLM framework” for that, and also a case for a small lib to solve it instead of an ETL cannon
However, I am indeed not experienced with ETLs, have to play more with the available tools to see if and how can I do the things I was building using them
Their code seems all rushed, and seems it worked out for initial popularity, but with their current abstractions I personally don’t think it’s a good long term framework to learn and adopt
That’s why I built my own alternative to it, I call it LiteChain, where the chains are actual composable monads, the code is async streamed by default not ducktaped, it’s very bare bones yet but I’m really putting effort on building a solid foundation first, and having a final simple abstractions for users that don’t get in the way, check it out:
On the plus side, it never triggers by accident, you have to be very intentional
Going forward, I would really like to put my soft skills to practice, to improve processes, to change things for the better, because I feel I haven't been doing that for too long, of course I think I would be able to do way more of that on the startup, but I also think I would be able to have some of it on this big tech position
So then the main puzzling part for me then is, if I join the startup now, I will probably be able to drive much of its architecture, have more fun, and grab more equity and position early on, and I don't want to miss this opportunity. On the other hand, I don't have any hard management experience in my resume, staying my employer will give me that with a good name, so if I move a a startup after that and later want to go back to any big tech as an engineering manager I'll be able to, and I would very much like to keep this optionality
Help me?