00:00:12.519
guess what a conference what a conference so okay I think now you can
00:00:18.520
hear me how's everyone doing I want to hear you charge me up come
00:00:25.279
on so someone told me I'm giving a second to last keynote uh which I'm not in the same category as Aaron sorry uh
00:00:33.040
but I'm looking forward to that anyway empowering the individual rails on AI uh you know one of the things that is
00:00:39.680
really amazing over the years over the decades I can say now about rails is the way that it has allowed me to
00:00:46.559
indulge uh my desire to experiment and make uh cool stuff by myself because
00:00:53.120
often that's the only way you can do it right you can't you have ideas and you can't afford to hire a team or or raise
00:00:58.640
funding for certain things and I find that one of the most beautiful amazing exciting things about
00:01:06.799
uh the way that AI is developing is that it amplifies that kind of potential and it it it 10 times uh amplifies it when
00:01:15.400
it comes to rails and ways that are amazing so first of all as more people are coming in uh let me just go to the
00:01:21.400
next slide and for those of you that are not familiar with me uh the realsway is probably what I'm most famous for in
00:01:27.520
this community uh but I do have uh almost 30 years next year it be 30 years as a
00:01:33.360
professional software developer and I did full stack Java from 1995 to 2004 2004 was when I fell in love with
00:01:41.000
Ruby and uh I was probably one of the first people in the world to be doing uh to consult with Ruby uh and rails at
00:01:48.320
thoughtworks and that was a significant experience uh that led me to write the rails way and found hashrocket and some
00:01:55.320
of my old friends at hashrocket are still here in the audience so hi to them did a brief AI related project in 2019
00:02:03.119
and that's what piqu my interest and I wanted to make sure to mention that you know a lot of things I'm going to talk
00:02:08.640
to you about are directly extracted from my personal experience I'm not a fan of vaporware or handwavy stuff that doesn't
00:02:16.840
really make sense in a practical context I want to make sure that I give you today ideas and practical inspiration
00:02:24.480
and tips and tricks that you can take home to actually use on your current projects that will are you as an
00:02:30.560
individual so uh what everything I'm going to show you started out actually
00:02:36.519
right before last year's rails comp I was really excited about access to the open AI API and I wanted to make a
00:02:44.000
contribution uh using that API and I created this open source Library called magma chat I announced it at rails comp
00:02:50.680
and gave a lightning talk on it and as a result of creating magma chat I was able
00:02:56.800
to create a bot for my uh for my partner uh Victoria who I was dating at the time
00:03:02.680
and she was working as a media partner for a conference series and she had a
00:03:08.799
copywriter so much better okay you know I fancy myself a standup comic and I've
00:03:15.519
tried standup comedy so I actually like this a lot better I don't like this thing it's
00:03:22.319
bothersome but all right so um yeah as a result of creating magma
00:03:28.640
chat uh you know I was talking to uh Victoria and I said hey let me create you an AI copywriter for your job and
00:03:34.120
she started using it all the time and when I saw that she was using it all the time uh I said hey do you want to start
00:03:39.760
a company together and we started this company called Olympia my uh the purpose
00:03:45.080
of this talk is not to Hype Olympia but I took a lot of the code that I'm going to show you out of Olympia so therefore
00:03:50.360
I just want to make you aware of where it's coming from uh in the case of
00:03:56.879
um what um I was doing with Olympia is to create you know these humanized Bots
00:04:04.599
and these humanized Bots give you um advice in the way that chat gbt would
00:04:09.680
give you advice but in particular roles so for instance um a recent conversation
00:04:15.760
I had with my par programmer Mike was you know asking him how can I use an rspec stub in my rails console I didn't
00:04:21.519
remember how to do that and he gave me that advice so anyway I I've been super excited about the work that I'm doing in
00:04:28.039
Olympia and I gave a talk talk about why I thought AI was so disruptive and
00:04:33.639
exciting uh and it was called the biggest wave of all uh Sin City Ruby which is a great conference shout out to
00:04:39.919
Jason you should definitely go to Sin City Ruby if you can uh but anyway I gave this talk uh and it was all about
00:04:46.360
Ai and my friend Tom Rossy uh at the end and Tom might be here as well he said
00:04:52.320
this seems really cool but where do I get started and I said wow um I think
00:04:59.320
that this is really worth uh investing some time into helping to educate and
00:05:05.080
disseminate the information that I've been learning over the last year of doing Olympia so anyway how can AI
00:05:11.479
Empower you as a rails developer there's really four steps to the enlightenment
00:05:17.000
of that so the first one probably all of you are doing to some extent or another
00:05:22.479
which is uh and I think dhh even mentioned it which is that chat gbt uh and CLA is
00:05:30.600
a better Google or stack Overflow it's easier to you know to get answers uh by asking these tools and most of the time
00:05:36.560
they give you good advice so that's step one I'm not going to spend time uh talking about this uh because it's kind
00:05:42.479
of obvious the second one is to use AI code completion in your editor IDE to code
00:05:49.199
faster and I'm guessing I I could ask for show let's ask for show hands raise
00:05:54.319
your hand if you use co-pilot or some sort of code completion and as expected almost everyone in the audience puts
00:05:59.880
your hand up right so that's the second step now the third step I think probably
00:06:06.479
less of you are using but it's to use AI to implement features that by asking the AI to code those features for you so
00:06:14.240
this would involve more than just code completion inside of a file this involves uh what could be termed agentic
00:06:20.599
behavior in the sense that you're collaborating with the AI and saying hey give me a a particular uh new uh you in
00:06:30.680
my rails uh app and it it goes ahead and creates it for you the fourth one and
00:06:35.800
actually what the bulk of the talk is about that I'm most excited about is using AI to replace entire components in
00:06:41.160
subsystems so that you can write less code and writing less code is really
00:06:46.960
really where you start to reap the kind of Whirlwind benefits that AI can offer and I think is the most
00:06:53.720
revolutionary uh part of what's coming in this AI Revolution so let let's get
00:06:59.840
to it I'm going to talk about these two things real briefly use AI to help you write code is number one and use AI in
00:07:06.199
your code so that you can write less code someone actually gave away the first part of my talk so I made it
00:07:12.360
really short now as a result uh thanks Peter rusika use cursor AI problem solved uh he's right step one use cursor
00:07:22.319
sorry GitHub oh they're sponsors I shouldn't do that right uh it's copil
00:07:27.759
and worth $20 a month um cursor gives you the ability to do code completion it's very good at it uh
00:07:35.440
you can do chat driven changes and refactoring uh you know by asking it to for instance
00:07:41.199
exract uh this actually solves something that I've been wanting ever since I left
00:07:48.039
uh the Java world and stopped using jetbrains uh products is that I missed
00:07:53.080
those refactorings you know I miss the ability to say extract the variable or pull this up a level or things like that
00:07:58.840
I have that again and and I know that Ruby mind does some of those things but you know this works
00:08:06.319
better um when you're giving those instructions you can give follow-up
00:08:11.560
instructions uh you can chat about your code base some of this is just I'm going to Breeze through it so I can get to the
00:08:16.800
good stuff I only found out about this a few days ago actually I was talking to a friend of mine about my talk and he told
00:08:23.759
me oh have you seen that cursor can create files for you I didn't realize cursor had a gantic behavior if you hit
00:08:29.120
command I I'm figuring some of you may not have figured this out already as well uh you can ask it to implement
00:08:35.039
features on your behalf so I don't know if it's very visible right here but I tried this a few days ago I asked it to
00:08:41.120
uh add an action and it did so step one use cursor okay now I
00:08:49.080
really want to get to the meat of this talk which is learning AI patterns learning how to use AI components in
00:08:54.560
your code so that you can reduce the amount of code that you have to write and you can actually offload a lot of uh
00:09:01.560
business logic and uh workflow and process Automation and orchestration to AI so uh I'm going to plug my book here
00:09:09.519
if you don't have my book already I know a lot of you do but this is my new book it's a 500 page book full of uh patterns
00:09:16.279
for how to do what I'm describing in this talk it goes into explicit detail not only about the big picture items
00:09:22.440
around architecture but also about concrete patterns and uh you know actual
00:09:27.560
code samples and like I said for the that code these ideas have been
00:09:32.839
extracted from working code in Olympia Olympia is an app that has a user base
00:09:38.360
that uses it all the time we are a small successful cash flow positive company that is using this every day day in day
00:09:46.360
out what I'm about to show you I will show you magic this is Practical Magic okay so first of all let me talk a
00:09:52.560
little bit about the abstract patterns abstract patterns as I describe
00:09:57.920
them are ways to understand how the AI fits into your code conceptually
00:10:03.680
so when you're describing to yourself in your inner voice you know okay well what can I do with AI or when you're
00:10:09.920
describing it to your boss uh you know what you want to do with AI uh you need
00:10:15.880
to be able to describe it in terms of the uh the architecture of the system how they will fit in uh those abstract
00:10:23.079
patterns I know that they might be a little bit difficult to read you know there's too many here but they include
00:10:28.360
things like narrowing the path which is the way that I describe reducing the latent space or or basically focusing
00:10:35.639
the AI on the task at hand uh there's also retrieval augmented generation which a lot of you are probably familiar
00:10:41.959
with because it's one of the fundamental techniques for how you provide grounded information to the AI but it also
00:10:49.200
includes things that maybe you haven't heard about like for instance self-healing data it's the ability to
00:10:55.519
automatically detect diagnose and correct anomal ities in the data that flows through your system uh and if you
00:11:03.839
want to get even more bleeding edge with some of this stuff there's even generative UI which is where you're no
00:11:09.920
longer explicitly designing every single screen and interaction of your user
00:11:15.600
experience you're actually setting a framework and guidelines that is then
00:11:21.279
interpreted by the AI in order to create a personalized user experience on the
00:11:26.519
Fly uh this can be affected by the profile of your user what their
00:11:32.680
previous activity has been on your system or what they're trying to do what Their what their actions reveal about
00:11:39.279
their intentions and the AI adjust the user experience on the fly so the the
00:11:44.320
one I want to talk to you about today there's two of them um the first one is
00:11:49.519
called narrow the path and the idea of narrowing the path is something that's very very fundamental to understand as
00:11:55.680
kind of one of the foundational uh pieces of knowledge for doing prompt engineering Okay the reason is that the
00:12:02.560
latent space uh which is the the multi the high dimensional space of the knowledge that
00:12:10.519
is captured in the especially in these Frontier models uh that have billions and now are you know getting into the
00:12:16.680
trillions of parameters that they are trained with is such a vastly
00:12:22.360
incomprehensible large amount of data that an AI has access to on the Fly that
00:12:29.600
at any given moment that you're trying to get the AI to do something with your
00:12:34.720
prompt engineering as they say it is subject to a lot of difficulties that
00:12:40.839
are not immediately apparent so those difficulties include things like information
00:12:46.199
overload is probably the most uh you know obvious one if you think about it
00:12:51.839
for any given thing that you ask the AI to do it has like almost the entire history of the internet of what people
00:12:57.600
have said about that thing and to do it so if you don't give it like temporal
00:13:02.880
constraints about what time or uh scope constraints or what even what domain you're operating or talking about then
00:13:09.839
it can get overloaded and get confused there's contextual ambiguity the way that you speak to the AI can cause it uh
00:13:17.399
because of that vast lat in space to not know exactly what you mean and because AIS are trained to be
00:13:24.199
helpful that they interpret that helpful to just go ahead and give you an answer instead of saying I don't no or can you
00:13:30.680
please clarify there's ways around that but that's not immediately obvious so when I think about narrowing the path
00:13:37.160
part of narrowing the path is making sure that my context is as narrow as possible I mentioned temporal
00:13:43.920
inconsistencies and domain specific nuances but if you want to have a
00:13:49.240
takeaway for this narrowing the path means focusing the model's reasoning on a specific subset of
00:13:55.759
possibilities so when you're asking the AI to do do something or generate a piece of content in your prompt
00:14:02.199
engineering you want to specifically think about okay out of all the different ways that this could be
00:14:08.720
interpreted you know and then you literally maybe even list them out and
00:14:13.800
then you go how can I how can I narrow this path uh so that it doesn't go off of
00:14:19.519
it here's an example of the abstract pattern being implemented with a
00:14:25.120
concrete pattern so the concrete pattern is called Ro assignment and in the role assignment and some of you may have done
00:14:30.959
stuff like this uh in your own projects if you're experimenting with it uh here are two different role assignments the
00:14:37.199
first one says you are a teacher giving lessons to a curious 8-year-old child explain how attention in lmm llms works
00:14:44.639
this path has been narrowed in that a lot of terms and terminology that an 8-year-old child would not understand
00:14:52.279
are eliminated from the space of possibilities okay uh that is significantly different than telling the
00:14:58.000
AI that they are an NLP or natural language processing Professor giving a lecture to compai uh
00:15:04.199
postgrads right okay so narrow the path was the first abstract pattern the second one I
00:15:09.839
want to talk to you about is called multitude of workers this one is really significant was a breakthrough for me in
00:15:15.079
terms of thinking about how to design uh and use AI inside of my rails
00:15:21.560
applications okay the idea is that you can decompose your workflows uh you
00:15:27.880
could substitute business l in there into collaborating Almost Human discreete components it's almost like
00:15:35.399
having uh little humanlike microservices that live inside of your code okay they
00:15:41.680
don't have to live outside they're not hosted on some external system these are code modules inside of your code okay
00:15:49.720
you ask these code modules these discrete AI components your multitude of workers if you will uh to perform
00:15:57.240
specific tasks or uh make complex decisions in ways that you would have
00:16:03.720
otherwise had to code imper uh imperatively or using just normal programming
00:16:09.440
methods uh so the reason I got to this
00:16:15.399
realistically you know I I I worked at thought Works had the honor of being uh mentored by people like Martin Fowler
00:16:21.839
and Fred George especially who originate a lot of the thinking around microservices to begin with uh but also
00:16:27.720
the first o programming Lang language that I use was small talk and in small talk we think about interactions between
00:16:33.079
objects as messages that are being kind of spoken between these objects um with the case of discrete AI
00:16:40.279
components and a multitude of workers approach you can actually speak you know between these
00:16:47.040
objects in ways that are pretty much plain language English right so in my
00:16:52.240
example here one component might tell another one user 7482 hasn't logged in
00:16:57.319
recently the component would reply let me look at their activity history it goes and looks at it and then based on
00:17:03.040
that it says okay I'll send them an email about our latest new feature as a way to maybe generate some engagement
00:17:09.319
okay that's the kind of thing I'm talking about seems a little Loosey Goosey maybe handwavy and if you're skeptical I understand uh but there's
00:17:16.559
benefits that we'll get into very soon another foundation for this is actually behavior-driven development in the sense
00:17:23.160
that what we were trying to do 10 and 20 years ago uh when bdd was like a really really hot thing some of you may
00:17:29.840
remember is to describe in plain language what we wanted our system to do
00:17:35.600
and in fact at hashrocket one of the things that we pioneered was actually uh making the basis of our requirements and
00:17:42.720
even in some cases our contract negotiation these definitions done in
00:17:47.840
cucumber using bdd techniques so I was immersed in this and and help drive this
00:17:53.559
forward so I'm kind you know I feel like those of us that had the uh you know the
00:17:58.880
pleasure and sometimes the pain realistically of doing this stuff uh you know are kind of positioned to to think
00:18:06.039
about it I'm very influenced and I owe a debt of gratitude to to ASAC and Stephen Baker this was at rubycon 2005 so a
00:18:12.600
little bit of history and trivia this is where arpec was started literally the
00:18:17.720
first lines of code for what became arpec and also some of the lines of code that later became cucumber were written
00:18:24.000
at Ruby comp 2005 which is also where I took this picture that I posted on Twitter yesterday hi Toby thanks for
00:18:31.240
coming to my talk um I don't know if David is here as well but yeah fun times
00:18:36.919
okay so I don't know if magic triggers anyone in this room it certainly triggers other people out there in the
00:18:43.080
world that have not been indoctrinated properly thanks uh for saying that in your
00:18:48.400
keynote today I do think we need to indoctrinate people more by the way but yeah sorry don't get triggered I'm going
00:18:54.840
to show you some magic okay I mentioned Olympia before and I mentioned that some of these techniques are directly extracted from Olympia in Olympia uh one
00:19:02.840
of the things that you can do is to add additional Bots to your account if you don't already have them uh in this case
00:19:08.960
what I'm showing here is that chandel is an optional bot that has not been added to the account and um I'm going to show
00:19:16.640
you the way that I implement the addition of a bot to a user's account okay that's done with an account manager
00:19:24.320
class the account manager class is one of these multitude of workers that I use to collaborate inside of the Olympia
00:19:30.360
code base and the prompt that drives that account manager class at Olympia
00:19:36.039
reads like this I'm not going to read the whole thing I'll just read the first paragraph you're an intelligent account
00:19:41.240
manager for Olympia the user will request changes to their account and you will process those changes by invoking
00:19:46.880
one or more of the functions provided escalate to human support rep if you encounter any problems okay this is
00:19:53.880
almost the entire prompt there's a few other details that I left out for clarity
00:19:59.000
here are the functions that are available to the account manager as tools that they can use to do their job
00:20:06.159
when they're processing changes to the account since one of the main things that I ask it to do is to handle adding
00:20:11.960
Bots to accounts they have an ADB config to account they can add a new line item
00:20:17.280
to the subscription they can notify the account owner and they can call a method is completed I actually left one out by
00:20:24.240
mistake they can also contact customer support they can literally like cause a
00:20:29.360
ticket to be filed okay um there's no AI magic going on in the implementation of
00:20:35.240
these functions the implementation of these functions is just normal uh in
00:20:40.280
this case sorry shitty rails code uh that does the thing that it says that it
00:20:45.320
does in this case adding bot config to account um interestingly enough I rolled this out to production and a week
00:20:52.240
later uh JP our one of our great customer support reps contacted me in slack and said hey we have a situation
00:20:59.440
with a user who had scheduled their account for cancellation their account is not canell yet but it's not in an
00:21:05.320
active State and they added a bought to their account and it worked and I don't think that's correct this was just a missing requirement this kind of thing
00:21:12.320
happens all the time right so I said yeah that doesn't seem right I think we should probably not let people who are
00:21:17.720
scheduled to be canceled add new things to their account so he said great do you want me to add a noce story for it and I said no
00:21:24.799
I think I already got it and what I had done was basically go in and write this new line do not allow the user to change
00:21:30.000
their account or add a new AI assistant unless their account subscription is active I don't have time to get into
00:21:36.039
like the actual implementation of how the account manager interacts with the rest of the system but I want to make it clear that
00:21:43.520
this actually did work so I did some ad hoc testing admittedly to see what would
00:21:49.240
happen with this new change to the prompt and what happened was that the account manager sent me a notification
00:21:55.320
saying hey I'm sorry your account is not active State therefore I cannot add this
00:22:00.480
spot to your account um I don't know does this seem magical to
00:22:06.600
anyone it seemed pretty magical to me this is not for everyone maybe you don't want to make patients lives or you know
00:22:13.200
jet planes flying through the air dependent on this sort of thing but you know one of the times I mentioned this
00:22:18.600
before someone said hey aren't you afraid this will hallucinate a bad result or send you know something that
00:22:24.200
do something that's not to do the truth is with narrowing the path and giving you
00:22:30.919
know explicit instructions this works I think about as well as a human would work this is pretty basic stuff that
00:22:37.000
you're asking it to do and it seems to be well within the the reasoning capabilities of the state-of-the-art models and in fact one of the reasons
00:22:45.159
that this works and one of the reasons I think the material in this talk is important is because of the
00:22:50.799
architectural approach if you took a naive approach to doing this sort of thing you might lard your entire
00:22:57.559
component of with literally all of the business rules of your of your
00:23:03.159
business uh or so much information that it gets overwhelmed or confused and does
00:23:08.320
the wrong thing and then you might go hey this approach doesn't work it sucks Obie's lying blah blah blah no that's
00:23:14.279
not the case the case is just that you haven't made that component small enough right when you do these narrowly scoped
00:23:21.080
uh techniques they they actually work so anyway that's my multitude of workers
00:23:26.400
pattern there's applications I think in account management which I just showed you but also e-commerce I know a lot of
00:23:32.120
you work in e-commerce like half the conference is Shopify right so okay uh product
00:23:38.640
recommendations fraud detection sentiment analysis Etc there's Healthcare applications as well I wanted
00:23:45.000
to mention before I end the talk some of the concrete patterns so so you see that these can actually be kind of fun uh
00:23:51.360
there's 28 concrete patterns in the book um I'm looking at them real quick I mean
00:23:57.520
I I with with a couple of exceptions they're all extracted from working code it's very very crucially important to me
00:24:04.360
that patterns are extracted from real working code right um a lot of the patterns have to do with prompt
00:24:11.080
engineering uh for instance structured IO this is a pattern that describes how
00:24:18.000
you provide your input data to the llm uh AI in a way that predisposes it to be
00:24:24.919
able to understand as data as opposed to just a conversation Hey Joe like how you
00:24:30.360
doing today okay now this this grounds it Narrows the path okay to use the
00:24:36.840
example for the AI that the way that you want to interact with it now is as a
00:24:42.799
machine that is you're going to give it data and in fact one of my predictions that I made is that XML will make a
00:24:49.120
comeback because it's it's actually super super trivial to parse uh XML
00:24:54.240
using regular Expressions uh and you can do things like this so in this case um
00:25:00.440
an example taken from the book uh I give it a description and I'm wanting to get name size price and color from the
00:25:06.760
product description the fact that I have already put this into XML format means
00:25:11.840
that it's going to very very quickly and to say oh he wants XML back I don't have to do a lot of extra prompting and
00:25:18.080
prompt engineering to get this result another example concrete pattern
00:25:23.240
that's used in prompt engineering is the ventriloquist pattern which I think is really really fun okay
00:25:28.880
um it almost feels like a hack a lot of this stuff almost feels like a hack but you know it actually works really really
00:25:34.720
well the idea when using the ventriloquist pattern is that you plan the desired outcome from the ai's
00:25:40.039
response but the way that you narrow the path is by speaking on behalf of the AI
00:25:45.320
you're using it like a puppet in a way you're providing part of the interaction
00:25:50.600
that you have in that conversational uh cycle with the AI and I'll show you an example of that so this
00:25:57.760
is a real uh class from Olympia that in the case that the search uh that the user did or
00:26:05.120
caused to happen more precisely did not return any results I
00:26:10.840
want to produce some alternate keywords which I will now use to do a search again and try to bring back results so
00:26:17.039
if I call your attention I don't think I have a laser here unfortunately but if I call your attention to the middle uh
00:26:23.399
method there uh which is where I assembled a transcript
00:26:28.919
the system prompt which is the directive that kind of sets the tone for what is going on here is you are a powerful
00:26:34.200
search web search engine so here I'm doing a role assignment okay um I'm
00:26:40.520
providing the input from the user and the input from the user was their original question that they asked that
00:26:47.159
they didn't get a result from now I'm not going to tell in the
00:26:52.960
promp all this I'm not going to say hey you know the user us didn't get the
00:26:59.039
results I'm actually going to simulate and that's why I call it vilous the user asked a question the
00:27:05.080
assistant said searching no results found this is congruent with the fact that it's a search engine and then I'm
00:27:10.559
providing the prompt uh and the prompt says matching the original language of the question generate three alternate
00:27:16.399
keywords that might produce better results the reason I did it this way was not just to be clever not just because
00:27:21.799
it was a hack or an interesting example for the book I literally did this because I was struggling with the other
00:27:27.039
approach with the more just kind of direct approach of like hey um generate alternate keywords for this terms right
00:27:34.880
like I was doing that and it just wasn't performing very well and then one day I decided hey oh I could use this ventriloquist kind of thing and it
00:27:41.200
actually worked really well it understood much much better what I was trying to
00:27:48.399
do um some of the other concrete PL patterns have to do with uh how you
00:27:54.320
create this discrete components um an example of a discrete component would be a predicate now if you've done Ruby long
00:28:01.000
enough you're an expert in Ruby you know that the question mark methods are called predicates because they are uh
00:28:07.840
return booleans right true or false result and a predicate pattern as far as I'm concerned with AI is one in which
00:28:16.000
you ask the AI question that get that is designed to give you a yes or no answer or a true or false answer one of the
00:28:22.480
side benefits being that you can ask to for it to explain its reasoning okay so here's an example
00:28:29.600
um I'm not going to read you this whole thing but at the beginning of this prompt uh you give a transcript of a
00:28:35.760
conversation uh and the idea uh for this particular predit class is to analyze
00:28:41.200
what the user is talking about and then answer the question does the transcript contain enough context for the assistant
00:28:48.480
to be able to answer the user question without making assumptions if you think about the fact
00:28:54.399
that Olympia is you know kind of like a chat GPT and we do a you know we have long-term memory and we search that
00:29:00.080
long-term memory in order to provide uh proper answers to the prompts this is a
00:29:05.120
very useful thing for us to know whether there's enough context in the the conversation as it's gone so far in
00:29:11.559
order to do that search so here's another concrete example just going to go through it real quickly an API facade
00:29:18.399
is something that's actually almost directly taken from Gregor Hop's classic uh patterns of Enterprise Integration
00:29:24.279
but when we do it as an discrete AI component what that API facade pattern lets us do is to go from a generalized
00:29:32.159
AI assistant that knows that it can do certain capabilities like interact with
00:29:37.200
the user's email but it doesn't lard the context of that General assistant with
00:29:42.840
all the specific implementation details of how an API works in the case of Olympia Olympia assistant can help you
00:29:49.760
with your Gmail but if I put all of the Gmail capabilities or even a subset of them of the API that's available into
00:29:57.200
the main conversation Loop it would get the that assistant confused very quickly so we use the API facade to basically
00:30:05.559
set up that bridge to give the main assistant the general assistant more capabilities than it would
00:30:12.200
otherwise anyway a lot of the examples that I've shed here today uh are based
00:30:17.799
on my own little Library called Ray that's Ruby AI extensions um you can
00:30:23.320
find it at our Olympia GitHub and everything I've shown you today is described in a lot of detail in
00:30:30.799
my book patterns of application development using AI which I'm super excited uh to say that Gregor hopy who I
00:30:37.080
mentioned a minute ago is writing the forward for and as soon as he sends it to me which should be any day now uh
00:30:43.159
we're going to get this published in hard copy as well so if you want it today it is available and pretty much
00:30:48.360
done on leanpub or you can wait for it to come out on uh all the platforms but anyway I hope you get a lot of use from
00:30:54.440
this and I hope you enjoy the rest of the conference and I'll be avail able if you have any questions thank you very
00:31:00.240
much