Skip to content

Commit 7fe5b4f

Browse files
committed
Update Langchain4j documentation with examples
1 parent 650b86f commit 7fe5b4f

File tree

1 file changed

+175
-0
lines changed

1 file changed

+175
-0
lines changed

modules/genai-ecosystem/pages/langchain4j.adoc

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,181 @@ An example is avalable at: https://github.com/langchain4j/langchain4j-examples/t
4040
include::https://github.com/langchain4j/langchain4j-examples/raw/main/neo4j-example/src/main/java/Neo4jEmbeddingStoreExample.java[]
4141
----
4242

43+
=== Usage Examples
44+
45+
To create a Neo4jEmbeddingStore, we can write:
46+
[source,java]
47+
----
48+
Neo4jEmbeddingStore embeddingStore = Neo4jEmbeddingStore.builder().<builderParameters>.build();
49+
50+
// where <builderParameters> can be the following:
51+
.dimension(384)
52+
.label(LABEL_TO_SANITIZE)
53+
.build();
54+
55+
// we can use with `withBasicAuth`
56+
.withBasicAuth(neo4jContainer.getBoltUrl(), USERNAME, ADMIN_PASSWORD)
57+
// as alternative to driver:
58+
Driver driver = GraphDatabase.driver(neo4jContainer.getBoltUrl(), AuthTokens.basic(USERNAME, ADMIN_PASSWORD));
59+
----
60+
61+
To add embeddings, execute:
62+
[source,java]
63+
----
64+
Embedding embedding = embeddingModel.embed("embedText").content();
65+
String id = embeddingStore.add(embedding);
66+
// output: id of the embedding
67+
----
68+
69+
To add embeddings with id:
70+
[source,java]
71+
----
72+
String id = randomUUID();
73+
Embedding embedding = embeddingModel.embed("embedText").content();
74+
embeddingStore.add(id, embedding);
75+
// output: id of the embedding
76+
----
77+
78+
To add embeddings with segment:
79+
[source,java]
80+
----
81+
TextSegment segment = TextSegment.from(randomUUID());
82+
Embedding embedding = embeddingModel.embed(segment.text()).content();
83+
String id = embeddingStore.add(embedding, segment);
84+
// output: id of the embedding
85+
----
86+
87+
Too add embeddings with segment and metadata:
88+
[source,java]
89+
----
90+
TextSegment segment = TextSegment.from(randomUUID(), Metadata.from(METADATA_KEY, "test-value"));
91+
Embedding embedding = embeddingModel.embed(segment.text()).content();
92+
String id = embeddingStore.add(embedding, segment);
93+
// output: id of the embedding
94+
----
95+
96+
Search embeddings:
97+
[source,java]
98+
----
99+
Embedding embedding = embeddingModel.embed("embedText").content();
100+
String id = embeddingStore.add(embedding);
101+
final EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
102+
.queryEmbedding(embedding)
103+
.maxResults(10)
104+
.build();
105+
final List<EmbeddingMatch<TextSegment>> relevant = embeddingStore.search(request).matches();
106+
// output: list of embeddings
107+
----
108+
109+
Search embeddings with minScore:
110+
[source,java]
111+
----
112+
Embedding embedding = embeddingModel.embed("embedText").content();
113+
String id = embeddingStore.add(embedding);
114+
final EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
115+
.queryEmbedding(embedding)
116+
.maxResults(10)
117+
.minScore(0.15)
118+
.build();
119+
final List<EmbeddingMatch<TextSegment>> relevant = embeddingStore.search(request).matches();
120+
// output: list of embeddings
121+
----
122+
123+
Search embeddings with segment with custom metadata prefix:
124+
[source,java]
125+
----
126+
String metadataPrefix = "metadata.";
127+
String labelName = "CustomLabelName";
128+
embeddingStore = Neo4jEmbeddingStore.builder()
129+
.withBasicAuth(neo4jContainer.getBoltUrl(), USERNAME, ADMIN_PASSWORD)
130+
.dimension(384)
131+
.metadataPrefix(metadataPrefix)
132+
.label(labelName)
133+
.indexName("customIdxName")
134+
.build();
135+
136+
String metadataCompleteKey = metadataPrefix + METADATA_KEY;
137+
TextSegment segment = TextSegment.from(randomUUID(), Metadata.from(METADATA_KEY, "test-value"));
138+
Embedding embedding = embeddingModel.embed(segment.text()).content();
139+
140+
String id = embeddingStore.add(embedding, segment);
141+
// output: id of the embedding
142+
143+
final EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
144+
.queryEmbedding(embedding)
145+
.maxResults(10)
146+
.build();
147+
final List<EmbeddingMatch<TextSegment>> relevant = embeddingStore.search(request).matches();
148+
// output: list of embeddings
149+
----
150+
151+
Search embeddings with segment with metadata and custom id prop:
152+
[source,java]
153+
----
154+
String metadataPrefix = "metadata.";
155+
String customIdProp = "customId ` & Prop ` To Sanitize";
156+
157+
embeddingStore = Neo4jEmbeddingStore.builder()
158+
.withBasicAuth(neo4jContainer.getBoltUrl(), USERNAME, ADMIN_PASSWORD)
159+
.dimension(384)
160+
.metadataPrefix(metadataPrefix)
161+
.label("CustomLabelName")
162+
.indexName("customIdxName")
163+
.idProperty(customIdProp)
164+
.build();
165+
166+
String metadataCompleteKey = metadataPrefix + METADATA_KEY;
167+
168+
TextSegment segment = TextSegment.from(randomUUID(), Metadata.from(METADATA_KEY, "test-value"));
169+
Embedding embedding = embeddingModel.embed(segment.text()).content();
170+
String id = embeddingStore.add(embedding, segment);
171+
// output: id of the embedding
172+
173+
final EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
174+
.queryEmbedding(embedding)
175+
.maxResults(10)
176+
.build();
177+
final List<EmbeddingMatch<TextSegment>> relevant = embeddingStore.search(request).matches();
178+
// output: list of embeddings
179+
----
180+
181+
Add multiple embeddings
182+
[source,java]
183+
----
184+
Embedding firstEmbedding = embeddingModel.embed("firstEmbedText").content();
185+
Embedding secondEmbedding = embeddingModel.embed("secondEmbedText").content();
186+
List<String> ids = embeddingStore.addAll(asList(firstEmbedding, secondEmbedding));
187+
// output: list of the embedding ids
188+
189+
final EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
190+
.queryEmbedding(firstEmbedding)
191+
.maxResults(10)
192+
.build();
193+
final List<EmbeddingMatch<TextSegment>> relevant = embeddingStore.search(request).matches();
194+
// output: list of embeddings
195+
----
196+
197+
Add multiple embeddings with segments
198+
[source,java]
199+
----
200+
TextSegment firstSegment = TextSegment.from("firstText");
201+
Embedding firstEmbedding = embeddingModel.embed(firstSegment.text()).content();
202+
TextSegment secondSegment = TextSegment.from("secondText");
203+
Embedding secondEmbedding = embeddingModel.embed(secondSegment.text()).content();
204+
205+
List<String> ids = embeddingStore.addAll(
206+
asList(firstEmbedding, secondEmbedding),
207+
asList(firstSegment, secondSegment)
208+
); // output: list of the embedding ids
209+
210+
final EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
211+
.queryEmbedding(firstEmbedding)
212+
.maxResults(10)
213+
.build();
214+
final List<EmbeddingMatch<TextSegment>> relevant = embeddingStore.search(request).matches();
215+
// output: list of embeddings
216+
----
217+
43218
== Relevant Links
44219
[cols="1,4"]
45220
|===

0 commit comments

Comments
 (0)