1
00:00:05,400 --> 00:00:09,180
You are listening to the Breaktime
Tech Talks podcast, a bite-sized tech
2
00:00:09,180 --> 00:00:13,440
podcast for busy developers where we'll
briefly cover technical topics, new
3
00:00:13,440 --> 00:00:15,900
snippets, and more in short time blocks.
4
00:00:16,230 --> 00:00:19,950
I'm your host, Jennifer Reif, an
avid developer and problem solver
5
00:00:20,130 --> 00:00:24,030
with special interest in data
learning and all things technology.
6
00:00:25,107 --> 00:00:27,837
I went from feeling that there
wasn't much to discuss this week
7
00:00:27,837 --> 00:00:29,427
to feeling like I had a lot to say.
8
00:00:29,847 --> 00:00:33,147
I discovered something new about
the Neo4j vector index this week.
9
00:00:33,387 --> 00:00:35,757
You can tell me if you think
it needs updated as well.
10
00:00:35,847 --> 00:00:41,127
And then there was some recent confusion
over not just the definition of MCP,
11
00:00:41,457 --> 00:00:43,742
but how it's used and why it's useful.
12
00:00:44,097 --> 00:00:47,427
This has me revisiting this topic a
bit to give my take on the subject.
13
00:00:47,782 --> 00:00:50,812
Finally, I caught up on some
content that challenges the way we
14
00:00:50,812 --> 00:00:52,912
think about vibe coding and RAG.
15
00:00:53,272 --> 00:00:53,992
Let's jump in.
16
00:00:55,042 --> 00:00:59,462
I was exploring more on the Neo4j
vector index, creating a project that
17
00:00:59,462 --> 00:01:04,952
integrated with an already existing public
database, a Neo4j graph database that
18
00:01:04,952 --> 00:01:08,202
I could access and utilize the data and
the vectors that were already in there.
19
00:01:09,217 --> 00:01:15,247
However, I found that I couldn't figure
out exactly what model was being used
20
00:01:15,277 --> 00:01:19,897
for the particular embedding field on the
entities that I was looking to search.
21
00:01:20,347 --> 00:01:22,177
So for instance, I'm
connecting via an app.
22
00:01:22,477 --> 00:01:26,617
Spring AI requires you to specify
a model that you're going to
23
00:01:26,617 --> 00:01:27,697
be using for the embeddings.
24
00:01:27,997 --> 00:01:31,972
Because if you send in a question
and it creates an embedding using
25
00:01:32,002 --> 00:01:36,682
one type of model, but then you've
created embeddings in your dataset
26
00:01:36,682 --> 00:01:38,302
using another type of model.
27
00:01:38,482 --> 00:01:39,832
Those two won't line up.
28
00:01:39,832 --> 00:01:42,562
You won't be able to do a vector
similarity search on that.
29
00:01:42,902 --> 00:01:46,012
I talk about this in a previous
episode of this podcast.
30
00:01:46,282 --> 00:01:50,602
I will try to link that as well, how
you need to try to stay at least within
31
00:01:50,602 --> 00:01:55,307
the same model family, if not the
exact same model for when you in embed
32
00:01:55,337 --> 00:01:59,807
your data and create the vectors as
well as when you send in questions and
33
00:01:59,807 --> 00:02:01,427
create embeddings for those as well.
34
00:02:02,667 --> 00:02:07,527
Spring AI requires you to specify a model,
but I went out to the public database with
35
00:02:07,527 --> 00:02:11,727
all the data ready for me to use, and I
couldn't figure out which model was used
36
00:02:11,787 --> 00:02:13,227
to create the embeddings in the data.
37
00:02:13,627 --> 00:02:16,777
I asked a colleague that I
knew had helped and contributed
38
00:02:16,777 --> 00:02:18,277
in putting together the data.
39
00:02:19,497 --> 00:02:23,247
And was like, Hey, can we figure
out what model is being used,
40
00:02:23,247 --> 00:02:24,987
just looking at the vector index?
41
00:02:24,987 --> 00:02:31,077
I can run a show indexes or show vector
indexes in the Neo4j database and see
42
00:02:31,077 --> 00:02:34,272
the list of vector indexes, but I still
can't see which model is being used.
43
00:02:35,532 --> 00:02:38,872
And the person responded that the only
thing that you can see is the number
44
00:02:38,872 --> 00:02:43,612
of dimensions that are being used
for the vector, for the embedding.
45
00:02:43,832 --> 00:02:47,672
The number of dimensions, how
long that array of floats is
46
00:02:47,702 --> 00:02:48,932
that's created for the vector.
47
00:02:50,012 --> 00:02:53,342
Now this might seem like a pretty
good indication, however, there
48
00:02:53,342 --> 00:02:55,082
are a few models that overlap.
49
00:02:55,112 --> 00:02:59,972
For instance, there's more than
one model that uses 1,536 as
50
00:02:59,972 --> 00:03:01,502
the length of the embedding.
51
00:03:01,502 --> 00:03:04,172
This could be really confusing,
even looking at the dimensions, I
52
00:03:04,172 --> 00:03:07,412
wouldn't necessarily know exactly
which model was being used.
53
00:03:07,562 --> 00:03:11,402
And also it's a little bit cumbersome,
too, to have to look at a number
54
00:03:11,732 --> 00:03:15,032
and try to either remember or
do a quick search on which model
55
00:03:15,032 --> 00:03:16,682
uses this number of dimensions.
56
00:03:17,087 --> 00:03:22,517
When you create a vector index in Neo4j,
you can set the configuration for the
57
00:03:22,517 --> 00:03:26,537
number of dimensions as well as the
similarity function that you want it
58
00:03:26,537 --> 00:03:28,877
to use, either cosine or Euclidean.
59
00:03:28,877 --> 00:03:35,717
As an example, you could create a vector
index for a particular node or label
60
00:03:35,927 --> 00:03:39,797
on a specific property, and you could
set some index configuration for the
61
00:03:39,797 --> 00:03:41,177
dimensions and the similarity function.
62
00:03:41,567 --> 00:03:45,407
However, nothing else gets set when
you create the vector index, so then
63
00:03:45,497 --> 00:03:49,907
after you create it, you could do
a show vector indexes, yield star.
64
00:03:49,962 --> 00:03:52,542
If you just show vector indexes,
it'll show basic information
65
00:03:52,542 --> 00:03:53,472
about the Vector index.
66
00:03:53,802 --> 00:03:57,552
But if you yield star after the end of
that show vector indexes, it'll pull back
67
00:03:57,612 --> 00:03:59,352
everything it has on the vector index.
68
00:03:59,532 --> 00:04:02,592
But still, you're only getting the
dimensions and the similarity function
69
00:04:02,832 --> 00:04:04,512
that you've set in the configuration.
70
00:04:04,542 --> 00:04:06,282
You're not getting any extra data on that.
71
00:04:06,912 --> 00:04:11,532
This would be nice to add when you
create a vector index, at least in Neo4j,
72
00:04:11,742 --> 00:04:16,842
to include the model as well, so that
somebody who may not have created the data
73
00:04:16,842 --> 00:04:22,122
and the database and is not intimately
aware of how it was done, could still
74
00:04:22,122 --> 00:04:25,342
figure out the information they need
in order to connect applications to it.
75
00:04:26,737 --> 00:04:31,467
I've recently discovered there's some
confusion around model context protocol.
76
00:04:31,797 --> 00:04:35,727
Now, I think a lot of us know what
model context, protocol is, at
77
00:04:35,727 --> 00:04:37,467
least the general definition of it.
78
00:04:37,827 --> 00:04:42,087
But how does it actually function
within a generative AI system?
79
00:04:42,207 --> 00:04:46,827
And I have mentioned this before on the
podcast, but again, I've had a little bit
80
00:04:46,827 --> 00:04:50,727
of recent confusion and I wanna discuss
a little bit better here now that I have
81
00:04:50,727 --> 00:04:52,347
a better understanding of it as well.
82
00:04:53,127 --> 00:04:57,447
I've started thinking of an MCP server,
like a microservice, where you've
83
00:04:57,447 --> 00:05:03,087
bundled up a set of functionalities and
created an entry point or more for an
84
00:05:03,087 --> 00:05:04,857
application to access that information.
85
00:05:05,952 --> 00:05:10,602
As an example, you might want to create
a customer API that can retrieve customer
86
00:05:10,602 --> 00:05:14,982
information, things like recent orders,
contact information, and location.
87
00:05:15,432 --> 00:05:19,692
However, you might not want someone to
access the amount that that customer
88
00:05:19,692 --> 00:05:25,047
has spent with your company or any PII,
personal identifying information, that's
89
00:05:25,047 --> 00:05:26,457
associated with that customer account.
90
00:05:27,267 --> 00:05:31,557
Instead of creating a database role for
an application that locks down certain
91
00:05:31,557 --> 00:05:35,727
fields, but allows that role to access
the database however they see fit, you
92
00:05:35,727 --> 00:05:40,257
might create a microservice, something
like a mini application that sets up
93
00:05:40,257 --> 00:05:44,187
an endpoint or two that pulls basic
customer information and recent orders.
94
00:05:44,952 --> 00:05:49,632
This provides a defined path into
the data without trying to limit
95
00:05:49,632 --> 00:05:52,632
the flooded access that you might
have to do with a database role.
96
00:05:53,172 --> 00:05:56,842
It also makes a microservice
very modular and consistent.
97
00:05:57,112 --> 00:06:01,132
Different projects or applications don't
have to craft the exact same queries
98
00:06:01,132 --> 00:06:02,752
to retrieve customer information.
99
00:06:03,042 --> 00:06:06,502
They can access the predefined
service that's already available
100
00:06:06,532 --> 00:06:07,822
that will give them what they need.
101
00:06:08,707 --> 00:06:09,847
I also have another example.
102
00:06:10,117 --> 00:06:13,537
I'm a parent of young kids, so
instead of providing a whole snack
103
00:06:13,537 --> 00:06:18,367
cabinet for the child to choose from
to pick a snack for the afternoon.
104
00:06:18,877 --> 00:06:23,887
You could offer a choice between two or
five or 10 or however many options you
105
00:06:23,887 --> 00:06:26,917
want to and let them pick from that list.
106
00:06:27,637 --> 00:06:31,867
It provides some set of limitations
while also giving some options
107
00:06:31,867 --> 00:06:32,977
and some flexibility there.
108
00:06:33,577 --> 00:06:39,712
MCP is a service, or a tool, for a large
language model to access system resources
109
00:06:39,712 --> 00:06:42,052
in a consistent and predefined way.
110
00:06:42,502 --> 00:06:45,622
The large language model doesn't
need to craft a query to a database,
111
00:06:45,802 --> 00:06:50,062
which potentially could be inaccurate
or access information it shouldn't
112
00:06:50,062 --> 00:06:54,647
have access to, but instead using a
existing tool that is provided to it.
113
00:06:55,307 --> 00:06:59,717
This combination proves powerful and
customizable with large language models
114
00:06:59,717 --> 00:07:05,837
and MCP, Neo4j and so many vendors
will offer verified MCP servers that
115
00:07:05,837 --> 00:07:07,307
you can integrate into your project.
116
00:07:07,397 --> 00:07:11,657
Think, instead of creating a custom
integration to pull recent listings,
117
00:07:12,017 --> 00:07:16,607
whether that's projects, customers, what
have you, you use a trusted MCP server
118
00:07:16,607 --> 00:07:20,087
to access those predefined methods
that the vendor has already set up.
119
00:07:20,137 --> 00:07:22,844
You can also think of MCP
servers like Docker containers
120
00:07:22,844 --> 00:07:23,924
that are provided by vendors.
121
00:07:23,974 --> 00:07:27,124
They are trusted bundles of
technology that you can spin up
122
00:07:27,124 --> 00:07:28,534
and work with out of the box.
123
00:07:28,564 --> 00:07:34,204
Again, providing simple, basic entry
points that you can access and utilize
124
00:07:34,204 --> 00:07:35,404
the information the way you need to.
125
00:07:35,854 --> 00:07:38,704
I'll provide a link to
Neo4j'S MCP servers.
126
00:07:38,704 --> 00:07:41,554
There are several now, and they
provide a lot of different options
127
00:07:41,584 --> 00:07:45,724
for ways you might want to connect
to Neo4j and use the data within it.
128
00:07:47,149 --> 00:07:50,059
The content I wanna talk about,
there are two different things.
129
00:07:50,389 --> 00:07:53,689
The first is an article called
From Gimmick to Game Changer
130
00:07:53,959 --> 00:07:55,459
Vibe Coding Myths Debunked.
131
00:07:55,639 --> 00:07:59,779
This is from my colleague Michael Hunger,
and I really liked the exploration
132
00:07:59,779 --> 00:08:05,824
here of looking at vibe coding as a
tool in your toolbox, but also needing
133
00:08:05,829 --> 00:08:10,279
to set up some sort of boundaries
and guidance for how to use it well.
134
00:08:10,949 --> 00:08:13,019
Vibe coding often gets a bad rap.
135
00:08:13,529 --> 00:08:17,099
There definitely do need to be some
guardrails and processes put in place
136
00:08:17,099 --> 00:08:21,459
around it, but it also opens the door to
opportunities that never existed before.
137
00:08:21,819 --> 00:08:24,549
There's a couple of brief things
I'll cover from my own experience.
138
00:08:25,239 --> 00:08:29,529
I was asked a few weeks ago to
step in and cover a workshop that
139
00:08:29,529 --> 00:08:31,629
was based on a Python project.
140
00:08:32,199 --> 00:08:34,479
I'm not a Python developer,
as many of you might know.
141
00:08:34,479 --> 00:08:35,979
I'm a Java developer by trade.
142
00:08:36,509 --> 00:08:39,239
I needed to come up to speed on
some of the Python things and
143
00:08:39,239 --> 00:08:43,134
tweak a few things for some of my
preferred approaches to instruction.
144
00:08:44,409 --> 00:08:50,169
I was able to go in and with, some
coding tools, was able to adjust things.
145
00:08:50,469 --> 00:08:56,109
I focused on what it was I wanted the
attendees to get out of the training or
146
00:08:56,109 --> 00:08:57,759
how I wanted to present the information.
147
00:08:57,819 --> 00:09:01,974
And I let the AI coding tools decide what
that Python syntax needed to look like.
148
00:09:03,114 --> 00:09:06,904
Another option is
looking at media content.
149
00:09:07,174 --> 00:09:11,584
For instance, video and podcasting
tools, where I'm able to produce content
150
00:09:11,584 --> 00:09:16,914
without learning all of the ins and outs
of media and video and audio editing.
151
00:09:16,964 --> 00:09:21,134
It allows me to participate in certain
ways that maybe I couldn't before.
152
00:09:22,092 --> 00:09:25,912
Now, not to say that I'm not learning
the ins and outs as I go along, but
153
00:09:25,912 --> 00:09:31,102
it definitely sets me up for better
success in the long run because
154
00:09:31,102 --> 00:09:35,252
I'm able to get off the ground and
running faster by incorporating some
155
00:09:35,252 --> 00:09:36,432
of these tools from my tool belt.
156
00:09:37,182 --> 00:09:40,992
The article goes into how business
users might not have been able to
157
00:09:40,992 --> 00:09:45,012
explain their business requirements
in a technical environment or
158
00:09:45,012 --> 00:09:49,182
might've had to deal with multiple
conversations back and forth to produce
159
00:09:49,242 --> 00:09:50,502
what they were actually looking for.
160
00:09:51,162 --> 00:09:54,762
Now, with some of these generative AI
tools, they might have a seat at the
161
00:09:54,762 --> 00:10:00,342
table to help create better quality
proof of concepts or visuals that can
162
00:10:00,342 --> 00:10:03,072
better communicate what's needed and
what the results should look like.
163
00:10:03,642 --> 00:10:08,937
Also, think about those in communities
who might not have some of the resources
164
00:10:08,937 --> 00:10:12,867
that other communities might have,
think levels of instruction, technology,
165
00:10:12,897 --> 00:10:15,447
expertise, finances, formal programs.
166
00:10:15,747 --> 00:10:19,347
Now might have access to learn
and explore almost anything with
167
00:10:19,347 --> 00:10:21,507
a laptop and a few LLM credits.
168
00:10:22,977 --> 00:10:29,107
The article also digs into analysis of
risk mitigation versus risk avoidance.
169
00:10:29,557 --> 00:10:33,637
If you think about the major changes
that have happened to society over time,
170
00:10:33,667 --> 00:10:38,647
things like going from horses to cars
as modes of transportation, land to air
171
00:10:38,647 --> 00:10:43,147
travel, even letting kids try something
new or any major change in society.
172
00:10:43,987 --> 00:10:47,437
There are ways to approach each
of those things that can help
173
00:10:47,437 --> 00:10:52,147
minimize risk or at least not
let you take risks unnecessarily.
174
00:10:52,597 --> 00:10:55,897
And that's a wiser approach that we
should also take with AI as well.
175
00:10:55,897 --> 00:11:01,296
We can incorporate how can we
minimize the risk or make the outcomes
176
00:11:01,301 --> 00:11:05,092
potentially less painful by setting
up some guardrails and some good
177
00:11:05,092 --> 00:11:09,107
processes that help us use it safely
while still helping us move forward.
178
00:11:09,737 --> 00:11:13,577
The first point in the article talks
about something that I mentioned earlier
179
00:11:13,607 --> 00:11:19,162
in regards to this article, and it's
where you can focus on the goals of what
180
00:11:19,162 --> 00:11:21,352
you're trying to do versus how to do them.
181
00:11:22,072 --> 00:11:26,602
Oftentimes as a developer, I feel like
I spend a lot of time fussing with the
182
00:11:26,602 --> 00:11:31,552
syntax or clean code or getting something
just to work, when it would be a far
183
00:11:31,552 --> 00:11:36,052
better use of my time to focus on how
the process should flow or the objective
184
00:11:36,052 --> 00:11:37,582
that I'm trying to get on the other side.
185
00:11:38,857 --> 00:11:43,477
I think this is also a really good
case for the AI tools and integrating
186
00:11:43,477 --> 00:11:48,007
them into our workflows because we
can focus on the goal and let these
187
00:11:48,007 --> 00:11:52,297
tools help us provide the syntax and
the specific steps along the way.
188
00:11:53,452 --> 00:11:57,622
The other piece of content I came
across was a YouTube video from a
189
00:11:57,622 --> 00:12:02,842
colleague and former colleague of mine,
Will and Adam, and it's a live stream
190
00:12:02,842 --> 00:12:04,972
called Rag was fine until it wasn't.
191
00:12:05,482 --> 00:12:09,652
I found this really interesting because
it's showing a real world use case on the
192
00:12:09,652 --> 00:12:15,772
progress of the solution behind the Neo4j
Graph Academy online training platform
193
00:12:16,392 --> 00:12:20,682
over the course of the last several years,
going from non generative AI solutions
194
00:12:20,712 --> 00:12:25,632
to now incorporating generative AI and
using it to help people and developers
195
00:12:25,632 --> 00:12:27,822
specifically learn technology better.
196
00:12:28,122 --> 00:12:32,202
It uses data points and feedback to
help influence the opportunities and
197
00:12:32,202 --> 00:12:35,802
the way that they have designed and
built the system over time to provide
198
00:12:35,802 --> 00:12:40,842
some really unique custom built training
opportunities for people coming in
199
00:12:40,842 --> 00:12:43,107
and trying to learn Neo4j and graphs.
200
00:12:44,482 --> 00:12:47,212
So if you're interested in something
like that, I would highly recommend
201
00:12:47,212 --> 00:12:48,322
you check out the livestream.
202
00:12:48,372 --> 00:12:50,292
I will link the recording in the notes.
203
00:12:50,952 --> 00:12:54,912
From vector index features to metaphors
that help explain model context
204
00:12:54,912 --> 00:12:58,752
protocol, or MCP, I hope you enjoyed
this week's dive into what I've learned.
205
00:12:59,112 --> 00:13:01,302
As always, thanks for
listening and happy coding.
00:00:05,400 --> 00:00:09,180
You are listening to the Breaktime
Tech Talks podcast, a bite-sized tech
2
00:00:09,180 --> 00:00:13,440
podcast for busy developers where we'll
briefly cover technical topics, new
3
00:00:13,440 --> 00:00:15,900
snippets, and more in short time blocks.
4
00:00:16,230 --> 00:00:19,950
I'm your host, Jennifer Reif, an
avid developer and problem solver
5
00:00:20,130 --> 00:00:24,030
with special interest in data
learning and all things technology.
6
00:00:25,107 --> 00:00:27,837
I went from feeling that there
wasn't much to discuss this week
7
00:00:27,837 --> 00:00:29,427
to feeling like I had a lot to say.
8
00:00:29,847 --> 00:00:33,147
I discovered something new about
the Neo4j vector index this week.
9
00:00:33,387 --> 00:00:35,757
You can tell me if you think
it needs updated as well.
10
00:00:35,847 --> 00:00:41,127
And then there was some recent confusion
over not just the definition of MCP,
11
00:00:41,457 --> 00:00:43,742
but how it's used and why it's useful.
12
00:00:44,097 --> 00:00:47,427
This has me revisiting this topic a
bit to give my take on the subject.
13
00:00:47,782 --> 00:00:50,812
Finally, I caught up on some
content that challenges the way we
14
00:00:50,812 --> 00:00:52,912
think about vibe coding and RAG.
15
00:00:53,272 --> 00:00:53,992
Let's jump in.
16
00:00:55,042 --> 00:00:59,462
I was exploring more on the Neo4j
vector index, creating a project that
17
00:00:59,462 --> 00:01:04,952
integrated with an already existing public
database, a Neo4j graph database that
18
00:01:04,952 --> 00:01:08,202
I could access and utilize the data and
the vectors that were already in there.
19
00:01:09,217 --> 00:01:15,247
However, I found that I couldn't figure
out exactly what model was being used
20
00:01:15,277 --> 00:01:19,897
for the particular embedding field on the
entities that I was looking to search.
21
00:01:20,347 --> 00:01:22,177
So for instance, I'm
connecting via an app.
22
00:01:22,477 --> 00:01:26,617
Spring AI requires you to specify
a model that you're going to
23
00:01:26,617 --> 00:01:27,697
be using for the embeddings.
24
00:01:27,997 --> 00:01:31,972
Because if you send in a question
and it creates an embedding using
25
00:01:32,002 --> 00:01:36,682
one type of model, but then you've
created embeddings in your dataset
26
00:01:36,682 --> 00:01:38,302
using another type of model.
27
00:01:38,482 --> 00:01:39,832
Those two won't line up.
28
00:01:39,832 --> 00:01:42,562
You won't be able to do a vector
similarity search on that.
29
00:01:42,902 --> 00:01:46,012
I talk about this in a previous
episode of this podcast.
30
00:01:46,282 --> 00:01:50,602
I will try to link that as well, how
you need to try to stay at least within
31
00:01:50,602 --> 00:01:55,307
the same model family, if not the
exact same model for when you in embed
32
00:01:55,337 --> 00:01:59,807
your data and create the vectors as
well as when you send in questions and
33
00:01:59,807 --> 00:02:01,427
create embeddings for those as well.
34
00:02:02,667 --> 00:02:07,527
Spring AI requires you to specify a model,
but I went out to the public database with
35
00:02:07,527 --> 00:02:11,727
all the data ready for me to use, and I
couldn't figure out which model was used
36
00:02:11,787 --> 00:02:13,227
to create the embeddings in the data.
37
00:02:13,627 --> 00:02:16,777
I asked a colleague that I
knew had helped and contributed
38
00:02:16,777 --> 00:02:18,277
in putting together the data.
39
00:02:19,497 --> 00:02:23,247
And was like, Hey, can we figure
out what model is being used,
40
00:02:23,247 --> 00:02:24,987
just looking at the vector index?
41
00:02:24,987 --> 00:02:31,077
I can run a show indexes or show vector
indexes in the Neo4j database and see
42
00:02:31,077 --> 00:02:34,272
the list of vector indexes, but I still
can't see which model is being used.
43
00:02:35,532 --> 00:02:38,872
And the person responded that the only
thing that you can see is the number
44
00:02:38,872 --> 00:02:43,612
of dimensions that are being used
for the vector, for the embedding.
45
00:02:43,832 --> 00:02:47,672
The number of dimensions, how
long that array of floats is
46
00:02:47,702 --> 00:02:48,932
that's created for the vector.
47
00:02:50,012 --> 00:02:53,342
Now this might seem like a pretty
good indication, however, there
48
00:02:53,342 --> 00:02:55,082
are a few models that overlap.
49
00:02:55,112 --> 00:02:59,972
For instance, there's more than
one model that uses 1,536 as
50
00:02:59,972 --> 00:03:01,502
the length of the embedding.
51
00:03:01,502 --> 00:03:04,172
This could be really confusing,
even looking at the dimensions, I
52
00:03:04,172 --> 00:03:07,412
wouldn't necessarily know exactly
which model was being used.
53
00:03:07,562 --> 00:03:11,402
And also it's a little bit cumbersome,
too, to have to look at a number
54
00:03:11,732 --> 00:03:15,032
and try to either remember or
do a quick search on which model
55
00:03:15,032 --> 00:03:16,682
uses this number of dimensions.
56
00:03:17,087 --> 00:03:22,517
When you create a vector index in Neo4j,
you can set the configuration for the
57
00:03:22,517 --> 00:03:26,537
number of dimensions as well as the
similarity function that you want it
58
00:03:26,537 --> 00:03:28,877
to use, either cosine or Euclidean.
59
00:03:28,877 --> 00:03:35,717
As an example, you could create a vector
index for a particular node or label
60
00:03:35,927 --> 00:03:39,797
on a specific property, and you could
set some index configuration for the
61
00:03:39,797 --> 00:03:41,177
dimensions and the similarity function.
62
00:03:41,567 --> 00:03:45,407
However, nothing else gets set when
you create the vector index, so then
63
00:03:45,497 --> 00:03:49,907
after you create it, you could do
a show vector indexes, yield star.
64
00:03:49,962 --> 00:03:52,542
If you just show vector indexes,
it'll show basic information
65
00:03:52,542 --> 00:03:53,472
about the Vector index.
66
00:03:53,802 --> 00:03:57,552
But if you yield star after the end of
that show vector indexes, it'll pull back
67
00:03:57,612 --> 00:03:59,352
everything it has on the vector index.
68
00:03:59,532 --> 00:04:02,592
But still, you're only getting the
dimensions and the similarity function
69
00:04:02,832 --> 00:04:04,512
that you've set in the configuration.
70
00:04:04,542 --> 00:04:06,282
You're not getting any extra data on that.
71
00:04:06,912 --> 00:04:11,532
This would be nice to add when you
create a vector index, at least in Neo4j,
72
00:04:11,742 --> 00:04:16,842
to include the model as well, so that
somebody who may not have created the data
73
00:04:16,842 --> 00:04:22,122
and the database and is not intimately
aware of how it was done, could still
74
00:04:22,122 --> 00:04:25,342
figure out the information they need
in order to connect applications to it.
75
00:04:26,737 --> 00:04:31,467
I've recently discovered there's some
confusion around model context protocol.
76
00:04:31,797 --> 00:04:35,727
Now, I think a lot of us know what
model context, protocol is, at
77
00:04:35,727 --> 00:04:37,467
least the general definition of it.
78
00:04:37,827 --> 00:04:42,087
But how does it actually function
within a generative AI system?
79
00:04:42,207 --> 00:04:46,827
And I have mentioned this before on the
podcast, but again, I've had a little bit
80
00:04:46,827 --> 00:04:50,727
of recent confusion and I wanna discuss
a little bit better here now that I have
81
00:04:50,727 --> 00:04:52,347
a better understanding of it as well.
82
00:04:53,127 --> 00:04:57,447
I've started thinking of an MCP server,
like a microservice, where you've
83
00:04:57,447 --> 00:05:03,087
bundled up a set of functionalities and
created an entry point or more for an
84
00:05:03,087 --> 00:05:04,857
application to access that information.
85
00:05:05,952 --> 00:05:10,602
As an example, you might want to create
a customer API that can retrieve customer
86
00:05:10,602 --> 00:05:14,982
information, things like recent orders,
contact information, and location.
87
00:05:15,432 --> 00:05:19,692
However, you might not want someone to
access the amount that that customer
88
00:05:19,692 --> 00:05:25,047
has spent with your company or any PII,
personal identifying information, that's
89
00:05:25,047 --> 00:05:26,457
associated with that customer account.
90
00:05:27,267 --> 00:05:31,557
Instead of creating a database role for
an application that locks down certain
91
00:05:31,557 --> 00:05:35,727
fields, but allows that role to access
the database however they see fit, you
92
00:05:35,727 --> 00:05:40,257
might create a microservice, something
like a mini application that sets up
93
00:05:40,257 --> 00:05:44,187
an endpoint or two that pulls basic
customer information and recent orders.
94
00:05:44,952 --> 00:05:49,632
This provides a defined path into
the data without trying to limit
95
00:05:49,632 --> 00:05:52,632
the flooded access that you might
have to do with a database role.
96
00:05:53,172 --> 00:05:56,842
It also makes a microservice
very modular and consistent.
97
00:05:57,112 --> 00:06:01,132
Different projects or applications don't
have to craft the exact same queries
98
00:06:01,132 --> 00:06:02,752
to retrieve customer information.
99
00:06:03,042 --> 00:06:06,502
They can access the predefined
service that's already available
100
00:06:06,532 --> 00:06:07,822
that will give them what they need.
101
00:06:08,707 --> 00:06:09,847
I also have another example.
102
00:06:10,117 --> 00:06:13,537
I'm a parent of young kids, so
instead of providing a whole snack
103
00:06:13,537 --> 00:06:18,367
cabinet for the child to choose from
to pick a snack for the afternoon.
104
00:06:18,877 --> 00:06:23,887
You could offer a choice between two or
five or 10 or however many options you
105
00:06:23,887 --> 00:06:26,917
want to and let them pick from that list.
106
00:06:27,637 --> 00:06:31,867
It provides some set of limitations
while also giving some options
107
00:06:31,867 --> 00:06:32,977
and some flexibility there.
108
00:06:33,577 --> 00:06:39,712
MCP is a service, or a tool, for a large
language model to access system resources
109
00:06:39,712 --> 00:06:42,052
in a consistent and predefined way.
110
00:06:42,502 --> 00:06:45,622
The large language model doesn't
need to craft a query to a database,
111
00:06:45,802 --> 00:06:50,062
which potentially could be inaccurate
or access information it shouldn't
112
00:06:50,062 --> 00:06:54,647
have access to, but instead using a
existing tool that is provided to it.
113
00:06:55,307 --> 00:06:59,717
This combination proves powerful and
customizable with large language models
114
00:06:59,717 --> 00:07:05,837
and MCP, Neo4j and so many vendors
will offer verified MCP servers that
115
00:07:05,837 --> 00:07:07,307
you can integrate into your project.
116
00:07:07,397 --> 00:07:11,657
Think, instead of creating a custom
integration to pull recent listings,
117
00:07:12,017 --> 00:07:16,607
whether that's projects, customers, what
have you, you use a trusted MCP server
118
00:07:16,607 --> 00:07:20,087
to access those predefined methods
that the vendor has already set up.
119
00:07:20,137 --> 00:07:22,844
You can also think of MCP
servers like Docker containers
120
00:07:22,844 --> 00:07:23,924
that are provided by vendors.
121
00:07:23,974 --> 00:07:27,124
They are trusted bundles of
technology that you can spin up
122
00:07:27,124 --> 00:07:28,534
and work with out of the box.
123
00:07:28,564 --> 00:07:34,204
Again, providing simple, basic entry
points that you can access and utilize
124
00:07:34,204 --> 00:07:35,404
the information the way you need to.
125
00:07:35,854 --> 00:07:38,704
I'll provide a link to
Neo4j'S MCP servers.
126
00:07:38,704 --> 00:07:41,554
There are several now, and they
provide a lot of different options
127
00:07:41,584 --> 00:07:45,724
for ways you might want to connect
to Neo4j and use the data within it.
128
00:07:47,149 --> 00:07:50,059
The content I wanna talk about,
there are two different things.
129
00:07:50,389 --> 00:07:53,689
The first is an article called
From Gimmick to Game Changer
130
00:07:53,959 --> 00:07:55,459
Vibe Coding Myths Debunked.
131
00:07:55,639 --> 00:07:59,779
This is from my colleague Michael Hunger,
and I really liked the exploration
132
00:07:59,779 --> 00:08:05,824
here of looking at vibe coding as a
tool in your toolbox, but also needing
133
00:08:05,829 --> 00:08:10,279
to set up some sort of boundaries
and guidance for how to use it well.
134
00:08:10,949 --> 00:08:13,019
Vibe coding often gets a bad rap.
135
00:08:13,529 --> 00:08:17,099
There definitely do need to be some
guardrails and processes put in place
136
00:08:17,099 --> 00:08:21,459
around it, but it also opens the door to
opportunities that never existed before.
137
00:08:21,819 --> 00:08:24,549
There's a couple of brief things
I'll cover from my own experience.
138
00:08:25,239 --> 00:08:29,529
I was asked a few weeks ago to
step in and cover a workshop that
139
00:08:29,529 --> 00:08:31,629
was based on a Python project.
140
00:08:32,199 --> 00:08:34,479
I'm not a Python developer,
as many of you might know.
141
00:08:34,479 --> 00:08:35,979
I'm a Java developer by trade.
142
00:08:36,509 --> 00:08:39,239
I needed to come up to speed on
some of the Python things and
143
00:08:39,239 --> 00:08:43,134
tweak a few things for some of my
preferred approaches to instruction.
144
00:08:44,409 --> 00:08:50,169
I was able to go in and with, some
coding tools, was able to adjust things.
145
00:08:50,469 --> 00:08:56,109
I focused on what it was I wanted the
attendees to get out of the training or
146
00:08:56,109 --> 00:08:57,759
how I wanted to present the information.
147
00:08:57,819 --> 00:09:01,974
And I let the AI coding tools decide what
that Python syntax needed to look like.
148
00:09:03,114 --> 00:09:06,904
Another option is
looking at media content.
149
00:09:07,174 --> 00:09:11,584
For instance, video and podcasting
tools, where I'm able to produce content
150
00:09:11,584 --> 00:09:16,914
without learning all of the ins and outs
of media and video and audio editing.
151
00:09:16,964 --> 00:09:21,134
It allows me to participate in certain
ways that maybe I couldn't before.
152
00:09:22,092 --> 00:09:25,912
Now, not to say that I'm not learning
the ins and outs as I go along, but
153
00:09:25,912 --> 00:09:31,102
it definitely sets me up for better
success in the long run because
154
00:09:31,102 --> 00:09:35,252
I'm able to get off the ground and
running faster by incorporating some
155
00:09:35,252 --> 00:09:36,432
of these tools from my tool belt.
156
00:09:37,182 --> 00:09:40,992
The article goes into how business
users might not have been able to
157
00:09:40,992 --> 00:09:45,012
explain their business requirements
in a technical environment or
158
00:09:45,012 --> 00:09:49,182
might've had to deal with multiple
conversations back and forth to produce
159
00:09:49,242 --> 00:09:50,502
what they were actually looking for.
160
00:09:51,162 --> 00:09:54,762
Now, with some of these generative AI
tools, they might have a seat at the
161
00:09:54,762 --> 00:10:00,342
table to help create better quality
proof of concepts or visuals that can
162
00:10:00,342 --> 00:10:03,072
better communicate what's needed and
what the results should look like.
163
00:10:03,642 --> 00:10:08,937
Also, think about those in communities
who might not have some of the resources
164
00:10:08,937 --> 00:10:12,867
that other communities might have,
think levels of instruction, technology,
165
00:10:12,897 --> 00:10:15,447
expertise, finances, formal programs.
166
00:10:15,747 --> 00:10:19,347
Now might have access to learn
and explore almost anything with
167
00:10:19,347 --> 00:10:21,507
a laptop and a few LLM credits.
168
00:10:22,977 --> 00:10:29,107
The article also digs into analysis of
risk mitigation versus risk avoidance.
169
00:10:29,557 --> 00:10:33,637
If you think about the major changes
that have happened to society over time,
170
00:10:33,667 --> 00:10:38,647
things like going from horses to cars
as modes of transportation, land to air
171
00:10:38,647 --> 00:10:43,147
travel, even letting kids try something
new or any major change in society.
172
00:10:43,987 --> 00:10:47,437
There are ways to approach each
of those things that can help
173
00:10:47,437 --> 00:10:52,147
minimize risk or at least not
let you take risks unnecessarily.
174
00:10:52,597 --> 00:10:55,897
And that's a wiser approach that we
should also take with AI as well.
175
00:10:55,897 --> 00:11:01,296
We can incorporate how can we
minimize the risk or make the outcomes
176
00:11:01,301 --> 00:11:05,092
potentially less painful by setting
up some guardrails and some good
177
00:11:05,092 --> 00:11:09,107
processes that help us use it safely
while still helping us move forward.
178
00:11:09,737 --> 00:11:13,577
The first point in the article talks
about something that I mentioned earlier
179
00:11:13,607 --> 00:11:19,162
in regards to this article, and it's
where you can focus on the goals of what
180
00:11:19,162 --> 00:11:21,352
you're trying to do versus how to do them.
181
00:11:22,072 --> 00:11:26,602
Oftentimes as a developer, I feel like
I spend a lot of time fussing with the
182
00:11:26,602 --> 00:11:31,552
syntax or clean code or getting something
just to work, when it would be a far
183
00:11:31,552 --> 00:11:36,052
better use of my time to focus on how
the process should flow or the objective
184
00:11:36,052 --> 00:11:37,582
that I'm trying to get on the other side.
185
00:11:38,857 --> 00:11:43,477
I think this is also a really good
case for the AI tools and integrating
186
00:11:43,477 --> 00:11:48,007
them into our workflows because we
can focus on the goal and let these
187
00:11:48,007 --> 00:11:52,297
tools help us provide the syntax and
the specific steps along the way.
188
00:11:53,452 --> 00:11:57,622
The other piece of content I came
across was a YouTube video from a
189
00:11:57,622 --> 00:12:02,842
colleague and former colleague of mine,
Will and Adam, and it's a live stream
190
00:12:02,842 --> 00:12:04,972
called Rag was fine until it wasn't.
191
00:12:05,482 --> 00:12:09,652
I found this really interesting because
it's showing a real world use case on the
192
00:12:09,652 --> 00:12:15,772
progress of the solution behind the Neo4j
Graph Academy online training platform
193
00:12:16,392 --> 00:12:20,682
over the course of the last several years,
going from non generative AI solutions
194
00:12:20,712 --> 00:12:25,632
to now incorporating generative AI and
using it to help people and developers
195
00:12:25,632 --> 00:12:27,822
specifically learn technology better.
196
00:12:28,122 --> 00:12:32,202
It uses data points and feedback to
help influence the opportunities and
197
00:12:32,202 --> 00:12:35,802
the way that they have designed and
built the system over time to provide
198
00:12:35,802 --> 00:12:40,842
some really unique custom built training
opportunities for people coming in
199
00:12:40,842 --> 00:12:43,107
and trying to learn Neo4j and graphs.
200
00:12:44,482 --> 00:12:47,212
So if you're interested in something
like that, I would highly recommend
201
00:12:47,212 --> 00:12:48,322
you check out the livestream.
202
00:12:48,372 --> 00:12:50,292
I will link the recording in the notes.
203
00:12:50,952 --> 00:12:54,912
From vector index features to metaphors
that help explain model context
204
00:12:54,912 --> 00:12:58,752
protocol, or MCP, I hope you enjoyed
this week's dive into what I've learned.
205
00:12:59,112 --> 00:13:01,302
As always, thanks for
listening and happy coding.