Episode Transcript
Available transcripts are automatically generated. Complete accuracy is not guaranteed.
Jennifer Reif (00:05):
You are listening to the
Breaktime Tech Talks podcast, a bite-sized
tech podcast for busy developers wherewe'll briefly cover technical topics, new
snippets, and more in short time blocks.
I'm your host, Jennifer Reif, anavid developer and problem solver
with special interest in data,learning, and all things technology.
I finally made a breakthrough inmy Gen AI application with Quarkus
(00:28):
and Langchain4j after havingsome dependency issues last week.
So I now have a working app.
I'll give some more details there.
Then I'll add some insight into the bookI'm co-writing, and hopefully answer some
burning questions you might have on that,as well as mention a few places I'll be
appearing in the first few months of 2026.
Then I read a blog post onthe Neo4j developer blog about
(00:50):
a new data type for vectors.
Without further ado, let'sdig into the details.
To start us off on a high note, I now havea working Quarkus Langchain4j application
I had to do a few different things.
I spent quite a bit of the first part ofthis week debugging and still hashing out
issues to see if I could get it going.
But I initially started by upgradingmy Spring app, making sure everything
(01:11):
was good there, and then ran into acouple of little bugs there and fixed
those and thought, oh, I wonder ifthat might be the same problem in the
Langchain4j and Quarkus application.
So I switched over there, did the samething, some updates, some upgrades to
different things, debugged a little bitfurther, and finally had a breakthrough.
There were a couple ofthings going on here.
(01:32):
The first is that the latest Quarkusversion of 3.30 did better about pulling
in some of the later dependencies.
So it was pulling in thecorrect Langchain4j core and
community versions at that point.
that helped quite a bit and relieved someof that dependency conflicts I was seeing.
Then I also upgraded the MCPCypher Server on Neo4j's end.
(01:57):
They had a new versionout, so I upgraded that.
That ended up breaking my UVX installationand some of the caching that was going
on there, which may have initiallycaused some problems, but also was
preventing some other problems.
So I had to sit down anddebug some of that as well.
That kicked off some moredependency mismatches.
I had to add an additional argument in theMCP configuration for pulling a specific
(02:22):
version of FastMCP, which is a dependencyinside the MCP server in Neo4js.
So I had to update that as well.
Add an argument into the MCP config,so that's there in the repository.
You can see that.
But I also had to add some wrapper methodsinside the RAG tools class that sets
up all of the tool definitions because,while I could see the MCP tools and I
(02:45):
could call each one of them individually,I, it didn't seem to retrieve those
as one in a set of multiple tools.
I had a few custom tools that Idefined for vector search for graph
traversal, graph RAG, and thenfor a couple other things as well.
And it didn't seem like the MCP toolswere being added to that full list.
(03:07):
It would either see one or the other.
So what I ended up doing is justadding wrapper methods inside
the RAG tools class in order tospecifically call and add those MCP
tools to the list in the RAG tools.
And then all of a suddeneverything was working fine.
So I'm not sure why it wouldn'tadd them automatically.
That would be nice to add in Langchain4j.
It should automatically pickthose MCP tools up and add them
(03:30):
to the full list of tools that areavailable within the application.
But for some reason, it wasn't eitherprioritizing them correctly or just
adding them to the list correctly.
So, even though I could call the MCPclient directly and list the tools,
for some reason, it just didn'tpick those up unless I specified and
wrapped those tools in the full listof customized tools I already had.
(03:51):
You can check that out, you canlook at the differences there.
Again, hopefully something that maybewe'll be tweaked and adjusted as time
goes on, but that was what I had to do.
But now I do have vector RAG working.
I have Graph RAG working, and I have MCPintegration working with text-to-cypher
tools available, which is amazing.
The next thing on my list is Iwanna talk a little bit about the
(04:13):
Java book that I'm working on.
I'm co-writing this book, it's calledAI First Java, and it talks about how
to learn Java in an AI first approach.
So this really looks at how studentsand newcomers to the Java language,
will likely learn Java now and into thefuture because we have so many AI tools.
We have things like AI chat tools,and lots of good coding tools.
(04:37):
How are we going to continue to learnprogramming or how are newcomers going
to learn programming from the outsetwith all these tools at our fingertips?
It starts with an intro to programmingand some Java concepts, but talking
from an AI first perspective.
So it's a little bit different from theway we've approached programming before.
(04:58):
And it starts with those conceptsand the book will continue into
full application development.
It's a little bit interesting becauseI feel like that a lot of the coding
tools are really helpful for divinginto deeper topics and jump starting.
But on the other hand, youstill have to back up and teach
those introductory concepts.
(05:19):
So integrating the two things that arerelatively intermediate and advanced with
AI and then stepping back and explainingthe things that it generates or it
builds for you, is a little bit of adifferent approach than what I'm used to.
I'm super excited to put this together.
I always have felt that Ilearned the basics better when
I have to teach it from scratch.
(05:39):
This is something that Ilearned with music, for teaching
music lessons for years.
It's always interesting once you passthat beginner stage, it's easy to get
in your own bubble with the blinderson and not realize how to address or
explain those first initial conceptsto someone who has no idea what
(06:00):
those mean or how those work.
And I've always felt that I learnedway better when I can explain those
introductory concepts, go back to thebeginning and remember what it was like.
And find new and inventive waysto help other people understand
those things hopefully betterthan I did when I learned them.
I am really enjoying this process andthe writing so far of putting this
(06:21):
book together and I'm looking forwardto keeping you posted on the progress
through probably middle of 2026.
I'm also gearing up forsome events in 2026 already.
Yes, I know we haven't even closedout 2025, but I have a Glasgow meetup
in January, middle of January or so.
So I'll be in, Europe for that, the UK.
And then I have Jfokus in February.
(06:41):
I'll be speaking, presentingthere at that conference.
I haven't been in a few years,and I'm really excited to go back.
Then I'll be at DevNexus in March.
This is one of my favorite events everyyear, along with Jfokus and many others.
I'm excited to be back for thatconference in Atlanta in the US in March.
And then I'm also looking at newtopics, new learning, new exploration
(07:02):
as I'm gearing up for 2026.
I'm building lots of new things, thinkingabout new concepts, how to integrate new
tools and different things that peoplemight wanna be interested to know.
I also wanna recap the thoughts onhaving a guest here on this podcast.
I'm thinking about a guest every month.
I already am lining up January's guest,which I'm really looking forward to.
(07:23):
But if you want to leave feedbackor suggestions, don't forget that
I do have a podcast feedback form.
I will link that in the show notes,but you're more than welcome to reach
out to me on socials or however youwant to connect with me and provide
your thoughts on either guests orsuggestions of feedback that you have
on just this whole idea of addinga guest to break time tech talks.
(07:46):
The blog post I was able to getthrough this week was Introducing
Neo4j's Native Vector Data Type.
Neo4j recently added a new,entirely new data type to the
database to support vectors andvector indexing and vector search.
It looks pretty seamless to migratethis, and it also looks like it's
a nice transition if you're usingthe old list format of vectors.
(08:10):
So previously you would store a vectorvalue inside Neo4j as a property,
and this was just being storedas a list of floats in this case.
But, the new vector data typetransitions away from that.
It's a totally separate datatype, so converting between the
two, it looks pretty seamlessto me, which is really nice.
(08:30):
There's nothing that's going tobreak right out of the gate for
you, at least, hopefully noton the database side at least.
Then, this new data type isoptimized for constraints, semantic
searches, and good data integrity.
So this is really interesting andreally helpful as we move into this next
phase of generative AI integration withall different types of tools, right?
(08:54):
As we start building more sophisticatedapplications and things with these tools,
we really want to make sure that thevector searches that we're doing, the
semantic searches, anything we mightbe doing those with those vectors.
We wanna ensure we have good data thereand good representation of that data,
and that means in vector format as well.
Having a totally separate vectordata type means that you can optimize
(09:18):
that type for creating constraintsand having good high data integrity
so that numbers don't get skewed ormanipulated or just not stored properly.
And then also increasingthe quality of your semantic
searches, especially over time.
The driver support is also there.
So you can retrieve vectors from thedatabase and you can save vectors to the
(09:40):
database all through all the differenttypes of language drivers that we offer.
So that's really nice forworking within your applications.
There are some programmatic examples,plus a Cypher example as well in the blog
post, You can see what that looks like.
And I will need to go back andupdate several of my dataset imports
now to take advantage of this.
Instead of saving the embedding as justa regular properties series of lists, now
(10:02):
I can go in and save it as a vector type.
And the blog post shows you howto do that, which is super nice.
I am so thrilled that the Quarkusand Langchain4j is now working
just in time for the workshoptraining I gave this week.
As we wrap 2025 and head into2026, I'm really excited to see
where the adventures take me.
This podcast will probably geta break during the holidays.
(10:24):
I hope everyone can enjoy some time tobreathe and prepare for a fantastic 2026.
As always, thanks forlistening and happy coding.