diff --git a/translated_images/ar/.co-op-translator.json b/translated_images/ar/.co-op-translator.json
index a3ac0bd11..a8a754999 100644
--- a/translated_images/ar/.co-op-translator.json
+++ b/translated_images/ar/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:43:22+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "ar"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:42:58+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "ar"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T08:20:34+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "ar"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T13:02:46+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "ar"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T08:20:39+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "ar"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T08:25:39+00:00",
diff --git a/translated_images/ar/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/ar/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 96e0ba218..000000000
Binary files a/translated_images/ar/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/ar/architecture.eedc993a1c576839.webp b/translated_images/ar/architecture.eedc993a1c576839.webp
deleted file mode 100644
index d61fcd84d..000000000
Binary files a/translated_images/ar/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/ar/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/ar/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 4d006011f..000000000
Binary files a/translated_images/ar/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/bg/.co-op-translator.json b/translated_images/bg/.co-op-translator.json
index 5a0aa1c0c..b545e64d1 100644
--- a/translated_images/bg/.co-op-translator.json
+++ b/translated_images/bg/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:56:34+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "bg"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:56:14+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "bg"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T11:37:56+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "bg"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:52:34+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "bg"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T11:38:00+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "bg"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T11:43:41+00:00",
diff --git a/translated_images/bg/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/bg/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 065a48c0b..000000000
Binary files a/translated_images/bg/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/bg/architecture.eedc993a1c576839.webp b/translated_images/bg/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 7dfbcd8dc..000000000
Binary files a/translated_images/bg/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/bg/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/bg/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index dac954425..000000000
Binary files a/translated_images/bg/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/bn/.co-op-translator.json b/translated_images/bn/.co-op-translator.json
index a8ed46cff..6dd564376 100644
--- a/translated_images/bn/.co-op-translator.json
+++ b/translated_images/bn/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T15:11:32+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "bn"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T15:11:04+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "bn"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T09:36:57+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "bn"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:46:31+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "bn"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T09:37:04+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "bn"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T09:43:02+00:00",
diff --git a/translated_images/bn/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/bn/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 579f8cf1a..000000000
Binary files a/translated_images/bn/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/bn/architecture.eedc993a1c576839.webp b/translated_images/bn/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 5478dbd39..000000000
Binary files a/translated_images/bn/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/bn/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/bn/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 51f2cdfd3..000000000
Binary files a/translated_images/bn/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/cs/.co-op-translator.json b/translated_images/cs/.co-op-translator.json
index 2f79b0f83..c266d168c 100644
--- a/translated_images/cs/.co-op-translator.json
+++ b/translated_images/cs/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T15:25:23+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "cs"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T15:24:58+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "cs"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T11:20:47+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "cs"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:44:34+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "cs"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T11:20:52+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "cs"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T11:26:24+00:00",
diff --git a/translated_images/cs/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/cs/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 4157bf623..000000000
Binary files a/translated_images/cs/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/cs/architecture.eedc993a1c576839.webp b/translated_images/cs/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 94c534e8d..000000000
Binary files a/translated_images/cs/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/cs/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/cs/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index edf703d46..000000000
Binary files a/translated_images/cs/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/da/.co-op-translator.json b/translated_images/da/.co-op-translator.json
index 1ce4b94a2..c1f56eec6 100644
--- a/translated_images/da/.co-op-translator.json
+++ b/translated_images/da/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:32:07+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "da"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:31:44+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "da"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T10:45:02+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "da"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:27:44+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "da"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T10:45:07+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "da"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T10:50:15+00:00",
diff --git a/translated_images/da/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/da/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 8ccfce27e..000000000
Binary files a/translated_images/da/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/da/architecture.eedc993a1c576839.webp b/translated_images/da/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 736aa7fd4..000000000
Binary files a/translated_images/da/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/da/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/da/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index a56adb2e6..000000000
Binary files a/translated_images/da/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/de/.co-op-translator.json b/translated_images/de/.co-op-translator.json
index 1b0611352..10ffe9882 100644
--- a/translated_images/de/.co-op-translator.json
+++ b/translated_images/de/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:43:14+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "de"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:42:49+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "de"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T08:20:30+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "de"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T13:02:42+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "de"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T08:20:35+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "de"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T08:25:32+00:00",
diff --git a/translated_images/de/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/de/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 62973c88a..000000000
Binary files a/translated_images/de/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/de/architecture.eedc993a1c576839.webp b/translated_images/de/architecture.eedc993a1c576839.webp
deleted file mode 100644
index d6ffbbc47..000000000
Binary files a/translated_images/de/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/de/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/de/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 856c3d86f..000000000
Binary files a/translated_images/de/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/el/.co-op-translator.json b/translated_images/el/.co-op-translator.json
index b5ae1c8f7..7470d7cd8 100644
--- a/translated_images/el/.co-op-translator.json
+++ b/translated_images/el/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:57:40+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "el"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:57:16+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "el"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T10:26:28+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "el"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:19:49+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "el"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T10:26:33+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "el"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T10:34:16+00:00",
diff --git a/translated_images/el/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/el/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 9834edbae..000000000
Binary files a/translated_images/el/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/el/architecture.eedc993a1c576839.webp b/translated_images/el/architecture.eedc993a1c576839.webp
deleted file mode 100644
index b57e2747b..000000000
Binary files a/translated_images/el/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/el/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/el/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 5488b962e..000000000
Binary files a/translated_images/el/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/en/.co-op-translator.json b/translated_images/en/.co-op-translator.json
index 69aa33ccd..3e041ed15 100644
--- a/translated_images/en/.co-op-translator.json
+++ b/translated_images/en/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T13:44:06+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "en"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T13:43:48+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "en"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T08:03:11+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "en"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T10:18:22+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "en"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T08:03:16+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "en"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T08:09:21+00:00",
diff --git a/translated_images/en/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/en/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 5e16bb26d..000000000
Binary files a/translated_images/en/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/en/architecture.eedc993a1c576839.webp b/translated_images/en/architecture.eedc993a1c576839.webp
deleted file mode 100644
index e308245cb..000000000
Binary files a/translated_images/en/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/en/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/en/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index ccb8a8093..000000000
Binary files a/translated_images/en/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/es/.co-op-translator.json b/translated_images/es/.co-op-translator.json
index 10dc66d06..18a3dd571 100644
--- a/translated_images/es/.co-op-translator.json
+++ b/translated_images/es/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T13:44:11+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "es"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T13:43:54+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "es"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T08:03:14+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "es"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T10:18:29+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "es"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T08:03:19+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "es"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T08:09:26+00:00",
diff --git a/translated_images/es/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/es/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index e956aea90..000000000
Binary files a/translated_images/es/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/es/architecture.eedc993a1c576839.webp b/translated_images/es/architecture.eedc993a1c576839.webp
deleted file mode 100644
index e0d6685d2..000000000
Binary files a/translated_images/es/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/es/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/es/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index a0d4198e2..000000000
Binary files a/translated_images/es/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/et/.co-op-translator.json b/translated_images/et/.co-op-translator.json
index e3a78e89f..04f37b36c 100644
--- a/translated_images/et/.co-op-translator.json
+++ b/translated_images/et/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T17:09:21+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "et"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T17:09:00+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "et"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T12:28:00+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "et"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:19:29+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "et"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T12:28:05+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "et"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T12:33:17+00:00",
diff --git a/translated_images/et/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/et/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 34328fead..000000000
Binary files a/translated_images/et/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/et/architecture.eedc993a1c576839.webp b/translated_images/et/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 182aa589f..000000000
Binary files a/translated_images/et/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/et/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/et/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 870d5bd20..000000000
Binary files a/translated_images/et/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/fa/.co-op-translator.json b/translated_images/fa/.co-op-translator.json
index 8054eb542..2c8897ed5 100644
--- a/translated_images/fa/.co-op-translator.json
+++ b/translated_images/fa/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:18:29+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "fa"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:18:04+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "fa"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T08:34:29+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "fa"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T10:26:45+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "fa"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T08:34:34+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "fa"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T08:39:25+00:00",
diff --git a/translated_images/fa/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/fa/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 596640279..000000000
Binary files a/translated_images/fa/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/fa/architecture.eedc993a1c576839.webp b/translated_images/fa/architecture.eedc993a1c576839.webp
deleted file mode 100644
index a4867f835..000000000
Binary files a/translated_images/fa/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/fa/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/fa/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 2de290e69..000000000
Binary files a/translated_images/fa/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/fi/.co-op-translator.json b/translated_images/fi/.co-op-translator.json
index eaba3a069..8891d7efa 100644
--- a/translated_images/fi/.co-op-translator.json
+++ b/translated_images/fi/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:32:15+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "fi"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:31:51+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "fi"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T10:45:06+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "fi"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:27:49+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "fi"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T10:45:10+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "fi"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T10:50:22+00:00",
diff --git a/translated_images/fi/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/fi/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 4151d893e..000000000
Binary files a/translated_images/fi/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/fi/architecture.eedc993a1c576839.webp b/translated_images/fi/architecture.eedc993a1c576839.webp
deleted file mode 100644
index a7d29906d..000000000
Binary files a/translated_images/fi/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/fi/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/fi/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 1743c4d30..000000000
Binary files a/translated_images/fi/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/fr/.co-op-translator.json b/translated_images/fr/.co-op-translator.json
index 41046298f..7795d06e2 100644
--- a/translated_images/fr/.co-op-translator.json
+++ b/translated_images/fr/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T13:44:09+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "fr"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T13:43:51+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "fr"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T08:03:13+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "fr"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T10:18:26+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "fr"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T08:03:17+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "fr"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T08:09:24+00:00",
diff --git a/translated_images/fr/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/fr/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index b3b0c0708..000000000
Binary files a/translated_images/fr/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/fr/architecture.eedc993a1c576839.webp b/translated_images/fr/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 4476a1253..000000000
Binary files a/translated_images/fr/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/fr/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/fr/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index ac1e03f84..000000000
Binary files a/translated_images/fr/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/he/.co-op-translator.json b/translated_images/he/.co-op-translator.json
index b8bfd2bdc..47a00243e 100644
--- a/translated_images/he/.co-op-translator.json
+++ b/translated_images/he/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:32:05+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "he"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:31:42+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "he"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T11:00:04+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "he"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:59:47+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "he"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T11:00:09+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "he"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T11:06:54+00:00",
diff --git a/translated_images/he/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/he/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index baf579b52..000000000
Binary files a/translated_images/he/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/he/architecture.eedc993a1c576839.webp b/translated_images/he/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 104308f91..000000000
Binary files a/translated_images/he/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/he/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/he/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index e94948bc5..000000000
Binary files a/translated_images/he/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/hi/.co-op-translator.json b/translated_images/hi/.co-op-translator.json
index 37772432e..2b07213a7 100644
--- a/translated_images/hi/.co-op-translator.json
+++ b/translated_images/hi/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T15:38:14+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "hi"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T15:37:49+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "hi"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T09:06:34+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "hi"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T10:36:46+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "hi"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T09:06:39+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "hi"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T09:12:09+00:00",
diff --git a/translated_images/hi/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/hi/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 131dd68da..000000000
Binary files a/translated_images/hi/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/hi/architecture.eedc993a1c576839.webp b/translated_images/hi/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 3cd01f35f..000000000
Binary files a/translated_images/hi/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/hi/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/hi/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index f7ef573bd..000000000
Binary files a/translated_images/hi/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/hr/.co-op-translator.json b/translated_images/hr/.co-op-translator.json
index c1f017ee7..6ef3cd189 100644
--- a/translated_images/hr/.co-op-translator.json
+++ b/translated_images/hr/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:05:46+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "hr"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:05:26+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "hr"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T11:54:46+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "hr"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:29:04+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "hr"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T11:54:51+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "hr"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T12:00:23+00:00",
diff --git a/translated_images/hr/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/hr/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 5c5bce5dc..000000000
Binary files a/translated_images/hr/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/hr/architecture.eedc993a1c576839.webp b/translated_images/hr/architecture.eedc993a1c576839.webp
deleted file mode 100644
index d27fc5d0b..000000000
Binary files a/translated_images/hr/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/hr/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/hr/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 94788985a..000000000
Binary files a/translated_images/hr/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/hu/.co-op-translator.json b/translated_images/hu/.co-op-translator.json
index 9bab8cf3b..38bf6dde7 100644
--- a/translated_images/hu/.co-op-translator.json
+++ b/translated_images/hu/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T15:25:20+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "hu"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T15:24:55+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "hu"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T11:20:45+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "hu"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:44:32+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "hu"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T11:20:50+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "hu"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T11:26:21+00:00",
diff --git a/translated_images/hu/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/hu/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 807cd4b4c..000000000
Binary files a/translated_images/hu/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/hu/architecture.eedc993a1c576839.webp b/translated_images/hu/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 0b92aef2a..000000000
Binary files a/translated_images/hu/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/hu/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/hu/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index f46285e5d..000000000
Binary files a/translated_images/hu/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/id/.co-op-translator.json b/translated_images/id/.co-op-translator.json
index dd794443c..4030efd69 100644
--- a/translated_images/id/.co-op-translator.json
+++ b/translated_images/id/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:07:09+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "id"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:06:49+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "id"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T09:23:17+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "id"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:36:43+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "id"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T09:23:21+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "id"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T09:28:30+00:00",
diff --git a/translated_images/id/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/id/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 157bdd660..000000000
Binary files a/translated_images/id/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/id/architecture.eedc993a1c576839.webp b/translated_images/id/architecture.eedc993a1c576839.webp
deleted file mode 100644
index e64449b16..000000000
Binary files a/translated_images/id/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/id/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/id/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 47c274ca0..000000000
Binary files a/translated_images/id/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/it/.co-op-translator.json b/translated_images/it/.co-op-translator.json
index a0a07c727..c1016f7cd 100644
--- a/translated_images/it/.co-op-translator.json
+++ b/translated_images/it/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T13:55:39+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "it"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T13:55:17+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "it"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T10:10:16+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "it"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:36:01+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "it"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T10:10:21+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "it"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T10:15:42+00:00",
diff --git a/translated_images/it/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/it/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index c16a33deb..000000000
Binary files a/translated_images/it/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/it/architecture.eedc993a1c576839.webp b/translated_images/it/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 86470da01..000000000
Binary files a/translated_images/it/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/it/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/it/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 91dd9ae22..000000000
Binary files a/translated_images/it/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/ja/.co-op-translator.json b/translated_images/ja/.co-op-translator.json
index 6e54e55b9..cea6c6f3e 100644
--- a/translated_images/ja/.co-op-translator.json
+++ b/translated_images/ja/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T15:38:08+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "ja"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T15:37:41+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "ja"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T09:06:30+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "ja"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T10:36:42+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "ja"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T09:06:35+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "ja"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T09:12:03+00:00",
diff --git a/translated_images/ja/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/ja/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 312a980cd..000000000
Binary files a/translated_images/ja/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/ja/architecture.eedc993a1c576839.webp b/translated_images/ja/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 3ed88af88..000000000
Binary files a/translated_images/ja/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/ja/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/ja/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index ad7a7b2b0..000000000
Binary files a/translated_images/ja/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/km/.co-op-translator.json b/translated_images/km/.co-op-translator.json
index 055398ae1..d9dfb46c8 100644
--- a/translated_images/km/.co-op-translator.json
+++ b/translated_images/km/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-04-06T16:41:53+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "km"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-04-06T16:41:46+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "km"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-04-06T16:42:20+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "km"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-04-06T16:43:26+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "km"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-04-06T16:42:22+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "km"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-04-06T16:45:34+00:00",
diff --git a/translated_images/km/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/km/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 78798ff27..000000000
Binary files a/translated_images/km/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/km/architecture.eedc993a1c576839.webp b/translated_images/km/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 895b21d87..000000000
Binary files a/translated_images/km/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/km/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/km/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index cfe2880c4..000000000
Binary files a/translated_images/km/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/kn/.co-op-translator.json b/translated_images/kn/.co-op-translator.json
index 1a5c89074..e2c9a7e19 100644
--- a/translated_images/kn/.co-op-translator.json
+++ b/translated_images/kn/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T15:53:03+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "kn"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T15:52:40+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "kn"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T12:44:19+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "kn"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:11:20+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "kn"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T12:44:25+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "kn"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T12:51:03+00:00",
diff --git a/translated_images/kn/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/kn/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 353ea0ebe..000000000
Binary files a/translated_images/kn/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/kn/architecture.eedc993a1c576839.webp b/translated_images/kn/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 063556056..000000000
Binary files a/translated_images/kn/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/kn/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/kn/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 84008fe77..000000000
Binary files a/translated_images/kn/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/ko/.co-op-translator.json b/translated_images/ko/.co-op-translator.json
index 21351e5bb..07b9bf2d6 100644
--- a/translated_images/ko/.co-op-translator.json
+++ b/translated_images/ko/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T15:38:11+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "ko"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T15:37:45+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "ko"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T09:06:31+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "ko"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T10:36:44+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "ko"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T09:06:37+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "ko"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T09:12:06+00:00",
diff --git a/translated_images/ko/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/ko/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 4616d7aba..000000000
Binary files a/translated_images/ko/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/ko/architecture.eedc993a1c576839.webp b/translated_images/ko/architecture.eedc993a1c576839.webp
deleted file mode 100644
index ec5d608fc..000000000
Binary files a/translated_images/ko/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/ko/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/ko/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 63e92648b..000000000
Binary files a/translated_images/ko/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/lt/.co-op-translator.json b/translated_images/lt/.co-op-translator.json
index a2e9b0944..947839b11 100644
--- a/translated_images/lt/.co-op-translator.json
+++ b/translated_images/lt/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T17:25:42+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "lt"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T17:25:14+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "lt"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T12:11:45+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "lt"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:10:40+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "lt"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T12:11:50+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "lt"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T12:17:57+00:00",
diff --git a/translated_images/lt/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/lt/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 0d85a0b57..000000000
Binary files a/translated_images/lt/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/lt/architecture.eedc993a1c576839.webp b/translated_images/lt/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 8aae2da86..000000000
Binary files a/translated_images/lt/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/lt/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/lt/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 7061c045a..000000000
Binary files a/translated_images/lt/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/ml/.co-op-translator.json b/translated_images/ml/.co-op-translator.json
index b6980fc0e..b000bfa10 100644
--- a/translated_images/ml/.co-op-translator.json
+++ b/translated_images/ml/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T15:53:00+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "ml"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T15:52:35+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "ml"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T12:44:16+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "ml"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:11:18+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "ml"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T12:44:22+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "ml"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T12:50:59+00:00",
diff --git a/translated_images/ml/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/ml/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 4e0003a27..000000000
Binary files a/translated_images/ml/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/ml/architecture.eedc993a1c576839.webp b/translated_images/ml/architecture.eedc993a1c576839.webp
deleted file mode 100644
index d3b5ea431..000000000
Binary files a/translated_images/ml/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/ml/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/ml/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 239b84d3d..000000000
Binary files a/translated_images/ml/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/mr/.co-op-translator.json b/translated_images/mr/.co-op-translator.json
index 13e6904f9..0402e8c35 100644
--- a/translated_images/mr/.co-op-translator.json
+++ b/translated_images/mr/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T15:11:35+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "mr"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T15:11:11+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "mr"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T09:37:00+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "mr"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:46:34+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "mr"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T09:37:06+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "mr"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T09:43:05+00:00",
diff --git a/translated_images/mr/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/mr/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 87d0ec476..000000000
Binary files a/translated_images/mr/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/mr/architecture.eedc993a1c576839.webp b/translated_images/mr/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 9bcf6a657..000000000
Binary files a/translated_images/mr/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/mr/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/mr/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 61a009f95..000000000
Binary files a/translated_images/mr/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/ms/.co-op-translator.json b/translated_images/ms/.co-op-translator.json
index 3eeb97369..eeacb6d5f 100644
--- a/translated_images/ms/.co-op-translator.json
+++ b/translated_images/ms/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:07:11+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "ms"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:06:51+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "ms"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T09:23:18+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "ms"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:36:47+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "ms"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T09:23:22+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "ms"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T09:28:34+00:00",
diff --git a/translated_images/ms/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/ms/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index def323f06..000000000
Binary files a/translated_images/ms/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/ms/architecture.eedc993a1c576839.webp b/translated_images/ms/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 06c9eb7e0..000000000
Binary files a/translated_images/ms/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/ms/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/ms/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index da3e4a957..000000000
Binary files a/translated_images/ms/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/my/.co-op-translator.json b/translated_images/my/.co-op-translator.json
index 4c4a23672..02c5ba185 100644
--- a/translated_images/my/.co-op-translator.json
+++ b/translated_images/my/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T17:25:36+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "my"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T17:25:05+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "my"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T12:11:42+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "my"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:10:36+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "my"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T12:11:47+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "my"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T12:17:51+00:00",
diff --git a/translated_images/my/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/my/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 102beb102..000000000
Binary files a/translated_images/my/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/my/architecture.eedc993a1c576839.webp b/translated_images/my/architecture.eedc993a1c576839.webp
deleted file mode 100644
index a529a1980..000000000
Binary files a/translated_images/my/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/my/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/my/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index ed1fe8cdc..000000000
Binary files a/translated_images/my/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/ne/.co-op-translator.json b/translated_images/ne/.co-op-translator.json
index afb041145..745ffc4ff 100644
--- a/translated_images/ne/.co-op-translator.json
+++ b/translated_images/ne/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T15:11:38+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "ne"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T15:11:15+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "ne"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T09:37:02+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "ne"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:46:39+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "ne"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T09:37:07+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "ne"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T09:43:09+00:00",
diff --git a/translated_images/ne/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/ne/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 8824a5809..000000000
Binary files a/translated_images/ne/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/ne/architecture.eedc993a1c576839.webp b/translated_images/ne/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 8c10bb513..000000000
Binary files a/translated_images/ne/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/ne/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/ne/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 8faaa9d09..000000000
Binary files a/translated_images/ne/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/nl/.co-op-translator.json b/translated_images/nl/.co-op-translator.json
index b39b3d38b..014fa4228 100644
--- a/translated_images/nl/.co-op-translator.json
+++ b/translated_images/nl/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:32:02+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "nl"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:31:39+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "nl"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T11:00:02+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "nl"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:59:44+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "nl"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T11:00:08+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "nl"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T11:06:51+00:00",
diff --git a/translated_images/nl/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/nl/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 94a1dad83..000000000
Binary files a/translated_images/nl/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/nl/architecture.eedc993a1c576839.webp b/translated_images/nl/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 335dc176c..000000000
Binary files a/translated_images/nl/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/nl/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/nl/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index f4fb18cd1..000000000
Binary files a/translated_images/nl/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/no/.co-op-translator.json b/translated_images/no/.co-op-translator.json
index 885b05b4c..03f31b0c6 100644
--- a/translated_images/no/.co-op-translator.json
+++ b/translated_images/no/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:32:12+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "no"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:31:48+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "no"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T10:45:04+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "no"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:27:46+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "no"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T10:45:09+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "no"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T10:50:18+00:00",
diff --git a/translated_images/no/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/no/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index ac3a0f68b..000000000
Binary files a/translated_images/no/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/no/architecture.eedc993a1c576839.webp b/translated_images/no/architecture.eedc993a1c576839.webp
deleted file mode 100644
index b05be2d78..000000000
Binary files a/translated_images/no/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/no/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/no/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 3401dac30..000000000
Binary files a/translated_images/no/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/pa/.co-op-translator.json b/translated_images/pa/.co-op-translator.json
index f89493d82..e47ad4bde 100644
--- a/translated_images/pa/.co-op-translator.json
+++ b/translated_images/pa/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:18:33+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "pa"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:18:08+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "pa"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T09:53:32+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "pa"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T13:11:48+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "pa"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T09:53:37+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "pa"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T09:58:59+00:00",
diff --git a/translated_images/pa/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/pa/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 562d93048..000000000
Binary files a/translated_images/pa/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/pa/architecture.eedc993a1c576839.webp b/translated_images/pa/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 30a9b9e29..000000000
Binary files a/translated_images/pa/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/pa/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/pa/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index c9794caca..000000000
Binary files a/translated_images/pa/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/pcm/.co-op-translator.json b/translated_images/pcm/.co-op-translator.json
index e65b62a05..336231038 100644
--- a/translated_images/pcm/.co-op-translator.json
+++ b/translated_images/pcm/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T17:09:24+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "pcm"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T17:09:03+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "pcm"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T12:28:01+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "pcm"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:19:31+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "pcm"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T12:28:06+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "pcm"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T12:33:20+00:00",
diff --git a/translated_images/pcm/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/pcm/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 35b920510..000000000
Binary files a/translated_images/pcm/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/pcm/architecture.eedc993a1c576839.webp b/translated_images/pcm/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 1b15acea6..000000000
Binary files a/translated_images/pcm/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/pcm/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/pcm/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index c2d6f18aa..000000000
Binary files a/translated_images/pcm/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/pl/.co-op-translator.json b/translated_images/pl/.co-op-translator.json
index 3cf14116e..f008e9d4b 100644
--- a/translated_images/pl/.co-op-translator.json
+++ b/translated_images/pl/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T13:55:42+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "pl"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T13:55:21+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "pl"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T10:10:17+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "pl"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:36:04+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "pl"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T10:10:23+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "pl"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T10:15:45+00:00",
diff --git a/translated_images/pl/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/pl/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 114c713a2..000000000
Binary files a/translated_images/pl/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/pl/architecture.eedc993a1c576839.webp b/translated_images/pl/architecture.eedc993a1c576839.webp
deleted file mode 100644
index fc7366ce5..000000000
Binary files a/translated_images/pl/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/pl/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/pl/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index a2a148711..000000000
Binary files a/translated_images/pl/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/pt-BR/.co-op-translator.json b/translated_images/pt-BR/.co-op-translator.json
index da5d40d3f..6b30558c7 100644
--- a/translated_images/pt-BR/.co-op-translator.json
+++ b/translated_images/pt-BR/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:18:38+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "pt-BR"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:18:15+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "pt-BR"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T09:53:35+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "pt-BR"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T13:11:52+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "pt-BR"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T09:53:40+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "pt-BR"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T09:59:05+00:00",
diff --git a/translated_images/pt-BR/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/pt-BR/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index c4d839ea1..000000000
Binary files a/translated_images/pt-BR/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/pt-BR/architecture.eedc993a1c576839.webp b/translated_images/pt-BR/architecture.eedc993a1c576839.webp
deleted file mode 100644
index e9f74016c..000000000
Binary files a/translated_images/pt-BR/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/pt-BR/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/pt-BR/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 6cae18b3a..000000000
Binary files a/translated_images/pt-BR/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/pt-PT/.co-op-translator.json b/translated_images/pt-PT/.co-op-translator.json
index 3ec9e550c..506ad448e 100644
--- a/translated_images/pt-PT/.co-op-translator.json
+++ b/translated_images/pt-PT/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:18:35+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "pt-PT"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:18:11+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "pt-PT"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T09:53:33+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "pt-PT"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T13:11:50+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "pt-PT"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T09:53:38+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "pt-PT"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T09:59:02+00:00",
diff --git a/translated_images/pt-PT/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/pt-PT/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 59d801189..000000000
Binary files a/translated_images/pt-PT/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/pt-PT/architecture.eedc993a1c576839.webp b/translated_images/pt-PT/architecture.eedc993a1c576839.webp
deleted file mode 100644
index b9219a3d1..000000000
Binary files a/translated_images/pt-PT/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/pt-PT/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/pt-PT/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 63dd107e5..000000000
Binary files a/translated_images/pt-PT/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/ro/.co-op-translator.json b/translated_images/ro/.co-op-translator.json
index dc9aa3aa8..92b066121 100644
--- a/translated_images/ro/.co-op-translator.json
+++ b/translated_images/ro/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:56:31+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "ro"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:56:11+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "ro"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T11:37:54+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "ro"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:52:32+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "ro"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T11:37:59+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "ro"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T11:43:38+00:00",
diff --git a/translated_images/ro/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/ro/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 20310c59b..000000000
Binary files a/translated_images/ro/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/ro/architecture.eedc993a1c576839.webp b/translated_images/ro/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 5350fbc2d..000000000
Binary files a/translated_images/ro/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/ro/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/ro/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index da270efc4..000000000
Binary files a/translated_images/ro/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/ru/.co-op-translator.json b/translated_images/ru/.co-op-translator.json
index 0d935c826..60ade6da3 100644
--- a/translated_images/ru/.co-op-translator.json
+++ b/translated_images/ru/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:43:19+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "ru"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:42:55+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "ru"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T08:20:32+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "ru"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T13:02:44+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "ru"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T08:20:37+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "ru"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T08:25:36+00:00",
diff --git a/translated_images/ru/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/ru/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 7727b2c6b..000000000
Binary files a/translated_images/ru/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/ru/architecture.eedc993a1c576839.webp b/translated_images/ru/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 9b8f921cb..000000000
Binary files a/translated_images/ru/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/ru/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/ru/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index a96741985..000000000
Binary files a/translated_images/ru/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/sk/.co-op-translator.json b/translated_images/sk/.co-op-translator.json
index 26ef204ea..af817f5e3 100644
--- a/translated_images/sk/.co-op-translator.json
+++ b/translated_images/sk/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:56:29+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "sk"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:56:08+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "sk"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T11:37:52+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "sk"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:52:29+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "sk"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T11:37:57+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "sk"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T11:43:32+00:00",
diff --git a/translated_images/sk/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/sk/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 08665c563..000000000
Binary files a/translated_images/sk/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/sk/architecture.eedc993a1c576839.webp b/translated_images/sk/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 5c5e65de6..000000000
Binary files a/translated_images/sk/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/sk/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/sk/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index bd012d38b..000000000
Binary files a/translated_images/sk/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/sl/.co-op-translator.json b/translated_images/sl/.co-op-translator.json
index 562c48363..380d84d97 100644
--- a/translated_images/sl/.co-op-translator.json
+++ b/translated_images/sl/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:05:49+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "sl"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:05:30+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "sl"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T11:54:47+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "sl"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:29:06+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "sl"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T11:54:52+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "sl"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T12:00:27+00:00",
diff --git a/translated_images/sl/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/sl/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 7d4b92bc8..000000000
Binary files a/translated_images/sl/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/sl/architecture.eedc993a1c576839.webp b/translated_images/sl/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 3692efccb..000000000
Binary files a/translated_images/sl/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/sl/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/sl/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index d3d987319..000000000
Binary files a/translated_images/sl/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/sr/.co-op-translator.json b/translated_images/sr/.co-op-translator.json
index 47d4ae1ff..48ac767b9 100644
--- a/translated_images/sr/.co-op-translator.json
+++ b/translated_images/sr/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:05:44+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "sr"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:05:22+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "sr"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T11:54:44+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "sr"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:29:02+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "sr"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T11:54:49+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "sr"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T12:00:20+00:00",
diff --git a/translated_images/sr/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/sr/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 4762d5582..000000000
Binary files a/translated_images/sr/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/sr/architecture.eedc993a1c576839.webp b/translated_images/sr/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 589572bff..000000000
Binary files a/translated_images/sr/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/sr/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/sr/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index a25c8daa0..000000000
Binary files a/translated_images/sr/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/sv/.co-op-translator.json b/translated_images/sv/.co-op-translator.json
index 4fc2c9e95..fdf71bfad 100644
--- a/translated_images/sv/.co-op-translator.json
+++ b/translated_images/sv/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:57:46+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "sv"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:57:23+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "sv"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T10:26:32+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "sv"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:19:53+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "sv"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T10:26:37+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "sv"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T10:34:23+00:00",
diff --git a/translated_images/sv/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/sv/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index c817e909f..000000000
Binary files a/translated_images/sv/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/sv/architecture.eedc993a1c576839.webp b/translated_images/sv/architecture.eedc993a1c576839.webp
deleted file mode 100644
index f68f4454e..000000000
Binary files a/translated_images/sv/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/sv/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/sv/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index bc0840138..000000000
Binary files a/translated_images/sv/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/sw/.co-op-translator.json b/translated_images/sw/.co-op-translator.json
index 24ef59e0c..caa16a002 100644
--- a/translated_images/sw/.co-op-translator.json
+++ b/translated_images/sw/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T15:25:17+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "sw"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T15:24:51+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "sw"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T11:20:43+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "sw"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:44:30+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "sw"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T11:20:49+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "sw"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T11:26:18+00:00",
diff --git a/translated_images/sw/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/sw/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 2fdc7ffd3..000000000
Binary files a/translated_images/sw/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/sw/architecture.eedc993a1c576839.webp b/translated_images/sw/architecture.eedc993a1c576839.webp
deleted file mode 100644
index fdf7dc7a3..000000000
Binary files a/translated_images/sw/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/sw/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/sw/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index d01e84f63..000000000
Binary files a/translated_images/sw/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/ta/.co-op-translator.json b/translated_images/ta/.co-op-translator.json
index 562c52dc6..663636489 100644
--- a/translated_images/ta/.co-op-translator.json
+++ b/translated_images/ta/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T17:09:19+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "ta"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T17:08:57+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "ta"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T12:27:58+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "ta"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:19:25+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "ta"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T12:28:03+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "ta"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T12:33:12+00:00",
diff --git a/translated_images/ta/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/ta/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index e481327c6..000000000
Binary files a/translated_images/ta/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/ta/architecture.eedc993a1c576839.webp b/translated_images/ta/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 3d4bf60b1..000000000
Binary files a/translated_images/ta/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/ta/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/ta/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 3d5bd67d4..000000000
Binary files a/translated_images/ta/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/te/.co-op-translator.json b/translated_images/te/.co-op-translator.json
index 0dd0d3756..1408eec21 100644
--- a/translated_images/te/.co-op-translator.json
+++ b/translated_images/te/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T15:52:57+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "te"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T15:52:31+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "te"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T12:44:14+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "te"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:11:15+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "te"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T12:44:21+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "te"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T12:50:54+00:00",
diff --git a/translated_images/te/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/te/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 59a88cad3..000000000
Binary files a/translated_images/te/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/te/architecture.eedc993a1c576839.webp b/translated_images/te/architecture.eedc993a1c576839.webp
deleted file mode 100644
index e0d162d24..000000000
Binary files a/translated_images/te/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/te/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/te/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 136704584..000000000
Binary files a/translated_images/te/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/th/.co-op-translator.json b/translated_images/th/.co-op-translator.json
index 309c60ff4..e2c886999 100644
--- a/translated_images/th/.co-op-translator.json
+++ b/translated_images/th/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:57:43+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "th"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:57:20+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "th"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T10:26:30+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "th"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:19:51+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "th"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T10:26:36+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "th"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T10:34:19+00:00",
diff --git a/translated_images/th/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/th/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 039634ced..000000000
Binary files a/translated_images/th/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/th/architecture.eedc993a1c576839.webp b/translated_images/th/architecture.eedc993a1c576839.webp
deleted file mode 100644
index fdd3612cc..000000000
Binary files a/translated_images/th/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/th/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/th/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index e0e7a4bd6..000000000
Binary files a/translated_images/th/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/tl/.co-op-translator.json b/translated_images/tl/.co-op-translator.json
index 7d7edc229..787ea940a 100644
--- a/translated_images/tl/.co-op-translator.json
+++ b/translated_images/tl/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:07:13+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "tl"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:06:55+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "tl"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T09:23:20+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "tl"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:36:49+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "tl"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T09:23:24+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "tl"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T09:28:39+00:00",
diff --git a/translated_images/tl/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/tl/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 47e1337dd..000000000
Binary files a/translated_images/tl/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/tl/architecture.eedc993a1c576839.webp b/translated_images/tl/architecture.eedc993a1c576839.webp
deleted file mode 100644
index e308245cb..000000000
Binary files a/translated_images/tl/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/tl/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/tl/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index dbbdd83c7..000000000
Binary files a/translated_images/tl/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/tr/.co-op-translator.json b/translated_images/tr/.co-op-translator.json
index 2e7566f68..d44d05635 100644
--- a/translated_images/tr/.co-op-translator.json
+++ b/translated_images/tr/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T13:55:44+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "tr"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T13:55:25+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "tr"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T10:10:19+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "tr"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:36:07+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "tr"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T10:10:24+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "tr"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T10:15:48+00:00",
diff --git a/translated_images/tr/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/tr/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 4c3a4a799..000000000
Binary files a/translated_images/tr/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/tr/architecture.eedc993a1c576839.webp b/translated_images/tr/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 1c223d333..000000000
Binary files a/translated_images/tr/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/tr/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/tr/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index d044b8d2e..000000000
Binary files a/translated_images/tr/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/uk/.co-op-translator.json b/translated_images/uk/.co-op-translator.json
index df13bf072..8cb8847ea 100644
--- a/translated_images/uk/.co-op-translator.json
+++ b/translated_images/uk/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T17:25:39+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "uk"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T17:25:10+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "uk"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T12:11:43+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "uk"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:10:38+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "uk"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T12:11:48+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "uk"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T12:17:54+00:00",
diff --git a/translated_images/uk/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/uk/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 773dc7264..000000000
Binary files a/translated_images/uk/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/uk/architecture.eedc993a1c576839.webp b/translated_images/uk/architecture.eedc993a1c576839.webp
deleted file mode 100644
index c8641bbfd..000000000
Binary files a/translated_images/uk/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/uk/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/uk/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index c780cbc7e..000000000
Binary files a/translated_images/uk/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/ur/.co-op-translator.json b/translated_images/ur/.co-op-translator.json
index c42c2b177..94612a520 100644
--- a/translated_images/ur/.co-op-translator.json
+++ b/translated_images/ur/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:18:31+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "ur"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:18:07+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "ur"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T08:34:31+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "ur"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T10:26:47+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "ur"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T08:34:36+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "ur"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T08:39:29+00:00",
diff --git a/translated_images/ur/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/ur/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 89fff7a99..000000000
Binary files a/translated_images/ur/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/ur/architecture.eedc993a1c576839.webp b/translated_images/ur/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 8bef9105c..000000000
Binary files a/translated_images/ur/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/ur/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/ur/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 552336752..000000000
Binary files a/translated_images/ur/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/vi/.co-op-translator.json b/translated_images/vi/.co-op-translator.json
index 282032792..419fa197c 100644
--- a/translated_images/vi/.co-op-translator.json
+++ b/translated_images/vi/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:32:08+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "vi"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:31:47+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "vi"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T11:00:06+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "vi"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T11:59:49+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "vi"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T11:00:11+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "vi"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T11:06:57+00:00",
diff --git a/translated_images/vi/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/vi/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index fe70da499..000000000
Binary files a/translated_images/vi/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/vi/architecture.eedc993a1c576839.webp b/translated_images/vi/architecture.eedc993a1c576839.webp
deleted file mode 100644
index e6050f5c1..000000000
Binary files a/translated_images/vi/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/vi/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/vi/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 72d82d5fb..000000000
Binary files a/translated_images/vi/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/zh-CN/.co-op-translator.json b/translated_images/zh-CN/.co-op-translator.json
index 640279f40..d35f3a03f 100644
--- a/translated_images/zh-CN/.co-op-translator.json
+++ b/translated_images/zh-CN/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T14:18:33+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "zh-CN"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T14:18:12+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "zh-CN"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T08:34:33+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "zh-CN"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T10:26:49+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "zh-CN"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T08:34:37+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "zh-CN"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T08:39:32+00:00",
diff --git a/translated_images/zh-CN/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/zh-CN/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index bbebc8353..000000000
Binary files a/translated_images/zh-CN/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/zh-CN/architecture.eedc993a1c576839.webp b/translated_images/zh-CN/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 107607a8f..000000000
Binary files a/translated_images/zh-CN/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/zh-CN/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/zh-CN/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 5c293bc56..000000000
Binary files a/translated_images/zh-CN/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/zh-HK/.co-op-translator.json b/translated_images/zh-HK/.co-op-translator.json
index b24a2b8dc..46a02999a 100644
--- a/translated_images/zh-HK/.co-op-translator.json
+++ b/translated_images/zh-HK/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:43:35+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "zh-HK"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:43:13+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "zh-HK"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T08:49:59+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "zh-HK"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:54:45+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "zh-HK"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T08:50:04+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "zh-HK"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T08:56:18+00:00",
diff --git a/translated_images/zh-HK/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/zh-HK/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 55dffe67d..000000000
Binary files a/translated_images/zh-HK/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/zh-HK/architecture.eedc993a1c576839.webp b/translated_images/zh-HK/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 0677a6cac..000000000
Binary files a/translated_images/zh-HK/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/zh-HK/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/zh-HK/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 310e670e9..000000000
Binary files a/translated_images/zh-HK/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/zh-MO/.co-op-translator.json b/translated_images/zh-MO/.co-op-translator.json
index a2d181fbb..d74ac0353 100644
--- a/translated_images/zh-MO/.co-op-translator.json
+++ b/translated_images/zh-MO/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:43:32+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "zh-MO"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:43:09+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "zh-MO"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T08:49:56+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "zh-MO"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:54:43+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "zh-MO"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T08:50:02+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "zh-MO"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T08:56:15+00:00",
diff --git a/translated_images/zh-MO/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/zh-MO/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index b8b12c5d9..000000000
Binary files a/translated_images/zh-MO/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/zh-MO/architecture.eedc993a1c576839.webp b/translated_images/zh-MO/architecture.eedc993a1c576839.webp
deleted file mode 100644
index 385a7acff..000000000
Binary files a/translated_images/zh-MO/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/zh-MO/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/zh-MO/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index 14aa13978..000000000
Binary files a/translated_images/zh-MO/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translated_images/zh-TW/.co-op-translator.json b/translated_images/zh-TW/.co-op-translator.json
index ff7e97aa5..df103c63f 100644
--- a/translated_images/zh-TW/.co-op-translator.json
+++ b/translated_images/zh-TW/.co-op-translator.json
@@ -1,10 +1,4 @@
{
- "00-tool-integration.3f573138c2fa4eb2.webp": {
- "original_hash": "4e132d8f4b1c5d7d67511ebb718784a6",
- "translation_date": "2026-03-03T16:43:38+00:00",
- "source_file": "diagrams/00-tool-integration.png",
- "language_code": "zh-TW"
- },
"04-tools-spring-boot.a1bd8ae23cd098e1.webp": {
"original_hash": "79a86ab27b38d69feb8b17f94af99288",
"translation_date": "2026-03-03T16:43:16+00:00",
@@ -35,12 +29,6 @@
"source_file": "05-mcp/images/agentic-scope.png",
"language_code": "zh-TW"
},
- "architecture.eedc993a1c576839.webp": {
- "original_hash": "add139926cd5d568e3ba2c38eb32312b",
- "translation_date": "2026-01-16T08:50:00+00:00",
- "source_file": "00-quick-start/images/architecture.png",
- "language_code": "zh-TW"
- },
"chain-of-thought.5cff6630e2657e2a.webp": {
"original_hash": "c396f6bd0295f2bda88ba3ccaaa0f39b",
"translation_date": "2026-02-16T12:54:47+00:00",
@@ -203,12 +191,6 @@
"source_file": "02-prompt-engineering/images/how-langchain4j-fits.png",
"language_code": "zh-TW"
},
- "langchain-concept.ad1fe6cf063515e1.webp": {
- "original_hash": "7b421aa8262309aaf85a573fa7940b20",
- "translation_date": "2026-01-16T08:50:06+00:00",
- "source_file": "00-quick-start/images/langchain-concept.png",
- "language_code": "zh-TW"
- },
"mcp-architecture.b3156d787a4ceac9.webp": {
"original_hash": "6ef1f9751daa7566fae670d97f023c49",
"translation_date": "2026-01-16T08:56:21+00:00",
diff --git a/translated_images/zh-TW/00-tool-integration.3f573138c2fa4eb2.webp b/translated_images/zh-TW/00-tool-integration.3f573138c2fa4eb2.webp
deleted file mode 100644
index 07c0f745a..000000000
Binary files a/translated_images/zh-TW/00-tool-integration.3f573138c2fa4eb2.webp and /dev/null differ
diff --git a/translated_images/zh-TW/architecture.eedc993a1c576839.webp b/translated_images/zh-TW/architecture.eedc993a1c576839.webp
deleted file mode 100644
index bae643cfa..000000000
Binary files a/translated_images/zh-TW/architecture.eedc993a1c576839.webp and /dev/null differ
diff --git a/translated_images/zh-TW/langchain-concept.ad1fe6cf063515e1.webp b/translated_images/zh-TW/langchain-concept.ad1fe6cf063515e1.webp
deleted file mode 100644
index d714ed811..000000000
Binary files a/translated_images/zh-TW/langchain-concept.ad1fe6cf063515e1.webp and /dev/null differ
diff --git a/translations/ar/.co-op-translator.json b/translations/ar/.co-op-translator.json
index 08c18baf5..70a791b36 100644
--- a/translations/ar/.co-op-translator.json
+++ b/translations/ar/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "ar"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-03T00:26:35+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T08:16:30+00:00",
"source_file": "01-introduction/README.md",
"language_code": "ar"
},
@@ -18,20 +18,20 @@
"language_code": "ar"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-03T00:28:19+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T08:11:23+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "ar"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-03T00:29:23+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T08:15:28+00:00",
"source_file": "03-rag/README.md",
"language_code": "ar"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T12:11:45+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T08:14:05+00:00",
"source_file": "04-tools/README.md",
"language_code": "ar"
},
@@ -54,8 +54,8 @@
"language_code": "ar"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T16:56:47+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T08:09:50+00:00",
"source_file": "README.md",
"language_code": "ar"
},
@@ -72,14 +72,14 @@
"language_code": "ar"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-03T00:32:07+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T08:12:00+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "ar"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-03T00:32:47+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T08:12:41+00:00",
"source_file": "docs/TESTING.md",
"language_code": "ar"
}
diff --git a/translations/ar/00-quick-start/README.md b/translations/ar/00-quick-start/README.md
deleted file mode 100644
index 8db284f97..000000000
--- a/translations/ar/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# الوحدة 00: البداية السريعة
-
-## جدول المحتويات
-
-- [مقدمة](../../../00-quick-start)
-- [ما هو LangChain4j؟](../../../00-quick-start)
-- [اعتمادات LangChain4j](../../../00-quick-start)
-- [المتطلبات المسبقة](../../../00-quick-start)
-- [الإعداد](../../../00-quick-start)
- - [1. احصل على رمز GitHub الخاص بك](../../../00-quick-start)
- - [2. ضبط الرمز الخاص بك](../../../00-quick-start)
-- [تشغيل الأمثلة](../../../00-quick-start)
- - [1. الدردشة الأساسية](../../../00-quick-start)
- - [2. أنماط الإدخال](../../../00-quick-start)
- - [3. استدعاء الدوال](../../../00-quick-start)
- - [4. أسئلة وأجوبة الوثائق (RAG السهل)](../../../00-quick-start)
- - [5. الذكاء الاصطناعي المسؤول](../../../00-quick-start)
-- [ما الذي يُظهره كل مثال](../../../00-quick-start)
-- [الخطوات التالية](../../../00-quick-start)
-- [استكشاف الأخطاء وإصلاحها](../../../00-quick-start)
-
-## مقدمة
-
-تهدف هذه البداية السريعة إلى تمكينك من بدء استخدام LangChain4j بأسرع وقت ممكن. تغطي الأساسيات المطلقة لبناء تطبيقات الذكاء الاصطناعي باستخدام LangChain4j ونماذج GitHub. في الوحدات التالية، ستنتقل إلى Azure OpenAI و GPT-5.2 وتغوص أعمق في كل مفهوم.
-
-## ما هو LangChain4j؟
-
-LangChain4j هو مكتبة Java تبسط بناء تطبيقات مدعومة بالذكاء الاصطناعي. بدلاً من التعامل مع عملاء HTTP وتحليل JSON، تعمل بواجهات برمجة تطبيقات Java نظيفة.
-
-تشير كلمة "chain" في LangChain إلى ربط مكونات متعددة معًا - قد تربط مطالبة مع نموذج ثم محلل، أو تربط عدة استدعاءات للذكاء الاصطناعي معًا حيث تغذي ناتج واحد الإدخال التالي. تركز هذه البداية السريعة على الأساسيات قبل استكشاف سلاسل أكثر تعقيدًا.
-
-
-
-*ربط المكونات في LangChain4j - الكتل البنائية تتصل لإنشاء تدفقات عمل ذكية قوية*
-
-سنستخدم ثلاثة مكونات أساسية:
-
-**ChatModel** - واجهة للتفاعل مع نماذج الذكاء الاصطناعي. استدعِ `model.chat("prompt")` واحصل على سلسلة رد. نستخدم `OpenAiOfficialChatModel` الذي يعمل مع نقاط نهاية متوافقة مع OpenAI مثل نماذج GitHub.
-
-**AiServices** - ينشئ واجهات خدمات ذكاء اصطناعي آمنة من حيث النوع. عرّف طرقًا، علّمها بـ `@Tool`، ويتولى LangChain4j التنفيذ. يستدعي الذكاء الاصطناعي طرق Java الخاصة بك تلقائيًا عند الحاجة.
-
-**MessageWindowChatMemory** - يحتفظ بتاريخ المحادثة. بدون هذا، كل طلب مستقل. به، يتذكّر الذكاء الاصطناعي الرسائل السابقة ويحافظ على السياق عبر دورات متعددة.
-
-
-
-*هندسة LangChain4j - المكونات الأساسية تعمل معًا لتشغيل تطبيقات الذكاء الاصطناعي الخاصة بك*
-
-## اعتمادات LangChain4j
-
-تستخدم هذه البداية السريعة ثلاث اعتمادات Maven في [`pom.xml`](../../../00-quick-start/pom.xml):
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-يوفر الموديول `langchain4j-open-ai-official` فئة `OpenAiOfficialChatModel` التي تتصل بواجهات API المتوافقة مع OpenAI. تستخدم نماذج GitHub نفس تنسيق API، لذا لا حاجة إلى محول خاص - فقط وجه عنوان القاعدة إلى `https://models.github.ai/inference`.
-
-يوفر الموديول `langchain4j-easy-rag` تقسيم الوثائق التلقائي، والتضمين، والاسترجاع حتى تتمكن من بناء تطبيقات RAG دون تكوين يدوي لكل خطوة.
-
-## المتطلبات المسبقة
-
-**هل تستخدم Dev Container؟** Java و Maven مثبتان بالفعل. أنت فقط بحاجة إلى رمز الوصول الشخصي من GitHub.
-
-**التطوير المحلي:**
-- Java 21+، Maven 3.9+
-- رمز وصول شخصي من GitHub (التعليمات أدناه)
-
-> **ملاحظة:** تستخدم هذه الوحدة `gpt-4.1-nano` من نماذج GitHub. لا تعدل اسم النموذج في الكود - هو مهيأ للعمل مع نماذج GitHub المتاحة.
-
-## الإعداد
-
-### 1. احصل على رمز GitHub الخاص بك
-
-1. انتقل إلى [إعدادات GitHub → رموز الوصول الشخصية](https://github.com/settings/personal-access-tokens)
-2. اضغط على "إنشاء رمز جديد"
-3. ضع اسمًا وصفيًا (مثلاً: "LangChain4j Demo")
-4. حدد تاريخ انتهاء صلاحية (7 أيام موصى بها)
-5. تحت "أذونات الحساب"، ابحث عن "Models" واضبطها على "قراءة فقط"
-6. اضغط على "إنشاء رمز"
-7. انسخ وصِل رمزك - لن تراه مرة أخرى
-
-### 2. ضبط الرمز الخاص بك
-
-**الخيار 1: استخدام VS Code (موصى به)**
-
-إذا كنت تستخدم VS Code، أضف الرمز الخاص بك إلى ملف `.env` في جذر المشروع:
-
-إذا لم يكن ملف `.env` موجودًا، انسخ `.env.example` إلى `.env` أو أنشئ ملف `.env` جديد في جذر المشروع.
-
-**مثال على ملف `.env`:**
-```bash
-# في /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-ثم يمكنك ببساطة النقر بزر الفأرة الأيمن على أي ملف تجريبي (مثل `BasicChatDemo.java`) في المستكشف واختيار **"Run Java"** أو استخدام تكوينات التشغيل من لوحة Run و Debug.
-
-**الخيار 2: استخدام الطرفية**
-
-اضبط الرمز كمتغير بيئة:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## تشغيل الأمثلة
-
-**باستخدام VS Code:** فقط انقر بزر الفأرة الأيمن على أي ملف تجريبي في المستكشف واختر **"Run Java"**، أو استخدم تكوينات التشغيل من لوحة Run و Debug (تأكد من إضافة الرمز إلى ملف `.env` أولاً).
-
-**باستخدام Maven:** بدلاً من ذلك، يمكنك التشغيل من سطر الأوامر:
-
-### 1. الدردشة الأساسية
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. أنماط الإدخال
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-يعرض أنماط بدون أمثلة، مع أمثلة قليلة، السلسلة الفكرية، والإدخال القائم على الأدوار.
-
-### 3. استدعاء الدوال
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-الذكاء الاصطناعي يستدعي طرق Java الخاصة بك تلقائيًا عند الحاجة.
-
-### 4. أسئلة وأجوبة الوثائق (RAG السهل)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-اطرح أسئلة حول مستنداتك باستخدام Easy RAG مع التضمين والاسترجاع التلقائي.
-
-### 5. الذكاء الاصطناعي المسؤول
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-شاهد كيف تمنع فلاتر سلامة الذكاء الاصطناعي المحتوى الضار.
-
-## ما الذي يُظهره كل مثال
-
-**الدردشة الأساسية** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-ابدأ هنا لرؤية LangChain4j في أبسط صوره. ستنشئ `OpenAiOfficialChatModel`، ترسل مطالبة باستخدام `.chat()`، وتحصل على رد. هذا يوضح الأساس: كيف تهيئ النماذج بنقاط نهاية ومفاتيح API مخصصة. بمجرد فهمك لهذا النمط، يبنى كل شيء آخر عليه.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 جرّب مع [GitHub Copilot](https://github.com/features/copilot) Chat:** افتح [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) واطرح:
-> - "كيف يمكنني التبديل من نماذج GitHub إلى Azure OpenAI في هذا الكود؟"
-> - "ما هي المعلمات الأخرى التي يمكنني تكوينها في OpenAiOfficialChatModel.builder()؟"
-> - "كيف أضيف ردود تدفق بدلاً من انتظار الرد الكامل؟"
-
-**هندسة المطالبات** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-الآن بعد أن عرفت كيف تتحدث إلى نموذج، دعنا نستكشف ما تقول له. تستخدم هذه التجربة نفس إعداد النموذج لكنها تعرض خمسة أنماط مختلفة من المطالبات. جرّب مطالبات بدون أمثلة مباشرة، مطالبات مع أمثلة قليلة تتعلم منها، مطالبات السلسلة الفكرية التي تكشف خطوات التفكير، والمطالبات القائمة على الأدوار التي تحدد السياق. سترى كيف يعطي نفس النموذج نتائج مختلفة تمامًا بناءً على كيفية صياغة طلبك.
-
-تُظهر التجربة أيضًا قوالب المطالبات، وهي طريقة قوية لإنشاء مطالبات قابلة لإعادة الاستخدام مع متغيرات.
-يُظهر المثال أدناه مطالبة تستخدم قالب LangChain4j `PromptTemplate` لملء المتغيرات. سيجيب الذكاء الاصطناعي بناءً على الوجهة والنشاط المقدمين.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 جرّب مع [GitHub Copilot](https://github.com/features/copilot) Chat:** افتح [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) واطرح:
-> - "ما الفرق بين مطالبة بدون أمثلة ومطالبة مع أمثلة قليلة، ومتى أستخدم كل منهما؟"
-> - "كيف يؤثر متغير درجة الحرارة على استجابات النموذج؟"
-> - "ما هي بعض التقنيات لمنع هجمات حقن المطالبات في الإنتاج؟"
-> - "كيف يمكنني إنشاء كائنات PromptTemplate قابلة لإعادة الاستخدام للأنماط الشائعة؟"
-
-**تكامل الأدوات** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-هنا يصبح LangChain4j قويًا. ستستخدم `AiServices` لإنشاء مساعد ذكاء اصطناعي يمكنه استدعاء طرق Java الخاصة بك. فقط عين الطرق بـ `@Tool("الوصف")` ويتولى LangChain4j الباقي - يقرر الذكاء الاصطناعي تلقائيًا متى يستخدم كل أداة بناءً على طلب المستخدم. توضح هذه التجربة استدعاء الدوال، وهي تقنية رئيسية لبناء ذكاء اصطناعي يمكنه اتخاذ إجراءات، وليس مجرد الإجابة عن الأسئلة.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 جرّب مع [GitHub Copilot](https://github.com/features/copilot) Chat:** افتح [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) واطرح:
-> - "كيف تعمل التعليمة @Tool وماذا يفعل LangChain4j معها خلف الكواليس؟"
-> - "هل يمكن للذكاء الاصطناعي استدعاء أدوات متعددة على التوالي لحل مشكلات معقدة؟"
-> - "ماذا يحدث إذا رمت أداة استثناء - كيف أتعامل مع الأخطاء؟"
-> - "كيف أدمج واجهة برمجة تطبيقات حقيقية بدلاً من مثال الآلة الحاسبة هذا؟"
-
-**أسئلة وأجوبة الوثائق (RAG السهل)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-هنا ستشاهد RAG (التوليد المعزز بالاسترجاع) باستخدام نهج LangChain4j "Easy RAG". تُحمّل الوثائق، تُقسّم تلقائيًا وتُدمج في ذاكرة داخلية، ثم يزود مسترجع المحتوى الذكاء الاصطناعي بالقطع ذات الصلة وقت الاستعلام. يجيب الذكاء الاصطناعي بناءً على مستنداتك، وليس معرفته العامة.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 جرّب مع [GitHub Copilot](https://github.com/features/copilot) Chat:** افتح [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) واطرح:
-> - "كيف يمنع RAG الهلوسة في الذكاء الاصطناعي مقارنة باستخدام بيانات تدريب النموذج؟"
-> - "ما الفرق بين هذا النهج السهل وخط أنابيب RAG مخصص؟"
-> - "كيف أقوم بتوسيعه ليتعامل مع مستندات متعددة أو قواعد معرفة أكبر؟"
-
-**الذكاء الاصطناعي المسؤول** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-ابنِ أمان الذكاء الاصطناعي مع دفاع متعدد الطبقات. تعرض هذه التجربة طبقتين من الحماية تعملان معًا:
-
-**الجزء 1: قواعد حماية الإدخال في LangChain4j** - تمنع المطالبات الخطرة قبل وصولها إلى LLM. أنشئ قواعد حماية مخصصة تتحقق من كلمات أو أنماط محظورة. تعمل هذه في كودك، لذا فهي سريعة ومجانية.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**الجزء 2: فلاتر السلامة لدى المزود** - لدى نماذج GitHub مرشحات مدمجة تلتقط ما قد تفوته قواعد الحماية لديك. سترى حجبًا صارمًا (أخطاء HTTP 400) للانتهاكات الجسيمة والرفض اللطيف حيث يرفض الذكاء الاصطناعي بأدب.
-
-> **🤖 جرّب مع [GitHub Copilot](https://github.com/features/copilot) Chat:** افتح [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) واطرح:
-> - "ما هو InputGuardrail وكيف أصنع واحدًا بنفسي؟"
-> - "ما الفرق بين الحجب الصارم والرفض اللطيف؟"
-> - "لماذا نستخدم كلًا من قواعد الحماية وفلاتر المزود معًا؟"
-
-## الخطوات التالية
-
-**الوحدة التالية:** [01-introduction - البدء مع LangChain4j](../01-introduction/README.md)
-
----
-
-**التنقل:** [← العودة إلى الرئيسية](../README.md) | [التالي: الوحدة 01 - مقدمة →](../01-introduction/README.md)
-
----
-
-## استكشاف الأخطاء وإصلاحها
-
-### بناء Maven لأول مرة
-
-**المشكلة**: يأخذ الأمر `mvn clean compile` أو `mvn package` الأول وقتًا طويلاً (10-15 دقيقة)
-
-**السبب**: يحتاج Maven إلى تنزيل جميع اعتمادات المشروع (Spring Boot، مكتبات LangChain4j، مجموعات Azure SDK، إلخ) في البناء الأول.
-
-**الحل**: هذا سلوك طبيعي. ستكون عمليات البناء اللاحقة أسرع بكثير لأن الاعتمادات مخزنة محليًا. يعتمد وقت التنزيل على سرعة الشبكة الخاصة بك.
-
-### صياغة أوامر Maven في PowerShell
-
-**المشكلة**: تفشل أوامر Maven بخطأ `Unknown lifecycle phase ".mainClass=..."`
-**السبب**: يقوم PowerShell بتفسير `=` كعامل تخصيص متغير، مما يكسر بناء جملة خصائص Maven
-
-**الحل**: استخدم عامل إيقاف التحليل `--%` قبل أمر Maven:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-عامل `--%` يخبر PowerShell بتمرير جميع الوسائط المتبقية حرفيًا إلى Maven دون تفسير.
-
-### عرض الرموز التعبيرية في Windows PowerShell
-
-**المشكلة**: تظهر استجابات الذكاء الاصطناعي حروفًا تالفة (مثل `????` أو `â??`) بدلاً من الرموز التعبيرية في PowerShell
-
-**السبب**: الترميز الافتراضي لـ PowerShell لا يدعم الرموز التعبيرية بنمط UTF-8
-
-**الحل**: شغّل هذا الأمر قبل تنفيذ تطبيقات Java:
-```cmd
-chcp 65001
-```
-
-هذا يجبر الترميز UTF-8 في الطرفية. بدلاً من ذلك، استخدم Windows Terminal الذي يدعم Unicode بشكل أفضل.
-
-### تصحيح أخطاء استدعاءات API
-
-**المشكلة**: أخطاء مصادقة، حدود معدلات، أو استجابات غير متوقعة من نموذج الذكاء الاصطناعي
-
-**الحل**: تتضمن الأمثلة `.logRequests(true)` و `.logResponses(true)` لعرض استدعاءات API في الكونسول. هذا يساعد في معالجة أخطاء المصادقة، حدود المعدلات، أو الاستجابات غير المتوقعة. قم بإزالة هذه العلامات في بيئة الإنتاج لتقليل ضوضاء السجل.
-
----
-
-
-**تنويه**:
-تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). على الرغم من سعينا لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. ينبغي اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق به. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
-
\ No newline at end of file
diff --git a/translations/ar/01-introduction/README.md b/translations/ar/01-introduction/README.md
index 9bc40d080..72ad51947 100644
--- a/translations/ar/01-introduction/README.md
+++ b/translations/ar/01-introduction/README.md
@@ -1,87 +1,87 @@
-# الوحدة 01: بدء العمل مع LangChain4j
+# الوحدة 01: البدء مع LangChain4j
## جدول المحتويات
-- [عرض الفيديو](../../../01-introduction)
-- [ما ستتعلمه](../../../01-introduction)
-- [المتطلبات الأساسية](../../../01-introduction)
-- [فهم المشكلة الأساسية](../../../01-introduction)
-- [فهم الرموز](../../../01-introduction)
-- [كيفية عمل الذاكرة](../../../01-introduction)
-- [كيفية استخدام هذا مع LangChain4j](../../../01-introduction)
-- [نشر بنية تحتية Azure OpenAI](../../../01-introduction)
-- [تشغيل التطبيق محليًا](../../../01-introduction)
-- [استخدام التطبيق](../../../01-introduction)
- - [الدردشة بدون حالة (اللوحة اليسرى)](../../../01-introduction)
- - [الدردشة مع الحالة (اللوحة اليمنى)](../../../01-introduction)
-- [الخطوات التالية](../../../01-introduction)
-
-## عرض الفيديو
+- [جولة فيديو](#جولة-فيديو)
+- [ما ستتعلمه](#ما-ستتعلمه)
+- [المتطلبات المسبقة](#المتطلبات-المسبقة)
+- [فهم المشكلة الأساسية](#فهم-المشكلة-الأساسية)
+- [فهم الرموز](#فهم-الرموز)
+- [كيفية عمل الذاكرة](#كيفية-عمل-الذاكرة)
+- [كيفية استخدام هذا لـ LangChain4j](#كيفية-استخدام-هذا-لـ-langchain4j)
+- [نشر بنية Azure OpenAI التحتية](#نشر-بنية-azure-openai-التحتية)
+- [تشغيل التطبيق محليًا](#تشغيل-التطبيق-محليًا)
+- [استخدام التطبيق](#استخدام-التطبيق)
+ - [دردشة بدون حالة (اللوحة اليسرى)](#دردشة-بدون-حالة-اللوحة-اليسرى)
+ - [دردشة بحالة (اللوحة اليمنى)](#دردشة-بحالة-اللوحة-اليمنى)
+- [الخطوات التالية](#الخطوات-التالية)
+
+## جولة فيديو
شاهد هذه الجلسة المباشرة التي تشرح كيفية البدء مع هذه الوحدة:
-
+
## ما ستتعلمه
-في البداية السريعة، استخدمت نماذج GitHub لإرسال المطالبات، واستدعاء الأدوات، وبناء خط أنابيب RAG، واختبار الضوابط الأمنية. أظهرت تلك العروض ما هو ممكن — الآن ننتقل إلى Azure OpenAI وGPT-5.2 ونبدأ في بناء تطبيقات أسلوب الإنتاج. تركز هذه الوحدة على الذكاء الاصطناعي الحواري الذي يتذكر السياق ويحافظ على الحالة — المفاهيم التي استخدمتها نماذج البداية السريعة خلف الكواليس ولكنها لم تشرحها.
+هذه هي نقطة البداية الخاصة بك مع LangChain4j و Azure OpenAI. نبدأ بالأساسيات ونبدأ ببناء تطبيقات بأسلوب الإنتاج. تركز هذه الوحدة على الذكاء الاصطناعي الحواري الذي يتذكر السياق ويحافظ على الحالة — المفاهيم الأساسية التي تبني عليها كل الوحدات اللاحقة.
-سنستخدم GPT-5.2 من Azure OpenAI طوال هذا الدليل لأن قدراته المتقدمة على الاستدلال تجعل سلوك الأنماط المختلفة أكثر وضوحًا. عندما تضيف الذاكرة، سترى الفرق بوضوح. هذا يجعل من الأسهل فهم ما يقدمه كل مكون لتطبيقك.
+سنستخدم GPT-5.2 من Azure OpenAI في جميع أنحاء هذا الدليل لأن قدراته المتقدمة في الاستدلال تجعل سلوك الأنماط المختلفة أكثر وضوحًا. عند إضافة الذاكرة، سترى الفرق بوضوح. هذا يجعل من الأسهل فهم ما يضيفه كل مكون إلى تطبيقك.
-ستبني تطبيقًا واحدًا يعرض كلا النمطين:
+ستبني تطبيقًا واحدًا يوضح كلا النمطين:
-**الدردشة بدون حالة** - كل طلب مستقل. النموذج لا يملك ذاكرة عن الرسائل السابقة. هذا هو النمط الذي استخدمته في البداية السريعة.
+**الدردشة بدون حالة** - كل طلب مستقل. النموذج لا يتذكر الرسائل السابقة. هذه هي أبسط نقطة بداية.
-**المحادثة مع الحالة** - كل طلب يتضمن تاريخ المحادثة. النموذج يحتفظ بالسياق عبر عدة جولات. هذا ما تتطلبه تطبيقات الإنتاج.
+**المحادثة بحالة** - كل طلب يشمل تاريخ المحادثة. النموذج يحافظ على السياق عبر عدة تبادلات. هذا ما تتطلبه تطبيقات الإنتاج.
-## المتطلبات الأساسية
+## المتطلبات المسبقة
-- اشتراك Azure مع وصول إلى Azure OpenAI
+- اشتراك في Azure مع إمكانية الوصول إلى Azure OpenAI
- Java 21، Maven 3.9+
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
-> **ملاحظة:** Java وMaven وAzure CLI وAzure Developer CLI (azd) مثبتة مسبقًا في الحاوية التطويرية المقدمة.
+> **ملاحظة:** Java و Maven و Azure CLI و Azure Developer CLI (azd) مثبتة مسبقًا في حاوية التطوير المقدمة.
-> **ملاحظة:** تستخدم هذه الوحدة GPT-5.2 على Azure OpenAI. التهيئة تتم تلقائيًا عبر `azd up` - لا تقم بتعديل اسم النموذج في الكود.
+> **ملاحظة:** تستخدم هذه الوحدة GPT-5.2 على Azure OpenAI. يتم تكوين النشر تلقائيًا عبر `azd up` - لا تقم بتعديل اسم النموذج في الشفرة.
## فهم المشكلة الأساسية
-نماذج اللغة عديمة الحالة. كل استدعاء API مستقل. إذا أرسلت "اسمي جون" ثم سألت "ما اسمي؟"، النموذج لا يعلم أنك قدمت نفسك للتو. يعامل كل طلب كما لو أنها أول محادثة تجريها.
+نماذج اللغة لا تحتفظ بالحالة. كل استدعاء API مستقل. إذا أرسلت "اسمي جون" ثم سألت "ما اسمي؟"، فلا يعلم النموذج أنك قدمت نفسك للتو. يعامل كل طلب كما لو كان أول محادثة تجريها على الإطلاق.
-هذا جيد لأسئلة وأجوبة بسيطة لكنه غير مفيد للتطبيقات الحقيقية. تحتاج روبوتات خدمة العملاء إلى تذكر ما قلته لهم. المساعدون الشخصيون يحتاجون إلى السياق. أي محادثة متعددة الجولات تتطلب ذاكرة.
+هذا مقبول للأسئلة البسيطة والأجوبة لكنه غير مفيد للتطبيقات الحقيقية. بحاجة روبوتات خدمة العملاء لتذكر ما قلته لهم. المساعدون الشخصيون يحتاجون للسياق. أي محادثة متعددة التناوب تتطلب ذاكرة.
-يوضح المخطط التالي الفرق بين النهجين — على اليسار، استدعاء بدون حالة ينسى اسمك؛ وعلى اليمين، استدعاء مع الحالة مدعوم بـ ChatMemory التي تتذكره.
+الرسم التوضيحي التالي يقارن بين النهجين — على اليسار، استدعاء بدون حالة ينسى اسمك؛ وعلى اليمين، استدعاء بحالة مدعوم بـ ChatMemory يتذكره.
-
+
-*الفرق بين المحادثات بدون حالة (استدعاءات مستقلة) والمحادثات مع حالة (مدركة للسياق)*
+*الفرق بين المحادثات بدون حالة (استدعاءات مستقلة) وبحالة (مدركة للسياق)*
## فهم الرموز
-قبل الخوض في المحادثات، من المهم فهم الرموز - الوحدات الأساسية للنص التي تعالجها نماذج اللغة:
+قبل الخوض في المحادثات، من المهم فهم الرموز — وحدات النص الأساسية التي تعالجها نماذج اللغة:
-*مثال على كيفية تقسيم النص إلى رموز - "أحب الذكاء الاصطناعي!" تصبح 4 وحدات معالجة منفصلة*
+*مثال على كيفية تقسيم النص إلى رموز - "I love AI!" تصبح 4 وحدات معالجة منفصلة*
-الرموز هي كيفية قياس نماذج الذكاء الاصطناعي ومعالجتها للنص. الكلمات، علامات الترقيم، وحتى الفراغات يمكن أن تكون رموزًا. لدى نموذجك حد لعدد الرموز التي يمكنه معالجتها مرة واحدة (400,000 لـ GPT-5.2، مع ما يصل إلى 272,000 رمز إدخال و128,000 رمز إخراج). يساعد فهم الرموز في إدارة طول المحادثة والتكاليف.
+الرموز هي كيفية قياس ومعالجة نماذج الذكاء الاصطناعي للنص. الكلمات، علامات الترقيم، وحتى المساحات قد تكون رموزًا. للنموذج حد أقصى لعدد الرموز التي يمكنه معالجتها مرة واحدة (400,000 لـ GPT-5.2، مع ما يصل إلى 272,000 رمز إدخال و 128,000 رمز إخراج). فهم الرموز يساعدك على إدارة طول المحادثة والتكاليف.
## كيفية عمل الذاكرة
-تحل ذاكرة الدردشة مشكلة عديم الحالة من خلال الاحتفاظ بتاريخ المحادثة. قبل إرسال طلبك للنموذج، يقوم الإطار بإضافة الرسائل السابقة ذات الصلة في البداية. عندما تسأل "ما اسمي؟"، يرسل النظام فعليًا كامل تاريخ المحادثة، مما يسمح للنموذج برؤية أنك قلت سابقًا "اسمي جون."
+تحل ذاكرة الدردشة مشكلة عدم الاحتفاظ بالحالة من خلال الحفاظ على تاريخ المحادثة. قبل إرسال طلبك إلى النموذج، يقوم الإطار بإضافة الرسائل السابقة ذات الصلة في البداية. عندما تسأل "ما اسمي؟"، يرسل النظام فعليًا تاريخ المحادثة بالكامل، مما يسمح للنموذج برؤية أنك قلت سابقًا "اسمي جون".
-يوفر LangChain4j تنفيذات ذاكرة تتعامل مع هذا تلقائيًا. تختار عدد الرسائل التي تحتفظ بها ويدير الإطار نافذة السياق. يوضح المخطط أدناه كيف يحافظ MessageWindowChatMemory على نافذة انزلاقية للرسائل الحديثة.
+يوفر LangChain4j تطبيقات للذاكرة تتعامل مع هذا تلقائيًا. تختار عدد الرسائل التي تريد الاحتفاظ بها ويتولى الإطار إدارة نافذة السياق. يوضح الرسم أدناه كيف يحافظ MessageWindowChatMemory على نافذة منزلقة من الرسائل الأخيرة.
-*يحافظ MessageWindowChatMemory على نافذة منزلقة من الرسائل الحديثة، ويتخلص تلقائيًا من الرسائل القديمة*
+*MessageWindowChatMemory يحافظ على نافذة منزلقة من الرسائل الأخيرة، ويحذف الرسائل القديمة تلقائيًا*
-## كيفية استخدام هذا مع LangChain4j
+## كيفية استخدام هذا لـ LangChain4j
-توسّع هذه الوحدة البداية السريعة من خلال دمج Spring Boot وإضافة ذاكرة المحادثة. إليك كيف تتجمع القطع معًا:
+تدمج هذه الوحدة Spring Boot وتضيف ذاكرة المحادثة. هكذا تتكامل القطع معًا:
-**المكتبات:** أضف مكتبتين لـ LangChain4j:
+**التبعيات** - أضف مكتبتين من LangChain4j:
```xml
@@ -94,7 +94,7 @@
```
-**نموذج الدردشة** - قم بتكوين Azure OpenAI كـ bean في Spring ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+**نموذج الدردشة** - قم بتكوين Azure OpenAI كعنصر Spring bean ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -109,9 +109,9 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-يقوم المنشئ بقراءة بيانات الاعتماد من متغيرات البيئة التي يضبطها `azd up`. تعيين `baseUrl` إلى نقطة نهاية Azure يجعله يعمل مع Azure OpenAI.
+يقرأ المُنشئ بيانات الاعتماد من متغيرات البيئة التي يتم إعدادها بواسطة `azd up`. تعيين `baseUrl` لنقطة نهاية Azure الخاصة بك يجعل عميل OpenAI يعمل مع Azure OpenAI.
-**ذاكرة المحادثة** - تتبع سجل الدردشة باستخدام MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
+**ذاكرة المحادثة** - تتبع سجل الدردشة مع MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -124,21 +124,21 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-قم بإنشاء ذاكرة مع `withMaxMessages(10)` للاحتفاظ بآخر 10 رسائل. أضف رسائل المستخدم والذكاء الاصطناعي باستخدام التغليف النوعي: `UserMessage.from(text)` و `AiMessage.from(text)`. استرجع التاريخ بـ `memory.messages()` وأرسله للنموذج. يخزن الخادم حالات ذاكرة منفصلة لكل معرف محادثة، مما يسمح لعدة مستخدمين بالدردشة في نفس الوقت.
+أنشئ الذاكرة مع `withMaxMessages(10)` للاحتفاظ بآخر 10 رسائل. أضف رسائل المستخدم والذكاء الاصطناعي باستخدام الأغلفة المكتوبة: `UserMessage.from(text)` و `AiMessage.from(text)`. استرجع التاريخ بـ `memory.messages()` وأرسله إلى النموذج. يخزن الخدمة مثيلات ذاكرة منفصلة لكل معرف محادثة، مما يسمح لعدة مستخدمين بالدردشة في نفس الوقت.
> **🤖 جرب مع [GitHub Copilot](https://github.com/features/copilot) Chat:** افتح [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) واسأل:
-> - "كيف يقرر MessageWindowChatMemory أي الرسائل يتم إسقاطها عندما تمتلئ النافذة؟"
+> - "كيف يقرر MessageWindowChatMemory أي الرسائل يجب حذفها عندما تمتلئ النافذة؟"
> - "هل يمكنني تنفيذ تخزين ذاكرة مخصص باستخدام قاعدة بيانات بدلاً من الذاكرة الداخلية؟"
-> - "كيف يمكنني إضافة التلخيص لضغط تاريخ المحادثة القديم؟"
+> - "كيف يمكنني إضافة تلخيص لضغط تاريخ المحادثة القديم؟"
-تتخطى نقطة النهاية للدردشة بدون حالة الذاكرة تمامًا - فقط `chatModel.chat(prompt)` مثل البداية السريعة. تضيف نقطة النهاية ذات الحالة الرسائل إلى الذاكرة، تسترجع التاريخ، وتشمل ذلك السياق مع كل طلب. نفس تهيئة النموذج، أنماط مختلفة.
+نقطة نهاية الدردشة بدون حالة تتخطى الذاكرة تمامًا - فقط `chatModel.chat(prompt)` كما في البداية السريعة. نقطة نهاية الدردشة بحالة تضيف الرسائل إلى الذاكرة، تسترجع التاريخ، وتضمّن هذا السياق مع كل طلب. نفس تكوين النموذج، أنماط مختلفة.
-## نشر بنية تحتية Azure OpenAI
+## نشر بنية Azure OpenAI التحتية
**Bash:**
```bash
cd 01-introduction
-azd up # اختر الاشتراك والموقع (يفضل eastus2)
+azd up # اختر الاشتراك والموقع (يوصى بـ eastus2)
```
**PowerShell:**
@@ -147,28 +147,28 @@ cd 01-introduction
azd up # اختر الاشتراك والموقع (يفضل eastus2)
```
-> **ملاحظة:** إذا واجهت خطأ مهلة (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`)، ما عليك سوى تشغيل `azd up` مرة أخرى. قد تكون موارد Azure لا تزال تُنشأ في الخلفية، والمحاولة مجددًا تسمح بإكمال النشر بمجرد وصول الموارد إلى حالة نهائية.
+> **ملاحظة:** إذا واجهت خطأ في نفاد المهلة (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`)، فقط شغّل `azd up` مرة أخرى. قد لا تزال موارد Azure في طور الإعداد في الخلفية، وإعادة المحاولة تسمح للنشر بالإكمال بمجرد وصول الموارد إلى حالة نهائية.
سيقوم هذا بـ:
-1. نشر مورد Azure OpenAI مع نماذج GPT-5.2 وtext-embedding-3-small
+1. نشر مورد Azure OpenAI مع نموذج GPT-5.2 ونماذج text-embedding-3-small
2. إنشاء ملف `.env` تلقائيًا في جذر المشروع مع بيانات الاعتماد
3. إعداد جميع متغيرات البيئة المطلوبة
-**هل تواجه مشاكل في النشر؟** انظر إلى [ملف README للبنية التحتية](infra/README.md) للحصول على حل مشاكل تفصيلي بما في ذلك تعارض أسماء النطاقات الفرعية، خطوات النشر اليدوي من بوابة Azure، وإرشادات تكوين النموذج.
+**هل تواجه مشاكل في النشر؟** اطلع على [ملف README للبنية التحتية](infra/README.md) للحصول على حلول تفصيلية تشمل تعارض أسماء النطاقات الفرعية، خطوات النشر اليدوي عبر بوابة Azure، وإرشادات تكوين النموذج.
**تحقق من نجاح النشر:**
**Bash:**
```bash
-cat ../.env # يجب أن يُظهر AZURE_OPENAI_ENDPOINT، API_KEY، إلخ.
+cat ../.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT و API_KEY وما إلى ذلك.
```
**PowerShell:**
```powershell
-Get-Content ..\.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT، API_KEY، إلخ.
+Get-Content ..\.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT وAPI_KEY، إلخ.
```
-> **ملاحظة:** يقوم الأمر `azd up` تلقائيًا بإنشاء ملف `.env`. إذا احتجت إلى تحديثه لاحقًا، يمكنك تحرير ملف `.env` يدويًا أو إعادة إنشائه بتشغيل:
+> **ملاحظة:** يولد أمر `azd up` ملف `.env` تلقائيًا. إذا احتجت لتحديثه لاحقًا، يمكنك إما تعديل ملف `.env` يدويًا أو إعادة إنشائه بتشغيل:
>
> **Bash:**
> ```bash
@@ -186,11 +186,11 @@ Get-Content ..\.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT، API_KEY، إ
**تحقق من النشر:**
-تأكد من وجود ملف `.env` في الدليل الجذر مع بيانات اعتماد Azure. شغّل هذا من دليل الوحدة (`01-introduction/`):
+تأكد من وجود ملف `.env` في الدليل الجذر مع بيانات اعتماد Azure. شغل هذا الأمر من دليل الوحدة (`01-introduction/`):
**Bash:**
```bash
-cat ../.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT و API_KEY و DEPLOYMENT
+cat ../.env # يجب أن تظهر AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT
```
**PowerShell:**
@@ -200,39 +200,39 @@ Get-Content ..\.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT و API_KEY و
**ابدأ التطبيقات:**
-**الخيار 1: استخدام لوحة تحكم Spring Boot (موصى لمستخدمي VS Code)**
+**الخيار 1: استخدام لوحة تحكم Spring Boot (موصى به لمستخدمي VS Code)**
-تشمل الحاوية التطويرية امتداد لوحة تحكم Spring Boot، الذي يوفر واجهة بصرية لإدارة جميع تطبيقات Spring Boot. يمكنك العثور عليه في شريط النشاط على الجانب الأيسر من VS Code (ابحث عن أيقونة Spring Boot).
+تتضمن حاوية التطوير ملحق لوحة تحكم Spring Boot، الذي يوفر واجهة بصرية لإدارة كل تطبيقات Spring Boot. يمكنك العثور عليه في شريط النشاط على الجانب الأيسر من VS Code (ابحث عن أيقونة Spring Boot).
من لوحة تحكم Spring Boot، يمكنك:
-- رؤية جميع تطبيقات Spring Boot المتاحة في بيئة العمل
+- رؤية جميع تطبيقات Spring Boot المتوفرة في مساحة العمل
- بدء/إيقاف التطبيقات بنقرة واحدة
- عرض سجلات التطبيق في الوقت الحقيقي
- مراقبة حالة التطبيق
-فقط انقر على زر التشغيل بجانب "introduction" لبدء هذه الوحدة، أو ابدأ كل الوحدات مرة واحدة.
+انقر ببساطة على زر التشغيل بجوار "introduction" لبدء هذه الوحدة، أو ابدأ جميع الوحدات دفعة واحدة.
-*لوحة تحكم Spring Boot في VS Code — ابدأ، أوقف، وراقب جميع الوحدات من مكان واحد*
+*لوحة تحكم Spring Boot في VS Code — ابدأ، أوقف، وراقب كل الوحدات من مكان واحد*
**الخيار 2: استخدام سكريبتات الشل**
-ابدأ كل تطبيقات الويب (الوحدات 01-04):
+شغل كل تطبيقات الويب (الوحدات 01-04):
**Bash:**
```bash
-cd .. # من الدليل الجذري
+cd .. # من الدليل الجذر
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # من الدليل الجذر
+cd .. # من الدليل الجذري
.\start-all.ps1
```
-أو ابدأ فقط هذه الوحدة:
+أو شغل هذه الوحدة فقط:
**Bash:**
```bash
@@ -246,9 +246,9 @@ cd 01-introduction
.\start.ps1
```
-كلا السكريبتين يقومان بتحميل متغيرات البيئة تلقائيًا من ملف .env في الجذر وسيبنيان ملفات JAR إذا لم تكن موجودة.
+تقوم كلا السكريبتات بتحميل متغيرات البيئة تلقائيًا من ملف `.env` الجذري وستبني ملفات JAR إذا لم تكن موجودة.
-> **ملاحظة:** إذا فضلت بناء جميع الوحدات يدويًا قبل البدء:
+> **ملاحظة:** إذا كنت تفضل بناء كل الوحدات يدويًا قبل التشغيل:
>
> **Bash:**
> ```bash
@@ -270,53 +270,53 @@ cd 01-introduction
```bash
./stop.sh # هذا الوحدة فقط
# أو
-cd .. && ./stop-all.sh # جميع الوحدات
+cd .. && ./stop-all.sh # كل الوحدات
```
**PowerShell:**
```powershell
-.\stop.ps1 # هذا الموديول فقط
+.\stop.ps1 # هذا الوحدة فقط
# أو
-cd ..; .\stop-all.ps1 # جميع الموديولات
+cd ..; .\stop-all.ps1 # جميع الوحدات
```
## استخدام التطبيق
-يوفر التطبيق واجهة ويب تحتوي على تنفيذين للدردشة جنبًا إلى جنب.
+يقدم التطبيق واجهة ويب مع تنفيذين للدردشة جنبًا إلى جنب.
-
+
-*لوحة تحكم تعرض كل من الدردشة البسيطة (بدون حالة) والدردشة الحواريّة (مع حالة)*
+*لوحة تحكم تعرض خيارا الدردشة البسيطة (بدون حالة) والدردشة الحواريّة (بحالة)*
-### الدردشة بدون حالة (اللوحة اليسرى)
+### دردشة بدون حالة (اللوحة اليسرى)
-جرّب هذا أولاً. اسأل "اسمي جون" ثم اسأل فورًا "ما اسمي؟" لن يتذكر النموذج لأن كل رسالة مستقلة. يوضح هذا المشكلة الأساسية مع دمج نماذج اللغة البسيطة — لا يوجد سياق للمحادثة.
+جرب هذا أولاً. اسأل "اسمي جون" ثم اسأل فورًا "ما اسمي؟" لن يتذكر النموذج لأنه كل رسالة مستقلة. هذا يوضح المشكلة الأساسية في دمج نموذج اللغة الأساسي — لا سياق للمحادثة.
-
+
*الذكاء الاصطناعي لا يتذكر اسمك من الرسالة السابقة*
-### الدردشة مع الحالة (اللوحة اليمنى)
+### دردشة بحالة (اللوحة اليمنى)
-الآن جرّب نفس التسلسل هنا. اسأل "اسمي جون" ثم "ما اسمي؟" هذه المرة يتذكر. الفرق هو MessageWindowChatMemory - فهي تحافظ على تاريخ المحادثة وتضمّنه مع كل طلب. هكذا يعمل الذكاء الاصطناعي الحواري في الإنتاج.
+الآن جرب نفس التسلسل هنا. اسأل "اسمي جون" ثم "ما اسمي؟" هذه المرة يتذكر. الفرق هو MessageWindowChatMemory — يحافظ على سجل المحادثة ويضمّنه مع كل طلب. هكذا يعمل الذكاء الاصطناعي الحواري في الإنتاج.
-
+
-*الذكاء الاصطناعي يتذكر اسمك من سابق المحادثة*
+*الذكاء الاصطناعي يتذكر اسمك من بداية المحادثة*
-تستخدم اللوحتان نفس نموذج GPT-5.2. الاختلاف الوحيد هو الذاكرة. هذا يوضح ما تضيفه الذاكرة إلى تطبيقك ولماذا هي أساسية لحالات الاستخدام الحقيقية.
+تستخدم كلتا اللوحتين نفس نموذج GPT-5.2. الفرق الوحيد هو الذاكرة. هذا يوضح ما تضيفه الذاكرة لتطبيقك ولماذا هي ضرورية لحالات الاستخدام الحقيقية.
## الخطوات التالية
-**الوحدة التالية:** [02-prompt-engineering - هندسة المطالبات مع GPT-5.2](../02-prompt-engineering/README.md)
+**الوحدة التالية:** [02-prompt-engineering - هندسة المُطالبات مع GPT-5.2](../02-prompt-engineering/README.md)
---
-**التنقل:** [← السابق: الوحدة 00 - البداية السريعة](../00-quick-start/README.md) | [عودة إلى الرئيسي](../README.md) | [التالي: الوحدة 02 - هندسة المطالبات →](../02-prompt-engineering/README.md)
+**التنقل:** [← العودة إلى الرئيسية](../README.md) | [التالي: الوحدة 02 - هندسة المُطالبات →](../02-prompt-engineering/README.md)
---
-**تنويه**:
-تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). على الرغم من سعينا لتحقيق الدقة، يُرجى العلم بأن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. بالنسبة للمعلومات الهامة، يُنصح بالاعتماد على ترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
+**تنويه**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/02-prompt-engineering/README.md b/translations/ar/02-prompt-engineering/README.md
index d8d70790b..2cffb5415 100644
--- a/translations/ar/02-prompt-engineering/README.md
+++ b/translations/ar/02-prompt-engineering/README.md
@@ -2,50 +2,50 @@
## جدول المحتويات
-- [جولة الفيديو](../../../02-prompt-engineering)
-- [ما الذي ستتعلمه](../../../02-prompt-engineering)
-- [المتطلبات المسبقة](../../../02-prompt-engineering)
-- [فهم هندسة المطالبات](../../../02-prompt-engineering)
-- [أساسيات هندسة المطالبات](../../../02-prompt-engineering)
- - [المطالبة بدون أمثلة](../../../02-prompt-engineering)
- - [المطالبة مع بعض الأمثلة](../../../02-prompt-engineering)
- - [سلسلة التفكير](../../../02-prompt-engineering)
- - [المطالبة المعتمدة على الدور](../../../02-prompt-engineering)
- - [قوالب المطالبات](../../../02-prompt-engineering)
-- [الأنماط المتقدمة](../../../02-prompt-engineering)
-- [تشغيل التطبيق](../../../02-prompt-engineering)
-- [لقطات شاشة للتطبيق](../../../02-prompt-engineering)
-- [استكشاف الأنماط](../../../02-prompt-engineering)
- - [حماس منخفض مقابل حماس مرتفع](../../../02-prompt-engineering)
- - [تنفيذ المهمات (مقدمات الأدوات)](../../../02-prompt-engineering)
- - [كود التأمل الذاتي](../../../02-prompt-engineering)
- - [التحليل المنظم](../../../02-prompt-engineering)
- - [الدردشة متعددة الأدوار](../../../02-prompt-engineering)
- - [التفكير خطوة بخطوة](../../../02-prompt-engineering)
- - [الإخراج المقيد](../../../02-prompt-engineering)
-- [ما الذي تتعلمه حقًا](../../../02-prompt-engineering)
-- [الخطوات التالية](../../../02-prompt-engineering)
-
-## جولة الفيديو
-
-شاهد هذه الجلسة الحية التي تشرح كيفية البدء مع هذه الوحدة:
+- [استعراض الفيديو](#استعراض-الفيديو)
+- [ما الذي ستتعلمه](#ما-الذي-ستتعلمه)
+- [المتطلبات الأساسية](#المتطلبات-الأساسية)
+- [فهم هندسة المطالبات](#فهم-هندسة-المطالبات)
+- [أساسيات هندسة المطالبات](#أساسيات-هندسة-المطالبات)
+ - [المطالبة بدون أمثلة](#المطالبة-بدون-أمثلة)
+ - [المطالبة مع بعض الأمثلة](#المطالبة-مع-بعض-الأمثلة)
+ - [سلسلة التفكير](#سلسلة-التفكير)
+ - [المطالبة بناءً على الدور](#المطالبة-بناءً-على-الدور)
+ - [قوالب المطالبات](#قوالب-المطالبات)
+- [الأنماط المتقدمة](#الأنماط-المتقدمة)
+- [تشغيل التطبيق](#تشغيل-التطبيق)
+- [لقطات شاشة للتطبيق](#لقطات-شاشة-للتطبيق)
+- [استكشاف الأنماط](#استكشاف-الأنماط)
+ - [الحماس المنخفض مقابل المرتفع](#الحماسة-المنخفضة-مقابل-الحماسة-العالية)
+ - [تنفيذ المهمة (مقدمات الأدوات)](#تنفيذ-المهام-مقدمات-الأدوات)
+ - [الكود التأملي الذاتي](#الكود-العاكس-للذات)
+ - [التحليل المنظم](#التحليل-المنظم)
+ - [الدردشة متعددة الأدوار](#الدردشة-متعددة-الأدوار)
+ - [التفكير خطوة بخطوة](#التفكير-خطوة-بخطوة)
+ - [الناتج المقيد](#مخرجات-مقيدة)
+- [ما الذي تتعلمه حقًا](#ما-تتعلمه-حقًا)
+- [الخطوات التالية](#الخطوات-التالية)
+
+## استعراض الفيديو
+
+شاهد هذا الجلسة المباشرة التي تشرح كيفية البدء مع هذه الوحدة:
## ما الذي ستتعلمه
-يوفر الرسم البياني التالي نظرة عامة على الموضوعات والمهارات الرئيسية التي ستطورها في هذه الوحدة — من تقنيات تحسين المطالبات إلى سير العمل خطوة بخطوة الذي ستتبعه.
+يوفر المخطط التالي نظرة عامة على الموضوعات والمهارات الأساسية التي ستطورها في هذه الوحدة — من تقنيات تحسين المطالبات إلى سير العمل خطوة بخطوة الذي ستتبعه.
-في الوحدات السابقة، استكشفت التفاعلات الأساسية مع LangChain4j باستخدام نماذج GitHub ورأيت كيف تُمكّن الذاكرة الذكاء الاصطناعي المحادثي مع Azure OpenAI. الآن سنركز على كيفية طرح الأسئلة — أي المطالبات نفسها — باستخدام GPT-5.2 من Azure OpenAI. الطريقة التي تبني بها مطالباتك تؤثر بشكل كبير على جودة الإجابات التي تحصل عليها. نبدأ بمراجعة تقنيات المطالبة الأساسية، ثم ننتقل إلى ثمانية أنماط متقدمة تستفيد بالكامل من قدرات GPT-5.2.
+في الوحدة السابقة، رأيت كيف تمكّن الذاكرة الذكاء الاصطناعي الحواري مع Azure OpenAI. الآن سنركز على كيفية طرح الأسئلة — أي المطالبات نفسها — باستخدام GPT-5.2 من Azure OpenAI. الطريقة التي تبني بها مطالباتك تؤثر بشكل كبير على جودة الردود التي تحصل عليها. نبدأ بمراجعة تقنيات المطالبات الأساسية، ثم ننتقل إلى ثمانية أنماط متقدمة تستغل إمكانيات GPT-5.2 بالكامل.
-نستخدم GPT-5.2 لأنه يقدم تحكمًا في التفكير - يمكنك إخبار النموذج بكمية التفكير المطلوبة قبل الإجابة. هذا يجعل استراتيجيات المطالبة المختلفة أكثر وضوحًا ويساعدك على فهم متى تستخدم كل طريقة. سنستفيد أيضًا من حدود المعدل الأقل لـ GPT-5.2 في Azure مقارنة بنماذج GitHub.
+سنستخدم GPT-5.2 لأنه يقدم تحكمًا في المنطق — يمكنك إخبار النموذج بكمية التفكير التي يجب أن يقوم بها قبل الإجابة. هذا يجعل استراتيجيات المطالبة المختلفة أكثر وضوحًا ويساعدك على فهم متى تستخدم كل نهج.
-## المتطلبات المسبقة
+## المتطلبات الأساسية
-- إكمال الوحدة 01 (نشر موارد Azure OpenAI)
-- ملف `.env` في الدليل الجذري يحتوي على بيانات اعتماد Azure (تم إنشاؤه بواسطة `azd up` في الوحدة 01)
+- إكمال الوحدة 01 (تم نشر موارد Azure OpenAI)
+- ملف `.env` في الدليل الجذري مع بيانات الاعتماد الخاصة بـ Azure (تم إنشاؤه بواسطة `azd up` في الوحدة 01)
> **ملاحظة:** إذا لم تكمل الوحدة 01، اتبع تعليمات النشر هناك أولاً.
@@ -55,27 +55,27 @@
-هندسة المطالبات تتعلق بتصميم نص الإدخال الذي يعطيك النتائج التي تحتاجها بشكل مستمر. الأمر لا يقتصر على طرح الأسئلة فقط - بل يتعلق بهيكلة الطلبات بحيث يفهم النموذج بالضبط ما تريد وكيفية تقديمه.
+هندسة المطالبات تتعلق بتصميم نص الإدخال الذي يمنحك النتائج التي تحتاجها بشكل متسق. الأمر ليس مجرد طرح أسئلة — بل هو هيكلة الطلبات بحيث يفهم النموذج بالضبط ما تريد وكيفية تقديمه.
-فكر في الأمر كما لو كنت تعطي تعليمات لزميل. "أصلح الخطأ" غامض. "أصلح استثناء المؤشر الخالي في UserService.java السطر 45 بإضافة فحص للقيمة null" محدد. نماذج اللغة تعمل بنفس الطريقة — الدقة والهيكل مهمان.
+فكر في الأمر كما لو كنت تعطي تعليمات لزميل في العمل. "أصلح الخطأ" غامض. "أصلح استثناء المؤشر الخالي في UserService.java في السطر 45 بإضافة فحص القيم الخالية" دقيق. نماذج اللغة تعمل بنفس الطريقة — الدقة والهيكل مهمان.
-يوضح الرسم البياني أدناه كيف يندمج LangChain4j في هذه الصورة — حيث يربط أنماط مطالباتك بالنموذج من خلال الوحدات الأساسية SystemMessage و UserMessage.
+يوضح المخطط أدناه كيف يتناسب LangChain4j مع هذه الصورة — حيث يربط أنماط مطالباتك بالنموذج من خلال وحدات بناء SystemMessage وUserMessage.
-
+
-يجلب LangChain4j البنية التحتية — اتصالات النموذج، الذاكرة، وأنواع الرسائل — في حين أن أنماط المطالبات هي مجرد نص منظم بعناية ترسله عبر هذه البنية التحتية. الوحدات الأساسية الرئيسية هي `SystemMessage` (التي تحدد سلوك وال دور الذكاء الاصطناعي) و`UserMessage` (التي تحمل طلبك الفعلي).
+يوفر LangChain4j البنية التحتية — اتصالات النموذج، الذاكرة، وأنواع الرسائل — بينما أنماط المطالبات هي مجرد نص منظم بعناية ترسله عبر هذه البنية. اللبنات الأساسية الرئيسية هي `SystemMessage` (الذي يحدد سلوك ودور الذكاء الاصطناعي) و `UserMessage` (الذي يحمل طلبك الفعلي).
## أساسيات هندسة المطالبات
-تشكل التقنيات الأساسية الخمسة الموضحة أدناه أساس هندسة المطالبات الفعالة. كل واحدة تعالج جانبًا مختلفًا من كيفية تواصلك مع نماذج اللغة.
+تشكل التقنيات الخمس الأساسية الموضحة أدناه أساس هندسة المطالبات الفعالة. يعالج كل منها جانبًا مختلفًا من كيفية تواصلك مع نماذج اللغة.
-
+
-قبل أن نغوص في الأنماط المتقدمة في هذه الوحدة، دعنا نراجع خمس تقنيات أساسية في المطالبة. إنها اللبنات الأساسية التي يجب أن يعرفها كل مهندس مطالبات. إذا كنت قد عملت بالفعل عبر [وحدة البداية السريعة](../00-quick-start/README.md#2-prompt-patterns)، فقد رأيت هذه التقنيات تعمل — وإليك الإطار المفهومي وراءها.
+قبل الغوص في الأنماط المتقدمة في هذه الوحدة، دعنا نراجع خمس تقنيات تأسيسية للمطالبات. هذه هي اللبنات التي يجب أن يعرفها كل مهندس مطالبات.
### المطالبة بدون أمثلة
-النهج الأبسط: تعطي النموذج تعليمات مباشرة بدون أمثلة. يعتمد النموذج كليًا على تدريبه لفهم وتنفيذ المهمة. يعمل هذا جيدًا للطلبات المباشرة حيث السلوك المتوقع واضح.
+أسهل نهج: أعط النموذج تعليمات مباشرة بدون أمثلة. يعتمد النموذج بالكامل على تدريبه لفهم وتنفيذ المهمة. يعمل هذا جيدًا للطلبات البسيطة حيث السلوك المتوقع واضح.
@@ -84,18 +84,18 @@
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
String response = model.chat(prompt);
-// الاستجابة: "إيجابي"
+// رد: "إيجابي"
```
-
+
**متى تستخدم:** التصنيفات البسيطة، الأسئلة المباشرة، الترجمات، أو أي مهمة يمكن للنموذج التعامل معها بدون توجيه إضافي.
### المطالبة مع بعض الأمثلة
-قدّم أمثلة توضح النمط الذي تريد أن يتبعه النموذج. يتعلم النموذج شكل الإدخال-الإخراج المتوقع من أمثلتك ويطبقه على مدخلات جديدة. هذا يحسن الاتساق بشكل كبير للمهام التي لا يكون فيها النمط أو السلوك المرغوب واضحًا.
+قدِّم أمثلة توضح النمط الذي تريد من النموذج اتباعه. يتعلم النموذج تنسيق الإدخال والإخراج المتوقع من أمثلتك ويطبقه على المدخلات الجديدة. هذا يحسّن الاتساق بشكل كبير للمهام التي يكون فيها التنسيق أو السلوك المطلوب غير واضح.
-*التعلم من الأمثلة — يتعرف النموذج على النمط ويطبقه على مدخلات جديدة*
+*التعلم من الأمثلة — يتعرف النموذج على النمط ويطبقه على المدخلات الجديدة*
```java
String prompt = """
@@ -111,14 +111,14 @@ String prompt = """
""";
String response = model.chat(prompt);
```
-
+
**متى تستخدم:** التصنيفات المخصصة، التنسيق المتسق، المهام الخاصة بالمجال، أو عندما تكون نتائج المطالبة بدون أمثلة غير متسقة.
### سلسلة التفكير
-اطلب من النموذج عرض تفكيره خطوة بخطوة. بدلاً من الانتقال مباشرة إلى إجابة، يقسم النموذج المشكلة ويعمل على كل جزء بشكل صريح. هذا يحسن الدقة في مسائل الرياضيات والمنطق والتفكير متعدد الخطوات.
+اطلب من النموذج عرض تفكيره خطوة بخطوة. بدلاً من القفز مباشرة إلى الإجابة، يكسر النموذج المشكلة ويعمل على كل جزء بشكل صريح. هذا يحسن الدقة في الرياضيات، المنطق، ومهام التفكير متعدد الخطوات.
-
+
*التفكير خطوة بخطوة — تقسيم المشاكل المعقدة إلى خطوات منطقية صريحة*
@@ -132,16 +132,16 @@ String prompt = """
String response = model.chat(prompt);
// يوضح النموذج: ١٥ - ٨ = ٧، ثم ٧ + ١٢ = ١٩ تفاحة
```
-
-**متى تستخدم:** مشاكل الرياضيات، الألغاز المنطقية، تصحيح الأخطاء، أو أي مهمة تحسين فيها عرض عملية التفكير دقة وثقة.
-### المطالبة المعتمدة على الدور
+**متى تستخدم:** مسائل رياضية، ألغاز منطقية، تصحيح الأخطاء، أو أي مهمة حيث يساعد عرض عملية التفكير في تحسين الدقة والثقة.
-حدد شخصية أو دور للذكاء الاصطناعي قبل طرح سؤالك. يوفر هذا سياقًا يشكل نبرة وعمق وتركيز الرد. "مهندس برمجيات" يعطي نصائح مختلفة عن "مطور مبتدئ" أو "مدقق أمني".
+### المطالبة بناءً على الدور
-
+حدد شخصية أو دور للذكاء الاصطناعي قبل طرح سؤالك. هذا يوفر سياقاً يشكل نبرة، عمق، وتركيز الرد. "مهندس برمجيات" يقدم نصائح مختلفة عن "مطور مبتدئ" أو "مدقق أمني".
-*تحديد السياق والشخصية — نفس السؤال قد يحصل على رد مختلف بناءً على الدور المعين*
+
+
+*تحديد السياق والشخصية — نفس السؤال يحصل على رد مختلف بناءً على الدور المعين*
```java
String prompt = """
@@ -156,16 +156,16 @@ String prompt = """
""";
String response = model.chat(prompt);
```
-
-**متى تستخدم:** مراجعة الكود، التعليم، التحليل الخاص بالمجال، أو عندما تحتاج ردودًا مصممة لمستوى خبرة أو منظور معين.
+
+**متى تستخدم:** مراجعات الكود، التدريس، التحليل الخاص بالمجال، أو عندما تحتاج إلى ردود مخصصة لمستوى خبرة أو منظور معين.
### قوالب المطالبات
-أنشئ مطالبات قابلة لإعادة الاستخدام مع متغيرات مكانها. بدلاً من كتابة مطالبة جديدة في كل مرة، عرّف قالبًا مرة واحدة واملأه بقيم مختلفة. يسهل LangChain4j باستخدام صنف `PromptTemplate` مع الصياغة `{{variable}}`.
+أنشئ مطالبات قابلة لإعادة الاستخدام مع متغيرات مكان العناصر. بدلاً من كتابة مطالبة جديدة في كل مرة، عرّف قالباً مرة واحدة واملأ قيم مختلفة. تسهل فئة `PromptTemplate` في LangChain4j هذا باستخدام صيغة `{{variable}}`.
-*مطالبات قابلة لإعادة الاستخدام مع متغيرات مكانها — قالب واحد، استخدامات كثيرة*
+*مطالبات قابلة لإعادة الاستخدام مع متغيرات مكان العناصر — قالب واحد، استخدامات متعددة*
```java
PromptTemplate template = PromptTemplate.from(
@@ -179,28 +179,28 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-
-**متى تستخدم:** استفسارات متكررة مع مدخلات مختلفة، معالجة مجموعات، بناء سير عمل ذكاء اصطناعي قابل لإعادة الاستخدام، أو أي سيناريو تبقى فيه هيكلية المطالبة نفسها لكن البيانات تتغير.
+
+**متى تستخدم:** استعلامات متكررة مع مدخلات مختلفة، المعالجة الدفعية، بناء سير عمل ذكاء اصطناعي قابل لإعادة الاستخدام، أو أي سيناريو يبقى فيه هيكل المطالبة نفسه لكن البيانات تتغير.
---
-تعطيك هذه الأساسيات الخمسة مجموعة أدوات متينة لمعظم مهام المطالبة. يبني بقية هذه الوحدة عليها مع **ثمانية أنماط متقدمة** تستغل تحكم التفكير في GPT-5.2، والتقييم الذاتي، وإمكانيات الإخراج المنظم.
+هذه الأساسيات الخمسة تزودك بمجموعة أدوات قوية لمعظم مهام المطالبة. بقية هذه الوحدة تبني عليها بـ **ثمانية أنماط متقدمة** تستفيد من تحكم GPT-5.2 في المنطق، التقييم الذاتي، وقدرات الإخراج المهيكل.
## الأنماط المتقدمة
-بعد تغطية الأساسيات، دعنا ننتقل إلى الثمانية أنماط المتقدمة التي تجعل هذه الوحدة فريدة. ليست كل المشاكل تحتاج نفس النهج. بعض الأسئلة تحتاج إجابات سريعة، والبعض الآخر يحتاج تفكيرًا عميقًا. بعض تحتاج تفكيرًا مرئيًا، والبعض يحتاج فقط النتائج. كل نمط أدناه مُحسّن لسيناريو مختلف — وتحكم التفكير في GPT-5.2 يجعل الفروقات أكثر وضوحًا.
+بعد تغطية الأساسيات، لننتقل إلى الثمانية أنماط المتقدمة التي تميز هذه الوحدة. ليست كل المشاكل تحتاج لنفس النهج. بعض الأسئلة تحتاج إجابات سريعة، وأخرى تحتاج تفكيرًا عميقًا. بعض تحتاج إلى منطق مرئي، والبعض الآخر يحتاج فقط النتائج. كل نمط أدناه مُحسّن لسيناريو مختلف — وتحكم GPT-5.2 في المنطق يجعل الفروقات أكثر وضوحًا.
-*نظرة عامة على ثمانية أنماط في هندسة المطالبات وحالات استخدامها*
+*نظرة عامة على ثمانية أنماط هندسة المطالبات وحالات استخدامها*
-يضيف GPT-5.2 بُعدًا آخر لهذه الأنماط: *التحكم في التفكير*. الشريط المنزلق أدناه يظهر كيف يمكنك ضبط جهد التفكير للنموذج — من إجابات سريعة ومباشرة إلى تحليل عميق وشامل.
+يضيف GPT-5.2 بعدًا آخر لهذه الأنماط: *تحكم في المنطق*. يظهر شريط التمرير أدناه كيف يمكنك تعديل جهد التفكير لدى النموذج — من إجابات سريعة ومباشرة إلى تحليل عميق وشامل.
-
+
-*يتيح تحكم التفكير في GPT-5.2 لك تحديد مقدار التفكير الذي يجب أن يقوم به النموذج — من إجابات مباشرة سريعة إلى استكشاف عميق*
+*تحكم GPT-5.2 في المنطق يتيح لك تحديد مقدار التفكير الذي يجب أن يقوم به النموذج — من إجابات سريعة ومباشرة إلى استكشاف عميق*
-**حماس منخفض (سريع ومركز)** - للأسئلة البسيطة حيث تريد إجابات سريعة ومباشرة. يقوم النموذج بأقل قدر من التفكير - بحد أقصى خطوتين. استخدم هذا للحسابات، عمليات البحث، أو الأسئلة المباشرة.
+**حماس منخفض (سريع ومركز)** - للأسئلة البسيطة التي تريد فيها إجابات سريعة ومباشرة. يقوم النموذج بأقل قدر من التفكير - بحد أقصى خطوتين. استخدم هذا للحسابات، الاستعلامات، أو الأسئلة البسيطة.
```java
String prompt = """
@@ -218,13 +218,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-
-> 💡 **استكشف مع GitHub Copilot:** افتح [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) واطرح:
-> - "ما الفرق بين نمطي المطالبة ذات الحماس المنخفض والحماس العالي؟"
-> - "كيف تساعد علامات XML في المطالبات على هيكلة استجابة الذكاء الاصطناعي؟"
-> - "متى يجب أن أستخدم أنماط التأمل الذاتي مقابل التعليم المباشر؟"
-**حماس مرتفع (عميق وشامل)** - للمشاكل المعقدة حيث تريد تحليلًا شاملاً. يستكشف النموذج بالتفصيل ويعرض تفكيرًا مفصلًا. استخدم هذا لتصميم الأنظمة، قرارات الهندسة المعمارية، أو الأبحاث المعقدة.
+> 💡 **استكشف مع GitHub Copilot:** افتح [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) واسأل:
+> - "ما الفرق بين نمطي المطالبة الحماسية المنخفضة والحماسية العالية؟"
+> - "كيف تساعد علامات XML في المطالبات على هيكلة رد الذكاء الاصطناعي؟"
+> - "متى يجب أن أستخدم أنماط التأمل الذاتي مقابل التعليمات المباشرة؟"
+
+**حماس عالي (عميق وشامل)** - للمشكلات المعقدة التي تريد فيها تحليلاً شاملاً. يستكشف النموذج بدقة ويعرض تفكيرًا مفصلًا. استخدم هذا لتصميم النظم، قرارات الهندسة المعمارية، أو البحث المعقد.
```java
String prompt = """
@@ -237,8 +237,8 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-
-**تنفيذ المهمة (التقدم خطوة بخطوة)** - لسير العمل متعدد الخطوات. يقدم النموذج خطة مسبقة، يروي كل خطوة أثناء التنفيذ، ثم يعطي ملخصًا. استخدم هذا للهجرات، التطبيقات، أو أي عمليات متعددة الخطوات.
+
+**تنفيذ المهمة (تقدم خطوة بخطوة)** - لسير العمل متعددة الخطوات. يقدم النموذج خطة مبدئية، يروي كل خطوة أثناء التنفيذ، ثم يعطي ملخصًا. استخدم هذا للهجرات، التطبيقات، أو أي عملية متعددة الخطوات.
```java
String prompt = """
@@ -275,21 +275,21 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-
-مطالبة سلسلة التفكير تطلب بوضوح من النموذج عرض عملية تفكيره، مما يحسن الدقة للمهام المعقدة. يساعد التقسيم خطوة بخطوة البشر والذكاء الاصطناعي على فهم المنطق.
+
+المطالبة بسلسلة التفكير تطلب صراحة من النموذج عرض عملية تفكيره، مما يحسن الدقة للمهام المعقدة. يساعد التفصيل خطوة بخطوة البشر والذكاء الاصطناعي على فهم المنطق.
> **🤖 جرب مع دردشة [GitHub Copilot](https://github.com/features/copilot):** اسأل عن هذا النمط:
-> - "كيف يمكنني تعديل نمط تنفيذ المهمة للعمليات طويلة الأمد؟"
-> - "ما هي أفضل الممارسات لهياكل مقدمات الأدوات في التطبيقات الإنتاجية؟"
-> - "كيف يمكنني تسجيل وعرض تحديثات التقدم المرحلي في واجهة المستخدم؟"
+> - "كيف يمكنني تكييف نمط تنفيذ المهمة للعمليات طويلة الأمد؟"
+> - "ما هي أفضل الممارسات لهياكلة مقدمات الأدوات في تطبيقات الإنتاج؟"
+> - "كيف يمكنني التقاط وعرض تحديثات التقدم المرحلية في واجهة المستخدم؟"
-يوضح الرسم البياني أدناه هذا سير العمل خطة → تنفيذ → تلخيص.
+يوضح المخطط أدناه هذا سير العمل خطة → تنفيذ → تلخيص.
*سير العمل خطة → تنفيذ → تلخيص للمهام متعددة الخطوات*
-**كود التأمل الذاتي** - لإنشاء كود بجودة الإنتاج. ينتج النموذج الكود وفقًا لمعايير الإنتاج مع معالجة مناسبة للأخطاء. استخدم هذا عند بناء ميزات أو خدمات جديدة.
+**الكود التأملي الذاتي** - لتوليد رمز بجودة الإنتاج. ينتج النموذج كودًا يتبع معايير الإنتاج مع التعامل السليم مع الأخطاء. استخدم هذا عند بناء ميزات أو خدمات جديدة.
```java
String prompt = """
@@ -299,14 +299,14 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-
-يوضح الرسم البياني التالي هذه الحلقة التكرارية للتحسين — إنشاء، تقييم، تحديد نقاط الضعف، وتحسين حتى يحقق الكود معايير الإنتاج.
+
+يوضح المخطط أدناه حلقة التحسين التكرارية هذه — إنتاج، تقييم، تحديد نقاط الضعف، وتحسين حتى يلبي الكود معايير الإنتاج.
-*حلقة تحسين تكرارية - إنشاء، تقييم، تحديد المشكلات، تحسين، تكرار*
+*حلقة تحسين تكرارية - إنتاج، تقييم، تحديد المشكلات، تحسين، تكرار*
-**التحليل المنظم** - لتقييم متسق. يراجع النموذج الكود باستخدام إطار ثابت (الصحة، الممارسات، الأداء، الأمان، القابلية للصيانة). استخدم هذا لمراجعات الكود أو تقييمات الجودة.
+**التحليل المنظم** - للتقييم المتسق. يراجع النموذج الكود باستخدام إطار ثابت (الصحة، الممارسات، الأداء، الأمان، قابلية الصيانة). استخدم هذا لمراجعات الكود أو تقييمات الجودة.
```java
String prompt = """
@@ -353,19 +353,19 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-
+
> **🤖 جرب مع دردشة [GitHub Copilot](https://github.com/features/copilot):** اسأل عن التحليل المنظم:
-> - "كيف يمكنني تخصيص إطار التحليل لأنواع مراجعات الكود المختلفة؟"
-> - "ما الطريقة المثلى لتحليل ومعالجة الإخراج المنظم برمجيًا؟"
-> - "كيف أضمن مستويات شدة متسقة عبر جلسات مراجعة مختلفة؟"
+> - "كيف يمكنني تخصيص إطار التحليل لأنواع مختلفة من مراجعات الكود؟"
+> - "ما أفضل طريقة لتحليل والإجراء على الإخراج المنظم برمجيًا؟"
+> - "كيف أضمن مستويات شدة متسقة عبر جلسات المراجعة المختلفة؟"
-يُظهر الرسم البياني التالي كيف ينظم هذا الإطار المراجعة إلى فئات ثابتة مع مستويات شدة.
+يوضح المخطط التالي كيف ينظم هذا الإطار المنظم مراجعة الكود إلى فئات متسقة مع مستويات شدة.
-*إطار لمراجعات كود متسقة مع مستويات الشدة*
+*إطار عمل لمراجعات الكود المتسقة مع مستويات الشدة*
-**الدردشة متعددة الأدوار** - للمحادثات التي تحتاج إلى سياق. يتذكر النموذج الرسائل السابقة ويبني عليها. استخدم هذا لجلسات المساعدة التفاعلية أو الأسئلة المعقدة.
+**الدردشة متعددة الأدوار** - للمحادثات التي تحتاج للسياق. يتذكر النموذج الرسائل السابقة ويبني عليها. استخدم هذا لجلسات المساعدة التفاعلية أو أسئلة وأجوبة معقدة.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -378,13 +378,14 @@ memory.add(UserMessage.from("Show me an example"));
AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-
-يوضح الرسم البياني أدناه كيف يتراكم سياق المحادثة مع كل جولة وكيف يرتبط بحد رموز النموذج.
+
+يوضح المخطط أدناه كيف يتكامل سياق المحادثة مع كل دورة وكيف يرتبط بحدود عدد الرموز للنموذج.
-*كيف يتراكم سياق المحادثة عبر عدة جولات حتى الوصول إلى حد الرموز*
-**الشرح خطوة بخطوة** - للمشاكل التي تتطلب منطقًا مرئيًا. يعرض النموذج تبريرًا صريحًا لكل خطوة. استخدم هذا للمسائل الرياضية، وألغاز المنطق، أو عندما تحتاج إلى فهم عملية التفكير.
+*كيف يتراكم سياق المحادثة عبر عدة دورات حتى الوصول إلى حد الرموز*
+
+**التفكير خطوة بخطوة** - للمشاكل التي تتطلب منطقًا مرئيًا. يعرض النموذج تفكيرًا صريحًا لكل خطوة. استخدم هذا للمسائل الرياضية، الألغاز المنطقية، أو عندما تحتاج إلى فهم عملية التفكير.
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-يوضح الشكل أدناه كيف يقوم النموذج بتقسيم المشاكل إلى خطوات منطقية مرقمة وصريحة.
+يوضح المخطط أدناه كيف يكسر النموذج المشاكل إلى خطوات منطقية مرقمة وصريحة.
+*تفكيك المشكلات إلى خطوات منطقية صريحة*
-*تقسيم المشاكل إلى خطوات منطقية صريحة*
-
-**الإخراج المقيد** - للردود التي تتطلب تنسيقًا معينًا. يتبع النموذج قواعد التنسيق والطول بدقة. استخدم هذا للملخصات أو عندما تحتاج إلى هيكل إخراج دقيق.
+**المخرجات المقيدة** - للردود التي تتطلب تنسيقًا محددًا. يتبع النموذج بدقة قواعد الشكل والطول. استخدم هذا للملخصات أو عندما تحتاج إلى هيكل إخراج دقيق.
```java
String prompt = """
@@ -420,53 +420,53 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-يوضح الشكل التالي كيف توجه القيود النموذج لإنتاج إخراج يلتزم بدقة بقواعد التنسيق والطول الخاصة بك.
+يُظهر الشكل التالي كيف توجه القيود النموذج لإنتاج مخرجات تلتزم بدقة بمتطلبات التنسيق والطول الخاصة بك.
-
+
-*فرض متطلبات تنسيق وطول وبنية محددة*
+*فرض متطلبات معينة على التنسيق والطول والتركيب*
## تشغيل التطبيق
**التحقق من النشر:**
-تأكد من وجود ملف `.env` في الدليل الجذري يحتوي على بيانات اعتماد Azure (تم إنشاؤه خلال الوحدة 01). شغّل هذا من دليل الوحدة (`02-prompt-engineering/`):
+تأكد من وجود ملف `.env` في الدليل الجذري يحتوي على بيانات اعتماد Azure (تم إنشاؤه خلال الوحدة 01). نفذ هذا من دليل الوحدة (`02-prompt-engineering/`):
-**باش:**
+**Bash:**
```bash
-cat ../.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT و API_KEY و DEPLOYMENT
+cat ../.env # يجب عرض AZURE_OPENAI_ENDPOINT و API_KEY و DEPLOYMENT
```
**PowerShell:**
```powershell
-Get-Content ..\.env # يجب عرض AZURE_OPENAI_ENDPOINT و API_KEY و DEPLOYMENT
+Get-Content ..\.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT و API_KEY و DEPLOYMENT
```
**بدء التطبيق:**
-> **ملاحظة:** إذا كنت قد بدأت بالفعل جميع التطبيقات باستخدام `./start-all.sh` من الدليل الجذري (كما هو موضح في الوحدة 01)، فإن هذه الوحدة تعمل بالفعل على المنفذ 8083. يمكنك تخطي أوامر البدء أدناه والذهاب مباشرة إلى http://localhost:8083.
+> **ملاحظة:** إذا كنت قد بدأت جميع التطبيقات بالفعل باستخدام `./start-all.sh` من الدليل الجذري (كما هو موضح في الوحدة 01)، فإن هذه الوحدة تعمل بالفعل على المنفذ 8083. يمكنك تخطي أوامر البدء أدناه والانتقال مباشرة إلى http://localhost:8083.
-**الخيار 1: استخدام Spring Boot Dashboard (مفضل لمستخدمي VS Code)**
+**الخيار 1: استخدام لوحة تحكم Spring Boot (موصى به لمستخدمي VS Code)**
-يتضمن حاوية التطوير إضافة Spring Boot Dashboard التي توفر واجهة بصرية لإدارة جميع تطبيقات Spring Boot. يمكنك العثور عليها في شريط النشاط على الجانب الأيسر من VS Code (ابحث عن أيقونة Spring Boot).
+يشتمل حاوية التطوير على امتداد Spring Boot Dashboard الذي يوفر واجهة مرئية لإدارة جميع تطبيقات Spring Boot. يمكنك العثور عليه في شريط النشاط على الجانب الأيسر من VS Code (ابحث عن أيقونة Spring Boot).
-من Spring Boot Dashboard، يمكنك:
+من لوحة تحكم Spring Boot، يمكنك:
- رؤية جميع تطبيقات Spring Boot المتاحة في مساحة العمل
- بدء/إيقاف التطبيقات بنقرة واحدة
- عرض سجلات التطبيق في الوقت الحقيقي
- مراقبة حالة التطبيق
-ما عليك سوى النقر على زر التشغيل بجانب "prompt-engineering" لبدء هذه الوحدة، أو بدء جميع الوحدات دفعة واحدة.
+ببساطة انقر على زر التشغيل بجانب "prompt-engineering" لبدء هذه الوحدة، أو ابدأ جميع الوحدات دفعة واحدة.
*لوحة تحكم Spring Boot في VS Code — بدء، إيقاف، ومراقبة جميع الوحدات من مكان واحد*
-**الخيار 2: استخدام سكربتات الشل**
+**الخيار 2: استخدام سكربتات الشيل**
ابدأ جميع تطبيقات الويب (الوحدات 01-04):
-**باش:**
+**Bash:**
```bash
cd .. # من الدليل الجذري
./start-all.sh
@@ -474,13 +474,13 @@ cd .. # من الدليل الجذري
**PowerShell:**
```powershell
-cd .. # من الدليل الجذر
+cd .. # من الدليل الجذري
.\start-all.ps1
```
أو ابدأ هذه الوحدة فقط:
-**باش:**
+**Bash:**
```bash
cd 02-prompt-engineering
./start.sh
@@ -492,11 +492,11 @@ cd 02-prompt-engineering
.\start.ps1
```
-كلا السكربتين يقومان تلقائيًا بتحميل متغيرات البيئة من ملف `.env` الجذري وسيبنيان ملفات JAR إذا لم تكن موجودة.
+يقوم كلا السكربتين بتحميل متغيرات البيئة تلقائيًا من ملف `.env` في الدليل الجذري وسيبني ملفات JAR إذا لم تكن موجودة.
-> **ملاحظة:** إذا أردت بناء جميع الوحدات يدويًا قبل البدء:
+> **ملاحظة:** إذا كنت تفضل بناء جميع الوحدات يدويًا قبل البدء:
>
-> **باش:**
+> **Bash:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
@@ -510,99 +510,99 @@ cd 02-prompt-engineering
افتح http://localhost:8083 في متصفحك.
-**لإيقاف التشغيل:**
+**للتوقف:**
-**باش:**
+**Bash:**
```bash
-./stop.sh # هذا الموديول فقط
+./stop.sh # هذا الوحدة فقط
# أو
-cd .. && ./stop-all.sh # جميع الموديولات
+cd .. && ./stop-all.sh # كل الوحدات
```
**PowerShell:**
```powershell
-.\stop.ps1 # هذا الموديول فقط
+.\stop.ps1 # هذا الوحدة فقط
# أو
-cd ..; .\stop-all.ps1 # جميع الموديولات
+cd ..; .\stop-all.ps1 # جميع الوحدات
```
## لقطات شاشة للتطبيق
-هنا الواجهة الرئيسية لوحدة هندسة المطالبات، حيث يمكنك تجربة جميع الأنماط الثمانية جنبًا إلى جنب.
+إليك الواجهة الرئيسية لوحدة هندسة الحث، حيث يمكنك تجربة جميع الأنماط الثمانية جنبًا إلى جنب.
-
+
-*لوحة التحكم الرئيسية تعرض جميع أنماط هندسة المطالبات الثمانية مع خصائصها وحالات استخدامها*
+*الواجهة الرئيسية تعرض جميع 8 أنماط هندسة الحث مع خصائصها وحالات استخدامها*
## استكشاف الأنماط
-تتيح لك واجهة الويب تجربة استراتيجيات مطالبة مختلفة. كل نمط يحل مشاكل مختلفة - جربها لترى متى يبرز كل نهج.
+تتيح لك الواجهة الإلكترونية تجربة استراتيجيات تحفيز مختلفة. كل نمط يحل مشاكل مختلفة - جربها لترى متى يتألق كل نهج.
-> **ملاحظة: البث مقابل غير البث** — تقدم كل صفحة نمط زرين: **🔴 بث الاستجابة (مباشر)** وخيار **غير البث**. يستخدم البث أحداث Server-Sent Events (SSE) لعرض الرموز المميزة في الوقت الحقيقي أثناء توليد النموذج لها، لذلك ترى التقدم فورًا. الخيار غير البث ينتظر الاستجابة كاملة قبل العرض. للمطالبات التي تتطلب تفكيرًا عميقًا (مثل حسين الحماس العالي، أو كود التفكير الذاتي)، قد يستغرق الاتصال غير البث وقتًا طويلاً جدًا - أحيانًا دقائق - دون تغذية راجعة مرئية. **استخدم البث عند تجربة المطالبات المعقدة** حتى ترى النموذج يعمل وتتجنب الانطباع بأن الطلب انتهت صلاحيته.
+> **ملاحظة: البث مقابل غير البث** — تقدم كل صفحة نمط زرين: **🔴 بث الرد (مباشر)** وخيار **غير بث**. يستخدم البث أحداث الخادم (SSE) لعرض الرموز في الوقت الحقيقي أثناء توليد النموذج لها، لذا ترى التقدم فورًا. خيار غير البث ينتظر الرد الكامل قبل عرضه. بالنسبة للأوامر التي تحفز التفكير العميق (مثل الحماسة العالية، الكود العاكس للذات)، قد يستغرق استدعاء غير البث وقتًا طويلًا - أحيانًا دقائق - دون أي ملاحظات مرئية. **استخدم البث عند تجربة أوامر معقدة** لتتمكن من مشاهدة النموذج يعمل وتجنب انطباع انتهاء المهلة.
>
-> **ملاحظة: متطلبات المتصفح** — تستخدم ميزة البث واجهة Fetch Streams API (`response.body.getReader()`) التي تتطلب متصفحًا كاملاً (Chrome, Edge, Firefox, Safari). لا تعمل في متصفح VS Code المدمج (Simple Browser)، إذ لا يدعم واجهة ReadableStream API. إذا استخدمت Simple Browser، ستعمل أزرار غير البث بشكل طبيعي — فقط أزرار البث تتأثر. افتح `http://localhost:8083` في متصفح خارجي لتجربة كاملة.
+> **ملاحظة: متطلبات المتصفح** — تستخدم ميزة البث واجهة Fetch Streams API (`response.body.getReader()`) التي تتطلب متصفحًا كاملاً (Chrome، Edge، Firefox، Safari). **لا يعمل** في المتصفح البسيط المدمج بداخل VS Code، لأن عرض الويب فيه لا يدعم واجهة ReadableStream API. إذا استخدمت المتصفح البسيط، ستعمل أزرار غير البث بشكل طبيعي — فقط أزرار البث هي المتأثرة. افتح `http://localhost:8083` في متصفح خارجي لتجربة كاملة.
-### الحماس المنخفض مقابل الحماس العالي
+### الحماسة المنخفضة مقابل الحماسة العالية
-اطرح سؤالًا بسيطًا مثل "ما هو 15% من 200؟" باستخدام الحماس المنخفض. ستحصل على إجابة فورية ومباشرة. الآن اسأل شيئًا معقدًا مثل "صمّم استراتيجية تخزين مؤقت لواجهة برمجية ذات حركة مرور عالية" باستخدام الحماس العالي. انقر **🔴 بث الاستجابة (مباشر)** وشاهد تفكير النموذج التفصيلي يظهر رمزًا برمز. نفس النموذج، نفس هيكل السؤال - لكن المطالبة تخبره بكمية التفكير المطلوب.
+اطرح سؤالًا بسيطًا مثل "ما هو 15% من 200؟" باستخدام الحماسة المنخفضة. ستحصل على إجابة فورية ومباشرة. الآن اطرح شيئًا معقدًا مثل "صمم استراتيجية تخزين مؤقت لواجهة برمجة تطبيقات عالية الحركة" باستخدام الحماسة العالية. انقر على **🔴 بث الرد (مباشر)** وشاهد التفكير التفصيلي للنموذج يظهر رمزًا تلو الآخر. نفس النموذج، نفس هيكل السؤال - لكن الحث يخبره بكمية التفكير المطلوب.
-### تنفيذ المهمة (مقدمات الأدوات)
+### تنفيذ المهام (مقدمات الأدوات)
-تستفيد سير العمل متعددة الخطوات من التخطيط المسبق وسرد التقدم. يحدد النموذج ما سيفعله، ويروي كل خطوة، ثم يلخص النتائج.
+تستفيد تدفقات العمل متعددة الخطوات من التخطيط المسبق وسرد التقدم. يوضح النموذج ما سيفعله، يسرد كل خطوة، ثم يلخص النتائج.
-### كود التفكير الذاتي
+### الكود العاكس للذات
-جرّب "إنشئ خدمة تحقق من البريد الإلكتروني". بدلاً من توليد الكود والتوقف، يولد النموذج، ويقيّم وفقًا لمعايير الجودة، ويحدد نقاط الضعف، ويحسن. سترى تكرارًا حتى يحقق الكود معايير الإنتاج.
+جرّب "إنشاء خدمة تحقق من البريد الإلكتروني". بدلاً من مجرد توليد الكود والتوقف، يولد النموذج، ويقيّم وفقاً لمعايير الجودة، ويحدد نقاط الضعف، ويحسّن. سترى تكرار العملية حتى يفي الكود بمعايير الإنتاج.
### التحليل المنظم
-مراجعات الكود تحتاج أطر تقييم ثابتة. يحلل النموذج الكود باستخدام فئات محددة (الصحة، الممارسات، الأداء، الأمان) مع مستويات شدة.
+تحتاج مراجعات الكود إلى أُطر تقييم متسقة. يحلل النموذج الكود باستخدام فئات ثابتة (الصحة، الممارسات، الأداء، الأمان) مع مستويات شدة.
-### المحادثة متعددة الجولات
+### الدردشة متعددة الأدوار
-اسأل "ما هو Spring Boot؟" ثم تابع فورًا بـ "أرني مثالاً". يتذكر النموذج سؤالك الأول ويعطيك مثالًا محددًا لـ Spring Boot. بدون الذاكرة، سيكون السؤال الثاني غامضًا.
+اسأل "ما هو Spring Boot؟" ثم تابع فورًا بـ "اعرض مثالًا". يتذكر النموذج سؤالك الأول ويعطيك مثال Spring Boot محدد. بدون ذاكرة، سيكون السؤال الثاني غامضًا جدًا.
-### الشرح خطوة بخطوة
+### التفكير خطوة بخطوة
-اختر مسألة رياضية وجربها باستخدام كل من الشرح خطوة بخطوة والحماس المنخفض. الحماس المنخفض يعطيك الإجابة فقط - سريع لكنه غير واضح. الشرح خطوة بخطوة يظهر كل عملية حساب وقرار.
+اختر مسألة رياضية وجربها مع كل من التفكير خطوة بخطوة والحماسة المنخفضة. الحماسة المنخفضة تعطيك فقط الإجابة - بسرعة ولكن بشكل غامض. التفكير خطوة بخطوة يعرض كل حساب وقرار.
-### الإخراج المقيد
+### مخرجات مقيدة
-عندما تحتاج إلى تنسيقات محددة أو عدد كلمات معين، يفرض هذا النمط الالتزام الصارم. جرب إنشاء ملخص بمائة كلمة بالضبط في صيغة نقاط.
+عندما تحتاج إلى تنسيقات محددة أو عدد كلمات محدد، يفرض هذا النمط الالتزام التام. جرّب إنشاء ملخص يحتوي على 100 كلمة تمامًا بصيغة نقاط.
-## ما الذي تتعلمه حقًا
+## ما تتعلمه حقًا
**جهد التفكير يغير كل شيء**
-يتيح لك GPT-5.2 التحكم في الجهد الحاسوبي من خلال مطالباتك. الجهد المنخفض يعني ردود سريعة مع استكشاف محدود. الجهد العالي يعني أن النموذج يأخذ وقتًا للتفكير بعمق. أنت تتعلم مطابقة الجهد مع تعقيد المهمة - لا تضيع الوقت على أسئلة بسيطة، ولا تتسرع في القرارات المعقدة.
+تتيح لك GPT-5.2 التحكم في الجهد الحاسوبي من خلال ألوماتك. الجهد المنخفض يعني ردود سريعة مع استكشاف قليل، والجهد العالي يعني أن النموذج يأخذ وقتًا للتفكير بعمق. تتعلم مطابقة الجهد مع تعقيد المهمة - لا تهدر الوقت في الأسئلة البسيطة، ولا تتعجل في القرارات المعقدة.
-**البنية توجه السلوك**
+**التركيب يوجه السلوك**
-هل لاحظت علامات XML في المطالبات؟ ليست زخرفية. تتبع النماذج التعليمات المنظمة بشكل أكثر موثوقية من النص الحر. عندما تحتاج إلى عمليات متعددة الخطوات أو منطق معقد، تساعد البنية النموذج على تتبع موقعه وما هو التالي. يوضح الرسم أدناه تحليل مطالبة منظمة جيدًا، يبيّن كيف تنظم العلامات مثل ``, ``, ``, ``, و `` تعليماتك إلى أقسام واضحة.
+هل لاحظت علامات XML في الحث؟ ليست للزينة. تتبع النماذج التعليمات المنظمة أكثر موثوقية من النص الحر. عندما تحتاج إلى عمليات متعددة الخطوات أو منطق معقد، يساعد التركيب النموذج على تتبع موقعه والمرحلة التالية. ينفصل المخطط أدناه حثًا منظمًا جيدًا، موضحًا كيف تنظم العلامات مثل ``, ``, ``, ``, و `` تعليماتك إلى أقسام واضحة.
-
+
-*تشريح مطالبة منظمة جيدًا مع أقسام واضحة وتنظيم بأسلوب XML*
+*تشريح حث منظم جيدًا مع أقسام واضحة وتنظيم بأسلوب XML*
**الجودة من خلال التقييم الذاتي**
-تعمل أنماط التفكير الذاتي من خلال جعل معايير الجودة صريحة. بدلًا من الأمل بأن النموذج "يفعلها بشكل صحيح"، تخبره بالضبط ما يعنيه "الصحيح": المنطق السليم، التعامل مع الأخطاء، الأداء، الأمان. يمكن للنموذج بعد ذلك تقييم مخرجاته وتحسينها. يحول هذا توليد الكود من نوع يانصيب إلى عملية.
+تعمل أنماط العاكسة للذات عن طريق جعل معايير الجودة صريحة. بدلاً من الأمل بأن "يفعل النموذج الشيء الصحيح"، أنت تخبره ما هو "الصحيح" بالضبط: منطق صحيح، التعامل مع الأخطاء، الأداء، الأمان. يمكن للنموذج بعد ذلك تقييم مخرجاته وتحسينها. يحول هذا توليد الكود من يانصيب إلى عملية منظمة.
**السياق محدود**
-تعمل المحادثات متعددة الجولات عبر تضمين تاريخ الرسائل مع كل طلب. لكن هناك حدًا - لكل نموذج حد أقصى لعدد الرموز. مع نمو المحادثات، ستحتاج إلى استراتيجيات للحفاظ على السياق ذي الصلة دون تجاوز الحد. توضح هذه الوحدة كيف تعمل الذاكرة؛ ستتعلم لاحقًا متى تلخص، متى تنسى، ومتى تسترجع.
+تعمل المحادثات متعددة الأدوار عن طريق تضمين سجل الرسائل مع كل طلب، لكن هناك حدًا - لكل نموذج حد أقصى للرموز. مع نمو المحادثات، ستحتاج إلى استراتيجيات للحفاظ على السياق ذي الصلة دون الوصول إلى الحد الأعلى. تعرض لك هذه الوحدة كيفية عمل الذاكرة؛ وستتعلم لاحقًا متى تلخص، ومتى تنسى، ومتى تستعيد.
-## الخطوات القادمة
+## الخطوات التالية
-**الوحدة التالية:** [03-rag - التوليد المعزز بالاسترجاع (RAG)](../03-rag/README.md)
+**الوحدة التالية:** [03-rag - RAG (التوليد المدعوم بالاستخراج)](../03-rag/README.md)
---
-**التنقل:** [← السابق: الوحدة 01 - المقدمة](../01-introduction/README.md) | [العودة إلى الرئيسي](../README.md) | [التالي: الوحدة 03 - RAG →](../03-rag/README.md)
+**التنقل:** [← السابق: الوحدة 01 - مقدمة](../01-introduction/README.md) | [عودة للرئيسية](../README.md) | [التالي: الوحدة 03 - RAG →](../03-rag/README.md)
---
-**إخلاء مسؤولية**:
-تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى جاهدين للدقة، نرجو الانتباه إلى أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. بالنسبة للمعلومات الهامة، يُنصح بالاستعانة بالترجمة البشرية المهنية. نحن غير مسؤولين عن أي سوء فهم أو تفسير خاطئ ناتج عن استخدام هذه الترجمة.
+**تنويه**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/03-rag/README.md b/translations/ar/03-rag/README.md
index d9187f9f0..c734780d7 100644
--- a/translations/ar/03-rag/README.md
+++ b/translations/ar/03-rag/README.md
@@ -1,144 +1,143 @@
-# الوحدة 03: RAG (التوليد المدعوم بالاسترجاع)
+# الوحدة 03: RAG (التوليد المعزز بالاسترجاع)
## جدول المحتويات
-- [عرض فيديو تفصيلي](../../../03-rag)
-- [ما ستتعلمه](../../../03-rag)
-- [المتطلبات المسبقة](../../../03-rag)
-- [فهم RAG](../../../03-rag)
- - [أي نهج RAG يستخدمه هذا الدرس؟](../../../03-rag)
-- [كيف يعمل](../../../03-rag)
- - [معالجة الوثائق](../../../03-rag)
- - [إنشاء التضمينات](../../../03-rag)
- - [البحث الدلالي](../../../03-rag)
- - [توليد الإجابة](../../../03-rag)
-- [تشغيل التطبيق](../../../03-rag)
-- [استخدام التطبيق](../../../03-rag)
- - [تحميل مستند](../../../03-rag)
- - [طرح الأسئلة](../../../03-rag)
- - [التحقق من مراجع المصادر](../../../03-rag)
- - [التجربة بالأسئلة](../../../03-rag)
-- [المفاهيم الرئيسية](../../../03-rag)
- - [استراتيجية التجزيء](../../../03-rag)
- - [درجات التشابه](../../../03-rag)
- - [التخزين في الذاكرة](../../../03-rag)
- - [إدارة نافذة السياق](../../../03-rag)
-- [متى يكون RAG مهماً](../../../03-rag)
-- [الخطوات القادمة](../../../03-rag)
-
-## عرض فيديو تفصيلي
-
-شاهد هذا الجلسة الحية التي تشرح كيفية البدء مع هذه الوحدة:
-
-
+- [عرض الفيديو](#عرض-الفيديو)
+- [ما ستتعلمه](#ما-ستتعلمه)
+- [المتطلبات المسبقة](#المتطلبات-المسبقة)
+- [فهم RAG](#فهم-rag)
+ - [أي نهج RAG يستخدم هذا الدرس؟](#أي-نهج-rag-يستخدم-هذا-الدرس؟)
+- [كيف يعمل](#كيف-يعمل)
+ - [معالجة المستندات](#معالجة-المستندات)
+ - [إنشاء التمثيلات](#إنشاء-التمثيلات)
+ - [البحث الدلالي](#البحث-الدلالي)
+ - [توليد الإجابة](#توليد-الإجابة)
+- [تشغيل التطبيق](#تشغيل-التطبيق)
+- [استخدام التطبيق](#استخدام-التطبيق)
+ - [تحميل مستند](#رفع-مستند)
+ - [طرح الأسئلة](#طرح-الأسئلة)
+ - [فحص مراجع المصادر](#تحقق-من-مراجع-المصادر)
+ - [التجربة مع الأسئلة](#جرب-بأسئلة-متنوعة)
+- [المفاهيم الرئيسية](#المفاهيم-الرئيسية)
+ - [استراتيجية التقسيم](#استراتيجية-التقسيم-إلى-أجزاء)
+ - [درجات التشابه](#درجات-التشابه)
+ - [التخزين في الذاكرة](#التخزين-في-الذاكرة)
+ - [إدارة نافذة السياق](#إدارة-نافذة-السياق)
+- [متى تهم RAG](#متى-يكون-rag-مهمًا)
+- [الخطوات التالية](#الخطوات-التالية)
+
+## عرض الفيديو
+
+شاهد هذه الجلسة المباشرة التي تشرح كيفية البدء مع هذه الوحدة:
+
+
## ما ستتعلمه
-في الوحدات السابقة، تعلمت كيفية إجراء محادثات مع الذكاء الاصطناعي وتنظيم مطالباتك بفعالية. لكن هناك حد أساسي: نماذج اللغة تعرف فقط ما تعلمته أثناء التدريب. لا يمكنها الإجابة عن أسئلة حول سياسات شركتك، أو توثيق مشروعك، أو أي معلومات لم تتدرب عليها.
+في الوحدات السابقة، تعلمت كيفية إجراء محادثات مع الذكاء الاصطناعي وتنظيم مطالباتك بشكل فعّال. لكن هناك قيد أساسي: نماذج اللغة تعرف فقط ما تعلمته أثناء التدريب. لا يمكنها الإجابة عن أسئلة حول سياسات شركتك، أو توثيق مشروعك، أو أي معلومات لم يتم تدريبها عليها.
-RAG (التوليد المدعوم بالاسترجاع) يحل هذه المشكلة. بدلاً من محاولة تعليم النموذج معلوماتك (وهو أمر مكلف وغير عملي)، تعطيه القدرة على البحث ضمن مستنداتك. عندما يسأل شخص ما سؤالاً، يجد النظام المعلومات ذات الصلة ويضمّنها في المطالبة. ثم يجيب النموذج بناءً على هذا السياق المسترجع.
+RAG (التوليد المعزز بالاسترجاع) يحل هذه المشكلة. بدلًا من محاولة تعليم النموذج معلوماتك (وهو أمر مكلف وغير عملي)، تمنحه القدرة على البحث عبر مستنداتك. عندما يسأل شخص ما سؤالاً، يجد النظام المعلومات ذات الصلة ويُدرجها في المطالبة. ثم يجيب النموذج بناءً على ذلك السياق المسترجع.
-فكر في RAG كما لو أنك تمنح النموذج مكتبة مراجع. عندما تسأل سؤالًا، يقوم النظام بـ:
+فكر في RAG كأنه يعطي النموذج مكتبة مراجع. عندما تطرح سؤالاً، يقوم النظام بـ:
-1. **استعلام المستخدم** - تسأل سؤالًا
-2. **التضمين** - يحول سؤالك إلى متجه
-3. **بحث المتجهات** - يجد مقاطع مستندات مشابهة
+1. **استعلام المستخدم** - أنت تطرح سؤالاً
+2. **التمثيل** - يحول سؤالك إلى متجه رقمي
+3. **بحث المتجهات** - يعثر على مقاطع مستندات مشابهة
4. **تجميع السياق** - يضيف المقاطع ذات الصلة إلى المطالبة
-5. **الرد** - يُولد نموذج اللغة الكبير إجابة بناءً على السياق
+5. **الرد** - يقوم نموذج اللغة بتوليد إجابة بناءً على السياق
-هذا يجعل ردود النموذج تستند إلى بياناتك الفعلية بدلاً من الاعتماد على معرفته التدريبية أو اختلاق الإجابات.
+هذا يجعل ردود النموذج مستندة إلى بياناتك الفعلية بدلاً من الاعتماد على معرفته التدريبية أو اختلاق الإجابات.
## المتطلبات المسبقة
-- إتمام [الوحدة 00 - البداية السريعة](../00-quick-start/README.md) (لمثال RAG السهل المشار إليه لاحقًا في هذه الوحدة)
-- إتمام [الوحدة 01 - المقدمة](../01-introduction/README.md) (تثبيت موارد Azure OpenAI، بما في ذلك نموذج التضمين `text-embedding-3-small`)
-- وجود ملف `.env` في الدليل الجذري يحتوي على بيانات اعتماد Azure (تم إنشاؤه بواسطة أمر `azd up` في الوحدة 01)
+- إتمام [الوحدة 01 - المقدمة](../01-introduction/README.md) (نشر موارد Azure OpenAI، بما في ذلك نموذج التمثيل `text-embedding-3-small`)
+- وجود ملف `.env` في الدليل الجذري مع بيانات اعتماد Azure (تم إنشاؤه بواسطة `azd up` في الوحدة 01)
-> **ملاحظة:** إذا لم تكمل الوحدة 01، فاتبع تعليمات النشر هناك أولاً. يقوم أمر `azd up` بنشر كل من نموذج دردشة GPT ونموذج التضمين المستخدم في هذه الوحدة.
+> **ملاحظة:** إذا لم تكمل الوحدة 01، اتبع تعليمات النشر هناك أولاً. تقوم أمر `azd up` بنشر كل من نموذج الدردشة GPT ونموذج التمثيل المستخدم في هذه الوحدة.
## فهم RAG
-يوضح الرسم البياني أدناه المفهوم الأساسي: بدلاً من الاعتماد فقط على بيانات تدريب النموذج، يمنح RAG النموذج مكتبة مراجع من مستنداتك ليطلع عليها قبل توليد كل إجابة.
+الرسم التوضيحي أدناه يوضح المفهوم الأساسي: بدلًا من الاعتماد فقط على بيانات تدريب النموذج، يمنحه RAG مكتبة مراجعة من مستنداتك ليطلع عليها قبل توليد كل إجابة.
-*يوضح هذا الرسم البياني الفرق بين نموذج لغة كبير قياسي (يخمن بناءً على بيانات التدريب) ونموذج لغة كبير مدعوم بـ RAG (يطلع أولاً على مستنداتك).*
+*هذا الرسم يوضح الفرق بين نموذج لغة كبير عادي (يخمن بناءً على بيانات التدريب) ونموذج معزز بـ RAG (يستشير مستنداتك أولاً).*
-هكذا تتصل الأجزاء من البداية للنهاية. يتدفق سؤال المستخدم عبر أربع مراحل — التضمين، بحث المتجهات، تجميع السياق، وتوليد الإجابة — كل منها يبني على سابقه:
+إليك كيف تتصل الأجزاء من البداية للنهاية. سؤال المستخدم يمر عبر أربع مراحل — التمثيل، بحث المتجه، تجميع السياق، وتوليد الإجابة — كل مرحلة تبني على التي قبلها:
-
+
-*يُظهر هذا الرسم البياني خط أنابيب RAG من البداية للنهاية — حيث يتدفق استعلام المستخدم عبر التضمين، بحث المتجهات، تجميع السياق، وتوليد الإجابة.*
+*هذا الرسم يوضح خط أنابيب RAG من البداية إلى النهاية — سؤال المستخدم يمر عبر التمثيل، بحث المتجه، تجميع السياق، وتوليد الإجابة.*
-تتبع بقية هذه الوحدة كل مرحلة بالتفصيل، مع الكود الذي يمكنك تشغيله وتعديله.
+البقية من هذه الوحدة تشرح كل مرحلة بالتفصيل، مع كود يمكنك تشغيله وتعديله.
-### أي نهج RAG يستخدمه هذا الدرس؟
+### أي نهج RAG يستخدم هذا الدرس؟
-يقدم LangChain4j ثلاث طرق لتطبيق RAG، كل منها بمستوى تجريد مختلف. يوضح الرسم البياني أدناه مقارنة بينها جنبًا إلى جنب:
+يقدم LangChain4j ثلاث طرق لتنفيذ RAG، كل منها بمستوى مختلف من التجريد. الرسم أدناه يقارنها جنبًا إلى جنب:
-
+
-*يقارن هذا الرسم البياني بين الثلاثة نهج لـ RAG في LangChain4j — السهل، والاصلي، والمتقدم — مع عرض مكوناتها الرئيسية وموعد استخدام كل منها.*
+*هذا الرسم يقارن بين ثلاثة نهج RAG في LangChain4j — سهولة، أصلي، ومتقدم — موضحًا مكونات كل منهما ومتى تستخدم كل واحد.*
-| النهج | ماذا يفعل | المقايضة |
+| النهج | ماذا يفعل | الموازنة |
|---|---|---|
-| **RAG السهل** | يربط كل شيء تلقائيًا عبر `AiServices` و`ContentRetriever`. تقوم بتعريف واجهة، توصل مسترجع المحتوى، ويتولى LangChain4j التعامل مع التضمين، البحث، وتجميع المطالبات في الخلفية. | أقل كود، لكن لا ترى ما يحدث في كل خطوة. |
-| **RAG الاصلي** | تستدعي نموذج التضمين، تبحث في المتجر، تبني المطالبة، وتولد الإجابة بنفسك — خطوة صريحة واحدة في كل مرة. | المزيد من الكود، لكن كل مرحلة مرئية وقابلة للتعديل. |
-| **RAG المتقدم** | يستخدم إطار عمل `RetrievalAugmentor` مع محولات استعلام قابلة للتوصيل، وموجّهات، وإعادة ترتيب، وحقن محتوى لأنابيب الإنتاج المتقدمة. | أقصى مرونة، لكنه أكثر تعقيدًا بشكل كبير. |
+| **RAG السهل** | يربط كل شيء تلقائيًا عبر `AiServices` و `ContentRetriever`. تقوم بالتعليق على واجهة، تربط مسترجعًا، وLangChain4j يتولى التمثيل، البحث، وتجميع المطالبات في الخلفية. | كود قليل، لكن لا ترى ما يحدث في كل خطوة. |
+| **RAG الأصلي** | تقوم بنداء نموذج التمثيل، والبحث في المخزن، وبناء المطالبة، وتوليد الإجابة بنفسك — خطوة واحدة صريحة في كل مرة. | كود أكثر، لكن كل مرحلة مرئية وقابلة للتعديل. |
+| **RAG المتقدم** | يستخدم إطار `RetrievalAugmentor` مع محولات الاستعلام، الموجهات، معيد الترتيب، وحقن المحتوى، مناسب لأنظمة الإنتاج. | أكبر قدر من المرونة، لكن مع تعقيد أعلى بكثير. |
-**يستخدم هذا الدرس النهج الاصلي.** كل خطوة من خط أنابيب RAG — تضمين الاستعلام، البحث في متجر المتجهات، تجميع السياق، وتوليد الإجابة — مكتوبة صراحة في [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). هذا مقصود: كمورد تعلم، من المهم أن ترى وتفهم كل مرحلة بدلاً من تقليل الكود. بمجرد أن تكون مرتاحًا لكيفية ترابط الأجزاء، يمكنك الانتقال إلى RAG السهل للنماذج الأولية السريعة أو RAG المتقدم للأنظمة الإنتاجية.
+**هذا الدرس يستخدم النهج الأصلي.** كل خطوة في خط أنابيب RAG — تمثيل الاستعلام، البحث في متجر المتجهات، تجميع السياق، وتوليد الإجابة — مكتوبة بشكل صريح في [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). هذا مقصود: كمورد تعليمي، من المهم أكثر أن ترى وتفهم كل مرحلة بدلاً من تقليل الكود. بمجرد أن تشعر بالراحة مع كيفية توصيل الأجزاء، يمكنك التدرج إلى RAG السهل لنماذج أولية سريعة أو RAG المتقدم لأنظمة الإنتاج.
-> **💡 هل سبق ورأيت RAG السهل يعمل؟** تشتمل [وحدة البداية السريعة](../00-quick-start/README.md) على مثال للأسئلة والأجوبة على المستند ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)) يستخدم نهج RAG السهل — حيث يتولى LangChain4j التضمين، البحث، وتجميع المطالبات تلقائيًا. تأخذ هذه الوحدة الخطوة التالية بكسر خط الأنابيب لتتمكن من رؤية والتحكم في كل مرحلة بنفسك.
+> **💡 مهتم بـ RAG السهل؟** يقدم LangChain4j أيضًا طريقة *RAG سهلة* حيث يتولى `AiServices` و `ContentRetriever` تمثيل، بحث، وتجميع المطالبات تلقائيًا. هذه الوحدة تأخذ الطريق الأكثر صراحة — تكشف ذلك الخط الأنبوبي لتتمكن من رؤية والتحكم في كل مرحلة بنفسك.
-يوضح الرسم البياني أدناه خط أنابيب RAG السهل من مثال البداية السريعة هذا. لاحظ كيف تخفي `AiServices` و`EmbeddingStoreContentRetriever` كل التعقيد — فقط تقوم بتحميل مستند، وتوصيل مسترجع، وتحصل على إجابات. النهج الاصلي في هذه الوحدة يكسر كل خطوة مخفية:
+الرسم أدناه يوضح خط أنابيب RAG السهل. لاحظ كيف يخفي `AiServices` و `EmbeddingStoreContentRetriever` كل التعقيد — تقوم بتحميل مستند، توصيل مسترجع، وتحصل على إجابات. النهج الأصلي في هذه الوحدة يفتح كل تلك الخطوات الخفية:
-*يوضح هذا الرسم البياني خط أنابيب RAG السهل من `SimpleReaderDemo.java`. قارن هذا مع النهج الاصلي المستخدم في هذه الوحدة: RAG السهل يخفي التضمين، الاسترجاع، وتجميع المطالبة خلف `AiServices` و`ContentRetriever` — تقوم بتحميل مستند، توصيل مسترجع، وتحصل على إجابات. النهج الاصلي في هذه الوحدة يكسر هذا الخط بحيث تستدعي كل مرحلة (التضمين، البحث، تجميع السياق، التوليد) بنفسك، مما يمنحك رؤية كاملة وتحكمًا كاملاً.*
+*هذا الرسم يوضح خط أنابيب RAG السهل. قارن هذا مع النهج الأصلي المستخدم في هذه الوحدة: RAG السهل يخفي التمثيل، الاسترجاع، وتجميع المطالبات خلف `AiServices` و `ContentRetriever` — تقوم بتحميل مستند، توصيل مسترجع، وتحصل على إجابات. النهج الأصلي في هذه الوحدة يفتح هذا الخط الأنبوبي بحيث تستدعي كل مرحلة (التمثيل، البحث، تجميع السياق، التوليد) بنفسك، مما يمنحك رؤية وتحكم كاملين.*
## كيف يعمل
-يقسم خط أنابيب RAG في هذه الوحدة إلى أربع مراحل تعمل بالتتابع في كل مرة يطرح المستخدم سؤالًا. أولًا، يتم **تحليل المستند وتحويله إلى مقاطع** يمكن إدارتها. ثم تتحول هذه المقاطع إلى **تضمينات متجهية** ويتم تخزينها لمقارنتها رياضياً. عند وصول استعلام، يجري النظام **بحثًا دلاليًا** لإيجاد المقاطع الأكثر ملاءمة، وأخيراً يمررها كسياق إلى نموذج اللغة الكبير لـ **توليد الإجابة**. الأقسام أدناه تشرح كل مرحلة مع الكود الفعلي والرسوم التوضيحية. لنلق نظرة على الخطوة الأولى.
+خط أنابيب RAG في هذه الوحدة يتكون من أربع مراحل تعمل بالتتابع في كل مرة يطرح فيها المستخدم سؤالاً. أولاً، يتم **تحليل المستند وتحويله إلى مقاطع** تُدار بفعالية. ثم تُحوّل هذه المقاطع إلى **تمثيلات متجهة** وتُخزن لتتم مقارنة المتجهات رياضيًا. عند وصول الاستعلام، يقوم النظام بـ **بحث دلالي** لإيجاد المقاطع الأكثر صلة، وأخيرًا يمررها كسياق إلى نموذج اللغة لتوليد **الإجابة**. الأقسام أدناه تشرح كل مرحلة مع الكود الفعلي والرسوم التوضيحية. لننظر في الخطوة الأولى.
-### معالجة الوثائق
+### معالجة المستندات
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-عندما ترفع مستندًا، يقوم النظام بتحليله (PDF أو نص عادي)، يرفق بيانات وصفية مثل اسم الملف، ثم يقسمه إلى مقاطع — قطع أصغر تناسب نافذة سياق النموذج بشكل مريح. تتداخل هذه المقاطع قليلاً حتى لا تفقد السياق عند الحدود.
+عند تحميل مستند، يقوم النظام بتحليله (PDF أو نص عادي)، يضيف بيانات وصفية مثل اسم الملف، ثم يقسمه إلى مقاطع — قطع أصغر تناسب نافذة السياق للنموذج. تتداخل هذه المقاطع قليلاً بحيث لا تفقد السياق عند الحدود.
```java
-// تحليل الملف المرفوع وتغليفه في مستند LangChain4j
+// تحليل الملف المحمل وتغليفه في مستند LangChain4j
Document document = Document.from(content, metadata);
-// تقسيم إلى قطع من 300 رمز مع تداخل 30 رمز
+// تقسيم إلى أجزاء مكونة من 300 رمز مع تداخل 30 رمز
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
-يوضح الرسم البياني أدناه كيف يعمل ذلك بصريًا. لاحظ كيف يشارك كل مقطع بعض الرموز مع جيرانه — تداخل 30 رمزًا يضمن عدم فقدان أي سياق مهم بين المقاطع:
+الرسم أدناه يوضح كيف يعمل هذا بصريًا. لاحظ كيف يشارك كل مقطع بعض الرموز المميزة مع جيرانه — تداخل 30 رمزًا يضمن عدم فقدان سياق مهم عند الحدود:
-
+
-*يوضح هذا الرسم البياني مستندًا يُقسم إلى مقاطع مكونة من 300 رمز مع تداخل 30 رمزًا، حفاظًا على السياق عند حدود المقاطع.*
+*هذا الرسم يوضح تقسيم مستند إلى مقاطع بحدود 300 رمز مميز مع تداخل 30 رمز مميز، مما يحافظ على السياق عند حدود المقاطع.*
-> **🤖 جرب مع دردشة [GitHub Copilot](https://github.com/features/copilot):** افتح [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) واطرح:
-> - "كيف يقوم LangChain4j بتقسيم الوثائق إلى مقاطع ولماذا التداخل مهم؟"
-> - "ما هو حجم المقطع الأمثل لأنواع الوثائق المختلفة ولماذا؟"
-> - "كيف أتعامل مع المستندات متعددة اللغات أو ذات التنسيق الخاص؟"
+> **🤖 جرب مع دردشة [GitHub Copilot](https://github.com/features/copilot):** افتح [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) واسأل:
+> - "كيف يقسم LangChain4j المستندات إلى مقاطع ولماذا التداخل مهم؟"
+> - "ما هو الحجم الأمثل للمقطع لأنواع الوثائق المختلفة ولماذا؟"
+> - "كيف أتعامل مع المستندات بلغات متعددة أو ذات تنسيق خاص؟"
-### إنشاء التضمينات
+### إنشاء التمثيلات
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-يتم تحويل كل مقطع إلى تمثيل رقمي يُسمى تضمينًا — وهو في الأساس محول من معنى إلى أرقام. نموذج التضمين ليس "ذكيًا" مثل نموذج الدردشة؛ لا يمكنه اتباع التعليمات، أو التفكير، أو الإجابة على الأسئلة. ما يمكنه فعله هو رسم النص داخل فضاء رياضي حيث تقع المعاني المتشابهة بالقرب من بعضها البعض — "سيارة" بالقرب من "مركبة"، "سياسة استرداد" بالقرب من "إعادة أموالي". فكر في نموذج الدردشة كشخص تتحدث إليه؛ ونموذج التضمين كنظام تنظيم ملفات فعال للغاية.
+يتم تحويل كل مقطع إلى تمثيل رقمي يُسمى التمثيل — وهو محول من المعنى إلى أرقام. نموذج التمثيل ليس "ذكيًا" كما نموذج الدردشة؛ لا يمكنه اتباع التعليمات، أو الاستدلال، أو الإجابة على الأسئلة. ما يمكنه فعله هو تحويل النص إلى فضاء رياضي حيث تتجمع المعاني المتشابهة — مثل "سيارة" بجانب "عربة"، "سياسة استرداد" بجانب "إرجاع أموالي". فكر في نموذج الدردشة كشخص يمكن التحدث إليه؛ ونموذج التمثيل كنظام أرشفة قوي جدًا.
-يصور الرسم البياني أدناه هذا المفهوم — يدخل النص، تخرج المتجهات الرقمية، والمعاني المشابهة تنتج متجهات متقاربة:
+الرسم أدناه يصور هذا المفهوم — يدخل النص، تخرج متجهات رقمية، والمعاني المشابهة تنتج متجهات قريبة:
-
+
-*يوضح هذا الرسم كيف يحول نموذج التضمين النص إلى متجهات رقمية، موضحًا كيف تترتب المعاني المتشابهة — مثل "سيارة" و"مركبة" — قرب بعضها البعض في الفضاء المتجهي.*
+*هذا الرسم يوضح كيف يحول نموذج التمثيل النص إلى متجهات رقمية، بحيث توضع المعاني المشابهة — مثل "سيارة" و"عربة" — متقاربة في فضاء المتجهات.*
```java
@Bean
@@ -154,29 +153,29 @@ EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-يوضح مخطط الفئات أدناه التدفقات المنفصلة في خط أنابيب RAG وفئات LangChain4j التي تنفذها. يتضمن **تدفق الإدخال** (يعمل مرة واحدة عند الرفع) تقسيم المستند، تضمين المقاطع، وتخزينها عبر `.addAll()`. بينما **تدفق الاستعلام** (يعمل في كل مرة يطرح فيها المستخدم سؤالًا) يُضمّن السؤال، يبحث في المتجر عبر `.search()`, ويمرر السياق المطابق إلى نموذج الدردشة. يلتقي التدفقان عند واجهة `EmbeddingStore` المشتركة:
+الرسم البياني للطبقات أدناه يُظهر تدفقين منفصلين في خط أنابيب RAG وفئات LangChain4j التي تنفذها. **تدفق الإدخال** (يعمل مرة عند التحميل) يقسم المستند، يمثل المقاطع، ويخزنها عبر `.addAll()`. **تدفق الاستعلام** (يعمل في كل مرة يطرح المستخدم سؤالًا) يمثل السؤال، يبحث في المخزن عبر `.search()`, ويمرر السياق المطابق لنموذج الدردشة. يلتقي التدفقان عند واجهة `EmbeddingStore` المشتركة:
-
+
-*يوضح هذا الرسم البياني التدفقين في خط أنابيب RAG — الإدخال والاستعلام — وكيف يتصلان عبر EmbeddingStore المشترك.*
+*هذا الرسم يوضح التدفقين في خط أنابيب RAG — الإدخال والاستعلام — وكيف يتصلان عبر EmbeddingStore المشتركة.*
-بعد تخزين التضمينات، يتجمع المحتوى المتشابه بشكل طبيعي في الفضاء المتجهي. يُظهر التصور أدناه كيف تنتهي الوثائق المتعلقة بموضوعات مشابهة كنقاط متقاربة، وهذا ما يجعل البحث الدلالي ممكنًا:
+بعد تخزين التمثيلات، يتجمع المحتوى المشابه تلقائيًا في فضاء المتجهات. التصور أدناه يوضح كيف تنتهي الوثائق ذات المواضيع المتصلة كنقاط قريبة، وهذا ما يجعل البحث الدلالي ممكنًا:
-
+
-*يوضح هذا التصور كيف تتجمع الوثائق ذات الصلة معًا في فضاء ثلاثي الأبعاد للمتجهات، مع تكوين مجموعات مميزة مثل الوثائق التقنية، قواعد العمل، والأسئلة الشائعة.*
+*هذا التصور يوضح كيف تتجمع الوثائق ذات صلة في فضاء متجه ثلاثي الأبعاد، مع تكتلات لمواضيع مثل الوثائق التقنية، قواعد الأعمال، والأسئلة الشائعة.*
-عندما يبحث المستخدم، يتبع النظام أربع خطوات: تضمين الوثائق مرة واحدة، تضمين الاستعلام في كل بحث، مقارنة متجه الاستعلام مع كل المتجهات المخزنة باستخدام تشابه جيب التمام، وإرجاع أعلى K مقطع بحسب الدرجة. يشرح الرسم البياني أدناه كل خطوة وفئات LangChain4j المتضمنة:
+عند البحث، يتبع النظام أربع خطوات: تمثيل الوثائق مرة واحدة، تمثيل الاستعلام في كل بحث، مقارنة متجه الاستعلام مع كل المتجهات المخزنة باستخدام تشابه جيب التمام، وإرجاع أفضل المقاطع ذات الدرجات العليا K. الرسم أدناه يشرح كل خطوة وفئات LangChain4j المرتبطة:
-
+
-*يوضح هذا الرسم الخطوات الأربع لعملية بحث التضمين: تضمين الوثائق، تضمين الاستعلام، مقارنة المتجهات باستخدام تشابه جيب التمام، وإرجاع أعلى النتائج K.*
+*هذا الرسم يوضح عملية البحث بالتمثيل ذات الأربع خطوات: تمثيل الوثائق، تمثيل الاستعلام، مقارنة المتجهات بتشابه جيب التمام، وإرجاع أفضل النتائج K.*
### البحث الدلالي
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-عندما تطرح سؤالًا، يصبح سؤالك أيضًا تضمينًا. يقارن النظام تضمين سؤالك مع جميع تضمينات مقاطع المستندات. يجد المقاطع التي تحمل معاني متقاربة — ليس مجرد تطابق كلمات مفتاحية، بل التشابه الدلالي الفعلي.
+عندما تطرح سؤالًا، يتحول سؤالك أيضًا إلى تمثيل. يقارن النظام تمثيل سؤالك مع تمثيلات كل مقاطع المستندات. يعثر على المقاطع التي تحمل معاني مشابهة - ليس مجرد تطابق كلمات مفتاحية، بل تشابه دلالي حقيقي.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -196,27 +195,27 @@ for (EmbeddingMatch match : matches) {
}
```
-يوضح الرسم البياني أدناه مقارنة بين البحث الدلالي وبحث الكلمات المفتاحية التقليدي. بحث الكلمة المفتاحية عن "مركبة" يتجاهل مقطعًا عن "السيارات والشاحنات"، لكن البحث الدلالي يفهم أنهما يعنيان نفس الشيء ويُرجع المقطع بدرجة عالية:
+الرسم أدناه يقارن البحث الدلالي بالبحث بالكلمة المفتاحية التقليدي. بحث بالكلمة المفتاحية عن "مركبة" يفقد مقطعًا عن "سيارات وشاحنات"، لكن البحث الدلالي يفهم أنهما تعنيان الشيء نفسه ويُرجعها كنتيجة ذات درجة عالية:
-*يقارن هذا الرسم البحث القائم على الكلمات المفتاحية مع البحث الدلالي، ويُظهر كيف يسترجع البحث الدلالي محتوى مرتبطًا مفهوميًا حتى عندما تختلف الكلمات المفتاحية الدقيقة.*
-تحت الغطاء، يتم قياس التشابه باستخدام التشابه الكوني — وهو في الأساس سؤال "هل هذان السهمان يشيران إلى نفس الاتجاه؟" يمكن لقطعتين استخدام كلمات مختلفة تمامًا، ولكن إذا كانتا تعنيان نفس الشيء فإن المتجهات تشير إلى نفس الاتجاه وتحصل على درجة قريبة من 1.0:
+*هذا الرسم يقارن البحث المعتمد على الكلمات المفتاحية مع البحث الدلالي، مبيّنًا كيف يسترجع البحث الدلالي محتوى ذا علاقة مفهومية حتى عندما تختلف الكلمات الدقيقة.*
-
+تحت الغطاء، يُقاس التشابه باستخدام تشابه جيب التمام — أي: "هل هذان السهمان يشيران لنفس الاتجاه؟" يمكن أن تستخدم مقطعين كلمات مختلفة تمامًا، ولكن إن كانا يحملان نفس المعنى تكون متجهاتهما متجهات متقاربة وتأتي بدرجة قريبة من 1.0:
-*توضح هذه الرسمة التشابه الكوني كزاوية بين متجهات التضمين — المتجهات الأكثر توافقًا تسجل درجة أقرب إلى 1.0، مما يشير إلى تشابه دلالي أعلى.*
+
+*يوضح هذا المخطط تشابه جيب التمام كزاوية بين متجهات التضمين — المتجهات الأكثر تطابقًا تحصل على درجة أقرب إلى 1.0، مما يشير إلى تشابه دلالي أعلى.*
-> **🤖 جرب مع [GitHub Copilot](https://github.com/features/copilot) Chat:** افتح [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) واسأل:
+> **🤖 جرّب مع [GitHub Copilot](https://github.com/features/copilot) Chat:** افتح [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) واسأل:
> - "كيف يعمل البحث بالتشابه مع التضمينات وما الذي يحدد الدرجة؟"
-> - "ما هو عتبة التشابه التي يجب أن أستخدمها وكيف تؤثر على النتائج؟"
-> - "كيف أتعامل مع الحالات التي لا يتم فيها العثور على مستندات ذات صلة؟"
+> - "ما هو الحد الأدنى لتشابه يجب استخدامه وكيف يؤثر على النتائج؟"
+> - "كيف أتعامل مع الحالات التي لا يتم العثور فيها على مستندات ذات صلة؟"
### توليد الإجابة
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-يتم تجميع القطع الأكثر صلة في مطالبة منظمة تتضمن تعليمات صريحة، والسياق المسترجع، وسؤال المستخدم. يقرأ النموذج هذه القطع المحددة ويجيب بناءً على تلك المعلومات — لا يمكنه استخدام سوى ما هو أمامه، مما يمنع الهلوسة.
+يتم تجميع أكثر الأجزاء ذات الصلة في موجه منظم يتضمن تعليمات صريحة، والسياق المسترجع، وسؤال المستخدم. يقرأ النموذج تلك الأجزاء المحددة ويجيب بناءً على تلك المعلومات — يمكنه فقط استخدام ما هو أمامه، مما يمنع الهلوسة.
```java
String context = matches.stream()
@@ -236,36 +235,36 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-
-تظهر الرسمة أدناه هذا التجميع أثناء العمل — حيث يتم حقن القطع ذات أعلى الدرجات من خطوة البحث في قالب المطالبة، ويولد `OpenAiOfficialChatModel` إجابة موثوقة:
-
+يُظهر المخطط أدناه هذا التجميع أثناء العمل — يتم حقن أعلى الأجزاء تقييمًا من خطوة البحث في قالب الموجه، ويولّد `OpenAiOfficialChatModel` إجابة مؤصلة:
-*تُظهر هذه الرسمة كيفية تجميع القطع ذات أعلى الدرجات في مطالبة منظمة، مما يسمح للنموذج بتوليد إجابة موثوقة من بياناتك.*
+
+
+*يُظهر هذا المخطط كيفية تجميع الأجزاء الأعلى تقييمًا في موجه منظم، مما يسمح للنموذج بتوليد إجابة مستندة إلى بياناتك.*
## تشغيل التطبيق
-**التحقق من النشر:**
+**تحقق من النشر:**
-تأكد من وجود ملف `.env` في الدليل الجذر يحتوي على بيانات اعتماد Azure (تم إنشاؤها خلال الوحدة 01). شغّل هذا من دليل الوحدة (`03-rag/`):
+تأكد من وجود ملف `.env` في الدليل الجذري يحتوي على بيانات اعتماد Azure (تم إنشاؤه أثناء الوحدة 01). شغّل هذا من دليل الوحدة (`03-rag/`):
-**Bash:**
+**بـاش:**
```bash
-cat ../.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT
+cat ../.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT و API_KEY و DEPLOYMENT
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
-Get-Content ..\.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT و API_KEY و DEPLOYMENT
+Get-Content ..\.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT
```
-
-**بدء التطبيق:**
-> **ملاحظة:** إذا كنت قد بدأت جميع التطبيقات باستخدام `./start-all.sh` من الدليل الجذر (كما هو موصوف في الوحدة 01)، فإن هذه الوحدة تعمل على المنفذ 8081 بالفعل. يمكنك تخطي أوامر البدء أدناه والانتقال مباشرة إلى http://localhost:8081.
+**ابدأ التطبيق:**
+
+> **ملاحظة:** إذا كنت قد بدأت جميع التطبيقات باستخدام `./start-all.sh` من الدليل الجذري (كما هو موضح في الوحدة 01)، فهذه الوحدة تعمل بالفعل على المنفذ 8081. يمكنك تخطي أوامر البدء أدناه والذهاب مباشرة إلى http://localhost:8081.
-**الخيار 1: استخدام لوحة تحكم Spring Boot (مُوصى به لمستخدمي VS Code)**
+**الخيار 1: استخدام لوحة تحكم Spring Boot (مُوصَى به لمستخدمي VS Code)**
-يتضمن حاوية التطوير امتداد لوحة تحكم Spring Boot الذي يوفر واجهة بصرية لإدارة جميع تطبيقات Spring Boot. يمكنك العثور عليه في شريط النشاط على الجانب الأيسر من VS Code (ابحث عن رمز Spring Boot).
+تتضمن الحاوية التطويرية إضافة Spring Boot Dashboard، التي توفر واجهة بصرية لإدارة جميع تطبيقات Spring Boot. يمكنك العثور عليها في شريط النشاط على الجانب الأيسر من VS Code (ابحث عن أيقونة Spring Boot).
من لوحة تحكم Spring Boot، يمكنك:
- رؤية جميع تطبيقات Spring Boot المتاحة في مساحة العمل
@@ -273,154 +272,153 @@ Get-Content ..\.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT و API_KEY و
- عرض سجلات التطبيق في الوقت الحقيقي
- مراقبة حالة التطبيق
-ببساطة انقر على زر التشغيل بجوار "rag" لبدء هذه الوحدة، أو ابدأ جميع الوحدات مرة واحدة.
+فقط انقر على زر التشغيل بجانب "rag" لبدء هذه الوحدة، أو ابدأ جميع الوحدات دفعة واحدة.
-
+
-*تُظهر هذه اللقطة شاشة لوحة تحكم Spring Boot في VS Code، حيث يمكنك بدء وإيقاف ومراقبة التطبيقات بصريًا.*
+*تُظهر هذه اللقطة شاشة لوحة تحكم Spring Boot في VS Code، حيث يمكنك بدء التطبيقات وإيقافها ومراقبتها بصريًا.*
-**الخيار 2: استخدام سكربتات الشيل**
+**الخيار 2: استخدام سكربتات الشِل**
ابدأ جميع تطبيقات الويب (الوحدات 01-04):
-**Bash:**
+**بـاش:**
```bash
-cd .. # من دليل الجذر
+cd .. # من الدليل الجذري
./start-all.sh
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
-cd .. # من الدليل الجذري
+cd .. # من الدليل الجذر
.\start-all.ps1
```
-
+
أو ابدأ هذه الوحدة فقط:
-**Bash:**
+**بـاش:**
```bash
cd 03-rag
./start.sh
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
cd 03-rag
.\start.ps1
```
-
-كلا السكربتين يقوم تلقائيًا بتحميل متغيرات البيئة من ملف `.env` الجذري وسيبني ملفات JAR إذا لم تكن موجودة.
+
+يقوم كلا السكربتين بتحميل متغيرات البيئة تلقائيًا من ملف `.env` الجذري وسيبني ملفات JAR إذا لم تكن موجودة.
> **ملاحظة:** إذا كنت تفضل بناء جميع الوحدات يدويًا قبل البدء:
>
-> **Bash:**
+> **بـاش:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-
-> **PowerShell:**
+>
+> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-
+
افتح http://localhost:8081 في متصفحك.
-**لإيقاف التطبيق:**
+**لإيقاف التشغيل:**
-**Bash:**
+**بـاش:**
```bash
./stop.sh # هذا الوحدة فقط
# أو
-cd .. && ./stop-all.sh # جميع الوحدات
+cd .. && ./stop-all.sh # كل الوحدات
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
-.\stop.ps1 # هذا الوحدة فقط
+.\stop.ps1 # هذا الموديول فقط
# أو
-cd ..; .\stop-all.ps1 # كل الوحدات
+cd ..; .\stop-all.ps1 # جميع الموديولات
```
-
## استخدام التطبيق
-يوفر التطبيق واجهة ويب لتحميل المستندات وطرح الأسئلة.
+يقدم التطبيق واجهة ويب لتحميل المستندات وطرح الأسئلة.
-
+
-*توضح هذه اللقطة شاشة واجهة تطبيق RAG حيث تقوم بتحميل المستندات وطرح الأسئلة.*
+*تُظهر هذه اللقطة شاشة واجهة تطبيق RAG حيث تقوم بتحميل المستندات وطرح الأسئلة.*
-### تحميل مستند
+### رفع مستند
-ابدأ بتحميل مستند - ملفات TXT تعمل بشكل أفضل للاختبار. يوفر هذا الدليل ملف `sample-document.txt` يحتوي على معلومات حول ميزات LangChain4j وتنفيذ RAG وأفضل الممارسات — مثالي لاختبار النظام.
+ابدأ برفع مستند — ملفات TXT هي الأفضل للاختبار. تم توفير `sample-document.txt` في هذا الدليل يحتوي على معلومات حول ميزات LangChain4j، وتنفيذ RAG، وأفضل الممارسات — مثالي لاختبار النظام.
-يقوم النظام بمعالجة مستندك، وتقسيمه إلى قطع، وإنشاء تضمينات لكل قطعة. يحدث هذا تلقائيًا عند التحميل.
+يقوم النظام بمعالجة مستندك، وتقسيمه إلى أجزاء، وإنشاء تضمينات لكل جزء. يتم ذلك تلقائيًا عند الرفع.
### طرح الأسئلة
-اطرح الآن أسئلة محددة حول محتوى المستند. جرّب شيئًا واقعيًا مذكورًا بوضوح في المستند. يبحث النظام عن القطع ذات الصلة، ويضمنها في المطالبة، ويولد الإجابة.
+الآن اطرح أسئلة محددة حول محتوى المستند. جرب شيئًا واقعيًا مذكورًا بوضوح في المستند. يبحث النظام عن الأجزاء ذات الصلة، ويضمّنها في الموجه، ثم يولد إجابة.
-### التحقق من مراجع المصدر
+### تحقق من مراجع المصادر
-لاحظ أن كل إجابة تتضمن مراجع للمصدر مع درجات التشابه. تظهر هذه الدرجات (من 0 إلى 1) مدى ملاءمة كل قطعة لسؤالك. الدرجات الأعلى تعني تطابقًا أفضل. هذا يتيح لك التحقق من الإجابة مقابل المادة المصدرية.
+لاحظ أن كل إجابة تتضمن مراجع مصادر مع درجات التشابه. تظهر هذه الدرجات (من 0 إلى 1) مدى صلة كل جزء بسؤالك. الدرجات الأعلى تعني تطابقًا أفضل. هذا يتيح لك التحقق من الإجابة مقابل المواد المصدرية.
-
+
-*تُظهر هذه اللقطة شاشة نتائج الاستعلام مع الإجابة المولدة، ومراجع المصدر، ودرجات الصلة لكل قطعة مسترجعة.*
+*تُظهر هذه اللقطة شاشة نتائج الاستعلام مع الإجابة المولدة، مراجع المصادر، ودرجات الصلة لكل جزء مسترجَع.*
-### جرب أنواعًا مختلفة من الأسئلة
+### جرب بأسئلة متنوعة
-جرّب أنواعًا مختلفة من الأسئلة:
-- حقائق محددة: "ما هو الموضوع الرئيسي؟"
-- مقارنات: "ما الفرق بين X و Y؟"
-- ملخصات: "لخص النقاط الرئيسية حول Z"
+جرب أنواعًا مختلفة من الأسئلة:
+- حقائق محددة: "ما الموضوع الرئيسي؟"
+- مقارنات: "ما الفرق بين X و Y ؟"
+- ملخصات: "لخص النقاط الرئيسية عن Z"
-راقب كيف تتغير درجات الصلة بناءً على مدى تطابق سؤالك مع محتوى المستند.
+شاهد كيف تتغير درجات الصلة بناءً على مدى تطابق سؤالك مع محتوى المستند.
## المفاهيم الرئيسية
-### استراتيجية تقسيم القطع
+### استراتيجية التقسيم إلى أجزاء
-يتم تقسيم المستندات إلى قطع تحتوي على 300 رمز مع تداخل 30 رمزًا. يضمن هذا التوازن أن تحتوي كل قطعة على سياق كافٍ لتكون ذات معنى بينما تبقى صغيرة بما يكفي لتضمين قطع متعددة في مطالبة.
+يتم تقسيم المستندات إلى أجزاء مكونة من 300 رمز مع تداخل 30 رمزًا. هذا التوازن يضمن أن كل جزء لديه سياق كاف ليكون ذا معنى مع بقائه صغيرًا بما يكفي لتضمين عدة أجزاء في الموجه.
### درجات التشابه
-كل قطعة مسترجعة تأتي مع درجة تشابه بين 0 و 1 تشير إلى مدى تطابقها مع سؤال المستخدم. توضح الرسمة أدناه نطاقات الدرجات وكيف يستخدمها النظام لتصفية النتائج:
+كل جزء مسترجع يأتي مع درجة تشابه بين 0 و 1 تشير إلى مدى قرب تطابقه مع سؤال المستخدم. يوضح المخطط أدناه نطاقات الدرجات وكيف يستخدمها النظام لتصفية النتائج:
-
+
-*تُظهر هذه الرسمة نطاقات الدرجات من 0 إلى 1، مع عتبة دنيا 0.5 التي تصفي القطع غير ذات الصلة.*
+*يُظهر هذا المخطط نطاقات الدرجات من 0 إلى 1، مع حد أدنى 0.5 لتصفية الأجزاء غير ذات الصلة.*
-تتراوح الدرجات من 0 إلى 1:
-- 0.7-1.0: ذات صلة عالية، تطابق دقيق
-- 0.5-0.7: ذات صلة، سياق جيد
-- أقل من 0.5: تم تصفيتها، غير متشابهة بما فيه الكفاية
+تتراوح الدرجات من 0 إلى 1:
+- 0.7-1.0: ذات صلة عالية، تطابق دقيق
+- 0.5-0.7: ذات صلة، سياق جيد
+- أقل من 0.5: تم تصفيتها، غير متشابهة كفاية
-يسترجع النظام فقط القطع التي تتجاوز العتبة الدنيا لضمان الجودة.
+يسترجع النظام فقط الأجزاء التي تتجاوز الحد الأدنى لضمان جودة.
-تعمل التضمينات جيدًا عندما تتجمع المعاني بوضوح، لكنها لها نقاط ضعف. توضح الرسمة أدناه أوضاع الفشل الشائعة — القطع الكبيرة جدًا تنتج متجهات غير واضحة، والقطع الصغيرة جدًا تفتقر للسياق، والمصطلحات الغامضة تشير إلى عدة تجمعات، والبحث المطابق تمامًا (معرفات، أرقام أجزاء) لا يعمل مع التضمينات على الإطلاق:
+تعمل التضمينات جيدًا عندما تتجمع المعاني بوضوح، لكنها تحتوي على نقاط عمياء. يُظهر المخطط أدناه أوضاع الفشل الشائعة — الأجزاء الكبيرة جدًا تنتج متجهات غير واضحة، الأجزاء الصغيرة جدًا تفتقر للسياق، المصطلحات المبهمة تشير إلى عدة تجمعات، والبحث بالمطابقة الحرفية (المعرفات، أرقام الأجزاء) لا يعمل مع التضمينات على الإطلاق:
-
+
-*تُظهر هذه الرسمة أوضاع الفشل الشائعة في التضمين: قطع كبيرة جدًا، قطع صغيرة جدًا، مصطلحات غامضة تشير إلى تجمعات متعددة، والبحث المطابق تمامًا مثل المعرفات.*
+*يُظهر هذا المخطط أوضاع الفشل الشائعة في التضمين: أجزاء كبيرة جدًا، أجزاء صغيرة جدًا، مصطلحات غامضة تشير إلى عدة تجمعات، وبحث المطابقة الحرفية مثل المعرفات.*
### التخزين في الذاكرة
-تستخدم هذه الوحدة التخزين في الذاكرة للبساطة. عند إعادة تشغيل التطبيق، تفقد المستندات المحملة. تستخدم أنظمة الإنتاج قواعد بيانات متجهات دائمة مثل Qdrant أو Azure AI Search.
+يستخدم هذا الموديول التخزين في الذاكرة للبساطة. عند إعادة تشغيل التطبيق، تُفقد المستندات المحملة. تستخدم أنظمة الإنتاج قواعد بيانات متجهات دائمة مثل Qdrant أو Azure AI Search.
### إدارة نافذة السياق
-لكل نموذج حد أقصى لنافذة السياق. لا يمكنك تضمين كل قطعة من مستند كبير. يسترجع النظام أفضل N قطع ذات صلة (الافتراضي 5) ليبقى ضمن الحدود مع توفير سياق كافٍ لإجابات دقيقة.
+لكل نموذج حد أقصى لنافذة السياق. لا يمكنك تضمين كل جزء من مستند كبير. يسترجع النظام أعلى N أجزاء صلة (افتراضي 5) للبقاء ضمن الحدود مع توفير سياق كافٍ لإجابات دقيقة.
## متى يكون RAG مهمًا
-ليس RAG دائمًا النهج الصحيح. يساعدك دليل القرار أدناه على تحديد متى يضيف RAG قيمة مقابل متى تكون الأساليب الأبسط — مثل تضمين المحتوى مباشرة في المطالبة أو الاعتماد على المعرفة المدمجة في النموذج — كافية:
+لا يكون RAG دائمًا النهج المناسب. يساعدك دليل القرار أدناه على تحديد متى يضيف RAG قيمة مقابل متى تكون الطرق الأبسط — مثل تضمين المحتوى مباشرة في الموجه أو الاعتماد على معرفة النموذج المدمجة — كافية:
-
+
-*تُظهر هذه الرسمة دليل قرار لمتى يضيف RAG قيمة مقابل متى تكون الأساليب الأبسط كافية.*
+*يُظهر هذا المخطط دليل قرار لمتى يضيف RAG قيمة مقابل متى تكون الطرق الأبسط كافية.*
## الخطوات التالية
@@ -428,11 +426,11 @@ cd ..; .\stop-all.ps1 # كل الوحدات
---
-**التنقل:** [← السابق: الوحدة 02 - هندسة المطالبة](../02-prompt-engineering/README.md) | [عودة إلى الرئيسي](../README.md) | [التالي: الوحدة 04 - الأدوات →](../04-tools/README.md)
+**التنقل:** [← السابق: الوحدة 02 - هندسة الموجه](../02-prompt-engineering/README.md) | [العودة للرئيسية](../README.md) | [التالي: الوحدة 04 - الأدوات →](../04-tools/README.md)
---
-**إخلاء المسؤولية**:
-تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بالرغم من حرصنا على الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق والمعتمد. بالنسبة للمعلومات الهامة، يُنصح بالاعتماد على الترجمة الاحترافية من قبل مترجم بشري. نحن غير مسؤولين عن أي سوء فهم أو تفسير خاطئ قد ينشأ بسبب استخدام هذه الترجمة.
+**تنويه**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/04-tools/README.md b/translations/ar/04-tools/README.md
index 7d1a52d55..a5f1aead5 100644
--- a/translations/ar/04-tools/README.md
+++ b/translations/ar/04-tools/README.md
@@ -1,84 +1,84 @@
-# الوحدة 04: الوكلاء الذكاء الاصطناعي مع الأدوات
+# الوحدة 04: وكلاء الذكاء الاصطناعي مع الأدوات
## جدول المحتويات
-- [الجولة التوضيحية بالفيديو](../../../04-tools)
-- [ما ستتعلمه](../../../04-tools)
-- [المتطلبات الأساسية](../../../04-tools)
-- [فهم وكلاء الذكاء الاصطناعي مع الأدوات](../../../04-tools)
-- [كيف يعمل استدعاء الأدوات](../../../04-tools)
- - [تعريفات الأدوات](../../../04-tools)
- - [اتخاذ القرار](../../../04-tools)
- - [التنفيذ](../../../04-tools)
- - [توليد الاستجابة](../../../04-tools)
- - [البنية: التوصيل التلقائي في Spring Boot](../../../04-tools)
-- [سلسلة الأدوات](../../../04-tools)
-- [تشغيل التطبيق](../../../04-tools)
-- [استخدام التطبيق](../../../04-tools)
- - [تجربة استخدام أداة بسيطة](../../../04-tools)
- - [اختبار سلسلة الأدوات](../../../04-tools)
- - [مشاهدة تدفق المحادثة](../../../04-tools)
- - [تجربة طلبات مختلفة](../../../04-tools)
-- [المفاهيم الرئيسية](../../../04-tools)
- - [نمط ReAct (التفكير والفعل)](../../../04-tools)
- - [أهمية وصف الأدوات](../../../04-tools)
- - [إدارة الجلسة](../../../04-tools)
- - [التعامل مع الأخطاء](../../../04-tools)
-- [الأدوات المتاحة](../../../04-tools)
-- [متى تستخدم الوكلاء المعتمدين على الأدوات](../../../04-tools)
-- [الأدوات مقابل RAG](../../../04-tools)
-- [الخطوات التالية](../../../04-tools)
-
-## الجولة التوضيحية بالفيديو
-
-شاهد هذه الجلسة المباشرة التي تشرح كيفية البدء مع هذه الوحدة:
+- [مرور فيديو](#video-walkthrough)
+- [ما الذي ستتعلمه](#what-youll-learn)
+- [المتطلبات المسبقة](#prerequisites)
+- [فهم وكلاء الذكاء الاصطناعي مع الأدوات](#understanding-ai-agents-with-tools)
+- [كيف يعمل استدعاء الأداة](#how-tool-calling-works)
+ - [تعريفات الأدوات](#tool-definitions)
+ - [اتخاذ القرار](#decision-making)
+ - [التنفيذ](#execution)
+ - [توليد الاستجابة](#response-generation)
+ - [الهيكلية: الربط التلقائي في Spring Boot](#architecture-spring-boot-auto-wiring)
+- [ربط الأدوات](#tool-chaining)
+- [تشغيل التطبيق](#run-the-application)
+- [استخدام التطبيق](#استخدام-التطبيق)
+ - [تجربة استخدام أداة بسيطة](#جرب-استخدام-أداة-بسيطة)
+ - [اختبار ربط الأدوات](#اختبر-ربط-الأدوات)
+ - [رؤية تدفق المحادثة](#شاهد-سير-المحادثة)
+ - [تجربة طلبات مختلفة](#جرب-طلبات-مختلفة)
+- [المفاهيم الأساسية](#المفاهيم-الرئيسية)
+ - [نمط ReAct (التفكير والفعل)](#نمط-react-التفكير-والعمل)
+ - [أهمية أوصاف الأدوات](#وصف-الأدوات-مهم)
+ - [إدارة الجلسة](#إدارة-الجلسات)
+ - [التعامل مع الأخطاء](#التعامل-مع-الأخطاء)
+- [الأدوات المتاحة](#الأدوات-المتاحة)
+- [متى تستخدم الوكلاء المعتمدين على الأدوات](#متى-تستخدم-وكلاء-قائمين-على-الأدوات)
+- [الأدوات مقابل RAG](#الأدوات-مقابل-نظام-الاسترجاع-والاستدلال-rag)
+- [الخطوات التالية](#الخطوات-التالية)
+
+## Video Walkthrough
+
+شاهد هذا الجلسة المباشرة التي تشرح كيفية البدء مع هذه الوحدة:
-## ما ستتعلمه
+## What You'll Learn
-حتى الآن، تعلمت كيفية إجراء محادثات مع الذكاء الاصطناعي، وكيفية بناء المطالبات بشكل فعال، وربط الاستجابات بوثائقك. لكن لا يزال هناك قيد أساسي: نماذج اللغة يمكنها فقط توليد النصوص. لا يمكنها التحقق من الطقس، أو إجراء الحسابات، أو الاستعلام عن قواعد البيانات، أو التفاعل مع الأنظمة الخارجية.
+حتى الآن، تعلمت كيف تجري محادثات مع الذكاء الاصطناعي، وكيف تهيكل المطالبات بفعالية، وتربط الاستجابات بوثائقك. ولكن هناك قيد أساسي: نماذج اللغة يمكنها فقط توليد النصوص. لا يمكنها التحقق من الطقس، أو إجراء حسابات، أو الاستعلام في قواعد البيانات، أو التفاعل مع الأنظمة الخارجية.
-الأدوات تغير هذا. من خلال تزويد النموذج بوصول إلى دوال يمكن استدعاؤها، تتحول من مولد نصوص إلى وكيل يمكنه اتخاذ إجراءات. يقرر النموذج متى يحتاج إلى أداة، وأي أداة يستخدم، وما المعاملات التي يمررها. يقوم الكود الخاص بك بتنفيذ الدالة وإرجاع النتيجة. يدمج النموذج تلك النتيجة في استجابته.
+الأدوات تغير هذا. من خلال منح النموذج إمكانية الوصول إلى دوال يمكنه استدعاؤها، تحول النموذج من مولد نص إلى وكيل يمكنه اتخاذ إجراءات. يقرر النموذج متى يحتاج إلى أداة، أي أداة يستخدم، وما هي المعلمات التي يمررها. ينفذ الكود الخاص بك الدالة ويعيد النتيجة. يدمج النموذج تلك النتيجة في استجابته.
-## المتطلبات الأساسية
+## Prerequisites
- إكمال [الوحدة 01 - المقدمة](../01-introduction/README.md) (تم نشر موارد Azure OpenAI)
-- يُنصح بإكمال الوحدات السابقة (تشير هذه الوحدة إلى [مفاهيم RAG من الوحدة 03](../03-rag/README.md) في مقارنة الأدوات مقابل RAG)
+- إكمال الوحدات السابقة موصى به (تشير هذه الوحدة إلى [مفاهيم RAG من الوحدة 03](../03-rag/README.md) في مقارنة الأدوات مقابل RAG)
- وجود ملف `.env` في الدليل الجذري مع بيانات اعتماد Azure (تم إنشاؤه بواسطة `azd up` في الوحدة 01)
> **ملاحظة:** إذا لم تكمل الوحدة 01، فاتبع تعليمات النشر هناك أولاً.
-## فهم وكلاء الذكاء الاصطناعي مع الأدوات
+## Understanding AI Agents with Tools
-> **📝 ملاحظة:** مصطلح "الوكلاء" في هذه الوحدة يشير إلى مساعدين ذكيين تم تعزيزهم بقدرات استدعاء الأدوات. وهذا يختلف عن أنماط **Agentic AI** (الوكلاء المستقلون مع التخطيط، والذاكرة، والتفكير متعدد الخطوات) التي سنغطيها في [الوحدة 05: MCP](../05-mcp/README.md).
+> **📝 ملاحظة:** مصطلح "وكلاء" في هذه الوحدة يشير إلى مساعدين ذكيين معززین بإمكانات استدعاء الأدوات. هذا يختلف عن أنماط **Agentic AI** (وكلاء مستقلون مع تخطيط وذاكرة وتفكير متعدد الخطوات) التي سنتناولها في [الوحدة 05: MCP](../05-mcp/README.md).
-بدون أدوات، يمكن لنموذج اللغة فقط توليد النص من بيانات تدريبه. اسأله عن الطقس الحالي، وسيضطر للتخمين. أعطه أدوات، فيمكنه استدعاء API للطقس، أو إجراء الحسابات، أو الاستعلام في قاعدة بيانات — ثم يدمج تلك النتائج الحقيقية في استجابته.
+بدون أدوات، يمكن لنموذج اللغة فقط توليد النص من بيانات التدريب. اسأله عن الطقس الحالي، وعليه التخمين. زوده بالأدوات، ويمكنه استدعاء API الطقس، إجراء الحسابات، أو الاستعلام في قاعدة بيانات — ثم يدمج تلك النتائج الحقيقية في استجابته.
-*بدون أدوات، يمكن للنموذج فقط التخمين — مع الأدوات يمكنه استدعاء APIs، إجراء الحسابات، وإرجاع بيانات في الوقت الفعلي.*
+*بدون أدوات، النموذج يخمن فقط — مع الأدوات يمكنه استدعاء APIs، إجراء حسابات، وإرجاع بيانات في الوقت الحقيقي.*
-وكيل الذكاء الاصطناعي مع الأدوات يتبع نمط **ReAct (التفكير والفعل)**. النموذج لا يكتفي بالرد — بل يفكر فيما يحتاجه، يتصرف باستدعاء أداة، يلاحظ النتيجة، ثم يقرر ما إذا كان سيتصرف مجددًا أو يقدّم الإجابة النهائية:
+وكيل الذكاء الاصطناعي مع الأدوات يتبع نمط **التفكير والفعل (ReAct)**. النموذج لا يكتفي بالاستجابة — بل يفكر فيما يحتاجه، يتصرف عبر استدعاء أداة، يلاحظ النتيجة، ثم يقرر ما إذا كان عليه التصرف مرة أخرى أو تقديم الإجابة النهائية:
-1. **التفكير** — يحلل الوكيل سؤال المستخدم ويحدد ما هي المعلومات التي يحتاجها
-2. **الفعل** — يختار الوكيل الأداة الصحيحة، يولد المعاملات المناسبة، ويستدعيها
-3. **الملاحظة** — يتلقى الوكيل خرج الأداة ويقيّم النتيجة
-4. **التكرار أو الرد** — إذا كانت البيانات الإضافية ضرورية، يعود الوكيل إلى البداية؛ وإلا، يصيغ إجابة بلغة طبيعية
+1. **التفكير** — يحلل الوكيل سؤال المستخدم ويحدد المعلومات التي يحتاجها
+2. **التصرف** — يختار الوكيل الأداة الصحيحة، يولد المعلمات الصحيحة، ويستدعيها
+3. **المراقبة** — يتلقى الوكيل مخرجات الأداة ويقيّم النتيجة
+4. **التكرار أو الرد** — إذا كانت هناك حاجة لمزيد من المعلومات، يعود الوكيل للحلقة؛ وإلا يؤلف إجابة بلغة طبيعية
-*دورة ReAct — الوكيل يفكر في ما عليه فعله، يتصرف باستدعاء أداة، يلاحظ النتيجة، ويكرر حتى يقدم الإجابة النهائية.*
+*دورة ReAct — الوكيل يفكر في ما يجب فعله، يتصرف باستدعاء أداة، يراقب النتيجة، ويكرر حتى يستطيع تقديم الإجابة النهائية.*
-يحدث هذا تلقائيًا. تقوم بتعريف الأدوات وأوصافها. يتولى النموذج اتخاذ القرار حول متى وكيف يستخدمها.
+يحدث هذا تلقائيًا. تقوم بتعريف الأدوات وأوصافها. النموذج يتولى اتخاذ القرار حول متى وكيف يستخدمها.
-## كيف يعمل استدعاء الأدوات
+## How Tool Calling Works
-### تعريفات الأدوات
+### Tool Definitions
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-تعرف الدوال بوصف واضح ومواصفات المعاملات. يرى النموذج هذه الأوصاف داخل موجه النظام ويفهم ما تقوم به كل أداة.
+تعرف دوالًا بأوصاف واضحة ومواصفات المعلمات. يرى النموذج هذه الأوصاف في طلب النظام ويفهم ما تقوم به كل أداة.
```java
@Component
@@ -96,147 +96,147 @@ public interface Assistant {
String chat(@MemoryId String sessionId, @UserMessage String message);
}
-// يتم توصيل المساعد تلقائيًا بواسطة Spring Boot مع:
-// - عنصر ChatModel
+// يتم ربط المساعد تلقائيًا بواسطة Spring Boot مع:
+// - مكون ChatModel
// - جميع طرق @Tool من فئات @Component
// - مزود ChatMemory لإدارة الجلسات
```
-
-يوضح الرسم التخطيطي أدناه كل تعليق توضيحي ويشرح كيف يساعد كل جزء الذكاء الاصطناعي على فهم متى يستدعي الأداة وما هي المعاملات التي يجب تمريرها:
+
+يوضح المخطط أدناه كل توضيح ويبيّن كيف يساعد كل جزء الذكاء الاصطناعي على معرفة متى يستدعي الأداة وأي المعلمات يمرر:
-*تشريح تعريف الأداة — @Tool تخبر الذكاء الاصطناعي متى يستخدمها، @P تصف كل معامل، و @AiService توصل كل شيء تلقائيًا عند بدء التشغيل.*
+*تشريح تعريف أداة — @Tool يخبر الذكاء الاصطناعي متى يستخدمها، @P يصف كل معلمة، و @AiService يربط كل شيء معًا عند بدء التشغيل.*
-> **🤖 جرب مع [GitHub Copilot](https://github.com/features/copilot) Chat:** افتح [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) واسأل:
-> - "كيف أدمج API حقيقي للطقس مثل OpenWeatherMap بدلًا من البيانات الوهمية؟"
-> - "ما الذي يجعل وصف الأداة جيدًا ويساعد الذكاء الاصطناعي على استخدامها بشكل صحيح؟"
-> - "كيف أتعامل مع أخطاء API وحدود المعدل في تنفيذ الأدوات؟"
+> **🤖 جرّب مع [GitHub Copilot](https://github.com/features/copilot) Chat:** افتح [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) واسأل:
+> - "كيف أدمج API طقس حقيقي مثل OpenWeatherMap بدلًا من بيانات وهمية؟"
+> - "ما الذي يجعل وصف الأداة جيدًا ويساعد الذكاء الاصطناعي على استخدامها بشكل صحيح؟"
+> - "كيف أتعامل مع أخطاء API وحدود الاستخدام في تنفيذ الأدوات؟"
-### اتخاذ القرار
+### Decision Making
-عندما يسأل المستخدم "ما هو الطقس في سياتل؟"، لا يختار النموذج أداة عشوائيًا. يقارن نية المستخدم مع كل وصف أداة متاح لديه، ويقيم كل واحد من حيث الصلة، ويختار الأنسب. ثم يولد استدعاء دالة منسقًا بالمعاملات الصحيحة — في هذه الحالة، يضبط `location` إلى `"Seattle"`.
+عندما يسأل المستخدم "ما حالة الطقس في سياتل؟"، لا يختار النموذج أداة عشوائياً. يقارن نية المستخدم مع كل وصف أداة متاح، يقيم كل واحدة من حيث الصلة، ويختار التطابق الأفضل. ثم يولد استدعاء دالة منظم مع المعلمات الصحيحة — في هذه الحالة، تعيين `location` إلى `"Seattle"`.
-إذا لم تطابق أية أداة طلب المستخدم، يلجأ النموذج للإجابة من معارفه. إذا طابقت عدة أدوات، يختار الأداة الأكثر تحديدًا.
+إذا لم يتطابق أي أداة مع طلب المستخدم، يعود النموذج ليجيب من معرفته الخاصة. إذا تطابق عدة أدوات، يختار الأكثر تحديدًا.
-*يقيم النموذج كل أداة متاحة مقابل نية المستخدم ويختار الأنسب — لهذا السبب كتابة وصف واضح ومحدد للأدوات مهمة.*
+*النموذج يقيم كل أداة متاحة مقابل نية المستخدم ويختار أفضل تطابق — لذلك فإن كتابة أوصاف أدوات واضحة ومحددة مهمة.*
-### التنفيذ
+### Execution
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-يعتمد Spring Boot التوصيل التلقائي بين واجهة `@AiService` التصريحية وجميع الأدوات المسجلة، وينفذ LangChain4j استدعاءات الأدوات تلقائيًا. خلف الكواليس، يمر استدعاء الأداة الكامل بست مراحل — من سؤال المستخدم بلغة طبيعية حتى إجابة بلغة طبيعية:
+يقوم Spring Boot بالربط التلقائي لواجهة `@AiService` التصريحية مع كل الأدوات المسجلة، وينفذ LangChain4j استدعاءات الأدوات تلقائيًا. خلف الكواليس، يمر استدعاء الأداة بمرحلة كاملة من ست مراحل — من سؤال المستخدم بلغة طبيعية حتى الرد بلغة طبيعية:
-
+
-*تدفق من البداية إلى النهاية — يطرح المستخدم سؤالاً، يختار النموذج أداة، ينفذ LangChain4j أداة، ثم يدمج النموذج النتيجة في استجابة طبيعية.*
+*التدفق من البداية للنهاية — المستخدم يطرح سؤالًا، النموذج يختار أداة، LangChain4j ينفذها، والنموذج يدمج النتيجة في رد طبيعي.*
-إذا شغلت [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) في الوحدة 00، فقد شاهدت هذا النمط فعليًا — حيث تم استدعاء أدوات `Calculator` بنفس الطريقة. يوضح مخطط التسلسل أدناه ما حدث تحت الكواليس أثناء تلك التجربة:
+خلف الكواليس، تقوم `AiServices` بتشغيل دورة استدعاء الأداة نفسها لأي أداة — هنا موضحة بـ `Calculator` بسيطة. يوضح مخطط التسلسل أدناه بالضبط ما يحدث تحت الغطاء:
-
+
-*حلقة استدعاء الأداة من تجربة البدء السريع — `AiServices` يرسل رسالتك ومخططات الأدوات إلى نموذج اللغة الكبير، ويرد النموذج باستدعاء دالة مثل `add(42, 58)`, ثم ينفذ LangChain4j دالة `Calculator` محليًا، ويرجع النتيجة للإجابة النهائية.*
+*دورة استدعاء الأداة — `AiServices` يرسل رسالتك ومخططات الأداة إلى LLM، ويرد LLM باستدعاء دالة مثل `add(42, 58)`, LangChain4j ينفذ دالة `Calculator` محليًا، ويرسل النتيجة إلى الجواب النهائي.*
-> **🤖 جرب مع [GitHub Copilot](https://github.com/features/copilot) Chat:** افتح [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) واسأل:
-> - "كيف يعمل نمط ReAct ولماذا هو فعال لوكلاء الذكاء الاصطناعي؟"
-> - "كيف يقرر الوكيل أي أداة يستخدم وبأي ترتيب؟"
-> - "ماذا يحدث إذا فشل تنفيذ أداة – كيف أتعامل مع الأخطاء بشكل قوي؟"
+> **🤖 جرّب مع [GitHub Copilot](https://github.com/features/copilot) Chat:** افتح [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) واسأل:
+> - "كيف يعمل نمط ReAct ولماذا هو فعال لوكلاء الذكاء الاصطناعي؟"
+> - "كيف يقرر الوكيل أي أداة يستخدم وبأي ترتيب؟"
+> - "ماذا يحدث إذا فشل تنفيذ أداة - كيف أتعامل مع الأخطاء بطريقة قوية؟"
-### توليد الاستجابة
+### Response Generation
-يتلقى النموذج بيانات الطقس ويحوّلها إلى استجابة بلغة طبيعية للمستخدم.
+يستلم النموذج بيانات الطقس ويصيغها في رد بلغة طبيعية للمستخدم.
-### البنية: التوصيل التلقائي في Spring Boot
+### Architecture: Spring Boot Auto-Wiring
-تستخدم هذه الوحدة تكامل LangChain4j مع Spring Boot عبر واجهات `@AiService` التصريحية. عند بدء التشغيل، يكتشف Spring Boot كل `@Component` الذي يحتوي على طرق `@Tool`، حمولة `ChatModel`، وموفر الذاكرة `ChatMemoryProvider` — ثم يربطهم كلهم ضمن واجهة `Assistant` واحدة بدون أي شيفرة تمهيدية (boilerplate).
+تستخدم هذه الوحدة تكامل LangChain4j مع Spring Boot عبر واجهات `@AiService` التصريحية. عند بدء التشغيل، يكتشف Spring Boot كل `@Component` يحتوي على دوال `@Tool`، وقطعة `ChatModel`، ومزود الذاكرة `ChatMemoryProvider` — ثم يربطها جميعًا في واجهة `Assistant` واحدة بدون أي شيفرة تكرارية.
-
+
-*واجهة @AiService تربط ChatModel، مكونات الأدوات، وموفر الذاكرة — Spring Boot يدير كل التوصيلات تلقائيًا.*
+*واجهة @AiService تربط معًا ChatModel، مكونات الأدوات، ومزود الذاكرة — وSpring Boot يتولى كل الربط تلقائيًا.*
-إليك دورة حياة الطلب كاملة كمخطط تسلسلي — من طلب HTTP عبر المتحكم (controller) والخدمة والوكيل المتصل تلقائيًا، وصولًا إلى تنفيذ الأداة والعودة:
+ها هي دورة حياة الطلب كاملةً في مخطط تسلسل — من طلب HTTP مرورًا بالتحكم، الخدمة، والوكيل المرتبط تلقائيًا، وحتى تنفيذ الأداة والعودة:
-
+
-*دورة حياة طلب Spring Boot كاملة — طلب HTTP يمر عبر المتحكم والخدمة إلى وكيل Assistant الموصل تلقائيًا، الذي ينظم نموذج اللغة الكبير واستدعاءات الأدوات تلقائيًا.*
+*دورة حياة طلب Spring Boot كاملة — طلب HTTP يمر عبر المتحكم والخدمة إلى وكيل Assistant المرتبط تلقائيًا، الذي يدير LLM واستدعاءات الأدوات تلقائيًا.*
-مزايا هذا النهج الرئيسية:
+الفوائد الرئيسية لهذا النهج:
-- **التوصيل التلقائي في Spring Boot** — حقن ChatModel والأدوات تلقائيًا
-- **نمط @MemoryId** — إدارة الذاكرة الجلسية تلقائيًا
-- **مثيل واحد** — يتم إنشاء المساعد مرة واحدة ويعاد استخدامه لتحسين الأداء
-- **تنفيذ آمن نوعيًا** — استدعاء طرق Java مباشرة مع تحويل النوع
-- **تنسيق متعدد الأدوار** — يدير سلسة الأدوات تلقائيًا
-- **لا كود تمهيدي** — لا حاجة لاستدعاءات `AiServices.builder()` يدوية أو جداول HashMap للذاكرة
+- **الربط التلقائي في Spring Boot** — حقن ChatModel والأدوات تلقائيًا
+- **نمط @MemoryId** — إدارة الذاكرة المبنية على الجلسة تلقائيًا
+- **نسخة واحدة** — إنشاء Assistant مرة واحدة وإعادة استخدامها لأداء أفضل
+- **تنفيذ آمن نوعيًا** — استدعاء دوال جافا مباشرة مع تحويل نوع المعطيات
+- **تنسيق متعدد الجولات** — يتعامل تلقائيًا مع ربط الأدوات
+- **صفر شيفرة تكرارية** — لا حاجة لاستدعاءات يدوية لـ `AiServices.builder()` أو HashMap للذاكرة
-الطرق البديلة (استخدام `AiServices.builder()` يدويًا) تتطلب شيفرة أكثر وتفتقد مزايا تكامل Spring Boot.
+النهج البديلة (اليدوية عبر `AiServices.builder()`) تتطلب مزيدًا من الشيفرة وتفتقد فوائد تكامل Spring Boot.
-## سلسلة الأدوات
+## Tool Chaining
-**سلسلة الأدوات** — القوة الحقيقية للوكلاء المعتمدين على الأدوات تظهر عندما يتطلب سؤال واحد استخدام أدوات متعددة. اسأل "ما هو الطقس في سياتل بالفهرنهايت؟" والوكيل يربط تلقائيًا أداتين: أولًا يستدعي `getCurrentWeather` للحصول على درجة الحرارة بالسيليزي، ثم يمرر تلك القيمة إلى `celsiusToFahrenheit` للتحويل — كل ذلك في جولة محادثة واحدة.
+**ربط الأدوات** — القوة الحقيقية للوكلاء المعتمدين على الأدوات تظهر عندما يتطلب سؤال واحد عدة أدوات. اسأل "ما حالة الطقس في سياتل بالفهرنهايت؟" وسيقوم الوكيل تلقائيًا بربط أداتين: أولًا يستدعي `getCurrentWeather` للحصول على درجة الحرارة بالسيليزيوس، ثم يمرر تلك القيمة إلى `celsiusToFahrenheit` للتحويل — كل ذلك في جولة محادثة واحدة.
-
+
-*سلسلة الأدوات قيد التنفيذ — الوكيل يستدعي getCurrentWeather أولًا، ثم يمرر نتيجة السيليزي إلى celsiusToFahrenheit، ويقدم إجابة مدمجة.*
+*ربط الأدوات في العمل — الوكيل يستدعي getCurrentWeather أولًا، ثم يمرر النتيجة بالسيليزي إلى celsiusToFahrenheit، ويقدم إجابة مجمعة.*
-**التعامل الراقي مع الفشل** — اطلب حالة الطقس في مدينة غير موجودة ضمن البيانات الوهمية. ترجع الأداة رسالة خطأ، ويشرح الذكاء الاصطناعي أنه لا يمكنه المساعدة بدلاً من تعطل التطبيق. تفشل الأدوات بأمان. الرسم أدناه يقارن بين الطريقتين — مع التعامل الصحيح مع الأخطاء، يلتقط الوكيل الاستثناء ويستجيب مع توضيح مفيد، بينما بدون ذلك يتعطل التطبيق بأكمله:
+**الفشل اللطيف** — اطلب حالة الطقس في مدينة غير موجودة في بيانات النموذج الوهمية. ترجع الأداة رسالة خطأ، ويشرح الذكاء الاصطناعي أنه لا يمكنه المساعدة بدلاً من التعطل. الأدوات تفشل بأمان. يوضح المخطط أدناه المقارنتين — مع التعامل الصحيح مع الأخطاء، يلتقط الوكيل الاستثناء ويرد بشكل مفيد، بينما بدون ذلك يتعطل التطبيق بأكمله:
-*عندما تفشل الأداة، يلتقط الوكيل الخطأ ويرد بتوضيح مفيد بدلاً من تعطل التطبيق.*
+*عندما تفشل الأداة، يلتقط الوكيل الخطأ ويرد بشرح مفيد بدلاً من التعطل.*
-يحدث هذا في جولة محادثة واحدة. ينظم الوكيل استدعاءات الأدوات المتعددة بشكل مستقل.
+يحدث هذا في جولة محادثة واحدة. الوكيل ينظم استدعاءات متعددة للأدوات بشكل مستقل.
-## تشغيل التطبيق
+## Run the Application
-**تأكد من النشر:**
+**تحقق من النشر:**
-تأكد من وجود ملف `.env` في الدليل الجذري مع بيانات اعتماد Azure (تم إنشاؤه خلال الوحدة 01). شغّل الأمر التالي من دليل الوحدة (`04-tools/`):
+تأكد من وجود ملف `.env` في الدليل الجذري مع بيانات اعتماد Azure (تم إنشاؤه أثناء الوحدة 01). شغّل هذا من دليل الوحدة (`04-tools/`):
-**Bash:**
+**Bash:**
```bash
-cat ../.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT
+cat ../.env # يجب عرض AZURE_OPENAI_ENDPOINT و API_KEY و DEPLOYMENT
```
-**PowerShell:**
+**PowerShell:**
```powershell
-Get-Content ..\.env # يجب أن يعرض AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT
+Get-Content ..\.env # يجب عرض AZURE_OPENAI_ENDPOINT وAPI_KEY وDEPLOYMENT
```
**ابدأ التطبيق:**
-> **ملاحظة:** إذا كنت قد بدأت جميع التطبيقات باستخدام `./start-all.sh` من الدليل الجذري (كما هو موضح في الوحدة 01)، فإن هذه الوحدة تعمل بالفعل على المنفذ 8084. يمكنك تخطي أوامر البدء أدناه والذهاب مباشرة إلى http://localhost:8084.
+> **ملاحظة:** إذا كنت قد بدأت جميع التطبيقات باستخدام `./start-all.sh` من الدليل الجذري (كما هو موضح في الوحدة 01)، فهذه الوحدة تعمل بالفعل على المنفذ 8084. يمكنك تخطي أوامر البدء أدناه والذهاب مباشرة إلى http://localhost:8084.
**الخيار 1: استخدام لوحة تحكم Spring Boot (مُوصى به لمستخدمي VS Code)**
-تحوي الحاوية التطويرية إضافة لوحة تحكم Spring Boot، التي توفر واجهة بصرية لإدارة جميع تطبيقات Spring Boot. يمكنك إيجادها في شريط النشاط على الجانب الأيسر من VS Code (ابحث عن أيقونة Spring Boot).
+تتضمن حاوية التطوير إضافة Spring Boot Dashboard، التي توفر واجهة مرئية لإدارة جميع تطبيقات Spring Boot. يمكنك العثور عليها في شريط الأنشطة على الجانب الأيسر من VS Code (ابحث عن رمز Spring Boot).
-من لوحة تحكم Spring Boot يمكنك:
-- رؤية جميع تطبيقات Spring Boot المتوفرة في مساحة العمل
-- بدء/إيقاف التطبيقات بنقرة واحدة
-- عرض سجلات التطبيقات في الوقت الفعلي
-- مراقبة حالة التطبيقات
-فقط انقر على زر التشغيل بجانب "الأدوات" لبدء هذه الوحدة، أو ابدأ جميع الوحدات دفعة واحدة.
+من لوحة تحكم Spring Boot، يمكنك:
+- رؤية جميع تطبيقات Spring Boot المتاحة في مساحة العمل
+- بدء/إيقاف التطبيقات بنقرة واحدة
+- عرض سجلات التطبيق في الوقت الحقيقي
+- مراقبة حالة التطبيق
-إليك كيف يبدو لوحة تحكم Spring Boot في VS Code:
+فقط انقر زر التشغيل بجانب "tools" لبدء هذه الوحدة، أو ابدأ جميع الوحدات دفعة واحدة.
-
+إليك كيف تبدو لوحة تحكم Spring Boot في VS Code:
+
-*لوحة تحكم Spring Boot في VS Code — بدء، إيقاف، ومراقبة جميع الوحدات من مكان واحد*
+*لوحة معلومات Spring Boot في VS Code — بدء التشغيل، الإيقاف، والمراقبة لجميع الوحدات من مكان واحد*
**الخيار 2: استخدام سكربتات الشل**
-ابدأ كل تطبيقات الويب (الوحدات 01-04):
+ابدأ جميع تطبيقات الويب (الوحدات 01-04):
-**Bash:**
+**باش:**
```bash
cd .. # من الدليل الجذر
./start-all.sh
```
-**PowerShell:**
+**باورشل:**
```powershell
cd .. # من الدليل الجذري
.\start-all.ps1
@@ -244,29 +244,29 @@ cd .. # من الدليل الجذري
أو ابدأ هذه الوحدة فقط:
-**Bash:**
+**باش:**
```bash
cd 04-tools
./start.sh
```
-**PowerShell:**
+**باورشل:**
```powershell
cd 04-tools
.\start.ps1
```
-كلا السكربتين يقومان تلقائيًا بتحميل متغيرات البيئة من ملف `.env` في الجذر وسيقومان ببناء ملفات JAR إذا لم تكن موجودة.
+يقوم كلا السكربتين بتحميل متغيرات البيئة تلقائيًا من ملف `.env` في الجذر وسيبني ملفات JAR إذا لم تكن موجودة.
-> **ملاحظة:** إذا كنت تفضل بناء كل الوحدات يدويًا قبل البدء:
+> **ملاحظة:** إذا كنت تفضل بناء جميع الوحدات يدويًا قبل البدء:
>
-> **Bash:**
+> **باش:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
>
-> **PowerShell:**
+> **باورشل:**
> ```powershell
> cd .. # Go to root directory
> mvn clean package -DskipTests
@@ -274,102 +274,102 @@ cd 04-tools
افتح http://localhost:8084 في متصفحك.
-**للتوقف:**
+**لإيقاف التشغيل:**
-**Bash:**
+**باش:**
```bash
./stop.sh # هذا الوحدة فقط
# أو
-cd .. && ./stop-all.sh # جميع الوحدات
+cd .. && ./stop-all.sh # كل الوحدات
```
-**PowerShell:**
+**باورشل:**
```powershell
-.\stop.ps1 # هذا الوحدة فقط
+.\stop.ps1 # هذا الموديول فقط
# أو
-cd ..; .\stop-all.ps1 # جميع الوحدات
+cd ..; .\stop-all.ps1 # جميع الموديولات
```
## استخدام التطبيق
-يوفر التطبيق واجهة ويب حيث يمكنك التفاعل مع وكيل ذكاء اصطناعي يمتلك أدوات للوصول إلى الطقس وتحويل درجات الحرارة. إليك كيف تبدو الواجهة — تتضمن أمثلة بدء سريعة ولوحة محادثة لإرسال الطلبات:
+يوفر التطبيق واجهة ويب حيث يمكنك التفاعل مع وكيل ذكاء اصطناعي لديه إمكانية الوصول إلى أدوات الطقس وتحويل درجات الحرارة. هكذا تبدو الواجهة — تشمل أمثلة بداية سريعة ولوحة محادثة لإرسال الطلبات:
-*واجهة أدوات وكيل الذكاء الاصطناعي - أمثلة سريعة وواجهة دردشة للتفاعل مع الأدوات*
+*واجهة أدوات وكيل الذكاء الاصطناعي - أمثلة سريعة وواجهة محادثة للتفاعل مع الأدوات*
### جرب استخدام أداة بسيطة
-ابدأ بطلب مباشر: "حوّل 100 درجة فهرنهايت إلى سلسيوس". يتعرف الوكيل على حاجته لأداة تحويل درجات الحرارة، يستدعيها بالمعاملات الصحيحة، ويعيد النتيجة. لاحظ كم يشعر ذلك طبيعيًا — لم تحدد أي أداة تستخدم أو كيف تستدعيها.
+ابدأ بطلب بسيط: "حوّل 100 درجة فهرنهايت إلى مئوية". يدرك الوكيل أنه يحتاج أداة تحويل درجة الحرارة، ويستدعيها بالمعلمات الصحيحة، ويرجع النتيجة. لاحظ كم هذا يبدو طبيعيًا - لم تحدد الأداة التي تستخدمها أو كيفية استدعائها.
### اختبر ربط الأدوات
-جرب الآن شيئا أكثر تعقيدًا: "ما هو الطقس في سياتل وقم بتحويله إلى فهرنهايت؟" شاهد الوكيل يعمل على ذلك بخطوات. يحصل أولًا على الطقس (الذي يعيد درجات سلسيوس)، يتعرف على حاجته للتحويل إلى فهرنهايت، يستدعي أداة التحويل، ويجمع كلا النتيجتين في رد واحد.
+جرب الآن شيئًا أكثر تعقيدًا: "كيف الطقس في سياتل وحول إلى فهرنهايت؟" شاهد الوكيل يعمل على ذلك خطوة بخطوة. أولًا يحصل على الطقس (الذي يرجع المئوية)، يدرك أنه يحتاج لتحويلها إلى فهرنهايت، يستدعي أداة التحويل، ويدمج النتيجتين في رد واحد.
-### شاهد تدفق المحادثة
+### شاهد سير المحادثة
-تحافظ واجهة الدردشة على سجل المحادثة، مما يسمح لك بإجراء تفاعلات متعددة الجولات. يمكنك رؤية كافة الاستعلامات والردود السابقة، مما يسهل متابعة المحادثة وفهم كيف يبني الوكيل السياق عبر تبادلات متعددة.
+تحافظ واجهة المحادثة على سجل المحادثة، مما يتيح لك التفاعل على عدة جولات. يمكنك رؤية جميع الاستفسارات والردود السابقة، مما يسهل تتبع المحادثة وفهم كيف يبني الوكيل السياق عبر عدة تبادلات.
-*محادثة متعددة الجولات تُظهر تحويلات بسيطة، عمليات بحث عن الطقس، وربط الأدوات*
+*محادثة متعددة الجولات تظهر تحويلات بسيطة، استعلامات الطقس، وربط الأدوات*
### جرب طلبات مختلفة
-جرب تركيبات متنوعة:
-- عمليات بحث الطقس: "ما هو الطقس في طوكيو؟"
-- تحويلات الحرارة: "ما هي 25 درجة سلسيوس بالكلفن؟"
-- الاستعلامات المركبة: "تحقق من الطقس في باريس وأخبرني إذا كانت أعلى من 20 درجة سلسيوس"
+جرّب العديد من التركيبات:
+- استعلامات الطقس: "كيف الطقس في طوكيو؟"
+- تحويلات درجات الحرارة: "كم تساوي 25 مئوية بالكلفن؟"
+- استعلامات مركبة: "تحقق من الطقس في باريس وأخبرني إذا كان فوق 20 درجة مئوية"
-لاحظ كيف يفسر الوكيل اللغة الطبيعية ويربطها باستدعاءات الأدوات المناسبة.
+لاحظ كيف يفسر الوكيل اللغة الطبيعية ويربطها باستدعاءات الأدوات الملائمة.
-## المفاهيم الأساسية
+## المفاهيم الرئيسية
### نمط ReAct (التفكير والعمل)
-يتناوب الوكيل بين التفكير (تقرير ما يجب فعله) والعمل (استخدام الأدوات). يمكّن هذا النمط من حل المشاكل بشكل مستقل بدلاً من مجرد الاستجابة للتعليمات.
+يتناوب الوكيل بين التفكير (تقرير ما يجب فعله) والعمل (استخدام الأدوات). هذا النمط يمكّنه من حل المشكلات بشكل مستقل بدلاً من مجرد الرد على التعليمات.
### وصف الأدوات مهم
-جودة وصف أدواتك تؤثر بشكل مباشر على كيفية استخدام الوكيل لها. الأوصاف الواضحة والمحددة تساعد النموذج على فهم متى وكيف يستدعي كل أداة.
+جودة وصف الأدوات تؤثر مباشرة على كيفية استخدام الوكيل لها. أوصاف واضحة ومحددة تساعد النموذج على فهم متى وكيف يستدعي كل أداة.
-### إدارة الجلسة
+### إدارة الجلسات
-تمكن التعليمة @MemoryId إدارة الذاكرة القائمة على الجلسات تلقائيًا. يحصل كل معرف جلسة على مثيل `ChatMemory` خاص به يديره الـ `ChatMemoryProvider` بحيث يمكن لعدة مستخدمين التفاعل مع الوكيل في نفس الوقت دون أن تختلط محادثاتهم. يوضح الرسم البياني التالي كيف يتم توجيه عدة مستخدمين إلى خزانات ذاكرة معزولة بناءً على معرفات جلساتهم:
+تُمكّن التعليمة `@MemoryId` إدارة الذاكرة القائمة على الجلسات تلقائيًا. كل معرف جلسة يحصل على مثيل خاص من `ChatMemory` تُدار بواسطة وحدة `ChatMemoryProvider`، مما يسمح بتفاعل عدة مستخدمين مع الوكيل في نفس الوقت دون اختلاط محادثاتهم. يُظهر المخطط التالي كيف يتم توجيه المستخدمين إلى مخازن ذاكرة معزولة بناءً على معرفات الجلسة:
-
+
-*كل معرف جلسة يرتبط بتاريخ محادثة معزول — المستخدمون لا يرون رسائل بعضهم البعض مطلقًا.*
+*كل معرف جلسة يربط بسجل محادثة معزول — لا يرى المستخدمون رسائل بعضهم البعض أبدًا.*
### التعامل مع الأخطاء
-يمكن أن تفشل الأدوات — مهلات API، قد تكون المعاملات غير صالحة، تخرج الخدمات الخارجية عن العمل. يحتاج الوكلاء في الإنتاج إلى التعامل مع الأخطاء حتى يتمكن النموذج من شرح المشكلات أو محاولة بدائل بدلاً من تعطل التطبيق كله. عندما ترمي أداة استثناء، يمسك LangChain4j به ويرسل رسالة الخطأ إلى النموذج، الذي يمكنه بعد ذلك شرح المشكلة بلغة طبيعية.
+قد تفشل الأدوات — انتهاء مهلة الواجهات البرمجية، معلمات خاطئة، تعطل خدمات خارجية. يحتاج الوكلاء في الإنتاج إلى التعامل مع الأخطاء حتى يتمكن النموذج من شرح المشكلات أو تجربة بدائل بدلاً من تعطل التطبيق بالكامل. عندما تُلقي أداة استثناء، يلتقطه LangChain4j ويُرسل رسالة الخطأ إلى النموذج، الذي يشرح المشكلة بعد ذلك بلغة طبيعية.
## الأدوات المتاحة
-يُظهر الرسم البياني أدناه النظام البيئي الواسع للأدوات التي يمكنك بناؤها. توضح هذه الوحدة أدوات الطقس ودرجة الحرارة، لكن نمط `@Tool` نفسه يعمل لأي طريقة Java — من استعلامات قواعد البيانات إلى معالجة المدفوعات.
+يوضح المخطط أدناه النظام البيئي الواسع للأدوات التي يمكنك بناؤها. تستعرض هذه الوحدة أدوات الطقس وحرارة الطقس، لكن نفس نمط `@Tool` يعمل مع أي طريقة جافا — من استعلامات قواعد البيانات إلى معالجة الدفع.
-
+
-*أي طريقة Java معنونة بـ @Tool تصبح متاحة للذكاء الاصطناعي — النمط يمتد إلى قواعد البيانات، واجهات برمجة التطبيقات، البريد الإلكتروني، عمليات الملفات، وأكثر.*
+*أي طريقة جافا معلمة بـ @Tool تصبح متاحة للذكاء الاصطناعي — هذا النمط يمتد إلى قواعد البيانات، الواجهات البرمجية، البريد الإلكتروني، عمليات الملفات، وأكثر.*
-## متى تستخدم الوكلاء المعتمدين على الأدوات
+## متى تستخدم وكلاء قائمين على الأدوات
-ليس كل طلب يحتاج أدوات. القرار يعود إلى ما إذا كان الذكاء الاصطناعي يحتاج للتفاعل مع أنظمة خارجية أو يمكنه الإجابة من معرفته الخاصة. يختصر الدليل التالي متى تضيف الأدوات قيمة ومتى تكون غير ضرورية:
+ليست كل الطلبات تحتاج أدوات. ينبثق القرار من ما إذا كان الذكاء الاصطناعي يحتاج التفاعل مع أنظمة خارجية أو يمكنه الإجابة من معرفته الخاصة. يلخص الدليل التالي متى تضيف الأدوات قيمة ومتى تكون غير ضرورية:
*دليل قرار سريع — الأدوات للبيانات الحية، الحسابات، والإجراءات؛ المعرفة العامة والمهام الإبداعية لا تحتاجها.*
-## الأدوات مقابل RAG
+## الأدوات مقابل نظام الاسترجاع والاستدلال (RAG)
-توسع الوحدتان 03 و 04 ما يمكن للذكاء الاصطناعي القيام به، لكن بطرق مختلفة جذريًا. تمكن RAG النموذج من الوصول إلى **المعرفة** من خلال استرجاع المستندات. تمنح الأدوات النموذج القدرة على اتخاذ **إجراءات** عن طريق استدعاء الوظائف. يقارن الرسم البياني أدناه هذين النهجين جنبًا إلى جنب — من كيف يعمل كل تدفق إلى الموازنات بينهما:
+الوحدتان 03 و 04 توسعان قدرات الذكاء الاصطناعي، لكن بطرق مختلفة جوهريًا. يوفر RAG للنموذج الوصول إلى **المعرفة** عن طريق استرجاع المستندات. تمنح الأدوات النموذج القدرة على اتخاذ **إجراءات** عن طريق استدعاء الوظائف. يقارن المخطط التالي الطريقتين جنبًا إلى جنب — من كيفية تشغيل كل سير عمل إلى المقاييس بينهما:
-
+
-*تسترجع RAG المعلومات من مستندات ثابتة — تنفذ الأدوات العمليات وتجلب البيانات الديناميكية والحية. العديد من أنظمة الإنتاج تجمع بينهما.*
+*يسترجع RAG المعلومات من مستندات ثابتة — تنفذ الأدوات إجراءات وتجلب بيانات حية وديناميكية. تجمع العديد من أنظمة الإنتاج بينهما.*
-في الواقع، تجمع العديد من أنظمة الإنتاج بين كلا النهجين: RAG لتثبيت الأجوبة في توثيقاتك، والأدوات لجلب البيانات الحية أو أداء العمليات.
+عمليًا، تجمع العديد من أنظمة الإنتاج بين الطريقتين: RAG لتثبيت الأجوبة على وثائقك، والأدوات لجلب البيانات الحية أو تنفيذ العمليات.
## الخطوات التالية
@@ -377,11 +377,11 @@ cd ..; .\stop-all.ps1 # جميع الوحدات
---
-**التنقل:** [← السابق: الوحدة 03 - RAG](../03-rag/README.md) | [العودة للرئيسية](../README.md) | [التالي: الوحدة 05 - MCP →](../05-mcp/README.md)
+**التنقل:** [← السابق: الوحدة 03 - RAG](../03-rag/README.md) | [عودة إلى الرئيسي](../README.md) | [التالي: الوحدة 05 - MCP →](../05-mcp/README.md)
---
-**إخلاء مسؤولية**:
-تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يُرجى العلم بأن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر المرجعي والمعتمد. بالنسبة للمعلومات الحرجة، يُنصح بالترجمة الاحترافية البشرية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
+**تنويه**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/README.md b/translations/ar/README.md
index dbf948ab7..1dbb5227f 100644
--- a/translations/ar/README.md
+++ b/translations/ar/README.md
@@ -2,18 +2,18 @@
# LangChain4j للمبتدئين
-دورة لبناء تطبيقات الذكاء الاصطناعي باستخدام LangChain4j و Azure OpenAI GPT-5.2، من المحادثة الأساسية حتى الوكلاء الذكيين.
+دورة لبناء تطبيقات الذكاء الاصطناعي باستخدام LangChain4j و Azure OpenAI GPT-5.2، من المحادثات الأساسية إلى وكلاء الذكاء الاصطناعي.
### 🌐 دعم متعدد اللغات
#### مدعوم عبر GitHub Action (آلي ودائم التحديث)
-[العربية](./README.md) | [البنغالية](../bn/README.md) | [البلغارية](../bg/README.md) | [البورمية (ميانمار)](../my/README.md) | [الصينية (المبسطة)](../zh-CN/README.md) | [الصينية (التقليدية، هونغ كونغ)](../zh-HK/README.md) | [الصينية (التقليدية، ماكاو)](../zh-MO/README.md) | [الصينية (التقليدية، تايوان)](../zh-TW/README.md) | [الكرواتية](../hr/README.md) | [التشيكية](../cs/README.md) | [الدانماركية](../da/README.md) | [الهولندية](../nl/README.md) | [الإستونية](../et/README.md) | [الفنلندية](../fi/README.md) | [الفرنسية](../fr/README.md) | [الألمانية](../de/README.md) | [اليونانية](../el/README.md) | [العبرية](../he/README.md) | [الهندية](../hi/README.md) | [الهنغارية](../hu/README.md) | [الإندونيسية](../id/README.md) | [الإيطالية](../it/README.md) | [اليابانية](../ja/README.md) | [الكانادا](../kn/README.md) | [الخميرية](../km/README.md) | [الكورية](../ko/README.md) | [الليتوانية](../lt/README.md) | [الماليزية](../ms/README.md) | [المالايالامية](../ml/README.md) | [الماراثي](../mr/README.md) | [النيبالية](../ne/README.md) | [البيجنيه النيجيرية](../pcm/README.md) | [النرويجية](../no/README.md) | [الفارسية (اللغة الفارسية)](../fa/README.md) | [البولندية](../pl/README.md) | [البرتغالية (البرازيل)](../pt-BR/README.md) | [البرتغالية (البرتغال)](../pt-PT/README.md) | [البنجابية (جرمخي)](../pa/README.md) | [الرومانية](../ro/README.md) | [الروسية](../ru/README.md) | [الصربية (السيريلية)](../sr/README.md) | [السلوفاكية](../sk/README.md) | [السلوفينية](../sl/README.md) | [الإسبانية](../es/README.md) | [السواحيلية](../sw/README.md) | [السويدية](../sv/README.md) | [التاغالوغية (الفلبينية)](../tl/README.md) | [التاميل](../ta/README.md) | [التيلجو](../te/README.md) | [التايلاندية](../th/README.md) | [التركية](../tr/README.md) | [الأوكرانية](../uk/README.md) | [الأردية](../ur/README.md) | [الفيتنامية](../vi/README.md)
+[Arabic](./README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
-> **هل تفضل النسخ محليًا؟**
+> **تفضل النسخ محلياً؟**
>
-> يتضمن هذا المستودع أكثر من 50 ترجمة للغات تزيد بشكل كبير من حجم التنزيل. للنسخ بدون الترجمات، استخدم السحب الانتقائي:
+> يحتوي هذا المستودع على أكثر من 50 ترجمة للغات مختلفة مما يزيد بشكل كبير من حجم التنزيل. للنسخ بدون الترجمات، استخدم sparse checkout:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -22,71 +22,68 @@
> git sparse-checkout set --no-cone '/*' '!translations' '!translated_images'
> ```
>
-> **CMD (ويندوز):**
+> **CMD (Windows):**
> ```cmd
> git clone --filter=blob:none --sparse https://github.com/microsoft/LangChain4j-for-Beginners.git
> cd LangChain4j-for-Beginners
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> هذا يوفر لك كل ما تحتاجه لإكمال الدورة مع تنزيل أسرع بكثير.
+> هذا يمنحك كل ما تحتاجه لإكمال الدورة مع تنزيل أسرع بكثير.
## جدول المحتويات
-1. [البدء السريع](00-quick-start/README.md) - ابدأ مع LangChain4j
-2. [مقدمة](01-introduction/README.md) - تعلم أساسيات LangChain4j
-3. [هندسة الموجهات](02-prompt-engineering/README.md) - إتقان تصميم الموجهات الفعالة
-4. [RAG (التوليد المعزز بالاسترجاع)](03-rag/README.md) - بناء أنظمة ذكية مبنية على المعرفة
-5. [الأدوات](04-tools/README.md) - دمج الأدوات الخارجية والمساعدين البسيطين
-6. [MCP (بروتوكول سياق النموذج)](05-mcp/README.md) - العمل مع بروتوكول سياق النموذج (MCP) والوحدات الوكلائية
+1. [مقدمة](01-introduction/README.md) - تعلّم أساسيات LangChain4j
+2. [هندسة المُحفزات](02-prompt-engineering/README.md) - اتقن تصميم المُحفزات الفعّالة
+3. [RAG (التوليد المدعوم بالاسترجاع)](03-rag/README.md) - بناء أنظمة معرفية ذكية
+4. [الأدوات](04-tools/README.md) - دمج الأدوات الخارجية والمساعدين البسيطين
+5. [MCP (بروتوكول سياق النموذج)](05-mcp/README.md) - العمل مع بروتوكول سياق النموذج (MCP) والوحدات الوكيلّة
-### جولات الفيديو التوضيحية
+### جولات فيديو إرشادية
-لكل وحدة جلسة مباشرة مصاحبة حيث نشرح المفاهيم والكود خطوة بخطوة.
+كل وحدة تحتوي على جلسة مباشرة مصاحبة نمر خلالها على المفاهيم والكود خطوة بخطوة.
| الوحدة | الفيديو |
|--------|-------|
-| 01 - مقدمة | [البداية مع LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
-| 02 - هندسة الموجهات | [هندسة الموجهات مع LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
+| 01 - المقدمة | [البدء مع LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
+| 02 - هندسة المحفزات | [هندسة المُحفز مع LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
| 03 - RAG | [RAG مع LangChain4j](https://www.youtube.com/watch?v=_olq75ZH_eY) |
-| 04 - الأدوات & 05 - MCP | [وكلاء الذكاء الاصطناعي مع الأدوات وMCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
+| 04 - أدوات و 05 - MCP | [وكلاء الذكاء الاصطناعي مع الأدوات و MCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
---
## مسار التعلم
-**جديد في LangChain4j؟** اطلع على [مسرد المصطلحات](docs/GLOSSARY.md) لتعريفات المصطلحات والمفاهيم الأساسية.
+**جديد على LangChain4j؟** اطلع على [مسرد المصطلحات](docs/GLOSSARY.md) لتعريفات المصطلحات والمفاهيم الرئيسية.
-> **البدء السريع**
+> **بدء سريع**
-1. قم بتفرع هذا المستودع إلى حسابك على GitHub
-2. اضغط على **الكود** → تبويب **مساحات الشيفرة** → **...** → **جديد مع خيارات...**
-3. استخدم الإعدادات الافتراضية – سيختار هذا حاوية التطوير التي تم إنشاؤها لهذه الدورة
-4. اضغط **إنشاء مساحة الشيفرة**
-5. انتظر من 5 إلى 10 دقائق حتى يصبح البيئة جاهزة
-6. انتقل مباشرة إلى [البدء السريع](./00-quick-start/README.md) للبدء!
+1. قم بتفريع هذا المستودع إلى حسابك في GitHub
+2. اضغط على **Code** → تبويب **Codespaces** → **...** → **جديد مع خيارات...**
+3. استخدم الإعدادات الافتراضية – سيختار هذا حاوية التطوير المُنشأة لهذه الدورة
+4. اضغط **إنشاء مساحة تعليمات برمجية**
+5. انتظر 5-10 دقائق حتى يكون البيئة جاهزة
+6. ابدأ مباشرة من [المقدمة](./01-introduction/README.md) للبدء!
-بعد إكمال الوحدات، استكشف [دليل الاختبار](docs/TESTING.md) لمشاهدة مفاهيم اختبارات LangChain4j قيد العمل.
+بعد إكمال الوحدات، استكشف [دليل الاختبار](docs/TESTING.md) لرؤية مفاهيم اختبار LangChain4j في التطبيق.
-> **ملاحظة:** يستخدم هذا التدريب نماذج GitHub ونماذج Azure OpenAI. يستخدم وحدة [البدء السريع](00-quick-start/README.md) نماذج GitHub (لا تحتاج إلى اشتراك Azure)، بينما تستخدم الوحدات 1-5 Azure OpenAI. ابدأ باستخدام [حساب Azure مجاني](https://aka.ms/azure-free-account) إذا لم يكن لديك واحد.
+> **ملاحظة:** يستخدم هذا التدريب Azure OpenAI. ابدأ باستخدام [حساب Azure مجاني](https://aka.ms/azure-free-account) إذا لم يكن لديك واحد.
+## التعلم باستخدام GitHub Copilot
-## التعلم مع GitHub Copilot
+للبدء السريع في الترميز، افتح هذا المشروع في GitHub Codespace أو بيئة التطوير المتكاملة المحلية مع devcontainer المقدم. تأتي حاوية التطوير المستخدمة في هذه الدورة مُهيأة مسبقاً مع GitHub Copilot لبرمجة ذكاء اصطناعي مترافق.
-للبدء السريع في الكتابة، افتح هذا المشروع في مساحة شيفرة على GitHub أو في بيئة التطوير المحلية لديك مع devcontainer المقدم. تأتي الحاوية المطورة المستخدمة في هذه الدورة معدة مسبقًا مع GitHub Copilot للبرمجة المزدوجة بالذكاء الاصطناعي.
+يشمل كل مثال برمجي أسئلة مقترحة يمكنك طرحها على GitHub Copilot لتعميق فهمك. ابحث عن رموز 💡/🤖 في:
-كل مثال كود يتضمن أسئلة مقترحة يمكنك طرحها على GitHub Copilot لتعميق فهمك. ابحث عن رموز 💡/🤖 في:
+- **رؤوس ملفات Java** - أسئلة خاصة بكل مثال
+- **قراءات الوحدات** - محفزات استكشافية بعد أمثلة الكود
-- **رؤوس ملفات جافا** - أسئلة محددة لكل مثال
-- **ملفات README للوحدات** - تلميحات استكشافية بعد أمثلة الكود
+**كيفية الاستخدام:** افتح أي ملف كود واطرح على Copilot الأسئلة المقترحة. لديه سياق كامل لقاعدة الكود ويمكنه الشرح والتمديد واقتراح بدائل.
-**كيفية الاستخدام:** افتح أي ملف كود واطرح على Copilot الأسئلة المقترحة. لديه السياق الكامل لقاعدة الشيفرة ويمكنه الشرح، التوسيع، واقتراح البدائل.
+هل تريد معرفة المزيد؟ اطلع على [Copilot للبرمجة التشاركية بالذكاء الاصطناعي](https://aka.ms/GitHubCopilotAI).
-هل تريد معرفة المزيد؟ اطلع على [Copilot للبرمجة المزدوجة بالذكاء الاصطناعي](https://aka.ms/GitHubCopilotAI).
-
-
-## موارد إضافية
+## مصادر إضافية
### LangChain
@@ -106,45 +103,45 @@
### سلسلة الذكاء الاصطناعي التوليدي
[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
-[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
-[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
+[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
+[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
---
-### التعليم الأساسي
+### التعلم الأساسي
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
-### سلسلة Copilot
-[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
+### سلسلة كوبيلوت
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
## الحصول على المساعدة
-إذا واجهت صعوبة أو كان لديك أي أسئلة حول بناء تطبيقات الذكاء الاصطناعي، انضم إلى:
+إذا واجهت مشكلة أو كان لديك أي أسئلة حول بناء تطبيقات الذكاء الاصطناعي، انضم إلى:
-[](https://aka.ms/foundry/discord)
+[](https://aka.ms/foundry/discord)
-إذا كان لديك ملاحظات على المنتج أو أخطاء أثناء البناء، قم بزيارة:
+إذا كان لديك ملاحظات على المنتج أو أخطاء أثناء البناء قم بزيارة:
-[](https://aka.ms/foundry/forum)
+[](https://aka.ms/foundry/forum)
## الترخيص
-ترخيص MIT - انظر ملف [LICENSE](../../LICENSE) للتفاصيل.
+رخصة MIT - راجع ملف [LICENSE](../../LICENSE) للتفاصيل.
---
-**تنويه**:
-تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم بأن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر المعتمد. بالنسبة للمعلومات الحساسة، يُنصح بالترجمة المهنية البشرية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
+**تنويه**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/docs/GLOSSARY.md b/translations/ar/docs/GLOSSARY.md
index ef7a7b04a..9cd3a3302 100644
--- a/translations/ar/docs/GLOSSARY.md
+++ b/translations/ar/docs/GLOSSARY.md
@@ -2,231 +2,229 @@
## جدول المحتويات
-- [المفاهيم الأساسية](../../../docs)
-- [مكونات LangChain4j](../../../docs)
-- [مفاهيم الذكاء الاصطناعي/التعلم الآلي](../../../docs)
-- [خطوط الحماية](../../../docs)
-- [هندسة المحفزات](../../../docs)
-- [RAG (التوليد المدعوم بالاسترجاع)](../../../docs)
-- [الوكلاء والأدوات](../../../docs)
-- [الوحدة الوكيلة](../../../docs)
-- [بروتوكول سياق النموذج (MCP)](../../../docs)
-- [خدمات Azure](../../../docs)
-- [الاختبار والتطوير](../../../docs)
+- [المفاهيم الأساسية](#core-concepts)
+- [مكونات LangChain4j](#langchain4j-components)
+- [مفاهيم الذكاء الاصطناعي / التعلم الآلي](#aiml-concepts)
+- [ضوابط الأمان](#guardrails)
+- [هندسة المطالبات](#prompt-engineering---module-02)
+- [RAG (التوليد المعزز بالاستخراج)](#rag-retrieval-augmented-generation---module-03)
+- [العملاء والأدوات](#agents-and-tools---module-04)
+- [الوحدة العميائية](#agentic-module---module-05)
+- [بروتوكول سياق النموذج (MCP)](#model-context-protocol-mcp---module-05)
+- [خدمات Azure](#azure-services---module-01)
+- [الاختبار والتطوير](#testing-and-development---testing-guide)
-مرجع سريع للمصطلحات والمفاهيم المستخدمة في جميع أنحاء الدورة.
+مرجع سريع للمصطلحات والمفاهيم المستخدمة عبر الدورة.
-## المفاهيم الأساسية
+## Core Concepts
-**الوكيل الذكي (AI Agent)** - نظام يستخدم الذكاء الاصطناعي للتفكير والتصرف بشكل مستقل. [الوحدة 04](../04-tools/README.md)
+**وكيل الذكاء الاصطناعي** - نظام يستخدم الذكاء الاصطناعي للتفكير والتصرف بشكل مستقل. [الوحدة 04](../04-tools/README.md)
-**السلسلة (Chain)** - تسلسل من العمليات حيث تغذي المخرجات الخطوة التالية.
+**سلسلة** - تسلسل من العمليات حيث يُدخَل الناتج في الخطوة التالية.
-**التجزئة (Chunking)** - تقسيم الوثائق إلى قطع أصغر. النموذجي: 300-500 رمز مع تداخل. [الوحدة 03](../03-rag/README.md)
+**التقسيم** - تقسيم المستندات إلى قطع أصغر. النموذجي: 300-500 رمز مع تداخل. [الوحدة 03](../03-rag/README.md)
-**نافذة السياق (Context Window)** - الحد الأقصى لعدد الرموز التي يمكن للنموذج معالجتها. GPT-5.2: 400 ألف رمز (حتى 272 ألف إدخال، 128 ألف إخراج).
+**نافذة السياق** - الحد الأقصى لعدد الرموز التي يمكن للنموذج معالجتها. GPT-5.2: 400 ألف رمز (حتى 272 ألف إدخال، 128 ألف إخراج).
-**التضمينات (Embeddings)** - متجهات عددية تمثل معنى النص. [الوحدة 03](../03-rag/README.md)
+**التضمينات** - متجهات عددية تمثل معنى النص. [الوحدة 03](../03-rag/README.md)
-**استدعاء الوظائف (Function Calling)** - النموذج ينشئ طلبات منظمة لاستدعاء وظائف خارجية. [الوحدة 04](../04-tools/README.md)
+**استدعاء الوظائف** - النموذج يُنشئ طلبات مُنظمة لاستدعاء وظائف خارجية. [الوحدة 04](../04-tools/README.md)
-**الهلاوس (Hallucination)** - عندما تولد النماذج معلومات غير صحيحة ولكنها تبدو منطقية.
+**الهلاوس** - عندما تولّد النماذج معلومات غير صحيحة لكنها تبدو معقولة.
-**المحفز (Prompt)** - مدخل نصي لنموذج اللغة. [الوحدة 02](../02-prompt-engineering/README.md)
+**المطالبة** - نص الإدخال إلى نموذج اللغة. [الوحدة 02](../02-prompt-engineering/README.md)
-**البحث الدلالي (Semantic Search)** - بحث بالمعنى باستخدام التضمينات، وليس الكلمات المفتاحية. [الوحدة 03](../03-rag/README.md)
+**البحث الدلالي** - البحث بواسطة المعنى باستخدام التضمينات، وليس الكلمات المفتاحية. [الوحدة 03](../03-rag/README.md)
-**الحالة الدائمة مقابل الحالة غير الدائمة (Stateful vs Stateless)** - غير دائم: بدون ذاكرة. دائم: يحتفظ بسجل المحادثة. [الوحدة 01](../01-introduction/README.md)
+**الدولة مقابل حالة عدم وجود حالة** - بدون حالة: لا ذاكرة. مع حالة: يحتفظ بتاريخ المحادثة. [الوحدة 01](../01-introduction/README.md)
-**الرموز (Tokens)** - الوحدات النصية الأساسية التي تعالجها النماذج. تؤثر على التكلفة والقيود. [الوحدة 01](../01-introduction/README.md)
+**الرموز** - وحدات النص الأساسية التي تعالجها النماذج. تؤثر على التكاليف والحدود. [الوحدة 01](../01-introduction/README.md)
-**تسلسل الأدوات (Tool Chaining)** - تنفيذ الأدوات بشكل متسلسل حيث توجه المخرجات الاستدعاء التالي. [الوحدة 04](../04-tools/README.md)
+**تسلسل الأدوات** - تنفيذ متسلسل للأدوات حيث يُخبر الناتج الاستدعاء التالي. [الوحدة 04](../04-tools/README.md)
-## مكونات LangChain4j
+## LangChain4j Components
-**AiServices** - ينشئ واجهات خدمات ذكاء اصطناعي آمنة النوع.
+**AiServices** - ينشئ واجهات خدمات الذكاء الاصطناعي الآمنة من حيث النوع.
-**OpenAiOfficialChatModel** - عميل موحد لنماذج OpenAI وAzure OpenAI.
+**OpenAiOfficialChatModel** - عميل موحد لنماذج OpenAI و Azure OpenAI.
-**OpenAiOfficialEmbeddingModel** - ينشئ التضمينات باستخدام عميل OpenAI الرسمي (يدعم كل من OpenAI وAzure OpenAI).
+**OpenAiOfficialEmbeddingModel** - ينشئ التضمينات باستخدام عميل OpenAI الرسمي (يدعم كل من OpenAI و Azure OpenAI).
**ChatModel** - الواجهة الأساسية لنماذج اللغة.
-**ChatMemory** - يحتفظ بسجل المحادثة.
+**ChatMemory** - يحتفظ بتاريخ المحادثة.
-**ContentRetriever** - يعثر على قطع الوثائق ذات الصلة لـ RAG.
+**ContentRetriever** - يعثر على قطع المستندات ذات الصلة لـ RAG.
-**DocumentSplitter** - يقسم الوثائق إلى أجزاء.
+**DocumentSplitter** - يقسم المستندات إلى قطع.
**EmbeddingModel** - يحول النص إلى متجهات عددية.
**EmbeddingStore** - يخزن ويسترجع التضمينات.
-**MessageWindowChatMemory** - يحافظ على نافذة منزلقة للرسائل الحديثة.
+**MessageWindowChatMemory** - يحتفظ بنافذة منزلقة من الرسائل الحديثة.
-**PromptTemplate** - ينشئ محفزات قابلة لإعادة الاستخدام مع نُصوص `{{variable}}` المتغيرة.
+**PromptTemplate** - ينشئ مطالبات قابلة لإعادة الاستخدام مع متغيرات `{{variable}}`.
-**TextSegment** - قطعة نص مع بيانات وصفية. يستخدم في RAG.
+**TextSegment** - قطعة نص مع بيانات وصفية. تُستخدم في RAG.
**ToolExecutionRequest** - يمثل طلب تنفيذ أداة.
**UserMessage / AiMessage / SystemMessage** - أنواع رسائل المحادثة.
-## مفاهيم الذكاء الاصطناعي/التعلم الآلي
+## AI/ML Concepts
-**التعلم بالقليل من الأمثلة (Few-Shot Learning)** - تقديم أمثلة في المحفزات. [الوحدة 02](../02-prompt-engineering/README.md)
+**التعلم بالقليل من الأمثلة** - توفير أمثلة في المطالبات. [الوحدة 02](../02-prompt-engineering/README.md)
-**نموذج اللغة الكبير (LLM)** - نماذج ذكاء اصطناعي مدربة على كميات ضخمة من النصوص.
+**النموذج اللغوي الكبير (LLM)** - نماذج الذكاء الاصطناعي المدربة على كميات كبيرة من النصوص.
-**جهد الاستدلال (Reasoning Effort)** - معلمة GPT-5.2 التي تتحكم في عمق التفكير. [الوحدة 02](../02-prompt-engineering/README.md)
+**جهد الاستدلال** - معامل GPT-5.2 يتحكم في عمق التفكير. [الوحدة 02](../02-prompt-engineering/README.md)
-**درجة الحرارة (Temperature)** - تتحكم في عشوائية المخرجات. منخفض = محدد، مرتفع = إبداعي.
+**درجة الحرارة** - تتحكم في عشوائية الإخراج. منخفض = حتمي، مرتفع = إبداعي.
-**قاعدة بيانات المتجهات (Vector Database)** - قاعدة بيانات متخصصة للتضمينات. [الوحدة 03](../03-rag/README.md)
+**قاعدة بيانات المتجهات** - قاعدة بيانات متخصصة للتضمينات. [الوحدة 03](../03-rag/README.md)
-**التعلم بدون أمثلة (Zero-Shot Learning)** - تنفيذ المهام بدون أمثلة. [الوحدة 02](../02-prompt-engineering/README.md)
+**التعلم بدون أمثلة** - أداء المهام بدون أمثلة. [الوحدة 02](../02-prompt-engineering/README.md)
-## خطوط الحماية - [الوحدة 00](../00-quick-start/README.md)
+## Guardrails
-**الدفاع العميق (Defense in Depth)** - نهج أمني متعدد الطبقات يجمع بين خطوط حماية على مستوى التطبيق ومرشحات أمان المزود.
+**الدفاع على عدة طبقات** - نهج أمني متعدد المستويات يجمع ضوابط الأمان على مستوى التطبيق مع مرشحات أمان المزود.
-**حظر صلب (Hard Block)** - المزود يرمي خطأ HTTP 400 لانتهاكات المحتوى الشديدة.
+**الكتلة الصلبة** - المزود يرمي خطأ HTTP 400 للمخالفات الشديدة للمحتوى.
-**InputGuardrail** - واجهة LangChain4j للتحقق من صحة مدخلات المستخدم قبل وصولها للنموذج. يوفر التكلفة والوقت بحظر المحفزات الضارة مبكراً.
+**InputGuardrail** - واجهة LangChain4j للتحقق من صحة مدخلات المستخدم قبل وصولها إلى LLM. يوفر التكلفة والوقت بحجب المطالبات الضارة مبكرًا.
-**InputGuardrailResult** - نوع العائد للتحقق من الحماية: `success()` أو `fatal("reason")`.
+**InputGuardrailResult** - نوع العودة للتحقق من الضوابط: `success()` أو `fatal("السبب")`.
**OutputGuardrail** - واجهة للتحقق من صحة استجابات الذكاء الاصطناعي قبل إرجاعها للمستخدمين.
-**مرشحات أمان المزود (Provider Safety Filters)** - مرشحات محتوى مدمجة من مزودي الذكاء الاصطناعي (مثل نماذج GitHub) تكتشف الانتهاكات على مستوى API.
+**مرشحات أمان المزود** - مرشحات محتوى مدمجة من مزودي الذكاء الاصطناعي (مثل Azure OpenAI) تكتشف الانتهاكات على مستوى API.
-**الرفض اللين (Soft Refusal)** - النموذج يرفض الإجابة بأدب دون رمي خطأ.
+**الرفض اللين** - النموذج يرفض بالأدب الإجابة دون إلقاء خطأ.
-## هندسة المحفزات - [الوحدة 02](../02-prompt-engineering/README.md)
+## Prompt Engineering - [الوحدة 02](../02-prompt-engineering/README.md)
-**سلسلة التفكير (Chain-of-Thought)** - التفكير خطوة بخطوة لتحقيق دقة أفضل.
+**سلسلة التفكير** - الاستدلال خطوة بخطوة لتحسين الدقة.
-**الإخراج المقيد (Constrained Output)** - فرض تنسيق أو هيكل معين.
+**الإخراج المقيد** - فرض تنسيق أو هيكل معين.
-**الحماس العالي (High Eagerness)** - نمط GPT-5.2 للتفكير التفصيلي.
+**الحماس العالي** - نمط GPT-5.2 للتفكير المتعمق.
-**الحماس المنخفض (Low Eagerness)** - نمط GPT-5.2 للإجابات السريعة.
+**الحماس المنخفض** - نمط GPT-5.2 للإجابات السريعة.
-**المحادثة متعددة الأدوار (Multi-Turn Conversation)** - الحفاظ على السياق عبر التبادلات.
+**المحادثة متعددة الأدوار** - الحفاظ على السياق عبر التبادلات.
-**المحفز المعتمد على الدور (Role-Based Prompting)** - تحديد شخصية النموذج عبر رسائل النظام.
+**المطالبة حسب الدور** - تعيين شخصية النموذج عبر رسائل النظام.
-**التأمل الذاتي (Self-Reflection)** - النموذج يقيم ويحسن مخرجاته.
+**التأمل الذاتي** - النموذج يقيّم ويُحسن مخرجاته.
-**التحليل المنظم (Structured Analysis)** - إطار تقييم ثابت.
+**التحليل المنظم** - إطار تقييم ثابت.
-**نمط تنفيذ المهمة (Task Execution Pattern)** - تخطيط → تنفيذ → تلخيص.
+**نمط تنفيذ المهمة** - التخطيط → التنفيذ → التلخيص.
-## RAG (التوليد المدعوم بالاسترجاع) - [الوحدة 03](../03-rag/README.md)
+## RAG (Retrieval-Augmented Generation) - [الوحدة 03](../03-rag/README.md)
-**خط أنابيب معالجة الوثائق (Document Processing Pipeline)** - تحميل → تجزئة → تضمين → تخزين.
+**خط أنابيب معالجة المستندات** - تحميل → تقسيم → تضمين → تخزين.
-**مخزن التضمينات في الذاكرة (In-Memory Embedding Store)** - تخزين غير دائم للاختبارات.
+**مخزن التضمينات في الذاكرة** - تخزين غير دائم للاختبار.
-**RAG** - يجمع بين الاسترجاع والتوليد لتدعيم الإجابات.
+**RAG** - يجمع بين الاستخراج والتوليد لتأسيس الاستجابات.
-**درجة التشابه (Similarity Score)** - مقياس (0-1) للتشابه الدلالي.
+**درجة التشابه** - مقياس (0-1) للتشابه الدلالي.
-**مرجع المصدر (Source Reference)** - بيانات وصفية عن المحتوى المسترجع.
+**مرجع المصدر** - بيانات وصفية عن المحتوى المسترجع.
-## الوكلاء والأدوات - [الوحدة 04](../04-tools/README.md)
+## Agents and Tools - [الوحدة 04](../04-tools/README.md)
-**@Tool Annotation** - يحدد طرق جافا كأدوات قابلة للاستدعاء عبر الذكاء الاصطناعي.
+**@Tool Annotation** - يعلّم طرق جافا كأدوات يمكن للذكاء الاصطناعي استدعاؤها.
-**نمط ReAct** - استدلال → تصرف → مراقبة → تكرار.
+**نمط ReAct** - التفكير → الفعل → الملاحظة → التكرار.
-**إدارة الجلسة (Session Management)** - سياقات منفصلة لمستخدمين مختلفين.
+**إدارة الجلسة** - سياقات منفصلة لمستخدمين مختلفين.
-**الأداة (Tool)** - وظيفة يمكن لوكيل الذكاء الاصطناعي استدعاؤها.
+**الأداة** - وظيفة يمكن لوكيل الذكاء الاصطناعي استدعاؤها.
-**وصف الأداة (Tool Description)** - توثيق هدف الأداة ومعاملاتها.
+**وصف الأداة** - توثيق غرض الأداة ومعلماتها.
-## الوحدة الوكيلة - [الوحدة 05](../05-mcp/README.md)
+## Agentic Module - [الوحدة 05](../05-mcp/README.md)
-**@Agent Annotation** - يحدد الواجهات كوكلاء ذكاء اصطناعي مع تعريف سلوك تصريحي.
+**@Agent Annotation** - يعلّم الواجهات كوكلاء ذكاء اصطناعي مع تعريف سلوكي إعلاني.
-**المستمع الوكلي (Agent Listener)** - نقطة متابعة تنفيذ الوكيل عبر `beforeAgentInvocation()` و`afterAgentInvocation()`.
+**مراقب الوكيل** - تعليقة لمراقبة تنفيذ الوكيل عبر `beforeAgentInvocation()` و `afterAgentInvocation()`.
-**نطاق وكالي (Agentic Scope)** - ذاكرة مشتركة تخزن بها الوكلاء المخرجات باستخدام `outputKey` لكي يستهلكها الوكلاء اللاحقون.
+**نطاق الوكيل** - ذاكرة مشتركة يخزن فيها الوكلاء المخرجات باستخدام `outputKey` ليستهلكها الوكلاء التابعون.
-**AgenticServices** - مصنع لإنشاء وكلاء باستخدام `agentBuilder()` و`supervisorBuilder()`.
+**AgenticServices** - مصنع لإنشاء الوكلاء باستخدام `agentBuilder()` و `supervisorBuilder()`.
-**تدفق العمل الشرطي (Conditional Workflow)** - التوجيه حسب الشروط لوكلاء متخصصين مختلفين.
+**سير العمل الشرطي** - التوجيه بناءً على الشروط إلى وكلاء متخصصين مختلفين.
-**الإنسان في الحلقة (Human-in-the-Loop)** - نمط تدفق عمل يضيف نقاط فحص بشرية للموافقة أو مراجعة المحتوى.
+**البشر في الحلقة** - نمط سير عمل يضيف نقاط تحقق بشرية للموافقة أو مراجعة المحتوى.
-**langchain4j-agentic** - تبعية Maven لبناء وكلاء تصريحيين (تجريبي).
+**langchain4j-agentic** - تبعية Maven لبناء الوكلاء بالأسلوب الإعلاني (تجريبي).
-**تدفق العمل التكراري (Loop Workflow)** - تكرار تنفيذ الوكيل حتى يتحقق شرط (مثلاً درجة جودة ≥ 0.8).
+**سير عمل الحلقة** - تكرار تنفيذ الوكيل حتى تتحقق شرط (مثل درجة الجودة ≥ 0.8).
-**outputKey** - معلمة توضيحية للوكيل تحدد مكان تخزين النتائج في النطاق الوكالي.
+**outputKey** - معامل تعليمة الوكيل يحدد مكان تخزين النتائج في نطاق الوكيل.
-**تدفق العمل الموازي (Parallel Workflow)** - تشغيل وكلاء متعددين في الوقت نفسه لمهام مستقلة.
+**سير عمل متوازٍ** - تشغيل عدة وكلاء في الوقت ذاته لمهام مستقلة.
-**استراتيجية الاستجابة (Response Strategy)** - كيف يشكل المشرف الإجابة النهائية: آخر، ملخص، أو مصنف.
+**استراتيجية الاستجابة** - كيف يكوّن المشرف الإجابة النهائية: الأخير، الملخص، أو المُقيّم.
-**تدفق العمل التسلسلي (Sequential Workflow)** - تنفيذ الوكلاء بالترتيب حيث تنتقل المخرجات للخطوة التالية.
+**سير عمل تسلسلي** - تنفيذ الوكلاء بالتسلسل حيث يتدفق الناتج إلى الخطوة التالية.
-**نمط المشرف الوكلي (Supervisor Agent Pattern)** - نمط وكالي متقدم حيث يقرر مشرف LLM ديناميكياً الوكلاء الفرعيين الذين سيتم استدعاؤهم.
+**نمط وكيل المشرف** - نمط عميائي متقدم حيث يقرر مشرف LLM بشكل ديناميكي الوكلاء الفرعيين الذين يتم استدعاؤهم.
-## بروتوكول سياق النموذج (MCP) - [الوحدة 05](../05-mcp/README.md)
+## Model Context Protocol (MCP) - [الوحدة 05](../05-mcp/README.md)
-**langchain4j-mcp** - تبعية Maven للتكامل مع MCP في LangChain4j.
+**langchain4j-mcp** - تبعية Maven لتكامل MCP في LangChain4j.
-**MCP** - بروتوكول سياق النموذج: معيار لربط تطبيقات الذكاء الاصطناعي بالأدوات الخارجية. بنِ مرّة، استخدم في كل مكان.
+**MCP** - بروتوكول سياق النموذج: معيار لربط تطبيقات الذكاء الاصطناعي بالأدوات الخارجية. ابْنِ مرة واحدة، استخدم في كل مكان.
-**عميل MCP (MCP Client)** - تطبيق يتصل بخوادم MCP لاكتشاف واستخدام الأدوات.
+**عميل MCP** - تطبيق يتصل بخوادم MCP لاكتشاف الأدوات واستخدامها.
-**خادم MCP (MCP Server)** - خدمة تعرض الأدوات عبر MCP مع أوصاف واضحة ومخططات المعاملات.
+**خادم MCP** - خدمة تعرض الأدوات عبر MCP مع أوصاف واضحة ومخططات المعلمات.
-**McpToolProvider** - مكون LangChain4j يغلف أدوات MCP للاستخدام في خدمات الذكاء الاصطناعي والوكلاء.
+**McpToolProvider** - مكون LangChain4j يغلّف أدوات MCP للاستخدام في خدمات الذكاء الاصطناعي والوكلاء.
-**McpTransport** - واجهة للاتصال بـ MCP. التنفيذا تشمل Stdio وHTTP.
+**McpTransport** - واجهة للتواصل عبر MCP. من تطبيقاتها Stdio و HTTP.
-**نقل Stdio (Stdio Transport)** - نقل عملية محلية عبر stdin/stdout. مفيد للوصول إلى نظام الملفات أو أدوات سطر الأوامر.
+**نقل Stdio** - نقل عملية محلية عبر stdin/stdout. مفيد للوصول إلى نظام الملفات أو أدوات سطر الأوامر.
-**StdioMcpTransport** - تنفيذ LangChain4j لإنشاء خادم MCP كناتج فرعي.
+**StdioMcpTransport** - تنفيذ LangChain4j يشغل خادم MCP كعملية فرعية.
-**اكتشاف الأدوات (Tool Discovery)** - العميل يستعلم الخادم عن الأدوات المتاحة مع الأوصاف والمخططات.
+**اكتشاف الأدوات** - العميل يستعلم الخادم عن الأدوات المتاحة مع الأوصاف والمخططات.
-## خدمات Azure - [الوحدة 01](../01-introduction/README.md)
+## Azure Services - [الوحدة 01](../01-introduction/README.md)
-**بحث Azure AI** - بحث سحابي مع قدرات المتجهات. [الوحدة 03](../03-rag/README.md)
+**Azure AI Search** - بحث سحابي مع قدرات المتجهات. [الوحدة 03](../03-rag/README.md)
-**أداة Azure Developer CLI (azd)** - تنشر موارد Azure.
+**أداة تطوير Azure CLI (azd)** - تنشر موارد Azure.
-**Azure OpenAI** - خدمة الذكاء الاصطناعي المؤسسية لمايكروسوفت.
+**Azure OpenAI** - خدمة الذكاء الاصطناعي المؤسسية من مايكروسوفت.
-**Bicep** - لغة البنية التحتية ككود لـ Azure. [دليل البنية التحتية](../01-introduction/infra/README.md)
+**Bicep** - لغة البنية التحتية كرمز لـ Azure. [دليل البنية التحتية](../01-introduction/infra/README.md)
**اسم النشر** - اسم لنشر النموذج في Azure.
**GPT-5.2** - أحدث نموذج OpenAI مع تحكم في الاستدلال. [الوحدة 02](../02-prompt-engineering/README.md)
-## الاختبار والتطوير - [دليل الاختبار](TESTING.md)
+## Testing and Development - [دليل الاختبار](TESTING.md)
-**Dev Container** - بيئة تطوير معزولة بالحاويات. [التكوين](../../../.devcontainer/devcontainer.json)
+**حاوية التطوير** - بيئة تطوير محاكاة بالحاويات. [التكوين](../../../.devcontainer/devcontainer.json)
-**نماذج GitHub** - ساحة نماذج ذكاء اصطناعي مجانية. [الوحدة 00](../00-quick-start/README.md)
+**الاختبار في الذاكرة** - اختبار مع التخزين في الذاكرة.
-**الاختبار في الذاكرة** - اختبار باستخدام التخزين في الذاكرة.
+**الاختبار المتكامل** - اختبار مع البنية التحتية الحقيقية.
-**الاختبار التكاملي** - اختبار باستخدام البنية التحتية الحقيقية.
-
-**Maven** - أداة أتمتة البناء لجافا.
+**Maven** - أداة أتمتة بناء جافا.
**Mockito** - إطار عمل لمحاكاة جافا.
-**Spring Boot** - إطار عمل تطبيقات جافا. [الوحدة 01](../01-introduction/README.md)
+**Spring Boot** - إطار تطبيقات جافا. [الوحدة 01](../01-introduction/README.md)
---
-**إخلاء مسؤولية**:
-تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بالرغم من حرصنا على الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار النسخة الأصلية من المستند بلغتها الأصلية المصدر الموثوق. للمعلومات الهامة، يُنصح بالترجمة المهنية البشرية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
+**تنويه**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/docs/TESTING.md b/translations/ar/docs/TESTING.md
index 40069fe35..8580ef382 100644
--- a/translations/ar/docs/TESTING.md
+++ b/translations/ar/docs/TESTING.md
@@ -2,17 +2,17 @@
## جدول المحتويات
-- [بدء سريع](../../../docs)
-- [ما تغطيه الاختبارات](../../../docs)
-- [تشغيل الاختبارات](../../../docs)
-- [تشغيل الاختبارات في VS Code](../../../docs)
-- [أنماط الاختبار](../../../docs)
-- [فلسفة الاختبار](../../../docs)
-- [الخطوات التالية](../../../docs)
+- [البدء السريع](#البدء-السريع)
+- [ما تغطيه الاختبارات](#ما-تغطيه-الاختبارات)
+- [تشغيل الاختبارات](#تشغيل-الاختبارات)
+- [تشغيل الاختبارات في VS Code](#تشغيل-الاختبارات-في-vs-code)
+- [أنماط الاختبار](#أنماط-الاختبار)
+- [فلسفة الاختبار](#فلسفة-الاختبار)
+- [الخطوات التالية](#الخطوات-التالية)
-توجهك هذه الدليل خلال الاختبارات التي توضح كيفية اختبار تطبيقات الذكاء الاصطناعي دون الحاجة إلى مفاتيح API أو خدمات خارجية.
+هذا الدليل يشرح لك الاختبارات التي توضح كيفية اختبار تطبيقات الذكاء الاصطناعي دون الحاجة إلى مفاتيح API أو خدمات خارجية.
-## بدء سريع
+## البدء السريع
شغّل جميع الاختبارات بأمر واحد:
@@ -26,32 +26,31 @@ mvn test
mvn --% test
```
-عندما تجتاز جميع الاختبارات، ينبغي أن ترى مخرجات مشابهة للصورة أدناه — تم تشغيل الاختبارات بدون أي إخفاقات.
+عند نجاح جميع الاختبارات، يجب أن ترى مخرجات تشبه لقطة الشاشة أدناه — الاختبارات تُشغّل بدون أي فشل.
-
+
-*تنفيذ اختبار ناجح يظهر جميع الاختبارات تجتاز بدون أي إخفاقات*
+*تنفيذ اختبار ناجح يعرض اجتياز جميع الاختبارات دون أخطاء*
## ما تغطيه الاختبارات
-يركز هذا المقرر على **اختبارات الوحدة** التي تُشغل محليًا. كل اختبار يوضح مفهومًا معينًا من LangChain4j بشكل منعزل. هرم الاختبار أدناه يبين مكان اختبارات الوحدة — تشكل الأساس السريع والموثوق الذي يبني عليه باقي استراتيجيتك للاختبار.
+يركز هذا المقرر على **اختبارات الوحدة** التي تُشغل محليًا. كل اختبار يعرض مفهومًا محددًا من LangChain4j بشكل معزول. تعرض الهرمية الاختبارية أدناه مكان اختبارات الوحدة — فهي تشكل الأساس السريع والموثوق الذي يبني عليه بقية استراتيجية الاختبار الخاصة بك.
-
+
-*هرم الاختبار يوضح التوازن بين اختبارات الوحدة (سريعة، معزولة)، اختبارات التكامل (مكونات حقيقية)، واختبارات من النهاية إلى النهاية. هذا التدريب يغطي اختبار الوحدة.*
+*هرمية الاختبار توضح التوازن بين اختبارات الوحدة (سريعة، معزولة)، اختبارات التكامل (مكونات حقيقية)، والاختبارات الشاملة. هذا التدريب يغطي اختبار الوحدة.*
| الوحدة | الاختبارات | التركيز | الملفات الرئيسية |
-|--------|-------|-------|-----------|
-| **00 - بدء سريع** | 6 | قوالب المطالبات واستبدال المتغيرات | `SimpleQuickStartTest.java` |
-| **01 - مقدمة** | 8 | ذاكرة المحادثة والدردشة القائمة على الحالة | `SimpleConversationTest.java` |
-| **02 - هندسة المطالبات** | 12 | أنماط GPT-5.2، مستويات الحماس، المخرجات المهيكلة | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | استيعاب الوثائق، التضمينات، البحث التشابهي | `DocumentServiceTest.java` |
-| **04 - الأدوات** | 12 | استدعاء الدوال وربط الأدوات | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | بروتوكول سياق النموذج مع نقل stdio | `SimpleMcpTest.java` |
+|--------|------------|---------|------------------|
+| **01 - المقدمة** | 8 | ذاكرة المحادثة والدردشة بحالة مستمرة | `SimpleConversationTest.java` |
+| **02 - هندسة الموجهات** | 12 | أنماط GPT-5.2، مستويات الحماس، المخرجات المهيكلة | `SimpleGpt5PromptTest.java` |
+| **03 - RAG** | 10 | إدخال المستندات، التضمين، البحث في التشابه | `DocumentServiceTest.java` |
+| **04 - الأدوات** | 12 | استدعاء الدوال وتسلسل الأدوات | `SimpleToolsTest.java` |
+| **05 - MCP** | 8 | بروتوكول سياق النموذج باستخدام نقل stdio | `SimpleMcpTest.java` |
## تشغيل الاختبارات
-**شغّل جميع الاختبارات من الجذر:**
+**شغل جميع الاختبارات من الجذر:**
**Bash:**
```bash
@@ -63,7 +62,7 @@ mvn test
mvn --% test
```
-**شغّل اختبارات لوحدة محددة:**
+**شغل اختبارات وحدة معينة:**
**Bash:**
```bash
@@ -79,7 +78,7 @@ cd 01-introduction; mvn --% test
mvn --% test -pl 01-introduction
```
-**شغّل فئة اختبار واحدة:**
+**شغل فئة اختبار واحدة:**
**Bash:**
```bash
@@ -91,7 +90,7 @@ mvn test -Dtest=SimpleConversationTest
mvn --% test -Dtest=SimpleConversationTest
```
-**شغّل طريقة اختبار محددة:**
+**شغل طريقة اختبار معينة:**
**Bash:**
```bash
@@ -100,36 +99,36 @@ mvn test -Dtest=SimpleConversationTest#يجب_الحفاظ_على_تاريخ_ا
**PowerShell:**
```powershell
-mvn --% test -Dtest=SimpleConversationTest#يجب_الحفاظ_على_سجل_المحادثة
+mvn --% test -Dtest=SimpleConversationTest#يجب_الحفاظ_على_تاريخ_المحادثة
```
## تشغيل الاختبارات في VS Code
إذا كنت تستخدم Visual Studio Code، يوفر مستكشف الاختبارات واجهة رسومية لتشغيل وتصحيح الاختبارات.
-
+
-*مستكشف اختبار VS Code يعرض شجرة الاختبار مع جميع فئات اختبار جافا وأساليب الاختبار الفردية*
+*مستكشف اختبار VS Code يعرض شجرة الاختبارات مع جميع فئات اختبار Java والطرق الفردية*
**لتشغيل الاختبارات في VS Code:**
-1. افتح مستكشف الاختبارات بالنقر على أيقونة القارورة في شريط النشاط
-2. وسّع شجرة الاختبارات لرؤية جميع الوحدات وفئات الاختبار
+1. افتح مستكشف الاختبارات بالنقر على أيقونة الإناء في شريط النشاط
+2. وسع شجرة الاختبارات لرؤية جميع الوحدات وفئات الاختبار
3. انقر على زر التشغيل بجانب أي اختبار لتشغيله بشكل فردي
-4. انقر على "تشغيل جميع الاختبارات" لتنفيذ المجموعة كاملة
-5. انقر بزر الفأرة الأيمن على أي اختبار واختر "تصحيح الاختبار" لتعيين نقاط توقف والتنقل خلال الكود
+4. انقر على "Run All Tests" لتشغيل المجموعة كاملة
+5. انقر بزر الماوس الأيمن على أي اختبار واختر "Debug Test" لتهيئة نقاط التوقف والتنقل خلال الكود
-يعرض مستكشف الاختبارات علامات تحقق خضراء للاختبارات التي اجتازت ويقدم رسائل تفصيلية عند الفشل.
+يظهر مستكشف الاختبارات علامات تحقق خضراء للاختبارات الناجحة ويوفر رسائل فشل مفصلة عند فشل الاختبارات.
## أنماط الاختبار
-### النمط 1: اختبار قوالب المطالبات
+### النمط 1: اختبار قوالب الموجهات
-أبسط نمط يختبر قوالب المطالبات دون استدعاء أي نموذج ذكاء اصطناعي. تتحقق من أن استبدال المتغيرات يعمل بشكل صحيح وأن المطالبات منسقة كما هو متوقع.
+أبسط نمط يختبر قوالب الموجهات دون استدعاء أي نموذج ذكاء اصطناعي. تتحقق من أن استبدال المتغيرات يعمل بشكل صحيح وأن الموجهات منسقة كما هو متوقع.
-
+
-*اختبار قوالب المطالبات يعرض تدفق استبدال المتغيرات: القالب مع عناصر نائب → تطبيق القيم → التحقق من المخرجات المنسقة*
+*اختبار قوالب الموجهات يبين تدفق استبدال المتغيرات: القالب مع أماكن الحجز → تطبيق القيم → التحقق من المخرجات المنسقة*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-يُوجد هذا الاختبار في `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
+هذا النمط يتحقق من أن استبدال المتغير يعمل بشكل صحيح وأن الموجهات منسقة كما هو متوقع — دون الحاجة إلى مفتاح API أو استدعاء نموذج.
-**شغّله:**
+### النمط 2: تمثيل نماذج اللغة المزيفة
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#اختبار_تنسيق_نموذج_المطالبة
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#اختبار تنسيق قالب الطلب
-```
-
-### النمط 2: تمويه نماذج اللغة
-
-عند اختبار منطق المحادثة، استخدم Mockito لإنشاء نماذج وهمية تعيد ردودًا محددة مسبقًا. هذا يجعل الاختبارات سريعة، مجانية، وحتمية.
+عند اختبار منطق المحادثة، استخدم Mockito لإنشاء نماذج مزيفة تعيد استجابات محددة مسبقًا. هذا يجعل الاختبارات سريعة ومجانية وحتمية.
-
+
-*مقارنة توضح لماذا يُفضل استخدام التمويه للاختبار: إنها سريعة، مجانية، حتمية، ولا تتطلب مفاتيح API*
+*مقارنة توضح لماذا يُفضّل استخدام النماذج المزيفة للاختبار: فهي سريعة، مجانية، حتمية، ولا تتطلب مفاتيح API*
```java
@ExtendWith(MockitoExtension.class)
@@ -213,20 +200,20 @@ class SimpleConversationTest {
conversationService.chat(conversationId, "Third message");
List history = conversationService.getHistory(conversationId);
- assertThat(history).hasSize(6); // 3 رسائل من المستخدم + 3 رسائل من الذكاء الاصطناعي
+ assertThat(history).hasSize(6); // ٣ رسائل من المستخدم + ٣ رسائل من الذكاء الاصطناعي
}
}
```
-يظهر هذا النمط في `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. يضمن التمويه سلوكًا متسقًا حتى تتمكن من التحقق من أن إدارة الذاكرة تعمل بشكل صحيح.
+هذا النمط يظهر في `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. النموذج المزيف يضمن سلوكًا متسقًا لكي تتحقق من أن إدارة الذاكرة تعمل بشكل صحيح.
### النمط 3: اختبار عزل المحادثة
-يجب على ذاكرة المحادثة أن تحافظ على فصل المستخدمين المتعددين. يتحقق هذا الاختبار من أن المحادثات لا تخلط بين السياقات.
+يجب أن تحافظ ذاكرة المحادثة على فصل المستخدمين المتعددين. هذا الاختبار يتحقق من أن المحادثات لا تخلط السياقات.
-
+
-*اختبار عزل المحادثة يظهر تخزين ذاكرة منفصلة لمستخدمين مختلفين لمنع اختلاط السياقات*
+*اختبار عزل المحادثة يظهر تخزينات ذاكرة منفصلة لمستخدمين مختلفين لمنع خلط السياق*
```java
@Test
@@ -250,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-تحافظ كل محادثة على تاريخها الخاص المستقل. في الأنظمة الإنتاجية، هذا العزل ضروري لتطبيقات المستخدمين المتعددين.
+تحافظ كل محادثة على سجل مستقل خاص بها. في أنظمة الإنتاج، هذا العزل مهم جدًا لتطبيقات متعددة المستخدمين.
### النمط 4: اختبار الأدوات بشكل مستقل
-الأدوات هي دوال يمكن للذكاء الاصطناعي استدعاؤها. اختبرها مباشرة للتأكد من أنها تعمل بشكل صحيح بغض النظر عن قرارات الذكاء الاصطناعي.
+الأدوات هي دوال يمكن للذكاء الاصطناعي استدعاؤها. اختبرها مباشرة للتأكد من أنها تعمل بشكل صحيح بغض النظر عن قرارات AI.
-
+
-*اختبار الأدوات بشكل مستقل يعرض تنفيذ أداة وهمية بدون استدعاءات الذكاء الاصطناعي للتحقق من منطق الأعمال*
+*اختبار الأدوات بشكل مستقل يوضح تنفيذ الأداة المزيفة دون استدعاء AI للتحقق من منطق العمل*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-تحقق هذه الاختبارات من `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` من منطق الأدوات بدون تداخل الذكاء الاصطناعي. يظهر مثال الربط كيف يمر مخرج أداة إلى مدخل أخرى.
+هذه الاختبارات من `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` تتحقق من منطق الأدوات دون تدخل AI. يظهر مثال التسلسل كيف تُستخدم مخرجات أداة كمدخل لأخرى.
### النمط 5: اختبار RAG في الذاكرة
-تتطلب أنظمة RAG تقليديًا قواعد بيانات متجهية وخدمات تضمين. يتيح نمط الذاكرة اختبار الخطوط كاملة دون الاعتماد على خدمات خارجية.
+تتطلب أنظمة RAG تقليديًا قواعد بيانات متجه وتضمين خدمات التضمين. يسمح نمط الذاكرة باختبار كامل الخط بدون تبعيات خارجية.
-
+
-*تدفق عمل اختبار RAG في الذاكرة يظهر تحليل الوثائق، تخزين التضمينات، والبحث التشابهي دون الحاجة لقاعدة بيانات*
+*سير عمل اختبار RAG داخل الذاكرة يوضح تحليل المستندات، تخزين التضمين، والبحث في التشابه دون الحاجة لقاعدة بيانات*
```java
@Test
@@ -306,15 +293,15 @@ void testProcessTextDocument() {
}
```
-يخلق هذا الاختبار من `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` مستندًا في الذاكرة ويتحقق من تجزئة المحتوى والتعامل مع البيانات الوصفية.
+هذا الاختبار من `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` ينشئ مستندًا في الذاكرة ويتحقق من التقطيع والتعامل مع البيانات الوصفية.
### النمط 6: اختبار تكامل MCP
-اختبار وحدة MCP يختبر تكامل بروتوكول سياق النموذج باستخدام نقل stdio. تتحقق هذه الاختبارات من أن تطبيقك يمكنه تشغيل والتواصل مع خوادم MCP كعمليات فرعية.
+تختبر وحدة MCP تكامل بروتوكول سياق النموذج باستخدام نقل stdio. تتحقق هذه الاختبارات من أن تطبيقك يمكنه تشغيل خوادم MCP والتواصل معها كعمليات فرعية.
تتحقق الاختبارات في `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` من سلوك عميل MCP.
-**شغّلها:**
+**شغلها:**
**Bash:**
```bash
@@ -328,36 +315,35 @@ cd 05-mcp; mvn --% test
## فلسفة الاختبار
-اختبر كودك، لا اختبر الذكاء الاصطناعي. يجب أن تتحقق اختباراتك من الكود الذي تكتبه عبر فحص كيفية بناء المطالبات، كيفية إدارة الذاكرة، وكيف تنفذ الأدوات. ردود الذكاء الاصطناعي متغيرة ولا يجب أن تكون جزءًا من تأكيدات الاختبار. اسأل نفسك ما إذا كانت قالب مطالبتك يستبدل المتغيرات بشكل صحيح، وليس ما إذا كان الذكاء الاصطناعي يعطي الإجابة الصحيحة.
+اختبر الكود الخاص بك، وليس الذكاء الاصطناعي. يجب أن تتحقق اختباراتك من الكود الذي تكتبه بفحص كيفية بناء الموجهات، وإدارة الذاكرة، وتنفيذ الأدوات. استجابات AI متغيرة ولا ينبغي أن تكون جزءًا من تأكيدات الاختبار. اسأل نفسك هل قالب الموجه يستبدل المتغيرات بالشكل الصحيح، وليس ما إذا كان AI يعطي الإجابة الصحيحة.
-استخدم التمويه لنماذج اللغة. إنها تبعيات خارجية بطيئة، مكلفة، وغير حتمية. يجعل التمويه الاختبارات سريعة بالوحدات المللي ثانية بدل الثواني، مجانية بدون تكاليف API، وحتمية دائمًا تعطي نفس النتيجة.
+استخدم النماذج المزيفة لنماذج اللغة. فهي تبعيات خارجية بطيئة، مكلفة، وغير حتمية. يجعل التمثيل المزيف الاختبارات سريعة بآلاف الأضعاف، مجانية دون تكاليف API، وحتمية بذات النتيجة في كل مرة.
-حافظ على استقلالية الاختبارات. يجب أن يهيئ كل اختبار بياناته الخاصة، لا يعتمد على اختبارات أخرى، وينظف بعد نفسه. يجب أن تجتاز الاختبارات بغض النظر عن ترتيب التنفيذ.
+اجعل الاختبارات مستقلة. يجب أن يُعد كل اختبار بياناته الخاصة، ولا يعتمد على اختبارات أخرى، وينظف بعد نفسه. يجب أن تنجح الاختبارات بغض النظر عن ترتيب التنفيذ.
-اختبر الحالات الحدية بما يتجاوز المسار السعيد. جرّب المدخلات الفارغة، المدخلات الكبيرة جدًا، الأحرف الخاصة، المعلمات غير الصالحة، والشروط الحدية. غالبًا ما تكشف هذه عن عيوب لا يظهرها الاستخدام الطبيعي.
+اختبر الحالات الحدية خارج المسار السعيد. جرّب مدخلات فارغة، مدخلات كبيرة جدًا، حروف خاصة، معلمات غير صالحة، وظروف الحدود. غالبًا ما تكشف هذه عن أخطاء لا يكشفها الاستخدام العادي.
-استخدم أسماء وصفية. قارن بين `shouldMaintainConversationHistoryAcrossMultipleMessages()` و`test1()`. الأولى تخبرك بالضبط ما الذي يُختبر، مما يجعل تصحيح الأخطاء أسهل بكثير.
+استخدم أسماء وصفية. قارن بين `shouldMaintainConversationHistoryAcrossMultipleMessages()` و `test1()`. يوضح الأول بالضبط ما الذي يُختبر، مما يسهل تتبع الأخطاء كثيرًا.
## الخطوات التالية
-الآن بعد أن فهمت أنماط الاختبار، تعمّق أكثر في كل وحدة:
+الآن بعد أن فهمت أنماط الاختبار، تعمق أكثر في كل وحدة:
-- **[00 - بدء سريع](../00-quick-start/README.md)** - ابدأ بأساسيات قوالب المطالبات
-- **[01 - مقدمة](../01-introduction/README.md)** - تعلّم إدارة ذاكرة المحادثة
-- **[02 - هندسة المطالبات](../02-prompt-engineering/README.md)** - أتقن أنماط GPT-5.2 للمطالبات
-- **[03 - RAG](../03-rag/README.md)** - ابنِ أنظمة التوليد المعززة بالاسترجاع
-- **[04 - الأدوات](../04-tools/README.md)** - نفّذ استدعاء الدوال وربط الأدوات
+- **[01 - المقدمة](../01-introduction/README.md)** - تعلّم إدارة ذاكرة المحادثة
+- **[02 - هندسة الموجهات](../02-prompt-engineering/README.md)** - اتقن أنماط توجيه GPT-5.2
+- **[03 - RAG](../03-rag/README.md)** - بناء أنظمة توليد معززة بالاسترجاع
+- **[04 - الأدوات](../04-tools/README.md)** - تنفيذ استدعاء الدوال وتسلسل الأدوات
- **[05 - MCP](../05-mcp/README.md)** - دمج بروتوكول سياق النموذج
-يوفر ملف README في كل وحدة شروحات مفصلة للمفاهيم التي تم اختبارها هنا.
+كل ملف README للوحدة يقدم شروحات مفصلة للمفاهيم التي تم اختبارها هنا.
---
-**التنقل:** [← العودة إلى الرئيسي](../README.md)
+**التنقل:** [← العودة للرئيسية](../README.md)
---
-**إخلاء المسؤولية**:
-تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للحفاظ على الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر المعتمد والرسمي. للمعلومات الحرجة، يُوصى بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
+**تنويه**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/bg/.co-op-translator.json b/translations/bg/.co-op-translator.json
index abf2dd7ba..dbd19a8df 100644
--- a/translations/bg/.co-op-translator.json
+++ b/translations/bg/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "bg"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-03T00:00:47+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T11:06:58+00:00",
"source_file": "01-introduction/README.md",
"language_code": "bg"
},
@@ -18,20 +18,20 @@
"language_code": "bg"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-03T00:03:23+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T11:02:15+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "bg"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-03T00:04:59+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T11:06:06+00:00",
"source_file": "03-rag/README.md",
"language_code": "bg"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T08:34:22+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T11:04:43+00:00",
"source_file": "04-tools/README.md",
"language_code": "bg"
},
@@ -54,8 +54,8 @@
"language_code": "bg"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T16:01:11+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T11:00:51+00:00",
"source_file": "README.md",
"language_code": "bg"
},
@@ -72,14 +72,14 @@
"language_code": "bg"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-03T00:08:28+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T11:02:52+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "bg"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-03T00:09:12+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T11:03:28+00:00",
"source_file": "docs/TESTING.md",
"language_code": "bg"
}
diff --git a/translations/bg/00-quick-start/README.md b/translations/bg/00-quick-start/README.md
deleted file mode 100644
index 4773be6ef..000000000
--- a/translations/bg/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# Module 00: Бърз старт
-
-## Съдържание
-
-- [Въведение](../../../00-quick-start)
-- [Какво е LangChain4j?](../../../00-quick-start)
-- [Зависимости на LangChain4j](../../../00-quick-start)
-- [Предпоставки](../../../00-quick-start)
-- [Настройка](../../../00-quick-start)
- - [1. Вземете своя GitHub токен](../../../00-quick-start)
- - [2. Задайте своя токен](../../../00-quick-start)
-- [Стартиране на примерите](../../../00-quick-start)
- - [1. Основен чат](../../../00-quick-start)
- - [2. Шаблони за подсказки](../../../00-quick-start)
- - [3. Извикване на функции](../../../00-quick-start)
- - [4. Въпроси и отговори за документи (Easy RAG)](../../../00-quick-start)
- - [5. Отговорен AI](../../../00-quick-start)
-- [Какво показва всеки пример](../../../00-quick-start)
-- [Следващи стъпки](../../../00-quick-start)
-- [Отстраняване на проблеми](../../../00-quick-start)
-
-## Въведение
-
-Този бърз старт има за цел да ви помогне да започнете да работите с LangChain4j възможно най-бързо. Той обхваща абсолютните основи на изграждането на AI приложения с LangChain4j и GitHub модели. В следващите модули ще преминете към Azure OpenAI и GPT-5.2 и ще навлезете по-дълбоко във всеки концепт.
-
-## Какво е LangChain4j?
-
-LangChain4j е Java библиотека, която улеснява изграждането на AI-задвижвани приложения. Вместо да се занимавате с HTTP клиенти и парсване на JSON, работите с чисти Java API-та.
-
-„Верига“ в LangChain означава свързване на множество компоненти заедно – например можете да свържете подсказка към модел към парсър, или да свържете няколко AI повиквания, където един изход се подава като вход на следващото. Този бърз старт се фокусира върху основите, преди да разгледа по-сложни вериги.
-
-
-
-*Свързване на компоненти в LangChain4j – основни блокове, които се свързват, за да създадат мощни AI работни потоци*
-
-Ще използваме три основни компонента:
-
-**ChatModel** – интерфейс за взаимодействие с AI модели. Извиквате `model.chat("prompt")` и получавате отговор като низ. Използваме `OpenAiOfficialChatModel`, който работи с OpenAI-съвместими крайни точки като GitHub модели.
-
-**AiServices** – създава типобезопасни AI интерфейси за услуги. Дефинирате методи, анотирате ги с `@Tool` и LangChain4j управлява оркестрацията. AI автоматично извиква вашите Java методи когато е необходимо.
-
-**MessageWindowChatMemory** – поддържа историята на разговора. Без това всяка заявка е независима. С него AI помни предишните съобщения и поддържа контекст през няколко цикъла.
-
-
-
-*Архитектура на LangChain4j – основни компоненти, които работят заедно, за да задвижат вашите AI приложения*
-
-## Зависимости на LangChain4j
-
-Този бърз старт използва три Maven зависимости в [`pom.xml`](../../../00-quick-start/pom.xml):
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-Модулът `langchain4j-open-ai-official` предоставя класа `OpenAiOfficialChatModel`, който се свързва с OpenAI-съвместими API-та. GitHub модели използват същия API формат, така че не е необходим специален адаптер – просто насочете основния URL към `https://models.github.ai/inference`.
-
-Модулът `langchain4j-easy-rag` предоставя автоматично разделяне на документи, вграждане и извличане, така че да може да изградите RAG приложения без да конфигурирате всеки етап ръчно.
-
-## Предпоставки
-
-**Използвате Dev Container?** Java и Maven вече са инсталирани. Нужно е само да имате GitHub Personal Access Token.
-
-**Локална разработка:**
-- Java 21+, Maven 3.9+
-- GitHub Personal Access Token (инструкции по-долу)
-
-> **Важно:** Този модул използва `gpt-4.1-nano` от GitHub модели. Не променяйте името на модела в кода – той е конфигуриран да работи с наличните модели на GitHub.
-
-## Настройка
-
-### 1. Вземете своя GitHub токен
-
-1. Отидете на [GitHub Настройки → Personal Access Tokens](https://github.com/settings/personal-access-tokens)
-2. Кликнете „Generate new token“
-3. Задайте описателно име (например „LangChain4j Demo“)
-4. Изберете срок на валидност (препоръчително 7 дни)
-5. Под „Account permissions“ намерете „Models“ и задайте на „Read-only“
-6. Кликнете „Generate token“
-7. Копирайте и запазете токена си – няма да го видите отново
-
-### 2. Задайте своя токен
-
-**Опция 1: Използване на VS Code (Препоръчително)**
-
-Ако използвате VS Code, добавете токена в `.env` файла в корена на проекта:
-
-Ако файлът `.env` не съществува, копирайте `.env.example` до `.env` или създайте нов `.env` файл в корена на проекта.
-
-**Примерен `.env` файл:**
-```bash
-# В /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-След това просто кликнете с десния бутон върху който и да е демонстрационен файл (например `BasicChatDemo.java`) в Explorer и изберете **„Run Java“** или използвайте конфигурациите за стартиране от панела Run and Debug.
-
-**Опция 2: С помощта на терминал**
-
-Задайте токена като променлива на средата:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## Стартиране на примерите
-
-**С VS Code:** Просто кликнете с десен бутон върху който и да е демонстрационен файл в Explorer и изберете **„Run Java“**, или използвайте конфигурациите за стартиране от панела Run and Debug (преди това трябва да сте добавили токена в `.env` файла).
-
-**С Maven:** Алтернативно, можете да стартирате от командния ред:
-
-### 1. Основен чат
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. Шаблони за подсказки
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-Показва zero-shot, few-shot, chain-of-thought и подсказки на база роли.
-
-### 3. Извикване на функции
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-AI автоматично извиква вашите Java методи когато е нужно.
-
-### 4. Въпроси и отговори за документи (Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-Задавайте въпроси за вашите документи, използвайки Easy RAG с автоматично вграждане и извличане.
-
-### 5. Отговорен AI
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-Вижте как филтрите за безопасност на AI блокират вредно съдържание.
-
-## Какво показва всеки пример
-
-**Основен чат** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-Започнете тук, за да видите LangChain4j в най-простия му вид. Ще създадете `OpenAiOfficialChatModel`, ще изпратите подсказка с `.chat()` и ще получите отговор. Това демонстрира основата: как да инициализирате модели с персонализирани крайни точки и API ключове. След като разберете този модел, всичко останало се изгражда върху него.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 Опитайте с [GitHub Copilot](https://github.com/features/copilot) Chat:** Отворете [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) и попитайте:
-> - „Как да премина от GitHub Models към Azure OpenAI в този код?“
-> - „Какви други параметри мога да конфигурирам в OpenAiOfficialChatModel.builder()?“
-> - „Как да добавя стрийминг на отговорите вместо да чакам цялостния отговор?“
-
-**Инженерство на подсказки** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-Сега, когато знаете как да говорите с модел, нека разгледаме какво му казвате. Този демонстрационен пример използва същата настройка на модела, но показва пет различни шаблона за подсказки. Опитайте zero-shot подсказки за директни инструкции, few-shot подсказки, които се учат от примери, chain-of-thought подсказки, които разкриват стъпки на разсъждение, и подсказки на база роли, които задават контекст. Ще видите как един и същ модел дава драматично различни резултати в зависимост от това как формулирате заявката си.
-
-Демонстрацията също показва шаблони за подсказки, които са мощен начин за създаване на многократно използваеми подсказки с променливи.
-Долният пример показва подсказка, използваща `PromptTemplate` на LangChain4j за попълване на променливи. AI ще отговори въз основа на посочената дестинация и дейност.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 Опитайте с [GitHub Copilot](https://github.com/features/copilot) Chat:** Отворете [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) и попитайте:
-> - „Каква е разликата между zero-shot и few-shot подсказките, и кога да използвам коя?“
-> - „Как параметърът temperature влияе на отговорите на модела?“
-> - „Какви са някои техники за предотвратяване на атаки с вкарване на подсказки в продукция?“
-> - „Как да създам многократно използваеми обекти PromptTemplate за често срещани шаблони?“
-
-**Интеграция на инструменти** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-Тук LangChain4j става мощен. Ще използвате `AiServices`, за да създадете AI асистент, който може да извиква вашите Java методи. Просто анотирайте методите с `@Tool("описание")` и LangChain4j се грижи за останалото – AI автоматично решава кога да използва всеки инструмент според това, което потребителят пита. Това демонстрира извикване на функции – ключова техника за изграждане на AI, който може да предприема действия, а не само да отговаря на въпроси.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 Опитайте с [GitHub Copilot](https://github.com/features/copilot) Chat:** Отворете [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) и попитайте:
-> - „Как работи анотацията @Tool и какво прави LangChain4j с нея зад кулисите?“
-> - „Може ли AI да извика няколко инструмента последователно, за да реши сложни проблеми?“
-> - „Какво се случва, ако инструмент хвърли изключение – как да обработвам грешки?“
-> - „Как бих интегрирал истинско API вместо този пример с калкулатор?“
-
-**Въпроси и отговори за документи (Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-Тук ще видите RAG (генериране с извличане) с подхода "Easy RAG" на LangChain4j. Документите се зареждат, автоматично се разделят и вграждат в паметта, след което съдържателен извличач доставя релевантни части към AI по време на запитване. AI отговаря въз основа на вашите документи, а не на общото си знание.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 Опитайте с [GitHub Copilot](https://github.com/features/copilot) Chat:** Отворете [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) и попитайте:
-> - „Как RAG предотвратява халюцинациите на AI в сравнение с използването на тренировъчните данни на модела?“
-> - „Каква е разликата между този лесен подход и персонализиран RAG пайплайн?“
-> - „Как бих мащабирал това, за да обхване множество документи или по-големи бази знания?“
-
-**Отговорен AI** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-Изградете безопасност на AI с многослойни защити. Този демо пример показва два слоя защита, работещи заедно:
-
-**Част 1: LangChain4j Input Guardrails** – блокира опасни подсказки преди да достигнат до LLM. Създавайте персонализирани guardrails, които проверяват за забранени ключови думи или шаблони. Те се изпълняват във вашия код, така че са бързи и безплатни.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**Част 2: Филтри за безопасност на доставчика** – GitHub модели имат вградени филтри, които хващат това, което вашите guardrails могат да пропуснат. Ще видите твърди блокировки (HTTP 400 грешки) при сериозни нарушения и меки откази, при които AI учтиво отказва.
-
-> **🤖 Опитайте с [GitHub Copilot](https://github.com/features/copilot) Chat:** Отворете [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) и попитайте:
-> - „Какво представлява InputGuardrail и как да създам свой собствен?“
-> - „Каква е разликата между твърд блок и мек отказ?“
-> - „Защо да използвам и guardrails, и филтри на доставчика заедно?“
-
-## Следващи стъпки
-
-**Следващ модул:** [01-introduction - Запознаване с LangChain4j](../01-introduction/README.md)
-
----
-
-**Навигация:** [← Обратно към основното](../README.md) | [Напред: Модул 01 - Въведение →](../01-introduction/README.md)
-
----
-
-## Отстраняване на проблеми
-
-### Първа компилация с Maven
-
-**Проблем:** Първоначалното `mvn clean compile` или `mvn package` отнема дълго (10–15 минути)
-
-**Причина:** Maven трябва да изтегли всички зависимости на проекта (Spring Boot, LangChain4j библиотеки, Azure SDK и др.) при първата компилация.
-
-**Решение:** Това е нормално поведение. Следващите компилации ще бъдат значително по-бързи, тъй като зависимостите са кеширани локално. Времето за изтегляне зависи от скоростта на вашата мрежа.
-
-### Синтаксис на Maven команди в PowerShell
-
-**Проблем:** Maven командите се провалят с грешка `Unknown lifecycle phase ".mainClass=..."`
-**Причина**: PowerShell тълкува `=` като оператор за присвояване на променлива, което разваля синтаксиса на Maven свойството
-
-**Решение**: Използвайте операторa за спиране на парсване `--%` преди Maven командата:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-Операторът `--%` казва на PowerShell да предаде всички останали аргументи буквално на Maven без тълкуване.
-
-### Показване на емоджита в Windows PowerShell
-
-**Проблем**: Отговорите от AI показват неразбираеми символи (напр. `????` или `â??`) вместо емоджита в PowerShell
-
-**Причина**: По подразбиране енкодингът на PowerShell не поддържа UTF-8 емоджита
-
-**Решение**: Изпълнете тази команда преди стартирането на Java приложения:
-```cmd
-chcp 65001
-```
-
-Това принуждава използването на UTF-8 енкодинг в терминала. Като алтернатива, използвайте Windows Terminal, който има по-добра поддръжка на Unicode.
-
-### Отстраняване на грешки при API повиквания
-
-**Проблем**: Грешки при удостоверяване, ограничения на заявките или неочаквани отговори от AI модела
-
-**Решение**: Примерите включват `.logRequests(true)` и `.logResponses(true)` за показване на API повикванията в конзолата. Това помага при отстраняване на грешки с удостоверяването, ограниченията на броя на заявките или неочаквани отговори. Премахнете тези флагове в продукция, за да намалите шума в логовете.
-
----
-
-
-**Отказ от отговорност**:
-Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на своя роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
-
\ No newline at end of file
diff --git a/translations/bg/01-introduction/README.md b/translations/bg/01-introduction/README.md
index 8b24a2f0b..ec0bd7a25 100644
--- a/translations/bg/01-introduction/README.md
+++ b/translations/bg/01-introduction/README.md
@@ -2,39 +2,39 @@
## Съдържание
-- [Видео преглед](../../../01-introduction)
-- [Какво ще научите](../../../01-introduction)
-- [Изисквания](../../../01-introduction)
-- [Разбиране на основния проблем](../../../01-introduction)
-- [Разбиране на токените](../../../01-introduction)
-- [Как работи паметта](../../../01-introduction)
-- [Как това използва LangChain4j](../../../01-introduction)
-- [Деплойване на Azure OpenAI инфраструктура](../../../01-introduction)
-- [Стартиране на приложението локално](../../../01-introduction)
-- [Използване на приложението](../../../01-introduction)
- - [Безсъстоянен чат (ляв панел)](../../../01-introduction)
- - [Състоянен чат (десен панел)](../../../01-introduction)
-- [Следващи стъпки](../../../01-introduction)
-
-## Видео преглед
-
-Гледайте тази жива сесия, която обяснява как да започнете с този модул:
+- [Видео обхождане](#видео-обхождане)
+- [Какво ще научите](#какво-ще-научите)
+- [Предварителни изисквания](#предварителни-изисквания)
+- [Разбиране на основния проблем](#разбиране-на-основния-проблем)
+- [Разбиране на токените](#разбиране-на-токените)
+- [Как работи паметта](#как-работи-паметта)
+- [Как това използва LangChain4j](#как-това-използва-langchain4j)
+- [Деплойване на Azure OpenAI инфраструктура](#деплойване-на-azure-openai-инфраструктура)
+- [Стартиране на приложението локално](#стартиране-на-приложението-локално)
+- [Използване на приложението](#използване-на-приложението)
+ - [Чат без състояние (ляв панел)](#чат-без-състояние-ляв-панел)
+ - [Чат със състояние (десен панел)](#чат-със-състояние-десен-панел)
+- [Следващи стъпки](#следващи-стъпки)
+
+## Видео обхождане
+
+Гледайте тази сесия на живо, която обяснява как да започнете с този модул:
## Какво ще научите
-В бързия старт използвахте GitHub Models за изпращане на заявки, повикване на инструменти, изграждане на RAG pipeline и тестване на защитни механизми. Тези демонстрации показаха възможностите — сега преминаваме към Azure OpenAI и GPT-5.2 и започваме да изграждаме приложения със стил на продукция. Този модул се фокусира върху разговорния AI, който запомня контекст и поддържа състояние — понятия, които бързите стартиращи демонстрации използваха зад кулисите, но не обясняваха.
+Това е вашата начална точка с LangChain4j и Azure OpenAI. Започваме с основите и започваме да изграждаме приложения в стил продукция. Този модул се фокусира върху разговорен ИИ, който помни контекста и поддържа състояние — основните концепции, върху които стъпва всеки следващ модул.
-Ще използваме Azure OpenAI с GPT-5.2 през цялото ръководство, защото неговите усъвършенствани способности за разсъждение правят поведението на различните модели по-ясно. Когато добавите памет, ще видите ясно разликата. Това улеснява разбирането на ролята на всяка съставна част във вашето приложение.
+Ще използваме Azure OpenAI GPT-5.2 през цялото ръководство, защото неговите усъвършенствани възможности за разсъждение правят поведението на различните модели по-ясно. Когато добавите памет, разликата се вижда ясно. Това улеснява разбирането какво всяка част носи на вашето приложение.
Ще изградите едно приложение, което демонстрира и двата модела:
-**Безсъстоянен чат** – Всяка заявка е независима. Моделът няма памет за предишни съобщения. Това е моделът, който използвахте в бързия старт.
+**Чат без състояние** - Всяка заявка е независима. Моделът няма памет за предишни съобщения. Това е най-простото начало.
-**Състоянен разговор** – Всяка заявка включва история на разговора. Моделът поддържа контекст през няколко стъпки на взаимодействие. Това е необходимо за приложения в продукция.
+**Чат със състояние** - Всяка заявка включва история на разговора. Моделът поддържа контекст през няколко реплики. Това е необходимо за продукционни приложения.
-## Изисквания
+## Предварителни изисквания
- Абонамент за Azure с достъп до Azure OpenAI
- Java 21, Maven 3.9+
@@ -47,41 +47,41 @@
## Разбиране на основния проблем
-Езиковите модели са безсъстояни. Всяко API повикване е независимо. Ако изпратите "Казвам се Джон" и после попитате "Как се казвам?", моделът няма идея, че току-що сте се представили. Той обработва всяка заявка сякаш е първият ви разговор.
+Езиковите модели са без състояние. Всяко API обаждане е независимо. Ако изпратите „Казвам се Джон“ и след това попитате „Как се казвам?“, моделът няма представа, че току-що сте се представили. Той третира всяка заявка сякаш е първият ви разговор.
-Това е приемливо за прости въпроси и отговори, но е безполезно за истински приложения. Ботовете за обслужване на клиенти трябва да помнят какво сте им казали. Личните асистенти имат нужда от контекст. Всеки разговор с няколко хода изисква памет.
+Това е приемливо за прости въпроси и отговори, но не е полезно за реални приложения. Ботовете за обслужване на клиенти трябва да помнят какво сте им казали. Личните асистенти се нуждаят от контекст. Всеки многоходов разговор изисква памет.
-Следната диаграма сравнява двата подхода — вляво е безсъстояното повикване, което забравя името ви; вдясно е състояното повикване, подпомогнато от ChatMemory, което го помни.
+Следната диаграма противопоставя двата подхода — от ляво, разговор без състояние, който забравя името ви; от дясно, разговор със състояние подкрепен от ChatMemory, който го помни.
-*Разликата между безсъстояни (независими повиквания) и състояни (осъзнати за контекста) разговори*
+*Разликата между разговорите без състояние (независими обаждания) и със състояние (запознати с контекста)*
## Разбиране на токените
-Преди да преминем към разговорите, е важно да разберем токените - основните текстови единици, които езиковите модели обработват:
+Преди да се потопите в разговори, важно е да разберете токените - основните единици текст, които езиковите модели обработват:
-*Пример как текстът се разбива на токени – "I love AI!" се превръща в 4 отделни единици за обработка*
+*Пример за това как текстът се разбива на токени - "Обичам ИИ!" става 4 отделни единици за обработка*
-Токените са как AI моделите измерват и обработват текста. Думи, пунктуация и дори интервали могат да са токени. Вашият модел има ограничение за колко токени може да обработи наведнъж (400 000 за GPT-5.2, с до 272 000 входни токена и 128 000 изходни токена). Разбирането на токените помага да управлявате дължината на разговора и разходите.
+Токените са начинът, по който ИИ моделите измерват и обработват текст. Думи, пунктуация и дори интервали могат да бъдат токени. Вашият модел има лимит за колко токени може да обработва наведнъж (400 000 за GPT-5.2, с до 272 000 входни токена и 128 000 изходни токена). Разбирането на токените помага да управлявате дължината на разговора и разходите.
## Как работи паметта
-Разговорната памет решава безсъстояния проблем, като поддържа история на разговора. Преди да изпратите заявката си към модела, рамката предшества с релевантни предишни съобщения. Когато попитате "Как се казвам?", системата всъщност изпраща цялата история на разговора, позволявайки на модела да види, че преди сте казали "Казвам се Джон."
+Чат паметта решава проблема без състояние, като поддържа историята на разговора. Преди да изпратите заявката към модела, фреймуъркът прибавя релевантни предишни съобщения. Когато питате „Как се казвам?“, системата всъщност изпраща цялата история на разговора, позволявайки на модела да види, че преди сте казали „Казвам се Джон“.
-LangChain4j предоставя реализации на памет, които се грижат за това автоматично. Вие избирате колко съобщения да се съхраняват, а рамката управлява контекстния прозорец. Диаграмата по-долу показва как MessageWindowChatMemory поддържа плъзгащ се прозорец на последните съобщения.
+LangChain4j предоставя имплементации на паметта, които го правят автоматично. Вие избирате колко съобщения да съхранявате и фреймуъркът управлява прозореца на контекста. Диаграмата по-долу показва как MessageWindowChatMemory поддържа приплъзващ се прозорец от последните съобщения.
-*MessageWindowChatMemory поддържа плъзгащ се прозорец от последни съобщения, като автоматично премахва старите*
+*MessageWindowChatMemory поддържа приплъзващ се прозорец от последните съобщения, автоматично премахвайки старите*
## Как това използва LangChain4j
-Този модул разширява бързия старт, като интегрира Spring Boot и добавя памет за разговори. Ето как парчетата се свързват:
+Този модул интегрира Spring Boot и добавя памет за разговори. Ето как частите се съчетават:
-**Зависимости** – Добавете две библиотеки LangChain4j:
+**Зависимости** - Добавете два LangChain4j библиотеки:
```xml
@@ -94,7 +94,7 @@ LangChain4j предоставя реализации на памет, коит
```
-**Модел за чат** – Конфигурирайте Azure OpenAI като Spring bean ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+**Чат модел** - Конфигурирайте Azure OpenAI като Spring bean ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -109,9 +109,9 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-Билдърът чете идентификационните данни от променливи на средата, зададени от `azd up`. Задаването на `baseUrl` към вашия Azure крайна точка кара OpenAI клиента да работи с Azure OpenAI.
+Билдърът чете креденшъли от променливи на средата, зададени от `azd up`. Задаването на `baseUrl` към вашия Azure endpoint прави OpenAI клиента да работи с Azure OpenAI.
-**Памет за разговори** – Следете историята на чата с MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
+**Памет за разговор** - Следете историята на чата с MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -124,14 +124,14 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-Създайте памет с `withMaxMessages(10)`, за да запазите последните 10 съобщения. Добавяйте потребителски и AI съобщения с типизирани обвивки: `UserMessage.from(text)` и `AiMessage.from(text)`. Вземете история с `memory.messages()` и я изпратете към модела. Сервисът съхранява отделни екземпляри на памет за всеки ID на разговор, позволявайки множество потребители да чатят едновременно.
+Създайте памет с `withMaxMessages(10)`, за да запазите последните 10 съобщения. Добавят се съобщения от потребител и ИИ с типовете обвивки: `UserMessage.from(text)` и `AiMessage.from(text)`. Историята се извлича с `memory.messages()` и се изпраща на модела. Сървисът съхранява отделни екземпляри памет по ID на разговора, което позволява множество потребители да чатят едновременно.
> **🤖 Опитайте с [GitHub Copilot](https://github.com/features/copilot) Chat:** Отворете [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) и питайте:
-> - "Как MessageWindowChatMemory решава кои съобщения да премахне, когато прозорецът е пълен?"
-> - "Мога ли да имплементирам персонализирано съхранение на памет, използвайки база данни вместо в паметта?"
+> - "Как MessageWindowChatMemory решава кои съобщения да отпаднат, когато прозорецът е пълен?"
+> - "Мога ли да имплементирам собствено съхранение на паметта, използвайки база данни вместо памет в RAM?"
> - "Как бих добавил обобщение за компресиране на старата история на разговора?"
-Крайната точка на безсъстояния чат пропуска паметта напълно - просто `chatModel.chat(prompt)`, както в бързия старт. Крайната точка на състояния чат добавя съобщения към паметта, извлича история и включва този контекст към всяка заявка. Същата конфигурация на модела, различни модели.
+Чат без състояние изцяло пропуска паметта - просто `chatModel.chat(prompt)`, както при бързия старт. Чат със състояние добавя съобщения към паметта, извлича история и включва този контекст при всяка заявка. Същата конфигурация на модела, различни модели на взаимодействие.
## Деплойване на Azure OpenAI инфраструктура
@@ -144,23 +144,23 @@ azd up # Изберете абонамент и местоположение (
**PowerShell:**
```powershell
cd 01-introduction
-azd up # Изберете абонамент и местоположение (препоръчва се eastus2)
+azd up # Изберете абонамент и локация (препоръчително eastus2)
```
-> **Забележка:** Ако срещнете грешка за таймаут (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), просто стартирайте `azd up` отново. Ресурсите на Azure може още да се подготвят на заден план и повторното опитване позволява завършване на деплоймента, когато ресурсите достигнат краен статус.
+> **Забележка:** Ако получите грешка за timeout (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), просто стартирайте `azd up` отново. Възможно е Azure ресурсите все още да се подготвят във фонов режим, а повторното стартиране позволява деплойването да завърши, когато ресурсите достигнат крайнo състояние.
Това ще:
1. Деплойне Azure OpenAI ресурс с GPT-5.2 и модели text-embedding-3-small
-2. Автоматично генерира `.env` файл в корена на проекта с идентификационни данни
-3. Настрой всички необходими променливи на средата
+2. Автоматично генерира `.env` файл в главната папка на проекта с креденшъли
+3. Настрои всички необходими променливи на средата
-**Имате проблеми с деплоймента?** Вижте [Infrastructure README](infra/README.md) за подробни инструкции за отстраняване на проблеми, включително конфликти със субдомейн, ръчно деплойване през Azure Portal и указания за конфигурация на модели.
+**Имате проблеми с деплойването?** Вижте [README за инфраструктура](infra/README.md) за подробна помощ при отстраняване на конфликти с имена на подпапки, ръчни стъпки през Azure Portal и насоки за конфигурация на модела.
-**Проверете дали деплойментът е успешен:**
+**Потвърдете успешното деплойване:**
**Bash:**
```bash
-cat ../.env # Трябва да показва AZURE_OPENAI_ENDPOINT, API_KEY и други.
+cat ../.env # Трябва да покаже AZURE_OPENAI_ENDPOINT, API_KEY и т.н.
```
**PowerShell:**
@@ -168,7 +168,7 @@ cat ../.env # Трябва да показва AZURE_OPENAI_ENDPOINT, API_KEY
Get-Content ..\.env # Трябва да показва AZURE_OPENAI_ENDPOINT, API_KEY и др.
```
-> **Забележка:** Командата `azd up` автоматично генерира `.env` файла. Ако трябва да го обновите по-късно, можете или да редактирате `.env` файла ръчно, или да го регенерирате чрез:
+> **Забележка:** Командата `azd up` автоматично генерира `.env` файла. Ако искате да го актуализирате по-късно, може да го редактирате ръчно или да го регенерирате като изпълните:
>
> **Bash:**
> ```bash
@@ -184,9 +184,9 @@ Get-Content ..\.env # Трябва да показва AZURE_OPENAI_ENDPOINT, A
## Стартиране на приложението локално
-**Проверете деплоймента:**
+**Потвърдете деплойването:**
-Уверете се, че `.env` файлът съществува в кореновата директория с Azure идентификационни данни. Стартирайте това от директорията на модула (`01-introduction/`):
+Уверете се, че файлът `.env` съществува в главната директория и съдържа Azure креденшъли. Стартирайте това от директорията на модула (`01-introduction/`):
**Bash:**
```bash
@@ -198,31 +198,31 @@ cat ../.env # Трябва да показва AZURE_OPENAI_ENDPOINT, API_KEY,
Get-Content ..\.env # Трябва да показва AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**Стартиране на приложенията:**
+**Стартирайте приложенията:**
-**Вариант 1: Използване на Spring Boot Dashboard (препоръчително за потребители на VS Code)**
+**Опция 1: Използване на Spring Boot Dashboard (Препоръчва се за потребители на VS Code)**
-Dev контейнерът включва разширението Spring Boot Dashboard, което предоставя визуален интерфейс за управление на всички Spring Boot приложения. Можете да го намерите в Activity Bar в лявата част на VS Code (потърсете иконата на Spring Boot).
+Dev контейнерът включва разширението Spring Boot Dashboard, което предоставя визуален интерфейс за управление на всички Spring Boot приложения. Можете да го намерите в Activity Bar отляво във VS Code (погледнете за иконата на Spring Boot).
-От Spring Boot Dashboard можете да:
-- Видите всички достъпни Spring Boot приложения в работната среда
-- Стартирате/спирате приложения с един клик
-- Преглеждате логове в реално време
-- Мониторинг на статус на приложенията
+От Spring Boot Dashboard можете:
+- Да видите всички налични Spring Boot приложения в работното пространство
+- Да стартирате/спирате приложения с един клик
+- Да виждате логовете на приложенията в реално време
+- Да наблюдавате състоянието на приложенията
-Просто кликнете бутонът за пускане до "introduction", за да стартирате този модул, или стартирайте всички модули наведнъж.
+Просто натиснете бутона за пускане до „introduction“, за да стартирате този модул, или стартирайте всички модули наведнъж.
*Spring Boot Dashboard във VS Code — стартирайте, спирайте и наблюдавайте всички модули от едно място*
-**Вариант 2: Използване на shell скриптове**
+**Опция 2: Използване на shell скриптове**
Стартирайте всички уеб приложения (модули 01-04):
**Bash:**
```bash
-cd .. # От коренната директория
+cd .. # От главната директория
./start-all.sh
```
@@ -246,9 +246,9 @@ cd 01-introduction
.\start.ps1
```
-И двата скрипта автоматично зареждат променливи на средата от кореновия `.env` файл и ще изградят JAR файловете, ако не съществуват.
+И двата скрипта автоматично зареждат променливите на средата от файла `.env` в главната папка и ще компилират JAR файловете, ако ги няма.
-> **Забележка:** Ако предпочитате да изградите всички модули ръчно преди стартиране:
+> **Забележка:** Ако предпочитате да компилирате всички модули ръчно преди стартиране:
>
> **Bash:**
> ```bash
@@ -264,7 +264,7 @@ cd 01-introduction
Отворете http://localhost:8080 в браузъра си.
-**За спиране:**
+**За да спрете:**
**Bash:**
```bash
@@ -282,41 +282,41 @@ cd ..; .\stop-all.ps1 # Всички модули
## Използване на приложението
-Приложението предоставя уеб интерфейс с две реализации на чат един до друг.
+Приложението предоставя уеб интерфейс с две имплементации на чат, разположени една до друга.
-*Табло, показващо опции за Simple Chat (безсъстоянен) и Conversational Chat (състоянен)*
+*Табло, показващо както Simple Chat (без състояние), така и Conversational Chat (със състояние)*
-### Безсъстоянен чат (ляв панел)
+### Чат без състояние (ляв панел)
-Опитайте първо това. Попитайте "Казвам се Джон" и веднага след това "Как се казвам?" Моделът няма да запомни, защото всяко съобщение е независимо. Това демонстрира основния проблем при базовата интеграция на езиков модел – липса на контекст на разговора.
+Опитайте първо това. Попитайте "Казвам се Джон" и веднага след това "Как се казвам?" Моделът няма да запомни, тъй като всяко съобщение е независимо. Това демонстрира основния проблем при базовата интеграция на езиков модел - липса на контекст в разговора.
-*AI не помни името ви от предишното съобщение*
+*ИИ не помни името ви от предишното съобщение*
-### Състоянен чат (десен панел)
+### Чат със състояние (десен панел)
-Сега опитайте същата последователност тук. Попитайте "Казвам се Джон" и после "Как се казвам?" Този път помни. Разликата е MessageWindowChatMemory - той поддържа историята на разговора и я включва при всяка заявка. Така работи разговорният AI в продукция.
+Сега опитайте същата последователност тук. Попитайте "Казвам се Джон" и после "Как се казвам?" Този път моделът помни. Разликата е MessageWindowChatMemory - той поддържа историята на разговора и я включва във всяка заявка. Така работи продукционният разговорен ИИ.
-*AI помни името ви от по-рано в разговора*
+*ИИ помни името ви от по-рано в разговора*
-И двата панела използват същия GPT-5.2 модел. Единствената разлика е паметта. Това ясно показва какво носи паметта на вашето приложение и защо е необходима за реални използвания.
+Двата панела използват един и същ модел GPT-5.2. Единствената разлика е паметта. Това ясно показва какво носи паметта на вашето приложение и защо е критична за реални случаи.
## Следващи стъпки
-**Следващ модул:** [02-prompt-engineering - Създаване на заявки с GPT-5.2](../02-prompt-engineering/README.md)
+**Следващ модул:** [02-prompt-engineering - Проектиране на подсказки с GPT-5.2](../02-prompt-engineering/README.md)
---
-**Навигация:** [← Предишен: Модул 00 - Бърз старт](../00-quick-start/README.md) | [Обратно към начало](../README.md) | [Напред: Модул 02 - Създаване на заявки →](../02-prompt-engineering/README.md)
+**Навигация:** [← Обратно към Началото](../README.md) | [Напред: Модул 02 - Проектиране на подсказки →](../02-prompt-engineering/README.md)
---
**Отказ от отговорност**:
-Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човешки преводач. Не носим отговорност за каквито и да било недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
+Този документ е преведен с помощта на AI преводачески услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
\ No newline at end of file
diff --git a/translations/bg/02-prompt-engineering/README.md b/translations/bg/02-prompt-engineering/README.md
index 5cefc7534..b9fed6329 100644
--- a/translations/bg/02-prompt-engineering/README.md
+++ b/translations/bg/02-prompt-engineering/README.md
@@ -1,32 +1,32 @@
-# Модул 02: Инженеринг на Подсказки с GPT-5.2
+# Модул 02: Инженерство на подсказки с GPT-5.2
## Съдържание
-- [Видео Обяснение](../../../02-prompt-engineering)
-- [Какво ще научите](../../../02-prompt-engineering)
-- [Предварителни изисквания](../../../02-prompt-engineering)
-- [Разбиране на инженеринг на подсказки](../../../02-prompt-engineering)
-- [Основи на инженеринг на подсказки](../../../02-prompt-engineering)
- - [Подсказване без примери (Zero-Shot Prompting)](../../../02-prompt-engineering)
- - [Подсказване с малко примери (Few-Shot Prompting)](../../../02-prompt-engineering)
- - [Верига на мислене (Chain of Thought)](../../../02-prompt-engineering)
- - [Подсказване на базата на роля (Role-Based Prompting)](../../../02-prompt-engineering)
- - [Шаблони за подсказки (Prompt Templates)](../../../02-prompt-engineering)
-- [Разширени модели](../../../02-prompt-engineering)
-- [Стартиране на приложението](../../../02-prompt-engineering)
-- [Екранни снимки на приложението](../../../02-prompt-engineering)
-- [Разглеждане на моделите](../../../02-prompt-engineering)
- - [Ниско срещу високо ентусиазирано поведение](../../../02-prompt-engineering)
- - [Изпълнение на задачи (предговори за инструменти)](../../../02-prompt-engineering)
- - [Саморефлектиращ се код](../../../02-prompt-engineering)
- - [Структуриран анализ](../../../02-prompt-engineering)
- - [Многоходов чат](../../../02-prompt-engineering)
- - [Мислене стъпка по стъпка](../../../02-prompt-engineering)
- - [Ограничен изход](../../../02-prompt-engineering)
-- [Какво наистина научавате](../../../02-prompt-engineering)
-- [Следващи стъпки](../../../02-prompt-engineering)
-
-## Видео Обяснение
+- [Видеопреглед](#видеопреглед)
+- [Какво ще научите](#какво-ще-научите)
+- [Изисквания](#изисквания)
+- [Разбиране на инженерството на подсказки](#разбиране-на-инженерството-на-подсказки)
+- [Основи на инженерството на подсказки](#основи-на-инженерството-на-подсказки)
+ - [Подсказване с нулев опит](#подсказване-с-нулев-опит)
+ - [Подсказване с няколко примера](#подсказване-с-няколко-примера)
+ - [Верига на мисълта](#верига-на-мисълта)
+ - [Подсказване на база роля](#подсказване-на-база-роля)
+ - [Шаблони за подсказки](#шаблони-за-подсказки)
+- [Разширени модели](#разширени-модели)
+- [Стартиране на приложението](#стартирайте-приложението)
+- [Екранни снимки на приложението](#скриншотове-на-приложението)
+- [Изследване на моделите](#изследване-на-шаблоните)
+ - [Ниско срещу високо желание](#ниска-срещу-висока-активност-eagerness)
+ - [Изпълнение на задачи (първоначални съобщения за инструменти)](#изпълнение-на-задачи-въведение-на-инструменти)
+ - [Саморефлектиращ код](#саморефлектиращ-се-код)
+ - [Структуриран анализ](#структуриран-анализ)
+ - [Многоходов чат](#разговор-с-много-ходове)
+ - [Разсъждение стъпка по стъпка](#разсъждение-стъпка-по-стъпка)
+ - [Ограничен изход](#ограничен-изход)
+- [Какво всъщност научавате](#какво-всъщност-учите)
+- [Следващи стъпки](#следващи-стъпки)
+
+## Видеопреглед
Гледайте тази сесия на живо, която обяснява как да започнете с този модул:
@@ -34,68 +34,68 @@
## Какво ще научите
-Следната диаграма предоставя преглед на ключовите теми и умения, които ще развиете в този модул — от техники за прецизиране на подсказки до стъпковия работен процес, който ще следвате.
+Следната диаграма предоставя преглед на ключовите теми и умения, които ще развиете в този модул — от техники за усъвършенстване на подсказките до стъпковия работен процес, който ще следвате.
-В предишните модули изследвахте базови взаимодействия на LangChain4j с GitHub модели и видяхте как паметта позволява разговорен AI с Azure OpenAI. Сега ще се фокусираме върху начина, по който задавате въпроси — самите подсказки — използвайки Azure OpenAI GPT-5.2. Начинът, по който структурирате подсказките си, драстично влияе върху качеството на отговорите, които получавате. Започваме с преглед на основните техники за подсказване, след което преминаваме към осем разширени модела, които използват пълноценно възможностите на GPT-5.2.
+В предишния модул видяхте как паметта позволява разговорния AI с Azure OpenAI. Сега ще се фокусираме върху начина, по който задавате въпроси — самите подсказки — използвайки GPT-5.2 на Azure OpenAI. Начинът, по който структурирате подсказките си, драстично влияе върху качеството на отговорите, които получавате. Започваме с преглед на основните техники за подсказване, след което преминаваме към осем разширени модела, които използват пълноценно възможностите на GPT-5.2.
-Ще използваме GPT-5.2, защото той въвежда контрол върху разсъжденията – можете да инструктирате модела колко да мисли преди да отговори. Това прави различните стратегии за подсказване по-ясни и помага да разберете кога да използвате всяка от тях. Ще се възползваме и от по-ниските ограничения за честота на заявките за GPT-5.2 в Azure в сравнение с моделите на GitHub.
+Ще използваме GPT-5.2, защото той въвежда контрол на разсъжденията - можете да указвате на модела колко мислене да направи преди отговора. Това прави различните стратегии за подсказване по-ясни и ви помага да разберете кога да използвате кой подход.
-## Предварителни изисквания
+## Изисквания
-- Завършен Модул 01 (разгърнати Azure OpenAI ресурси)
-- Файл `.env` в основната директория с Azure идентификационни данни (създаден с `azd up` в Модул 01)
+- Завършен Модул 01 (разположени ресурси на Azure OpenAI)
+- Файл `.env` в основната директория с Azure идентификационни данни (създаден чрез `azd up` в Модул 01)
-> **Забележка:** Ако все още не сте завършили Модул 01, първо следвайте инструкциите за разгръщане там.
+> **Забележка:** Ако не сте завършили Модул 01, следвайте първо инструкциите за разполагане там.
-## Разбиране на инженеринг на подсказки
+## Разбиране на инженерството на подсказки
-В същността си инженерингът на подсказки е разликата между неясни и прецизни инструкции, както илюстрира сравнението по-долу.
+В основата си, инженерството на подсказки е разликата между неясни и точни инструкции, както илюстрира следното сравнение.
-
+
-Инженерингът на подсказки е проектиране на входен текст, който постоянно ви осигурява необходимите резултати. Това не е само задаване на въпроси – а структуриране на заявки, така че моделът да разбира точно какво искате и как да го осигури.
+Инженерството на подсказки е за проектиране на входен текст, който постоянно ви дава нужните резултати. Не става въпрос само за задаване на въпроси - става дума за структуриране на заявки така, че моделът да разбере точно какво искате и как да го достави.
-Мислете за това като за даване на инструкции на колега. "Поправи бъга" е неясно. "Поправи null pointer exception в UserService.java ред 45, като добавиш проверка за null" е специфично. Езиковите модели работят по същия начин – специфичността и структурата имат значение.
+Представете си, че давате инструкции на колега. „Поправи бъга“ е неясно. „Поправи изключението null pointer в UserService.java ред 45 чрез добавяне на проверка за null“ е конкретно. Езиковите модели работят по същия начин - специфичността и структурата имат значение.
-Диаграмата по-долу показва как LangChain4j се вписва в тази картина — свързвайки вашите шаблони за подсказки с модела чрез изграждащи блокове SystemMessage и UserMessage.
+Диаграмата по-долу показва как LangChain4j се вписва в тази картина — свързвайки вашите шаблони за подсказки с модела чрез блоковете SystemMessage и UserMessage.
-
+
-LangChain4j осигурява инфраструктурата — връзки с моделите, памет и видове съобщения — докато моделите на подсказки са просто внимателно структурирани текстове, които изпращате през тази инфраструктура. Основните изграждащи блокове са `SystemMessage` (който задава поведението и ролята на ИИ) и `UserMessage` (който носи вашата реална заявка).
+LangChain4j осигурява инфраструктурата — връзки с модел, памет и типове съобщения — докато шаблоните за подсказки са просто внимателно структурирани текстове, които изпращате през тази инфраструктура. Ключовите градивни елементи са `SystemMessage` (който задава поведението и ролята на AI) и `UserMessage` (който носи вашата актуална заявка).
-## Основи на инженеринг на подсказки
+## Основи на инженерството на подсказки
-Петте основни техники, показани по-долу, формират основата на ефективния инженеринг на подсказки. Всяка една от тях адресира различен аспект от начина, по който комуникирате с езиковите модели.
+Петте основни техники, показани по-долу, формират базата на ефективното инженерство на подсказки. Всяка от тях адресира различен аспект на това как комуникирате с езиковите модели.
-
+
-Преди да навлезем в разширените модели в този модул, нека прегледаме пет основни техники за подсказване. Те са градивните елементи, които всеки инженер на подсказки трябва да знае. Ако вече сте преминали [модула за бърз старт](../00-quick-start/README.md#2-prompt-patterns), вече сте ги виждали на практика — ето концептуалната рамка зад тях.
+Преди да преминем към разширените модели в този модул, нека прегледаме пет основни техники за подсказване. Те са градивните блокове, които всеки инженер на подсказки трябва да знае.
-### Подсказване без примери (Zero-Shot Prompting)
+### Подсказване с нулев опит
-Най-простият подход: даваш на модела директна инструкция без примери. Моделът разчита изцяло на обучението си, за да разбере и изпълни задачата. Това работи добре за прости заявки, където очакваното поведение е очевидно.
+Най-простият подход: дайте на модела директна инструкция без примери. Моделът разчита изцяло на обучението си, за да разбере и изпълни задачата. Това работи добре за прости заявки, където очакваното поведение е очевидно.
-
+
-*Директна инструкция без примери — моделът извлича задачата само от инструкцията*
+*Директна инструкция без примери — моделът извежда задачата само от инструкцията*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
String response = model.chat(prompt);
-// Отговор: "Положителен"
+// Отговор: "Позитивно"
```
-**Кога да се използва:** Прости класификации, директни въпроси, преводи или всяка задача, която моделът може да изпълни без допълнителни указания.
+**Кога се използва:** Прости класификации, директни въпроси, преводи или всяка задача, която моделът може да изпълни без допълнителни насоки.
-### Подсказване с малко примери (Few-Shot Prompting)
+### Подсказване с няколко примера
-Предоставят се примери, които демонстрират шаблона, който искате моделът да следва. Моделът научава очаквания входно-изходен формат от вашите примери и го прилага към нови въвходове. Това значително подобрява последователността при задачи, където желаният формат или поведение не е ясно.
+Предоставете примери, които демонстрират модела да следва желания шаблон. Моделът научава очаквания вход-изход формат от вашите примери и го прилага към нови входове. Това значително подобрява последователността при задачи, където желаният формат или поведение не е явен.
-
+
-*Учене по примери — моделът идентифицира шаблона и го прилага към нови входни данни*
+*Обучаване от примери — моделът идентифицира шаблона и го прилага към нови входове*
```java
String prompt = """
@@ -112,15 +112,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Кога да се използва:** Персонализирани класификации, последователно форматиране, задачи в специфични области, или когато резултатите от zero-shot са непоследователни.
+**Кога се използва:** Персонализирани класификации, последователно форматиране, задачи в специфични области или когато резултатите с нулев опит са непоследователни.
-### Верига на мислене (Chain of Thought)
+### Верига на мисълта
-Поискайте от модела да покаже своите разсъждения стъпка по стъпка. Вместо да скочи директно към отговор, моделът разбива проблема на части и работи върху всяка една от тях експлицитно. Това подобрява точността при задачи с математика, логика и многостепенни разсъждения.
+Помолете модела да покаже мисловния си процес стъпка по стъпка. Вместо да скача направо към отговор, моделът разгражда проблема и преминава през всяка част експлицитно. Това подобрява точността при задачи, свързани с математика, логика и многостъпкови разсъждения.
-
+
-*Мислене стъпка по стъпка — разбиване на сложни проблеми в явни логически стъпки*
+*Разсъждение стъпка по стъпка — разделяне на сложни проблеми на явни логични стъпки*
```java
String prompt = """
@@ -130,18 +130,18 @@ String prompt = """
Let's solve this step-by-step:
""";
String response = model.chat(prompt);
-// Моделът показва: 15 - 8 = 7, после 7 + 12 = 19 ябълки
+// Моделът показва: 15 - 8 = 7, след това 7 + 12 = 19 ябълки
```
-**Кога да се използва:** Математически задачи, логически пъзели, отстраняване на грешки или всяка задача, при която показването на процеса на разсъждение подобрява точността и доверието.
+**Кога се използва:** Математически задачи, логически пъзели, дебъгване или каквато и да е задача, при която показването на процеса на мислене подобрява точността и доверието.
-### Подсказване на базата на роля (Role-Based Prompting)
+### Подсказване на база роля
-Задайте персона или роля на ИИ преди да зададете въпроса си. Това осигурява контекст, който оформя тона, дълбочината и фокуса на отговора. "Софтуерен архитект" дава различни съвети от "младши разработчик" или "одитор по сигурността".
+Задайте персона или роля на AI преди да зададете въпроса си. Това осигурява контекст, който оформя тона, дълбочината и фокуса на отговора. „Софтуерен архитект“ дава различни съвети от „младши разработчик“ или „одитор по сигурността“.
-
+
-*Задаване на контекст и персона — същият въпрос получава различен отговор в зависимост от зададената роля*
+*Задаване на контекст и персона — един и същ въпрос получава различен отговор в зависимост от присвоената роля*
```java
String prompt = """
@@ -157,11 +157,11 @@ String prompt = """
String response = model.chat(prompt);
```
-**Кога да се използва:** Преглед на код, обучение, анализ в специфични области или когато имате нужда от отговори, съобразени с определено ниво на експертиза или перспектива.
+**Кога се използва:** Прегледи на код, обучение, анализ в специфични области или когато ви трябват отговори, пригодени за определено ниво на експертиза или перспектива.
-### Шаблони за подсказки (Prompt Templates)
+### Шаблони за подсказки
-Създавайте многократно използваеми подсказки с променливи плейсхолдъри. Вместо да пишете нова подсказка всеки път, дефинирайте шаблон веднъж и попълвайте различни стойности. Класът `PromptTemplate` на LangChain4j го прави лесно с синтаксис `{{variable}}`.
+Създавайте многократно използваеми подсказки с променливи плейсхолдъри. Вместо да пишете нова подсказка всеки път, дефинирайте шаблон веднъж и попълвайте различни стойности. Класът `PromptTemplate` на LangChain4j улеснява това с синтаксис `{{variable}}`.
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**Кога да се използва:** Повтарящи се заявки с различни входни данни, пакетна обработка, изграждане на многократно използваеми AI работни процеси, или всякакъв сценарий, където структурата на подсказката остава същата, но данните се променят.
+**Кога се използва:** Повтарящи се заявки с различни входове, пакетна обработка, изграждане на многократно използваеми AI работни потоци или всякакъв сценарий, в който структурата на подсказката остава същата, но данните се променят.
---
-Тези пет основни техники ви дават здрава основа за повечето задачи за подсказване. Останалата част от този модул надгражда върху тях с **осем разширени модела**, които използват контрола на разсъжденията на GPT-5.2, самостоятелна оценка и възможности за структуриран изход.
+Тези пет основи ви осигуряват здрава база за повечето задачи с подсказки. Останалата част от този модул ги разширява с **осем разширени модела**, които използват контрола на разсъжденията, самостоятелната оценка и възможностите за структурирани изходни данни на GPT-5.2.
## Разширени модели
-След като покрихме основите, нека преминем към осемте разширени модела, които правят този модул уникален. Не всички проблеми изискват един и същ подход. Някои въпроси се нуждаят от бързи отговори, други от дълбоко мислене. Някои се нуждаят от видими разсъждения, други само от резултати. Всеки модел по-долу е оптимизиран за различен сценарий — а контролът на разсъжденията на GPT-5.2 прави разликите още по-очевидни.
+С покрити основи, нека преминем към осемте разширени модела, които правят този модул уникален. Не всички проблеми изискват един и същи подход. Някои въпроси се нуждаят от бързи отговори, други от дълбоко обмисляне. Някои изискват видими разсъждения, други само резултати. Всеки модел по-долу е оптимизиран за различен сценарий — и контролът на разсъжденията на GPT-5.2 прави различията още по-очевидни.
-*Преглед на осемте модела за инженеринг на подсказки и техните случаи на употреба*
+*Преглед на осемте модела за инженерство на подсказки и техните приложения*
-GPT-5.2 добавя още едно измерение към тези модели: *контрол на разсъжденията*. С плъзгача по-долу можете да регулирате мисловните усилия на модела — от бързи, директни отговори до дълбок, подробен анализ.
+GPT-5.2 добавя още едно измерение към тези модели: *контрол на разсъжденията*. Плъзгачът по-долу показва как можете да регулирате усилието на мислене на модела — от бързи, директни отговори до дълбок, щателен анализ.
-
+
-*Контролът на разсъжденията на GPT-5.2 ви позволява да зададете колко да мисли моделът — от бързи директни отговори до дълбоко проучване*
+*Контролът на разсъжденията в GPT-5.2 ви позволява да укажете колко мислене трябва да направи моделът — от бързи директни отговори до дълбоко изследване*
-**Ниско ентусиазирано поведение (бързо и фокусирано)** - За прости въпроси, при които искате бързи, директни отговори. Моделът извършва минимално разсъждение - максимум 2 стъпки. Използвайте го за изчисления, справки или прости въпроси.
+**Ниско желание (бързо и фокусирано)** - За прости въпроси, където искате бързи, директни отговори. Моделът прави минимални разсъждения - максимум 2 стъпки. Използвайте това за изчисления, справки или прости въпроси.
```java
String prompt = """
@@ -219,12 +219,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> 💡 **Проучете с GitHub Copilot:** Отворете [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) и попитайте:
-> - "Каква е разликата между ниско и високо ентусиазирани модели на подсказване?"
-> - "Как XML таговете в подсказките помагат за структуриране на отговора на ИИ?"
-> - "Кога да използвам модели за саморефлексия и кога директна инструкция?"
+> 💡 **Изследвайте с GitHub Copilot:** Отворете [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) и попитайте:
+> - "Каква е разликата между ниско и високо желание в моделите за подсказване?"
+> - "Как XML таговете в подсказките помагат за структуриране на отговора на AI?"
+> - "Кога трябва да използвам модели за саморефлексия срещу директна инструкция?"
-**Високо ентусиазирано поведение (дълбоко и подробно)** - За сложни проблеми, при които искате изчерпателен анализ. Моделът изследва подробно и показва детайлни разсъждения. Използвайте го за системен дизайн, архитектурни решения или сложни изследвания.
+**Високо желание (дълбоко и щателно)** - За сложни проблеми, където искате всеобхватен анализ. Моделът изследва задълбочено и показва подробни разсъждения. Използвайте това за системен дизайн, архитектурни решения или сложни изследвания.
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**Изпълнение на задачи (прогрес стъпка по стъпка)** - За многостепенни работни процеси. Моделът предоставя план предварително, описва всяка стъпка докато работи, после дава резюме. Използвайте го за миграции, реализации или всеки многостепенен процес.
+**Изпълнение на задача (стъпка по стъпка напредък)** - За многостъпкови работни потоци. Моделът предоставя предварителен план, разказва всяка стъпка докато я изпълнява, след което дава резюме. Използвайте това за миграции, реализации или всеки многостъпков процес.
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Подсказването с верига на мисленето изрично иска от модела да покаже процеса на разсъждение, подобрявайки точността при сложни задачи. Стъпковото разбиване помага както на хората, така и на ИИ да разберат логиката.
+Подсказването във веригата на мисълта изрично изисква от модела да покаже процеса на разсъждение, което подобрява точността при сложни задачи. Разбивката стъпка по стъпка помага както на хората, така и на AI да разберат логиката.
-> **🤖 Опитайте с [GitHub Copilot](https://github.com/features/copilot) Chat:** Попитайте за този модел:
-> - "Как бих адаптирал модела за изпълнение на задачи при дълготрайни операции?"
-> - "Какви са най-добрите практики за структурирането на предговори към инструменти в продукционни приложения?"
-> - "Как мога да заснема и визуализирам междинни актуализации на прогреса в UI?"
+> **🤖 Опитайте с чат на [GitHub Copilot](https://github.com/features/copilot):** Попитайте за този модел:
+> - "Как бих адаптирал модела за изпълнение на задача за дългосрочни операции?"
+> - "Кои са добрите практики за структуриране на първоначални съобщения за инструменти в продукционни приложения?"
+> - "Как мога да улавям и показвам междинни актуализации за напредък в UI?"
-Диаграмата по-долу илюстрира този работен поток План → Изпълнение → Обобщение.
+Диаграмата по-долу илюстрира тази последователност План → Изпълнение → Обобщение.
-
+
-*Работен поток План → Изпълнение → Обобщение за многостоеви задачи*
+*Работен процес План → Изпълнение → Обобщение за многостъпкови задачи*
-**Саморефлектиращ се код** - За генериране на код с продукционно качество. Моделът генерира код според продукционните стандарти с подходящо управление на грешки. Използвайте го при изграждане на нови функционалности или услуги.
+**Саморефлектиращ код** - За генериране на код с качество за продукция. Моделът генерира код според продукционни стандарти с правилно обработване на грешки. Използвайте това при разработването на нови функции или услуги.
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Диаграмата по-долу показва този итеративен цикъл за подобрение — генериране, оценка, идентифициране на слабости и усъвършенстване, докато кодът отговаря на продукционните стандарти.
+Диаграмата по-долу показва този итеративен цикъл на подобрение — генериране, оценка, идентифициране на слабости и усъвършенстване докато кодът отговаря на продукционните стандарти.
-*Итеративен цикъл за подобрение - генериране, оценка, идентифициране на проблеми, подобрение, повтаряне*
+*Итеративен цикъл на подобрение - генериране, оценка, идентифициране на проблеми, усъвършенстване, повторение*
-**Структуриран анализ** - За последователна оценка. Моделът преглежда кода чрез фиксирана рамка (правилност, практики, производителност, сигурност, поддръжка). Използвайте го за прегледи на код или оценки на качеството.
+**Структуриран анализ** - За последователна оценка. Моделът преглежда кода, използвайки фиксирана рамка (коректност, практики, производителност, сигурност, поддържливост). Използвайте това за прегледи на код или оценки на качеството.
```java
String prompt = """
@@ -354,18 +354,18 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> **🤖 Опитайте с [GitHub Copilot](https://github.com/features/copilot) Chat:** Попитайте за структуриран анализ:
-> - "Как мога да персонализирам рамката за анализ за различни видове прегледи на код?"
-> - "Кой е най-добрият начин да парсирам и програмирам действия въз основа на структуриран изход?"
-> - "Как да гарантирам постоянство на нивата на сериозност в различни сесии на преглед?"
+> **🤖 Опитайте с чат на [GitHub Copilot](https://github.com/features/copilot):** Попитайте за структурирания анализ:
+> - "Как мога да персонализирам рамката за анализ за различни типове прегледи на код?"
+> - "Кой е най-добрият начин да парсна и обработя структурирания изход програмно?"
+> - "Как да осигуря последователни нива на тежест в различните сесии за преглед?"
-Следната диаграма показва как тази структурирана рамка организира преглед на код в последователни категории с нива на сериозност.
+Следната диаграма показва как тази структурирана рамка организира прегледа на код в последователни категории с нива на тежест.
-*Рамка за последователни прегледи на код с нива на сериозност*
+*Рамка за последователни прегледи на код с нива на тежест*
-**Многоходов чат** - За разговори, които се нуждаят от контекст. Моделът помни предишни съобщения и надгражда върху тях. Използвайте го за интерактивни сесии за помощ или сложни въпроси и отговори.
+**Многоходов чат** - За разговори, които се нуждаят от контекст. Моделът помни предишни съобщения и надгражда върху тях. Използвайте това за интерактивни сесии за помощ или сложни въпроси и отговори.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-Диаграмата по-долу визуализира как контекстът на разговора се натрупва с всяка обрата и как това се отнася до лимита на токени на модела.
+Диаграмата по-долу визуализира как контекстът на разговора се акумулира с всяка стъпка и как се отнася към лимита на токени на модела.
-
+
-*Как контекстът на разговора се натрупва с множество обрати до достигане на лимита на токени*
-**Стъпка по стъпка обосновка** - За задачи, изискващи видима логика. Моделът показва явна обосновка за всяка стъпка. Използвайте това за математически задачи, логически пъзели или когато трябва да разберете мисловния процес.
+*Как контекстът на разговора се натрупва през множество ходове до достигане на лимита на токени*
+
+**Разсъждение стъпка по стъпка** - За проблеми, изискващи видима логика. Моделът показва явни разсъждения за всяка стъпка. Използвайте това за математически задачи, логически пъзели или когато трябва да разберете процеса на мислене.
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Диаграмата по-долу илюстрира как моделът разбива задачите на явни, номерирани логически стъпки.
-
-
+Диаграмата по-долу илюстрира как моделът разбива проблемите на явни, номерирани логични стъпки.
-*Разбиване на задачи на явни логически стъпки*
+
+*Разчленяване на проблемите на явни логически стъпки*
-**Ограничен изход** - За отговори с конкретни изисквания за формат. Моделът строго спазва правилата за формат и дължина. Използвайте това за обобщения или когато ви трябва точна структура на изхода.
+**Ограничен изход** - За отговори със специфични изисквания за формат. Моделът стриктно спазва правилата за формат и дължина. Използвайте това за резюмета или когато имате нужда от прецизна структура на изхода.
```java
String prompt = """
@@ -420,17 +420,17 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Следващата диаграма показва как ограниченията насочват модела да създава изход, който строго се придържа към вашите изисквания за формат и дължина.
+Следната диаграма показва как ограниченията насочват модела да произвежда изход, който строго се придържа към вашите изисквания за формат и дължина.
-*Налагане на конкретни изисквания за формат, дължина и структура*
+*Прилагане на специфични изисквания за формат, дължина и структура*
-## Стартиране на приложението
+## Стартирайте приложението
-**Проверете разполагането:**
+**Проверете разгръщането:**
-Уверете се, че файлът `.env` съществува в кореновата директория с Azure данни за достъп (създаден по време на Модул 01). Стартирайте това от директорията на модула (`02-prompt-engineering/`):
+Уверете се, че файлът `.env` съществува в кореновата директория с Azure идентификационни данни (създаден по време на Модул 01). Стартирайте това от директорията на модула (`02-prompt-engineering/`):
**Bash:**
```bash
@@ -442,27 +442,27 @@ cat ../.env # Трябва да показва AZURE_OPENAI_ENDPOINT, API_KEY,
Get-Content ..\.env # Трябва да показва AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**Стартиране на приложението:**
+**Стартирайте приложението:**
-> **Забележка:** Ако вече сте стартирали всички приложения с `./start-all.sh` от кореновата директория (както е описано в Модул 01), този модул вече работи на порт 8083. Можете да пропуснете командите за стартиране по-долу и да отидете директно на http://localhost:8083.
+> **Забележка:** Ако вече стартирахте всички приложения с `./start-all.sh` от кореновата директория (както е описано в Модул 01), този модул вече работи на порт 8083. Можете да пропуснете командите за стартиране по-долу и директно да отидете на http://localhost:8083.
-**Опция 1: Използване на Spring Boot Dashboard (Препоръчително за потребители на VS Code)**
+**Вариант 1: Използване на Spring Boot Dashboard (Препоръчително за потребители на VS Code)**
-Dev контейнерът включва разширението Spring Boot Dashboard, което предоставя визуален интерфейс за управление на всички Spring Boot приложения. Можете да го намерите в лентата с активности от лявата страна на VS Code (потърсете иконата на Spring Boot).
+Разработващият контейнер включва разширението Spring Boot Dashboard, което осигурява визуален интерфейс за управление на всички Spring Boot приложения. Можете да го намерите в лентата с инструменти вляво във VS Code (потърсете иконата на Spring Boot).
От Spring Boot Dashboard можете:
-- Да видите всички налични Spring Boot приложения в пространството за работа
-- Да стартирате/спирате приложения с един клик
-- Да наблюдавате логовете на приложението в реално време
-- Да следите статуса на приложението
+- Да видите всички налични Spring Boot приложения в работната област
+- Да стартирате/спирате приложения с едно кликване
+- Да разглеждате логовете на приложението в реално време
+- Да наблюдавате статусa на приложението
-Просто кликнете върху бутона за пускане до "prompt-engineering", за да стартирате този модул, или стартирайте всички модули наведнъж.
+Просто кликнете бутона за пускане до "prompt-engineering", за да стартирате този модул, или стартирайте всички модули наведнъж.
-*Spring Boot Dashboard във VS Code — стартиране, спиране и наблюдение на всички модули от едно място*
+*Spring Boot Dashboard във VS Code — стартирайте, спирайте и наблюдавайте всички модули от едно място*
-**Опция 2: Използване на shell скриптове**
+**Вариант 2: Използване на shell скриптове**
Стартирайте всички уеб приложения (модули 01-04):
@@ -492,9 +492,9 @@ cd 02-prompt-engineering
.\start.ps1
```
-Двата скрипта автоматично зареждат променливи на средата от кореновия `.env` файл и ще компилират JAR файловете, ако не съществуват.
+И двата скрипта автоматично зареждат променливи на средата от кореновия файл `.env` и ще изградят JAR файловете, ако те не съществуват.
-> **Забележка:** Ако предпочитате да компилирате всички модули ръчно преди стартиране:
+> **Забележка:** Ако предпочитате да изградите всички модули ръчно преди стартиране:
>
> **Bash:**
> ```bash
@@ -508,7 +508,7 @@ cd 02-prompt-engineering
> mvn clean package -DskipTests
> ```
-Отворете http://localhost:8083 във вашия браузър.
+Отворете http://localhost:8083 в браузъра си.
**За спиране:**
@@ -526,7 +526,7 @@ cd .. && ./stop-all.sh # Всички модули
cd ..; .\stop-all.ps1 # Всички модули
```
-## Снимки на приложението
+## Скриншотове на приложението
Ето основният интерфейс на модула за prompt engineering, където можете да експериментирате с всички осем шаблона един до друг.
@@ -536,61 +536,61 @@ cd ..; .\stop-all.ps1 # Всички модули
## Изследване на шаблоните
-Уеб интерфейсът ви позволява да експериментирате с различни стратегии за задаване на подсказки. Всеки шаблон решава различни проблеми - пробвайте ги, за да видите кога кой подход е най-добър.
+Уеб интерфейсът ви позволява да експериментирате с различни стратегии за подаване на заявки. Всеки шаблон решава различни проблеми – пробвайте ги, за да видите кога кой подход блести.
-> **Забележка: Поточно предаване срещу непоточно** — Във всяка страница на шаблона има два бутона: **🔴 Поточно предаване на отговора (в реално време)** и опция **Без поточно предаване**. Поточното предаване използва събития, изпращани от сървъра (SSE), за да показва токените в реално време, докато моделът ги генерира, така че веднага виждате напредъка. Опцията без поточно предаване изчаква целия отговор преди да го изведе. При подсказки, които изискват дълбоко разсъждение (например, Висока настойчивост, Саморефлектиращ код), непоточното извикване може да отнеме много време – понякога минути – без видима обратна връзка. **Използвайте поточно предаване при експерименти с комплексни подсказки**, за да виждате работата на модела и да избегнете впечатлението за изтичане на времето.
+> **Забележка: Поточно предаване срещу без поточно предаване** — Всяка страница на шаблона предлага два бутона: **🔴 Stream Response (Live)** и опция за **Не потоково предаване**. Поточното предаване използва Server-Sent Events (SSE), за да показва токени в реално време, докато моделът ги генерира, така че виждате напредъка веднага. Опцията за не потоково предаване изчаква цялата отговор преди да я покаже. За заявки, които изискват дълбоко разсъждение (например High Eagerness, Self-Reflecting Code), не потоковото извикване може да отнеме много време – понякога минути – без видима обратна връзка. **Използвайте поточното при експерименти с комплексни заявки**, за да видите модела в действие и да избегнете впечатлението, че заявката е изтекла.
>
-> **Забележка: Изисквания за браузъра** — Функцията за поточно предаване използва Fetch Streams API (`response.body.getReader()`), което изисква пълен браузър (Chrome, Edge, Firefox, Safari). Тя **не работи** във вградения Simple Browser на VS Code, тъй като неговият webview не поддържа ReadableStream API. Ако използвате Simple Browser, бутоните без поточно предаване ще работят нормално – засегнати са само бутоните за поточно предаване. Отворете `http://localhost:8083` в външен браузър за пълно изживяване.
+> **Забележка: Изискване за браузър** — Функцията за поточно предаване използва Fetch Streams API (`response.body.getReader()`), който изисква пълен браузър (Chrome, Edge, Firefox, Safari). Той **не работи** в Simple Browser на VS Code, тъй като неговият webview не поддържа ReadableStream API. Ако използвате Simple Browser, бутоните за не потоково ще работят нормално — засегнати са само бутоните за поточно предаване. Отворете `http://localhost:8083` в външен браузър за пълен опит.
-### Ниска срещу висока настойчивост
+### Ниска срещу висока активност (Eagerness)
-Задайте прост въпрос като "Колко е 15% от 200?" с Ниска настойчивост. Ще получите мигновен, директен отговор. Сега задайте нещо сложно като "Проектиране на кешираща стратегия за API с висок трафик" с Висока настойчивост. Натиснете **🔴 Поточно предаване (в реално време)** и наблюдавайте детайлното разсъждение на модела, появяващо се токен по токен. Същият модел, същата структура на въпроса – но подсказката му казва колко да мисли.
+Задайте прост въпрос като "Какво е 15% от 200?" с Ниска активност. Ще получите мигновен, директен отговор. Сега задайте нещо сложно като "Проектирайте стратегия за кеширане за API с голям трафик" с Висока активност. Кликнете **🔴 Stream Response (Live)** и наблюдавайте подробните разсъждения на модела, изписани токен по токен. Същият модел, същата структура на въпроса - но подканата указва колко мислене да използва.
-### Изпълнение на задачи (въвеждащи текстове за инструменти)
+### Изпълнение на задачи (въведение на инструменти)
-Многостъпковите работни потоци се възползват от предварително планиране и разказване на напредъка. Моделът описва какво ще направи, разказва всяка стъпка, след което обобщава резултатите.
+Работните потоци с много стъпки печелят от предварително планиране и разказ за напредъка. Моделът очертава какво ще прави, разказва за всяка стъпка, след което обобщава резултатите.
-### Саморефлектиращ код
+### Саморефлектиращ се код
-Опитайте „Създай услуга за валидация на имейл“. Вместо просто да генерира код и да спре, моделът генерира, оценява според критерии за качество, идентифицира слабости и подобрява кода. Ще видите итерации, докато кодът достигне производствен стандарт.
+Опитайте "Създайте услуга за валидация на имейл". Вместо просто да генерира код и да спре, моделът създава, оценява по критерии за качество, идентифицира слабости и подобрява. Ще видите итерации докато кодът отговаря на производствените стандарти.
### Структуриран анализ
-Прегледите на код изискват последователни рамки за оценка. Моделът анализира кода, използвайки фиксирани категории (коректност, практики, производителност, сигурност) със степени на тежест.
+Прегледите на код изискват последователни критерии за оценка. Моделът анализира кода с фиксирани категории (коректност, практики, производителност, сигурност) с нива на тежест.
-### Многоходов чат
+### Разговор с много ходове
-Попитайте „Какво е Spring Boot?“, после веднага продължете с „Покажи ми пример“. Моделът помни първия въпрос и ви дава конкретен пример със Spring Boot. Без памет, този втори въпрос би бил твърде общ.
+Попитайте "Какво е Spring Boot?" и веднага след това "Покажи ми пример". Моделът помни първия ви въпрос и дава пример за Spring Boot специално за вас. Без памет вторият въпрос щеше да е твърде общ.
-### Стъпка по стъпка обосновка
+### Разсъждение стъпка по стъпка
-Изберете математическа задача и я опитайте както с „Стъпка по стъпка“, така и с Ниска настойчивост. Ниската настойчивост ви дава само отговор – бързо, но неясно. Стъпка по стъпка ви показва всяко изчисление и решение.
+Изберете математическа задача и опитайте както с Разсъждение стъпка по стъпка, така и с Ниска активност. Ниската активност просто ви дава отговор - бързо, но неясно. Разсъждението стъпка по стъпка показва всяко изчисление и решение.
### Ограничен изход
-Когато ви трябват конкретни формати или брой думи, този шаблон налага строго спазване. Опитайте да генерирате обобщение с точно 100 думи в списъчен формат.
+Когато имате нужда от специфични формати или брой думи, този шаблон налага строго спазване. Опитайте да генерирате резюме с точно 100 думи във формат на точки.
-## Това, което наистина учите
+## Какво всъщност учите
-**Разсъждението променя всичко**
+**Усилието в разсъждението променя всичко**
-GPT-5.2 ви позволява да контролирате изчислителните усилия чрез вашите подсказки. Ниското усилие означава бързи отговори с минимално изследване. Високото усилие означава, че моделът отделя време за дълбоко мислене. Учите се да съобразявате усилията с комплексността на задачата – не пропилявайте време на прости въпроси, но и не бързайте с комплексните решения.
+GPT-5.2 ви позволява да контролирате изчислителното усилие чрез вашите заявки. Ниско усилие означава бързи отговори с минимално изследване. Високото усилие означава, че моделът отделя време за дълбоко мислене. Вие се учите да съчетавате усилието с комплексността на задачата – не губете време с лесни въпроси, но не бързайте и с комплексни решения.
**Структурата насочва поведението**
-Забелязахте ли XML таговете в подсказките? Те не са декоративни. Моделите следват структурирани инструкции по-надеждно от свободен текст. Когато ви трябват многостъпкови процеси или сложна логика, структурата помага на модела да проследява къде се намира и какво следва. Диаграмата по-долу разбива добре структурирана подсказка, показвайки как тагове като ``, ``, ``, ``, и `` организират инструкциите ви в ясни секции.
+Забелязвате XML таговете в заявките? Те не са декоративни. Моделите следват структурирани инструкции по-надеждно от свободен текст. Когато имате нужда от многостъпкови процеси или сложна логика, структурата помага на модела да следи къде е и какво следва. Диаграмата по-долу разглобява добре структуриран запрос, показвайки как тагове като ``, ``, ``, `` и `` организират вашите инструкции в ясни секции.
-*Анатомия на добре структурирана подсказка с ясни секции и XML-стил организация*
+*Анатомия на добре структуриран запрос с ясни раздели и XML стил организация*
**Качество чрез самооценка**
-Шаблоните за саморефлексия работят чрез явни критерии за качество. Вместо да се надявате моделът „да го направи правилно“, вие му кажете точно какво означава „правилно“: коректна логика, обработка на грешки, производителност, сигурност. Моделът може да оцени собствените си резултати и да се подобри. Така превръщате генерирането на код от лотария в процес.
+Шаблоните за саморефлексия работят като правят критериите за качество явни. Вместо да се надявате, че моделът "прави правилно", вие му казвате точно какво означава "правилно": коректна логика, обработка на грешки, производителност, сигурност. След това моделът може да оцени собствения си изход и да го подобри. Така генерацията на код става процес, а не лотария.
**Контекстът е ограничен**
-Многоходовите разговори се реализират чрез включване на история на съобщенията във всяка заявка. Но има лимит – всеки модел има максимален брой токени. С разрастването на разговорите трябва да използвате стратегии за съхранение на релевантен контекст, без да достигате лимита. Този модул показва как работи паметта; по-късно ще научите кога да обобщавате, кога да забравяте и кога да извличате.
+Разговорите с много ходове работят, като включват история на съобщенията с всяка заявка. Но има лимит – всеки модел има максимален брой токени. С нарастването на разговорите ще трябва да разработвате стратегии за поддържане на релевантен контекст без да достигате тавана. Този модул показва как работи паметта; по-късно ще научите кога да обобщавате, кога да забравяте и кога да извличате.
## Следващи стъпки
@@ -598,11 +598,11 @@ GPT-5.2 ви позволява да контролирате изчислите
---
-**Навигация:** [← Предишен: Модул 01 - Въведение](../01-introduction/README.md) | [Обратно към Началото](../README.md) | [Следващ: Модул 03 - RAG →](../03-rag/README.md)
+**Навигация:** [← Предишен: Модул 01 - Въведение](../01-introduction/README.md) | [Обратно към началната страница](../README.md) | [Следващ: Модул 03 - RAG →](../03-rag/README.md)
---
-**Отказ от отговорност**:
-Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
+**Отказ от отговорност**:
+Този документ е преведен с помощта на AI преводачески услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
\ No newline at end of file
diff --git a/translations/bg/03-rag/README.md b/translations/bg/03-rag/README.md
index 0ca0577cf..d2dcb079b 100644
--- a/translations/bg/03-rag/README.md
+++ b/translations/bg/03-rag/README.md
@@ -1,144 +1,143 @@
-# Модул 03: RAG (Извличане с Подобрено Генериране)
+# Модул 03: RAG (Генериране с подобряване чрез извличане)
## Съдържание
-- [Видео обяснение](../../../03-rag)
-- [Какво ще научите](../../../03-rag)
-- [Предварителни условия](../../../03-rag)
-- [Разбиране на RAG](../../../03-rag)
- - [Кой RAG подход използва този урок?](../../../03-rag)
-- [Как работи](../../../03-rag)
- - [Обработка на документи](../../../03-rag)
- - [Създаване на вграждания](../../../03-rag)
- - [Семантично търсене](../../../03-rag)
- - [Генериране на отговори](../../../03-rag)
-- [Стартирайте приложението](../../../03-rag)
-- [Използване на приложението](../../../03-rag)
- - [Качване на документ](../../../03-rag)
- - [Задаване на въпроси](../../../03-rag)
- - [Проверка на източниците](../../../03-rag)
- - [Експериментиране с въпроси](../../../03-rag)
-- [Ключови концепции](../../../03-rag)
- - [Стратегия за раздробяване](../../../03-rag)
- - [Оценки за сходство](../../../03-rag)
- - [Съхранение в памет](../../../03-rag)
- - [Управление на контекстното пространство](../../../03-rag)
-- [Кога RAG е важен](../../../03-rag)
-- [Следващи стъпки](../../../03-rag)
-
-## Видео обяснение
-
-Гледайте тази жива сесия, която обяснява как да започнете с този модул:
-
-
+- [Видео ръководство](#видео-ръководство)
+- [Какво ще научите](#какво-ще-научите)
+- [Предварителни изисквания](#предварителни-изисквания)
+- [Разбиране на RAG](#разбиране-на-rag)
+ - [Кой RAG подход използва това ръководство?](#кой-rag-подход-използва-това-ръководство)
+- [Как работи](#как-работи)
+ - [Обработка на документи](#обработка-на-документи)
+ - [Създаване на вложения](#създаване-на-вложения)
+ - [Семантично търсене](#семантично-търсене)
+ - [Генериране на отговори](#генериране-на-отговор)
+- [Стартиране на приложението](#стартиране-на-приложението)
+- [Използване на приложението](#използване-на-приложението)
+ - [Качване на документ](#качване-на-документ)
+ - [Задаване на въпроси](#задаване-на-въпроси)
+ - [Проверка на източниците](#проверка-на-изходните-препратки)
+ - [Експериментиране с въпроси](#експериментирайте-с-въпроси)
+- [Ключови концепции](#ключови-понятия)
+ - [Стратегия за разбиване на части](#стратегия-за-разделяне-на-части)
+ - [Оценки за подобие](#оценки-за-прилика)
+ - [Съхранение в паметта](#съхранение-в-памет)
+ - [Управление на контекстния прозорец](#управление-на-контекстния-прозорец)
+- [Кога RAG е важен](#кога-rag-има-значение)
+- [Следващи стъпки](#следващи-стъпки)
+
+## Видео ръководство
+
+Гледайте тази сесия наживо, която обяснява как да започнете с този модул:
+
+
## Какво ще научите
-В предишните модули научихте как да водите разговори с AI и как ефективно да структурирате своите подкани. Но има основно ограничение: езиковите модели знаят само това, което са научили по време на обучението. Те не могат да отговарят на въпроси за политиките на вашата компания, вашата проектна документация или за каквато и да е информация, на която не са били обучени.
+В предишните модули научихте как да водите разговори с AI и как ефективно да структурирате заявките си. Но има основно ограничение: езиковите модели знаят само това, което са научили по време на обучението си. Те не могат да отговарят на въпроси за политиките на вашата компания, документацията на проекта или друга информация, която не е била включена в тяхното обучение.
-RAG (Извличане с Подобрено Генериране) решава този проблем. Вместо да се опитвате да "научите" модела на вашата информация (което е скъпо и непрактично), вие му давате възможността да търси в документите ви. Когато някой зададе въпрос, системата намира релевантна информация и я включва в подкана. След това моделът отговаря на базата на този извлечен контекст.
+RAG (Генериране с подобряване чрез извличане) решава този проблем. Вместо да се опитвате да научите модела на вашата информация (което е скъпо и непрактично), вие му давате възможността да търси във вашите документи. Когато някой зададе въпрос, системата намира релевантна информация и я включва в заявката. След това моделът отговаря въз основа на този извлечен контекст.
-Мислете за RAG като за предоставяне на модела на референтна библиотека. Когато зададете въпрос, системата:
+Мислете за RAG като за предоставяне на модела на справочна библиотека. Когато зададете въпрос, системата прави следното:
-1. **Потребителски въпрос** - Вие задавате въпрос
-2. **Вграждане** - Преобразува въпроса ви във вектор
-3. **Векторно търсене** - Намира сходни части от документи
-4. **Сглобяване на контекста** - Добавя релевантните части в подкана
-5. **Отговор** - LLM генерира отговор въз основа на контекста
+1. **Потребителски въпрос** – Вие задавате въпрос
+2. **Вложение** – Преобразува въпроса в вектор
+3. **Векторно търсене** – Намира подобни части от документи
+4. **Събиране на контекст** – Добавя релевантни части към заявката
+5. **Отговор** – LLM генерира отговор въз основа на контекста
-Това основава отговорите на модела на вашите реални данни, вместо да разчита само на знанията от обучението си или да измисля отговори.
+Това оснoва отговорите на модела на вашите действителни данни, вместо да разчита само на обучителната си информация или да измисля отговори.
-## Предварителни условия
+## Предварителни изисквания
-- Завършен [Модул 00 - Бърз старт](../00-quick-start/README.md) (за примера Easy RAG, използван по-нататък в този модул)
-- Завършен [Модул 01 - Въведение](../01-introduction/README.md) (пуснати в експлоатация Azure OpenAI ресурси, включително embedding модела `text-embedding-3-small`)
-- `.env` файл в кореновата директория с Azure креденшъли (създаден чрез `azd up` в Модул 01)
+- Завършен [Модул 01 - Въведение](../01-introduction/README.md) (разположени Azure OpenAI ресурси, включително модел за вложение `text-embedding-3-small`)
+- Файл `.env` в главната директория с Azure данни за достъп (създаден от `azd up` в Модул 01)
-> **Забележка:** Ако не сте завършили Модул 01, първо следвайте инструкциите за разгръщане там. Командата `azd up` разгръща както GPT чат модела, така и embedding модела, използвани в този модул.
+> **Бележка:** Ако не сте завършили Модул 01, първо следвайте инструкциите за разполагане там. Командата `azd up` разполага както GPT чат модела, така и модела за вложения, използван в този модул.
## Разбиране на RAG
-Диаграмата по-долу илюстрира основната идея: вместо да разчита само на обучителните данни на модела, RAG му дава библиотека с вашите документи, които да консултира преди да генерира всеки отговор.
+Диаграмата по-долу илюстрира основната концепция: вместо да разчита само на данните от обучението на модела, RAG му предоставя справочната библиотека с вашите документи, които да преглежда преди да генерира всеки отговор.
-
+
-*Тази диаграма показва разликата между стандартен LLM (който гадае от обучителните данни) и LLM, подобрен с RAG (който първо проверява вашите документи).*
+*Тази диаграма показва разликата между стандартен LLM (който гадае от обучителни данни) и LLM с RAG подобрение (който първо преглежда вашите документи).*
-Ето как се свързват частите от начало до край. Въпросът на потребителя преминава през четири етапа — вграждане, векторно търсене, сглобяване на контекста и генериране на отговора — като всеки следващ се изгражда върху предишния:
+Ето как частите се свързват от край до край. Въпросът на потребителя преминава през четири етапа — вграждане, векторно търсене, събиране на контекст и генериране на отговор — като всеки етап надгражда предишния:
-
+
-*Тази диаграма показва пълния RAG поток — потребителският въпрос преминава през вграждане, векторно търсене, сглобяване на контекста и генериране на отговор.*
+*Тази диаграма показва край до край RAG процеса — въпросът на потребителя преминава през вграждане, векторно търсене, събиране на контекст и генериране на отговор.*
-Останалата част от този модул разглежда всеки етап в детайли, с код за стартиране и модификация.
+Останалата част от този модул разглежда всеки етап подробно, с код, който можете да стартирате и модифицирате.
-### Кой RAG подход използва този урок?
+### Кой RAG подход използва това ръководство?
-LangChain4j предлага три начина за имплементиране на RAG, всеки с различно ниво на абстракция. По-долу е диаграма, която ги сравнява:
+LangChain4j предлага три начина за реализиране на RAG, всеки с различно ниво на абстракция. Диаграмата по-долу ги сравнява един до друг:
-
+
-*Тази диаграма сравнява трите подхода за RAG в LangChain4j — Easy, Native и Advanced — показвайки ключовите им компоненти и кога да се използва всеки.*
+*Тази диаграма сравнява трите подхода RAG в LangChain4j — Easy, Native и Advanced — показвайки ключовите им компоненти и кога да се използват.*
| Подход | Какво прави | Компромис |
|---|---|---|
-| **Easy RAG** | Свързва всичко автоматично чрез `AiServices` и `ContentRetriever`. Аннотирате интерфейс, прикачвате извличач и LangChain4j се грижи за вграждането, търсенето и сглобяването на подкани зад кулисите. | Минимален код, но не виждате какво се случва на всеки етап. |
-| **Native RAG** | Вие извиквате embedding модела, търсите в хранилището, изграждате подкана и генерирате отговора сами — една явна стъпка наведнъж. | Повече код, но всеки етап е видим и модифицируем. |
-| **Advanced RAG** | Използва рамката `RetrievalAugmentor` с плъгини за трансформатори на заявки, маршрутизатори, преподреждачи и инжектори на съдържание за производствени потоци. | Максимална гъвкавост, но значително по-сложен код. |
+| **Easy RAG** | Свързва всичко автоматично чрез `AiServices` и `ContentRetriever`. Аннотирате интерфейс, прикачвате търсачка, а LangChain4j се грижи за вграждане, търсене и събиране на заявка на заден план. | Минимален код, но не виждате какво се случва на всеки етап. |
+| **Native RAG** | Вие извиквате модела за вграждане, търсите в хранилището, изграждате заявката и генерирате отговора сами — една изрична стъпка наведнъж. | Повече код, но всеки етап е видим и модифицируем. |
+| **Advanced RAG** | Използва `RetrievalAugmentor` рамка с плъгин трансформъри на заявки, маршрутизатори, пренареждачи и инжектори на съдържание за продукционни решения. | Максимална гъвкавост, но значително по-сложна. |
-**Този урок използва Native подхода.** Всеки етап от RAG потока — вграждането на заявката, търсенето в векторното хранилище, сглобяването на контекста и генерирането на отговора — е изрично изписан в [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Това е умишлено: като образователен ресурс е по-важно да виждате и разбирате всеки етап, отколкото да има минимален код. Когато вече сте наясно с това как се свързват частите, може да преминете към Easy RAG за бързи прототипи или Advanced RAG за производствени системи.
+**Това ръководство използва Native подхода.** Всеки етап от RAG процеса — вложение на заявката, търсене в векторното хранилище, събиране на контекста и генериране на отговор — е изрично написан в [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Това е умишлено: като учебен ресурс е по-важно да виждате и разбирате всеки етап, отколкото кодът да е максимално съкратен. Когато се почувствате уверени как работят частите, можете да преминете към Easy RAG за бързи прототипи или Advanced RAG за продукционни системи.
-> **💡 Вече виждали Easy RAG в действие?** Модулът [Бърз старт](../00-quick-start/README.md) включва пример за Въпроси и Отговори с Документ ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)), който използва Easy RAG подхода — LangChain4j автоматично обработва вграждането, търсенето и сглобяването на подкана. Този модул прави следващата крачка, като отваря този поток така, че да видите и управлявате всеки етап сами.
+> **💡 Любопитни за Easy RAG?** LangChain4j също предлага *Easy RAG* подход, при който `AiServices` и `ContentRetriever` автоматично се грижат за вграждането, търсенето и събирането на заявка. Този модул тръгва по по-изричния път — разкъсва този процес така, че да виждате и контролирате всеки етап сами.
-Диаграмата по-долу показва Easy RAG потока от този пример в Бърз старт. Забележете как `AiServices` и `EmbeddingStoreContentRetriever` скриват цялата сложност — зареждате документ, прикачвате извличач и получавате отговори. Native подходът в този модул разкрива всеки скрит етап:
+Диаграмата по-долу показва Easy RAG процеса. Забележете как `AiServices` и `EmbeddingStoreContentRetriever` скриват цялата сложност — зареждате документ, прикачвате търсачка и получавате отговори. Native подходът в този модул разкрива всички тези скрити стъпки:
-
+
-*Тази диаграма показва Easy RAG потока от `SimpleReaderDemo.java`. Сравнете го с Native подхода в този модул: Easy RAG скрива вграждането, търсенето и сглобяването на подкана зад `AiServices` и `ContentRetriever` — зареждате документ, прикачвате извличач и получавате отговори. Native подходът в този модул изважда тези етапи навън, така че вие да извиквате всеки (вграждане, търсене, сглобяване на контекст, генериране) сами, давайки ви пълна видимост и контрол.*
+*Тази диаграма показва Easy RAG процеса. Сравнете го с Native подхода, използван в този модул: Easy RAG скрива вграждането, извличането и събирането на заявка зад `AiServices` и `ContentRetriever` — зареждате документ, прикачвате търсачка и получавате отговори. Native подходът в този модул разкрива този процес, така че сами да извиквате всеки етап (вграждане, търсене, събиране на контекст, генериране) и да имате пълен контрол и видимост.*
## Как работи
-RAG потока в този модул се разбива на четири етапа, които се изпълняват последователно всеки път, когато потребител зададе въпрос. Първо, каченият документ се **парсира и раздробява** на управляеми части. Тези парчета след това се преобразуват в **векторни вграждания** и се съхраняват, за да могат да бъдат сравнявани математически. Когато пристигне заявка, системата извършва **семантично търсене**, за да намери най-релевантните части, и накрая ги подава като контекст към LLM за **генериране на отговор**. По-долу са разгледани всеки от етапите с реален код и диаграми. Нека започнем от първата стъпка.
+RAG процесът в този модул се разбива на четири етапа, които се изпълняват последователно всеки път, когато потребител зададе въпрос. Първо, каченият документ се **парсира и разбива на части** по размер, удобен за модела. Тези части се преобразуват в **векторни вграждания** и се съхраняват, за да могат да се сравняват математически. Когато пристигне заявка, системата извършва **семантично търсене**, за да намери най-релевантните части, и накрая ги подава като контекст към LLM за **генериране на отговор**. По-долу разглеждаме всеки етап с код и диаграми. Нека започнем с първата стъпка.
### Обработка на документи
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-Когато качите документ, системата го парсира (PDF или обикновен текст), прикачва метаданни като името на файла и след това го разбива на части — по-малки сегменти, които удобно се побират в контекстното пространство на модела. Тези части леко се припокриват, за да не се губи контекст на границите.
+Когато качите документ, системата го парсира (PDF или обикновен текст), прикачва метаданни като име на файл и след това го разбива на части — по-малки сегменти, които се побират удобно в контекстния прозорец на модела. Тези части се припокриват леко, за да не се загуби контекст на границите.
```java
-// Анализирайте качения файл и го опаковайте в LangChain4j документ
+// Анализирайте качения файл и го опаковайте в LangChain4j Документ
Document document = Document.from(content, metadata);
-// Разделете на блокове от 300 токена с припокриване от 30 токена
+// Разделете на парчета от 300 токена с припокриване от 30 токена
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
+
+Диаграмата по-долу показва как това работи визуално. Забележете как всяка част споделя някои токени със съседните — припокриването от 30 токена гарантира, че няма да се загуби важна информация между частите:
-Диаграмата по-долу показва това визуално. Забележете как всяка част споделя някои токени със съседните — 30 токена припокриване гарантират, че няма важен контекст, който да попадне между пукнатините:
+
-
+*Тази диаграма показва разбиване на документ на 300-токенови части с припокриване от 30 токена, което запазва контекста на границите между частите.*
-*Тази диаграма показва как документ се разделя на 300-токенни парчета с припокриване от 30 токена, запазвайки контекста на границите.*
+> **🤖 Опитайте с [GitHub Copilot](https://github.com/features/copilot) Chat:** Отворете [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) и задайте:
+> - "Как LangChain4j разбива документи на части и защо припокриването е важно?"
+> - "Какъв е оптималният размер на частите за различни типове документи и защо?"
+> - "Как да обработвам документи на различни езици или със специално форматиране?"
-> **🤖 Опитайте с [GitHub Copilot](https://github.com/features/copilot) Chat:** Отворете [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) и попитайте:
-> - "Как LangChain4j разделя документи на парчета и защо припокритието е важно?"
-> - "Кой е оптималният размер на парчетата за различни видове документи и защо?"
-> - "Как да се справя с документи на няколко езика или със специално форматиране?"
-
-### Създаване на вграждания
+### Създаване на вложения
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-Всяко парче се превръща в числова репрезентация, наречена embedding — по същество конвертор от значение към числа. Embedding моделът не е "умен" като чат модел; той не може да следва инструкции, да разсъждава или да отговаря на въпроси. Това, което може, е да преобразува текст в математическо пространство, където сходните значения се намират близо едно до друго — "кола" близо до "автомобил", "политика за връщане" близо до "върнете ми парите". Мислете за чат модела като за човек, с когото може да разговаряте; embedding моделът е изключително добър файлова система.
+Всяка част се преобразува в числово представяне, наречено вложение — същността на конвертор от значение в числа. Моделът за вграждане не е "умен" по начина, по който е чат моделът; той не следва инструкции, не разсъждава и не отговаря на въпроси. Това, което може да направи, е да превърне текст в математическо пространство, където сходните значения се групират близо едно до друго — "кола" близо до "автомобил," "политика за възстановяване" близо до "върнете ми парите." Мислете за чат модела като за човек, с когото можете да разговаряте; моделът за вграждане е ненадмината система за подреждане на файлове.
-Диаграмата по-долу визуализира тази концепция — текст влиза, числови вектори излизат, а подобни значения произвеждат сходни вектори:
+Диаграмата по-долу визуализира тази концепция — текстът влиза, излизат числови вектори, а сходните значения създават близки вектори:
-
+
-*Тази диаграма показва как embedding модел преобразува текст в числови вектори, като поставя сходни значения — например "кола" и "автомобил" — близо един до друг във векторното пространство.*
+*Тази диаграма показва как моделът за вграждане преобразува текст в числови вектори, като поставя сходни значения — като "кола" и "автомобил" — близо в пространството на векторите.*
```java
@Bean
@@ -153,30 +152,30 @@ public EmbeddingModel embeddingModel() {
EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
+
+Диаграмата на класовете по-долу показва двата отделни потока в RAG процеса и класовете на LangChain4j, които ги реализират. **Потокът на вграждане** (изпълнява се веднъж при качване) разбива документа, вгражда частите и ги съхранява чрез `.addAll()`. **Потокът на заявка** (изпълнява се всеки път, когато потребител зададе въпрос) вгражда въпроса, търси в хранилището чрез `.search()`, и предава съответния контекст към чат модела. Двата потока се срещат в споделения интерфейс `EmbeddingStore`:
-Класовата диаграма по-долу показва двата отделни потока в RAG pipeline и LangChain4j класовете, които ги имплементират. **Потокът на вмъкване** (върши се веднъж при качване) раздробява документа, вгражда парчетата и ги съхранява чрез `.addAll()`. **Потокът на заявки** (върши се всеки път при въпрос) вгражда въпроса, търси в хранилището чрез `.search()` и подава съвпадналия контекст към чат модела. И двата потока се срещат в споделения интерфейс `EmbeddingStore`:
-
-
+
-*Тази диаграма показва двата потока в RAG pipeline — вмъкване и заявки — и как те се свързват чрез общия EmbeddingStore.*
+*Тази диаграма показва двата потока в RAG процеса — вграждане и заявка — и как те се свързват през споделен EmbeddingStore.*
-След като embedding-ите се съхранят, сходното съдържание естествено се групира заедно във векторното пространство. Визуализацията по-долу показва как документи по свързани теми се разполагат като близки точки, което прави semантичното търсене възможно:
+След като вградените части се съхранят, сходното съдържание естествено се групира заедно в векторното пространство. Визуализацията по-долу показва как документи с близки теми се групират като съседни точки, което прави възможно семантичното търсене:
-
+
-*Тази визуализация показва как свързани документи се групират заедно в 3D векторно пространство, като теми като Техническа документация, Правила за бизнес и Често задавани въпроси образуват различни групи.*
+*Тази визуализация показва как свързаните документи се групират заедно в 3D векторното пространство, като теми като Техническа документация, Бизнес правила и Често задавани въпроси формират отделни групи.*
-Когато потребител търси, системата следва четири стъпки: вмъква документите веднъж, вмъква заявката при всяко търсене, сравнява векторите на заявката с всички съхранени вектори чрез косинусова прилика и връща топ-K най-високонаблюдавани парчета. Диаграмата по-долу преминава през всяка стъпка и участващите LangChain4j класове:
+Когато потребител търси, системата следва четири стъпки: вгражда документите веднъж, вгражда заявката при всяко търсене, сравнява вектора на заявката с всички съхранени вектори чрез косинусна прилика, и връща топ-K частите с най-висок резултат. Диаграмата по-долу преминава през всяка стъпка и свързаните LangChain4j класове:
-
+
-*Тази диаграма показва четиристъпковия процес на embedding търсене: вмъкване на документи, вмъкване на заявка, сравняване на вектори с косинусова прилика и връщане на топ-K резултати.*
+*Тази диаграма показва четиристъпковия процес на вграждане за търсене: вграждане на документи, вграждане на заявка, сравнение на вектори чрез косинусна прилика и връщане на топ-K резултати.*
### Семантично търсене
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Когато зададете въпрос, той също се превръща във вграждане. Системата сравнява embedding-а на въпроса ви с embedding-ите на всички парчета от документи. Намира парчетата с най-сходни значения - не просто съвпадение на ключови думи, а реална семантична прилика.
+Когато зададете въпрос, той също се преобразува във векторна форма. Системата сравнява вграждането на вашия въпрос с тези на всички части от документите. Намира частите със сходно значение - не само съвпадащи ключови думи, а реална семантична прилика.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -195,28 +194,28 @@ for (EmbeddingMatch match : matches) {
double score = match.score();
}
```
+
+Диаграмата по-долу противопоставя семантичното търсене на традиционното търсене по ключови думи. Търсенето по ключова дума за "превозно средство" пропуска част за "коли и камиони", но семантичното търсене разбира, че те значат едно и също нещо и го връща като високорейтингов резултат:
-Диаграмата по-долу контрастира семантичното търсене с традиционно търсене по ключови думи. Търсене по ключова дума "превозно средство" пропуска парче за "коли и камиони", но семантичното търсене разбира, че това значи едно и също и връща този резултат с висока оценка:
+
-
+*Тази диаграма сравнява търсенето по ключови думи със семантичното търсене, показвайки как семантичното извлича концептуално свързано съдържание, дори когато точните ключови думи се различават.*
-*Тази диаграма сравнява търсене по ключови думи със семантично търсене, показвайки как семантичното търсене връща концептуално свързано съдържание, дори когато точните ключови думи са различни.*
-Под капака, сходството се измерва чрез косинусова близост — по същество питаме "дали тези две стрелки сочат в една и съща посока?" Два откъса могат да използват напълно различни думи, но ако означават едно и също нещо, техните вектори сочат по един и същи начин и резултатът е близо до 1.0:
+Под капака приличието се измерва чрез косинусна прилика — основно, питаме се дали "две стрелки сочат в една и съща посока?" Две части могат да използват напълно различни думи, но ако значат едно и също, техните вектори сочат в същата посока и оценката им е близка до 1.0:
+*Тази диаграма илюстрира косинусната прилика като ъгъл между векторите на вградените представяния — по-успоредни вектори имат резултат, по-близък до 1.0, което показва по-висока семантична прилика.*
-*Тази диаграма илюстрира косинусовата близост като ъгъл между векторите на вграждането — по-прилежащите вектори получават резултат, близък до 1.0, което показва по-високо семантично сходство.*
-
-> **🤖 Опитайте с [GitHub Copilot](https://github.com/features/copilot) Chat:** Отворете [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) и задайте:
-> - "Как работи търсенето на сходство с embeddings и какво определя резултата?"
-> - "Какъв праг за сходство да използвам и как той влияе на резултатите?"
-> - "Как да се справя с случаи, когато не са намерени релевантни документи?"
+> **🤖 Опитайте с [GitHub Copilot](https://github.com/features/copilot) Chat:** Отворете [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) и попитайте:
+> - "Как работи търсенето по прилика с вградени представяния и какво определя резултата?"
+> - "Какъв праг за прилика трябва да използвам и как това влияе на резултатите?"
+> - "Как да постъпя, когато не бъдат намерени релевантни документи?"
### Генериране на отговор
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Най-релевантните откъси се събират в структурирана команда, която включва явни инструкции, извлечения контекст и въпроса на потребителя. Моделът чете тези конкретни откъси и отговаря въз основа на тази информация — той може да използва само това, което е пред него, което предотвратява халюцинации.
+Най-релевантните частички се събират в структуриран подкана, която включва явни инструкции, извлечения контекст и въпроса на потребителя. Моделът чете точно тези частички и отговаря въз основа на тази информация — може да използва само това, което е пред него, което предотвратява халюцинации.
```java
String context = matches.stream()
@@ -237,17 +236,17 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-Диаграмата по-долу показва този процес — откъсите с най-висок резултат от търсенето се вмъкват в шаблона на подканата, а `OpenAiOfficialChatModel` генерира базиран на контекста отговор:
+Диаграмата по-долу показва този процес в действие — топ резултатните частички от стъпката на търсене се вмъкват в шаблона на подкана, а `OpenAiOfficialChatModel` генерира обоснован отговор:
-*Тази диаграма показва как откъсите с най-високи резултати се събират в структурирана подканваща команда, позволявайки на модела да генерира обоснован отговор от вашите данни.*
+*Тази диаграма показва как топ резултатните частички се събират в структуриран подкана, позволявайки на модела да генерира обоснован отговор от вашите данни.*
## Стартиране на приложението
**Проверете разгръщането:**
-Уверете се, че файлът `.env` съществува в коренната директория с Azure данни за достъп (създаден по време на Модул 01). Стартирайте това от директорията на модула (`03-rag/`):
+Уверете се, че файлът `.env` съществува в основната директория с Azure креденшъли (създадени по време на Модул 01). Стартирайте това от директорията на модула (`03-rag/`):
**Bash:**
```bash
@@ -261,37 +260,37 @@ Get-Content ..\.env # Трябва да показва AZURE_OPENAI_ENDPOINT, A
**Стартирайте приложението:**
-> **Забележка:** Ако вече сте стартирали всички приложения чрез `./start-all.sh` от коренната директория (както е описано в Модул 01), този модул вече работи на порт 8081. Можете да пропуснете командите за стартиране по-долу и да отидете директно на http://localhost:8081.
+> **Забележка:** Ако вече сте стартирали всички приложения чрез `./start-all.sh` от основната директория (както е описано в Модул 01), този модул вече работи на порт 8081. Можете да пропуснете долните команди за стартиране и директно да отворите http://localhost:8081.
-**Опция 1: Използване на Spring Boot Dashboard (Препоръчително за потребители на VS Code)**
+**Вариант 1: Използване на Spring Boot Dashboard (Препоръчително за потребители на VS Code)**
-Dev контейнерът включва разширението Spring Boot Dashboard, което предоставя визуален интерфейс за управление на всички Spring Boot приложения. Можете да го намерите в Activity Bar от лявата страна на VS Code (потърсете иконата на Spring Boot).
+Dev контейнерът включва разширение Spring Boot Dashboard, което осигурява визуален интерфейс за управление на всички Spring Boot приложения. Можете да го намерите в Activity Bar вляво на VS Code (потърсете иконата на Spring Boot).
-От Spring Boot Dashboard можете:
-- Да видите всички налични Spring Boot приложения в работната среда
-- Да стартирате/спирате приложения с едно щракване
-- Да разглеждате логовете на приложенията в реално време
-- Да следите състоянието на приложенията
+От Spring Boot Dashboard можете да:
+- видите всички достъпни Spring Boot приложения в работното пространство
+- стартирате/спирате приложения с едно кликване
+- разглеждате логове на приложенията в реално време
+- следите статус на приложенията
-Просто кликнете бутона за пускане до "rag", за да стартирате този модул, или стартирайте всички модули наведнъж.
+Просто натиснете бутона за пускане до "rag", за да стартирате този модул, или стартирайте всички модули наведнъж.
-*Този екран показва Spring Boot Dashboard във VS Code, където можете визуално да стартирате, спирате и наблюдавате приложения.*
+*Този скрийншот показва Spring Boot Dashboard в VS Code, където можете визуално да стартирате, спирате и следите приложения.*
-**Опция 2: Използване на shell скриптове**
+**Вариант 2: Използване на shell скриптове**
Стартирайте всички уеб приложения (модули 01-04):
**Bash:**
```bash
-cd .. # От главната директория
+cd .. # От коренната директория
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # От главната директория
+cd .. # От коренната директория
.\start-all.ps1
```
@@ -309,9 +308,9 @@ cd 03-rag
.\start.ps1
```
-Двата скрипта автоматично зареждат променливите на средата от файла `.env` в корена и ще компилират JAR файловете, ако те не съществуват.
+Двата скрипта автоматично зареждат променливи на средата от основния `.env` файл и ще компилират JAR файловете, ако не съществуват.
-> **Забележка:** Ако предпочитате да компилирате всички модули ръчно преди стартиране:
+> **Забележка:** Ако предпочитате да изградите всички модули ръчно преди стартиране:
>
> **Bash:**
> ```bash
@@ -325,7 +324,7 @@ cd 03-rag
> mvn clean package -DskipTests
> ```
-Отворете http://localhost:8081 в браузъра си.
+Отворете http://localhost:8081 във вашия браузър.
**За спиране:**
@@ -353,73 +352,73 @@ cd ..; .\stop-all.ps1 # Всички модули
### Качване на документ
-Започнете с качване на документ – TXT файловете работят най-добре за тестване. Тук е предоставен `sample-document.txt`, който съдържа информация за функциите на LangChain4j, реализирането на RAG и добри практики – перфектен за тестване на системата.
+Започнете с качване на документ - най-добре работят TXT файлове за тестване. Предоставен е файл `sample-document.txt` в тази директория, който съдържа информация за функциите на LangChain4j, имплементацията на RAG и добри практики - идеален за тестване на системата.
-Системата обработва вашия документ, разделя го на откъси и създава embedding-и за всеки откъс. Това става автоматично при качване.
+Системата обработва документа, разбива го на части и създава вградени представяния за всяка част. Това се случва автоматично при качване.
### Задаване на въпроси
-Сега задайте конкретни въпроси за съдържанието на документа. Опитайте нещо фактическо, което е ясно посочено в документа. Системата търси релевантни откъси, включва ги в подканата и генерира отговор.
+Сега задайте конкретни въпроси относно съдържанието на документа. Опитайте с фактическа информация, която е ясно изразена в документа. Системата търси релевантни части, включва ги в подкана и генерира отговор.
-### Проверка на източниците
+### Проверка на изходните препратки
-Забележете, че всеки отговор включва препратки към източници с оценки за сходство. Тези оценки (от 0 до 1) показват колко релевантен е всеки откъс спрямо вашия въпрос. По-високите оценки означават по-добро съвпадение. Това ви позволява да проверите отговора спрямо изходния материал.
+Забележете, че всеки отговор включва изходни препратки с оценки за прилика. Тези оценки (от 0 до 1) показват колко релевантна е била всяка част към вашия въпрос. По-високите оценки означават по-добри съвпадения. Това ви позволява да проверите отговора спрямо изходния материал.
-*Този скрийншот показва резултатите от заявки с генерирания отговор, източници и оценки за релевантност за всеки извлечен откъс.*
+*Този скрийншот показва резултатите от заявка с генерирания отговор, източниците и оценките за релевантност на всяка извлечена част.*
-### Експериментиране с въпроси
+### Експериментирайте с въпроси
Опитайте различни типове въпроси:
- Конкретни факти: "Каква е основната тема?"
- Сравнения: "Каква е разликата между X и Y?"
-- Обобщения: "Обобщете основните точки за Z"
+- Резюмета: "Обобщете ключовите точки за Z"
-Наблюдавайте как оценките за релевантност се променят според това колко добре вашият въпрос съответства на съдържанието на документа.
+Наблюдавайте как се променят оценките за релевантност в зависимост от това колко добре въпросът ви съответства на съдържанието на документа.
-## Ключови концепции
+## Ключови понятия
-### Стратегия за разделяне на откъси
+### Стратегия за разделяне на части
-Документите се разделят на откъси с по 300 токена и 30 токена припокриване. Този баланс гарантира, че всеки откъс има достатъчно контекст, за да е смислен, като същевременно остава достатъчно малък, за да се включат няколко откъса в една подканваща команда.
+Документите се разделят на части по 300 токена с припокриване от 30 токена. Този баланс осигурява достатъчно контекст във всяка част, за да бъде смислена, като същевременно остава достатъчно малка, за да се включат няколко части в една подкана.
-### Оценки за сходство
+### Оценки за прилика
-Всеки извлечен откъс идва с оценка за сходство между 0 и 1, която показва колко точно отговаря на въпроса на потребителя. Диаграмата по-долу визуализира диапазоните на оценките и как системата ги използва за филтриране на резултатите:
+Всяка извлечена част идва с оценка за прилика между 0 и 1, която показва колко близо съответства на въпроса на потребителя. Диаграмата по-долу визуализира диапазоните на оценките и как системата ги използва за филтриране на резултатите:
-*Тази диаграма показва диапазоните от 0 до 1, с минимален праг 0.5, който филтрира нерелевантните откъси.*
+*Тази диаграма показва диапазоните на оценките от 0 до 1, с минимален праг от 0.5, който филтрира нелевантните части.*
-Оценките варират от 0 до 1:
-- 0.7-1.0: Много релевантен, точно съвпадение
-- 0.5-0.7: Релевантен, добър контекст
-- Под 0.5: Филтриран, твърде разликован
+Оценките са в диапазон от 0 до 1:
+- 0.7-1.0: Много релевантно, точно съвпадение
+- 0.5-0.7: Релевантно, добър контекст
+- Под 0.5: Филтрирано, твърде различно
-Системата извлича само откъси над минималния праг за гарантиране на качество.
+Системата извлича само части над минималния праг, за да осигури качество.
-Embedding-ите работят добре, когато значението се групира ясно, но имат слаби места. Диаграмата по-долу показва честите видове грешки — твърде големи откъси водят до замъглени вектори, прекалено малки откъси нямат контекст, двусмислени термини сочат към много групи, а точните търсения (като ID-та, сериен номер) изобщо не работят с embedding-и:
+Вградените представяния работят добре, когато смисълът се кластеризира ясно, но имат слепи зони. Диаграмата по-долу показва често срещани случаи на неуспех — части, които са твърде големи, създават неясни вектори, части, които са твърде малки, нямат контекст, многозначни термини сочат към множество групи, а точните търсения по идентификатори (№ на части и др.) не работят със вградени представяния изобщо:
-*Тази диаграма показва често срещаните грешки при embedding-и: откъси твърде големи, откъси твърде малки, двусмислени термини, и търсения за точно съвпадение като ID.*
+*Тази диаграма показва често срещани случаи на неуспех при вградените представяния: части твърде големи, части твърде малки, двусмислени термини, сочещи към няколко групи, и точни търсения като по идентификатори.*
-### Съхранение в паметта
+### Съхранение в памет
-Този модул използва съхранение в паметта за опростяване. При рестарт на приложението, качените документи се губят. Производствените системи използват персистентни векторни бази данни като Qdrant или Azure AI Search.
+Този модул използва съхранение в памет за простота. При рестарт на приложението качените документи се губят. Продукционните системи използват постоянни векторни бази данни като Qdrant или Azure AI Search.
### Управление на контекстния прозорец
-Всеки модел има максимален контекстен прозорец. Не можете да включите всички откъси от голям документ. Системата извлича най-релевантните N откъса (по подразбиране 5), за да остане в лимитите и същевременно да осигури достатъчен контекст за точни отговори.
+Всяка модел има максимален контекстен прозорец. Не можете да включите всички части от голям документ. Системата извлича топ N най-релевантни части (по подразбиране 5), за да се вмести в ограниченията, като осигурява достатъчно контекст за точни отговори.
## Кога RAG има значение
-RAG не винаги е правилният подход. Следващото ръководство за решения помага да прецените кога RAG добавя стойност и кога по-прости подходи — като включване на съдържанието директно в подканата или разчитаща на вътрешните знания на модела — са достатъчни:
+RAG не винаги е правилният подход. Наръчникът за решения по-долу ви помага да определите кога RAG добавя стойност и кога по-прости подходи — като включване на съдържание директно в подкана или разчитане на вградените знания на модела — са достатъчни:
-*Тази диаграма показва ръководство за решения кога RAG добавя стойност и кога по-простите подходи са достатъчни.*
+*Тази диаграма показва наръчник за решения кога RAG добавя стойност и кога по-простите подходи са достатъчни.*
## Следващи стъпки
@@ -427,11 +426,11 @@ RAG не винаги е правилният подход. Следващото
---
-**Навигация:** [← Предишен: Модул 02 - Проектиране на подканви](../02-prompt-engineering/README.md) | [Обратно към Основното](../README.md) | [Следващ: Модул 04 - Инструменти →](../04-tools/README.md)
+**Навигация:** [← Предишен: Модул 02 - Prompt Engineering](../02-prompt-engineering/README.md) | [Обратно към Основното](../README.md) | [Следващ: Модул 04 - Инструменти →](../04-tools/README.md)
---
**Отказ от отговорност**:
-Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия оригинален език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човешки преводач. Ние не носим отговорност за каквито и да е неразбирателства или неправилни тълкувания, произтичащи от използването на този превод.
+Този документ е преведен с помощта на AI преводачески услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
\ No newline at end of file
diff --git a/translations/bg/04-tools/README.md b/translations/bg/04-tools/README.md
index 63e49c933..41bdc2bf0 100644
--- a/translations/bg/04-tools/README.md
+++ b/translations/bg/04-tools/README.md
@@ -2,83 +2,83 @@
## Съдържание
-- [Видео урок](../../../04-tools)
-- [Какво ще научите](../../../04-tools)
-- [Предварителни изисквания](../../../04-tools)
-- [Разбиране на AI агенти с инструменти](../../../04-tools)
-- [Как работи повикването на инструменти](../../../04-tools)
- - [Дефиниции на инструменти](../../../04-tools)
- - [Вземане на решения](../../../04-tools)
- - [Изпълнение](../../../04-tools)
- - [Генериране на отговор](../../../04-tools)
- - [Архитектура: Spring Boot автоматично свързване](../../../04-tools)
-- [Верижно използване на инструменти](../../../04-tools)
-- [Стартиране на приложението](../../../04-tools)
-- [Използване на приложението](../../../04-tools)
- - [Опитайте просто използване на инструмент](../../../04-tools)
- - [Тествайте верижно използване на инструменти](../../../04-tools)
- - [Вижте потока на разговора](../../../04-tools)
- - [Експериментирайте с различни заявки](../../../04-tools)
-- [Ключови концепции](../../../04-tools)
- - [ReAct модел (Разсъждение и действие)](../../../04-tools)
- - [Значение на описанията на инструментите](../../../04-tools)
- - [Управление на сесията](../../../04-tools)
- - [Обработка на грешки](../../../04-tools)
-- [Налични инструменти](../../../04-tools)
-- [Кога да използваме агенти с инструменти](../../../04-tools)
-- [Инструменти срещу RAG](../../../04-tools)
-- [Следващи стъпки](../../../04-tools)
+- [Видео урок](#видео-урок)
+- [Какво ще научите](#какво-ще-научите)
+- [Предварителни изисквания](#предварителни-изисквания)
+- [Разбиране на AI агенти с инструменти](#разбиране-на-ai-агенти-с-инструменти)
+- [Как работи извикването на инструменти](#как-работи-извикването-на-инструменти)
+ - [Дефиниции на инструменти](#дефиниции-на-инструменти)
+ - [Вземане на решения](#вземане-на-решения)
+ - [Изпълнение](#изпълнение)
+ - [Генериране на отговор](#генериране-на-отговор)
+ - [Архитектура: Spring Boot автосвързване](#архитектура-spring-boot-автосвързване)
+- [Свързване на инструменти](#свързване-на-инструменти)
+- [Стартиране на приложението](#стартиране-на-приложението)
+- [Използване на приложението](#използване-на-приложението)
+ - [Опитайте просто използване на инструмент](#изпробвайте-просто-използване-на-инструменти)
+ - [Тествайте свързване на инструменти](#тествайте-веригата-от-инструменти)
+ - [Вижте потока на разговора](#вижте-хода-на-разговора)
+ - [Експериментирайте с различни заявки](#експериментирайте-с-различни-заявки)
+- [Ключови концепции](#основни-понятия)
+ - [ReAct модел (Разсъждаване и действие)](#react-модел-разсъждение-и-действие)
+ - [Значение на описанията на инструментите](#описанията-на-инструментите-са-важни)
+ - [Управление на сесии](#управление-на-сесии)
+ - [Обработка на грешки](#обработка-на-грешки)
+- [Налични инструменти](#налични-инструменти)
+- [Кога да използваме агенти с инструменти](#кога-да-използваме-агенти-с-инструменти)
+- [Инструменти срещу RAG](#инструменти-срещу-rag)
+- [Следващи стъпки](#следващи-стъпки)
## Видео урок
-Гледайте този жив урок, който обяснява как да започнете с този модул:
+Гледайте тази жива сесия, която обяснява как да започнете с този модул:
-
+
## Какво ще научите
-Дотук научихте как да водите разговори с AI, как да структурирате ефективно подсказки и как да обвържете отговорите си с документи. Но има основно ограничение: езиковите модели могат само да генерират текст. Те не могат да проверят времето, да извършват изчисления, да правят заявки към бази данни или да взаимодействат с външни системи.
+До момента научихте как да водите разговори с AI, как да структурирате подканите ефективно и как да обвързвате отговорите с вашите документи. Но все още има основно ограничение: езиковите модели могат само да генерират текст. Те не могат да проверяват времето, да извършват изчисления, да правят заявки към бази данни или да взаимодействат с външни системи.
-Инструментите променят това. Като дадете на модела достъп до функции, които може да извика, вие го превръщате от генератор на текст в агент, който може да предприема действия. Моделът решава кога му трябва инструмент, кой инструмент да използва и какви параметри да подаде. Вашият код изпълнява функцията и връща резултата. Моделът включва този резултат в своя отговор.
+Инструментите променят това. Като дадете на модела достъп до функции, които може да извиква, го превръщате от генератор на текст в агент, който може да предприема действия. Моделът решава кога му трябва инструмент, кой инструмент да използва и какви параметри да подаде. Вашият код изпълнява функцията и връща резултата. Моделът включва този резултат в своя отговор.
## Предварителни изисквания
-- Завършен [Модул 01 - Въведение](../01-introduction/README.md) (разположени ресурси Azure OpenAI)
-- Препоръчително завършени предишни модули (този модул реферира към [RAG концепции от Модул 03](../03-rag/README.md) в сравнение между Инструменти и RAG)
-- Файл `.env` в главната директория с креденциали за Azure (създаден чрез `azd up` в Модул 01)
+- Изпълнен [Модул 01 - Въведение](../01-introduction/README.md) (разположени Azure OpenAI ресурси)
+- Препоръчително да сте преминали предишните модули (този модул препраща към [RAG концепции от Модул 03](../03-rag/README.md) в сравнение с Инструменти срещу RAG)
+- Файл `.env` в коренната директория с Azure идентификационни данни (създаден чрез `azd up` в Модул 01)
-> **Забележка:** Ако не сте завършили Модул 01, първо следвайте инструкциите за разгръщане там.
+> **Забележка:** Ако не сте изпълнили Модул 01, първо следвайте инструкциите за разполагане там.
## Разбиране на AI агенти с инструменти
-> **📝 Забележка:** Терминът „агенти“ в този модул се отнася до AI асистенти, подобрени с възможности за повикване на инструменти. Това е различно от **Agentic AI** моделите (автономни агенти с планиране, памет и многократно разсъждение), които ще разгледаме в [Модул 05: MCP](../05-mcp/README.md).
+> **📝 Забележка:** Терминът „агенти“ в този модул се отнася до AI асистенти, подобрени с възможности за извикване на инструменти. Това е различно от **Agentic AI** патерните (автономни агенти с планиране, памет и многократно разсъждение), които ще разгледаме в [Модул 05: MCP](../05-mcp/README.md).
-Без инструменти, езиков модел може само да генерира текст от тренировъчните си данни. Попитайте го за сегашното време и той трябва да гадае. Дайте му инструменти и може да извика API за времето, да извърши изчисления или да направи заявка към база данни — след което да преплете тези реални резултати в своя отговор.
+Без инструменти езиков модел може само да генерира текст от обучаващите данни. Попитайте го за текущото време и ще трябва да гадае. Дайте му инструменти и той може да извика API за времето, да извърши изчисления или да направи заявка към база данни — след което да вплете тези реални резултати в отговора си.
-
+
-*Без инструменти моделът само гадае — с инструменти може да извиква API-та, да извършва изчисления и да връща данни в реално време.*
+*Без инструменти моделът само гадае — с инструменти може да извиква API-та, да извършва изчисления и връща данни в реално време.*
-AI агентът с инструменти следва модел **Разсъждение и действие (ReAct)**. Моделът не просто отговаря — той мисли какво му трябва, действа като извиква инструмент, наблюдава резултата и след това решава дали да действа отново или да даде финалния отговор:
+AI агент с инструменти следва модел **Разсъждаване и действие (ReAct)**. Моделът не просто отговаря — той мисли какво му трябва, действа чрез извикване на инструмент, наблюдава резултата и решава дали да действа отново или да предостави крайния отговор:
1. **Разсъждава** — агентът анализира въпроса на потребителя и определя каква информация му трябва
-2. **Действа** — агентът избира подходящия инструмент, генерира правилните параметри и го извиква
-3. **Наблюдава** — агентът получава резултата от инструмента и го оценява
-4. **Повтаря или отговаря** — ако са нужни повече данни, агентът се връща обратно; иначе съставя отговор на естествен език
+2. **Действа** — агентът избира правилния инструмент, генерира правилните параметри и го извиква
+3. **Наблюдава** — агентът получава изхода на инструмента и оценява резултата
+4. **Повтаря или Отговаря** — ако са нужни още данни, агентът се връща обратно; иначе съставя отговор на естествен език
-*Цикълът ReAct — агентът разсъждава какво да направи, действа чрез повикване на инструмент, наблюдава резултата и циклира докато предостави финален отговор.*
+*Цикълът ReAct — агентът разсъждава какво да направи, действа чрез извикване на инструмент, наблюдава резултата и повтаря, докато може да предостави финалния отговор.*
-Това се случва автоматично. Вие дефинирате инструментите и техните описания. Моделът взема решения кога и как да ги използва.
+Това се случва автоматично. Вие дефинирате инструментите и техните описания. Моделът управлява взимането на решения кога и как да ги използва.
-## Как работи повикването на инструменти
+## Как работи извикването на инструменти
### Дефиниции на инструменти
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-Дефинирате функции с ясни описания и спецификации на параметрите. Моделът вижда тези описания във вашето системно подсказване и разбира какво прави всеки инструмент.
+Вие дефинирате функции с ясни описания и спецификации на параметрите. Моделът вижда тези описания в своята системна подсказка и разбира какво прави всеки инструмент.
```java
@Component
@@ -97,134 +97,134 @@ public interface Assistant {
}
// Асистентът е автоматично свързан от Spring Boot с:
-// - ChatModel обект
+// - ChatModel bean
// - Всички @Tool методи от @Component класове
// - ChatMemoryProvider за управление на сесии
```
+
+Диаграмата по-долу разглежда всяка анотация и показва как всяка част помага на AI да разбере кога да извика инструмента и какви аргументи да подаде:
-Диаграмата по-долу обяснява всяка анотация и показва как всяка част помага на AI да разбере кога да извика инструмента и какви аргументи да подаде:
+
-
-
-*Анатомия на дефиниция на инструмент — @Tool казва на AI кога да го използва, @P описва всеки параметър, а @AiService свързва всичко при стартиране.*
+*Анатомия на дефиниция на инструмент — @Tool казва на AI кога да го използва, @P описва всеки параметър, а @AiService свързва всичко заедно при стартиране.*
> **🤖 Опитайте с [GitHub Copilot](https://github.com/features/copilot) Chat:** Отворете [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) и попитайте:
-> - "Как бих интегрирал реално weather API, като OpenWeatherMap, вместо мок данни?"
-> - "Какво прави едно добро описание на инструмент, което помага на AI правилно да го използва?"
-> - "Как да обработвам грешки и ограничения на API в имплементациите на инструментите?"
+> - "Как бих интегрирал реално API за времето като OpenWeatherMap вместо тестови данни?"
+> - "Какво прави едно описание на инструмент добро и помага на AI да го използва правилно?"
+> - "Как да управлявам грешки и ограничения на скоростта в реализацията на инструментите?"
### Вземане на решения
-Когато потребител пита „Какво е времето в Сиатъл?“, моделът не избира произволно инструмент. Той сравнява намерението на потребителя с всяко описание на инструмент, които има достъп, оценява всяко по релевантност и избира най-подходящото. След това генерира структурирано повикване на функция с правилните параметри — в случая задава `location` на `"Seattle"`.
+Когато потребителят пита „Какво е времето в Сиатъл?“, моделът не избира произволно инструмент. Той сравнява намерението на потребителя спрямо описанията на всички инструменти, които има достъп, оценява тяхната релевантност и избира най-подходящия. След това генерира структуриран извикване на функция с правилните параметри — в този случай задава `location` на `"Seattle"`.
-Ако няма инструмент, който да съответства на заявката на потребителя, моделът отговаря от собствените си знания. Ако има няколко подходящи инструмента, избира най-конкретния.
+Ако няма инструмент, който съвпада с желанията на потребителя, моделът отговаря с базирана на знанието си информация. Ако няколко инструмента съвпадат, избира най-специфичния.
-*Моделът оценява всеки наличен инструмент спрямо намерението на потребителя и избира най-добрия — затова е важно да се пишат ясни, конкретни описания на инструментите.*
+*Моделът оценява всеки наличен инструмент спрямо намерението на потребителя и избира най-подходящия — затова е важно да пишете ясни и конкретни описания на инструментите.*
### Изпълнение
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-Spring Boot автоматично свързва декларативния интерфейс `@AiService` с всички регистрирани инструменти и LangChain4j изпълнява повикванията към инструментите автоматично. Зад кулисите, едно пълно повикване на инструмент минава през шест етапа — от въпроса на потребителя на естествен език до отговора на естествен език:
+Spring Boot автоматично свързва декларативния интерфейс `@AiService` с всички регистрирани инструменти, а LangChain4j автоматично изпълнява извикванията на инструменти. Зад кулисите, пълното извикване на инструмент преминава през шест етапа — от въпроса на потребителя на естествен език до отговора на естествен език:
-
+
-*Пълният поток — потребителят задава въпрос, моделът избира инструмент, LangChain4j го изпълнява, а моделът включва резултата в естествения отговор.*
+*Цялостният процес — потребителят задава въпрос, моделът избира инструмент, LangChain4j го изпълнява и моделът вплита резултата в естествен отговор.*
-Ако сте стартирали [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) в Модул 00, вече сте видели този модел в действие — инструментите `Calculator` се извикват по същия начин. Диаграмата за последователност по-долу показва точно какво се случи зад кулисите по време на този демонстрационен пример:
+Зад кулисите, `AiServices` изпълнява същия цикъл на извикване на инструменти за всеки инструмент — тук илюстрирано с прост `Calculator`. Диаграмата на последователността по-долу показва точно какво се случва под капака:
-
+
-*Цикъл на повикване на инструмент от демото Quick Start — `AiServices` изпраща съобщението и схемите на инструментите към LLM, LLM отговаря с повикване на функция като `add(42, 58)`, LangChain4j изпълнява метода `Calculator` локално и връща резултата за финален отговор.*
+*Цикълът на извикване на инструмент — `AiServices` изпраща вашето съобщение и схеми на инструменти към LLM, LLM отговаря с извикване на функция като `add(42, 58)`, LangChain4j локално изпълнява метода `Calculator` и връща резултата за окончателния отговор.*
> **🤖 Опитайте с [GitHub Copilot](https://github.com/features/copilot) Chat:** Отворете [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) и попитайте:
> - "Как работи моделът ReAct и защо е ефективен за AI агенти?"
> - "Как агентът решава кой инструмент да използва и в какъв ред?"
-> - "Какво се случва ако изпълнението на инструмент се провали — как да обработя грешките надеждно?"
+> - "Какво се случва, ако изпълнението на инструмент се провали - как да управлявам грешки надеждно?"
### Генериране на отговор
Моделът получава данните за времето и ги форматира в отговор на естествен език за потребителя.
-### Архитектура: Spring Boot автоматично свързване
+### Архитектура: Spring Boot автосвързване
-Този модул използва интеграция на LangChain4j със Spring Boot с декларативни интерфейси `@AiService`. При стартиране Spring Boot открива всеки `@Component`, съдържащ методи с `@Tool`, вашия `ChatModel` bean и `ChatMemoryProvider` — след което ги свързва всички в един интерфейс `Assistant` без нужда от излишен код.
+Този модул използва интеграцията на LangChain4j със Spring Boot и декларативни интерфейси `@AiService`. При стартиране Spring Boot открива всеки `@Component`, който съдържа методи с `@Tool`, вашия ChatModel bean и ChatMemoryProvider — след което ги свързва всички в един интерфейс Assistant без излишен шаблонен код.
-
+
-*Интерфейсът @AiService свързва ChatModel, компонентите на инструментите и доставчика на памет — Spring Boot управлява цялото свързване автоматично.*
+*Интерфейсът @AiService свързва заедно ChatModel, компонентите на инструментите и доставчика на памет — Spring Boot управлява всичко за вас автоматично.*
-Ето пълния жизнен цикъл на заявката като диаграма за последователност — от HTTP заявката през контролера, сервиза и автоматично свързаното прокси, чак до изпълнението на инструмента и връщането назад:
+Ето целия жизнен цикъл на заявката като диаграма на последователността — от HTTP заявката през контролера, услугата и авто-свързания прокси, чак до изпълнението на инструмента и връщане обратно:
-
+
-*Пълният жизнен цикъл на заявка в Spring Boot — HTTP заявката преминава през контролера и сервиза до автоматично свързаното прокси Assistant, което автоматично организира повикванията към LLM и инструментите.*
+*Пълният жизнен цикъл на заявката в Spring Boot — HTTP заявката преминава през контролер и услуга до авто-свързания Assistant прокси, който управлява LLM и извикванията на инструменти автоматично.*
-Основни предимства на този подход:
+Ключови предимства на този подход:
-- **Автоматично свързване в Spring Boot** — ChatModel и инструментите се инжектират автоматично
+- **Spring Boot автосвързване** — ChatModel и инструментите се инжектират автоматично
- **Патерн @MemoryId** — Автоматично управление на паметта на базата на сесии
-- **Единствен инстанс** — Assistant се създава веднъж и се използва повторно за по-добра производителност
-- **Безопасно по типове изпълнение** — Java методи се извикват директно с преобразуване на типове
-- **Оркестрация на многократни обрати** — Автоматично управлява верижното използване на инструменти
-- **Нулев излишен код** — Без ръчни извиквания на `AiServices.builder()` или ръчно управление на HashMap памет
+- **Единствен екземпляр** — Assistant се създава веднъж и се използва многократно за по-добра производителност
+- **Изпълнение тип-безопасно** — Java методите се извикват директно с преобразуване на типове
+- **Управление на множество стъпки** — Автоматично обслужва свързване на инструменти
+- **Без излишен шаблонен код** — Няма нужда от ръчни `AiServices.builder()` извиквания или работа с паметен HashMap
-Алтернативните подходи (ръчно `AiServices.builder()`) изискват повече код и не предлагат предимствата на интеграцията със Spring Boot.
+Алтернативните подходи (ръчни `AiServices.builder()`) изискват повече код и не използват предимствата на Spring Boot интеграцията.
-## Верижно използване на инструменти
+## Свързване на инструменти
-**Веригване на инструменти** — Истинската сила на агенти с инструменти се проявява когато един въпрос изисква използване на няколко инструмента. Попитайте „Какво е времето в Сиатъл по Фаренхайт?“ и агентът автоматично верижира два инструмента: първо извиква `getCurrentWeather` за температурата в Целзий, после предава тази стойност на `celsiusToFahrenheit` за конверсия — всичко в един разговорен ред.
+**Свързване на инструменти** — Истинската сила на агентите с инструменти се проявява, когато един въпрос изисква използването на множество инструменти. Попитайте "Какво е времето в Сиатъл във Фаренхайт?" и агентът автоматично свързва два инструмента: първо извиква `getCurrentWeather`, за да получи температурата в Целзий, след това подава тази стойност на `celsiusToFahrenheit` за преобразуване — всичко в един разговорен ход.
-
+
-*Верижно използване на инструменти в действие — агентът първо извиква getCurrentWeather, после подава резултата в celsiusToFahrenheit и връща комбиниран отговор.*
+*Свързване на инструменти в действие — агентът първо извиква getCurrentWeather, след това подава резултата в Целзий на celsiusToFahrenheit и връща комбиниран отговор.*
-**Гладко справяне с грешки** — Ако поискате времето в град, който липсва в мок данните, инструментът връща съобщение за грешка, а AI обяснява, че не може да помогне, вместо да се срине. Инструментите падат безопасно. Диаграмата по-долу сравнява двата подхода — с правилна обработка на грешки агентът улавя изключението и отговаря полезно, а без нея цялото приложение се срива:
+**Грациозни повреди** — Попитайте за времето в град, който не е в тестовите данни. Инструментът връща съобщение за грешка, а AI обяснява, че не може да помогне, вместо да се срине. Инструментите се провалят безопасно. Диаграмата по-долу противопоставя двата подхода — с правилна обработка на грешки агентът хваща изключението и отговаря полезно, а без нея цялото приложение спира да работи:
-*Когато инструмент се провали, агентът улавя грешката и отговаря с полезно обяснение вместо да спре.*
+*Когато инструмент се провали, агентът хваща грешката и отговаря с полезно обяснение, вместо да се срине.*
-Това става в един разговорен ред. Агентът автономно оркестрира множество повиквания на инструменти.
+Това се случва в един разговорен ход. Агентът управлява множество извиквания на инструменти автономно.
## Стартиране на приложението
-**Проверете разгръщането:**
+**Проверете разполагането:**
-Уверете се, че файлът `.env` е наличен в главната директория с креденциали за Azure (създаден по време на Модул 01). Изпълнете това от директорията на модула (`04-tools/`):
+Осигурете, че файл `.env` съществува в коренната директория с Azure идентификационни данни (създаден по време на Модул 01). Стартирайте това от директорията на модула (`04-tools/`):
**Bash:**
```bash
cat ../.env # Трябва да показва AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
+
**PowerShell:**
```powershell
Get-Content ..\.env # Трябва да показва AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
+
**Стартирайте приложението:**
-> **Забележка:** Ако вече сте стартирали всички приложения с `./start-all.sh` от главната директория (както е описано в Модул 01), този модул вече работи на порт 8084. Можете да пропуснете командите за стартиране и директно да отидете на http://localhost:8084.
+> **Забележка:** Ако вече сте стартирали всички приложения чрез `./start-all.sh` от коренната директория (както е описано в Модул 01), този модул вече работи на порт 8084. Можете да прескочите командите за стартиране по-долу и да отидете директно на http://localhost:8084.
**Опция 1: Използване на Spring Boot Dashboard (Препоръчително за потребители на VS Code)**
-В контейнера за разработка е включено разширението Spring Boot Dashboard, което предоставя визуален интерфейс за управление на всички Spring Boot приложения. Можете да го намерите в лентата с дейности вляво във VS Code (потърсете иконата на Spring Boot).
+Разработчическият контейнер включва разширение Spring Boot Dashboard, което предоставя визуален интерфейс за управление на всички Spring Boot приложения. Можете да го намерите в лентата с активности вляво на VS Code (потърсете иконата на Spring Boot).
От Spring Boot Dashboard можете:
-- Да видите всички налични Spring Boot приложения в работната област
+- Да видите всички налични Spring Boot приложения в работната среда
- Да стартирате/спирате приложения с един клик
-- Да разглеждате логовете на приложението в реално време
-- Да следите статуса на приложението
-Просто кликнете върху бутона за възпроизвеждане до "tools", за да стартирате този модул, или стартирайте всички модули наведнъж.
+- Да преглеждате логове на приложенията в реално време
+- Да наблюдавате състоянието на приложенията
-Ето как изглежда Spring Boot Dashboard във VS Code:
+Просто кликнете върху бутона за пускане до „tools“, за да стартирате този модул, или стартирайте всички модули наведнъж.
+Ето как изглежда Spring Boot Dashboard в VS Code:
-*Spring Boot Dashboard във VS Code — стартиране, спиране и наблюдение на всички модули от едно място*
+*Таблото за управление Spring Boot в VS Code — стартирайте, спирайте и наблюдавайте всички модули от едно място*
**Опция 2: Използване на shell скриптове**
@@ -232,13 +232,13 @@ Get-Content ..\.env # Трябва да показва AZURE_OPENAI_ENDPOINT, A
**Bash:**
```bash
-cd .. # От кореновата директория
+cd .. # От коренната директория
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # От кореновата директория
+cd .. # От главната директория
.\start-all.ps1
```
@@ -256,7 +256,7 @@ cd 04-tools
.\start.ps1
```
-И двата скрипта автоматично зареждат променливи на средата от `.env` файла в корена и ще компилират JAR файловете, ако не съществуват.
+И двата скрипта автоматично зареждат променливите на средата от основния `.env` файл и ще компилират JAR файловете, ако те не съществуват.
> **Забележка:** Ако предпочитате да компилирате всички модули ръчно преди стартиране:
>
@@ -292,84 +292,84 @@ cd ..; .\stop-all.ps1 # Всички модули
## Използване на приложението
-Приложението предоставя уеб интерфейс, където можете да взаимодействате с AI агент, който има достъп до инструменти за прогноза за времето и преобразуване на температури. Ето как изглежда интерфейсът — включва бързи примери и чат панел за изпращане на заявки:
+Приложението предоставя уеб интерфейс, където можете да взаимодействате с AI агент, който има достъп до инструменти за прогноза за времето и конвертиране на температура. Ето как изглежда интерфейсът — включва бързи примери и панел за чат за изпращане на заявки:
-*Интерфейс на AI Agent Tools - бързи примери и чат интерфейс за взаимодействие с инструменти*
+*Интерфейсът на AI Agent Tools - бързи примери и чат интерфейс за взаимодействие с инструментите*
-### Изпробвайте проста употреба на инструменти
+### Изпробвайте просто използване на инструменти
-Започнете с проста заявка: "Convert 100 degrees Fahrenheit to Celsius". Агентът разбира, че трябва да използва инструмента за преобразуване на температурата, извиква го с правилните параметри и връща резултата. Забележете колко естествено изглежда — не сте указали кой инструмент да се използва или как да го извика.
+Започнете с една ясна заявка: "Convert 100 degrees Fahrenheit to Celsius" (Конвертирай 100 градуса по Фаренхайт в Целзий). Агентът разпознава, че му е необходим инструмент за конвертиране на температура, извиква го с правилните параметри и връща резултата. Забележете колко естествено изглежда това – не сте указали кой инструмент да използва или как да го извика.
-### Тествайте свързване на инструменти
+### Тествайте веригата от инструменти
-Сега опитайте нещо по-сложно: "What's the weather in Seattle and convert it to Fahrenheit?" Наблюдавайте как агентът преминава през стъпките. Първо получава прогноза за времето (която връща по Целзий), разбира, че трябва да преобразува във Фаренхайт, извиква инструмента за конвертиране и комбинира двата резултата в един отговор.
+Сега опитайте нещо по-сложно: "What's the weather in Seattle and convert it to Fahrenheit?" (Какво е времето в Сиатъл и го конвертирай във Фаренхайт?) Вижте как агентът преминава през стъпките. Първо получава прогнозата (която връща по Целзий), разпознава, че трябва да конвертира във Фаренхайт, извиква инструмента за конверсия и комбинира двата резултата в един отговор.
-### Вижте потока на разговор
+### Вижте хода на разговора
-Чат интерфейсът съхранява историята на разговора, позволявайки ви да провеждате многократни взаимодействия. Можете да видите всички предишни въпроси и отговори, което улеснява проследяването на разговора и разбирането как агентът изгражда контекст през няколко обмена.
+Чат интерфейсът запазва историята на разговора, позволявайки ви да водите многоповторни взаимодействия. Можете да видите всички предишни заявки и отговори, което прави лесно проследяването на разговора и разбирането как агентът изгражда контекст през няколко обмена.
-*Многократен разговор, показващ прости преобразувания, търсения на времето и свързване на инструменти*
+*Многоповторен разговор показващ прости конверсии, проверка на времето и вериги от инструменти*
### Експериментирайте с различни заявки
Опитайте различни комбинации:
-- Търсения на времето: "What's the weather in Tokyo?"
-- Преобразувания на температури: "What is 25°C in Kelvin?"
-- Комбинирани заявки: "Check the weather in Paris and tell me if it's above 20°C"
+- Проверка на времето: "What's the weather in Tokyo?" (Какво е времето в Токио?)
+- Конверсии на температура: "What is 25°C in Kelvin?" (Колко е 25°C в Келвин?)
+- Комбинирани заявки: "Check the weather in Paris and tell me if it's above 20°C" (Провери времето в Париж и ми кажи дали е над 20°C)
-Забележете как агентът интерпретира естествения език и го преобразува в съответните извиквания на инструменти.
+Забележете как агентът интерпретира естествения език и го съпоставя с подходящи извиквания на инструменти.
## Основни понятия
-### Патерн ReAct (Разсъждение и Действие)
+### ReAct модел (Разсъждение и Действие)
-Агентът редува между разсъждение (решаване какво да направи) и действие (използване на инструменти). Този модел позволява автономно решаване на проблеми, а не просто отговори на инструкции.
+Агентът редува разсъждение (решаване какво да прави) и действие (използване на инструменти). Този модел позволява автономно решаване на проблеми, а не само отговор на инструкции.
-### Описанията на инструментите имат значение
+### Описанията на инструментите са важни
-Качеството на описанията на вашите инструменти пряко влияе върху това колко добре агентът ги използва. Ясните, конкретни описания помагат на модела да разбере кога и как да извика всеки инструмент.
+Качеството на описанията на вашите инструменти влияе директно колко добре агентът ги използва. Ясните и конкретни описания помагат на модела да разбира кога и как да извика всеки инструмент.
### Управление на сесии
-Анотацията `@MemoryId` позволява автоматично управление на паметта на базата на сесии. Всеки идентификатор на сесия получава собствен екземпляр `ChatMemory`, управляван от `ChatMemoryProvider` bean, така че множество потребители могат да взаимодействат с агента едновременно без разговорите им да се смесват. Следната диаграма показва как множество потребители се насочват към изолирани хранилища на памет, базирани на техните ID на сесия:
+Анотацията `@MemoryId` позволява автоматично управление на памет на базата на сесия. Всеки идентификатор на сесия получава свой собствен инстанс на `ChatMemory`, управляван от bean-а `ChatMemoryProvider`, така че множество потребители могат да взаимодействат с агента едновременно без да се смесват разговорите им. Следната диаграма показва как множество потребители се насочват към изолирани паметови хранилища на базата на своите идентификатори на сесия:
-*Всеки ID на сесия съответства на изолирана история на разговора — потребителите никога не виждат съобщенията един на друг.*
+*Всеки идентификатор на сесия съответства на изолирана история на разговора — потребителите никога не виждат съобщенията на другите.*
### Обработка на грешки
-Инструментите могат да се повредят — API могат да изтекат, параметрите да са невалидни, външни услуги да спрат. Продуктовите агенти имат нужда от обработка на грешки, за да може моделът да обяснява проблемите или да опитва алтернативи, вместо да срива цялото приложение. Когато инструмент хвърли изключение, LangChain4j го прихваща и предава съобщението за грешка обратно към модела, който може да обясни проблема на естествен език.
+Инструментите могат да се провалят — API-тата могат да изтекат, параметрите да са невалидни, външни услуги да спрат. Производствените агенти се нуждаят от обработка на грешки, така че моделът да може да обяснява проблемите или да пробва алтернативи, вместо приложението да се срива. Когато инструмент хвърли изключение, LangChain4j го улавя и предава съобщението за грешка обратно на модела, който после може да обясни проблема на естествен език.
## Налични инструменти
-Диаграмата по-долу показва широката екосистема от инструменти, които можете да създавате. Този модул демонстрира инструменти за времето и температурата, но същият патерн `@Tool` работи за всякакъв Java метод — от заявки към бази данни до обработка на плащания.
+Диаграмата по-долу показва широката екосистема от инструменти, които можете да изградите. Този модул демонстрира инструменти за времето и температурата, но същият `@Tool` модел работи за всеки Java метод — от заявки към база данни до обработка на плащания.
-*Всеки Java метод, анотиран с @Tool, става достъпен за AI — този патерн се разпростира върху бази данни, API, имейли, файлови операции и още.*
+*Всеки Java метод, анотиран с @Tool, става достъпен за AI — моделът се разширява към бази данни, API, имейл, файлови операции и други.*
-## Кога да използвате агенти, базирани на инструменти
+## Кога да използваме агенти с инструменти
-Не всяка заявка изисква инструменти. Решението зависи от това дали AI трябва да взаимодейства с външни системи или може да отговори въз основа на собствените си знания. Следното ръководство обобщава кога инструментите добавят стойност и кога са излишни:
+Не всяка заявка се нуждае от инструменти. Решението зависи от това дали AI трябва да взаимодейства с външни системи или може да отговори от собствените си знания. Следващото ръководство обобщава кога инструментите добавят стойност и кога не са необходими:
-*Бързо ръководство за решения — инструментите са за реалновременни данни, изчисления и действия; общи знания и творчески задачи не се нуждаят от тях.*
+*Бързо ръководство за решение — инструментите са за данни в реално време, изчисления и действия; общите знания и творческите задачи не ги изискват.*
-## Инструменти спрямо RAG
+## Инструменти срещу RAG
-Модулите 03 и 04 и двата разширяват възможностите на AI, но по съществени различни начини. RAG предоставя на модела достъп до **знания** чрез извличане на документи. Инструментите дават на модела възможност да извършва **действия** чрез извикване на функции. Диаграмата по-долу сравнява тези два подхода един до друг — от начина, по който работи всеки поток, до компромисите между тях:
+Модулите 03 и 04 разширяват възможностите на AI, но по съществено различни начини. RAG дава на модела достъп до **знания** чрез извличане на документи. Инструментите дават на модела способността да извършва **действия** чрез извикване на функции. Диаграмата по-долу сравнява тези два подхода един до друг — от начина на работа на всеки процес до компромисите между тях:
-*RAG извлича информация от статични документи — Инструментите изпълняват действия и доставят динамични, актуални данни. Много продуктови системи комбинират и двата подхода.*
+*RAG извлича информация от статични документи — Инструментите изпълняват действия и взимат динамични, в реално време данни. Много производствени системи комбинират и двата подхода.*
-На практика, много продуктови системи съчетават двата подхода: RAG за обосноваване на отговорите с вашата документация и Инструменти за достъп до живи данни или изпълнение на операции.
+На практика много производствени системи комбинират двата подхода: RAG за основа на отговорите в документацията ви и Инструменти за взимане на живи данни или изпълнение на операции.
## Следващи стъпки
@@ -377,11 +377,11 @@ cd ..; .\stop-all.ps1 # Всички модули
---
-**Навигация:** [← Предишен: Модул 03 - RAG](../03-rag/README.md) | [Обратно към Главната](../README.md) | [Следващ: Модул 05 - MCP →](../05-mcp/README.md)
+**Навигация:** [← Предишен: Модул 03 - RAG](../03-rag/README.md) | [Обратно към началото](../README.md) | [Следващ: Модул 05 - MCP →](../05-mcp/README.md)
---
**Отказ от отговорност**:
-Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
+Този документ е преведен с помощта на AI преводачески услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
\ No newline at end of file
diff --git a/translations/bg/README.md b/translations/bg/README.md
index 4b6a6da97..18a737f86 100644
--- a/translations/bg/README.md
+++ b/translations/bg/README.md
@@ -2,18 +2,18 @@
# LangChain4j за начинаещи
-Курс за изграждане на AI приложения с LangChain4j и Azure OpenAI GPT-5.2, от базов чат до AI агенти.
+Курс за разработване на AI приложения с LangChain4j и Azure OpenAI GPT-5.2, от основен чат до AI агенти.
-### 🌐 Поддръжка на много езици
+### 🌐 Многоезична поддръжка
#### Поддържа се чрез GitHub Action (автоматизирано и винаги актуално)
-[Арабски](../ar/README.md) | [Бенгалски](../bn/README.md) | [Български](./README.md) | [Бирмански (Мианмар)](../my/README.md) | [Китайски (опростен)](../zh-CN/README.md) | [Китайски (традиционен, Хонконг)](../zh-HK/README.md) | [Китайски (традиционен, Макао)](../zh-MO/README.md) | [Китайски (традиционен, Тайван)](../zh-TW/README.md) | [Хърватски](../hr/README.md) | [Чешки](../cs/README.md) | [Датски](../da/README.md) | [Нидерландски](../nl/README.md) | [Естонски](../et/README.md) | [Фински](../fi/README.md) | [Френски](../fr/README.md) | [Немски](../de/README.md) | [Гръцки](../el/README.md) | [Иврит](../he/README.md) | [Хинди](../hi/README.md) | [Унгарски](../hu/README.md) | [Индонезийски](../id/README.md) | [Италиански](../it/README.md) | [Японски](../ja/README.md) | [Каннада](../kn/README.md) | [Кмерски](../km/README.md) | [Корейски](../ko/README.md) | [Литовски](../lt/README.md) | [Малайски](../ms/README.md) | [Малаялам](../ml/README.md) | [Марати](../mr/README.md) | [Непалски](../ne/README.md) | [Нигерийски Пиджин](../pcm/README.md) | [Норвежки](../no/README.md) | [Персийски (Фарси)](../fa/README.md) | [Полски](../pl/README.md) | [Португалски (Бразилия)](../pt-BR/README.md) | [Португалски (Португалия)](../pt-PT/README.md) | [Пенджаби (Гурмукхи)](../pa/README.md) | [Румънски](../ro/README.md) | [Руски](../ru/README.md) | [Сръбски (кирилица)](../sr/README.md) | [Словашки](../sk/README.md) | [Словенски](../sl/README.md) | [Испански](../es/README.md) | [Суахили](../sw/README.md) | [Шведски](../sv/README.md) | [Тагалог (Филипински)](../tl/README.md) | [Тамилски](../ta/README.md) | [Телугу](../te/README.md) | [Тайландски](../th/README.md) | [Турски](../tr/README.md) | [Украински](../uk/README.md) | [Урду](../ur/README.md) | [Виетнамски](../vi/README.md)
+[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](./README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
> **Предпочитате да клонирате локално?**
>
-> Този хранилище включва над 50 езикови превода, което значително увеличава размера на изтеглянето. За да клонирате без преводи, използвайте sparse checkout:
+> Това хранилище включва над 50 езикови превода, което значително увеличава размера на изтеглянето. За да клонирате без преводи, използвайте sparse checkout:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -29,60 +29,61 @@
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> Това ви дава всичко необходимо за завършване на курса с много по-бързо изтегляне.
+> Това ви осигурява всичко необходимо за завършване на курса с много по-бързо изтегляне.
## Съдържание
-1. [Бърз старт](00-quick-start/README.md) - Започнете с LangChain4j
-2. [Въведение](01-introduction/README.md) - Научете основите на LangChain4j
-3. [Проектиране на подсказки](02-prompt-engineering/README.md) - Усъвършенствайте ефективно проектиране на подсказки
-4. [RAG (Генерация с достъп до база знания)](03-rag/README.md) - Изградете интелигентни системи, базирани на знания
-5. [Инструменти](04-tools/README.md) - Интегриране на външни инструменти и прости асистенти
-6. [MCP (Протокол за контекст на модела)](05-mcp/README.md) - Работа с Протокола за контекст на модела (MCP) и агенти
+1. [Въведение](01-introduction/README.md) - Научете основите на LangChain4j
+2. [Създаване на заявки (Prompt Engineering)](02-prompt-engineering/README.md) - Овладейте ефективни техники за създаване на заявки
+3. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Създавайте интелигентни системи, базирани на знания
+4. [Инструменти](04-tools/README.md) - Интегрирайте външни инструменти и прости асистенти
+5. [MCP (Model Context Protocol)](05-mcp/README.md) - Работете с Model Context Protocol (MCP) и агентски модули
-### Видео ръководства
+### Видео уроци
-Всеки модул има придружаваща сесия на живо, в която разглеждаме концепциите и кода стъпка по стъпка.
+Всеки модул има съпътстваща жива сесия, в която преминаваме през концепциите и кода стъпка по стъпка.
| Модул | Видео |
|--------|-------|
| 01 - Въведение | [Започване с LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
-| 02 - Проектиране на подсказки | [Проектиране на подсказки с LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
+| 02 - Създаване на заявки | [Създаване на заявки с LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
| 03 - RAG | [RAG с LangChain4j](https://www.youtube.com/watch?v=_olq75ZH_eY) |
| 04 - Инструменти & 05 - MCP | [AI агенти с инструменти и MCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
---
-## Обучителен път
+## Учебен път
-**Нови сте в LangChain4j?** Разгледайте [Глосария](docs/GLOSSARY.md) за определения на ключови термини и концепции.
+**Ново в LangChain4j?** Разгледайте [Глосария](docs/GLOSSARY.md) за определения на ключови термини и концепции.
> **Бърз старт**
1. Форкнете това хранилище в своя GitHub акаунт
-2. Натиснете **Code** → раздела **Codespaces** → **...** → **New with options...**
-3. Използвайте стандартните настройки – те ще изберат контейнера за разработка, създаден за курса
-4. Натиснете **Create codespace**
-5. Изчакайте 5-10 минути, докато средата се подготви
-6. Започнете директно от [Бърз старт](./00-quick-start/README.md)!
+2. Кликнете **Code** → раздел **Codespaces** → **...** → **New with options...**
+3. Използвайте подразбиращите се настройки – това ще избере development контейнера, създаден за този курс
+4. Кликнете **Create codespace**
+5. Изчакайте 5-10 минути докато средата се подготви
+6. Отидете директно на [Въведение](./01-introduction/README.md) и започнете!
-След завършване на модулите, разгледайте [Ръководството за тестване](docs/TESTING.md), за да видите концепциите на тестване в LangChain4j на практика.
+След като завършите модулите, разгледайте [Ръководството за тестване](docs/TESTING.md), за да видите в действие концепциите за тестване в LangChain4j.
+
+> **Забележка:** Тази тренировка използва Azure OpenAI. Започнете с [БЕЗПЛАТЕН Azure акаунт](https://aka.ms/azure-free-account), ако нямате такъв.
-> **Забележка:** Тренирането използва както GitHub модели, така и Azure OpenAI. Модулът [Бърз старт](00-quick-start/README.md) използва GitHub модели (не се изисква Azure абонамент), докато модулите 1-5 използват Azure OpenAI. Започнете с [БЕЗПЛАТЕН Azure акаунт](https://aka.ms/azure-free-account), ако нямате.
## Обучение с GitHub Copilot
-За да започнете бързо да пишете код, отворете този проект в GitHub Codespace или в локалната си IDE със предоставения devcontainer. Devcontainer-ът, използван в курса, идва предварително конфигуриран с GitHub Copilot за AI съвместно програмиране.
+За бързо започване на кодирането, отворете този проект в GitHub Codespace или във вашето локално IDE с осигурения devcontainer. Devcontainer-ът, използван в този курс, идва предварително конфигуриран с GitHub Copilot за AI програмиране в екип.
+
+Всеки примерен код включва предложени въпроси, които можете да зададете на GitHub Copilot, за да задълбочите разбирането си. Потърсете подсказките 💡/🤖 в:
-Всеки кодов пример включва предложени въпроси, които можете да зададете на GitHub Copilot, за да задълбочите разбирането си. Потърсете подсказките 💡/🤖 в:
+- **Java файлови хедъри** - Въпроси, специфични за всеки пример
+- **Модулни README файлове** - Подсказки за изследване след примерите с код
-- **Хедъри на Java файлове** - Въпроси специфични за всеки пример
-- **READMEs на модулите** - Подсказки за изследване след примерите с код
+**Как да използвате:** Отворете всеки кодов файл и задайте предложените въпроси на Copilot. Той има пълен контекст за кода и може да обяснява, разширява и предлага алтернативи.
-**Как да използвате:** Отворете всеки кодов файл и задайте предложените въпроси на Copilot. Той има пълен контекст на кода и може да обяснява, разширява и предлага алтернативи.
+Искате да научите повече? Разгледайте [Copilot за AI програмиране в екип](https://aka.ms/GitHubCopilotAI).
-Искате да научите повече? Разгледайте [Copilot за AI съвместно програмиране](https://aka.ms/GitHubCopilotAI).
## Допълнителни ресурси
@@ -97,7 +98,7 @@
[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
---
@@ -111,28 +112,28 @@
### Основно обучение
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
-[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
### Серия Copilot
-[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
## Получаване на помощ
-Ако се затрудните или имате въпроси относно изграждането на AI приложения, присъединете се към:
+Ако срещнете трудности или имате въпроси относно изграждането на AI приложения, присъединете се към:
[](https://aka.ms/foundry/discord)
-Ако имате обратна връзка за продукта или грешки при изграждането, посетете:
+Ако имате обратна връзка за продукта или грешки при създаване, посетете:
[](https://aka.ms/foundry/forum)
@@ -143,6 +144,6 @@
---
-**Дисклеймър**:
-Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е неразбирателства или неправилни тълкувания, произтичащи от използването на този превод.
+**Отказ от отговорност**:
+Този документ е преведен с помощта на AI преводачески услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
\ No newline at end of file
diff --git a/translations/bg/docs/GLOSSARY.md b/translations/bg/docs/GLOSSARY.md
index d13876671..286e0a6ad 100644
--- a/translations/bg/docs/GLOSSARY.md
+++ b/translations/bg/docs/GLOSSARY.md
@@ -1,50 +1,50 @@
-# LangChain4j Речник
+# Речник на LangChain4j
## Съдържание
-- [Основни понятия](../../../docs)
-- [Компоненти на LangChain4j](../../../docs)
-- [AI/ML понятия](../../../docs)
-- [Гардрейли](../../../docs)
-- [Примерно инженерство](../../../docs)
-- [RAG (Генерация с подсилено извличане)](../../../docs)
-- [Агенти и Инструменти](../../../docs)
-- [Агентски модул](../../../docs)
-- [Протокол за контекст на модела (MCP)](../../../docs)
-- [Azure услуги](../../../docs)
-- [Тестване и разработка](../../../docs)
+- [Основни понятия](#основни-понятия)
+- [Компоненти на LangChain4j](#компоненти-на-langchain4j)
+- [Понятия в AI/ML](#понятия-в-aiml)
+- [Защитни механизми](#защитни-механизми)
+- [Инженерство на подсказки](#prompt-engineering---module-02)
+- [RAG (Генериране с извличане)](#rag-retrieval-augmented-generation---module-03)
+- [Агенти и инструменти](#agents-and-tools---module-04)
+- [Agentic модул](#agentic-module---module-05)
+- [Протокол за контекст на модела (MCP)](#model-context-protocol-mcp---module-05)
+- [Azure услуги](#azure-services---module-01)
+- [Тестване и разработка](#testing-and-development---testing-guide)
Бърза справка за термини и понятия, използвани в целия курс.
## Основни понятия
-**AI агент** - Система, която използва AI за разсъждение и автономно действие. [Модул 04](../04-tools/README.md)
+**AI агент** - Система, която използва AI за автономно разсъждение и действие. [Модул 04](../04-tools/README.md)
-**Верига** - Последователност от операции, където изходът подава информация към следващата стъпка.
+**Верига** - Последователност от операции, където изходът на една стъпка е вход за следващата.
-**Разбиване на части** - Разделяне на документи на по-малки парчета. Обичайно: 300-500 токена с припокриване. [Модул 03](../03-rag/README.md)
+**Разделяне на части** - Разбиване на документи на по-малки парчета. Обичайно: 300-500 токена с припокриване. [Модул 03](../03-rag/README.md)
-**Контекст прозорец** - Максимален брой токени, които модел може да обработи. GPT-5.2: 400К токена (до 272К вход, 128К изход).
+**Контекстно окно** - Максимален брой токени, които моделът може да обработи. GPT-5.2: 400К токена (до 272К вход, 128К изход).
-**Вграждания** - Числови вектори, представящи значението на текста. [Модул 03](../03-rag/README.md)
+**Вграждания** - Числени вектори, които представят значението на текста. [Модул 03](../03-rag/README.md)
-**Извикване на функции** - Модел генерира структурирани заявки за извикване на външни функции. [Модул 04](../04-tools/README.md)
+**Извикване на функции** - Моделът генерира структуриран заявки за извикване на външни функции. [Модул 04](../04-tools/README.md)
-**Халюцинация** - Когато моделите генерират неверни, но правдоподобни информации.
+**Халюцинация** - Когато моделите генерират неправилна, но правдоподобна информация.
-**Подканване** - Текстов вход към езиков модел. [Модул 02](../02-prompt-engineering/README.md)
+**Подсказка** - Текстов вход за езиков модел. [Модул 02](../02-prompt-engineering/README.md)
**Семантично търсене** - Търсене по значение, използвайки вграждания, не ключови думи. [Модул 03](../03-rag/README.md)
-**Състояние със и без съхранение** - Без съхранение: без памет. Съхранение: поддържа история на разговора. [Модул 01](../01-introduction/README.md)
+**Състояние с/без памет** - Без памет: няма история. С памет: пази история на разговора. [Модул 01](../01-introduction/README.md)
-**Токени** - Основни текстови единици, които моделите обработват. Влияят на разходи и ограничения. [Модул 01](../01-introduction/README.md)
+**Токени** - Основни текстови единици, които моделите обработват. Влияят върху разходи и лимити. [Модул 01](../01-introduction/README.md)
-**Верига от инструменти** - Последователно изпълнение на инструменти, където изходът информира следващото извикване. [Модул 04](../04-tools/README.md)
+**Верижно използване на инструменти** - Последователно изпълнение на инструменти, където изходът информира следващото извикване. [Модул 04](../04-tools/README.md)
## Компоненти на LangChain4j
-**AiServices** - Създава тип-безопасни AI интерфейси за услуги.
+**AiServices** - Създава типово защитени интерфейси за AI услуги.
**OpenAiOfficialChatModel** - Унифициран клиент за модели на OpenAI и Azure OpenAI.
@@ -54,17 +54,17 @@
**ChatMemory** - Поддържа история на разговора.
-**ContentRetriever** - Намира релевантни парчета документи за RAG.
+**ContentRetriever** - Намира релевантни части от документи за RAG.
-**DocumentSplitter** - Разделя документи на парчета.
+**DocumentSplitter** - Разбива документи на части.
-**EmbeddingModel** - Преобразува текст в числови вектори.
+**EmbeddingModel** - Преобразува текст в числени вектори.
**EmbeddingStore** - Съхранява и извлича вграждания.
-**MessageWindowChatMemory** - Поддържа плъзгащ прозорец с последни съобщения.
+**MessageWindowChatMemory** - Поддържа плъзгащо окно с последните съобщения.
-**PromptTemplate** - Създава многократно използваеми подканвания с `{{variable}}` плейсхолдъри.
+**PromptTemplate** - Създава използваеми подсказки с плейсхолдъри `{{variable}}`.
**TextSegment** - Текстов сегмент с метаданни. Използва се в RAG.
@@ -72,161 +72,159 @@
**UserMessage / AiMessage / SystemMessage** - Типове съобщения в разговор.
-## AI/ML понятия
+## Понятия в AI/ML
-**Обучение с малко примери (Few-Shot Learning)** - Даване на примери в подканите. [Модул 02](../02-prompt-engineering/README.md)
+**Обучение с малко примери** - Даване на примери в подсказките. [Модул 02](../02-prompt-engineering/README.md)
-**Голям езиков модел (LLM)** - AI модели, обучени върху огромно количество текстови данни.
+**Голям езиков модел (LLM)** - AI модели, обучени на големи обеми текст.
**Усилие за разсъждение** - Параметър на GPT-5.2, контролиращ дълбочината на мислене. [Модул 02](../02-prompt-engineering/README.md)
-**Температура** - Контролира случайността на изхода. Ниска=детерминистичен, висока=креативен.
+**Температура** - Контролира случайност на изхода. Ниска=детерминирана, висока=креативна.
**Векторна база данни** - Специализирана база данни за вграждания. [Модул 03](../03-rag/README.md)
-**Обучение без примери (Zero-Shot Learning)** - Изпълнение на задачи без примери. [Модул 02](../02-prompt-engineering/README.md)
+**Обучение без примери** - Изпълнение на задачи без примери. [Модул 02](../02-prompt-engineering/README.md)
-## Гардрейли - [Модул 00](../00-quick-start/README.md)
+## Защитни механизми
-**Защита на множество нива** - Многостепенен подход към сигурността, комбиниращ гардрейли на приложенско ниво с филтри за безопасност на доставчика.
+**Защита на дълбочина** - Многослоен подход за сигурност, комбиниращ защитни механизми на приложението с филтри на доставчиците.
-**Твърдо блокиране** - Доставчикът връща грешка HTTP 400 при тежки нарушения на съдържанието.
+**Жестко блокиране** - Доставчик връща HTTP 400 грешка при тежки нарушения на съдържанието.
-**InputGuardrail** - Интерфейс в LangChain4j за валидиране на входа от потребителя преди да достигне LLM. Спестява разходи и латентност като блокира вредните подканвания рано.
+**InputGuardrail** - LangChain4j интерфейс за валидиране на входни данни от потребителя преди достигане до LLM. Пести разходи и забавяне, като спира вредни подсказки рано.
-**InputGuardrailResult** - Тип на връщана стойност при валидация на гардрейл: `success()` или `fatal("причина")`.
+**InputGuardrailResult** - Тип връщане за валидация: `success()` или `fatal("причина")`.
-**OutputGuardrail** - Интерфейс за валидиране на AI отговори преди връщането им към потребителите.
+**OutputGuardrail** - Интерфейс за валидиране на AI отговори преди връщане към потребители.
-**Филтри за безопасност на доставчика** - Вградени филтри за съдържание от AI доставчици (например GitHub Models), които хващат нарушения на API ниво.
+**Филтри за безопасност на доставчика** - Вградени филтри за съдържание от доставчици на AI (например Azure OpenAI), които засичат нарушения на ниво API.
-**Меко отказване** - Моделът любезно отказва да отговори без да хвърля грешка.
+**Меко отказване** - Моделът учтиво отказва да отговори без да връща грешка.
-## Примерно инженерство - [Модул 02](../02-prompt-engineering/README.md)
+## Инженерство на подсказки - [Модул 02](../02-prompt-engineering/README.md)
-**Верига на мисълта** - Стъпка по стъпка разсъждение за по-добра точност.
+**Веригата на мисълта** - Стъпка по стъпка разсъждение за по-добра точност.
-**Ограничен изход** - Налагане на специфичен формат или структура.
+**Ограничен изход** - Налагане на конкретен формат или структура.
-**Висока амбиция** - Шаблон на GPT-5.2 за задълбочено разсъждение.
+**Висока настойчивост** - Модел на GPT-5.2 за задълбочено разсъждение.
-**Ниска амбиция** - Шаблон на GPT-5.2 за бързи отговори.
+**Ниска настойчивост** - Модел на GPT-5.2 за бързи отговори.
-**Многоходов разговор** - Поддържане на контекста през обмените.
+**Разговор с множество ходове** - Поддържане на контекст през обмените.
-**Ролево подканване** - Настройване на персонажа на модела чрез системни съобщения.
+**Подсказване според ролята** - Задаване на персонаж на модела чрез системни съобщения.
**Саморефлексия** - Моделът оценява и подобрява своя изход.
-**Структурен анализ** - Фиксирана рамка за оценка.
+**Структуриран анализ** - Фиксирана рамка за оценяване.
-**Шаблон за изпълнение на задача** - Планиране → Изпълнение → Обобщаване.
+**Модел за изпълнение на задачи** - Планиране → Изпълнение → Обобщаване.
-## RAG (Генерация с подсилено извличане) - [Модул 03](../03-rag/README.md)
+## RAG (Генериране с извличане) - [Модул 03](../03-rag/README.md)
**Пайплайн за обработка на документи** - Зареждане → разделяне → вграждане → съхранение.
-**Вграждане в паметта** - Непостоянно съхранение за тестване.
+**In-Memory Embedding Store** - Неперсистентно хранилище за тестване.
-**RAG** - Комбинира извличането с генерация за по-задържани отговори.
+**RAG** - Комбинира извличане и генериране за обосновани отговори.
**Оценка за сходство** - Мярка (0-1) за семантична прилика.
**Източник на референция** - Метаданни за извлечено съдържание.
-## Агенти и Инструменти - [Модул 04](../04-tools/README.md)
+## Агенти и инструменти - [Модул 04](../04-tools/README.md)
-**@Tool анотация** - Маркира Java методи като AI-извиквани инструменти.
+**@Tool Аннотация** - Маркира Java методи като AI-инструменти.
-**ReAct шаблон** - Разсъждение → Действие → Наблюдение → Повторение.
+**ReAct модел** - Разсъждение → Действие → Наблюдение → Повторение.
**Управление на сесии** - Отделни контексти за различни потребители.
**Инструмент** - Функция, която AI агент може да извика.
-**Описание на инструмента** - Документация на предназначението и параметрите.
+**Описание на инструмент** - Документация за цел и параметри на инструмента.
-## Агентски модул - [Модул 05](../05-mcp/README.md)
+## Agentic модул - [Модул 05](../05-mcp/README.md)
-**@Agent анотация** - Маркира интерфейси като AI агенти с декларативно определение на поведението.
+**@Agent Аннотация** - Маркира интерфейси като AI агенти с декларативно дефиниране на поведение.
-**Agent Listener** - Захват за наблюдение на изпълнението на агента чрез `beforeAgentInvocation()` и `afterAgentInvocation()`.
+**Agent Listener** - Прикачване за наблюдение на изпълнението на агента чрез `beforeAgentInvocation()` и `afterAgentInvocation()`.
-**Agentic обхват** - Споделена памет, където агентите съхраняват изходи с `outputKey` за консуматори.
+**Agentic Scope** - Споделена памет, където агентите съхраняват изходите с `outputKey`, които други агенти използват.
**AgenticServices** - Фабрика за създаване на агенти чрез `agentBuilder()` и `supervisorBuilder()`.
-**Условен поток на работа** - Маршрутизиране по условия към различни специализирани агенти.
+**Условен работен поток** - Рутинг към различни специализирани агенти според условия.
-**Човек във веригата** - Шаблон на работа с добавяне на човешки контролни точки за одобрение или преглед на съдържанието.
+**Човек в цикъла** - Модел за работен поток, добавящ човешки проверки за одобрение или преглед на съдържание.
-**langchain4j-agentic** - Maven зависимост за декларативно изграждане на агенти (експериментален).
+**langchain4j-agentic** - Maven зависимост за декларативно изграждане на агенти (експериментална).
-**Цикличен поток на работа** - Итеративно изпълнение на агент до постигане на условие (например оценка за качество ≥ 0.8).
+**Цикличен работен поток** - Итеративно изпълнение на агент докато условие не е изпълнено (напр. оценка ≥ 0.8).
-**outputKey** - Параметър в анотация на агент, указващ къде се съхраняват резултатите в Agentic обхвата.
+**outputKey** - Параметър на анотация Agent, указващ къде се съхраняват резултатите в Agentic Scope.
-**Паралелен поток на работа** - Изпълнение на няколко агента паралелно за независими задачи.
+**Паралелен работен поток** - Пуска няколко агента едновременно за независими задачи.
-**Стратегия за отговор** - Как супервайзор формулира крайния отговор: ПОСЛЕДЕН, ОБОБЩЕНИЕ или ОЦЕНЕН.
+**Стратегия за отговор** - Как супервайзорът формулира окончателния отговор: LAST, SUMMARY или SCORED.
-**Последователен поток на работа** - Изпълнение на агенти подред, където изхода тече към следващата стъпка.
+**Последователен работен поток** - Изпълнение на агенти последователно, с подаване на изхода към следващия.
-**Шаблон за супервизионен агент** - Напреднал агентски шаблон, при който супервайзор LLM динамично решава кои подагенти да извика.
+**Supervisor Agent Pattern** - Разширен патърн, при който супервайзор LLM динамично решава кои подагенти да извика.
## Протокол за контекст на модела (MCP) - [Модул 05](../05-mcp/README.md)
**langchain4j-mcp** - Maven зависимост за интеграция на MCP в LangChain4j.
-**MCP** - Протокол за контекст на модела: стандарт за свързване на AI приложения с външни инструменти. Сглоби веднъж, използвай навсякъде.
+**MCP** - Протокол за контекст на модела: стандарт за свързване на AI приложения с външни инструменти. Изграждаш веднъж, ползваш навсякъде.
-**MCP клиент** - Приложение, което се свързва с MCP сървъри за да открива и използва инструменти.
+**MCP клиент** - Приложение, което се свързва към MCP сървъри за откриване и използване на инструменти.
-**MCP сървър** - Услуга, която излага инструменти чрез MCP с ясни описания и схеми на параметрите.
+**MCP сървър** - Услуга, която предлага инструменти през MCP с ясни описания и параметърни схеми.
**McpToolProvider** - Компонент на LangChain4j, който опакова MCP инструменти за използване в AI услуги и агенти.
-**McpTransport** - Интерфейс за MCP комуникация. Имплементации включват Stdio и HTTP.
+**McpTransport** - Интерфейс за комуникация по MCP. Изпълнения: Stdio и HTTP.
-**Stdio Транспорт** - Локален транспорт през stdin/stdout. Полезен за достъп до файловата система или командни инструменти.
+**Stdio транспорт** - Локален процесен транспорт през stdin/stdout. Полезно за достъп до файлова система или командни инструменти.
-**StdioMcpTransport** - Имплементация в LangChain4j, която стартира MCP сървър като подпроцес.
+**StdioMcpTransport** - LangChain4j изпълнение, което стартира MCP сървър като подпроцес.
-**Откриване на инструменти** - Клиентът пита сървъра за наличните инструменти с описания и схеми.
+**Откриване на инструменти** - Клиентската заявка към сървъра за налични инструменти с описания и схеми.
## Azure услуги - [Модул 01](../01-introduction/README.md)
**Azure AI Search** - Облачна търсачка с векторни възможности. [Модул 03](../03-rag/README.md)
-**Azure Developer CLI (azd)** - Разгръща Azure ресурси.
+**Azure Developer CLI (azd)** - Инструмент за разгръщане на Azure ресурси.
-**Azure OpenAI** - Предприятен AI сервис на Microsoft.
+**Azure OpenAI** - Предприятелска AI услуга на Microsoft.
-**Bicep** - Език за инфраструктура като код в Azure. [Ръководство за инфраструктура](../01-introduction/infra/README.md)
+**Bicep** - Език за инфраструктура като код на Azure. [Инфраструктурно ръководство](../01-introduction/infra/README.md)
**Име на разгръщане** - Име за разгръщане на модел в Azure.
-**GPT-5.2** - Най-нов модел на OpenAI с контрол на разсъждението. [Модул 02](../02-prompt-engineering/README.md)
+**GPT-5.2** - Най-нов модел на OpenAI с контрол на разсъжденията. [Модул 02](../02-prompt-engineering/README.md)
## Тестване и разработка - [Ръководство за тестване](TESTING.md)
**Dev Container** - Контейнеризирана среда за разработка. [Конфигурация](../../../.devcontainer/devcontainer.json)
-**GitHub модели** - Безплатен AI модел за експериментиране. [Модул 00](../00-quick-start/README.md)
-
-**Тестване в паметта** - Тестване с използване на памет за съхранение.
+**Тестване с памет в процеса** - Тестване с in-memory сторидж.
**Интеграционно тестване** - Тестване с реална инфраструктура.
-**Maven** - Инструмент за автоматизация на компилация на Java.
+**Maven** - Инструмент за автоматизация на Java сборки.
-**Mockito** - Фреймуърк за мокване в Java.
+**Mockito** - Java framework за мока.
-**Spring Boot** - Фреймуърк за Java приложения. [Модул 01](../01-introduction/README.md)
+**Spring Boot** - Java платформа за приложения. [Модул 01](../01-introduction/README.md)
---
**Отказ от отговорност**:
-Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
+Този документ е преведен с помощта на AI преводачески услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
\ No newline at end of file
diff --git a/translations/bg/docs/TESTING.md b/translations/bg/docs/TESTING.md
index f09611510..0c800bbea 100644
--- a/translations/bg/docs/TESTING.md
+++ b/translations/bg/docs/TESTING.md
@@ -1,16 +1,16 @@
-# Тестове на приложения LangChain4j
+# Тестване на приложения LangChain4j
## Съдържание
-- [Бърз старт](../../../docs)
-- [Какво покриват тестовете](../../../docs)
-- [Изпълнение на тестовете](../../../docs)
-- [Изпълнение на тестове в VS Code](../../../docs)
-- [Тестови модели](../../../docs)
-- [Философия на тестване](../../../docs)
-- [Следващи стъпки](../../../docs)
+- [Бърз старт](#бърз-старт)
+- [Какво покриват тестовете](#какво-покриват-тестовете)
+- [Стартиране на тестовете](#стартиране-на-тестовете)
+- [Стартиране на тестове в VS Code](#стартиране-на-тестове-в-vs-code)
+- [Патерни за тестване](#патерни-за-тестване)
+- [Философия на тестването](#философия-на-тестването)
+- [Следващи стъпки](#следващи-стъпки)
-Това ръководство ви показва тестовете, които демонстрират как да тествате AI приложения без нужда от API ключове или външни услуги.
+Този наръчник ви води през тестовете, които демонстрират как да тествате AI приложения без нужда от API ключове или външни услуги.
## Бърз старт
@@ -26,32 +26,31 @@ mvn test
mvn --% test
```
-Когато всички тестове преминат, трябва да видите изход като този на екрана по-долу — тестовете стартират без нито една грешка.
+Когато всички тестове преминат, трябва да видите изход подобен на екрана по-долу – тестовете се изпълняват без грешки.
-*Успешно изпълнение на тестове, показващо всички тестове с нулеви грешки*
+*Успешно изпълнение на тестовете показва всички тестове с нулеви грешки*
## Какво покриват тестовете
-Този курс се фокусира върху **униктестове**, които се изпълняват локално. Всеки тест демонстрира конкретна концепция на LangChain4j поотделно. Тестовата пирамида по-долу показва къде се вписват униктестовете — те формират бързата, надеждна основа, върху която се градят останалите тестови стратегии.
+Този курс се фокусира върху **юнит тестове**, които се изпълняват локално. Всеки тест демонстрира конкретна концепция на LangChain4j изолирано. Пирамидата на тестване по-долу показва къде се вписват юнит тестовете — те образуват бързата и надеждна основа, върху която се гради останалата част от стратегията за тестване.
-*Тестова пирамида, показваща баланса между униктестове (бързи, изолирани), интеграционни тестове (реални компоненти) и end-to-end тестове. Това обучение обхваща униктестове.*
+*Пирамида на тестването показва баланса между юнит тестове (бързи, изолирани), интеграционни тестове (реални компоненти) и end-to-end тестове. Това обучение покрива юнит тестване.*
-| Модул | Тестове | Фокус | Основни файлове |
+| Модул | Тестове | Фокус | Ключови файлове |
|--------|-------|-------|-----------|
-| **00 - Бърз старт** | 6 | Шаблони на подканите и заместване на променливи | `SimpleQuickStartTest.java` |
-| **01 - Въведение** | 8 | Памет за разговори и потребителски чат със състояние | `SimpleConversationTest.java` |
-| **02 - Проектиране на подканите** | 12 | Модели GPT-5.2, нива на ентусиазъм, структурирана изходна информация | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | Въвеждане на документи, ембединг, търсене по сходство | `DocumentServiceTest.java` |
+| **01 - Въведение** | 8 | Памет за разговор и състояние на чат | `SimpleConversationTest.java` |
+| **02 - Проектиране на подсказки** | 12 | GPT-5.2 патерни, нива на желаност, структурирано изходно съдържание | `SimpleGpt5PromptTest.java` |
+| **03 - RAG** | 10 | Въвеждане на документи, embeddings, търсене по сходство | `DocumentServiceTest.java` |
| **04 - Инструменти** | 12 | Извикване на функции и свързване на инструменти | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | Протокол за моделния контекст с stdio транспорт | `SimpleMcpTest.java` |
+| **05 - MCP** | 8 | Протокол за контекст на модел с Stdio транспорт | `SimpleMcpTest.java` |
-## Изпълнение на тестовете
+## Стартиране на тестовете
-**Стартирайте всички тестове от корена:**
+**Стартирайте всички тестове от основната директория:**
**Bash:**
```bash
@@ -79,7 +78,7 @@ cd 01-introduction; mvn --% test
mvn --% test -pl 01-introduction
```
-**Стартиране само на един тестов клас:**
+**Стартиране на единичен тестов клас:**
**Bash:**
```bash
@@ -91,45 +90,45 @@ mvn test -Dtest=SimpleConversationTest
mvn --% test -Dtest=SimpleConversationTest
```
-**Стартиране само на определен тестов метод:**
+**Стартиране на конкретен тестов метод:**
**Bash:**
```bash
-mvn test -Dtest=SimpleConversationTest#трябва да се поддържа история на разговора
+mvn test -Dtest=SimpleConversationTest#трябваДаСеПоддържаИсторияНаРазговорите
```
**PowerShell:**
```powershell
-mvn --% test -Dtest=SimpleConversationTest#трябва да се запази историята на разговора
+mvn --% test -Dtest=SimpleConversationTest#трябва да се поддържа история на разговора
```
-## Изпълнение на тестове в VS Code
+## Стартиране на тестове в VS Code
-Ако използвате Visual Studio Code, Test Explorer осигурява графичен интерфейс за стартиране и дебъгване на тестове.
+Ако използвате Visual Studio Code, Test Explorer предоставя графичен интерфейс за стартиране и отстраняване на грешки в тестовете.
-*VS Code Test Explorer, показващ дървото с всички Java тестови класове и отделните тестови методи*
+*Test Explorer на VS Code показва дървото на тестовете с всички Java тестови класове и индивидуални тестови методи*
**За да стартирате тестове в VS Code:**
-1. Отворете Test Explorer, като кликнете върху иконата с епруветка в лентата с активности
-2. Разгънете тестовото дърво, за да видите всички модули и тестови класове
-3. Натиснете бутона за пускане до всеки тест, за да го стартирате поотделно
-4. Натиснете "Run All Tests", за да изпълните целия комплект
-5. Кликнете с десен бутон върху тест и изберете "Debug Test", за да зададете точки на прекъсване и стъпите през кода
+1. Отворете Test Explorer, като кликнете върху иконата на химикалка в лентата с активности
+2. Разгънете дървото с тестове, за да видите всички модули и тестови класове
+3. Кликнете бутона за пускане до всеки тест, за да го стартирате индивидуално
+4. Кликнете "Run All Tests", за да изпълните всички тестове
+5. Щракнете с десен бутон върху тест и изберете "Debug Test", за да зададете прекъсвания и да стъпвате през кода
-Test Explorer показва зелени отметки за успешни тестове и предоставя подробни съобщения при неуспех.
+Test Explorer показва зелени отметки за преминали тестове и дава подробни съобщения за грешки при неуспешни тестове.
-## Тестови модели
+## Патерни за тестване
-### Модел 1: Тестване на шаблони за подканите
+### Патерн 1: Тестване на шаблони за подсказки
-Най-простият модел тества шаблони за подканите без извикване на AI модел. Проверявате дали заместването на променливите работи правилно и дали подканите са форматирани както се очаква.
+Най-простият патерн тества шаблони за подсказки, без да извиква AI модел. Потвърждавате, че заместването на променливи работи правилно и подсказките са форматирани както се очаква.
-*Тестване на шаблони за подканите, показващо процеса на заместване на променливите: шаблон с плейсхолдъри → прилагане на стойности → проверка на форматирания изход*
+*Тестване на шаблони за подсказки показва поток на заместване на променливи: шаблон с плейсхолдъри → приложени стойности → проверен форматиран изход*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-Този тест е в `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
+Този патерн потвърждава, че заместването на променливи работи правилно и подсказките са форматирани както се очаква — не се изисква API ключ или извикване на модел.
-**Стартирайте го:**
+### Патерн 2: Мокване на езикови модели
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#форматиране на тестов шаблон за подкана
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#тестване на форматирането на шаблона на подканата
-```
-
-### Модел 2: Симулиране на езикови модели
-
-При тестване на логиката на разговор използвайте Mockito за създаване на фалшиви модели, които връщат предварително определени отговори. Това прави тестовете бързи, безплатни и детерминирани.
+При тестване на логиката на разговор използвайте Mockito за създаване на фалшиви модели, които връщат предварително зададени отговори. Това прави тестовете бързи, безплатни и детерминистични.
-*Сравнение, което показва защо симулациите са предпочитани за тестване: те са бързи, безплатни, детерминирани и не изискват API ключове*
+*Сравнение показва защо моковете са предпочитани за тестване: те са бързи, безплатни, детерминистични и не изискват API ключове*
```java
@ExtendWith(MockitoExtension.class)
@@ -213,20 +200,20 @@ class SimpleConversationTest {
conversationService.chat(conversationId, "Third message");
List history = conversationService.getHistory(conversationId);
- assertThat(history).hasSize(6); // 3 съобщения от потребител + 3 съобщения от изкуствен интелект
+ assertThat(history).hasSize(6); // 3 съобщения от потребител + 3 съобщения от AI
}
}
```
-Този модел се използва в `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Симулаторът гарантира последователно поведение, така че да може да проверите дали управлението на паметта работи правилно.
+Този патерн се среща в `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Мокът гарантира последователно поведение, за да може да проверите, че управлението на паметта работи правилно.
-### Модел 3: Тестване на изолацията на разговори
+### Патерн 3: Тестване на изолацията на разговора
-Паметта за разговори трябва да държи потребителите отделно. Този тест проверява, че разговорите не смесват контексти.
+Паметта за разговор трябва да поддържа отделни масиви за множество потребители. Този тест потвърждава, че разговорите не смесват контексти.
-*Тестване на изолацията на разговори, показващо отделни хранилища за памет за различни потребители, за да се предотврати смесването на контексти*
+*Тестване на изолацията на разговора показва отделни хранилища за памет за различни потребители, за да се предотврати смесването на контексти*
```java
@Test
@@ -250,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-Всеки разговор поддържа своя самостоятелна история. В производствени системи тази изолация е критична за приложения с много потребители.
+Всеки разговор поддържа собствена независима история. В производствени системи тази изолация е критична за многопотребителски приложения.
-### Модел 4: Тестване на инструменти поотделно
+### Патерн 4: Самостоятелно тестване на инструменти
-Инструментите са функции, които AI може да извиква. Тествайте ги директно, за да се уверите, че работят правилно независимо от решенията на AI.
+Инструментите са функции, които AI може да извика. Тествайте ги директно, за да сте сигурни, че работят правилно независимо от решенията на AI.
-*Тестване на инструменти поотделно, показващо изпълнението на симулирани инструменти без извиквания към AI за проверка на бизнес логиката*
+*Самостоятелно тестване на инструменти показва изпълнение на мок инструменти без AI извиквания, за да се валидира бизнес логиката*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-Тези тестове от `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` валидират логиката на инструментите без участие на AI. Примерът с веригата показва как изходът на един инструмент се използва като вход за друг.
+Тези тестове от `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` валидират логиката на инструментите без AI включване. Примерът с веригата показва как изходът на един инструмент се подава като вход на друг.
-### Модел 5: Тестване на RAG в паметта
+### Патерн 5: Тестване на RAG в паметта
-RAG системите традиционно изискват векторни бази данни и embedding услуги. Моделът в паметта ви позволява да тествате цялата конвейерна линия без външни зависимости.
+Системите RAG обикновено изискват векторни бази данни и embedding услуги. Патернът в паметта ви позволява да тествате цялата верига без външни зависимости.
-*Техника за тестване на RAG в паметта, показваща парсване на документи, съхранение на ембединг и търсене по сходство без необходимост от база данни*
+*Работен процес на тестване на RAG в паметта, показващ парсване на документи, съхранение на embeddings и търсене по сходство без нужда от база данни*
```java
@Test
@@ -306,11 +293,11 @@ void testProcessTextDocument() {
}
```
-Този тест от `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` създава документ в паметта и проверява раздробяването му и обработката на метаданни.
+Този тест от `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` създава документ в паметта и проверява разбиването на части и обработката на метаданни.
-### Модел 6: Интеграционно тестване на MCP
+### Патерн 6: Интеграционно тестване на MCP
-MCP модулът тества интеграцията на Model Context Protocol с използване на stdio транспорт. Тези тестове проверяват дали вашето приложение може да стартира и комуникира с MCP сървъри като подпроцеси.
+Модулът MCP тества интеграцията на Протокола за контекст на модел с помощта на stdio транспорт. Тези тестове потвърждават, че вашето приложение може да стартира и комуникира с MCP сървъри като подпроцеси.
Тестовете в `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` валидират поведението на MCP клиента.
@@ -326,38 +313,37 @@ cd 05-mcp && mvn test
cd 05-mcp; mvn --% test
```
-## Философия на тестване
+## Философия на тестването
-Тествайте вашия код, а не AI-то. Вашите тестове трябва да валидират кода, който пишете, чрез проверка как са построени подканите, как се управлява паметта и как се изпълняват инструментите. Отговорите на AI варират и не трябва да са част от твърденията на тестовете. Запитайте се дали вашият шаблон за подканата правилно замества променливите, а не дали AI-то дава правилен отговор.
+Тествайте вашия код, не AI. Вашите тестове трябва да валидират кода, който пишете, като проверяват как са конструирани подсказките, как се управлява паметта и как се изпълняват инструментите. Отговорите на AI варират и не трябва да бъдат част от твърденията в тестовете. Попитайте се дали вашият шаблон за подсказка правилно замества променливите, а не дали AI дава правилния отговор.
-Използвайте симулатори за езикови модели. Те са външни зависимости, които са бавни, скъпи и недетерминирани. Симулирането прави тестовете бързи с милисекунди вместо секунди, безплатни с нулеви API разходи и детерминирани с един и същ резултат всеки път.
+Използвайте мокове за езиковите модели. Те са външни зависимости, които са бавни, скъпи и недетерминистични. Мокването прави тестовете бързи с милисекунди вместо секунди, безплатни без разходи за API и детерминистични с един и същ резултат всеки път.
-Дръжте тестовете независими. Всеки тест трябва да създава собствените си данни, да не разчита на други тестове и да се почиства след себе си. Тестовете трябва да преминават независимо от реда на изпълнение.
+Дръжте тестовете независими. Всеки тест трябва да създава собствените си данни, да не разчита на други тестове и да се почиства след себе си. Тестовете трябва да минават независимо от реда на изпълнение.
-Тествайте краените случаи извън щастливия път. Опитайте с празни входове, много големи входове, специални символи, невалидни параметри и гранични условия. Те често разкриват бъгове, които не се появяват при нормално ползване.
+Тествайте крайни случаи извън успешния път. Пробвайте празни входове, много големи входове, специални символи, невалидни параметри и гранични условия. Те често разкриват бъгове, които нормалната употреба не показва.
-Използвайте описателни имена. Сравнете `shouldMaintainConversationHistoryAcrossMultipleMessages()` с `test1()`. Първото казва точно какво се тества, което улеснява намирането на грешки.
+Използвайте описателни имена. Сравнете `shouldMaintainConversationHistoryAcrossMultipleMessages()` с `test1()`. Първото ви казва точно какво се тества, което прави отстраняването на грешки много по-лесно.
## Следващи стъпки
-Сега, когато разбирате тестовите модели, потопете се по-дълбоко във всеки модул:
+Сега, когато разбирате патерните за тестване, навлезте по-дълбоко във всеки модул:
-- **[00 - Бърз старт](../00-quick-start/README.md)** - Започнете с основите на шаблоните за подканите
-- **[01 - Въведение](../01-introduction/README.md)** - Научете управлението на паметта за разговори
-- **[02 - Проектиране на подканите](../02/prompt-engineering/README.md)** - Овладейте моделите за подканите на GPT-5.2
-- **[03 - RAG](../03-rag/README.md)** - Изградете системи за генерация с повишаване чрез извличане
+- **[01 - Въведение](../01-introduction/README.md)** - Научете управление на паметта за разговори
+- **[02 - Проектиране на подсказки](../02/prompt-engineering/README.md)** - Овладейте патерните за подсказки на GPT-5.2
+- **[03 - RAG](../03-rag/README.md)** - Строите системи за генериране с помощта на извличане
- **[04 - Инструменти](../04-tools/README.md)** - Имплементирайте извикване на функции и вериги от инструменти
-- **[05 - MCP](../05-mcp/README.md)** - Интегрирайте Model Context Protocol
+- **[05 - MCP](../05-mcp/README.md)** - Интегрирайте Протокола за контекст на модел
-README файловете на всеки модул съдържат подробни обяснения на концепциите, тествани тук.
+README файловете на всеки модул предоставят подробни обяснения на концепциите, тестващи се тук.
---
-**Навигация:** [← Обратно към главната](../README.md)
+**Навигация:** [← Обратно към Основната страница](../README.md)
---
-**Отказ от отговорност**:
-Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за никакви недоразумения или погрешни тълкувания, произтичащи от използването на този превод.
+**Отказ от отговорност**:
+Този документ е преведен с помощта на AI преводачески услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
\ No newline at end of file
diff --git a/translations/bn/.co-op-translator.json b/translations/bn/.co-op-translator.json
index 4c832b8dc..e720d36c3 100644
--- a/translations/bn/.co-op-translator.json
+++ b/translations/bn/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "bn"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-02T20:55:07+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T13:09:37+00:00",
"source_file": "01-introduction/README.md",
"language_code": "bn"
},
@@ -18,20 +18,20 @@
"language_code": "bn"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-02T20:59:44+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T13:03:54+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "bn"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-02T21:01:50+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T13:08:29+00:00",
"source_file": "03-rag/README.md",
"language_code": "bn"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T10:56:13+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T13:06:47+00:00",
"source_file": "04-tools/README.md",
"language_code": "bn"
},
@@ -54,8 +54,8 @@
"language_code": "bn"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T15:46:48+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T13:02:08+00:00",
"source_file": "README.md",
"language_code": "bn"
},
@@ -72,14 +72,14 @@
"language_code": "bn"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-02T21:06:36+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T13:04:33+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "bn"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-02T21:07:35+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T13:05:13+00:00",
"source_file": "docs/TESTING.md",
"language_code": "bn"
}
diff --git a/translations/bn/00-quick-start/README.md b/translations/bn/00-quick-start/README.md
deleted file mode 100644
index bbbd944ad..000000000
--- a/translations/bn/00-quick-start/README.md
+++ /dev/null
@@ -1,388 +0,0 @@
-# মডিউল ০০: দ্রুত শুরু
-
-## বিষয়সূচি
-
-- [পরিচিতি](#পরিচিতি)
-- [LangChain4j কী?](#langchain4j-কী)
-- [LangChain4j নির্ভরশীলতা](#langchain4j-নির্ভরশীলতা)
-- [প্রয়োজনীয়তা](#প্রয়োজনীয়তা)
-- [সেটআপ](#সেটআপ)
- - [১. আপনার GitHub টোকেন পান](#১-আপনার-github-টোকেন-পান)
- - [২. আপনার টোকেন সেট করুন](#২-আপনার-টোকেন-সেট-করুন)
-- [উদাহরণ চালান](#উদাহরণ-চালান)
- - [১. বেসিক চ্যাট](#১-বেসিক-চ্যাট)
- - [২. প্রম্পট প্যাটার্ন](#২-প্রম্পট-প্যাটার্ন)
- - [৩. ফাংশন কলিং](#৩-ফাংশন-কলিং)
- - [৪. ডকুমেন্ট প্রশ্নোত্তর (সহজ RAG)](#৪-ডকুমেন্ট-প্রশ্নোত্তর-সহজ-rag)
- - [৫. দায়িত্বশীল AI](#৫-দায়িত্বশীল-ai)
-- [প্রতিটি উদাহরণ কী দেখায়](#প্রতিটি-উদাহরণ-কী-দেখায়)
-- [পরবর্তী ধাপ](#পরবর্তী-ধাপ)
-- [সমস্যা সমাধান](#সমস্যা-সমাধান)
-
-## পরিচিতি
-
-এই দ্রুতশুরুর উদ্দেশ্য হল LangChain4j দিয়ে যত দ্রুত সম্ভব শুরু করতে সাহায্য করা। এটি LangChain4j এবং GitHub মডেল ব্যবহার করে AI অ্যাপ্লিকেশন তৈরির মৌলিক বিষয়গুলো কভার করে। পরবর্তী মডিউলগুলোতে আপনি Azure OpenAI এবং GPT-5.2 এ বদল করবেন এবং প্রতিটি ধারণায় আরও গভীরভাবে প্রবেশ করবেন।
-
-## LangChain4j কী?
-
-LangChain4j একটি জাভা লাইব্রেরি যা AI চালিত অ্যাপ্লিকেশন তৈরি করা সহজ করে তোলে। HTTP ক্লায়েন্ট এবং JSON পার্সিং নিয়ে কাজ করার পরিবর্তে আপনি পরিষ্কার জাভা API ব্যবহার করেন।
-
-LangChain এ "চেইন" বলতে একাধিক কম্পোনেন্ট একসাথে যুক্ত করা বোঝায় - আপনি একটি প্রম্পটকে একটি মডেল বা পার্সারের সাথে চেইন করতে পারেন, অথবা একাধিক AI কল একত্র করে একটির আউটপুট অন্যটির ইনপুট হিসেবে ব্যবহার করতে পারেন। এই দ্রুতশুরু মৌলিক বিষয়গুলোর উপর গুরুত্ব দেয়, জটিল চেইনগুলো অনুসন্ধানের আগে।
-
-
-
-*LangChain4j-এর কম্পোনেন্ট চেইনিং - ব্লকগুলো যুক্ত হয়ে শক্তিশালী AI ওয়ার্কফ্লো নির্মাণ করে*
-
-আমরা তিনটি প্রধান কম্পোনেন্ট ব্যবহার করব:
-
-**ChatModel** - AI মডেল ইন্টারঅ্যাকশনের ইন্টারফেস। `model.chat("prompt")` কল করুন এবং একটি রেসপন্স স্ট্রিং পান। আমরা `OpenAiOfficialChatModel` ব্যবহার করি যা OpenAI-সঙ্গতিপূর্ণ এন্ডপয়েন্ট যেমন GitHub মডেলগুলোর সাথে কাজ করে।
-
-**AiServices** - টাইপ-সেফ AI সার্ভিস ইন্টারফেস তৈরি করে। মেথডগুলো ডিফাইন করুন, `@Tool` দিয়ে অ্যানোটেট করুন, LangChain4j সংগঠন পরিচালনা করে। AI প্রয়োজন হলে আপনার জাভা মেথডগুলো স্বয়ংক্রিয়ভাবে কল করে।
-
-**MessageWindowChatMemory** - কথোপকথনের ইতিহাস সংরক্ষণ করে। এটা না থাকলে প্রতিটি অনুরোধ স্বতন্ত্র থাকে। এটা থাকলে AI পূর্ববর্তী মেসেজ মনে রাখে এবং একাধিক রাউন্ডের মধ্যে প্রসঙ্গ বজায় রাখে।
-
-
-
-*LangChain4j আর্কিটেকচার - মূল কম্পোনেন্টগুলো একসাথে কাজ করে আপনার AI অ্যাপ্লিকেশন চালায়*
-
-## LangChain4j নির্ভরশীলতা
-
-এই দ্রুতশুরুতে তিনটি Maven নির্ভরশীলতা ব্যবহার করা হয়েছে [`pom.xml`](../../../00-quick-start/pom.xml) এ:
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-`langchain4j-open-ai-official` মডিউলটি `OpenAiOfficialChatModel` ক্লাস সরবরাহ করে যা OpenAI-সঙ্গতিপূর্ণ API-তে সংযোগ করে। GitHub মডেল একই API ফরম্যাট ব্যবহার করে, তাই কোনো বিশেষ অ্যাডাপ্টারের দরকার নেই - শুধু বেস URL `https://models.github.ai/inference` এ পয়েন্ট করুন।
-
-`langchain4j-easy-rag` মডিউলটি স্বয়ংক্রিয় ডকুমেন্ট বিভাজন, এমবেডিং এবং অনুসন্ধান সরবরাহ করে যাতে আপনি ম্যানুয়ালি প্রতিটি ধাপ কনফিগার না করেই RAG অ্যাপ্লিকেশন তৈরি করতে পারেন।
-
-## প্রয়োজনীয়তা
-
-**ডেভ কন্টেনার ব্যবহার করছেন?** Java এবং Maven আগ থেকেই ইনস্টল করা আছে। শুধু একটি GitHub পার্সোনাল অ্যাক্সেস টোকেনের দরকার।
-
-**লোকাল ডেভেলপমেন্ট:**
-- Java 21+, Maven 3.9+
-- GitHub পার্সোনাল অ্যাক্সেস টোকেন (নির্দেশনা নিচে)
-
-> **বি:দ্রঃ** এই মডিউল GitHub মডেলের `gpt-4.1-nano` ব্যবহার করে। কোডে মডেল নাম পরিবর্তন করবেন না - এটি GitHub-এর উপলব্ধ মডেলের সাথে কাজ করার জন্য কনফিগার করা হয়েছে।
-
-## সেটআপ
-
-### ১. আপনার GitHub টোকেন পান
-
-1. যান [GitHub Settings → Personal Access Tokens](https://github.com/settings/personal-access-tokens)
-2. "Generate new token" ক্লিক করুন
-3. বর্ণনামূলক নাম দিন (যেমন, "LangChain4j Demo")
-4. মেয়াদ নির্ধারণ করুন (৭ দিন সুপারিশ করা হয়)
-5. "Account permissions" এর নিচে "Models" খুঁজে সেট করুন "Read-only"
-6. "Generate token" ক্লিক করুন
-7. আপনার টোকেন কপি করে সংরক্ষণ করুন - এটি আবার দেখা যাবে না
-
-### ২. আপনার টোকেন সেট করুন
-
-**অপশন ১: VS Code ব্যবহার (সর্বোত্তম)**
-
-আপনি যদি VS Code ব্যবহার করেন, তাহলে প্রকল্পের মূল ফোল্ডারে `.env` ফাইলে আপনার টোকেন যোগ করুন:
-
-যদি `.env` ফাইল না থাকে, `.env.example` থেকে কপি করে `.env` তৈরি করুন অথবা নতুন `.env` ফাইল তৈরি করুন।
-
-**উদাহরণ `.env` ফাইল:**
-```bash
-# /workspaces/LangChain4j-for-Beginners/.env এ
-GITHUB_TOKEN=your_token_here
-```
-
-এরপর ব্যবসেব হালকা ডেমো ফাইল (যেমন `BasicChatDemo.java`) এর উপর রাইট-ক্লিক করে **"Run Java"** নির্বাচন করুন অথবা Run and Debug প্যানেল থেকে লঞ্চ কনফিগারেশন ব্যবহার করুন।
-
-**অপশন ২: টার্মিনাল ব্যবহার করুন**
-
-টোকেনকে পরিবেশ ভেরিয়েবল হিসেবে সেট করুন:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## উদাহরণ চালান
-
-**VS Code ব্যবহার:** ব্যবসেব হালকা ডেমো ফাইলের ওপর রাইট-ক্লিক করে **"Run Java"** নির্বাচন করুন অথবা Run and Debug প্যানেল থেকে লঞ্চ কনফিগারেশন ব্যবহার করুন (আদ্যপর্যন্ত আপনার টোকেন `.env` ফাইলে যোগ করা রয়েছে কিনা নিশ্চিত করুন)।
-
-**Maven ব্যবহার:** বিকল্প হিসেবে, কমান্ড লাইন থেকে চালাতে পারেন:
-
-### ১. বেসিক চ্যাট
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### ২. প্রম্পট প্যাটার্ন
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-জিরো-শট, ফিউ-শট, চেইন-অফ-থট এবং রোল-ভিত্তিক প্রম্পটিং দেখানো হয়েছে।
-
-### ৩. ফাংশন কলিং
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-AI যেকোনো সময় আপনার জাভা মেথডগুলো স্বয়ংক্রিয়ভাবে কল করে।
-
-### ৪. ডকুমেন্ট প্রশ্নোত্তর (সহজ RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-সহজ RAG ব্যবহার করে স্বয়ংক্রিয় এমবেডিং এবং পুনরুদ্ধারের মাধ্যমে আপনার ডকুমেন্ট সম্পর্কে প্রশ্ন করুন।
-
-### ৫. দায়িত্বশীল AI
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-কীভাবে AI নিরাপত্তা ফিল্টার ক্ষতিকর সামগ্রী ব্লক করে দেখুন।
-
-## প্রতিটি উদাহরণ কী দেখায়
-
-**বেসিক চ্যাট** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-এখান থেকেই LangChain4j এর সবচেয়ে সহজ রূপ দেখুন। আপনি `OpenAiOfficialChatModel` তৈরি করবেন, `.chat()` দিয়ে একটি প্রম্পট পাঠাবেন, এবং উত্তর পাবেন। এটি দেখায় কিভাবে কাস্টম এন্ডপয়েন্ট এবং API কী দিয়ে মডেল ইনিশিয়ালাইজ করবেন। যখন আপনি এই প্যাটার্ন বুঝবেন, তখন বাকিটা সহজ।
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 GitHub Copilot-এর সাথে চেষ্টা করুন:** [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) খুলুন এবং জিজ্ঞাসা করুন:
-> - "এই কোডে GitHub মডেল থেকে Azure OpenAI কিভাবে সুইচ করবো?"
-> - "OpenAiOfficialChatModel.builder() এ আর কোন প্যারামিটার কনফিগার করা যায়?"
-> - "কিভাবে সম্পূর্ণ রেসপন্সের অপেক্ষায় না থেকে স্ট্রিমিং রেসপন্স যোগ করব?"
-
-**প্রম্পট ইঞ্জিনিয়ারিং** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-এখন আপনি জানেন কিভাবে মডেলের সাথে কথা বলতে হয়, দেখা যাক কীভাবে প্রম্পট দিন। এই ডেমো একই মডেল সেটআপ ব্যবহার করে কিন্তু পাঁচটি ভিন্ন প্রম্পট প্যাটার্ন দেখায়। জিরো-শট সরাসরি নির্দেশনার জন্য, কয়েকটি উদাহরণ থেকে শেখার জন্য ফিউ-শট, যুক্তি-ধারা প্রকাশ করার জন্য চেইন-অফ-থট, এবং প্রসঙ্গ নির্ধারণের জন্য রোল-ভিত্তিক প্রম্পট ব্যবহার করুন। একই মডেল কীভাবে প্রম্পট ফ্রেমিং অনুসারে আলাদা ফলাফল দেয় আপনি দেখবেন।
-
-ডেমোটিতে প্রম্পট টেমপ্লেটও দেখানো হয়েছে, যা ভ্যারিয়েবলসহ পুনঃব্যবহারযোগ্য প্রম্পট তৈরির শক্তিশালী উপায়।
-
-নিচের উদাহরণে LangChain4j `PromptTemplate` ব্যবহার করে ভ্যারিয়েবল পূরণ করা হয়েছে। AI প্রদত্ত গন্তব্য এবং কার্যক্রমের ভিত্তিতে উত্তর দেবে।
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 GitHub Copilot-এর সাথে চেষ্টা করুন:** [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) খুলুন এবং জিজ্ঞাসা করুন:
-> - "জিরো-শট এবং ফিউ-শট প্রম্পটের পার্থক্য কী, এবং কখন কোনটি ব্যবহার করব?"
-> - "মডেলের রেসপন্সে তাপমাত্রা প্যারামিটার কীভাবে প্রভাব ফেলে?"
-> - "প্রম্পট ইনজেকশন আক্রমণ প্রতিরোধে কী কী প্রযুক্তি প্রয়োগ করা যায়?"
-> - "সাধারণ প্যাটার্নের জন্য কিভাবে পুনঃব্যবহারযোগ্য PromptTemplate অবজেক্ট তৈরি করবো?"
-
-**টুল ইন্টিগ্রেশন** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-এখানেই LangChain4j শক্তিশালী হয়। আপনি `AiServices` ব্যবহার করে একটি AI সহকারী তৈরি করবেন যা আপনার জাভা মেথডগুলো কল করতে পারে। মেথডগুলোকে `@Tool("description")` দিয়ে অ্যানোটেট করুন এবং বাকিটা LangChain4j পরিচালনা করবে - AI স্বয়ংক্রিয়ভাবে সিদ্ধান্ত নেবে কখন কোন টুল ব্যবহার করতে হবে। এটি ফাংশন কলিং এর প্রমাণ, যা AI কে শুধু প্রশ্নের উত্তর দেয়ার পাশাপাশি কাজ করার জন্য সক্ষম করে।
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 GitHub Copilot-এর সাথে চেষ্টা করুন:** [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) খুলুন এবং জিজ্ঞাসা করুন:
-> - "@Tool অ্যানোটেশন কিভাবে কাজ করে এবং LangChain4j এর ভিতরে এই বিষয়টি কিভাবে পরিচালিত হয়?"
-> - "AI কি জটিল সমস্যার সমাধানে একাধিক টুল ক্রমশ কল করতে পারে?"
-> - "যদি কোনো টুল এক্সসেপশন দেয়, তাহলে কীভাবে এরর হ্যান্ডেল করবো?"
-> - "এই ক্যালকুলেটর উদাহরণের পরিবর্তে কিভাবে বাস্তব API ইন্টিগ্রেট করবো?"
-
-**ডকুমেন্ট প্রশ্নোত্তর (সহজ RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-এখানে LangChain4j-এর "সহজ RAG" পদ্ধতি ব্যবহার করে RAG (রিট্রিভাল-অগমেন্টেড জেনারেশন) দেখতে পারবেন। ডকুমেন্টগুলো লোড হয়, স্বয়ংক্রিয়ভাবে বিভক্ত ও এমবেড করে ইন-মেমোরি স্টোরে রাখা হয়, তারপর একটি কনটেন্ট রিট্রিভার AI-কে প্রশ্নের সময় উপযুক্ত অংশ সরবরাহ করে। AI আপনার ডকুমেন্টের ভিত্তিতে উত্তর দেয়, তার সাধারণ জ্ঞানের ভিত্তিতে নয়।
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 GitHub Copilot-এর সাথে চেষ্টা করুন:** [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) খুলুন এবং জিজ্ঞাসা করুন:
-> - "RAG কিভাবে AI হলুসিনেশনের প্রতিরোধ করে মডেলের প্রশিক্ষণ ডেটার তুলনায়?"
-> - "এই সহজ পদ্ধতি আর একটি কাস্টম RAG পাইপলাইনের মধ্যে পার্থক্য কী?"
-> - "কিভাবে আমি একাধিক ডকুমেন্ট বা বড় জ্ঞানভিত্তি পরিচালনা করতে এটি স্কেল করবো?"
-
-**দায়িত্বশীল AI** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-গভীর ডিফেন্স নিয়ে AI নিরাপত্তা তৈরি করুন। এই ডেমো দুটি পর্যায়ের সুরক্ষা একসাথে কাজ করে দেখায়:
-
-**অংশ ১: LangChain4j ইনপুট গার্ডরেলস** - LLM-এ পৌঁছানোর আগে বিপজ্জনক প্রম্পট ব্লক করে। নিজের কাস্টম গার্ডরেলস তৈরি করুন যা নিষিদ্ধ কীওয়ার্ড বা প্যাটার্ন পরীক্ষা করে। এগুলো আপনার কোডে চলে, তাই দ্রুত এবং বিনামূল্যে।
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**অংশ ২: প্রদানকারী নিরাপত্তা ফিল্টার** - GitHub মডেল বিল্ট-ইন ফিল্টার আছে যা আপনার গার্ডরেলস মিস করতে পারে এমন বিষয়গুলো খোঁজে। কঠোর ব্লক (HTTP 400 এরর) ও মৃদু প্রত্যাখ্যান যেখানে AI ভদ্রভাবে প্রত্যাখ্যান করে, উভয়ই দেখবেন।
-
-> **🤖 GitHub Copilot-এর সাথে চেষ্টা করুন:** [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) খুলুন এবং জিজ্ঞাসা করুন:
-> - "InputGuardrail কী এবং নিজস্ব কিভাবে তৈরি করব?"
-> - "কঠোর ব্লক আর মৃদু প্রত্যাখ্যানের পার্থক্য কী?"
-> - "কেন গার্ডরেলস ও প্রদানকারী ফিল্টার একসঙ্গে ব্যবহার করা উচিৎ?"
-
-## পরবর্তী ধাপ
-
-**পরবর্তী মডিউল:** [০১-পরিচিতি - LangChain4j ব্যবহার শুরু করা](../01-introduction/README.md)
-
----
-
-**নেভিগেশন:** [← প্রধান পৃষ্ঠায় ফিরে যান](../README.md) | [পরবর্তী: মডিউল ০১ - পরিচিতি →](../01-introduction/README.md)
-
----
-
-## সমস্যা সমাধান
-
-### প্রথমবার Maven বিল্ড
-
-**সমস্যা:** প্রথমবারের `mvn clean compile` বা `mvn package` অনেক সময় নেয় (১০-১৫ মিনিট)
-
-**কারণ:** Maven প্রথম বিল্ডে সমস্ত প্রজেক্ট নির্ভরশীলতা (Spring Boot, LangChain4j লাইব্রেরি, Azure SDK ইত্যাদি) ডাউনলোড করে।
-
-**সমাধান:** এটি স্বাভাবিক। পরবর্তী বিল্ডগুলি দ্রুত হবে কারণ নির্ভরশীলতাগুলো লোকাল ক্যাশে থাকে। ডাউনলোডের সময় আপনার নেটওয়ার্ক স্পিডের ওপর নির্ভর করে।
-
-### PowerShell Maven কমান্ড সিনট্যাক্স
-
-**সমস্যা:** Maven কমান্ডে `Unknown lifecycle phase ".mainClass=..."` এরর আসে।
-**কারণ**: PowerShell `=` কে ভেরিয়েবল এসাইনমেন্ট অপারেটর হিসাবে ব্যাখ্যা করে, যা Maven প্রপার্টি সিনট্যাক্স ভঙ্গ করে
-
-**সমাধান**: Maven কমান্ডের আগে স্টপ-পার্সিং অপারেটর `--%` ব্যবহার করুন:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-`--%` অপারেটর PowerShell কে নির্দেশ দেয় বাকি সমস্ত আর্গুমেন্ট গুলো Maven এ লিটারালি পাঠাতে, ব্যাখ্যা না করেই।
-
-### Windows PowerShell Emoji প্রদর্শন
-
-**সমস্যা**: PowerShell এ AI রেসপন্সে ইমোজির পরিবর্তে কোলাহল চরিত্র (যেমন `????` বা `â??`) দেখানো হয়
-
-**কারণ**: PowerShell এর ডিফল্ট এনকোডিং UTF-8 ইমোজি সমর্থন করে না
-
-**সমাধান**: Java অ্যাপ্লিকেশন চালানোর আগে এই কমান্ডটি রান করুন:
-```cmd
-chcp 65001
-```
-
-এটি টার্মিনালে UTF-8 এনকোডিং বাধ্যতামূলক করে। বিকল্পভাবে, Windows Terminal ব্যবহার করুন যেটি উন্নত ইউনিকোড সমর্থন করে।
-
-### API কল ডিবাগিং
-
-**সমস্যা**: অথেনটিকেশন ত্রুটি, রেট লিমিট, বা AI মডেল থেকে অনাকাঙ্ক্ষিত রেসপন্স
-
-**সমাধান**: উদাহরণগুলোতে `.logRequests(true)` এবং `.logResponses(true)` রয়েছে যা কনসোলে API কলগুলো প্রদর্শন করে। এটি অথেনটিকেশন ত্রুটি, রেট লিমিট, বা অনাকাঙ্ক্ষিত রেসপন্স ডিবাগ করতে সহায়তা করে। লগ জট কমানোর জন্য প্রোডাকশনে এই ফ্ল্যাগগুলো সরিয়ে ফেলুন।
-
----
-
-
-**অস্বীকৃতি**:
-এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা শুদ্ধতার জন্য চেষ্টা করি, অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার স্বভাষায় কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে প্রয়োজনীয় ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই।
-
\ No newline at end of file
diff --git a/translations/bn/01-introduction/README.md b/translations/bn/01-introduction/README.md
index 6fab7fcd9..f8ba70f38 100644
--- a/translations/bn/01-introduction/README.md
+++ b/translations/bn/01-introduction/README.md
@@ -1,38 +1,38 @@
# মডিউল ০১: LangChain4j দিয়ে শুরু করা
-## বিষয়বস্তু
-
-- [ভিডিও ওয়াকথ্রু](../../../01-introduction)
-- [আপনি যা শিখবেন](../../../01-introduction)
-- [প্রয়োজনীয়তা](../../../01-introduction)
-- [মূল সমস্যা বোঝা](../../../01-introduction)
-- [টোকেন বোঝা](../../../01-introduction)
-- [মেমোরি কীভাবে কাজ করে](../../../01-introduction)
-- [LangChain4j কীভাবে ব্যবহার করে](../../../01-introduction)
-- [Azure OpenAI পরিকাঠামো ডেপ্লয় করুন](../../../01-introduction)
-- [অ্যাপ্লিকেশন লোকালি চালান](../../../01-introduction)
-- [অ্যাপ্লিকেশন ব্যবহার](../../../01-introduction)
- - [স্টেটলেস চ্যাট (বাম প্যানেল)](../../../01-introduction)
- - [স্টেটফুল চ্যাট (ডান প্যানেল)](../../../01-introduction)
-- [পরবর্তী ধাপ](../../../01-introduction)
+## বিষয়সূচি
+
+- [ভিডিও ওয়াকথ্রু](#ভিডিও-ওয়াকথ্রু)
+- [আপনি কী শিখবেন](#আপনি-কী-শিখবেন)
+- [প্রয়োজনীয়তা](#প্রয়োজনীয়তা)
+- [মূল সমস্যা বোঝা](#মূল-সমস্যা-বোঝা)
+- [টোকেন বোঝা](#টোকেন-বোঝা)
+- [মেমোরি কীভাবে কাজ করে](#মেমোরি-কীভাবে-কাজ-করে)
+- [এটি কীভাবে LangChain4j ব্যবহার করে](#এটি-কীভাবে-langchain4j-ব্যবহার-করে)
+- [Azure OpenAI ইনফ্রাস্ট্রাকচার ডিপ্লয় করুন](#azure-openai-ইনফ্রাস্ট্রাকচার-ডিপ্লয়-করুন)
+- [অ্যাপ্লিকেশন লোকালি চালান](#অ্যাপ্লিকেশন-লোকালি-চালান)
+- [অ্যাপ্লিকেশন ব্যবহার করা](#অ্যাপ্লিকেশন-ব্যবহার-করা)
+ - [স্টেটলেস চ্যাট (বাম প্যানেল)](#স্টেটলেস-চ্যাট-বাম-প্যানেল)
+ - [স্টেটফুল চ্যাট (ডান প্যানেল)](#স্টেটফুল-চ্যাট-ডান-প্যানেল)
+- [পরবর্তী ধাপসমূহ](#পরবর্তী-ধাপসমূহ)
## ভিডিও ওয়াকথ্রু
-এই লাইভ সেশনটি দেখুন যা এই মডিউল দিয়ে শুরু করার পদ্ধতি ব্যাখ্যা করে:
+এই লাইভ সেশনটি দেখুন যা কিভাবে এই মডিউল দিয়ে শুরু করবেন তা ব্যাখ্যা করে:
-## আপনি যা শিখবেন
+## আপনি কী শিখবেন
-কুইক স্টার্টে, আপনি GitHub মডেলগুলি ব্যবহার করে প্রম্পট পাঠিয়েছেন, টুল কল করেছেন, একটি RAG পাইপলাইন তৈরি করেছেন এবং গার্ডরেইলস পরীক্ষা করেছেন। সেই ডেমোগুলো দেখিয়েছিল কি সম্ভব — এখন আমরা Azure OpenAI এবং GPT-5.2-তে সুইচ করি এবং প্রোডাকশন-স্টাইল অ্যাপ্লিকেশন তৈরি শুরু করি। এই মডিউলটি এমন কথোপকথন AI-এর উপর ফোকাস করে যা প্রসঙ্গ স্মরণ করে এবং স্টেট রক্ষা করে — যা কুইক স্টার্ট ডেমোগুলোর পেছনে ছিল কিন্তু ব্যাখ্যা করা হয়নি।
+এটি আপনার LangChain4j এবং Azure OpenAI দিয়ে শুরু করার পয়েন্ট। আমরা মৌলিক বিষয়গুলি দিয়ে শুরু করব এবং প্রোডাকশন-স্টাইল অ্যাপ্লিকেশন তৈরি শুরু করব। এই মডিউলটি কথোপকথনমূলক AI-তে ফোকাস করে যা প্রসঙ্গ মনে রাখে এবং স্টেট বজায় রাখে — এগুলো মৌলিক ধারণা যেগুলোর উপর পরবর্তী প্রতিটি মডিউল গড়ে উঠবে।
-পুরো গাইডে আমরা Azure OpenAI-এর GPT-5.2 ব্যবহার করব কারণ এর উন্নত যুক্তিবিচার ক্ষমতা বিভিন্ন প্যাটার্নের আচরণ স্পষ্ট করে দেয়। যখন আপনি মেমোরি যোগ করবেন, আপনি স্পষ্টভাবে পার্থক্য দেখতে পাবেন। এটি প্রতিটি কম্পোনেন্ট আপনার অ্যাপ্লিকেশনে কী নিয়ে আসে বুঝতে সহজ করে।
+আমরা এই গাইড জুড়ে Azure OpenAI-এর GPT-5.2 ব্যবহার করবো কারণ এর উন্নত যুক্তি ক্ষমতাগুলি বিভিন্ন প্যাটার্নের আচরণ আরও স্পষ্ট করে তোলে। যখন আপনি মেমোরি যোগ করবেন, তখন আপনি স্পষ্টভাবে পার্থক্য দেখতে পাবেন। এটি সহজ করে তোলে বুঝতে যে প্রতিটি উপাদান আপনার অ্যাপ্লিকেশনে কী নিয়ে আসে।
-আপনি একটি অ্যাপ্লিকেশন তৈরি করবেন যা দুটি প্যাটার্নই দেখাবে:
+আপনি একটি অ্যাপ্লিকেশন তৈরি করবেন যা দুটি প্যাটার্নই প্রদর্শন করে:
-**স্টেটলেস চ্যাট** - প্রতিটি অনুরোধ পৃথক। মডেলের আগের বার্তার কোনো স্মৃতি নেই। এটি কুইক স্টার্টে ব্যবহৃত প্যাটার্ন।
+**স্টেটলেস চ্যাট** - প্রতিটি অনুরোধ স্বাধীন। মডেলের পূর্বের বার্তার কোনো স্মৃতি নেই। এটি সবচেয়ে সহজ শুরু।
-**স্টেটফুল কথোপকথন** - প্রতিটি অনুরোধে কথোপকথনের ইতিহাস অন্তর্ভুক্ত থাকে। মডেল একাধিক টার্ন জুড়ে প্রসঙ্গ বজায় রাখে। এটি প্রোডাকশন অ্যাপ্লিকেশনগুলোর জন্য প্রয়োজন।
+**স্টেটফুল কথোপকথন** - প্রতিটি অনুরোধে কথোপকথনের ইতিহাস থাকে। মডেল একাধিক ধাপে প্রসঙ্গ বজায় রাখে। প্রোডাকশন অ্যাপ্লিকেশনগুলির জন্য এটি দরকার।
## প্রয়োজনীয়তা
@@ -41,45 +41,45 @@
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
-> **নোট:** Java, Maven, Azure CLI এবং Azure Developer CLI (azd) প্রদত্ত devcontainer-এ আগেই ইনস্টল করা আছে।
+> **দ্রষ্টব্য:** Java, Maven, Azure CLI এবং Azure Developer CLI (azd) প্রদান করা devcontainer-এ আগেই ইনস্টল করা আছে।
-> **নোট:** এই মডিউল Azure OpenAI তে GPT-5.2 ব্যবহার করে। ডিপ্লয়মেন্ট স্বয়ংক্রিয়ভাবে `azd up` দিয়ে কনফিগার করা হয় - কোডে মডেলের নাম পরিবর্তন করবেন না।
+> **দ্রষ্টব্য:** এই মডিউল Azure OpenAI-র GPT-5.2 ব্যবহার করে। ডিপ্লয়মেন্ট স্বয়ংক্রিয়ভাবে `azd up` দ্বারা কনফিগার করা হয় — কোডে মডেল নাম পরিবর্তন করবেন না।
## মূল সমস্যা বোঝা
-ভাষার মডেলগুলি স্টেটলেস। প্রতিটি API কল স্বতন্ত্র। আপনি যদি "আমার নাম জন" পাঠান এবং পরে জিজ্ঞেস করেন "আমার নাম কী?", মডেল জানে না আপনি মাত্রই পরিচয় দিয়েছেন। এটি প্রতিটি অনুরোধকে প্রথম কথোপকথনের মতো আচরণ করে।
+ভাষা মডেলগুলো স্টেটলেস। প্রতিটি API কল স্বাধীন। আপনি যদি "আমার নাম জন" লেখেন এবং পরে জিজ্ঞেস করেন "আমার নাম কী?", মডেলটির কোন ধারণা নেই যে আপনি আপনার পরিচয় দিয়েছেন। এটি প্রতিটি অনুরোধ প্রথম কথোপকথনের মতো বিবেচনা করে।
-এটি সহজ প্রশ্নোত্তরের জন্য ঠিক আছে কিন্তু বাস্তব অ্যাপ্লিকেশনের জন্য অকার্যকর। কাস্টমার সার্ভিস বটদের আপনাকে যা বলেছিলেন তা মনে রাখতে হয়। পার্সোনাল অ্যাসিস্ট্যান্টদের প্রসঙ্গ প্রয়োজন। যেকোনো বহু-টর্ণ কথোপকথনের জন্য মেমোরি দরকার।
+এটি সাধারণ প্রশ্নোত্তরের জন্য ঠিক আছে কিন্তু বাস্তব অ্যাপ্লিকেশন জন্য অকার্যকর। কাস্টমার সার্ভিস বটকে আপনাকে যা বলেছিলেন তা মনে রাখতে হবে। ব্যক্তিগত সহকারীকে প্রসঙ্গ দরকার। যে কোনো বহু-ধাপে কথোপকথনের জন্য মেমোরি প্রয়োজন।
-নিচের চিত্রটি দুটি পন্থার তুলনা করে — বামে একটি স্টেটলেস কল যা আপনার নাম ভুলে যায়; ডানে ChatMemory দ্বারা ব্যাকড স্টেটফুল কল যা তা মনে রাখে।
+নিম্নলিখিত ডায়াগ্রামটি দুই পদ্ধতির পার্থক্য দেখায় — বামে, একটি স্টেটলেস কল যা আপনার নাম ভুলে যায়; ডানে, ChatMemory দ্বারা সমর্থিত স্টেটফুল কল যা নাম মনে রাখে।
-*স্টেটলেস (স্বাধীন কল) এবং স্টেটফুল (প্রসঙ্গ-সচেতন) কথোপকথনের মধ্যে পার্থক্য*
+*স্টেটলেস (স্বাধীন কল) এবং স্টেটফুল (প্রসঙ্গ-বিবেচনাযুক্ত) কথোপকথনের পার্থক্য*
## টোকেন বোঝা
-কথোপকথনে যাওয়ার আগে, টোকেন বোঝা গুরুত্বপূর্ণ - টোকেন হল মৌলিক নিয়ামক যেগুলো ভাষার মডেল প্রক্রিয়াজাত করে:
+কথোপকথনে প্রবেশ করার আগে, টোকেন বোঝা গুরুত্বপূর্ণ — টোকেন হলো মৌলিক লেখ্য একক যা ভাষা মডেল প্রক্রিয়া করে:
-*কীভাবে টেক্সট টোকেনে বিভক্ত হয় তার উদাহরণ - "I love AI!" হয়ে গেছে ৪টি পৃথক প্রক্রিয়াকরণ ইউনিট*
+*কিভাবে লেখা টোকেনে ভাগ হয় - "I love AI!" চারটি পৃথক প্রসেসিং ইউনিটে পরিণত হয়*
-টোকেন হল কিভাবে AI মডেলগুলি টেক্সট পরিমাপ ও প্রক্রিয়া করে। শব্দ, বিরামচিহ্ন, এমনকি ফাঁকা স্থানও টোকেন হতে পারে। আপনার মডেলের একটি সীমা আছে কত টোকেন একবারে প্রক্রিয়া করতে পারে (GPT-5.2-এর জন্য ৪০০,০০০, যার মধ্যে সর্বোচ্চ ২৭২,০০০ ইনপুট টোকেন এবং ১২৮,০০০ আউটপুট টোকেন)। টোকেন বোঝা কথোপকথনের দৈর্ঘ্য এবং খরচ নিয়ন্ত্রণে সাহায্য করে।
+টোকেন হল কিভাবে AI মডেল টেক্সট পরিমাপ এবং প্রক্রিয়া করে। শব্দ, বিরামচিহ্ন, এমনকি স্পেসও টোকেন হতে পারে। আপনার মডেলের একটি সীমা আছে কতটি টোকেন একবারে প্রক্রিয়া করা যায় (GPT-5.2-র জন্য ৪০০,০০০, যেখানে ইনপুট টোকেন সর্বোচ্চ ২৭২,০০০ এবং আউটপুট ১২৮,০০০)। টোকেন বুঝলে কথোপকথনের দৈর্ঘ্য এবং খরচ নিয়ন্ত্রণ সহজ হয়।
## মেমোরি কীভাবে কাজ করে
-চ্যাট মেমোরি স্টেটলেস সমস্যার সমাধান করে কথোপকথনের ইতিহাস বজায় রেখে। মডেলে অনুরোধ পাঠানোর আগে ফ্রেমওয়ার্ক প্রাসঙ্গিক পূর্বের বার্তাগুলো যোগ করে। যখন আপনি "আমার নাম কী?" জিজ্ঞেস করেন, সিস্টেম আসলে পুরো কথোপকথনের ইতিহাস পাঠায়, যার ফলে মডেল দেখে আপনি আগে "আমার নাম জন" বলেছিলেন।
+চ্যাট মেমোরি স্টেটলেস সমস্যার সমাধান করে কথোপকথনের ইতিহাস রক্ষা করে। মডেলে আপনার অনুরোধ পাঠানোর আগে ফ্রেমওয়ার্ক পূর্বের প্রাসঙ্গিক বার্তাগুলো যুক্ত করে। যখন আপনি জিজ্ঞেস করেন "আমার নাম কী?", সিস্টেম পুরো কথোপকথনের ইতিহাস মডেলে পাঠায়, যাতে মডেল দেখতে পারে আপনি আগে বলেছেন "আমার নাম জন।"
-LangChain4j মেমোরি ইমপ্লিমেন্টেশনগুলো প্রদান করে যা এটি স্বয়ংক্রিয়ভাবে পরিচালনা করে। আপনি কতগুলি বার্তা রাখতে চান তা নির্বাচন করেন এবং ফ্রেমওয়ার্ক প্রসঙ্গ উইন্ডো পরিচালনা করে। নিচের ছবি দেখায় কীভাবে MessageWindowChatMemory সাম্প্রতিক বার্তাগুলোর একটি স্লাইডিং উইন্ডো বজায় রাখে।
+LangChain4j মেমোরি বাস্তবায়ন সরবরাহ করে যা এটি স্বয়ংক্রিয়ভাবে পরিচালনা করে। আপনি কতজন বার্তা রাখা হবে বেছে নেন এবং ফ্রেমওয়ার্ক প্রসঙ্গ উইন্ডো ম্যানেজ করে। নিচের ডায়াগ্রামটি দেখায় কিভাবে MessageWindowChatMemory সাম্প্রতিক বার্তাগুলোর স্লাইডিং উইন্ডো বজায় রাখে।
-*MessageWindowChatMemory সাম্প্রতিক বার্তাগুলোর একটি স্লাইডিং উইন্ডো বজায় রাখে, পুরনোগুলো স্বয়ংক্রিয়ভাবে ফেলে দেয়*
+*MessageWindowChatMemory সাম্প্রতিক বার্তাগুলোর স্লাইডিং উইন্ডো বজায় রাখে, পুরানো বার্তাগুলো স্বয়ংক্রিয়ভাবে ফেলে দেয়*
-## LangChain4j কীভাবে ব্যবহার করে
+## এটি কীভাবে LangChain4j ব্যবহার করে
-এই মডিউলটি কুইক স্টার্টকে বাড়িয়ে স্প্রিং বুট একত্রিত করে এবং কথোপকথন মেমোরি যোগ করে। উপাদানগুলি কিভাবে মেলানো হয় দেখুন:
+এই মডিউলটি Spring Boot-কে একত্রিত করে এবং কথোপকথন মেমোরি যোগ করে। এখানে উপাদানগুলি কীভাবে একসাথে কাজ করে:
**ডিপেন্ডেন্সি** - দুটি LangChain4j লাইব্রেরি যোগ করুন:
@@ -94,7 +94,7 @@ LangChain4j মেমোরি ইমপ্লিমেন্টেশনগু
```
-**চ্যাট মডেল** - Azure OpenAI স্প্রিং বিন হিসেবে কনফিগার করুন ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+**চ্যাট মডেল** - Azure OpenAI কে Spring bean হিসেবে কনফিগার করুন ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -109,9 +109,9 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-বিল্ডার `azd up` দ্বারা সেট করা পরিবেশ ভেরিয়েবল থেকে ক্রেডেনশিয়াল পড়ে। `baseUrl` আপনার Azure এন্ডপয়েন্টে সেট করলে OpenAI ক্লায়েন্ট Azure OpenAI এর সাথে কাজ করে।
+বিল্ডারটি পরিবেশ ভেরিয়েবল থেকে `azd up` দ্বারা সেট করা ক্রেডেনশিয়াল পড়ে। আপনার Azure এন্ডপয়েন্ট দিয়ে `baseUrl` সেট করলে OpenAI ক্লায়েন্ট Azure OpenAI-এর সাথে কাজ করে।
-**কথোপকথনের মেমোরি** - MessageWindowChatMemory দিয়ে চ্যাট ইতিহাস ট্র্যাক করুন ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
+**কথোপকথন মেমোরি** - MessageWindowChatMemory দিয়ে চ্যাট ইতিহাস ট্র্যাক করুন ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -124,21 +124,21 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-`withMaxMessages(10)` দিয়ে মেমোরি তৈরি করুন, যা শেষ ১০টি বার্তা রাখবে। ইউজার এবং AI বার্তা যোগ করুন টাইপ্ড র্যাপার দিয়ে: `UserMessage.from(text)` এবং `AiMessage.from(text)`। ইতিহাস পুনরুদ্ধার করতে `memory.messages()` ব্যবহার করুন এবং মডেলে পাঠান। সার্ভিস প্রতিটি কথোপকথনের জন্য আলাদা মেমোরি ইন্সট্যান্স রাখে, যা একাধিক ব্যবহারকারীকে একযোগে চ্যাট করতে দেয়।
+`withMaxMessages(10)` দিয়ে মেমোরি তৈরি করুন যাতে শেষ ১০ টা বার্তা থাকে। ব্যবহারকারী এবং AI বার্তাগুলো typed wrappers দিয়ে যোগ করুন: `UserMessage.from(text)` এবং `AiMessage.from(text)`। ইতিহাস পাওয়ার জন্য `memory.messages()` ব্যবহার করুন এবং এটি মডেলে পাঠান। সার্ভিস পৃথক কথোপকথন আইডি অনুসারে পৃথক মেমোরি ইনস্ট্যান্স সংরক্ষণ করে, ফলে অনেক ব্যবহারকারী একই সাথে চ্যাট করতে পারে।
-> **🤖 GitHub Copilot চ্যাট ব্যবহার করে চেষ্টা করুন:** খুলুন [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) এবং জিজ্ঞেস করুন:
-> - "MessageWindowChatMemory উইন্ডো পূর্ণ হলে কোন বার্তাগুলো ফেলে দেয় কিভাবে সিদ্ধান্ত নেয়?"
-> - "আমি কি ইন-মেমোরির বদলে ডাটাবেস ব্যবহার করে কাস্টম মেমোরি স্টোরেজ বাস্তবায়ন করতে পারি?"
-> - "পুরানো কথোপকথনের সারসংক্ষেপ যোগ করতে আমি কিভাবে করতে পারি?"
+> **🤖 GitHub Copilot [চ্যাট](https://github.com/features/copilot) এর সাথে চেষ্টা করুন:** খুলুন [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) এবং জিজ্ঞাসা করুন:
+> - "MessageWindowChatMemory উইন্ডো পূর্ণ হলে কোন বার্তাগুলো ফেলে দেওয়ার সিদ্ধান্ত কীভাবে নেয়?"
+> - "আমি কি মেমোরির জন্য ইন-মেমোরির পরিবর্তে ডাটাবেজ ব্যবহার করে কাস্টম স্টোরেজ তৈরি করতে পারি?"
+> - "পুরানো কথোপকথনের সারাংশ সংকলন যোগ করার জন্য কীভাবে কাজ করব?"
-স্টেটলেস চ্যাট এন্ডপয়েন্ট পুরোপুরি মেমোরি এড়িয়ে চলে — সরাসরি `chatModel.chat(prompt)` ব্যবহার, কুইক স্টার্টের মতো। স্টেটফুল এন্ডপয়েন্ট মেমোরিতে বার্তা যোগ করে, ইতিহাস রিট্রিভ করে এবং প্রতিটি অনুরোধের সাথে প্রসঙ্গ অন্তর্ভুক্ত করে। একই মডেল কনফিগারেশন, ভিন্ন প্যাটার্ন।
+স্টেটলেস চ্যাট এন্ডপয়েন্ট সম্পূর্ণ মেমোরি এড়িয়ে চলে — যেমন দ্রুত শুরুতে `chatModel.chat(prompt)`। স্টেটফুল এন্ডপয়েন্ট বার্তাগুলো মেমোরিতে যোগ করে, ইতিহাস রিট্রিভ করে এবং প্রতিটি অনুরোধে প্রসঙ্গ সহ পাঠায়। একই মডেল কনফিগারেশন, ভিন্ন প্যাটার্ন।
-## Azure OpenAI পরিকাঠামো ডেপ্লয় করুন
+## Azure OpenAI ইনফ্রাস্ট্রাকচার ডিপ্লয় করুন
**Bash:**
```bash
cd 01-introduction
-azd up # সাবস্ক্রিপশন এবং অবস্থান নির্বাচন করুন (eastus2 সুপারিশ করা হয়েছে)
+azd up # সাবস্ক্রিপশন এবং অবস্থান নির্বাচন করুন (eastus2 পরামর্শ দেওয়া হয়)
```
**PowerShell:**
@@ -147,20 +147,20 @@ cd 01-introduction
azd up # সাবস্ক্রিপশন এবং অবস্থান নির্বাচন করুন (eastus2 প্রস্তাবিত)
```
-> **নোট:** যদি আপনি টাইমআউট ত্রুটি পান (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), শুধু পুনরায় `azd up` চালান। Azure রিসোর্স এখনো ব্যাকগ্রাউন্ডে provisioning-এ থাকতে পারে, পুনরায় চেষ্টা করলে রিসোর্স সম্পূর্ণ হলে ডেপ্লয়মেন্ট সম্পন্ন হয়।
+> **দ্রষ্টব্য:** যদি টাইমআউট ত্রুটি (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`) পাওয়া যায়, তবে আবার `azd up` চালান। Azure রিসোর্সগুলি পেছনে এখনও প্রস্তুত হচ্ছে, পুনরায় চেষ্টা করলে রিসোর্সসমূহ চূড়ান্ত অবস্থায় পৌঁছালে ডিপ্লয়মেন্ট সম্পন্ন হবে।
এটি করবে:
-1. GPT-5.2 এবং text-embedding-3-small মডেল সহ Azure OpenAI রিসোর্স ডেপ্লয়।
-2. প্রজেক্ট রুটে স্বয়ংক্রিয়ভাবে `.env` ফাইল তৈরি যেটিতে ক্রেডেনশিয়াল থাকবে।
-3. প্রয়োজনীয় সব পরিবেশ ভেরিয়েবল সেটআপ।
+1. GPT-5.2 এবং text-embedding-3-small মডেলসহ Azure OpenAI রিসোর্স ডিপ্লয় করবে
+2. প্রকল্প মূল ডিরেক্টরিতে স্বয়ংক্রিয় `.env` ফাইল জেনারেট করবে ক্রেডেনশিয়ালসহ
+3. সমস্ত প্রয়োজনীয় পরিবেশ ভেরিয়েবল সেট করবে
-**ডেপ্লয়মেন্ট সমস্যার সম্মুখীন?** বিস্তারিত ট্রাবলশুটিং এর জন্য [Infrastructure README](infra/README.md) দেখুন, যেখানে সাবডোমেইন নাম দ্বন্দ্ব, ম্যানুয়াল Azure Portal ডেপ্লয়মেন্ট ধাপ এবং মডেল কনফিগারেশন গাইডেন্স রয়েছে।
+**ডিপ্লয়মেন্টে সমস্যা হচ্ছে?** বিস্তারিত সমস্যার সমাধানের জন্য [Infrastructure README](infra/README.md) দেখুন — সাবডোমেইন নাম দ্বন্দ্ব, ম্যানুয়াল Azure Portal ডিপ্লয়মেন্ট পদক্ষেপ, এবং মডেল কনফিগারেশন নির্দেশিকা সহ।
-**ডেপ্লয়মেন্ট সফল হয়েছে কিনা যাচাই করুন:**
+**ডিপ্লয়মেন্ট সফল হয়েছে কী না যাচাই করুন:**
**Bash:**
```bash
-cat ../.env # AZURE_OPENAI_ENDPOINT, API_KEY ইত্যাদি দেখানো উচিত।
+cat ../.env # AZURE_OPENAI_ENDPOINT, API_KEY, ইত্যাদি দেখানো উচিত।
```
**PowerShell:**
@@ -168,30 +168,29 @@ cat ../.env # AZURE_OPENAI_ENDPOINT, API_KEY ইত্যাদি দেখা
Get-Content ..\.env # AZURE_OPENAI_ENDPOINT, API_KEY, ইত্যাদি দেখানো উচিত।
```
-> **নোট:** `azd up` স্বয়ংক্রিয় `.env` ফাইল তৈরি করে। পরে যদি আপডেট প্রয়োজন হয়, আপনি ম্যানুয়ালি `.env` ফাইল এডিট করতে পারেন অথবা পুনরায় জেনারেট করতে পারেন:
+> **দ্রষ্টব্য:** `azd up` কমান্ড স্বয়ংক্রিয়ভাবে `.env` ফাইল তৈরি করে। পরে আপডেট করতে চাইলে `.env` ফাইল ম্যানুয়ালি সম্পাদনা করুন অথবা পুনরায় তৈরি করতে চালান:
>
> **Bash:**
> ```bash
> cd ..
> bash .azd-env.sh
> ```
-
+>
> **PowerShell:**
> ```powershell
> cd ..
> .\.azd-env.ps1
> ```
-
## অ্যাপ্লিকেশন লোকালি চালান
-**ডেপ্লয়মেন্ট যাচাই করুন:**
+**ডিপ্লয়মেন্ট যাচাই করুন:**
-রুট ডিরেক্টরিতে `.env` ফাইল আছে কিনা এবং এর মধ্যে Azure ক্রেডেনশিয়াল সঠিক আছে নিশ্চিত করুন। মডিউল ডিরেক্টরি থেকে চালান (`01-introduction/`):
+মূল ডিরেক্টরিতে `.env` ফাইল আছে এবং Azure ক্রেডেনশিয়াল সেট আছে নিশ্চিত করুন। মডিউল ডিরেক্টরিতে (`01-introduction/`) থেকে এটি চালান:
**Bash:**
```bash
-cat ../.env # দেখাতে হবে AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+cat ../.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT দেখানো উচিত
```
**PowerShell:**
@@ -199,31 +198,31 @@ cat ../.env # দেখাতে হবে AZURE_OPENAI_ENDPOINT, API_KEY, DEPL
Get-Content ..\.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT দেখানো উচিত
```
-**অ্যাপ্লিকেশনগুলি শুরু করুন:**
+**অ্যাপ্লিকেশন শুরু করুন:**
-**বিকল্প ১: স্প্রিং বুট ড্যাশবোর্ড ব্যবহার (VS Code ব্যবহারকারীদের জন্য সুপারিশকৃত)**
+**অপশন ১: Spring Boot ড্যাশবোর্ড ব্যবহার (VS Code ব্যবহারকারীদের জন্য সুপারিশ)**
-ডেভ কন্টেইনারে স্প্রিং বুট ড্যাশবোয়ার্ড এক্সটেনশন অন্তর্ভুক্ত, যা সব স্প্রিং বুট অ্যাপ্লিকেশন পরিচালনার ভিজ্যুয়াল ইন্টারফেস দেয়। এটি VS Code এর বামে Activity Bar-এ (স্প্রিং বুট আইকন দেখুন) পাওয়া যাবে।
+devcontainer-এ Spring Boot ড্যাশবোর্ড এক্সটেনশন অন্তর্ভুক্ত আছে, যা সব Spring Boot অ্যাপ্লিকেশন ম্যানেজ করার ভিজ্যুয়াল ইন্টারফেস দেয়। VS Code-এর বামে Activity Bar-এ Spring Boot আইকন দেখতে পাবেন।
-স্প্রিং বুট ড্যাশবোর্ড থেকে:
-- ওয়ার্কস্পেসের সব স্প্রিং বুট অ্যাপ্লিকেশন দেখুন
-- এক ক্লিকে অ্যাপ্লিকেশন শুরু/বন্ধ করুন
-- রিয়েল-টাইম অ্যাপ্লিকেশন লগ দেখুন
-- অ্যাপ্লিকেশন স্ট্যাটাস মনিটর করুন
+Spring Boot ড্যাশবোর্ড থেকে আপনি:
+- ওয়ার্কস্পেসের সব Spring Boot অ্যাপ্লিকেশন দেখতে পারেন
+- এক ক্লিকে অ্যাপ্লিকেশন শুরু/বন্ধ করতে পারেন
+- রিয়েল-টাইমে অ্যাপ্লিকেশন লগ দেখতে পারেন
+- অ্যাপ্লিকেশন স্থিতি পর্যবেক্ষণ করতে পারেন
-"introduction" এর পাশে থাকা প্লে বাটনে ক্লিক করে এই মডিউল শুরু করুন, অথবা সব মডিউল একসাথে চালু করুন।
+শুধুমাত্র "introduction" পাশে প্লে বাটনে ক্লিক করে এই মডিউল শুরু করুন, অথবা একবারে সব মডিউল শুরু করুন।
-*VS Code-এ স্প্রিং বুট ড্যাশবোর্ড — সব মডিউল এক জায়গা থেকে চালু, বন্ধ এবং মনিটর করুন*
+*VS Code-এ Spring Boot ড্যাশবোর্ড — এক জায়গা থেকে সব মডিউল শুরু, বন্ধ, পর্যবেক্ষণ করুন*
-**বিকল্প ২: শেল স্ক্রিপ্ট ব্যবহার**
+**অপশন ২: শেল স্ক্রিপ্ট ব্যবহার**
-সকল ওয়েব অ্যাপ্লিকেশন শুরু করুন (মডিউল ০১-০৪):
+সব ওয়েব অ্যাপ্লিকেশন (মডিউল ০১-০৪) শুরু করুন:
**Bash:**
```bash
-cd .. # মূল ডিরেক্টরি থেকে
+cd .. # রুট ডিরেক্টরি থেকে
./start-all.sh
```
@@ -233,7 +232,7 @@ cd .. # রুট ডিরেক্টরি থেকে
.\start-all.ps1
```
-অথবা শুধুমাত্র এই মডিউল চালান:
+অথবা কেবল এই মডিউল শুরু করুন:
**Bash:**
```bash
@@ -247,79 +246,77 @@ cd 01-introduction
.\start.ps1
```
-উভয় স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে রুট `.env` ফাইল থেকে পরিবেশ ভেরিয়েবল লোড করে এবং JAR তৈরি না থাকলে তৈরি করবে।
+উভয় স্ক্রিপ্ট মূল `.env` ফাইল থেকে পরিবেশ ভেরিয়েবলগুলি স্বয়ংক্রিয়ভাবে লোড করে এবং JAR না থাকলে এটি তৈরি করবে।
-> **নোট:** যদি আপনি ম্যানুয়ালি সব মডিউল বিল্ড করতে চান শুরু করার আগে:
+> **দ্রষ্টব্য:** আপনি যদি হাতে হাতে সব মডিউল তৈরি করতে চান তারপর শুরু করতে চান:
>
> **Bash:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-
+>
> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
+আপনার ব্রাউজারে http://localhost:8080 খুলুন।
-ব্রাউজারে http://localhost:8080 খুলুন।
-
-**বন্ধ করার জন্য:**
+**বন্ধ করতে:**
**Bash:**
```bash
./stop.sh # এই মডিউল শুধুমাত্র
# অথবা
-cd .. && ./stop-all.sh # সব মডিউলগুলি
+cd .. && ./stop-all.sh # সমস্ত মডিউলগুলি
```
**PowerShell:**
```powershell
.\stop.ps1 # শুধুমাত্র এই মডিউল
# অথবা
-cd ..; .\stop-all.ps1 # সকল মডিউল
+cd ..; .\stop-all.ps1 # সমস্ত মডিউল
```
+## অ্যাপ্লিকেশন ব্যবহার করা
-## অ্যাপ্লিকেশন ব্যবহার
-
-অ্যাপ্লিকেশনটি একটি ওয়েব ইন্টারফেস সরবরাহ করে যেখানে দুটো চ্যাট ইমপ্লিমেন্টেশন পাশে পাশে থাকে।
+অ্যাপ্লিকেশনটি দুইটি পার্শ্বের পাশে পার্শ্ববর্তী দুটি চ্যাট ইমপ্লিমেন্টেশনসহ একটি ওয়েব ইন্টারফেস দেয়।
-*ড্যাশবোর্ডে Simple Chat (স্টেটলেস) এবং Conversational Chat (স্টেটফুল) অপশন উভয় জনপ্রিয়*
+*ড্যাশবোর্ড যা Simple Chat (স্টেটলেস) এবং Conversational Chat (স্টেটফুল) অপশন উভয় দেখায়*
### স্টেটলেস চ্যাট (বাম প্যানেল)
-প্রথমে এটা চেষ্টা করুন। বলুন "আমার নাম জন" তারপর সাথে সাথে জিজ্ঞেস করুন "আমার নাম কী?" মডেল মনে রাখবে না কারণ প্রতিটি বার্তা স্বাধীন। এটি ভাষা মডেলের মৌলিক ইন্টিগ্রেশনের মূল সমস্যা প্রদর্শন করে — কোনো কথোপকথন প্রসঙ্গ নেই।
+প্রথমে এটি চেষ্টা করুন। বলুন "আমার নাম জন" এবং তাৎক্ষণিক "আমার নাম কী?" জিজ্ঞাসা করুন। মডেল মনে রাখবে না কারণ প্রতিটি বার্তা স্বাধীন। এটি মৌলিক ভাষা মডেল সংযুক্তির মূল সমস্যাটি দেখায় — কোনো কথোপকথন প্রসঙ্গ নেই।
-*AI আপনার নাম পূর্বের বার্তা থেকে মনে রাখে না*
+*AI আপনার আগের বার্তা থেকে নাম মনে রাখে না*
### স্টেটফুল চ্যাট (ডান প্যানেল)
-এখন একই ক্রম এখানে চেষ্টা করুন। বলুন "আমার নাম জন" তারপর "আমার নাম কী?" এবার এটি মনে রাখে। পার্থক্য হল MessageWindowChatMemory — এটি কথোপকথনের ইতিহাস সংরক্ষণ করে এবং প্রতিটি অনুরোধের সাথে অন্তর্ভুক্ত করে। এভাবে প্রোডাকশন কথোপকথন AI কাজ করে।
+এখন একই সিকোয়েন্স এখানে চেষ্টা করুন। বলুন "আমার নাম জন" এবং পরে "আমার নাম কী?" এইবার এটি স্মরণ রাখে। পার্থক্য হল MessageWindowChatMemory - এটি কথোপকথন ইতিহাস বজায় রাখে এবং প্রতিটি অনুরোধে এটি অন্তর্ভুক্ত করে। এভাবেই প্রোডাকশন কথোপকথনমূলক AI কাজ করে।
-*AI কথোপকথনের শুরু থেকে আপনার নাম স্মরণ করে*
+*AI কথোপকথনের আগে আপনার নাম মনে রাখে*
-উভয় প্যানেলে একই GPT-5.2 মডেল ব্যবহার হয়। একমাত্র পার্থক্য মেমোরি। এটি স্পষ্ট করে দেয় মেমোরি আপনার অ্যাপ্লিকেশনকে কী দেয় এবং বাস্তব ব্যবহারে কেন এটি অপরিহার্য।
+উভয় প্যানেল একই GPT-5.2 মডেল ব্যবহার করে। একমাত্র পার্থক্য হলো মেমোরি। এটি স্পষ্ট করে তোলে মেমোরি কীভাবে আপনার অ্যাপ্লিকেশনকে উপকৃত করে এবং কেন বাস্তব ব্যবহারের জন্য এটি অপরিহার্য।
-## পরবর্তী ধাপ
+## পরবর্তী ধাপসমূহ
-**পরবর্তী মডিউল:** [০২-প্রম্পট ইঞ্জিনিয়ারিং - GPT-5.2 নিয়ে প্রম্পট ইঞ্জিনিয়ারিং](../02-prompt-engineering/README.md)
+**পরবর্তী মডিউল:** [০২-প্রম্পট ইঞ্জিনিয়ারিং - GPT-5.2 দিয়ে প্রম্পট ইঞ্জিনিয়ারিং](../02-prompt-engineering/README.md)
---
-**নেভিগেশন:** [← পূর্বের: মডিউল ০০ - কুইক স্টার্ট](../00-quick-start/README.md) | [মেইনে ফিরে যান](../README.md) | [পরবর্তী: মডিউল ০২ - প্রম্পট ইঞ্জিনিয়ারিং →](../02-prompt-engineering/README.md)
+**নেভিগেশন:** [← মূল পৃষ্ঠায় ফিরে যান](../README.md) | [পরবর্তী: মডিউল ০২ - প্রম্পট ইঞ্জিনিয়ারিং →](../02-prompt-engineering/README.md)
---
-**তৈরি ঘোষণা**:
-এই নথিটি [Co-op Translator](https://github.com/Azure/co-op-translator) নামক AI অনুবাদ পরিষেবা ব্যবহার করে অনূদিত হয়েছে। আমরা যথাসাধ্য সঠিকতার চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদগুলিতে ভুল বা অপরিষ্কৃততা থাকতে পারে। মূল ভাষায় থাকা নথিটিই কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুনিশ্চিত করা উচিৎ। এই অনুবাদের ব্যবহারে যে কোনো ভুল বোঝাবুঝি বা ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই।
+**অস্বীকৃতি**:
+এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা শুদ্ধতার জন্য চেষ্টা করি, অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার স্বভাষায় কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে প্রয়োজনীয় ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই।
\ No newline at end of file
diff --git a/translations/bn/02-prompt-engineering/README.md b/translations/bn/02-prompt-engineering/README.md
index a9ad6b1cf..00e55cb29 100644
--- a/translations/bn/02-prompt-engineering/README.md
+++ b/translations/bn/02-prompt-engineering/README.md
@@ -1,85 +1,85 @@
# মডিউল ০২: GPT-5.2 সহ প্রম্পট ইঞ্জিনিয়ারিং
-## বিষয়বস্তু সূচি
-
-- [ভিডিও ওয়াকথ্রু](../../../02-prompt-engineering)
-- [আপনি যা শিখবেন](../../../02-prompt-engineering)
-- [পূর্বশর্ত](../../../02-prompt-engineering)
-- [প্রম্পট ইঞ্জিনিয়ারিং বোঝা](../../../02-prompt-engineering)
-- [প্রম্পট ইঞ্জিনিয়ারিং মৌলিক বিষয়াবলী](../../../02-prompt-engineering)
- - [জিরো-শট প্রম্পটিং](../../../02-prompt-engineering)
- - [ফিউ-শট প্রম্পটিং](../../../02-prompt-engineering)
- - [চেইন অফ থট](../../../02-prompt-engineering)
- - [রোল-ভিত্তিক প্রম্পটিং](../../../02-prompt-engineering)
- - [প্রম্পট টেমপ্লেটস](../../../02-prompt-engineering)
-- [উন্নত প্যাটার্নস](../../../02-prompt-engineering)
-- [অ্যাপ্লিকেশন চালান](../../../02-prompt-engineering)
-- [অ্যাপ্লিকেশন স্ক্রীনশটস](../../../02-prompt-engineering)
-- [প্যাটার্নস অন্বেষণ](../../../02-prompt-engineering)
- - [লো বনাম হাই ইগারনেস](../../../02-prompt-engineering)
- - [টাস্ক এক্সিকিউশন (টুল প্রিম্বলস)](../../../02-prompt-engineering)
- - [সেলফ-রিফ্লেক্টিং কোড](../../../02-prompt-engineering)
- - [স্ট্রাকচার্ড অ্যানালাইসিস](../../../02-prompt-engineering)
- - [মাল্টি-টার্ন চ্যাট](../../../02-prompt-engineering)
- - [পর্বক্রমে যুক্তি](../../../02-prompt-engineering)
- - [নিয়ন্ত্রিত আউটপুট](../../../02-prompt-engineering)
-- [আপনি আসলেই যা শিখছেন](../../../02-prompt-engineering)
-- [পরবর্তী ধাপ](../../../02-prompt-engineering)
+## বিষয়বস্তু তালিকা
+
+- [ভিডিও ওয়াকথ্রু](#ভিডিও-ওয়াকথ্রু)
+- [আপনি যা শিখবেন](#আপনি-যা-শিখবেন)
+- [পূর্বশর্তাবলী](#পূর্বশর্তাবলী)
+- [প্রম্পট ইঞ্জিনিয়ারিং বুঝুন](#প্রম্পট-ইঞ্জিনিয়ারিং-বুঝুন)
+- [প্রম্পট ইঞ্জিনিয়ারিংয়ের মৌলিক বিষয়াবলী](#প্রম্পট-ইঞ্জিনিয়ারিংয়ের-মৌলিক-বিষয়াবলী)
+ - [জিরো-শট প্রম্পটিং](#জিরো-শট-প্রম্পটিং)
+ - [ফিউ-শট প্রম্পটিং](#ফিউ-শট-প্রম্পটিং)
+ - [চেইন অফ থট্](#চেইন-অফ-থট)
+ - [রোল-ভিত্তিক প্রম্পটিং](#রোল-ভিত্তিক-প্রম্পটিং)
+ - [প্রম্পট টেমপ্লেটস](#প্রম্পট-টেমপ্লেটস)
+- [অগ্রগামী প্যাটার্নস](#অগ্রগামী-প্যাটার্নস)
+- [অ্যাপ্লিকেশন চালান](#অ্যাপ্লিকেশন-চালান)
+- [অ্যাপ্লিকেশনের স্ক্রীনশট](#অ্যাপ্লিকেশন-স্ক্রিনশট)
+- [প্যাটার্নস অন্বেষণ](#প্যাটার্নগুলি-পরীক্ষা-করা)
+ - [কম বনাম বেশি উৎসাহ](#low-বনাম-high-eagerness)
+ - [টাস্ক এক্সিকিউশন (টুল প্রিম্বলস)](#টাস্ক-এক্সেকিউশন-টুল-প্রিমেবলস)
+ - [সেলফ-রিফ্লেক্টিং কোড](#সেলফ-রিফ্লেক্টিং-কোড)
+ - [স্ট্রাকচার্ড অ্যানালাইসিস](#স্ট্রাকচার্ড-অ্যানালাইসিস)
+ - [মাল্টি-টার্ন চ্যাট](#মাল্টি-টার্ন-চ্যাট)
+ - [ধাপে ধাপে যুক্তি](#ধাপে-ধাপে-যুক্তি)
+ - [সীমাবদ্ধ আউটপুট](#সংকীর্ণ-আউটপুট)
+- [আপনি আসলে কী শিখছেন](#আপনি-আসলেই-কি-শিখছেন)
+- [পরবর্তী ধাপ](#পরবর্তী-ধাপ)
## ভিডিও ওয়াকথ্রু
-এই লাইভ সেশনটি দেখুন যা ব্যাখ্যা করে কীভাবে এই মডিউল দিয়ে শুরু করবেন:
+এই লাইভ সেশনটি দেখুন যা এই মডিউল শুরু করার পদ্ধতি ব্যাখ্যা করে:
## আপনি যা শিখবেন
-নিম্নলিখিত ডায়াগ্রামটি এই মডিউলে আপনি যে মূল বিষয় ও দক্ষতা অর্জন করবেন তার একটি ওভারভিউ প্রদান করে — প্রম্পট পরিমার্জন কৌশল থেকে শুরু করে আপনি যে পর্বক্রমভিত্তিক কাজের ধারা অনুসরণ করবেন তা পর্যন্ত।
+নিম্নলিখিত চিত্রটি এই মডিউলে আপনি যা শিখবেন তার মূল বিষয় এবং দক্ষতার একটি সংক্ষিপ্ত বিবরণ প্রদান করে — প্রম্পট রিফাইনমেন্ট কৌশলগুলি থেকে শুরু করে আপনি অনুসরণ করবেন এমন পর্যায়ক্রমিক ওয়ার্কফ্লো পর্যন্ত।
-পূর্ববর্তী মডিউলগুলিতে, আপনি GitHub মডেলগুলির সাথে LangChain4j বেসিক ইন্টারঅ্যাকশন অন্বেষণ করেছেন এবং দেখেছেন কিভাবে মেমোরি Azure OpenAI-র সাথে কথোপকথনের AI সক্ষম করে। এখন আমরা ফোকাস করব প্রশ্ন করার পদ্ধতি — অর্থাৎ প্রম্পট নিজেই — Azure OpenAI-এর GPT-5.2 ব্যবহার করে। আপনার প্রম্পট গঠন করার ধরণ আপনার যে প্রতিক্রিয়া পাবেন তার গুণমানকে নাটকীয়ভাবে প্রভাবিত করে। আমরা মৌলিক প্রম্পটিং কৌশলগুলি পর্যালোচনা দিয়ে শুরু করব, তারপর আটটি উন্নত প্যাটার্নে যাব যা GPT-5.2-এর ক্ষমতাগুলি পুরোপুরি কাজে লাগায়।
+পূর্ববর্তী মডিউলে, আপনি দেখেছেন কিভাবে মেমোরি Azure OpenAI সহ কথোপকথন ইউআই সক্ষম করে। এখন আমরা ফোকাস করব কিভাবে আপনি প্রশ্ন করবেন — অর্থাৎ প্রম্পট নিজেই — Azure OpenAI এর GPT-5.2 ব্যবহার করে। আপনি যেভাবে প্রম্পটগুলো গঠন করবেন তা প্রাপ্ত উত্তরগুলির গুণগত মানে ব্যাপক প্রভাব ফেলে। আমরা শুরু করব মৌলিক প্রম্পটিং কৌশলগুলোর পর্যালোচনা দিয়ে, তারপর এগিয়ে যাব আটটি উন্নত প্যাটার্নের দিকে যা GPT-5.2 এর সক্ষমতাগুলোর পূর্ণ ব্যবহার করে।
-আমরা GPT-5.2 ব্যবহার করব কারণ এটি যুক্তি নিয়ন্ত্রণ পরিচয় করায় - আপনি মডেলকে বলতে পারেন কতটা চিন্তা করতে হবে উত্তর দেওয়ার আগে। এটি বিভিন্ন প্রম্পটিং কৌশল আরও স্পষ্ট করে এবং আপনাকে বুঝতে সাহায্য করে কখন কোন পদ্ধতি ব্যবহার করবেন। আরও, GitHub মডেলগুলোর তুলনায় GPT-5.2-এর জন্য Azure-এর কম রেট লিমিট সুবিধাও পাব।
+আমরা GPT-5.2 ব্যবহার করব কারণ এটি যুক্তি নিয়ন্ত্রণ পরিচয় করায় — আপনি মডেলকে বলতে পারবেন উত্তর দেবার আগে কতটুকু চিন্তা করতে হবে। এটি বিভিন্ন প্রম্পটিং স্ট্র্যাটেজি আরও স্পষ্ট করে তোলে এবং আপনাকে বুঝতে সাহায্য করে কখন কোন পদ্ধতি ব্যবহার করবেন।
-## পূর্বশর্ত
+## পূর্বশর্তাবলী
-- মডিউল ০১ সম্পন্ন (Azure OpenAI রিসোর্স মোতায়েন)
-- রুট ডিরেক্টরিতে `.env` ফাইল Azure শংসাপত্র সহ (মডিউল ০১-এ `azd up` দ্বারা তৈরি)
+- মডিউল ০১ সম্পন্ন হয়েছে (Azure OpenAI রিসোর্স মোতায়েন করা হয়েছে)
+- রুট ডিরেক্টরিতে `.env` ফাইল আছে Azure ক্রেডেনশিয়ালসহ (মডিউল ০১ এ `azd up` দ্বারা তৈরি)
-> **ট্রিক:** আপনি যদি মডিউল ০১ শেষ না করে থাকেন, প্রথমে সেখানে দেয়া ডিপ্লয়মেন্ট নির্দেশাবলী অনুসরণ করুন।
+> **দ্রষ্টব্য:** যদি আপনি মডিউল ০১ সম্পন্ন না করে থাকেন, তাহলে আগে সেখানে ডিপ্লয়মেন্টের নির্দেশাবলী অনুসরণ করুন।
-## প্রম্পট ইঞ্জিনিয়ারিং বোঝা
+## প্রম্পট ইঞ্জিনিয়ারিং বুঝুন
-মূলত, প্রম্পট ইঞ্জিনিয়ারিং হল অস্পষ্ট নির্দেশনা এবং সুনির্দিষ্ট নির্দেশনার মধ্যে পার্থক্য, নিচের তুলনাটি তা দেখায়।
+মূলত, প্রম্পট ইঞ্জিনিয়ারিং হল অস্পষ্ট নির্দেশনা এবং নির্ভুল নির্দেশনার মধ্যে পার্থক্য, নিচের তুলনাটি দেখিয়েছে তা।
-প্রম্পট ইঞ্জিনিয়ারিং মানে এমন ইনপুট টেক্সট ডিজাইন করা যা নিয়মিতভাবে আপনাকে আপনার প্রয়োজনীয় ফলাফল দেয়। এটি শুধুমাত্র প্রশ্ন করার ব্যাপার নয়—এটি এমনভাবে অনুরোধ সাজানোর ব্যাপার যাতে মডেল স্পষ্টভাবে বুঝতে পারে আপনি কী চান এবং কিভাবে তা সরবরাহ করতে হবে।
+প্রম্পট ইঞ্জিনিয়ারিং হচ্ছে এমন ইনপুট টেক্সট ডিজাইন করা যা ধারাবাহিকভাবে আপনাকে প্রয়োজনীয় ফলাফল দেয়। এটি শুধু প্রশ্ন করার কথা নয় — এটি এমনভাবে অনুরোধগুলো রচনা করা যাতে মডেল স্পষ্টভাবে বুঝতে পারে আপনি ঠিক কী চান এবং কীভাবে তা সরবরাহ করা উচিত।
-এটি ভাবুন আপনার সহকর্মীকে নির্দেশ দেওয়ার মত। "বাগ ঠিক করো" অস্পষ্ট। "UserService.java ফাইলে ৪৫ নম্বর লাইনে null পয়েন্টার এক্সসেপশন ঠিক করো null চেক যোগ করে" সুনির্দিষ্ট। ভাষার মডেলও একই রকম কাজ করে—বিশেষত্ব এবং গঠন গুরুত্বপূর্ণ।
+একজন সহকর্মীকে নির্দেশ দেওয়ার মত চিন্তা করুন। "বাগ ফিক্স করুন" অস্পষ্ট। "UserService.java লাইনের ৪৫-এ নাল পয়েন্টার একসেপশন ফিক্স করতে নাল চেক যোগ করুন" স্পষ্ট। ভাষার মডেলগুলো একই রকম কাজ করে — নির্দিষ্টতা এবং গঠন গুরুত্বপূর্ণ।
-নিচের ডায়াগ্রামটি দেখায় কীভাবে LangChain4j এই ছবি টেপে প্রম্পট প্যাটার্নগুলিকে মডেলের সাথে সংযুক্ত করে SystemMessage এবং UserMessage ব্লকগুলোর মাধ্যমে।
+নিচের চিত্রটি দেখায় কিভাবে LangChain4j এই চিত্রে ফিট করে — SystemMessage এবং UserMessage নির্মাণ ব্লকে আপনার প্রম্পট প্যাটার্নগুলো মডেলের সাথে সংযুক্ত করে।
-LangChain4j অবকাঠামো সরবরাহ করে — মডেল সংযোগ, মেমোরি, ও মেসেজ টাইপ — আর প্রম্পট প্যাটার্ন হল সাবধানে গঠিত পাঠ্য যা আপনি ওই অবকাঠামোর মধ্যে পাঠান। মূল ব্লক হল `SystemMessage` (যা AI এর আচরণ ও ভূমিকা নির্ধারণ করে) এবং `UserMessage` (যা আপনার প্রকৃত অনুরোধ বহন করে)।
+LangChain4j প্রদান করে অবকাঠামো — মডেল সংযোগ, মেমোরি, এবং মেসেজ প্রকার — যখন প্রম্পট প্যাটার্নগুলো শুধু সাবধানে গঠিত টেক্সট যা আপনি ঐ অবকাঠামোর মাধ্যমে পাঠান। মূল নির্মাণ ব্লক হল `SystemMessage` (যা AI এর আচরণ এবং ভূমিকা সেট করে) এবং `UserMessage` (যা আপনার প্রকৃত অনুরোধ বহন করে)।
-## প্রম্পট ইঞ্জিনিয়ারিং মৌলিক বিষয়াবলী
+## প্রম্পট ইঞ্জিনিয়ারিংয়ের মৌলিক বিষয়াবলী
-নিম্নলিখিত পাঁচটি মূল কৌশল কার্যকর প্রম্পট ইঞ্জিনিয়ারিংয়ের ভিত্তি গঠন করে। প্রত্যেকটি ভাষার মডেলের সাথে আপনার যোগাযোগের একটি ভিন্ন দিক নজর দেয়।
+নিম্নলিখিত পাঁচটি মূল কৌশল কার্যকর প্রম্পট ইঞ্জিনিয়ারিংয়ের ভিত্তি গঠন করে। প্রতিটি ভাষার মডেলগুলোর সাথে আপনার যোগাযোগের একটি ভিন্ন দিক সম্বোধন করে।
-এই মডিউলের উন্নত প্যাটার্নগুলিতে প্রবেশ করার আগে, চলুন পাঁচটি মৌলিক প্রম্পটিং কৌশল পর্যালোচনা করি। এগুলো হল সেই নির্মাণ ব্লক যা প্রতিটি প্রম্পট ইঞ্জিনিয়ারকে জানা উচিত। আপনি যদি ইতিমধ্যে [Quick Start মডিউল](../00-quick-start/README.md#2-prompt-patterns) অনুসরণ করে থাকেন, তাহলে এগুলো দেখতে পেয়েছেন — এগুলোর পেছনের ধারনামূলক কাঠামো এখানে আছে।
+এই মডিউলে উন্নত প্যাটার্নগুলিতে প্রবেশ করার আগে, আসুন পাঁচটি মৌলিক প্রম্পটিং কৌশল পুনরালোচনা করি। এগুলো হল সেই নির্মাণ ব্লক যা প্রতিটি প্রম্পট ইঞ্জিনিয়ারকে জানা উচিত।
### জিরো-শট প্রম্পটিং
-সবচেয়ে সোজা পদ্ধতি: মডেলকে কোনো উদাহরণ ছাড়াই সরাসরি নির্দেশ দিন। মডেল সম্পূর্ণরূপে তার প্রশিক্ষণের ওপর নির্ভর করে কাজ বুঝে এবং সম্পাদন করে। এটি সোজা অনুরোধের ক্ষেত্রে ভালো কাজ করে যেখানে প্রত্যাশিত আচরণ স্পষ্ট।
+সবচেয়ে সহজ পদ্ধতি: মডেলকে সরাসরি কোনো উদাহরণ ছাড়াই নির্দেশ দেওয়া। মডেল সম্পূর্ণরূপে তার প্রশিক্ষণের ওপর নির্ভর করে কাজটি বোঝে এবং সম্পাদন করে। এটি সহজ রকমের অনুরোধের জন্য ভালো কাজ করে যেখানে প্রত্যাশিত আচরণ স্পষ্ট।
-*উদাহরণ ছাড়া সরাসরি নির্দেশ — মডেল শুধু নির্দেশ থেকে টাস্ক বুজে নেয়*
+*উদাহরণ ছাড়া সরাসরি নির্দেশনা — মডেল শুধুমাত্র নির্দেশ থেকে কাজটি অনুমান করে*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
@@ -87,15 +87,15 @@ String response = model.chat(prompt);
// প্রতিক্রিয়া: "ইতিবাচক"
```
-**কখন ব্যবহার করবেন:** সরল শ্রেণীবিভাগ, সরাসরি প্রশ্ন, অনুবাদ, অথবা এমন কোনো টাস্ক যেখানে অতিরিক্ত নির্দেশনার প্রয়োজন নেই।
+**কখন ব্যবহার করবেন:** সাধারণ শ্রেণিবিন্যাস, সরাসরি প্রশ্ন, অনুবাদ বা এমন কোনো কাজ যা মডেল অতিরিক্ত নির্দেশনা ছাড়া পরিচালনা করতে পারে।
### ফিউ-শট প্রম্পটিং
-উদাহরণ দিন যা মডেলকে আপনি যে প্যাটার্ন অনুসরণ করতে চান তা প্রদর্শন করে। মডেল আপনার উদাহরণ থেকে প্রত্যাশিত ইনপুট-আউটপুট ফর্ম্যাট শিখে নতুন ইনপুটের ওপর প্রয়োগ করে। এটি উন্নত সামঞ্জস্যতা দেয় যখন কাঙ্ক্ষিত ফর্ম্যাট বা আচরণ অপ্রচলিত।
+আপনার কাঙ্ক্ষিত প্যাটার্নটি মডেলকে শেখানোর জন্য উদাহরণ প্রদান করুন। মডেল আপনার উদাহরণ থেকে প্রত্যাশিত ইনপুট-আউটপুট ফরম্যাট শিখে এবং নতুন ইনপুটে তা প্রয়োগ করে। এটি এমন কাজের জন্য ধারাবাহিকতা উল্লেখযোগ্যভাবে বাড়ায় যেখানে কাঙ্ক্ষিত ফরম্যাট বা আচরণ স্পষ্ট নয়।
-*উদাহরণ থেকে শেখা — মডেল প্যাটার্ন চিনে নতুন ইনপুটে প্রয়োগ করে*
+*উদাহরণের মাধ্যমে শেখা — মডেল প্যাটার্ন চিনে নতুন ইনপুটে প্রয়োগ করে*
```java
String prompt = """
@@ -112,15 +112,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**কখন ব্যবহার করবেন:** কাস্টম শ্রেণীবিভাগ, সঙ্গতিপূর্ণ ফরম্যাটিং, ডোমেইন-নির্দিষ্ট কাজ, অথবা যখন জিরো-শট ফলাফল অনিয়মিত হয়।
+**কখন ব্যবহার করবেন:** কাস্টম শ্রেণিবিন্যাস, ধারাবাহিক ফরম্যাটিং, ডোমেইন-নির্দিষ্ট কাজ অথবা যখন জিরো-শট ফলাফল অসম্ভাব্য বা অসঙ্গত হয়।
### চেইন অফ থট
-মডেলকে তার যুক্তি পর্বক্রমে দেখাতে বলুন। সরাসরি উত্তর দেওয়ার পরিবর্তে মডেল সমস্যা ভেঙে প্রতিটি অংশ স্পষ্টভাবে ব্যাখ্যা করে। এটি গণিত, লজিক, ও বহু-পর্ব যুক্তি কার্যক্রমে নির্ভুলতা বাড়ায়।
+মডেলকে ধাপে ধাপে তার যুক্তি প্রদর্শন করতে বলেছেন। সরাসরি উত্তর দেয়ার পরিবর্তে, মডেল সমস্যাটি ভেঙে প্রতিটি অংশ স্পষ্টভাবে আলোচনা করে কাজ করে। এটি গণিত, যুক্তি ও বহু-পর্যায় যুক্তি সম্পাদনে নির্ভুলতা বাড়ায়।
-*পর্বক্রমে যুক্তি — জটিল সমস্যাকে স্পষ্ট যৌক্তিক ধাপে ভাঙা*
+*ধাপে ধাপে যুক্তি — জটিল সমস্যাগুলো স্পষ্ট যুক্তিসমূহে ভাঙা*
```java
String prompt = """
@@ -130,18 +130,18 @@ String prompt = """
Let's solve this step-by-step:
""";
String response = model.chat(prompt);
-// মডেলটি প্রদর্শন করে: ১৫ - ৮ = ৭, তারপর ৭ + ১২ = ১৯ আপেল
+// মডেলটি দেখায়: ১৫ - ৮ = ৭, তারপর ৭ + ১২ = ১৯ আপেল
```
-**কখন ব্যবহার করবেন:** গাণিতিক সমস্যাগুলি, যুক্তি পাজল, ডিবাগিং, অথবা এমন টাস্ক যেখানে যুক্তি প্রক্রিয়া প্রদর্শন সঠিকতা ও বিশ্বাসযোগ্যতা বাড়ায়।
+**কখন ব্যবহার করবেন:** গণিত সমস্যা, যুক্তি ধাঁধা, ডিবাগিং বা এমন কোনো কাজ যেখানে যুক্তি প্রক্রিয়া দেখানো নির্ভুলতা ও বিশ্বাসযোগ্যতা বাড়ায়।
### রোল-ভিত্তিক প্রম্পটিং
-প্রশ্ন করার আগে AI-এর জন্য একটি ব্যক্তিত্ব বা ভূমিকা নির্ধারণ করুন। এটি প্রসঙ্গ দেয় যা প্রতিক্রিয়ার সুর, গভীরতা, ও ফোকাস গঠন করে। একজন "সফটওয়্যার আর্কিটেক্ট" এর পরামর্শ "জুনিয়র ডেভেলপার" বা "সিকিউরিটি অডিটর" থেকে আলাদা।
+প্রশ্ন করার আগে AI এর জন্য একটি persona বা ভূমিকা সেট করুন। এটি প্রসঙ্গ প্রদান করে যা উত্তরের টোন, গভীরতা এবং ফোকাস নির্ধারণ করে। যেমন "সফটওয়্যার আর্কিটেক্ট" একটি আলাদা পরামর্শ দেয় "জুনিয়র ডেভেলপার" বা "সিকিউরিটি অডিটর" থেকে।
-*প্রসঙ্গ ও ব্যক্তিত্ব নির্ধারণ — একই প্রশ্ন ভিন্ন ভূমিকার ওপর ভিত্তি করে ভিন্ন উত্তর পায়*
+*প্রসঙ্গ এবং persona নির্ধারণ — একই প্রশ্ন ভূমিকা অনুযায়ী ভিন্ন উত্তর পায়*
```java
String prompt = """
@@ -157,15 +157,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**কখন ব্যবহার করবেন:** কোড রিভিউ, টিউটরিং, ডোমেইন-নির্দিষ্ট বিশ্লেষণ, অথবা নির্দিষ্ট দক্ষতা স্তর বা দৃষ্টিভঙ্গির উপযোগী উত্তর চাইলে।
+**কখন ব্যবহার করবেন:** কোড রিভিউ, টিউটোরিয়াল, ডোমেইন-নির্দিষ্ট বিশ্লেষণ অথবা যখন নির্দিষ্ট দক্ষতা বা উৎস থেকে প্রাসঙ্গিক উত্তর প্রয়োজন।
### প্রম্পট টেমপ্লেটস
-ভারি প্লেসহোল্ডার সহ পুনঃব্যবহারযোগ্য প্রম্পট তৈরি করুন। প্রতি বার নতুন প্রম্পট লেখার পরিবর্তে একবার টেমপ্লেট ডিফাইন করুন এবং বিভিন্ন মান পূরণ করুন। LangChain4j-এর `PromptTemplate` ক্লাস `{{variable}}` সিনট্যাক্স দিয়ে এটিকে সহজ করে তোলে।
+ভেরিয়েবল প্লেসহোল্ডার সহ পুনঃব্যবহারযোগ্য প্রম্পট তৈরি করুন। প্রতি বার নতুন প্রম্পট লেখার পরিবর্তে, একবার একটি টেমপ্লেট সংজ্ঞায়িত করুন এবং ভিন্ন মান দিয়ে পূরণ করুন। LangChain4j এর `PromptTemplate` ক্লাস এটি সহজ করে `{{variable}}` সিনট্যাক্স সহ।
-*পুনঃব্যবহারযোগ্য প্রম্পটস সহ প্লেসহোল্ডার — এক টেমপ্লেট, অনেক ব্যবহার*
+*প্লেসহোল্ডারসহ পুনঃব্যবহারযোগ্য প্রম্পট — একটি টেমপ্লেট, বহুবিধ ব্যবহার*
```java
PromptTemplate template = PromptTemplate.from(
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**কখন ব্যবহার করবেন:** বিভিন্ন ইনপুটসহ পুনরাবৃত্ত প্রশ্ন, ব্যাচ প্রোসেসিং, পুনঃব্যবহারযোগ্য AI ওয়ার্কফ্লো তৈরি, অথবা যেখানে প্রম্পট কাঠামো একই থাকে কিন্তু ডেটা পরিবর্তিত হয়।
+**কখন ব্যবহার করবেন:** বিভিন্ন ইনপুটের জন্য পুনরাবৃত্ত প্রশ্ন, ব্যাচ প্রসেসিং, পুনঃব্যবহারযোগ্য AI ওয়ার্কফ্লো তৈরি, বা যেকোনো পরিস্থিতি যেখানে প্রম্পটের কাঠামো একই থাকে কিন্তু ডেটা পরিবর্তিত হয়।
---
-এই পাঁচটি মৌলিক বিষয় আপনার জন্য একটি শক্তিশালী সরঞ্জাম প্যাকেজ দেয় অধিকাংশ প্রম্পটিং কাজের জন্য। বাকিটা এই মডিউল জুড়ে আপনাকে আটটি উন্নত প্যাটার্ন শেখাবে যা GPT-5.2-এর যুক্তি নিয়ন্ত্রণ, আত্ম-মূল্যায়ন, এবং কাঠামোবদ্ধ আউটপুট সক্ষমতা ব্যবহার করে।
+এই পাঁচটি মৌলিক বিষয় আপনাকে অধিকাংশ প্রম্পটিং কাজের জন্য একটি শক্তিশালী সরঞ্জাম প্রদান করে। এই মডিউলের বাকিটা এগিয়ে নিয়ে যাবে **আটটি উন্নত প্যাটার্নের মাধ্যমে** যা GPT-5.2 এর যুক্তি নিয়ন্ত্রণ, স্ব-মূল্যায়ন এবং স্ট্রাকচার্ড আউটপুট ক্ষমতাগুলো কাজে লাগায়।
-## উন্নত প্যাটার্নস
+## অগ্রগামী প্যাটার্নস
-মৌলিক বিষয়গুলি আচ্ছাদিত হলে, চলুন শুরু করি আটটি উন্নত প্যাটার্ন দিয়ে যা এই মডিউলকে অনন্য করে তোলে। সব সমস্যার জন্য একই পদ্ধতি প্রয়োজন হয় না। কিছু প্রশ্ন দ্রুত উত্তর চাই, অন্যগুলি গভীর চিন্তা। কিছু দৃশ্যমান যুক্তি চাই, কিছু শুধু ফলাফল। নিচের প্রতিটি প্যাটার্ন ভিন্ন পরিস্থিতির জন্য অপ্টিমাইজড — আর GPT-5.2-এর যুক্তি নিয়ন্ত্রণ পার্থক্যগুলো আরও স্পষ্ট করে তোলে।
+মৌলিক বিষয়গুলো আচ্ছাদিত করার পর, চলুন এগিয়ে যাই আটটি উন্নত প্যাটার্নের দিকে যা এই মডিউলটিকে অনন্য করে তোলে। সব সমস্যার জন্য একই পদ্ধতি প্রয়োজন হয় না। কিছু প্রশ্ন দ্রুত উত্তর প্রয়োজন, কিছু গভীর চিন্তা প্রয়োজন। কিছুতে দৃশ্যমান যুক্তি দরকার, আবার কিছুতে শুধু ফলাফলই যথেষ্ট। নিচের প্রতিটি প্যাটার্ন ভিন্ন প্রেক্ষাপটের জন্য অপ্টিমাইজড — এবং GPT-5.2 এর যুক্তি নিয়ন্ত্রণ পার্থক্যগুলো আরো স্পষ্ট করে।
-*আটটি প্রম্পট ইঞ্জিনিয়ারিং প্যাটার্ন এবং তাদের ব্যবহারের ক্ষেত্রে ওভারভিউ*
+*আটটি প্রম্পট ইঞ্জিনিয়ারিং প্যাটার্ন এবং তাদের ব্যবহার ক্ষেত্রের সারাংশ*
-GPT-5.2 এই প্যাটার্নগুলিতে আরেকটি মাত্রা যোগ করে: *যুক্তি নিয়ন্ত্রণ*। নিচের স্লাইডার দেখায় কিভাবে আপনি মডেলের চিন্তার মাত্রা সামঞ্জস্য করতে পারেন — দ্রুত, সরাসরি উত্তর থেকে শুরু করে গভীর ও বিস্তৃত বিশ্লেষণ পর্যন্ত।
+GPT-5.2 যোগ করেছে আরেকটি মাত্রা: *যুক্তি নিয়ন্ত্রণ*। নিচের স্লাইডারটি দেখায় কিভাবে আপনি মডেলের চিন্তা চেষ্টাকে সামঞ্জস্য করতে পারেন — দ্রুত, সরাসরি উত্তর থেকে গভীর, বিস্তৃত বিশ্লেষণ পর্যন্ত।
-*GPT-5.2-এর যুক্তি নিয়ন্ত্রণ আপনাকে নির্দিষ্ট করতে দেয় মডেল কতটা চিন্তা করবে — দ্রুত সরাসরি উত্তর থেকে গভীর অনুসন্ধান পর্যন্ত*
+*GPT-5.2 এর যুক্তি নিয়ন্ত্রণ আপনাকে মডেল কতটা চিন্তা করবে তা নির্ধারণ করতে দেয় — দ্রুত সরাসরি উত্তর থেকে গভীর অনুসন্ধান পর্যন্ত*
-**লো ইগারনেস (দ্রুত ও ফোকাসড)** - সরল প্রশ্নের জন্য যেখানে আপনি দ্রুত, সরাসরি উত্তর চান। মডেল সর্বোচ্চ ২ ধাপ চিন্তা করে। গণনা, লুকআপ, বা সরল প্রশ্নের জন্য ব্যবহার করুন।
+**কম উৎসাহ (দ্রুত ও কেন্দ্রিত)** - সরল প্রশ্নের জন্য যেখানে দ্রুত, সরাসরি উত্তর চান। মডেল সর্বাধিক ২ ধাপ যুক্তি করে। এটি ব্যবহার করুন গণনায়, লুকআপে বা সহজ প্রশ্নের জন্য।
```java
String prompt = """
@@ -219,12 +219,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> 💡 **GitHub Copilot দিয়ে এক্সপ্লোর করুন:** [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) খুলে জিজ্ঞাসা করুন:
-> - "লো ইগারনেস এবং হাই ইগারনেস প্রম্পটিং প্যাটার্নগুলোর মধ্যে পার্থক্য কী?"
-> - "প্রম্পটে XML ট্যাগগুলো কীভাবে AI-এর প্রতিক্রিয়া গঠন করতে সাহায্য করে?"
-> - "সেলফ-রিফ্লেকশন প্যাটার্ন কখন আর সরাসরি নির্দেশ কখন ব্যবহার করব?"
+> 💡 **GitHub Copilot দিয়ে পরীক্ষা করুন:** [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) খুলুন এবং জিজ্ঞাসা করুন:
+> - "কম উৎসাহ এবং বেশি উৎসাহ প্রম্পট প্যাটার্নের মধ্যে পার্থক্য কী?"
+> - "প্রম্পটে XML ট্যাগগুলি কিভাবে AI এর প্রতিক্রিয়া গঠন করতে সাহায্য করে?"
+> - "সেলফ-রিফ্লেকশন প্যাটার্ন কখন ব্যবহার করব বনাম সরাসরি নির্দেশ?"
-**হাই ইগারনেস (গভীর ও বিস্তৃত)** - জটিল সমস্যার জন্য যেখানে আপনি ব্যাপক বিশ্লেষণ চান। মডেল বিস্তারিতভাবে তদন্ত করে যুক্তি প্রদর্শন করে। সিস্টেম ডিজাইন, আর্কিটেকচার সিদ্ধান্ত, বা জটিল গবেষণার জন্য ব্যবহার করুন।
+**বেশি উৎসাহ (গভীর ও বিস্তারিত)** - জটিল সমস্যার জন্য যেখানে বিস্তৃত বিশ্লেষণ প্রয়োজন। মডেল গভীরভাবে অনুসন্ধান করে এবং বিস্তারিত যুক্তি প্রদর্শন করে। এটি ব্যবহার করুন সিস্টেম ডিজাইন, আর্কিটেকচার সিদ্ধান্ত, বা জটিল গবেষণার জন্য।
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**টাস্ক এক্সিকিউশন (পর্বক্রমে অগ্রগতি)** - বহু পর্যায়ের ওয়ার্কফ্লো জন্য। মডেল প্রথমে প্ল্যান দেয়, কাজের সময় প্রতিটি ধাপ বর্ণনা করে, তারপর সারাংশ দেয়। মাইগ্রেশন, বাস্তবায়ন বা যেকোনো বহু-পর্বের কাজের জন্য ব্যবহার করুন।
+**টাস্ক এক্সিকিউশন (ধাপে ধাপে অগ্রগতি)** - বহু-ধাপীয় ওয়ার্কফ্লোর জন্য। মডেল একটি প্রাথমিক পরিকল্পনা দেয়, কাজ করার সময় প্রতিটি ধাপ বর্ণনা করে, তারপর একটি সারসংক্ষেপ দেয়। এটি ব্যবহার করুন মাইগ্রেশন, বাস্তবায়ন বা যেকোনো বহু-পর্যায় প্রক্রিয়ার জন্য।
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-চেইন-অফ-থট প্রম্পটিং মডেলকে স্পষ্টভাবে তার যুক্তি প্রক্রিয়া দেখাতে বলে, যা জটিল কাজের নির্ভুলতা বাড়ায়। পর্বক্রমে যুক্তি মানুষের পাশাপাশি AI-কে লজিক বুঝতে সাহায্য করে।
+চেইন-অফ-থট প্রম্পটিং স্পষ্টভাবে মডেলকে তার যুক্তি প্রক্রিয়া দেখানোর অনুরোধ করে, যা জটিল কাজের জন্য নির্ভুলতা বাড়ায়। ধাপে ধাপে ভাঙ্গা মানব এবং AI উভয়ের জন্য যুক্তি বোঝা সহজ করে।
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) চ্যাটের সাথে চেষ্টা করুন:** এই প্যাটার্ন নিয়ে জিজ্ঞাসা করুন:
-> - "দীর্ঘকাল চলমান অপারেশনের জন্য টাস্ক এক্সিকিউশন প্যাটার্ন কিভাবে অভিযোজিত হবে?"
-> - "প্রোডাকশনে টুল প্রিম্বল গঠন করার সেরা পদ্ধতিগুলো কী?"
-> - "UI তে মধ্যবর্তী অগ্রগতি আপডেট ধরার এবং প্রদর্শনের উপায় কী?"
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) চ্যাট দিয়ে চেষ্টা করুন:** এই প্যাটার্ন সম্পর্কে প্রশ্ন করুন:
+> - "দীর্ঘমেয়াদি কার্যক্রমের জন্য টাস্ক এক্সিকিউশন প্যাটার্ন কিভাবে অভিযোজিত করব?"
+> - "প্রোডাকশন অ্যাপ্লিকেশনে টুল প্রিম্বলস structuring এর সেরা অনুশীলন কী?"
+> - "কি করে UI তে অন্তর্বর্তী অগ্রগতি আপডেট ক্যাপচার এবং প্রদর্শন করব?"
-নিচের ডায়াগ্রামটি দেখায় এই Plan → Execute → Summarize ওয়ার্কফ্লো।
+নিচের চিত্রটি এই Plan → Execute → Summarize ওয়ার্কফ্লোটি প্রদর্শন করে।
-*পর্বক্রমে টাস্কের জন্য Plan → Execute → Summarize ওয়ার্কফ্লো*
+*বহু-ধাপীয় কাজের জন্য Plan → Execute → Summarize ওয়ার্কফ্লো*
-**সেলফ-রিফ্লেক্টিং কোড** - প্রোডাকশন মানের কোড তৈরি করার জন্য। মডেল উৎপাদন মান অনুসরণ করে কোড জেনারেট করে যা সঠিক ত্রুটি হ্যান্ডলিং সহ। নতুন ফিচার বা সার্ভিস নির্মাণের জন্য ব্যবহার করুন।
+**সেলফ-রিফ্লেক্টিং কোড** - প্রোডাকশন-মানের কোড তৈরির জন্য। মডেল প্রোডাকশন মানদণ্ড অনুসারে কোড তৈরি করে যথাযথ ত্রুটি পরিচালনার সাথে। এটি ব্যবহার করুন নতুন ফিচার বা সার্ভিস তৈরি করার সময়।
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-নিচের ডায়াগ্রামটি দেখায় এই পুনরাবৃত্তিমূলক উন্নতি চক্র — জেনারেট, মূল্যায়ন, দুর্বলতা চিহ্নিতকরণ, ও পরিমার্জন যতক্ষণ না কোড প্রোডাকশন মান পূরণ করে।
+নিচের চিত্রটি দেখায় এই পুনরাবৃত্তিমূলক উন্নয়ন চক্র — তৈরি, মূল্যায়ন, দুর্বলতা নিরূপণ, এবং পরিমার্জন যতক্ষণ না কোড প্রোডাকশন মান পূরণ করে।
-*পুনরাবৃত্তিমূলক উন্নতি চক্র - তৈরি করুন, মূল্যায়ন করুন, সমস্যা ধরুন, উন্নত করুন, পুনরাবৃত্তি করুন*
+*পুনরাবৃত্তিমূলক উন্নয়ন চক্র - তৈরি, মূল্যায়ন, সমস্যা চিহ্নিতকরণ, উন্নয়ন, পুনরাবৃত্তি*
-**স্ট্রাকচার্ড অ্যানালাইসিস** - সচ্ছল মূল্যায়নের জন্য। মডেল কোড পর্যালোচনা করে একটি নির্দিষ্ট কাঠামো অনুসারে (সঠিকতা, অনুশীলন, কর্মক্ষমতা, নিরাপত্তা, রক্ষণাবেক্ষণযোগ্যতা)। কোড রিভিউ বা গুণমান নিরূপণের জন্য ব্যবহার করুন।
+**স্ট্রাকচার্ড অ্যানালাইসিস** - ধারাবাহিক মূল্যায়নের জন্য। মডেল একটি নির্দিষ্ট কাঠামো (সঠিকতা, অনুশীলন, কর্মক্ষমতা, নিরাপত্তা, রক্ষণাবেক্ষণযোগ্যতা) অনুসারে কোড পর্যালোচনা করে। এটি ব্যবহার করুন কোড রিভিউ বা গুণমান যাচাইয়ের জন্য।
```java
String prompt = """
@@ -355,17 +355,17 @@ String response = chatModel.chat(prompt);
```
> **🤖 [GitHub Copilot](https://github.com/features/copilot) চ্যাট দিয়ে চেষ্টা করুন:** স্ট্রাকচার্ড অ্যানালাইসিস সম্পর্কে জিজ্ঞাসা করুন:
-> - "বিভিন্ন ধরনের কোড রিভিউ জন্য আমি কিভাবে বিশ্লেষণ কাঠামো কাস্টমাইজ করব?"
-> - "স্ট্রাকচার্ড আউটপুট প্রোগ্রাম্যাটিকভাবে পার্স এবং প্রয়োগের সেরা উপায় কী?"
-> - "কিভাবে নিশ্চিত করব বিভিন্ন রিভিউ সেশনে ধারাবাহিক গুরুতর স্তর থাকবে?"
+> - "বিভিন্ন ধরনের কোড রিভিউয়ের জন্য অ্যানালাইসিস ফ্রেমওয়ার্ক কিভাবে কাস্টমাইজ করব?"
+> - "স্ট্রাকচার্ড আউটপুট প্রোগ্রাম্যাটিক্যালি পার্স ও অ্যাক্ট করা সেরা উপায় কী?"
+> - "কিভাবে বিভিন্ন রিভিউ সেশনে ধারাবাহিক সেবার স্তর নিশ্চিত করব?"
-নিম্নলিখিত ডায়াগ্রাম দেখায় কিভাবে এই কাঠামো একটি কোড রিভিউকে ধারাবাহিক বিভাগে গুরুতর স্তরসহ সংগঠিত করে।
+নিচের চিত্রটি দেখায় কীভাবে এই কাঠামো কোড রিভিউকে ধারাবাহিক বিভাগ ও সেবার স্তরে সংগঠিত করে।
-*গুরুত্ব স্তরের সাথে ধারাবাহিক কোড রিভিউয়ের ফ্রেমওয়ার্ক*
+*সেবার স্তর সহ ধারাবাহিক কোড রিভিউর কাঠামো*
-**মাল্টি-টার্ন চ্যাট** - প্রসঙ্গ প্রয়োজন এমন কথোপকথনের জন্য। মডেল পূর্বের বার্তাগুলো মনে রাখে এবং তার ওপর ভিত্তি করে তৈরি করে। ইন্টারেক্টিভ সাহায্য সেশন বা জটিল প্রশ্নোত্তরের জন্য ব্যবহার করুন।
+**মাল্টি-টার্ন চ্যাট** - প্রসঙ্গ যে কথোপকথন সম্পর্কিত। মডেল পূর্ববর্তী বার্তাগুলো মনে রাখে এবং সেগুলোর উপর ভিত্তি করে নির্মাণ করে। এটি ব্যবহার করুন ইন্টারঅ্যাকটিভ হেল্প সেশন বা জটিল প্রশ্নোত্তর জন্য।
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-নিচের ডায়াগ্রামটি দেখায় কিভাবে কথোপকথনের প্রসঙ্গ প্রতি টার্নে জমা হয় এবং তা মডেলের টোকেন সীমার সাথে সম্পর্কিত।
+নিচের চিত্রটিতে দেখানো হয়েছে কিভাবে কথোপকথনের প্রসঙ্গ একাধিক টার্নের মাধ্যমে জমা হয় এবং মডেলের টোকেন সীমার সাথে সম্পর্কিত হয়।
-*কথোপকথনের প্রসঙ্গ কিভাবে একাধিক পর্যায়ে জমা হয় যতক্ষণ না টোকেন সীমায় পৌঁছে*
-**ধাপে ধাপে যুক্তি** - স্পষ্ট যুক্তি প্রয়োজন এমন সমস্যার জন্য। মডেল প্রতিটি ধাপের জন্য স্পষ্ট যুক্তি প্রদর্শন করে। গণিত সমস্যা, যুক্তি ধাঁধা, অথবা যখন আপনি চিন্তার প্রক্রিয়া বুঝতে চান তখন এটি ব্যবহার করুন।
+*কথোপকথন প্রসঙ্গ কিভাবে টার্নগুলোর মাধ্যমে জমা হয় যতক্ষণ না টোকেন সীমা পৌঁছায়*
+
+**ধাপে ধাপে যুক্তি** - দৃশ্যমান লজিকের প্রয়োজন এমন সমস্যা জন্য। মডেল প্রতিটি ধাপে স্পষ্ট যুক্তি প্রদর্শন করে। ব্যবহার করুন গণিত সমস্যা, যুক্তি ধাঁধা বা যখন চিন্তার প্রক্রিয়া বোঝা প্রয়োজন।
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-নিচের ছবিটি দেখায় কীভাবে মডেল সমস্যা স্পষ্ট, নম্বরকৃত যুক্তির ধাপে ধাপে বিভক্ত করে।
+নিচের চিত্রটি দেখায় কিভাবে মডেল সমস্যাগুলো স্পষ্ট, নম্বরযুক্ত যুক্তিসম্পন্ন ধাপে ভেঙে তোলে।
+*স্পষ্ট যৌক্তিক ধাপে সমস্যার বিশ্লেষণ*
-*সমস্যাগুলোকে স্পষ্ট যুক্তির ধাপে বিভক্ত করা হচ্ছে*
-
-**সীমাবদ্ধ আউটপুট** - নির্দিষ্ট ফরম্যাটের প্রয়োজন এমন প্রতিক্রিয়ার জন্য। মডেল ফরম্যাট এবং দৈর্ঘ্যের নিয়ম কঠোরভাবে অনুসরণ করে। সারাংশ বা নির্দিষ্ট আউটপুট কাঠামো প্রয়োজন হলে ব্যবহার করুন।
+**সংকীর্ণ আউটপুট** - নির্দিষ্ট ফরম্যাটের প্রয়োজন অনুযায়ী প্রতিক্রিয়ার জন্য। মডেল কঠোরভাবে ফরম্যাট এবং দৈর্ঘ্যের নিয়ম অনুসরণ করে। সারাংশের জন্য বা যখন আপনাকে নির্দিষ্ট আউটপুট কাঠামো দরকার তখন এটি ব্যবহার করুন।
```java
String prompt = """
@@ -420,17 +420,17 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-নিম্নের চিত্রটি দেখায় কীভাবে সীমাবদ্ধতা মডেলকে আপনার ফরম্যাট এবং দৈর্ঘ্যের নিয়ম কঠোরভাবে মেনে আউটপুট তৈরি করতে নির্দেশ দেয়।
+নিম্নলিখিত চিত্রটি দেখায় কিভাবে সীমাবদ্ধতা মডেলকে আপনার ফরম্যাট এবং দৈর্ঘ্যের শর্তাবলী কঠোরভাবে অনুসরণ করে আউটপুট উৎপাদনে নির্দেশনা দেয়।
-*নির্দিষ্ট ফরম্যাট, দৈর্ঘ্য, এবং কাঠামো প্রয়োগ করা হচ্ছে*
+*নির্দিষ্ট ফরম্যাট, দৈর্ঘ্য এবং কাঠামো শর্তাবলী প্রয়োগ করা*
## অ্যাপ্লিকেশন চালান
-**ডিপ্লয়মেন্ট যাচাই করুন:**
+**ডিপ্লয়মেন্ট নিশ্চিত করুন:**
-রুট ডিরেক্টরিতে `.env` ফাইলটি নিশ্চিত করুন যা Azure সার্টিফিকেট (Module 01 চলাকালীন তৈরি) সহ রয়েছে। এটি মডিউল ডিরেক্টরি (`02-prompt-engineering/`) থেকে চালান:
+রুট ডিরেক্টরিতে `.env` ফাইলটি থাকতে হবে যা Azure ক্রেডেনশিয়াল ধারণ করে (মডিউল 01 চলাকালীন তৈরি হয়)। এটি মডিউল ডিরেক্টরি থেকে চালান (`02-prompt-engineering/`):
**Bash:**
```bash
@@ -439,32 +439,32 @@ cat ../.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT দেখানো উ
**PowerShell:**
```powershell
-Get-Content ..\.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT দেখানো উচিত
+Get-Content ..\.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT দেখান উচিত
```
**অ্যাপ্লিকেশন শুরু করুন:**
-> **বিঃদ্রঃ:** যদি আপনি ইতোমধ্যে রুট ডিরেক্টরি থেকে `./start-all.sh` ব্যবহার করে সব অ্যাপ্লিকেশন চালু করে থাকেন (যেমন Module 01 এ বর্ণিত), তবে এই মডিউল ইতোমধ্যে পোর্ট 8083 এ চলছে। নিচের শুরু কমান্ডগুলো এড়িয়ে সরাসরি http://localhost:8083 এ যেতে পারেন।
+> **নোট:** যদি আপনি ইতিমধ্যে রুট ডিরেক্টরি থেকে `./start-all.sh` ব্যবহার করে সব অ্যাপ্লিকেশন চালু করে থাকেন (মডিউল 01 এর বর্ণনা অনুসারে), তবে এই মডিউল 8083 পোর্টে চলছে। নিচের স্টার্ট কমান্ডগুলি এড়িয়ে সরাসরি http://localhost:8083 তে যেতে পারেন।
-**বিকল্প ১: Spring Boot ড্যাশবোর্ড ব্যবহার (VS Code ব্যবহারকারীদের জন্য সুপারিশ)**
+**বিকল্প ১: Spring Boot Dashboard ব্যবহার করে (VS Code ব্যবহারকারীদের জন্য সুপারিশকৃত)**
-ডেভ কন্টেইনারে Spring Boot ড্যাশবোর্ড এক্সটেনশন অন্তর্ভুক্ত রয়েছে, যা সব Spring Boot অ্যাপ্লিকেশন পরিচালনার জন্য ভিজ্যুয়াল ইন্টারফেস প্রদান করে। এটি VS Code এর বাম পাশের Activity Bar এ পাওয়া যাবে (Spring Boot আইকন খুঁজুন)।
+ডেভ কন্টেইনারে Spring Boot Dashboard এক্সটেনশন অন্তর্ভুক্ত, যা সব Spring Boot অ্যাপ্লিকেশন পরিচালনার জন্য ভিজ্যুয়াল ইন্টারফেস প্রদান করে। এটি VS Code এর বাম পাশে অ্যাক্টিভিটি বারে পাওয়া যাবে (Spring Boot আইকন খুঁজুন)।
-Spring Boot ড্যাশবোর্ড থেকে আপনি:
-- ওয়ার্কস্পেসের সব উপলব্ধ Spring Boot অ্যাপ্লিকেশন দেখতে পাবেন
-- এক ক্লিকে অ্যাপ্লিকেশন চালু/বন্ধ করতে পারবেন
-- রিয়েল-টাইমে অ্যাপ্লিকেশন লগ দেখতে পারবেন
-- অ্যাপ্লিকেশন স্থিতি পর্যবেক্ষণ করতে পারবেন
+Spring Boot Dashboard থেকে আপনি:
+- ওয়ার্কস্পেসের সব উপলব্ধ Spring Boot অ্যাপ্লিকেশন দেখতে পারবেন
+- একটি ক্লিকে অ্যাপ্লিকেশন শুরু বা বন্ধ করতে পারবেন
+- অ্যাপ্লিকেশন লগস রিয়েল-টাইমে দেখতে পারবেন
+- অ্যাপ্লিকেশন স্ট্যাটাস মনিটর করতে পারবেন
-সরাসরি "prompt-engineering" এর পাশে প্লে বোতামে ক্লিক করে এই মডিউল চালু করুন, অথবা সকল মডিউল একসাথে শুরু করুন।
+শুধুমাত্র "prompt-engineering" এর পাশের প্লে বোতামে ক্লিক করে এই মডিউল শুরু করুন, অথবা সব মডিউল একবারে চালু করুন।
-*VS Code এর Spring Boot ড্যাশবোর্ড — এক স্থান থেকে সব মডিউল শুরু, বন্ধ ও পর্যবেক্ষণ করুন*
+*VS Code এ Spring Boot Dashboard — এক জায়গা থেকে সব মডিউল শুরু, বন্ধ ও মনিটর করুন*
-**বিকল্প ২: শেল স্ক্রিপ্ট ব্যবহার**
+**বিকল্প ২: শেল স্ক্রিপ্ট ব্যবহার করে**
-সব ওয়েব অ্যাপ্লিকেশন চালু করুন (মডিউল 01-04):
+সব ওয়েব অ্যাপ্লিকেশন (মডিউল 01-04) শুরু করুন:
**Bash:**
```bash
@@ -474,11 +474,11 @@ cd .. # রুট ডিরেক্টরি থেকে
**PowerShell:**
```powershell
-cd .. # মূল ডিরেক্টরি থেকে
+cd .. # রুট ডিরেক্টরি থেকে
.\start-all.ps1
```
-অথবা শুধু এই মডিউল শুরু করুন:
+অথবা শুধুমাত্র এই মডিউল চালু করুন:
**Bash:**
```bash
@@ -492,9 +492,9 @@ cd 02-prompt-engineering
.\start.ps1
```
-উভয় স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে রুট `.env` ফাইল থেকে পরিবেশ ভেরিয়েবল লোড করে এবং JAR ফাইলগুলি তৈরি করবে যদি সেগুলি না থাকে।
+দুটি স্ক্রিপ্টই স্বয়ংক্রিয়ভাবে রুট `.env` ফাইল থেকে পরিবেশ ভেরিয়েবল লোড করে এবং যদি JAR ফাইল না থাকে তবে তৈরি করবে।
-> **বিঃদ্রঃ:** যদি আপনি শুরু করার আগে সব মডিউল নিজে নিজে তৈরি করতে চান:
+> **নোট:** যদি আপনি সমস্ত মডিউল ম্যানুয়ালি তৈরি করতে চান চালানোর আগে:
>
> **Bash:**
> ```bash
@@ -510,87 +510,87 @@ cd 02-prompt-engineering
আপনার ব্রাউজারে http://localhost:8083 খুলুন।
-**বন্ধ করতে:**
+**থামাতে:**
**Bash:**
```bash
-./stop.sh # শুধুমাত্র এই মডিউল
+./stop.sh # কেবল এই মডিউল
# অথবা
-cd .. && ./stop-all.sh # সমস্ত মডিউলগুলি
+cd .. && ./stop-all.sh # সমস্ত মডিউলসমূহ
```
**PowerShell:**
```powershell
-.\stop.ps1 # শুধুমাত্র এই মডিউল
+.\stop.ps1 # শুধু এই মডিউল
# অথবা
-cd ..; .\stop-all.ps1 # সমস্ত মডিউল
+cd ..; .\stop-all.ps1 # সব মডিউল
```
## অ্যাপ্লিকেশন স্ক্রিনশট
-এখানে প্রম্পট ইঞ্জিনিয়ারিং মডিউলের প্রধান ইন্টারফেস, যেখানে আপনি সব আটটি প্যাটার্ন পাশে পাশে পরীক্ষা করতে পারবেন।
+এখানে প্রম্পট ইঞ্জিনিয়ারিং মডিউলের প্রধান ইন্টারফেস, যেখানে আপনি পাশে পাশে আটটি প্যাটার্ন পরীক্ষা করতে পারেন।
-*মূল ড্যাশবোর্ড যেখানে সব ৮টি প্রম্পট ইঞ্জিনিয়ারিং প্যাটার্ন তাদের স্বকীয়তা ও ব্যবহার ক্ষেত্রসহ দেখানো হয়েছে*
+*প্রধান ড্যাশবোর্ড যেখানে সব ৮টি প্রম্পট ইঞ্জিনিয়ারিং প্যাটার্ন তাদের বৈশিষ্ট্য ও ব্যবহারের ক্ষেত্রে প্রদর্শিত হয়েছে*
-## প্যাটার্নগুলি আবিষ্কার করা
+## প্যাটার্নগুলি পরীক্ষা করা
-ওয়েব ইন্টারফেসে আপনি বিভিন্ন প্রম্পটিং কৌশল পরীক্ষা করতে পারেন। প্রতিটি প্যাটার্ন বিভিন্ন সমস্যা সমাধান করে – দেখে নিন কোন পদ্ধতি কখন কার্যকর।
+ওয়েব ইন্টারফেসটি আপনাকে বিভিন্ন প্রম্পটিং স্ট্র্যাটেজি নিয়ে পরীক্ষা করতে দেয়। প্রতিটি প্যাটার্ন বিভিন্ন সমস্যা সমাধান করে — দেখে নিন কখন কোন পদ্ধতি কার্যকর।
-> **বিঃদ্রঃ: স্ট্রিমিং বনাম নন-স্ট্রিমিং** — প্রতিটি প্যাটার্ন পৃষ্ঠায় দুইটি বোতাম আছে: **🔴 Stream Response (Live)** এবং একটি **Non-streaming** বিকল্প। স্ট্রিমিং Server-Sent Events (SSE) ব্যবহার করে মডেল তৈরি করা টোকেনগুলো রিয়েল-টাইমে দেখায়, তাই আপনি প্রগতি তৎক্ষণাৎ দেখতে পাবেন। নন-স্ট্রিমিং বিকল্প পুরো উত্তর আসার জন্য অপেক্ষা করে তারপর প্রদর্শন করে। গভীর যুক্তি প্রয়োজন এমন প্রম্পটের জন্য (যেমন High Eagerness, Self-Reflecting Code), নন-স্ট্রিমিং অনেক সময় নিতে পারে — কখনও কখনও মিনিটের পর মিনিট — কিন্তু কোনো দৃশ্যমান প্রতিক্রিয়া থাকে না। **জটিল প্রম্পট পরীক্ষা করার সময় স্ট্রিমিং ব্যবহার করুন** যাতে আপনি মডেল কাজ করছে দেখতে পারেন এবং মনে না হয় অনুরোধ সময়সীমা পেরিয়েছে।
+> **নোট: স্ট্রিমিং বনাম নন-স্ট্রিমিং** — প্রতিটি প্যাটার্ন পৃষ্ঠায় দুইটি বোতাম রয়েছে: **🔴 স্ট্রিম রেসপন্স (লাইভ)** এবং একটি **নন-স্ট্রিমিং** বিকল্প। স্ট্রিমিং সার্ভার-সেন্ট ইভেন্টস (SSE) ব্যবহার করে মডেল যখন টোকেন তৈরি করে তখন তা রিয়েল-টাইমে প্রদর্শন করে, আপনি অগ্রগতি তৎক্ষণাৎ দেখতে পারেন। নন-স্ট্রিমিং বিকল্প পুরো উত্তর পাওয়ার পর দেখায়। গভীর যুক্তি বিলম্বিত প্রম্পটগুলিতে (যেমন, High Eagerness, Self-Reflecting Code), নন-স্ট্রিমিং কল অনেকক্ষন লাগতে পারে — কখনো কখনো মিনিট পর্যন্ত — কোন দৃশ্যমান ফিডব্যাক ছাড়াই। **জটিল প্রম্পটের পরীক্ষায় স্ট্রিমিং ব্যবহার করুন** যাতে মডেল কাজ করছে দেখতে পারেন এবং মনে না হয় অনুরোধ টাইমআউট হয়েছে।
>
-> **ব্রাউজার প্রয়োজনীয়তা** — স্ট্রিমিং ফিচার Fetch Streams API (`response.body.getReader()`) ব্যবহার করে, যা পূর্ণ ব্রাউজার (Chrome, Edge, Firefox, Safari) এ কাজ করে। VS Code এর বিল্ট-ইন Simple Browser এ কাজ করে না, কারণ তার webview ReadableStream API সমর্থন করে না। Simple Browser ব্যবহার করলে নন-স্ট্রিমিং বোতামগুলি স্বাভাবিক কাজ করবে — শুধু স্ট্রিমিং বোতামগুলো প্রভাবিত হবে। পূর্ণ অভিজ্ঞতার জন্য http://localhost:8083 একটি বাহ্যিক ব্রাউজারে খুলুন।
+> **নোট: ব্রাউজার প্রয়োজনীয়তা** — স্ট্রিমিং বৈশিষ্ট্য Fetch Streams API (`response.body.getReader()`) ব্যবহার করে যা একটি সম্পূর্ণ ব্রাউজার (Chrome, Edge, Firefox, Safari) প্রয়োজন। VS Code এর বিল্ট-ইন Simple Browser কাজ করেনা কারণ তার ওয়েবভিউ ReadableStream API সমর্থন করে না। Simple Browser ব্যবহার করলে নন-স্ট্রিমিং বোতামগুলি স্বাভাবিকভাবে কাজ করবে — কেবল স্ট্রিমিং বোতামগুলি প্রভাবিত হবে। পূর্ণ অভিজ্ঞতার জন্য `http://localhost:8083` একটি বাহ্যিক ব্রাউজারে খুলুন।
-### কম বনাম উচ্চ আগ্রহ
+### Low বনাম High Eagerness
-সহজ প্রশ্ন জিজ্ঞাসা করুন, যেমন "200 এর 15% কত?" কম আগ্রহ ব্যবহার করে। আপনি দ্রুত, সরাসরি উত্তর পাবেন। এখন জটিল কিছু জিজ্ঞাসা করুন, যেমন "একটি উচ্চ-ট্রাফিক API এর জন্য কীভাবে ক্যাশিং কৌশল ডিজাইন করবেন" উচ্চ আগ্রহ ব্যবহার করে। **🔴 Stream Response (Live)** এ ক্লিক করুন এবং মডেলের বিস্তারিত যুক্তি টোকেন অনুযায়ী আসতে দেখুন। একই মডেল, একই প্রশ্ন কাঠামো - তবে প্রম্পট তাকে কতটা চিন্তা করতে হবে বলে নির্দেশ দেয়।
+সহজ প্রশ্ন করুন যেমন "What is 15% of 200?" লো ইগারনেস দিয়ে। আপনি সঙ্গে সঙ্গেই সরাসরি উত্তর পাবেন। এখন জটিল কিছু জিজ্ঞাসা করুন যেমন "Design a caching strategy for a high-traffic API" হাই ইগারনেসে। ক্লিক করুন **🔴 স্ট্রিম রেসপন্স (লাইভ)** এবং মডেলের বিস্তারিত যুক্তি প্রতিটি টোকেনের মাধ্যমে দেখতে পাবেন। একই মডেল, একই প্রশ্ন কাঠামো — কিন্তু প্রম্পট বলে কতটা চিন্তা করতে হবে।
-### টাস্ক এক্সিকিউশন (টুল প্রিম্বলস)
+### টাস্ক এক্সেকিউশন (টুল প্রিমেবলস)
-মাল্টি-স্টেপ ওয়ার্কফ্লো সাধনায় প্রথমে পরিকল্পনা ও প্রগতি বর্ণনা উপকারী হয়। মডেল বলে দেয় কি করবে, প্রতিটি ধাপ বর্ণনা করে, তারপর ফলাফল সারাংশ দেয়।
+বহু ধাপের কর্মপ্রবাহ আগাম পরিকল্পনা এবং অগ্রগতি বর্ণনা থেকে লাভবান হয়। মডেল বলবে কি করবে, প্রতিটি ধাপ বর্ণনা করবে, তারপর ফলাফল সংক্ষেপ করবে।
### সেলফ-রিফ্লেক্টিং কোড
-"একটি ইমেইল বৈধতা সেবা তৈরি করুন" চেষ্টা করুন। শুধু কোড তৈরি করে থেমে না, মডেল কোড তৈরি করে, গুণগত মান যাচাই করে, দুর্বলতা সনাক্ত করে এবং উন্নত করে। আপনি দেখবেন এটি কতক্ষণ পুনরাবৃত্তি করে যতক্ষণ কোড প্রোডাকশন মান পূরণ করে।
+"Create an email validation service" চেষ্টা করুন। শুধু কোড তৈরি করে বন্ধ না করে, মডেল কোড তৈরি, গুণগত মান যাচাই, দুর্বলতা চিহ্নিতকরণ এবং উন্নতি করে। আপনি দেখবেন এটি পুনরাবৃত্তি করছে যতক্ষণ না কোড উৎপাদন মান পূরণ করে।
-### স্ট্রাকচারড অ্যানালিসিস
+### স্ট্রাকচার্ড অ্যানালাইসিস
-কোড রিভিউ এর জন্য নির্দিষ্ট মূল্যায়ন ফ্রেমওয়ার্ক দরকার। মডেল কোড বিশ্লেষণ করে নির্দিষ্ট বিভাগে (সঠিকতা, চর্চা, কর্মক্ষমতা, সুরক্ষা) এবং গাম্ভীর্যের স্তর নির্ধারণ করে।
+কোড রিভিউগুলি জন্য ধারাবাহিক মূল্যায়ন কাঠামো প্রয়োজন। মডেল নির্দিষ্ট বিভাগে (সঠিকতা, প্রাকটিস, পারফরম্যান্স, সিকিউরিটি) কোড পর্যালোচনা করে এবং তীব্রতা মাত্রা দেয়।
### মাল্টি-টার্ন চ্যাট
-"Spring Boot কী?" জিজ্ঞাসা করুন, তারপর তৎক্ষণাৎ "আমাকে একটি উদাহরণ দেখাও" বলুন। মডেল আপনার প্রথম প্রশ্ন স্মরণ রাখে এবং স্পেসিফিক একটি Spring Boot উদাহরণ দেয়। স্মৃতি না থাকলে দ্বিতীয় প্রশ্নটি খুব অস্পষ্ট হত।
+"Spring Boot কি?" জিজ্ঞাসা করুন, তারপর সঙ্গে সঙ্গে "Show me an example" বলুন। মডেল আপনার প্রথম প্রশ্ন মনে রাখে এবং আপনাকে Spring Boot এ উদাহরণ দেয়। স্মৃতি ছাড়া দ্বিতীয় প্রশ্ন অস্পষ্ট হত।
### ধাপে ধাপে যুক্তি
-কোনো গণিত সমস্যার কাজ নিয়ে দেখুন ধাপে ধাপে যুক্তি এবং কম আগ্রহ দিয়ে। কম আগ্রহ দ্রুত উত্তর দেয় - দ্রুত কিন্তু অস্বচ্ছ। ধাপে ধাপে প্রতিটি হিসাব ও সিদ্ধান্ত দেখায়।
+কোনো গণিত সমস্যা নিন এবং এটি Step-by-Step Reasoning এবং Low Eagerness দিয়ে চেষ্টা করুন। লো ইগারনেস দ্রুত কিন্তু অস্পষ্ট উত্তর দেয়। ধাপে ধাপে গণনা ও সিদ্ধান্ত দেখায়।
-### সীমাবদ্ধ আউটপুট
+### সংকীর্ণ আউটপুট
-যখন নির্দিষ্ট ফরম্যাট বা শব্দ সংখ্যা দরকার, এই প্যাটার্ন কঠোরভাবে অনুসরণ করে। উদাহরণস্বরূপ ঠিক ১০০ শব্দের বুলেট পয়েন্ট সারসংক্ষেপ তৈরি করুন।
+যখন নির্দিষ্ট ফরম্যাট বা শব্দসংকোচন প্রয়োজন, এই প্যাটার্ন কঠোরভাবে তা নিশ্চিত করে। ঠিক ১০০ শব্দের সারসংক্ষেপ বিন্দু আকারে তৈরি করার চেষ্টা করুন।
## আপনি আসলেই কি শিখছেন
**যুক্তি প্রচেষ্টা সবকিছু পরিবর্তন করে**
-GPT-5.2 আপনাকে আপনার প্রম্পটের মাধ্যমে কম্পিউটেশনাল প্রচেষ্টা নিয়ন্ত্রণ করতে দেয়। কম প্রচেষ্টা মানে দ্রুত সাড়া, সীমিত অনুসন্ধান। উচ্চ প্রচেষ্টা মানে মডেল গভীরভাবে চিন্তা করে। আপনি শিখছেন কিভাবে কাজের জটিলতার সাথে প্রচেষ্টা মিলিয়ে নিতে হয় - সহজ প্রশ্নে সময় নষ্ট করবেন না, কিন্তু জটিল সিদ্ধান্তও তাড়াহুড়ো করবেন না।
+GPT-5.2 আপনাকে প্রম্পটের মাধ্যমে গাণিতিক প্রচেষ্টা নিয়ন্ত্রণ করতে দেয়। কম প্রচেষ্টা মানে দ্রুত উত্তর ও কম অনুসন্ধান। বেশি প্রচেষ্টায় মডেল গভীর চিন্তা করে। আপনি শিখছেন কাজের জটিলতার সাথে প্রচেষ্টা মিলিয়ে নিতে — সহজ প্রশ্নে সময় নষ্ট করবেন না, কিন্তু জটিল সিদ্ধান্ত তাড়াহুড়ো করবেন না।
-**কাঠামো আচরণ নির্দেশ করে**
+**কাঠামো আচরণ পরিচালনা করে**
-প্রম্পটে দেখতে XML ট্যাগ আছে? সেগুলো সাজসরঞ্জাম নয়। মডেলগুলো গঠনভিত্তিক নির্দেশ ভালভাবে অনুসরণ করে। যখন মাল্টি-স্টেপ প্রক্রিয়া বা জটিল যুক্তি দরকার, কাঠামো মডেলকে ঠিক কতদূর গিয়েছে এবং পরবর্তী ধাপ কি তা বুঝতে সাহায্য করে। নিচের চিত্রটি একটি সুসংগঠিত প্রম্পটের গঠন দেখায়, যেখানে ``, ``, ``, ``, এবং `` ট্যাগগুলো স্পষ্ট বিভাগে আপনার নির্দেশ দেয়।
+প্রম্পটে XML ট্যাগ লক্ষ্য করেছেন? এগুলো সাজানোর জন্য। মডেল গঠনযুক্ত নির্দেশনা বেশি নির্ভরযোগ্যভাবে অনুসরণ করে। অনেক ধাপ প্রক্রিয়া বা জটিল যুক্তি দরকার হলে কাঠামো মডেলকে সাহায্য করে কোথায় আছে এবং পরবর্তী কী জানার। নিচের চিত্রে দেখুন কীভাবে ``, ``, ``, ``, এবং `` ট্যাগগুলি স্পষ্ট বিভাগে আপনার নির্দেশ সমন্বয় করে।
-*পরিষ্কার বিভাগের সাথে সুসংগঠিত প্রম্পটের অ্যানাটমি এবং XML-ধাঁচের সংগঠন*
+*ভালভাবে গঠিত প্রম্পটের গঠন এবং XML-ধাঁচের সংগঠন*
-**গুণগত মান স্ব-মূল্যায়নের মাধ্যমে**
+**স্ব-মূল্যায়নের মাধ্যমে গুণগত মান**
-সেলফ-রিফ্লেক্টিং প্যাটার্নগুলো গুণগত মান স্পষ্ট করে দেয়। মডেল "ঠিক কাজ করেছে" আশা না করে আপনি ঠিক কি "ঠিক" তা বলেন: সঠিক যুক্তি, ত্রুটি হ্যান্ডলিং, কর্মক্ষমতা, নিরাপত্তা। এরপর মডেল নিজের আউটপুট মূল্যায়ন করে উন্নতি করতে পারে। এটি কোড তৈরি প্রক্রিয়াকে লটারি থেকে পদ্ধতিতে পরিণত করে।
+সেলফ-রিফ্লেক্টিং প্যাটার্নগুলি গুণগত মান স্পষ্ট করে দেয়। মডেল "সঠিক" করার আশা না রেখে আপনি বলেন ঠিক কি "সঠিক": সঠিক যুক্তি, ত্রুটি হ্যান্ডলিং, পারফরম্যান্স, সিকিউরিটি। মডেল তার আউটপুট নিজে মূল্যায়ন করে উন্নত করতে পারে। কোড তৈরি প্রক্রিয়াটিকে পুরষ্কার এর বদলে একটি ধারাবাহিক প্রক্রিয়ায় পরিণত করে।
**প্রসঙ্গ সীমিত**
-মাল্টি-টার্ন কথোপকথন প্রতিটি অনুরোধের সাথে মেসেজ ইতিহাস রাখার মাধ্যমে কাজ করে। কিন্তু একটি সীমা আছে - প্রতিটি মডেলের সর্বোচ্চ টোকেন সংখ্যা। কথোপকথন বাড়ার সাথে সাথে আপনাকে কৌশল পান যাতে প্রাসঙ্গিক প্রসঙ্গ বজায় থাকে ছাড়াই সীমা ছাড়িয়ে না যায়। এই মডিউলটি আপনাকে স্মৃতি কিভাবে কাজ করে দেখায়; পরে আপনি শিখবেন কখন সারসংক্ষেপ করতে হয়, কখন ভুলে যেতে হয়, এবং কখন পুনরুদ্ধার করতে হয়।
+মাল্টি-টার্ন কথোপকথন কাজ করে প্রতিটি অনুরোধের সাথে মেসেজ ইতিহাস অন্তর্ভুক্ত করে। কিন্তু এক সীমা আছে—প্রতিটি মডেলের সর্বোচ্চ টোকেন সংখ্যা। কথোপকথন বাড়ার সাথে আপনাকে প্রাসঙ্গিক প্রসঙ্গ ধরে রাখার কৌশল শিখতে হবে যাতে সীমা ছাড়িয়ে না যায়। এই মডিউলে দেখানো হয়েছে স্মৃতি কীভাবে কাজ করে; পরে শিখবেন কখন সারাংশ দিতে, কখন ভুলতে, এবং কখন পুনরুদ্ধার করতে।
## পরবর্তী ধাপ
@@ -603,6 +603,6 @@ GPT-5.2 আপনাকে আপনার প্রম্পটের মাধ
---
-**দায়ভার বিবৃতি**:
-এই ডকুমেন্টটি AI অনুবাদ সেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। আমরা সঠিকতার জন্য চেষ্টা করি, তবে স্বয়ংচালিত অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ডকুমেন্টের নিজস্ব ভাষা হলো কর্তৃত্বপূর্ণ উত্স হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানুষ দ্বারা অনুবাদ করানোই সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোন ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই।
+**অস্বীকৃতি**:
+এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা শুদ্ধতার জন্য চেষ্টা করি, অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার স্বভাষায় কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে প্রয়োজনীয় ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই।
\ No newline at end of file
diff --git a/translations/bn/03-rag/README.md b/translations/bn/03-rag/README.md
index 77b4e64f9..4e08c45cb 100644
--- a/translations/bn/03-rag/README.md
+++ b/translations/bn/03-rag/README.md
@@ -1,146 +1,143 @@
-# Module 03: RAG (রিট্রিভাল-অগমেন্টেড জেনারেশন)
+# Module 03: RAG (রিট্রিভ্যাল-অগমেন্টেড জেনারেশন)
## Table of Contents
-- [Video Walkthrough](../../../03-rag)
-- [What You'll Learn](../../../03-rag)
-- [Prerequisites](../../../03-rag)
-- [Understanding RAG](../../../03-rag)
- - [Which RAG Approach Does This Tutorial Use?](../../../03-rag)
-- [How It Works](../../../03-rag)
- - [Document Processing](../../../03-rag)
- - [Creating Embeddings](../../../03-rag)
- - [Semantic Search](../../../03-rag)
- - [Answer Generation](../../../03-rag)
-- [Run the Application](../../../03-rag)
-- [Using the Application](../../../03-rag)
- - [Upload a Document](../../../03-rag)
- - [Ask Questions](../../../03-rag)
- - [Check Source References](../../../03-rag)
- - [Experiment with Questions](../../../03-rag)
-- [Key Concepts](../../../03-rag)
- - [Chunking Strategy](../../../03-rag)
- - [Similarity Scores](../../../03-rag)
- - [In-Memory Storage](../../../03-rag)
- - [Context Window Management](../../../03-rag)
-- [When RAG Matters](../../../03-rag)
-- [Next Steps](../../../03-rag)
+- [Video Walkthrough](#video-walkthrough)
+- [What You'll Learn](#what-youll-learn)
+- [Prerequisites](#prerequisites)
+- [Understanding RAG](#understanding-rag)
+ - [Which RAG Approach Does This Tutorial Use?](#which-rag-approach-does-this-tutorial-use)
+- [How It Works](#how-it-works)
+ - [Document Processing](#document-processing)
+ - [Creating Embeddings](#creating-embeddings)
+ - [Semantic Search](#semantic-search)
+ - [Answer Generation](#উত্তর-প্রজন্ম)
+- [Run the Application](#অ্যাপ্লিকেশন-চালানো)
+- [Using the Application](#অ্যাপ্লিকেশন-ব্যবহার)
+ - [Upload a Document](#ডকুমেন্ট-আপলোড-করুন)
+ - [Ask Questions](#প্রশ্ন-করুন)
+ - [Check Source References](#উত্স-রেফারেন্স-যাচাই-করুন)
+ - [Experiment with Questions](#প্রশ্ন-নিয়ে-পরীক্ষা-করুন)
+- [Key Concepts](#মূল-ধারণাসমূহ)
+ - [Chunking Strategy](#অংশকরণ-কৌশল)
+ - [Similarity Scores](#সাদৃশ্য-স্কোর)
+ - [In-Memory Storage](#ইন-মেমরি-স্টোরেজ)
+ - [Context Window Management](#প্রসঙ্গ-উইন্ডো-ব্যবস্থাপনা)
+- [When RAG Matters](#কখন-rag-গুরুত্বপূর্ণ)
+- [Next Steps](#পরবর্তী-ধাপ)
## Video Walkthrough
-এই লাইভ সেশনটি দেখুন যা এই মডিউল শুরু করার পদ্ধতি ব্যাখ্যা করে:
+এই লাইভ সেশনটি দেখুন যা এই মডিউলটি শুরু করার উপায় ব্যাখ্যা করে:
## What You'll Learn
-পূর্বের মডিউলগুলোতে, আপনি শিখেছেন কীভাবে AI-এর সাথে কথোপকথন করতে হয় এবং কীভাবে আপনার প্রম্পটগুলো কার্যকরভাবে সাজাতে হয়। কিন্তু এখানে একটি মৌলিক সীমাবদ্ধতা আছে: ভাষার মডেলগুলি কেবলমাত্র প্রশিক্ষণের সময় যা শিখেছে সেটাই জানে। তারা আপনার কোম্পানির নীতি, আপনার প্রকল্পের ডকুমেন্টেশন বা যেকোনো তথ্যের বিষয়ে উত্তর দিতে পারবে না যা তাদের প্রশিক্ষণে ছিল না।
+পূর্ববর্তী মডিউলগুলিতে, আপনি শিখেছেন কিভাবে AI এর সাথে কথোপকথন চালাবেন এবং কীভাবে আপনার প্রম্পটগুলো কার্যকরভাবে গঠন করবেন। কিন্তু একটি মৌলিক সীমাবদ্ধতা আছে: ভাষা মডেলগুলো শুধুমাত্র তারা প্রশিক্ষণের সময় যা শিখেছে তা জানে। তারা আপনার কোম্পানির নীতি, আপনার প্রকল্প ডকুমেন্টেশন বা যেকোনো তথ্য যা তারা প্রশিক্ষিত হয়নি সে সম্পর্কে প্রশ্নের উত্তর দিতে পারে না।
-RAG (রিট্রিভাল-অগমেন্টেড জেনারেশন) এই সমস্যার সমাধান করে। মডেলকে আপনার তথ্য শেখানোর পরিবর্তে (যা ব্যয়বহুল এবং ব্যবহারিক নয়), আপনি এটিকে আপনার ডকুমেন্টগুলোর মধ্যে অনুসন্ধান করার ক্ষমতা দেন। কেউ যখন প্রশ্ন করে, সিস্টেম প্রাসঙ্গিক তথ্য খুঁজে বের করে এবং প্রম্পটে অন্তর্ভুক্ত করে। মডেল তারপর সেই প্রাপ্ত প্রসঙ্গের ভিত্তিতে উত্তর দেয়।
+RAG (রিট্রিভ্যাল-অগমেন্টেড জেনারেশন) এই সমস্যার সমাধান করে। মডেলটিকে আপনার তথ্য শেখানোর চেষ্টা করার পরিবর্তে (যা ব্যয়বহুল এবং অকার্যকর), আপনি তাকে আপনার ডকুমেন্টগুলো থেকে অনুসন্ধান করার দক্ষতা দেন। যখন কেউ প্রশ্ন করে, সিস্টেম প্রাসঙ্গিক তথ্য খুঁজে বের করে এবং সেটি প্রম্পটের সাথে অন্তর্ভুক্ত করে। মডেল তখন সে প্রাপ্ত প্রসঙ্গের ভিত্তিতে উত্তর দেয়।
-RAG কে এমন ভাবুন যেন মডেলকে একটি রেফারেন্স লাইব্রেরি দেওয়া হয়েছে। যখন আপনি একটি প্রশ্ন করবেন, সিস্টেম:
+RAG কে ভাবুন মডেলটিকে একটি রেফারেন্স লাইব্রেরি দেওয়ার মতো। আপনি যখন প্রশ্ন করবেন, সিস্টেম:
-1. **ব্যবহারকারীর প্রশ্ন** - আপনি একটি প্রশ্ন করবেন
-2. **এম্বেডিং** - আপনার প্রশ্নকে এক ভেক্টরে রূপান্তরিত করে
-3. **ভেক্টর অনুসন্ধান** - সাদৃশ্যপূর্ণ ডকুমেন্ট চাঙ্ক খুঁজে পায়
-4. **প্রসঙ্গ সমন্বয়** - প্রম্পটে প্রাসঙ্গিক চাঙ্ক যোগ করে
-5. **উত্তর প্রদান** - প্রাপ্ত প্রসঙ্গের উপর ভিত্তি করে LLM উত্তর তৈরি করে
+1. **ব্যবহারকারী প্রশ্ন** - আপনি প্রশ্ন করেন
+2. **এম্বেডিং** - আপনার প্রশ্নকে একটি ভেক্টরে রূপান্তরিত করা হয়
+3. **ভেক্টর সার্চ** - অনুরূপ ডকুমেন্ট অংশ খুঁজে পাওয়া হয়
+4. **প্রসঙ্গ একত্রিতকরণ** - প্রম্পটে প্রাসঙ্গিক অংশ যোগ করা হয়
+5. **প্রতিক্রিয়া** - LLM প্রসঙ্গ অনুযায়ী উত্তর তৈরি করে
-এটি মডেলের উত্তরকে আপনার বাস্তব ডেটার উপর ভিত্তি করে স্থির করে, যাতে এটি তার প্রশিক্ষণের জ্ঞানের ওপর নির্ভর না করে বা উত্তর বানিয়ে না দেয়।
+এটি মডেলের উত্তরগুলিকে তার প্রশিক্ষণের জ্ঞানের উপর নির্ভর করার পরিবর্তে আপনার প্রকৃত ডেটার উপর ভিত্তি স্থাপন করে।
## Prerequisites
-- [Module 00 - Quick Start](../00-quick-start/README.md) সম্পন্ন (এই মডিউলে পরে উল্লেখ করা Easy RAG উদাহরণের জন্য)
-- [Module 01 - Introduction](../01-introduction/README.md) সম্পন্ন (Azure OpenAI রিসোর্সসমূহ স্থাপনকৃত, যার মধ্যে রয়েছে `text-embedding-3-small` এম্বেডিং মডেল)
-- রুট ডিরেক্টরিতে `.env` ফাইল, যার মধ্যে Azure এর ক্রেডেনশিয়ালস রয়েছে (মডিউল 01-এ `azd up` দিয়ে তৈরি)
+- সম্পন্ন [Module 01 - Introduction](../01-introduction/README.md) (Azure OpenAI সম্পদগুলি স্থাপিত রয়েছে, যার মধ্যে রয়েছে `text-embedding-3-small` এম্বেডিং মডেল)
+- রুট ডিরেক্টরিতে `.env` ফাইল যা Azure ক্রেডেনশিয়াল ধারণ করে (Module 01-এ `azd up` দ্বারা তৈরি)
-> **Note:** আপনি যদি Module 01 সম্পন্ন না করে থাকেন, প্রথমে সেখানে দেওয়া ডিপ্লয়মেন্ট নির্দেশনা অনুসরণ করুন। `azd up` কমান্ড GPT চ্যাট মডেল এবং এই মডিউলে ব্যবহৃত এম্বেডিং মডেল উভয়ই ডিপ্লয় করে।
+> **Note:** যদি আপনি Module 01 সম্পন্ন না করে থাকেন, প্রথমে সেখানে দেওয়া ডিপ্লয়মেন্ট নির্দেশনা অনুসরণ করুন। `azd up` কমান্ড GPT চ্যাট মডেল এবং এই মডিউলে ব্যবহৃত এম্বেডিং মডেল উভয়কেই ডিপ্লয় করে।
## Understanding RAG
-নিচের ডায়াগ্রামটি মূল ধারণাটি দেখায়: কেবল মডেলের প্রশিক্ষণের ডেটার ওপর নির্ভর না করে, RAG তাকে আপনার ডকুমেন্টের একটি রেফারেন্স লাইব্রেরি দেয় যা সে প্রতিটি উত্তর তৈরি করার আগে পরামর্শ করতে পারে।
+নীচের চিত্রটি মূল ধারণাটি দেখায়: মডেলের প্রশিক্ষণ তথ্যের ওপর নির্ভর করার পরিবর্তে, RAG এর মাধ্যমে প্রতিটি উত্তরের আগে এটি আপনার ডকুমেন্টের একটি রেফারেন্স লাইব্রেরি পরামর্শ করে।
-*এই ডায়াগ্রামটি দেখায় একটি সাধারণ LLM (যা প্রশিক্ষণ তথ্য থেকে অনুমান করে) এবং RAG-সক্ষম LLM (যা প্রথমে আপনার ডকুমেন্টগুলো পরামর্শ করে) এর মধ্যে পার্থক্য।*
+*এই চিত্রটি একটি সাধারণ LLM (যে প্রশিক্ষণ তথ্য থেকে অনুমান করে) এবং একটি RAG-বর্ধিত LLM (যে প্রথমে আপনার ডকুমেন্ট পরামর্শ করে) এর মধ্যে পার্থক্য দেখায়।*
-এটি হলো শেষ পর্যন্ত পিসিগুলোর সংযোগের ধারা। এক ব্যবহারকারীর প্রশ্ন চারটি পর্যায় দিয়ে প্রবাহিত হয় — এম্বেডিং, ভেক্টর অনুসন্ধান, প্রসঙ্গ সমন্বয়, এবং উত্তর তৈরি — প্রতিটি একটি পূর্ববর্তী ধাপের ওপর ভিত্তি করে:
+এখানে পুরো প্রক্রিয়াটি বুঝুন যেখানে ব্যবহারকারীর প্রশ্ন চারটি ধাপের মধ্য দিয়ে চলে — এম্বেডিং, ভেক্টর সার্চ, প্রসঙ্গ একত্রিতকরণ এবং উত্তর উত্পাদন — প্রতিটি আগেরটির ওপর ভিত্তি করে:
-*এই ডায়াগ্রামটি দেখায় সমগ্র RAG পাইপলাইন — একজন ব্যবহারকারীর প্রশ্ন এম্বেডিং, ভেক্টর অনুসন্ধান, প্রসঙ্গ সমন্বয়, এবং উত্তর জেনারেশনের মাধ্যমে প্রবাহিত হয়।*
+*এই চিত্রটি শেষ পর্যন্ত RAG পাইপলাইন দেখায় — ব্যবহারকারীর প্রশ্ন এম্বেডিং, ভেক্টর সার্চ, প্রসঙ্গ একত্রিতকরণ, এবং উত্তর উত্পাদনের মধ্য দিয়ে যায়।*
-এরপরের অংশে প্রতিটি ধাপ বিস্তারিতভাবে ধাপে ধাপে বর্ণনা করা হয়েছে, কোডসহ যা আপনি রান ও পরিবর্তন করতে পারেন।
+এই মডিউলের বাকি অংশে প্রতিটি ধাপে বিস্তারিত ব্যাখ্যা দেওয়া হয়েছে, কোডসহ যা আপনি চালাতে এবং পরিবর্তন করতে পারেন।
### Which RAG Approach Does This Tutorial Use?
-LangChain4j RAG বাস্তবায়নের জন্য তিনটি পদ্ধতি প্রদান করে, প্রতিটি ভিন্ন স্তরের বিমূর্ততার। নিচের ডায়াগ্রামটি সেগুলো পার্শ্ব-পার্শ্ব তুলনা করে:
+LangChain4j তিনটি RAG প্রয়োগ পদ্ধতি অফার করে, যার প্রত্যেকটি বিভিন্ন মাত্রার অবজেক্টিভ ও কাস্টমাইজেশন প্রদান করে। নিচের চিত্রে তাদের পারস্পরিক তুলনা করা হয়েছে:
-*এই ডায়াগ্রামটি LangChain4j এর তিনটি RAG পদ্ধতির তুলনা করে — Easy, Native, এবং Advanced — তাদের মূল উপাদান এবং ব্যবহারের সময় দেখানো হয়েছে।*
+*এই চিত্রটি LangChain4j এর তিনটি RAG পদ্ধতি — Easy, Native, এবং Advanced — তাদের প্রধান উপাদান এবং কখন কোনটি ব্যবহার করবেন তা প্রদর্শন করে।*
-| পদ্ধতি | কি করে | ট্রেড-অফ |
+| পদ্ধতি | এটি কী করে | ট্রেড-অফ |
|---|---|---|
-| **Easy RAG** | সমস্ত কিছু স্বয়ংক্রিয়ভাবে `AiServices` এবং `ContentRetriever` এর মাধ্যমে যুক্ত করে। আপনি একটি ইন্টারফেস অ্যানোটেট করেন, রিট্রিভার যুক্ত করেন, আর LangChain4j এম্বেডিং, অনুসন্ধান, এবং প্রম্পট সমন্বয় পরিচালনা করে। | কোড কম, কিন্তু প্রতিটি ধাপে কি হচ্ছে তা দেখেন না। |
-| **Native RAG** | আপনি এম্বেডিং মডেল কল করেন, স্টোরে অনুসন্ধান করেন, প্রম্পট তৈরি করেন, এবং নিজে উত্তর তৈরি করেন — এক ধাপে এক ধাপে স্পষ্টভাবে। | বেশি কোড লাগে, কিন্তু প্রতিটি স্তর দৃশ্যমান এবং পরিবর্তনযোগ্য। |
-| **Advanced RAG** | `RetrievalAugmentor` ফ্রেমওয়ার্ক ব্যবহার করে প্লাগেবল কুয়েরি ট্রান্সফরমার, রাউটার, রেঙ্কার, এবং কনটেন্ট ইনজেক্টর দিয়ে প্রোডাকশন-গ্রেড পায়পলাইন তৈরি করে। | সর্বোচ্চ নমনীয়তা, কিন্তু জটিলতাও অনেক। |
+| **Easy RAG** | সবকিছু স্বয়ংক্রিয়ভাবে `AiServices` এবং `ContentRetriever` এর মাধ্যমে সংযুক্ত করে। আপনি একটি ইন্টারফেস অ্যানোটেট করেন, একটি রিট্রিভার যুক্ত করেন, এবং LangChain4j এম্বেডিং, অনুসন্ধান, এবং প্রম্পট বানানো পিছনে সামলায়। | কোড কম, কিন্তু প্রতিটি ধাপের অন্তর্গত প্রক্রিয়া দেখা যায় না। |
+| **Native RAG** | আপনি নিজে এম্বেডিং মডেল কল করেন, স্টোর সার্চ করেন, প্রম্পট তৈরি করেন, এবং উত্তর তৈরি করেন — প্রতিটি ধাপ স্পষ্ট একটি করে। | কোড বেশি, কিন্তু প্রতিটি ধাপ স্পষ্ট এবং পরিবর্তনযোগ্য। |
+| **Advanced RAG** | `RetrievalAugmentor` ফ্রেমওয়ার্ক ব্যবহার করে, যা প্লাগযোগ্য কুয়েরি ট্রান্সফর্মার, রাউটার, রি-র্যাঙ্কার, এবং কনটেন্ট ইনজেক্টর সহ প্রোডাকশন-গ্রেড পাইপলাইন তৈরি করে। | সর্বোচ্চ নমনীয়তা, কিন্তু উল্লেখযোগ্যভাবে জটিল। |
-**এই টিউটোরিয়ালে Native পদ্ধতিটি ব্যবহৃত হয়েছে।** RAG পাইপলাইনের প্রতিটি ধাপ — কুয়েরি এম্বেড করা, ভেক্টর স্টোরে অনুসন্ধান, প্রসঙ্গ সমন্বয়, এবং উত্তর জেনারেশন — [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) ফাইলে স্পষ্টভাবে লেখা হয়েছে। এটি ইচ্ছাকৃত: শেখার জন্য, প্রতিটি ধাপ আপনি দেখতে ও বুঝতে পারেন তা বেশি গুরুত্বপূর্ণ, কোড কম হওয়া নয়। একবার আপনি সহজে বুঝে গেলে, দ্রুত প্রোটোটাইপের জন্য Easy RAG-এ যেতে পারেন অথবা প্রোডাকশনের জন্য Advanced RAG ব্যবহার করতে পারেন।
+**এই টিউটোরিয়ালটি Native পদ্ধতি ব্যবহার করে।** RAG পাইপলাইনের প্রতিটি ধাপ — প্রশ্নের এম্বেডিং, ভেক্টর স্টোরে অনুসন্ধান, প্রসঙ্গ একত্রিতকরণ, এবং উত্তর উৎপাদন — স্পষ্টভাবে লেখা হয়েছে [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) ফাইলে। এটি ইচ্ছাকৃত: একটি শেখার সম্পদ হিসেবে, প্রতিটি ধাপ দেখা ও বোঝা বেশি গুরুত্বপূর্ণ, কোড কমিয়ে ফেলা নয়। একবার আপনি বুঝে গেলে, দ্রুত প্রোটোটাইপের জন্য Easy RAG বা production সিস্টেমের জন্য Advanced RAG এ যেতে পারেন।
-> **💡 ইতিমধ্যে Easy RAG দেখেছেন?** [Quick Start মডিউল](../00-quick-start/README.md) এ একটি ডকুমেন্ট Q&A উদাহরণ ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)) আছে যা Easy RAG ব্যবহার করে — LangChain4j এম্বেডিং, অনুসন্ধান, এবং প্রম্পট সমন্বয় স্বয়ংক্রিয়ভাবে পরিচালনা করে। এই মডিউলটি পরবর্তী ধাপ যেখানে পাইপলাইনটি খুলে প্রতিটি ধাপ আপনি নিজে দেখতে এবং নিয়ন্ত্রণ করতে পারবেন।
+> **💡 Easy RAG সম্পর্কে কৌতূহলী?** LangChain4j একটি *Easy RAG* পদ্ধতিও অফার করে যেখানে `AiServices` ও `ContentRetriever` স্বয়ংক্রিয়ভাবে এম্বেডিং, অনুসন্ধান এবং প্রম্পট সমন্বয় করে। এই মডিউলটি একটু বেশি স্পষ্ট পথ অনুসরণ করে — সুতরাং আপনি প্রতিটি ধাপ নিজেই দেখতে এবং নিয়ন্ত্রণ করতে পারেন।
-নিচের ডায়াগ্রামে Quick Start উদাহরণের Easy RAG পাইপলাইন দেখানো হয়েছে। লক্ষ্য করুন `AiServices` এবং `EmbeddingStoreContentRetriever` কীভাবে জটিলতা ঢেকে রাখে — আপনি একটি ডকুমেন্ট লোড করেন, রিট্রিভার যুক্ত করেন, এবং উত্তর পান। এই মডিউলের Native পদ্ধতি প্রতিটি লুকানো ধাপ খুলে দেয়:
+নীচের চিত্রটি Easy RAG পাইপলাইন দেখায়। লক্ষ্য করুন কিভাবে `AiServices` এবং `EmbeddingStoreContentRetriever` সমস্ত জটিলতা লুকিয়ে রাখে — আপনি একটি ডকুমেন্ট লোড করেন, রিট্রিভার সংযুক্ত করেন, এবং উত্তর পান। এই মডিউলটি Native পদ্ধতির মাধ্যমে ঐসব লুকানো ধাপ খুলে দেয়:
-*এই ডায়াগ্রামটি `SimpleReaderDemo.java` এর Easy RAG পাইপলাইন দেখায়। এর সাথে এই মডিউলের Native পদ্ধতির তুলনা করুন: Easy RAG এম্বেডিং, রিট্রিভাল এবং প্রম্পট সমন্বয় `AiServices` এবং `ContentRetriever` এর পেছনে লুকিয়ে রাখে — আপনি শুধু ডকুমেন্ট লোড করেন, রিট্রিভার যুক্ত করেন, এবং উত্তর পেয়ে যান। Native পদ্ধতিতে প্রত্যেক ধাপ নিজে কল করতে হয় (এম্বেড, সার্চ, প্রসঙ্গ তৈরি, জেনারেট), যা সম্পূর্ণ নিয়ন্ত্রণ এবং দৃশ্যমানতা দেয়।*
+*এই চিত্রটি Easy RAG পাইপলাইন দেখায়। Native পদ্ধতির সাথে তুলনা করুন যা এই মডিউলে ব্যবহৃত হয়েছে: Easy RAG `AiServices` এবং `ContentRetriever` এর পিছনে এম্বেডিং, রিট্রিভাল, এবং প্রম্পট সমন্বয় লুকায় — আপনি একটি ডকুমেন্ট লোড করেন, রিট্রিভার সংযুক্ত করেন, এবং উত্তর পান। এই মডিউলের Native পদ্ধতিটি ঐ পাইপলাইন খুলে দেয় যাতে আপনি নিজেই প্রতিটি ধাপ (এম্বেড, সার্চ, প্রসঙ্গ একত্রিতকরণ, উত্তর তৈরি) কল করতে পারেন, সম্পূর্ণ দৃশ্যমানতা এবং নিয়ন্ত্রণের জন্য।*
## How It Works
-এই মডিউলের RAG পাইপলাইন চারটি ধাপে বিভক্ত যা ব্যবহারকারী প্রতি প্রশ্ন করলে ধারাবাহিকভাবে চলে। প্রথমেই, একটি আপলোড করা ডকুমেন্ট **পার্স এবং চাঙ্ক করা হয়** — এমন ছোট অংশে ভাগ করা হয় যা মডেলের প্রসঙ্গ উইন্ডোতে আরামদায়ক ফিট হয়। এই চাঙ্কগুলো একটু overlapped থাকে যাতে সীমান্তে প্রসঙ্গ হারানো না হয়।
-
-তারপর ঐ চাঙ্কগুলোকে **ভেক্টর এম্বেডিংয়ে রূপান্তরিত** করা হয় এবং সঞ্চয় করা হয় যাতে গণিতীয় তুলনা করা যায়। যখন একটি প্রশ্ন আসে, সিস্টেম একটি **সেমান্টিক সার্চ** চালায় যাতে সবচেয়ে প্রাসঙ্গিক চাঙ্ক পাওয়া যায়, এবং অবশেষে তাদের প্রসঙ্গ হিসেবে LLM-এ পাঠানো হয় **উত্তর তৈরি** এর জন্য। নিচের অংশগুলো প্রতিটি ধাপ কোড এবং ডায়াগ্রামসহ দেখায়। প্রথম ধাপ দেখা যাক।
+এই মডিউলের RAG পাইপলাইন চারটি ধাপে বিভক্ত যা প্রতিবার ব্যবহারকারী প্রশ্ন করলে সিকোয়েন্সিয়ালি চলে। প্রথমে, আপলোড করা ডকুমেন্টটি **পার্স এবং চাঙ্ক** করা হয় ব্যবস্থাপনায়যোগ্য অংশে। সেগুলো পরে **ভেক্টর এম্বেডিং** এ রূপান্তরিত হয় এবং সংরক্ষণ করা হয় যাতে সেগুলো গাণিতিকভাবে তুলনা করা যায়। যখন একটি প্রশ্ন আসে, সিস্টেম একটি **সেমান্টিক সার্চ** সম্পাদন করে সবচেয়ে প্রাসঙ্গিক চাঙ্ক খুঁজে, এবং অবশেষে সেগুলোকে প্রসঙ্গ হিসেবে LLM-এ দেয় **উত্তর উত্পাদনের জন্য**। নিচের বিভাগগুলি প্রতিটি ধাপ কোড ও ছবিসহ বর্ণনা করে। প্রথম ধাপটি দেখি।
### Document Processing
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-আপনি যখন একটি ডকুমেন্ট আপলোড করেন, সিস্টেম সেটি পার্স করে (PDF বা সাধারণ টেক্সট), ফাইলনামের মতো মেটাডেটা সংযুক্ত করে, এবং চাঙ্কে ভাগ করে — ছোট ছোট অংশ যা মডেলের প্রসঙ্গ উইন্ডোর মধ্যে ফিট করে। এই চাঙ্কগুলো সামান্য overlapped থাকে যাতে সীমান্তে প্রসঙ্গ হারিয়ে না যায়।
+যখন আপনি একটি ডকুমেন্ট আপলোড করেন, সিস্টেম এটি পার্স করে (PDF বা প্লেইন টেক্সট), ফাইলনামসহ মেটাডেটা সংযুক্ত করে, এবং তারপর সেটি ছোট ছোট চাঙ্কে বিভক্ত করে — এমন ছোট অংশ যা মডেলের প্রসঙ্গ উইন্ডোতে আরামদায়কভাবে ফিট করে। এই চাঙ্কগুলো কিছুটা ওভারল্যাপ করে যাতে সীমান্তে প্রসঙ্গ হারানো না যায়।
```java
-// আপলোড করা ফাইলটি বিশ্লেষণ করুন এবং এটিকে একটি LangChain4j ডকুমেন্ট হিসেবে মোড়ান
+// আপলোড করা ফাইলটি বিশ্লেষণ করুন এবং এটি LangChain4j ডকুমেন্টে মোড়ানো করুন
Document document = Document.from(content, metadata);
-// ৩০ টোকেন ওভারল্যাপ সহ ৩০০-টোকেনের অংশে বিভক্ত করুন
+// ৩০০-টোকেন অংশে বিভক্ত করুন ৩০-টোকেন ওভারল্যাপ সহ
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
-নিচের ডায়াগ্রামটি কিভাবে এটি ভিজ্যুয়ালি কাজ করে দেখায়। লক্ষ্য করুন প্রতিটি চাঙ্কের কিছু টোকেন প্রতিবেশীদের সাথে ভাগাভাগি করে — ৩০ টোকেন ওভারল্যাপ নিশ্চিত করে যে গুরুত্বপূর্ণ প্রসঙ্গ ফাঁক ফোকর হবেনা:
+নীচের চিত্রটি এটি ভিজ্যুয়ালি কিভাবে কাজ করে দেখায়। লক্ষ্য করুন প্রতিটি চাঙ্ক তার প্রতিবেশীদের সাথে কিছু টোকেন শেয়ার করে — ৩০ টোকেন ওভারল্যাপ নিশ্চিত করে কোন গুরুত্বপূর্ণ প্রসঙ্গ ফেটে যাচ্ছে না:
-*এই ডায়াগ্রামটি দেখায় কীভাবে একটি ডকুমেন্ট ৩০ টোকেন ওভারল্যাপ সহ ৩০০ টোকেন দীর্ঘ চাঙ্কে বিভক্ত হয়, চাঙ্ক সীমান্তে প্রসঙ্গ সংরক্ষণ করে।*
+*এই চিত্রটি দেখায় কিভাবে একটি ডকুমেন্ট ৩০০ টোকেনের চাঙ্কে ভাগ করা হয় ৩০ টোকেন ওভারল্যাপ দিয়ে, যাতে চাঙ্ক সীমান্তে প্রসঙ্গ সংরক্ষিত থাকে।*
-> **🤖 GitHub Copilot Chat দিয়ে চেষ্টা করুন:** খুলুন [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) এবং জিজ্ঞাসা করুন:
-> - "LangChain4j কীভাবে ডকুমেন্টগুলো চাঙ্কে বিভক্ত করে এবং ওভারল্যাপ কেন গুরুত্বপূর্ণ?"
-> - "বিভিন্ন ধরণের ডকুমেন্টে আদর্শ চাঙ্ক আকার কী এবং কেন?"
-> - "কিভাবে একাধিক ভাষার ডকুমেন্ট বা বিশেষ ফরম্যাটিং থাকা ডকুমেন্ট হ্যান্ডেল করবেন?"
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chat দিয়ে চেষ্টা করুন:** খুলুন [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) এবং জিজ্ঞাসা করুন:
+> - "LangChain4j কিভাবে ডকুমেন্টগুলো চাঙ্কে ভাগ করে এবং কেন ওভারল্যাপ গুরুত্বপূর্ণ?"
+> - "বিভিন্ন ডকুমেন্ট ধরণের জন্য সর্বোত্তম চাঙ্ক সাইজ কি এবং কেন?"
+> - "আমি কিভাবে বিভিন্ন ভাষার ডকুমেন্ট অথবা বিশেষ ফরম্যাটিং সহ ডকুমেন্টগুলি হ্যান্ডেল করব?"
### Creating Embeddings
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-প্রতিটি চাঙ্ককে একটি সংখ্যাগত উপস্থাপনায় রূপান্তরিত করা হয় যাকে এম্বেডিং বলা হয় — সহজভাবে বলতে গেলে মানে থেকে সংখ্যা তৈরি করার একটি কনভার্টার। এম্বেডিং মডেলটি "ইন্টেলিজেন্ট" নয়, যেমন একটি চ্যাট মডেল; এটি নির্দেশ মেনে চলে না, যুক্তি তৈরি করে না বা প্রশ্নের উত্তর দেয় না। যা করে তা হলো টেক্সটকে একটি গণিতীয় স্থানতে রূপান্তর করা যেখানে সাদৃশ্যপূর্ণ মানে কাছাকাছি থাকে — "গাড়ি" "অটোমোবাইল"-এর নিকটে, "রিফান্ড নীতি" "আমার টাকা ফেরত" এর কাছে। ভাবুন চ্যাট মডেল যেন একজন মানুষ যার সঙ্গে আপনি কথা বলতে পারেন; এম্বেডিং মডেল হল একটি খুব ভালো ফাইলিং সিস্টেম।
+প্রতিটি চাঙ্ক একটি সংখ্যাসূচক প্রতিনিধিত্বে রূপান্তরিত করা হয়, যাকে এম্বেডিং বলা হয় — মূলত একটি অর্থ থেকে সংখ্যায় রূপান্তরকারী। এম্বেডিং মডেলটির "ইন্টেলিজেন্স" চ্যাট মডেলের মত নয়; এটি নির্দেশ মেনে চলে না, যুক্তি দেয় না বা প্রশ্নের উত্তর দেয় না। তবে এটি টেক্সটকে এমন একটি গাণিতিক স্থানে ম্যাপ করে যেখানে অনুরূপ অর্থের ভেক্টরগুলো একদম কাছে থাকে — যেমন "গাড়ি" এবং "অটোমোবাইল", "রিফান্ড পলিসি" এবং "আমার টাকা ফেরত"। চ্যাট মডেলকে ভাবুন একজন মানুষের মতো যাকে আপনি কথা বলতে পারেন; এম্বেডিং মডেল হলো অত্যন্ত ভাল একটি ফাইলিং সিস্টেম।
-নিচের ডায়াগ্রামটি এই ধারণাটি দৃশ্যমান করে তোলে — টেক্সট ইনপুট হয়, সংখ্যাগত ভেক্টর আউটপুট হয়, আর সাদৃশ্যপূর্ণ মানে পরিচিত ভেক্টরগুলো একসঙ্গে থাকে:
+নীচের চিত্রটি এই ধারণা ভিজ্যুয়াল করে — টেক্সট ঢুকে, সংখ্যাসূচক ভেক্টর বের হয়, এবং অনুরূপ অর্থ নিকটবর্তী ভেক্টরে থাকে:
-*এই ডায়াগ্রামটি দেখায় কীভাবে একটি এম্বেডিং মডেল টেক্সটকে সংখ্যাগত ভেক্টরে রূপান্তর করে এবং সাদৃশ্যপূর্ণ মানে — যেমন "গাড়ি" ও "অটোমোবাইল" — ভেক্টর স্থানে একসঙ্গে রাখে।*
+*এই চিত্রটি দেখায় কিভাবে একটি এম্বেডিং মডেল টেক্সটকে সংখ্যাসূচক ভেক্টরে রূপান্তরিত করে, এবং অনুরূপ অর্থ — যেমন "গাড়ি" ও "অটোমোবাইল" — ভেক্টর স্পেসে একসাথে থাকে।*
```java
@Bean
@@ -156,29 +153,29 @@ EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-নীচের ক্লাস ডায়াগ্রামটি RAG পাইপলাইনের দুইটি পৃথক প্রবাহ এবং LangChain4j ক্লাসগুলো দেখায় যা এগুলো বাস্তবায়ন করে। **ingestion flow** (আপলোডের সময় একবার চলবে) ডকুমেন্ট বিভক্ত করে, চাঙ্ক এম্বেড করে, এবং `.addAll()` এর মাধ্যমে সঞ্চয় করে। **query flow** (প্রতিবার ব্যবহারকারী প্রশ্ন করলে চলে) প্রশ্ন এম্বেড করে, `.search()` দিয়ে স্টোরে অনুসন্ধান করে, এবং ম্যাচ হওয়া প্রসঙ্গ চ্যাট মডেলে পাঠায়। উভয় প্রবাহ মিলিত হয় শেয়ার করা `EmbeddingStore` ইন্টারফেসে:
+নীচের ক্লাস ডায়াগ্রামটি RAG পাইপলাইনের দুটি পৃথক প্রবাহ এবং LangChain4j ক্লাসগুলি দেখায় যা সেগুলো বাস্তবায়ন করে। **ইনজেশন ফ্লো** (আপলোডের সময় একবার চলে) ডকুমেন্ট বিভক্ত করে, চাঙ্ক এম্বেড করে, এবং `.addAll()` এর মাধ্যমে সংরক্ষণ করে। **কুয়েরি ফ্লো** (প্রতিবার প্রশ্ন করার সময়) প্রশ্ন এম্বেড করে, `.search()` এর মাধ্যমে স্টোরে সার্চ করে, এবং ম্যাচ করা প্রসঙ্গ চ্যাট মডেলে পাঠায়। উভয় ফ্লো একটি ভাগ করা `EmbeddingStore` ইন্টারফেসে মিলিত হয়:
-*ডায়াগ্রামটি RAG পাইপলাইনের দুইটি প্রবাহ — ingestion এবং query — দেখায় এবং তারা কিভাবে শেয়ার করা EmbeddingStore-এর মাধ্যমে যুক্ত।*
+*এই চিত্রটি RAG পাইপলাইনের দুটি প্রবাহ — ইনজেশন এবং কুয়েরি — এবং সেগুলো কীভাবে একটি ভাগ করা EmbeddingStore এর মাধ্যমে সংযুক্ত হয় দেখায়।*
- এম্বেডিংগুলি সঞ্চয় করার পর, সাদৃশ্যপূর্ণ বিষয়বস্তু স্বাভাবিকভাবেই ভেক্টর স্থানে ক্লাস্টার হয়। নিচের ভিজ্যুয়ালাইজেশনটি দেখায় কীভাবে সম্পর্কিত বিষয়ের ডকুমেন্টস কাছাকাছি পয়েন্টে থাকে, যা সেমান্টিক সার্চ সম্ভব করে তোলে:
+একবার এম্বেডিংগুলো সংরক্ষিত হলে, অনুরূপ কন্টেন্ট স্বাভাবিকভাবেই ভেক্টর স্পেসে ঘন হয়ে যায়। নিচের ভিজ্যুয়ালাইজেশনটি দেখায় কিভাবে সম্পর্কিত বিষয়ক ডকুমেন্টগুলো একসাথে গুচ্ছবদ্ধ হয়, যা সেমান্টিক সার্চকে সম্ভব করে তোলে:
-*এই ভিজ্যুয়ালাইজেশনটি দেখায় কীভাবে সম্পর্কিত ডকুমেন্টগুলো ৩ডি ভেক্টর স্থানে ক্লাস্টার করে, যেখানে টেকনিক্যাল ডকস, বিজনেস রুলস, এবং FQA-এর মত বিষয়গুলো আলাদা আলাদা গ্রুপ তৈরি করে।*
+*এই ভিজ্যুয়ালাইজেশন দেখায় কিভাবে সম্পর্কিত ডকুমেন্টগুলো ৩ডি ভেক্টর স্পেসে ক্লাস্টারায়, যেমন টেকনিক্যাল ডকস, বিজনেস রুলস, এবং FAQ আলাদা আলাদা গ্রুপ তৈরি করে।*
-যখন ব্যবহারকারী অনুসন্ধান করে, সিস্টেম চারটি ধাপ অনুসরণ করে: ডকুমেন্টগুলো একবার এম্বেড করে, প্রতিবার সার্চ করার সময় প্রশ্ন এম্বেড করে, প্রশ্ন ভেক্টরকে সঞ্চিত সমস্ত ভেক্টরের সঙ্গে কসাইন সাদৃশ্য মাপ দিয়ে তুলনা করে, এবং সর্বোচ্চ স্কোরধারী টপ-কে চাঙ্কগুলো ফিরিয়ে দেয়। নিচের ডায়াগ্রামটি প্রতিটি ধাপ এবং LangChain4j ক্লাসগুলো দেখায়:
+যখন ব্যবহারকারী সার্চ করে, সিস্টেম চারটি ধাপ অনুসরণ করে: ডকুমেন্ট একবার এম্বেড করা, প্রতিবার সার্চে প্রশ্ন এম্বেড করা, কজাইন সিমিলারিটি ব্যবহার করে সব ভেক্টরের বিপরীতে প্রশ্নের ভেক্টর তুলনা করা, এবং শীর্ষ-K নম্বরের সর্বোচ্চ স্কোর প্রাপ্ত চাঙ্ক ফেরত দেয়া। নিচের চিত্রটি প্রতিটি ধাপ এবং LangChain4j ক্লাসগুলি দেখায়:
-*এই ডায়াগ্রামটি চার ধাপের এম্বেডিং সার্চ প্রক্রিয়া দেখায়: ডকুমেন্ট এম্বেড করা, প্রশ্ন এম্বেড করা, ভেক্টর কসাইন সাদৃশ্য দিয়ে তুলনা, এবং টপ-কে ফলাফল ফেরত দেওয়া।*
+*এই চিত্রটি চার ধাপের এম্বেডিং সার্চ প্রক্রিয়া দেখায়: ডকুমেন্ট এম্বেড করা, প্রশ্ন এম্বেড করা, কজাইন সিমিলারিটি দিয়ে ভেক্টর তুলনা, এবং শীর্ষ-ক ফলাফল ফেরত দেওয়া।*
### Semantic Search
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-আপনি যখন একটি প্রশ্ন করেন, আপনার প্রশ্নও একটি এম্বেডিংয়ে রূপান্তরিত হয়। সিস্টেম আপনার প্রশ্নের এম্বেডিং তুলনা করে সমস্ত ডকুমেন্ট চাঙ্কের এম্বেডিংয়ের সঙ্গে। এটি সবচেয়ে সাদৃশ্যপূর্ণ মানের চাঙ্কগুলো খুঁজে পায় - শুধু মিল থাকা কীওয়ার্ড নয়, প্রকৃত সেমান্টিক সাদৃশ্য।
+আপনি যখন প্রশ্ন করেন, আপনার প্রশ্নও একটি এম্বেডিং হয়। সিস্টেম আপনার প্রশ্নের এম্বেডিংকে সব ডকুমেন্ট চাঙ্কের এম্বেডিংয়ের সঙ্গে তুলনা করে। এটি এমন চাঙ্ক খুঁজে পায় যার অর্থ সবচেয়ে অনুরূপ — শুধু ম্যাচিং কীওয়ার্ড নয়, বরং প্রকৃত সেমান্টিক সামঞ্জস্য।
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -198,27 +195,27 @@ for (EmbeddingMatch match : matches) {
}
```
-নিচের ডায়াগ্রামটি সেমান্টিক সার্চ এবং প্রচলিত কীওয়ার্ড সার্চের পার্থক্য তুলে ধরে। "vehicle" কীওয়ার্ড সার্চ "cars and trucks" সম্পর্কে একটি চাঙ্ক মিস করে, কিন্তু সেমান্টিক সার্চ বোঝে তারা একই অর্থ বহন করে এবং তাকে উচ্চ মানের মিল হিসেবে ফেরত দেয়:
+নীচের চিত্রটি সেমান্টিক সার্চ এবং প্রচলিত কীওয়ার্ড সার্চের পার্থক্য দেখায়। "vehicle" শব্দটির জন্য কীওয়ার্ড সার্চ "cars and trucks" সম্পর্কিত চাঙ্ক হারিয়ে ফেলে, কিন্তু সেমান্টিক সার্চ বুঝতে পারে এরা একই অর্থ বহন করে এবং সেটি উচ্চ স্কোরিং হিসেবে ফেরত দেয়:
-*এই ডায়াগ্রামটি কীওয়ার্ড-বেসড সার্চ ও সেমান্টিক সার্চ তুলনা করে, দেখাচ্ছে কীভাবে সেমান্টিক সার্চ খুঁজে পায় ধারণাগতভাবে সম্পর্কিত বিষয়বস্তু এমনকি যখন সঠিক কীওয়ার্ড ভিন্ন হয়।*
-অবজেক্টিভলি, সাদৃশ্য পরিমাপ করা হয় কসমাইন সাদৃশ্য ব্যবহার করে — মূলত প্রশ্ন করা হয় "এই দুই তীর একই দিকেই নির্দেশ করছে কি?" দুইটি অংশ সম্পূর্ণ ভিন্ন শব্দ ব্যবহার করতে পারে, কিন্তু যদি তারা একই অর্থ বহন করে তাহলে তাদের ভেক্টর একই দিকে নির্দেশ করে এবং স্কোর ১.০ এর কাছাকাছি হয়:
+*এই চিত্রটি কীওয়ার্ড ভিত্তিক সার্চ এবং সেমান্টিক সার্চের তুলনা, দেখায় কিভাবে সেমান্টিক সার্চ ধারণাগতভাবে সম্পর্কিত কন্টেন্টকে পুনরুদ্ধার করে যদিও সঠিক কীওয়ার্ড ভিন্ন হয়।*
-
+অন্তর্দৃষ্টিতে, সামঞ্জস্য কজাইন সিমিলারিটি ব্যবহার করে পরিমাপ করা হয় — অর্থাৎ "এই দুইটি তীর একই দিকে ইঙ্গিত করছে?" দুইটি চাঙ্ক সম্পূর্ণ ভিন্ন শব্দ ব্যবহার করতে পারে, কিন্তু যদি তাদের অর্থ একই হয় তাহলে তাদের ভেক্টর একই দিকে ইঙ্গিত করে এবং স্কোর 1.0 এর কাছাকাছি হয়:
-*এই চিত্রটি কসমাইন সাদৃশ্যকে এম্বেডিং ভেক্টরগুলোর মধ্যে কোণ হিসাবে বর্ণনা করে — বেশি সামঞ্জস্যপূর্ণ ভেক্টরগুলো ১.০ এর কাছাকাছি স্কোর পায়, যা উচ্চতর অর্থগত সাদৃশ্য নির্দেশ করে।*
+
+*এই চিত্রটি এমবেডিং ভেক্টরের মধ্যে কোসাইন সাদৃশ্য ধারণাকে কোণ হিসেবে দেখায় — বেশি সামঞ্জস্যপূর্ণ ভেক্টরগুলি ১.০ এর কাছাকাছি স্কোর পায়, যা উচ্চতর অর্থগত সাদৃশ্য নির্দেশ করে।*
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chat এর সাথে চেষ্টা করুন:** খুলুন [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) এবং প্রশ্ন করুন:
-> - "এম্বেডিংসের সাথে সাদৃশ্য অনুসন্ধান কিভাবে কাজ করে এবং স্কোর নির্ধারণ করে কী?"
-> - "কোন সাদৃশ্য সীমা ব্যবহার করা উচিত এবং এটি ফলাফলের উপর কী প্রভাব ফেলে?"
-> - "যখন কোন প্রাসঙ্গিক ডকুমেন্ট পাওয়া যায় না তখন আমি কীভাবে হ্যান্ডল করব?"
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) চ্যাট দিয়ে চেষ্টা করুন:** খোলুন [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) এবং জিজ্ঞাসা করুন:
+> - "এম্বেডিং এর মাধ্যমে সাদৃশ্য অনুসন্ধান কীভাবে কাজ করে এবং স্কোর নির্ধারণ করে কী?"
+> - "আমি কোন সাদৃশ্য পরিমাণ সীমা ব্যবহার করব এবং এটি ফলাফলের উপরে কিভাবে প্রভাব ফেলে?"
+> - "যখন কোনো প্রাসঙ্গিক ডকুমেন্ট পাওয়া যায় না তখন আমি কী করব?"
-### উত্তর তৈরি
+### উত্তর প্রজন্ম
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-সবচেয়ে প্রাসঙ্গিক অংশগুলো একত্রিত করে একটি গঠনমূলক প্রম্পটে রূপান্তর করা হয় যা স্পষ্ট নির্দেশাবলী, প্রাপ্ত প্রাসঙ্গিক বিষয়বস্তু, এবং ব্যবহারকারীর প্রশ্ন অন্তর্ভুক্ত করে। মডেল ওই নির্দিষ্ট অংশগুলো পড়ে এবং তথ্যের ভিত্তিতে উত্তর দেয় — এটি শুধুমাত্র সামনে থাকা তথ্য ব্যবহার করতে পারে, যেটা হ্যালুসিনেশন প্রতিরোধ করে।
+সর্বাধিক প্রাসঙ্গিক অংশগুলোকে একত্রিত করে একটি কাঠামোবদ্ধ প্রম্পট তৈরি করা হয়, যা স্পষ্ট নির্দেশাবলী, প্রাপ্ত প্রসঙ্গ এবং ব্যবহারকারীর প্রশ্ন অন্তর্ভুক্ত করে। মডেল সে নির্দিষ্ট অংশগুলো পড়ে এবং সেই তথ্যের ভিত্তিতে উত্তর দেয় — এটি কেবল সামনে যা রয়েছে তা ব্যবহার করতে পারে, যা ভুল ধারণাকে প্রতিরোধ করে।
```java
String context = matches.stream()
@@ -239,17 +236,17 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-নীচের চিত্রটি এই সংকলন প্রক্রিয়া প্রদর্শন করে — অনুসন্ধান ধাপ থেকে শীর্ষ স্কোরিং অংশগুলো প্রম্পট টেমপ্লেটে ইনজেক্ট করা হয়, এবং `OpenAiOfficialChatModel` একটি ভিত্তিপ্রাপ্ত উত্তর তৈরি করে:
+নীচের চিত্রটি এই সংকলন প্রক্রিয়াটি দেখায় — অনুসন্ধান ধাপ থেকে সর্বোচ্চ স্কোরপ্রাপ্ত অংশগুলো প্রম্পট টেমপ্লেটে সংযুক্ত করা হয়, এবং `OpenAiOfficialChatModel` একটি ভিত্তিপ্রাপ্ত উত্তর তৈরি করে:
-*এই চিত্রটি দেখায় কীভাবে শীর্ষ স্কোরিং অংশগুলো গঠনমূলক প্রম্পটে সংকলিত হয়, যা মডেলকে আপনার তথ্য থেকে ভিত্তিপ্রাপ্ত উত্তর তৈরি করতে সাহায্য করে।*
+*এই চিত্রটি দেখায় কীভাবে সর্বোচ্চ স্কোরপ্রাপ্ত অংশগুলোকে কাঠামোবদ্ধ প্রম্পটে সংযুক্ত করা হয়, যা মডেলকে আপনার ডেটা থেকে একটি ভিত্তিপ্রাপ্ত উত্তর তৈরি করতে সক্ষম করে।*
-## অ্যাপ্লিকেশন চালু করুন
+## অ্যাপ্লিকেশন চালানো
-**বিন্যাস যাচাই করুন:**
+**ডিপ্লয়মেন্ট যাচাই করুন:**
-রুট ডিরেক্টরিতে `.env` ফাইলটি আছে কিনা নিশ্চিত করুন, যার মধ্যে Azure ক্রেডেনশিয়াল রয়েছে (মডিউল ০১ এর সময় তৈরি)। মডিউল ডিরেক্টরি থেকে এটি চালান (`03-rag/`):
+রুট ডিরেক্টরিতে `.env` ফাইলটি আছে কিনা নিশ্চিত করুন যাতে Azure সনদপত্র থাকে (মডিউল ০১ এ তৈরি)। এটি মডিউল ডিরেক্টরি (`03-rag/`) থেকে চালান:
**Bash:**
```bash
@@ -263,27 +260,27 @@ Get-Content ..\.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT দেখা
**অ্যাপ্লিকেশন শুরু করুন:**
-> **দ্রষ্টব্য:** যদি আপনি ইতিমধ্যেই সব অ্যাপ্লিকেশন `./start-all.sh` ব্যবহার করে রুট ডিরেক্টরি থেকে চালু করে থাকেন (যেমন মডিউল ০১ এ বর্ণিত), এই মডিউল ইতিমধ্যেই পোর্ট ৮০৮১ এ চলছে। তাই নিচের স্টার্ট কমান্ডগুলো এড়িয়ে সরাসরি http://localhost:8081 এ যেতে পারেন।
+> **বিঃদ্রঃ:** যদি আপনি ইতোমধ্যে রুট ডিরেক্টরির থেকে `./start-all.sh` ব্যবহার করে সব অ্যাপ্লিকেশন চালু করে থাকেন (যেমন মডিউল ০১ এ বর্ণিত), তবে এই মডিউলটি ইতোমধ্যে পোর্ট ৮০৮১ এ চলছে। আপনি নিচের শুরু কমান্ডগুলো এড়িয়ে সরাসরি http://localhost:8081 এ যেতে পারেন।
-**বিকল্প ১: Spring Boot Dashboard ব্যবহার করে (VS Code ব্যবহারকারীদের জন্য সুপারিশকৃত)**
+**বিকল্প ১: স্প্রিং বুট ড্যাশবোর্ড ব্যবহার (VS Code ব্যবহারকারীদের জন্য সুপারিশকৃত)**
-ডেভেলপমেন্ট কন্টেইনারে Spring Boot Dashboard এক্সটেনশন অন্তর্ভুক্ত, যা সব Spring Boot অ্যাপ্লিকেশন পরিচালনার জন্য একটি ভিজ্যুয়াল ইন্টারফেস প্রদান করে। আপনি VS Code এর বাম পাশে Activity Bar এ এটি পাবেন (Spring Boot আইকন খুঁজুন)।
+ডেভ কনটেইনারটিতে স্প্রিং বুট ড্যাশবোর্ড এক্সটেনশন অন্তর্ভুক্ত, যা সব স্প্রিং বুট অ্যাপ্লিকেশন দেখাশোনা করার ভিজ্যুয়াল ইন্টারফেস দেয়। এটি VS Code এর বাম পাশে অ্যাকটিভিটি বারে পাওয়া যাবে (স্প্রিং বুট আইকন দেখুন)।
-Spring Boot Dashboard থেকে আপনি:
-- ওয়ার্কস্পেসে থাকা সব Spring Boot অ্যাপ্লিকেশন দেখতে পারবেন
-- এক ক্লিকেই অ্যাপ্লিকেশন শুরু/বন্দ করতে পারবেন
-- রিয়েল-টাইমে অ্যাপ্লিকেশন লগ দেখতে পারবেন
-- অ্যাপ্লিকেশন স্ট্যাটাস মনিটর করতে পারবেন
+স্প্রিং বুট ড্যাশবোর্ড থেকে আপনি:
+- ওয়ার্কস্পেসে সব উপলব্ধ স্প্রিং বুট অ্যাপ্লিকেশন দেখতে পারেন
+- একটি ক্লিকে অ্যাপ্লিকেশন শুরু/বন্ধ করতে পারেন
+- অ্যাপ্লিকেশন লগ রিয়েল-টাইমে দেখতে পারেন
+- অ্যাপ্লিকেশন অবস্থান পর্যবেক্ষণ করতে পারেন
-শুধুমাত্র "rag" এর পাশে থাকা প্লে বোতামে ক্লিক করে এই মডিউল চালু করুন, অথবা একযোগে সব মডিউল শুরু করুন।
+শুধুমাত্র "rag" এর পাশে প্লে বাটনে ক্লিক করে এই মডিউল চালু করুন, অথবা একবারে সব মডিউল শুরু করুন।
-*এই স্ক্রিনশটে দেখানো হয়েছে VS Code এ Spring Boot Dashboard, যেখানে আপনি অ্যাপ্লিকেশন গুলো শুরু, বন্ধ এবং পর্যবেক্ষণ করতে পারেন।*
+*এই স্ক্রিনশটে VS Code এ স্প্রিং বুট ড্যাশবোর্ড প্রদর্শিত হয়েছে, যেখানে আপনি অ্যাপ্লিকেশনগুলি চালু, বন্ধ এবং মনিটর করতে পারেন ভিজ্যুয়ালি।*
-**বিকল্প ২: শেল স্ক্রিপ্ট ব্যবহার করে**
+**বিকল্প ২: শেল স্ক্রিপ্ট ব্যবহার**
-সব ওয়েব অ্যাপ্লিকেশন (মডিউল ০১-০৪) শুরু করুন:
+সব ওয়েব অ্যাপ্লিকেশন (মডিউল ০১-০৪) শুরু করুন:
**Bash:**
```bash
@@ -297,7 +294,7 @@ cd .. # রুট ডিরেক্টরি থেকে
.\start-all.ps1
```
-অথবা শুধুমাত্র এই মডিউলটি শুরু করুন:
+অথবা কেবল এই মডিউল শুরু করুন:
**Bash:**
```bash
@@ -311,9 +308,9 @@ cd 03-rag
.\start.ps1
```
-উভয় স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে রুট `.env` ফাইল থেকে পরিবেশ ভেরিয়েবল লোড করবে এবং জারা (JAR) ফাইল না থাকলে তৈরি করবে।
+উভয় স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে রুট `.env` ফাইল থেকে পরিবেশ ভেরিয়েবল লোড করে এবং যদি JAR ফাইল না থাকে তবে নির্মাণ করে।
-> **দ্রষ্টব্য:** যদি আপনি শুরু করার আগে সব মডিউল ম্যানুয়ালি তৈরি করতে চান:
+> **বিঃদ্রঃ:** যদি আপনি শুরু করার আগে সব মডিউল ম্যানুয়ালি তৈরি করতে চান:
>
> **Bash:**
> ```bash
@@ -335,93 +332,93 @@ cd 03-rag
```bash
./stop.sh # শুধুমাত্র এই মডিউল
# অথবা
-cd .. && ./stop-all.sh # সব মডিউলসমূহ
+cd .. && ./stop-all.sh # সব মডিউলগুলি
```
**PowerShell:**
```powershell
-.\stop.ps1 # এই মডিউল শুধুমাত্র
+.\stop.ps1 # শুধুমাত্র এই মডিউল
# অথবা
cd ..; .\stop-all.ps1 # সব মডিউলগুলি
```
## অ্যাপ্লিকেশন ব্যবহার
-অ্যাপ্লিকেশনটি ডকুমেন্ট আপলোড ও প্রশ্ন করার জন্য একটি ওয়েব ইন্টারফেস প্রদান করে।
+অ্যাপ্লিকেশনটি ডকুমেন্ট আপলোড এবং প্রশ্ন করার জন্য একটি ওয়েব ইন্টারফেস প্রদান করে।
-*এই স্ক্রিনশটে RAG অ্যাপ্লিকেশন ইন্টারফেস দেখানো হয়েছে যেখানে আপনি ডকুমেন্ট আপলোড এবং প্রশ্ন করতে পারেন।*
+*এই স্ক্রিনশটে RAG অ্যাপ্লিকেশন ইন্টারফেস দেখানো হয়েছে যেখানে আপনি ডকুমেন্ট আপলোড করে প্রশ্ন করতে পারেন।*
### ডকুমেন্ট আপলোড করুন
-প্রথমে একটি ডকুমেন্ট আপলোড করুন - TXT ফাইল পরীক্ষা করার জন্য সেরা। এই ডিরেক্টরিতে একটি `sample-document.txt` আছে যা LangChain4j ফিচার, RAG বাস্তবায়ন এবং সেরা অভ্যাস সম্পর্কিত তথ্য ধারণ করে - সিস্টেম টেস্টের জন্য উপযুক্ত।
+একটি ডকুমেন্ট আপলোড দিয়ে শুরু করুন - টেক্সট ফাইল পরীক্ষা করার জন্য সবচেয়ে ভালো। এই ডিরেক্টরিতে একটি `sample-document.txt` দেওয়া আছে যেটিতে LangChain4j বৈশিষ্ট্য, RAG বাস্তবায়ন এবং শ্রেষ্ঠ অনুশীলন সম্পর্কিত তথ্য রয়েছে - সিস্টেম পরীক্ষা করার জন্য উপযুক্ত।
-সিস্টেম আপনার ডকুমেন্ট প্রক্রিয়াকরণ করে, সেটিকে অংশে ভাগ করে এবং প্রতিটি অংশের জন্য এম্বেডিং তৈরি করে। এটি স্বয়ংক্রিয়ভাবে আপলোডের সময় ঘটে।
+সিস্টেম আপনার ডকুমেন্ট প্রক্রিয়াকরণ করে, তা ভাগ করে এবং প্রতি অংশের জন্য এমবেডিং তৈরি করে। এটি স্বয়ংক্রিয়ভাবে ঘটে যখন আপনি আপলোড করেন।
### প্রশ্ন করুন
-এখন ডকুমেন্টের বিষয়বস্তু সম্পর্কে নির্দিষ্ট প্রশ্ন করুন। এমন কিছু চেষ্টা করুন যা ডকুমেন্টে স্পষ্টভাবে উল্লেখ আছে। সিস্টেম প্রাসঙ্গিক অংশগুলি খুঁজে বের করে, সেগুলো প্রম্পটে অন্তর্ভুক্ত করে এবং উত্তর তৈরি করে।
+এখন ডকুমেন্টের বিষয়বস্তু সম্পর্কে নির্দিষ্ট প্রশ্ন করুন। এমন কিছু প্রশ্ন করুন যা স্পষ্টভাবে ডকুমেন্টে উল্লেখিত আছে। সিস্টেম প্রাসঙ্গিক অংশ অনুসন্ধান করে, সেগুলোকে প্রম্পটে অন্তর্ভুক্ত করে এবং উত্তর তৈরি করে।
-### উৎস রেফারেন্স চেক করুন
+### উত্স রেফারেন্স যাচাই করুন
-প্রতিটি উত্তরের সাথে উৎস রেফারেন্স ও সাদৃশ্য স্কোর দেখানো হয়। এই স্কোরগুলো (০ থেকে ১) দেখায় প্রতিটি অংশ কতটা আপনার প্রশ্নের সাথে প্রাসঙ্গিক ছিল। বেশি স্কোর মানে ভাল মিল। এটি আপনাকে উৎস উপাদানের সাথে উত্তর যাচাই করতে সাহায্য করে।
+প্রতিটি উত্তরে উত্স রেফারেন্স এবং সাদৃশ্য স্কোর অন্তর্ভুক্ত থাকে লক্ষ্য করুন। এই স্কোর (০ থেকে ১) দেখায় আপনার প্রশ্নের সাথে প্রতিটি অংশ কতটা প্রাসঙ্গিক ছিল। উচ্চ স্কোর মানে ভালো মিল। এটি আপনাকে উত্তরের সাথে উৎস উপাদানের মিল যাচাই করতে সাহায্য করে।
-*এই স্ক্রিনশটে প্রশ্নের ফলাফল, তৈরি উত্তর, উৎস রেফারেন্স, এবং প্রতিটি প্রাপ্ত অংশের প্রাসঙ্গিকতা স্কোর দেখানো হয়েছে।*
+*এই স্ক্রিনশটে প্রশ্ন ফলাফল দেখানো হয়েছে যেখানে উৎপন্ন উত্তর, উত্স রেফারেন্স এবং প্রাসঙ্গিকতার স্কোরগুলি প্রতিটি উদ্ধার করা অংশের জন্য প্রদর্শিত হয়েছে।*
-### প্রশ্নের সাথে পরীক্ষা-নিরীক্ষা করুন
+### প্রশ্ন নিয়ে পরীক্ষা করুন
বিভিন্ন ধরনের প্রশ্ন চেষ্টা করুন:
-- নির্দিষ্ট তথ্য: "মূল বিষয় কী?"
+- নির্দিষ্ট তথ্য: "প্রধান বিষয় কী?"
- তুলনা: "X এবং Y এর মধ্যে পার্থক্য কী?"
-- সারাংশ: "Z সম্পর্কে মূল পয়েন্টগুলো সারসংক্ষেপ করুন"
+- সারাংশ: "Z সম্পর্কিত মূল পয়েন্টগুলো সারাংশ করুন"
-দেখুন কীভাবে আপনার প্রশ্নের মিল ডকুমেন্টের বিষয়বস্তুর উপর ভিত্তি করে প্রাসঙ্গিকতার স্কোর পরিবর্তন হয়।
+দেখুন কীভাবে প্রাসঙ্গিকতার স্কোর পরিবর্তিত হয় আপনার প্রশ্ন ডকুমেন্ট বিষয়বস্তুর সাথে কতটা মেলে তার উপর ভিত্তি করে।
-## মূল ধারনা
+## মূল ধারণাসমূহ
-### অংশে ভাগ করার কৌশল
+### অংশকরণ কৌশল
-ডকুমেন্টগুলো ৩০ টোকেন ওভারল্যাপ সহ ৩০০ টোকেনের অংশে ভাগ করা হয়। এই ভারসাম্য নিশ্চিত করে প্রতিটি অংশ যথেষ্ট প্রসঙ্গ সহ অর্থবহ থাকে এবং পর্যাপ্ত ছোট থাকে যাতে একাধিক অংশ প্রম্পটে দেওয়া যায়।
+ডকুমেন্টগুলো ৩০০ টোকেন আকারের অংশে ভাগ করা হয় যেখানে ৩০ টোকেন ওভারল্যাপে থাকে। এই ভারসাম্য নিশ্চিত করে প্রতিটি অংশে যথেষ্ট প্রসঙ্গ থাকে তা অর্থপূর্ণ করার জন্য পাশাপাশি অংশগুলো ছোট থাকার কারণে একাধিক অংশ প্রম্পটে অন্তর্ভুক্ত করা যায়।
### সাদৃশ্য স্কোর
-প্রত্যেক প্রাপ্ত অংশের সাথে একটি সাদৃশ্য স্কোর থাকে ০ থেকে ১ এর মধ্যে, যা নির্দেশ করে অংশটি ব্যবহারকারীর প্রশ্নের সাথে কতটা মিলেছে। নিচের চিত্রে স্কোর পরিসর এবং সিস্টেম কীভাবে সেগুলো ব্যবহার করে ফলাফল ফিল্টার করে দেখানো হয়েছে:
+প্রত্যেক উদ্ধারকৃত অংশের সাথে একটি সাদৃশ্য স্কোর থাকে ০ থেকে ১ এর মধ্যে যা নির্দেশ করে এটি ব্যবহারকারীর প্রশ্নের সাথে কতটা মিল রয়েছে। নিচের চিত্রটি এই স্কোরের পরিসর এবং সিস্টেম কীভাবে তা ব্যবহার করে ফলাফল ছাঁকছে তা দেখায়:
-*এই চিত্রটি ০ থেকে ১ এর স্কোর পরিসর দেখায়, যেখানে ০.৫ একটি ন্যূনতম সীমা যা অপ্রাসঙ্গিক অংশগুলো ফিল্টার করে।*
+*এই চিত্রটি ০ থেকে ১ পর্যন্ত স্কোর পরিসর দেখায়, যার ন্যূনতম সীমা ০.৫ যা প্রাসঙ্গিক নয় এমন অংশগুলি ফিল্টার করে।*
-স্কোর পরিসর:
-- ০.৭-১.০: অত্যন্ত প্রাসঙ্গিক, সঠিক মিল
+স্কোরের পরিসর:
+- ০.৭-১.০: অত্যন্ত প্রাসঙ্গিক, নির্দিষ্ট মিল
- ০.৫-০.৭: প্রাসঙ্গিক, ভালো প্রসঙ্গ
-- ০.৫ এর নিচে: ফিল্টার করা হয়েছে, খুব অপ্রাসঙ্গিক
+- ০.৫ এর নিচে: ফিল্টার করা হয়েছে, খুব আলাদা
-গুণগত মান নিশ্চিত করতে সিস্টেম শুধুমাত্র ন্যূনতম সীমা ছাপিয়ে অংশগুলোই পুনরুদ্ধার করে।
+গুণগতমান নিশ্চিত করার জন্য সিস্টেম ন্যূনতম সীমার নিচের অংশগুলি উদ্ধার করে না।
-এম্বেডিংস ভাল কাজ করে যখন অর্থ স্পষ্টভাবে ক্লাস্টার হয়, কিন্তু কিছু দুর্বলতা থাকে। নিচের চিত্রটি সাধারণ ব্যর্থতার কারণগুলো দেখায় — খুব বড় অংশগুলো মটমটানো ভেক্টর তৈরি করে, খুব ছোট অংশগুলোতে প্রসঙ্গ নেই, অস্পষ্ট শব্দগুলো একাধিক ক্লাস্টার নির্দেশ করে, এবং সঠিক-মিল লুকআপ (আইডি, পার্ট নম্বর) এম্বেডিংসের সাথে কাজ করে না:
+এম্বেডিং গুলো অর্থ স্পষ্টভাবে গুচ্ছভুক্ত হলে ভাল কাজ করে, তবে এর কিছু সীমাবদ্ধতা আছে। নিচের চিত্রটি প্রচলিত ব্যর্থতার ধরণ দেখায় — অনেক বড় অংশ অস্পষ্ট ভেক্টর তৈরি করে, ছোট অংশে প্রসঙ্গ কম থাকে, অসম্পূর্ণ শব্দ একাধিক গুচ্ছের দিকে নির্দেশ করে, এবং সঠিক ম্যাচ লুকআপ (আইডি, পার্ট নং) এমবেডিং এর সাথে কাজ করে না:
-*এই চিত্রটি সাধারণ এম্বেডিং ব্যর্থতার কারণগুলো দেখায়: খুব বড় অংশ, খুব ছোট অংশ, অস্পষ্ট শব্দ যা একাধিক ক্লাস্টার নির্দেশ করে, এবং সঠিক-মিল লুকআপ যেমন আইডি।*
+*এই চিত্রটি প্রচলিত এমবেডিং ব্যর্থতার ধরন দেখায়: খুব বড় অংশ, খুব ছোট অংশ, অস্পষ্ট শব্দ যা একাধিক গুচ্ছের দিকে নির্দেশ করে, এবং সঠিক ম্যাচ লুকআপ (আইডি ইত্যাদি)।*
-### ইন-মেমোরি স্টোরেজ
+### ইন-মেমরি স্টোরেজ
-এই মডিউলটি সরলতার জন্য ইন-মেমোরি স্টোরেজ ব্যবহার করে। যখন আপনি অ্যাপ্লিকেশন পুনরায় চালু করবেন, তখন আপলোড করা ডকুমেন্টগুলো হারিয়ে যাবে। প্রোডাকশন সিস্টেম স্থায়ী ভেক্টর ডাটাবেস যেমন Qdrant বা Azure AI Search ব্যবহার করে।
+সহজতার জন্য এই মডিউল ইন-মেমরি স্টোরেজ ব্যবহার করে। অ্যাপ্লিকেশন পুনরায় চালু করলে আপলোড করা ডকুমেন্ট হারানো যায়। উৎপাদন সিস্টেমে Qdrant বা Azure AI Search এর মত স্থায়ী ভেক্টর ডাটাবেস ব্যবহৃত হয়।
### প্রসঙ্গ উইন্ডো ব্যবস্থাপনা
-প্রত্যেক মডেলের একটি সর্বোচ্চ প্রসঙ্গ উইন্ডো থাকে। বড় ডকুমেন্টের সব অংশ প্রম্পটে অন্তর্ভুক্ত করা সম্ভব নয়। সিস্টেম সর্বোচ্চ N টি প্রাসঙ্গিক অংশ (ডিফল্ট ৫) পুনরুদ্ধার করে যাতে সীমাবদ্ধতা বজায় থাকে এবং যথাযথ প্রসঙ্গ দিয়ে সঠিক উত্তর দেওয়া যায়।
+প্রতিটি মডেলের একটি সর্বোচ্চ প্রসঙ্গ উইন্ডো থাকে। বড় ডকুমেন্ট থেকে প্রতিটি অংশ অন্তর্ভুক্ত করা সম্ভব নয়। সিস্টেম সর্বোচ্চ N প্রাসঙ্গিক অংশ (ডিফল্ট ৫) উদ্ধার করে যাতে সীমার মধ্যে থেকে যথেষ্ট প্রসঙ্গ দিয়ে সঠিক উত্তর দেয়া যায়।
-## যখন RAG গুরুত্বপূর্ণ
+## কখন RAG গুরুত্বপূর্ণ
-RAG সবসময় সঠিক পন্থা নয়। নিচের সিদ্ধান্ত গাইডটি আপনাকে সাহায্য করবে বুঝতে কখন RAG মূল্য সংযোজন করে এবং কখন সরল পন্থা — যেমন সরাসরি প্রম্পটে বিষয়বস্তু অন্তর্ভুক্ত করা বা মডেলের অভ্যন্তরীণ জ্ঞানের উপর নির্ভর করা — যথেষ্ট:
+RAG সবসময় সঠিক পন্থা নয়। নিচের সিদ্ধান্ত নির্দেশিকা আপনাকে সাহায্য করবে জানার জন্য কখন RAG মূল্যায়ন যোগ করে এবং কখন সরল পদ্ধতি — যেমন সরাসরি প্রম্পটে বিষয় বস্তু অন্তর্ভুক্ত করা বা মডেলের নিজস্ব জ্ঞান নির্ভর করা — যথেষ্ট:
-*এই চিত্রটি সিদ্ধান্ত গাইড দেখায় যাতে বোঝা যায় কখন RAG মূল্য সংযোজন করে এবং কখন সরল পন্থাগুলো যথেষ্ট।*
+*এই চিত্রটি একটি সিদ্ধান্ত নির্দেশিকা দেখায় যে কখন RAG মূল্যায়ন যোগ করে এবং কখন সরল পদ্ধতি যথেষ্ট।*
## পরবর্তী ধাপ
@@ -434,6 +431,6 @@ RAG সবসময় সঠিক পন্থা নয়। নিচের
---
-**দ্রষ্টব্য**:
-এই নথিটি AI অনুবাদ সেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। আমরা যথাসাধ্য সঠিকতার চেষ্টা করি, তবে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অনিশ্চয়তা থাকতে পারে দয়া করে খেয়াল রাখুন। মূল নথিটি তার মূল ভাষায়ই কর্তৃত্বপূর্ণ উৎস হিসাবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদের পরামর্শ দেওয়া হয়। এই অনুবাদের ব্যবহারে সৃষ্ট কোন ভুল-বুঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই।
+**অস্বীকৃতি**:
+এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা শুদ্ধতার জন্য চেষ্টা করি, অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার স্বভাষায় কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে প্রয়োজনীয় ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই।
\ No newline at end of file
diff --git a/translations/bn/04-tools/README.md b/translations/bn/04-tools/README.md
index 2527e7756..dbcdc40f8 100644
--- a/translations/bn/04-tools/README.md
+++ b/translations/bn/04-tools/README.md
@@ -1,84 +1,84 @@
-# মডিউল ০৪: টুলস সহ AI এজেন্টস
+# মডিউল ০৪: টুলসসহ AI এজেন্টস
## বিষয়বস্তু তালিকা
-- [ভিডিও ওয়াকথ্রু](../../../04-tools)
-- [আপনি যা শিখবেন](../../../04-tools)
-- [প্রয়োজনীয়তা](../../../04-tools)
-- [টুলস সহ AI এজেন্টস বোঝা](../../../04-tools)
-- [কিভাবে টুল কল হয়](../../../04-tools)
- - [টুল সংজ্ঞাগুলি](../../../04-tools)
- - [সিদ্ধান্ত গ্রহণ](../../../04-tools)
- - [নির্বাহ](../../../04-tools)
- - [প্রতিক্রিয়া তৈরি](../../../04-tools)
- - [স্থাপত্য: স্প্রিং বুট অটো-ওয়্যারিং](../../../04-tools)
-- [টুল চেইনিং](../../../04-tools)
-- [অ্যাপ্লিকেশন চালান](../../../04-tools)
-- [অ্যাপ্লিকেশন ব্যবহার](../../../04-tools)
- - [সরল টুল ব্যবহার চেষ্টা করুন](../../../04-tools)
- - [টুল চেইনিং পরীক্ষা করুন](../../../04-tools)
- - [আলাপচারিতা প্রবাহ দেখুন](../../../04-tools)
- - [বিভিন্ন অনুরোধ নিয়ে পরীক্ষা করুন](../../../04-tools)
-- [মূল ধারণা](../../../04-tools)
- - [রি-অ্যাক্ট প্যাটার্ন (যুক্তি ও কার্য)](../../../04-tools)
- - [টুল বর্ণনা গুরুত্বপূর্ণ](../../../04-tools)
- - [সেশন ম্যানেজমেন্ট](../../../04-tools)
- - [ত্রুটি পরিচালনা](../../../04-tools)
-- [উপলভ্য টুলস](../../../04-tools)
-- [টুল-ভিত্তিক এজেন্ট কখন ব্যবহার করবেন](../../../04-tools)
-- [টুলস বনাম RAG](../../../04-tools)
-- [পরবর্তী ধাপ](../../../04-tools)
+- [ভিডিও ওয়াকথ্রু](#ভিডিও-ওয়াকথ্রু)
+- [আপনি কি শিখবেন](#আপনি-কি-শিখবেন)
+- [প্রাক-শর্ত](#প্রাক-শর্ত)
+- [টুলসসহ AI এজেন্টস বোঝা](#টুলসসহ-ai-এজেন্টস-বোঝা)
+- [কিভাবে টুল কলিং কাজ করে](#কিভাবে-টুল-কলিং-কাজ-করে)
+ - [টুল সংজ্ঞা](#টুল-সংজ্ঞা)
+ - [সিদ্ধান্ত গ্রহণ](#সিদ্ধান্ত-গ্রহণ)
+ - [কার্যকরী اجرا](#কার্যকরী-اجرا)
+ - [প্রতিক্রিয়া প্রস্তুতি](#প্রতিক্রিয়া-প্রস্তুতি)
+ - [স্থাপত্য: স্প্রিং বুট অটো-ওয়্যারিং](#স্থাপত্য-স্প্রিং-বুট-অটো-ওয়্যারিং)
+- [টুল চেইনিং](#টুল-চেইনিং)
+- [অ্যাপ্লিকেশন চালান](#অ্যাপ্লিকেশন-চালান)
+- [অ্যাপ্লিকেশন ব্যবহার](#অ্যাপ্লিকেশন-ব্যবহার)
+ - [সহজ টুল ব্যবহার চেষ্টা করুন](#সহজ-টুল-ব্যবহার-চেষ্টা-করুন)
+ - [টুল চেইনিং পরীক্ষা করুন](#টুল-চেইনিং-পরীক্ষা-করুন)
+ - [আলোচনা প্রবাহ দেখুন](#কথোপকথনের-প্রবাহ-দেখুন)
+ - [বিভিন্ন অনুরোধ নিয়ে পরীক্ষা করুন](#বিভিন্ন-অনুরোধ-নিয়ে-পরীক্ষা-করুন)
+- [মূল ধারণা](#মূল-ধারণাসমূহ)
+ - [ReAct প্যাটার্ন (যুক্তিবিদ্যা ও কার্যক্রম)](#react-প্যাটার্ন-যুক্তি-ও-কর্ম)
+ - [টুল বর্ণনা গুরুত্বপূর্ণ](#টুল-বর্ণনা-গুরুত্বপূর্ণ)
+ - [সেশন ব্যবস্থাপনা](#সেশন-ম্যানেজমেন্ট)
+ - [ত্রুটি পরিচালনা](#ত্রুটি-হ্যান্ডলিং)
+- [উপলব্ধ টুলস](#উপলব্ধ-টুলস)
+- [কখন টুল-ভিত্তিক এজেন্ট ব্যবহার করবেন](#কখন-টুল-ভিত্তিক-এজেন্ট-ব্যবহার-করবেন)
+- [টুলস বনাম RAG](#টুলস-বনাম-rag)
+- [পরবর্তী ধাপ](#পরবর্তী-ধাপ)
## ভিডিও ওয়াকথ্রু
-এই লাইভ সেশনটি দেখুন যা ব্যাখ্যা করে কিভাবে এই মডিউল থেকে শুরু করবেন:
+এই লাইভ সেশনটি দেখুন যা এই মডিউল শুরু করার পদ্ধতি ব্যাখ্যা করে:
-
+
-## আপনি যা শিখবেন
+## আপনি কি শিখবেন
-এখন পর্যন্ত, আপনি শিখেছেন কিভাবে AI এর সাথে আলাপচারিতা করবেন, কার্যকরী প্রম্পট গঠন করবেন এবং আপনার ডকুমেন্টে ভিত্তি করে উত্তর দেবেন। কিন্তু একটি মৌলিক সীমাবদ্ধতা আছে: ভাষা মডেল শুধু টেক্সট তৈরি করতে পারে। এটি আবহাওয়া পরীক্ষা করতে পারেনা, হিসাব করতে পারেনা, ডাটাবেস অনুসন্ধান করতে পারেনা, অথবা বাইরের সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে পারেনা।
+এখন পর্যন্ত, আপনি শিখেছেন কিভাবে AI-এর সাথে কথোপকথন করবেন, প্রম্পটগুলো কার্যকরভাবে গঠন করবেন, এবং আপনার ডকুমেন্টে প্রতিক্রিয়া ভিত্তি করবেন। কিন্তু এখনো একটি মৌলিক সীমাবদ্ধতা রয়ে গেছে: ভাষার মডেল শুধুমাত্র টেক্সট তৈরি করতে পারে। এটি আবহাওয়া চেক করতে, গণনা করতে, ডেটাবেজ প্রশ্ন করতে বা বাইরের সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে পারবে না।
-টুলস এই সীমাবদ্ধতাকে বদলে দেয়। মডেলকে যে ফাংশনগুলো কল করতে পারে তা দিয়ে, আপনি এটিকে একটি টেক্সট জেনারেটর থেকে এমন একটি এজেন্টে রূপান্তর করেন যা কাজ করতে সক্ষম। মডেল সিদ্ধান্ত নেয় কখন টুল প্রয়োজন, কোন টুল ব্যবহার করতে হবে, এবং কী পরামিতি পাঠাতে হবে। আপনার কোড ফাংশনটি সম্পাদন করে ফলাফল ফেরত দেয়। মডেল সে ফলাফলকে তার উত্তরে অন্তর্ভুক্ত করে।
+টুলস এটা পরিবর্তন করে। মডেলকে কল করতে পারার জন্য ফাংশনের প্রবেশাধিকার দিয়ে, আপনি এটিকে টেক্সট জেনারেটর থেকে এমন একটি এজেন্টে পরিণত করেন যা পদক্ষেপ নিতে পারে। মডেল সিদ্ধান্ত নেয় কখন একটি টুল দরকার, কোন টুল ব্যবহার করবে এবং কি প্যারামিটার পাঠাবে। আপনার কোড ফাংশনটি চালায় এবং ফলাফল ফেরত দেয়। মডেল ঐ ফলাফলকে তার প্রতিক্রিয়ায় অন্তর্ভুক্ত করে।
-## প্রয়োজনীয়তা
+## প্রাক-শর্ত
-- সম্পন্ন [মডিউল ০১ – পরিচিতি](../01-introduction/README.md) (Azure OpenAI রিসোর্স ডিপ্লয় করা হয়েছে)
-- পূর্ববর্তী মডিউলগুলি সম্পন্ন করা সুপারিশকৃত (এই মডিউল [মডিউল ০৩ এর RAG ধারণা](../03-rag/README.md) উল্লেখ করে Tools vs RAG তুলনায়)
-- রুট ডিরেক্টরিতে `.env` ফাইল সহ Azure ক্রেডেনশিয়ালস (মডিউল ০১ এ `azd up` দ্বারা তৈরি)
+- সম্পন্ন [মডিউল ০১ - পরিচিতি](../01-introduction/README.md) (Azure OpenAI রিসোর্স ডিপ্লয় করা হয়েছে)
+- পূর্ববর্তী মডিউলগুলি সম্পন্ন করা সুপারিশ করা হয়েছে (এই মডিউল [মডিউল ০৩ এর RAG ধারণা](../03-rag/README.md) উল্লেখ করে টুলস বনাম RAG তুলনায়)
+- `.env` ফাইল মূল ডিরেক্টরিতে Azure প্রমাণপত্রাদি সহ (মডিউল ০১-এ `azd up` দ্বারা তৈরি)
-> **নোট:** যদি আপনি মডিউল ০১ সম্পন্ন না করে থাকেন, প্রথমে সেখানে ডিপ্লয়মেন্ট নির্দেশনা অনুসরণ করুন।
+> **বিঃদ্রঃ:** যদি আপনি মডিউল ০১ সম্পন্ন না করে থাকেন, আগে সেখানে ডিপ্লয়মেন্ট নির্দেশনাগুলো অনুসরণ করুন।
-## টুলস সহ AI এজেন্টস বোঝা
+## টুলসসহ AI এজেন্টস বোঝা
-> **📝 নোট:** এই মডিউলে “এজেন্টস” শব্দটি টুল-কলিং ক্ষমতাসম্পন্ন AI সহকারী বোঝায়। এটি আলাদা **Agentic AI** প্যাটার্ন থেকে (স্বায়ত্তশাসিত এজেন্ট যাদের প্ল্যানিং, মেমোরি এবং বহু-ধাপ যুক্তি আছে) যা আমরা [মডিউল ০৫: MCP](../05-mcp/README.md) এ আলোচনা করব।
+> **📝 নোট:** এই মডিউলে "এজেন্টস" শব্দটি টুল কলিং সক্ষমতা সহ উন্নত AI সহকারী বোঝায়। এটি ভিন্ন একটি বিষয় হলো **Agentic AI** প্যাটার্নস (স্বয়ংক্রিয় এজেন্টস যাদের পরিকল্পনা, স্মৃতি, ও বহু-পর্ব যুক্তি থাকে) যা আমরা [মডিউল ০৫: MCP](../05-mcp/README.md)-এ আলোচনা করব।
-টুল ছাড়া, একটি ভাষা মডেল তার প্রশিক্ষণ ডেটা থেকে কেবলমাত্র টেক্সট তৈরি করতে পারে। এটি বর্তমান আবহাওয়া জানতে চাইলে, এটি অনুমান করবে। টুল দিলে, এটি আবহাওয়ার API কল করতে পারে, হিসাব করতে পারে, অথবা ডাটাবেস অনুসন্ধান করতে পারে — তারপর ওই বাস্তব ফলাফল উত্তরে বুনতে পারে।
+টুল ছাড়া, একটি ভাষার মডেল কেবল তার প্রশিক্ষণ ডেটা থেকে টেক্সট তৈরি করতে পারে। বর্তমান আবহাওয়া জানতে চাইলে, এটি অনুমান করতে হবে। টুল দিলে, এটি একটি আবহাওয়া API কল করতে পারে, গণনা করতে পারে বা ডেটাবেজ প্রশ্ন করতে পারে — তারপর ঐ বাস্তব ফলাফলগুলোকে তার প্রতিক্রিয়ায় নিয়ে আসতে পারে।
-
+
-*টুল ছাড়া মডেল কেবল অনুমান করে — টুলসহ এটি API কল করে, হিসাব চালায় এবং রিয়েল-টাইম তথ্য প্রদান করে।*
+*বিনা টুলে মডেল অনুমান করে — টুলসহ এটি API কল করতে পারে, গণনা চালাতে পারে, এবং রিয়েল-টাইম ডেটা ফেরত দিতে পারে।*
-টুলস সহ একটি AI এজেন্ট একটি **রি-অ্যাক্ট (যুক্তি ও কার্য)** প্যাটার্ন অনুসরণ করে। মডেল শুধু উত্তর দেয় না — এটি চিন্তা করে কি দরকার, টুল কল করে কাজ করে, ফলাফল পর্যবেক্ষণ করে, এবং সিদ্ধান্ত নেয় আবার কাজ করবে কি না অথবা চূড়ান্ত উত্তর দেবে:
+একটি টুলসহ AI এজেন্ট অনুসরণ করে **যুক্তিবিদ্যা ও কার্যক্রম (ReAct)** প্যাটার্ন। মডেল শুধু সাড়া দেয় না — এটি চিন্তা করে কি দরকার, টুল কল করে কাজ করে, ফলাফল দেখে, এবং সিদ্ধান্ত নেয় আবার কাজ করবে কিনা বা চূড়ান্ত উত্তর দেবে:
-১. **যুক্তি** — এজেন্ট ব্যবহারকারীর প্রশ্ন বিশ্লেষণ করে এবং দরকারি তথ্য নির্ধারণ করে
-২. **কার্য** — সঠিক টুল নির্বাচন করে, সঠিক পরামিতি তৈরি করে এবং কল করে
-৩. **পর্যবেক্ষণ** — টুলের আউটপুট গ্রহণ করে এবং ফলাফল মূল্যায়ন করে
-৪. **পুনরাবৃত্তি বা প্রতিক্রিয়া** — অতিরিক্ত তথ্য প্রয়োজনে লুপ করে; না হলে ভাষাগত উত্তর তৈরি করে
+১. **যুক্তি করো** — এজেন্ট ব্যবহারকারীর প্রশ্ন বিশ্লেষণ করে কি তথ্য দরকার দিচ্ছে নির্ধারণ করে
+২. **কার্যকরী হও** — এজেন্ট সঠিক টুল নির্বাচন করে, সঠিক প্যারামিটার জেনারেট করে, এবং কল করে
+৩. **পর্যবেক্ষণ করো** — এজেন্ট টুলের আউটপুট পায় এবং ফলাফল মূল্যায়ন করে
+৪. **পুনরাবৃত্তি বা প্রতিক্রিয়া প্রদান করো** — যদি বেশি তথ্য দরকার, এজেন্ট পুনরায় লুপ করে; নয়তো প্রাকৃতিক ভাষায় উত্তর রচনা করে
-
+
-*রি-অ্যাক্ট চক্র — এজেন্ট কী করতে হবে ভাববে, টুল কল করে কাজ করবে, ফলাফল দেখবে এবং যতক্ষণ দরকার লুপ করবে, তারপর চূড়ান্ত উত্তর দেবে।*
+*ReAct চক্র — এজেন্ট কি করব তা ভাবছে, টুল কল করে কাজ করছে, ফলাফল পর্যবেক্ষণ করছে, এবং লুপ করে যতক্ষণ না চূড়ান্ত উত্তর দিতে পারে।*
-এটি স্বয়ংক্রিয়ভাবে ঘটে। আপনি টুলসমূহ এবং তাদের বর্ণনা নির্ধারণ করেন। মডেল সিদ্ধান্ত নেয় কখন ও কিভাবে এগুলো ব্যবহার করতে হবে।
+এটি স্বয়ংক্রিয়ভাবে ঘটে। আপনি টুলগুলি ও তাদের বর্ণনা নির্ধারণ করেন। মডেল সিদ্ধান্ত নেয় কখন এবং কিভাবে সেগুলো ব্যবহার করবে।
-## কিভাবে টুল কল হয়
+## কিভাবে টুল কলিং কাজ করে
-### টুল সংজ্ঞাগুলি
+### টুল সংজ্ঞা
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-আপনি পরিষ্কার বর্ণনা ও প্যারামিটার স্পেসিফিকেশন সহ ফাংশনগুলো সংজ্ঞায়িত করেন। মডেল সিস্টেম প্রম্পটে এই বর্ণনাগুলো দেখে এবং বোঝে প্রতিটি টুল কি করে।
+আপনি ফাংশনগুলো স্পষ্ট বর্ণনা এবং প্যারামিটার স্পেসিফিকেশনের সাথে সংজ্ঞায়িত করেন। মডেল এই বর্ণনাগুলো তার সিস্টেম প্রম্পটে দেখে এবং বুঝতে পারে প্রতিটি টুল কি করে।
```java
@Component
@@ -86,7 +86,7 @@ public class WeatherTool {
@Tool("Get the current weather for a location")
public String getCurrentWeather(@P("Location name") String location) {
- // আপনার আবহাওয়া অনুসন্ধান লজিক
+ // আপনার আবহাওয়ার অনুসন্ধান লজিক
return "Weather in " + location + ": 22°C, cloudy";
}
}
@@ -96,139 +96,139 @@ public interface Assistant {
String chat(@MemoryId String sessionId, @UserMessage String message);
}
-// সহকারী স্বয়ংক্রিয়ভাবে স্প্রিং বুট দ্বারা সংযুক্ত:
-// - ChatModel বিন
-// - @Component ক্লাস থেকে সব @Tool পদ্ধতি
-// - সেশন ব্যবস্থাপনার জন্য ChatMemoryProvider
+// Spring Boot স্বয়ংক্রিয়ভাবে সহকারীকে যুক্ত করে নিচের সাথে:
+// - ChatModel বীন
+// - @Component ক্লাস থেকে সকল @Tool পদ্ধতি
+// - সেশন পরিচালনার জন্য ChatMemoryProvider
```
-নিম্নলিখিত আর্কচিত্র প্রতিটি অ্যানোটেশন বিশ্লেষণ করে এবং দেখায় কিভাবে প্রতিটি অংশ AI কে টুল কল করার সময় এবং কোন আর্গুমেন্ট পাঠাতে হবে বুঝতে সাহায্য করে:
+নীচের ডায়াগ্রাম প্রতিটি অ্যানোটেশন ভাঙ্গে এবং দেখায় কিভাবে প্রতিটা অংশ AI-কে সাহায্য করে কখন টুল কল করতে হবে এবং কি আর্গুমেন্ট পাঠাতে হবে:
-
+
-*টুল সংজ্ঞার গঠন — @Tool AI কে বলে কখন এটি ব্যবহার করতে হবে, @P প্রতিটি প্যারামিটার বর্ণনা করে, এবং @AiService স্টার্টআপে সবকিছুকে সংযোগ করে।*
+*একটি টুল সংজ্ঞার কাঠামো — @Tool AI-কে বলে কখন এটি ব্যবহার করতে, @P প্রতিটি প্যারামিটার বর্ণনা করে, এবং @AiService স্টার্টআপে সবকিছু সংযুক্ত করে।*
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chat দিয়ে চেষ্টা করুন:** [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) খুলুন এবং জিজ্ঞাসা করুন:
-> - "কিভাবে আমি আসল আবহাওয়ার API যেমন OpenWeatherMap ইন্টিগ্রেট করব mock ডাটা এর পরিবর্তে?"
-> - "কীসেখানে একটি ভাল টুল বর্ণনা যা AI কে সঠিকভাবে ব্যবহার করতে সাহায্য করে?"
-> - "কিভাবে API এর ত্রুটি ও রেট লিমিট মোকাবিলা করব টুল ইমপ্লিমেন্টেশনে?"
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) চ্যাট দিয়ে চেষ্টা করুন:** [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) খুলুন এবং জিজ্ঞাসা করুন:
+> - "কিভাবে বাস্তব আবহাওয়া API যেমন OpenWeatherMap ইন্টিগ্রেট করব মক ডেটার পরিবর্তে?"
+> - "কী ভালো টুল বর্ণনা তৈরি করে যা AI-কে সঠিক ব্যবহার করতে সাহায্য করে?"
+> - "API এরর এবং রেট লিমিট কিভাবে হ্যান্ডেল করব টুল ইমপ্লিমেন্টেশনে?"
### সিদ্ধান্ত গ্রহণ
-যখন কেউ জিজ্ঞাসা করে "সিয়াটলে আবহাওয়া কেমন?", মডেল এলোমেলোভাবে টুল পালন করে না। এটি ব্যবহারকারীর উদ্দেশ্যের সাথে প্রতিটি টুল বর্ণনা মিলিয়ে দেখে, প্রাসঙ্গিকতার স্কোর দেয়, এবং শ্রেষ্ঠ ম্যাচ নির্বাচন করে। এরপর সঠিক প্যারামিটার সহ একটি গঠনমূলক ফাংশন কল তৈরি করে — এই ক্ষেত্রে `location` সেট করে `"Seattle"`।
+যখন ব্যবহারকারী জিজ্ঞাসা করে "সিয়াটেলের আবহাওয়া কেমন?", মডেল যেকোনো টুল এলোমেলোভাবে বেছে নেয় না। এটি ব্যবহারকারীর উদ্দেশ্য প্রতিটি টুলের বর্ণনার সাথে তুলনা করে, প্রাসঙ্গিকতার জন্য স্কোর করে, এবং সেরা মিল নির্বাচন করে। পরে সঠিক প্যারামিটার সহ একটি কাঠামোবদ্ধ ফাংশন কল তৈরি করে — এখানে, `location` কে `"Seattle"` সেট করে।
-যদি কোনো টুল ব্যবহারকারীর অনুরোধের সাথে মেলে না, মডেল তার নিজস্ব জ্ঞান থেকে উত্তর দেয়। যদি একাধিক টুল মেলে, তবে সবচেয়ে নির্দিষ্টটি পছন্দ করে।
+যদি কোনো টুল ব্যবহারকারীর অনুরোধ মেলাতে না পারে, মডেল তার নিজের জ্ঞান থেকে উত্তর দেয়। যদি একাধিক টুল মেলে তবে সবচেয়ে নির্দিষ্টটি বেছে নেয়।
-
+
-*মডেল ব্যবহারকারীর উদ্দেশ্যের সাথে উপলব্ধ প্রতিটি টুল মূল্যায়ন করে এবং শ্রেষ্ঠটি নির্বাচন করে — এজন্য পরিষ্কার, নির্দিষ্ট টুল বর্ণনা লেখা গুরুত্বপূর্ণ।*
+*মডেল ব্যবহারকারীর উদ্দেশ্যের বিরুদ্ধে প্রতিটি টুল মূল্যায়ন করে এবং সেরা মিল নির্বাচন করে — এ জন্য স্পষ্ট, নির্দিষ্ট টুল বর্ণনা লেখা গুরুত্বপূর্ণ।*
-### নির্বাহ
+### কার্যকরী اجرا
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-স্প্রিং বুট সমস্ত নিবন্ধিত টুলস সহ `@AiService` ইন্টারফেস অটো-ওয়্যার করে এবং LangChain4j স্বয়ংক্রিয়ভাবে টুল কল চালায়। দৃশ্যের পেছনে, সম্পূর্ণ টুল কল ছয় পর্যায়ে প্রবাহিত হয় — ব্যবহারকারীর ভাষাগত প্রশ্ন থেকে শুরু করে ভাষাগত উত্তরে ফেরত যাওয়া পর্যন্ত:
+স্প্রিং বুট ডিক্লারেটিভ `@AiService` ইন্টারফেসটির সাথে সমস্ত নিবন্ধিত টুলস অটো-ওয়্যার করে, এবং LangChain4j স্বয়ংক্রিয়ভাবে টুল কল চালায়। পিছনের দৃশ্যে, একটি পূর্ণাঙ্গ টুল কল ছয় ধাপে প্রবাহিত হয় — ব্যবহারকারীর প্রাকৃতিক ভাষার প্রশ্ন থেকে শুরু করে পুনরায় প্রাকৃতিক ভাষার উত্তর পর্যন্ত:
-
+
-*পূর্ণ-চক্র প্রবাহ — ব্যবহারকারী প্রশ্ন করে, মডেল একটি টুল নির্বাচন করে, LangChain4j এটি কার্যকর করে, এবং মডেল ফলাফল স্বাভাবিক ভাষায় বুনে দেয়।*
+*শেষ থেকে শেষ পর্যন্ত প্রবাহ — ব্যবহারকারী প্রশ্ন করে, মডেল একটি টুল বেছে নেয়, LangChain4j সেটি চালায়, এবং মডেল ফলাফলকে একটি প্রাকৃতিক প্রতিক্রিয়ায় বুনে দেয়।*
-আপনি যদি মডিউল ০০ তে [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) চলিয়েথাকেন, আপনি ইতিমধ্যেই এই প্যাটার্ন দেখেছেন — `Calculator` টুলগুলো একইভাবে কল হয়েছিল। নিচের সিকোয়েন্স ডায়াগ্রামটি দেখায় ডেমোর পেছনের ঘটনার সঠিক ধারাবাহিকতা:
+পিছনের দৃশ্যে, `AiServices` যেকোনো টুলের জন্য টুল-কলিং লুপ চালায় — এখানে একটি সাধারণ `Calculator` দিয়ে উদাহরণ দেওয়া হয়েছে। নিচের সিকুয়েন্স ডায়াগ্রামটি ঠিক কি ঘটে তা দেখায়:
-
+
-*কুইক স্টার্ট ডেমোর টুল-কলিং লুপ — `AiServices` আপনার মেসেজ ও টুল স্কিমা LLM-এ পাঠায়, LLM `add(42, 58)` এর মত ফাংশন কল দেয়, LangChain4j লোকালি `Calculator` মেথড চালায়, এবং ফলাফল ফাইনাল উত্তরের জন্য ফেরত পাঠায়।*
+*টুল-কলিং লুপ — `AiServices` আপনার বার্তা ও টুল স্কিমাস LLM-এ পাঠায়, LLM `add(42, 58)` মত ফাংশন কল দিয়ে উত্তর দেয়, LangChain4j লোকালি `Calculator` মেথড চালায়, এবং ফলাফল চূড়ান্ত উত্তরের জন্য ফেরত দেয়।*
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chat দিয়ে চেষ্টা করুন:** [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) খুলুন এবং জিজ্ঞাসা করুন:
-> - "কি রকম রি-অ্যাক্ট প্যাটার্ন কাজ করে এবং কেন এটি AI এজেন্টের জন্য কার্যকর?"
-> - "এজেন্ট কিভাবে সিদ্ধান্ত নেয় কোন টুল ব্যবহার করবে এবং কোন ক্রমে?"
-> - "যদি টুল পরিচালনা ব্যর্থ হয় - আমি কীভাবে ত্রুটি মজবুতভাবে পরিচালনা করব?"
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) চ্যাট দিয়ে চেষ্টা করুন:** [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) খুলুন এবং জিজ্ঞাসা করুন:
+> - "ReAct প্যাটার্ন কিভাবে কাজ করে এবং AI এজেন্টসের জন্য কেন কার্যকর?"
+> - "এজেন্ট কিভাবে সিদ্ধান্ত নেয় কোন টুল ব্যবহার করতে এবং কি ক্রমে?"
+> - "যদি কোনো টুল কার্যকরী করা ব্যর্থ হয় — শক্তভাবে ত্রুটি কীভাবে হ্যান্ডেল করব?"
-### প্রতিক্রিয়া তৈরি
+### প্রতিক্রিয়া প্রস্তুতি
-মডেল আবহাওয়ার তথ্য গ্রহণ করে এবং ব্যবহারকারীর জন্য স্বাভাবিক ভাষার মত একটি উত্তর ফর্ম্যাট করে।
+মডেল আবহাওয়ার তথ্য পায় এবং এটি ব্যবহারকারীর জন্য প্রাকৃতিক ভাষায় প্রতিক্রিয়া তৈরি করে।
### স্থাপত্য: স্প্রিং বুট অটো-ওয়্যারিং
-এই মডিউল LangChain4j এর স্প্রিং বুট ইন্টিগ্রেশন ব্যবহার করে যেখানে `@AiService` ডেক্লারেটিভ ইন্টারফেস থাকে। স্টার্টআপে স্প্রিং বুট সমস্ত `@Component` যা `@Tool` মেথড থাকে, আপনার `ChatModel` বিন এবং `ChatMemoryProvider` আবিষ্কার করে — এবং সবকিছু একক `Assistant` ইন্টারফেসে বায়ারিং করে, কোন বয়লারপ্লেট ছাড়াই।
+এই মডিউলটি LangChain4j এর স্প্রিং বুট ইন্টিগ্রেশনের সাথে ডিক্লারেটিভ `@AiService` ইন্টারফেস ব্যবহার করে। স্টার্টআপে স্প্রিং বুট প্রতিটি `@Component` খুঁজে পায় যা `@Tool` মেথড ধারণ করে, আপনার `ChatModel` বিন এবং `ChatMemoryProvider` — তারপর এগুলো একটি একক `Assistant` ইন্টারফেসে একত্রিত করে শূন্য বয়লারপ্লেট দিয়ে।
-
+
-*The @AiService ইন্টারফেস ChatModel, টুল কম্পোনেন্ট এবং মেমোরি প্রোভাইডার একত্র করে — স্প্রিং বুট সব ওয়্যারিং স্বয়ংক্রিয়ভাবে পরিচালনা করে।*
+*@AiService ইন্টারফেস ChatModel, টুল উপাদান, এবং মেমোরি প্রোভাইডারকে একত্রিত করে — স্প্রিং বুট সব ওয়্যারিং স্বয়ংক্রিয়ভাবে করে।*
-ফুল অনুরোধ জীবনী নিচের সিকোয়েন্স ডায়াগ্রামে দেখানো হয়েছে — HTTP অনুরোধ থেকে কন্ট্রোলার, সার্ভিস, এবং অটো-ওয়্যার্ড প্রক্সির মাধ্যমে টুল নির্বাহ পর্যন্ত:
+এখানে সম্পূর্ণ অনুরোধ জীবনচক্র একটি সিকুয়েন্স ডায়াগ্রামে — HTTP অনুরোধ থেকে শুরু করে কন্ট্রোলার, সার্ভিস, অটো-ওয়্যারড প্রোঅক্সি পর্যন্ত, এবং টুল কার্যকরী করতে ফিরে যাওয়া:
-
+
-*সম্পূর্ণ স্প্রিং বুট অনুরোধ জীবনী — HTTP অনুরোধ কন্ট্রোলার ও সার্ভিসের মাধ্যমে প্রবাহিত হয়, তারপর অটো-ওয়্যার্ড Assistant প্রক্সি LLM এবং টুল কল স্বয়ংক্রিয়ভাবে পরিচালনা করে।*
+*সম্পূর্ণ স্প্রিং বুট অনুরোধ জীবনচক্র — HTTP অনুরোধ কন্ট্রোলার ও সার্ভিস হয়ে অটো-ওয়্যারড Assistant প্রোঅক্সিতে যায়, যা স্বয়ংক্রিয়ভাবে LLM ও টুল কলসমূহ সমন্বয় করে।*
এই পদ্ধতির প্রধান সুবিধাসমূহ:
-- **স্প্রিং বুট অটো-ওয়্যারিং** — ChatModel ও টুলস স্বয়ংক্রিয় ইনজেকশন
-- **@MemoryId প্যাটার্ন** — স্বয়ংক্রিয় সেশনভিত্তিক মেমোরি ম্যানেজমেন্ট
-- **একক ইনস্ট্যান্স** — Assistant একবার তৈরি করে পুনঃব্যবহারযোগ্য
-- **টাইপ-সেফ নির্বাহ** — সরাসরি জাভা মেথড কল টাইপ রূপান্তরের সাথে
-- **বহুপর্যায়িক সমন্বয়** — টুল চেইনিং স্বয়ংক্রিয়ভাবে পরিচালনা
-- **শূন্য বয়লারপ্লেট** — কোন ম্যানুয়াল `AiServices.builder()` কল বা মেমোরি হ্যাশম্যাপ নেই
+- **স্প্রিং বুট অটো-ওয়্যারিং** — ChatModel এবং টুলস স্বয়ংক্রিয় ইনজেকশন
+- **@MemoryId প্যাটার্ন** — স্বয়ংক্রিয় সেশন-ভিত্তিক মেমোরি ব্যবস্থাপনা
+- **একক ইনস্ট্যান্স** — অ্যাসিস্ট্যান্ট একবার তৈরি করে উন্নত পারফরমেন্সের জন্য পুনর্ব্যবহার
+- **টাইপ-সেফ কার্যকরী اجرا** — জাভা মেথড সরাসরি টাইপ রূপান্তরের মাধ্যমে কল করা
+- **মাল্টি-টার্ন অর্কেস্ট্রেশন** — স্বয়ংক্রিয় টুল চেইনিং পরিচালনা
+- **শূন্য বয়লারপ্লেট** — কোনো ম্যানুয়াল `AiServices.builder()` কল বা মেমোরি HashMap নেই
-বিকল্প পদ্ধতি (ম্যানুয়াল `AiServices.builder()`) আরো কোড দাবি করে এবং স্প্রিং বুট ইন্টিগ্রেশনের সুবিধা মিস করে।
+বিকল্প পদ্ধতিগুলি (ম্যানুয়াল `AiServices.builder()`) অনেক কোড প্রয়োজন এবং স্প্রিং বুট ইন্টিগ্রেশনের সুবিধাগুলো মিস করে।
## টুল চেইনিং
-**টুল চেইনিং** — টুল-ভিত্তিক এজেন্টের প্রকৃত ক্ষমতা প্রকাশ পায় যখন একক প্রশ্নের জন্য একাধিক টুল লাগে। উদাহরণ: "সিয়াটলে ফারেনহাইটে আবহাওয়া কেমন?" — এজেন্ট স্বয়ংক্রিয়ভাবে দুইটি টুল চেইন করে: প্রথমে `getCurrentWeather` কল করে সেলসিয়াসে তাপমাত্রা পায়, তারপর সেটি `celsiusToFahrenheit` এ পাঠিয়ে রূপান্তর করে — সবকিছু একক আলাপচারিতা পর্যায়ে।
+**টুল চেইনিং** — টুল-ভিত্তিক এজেন্টের প্রকৃত শক্তি তখন প্রকাশ পায় যখন একটি প্রশ্নে একাধিক টুল দরকার হয়। বলুন "সিয়াটেলের আবহাওয়া ফারেনহাইটে কেমন?" এবং এজেন্ট স্বয়ংক্রিয়ভাবে দুইটি টুল চেইন করে: প্রথমে `getCurrentWeather` কল করে সেলসিয়াসে তাপমাত্রা পায়, তারপর সেটি `celsiusToFahrenheit`-এ পাঠিয়ে রূপান্তর করে — সব এক কথোপকথন পর্বে।
-
+
-*টুল চেইনিং বাস্তবে — এজেন্ট প্রথমে getCurrentWeather কল করে, সেলসিয়াস ফলাফল celsiusToFahrenheit তে পাঠায়, এবং একত্রিত উত্তর দেয়।*
+*টুল চেইনিং কাজে — এজেন্ট প্রথমে getCurrentWeather কল করে, তারপর সেলসিয়াস ফলাফলকে celsiusToFahrenheit-এ পাঠায়, এবং মিলিত উত্তর দেয়।*
-**সুন্দর ব্যর্থতা** — mock ডাটাতে না থাকা শহরের আবহাওয়া চাইলে টুল একটি ত্রুটি বার্তা দেয়, এবং AI ব্যাখ্যা করে সাহায্য করতে পারছে না, ক্র্যাশ না করে। টুলগুলো সুরক্ষিতভাবে ব্যর্থ হয়। নিচের আর্কচিত্রে দুই ধরনের পদ্ধতি তুলনা করা হয়েছে — যথাযথ ত্রুটি পরিচালনায় এজেন্ট ব্যতিক্রম টেনে বুঝিয়ে দেয়, অন্যথায় পুরো অ্যাপ্লিকেশন ক্র্যাশ হয়ে যায়:
+**সুশৃঙ্খল ব্যর্থতা** — এমন শহরের আবহাওয়া জিজ্ঞাসা করুন যা মক ডেটায় নেই। টুল ত্রুটি বার্তা দেয়, এবং AI ব্যাখ্যা করে তা সাহায্য করতে পারে না, পুরো অ্যাপ্লিকেশন ক্র্যাশ করে না। টুলস নিরাপদে ব্যর্থ হয়। নিচের ডায়াগ্রাম দুটি পদ্ধতির তুলনা করে — সঠিক ত্রুটি পরিচালনায় এজেন্ট ব্যতিক্রম ধরে সাহায্যপূর্ণ উত্তর দেয়, অন্যদিকে ত্রুটি না হলে পুরো অ্যাপ্লিকেশন ক্র্যাশ করে:
-
+
-*যখন একটি টুল ব্যর্থ হয়, এজেন্ট ত্রুটি ধরে সাহায্যকারী ব্যাখ্যা দেয় ক্র্যাশ করার পরিবর্তে।*
+*যখন কোনো টুল ব্যর্থ হয়, এজেন্ট ত্রুটি ধরে সাহায্যপূর্ণ ব্যাখ্যা সহ সাড়া দেয় ক্র্যাশ না করে।*
-এটি একক আলাপটার্নে ঘটে। এজেন্ট স্বতন্ত্রভাবে একাধিক টুল কল পরিচালনা করে।
+এটি এক কথোপকথন পর্বে ঘটে। এজেন্ট স্বয়ংক্রিয়ভাবে একাধিক টুল কল সমন্বয় করে।
## অ্যাপ্লিকেশন চালান
-**ডিপ্লয়মেন্ট যাচাই করুন:**
+**ডিপ্লয়মেন্ট যাচাই:**
-রুট ডিরেক্টরিতে `.env` ফাইলটি নিশ্চিত করুন Azure ক্রেডেনশিয়ালস সহ (মডিউল ০১ চলাকালে তৈরি)। মডিউল ডিরেক্টরি (`04-tools/`) থেকে এটি চালান:
+নিশ্চিত করুন মূল ডিরেক্টরিতে `.env` ফাইল আছে Azure প্রমাণপত্রাদি সহ (মডিউল ০১ চলাকালীন তৈরি)। এই মডিউল ডিরেক্টরি থেকে চালান (`04-tools/`):
-**Bash:**
+**Bash:**
```bash
cat ../.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT দেখানো উচিত
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
-Get-Content ..\.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT দেখানো উচিত
+Get-Content ..\.env # প্রদর্শন করা উচিত AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
+
**অ্যাপ্লিকেশন শুরু করুন:**
-> **নোট:** যদি আপনি ইতোমধ্যে রুট ডিরেক্টরি থেকে `./start-all.sh` ব্যবহার করে সব অ্যাপ্লিকেশন শুরু করে থাকেন (যেমন মডিউল ০১ এ উল্লেখ করা হয়েছে), তাহলে এই মডিউল ইতোমধ্যেই ৮০৮৪ পোর্টে চলছে। নিচের শুরু কমান্ডগুলি এড়িয়ে সরাসরি http://localhost:8084 এ যান।
+> **বিঃদ্রঃ:** যদি আপনি ইতোমধ্যে সব অ্যাপ্লিকেশন চালু করে থাকেন `./start-all.sh` দিয়ে মূল ডিরেক্টরি থেকে (মডিউল ০১ এ বর্ণিত), এই মডিউলটি ইতোমধ্যে ৮০৮৪ পোর্টে চলছে। আপনি নিচের শুরু কমান্ড বাদ দিতে পারেন এবং সরাসরি http://localhost:8084 এ যেতে পারেন।
-**অপশন ১: স্প্রিং বুট ড্যাশবোর্ড ব্যবহার (VS Code ব্যবহারকারীদের জন্য সুপারিশকৃত)**
+**বিকল্প ১: স্প্রিং বুট ড্যাশবোর্ড ব্যবহার (VS কোড ব্যবহারকারীদের জন্য সুপারিশকৃত)**
-ডেভ কন্টেইনারে স্প্রিং বুট ড্যাশবোর্ড এক্সটেনশন অন্তর্ভুক্ত আছে, যা সব স্প্রিং বুট অ্যাপ্লিকেশন পরিচালনার জন্য ভিজ্যুয়াল ইন্টারফেস দেয়। আপনি VS Code এর Activity Bar এর বামে স্প্রিং বুট আইকন থেকে এটি পাবেন।
+ডেভ কন্টেইনারে স্প্রিং বুট ড্যাশবোর্ড এক্সটেনশন রয়েছে, যা সমস্ত স্প্রিং বুট অ্যাপ্লিকেশন পরিচালনার জন্য ভিজ্যুয়াল ইন্টারফেস দেয়। আপনি এটি VS কোডের বাম পাশের অ্যাক্টিভিটি বারে (স্প্রিং বুট আইকন দেখুন) পাবেন।
স্প্রিং বুট ড্যাশবোর্ড থেকে আপনি:
-- ওয়ার্কস্পেসের সব স্প্রিং বুট অ্যাপ্লিকেশন দেখতে পারবেন
-- এক ক্লিকে অ্যাপ্লিকেশন শুরু/বন্ধ করতে পারবেন
-- রিয়েল-টাইম লগস দেখতে পারবেন
-- অ্যাপ্লিকেশনের অবস্থা মনিটর করতে পারবেন
-শুধুমাত্র "tools" এর পাশের প্লে বাটনে ক্লিক করুন এই মডিউলটি শুরু করার জন্য, অথবা সব মডিউল একসাথেই শুরু করুন।
+- ওয়ার্কস্পেসের সব স্প্রিং বুট অ্যাপ্লিকেশন দেখতে পারেন
+- এক ক্লিকে অ্যাপ্লিকেশন শুরু/বন্ধ করতে পারেন
+- বাস্তব সময় লগ দেখতে পারেন
+- অ্যাপ্লিকেশনের অবস্থা পর্যবেক্ষণ করতে পারেন
-এখন দেখুন VS Code-এ Spring Boot Dashboard এর মতো দেখতে:
+শুধুমাত্র "tools" এর পাশে প্লে বোতাম ক্লিক করে এই মডিউল শুরু করুন, অথবা সব মডিউল একসাথে চালু করুন।
-
+স্প্রিং বুট ড্যাশবোর্ড VS কোডে কেমন দেখায়, তা হলো:
+
-*VS Code-এ Spring Boot Dashboard — এক জায়গা থেকে সব মডিউল শুরু, বন্ধ এবং মনিটর করুন*
+*VS কোডে Spring Boot ড্যাশবোর্ড — এক জায়গা থেকে সব মডিউল শুরু, বন্ধ এবং পর্যবেক্ষণ করুন*
-**বিকল্প ২: শেল স্ক্রিপ্ট ব্যবহার করে**
+**বিকল্প ২: শেল স্ক্রিপ্ট ব্যবহার**
-সব ওয়েব অ্যাপ্লিকেশন (মডিউল ০১-০৪) শুরু করুন:
+সব ওয়েব অ্যাপ্লিকেশন (মডিউল ০১-০৪) শুরু করুন:
**Bash:**
```bash
@@ -242,7 +242,7 @@ cd .. # রুট ডিরেক্টরি থেকে
.\start-all.ps1
```
-অথবা শুধু এই মডিউলটি শুরু করুন:
+অথবা শুধুমাত্র এই মডিউল শুরু করুন:
**Bash:**
```bash
@@ -256,9 +256,9 @@ cd 04-tools
.\start.ps1
```
-দুই স্ক্রিপ্টই স্বয়ংক্রিয়ভাবে রুট `.env` ফাইল থেকে পরিবেশ ভেরিয়েবল লোড করে এবং যদি JAR ফাইল না থাকে তাহলে তা তৈরি করবে।
+উভয় স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে রুট `.env` ফাইল থেকে পরিবেশ ভেরিয়েবল লোড করবে এবং যদি JAR ফাইল না থাকে তবে তা তৈরি করবে।
-> **[!NOTE]** আপনি যদি সব মডিউল ম্যানুয়ালি বিল্ড করতে চান শুরু করার আগে:
+> **দ্রষ্টব্য:** আপনি যদি শুরু করার আগে সব মডিউল ম্যানুয়ালি তৈরি করতে চান:
>
> **Bash:**
> ```bash
@@ -274,114 +274,114 @@ cd 04-tools
আপনার ব্রাউজারে http://localhost:8084 খুলুন।
-**বন্ধ করার জন্য:**
+**বন্ধ করতে:**
**Bash:**
```bash
./stop.sh # শুধুমাত্র এই মডিউল
# অথবা
-cd .. && ./stop-all.sh # সমস্ত মডিউলসমূহ
+cd .. && ./stop-all.sh # সব মডিউলগুলি
```
**PowerShell:**
```powershell
.\stop.ps1 # শুধুমাত্র এই মডিউল
# অথবা
-cd ..; .\stop-all.ps1 # সমস্ত মডিউলসমূহ
+cd ..; .\stop-all.ps1 # সমস্ত মডিউল
```
## অ্যাপ্লিকেশন ব্যবহার
-অ্যাপ্লিকেশনটি একটি ওয়েব ইন্টারফেস প্রদান করে যেখানে আপনি একটি AI এজেন্টের সাথে ইন্টারঅ্যাক্ট করতে পারেন যার কাছে আবহাওয়া এবং তাপমাত্রা রূপান্তর সরঞ্জামের অ্যাক্সেস রয়েছে। ইন্টারফেসটি দেখতে কেমন তার একটি উদাহরণ এখানে — এতে দ্রুত শুরু করার উদাহরণ এবং অনুরোধ পাঠানোর জন্য একটি চ্যাট প্যানেল রয়েছে:
+অ্যাপ্লিকেশনটি একটি ওয়েব ইন্টারফেস প্রদান করে যেখানে আপনি এমন একটি AI এজেন্টের সাথে যোগাযোগ করতে পারেন যার হাতে আবহাওয়া এবং তাপমাত্রা রূপান্তর সরঞ্জাম রয়েছে। ইন্টারফেসটি দেখতে কেমন — এতে দ্রুত শুরু করার উদাহরণ এবং অনুরোধ পাঠানোর জন্য একটি চ্যাট প্যানেল অন্তর্ভুক্ত:
-
+
-*AI Agent Tools ইন্টারফেস — সরঞ্জামগুলো নিয়ে দ্রুত উদাহরণ এবং চ্যাট ইন্টারফেস*
+*AI এজেন্ট টুলস ইন্টারফেস - দ্রুত উদাহরণ এবং টুলসের সাথে যোগাযোগের জন্য চ্যাট ইন্টারফেস*
-### সহজ সরঞ্জাম ব্যবহার পরীক্ষা করুন
+### সহজ টুল ব্যবহার চেষ্টা করুন
-একটি সরল অনুরোধ দিয়ে শুরু করুন: "100 ডিগ্রি ফ্যারেনহাইট থেকে সেলসিয়াসে রূপান্তর করুন"। এজেন্ট বুঝবে যে তাকে তাপমাত্রার রূপান্তর সরঞ্জামটি ব্যবহার করতে হবে, সঠিক প্যারামিটার সহ কল করে ফলাফল দিবে। লক্ষ্য করুন কতটা স্বাভাবিক লাগছে - আপনি কোন সরঞ্জাম ব্যবহার করবেন বা কিভাবে কল করবেন তা উল্লেখ করেননি।
+সরল অনুরোধ দিয়ে শুরু করুন: "100 ডিগ্রি ফারেনহাইট কে সেলসিয়াসে রূপান্তর করুন"। এজেন্ট বুঝতে পারছে এটি তাপমাত্রা রূপান্তরের টুল ব্যবহার করবে, সঠিক প্যারামিটার সহ টুলকে কল করে এবং ফলাফল ফিরিয়ে দেয়। লক্ষ্য করুন এটা কতটা স্বাভাবিক — আপনি নির্দিষ্ট করেননি কোন টুল ব্যবহার করবেন বা কীভাবে কল করবেন।
### টুল চেইনিং পরীক্ষা করুন
-এবার একটু জটিল কিছু চেষ্টা করুন: "সিয়াটলের আবহাওয়া কী ও তাকে ফ্যারেনহাইটে রূপান্তর করুন?" দেখুন এজেন্ট কীভাবে ধাপে ধাপে কাজ করে। প্রথমে আবহাওয়া নেয় (যা সেলসিয়াসে দেয়), বুঝতে পারে যে ফ্যারেনহাইটে রূপান্তর করতে হবে, রূপান্তর সরঞ্জাম কল করে এবং উভয় ফলাফলকে একত্রিত করে একটি উত্তর দেয়।
+এখন কিছু বেশি জটিল চেষ্টা করুন: "সিয়াটলের আবহাওয়া কেমন এবং এটা ফারেনহাইটে রূপান্তর করুন?" ধাপে ধাপে এজেন্ট এই কাজ করছে। প্রথমে আবহাওয়া নিয়ে আসে (যা সেলসিয়াসে ফলাফল দেয়), বুঝতে পারে ফারেনহাইটে রূপান্তর করতে হবে, রূপান্তর টুল কল করে, এবং উভয় ফলাফল একত্র করে একটি উত্তর তৈরি করে।
### কথোপকথনের প্রবাহ দেখুন
-চ্যাট ইন্টারফেস কথোপকথনের ইতিহাস রাখে, যা আপনাকে বহুবারের আলাপচারিতা করার সুযোগ দেয়। আপনি সব আগের প্রশ্ন ও উত্তর দেখতে পারেন, ফলে কথোপকথন ট্র্যাক করা এবং কিভাবে এজেন্ট একাধিক বিনিময়ে প্রসঙ্গ তৈরি করছে বোঝা সহজ হয়।
+চ্যাট ইন্টারফেস কথোপকথনের ইতিহাস সংরক্ষণ করে, যা আপনাকে একাধিক দফায় যোগাযোগ করার সুযোগ দেয়। আপনি আগের সব প্রশ্ন এবং উত্তর দেখতে পারেন, যা কথোপকথন ট্র্যাক এবং কিভাবে এজেন্ট একাধিক বিনিময়ে প্রসঙ্গ গড়ে তোলে বুঝতে সহজ করে।
-
+
-*সহজ রূপান্তর, আবহাওয়া অনুসন্ধান, ও টুল চেইনিং দেখানো বহুবারের কথোপকথন*
+*সহজ রূপান্তর, আবহাওয়া খোঁজ ও টুল চেইনিং দেখানো একাধিক দফার কথোপকথন*
-### বিভিন্ন অনুরোধ দিয়ে পরীক্ষা করুন
+### বিভিন্ন অনুরোধ নিয়ে পরীক্ষা করুন
-বিভিন্ন মিলিয়ে দেখুন:
-- আবহাওয়া অনুসন্ধান: "টোকিওর আবহাওয়া কেমন?"
+বিভিন্ন কম্বিনেশন চেষ্টা করুন:
+- আবহাওয়া খোঁজ: "টোকিওর আবহাওয়া কেমন?"
- তাপমাত্রা রূপান্তর: "২৫°C কত কেলভিন?"
-- মিলিত প্রশ্ন: "প্যারিসের আবহাওয়া দেখাও এবং বলো ২০°C এর বেশি কিনা"
+- মিশ্র অনুরোধ: "প্যারিসের আবহাওয়া পরীক্ষা করুন এবং বলুন এটি ২০°C এর উপরে কি না"
-দ্রষ্টব্য করুন কিভাবে এজেন্ট প্রাকৃতিক ভাষা ব্যাখ্যা করে এবং উপযুক্ত টুল কলের সাথে ম্যাচ করে।
+লক্ষ্য করুন এজেন্ট কিভাবে প্রাকৃতিক ভাষা বোঝে এবং যথোপযুক্ত টুল কলস এ ম্যাপ করে।
-## মূল ধারণা
+## মূল ধারণাসমূহ
### ReAct প্যাটার্ন (যুক্তি ও কর্ম)
-এজেন্ট যুক্তি চিন্তা করা (কি করতে হবে) এবং কার্যকর করা (সরঞ্জাম ব্যবহার করা) এর মধ্যে পাল্টায়। এই প্যাটার্ন স্বায়ত্তশাসিত সমস্যা সমাধান সক্ষম করে, শুধু নির্দেশ অনুসরণ করার চেয়ে।
+এজেন্ট যুক্তি করার (কী করতে হবে সিদ্ধান্ত নেওয়া) এবং কর্ম (টুল ব্যবহারের) মধ্যে পাল্টা কাজ করে। এই প্যাটার্ন স্বয়ংক্রিয় সমস্যা সমাধান সক্ষম করে, শুধু নির্দেশনা অনুসরণের বদলে।
### টুল বর্ণনা গুরুত্বপূর্ণ
-আপনার টুলের বর্ণনার গুণগত মান সরাসরি প্রভাব ফেলে এজেন্ট কীভাবে সেগুলো ব্যবহার করে। স্পষ্ট, নির্দিষ্ট বর্ণনা মডেলকে নির্দেশ দেয় কখন এবং কিভাবে প্রতিটি টুল কল করতে হবে।
+আপনার টুলের বর্ণনার গুণাগুণ সরাসরি নির্ধারণ করে এজেন্ট টুলগুলো কত ভাল ব্যবহার করে। পরিষ্কার, স্পষ্ট বর্ণনা মডেলকে সাহায্য করে কখন এবং কিভাবে টুল কল করতে হবে বুঝতে।
### সেশন ম্যানেজমেন্ট
-`@MemoryId` অ্যানোটেশন স্বয়ংক্রিয় সেশনভিত্তিক মেমোরি ব্যবস্থাপনা সক্ষম করে। প্রতিটি সেশন আইডির জন্য একটি নিজস্ব `ChatMemory` ইনস্ট্যান্স `ChatMemoryProvider` বিন দ্বারা পরিচালিত হয়, ফলে একাধিক ব্যবহারকারী একই সময়ে এজেন্টের সাথে আলাপচারিতা করতে পারে কোনো কথোপকথন মিশ্রিত না হয়। নিচের চিত্র দেখায় কিভাবে একাধিক ব্যবহারকারী তাদের সেশন আইডির ভিত্তিতে পৃথক মেমোরি স্টোরে রুট করা হয়:
+`@MemoryId` এনোটেশন স্বয়ংক্রিয় সেশন-ভিত্তিক মেমোরি ব্যবস্থাপনা সক্ষম করে। প্রতিটি সেশন আইডি আলাদা `ChatMemory` ইনস্ট্যান্স পায় যা `ChatMemoryProvider` বিন দ্বারা পরিচালিত হয়, ফলে একাধিক ব্যবহারকারী একই সাথে এজেন্টের সাথে কথা বলতে পারে তাদের কথোপকথন মিশে না। নিচের চিত্রটি দেখায় কীভাবে একাধিক ব্যবহারকারী তাদের সেশন আইডি অনুযায়ী পৃথক মেমোরি স্টোরে রাউট হয়:
-
+
-*প্রতিটি সেশন আইডি আলাদা কথোপকথনের ইতিহাস তৈরি করে — ব্যবহারকারীরা একে অপরের বার্তা কখনই দেখতে পায় না।*
+*প্রতিটি সেশন আইডি পৃথক কথোপকথন ইতিহাসে ম্যাপ হয় — ব্যবহারকারীরা একে অপরের বার্তা দেখে না।*
-### ত্রুটি পরিচালনা
+### ত্রুটি হ্যান্ডলিং
-টুলগুলো ব্যর্থ হতে পারে — API টাইমআউট, ভুল প্যারামিটার, বহিরাগত সার্ভিস বন্ধ হয়ে যাওয়া। প্রোডাকশন এজেন্টগুলোতে ত্রুটি পরিচালনা থাকা জরুরি যাতে মডেল সমস্যা ব্যাখ্যা করতে পারে অথবা বিকল্প চেষ্টা করে, পুরো অ্যাপ্লিকেশন ক্র্যাশ না করে। যখন টুলে কোনো এক্সসেপশন ঘটে, LangChain4j তা ধরা দেয় এবং ত্রুটির বার্তা মডেলে ফেরত দেয়, যা স্বাভাবিক ভাষায় সমস্যা ব্যাখ্যা করতে পারে।
+টুলস ব্যর্থ হতে পারে — API টাইমআউট, প্যারামিটার ভুল হতে পারে, বাহ্যিক সার্ভিস বন্ধ হতে পারে। প্রডাকশন এজেন্টে ত্রুটি হ্যান্ডলিং থাকা উচিত যাতে মডেল সমস্যা ব্যাখ্যা করতে পারে বা বিকল্প চেষ্টা করতে পারে, পুরো অ্যাপ্লিকেশন ক্র্যাশ না করে। যখন একটি টুল এক্সেপশন ছুড়ে ফেলে, LangChain4j তা ধরে নেয় এবং ত্রুটি বার্তাটি মডেলে ফেরত দেয়, যা তখন প্রাকৃতিক ভাষায় সমস্যা ব্যাখ্যা করতে পারে।
-## উপলব্ধ সরঞ্জামসমূহ
+## উপলব্ধ টুলস
-নিচের চিত্রে দেখানো হয়েছে আপনি যে বিস্তৃত সরঞ্জাম সমন্বয় তৈরি করতে পারেন তার চিত্র। এই মডিউল আবহাওয়া এবং তাপমাত্রা সরঞ্জাম দেখায়, কিন্তু একই `@Tool` প্যাটার্ন যেকোনো জাভা মেথডের জন্য কাজ করে — ডাটাবেস কোয়েরি থেকে পেমেন্ট প্রসেসিং পর্যন্ত।
+নিচের চিত্রটি দেখায় আপনি যে বিস্তৃত টুল ইকোসিস্টেম তৈরি করতে পারেন। এই মডিউল আবহাওয়া এবং তাপমাত্রার টুলস প্রদর্শন করে, তবে একই `@Tool` প্যাটার্ন যেকোনো জাভা মেথডের জন্য কাজ করে — ডাটাবেস কোয়েরি থেকে পেমেন্ট প্রসেসিং পর্যন্ত।
-
+
-*যে কোনো জাভা মেথড @Tool দিয়ে অ্যানোটেট করলে তা AI-র কাছে উপলব্ধ হয় — প্যাটার্নটি ডাটাবেস, API, ইমেইল, ফাইল অপারেশন এবং আরও অনেক ক্ষেত্রে প্রসারিত হয়।*
+*@Tool দিয়ে এনোটেট করা যেকোনো জাভা মেথড AI’র জন্য উপলব্ধ হয় — প্যাটার্নটি ডাটাবেস, API, ইমেইল, ফাইল অপারেশনসহ আরও প্রসারিত।*
-## কখন টুল ভিত্তিক এজেন্ট ব্যবহার করবেন
+## কখন টুল-ভিত্তিক এজেন্ট ব্যবহার করবেন
-প্রতিটি অনুরোধে টুল দরকার হয় না। সিদ্ধান্ত আসে AI-কে বাহ্যিক সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে হবে কিনা বা নিজের জ্ঞানের ওপর থেকে উত্তর দিতে পারবে কিনা। নিচের গাইড সংক্ষেপে বলে কখন টুল মূল্যবান এবং কখন তা প্রয়োজন নেই:
+প্রতিটি অনুরোধে টুল প্রয়োজন হয় না। সিদ্ধান্ত হয় AI বাহ্যিক সিস্টেমের সাথে যোগাযোগ করবে কিনা বা নিজের জ্ঞান থেকে উত্তর দেবে কিনা। নিচের গাইডটি সংক্ষেপে বলে কখন টুল দরকার এবং কখন অপ্রয়োজনীয়:
-
+
-*দ্রুত সিদ্ধান্ত নেয়ার জন্য গাইড — টুল দরকার রিয়েল-টাইম ডেটা, হিসাব, এবং ক্রিয়াকলাপের জন্য; সাধারণ জ্ঞানের প্রশ্ন এবং সৃজনশীল কাজের জন্য দরকার হয় না।*
+*দ্রুত সিদ্ধান্ত নেওয়ার গাইড — টুলস বাস্তবসময় ডেটা, হিসাব ও কার্যকলাপের জন্য; সাধারণ জ্ঞান ও সৃজনশীল কাজের জন্য দরকার হয় না।*
-## টুল বনাম RAG
+## টুলস বনাম RAG
-মডিউল ০৩ এবং ০৪ দুটোই AI-র ক্ষমতা বাড়ায়, কিন্তু মৌলিকভাবে ভিন্ন পথে। RAG মডেলকে **জ্ঞান** দেয় ডকুমেন্ট রিট্রিভ করে। টুলস মডেলকে **কর্ম** করার ক্ষমতা দেয় ফাংশন কল করে। নিচের চিত্রে এই দুই পদ্ধতির তুলনা করা হয়েছে — প্রতিটি ওয়ার্কফ্লো কার্যপ্রণালী থেকে শুরু করে তাদের সুবিধা ও অসুবিধা পর্যন্ত:
+মডিউল ০৩ এবং ০৪ দুটোই AI-কে আরও যোগ্য করে তবে মৌলিকভাবে ভিন্নভাবে। RAG মডেলকে **জ্ঞান** অ্যাক্সেস করায় ডকুমেন্ট রিট্রিভ করে। টুলস মডেলকে **কার্য** করতে দেয় ফাংশন কল করে। নিচের চিত্রটি সাইড বাই সাইড তুলনা করে — প্রতিটি কর্মপ্রবাহ কিভাবে কাজ করে এবং তাদের ট্রেড-অফ রয়েছে:
-
+
-*RAG স্থির ডকুমেন্ট থেকে তথ্য নেয় — টুলস কর্ম সম্পাদন করে এবং গতিশীল, রিয়েল-টাইম ডেটা আনে। অনেক প্রোডাকশন সিস্টেম উভয়কে একত্র করে।*
+*RAG স্থির ডকুমেন্ট থেকে তথ্য আনয়নে, টুলস কার্য সম্পাদন ও বাস্তবসময় ডেটা আনয়নে ব্যবহৃত হয়। অনেক প্রডাকশন সিস্টেম উভয়ই ব্যবহার করে।*
-বাস্তবে, অনেক প্রোডাকশন সিস্টেম উভয় পদ্ধতি ব্যবহার করে: RAG দিয়ে আপনার ডকুমেন্টেশনে ভিত্তি স্থাপন এবং টুলস দিয়ে লাইভ ডেটা আনা বা অপারেশন সম্পাদন করা।
+অ্যাকচুয়ালি, অনেক প্রডাকশন সিস্টেম উভয় পদ্ধতির সমন্বয় করে: RAG আপনার ডকুমেন্টেশনে ভিত্তি স্থাপন করতে, আর টুলস লایভ ডেটা আনতে বা অপারেশন চালাতে।
## পরবর্তী ধাপ
-**পরবর্তী মডিউল:** [05-mcp - Model Context Protocol (MCP)](../05-mcp/README.md)
+**পরবর্তী মডিউল:** [05-mcp - মডেল কনটেক্সট প্রোটোকল (MCP)](../05-mcp/README.md)
---
-**নেভিগেশন:** [← আগের: মডিউল ০৩ - RAG](../03-rag/README.md) | [প্রধান পৃষ্ঠায় ফিরে যান](../README.md) | [পরবর্তী: মডিউল ০৫ - MCP →](../05-mcp/README.md)
+**নেভিগেশন:** [← পূর্ববর্তী: মডিউল ০৩ - RAG](../03-rag/README.md) | [মূল পৃষ্ঠায় ফিরে যান](../README.md) | [পরবর্তী: মডিউল ০৫ - MCP →](../05-mcp/README.md)
---
-**অস্বীকারোক্তি**:
-এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। আমরা যথাসাধ্য সঠিকতার দিকে লক্ষ্য রাখি, তবে স্বয়ংক্রিয় অনুবাদে ভুল বা ত্রুটি থাকতে পারে এমনটি দয়া করে বিবেচনা করুন। যেখানে মূল নথিটি তার স্থানীয় ভাষায় রয়েছে তা কর্তৃপক্ষস্বরূপ বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ করা সুপারিশ করা হয়। এই অনুবাদ ব্যবহারে সৃষ্ট কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই।
+**অস্বীকৃতি**:
+এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা শুদ্ধতার জন্য চেষ্টা করি, অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার স্বভাষায় কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে প্রয়োজনীয় ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই।
\ No newline at end of file
diff --git a/translations/bn/README.md b/translations/bn/README.md
index 833903eec..878b1bf0e 100644
--- a/translations/bn/README.md
+++ b/translations/bn/README.md
@@ -1,19 +1,19 @@
-# নবীনদের জন্য LangChain4j
+# LangChain4j শিক্ষানবিসদের জন্য
-LangChain4j এবং Azure OpenAI GPT-5.2 দিয়ে AI অ্যাপ্লিকেশন তৈরি করার একটি কোর্স, প্রাথমিক চ্যাট থেকে AI এজেন্ট পর্যন্ত।
+LangChain4j এবং Azure OpenAI GPT-5.2 দিয়ে এআই অ্যাপ্লিকেশন তৈরি করার জন্য একটি কোর্স, যা মৌলিক চ্যাট থেকে শুরু করে AI এজেন্ট পর্যন্ত।
-### 🌐 বহু-ভাষা সমর্থন
+### 🌐 বহুভাষিক সমর্থন
-#### GitHub Action এর মাধ্যমে সমর্থিত (স্বয়ংক্রিয় ও সর্বদা আপ-টু-ডেট)
+#### GitHub Action দ্বারা সমর্থিত (স্বয়ংক্রিয় এবং সর্বদা আপ-টু-ডেট)
[Arabic](../ar/README.md) | [Bengali](./README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
-> **লোকালি ক্লোন করতে চান?**
+> **স্থানীয়ভাবে ক্লোন করতে চান?**
>
-> এই রিপোজিটরিতে ৫০+ ভাষার অনুবাদ রয়েছে যা ডাউনলোড সাইজ অনেক বড় করে তোলে। অনুবাদ ছাড়া ক্লোন করতে, sparse checkout ব্যবহার করুন:
+> এই রেপোজিটরিটিতে ৫০+ ভাষার অনুবাদ রয়েছে যা ডাউনলোডের আকার অনেক বাড়ায়। অনুবাদ ছাড়া ক্লোন করতে sparse checkout ব্যবহার করুন:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -29,62 +29,60 @@ LangChain4j এবং Azure OpenAI GPT-5.2 দিয়ে AI অ্যাপ্
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> এটি আপনাকে কোর্সটি সম্পন্ন করতে প্রয়োজনীয় সমস্ত কিছু দ্রুত ডাউনলোড করতে দেয়।
+> এভাবে আপনি দ্রুত ডাউনলোড সহ কোর্স সম্পূর্ণ করতে সবকিছু পাবেন।
-## বিষয়বস্তু সূচি
+## বিষয়বস্তু তালিকা
-1. [দ্রুত শুরু](00-quick-start/README.md) - LangChain4j দিয়ে শুরু করুন
-2. [পরিচিতি](01-introduction/README.md) - LangChain4j এর মূল বিষয় শিখুন
-3. [প্রম্পট ইঞ্জিনিয়ারিং](02-prompt-engineering/README.md) - কার্যকর প্রম্পট ডিজাইন মাস্টার করুন
-4. [RAG (রিট্রিভাল-অগমেন্টেড জেনারেশন)](03-rag/README.md) - বুদ্ধিমান জ্ঞানভিত্তিক ব্যবস্থা তৈরি করুন
-5. [টুলস](04-tools/README.md) - বাহ্যিক টুলস এবং সরল সহকারী সংহত করুন
-6. [MCP (মডেল কনটেক্সট প্রোটোকল)](05-mcp/README.md) - মডেল কনটেক্সট প্রোটোকল (MCP) এবং এজেন্টিক মডিউল নিয়ে কাজ করুন
+1. [পরিচিতি](01-introduction/README.md) - LangChain4j এর মূল বিষয়গুলো শেখা
+2. [প্রম্পট ইঞ্জিনিয়ারিং](02-prompt-engineering/README.md) - কার্যকর প্রম্পট ডিজাইনে দক্ষতা অর্জন
+3. [RAG (রিট্রিভাল-অগমেন্টেড জেনারেশন)](03-rag/README.md) - বুদ্ধিমান জ্ঞানে ভিত্তিক সিস্টেম তৈরি করুন
+4. [উপকরণ](04-tools/README.md) - বাইরের উপকরণ এবং সহজ সহকারী একত্রিত করা
+5. [MCP (মডেল কনটেক্সট প্রোটোকল)](05-mcp/README.md) - Model Context Protocol (MCP) এবং Agentic মডিউলের সঙ্গে কাজ করা
### ভিডিও ওয়াকথ্রু
-প্রতিটি মডিউলের সাথে একটি সঙ্গী লাইভ সেশন থাকে যেখানে আমরা ধাপে ধাপে ধারণা এবং কোড একত্রে প্রদর্শন করি।
+প্রতিটি মডিউলের একটি সংযুক্ত লাইভ সেশন রয়েছে যেখানে আমরা ধাপে ধাপে ধারণা এবং কোড ব্যাখ্যা করি।
| মডিউল | ভিডিও |
|--------|-------|
-| ০১ - পরিচিতি | [LangChain4j দিয়ে শুরু করা](https://www.youtube.com/live/nl_troDm8rQ) |
-| ০২ - প্রম্পট ইঞ্জিনিয়ারিং | [LangChain4j সাথে প্রম্পট ইঞ্জিনিয়ারিং](https://www.youtube.com/live/PJ6aBaE6bog) |
-| ০৩ - RAG | [LangChain4j এর মাধ্যমে RAG](https://www.youtube.com/watch?v=_olq75ZH_eY) |
-| ০৪ - টুলস ও ০৫ - MCP | [টুলস এবং MCP সহ AI এজেন্ট](https://www.youtube.com/watch?v=O_J30kZc0rw) |
+| 01 - পরিচিতি | [LangChain4j দিয়ে শুরু করা](https://www.youtube.com/live/nl_troDm8rQ) |
+| 02 - প্রম্পট ইঞ্জিনিয়ারিং | [LangChain4j দিয়ে প্রম্পট ইঞ্জিনিয়ারিং](https://www.youtube.com/live/PJ6aBaE6bog) |
+| 03 - RAG | [LangChain4j দিয়ে RAG](https://www.youtube.com/watch?v=_olq75ZH_eY) |
+| 04 - টুলস এবং 05 - MCP | [টুলস এবং MCP দিয়ে AI এজেন্ট](https://www.youtube.com/watch?v=O_J30kZc0rw) |
---
-## শিক্ষার পথ
+## শেখার পথ
-**LangChain4j তে নতুন?** মূল শব্দ এবং ধারণার সংজ্ঞার জন্য [Glossary](docs/GLOSSARY.md) দেখুন।
+**LangChain4j এ নতুন?** মূল টার্ম এবং ধারণার সংজ্ঞাগুলির জন্য [Glossary](docs/GLOSSARY.md) দেখুন।
> **দ্রুত শুরু**
-১. এই রিপোজিটরিটি আপনার GitHub অ্যাকাউন্টে fork করুন
-২. **Code** → **Codespaces** ট্যাবে ক্লিক করুন → **...** → **নতুন অপশনসহ...** নির্বাচন করুন
-৩. ডিফল্ট ব্যবহার করুন – এটি এই কোর্সের জন্য তৈরি ডেভেলপমেন্ট কনটেইনার বেছে নেবে
-৪. **Create codespace** ক্লিক করুন
-৫. পরিবেশ প্রস্তুত হতে ৫-১০ মিনিট অপেক্ষা করুন
-৬. সরাসরি [দ্রুত শুরু](./00-quick-start/README.md) এ যান শুরু করার জন্য!
+1. আপনার GitHub অ্যাকাউন্টে এই রেপোজিটরি ফর্ক করুন
+2. **Code** → **Codespaces** ট্যাব → **...** → **New with options...** এ ক্লিক করুন
+3. ডিফল্ট ব্যবহার করুন – এটি এই কোর্সের জন্য তৈরি Development container নির্বাচন করবে
+4. **Create codespace** ক্লিক করুন
+5. পরিবেশ প্রস্তুত হতে ৫-১০ মিনিট অপেক্ষা করুন
+6. শুরুতেই [পরিচিতি](./01-introduction/README.md) এ যান!
-মডিউলগুলি সম্পন্ন করার পরে, LangChain4j টেস্টিং ধারণা বাস্তবায়নের জন্য [Testing Guide](docs/TESTING.md) দেখুন।
+মডিউল সমাপ্তির পরে, LangChain4j পরীক্ষার ধারণাগুলো দেখতে [Testing Guide](docs/TESTING.md) অনুসন্ধান করুন।
-> **দ্রষ্টব্য:** এই প্রশিক্ষণে GitHub মডেল এবং Azure OpenAI উভয়ই ব্যবহার করা হয়। [দ্রুত শুরু](00-quick-start/README.md) মডিউল GitHub মডেল ব্যবহার করে (Azure সাবস্ক্রিপশন প্রয়োজন নেই), যখন মডিউল ১-৫ Azure OpenAI ব্যবহার করে। যদি আপনার না থাকে তবে [FREE Azure অ্যাকাউন্ট](https://aka.ms/azure-free-account) দিয়ে শুরু করুন।
+> **দ্রষ্টব্য:** এই প্রশিক্ষণটি Azure OpenAI ব্যবহার করে। যদি আপনি আগে থেকে না থাকেন তবে একটি [FREE Azure account](https://aka.ms/azure-free-account) নিয়ে শুরু করুন।
-## GitHub Copilot এর সাথে শিক্ষালাভ
+## GitHub Copilot এর মাধ্যমে শেখা
-দ্রুত কোডিং শুরু করতে, GitHub Codespace বা আপনার স্থানীয় IDE-তে এই প্রকল্পটি devcontainer সহ খুলুন। এই কোর্সের devcontainer ইতোমধ্যে GitHub Copilot নিয়ে AI পেয়ার প্রোগ্রামিং এর জন্য প্রস্তুত করা হয়েছে।
+দ্রুত কোডিং শুরু করতে, এই প্রোজেক্টটি GitHub Codespace অথবা আপনার স্থানীয় IDE তে devcontainer ব্যবহার করে খুলুন। এই কোর্সে ব্যবহৃত devcontainer পূর্বে GitHub Copilot দ্বারা AI জোড়া প্রোগ্রামিং এর জন্য কনফিগার করা আছে।
-প্রতিটি কোড উদাহরণে GitHub Copilot কে জিজ্ঞাসা করার জন্য প্রস্তাবিত প্রশ্ন অন্তর্ভুক্ত আছে যা আপনার বোঝাপড়া গভীর করবে। 💡/🤖 প্রবণতা জন্য খুঁজুন:
+প্রতিটি কোড উদাহরণ সহ প্রস্তাবিত প্রশ্নগুলিও থাকে যেগুলো GitHub Copilot কে জিজ্ঞাসা করে আপনার বোধগম্যতা গভীর করতে পারেন। 💡/🤖 প্রম্পটগুলোর জন্য খুঁজুন:
-- **জাভা ফাইল হেডার** - প্রতিটি উদাহরণের জন্য নির্দিষ্ট প্রশ্ন
-- **মডিউল README** - কোড উদাহরণের পরে অনুসন্ধানের প্রশ্ন
+- **জাভা ফাইল হেডার** - প্রতিটি উদাহরণের নির্দিষ্ট প্রশ্ন
+- **মডিউল README গুলো** - কোড উদাহরণের পরে অনুসন্ধান প্রম্পট
-**কিভাবে ব্যবহার করবেন:** যেকোন কোড ফাইল খুলুন এবং Copilot কে প্রস্তাবিত প্রশ্ন করুন। এটি সম্পূর্ণ কোডবেসের প্রেক্ষাপট ধরে রেখেছে এবং ব্যাখ্যা, সম্প্রসারণ এবং বিকল্প প্রস্তাব করতে পারে।
-
-আরও জানতে চান? [কোপাইলট ফর AI পেয়ার প্রোগ্রামিং](https://aka.ms/GitHubCopilotAI) দেখুন।
+**কিভাবে ব্যবহার করবেন:** যেকোনো কোড ফাইল খুলুন এবং প্রস্তাবিত প্রশ্নগুলো Copilot কে জিজ্ঞাসা করুন। এটি পুরো কোডবেসের প্রসঙ্গ জানে এবং ব্যাখ্যা, সম্প্রসারণ ও বিকল্প পরামর্শ দিতে সক্ষম।
+আরও জানতে চান? দেখুন [AI Paired Programming এর জন্য Copilot](https://aka.ms/GitHubCopilotAI)।
## অতিরিক্ত সম্পদ
@@ -115,36 +113,37 @@ LangChain4j এবং Azure OpenAI GPT-5.2 দিয়ে AI অ্যাপ্
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
-[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
----
+[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
-### কোপাইলট সিরিজ
-[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
+---
+
+### কপাইলট সিরিজ
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
-## সাহায্য গ্রহণ
+## সাহায্য পাওয়া
-যদি আপনি আটকে যান বা AI অ্যাপ নির্মাণ সম্পর্কে কোন প্রশ্ন থাকে, তাহলে যোগ দিন:
+যদি আপনি আটকে যান বা AI অ্যাপ তৈরি করার বিষয়ে কোনও প্রশ্ন থাকে, যোগ দিন:
[](https://aka.ms/foundry/discord)
-যদি আপনি প্রোডাক্ট ফিডব্যাক বা ত্রুটি সম্পর্কে জানাতে চান, তাহলে যান:
+যদি আপনার পণ্য প্রতিক্রিয়া বা ত্রুটি থাকে, নির্মাণ করার সময় এখানে যান:
[](https://aka.ms/foundry/forum)
## লাইসেন্স
-MIT লাইসেন্স - বিস্তারিত জানতে দেখুন [LICENSE](../../LICENSE) ফাইল।
+MIT লাইসেন্স - বিস্তারিত দেখতে [LICENSE](../../LICENSE) ফাইল দেখুন।
---
-**অস্বীকৃতি**:
-এই নথি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। আমরা সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে জানুন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। প্রকৃত নথিটি তার নিজ ভাষায় প্রাধান্যপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানুষের দ্বারা করা অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে সৃষ্ট কোনো ভুল ধারণা বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই।
+**অস্বীকৃতি**:
+এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা শুদ্ধতার জন্য চেষ্টা করি, অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার স্বভাষায় কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে প্রয়োজনীয় ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই।
\ No newline at end of file
diff --git a/translations/bn/docs/GLOSSARY.md b/translations/bn/docs/GLOSSARY.md
index ac59c4f91..8cf40fa9d 100644
--- a/translations/bn/docs/GLOSSARY.md
+++ b/translations/bn/docs/GLOSSARY.md
@@ -1,232 +1,230 @@
-# LangChain4j টার্ম সংজ্ঞা
+# LangChain4j শব্দকোষ
-## বিষয়সূচি
+## সূচিপত্র
-- [মূল ধারণাসমূহ](../../../docs)
-- [LangChain4j উপাদানসমূহ](../../../docs)
-- [AI/ML ধারণা](../../../docs)
-- [গার্ডরেইলস](../../../docs)
-- [প্রম্পট ইঞ্জিনিয়ারিং](../../../docs)
-- [RAG (রিটারিভাল-অগমেন্টেড জেনারেশন)](../../../docs)
-- [এজেন্ট এবং টুলস](../../../docs)
-- [এজেন্টিক মডিউল](../../../docs)
-- [মডেল কনটেক্সট প্রোটোকল (MCP)](../../../docs)
-- [আজুর সার্ভিসসমূহ](../../../docs)
-- [পরীক্ষা এবং উন্নয়ন](../../../docs)
+- [কোর ধারণা](#কোর-ধারণা)
+- [LangChain4j উপাদানসমূহ](#langchain4j-উপাদানসমূহ)
+- [AI/ML ধারণা](#aiml-ধারণা)
+- [গার্ডরেলস](#গার্ডরেলস)
+- [প্রম্পট ইঞ্জিনিয়ারিং](#prompt-engineering---module-02)
+- [RAG (রিট্রিভাল-অগমেন্টেড জেনারেশন)](#rag-retrieval-augmented-generation---module-03)
+- [এজেন্ট এবং সরঞ্জামসমূহ](#agents-and-tools---module-04)
+- [এজেন্টিক মডিউল](#agentic-module---module-05)
+- [মডেল কনটেক্সট প্রোটোকল (MCP)](#model-context-protocol-mcp---module-05)
+- [আজুর সেবা](#azure-services---module-01)
+- [পরীক্ষা ও উন্নয়ন](#testing-and-development---testing-guide)
-কোর্স জুড়ে ব্যবহৃত শব্দ ও ধারণার জন্য দ্রুত রেফারেন্স।
+কোর্স জুড়ে ব্যবহৃত শব্দ এবং ধারণাগুলির দ্রুত রেফারেন্স।
-## মূল ধারণাসমূহ
+## কোর ধারণা
-**AI Agent** - এমন সিস্টেম যা AI ব্যবহার করে স্বয়ংক্রিয়ভাবে যুক্তি প্রয়োগ ও কাজ করে। [মডিউল 04](../04-tools/README.md)
+**AI Agent** - এমন সিস্টেম যা AI ব্যবহার করে যুক্তি করে এবং স্বায়ত্তশাসিতভাবে কাজ করে। [Module 04](../04-tools/README.md)
-**Chain** - অপারেশনের ধারাবাহিকতা যেখানে আউটপুট পরবর্তী ধাপে প্রবাহিত হয়।
+**Chain** - অপারেশনগুলোর ক্রম যেখানে আউটপুট পরবর্তী ধাপে ইনপুট হিসাবে ব্যবহৃত হয়।
-**Chunking** - ডকুমেন্টকে ছোট ছোট অংশে ভাগ করা। সাধারণত: ৩০০-৫০০ টোকেন ওভারল্যাপ সহ। [মডিউল 03](../03-rag/README.md)
+**Chunking** - ডকুমেন্টগুলোকে ছোট ছোট অংশে ভাগ করা। সাধারণত: ৩০০-৫০০ টোকেন ওভারল্যাপের সাথে। [Module 03](../03-rag/README.md)
-**Context Window** - মডেল সর্বোচ্চ কতটোকেন প্রক্রিয়াজাত করতে পারে। GPT-5.2: ৪০০কে টোকেন (২৭২কে ইনপুট পর্যন্ত, ১২৮কে আউটপুট)।
+**Context Window** - সর্বাধিক টোকেন যা একটি মডেল প্রসেস করতে পারে। GPT-5.2: ৪০০কে টোকেন (২৭২কে ইনপুট পর্যন্ত, ১২৮কে আউটপুট)।
-**Embeddings** - টেক্সটের অর্থকে সংখ্যা রূপে উপস্থাপন করে ভেক্টর। [মডিউল 03](../03-rag/README.md)
+**Embeddings** - টেক্সটের অর্থ প্রকাশকারী সংখ্যাসূচক ভেক্টর। [Module 03](../03-rag/README.md)
-**Function Calling** - মডেল বাহ্যিক ফাংশন কল করার জন্য গঠনকৃত অনুরোধ তৈরি করে। [মডিউল 04](../04-tools/README.md)
+**Function Calling** - মডেল কাঠামোবদ্ধ অনুরোধ তৈরি করে বাহ্যিক ফাংশন কল করার জন্য। [Module 04](../04-tools/README.md)
-**Hallucination** - যখন মডেল ভুল কিন্তু বিশ্বাসযোগ্য তথ্য তৈরি করে।
+**Hallucination** - মডেলগুলি যখন ভুল কিন্তু বিশ্বাসযোগ্য তথ্য তৈরি করে।
-**Prompt** - ভাষা মডেলে ইনপুট টেক্সট। [মডিউল 02](../02-prompt-engineering/README.md)
+**Prompt** - ভাষা মডেলের ইনপুট টেক্সট। [Module 02](../02-prompt-engineering/README.md)
-**Semantic Search** - এমবেডিং ব্যবহার করে অর্থ অনুসারে অনুসন্ধান, কীওয়ার্ড নয়। [মডিউল 03](../03-rag/README.md)
+**Semantic Search** - অর্থ অনুযায়ী অনুসন্ধান যা কীওয়ার্ড নয়, এমবেডিং ব্যবহার করে। [Module 03](../03-rag/README.md)
-**Stateful vs Stateless** - Stateless: স্মৃতি নেই। Stateful: কথোপকথনের ইতিহাস রক্ষা করে। [মডিউল 01](../01-introduction/README.md)
+**Stateful vs Stateless** - Stateless: কোনো মেমোরি নেই। Stateful: কথোপকথনের ইতিহাস সংরক্ষণ করে। [Module 01](../01-introduction/README.md)
-**Tokens** - মডেল প্রক্রিয়াজাত করার মৌলিক টেক্সট ইউনিট। খরচ ও সীমা প্রভাবিত করে। [মডিউল 01](../01-introduction/README.md)
+**Tokens** - মডেলগুলো যেসব মৌলিক টেক্সট ইউনিট প্রক্রিয়া করে। খরচ এবং সীমাতে প্রভাব ফেলে। [Module 01](../01-introduction/README.md)
-**Tool Chaining** - ধারাবাহিক টুল কার্যক্রম যেখানে আউটপুট পরবর্তী কলের জন্য তথ্য দেয়। [মডিউল 04](../04-tools/README.md)
+**Tool Chaining** - ধারাবাহিক সরঞ্জাম কার্যক্রম যেখানে আউটপুট পরবর্তী কলের তথ্য দেয়। [Module 04](../04-tools/README.md)
## LangChain4j উপাদানসমূহ
**AiServices** - টাইপ-সেফ AI সেবা ইন্টারফেস তৈরি করে।
-**OpenAiOfficialChatModel** - OpenAI এবং Azure OpenAI মডেলের একটি একীভূত ক্লায়েন্ট।
+**OpenAiOfficialChatModel** - OpenAI এবং Azure OpenAI মডেলগুলোর জন্য একীকৃত ক্লায়েন্ট।
-**OpenAiOfficialEmbeddingModel** - OpenAI Official ক্লায়েন্ট ব্যবহার করে এমবেডিং তৈরি করে (OpenAI ও Azure OpenAI উভয় সমর্থন করে)।
+**OpenAiOfficialEmbeddingModel** - OpenAI অফিসিয়াল ক্লায়েন্ট ব্যবহার করে এমবেডিং তৈরি করে (OpenAI এবং Azure OpenAI উভয় সমর্থিত)।
-**ChatModel** - ভাষা মডেলের মুখ্য ইন্টারফেস।
+**ChatModel** - ভাষা মডেলগুলোর জন্য মূল ইন্টারফেস।
**ChatMemory** - কথোপকথনের ইতিহাস সংরক্ষণ করে।
-**ContentRetriever** - RAG এর জন্য প্রাসঙ্গিক ডকুমেন্ট টুকরা খুঁজে বের করে।
+**ContentRetriever** - RAG এর জন্য প্রাসঙ্গিক ডকুমেন্ট চাঙ্ক খুঁজে বের করে।
-**DocumentSplitter** - ডকুমেন্ট টুকরা ভাগ করে।
+**DocumentSplitter** - ডকুমেন্টগুলোকে চাঙ্কে ভাগ করে।
-**EmbeddingModel** - টেক্সটকে সংখ্যাগত ভেক্টরে রূপান্তর করে।
+**EmbeddingModel** - টেক্সটকে সংখ্যাসূচক ভেক্টরে রূপান্তর করে।
**EmbeddingStore** - এমবেডিং সংরক্ষণ ও পুনরুদ্ধার করে।
-**MessageWindowChatMemory** - সাম্প্রতিক বার্তার একটি স্লাইডিং উইন্ডো রক্ষা করে।
+**MessageWindowChatMemory** - সাম্প্রতিক বার্তাগুলোর স্লাইডিং উইন্ডো বজায় রাখে।
-**PromptTemplate** - `{{variable}}` প্লেসহোল্ডার সহ পুনর্ব্যবহারযোগ্য প্রম্পট তৈরি করে।
+**PromptTemplate** - `{{variable}}` প্লেসহোল্ডারসহ পুনরায় ব্যবহারযোগ্য প্রম্পট তৈরি করে।
-**TextSegment** - মেটাডেটাসহ টেক্সট টুকরা। RAG এ ব্যবহৃত।
+**TextSegment** - মেটাডেটাসহ টেক্সট অংশ। RAG এ ব্যবহৃত।
-**ToolExecutionRequest** - টুল নির্বাহের অনুরোধ উপস্থাপন করে।
+**ToolExecutionRequest** - সরঞ্জাম কার্যকলাপের অনুরোধ উপস্থাপন করে।
-**UserMessage / AiMessage / SystemMessage** - কথোপকথন বার্তার ধরণ।
+**UserMessage / AiMessage / SystemMessage** - কথোপকথনের বার্তার ধরন।
## AI/ML ধারণা
-**Few-Shot Learning** - প্রম্পটে উদাহরণ প্রদান। [মডিউল 02](../02-prompt-engineering/README.md)
+**Few-Shot Learning** - প্রম্পটে উদাহরণ দেয়া। [Module 02](../02-prompt-engineering/README.md)
-**Large Language Model (LLM)** - বিশাল টেক্সট ডেটাসেটে প্রশিক্ষিত AI মডেল।
+**Large Language Model (LLM)** - বিশাল টেক্সট ডেটাতে প্রশিক্ষিত AI মডেল।
-**Reasoning Effort** - GPT-5.2 এর এমন একটি প্যারামিটার যা চিন্তার গভীরতা নিয়ন্ত্রণ করে। [মডিউল 02](../02-prompt-engineering/README.md)
+**Reasoning Effort** - GPT-5.2 প্যারামিটার যা চিন্তার গভীরতা নিয়ন্ত্রণ করে। [Module 02](../02-prompt-engineering/README.md)
-**Temperature** - আউটপুটের এলোমেলো পরিমাণ নিয়ন্ত্রণ করে। কম=নির্ধারিত, বেশি=সৃজনশীল।
+**Temperature** - আউটপুটের র্যান্ডমনেস নিয়ন্ত্রণ করে। কম=নির্ধারিত, বেশি=সৃষ্টিশীল।
-**Vector Database** - এমবেডিং সংরক্ষণের জন্য বিশেষায়িত ডাটাবেস। [মডিউল 03](../03-rag/README.md)
+**Vector Database** - এমবেডিংয়ের জন্য বিশেষায়িত ডেটাবেজ। [Module 03](../03-rag/README.md)
-**Zero-Shot Learning** - উদাহরণ ছাড়া কাজ করা। [মডিউল 02](../02-prompt-engineering/README.md)
+**Zero-Shot Learning** - উদাহরণ ছাড়াই কাজ করা। [Module 02](../02-prompt-engineering/README.md)
-## গার্ডরেইলস - [মডিউল 00](../00-quick-start/README.md)
+## গার্ডরেলস
-**Defense in Depth** - একাধিক স্তরের নিরাপত্তা পদ্ধতি, যেটি অ্যাপ্লিকেশন-স্তরের গার্ডরেইলস ও প্রোভাইডার সেফটি ফিল্টার একত্র করে।
+**Defense in Depth** - মাল্টি-লেয়ার সিকিউরিটি অ্যাপ্রোচ যা অ্যাপ্লিকেশন-স্তরের গার্ডরেলস ও প্রোভাইডার সুরক্ষা ফিল্টার মিলায়।
-**Hard Block** - গুরুতর বিষয়বস্তুর লঙ্ঘনের জন্য প্রোভাইডার HTTP ৪০০ ত্রুটি দেয়।
+**Hard Block** - গুরুতর কনটেন্ট লঙ্ঘনের জন্য প্রোভাইডার HTTP 400 ত্রুটি ফেলে।
-**InputGuardrail** - LLM এর কাছে পৌঁছানোর আগে ব্যবহারকারীর ইনপুট যাচাইয়ের LangChain4j ইন্টারফেস। ক্ষতিকারক প্রম্পট আগেই ব্লক করে খরচ ও বিলম্ব সাশ্রয় করে।
+**InputGuardrail** - LangChain4j ইন্টারফেস যা ব্যবহারকারীর ইনপুট যাচাই করে LLM পৌঁছানোর আগে। ক্ষতিকারক প্রম্পট অগ্রিম বন্ধ করে খরচ ও বিলম্ব বাঁচায়।
-**InputGuardrailResult** - গার্ডরেইল যাচাইয়ের রিটার্ন টাইপ: `success()` বা `fatal("reason")`।
+**InputGuardrailResult** - গার্ডরেল যাচাইয়ের রিটার্ন টাইপ: `success()` অথবা `fatal("reason")`।
-**OutputGuardrail** - AI উত্তর ফিরে দেওয়ার আগে যাচাইয়ের ইন্টারফেস।
+**OutputGuardrail** - AI উত্তর যাচাই করে ব্যবহারকারীর কাছে ফেরত দেওয়ার আগে।
-**Provider Safety Filters** - AI প্রোভাইডার (যেমন GitHub Models) দ্বারা নির্মিত কন্টেন্ট ফিল্টার যা API স্তরে লঙ্ঘন সনাক্ত করে।
+**Provider Safety Filters** - AI প্রোভাইডার (যেমন Azure OpenAI) থেকে বিল্ট-ইন কনটেন্ট ফিল্টার যা API স্তরে লঙ্ঘন আটকায়।
-**Soft Refusal** - মডেল বিনা ত্রুটি দেখিয়ে নম্রভাবে উওর দিতে অস্বীকৃতি জানায়।
+**Soft Refusal** - মডেল বিনীতভাবে উত্তর দিতে অস্বীকার করে ত্রুটি ছাড়াই।
-## প্রম্পট ইঞ্জিনিয়ারিং - [মডিউল 02](../02-prompt-engineering/README.md)
+## প্রম্পট ইঞ্জিনিয়ারিং - [Module 02](../02-prompt-engineering/README.md)
-**Chain-of-Thought** - ধাপে ধাপে যুক্তি প্রয়োগ করে উন্নত নির্ভুলতা।
+**Chain-of-Thought** - ধাপে ধাপে যুক্তি যা সঠিকতা বাড়ায়।
-**Constrained Output** - নির্দিষ্ট ফর্ম্যাট বা গঠন বাধ্যতামূলক করা।
+**Constrained Output** - নির্দিষ্ট ফরম্যাট বা কাঠামো বলবৎ রাখা।
-**High Eagerness** - GPT-5.2 এর প্রচুর যুক্তি প্রয়োগের প্যাটার্ন।
+**High Eagerness** - GPT-5.2 প্যাটার্ন যা গভীর যুক্তি তৈরি করে।
-**Low Eagerness** - GPT-5.2 এর দ্রুত উত্তর প্রদানের প্যাটার্ন।
+**Low Eagerness** - GPT-5.2 প্যাটার্ন যা দ্রুত উত্তর দেয়।
-**Multi-Turn Conversation** - একাধিক পালার মধ্যে প্রাসঙ্গিকতা বজায় রাখা।
+**Multi-Turn Conversation** - কথোপকথনের প্রসঙ্গ রক্ষা।
-**Role-Based Prompting** - সিস্টেম মেসেজের মাধ্যমে মডেলের চরিত্র নির্ধারণ।
+**Role-Based Prompting** - সিস্টেম মেসেজের মাধ্যমে মডেল ব্যক্তিত্ব সেট করা।
-**Self-Reflection** - মডেল তার আউটপুট মূল্যায়ন ও উন্নত করে।
+**Self-Reflection** - মডেল নিজের আউটপুট মূল্যায়ন ও উন্নতি করে।
-**Structured Analysis** - সুনির্দিষ্ট মূল্যায়ন কাঠামো।
+**Structured Analysis** - নির্দিষ্ট মূল্যায়ন কাঠামো।
-**Task Execution Pattern** - পরিকল্পনা → প্রয়োগ → সারাংশ।
+**Task Execution Pattern** - পরিকল্পনা → সম্পাদন → সারসংক্ষেপ।
-## RAG (রিটারিভাল-অগমেন্টেড জেনারেশন) - [মডিউল 03](../03-rag/README.md)
+## RAG (রিট্রিভাল-অগমেন্টেড জেনারেশন) - [Module 03](../03-rag/README.md)
-**Document Processing Pipeline** - লোড → টুকরা → এমবেড → সংরক্ষণ।
+**Document Processing Pipeline** - লোড → চাঙ্ক → এমবেড → সংরক্ষণ।
-**In-Memory Embedding Store** - পরীক্ষা করার জন্য অস্থায়ী সংরক্ষণ।
+**In-Memory Embedding Store** - পরীক্ষার জন্য অস্থায়ী স্টোরেজ।
-**RAG** - রিটারিভালকে জেনারেশনের সাথে মিলিয়ে উত্তর ভিত্তিক করে।
+**RAG** - রিট্রিভাল ও জেনারেশন একত্রে ব্যবহার করে উত্তর ভিত্তি গড়ে তোলে।
-**Similarity Score** - অর্থগত সাদৃশ্যের পরিমাপ (০-১)।
+**Similarity Score** - সেমান্টিক সাদৃশ্যের পরিমাপ (০-১)।
-**Source Reference** - সংগৃহীত বিষয়বস্তু সম্পর্কিত মেটাডেটা।
+**Source Reference** - পুনরুদ্ধারকৃত বিষয়বস্তুর মেটাডেটা।
-## এজেন্ট এবং টুলস - [মডিউল 04](../04-tools/README.md)
+## এজেন্ট এবং সরঞ্জামসমূহ - [Module 04](../04-tools/README.md)
-**@Tool Annotation** - জাভা মেথডকে AI-কলেবল টুল হিসেবে মার্ক করে।
+**@Tool Annotation** - Java মেথডকে AI-কলে সক্ষম সরঞ্জাম হিসেবে চিহ্নিত করে।
-**ReAct Pattern** - যুক্তি → কাজ → পর্যবেক্ষণ → পুনরাবৃত্তি।
+**ReAct Pattern** - যুক্তি → কর্ম → পর্যবেক্ষণ → পুনরাবৃত্তি।
-**Session Management** - বিভিন্ন ব্যবহারকারীর জন্য আলাদা প্রসঙ্গ।
+**Session Management** - বিভিন্ন ব্যবহারকারীর জন্য পৃথক প্রসঙ্গ।
-**Tool** - এমন একটি ফাংশন যা AI এজেন্ট কল করতে পারে।
+**Tool** - একটি ফাংশন যা AI এজেন্ট কল করতে পারে।
-**Tool Description** - টুলের উদ্দেশ্য ও প্যারামিটার ডকুমেন্টেশন।
+**Tool Description** - সরঞ্জামের উদ্দেশ্য ও প্যারামিটারসমূহের দলিল।
-## এজেন্টিক মডিউল - [মডিউল 05](../05-mcp/README.md)
+## এজেন্টিক মডিউল - [Module 05](../05-mcp/README.md)
-**@Agent Annotation** - ইন্টারফেসকে এজেন্ট হিসেবে মার্ক করে যার মধ্যে আচরণের ঘোষণা থাকে।
+**@Agent Annotation** - AI এজেন্ট হিসাবে ইন্টারফেস চিহ্নিত করে ডিক্লারেটিভ বিহেভিয়ার সংজ্ঞা সহ।
-**Agent Listener** - `beforeAgentInvocation()` ও `afterAgentInvocation()` মাধ্যমে এজেন্ট কার্যক্রম পর্যবেক্ষণের হুক।
+**Agent Listener** - এজেন্ট কার্যক্রম পর্যবেক্ষণের জন্য হুক `beforeAgentInvocation()` এবং `afterAgentInvocation()` এর মাধ্যমে।
-**Agentic Scope** - শেয়ারড মেমোরি যেখানে এজেন্টরা আউটপুট সংরক্ষণ করে যা পরবর্তী এজেন্ট ব্যবহার করে।
+**Agentic Scope** - শেয়ার করা মেমোরি যেখানে এজেন্টগণ আউটপুট সংরক্ষণ করে `outputKey` ব্যবহার করে পরবর্তী এজেন্টদের জন্য।
-**AgenticServices** - `agentBuilder()` ও `supervisorBuilder()` ব্যবহার করে এজেন্ট তৈরি করার ফ্যাক্টরি।
+**AgenticServices** - `agentBuilder()` এবং `supervisorBuilder()` ব্যবহার করে এজেন্ট তৈরি করার ফ্যাক্টরি।
-**Conditional Workflow** - শর্ত অনুসারে আলাদা বিশেষজ্ঞ এজেন্টে রুট নির্ধারণ।
+**Conditional Workflow** - শর্ত অনুযায়ী আলাদা বিশেষজ্ঞ এজেন্টদের মধ্যে রুট নির্ধারণ।
-**Human-in-the-Loop** - অনুমোদন বা বিষয়বস্তু পর্যালোচনার জন্য মানুষের চেকপয়েন্ট যুক্ত ওয়ার্কফ্লো প্যাটার্ন।
+**Human-in-the-Loop** - মানব যাচাইকরণ বা বিষয়বস্তু পর্যালোচনার জন্য চেকপয়েন্টসহ ওয়ার্কফ্লো প্যাটার্ন।
-**langchain4j-agentic** - ঘোষণামূলক এজেন্ট নির্মাণের জন্য মাভেন ডিপেনডেন্সি (প্রায়োগিক)।
+**langchain4j-agentic** - ডিক্লারেটিভ এজেন্ট বিল্ডিংয়ের জন্য মেভেন ডিপেন্ডেন্সি (প্রায়োগিক)।
-**Loop Workflow** - কখনও একটি শর্ত পূরণ না হওয়া পর্যন্ত এজেন্ট পুনরাবৃত্তি (যেমন: গুণগত মান স্কোর ≥ ০.৮)।
+**Loop Workflow** - একটি শর্ত পূরণ না হওয়া পর্যন্ত এজেন্ট কার্যক্রম পুনরাবৃত্তি করা (যেমন গুণমান স্কোর ≥ 0.৮)।
-**outputKey** - Agentic Scope এ আউটপুট কোথায় সংরক্ষিত হবে তা নির্ধারণকারী এজেন্ট এনোটেশন প্যারামিটার।
+**outputKey** - এজেন্ট নোটেশন প্যারামিটার যা Agentic Scope-এ ফলাফল সংরক্ষণের জায়গা নির্ধারণ করে।
-**Parallel Workflow** - স্বাধীন কাজের জন্য একসাথে একাধিক এজেন্ট চালানো।
+**Parallel Workflow** - স্বাধীন কাজের জন্য একাধিক এজেন্ট একসাথে চালানো।
-**Response Strategy** - সুপারভাইজার চূড়ান্ত উত্তর গঠনের পদ্ধতি: LAST, SUMMARY, অথবা SCORED।
+**Response Strategy** - সুপারভাইজার কিভাবে চূড়ান্ত উত্তর গঠন করে: LAST, SUMMARY, অথবা SCORED।
-**Sequential Workflow** - ধারাবাহিকভাবে এজেন্ট কার্যকর করা যেখানে আউটপুট পরবর্তী ধাপে প্রবাহিত হয়।
+**Sequential Workflow** - এজেন্টগুলোকে ক্রম অনুসারে চালানো যেখানে আউটপুট পরবর্তী ধাপে প্রবাহিত হয়।
-**Supervisor Agent Pattern** - উন্নত এজেন্টিক প্যাটার্ন যেখানে সুপারভাইজার LLM নিদিষ্ট করে কোন সাব-এজেন্টকে কল করতে হবে।
+**Supervisor Agent Pattern** - উন্নত এজেন্টিক প্যাটার্ন যেখানে সুপারভাইজার LLM চলবে কোন সাব-এজেন্ট কল করবে তা গতিশীলভাবে নির্ধারণ করে।
-## মডেল কনটেক্সট প্রোটোকল (MCP) - [মডিউল 05](../05-mcp/README.md)
+## মডেল কনটেক্সট প্রোটোকল (MCP) - [Module 05](../05-mcp/README.md)
-**langchain4j-mcp** - LangChain4j এ MCP ইন্টিগ্রেশনের জন্য মাভেন ডিপেনডেন্সি।
+**langchain4j-mcp** - LangChain4j-এ MCP ইন্টিগ্রেশনের জন্য মেভেন ডিপেন্ডেন্সি।
-**MCP** - মডেল কনটেক্সট প্রোটোকল: AI অ্যাপগুলোকে বাহ্যিক টুলের সাথে সংযুক্ত করার মান। একবার তৈরি, সর্বত্র ব্যবহার।
+**MCP** - Model Context Protocol: AI অ্যাপসকে বাহ্যিক সরঞ্জামের সাথে সংযুক্ত করার স্ট্যান্ডার্ড। একবার তৈরি করুন, সর্বত্র ব্যবহার করুন।
-**MCP Client** - MCP সার্ভারে সংযুক্ত হয়ে টুল আবিষ্কার ও ব্যবহারের অ্যাপ্লিকেশন।
+**MCP Client** - MCP সার্ভারে সংযোগ স্থাপন করে সরঞ্জাম আবিষ্কার ও ব্যবহার করে এমন অ্যাপ্লিকেশন।
-**MCP Server** - MCP ব্যবহার করে পরিষ্কার বর্ণনা এবং প্যারামিটার স্কিমাসহ টুল প্রদর্শন সেবা।
+**MCP Server** - MCP ব্যবহার করে স্পষ্ট বর্ণনা ও প্যারামিটার স্কিমাসহ সরঞ্জাম এক্সপোজ করে এমন সেবা।
-**McpToolProvider** - LangChain4j উপাদান যা MCP টুলগুলোকে AI সেবা ও এজেন্টে ব্যবহারের জন্য কম্পোজ করে।
+**McpToolProvider** - LangChain4j উপাদান যা MCP সরঞ্জামগুলোকে AI সেবা ও এজেন্টে ব্যবহারের জন্য র্যাপ করে।
-**McpTransport** - MCP যোগাযোগের জন্য ইন্টারফেস। বাস্তবায়নসমূহ: Stdio এবং HTTP।
+**McpTransport** - MCP যোগাযোগের ইন্টারফেস। বাস্তবায়নের মধ্যে রয়েছে Stdio ও HTTP।
-**Stdio Transport** - স্থানীয় প্রসেসের জন্য stdin/stdout ট্রান্সপোর্ট। ফাইল সিস্টেম অ্যাক্সেস বা CLI টুলসের জন্য উপযুক্ত।
+**Stdio Transport** - স্থানীয় প্রসেস পরিবহন stdin/stdout মাধ্যমে। ফাইল সিস্টেম অ্যাক্সেস বা কমান্ড-লাইন সরঞ্জামের জন্য কার্যকর।
-**StdioMcpTransport** - LangChain4j বাস্তবায়ন যা সাবপ্রসেস হিসেবে MCP সার্ভার চালায়।
+**StdioMcpTransport** - LangChain4j বাস্তবায়ন যা সাবপ্রসেস হিসেবে MCP সার্ভার চালায়।
-**Tool Discovery** - ক্লায়েন্ট টুলের বর্ণনা ও স্কিমাসহ সার্ভারে কুয়েরি করে উপলব্ধ টুল জানতে পারে।
+**Tool Discovery** - ক্লায়েন্ট সার্ভারকে প্রশ্ন করে উপলব্ধ সরঞ্জামের বিবরণ ও স্কিমাস নেয়।
-## আজুর সার্ভিসসমূহ - [মডিউল 01](../01-introduction/README.md)
+## আজুর সেবা - [Module 01](../01-introduction/README.md)
-**Azure AI Search** - ভেক্টর সক্ষমতা সম্বলিত ক্লাউড অনুসন্ধান। [মডিউল 03](../03-rag/README.md)
+**Azure AI Search** - ভেক্টর সক্ষমতা সহ ক্লাউড অনুসন্ধান। [Module 03](../03-rag/README.md)
-**Azure Developer CLI (azd)** - আজুর সম্পদ মোতায়েন করে।
+**Azure Developer CLI (azd)** - আজুর রিসোর্স ডিপ্লয় করে।
**Azure OpenAI** - মাইক্রোসফটের এন্টারপ্রাইজ AI সেবা।
-**Bicep** - আজুর অবকাঠামো-অ্যাস-কোড ভাষা। [অবকাঠামো গাইড](../01-introduction/infra/README.md)
+**Bicep** - আজুর ইনফ্রাস্ট্রাকচার-অ্যাজ-কোড ভাষা। [Infrastructure Guide](../01-introduction/infra/README.md)
-**Deployment Name** - আজুরে মডেল মোতায়েনের নাম।
+**Deployment Name** - আজুরে মডেল ডিপ্লয়মেন্টের নাম।
-**GPT-5.2** - সর্বশেষ OpenAI মডেল যার মধ্যে যুক্তি নিয়ন্ত্রণ আছে। [মডিউল 02](../02-prompt-engineering/README.md)
+**GPT-5.2** - reasoning নিয়ন্ত্রণযোগ্য সর্বশেষ OpenAI মডেল। [Module 02](../02-prompt-engineering/README.md)
-## পরীক্ষা এবং উন্নয়ন - [পরীক্ষা গাইড](TESTING.md)
+## পরীক্ষা ও উন্নয়ন - [Testing Guide](TESTING.md)
-**Dev Container** - কনটেইনারভিত্তিক উন্নয়ন পরিবেশ। [কনফিগারেশন](../../../.devcontainer/devcontainer.json)
+**Dev Container** - কন্টেইনার ভিত্তিক উন্নয়ন পরিবেশ। [Configuration](../../../.devcontainer/devcontainer.json)
-**GitHub Models** - বিনামূল্যের AI মডেল প্লে গ্রাউন্ড। [মডিউল 00](../00-quick-start/README.md)
+**In-Memory Testing** - মেমোরি-ভিত্তিক স্টোরেজে পরীক্ষা।
-**In-Memory Testing** - ইন-মেমোরি স্টোরেজ ব্যবহার করে পরীক্ষা।
+**Integration Testing** - বাস্তব অবকাঠামোর সাথে পরীক্ষা।
-**Integration Testing** - বাস্তব অবকাঠামো ব্যবহার করে পরীক্ষা।
+**Maven** - Java বিল্ড অটোমেশন টুল।
-**Maven** - জাভা বিল্ড অটোমেশন টুল।
+**Mockito** - Java মকিং ফ্রেমওয়ার্ক।
-**Mockito** - জাভা মকিং ফ্রেমওয়ার্ক।
-
-**Spring Boot** - জাভা অ্যাপ্লিকেশন ফ্রেমওয়ার্ক। [মডিউল 01](../01-introduction/README.md)
+**Spring Boot** - Java অ্যাপ্লিকেশন ফ্রেমওয়ার্ক। [Module 01](../01-introduction/README.md)
---
-**দ্রষ্টব্য**:
-এই নথিটি AI অনুবাদ সেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহারের মাধ্যমে অনূদিত হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসত্যতার সম্ভবনা থাকতে পারে। মূল নথি তার স্থানীয় ভাষায়েই সর্বোচ্চ কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ গ্রহণ করার পরামর্শ দেওয়া হয়। এই অনুবাদের ব্যবহারে সৃষ্ট কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নয়।
+**অস্বীকৃতি**:
+এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা শুদ্ধতার জন্য চেষ্টা করি, অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার স্বভাষায় কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে প্রয়োজনীয় ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই।
\ No newline at end of file
diff --git a/translations/bn/docs/TESTING.md b/translations/bn/docs/TESTING.md
index 49d2afc84..16c9d02c3 100644
--- a/translations/bn/docs/TESTING.md
+++ b/translations/bn/docs/TESTING.md
@@ -1,20 +1,20 @@
-# LangChain4j অ্যাপ্লিকেশন টেস্টিং
+# LangChain4j অ্যাপ্লিকেশনগুলি পরীক্ষা করা
-## বিষয়বস্তু
+## বিষয়বস্তু সূচি
-- [দ্রুত শুরু](../../../docs)
-- [টেস্টগুলো কি ঢেকে রাখে](../../../docs)
-- [টেস্ট চালানো](../../../docs)
-- [VS কোডে টেস্ট চালানো](../../../docs)
-- [টেস্টিং প্যাটার্নস](../../../docs)
-- [টেস্টিং দর্শন](../../../docs)
-- [পরবর্তী ধাপসমূহ](../../../docs)
+- [দ্রুত শুরু](#দ্রুত-শুরু)
+- [পরীক্ষাগুলো কি অন্তর্ভুক্ত করে](#পরীক্ষাগুলো-কি-অন্তর্ভুক্ত-করে)
+- [পরীক্ষাগুলো চালানো](#পরীক্ষাগুলো-চালানো)
+- [VS Code-এ পরীক্ষাগুলো চালানো](#vs-code-এ-পরীক্ষাগুলো-চালানো)
+- [পরীক্ষার প্যাটার্নসমূহ](#পরীক্ষার-প্যাটার্নসমূহ)
+- [পরীক্ষার দর্শন](#পরীক্ষার-দর্শন)
+- [পরবর্তী ধাপসমূহ](#পরবর্তী-ধাপসমূহ)
-এই গাইডটি আপনাকে এমন টেস্টগুলোর মাধ্যমে চালনা করে যা দেখায় কিভাবে API কী বা বাহ্যিক সার্ভিস ছাড়াই AI অ্যাপ্লিকেশনগুলো টেস্ট করতে হয়।
+এই গাইডটি আপনাকে এমন পরীক্ষাগুলো দেখাবে যা API কী বা বাহ্যিক সার্ভিস ছাড়াই AI অ্যাপ্লিকেশনগুলি কিভাবে পরীক্ষা করতে হয় তা প্রদর্শন করে।
## দ্রুত শুরু
-একটি কমান্ডে সব টেস্ট চালান:
+একটি কমান্ড দিয়ে সকল পরীক্ষা চালান:
**Bash:**
```bash
@@ -26,32 +26,31 @@ mvn test
mvn --% test
```
-যখন সব টেস্ট সফল হয়, আপনি নিচের স্ক্রিনশটের মতো আউটপুট দেখতে পাবেন — কোনো ব্যর্থতা ছাড়াই টেস্ট চলছে।
+যখন সব পরীক্ষার ফলাফল পাস হয়, নিচের স্ক্রিনশটের মতো আউটপুট দেখতে পাবেন — পরীক্ষাগুলো শূন্য ত্রুটির সাথে চলছে।
-*সফল টেস্ট কার্যকরী হওয়া দেখাচ্ছে সবগুলো টেস্ট শূন্য ব্যর্থতা সহ পাস করছে*
+*সফল পরীক্ষা চালানোর ফলাফল যেখানে সব পরীক্ষা শূন্য ত্রুটি নিয়ে সফল হয়েছে*
-## টেস্টগুলো কি ঢেকে রাখে
+## পরীক্ষাগুলো কি অন্তর্ভুক্ত করে
-এই কোর্সটি ফোকাস করে **ইউনিট টেস্টস**-এ যা লোকালি চলে। প্রতিটি টেস্ট একটি নির্দিষ্ট LangChain4j ধারণাকে আলাদা করে প্রদর্শন করে। নিচের টেস্টিং পিরামিড দেখায় ইউনিট টেস্ট কোথায় ফিট হয় — এগুলো দ্রুত, নির্ভরযোগ্য ভিত্তি গঠন করে, যার উপর আপনার বাকি টেস্ট কৌশল তৈরি হয়।
+এই কোর্সটি **একক ইউনিট পরীক্ষার** উপর ফোকাস করে যা স্থানীয়ভাবে চলে। প্রতিটি পরীক্ষা একটি LangChain4j ধারণা আলাদাভাবে প্রদর্শন করে। নিচের পরীক্ষার পিরামিড দেখায় যে ইউনিট পরীক্ষা কোথায় ফিট করে — এগুলো দ্রুত, নির্ভরযোগ্য ভিত্তি, যার উপর আপনার বাকি পরীক্ষা কৌশল গড়ে ওঠে।
-*টেস্টিং পিরামিড ইউনিট টেস্ট (দ্রুত, পৃথক), ইন্টিগ্রেশন টেস্ট (বাস্তব কম্পোনেন্ট), এবং এন্ড-টু-এন্ড টেস্টের মধ্যে সামঞ্জস্য দেখাচ্ছে। এই প্রশিক্ষণে ইউনিট টেস্টিং অন্তর্ভুক্ত।*
+*পরীক্ষার পিরামিড যা ইউনিট পরীক্ষা (দ্রুত, স্বতন্ত্র), ইন্টিগ্রেশন পরীক্ষা (বাস্তব উপাদান), এবং এন্ড-টু-এন্ড পরীক্ষা এর মধ্যে ভারসাম্য প্রদর্শন করে। এই প্রশিক্ষণ ইউনিট টেস্টিং আচ্ছাদন করে।*
-| মডিউল | টেস্ট সংখ্যা | ফোকাস | প্রধান ফাইল |
-|--------|-------|-------|-----------|
-| **00 - দ্রুত শুরু** | 6 | প্রম্পট টেমপ্লেট এবং ভ্যারিয়েবল প্রতিস্থাপন | `SimpleQuickStartTest.java` |
-| **01 - পরিচিতি** | 8 | কথোপকথন স্মৃতি ও স্টেটফুল চ্যাট | `SimpleConversationTest.java` |
-| **02 - প্রম্পট ইঞ্জিনিয়ারিং** | 12 | GPT-5.2 প্যাটার্ন, আগ্রহের স্তর, কাঠামোগত আউটপুট | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | ডকুমেন্ট ইনজেশন, এম্বেডিংস, সাদৃশ্য অনুসন্ধান | `DocumentServiceTest.java` |
-| **04 - টুলস** | 12 | ফাংশন কলিং এবং টুল চেইনিং | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | মডেল কনটেক্সট প্রটোকল উইথ স্টডিও ট্রান্সপোর্ট | `SimpleMcpTest.java` |
+| মডিউল | পরীক্ষা সংখ্যা | ফোকাস | মূল ফাইলসমূহ |
+|--------|---------------|--------|--------------|
+| **01 - পরিচিতি** | ৮ | কথোপকথন স্মৃতি ও অবস্থা সম্পন্ন চ্যাট | `SimpleConversationTest.java` |
+| **02 - প্রম্পট ইঞ্জিনিয়ারিং** | ১২ | GPT-5.2 প্যাটার্ন, আগ্রহ স্তর, গঠনমূলক আউটপুট | `SimpleGpt5PromptTest.java` |
+| **03 - RAG** | ১০ | ডকুমেন্ট ইনজেশন, এম্বেডিং, সাদৃশ্য অনুসন্ধান | `DocumentServiceTest.java` |
+| **04 - টুলস** | ১২ | ফাংশন কলিং ও টুল চেইনিং | `SimpleToolsTest.java` |
+| **05 - MCP** | ৮ | স্টডিও ট্রান্সপোর্টসহ মডেল কনটেক্সট প্রোটোকল | `SimpleMcpTest.java` |
-## টেস্ট চালানো
+## পরীক্ষাগুলো চালানো
-**রুট থেকে সব টেস্ট চালান:**
+**রুট থেকে সব পরীক্ষা চালান:**
**Bash:**
```bash
@@ -63,19 +62,19 @@ mvn test
mvn --% test
```
-**নির্দিষ্ট মডিউলের টেস্ট চালান:**
+**নির্দিষ্ট মডিউলের পরীক্ষাগুলো চালান:**
**Bash:**
```bash
cd 01-introduction && mvn test
-# অথবা রুট থেকে
+# বা রুট থেকে
mvn test -pl 01-introduction
```
**PowerShell:**
```powershell
cd 01-introduction; mvn --% test
-# অথবা মূল থেকে
+# অথবা রুট থেকে
mvn --% test -pl 01-introduction
```
@@ -91,7 +90,7 @@ mvn test -Dtest=SimpleConversationTest
mvn --% test -Dtest=SimpleConversationTest
```
-**নির্দিষ্ট টেস্ট মেথড চালান:**
+**নির্দিষ্ট একটি টেস্ট মেথড চালান:**
**Bash:**
```bash
@@ -100,37 +99,36 @@ mvn test -Dtest=SimpleConversationTest#কথোপকথনের ইতিহ
**PowerShell:**
```powershell
-mvn --% test -Dtest=SimpleConversationTest#আলাপন ইতিহাস বজায় রাখা উচিত
+mvn --% test -Dtest=SimpleConversationTest#কথোপকথন ইতিহাস বজায় রাখা উচিত
```
+## VS Code-এ পরীক্ষাগুলো চালানো
-## VS কোডে টেস্ট চালানো
-
-যদি আপনি Visual Studio Code ব্যবহার করেন, Test Explorer আপনাকে একটি গ্রাফিক্যাল ইন্টারফেস দেয় টেস্ট চালানো এবং ডিবাগ করার জন্য।
+আপনি যদি Visual Studio Code ব্যবহার করেন, তাহলে Test Explorer গ্রাফিকাল ইন্টারফেস প্রদান করে পরীক্ষাগুলো চালানো এবং ডিবাগ করার জন্য।
-*VS কোড টেস্ট এক্সপ্লোরার দেখাচ্ছে সব জাভা টেস্ট ক্লাস এবং পৃথক টেস্ট মেথডের টেস্ট গাছ*
+*VS Code Test Explorer যা সব Java টেস্ট ক্লাস এবং পৃথক টেস্ট মেথডের টেস্ট ট্রি দেখাচ্ছে*
-**VS কোডে টেস্ট চালানোর জন্য:**
+**VS Code-এ পরীক্ষাগুলো চালানোর জন্য:**
-1. অ্যাক্টিভিটি বারে বিটার আইকনে ক্লিক করে Test Explorer খুলুন
-2. টেস্ট গাছ বাড়ান সব মডিউল এবং টেস্ট ক্লাস দেখতে
-3. যেকোনো টেস্টের পাশে প্লে বাটনে ক্লিক করুন পৃথকভাবে চালানোর জন্য
-4. "Run All Tests" এ ক্লিক করে সম্পূর্ণ স্যুট চালান
-5. যেকোনো টেস্টে রাইট-ক্লিক করে "Debug Test" নির্বাচন করুন ব্রেকপয়েন্ট সেট করতে এবং কোড ধাপে ধাপে দেখতে
+1. Activity Bar-এ বীকার আইকনে ক্লিক করে Test Explorer খুলুন
+2. টেস্ট ট্রি এক্সপ্যান্ড করে সব মডিউল ও টেস্ট ক্লাস দেখুন
+3. কোন একটি টেস্টের পাশে প্লে বাটনে ক্লিক করে ব্যক্তিগতভাবে চালান
+4. "Run All Tests" ক্লিক করে পুরো স্যুট চালান
+5. কোন টেস্টে রাইট-ক্লিক করে "Debug Test" নির্বাচন করে ব্রেকপয়েন্ট বসিয়ে কোড স্টেপ করুন
-Test Explorer সব পাস করা টেস্টের জন্য সবুজ চেকমার্ক দেখায় এবং ব্যর্থ হলে বিস্তারিত ত্রুটি বার্তা প্রদান করে।
+টেস্ট এক্সপ্লোরার পাস করা টেস্টের জন্য সবুজ চেকমার্ক দেখায় এবং ব্যর্থ হলে বিস্তারিত ত্রুটি বার্তা দেয়।
-## টেস্টিং প্যাটার্নস
+## পরীক্ষার প্যাটার্নসমূহ
-### প্যাটার্ন ১: প্রম্পট টেমপ্লেট টেস্টিং
+### প্যাটার্ন ১: প্রম্পট টেমপ্লেট পরীক্ষা
-সবচেয়ে সহজ প্যাটার্ন হল AI মডেল কল না করে প্রম্পট টেমপ্লেট টেস্ট করা। আপনি যাচাই করেন যে ভ্যারিয়েবল প্রতিস্থাপন সঠিকভাবে কাজ করে এবং প্রম্পট সঠিকভাবে ফর্ম্যাট হয়েছে।
+সবচেয়ে সহজ প্যাটার্ন হলো প্রম্পট টেমপ্লেট পরীক্ষা যা কোনো AI মডেল কল করে না। আপনি যাচাই করেন ভেরিয়েবল স্থাপন সঠিক হচ্ছে এবং প্রম্পটগুলো প্রত্যাশিত ফরম্যাটে আসে।
-*প্রম্পট টেমপ্লেট টেস্টিং দেখাচ্ছে ভ্যারিয়েবল প্রতিস্থাপনের ফ্লো: প্লেসবোল্ডারসহ টেমপ্লেট → মান প্রয়োগ → ফর্ম্যাটেড আউটপুট যাচাই*
+*প্রম্পট টেমপ্লেট পরীক্ষা যা ভেরিয়েবল স্থাপনের ফ্লো দেখায়: প্লেসহোল্ডারসহ টেমপ্লেট → মান প্রয়োগ → যাচাইকৃত ফরম্যাটেড আউটপুট*
```java
@Test
@@ -149,28 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-এই টেস্টটি অবস্থিত `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`।
-
-**চালান:**
-
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#টেস্টপ্রম্পটটেমপ্লেটফরম্যাটিং
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#টেস্টপ্রোম্পটটেমপ্লেটফরম্যাটিং
-```
-
+এই প্যাটার্ন নিশ্চিত করে যে ভেরিয়েবল স্থাপন সঠিক এবং প্রম্পটগুলো প্রত্যাশিত রূপে ফরম্যাটেড — কোনো API কী বা মডেল কলের প্রয়োজন নেই।
### প্যাটার্ন ২: ভাষা মডেল মকিং
-কথোপকথন লজিক টেস্ট করার সময়, Mockito ব্যবহার করুন নকল মডেল তৈরি করতে যা নির্ধারিত রেসপন্স দেয়। এতে টেস্ট দ্রুত, ফ্রি এবং ডিটারমিনিস্টিক হয়।
+কথোপকথনের লজিক পরীক্ষা করার সময়, Mockito ব্যবহার করে কৃত্রিম মডেল তৈরি করুন যা পূর্বনির্ধারিত উত্তর দেয়। এভাবে পরীক্ষা দ্রুত, বিনামূল্যে এবং নিশ্চিত হয়।
-*তুলনা দেখাচ্ছে কেন টেস্টিংয়ের জন্য মক পছন্দসই: এগুলো দ্রুত, ফ্রি, ডিটারমিনিস্টিক এবং কোনো API কী লাগে না*
+*তুলনা দেখায় কেন পরীক্ষার জন্য মক পছন্দনীয়: দ্রুত, বিনামূল্যে, নিশ্চিত, এবং API কী প্রয়োজন হয় না*
```java
@ExtendWith(MockitoExtension.class)
@@ -220,15 +205,15 @@ class SimpleConversationTest {
}
```
-এই প্যাটার্নটি `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`-তে আছে। মক নিশ্চিত করে consistent আচরণ যাতে স্মৃতি ব্যবস্থাপনা সঠিক কাজ করে তা যাচাই করা যায়।
+এই প্যাটার্ন `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java` এ আছে। মক নিশ্চিত করে যে আচরণ সঙ্গতিপূর্ণ, যাতে আপনি যাচাই করতে পারেন স্মৃতি পরিচালনা সঠিক হচ্ছে।
-### প্যাটার্ন ৩: কথোপকথন বিচ্ছিন্নতা টেস্টিং
+### প্যাটার্ন ৩: কথোপকথন বিচ্ছিন্নতা পরীক্ষা
-কথোপকথন স্মৃতি একাধিক ব্যবহারকারীকে আলাদা রাখতে হবে। এই টেস্ট যাচাই করে যে কথোপকথনগুলি প্রসঙ্গ মেশানো হয় না।
+কথোপকথনের স্মৃতি একাধিক ব্যবহারকারীর আলাদা রাখতে হবে। এই পরীক্ষা যাচাই করে যে কথোপকথনগুলি ভিন্ন ভিন্ন প্রসঙ্গ মিশ্রিত হয় না।
-*কথোপকথন বিচ্ছিন্নতা টেস্টিং দেখাচ্ছে আলাদা ব্যবহারকারীর জন্য আলাদা স্মৃতি স্টোর যা প্রসঙ্গ মেশানো প্রতিরোধ করে*
+*কথোপকথন বিচ্ছিন্নতা পরীক্ষা যা আলাদা ব্যবহারকারীর স্মৃতি স্টোর আলাদা রাখে যেন প্রসঙ্গ না মিশ্রিত হয়*
```java
@Test
@@ -252,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-প্রত্যেক কথোপকথন তার স্বাধীন ইতিহাস বজায় রাখে। প্রকৃত সিস্টেমে, এই বিচ্ছিন্নতা মাল্টি-ইউজার অ্যাপ্লিকেশনগুলোর জন্য অত্যাবশ্যক।
+প্রতিটি কথোপকথন তার স্বাধীন ইতিহাস সংরক্ষণ করে। উৎপাদন সিস্টেমে, বহুব্যবহারকারী অ্যাপ্লিকেশনের জন্য এই বিচ্ছিন্নতা অত্যাবশ্যক।
-### প্যাটার্ন ৪: টুলস স্বাধীনভাবে টেস্ট করা
+### প্যাটার্ন ৪: টুলস স্বাধীনভাবে পরীক্ষা
-টুলস হল ফাংশন যেগুলো AI কল করতে পারে। সরাসরি টুলগুলো টেস্ট করুন নিশ্চিত করতে কাজ ঠিকঠাক করে, AI-র সিদ্ধান্ত নির্বিশেষে।
+টুলস এমন ফাংশন যা AI কল করতে পারে। AI সিদ্ধান্তের বাইরেই সরাসরি টুলগুলো পরীক্ষা করুন যেন তারা সঠিক কাজ করে।
-*স্বতন্ত্রভাবে টুলস টেস্টিং দেখাচ্ছে মক টুল এক্সিকিউশন AI কল ছাড়াই ব্যবসায়িক লজিক যাচাই করার জন্য*
+*টুলস স্বাধীনভাবে পরীক্ষা, AI কল ছাড়াই ব্যবসায়িক লজিক যাচাই করার জন্য*
```java
@Test
@@ -283,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-এসব টেস্ট `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` থেকে এসেছে যা নিশ্চিত করে টুল লজিক AI জড়িত ছাড়াই কাজ করে। চেইনিং উদাহরণ দেখায় কিভাবে একটি টুলের আউটপুট অন্যটির ইনপুট ফিড হয়।
+`04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` থেকে এই পরীক্ষাগুলো AI সম্পৃক্ততা ছাড়া টুল লজিক নিশ্চিত করে। চেইনিং উদাহরণে একটি টুলের আউটপুট অন্যটির ইনপুটে ফিড হয়।
-### প্যাটার্ন ৫: ইন-মেমোরি RAG টেস্টিং
+### প্যাটার্ন ৫: ইন-মেমরি RAG পরীক্ষা
-RAG সিস্টেম সাধারণত ভেক্টর ডাটাবেস এবং এম্বেডিং সার্ভিস প্রয়োজন। ইন-মেমোরি প্যাটার্ন এ নিয়ে আসে পুরো পাইপলাইন টেস্ট করার সুযোগ বাহ্যিক নির্ভরতা ছাড়াই।
+RAG সিস্টেম সাধারণত ভেক্টর ডাটাবেস এবং এম্বেডিং সার্ভিসের প্রয়োজন হয়। ইন-মেমরি প্যাটার্নটি আপনাকে সম্পূর্ণ পাইপলাইন পরীক্ষা করতে দেয় বাহ্যিক নির্ভরতা ছাড়াই।
-*ইন-মেমোরি RAG টেস্টিং ওয়ার্কফ্লো দেখাচ্ছে ডকুমেন্ট পার্সিং, এম্বেডিং সংরক্ষণ, এবং সাদৃশ্য অনুসন্ধান ডাটাবেস ছাড়াই*
+*ইন-মেমরি RAG পরীক্ষা ওয়ার্কফ্লো যা ডকুমেন্ট পার্সিং, এম্বেডিং সংরক্ষণ, এবং সাদৃশ্য অনুসন্ধান দেখায় ডাটাবেসের প্রয়োজন ছাড়াই*
```java
@Test
@@ -308,13 +293,13 @@ void testProcessTextDocument() {
}
```
-এই টেস্টটি `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` থেকে, যেটা ইন-মেমোরি ডকুমেন্ট তৈরি করে এবং চাংকিং ও মেটাডাটা হ্যান্ডলিং যাচাই করে।
+`03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` থেকে এই পরীক্ষা ইন-মেমরিতে একটি ডকুমেন্ট তৈরি করে এবং চাংকিং ও মেটাডাটা পরিচালনা যাচাই করে।
-### প্যাটার্ন ৬: MCP ইন্টিগ্রেশন টেস্টিং
+### প্যাটার্ন ৬: MCP ইন্টিগ্রেশন পরীক্ষা
-MCP মডিউল মডেল কনটেক্সট প্রটোকল ইন্টিগ্রেশন পরীক্ষা করে stdio ট্রান্সপোর্ট ব্যবহার করে। এই টেস্টগুলি যাচাই করে আপনার অ্যাপ MCP সার্ভারগুলোকে সাবপ্রসেস হিসেবে স্পন এবং কমিউনিকেট করতে পারে।
+MCP মডিউল মডেল কনটেক্সট প্রোটোকল ইন্টিগ্রেশন পরীক্ষা করে stdio ট্রান্সপোর্ট ব্যবহার করে। এই পরীক্ষাগুলো যাচাই করে যে আপনার অ্যাপ MCP সার্ভার সাব-প্রসেস হিসেবে স্পন এবং যোগাযোগ করতে পারে।
-`05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java`-এর টেস্টগুলো MCP ক্লায়েন্ট আচরণ নিশ্চিত করে।
+`05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` এ পরীক্ষাগুলো MCP ক্লায়েন্ট আচরণ যাচাই করে।
**চালান:**
@@ -328,39 +313,37 @@ cd 05-mcp && mvn test
cd 05-mcp; mvn --% test
```
+## পরীক্ষার দর্শন
-## টেস্টিং দর্শন
-
-আপনার কোড টেস্ট করুন, AI নয়। আপনার টেস্টগুলো যাচাই করবে আপনি যেই কোড লিখেছেন সেটা কতটা সঠিক যেমন প্রম্পট কিভাবে তৈরি হচ্ছে, স্মৃতি কিভাবে ব্যবস্থাপিত হচ্ছে, এবং টুল কিভাবে নির্বাহ হচ্ছে। AI রেসপন্স ভিন্ন হতে পারে এবং তা টেস্টের অংশ হওয়া উচিত নয়। নিজেকে জিজ্ঞাসা করুন আপনার প্রম্পট টেমপ্লেট ভ্যারিয়েবল সঠিক প্রতিস্থাপন করছে কি না, AI সঠিক উত্তর দিচ্ছে কি না নয়।
+আপনার কোড পরীক্ষা করুন, AI নয়। আপনার পরীক্ষাগুলো লিখিত কোড যাচাই করবে যেমন প্রম্পট কিভাবে গঠিত হচ্ছে, স্মৃতি কিভাবে পরিচালিত হচ্ছে, এবং টুলস কিভাবে কার্যকর হচ্ছে তা দেখে। AI প্রতিক্রিয়া পরিবর্তনশীল এবং পরীক্ষার দাবিতে থাকা উচিত নয়। নিজেকে প্রশ্ন করুন যে আপনার প্রম্পট টেমপ্লেট ভেরিয়েবল সঠিকভাবে প্রতিস্থাপন করছে কিনা, AI সঠিক উত্তর দিচ্ছে কিনা নয়।
-ভাষা মডেলের জন্য মক ব্যবহার করুন। এগুলো বাহ্যিক নির্ভরতা যেগুলো ধীর, ব্যয়বহুল, এবং অনির্ধারিত। মকিং করে টেস্ট দ্রুত হয় মিলিসেকেন্ডে না যে সেকেন্ডে, ফ্রি হয় কোনো API খরচ ছাড়াই, এবং ডিটারমিনিস্টিক হয় প্রতিবার একই ফলাফল দিয়ে।
+ভাষা মডেলের জন্য মক ব্যবহার করুন। এগুলো বাহ্যিক নির্ভরতা, যা ধীর, খরচবহুল এবং অনির্ধারিত। মকিং পরীক্ষাকে দ্রুত করে, মিলিসেকেন্ডে সেকেন্ডের বদলে, বিনামূল্যে করে, এবং নিশ্চিত করে প্রত্যেক বার একই ফলাফল দেয়।
-টেস্টগুলো স্বাধীন রাখুন। প্র প্রতিটি টেস্ট নিজস্ব ডেটা সেট আপ করবে, অন্য টেস্টের উপর নির্ভর করবে না, এবং নিজেই ক্লিন আপ করবে। টেস্টগুলো চালানোর ক্রম অনুসারে পাস না হওয়া উচিত।
+পরীক্ষাগুলো স্বাধীন রাখুন। প্রতিটি পরীক্ষা নিজস্ব ডাটা তৈরি করবে, অন্য পরীক্ষার ওপর নির্ভর করবে না, এবং নিজের পরিছন্নতা করবে। পরীক্ষা সঞ্চালনের ক্রম নির্বিশেষে পাস করা উচিত।
-হ্যাপি পাথ ছাড়াও এজ কেস টেস্ট করুন। খালি ইনপুট, খুব বড় ইনপুট, বিশেষ অক্ষর, অবৈধ প্যারামিটার, এবং সীমানা শর্ত পরীক্ষা করুন। এগুলো প্রায়শই এমন বাগ খুঁজে বের করে যা সাধারণ ব্যবহার ফাঁকি দেয়।
+সুখী পথের বাইরে প্রান্তিক ক্ষেত্রে পরীক্ষা করুন। খালি ইনপুট, অত্যন্ত বড় ইনপুট, বিশেষ অক্ষর, অবৈধ প্যারামিটার, এবং সীমান্ত অবস্থান চেষ্টা করুন। এগুলো প্রায়ই এমন বাগ উদঘাটন করে যা সাধারণ ব্যবহার দেখায় না।
-বর্ণনামূলক নাম ব্যবহার করুন। `shouldMaintainConversationHistoryAcrossMultipleMessages()` এর সাথে তুলনা করুন `test1()` এর। প্রথমটি আপনি কী টেস্ট করছেন ঠিকই বলে দেয়, যা ব্যর্থতা ডিবাগ সহজ করে।
+বর্ণনামূলক নাম ব্যবহার করুন। `shouldMaintainConversationHistoryAcrossMultipleMessages()` এবং `test1()` তুলনা করুন। প্রথমটি ঠিক কী পরীক্ষা হচ্ছে তা বলে, ব্যর্থতা ডিবাগ করা সহজ করে।
## পরবর্তী ধাপসমূহ
-এখন যেহেতু আপনি টেস্টিং প্যাটার্নগুলো বুঝে গেছেন, প্রতিটি মডিউলে গভীরভাবে প্রবেশ করুন:
+এখন যখন আপনি পরীক্ষার প্যাটার্নগুলো বুঝে গেছেন, প্রতিটি মডিউলে গভীরতর যান:
-- **[00 - দ্রুত শুরু](../00-quick-start/README.md)** - প্রম্পট টেমপ্লেট বেসিক দিয়ে শুরু করুন
-- **[01 - পরিচিতি](../01-introduction/README.md)** - কথোপকথন স্মৃতি ব্যবস্থাপনা শিখুন
-- **[02 - প্রম্পট ইঞ্জিনিয়ারিং](../02-prompt-engineering/README.md)** - GPT-5.2 প্রম্পটিং প্যাটার্ন মাস্টার করুন
-- **[03 - RAG](../03-rag/README.md)** - রিট্রিভাল-অগমেন্টেড জেনারেশন সিস্টেম তৈরি করুন
-- **[04 - টুলস](../04-tools/README.md)** - ফাংশন কলিং এবং টুল চেইন বাস্তবায়ন করুন
-- **[05 - MCP](../05-mcp/README.md)** - মডেল কনটেক্সট প্রটোকল ইন্টিগ্রেট করুন
+- **[01 - পরিচিতি](../01-introduction/README.md)** - কথোপকথন স্মৃতি ব্যবস্থাপনা শিখুন
+- **[02 - প্রম্পট ইঞ্জিনিয়ারিং](../02-prompt-engineering/README.md)** - GPT-5.2 প্রম্পটিং প্যাটার্ন মাস্টার করুন
+- **[03 - RAG](../03-rag/README.md)** - রিট্রিভাল-অগমেন্টেড জেনারেশন সিস্টেম তৈরি করুন
+- **[04 - টুলস](../04-tools/README.md)** - ফাংশন কলিং এবং টুল চেইন বাস্তবায়ন করুন
+- **[05 - MCP](../05-mcp/README.md)** - মডেল কনটেক্সট প্রোটোকল ইন্টিগ্রেট করুন
-প্রতিটি মডিউলের README-তে এখানে টেস্ট হওয়া ধারণাগুলোর বিস্তারিত ব্যাখ্যা আছে।
+প্রতিটি মডিউলের README এখানে পরীক্ষিত ধারণাগুলোর বিস্তারিত ব্যাখ্যা প্রদান করে।
---
-**নেভিগেশন:** [← মেইনে ফিরে যান](../README.md)
+**নেভিগেশন:** [← প্রধান পৃষ্ঠায় ফিরে যান](../README.md)
---
-**ইনকার্জনোটঃ**
-এই নথিটি AI অনুবাদ সেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা সঠিকতার জন্য চেষ্টা করি, স্বয়ংক্রিয় অনুবাদে ভুল বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার নিজ ভাষাতেই কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদের পরামর্শ দেওয়া হয়। এই অনুবাদের ব্যবহারে কোনো ভুল বোঝাবুঝি বা বিভ্রাটের জন্য আমরা দায়িত্বশীল নই।
+**অস্বীকৃতি**:
+এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা শুদ্ধতার জন্য চেষ্টা করি, অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার স্বভাষায় কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে প্রয়োজনীয় ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই।
\ No newline at end of file
diff --git a/translations/cs/.co-op-translator.json b/translations/cs/.co-op-translator.json
index 4b4a3e7ad..4c1d2e4cd 100644
--- a/translations/cs/.co-op-translator.json
+++ b/translations/cs/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "cs"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-03T02:56:06+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T09:00:33+00:00",
"source_file": "01-introduction/README.md",
"language_code": "cs"
},
@@ -18,20 +18,20 @@
"language_code": "cs"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-03T02:58:39+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T08:55:48+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "cs"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-03T03:00:04+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T08:59:41+00:00",
"source_file": "03-rag/README.md",
"language_code": "cs"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T09:17:58+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T08:58:15+00:00",
"source_file": "04-tools/README.md",
"language_code": "cs"
},
@@ -54,8 +54,8 @@
"language_code": "cs"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T16:52:49+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T08:54:23+00:00",
"source_file": "README.md",
"language_code": "cs"
},
@@ -72,14 +72,14 @@
"language_code": "cs"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-03T03:03:41+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T08:56:19+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "cs"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-03T03:04:28+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T08:56:59+00:00",
"source_file": "docs/TESTING.md",
"language_code": "cs"
}
diff --git a/translations/cs/00-quick-start/README.md b/translations/cs/00-quick-start/README.md
deleted file mode 100644
index 4b9c5d01b..000000000
--- a/translations/cs/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# Modul 00: Rychlý start
-
-## Obsah
-
-- [Úvod](../../../00-quick-start)
-- [Co je LangChain4j?](../../../00-quick-start)
-- [Závislosti LangChain4j](../../../00-quick-start)
-- [Požadavky](../../../00-quick-start)
-- [Nastavení](../../../00-quick-start)
- - [1. Získejte svůj GitHub token](../../../00-quick-start)
- - [2. Nastavte svůj token](../../../00-quick-start)
-- [Spuštění příkladů](../../../00-quick-start)
- - [1. Základní chat](../../../00-quick-start)
- - [2. Vzory pro promptování](../../../00-quick-start)
- - [3. Volání funkcí](../../../00-quick-start)
- - [4. Dotazy k dokumentům (Easy RAG)](../../../00-quick-start)
- - [5. Odpovědná AI](../../../00-quick-start)
-- [Co každý příklad ukazuje](../../../00-quick-start)
-- [Další kroky](../../../00-quick-start)
-- [Řešení problémů](../../../00-quick-start)
-
-## Úvod
-
-Tento rychlý start je určen k tomu, abyste co nejrychleji začali pracovat s LangChain4j. Pokrývá absolutní základy vytváření AI aplikací s LangChain4j a GitHub Models. V dalších modulech přejdete na Azure OpenAI a GPT-5.2 a hlouběji se ponoříte do jednotlivých konceptů.
-
-## Co je LangChain4j?
-
-LangChain4j je knihovna pro Javu, která zjednodušuje vytváření aplikací poháněných AI. Místo práce s HTTP klienty a parsováním JSON pracujete s čistými Java API.
-
-„Řetězení“ (chain) v LangChain znamená propojení více komponent – můžete propojit prompt s modelem a následujícím parsrem, nebo několik AI volání, kde výstup jednoho se stane vstupem dalšího. Tento rychlý start se zaměřuje na základy před tím, než se pustíte do složitějších řetězců.
-
-
-
-*Řetězení komponent v LangChain4j – stavební bloky se spojují a vytvářejí silné AI workflow*
-
-Použijeme tři základní komponenty:
-
-**ChatModel** – rozhraní pro interakce s AI modelem. Zavolejte `model.chat("prompt")` a získejte odpověď jako řetězec. Používáme `OpenAiOfficialChatModel`, který pracuje s OpenAI kompatibilními endpointy, jako jsou GitHub Models.
-
-**AiServices** – vytváří typově bezpečná rozhraní AI služeb. Definujte metody, označte je `@Tool` a LangChain4j se postará o orchestraci. AI automaticky volá vaše Java metody, když je to potřeba.
-
-**MessageWindowChatMemory** – uchovává historii konverzace. Bez ní je každý požadavek nezávislý. S ní si AI pamatuje předchozí zprávy a udržuje kontext napříč několika výměnami.
-
-
-
-*Architektura LangChain4j – základní komponenty spolupracují, aby poháněly vaše AI aplikace*
-
-## Závislosti LangChain4j
-
-Tento rychlý start používá tři závislosti Maven v [`pom.xml`](../../../00-quick-start/pom.xml):
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-Modul `langchain4j-open-ai-official` poskytuje třídu `OpenAiOfficialChatModel`, která se připojuje k OpenAI kompatibilním API. GitHub Models používá stejný formát API, takže není potřeba žádný speciální adaptér – stačí nastavit základní URL na `https://models.github.ai/inference`.
-
-Modul `langchain4j-easy-rag` zajišťuje automatické dělení dokumentů, vytváření embeddingů a vyhledávání, takže můžete tvořit RAG aplikace bez manuální konfigurace každého kroku.
-
-## Požadavky
-
-**Používáte Dev Container?** Java a Maven jsou už nainstalované. Potřebujete jen GitHub Personal Access Token.
-
-**Lokální vývoj:**
-- Java 21+, Maven 3.9+
-- GitHub Personal Access Token (návod níže)
-
-> **Poznámka:** Tento modul používá `gpt-4.1-nano` z GitHub Models. Neměňte název modelu v kódu – je nastaven pro práci s dostupnými modely na GitHubu.
-
-## Nastavení
-
-### 1. Získejte svůj GitHub token
-
-1. Přejděte na [GitHub Nastavení → Personal Access Tokens](https://github.com/settings/personal-access-tokens)
-2. Klikněte na „Generate new token“ (vygenerovat nový token)
-3. Zadejte popisný název (např. "LangChain4j Demo")
-4. Nastavte expiraci (doporučeno 7 dní)
-5. V sekci „Account permissions“ najděte „Models“ a nastavte na „Read-only“
-6. Klikněte na „Generate token“
-7. Zkopírujte a uložte váš token – znovu ho neuvidíte
-
-### 2. Nastavte svůj token
-
-**Možnost 1: Použití VS Code (doporučeno)**
-
-Pokud používáte VS Code, přidejte svůj token do souboru `.env` v kořenovém adresáři projektu:
-
-Pokud soubor `.env` neexistuje, zkopírujte `.env.example` do `.env` nebo vytvořte nový `.env` v kořenové složce projektu.
-
-**Příklad souboru `.env`:**
-```bash
-# V /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-Pak můžete jednoduše kliknout pravým tlačítkem na jakýkoliv demo soubor (např. `BasicChatDemo.java`) v Průzkumníku a vybrat **„Run Java”** nebo použít konfigurační profily v panelu Run and Debug.
-
-**Možnost 2: Použití terminálu**
-
-Nastavte token jako proměnnou prostředí:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## Spuštění příkladů
-
-**Ve VS Code:** Stačí kliknout pravým tlačítkem na libovolný demo soubor v Průzkumníku a zvolit **„Run Java”**, nebo použít spouštěcí konfigurace v panelu Run and Debug (nejprve musíte přidat token do `.env`).
-
-**Pomocí Maven:** Alternativně spusťte z příkazové řádky:
-
-### 1. Základní chat
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. Vzory pro promptování
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-Ukažte zero-shot, few-shot, chain-of-thought a role-based promptování.
-
-### 3. Volání funkcí
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-AI automaticky volá vaše Java metody, když je to potřeba.
-
-### 4. Dotazy k dokumentům (Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-Pokládejte dotazy k dokumentům pomocí Easy RAG s automatickým embeddingem a vyhledáváním.
-
-### 5. Odpovědná AI
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-Ukažte, jak AI bezpečnostní filtry blokují škodlivý obsah.
-
-## Co každý příklad ukazuje
-
-**Základní chat** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-Začněte zde, abyste viděli LangChain4j v jeho nejjednodušší podobě. Vytvoříte `OpenAiOfficialChatModel`, odešlete prompt s `.chat()` a získáte odpověď. Tento příklad ukazuje základy: jak inicializovat modely s vlastním endpointem a API klíčem. Jakmile tuto šablonu pochopíte, vše ostatní na ní staví.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 Vyzkoušejte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otevřete [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) a zeptejte se:
-> - „Jak přepnu z GitHub Models na Azure OpenAI v tomto kódu?“
-> - „Jaké další parametry mohu konfigurovat v OpenAiOfficialChatModel.builder()?“
-> - „Jak přidám streamingové odpovědi místo čekání na kompletní odpověď?“
-
-**Prompt Engineering** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-Nyní, když víte, jak s modelem mluvit, prozkoumejme, co mu říkáte. Toto demo používá stejnou konfiguraci modelu, ale ukazuje pět různých vzorů promptování. Vyzkoušejte zero-shot prompty pro přímé instrukce, few-shot prompty, které se učí z příkladů, chain-of-thought prompty odkrývající kroky uvažování, a role-based prompty, které nastavují kontext. Uvidíte, jak stejný model poskytuje dramaticky odlišné výsledky podle toho, jak si formulujete dotaz.
-
-Demo také ukazuje prompt šablony, což je mocný způsob, jak tvořit znovupoužitelné prompty s proměnnými.
-Níže uvedený příklad ukazuje prompt využívající LangChain4j `PromptTemplate` pro vyplnění proměnných. AI odpoví podle dané destinace a aktivity.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 Vyzkoušejte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otevřete [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) a zeptejte se:
-> - „Jaký je rozdíl mezi zero-shot a few-shot promptováním a kdy každý z nich použít?“
-> - „Jak parametr temperature ovlivňuje odpovědi modelu?“
-> - „Jaké jsou techniky prevence prompt injection útoků v produkci?“
-> - „Jak mohu vytvořit znovupoužitelné PromptTemplate objekty pro běžné vzory?“
-
-**Integrace nástrojů** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-Zde LangChain4j ukazuje svoji sílu. Použijete `AiServices` k vytvoření AI asistenta, který může volat vaše Java metody. Stačí označit metody `@Tool("popis")` a LangChain4j se postará o zbytek – AI automaticky rozhodne, kdy použít který nástroj podle dotazu uživatele. Toto ukazuje volání funkcí, klíčovou techniku pro budování AI, která umí nejen odpovídat, ale také provádět akce.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 Vyzkoušejte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otevřete [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) a zeptejte se:
-> - „Jak funguje anotace @Tool a co s ní LangChain4j dělá na pozadí?“
-> - „Může AI volat více nástrojů za sebou, aby vyřešila složité problémy?“
-> - „Co když nástroj vyhodí výjimku – jak mám chytat chyby?“
-> - „Jak bych integroval reálné API místo tohoto příkladu kalkulačky?“
-
-**Dotazy k dokumentům (Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-Zde uvidíte RAG (retrieval-augmented generation) pomocí „Easy RAG“ přístupu LangChain4j. Dokumenty se načítají, automaticky se dělí a embedují do paměťové databáze, poté obsahový vyhledávač dodá relevantní části AI v době dotazu. AI odpovídá na základě vašich dokumentů, ne jen obecné znalosti.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 Vyzkoušejte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otevřete [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) a zeptejte se:
-> - „Jak RAG zabraňuje halucinacím AI ve srovnání s využitím tréninkových dat modelu?“
-> - „Jaký je rozdíl mezi tímto jednoduchým přístupem a vlastním RAG pipeline?“
-> - „Jak bych škáloval tento přístup pro více dokumentů nebo větší znalostní báze?“
-
-**Odpovědná AI** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-Budujte bezpečnost AI s obranou do hloubky. Toto demo ukazuje dvě vrstvy ochrany, které spolupracují:
-
-**Část 1: LangChain4j Input Guardrails** – Blokují nebezpečné prompty dřív, než dorazí k LLM. Vytvářejte vlastní strážní pravidla, která kontrolují zakázaná klíčová slova nebo vzory. Běží ve vašem kódu, takže jsou rychlá a zdarma.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**Část 2: Bezpečnostní filtry poskytovatele** – GitHub Models má zabudované filtry, které zachytí to, co vaše guardrails mohou přehlédnout. Uvidíte tvrdé blokace (chyby HTTP 400) u vážných porušení i měkká odmítnutí, kde AI zdvořile odmítá.
-
-> **🤖 Vyzkoušejte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otevřete [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) a zeptejte se:
-> - „Co je InputGuardrail a jak vytvořit vlastní?“
-> - „Jaký je rozdíl mezi tvrdým blokem a měkkým odmítnutím?“
-> - „Proč používat guardrails i filtry poskytovatele společně?“
-
-## Další kroky
-
-**Další modul:** [01-introduction - Začínáme s LangChain4j](../01-introduction/README.md)
-
----
-
-**Navigace:** [← Zpět na hlavní stránku](../README.md) | [Další: Modul 01 - Úvod →](../01-introduction/README.md)
-
----
-
-## Řešení problémů
-
-### První sestavení pomocí Maven
-
-**Problém**: První `mvn clean compile` nebo `mvn package` trvá dlouho (10-15 minut)
-
-**Příčina**: Maven si při prvním sestavení stáhne všechny závislosti projektu (Spring Boot, knihovny LangChain4j, Azure SDK atd.).
-
-**Řešení**: Je to normální. Následující sestavení budou výrazně rychlejší, protože závislosti jsou uloženy v mezipaměti lokálně. Doba stahování závisí na rychlosti vašeho připojení.
-
-### Syntaxe příkazů Maven v PowerShell
-
-**Problém**: Maven příkazy končí chybou `Unknown lifecycle phase ".mainClass=..."`
-**Příčina**: PowerShell interpretuje `=` jako operátor přiřazení proměnné, což narušuje syntaxi vlastností Maven
-
-**Řešení**: Použijte před příkaz Maven operátor ukončení parsování `--%`:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-Operátor `--%` říká PowerShellu, aby předal všechny následující argumenty doslovně do Maven bez interpretace.
-
-### Zobrazování emoji ve Windows PowerShell
-
-**Problém**: Odpovědi AI zobrazují v PowerShellu nesmyslné znaky (např. `????` nebo `â??`) místo emoji
-
-**Příčina**: Výchozí kódování PowerShellu nepodporuje UTF-8 emoji
-
-**Řešení**: Spusťte tento příkaz před spuštěním Java aplikací:
-```cmd
-chcp 65001
-```
-
-Tím se v terminálu vynutí kódování UTF-8. Alternativně použijte Windows Terminal, který má lepší podporu Unicode.
-
-### Ladění volání API
-
-**Problém**: Chybové hlášky autentizace, limity volání nebo neočekávané odpovědi od modelu AI
-
-**Řešení**: Příklady obsahují `.logRequests(true)` a `.logResponses(true)`, které zobrazují volání API v konzoli. To pomáhá při řešení chyb autentizace, limitů volání nebo neočekávaných odpovědí. V produkci tyto příznaky odstraňte, aby byla konzole méně zahlcená.
-
----
-
-
-**Prohlášení o omezení odpovědnosti**:
-Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby či nepřesnosti. Původní dokument v jeho mateřském jazyce by měl být považován za závazný zdroj. Pro kritické informace doporučujeme profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění či mylné výklady vyplývající z použití tohoto překladu.
-
\ No newline at end of file
diff --git a/translations/cs/01-introduction/README.md b/translations/cs/01-introduction/README.md
index 6d19f24d4..1048d1450 100644
--- a/translations/cs/01-introduction/README.md
+++ b/translations/cs/01-introduction/README.md
@@ -2,84 +2,84 @@
## Obsah
-- [Video průvodce](../../../01-introduction)
-- [Co se naučíte](../../../01-introduction)
-- [Požadavky](../../../01-introduction)
-- [Pochopení základního problému](../../../01-introduction)
-- [Pochopení tokenů](../../../01-introduction)
-- [Jak funguje paměť](../../../01-introduction)
-- [Jak to používá LangChain4j](../../../01-introduction)
-- [Nasazení infrastruktury Azure OpenAI](../../../01-introduction)
-- [Spuštění aplikace lokálně](../../../01-introduction)
-- [Používání aplikace](../../../01-introduction)
- - [Bezstavový chat (levý panel)](../../../01-introduction)
- - [Stavový chat (pravý panel)](../../../01-introduction)
-- [Další kroky](../../../01-introduction)
+- [Video průvodce](#video-průvodce)
+- [Co se naučíte](#co-se-naučíte)
+- [Předpoklady](#předpoklady)
+- [Porozumění hlavnímu problému](#porozumění-hlavnímu-problému)
+- [Porozumění tokenům](#porozumění-tokenům)
+- [Jak funguje paměť](#jak-funguje-paměť)
+- [Jak to používá LangChain4j](#jak-to-používá-langchain4j)
+- [Nasazení infrastruktury Azure OpenAI](#nasazení-infrastruktury-azure-openai)
+- [Spuštění aplikace lokálně](#spuštění-aplikace-lokálně)
+- [Použití aplikace](#použití-aplikace)
+ - [Bezstavový chat (levý panel)](#bezstavový-chat-levý-panel)
+ - [Stavový chat (pravý panel)](#stavový-chat-pravý-panel)
+- [Další kroky](#další-kroky)
## Video průvodce
-Podívejte se na tuto živou relaci, která vysvětluje, jak začít s tímto modulem:
+Sledujte tuto živou session, která vysvětluje, jak začít s tímto modulem:
## Co se naučíte
-V rychlém startu jste použili GitHub Modely k odesílání promptů, volání nástrojů, sestavení RAG pipeline a testování ochranných mechanismů. Tyto ukázky předvedly, co je možné — nyní přecházíme k Azure OpenAI a GPT-5.2 a začínáme stavět aplikace pro produkční použití. Tento modul se zaměřuje na konverzační AI, která si pamatuje kontext a udržuje stav — koncepty, které ty rychlé starty používaly za scénou, ale nevysvětlily.
+Toto je váš výchozí bod s LangChain4j a Azure OpenAI. Začínáme se základy a postupně stavíme produkční aplikace. Tento modul se soustředí na konverzační AI, která si pamatuje kontext a udržuje stav — základní koncepty, na kterých staví všechny následující moduly.
-Budeme používat Azure OpenAI GPT-5.2 po celou dobu tohoto průvodce, protože jeho pokročilé schopnosti rozumění umožňují lépe vidět rozdíly v chování různých vzorů. Když přidáte paměť, jasně uvidíte rozdíl. To usnadňuje pochopení toho, co každá komponenta přináší do vaší aplikace.
+Použijeme Azure OpenAI GPT-5.2 během celé této příručky, protože jeho pokročilé schopnosti dedukce činí chování různých vzorů jasněji viditelným. Když přidáte paměť, uvidíte rozdíl jasně. To usnadňuje porozumění tomu, co každý komponent přináší vaší aplikaci.
-Postavíte jednu aplikaci, která demonstruje oba vzory:
+Vytvoříte jednu aplikaci, která ukazuje oba vzory:
-**Bezstavový chat** - Každý požadavek je nezávislý. Model si nepamatuje předchozí zprávy. Toto je vzor použitý v rychlém startu.
+**Bezstavový chat** - Každý požadavek je nezávislý. Model si nepamatuje předchozí zprávy. Je to nejjednodušší výchozí bod.
-**Stavová konverzace** - Každý požadavek zahrnuje historii konverzace. Model udržuje kontext napříč více koly komunikace. Toto vyžadují produkční aplikace.
+**Stavová konverzace** - Každý požadavek obsahuje historii konverzace. Model udržuje kontext přes více zpráv. To je požadavek v produkčních aplikacích.
-## Požadavky
+## Předpoklady
- Azure předplatné s přístupem k Azure OpenAI
-- Java 21, Maven 3.9+
+- Java 21, Maven 3.9+
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
-> **Poznámka:** Java, Maven, Azure CLI a Azure Developer CLI (azd) jsou předinstalované v dodaném devcontaineru.
+> **Poznámka:** Java, Maven, Azure CLI a Azure Developer CLI (azd) jsou předinstalované v poskytnutém devcontaineru.
-> **Poznámka:** Tento modul používá GPT-5.2 na Azure OpenAI. Nasazení je automaticky nakonfigurováno pomocí `azd up` - neupravujte název modelu v kódu.
+> **Poznámka:** Tento modul používá GPT-5.2 na Azure OpenAI. Nasazení je automaticky nakonfigurováno pomocí `azd up` - neměňte název modelu v kódu.
-## Pochopení základního problému
+## Porozumění hlavnímu problému
-Jazykové modely jsou bezstavové. Každé API volání je nezávislé. Pokud pošlete "Jmenuji se John" a pak se zeptáte "Jak se jmenuji?", model nemá ponětí, že jste se právě představili. Zachází s každým požadavkem, jako by to byla první konverzace, kterou jste s ním kdy měli.
+Jazykové modely jsou bezstavové. Každé API volání je nezávislé. Pokud pošlete "Jmenuji se John" a pak se zeptáte "Jak se jmenuji?", model nemá tušení, že jste se právě představil. Každý požadavek považuje za první konverzaci, kterou jste kdy vedli.
-To je v pořádku pro jednoduché otázky a odpovědi, ale k ničemu pro skutečné aplikace. Chatboti zákaznické podpory si musí pamatovat, co jste jim řekli. Osobní asistenti potřebují kontext. Každá vícekroková konverzace vyžaduje paměť.
+To je v pořádku pro jednoduché otázky a odpovědi, ale pro skutečné aplikace to je k ničemu. Chatboti zákaznické podpory si musí pamatovat, co jste jim řekli. Osobní asistenti potřebují kontext. Každá konverzace s více zprávami vyžaduje paměť.
-Následující diagram kontrastuje oba přístupy — vlevo bezstavové volání, které zapomíná vaše jméno; vpravo stavové volání podporované ChatMemory, která si jméno pamatuje.
+Následující diagram kontrastuje dva přístupy — vlevo bezstavové volání, které zapomene vaše jméno; vpravo stavové volání podporované ChatMemory, které si jméno pamatuje.
-*Rozdíl mezi bezstavovými (nezávislými voláními) a stavovými (uvědomělými o kontextu) konverzacemi*
+*Rozdíl mezi bezstavovými (nezávislými voláními) a stavovými (kontextově uvědomělými) konverzacemi*
-## Pochopení tokenů
+## Porozumění tokenům
-Než se ponoříme do konverzací, je důležité pochopit tokeny - základní jednotky textu, které jazykové modely zpracovávají:
+Než se pustíte do konverzací, je důležité pochopit tokeny - základní jednotky textu, které jazykové modely zpracovávají:
-*Příklad jak je text rozdělen do tokenů - "Miluji AI!" se stává 4 samostatné jednotky zpracování*
+*Příklad, jak se text rozdělí na tokeny - "I love AI!" se stane 4 samostatnými jednotkami pro zpracování*
-Tokeny jsou měřítkem a jednotkami zpracování u AI modelů. Slova, interpunkce a dokonce mezery mohou být tokeny. Váš model má limit, kolik tokenů může zpracovat najednou (400 000 u GPT-5.2, s až 272 000 vstupními a 128 000 výstupními tokeny). Pochopení tokenů pomáhá řídit délku konverzace a náklady.
+Tokeny jsou způsob, jakým AI modely měří a zpracovávají text. Slova, interpunkce a dokonce i mezery mohou být tokeny. Váš model má limit, kolik tokenů může zpracovat najednou (400 000 pro GPT-5.2, se až 272 000 vstupními tokeny a 128 000 výstupními tokeny). Porozumění tokenům vám pomůže řídit délku konverzace a náklady.
## Jak funguje paměť
-Paměť chatu řeší bezstavový problém tím, že udržuje historii konverzace. Před odesláním vašeho požadavku modelu framework předřadí relevantní předchozí zprávy. Když se zeptáte "Jak se jmenuji?", systém ve skutečnosti pošle celou historii konverzace, což umožní modelu vidět, že jste dříve řekli "Jmenuji se John."
+Paměť chatu řeší problém bezstavovosti tím, že uchovává historii konverzace. Před odesláním požadavku modelu framework přidá relevantní předchozí zprávy. Když se zeptáte "Jak se jmenuji?", systém ve skutečnosti pošle celou historii konverzace, což umožní modelu vidět, že jste předtím řekl "Jmenuji se John."
-LangChain4j poskytuje implementace paměti, které toto automaticky zvládají. Vy si vyberete, kolik zpráv chcete uchovat, a framework spravuje kontextové okno. Níže je diagram, který ukazuje, jak MessageWindowChatMemory udržuje posuvné okno posledních zpráv.
+LangChain4j poskytuje implementace paměti, které to automaticky řeší. Vy si vyberete, kolik zpráv chcete uchovat, a framework spravuje kontextové okno. Níže uvedený diagram ukazuje, jak MessageWindowChatMemory udržuje posuvné okno nedávných zpráv.
-*MessageWindowChatMemory udržuje posuvné okno posledních zpráv, automaticky odhazuje staré*
+*MessageWindowChatMemory udržuje posuvné okno nedávných zpráv a automaticky odstraňuje staré*
## Jak to používá LangChain4j
-Tento modul rozšiřuje rychlý start integrací Spring Boot a přidáním paměti konverzace. Tady je, jak k sobě části zapadají:
+Tento modul integruje Spring Boot a přidává paměť konverzace. Takto do sebe části zapadají:
**Závislosti** - Přidejte dvě knihovny LangChain4j:
@@ -94,7 +94,7 @@ Tento modul rozšiřuje rychlý start integrací Spring Boot a přidáním pamě
```
-**Chatovací model** - Nakonfigurujte Azure OpenAI jako Spring bean ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+**Chat model** - Nakonfigurujte Azure OpenAI jako Spring bean ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -109,7 +109,7 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-Builder načítá přihlašovací údaje z proměnných prostředí nastavených `azd up`. Nastavení `baseUrl` na váš Azure endpoint umožňuje klientu OpenAI pracovat s Azure OpenAI.
+Builder čte přihlašovací údaje z proměnných prostředí nastavených pomocí `azd up`. Nastavení `baseUrl` na váš Azure endpoint umožňuje klientovi OpenAI fungovat s Azure OpenAI.
**Paměť konverzace** - Sledujte historii chatu s MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
@@ -124,14 +124,14 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-Vytvořte paměť pomocí `withMaxMessages(10)` pro uchování posledních 10 zpráv. Přidejte uživatelské a AI zprávy s typovanými wrappery: `UserMessage.from(text)` a `AiMessage.from(text)`. Historii získáte voláním `memory.messages()` a tu pošlete modelu. Servis uchovává oddělené instance paměti podle ID konverzace, což umožňuje více uživatelům simultánně chatovat.
+Vytvořte paměť s `withMaxMessages(10)`, aby se uchovalo posledních 10 zpráv. Přidejte uživatelské a AI zprávy s typovými obaly: `UserMessage.from(text)` a `AiMessage.from(text)`. Získejte historii s `memory.messages()` a pošlete ji modelu. Služba uchovává samostatné instance paměti pro každý ID konverzace, což umožňuje více uživatelům chatovat současně.
-> **🤖 Vyzkoušejte s [GitHub Copilot](https://github.com/features/copilot) Chatem:** Otevřete [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) a zeptejte se:
+> **🤖 Vyzkoušejte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otevřete [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) a zeptejte se:
> - "Jak MessageWindowChatMemory rozhoduje, které zprávy zahodit, když je okno plné?"
> - "Mohu implementovat vlastní úložiště paměti pomocí databáze místo paměti v RAM?"
-> - "Jak bych přidal shrnutí (sumarizaci) pro kompresi staré historie konverzace?"
+> - "Jak bych přidal shrnutí pro kompresi staré historie konverzace?"
-Bezstavový chat endpoint paměť zcela přeskočí - pouze `chatModel.chat(prompt)`, jako v rychlém startu. Stavový endpoint přidává zprávy do paměti, získává historii a zahrnuje tento kontext do každého požadavku. Stejné nastavení modelu, různé vzory.
+Bezstavový chat endpoint paměť zcela vynechává - pouze `chatModel.chat(prompt)` jako rychlý start. Stavový endpoint přidává zprávy do paměti, získává historii a zahrnuje tento kontext s každým požadavkem. Stejná konfigurace modelu, různé vzory.
## Nasazení infrastruktury Azure OpenAI
@@ -147,16 +147,16 @@ cd 01-introduction
azd up # Vyberte předplatné a umístění (doporučeno eastus2)
```
-> **Poznámka:** Pokud narazíte na chybu timeoutu (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), jednoduše spusťte `azd up` znovu. Azure zdroje mohou být stále v procesu provisioning na pozadí a opakování umožní dokončení nasazení, jakmile dosáhnou konečného stavu.
+> **Poznámka:** Pokud narazíte na chybu timeoutu (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), jednoduše spusťte znovu `azd up`. Azure zdroje mohou stále probíhat na pozadí a opakování umožní dokončení nasazení, jakmile zdroje dosáhnou konečného stavu.
Toto provede:
-1. Nasazení Azure OpenAI s GPT-5.2 a modely text-embedding-3-small
-2. Automatické vytvoření `.env` souboru v kořenu projektu s přihlašovacími údaji
-3. Nastavení všech požadovaných proměnných prostředí
+1. Nasazení zdroje Azure OpenAI s GPT-5.2 a modely text-embedding-3-small
+2. Automatické vygenerování souboru `.env` v kořenovém adresáři projektu s přihlašovacími údaji
+3. Nastavení všech potřebných proměnných prostředí
-**Máte problémy s nasazením?** Podívejte se do [Infrastructure README](infra/README.md) na podrobné řešení problémů, včetně konfliktů názvů poddomén, manuálních kroků nasazení přes Azure Portal a návodu na konfiguraci modelů.
+**Máte problémy s nasazením?** Viz [Infrastructure README](infra/README.md) pro podrobné návody k řešení problémů včetně konfliktů názvů subdomén, ručního nasazení přes Azure Portal a návodů k konfiguraci modelu.
-**Ověřte úspěšnost nasazení:**
+**Ověření úspěšnosti nasazení:**
**Bash:**
```bash
@@ -168,7 +168,7 @@ cat ../.env # Mělo by zobrazit AZURE_OPENAI_ENDPOINT, API_KEY atd.
Get-Content ..\.env # Mělo by zobrazit AZURE_OPENAI_ENDPOINT, API_KEY, atd.
```
-> **Poznámka:** Příkaz `azd up` automaticky generuje `.env` soubor. Pokud ho budete chtít později upravit, můžete buď `.env` soubor editovat ručně, nebo jej znovu vygenerovat spuštěním:
+> **Poznámka:** Příkaz `azd up` automaticky generuje `.env` soubor. Pokud ho budete potřebovat později aktualizovat, můžete buď upravit `.env` soubor ručně, nebo ho znovu vygenerovat spuštěním:
>
> **Bash:**
> ```bash
@@ -182,12 +182,11 @@ Get-Content ..\.env # Mělo by zobrazit AZURE_OPENAI_ENDPOINT, API_KEY, atd.
> .\.azd-env.ps1
> ```
-
## Spuštění aplikace lokálně
-**Ověřte nasazení:**
+**Ověření nasazení:**
-Ujistěte se, že `.env` soubor existuje v kořenovém adresáři s Azure přihlašovacími údaji. Spusťte to z adresáře modulu (`01-introduction/`):
+Ujistěte se, že soubor `.env` existuje v kořenovém adresáři s údaji pro Azure. Spusťte to z adresáře modulu (`01-introduction/`):
**Bash:**
```bash
@@ -201,21 +200,21 @@ Get-Content ..\.env # Mělo by zobrazit AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYM
**Spuštění aplikací:**
-**Možnost 1: Použití Spring Boot Dashboard (doporučeno pro uživatele VS Code)**
+**Možnost 1: Použití Spring Boot Dashboard (doporučeno pro uživatele VS Code)**
-Dev kontejner obsahuje rozšíření Spring Boot Dashboard, které poskytuje vizuální rozhraní pro správu všech Spring Boot aplikací. Najdete ho v liště aktivit vlevo ve VS Code (ikona Spring Boot).
+Dev container obsahuje rozšíření Spring Boot Dashboard, které poskytuje vizuální rozhraní pro správu všech Spring Boot aplikací. Najdete ho v Activity Bar na levé straně VS Code (ikona Spring Boot).
-Ve Spring Boot Dashboard můžete:
-- Vidět všechny dostupné Spring Boot aplikace v workspace
-- Spouštět/ukončovat aplikace jedním kliknutím
-- Sledovat logy aplikací v reálném čase
-- Monitorovat stav aplikací
+Ze Spring Boot Dashboard můžete:
+- Vidět všechny dostupné Spring Boot aplikace v pracovním prostoru
+- Spustit/zastavit aplikace jedním kliknutím
+- Zobrazit logy aplikací v reálném čase
+- Monitorovat stav aplikace
-Jednoduše klikněte na tlačítko přehrávání vedle „introduction“ pro spuštění tohoto modulu, nebo spusťte všechny moduly najednou.
+Stačí kliknout na tlačítko play vedle "introduction" pro spuštění tohoto modulu, nebo spustit všechny moduly najednou.
-*Spring Boot Dashboard ve VS Code — spouštějte, ukončujte a sledujte všechny moduly na jednom místě*
+*Spring Boot Dashboard ve VS Code — spusťte, zastavte a monitorujte všechny moduly z jednoho místa*
**Možnost 2: Použití shell skriptů**
@@ -223,7 +222,7 @@ Spusťte všechny webové aplikace (moduly 01-04):
**Bash:**
```bash
-cd .. # Ze kořenového adresáře
+cd .. # Z kořenového adresáře
./start-all.sh
```
@@ -233,7 +232,7 @@ cd .. # Z kořenového adresáře
.\start-all.ps1
```
-Nebo spusťte jen tento modul:
+Nebo spusťte pouze tento modul:
**Bash:**
```bash
@@ -247,9 +246,9 @@ cd 01-introduction
.\start.ps1
```
-Oba skripty automaticky načtou proměnné prostředí z kořenového `.env` souboru a vytvoří JARy, pokud neexistují.
+Oba skripty automaticky načtou proměnné prostředí ze souboru `.env` v kořenovém adresáři a postaví JARy, pokud neexistují.
-> **Poznámka:** Pokud chcete všechny moduly nejdříve sestavit ručně před spuštěním:
+> **Poznámka:** Pokud chcete nejprve ručně postavit všechny moduly před spuštěním:
>
> **Bash:**
> ```bash
@@ -263,13 +262,13 @@ Oba skripty automaticky načtou proměnné prostředí z kořenového `.env` sou
> mvn clean package -DskipTests
> ```
-Otevřete ve svém prohlížeči http://localhost:8080.
+Otevřete v prohlížeči http://localhost:8080.
-**Pro zastavení:**
+**Zastavení aplikace:**
**Bash:**
```bash
-./stop.sh # Tento modul pouze
+./stop.sh # Pouze tento modul
# Nebo
cd .. && ./stop-all.sh # Všechny moduly
```
@@ -281,18 +280,17 @@ cd .. && ./stop-all.sh # Všechny moduly
cd ..; .\stop-all.ps1 # Všechny moduly
```
-
-## Používání aplikace
+## Použití aplikace
Aplikace poskytuje webové rozhraní se dvěma implementacemi chatu vedle sebe.
-*Přehledová obrazovka ukazující jak Jednoduchý chat (bezstavový), tak Konverzační chat (stavový)*
+*Dashboard zobrazuje možnosti Simple Chat (bezstavový) a Conversational Chat (stavový)*
### Bezstavový chat (levý panel)
-Vyzkoušejte nejdříve toto. Řekněte „Jmenuji se John“ a hned poté „Jak se jmenuji?“ Model si nebude pamatovat, protože každá zpráva je nezávislá. To demonstruje základní problém integrace jazykového modelu – žádný kontext konverzace.
+Vyzkoušejte to jako první. Zeptejte se "Jmenuji se John" a pak okamžitě "Jak se jmenuji?". Model si to nepamatuje, protože každá zpráva je nezávislá. To ukazuje hlavní problém základní integrace jazykového modelu - žádný kontext konverzace.
@@ -300,25 +298,25 @@ Vyzkoušejte nejdříve toto. Řekněte „Jmenuji se John“ a hned poté „Ja
### Stavový chat (pravý panel)
-Nyní vyzkoušejte stejnou sekvenci zde. Řekněte „Jmenuji se John“ a pak „Jak se jmenuji?“ Tentokrát si to pamatuje. Rozdíl je MessageWindowChatMemory - udržuje historii konverzace a zahrnuje ji v každém požadavku. Takto funguje produkční konverzační AI.
+Nyní vyzkoušejte stejnou sekvenci zde. Zeptejte se "Jmenuji se John" a pak "Jak se jmenuji?". Tentokrát si to pamatuje. Rozdíl je v MessageWindowChatMemory - udržuje historii konverzace a zahrnuje ji s každým požadavkem. Takto funguje produkční konverzační AI.
-*AI si pamatuje vaše jméno z dřívější konverzace*
+*AI si pamatuje vaše jméno z předchozí části konverzace*
-Oba panely používají stejný GPT-5.2 model. Jediný rozdíl je paměť. To jasně ukazuje, co paměť přináší vaší aplikaci a proč je nezbytná pro skutečné užití.
+Oba panely používají stejný model GPT-5.2. Jediný rozdíl je paměť. To jasně ukazuje, co paměť přináší vaší aplikaci a proč je nezbytná pro skutečné použití.
## Další kroky
-**Další modul:** [02-prompt-engineering - Návrh promptů s GPT-5.2](../02-prompt-engineering/README.md)
+**Další modul:** [02-prompt-engineering - Prompt Engineering s GPT-5.2](../02-prompt-engineering/README.md)
---
-**Navigace:** [← Předcházející: Modul 00 - Rychlý start](../00-quick-start/README.md) | [Zpět na hlavní stránku](../README.md) | [Další: Modul 02 - Návrh promptů →](../02-prompt-engineering/README.md)
+**Navigace:** [← Zpět na hlavní](../README.md) | [Další: Modul 02 - Prompt Engineering →](../02-prompt-engineering/README.md)
---
-**Prohlášení o vyloučení odpovědnosti**:
-Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho rodném jazyce by měl být považován za závazný zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Nejsme odpovědni za jakékoli nedorozumění nebo mylné výklady vyplývající z použití tohoto překladu.
+**Prohlášení o omezení odpovědnosti**:
+Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o co největší přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo nesprávné interpretace vzniklé použitím tohoto překladu.
\ No newline at end of file
diff --git a/translations/cs/02-prompt-engineering/README.md b/translations/cs/02-prompt-engineering/README.md
index e9032124f..25a7b9b06 100644
--- a/translations/cs/02-prompt-engineering/README.md
+++ b/translations/cs/02-prompt-engineering/README.md
@@ -1,85 +1,85 @@
-# Modul 02: Inženýrství promptů s GPT-5.2
+# Modul 02: Prompt engineering s GPT-5.2
## Obsah
-- [Video procházka](../../../02-prompt-engineering)
-- [Co se naučíte](../../../02-prompt-engineering)
-- [Požadavky](../../../02-prompt-engineering)
-- [Pochopení inženýrství promptů](../../../02-prompt-engineering)
-- [Základy inženýrství promptů](../../../02-prompt-engineering)
- - [Zero-Shot prompting](../../../02-prompt-engineering)
- - [Few-Shot prompting](../../../02-prompt-engineering)
- - [Řetězec myšlenek](../../../02-prompt-engineering)
- - [Promptování na základě role](../../../02-prompt-engineering)
- - [Šablony promptů](../../../02-prompt-engineering)
-- [Pokročilé vzory](../../../02-prompt-engineering)
-- [Spuštění aplikace](../../../02-prompt-engineering)
-- [Snímky obrazovky aplikace](../../../02-prompt-engineering)
-- [Prozkoumání vzorů](../../../02-prompt-engineering)
- - [Nízká vs vysoká ochota](../../../02-prompt-engineering)
- - [Provedení úkolu (Úvodní nástroje)](../../../02-prompt-engineering)
- - [Sebereflexivní kód](../../../02-prompt-engineering)
- - [Strukturovaná analýza](../../../02-prompt-engineering)
- - [Vícekolová konverzace](../../../02-prompt-engineering)
- - [Postupné odůvodňování](../../../02-prompt-engineering)
- - [Omezený výstup](../../../02-prompt-engineering)
-- [Co se skutečně učíte](../../../02-prompt-engineering)
-- [Další kroky](../../../02-prompt-engineering)
-
-## Video procházka
-
-Podívejte se na tuto živou relaci, která vysvětluje, jak začít s tímto modulem:
+- [Video průvodce](#video-průvodce)
+- [Co se naučíte](#co-se-naučíte)
+- [Požadavky](#požadavky)
+- [Pochopení prompt engineeringu](#pochopení-prompt-engineeringu)
+- [Základy prompt engineeringu](#základy-prompt-engineeringu)
+ - [Zero-Shot Prompting](#zero-shot-prompting)
+ - [Few-Shot Prompting](#few-shot-prompting)
+ - [Chain of Thought](#chain-of-thought)
+ - [Role-Based Prompting](#role-based-prompting)
+ - [Promptové šablony](#promptové-šablony)
+- [Pokročilé vzory](#pokročilé-vzory)
+- [Spuštění aplikace](#spuštění-aplikace)
+- [Snímky obrazovky aplikace](#snímky-aplikace)
+- [Prozkoumání vzorů](#prozkoumání-vzorů)
+ - [Nízká vs vysoká ochota](#nízká-vs-vysoká-ochota)
+ - [Provedení úkolu (tool preambule)](#vykonávání-úkolu-preambuly-nástrojů)
+ - [Sebereflexivní kód](#sebereflektující-kód)
+ - [Strukturovaná analýza](#strukturovaná-analýza)
+ - [Vícekolová konverzace](#vícekrokový-rozhovor)
+ - [Krok za krokem uvažování](#krok-za-krokem-uvažování)
+ - [Omezený výstup](#omezený-výstup)
+- [Co se skutečně učíte](#co-se-skutečně-učíte)
+- [Další kroky](#další-kroky)
+
+## Video průvodce
+
+Sledujte tuto živou relaci, která vysvětluje, jak začít s tímto modulem:
## Co se naučíte
-Následující diagram poskytuje přehled klíčových témat a dovedností, které v tomto modulu rozvinete — od technik zdokonalování promptů po postupný pracovní postup, který budete používat.
+Následující diagram poskytuje přehled klíčových témat a dovedností, které v tomto modulu získáte — od technik zdokonalování promptů až po krok za krokem pracovní postup, který budete následovat.
-V předchozích modulech jste prozkoumali základní interakce LangChain4j s GitHub Models a viděli, jak paměť umožňuje konverzační AI s Azure OpenAI. Nyní se zaměříme na to, jak klást otázky — tedy samotné prompty — pomocí GPT-5.2 od Azure OpenAI. Způsob, jakým strukturalizujete své prompty, dramaticky ovlivňuje kvalitu odpovědí, které obdržíte. Začneme přehledem základních technik prompting, poté přejdeme k osmi pokročilým vzorům, které plně využívají možnosti GPT-5.2.
+V předchozím modulu jste viděli, jak paměť umožňuje konverzační AI s Azure OpenAI. Nyní se zaměříme na to, jak pokládat otázky — tedy samotné prompty — s použitím Azure OpenAI GPT-5.2. Způsob, jak prompt strukturalizujete, dramaticky ovlivňuje kvalitu odpovědí, které získáte. Začneme přehledem základních technik promptování, poté přejdeme k osmi pokročilým vzorům, které plně využívají schopnosti GPT-5.2.
-Použijeme GPT-5.2, protože zavádí kontrolu odůvodnění — můžete modelu říci, kolik přemýšlení má před odpovědí provést. To dělá různé strategie prompting zřetelnějšími a pomáhá vám pochopit, kdy použít každý přístup. Také využijeme méně restriktivní limity Azure pro GPT-5.2 ve srovnání s GitHub Models.
+Použijeme GPT-5.2, protože zavádí kontrolu uvažování — můžete modelu říct, kolik uvažování má před odpovědí provést. To jinak přístupy k promptování výrazně odlišuje a pomáhá vám pochopit, kdy použít který způsob.
## Požadavky
-- Dokončen Modul 01 (nasazené Azure OpenAI zdroje)
-- `.env` soubor v kořenovém adresáři s přihlašovacími údaji Azure (vytvořený pomocí `azd up` v Modulu 01)
+- Dokončen Modul 01 (nasazení zdrojů Azure OpenAI)
+- Soubor `.env` v kořenovém adresáři s přihlašovacími údaji Azure (vytvořený příkazem `azd up` v Modulu 01)
-> **Poznámka:** Pokud jste Modulu 01 nedokončili, nejprve postupujte podle tamních pokynů k nasazení.
+> **Poznámka:** Pokud jste Modul 01 nedokončili, nejprve postupujte podle pokynů k nasazení tam.
-## Pochopení inženýrství promptů
+## Pochopení prompt engineeringu
-Inženýrství promptů je v jádru rozdílem mezi vágními a přesnými instrukcemi, jak ukazuje následující srovnání.
+V jádru je prompt engineering rozdíl mezi vágními a přesnými instrukcemi, jak ukazuje následující srovnání.
-
+
-Inženýrství promptů znamená navrhování vstupního textu, který vám konzistentně přinese požadované výsledky. Nejde jen o kladení otázek — jde o strukturování požadavků tak, aby model přesně pochopil, co chcete, a jak to má dodat.
+Prompt engineering znamená navrhování vstupního textu, který vám konzistentně přinese požadované výsledky. Nejde jen o pokládání otázek — jde o strukturování požadavků tak, aby model přesně pochopil, co chcete, a jak to má dodat.
-Představte si to jako dávaní instrukcí kolegovi. „Oprav chybu“ je vágní. „Oprav výjimku null pointer v UserService.java na řádku 45 přidáním kontroly na null“ je specifické. Jazykové modely fungují stejným způsobem — záleží na přesnosti a struktuře.
+Představte si to jako dávání instrukcí kolegovi. "Oprav chybu" je vágní. "Oprav nulový ukazatel výjimky v UserService.java řádek 45 přidáním kontroly na null" je konkrétní. Jazykové modely fungují stejně — specifita a struktura jsou důležité.
-Diagram níže ukazuje, jak do tohoto obrazu zapadá LangChain4j — spojuje vaše vzory promptů s modelem pomocí stavebních bloků SystemMessage a UserMessage.
+Níže je diagram, který ukazuje, jak LangChain4j sedí do tohoto obrazu — propojuje vzory promptů s modelem pomocí komponent SystemMessage a UserMessage.
-LangChain4j poskytuje infrastrukturu — připojení k modelu, paměť a typy zpráv — zatímco vzory promptů jsou pouze pečlivě strukturovaný text, který touto infrastrukturou posíláte. Klíčovými stavebními bloky jsou `SystemMessage` (který nastavuje chování a roli AI) a `UserMessage` (který nese váš skutečný požadavek).
+LangChain4j poskytuje infrastrukturu — připojení k modelu, paměť a typy zpráv — zatímco vzory promptů jsou jen pečlivě strukturovaný text, který touto infrastrukturou posíláte. Klíčové stavební bloky jsou `SystemMessage` (který nastavuje chování a roli AI) a `UserMessage` (který nese váš skutečný požadavek).
-## Základy inženýrství promptů
+## Základy prompt engineeringu
-Pět základních technik uvedených níže tvoří základ efektivního inženýrství promptů. Každá řeší jiný aspekt komunikace s jazykovými modely.
+Pět základních technik níže tvoří základ efektivního prompt engineeringu. Každá řeší jiný aspekt, jak komunikovat s jazykovými modely.
-
+
-Než se pustíme do pokročilých vzorů v tomto modulu, připomeňme si pět základních technik promptování. Tyto jsou stavebními kameny, které by měl znát každý prompt inženýr. Pokud jste již prošli [Rychlý start modul](../00-quick-start/README.md#2-prompt-patterns), viděli jste je v akci — zde je konceptuální rámec za nimi.
+Než se ponoříme do pokročilých vzorů v tomto modulu, připomeňme si pět základních technik promptování. Jsou to stavební kameny, které by měl znát každý prompt engineer.
-### Zero-Shot prompting
+### Zero-Shot Prompting
-Nejjednodušší přístup: dejte modelu přímý pokyn bez příkladů. Model se zcela spoléhá na své tréninkové znalosti, aby pochopil a vykonal úkol. Funguje to dobře pro přímočaré požadavky, kde je očekávané chování zřejmé.
+Nejjednodušší přístup: dejte modelu přímý příkaz bez příkladů. Model se spoléhá zcela na své tréninkové znalosti, aby úkol pochopil a vykonal. Funguje to dobře u přímočarých požadavků, kde je očekávané chování zřejmé.
-
+
-*Přímý pokyn bez příkladů — model vyvozuje úkol pouze z pokynu*
+*Přímá instrukce bez příkladů — model odvozuje úkol pouze z instrukce*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
@@ -87,15 +87,15 @@ String response = model.chat(prompt);
// Odpověď: "Pozitivní"
```
-**Kdy použít:** Jednoduché klasifikace, přímé otázky, překlady nebo jakýkoli úkol, který model zvládne bez dalšího vedení.
+**Kdy použít:** Jednoduché klasifikace, přímé otázky, překlady nebo jakýkoliv úkol, který model zvládá bez dalšího vedení.
-### Few-Shot prompting
+### Few-Shot Prompting
-Poskytněte příklady, které ukazují vzor, podle kterého má model postupovat. Model se z vašich příkladů naučí očekávaný vstupně-výstupní formát a aplikuje ho na nové vstupy. To výrazně zlepšuje konzistenci u úkolů, kde požadovaný formát nebo chování není zřejmé.
+Dejte příklady, které demonstrují vzor, podle kterého má model postupovat. Model se naučí očekávaný vstupně-výstupní formát z vašich příkladů a aplikuje ho na nové vstupy. To výrazně zlepšuje konzistenci u úkolů, kde požadovaný formát nebo chování není zřejmé.
-
+
-*Učení z příkladů — model rozpoznává vzor a aplikuje ho na nové vstupy*
+*Učení z příkladů — model identifikuje vzor a aplikuje ho na nové vstupy*
```java
String prompt = """
@@ -112,15 +112,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Kdy použít:** Vlastní klasifikace, konzistentní formátování, úkoly specifické pro doménu nebo pokud jsou výsledky zero-shot nekonzistentní.
+**Kdy použít:** Vlastní klasifikace, konzistentní formátování, úkoly z konkrétních domén nebo když jsou výsledky zero-shot nekonzistentní.
-### Řetězec myšlenek
+### Chain of Thought
-Požádejte model, aby ukázal své odůvodnění krok za krokem. Místo aby skočil rovnou k odpovědi, model rozdělí problém a explicitně projde každý krok. To zlepšuje přesnost u matematických, logických a vícekrokových úkolů.
+Požádejte model, aby ukázal své uvažování krok za krokem. Místo skoku rovnou k odpovědi rozebírá problém a postupně prochází každou část explicitně. To zlepšuje přesnost u matematických, logických a vícestupňových úloh.
-
+
-*Postupné odůvodňování — rozdělení složitých problémů do explicitních logických kroků*
+*Krok za krokem uvažování — rozklad složitých problémů na explicitní logické kroky*
```java
String prompt = """
@@ -133,15 +133,15 @@ String response = model.chat(prompt);
// Model ukazuje: 15 - 8 = 7, pak 7 + 12 = 19 jablek
```
-**Kdy použít:** Matematické úlohy, logické hádanky, ladění nebo jakýkoli úkol, kde zobrazení procesu odůvodnění zvyšuje přesnost a důvěru.
+**Kdy použít:** Matematické problémy, logické hádanky, ladění chyb nebo jakýkoliv úkol, kde zobrazení uvažovacího procesu zlepšuje přesnost a důvěru.
-### Promptování na základě role
+### Role-Based Prompting
-Než položíte otázku, nastavte AI osobnost nebo roli. To poskytuje kontext, který formuje tón, hloubku a zaměření odpovědi. „Softwarový architekt“ poskytne jiné rady než „junior vývojář“ nebo „auditor bezpečnosti“.
+Nastavte AI personu nebo roli předtím, než položíte otázku. To poskytuje kontext, který formuje tón, hloubku a zaměření odpovědi. „Softwarový architekt“ dá jiné rady než „junior programátor“ nebo „auditor bezpečnosti“.
-
+
-*Nastavení kontextu a osobnosti — stejná otázka dostane jinou odpověď podle přiřazené role*
+*Nastavení kontextu a persony — stejná otázka dostane různou odpověď podle přiřazené role*
```java
String prompt = """
@@ -157,15 +157,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Kdy použít:** Kontroly kódu, doučování, doménové analýzy nebo když potřebujete odpovědi přizpůsobené určité úrovni odbornosti či perspektivě.
+**Kdy použít:** Revize kódu, doučování, analýzy specifické domény nebo když potřebujete odpovědi přizpůsobené určité úrovni odbornosti nebo perspektivě.
-### Šablony promptů
+### Promptové šablony
-Vytvářejte znovupoužitelné prompty s proměnnými zástupci. Místo psaní nového promptu pokaždé definujte šablonu jednou a plňte ji různými hodnotami. Třída `PromptTemplate` v LangChain4j to usnadňuje pomocí syntaxe `{{variable}}`.
+Vytvářejte znovupoužitelné prompty s proměnnými zástupnými znaky. Místo psaní nového promptu pokaždé definujte šablonu jednou a vyplňte různými hodnotami. Třída `PromptTemplate` z LangChain4j to usnadňuje syntaxí `{{variable}}`.
-
+
-*Znovupoužitelné prompty s proměnnými zástupci — jedna šablona, mnoho použití*
+*Znovupoužitelné prompty s proměnnými zástupnými znaky — jedna šablona, mnoho použití*
```java
PromptTemplate template = PromptTemplate.from(
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**Kdy použít:** Opakované dotazy s různými vstupy, dávkové zpracování, budování znovupoužitelných AI workflow, nebo kdekoliv, kde struktura promptu zůstává stejná, ale data se mění.
+**Kdy použít:** Opakované dotazy s různými vstupy, hromadné zpracování, budování znovupoužitelných AI pracovních postupů nebo jakákoli situace, kde struktura promptu zůstává stejná, ale data se mění.
---
-Těchto pět základů vám dává pevný arzenál pro většinu promptingových úkolů. Zbytek tohoto modulu na nich staví pomocí **osmi pokročilých vzorů**, které využívají kontrolu odůvodnění GPT-5.2, sebehodnocení a schopnosti strukturovaného výstupu.
+Těchto pět základů vám dá pevnou sadu nástrojů pro většinu promptovacích úkolů. Zbytek tohoto modulu na ně staví s **osmi pokročilými vzory**, které využívají řízení uvažování GPT-5.2, sebehodnocení a schopnosti strukturovaného výstupu.
## Pokročilé vzory
-Po pokrytí základů přejděme k osmi pokročilým vzorům, které činí tento modul unikátním. Ne každý problém vyžaduje stejný přístup. Některé otázky chtějí rychlé odpovědi, jiné hluboké přemýšlení. Některé potřebují viditelné odůvodnění, jiné jen výsledky. Každý níže uvedený vzor je optimalizován pro jiný scénář — a kontrola odůvodnění GPT-5.2 rozdíly ještě více zdůrazňuje.
+Po pokrytí základů přejděme k osmi pokročilým vzorům, které tento modul činí výjimečným. Ne všechny problémy vyžadují stejný přístup. Některé otázky potřebují rychlé odpovědi, jiné hluboké zamyšlení. Některé potřebují viditelné uvažování, jiné jen výsledky. Každý vzor níže je optimalizován pro jiný scénář — a řízení uvažování GPT-5.2 dělá rozdíly ještě zřetelnější.
-*Přehled osmi vzorů inženýrství promptů a jejich užití*
+*Přehled osmi vzorů prompt engineeringu a jejich použití*
-GPT-5.2 přidává další dimenzi k těmto vzorům: *kontrolu odůvodnění*. Posuvník níže ukazuje, jak můžete upravit úsilí modelu o myšlení — od rychlých přímých odpovědí po hlubokou a důkladnou analýzu.
+GPT-5.2 přidává dalším rozměrem k těmto vzorům: *řízení uvažování*. Posuvník níže ukazuje, jak můžete upravit množství myšlení modelu — od rychlých, přímých odpovědí po hlubokou, důkladnou analýzu.
-
+
-*Kontrola odůvodnění GPT-5.2 vám umožňuje určit, kolik přemýšlení má model udělat — od rychlých přímých odpovědí po hluboké zkoumání*
+*Řízení uvažování GPT-5.2 vám umožňuje určit, kolik uvažování má model provést — od rychlých přímých odpovědí po hluboké zkoumání*
-**Nízká ochota (rychlé a cílené)** - Pro jednoduché otázky, kde chcete rychlé, přímé odpovědi. Model dělá minimální odůvodnění - maximálně 2 kroky. Použijte to pro výpočty, vyhledávání nebo přímočaré otázky.
+**Nízká ochota (rychlé a zaměřené)** - Pro jednoduché otázky, kde chcete rychlé, přímé odpovědi. Model provádí minimální uvažování - maximálně 2 kroky. Použijte pro výpočty, vyhledávání nebo přímočaré otázky.
```java
String prompt = """
@@ -220,11 +220,11 @@ String response = chatModel.chat(prompt);
```
> 💡 **Prozkoumejte s GitHub Copilot:** Otevřete [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) a zeptejte se:
-> - „Jaký je rozdíl mezi nízkou a vysokou ochotou ve vzorech prompting?“
-> - „Jak pomáhají XML tagy v promptech strukturovat odpověď AI?“
-> - „Kdy mám použít vzory sebereflexe vs přímé instrukce?“
+> - "Jaký je rozdíl mezi nízkou a vysokou ochotou u vzorů promptování?"
+> - "Jak XML tagy v promptech pomáhají strukturovat odpověď AI?"
+> - "Kdy použít sebereflexivní vzory versus přímé instrukce?"
-**Vysoká ochota (hluboké a důkladné)** - Pro složité problémy, kde chcete komplexní analýzu. Model důkladně zkoumá a ukazuje podrobné odůvodnění. Použijte to pro návrh systému, architektonická rozhodnutí nebo složitý výzkum.
+**Vysoká ochota (hluboké a důkladné)** - Pro složité problémy, kde chcete komplexní analýzu. Model zkoumá důkladně a ukazuje podrobné uvažování. Použijte pro návrhy systémů, architektonická rozhodnutí nebo složitý výzkum.
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**Provedení úkolu (postupný pokrok)** - Pro vícekrokové pracovní postupy. Model předem poskytne plán, narraci každého kroku během práce a nakonec shrnutí. Použijte to pro migrace, implementace nebo jakýkoli vícekrokový proces.
+**Provedení úkolu (postup krok za krokem)** - Pro vícestupňové pracovní postupy. Model poskytne úvodní plán, průběžně vysvětluje každý krok a pak dá shrnutí. Použijte pro migrace, implementace nebo jakýkoliv vícestupňový proces.
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Řetězcové prompting explicitně žádá model, aby ukázal proces svého odůvodnění, což zlepšuje přesnost u složitých úkolů. Postupné rozklady pomáhají lidem i AI pochopit logiku.
+Chain-of-Thought promptování explicitně žádá model, aby ukázal svůj uvažovací proces, což zvyšuje přesnost u složitých úloh. Postupné rozebrání pomáhá lidem i AI chápat logiku.
> **🤖 Vyzkoušejte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Zeptejte se na tento vzor:
-> - „Jak bych přizpůsobil vzor provedení úkolu pro dlouhotrvající operace?“
-> - „Jaké jsou nejlepší postupy pro strukturování úvodních nástrojů v produkčních aplikacích?“
-> - „Jak mohu zachytit a zobrazit průběžné aktualizace pokroku v UI?“
+> - "Jak bych přizpůsobil vzor provedení úkolu pro dlouhodobé operace?"
+> - "Jaké jsou nejlepší praktiky pro strukturování tool preambulí v produkčních aplikacích?"
+> - "Jak zachytit a zobrazit průběžné aktualizace průběhu v uživatelském rozhraní?"
-Diagram níže ilustruje tento pracovní postup Plán → Provedení → Shrnutí.
+Níže je diagram, který ilustruje tento pracovní postup Plán → Provedení → Shrnutí.
-*Pracovní postup Plán → Provedení → Shrnutí pro vícekrokové úkoly*
+*Pracovní postup Plán → Provedení → Shrnutí pro vícestupňové úkoly*
-**Sebereflexivní kód** - Pro generování produkčního kódu. Model generuje kód podle produkčních standardů s patřičnou obsluhou chyb. Používejte to při budování nových funkcí nebo služeb.
+**Sebereflexivní kód** - Pro generování kódu kvality pro produkci. Model generuje kód podle produkčních standardů s řádným ošetřením chyb. Použijte při budování nových funkcí nebo služeb.
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Diagram níže ukazuje tento iterativní cyklus vylepšování — generování, hodnocení, identifikace slabých míst a zdokonalování, dokud kód neodpovídá produkčním standardům.
+Níže je diagram této iterativní smyčky zdokonalování — generuj, vyhodnoť, identifikuj slabiny a zdokonaluj, dokud kód nesplní produkční požadavky.
-*Iterativní smyčka zlepšování - generuj, hodnot, identifikuj problémy, zlepšuj, opakuj*
+*Iterativní smyčka zdokonalování - generuj, vyhodnoť, identifikuj problémy, zlepšuj, opakuj*
-**Strukturovaná analýza** - Pro konzistentní hodnocení. Model kontroluje kód pomocí pevného rámce (správnost, postupy, výkon, bezpečnost, udržovatelnost). Použijte to pro kontroly kódu nebo hodnocení kvality.
+**Strukturovaná analýza** - Pro konzistentní hodnocení. Model přezkoumá kód podle pevného rámce (správnost, praktiky, výkon, bezpečnost, udržovatelnost). Použijte při revizích kódu nebo hodnocení kvality.
```java
String prompt = """
@@ -355,17 +355,17 @@ String response = chatModel.chat(prompt);
```
> **🤖 Vyzkoušejte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Zeptejte se na strukturovanou analýzu:
-> - „Jak mohu přizpůsobit rámec analýzy pro různé typy kontrol kódu?“
-> - „Jak nejlépe zpracovat a programově reagovat na strukturovaný výstup?“
-> - „Jak zajistím konzistentní úrovně závažnosti v různých recenzních sezeních?“
+> - "Jak přizpůsobit rámec analýzy pro různé typy revizí kódu?"
+> - "Jak nejlépe zpracovat a programově reagovat na strukturovaný výstup?"
+> - "Jak zajistit konzistentní úrovně závažnosti napříč různými revizními sezeními?"
-Následující diagram ukazuje, jak tento strukturovaný rámec organizuje kontrolu kódu do konzistentních kategorií s úrovněmi závažnosti.
+Následující diagram ukazuje, jak tento strukturovaný rámec organizuje revizi kódu do konzistentních kategorií se závažnostmi.
-*Rámec pro konzistentní kontroly kódu s úrovněmi závažnosti*
+*Rámec pro konzistentní revize kódu se závažnostmi*
-**Vícekolová konverzace** - Pro konverzace, které vyžadují kontext. Model si pamatuje předchozí zprávy a staví na nich. Použijte to pro interaktivní pomoc nebo komplexní otázky a odpovědi.
+**Vícekolová konverzace** - Pro konverzace, které potřebují kontext. Model si pamatuje předchozí zprávy a staví na nich. Použijte pro interaktivní podpůrné relace nebo složité otázky a odpovědi.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-Diagram níže vizualizuje, jak se konverzační kontext hromadí s každým kolem a jak souvisí s limitem tokenů modelu.
+Níže vizualizace ukazuje, jak se konverzační kontext hromadí s každým kolem a jak to souvisí s limitem tokenů modelu.
-*Jak se konverzační kontext hromadí přes více kol až do dosažení limitu tokenů*
-**Krok za krokem zdůvodnění** – Pro problémy vyžadující viditelnou logiku. Model ukazuje explicitní zdůvodnění pro každý krok. Použijte to pro matematické problémy, logické hádanky nebo když potřebujete pochopit myšlenkový proces.
+*Jak se konverzační kontext hromadí během více kol až do dosažení limitu tokenů*
+
+**Krok za krokem uvažování** - Pro problémy vyžadující viditelnou logiku. Model zobrazuje explicitní uvažování pro každý krok. Použijte pro matematické problémy, logické hádanky nebo kdy potřebujete pochopit myšlenkový proces.
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Níže uvedený diagram ilustruje, jak model rozděluje problémy na explicitní, číslované logické kroky.
-
-
+Níže je diagram, který ilustruje, jak model rozděluje problémy na explicitní, číslované logické kroky.
+
*Rozklad problémů na explicitní logické kroky*
-**Omezený výstup** – Pro odpovědi s konkrétními požadavky na formát. Model přísně dodržuje pravidla formátu a délky. Použijte to pro shrnutí nebo pokud potřebujete přesnou strukturu výstupu.
+**Omezený výstup** - Pro odpovědi s konkrétními požadavky na formát. Model přesně dodržuje pravidla formátu a délky. Použijte to pro souhrny nebo když potřebujete přesnou strukturu výstupu.
```java
String prompt = """
@@ -420,17 +420,17 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Následující diagram ukazuje, jak omezení vedou model k tomu, aby produkoval výstup, který striktně dodržuje vaše požadavky na formát a délku.
+Následující diagram ukazuje, jak omezení vedou model k produkci výstupu, který přesně vyhovuje vašim požadavkům na formát a délku.
-
+
-*Prosazování konkrétních požadavků na formát, délku a strukturu*
+*Vynucení specifických požadavků na formát, délku a strukturu*
## Spuštění aplikace
**Ověření nasazení:**
-Ujistěte se, že soubor `.env` existuje v kořenovém adresáři s přihlašovacími údaji Azure (vytvořen během modulu 01). Spusťte to z adresáře modulu (`02-prompt-engineering/`):
+Ujistěte se, že soubor `.env` existuje v kořenovém adresáři a obsahuje Azure přihlašovací údaje (vytvořené během modulu 01). Spusťte to z adresáře modulu (`02-prompt-engineering/`):
**Bash:**
```bash
@@ -444,31 +444,31 @@ Get-Content ..\.env # Mělo by zobrazovat AZURE_OPENAI_ENDPOINT, API_KEY, DEPLO
**Spuštění aplikace:**
-> **Poznámka:** Pokud jste již spustili všechny aplikace pomocí `./start-all.sh` z kořenového adresáře (jak je popsáno v modulu 01), tento modul už běží na portu 8083. Můžete přeskočit příkazy pro spuštění níže a jít přímo na http://localhost:8083.
+> **Poznámka:** Pokud jste již spustili všechny aplikace pomocí `./start-all.sh` z kořenového adresáře (jak je popsáno v modulu 01), tento modul již běží na portu 8083. Můžete tedy přeskočit níže uvedené spouštěcí příkazy a přejít přímo na http://localhost:8083.
**Možnost 1: Použití Spring Boot Dashboard (doporučeno pro uživatele VS Code)**
-Vývojové prostředí obsahuje rozšíření Spring Boot Dashboard, které poskytuje vizuální rozhraní pro správu všech Spring Boot aplikací. Najdete ho v Activity Bar na levé straně VS Code (hledejte ikonu Spring Boot).
+Vývojový kontejner obsahuje rozšíření Spring Boot Dashboard, které poskytuje vizuální rozhraní pro správu všech Spring Boot aplikací. Najdete ho v panelu aktivit vlevo ve VS Code (hledejte ikonu Spring Boot).
-Z Spring Boot Dashboard můžete:
-- Vidět všechny dostupné Spring Boot aplikace v pracovním prostoru
-- Spustit/zastavit aplikace jedním kliknutím
-- Zobrazit logy aplikací v reálném čase
+Ze Spring Boot Dashboard můžete:
+- Vidět všechny dostupné Spring Boot aplikace v pracovní ploše
+- Jedním kliknutím spustit/zastavit aplikace
+- Sledovat logy aplikace v reálném čase
- Monitorovat stav aplikace
-Jednoduše klikněte na tlačítko přehrávání vedle "prompt-engineering" pro spuštění tohoto modulu, nebo spusťte všechny moduly najednou.
+Jednoduše klikněte na tlačítko „play“ vedle „prompt-engineering“ pro spuštění tohoto modulu, nebo spusťte všechny moduly současně.
-*Spring Boot Dashboard ve VS Code — spouštění, zastavování a monitorování všech modulů z jednoho místa*
+*Spring Boot Dashboard ve VS Code — spuštění, zastavení a sledování všech modulů na jednom místě*
**Možnost 2: Použití shell skriptů**
-Spusťte všechny webové aplikace (moduly 01-04):
+Spusťte všechny webové aplikace (moduly 01–04):
**Bash:**
```bash
-cd .. # Ze základního adresáře
+cd .. # Z kořenového adresáře
./start-all.sh
```
@@ -492,9 +492,9 @@ cd 02-prompt-engineering
.\start.ps1
```
-Oba skripty automaticky načtou proměnné prostředí z kořenového souboru `.env` a sestaví JARy, pokud neexistují.
+Oba skripty automaticky načítají proměnné prostředí ze souboru `.env` v kořenovém adresáři a postaví JARy, pokud neexistují.
-> **Poznámka:** Pokud chcete před spuštěním ručně sestavit všechny moduly:
+> **Poznámka:** Pokud dáváte přednost manuálnímu sestavení všech modulů před spuštěním:
>
> **Bash:**
> ```bash
@@ -508,7 +508,7 @@ Oba skripty automaticky načtou proměnné prostředí z kořenového souboru `.
> mvn clean package -DskipTests
> ```
-Otevřete v prohlížeči http://localhost:8083.
+Otevřete http://localhost:8083 ve svém prohlížeči.
**Pro zastavení:**
@@ -526,83 +526,83 @@ cd .. && ./stop-all.sh # Všechny moduly
cd ..; .\stop-all.ps1 # Všechny moduly
```
-## Snímky obrazovek aplikace
+## Snímky aplikace
-Zde je hlavní rozhraní modulu prompt engineering, kde můžete experimentovat se všemi osmi vzory vedle sebe.
+Zde je hlavní rozhraní modulu pro prompt engineering, kde můžete experimentovat se všemi osmi vzory vedle sebe.
-
+
-*Hlavní panel zobrazující všech 8 vzorů prompt engineeringu s jejich charakteristikami a případy použití*
+*Hlavní panel zobrazuje všech 8 vzorů prompt engineeringu s jejich charakteristikami a použitím*
## Prozkoumání vzorů
-Webové rozhraní umožňuje experimentovat s různými strategiemi promptování. Každý vzor řeší jiné problémy – vyzkoušejte je a uvidíte, kdy který přístup vyniká.
+Webové rozhraní umožňuje experimentovat s různými strategiemi zadávání. Každý vzor řeší jiné problémy – vyzkoušejte je a zjistěte, kdy který přístup exceluje.
-> **Poznámka: Streamování vs Nestreamování** — Každá stránka vzoru nabízí dvě tlačítka: **🔴 Stream Response (živě)** a možnost **Nestreamování**. Streamování používá Server-Sent Events (SSE) k zobrazování tokenů v reálném čase, jak je model generuje, takže okamžitě vidíte pokrok. Nestreamová volba čeká na celou odpověď, než ji zobrazí. U promptů, které spouštějí hluboké zdůvodňování (např. High Eagerness, Self-Reflecting Code), může volání bez streamování trvat velmi dlouho – někdy minuty – bez viditelné zpětné vazby. **Při experimentování s komplexními promptami používejte streamování**, abyste viděli model pracovat a vyhnuli se dojmu, že požadavek časově vypršel.
+> **Poznámka: Streamování vs Nestreamování** — Každá stránka vzoru nabízí dvě tlačítka: **🔴 Stream Response (Live)** a možnost **Nestreamování**. Streamování používá Server-Sent Events (SSE), aby zobrazilo tokeny v reálném čase, jak je model generuje, takže okamžitě vidíte postup. Nestreamovaná volba čeká na celou odpověď, než ji zobrazí. U promptů, které vyvolávají hluboké uvažování (např. High Eagerness, Self-Reflecting Code), může nestreamované volání trvat velmi dlouho – někdy minuty – bez viditelné zpětné vazby. **Při experimentování s komplexními prompty používejte streamování**, abyste viděli, jak model pracuje, a předešli dojmu, že požadavek vypršel.
>
-> **Poznámka: Požadavek na prohlížeč** — Streamovací funkce používá Fetch Streams API (`response.body.getReader()`), které vyžaduje plnohodnotný prohlížeč (Chrome, Edge, Firefox, Safari). NEfunguje ve vestavěném Simple Browseru VS Code, protože jeho webview nepodporuje ReadableStream API. Pokud používáte Simple Browser, tlačítka pro nestreamování budou fungovat normálně — problém se týká pouze streamovacích tlačítek. Pro plný zážitek otevřete `http://localhost:8083` v externím prohlížeči.
+> **Poznámka: Požadavky na prohlížeč** — Funkce streamování používá Fetch Streams API (`response.body.getReader()`), které vyžaduje plnohodnotný prohlížeč (Chrome, Edge, Firefox, Safari). Nepracuje v integrovaném Simple Browseru VS Code, protože jeho webview nepodporuje API ReadableStream. Pokud používáte Simple Browser, nestreamovaná tlačítka fungují normálně – pouze streamovaná tlačítka jsou ovlivněna. Pro plný zážitek otevřete `http://localhost:8083` v externím prohlížeči.
-### Nízká vs Vysoká zaujatost
+### Nízká vs vysoká ochota
-Zeptejte se jednoduchou otázku jako „Co je 15 % ze 200?“ pomocí Nízké zaujatosti. Dostanete okamžitou, přímou odpověď. Nyní se zeptejte na něco složitého jako „Navrhni caching strategii pro API s vysokým provozem“ pomocí Vysoké zaujatosti. Klikněte na **🔴 Stream Response (živě)** a sledujte detailní zdůvodnění modelu token po tokenu. Stejný model, stejná struktura otázky – ale prompt mu říká, kolik přemýšlení má věnovat.
+Zeptejte se jednoduché otázky jako „Co je 15 % ze 200?“ s nízkou ochotou. Dostanete okamžitou, přímočaře danou odpověď. Teď položte něco složitého, například „Navrhni caching strategii pro vysoce zatížené API“ s vysokou ochotou. Klikněte na **🔴 Stream Response (Live)** a sledujte, jak se modelovo podrobné uvažování objevuje token po tokenu. Stejný model, stejná struktura otázky – ale prompt mu říká, kolik má přemýšlet.
-### Provádění úkolů (úvodní nástroje)
+### Vykonávání úkolu (preambuly nástrojů)
-Vícekrokové pracovní postupy těží z předběžného plánování a komentáře průběhu. Model popisuje, co udělá, komentuje každý krok a poté shrnuje výsledky.
+Vícekrokové pracovní postupy těží z předběžného plánování a popisu průběhu. Model popíše, co udělá, komentuje každý krok a nakonec shrne výsledky.
-### Sebereflexivní kód
+### Sebereflektující kód
-Zkuste „Vytvoř službu validace e-mailu“. Místo toho, aby model jen vygeneroval kód a zastavil se, generuje, hodnotí podle kritérií kvality, identifikuje slabá místa a vylepšuje. Uvidíte, jak kód opakovaně upravuje, dokud nevyhoví produkčním standardům.
+Vyzkoušejte „Vytvoř službu pro validaci e-mailů“. Místo toho, aby jen vytvořil kód a skončil, model generuje, hodnotí vůči kvalitativním kritériím, identifikuje slabiny a zlepšuje ho. Uvidíte ho iterovat, dokud kód nesplní produkční standardy.
### Strukturovaná analýza
-Revize kódu potřebují konzistentní hodnotící rámce. Model analyzuje kód podle pevných kategorií (správnost, postupy, výkon, bezpečnost) s úrovněmi závažnosti.
+Kontroly kódu vyžadují konzistentní hodnoticí rámce. Model analyzuje kód podle pevně daných kategorií (správnost, postupy, výkon, bezpečnost) s úrovněmi závažnosti.
-### Vícekolový chat
+### Vícekrokový rozhovor
-Zeptejte se „Co je Spring Boot?“ a hned pak pokračujte s „Ukaž mi příklad“. Model si pamatuje vaši první otázku a dává vám konkrétní příklad Spring Bootu. Bez paměti by druhá otázka byla moc vágní.
+Zeptejte se „Co je Spring Boot?“ a hned potom „Ukaž mi příklad“. Model si pamatuje první otázku a poskytne vám konkrétní příklad spring bootu. Bez paměti by druhá otázka byla příliš vágní.
-### Krok za krokem zdůvodnění
+### Krok za krokem uvažování
-Vyberte matematický problém a vyzkoušejte jej s Krok za krokem zdůvodněním i Nízkou zaujatostí. Nízká zaujatost jen dá odpověď – rychle, ale neprůhledně. Krok za krokem vám ukáže každý výpočet a rozhodnutí.
+Vyberte si matematický problém a vyzkoušejte ho s krokovým uvažováním i s nízkou ochotou. Nízká ochota vám dá jen odpověď – rychle, ale nejasně. Krok za krokem ukazuje každý výpočet a rozhodnutí.
### Omezený výstup
-Když potřebujete konkrétní formáty nebo počet slov, tento vzor striktně dodržuje pravidla. Vyzkoušejte generovat shrnutí s přesně 100 slovy v odrážkách.
+Když potřebujete specifické formáty nebo délku textu, tento vzor vynucuje přísné dodržení. Zkuste vytvořit souhrn přesně o 100 slovech v bodech.
-## Co se opravdu učíte
+## Co se skutečně učíte
-**Úsilí o zdůvodnění mění vše**
+**Úsilí o uvažování mění všechno**
-GPT-5.2 vám umožňuje ovládat výpočetní úsilí přes vaše prompty. Nízké úsilí znamená rychlé odpovědi s minimálním průzkumem. Vysoké úsilí znamená, že model věnuje čas hlubokému přemýšlení. Učíte se přizpůsobovat úsilí složitosti úkolu – neztrácejte čas na jednoduché otázky, ale nespěchejte ani u složitých rozhodnutí.
+GPT-5.2 vám umožňuje ovládat výpočetní úsilí skrze vaše prompty. Nízké úsilí znamená rychlé odpovědi s minimálním zkoumáním. Vysoké úsilí znamená, že model si dává načas a hluboce přemýšlí. Učíte se přizpůsobovat úsilí složitosti úkolu – neztrácejte čas s jednoduchými otázkami, ale ani nespěchejte u složitých rozhodnutí.
**Struktura vede chování**
-Všimli jste si XML značek v promptech? Nejsou dekorativní. Modely spolehlivěji sledují strukturované instrukce než volný text. Když potřebujete vícekrokové procesy nebo složitou logiku, struktura pomáhá modelu sledovat, kde je a co přijde dál. Níže uvedený diagram rozkládá dobře strukturovaný prompt a ukazuje, jak značky jako ``, ``, ``, ``, a `` organizují vaše instrukce do jasných sekcí.
+Všimli jste si XML tagů v prompty? Nejsou jen dekorativní. Modely spolehlivěji dodržují strukturované instrukce než volný text. Když potřebujete vícekrokové procesy nebo složitou logiku, struktura pomáhá modelu sledovat, kde je a co přijde dál. Níže uvedený diagram rozebírá dobře strukturovaný prompt a ukazuje, jak tagy jako ``, ``, ``, `` a `` organizují vaše pokyny do přehledných sekcí.
-
+
*Anatomie dobře strukturovaného promptu s jasnými sekcemi a organizací ve stylu XML*
-**Kvalita díky sebehodnocení**
+**Kvalita prostřednictvím sebehodnocení**
-Sebereflexivní vzory fungují tak, že dělají kritéria kvality explicitní. Místo toho, aby se model jen doufal, že „to udělá správně“, přesně mu říkáte, co znamená „správně“: správná logika, ošetření chyb, výkon, bezpečnost. Model pak může vyhodnotit svůj vlastní výstup a zlepšit se. To proměňuje generování kódu z loterie na proces.
+Sebereflektující vzory fungují tak, že zpřesňují kritéria kvality. Místo doufání, že model „to udělá správně“, mu přesně říkáte, co znamená „správně“: správná logika, ošetření chyb, výkon, bezpečnost. Model pak může vlastní výstup vyhodnotit a vylepšit. To proměňuje generování kódu z loterie na proces.
**Kontext je omezený**
-Vícekolové konverzace fungují tak, že každému požadavku se přidává historie zpráv. Ale existuje limit – každý model má maximální počet tokenů. Jak konverzace roste, budete potřebovat strategie, jak udržet relevantní kontext, aniž byste překročili tento limit. Tento modul vám ukazuje, jak paměť funguje; později se naučíte, kdy shrnovat, kdy zapomenout a kdy vyhledávat.
+Vícekolové konverzace fungují tak, že ke každému požadavku přikládají historii zpráv. Ale je tu limit – každý model má maximální počet tokenů. Jak konverzace roste, budete potřebovat strategie, jak udržet relevantní kontext, aniž byste ho překročili. Tento modul vám ukáže, jak paměť funguje; později se naučíte, kdy shrnovat, kdy zapomínat a kdy znovu získávat.
## Další kroky
-**Další modul:** [03-rag - RAG (Generování s rozšířením o vyhledávání)](../03-rag/README.md)
+**Další modul:** [03-rag - RAG (Retrieval-Augmented Generation)](../03-rag/README.md)
---
-**Navigace:** [← Předchozí: Modul 01 - Úvod](../01-introduction/README.md) | [Zpět na hlavní stránku](../README.md) | [Další: Modul 03 - RAG →](../03-rag/README.md)
+**Navigace:** [← Předchozí: Modul 01 - Úvod](../01-introduction/README.md) | [Zpět na hlavní](../README.md) | [Další: Modul 03 - RAG →](../03-rag/README.md)
---
-**Prohlášení o omezení odpovědnosti**:
-Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje využít profesionální lidský překlad. Nejsme odpovědní za žádná nedorozumění nebo mylné výklady vyplývající z použití tohoto překladu.
+**Prohlášení o omezení odpovědnosti**:
+Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o co největší přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo nesprávné interpretace vzniklé použitím tohoto překladu.
\ No newline at end of file
diff --git a/translations/cs/03-rag/README.md b/translations/cs/03-rag/README.md
index 324d54598..327cd0626 100644
--- a/translations/cs/03-rag/README.md
+++ b/translations/cs/03-rag/README.md
@@ -1,30 +1,30 @@
-# Modul 03: RAG (Generování rozšířené vyhledáváním)
+# Modul 03: RAG (Generování s využitím vyhledávání informací)
## Obsah
-- [Video průvodce](../../../03-rag)
-- [Co se naučíte](../../../03-rag)
-- [Předpoklady](../../../03-rag)
-- [Porozumění RAG](../../../03-rag)
- - [Který přístup RAG tento tutoriál používá?](../../../03-rag)
-- [Jak to funguje](../../../03-rag)
- - [Zpracování dokumentu](../../../03-rag)
- - [Vytváření embeddingů](../../../03-rag)
- - [Sémantické vyhledávání](../../../03-rag)
- - [Generování odpovědí](../../../03-rag)
-- [Spuštění aplikace](../../../03-rag)
-- [Používání aplikace](../../../03-rag)
- - [Nahrání dokumentu](../../../03-rag)
- - [Pokládání otázek](../../../03-rag)
- - [Kontrola zdrojových odkazů](../../../03-rag)
- - [Experimentování s otázkami](../../../03-rag)
-- [Klíčové koncepty](../../../03-rag)
- - [Strategie dělení na části](../../../03-rag)
- - [Skóre podobnosti](../../../03-rag)
- - [Ukládání v paměti](../../../03-rag)
- - [Správa okna kontextu](../../../03-rag)
-- [Kdy je RAG důležitý](../../../03-rag)
-- [Další kroky](../../../03-rag)
+- [Video průvodce](#video-průvodce)
+- [Co se naučíte](#co-se-naučíte)
+- [Požadavky](#požadavky)
+- [Pochopení RAG](#pochopení-rag)
+ - [Který přístup RAG tento tutoriál používá?](#který-přístup-rag-tento-tutoriál-používá)
+- [Jak to funguje](#jak-to-funguje)
+ - [Zpracování dokumentu](#zpracování-dokumentu)
+ - [Vytváření embeddingů](#vytváření-embeddingů)
+ - [Sémantické vyhledávání](#sémantické-vyhledávání)
+ - [Generování odpovědi](#generování-odpovědí)
+- [Spuštění aplikace](#spuštění-aplikace)
+- [Používání aplikace](#použití-aplikace)
+ - [Nahrání dokumentu](#nahrání-dokumentu)
+ - [Pokládání otázek](#pokládejte-otázky)
+ - [Kontrola zdrojových referencí](#kontrola-zdrojových-odkazů)
+ - [Experimentování s otázkami](#experimentujte-s-otázkami)
+- [Klíčové koncepty](#klíčové-pojmy)
+ - [Strategie dělení na části](#strategie-rozdělení-na-části)
+ - [Skóre podobnosti](#skóre-podobnosti)
+ - [Ukládání v paměti](#paměťové-uložení)
+ - [Správa kontextového okna](#správa-kontextového-okna)
+- [Kdy je RAG důležité](#kdy-má-rag-smysl)
+- [Další kroky](#další-kroky)
## Video průvodce
@@ -34,111 +34,110 @@ Sledujte tuto živou relaci, která vysvětluje, jak začít s tímto modulem:
## Co se naučíte
-V předchozích modulech jste se naučili, jak vést konverzace s AI a efektivně strukturovat své dotazy. Ale existuje zásadní omezení: jazykové modely vědí pouze to, co se naučily během tréninku. Nemohou odpovídat na otázky týkající se politik vaší firmy, dokumentace vašeho projektu nebo jakýchkoli informací, na kterých nebyly trénovány.
+V předchozích modulech jste se naučili, jak vést rozhovory s AI a efektivně strukturovat vaše výzvy (prompty). Existuje však základní omezení: jazykové modely znají jen to, co se naučily během tréninku. Nemohou odpovídat na otázky týkající se politiky vaší společnosti, dokumentace vašich projektů ani jakýchkoli informací, na kterých nebyly trénovány.
-RAG (Generování rozšířené vyhledáváním) tento problém řeší. Místo toho, abyste se model snažili naučit vaše informace (což je nákladné a nepraktické), dáte mu možnost vyhledávat ve vašich dokumentech. Když někdo položí otázku, systém najde relevantní informace a zahrne je do dotazu. Model pak na základě tohoto kontextu odpoví.
+RAG (Generování s využitím vyhledávání informací) tento problém řeší. Místo toho, aby model učil vaše informace (což je nákladné a nepraktické), dáváte mu možnost prohledávat vaše dokumenty. Když někdo položí otázku, systém najde relevantní informace a zahrne je do výzvy. Model pak odpovídá na základě tohoto získaného kontextu.
Představte si RAG jako poskytnutí referenční knihovny modelu. Když položíte otázku, systém:
-1. **Dotaz uživatele** – Vy položíte otázku
-2. **Embedding** – Převod otázky do vektoru
-3. **Vektorové vyhledávání** – Nalezení podobných částí dokumentu
-4. **Sestavení kontextu** – Přidání relevantních částí do dotazu
-5. **Odpověď** – LLM vygeneruje odpověď na základě kontextu
+1. **Uživatelský dotaz** – Položíte otázku
+2. **Embedding** – Převádí vaši otázku na vektor
+3. **Vektorové hledání** – Najde podobné části dokumentů
+4. **Sestavení kontextu** – Přidá relevantní části do výzvy
+5. **Odpověď** – LLM generuje odpověď na základě kontextu
-Tím se modelovy odpovědi opírají o vaše skutečná data namísto spolehání se na znalosti z tréninku nebo vymýšlení odpovědí.
+Tímto způsobem jsou odpovědi modelu ukotvené ve vašich skutečných datech, místo aby se spoléhal pouze na znalosti ze svého tréninku nebo vymýšlel odpovědi.
-## Předpoklady
+## Požadavky
-- Dokončený [Modul 00 - Rychlý start](../00-quick-start/README.md) (pro příklad Easy RAG zmíněný později v tomto modulu)
-- Dokončený [Modul 01 - Úvod](../01-introduction/README.md) (nasazeny zdroje Azure OpenAI včetně embeddingového modelu `text-embedding-3-small`)
-- `.env` soubor v kořenovém adresáři s Azure přihlašovacími údaji (vytvořený příkazem `azd up` v Modulu 01)
+- Dokončený [Modul 01 - Úvod](../01-introduction/README.md) (nasazené Azure OpenAI zdroje, včetně modelu embeddingu `text-embedding-3-small`)
+- `.env` soubor v kořenovém adresáři s Azure přihlašovacími údaji (vytvořený příkazem `azd up` v modulu 01)
-> **Poznámka:** Pokud jste neabsolvovali Modul 01, nejdříve postupujte podle tamních instrukcí nasazení. Příkaz `azd up` nasadí jak GPT chat model, tak embedding model používaný tímto modulem.
+> **Poznámka:** Pokud jste modul 01 nedokončili, nejprve postupujte podle jeho instalačních pokynů. Příkaz `azd up` nasazuje jak GPT chatovací model, tak embeddingový model, který tento modul používá.
-## Porozumění RAG
+## Pochopení RAG
-Níže uvedený diagram ilustruje hlavní koncept: místo spoléhání se pouze na tréninková data modelu dává RAG modelu referenční knihovnu vašich dokumentů, které si může před generováním odpovědi konzultovat.
+Následující diagram ilustruje základní koncept: místo spoléhání se pouze na tréninková data modelu dává RAG modelu referenční knihovnu vašich dokumentů, které konzultuje před tím, než vygeneruje každou odpověď.
-*Tento diagram ukazuje rozdíl mezi standardním LLM (který odhaduje na základě tréninkových dat) a LLM rozšířeným o RAG (který se nejprve konzultuje s vašimi dokumenty).*
+*Tento diagram ukazuje rozdíl mezi standardním LLM (který tipuje podle tréninkových dat) a RAG vylepšeným LLM (který předem konzultuje vaše dokumenty).*
-Zde je zakončení celého propojení. Uživatelská otázka prochází čtyřmi fázemi — embeddingem, vektorovým vyhledáváním, sestavením kontextu a generováním odpovědi — přičemž každá staví na předchozí:
+Takto jsou jednotlivé části propojeny koncový na konec. Uživatelská otázka prochází čtyřmi fázemi — embedding, vektorové hledání, sestavení kontextu a generování odpovědi — přičemž každá staví na předchozí:
-*Tento diagram zobrazuje end-to-end pipeline RAG — uživatelský dotaz prochází embeddingem, vektorovým vyhledáváním, sestavováním kontextu a generováním odpovědi.*
+*Tento diagram ukazuje koncový RAG pipeline — uživatelský dotaz prochází embeddingem, vektorovým hledáním, sestavením kontextu a generováním odpovědi.*
-Zbytek tohoto modulu detailně prochází každou fázi s kódem, který můžete spustit a upravovat.
+Zbytek tohoto modulu podrobně popisuje každou fázi s kódem, který můžete spustit a upravit.
### Který přístup RAG tento tutoriál používá?
-LangChain4j nabízí tři způsoby implementace RAG, každý s jinou úrovní abstrakce. Diagram níže je porovnává vedle sebe:
+LangChain4j nabízí tři způsoby implementace RAG, každý s jinou úrovní abstrakce. Následující diagram je porovnává vedle sebe:
-*Tento diagram porovnává tři LangChain4j RAG přístupy — Easy, Native a Advanced — ukazující jejich klíčové komponenty a kdy který použít.*
+*Tento diagram porovnává tři LangChain4j přístupy RAG — Easy, Native a Advanced — ukazující jejich klíčové komponenty a kdy který použít.*
| Přístup | Co dělá | Kompromis |
|---|---|---|
-| **Easy RAG** | Automaticky propojí vše přes `AiServices` a `ContentRetriever`. Anotujete rozhraní, připojíte retriever a LangChain4j za scénou řeší embedding, vyhledávání a sestavování promptu. | Minimální kód, ale nevidíte co se děje v jednotlivých krocích. |
-| **Native RAG** | Voláte embedding model, vyhledáváte ve skladu, sestavujete prompt a generujete odpověď sami — krok po kroku explicitně. | Více kódu, ale každá fáze je viditelná a upravitelná. |
-| **Advanced RAG** | Používá framework `RetrievalAugmentor` s připojitelnými transformátory dotazů, směrovači, přeskupovači a injektory obsahu pro produkční pipeline. | Maximální flexibilita, ale výrazně větší složitost. |
+| **Easy RAG** | Automaticky propojuje vše přes `AiServices` a `ContentRetriever`. Anotujete rozhraní, připojíte retriever a LangChain4j za scénou řeší embedding, hledání a sestavení výzvy. | Minimální kód, ale nevidíte, co se děje v každém kroku. |
+| **Native RAG** | Zavoláte embedding model, hledáte ve skladu, sestavíte výzvu a sami vygenerujete odpověď – krok po kroku explicitně. | Více kódu, ale každá fáze je viditelná a upravitelná. |
+| **Advanced RAG** | Používá framework `RetrievalAugmentor` s pluggables pro transformery dotazů, routery, přeřazovače a injektory obsahu pro produkční pipeline. | Maximální flexibilita, ale podstatně větší složitost. |
-**Tento tutoriál používá Native přístup.** Každý krok pipeline RAG — embedding dotazu, vyhledávání vektorů, sestavení kontextu a generování odpovědi — je explicitně napsán v [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Toto je záměrné: jako učební materiál je důležitější, aby jste každou fázi viděli a pochopili, než aby byl kód minimalizován. Jakmile budete rozumět jak jednotlivé díly zapadají do sebe, můžete přejít na Easy RAG pro rychlé prototypy nebo Advanced RAG pro produkční systémy.
+**Tento tutoriál používá Native přístup.** Každý krok RAG pipeline — embedování dotazu, vyhledávání ve vektorovém skladu, sestavení kontextu a generování odpovědi — je explicitně napsán v [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Toto je záměrné: jako výukový materiál je důležitější, abyste viděli a rozuměli každé fázi, než aby byl kód zkrácený. Jakmile pochopíte, jak jsou části propojeny, můžete přejít na Easy RAG pro rychlé prototypy nebo Advanced RAG pro produkční systémy.
-> **💡 Už jste viděli Easy RAG v akci?** Modul [Rychlý start](../00-quick-start/README.md) obsahuje příklad Dokument Q&A ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)), který používá Easy RAG — LangChain4j automaticky řeší embedding, vyhledávání a sestavování promptu. Tento modul jde o krok dál a rozebírá tu pipeline tak, aby jste mohli každou fázi vidět a ovládat sami.
+> **💡 Zajímá vás Easy RAG?** LangChain4j také nabízí *Easy RAG* přístup, kde `AiServices` a `ContentRetriever` automaticky řeší embedding, vyhledávání a sestavení výzvy. Tento modul jde explicitnější cestou – rozbírá tu pipeline, abyste mohli vidět a řídit každou fázi.
-Diagram níže ukazuje Easy RAG pipeline z tohoto příkladu Rychlého startu. Všimněte si, jak `AiServices` a `EmbeddingStoreContentRetriever` skrývají veškerou složitost — načtete dokument, připojíte retriever a získáte odpovědi. Native přístup v tomto modulu tyto skryté kroky otevírá:
+Níže vidíte Easy RAG pipeline. Všimněte si, jak `AiServices` a `EmbeddingStoreContentRetriever` skrývají veškerou složitost — načtete dokument, připojíte retriever a dostanete odpovědi. Native přístup v tomto modulu rozbírá tyto skryté kroky:
-
+
-*Tento diagram ukazuje Easy RAG pipeline z `SimpleReaderDemo.java`. Porovnejte to s Native přístupem použitým v tomto modulu: Easy RAG skrývá embedding, vyhledávání a sestavování promptu za `AiServices` a `ContentRetriever` — načtete dokument, připojíte retriever a dostanete odpovědi. Native přístup v tomto modulu tu pipeline otevírá, takže si sami voláte každou fázi (embed, search, assemble context, generate) a máte plnou kontrolu.*
+*Tento diagram ukazuje Easy RAG pipeline. Porovnejte s Native přístupem v tomto modulu: Easy RAG skrývá embedding, vyhledávání a sestavení výzvy za `AiServices` a `ContentRetriever` — načtete dokument, připojíte retriever a získáte odpovědi. Native přístup tento pipeline rozbírá, takže vy voláte každý krok (embed, hledání, sestavení kontextu, generování) sami, což vám dává plnou viditelnost a kontrolu.*
## Jak to funguje
-Pipeline RAG v tomto modulu se dělí na čtyři fáze, které běží v pořadí při každé uživatelově otázce. Nejprve je nahraný dokument **parsován a rozdělen na kousky** vhodné velikosti. Tyto kousky jsou pak převedeny na **vektorové embeddingy** a uloženy tak, aby je bylo možné matematicky porovnávat. Když přijde dotaz, systém provede **sémantické vyhledávání**, aby našel nejrelevantnější kousky, a nakonec je použije jako kontext pro LLM při **generování odpovědi**. Níže jsou jednotlivé fáze podrobně popsány s kódem a diagramy. Začneme prvním krokem.
+RAG pipeline v tomto modulu se skládá ze čtyř fází, které běží v pořadí pokaždé, když uživatel položí otázku. Nejprve je nahraný dokument **parsován a rozdělen na části** o rozumné velikosti. Tyto části se pak převedou na **vektorové embeddingy** a uloží tak, aby je bylo možné matematicky porovnávat. Když přijde dotaz, systém provede **sémantické vyhledávání** nejrelevantnějších částí a nakonec je předá jako kontext LLM pro **generování odpovědi**. Níže uvedené sekce popisují každou fázi s konkrétním kódem a diagramy. Pojďme se podívat na první krok.
### Zpracování dokumentu
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-Když nahrajete dokument, systém ho parsuje (PDF nebo prostý text), připojí metadata jako název souboru a pak ho rozlomí na kousky — menší části, které pohodlně pasují do kontextového okna modelu. Tyto kousky se mírně překrývají, aby nedošlo ke ztrátě kontextu na hranicích.
+Když nahrajete dokument, systém jej parsuje (PDF nebo prostý text), přidá metadata jako název souboru a pak jej rozbije na části — menší segmenty, které pohodlně pasují do kontextového okna modelu. Tyto části se mírně překrývají, aby se neztratil kontext na hranicích.
```java
// Analyzujte nahraný soubor a zabalte jej do dokumentu LangChain4j
Document document = Document.from(content, metadata);
-// Rozdělte na úseky o 300 tokenech s překrytím 30 tokenů
+// Rozdělte na části po 300 tokenech s přesahem 30 tokenů
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
-Níže uvedený diagram ukazuje, jak to vizuálně funguje. Všimněte si, že každý kousek sdílí několik tokenů se sousedy — překrytí 30 tokenů zajišťuje, že žádný důležitý kontext nepropadne mezi díly:
+Níže uvedený diagram ukazuje, jak to vizuálně funguje. Každá část sdílí některé tokeny se sousedy — překrytí 30 tokeny zajišťuje, že žádný důležitý kontext nezmizí mezi částmi:
-*Tento diagram ukazuje dokument rozdělený na 300-tokenové části s 30-tokenovým překrytím, zachovávající kontext na hranicích částí.*
+*Tento diagram ukazuje dokument rozdělený na části o 300 tokenech s překrytím 30 tokenů, čímž se uchovává kontext na hranicích částí.*
-> **🤖 Zkuste s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otevřete [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) a zeptejte se:
-> - "Jak LangChain4j dělí dokumenty do částí a proč je překrytí důležité?"
+> **🤖 Vyzkoušejte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otevřete [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) a zeptejte se:
+> - "Jak LangChain4j dělí dokumenty na části a proč je překrývání důležité?"
> - "Jaká je optimální velikost části pro různé typy dokumentů a proč?"
-> - "Jak řešit dokumenty ve vícejazyčných verzích nebo se speciálním formátováním?"
+> - "Jak zacházet s dokumenty v několika jazycích nebo se speciálním formátováním?"
### Vytváření embeddingů
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-Každý kousek se převede na číselnou reprezentaci zvanou embedding — v podstatě převod významu na čísla. Embeddingový model není „inteligentní“ jako chat model; nemůže následovat instrukce, uvažovat ani odpovídat na otázky. Co ale dělá, je namapovat text do matematického prostoru, kde podobné významy jsou blízko sebe — „auto“ poblíž „automobil“, „politika vrácení peněz“ poblíž „vrátit peníze“. Představte si chat model jako člověka, se kterým můžete mluvit; embedding model je ultra dobrý souborový systém.
+Každá část se převede na číselnou reprezentaci nazývanou embedding — v podstatě převod významu na čísla. Embeddingový model není „inteligentní“ jako chatovací model; nedokáže plnit instrukce, uvažovat ani odpovídat na otázky. Co umí, je namapovat text do matematického prostoru, kde podobné významy leží blízko sebe — „auto“ blízko „automobil“, „vrácení peněz“ blízko „návrat mého dluhu“. Můžeme tedy chatovací model přirovnat k člověku, se kterým mluvíte, zatímco embeddingový model je velmi dobrý třídicí systém.
-Diagram níže vizualizuje tento koncept — text jde dovnitř, číselné vektory vycházejí ven a podobné významy produkují blízké vektory:
+Následující diagram vizualizuje tento koncept — text vstupuje, vycházejí číselné vektory, a podobné významy vedou k sousedním vektorům:
-*Tento diagram ukazuje, jak embeddingový model převádí text na číselné vektory, přičemž podobné významy — jako „auto“ a „automobil“ — jsou blízko sebe ve vektorovém prostoru.*
+*Tento diagram ukazuje, jak embeddingový model převádí text na číselné vektory, umisťující podobné významy — jako „auto“ a „automobil“ — blízko sebe ve vektorovém prostoru.*
```java
@Bean
@@ -154,29 +153,29 @@ EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-Třídní diagram níže ukazuje dva samostatné toky pipeline RAG a třídy LangChain4j, které je implementují. **Ingestion tok** (běží jednou při nahrání) rozděluje dokument, embeduje kousky a ukládá je přes `.addAll()`. **Query tok** (běží při každé otázce) embeduje otázku, vyhledává ve skladu přes `.search()` a předává odpovídající kontext chat modelu. Oba toky se spojují přes sdílené rozhraní `EmbeddingStore`:
+Níže uvedený diagram tříd ukazuje dva samostatné toky v RAG pipeline a třídy LangChain4j, které je implementují. **Tok importu** (běží jednou při nahrání) rozděluje dokument, embeduje části a ukládá je pomocí `.addAll()`. **Tok dotazu** (běží při každé otázce uživatele) embeduje otázku, hledá ve skladu přes `.search()` a předává odpovídající kontext chatovacímu modelu. Oba toky se setkávají na sdíleném rozhraní `EmbeddingStore`:
-
+
-*Tento diagram ukazuje dva toky v pipeline RAG — ingestion a query — a jak se propojují přes sdílený EmbeddingStore.*
+*Tento diagram ukazuje dva toky v RAG pipeline — import a dotaz — a jak se propojují přes sdílený EmbeddingStore.*
-Jakmile jsou embeddingy uloženy, podobný obsah se přirozeně sdružuje ve vektorovém prostoru. Vizualizace níže ukazuje, jak dokumenty o příbuzných tématech skončí jako sousední body, což umožňuje sémantické vyhledávání:
+Jakmile jsou embeddingy uloženy, podobný obsah se přirozeně shlukuje ve vektorovém prostoru. Vizualizace níže ukazuje, jak související dokumenty končí jako blízké body, což umožňuje sémantické vyhledávání:
-
+
-*Vizualizace ukazuje, jak se příbuzné dokumenty sdružují v 3D vektorovém prostoru, s tématy jako Technická dokumentace, Obchodní pravidla a FAQ tvořící oddělené skupiny.*
+*Tato vizualizace ukazuje, jak se související dokumenty shlukují ve 3D vektorovém prostoru, přičemž témata jako technická dokumentace, obchodní pravidla a FAQ tvoří samostatné skupiny.*
-Když uživatel vyhledává, systém následuje čtyři kroky: jednou embeduje dokumenty, při každém vyhledávání embeduje dotaz, porovnává vektor dotazu se všemi uloženými vektory pomocí kosinové podobnosti a vrací top-K nejlépe hodnocených částí. Diagram níže ukazuje každý krok a třídy LangChain4j zapojené do procesu:
+Při vyhledávání systém následuje čtyři kroky: embeduje dokumenty jednou, embeduje dotaz při každém hledání, porovnává vektor dotazu se všemi uloženými vektory pomocí kosinové podobnosti a vrací top-K nejvýše hodnocené části. Níže uvedený diagram prochází každý krok a příslušné třídy LangChain4j:
-
+
-*Tento diagram ukazuje čtyřkrokový proces vyhledávání embeddingů: embedování dokumentů, embedování dotazu, porovnávání vektorů pomocí kosinové podobnosti a vracení top-K výsledků.*
+*Tento diagram ukazuje čtyřkrokový proces vyhledávání embeddingu: embedování dokumentů, embedování dotazu, porovnávání vektorů kosinovou podobností a vrácení top-K výsledků.*
### Sémantické vyhledávání
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Když položíte otázku, vaše otázka se také převede do embeddingu. Systém porovná embedding vaší otázky se všemi embeddingy částí dokumentu. Najde části s nejpodobnějšími významy — nejen shoda klíčových slov, ale skutečná sémantická podobnost.
+Když položíte otázku, také se z ní vytvoří embedding. Systém pak porovná embedding vaší otázky se všemi embeddingy částí dokumentů. Najde části s nejpodobnějším významem - nejen s odpovídajícími klíčovými slovy, ale skutečnou sémantickou podobností.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -196,27 +195,27 @@ for (EmbeddingMatch match : matches) {
}
```
-Diagram níže porovnává sémantické vyhledávání s tradičním vyhledáváním podle klíčových slov. Vyhledávání podle klíčového slova „vehicle“ minulo část „cars and trucks“, ale sémantické vyhledávání chápe, že to znamená totéž, a vrátí ji jako vysoce hodnocenou shodu:
+Níže uvedený diagram porovnává sémantické vyhledávání s tradičním hledáním podle klíčových slov. Hledání podle klíčového slova „vozidlo“ může přeskočit část o „auty a náklaďáky“, ale sémantické vyhledávání chápe, že to znamená to samé, a vrátí ji jako vysoké skórující shodu:
-*Tento diagram porovnává vyhledávání založené na klíčových slovech se sémantickým vyhledáváním, ukazující, jak sémantické vyhledávání získává konceptuálně související obsah i když se přesná klíčová slova liší.*
-Pod kapotou je podobnost měřena pomocí kosinové podobnosti — v podstatě se ptáme „ukazují tyto dvě šipky stejným směrem?“ Dva textové úseky mohou používat zcela odlišná slova, ale pokud znamenají totéž, jejich vektory ukazují stejným směrem a skórují blízko 1.0:
+*Tento diagram porovnává vyhledávání na základě klíčových slov a sémantické vyhledávání, ukazující, jak sémantické vyhledávání vrací konceptuálně související obsah i tehdy, když se přesná klíčová slova liší.*
-
+Pod kapotou se podobnost měří pomocí kosinové podobnosti — v podstatě se ptáme „ukazují tyto dva šipky stejným směrem?“ Dvě části mohou mít zcela odlišná slova, ale pokud významově souhlasí, jejich vektory ukazují stejným směrem a skórují blízko 1,0:
-*Tento diagram ilustruje kosinovou podobnost jako úhel mezi embeddingovými vektory — více zarovnané vektory dosahují skóre blížícího se 1.0, což znamená vyšší sémantickou podobnost.*
+
+*Tento diagram ilustruje kosinovou podobnost jako úhel mezi vektorovými vloženími — více zarovnané vektory dosahují skóre blíže k 1,0, což značí vyšší sémantickou podobnost.*
> **🤖 Vyzkoušejte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otevřete [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) a zeptejte se:
-> - „Jak funguje vyhledávání podobnosti s embeddingy a co určuje skóre?“
-> - „Jaký práh podobnosti bych měl použít a jak to ovlivňuje výsledky?“
-> - „Jak řešit situace, kdy nejsou nalezeny žádné relevantní dokumenty?“
+> - "Jak funguje vyhledávání podobnosti s vloženími a co určuje skóre?"
+> - "Jaký práh podobnosti bych měl použít a jak ovlivňuje výsledky?"
+> - "Jak zacházet s případy, kdy nejsou nalezeny žádné relevantní dokumenty?"
### Generování odpovědí
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Nejrelevantnější úseky jsou sestaveny do strukturovaného promptu, který obsahuje explicitní instrukce, získaný kontext a otázku uživatele. Model čte tyto konkrétní úseky a odpovídá na základě těchto informací — může použít pouze to, co má před sebou, což zabraňuje halucinacím.
+Nejrelevantnější části jsou sestaveny do strukturované výzvy, která obsahuje explicitní instrukce, získaný kontext a uživatelovu otázku. Model čte právě tyto konkrétní části a odpovídá na základě těchto informací — může použít pouze to, co má před sebou, což zabraňuje halucinacím.
```java
String context = matches.stream()
@@ -237,17 +236,17 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-Následující diagram ukazuje tuto sestavu v akci — nejlépe hodnocené úseky z vyhledávací fáze jsou vloženy do šablony promptu a `OpenAiOfficialChatModel` generuje podloženou odpověď:
+Níže uvedený diagram ukazuje tento proces sestavení — části s nejvyšším skóre z kroku vyhledávání jsou vloženy do šablony výzvy a `OpenAiOfficialChatModel` generuje podloženou odpověď:
-
+
-*Tento diagram ukazuje, jak jsou nejlépe hodnocené úseky sestaveny do strukturovaného promptu, což umožňuje modelu generovat podloženou odpověď z vašich dat.*
+*Tento diagram ukazuje, jak jsou části s nejvyšším skóre sestaveny do strukturované výzvy, což umožňuje modelu generovat podloženou odpověď z vašich dat.*
## Spuštění aplikace
**Ověření nasazení:**
-Ujistěte se, že v kořenovém adresáři existuje soubor `.env` s přihlašovacími údaji Azure (vytvořeno během Modulu 01). Spusťte tento příkaz z adresáře modulu (`03-rag/`):
+Ujistěte se, že soubor `.env` existuje v kořenovém adresáři s přihlašovacími údaji Azure (vytvořeno během modulu 01). Spusťte to z adresáře modulu (`03-rag/`):
**Bash:**
```bash
@@ -259,25 +258,25 @@ cat ../.env # Mělo by zobrazit AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
Get-Content ..\.env # Mělo by zobrazit AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**Spuštění aplikace:**
+**Spusťte aplikaci:**
-> **Poznámka:** Pokud jste již spustili všechny aplikace pomocí `./start-all.sh` z kořenového adresáře (jak je popsáno v Modulu 01), tento modul už běží na portu 8081. Můžete přeskočit níže uvedené příkazy a rovnou přejít na http://localhost:8081.
+> **Poznámka:** Pokud jste již spustili všechny aplikace pomocí `./start-all.sh` z kořenového adresáře (jak je popsáno v modulu 01), tento modul už běží na portu 8081. Můžete přeskočit níže uvedené příkazy pro spuštění a jít přímo na http://localhost:8081.
**Možnost 1: Použití Spring Boot Dashboard (doporučeno pro uživatele VS Code)**
-Vývojové prostředí obsahuje rozšíření Spring Boot Dashboard, které poskytuje vizuální rozhraní pro správu všech Spring Boot aplikací. Najdete ho na panelu aktivit vlevo ve VS Code (vyhledejte ikonu Spring Boot).
+Vývojářský kontejner obsahuje rozšíření Spring Boot Dashboard, které poskytuje vizuální rozhraní pro správu všech aplikací Spring Boot. Najdete jej v postranním panelu vlevo ve VS Code (hledejte ikonu Spring Boot).
Ze Spring Boot Dashboard můžete:
-- Vidět všechny dostupné Spring Boot aplikace v pracovním prostoru
-- Spouštět/zastavovat aplikace jedním kliknutím
-- Zobrazovat protokoly aplikace v reálném čase
-- Monitorovat stav aplikace
+- Vidět všechny dostupné aplikace Spring Boot v pracovním prostoru
+- Spouštět/ukončovat aplikace jedním kliknutím
+- Zobrazovat logy aplikací v reálném čase
+- Monitorovat stav aplikací
-Stačí kliknout na tlačítko play vedle „rag“ pro spuštění tohoto modulu, nebo spustit všechny moduly najednou.
+Jednoduše klikněte na tlačítko spuštění vedle "rag" pro spuštění tohoto modulu, nebo spusťte všechny moduly najednou.
-*Tento screenshot zobrazuje Spring Boot Dashboard ve VS Code, kde můžete vizuálně spouštět, zastavovat a sledovat aplikace.*
+*Tento snímek obrazovky ukazuje Spring Boot Dashboard ve VS Code, kde můžete vizuálně spouštět, zastavovat a sledovat aplikace.*
**Možnost 2: Použití shell skriptů**
@@ -291,11 +290,11 @@ cd .. # Z kořenového adresáře
**PowerShell:**
```powershell
-cd .. # Ze základního adresáře
+cd .. # Z kořenového adresáře
.\start-all.ps1
```
-Nebo spusťte pouze tento modul:
+Nebo spusťte jen tento modul:
**Bash:**
```bash
@@ -309,16 +308,16 @@ cd 03-rag
.\start.ps1
```
-Oba skripty automaticky načtou proměnné prostředí ze souboru `.env` v kořenovém adresáři a postaví JAR soubory, pokud neexistují.
+Oba skripty automaticky načítají proměnné prostředí z kořenového souboru `.env` a sestaví JARy, pokud ještě neexistují.
-> **Poznámka:** Pokud chcete před spuštěním stavět všechny moduly ručně:
+> **Poznámka:** Pokud preferujete sestavení všech modulů ručně před spuštěním:
>
> **Bash:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
->
+
> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
@@ -331,7 +330,7 @@ Otevřete v prohlížeči http://localhost:8081.
**Bash:**
```bash
-./stop.sh # Pouze tento modul
+./stop.sh # Tento modul pouze
# Nebo
cd .. && ./stop-all.sh # Všechny moduly
```
@@ -345,81 +344,81 @@ cd ..; .\stop-all.ps1 # Všechny moduly
## Použití aplikace
-Aplikace nabízí webové rozhraní pro nahrávání dokumentů a kladení otázek.
+Aplikace poskytuje webové rozhraní pro nahrávání dokumentů a kladení otázek.
-
+
-*Tento screenshot ukazuje rozhraní RAG aplikace, kde můžete nahrávat dokumenty a klást otázky.*
+*Tento snímek obrazovky ukazuje rozhraní aplikace RAG, kde nahráváte dokumenty a kladete otázky.*
### Nahrání dokumentu
-Začněte nahráním dokumentu — nejlépe fungují TXT soubory pro testování. V tomto adresáři je k dispozici `sample-document.txt`, který obsahuje informace o funkcích LangChain4j, implementaci RAG a osvědčených postupech — ideální pro testování systému.
+Začněte nahráním dokumentu - pro testování nejlépe fungují soubory TXT. V tomto adresáři je k dispozici `sample-document.txt`, který obsahuje informace o funkcích LangChain4j, implementaci RAG a osvědčené postupy — ideální pro testování systému.
-Systém váš dokument zpracuje, rozdělí na úseky a pro každý úsek vytvoří embeddingy. To probíhá automaticky při nahrání.
+Systém váš dokument zpracuje, rozlomí na části a vytvoří vložení pro každou část. To se děje automaticky při nahrání.
### Pokládejte otázky
-Teď se můžete zeptat na konkrétní otázky týkající se obsahu dokumentu. Zkuste něco faktického, co je jasně uvedeno v dokumentu. Systém vyhledá relevantní úseky, zahrne je do promptu a vygeneruje odpověď.
+Nyní položte konkrétní otázky týkající se obsahu dokumentu. Zkuste něco faktického, co je v dokumentu jasně uvedeno. Systém vyhledá relevantní části, zahrne je do výzvy a vygeneruje odpověď.
### Kontrola zdrojových odkazů
-Všimněte si, že každá odpověď obsahuje odkazy na zdroje spolu s hodnotami podobnosti. Tyto skóre (od 0 do 1) ukazují, jak relevantní každý úsek byl pro vaši otázku. Vyšší skóre znamená lepší shodu. To vám umožňuje ověřit odpověď oproti zdrojovému materiálu.
+Všimněte si, že každá odpověď obsahuje odkazy na zdroje s hodnotami podobnosti. Tyto hodnoty (0 až 1) ukazují, jak relevantní byla každá část vůči vaší otázce. Vyšší skóre znamená lepší shodu. To vám umožní ověřit odpověď vůči zdrojovému materiálu.
-
+
-*Tento screenshot ukazuje výsledky dotazu s vygenerovanou odpovědí, odkazy na zdroje a skóre relevance každého nalezeného úseku.*
+*Tento snímek obrazovky ukazuje výsledky dotazu s vygenerovanou odpovědí, zdrojovými odkazy a skóre relevance pro každou získanou část.*
### Experimentujte s otázkami
-Vyzkoušejte různé druhy otázek:
-- Konkrétní fakta: „Jaké je hlavní téma?“
-- Porovnání: „Jaký je rozdíl mezi X a Y?“
-- Shrnutí: „Shrňte klíčové body o Z“
+Vyzkoušejte různé typy otázek:
+- Konkrétní fakta: "Jaké je hlavní téma?"
+- Porovnání: "Jaký je rozdíl mezi X a Y?"
+- Shrnutí: "Shrňte klíčové body o Z"
Sledujte, jak se skóre relevance mění podle toho, jak dobře vaše otázka odpovídá obsahu dokumentu.
-## Klíčové koncepty
+## Klíčové pojmy
-### Strategie rozdělení do úseků
+### Strategie rozdělení na části
-Dokumenty jsou rozděleny na úseky o 300 tokenech s překrytím 30 tokenů. Tento kompromis zajišťuje, že každý úsek má dostatek kontextu, aby byl smysluplný, ale zároveň jsou úseky dostatečně malé, aby jich bylo možné do promptu vložit více.
+Dokumenty se rozdělují na části o 300 znacích s překryvem 30 znaků. Tento kompromis zajišťuje, že každá část má dostatek kontextu, aby byla smysluplná, ale zároveň je dostatečně malá, aby se do výzvy vešlo více částí.
### Skóre podobnosti
-Každý nalezený úsek má skóre podobnosti mezi 0 a 1, které ukazuje, jak úzce odpovídá uživatelově otázce. Níže uvedený diagram vizualizuje rozsahy skóre a jak systém tyto hodnoty využívá k filtrování výsledků:
+Každá získaná část má skóre podobnosti mezi 0 a 1, které ukazuje, jak přesně odpovídá uživatelově otázce. Níže uvedený diagram vizualizuje rozsahy skóre a jak systém používá tato skóre k filtrování výsledků:
-
+
-*Tento diagram ukazuje rozsahy skóre od 0 do 1, s minimálním prahem 0,5, který filtruje irelevantní úseky.*
+*Tento diagram ukazuje rozsahy skóre od 0 do 1 s minimálním prahem 0,5, který filtruje nerelevantní části.*
Skóre se pohybují od 0 do 1:
-- 0,7–1,0: Vysoce relevantní, přesná shoda
-- 0,5–0,7: Relevantní, dobrý kontext
-- Pod 0,5: Odfiltrováno, příliš odlišné
+- 0,7-1,0: Vysoce relevantní, přesná shoda
+- 0,5-0,7: Relevantní, dobrý kontext
+- Pod 0,5: Odfiltrováno, příliš rozdílné
-Systém získává pouze úseky nad minimálním prahem, aby zajistil kvalitu.
+Systém získává pouze části nad minimálním prahem, aby zajistil kvalitu.
-Embeddingy fungují dobře, když se význam jasno shlukuje, ale mají své slabiny. Níže uvedený diagram ukazuje běžné způsoby selhání — příliš velké úseky vytvářejí rozmazané vektory, příliš malé úseky postrádají kontext, nejednoznačné termíny směřují do více shluků a přesné vyhledávání (ID, výrobní čísla) s embeddingy vůbec nefunguje:
+Vložení fungují dobře, když se významové shluky vyčistí, ale mají slepá místa. Níže uvedený diagram ukazuje běžné režimy selhání — části, které jsou příliš velké, produkují nejasné vektory, části, které jsou příliš malé, postrádají kontext, nejednoznačné termíny směřují k více shlukům a přesné vyhledávání (ID, čísla dílů) ve vkládáních vůbec nefunguje:
-
+
-*Tento diagram ukazuje běžné způsoby selhání embeddingů: úseky příliš velké, úseky příliš malé, nejednoznačné termíny směřující do více shluků a přesné vyhledávání jako ID.*
+*Tento diagram ukazuje běžné režimy selhání vložení: části příliš velké, části příliš malé, nejednoznačné termíny vedoucí k více shlukům a přesné vyhledávání jako ID.*
-### Uchovávání v paměti
+### Paměťové uložení
-Tento modul používá jednoduché uchovávání v paměti. Po restartu aplikace jsou nahrané dokumenty ztraceny. Produkční systémy používají perzistentní vektorové databáze jako Qdrant nebo Azure AI Search.
+Tento modul používá pro jednoduchost paměťové uložení. Po restartu aplikace se nahrané dokumenty ztratí. Produkční systémy používají perzistentní vektorové databáze jako Qdrant nebo Azure AI Search.
-### Řízení kontextového okna
+### Správa kontextového okna
-Každý model má maximální kontextové okno. Nemůžete zahrnout všechny úseky z velkého dokumentu. Systém získává top N nejrelevantnějších úseků (výchozí hodnota 5), aby se vešel do limitů a zároveň poskytl dostatek kontextu pro přesné odpovědi.
+Každý model má maximální velikost kontextového okna. Nemůžete zahrnout všechny části z velkého dokumentu. Systém získává prvních N nejrelevantnějších částí (ve výchozím nastavení 5), aby zůstal v limitech a zároveň poskytl dostatek kontextu pro přesné odpovědi.
-## Kdy je RAG důležitý
+## Kdy má RAG smysl
-RAG není vždy správný přístup. Následující průvodce rozhodnutím vám pomůže určit, kdy RAG přináší hodnotu a kdy jsou vhodnější jednodušší přístupy — jako je zahrnutí obsahu přímo do promptu nebo spoléhání na vestavěné znalosti modelu:
+RAG není vždy správný přístup. Níže uvedený průvodce rozhodnutím vám pomůže určit, kdy RAG přidává hodnotu a kdy stačí jednodušší přístupy — jako přímé zahrnutí obsahu do výzvy nebo spoléhání na vestavěné znalosti modelu:
-
+
-*Tento diagram ukazuje rozhodovací průvodce, kdy RAG přidává hodnotu a kdy stačí jednodušší přístupy.*
+*Tento diagram ukazuje průvodce rozhodnutím, kdy RAG přidává hodnotu versus kdy postačí jednodušší přístupy.*
## Další kroky
@@ -427,11 +426,11 @@ RAG není vždy správný přístup. Následující průvodce rozhodnutím vám
---
-**Navigace:** [← Předchozí: Modul 02 - Prompt Engineering](../02-prompt-engineering/README.md) | [Zpět na hlavní stránku](../README.md) | [Další: Modul 04 - Nástroje →](../04-tools/README.md)
+**Navigace:** [← Předchozí: Modul 02 - Tvorba výzev](../02-prompt-engineering/README.md) | [Zpět na hlavní stránku](../README.md) | [Další: Modul 04 - Nástroje →](../04-tools/README.md)
---
-**Prohlášení o vyloučení odpovědnosti**:
-Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho mateřském jazyce by měl být považován za závazný zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědni za žádné nedorozumění nebo chybné výklady vzniklé použitím tohoto překladu.
+**Prohlášení o omezení odpovědnosti**:
+Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o co největší přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo nesprávné interpretace vzniklé použitím tohoto překladu.
\ No newline at end of file
diff --git a/translations/cs/04-tools/README.md b/translations/cs/04-tools/README.md
index 98511cf90..0278c1001 100644
--- a/translations/cs/04-tools/README.md
+++ b/translations/cs/04-tools/README.md
@@ -2,75 +2,75 @@
## Obsah
-- [Video průvodce](../../../04-tools)
-- [Co se naučíte](../../../04-tools)
-- [Předpoklady](../../../04-tools)
-- [Porozumění AI agentům s nástroji](../../../04-tools)
-- [Jak funguje volání nástrojů](../../../04-tools)
- - [Definice nástrojů](../../../04-tools)
- - [Rozhodování](../../../04-tools)
- - [Vykonání](../../../04-tools)
- - [Generování odpovědi](../../../04-tools)
- - [Architektura: Spring Boot automatické propojení](../../../04-tools)
-- [Řetězení nástrojů](../../../04-tools)
-- [Spuštění aplikace](../../../04-tools)
-- [Používání aplikace](../../../04-tools)
- - [Vyzkoušejte jednoduché použití nástroje](../../../04-tools)
- - [Testování řetězení nástrojů](../../../04-tools)
- - [Zobrazení průběhu konverzace](../../../04-tools)
- - [Experimentování s různými požadavky](../../../04-tools)
-- [Klíčové koncepty](../../../04-tools)
- - [Vzor ReAct (Reasoning and Acting)](../../../04-tools)
- - [Popisy nástrojů mají význam](../../../04-tools)
- - [Správa relace](../../../04-tools)
- - [Zpracování chyb](../../../04-tools)
-- [Dostupné nástroje](../../../04-tools)
-- [Kdy používat agenty založené na nástrojích](../../../04-tools)
-- [Nástroje vs RAG](../../../04-tools)
-- [Další kroky](../../../04-tools)
+- [Video průvodce](#video-průvodce)
+- [Co se naučíte](#co-se-naučíte)
+- [Předpoklady](#předpoklady)
+- [Pochopení AI agentů s nástroji](#pochopení-ai-agentů-s-nástroji)
+- [Jak funguje volání nástrojů](#jak-funguje-volání-nástrojů)
+ - [Definice nástrojů](#definice-nástrojů)
+ - [Rozhodování](#rozhodování)
+ - [Provedení](#provedení)
+ - [Generování odpovědi](#generování-odpovědi)
+ - [Architektura: Spring Boot Auto-Wiring](#architektura-spring-boot-auto-wiring)
+- [Řetězení nástrojů](#řetězení-nástrojů)
+- [Spuštění aplikace](#spuštění-aplikace)
+- [Používání aplikace](#použití-aplikace)
+ - [Vyzkoušejte jednoduché použití nástroje](#vyzkoušejte-jednoduché-použití-nástroje)
+ - [Testujte řetězení nástrojů](#otestujte-řetězení-nástrojů)
+ - [Sledujte průběh konverzace](#sledujte-tok-konverzace)
+ - [Experimentujte s různými požadavky](#experimentujte-s-různými-požadavky)
+- [Klíčové koncepty](#klíčové-koncepty)
+ - [Vzor ReAct (Reasoning and Acting)](#vzor-react-rozumování-a-jednání)
+ - [Popisy nástrojů jsou důležité](#popisy-nástrojů-jsou-důležité)
+ - [Správa relace](#správa-relací)
+ - [Zpracování chyb](#zpracování-chyb)
+- [Dostupné nástroje](#dostupné-nástroje)
+- [Kdy používat agenty založené na nástrojích](#kdy-používat-agenty-založené-na-nástrojích)
+- [Nástroje vs RAG](#nástroje-vs-rag)
+- [Další kroky](#další-kroky)
## Video průvodce
-Podívejte se na živou relaci, která vysvětluje, jak začít s tímto modulem:
+Sledujte tuto živou relaci, která vysvětluje, jak začít s tímto modulem:
## Co se naučíte
-Dosud jste se naučili, jak vést rozhovory s AI, efektivně strukturovat výzvy a zakládat odpovědi na vašich dokumentech. Přesto existuje základní omezení: jazykové modely umí pouze generovat text. Nemohou zkontrolovat počasí, provádět výpočty, dotazovat se do databází nebo komunikovat s externími systémy.
+Doposud jste se naučili vést konverzace s AI, efektivně strukturovat výzvy a zakládat odpovědi na vašich dokumentech. Přesto existuje základní omezení: jazykové modely mohou generovat pouze text. Nemohou kontrolovat počasí, počítat, dotazovat se do databází ani komunikovat s externími systémy.
-Nástroje to mění. Poskytnutím modelu přístupu k funkcím, které může volat, ho proměníte z generátoru textu na agenta, který může podnikat akce. Model rozhoduje, kdy potřebuje nástroj, který nástroj použít a jaké parametry předat. Váš kód vykoná funkci a vrátí výsledek. Model tento výsledek zakomponuje do své odpovědi.
+Nástroje to mění. Tím, že modelu dáte přístup k funkcím, které může volat, transformujete ho z generátoru textu na agenta, který může konat. Model rozhoduje, kdy potřebuje nástroj, který nástroj použít a jaké parametry předat. Vaše kód provede funkci a vrátí výsledek. Model pak výsledek začlení do své odpovědi.
## Předpoklady
-- Dokončen [Modul 01 - Úvod](../01-introduction/README.md) (nasazené Azure OpenAI zdroje)
-- Doporučeno dokončit předchozí moduly (tento modul odkazuje na [RAG koncepty z Modulu 03](../03-rag/README.md) v porovnání Nástroje vs RAG)
-- `.env` soubor v kořenovém adresáři s Azure přihlašovacími údaji (vytvořeno pomocí `azd up` v Modulu 01)
+- Dokončen [Modul 01 - Úvod](../01-introduction/README.md) (nasazené zdroje Azure OpenAI)
+- Doporučeno dokončit předchozí moduly (tento modul odkazuje na [koncepty RAG z Modulu 03](../03-rag/README.md) v porovnání Nástroje vs RAG)
+- Soubor `.env` v kořenovém adresáři s přihlašovacími údaji Azure (vytvořený pomocí `azd up` v Modulu 01)
-> **Poznámka:** Pokud jste ještě nedokončili Modul 01, nejdříve postupujte podle jeho nasazovacích pokynů.
+> **Poznámka:** Pokud jste nedokončili Modul 01, nejprve postupujte podle instalačních pokynů tam.
-## Porozumění AI agentům s nástroji
+## Pochopení AI agentů s nástroji
-> **📝 Poznámka:** Termín „agenti“ v tomto modulu označuje AI asistenty rozšířené o schopnost volání nástrojů. To se liší od vzorů **Agentic AI** (autonomní agenti s plánováním, pamětí a vícekrokovým uvažováním), které budeme probírat v [Modulu 05: MCP](../05-mcp/README.md).
+> **📝 Poznámka:** Termín „agenti“ v tomto modulu označuje AI asistenty vylepšené schopností volání nástrojů. To se liší od **Agentic AI** vzorů (autonomní agenti s plánováním, pamětí a vícekrokovým odvozováním), které probereme v [Modulu 05: MCP](../05-mcp/README.md).
-Bez nástrojů může jazykový model generovat pouze text založený na svých tréninkových datech. Zeptejte se ho na aktuální počasí a musí odhadovat. Dejte mu nástroje a může zavolat API počasí, provést výpočty nebo dotazovat databázi — a pak tyto skutečné výsledky zapracovat do své odpovědi.
+Bez nástrojů může jazykový model generovat pouze text ze svých tréninkových dat. Zeptáte-li se na aktuální počasí, musí hádat. Když mu dáte nástroje, může volat API počasí, provádět výpočty nebo dotazovat databázi — a tyto skutečné výsledky začlenit do odpovědi.
-
+
-*Bez nástrojů model jen hádá — s nástroji může volat API, provádět výpočty a vracet aktuální data.*
+*Bez nástrojů model jen hádá – s nástroji může volat API, provádět výpočty a vracet aktuální data.*
-AI agent s nástroji používá vzor **Reasoning and Acting (ReAct)**. Model nejen odpovídá — přemýšlí o tom, co potřebuje, jedná voláním nástroje, pozoruje výsledek a pak rozhodne, zda znovu jednat nebo podat konečnou odpověď:
+AI agent s nástroji následuje vzor **Reasoning and Acting (ReAct)**. Model nejen odpovídá — přemýšlí o tom, co potřebuje, jedná voláním nástroje, sleduje výsledek a rozhoduje, zda jednat znovu nebo poskytnout finální odpověď:
-1. **Reason (Přemýšlí)** — Agent analyzuje uživatelskou otázku a určí, jaké informace potřebuje
-2. **Act (Jde k činu)** — Agent vybere správný nástroj, vytvoří správné parametry a zavolá ho
-3. **Observe (Sleduje)** — Agent přijme výstup nástroje a vyhodnotí ho
-4. **Repeat or Respond (Opakuje nebo odpovídá)** — Pokud je potřeba více dat, agent se vrací zpět; jinak vytváří odpověď v přirozeném jazyce
+1. **Rozumí** — agent analyzuje otázku uživatele a určuje, jaké informace potřebuje
+2. **Jedná** — agent vybere správný nástroj, vytvoří správné parametry a zavolá ho
+3. **Sleduje** — agent přijme výstup nástroje a vyhodnotí výsledek
+4. **Opakuje nebo odpoví** — pokud je potřeba více dat, agent se vrátí k prvnímu kroku; jinak sestaví odpověď v přirozeném jazyce
-
+
-*Cyklický ReAct vzor — agent uvažuje, co dělat, jedná voláním nástroje, sleduje výsledek a pokračuje, dokud nemůže podat konečnou odpověď.*
+*Cyklus ReAct — agent přemýšlí, jak jednat, provádí volání nástroje, sleduje výsledek a opakuje, dokud nemůže poskytnout finální odpověď.*
-To se děje automaticky. Definujete nástroje a jejich popisy. Model rozhoduje, kdy a jak je používat.
+Tento proces probíhá automaticky. Definujete nástroje a jejich popisy. Model se postará o rozhodování, kdy a jak je použít.
## Jak funguje volání nástrojů
@@ -78,7 +78,7 @@ To se děje automaticky. Definujete nástroje a jejich popisy. Model rozhoduje,
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-Definujete funkce s jasnými popisy a specifikacemi parametrů. Model vidí tyto popisy ve svém systémovém promptu a chápe, k čemu každý nástroj slouží.
+Definujete funkce s jasnými popisy a specifikacemi parametrů. Model tyto popisy vidí ve svém systémovém promptu a rozumí, k čemu každý nástroj slouží.
```java
@Component
@@ -96,104 +96,104 @@ public interface Assistant {
String chat(@MemoryId String sessionId, @UserMessage String message);
}
-// Asistent je automaticky propojen Spring Bootem s:
+// Asistent je automaticky propojen pomocí Spring Boot s:
// - ChatModel bean
// - Všechny metody @Tool z tříd označených @Component
// - ChatMemoryProvider pro správu relací
```
-Diagram níže rozebírá každou anotaci a ukazuje, jak každý prvek pomáhá AI pochopit, kdy nástroj zavolat a jaké argumenty předat:
+Níže uvedený diagram rozebírá každou anotaci a ukazuje, jak každý prvek pomáhá AI pochopit, kdy nástroj volat a jaké argumenty předat:
-
+
-*Anatomie definice nástroje — @Tool říká AI, kdy jej použít, @P popisuje každý parametr a @AiService vše při startu propojí.*
+*Anatomie definice nástroje — @Tool řekne AI, kdy ho použít, @P popisuje každý parametr a @AiService vše při spuštění propojí.*
> **🤖 Vyzkoušejte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otevřete [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) a zeptejte se:
-> - „Jak bych integroval skutečné API počasí, třeba OpenWeatherMap, místo testovacích dat?“
-> - „Co dělá dobrý popis nástroje, který pomáhá AI správně jej používat?“
-> - „Jak řešit chyby API a limity rychlosti v implementaci nástrojů?“
+> - "Jak bych integroval reálné API počasí jako OpenWeatherMap místo simulovaných dat?"
+> - "Co tvoří dobrý popis nástroje, který pomůže AI použít ho správně?"
+> - "Jak řešit chyby API a limity volání v implementaci nástrojů?"
### Rozhodování
-Když uživatel položí otázku „Jaké je počasí v Seattlu?“, model si náhodně nevybere nástroj. Porovnává uživatelův záměr s popisy všech dostupných nástrojů, každému přiřazuje skóre relevanci a vybere nejlepší shodu. Pak vygeneruje strukturovaný volací příkaz s odpovídajícími parametry — v tomto případě nastaví `location` na `"Seattle"`.
+Když uživatel položí otázku „Jaké je počasí v Seattlu?“, model náhodně nenabízí nástroj. Porovnává uživatelův záměr s popisy všech nástrojů, které má k dispozici, hodnotí každý podle relevance a vybere nejlepší shodu. Poté vygeneruje strukturované volání funkce s odpovídajícími parametry – v tomto případě nastaví `location` na `"Seattle"`.
-Pokud žádný nástroj nesedí na uživatelův požadavek, model odpoví z vlastní znalosti. Pokud sedí více nástrojů, vybere ten nejpřesnější.
+Pokud žádný nástroj neodpovídá požadavku uživatele, model odpovídá ze svých znalostí. Pokud jich odpovídá více, vybere ten nejkonkrétnější.
-
+
-*Model porovnává každý dostupný nástroj s uživatelovým záměrem a vybírá nejlepší shodu — proto je důležité psát jasné a konkrétní popisy nástrojů.*
+*Model hodnotí každý dostupný nástroj vzhledem k záměru uživatele a vybírá nejlepší shodu — proto je důležité psát jasné, konkrétní popisy nástrojů.*
-### Vykonání
+### Provedení
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-Spring Boot automaticky propojí deklarativní rozhraní `@AiService` se všemi registrovanými nástroji a LangChain4j volání nástrojů provádí automaticky. V pozadí probíhá kompletní volání nástroje přes šest fází — od uživatelovy otázky v přirozeném jazyce až zpět k odpovědi v přirozeném jazyce:
+Spring Boot automaticky propojí deklarativní rozhraní `@AiService` se všemi registrovanými nástroji a LangChain4j provádí volání nástrojů automaticky. Za scénou prochází celé volání nástroje šesti fázemi – od uživatelovy otázky v přirozeném jazyce až po odpověď také v přirozeném jazyce:
-
+
-*Celý průběh — uživatel položí otázku, model vybere nástroj, LangChain4j ho vykoná a model začleňuje výsledek do přirozené odpovědi.*
+*Konečný tok — uživatel položí otázku, model vybere nástroj, LangChain4j ho spustí a model výsledek začlení do odpovědi.*
-Pokud jste spustili [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) v Modulu 00, už jste viděli tento vzor v akci — nástroje `Calculator` se volaly stejným způsobem. Následující sekvenční diagram ukazuje přesně, co se během té ukázky dělo pod pokličkou:
+Pod kapotou `AiServices` provádí stejnou smyčku volání nástrojů pro libovolný nástroj — zde znázorněno na jednoduchém `Calculator`. Níže uvedený sekvenční diagram ukazuje přesně, co se děje:
-
+
-*Cyklus volání nástroje z ukázky Quick Start — `AiServices` posílá vaši zprávu a schéma nástroje do LLM, LLM odpoví voláním funkce jako `add(42, 58)`, LangChain4j místně vykoná metodu `Calculator` a vrátí výsledek pro konečnou odpověď.*
+*Smyčka volání nástrojů — `AiServices` posílá vaši zprávu a schémata nástrojů do LLM, LLM odpoví voláním funkce jako `add(42, 58)`, LangChain4j provede metodu `Calculator` lokálně a výsledek vrací zpět pro konečnou odpověď.*
> **🤖 Vyzkoušejte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otevřete [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) a zeptejte se:
-> - „Jak funguje vzor ReAct a proč je efektivní pro AI agenty?“
-> - „Jak agent rozhoduje, který nástroj použít a v jakém pořadí?“
-> - „Co se stane, pokud vykonání nástroje selže - jak řešit chyby robustně?“
+> - "Jak funguje vzor ReAct a proč je efektivní pro AI agenty?"
+> - "Jak agent rozhoduje, který nástroj použít a v jakém pořadí?"
+> - "Co se stane, pokud se provedení nástroje nezdaří – jak robustně řešit chyby?"
### Generování odpovědi
-Model obdrží data o počasí a formátuje je do přirozené jazykové odpovědi uživateli.
+Model obdrží data o počasí a formátuje je do odpovědi v přirozeném jazyce pro uživatele.
-### Architektura: Spring Boot automatické propojení
+### Architektura: Spring Boot Auto-Wiring
-Tento modul používá integraci LangChain4j se Spring Bootem s deklarativními rozhraními `@AiService`. Při startu Spring Boot automaticky najde každý `@Component`, který obsahuje metody s `@Tool`, váš bean `ChatModel` a `ChatMemoryProvider` — a všechny je propojí do jednoho rozhraní `Assistant` bez potřeby boilerplate kódu.
+Tento modul používá integraci LangChain4j se Spring Bootem s deklarativními rozhraními `@AiService`. Při spuštění Spring Boot detekuje všechny `@Component` obsahující metody s `@Tool`, váš `ChatModel` bean a `ChatMemoryProvider` — a pak je všechny propojí do jediného rozhraní `Assistant` bez potřeby boilterplate kódu.
-
+
-*Rozhraní @AiService spojuje ChatModel, komponenty nástrojů a poskytovatele paměti — Spring Boot automaticky zajišťuje jejich propojení.*
+*Rozhraní @AiService spojuje ChatModel, komponenty nástrojů a poskytovatele paměti — Spring Boot vše propojuje automaticky.*
-Zde je celý životní cyklus požadavku jako sekvenční diagram — od HTTP požadavku přes controller, service a automaticky propojený proxy až k vykonání nástroje a zpět:
+Zde je celý životní cyklus požadavku jako sekvenční diagram — od HTTP požadavku přes controller, službu a auto-vázaný proxy až po provedení nástroje a zpět:
-
+
-*Kompletní životní cyklus požadavku Spring Boot — HTTP požadavek prochází přes controller a service k automaticky propojenému proxy `Assistant`, které automaticky zajišťuje orchestraci LLM a volání nástrojů.*
+*Kompletní životní cyklus požadavku ve Spring Bootu — HTTP požadavek prochází přes controller a službu k auto-vázanému proxy Asistenta, který automaticky koordinuje LLM a volání nástrojů.*
Klíčové výhody tohoto přístupu:
-- **Spring Boot automatické propojení** — ChatModel a nástroje automaticky injektovány
-- **Vzor @MemoryId** — Automatická správa paměti založená na relacích
-- **Jediná instance** — Assistant vytvořen jednou a znovu použít pro lepší výkon
-- **Typově bezpečné vykonání** — Java metody volány přímo s konverzí typů
-- **Vícekroková orchestrací** — Automaticky řeší řetězení nástrojů
-- **Nulový boilerplate** — Žádné manuální volání `AiServices.builder()` nebo paměťových HashMap
+- **Spring Boot auto-wiring** — ChatModel a nástroje jsou automaticky vloženy
+- **vzor @MemoryId** — Automatická správa paměti na bázi relace
+- **Jedna instance** — Assistant je vytvořen jednou a opakovaně použit pro lepší výkon
+- **Bezpečné typy** — Metody Javy jsou volány přímo s konverzí typů
+- **Více kroků orchestrace** — Automaticky zvládá řetězení nástrojů
+- **Žádný boilerplate** — Žádné ruční volání `AiServices.builder()` nebo paměťové HashMapy
-Alternativní přístupy (manuální `AiServices.builder()`) vyžadují více kódu a postrádají výhody integrace se Spring Bootem.
+Alternativní přístupy (ruční `AiServices.builder()`) vyžadují více kódu a postrádají výhody integrace se Spring Bootem.
## Řetězení nástrojů
-**Řetězení nástrojů** — Skutečná síla agentů založených na nástrojích se ukazuje, když jedna otázka vyžaduje použití více nástrojů. Zeptejte se na „Jaké je počasí v Seattlu ve Fahrenheitech?“ a agent automaticky řetězí dva nástroje: nejprve zavolá `getCurrentWeather` pro získání teploty ve stupních Celsia, pak tuto hodnotu předá do `celsiusToFahrenheit` pro převod — vše v jediném kole konverzace.
+**Řetězení nástrojů** — Skutečná síla agentů založených na nástrojích se ukáže, když jedna otázka vyžaduje více nástrojů. Zeptejte se „Jaké je počasí v Seattlu ve Fahrenheit?“ a agent automaticky řetězí dva nástroje: nejprve zavolá `getCurrentWeather` pro získání teploty v Celsiích, potom předá tuto hodnotu do `celsiusToFahrenheit` pro převod — to vše v jednom kole konverzace.
-
+
-*Řetězení nástrojů v akci — agent nejdříve zavolá getCurrentWeather, výsledek v Celsiích předá do celsiusToFahrenheit a poskytne kombinovanou odpověď.*
+*Řetězení nástrojů v akci — agent nejprve volá getCurrentWeather, pak předává výsledek ve Celsiích do celsiusToFahrenheit a poskytne kombinovanou odpověď.*
-**Hladké selhání** — Zeptejte se na počasí ve městě, které není v testovacích datech. Nástroj vrátí chybovou zprávu a AI vysvětlí, že nedokáže pomoci, místo aby spadl. Nástroje selhávají bezpečně. Diagram níže ukazuje dva přístupy — při správném zpracování chyb agent chybu zachytí a odpoví nápomocně, zatímco bez něj aplikace spadne:
+**Elegantní selhání** — Zeptejte se na počasí ve městě, které není v simulovaných datech. Nástroj vrátí chybovou zprávu a AI vysvětlí, že nemůže pomoci, místo aby spadl program. Nástroje selhávají bezpečně. Níže uvedený diagram porovnává oba přístupy — s řádnou obsluhou chyb agent chybu zachytí a odpoví nápomocně, bez ní celá aplikace spadne:
-
+
-*Když nástroj selže, agent chybu zachytí a odpoví s užitečným vysvětlením místo pádu.*
+*Když nástroj selže, agent zachytí chybu a odpoví s užitečným vysvětlením místo pádu aplikace.*
-To se děje v rámci jediného kola konverzace. Agent samostatně orchestruje více volání nástrojů.
+To probíhá v jednom kole konverzace. Agent autonomně orchestruje vícenásobná volání nástrojů.
## Spuštění aplikace
**Ověření nasazení:**
-Ujistěte se, že `.env` soubor existuje v kořenovém adresáři s Azure přihlašovacími údaji (vytvořené během Modulu 01). Spusťte z adresáře modulu (`04-tools/`):
+Zkontrolujte, že v kořenovém adresáři existuje soubor `.env` s přihlašovacími údaji Azure (vytvořen během Modulu 01). Spusťte toto z adresáře modulu (`04-tools/`):
**Bash:**
```bash
@@ -205,34 +205,34 @@ cat ../.env # Mělo by zobrazit AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
Get-Content ..\.env # Mělo by zobrazit AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**Spusťte aplikaci:**
+**Spuštění aplikace:**
-> **Poznámka:** Pokud jste již spustili všechny aplikace pomocí `./start-all.sh` z kořenového adresáře (jak popisuje Modul 01), tento modul je již spuštěný na portu 8084. Můžete přeskočit příkazy spuštění níže a přejít přímo na http://localhost:8084.
+> **Poznámka:** Pokud jste už spustili všechny aplikace pomocí `./start-all.sh` z kořenového adresáře (jak je popsáno v Modulu 01), tento modul už běží na portu 8084. Můžete přeskočit příkazy ke spuštění níže a jít přímo na http://localhost:8084.
**Možnost 1: Použití Spring Boot Dashboard (doporučeno pro uživatele VS Code)**
-Vývojový kontejner obsahuje rozšíření Spring Boot Dashboard, které poskytuje vizuální rozhraní pro správu všech Spring Boot aplikací. Najdete ho v liště aktivit na levé straně VS Code (hledáte ikonu Spring Boot).
+Vývojový kontejner obsahuje rozšíření Spring Boot Dashboard, které poskytuje vizuální rozhraní pro správu všech Spring Boot aplikací. Najdete ho v postranním panelu vlevo ve VS Code (ikona Spring Boot).
-V Spring Boot Dashboard můžete:
+Ve Spring Boot Dashboard můžete:
- Vidět všechny dostupné Spring Boot aplikace v pracovním prostoru
-- Spouštět/zastavovat aplikace jedním kliknutím
-- Prohlížet si logy aplikace v reálném čase
-- Monitorovat stav aplikace
-Jednoduše klikněte na tlačítko přehrát vedle "tools" pro spuštění tohoto modulu, nebo spusťte všechny moduly najednou.
+- Spustit/zastavit aplikace jedním kliknutím
+- Zobrazit logy aplikací v reálném čase
+- Monitorovat stav aplikací
-Takto vypadá Spring Boot Dashboard ve VS Code:
+Jednoduše klikněte na tlačítko přehrávání vedle „tools“ pro spuštění tohoto modulu nebo spusťte všechny moduly najednou.
+Takto vypadá Spring Boot Dashboard ve VS Code:
-*Spring Boot Dashboard ve VS Code — spuštění, zastavení a sledování všech modulů z jednoho místa*
+*Spring Boot Dashboard ve VS Code — spuštění, zastavení a monitorování všech modulů na jednom místě*
-**Varianta 2: Použití shell skriptů**
+**Možnost 2: Použití shell skriptů**
Spusťte všechny webové aplikace (moduly 01-04):
**Bash:**
```bash
-cd .. # Ze základního adresáře
+cd .. # Z kořenového adresáře
./start-all.sh
```
@@ -256,9 +256,9 @@ cd 04-tools
.\start.ps1
```
-Oba skripty automaticky načítají proměnné prostředí ze souboru `.env` v kořenovém adresáři a pokud JAR soubory neexistují, vytvoří je.
+Oba skripty automaticky načítají proměnné prostředí z kořenového souboru `.env` a vytvoří JARy, pokud neexistují.
-> **Poznámka:** Pokud chcete všechny moduly nejdříve manuálně sestavit před spuštěním:
+> **Poznámka:** Pokud preferujete ruční sestavení všech modulů před spuštěním:
>
> **Bash:**
> ```bash
@@ -272,7 +272,7 @@ Oba skripty automaticky načítají proměnné prostředí ze souboru `.env` v k
> mvn clean package -DskipTests
> ```
-Otevřete v prohlížeči http://localhost:8084.
+Otevřete http://localhost:8084 ve svém prohlížeči.
**Pro zastavení:**
@@ -292,84 +292,84 @@ cd ..; .\stop-all.ps1 # Všechny moduly
## Použití aplikace
-Aplikace poskytuje webové rozhraní, kde můžete komunikovat s AI agentem, který má přístup k nástrojům pro počasí a převody teplot. Takto vypadá rozhraní — obsahuje rychlé startovací příklady a chatovací panel pro odesílání požadavků:
+Aplikace poskytuje webové rozhraní, kde můžete komunikovat s AI agentem, který má přístup k nástrojům pro počasí a převod teplot. Takto rozhraní vypadá — zahrnuje rychlé příklady a chatovací panel pro odesílání požadavků:
-*Rozhraní AI Agent Tools - rychlé příklady a chat pro interakci s nástroji*
+*Rozhraní AI Agent Tools – rychlé příklady a chatovací rozhraní pro interakci s nástroji*
### Vyzkoušejte jednoduché použití nástroje
-Začněte jednoduchým požadavkem: "Převést 100 stupňů Fahrenheita na Celsia". Agent rozpozná, že potřebuje nástroj pro převod teplot, zavolá ho s potřebnými parametry a vrátí výsledek. Všimněte si, jak to působí přirozeně - nemuseli jste uvádět, který nástroj použít nebo jak ho zavolat.
+Začněte jednoduchým požadavkem: „Převést 100 stupňů Fahrenheita na Celsia“. Agent rozpozná, že potřebuje nástroj pro převod teplot, zavolá ho s správnými parametry a vrátí výsledek. Všimněte si, jak přirozené to působí – neurčili jste, který nástroj použít nebo jak ho vyvolat.
### Otestujte řetězení nástrojů
-Teď zkuste něco složitějšího: "Jaké je počasí v Seattlu a převeď ho na Fahrenheity?" Sledujte, jak agent postupuje krok za krokem. Nejprve zjistí počasí (vrací se v Celsiích), pak pozná, že je potřeba převést na Fahrenheity, zavolá nástroj pro převod a oba výsledky spojí do jedné odpovědi.
+Nyní zkuste složitější požadavek: „Jaké je počasí v Seattlu a převeď to na Fahrenheit?“ Sledujte, jak agent postupuje krok za krokem. Nejprve získá počasí (které vrací v Celsiích), rozpozná potřebu převodu na Fahrenheit, zavolá převodní nástroj a oba výsledky zkombinuje do jedné odpovědi.
### Sledujte tok konverzace
-Chatovací rozhraní uchovává historii konverzací, což umožňuje vícekolové interakce. Vidíte všechny předchozí dotazy a odpovědi, což usnadňuje sledování konverzace a pochopení, jak agent vytváří kontext přes více výměn.
+Chatovací rozhraní uchovává historii konverzace, což umožňuje vícetahové interakce. Můžete vidět všechny předchozí dotazy a odpovědi, což usnadňuje sledování konverzace a pochopení, jak agent buduje kontext během více výměn.
-*Vícekroková konverzace ukazující jednoduché převody, vyhledávání počasí a řetězení nástrojů*
+*Vícetahová konverzace ukazující jednoduché převody, vyhledávání počasí a řetězení nástrojů*
### Experimentujte s různými požadavky
Vyzkoušejte různé kombinace:
-- Vyhledávání počasí: "Jaké je počasí v Tokiu?"
-- Převody teplot: "Kolik je 25 °C v Kelvinech?"
-- Kombinované dotazy: "Zkontroluj počasí v Paříži a řekni mi, jestli je nad 20 °C"
+- Vyhledávání počasí: „Jaké je počasí v Tokiu?“
+- Převody teplot: „Kolik je 25 °C v Kelvinech?“
+- Kombinované dotazy: „Zkontroluj počasí v Paříži a řekni mi, jestli je nad 20 °C“
-Všimněte si, jak agent interpretuje přirozený jazyk a mapuje ho na odpovídající volání nástrojů.
+Všimněte si, jak agent interpretuje přirozený jazyk a mapuje ho na vhodné volání nástrojů.
-## Klíčové pojmy
+## Klíčové koncepty
-### ReAct vzor (Reasoning and Acting)
+### Vzor ReAct (Rozumování a jednání)
-Agent střídá rozvažování (rozhodování, co udělat) a jednání (používání nástrojů). Tento vzor umožňuje autonomní řešení problémů místo pouhého reagování na instrukce.
+Agent střídá fáze rozumování (rozhodování, co dělat) a jednání (použití nástrojů). Tento vzor umožňuje autonomní řešení problémů místo pouhého reagování na pokyny.
### Popisy nástrojů jsou důležité
-Kvalita popisů nástrojů přímo ovlivňuje, jak dobře je agent používá. Jasné a specifické popisy pomáhají modelu pochopit, kdy a jak každý nástroj zavolat.
+Kvalita popisů vašich nástrojů přímo ovlivňuje, jak je agent využívá. Jasné, konkrétní popisy pomáhají modelu pochopit, kdy a jak každý nástroj zavolat.
### Správa relací
-Anotace `@MemoryId` umožňuje automatickou správu paměti na základě relace. Každé ID relace dostane vlastní instanci `ChatMemory`, kterou spravuje bean `ChatMemoryProvider`, takže více uživatelů může interagovat s agentem současně, aniž by se jejich konverzace proplétaly. Následující diagram ukazuje, jak jsou uživatelé směrováni na izolované paměťové úložiště na základě jejich ID relace:
+Anotace `@MemoryId` umožňuje automatickou správu paměti na základě relací. Každé ID relace má vlastní instanci `ChatMemory`, kterou spravuje bean `ChatMemoryProvider`, takže více uživatelů může komunikovat s agentem současně bez prolínání konverzací. Následující diagram ukazuje, jak jsou uživatelé směrováni do izolovaných pamětí podle ID relací:
-*Každé ID relace odpovídá izolované historii konverzace — uživatelé nikdy nevidí zprávy jiných.*
+*Každé ID relace odpovídá izolované historii konverzace — uživatelé nikdy nevidí zprávy ostatních.*
### Zpracování chyb
-Nástroje mohou selhat — API může vypršet časový limit, parametry mohou být neplatné, externí služby mohou vypadnout. Produkční agenti potřebují zpracování chyb, aby model mohl vysvětlit problémy nebo zkusit alternativy místo pádu celé aplikace. Když nástroj vyhodí výjimku, LangChain4j ji zachytí a pošle chybovou zprávu zpět modelu, který pak problém vysvětlí přirozeným jazykem.
+Nástroje mohou selhat — API může vypršet čas, parametry mohou být neplatné, externí služby mohou být nedostupné. Produkční agenti potřebují zpracování chyb, aby model mohl vysvětlit problémy nebo zkusit alternativy namísto zhroucení celé aplikace. Když nástroj vyhodí výjimku, LangChain4j ji zachytí a předá chybovou zprávu zpět modelu, který pak může problém vysvětlit přirozeným jazykem.
## Dostupné nástroje
-Níže uvedený diagram ukazuje široký ekosystém nástrojů, které můžete vytvářet. Tento modul demonstruje nástroje pro počasí a teplotu, ale stejný vzor `@Tool` funguje pro jakoukoliv Java metodu — od databázových dotazů až po zpracování plateb.
+Diagram níže ukazuje široký ekosystém nástrojů, které můžete vytvářet. Tento modul demonstruje nástroje pro počasí a teploty, ale stejný vzor `@Tool` funguje pro jakoukoli metodu v Javě — od databázových dotazů po zpracování plateb.
-*Jakákoliv Java metoda anotovaná `@Tool` je dostupná AI — tento vzor se rozšiřuje na databáze, API, e-maily, operace se soubory a další.*
+*Každá Java metoda anotovaná `@Tool` se stává dostupnou AI — vzor se rozšiřuje na databáze, API, e-maily, souborové operace a další.*
## Kdy používat agenty založené na nástrojích
-Ne každý požadavek potřebuje nástroje. Rozhodnutí závisí na tom, zda AI potřebuje komunikovat s externími systémy, nebo může odpovědět ze svých znalostí. Následující průvodce shrnuje, kdy nástroje přidávají hodnotu a kdy nejsou potřeba:
+Ne každý požadavek vyžaduje nástroje. Rozhodnutí závisí na tom, zda AI potřebuje interagovat s externími systémy, nebo zda může odpovědět ze svých znalostí. Následující průvodce shrnuje, kdy nástroje přidávají hodnotu a kdy jsou zbytečné:
-*Rychlý průvodce rozhodováním — nástroje jsou pro data v reálném čase, výpočty a akce; obecné znalosti a kreativní úkoly je nepotřebují.*
+*Rychlý rozhodovací průvodce — nástroje jsou pro data v reálném čase, výpočty a akce; obecné znalosti a kreativní úkoly je nepotřebují.*
## Nástroje vs RAG
-Moduly 03 a 04 oba rozšiřují, co může AI dělat, ale zásadně odlišnými způsoby. RAG poskytuje modelu přístup ke **znalostem** načítáním dokumentů. Nástroje dávají modelu schopnost provádět **akce** voláním funkcí. Následující diagram porovnává tyto dva přístupy vedle sebe — od toho, jak každý pracovní postup funguje, až po kompromisy mezi nimi:
+Moduly 03 a 04 rozšiřují schopnosti AI, ale zcela odlišnými způsoby. RAG poskytuje modelu přístup ke **znalostem** vyhledáváním dokumentů. Nástroje dávají modelu schopnost podnikat **akce** zavoláním funkcí. Níže je porovnání těchto dvou přístupů vedle sebe — od fungování workflow až po kompromisy mezi nimi:
-*RAG vyhledává informace ve statických dokumentech — nástroje vykonávají akce a získávají dynamická, aktuální data. Mnoho produkčních systémů kombinuje oba.*
+*RAG vyhledává informace ve statických dokumentech — nástroje vykonávají akce a získávají dynamická, aktuální data. Mnoho produkčních systémů kombinuje obojí.*
-V praxi mnoho produkčních systémů kombinuje oba přístupy: RAG pro zakotvení odpovědí ve vaší dokumentaci a Nástroje pro získávání živých dat nebo provádění operací.
+V praxi mnoho produkčních systémů kombinuje oba přístupy: RAG pro zakotvení odpovědí v dokumentaci a nástroje pro získávání živých dat nebo provádění operací.
## Další kroky
@@ -382,6 +382,6 @@ V praxi mnoho produkčních systémů kombinuje oba přístupy: RAG pro zakotven
---
-**Prohlášení o vyloučení odpovědnosti**:
-Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). I když usilujeme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho mateřském jazyce by měl být považován za závazný zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoliv nedorozumění nebo mylné interpretace vzniklé použitím tohoto překladu.
+**Prohlášení o omezení odpovědnosti**:
+Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o co největší přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo nesprávné interpretace vzniklé použitím tohoto překladu.
\ No newline at end of file
diff --git a/translations/cs/README.md b/translations/cs/README.md
index 1a68ae916..0cfa4a6e4 100644
--- a/translations/cs/README.md
+++ b/translations/cs/README.md
@@ -9,11 +9,11 @@ Kurz pro vytváření AI aplikací s LangChain4j a Azure OpenAI GPT-5.2, od zák
#### Podporováno přes GitHub Action (automatizováno a vždy aktuální)
-[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](./README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
+[Arabština](../ar/README.md) | [Bengálština](../bn/README.md) | [Bulharština](../bg/README.md) | [Barmština (Myanmar)](../my/README.md) | [Čínština (zjednodušená)](../zh-CN/README.md) | [Čínština (tradiční, Hong Kong)](../zh-HK/README.md) | [Čínština (tradiční, Macau)](../zh-MO/README.md) | [Čínština (tradiční, Taiwan)](../zh-TW/README.md) | [Chorvatština](../hr/README.md) | [Čeština](./README.md) | [Dánština](../da/README.md) | [Nizozemština](../nl/README.md) | [Estonština](../et/README.md) | [Finština](../fi/README.md) | [Francouzština](../fr/README.md) | [Němčina](../de/README.md) | [Řečtina](../el/README.md) | [Hebrejština](../he/README.md) | [Hindština](../hi/README.md) | [Maďarština](../hu/README.md) | [Indonéština](../id/README.md) | [Italština](../it/README.md) | [ japonština](../ja/README.md) | [Kannadština](../kn/README.md) | [Khmérština](../km/README.md) | [Korejština](../ko/README.md) | [Litevština](../lt/README.md) | [Malajština](../ms/README.md) | [Malayalam](../ml/README.md) | [Maráthština](../mr/README.md) | [Nepálština](../ne/README.md) | [Nigerijská pidžinština](../pcm/README.md) | [Norština](../no/README.md) | [Perština (Farsi)](../fa/README.md) | [Polština](../pl/README.md) | [Portugalština (Brazílie)](../pt-BR/README.md) | [Portugalština (Portugalsko)](../pt-PT/README.md) | [Paňdžábština (Gurmukhí)](../pa/README.md) | [Rumunština](../ro/README.md) | [Ruština](../ru/README.md) | [Srbština (cyrilice)](../sr/README.md) | [Slovenština](../sk/README.md) | [Slovinština](../sl/README.md) | [Španělština](../es/README.md) | [Svahilština](../sw/README.md) | [Švédština](../sv/README.md) | [Tagalog (Filipínština)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugština](../te/README.md) | [Thajština](../th/README.md) | [Turečtina](../tr/README.md) | [Ukrajinština](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamština](../vi/README.md)
-> **Dáváte přednost lokálnímu klonování?**
+> **Raději klonovat lokálně?**
>
-> Tento repozitář obsahuje více než 50 jazykových překladů, což výrazně zvětšuje velikost stahování. Pro klonování bez překladů použijte sparse checkout:
+> Toto úložiště obsahuje více než 50 překladů jazyků, což výrazně zvyšuje velikost stahování. Pokud chcete klonovat bez překladů, použijte sparse checkout:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -34,16 +34,15 @@ Kurz pro vytváření AI aplikací s LangChain4j a Azure OpenAI GPT-5.2, od zák
## Obsah
-1. [Rychlý start](00-quick-start/README.md) - Začínáme s LangChain4j
-2. [Úvod](01-introduction/README.md) - Naučte se základy LangChain4j
-3. [Prompt Engineering](02-prompt-engineering/README.md) - Ovládněte efektivní návrh promptů
-4. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Vytvořte inteligentní znalostní systémy
-5. [Nástroje](04-tools/README.md) - Integrujte externí nástroje a jednoduché asistenty
-6. [MCP (Model Context Protocol)](05-mcp/README.md) - Práce s protokolem Model Context Protocol (MCP) a agentními moduly
+1. [Úvod](01-introduction/README.md) - Naučte se základy LangChain4j
+2. [Prompt Engineering](02-prompt-engineering/README.md) - Ovládněte efektivní návrh promptů
+3. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Vytvářejte inteligentní systémy založené na znalostech
+4. [Nástroje](04-tools/README.md) - Integrace externích nástrojů a jednoduchých asistentů
+5. [MCP (Model Context Protocol)](05-mcp/README.md) - Práce s protokolem Model Context Protocol (MCP) a Agentickými moduly
-### Video návody
+### Video průvodci
-Každý modul má doprovodné živé vysílání, kde krok za krokem probíráme koncepty a kód.
+Každý modul má doprovodnou živou relaci, kde krok za krokem procházíme koncepty a kód.
| Modul | Video |
|--------|-------|
@@ -54,33 +53,33 @@ Každý modul má doprovodné živé vysílání, kde krok za krokem probíráme
---
-## Učební cesta
+## Výuková cesta
-**Jste v LangChain4j nováček?** Podívejte se na [glosář](docs/GLOSSARY.md) pro definice klíčových pojmů a konceptů.
+**Nový v LangChain4j?** Podívejte se na [Glosář](docs/GLOSSARY.md) pro definice klíčových pojmů a konceptů.
> **Rychlý start**
-1. Forkněte tento repozitář na svůj GitHub účet
-2. Klikněte na **Code** → záložka **Codespaces** → **...** → **Nový s možnostmi...**
-3. Použijte výchozí nastavení – tím se vybere vývojové kontejner vytvořený pro tento kurz
-4. Klikněte na **Vytvořit codespace**
+1. Forkněte toto úložiště na svůj GitHub účet
+2. Klikněte na **Code** → záložka **Codespaces** → **...** → **New with options...**
+3. Použijte výchozí nastavení – tím vyberete vývojový kontejner vytvořený pro tento kurz
+4. Klikněte na **Create codespace**
5. Počkejte 5-10 minut na připravení prostředí
-6. Přejděte přímo na [Rychlý start](./00-quick-start/README.md) a začněte!
+6. Přejděte přímo na [Úvod](./01-introduction/README.md) a začněte!
-Po dokončení modulů prozkoumejte [Průvodce testováním](docs/TESTING.md) a uvidíte testovací koncepty LangChain4j v praxi.
+Po dokončení modulů prozkoumejte [Testovací průvodce](docs/TESTING.md) a uvidíte praktické použití testování LangChain4j.
-> **Poznámka:** Tento kurz používá jak GitHub Models, tak Azure OpenAI. Modul [Rychlý start](00-quick-start/README.md) využívá GitHub Models (není potřeba předplatné Azure), zatímco moduly 1-5 používají Azure OpenAI. Pokud ještě nemáte, založte si [ZDARMA Azure účet](https://aka.ms/azure-free-account).
+> **Poznámka:** Toto školení používá Azure OpenAI. Pokud ještě nemáte účet, začněte s [ZDARMA Azure účtem](https://aka.ms/azure-free-account).
-## Učení s GitHub Copilot
+## Výuka s GitHub Copilot
-Pro rychlý start s kódováním otevřete tento projekt v GitHub Codespace nebo ve svém lokálním IDE s poskytnutým devcontainerem. Devcontainer použitý v tomto kurzu je předkonfigurovaný s GitHub Copilot pro AI párové programování.
+Pro rychlý start kódování otevřete tento projekt v GitHub Codespace nebo ve svém lokálním IDE s poskytnutým devcontainerem. Devcontainer použitý v tomto kurzu je předkonfigurován s GitHub Copilot pro AI párové programování.
-Každý příklad kódu obsahuje navrhované otázky, které můžete GitHub Copilot položit pro lepší pochopení. Hledejte výzvy 💡/🤖 v:
+Každý příklad kódu obsahuje navržené otázky, které můžete položit GitHub Copilotovi, abyste prohloubili své znalosti. Hledejte značky 💡/🤖 v:
-- **Hlavičkách Java souborů** – otázky specifické pro každý příklad
-- **README modulů** – průzkumné otázky po příkladech kódu
+- **Hlavičkách Java souborů** - otázky specifické pro každý příklad
+- **README modulů** - průzkumné otázky po příkladech kódu
-**Jak používat:** Otevřete libovolný soubor s kódem a zeptejte se Copilota na navrhované otázky. Má plný kontext kódu a umí vysvětlovat, rozšiřovat a navrhovat alternativy.
+**Jak používat:** Otevřete jakýkoli kódový soubor a zeptejte se Copilota na navržené otázky. Má plný kontext kódu a může vysvětlit, rozšířit a navrhnout alternativy.
Chcete se dozvědět více? Podívejte se na [Copilot pro AI párové programování](https://aka.ms/GitHubCopilotAI).
@@ -88,61 +87,61 @@ Chcete se dozvědět více? Podívejte se na [Copilot pro AI párové programov
### LangChain
-[](https://aka.ms/langchain4j-for-beginners)
-[](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
-[](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin)
+[](https://aka.ms/langchain4j-for-beginners)
+[](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
+[](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin)
---
-### Azure / Edge / MCP / Agents
-[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
+### Azure / Edge / MCP / Agent
+[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
---
-### Série generativní AI
-[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
+### Série Generative AI
+[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
---
-### Základní učení
-[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
+### Core Learning
+[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
-[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
-### Řada Copilot
-[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
+### Série Copilot
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
## Získání pomoci
-Pokud narazíte na problém nebo máte jakékoli otázky ohledně tvorby AI aplikací, přidejte se:
+Pokud se zaseknete nebo máte jakékoliv otázky ohledně vytváření AI aplikací, připojte se:
[](https://aka.ms/foundry/discord)
-Máte-li zpětnou vazbu k produktu nebo chyby při tvorbě, navštivte:
+Pokud máte zpětnou vazbu k produktu nebo narazíte na chyby při vývoji, navštivte:
[](https://aka.ms/foundry/forum)
## Licence
-Licence MIT - Detaily naleznete v souboru [LICENSE](../../LICENSE).
+Licence MIT - Viz soubor [LICENSE](../../LICENSE) pro podrobnosti.
---
-**Disclaimer**:
-Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho rodném jazyce by měl být považován za závazný zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoliv nedorozumění nebo nesprávné výklady vyplývající z použití tohoto překladu.
+**Prohlášení o omezení odpovědnosti**:
+Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o co největší přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo nesprávné interpretace vzniklé použitím tohoto překladu.
\ No newline at end of file
diff --git a/translations/cs/docs/GLOSSARY.md b/translations/cs/docs/GLOSSARY.md
index 5bfb61639..ff45b6b18 100644
--- a/translations/cs/docs/GLOSSARY.md
+++ b/translations/cs/docs/GLOSSARY.md
@@ -1,70 +1,70 @@
-# LangChain4j Slovník pojmů
+# Slovník LangChain4j
## Obsah
-- [Jádrové pojmy](../../../docs)
-- [Komponenty LangChain4j](../../../docs)
-- [AI/ML pojmy](../../../docs)
-- [Ochranné mechanismy](../../../docs)
-- [Řízení příkazů (prompt engineering)](../../../docs)
-- [RAG (Retrieval-Augmented Generation)](../../../docs)
-- [Agenti a nástroje](../../../docs)
-- [Agentický modul](../../../docs)
-- [Model Context Protocol (MCP)](../../../docs)
-- [Azure služby](../../../docs)
-- [Testování a vývoj](../../../docs)
+- [Základní pojmy](#základní-pojmy)
+- [Komponenty LangChain4j](#komponenty-langchain4j)
+- [Koncepty AI/ML](#koncepty-aiml)
+- [Bezpečnostní opatření](#bezpečnostní-opatření)
+- [Tvorba promptů](#prompt-engineering---module-02)
+- [RAG (Retrieval-Augmented Generation)](#rag-retrieval-augmented-generation---module-03)
+- [Agentové a nástroje](#agents-and-tools---module-04)
+- [Agentní modul](#agentic-module---module-05)
+- [Modelový kontextový protokol (MCP)](#model-context-protocol-mcp---module-05)
+- [Azure služby](#azure-services---module-01)
+- [Testování a vývoj](#testing-and-development---testing-guide)
Rychlá reference pojmů a konceptů používaných v celém kurzu.
-## Jádrové pojmy
+## Základní pojmy
-**AI Agent** - Systém používající AI k autonomnímu uvažování a jednání. [Modul 04](../04-tools/README.md)
+**AI Agent** - Systém, který používá AI k autonomnímu uvažování a jednání. [Modul 04](../04-tools/README.md)
-**Řetězec (Chain)** - Sekvence operací, kde výstup je vstupem do dalšího kroku.
+**Chain** - Sekvence operací, kde výstup jde jako vstup do dalšího kroku.
-**Chunking** - Rozdělování dokumentů na menší části. Typicky 300-500 tokenů s překrytím. [Modul 03](../03-rag/README.md)
+**Chunking** - Rozdělování dokumentů na menší části. Typicky: 300-500 tokenů s překryvem. [Modul 03](../03-rag/README.md)
-**Context Window** - Maximální počet tokenů, které model dokáže zpracovat. GPT-5.2: 400K tokenů (až 272K vstup, 128K výstup).
+**Context Window** - Maximální počet tokenů, které model může zpracovat. GPT-5.2: 400 tisíc tokenů (až 272 tisíc vstup, 128 tisíc výstup).
-**Embeddings** - Číselné vektory představující význam textu. [Modul 03](../03-rag/README.md)
+**Embeddings** - Číselné vektory reprezentující význam textu. [Modul 03](../03-rag/README.md)
-**Volání funkce (Function Calling)** - Model generuje strukturované požadavky k vyvolání externích funkcí. [Modul 04](../04-tools/README.md)
+**Function Calling** - Model generuje strukturované požadavky na volání externích funkcí. [Modul 04](../04-tools/README.md)
**Halucinace** - Když modely generují nesprávné, ale věrohodné informace.
**Prompt** - Textový vstup do jazykového modelu. [Modul 02](../02-prompt-engineering/README.md)
-**Sémantické vyhledávání** - Vyhledávání podle významu pomocí embeddings, nikoli klíčových slov. [Modul 03](../03-rag/README.md)
+**Sémantické vyhledávání** - Vyhledávání podle významu pomocí embeddings, ne podle klíčových slov. [Modul 03](../03-rag/README.md)
-**Stavový vs Bezustavový (Stateful vs Stateless)** - Bezustavový: bez paměti. Stavový: uchovává historii konverzace. [Modul 01](../01-introduction/README.md)
+**Stavový vs Bezstavový** - Bezstavový: bez paměti. Stavový: udržuje historii konverzace. [Modul 01](../01-introduction/README.md)
-**Tokeny** - Základní textové jednotky zpracovávané modely. Ovlivňují náklady a limity. [Modul 01](../01-introduction/README.md)
+**Tokeny** - Základní textové jednotky, které modely zpracovávají. Ovlivňují náklady a limity. [Modul 01](../01-introduction/README.md)
-**Řetězení nástrojů (Tool Chaining)** - Sekvenční spouštění nástrojů, kde výstup informuje další volání. [Modul 04](../04-tools/README.md)
+**Tool Chaining** - Sekvenční spouštění nástrojů, kde výstup ovlivňuje další volání. [Modul 04](../04-tools/README.md)
## Komponenty LangChain4j
-**AiServices** - Vytváří typově bezpečné rozhraní AI služeb.
+**AiServices** - Vytváří typově bezpečné AI rozhraní služeb.
-**OpenAiOfficialChatModel** - Jednotný klient pro modely OpenAI a Azure OpenAI.
+**OpenAiOfficialChatModel** - Jednotný klient pro OpenAI a Azure OpenAI modely.
-**OpenAiOfficialEmbeddingModel** - Vytváří embeddings pomocí klienta OpenAI Official (podporuje OpenAI i Azure OpenAI).
+**OpenAiOfficialEmbeddingModel** - Vytváří embeddings pomocí oficiálního klienta OpenAI (podporuje OpenAI i Azure OpenAI).
-**ChatModel** - Jádrové rozhraní pro jazykové modely.
+**ChatModel** - Základní rozhraní pro jazykové modely.
-**ChatMemory** - Uchovává historii konverzace.
+**ChatMemory** - Udržuje historii konverzace.
-**ContentRetriever** - Vyhledává relevantní části dokumentů pro RAG.
+**ContentRetriever** - Vyhledává relevantní kusy dokumentů pro RAG.
-**DocumentSplitter** - Rozděluje dokumenty na kousky.
+**DocumentSplitter** - Rozděluje dokumenty na části.
**EmbeddingModel** - Převádí text na číselné vektory.
**EmbeddingStore** - Ukládá a načítá embeddings.
-**MessageWindowChatMemory** - Uchovává posuvné okno nedávných zpráv.
+**MessageWindowChatMemory** - Udržuje posuvné okno nedávných zpráv.
-**PromptTemplate** - Vytváří znovupoužitelné prompty s `{{variable}}` zástupci.
+**PromptTemplate** - Vytváří znovupoužitelné prompty s `{{variable}}` zástupnými symboly.
**TextSegment** - Textový segment s metadaty. Používá se v RAG.
@@ -72,161 +72,159 @@ Rychlá reference pojmů a konceptů používaných v celém kurzu.
**UserMessage / AiMessage / SystemMessage** - Typy zpráv v konverzaci.
-## AI/ML pojmy
+## Koncepty AI/ML
-**Učení s několika příklady (Few-Shot Learning)** - Zadávání příkladů v promptech. [Modul 02](../02-prompt-engineering/README.md)
+**Few-Shot Learning** - Poskytování příkladů v promptech. [Modul 02](../02-prompt-engineering/README.md)
-**Velký jazykový model (LLM)** - AI modely trénované na obrovských datových sadách textu.
+**Velký jazykový model (LLM)** - AI modely trénované na rozsáhlých textových datech.
-**Úroveň úvahy (Reasoning Effort)** - Parametr GPT-5.2 ovládající hloubku uvažování. [Modul 02](../02-prompt-engineering/README.md)
+**Reasoning Effort** - Parametr GPT-5.2 ovlivňující hloubku uvažování. [Modul 02](../02-prompt-engineering/README.md)
-**Teplota (Temperature)** - Řídí náhodnost výstupu. Nízká=deterministické, vysoká=tvůrčí.
+**Teplota (Temperature)** - Řídí náhodnost výstupu. Nízká=deterministická, vysoká=tvůrčí.
**Vektorová databáze** - Specializovaná databáze pro embeddings. [Modul 03](../03-rag/README.md)
-**Učení bez příkladů (Zero-Shot Learning)** - Provádění úkolů bez příkladů. [Modul 02](../02-prompt-engineering/README.md)
+**Zero-Shot Learning** - Plnění úloh bez příkladů. [Modul 02](../02-prompt-engineering/README.md)
-## Ochranné mechanismy - [Modul 00](../00-quick-start/README.md)
+## Bezpečnostní opatření
-**Defense in Depth** - Vícevrstvá bezpečnostní metoda kombinující aplikační ochranné mechanismy s filtry poskytovatelů.
+**Defense in Depth** - Vícevrstvý bezpečnostní přístup kombinující aplikační bezpečnostní opatření s bezpečnostními filtry poskytovatele.
-**Hard Block** - Poskytovatel vrací HTTP 400 chybu při závažném porušení obsahu.
+**Hard Block** - Poskytovatel vrací chybu HTTP 400 při závažném porušení obsahu.
-**InputGuardrail** - Rozhraní LangChain4j pro ověřování vstupů uživatele před dosažením LLM. Šetří náklady a zpoždění tím, že brání škodlivým promptům včas.
+**InputGuardrail** - Rozhraní LangChain4j pro validaci uživatelského vstupu před jeho zpracováním LLM. Šetří náklady a latenci tím, že blokuje škodlivé prompty včas.
-**InputGuardrailResult** - Návratový typ pro ověření vstupního guardrailu: `success()` nebo `fatal("důvod")`.
+**InputGuardrailResult** - Návratový typ validace guardrail: `success()` nebo `fatal("důvod")`.
-**OutputGuardrail** - Rozhraní pro ověřování AI odpovědí před jejich vrácením uživatelům.
+**OutputGuardrail** - Rozhraní pro validaci AI odpovědí před jejich předáním uživatelům.
-**Provider Safety Filters** - Vestavěné obsahové filtry AI poskytovatelů (např. GitHub Models), které zachytí porušení na úrovni API.
+**Bezpečnostní filtry poskytovatele** - Vestavěné filtry obsahu od AI poskytovatelů (např. Azure OpenAI), které zachytávají porušení na úrovni API.
-**Soft Refusal** - Model zdvořile odmítne odpovědět bez vyvolání chyby.
+**Soft Refusal** - Model zdvořile odmítne odpovědět, aniž by vyhodil chybu.
-## Řízení příkazů (prompt engineering) - [Modul 02](../02-prompt-engineering/README.md)
+## Tvorba promptů - [Modul 02](../02-prompt-engineering/README.md)
-**Řetězení myšlenek (Chain-of-Thought)** - Krok za krokem uvažování pro lepší přesnost.
+**Chain-of-Thought** - Krok za krokem odůvodňování pro lepší přesnost.
-**Omezený výstup (Constrained Output)** - Vynucení specifického formátu nebo struktury.
+**Omezený výstup** - Vynucení specifického formátu nebo struktury.
-**Vysoká snaha (High Eagerness)** - Vzor GPT-5.2 pro důkladné uvažování.
+**High Eagerness** - Vzor GPT-5.2 pro důkladné uvažování.
-**Nízká snaha (Low Eagerness)** - Vzor GPT-5.2 pro rychlé odpovědi.
+**Low Eagerness** - Vzor GPT-5.2 pro rychlé odpovědi.
-**Vícekolová konverzace (Multi-Turn Conversation)** - Uchovávání kontextu napříč výměnami.
+**Vícekolová konverzace** - Udržování kontextu přes výměny.
-**Role-Based Prompting** - Nastavení persony modelu pomocí systémových zpráv.
+**Role-Based Prompting** - Nastavení modelové persóny pomocí systémových zpráv.
-**Sebe-reflexe (Self-Reflection)** - Model posuzuje a zlepšuje svůj výstup.
+**Sebereflexe** - Model hodnotí a vylepšuje svůj výstup.
-**Strukturovaná analýza (Structured Analysis)** - Pevný hodnotící rámec.
+**Strukturovaná analýza** - Fixní rámec hodnocení.
-**Vzor vykonávání úkolu (Task Execution Pattern)** - Plánuj → Vykonej → Shrň.
+**Vzor vykonání úkolu** - Plánuj → Vykonej → Shrň.
## RAG (Retrieval-Augmented Generation) - [Modul 03](../03-rag/README.md)
-**Pipeline zpracování dokumentů** - Načíst → rozdělit → vložit do embedů → uložit.
+**Pipeline zpracování dokumentů** - Načti → rozděluj → embeduj → ulož.
-**In-memory embedding store** - Nepersistentní úložiště pro testování.
+**In-Memory Embedding Store** - Nepersistentní úložiště pro testování.
-**RAG** - Kombinuje vyhledávání s generováním pro zakotvení odpovědí.
+**RAG** - Kombinuje vyhledávání a generování pro ověřené odpovědi.
-**Skóre podobnosti (Similarity Score)** - Míra (0-1) sémantické podobnosti.
+**Podobnostní skóre** - Míra (0-1) sémantické podobnosti.
-**Zdrojová reference (Source Reference)** - Metadata o vyhledaném obsahu.
+**Reference zdroje** - Metadata o načteném obsahu.
-## Agenti a nástroje - [Modul 04](../04-tools/README.md)
+## Agentové a nástroje - [Modul 04](../04-tools/README.md)
-**@Tool anotace** - Označuje metody v Javě jako nástroje volatelné AI.
+**@Tool Annotation** - Označuje Java metody jako AI-volatelné nástroje.
-**ReAct pattern** - Uvažuj → jednej → pozoruj → opakuj.
+**ReAct Pattern** - Uvažuj → jednej → pozoruj → opakuj.
-**Správa relací (Session Management)** - Oddělené kontexty pro různé uživatele.
+**Správa sezení** - Oddělené kontexty pro různé uživatele.
**Nástroj (Tool)** - Funkce, kterou může AI agent volat.
-**Popis nástroje (Tool Description)** - Dokumentace účelu a parametrů nástroje.
+**Popis nástroje** - Dokumentace účelu nástroje a parametrů.
-## Agentický modul - [Modul 05](../05-mcp/README.md)
+## Agentní modul - [Modul 05](../05-mcp/README.md)
-**@Agent anotace** - Označuje rozhraní jako AI agenty s deklarativní definicí chování.
+**@Agent Annotation** - Označuje rozhraní jako AI agenty s deklarativní definicí chování.
-**Agent Listener** - Háček pro sledování běhu agentů přes `beforeAgentInvocation()` a `afterAgentInvocation()`.
+**Agent Listener** - Háček pro monitorování spuštění agenta přes `beforeAgentInvocation()` a `afterAgentInvocation()`.
-**Agentický rozsah (Agentic Scope)** - Sdílená paměť, kam agenti ukládají výstupy s klíčem `outputKey` pro konzumaci dalšími agenty.
+**Agentic Scope** - Sdílená paměť, kam agenti ukládají výsledky pomocí `outputKey` pro další agenty.
-**AgenticServices** - Továrna pro tvorbu agentů pomocí `agentBuilder()` a `supervisorBuilder()`.
+**AgenticServices** - Továrna pro vytváření agentů použitím `agentBuilder()` a `supervisorBuilder()`.
-**Podmíněný workflow (Conditional Workflow)** - Směrování na různé specialisty podle podmínek.
+**Podmíněný workflow** - Směrování na základě podmínek k různým specializovaným agentům.
-**Human-in-the-Loop** - Vzorec workflow přidávající lidské kontrolní body pro schválení nebo revizi obsahu.
+**Human-in-the-Loop** - Vzorec workflow přidávající lidské kontroly pro schválení nebo revizi obsahu.
**langchain4j-agentic** - Maven závislost pro deklarativní tvorbu agentů (experimentální).
-**Smyčkový workflow (Loop Workflow)** - Iterace opakovaného běhu agenta do splnění podmínky (např. skóre kvality ≥ 0.8).
+**Loop Workflow** - Iterace vykonávání agenta dokud není splněna podmínka (např. skóre kvality ≥ 0.8).
-**outputKey** - Parametr anotace agenta určující, kam se ukládají výsledky v Agentic Scope.
+**outputKey** - Parametr anotace agenta určující, kde jsou výsledky ukládány v Agentic Scope.
-**Paralelní workflow (Parallel Workflow)** - Současný běh více agentů na nezávislých úkolech.
+**Paralelní workflow** - Současné spuštění více agentů pro nezávislé úkoly.
-**Strategie odpovědí (Response Strategy)** - Jak dozor formulujefinální odpověď: POSLEDNÍ, SOUHRN nebo OHODNOCENÁ.
+**Strategie odpovědi** - Jak supervisor formuluje finální odpověď: POSLEDNÍ, SHRNUTÍ nebo SKÓROVANÉ.
-**Sekvenční workflow (Sequential Workflow)** - Postupné spouštění agentů, kde výstup plyne do dalšího kroku.
+**Sekvenční workflow** - Spouštění agentů za sebou, kde výstup jde do dalšího kroku.
-**Vzorec dozorčího agenta (Supervisor Agent Pattern)** - Pokročilý agentický vzorec, kde dozorčí LLM dynamicky rozhoduje o volání podagentů.
+**Supervisor Agent Pattern** - Pokročilý agentní vzorec, kde supervisorský LLM dynamicky rozhoduje, které pod-agenty zavolat.
-## Model Context Protocol (MCP) - [Modul 05](../05-mcp/README.md)
+## Modelový kontextový protokol (MCP) - [Modul 05](../05-mcp/README.md)
**langchain4j-mcp** - Maven závislost pro integraci MCP v LangChain4j.
-**MCP** - Model Context Protocol: standard pro propojení AI aplikací s externími nástroji. Postav jednou, použij všude.
+**MCP** - Model Context Protocol: standard pro připojení AI aplikací k externím nástrojům. Napiš jednou, používej všude.
-**MCP Client** - Aplikace, která se připojuje k MCP serverům pro objevování a používání nástrojů.
+**MCP Client** - Aplikace, která se připojuje k MCP serverům, aby objevovala a používala nástroje.
-**MCP Server** - Služba vystavující nástroje přes MCP s popisy a schématy parametrů.
+**MCP Server** - Služba zpřístupňující nástroje přes MCP s jasnými popisy a schématy parametrů.
**McpToolProvider** - Komponenta LangChain4j, která obaluje MCP nástroje pro použití v AI službách a agentech.
**McpTransport** - Rozhraní pro MCP komunikaci. Implementace zahrnují Stdio a HTTP.
-**Stdio Transport** - Lokální procesní transport přes stdin/stdout. Vhodné pro přístup k souborům nebo příkazové nástroje.
+**Stdio Transport** - Lokální procesní transport přes stdin/stdout. Vhodné pro přístup k souborovému systému nebo příkazové nástroje.
-**StdioMcpTransport** - Implementace LangChain4j, která spouští MCP server jako podproces.
+**StdioMcpTransport** - Implementace LangChain4j spouštějící MCP server jako podproces.
-**Objevování nástrojů (Tool Discovery)** - Klient dotazuje server na dostupné nástroje s popisy a schématy.
+**Objevování nástrojů** - Klient dotazuje server na dostupné nástroje s popisy a schématy.
## Azure služby - [Modul 01](../01-introduction/README.md)
-**Azure AI Search** - Cloudové vyhledávání s vektorovou podporou. [Modul 03](../03-rag/README.md)
+**Azure AI Search** - Cloudové vyhledávání s vektorovými schopnostmi. [Modul 03](../03-rag/README.md)
-**Azure Developer CLI (azd)** - Nástroj pro nasazení Azure zdrojů.
+**Azure Developer CLI (azd)** - Nasazování Azure zdrojů.
-**Azure OpenAI** - Podniková AI služba Microsoftu.
+**Azure OpenAI** - Enterprise AI služba Microsoftu.
-**Bicep** - Jazyk pro infrastrukturu jako kód v Azure. [Příručka infrastruktury](../01-introduction/infra/README.md)
+**Bicep** - Jazyk pro infrastrukturu jako kód na Azure. [Průvodce infrastrukturou](../01-introduction/infra/README.md)
-**Název nasazení** - Název nasazení modelu v Azure.
+**Název nasazení** - Název pro nasazení modelu v Azure.
**GPT-5.2** - Nejnovější model OpenAI s řízením uvažování. [Modul 02](../02-prompt-engineering/README.md)
-## Testování a vývoj - [Testovací příručka](TESTING.md)
+## Testování a vývoj - [Průvodce testováním](TESTING.md)
-**Dev Container** - Kontejnerizované vývojové prostředí. [Konfigurace](../../../.devcontainer/devcontainer.json)
+**Vývojový kontejner** - Kontejnerizované vývojové prostředí. [Konfigurace](../../../.devcontainer/devcontainer.json)
-**GitHub Models** - Volné AI modelové hřiště. [Modul 00](../00-quick-start/README.md)
+**Testování v paměti** - Testování s paměťovým úložištěm.
-**Testování v paměti (In-Memory Testing)** - Testování s úložištěm v paměti.
+**Integrační testování** - Testování s reálnou infrastrukturou.
-**Integrační testování (Integration Testing)** - Testování s reálnou infrastrukturou.
-
-**Maven** - Nástroj pro automatizaci sestavení v Javě.
+**Maven** - Nástroj pro automatizaci buildů v Javě.
**Mockito** - Java framework pro mockování.
-**Spring Boot** - Java aplikační rámec. [Modul 01](../01-introduction/README.md)
+**Spring Boot** - Java aplikační framework. [Modul 01](../01-introduction/README.md)
---
-**Prohlášení o vyloučení odpovědnosti**:
-Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). I když usilujeme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za žádná nedorozumění nebo nesprávné výklady vzniklé z užití tohoto překladu.
+**Prohlášení o omezení odpovědnosti**:
+Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o co největší přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo nesprávné interpretace vzniklé použitím tohoto překladu.
\ No newline at end of file
diff --git a/translations/cs/docs/TESTING.md b/translations/cs/docs/TESTING.md
index c71eb37a0..d717772e1 100644
--- a/translations/cs/docs/TESTING.md
+++ b/translations/cs/docs/TESTING.md
@@ -2,110 +2,105 @@
## Obsah
-- [Rychlý start](../../../docs)
-- [Co testy pokrývají](../../../docs)
-- [Spouštění testů](../../../docs)
-- [Spouštění testů ve VS Code](../../../docs)
-- [Testovací vzory](../../../docs)
-- [Filozofie testování](../../../docs)
-- [Další kroky](../../../docs)
+- [Rychlý start](#rychlý-start)
+- [Co testy pokrývají](#co-testy-pokrývají)
+- [Spouštění testů](#spouštění-testů)
+- [Spouštění testů ve VS Code](#spouštění-testů-ve-vs-code)
+- [Testovací vzory](#testovací-vzory)
+- [Filozofie testování](#filozofie-testování)
+- [Další kroky](#další-kroky)
-Tato příručka vás provede testy, které ukazují, jak testovat AI aplikace bez potřeby API klíčů nebo externích služeb.
+Tento průvodce vás provede testy, které ukazují, jak testovat AI aplikace bez potřeby API klíčů nebo externích služeb.
## Rychlý start
Spusťte všechny testy jediným příkazem:
-**Bash:**
+**Bash:**
```bash
mvn test
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
mvn --% test
```
-
-Když všechny testy projdou, měli byste vidět výstup podobný následujícímu screenshotu — testy proběhnou bez chyb.
-
+Když všechny testy projdou, měla by se zobrazit výstup podobný níže uvedené obrazovce — testy proběhnou bez chyb.
+
+
-*Úspěšné spuštění testů, kde všechny testy prošly bez chyb*
+*Úspěšné spuštění testů ukazující všechny testy projít bez chyb*
## Co testy pokrývají
-Tento kurz se zaměřuje na **jednotkové testy**, které běží lokálně. Každý test ukazuje konkrétní koncept LangChain4j izolovaně. Níže uvedená testovací pyramida ukazuje, kam jednotkové testy zapadají — tvoří rychlý, spolehlivý základ, na kterém je postavena zbytek vaší testovací strategie.
+Tento kurz se zaměřuje na **jednotkové testy**, které běží lokálně. Každý test demonstruje konkrétní koncept LangChain4j izolovaně. Níže uvedená pyramida testování ukazuje, kde jednotkové testy zapadají — tvoří rychlý a spolehlivý základ, na kterém je postaven zbytek vaší testovací strategie.
-
+
-*Testovací pyramida ukazující vyváženost mezi jednotkovými testy (rychlé, izolované), integračními testy (reálné komponenty) a end-to-end testy. Tento kurz pokrývá jednotkové testování.*
+*Testovací pyramida ukazující rovnováhu mezi jednotkovými testy (rychlé, izolované), integračními testy (reálné komponenty) a end-to-end testy. Toto školení pokrývá jednotkové testování.*
| Modul | Testy | Zaměření | Klíčové soubory |
|--------|-------|----------|-----------------|
-| **00 - Rychlý start** | 6 | Šablony promptů a substituce proměnných | `SimpleQuickStartTest.java` |
| **01 - Úvod** | 8 | Paměť konverzace a stavový chat | `SimpleConversationTest.java` |
-| **02 - Prompt Engineering** | 12 | Vzory GPT-5.2, úrovně ochoty, strukturovaný výstup | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | Zpracování dokumentů, embeddingy, vyhledávání podobnosti | `DocumentServiceTest.java` |
-| **04 - Nástroje** | 12 | Vytváření funkcí a řetězení nástrojů | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | Protokol modelového kontextu s stdio transportem | `SimpleMcpTest.java` |
+| **02 - Tvorba promptů** | 12 | Vzory GPT-5.2, úrovně ochoty, strukturovaný výstup | `SimpleGpt5PromptTest.java` |
+| **03 - RAG** | 10 | Ingest dokumentů, embeddingy, vyhledávání podobnosti | `DocumentServiceTest.java` |
+| **04 - Nástroje** | 12 | Volání funkcí a řetězení nástrojů | `SimpleToolsTest.java` |
+| **05 - MCP** | 8 | Protokol Model Context s použitím stdio transportu | `SimpleMcpTest.java` |
## Spouštění testů
-**Spustit všechny testy z kořenové složky:**
+**Spusťte všechny testy ze složky root:**
-**Bash:**
+**Bash:**
```bash
mvn test
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
mvn --% test
```
-
-**Spustit testy pro konkrétní modul:**
+**Spusťte testy konkrétního modulu:**
-**Bash:**
+**Bash:**
```bash
cd 01-introduction && mvn test
# Nebo z kořene
mvn test -pl 01-introduction
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
cd 01-introduction; mvn --% test
# Nebo z kořene
mvn --% test -pl 01-introduction
```
+**Spusťte jednotlivou třídu testů:**
-**Spustit jednu testovací třídu:**
-
-**Bash:**
+**Bash:**
```bash
mvn test -Dtest=SimpleConversationTest
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
mvn --% test -Dtest=SimpleConversationTest
```
-
-**Spustit konkrétní testovací metodu:**
+**Spusťte konkrétní testovací metodu:**
-**Bash:**
+**Bash:**
```bash
-mvn test -Dtest=SimpleConversationTest#měl by udržovat historii konverzace
+mvn test -Dtest=SimpleConversationTest#měla by udržovat historii konverzace
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
-mvn --% test -Dtest=SimpleConversationTest#měl by udržovat historii konverzace
+mvn --% test -Dtest=SimpleConversationTest#měli byste udržovat historii konverzace
```
-
## Spouštění testů ve VS Code
@@ -113,27 +108,27 @@ Pokud používáte Visual Studio Code, Test Explorer poskytuje grafické rozhran
-*Test Explorer ve VS Code ukazuje strom testů se všemi Java testovacími třídami a jednotlivými testovacími metodami*
+*VS Code Test Explorer ukazující strom testů se všemi Java testovacími třídami a jednotlivými testovacími metodami*
-**Pro spuštění testů ve VS Code:**
+**Jak spustit testy ve VS Code:**
-1. Otevřete Test Explorer kliknutím na ikonu zkumavky v aktivitním panelu
-2. Rozbalte strom testů, abyste viděli všechny moduly a testovací třídy
-3. Klikněte na tlačítko pro přehrání vedle libovolného testu pro jeho individuální spuštění
-4. Klikněte na "Run All Tests" pro spuštění celé sady
-5. Pravým klikem na test vyberte "Debug Test" pro nastavení breakpointů a krokování kódem
+1. Otevřete Test Explorer kliknutím na ikonu kádinky v panelu aktivit
+2. Rozbalte strom testů, abyste viděli všechny moduly a testovací třídy
+3. Klikněte na tlačítko přehrávání vedle kterékoli testu pro individuální spuštění
+4. Klikněte na „Run All Tests“ pro spuštění celé sady
+5. Klikněte pravým tlačítkem na test a vyberte „Debug Test“ pro nastavení breakpointů a krokování kódem
-Test Explorer zobrazuje zelené fajfky u úspěšných testů a poskytuje podrobné zprávy o chybách, jsou-li testy neúspěšné.
+Test Explorer zobrazuje zelené zatržítka pro úspěšné testy a poskytuje podrobné chybové zprávy při selhání testů.
## Testovací vzory
### Vzor 1: Testování šablon promptů
-Nejjednodušší vzor testuje šablony promptů bez volání AI modelu. Ověřujete, že substituce proměnných funguje správně a prompt je formátován očekávaným způsobem.
+Nejjednodušší vzor testuje šablony promptů bez volání AI modelu. Ověřujete, že nahrazení proměnných funguje správně a prompty jsou formátovány dle očekávání.
-
+
-*Testování šablon promptů, ukazující průtok substituce hodnot: šablona s místy pro vložení hodnot → aplikovaná hodnota → ověřený formátovaný výstup*
+*Testování šablon promptů ukazující tok nahrazování proměnných: šablona s místy pro hodnoty → aplikované hodnoty → ověřený formátovaný výstup*
```java
@Test
@@ -151,29 +146,16 @@ void testPromptTemplateFormatting() {
assertThat(prompt.text()).isEqualTo("Best time to visit Paris for sightseeing?");
}
```
-
-Tento test je v souboru `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
-**Spuštění:**
-
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#testFormátováníŠablonyVýzvy
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#testováníFormátováníŠablonyVýzvy
-```
-
+Tento vzor ověřuje, že nahrazení proměnných funguje správně a prompty jsou formátovány, jak se očekává — není potřeba API klíč ani volání modelu.
### Vzor 2: Mockování jazykových modelů
-Při testování logiky konverzace použijte Mockito k vytvoření falešných modelů, které vrací předem dané odpovědi. Díky tomu jsou testy rychlé, zdarma a deterministické.
+Při testování logiky konverzace použijte Mockito k vytvoření falešných modelů, které vracejí předem dané odpovědi. Díky tomu jsou testy rychlé, zdarma a deterministické.
-
+
-*Porovnání ukazující, proč jsou mockety preferovány při testování: jsou rychlé, zdarma, deterministické a nevyžadují API klíče*
+*Srovnání ukazující, proč jsou misky preferované pro testování: jsou rychlé, zdarma, deterministické a nevyžadují API klíče*
```java
@ExtendWith(MockitoExtension.class)
@@ -218,20 +200,20 @@ class SimpleConversationTest {
conversationService.chat(conversationId, "Third message");
List history = conversationService.getHistory(conversationId);
- assertThat(history).hasSize(6); // 3 zprávy uživatele + 3 zprávy AI
+ assertThat(history).hasSize(6); // 3 uživatelské + 3 AI zprávy
}
}
```
-
-Tento vzor je použit v `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Mock zajišťuje konzistentní chování, takže lze ověřit správné řízení paměti.
+
+Tento vzor je použit v `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Mock zajistí konzistentní chování pro ověření správného fungování správy paměti.
### Vzor 3: Testování izolace konverzace
-Paměť konverzace musí udržovat uživatele oddělené. Tento test ověřuje, že se konverzace nekombinují.
+Paměť konverzace musí udržovat uživatele odděleně. Tento test ověřuje, že se konverzace navzájem nekontextují.
-
+
-*Testování izolace konverzace ukazuje oddělené úložiště paměti pro různé uživatele, aby nedocházelo ke křížení kontextů*
+*Testování izolace konverzace ukazující oddělené paměťové úložiště pro různé uživatele, aby nedocházelo ke smíchání kontextů*
```java
@Test
@@ -254,16 +236,16 @@ void shouldIsolateConversationsByid() {
assertThat(history2).hasSize(2);
}
```
-
-Každá konverzace si udržuje vlastní nezávislou historii. V produkčních systémech je tato izolace kritická pro multi-uživatelské aplikace.
-### Vzor 4: Testování nástrojů nezávisle
+Každá konverzace má vlastní nezávislou historii. V produkčních systémech je tato izolace kritická pro víceuživatelské aplikace.
-Nástroje jsou funkce, které AI může volat. Testujte je přímo, abyste zajistili správnost bez ohledu na rozhodnutí AI.
+### Vzor 4: Testování nástrojů samostatně
-
+Nástroje jsou funkce, které může AI volat. Otestujte je přímo, aby bylo zajištěno, že fungují správně bez ohledu na rozhodnutí AI.
-*Testování nástrojů samostatně ukazující provádění mock nástrojů bez volání AI pro ověření obchodní logiky*
+
+
+*Testování nástrojů samostatně ukazující simulované spuštění nástrojů bez volání AI pro ověření podnikové logiky*
```java
@Test
@@ -285,16 +267,16 @@ void shouldDemonstrateToolChaining() {
assertThat(conversionResult).containsPattern("71[.,]6°F");
}
```
-
-Tyto testy z `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` ověřují logiku nástrojů bez zapojení AI. Příklad řetězení ukazuje, jak výstup jednoho nástroje jde jako vstup do dalšího.
+
+Tyto testy z `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` ověřují logiku nástrojů bez zapojení AI. Příklad řetězení ukazuje, jak výstup jednoho nástroje slouží jako vstup do druhého.
### Vzor 5: Testování RAG v paměti
-RAG systémy tradičně vyžadují vektorové databáze a embedding služby. Vzor v paměti vám umožňuje testovat celý proces bez externích závislostí.
+RAG systémy tradičně vyžadují vektorové databáze a embeddingové služby. Vzor v paměti umožňuje testovat celý proces bez externích závislostí.
-
+
-*Testovací workflow RAG v paměti ukazující parsování dokumentu, ukládání embeddingů a vyhledávání podle podobnosti bez potřeby databáze*
+*Průběh testování RAG v paměti ukazující zpracování dokumentu, ukládání embeddingů a vyhledávání podobnosti bez potřeby databáze*
```java
@Test
@@ -310,52 +292,50 @@ void testProcessTextDocument() {
assertEquals("test.txt", result.segments().get(0).metadata().getString("filename"));
}
```
-
-Tento test z `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` vytvoří dokument v paměti a ověřuje rozdělování na části a zpracování metadat.
+
+Tento test z `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` vytváří dokument v paměti a ověřuje rozdělení na části a zpracování metadat.
### Vzor 6: Integrační testování MCP
-Modul MCP testuje integraci Model Context Protokolu pomocí stdio transportu. Tyto testy ověřují, že vaše aplikace může spouštět MCP servery jako podprocesy a komunikovat s nimi.
+Modul MCP testuje integraci Model Context Protocol s použitím stdio transportu. Tyto testy ověřují, že vaše aplikace může spouštět a komunikovat s MCP servery jako podprocesy.
-Testy v `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` validují chování klienta MCP.
+Testy v `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` ověřují chování MCP klienta.
-**Spuštění:**
+**Spusťte je:**
-**Bash:**
+**Bash:**
```bash
cd 05-mcp && mvn test
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
cd 05-mcp; mvn --% test
```
-
## Filozofie testování
-Testujte svůj kód, ne AI. Vaše testy by měly ověřovat kód, který píšete, kontrolovat, jak jsou prompt šablony konstruovány, jak je řízena paměť a jak se vykonávají nástroje. Odpovědi AI se liší a neměly by být součástí testovacích ověření. Ptejte se, zda vaše šablona správně nahrazuje proměnné, ne jestli AI dává správnou odpověď.
+Testujte svůj kód, ne AI. Vaše testy by měly ověřovat kód, který píšete, tím že kontrolují, jak jsou prompt šablony sestavené, jak se spravuje paměť a jak se spouštějí nástroje. AI odpovědi jsou různorodé a neměly by být součástí testovacích tvrzení. Ptejte se, zda vaše šablona promptu správně nahrazuje proměnné, ne zda AI poskytuje správnou odpověď.
-Používejte mocky pro jazykové modely. Jsou to externí závislosti, které jsou pomalé, drahé a nedeterministické. Mockování dělá testy rychlými na milisekundy místo sekund, zdarma bez nákladů na API a deterministickými se stejným výsledkem pokaždé.
+Používejte mocks pro jazykové modely. Jsou to externí závislosti, které jsou pomalé, drahé a nedeterministické. Mockování dělá testy rychlé (v milisekundách místo sekund), zdarma (bez nákladů na API) a deterministické (stejný výsledek pokaždé).
-Udržujte testy nezávislé. Každý test by měl nastavit vlastní data, nespoléhat na jiné testy a sám si po sobě uklidit. Testy by měly projít bez ohledu na pořadí spouštění.
+Udržujte testy nezávislé. Každý test by měl nastavit vlastní data, nespoléhat na jiné testy a uklidit po sobě. Testy by měly projít bez ohledu na pořadí spuštění.
-Testujte okrajové případy nad rámec šťastné cesty. Zkoušejte prázdné vstupy, velmi velké vstupy, speciální znaky, neplatné parametry a hranice. Tyto často odhalí chyby, které běžné použití nevykáže.
+Testujte hraniční případy mimo běžnou cestu. Zkoušejte prázdné vstupy, velmi velké vstupy, speciální znaky, neplatné parametry a okrajové podmínky. Ty často odhalují chyby, které normální použití neodhalí.
-Používejte popisná jména. Porovnejte `shouldMaintainConversationHistoryAcrossMultipleMessages()` a `test1()`. První přesně říká, co se testuje, což usnadňuje ladění chyb.
+Používejte popisné názvy. Porovnejte `shouldMaintainConversationHistoryAcrossMultipleMessages()` s `test1()`. První přesně popisuje, co se testuje, což zjednodušuje ladění chyb.
## Další kroky
-Nyní, když rozumíte testovacím vzorům, ponořte se hlouběji do každého modulu:
+Nyní, když rozumíte testovacím vzorům, ponořte se hlouběji do jednotlivých modulů:
-- **[00 - Rychlý start](../00-quick-start/README.md)** - Začněte se základy šablon promptů
-- **[01 - Úvod](../01-introduction/README.md)** - Naučte se řízení paměti konverzace
-- **[02 - Prompt Engineering](../02-prompt-engineering/README.md)** - Ovládněte vzory pro GPT-5.2
-- **[03 - RAG](../03-rag/README.md)** - Vytvářejte retrieval-augmented generation systémy
-- **[04 - Nástroje](../04-tools/README.md)** - Implementujte volání funkcí a řetězce nástrojů
-- **[05 - MCP](../05-mcp/README.md)** - Integrujte Model Context Protocol
+- **[01 - Úvod](../01-introduction/README.md)** - Naučte se správu paměti konverzace
+- **[02 - Tvorba promptů](../02-prompt-engineering/README.md)** - Ovládněte vzory promptů GPT-5.2
+- **[03 - RAG](../03-rag/README.md)** - Vytvořte systémy pro generování se získáváním informací
+- **[04 - Nástroje](../04-tools/README.md)** - Implementujte volání funkcí a řetězení nástrojů
+- **[05 - MCP](../05-mcp/README.md)** - Integrujte Model Context Protocol
-Každý modul má svůj README s podrobnými vysvětleními konceptů, které zde byly testovány.
+README každého modulu nabízí podrobné vysvětlení testovaných konceptů.
---
@@ -364,6 +344,6 @@ Každý modul má svůj README s podrobnými vysvětleními konceptů, které zd
---
-**Prohlášení o vyloučení odpovědnosti**:
-Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). I když usilujeme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho mateřském jazyce by měl být považován za závazný zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neručíme za jakékoli nedorozumění nebo nesprávné výklady vzniklé použitím tohoto překladu.
+**Prohlášení o omezení odpovědnosti**:
+Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o co největší přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo nesprávné interpretace vzniklé použitím tohoto překladu.
\ No newline at end of file
diff --git a/translations/da/.co-op-translator.json b/translations/da/.co-op-translator.json
index 831c8e401..39b13bfcf 100644
--- a/translations/da/.co-op-translator.json
+++ b/translations/da/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "da"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-02T23:19:41+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T12:09:03+00:00",
"source_file": "01-introduction/README.md",
"language_code": "da"
},
@@ -18,20 +18,20 @@
"language_code": "da"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-02T23:21:45+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T12:04:44+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "da"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-02T23:22:58+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T12:08:15+00:00",
"source_file": "03-rag/README.md",
"language_code": "da"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T11:14:00+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T12:07:02+00:00",
"source_file": "04-tools/README.md",
"language_code": "da"
},
@@ -54,8 +54,8 @@
"language_code": "da"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T17:06:38+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T12:03:29+00:00",
"source_file": "README.md",
"language_code": "da"
},
@@ -72,14 +72,14 @@
"language_code": "da"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-02T23:25:41+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T12:05:13+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "da"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-02T23:26:19+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T12:05:48+00:00",
"source_file": "docs/TESTING.md",
"language_code": "da"
}
diff --git a/translations/da/00-quick-start/README.md b/translations/da/00-quick-start/README.md
deleted file mode 100644
index 09b00f170..000000000
--- a/translations/da/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# Modul 00: Hurtig Start
-
-## Indholdsfortegnelse
-
-- [Introduktion](../../../00-quick-start)
-- [Hvad er LangChain4j?](../../../00-quick-start)
-- [LangChain4j Afhængigheder](../../../00-quick-start)
-- [Forudsætninger](../../../00-quick-start)
-- [Opsætning](../../../00-quick-start)
- - [1. Få dit GitHub-token](../../../00-quick-start)
- - [2. Angiv dit token](../../../00-quick-start)
-- [Kør eksemplerne](../../../00-quick-start)
- - [1. Grundlæggende Chat](../../../00-quick-start)
- - [2. Promptmønstre](../../../00-quick-start)
- - [3. Funktionsopkald](../../../00-quick-start)
- - [4. Dokument Q&A (Easy RAG)](../../../00-quick-start)
- - [5. Ansvarlig AI](../../../00-quick-start)
-- [Hvad Hver Eksempel Viser](../../../00-quick-start)
-- [Næste Trin](../../../00-quick-start)
-- [Fejlfinding](../../../00-quick-start)
-
-## Introduktion
-
-Denne hurtigstart er ment til at få dig i gang med LangChain4j så hurtigt som muligt. Den dækker det absolutte grundlag for at bygge AI-applikationer med LangChain4j og GitHub Models. I de næste moduler skifter du til Azure OpenAI og GPT-5.2 og dykker dybere ned i hvert koncept.
-
-## Hvad er LangChain4j?
-
-LangChain4j er et Java-bibliotek, der forenkler opbygningen af AI-drevne applikationer. I stedet for at håndtere HTTP-klienter og JSON-parsing arbejder du med rene Java-API'er.
-
-"Chain" i LangChain refererer til at kæde flere komponenter sammen – du kan kæde en prompt til en model til en parser, eller kæde flere AI-opkald, hvor én output fødes videre som input til det næste. Denne hurtigstart fokuserer på grundlæggende før vi udforsker mere komplekse kæder.
-
-
-
-*Kædning af komponenter i LangChain4j – byggeklodser forbindes for at skabe kraftfulde AI-workflows*
-
-Vi bruger tre kernekomponenter:
-
-**ChatModel** – Interfacet for AI-modelinteraktioner. Kald `model.chat("prompt")` og få en respons som streng. Vi bruger `OpenAiOfficialChatModel`, som virker med OpenAI-kompatible endpoints som GitHub Models.
-
-**AiServices** – Opretter typesikre AI service interfaces. Definer metoder, annoter dem med `@Tool`, og LangChain4j håndterer orkestreringen. AI’en kalder automatisk dine Java-metoder når nødvendigt.
-
-**MessageWindowChatMemory** – Vedligeholder samtalehistorik. Uden denne er hver anmodning uafhængig. Med den husker AI tidligere beskeder og bevarer kontekst på tværs af flere runder.
-
-
-
-*LangChain4j arkitektur – kernekomponenter arbejder sammen for at drive dine AI-applikationer*
-
-## LangChain4j Afhængigheder
-
-Denne hurtigstart bruger tre Maven-afhængigheder i [`pom.xml`](../../../00-quick-start/pom.xml):
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-Modulet `langchain4j-open-ai-official` leverer klassen `OpenAiOfficialChatModel`, der forbinder til OpenAI-kompatible API’er. GitHub Models bruger samme API-format, så der behøves ingen særlig adapter – blot peg base-URL’en til `https://models.github.ai/inference`.
-
-Modulet `langchain4j-easy-rag` leverer automatisk dokumentsplitning, embedding og retrieval, så du kan bygge RAG-applikationer uden manuelt at konfigurere hvert trin.
-
-## Forudsætninger
-
-**Bruger du Dev Container?** Java og Maven er allerede installeret. Du skal kun bruge et GitHub Personal Access Token.
-
-**Lokal Udvikling:**
-- Java 21+, Maven 3.9+
-- GitHub Personal Access Token (instruktioner nedenfor)
-
-> **Bemærk:** Dette modul bruger `gpt-4.1-nano` fra GitHub Models. Ændr ikke modelnavnet i koden – det er konfigureret til at fungere med GitHubs tilgængelige modeller.
-
-## Opsætning
-
-### 1. Få dit GitHub-token
-
-1. Gå til [GitHub Indstillinger → Personal Access Tokens](https://github.com/settings/personal-access-tokens)
-2. Klik på "Generate new token"
-3. Sæt et beskrivende navn (f.eks. "LangChain4j Demo")
-4. Sæt udløbstid (7 dage anbefalet)
-5. Under "Account permissions", find "Models" og sæt til "Read-only"
-6. Klik "Generate token"
-7. Kopiér og gem dit token – du vil ikke se det igen
-
-### 2. Angiv dit token
-
-**Mulighed 1: Brug af VS Code (Anbefalet)**
-
-Hvis du bruger VS Code, tilføj dit token til `.env` filen i projektroden:
-
-Hvis `.env` filen ikke findes, kopier `.env.example` til `.env` eller opret en ny `.env` fil i projektroden.
-
-**Eksempel på `.env` fil:**
-```bash
-# I /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-Så kan du blot højreklikke på en hvilken som helst demo-fil (f.eks. `BasicChatDemo.java`) i Explorer og vælge **"Run Java"** eller bruge launch-konfigurationerne i Run and Debug-panelet.
-
-**Mulighed 2: Brug af Terminal**
-
-Sæt token som en miljøvariabel:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## Kør eksemplerne
-
-**Med VS Code:** Højreklik på enhver demo-fil i Explorer og vælg **"Run Java"**, eller brug launch-konfigurationerne i Run and Debug-panelet (sørg for at du først har tilføjet dit token til `.env` filen).
-
-**Med Maven:** Alternativt kan du køre fra kommandolinjen:
-
-### 1. Grundlæggende Chat
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. Promptmønstre
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-Viser zero-shot, few-shot, kæde-af-tanke og rollebaseret prompting.
-
-### 3. Funktionsopkald
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-AI kalder automatisk dine Java-metoder når nødvendigt.
-
-### 4. Dokument Q&A (Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-Stil spørgsmål om dine dokumenter ved hjælp af Easy RAG med automatisk embedding og retrieval.
-
-### 5. Ansvarlig AI
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-Se hvordan AI-sikkerhedsfiltre blokerer skadeligt indhold.
-
-## Hvad Hver Eksempel Viser
-
-**Grundlæggende Chat** – [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-Start her for at se LangChain4j på dets enkleste. Du opretter en `OpenAiOfficialChatModel`, sender en prompt med `.chat()`, og får tilbage et svar. Dette demonstrerer fundamentet: hvordan man initialiserer modeller med brugerdefinerede endpoints og API-nøgler. Når du forstår dette mønster, bygger alt andet på det.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 Prøv med [GitHub Copilot](https://github.com/features/copilot) Chat:** Åbn [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) og spørg:
-> - "Hvordan skifter jeg fra GitHub Models til Azure OpenAI i denne kode?"
-> - "Hvilke andre parametre kan jeg konfigurere i OpenAiOfficialChatModel.builder()?"
-> - "Hvordan tilføjer jeg streaming-svar i stedet for at vente på hele svaret?"
-
-**Prompt Engineering** – [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-Nu hvor du ved, hvordan du taler til en model, lad os udforske hvad du siger til den. Denne demo bruger samme modelopsætning, men viser fem forskellige prompt-mønstre. Prøv zero-shot prompts for direkte instruktioner, few-shot prompts der lærer af eksempler, chain-of-thought prompts der afslører ræsonnementstrin, og rollebaserede prompts der sætter kontekst. Du vil se, hvordan samme model giver dramatisk forskellige resultater baseret på hvordan du rammer din anmodning ind.
-
-Demoen demonstrerer også prompt-skabeloner, som er en kraftfuld måde at lave genanvendelige prompts med variabler.
-Nedenstående eksempel viser en prompt ved hjælp af LangChain4j `PromptTemplate` til at udfylde variabler. AI’en svarer baseret på den angivne destination og aktivitet.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 Prøv med [GitHub Copilot](https://github.com/features/copilot) Chat:** Åbn [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) og spørg:
-> - "Hvad er forskellen på zero-shot og few-shot prompting, og hvornår skal jeg bruge hver?"
-> - "Hvordan påvirker temperatur-parameteren modellens svar?"
-> - "Hvilke teknikker kan forhindre prompt injection angreb i produktion?"
-> - "Hvordan kan jeg lave genanvendelige PromptTemplate-objekter til almindelige mønstre?"
-
-**Tool Integration** – [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-Her bliver LangChain4j virkelig kraftfuld. Du bruger `AiServices` til at oprette en AI-assistent, som kan kalde dine Java-metoder. Bare annoter metoder med `@Tool("beskrivelse")`, og LangChain4j klarer resten – AI’en beslutter automatisk, hvornår hvert værktøj skal bruges baseret på hvad brugeren spørger om. Dette demonstrerer funktionsopkald, en nøglemetode til at bygge AI, der kan handle, ikke bare svare på spørgsmål.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 Prøv med [GitHub Copilot](https://github.com/features/copilot) Chat:** Åbn [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) og spørg:
-> - "Hvordan virker @Tool-annotationen, og hvad gør LangChain4j med den bag scenen?"
-> - "Kan AI kalde flere værktøjer i rækkefølge for at løse komplekse problemer?"
-> - "Hvad sker der, hvis et værktøj kaster en undtagelse – hvordan håndterer jeg fejl?"
-> - "Hvordan integrerer jeg en rigtig API i stedet for dette lommeregner-eksempel?"
-
-**Dokument Q&A (Easy RAG)** – [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-Her ser du RAG (retrieval-augmented generation) ved hjælp af LangChain4j’s "Easy RAG" tilgang. Dokumenter indlæses, deles automatisk op og embeddes i en in-memory store, hvorefter en indholdsretriever leverer relevante bidder til AI’en ved forespørgselstidspunktet. AI’en svarer baseret på dine dokumenter, ikke sin generelle viden.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 Prøv med [GitHub Copilot](https://github.com/features/copilot) Chat:** Åbn [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) og spørg:
-> - "Hvordan forhindrer RAG AI-hallucinationer sammenlignet med at bruge modellens træningsdata?"
-> - "Hvad er forskellen på denne nemme tilgang og en tilpasset RAG pipeline?"
-> - "Hvordan ville jeg skalere dette til at håndtere flere dokumenter eller større vidensbaser?"
-
-**Ansvarlig AI** – [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-Byg AI-sikkerhed med forsvar i dybden. Denne demo viser to beskyttelseslag, der arbejder sammen:
-
-**Del 1: LangChain4j Input Guardrails** – Bloker farlige prompts før de når LLM. Opret tilpassede guardrails, der tjekker for forbudte nøgleord eller mønstre. De kører i din kode, så de er hurtige og gratis.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**Del 2: Udbyderens Sikkerhedsfiltre** – GitHub Models har indbyggede filtre, der fanger hvad dine guardrails måske misser. Du vil se hårde blokeringer (HTTP 400 fejl) for alvorlige overtrædelser og bløde afslag, hvor AI’en høfligt nægter.
-
-> **🤖 Prøv med [GitHub Copilot](https://github.com/features/copilot) Chat:** Åbn [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) og spørg:
-> - "Hvad er InputGuardrail, og hvordan laver jeg mine egne?"
-> - "Hvad er forskellen mellem en hård blokering og et blødt afslag?"
-> - "Hvorfor bruge både guardrails og udbyderfiltre sammen?"
-
-## Næste Trin
-
-**Næste Modul:** [01-introduction - Kom godt i gang med LangChain4j](../01-introduction/README.md)
-
----
-
-**Navigation:** [← Tilbage til Hoved](../README.md) | [Næste: Modul 01 - Introduktion →](../01-introduction/README.md)
-
----
-
-## Fejlfinding
-
-### Første Maven Build
-
-**Problem**: Første `mvn clean compile` eller `mvn package` tager lang tid (10-15 minutter)
-
-**Årsag**: Maven skal downloade alle projektets afhængigheder (Spring Boot, LangChain4j biblioteker, Azure SDK’er osv.) ved første build.
-
-**Løsning**: Dette er normal opførsel. Efterfølgende builds bliver meget hurtigere, da afhængigheder caches lokalt. Downloadtiden afhænger af din netværkshastighed.
-
-### PowerShell Maven Kommando-syntaks
-
-**Problem**: Maven kommandoer fejler med fejl `Unknown lifecycle phase ".mainClass=..."`
-**Årsag**: PowerShell fortolker `=` som en variabel-assigneringsoperator, hvilket ødelægger Maven-egenskabssyntaksen
-
-**Løsning**: Brug stop-parsing operatoren `--%` før Maven-kommandoen:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-Operatoren `--%` fortæller PowerShell at sende alle resterende argumenter bogstaveligt til Maven uden fortolkning.
-
-### Windows PowerShell Emoji-visning
-
-**Problem**: AI-svar viser uforståelige tegn (f.eks. `????` eller `â??`) i stedet for emojis i PowerShell
-
-**Årsag**: PowerShells standardkodning understøtter ikke UTF-8 emojis
-
-**Løsning**: Kør denne kommando før du kører Java-applikationer:
-```cmd
-chcp 65001
-```
-
-Dette tvinger UTF-8 kodning i terminalen. Alternativt kan du bruge Windows Terminal, der har bedre Unicode-understøttelse.
-
-### Fejlfinding af API-kald
-
-**Problem**: Autentificeringsfejl, raterestriktioner eller uventede svar fra AI-modellen
-
-**Løsning**: Eksemplerne inkluderer `.logRequests(true)` og `.logResponses(true)` for at vise API-kald i konsollen. Dette hjælper med at fejlfinde autentificeringsfejl, raterestriktioner eller uventede svar. Fjern disse flags i produktion for at reducere logstøj.
-
----
-
-
-**Ansvarsfraskrivelse**:
-Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på dets modersmål bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.
-
\ No newline at end of file
diff --git a/translations/da/01-introduction/README.md b/translations/da/01-introduction/README.md
index 37cb2b396..d06d5e35f 100644
--- a/translations/da/01-introduction/README.md
+++ b/translations/da/01-introduction/README.md
@@ -1,85 +1,85 @@
-# Modul 01: Kom godt i gang med LangChain4j
+# Module 01: Kom godt i gang med LangChain4j
## Indholdsfortegnelse
-- [Video Gennemgang](../../../01-introduction)
-- [Hvad du vil lære](../../../01-introduction)
-- [Forudsætninger](../../../01-introduction)
-- [Forståelse af det centrale problem](../../../01-introduction)
-- [Forståelse af tokens](../../../01-introduction)
-- [Hvordan hukommelse fungerer](../../../01-introduction)
-- [Hvordan dette bruger LangChain4j](../../../01-introduction)
-- [Deploy Azure OpenAI infrastruktur](../../../01-introduction)
-- [Kør applikationen lokalt](../../../01-introduction)
-- [Brug af applikationen](../../../01-introduction)
- - [Stateless chat (venstre panel)](../../../01-introduction)
- - [Stateful chat (højre panel)](../../../01-introduction)
-- [Næste skridt](../../../01-introduction)
+- [Videogennemgang](#videogennemgang)
+- [Det du vil lære](#det-du-vil-lære)
+- [Forudsætninger](#forudsætninger)
+- [Forståelse af kernproblemet](#forståelse-af-kernproblemet)
+- [Forståelse af tokens](#forståelse-af-tokens)
+- [Hvordan hukommelse fungerer](#hvordan-hukommelse-fungerer)
+- [Hvordan dette bruger LangChain4j](#hvordan-dette-bruger-langchain4j)
+- [Udrul Azure OpenAI infrastruktur](#udrul-azure-openai-infrastruktur)
+- [Kør applikationen lokalt](#kør-applikationen-lokalt)
+- [Brug af applikationen](#brug-af-applikationen)
+ - [Stateless chat (venstre panel)](#stateless-chat-venstre-panel)
+ - [Stateful chat (højre panel)](#stateful-chat-højre-panel)
+- [Næste skridt](#næste-skridt)
-## Video Gennemgang
+## Videogennemgang
-Se denne live session, som forklarer, hvordan du kommer i gang med dette modul:
+Se denne live session, der forklarer, hvordan du kommer i gang med dette modul:
-
+
-## Hvad du vil lære
+## Det du vil lære
-I quick start brugte du GitHub-modeller til at sende prompts, kalde værktøjer, bygge en RAG pipeline og teste sikkerhedsgitre. De demos viste, hvad der er muligt — nu skifter vi til Azure OpenAI og GPT-5.2 og begynder at bygge produktionsagtige applikationer. Dette modul fokuserer på samtale-AI, som husker kontekst og bevarer tilstand — de koncepter som quick start demos brugte i baggrunden men ikke forklarede.
+Dette er dit udgangspunkt med LangChain4j og Azure OpenAI. Vi starter med grundlæggende ting og begynder at bygge produktionsparat applikationer. Dette modul fokuserer på konversations-AI, der husker kontekst og bevarer tilstand — de grundlæggende koncepter som alle senere moduler bygger videre på.
-Vi bruger Azure OpenAI's GPT-5.2 gennem hele guiden, fordi dens avancerede ræsonneringsmuligheder gør adfærden i forskellige mønstre mere tydelig. Når du tilføjer hukommelse, kan du klart se forskellen. Det gør det lettere at forstå, hvad hver komponent bidrager med til din applikation.
+Vi bruger Azure OpenAIs GPT-5.2 gennem hele denne guide, fordi dens avancerede ræsonneringsevner gør adfærden i de forskellige mønstre mere tydelig. Når du tilføjer hukommelse, vil du klart kunne se forskellen. Det gør det lettere at forstå, hvad hver komponent bidrager med til din applikation.
-Du vil bygge en applikation, som demonstrerer begge mønstre:
+Du vil bygge en applikation, der demonstrerer begge mønstre:
-**Stateless Chat** - Hver anmodning er uafhængig. Modellen har ingen hukommelse om tidligere beskeder. Dette er mønstret, du brugte i quick start.
+**Stateless Chat** - Hver forespørgsel er uafhængig. Modellen har ingen hukommelse om tidligere beskeder. Dette er det simpleste startpunkt.
-**Stateful Conversation** - Hver anmodning inkluderer samtalehistorik. Modellen bevarer kontekst over flere interaktioner. Dette kræves i produktionsapplikationer.
+**Stateful Conversation** - Hver forespørgsel inkluderer samtalehistorik. Modellen bevarer kontekst på tværs af flere runder. Dette er hvad produktionsapplikationer kræver.
## Forudsætninger
-- Azure abonnement med adgang til Azure OpenAI
+- Azure-abonnement med adgang til Azure OpenAI
- Java 21, Maven 3.9+
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
-> **Note:** Java, Maven, Azure CLI og Azure Developer CLI (azd) er forhåndsinstalleret i den medfølgende devcontainer.
+> **Note:** Java, Maven, Azure CLI og Azure Developer CLI (azd) er forudinstalleret i den medfølgende devcontainer.
-> **Note:** Dette modul bruger GPT-5.2 på Azure OpenAI. Deployeringen konfigureres automatisk via `azd up` - ændr ikke modelnavnet i koden.
+> **Note:** Dette modul bruger GPT-5.2 på Azure OpenAI. Udrulningen konfigureres automatisk via `azd up` - ændr ikke modelnavnet i koden.
-## Forståelse af det centrale problem
+## Forståelse af kernproblemet
-Sprogbaserede modeller er stateless. Hver API-anmodning er uafhængig. Hvis du sender "Mit navn er John" og derefter spørger "Hvad er mit navn?", har modellen ingen idé om, at du lige har præsenteret dig. Den behandler hver forespørgsel, som om det er den første samtale, du nogensinde har haft.
+Sprogmodeller er stateless. Hver API-kald er uafhængigt. Hvis du sender "Mit navn er John" og derefter spørger "Hvad er mit navn?", så har modellen ingen idé om, at du lige har præsenteret dig. Den behandler hver forespørgsel som om, det er den første samtale, du nogensinde har haft.
-Det fungerer fint til simple Q&A, men er ubrugeligt til rigtige applikationer. Kundeservice-bots skal huske, hvad du fortalte dem. Personlige assistenter har brug for kontekst. Enhver samtale med flere omgange kræver hukommelse.
+Det fungerer fint til simpel spørgsmål-og-svar, men er ubrugeligt til rigtige applikationer. Kundeservice-bots skal kunne huske, hvad du har fortalt dem. Personlige assistenter har brug for kontekst. Enhver samtale med flere runder kræver hukommelse.
-Diagrammet nedenfor kontrasterer de to tilgange — til venstre, et stateless kald, som glemmer dit navn; til højre, et stateful kald med ChatMemory, der husker det.
+Følgende diagram viser kontrasten mellem de to tilgange — til venstre et stateless kald, der glemmer dit navn; til højre et stateful kald understøttet af ChatMemory, der husker det.
-*Forskellen mellem stateless (uafhængige kald) og stateful (kontekstbevidste) samtaler*
+*Forskellen mellem stateless (uafhængige kald) og stateful (kontekst-aware) samtaler*
## Forståelse af tokens
-Før vi dykker ned i samtaler, er det vigtigt at forstå tokens - de grundlæggende enheder af tekst som sprogmodeller behandler:
+Før vi dykker ned i samtaler, er det vigtigt at forstå tokens - de grundlæggende enheder af tekst, som sprogmodeller behandler:
-*Eksempel på hvordan tekst brydes i tokens - "I love AI!" bliver til 4 separate behandlingsenheder*
+*Eksempel på, hvordan tekst opdeles i tokens - "I love AI!" bliver til 4 separate behandlingsenheder*
-Tokens er, hvordan AI-modeller måler og behandler tekst. Ord, tegnsætning og endda mellemrum kan være tokens. Din model har en grænse for, hvor mange tokens den kan behandle ad gangen (400.000 for GPT-5.2, med op til 272.000 input-tokens og 128.000 output-tokens). At forstå tokens hjælper dig med at styre samtalens længde og omkostninger.
+Tokens er, hvordan AI-modeller måler og behandler tekst. Ord, tegnsætning og endda mellemrum kan være tokens. Din model har et maksimum for, hvor mange tokens den kan behandle på en gang (400.000 for GPT-5.2, med op til 272.000 input tokens og 128.000 output tokens). Forståelsen af tokens hjælper dig med at håndtere samtalens længde og omkostninger.
## Hvordan hukommelse fungerer
-Chat memory løser det stateless problem ved at bevare samtalehistorik. Inden du sender din forespørgsel til modellen, tilføjer frameworket relevante tidligere beskeder forrest. Når du spørger "Hvad er mit navn?", sender systemet faktisk hele samtalehistorikken, så modellen kan se, at du tidligere sagde "Mit navn er John."
+Chat hukommelse løser det stateless problem ved at bevare samtalehistorik. Før du sender din forespørgsel til modellen, tilføjer frameworket relevante tidligere beskeder forrest. Når du spørger "Hvad er mit navn?", sender systemet faktisk hele samtalehistorikken, så modellen kan se, at du tidligere sagde "Mit navn er John."
-LangChain4j leverer hukommelsesimplementeringer, som håndterer dette automatisk. Du vælger, hvor mange beskeder der skal bevares, og frameworket styrer kontekstvinduet. Diagrammet nedenfor viser, hvordan MessageWindowChatMemory opretholder et glidende vindue med nylige beskeder.
+LangChain4j tilbyder hukommelsesimplementationer, der håndterer dette automatisk. Du vælger, hvor mange beskeder, der skal gemmes, og frameworket styrer kontekstvinduet. Diagrammet nedenfor viser, hvordan MessageWindowChatMemory bevarer et glidende vindue over nylige beskeder.
-*MessageWindowChatMemory opretholder et glidende vindue af nylige beskeder, og fjerner automatisk gamle*
+*MessageWindowChatMemory bevarer et glidende vindue over nylige beskeder og fjerner automatisk gamle*
## Hvordan dette bruger LangChain4j
-Dette modul udvider quick start med integration af Spring Boot og tilføjelse af samtalehukommelse. Sådan passer delene sammen:
+Dette modul integrerer Spring Boot og tilføjer samtalehukommelse. Sådan passer brikkerne sammen:
**Afhængigheder** - Tilføj to LangChain4j biblioteker:
@@ -109,7 +109,7 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-Builderen læser legitimationsoplysninger fra miljøvariabler sat af `azd up`. Ved at sætte `baseUrl` til din Azure-endpoint får OpenAI-klienten til at fungere med Azure OpenAI.
+Builderen læser legitimationsoplysninger fra miljøvariabler sat af `azd up`. Ved at sætte `baseUrl` til dit Azure-endpoint får OpenAI klienten til at arbejde med Azure OpenAI.
**Samtalehukommelse** - Spor chat historik med MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
@@ -124,21 +124,21 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-Opret hukommelse med `withMaxMessages(10)` for at beholde de sidste 10 beskeder. Tilføj bruger- og AI-beskeder med typede wrappers: `UserMessage.from(text)` og `AiMessage.from(text)`. Hent historik med `memory.messages()` og send den til modellen. Servicen lagrer separate hukommelsesinstanser pr. samtale-ID, så flere brugere kan chatte samtidigt.
+Opret hukommelse med `withMaxMessages(10)` for at beholde de sidste 10 beskeder. Tilføj bruger- og AI-beskeder med typede wrapper: `UserMessage.from(text)` og `AiMessage.from(text)`. Hent historik med `memory.messages()` og send den til modellen. Servicen gemmer separate hukommelsesinstanser per samtale-id, så flere brugere kan chatte samtidigt.
> **🤖 Prøv med [GitHub Copilot](https://github.com/features/copilot) Chat:** Åbn [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) og spørg:
-> - "Hvordan beslutter MessageWindowChatMemory, hvilke beskeder der skal droppes, når vinduet er fuldt?"
-> - "Kan jeg implementere tilpasset hukommelseslagring ved brug af en database i stedet for in-memory?"
-> - "Hvordan kan jeg tilføje opsummering for at komprimere gammel samtalehistorik?"
+> - "Hvordan beslutter MessageWindowChatMemory, hvilke beskeder der droppes, når vinduet er fuldt?"
+> - "Kan jeg implementere brugerdefineret hukommelseslagring ved hjælp af en database i stedet for i hukommelsen?"
+> - "Hvordan ville jeg tilføje opsummering for at komprimere gammel samtalehistorik?"
-Den stateless chat endpoint springer hukommelsen helt over - bare `chatModel.chat(prompt)` som i quick start. Den stateful endpoint tilføjer beskeder til hukommelsen, henter historik og medtager den kontekst med hver anmodning. Samme modelkonfiguration, forskellige mønstre.
+Den stateless chat endepunkt springer hukommelse over - bare `chatModel.chat(prompt)` som i hurtigstarten. Det stateful endepunkt tilføjer beskeder til hukommelse, henter historik og inkluderer denne kontekst med hver forespørgsel. Samme modelkonfiguration, forskellige mønstre.
-## Deploy Azure OpenAI infrastruktur
+## Udrul Azure OpenAI infrastruktur
**Bash:**
```bash
cd 01-introduction
-azd up # Vælg abonnement og placering (anbefales eastus2)
+azd up # Vælg abonnement og placering (eastus2 anbefales)
```
**PowerShell:**
@@ -147,16 +147,16 @@ cd 01-introduction
azd up # Vælg abonnement og placering (eastus2 anbefales)
```
-> **Note:** Hvis du støder på timeout-fejl (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), så kør blot `azd up` igen. Azure-ressourcer kan stadig være under provisionering i baggrunden, og et genkald tillader deployeringen at fuldføres, når ressourcerne når en terminal tilstand.
+> **Note:** Hvis du støder på en timeout-fejl (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), så kør blot `azd up` igen. Azure-ressourcer kan stadig provisioneres i baggrunden, og et genforsøg tillader, at udrulningen fuldføres, når ressourcerne når en terminal tilstand.
Dette vil:
-1. Deployere Azure OpenAI-ressource med GPT-5.2 og text-embedding-3-small modeller
-2. Automatisk generere `.env` fil i projektets rod med legitimationsoplysninger
-3. Sætte alle nødvendige miljøvariabler op
+1. Udrulle Azure OpenAI-ressource med GPT-5.2 og text-embedding-3-small modeller
+2. Automatisk generere `.env`-fil i projektroden med legitimationsoplysninger
+3. Opsætte alle nødvendige miljøvariabler
-**Har du problemer med deployment?** Se [Infrastructure README](infra/README.md) for detaljeret fejlfinding inklusive subdomænenavnkonflikter, manuelle Azure Portal deploy-trin og modelkonfigurationsvejledning.
+**Problemer med udrulning?** Se [Infrastructure README](infra/README.md) for detaljeret fejlfinding inklusive konflikter i subdomænenavne, manuelle Azure Portal udrulningstrin og vejledning i modelkonfiguration.
-**Bekræft at deployment lykkedes:**
+**Bekræft at udrulningen lykkedes:**
**Bash:**
```bash
@@ -168,7 +168,7 @@ cat ../.env # Skal vise AZURE_OPENAI_ENDPOINT, API_KEY osv.
Get-Content ..\.env # Skal vise AZURE_OPENAI_ENDPOINT, API_KEY osv.
```
-> **Note:** `azd up` kommandoen genererer automatisk `.env` filen. Hvis du har brug for at opdatere den senere, kan du enten redigere `.env` filen manuelt eller regenerere den ved at køre:
+> **Note:** `azd up`-kommandoen genererer automatisk `.env`-filen. Hvis du skal opdatere den senere, kan du enten redigere `.env`-filen manuelt eller regenerere den ved at køre:
>
> **Bash:**
> ```bash
@@ -184,9 +184,9 @@ Get-Content ..\.env # Skal vise AZURE_OPENAI_ENDPOINT, API_KEY osv.
## Kør applikationen lokalt
-**Bekræft deployment:**
+**Bekræft udrulning:**
-Sørg for at `.env` filen findes i rodmappen med Azure legitimationsoplysninger. Kør dette fra modulets bibliotek (`01-introduction/`):
+Sørg for, at `.env`-filen findes i roddirektoret med Azure-legitimationsoplysninger. Kør dette fra modulets mappe (`01-introduction/`):
**Bash:**
```bash
@@ -200,35 +200,35 @@ Get-Content ..\.env # Skal vise AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
**Start applikationerne:**
-**Mulighed 1: Brug Spring Boot Dashboard (Anbefalet til VS Code brugere)**
+**Valgmulighed 1: Brug Spring Boot Dashboard (anbefales til VS Code brugere)**
-Dev containeren inkluderer Spring Boot Dashboard extension, som giver et visuelt interface til at styre alle Spring Boot applikationer. Du finder det i Aktivitetspanelet til venstre i VS Code (se efter Spring Boot-ikonet).
+Dev containeren inkluderer Spring Boot Dashboard-udvidelsen, som giver en visuel grænseflade til at styre alle Spring Boot applikationer. Du finder den i aktivitetslinjen til venstre i VS Code (se efter Spring Boot-ikonet).
Fra Spring Boot Dashboard kan du:
- Se alle tilgængelige Spring Boot applikationer i workspace
- Starte/stoppe applikationer med et enkelt klik
-- Se applikationslogs i realtid
-- Overvåge applikationens status
+- Se applikationslogfiler i realtid
+- Overvåge applikationers status
-Klik blot på play-knappen ved siden af "introduction" for at starte dette modul, eller start alle moduler på én gang.
+Klik blot på play-knappen ved siden af "introduction" for at starte dette modul, eller start alle moduler samlet.
*Spring Boot Dashboard i VS Code — start, stop og overvåg alle moduler fra ét sted*
-**Mulighed 2: Brug shell scripts**
+**Valgmulighed 2: Brug shell scripts**
Start alle webapplikationer (moduler 01-04):
**Bash:**
```bash
-cd .. # Fra roddirektoriet
+cd .. # Fra rodmappen
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # Fra roddirectory
+cd .. # Fra rodmappen
.\start-all.ps1
```
@@ -246,9 +246,9 @@ cd 01-introduction
.\start.ps1
```
-Begge scripts indlæser automatisk miljøvariabler fra rodens `.env` fil og bygger JAR-filerne, hvis de ikke findes.
+Begge scripts indlæser automatisk miljøvariabler fra roden `.env`-filen og bygger JAR-filerne, hvis de ikke findes.
-> **Note:** Foretrækker du at bygge alle moduler manuelt før start:
+> **Note:** Hvis du foretrækker at bygge alle moduler manuelt inden start:
>
> **Bash:**
> ```bash
@@ -282,29 +282,29 @@ cd ..; .\stop-all.ps1 # Alle moduler
## Brug af applikationen
-Applikationen tilbyder et webinterface med to chat-implementeringer side om side.
+Applikationen tilbyder en webgrænseflade med to chat-implementeringer side om side.
-*Dashboard, der viser både Simple Chat (stateless) og Conversational Chat (stateful) muligheder*
+*Dashboard der viser både Simple Chat (stateless) og Conversational Chat (stateful) muligheder*
-### Stateless chat (venstre panel)
+### Stateless Chat (venstre panel)
-Prøv dette først. Spørg "Mit navn er John" og spørg så straks "Hvad er mit navn?" Modellen vil ikke huske, fordi hver besked er uafhængig. Dette demonstrerer det centrale problem med grundlæggende sprogmodel-integration - ingen samtalekontekst.
+Prøv dette først. Sig "Mit navn er John" og spørg så straks "Hvad er mit navn?" Modellen vil ikke huske det, fordi hver besked er uafhængig. Dette demonstrerer kernproblemet med basal sprogmodelintegration - ingen kontekst i samtalen.
-*AI husker ikke dit navn fra den forrige besked*
+*AI husker ikke dit navn fra den foregående besked*
-### Stateful chat (højre panel)
+### Stateful Chat (højre panel)
-Prøv nu samme sekvens her. Spørg "Mit navn er John" og dernæst "Hvad er mit navn?" Denne gang husker den. Forskellen er MessageWindowChatMemory - den bevarer samtalehistorik og inkluderer den med hver anmodning. Det er sådan produktionssamtale-AI fungerer.
+Prøv samme sekvens her. Sig "Mit navn er John" og spørg derefter "Hvad er mit navn?" Denne gang husker den det. Forskellen er MessageWindowChatMemory - den bevarer samtalehistorik og inkluderer den med hver forespørgsel. Sådan fungerer produktionsklar konversations-AI.
*AI husker dit navn fra tidligere i samtalen*
-Begge paneler bruger samme GPT-5.2 model. Den eneste forskel er hukommelsen. Det gør det klart, hvad hukommelse bringer til din applikation, og hvorfor det er essentielt til virkelige brugssager.
+Begge paneler bruger samme GPT-5.2 model. Den eneste forskel er hukommelse. Det gør det tydeligt, hvad hukommelsen tilfører din applikation, og hvorfor det er essentielt til rigtige brugssituationer.
## Næste skridt
@@ -312,11 +312,11 @@ Begge paneler bruger samme GPT-5.2 model. Den eneste forskel er hukommelsen. Det
---
-**Navigation:** [← Forrige: Modul 00 - Quick Start](../00-quick-start/README.md) | [Tilbage til hovedmenu](../README.md) | [Næste: Modul 02 - Prompt Engineering →](../02-prompt-engineering/README.md)
+**Navigation:** [← Tilbage til hoved](../README.md) | [Næste: Modul 02 - Prompt Engineering →](../02-prompt-engineering/README.md)
---
**Ansvarsfraskrivelse**:
-Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi stræber efter nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på dets modersmål bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for misforståelser eller fejltolkninger, der opstår ved brug af denne oversættelse.
+Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.
\ No newline at end of file
diff --git a/translations/da/02-prompt-engineering/README.md b/translations/da/02-prompt-engineering/README.md
index 8b4040ca2..02893550e 100644
--- a/translations/da/02-prompt-engineering/README.md
+++ b/translations/da/02-prompt-engineering/README.md
@@ -2,84 +2,84 @@
## Indholdsfortegnelse
-- [Video Gennemgang](../../../02-prompt-engineering)
-- [Det Du Vil Lære](../../../02-prompt-engineering)
-- [Forudsætninger](../../../02-prompt-engineering)
-- [Forståelse af Prompt Engineering](../../../02-prompt-engineering)
-- [Grundlæggende Prompt Engineering](../../../02-prompt-engineering)
- - [Zero-Shot Prompting](../../../02-prompt-engineering)
- - [Few-Shot Prompting](../../../02-prompt-engineering)
- - [Chain of Thought](../../../02-prompt-engineering)
- - [Role-Based Prompting](../../../02-prompt-engineering)
- - [Prompt Skabeloner](../../../02-prompt-engineering)
-- [Avancerede Mønstre](../../../02-prompt-engineering)
-- [Kør Applikationen](../../../02-prompt-engineering)
-- [Applikationsskærmbilleder](../../../02-prompt-engineering)
-- [Udforskning af Mønstrene](../../../02-prompt-engineering)
- - [Lav vs Høj Iver](../../../02-prompt-engineering)
- - [Opgaveudførelse (Tool Preambles)](../../../02-prompt-engineering)
- - [Selvreflekterende Kode](../../../02-prompt-engineering)
- - [Struktureret Analyse](../../../02-prompt-engineering)
- - [Multi-Turn Chat](../../../02-prompt-engineering)
- - [Trin-for-Trin Resonnering](../../../02-prompt-engineering)
- - [Begrænset Output](../../../02-prompt-engineering)
-- [Hvad Du Virkelig Lærer](../../../02-prompt-engineering)
-- [Næste Skridt](../../../02-prompt-engineering)
+- [Video Gennemgang](#video-gennemgang)
+- [Hvad Du Vil Lære](#hvad-du-vil-lære)
+- [Forudsætninger](#forudsætninger)
+- [Forståelse af Prompt Engineering](#forståelse-af-prompt-engineering)
+- [Grundlæggende om Prompt Engineering](#grundlæggende-om-prompt-engineering)
+ - [Zero-Shot Prompting](#zero-shot-prompting)
+ - [Few-Shot Prompting](#few-shot-prompting)
+ - [Chain of Thought](#chain-of-thought)
+ - [Role-Based Prompting](#role-based-prompting)
+ - [Prompt Skabeloner](#prompt-skabeloner)
+- [Avancerede Mønstre](#avancerede-mønstre)
+- [Kør Applikationen](#kør-applikationen)
+- [Skærmbilleder fra Applikationen](#applikationsskærmbilleder)
+- [Udforskning af Mønstrene](#undersøgelse-af-mønstrene)
+ - [Lav vs Høj Iver](#lav-vs-høj-eagerness)
+ - [Opgaveudførelse (Værktøjspreambler)](#opgaveudførelse-værktøjsappel)
+ - [Selvreflekterende Kode](#selvreflekterende-kode)
+ - [Struktureret Analyse](#struktureret-analyse)
+ - [Multi-Turn Chat](#multi-turn-chat)
+ - [Trin-for-Trin Resonnement](#trin-for-trin-ræsonnement)
+ - [Begrænset Output](#begrænset-output)
+- [Hvad Du Virkelig Lærer](#hvad-du-virkelig-lærer)
+- [Næste Skridt](#næste-skridt)
## Video Gennemgang
-Se denne live-session, der forklarer, hvordan du kommer i gang med dette modul:
+Se denne live session, der forklarer, hvordan du kommer i gang med dette modul:
-## Det Du Vil Lære
+## Hvad Du Vil Lære
-Følgende diagram giver et overblik over de nøgleemner og færdigheder, du vil udvikle i dette modul — fra promptforfiningsteknikker til den trin-for-trin arbejdsgang, du vil følge.
+Følgende diagram giver en oversigt over de nøgleemner og færdigheder, du vil udvikle i dette modul — fra teknikker til forfining af prompts til den trin-for-trin arbejdsproces, du skal følge.
-I de tidligere moduler undersøgte du grundlæggende LangChain4j-interaktioner med GitHub-modeller og så, hvordan hukommelse muliggør konversationel AI med Azure OpenAI. Nu vil vi fokusere på, hvordan du stiller spørgsmål — selve promptene — ved brug af Azure OpenAI's GPT-5.2. Den måde, du strukturerer dine prompts på, påvirker dramatisk kvaliteten af de svar, du får. Vi starter med en gennemgang af de fundamentale prompting-teknikker og går derefter videre til otte avancerede mønstre, der udnytter GPT-5.2's kapaciteter fuldt ud.
+I det forrige modul så du, hvordan hukommelse muliggør konverserende AI med Azure OpenAI. Nu fokuserer vi på, hvordan du stiller spørgsmål — selve prompts — ved brug af Azure OpenAI's GPT-5.2. Måden, du strukturerer dine prompts på, har stor betydning for kvaliteten af de svar, du får. Vi starter med en gennemgang af de grundlæggende promptingsteknikker og bevæger os derefter videre til otte avancerede mønstre, der udnytter GPT-5.2's muligheder fuldt ud.
-Vi bruger GPT-5.2, fordi den introducerer kontrol over ræsonnement - du kan fortælle modellen, hvor meget tænkning der skal foretages, før den svarer. Dette gør forskellige prompting-strategier mere tydelige og hjælper dig med at forstå, hvornår hver tilgang skal anvendes. Vi vil også drage fordel af Azures færre hastighedsbegrænsninger for GPT-5.2 sammenlignet med GitHub models.
+Vi bruger GPT-5.2, fordi den introducerer styring af resonnement - du kan fortælle modellen, hvor meget den skal tænke, før den svarer. Det gør forskellige promptingstrategier mere tydelige og hjælper dig med at forstå, hvornår du skal bruge hvilken tilgang.
## Forudsætninger
-- Gennemført Modul 01 (Azure OpenAI ressourcer implementeret)
+- Afsluttet Modul 01 (Azure OpenAI-ressourcer deployeret)
- `.env` fil i rodmappen med Azure legitimationsoplysninger (oprettet via `azd up` i Modul 01)
-> **Note:** Hvis du ikke har gennemført Modul 01, følg først implementeringsinstruktionerne der.
+> **Note:** Hvis du ikke har gennemført Modul 01, følg først deployeringsinstruktionerne der.
## Forståelse af Prompt Engineering
-I sin kerne er prompt engineering forskellen mellem vage instruktioner og præcise, som sammenligningen nedenfor illustrerer.
+I sin kerne er prompt engineering forskellen mellem vage instruktioner og præcise instruktioner, som sammenligningen nedenfor illustrerer.
-Prompt engineering handler om at designe inputtekst, der konsekvent giver dig de resultater, du har brug for. Det handler ikke kun om at stille spørgsmål - det handler om at strukturere forespørgsler, så modellen forstår præcis, hvad du vil, og hvordan det skal leveres.
+Prompt engineering handler om at designe inputtekst, der konsekvent giver dig de resultater, du har brug for. Det handler ikke kun om at stille spørgsmål - det handler om at strukturere anmodninger, så modellen præcist forstår, hvad du vil, og hvordan det skal leveres.
-Tænk på det som at give instruktioner til en kollega. "Fix fejlen" er vag. "Fix null-pointer exception i UserService.java linje 45 ved at tilføje en null-tjek" er specifik. Sprogmodeller fungerer på samme måde - specificitet og struktur betyder noget.
+Tænk på det som at give instruktioner til en kollega. "Fix fejlen" er vagt. "Ret null pointer exception i UserService.java linje 45 ved at tilføje en nul-tjek" er specifikt. Sprogmodeller fungerer på samme måde - specificitet og struktur er vigtigt.
-Diagrammet nedenfor viser, hvordan LangChain4j passer ind i dette billede — ved at forbinde dine promptmønstre til modellen gennem SystemMessage og UserMessage byggesten.
+Diagrammet nedenfor viser, hvordan LangChain4j passer ind i dette billede — ved at forbinde dine prompt-mønstre til modellen gennem SystemMessage og UserMessage byggeklodser.
-LangChain4j leverer infrastrukturen — modelforbindelser, hukommelse og meddelelsestyper — mens promptmønstre blot er nøje struktureret tekst, du sender gennem infrastrukturen. De nøglebyggesten er `SystemMessage` (som sætter AI’ens adfærd og rolle) og `UserMessage` (som indeholder din faktiske forespørgsel).
+LangChain4j leverer infrastrukturen — modelforbindelser, hukommelse og beskedtyper — mens promptmønstre blot er omhyggeligt struktureret tekst, du sender gennem denne infrastruktur. De vigtigste byggeklodser er `SystemMessage` (som sætter AI'ens adfærd og rolle) og `UserMessage` (som bærer din faktiske anmodning).
-## Grundlæggende Prompt Engineering
+## Grundlæggende om Prompt Engineering
-De fem kerne-teknikker vist nedenfor udgør fundamentet for effektiv prompt engineering. Hver adresserer en anden del af, hvordan du kommunikerer med sprogmodeller.
+De fem kerne-teknikker vist nedenfor udgør fundamentet for effektiv prompt engineering. Hver af dem adresserer en forskellig del af, hvordan du kommunikerer med sprogmodeller.
-Før vi dykker ned i de avancerede mønstre i dette modul, lad os gennemgå fem grundlæggende prompting-teknikker. Disse er byggesten, som enhver promptingeniør bør kende. Hvis du allerede har arbejdet med [Quick Start modulet](../00-quick-start/README.md#2-prompt-patterns), har du set dem i praksis — her er det konceptuelle grundlag bag dem.
+Før vi dykker ned i de avancerede mønstre i dette modul, lad os gennemgå fem grundlæggende promptingsteknikker. Det er byggeklodser, som enhver prompt engineer bør kende.
### Zero-Shot Prompting
-Den simpleste tilgang: giv modellen en direkte instruktion uden eksempler. Modellen baserer sig udelukkende på sin træning for at forstå og udføre opgaven. Dette fungerer godt for ligetil forespørgsler, hvor den forventede adfærd er åbenlys.
+Den simpleste tilgang: giv modellen en direkte instruktion uden eksempler. Modellen stoler fuldstændigt på sin træning for at forstå og udføre opgaven. Dette fungerer godt for direkte anmodninger, hvor forventet adfærd er åbenlys.
-*Direkte instruktion uden eksempler — modellen tolker opgaven ud fra instruktionen alene*
+*Direkte instruktion uden eksempler — modellen udleder opgaven alene ud fra instruktionen*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
@@ -87,15 +87,15 @@ String response = model.chat(prompt);
// Svar: "Positiv"
```
-**Hvornår man skal bruge:** Enkle klassifikationer, direkte spørgsmål, oversættelser eller enhver opgave, modellen kan håndtere uden yderligere vejledning.
+**Hvornår man skal bruge:** Enkle klassifikationer, direkte spørgsmål, oversættelser eller enhver opgave, som modellen kan håndtere uden yderligere vejledning.
### Few-Shot Prompting
-Giv eksempler, der demonstrerer det mønster, du vil have modellen til at følge. Modellen lærer det forventede input-output-format fra dine eksempler og anvender det på nye input. Dette forbedrer dramatisk konsistensen for opgaver, hvor det ønskede format eller adfærd ikke er åbenlys.
+Giv eksempler, der demonstrerer det mønster, du vil have modellen til at følge. Modellen lærer det forventede input-output format fra dine eksempler og anvender det på nye inputs. Dette forbedrer markant konsistensen for opgaver, hvor det ønskede format eller adfærd ikke er åbenlyst.
-*Læring fra eksempler — modellen identificerer mønsteret og anvender det på nye input*
+*Læring fra eksempler — modellen identificerer mønsteret og anvender det på nye inputs*
```java
String prompt = """
@@ -112,15 +112,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Hvornår man skal bruge:** Tilpassede klassifikationer, konsistent formatering, domænespecifikke opgaver eller når zero-shot resultater er inkonsistente.
+**Hvornår man skal bruge:** Tilpassede klassifikationer, konsekvent formatering, domænespecifikke opgaver eller når zero-shot resultater er inkonsistente.
### Chain of Thought
-Bed modellen om at vise sin ræsonnering trin-for-trin. I stedet for at springe direkte til et svar, nedbryder modellen problemet og arbejder gennem hver del eksplicit. Dette forbedrer nøjagtigheden på matematik, logik og komplekse ræsonnement-opgaver.
+Bed modellen om at vise sit resonnement trin-for-trin. I stedet for at hoppe direkte til et svar, bryder modellen problemet ned og arbejder gennem hver del eksplicit. Dette øger nøjagtigheden på matematiske, logiske og flerstegs resoneringsopgaver.
-*Trinvis ræsonnering — nedbrydning af komplekse problemer i eksplicitte logiske trin*
+*Trin-for-trin resonnement — opdeling af komplekse problemer i eksplicitte logiske trin*
```java
String prompt = """
@@ -133,15 +133,15 @@ String response = model.chat(prompt);
// Modellen viser: 15 - 8 = 7, derefter 7 + 12 = 19 æbler
```
-**Hvornår man skal bruge:** Matematikopgaver, logikpuslespil, fejlfinding eller enhver opgave, hvor det at vise ræsonnementet forbedrer nøjagtigheden og tilliden.
+**Hvornår man skal bruge:** Matematikopgaver, logikpuslespil, fejlfinding eller enhver opgave, hvor visning af resonnementet forbedrer nøjagtighed og tillid.
### Role-Based Prompting
-Sæt en persona eller rolle på AI’en, før du stiller dit spørgsmål. Dette giver kontekst, som former tonen, dybden og fokus i svaret. En "softwarearkitekt" giver anderledes rådgivning end en "juniorudvikler" eller en "sikkerhedsauditor".
+Opsæt en persona eller rolle for AI'en, før du stiller dit spørgsmål. Dette giver kontekst, som former tone, dybde og fokus i svaret. En "softwarearkitekt" giver andre råd end en "juniorudvikler" eller en "sikkerhedsrevisor".
-*Sætter kontekst og persona — det samme spørgsmål får et forskelligt svar afhængigt af den tildelte rolle*
+*Opsætning af kontekst og persona — det samme spørgsmål får forskellige svar afhængigt af den tildelte rolle*
```java
String prompt = """
@@ -157,11 +157,11 @@ String prompt = """
String response = model.chat(prompt);
```
-**Hvornår man skal bruge:** Code reviews, vejledning, domænespecifik analyse eller når du har brug for svar tilpasset en bestemt ekspertisegrad eller perspektiv.
+**Hvornår man skal bruge:** Kodegennemgange, undervisning, domænespecifik analyse eller når du har brug for svar, der er tilpasset et bestemt ekspertiseniveau eller perspektiv.
### Prompt Skabeloner
-Lav genanvendelige prompts med variable pladsholdere. I stedet for at skrive en ny prompt hver gang, definer én skabelon og udfyld forskellige værdier. LangChain4j's `PromptTemplate` klasse gør dette nemt med `{{variable}}` syntaks.
+Opret genanvendelige prompts med variable pladsholdere. I stedet for at skrive en ny prompt hver gang, definer en skabelon én gang og udfyld forskellige værdier. LangChain4j's `PromptTemplate` klasse gør dette nemt med `{{variable}}` syntaks.
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**Hvornår man skal bruge:** Gentagne forespørgsler med forskellige input, batch-behandling, opbygning af genanvendelige AI-arbejdsgange eller enhver situation, hvor promptstrukturen forbliver den samme, men dataene ændres.
+**Hvornår man skal bruge:** Gentagne forespørgsler med forskellige inputs, batch behandling, opbygning af genanvendelige AI-arbejdsprocesser eller enhver situation, hvor promptens struktur forbliver den samme, men dataene ændres.
---
-Disse fem grundprincipper giver dig et solidt værktøjssæt til de fleste prompting-opgaver. Resten af dette modul bygger videre på dem med **otte avancerede mønstre**, der udnytter GPT-5.2's kontrol over ræsonnement, selvevaluering og struktureret output.
+Disse fem grundlæggende teknikker giver dig et solidt værktøjssæt til de fleste prompting-opgaver. Resten af dette modul bygger videre på dem med **otte avancerede mønstre**, der udnytter GPT-5.2's evne til resonnementstyring, selvevaluering og struktureret output.
## Avancerede Mønstre
-Med grundprincipperne dækket, lad os gå over til de otte avancerede mønstre, der gør dette modul unikt. Ikke alle problemer kræver den samme tilgang. Nogle spørgsmål kræver hurtige svar, andre dyb tænkning. Nogle kræver synligt ræsonnement, andre blot resultater. Hvert mønster nedenfor er optimeret til en forskellig situation — og GPT-5.2's ræsonnementskontrol gør forskellene endnu mere tydelige.
+Med grundlaget på plads, lad os gå til de otte avancerede mønstre, der gør dette modul unikt. Ikke alle problemer kræver den samme tilgang. Nogle spørgsmål kræver hurtige svar, andre dyb tænkning. Nogle behøver synligt resonnement, andre kun resultater. Hvert mønster nedenfor er optimeret til et forskelligt scenarie — og GPT-5.2's resonnementstyring gør forskellene endnu mere markante.
-*Oversigt over de otte prompt engineering mønstre og deres brugsscenarier*
+*Oversigt over de otte prompt engineering mønstre og deres anvendelsestilfælde*
-GPT-5.2 tilføjer dimensionen *ræsonnementskontrol* til disse mønstre. Slideren nedenfor viser, hvordan du kan justere modellens tænkearbejde — fra hurtige, direkte svar til dyb, grundig analyse.
+GPT-5.2 tilføjer en ekstra dimension til disse mønstre: *resonnementstyring*. Skyderen nedenfor viser, hvordan du kan justere modellens tænkeindsats — fra hurtige, direkte svar til dyb, grundig analyse.
-*GPT-5.2's ræsonnementskontrol lader dig specificere, hvor meget tænkning modellen skal gøre — fra hurtige, direkte svar til dyb udforskning*
+*GPT-5.2's resonnementstyring lader dig specificere, hvor meget modellen skal tænke — fra hurtige direkte svar til dyb udforskning*
-**Lav Iver (Hurtigt & Fokuseret)** - Til simple spørgsmål, hvor du ønsker hurtige, direkte svar. Modellen udfører minimal ræsonnering - maks 2 trin. Brug dette til beregninger, opslag eller ligetil spørgsmål.
+**Lav Iver (Hurtigt & Fokuseret)** - Til simple spørgsmål, hvor du ønsker hurtige, direkte svar. Modellen foretager minimal resonnement - maksimalt 2 trin. Brug dette til beregninger, opslag eller ligetil spørgsmål.
```java
String prompt = """
@@ -220,11 +220,11 @@ String response = chatModel.chat(prompt);
```
> 💡 **Udforsk med GitHub Copilot:** Åbn [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) og spørg:
-> - "Hvad er forskellen på lav og høj iver i prompting-mønstre?"
-> - "Hvordan hjælper XML-tags i prompts med at strukturere AI’ens svar?"
-> - "Hvornår skal jeg bruge selvrefleksion fremfor direkte instruktion?"
+> - "Hvad er forskellen på lav iver og høj iver prompting mønstre?"
+> - "Hvordan hjælper XML-tags i prompts med at strukturere AI'ens svar?"
+> - "Hvornår skal jeg bruge selvrefleksion vs direkte instruktion?"
-**Høj Iver (Dyb & Grundig)** - Til komplekse problemer, hvor du ønsker dybdegående analyse. Modellen udforsker grundigt og viser detaljeret ræsonnering. Brug dette til systemdesign, arkitekturvalg eller kompleks forskning.
+**Høj Iver (Dyb & Grundig)** - Til komplekse problemer, hvor du ønsker grundig analyse. Modellen udforsker grundigt og viser detaljeret resonnement. Brug dette til systemdesign, arkitekturvalg eller kompleks forskning.
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**Opgaveudførelse (Trin-for-Trin Fremdrift)** - Til multi-trins arbejdsgange. Modellen giver en forudgående plan, fortæller om hvert trin undervejs, og afslutter med en opsummering. Brug dette til migreringer, implementeringer eller enhver fler-trins proces.
+**Opgaveudførelse (Trin-for-Trin Fremdrift)** - Til flerstegs arbejdsprocesser. Modellen giver en plan på forhånd, fortæller om hvert trin under arbejdet, og giver en opsummering til sidst. Brug dette til migrationer, implementeringer eller enhver flerstegsprocedure.
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Chain-of-Thought prompting beder eksplicit modellen om at vise sin ræsonneringsproces, hvilket forbedrer nøjagtigheden ved komplekse opgaver. Den trin-for-trin nedbrydning hjælper både mennesker og AI med at forstå logikken.
+Chain-of-Thought prompting beder eksplicit modellen om at vise sit resonnement, hvilket forbedrer nøjagtigheden for komplekse opgaver. Opdeling trin-for-trin hjælper både mennesker og AI til at forstå logikken.
-> **🤖 Prøv med [GitHub Copilot](https://github.com/features/copilot) Chat:** Spørg ind til dette mønster:
-> - "Hvordan kan jeg tilpasse opgaveudførelsesmønstret til langvarige operationer?"
-> - "Hvad er bedste praksis til at strukturere tool preambles i produktionsapplikationer?"
-> - "Hvordan kan jeg fange og vise mellemliggende fremdriftsopdateringer i en UI?"
+> **🤖 Prøv med [GitHub Copilot](https://github.com/features/copilot) Chat:** Spørg om dette mønster:
+> - "Hvordan kan jeg tilpasse opgaveudførelsesmønsteret til langvarige operationer?"
+> - "Hvad er bedste praksis for strukturering af værktøjspreambler i produktionsapplikationer?"
+> - "Hvordan kan jeg fange og vise mellemstatus-opdateringer i et UI?"
-Diagrammet nedenfor illustrerer denne Plan → Udfør → Opsummer arbejdsgang.
+Diagrammet nedenfor illustrerer denne Planlæg → Udfør → Opsummer arbejdsproces.
-*Plan → Udfør → Opsummer arbejdsgang for fler-trins opgaver*
+*Planlæg → Udfør → Opsummer arbejdsproces for flerstegsopgaver*
-**Selvreflekterende Kode** - Til generering af produktionsklar kode. Modellen genererer kode, der følger produktionsstandarder med korrekt fejlhåndtering. Brug dette når du bygger nye funktioner eller services.
+**Selvreflekterende Kode** - Til generering af produktionsklar kode. Modellen genererer kode efter produktionsstandarder med korrekt fejlhåndtering. Brug dette ved opbygning af nye funktioner eller services.
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Diagrammet nedenfor viser denne iterative forbedrings-cyklus — generer, evaluer, identificer svagheder og forfin indtil koden lever op til produktionsstandarderne.
+Diagrammet nedenfor viser denne iterative forbedringscyklus — generer, evaluer, identificer svagheder og forfin indtil koden opfylder produktionsstandarder.
*Iterativ forbedringscyklus - generer, evaluer, identificer problemer, forbedr, gentag*
-**Struktureret Analyse** - Til konsistent evaluering. Modellen gennemgår kode med en fast ramme (korrekthed, praksis, ydeevne, sikkerhed, vedligeholdelsesvenlighed). Brug dette til code reviews eller kvalitetsvurderinger.
+**Struktureret Analyse** - Til konsistent evaluering. Modellen gennemgår kode ved hjælp af et fast framework (korrekthed, praksis, ydeevne, sikkerhed, vedligeholdelse). Brug dette til kodegennemgange eller kvalitetsvurderinger.
```java
String prompt = """
@@ -355,17 +355,17 @@ String response = chatModel.chat(prompt);
```
> **🤖 Prøv med [GitHub Copilot](https://github.com/features/copilot) Chat:** Spørg om struktureret analyse:
-> - "Hvordan kan jeg tilpasse analyse-rammen til forskellige typer kodegennemgange?"
-> - "Hvad er den bedste måde at programmere en fortolkning og handling på struktureret output?"
-> - "Hvordan sikrer jeg konsistente alvorlighedsniveauer på tværs af forskellige anmeldelsessessioner?"
+> - "Hvordan kan jeg tilpasse analyseframeworket til forskellige typer kodegennemgange?"
+> - "Hvad er den bedste måde at parse og handle på struktureret output programmatisk?"
+> - "Hvordan sikrer jeg konsistente sværhedsgrader på tværs af forskellige gennemgangssessioner?"
-Følgende diagram viser, hvordan denne strukturerede ramme organiserer en code review i konsistente kategorier med alvorlighedsniveauer.
+Følgende diagram viser, hvordan dette strukturerede framework organiserer en kodegennemgang i konsistente kategorier med sværhedsgrader.
-*Ramme for konsistente code reviews med alvorlighedsniveauer*
+*Framework til konsistente kodegennemgange med sværhedsgrader*
-**Multi-Turn Chat** - Til samtaler, der har brug for kontekst. Modellen husker tidligere beskeder og bygger videre på dem. Brug dette til interaktive hjælpesessioner eller komplekse spørgsmål og svar.
+**Multi-Turn Chat** - Til samtaler, der har brug for kontekst. Modellen husker tidligere beskeder og bygger videre på dem. Brug dette til interaktive hjælpesessioner eller komplekse Q&A.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-Diagrammet nedenfor visualiserer, hvordan samtalens kontekst akkumuleres for hvert svar og hvordan det relaterer til modellens token-grænse.
+Diagrammet nedenfor visualiserer, hvordan samtalekontekst akkumulere med hvert spørgsmål og hvordan det relaterer til modellens token-limit.
-*Hvordan samtalens kontekst ophobes gennem flere runder indtil token-grænsen nås*
-**Trin-for-trin ræsonnering** - Til problemer, der kræver synlig logik. Modellen viser eksplicit ræsonnering for hvert trin. Brug dette til matematiske problemer, logikpuslespil eller når du skal forstå tankeprocessen.
+*Hvordan samtalekontekst akkumuleres over flere ture indtil token-grænsen nås*
+
+**Trin-for-Trin Resonnement** - Til problemer, der kræver synlig logik. Modellen viser eksplicit resonnement for hvert trin. Brug dette til matematikopgaver, logikpuslespil eller når du har brug for at forstå tankeprocessen.
```java
String prompt = """
@@ -401,10 +402,9 @@ String response = chatModel.chat(prompt);
Diagrammet nedenfor illustrerer, hvordan modellen opdeler problemer i eksplicitte, nummererede logiske trin.
+*At opdele problemer i eksplicitte logiske trin*
-*Nedbrydning af problemer i eksplicitte logiske trin*
-
-**Begrænset output** - Til svar med specifikke formatkrav. Modellen følger streng format- og længderegler. Brug dette til sammendrag eller når du har brug for præcist outputformat.
+**Begrænset output** - Til svar med specifikke formatkrav. Modellen følger strikt format- og længdekrav. Brug dette til opsummeringer eller når du har brug for præcis outputstruktur.
```java
String prompt = """
@@ -420,9 +420,9 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Følgende diagram viser, hvordan begrænsninger guider modellen til at producere output, der strikt overholder dine format- og længdekrav.
+Følgende diagram viser, hvordan begrænsninger guider modellen til at producere output, der strengt overholder dine format- og længdekrav.
-
+
*Håndhævelse af specifikke format-, længde- og strukturkrav*
@@ -430,7 +430,7 @@ Følgende diagram viser, hvordan begrænsninger guider modellen til at producere
**Bekræft udrulning:**
-Sørg for, at `.env`-filen findes i rodmappen med Azure-legitimationsoplysninger (oprettet under Modul 01). Kør dette fra modulets mappe (`02-prompt-engineering/`):
+Sørg for, at `.env`-filen findes i rodkataloget med Azure-legitimationsoplysninger (oprettet under Modul 01). Kør dette fra modulets bibliotek (`02-prompt-engineering/`):
**Bash:**
```bash
@@ -444,37 +444,37 @@ Get-Content ..\.env # Skal vise AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
**Start applikationen:**
-> **Bemærk:** Hvis du allerede har startet alle applikationer med `./start-all.sh` fra rodmappen (som beskrevet i Modul 01), kører dette modul allerede på port 8083. Du kan springe start-kommandoerne nedenfor over og gå direkte til http://localhost:8083.
+> **Bemærk:** Hvis du allerede har startet alle applikationer med `./start-all.sh` fra rodkataloget (som beskrevet i Modul 01), kører dette modul allerede på port 8083. Du kan springe startkommandoerne herunder over og gå direkte til http://localhost:8083.
-**Mulighed 1: Brug Spring Boot Dashboard (anbefalet til VS Code brugere)**
+**Mulighed 1: Brug af Spring Boot Dashboard (anbefalet for VS Code-brugere)**
-Dev containeren inkluderer Spring Boot Dashboard udvidelsen, som giver et visuelt interface til at administrere alle Spring Boot applikationer. Du finder den i Aktivitetslinjen til venstre i VS Code (se efter Spring Boot ikonet).
+Dev-containeren inkluderer Spring Boot Dashboard-udvidelsen, som giver en visuel grænseflade til at administrere alle Spring Boot-applikationer. Du finder den i aktivitetslinjen til venstre i VS Code (se efter Spring Boot-ikonet).
Fra Spring Boot Dashboard kan du:
-- Se alle tilgængelige Spring Boot applikationer i workspace
-- Starte/stoppe applikationer med ét klik
+- Se alle tilgængelige Spring Boot-applikationer i arbejdsmiljøet
+- Starte/stoppe applikationer med et enkelt klik
- Se applikationslogfiler i realtid
-- Overvåge applikationsstatus
+- Overvåge applikationens status
-Klik blot på afspilningsknappen ud for "prompt-engineering" for at starte dette modul, eller start alle moduler på én gang.
+Klik blot på afspilningsknappen ved siden af "prompt-engineering" for at starte dette modul, eller start alle moduler på én gang.
*Spring Boot Dashboard i VS Code — start, stop og overvåg alle moduler fra ét sted*
-**Mulighed 2: Brug shell scripts**
+**Mulighed 2: Brug af shell-scripts**
Start alle webapplikationer (moduler 01-04):
**Bash:**
```bash
-cd .. # Fra rodkataloget
+cd .. # Fra rodmappen
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # Fra rodmappen
+cd .. # Fra roddirectory
.\start-all.ps1
```
@@ -492,9 +492,9 @@ cd 02-prompt-engineering
.\start.ps1
```
-Begge scripts indlæser automatisk miljøvariabler fra rodens `.env`-fil og bygger JAR-filerne, hvis de ikke findes.
+Begge scripts indlæser automatisk miljøvariabler fra rodkatalogets `.env`-fil og bygger JAR-filerne, hvis de ikke findes.
-> **Bemærk:** Hvis du foretrækker at bygge alle moduler manuelt før start:
+> **Bemærk:** Hvis du foretrækker at bygge alle moduler manuelt, før du starter:
>
> **Bash:**
> ```bash
@@ -528,69 +528,69 @@ cd ..; .\stop-all.ps1 # Alle moduler
## Applikationsskærmbilleder
-Her er hovedgrænsefladen for prompt engineering modulet, hvor du kan eksperimentere med alle otte mønstre side om side.
+Her er hovedgrænsefladen for prompt engineering-modulet, hvor du kan eksperimentere med alle otte mønstre side om side.
-
+
-*Hoveddashboard, der viser alle 8 prompt engineering mønstre med deres karakteristika og anvendelsestilfælde*
+*Hoveddashboard med alle 8 prompt engineering-mønstre med deres karakteristika og anvendelsestilfælde*
-## Udforskning af mønstrene
+## Undersøgelse af mønstrene
-Webgrænsefladen lader dig eksperimentere med forskellige prompting strategier. Hvert mønster løser forskellige problemer – prøv dem for at se, hvornår hver tilgang fungerer bedst.
+Webgrænsefladen lader dig eksperimentere med forskellige prompt-strategier. Hvert mønster løser forskellige problemer - prøv dem for at se, hvornår hver tilgang fungerer bedst.
-> **Bemærk: Streaming vs Ikke-streaming** — Hver mønsterside tilbyder to knapper: **🔴 Stream Response (Live)** og en **Ikke-streaming** mulighed. Streaming bruger Server-Sent Events (SSE) til at vise tokens i realtid, mens modellen genererer dem, så du ser fremdrift med det samme. Ikke-streaming venter på hele svaret, før det vises. For prompts, der udløser dyb ræsonnering (f.eks. High Eagerness, Self-Reflecting Code), kan ikke-streaming kald tage meget lang tid – nogle gange flere minutter – uden synlig feedback. **Brug streaming når du eksperimenterer med komplekse prompts**, så du kan se modellen arbejde og undgå indtryk af timeout.
+> **Bemærk: Streaming vs Ikke-streaming** — Hver mønsterside tilbyder to knapper: **🔴 Stream Respons (Live)** og en **Ikke-streaming** mulighed. Streaming bruger Server-Sent Events (SSE) til at vise tokens i realtid, mens modellen genererer dem, så du straks kan følge fremskridtet. Ikke-streaming venter på hele svaret, før det vises. For prompt, der udløser dyb refleksion (fx High Eagerness, Self-Reflecting Code), kan ikke-streaming kald tage meget lang tid – nogle gange minutter – uden synlig respons. **Brug streaming ved eksperimenter med komplekse prompts** for at se modellen arbejde og undgå indtryk af timeout.
>
-> **Bemærk: Browserkrav** — Streaming-funktionen bruger Fetch Streams API (`response.body.getReader()`), som kræver en fuld browser (Chrome, Edge, Firefox, Safari). Det virker **ikke** i VS Codes indbyggede Simple Browser, da dens webview ikke understøtter ReadableStream API’en. Hvis du bruger Simple Browser, fungerer ikke-streaming knapperne stadig normalt — kun streaming knapperne påvirkes. Åbn `http://localhost:8083` i en ekstern browser for fuld oplevelse.
+> **Bemærk: Browserkrav** — Streaming-funktionen bruger Fetch Streams API (`response.body.getReader()`), som kræver en komplet browser (Chrome, Edge, Firefox, Safari). Det virker **ikke** i VS Codes indbyggede Simple Browser, da dens webview ikke understøtter ReadableStream API. Ved brug af Simple Browser fungerer ikke-streaming knapperne normalt – kun streaming-knapperne påvirkes. Åbn `http://localhost:8083` i en ekstern browser for fuld funktionalitet.
-### Lav vs Høj entusiasme
+### Lav vs Høj Eagerness
-Stil et simpelt spørgsmål som "Hvad er 15% af 200?" med Lav entusiasme. Du får et øjeblikkeligt, direkte svar. Stil nu noget komplekst som "Design en caching strategi for en højt trafikeret API" med Høj entusiasme. Klik **🔴 Stream Response (Live)** og se modellens detaljerede ræsonnering komme frem token for token. Samme model, samme spørgsmål — men prompten fortæller hvor meget tænkning, der skal til.
+Stil et simpelt spørgsmål som "Hvad er 15% af 200?" med Lav Eagerness. Du får et hurtigt, direkte svar. Stil nu noget komplekst som "Design en cachingstrategi for et API med højt trafikomfang" med Høj Eagerness. Klik på **🔴 Stream Respons (Live)** og følg modellens detaljerede ræsonnement token-for-token. Samme model, samme spørgestruktur – men prompten fortæller, hvor meget tænkning der skal til.
-### Opgaveudførelse (Tool Preambles)
+### Opgaveudførelse (Værktøjsappel)
-Workflow med flere trin profiterer af forudgående planlægning og statusfortælling. Modellen skitserer hvad den vil gøre, fortæller om hvert trin og opsummerer så resultater.
+Workflow med flere trin drager fordel af forudgående planlægning og fortløbende fortælling. Modellen skitserer hvad den vil gøre, fortæller om hvert trin og opsummerer resultater.
### Selvreflekterende kode
-Prøv "Lav en email valideringstjeneste". I stedet for bare at generere kode og stoppe, genererer modellen, evaluerer ift. kvalitetskriterier, identificerer svagheder og forbedrer. Du ser iterationer, indtil koden opfylder produktionsstandarder.
+Prøv "Lav en e-mail valideringstjeneste". I stedet for blot at generere kode og stoppe, genererer modellen, vurderer den i forhold til kvalitetskriterier, identificerer svagheder og forbedrer den. Du ser, hvordan den itererer, indtil koden opfylder produktionsstandarder.
### Struktureret analyse
-Kodegennemgange kræver konsekvente evalueringsrammer. Modellen analyserer kode med faste kategorier (korrekthed, praksis, ydeevne, sikkerhed) med alvorlighedsniveauer.
+Kodegennemgang kræver konsistente vurderingsrammer. Modellen analyserer kode efter faste kategorier (korrekthed, praksis, ydelse, sikkerhed) med alvorlighedsniveauer.
-### Multi-turn chat
+### Multi-Turn Chat
-Spørg "Hvad er Spring Boot?" og følg straks op med "Vis mig et eksempel". Modellen husker dit første spørgsmål og giver et Spring Boot eksempel specifikt til dig. Uden hukommelse ville det andet spørgsmål være for vagt.
+Spørg "Hvad er Spring Boot?" og følg straks op med "Vis mig et eksempel". Modellen husker dit første spørgsmål og giver et specifikt Spring Boot-eksempel. Uden hukommelse ville det andet spørgsmål være for åbent.
-### Trin-for-trin ræsonnering
+### Trin-for-trin ræsonnement
-Vælg et matematisk problem og prøv det med både Trin-for-trin ræsonnering og Lav entusiasme. Lav entusiasme giver bare svaret – hurtigt men uigennemsigtigt. Trin for trin viser hver udregning og beslutning.
+Vælg et matematikproblem og prøv det med både Trin-for-trin ræsonnement og Lav Eagerness. Lav eagerness giver kun svaret - hurtigt, men uigennemsigtigt. Trin-for-trin viser hver beregning og beslutning.
### Begrænset output
-Når du har brug for specifikke formater eller ordantal, sikrer dette mønster streng overholdelse. Prøv at generere et sammendrag med præcis 100 ord i punktopstilling.
+Når du har behov for specifikke formater eller ordantal, håndhæver dette mønster streng overholdelse. Prøv at generere en opsummering med præcis 100 ord i punktform.
## Hvad du virkelig lærer
-**Ræsonneringsindsats ændrer alt**
+**Ræsonnementets indsats ændrer alt**
-GPT-5.2 lader dig styre den beregningsmæssige indsats via dine prompts. Lav indsats betyder hurtige svar med minimal udforskning. Høj indsats betyder, at modellen tager sig tid til at tænke grundigt. Du lærer at matche indsatsen med opgavens kompleksitet – spild ikke tid på simple spørgsmål, men skynd dig ikke også komplekse beslutninger.
+GPT-5.2 lader dig styre den beregningsmæssige indsats via dine prompts. Lav indsats betyder hurtige svar med minimal udforskning. Høj indsats betyder, at modellen tager tid til dyb refleksion. Du lærer at matche indsats til opgavens kompleksitet – spild ikke tid på simple spørgsmål, men skynd dig heller ikke med komplekse beslutninger.
-**Struktur guider adfærd**
+**Struktur styrer adfærd**
-Bemærk XML-tags i promptene? De er ikke dekorative. Modeller følger strukturerede instruktioner mere pålideligt end frit formuleret tekst. Når du har brug for multi-trins processer eller kompleks logik, hjælper struktur modellen med at holde styr på, hvor den er, og hvad der kommer næste. Diagrammet nedenfor opdeler en veldesignet prompt og viser hvordan tags som ``, ``, ``, ``, og `` organiserer dine instruktioner i klare sektioner.
+Læg mærke til XML-tags i promptene? De er ikke bare pynt. Modeller følger strukturerede instruktioner mere pålideligt end frit tekstinput. Når du har brug for flertrinsprocesser eller kompleks logik, hjælper strukturen modellen med at holde styr på hvor den er og hvad der kommer næste. Diagrammet nedenfor nedbryder en veldesignet prompt, der viser, hvordan tags som ``, ``, ``, ``, og `` organiserer dine instruktioner i klare sektioner.
-
+
*Anatomi af en veldesignet prompt med klare sektioner og XML-lignende organisering*
**Kvalitet gennem selvevaluering**
-De selvreflekterende mønstre virker ved at gøre kvalitetskriterier eksplicitte. I stedet for at håbe på, at modellen "gør det rigtigt", fortæller du præcis hvad "rigtigt" betyder: korrekt logik, fejlhåndtering, ydeevne, sikkerhed. Modellen kan så evaluere sit eget output og forbedre det. Det gør kodegenerering til en proces i stedet for lotteri.
+De selvreflekterende mønstre fungerer ved at gøre kvalitetskriterier eksplicitte. I stedet for at håbe på, at modellen "gør det rigtigt", fortæller du den præcist, hvad "rigtigt" betyder: korrekt logik, fejlbehandling, ydelse, sikkerhed. Modellen kan derefter evaluere sit eget output og forbedre det. Det gør kodegenerering til en proces fremfor et lotteri.
**Kontekst er begrænset**
-Multi-turn samtaler virker ved at inkludere meddelelseshistorik ved hvert kald. Men der er en grænse – hver model har et maksimum token antal. Når samtaler bliver længere, skal du bruge strategier for at holde relevant kontekst uden at ramme loftet. Dette modul viser hvordan hukommelse fungerer; senere lærer du hvornår du skal opsummere, glemme og hente.
+Multi-turn samtaler fungerer ved at inkludere beskedhistorik i hver anmodning. Men der er en grænse – hver model har et maksimum antal tokens. Efterhånden som samtaler vokser, skal du bruge strategier til at bevare relevant kontekst uden at ramme loftet. Dette modul viser dig, hvordan hukommelse virker; senere lærer du, hvornår du skal opsummere, glemme og hente.
## Næste skridt
@@ -598,11 +598,11 @@ Multi-turn samtaler virker ved at inkludere meddelelseshistorik ved hvert kald.
---
-**Navigation:** [← Forrige: Modul 01 - Introduktion](../01-introduction/README.md) | [Tilbage til hovedmenu](../README.md) | [Næste: Modul 03 - RAG →](../03-rag/README.md)
+**Navigation:** [← Forrige: Modul 01 - Introduktion](../01-introduction/README.md) | [Tilbage til hoved](../README.md) | [Næste: Modul 03 - RAG →](../03-rag/README.md)
---
**Ansvarsfraskrivelse**:
-Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi stræber efter nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på dets modersmål bør anses for at være den autoritative kilde. For vigtig information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.
+Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.
\ No newline at end of file
diff --git a/translations/da/03-rag/README.md b/translations/da/03-rag/README.md
index c3b24eba7..850c7ef2b 100644
--- a/translations/da/03-rag/README.md
+++ b/translations/da/03-rag/README.md
@@ -2,143 +2,143 @@
## Indholdsfortegnelse
-- [Video-gennemgang](../../../03-rag)
-- [Hvad du vil lære](../../../03-rag)
-- [Forudsætninger](../../../03-rag)
-- [Forstå RAG](../../../03-rag)
- - [Hvilken RAG-tilgang bruger denne tutorial?](../../../03-rag)
-- [Hvordan det fungerer](../../../03-rag)
- - [Dokumentbehandling](../../../03-rag)
- - [Oprettelse af embeddings](../../../03-rag)
- - [Semantisk søgning](../../../03-rag)
- - [Svar-generering](../../../03-rag)
-- [Kør applikationen](../../../03-rag)
-- [Brug applikationen](../../../03-rag)
- - [Upload et dokument](../../../03-rag)
- - [Stil spørgsmål](../../../03-rag)
- - [Tjek kildehenvisninger](../../../03-rag)
- - [Eksperimentér med spørgsmål](../../../03-rag)
-- [Nøglebegreber](../../../03-rag)
- - [Chunking-strategi](../../../03-rag)
- - [Lighedsscores](../../../03-rag)
- - [I hukommelseslagring](../../../03-rag)
- - [Håndtering af kontekstvindue](../../../03-rag)
-- [Hvornår RAG er vigtigt](../../../03-rag)
-- [Næste skridt](../../../03-rag)
-
-## Video-gennemgang
-
-Se denne live-session, der forklarer, hvordan du kommer i gang med dette modul:
+- [Video Gennemgang](#video-gennemgang)
+- [Det Vil Du Lære](#det-vil-du-lære)
+- [Forudsætninger](#forudsætninger)
+- [Forståelse af RAG](#forståelse-af-rag)
+ - [Hvilken RAG-Tilgang Bruger Denne Tutorial?](#hvilken-rag-tilgang-bruger-denne-tutorial)
+- [Hvordan Det Virker](#hvordan-det-virker)
+ - [Dokumentbehandling](#dokumentbehandling)
+ - [Oprettelse af Embeddings](#oprettelse-af-embeddings)
+ - [Semantisk Søgning](#semantisk-søgning)
+ - [Svar Generering](#svar-generering)
+- [Kør Applikationen](#kør-applikationen)
+- [Brug af Applikationen](#brug-af-applikationen)
+ - [Upload et Dokument](#upload-et-dokument)
+ - [Stil Spørgsmål](#stil-spørgsmål)
+ - [Tjek Kildehenvisninger](#tjek-kildehenvisninger)
+ - [Eksperimenter med Spørgsmål](#eksperimenter-med-spørgsmål)
+- [Nøglebegreber](#nøglebegreber)
+ - [Chunking Strategi](#opdelingsstrategi)
+ - [Lighedsscorer](#lighedsscores)
+ - [In-Memory Lagring](#in-memory-lagring)
+ - [Styring af Kontekstvindue](#håndtering-af-kontekstvindue)
+- [Hvornår RAG Er Vigtigt](#når-rag-betyr-noget)
+- [Næste Skridt](#næste-skridt)
+
+## Video Gennemgang
+
+Se denne live session, der forklarer, hvordan du kommer i gang med dette modul:
-## Hvad du vil lære
+## Det Vil Du Lære
-I de tidligere moduler lærte du, hvordan du kan have samtaler med AI og strukturere dine prompts effektivt. Men der er en grundlæggende begrænsning: sprogmodeller ved kun, hvad de lærte under træning. De kan ikke svare på spørgsmål om din virksomheds politikker, din projektdokumentation eller anden information, de ikke blev trænet på.
+I de tidligere moduler lærte du, hvordan du fører samtaler med AI og strukturerer dine prompts effektivt. Men der er en grundlæggende begrænsning: sprogmodeller ved kun, det de lærte under træningen. De kan ikke besvare spørgsmål om din virksomheds politikker, din projektdokumentation eller information, de ikke er blevet trænet på.
-RAG (Retrieval-Augmented Generation) løser dette problem. I stedet for at forsøge at lære modellen din information (hvilket er dyrt og upraktisk), giver du den mulighed for at søge igennem dine dokumenter. Når nogen stiller et spørgsmål, finder systemet relevant information og inkluderer det i prompten. Modellen svarer derefter baseret på den hentede kontekst.
+RAG (Retrieval-Augmented Generation) løser dette problem. I stedet for at prøve at lære modellen dine informationer (hvilket er dyrt og upraktisk), giver du den mulighed for at søge i dine dokumenter. Når nogen stiller et spørgsmål, finder systemet relevant information og inkluderer den i prompten. Modellen svarer så baseret på den hentede kontekst.
-Tænk på RAG som at give modellen et referencebibliotek. Når du stiller et spørgsmål, gør systemet følgende:
+Tænk på RAG som at give modellen et referencelager. Når du stiller et spørgsmål, gør systemet:
1. **Brugerforespørgsel** - Du stiller et spørgsmål
-2. **Embedding** - Konverterer dit spørgsmål til en vektor
-3. **Vektorsøgning** - Finder lignende dokument-bidder
-4. **Kontekstsammensætning** - Tilføjer relevante bidder til prompten
-5. **Svar** - LLM genererer et svar baseret på konteksten
+2. **Embedding** - Omformer dit spørgsmål til en vektor
+3. **Vektorsøgning** - Finder lignende dokument-chunks
+4. **Kontekstsammensætning** - Tilføjer relevante chunks til prompten
+5. **Respons** - LLM genererer svar baseret på konteksten
Dette forankrer modellens svar i dine faktiske data i stedet for at stole på dens træningsviden eller finde på svar.
## Forudsætninger
-- Færdiggjort [Modul 00 - Quick Start](../00-quick-start/README.md) (til det Easy RAG-eksempel, der refereres til senere i dette modul)
-- Færdiggjort [Modul 01 - Introduktion](../01-introduction/README.md) (Azure OpenAI-ressourcer implementeret, inklusiv `text-embedding-3-small` embedding-modellen)
-- `.env`-fil i rodmappen med Azure-legitimationsoplysninger (oprettet af `azd up` i Modul 01)
+- Gennemført [Modul 01 - Introduktion](../01-introduction/README.md) (Azure OpenAI-ressourcer deployeret, inklusive `text-embedding-3-small` embedding-modellen)
+- `.env` fil i rodmappen med Azure legitimationsoplysninger (oprettet via `azd up` i Modul 01)
-> **Bemærk:** Hvis du ikke har gennemført Modul 01, følg implementeringsinstruktionerne der først. Kommandoen `azd up` implementerer både GPT chatmodellen og embedding-modellen, der bruges i dette modul.
+> **Note:** Hvis du ikke har gennemført Modul 01, følg først deploymentsinstruktionerne der. `azd up` kommandoen deployerer både GPT chatmodellen og embeddingmodellen, der bruges i dette modul.
-## Forstå RAG
+## Forståelse af RAG
-Diagrammet nedenfor illustrerer kernetanken: i stedet for kun at stole på modellens træningsdata, giver RAG den et referencebibliotek af dine dokumenter at konsultere, før den genererer hvert svar.
+Diagrammet nedenfor illustrerer kernekonceptet: i stedet for kun at stole på modellens træningsdata, giver RAG den et referencelager af dine dokumenter, som den kan konsultere, før hvert svar genereres.
-
+
-*Dette diagram viser forskellen mellem en standard LLM (der gætter ud fra træningsdata) og en RAG-forbedret LLM (som først konsulterer dine dokumenter).*
+*Dette diagram viser forskellen mellem en standard LLM (som gætter ud fra træningsdata) og en RAG-forstærket LLM (som først konsulterer dine dokumenter).*
-Sådan hænger delene sammen fra ende til anden. En brugers spørgsmål gennemløber fire trin — embedding, vektorsøgning, kontekstsammensætning og svar-generering — hvor hver bygger på den forrige:
+Sådan hænger delene sammen fra ende til anden. En brugers spørgsmål går gennem fire stadier — embedding, vektorsøgning, kontekstsammensætning og svar generering — hver bygget ovenpå det foregående:
-
+
-*Dette diagram viser RAG-pipelinen fra ende til anden — en brugerforespørgsel går gennem embedding, vektorsøgning, kontekstsammensætning og svar-generering.*
+*Dette diagram viser RAG pipeline fra ende til ende — en brugerforespørgsel går gennem embedding, vektorsøgning, kontekstsammensætning og svar generering.*
-Resten af dette modul gennemgår hvert trin i detaljer med kode, du kan køre og ændre.
+Resten af dette modul gennemgår hvert trin i detaljer, med kode du kan køre og ændre.
-### Hvilken RAG-tilgang bruger denne tutorial?
+### Hvilken RAG-Tilgang Bruger Denne Tutorial?
-LangChain4j tilbyder tre måder at implementere RAG på, hver med et forskelligt abstraktionsniveau. Diagrammet nedenfor viser dem side om side:
+LangChain4j tilbyder tre måder at implementere RAG på, hver med et forskelligt abstraktionsniveau. Diagrammet nedenfor sammenligner dem side om side:
-
+
-*Dette diagram sammenligner de tre LangChain4j RAG-tilgange — Easy, Native og Advanced — med deres nøglekomponenter og hvornår hver skal bruges.*
+*Dette diagram sammenligner de tre LangChain4j RAG-tilgange — Easy, Native og Advanced — og viser deres nøglekomponenter og hvornår de skal bruges.*
-| Tilgang | Hvad den gør | Afvejning |
+| Tilgang | Hvad Den Gør | Afvejning |
|---|---|---|
-| **Easy RAG** | Kobler det hele automatisk via `AiServices` og `ContentRetriever`. Du annoterer et interface, tilknytter en retriever, og LangChain4j håndterer embedding, søgning og prompt-sammensætning bag kulisserne. | Minimal kode, men du ser ikke hvad der sker i hvert trin. |
+| **Easy RAG** | Kobler alt automatisk sammen gennem `AiServices` og `ContentRetriever`. Du annoterer et interface, tilknytter en retriever, og LangChain4j håndterer embedding, søgning og prompt-sammensætning bag scenen. | Minimal kode, men du ser ikke hvad der sker i hvert trin. |
| **Native RAG** | Du kalder embedding-modellen, søger i butikken, bygger prompten og genererer svaret selv — ét eksplicit trin ad gangen. | Mere kode, men hvert trin er synligt og kan ændres. |
-| **Advanced RAG** | Bruger `RetrievalAugmentor`-rammeværket med udskiftelige forespørgsels-transformere, routere, re-rankere og indholdsindsprøjtere til produktionsklare pipelines. | Maksimal fleksibilitet, men betydeligt mere kompleksitet. |
+| **Advanced RAG** | Bruger `RetrievalAugmentor`-framework med plug-in query-transformers, routers, re-rankers og content injectors for produktionsklare pipelines. | Maksimal fleksibilitet men også betydeligt mere kompleksitet. |
-**Denne tutorial bruger Native-tilgangen.** Hvert trin i RAG-pipelinen — embedding af forespørgslen, søgning i vektor-butikken, sammensætning af kontekst og generering af svar — er skrevet eksplicit i [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Det er med vilje: som læringsressource er det vigtigere, at du ser og forstår hvert trin, end at koden er minimeret. Når du er fortrolig med, hvordan brikkerne passer sammen, kan du gå videre til Easy RAG for hurtige prototyper eller Advanced RAG til produktionssystemer.
+**Denne tutorial bruger Native-tilgangen.** Hvert trin i RAG-pipelinen — embed forespørgslen, søg i vektor-lageret, saml konteksten, og generer svaret — er eksplicit skrevet i [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Det er bevidst: som læringsressource er det vigtigere, at du ser og forstår hvert trin fremfor minimal kode. Når du er komfortabel med hvordan delene passer sammen, kan du gå videre til Easy RAG for hurtige prototyper eller Advanced RAG til produktionssystemer.
-> **💡 Har du allerede set Easy RAG i aktion?** [Quick Start-modulet](../00-quick-start/README.md) indeholder et eksempel med Document Q&A ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)), der bruger Easy RAG-tilgangen — LangChain4j håndterer embedding, søgning og prompt-sammensætning automatisk. Dette modul tager næste skridt ved at åbne op for den pipeline, så du kan se og kontrollere hvert trin selv.
+> **💡 Nysgerrig på Easy RAG?** LangChain4j tilbyder også en *Easy RAG* tilgang, hvor `AiServices` og en `ContentRetriever` automatisk håndterer embedding, søgning, og prompt-sammensætning. Dette modul følger den mere eksplicitte vej — bryder pipelinen op, så du kan se og styre hvert trin selv.
-Diagrammet nedenfor viser Easy RAG-pipelinen fra det Quick Start-eksempel. Bemærk, hvordan `AiServices` og `EmbeddingStoreContentRetriever` skjuler al kompleksitet — du indlæser et dokument, tilknytter en retriever og får svar. Native-tilgangen i dette modul åbner hvert af disse skjulte trin:
+Diagrammet nedenfor viser Easy RAG pipelinen. Bemærk hvordan `AiServices` og `EmbeddingStoreContentRetriever` skjuler al kompleksitet — du loader et dokument, tilknytter en retriever og får svar. Native-tilgangen i dette modul åbner hvert skjult trin:
-*Dette diagram viser Easy RAG-pipelinen fra `SimpleReaderDemo.java`. Sammenlign dette med Native-tilgangen, der bruges i dette modul: Easy RAG skjuler embedding, retrieval og prompt-sammensætning bag `AiServices` og `ContentRetriever` — du indlæser et dokument, tilknytter en retriever og får svar. Native-tilgangen i dette modul åbner den pipeline, så du selv kalder hvert trin (embed, søg, saml kontekst, generer), hvilket giver dig fuld synlighed og kontrol.*
+*Dette diagram viser Easy RAG pipelinen. Sammenlign med Native-tilgangen i dette modul: Easy RAG skjuler embedding, søgning og prompt-sammensætning bag `AiServices` og `ContentRetriever` — du loader et dokument, tilknytter en retriever og får svar. Native-tilgangen bryder denne pipeline op, så du selv kalder hvert trin (embed, søg, saml kontekst, generer), hvilket giver fuld synlighed og kontrol.*
-## Hvordan det fungerer
+## Hvordan Det Virker
-RAG-pipelinen i dette modul opdeles i fire trin, som kører i rækkefølge hver gang en bruger stiller et spørgsmål. Først bliver et uploadet dokument **parset og opdelt i bidder** i håndterbare stykker. Disse bidder konverteres derefter til **vektor-embeddings** og gemmes, så de kan sammenlignes matematisk. Når en forespørgsel kommer, udfører systemet en **semantisk søgning** for at finde de mest relevante bidder og sender dem endelig som kontekst til LLM for **svar-generering**. Sektionerne nedenfor gennemgår hvert trin med den faktiske kode og diagrammer. Lad os se på det første trin.
+RAG-pipelinen i dette modul opdeles i fire stadier, der kører i rækkefølge hver gang en bruger stiller et spørgsmål. Først bliver et uploadet dokument **parset og opdelt i chunks** i håndterbare stykker. Disse chunks konverteres derefter til **vektor-embeddings** og lagres, så de kan sammenlignes matematisk. Når en forespørgsel kommer, udfører systemet en **semantisk søgning** for at finde de mest relevante chunks, og til sidst sendes de som kontekst til LLM’en for **svar generering**. Afsnittene nedenfor gennemgår hvert trin med kode og diagrammer. Lad os se på det første trin.
### Dokumentbehandling
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-Når du uploader et dokument, parser systemet det (PDF eller almindelig tekst), tilknytter metadata såsom filnavn og bryder det så op i bidder — mindre stykker, der passer komfortabelt i modellens kontekstvindue. Disse bidder overlapper lidt, så du ikke mister kontekst ved grænserne.
+Når du uploader et dokument, parser systemet det (PDF eller tekst), vedhæfter metadata som filnavn, og deler det derefter op i chunks — mindre stykker der passer komfortabelt i modellens kontekstvindue. Disse chunks overlapper let, så du ikke mister kontekst ved grænserne.
```java
-// Analyser den uploadede fil og pak den ind i et LangChain4j-dokument
+// Analyser den uploadede fil og indpak den i et LangChain4j-dokument
Document document = Document.from(content, metadata);
-// Del op i 300-token segmenter med 30-token overlap
+// Del op i 300-token stykker med 30-token overlapning
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
-
-Diagrammet nedenfor viser, hvordan dette fungerer visuelt. Bemærk hvordan hver bid deler nogle tokens med sine naboer — 30-token overlap sikrer, at ingen vigtig kontekst falder mellem sprækkerne:
-
-*Dette diagram viser et dokument, der deles op i 300-token bidder med 30-token overlap, hvilket bevarer kontekst ved bid-grænser.*
+Diagrammet nedenfor viser, hvordan dette fungerer visuelt. Bemærk hvordan hver chunk deler nogle tokens med sine naboer — det 30-token overlap sikrer, at vigtig kontekst ikke falder mellem sprækkerne:
+
+
+
+*Dette diagram viser et dokument opdelt i 300-token chunks med 30-token overlap, som bevarer konteksten ved chunk-grænser.*
> **🤖 Prøv med [GitHub Copilot](https://github.com/features/copilot) Chat:** Åbn [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) og spørg:
-> - "Hvordan splitter LangChain4j dokumenter i bidder og hvorfor er overlap vigtigt?"
-> - "Hvad er den optimale bid-størrelse for forskellige dokumenttyper og hvorfor?"
-> - "Hvordan håndterer jeg dokumenter på flere sprog eller med særlig formatering?"
+> - "Hvordan splitter LangChain4j dokumenter i chunks, og hvorfor er overlap vigtigt?"
+> - "Hvad er den optimale chunk-størrelse for forskellige dokumenttyper og hvorfor?"
+> - "Hvordan håndterer jeg dokumenter på flere sprog eller med speciel formatering?"
-### Oprettelse af embeddings
+### Oprettelse af Embeddings
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-Hver bid konverteres til en numerisk repræsentation kaldet en embedding — i bund og grund en mening-til-tal-konverter. Embedding-modellen er ikke "intelligent" som en chatmodel; den kan ikke følge instruktioner, ræsonnere eller svare på spørgsmål. Den kan til gengæld kortlægge tekst til et matematisk rum, hvor lignende betydninger lander tæt på hinanden — "bil" tæt på "automobil", "refusionspolitik" tæt på "returner mine penge". Tænk på en chatmodel som en person, du kan tale med; en embedding-model er et ultragodt arkivsystem.
+Hver chunk konverteres til en numerisk repræsentation kaldet en embedding — essentielt en betydnings-til-tal-omformer. Embedding-modellen er ikke "intelligent" på samme måde som en chatmodel; den kan ikke følge instruktioner, ræsonnere eller besvare spørgsmål. Det den kan, er at kortlægge tekst til et matematisk rum, hvor lignende betydninger lander tæt på hinanden — "bil" tæt på "automobil," "refunderingspolitik" tæt på "tilbagebetaling." Tænk på en chatmodel som en person du kan tale med; en embeddingmodel er et ultra-godt arkivsystem.
-Diagrammet nedenfor visualiserer dette koncept — tekst går ind, numeriske vektorer kommer ud, og lignende betydninger producerer nærliggende vektorer:
+Diagrammet nedenfor visualiserer dette koncept — tekst går ind, numeriske vektorer kommer ud, og lignende betydninger skaber nærliggende vektorer:
-
+
-*Dette diagram viser, hvordan en embedding-model konverterer tekst til numeriske vektorer, hvor lignende betydninger — som "bil" og "automobil" — placeres tæt på hinanden i vektor-rummet.*
+*Dette diagram viser, hvordan en embeddingmodel konverterer tekst til numeriske vektorer og placerer lignende betydninger — som "bil" og "automobil" — tæt på hinanden i vektorrummet.*
```java
@Bean
@@ -153,30 +153,31 @@ public EmbeddingModel embeddingModel() {
EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-
-Klassediagrammet nedenfor viser de to separate flows i en RAG-pipeline og de LangChain4j-klasser, der implementerer dem. **Indtagsflowet** (kører én gang ved upload) splitter dokumentet, embedded bidderne og gemmer dem via `.addAll()`. **Forespørgselsflowet** (kører hver gang en bruger spørger) embedded spørgsmålet, søger i butikken via `.search()`, og sender den matchede kontekst til chatmodellen. Begge flows mødes i det delte interface `EmbeddingStore`:
-
-*Dette diagram viser de to flows i en RAG-pipeline — indtag og forespørgsel — og hvordan de forbindes gennem en delt EmbeddingStore.*
+Klassediagrammet nedenfor viser de to separate flows i en RAG pipeline og de LangChain4j klasser, der implementerer dem. **Indslusningsflowet** (kører én gang ved upload) splitter dokumentet, embedder chunks og lagrer dem via `.addAll()`. **Forespørgselsflowet** (kører hver gang en bruger spørger) embedder spørgsmålet, søger i butikken via `.search()` og sender den matchede kontekst til chatmodellen. Begge flows mødes i det delte `EmbeddingStore` interface:
+
+
-Når embeddings er gemt, samler lignende indhold sig naturligt i vektor-rummet. Visualiseringen nedenfor viser, hvordan dokumenter om beslægtede emner ender som nærliggende punkter, hvilket muliggør semantisk søgning:
+*Dette diagram viser de to flows i en RAG pipeline — ingestion og query — og hvordan de forbindes gennem et fælles EmbeddingStore.*
-
+Når embeddings er lagret, samles lignende indhold naturligt i klynger i vektorrummet. Visualiseringen nedenfor viser, hvordan dokumenter om beslægtede emner ender som nærliggende punkter, hvilket gør semantisk søgning mulig:
-*Denne visualisering viser, hvordan relaterede dokumenter samler sig i 3D-vektor-rummet, med emner som Teknisk Docs, Forretningsregler og FAQs, der danner tydelige klynger.*
+
-Når en bruger søger, følger systemet fire trin: embed dokumenterne én gang, embed forespørgslen ved hver søgning, sammenlign forespørgselsvektoren med alle gemte vektorer ved hjælp af cosinus-lighed, og returner de top-K højest scorende bidder. Diagrammet nedenfor gennemgår hvert trin og de involverede LangChain4j-klasser:
+*Denne visualisering viser, hvordan beslægtede dokumenter klumper sig sammen i 3D vektorrum med emner som Tekniske Docs, Forretningsregler og FAQs som klare grupper.*
-
+Når en bruger søger, følger systemet fire trin: embed dokumenterne én gang, embed forespørgslen ved hver søgning, sammenlign forespørgsels-vektor med alle lagrede vektorer vha. cosinus-lighed, og returner de top-K højst scorende chunks. Diagrammet nedenfor går igennem hvert trin og de LangChain4j klasser, der er involveret:
-*Dette diagram viser den firetrins embedding-søgeproces: embed dokumenter, embed forespørgslen, sammenlign vektorer med cosinus-lighed, og returner top-K resultater.*
+
-### Semantisk søgning
+*Dette diagram viser de fire trin i embedding-søgningen: embed dokumenter, embed forespørgsel, sammenlign vektorer med cosinuslighed, og returner top-K resultater.*
+
+### Semantisk Søgning
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Når du stiller et spørgsmål, bliver dit spørgsmål også til en embedding. Systemet sammenligner din spørgsmåls embedding med alle dokumentbidders embeddings. Det finder de bidder med mest lignende betydning — ikke bare matchende nøgleord, men faktisk semantisk lighed.
+Når du stiller et spørgsmål, bliver dit spørgsmål også embeddet. Systemet sammenligner dit spørgsmåls embedding med alle dokument-chunks embeddings. Det finder chunks med mest lignende betydning — ikke bare nøgleord, men faktisk semantisk lighed.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -195,28 +196,29 @@ for (EmbeddingMatch match : matches) {
double score = match.score();
}
```
-
-Diagrammet nedenfor kontrasterer semantisk søgning med traditionel nøgleordssøgning. En nøgleordssøgning på "køretøj" overser en bid om "biler og lastbiler," men semantisk søgning forstår, at de betyder det samme og returnerer den som et højt scorende match:
-
-*Dette diagram sammenligner nøgleordsbaseret søgning med semantisk søgning, der viser, hvordan semantisk søgning henter konceptuelt relateret indhold, selv når præcise nøgleord adskiller sig.*
-Under overfladen måles lighed ved hjælp af cosinuslighed — i bund og grund spørgsmålet "peger disse to pile i samme retning?" To tekststykker kan bruge helt forskellige ord, men hvis de betyder det samme, peger deres vektorer i samme retning og scorer tæt på 1,0:
+Diagrammet nedenfor kontrasterer semantisk søgning med traditionel nøgleordssøgning. En nøgleordssøgning på "køretøj" overser en chunk om "biler og lastbiler," men semantisk søgning forstår, at de betyder det samme og returnerer det som et topscorende match:
+
+
+
+*Dette diagram sammenligner nøgleordsbaseret søgning med semantisk søgning og viser, hvordan semantisk søgning henter konceptuelt beslægtet indhold selv når de præcise nøgleord er forskellige.*
-
+Under motorhjelmen måles lighed med cosinus-lighed — essentielt spørger man "peger disse to pile i samme retning?" To chunks kan bruge helt forskellige ord, men hvis de betyder det samme, peger deres vektorer i samme retning og scorer tæt på 1,0:
-*Dette diagram illustrerer cosinuslighed som vinklen mellem embeddingsvektorer — jo bedre justerede vektorerne er, desto tættere scorer de på 1,0, hvilket indikerer højere semantisk lighed.*
+
+*Dette diagram illustrerer cosinuslighed som vinklen mellem indlejringsvektorer — mere justerede vektorer scorer tættere på 1,0, hvilket indikerer højere semantisk lighed.*
> **🤖 Prøv med [GitHub Copilot](https://github.com/features/copilot) Chat:** Åbn [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) og spørg:
-> - "Hvordan fungerer søgning efter lighed med embeddings, og hvad bestemmer scoren?"
+> - "Hvordan fungerer lighedssøgning med indlejringer, og hvad bestemmer scoren?"
> - "Hvilken lighedstærskel skal jeg bruge, og hvordan påvirker det resultaterne?"
-> - "Hvordan håndterer jeg situationer, hvor der ikke findes relevante dokumenter?"
+> - "Hvordan håndterer jeg tilfælde, hvor der ikke findes relevante dokumenter?"
### Svar Generering
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-De mest relevante tekststykker samles i en struktureret prompt, der inkluderer eksplicitte instruktioner, den hentede kontekst og brugerens spørgsmål. Modellen læser disse specifikke tekststykker og svarer baseret på denne information — den kan kun bruge det, der er foran den, hvilket forhindrer hallucination.
+De mest relevante bidder samles i en struktureret prompt, der inkluderer eksplicitte instruktioner, den hentede kontekst og brugerens spørgsmål. Modellen læser disse specifikke bidder og svarer baseret på den information — den kan kun bruge det, der er foran den, hvilket forhindrer hallucination.
```java
String context = matches.stream()
@@ -237,17 +239,17 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-Diagrammet nedenfor viser denne samling i praksis — de højest scorende tekststykker fra søgningstrinnet indsættes i promptskabelonen, og `OpenAiOfficialChatModel` genererer et funderet svar:
+Diagrammet nedenfor viser denne samling i praksis — de højest scorende bidder fra søgetrinnet indsættes i prompt-skabelonen, og `OpenAiOfficialChatModel` genererer et funderet svar:
-*Dette diagram viser, hvordan de højest scorende tekststykker samles i en struktureret prompt, så modellen kan generere et funderet svar fra dine data.*
+*Dette diagram viser, hvordan de højest scorende bidder samles i en struktureret prompt, hvilket tillader modellen at generere et funderet svar fra dine data.*
## Kør Applikationen
-**Bekræft deployment:**
+**Bekræft implementering:**
-Sørg for, at `.env` filen findes i rodmappen med Azure-legitimationsoplysninger (oprettet under Modul 01). Kør dette fra modulets mappe (`03-rag/`):
+Sørg for, at `.env`-filen findes i rodmappen med Azure legitimationsoplysninger (oprettet under Modul 01). Kør dette fra modulkataloget (`03-rag/`):
**Bash:**
```bash
@@ -261,37 +263,37 @@ Get-Content ..\.env # Skal vise AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
**Start applikationen:**
-> **Note:** Hvis du allerede har startet alle applikationer ved at bruge `./start-all.sh` fra rodmappen (som beskrevet i Modul 01), kører dette modul allerede på port 8081. Du kan springe startkommandoerne over nedenfor og gå direkte til http://localhost:8081.
+> **Note:** Hvis du allerede har startet alle applikationer med `./start-all.sh` fra rodmappen (som beskrevet i Modul 01), kører dette modul allerede på port 8081. Du kan springe startkommandoerne over nedenfor og gå direkte til http://localhost:8081.
**Mulighed 1: Brug Spring Boot Dashboard (Anbefalet til VS Code-brugere)**
-Dev-containeren inkluderer Spring Boot Dashboard-udvidelsen, som giver et visuelt interface til at administrere alle Spring Boot-applikationer. Du finder det i Activity Bar til venstre i VS Code (søg efter Spring Boot-ikonet).
+Dev-containeren inkluderer Spring Boot Dashboard-udvidelsen, som giver en visuel grænseflade til at håndtere alle Spring Boot-applikationer. Du finder den i Aktivitetsbjælken på venstre side af VS Code (se efter Spring Boot-ikonet).
Fra Spring Boot Dashboard kan du:
- Se alle tilgængelige Spring Boot-applikationer i arbejdsområdet
- Starte/stoppe applikationer med et enkelt klik
-- Se applikationslogs i realtid
-- Overvåge applikationers status
+- Se applikationslogfiler i realtid
+- Overvåge applikationens status
-Klik blot på play-knappen ud for "rag" for at starte dette modul, eller start alle moduler på én gang.
+Klik blot på afspilningsknappen ved siden af "rag" for at starte dette modul, eller start alle moduler på én gang.
*Dette screenshot viser Spring Boot Dashboard i VS Code, hvor du visuelt kan starte, stoppe og overvåge applikationer.*
-**Mulighed 2: Brug shell scripts**
+**Mulighed 2: Brug shell-scripts**
Start alle webapplikationer (moduler 01-04):
**Bash:**
```bash
-cd .. # Fra rodmappen
+cd .. # Fra rodbiblioteket
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # Fra rodmappen
+cd .. # Fra rodkatalog
.\start-all.ps1
```
@@ -309,7 +311,7 @@ cd 03-rag
.\start.ps1
```
-Begge scripts indlæser automatisk miljøvariabler fra rodens `.env` fil og bygger JAR-filerne, hvis de ikke findes.
+Begge scripts indlæser automatisk miljøvariabler fra root `.env`-filen og vil bygge JAR-filerne, hvis de ikke findes.
> **Note:** Hvis du foretrækker at bygge alle moduler manuelt før start:
>
@@ -331,107 +333,107 @@ Begge scripts indlæser automatisk miljøvariabler fra rodens `.env` fil og bygg
**Bash:**
```bash
-./stop.sh # Dette modul kun
+./stop.sh # Kun denne modul
# Eller
cd .. && ./stop-all.sh # Alle moduler
```
**PowerShell:**
```powershell
-.\stop.ps1 # Dette modul kun
+.\stop.ps1 # Kun denne modul
# Eller
cd ..; .\stop-all.ps1 # Alle moduler
```
## Brug af Applikationen
-Applikationen tilbyder et webinterface til dokumentupload og spørgsmål.
+Applikationen tilbyder en webgrænseflade til dokumentupload og spørgsmål.
-*Dette screenshot viser RAG-applikationens interface, hvor du uploader dokumenter og stiller spørgsmål.*
+*Dette screenshot viser RAG-applikationsgrænsefladen, hvor du uploader dokumenter og stiller spørgsmål.*
### Upload et Dokument
-Start med at uploade et dokument – TXT-filer virker bedst til test. En `sample-document.txt` er inkluderet i denne mappe, som indeholder information om LangChain4j-funktioner, RAG-implementering og bedste praksis – perfekt til test af systemet.
+Start med at uploade et dokument – TXT-filer fungerer bedst til test. Et `sample-document.txt` er tilgængeligt i denne mappe, som indeholder information om LangChain4j-funktioner, RAG-implementering og best practices - perfekt til at teste systemet.
-Systemet behandler dit dokument, splitter det op i tekststykker og skaber embeddings for hvert stykke. Dette sker automatisk ved upload.
+Systemet behandler dit dokument, opdeler det i bidder og skaber indlejringer for hver bid. Dette sker automatisk, når du uploader.
### Stil Spørgsmål
-Nu kan du stille specifikke spørgsmål om dokumentets indhold. Prøv noget faktuelt, der klart står i dokumentet. Systemet søger efter relevante tekststykker, inkluderer dem i prompten og genererer et svar.
+Stil nu specifikke spørgsmål om dokumentindholdet. Prøv noget faktuelt, der klart fremgår af dokumentet. Systemet søger efter relevante bidder, inkluderer dem i prompten og genererer et svar.
### Tjek Kildehenvisninger
-Bemærk, at hvert svar inkluderer kildehenvisninger med lighedsscores. Disse scores (fra 0 til 1) viser, hvor relevant hvert tekststykke var ift. dit spørgsmål. Højere scores betyder bedre matches. Det giver dig mulighed for at efterprøve svaret mod kildematerialet.
+Bemærk, at hvert svar inkluderer kildehenvisninger med lighedsscoringer. Disse scorer (0 til 1) viser, hvor relevante bidder var for dit spørgsmål. Højere scorer betyder bedre match. Dette lader dig verificere svaret mod kildematerialet.
-*Dette screenshot viser forespørgselsresultater med det genererede svar, kildehenvisninger og relevansscores for hvert hentet tekststykke.*
+*Dette screenshot viser forespørgselsresultater med det genererede svar, kildehenvisninger og relevansscores for hver hentet bid.*
-### Eksperimentér med Spørgsmål
+### Eksperimenter med Spørgsmål
Prøv forskellige typer spørgsmål:
- Specifikke fakta: "Hvad er hovedemnet?"
- Sammenligninger: "Hvad er forskellen mellem X og Y?"
-- Opsummeringer: "Opsummer hovedpunkterne om Z"
+- Resuméer: "Opsummer hovedpunkterne om Z"
-Se, hvordan relevansscores ændrer sig baseret på, hvor godt dit spørgsmål matcher dokumentindholdet.
+Se hvordan relevansscore ændres afhængigt af, hvor godt dit spørgsmål matcher dokumentindholdet.
## Nøglebegreber
-### Chunking-strategi
+### Opdelingsstrategi
-Dokumenter deles op i 300-token tekststykker med 30 tokens overlap. Denne balance sikrer, at hvert stykke har nok kontekst til at være meningsfuldt, samtidig med at stykkerne er små nok til at inkludere flere i en prompt.
+Dokumenter opdeles i bidder på 300 tokens med 30 tokens overlap. Denne balance sikrer, at hver bid har nok kontekst til at være meningsfuld, samtidig med at de er små nok til at inkludere flere bidder i en prompt.
-### Similarity Scores
+### Lighedsscores
-Hvert hentet tekststykke kommer med en lighedsscore mellem 0 og 1, der angiver, hvor tæt det matcher brugerens spørgsmål. Diagrammet nedenfor visualiserer score-intervallerne og hvordan systemet bruger dem til at filtrere resultater:
+Hver hentet bid har en lighedsscore mellem 0 og 1, der angiver, hvor tæt den matcher brugerens spørgsmål. Diagrammet nedenfor visualiserer scoreintervallerne og hvordan systemet bruger dem til at filtrere resultater:
-*Dette diagram viser score-intervaller fra 0 til 1 med en minimumstærskel på 0,5, som filtrerer irrelevante tekststykker fra.*
+*Dette diagram viser scoreintervaller fra 0 til 1, med en minimumsterskel på 0,5, der filtrerer irrelevante bidder.*
-Scores varierer fra 0 til 1:
-- 0,7-1,0: Meget relevant, eksakt match
+Score spænder fra 0 til 1:
+- 0,7-1,0: Meget relevant, præcis match
- 0,5-0,7: Relevant, god kontekst
-- Under 0,5: Filtreret fra, for forskelligt
+- Under 0,5: Filtreret fra, for forskellig
-Systemet henter kun tekststykker over minimumstærsklen for at sikre kvalitet.
+Systemet henter kun bidder over minimumstersklen for at sikre kvalitet.
-Embeddings fungerer godt, når betydninger danner klare klynger, men har blinde vinkler. Diagrammet nedenfor viser almindelige fejlsituationer — tekststykker, der er for store, skaber upræcise vektorer, tekststykker, der er for små, mangler kontekst, tvetydige termer peger på flere klynger, og eksakte opslag (ID’er, reservedelsnumre) virker ikke med embeddings overhovedet:
+Indlejringer fungerer godt, når betydninger klumper sig rent, men har blinde vinkler. Diagrammet nedenfor viser de almindelige fejltilstande — bidder der er for store producerer uklare vektorer, bidder der er for små mangler kontekst, tvetydige termer peger på flere klynger, og præcise opslag (ID'er, reservedelsnumre) fungerer slet ikke med indlejringer:
-*Dette diagram viser almindelige embeddings-fejlsituationer: tekststykker for store, tekststykker for små, tvetydige termer, der peger på flere klynger, og eksakte opslag som ID’er.*
+*Dette diagram viser almindelige fejltilstande ved indlejringer: bidder for store, bidder for små, tvetydige termer der peger på flere klynger, og præcise opslag som ID'er.*
-### In-Memory Storage
+### In-Memory Lagring
-Dette modul bruger hukommelsesbaseret lagring for enkelheds skyld. Ved genstart af applikationen mistes uploadede dokumenter. Produktionssystemer anvender persistente vektordatabaser som Qdrant eller Azure AI Search.
+Dette modul anvender in-memory lagring for enkelhedens skyld. Når du genstarter applikationen, mistes uploadede dokumenter. Produksjonssystemer bruger vedvarende vektordatabaser som Qdrant eller Azure AI Search.
-### Context Window Management
+### Håndtering af Kontekstvindue
-Hver model har et maksimum for kontekstvindet. Du kan ikke inkludere alle tekststykker fra et stort dokument. Systemet henter de top N mest relevante tekststykker (standard 5) for at holde sig inden for grænserne og samtidig give nok kontekst til præcise svar.
+Hver model har et maksimalt kontekstvindue. Du kan ikke inkludere alle bidder fra et stort dokument. Systemet henter de N mest relevante bidder (standard 5) for at holde sig inden for grænserne samtidig med at der gives nok kontekst til præcise svar.
-## Hvornår RAG er vigtigt
+## Når RAG Betyr Noget
-RAG er ikke altid den rigtige løsning. Beslutningsguiden nedenfor hjælper dig med at afgøre, hvornår RAG tilfører værdi versus hvornår enklere tilgange — som at inkludere indhold direkte i prompten eller stole på modellens indbyggede viden — er tilstrækkelige:
+RAG er ikke altid den rette tilgang. Beslutningsguiden nedenfor hjælper dig med at afgøre, hvornår RAG tilfører værdi kontra hvornår enklere tilgange — som at inkludere indhold direkte i prompten eller stole på modellens indbyggede viden — er tilstrækkelige:
-*Dette diagram viser en beslutningsguide for, hvornår RAG tilfører værdi, og hvornår enklere tilgange er tilstrækkelige.*
+*Dette diagram viser en beslutningsguide for, hvornår RAG tilfører værdi kontra hvornår enklere tilgange er tilstrækkelige.*
-## Næste skridt
+## Næste Skridt
-**Næste Modul:** [04-tools - AI-agenter med værktøjer](../04-tools/README.md)
+**Næste Modul:** [04-tools - AI Agents with Tools](../04-tools/README.md)
---
-**Navigation:** [← Forrige: Modul 02 - Prompt Engineering](../02-prompt-engineering/README.md) | [Tilbage til start](../README.md) | [Næste: Modul 04 - Værktøjer →](../04-tools/README.md)
+**Navigation:** [← Forrige: Modul 02 - Prompt Engineering](../02-prompt-engineering/README.md) | [Tilbage til Hovedmenu](../README.md) | [Næste: Modul 04 - Tools →](../04-tools/README.md)
---
**Ansvarsfraskrivelse**:
-Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi stræber efter nøjagtighed, skal du være opmærksom på, at automatiske oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritiske oplysninger anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.
+Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.
\ No newline at end of file
diff --git a/translations/da/04-tools/README.md b/translations/da/04-tools/README.md
index d673e1ee3..99103d1ce 100644
--- a/translations/da/04-tools/README.md
+++ b/translations/da/04-tools/README.md
@@ -2,75 +2,75 @@
## Indholdsfortegnelse
-- [Videogennemgang](../../../04-tools)
-- [Det vil du lære](../../../04-tools)
-- [Forudsætninger](../../../04-tools)
-- [Forståelse af AI-agenter med værktøjer](../../../04-tools)
-- [Hvordan værktøjskald fungerer](../../../04-tools)
- - [Værktøjsdefinitioner](../../../04-tools)
- - [Beslutningstagning](../../../04-tools)
- - [Udførelse](../../../04-tools)
- - [Generering af svar](../../../04-tools)
- - [Arkitektur: Spring Boot Auto-Wiring](../../../04-tools)
-- [Kædning af værktøjer](../../../04-tools)
-- [Kør applikationen](../../../04-tools)
-- [Brug af applikationen](../../../04-tools)
- - [Prøv enkel værktøjsbrug](../../../04-tools)
- - [Test kædning af værktøjer](../../../04-tools)
- - [Se samtaleflow](../../../04-tools)
- - [Eksperimenter med forskellige forespørgsler](../../../04-tools)
-- [Nøglebegreber](../../../04-tools)
- - [ReAct-mønsteret (Reasoning and Acting)](../../../04-tools)
- - [Værktøjsbeskrivelser betyder noget](../../../04-tools)
- - [Sessionsstyring](../../../04-tools)
- - [Fejlhåndtering](../../../04-tools)
-- [Tilgængelige værktøjer](../../../04-tools)
-- [Hvornår man skal bruge værktøjsbaserede agenter](../../../04-tools)
-- [Værktøjer vs RAG](../../../04-tools)
-- [Næste skridt](../../../04-tools)
-
-## Videogennemgang
-
-Se denne live-session, som forklarer, hvordan du kommer i gang med dette modul:
+- [Video Gennemgang](#video-gennemgang)
+- [Hvad Du Vil Lære](#hvad-du-vil-lære)
+- [Forudsætninger](#forudsætninger)
+- [Forståelse af AI-agenter med værktøjer](#forståelse-af-ai-agenter-med-værktøjer)
+- [Hvordan værktøjskald fungerer](#hvordan-værktøjskald-fungerer)
+ - [Værktøjsdefinitioner](#værktøjsdefinitioner)
+ - [Beslutningstagning](#beslutningstagning)
+ - [Eksekvering](#eksekvering)
+ - [Svargenerering](#svargenerering)
+ - [Arkitektur: Spring Boot Auto-Wiring](#arkitektur-spring-boot-auto-wiring)
+- [Værktøjskædning](#værktøjskædning)
+- [Kør applikationen](#kør-applikationen)
+- [Brug af applikationen](#brug-af-applikationen)
+ - [Prøv simpel værktøjsbrug](#prøv-simpel-værktøjsbrug)
+ - [Test værktøjskædning](#test-værktøjskædning)
+ - [Se samtaleflow](#se-samtaleflow)
+ - [Eksperimenter med forskellige forespørgsler](#eksperimenter-med-forskellige-forespørgsler)
+- [Nøglebegreber](#nøglebegreber)
+ - [ReAct-mønster (Tænkning og Handling)](#react-mønster-tænkning-og-handling)
+ - [Værktøjsbeskrivelser betyder noget](#værktøjsbeskrivelser-betyder-noget)
+ - [Sessionsstyring](#sessionsstyring)
+ - [Fejlhåndtering](#fejlhåndtering)
+- [Tilgængelige værktøjer](#tilgængelige-værktøjer)
+- [Hvornår man skal bruge værktøjsbaserede agenter](#hvornår-man-skal-bruge-værktøjsbaserede-agenter)
+- [Værktøjer vs RAG](#værktøjer-vs-rag)
+- [Næste skridt](#næste-skridt)
+
+## Video Gennemgang
+
+Se denne live session, som forklarer, hvordan man kommer i gang med dette modul:
-## Det vil du lære
+## Hvad Du Vil Lære
-Indtil videre har du lært, hvordan man har samtaler med AI, strukturerer prompts effektivt og forankrer svar i dine dokumenter. Men der er stadig en grundlæggende begrænsning: sprogmodeller kan kun generere tekst. De kan ikke tjekke vejret, udføre beregninger, forespørge databaser eller interagere med eksterne systemer.
+Indtil videre har du lært, hvordan man har samtaler med AI, strukturerer prompts effektivt og forankrer svar i dine dokumenter. Men der er stadig en grundlæggende begrænsning: sprogmodeller kan kun generere tekst. De kan ikke tjekke vejret, udføre beregninger, spørge databaser eller interagere med eksterne systemer.
-Værktøjer ændrer dette. Ved at give modellen adgang til funktioner, den kan kalde, forvandler du den fra en tekstgenerator til en agent, som kan handle. Modellen beslutter, hvornår den har brug for et værktøj, hvilket værktøj den skal bruge, og hvilke parametre den skal sende. Din kode udfører funktionen og returnerer resultatet. Modellen indarbejder dette resultat i sit svar.
+Værktøjer ændrer dette. Ved at give modellen adgang til funktioner, den kan kalde, forvandler du den fra en tekstgenerator til en agent, der kan udføre handlinger. Modellen beslutter, hvornår den har brug for et værktøj, hvilket værktøj den skal bruge, og hvilke parametre den skal sende. Din kode eksekverer funktionen og returnerer resultatet. Modellen indarbejder det resultat i sit svar.
## Forudsætninger
-- Fuldført [Modul 01 - Introduktion](../01-introduction/README.md) (Azure OpenAI-ressourcer er implementeret)
-- Fuldførte tidligere moduler anbefales (dette modul refererer til [RAG-koncepter fra Modul 03](../03-rag/README.md) i sammenligningen mellem Værktøjer og RAG)
-- `.env`-fil i rodkatalog med Azure-legitimationsoplysninger (oprettet af `azd up` i Modul 01)
+- Færdiggjort [Modul 01 - Introduktion](../01-introduction/README.md) (Azure OpenAI ressourcer deployeret)
+- Tidligere moduler anbefales færdiggjort (dette modul refererer til [RAG-konceptet fra Modul 03](../03-rag/README.md) i sammenligningen Værktøjer vs RAG)
+- `.env` fil i rodkataloget med Azure legitimationsoplysninger (oprettet af `azd up` i Modul 01)
-> **Note:** Hvis du ikke har fuldført Modul 01, skal du følge implementeringsvejledningen der først.
+> **Note:** Hvis du ikke har færdiggjort Modul 01, så følg først deploymentsinstruktionerne der.
## Forståelse af AI-agenter med værktøjer
-> **📝 Note:** Udtrykket "agenter" i dette modul henviser til AI-assistenter, der er udvidet med evnen til at kalde værktøjer. Dette er forskelligt fra **Agentic AI**-mønstrene (autonome agenter med planlægning, hukommelse og flertrinsresonnement), som vi vil dække i [Modul 05: MCP](../05-mcp/README.md).
+> **📝 Note:** Udtrykket "agenter" i dette modul henviser til AI-assistenter, som er forbedret med evnen til at kalde værktøjer. Dette adskiller sig fra **Agentic AI** mønstrene (autonome agenter med planlægning, hukommelse og flerstegs ræsonnering), som vi vil dække i [Modul 05: MCP](../05-mcp/README.md).
-Uden værktøjer kan en sprogmodel kun generere tekst ud fra sine træningsdata. Spørg den om det nuværende vejr, og den må gætte. Giv den værktøjer, og den kan kalde en vejr-API, udføre beregninger eller forespørge en database — og så væve disse faktiske resultater ind i sit svar.
+Uden værktøjer kan en sprogmodel kun generere tekst ud fra sine træningsdata. Spørger du om vejret, må den gætte. Giv den værktøjer, og den kan kalde en vejrudsigts-API, udføre beregninger eller spørge en database — og derefter flette de faktiske resultater ind i sit svar.
-*Uden værktøjer kan modellen kun gætte — med værktøjer kan den kalde API’er, køre beregninger og returnere realtime data.*
+*Uden værktøjer kan modellen kun gætte — med værktøjer kan den kalde API’er, udføre beregninger og returnere realtidsdata.*
-En AI-agent med værktøjer følger et **Reasoning and Acting (ReAct)** mønster. Modellen reagerer ikke bare — den tænker over, hvad den har brug for, handler ved at kalde et værktøj, observerer resultatet og beslutter så, om den skal handle igen eller give det endelige svar:
+En AI-agent med værktøjer følger et **Reasoning and Acting (ReAct)** mønster. Modellen responderer ikke bare — den tænker over, hvad den har brug for, handler ved at kalde et værktøj, observerer resultatet, og beslutter så, om den skal handle igen eller levere det endelige svar:
-1. **Resonér** — Agenten analyserer brugerens spørgsmål og fastslår, hvilken information den har brug for
-2. **Handl** — Agenten vælger det rette værktøj, genererer de korrekte parametre og kalder værktøjet
-3. **Observer** — Agenten modtager værktøjets output og evaluerer resultatet
-4. **Gentag eller svar** — Hvis der er brug for mere data, gentager agenten processen; ellers udformer den et naturligt sprog-svar
+1. **Ræsonnere** — Agenten analyserer brugerens spørgsmål og bestemmer, hvilken information den har brug for
+2. **Handle** — Agenten vælger det rigtige værktøj, genererer de korrekte parametre og kalder det
+3. **Observere** — Agenten modtager værktøjets output og evaluerer resultatet
+4. **Gentage eller svare** — Hvis der er brug for mere data, gentager agenten; ellers formulerer den et naturligt sprog svar
-*ReAct-cyklussen — agenten overvejer handling, handler ved at kalde et værktøj, observerer resultatet, og gentager til det kan levere et endeligt svar.*
+*ReAct-cyklussen — agenten ræsonnerer om, hvad den skal gøre, handler ved at kalde et værktøj, observerer resultatet, og gentager indtil det kan levere det endelige svar.*
-Dette sker automatisk. Du definerer værktøjerne og deres beskrivelser. Modellen håndterer beslutningstagningen om, hvornår og hvordan de skal bruges.
+Dette sker automatisk. Du definerer værktøjerne og deres beskrivelser. Modellen håndterer beslutningen om, hvornår og hvordan de skal bruges.
## Hvordan værktøjskald fungerer
@@ -78,7 +78,7 @@ Dette sker automatisk. Du definerer værktøjerne og deres beskrivelser. Modelle
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-Du definerer funktioner med klare beskrivelser og parameterspecifikationer. Modellen ser disse beskrivelser i sit systemprompt og forstår, hvad hvert værktøj gør.
+Du definerer funktioner med klare beskrivelser og parametrespecifikationer. Modellen ser disse beskrivelser i sit system-prompt og forstår, hvad hvert værktøj gør.
```java
@Component
@@ -86,7 +86,7 @@ public class WeatherTool {
@Tool("Get the current weather for a location")
public String getCurrentWeather(@P("Location name") String location) {
- // Din vejropslagslogik
+ // Din logik til vejropslag
return "Weather in " + location + ": 22°C, cloudy";
}
}
@@ -99,101 +99,101 @@ public interface Assistant {
// Assistenten er automatisk forbundet af Spring Boot med:
// - ChatModel bean
// - Alle @Tool metoder fra @Component klasser
-// - ChatMemoryProvider til sessionshåndtering
+// - ChatMemoryProvider til sessionhåndtering
```
-Diagrammet nedenfor gennemgår hver annotation og viser, hvordan hver del hjælper AI med at forstå, hvornår værktøjet skal kaldes, og hvilke argumenter der skal sendes:
+Diagrammet nedenfor gennemgår hver annotation og viser, hvordan hver del hjælper AI med at forstå, hvornår den skal kalde værktøjet, og hvilke argumenter den skal sende:
-*Anatomi af en værktøjsdefinition — @Tool fortæller AI, hvornår det skal bruges, @P beskriver hver parameter, og @AiService forbinder det hele ved opstart.*
+*Anatomi af en værktøjsdefinition — @Tool fortæller AI, hvornår den skal bruge det, @P beskriver hver parameter, og @AiService samler det hele ved opstart.*
> **🤖 Prøv med [GitHub Copilot](https://github.com/features/copilot) Chat:** Åbn [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) og spørg:
-> - "Hvordan integrerer jeg en ægte vejr-API som OpenWeatherMap i stedet for mock-data?"
-> - "Hvad gør en god værktøjsbeskrivelse, der hjælper AI med at bruge det korrekt?"
+> - "Hvordan integrerer jeg en rigtig vejrudsigts-API som OpenWeatherMap i stedet for mock-data?"
+> - "Hvad gør en god værktøjsbeskrivelse, som hjælper AI med at bruge det korrekt?"
> - "Hvordan håndterer jeg API-fejl og rate limits i værktøjsimplementeringer?"
### Beslutningstagning
-Når en bruger spørger "Hvordan er vejret i Seattle?", vælger modellen ikke tilfældigt et værktøj. Den sammenligner brugerens hensigt med alle værktøjsbeskrivelser, den har adgang til, vurderer relevansen for hver og vælger det bedste match. Den genererer derefter et struktureret funktionskald med de rette parametre — i dette tilfælde ved at sætte `location` til `"Seattle"`.
+Når en bruger spørger "Hvordan er vejret i Seattle?", vælger modellen ikke tilfældigt et værktøj. Den sammenligner brugerens intention med hver værktøjsbeskrivelse, den har adgang til, vurderer relevansen af hver, og vælger det bedste match. Den genererer derefter et struktureret funktionskald med de rigtige parametre — i dette tilfælde `location` sat til `"Seattle"`.
-Hvis intet værktøj matcher brugerens forespørgsel, falder modellen tilbage til at svare ud fra sin egen viden. Hvis flere værktøjer matcher, vælger den det mest specifikke.
+Hvis intet værktøj matcher brugerens forespørgsel, falder modellen tilbage og svarer ud fra sin egen viden. Hvis flere værktøjer matcher, vælger den det mest specifikke.
-*Modellen evaluerer hvert tilgængeligt værktøj i forhold til brugerens hensigt og vælger det bedste match — derfor er klare, specifikke værktøjsbeskrivelser vigtige.*
+*Modellen evaluerer hvert tilgængeligt værktøj mod brugerens intention og vælger det bedste match — derfor er klare og specifikke værktøjsbeskrivelser vigtige.*
-### Udførelse
+### Eksekvering
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-Spring Boot auto-forbinder det deklarative `@AiService` interface med alle registrerede værktøjer, og LangChain4j udfører værktøjskald automatisk. Bag kulisserne har et komplet værktøjskald seks faser — fra brugerens spørgsmål i naturligt sprog helt tilbage til et svar i naturligt sprog:
+Spring Boot auto-wirer det deklarative `@AiService` interface med alle registrerede værktøjer, og LangChain4j eksekverer værktøjskald automatisk. Bag scenen flyder en komplet værktøjskaldproces gennem seks faser — fra brugerens spørgsmål i naturligt sprog hele vejen tilbage til et naturligt sprog svar:
-*Den komplette end-to-end flow — brugeren stiller et spørgsmål, modellen vælger et værktøj, LangChain4j udfører det, og modellen fletter resultatet ind i et naturligt svar.*
+*Den end-to-end flow — brugeren stiller et spørgsmål, modellen vælger et værktøj, LangChain4j udfører det, og modellen fletter resultatet ind i et naturligt svar.*
-Hvis du kørte [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) i Modul 00, har du allerede set dette mønster i aktion — `Calculator`-værktøjerne blev kaldt på samme måde. Sekvensdiagrammet nedenfor viser præcis, hvad der skete under overfladen under den demo:
+Bag scenen kører `AiServices` den samme værktøjskaldsløkke for ethvert værktøj — her illustreret med en simpel `Calculator`. Sekvensdiagrammet nedenfor viser præcis, hvad der sker under motorhjelmen:
-*Værktøjskaldsløkken fra Quick Start-demoen — `AiServices` sender din besked og værktøjsskemaer til LLM, LLM svarer med et funktionskald som `add(42, 58)`, LangChain4j kører `Calculator`-metoden lokalt, og sender resultatet tilbage til det endelige svar.*
+*Værktøjskaldsløkken — `AiServices` sender din besked og værktøjsskemaer til LLM, LLM svarer med et funktionskald som `add(42, 58)`, LangChain4j udfører `Calculator` metoden lokalt, og sender resultatet tilbage til det endelige svar.*
> **🤖 Prøv med [GitHub Copilot](https://github.com/features/copilot) Chat:** Åbn [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) og spørg:
-> - "Hvordan fungerer ReAct-mønsteret, og hvorfor er det effektivt for AI-agenter?"
+> - "Hvordan fungerer ReAct-mønsteret og hvorfor er det effektivt for AI-agenter?"
> - "Hvordan beslutter agenten, hvilket værktøj der skal bruges og i hvilken rækkefølge?"
-> - "Hvad sker der, hvis en værktøjsudførelse fejler - hvordan håndterer jeg fejl robust?"
+> - "Hvad sker der, hvis et værktøjseksekvering fejler - hvordan håndterer jeg fejl robust?"
-### Generering af svar
+### Svargenerering
-Modellen modtager vejrinformationerne og formaterer dem til et svar i naturligt sprog til brugeren.
+Modellen modtager vejrudsigtsdataene og formaterer det til et svar i naturligt sprog til brugeren.
### Arkitektur: Spring Boot Auto-Wiring
-Dette modul bruger LangChain4js Spring Boot-integration med deklarative `@AiService` interfaces. Ved opstart opdager Spring Boot alle `@Component` med `@Tool`-metoder, din `ChatModel` bean og `ChatMemoryProvider` — og binder dem alle sammen i et enkelt `Assistant` interface uden boilerplate.
+Dette modul bruger LangChain4j’s Spring Boot integration med deklarative `@AiService` interfaces. Ved opstart opdager Spring Boot alle `@Component` der indeholder `@Tool` metoder, din `ChatModel` bean og `ChatMemoryProvider` — og kobler dem alle sammen i et enkelt `Assistant` interface uden nogen form for boilerplate.
-*@AiService-interfacet binder ChatModel, værktøjskomponenter og hukommelsesudbyder sammen — Spring Boot håndterer alle bindinger automatisk.*
+*@AiService interfacet samler ChatModel, værktøjskomponenter og hukommelsesprovider — Spring Boot håndterer al wiring automatisk.*
-Her er hele anmodningens livscyklus som et sekvensdiagram — fra HTTP-anmodningen gennem controller, service og auto-forbundet proxy, helt til værktøjets udførelse og tilbage:
+Her er hele forespørgselslivscyklussen som sekvensdiagram — fra HTTP-forespørgslen via controller, service og auto-wired proxy, hele vejen til værktøjseksekvering og tilbage:
-*Den komplette Spring Boot-anmodnings livscyklus — HTTP-anmodningen går gennem controlleren og servicen til den auto-forbundne Assistant proxy, som orkestrerer LLM og værktøjskald automatisk.*
+*Den komplette Spring Boot forespørgselslivscyklus — HTTP-forespørgslen flyder gennem controller og service til den auto-wired Assistant proxy, som orkestrerer LLM og værktøjskald automatisk.*
Vigtige fordele ved denne tilgang:
- **Spring Boot auto-wiring** — ChatModel og værktøjer injiceres automatisk
-- **@MemoryId-mønster** — Automatisk sessionsbaseret hukommelsesstyring
-- **Én enkelt instans** — Assistant oprettes én gang og genbruges for bedre ydeevne
-- **Typesikker udførelse** — Java-metoder kaldes direkte med typekonvertering
-- **Multi-turn orkestrering** — Håndterer automatisk kædning af værktøjer
-- **Ingen boilerplate** — Ingen manuelle kald til `AiServices.builder()` eller hukommelses-HashMap
+- **@MemoryId mønster** — Automatisk sessionsbaseret hukommelsesstyring
+- **Enkelt instans** — Assistant oprettes én gang og genbruges for bedre ydeevne
+- **Typesikker eksekvering** — Java-metoder kaldes direkte med typekonvertering
+- **Multi-turn orkestrering** — Håndterer værktøjskædning automatisk
+- **Ingen boilerplate** — Ingen manuelle `AiServices.builder()` kald eller hukommelses HashMap
-Alternative tilgange (manuelt `AiServices.builder()`) kræver mere kode og mangler Spring Boot integrationsfordele.
+Alternative tilgange (manuelt `AiServices.builder()`) kræver mere kode og mangler Spring Boot integrationsfordelene.
-## Kædning af værktøjer
+## Værktøjskædning
-**Kædning af værktøjer** — Den virkelige styrke ved værktøjsbaserede agenter viser sig, når et enkelt spørgsmål kræver flere værktøjer. Spørg "Hvordan er vejret i Seattle i Fahrenheit?" og agenten kæder automatisk to værktøjer sammen: først kalder den `getCurrentWeather` for at få temperaturen i Celsius, derefter sender den den værdi til `celsiusToFahrenheit` for konvertering — alt sammen i én samtalerunde.
+**Værktøjskædning** — Den reelle styrke ved værktøjsbaserede agenter viser sig, når et enkelt spørgsmål kræver flere værktøjer. Spørg "Hvordan er vejret i Seattle i Fahrenheit?" og agenten kæder automatisk to værktøjer sammen: først kaldes `getCurrentWeather` for at hente temperaturen i Celsius, derefter sendes den værdi til `celsiusToFahrenheit` for konvertering — alt i én samtalerunde.
-*Kædning af værktøjer i aktion — agenten kalder først getCurrentWeather, sender så Celsius-resultatet videre til celsiusToFahrenheit, og leverer et samlet svar.*
+*Værktøjskædning i praksis — agenten kalder først getCurrentWeather, sender derefter Celsius-resultatet til celsiusToFahrenheit og leverer et kombineret svar.*
-**Elegant fejlhåndtering** — Spørg efter vejret i en by, der ikke findes i mock-dataene. Værktøjet returnerer en fejlmeddelelse, og AI forklarer, at den ikke kan hjælpe i stedet for at crashe. Værktøjer fejler sikkert. Diagrammet nedenfor sammenligner de to tilgange — med korrekt fejlhåndtering fanger agenten undtagelsen og svarer hjælpsomt, mens uden den crasher hele applikationen:
+**Gracieuze fejl** — Spørg efter vejret i en by der ikke findes i mock-dataene. Værktøjet returnerer en fejlmeddelelse, og AI forklarer, at det ikke kan hjælpe fremfor at crashe. Værktøjer fejler sikkert. Diagrammet nedenfor kontrasterer de to tilgange — med korrekt fejlhåndtering fanger agenten undtagelsen og svarer hjælpsomt, uden fejlhåndtering crasher hele applikationen:
*Når et værktøj fejler, fanger agenten fejlen og svarer med en hjælpsom forklaring i stedet for at crashe.*
-Dette sker i én samtalerunde. Agenten orkestrerer flere værktøjskald autonomt.
+Dette sker i en enkelt samtalerunde. Agenten orkestrerer flere værktøjskald autonomt.
## Kør applikationen
-**Bekræft implementering:**
+**Verificer deployment:**
-Sørg for, at `.env`-filen findes i rodkataloget med Azure-legitimationsoplysninger (oprettet under Modul 01). Kør dette fra modulets bibliotek (`04-tools/`):
+Sørg for, at `.env` filen findes i rodkataloget med Azure legitimationsoplysninger (oprettet under Modul 01). Kør dette fra modulkataloget (`04-tools/`):
**Bash:**
```bash
@@ -207,42 +207,42 @@ Get-Content ..\.env # Skal vise AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
**Start applikationen:**
-> **Note:** Hvis du allerede har startet alle applikationer med `./start-all.sh` fra rodkataloget (som beskrevet i Modul 01), kører dette modul allerede på port 8084. Du kan springe startkommandoerne over og gå direkte til http://localhost:8084.
+> **Note:** Hvis du allerede har startet alle applikationer med `./start-all.sh` fra rodkataloget (som beskrevet i Modul 01), kører dette modul allerede på port 8084. Du kan springe startkommandoerne nedenfor over og gå direkte til http://localhost:8084.
-**Mulighed 1: Brug af Spring Boot Dashboard (Anbefales til VS Code-brugere)**
+**Mulighed 1: Brug Spring Boot Dashboard (anbefales til VS Code-brugere)**
-Dev-containeren inkluderer Spring Boot Dashboard-udvidelsen, som giver en visuel grænseflade til at administrere alle Spring Boot-applikationer. Du kan finde den i aktivitetsbjælken til venstre i VS Code (se efter Spring Boot-ikonet).
+Dev containeren inkluderer Spring Boot Dashboard udvidelsen, som giver en visuel brugerflade til at styre alle Spring Boot applikationer. Du kan finde den i Aktivitetslinjen til venstre i VS Code (se efter Spring Boot ikonet).
Fra Spring Boot Dashboard kan du:
-- Se alle tilgængelige Spring Boot-applikationer i arbejdsområdet
-- Starte/stoppe applikationer med et enkelt klik
+- Se alle tilgængelige Spring Boot applikationer i workspace
+- Starte/stoppe applikationer med ét klik
- Se applikationslogs i realtid
- Overvåge applikationens status
+
Klik blot på afspilningsknappen ved siden af "tools" for at starte dette modul, eller start alle moduler på én gang.
Sådan ser Spring Boot Dashboard ud i VS Code:
-
-*Spring Boot Dashboard i VS Code — start, stop og overvåg alle moduler fra ét sted*
+*Spring Boot-dashboardet i VS Code — start, stop og overvåg alle moduler ét sted*
-**Mulighed 2: Brug af shell scripts**
+**Mulighed 2: Brug af shell-scripts**
Start alle webapplikationer (moduler 01-04):
**Bash:**
```bash
-cd .. # Fra rodmappen
+cd .. # Fra rodkatalog
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # Fra rodmappe
+cd .. # Fra rodmappen
.\start-all.ps1
```
-Eller start kun dette modul:
+Eller start kun denne modul:
**Bash:**
```bash
@@ -256,9 +256,9 @@ cd 04-tools
.\start.ps1
```
-Begge scripts indlæser automatisk miljøvariabler fra roden `.env`-filen og vil bygge JAR-filerne, hvis de ikke findes.
+Begge scripts indlæser automatisk miljøvariable fra rod-`.env`-filen og vil bygge JAR-filerne, hvis de ikke findes.
-> **Bemærk:** Hvis du foretrækker at bygge alle moduler manuelt inden start:
+> **Note:** Hvis du foretrækker at bygge alle moduler manuelt før start:
>
> **Bash:**
> ```bash
@@ -290,72 +290,72 @@ cd .. && ./stop-all.sh # Alle moduler
cd ..; .\stop-all.ps1 # Alle moduler
```
-## Brug af Applikationen
+## Brug af applikationen
-Applikationen giver en webgrænseflade, hvor du kan interagere med en AI-agent, der har adgang til vejr- og temperaturkonverteringsværktøjer. Sådan ser grænsefladen ud — den indeholder hurtigstart-eksempler og en chatpanel til at sende forespørgsler:
+Applikationen tilbyder en webgrænseflade, hvor du kan interagere med en AI-agent, der har adgang til vejr- og temperaturkonverteringsværktøjer. Sådan ser grænsefladen ud — den inkluderer hurtigstart-eksempler og en chatpanel til at sende forespørgsler:
-*AI Agent Tools-grænsefladen – hurtige eksempler og chatinterface til interaktion med værktøjer*
+*AI Agent Tools-grænsefladen - hurtige eksempler og chatinterface til interaktion med værktøjer*
-### Prøv Enkel Brug af Værktøjer
+### Prøv simpel brug af værktøjer
-Start med en simpel forespørgsel: "Konverter 100 grader Fahrenheit til Celsius". Agenten genkender, at den skal bruge temperaturkonverteringsværktøjet, kalder det med de rette parametre og returnerer resultatet. Bemærk, hvor naturligt det føles – du specificerede ikke, hvilket værktøj der skulle bruges eller hvordan det skulle kaldes.
+Start med en enkel forespørgsel: "Konvertér 100 grader Fahrenheit til Celsius". Agenten genkender, at den skal bruge temperaturkonverteringsværktøjet, kalder det med de rette parametre og returnerer resultatet. Bemærk, hvor naturligt det føles – du specificerede ikke hvilket værktøj, der skulle bruges, eller hvordan det skulle kaldes.
-### Test Kædning af Værktøjer
+### Test værktøjskædning
-Prøv nu noget mere komplekst: "Hvad er vejret i Seattle og konverter det til Fahrenheit?" Se hvordan agenten arbejder trin for trin. Den henter først vejret (som returnerer Celsius), genkender behovet for at konvertere til Fahrenheit, kalder konverteringsværktøjet og kombinerer begge resultater i et svar.
+Prøv nu noget mere komplekst: "Hvordan er vejret i Seattle, og konvertér det til Fahrenheit?" Se agenten arbejde i trin. Den henter først vejret (som returnerer Celsius), genkender, at den skal konvertere til Fahrenheit, kalder konverteringsværktøjet og kombinerer begge resultater til ét svar.
-### Se Samtale Flow
+### Se samtaleflow
-Chatinterfacet bevarer samtalehistorikken, så du kan have flertrins-interaktioner. Du kan se alle tidligere forespørgsler og svar, hvilket gør det nemt at følge samtalen og forstå, hvordan agenten bygger kontekst over flere udvekslinger.
+Chatinterfacet gemmer samtalehistorik, så du kan have flertrinsinteraktioner. Du kan se alle tidligere forespørgsler og svar, hvilket gør det let at følge samtalen og forstå, hvordan agenten opbygger kontekst gennem flere udvekslinger.
-*Flertrins-samtale, der viser simple konverteringer, vejropslag og kædning af værktøjer*
+*Flertrins-samtale som viser simple konverteringer, vejropslag og værktøjskædning*
-### Eksperimentér med Forskellige Forespørgsler
+### Eksperimenter med forskellige forespørgsler
Prøv forskellige kombinationer:
- Vejropslag: "Hvordan er vejret i Tokyo?"
- Temperaturkonverteringer: "Hvad er 25°C i Kelvin?"
-- Kombinerede forespørgsler: "Tjek vejret i Paris og fortæl om det er over 20°C"
+- Kombinerede forespørgsler: "Tjek vejret i Paris og fortæl mig, om det er over 20°C"
-Bemærk, hvordan agenten fortolker naturligt sprog og oversætter det til relevante værktøjskald.
+Bemærk, hvordan agenten fortolker naturligt sprog og omformer det til passende værktøjskald.
-## Centrale Begreber
+## Nøglebegreber
-### ReAct Mønster (Resonering og Handling)
+### ReAct-mønster (Resonnering og Handling)
-Agenten skifter mellem at ræsonnere (beslutte hvad der skal gøres) og handle (bruge værktøjer). Dette mønster muliggør autonom problemløsning i stedet for bare at svare på instruktioner.
+Agenten skifter mellem resonnering (beslutte hvad der skal gøres) og handling (bruge værktøjer). Dette mønster muliggør autonom problemløsning i stedet for blot at svare på instruktioner.
-### Værktøjsbeskrivelser Betyr
+### Værktøjsbeskrivelser er vigtige
-Kvaliteten af dine værktøjsbeskrivelser påvirker direkte, hvor godt agenten bruger dem. Klare, specifikke beskrivelser hjælper modellen med at forstå hvornår og hvordan hvert værktøj skal kaldes.
+Kvaliteten af dine værktøjsbeskrivelser påvirker direkte, hvor godt agenten bruger dem. Klare og præcise beskrivelser hjælper modellen med at forstå, hvornår og hvordan hvert værktøj skal kaldes.
### Sessionsstyring
-`@MemoryId`-annotationen muliggør automatisk sessionsbaseret hukommelsesstyring. Hver session-ID får sin egen `ChatMemory`-instans styret af `ChatMemoryProvider`-bean, så flere brugere kan interagere samtidigt uden at deres samtaler blandes. Følgende diagram viser, hvordan flere brugere rutes til isolerede hukommelseslagre baseret på deres session-ID’er:
+`@MemoryId`-annoteringen muliggør automatisk sessionbaseret hukommelsesstyring. Hvert sessions-ID får sin egen `ChatMemory`-instans, der håndteres af `ChatMemoryProvider`-bean'en, så flere brugere kan interagere med agenten samtidigt uden at deres samtaler blandes sammen. Følgende diagram viser, hvordan flere brugere dirigeres til isolerede hukommelseslager baseret på deres sessions-ID'er:
-*Hver session-ID svarer til en isoleret samtalehistorik — brugerne ser aldrig hinandens beskeder.*
+*Hvert sessions-ID svarer til en isoleret samtalehistorik — brugere ser aldrig hinandens beskeder.*
### Fejlhåndtering
-Værktøjer kan fejle — API’er timeout, parametre kan være ugyldige, eksterne tjenester går ned. Produktionsagenter har brug for fejlhåndtering, så modellen kan forklare problemer eller prøve alternativer i stedet for at få hele applikationen til at gå ned. Når et værktøj kaster en undtagelse, fanger LangChain4j den og sender fejlbeskeden tilbage til modellen, som kan forklare problemet i naturligt sprog.
+Værktøjer kan fejle — API'er kan timeout'e, parametre kan være ugyldige, eksterne tjenester kan gå ned. Produktionsagenter har brug for fejlhåndtering, så modellen kan forklare problemer eller prøve alternativer i stedet for at få hele applikationen til at crashe. Når et værktøj kaster en undtagelse, fanger LangChain4j den og sender fejlbeskeden tilbage til modellen, som så kan forklare problemet i naturligt sprog.
-## Tilgængelige Værktøjer
+## Tilgængelige værktøjer
-Diagrammet nedenfor viser det brede økosystem af værktøjer, du kan bygge. Dette modul demonstrerer vejr- og temperaturværktøjer, men det samme `@Tool`-mønster fungerer for enhver Java-metode — fra databaseforespørgsler til betalingsbehandling.
+Diagrammet nedenfor viser det brede økosystem af værktøjer, du kan bygge. Denne modul demonstrerer vejrudsigts- og temperaturværktøjer, men det samme `@Tool`-mønster fungerer for enhver Java-metode — fra databaseforespørgsler til betalingsbehandling.
-*Enhver Java-metode annoteret med @Tool bliver tilgængelig for AI’en — mønstret gælder også for databaser, API’er, e-mail, filoperationer og mere.*
+*Enhver Java-metode annoteret med @Tool bliver tilgængelig for AI — mønsteret rækker til databaser, API'er, e-mail, filoperationer og meget mere.*
-## Hvornår Skal Man Bruge Værktøjsbaserede Agenter
+## Hvornår skal man bruge værktøjsbaserede agenter
-Ikke alle forespørgsler behøver værktøjer. Beslutningen handler om, hvorvidt AI’en skal interagere med eksterne systemer, eller om den kan svare ud fra sin egen viden. Følgende guide opsummerer, hvornår værktøjer tilfører værdi, og hvornår de er unødvendige:
+Ikke alle forespørgsler kræver værktøjer. Beslutningen afhænger af, om AI'en skal interagere med eksterne systemer eller kan svare ud fra sin egen viden. Følgende guide opsummerer, hvornår værktøjer tilfører værdi, og hvornår de ikke er nødvendige:
@@ -363,25 +363,25 @@ Ikke alle forespørgsler behøver værktøjer. Beslutningen handler om, hvorvidt
## Værktøjer vs RAG
-Modulerne 03 og 04 udvider begge, hvad AI’en kan, men på fundamentalt forskellige måder. RAG giver modellen adgang til **viden** ved at hente dokumenter. Værktøjer giver modellen evnen til at tage **handlinger** ved at kalde funktioner. Diagrammet nedenfor sammenligner de to tilgange side om side — fra hvordan hvert workflow fungerer til kompromiserne mellem dem:
+Moduler 03 og 04 udvider begge AI'ens kapacitet, men på fundamentalt forskellige måder. RAG giver modellen adgang til **viden** ved at hente dokumenter. Værktøjer giver modellen mulighed for at udføre **handlinger** ved at kalde funktioner. Diagrammet nedenfor sammenligner disse to tilgange side om side — fra hvordan hver workflow fungerer til afvejningerne mellem dem:
*RAG henter information fra statiske dokumenter — Værktøjer udfører handlinger og henter dynamiske, realtidsdata. Mange produktionssystemer kombinerer begge.*
-I praksis kombinerer mange produktionssystemer begge tilgange: RAG til at forankre svar i din dokumentation, og Værktøjer til at hente live data eller udføre operationer.
+I praksis kombinerer mange produktionssystemer begge tilgange: RAG til at forankre svar i din dokumentation og Værktøjer til at hente live-data eller udføre operationer.
-## Næste Skridt
+## Næste skridt
-**Næste Modul:** [05-mcp - Model Context Protocol (MCP)](../05-mcp/README.md)
+**Næste modul:** [05-mcp - Model Context Protocol (MCP)](../05-mcp/README.md)
---
-**Navigation:** [← Forrige: Modul 03 - RAG](../03-rag/README.md) | [Tilbage til Hovedmenu](../README.md) | [Næste: Modul 05 - MCP →](../05-mcp/README.md)
+**Navigation:** [← Forrige: Modul 03 - RAG](../03-rag/README.md) | [Tilbage til hoved](../README.md) | [Næste: Modul 05 - MCP →](../05-mcp/README.md)
---
**Ansvarsfraskrivelse**:
-Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, bedes du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på originalsproget bør betragtes som den autoritative kilde. For vigtig information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.
+Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.
\ No newline at end of file
diff --git a/translations/da/README.md b/translations/da/README.md
index 052682888..5a378e389 100644
--- a/translations/da/README.md
+++ b/translations/da/README.md
@@ -1,19 +1,19 @@
-# LangChain4j for begyndere
+# LangChain4j for Begyndere
Et kursus til at bygge AI-applikationer med LangChain4j og Azure OpenAI GPT-5.2, fra grundlæggende chat til AI-agenter.
-### 🌐 Understøttelse af flere sprog
+### 🌐 Fler-sprog understøttelse
#### Understøttet via GitHub Action (Automatiseret & Altid Opdateret)
-[Arabisk](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarsk](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Kinesisk (Forenklet)](../zh-CN/README.md) | [Kinesisk (Traditionelt, Hong Kong)](../zh-HK/README.md) | [Kinesisk (Traditionelt, Macau)](../zh-MO/README.md) | [Kinesisk (Traditionelt, Taiwan)](../zh-TW/README.md) | [Kroatisk](../hr/README.md) | [Tjekkisk](../cs/README.md) | [Dansk](./README.md) | [Hollandsk](../nl/README.md) | [Estisk](../et/README.md) | [Finsk](../fi/README.md) | [Fransk](../fr/README.md) | [Tysk](../de/README.md) | [Græsk](../el/README.md) | [Hebraisk](../he/README.md) | [Hindi](../hi/README.md) | [Ungarsk](../hu/README.md) | [Indonesisk](../id/README.md) | [Italiensk](../it/README.md) | [Japansk](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Koreansk](../ko/README.md) | [Litauisk](../lt/README.md) | [Malayisk](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepalesisk](../ne/README.md) | [Nigeriansk Pidgin](../pcm/README.md) | [Norsk](../no/README.md) | [Persisk (Farsi)](../fa/README.md) | [Polsk](../pl/README.md) | [Portugisisk (Brasilien)](../pt-BR/README.md) | [Portugisisk (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Rumænsk](../ro/README.md) | [Russisk](../ru/README.md) | [Serbisk (Kyrillisk)](../sr/README.md) | [Slovakisk](../sk/README.md) | [Slovensk](../sl/README.md) | [Spansk](../es/README.md) | [Swahili](../sw/README.md) | [Svensk](../sv/README.md) | [Tagalog (Filippinsk)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Tyrkisk](../tr/README.md) | [Ukrainsk](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamesisk](../vi/README.md)
+[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](./README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
> **Foretrækker du at klone lokalt?**
>
-> Dette repository indeholder over 50 sprogoversættelser, hvilket væsentligt øger downloadstørrelsen. For at klone uden oversættelser, brug sparse checkout:
+> Dette repository inkluderer 50+ sprogoversættelser, hvilket markant øger downloadstørrelsen. For at klone uden oversættelser skal du bruge sparse checkout:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -29,64 +29,63 @@ Et kursus til at bygge AI-applikationer med LangChain4j og Azure OpenAI GPT-5.2,
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> Dette giver dig alt hvad du behøver for at gennemføre kurset med en meget hurtigere download.
+> Dette giver dig alt, hvad du behøver for at gennemføre kurset med en meget hurtigere download.
## Indholdsfortegnelse
-1. [Hurtig Start](00-quick-start/README.md) - Kom i gang med LangChain4j
-2. [Introduktion](01-introduction/README.md) - Lær de grundlæggende principper for LangChain4j
-3. [Prompt Engineering](02-prompt-engineering/README.md) - Mestring af effektiv promptdesign
-4. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Byg intelligente vidensbaserede systemer
-5. [Værktøjer](04-tools/README.md) - Integrer eksterne værktøjer og simple assistenter
-6. [MCP (Model Context Protocol)](05-mcp/README.md) - Arbejd med Model Context Protocol (MCP) og Agentic moduler
+1. [Introduktion](01-introduction/README.md) - Lær grundlæggende om LangChain4j
+2. [Prompt Engineering](02-prompt-engineering/README.md) - Mestre effektiv promptdesign
+3. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Byg intelligente vidensbaserede systemer
+4. [Værktøjer](04-tools/README.md) - Integrer eksterne værktøjer og simple assistenter
+5. [MCP (Model Context Protocol)](05-mcp/README.md) - Arbejd med Model Context Protocol (MCP) og Agentiske moduler
-### Video Gennemgange
+### Videogenveje
-Hvert modul har en ledsagende live-session, hvor vi gennemgår koncepter og kode trin for trin.
+Hvert modul har en ledsagende live session, hvor vi gennemgår koncepterne og koden trin for trin.
| Modul | Video |
|--------|-------|
| 01 - Introduktion | [Kom godt i gang med LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
| 02 - Prompt Engineering | [Prompt Engineering med LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
| 03 - RAG | [RAG med LangChain4j](https://www.youtube.com/watch?v=_olq75ZH_eY) |
-| 04 - Værktøjer & 05 - MCP | [AI Agenter med værktøjer og MCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
+| 04 - Værktøjer & 05 - MCP | [AI-agenter med værktøjer og MCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
---
-## Læringsvej
+## Læringssti
-**Ny til LangChain4j?** Tjek [Glossaret](docs/GLOSSARY.md) for definitioner af nøgleord og begreber.
+**Ny til LangChain4j?** Se [Glossaret](docs/GLOSSARY.md) for definitioner af nøglebegreber og koncepter.
-> **Hurtig Start**
+> **Hurtig start**
1. Fork dette repository til din GitHub-konto
-2. Klik på **Code** → fanen **Codespaces** → **...** → **New with options...**
-3. Brug standardindstillingerne – dette vælger udviklingscontaineren oprettet for dette kursus
-4. Klik på **Create codespace**
-5. Vent 5-10 minutter på, at miljøet er klar
-6. Spring direkte til [Hurtig Start](./00-quick-start/README.md) for at komme i gang!
+2. Klik **Code** → fanen **Codespaces** → **...** → **New with options...**
+3. Brug standardindstillingerne – dette vælger Development containeren, der er oprettet til dette kursus
+4. Klik **Create codespace**
+5. Vent 5-10 minutter, indtil miljøet er klar
+6. Gå direkte til [Introduktion](./01-introduction/README.md) for at komme i gang!
-Efter gennemførelse af modulerne, udforsk [Testvejledningen](docs/TESTING.md) for at se LangChain4j testkoncepter i praksis.
+Efter at have gennemført modulerne, kan du udforske [Testningsguide](docs/TESTING.md) for at se LangChain4j testkoncepter i praksis.
-> **Bemærk:** Denne træning bruger både GitHub Models og Azure OpenAI. [Hurtig Start](00-quick-start/README.md) modulet bruger GitHub Models (ingen Azure-abonnement kræves), mens moduler 1-5 bruger Azure OpenAI. Kom i gang med en [GRATIS Azure-konto](https://aka.ms/azure-free-account), hvis du ikke har en.
+> **Bemærk:** Denne træning bruger Azure OpenAI. Kom i gang med en [GRATIS Azure-konto](https://aka.ms/azure-free-account), hvis du ikke har en.
## Læring med GitHub Copilot
-For hurtigt at komme i gang med at kode, åbn dette projekt i en GitHub Codespace eller dit lokale IDE med den medfølgende devcontainer. Devcontaineren brugt i dette kursus kommer forudkonfigureret med GitHub Copilot til AI parprogrammering.
+For hurtigt at komme i gang med kodning, åbn dette projekt i en GitHub Codespace eller din lokale IDE med den leverede devcontainer. Devcontaineren brugt i dette kursus kommer forudkonfigureret med GitHub Copilot til AI-parprogrammering.
-Hvert kodeeksempel indeholder foreslåede spørgsmål, du kan stille GitHub Copilot for at uddybe din forståelse. Kig efter 💡/🤖 prompts i:
+Hvert kodeeksempel inkluderer foreslåede spørgsmål, du kan stille GitHub Copilot for at uddybe din forståelse. Hold øje med 💡/🤖 prompts i:
-- **Java-filoverskrifter** - Spørgsmål specifikt til hvert eksempel
-- **Modul READMEs** - Udforskningsforslag efter kodeeksempler
+- **Java-filoverskrifter** - Spørgsmål specifikke for hvert eksempel
+- **Modul-README'er** - Udforskningsprompter efter kodeeksempler
-**Sådan bruger du det:** Åbn en hvilken som helst kodefil og stil Copilot de foreslåede spørgsmål. Den har fuld kontekst af kodebasen og kan forklare, udvide og foreslå alternativer.
+**Hvordan bruges det:** Åbn en hvilken som helst kodefil og stil Copilot de foreslåede spørgsmål. Den har fuld kontekst af kodebasen og kan forklare, udvide og foreslå alternativer.
-Vil du lære mere? Se [Copilot for AI Paired Programming](https://aka.ms/GitHubCopilotAI).
+Vil du lære mere? Se [Copilot for AI Parprogrammering](https://aka.ms/GitHubCopilotAI).
-## Yderligere ressourcer
+## Yderligere Ressourcer
### LangChain
@@ -111,18 +110,19 @@ Vil du lære mere? Se [Copilot for AI Paired Programming](https://aka.ms/GitHubC
---
-### Kerneuddannelse
+### Kerne Læring
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
+
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
-### Copilot-serien
+### Copilot-serie
[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
@@ -130,11 +130,11 @@ Vil du lære mere? Se [Copilot for AI Paired Programming](https://aka.ms/GitHubC
## Få hjælp
-Hvis du går i stå eller har spørgsmål om at bygge AI-apps, så tilmeld dig:
+Hvis du sidder fast eller har spørgsmål om at bygge AI-apps, så deltag:
[](https://aka.ms/foundry/discord)
-Hvis du har produktfeedback eller fejl under bygning, så besøg:
+Hvis du har feedback på produktet eller oplever fejl under opbygning, besøg:
[](https://aka.ms/foundry/forum)
@@ -145,6 +145,6 @@ MIT-licens - Se [LICENSE](../../LICENSE) filen for detaljer.
---
-**Ansvarsfraskrivelse**:
-Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, bedes du være opmærksom på, at automatiske oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritiske oplysninger anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.
+**Ansvarsfraskrivelse**:
+Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.
\ No newline at end of file
diff --git a/translations/da/docs/GLOSSARY.md b/translations/da/docs/GLOSSARY.md
index 2449d702f..4fd2435b0 100644
--- a/translations/da/docs/GLOSSARY.md
+++ b/translations/da/docs/GLOSSARY.md
@@ -1,44 +1,44 @@
-# LangChain4j Ordliste
+# LangChain4j Ordlist
## Indholdsfortegnelse
-- [Kernekoncepter](../../../docs)
-- [LangChain4j Komponenter](../../../docs)
-- [AI/ML Koncepter](../../../docs)
-- [Guardrails](../../../docs)
-- [Prompt Engineering](../../../docs)
-- [RAG (Retrieval-Augmented Generation)](../../../docs)
-- [Agenter og Værktøjer](../../../docs)
-- [Agentic Modul](../../../docs)
-- [Model Context Protocol (MCP)](../../../docs)
-- [Azure Services](../../../docs)
-- [Testning og Udvikling](../../../docs)
+- [Kernebegreber](#kernebegreber)
+- [LangChain4j Komponenter](#langchain4j-komponenter)
+- [AI/ML Begreber](#aiml-begreber)
+- [Sikkerhedsspærrer](#sikkerhedsspærrer)
+- [Prompt Engineering](#prompt-engineering---module-02)
+- [RAG (Retrieval-Augmented Generation)](#rag-retrieval-augmented-generation---module-03)
+- [Agenter og Værktøjer](#agents-and-tools---module-04)
+- [Agentisk Modul](#agentic-module---module-05)
+- [Model Context Protocol (MCP)](#model-context-protocol-mcp---module-05)
+- [Azure Tjenester](#azure-services---module-01)
+- [Test og Udvikling](#testing-and-development---testing-guide)
-Hurtig reference for termer og koncepter brugt gennem kurset.
+Hurtig reference for termer og begreber brugt gennem hele kurset.
-## Kernekoncepter
+## Kernebegreber
-**AI Agent** - System, der bruger AI til at resonnere og handle autonomt. [Modul 04](../04-tools/README.md)
+**AI Agent** - System der bruger AI til at ræsonnere og handle autonomt. [Modul 04](../04-tools/README.md)
-**Chain** - Sekvens af operationer hvor output føres videre til næste trin.
+**Chain** - Sekvens af operationer hvor output føres ind i næste trin.
-**Chunking** - At opdele dokumenter i mindre stykker. Typisk: 300-500 tokens med overlap. [Modul 03](../03-rag/README.md)
+**Chunking** - Opdeling af dokumenter i mindre stykker. Typisk: 300-500 tokens med overlap. [Modul 03](../03-rag/README.md)
-**Context Window** - Maksimalt antal tokens et model kan behandle. GPT-5.2: 400K tokens (op til 272K input, 128K output).
+**Context Window** - Maksimalt antal tokens en model kan behandle. GPT-5.2: 400K tokens (op til 272K input, 128K output).
**Embeddings** - Numeriske vektorer der repræsenterer teksts betydning. [Modul 03](../03-rag/README.md)
-**Function Calling** - Model genererer strukturerede forespørgsler for at kalde eksterne funktioner. [Modul 04](../04-tools/README.md)
+**Function Calling** - Model genererer strukturerede forespørgsler til at kalde eksterne funktioner. [Modul 04](../04-tools/README.md)
-**Hallucination** - Når modeller genererer ukorrekte men plausible oplysninger.
+**Hallucination** - Når modeller genererer ukorrekt, men plausibel information.
**Prompt** - Tekstinput til en sprogmodel. [Modul 02](../02-prompt-engineering/README.md)
-**Semantic Search** - Søgning baseret på mening ved hjælp af embeddings, ikke nøgleord. [Modul 03](../03-rag/README.md)
+**Semantic Search** - Søgning efter betydning vha. embeddings, ikke nøgleord. [Modul 03](../03-rag/README.md)
-**Stateful vs Stateless** - Stateless: ingen hukommelse. Stateful: bevarer samtalehistorik. [Modul 01](../01-introduction/README.md)
+**Stateful vs Stateless** - Stateless: ingen hukommelse. Stateful: opretholder samtalehistorik. [Modul 01](../01-introduction/README.md)
-**Tokens** - Grundlæggende tekstenheder modeller behandler. Påvirker omkostninger og begrænsninger. [Modul 01](../01-introduction/README.md)
+**Tokens** - Grundlæggende tekst-enheder modeller behandler. Påvirker omkostninger og begrænsninger. [Modul 01](../01-introduction/README.md)
**Tool Chaining** - Sekventiel udførelse af værktøjer hvor output informerer næste kald. [Modul 04](../04-tools/README.md)
@@ -46,91 +46,91 @@ Hurtig reference for termer og koncepter brugt gennem kurset.
**AiServices** - Opretter type-sikre AI service interfaces.
-**OpenAiOfficialChatModel** - Fælles klient til OpenAI og Azure OpenAI modeller.
+**OpenAiOfficialChatModel** - Unified klient til OpenAI og Azure OpenAI modeller.
-**OpenAiOfficialEmbeddingModel** - Opretter embeddings ved brug af OpenAI Official klient (understøtter både OpenAI og Azure OpenAI).
+**OpenAiOfficialEmbeddingModel** - Opretter embeddings med OpenAI Official klient (understøtter både OpenAI og Azure OpenAI).
-**ChatModel** - Kerneinterface til sprogmodeller.
+**ChatModel** - Kerneinterface for sprogmodeller.
-**ChatMemory** - Bevarer samtalehistorik.
+**ChatMemory** - Opretholder samtalehistorik.
-**ContentRetriever** - Finder relevante dokumentstykker til RAG.
+**ContentRetriever** - Finder relevante dokumentudsnit til RAG.
**DocumentSplitter** - Opdeler dokumenter i stykker.
-**EmbeddingModel** - Omformer tekst til numeriske vektorer.
+**EmbeddingModel** - Konverterer tekst til numeriske vektorer.
**EmbeddingStore** - Gemmer og henter embeddings.
-**MessageWindowChatMemory** - Bevarer glidende vindue af nylige beskeder.
+**MessageWindowChatMemory** - Opretholder glidende vindue af seneste beskeder.
**PromptTemplate** - Opretter genanvendelige prompts med `{{variable}}` pladsholdere.
**TextSegment** - Tekststykke med metadata. Bruges i RAG.
-**ToolExecutionRequest** - Repræsenterer anmodning om udførelse af værktøj.
+**ToolExecutionRequest** - Repræsenterer værktøjsudførelsesanmodning.
-**UserMessage / AiMessage / SystemMessage** - Samtaletypemeddelelser.
+**UserMessage / AiMessage / SystemMessage** - Samtale beskedtyper.
-## AI/ML Koncepter
+## AI/ML Begreber
-**Few-Shot Learning** - At give eksempler i prompts. [Modul 02](../02-prompt-engineering/README.md)
+**Few-Shot Learning** - Tilvejebringer eksempler i prompts. [Modul 02](../02-prompt-engineering/README.md)
-**Large Language Model (LLM)** - AI modeller trænet på store mængder tekstdata.
+**Large Language Model (LLM)** - AI modeller trænet på enorm tekstdata.
**Reasoning Effort** - GPT-5.2 parameter der styrer tænkedybde. [Modul 02](../02-prompt-engineering/README.md)
-**Temperature** - Styrer outputtilfældighed. Lav=deterministisk, høj=kreativ.
+**Temperature** - Styrer output-tilfældighed. Lav=deterministisk, høj=kreativ.
**Vector Database** - Specialiseret database til embeddings. [Modul 03](../03-rag/README.md)
-**Zero-Shot Learning** - Udfør opgaver uden eksempler. [Modul 02](../02-prompt-engineering/README.md)
+**Zero-Shot Learning** - Udfører opgaver uden eksempler. [Modul 02](../02-prompt-engineering/README.md)
-## Guardrails - [Modul 00](../00-quick-start/README.md)
+## Sikkerhedsspærrer
-**Defense in Depth** - Flerlags sikkerhedstilgang der kombinerer applikationsniveau guardrails med safety-filtre fra udbyder.
+**Defense in Depth** - Flerlags sikkerhedstilgang der kombinerer applikationsniveau sikkerhedsspærrer med providersikkerhedsfiltre.
-**Hard Block** - Udbyder returnerer HTTP 400 fejl for alvorlige indholdsbrud.
+**Hard Block** - Provider kaster HTTP 400 fejl ved alvorlige indholdsbrud.
-**InputGuardrail** - LangChain4j interface til validering af brugerinput, før det når LLM. Sparrer omkostninger og latenstid ved at blokere skadelige prompts tidligt.
+**InputGuardrail** - LangChain4j interface til validering af brugerinput før det når LLM. Sparrer omkostninger og latenstid ved tidligt at blokere skadelige prompts.
-**InputGuardrailResult** - Returtype for guardrail validering: `success()` eller `fatal("årsag")`.
+**InputGuardrailResult** - Returneringstype for sikkerhedsspærrevalidering: `success()` eller `fatal("grund")`.
-**OutputGuardrail** - Interface til validering af AI-svar før de returneres til brugere.
+**OutputGuardrail** - Interface til validering af AI-svar før returnering til brugere.
-**Provider Safety Filters** - Indbyggede indholdsfiltre fra AI-udbydere (f.eks. GitHub Models) der fanger overtrædelser på API-niveau.
+**Provider Safety Filters** - Indbyggede indholdsfiltre fra AI-udbydere (fx Azure OpenAI) der fanger overtrædelser på API-niveau.
**Soft Refusal** - Model afviser høfligt at svare uden at kaste fejl.
## Prompt Engineering - [Modul 02](../02-prompt-engineering/README.md)
-**Chain-of-Thought** - Trinvis tankegang for bedre præcision.
+**Chain-of-Thought** - Trinvis ræsonnering for bedre nøjagtighed.
**Constrained Output** - Håndhæver specifikt format eller struktur.
-**High Eagerness** - GPT-5.2 mønster for grundig tænkning.
+**High Eagerness** - GPT-5.2 mønster til grundig ræsonnering.
-**Low Eagerness** - GPT-5.2 mønster for hurtige svar.
+**Low Eagerness** - GPT-5.2 mønster til hurtige svar.
-**Multi-Turn Conversation** - Bevarer kontekst på tværs af udvekslinger.
+**Multi-Turn Conversation** - Opretholder kontekst på tværs af udvekslinger.
-**Role-Based Prompting** - Indstiller modelperson via systembeskeder.
+**Role-Based Prompting** - Indstiller modelpersona via systembeskeder.
**Self-Reflection** - Model evaluerer og forbedrer sit output.
-**Structured Analysis** - Fast evalueringsramme.
+**Structured Analysis** - Fastsat evalueringsramme.
-**Task Execution Pattern** - Planlæg → Udfør → Opsummér.
+**Task Execution Pattern** - Plan → Udfør → Opsummer.
## RAG (Retrieval-Augmented Generation) - [Modul 03](../03-rag/README.md)
-**Document Processing Pipeline** - Indlæs → del i stykker → embed → gem.
+**Document Processing Pipeline** - Indlæs → opdel → embed → gem.
-**In-Memory Embedding Store** - Ikke-persistent lager til test.
+**In-Memory Embedding Store** - Ikke-permanent lagring til test.
-**RAG** - Kombinerer genfinding med generering for at underbygge svar.
+**RAG** - Kombinerer søgning med generering for at forankre svar.
-**Similarity Score** - Mål (0-1) for semantisk lighed.
+**Similarity Score** - Mål (0-1) af semantisk lighed.
**Source Reference** - Metadata om hentet indhold.
@@ -138,95 +138,93 @@ Hurtig reference for termer og koncepter brugt gennem kurset.
**@Tool Annotation** - Marker Java metoder som AI-kaldbare værktøjer.
-**ReAct Pattern** - Resonner → Handl → Observer → Gentag.
+**ReAct Pattern** - Tænk → Handle → Observer → Gentag.
-**Session Management** - Separate kontekster til forskellige brugere.
+**Session Management** - Separate kontekster for forskellige brugere.
-**Tool** - Funktion som en AI agent kan kalde.
+**Tool** - Funktion en AI-agent kan kalde.
**Tool Description** - Dokumentation af værktøjets formål og parametre.
-## Agentic Modul - [Modul 05](../05-mcp/README.md)
+## Agentisk Modul - [Modul 05](../05-mcp/README.md)
-**@Agent Annotation** - Marker interfaces som AI agenter med deklarativ adfærdsdefinition.
+**@Agent Annotation** - Marker interfaces som AI-agenter med deklarativ adfærdsdefinition.
-**Agent Listener** - Hook til overvågning af agentudførelse via `beforeAgentInvocation()` og `afterAgentInvocation()`.
+**Agent Listener** - Krog til overvågning af agentudførelse via `beforeAgentInvocation()` og `afterAgentInvocation()`.
-**Agentic Scope** - Delt hukommelse hvor agenter gemmer output med `outputKey` til videre forbrug af andre agenter.
+**Agentic Scope** - Delt hukommelse hvor agenter gemmer output med `outputKey` til efterfølgende agenter.
-**AgenticServices** - Fabrik til oprettelse af agenter via `agentBuilder()` og `supervisorBuilder()`.
+**AgenticServices** - Fabrik til at skabe agenter via `agentBuilder()` og `supervisorBuilder()`.
**Conditional Workflow** - Rute baseret på betingelser til forskellige specialistagenter.
-**Human-in-the-Loop** - Arbejdsgangsmønster der tilføjer menneskelige kontrolpunkter til godkendelse eller indholdsrevision.
+**Human-in-the-Loop** - Arbejdsgangsmønster der tilføjer menneskelige tjekpunkter til godkendelse eller indholdsrevision.
-**langchain4j-agentic** - Maven afhængighed for deklarativ agentopbygning (eksperimentel).
+**langchain4j-agentic** - Maven-afhængighed til deklarativ agentbygning (eksperimentel).
-**Loop Workflow** - Iterer agentudførelse indtil en betingelse er opfyldt (f.eks. kvalitets score ≥ 0.8).
+**Loop Workflow** - Iterér agentudførelse indtil en betingelse er opfyldt (fx kvalitetsscore ≥ 0.8).
-**outputKey** - Agent annotation parameter der angiver hvor resultater gemmes i Agentic Scope.
+**outputKey** - Agentannoteringsparameter der angiver hvor resultater gemmes i Agentic Scope.
**Parallel Workflow** - Kør flere agenter samtidigt til uafhængige opgaver.
-**Response Strategy** - Hvordan supervisor formulerer endeligt svar: LAST, SUMMARY, eller SCORED.
+**Response Strategy** - Hvordan supervisor formulerer endeligt svar: LAST, SUMMARY eller SCORED.
**Sequential Workflow** - Udfør agenter i rækkefølge hvor output flyder til næste trin.
-**Supervisor Agent Pattern** - Avanceret agentmønster hvor en supervisor LLM dynamisk beslutter hvilke sub-agenter der skal påkaldes.
+**Supervisor Agent Pattern** - Avanceret agentisk mønster hvor en supervisor LLM dynamisk beslutter hvilke underagenter der skal kaldes.
## Model Context Protocol (MCP) - [Modul 05](../05-mcp/README.md)
-**langchain4j-mcp** - Maven afhængighed til MCP integration i LangChain4j.
+**langchain4j-mcp** - Maven-afhængighed til MCP integration i LangChain4j.
-**MCP** - Model Context Protocol: standard for tilslutning af AI-apps til eksterne værktøjer. Byg én gang, brug alle steder.
+**MCP** - Model Context Protocol: standard for at forbinde AI apps til eksterne værktøjer. Byg én gang, brug overalt.
-**MCP Client** - Applikation der forbinder til MCP servere for at finde og bruge værktøjer.
+**MCP Client** - Applikation der forbinder til MCP servere for at opdage og bruge værktøjer.
-**MCP Server** - Tjeneste der eksponerer værktøjer via MCP med klare beskrivelser og parameterskemaer.
+**MCP Server** - Service der eksponerer værktøjer via MCP med klare beskrivelser og parameterskemaer.
-**McpToolProvider** - LangChain4j komponent der indpakker MCP værktøjer til brug i AI services og agenter.
+**McpToolProvider** - LangChain4j komponent der indkapsler MCP værktøjer til brug i AI tjenester og agenter.
**McpTransport** - Interface til MCP kommunikation. Implementeringer inkluderer Stdio og HTTP.
-**Stdio Transport** - Lokal proces transport via stdin/stdout. Brugbar til filsystemadgang eller kommandolinjeværktøjer.
+**Stdio Transport** - Lokal procestransport via stdin/stdout. Nyttig til filsystemadgang eller kommandolinjeværktøjer.
-**StdioMcpTransport** - LangChain4j implementering der starter MCP server som subprocess.
+**StdioMcpTransport** - LangChain4j implementering der starter MCP server som underproces.
-**Tool Discovery** - Klient spørger server efter tilgængelige værktøjer med beskrivelser og skemaer.
+**Tool Discovery** - Client spørger server om tilgængelige værktøjer med beskrivelser og skemaer.
-## Azure Services - [Modul 01](../01-introduction/README.md)
+## Azure Tjenester - [Modul 01](../01-introduction/README.md)
-**Azure AI Search** - Cloud søgning med vektor kapabiliteter. [Modul 03](../03-rag/README.md)
+**Azure AI Search** - Cloud-søgning med vektor kapabiliteter. [Modul 03](../03-rag/README.md)
**Azure Developer CLI (azd)** - Udruller Azure ressourcer.
**Azure OpenAI** - Microsofts enterprise AI service.
-**Bicep** - Azure infrastruktur-som-kode sprog. [Infrastructure Guide](../01-introduction/infra/README.md)
+**Bicep** - Azure infra-as-code sprog. [Infrastructure Guide](../01-introduction/infra/README.md)
-**Deployment Name** - Navn for modeludrulning i Azure.
+**Deployment Name** - Navn til modeludrulning i Azure.
-**GPT-5.2** - Nyeste OpenAI model med styring af ræsonnering. [Modul 02](../02-prompt-engineering/README.md)
+**GPT-5.2** - Seneste OpenAI model med ræsonneringskontrol. [Modul 02](../02-prompt-engineering/README.md)
-## Testning og Udvikling - [Testguide](TESTING.md)
+## Test og Udvikling - [Testing Guide](TESTING.md)
**Dev Container** - Containeriseret udviklingsmiljø. [Konfiguration](../../../.devcontainer/devcontainer.json)
-**GitHub Models** - Gratis AI model legeplads. [Modul 00](../00-quick-start/README.md)
+**In-Memory Testing** - Test med in-memory lagring.
-**In-Memory Testing** - Test med hukommelseslager.
+**Integration Testing** - Test med ægte infrastruktur.
-**Integration Testing** - Test med rigtig infrastruktur.
-
-**Maven** - Java build automatiseringsværktøj.
+**Maven** - Java byggeautomatiseringsværktøj.
**Mockito** - Java mocking framework.
-**Spring Boot** - Java applikationsramme. [Modul 01](../01-introduction/README.md)
+**Spring Boot** - Java applikationsframework. [Modul 01](../01-introduction/README.md)
---
-**Ansvarsfraskrivelse**:
-Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, bedes du være opmærksom på, at automatiske oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på dets modersmål skal betragtes som den autoritative kilde. For kritiske oplysninger anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for eventuelle misforståelser eller fejltolkninger som følge af brugen af denne oversættelse.
+**Ansvarsfraskrivelse**:
+Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.
\ No newline at end of file
diff --git a/translations/da/docs/TESTING.md b/translations/da/docs/TESTING.md
index 694e598ae..33d49bbd7 100644
--- a/translations/da/docs/TESTING.md
+++ b/translations/da/docs/TESTING.md
@@ -2,17 +2,17 @@
## Indholdsfortegnelse
-- [Hurtig start](../../../docs)
-- [Hvad testene dækker](../../../docs)
-- [Kørsel af testene](../../../docs)
-- [Kørsel af tests i VS Code](../../../docs)
-- [Testmønstre](../../../docs)
-- [Testfilosofi](../../../docs)
-- [Næste skridt](../../../docs)
+- [Kom godt i gang](#kom-godt-i-gang)
+- [Hvad testene dækker](#hvad-testene-dækker)
+- [Kørsel af testene](#kørsel-af-testene)
+- [Kørsel af tests i VS Code](#kørsel-af-tests-i-vs-code)
+- [Testmønstre](#testmønstre)
+- [Testfilosofi](#testfilosofi)
+- [Næste skridt](#næste-skridt)
-Denne vejledning gennemgår testene, som demonstrerer, hvordan man tester AI-applikationer uden at kræve API-nøgler eller eksterne tjenester.
+Denne vejledning guider dig igennem de tests, der viser, hvordan man tester AI-applikationer uden at skulle bruge API-nøgler eller eksterne tjenester.
-## Hurtig start
+## Kom godt i gang
Kør alle test med en enkelt kommando:
@@ -26,32 +26,31 @@ mvn test
mvn --% test
```
-Når alle test er bestået, bør du se output som skærmbilledet nedenfor — testene kører med nul fejl.
+Når alle tests er bestået, skulle du se output som skærmbilledet herunder — test kørt uden fejl.
-*Vellykket testkørsel, der viser alle test bestået med nul fejl*
+*Succesfuld testkørsel, der viser alle tests bestået uden fejl*
## Hvad testene dækker
-Dette kursus fokuserer på **unittest** der kører lokalt. Hver test demonstrerer et specifikt LangChain4j-koncept isoleret. Testpyramiden nedenfor viser, hvor unittest passer ind — de udgør det hurtige, pålidelige fundament, som resten af din teststrategi bygger på.
+Dette kursus fokuserer på **unittest**, der køres lokalt. Hver test demonstrerer et specifikt LangChain4j-koncept isoleret. Testpyramiden nedenfor viser, hvor unittest passer ind — de udgør det hurtige, pålidelige fundament, som resten af din teststrategi bygger på.
-*Testpyramide, der viser balancen mellem unittest (hurtig, isoleret), integrationstest (rigtige komponenter) og end-to-end test. Denne træning dækker unittest.*
+*Testpyramide, der viser balancen mellem unittest (hurtige, isolerede), integrationstests (reelle komponenter) og end-to-end tests. Denne træning dækker unittest.*
-| Modul | Tests | Fokus | Nøglefiler |
+| Modul | Tests | Fokus | Vigtige filer |
|--------|-------|-------|-----------|
-| **00 - Hurtig start** | 6 | Prompt-skabeloner og variabeludskiftning | `SimpleQuickStartTest.java` |
-| **01 - Introduktion** | 8 | Samtalehukommelse og stateful chat | `SimpleConversationTest.java` |
-| **02 - Prompt Engineering** | 12 | GPT-5.2 mønstre, iver-niveauer, struktureret output | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | Dokumentindtag, embeddings, lighedssøgning | `DocumentServiceTest.java` |
-| **04 - Værktøjer** | 12 | Funktionskald og værktøjskæder | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | Model Context Protocol med Stdio transport | `SimpleMcpTest.java` |
+| **01 - Introduktion** | 8 | Samtalehukommelse og tilstandsbaseret chat | `SimpleConversationTest.java` |
+| **02 - Prompt Engineering** | 12 | GPT-5.2 mønstre, ivrighedsniveauer, struktureret output | `SimpleGpt5PromptTest.java` |
+| **03 - RAG** | 10 | Dokumentindtagelse, embedding, lighedssøgning | `DocumentServiceTest.java` |
+| **04 - Værktøjer** | 12 | Funktionsopkald og kædning af værktøjer | `SimpleToolsTest.java` |
+| **05 - MCP** | 8 | Model Context Protocol med Stdio-transport | `SimpleMcpTest.java` |
## Kørsel af testene
-**Kør alle test fra rodmappen:**
+**Kør alle tests fra rodmappen:**
**Bash:**
```bash
@@ -63,7 +62,7 @@ mvn test
mvn --% test
```
-**Kør test for et specifikt modul:**
+**Kør tests for et specifikt modul:**
**Bash:**
```bash
@@ -75,7 +74,7 @@ mvn test -pl 01-introduction
**PowerShell:**
```powershell
cd 01-introduction; mvn --% test
-# Eller fra roden
+# Eller fra rod
mvn --% test -pl 01-introduction
```
@@ -95,7 +94,7 @@ mvn --% test -Dtest=SimpleConversationTest
**Bash:**
```bash
-mvn test -Dtest=SimpleConversationTest#skalVedligeholdeSamtaleHistorik
+mvn test -Dtest=SimpleConversationTest#børBevareSamtaleHistorik
```
**PowerShell:**
@@ -105,31 +104,31 @@ mvn --% test -Dtest=SimpleConversationTest#skalBevareSamtalehistorik
## Kørsel af tests i VS Code
-Hvis du bruger Visual Studio Code, tilbyder Test Explorer en grafisk grænseflade til at køre og debugge test.
+Hvis du bruger Visual Studio Code, giver Test Explorer en grafisk brugerflade til at køre og debugge tests.
*VS Code Test Explorer, der viser testtræet med alle Java testklasser og individuelle testmetoder*
-**Sådan kører du test i VS Code:**
+**For at køre tests i VS Code:**
-1. Åbn Test Explorer ved at klikke på bægerikonet i aktivitetsbjælken
+1. Åbn Test Explorer ved at klikke på kolbeikonet i aktivitetsbjælken
2. Udvid testtræet for at se alle moduler og testklasser
-3. Klik på afspilningsknappen ved siden af en test for at køre den enkeltvist
-4. Klik "Run All Tests" for at køre hele sæt
-5. Højreklik på en test og vælg "Debug Test" for at sætte breakpoint og køre trinvis gennem koden
+3. Klik på afspilningsknappen ved siden af en test for at køre den individuelt
+4. Klik på "Run All Tests" for at køre hele pakken
+5. Højreklik på en test og vælg "Debug Test" for at sætte breakpoints og køre trinvis
-Test Explorer viser grønne flueben for beståede test og giver detaljerede fejlmeddelelser, når test fejler.
+Test Explorer viser grønne flueben for beståede tests og giver detaljerede fejlmeddelelser ved fejl.
## Testmønstre
-### Mønster 1: Test af prompt-skabeloner
+### Mønster 1: Test af promptskabeloner
-Det simpleste mønster tester prompt-skabeloner uden at kalde et AI-model. Du verificerer, at variabeludskiftning fungerer korrekt, og at prompts formatteres som forventet.
+Det simpleste mønster tester promptskabeloner uden at kalde nogen AI-model. Du verificerer, at variabeludskiftning fungerer korrekt, og at prompts er formateret som forventet.
-*Test af prompt-skabeloner, der viser flowet: skabelon med pladsholdere → værdier anvendt → formatteret output verificeret*
+*Test af promptskabeloner, der viser variabelsubstitutionsflow: skabelon med pladsholdere → værdier anvendt → formateret output verificeret*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-Denne test findes i `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
-
-**Kør den:**
-
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#testPromptSkabelonFormatering
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#testPromptSkabelonFormatering
-```
+Dette mønster bekræfter, at variabeludskiftning fungerer korrekt, og at prompts er formateret som forventet — uden brug af API-nøgle eller modelkald.
### Mønster 2: Mocking af sprogmodeller
-Når du tester samtale-logik, brug Mockito til at lave falske modeller, der returnerer forudbestemte svar. Det gør test hurtige, gratis og deterministiske.
+Når du tester samtalelogik, brug Mockito til at skabe falske modeller, der returnerer forudbestemte svar. Det gør testene hurtige, gratis og deterministiske.
-*Sammenligning der viser, hvorfor mocks foretrækkes til test: de er hurtige, gratis, deterministiske og kræver ingen API-nøgler*
+*Sammenligning, der viser hvorfor mocks foretrækkes til test: de er hurtige, gratis, deterministiske og kræver ingen API-nøgler*
```java
@ExtendWith(MockitoExtension.class)
@@ -218,15 +205,15 @@ class SimpleConversationTest {
}
```
-Dette mønster findes i `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Mock'en sikrer ensartet adfærd, så du kan verificere, at hukommelsesstyringen fungerer korrekt.
+Dette mønster findes i `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Mocket sikrer konsistent opførsel, så du kan verificere, at hukommelsesadministration fungerer korrekt.
-### Mønster 3: Test af samtale-isolation
+### Mønster 3: Test af samtaleisolation
-Samtalehukommelse skal holde flere brugere adskilt. Denne test verificerer, at samtaler ikke blander kontekster.
+Samtalehukommelsen må holde flere brugere adskilt. Denne test verificerer, at samtaler ikke blander kontekster.
-*Test af samtale-isolation, der viser separate hukommelsesenheder for forskellige brugere for at forhindre kontekstblanding*
+*Test af samtaleisolation, der viser separate hukommelseslagre for forskellige brugere for at forhindre kontekstblanding*
```java
@Test
@@ -250,7 +237,7 @@ void shouldIsolateConversationsByid() {
}
```
-Hver samtale opretholder sin egen uafhængige historik. I produktionssystemer er denne isolation kritisk for multi-bruger applikationer.
+Hver samtale opretholder sin egen uafhængige historik. I produktionssystemer er denne isolation afgørende for multi-bruger applikationer.
### Mønster 4: Test af værktøjer uafhængigt
@@ -258,7 +245,7 @@ Værktøjer er funktioner, som AI kan kalde. Test dem direkte for at sikre, at d
-*Test af værktøjer uafhængigt, der viser mock-kørsel af værktøj uden AI-kald for at verificere forretningslogik*
+*Test af værktøjer uafhængigt, der viser mock-værktøjseksekvering uden AI-kald for at verificere forretningslogik*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-Disse test fra `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` validerer værktøjslogik uden AI-involvering. Kædningseksemplet viser, hvordan output fra ét værktøj føres som input til et andet.
+Disse tests fra `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` validerer værktøjslogik uden AI-involvering. Eksemplet med kædning viser, hvordan output fra ét værktøj føres videre som input til et andet.
-### Mønster 5: In-Memory RAG-test
+### Mønster 5: In-Memory RAG test
-RAG-systemer kræver traditionelt vektordatabaser og embedding-tjenester. In-memory mønsteret lader dig teste hele pipeline uden eksterne afhængigheder.
+RAG-systemer kræver traditionelt vektor-databaser og embeddingtjenester. In-memory-mønsteret lader dig teste hele pipeline uden eksterne afhængigheder.
-*In-memory RAG-testarbejdsgang, der viser dokument-parsing, embedningslagring, og lighedssøgning uden krav om database*
+*In-memory RAG test workflow, der viser dokumentparsing, embedding-lagring og lighedssøgning uden krav om database*
```java
@Test
@@ -306,11 +293,11 @@ void testProcessTextDocument() {
}
```
-Denne test fra `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` opretter et dokument i hukommelsen og verificerer chunking og håndtering af metadata.
+Denne test fra `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` opretter et dokument i hukommelsen og verificerer chunking og metadatahåndtering.
-### Mønster 6: MCP integrations-test
+### Mønster 6: MCP Integrationstest
-MCP-modulet tester Model Context Protocol integration ved brug af stdio-transport. Disse test verificerer, at din applikation kan starte og kommunikere med MCP-servere som subprocesser.
+MCP-modulet tester Model Context Protocol-integration via stdio-transport. Disse tests verificerer, at din applikation kan starte og kommunikere med MCP-servere som underprocesser.
Testene i `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` validerer MCP-klientadfærd.
@@ -328,28 +315,27 @@ cd 05-mcp; mvn --% test
## Testfilosofi
-Test din kode, ikke AI'en. Dine test bør validere den kode, du skriver, ved at tjekke, hvordan prompts konstrueres, hvordan hukommelse håndteres, og hvordan værktøjer eksekveres. AI-svar varierer og bør ikke være en del af testcase-assertioner. Spørg dig selv, om din prompt-skabelon korrekt erstatter variabler, ikke om AI giver det rigtige svar.
+Test din kode, ikke AI’en. Dine tests skal validere den kode, du skriver ved at undersøge, hvordan prompts konstrueres, hvordan hukommelse håndteres, og hvordan værktøjer eksekveres. AI-svar varierer og bør ikke være en del af testpåstande. Spørg dig selv, om din promptskabelon korrekt substituerer variabler, ikke om AI giver det rigtige svar.
-Brug mocks til sprogmodeller. De er eksterne afhængigheder, som er langsomme, dyre og ikke-deterministiske. Mocking gør test hurtige i millisekunder i stedet for sekunder, gratis uden API-omkostninger og deterministiske med samme resultat hver gang.
+Brug mocks til sprogmodeller. De er eksterne afhængigheder, som er langsomme, dyre og ikke-deterministiske. Mocking gør tests hurtige med millisekunder i stedet for sekunder, gratis uden API-omkostninger, og deterministiske med samme resultat hver gang.
-Hold test uafhængige. Hver test bør opsætte sine egne data, ikke afhænge af andre tests, og rydde op efter sig selv. Test bør bestå uanset rækkefølge af udførelse.
+Hold tests uafhængige. Hver test bør opsætte sine egne data, ikke være afhængig af andre tests og rydde op efter sig selv. Tests bør bestå uanset kørselsrækkefølge.
-Test kanttilfælde ud over den gode vej. Prøv tomme input, meget store input, specialtegn, ugyldige parametre og grænsebetingelser. Disse afslører ofte fejl, som normal brug ikke afdækker.
+Test kanttilfælde ud over den lykkelige vej. Prøv tomme inputs, meget store inputs, specialtegn, ugyldige parametre og grænsetilstande. Disse afslører ofte fejl, som normal brug ikke udsætter.
-Brug beskrivende navne. Sammenlign `shouldMaintainConversationHistoryAcrossMultipleMessages()` med `test1()`. Det første fortæller dig præcis, hvad der testes, hvilket gør fejlfinding meget nemmere.
+Brug beskrivende navne. Sammenlign `shouldMaintainConversationHistoryAcrossMultipleMessages()` med `test1()`. Det første fortæller dig præcist, hvad der testes, hvilket gør fejlretning meget nemmere.
## Næste skridt
-Nu hvor du forstår testmønstrene, dyk dybere ned i hvert modul:
+Nu hvor du forstår testmønstrene, kan du dykke dybere ned i hvert modul:
-- **[00 - Hurtig start](../00-quick-start/README.md)** - Begynd med prompt-skabelon grundlæggende
-- **[01 - Introduktion](../01-introduction/README.md)** - Lær samtalehukommelsesstyring
-- **[02 - Prompt Engineering](../02-prompt-engineering/README.md)** - Mestre GPT-5.2 promptmønstre
-- **[03 - RAG](../03-rag/README.md)** - Byg retrieval-augmented generation systemer
+- **[01 - Introduktion](../01-introduction/README.md)** - Lær styring af samtalehukommelse
+- **[02 - Prompt Engineering](../02/prompt-engineering/README.md)** - Mestre GPT-5.2 promptmønstre
+- **[03 - RAG](../03-rag/README.md)** - Byg retrival-augmented generation systemer
- **[04 - Værktøjer](../04-tools/README.md)** - Implementér funktionskald og værktøjskæder
- **[05 - MCP](../05-mcp/README.md)** - Integrer Model Context Protocol
-Hvert moduls README giver detaljerede forklaringer på de koncepter, der testes her.
+Hvert moduls README giver detaljerede forklaringer af de koncepter, der testes her.
---
@@ -359,5 +345,5 @@ Hvert moduls README giver detaljerede forklaringer på de koncepter, der testes
**Ansvarsfraskrivelse**:
-Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på originalsproget skal betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.
+Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.
\ No newline at end of file
diff --git a/translations/de/.co-op-translator.json b/translations/de/.co-op-translator.json
index 0610432e2..6b3d5c9fc 100644
--- a/translations/de/.co-op-translator.json
+++ b/translations/de/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "de"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-03T00:10:58+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T08:01:59+00:00",
"source_file": "01-introduction/README.md",
"language_code": "de"
},
@@ -18,20 +18,20 @@
"language_code": "de"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-03T00:12:48+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T07:57:37+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "de"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-03T00:13:59+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T08:01:05+00:00",
"source_file": "03-rag/README.md",
"language_code": "de"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T12:02:53+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T07:59:48+00:00",
"source_file": "04-tools/README.md",
"language_code": "de"
},
@@ -54,8 +54,8 @@
"language_code": "de"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T16:54:58+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T07:56:17+00:00",
"source_file": "README.md",
"language_code": "de"
},
@@ -72,14 +72,14 @@
"language_code": "de"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-03T00:16:32+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T07:58:05+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "de"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-03T00:17:09+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T07:58:36+00:00",
"source_file": "docs/TESTING.md",
"language_code": "de"
}
diff --git a/translations/de/00-quick-start/README.md b/translations/de/00-quick-start/README.md
deleted file mode 100644
index 92020cd39..000000000
--- a/translations/de/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# Modul 00: Schnellstart
-
-## Inhaltsverzeichnis
-
-- [Einführung](../../../00-quick-start)
-- [Was ist LangChain4j?](../../../00-quick-start)
-- [LangChain4j Abhängigkeiten](../../../00-quick-start)
-- [Voraussetzungen](../../../00-quick-start)
-- [Einrichtung](../../../00-quick-start)
- - [1. Holen Sie sich Ihren GitHub-Token](../../../00-quick-start)
- - [2. Setzen Sie Ihren Token](../../../00-quick-start)
-- [Führen Sie die Beispiele aus](../../../00-quick-start)
- - [1. Basic Chat](../../../00-quick-start)
- - [2. Prompt-Muster](../../../00-quick-start)
- - [3. Funktionsaufruf](../../../00-quick-start)
- - [4. Dokumenten Q&A (Easy RAG)](../../../00-quick-start)
- - [5. Verantwortungsbewusste KI](../../../00-quick-start)
-- [Was jedes Beispiel zeigt](../../../00-quick-start)
-- [Nächste Schritte](../../../00-quick-start)
-- [Fehlerbehebung](../../../00-quick-start)
-
-## Einführung
-
-Dieser Schnellstart soll Ihnen helfen, LangChain4j so schnell wie möglich zum Laufen zu bringen. Er behandelt die absoluten Grundlagen des Aufbaus von KI-Anwendungen mit LangChain4j und GitHub Models. In den nächsten Modulen wechseln Sie zu Azure OpenAI und GPT-5.2 und gehen tiefer auf jedes Konzept ein.
-
-## Was ist LangChain4j?
-
-LangChain4j ist eine Java-Bibliothek, die das Erstellen von KI-gestützten Anwendungen vereinfacht. Anstatt mit HTTP-Clients und JSON-Parsing zu arbeiten, verwenden Sie reine Java-APIs.
-
-Die „Chain“ in LangChain bezieht sich darauf, mehrere Komponenten zu verketten – Sie können zum Beispiel eine Eingabeaufforderung mit einem Modell und einem Parser verbinden oder mehrere KI-Aufrufe aneinanderreihen, bei denen eine Ausgabe als Eingabe für den nächsten Schritt dient. Dieser Schnellstart konzentriert sich auf die Grundlagen, bevor komplexere Ketten erkundet werden.
-
-
-
-*Verkettung von Komponenten in LangChain4j – Bausteine verbinden sich, um leistungsstarke KI-Workflows zu erstellen*
-
-Wir verwenden drei Kernkomponenten:
-
-**ChatModel** – Die Schnittstelle für KI-Modell-Interaktionen. Rufen Sie `model.chat("prompt")` auf und erhalten Sie eine Antwort als String. Wir verwenden `OpenAiOfficialChatModel`, das mit OpenAI-kompatiblen Endpunkten wie GitHub Models funktioniert.
-
-**AiServices** – Erstellt typsichere KI-Service-Schnittstellen. Definieren Sie Methoden, annotieren Sie sie mit `@Tool` und LangChain4j übernimmt die Orchestrierung. Die KI ruft Ihre Java-Methoden automatisch auf, wenn nötig.
-
-**MessageWindowChatMemory** – Hält den Gesprächsverlauf aufrecht. Ohne dies ist jede Anfrage unabhängig. Damit erinnert sich die KI an vorherige Nachrichten und behält den Kontext über mehrere Runden.
-
-
-
-*LangChain4j Architektur – Kernkomponenten arbeiten zusammen, um Ihre KI-Anwendungen anzutreiben*
-
-## LangChain4j Abhängigkeiten
-
-Dieser Schnellstart verwendet drei Maven-Abhängigkeiten in der [`pom.xml`](../../../00-quick-start/pom.xml):
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-Das `langchain4j-open-ai-official`-Modul stellt die Klasse `OpenAiOfficialChatModel` bereit, die mit OpenAI-kompatiblen APIs kommuniziert. GitHub Models verwendet dasselbe API-Format, daher ist kein spezieller Adapter erforderlich – Sie müssen nur die Basis-URL auf `https://models.github.ai/inference` setzen.
-
-Das `langchain4j-easy-rag`-Modul bietet automatisches Dokumenten-Splitting, Einbettung und Recherche, sodass Sie RAG-Anwendungen bauen können, ohne jeden Schritt manuell konfigurieren zu müssen.
-
-## Voraussetzungen
-
-**Verwenden Sie den Dev Container?** Java und Maven sind bereits installiert. Sie benötigen nur einen persönlichen GitHub Access Token.
-
-**Lokale Entwicklung:**
-- Java 21+, Maven 3.9+
-- Persönlicher GitHub Access Token (Anleitung unten)
-
-> **Hinweis:** Dieses Modul verwendet `gpt-4.1-nano` von GitHub Models. Ändern Sie den Modellnamen im Code nicht – er ist konfiguriert für die verfügbaren GitHub-Modelle.
-
-## Einrichtung
-
-### 1. Holen Sie sich Ihren GitHub-Token
-
-1. Gehen Sie zu [GitHub Einstellungen → Personal Access Tokens](https://github.com/settings/personal-access-tokens)
-2. Klicken Sie auf „Generate new token“
-3. Geben Sie einen beschreibenden Namen ein (z. B. „LangChain4j Demo“)
-4. Legen Sie ein Ablaufdatum fest (7 Tage empfohlen)
-5. Unter „Account permissions“ suchen Sie „Models“ und setzen es auf „Read-only“
-6. Klicken Sie auf „Generate token“
-7. Kopieren und speichern Sie Ihren Token – Sie sehen ihn nicht wieder
-
-### 2. Setzen Sie Ihren Token
-
-**Option 1: Verwendung von VS Code (Empfohlen)**
-
-Wenn Sie VS Code verwenden, fügen Sie Ihren Token zur `.env`-Datei im Projektstammverzeichnis hinzu:
-
-Falls die `.env`-Datei nicht existiert, kopieren Sie `.env.example` nach `.env` oder erstellen Sie eine neue `.env`-Datei im Projektstammverzeichnis.
-
-**Beispiel `.env`-Datei:**
-```bash
-# In /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-Danach können Sie einfach mit der rechten Maustaste auf eine beliebige Demo-Datei (z. B. `BasicChatDemo.java`) im Explorer klicken und **„Run Java“** auswählen oder die Startkonfigurationen aus dem Ausführen- und Debug-Panel verwenden.
-
-**Option 2: Verwendung des Terminals**
-
-Setzen Sie den Token als Umgebungsvariable:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## Führen Sie die Beispiele aus
-
-**Verwendung von VS Code:** Klicken Sie einfach mit der rechten Maustaste auf eine beliebige Demo-Datei im Explorer und wählen Sie **„Run Java“** oder verwenden Sie die Startkonfigurationen im Ausführen- und Debug-Panel (stellen Sie sicher, dass Sie Ihren Token zuerst in die `.env`-Datei eingetragen haben).
-
-**Verwendung von Maven:** Alternativ können Sie die Beispiele auch über die Kommandozeile ausführen:
-
-### 1. Basic Chat
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. Prompt-Muster
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-Zeigt zero-shot, few-shot, Chain-of-thought und rollenbasierte Aufforderungen.
-
-### 3. Funktionsaufruf
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-Die KI ruft Ihre Java-Methoden automatisch auf, wenn notwendig.
-
-### 4. Dokumenten Q&A (Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-Stellen Sie Fragen zu Ihren Dokumenten mit Easy RAG, inklusive automatischer Einbettung und Recherche.
-
-### 5. Verantwortungsbewusste KI
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-Sehen Sie, wie KI-Sicherheitsfilter schädliche Inhalte blockieren.
-
-## Was jedes Beispiel zeigt
-
-**Basic Chat** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-Beginnen Sie hier, um LangChain4j in seiner einfachsten Form zu sehen. Sie erstellen ein `OpenAiOfficialChatModel`, senden eine Eingabeaufforderung mit `.chat()` und erhalten eine Antwort. Dies demonstriert die Grundlage: wie man Modelle mit benutzerdefinierten Endpunkten und API-Schlüsseln initialisiert. Sobald Sie dieses Muster verstanden haben, baut alles Weitere darauf auf.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat:** Öffnen Sie [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) und fragen Sie:
-> - „Wie wechsle ich in diesem Code von GitHub Models zu Azure OpenAI?“
-> - „Welche weiteren Parameter kann ich in OpenAiOfficialChatModel.builder() konfigurieren?“
-> - „Wie füge ich Streaming-Antworten hinzu, anstatt auf die vollständige Antwort zu warten?“
-
-**Prompt Engineering** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-Jetzt, da Sie wissen, wie Sie mit einem Modell sprechen, sehen wir uns an, was Sie ihm sagen. Diese Demo verwendet dieselbe Modellkonfiguration, zeigt aber fünf verschiedene Prompt-Muster. Probieren Sie Zero-Shot-Prompts für direkte Anweisungen, Few-Shot-Prompts, die aus Beispielen lernen, Chain-of-Thought-Prompts, die den Denkprozess offenlegen, und rollenbasierte Prompts, die den Kontext setzen. Sie sehen, wie dasselbe Modell dramatisch unterschiedliche Ergebnisse liefert, je nachdem, wie Sie Ihre Anfrage formulieren.
-
-Die Demo zeigt auch Prompt-Templates, ein kraftvolles Werkzeug, um wiederverwendbare Prompts mit Variablen zu erstellen.
-Das folgende Beispiel zeigt ein Prompt unter Verwendung der LangChain4j `PromptTemplate`, um Variablen auszufüllen. Die KI antwortet basierend auf dem angegebenen Reiseziel und der Aktivität.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat:** Öffnen Sie [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) und fragen Sie:
-> - „Was ist der Unterschied zwischen Zero-Shot und Few-Shot Prompting, und wann verwende ich welches?“
-> - „Wie beeinflusst der Temperaturparameter die Antworten des Modells?“
-> - „Welche Techniken gibt es, um Prompt Injection Angriffe in der Produktion zu verhindern?“
-> - „Wie erstelle ich wiederverwendbare PromptTemplate-Objekte für gängige Muster?“
-
-**Tool Integration** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-Hier wird LangChain4j mächtig. Sie verwenden `AiServices`, um einen KI-Assistenten zu erstellen, der Ihre Java-Methoden aufrufen kann. Annotieren Sie Methoden einfach mit `@Tool("Beschreibung")` und LangChain4j übernimmt den Rest – die KI entscheidet automatisch, welches Tool wann genutzt wird, basierend auf der Nutzeranfrage. Das demonstriert Funktionsaufrufe, eine Schlüsseltechnik zum Aufbau von KI, die handeln kann, nicht nur Fragen beantwortet.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat:** Öffnen Sie [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) und fragen Sie:
-> - „Wie funktioniert die @Tool-Annotation und was macht LangChain4j damit hinter den Kulissen?“
-> - „Kann die KI mehrere Tools nacheinander aufrufen, um komplexe Probleme zu lösen?“
-> - „Was passiert, wenn ein Tool eine Ausnahme wirft – wie sollte ich Fehler behandeln?“
-> - „Wie würde ich eine echte API anstelle dieses Taschenrechner-Beispiels integrieren?“
-
-**Dokumenten Q&A (Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-Hier sehen Sie RAG (retrieval-augmented generation) mit LangChain4js "Easy RAG" Ansatz. Dokumente werden geladen, automatisch aufgeteilt und in einem In-Memory-Speicher eingebettet, dann liefert ein Content-Retriever relevante Ausschnitte zur Anfragezeit an die KI. Die KI antwortet basierend auf Ihren Dokumenten, nicht auf ihrem allgemeinen Wissen.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat:** Öffnen Sie [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) und fragen Sie:
-> - „Wie verhindert RAG KI-Halluzinationen im Vergleich zur Nutzung der Trainingsdaten des Modells?“
-> - „Was ist der Unterschied zwischen diesem einfachen Ansatz und einer benutzerdefinierten RAG-Pipeline?“
-> - „Wie würde ich das skalieren, um mehrere Dokumente oder größere Wissensbasen zu handhaben?“
-
-**Verantwortungsbewusste KI** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-Bauen Sie KI-Sicherheit mit einem mehrschichtigen Ansatz. Diese Demo zeigt zwei Schutzebenen, die zusammenarbeiten:
-
-**Teil 1: LangChain4j Input Guardrails** – Blockieren gefährlicher Prompts, bevor sie das LLM erreichen. Erstellen Sie eigene Guardrails, die auf verbotene Schlüsselwörter oder Muster prüfen. Diese laufen in Ihrem Code, sind also schnell und kostenlos.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**Teil 2: Provider Safety Filters** – GitHub Models verfügt über integrierte Filter, die Dinge abfangen, die Ihre Guardrails eventuell übersehen. Sie sehen harte Blockaden (HTTP 400 Fehler) für schwere Verstöße und sanfte Ablehnungen, wenn die KI höflich ablehnt.
-
-> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat:** Öffnen Sie [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) und fragen Sie:
-> - „Was ist InputGuardrail und wie erstelle ich meine eigenen?“
-> - „Was ist der Unterschied zwischen einer harten Blockade und einer sanften Ablehnung?“
-> - „Warum verwendet man Guardrails und Provider-Filter zusammen?“
-
-## Nächste Schritte
-
-**Nächstes Modul:** [01-introduction - Erste Schritte mit LangChain4j](../01-introduction/README.md)
-
----
-
-**Navigation:** [← Zurück zur Hauptseite](../README.md) | [Weiter: Modul 01 - Einführung →](../01-introduction/README.md)
-
----
-
-## Fehlerbehebung
-
-### Erster Maven-Build
-
-**Problem**: Erster `mvn clean compile` oder `mvn package` dauert lange (10-15 Minuten)
-
-**Ursache**: Maven muss alle Projektabhängigkeiten (Spring Boot, LangChain4j-Bibliotheken, Azure SDKs usw.) beim ersten Build herunterladen.
-
-**Lösung**: Das ist normales Verhalten. Nachfolgende Builds sind deutlich schneller, da die Abhängigkeiten lokal zwischengespeichert werden. Die Downloadzeit hängt von Ihrer Netzwerkgeschwindigkeit ab.
-
-### PowerShell Maven-Befehls-Syntax
-
-**Problem**: Maven-Befehle schlagen fehl mit dem Fehler `Unknown lifecycle phase ".mainClass=..."`
-**Ursache**: PowerShell interpretiert `=` als Zuweisungsoperator, wodurch die Maven-Eigenschaftssyntax unterbrochen wird
-
-**Lösung**: Verwenden Sie den Stop-Parsing-Operator `--%` vor dem Maven-Befehl:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-Der Operator `--%` weist PowerShell an, alle verbleibenden Argumente wörtlich an Maven weiterzugeben, ohne sie zu interpretieren.
-
-### Emoji-Anzeige in Windows PowerShell
-
-**Problem**: KI-Antworten zeigen unlesbare Zeichen (z.B. `????` oder `â??`) anstelle von Emojis in PowerShell
-
-**Ursache**: Die Standardcodierung von PowerShell unterstützt keine UTF-8 Emojis
-
-**Lösung**: Führen Sie diesen Befehl vor dem Ausführen von Java-Anwendungen aus:
-```cmd
-chcp 65001
-```
-
-Dies erzwingt die UTF-8-Codierung im Terminal. Alternativ können Sie Windows Terminal verwenden, das eine bessere Unicode-Unterstützung bietet.
-
-### Debugging von API-Aufrufen
-
-**Problem**: Authentifizierungsfehler, Ratenbegrenzungen oder unerwartete Antworten vom KI-Modell
-
-**Lösung**: Die Beispiele enthalten `.logRequests(true)` und `.logResponses(true)`, um API-Aufrufe in der Konsole anzuzeigen. Dies hilft, Authentifizierungsfehler, Ratenbegrenzungen oder unerwartete Antworten zu diagnostizieren. Entfernen Sie diese Flags in der Produktion, um die Protokollierung zu reduzieren.
-
----
-
-
-**Haftungsausschluss**:
-Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir um Genauigkeit bemüht sind, kann diese automatisierte Übersetzung Fehler oder Ungenauigkeiten enthalten. Das Originaldokument in seiner Originalsprache ist als maßgebliche Quelle anzusehen. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Nutzung dieser Übersetzung entstehen.
-
\ No newline at end of file
diff --git a/translations/de/01-introduction/README.md b/translations/de/01-introduction/README.md
index 4e05334ad..3bc0a3c2d 100644
--- a/translations/de/01-introduction/README.md
+++ b/translations/de/01-introduction/README.md
@@ -1,43 +1,43 @@
-# Modul 01: Einstieg mit LangChain4j
+# Modul 01: Einstieg in LangChain4j
## Inhaltsverzeichnis
-- [Video-Durchgang](../../../01-introduction)
-- [Was Sie lernen werden](../../../01-introduction)
-- [Voraussetzungen](../../../01-introduction)
-- [Das Kernproblem verstehen](../../../01-introduction)
-- [Tokens verstehen](../../../01-introduction)
-- [Wie Speicher funktioniert](../../../01-introduction)
-- [Wie dies LangChain4j verwendet](../../../01-introduction)
-- [Azure OpenAI-Infrastruktur bereitstellen](../../../01-introduction)
-- [Anwendung lokal ausführen](../../../01-introduction)
-- [Die Anwendung verwenden](../../../01-introduction)
- - [Zustandsloser Chat (linkes Panel)](../../../01-introduction)
- - [Zustandsbehafteter Chat (rechtes Panel)](../../../01-introduction)
-- [Nächste Schritte](../../../01-introduction)
+- [Video-Durchgang](#video-durchgang)
+- [Was Sie lernen werden](#was-sie-lernen-werden)
+- [Voraussetzungen](#voraussetzungen)
+- [Verständnis des Kernproblems](#verständnis-des-kernproblems)
+- [Verständnis von Tokens](#verständnis-von-tokens)
+- [Wie Speicher funktioniert](#wie-speicher-funktioniert)
+- [Wie dies LangChain4j nutzt](#wie-dies-langchain4j-nutzt)
+- [Bereitstellen der Azure OpenAI Infrastruktur](#bereitstellen-der-azure-openai-infrastruktur)
+- [Anwendung lokal ausführen](#anwendung-lokal-ausführen)
+- [Verwendung der Anwendung](#verwendung-der-anwendung)
+ - [Zustandsloser Chat (linkes Panel)](#zustandsloser-chat-linkes-panel)
+ - [Zustandsbehafteter Chat (rechtes Panel)](#zustandsbehafteter-chat-rechtes-panel)
+- [Nächste Schritte](#nächste-schritte)
## Video-Durchgang
Sehen Sie sich diese Live-Session an, die erklärt, wie Sie mit diesem Modul starten:
-
+
## Was Sie lernen werden
-Im Quickstart haben Sie GitHub-Modelle verwendet, um Prompts zu senden, Werkzeuge aufzurufen, eine RAG-Pipeline zu bauen und Guardrails zu testen. Diese Demos zeigten, was möglich ist – jetzt wechseln wir zu Azure OpenAI und GPT-5.2 und beginnen damit, produktionsähnliche Anwendungen zu entwickeln. Dieses Modul konzentriert sich auf konversationelle KI, die Kontext behält und Zustände verwaltet – die Konzepte, die in den Quickstart-Demos hinter den Kulissen genutzt, aber nicht erklärt wurden.
+Dies ist Ihr Einstiegspunkt mit LangChain4j und Azure OpenAI. Wir beginnen mit den Grundlagen und bauen produktionsähnliche Anwendungen. Dieses Modul konzentriert sich auf konversationelle KI, die den Kontext merkt und den Zustand beibehält – die grundlegenden Konzepte, auf denen alle späteren Module aufbauen.
-Wir verwenden während dieses Leitfadens Azure OpenAIs GPT-5.2, da seine fortgeschrittenen Fähigkeiten im logischen Denken das Verhalten der verschiedenen Muster deutlicher machen. Wenn Sie Speicher hinzufügen, sehen Sie den Unterschied klar. Das erleichtert das Verständnis dessen, was jede Komponente Ihrer Anwendung bringt.
+Wir verwenden im gesamten Leitfaden Azure OpenAI's GPT-5.2, da dessen fortschrittliche Analysefähigkeiten das Verhalten verschiedener Muster besser sichtbar machen. Wenn Sie Speicher hinzufügen, sehen Sie den Unterschied deutlich. So verstehen Sie leichter, was jede Komponente zu Ihrer Anwendung beiträgt.
-Sie werden eine Anwendung bauen, die beide Muster demonstriert:
+Sie erstellen eine Anwendung, die beide Muster demonstriert:
-**Zustandsloser Chat** - Jede Anfrage ist unabhängig. Das Modell hat kein Gedächtnis für vorherige Nachrichten. Dies ist das Muster, das Sie im Quickstart verwendet haben.
+**Zustandsloser Chat** – Jede Anfrage ist unabhängig. Das Modell hat kein Gedächtnis vorheriger Nachrichten. Dies ist der einfachste Einstiegspunkt.
-**Zustandsbehaftete Konversation** - Jede Anfrage beinhaltet die Gesprächshistorie. Das Modell behält den Kontext über mehrere Interaktionen hinweg. Dies ist das, was produktive Anwendungen benötigen.
+**Zustandsbehaftete Unterhaltung** – Jede Anfrage beinhaltet Konversationsverlauf. Das Modell behält Kontext über mehrere Gesprächsrunden. Dies ist für produktionsreife Anwendungen notwendig.
## Voraussetzungen
-- Azure-Abonnement mit Azure OpenAI-Zugriff
-- Java 21, Maven 3.9+
+- Azure-Abonnement mit Azure OpenAI Zugriff
+- Java 21, Maven 3.9+
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
@@ -45,41 +45,41 @@ Sie werden eine Anwendung bauen, die beide Muster demonstriert:
> **Hinweis:** Dieses Modul verwendet GPT-5.2 auf Azure OpenAI. Die Bereitstellung wird automatisch über `azd up` konfiguriert – ändern Sie den Modellnamen im Code nicht.
-## Das Kernproblem verstehen
+## Verständnis des Kernproblems
-Sprachmodelle sind zustandslos. Jeder API-Aufruf ist unabhängig. Wenn Sie „Mein Name ist John“ senden und dann fragen „Wie heißt mein Name?“, hat das Modell keine Ahnung, dass Sie sich gerade vorgestellt haben. Es behandelt jede Anfrage, als wäre es das erste Gespräch, das Sie je geführt haben.
+Sprachmodelle sind zustandslos. Jeder API-Aufruf ist unabhängig. Wenn Sie "Mein Name ist John" schicken und dann fragen "Wie heißt mein Name?", hat das Modell keine Ahnung, dass Sie sich gerade vorgestellt haben. Es behandelt jede Anfrage, als sei es das erste Gespräch, das Sie je geführt haben.
-Das ist für einfache Q&A okay, aber für echte Anwendungen unbrauchbar. Kundendienstbots müssen sich merken, was Sie ihnen gesagt haben. Persönliche Assistenten brauchen Kontext. Jede mehrstufige Konversation erfordert Speicher.
+Das ist für einfache Q&A okay, aber nutzlos für echte Anwendungen. Kundenservice-Bots müssen sich erinnern, was Sie ihnen gesagt haben. Persönliche Assistenten brauchen Kontext. Jede Unterhaltung mit mehreren Runden erfordert Speicher.
-Die folgende Grafik stellt die beiden Ansätze gegenüber – links ein zustandsloser Aufruf, der Ihren Namen vergisst; rechts ein zustandsbehafteter Aufruf, unterstützt von ChatMemory, der ihn sich merkt.
+Das folgende Diagramm vergleicht die beiden Ansätze – links ein zustandsloser Aufruf, der Ihren Namen vergisst; rechts ein zustandsbehafteter Aufruf mit ChatMemory, das sich daran erinnert.
-
+
-*Der Unterschied zwischen zustandslosen (unabhängigen Anfragen) und zustandsbehafteten (kontextbewussten) Konversationen*
+*Der Unterschied zwischen zustandslosen (unabhängigen Aufrufen) und zustandsbehafteten (kontextbewussten) Unterhaltungen*
-## Tokens verstehen
+## Verständnis von Tokens
-Bevor wir in Konversationen eintauchen, ist es wichtig, Tokens zu verstehen – die Grundeinheiten des Textes, die Sprachmodelle verarbeiten:
+Bevor wir in Unterhaltungen eintauchen, ist es wichtig, Tokens zu verstehen – die grundlegenden Einheiten von Text, die Sprachmodelle verarbeiten:
*Beispiel, wie Text in Tokens zerlegt wird – „I love AI!“ wird zu 4 separaten Verarbeitungseinheiten*
-Tokens sind die Maßeinheiten, mit denen KI-Modelle Text messen und verarbeiten. Wörter, Satzzeichen und sogar Leerzeichen können Tokens sein. Ihr Modell hat ein Limit, wie viele Tokens es auf einmal verarbeiten kann (400.000 bei GPT-5.2, mit bis zu 272.000 Eingabe-Tokens und 128.000 Ausgabe-Tokens). Tokens zu verstehen hilft Ihnen, Gesprächslänge und Kosten zu verwalten.
+Tokens sind die Maßeinheit, mit der KI-Modelle Text messen und verarbeiten. Wörter, Satzzeichen und sogar Leerzeichen können Tokens sein. Ihr Modell hat ein Limit, wie viele Tokens es gleichzeitig verarbeiten kann (400.000 bei GPT-5.2, mit bis zu 272.000 Eingabe- und 128.000 Ausgabe-Tokens). Das Verständnis der Tokens hilft, die Gesprächslänge und Kosten zu steuern.
## Wie Speicher funktioniert
-Chat-Speicher löst das Zustandslosigkeitsproblem, indem er die Gesprächshistorie erhält. Bevor Ihre Anfrage an das Modell gesendet wird, fügt das Framework relevante vorherige Nachrichten hinzu. Wenn Sie fragen „Wie heißt mein Name?“, sendet das System tatsächlich die gesamte Gesprächshistorie, sodass das Modell sieht, dass Sie zuvor sagten „Mein Name ist John.“
+Chat-Speicher löst das Problem der Zustandslosigkeit, indem er den Gesprächsverlauf speichert. Bevor Ihre Anfrage an das Modell geschickt wird, fügt das Framework relevante vorherige Nachrichten voran. Wenn Sie fragen „Wie heißt mein Name?“, sendet das System tatsächlich die gesamte Gesprächshistorie, sodass das Modell sehen kann, dass Sie zuvor „Mein Name ist John“ gesagt haben.
-LangChain4j bietet Speicherimplementierungen, die dies automatisch übernehmen. Sie wählen aus, wie viele Nachrichten behalten werden, und das Framework verwaltet das Kontextfenster. Die folgende Grafik zeigt, wie MessageWindowChatMemory ein gleitendes Fenster der letzten Nachrichten erhält.
+LangChain4j stellt Speicherimplementierungen bereit, die das automatisch erledigen. Sie wählen, wie viele Nachrichten gespeichert werden sollen, und das Framework verwaltet das Kontextfenster. Das folgende Diagramm zeigt, wie MessageWindowChatMemory ein gleitendes Fenster der neuesten Nachrichten verwaltet.
-*MessageWindowChatMemory erhält ein gleitendes Fenster mit neuesten Nachrichten und entfernt automatisch alte*
+*MessageWindowChatMemory verwaltet ein gleitendes Fenster der letzten Nachrichten und entfernt automatisch ältere*
-## Wie dies LangChain4j verwendet
+## Wie dies LangChain4j nutzt
-Dieses Modul erweitert den Quickstart durch die Integration von Spring Boot und das Hinzufügen von Gesprächsspeicher. So fügen sich die Teile zusammen:
+Dieses Modul integriert Spring Boot und fügt Gesprächsspeicher hinzu. So fügen sich die Teile zusammen:
**Abhängigkeiten** – Fügen Sie zwei LangChain4j-Bibliotheken hinzu:
@@ -94,7 +94,7 @@ Dieses Modul erweitert den Quickstart durch die Integration von Spring Boot und
```
-**Chat-Modell** – Konfigurieren Sie Azure OpenAI als Spring-Bean ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+**Chat-Modell** – Konfigurieren Sie Azure OpenAI als Spring Bean ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -109,7 +109,7 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-Der Builder liest Zugangsdaten aus Umgebungsvariablen, die von `azd up` gesetzt wurden. Das Setzen von `baseUrl` auf Ihren Azure-Endpunkt macht den OpenAI-Client kompatibel mit Azure OpenAI.
+Der Builder liest Anmeldeinformationen aus Umgebungsvariablen, die von `azd up` gesetzt werden. Mit `baseUrl` auf Ihren Azure-Endpunkt funktioniert der OpenAI-Client mit Azure OpenAI.
**Gesprächsspeicher** – Verfolgen Sie den Chat-Verlauf mit MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
@@ -124,39 +124,39 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-Erstellen Sie Speicher mit `withMaxMessages(10)`, um die letzten 10 Nachrichten zu behalten. Fügen Sie Benutzer- und KI-Nachrichten mit typisierten Wrappern hinzu: `UserMessage.from(text)` und `AiMessage.from(text)`. Holen Sie den Verlauf mit `memory.messages()` ab und senden Sie ihn ans Modell. Der Service speichert separate Speicherinstanzen pro Gesprächs-ID, sodass mehrere Nutzer gleichzeitig chatten können.
+Erstellen Sie Speicher mit `withMaxMessages(10)`, um die letzten 10 Nachrichten zu behalten. Fügen Sie Nachrichten von Nutzer und KI mit typisierten Wrappern hinzu: `UserMessage.from(text)` und `AiMessage.from(text)`. Rufen Sie den Verlauf mit `memory.messages()` ab und schicken Sie ihn ans Modell. Der Service speichert separate Speicherinstanzen pro Konversations-ID, sodass mehrere Nutzer gleichzeitig chatten können.
-> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat aus:** Öffnen Sie [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) und fragen Sie:
-> - „Wie entscheidet MessageWindowChatMemory, welche Nachrichten fallen gelassen werden, wenn das Fenster voll ist?“
-> - „Kann ich kundenspezifischen Speicher mittels Datenbank statt im Arbeitsspeicher implementieren?“
-> - „Wie würde ich eine Zusammenfassung hinzufügen, um alte Gesprächshistorie zu komprimieren?“
+> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat:** Öffnen Sie [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) und fragen Sie:
+> - „Wie entscheidet MessageWindowChatMemory, welche Nachrichten verworfen werden, wenn das Fenster voll ist?“
+> - „Kann ich eine benutzerdefinierte Speicherlösung mit Datenbank anstelle von In-Memory implementieren?“
+> - „Wie füge ich eine Zusammenfassung hinzu, um alten Gesprächsverlauf zu komprimieren?“
-Der zustandslose Chat-Endpunkt überspringt den Speicher komplett – einfach `chatModel.chat(prompt)` wie im Quickstart. Der zustandsbehaftete Endpunkt fügt Nachrichten zum Speicher hinzu, ruft den Verlauf ab und inkludiert diesen Kontext bei jeder Anfrage. Gleiche Modellkonfiguration, unterschiedliche Muster.
+Der zustandslose Chat-Endpunkt überspringt Speicher völlig – einfach `chatModel.chat(prompt)` wie im Schnellstart. Der zustandsbehaftete Endpunkt fügt Nachrichten zum Speicher hinzu, ruft Verlauf ab und sendet diesen Kontext mit jeder Anfrage. Gleiche Modellkonfiguration, unterschiedliche Muster.
-## Azure OpenAI-Infrastruktur bereitstellen
+## Bereitstellen der Azure OpenAI Infrastruktur
**Bash:**
```bash
cd 01-introduction
-azd up # Wählen Sie das Abonnement und den Standort aus (empfohlen wird eastus2)
+azd up # Wählen Sie das Abonnement und den Standort aus (eastus2 empfohlen)
```
**PowerShell:**
```powershell
cd 01-introduction
-azd up # Wählen Sie das Abonnement und den Standort (eastus2 empfohlen)
+azd up # Wählen Sie Abonnement und Standort (eastus2 empfohlen)
```
-> **Hinweis:** Wenn Sie einen Timeout-Fehler (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`) erhalten, führen Sie einfach `azd up` erneut aus. Azure-Ressourcen sind möglicherweise noch in Bereitstellung, und ein erneuter Versuch erlaubt der Bereitstellung, abzuschließen, sobald die Ressourcen einen Endzustand erreichen.
+> **Hinweis:** Wenn Sie einen Timeout-Fehler (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`) erhalten, führen Sie einfach erneut `azd up` aus. Azure-Ressourcen können noch im Bereitstellungsprozess sein, und ein erneutes Ausführen ermöglicht den Abschluss, sobald sich die Ressourcen in einem Endzustand befinden.
-Dies führt aus:
-1. Bereitstellung der Azure OpenAI-Ressource mit GPT-5.2 und text-embedding-3-small Modellen
-2. Automatische Erstellung einer `.env`-Datei im Projektstamm mit Zugangsdaten
-3. Einrichtung aller erforderlichen Umgebungsvariablen
+Dies wird:
+1. Eine Azure OpenAI-Ressource mit GPT-5.2 und text-embedding-3-small Modellen bereitstellen
+2. Automatisch eine `.env`-Datei im Projektstamm mit Zugangsdaten erzeugen
+3. Alle erforderlichen Umgebungsvariablen einrichten
-**Legen Sie bei Bereitstellungsproblemen los?** Lesen Sie die [Infrastructure README](infra/README.md) für detaillierte Fehlerbehebung, einschließlich Konflikten bei Subdomain-Namen, manuellen Azure Portal-Bereitstellungsschritten und Modellkonfigurationshinweisen.
+**Probleme bei der Bereitstellung?** Siehe das [Infrastructure README](infra/README.md) für detaillierte Fehlerbehebung, einschließlich Konflikten mit Subdomain-Namen, manueller Azure-Portal-Bereitstellung und Modellkonfigurationshinweisen.
-**Bestätigen Sie, dass die Bereitstellung erfolgreich war:**
+**Überprüfen, ob die Bereitstellung erfolgreich war:**
**Bash:**
```bash
@@ -168,25 +168,26 @@ cat ../.env # Sollte AZURE_OPENAI_ENDPOINT, API_KEY usw. anzeigen.
Get-Content ..\.env # Sollte AZURE_OPENAI_ENDPOINT, API_KEY usw. anzeigen.
```
-> **Hinweis:** Der Befehl `azd up` erzeugt automatisch die `.env`-Datei. Wenn Sie diese später aktualisieren wollen, können Sie entweder die `.env`-Datei manuell bearbeiten oder sie durch Ausführen der folgenden Befehle neu generieren:
+> **Hinweis:** Der `azd up`-Befehl erzeugt die `.env`-Datei automatisch. Falls Sie diese später aktualisieren müssen, können Sie entweder die `.env`-Datei manuell bearbeiten oder sie durch Ausführen folgender Befehle neu generieren:
>
> **Bash:**
> ```bash
> cd ..
> bash .azd-env.sh
> ```
-
+>
> **PowerShell:**
> ```powershell
> cd ..
> .\.azd-env.ps1
> ```
+
## Anwendung lokal ausführen
**Bereitstellung überprüfen:**
-Stellen Sie sicher, dass die `.env`-Datei mit Azure-Zugangsdaten im Stammverzeichnis vorhanden ist. Führen Sie dies im Modulverzeichnis (`01-introduction/`) aus:
+Stellen Sie sicher, dass die `.env`-Datei mit Azure-Zugangsdaten im Stammverzeichnis vorhanden ist. Führen Sie dies aus dem Modulverzeichnis (`01-introduction/`) aus:
**Bash:**
```bash
@@ -198,25 +199,26 @@ cat ../.env # Sollte AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT anzeigen
Get-Content ..\.env # Sollte AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT anzeigen
```
+
**Starten Sie die Anwendungen:**
-**Option 1: Spring Boot Dashboard verwenden (empfohlen für VS Code Nutzer)**
+**Option 1: Verwendung des Spring Boot Dashboards (empfohlen für VS Code-Nutzer)**
-Der Devcontainer enthält die Spring Boot Dashboard-Erweiterung, die eine visuelle Oberfläche bietet, um alle Spring Boot-Anwendungen zu verwalten. Sie finden sie in der Aktivitätsleiste links in VS Code (Suchen Sie das Spring Boot-Symbol).
+Der Devcontainer enthält die Spring Boot Dashboard-Erweiterung, die eine visuelle Schnittstelle zum Verwalten aller Spring Boot-Anwendungen bietet. Sie finden es in der Aktivitätsleiste links in VS Code (achten Sie auf das Spring Boot-Symbol).
-Vom Spring Boot Dashboard aus können Sie:
+Über das Spring Boot Dashboard können Sie:
- Alle verfügbaren Spring Boot-Anwendungen im Workspace sehen
- Anwendungen mit einem Klick starten/stoppen
-- Anwendungsprotokolle in Echtzeit anzeigen
-- Anwendungsstatus überwachen
+- Echtzeit-Logs der Anwendungen ansehen
+- Den Anwendungsstatus überwachen
-Starten Sie dieses Modul einfach mit dem Play-Button neben „introduction“ oder starten Sie alle Module gleichzeitig.
+Klicken Sie einfach auf den Start-Button neben „introduction“, um dieses Modul zu starten, oder starten Sie alle Module gleichzeitig.
-*Das Spring Boot Dashboard in VS Code – starten, stoppen und überwachen Sie alle Module an einem Ort*
+*Das Spring Boot Dashboard in VS Code — starten, stoppen und überwachen Sie alle Module an einem Ort*
-**Option 2: Shell-Skripte verwenden**
+**Option 2: Verwendung von Shell-Skripten**
Starten Sie alle Webanwendungen (Module 01-04):
@@ -246,23 +248,25 @@ cd 01-introduction
.\start.ps1
```
-Beide Skripte laden automatisch Umgebungsvariablen aus der Root-`.env`-Datei und bauen die JARs, falls diese nicht existieren.
-> **Hinweis:** Wenn Sie alle Module manuell vor dem Start bauen möchten:
+Beide Skripte laden automatisch Umgebungsvariablen aus der `.env`-Datei im Stammverzeichnis und bauen die JARs, falls diese nicht vorhanden sind.
+
+> **Hinweis:** Wenn Sie lieber alle Module manuell bauen möchten, bevor Sie starten:
>
> **Bash:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-
+>
> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-Öffnen Sie http://localhost:8080 im Browser.
+
+Öffnen Sie http://localhost:8080 in Ihrem Browser.
**Zum Stoppen:**
@@ -280,43 +284,44 @@ cd .. && ./stop-all.sh # Alle Module
cd ..; .\stop-all.ps1 # Alle Module
```
-## Die Anwendung verwenden
+
+## Verwendung der Anwendung
Die Anwendung bietet eine Weboberfläche mit zwei Chat-Implementierungen nebeneinander.
-
+
-*Dashboard zeigt die Optionen Einfacher Chat (zustandslos) und Konversationeller Chat (zustandsbehaftet)*
+*Dashboard zeigt sowohl Simple Chat (zustandslos) als auch Conversational Chat (zustandsbehaftet)*
### Zustandsloser Chat (linkes Panel)
-Probieren Sie dies zuerst aus. Fragen Sie „Mein Name ist John“ und fragen Sie dann sofort „Wie heißt mein Name?“ Das Modell wird sich nicht erinnern, weil jede Nachricht unabhängig ist. Das zeigt das Kernproblem der einfachen Sprachmodell-Integration – kein Gesprächskontext.
+Probieren Sie das zuerst. Fragen Sie „Mein Name ist John“ und dann sofort „Wie heißt mein Name?“ Das Modell wird sich nicht erinnern, weil jede Nachricht unabhängig ist. Dies zeigt das Kernproblem der Grundintegration von Sprachmodellen – kein Gesprächskontext.
-*KI erinnert sich nicht an Ihren Namen aus der vorherigen Nachricht*
+*KI merkt sich den Namen aus der vorherigen Nachricht nicht*
### Zustandsbehafteter Chat (rechtes Panel)
-Probieren Sie jetzt dieselbe Folge hier aus. Fragen Sie „Mein Name ist John“ und dann „Wie heißt mein Name?“ Diesmal erinnert es sich. Der Unterschied ist MessageWindowChatMemory – dieser erhält die Gesprächshistorie und inkludiert sie bei jeder Anfrage. So funktioniert produktive konversationelle KI.
+Versuchen Sie hier dieselbe Abfolge. Fragen Sie „Mein Name ist John“ und dann „Wie heißt mein Name?“ Diesmal erinnert das Modell sich. Der Unterschied ist MessageWindowChatMemory – es hält den Gesprächsverlauf und fügt ihn mit jeder Anfrage hinzu. So funktionieren produktive konversationelle KI-Anwendungen.
*KI erinnert sich an Ihren Namen aus dem früheren Gespräch*
-Beide Panels verwenden dasselbe GPT-5.2 Modell. Der einzige Unterschied ist der Speicher. Das macht klar, welchen Mehrwert Speicher für Ihre Anwendung bringt und warum er für reale Anwendungsfälle essenziell ist.
+Beide Panels verwenden dasselbe GPT-5.2-Modell. Der einzige Unterschied ist der Speicher. Das macht deutlich, was Speicher Ihrer Anwendung bringt und warum er für echte Anwendungsfälle unverzichtbar ist.
## Nächste Schritte
-**Nächstes Modul:** [02-prompt-engineering – Prompt Engineering mit GPT-5.2](../02-prompt-engineering/README.md)
+**Nächstes Modul:** [02-prompt-engineering - Prompt Engineering mit GPT-5.2](../02-prompt-engineering/README.md)
---
-**Navigation:** [← Vorheriges: Modul 00 – Quick Start](../00-quick-start/README.md) | [Zurück zum Hauptmenü](../README.md) | [Nächstes: Modul 02 – Prompt Engineering →](../02-prompt-engineering/README.md)
+**Navigation:** [← Zurück zur Hauptseite](../README.md) | [Weiter: Modul 02 - Prompt Engineering →](../02-prompt-engineering/README.md)
---
-**Haftungsausschluss**:
-Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache ist als maßgebliche Quelle zu betrachten. Für wichtige Informationen wird eine professionelle, menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die durch die Nutzung dieser Übersetzung entstehen.
+**Haftungsausschluss**:
+Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
\ No newline at end of file
diff --git a/translations/de/02-prompt-engineering/README.md b/translations/de/02-prompt-engineering/README.md
index 91118cb64..fc8df596a 100644
--- a/translations/de/02-prompt-engineering/README.md
+++ b/translations/de/02-prompt-engineering/README.md
@@ -2,52 +2,52 @@
## Inhaltsverzeichnis
-- [Video Walkthrough](../../../02-prompt-engineering)
-- [Was Sie lernen werden](../../../02-prompt-engineering)
-- [Voraussetzungen](../../../02-prompt-engineering)
-- [Verständnis von Prompt Engineering](../../../02-prompt-engineering)
-- [Grundlagen des Prompt Engineerings](../../../02-prompt-engineering)
- - [Zero-Shot Prompting](../../../02-prompt-engineering)
- - [Few-Shot Prompting](../../../02-prompt-engineering)
- - [Chain of Thought](../../../02-prompt-engineering)
- - [Rollenbasiertes Prompting](../../../02-prompt-engineering)
- - [Prompt-Vorlagen](../../../02-prompt-engineering)
-- [Fortgeschrittene Muster](../../../02-prompt-engineering)
-- [Anwendung starten](../../../02-prompt-engineering)
-- [Screenshots der Anwendung](../../../02-prompt-engineering)
-- [Erkundung der Muster](../../../02-prompt-engineering)
- - [Niedrige vs. hohe Bereitschaft](../../../02-prompt-engineering)
- - [Aufgabenausführung (Werkzeug-Preambles)](../../../02-prompt-engineering)
- - [Selbstreflektierender Code](../../../02-prompt-engineering)
- - [Strukturierte Analyse](../../../02-prompt-engineering)
- - [Mehrstufiger Chat](../../../02-prompt-engineering)
- - [Schritt-für-Schritt-Argumentation](../../../02-prompt-engineering)
- - [Eingeschränkte Ausgabe](../../../02-prompt-engineering)
-- [Was Sie wirklich lernen](../../../02-prompt-engineering)
-- [Nächste Schritte](../../../02-prompt-engineering)
-
-## Video Walkthrough
-
-Sehen Sie sich diese Live-Session an, die erklärt, wie Sie mit diesem Modul starten:
-
-
+- [Video-Durchgang](#video-durchgang)
+- [Was Sie lernen werden](#was-sie-lernen-werden)
+- [Voraussetzungen](#voraussetzungen)
+- [Verständnis von Prompt Engineering](#verständnis-von-prompt-engineering)
+- [Grundlagen des Prompt Engineering](#grundlagen-des-prompt-engineering)
+ - [Zero-Shot Prompting](#zero-shot-prompting)
+ - [Few-Shot Prompting](#few-shot-prompting)
+ - [Chain of Thought](#chain-of-thought)
+ - [Rollenbasiertes Prompting](#rollenbasiertes-prompting)
+ - [Prompt-Vorlagen](#prompt-vorlagen)
+- [Erweiterte Muster](#erweiterte-muster)
+- [Anwendung ausführen](#anwendung-starten)
+- [Anwendungsscreenshots](#anwendungsscreenshots)
+- [Muster erkunden](#die-muster-erkunden)
+ - [Niedrige vs hohe Eifer](#niedrige-vs-hohe-eagerness)
+ - [Aufgabenausführung (Tool-Preambles)](#aufgabenausführung-werkzeugpräambeln)
+ - [Selbstreflektierender Code](#selbstreflektierender-code)
+ - [Strukturierte Analyse](#strukturierte-analyse)
+ - [Mehrstufiger Chat](#mehrstufiger-chat)
+ - [Schritt-für-Schritt-Schlussfolgerung](#schritt-für-schritt-argumentation)
+ - [Beschränkte Ausgabe](#eingeschränkte-ausgabe)
+- [Was Sie wirklich lernen](#was-sie-wirklich-lernen)
+- [Nächste Schritte](#nächste-schritte)
+
+## Video-Durchgang
+
+Sehen Sie sich diese Live-Sitzung an, die erklärt, wie Sie mit diesem Modul beginnen:
+
+
## Was Sie lernen werden
-Das folgende Diagramm gibt einen Überblick über die wichtigsten Themen und Fähigkeiten, die Sie in diesem Modul entwickeln werden — von Techniken zur Verfeinerung von Prompts bis zum schrittweisen Workflow, dem Sie folgen.
+Das folgende Diagramm bietet einen Überblick über die wichtigsten Themen und Fähigkeiten, die Sie in diesem Modul entwickeln werden – von Techniken zur Verfeinerung von Prompts bis zum Schritt-für-Schritt-Workflow, dem Sie folgen werden.
-In den vorherigen Modulen haben Sie grundlegende Interaktionen mit LangChain4j und GitHub-Modellen erforscht und gesehen, wie Speicher konversationelle KI mit Azure OpenAI ermöglicht. Jetzt konzentrieren wir uns darauf, wie Sie Fragen stellen — also die Prompts selbst — mit Azure OpenAI's GPT-5.2. Die Art und Weise, wie Sie Ihre Prompts strukturieren, beeinflusst dramatisch die Qualität der Antworten, die Sie erhalten. Wir beginnen mit einer Übersicht der grundlegenden Prompting-Techniken und gehen dann zu acht fortgeschrittenen Mustern über, die die Möglichkeiten von GPT-5.2 voll ausschöpfen.
+Im vorherigen Modul haben Sie gesehen, wie Speicher Konversations-KI mit Azure OpenAI ermöglicht. Jetzt konzentrieren wir uns darauf, wie Sie Fragen stellen – also die Prompts selbst – unter Verwendung von Azure OpenAI's GPT-5.2. Die Art, wie Sie Ihre Prompts strukturieren, beeinflusst maßgeblich die Qualität der Antworten, die Sie erhalten. Wir beginnen mit einer Überprüfung der grundlegenden Prompting-Techniken und gehen dann zu acht erweiterten Mustern über, die die Fähigkeiten von GPT-5.2 voll ausnutzen.
-Wir verwenden GPT-5.2, weil es eine Steuerung des Denkens einführt – Sie können dem Modell sagen, wie viel Nachdenken vor der Antwort erfolgen soll. Das macht verschiedene Prompting-Strategien deutlicher sichtbar und hilft Ihnen zu verstehen, welche Ansätze wann zu verwenden sind. Außerdem profitieren wir von Azure's geringeren Ratenbegrenzungen für GPT-5.2 im Vergleich zu GitHub-Modellen.
+Wir verwenden GPT-5.2, weil es eine Steuerung des Denkprozesses einführt – Sie können dem Modell sagen, wie viel nachzudenken ist, bevor es antwortet. Das macht verschiedene Prompting-Strategien deutlicher und hilft Ihnen zu verstehen, wann Sie welche Methode einsetzen sollten.
## Voraussetzungen
- Abgeschlossenes Modul 01 (Azure OpenAI-Ressourcen bereitgestellt)
-- `.env` Datei im Hauptverzeichnis mit Azure-Anmeldedaten (erstellt durch `azd up` im Modul 01)
+- `.env`-Datei im Stammverzeichnis mit Azure-Anmeldeinformationen (erstellt durch `azd up` in Modul 01)
-> **Hinweis:** Falls Sie Modul 01 noch nicht abgeschlossen haben, folgen Sie bitte zuerst den dortigen Bereitstellungsanweisungen.
+> **Hinweis:** Wenn Sie Modul 01 noch nicht abgeschlossen haben, folgen Sie dort zuerst den Bereitstellungsanweisungen.
## Verständnis von Prompt Engineering
@@ -55,47 +55,47 @@ Im Kern ist Prompt Engineering der Unterschied zwischen vagen und präzisen Anwe
-Prompt Engineering bedeutet, Texteingaben so zu gestalten, dass sie konsistent die gewünschten Ergebnisse liefern. Es geht nicht nur ums Fragenstellen – sondern darum, Anfragen so zu strukturieren, dass das Modell genau versteht, was Sie wollen und wie es geliefert werden soll.
+Prompt Engineering bedeutet, Eingabetext so zu gestalten, dass Sie konsistent die Ergebnisse erhalten, die Sie benötigen. Es geht nicht nur darum, Fragen zu stellen – es geht darum, Anfragen so zu strukturieren, dass das Modell genau versteht, was Sie wollen und wie es geliefert werden soll.
-Denken Sie daran wie an eine Anweisung an einen Kollegen. „Behebe den Fehler“ ist vage. „Behebe die NullPointerException in UserService.java Zeile 45 durch Hinzufügen einer Nullprüfung“ ist spezifisch. Sprachmodelle funktionieren genauso – Spezifität und Struktur zählen.
+Denken Sie daran wie an eine Anweisung an einen Kollegen. „Behebe den Fehler“ ist vage. „Behebe den NullPointerException in UserService.java Zeile 45 durch Hinzufügen einer Nullprüfung“ ist spezifisch. Sprachmodelle funktionieren genauso – Spezifität und Struktur sind entscheidend.
-Das folgende Diagramm zeigt, wie LangChain4j in dieses Bild passt — es verbindet Ihre Prompt-Muster mit dem Modell über die Bausteine `SystemMessage` und `UserMessage`.
+Das folgende Diagramm zeigt, wie LangChain4j in dieses Bild passt – indem es Ihre Prompt-Muster über SystemMessage und UserMessage Bausteine mit dem Modell verbindet.
-LangChain4j stellt die Infrastruktur bereit — Modellverbindungen, Speicher und Nachrichtentypen — während Prompt-Muster einfach sorgfältig strukturierte Texte sind, die Sie durch diese Infrastruktur senden. Die Schlüsselbausteine sind `SystemMessage` (setzt das Verhalten und die Rolle der KI) und `UserMessage` (enthält Ihre eigentliche Anfrage).
+LangChain4j stellt die Infrastruktur bereit – Modellverbindungen, Speicher und Nachrichtentypen – während Prompt-Muster nur sorgfältig strukturierter Text sind, den Sie durch diese Infrastruktur senden. Die wichtigsten Bausteine sind `SystemMessage` (die das Verhalten und die Rolle der KI festlegt) und `UserMessage` (die Ihre eigentliche Anfrage trägt).
-## Grundlagen des Prompt Engineerings
+## Grundlagen des Prompt Engineering
-Die fünf Kerntechniken, die unten gezeigt sind, bilden die Grundlage für effektives Prompt Engineering. Jede behandelt einen anderen Aspekt, wie Sie mit Sprachmodellen kommunizieren.
+Die fünf Kerntechniken unten bilden die Grundlage für effektives Prompt Engineering. Jede behandelt einen anderen Aspekt, wie Sie mit Sprachmodellen kommunizieren.
-
+
-Bevor wir in diesem Modul zu den fortgeschrittenen Mustern übergehen, sehen wir uns fünf grundlegende Prompting-Techniken an. Diese sind die Bausteine, die jeder Prompt-Ingenieur kennen sollte. Wenn Sie bereits das [Quick Start Modul](../00-quick-start/README.md#2-prompt-patterns) durchgearbeitet haben, kennen Sie diese bereits in der Praxis — hier ist das konzeptuelle Grundgerüst dahinter.
+Bevor wir zu den erweiterten Mustern dieses Moduls übergehen, sehen wir uns fünf grundlegende Prompting-Techniken an. Diese sind die Bausteine, die jeder Prompt Engineer kennen sollte.
### Zero-Shot Prompting
-Der einfachste Ansatz: Geben Sie dem Modell eine direkte Anweisung ohne Beispiele. Das Modell verlässt sich vollständig auf sein Training, um die Aufgabe zu verstehen und auszuführen. Das funktioniert gut bei einfachen Anforderungen, wo das erwartete Verhalten offensichtlich ist.
+Der einfachste Ansatz: Geben Sie dem Modell eine direkte Anweisung ohne Beispiele. Das Modell verlässt sich vollständig auf sein Training, um die Aufgabe zu verstehen und auszuführen. Das funktioniert gut bei einfachen Anfragen, bei denen das erwartete Verhalten offensichtlich ist.
-*Direkte Anweisung ohne Beispiele — das Modell leitet die Aufgabe allein aus der Anweisung ab*
+*Direkte Anweisung ohne Beispiele – das Modell leitet die Aufgabe allein aus der Anweisung ab*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
String response = model.chat(prompt);
// Antwort: "Positiv"
```
-
-**Wann verwenden:** Für einfache Klassifikationen, direkte Fragen, Übersetzungen oder Aufgaben, die das Modell ohne zusätzliche Anleitung bewältigen kann.
+
+**Wann zu verwenden:** Einfache Klassifikationen, direkte Fragen, Übersetzungen oder jede Aufgabe, die das Modell ohne zusätzliche Anleitung bewältigen kann.
### Few-Shot Prompting
-Geben Sie Beispiele an, die das Muster zeigen, dem das Modell folgen soll. Das Modell lernt von Ihren Beispielen das erwartete Eingabe-Ausgabe-Format und wendet es auf neue Eingaben an. Das verbessert die Konsistenz bei Aufgaben, wo Format oder Verhalten nicht offensichtlich sind.
+Geben Sie Beispiele, die das Muster zeigen, dem das Modell folgen soll. Das Modell lernt das erwartete Eingabe-Ausgabe-Format anhand Ihrer Beispiele und wendet es auf neue Eingaben an. Das verbessert die Konsistenz stark bei Aufgaben, bei denen das gewünschte Format oder Verhalten nicht offensichtlich ist.
-*Lernen anhand von Beispielen — das Modell erkennt das Muster und wendet es auf neue Eingaben an*
+*Lernen von Beispielen – das Modell erkennt das Muster und überträgt es auf neue Eingaben*
```java
String prompt = """
@@ -111,16 +111,16 @@ String prompt = """
""";
String response = model.chat(prompt);
```
-
-**Wann verwenden:** Für kundenspezifische Klassifikationen, konsistente Formatierung, domänenspezifische Aufgaben oder wenn Zero-Shot-Ergebnisse inkonsistent sind.
+
+**Wann zu verwenden:** Maßgeschneiderte Klassifikationen, konsistente Formatierung, domänenspezifische Aufgaben oder wenn Zero-Shot-Ergebnisse inkonsistent sind.
### Chain of Thought
-Bitten Sie das Modell, seine Argumentation Schritt für Schritt zu zeigen. Statt direkt zur Antwort zu springen, zerlegt das Modell das Problem und arbeitet jeden Teil explizit durch. Das verbessert die Genauigkeit bei Mathematik, Logik und mehrstufigen Denkaufgaben.
+Fordern Sie das Modell auf, seinen Denkprozess Schritt für Schritt zu zeigen. Statt sofort eine Antwort zu geben, zerlegt das Modell das Problem und arbeitet jede Teilaufgabe explizit ab. Das erhöht die Genauigkeit bei mathematischen, logischen und mehrstufigen Denkaufgaben.
-*Schrittweise Argumentation — komplexe Probleme in explizite logische Schritte zerlegen*
+*Schritt-für-Schritt-Schlussfolgerung – komplexe Probleme in explizite logische Schritte zerlegen*
```java
String prompt = """
@@ -132,8 +132,8 @@ String prompt = """
String response = model.chat(prompt);
// Das Modell zeigt: 15 - 8 = 7, dann 7 + 12 = 19 Äpfel
```
-
-**Wann verwenden:** Für Mathematikaufgaben, Logikrätsel, Debugging oder Aufgaben, bei denen das Zeigen des Denkprozesses Genauigkeit und Vertrauen verbessert.
+
+**Wann zu verwenden:** Mathematische Probleme, Logikrätsel, Debugging oder jede Aufgabe, bei der das Zeigen des Denkprozesses Genauigkeit und Vertrauen erhöht.
### Rollenbasiertes Prompting
@@ -141,7 +141,7 @@ Weisen Sie der KI vor der Fragestellung eine Persona oder Rolle zu. Das liefert
-*Kontext und Persona setzen — dieselbe Frage erhält je nach zugewiesener Rolle unterschiedliche Antworten*
+*Festlegung von Kontext und Persona – dieselbe Frage erhält je nach zugewiesener Rolle unterschiedliche Antworten*
```java
String prompt = """
@@ -156,16 +156,16 @@ String prompt = """
""";
String response = model.chat(prompt);
```
-
-**Wann verwenden:** Für Code-Reviews, Nachhilfe, domänenspezifische Analysen oder wenn Sie Antworten benötigen, die an ein bestimmtes Fachwissen oder eine Perspektive angepasst sind.
+
+**Wann zu verwenden:** Code-Reviews, Nachhilfe, domänenspezifische Analysen oder wenn Sie Antworten brauchen, die auf ein bestimmtes Fachwissen oder eine Perspektive zugeschnitten sind.
### Prompt-Vorlagen
-Erstellen Sie wiederverwendbare Prompts mit variablen Platzhaltern. Statt jedes Mal einen neuen Prompt zu schreiben, definieren Sie eine Vorlage einmal und füllen verschiedene Werte ein. Die `PromptTemplate` Klasse von LangChain4j macht das mit `{{variable}}` Syntax einfach.
+Erstellen Sie wiederverwendbare Prompts mit variablen Platzhaltern. Anstatt jedes Mal einen neuen Prompt zu schreiben, definieren Sie einmal eine Vorlage und füllen verschiedene Werte ein. Die `PromptTemplate` Klasse von LangChain4j macht das mit der Syntax `{{variable}}` einfach.
-*Wiederverwendbare Prompts mit variablen Platzhaltern — eine Vorlage, viele Verwendungen*
+*Wiederverwendbare Prompts mit variablen Platzhaltern – eine Vorlage, viele Anwendungen*
```java
PromptTemplate template = PromptTemplate.from(
@@ -179,28 +179,28 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-
-**Wann verwenden:** Für wiederholte Anfragen mit unterschiedlichen Eingaben, Stapelverarbeitung, Aufbau wiederverwendbarer KI-Workflows oder beliebige Szenarien, bei denen die Prompt-Struktur gleich bleibt, aber die Daten sich ändern.
+
+**Wann zu verwenden:** Wiederholte Abfragen mit unterschiedlichen Eingaben, Batch-Verarbeitung, Aufbau wiederverwendbarer KI-Workflows oder jede Situation, in der die Prompt-Struktur gleich bleibt, sich aber die Daten ändern.
---
-Diese fünf Grundlagen geben Ihnen ein solides Werkzeugset für die meisten Prompting-Aufgaben. Der Rest dieses Moduls baut darauf mit **acht fortgeschrittenen Mustern** auf, die GPT-5.2s Steuerung von Denkprozessen, Selbstbewertung und strukturierte Ausgabe-Fähigkeiten ausnutzen.
+Diese fünf Grundlagen geben Ihnen einen soliden Werkzeugkasten für die meisten Prompting-Aufgaben. Der Rest dieses Moduls baut darauf mit **acht erweiterten Mustern** auf, die GPT-5.2s Steuerung des Denkprozesses, Selbstevaluation und strukturierte Ausgaben nutzen.
-## Fortgeschrittene Muster
+## Erweiterte Muster
-Mit den Grundlagen abgedeckt, wenden wir uns den acht fortgeschrittenen Mustern zu, die dieses Modul einzigartig machen. Nicht alle Probleme brauchen den gleichen Ansatz. Manche Fragen verlangen schnelle Antworten, andere tiefgründiges Nachdenken. Manche brauchen sichtbare Argumentation, andere nur Ergebnisse. Jedes Muster unten ist auf ein anderes Szenario optimiert — und GPT-5.2s Steuerung des Denkens macht die Unterschiede noch deutlicher.
+Nachdem die Grundlagen abgedeckt sind, kommen wir zu den acht erweiterten Mustern, die dieses Modul einzigartig machen. Nicht alle Probleme benötigen den gleichen Ansatz. Manche Fragen brauchen schnelle Antworten, andere tiefes Nachdenken. Einige brauchen sichtbare Überlegungen, andere nur Ergebnisse. Jedes Muster unten ist für ein anderes Szenario optimiert – und GPT-5.2s Steuerung der Denkprozesse macht die Unterschiede noch deutlicher.
-
+
-*Überblick über die acht Muster des Prompt Engineerings und deren Anwendungsfälle*
+*Übersicht der acht Prompt-Engineering-Muster und deren Anwendungsfälle*
-GPT-5.2 fügt den Mustern eine weitere Dimension hinzu: *Steuerung des Denkens*. Der Schieberegler unten zeigt, wie Sie den Denkaufwand des Modells anpassen können — von schnellen, direkten Antworten bis hin zu tiefgründiger, gründlicher Analyse.
+GPT-5.2 fügt diesen Mustern noch eine Dimension hinzu: *Steuerung des Denkprozesses*. Der Slider unten zeigt, wie Sie den Denkaufwand des Modells anpassen können – von schnellen direkten Antworten bis zu tiefgehender Analyse.
-
+
-*Die Steuerung des Denkens bei GPT-5.2 lässt Sie festlegen, wie viel das Modell nachdenken soll — von schnellen direkten Antworten bis zu tiefgründiger Erforschung*
+*Mit der Steuerung des Denkprozesses von GPT-5.2 können Sie festlegen, wie viel das Modell denken soll – von schnellen direkten Antworten bis zur tiefgehenden Erkundung*
-**Niedrige Bereitschaft (Schnell & Fokussiert)** - Für einfache Fragen, bei denen Sie schnelle, direkte Antworten wollen. Das Modell denkt minimal — maximal 2 Schritte. Nutzen Sie das für Berechnungen, Nachschlagen oder einfache Fragen.
+**Niedriger Eifer (Schnell & Fokussiert)** – Für einfache Fragen, bei denen Sie schnelle, direkte Antworten wollen. Das Modell denkt minimal – maximal 2 Schritte. Nutzen Sie das für Berechnungen, Abfragen oder einfache Fragen.
```java
String prompt = """
@@ -218,13 +218,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
+
+> 💡 **Mit GitHub Copilot erkunden:** Öffnen Sie [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) und fragen Sie:
+> - „Was ist der Unterschied zwischen low eagerness und high eagerness Prompting-Mustern?“
+> - „Wie helfen XML-Tags in Prompts, die Antwort der KI zu strukturieren?“
+> - „Wann sollte ich Selbstreflexionsmuster statt direkter Anweisungen verwenden?“
-> 💡 **Entdecken Sie mit GitHub Copilot:** Öffnen Sie [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) und fragen Sie:
-> - „Was ist der Unterschied zwischen niedriger und hoher Bereitschaft bei Prompt-Mustern?“
-> - „Wie helfen die XML-Tags in Prompts, die Antwort der KI zu strukturieren?“
-> - „Wann sollte ich Selbstreflexionsmuster vs. direkte Anweisungen verwenden?“
-
-**Hohe Bereitschaft (Tief & Gründlich)** - Für komplexe Probleme, bei denen Sie umfassende Analysen wollen. Das Modell erforscht gründlich und zeigt detaillierte Argumentationen. Nutzen Sie das für Systemdesign, Architekturentscheidungen oder komplexe Recherche.
+**Hoher Eifer (Tief & Gründlich)** – Für komplexe Probleme, bei denen Sie eine umfassende Analyse möchten. Das Modell arbeitet gründlich, zeigt detailliertes Nachdenken. Verwenden Sie das für Systemdesign, Architekturentscheidungen oder komplexe Forschungsarbeiten.
```java
String prompt = """
@@ -237,8 +237,8 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-
-**Aufgabenausführung (Schrittweiser Fortschritt)** - Für mehrschrittige Arbeitsabläufe. Das Modell liefert einen Plan vorab, berichtet jeden Schritt beim Arbeiten und gibt dann eine Zusammenfassung. Verwenden Sie dies für Migrationen, Implementierungen oder jegliche mehrstufigen Prozesse.
+
+**Aufgabenausführung (Fortschritt Schritt für Schritt)** – Für mehrstufige Workflows. Das Modell gibt einen Plan im Voraus, beschreibt jeden Schritt beim Arbeiten und liefert dann eine Zusammenfassung. Nutzen Sie das für Migrationen, Implementierungen oder jeden mehrstufigen Prozess.
```java
String prompt = """
@@ -275,21 +275,21 @@ String prompt = """
String response = chatModel.chat(prompt);
```
+
+Chain-of-Thought Prompting fordert das Modell explizit auf, seinen Denkprozess zu zeigen, was die Genauigkeit bei komplexen Aufgaben verbessert. Die Schritt-für-Schritt-Zerlegung hilft sowohl Menschen als auch KI, die Logik zu verstehen.
-Chain-of-Thought Prompting fordert das Modell explizit auf, seinen Denkprozess zu zeigen, was die Genauigkeit bei komplexen Aufgaben verbessert. Die schrittweise Zerlegung hilft sowohl Menschen als auch KI, die Logik zu verstehen.
-
-> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat:** Fragen Sie zu diesem Muster:
-> - „Wie passe ich das Aufgabenausführungsmuster für langlaufende Operationen an?“
-> - „Was sind bewährte Methoden für die Strukturierung von Werkzeug-Preambles in Produktionsanwendungen?“
-> - „Wie erfasse und zeige ich Zwischenfortschritte in einer Benutzeroberfläche an?“
+> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat:** Fragen Sie zu diesem Muster:
+> - „Wie würde ich das Aufgabenausführungsmuster für lang laufende Operationen anpassen?“
+> - „Was sind Best Practices zur Strukturierung von Tool-Preambles in produktiven Anwendungen?“
+> - „Wie kann ich Zwischenfortschrittsupdates in einer UI erfassen und anzeigen?“
-Das folgende Diagramm illustriert diesen Plan → Ausführen → Zusammenfassen Workflow.
+Das folgende Diagramm veranschaulicht diesen Plan → Ausführen → Zusammenfassen-Workflow.
-*Plan → Ausführen → Zusammenfassen Arbeitsablauf für mehrstufige Aufgaben*
+*Plan → Ausführen → Zusammenfassen-Workflow für mehrstufige Aufgaben*
-**Selbstreflektierender Code** - Für die Erzeugung von Produktionscode. Das Modell generiert Code nach Produktionsstandards mit ordentlicher Fehlerbehandlung. Nutzen Sie das, wenn Sie neue Features oder Services entwickeln.
+**Selbstreflektierender Code** – Für die Generierung von produktionsreifem Code. Das Modell erzeugt Code gemäß Produktionsstandards mit ordentlicher Fehlerbehandlung. Verwenden Sie das bei der Erstellung neuer Features oder Dienste.
```java
String prompt = """
@@ -299,14 +299,14 @@ String prompt = """
String response = chatModel.chat(prompt);
```
+
+Das folgende Diagramm zeigt die iterative Verbesserungsschleife – generieren, bewerten, Schwachstellen identifizieren und verfeinern, bis der Code Produktionsstandards erfüllt.
-Das folgende Diagramm zeigt diese iterative Verbesserungsschleife — generieren, bewerten, Schwachstellen erkennen, verfeinern bis der Code Produktionsstandards erfüllt.
-
-
+
-*Iterative Verbesserungsschleife - generieren, bewerten, Probleme identifizieren, verbessern, wiederholen*
+*Iterative Verbesserungsschleife – generieren, bewerten, Probleme identifizieren, verbessern, wiederholen*
-**Strukturierte Analyse** - Für konsistente Bewertungen. Das Modell prüft Code anhand eines festen Rahmens (Korrektheit, Praktiken, Leistung, Sicherheit, Wartbarkeit). Nutzen Sie das für Code-Reviews oder Qualitätsbewertungen.
+**Strukturierte Analyse** – Für konsistente Bewertungen. Das Modell überprüft Code anhand eines festen Rahmens (Korrektheit, Praktiken, Leistung, Sicherheit, Wartbarkeit). Verwenden Sie das für Code-Reviews oder Qualitätsbewertungen.
```java
String prompt = """
@@ -353,19 +353,19 @@ String prompt = """
String response = chatModel.chat(prompt);
```
+
+> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat:** Fragen Sie zur strukturierten Analyse:
+> - „Wie kann ich das Analyse-Framework für verschiedene Arten von Code-Reviews anpassen?“
+> - „Wie ist der beste Weg, um strukturierte Ausgaben programmatisch zu parsen und zu verarbeiten?“
+> - „Wie stelle ich konsistente Schweregrade über unterschiedliche Review-Sitzungen sicher?“
-> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat:** Fragen Sie zur strukturierten Analyse:
-> - „Wie kann ich den Analyse-Rahmen für verschiedene Arten von Code-Reviews anpassen?“
-> - „Wie kann ich strukturierte Ausgaben programmatisch parsen und verwenden?“
-> - „Wie stelle ich konsistente Schweregrade über verschiedene Review-Sitzungen sicher?“
-
-Das folgende Diagramm zeigt, wie dieser strukturierte Rahmen ein Code-Review in konsistente Kategorien mit Schweregraden unterteilt.
+Das folgende Diagramm zeigt, wie dieses strukturierte Framework eine Code-Review in konsistente Kategorien mit Schweregraden gliedert.
-*Rahmenwerk für konsistente Code-Reviews mit Schweregraden*
+*Framework für konsistente Code-Reviews mit Schweregrad-Leveln*
-**Mehrstufiger Chat** - Für Konversationen, die Kontext brauchen. Das Modell erinnert sich an vorherige Nachrichten und baut darauf auf. Nutzen Sie das für interaktive Hilfesitzungen oder komplexe Q&A.
+**Mehrstufiger Chat** – Für Unterhaltungen, die Kontext brauchen. Das Modell erinnert sich an frühere Nachrichten und baut darauf auf. Verwenden Sie das für interaktive Hilfesitzungen oder komplexes Q&A.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -378,13 +378,14 @@ memory.add(UserMessage.from("Show me an example"));
AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
+
+Das folgende Diagramm visualisiert, wie sich der Gesprächskontext über mehrere Runden ansammelt und wie das mit dem Token-Limit des Modells zusammenhängt.
-Das folgende Diagramm visualisiert, wie Kontext in der Unterhaltung mit jedem Schritt wächst und wie das im Verhältnis zum Token-Limit des Modells steht.
+
-
+*Wie sich der Gesprächskontext über mehrere Runden ansammelt, bis das Token-Limit erreicht ist*
-*Wie sich der Gesprächskontext über mehrere Schritte ansammelt, bis das Token-Limit erreicht wird*
-**Schritt-für-Schritt-Begründung** – Für Probleme, die sichtbare Logik erfordern. Das Modell zeigt eine explizite Begründung für jeden Schritt. Verwenden Sie dies für Mathematikaufgaben, Logikrätsel oder wenn Sie den Denkprozess nachvollziehen müssen.
+**Schritt-für-Schritt-Schlussfolgerung** – Für Probleme, die sichtbare Logik erfordern. Das Modell zeigt für jeden Schritt explizite Überlegungen. Verwenden Sie das für mathematische Probleme, Logikrätsel oder wenn Sie den Denkprozess verstehen möchten.
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Das untenstehende Diagramm veranschaulicht, wie das Modell Probleme in explizite, nummerierte logische Schritte unterteilt.
+Das folgende Diagramm zeigt, wie das Modell Probleme in explizite, nummerierte logische Schritte zerlegt.
-
*Probleme in explizite logische Schritte zerlegen*
-**Eingeschränkte Ausgabe** – Für Antworten mit spezifischen Formatvorgaben. Das Modell hält sich strikt an Format- und Längenregeln. Verwenden Sie dies für Zusammenfassungen oder wenn Sie eine präzise Ausgabe benötigen.
+**Eingeschränkte Ausgabe** – Für Antworten mit spezifischen Formatvorgaben. Das Modell hält sich strikt an Format- und Längenregeln. Verwenden Sie dies für Zusammenfassungen oder wenn Sie eine präzise Ausgabestruktur benötigen.
```java
String prompt = """
@@ -420,17 +420,17 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Das folgende Diagramm zeigt, wie Einschränkungen das Modell anleiten, eine Ausgabe zu erzeugen, die streng den Format- und Längenanforderungen entspricht.
+Das folgende Diagramm zeigt, wie Einschränkungen das Modell anleiten, Ausgaben zu erzeugen, die genau Ihren Format- und Längenvorgaben entsprechen.
-
+
-*Durchsetzung spezifischer Format-, Längen- und Strukturvorgaben*
+*Spezifische Format-, Längen- und Strukturvorgaben erzwingen*
## Anwendung starten
**Bereitstellung überprüfen:**
-Stellen Sie sicher, dass die `.env`-Datei im Stammverzeichnis mit Azure-Anmeldedaten existiert (wurde während Modul 01 erstellt). Führen Sie dies aus dem Modulverzeichnis (`02-prompt-engineering/`) aus:
+Stellen Sie sicher, dass die `.env`-Datei im Stammverzeichnis mit Azure-Anmeldedaten vorhanden ist (erstellt während Modul 01). Führen Sie dies aus dem Modulverzeichnis (`02-prompt-engineering/`) aus:
**Bash:**
```bash
@@ -442,33 +442,33 @@ cat ../.env # Sollte AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT anzeigen
Get-Content ..\.env # Sollte AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT anzeigen
```
-**Starten der Anwendung:**
+**Starten Sie die Anwendung:**
-> **Hinweis:** Wenn Sie bereits alle Anwendungen mit `./start-all.sh` aus dem Stammverzeichnis gestartet haben (wie in Modul 01 beschrieben), läuft dieses Modul bereits auf Port 8083. Sie können die Startbefehle unten überspringen und direkt zu http://localhost:8083 gehen.
+> **Hinweis:** Wenn Sie bereits alle Anwendungen mit `./start-all.sh` aus dem Stammverzeichnis gestartet haben (wie in Modul 01 beschrieben), läuft dieses Modul bereits auf Port 8083. Sie können die untenstehenden Startbefehle überspringen und direkt zu http://localhost:8083 gehen.
-**Option 1: Verwendung des Spring Boot Dashboards (empfohlen für VS Code-Nutzer)**
+**Option 1: Nutzung des Spring Boot Dashboards (Empfohlen für VS Code Nutzer)**
-Der Dev-Container enthält die Erweiterung Spring Boot Dashboard, die eine visuelle Oberfläche zur Verwaltung aller Spring Boot-Anwendungen bietet. Sie finden sie in der Aktivitätsleiste links in VS Code (suchen Sie nach dem Spring Boot Symbol).
+Der Dev-Container enthält die Spring Boot Dashboard-Erweiterung, die eine visuelle Schnittstelle zum Verwalten aller Spring Boot Anwendungen bietet. Sie finden sie in der Aktivitätsleiste auf der linken Seite von VS Code (suchen Sie nach dem Spring Boot Symbol).
-Vom Spring Boot Dashboard aus können Sie:
-- Alle verfügbaren Spring Boot-Anwendungen im Workspace sehen
-- Anwendungen mit einem Klick starten/stoppen
-- Anwendungsprotokolle in Echtzeit ansehen
-- Anwendungsstatus überwachen
+Im Spring Boot Dashboard können Sie:
+- Alle verfügbaren Spring Boot Anwendungen im Workspace sehen
+- Anwendungen mit einem Klick starten oder stoppen
+- Anwendungsprotokolle in Echtzeit ansehen
+- Den Anwendungsstatus überwachen
-Klicken Sie einfach auf die Wiedergabetaste neben „prompt-engineering“, um dieses Modul zu starten, oder starten Sie alle Module auf einmal.
+Klicken Sie einfach auf die Wiedergabetaste neben "prompt-engineering", um dieses Modul zu starten, oder starten Sie alle Module gleichzeitig.
-*Das Spring Boot Dashboard in VS Code — Starte, stoppe und überwache alle Module an einem Ort*
+*Das Spring Boot Dashboard in VS Code – starten, stoppen und überwachen Sie alle Module von einem Ort aus*
-**Option 2: Verwendung von Shell-Skripten**
+**Option 2: Nutzung von Shell-Skripten**
-Alle Webanwendungen starten (Module 01-04):
+Starten Sie alle Webanwendungen (Module 01-04):
**Bash:**
```bash
-cd .. # Aus dem Stammverzeichnis
+cd .. # Vom Stammverzeichnis
./start-all.sh
```
@@ -478,7 +478,7 @@ cd .. # Vom Stammverzeichnis
.\start-all.ps1
```
-Oder nur dieses Modul starten:
+Oder starten Sie nur dieses Modul:
**Bash:**
```bash
@@ -492,9 +492,9 @@ cd 02-prompt-engineering
.\start.ps1
```
-Beide Skripte laden automatisch Umgebungsvariablen aus der `.env`-Datei im Stammverzeichnis und bauen die JARs, falls diese noch nicht existieren.
+Beide Skripte laden automatisch Umgebungsvariablen aus der `.env`-Datei im Stammverzeichnis und bauen die JAR-Dateien, falls sie nicht existieren.
-> **Hinweis:** Wenn Sie alle Module manuell vor dem Start bauen möchten:
+> **Hinweis:** Wenn Sie alle Module lieber manuell bauen möchten, bevor Sie starten:
>
> **Bash:**
> ```bash
@@ -526,71 +526,71 @@ cd .. && ./stop-all.sh # Alle Module
cd ..; .\stop-all.ps1 # Alle Module
```
-## Anwendungs-Screenshots
+## Anwendungsscreenshots
-Hier sehen Sie die Hauptoberfläche des Prompt Engineering Moduls, wo Sie alle acht Muster nebeneinander ausprobieren können.
+Hier sehen Sie die Hauptoberfläche des Prompt Engineering Moduls, in dem Sie alle acht Muster nebeneinander ausprobieren können.
-
+
-*Das Haupt-Dashboard zeigt alle 8 Prompt-Engineering-Muster mit ihren Eigenschaften und Anwendungsfällen*
+*Das Hauptdashboard zeigt alle 8 Prompt Engineering Muster mit deren Merkmalen und Anwendungsfällen*
## Die Muster erkunden
-Die Weboberfläche ermöglicht es Ihnen, verschiedene Prompting-Strategien auszuprobieren. Jedes Muster löst unterschiedliche Probleme – probieren Sie es aus, um zu sehen, wann welche Methode glänzt.
+Die Weboberfläche ermöglicht Ihnen das Experimentieren mit verschiedenen Prompt-Strategien. Jedes Muster löst unterschiedliche Probleme – probieren Sie aus, wann welcher Ansatz glänzt.
-> **Hinweis: Streaming vs. Nicht-Streaming** — Jede Muster-Seite bietet zwei Buttons: **🔴 Stream Response (Live)** und eine **Nicht-Streaming**-Option. Streaming verwendet Server-Sent Events (SSE), um Tokens in Echtzeit anzuzeigen, während das Modell sie generiert, sodass Sie den Fortschritt sofort sehen. Die Nicht-Streaming-Option wartet, bis die gesamte Antwort fertig ist, bevor sie angezeigt wird. Bei Prompts, die tiefes Nachdenken erfordern (z. B. hohe Eifrigkeit, selbstreflektierender Code), kann der Nicht-Streaming-Aufruf sehr lange dauern – manchmal Minuten – ohne sichtbares Feedback. **Verwenden Sie Streaming beim Experimentieren mit komplexen Prompts**, damit Sie sehen, wie das Modell arbeitet, und nicht den Eindruck bekommen, die Anfrage sei abgelaufen.
+> **Hinweis: Streaming vs. Nicht-Streaming** – Auf jeder Musterseite gibt es zwei Buttons: **🔴 Stream Response (Live)** und eine **Nicht-Streaming**-Option. Streaming nutzt Server-Sent Events (SSE), um Token in Echtzeit anzuzeigen, während das Modell sie generiert, sodass Sie den Fortschritt sofort sehen. Die Nicht-Streaming-Option wartet auf die vollständige Antwort, bevor sie angezeigt wird. Für Prompts, die tiefgründiges Denken erfordern (z.B. High Eagerness, Self-Reflecting Code), kann der Nicht-Streaming-Aufruf sehr lange dauern – manchmal Minuten – ohne sichtbares Feedback. **Verwenden Sie Streaming beim Experimentieren mit komplexen Prompts**, damit Sie das Modell arbeiten sehen und den Eindruck eines Timeouts vermeiden.
>
-> **Hinweis: Browser-Anforderung** — Die Streaming-Funktion nutzt die Fetch Streams API (`response.body.getReader()`), die einen vollständigen Browser (Chrome, Edge, Firefox, Safari) erfordert. Sie funktioniert **nicht** im integrierten Simple Browser von VS Code, da dessen Webview die ReadableStream API nicht unterstützt. Im Simple Browser funktionieren die Nicht-Streaming Buttons weiterhin normal – nur die Streaming Buttons sind betroffen. Öffnen Sie `http://localhost:8083` in einem externen Browser für das volle Erlebnis.
+> **Hinweis: Browseranforderung** – Die Streaming-Funktion nutzt die Fetch Streams API (`response.body.getReader()`), die einen vollständigen Browser erfordert (Chrome, Edge, Firefox, Safari). Sie funktioniert **nicht** im eingebauten Simple Browser von VS Code, da dessen Webview die ReadableStream API nicht unterstützt. Im Simple Browser funktionieren die Nicht-Streaming-Buttons normal – nur die Streaming-Buttons sind betroffen. Öffnen Sie http://localhost:8083 in einem externen Browser für das volle Erlebnis.
-### Niedrige vs. hohe Eifrigkeit
+### Niedrige vs. hohe Eagerness
-Stellen Sie eine einfache Frage wie „Was sind 15 % von 200?“ mit niedriger Eifrigkeit. Sie erhalten eine sofortige, direkte Antwort. Stellen Sie nun eine komplexe Frage wie „Entwerfe eine Caching-Strategie für eine stark frequentierte API“ mit hoher Eifrigkeit. Klicken Sie auf **🔴 Stream Response (Live)** und beobachten Sie, wie die detaillierte Begründung des Modells Token für Token erscheint. Dasselbe Modell, dieselbe Frage – nur der Prompt steuert, wie intensiv nachgedacht wird.
+Stellen Sie eine einfache Frage wie „Was sind 15 % von 200?“ mit niedriger Eagerness. Sie erhalten eine sofortige, direkte Antwort. Nun fragen Sie etwas Komplexes wie „Entwerfen Sie eine Caching-Strategie für eine stark frequentierte API“ mit hoher Eagerness. Klicken Sie auf **🔴 Stream Response (Live)** und beobachten Sie, wie das Modell detaillierte Überlegungen Token für Token anzeigt. Dasselbe Modell, dieselbe Fragenstruktur – aber der Prompt sagt ihm, wie viel Denken es anstellen soll.
-### Aufgaben-Ausführung (Tool-Preambels)
+### Aufgabenausführung (Werkzeugpräambeln)
-Mehrstufige Arbeitsabläufe profitieren von einer vorherigen Planung und Fortschrittskommentierung. Das Modell skizziert, was es tun wird, erläutert jeden Schritt und fasst die Ergebnisse zusammen.
+Mehrstufige Workflows profitieren von einer vorausgehenden Planung und Fortschrittserzählung. Das Modell skizziert, was es tun wird, erläutert jeden Schritt und fasst das Ergebnis zusammen.
### Selbstreflektierender Code
-Probieren Sie „Erstelle einen E-Mail-Validierungsdienst“. Anstatt nur Code zu generieren und zu stoppen, erzeugt das Modell, bewertet ihn anhand von Qualitätskriterien, erkennt Schwächen und verbessert den Code. Sie sehen, wie es iteriert, bis der Code den Produktionsstandards entspricht.
+Probieren Sie „Erstelle einen Service zur E-Mail-Validierung“. Anstatt nur Code zu erzeugen und zu stoppen, generiert das Modell, bewertet ihn anhand von Qualitätskriterien, identifiziert Schwachstellen und verbessert ihn. Sie sehen, wie es iteriert, bis der Code Produktionsstandards erfüllt.
### Strukturierte Analyse
-Code Reviews brauchen konsistente Bewertungsrahmen. Das Modell analysiert den Code anhand fester Kategorien (Korrektheit, Praktiken, Leistung, Sicherheit) mit Schweregraden.
+Code Reviews benötigen konsistente Bewertungsrahmen. Das Modell analysiert Code nach festen Kategorien (Korrektheit, Praktiken, Performance, Sicherheit) mit Schweregraden.
-### Multi-Turn Chat
+### Mehrstufiger Chat
-Fragen Sie „Was ist Spring Boot?“ und folgen Sie direkt mit „Zeig mir ein Beispiel“. Das Modell erinnert sich an Ihre erste Frage und gibt Ihnen ein spezielles Spring Boot-Beispiel. Ohne Gedächtnis wäre die zweite Frage zu vage.
+Fragen Sie „Was ist Spring Boot?“ und anschließend „Zeig mir ein Beispiel“. Das Modell erinnert sich an Ihre erste Frage und liefert ein spezielles Spring Boot-Beispiel. Ohne Gedächtnis wäre die zweite Frage zu vage.
-### Schritt-für-Schritt-Begründung
+### Schritt-für-Schritt-Argumentation
-Wählen Sie ein Mathematikproblem und probieren Sie es mit Schritt-für-Schritt-Begründung und niedriger Eifrigkeit. Niedrige Eifrigkeit gibt nur die Antwort – schnell, aber undurchsichtig. Schritt-für-Schritt zeigt jeden Rechenschritt und jede Entscheidung.
+Wählen Sie ein Matheproblem und probieren Sie es mit Schritt-für-Schritt-Argumentation und niedriger Eagerness. Niedrige Eagerness gibt die Antwort schnell, aber undurchsichtig. Schritt-für-Schritt zeigt jede Berechnung und Entscheidung.
### Eingeschränkte Ausgabe
-Wenn Sie bestimmte Formate oder Wortzahlen benötigen, erzwingt dieses Muster eine strikte Einhaltung. Versuchen Sie, eine Zusammenfassung mit exakt 100 Wörtern im Stichpunktformat zu generieren.
+Wenn Sie spezifische Formate oder Wortzahlen benötigen, sorgt dieses Muster für strikte Einhaltung. Versuchen Sie, eine Zusammenfassung mit genau 100 Wörtern in Aufzählungsformat zu erzeugen.
## Was Sie wirklich lernen
-**Der Denkaufwand verändert alles**
+**Argumentationsaufwand ändert alles**
-GPT-5.2 lässt Sie den Rechenaufwand über Ihre Prompts steuern. Niedriger Aufwand bedeutet schnelle Antworten mit minimaler Exploration. Hoher Aufwand bedeutet, das Modell nimmt sich Zeit zum tiefen Nachdenken. Sie lernen, den Aufwand an die Komplexität der Aufgabe anzupassen – verschwenden Sie keine Zeit bei einfachen Fragen, hetzen Sie aber auch komplexe Entscheidungen nicht durch.
+GPT-5.2 ermöglicht es Ihnen, den Rechenaufwand über Ihre Prompts zu steuern. Niedriger Aufwand bedeutet schnelle Antworten mit minimaler Exploration. Hoher Aufwand bedeutet, dass das Modell sich Zeit nimmt, tief zu denken. Sie lernen, den Aufwand an die Komplexität der Aufgabe anzupassen – verschwenden Sie keine Zeit mit einfachen Fragen, aber überstürzen Sie auch keine komplexen Entscheidungen.
**Struktur steuert Verhalten**
-Fallen Ihnen die XML-Tags in den Prompts auf? Sie sind keine Dekoration. Modelle folgen strukturierten Anweisungen zuverlässiger als freien Text. Wenn Sie mehrschrittige Prozesse oder komplexe Logik benötigen, hilft Struktur dem Modell, zu verfolgen, wo es ist und was als Nächstes kommt. Das folgende Diagramm zerlegt einen gut strukturierten Prompt und zeigt, wie Tags wie ``, ``, ``, `` und `` Ihre Anweisungen in eindeutige Abschnitte gliedern.
+Fallen Ihnen die XML-Tags in den Prompts auf? Sie sind nicht dekorativ. Modelle folgen strukturierten Anweisungen zuverlässiger als Freitext. Wenn Sie mehrstufige Prozesse oder komplexe Logik benötigen, hilft Struktur dem Modell, den aktuellen Schritt und das Kommende zu verfolgen. Das folgende Diagramm zerlegt einen gut strukturierten Prompt und zeigt, wie Tags wie ``, ``, ``, `` und `` Ihre Anweisungen in klare Abschnitte gliedern.
-
+
-*Aufbau eines gut strukturierten Prompts mit klaren Abschnitten und XML-artiger Organisation*
+*Anatomie eines gut strukturierten Prompts mit klaren Abschnitten und XML-ähnlicher Organisation*
**Qualität durch Selbstevaluation**
-Die selbstreflektierenden Muster arbeiten, indem Qualitätskriterien explizit gemacht werden. Anstatt zu hoffen, dass das Modell „richtig macht“, sagen Sie ihm genau, was „richtig“ bedeutet: korrekte Logik, Fehlerbehandlung, Leistung, Sicherheit. Das Modell kann dann seine eigene Ausgabe bewerten und verbessern. So wird das Code-Generieren vom Glücksspiel zu einem Prozess.
+Die selbstreflektierenden Muster arbeiten, indem Qualitätskriterien explizit gemacht werden. Statt zu hoffen, dass das Modell „es richtig macht“, sagen Sie ihm genau, was „richtig“ bedeutet: korrekte Logik, Fehlerbehandlung, Performance, Sicherheit. Das Modell kann dann seine eigene Ausgabe bewerten und verbessern. Das verwandelt Codeerstellung von einem Glücksspiel in einen Prozess.
**Kontext ist begrenzt**
-Mehrstufige Gespräche arbeiten, indem sie den Nachrichtenverlauf mit jeder Anfrage einbinden. Aber es gibt ein Limit – jedes Modell hat eine maximale Token-Anzahl. Wenn Gespräche wachsen, brauchen Sie Strategien, um relevanten Kontext zu bewahren, ohne diese Grenze zu überschreiten. Dieses Modul zeigt Ihnen, wie Gedächtnis funktioniert; später lernen Sie, wann Sie zusammenfassen, vergessen und abrufen sollten.
+Mehrstufige Gespräche funktionieren, indem Sie den Nachrichtenverlauf jeder Anfrage mitsenden. Aber es gibt eine Grenze – jedes Modell hat eine maximale Tokenanzahl. Wenn Gespräche wachsen, brauchen Sie Strategien, um relevanten Kontext zu behalten, ohne die Grenze zu überschreiten. Dieses Modul zeigt, wie Gedächtnis funktioniert; später lernen Sie, wann Sie zusammenfassen, vergessen oder abrufen sollen.
## Nächste Schritte
@@ -598,11 +598,11 @@ Mehrstufige Gespräche arbeiten, indem sie den Nachrichtenverlauf mit jeder Anfr
---
-**Navigation:** [← Zurück: Modul 01 - Einführung](../01-introduction/README.md) | [Zurück zum Hauptmenü](../README.md) | [Weiter: Modul 03 - RAG →](../03-rag/README.md)
+**Navigation:** [← Vorheriges: Modul 01 – Einführung](../01-introduction/README.md) | [Zurück zum Hauptbereich](../README.md) | [Nächstes: Modul 03 – RAG →](../03-rag/README.md)
---
-**Haftungsausschluss**:
-Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, kann es bei automatisierten Übersetzungen zu Fehlern oder Ungenauigkeiten kommen. Das ursprüngliche Dokument in seiner Originalsprache gilt als maßgebliche Quelle. Für wichtige Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Nutzung dieser Übersetzung entstehen.
+**Haftungsausschluss**:
+Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
\ No newline at end of file
diff --git a/translations/de/03-rag/README.md b/translations/de/03-rag/README.md
index 2b624be6c..001e1bfd4 100644
--- a/translations/de/03-rag/README.md
+++ b/translations/de/03-rag/README.md
@@ -2,31 +2,31 @@
## Inhaltsverzeichnis
-- [Video Walkthrough](../../../03-rag)
-- [Was Sie lernen werden](../../../03-rag)
-- [Voraussetzungen](../../../03-rag)
-- [Verständnis von RAG](../../../03-rag)
- - [Welchen RAG-Ansatz verwendet dieses Tutorial?](../../../03-rag)
-- [Wie es funktioniert](../../../03-rag)
- - [Dokumentenverarbeitung](../../../03-rag)
- - [Erstellung von Embeddings](../../../03-rag)
- - [Semantische Suche](../../../03-rag)
- - [Antwortgenerierung](../../../03-rag)
-- [Anwendung ausführen](../../../03-rag)
-- [Anwendung verwenden](../../../03-rag)
- - [Dokument hochladen](../../../03-rag)
- - [Fragen stellen](../../../03-rag)
- - [Quellen überprüfen](../../../03-rag)
- - [Experimente mit Fragen](../../../03-rag)
-- [Wichtige Konzepte](../../../03-rag)
- - [Chunking-Strategie](../../../03-rag)
- - [Ähnlichkeitsscores](../../../03-rag)
- - [In-Memory-Speicherung](../../../03-rag)
- - [Verwaltung des Kontextfensters](../../../03-rag)
-- [Wann RAG wichtig ist](../../../03-rag)
-- [Nächste Schritte](../../../03-rag)
-
-## Video Walkthrough
+- [Video-Durchlauf](#video-durchlauf)
+- [Was Sie lernen werden](#was-sie-lernen-werden)
+- [Voraussetzungen](#voraussetzungen)
+- [Verstehen von RAG](#verstehen-von-rag)
+ - [Welchen RAG-Ansatz verwendet dieses Tutorial?](#welchen-rag-ansatz-verwendet-dieses-tutorial)
+- [Wie es funktioniert](#wie-es-funktioniert)
+ - [Dokumentenverarbeitung](#dokumentenverarbeitung)
+ - [Erstellen von Embeddings](#erstellen-von-embeddings)
+ - [Semantische Suche](#semantische-suche)
+ - [Antwortgenerierung](#antwortgenerierung)
+- [Anwendung ausführen](#anwendung-starten)
+- [Verwendung der Anwendung](#nutzung-der-anwendung)
+ - [Dokument hochladen](#dokument-hochladen)
+ - [Fragen stellen](#fragen-stellen)
+ - [Quellen nachprüfen](#quellverweise-prüfen)
+ - [Mit Fragen experimentieren](#mit-fragen-experimentieren)
+- [Schlüsselkonzepte](#schlüsselkonzepte)
+ - [Chunking-Strategie](#chunking-strategie)
+ - [Ähnlichkeitswerte](#ähnlichkeitsscores)
+ - [In-Memory-Speicherung](#speicher-im-arbeitsspeicher)
+ - [Management des Kontextfensters](#verwaltung-des-kontextfensters)
+- [Wann RAG wichtig ist](#wann-rag-relevant-ist)
+- [Nächste Schritte](#nächste-schritte)
+
+## Video-Durchlauf
Sehen Sie sich diese Live-Session an, die erklärt, wie Sie mit diesem Modul starten:
@@ -34,111 +34,110 @@ Sehen Sie sich diese Live-Session an, die erklärt, wie Sie mit diesem Modul sta
## Was Sie lernen werden
-In den vorherigen Modulen haben Sie gelernt, wie Sie Gespräche mit KI führen und Ihre Prompts effektiv strukturieren. Aber es gibt eine grundlegende Einschränkung: Sprachmodelle kennen nur das, was sie während des Trainings gelernt haben. Sie können keine Fragen zu den Unternehmensrichtlinien, Ihrer Projektdokumentation oder Informationen beantworten, zu denen sie nicht trainiert wurden.
+In den vorherigen Modulen haben Sie gelernt, wie man Gespräche mit KI führt und Prompts effektiv strukturiert. Aber es gibt eine grundlegende Einschränkung: Sprachmodelle kennen nur das, was sie während des Trainings gelernt haben. Sie können keine Fragen zu den Richtlinien Ihres Unternehmens, Ihrer Projektdokumentation oder zu Informationen beantworten, die sie nicht trainiert wurden.
-RAG (Retrieval-Augmented Generation) löst dieses Problem. Anstatt dem Modell Ihre Informationen beizubringen (was teuer und unpraktisch ist), geben Sie ihm die Fähigkeit, in Ihren Dokumenten zu suchen. Wenn jemand eine Frage stellt, findet das System relevante Informationen und fügt diese in den Prompt ein. Das Modell antwortet dann auf Grundlage dieses abgerufenen Kontexts.
+RAG (Retrieval-Augmented Generation) löst dieses Problem. Anstatt zu versuchen, dem Modell Ihre Informationen beizubringen (was teuer und unpraktisch ist), geben Sie ihm die Fähigkeit, Ihre Dokumente zu durchsuchen. Wenn jemand eine Frage stellt, findet das System relevante Informationen und fügt sie dem Prompt hinzu. Das Modell antwortet dann basierend auf diesem abgerufenen Kontext.
-Stellen Sie sich RAG vor wie eine Referenzbibliothek für das Modell. Wenn Sie eine Frage stellen, erledigt das System:
+Denken Sie bei RAG daran, dem Modell eine Referenzbibliothek zu geben. Wenn Sie eine Frage stellen, tut das System Folgendes:
1. **Benutzeranfrage** – Sie stellen eine Frage
2. **Embedding** – Wandelt Ihre Frage in einen Vektor um
-3. **Vektorsuche** – Findet ähnliche Dokumentenabschnitte
-4. **Kontextaufbau** – Fügt relevante Abschnitte zum Prompt hinzu
-5. **Antwort** – Das LLM generiert eine Antwort basierend auf dem Kontext
+3. **Vektorsuche** – Findet ähnliche Dokumentabschnitte
+4. **Kontextzusammenstellung** – Fügt relevante Abschnitte dem Prompt hinzu
+5. **Antwort** – LLM generiert basierend auf dem Kontext eine Antwort
-Dies verankert die Antworten des Modells in Ihren tatsächlichen Daten, anstatt sich auf sein Trainingswissen zu verlassen oder Antworten zu erfinden.
+Das verankert die Antworten des Modells in Ihren tatsächlichen Daten, statt sich auf Trainingswissen zu verlassen oder Antworten zu erfinden.
## Voraussetzungen
-- Abgeschlossenes [Modul 00 - Quick Start](../00-quick-start/README.md) (für das Easy RAG-Beispiel, das später in diesem Modul genannt wird)
-- Abgeschlossenes [Modul 01 - Einführung](../01-introduction/README.md) (Azure OpenAI Ressourcen bereitgestellt, einschließlich des `text-embedding-3-small` Embedding-Modells)
-- `.env`-Datei im Stammverzeichnis mit Azure-Anmeldeinformationen (erstellt durch `azd up` in Modul 01)
+- Abgeschlossenes [Modul 01 – Einführung](../01-introduction/README.md) (Azure OpenAI-Ressourcen bereitgestellt, einschließlich des Embedding-Modells `text-embedding-3-small`)
+- `.env`-Datei im Stammverzeichnis mit Azure-Zugangsdaten (erstellt durch `azd up` in Modul 01)
-> **Hinweis:** Wenn Sie Modul 01 nicht abgeschlossen haben, folgen Sie zunächst dort den Bereitstellungsanweisungen. Der Befehl `azd up` stellt sowohl das GPT-Chat-Modell als auch das Embedding-Modell bereit, das in diesem Modul verwendet wird.
+> **Hinweis:** Wenn Sie Modul 01 nicht abgeschlossen haben, folgen Sie zunächst den dortigen Bereitstellungsanweisungen. Der Befehl `azd up` stellt sowohl das GPT-Chatmodell als auch das Embedding-Modell bereit, das in diesem Modul verwendet wird.
-## Verständnis von RAG
+## Verstehen von RAG
-Die folgende Grafik illustriert das Kernkonzept: Anstatt sich nur auf die Trainingsdaten des Modells zu verlassen, erhält RAG eine Referenzbibliothek Ihrer Dokumente, die vor der Antwortgenerierung konsultiert wird.
+Das untenstehende Diagramm veranschaulicht das Kernkonzept: Anstatt sich nur auf das Trainingsmaterial des Modells zu verlassen, gibt RAG ihm eine Referenzbibliothek Ihrer Dokumente, die es vor jeder Antwort abruft.
-*Dieses Diagramm zeigt den Unterschied zwischen einem Standard-LLM (das auf Trainingsdaten schätzt) und einem RAG-verbesserten LLM (das zuerst Ihre Dokumente konsultiert).*
+*Dieses Diagramm zeigt den Unterschied zwischen einem Standard-LLM (das aus Trainingsdaten rät) und einem RAG-verbesserten LLM (das zunächst Ihre Dokumente konsultiert).*
-So verbinden sich die Teile von Anfang bis Ende. Die Frage eines Benutzers durchläuft vier Phasen – Embedding, Vektorsuche, Kontextaufbau und Antwortgenerierung – die jeweils auf der vorherigen aufbauen:
+So sind die Bausteine Ende-zu-Ende verbunden. Die Benutzerfrage durchläuft vier Stufen: Embedding, Vektorsuche, Kontextzusammenstellung und Antwortgenerierung – wobei jede auf der vorherigen aufbaut:
-*Dieses Diagramm zeigt die End-to-End RAG-Pipeline – eine Benutzeranfrage durchläuft Embedding, Vektorsuche, Kontextaufbau und Antwortgenerierung.*
+*Dieses Diagramm zeigt die Ende-zu-Ende RAG-Pipeline — eine Benutzeranfrage durchläuft Embedding, Vektorsuche, Kontextzusammenstellung und Antwortgenerierung.*
-Der Rest dieses Moduls führt Sie durch jede Phase im Detail, mit Code, den Sie ausführen und anpassen können.
+Der Rest dieses Moduls führt Sie detailliert durch jede Stufe mit ausführbarem und modifizierbarem Code.
### Welchen RAG-Ansatz verwendet dieses Tutorial?
-LangChain4j bietet drei Möglichkeiten, RAG zu implementieren, jeweils mit unterschiedlicher Abstraktionsebene. Das Diagramm unten vergleicht sie nebeneinander:
+LangChain4j bietet drei Wege, RAG umzusetzen, jeweils mit unterschiedlicher Abstraktionsebene. Das folgende Diagramm vergleicht sie nebeneinander:
-*Dieses Diagramm vergleicht die drei LangChain4j RAG-Ansätze – Easy, Native und Advanced – zeigt deren Hauptkomponenten und wann man sie einsetzt.*
+*Dieses Diagramm vergleicht die drei LangChain4j RAG-Ansätze – Easy, Native und Advanced – zeigt deren Hauptkomponenten und wann man welchen nutzt.*
| Ansatz | Was er tut | Kompromiss |
|---|---|---|
-| **Easy RAG** | Verkabelt alles automatisch über `AiServices` und `ContentRetriever`. Sie annotieren ein Interface, hängen einen Retriever an, und LangChain4j kümmert sich hinter den Kulissen um Embedding, Suche und Prompt-Erstellung. | Minimaler Code, aber Sie sehen nicht, was in jedem Schritt passiert. |
-| **Native RAG** | Sie rufen das Embedding-Modell auf, durchsuchen den Speicher, bauen den Prompt zusammen und generieren die Antwort – Schritt für Schritt explizit. | Mehr Code, aber jede Phase ist sichtbar und änderbar. |
-| **Advanced RAG** | Verwendet das `RetrievalAugmentor` Framework mit einsteckbaren Query-Transformern, Routern, Neu-Rankern und Content-Injectoren für produktionsreife Pipelines. | Maximale Flexibilität, aber deutlich komplexer. |
+| **Easy RAG** | Verbindet alles automatisch über `AiServices` und `ContentRetriever`. Sie annotieren ein Interface, hängen einen Retriever an, und LangChain4j übernimmt Einbettung, Suche und Prompt-Erstellung im Hintergrund. | Minimale Codezeilen, aber Sie sehen nicht, was intern passiert. |
+| **Native RAG** | Sie rufen das Embedding-Modell, durchsuchen den Speicher, bauen den Prompt und generieren die Antwort explizit selbst – Schritt für Schritt. | Mehr Code, aber jede Stufe ist sichtbar und anpassbar. |
+| **Advanced RAG** | Nutzt das `RetrievalAugmentor`-Framework mit modularen Query-Transformern, Routern, Re-Rankern und Content-Injectoren für produktionsreife Pipelines. | Maximale Flexibilität, aber deutlich komplexer. |
-**Dieses Tutorial verwendet den Native-Ansatz.** Jeder Schritt der RAG-Pipeline – das Einbetten der Anfrage, das Durchsuchen des Vektorspeichers, das Zusammenstellen des Kontexts und das Generieren der Antwort – ist explizit in [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) beschrieben. Dies ist bewusst so: als Lernressource ist es wichtiger, dass Sie jede Phase sehen und verstehen, als dass der Code minimal gehalten wird. Sobald Sie sich mit dem Zusammenspiel der Teile sicher fühlen, können Sie für schnelle Prototypen zu Easy RAG wechseln oder für Produktivsysteme Advanced RAG nutzen.
+**Dieses Tutorial verwendet den Native-Ansatz.** Jeder Schritt der RAG-Pipeline – Einbettung der Anfrage, Durchsuchung des Vektorspeichers, Kontextzusammenstellung und Antwortgenerierung – wird explizit in [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) beschrieben. Das ist bewusst gewählt: Als Lernressource ist es wichtiger, jede Phase zu sehen und zu verstehen, als minimalen Code zu schreiben. Sobald Sie komfortabel sind mit den Abläufen, können Sie auf Easy RAG für schnelle Prototypen oder Advanced RAG für Produktivsysteme umsteigen.
-> **💡 Easy RAG schon gesehen?** Das [Quick Start-Modul](../00-quick-start/README.md) enthält ein Beispiel für Document Q&A ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)), das Easy RAG nutzt – LangChain4j übernimmt automatisch Embedding, Suche und Prompt-Erstellung. Dieses Modul geht einen Schritt weiter und öffnet diese Pipeline, sodass Sie jede Phase selbst sehen und steuern können.
+> **💡 Neugierig auf Easy RAG?** LangChain4j bietet auch einen *Easy RAG* Ansatz, bei dem `AiServices` und ein `ContentRetriever` Einbettung, Suche und Prompt-Erstellung automatisch übernehmen. Dieses Modul nimmt den expliziten Weg — es öffnet die Pipeline, damit Sie jede Stufe selbst sehen und steuern können.
-Das folgende Diagramm zeigt die Easy RAG-Pipeline aus dem Quick Start-Beispiel. Beachten Sie, wie `AiServices` und `EmbeddingStoreContentRetriever` alle Komplexität verbergen – Sie laden ein Dokument, hängen einen Retriever an und erhalten Antworten. Der Native-Ansatz in diesem Modul öffnet jeden dieser versteckten Schritte:
+Das folgende Diagramm zeigt die Easy RAG-Pipeline. Beachten Sie, wie `AiServices` und `EmbeddingStoreContentRetriever` die ganze Komplexität verstecken — Sie laden ein Dokument, hängen einen Retriever an und erhalten Antworten. Der Native-Ansatz dieses Moduls öffnet jede dieser verborgenen Stufen:
-*Dieses Diagramm zeigt die Easy RAG-Pipeline aus `SimpleReaderDemo.java`. Vergleichen Sie dies mit dem Native-Ansatz in diesem Modul: Easy RAG verbirgt Embedding, Retrieval und Prompt-Erstellung hinter `AiServices` und `ContentRetriever` – Sie laden ein Dokument, hängen einen Retriever an und erhalten Antworten. Der Native-Ansatz in diesem Modul öffnet diese Pipeline, sodass Sie jede Phase (einbetten, suchen, Kontext zusammenstellen, generieren) selbst aufrufen und volle Transparenz und Kontrolle haben.*
+*Dieses Diagramm zeigt die Easy RAG-Pipeline. Vergleichen Sie dies mit dem Native-Ansatz aus diesem Modul: Easy RAG versteckt Einbettung, Abruf und Prompt-Erstellung hinter `AiServices` und `ContentRetriever` — Sie laden ein Dokument, hängen einen Retriever an und erhalten Antworten. Der Native-Ansatz hier öffnet diese Pipeline, so dass Sie jede Stufe (Einbetten, Suchen, Kontext zusammenstellen, generieren) selbst aufrufen und so volle Kontrolle und Sichtbarkeit erhalten.*
## Wie es funktioniert
-Die RAG-Pipeline in diesem Modul gliedert sich in vier Phasen, die nacheinander ablaufen, sobald ein Benutzer eine Frage stellt. Zuerst wird ein hochgeladenes Dokument **geparst und in Chunks zerlegt** – handhabbare Stücke. Diese Chunks werden dann in **Vektor-Embeddings** umgewandelt und gespeichert, damit sie mathematisch verglichen werden können. Wenn eine Anfrage eintrifft, führt das System eine **semantische Suche** durch, um die relevantesten Chunks zu finden, und übergibt diese schließlich als Kontext an das LLM für die **Antwortgenerierung**. Die folgenden Abschnitte erläutern jede Phase mit tatsächlichem Code und Diagrammen. Sehen wir uns den ersten Schritt genauer an.
+Die RAG-Pipeline in diesem Modul zerfällt in vier Stufen, die bei jeder Benutzerfrage nacheinander ausgeführt werden. Zuerst wird ein hochgeladenes Dokument **geparst und in Chunks zerlegt**. Diese Chunks werden dann in **Vektor-Embeddings** umgewandelt und gespeichert, damit sie mathematisch verglichen werden können. Sobald eine Anfrage eintrifft, führt das System eine **semantische Suche** durch, um die relevantesten Chunks zu finden, und übergibt diese schließlich als Kontext an das LLM zur **Antwortgenerierung**. Die folgenden Abschnitte erläutern jede Stufe mit echtem Code und Diagrammen. Fangen wir mit dem ersten Schritt an.
### Dokumentenverarbeitung
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-Wenn Sie ein Dokument hochladen, wird es geparst (PDF oder reiner Text), mit Metadaten wie Dateiname versehen und anschließend in Chunks zerlegt – kleinere Abschnitte, die gut in das Kontextfenster des Modells passen. Diese Chunks überlappen leicht, damit an den Grenzen kein Kontext verloren geht.
+Wenn Sie ein Dokument hochladen, parst das System es (PDF oder Klartext), hängt Metadaten wie den Dateinamen an und zerlegt es danach in Chunks — kleinere Stücke, die bequem in das Kontextfenster des Modells passen. Diese Chunks überlappen leicht, damit kein Kontext an den Grenzen verloren geht.
```java
// Analysiere die hochgeladene Datei und verpacke sie in ein LangChain4j-Dokument
Document document = Document.from(content, metadata);
-// Teile es in 300-Token-Stücke mit 30-Token-Überlappung auf
+// Teile in 300-Token-Segmente mit 30-Token-Überlappung auf
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
-Das folgende Diagramm zeigt, wie das visuell funktioniert. Beachten Sie, wie jeder Chunk einige Tokens mit den Nachbarn teilt – die 30-Token-Überlappung stellt sicher, dass kein wichtiger Kontext durch die Lappen geht:
+Das folgende Diagramm zeigt diesen Vorgang visuell. Beachten Sie, dass jeder Chunk einige Tokens mit seinen Nachbarn teilt — die 30-Token-Überlappung stellt sicher, dass kein wichtiger Kontext verloren geht:
-
+
-*Dieses Diagramm zeigt ein Dokument, aufgeteilt in 300-Token-Chunks mit 30-Token-Überlappung, um Kontext an den Chunk-Grenzen zu bewahren.*
+*Dieses Diagramm zeigt ein Dokument, das in 300-Token-Chunks mit 30-Token-Überlappung zerlegt wird, um Kontext an Chunk-Grenzen zu erhalten.*
> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat:** Öffnen Sie [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) und fragen Sie:
-> - „Wie zerlegt LangChain4j Dokumente in Chunks und warum ist Überlappung wichtig?“
-> - „Was ist die optimale Chunk-Größe für verschiedene Dokumenttypen und warum?“
-> - „Wie gehe ich mit mehrsprachigen Dokumenten oder spezieller Formatierung um?“
+> - "Wie zerlegt LangChain4j Dokumente in Chunks und warum ist Überlappung wichtig?"
+> - "Was ist die optimale Chunk-Größe für verschiedene Dokumenttypen und warum?"
+> - "Wie gehe ich mit Dokumenten in mehreren Sprachen oder mit spezieller Formatierung um?"
-### Erstellung von Embeddings
+### Erstellen von Embeddings
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-Jeder Chunk wird in eine numerische Darstellung umgewandelt, die als Embedding bezeichnet wird – im Grunde ein Bedeutungs-zu-Zahlen-Wandler. Das Embedding-Modell ist nicht „intelligent“ wie ein Chat-Modell; es kann keine Anweisungen befolgen, nicht vernunftbasiert antworten oder Fragen beantworten. Es ordnet Text lediglich in einem mathematischen Raum an, in dem ähnliche Bedeutungen nah beieinander liegen – „Auto“ nahe „Automobil“, „Rückgaberichtlinie“ nahe „Geld zurück“. Man kann sich ein Chat-Modell als eine Person vorstellen, mit der man sprechen kann; ein Embedding-Modell ist ein hochleistungsfähiges Ablagesystem.
+Jeder Chunk wird in eine numerische Repräsentation umgewandelt, die als Embedding bezeichnet wird — im Grunde ein Bedeutungs-in-Zahlen-Konverter. Das Embedding-Modell ist nicht "intelligent" wie ein Chatmodell; es kann keine Anweisungen folgen, nicht vernünftig argumentieren und keine Fragen beantworten. Was es kann, ist Text in einen mathematischen Raum zu mappen, in dem ähnliche Bedeutungen nahe beieinander liegen — „Auto“ nahe „Kraftfahrzeug“, „Rückerstattungsrichtlinie“ nahe „Geld zurück“. Man kann sich ein Chatmodell als eine Person vorstellen, mit der man sprechen kann; ein Embedding-Modell ist ein ultraschlaues Ablagesystem.
-Das folgende Diagramm visualisiert dieses Konzept – Text geht rein, numerische Vektoren kommen raus, und ähnliche Bedeutungen erzeugen benachbarte Vektoren:
+Das folgende Diagramm visualisiert dieses Konzept — Text geht rein, numerische Vektoren kommen raus, und ähnliche Bedeutungen erzeugen benachbarte Vektoren:
-
+
-*Dieses Diagramm zeigt, wie ein Embedding-Modell Text in numerische Vektoren umwandelt und ähnliche Bedeutungen – wie „Auto“ und „Automobil“ – im Vektorraum nahe beieinander platziert.*
+*Dieses Diagramm zeigt, wie ein Embedding-Modell Text in numerische Vektoren umwandelt, die ähnliche Bedeutungen – wie „Auto“ und „Kraftfahrzeug“ – im Vektorraum nahe beieinander platzieren.*
```java
@Bean
@@ -154,29 +153,29 @@ EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-Das Klassendiagramm unten zeigt die zwei getrennten Abläufe in einer RAG-Pipeline und die LangChain4j-Klassen, die sie implementieren. Der **Ingestion-Flow** (läuft einmal beim Upload) zerlegt das Dokument, bettet die Chunks ein und speichert sie via `.addAll()`. Der **Query-Flow** (läuft bei jeder Benutzeranfrage) bettet die Frage ein, durchsucht den Speicher via `.search()` und übergibt den passenden Kontext an das Chat-Modell. Beide Flows treffen sich an der gemeinsamen Schnittstelle `EmbeddingStore`:
+Das Klassendiagramm unten zeigt die zwei getrennten Abläufe in einer RAG-Pipeline und die LangChain4j-Klassen, die sie implementieren. Der **Ingestions-Flow** (läuft einmal beim Hochladen) zerlegt das Dokument, erzeugt Embeddings der Chunks und speichert sie über `.addAll()`. Der **Query-Flow** (läuft bei jeder Benutzeranfrage) erzeugt ein Embedding der Frage, durchsucht den Speicher via `.search()` und übergibt den passenden Kontext ans Chatmodell. Beide Flows treffen auf das gemeinsame Interface `EmbeddingStore`:
-
+
-*Dieses Diagramm zeigt die zwei Abläufe in einer RAG-Pipeline – Ingestion und Query – und wie sie über einen gemeinsamen EmbeddingStore verbunden sind.*
+*Dieses Diagramm zeigt die zwei Abläufe in einer RAG-Pipeline – Ingestion und Query – und wie sie über ein gemeinsames EmbeddingStore verbunden sind.*
-Sobald Embeddings gespeichert sind, clustern sich ähnliche Inhalte automatisch im Vektorraum. Die folgende Visualisierung zeigt, wie Dokumente zu verwandten Themen als nahe beieinander liegende Punkte erscheinen, was die semantische Suche ermöglicht:
+Sobald die Embeddings gespeichert sind, clustert ähnlicher Inhalt natürlich im Vektorraum. Die Visualisierung unten zeigt, wie Dokumente zu verwandten Themen als nahe Punkte enden, was semantische Suche möglich macht:
-
+
-*Diese Visualisierung zeigt, wie verwandte Dokumente im 3D-Vektorraum clustern, mit Themen wie technische Dokumentation, Geschäftsregeln und FAQs, die jeweils eigene Gruppen bilden.*
+*Diese Visualisierung zeigt, wie verwandte Dokumente im 3D-Vektorraum clustern, wobei Themen wie technische Dokumente, Geschäftsregeln und FAQs eigene Gruppen bilden.*
-Wenn ein Benutzer eine Suche startet, folgen vier Schritte: Dokumente einmal einbetten, die Anfrage bei jeder Suche einbetten, den Anfragevektor mit allen gespeicherten Vektoren per Kosinusähnlichkeit vergleichen und die top-K höchstbewerteten Chunks zurückgeben. Das folgende Diagramm zeigt jeden Schritt und die beteiligten LangChain4j-Klassen:
+Wenn ein Nutzer sucht, führt das System vier Schritte aus: Dokumente einmal einbetten, die Anfrage bei jeder Suche einbetten, den Anfragevektor mit allen gespeicherten Vektoren anhand des Kosinus-Ähnlichkeitsmaßes vergleichen und die besten K-Chunk-Ergebnisse zurückgeben. Das folgende Diagramm erläutert jeden Schritt sowie die beteiligten LangChain4j-Klassen:
-
+
-*Dieses Diagramm zeigt den vierstufigen Embedding-Suchprozess: Dokumente einbetten, Anfrage einbetten, Vektoren per Kosinusähnlichkeit vergleichen und die Top-K-Ergebnisse zurückgeben.*
+*Dieses Diagramm zeigt den vierstufigen Suchprozess mit Embeddings: Dokumente einbetten, Anfrage einbetten, Vektoren mit Kosinus-Ähnlichkeit vergleichen und die Top-K-Ergebnisse zurückgeben.*
### Semantische Suche
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Wenn Sie eine Frage stellen, wird auch Ihre Frage zu einem Embedding. Das System vergleicht das Embedding Ihrer Frage mit allen Embeddings der Dokumenten-Chunks. Es findet die Chunks mit den ähnlichsten Bedeutungen – nicht nur passende Schlüsselwörter, sondern tatsächliche semantische Ähnlichkeit.
+Wenn Sie eine Frage stellen, wird auch Ihre Frage eingebettet. Das System vergleicht das Embedding Ihrer Frage mit allen Embeddings der Dokumentenchunks. Es findet die Chunks mit der semantisch ähnlichsten Bedeutung – nicht nur mit passenden Schlüsselwörtern, sondern tatsächlicher semantischer Übereinstimmung.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -196,27 +195,27 @@ for (EmbeddingMatch match : matches) {
}
```
-Das folgende Diagramm stellt semantische Suche einer traditionellen Keyword-Suche gegenüber. Eine Keyword-Suche nach „Fahrzeug“ übersieht einen Chunk über „Autos und Lastwagen“, aber die semantische Suche versteht, dass sie dasselbe meinen, und gibt ihn als hoch bewertetes Ergebnis zurück:
+Das folgende Diagramm stellt semantische Suche der traditionellen Schlüsselwortsuche gegenüber. Eine Schlüsselwortsuche nach „Fahrzeug“ verpasst einen Chunk über „Autos und Lastwagen“, während die semantische Suche versteht, dass das dasselbe bedeutet, und ihn als hoch-relevantes Ergebnis zurückgibt:
-*Dieses Diagramm vergleicht die schlüsselwortbasierte Suche mit der semantischen Suche und zeigt, wie die semantische Suche konzeptionell verwandte Inhalte abruft, auch wenn die exakten Keywords unterschiedlich sind.*
-Unter der Haube wird Ähnlichkeit mit Kosinusähnlichkeit gemessen – im Wesentlichen wird gefragt: "Zeigen diese beiden Pfeile in dieselbe Richtung?" Zwei Abschnitte können völlig unterschiedliche Wörter verwenden, aber wenn sie dasselbe bedeuten, zeigen ihre Vektoren in dieselbe Richtung und erreichen einen Wert nahe 1,0:
+*Dieses Diagramm vergleicht schlüsselwortbasierte Suche mit semantischer Suche und zeigt, wie semantische Suche konzeptuell verwandte Inhalte abruft, auch wenn exakte Schlüsselwörter unterschiedlich sind.*
-
+Im Hintergrund wird Ähnlichkeit mittels Kosinus-Ähnlichkeit gemessen – im Grunde die Frage „zeigen diese zwei Pfeile in dieselbe Richtung?“ Zwei Chunks können völlig unterschiedliche Wörter verwenden, aber wenn sie dasselbe bedeuten, zeigen ihre Vektoren in dieselbe Richtung und erreichen einen Wert nahe 1.0:
-*Dieses Diagramm veranschaulicht die Kosinusähnlichkeit als den Winkel zwischen Einbettungsvektoren – besser ausgerichtete Vektoren erreichen Werte näher an 1,0, was auf eine höhere semantische Ähnlichkeit hinweist.*
+
+*Dieses Diagramm veranschaulicht die Kosinusähnlichkeit als den Winkel zwischen Einbettungsvektoren — stärker ausgerichtete Vektoren erzielen Werte näher bei 1,0, was auf eine höhere semantische Ähnlichkeit hinweist.*
-> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat:** Öffnen Sie [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) und fragen Sie:
-> - "Wie funktioniert die Ähnlichkeitssuche mit Einbettungen und was bestimmt den Wert?"
-> - "Welchen Ähnlichkeitsschwellenwert sollte ich verwenden und wie wirkt sich das auf die Ergebnisse aus?"
-> - "Wie gehe ich mit Fällen um, in denen keine relevanten Dokumente gefunden werden?"
+> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat aus:** Öffnen Sie [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) und fragen Sie:
+> - „Wie funktioniert die Ähnlichkeitssuche mit Einbettungen und was bestimmt den Score?“
+> - „Welchen Ähnlichkeitsschwellenwert sollte ich verwenden und wie beeinflusst er die Ergebnisse?“
+> - „Wie gehe ich mit Fällen um, in denen keine relevanten Dokumente gefunden werden?“
### Antwortgenerierung
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Die relevantesten Abschnitte werden zu einem strukturierten Prompt zusammengefügt, der explizite Anweisungen, den abgerufenen Kontext und die Frage des Benutzers enthält. Das Modell liest diese spezifischen Abschnitte und antwortet basierend auf diesen Informationen – es kann nur das verwenden, was ihm gerade vorliegt, was Halluzinationen verhindert.
+Die relevantesten Chunks werden zu einem strukturierten Prompt zusammengefügt, der explizite Anweisungen, den abgerufenen Kontext und die Frage des Nutzers enthält. Das Modell liest diese spezifischen Chunks und antwortet basierend auf diesen Informationen — es kann nur das verwenden, was ihm vorliegt, was Halluzinationen verhindert.
```java
String context = matches.stream()
@@ -237,17 +236,17 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-Das folgende Diagramm zeigt diese Zusammenstellung in Aktion – die höchstbewerteten Abschnitte aus dem Suchschritt werden in die Prompt-Vorlage eingefügt, und das `OpenAiOfficialChatModel` erzeugt eine fundierte Antwort:
+Das folgende Diagramm zeigt diese Zusammenstellung in Aktion — die bestbewerteten Chunks aus dem Suchschritt werden in die Prompt-Vorlage eingespeist, und das `OpenAiOfficialChatModel` generiert eine fundierte Antwort:
-
+
-*Dieses Diagramm zeigt, wie die höchstbewerteten Abschnitte in einen strukturierten Prompt zusammengefügt werden, wodurch das Modell eine fundierte Antwort aus Ihren Daten generieren kann.*
+*Dieses Diagramm zeigt, wie die bestbewerteten Chunks zu einem strukturierten Prompt zusammengesetzt werden, damit das Modell eine fundierte Antwort aus Ihren Daten generieren kann.*
## Anwendung starten
-**Bereitstellung prüfen:**
+**Bereitstellung überprüfen:**
-Stellen Sie sicher, dass die `.env`-Datei mit Azure-Anmeldedaten im Stammverzeichnis vorhanden ist (wurde im Modul 01 erstellt). Führen Sie dies aus dem Modulverzeichnis (`03-rag/`) aus:
+Stellen Sie sicher, dass die `.env`-Datei im Stammverzeichnis mit Azure-Anmeldeinformationen vorhanden ist (wurde im Modul 01 erstellt). Führen Sie diesen Befehl im Modulverzeichnis (`03-rag/`) aus:
**Bash:**
```bash
@@ -261,19 +260,19 @@ Get-Content ..\.env # Sollte AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT anzeige
**Starten Sie die Anwendung:**
-> **Hinweis:** Wenn Sie alle Anwendungen bereits mit `./start-all.sh` aus dem Stammverzeichnis gestartet haben (wie in Modul 01 beschrieben), läuft dieses Modul bereits auf Port 8081. Sie können die Startbefehle unten überspringen und direkt zu http://localhost:8081 gehen.
+> **Hinweis:** Wenn Sie bereits alle Anwendungen mit `./start-all.sh` vom Stammverzeichnis aus gestartet haben (wie im Modul 01 beschrieben), läuft dieses Modul bereits auf Port 8081. Sie können die Startbefehle unten überspringen und direkt http://localhost:8081 aufrufen.
**Option 1: Verwendung des Spring Boot Dashboards (Empfohlen für VS Code Benutzer)**
-Der Dev-Container enthält die Erweiterung Spring Boot Dashboard, die eine visuelle Oberfläche zur Verwaltung aller Spring Boot Anwendungen bietet. Sie finden sie in der Aktivitätsleiste auf der linken Seite von VS Code (Achten Sie auf das Spring Boot Symbol).
+Der Dev-Container enthält die Spring Boot Dashboard-Erweiterung, die eine visuelle Oberfläche zur Verwaltung aller Spring Boot-Anwendungen bietet. Sie finden sie in der Aktivitätsleiste links in VS Code (suchen Sie das Spring Boot-Symbol).
-Im Spring Boot Dashboard können Sie:
-- Alle verfügbaren Spring Boot Anwendungen im Workspace sehen
-- Anwendungen mit einem Klick starten/stoppen
-- Echtzeit-Logs der Anwendungen einsehen
-- Den Anwendungsstatus überwachen
+Über das Spring Boot Dashboard können Sie:
+- Alle verfügbaren Spring Boot-Anwendungen im Arbeitsbereich sehen
+- Anwendungen mit einem einzigen Klick starten/stoppen
+- Anwendungsprotokolle in Echtzeit anzeigen
+- Anwendungsstatus überwachen
-Klicken Sie einfach auf den Play-Button neben „rag“, um dieses Modul zu starten, oder starten Sie alle Module auf einmal.
+Klicken Sie einfach auf die Wiedergabetaste neben „rag“, um dieses Modul zu starten, oder starten Sie alle Module auf einmal.
@@ -309,16 +308,16 @@ cd 03-rag
.\start.ps1
```
-Beide Skripte laden automatisch die Umgebungsvariablen aus der `.env`-Datei im Stammverzeichnis und erzeugen die JARs, falls sie noch nicht existieren.
+Beide Skripte laden automatisch Umgebungsvariablen aus der `.env`-Datei im Stammverzeichnis und bauen die JARs, falls diese noch nicht existieren.
-> **Hinweis:** Wenn Sie alle Module lieber manuell bauen möchten, bevor Sie starten:
+> **Hinweis:** Wenn Sie alle Module lieber manuell vor dem Start bauen möchten:
>
> **Bash:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-
+>
> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
@@ -343,9 +342,9 @@ cd .. && ./stop-all.sh # Alle Module
cd ..; .\stop-all.ps1 # Alle Module
```
-## Anwendung benutzen
+## Nutzung der Anwendung
-Die Anwendung bietet eine Weboberfläche zum Hochladen von Dokumenten und zur Fragestellung.
+Die Anwendung bietet eine Web-Oberfläche zum Hochladen von Dokumenten und zum Stellen von Fragen.
@@ -353,69 +352,69 @@ Die Anwendung bietet eine Weboberfläche zum Hochladen von Dokumenten und zur Fr
### Dokument hochladen
-Beginnen Sie mit dem Hochladen eines Dokuments – am besten eignen sich TXT-Dateien für Tests. In diesem Verzeichnis liegt eine Datei `sample-document.txt`, die Informationen über LangChain4j-Funktionen, RAG-Implementierung und Best Practices enthält – perfekt zum Testen des Systems.
+Beginnen Sie mit dem Hochladen eines Dokuments – TXT-Dateien eignen sich zum Testen am besten. Eine `sample-document.txt` liegt in diesem Verzeichnis vor, die Informationen über LangChain4j-Funktionen, RAG-Implementierung und Best Practices enthält – perfekt zum Testen des Systems.
-Das System verarbeitet Ihr Dokument, teilt es in Abschnitte auf und erstellt Einbettungen für jeden Abschnitt. Dies geschieht automatisch beim Hochladen.
+Das System verarbeitet Ihr Dokument, zerlegt es in Chunks und erstellt für jeden Chunk Einbettungen. Dies geschieht automatisch beim Hochladen.
### Fragen stellen
-Stellen Sie jetzt spezifische Fragen zum Dokumentinhalt. Versuchen Sie etwas Faktisches, das klar im Dokument steht. Das System sucht nach relevanten Abschnitten, fügt diese in den Prompt ein und generiert eine Antwort.
+Stellen Sie nun spezifische Fragen zum Dokumentinhalt. Probieren Sie etwas Faktisches, das im Dokument klar angegeben ist. Das System sucht nach relevanten Chunks, bindet diese in den Prompt ein und generiert eine Antwort.
-### Quellen prüfen
+### Quellverweise prüfen
-Beachten Sie, dass jede Antwort Quellenverweise mit Ähnlichkeitspunkten enthält. Diese Werte (0 bis 1) zeigen, wie relevant jeder Abschnitt für Ihre Frage war. Höhere Werte bedeuten bessere Übereinstimmungen. So können Sie die Antwort mit dem Quellmaterial abgleichen.
+Jede Antwort enthält Quellverweise mit Ähnlichkeitsscores. Diese Scores (0 bis 1) zeigen an, wie relevant jeder Chunk für Ihre Frage war. Höhere Scores bedeuten bessere Übereinstimmungen. So können Sie die Antwort gegen die Originalquelle überprüfen.
-
+
-*Dieser Screenshot zeigt Abfrageergebnisse mit generierter Antwort, Quellenhinweisen und Relevanzwerten für jeden abgerufenen Abschnitt.*
+*Dieser Screenshot zeigt Abfrageergebnisse mit der generierten Antwort, Quellenhinweisen und Relevanzwerten für jeden abgerufenen Chunk.*
-### Experimentieren mit Fragen
+### Mit Fragen experimentieren
-Probieren Sie verschiedene Fragetypen aus:
-- Konkrete Fakten: „Was ist das Hauptthema?“
+Probieren Sie verschiedene Fragetypen:
+- Spezifische Fakten: „Was ist das Hauptthema?“
- Vergleiche: „Was ist der Unterschied zwischen X und Y?“
- Zusammenfassungen: „Fassen Sie die wichtigsten Punkte zu Z zusammen“
-Beobachten Sie, wie sich die Relevanzwerte ändern, je nachdem, wie gut Ihre Frage mit dem Dokumentinhalt übereinstimmt.
+Beobachten Sie, wie sich die Relevanzwerte ändern, je nachdem, wie gut Ihre Frage zum Dokumentinhalt passt.
-## Wichtige Konzepte
+## Schlüsselkonzepte
-### Abschnittsstrategie
+### Chunking-Strategie
-Dokumente werden in 300-Token-Abschnitte mit 30 Token Überlappung aufgeteilt. Dieses Gleichgewicht stellt sicher, dass jeder Abschnitt genügend Kontext enthält, um aussagekräftig zu sein, aber klein genug bleibt, um mehrere Abschnitte in einem Prompt unterzubringen.
+Dokumente werden in 300-Token-Chunks mit 30 Tokens Überlappung aufgeteilt. Dieses Gleichgewicht stellt sicher, dass jeder Chunk genug Kontext für Bedeutung enthält und gleichzeitig klein genug bleibt, um mehrere Chunks in einem Prompt unterzubringen.
-### Ähnlichkeitswerte
+### Ähnlichkeitsscores
-Jeder abgerufene Abschnitt hat einen Ähnlichkeitswert zwischen 0 und 1, der zeigt, wie eng er zur Frage des Benutzers passt. Das folgende Diagramm visualisiert die Wertbereiche und wie das System sie zur Filterung der Ergebnisse nutzt:
+Jeder abgerufene Chunk hat einen Ähnlichkeitsscore zwischen 0 und 1, der angibt, wie gut er zur Frage des Nutzers passt. Das folgende Diagramm visualisiert die Score-Bereiche und wie das System diese verwendet, um Ergebnisse zu filtern:
-
+
-*Dieses Diagramm zeigt Wertbereiche von 0 bis 1 mit einem Mindestschwellenwert von 0,5, der irrelevante Abschnitte herausfiltert.*
+*Dieses Diagramm zeigt Score-Bereiche von 0 bis 1, mit einem Mindestschwellenwert von 0,5, der irrelevante Chunks herausfiltert.*
-Die Werte reichen von 0 bis 1:
+Scores reichen von 0 bis 1:
- 0,7–1,0: Hoch relevant, exakte Übereinstimmung
- 0,5–0,7: Relevant, guter Kontext
-- Unter 0,5: Herausgefiltert, zu unterschiedlich
+- Unter 0,5: Gefiltert, zu unterschiedlich
-Das System ruft nur Abschnitte oberhalb des Mindestschwellenwerts ab, um Qualität sicherzustellen.
+Das System ruft nur Chunks ab, die über dem Mindestschwellenwert liegen, um Qualität zu gewährleisten.
-Einbettungen funktionieren gut, wenn Bedeutungen klar gruppiert sind, aber sie haben Schwachstellen. Das folgende Diagramm zeigt häufige Fehlerfälle – zu große Abschnitte produzieren unscharfe Vektoren, zu kleine Abschnitte fehlen Kontext, mehrdeutige Begriffe zeigen auf mehrere Cluster, und exakte Nachschlagen (IDs, Teilenummern) funktionieren mit Einbettungen überhaupt nicht:
+Einbettungen funktionieren gut, wenn Bedeutungen klar gruppiert sind, haben aber auch Schwachstellen. Das folgende Diagramm zeigt häufige Fehlerfälle — zu große Chunks erzeugen unscharfe Vektoren, zu kleine Chunks haben zu wenig Kontext, mehrdeutige Begriffe verweisen auf mehrere Gruppen, und exakte Übereinstimmungen (IDs, Teilenummern) funktionieren mit Einbettungen gar nicht:
-
+
-*Dieses Diagramm zeigt gängige Fehlerfälle bei Einbettungen: zu große Abschnitte, zu kleine Abschnitte, mehrdeutige Begriffe, die auf mehrere Cluster zeigen, und exakte Nachschlageoperationen wie IDs.*
+*Dieses Diagramm zeigt typische Fehlerquellen bei Einbettungen: zu große Chunks, zu kleine Chunks, mehrdeutige Begriffe mit mehreren Zuordnungen und exakte Suchanfragen wie IDs.*
-### In-Memory-Speicherung
+### Speicher im Arbeitsspeicher
-Dieses Modul verwendet der Einfachheit halber eine In-Memory-Speicherung. Beim Neustart der Anwendung gehen hochgeladene Dokumente verloren. Produktionssysteme verwenden persistente Vektor-Datenbanken wie Qdrant oder Azure AI Search.
+Dieses Modul verwendet Speichern im Arbeitsspeicher aus Einfachheitsgründen. Beim Neustart der Anwendung gehen hochgeladene Dokumente verloren. Produktionssysteme verwenden persistente Vektordatenbanken wie Qdrant oder Azure AI Search.
-### Kontextfenstermanagement
+### Verwaltung des Kontextfensters
-Jedes Modell hat ein maximales Kontextfenster. Sie können nicht jeden Abschnitt eines großen Dokuments einbeziehen. Das System ruft die N relevantesten Abschnitte (Standard 5) ab, um innerhalb der Grenzen zu bleiben und dennoch genügend Kontext für genaue Antworten zu bieten.
+Jedes Modell hat ein maximales Kontextfenster. Sie können nicht jeden Chunk eines großen Dokuments einbeziehen. Das System ruft die Top-N relevantesten Chunks ab (Standard 5), um innerhalb der Grenzen zu bleiben und gleichzeitig genug Kontext für genaue Antworten zu bieten.
-## Wann RAG wichtig ist
+## Wann RAG relevant ist
-RAG ist nicht immer der richtige Ansatz. Die folgende Entscheidungshilfe hilft Ihnen zu bestimmen, wann RAG Mehrwert bietet und wann einfachere Ansätze – wie Inhalte direkt im Prompt einzubinden oder sich auf das Modellwissen zu verlassen – ausreichen:
+RAG ist nicht immer die richtige Methode. Die folgende Entscheidungshilfe hilft Ihnen zu bestimmen, wann RAG Mehrwert bringt und wann einfachere Ansätze — wie das direkte Einfügen von Inhalten in den Prompt oder die Nutzung des eingelernten Wissens des Modells — ausreichen:
@@ -427,11 +426,11 @@ RAG ist nicht immer der richtige Ansatz. Die folgende Entscheidungshilfe hilft I
---
-**Navigation:** [← Vorheriges: Modul 02 - Prompt Engineering](../02-prompt-engineering/README.md) | [Zurück zum Hauptverzeichnis](../README.md) | [Nächstes: Modul 04 - Tools →](../04-tools/README.md)
+**Navigation:** [← Vorheriges: Modul 02 - Prompt Engineering](../02-prompt-engineering/README.md) | [Zurück zur Übersicht](../README.md) | [Nächstes: Modul 04 - Tools →](../04-tools/README.md)
---
**Haftungsausschluss**:
-Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, können automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Für wichtige Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
+Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
\ No newline at end of file
diff --git a/translations/de/04-tools/README.md b/translations/de/04-tools/README.md
index 62c93023f..83a166c95 100644
--- a/translations/de/04-tools/README.md
+++ b/translations/de/04-tools/README.md
@@ -2,75 +2,75 @@
## Inhaltsverzeichnis
-- [Video-Durchgang](../../../04-tools)
-- [Was Sie lernen werden](../../../04-tools)
-- [Voraussetzungen](../../../04-tools)
-- [KI-Agenten mit Tools verstehen](../../../04-tools)
-- [Wie Tool-Aufrufe funktionieren](../../../04-tools)
- - [Tool-Definitionen](../../../04-tools)
- - [Entscheidungsfindung](../../../04-tools)
- - [Ausführung](../../../04-tools)
- - [Antwortgenerierung](../../../04-tools)
- - [Architektur: Spring Boot Auto-Wiring](../../../04-tools)
-- [Tool-Verkettung](../../../04-tools)
-- [Anwendung ausführen](../../../04-tools)
-- [Anwendung verwenden](../../../04-tools)
- - [Einfache Tool-Nutzung ausprobieren](../../../04-tools)
- - [Tool-Verkettung testen](../../../04-tools)
- - [Gesprächsverlauf ansehen](../../../04-tools)
- - [Mit verschiedenen Anfragen experimentieren](../../../04-tools)
-- [Wichtige Konzepte](../../../04-tools)
- - [ReAct-Muster (Reasoning and Acting)](../../../04-tools)
- - [Tool-Beschreibungen sind wichtig](../../../04-tools)
- - [Sitzungsverwaltung](../../../04-tools)
- - [Fehlerbehandlung](../../../04-tools)
-- [Verfügbare Tools](../../../04-tools)
-- [Wann man tool-basierte Agenten verwendet](../../../04-tools)
-- [Tools vs RAG](../../../04-tools)
-- [Nächste Schritte](../../../04-tools)
+- [Video-Durchgang](#video-durchgang)
+- [Was Sie lernen werden](#was-sie-lernen-werden)
+- [Voraussetzungen](#voraussetzungen)
+- [Verständnis von KI-Agenten mit Tools](#verständnis-von-ki-agenten-mit-tools)
+- [Wie Tool-Aufrufe funktionieren](#wie-tool-aufrufe-funktionieren)
+ - [Tool-Definitionen](#tool-definitionen)
+ - [Entscheidungsfindung](#entscheidungsfindung)
+ - [Ausführung](#ausführung)
+ - [Antwortgenerierung](#antwortgenerierung)
+ - [Architektur: Spring Boot Auto-Wiring](#architektur-spring-boot-auto-wiring)
+- [Tool-Verkettung](#tool-verkettung)
+- [Anwendung starten](#anwendung-starten)
+- [Die Anwendung verwenden](#verwendung-der-anwendung)
+ - [Einfaches Tool ausprobieren](#probiere-einfache-tool-anwendungen-aus)
+ - [Tool-Verkettung testen](#teste-tool-verkettung)
+ - [Gesprächsablauf ansehen](#sieh-dir-den-gesprächsverlauf-an)
+ - [Mit verschiedenen Anfragen experimentieren](#experimentiere-mit-verschiedenen-anfragen)
+- [Wichtige Konzepte](#zentrale-konzepte)
+ - [ReAct-Muster (Reasoning and Acting)](#react-muster-reasoning-and-acting)
+ - [Tool-Beschreibungen sind wichtig](#tool-beschreibungen-sind-wichtig)
+ - [Sitzungsverwaltung](#sitzungsmanagement)
+ - [Fehlerbehandlung](#fehlerbehandlung)
+- [Verfügbare Tools](#verfügbare-tools)
+- [Wann man tool-basierte Agenten verwendet](#wann-man-tool-basierte-agenten-verwendet)
+- [Tools vs RAG](#tools-vs-rag)
+- [Nächste Schritte](#nächste-schritte)
## Video-Durchgang
-Sehen Sie sich diese Live-Session an, die erklärt, wie Sie mit diesem Modul starten:
+Sehen Sie sich diese Live-Sitzung an, die erklärt, wie Sie mit diesem Modul starten:
-
+
## Was Sie lernen werden
-Bis jetzt haben Sie gelernt, wie man Gespräche mit KI führt, Eingabeaufforderungen effektiv strukturiert und Antworten in Ihren Dokumenten verankert. Aber es gibt immer noch eine grundlegende Einschränkung: Sprachmodelle können nur Text generieren. Sie können nicht das Wetter prüfen, Berechnungen durchführen, Datenbanken abfragen oder mit externen Systemen interagieren.
+Bisher haben Sie gelernt, wie man Gespräche mit KI führt, Prompts effektiv strukturiert und Antworten an Ihre Dokumente anbindet. Aber es gibt noch eine grundlegende Einschränkung: Sprachmodelle können nur Text erzeugen. Sie können das Wetter nicht nachschlagen, keine Berechnungen durchführen, keine Datenbanken abfragen oder mit externen Systemen interagieren.
-Tools verändern das. Indem Sie dem Modell Zugriff auf Funktionen geben, die es aufrufen kann, verwandeln Sie es von einem Textgenerator in einen Agenten, der handeln kann. Das Modell entscheidet, wann es ein Tool benötigt, welches Tool es nutzt und welche Parameter es übergibt. Ihr Code führt die Funktion aus und liefert das Ergebnis zurück. Das Modell integriert dieses Ergebnis in seine Antwort.
+Tools ändern das. Indem Sie dem Modell Zugriff auf Funktionen geben, die es aufrufen kann, verwandeln Sie es von einem Textgenerator in einen Agenten, der Aktionen durchführen kann. Das Modell entscheidet, wann es ein Tool braucht, welches Tool es verwendet und welche Parameter es übergibt. Ihr Code führt die Funktion aus und liefert das Ergebnis zurück. Das Modell integriert dieses Ergebnis in seine Antwort.
## Voraussetzungen
-- Abgeschlossenes [Modul 01 – Einführung](../01-introduction/README.md) (Azure OpenAI Ressourcen bereitgestellt)
-- Empfohlen, vorherige Module abgeschlossen zu haben (dieses Modul verweist auf [RAG-Konzepte aus Modul 03](../03-rag/README.md) im Vergleich Tools vs. RAG)
-- `.env`-Datei im Stammverzeichnis mit Azure-Anmeldedaten (erstellt durch `azd up` in Modul 01)
+- Abgeschlossenes [Modul 01 - Einführung](../01-introduction/README.md) (Azure OpenAI Ressourcen bereitgestellt)
+- Empfohlene vorherige Module abgeschlossen (dieses Modul bezieht sich in der Tools-vs-RAG-Vergleich auf [RAG-Konzepte aus Modul 03](../03-rag/README.md))
+- `.env` Datei im Stammverzeichnis mit Azure-Zugangsdaten (erstellt durch `azd up` in Modul 01)
-> **Hinweis:** Wenn Sie Modul 01 noch nicht abgeschlossen haben, folgen Sie zuerst den dortigen Bereitstellungsanweisungen.
+> **Hinweis:** Wenn Sie Modul 01 noch nicht abgeschlossen haben, folgen Sie zunächst den dortigen Bereitstellungsanweisungen.
-## KI-Agenten mit Tools verstehen
+## Verständnis von KI-Agenten mit Tools
-> **📝 Hinweis:** Der Begriff „Agenten“ in diesem Modul bezieht sich auf KI-Assistenten mit Tool-Aufruf-Fähigkeiten. Dies unterscheidet sich von den **Agentic AI** Mustern (autonome Agenten mit Planung, Gedächtnis und mehrstufigem Schlussfolgern), die wir in [Modul 05: MCP](../05-mcp/README.md) behandeln.
+> **📝 Hinweis:** Der Begriff „Agenten“ in diesem Modul bezieht sich auf KI-Assistenten, die um Tool-Aufruf-Fähigkeiten erweitert sind. Dies unterscheidet sich von den **Agentic AI**-Mustern (autonome Agenten mit Planung, Gedächtnis und mehrstufigem Schlussfolgern), die wir in [Modul 05: MCP](../05-mcp/README.md) behandeln.
-Ohne Tools kann ein Sprachmodell nur Text aus seinen Trainingsdaten generieren. Fragen Sie es nach dem aktuellen Wetter, muss es raten. Geben Sie ihm Tools, kann es eine Wetter-API aufrufen, Berechnungen durchführen oder eine Datenbank abfragen – und diese echten Ergebnisse in seine Antwort einfließen lassen.
+Ohne Tools kann ein Sprachmodell nur Text basierend auf seinen Trainingsdaten generieren. Fragt man es nach dem aktuellen Wetter, muss es raten. Mit Tools kann es eine Wetter-API aufrufen, Berechnungen durchführen oder eine Datenbank abfragen — und diese Echtzeit-Ergebnisse in seine Antwort einfließen lassen.
-*Ohne Tools kann das Modell nur raten – mit Tools kann es APIs aufrufen, Berechnungen durchführen und Echtzeitdaten liefern.*
+*Ohne Tools kann das Modell nur raten – mit Tools kann es APIs aufrufen, Berechnungen ausführen und Echtzeitdaten zurückgeben.*
-Ein KI-Agent mit Tools folgt dem **Reasoning and Acting (ReAct)** Muster. Das Modell antwortet nicht einfach – es denkt darüber nach, was es braucht, handelt durch Tool-Aufrufe, beobachtet das Ergebnis und entscheidet dann, ob es erneut handeln oder die finale Antwort liefern soll:
+Ein KI-Agent mit Tools folgt einem **Reasoning and Acting (ReAct)**-Muster. Das Modell reagiert nicht nur – es überlegt, was es braucht, handelt durch Aufruf eines Tools, beobachtet das Ergebnis und entscheidet dann, ob es erneut handeln oder die endgültige Antwort liefern soll:
-1. **Nachdenken** — Der Agent analysiert die Frage des Nutzers und bestimmt, welche Informationen er benötigt
-2. **Handeln** — Der Agent wählt das richtige Tool aus, erzeugt die passenden Parameter und ruft es auf
-3. **Beobachten** — Der Agent empfängt die Ausgabe des Tools und bewertet das Ergebnis
-4. **Wiederholen oder Antworten** — Wenn weitere Daten nötig sind, wiederholt der Agent den Zyklus; sonst formuliert er eine natürliche Antwort
+1. **Überlegen** — Der Agent analysiert die Frage des Nutzers und bestimmt, welche Informationen er benötigt
+2. **Handeln** — Der Agent wählt das richtige Tool aus, erstellt die korrekten Parameter und ruft es auf
+3. **Beobachten** — Der Agent erhält die Ausgabe des Tools und bewertet das Ergebnis
+4. **Wiederholen oder Antworten** — Wenn weitere Daten benötigt werden, wird die Schleife wiederholt; andernfalls wird eine natürliche Antwort formuliert
-
+
-*Der ReAct-Zyklus – der Agent denkt darüber nach, was zu tun ist, handelt durch Tool-Aufrufe, beobachtet das Ergebnis und wiederholt dies, bis eine Endantwort vorliegt.*
+*Der ReAct-Zyklus — der Agent überlegt, was zu tun ist, handelt durch Tool-Aufruf, beobachtet das Ergebnis und wiederholt dies, bis er die endgültige Antwort geben kann.*
-Dies geschieht automatisch. Sie definieren die Tools und deren Beschreibungen. Das Modell übernimmt die Entscheidungsfindung, wann und wie sie genutzt werden.
+Dies geschieht automatisch. Sie definieren die Tools und deren Beschreibungen. Das Modell übernimmt die Entscheidungsfindung, wann und wie sie eingesetzt werden.
## Wie Tool-Aufrufe funktionieren
@@ -78,7 +78,7 @@ Dies geschieht automatisch. Sie definieren die Tools und deren Beschreibungen. D
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-Sie definieren Funktionen mit klaren Beschreibungen und Parameterspezifikationen. Das Modell sieht diese Beschreibungen in seinem System-Prompt und versteht, was jedes Tool macht.
+Sie definieren Funktionen mit klaren Beschreibungen und Parameterspezifikationen. Das Modell sieht diese Beschreibungen im System-Prompt und versteht, wofür jedes Tool dient.
```java
@Component
@@ -86,7 +86,7 @@ public class WeatherTool {
@Tool("Get the current weather for a location")
public String getCurrentWeather(@P("Location name") String location) {
- // Ihre Wetterabfrage-Logik
+ // Ihre Logik zur Wetterabfrage
return "Weather in " + location + ": 22°C, cloudy";
}
}
@@ -96,139 +96,139 @@ public interface Assistant {
String chat(@MemoryId String sessionId, @UserMessage String message);
}
-// Assistant wird automatisch von Spring Boot verbunden mit:
+// Der Assistent wird automatisch von Spring Boot verbunden mit:
// - ChatModel-Bean
// - Alle @Tool-Methoden aus @Component-Klassen
-// - ChatMemoryProvider für Sitzungsverwaltung
+// - ChatMemoryProvider für Sitzungsmanagement
```
-
-Das folgende Diagramm zerlegt jede Annotation und zeigt, wie jedes Element der KI hilft zu verstehen, wann das Tool aufzurufen ist und welche Argumente übergeben werden sollen:
-
+Das folgende Diagramm erklärt jede Annotation und zeigt, wie jeder Teil der KI hilft zu verstehen, wann das Tool aufgerufen wird und welche Argumente übergeben werden:
-*Anatomie einer Tool-Definition – @Tool sagt der KI, wann sie verwendet wird, @P beschreibt jeden Parameter und @AiService verknüpft alles beim Start.*
+
+
+*Anatomie einer Tool-Definition — @Tool sagt der KI, wann sie das Tool nutzen soll, @P beschreibt jeden Parameter, und @AiService verbindet alles beim Start.*
> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat:** Öffnen Sie [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) und fragen Sie:
> - „Wie integriere ich eine echte Wetter-API wie OpenWeatherMap anstelle von Mock-Daten?“
-> - „Was macht eine gute Tool-Beschreibung aus, die der KI hilft, sie korrekt zu verwenden?“
-> - „Wie handle ich API-Fehler und Rate Limits in Tool-Implementierungen?“
+> - „Was macht eine gute Tool-Beschreibung aus, die der KI hilft, sie richtig zu nutzen?“
+> - „Wie gehe ich mit API-Fehlern und Rate-Limits in Tool-Implementierungen um?“
### Entscheidungsfindung
-Wenn ein Nutzer fragt „Wie ist das Wetter in Seattle?“, wählt das Modell nicht zufällig ein Tool aus. Es vergleicht die Absicht des Nutzers mit jeder verfügbaren Tool-Beschreibung, bewertet deren Relevanz und wählt die beste Übereinstimmung aus. Dann generiert es einen strukturierten Funktionsaufruf mit den richtigen Parametern – hier `location` auf `"Seattle"` gesetzt.
+Wenn ein Nutzer fragt „Wie ist das Wetter in Seattle?“, wählt das Modell nicht zufällig ein Tool aus. Es vergleicht die Absicht des Nutzers mit jeder Tool-Beschreibung, die ihm zur Verfügung steht, bewertet jede auf Relevanz und wählt die beste Übereinstimmung. Anschließend erzeugt es einen strukturierten Funktionsaufruf mit den richtigen Parametern – in diesem Fall mit `location` auf `"Seattle"` gesetzt.
-Wenn kein Tool zur Benutzeranfrage passt, fällt das Modell auf Antworten aus seinem eigenen Wissen zurück. Bei mehreren passenden Tools wählt es das speziellste.
+Wenn kein Tool zur Anfrage passt, fällt das Modell auf seine eigenen Wissensbestände zurück. Wenn mehrere Tools passen, wählt es das spezifischste aus.
-
+
-*Das Modell bewertet jedes verfügbare Tool im Hinblick auf die Nutzerabsicht und wählt das beste – deswegen sind klare, spezifische Tool-Beschreibungen wichtig.*
+*Das Modell bewertet alle verfügbaren Tools anhand der Nutzerabsicht und wählt die beste Übereinstimmung aus – deshalb sind klare, präzise Tool-Beschreibungen so wichtig.*
### Ausführung
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-Spring Boot verdrahtet die deklarative `@AiService` Schnittstelle mit allen registrierten Tools automatisch, und LangChain4j führt Tool-Aufrufe selbstständig aus. Im Hintergrund durchläuft ein Tool-Aufruf sechs Stufen – von der nativen Nutzerspracheingabe bis zur natürlichen Antwort:
+Spring Boot verbindet automatisch das deklarative `@AiService`-Interface mit allen registrierten Tools, und LangChain4j führt Tool-Aufrufe automatisch aus. Im Hintergrund durchläuft ein Tool-Aufruf sechs Phasen — von der natürlichen Spracheingabe des Nutzers bis zur Antwort in natürlicher Sprache:
-
+
-*End-to-End Ablauf – der Nutzer stellt eine Frage, das Modell wählt ein Tool aus, LangChain4j führt es aus, und das Modell integriert das Ergebnis in die natürliche Antwort.*
+*Der End-to-End-Ablauf — der Nutzer stellt eine Frage, das Modell wählt ein Tool aus, LangChain4j führt es aus und das Modell verwebt das Ergebnis in eine natürliche Antwort.*
-Wenn Sie die [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) aus Modul 00 ausgeführt haben, haben Sie dieses Muster schon gesehen – die `Calculator`-Tools wurden genauso aufgerufen. Das folgende Sequenzdiagramm zeigt genau, was während dieser Demo unter der Haube geschah:
+Im Hintergrund läuft `AiServices` dieselbe Tool-Aufruf-Schleife für jedes Tool – hier mit einem einfachen `Calculator` als Beispiel. Das folgende Sequenzdiagramm zeigt genau, was unter der Haube passiert:
-*Die Tool-Aufruf-Schleife aus der Quick Start Demo – `AiServices` schickt Ihre Nachricht und Tool-Schemata an das LLM, das LLM antwortet mit einem Funktionsaufruf wie `add(42, 58)`, LangChain4j führt die `Calculator` Methode lokal aus und gibt das Ergebnis für die finale Antwort zurück.*
+*Die Tool-Aufruf-Schleife — `AiServices` sendet Ihre Nachricht und das Toolschema an das LLM, das LLM antwortet mit einem Funktionsaufruf wie `add(42, 58)`, LangChain4j führt die `Calculator`-Methode lokal aus und gibt das Ergebnis für die finale Antwort zurück.*
> **🤖 Probieren Sie es mit [GitHub Copilot](https://github.com/features/copilot) Chat:** Öffnen Sie [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) und fragen Sie:
-> - „Wie funktioniert das ReAct-Muster und warum ist es für KI-Agenten effektiv?“
-> - „Wie entscheidet der Agent, welches Tool er wann nutzt?“
-> - „Was passiert, wenn die Ausführung eines Tools fehlschlägt – wie behandle ich Fehler robust?“
+> - „Wie funktioniert das ReAct-Muster und warum ist es effektiv für KI-Agenten?“
+> - „Wie entscheidet der Agent, welches Tool er in welcher Reihenfolge nutzt?“
+> - „Was passiert, wenn die Ausführung eines Tools fehlschlägt – wie sollte ich Fehler robust handhaben?“
### Antwortgenerierung
-Das Modell erhält die Wetterdaten und formatiert sie als eine natürliche Antwort für den Nutzer.
+Das Modell erhält die Wetterdaten und formatiert sie zu einer natürlichen Antwort für den Nutzer.
### Architektur: Spring Boot Auto-Wiring
-Dieses Modul verwendet LangChain4j’s Spring Boot Integration mit deklarativen `@AiService` Schnittstellen. Beim Start entdeckt Spring Boot jede `@Component`, die `@Tool` Methoden enthält, ihre `ChatModel` Bean und den `ChatMemoryProvider` – und verdrahtet sie alle in eine einzige `Assistant` Schnittstelle ohne Boilerplate.
+Dieses Modul verwendet LangChain4js Spring Boot-Integration mit deklarativen `@AiService`-Interfaces. Beim Start entdeckt Spring Boot alle `@Component`s, die `@Tool`-Methoden enthalten, Ihre `ChatModel`-Bean und den `ChatMemoryProvider` – und verknüpft alles zu einem einzelnen `Assistant`-Interface ganz ohne Boilerplate-Code.
-*Die @AiService Schnittstelle verbindet ChatModel, Tool-Komponenten und Memory Provider – Spring Boot übernimmt die komplette Verkabelung automatisch.*
+*Das @AiService-Interface verbindet ChatModel, Tool-Komponenten und Memory-Provider – Spring Boot übernimmt das Verkabeln automatisch.*
-Hier sehen Sie den kompletten Anforderungslebenszyklus als Sequenzdiagramm – von der HTTP-Anfrage über Controller, Service und verdrahteten Proxy bis zur Tool-Ausführung und zurück:
+Hier der komplette Anforderungszyklus als Sequenzdiagramm – von der HTTP-Anfrage über Controller, Service und auto-verkabelten Proxy bis zur Tool-Ausführung und zurück:
-
+
-*Der vollständige Spring Boot Anforderungszyklus – HTTP-Anfrage fließt durch Controller und Service zum verdrahteten Assistant Proxy, der LLM und Tool-Aufrufe automatisch orchestriert.*
+*Der komplette Spring Boot-Anforderungszyklus — HTTP-Anfrage fließt über Controller und Service zum auto-verkabelten Assistant-Proxy, der LLM- und Tool-Aufrufe orchestriert.*
-Wichtige Vorteile dieses Ansatzes:
+Wesentliche Vorteile dieses Ansatzes:
-- **Spring Boot Auto-Wiring** – ChatModel und Tools werden automatisch injiziert
-- **@MemoryId Muster** – Automatisches memory-basiertes Sitzungsmanagement
-- **Einzelne Instanz** – Assistant wird einmalig erstellt und für bessere Performance wiederverwendet
-- **Typsichere Ausführung** – Java-Methoden werden direkt mit Typumwandlung aufgerufen
-- **Multi-Turn Orchestrierung** – Unterstützt automatische Tool-Verkettung
-- **Zero Boilerplate** – Keine manuellen `AiServices.builder()` Aufrufe oder Memory HashMap
+- **Spring Boot Auto-Wiring** — ChatModel und Tools werden automatisch injiziert
+- **@MemoryId-Muster** — Automatisches Sitzungs-basiertes Speichermanagement
+- **Einzelinstanz** — Assistant wird einmal erstellt und zur Leistungssteigerung wiederverwendet
+- **Typensichere Ausführung** — Java-Methoden werden direkt mit Typkonvertierung aufgerufen
+- **Mehrstufige Orchestrierung** — Handhabt Tool-Verkettung automatisch
+- **Kein Boilerplate** — Keine manuellen `AiServices.builder()`-Aufrufe oder Memory-HashMaps
-Alternative Ansätze (manuelles `AiServices.builder()`) erfordern mehr Code und verzichten auf Spring Boot Integrationsvorteile.
+Alternative Ansätze (manuelles `AiServices.builder()`) erfordern mehr Code und bieten nicht die Vorteile der Spring Boot-Integration.
## Tool-Verkettung
-**Tool-Verkettung** – Die tatsächliche Stärke von tool-basierten Agenten zeigt sich, wenn eine einzelne Frage mehrere Tools erfordert. Fragen Sie „Wie ist das Wetter in Seattle in Fahrenheit?“ und der Agent verknüpft automatisch zwei Tools: zuerst ruft er `getCurrentWeather` auf, um die Temperatur in Celsius zu erhalten, dann übergibt er diesen Wert an `celsiusToFahrenheit` für die Umrechnung – alles in einem einzigen Gesprächsturn.
+**Tool-Verkettung** — Die wahre Stärke tool-basierter Agenten zeigt sich, wenn eine einzige Frage mehrere Tools benötigt. Fragt man „Wie ist das Wetter in Seattle in Fahrenheit?“, verkettet der Agent automatisch zwei Tools: Zuerst ruft er `getCurrentWeather` auf, um die Temperatur in Celsius zu erhalten, dann übergibt er diesen Wert an `celsiusToFahrenheit` zur Umrechnung – alles in einer einzigen Gesprächsrunde.
-
+
-*Tool-Verkettung in Aktion – der Agent ruft zuerst getCurrentWeather auf, leitet das Celsius-Ergebnis an celsiusToFahrenheit weiter und liefert eine kombinierte Antwort.*
+*Tool-Verkettung in Aktion — der Agent ruft zuerst getCurrentWeather auf, leitet das Celsius-Ergebnis an celsiusToFahrenheit weiter und liefert eine kombinierte Antwort.*
-**Abschwächung von Fehlern** – Fragen Sie nach dem Wetter in einer Stadt, die nicht in den Mock-Daten ist. Das Tool gibt eine Fehlermeldung zurück, und die KI erklärt, dass sie nicht helfen kann, anstatt abzustürzen. Tools fallen sicher aus. Das folgende Diagramm zeigt den Unterschied zwischen den beiden Ansätzen – mit ordentlicher Fehlerbehandlung fängt der Agent die Ausnahme auf und antwortet hilfreich, ohne sie stürzt die gesamte Anwendung ab:
+**Fehlereskalation vermeiden** — Fragt man das Wetter in einer Stadt, die nicht in den Mock-Daten ist, gibt das Tool eine Fehlermeldung zurück, und die KI erklärt, dass sie nicht helfen kann, anstatt abzustürzen. Tools versagen sicher. Das folgende Diagramm vergleicht beide Ansätze — mit ordentlicher Fehlerbehandlung fängt der Agent die Ausnahme ab und antwortet hilfreich, andernfalls stürzt die ganze Anwendung ab:
-
+
-*Wenn ein Tool fehlschlägt, fängt der Agent den Fehler ab und antwortet mit einer hilfreichen Erklärung, statt dass es zum Absturz kommt.*
+*Wenn ein Tool fehlschlägt, fängt der Agent den Fehler ab und gibt eine hilfreiche Erklärung, anstatt abzustürzen.*
-Dies geschieht in einem einzigen Gesprächsschritt. Der Agent orchestriert mehrere Tool-Aufrufe autonom.
+Dies geschieht in einer einzigen Gesprächsrunde. Der Agent orchestriert mehrere Tool-Aufrufe autonom.
-## Anwendung ausführen
+## Anwendung starten
**Bereitstellung überprüfen:**
-Stellen Sie sicher, dass die `.env`-Datei im Stammverzeichnis mit Azure-Zugangsdaten vorhanden ist (erstellt während Modul 01). Führen Sie dies im Modulsverzeichnis (`04-tools/`) aus:
+Stellen Sie sicher, dass die `.env` Datei im Stammverzeichnis mit Azure-Zugangsdaten existiert (erstellt während Modul 01). Führen Sie dies im Modul-Verzeichnis (`04-tools/`) aus:
-**Bash:**
+**Bash:**
```bash
-cat ../.env # Sollte AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT anzeigen
+cat ../.env # Soll AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT anzeigen
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
Get-Content ..\.env # Sollte AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT anzeigen
```
-
-**Starten der Anwendung:**
-> **Hinweis:** Falls Sie bereits alle Anwendungen mit `./start-all.sh` aus dem Stammverzeichnis gestartet haben (wie in Modul 01 beschrieben), läuft dieses Modul bereits auf Port 8084. Sie können die Startbefehle unten überspringen und direkt http://localhost:8084 aufrufen.
+**Anwendung starten:**
-**Option 1: Verwendung des Spring Boot Dashboards (Empfohlen für VS Code Nutzer)**
+> **Hinweis:** Wenn Sie bereits alle Anwendungen mit `./start-all.sh` vom Stammverzeichnis aus gestartet haben (wie in Modul 01 beschrieben), läuft dieses Modul bereits auf Port 8084. Sie können die Startbefehle unten überspringen und direkt http://localhost:8084 aufrufen.
-Der Dev Container enthält die Erweiterung Spring Boot Dashboard, welche eine visuelle Oberfläche zur Verwaltung aller Spring Boot Anwendungen bereitstellt. Sie finden sie in der Aktivitätsleiste links in VS Code (suchen Sie das Spring Boot Symbol).
+**Option 1: Nutzung des Spring Boot Dashboards (empfohlen für VS Code Nutzer)**
-Im Spring Boot Dashboard können Sie:
-- Alle verfügbaren Spring Boot Anwendungen im Workspace sehen
-- Anwendungen mit einem Klick starten/stoppen
-- Echtzeit-Protokolle anzeigen
-- Den Anwendungsstatus überwachen
-Klicken Sie einfach auf die Wiedergabetaste neben „tools“, um dieses Modul zu starten, oder starten Sie alle Module auf einmal.
+Der Dev-Container enthält die Erweiterung Spring Boot Dashboard, die eine visuelle Oberfläche zur Verwaltung aller Spring Boot-Anwendungen bereitstellt. Sie finden sie in der Aktivitätsleiste links in VS Code (suchen Sie das Spring Boot-Symbol).
-So sieht das Spring Boot Dashboard in VS Code aus:
+Im Spring Boot Dashboard können Sie:
+- Alle verfügbaren Spring Boot-Anwendungen im Workspace sehen
+- Anwendungen mit einem Klick starten/stoppen
+- Anwendungsprotokolle in Echtzeit ansehen
+- Anwendungsstatus überwachen
+
+Klicken Sie einfach auf den Play-Button neben „tools“, um dieses Modul zu starten, oder starten Sie alle Module auf einmal.
+So sieht das Spring Boot Dashboard in VS Code aus:
-*Das Spring Boot Dashboard in VS Code — alle Module von einem Ort aus starten, stoppen und überwachen*
+*Das Spring Boot Dashboard in VS Code — starte, stoppe und überwache alle Module an einem Ort*
**Option 2: Verwendung von Shell-Skripten**
-Starten Sie alle Webanwendungen (Module 01-04):
+Starte alle Webanwendungen (Module 01-04):
**Bash:**
```bash
@@ -238,11 +238,11 @@ cd .. # Vom Stammverzeichnis
**PowerShell:**
```powershell
-cd .. # Vom Stammverzeichnis
+cd .. # Aus dem Stammverzeichnis
.\start-all.ps1
```
-Oder starten Sie nur dieses Modul:
+Oder starte nur dieses Modul:
**Bash:**
```bash
@@ -256,9 +256,9 @@ cd 04-tools
.\start.ps1
```
-Beide Skripte laden automatisch Umgebungsvariablen aus der Root-`.env`-Datei und bauen die JARs, falls sie noch nicht existieren.
+Beide Skripte laden automatisch Umgebungsvariablen aus der Root-`.env`-Datei und bauen die JARs, falls diese noch nicht existieren.
-> **Hinweis:** Wenn Sie alle Module manuell vor dem Start bauen möchten:
+> **Hinweis:** Falls du alle Module manuell bauen möchtest, bevor du sie startest:
>
> **Bash:**
> ```bash
@@ -272,13 +272,13 @@ Beide Skripte laden automatisch Umgebungsvariablen aus der Root-`.env`-Datei und
> mvn clean package -DskipTests
> ```
-Öffnen Sie http://localhost:8084 in Ihrem Browser.
+Öffne http://localhost:8084 in deinem Browser.
**Zum Stoppen:**
**Bash:**
```bash
-./stop.sh # Nur dieses Modul
+./stop.sh # Dieses Modul nur
# Oder
cd .. && ./stop-all.sh # Alle Module
```
@@ -292,84 +292,84 @@ cd ..; .\stop-all.ps1 # Alle Module
## Verwendung der Anwendung
-Die Anwendung bietet eine Weboberfläche, über die Sie mit einem KI-Agenten interagieren können, der Zugriff auf Wetter- und Temperaturumrechner-Tools hat. So sieht die Oberfläche aus — sie enthält Schnellstart-Beispiele und ein Chatfenster zum Senden von Anfragen:
+Die Anwendung bietet eine Weboberfläche, über die du mit einem KI-Agenten interagieren kannst, der Zugriff auf Wetter- und Temperaturumrechnungstools hat. So sieht die Oberfläche aus — sie enthält Schnellstart-Beispiele und ein Chat-Panel zum Senden von Anfragen:
-*Die AI Agent Tools-Oberfläche – Schnellbeispiele und Chat-Interface zur Interaktion mit Tools*
+*Die Oberfläche der AI Agent Tools - schnelle Beispiele und Chat-Interface zur Interaktion mit Tools*
-### Einfachen Tool-Einsatz ausprobieren
+### Probiere einfache Tool-Anwendungen aus
-Starten Sie mit einer einfachen Anfrage: „Convert 100 degrees Fahrenheit to Celsius“. Der Agent erkennt, dass er das Temperaturumrechnungstool benötigt, ruft es mit den richtigen Parametern auf und liefert das Ergebnis zurück. Beachten Sie, wie natürlich sich das anfühlt – Sie haben nicht angegeben, welches Tool zu verwenden ist oder wie es aufgerufen wird.
+Beginne mit einer einfachen Anfrage: „Wandle 100 Grad Fahrenheit in Celsius um“. Der Agent erkennt, dass das Temperaturumrechnungstool benötigt wird, ruft es mit den richtigen Parametern auf und liefert das Ergebnis zurück. Beachte, wie natürlich das wirkt – du hast nicht angegeben, welches Tool genutzt oder wie es aufgerufen werden soll.
-### Tool-Verkettung testen
+### Teste Tool-Verkettung
-Versuchen Sie nun etwas Komplexeres: „What’s the weather in Seattle and convert it to Fahrenheit?“ Sehen Sie, wie der Agent dies in Schritten abarbeitet. Zuerst holt er die Wetterdaten (die in Celsius zurückgegeben werden), erkennt, dass eine Umrechnung zu Fahrenheit nötig ist, ruft das Umrechnungstool auf und kombiniert beide Ergebnisse zu einer Antwort.
+Probiere nun etwas Komplexeres: „Wie ist das Wetter in Seattle und wandle es in Fahrenheit um?“ Beobachte, wie der Agent das in Schritten abarbeitet. Zuerst holt er das Wetter (das in Celsius zurückgegeben wird), erkennt, dass eine Umrechnung nach Fahrenheit nötig ist, ruft das Umrechnungstool auf und kombiniert beide Ergebnisse in einer Antwort.
-### Gesprächsverlauf ansehen
+### Sieh dir den Gesprächsverlauf an
-Die Chat-Oberfläche speichert den Gesprächsverlauf, sodass Sie mehrstufige Interaktionen führen können. Sie können alle vorherigen Anfragen und Antworten sehen, was es einfach macht, das Gespräch nachzuvollziehen und zu verstehen, wie der Agent Kontext über mehrere Austausche aufbaut.
+Das Chat-Interface speichert die Gesprächshistorie, sodass du mehrstufige Interaktionen führen kannst. Du kannst alle vorherigen Anfragen und Antworten sehen, was das Nachverfolgen des Gesprächs und das Verständnis erleichtert, wie der Agent Kontext über mehrere Austausche aufbaut.
-*Mehrstufiges Gespräch mit einfachen Umrechnungen, Wetterabfragen und Tool-Verkettung*
+*Mehrstufige Konversation mit einfachen Umrechnungen, Wetterabfragen und Tool-Verkettung*
-### Verschiedene Anfragen ausprobieren
+### Experimentiere mit verschiedenen Anfragen
-Testen Sie verschiedene Kombinationen:
-- Wetterabfragen: „What’s the weather in Tokyo?“
-- Temperaturumrechnungen: „What is 25°C in Kelvin?“
-- Kombinierte Anfragen: „Check the weather in Paris and tell me if it’s above 20°C“
+Teste verschiedene Kombinationen:
+- Wetterabfragen: „Wie ist das Wetter in Tokio?“
+- Temperaturumrechnungen: „Was sind 25 °C in Kelvin?“
+- Kombinierte Anfragen: „Prüfe das Wetter in Paris und sag mir, ob es über 20 °C ist“
-Beachten Sie, wie der Agent natürliche Sprache interpretiert und in passende Tool-Aufrufe übersetzt.
+Beachte, wie der Agent natürliche Sprache interpretiert und passende Tool-Aufrufe daraus ableitet.
-## Wichtige Konzepte
+## Zentrale Konzepte
### ReAct-Muster (Reasoning and Acting)
-Der Agent wechselt zwischen Überlegung (was zu tun ist) und Ausführung (Einsatz von Tools). Dieses Muster ermöglicht eigenständige Problemlösung anstatt nur auf Anweisungen zu reagieren.
+Der Agent wechselt zwischen Nachdenken (Entscheiden, was zu tun ist) und Handeln (Tools verwenden). Dieses Muster ermöglicht autonome Problemlösung anstatt nur bloßer Reaktion auf Anweisungen.
-### Tool-Beschreibungen sind entscheidend
+### Tool-Beschreibungen sind wichtig
-Die Qualität Ihrer Tool-Beschreibungen beeinflusst direkt, wie gut der Agent sie nutzt. Klare, spezifische Beschreibungen helfen dem Modell zu verstehen, wann und wie jedes Tool aufgerufen wird.
+Die Qualität deiner Tool-Beschreibungen beeinflusst direkt, wie gut der Agent sie nutzt. Klare, spezifische Beschreibungen helfen dem Modell zu verstehen, wann und wie jedes Tool aufzurufen ist.
-### Sitzungsverwaltung
+### Sitzungsmanagement
-Die `@MemoryId`-Annotation ermöglicht automatische sessionsbasierte Speicherverwaltung. Jede Sitzungs-ID erhält eine eigene `ChatMemory`-Instanz, die vom `ChatMemoryProvider`-Bean verwaltet wird, sodass mehrere Benutzer gleichzeitig mit dem Agenten interagieren können, ohne dass sich ihre Gespräche vermischen. Das folgende Diagramm zeigt, wie mehrere Benutzer anhand ihrer Sitzungs-IDs zu isolierten Speicherbereichen geleitet werden:
+Die Annotation `@MemoryId` ermöglicht eine automatische speicherbasierte Sitzungsverwaltung. Jede Sitzungs-ID erhält eine eigene `ChatMemory`-Instanz, die vom `ChatMemoryProvider` verwaltet wird, sodass mehrere Nutzer gleichzeitig mit dem Agenten interagieren können, ohne dass sich ihre Gespräche vermischen. Die folgende Grafik zeigt, wie Nutzer anhand ihrer Sitzungs-IDs zu isolierten Speichern geleitet werden:
-*Jede Sitzungs-ID führt zu einem isolierten Gesprächsverlauf – Benutzer sehen niemals die Nachrichten anderer.*
+*Jede Sitzungs-ID führt zu einer getrennten Gesprächshistorie — Nutzer sehen niemals die Nachrichten anderer.*
### Fehlerbehandlung
-Tools können fehlschlagen – APIs laufen zeitüberschreitend ab, Parameter können ungültig sein, externe Dienste ausfallen. Produktionsagenten benötigen Fehlerbehandlung, damit das Modell Probleme erklären oder Alternativen versuchen kann statt die gesamte Anwendung abstürzen zu lassen. Wenn ein Tool eine Ausnahme wirft, fängt LangChain4j diese ab und gibt die Fehlermeldung an das Modell zurück, das dann das Problem in natürlicher Sprache erklären kann.
+Tools können ausfallen — APIs timeouten, Parameter könnten ungültig sein, externe Dienste fallen aus. Produktive Agenten brauchen Fehlerbehandlung, damit das Modell Probleme erklären oder Alternativen versuchen kann, anstatt die ganze Anwendung abstürzen zu lassen. Wenn ein Tool eine Ausnahme wirft, fängt LangChain4j diese ab und gibt die Fehlermeldung zurück an das Modell, welches dann das Problem in natürlicher Sprache erklären kann.
## Verfügbare Tools
-Das folgende Diagramm zeigt das breite Ökosystem an Tools, die Sie bauen können. Dieses Modul zeigt Wetter- und Temperatur-Tools, aber dasselbe `@Tool`-Muster funktioniert für jede Java-Methode — von Datenbankabfragen bis hin zur Zahlungsabwicklung.
+Die folgende Grafik zeigt das breite Ökosystem an Tools, die du bauen kannst. Dieses Modul demonstriert Wetter- und Temperaturtools, aber das gleiche `@Tool`-Muster funktioniert für jede Java-Methode — von Datenbankabfragen bis hin zu Zahlungsabwicklung.
-*Jede mit @Tool annotierte Java-Methode steht der KI zur Verfügung — das Muster lässt sich auf Datenbanken, APIs, E-Mail, Dateioperationen und mehr erweitern.*
+*Jede Java-Methode, die mit @Tool annotiert ist, wird für die KI verfügbar — das Muster erstreckt sich auf Datenbanken, APIs, E-Mail, Dateioperationen und mehr.*
-## Wann man toolbasierte Agenten einsetzt
+## Wann man Tool-basierte Agenten verwendet
-Nicht jede Anfrage benötigt Tools. Die Entscheidung hängt davon ab, ob die KI mit externen Systemen interagieren muss oder aus eigenem Wissen antworten kann. Der folgende Leitfaden fasst zusammen, wann Tools sinnvoll sind und wann nicht:
+Nicht jede Anfrage benötigt Tools. Die Entscheidung hängt davon ab, ob die KI mit externen Systemen interagieren muss oder aus ihrem eigenen Wissen antworten kann. Der folgende Leitfaden fasst zusammen, wann Tools Mehrwert bieten und wann sie überflüssig sind:
-*Kurzer Entscheidungsleitfaden – Tools sind für Echtzeitdaten, Berechnungen und Aktionen; allgemeines Wissen und kreative Aufgaben benötigen sie nicht.*
+*Eine schnelle Entscheidungshilfe — Tools sind für Echtzeitdaten, Berechnungen und Aktionen; allgemeines Wissen und kreative Aufgaben brauchen sie nicht.*
## Tools vs RAG
-Die Module 03 und 04 erweitern beide die Fähigkeiten der KI, aber auf grundlegend unterschiedliche Weise. RAG gibt dem Modell Zugriff auf **Wissen** durch das Abrufen von Dokumenten. Tools geben dem Modell die Möglichkeit, **Aktionen** durch Funktionsaufrufe auszuführen. Das folgende Diagramm vergleicht diese beiden Ansätze nebeneinander – vom jeweiligen Ablauf bis zu den Kompromissen zwischen ihnen:
+Module 03 und 04 erweitern beide die Fähigkeiten der KI, aber auf grundverschiedene Weise. RAG gibt dem Modell Zugriff auf **Wissen**, indem Dokumente abgerufen werden. Tools geben dem Modell die Fähigkeit, **Aktionen** auszuführen, indem Funktionen aufgerufen werden. Die folgende Grafik vergleicht beide Ansätze nebeneinander — vom Ablauf jedes Workflows bis zu den jeweiligen Vor- und Nachteilen:
-*RAG ruft Informationen aus statischen Dokumenten ab – Tools führen Aktionen aus und holen dynamische, Echtzeit-Daten. Viele produktive Systeme kombinieren beide.*
+*RAG holt Informationen aus statischen Dokumenten — Tools führen Aktionen aus und holen dynamische, Echtzeitdaten. Viele produktive Systeme kombinieren beides.*
-In der Praxis kombinieren viele produktive Systeme beide Ansätze: RAG, um Antworten auf Basis Ihrer Dokumentation zu verankern, und Tools, um Live-Daten abzurufen oder Operationen durchzuführen.
+In der Praxis kombinieren viele produktive Systeme beide Ansätze: RAG für das Verankern von Antworten in deiner Dokumentation, und Tools für das Abrufen von Live-Daten oder das Ausführen von Operationen.
## Nächste Schritte
@@ -377,11 +377,11 @@ In der Praxis kombinieren viele produktive Systeme beide Ansätze: RAG, um Antwo
---
-**Navigation:** [← Zurück: Modul 03 - RAG](../03-rag/README.md) | [Zurück zum Hauptmenü](../README.md) | [Weiter: Modul 05 - MCP →](../05-mcp/README.md)
+**Navigation:** [← Vorheriges: Modul 03 - RAG](../03-rag/README.md) | [Zurück zum Hauptmenü](../README.md) | [Weiter: Modul 05 - MCP →](../05-mcp/README.md)
---
-**Haftungsausschluss**:
-Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir auf Genauigkeit achten, können automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten. Das Originaldokument in seiner Ursprungssprache ist als maßgebliche Quelle zu betrachten. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Nutzung dieser Übersetzung entstehen.
+**Haftungsausschluss**:
+Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
\ No newline at end of file
diff --git a/translations/de/README.md b/translations/de/README.md
index f222ce6c3..68dd9e1f4 100644
--- a/translations/de/README.md
+++ b/translations/de/README.md
@@ -1,19 +1,19 @@
-# LangChain4j für Einsteiger
+# LangChain4j für Anfänger
-Ein Kurs zum Erstellen von KI-Anwendungen mit LangChain4j und Azure OpenAI GPT-5.2, von einfachem Chat bis hin zu KI-Agenten.
+Ein Kurs zum Erstellen von KI-Anwendungen mit LangChain4j und Azure OpenAI GPT-5.2, vom einfachen Chat bis zu KI-Agenten.
### 🌐 Mehrsprachige Unterstützung
-#### Unterstützt durch GitHub Action (Automatisiert & Immer Aktuell)
+#### Unterstützt über GitHub Action (Automatisiert & Immer Aktuell)
-[Arabisch](../ar/README.md) | [Bengalisch](../bn/README.md) | [Bulgarisch](../bg/README.md) | [Birmanisch (Myanmar)](../my/README.md) | [Chinesisch (Vereinfacht)](../zh-CN/README.md) | [Chinesisch (Traditionell, Hongkong)](../zh-HK/README.md) | [Chinesisch (Traditionell, Macau)](../zh-MO/README.md) | [Chinesisch (Traditionell, Taiwan)](../zh-TW/README.md) | [Kroatisch](../hr/README.md) | [Tschechisch](../cs/README.md) | [Dänisch](../da/README.md) | [Niederländisch](../nl/README.md) | [Estnisch](../et/README.md) | [Finnisch](../fi/README.md) | [Französisch](../fr/README.md) | [Deutsch](./README.md) | [Griechisch](../el/README.md) | [Hebräisch](../he/README.md) | [Hindi](../hi/README.md) | [Ungarisch](../hu/README.md) | [Indonesisch](../id/README.md) | [Italienisch](../it/README.md) | [Japanisch](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Koreanisch](../ko/README.md) | [Litauisch](../lt/README.md) | [Malaiisch](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepalesisch](../ne/README.md) | [Nigerianisches Pidgin](../pcm/README.md) | [Norwegisch](../no/README.md) | [Persisch (Farsi)](../fa/README.md) | [Polnisch](../pl/README.md) | [Portugiesisch (Brasilien)](../pt-BR/README.md) | [Portugiesisch (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Rumänisch](../ro/README.md) | [Russisch](../ru/README.md) | [Serbisch (Kyrillisch)](../sr/README.md) | [Slowakisch](../sk/README.md) | [Slowenisch](../sl/README.md) | [Spanisch](../es/README.md) | [Suaheli](../sw/README.md) | [Schwedisch](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thailändisch](../th/README.md) | [Türkisch](../tr/README.md) | [Ukrainisch](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamesisch](../vi/README.md)
+[Arabisch](../ar/README.md) | [Bengalisch](../bn/README.md) | [Bulgarisch](../bg/README.md) | [Birma (Myanmar)](../my/README.md) | [Chinesisch (Vereinfacht)](../zh-CN/README.md) | [Chinesisch (Traditionell, Hongkong)](../zh-HK/README.md) | [Chinesisch (Traditionell, Macau)](../zh-MO/README.md) | [Chinesisch (Traditionell, Taiwan)](../zh-TW/README.md) | [Kroatisch](../hr/README.md) | [Tschechisch](../cs/README.md) | [Dänisch](../da/README.md) | [Niederländisch](../nl/README.md) | [Estnisch](../et/README.md) | [Finnisch](../fi/README.md) | [Französisch](../fr/README.md) | [Deutsch](./README.md) | [Griechisch](../el/README.md) | [Hebräisch](../he/README.md) | [Hindi](../hi/README.md) | [Ungarisch](../hu/README.md) | [Indonesisch](../id/README.md) | [Italienisch](../it/README.md) | [Japanisch](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Koreanisch](../ko/README.md) | [Litauisch](../lt/README.md) | [Malaiisch](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepalesisch](../ne/README.md) | [Nigerianisches Pidgin](../pcm/README.md) | [Norwegisch](../no/README.md) | [Persisch (Farsi)](../fa/README.md) | [Polnisch](../pl/README.md) | [Portugiesisch (Brasilien)](../pt-BR/README.md) | [Portugiesisch (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Rumänisch](../ro/README.md) | [Russisch](../ru/README.md) | [Serbisch (Kyrillisch)](../sr/README.md) | [Slowakisch](../sk/README.md) | [Slowenisch](../sl/README.md) | [Spanisch](../es/README.md) | [Suaheli](../sw/README.md) | [Schwedisch](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thailändisch](../th/README.md) | [Türkisch](../tr/README.md) | [Ukrainisch](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamesisch](../vi/README.md)
-> **Lieber lokal klonen?**
+> **Bevorzugen Sie das lokale Klonen?**
>
-> Dieses Repository enthält mehr als 50 Sprachübersetzungen, was die Downloadgröße erheblich erhöht. Um ohne Übersetzungen zu klonen, verwenden Sie Sparse Checkout:
+> Dieses Repository enthält über 50 Sprachübersetzungen, die die Download-Größe erheblich erhöhen. Um ohne Übersetzungen zu klonen, verwenden Sie Sparse Checkout:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -29,17 +29,16 @@ Ein Kurs zum Erstellen von KI-Anwendungen mit LangChain4j und Azure OpenAI GPT-5
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> So erhalten Sie alles, was Sie brauchen, um den Kurs mit deutlich schnellerem Download abzuschließen.
+> Dies gibt Ihnen alles, was Sie benötigen, um den Kurs mit einem viel schnelleren Download abzuschließen.
## Inhaltsverzeichnis
-1. [Schnellstart](00-quick-start/README.md) - Einstieg in LangChain4j
-2. [Einführung](01-introduction/README.md) - Erlernen der Grundlagen von LangChain4j
-3. [Prompt Engineering](02-prompt-engineering/README.md) - Meistere effektives Prompt-Design
-4. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Aufbau intelligenter wissensbasierter Systeme
-5. [Werkzeuge](04-tools/README.md) - Integration externer Tools und einfacher Assistenten
-6. [MCP (Model Context Protocol)](05-mcp/README.md) - Arbeiten mit dem Model Context Protocol (MCP) und Agentenmodulen
+1. [Einführung](01-introduction/README.md) - Lernen Sie die Grundlagen von LangChain4j
+2. [Prompt Engineering](02-prompt-engineering/README.md) - Meistern Sie effektives Prompt-Design
+3. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Erstellen Sie intelligente wissensbasierte Systeme
+4. [Werkzeuge](04-tools/README.md) - Integrieren Sie externe Werkzeuge und einfache Assistenten
+5. [MCP (Model Context Protocol)](05-mcp/README.md) - Arbeiten Sie mit dem Model Context Protocol (MCP) und agentischen Modulen
### Video-Durchgänge
@@ -56,55 +55,55 @@ Jedes Modul hat eine begleitende Live-Session, in der wir die Konzepte und den C
## Lernpfad
-**Neu bei LangChain4j?** Schau dir das [Glossar](docs/GLOSSARY.md) für Definitionen wichtiger Begriffe und Konzepte an.
+**Neu bei LangChain4j?** Sehen Sie sich das [Glossar](docs/GLOSSARY.md) für Definitionen wichtiger Begriffe und Konzepte an.
> **Schnellstart**
-1. Forke dieses Repository auf dein GitHub-Konto
-2. Klicke auf **Code** → Tab **Codespaces** → **...** → **Neu mit Optionen...**
-3. Verwende die Standardeinstellungen – damit wird der für diesen Kurs erstellte Entwicklungscontainer ausgewählt
-4. Klicke auf **Codespace erstellen**
-5. Warte 5-10 Minuten, bis die Umgebung bereit ist
-6. Springe direkt zu [Schnellstart](./00-quick-start/README.md), um loszulegen!
+1. Forken Sie dieses Repository in Ihrem GitHub-Konto
+2. Klicken Sie auf **Code** → **Codespaces** Tab → **...** → **Neu mit Optionen...**
+3. Verwenden Sie die Standardwerte – dies wählt den für diesen Kurs erstellten Entwicklungscontainer aus
+4. Klicken Sie auf **Codespace erstellen**
+5. Warten Sie 5-10 Minuten, bis die Umgebung bereit ist
+6. Gehen Sie direkt zur [Einführung](./01-introduction/README.md), um zu starten!
-Nach Abschluss der Module erkunde den [Testleitfaden](docs/TESTING.md), um LangChain4j-Testkonzepte in Aktion zu sehen.
+Nach Abschluss der Module erkunden Sie den [Testleitfaden](docs/TESTING.md), um LangChain4j-Testkonzepte in Aktion zu sehen.
-> **Hinweis:** Dieses Training verwendet sowohl GitHub-Modelle als auch Azure OpenAI. Das Modul [Schnellstart](00-quick-start/README.md) verwendet GitHub-Modelle (kein Azure-Abonnement erforderlich), während die Module 1–5 Azure OpenAI nutzen. Erstelle ein [KOSTENLOSES Azure-Konto](https://aka.ms/azure-free-account), falls du noch keines hast.
+> **Hinweis:** Diese Schulung verwendet Azure OpenAI. Starten Sie mit einem [KOSTENLOSEN Azure-Konto](https://aka.ms/azure-free-account), wenn Sie noch keines haben.
## Lernen mit GitHub Copilot
-Um schnell mit dem Codieren zu beginnen, öffne dieses Projekt in einem GitHub Codespace oder deiner lokalen IDE mit dem bereitgestellten Devcontainer. Der in diesem Kurs verwendete Devcontainer ist vorkonfiguriert mit GitHub Copilot für KI-gestütztes Paarprogrammieren.
+Um schnell mit dem Programmieren zu beginnen, öffnen Sie dieses Projekt in einem GitHub Codespace oder in Ihrer lokalen IDE mit dem bereitgestellten Devcontainer. Der in diesem Kurs verwendete Devcontainer ist vorkonfiguriert mit GitHub Copilot für AI-Paarprogrammierung.
-Jedes Codebeispiel enthält vorgeschlagene Fragen, die du GitHub Copilot stellen kannst, um dein Verständnis zu vertiefen. Achte auf die 💡/🤖-Hinweise in:
+Jedes Codebeispiel enthält vorgeschlagene Fragen, die Sie GitHub Copilot stellen können, um Ihr Verständnis zu vertiefen. Achten Sie auf die 💡/🤖 Hinweise in:
-- **Java-Dateikopfzeilen** – Fragen speziell zu jedem Beispiel
-- **Modul-READMEs** – Erkundungsfragen nach Codebeispielen
+- **Java-Dateiköpfen** - Fragen, die spezifisch für jedes Beispiel sind
+- **Modul-READMEs** - Erkundungsaufforderungen nach Codebeispielen
-**So nutzt du es:** Öffne eine beliebige Code-Datei und stelle Copilot die vorgeschlagenen Fragen. Er hat den vollständigen Kontext des Codes und kann erklären, erweitern und Alternativen vorschlagen.
+**Wie man es verwendet:** Öffnen Sie eine beliebige Code-Datei und stellen Sie Copilot die vorgeschlagenen Fragen. Es hat vollen Kontext des Codes und kann erklären, erweitern und Alternativen vorschlagen.
-Möchtest du mehr lernen? Schau dir [Copilot für KI-Paarprogrammierung](https://aka.ms/GitHubCopilotAI) an.
+Möchten Sie mehr lernen? Sehen Sie sich [Copilot für AI-Paarprogrammierung](https://aka.ms/GitHubCopilotAI) an.
## Zusätzliche Ressourcen
### LangChain
-[](https://aka.ms/langchain4j-for-beginners)
-[](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
-[](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin)
+[](https://aka.ms/langchain4j-for-beginners)
+[](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
+[](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin)
---
### Azure / Edge / MCP / Agenten
-[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
---
### Generative KI-Serie
-[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
@@ -112,39 +111,40 @@ Möchtest du mehr lernen? Schau dir [Copilot für KI-Paarprogrammierung](https:/
---
### Kernlernen
-[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
-[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
+
+[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
-### Copilot-Serie
-[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
+### Copilot Serie
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
## Hilfe erhalten
-Wenn Sie nicht weiterkommen oder Fragen zur Entwicklung von KI-Anwendungen haben, treten Sie bei:
+Wenn Sie nicht weiterkommen oder Fragen zum Erstellen von KI-Apps haben, treten Sie bei:
[](https://aka.ms/foundry/discord)
-Wenn Sie Produktfeedback oder Fehler beim Entwickeln haben, besuchen Sie:
+Wenn Sie Produktfeedback oder Fehler beim Erstellen haben, besuchen Sie:
[](https://aka.ms/foundry/forum)
## Lizenz
-MIT-Lizenz – Details finden Sie in der [LICENSE](../../LICENSE)-Datei.
+MIT-Lizenz – Details siehe [LICENSE](../../LICENSE) Datei.
---
-**Haftungsausschluss**:
-Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, sollten Sie beachten, dass automatische Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Für wichtige Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die durch die Verwendung dieser Übersetzung entstehen.
+**Haftungsausschluss**:
+Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
\ No newline at end of file
diff --git a/translations/de/docs/GLOSSARY.md b/translations/de/docs/GLOSSARY.md
index 86c090c2e..ee4d770a8 100644
--- a/translations/de/docs/GLOSSARY.md
+++ b/translations/de/docs/GLOSSARY.md
@@ -2,175 +2,175 @@
## Inhaltsverzeichnis
-- [Kernkonzepte](../../../docs)
-- [LangChain4j-Komponenten](../../../docs)
-- [KI/ML-Konzepte](../../../docs)
-- [Guardrails](../../../docs)
-- [Prompt-Engineering](../../../docs)
-- [RAG (Retrieval-Augmented Generation)](../../../docs)
-- [Agenten und Tools](../../../docs)
-- [Agentisches Modul](../../../docs)
-- [Model Context Protocol (MCP)](../../../docs)
-- [Azure-Dienste](../../../docs)
-- [Testen und Entwicklung](../../../docs)
-
-Schnelle Referenz für Begriffe und Konzepte, die im gesamten Kurs verwendet werden.
+- [Kernkonzepte](#kernkonzepte)
+- [LangChain4j-Komponenten](#langchain4j-komponenten)
+- [KI/ML-Konzepte](#kiml-konzepte)
+- [Schutzmaßnahmen](#schutzmaßnahmen)
+- [Prompt Engineering](#prompt-engineering---module-02)
+- [RAG (Retrieval-Augmented Generation)](#rag-retrieval-augmented-generation---module-03)
+- [Agenten und Werkzeuge](#agents-and-tools---module-04)
+- [Agentisches Modul](#agentic-module---module-05)
+- [Model Context Protocol (MCP)](#model-context-protocol-mcp---module-05)
+- [Azure-Dienste](#azure-services---module-01)
+- [Testen und Entwicklung](#testing-and-development---testing-guide)
+
+Kurze Referenz für Begriffe und Konzepte, die im gesamten Kurs verwendet werden.
## Kernkonzepte
-**KI-Agent** – System, das KI verwendet, um autonom zu denken und zu handeln. [Modul 04](../04-tools/README.md)
+**KI-Agent** – System, das KI nutzt, um autonom zu denken und zu handeln. [Modul 04](../04-tools/README.md)
-**Chain** – Abfolge von Operationen, bei der die Ausgabe in den nächsten Schritt eingeht.
+**Kette** – Abfolge von Operationen, bei denen die Ausgabe in den nächsten Schritt fließt.
-**Chunking** – Aufteilen von Dokumenten in kleinere Stücke. Typisch: 300–500 Tokens mit Überlappung. [Modul 03](../03-rag/README.md)
+**Chunking** – Aufteilen von Dokumenten in kleinere Stücke. Typisch: 300-500 Tokens mit Überlappung. [Modul 03](../03-rag/README.md)
**Kontextfenster** – Maximale Tokens, die ein Modell verarbeiten kann. GPT-5.2: 400K Tokens (bis zu 272K Eingabe, 128K Ausgabe).
-**Embeddings** – Numerische Vektoren, die die Bedeutung von Text repräsentieren. [Modul 03](../03-rag/README.md)
+**Embeddings** – Numerische Vektoren, die die Bedeutung von Text darstellen. [Modul 03](../03-rag/README.md)
-**Funktionsaufruf** – Modell erzeugt strukturierte Anfragen, um externe Funktionen aufzurufen. [Modul 04](../04-tools/README.md)
+**Funktionsaufruf** – Modell generiert strukturierte Anfragen, um externe Funktionen aufzurufen. [Modul 04](../04-tools/README.md)
-**Halluzination** – Wenn Modelle falsche, aber plausible Informationen generieren.
+**Halluzination** – Wenn Modelle falsche, aber plausible Informationen erzeugen.
**Prompt** – Texteingabe an ein Sprachmodell. [Modul 02](../02-prompt-engineering/README.md)
-**Semantische Suche** – Suche nach Bedeutung mittels Embeddings, nicht Schlüsselwörtern. [Modul 03](../03-rag/README.md)
+**Semantische Suche** – Suche nach Bedeutung mit Embeddings, nicht mit Schlüsselwörtern. [Modul 03](../03-rag/README.md)
-**Zustandsbehaftet vs. zustandslos** – Zustandslos: kein Gedächtnis. Zustandsbehaftet: speichert Gesprächshistorie. [Modul 01](../01-introduction/README.md)
+**Zustandsbehaftet vs. Zustandslos** – Zustandslos: kein Gedächtnis. Zustandsbehaftet: speichert Gesprächshistorie. [Modul 01](../01-introduction/README.md)
-**Tokens** – Grundlegende Textbausteine, die Modelle verarbeiten. Beeinflussen Kosten und Limits. [Modul 01](../01-introduction/README.md)
+**Tokens** – Basiseinheiten von Text, die Modelle verarbeiten. Beeinflussen Kosten und Limits. [Modul 01](../01-introduction/README.md)
-**Tool Chaining** – Sequenzielle Ausführung von Tools, wobei Ausgabe den nächsten Aufruf informiert. [Modul 04](../04-tools/README.md)
+**Tool Chaining** – Sequenzielle Ausführung von Werkzeugen, bei der die Ausgabe den nächsten Aufruf informiert. [Modul 04](../04-tools/README.md)
## LangChain4j-Komponenten
-**AiServices** – Erstellt typsichere KI-Service-Interfaces.
+**AiServices** – Erstellt typsichere KI-Service-Schnittstellen.
-**OpenAiOfficialChatModel** – Einheitlicher Client für OpenAI- und Azure OpenAI-Modelle.
+**OpenAiOfficialChatModel** – Vereinheitlichter Client für OpenAI und Azure OpenAI Modelle.
-**OpenAiOfficialEmbeddingModel** – Erzeugt Embeddings mit OpenAI Official Client (unterstützt OpenAI und Azure OpenAI).
+**OpenAiOfficialEmbeddingModel** – Erstellt Embeddings mittels OpenAI Official Client (unterstützt sowohl OpenAI als auch Azure OpenAI).
-**ChatModel** – Kerninterface für Sprachmodelle.
+**ChatModel** – Kernschnittstelle für Sprachmodelle.
-**ChatMemory** – Speichert Gesprächshistorie.
+**ChatMemory** – Speichert die Gesprächshistorie.
-**ContentRetriever** – Findet relevante Dokumentabschnitte für RAG.
+**ContentRetriever** – Findet relevante Dokumentausschnitte für RAG.
-**DocumentSplitter** – Teilt Dokumente in Abschnitte auf.
+**DocumentSplitter** – Teilt Dokumente in Stücke.
**EmbeddingModel** – Wandelt Text in numerische Vektoren um.
**EmbeddingStore** – Speichert und ruft Embeddings ab.
-**MessageWindowChatMemory** – Pflegt ein gleitendes Fenster der letzten Nachrichten.
+**MessageWindowChatMemory** – Speichert einen gleitenden Fensterbereich der letzten Nachrichten.
-**PromptTemplate** – Erstellt wiederverwendbare Prompts mit `{{variable}}`-Platzhaltern.
+**PromptTemplate** – Erzeugt wiederverwendbare Prompts mit `{{variable}}` Platzhaltern.
-**TextSegment** – Textabschnitt mit Metadaten. Verwendet in RAG.
+**TextSegment** – Textabschnitt mit Metadaten. Wird in RAG verwendet.
-**ToolExecutionRequest** – Repräsentiert eine Tool-Ausführungsanfrage.
+**ToolExecutionRequest** – Stellt eine Anfrage zur Tool-Ausführung dar.
-**UserMessage / AiMessage / SystemMessage** – Nachrichtentypen im Gespräch.
+**UserMessage / AiMessage / SystemMessage** – Nachrichtentypen in Gesprächen.
## KI/ML-Konzepte
-**Few-Shot Learning** – Beispiele in Prompts bereitstellen. [Modul 02](../02-prompt-engineering/README.md)
+**Few-Shot Learning** – Beispiele in Prompts geben. [Modul 02](../02-prompt-engineering/README.md)
-**Großes Sprachmodell (LLM)** – KI-Modelle, die auf umfangreichen Textdaten trainiert sind.
+**Großes Sprachmodell (LLM)** – KI-Modelle, die auf großen Textmengen trainiert sind.
-**Reasoning Effort** – GPT-5.2-Parameter zur Steuerung der Denktiefe. [Modul 02](../02-prompt-engineering/README.md)
+**Reasoning Effort** – GPT-5.2 Parameter zur Steuerung der Denkintensität. [Modul 02](../02-prompt-engineering/README.md)
-**Temperatur** – Steuert Zufälligkeit der Ausgabe. Niedrig=deterministisch, hoch=kreativ.
+**Temperatur** – Steuert die Zufälligkeit der Ausgabe. Niedrig=deterministisch, hoch=kreativ.
-**Vektordatenbank** – Spezialisierte Datenbank für Embeddings. [Modul 03](../03-rag/README.md)
+**Vektor-Datenbank** – Spezialisierte Datenbank für Embeddings. [Modul 03](../03-rag/README.md)
**Zero-Shot Learning** – Aufgaben ohne Beispiele ausführen. [Modul 02](../02-prompt-engineering/README.md)
-## Guardrails - [Modul 00](../00-quick-start/README.md)
+## Schutzmaßnahmen
-**Defense in Depth** – Mehrschichtiger Sicherheitsansatz, der Anwendungsebene-Guardrails mit Sicherheitfiltern des Anbieters kombiniert.
+**Verteidigung in der Tiefe** – Mehrschichtiger Sicherheitsansatz, der Anwendungsschutz mit Anbietersicherheitsfiltern kombiniert.
-**Hard Block** – Anbieter wirft HTTP-400-Fehler bei schweren Inhaltsverstößen.
+**Hard Block** – Provider wirft HTTP 400 Fehler bei schweren Inhaltsverstößen.
-**InputGuardrail** – LangChain4j-Interface zur Validierung von Benutzereingaben vor dem Erreichen des LLM. Spart Kosten und Latenz durch frühes Sperren schädlicher Prompts.
+**InputGuardrail** – LangChain4j-Schnittstelle zur Validierung der Benutzereingabe vor Übergabe an das LLM. Spart Kosten und Latenz, indem schädliche Prompts früh blockiert werden.
-**InputGuardrailResult** – Rückgabetyp für Guardrail-Validierung: `success()` oder `fatal("reason")`.
+**InputGuardrailResult** – Rückgabetyp für Guardrail-Validierung: `success()` oder `fatal("Grund")`.
-**OutputGuardrail** – Interface zur Validierung von KI-Antworten vor der Rückgabe an Nutzer.
+**OutputGuardrail** – Schnittstelle zur Validierung von KI-Antworten, bevor sie an Benutzer zurückgegeben werden.
-**Sicherheitsfilter des Anbieters** – Eingebaute Inhaltsfilter von KI-Anbietern (z.B. GitHub Models), die Verstöße auf API-Ebene erfassen.
+**Provider Safety Filters** – Eingebaute Inhaltsfilter der KI-Anbieter (z. B. Azure OpenAI), die Verstöße auf API-Ebene erkennen.
-**Soft Refusal** – Modell lehnt höflich ab, ohne Fehler zu werfen.
+**Soft Refusal** – Modell lehnt höflich ab zu antworten, ohne einen Fehler auszulösen.
-## Prompt-Engineering - [Modul 02](../02-prompt-engineering/README.md)
+## Prompt Engineering - [Modul 02](../02-prompt-engineering/README.md)
-**Chain-of-Thought** – Schrittweises Denken für bessere Genauigkeit.
+**Chain-of-Thought** – Schritt-für-Schritt-Denken für höhere Genauigkeit.
-**Eingeschränkte Ausgabe** – Erzwingung eines bestimmten Formats oder einer Struktur.
+**Eingeschränkte Ausgabe** – Erzwingt bestimmtes Format oder Struktur.
-**Hohe Nachdrücklichkeit** – GPT-5.2-Muster für gründliches Denken.
+**Hohe Eiferbereitschaft** – GPT-5.2 Muster für gründliches Nachdenken.
-**Niedrige Nachdrücklichkeit** – GPT-5.2-Muster für schnelle Antworten.
+**Niedrige Eiferbereitschaft** – GPT-5.2 Muster für schnelle Antworten.
-**Multi-Turn-Konversation** – Kontext über mehrere Austausch hinweg aufrechterhalten.
+**Multi-Turn Conversation** – Kontext über mehrere Austausche beibehalten.
-**Rollenspezifisches Prompting** – Modellpersona über Systemnachrichten festlegen.
+**Rollenbasiertes Prompting** – Modell-Persona durch Systemnachrichten festlegen.
**Selbstreflexion** – Modell bewertet und verbessert seine Ausgabe.
-**Strukturierte Analyse** – Festes Bewertungsframework.
+**Strukturierte Analyse** – Fester Bewertungsrahmen.
-**Task Execution Pattern** – Planen → Ausführen → Zusammenfassen.
+**Aufgaben-Ausführungsmuster** – Planen → Ausführen → Zusammenfassen.
## RAG (Retrieval-Augmented Generation) - [Modul 03](../03-rag/README.md)
-**Dokumentenverarbeitungspipeline** – Laden → Aufteilen → Einbetten → Speichern.
+**Dokumentenverarbeitungspipeline** – Laden → chunking → embedding → speichern.
-**In-Memory Embedding Store** – Nicht persistenter Speicher zum Testen.
+**In-Memory Embedding Store** – Nicht persistenter Speicher für Tests.
-**RAG** – Kombination aus Abruf und Generierung zur Fundierung von Antworten.
+**RAG** – Kombiniert Abruf mit Generierung, um Antworten zu belegen.
-**Ähnlichkeitsscore** – Maß (0–1) für semantische Ähnlichkeit.
+**Ähnlichkeitsscore** – Maß (0-1) für semantische Ähnlichkeit.
-**Quellenverweis** – Metadaten zu abgerufenen Inhalten.
+**Quellenreferenz** – Metadaten über abgerufene Inhalte.
-## Agenten und Tools - [Modul 04](../04-tools/README.md)
+## Agenten und Werkzeuge - [Modul 04](../04-tools/README.md)
-**@Tool Annotation** – Kennzeichnet Java-Methoden als KI-aufrufbare Tools.
+**@Tool Annotation** – Markiert Java-Methoden als von KI aufrufbare Werkzeuge.
-**ReAct Pattern** – Reason → Act → Observe → Repeat.
+**ReAct Muster** – Überlegen → Handeln → Beobachten → Wiederholen.
-**Sitzungsverwaltung** – Separate Kontexte für verschiedene Nutzer.
+**Sitzungsmanagement** – Getrennte Kontexte für verschiedene Benutzer.
-**Tool** – Funktion, die ein KI-Agent aufrufen kann.
+**Werkzeug** – Funktion, die ein KI-Agent aufrufen kann.
-**Toolbeschreibung** – Dokumentation von Zweck und Parametern eines Tools.
+**Werkzeugbeschreibung** – Dokumentation von Zweck und Parametern.
## Agentisches Modul - [Modul 05](../05-mcp/README.md)
-**@Agent Annotation** – Kennzeichnet Interfaces als KI-Agenten mit deklarativer Verhaltensdefinition.
+**@Agent Annotation** – Markiert Schnittstellen als KI-Agenten mit deklarativer Verhaltensdefinition.
-**Agent Listener** – Hook zur Überwachung der Agentenausführung via `beforeAgentInvocation()` und `afterAgentInvocation()`.
+**Agent Listener** – Hook zur Überwachung der Agentausführung via `beforeAgentInvocation()` und `afterAgentInvocation()`.
-**Agentic Scope** – Gemeinsamer Speicher, in dem Agenten Ausgaben mit `outputKey` speichern, damit nachfolgende Agenten sie konsumieren können.
+**Agentic Scope** – Gemeinsamer Speicher, in dem Agenten Ergebnisse unter `outputKey` ablegen, damit nachfolgende Agenten sie verwenden können.
-**AgenticServices** – Fabrik zur Erstellung von Agenten mittels `agentBuilder()` und `supervisorBuilder()`.
+**AgenticServices** – Fabrik für das Erstellen von Agenten über `agentBuilder()` und `supervisorBuilder()`.
-**Conditional Workflow** – Route basierend auf Bedingungen zu verschiedenen Spezialagenten.
+**Conditional Workflow** – Weiterleitung basierend auf Bedingungen zu verschiedenen Spezial-Agenten.
-**Human-in-the-Loop** – Workflow-Muster mit menschlichen Kontrollpunkten zur Genehmigung oder Inhaltsprüfung.
+**Human-in-the-Loop** – Workflow-Muster mit menschlichen Kontrollpunkten für Freigabe oder Inhaltsprüfung.
-**langchain4j-agentic** – Maven-Abhängigkeit für deklarativen Agentenbau (experimentell).
+**langchain4j-agentic** – Maven-Abhängigkeit für deklaratives Agentenbauen (experimentell).
-**Loop Workflow** – Wiederholte Agentenausführung, bis eine Bedingung erfüllt ist (z.B. Qualitätswert ≥ 0,8).
+**Loop Workflow** – Wiederholte Agentenausführung bis eine Bedingung erfüllt ist (z. B. Qualitätswert ≥ 0.8).
-**outputKey** – Agenten-Annotierungsparameter, der angibt, wo Ergebnisse im Agentic Scope gespeichert werden.
+**outputKey** – Agentenannotation-Parameter, der angibt, wo Ergebnisse im Agentic Scope gespeichert werden.
**Parallel Workflow** – Gleichzeitiges Ausführen mehrerer Agenten für unabhängige Aufgaben.
**Response Strategy** – Wie der Supervisor die finale Antwort formuliert: LAST, SUMMARY oder SCORED.
-**Sequential Workflow** – Agenten in Reihenfolge ausführen, bei der Ausgabe zum nächsten Schritt fließt.
+**Sequential Workflow** – Agenten nacheinander ausführen, wobei die Ausgabe zum nächsten Schritt fließt.
**Supervisor Agent Pattern** – Fortgeschrittenes agentisches Muster, bei dem ein Supervisor-LLM dynamisch entscheidet, welche Unteragenten aufgerufen werden.
@@ -178,47 +178,45 @@ Schnelle Referenz für Begriffe und Konzepte, die im gesamten Kurs verwendet wer
**langchain4j-mcp** – Maven-Abhängigkeit für MCP-Integration in LangChain4j.
-**MCP** – Model Context Protocol: Standard für die Verbindung von KI-Apps mit externen Tools. Einmal bauen, überall verwenden.
+**MCP** – Model Context Protocol: Standard zur Verbindung von KI-Anwendungen mit externen Werkzeugen. Einmal bauen, überall verwenden.
-**MCP Client** – Anwendung, die sich mit MCP-Servern verbindet, um Tools zu entdecken und zu nutzen.
+**MCP Client** – Anwendung, die sich mit MCP-Servern verbindet, um Werkzeuge zu entdecken und zu nutzen.
-**MCP Server** – Dienst, der Tools über MCP mit klaren Beschreibungen und Parameterschemata bereitstellt.
+**MCP Server** – Dienst, der Werkzeuge via MCP mit klaren Beschreibungen und Parameterschemata bereitstellt.
-**McpToolProvider** – LangChain4j-Komponente, die MCP-Tools für KI-Dienste und Agenten einbindet.
+**McpToolProvider** – LangChain4j-Komponente, die MCP-Werkzeuge für KI-Services und Agenten einbindet.
-**McpTransport** – Interface für MCP-Kommunikation. Implementierungen umfassen Stdio und HTTP.
+**McpTransport** – Schnittstelle für MCP-Kommunikation. Implementierungen umfassen Stdio und HTTP.
-**Stdio Transport** – Lokaler Prozess-Transport via stdin/stdout. Nützlich für Dateisystemzugriff oder Kommandozeilentools.
+**Stdio Transport** – Lokaler Prozess-Transport über stdin/stdout. Nützlich für Dateisystemzugriff oder Kommandozeilenwerkzeuge.
-**StdioMcpTransport** – LangChain4j-Implementation, die MCP-Server als Nebenprozess startet.
+**StdioMcpTransport** – LangChain4j-Implementierung, die den MCP-Server als Unterprozess startet.
-**Tool Discovery** – Client fragt Server nach verfügbaren Tools mit Beschreibungen und Schemata ab.
+**Werkzeugentdeckung** – Client fragt Server nach verfügbaren Werkzeugen mit Beschreibungen und Schemata ab.
## Azure-Dienste - [Modul 01](../01-introduction/README.md)
-**Azure AI Search** – Cloud-Suche mit Vektorfähigkeiten. [Modul 03](../03-rag/README.md)
+**Azure AI Search** – Cloudsuche mit Vektorfähigkeiten. [Modul 03](../03-rag/README.md)
**Azure Developer CLI (azd)** – Stellt Azure-Ressourcen bereit.
-**Azure OpenAI** – Microsofts Unternehmens-KI-Dienst.
+**Azure OpenAI** – Microsofts KI-Enterprise-Dienst.
-**Bicep** – Azure-Infrastructure-as-Code-Sprache. [Infrastructure Guide](../01-introduction/infra/README.md)
+**Bicep** – Infrastructure-as-Code-Sprache für Azure. [Infrastruktur-Anleitung](../01-introduction/infra/README.md)
-**Deployment-Name** – Name für Modellausrollung in Azure.
+**Bereitstellungsname** – Name für Modellbereitstellung in Azure.
-**GPT-5.2** – Neuestes OpenAI-Modell mit Steuerung der Denkprozesse. [Modul 02](../02-prompt-engineering/README.md)
+**GPT-5.2** – Neuestes OpenAI-Modell mit Steuerung der Denkweise. [Modul 02](../02-prompt-engineering/README.md)
## Testen und Entwicklung - [Testing Guide](TESTING.md)
**Dev Container** – Containerisierte Entwicklungsumgebung. [Konfiguration](../../../.devcontainer/devcontainer.json)
-**GitHub Models** – Kostenlose KI-Modellspielwiese. [Modul 00](../00-quick-start/README.md)
+**In-Memory Testing** – Testen mit im Speicher gehaltenen Daten.
-**In-Memory Testing** – Testen mit In-Memory-Speicher.
+**Integration Testing** – Testen mit echter Infrastruktur.
-**Integration Testing** – Testen mit realer Infrastruktur.
-
-**Maven** – Java-Build-Automatisierungswerkzeug.
+**Maven** – Java-Build-Automatisierungstool.
**Mockito** – Java-Mocking-Framework.
@@ -227,6 +225,6 @@ Schnelle Referenz für Begriffe und Konzepte, die im gesamten Kurs verwendet wer
---
-**Haftungsausschluss**:
-Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, kann es bei automatischen Übersetzungen zu Fehlern oder Ungenauigkeiten kommen. Das Originaldokument in seiner Ursprungssprache ist als maßgebliche Quelle anzusehen. Für wichtige Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
+**Haftungsausschluss**:
+Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
\ No newline at end of file
diff --git a/translations/de/docs/TESTING.md b/translations/de/docs/TESTING.md
index 5cefed7f7..6801ea3e9 100644
--- a/translations/de/docs/TESTING.md
+++ b/translations/de/docs/TESTING.md
@@ -2,15 +2,15 @@
## Inhaltsverzeichnis
-- [Schnellstart](../../../docs)
-- [Was die Tests abdecken](../../../docs)
-- [Tests ausführen](../../../docs)
-- [Tests in VS Code ausführen](../../../docs)
-- [Testmuster](../../../docs)
-- [Testphilosophie](../../../docs)
-- [Nächste Schritte](../../../docs)
+- [Schnellstart](#schnellstart)
+- [Was die Tests abdecken](#was-die-tests-abdecken)
+- [Tests ausführen](#tests-ausführen)
+- [Tests in VS Code ausführen](#tests-in-vs-code-ausführen)
+- [Testmuster](#testmuster)
+- [Testphilosophie](#testphilosophie)
+- [Nächste Schritte](#nächste-schritte)
-Diese Anleitung führt Sie durch die Tests, die zeigen, wie man KI-Anwendungen testet, ohne API-Schlüssel oder externe Dienste zu benötigen.
+Dieser Leitfaden führt Sie durch die Tests, die zeigen, wie man KI-Anwendungen testet, ohne API-Schlüssel oder externe Dienste zu benötigen.
## Schnellstart
@@ -26,32 +26,31 @@ mvn test
mvn --% test
```
-Wenn alle Tests bestanden sind, sollten Sie eine Ausgabe wie im folgenden Screenshot sehen – die Tests laufen ohne Fehler durch.
+Wenn alle Tests bestehen, sollten Sie eine Ausgabe wie im Screenshot unten sehen — Tests werden fehlerfrei ausgeführt.
-
+
*Erfolgreiche Testausführung, die zeigt, dass alle Tests ohne Fehler bestanden wurden*
## Was die Tests abdecken
-Dieser Kurs konzentriert sich auf **Unit-Tests**, die lokal ausgeführt werden. Jeder Test zeigt ein bestimmtes LangChain4j-Konzept isoliert. Die untenstehende Testpyramide zeigt, wo Unit-Tests stehen – sie bilden die schnelle und zuverlässige Grundlage, auf der der Rest Ihrer Teststrategie aufbaut.
+Dieser Kurs konzentriert sich auf **Unit-Tests**, die lokal ausgeführt werden. Jeder Test demonstriert ein spezifisches LangChain4j-Konzept isoliert. Die untenstehende Testpyramide zeigt, wo Unit-Tests passen — sie bilden die schnelle, zuverlässige Grundlage, auf der Ihre restliche Teststrategie aufbaut.
-
+
-*Testpyramide, die das Verhältnis zwischen Unit-Tests (schnell, isoliert), Integrationstests (echte Komponenten) und End-to-End-Tests zeigt. Dieses Training behandelt Unit-Tests.*
+*Testpyramide, die das Gleichgewicht zwischen Unit-Tests (schnell, isoliert), Integrationstests (echte Komponenten) und End-to-End-Tests zeigt. Dieses Training behandelt Unit-Tests.*
| Modul | Tests | Fokus | Wichtige Dateien |
-|--------|-------|-------|-----------|
-| **00 - Schnellstart** | 6 | Prompt-Vorlagen und Variablensubstitution | `SimpleQuickStartTest.java` |
-| **01 - Einführung** | 8 | Gesprächsspeicher und zustandsbehafteter Chat | `SimpleConversationTest.java` |
-| **02 - Prompt-Engineering** | 12 | GPT-5.2-Muster, Eifer-Level, strukturierte Ausgabe | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | Dokumentenintegration, Einbettungen, Ähnlichkeitssuche | `DocumentServiceTest.java` |
-| **04 - Werkzeuge** | 12 | Funktionsaufruf und Werkzeugverkettung | `SimpleToolsTest.java` |
+|--------|-------|-------|------------------|
+| **01 - Einführung** | 8 | Gesprächsspeicher und zustandsorientierter Chat | `SimpleConversationTest.java` |
+| **02 - Prompt Engineering** | 12 | GPT-5.2-Muster, Bereitschaftsgrade, strukturierte Ausgabe | `SimpleGpt5PromptTest.java` |
+| **03 - RAG** | 10 | Dokumentenaufnahme, Einbettungen, Ähnlichkeitssuche | `DocumentServiceTest.java` |
+| **04 - Tools** | 12 | Funktionsaufrufe und Werkzeugverkettung | `SimpleToolsTest.java` |
| **05 - MCP** | 8 | Model Context Protocol mit Stdio-Transport | `SimpleMcpTest.java` |
## Tests ausführen
-**Führen Sie alle Tests aus dem Root-Verzeichnis aus:**
+**Alle Tests im Root-Verzeichnis ausführen:**
**Bash:**
```bash
@@ -63,23 +62,23 @@ mvn test
mvn --% test
```
-**Führen Sie Tests für ein bestimmtes Modul aus:**
+**Tests für ein bestimmtes Modul ausführen:**
**Bash:**
```bash
cd 01-introduction && mvn test
-# Oder vom Wurzelverzeichnis aus
+# Oder vom Stammverzeichnis
mvn test -pl 01-introduction
```
**PowerShell:**
```powershell
cd 01-introduction; mvn --% test
-# Oder vom Stammverzeichnis aus
+# Oder vom Stamm
mvn --% test -pl 01-introduction
```
-**Führen Sie eine einzelne Testklasse aus:**
+**Eine einzelne Testklasse ausführen:**
**Bash:**
```bash
@@ -91,45 +90,45 @@ mvn test -Dtest=SimpleConversationTest
mvn --% test -Dtest=SimpleConversationTest
```
-**Führen Sie eine bestimmte Testmethode aus:**
+**Eine spezifische Testmethode ausführen:**
**Bash:**
```bash
-mvn test -Dtest=SimpleConversationTest#Gesprächsverlauf beibehalten
+mvn test -Dtest=SimpleConversationTest#Soll die Gesprächshistorie beibehalten werden
```
**PowerShell:**
```powershell
-mvn --% test -Dtest=SimpleConversationTest#Unterhaltungshistorie beibehalten
+mvn --% test -Dtest=SimpleConversationTest#sollte die Konversationshistorie beibehalten
```
## Tests in VS Code ausführen
Wenn Sie Visual Studio Code verwenden, bietet der Test-Explorer eine grafische Oberfläche zum Ausführen und Debuggen von Tests.
-
+
-*VS Code Test-Explorer zeigt den Testbaum mit allen Java-Testklassen und einzelnen Testmethoden*
+*VS Code Test Explorer zeigt den Testbaum mit allen Java-Testklassen und einzelnen Testmethoden*
-**So führen Sie Tests in VS Code aus:**
+**Um Tests in VS Code auszuführen:**
-1. Öffnen Sie den Test-Explorer, indem Sie auf das Reagenzglas-Symbol in der Aktivitätsleiste klicken.
-2. Erweitern Sie den Testbaum, um alle Module und Testklassen zu sehen.
-3. Klicken Sie auf die Wiedergabetaste neben einem Test, um ihn einzeln auszuführen.
-4. Klicken Sie auf „Alle Tests ausführen“, um die gesamte Suite zu starten.
-5. Klicken Sie mit der rechten Maustaste auf einen Test und wählen Sie „Test debuggen“, um Haltepunkte zu setzen und den Code schrittweise durchzugehen.
+1. Öffnen Sie den Test-Explorer, indem Sie auf das Reagenzglas-Symbol in der Aktivitätsleiste klicken
+2. Erweitern Sie den Testbaum, um alle Module und Testklassen zu sehen
+3. Klicken Sie neben einem Test auf die Wiedergabetaste, um ihn einzeln auszuführen
+4. Klicken Sie auf "Alle Tests ausführen", um die gesamte Suite zu starten
+5. Rechtsklicken Sie auf einen Test und wählen Sie "Test debuggen", um Breakpoints zu setzen und den Code schrittweise zu durchlaufen
-Der Test-Explorer zeigt grüne Häkchen für bestandene Tests und gibt bei Fehlern detaillierte Fehlermeldungen aus.
+Der Test-Explorer zeigt grüne Häkchen bei bestandenen Tests und liefert detaillierte Fehlermeldungen, wenn Tests fehlschlagen.
## Testmuster
-### Muster 1: Testen von Promptvorlagen
+### Muster 1: Testen von Prompt-Vorlagen
-Das einfachste Muster testet Promptvorlagen ohne Aufruf eines KI-Modells. Sie überprüfen, ob die Variablensubstitution korrekt funktioniert und Prompts wie erwartet formatiert werden.
+Das einfachste Muster testet Prompt-Vorlagen, ohne ein KI-Modell aufzurufen. Sie überprüfen, dass die Variablenersetzung korrekt funktioniert und Prompts wie erwartet formatiert sind.
-
+
-*Testing von Promptvorlagen, das den Fluss der Variablensubstitution zeigt: Vorlage mit Platzhaltern → angewendete Werte → überprüfte formatierte Ausgabe*
+*Testen von Prompt-Vorlagen, das den Ablauf der Variablenersetzung zeigt: Vorlage mit Platzhaltern → Werte angewendet → formatierte Ausgabe geprüft*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-Dieser Test befindet sich in `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
-
-**Ausführen:**
-
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#testPromptTemplateFormatierung
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#testPromptTemplateFormatierung
-```
+Dieses Muster verifiziert, dass die Variablenersetzung korrekt funktioniert und Prompts wie erwartet formatiert sind — kein API-Schlüssel oder Modellaufruf erforderlich.
### Muster 2: Mocking von Sprachmodellen
-Beim Testen der Gesprächslogik verwenden Sie Mockito, um gefälschte Modelle zu erstellen, die vorab festgelegte Antworten liefern. Das macht Tests schnell, kostenfrei und deterministisch.
+Beim Testen der Gesprächslogik verwenden Sie Mockito, um gefälschte Modelle zu erstellen, die vorgegebene Antworten zurückgeben. Das macht Tests schnell, kostenlos und deterministisch.
-
+
-*Vergleich, warum Mocks beim Testen bevorzugt werden: sie sind schnell, kostenlos, deterministisch und benötigen keine API-Schlüssel*
+*Vergleich, der zeigt, warum Mocks fürs Testen bevorzugt werden: Sie sind schnell, kostenlos, deterministisch und benötigen keine API-Schlüssel*
```java
@ExtendWith(MockitoExtension.class)
@@ -218,15 +205,15 @@ class SimpleConversationTest {
}
```
-Dieses Muster erscheint in `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Der Mock sorgt für konsistentes Verhalten, sodass Sie überprüfen können, ob das Speichermanagement korrekt funktioniert.
+Dieses Muster erscheint in `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Das Mock sorgt für konsistentes Verhalten, damit Sie prüfen können, ob das Speicher-Management korrekt funktioniert.
### Muster 3: Testen der Gesprächs-Isolation
-Der Gesprächsspeicher muss mehrere Benutzer getrennt halten. Dieser Test prüft, dass sich Gespräche nicht vermischen.
+Das Gesprächsspeicher muss mehrere Nutzer trennen. Dieser Test prüft, dass Gespräche keine Kontexte vermischen.
-
+
-*Testen der Gesprächs-Isolation, das separate Speicherbereiche für verschiedene Benutzer zeigt, um Kontextverwechslungen zu vermeiden*
+*Testen der Gesprächs-Isolation zeigt separate Speicher für verschiedene Nutzer, um Kontextvermischung zu verhindern*
```java
@Test
@@ -250,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-Jedes Gespräch führt seine eigene unabhängige Historie. In Produktionssystemen ist diese Isolation für Multi-User-Anwendungen entscheidend.
+Jedes Gespräch führt seinen eigenen unabhängigen Verlauf. In produktiven Systemen ist diese Isolation entscheidend für Mehrbenutzer-Anwendungen.
-### Muster 4: Werkzeuge unabhängig testen
+### Muster 4: Unabhängiges Testen von Tools
-Werkzeuge sind Funktionen, die die KI aufrufen kann. Testen Sie sie direkt, um sicherzustellen, dass sie korrekt funktionieren, unabhängig von KI-Entscheidungen.
+Tools sind Funktionen, die die KI aufrufen kann. Testen Sie sie direkt, um sicherzustellen, dass sie unabhängig von KI-Entscheidungen korrekt funktionieren.
-
+
-*Unabhängiges Testen von Werkzeugen, das die Ausführung eines Mock-Werkzeugs ohne KI-Aufrufe zeigt, um die Geschäftslogik zu überprüfen*
+*Unabhängiges Testen von Tools zeigt Mock-Tool-Ausführung ohne KI-Aufrufe zur Überprüfung der Geschäftslogik*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-Diese Tests aus `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` validieren die Werkzeuglogik ohne KI-Beteiligung. Das Verkettungsbeispiel zeigt, wie die Ausgabe eines Werkzeugs in die Eingabe eines anderen fließt.
+Diese Tests aus `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` validieren die Logik von Tools ohne KI-Beteiligung. Das Verkettungsbeispiel zeigt, wie die Ausgabe eines Tools in den Eingabewert eines anderen fließt.
-### Muster 5: In-Memory RAG-Test
+### Muster 5: In-Memory RAG Testing
-RAG-Systeme benötigen traditionell Vektordatenbanken und Einbettungsdienste. Das In-Memory-Muster lässt Sie die gesamte Pipeline ohne externe Abhängigkeiten testen.
+RAG-Systeme erfordern traditionell Vektordatenbanken und Einbettungsdienste. Das In-Memory-Muster erlaubt das Testen der gesamten Pipeline ohne externe Abhängigkeiten.
-
+
-*In-Memory RAG-Testablauf zeigt Dokumentenparsing, Einbettungsspeicherung und Ähnlichkeitssuche ohne Datenbankbedarf*
+*In-Memory-RAG-Test-Workflow zeigt Dokumentenanalyse, Einbettungsspeicherung und Ähnlichkeitssuche ohne Datenbankbedarf*
```java
@Test
@@ -306,15 +293,15 @@ void testProcessTextDocument() {
}
```
-Dieser Test aus `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` erstellt ein Dokument im Speicher und überprüft Chunking und Metadatenbehandlung.
+Dieser Test aus `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` erstellt ein Dokument im Speicher und prüft Chunking und Metadatenverarbeitung.
### Muster 6: MCP-Integrationstest
-Das MCP-Modul testet die Integration des Model Context Protocol mit stdio-Transport. Diese Tests prüfen, dass Ihre Anwendung MCP-Server als Unterprozesse starten und mit ihnen kommunizieren kann.
+Das MCP-Modul testet die Integration des Model Context Protocols mit stdio-Transport. Diese Tests verifizieren, dass Ihre Anwendung MCP-Server als Unterprozesse starten und kommunizieren kann.
Die Tests in `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` validieren das Verhalten des MCP-Clients.
-**Ausführen:**
+**Führen Sie sie aus:**
**Bash:**
```bash
@@ -328,28 +315,27 @@ cd 05-mcp; mvn --% test
## Testphilosophie
-Testen Sie Ihren Code, nicht die KI. Ihre Tests sollten den von Ihnen geschriebenen Code validieren, indem sie prüfen, wie Prompts konstruiert, wie der Speicher verwaltet und wie Werkzeuge ausgeführt werden. KI-Antworten variieren und sollten nicht Teil der Testannahmen sein. Fragen Sie sich, ob Ihre Promptvorlage Variablen korrekt ersetzt, nicht ob die KI die richtige Antwort gibt.
+Testen Sie Ihren Code, nicht die KI. Ihre Tests sollten den von Ihnen geschriebenen Code validieren, indem sie prüfen, wie Prompts erstellt, wie Speicher verwaltet und wie Tools ausgeführt werden. KI-Antworten variieren und sollten nicht Teil von Testbehauptungen sein. Fragen Sie sich, ob Ihre Prompt-Vorlage Variablen korrekt ersetzt, nicht ob die KI die richtige Antwort gibt.
-Nutzen Sie Mocks für Sprachmodelle. Diese sind externe Abhängigkeiten, die langsam, teuer und nicht deterministisch sind. Mocking macht Tests schnell mit Millisekunden statt Sekunden, kostenfrei ohne API-Kosten und deterministisch mit immer gleichem Ergebnis.
+Verwenden Sie Mocks für Sprachmodelle. Diese sind externe Abhängigkeiten, die langsam, teuer und nicht deterministisch sind. Mocking macht Tests schnell mit Millisekunden statt Sekunden, kostenlos ohne API-Kosten und deterministisch mit dem gleichen Ergebnis jedes Mal.
-Halten Sie Tests unabhängig. Jeder Test sollte seine eigenen Daten einrichten, sich nicht auf andere Tests verlassen und nach sich selbst aufräumen. Tests sollten unabhängig von der Ausführungsreihenfolge bestehen.
+Halten Sie Tests unabhängig. Jeder Test sollte seine eigenen Daten einrichten, sich nicht auf andere Tests verlassen und nach sich aufräumen. Tests sollten unabhängig von der Ausführungsreihenfolge bestehen.
-Testen Sie auch Grenzfälle über den Happy Path hinaus. Testen Sie leere Eingaben, sehr große Eingaben, Sonderzeichen, ungültige Parameter und Randbedingungen. Diese offenbaren oft Fehler, die im normalen Gebrauch nicht auftreten.
+Testen Sie auch Grenzfälle außerhalb des normalen Ablaufs. Probieren Sie leere Eingaben, sehr große Eingaben, Sonderzeichen, ungültige Parameter und Randbedingungen. Diese decken oft Fehler auf, die bei normaler Verwendung nicht sichtbar sind.
-Verwenden Sie beschreibende Namen. Vergleichen Sie `shouldMaintainConversationHistoryAcrossMultipleMessages()` mit `test1()`. Der erste Name sagt genau, was getestet wird, und erleichtert das Debuggen bei Fehlern erheblich.
+Verwenden Sie aussagekräftige Namen. Vergleichen Sie `shouldMaintainConversationHistoryAcrossMultipleMessages()` mit `test1()`. Der erste Name sagt genau, was getestet wird, was die Fehlersuche erheblich erleichtert.
## Nächste Schritte
-Jetzt, wo Sie die Testmuster kennen, vertiefen Sie sich in jedes Modul:
+Da Sie nun die Testmuster verstehen, tauchen Sie tiefer in jedes Modul ein:
-- **[00 - Schnellstart](../00-quick-start/README.md)** - Beginnen Sie mit den Grundlagen der Promptvorlagen
-- **[01 - Einführung](../01-introduction/README.md)** - Lernen Sie das Management des Gesprächsspeichers
-- **[02 - Prompt-Engineering](../02-prompt-engineering/README.md)** - Meistern Sie GPT-5.2-Prompting-Muster
-- **[03 - RAG](../03-rag/README.md)** - Erstellen Sie retrieval-gestützte Generierungssysteme
-- **[04 - Werkzeuge](../04-tools/README.md)** - Implementieren Sie Funktionsaufrufe und Werkzeugketten
+- **[01 - Einführung](../01-introduction/README.md)** - Lernen Sie das Gesprächsspeicher-Management kennen
+- **[02 - Prompt Engineering](../02/prompt-engineering/README.md)** - Meistern Sie GPT-5.2-Prompting-Muster
+- **[03 - RAG](../03-rag/README.md)** - Bauen Sie Retrieval-Augmented Generation-Systeme
+- **[04 - Tools](../04-tools/README.md)** - Implementieren Sie Funktionsaufrufe und Werkzeugketten
- **[05 - MCP](../05-mcp/README.md)** - Integrieren Sie das Model Context Protocol
-Das README jedes Moduls bietet detaillierte Erklärungen zu den hier getesteten Konzepten.
+Das README jedes Moduls bietet ausführliche Erklärungen zu den hier getesteten Konzepten.
---
@@ -358,6 +344,6 @@ Das README jedes Moduls bietet detaillierte Erklärungen zu den hier getesteten
---
-**Haftungsausschluss**:
-Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir um Genauigkeit bemüht sind, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache gilt als maßgebliche Quelle. Für wichtige Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Nutzung dieser Übersetzung entstehen.
+**Haftungsausschluss**:
+Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
\ No newline at end of file
diff --git a/translations/el/.co-op-translator.json b/translations/el/.co-op-translator.json
index 622484c26..e616bfd8a 100644
--- a/translations/el/.co-op-translator.json
+++ b/translations/el/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "el"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-03T00:35:13+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T09:49:18+00:00",
"source_file": "01-introduction/README.md",
"language_code": "el"
},
@@ -18,20 +18,20 @@
"language_code": "el"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-03T00:38:40+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T09:31:06+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "el"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-03T00:40:44+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T09:46:52+00:00",
"source_file": "03-rag/README.md",
"language_code": "el"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T10:26:27+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T09:41:34+00:00",
"source_file": "04-tools/README.md",
"language_code": "el"
},
@@ -54,8 +54,8 @@
"language_code": "el"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T16:07:38+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T09:25:23+00:00",
"source_file": "README.md",
"language_code": "el"
},
@@ -72,14 +72,14 @@
"language_code": "el"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-03T00:45:24+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T09:33:50+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "el"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-03T00:46:33+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T09:36:22+00:00",
"source_file": "docs/TESTING.md",
"language_code": "el"
}
diff --git a/translations/el/00-quick-start/README.md b/translations/el/00-quick-start/README.md
deleted file mode 100644
index 1b2cbb65d..000000000
--- a/translations/el/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# Module 00: Γρήγορη Έναρξη
-
-## Table of Contents
-
-- [Εισαγωγή](../../../00-quick-start)
-- [Τι είναι το LangChain4j;](../../../00-quick-start)
-- [Εξαρτήσεις LangChain4j](../../../00-quick-start)
-- [Προαπαιτούμενα](../../../00-quick-start)
-- [Ρύθμιση](../../../00-quick-start)
- - [1. Αποκτήστε το GitHub Token σας](../../../00-quick-start)
- - [2. Ορίστε το Token σας](../../../00-quick-start)
-- [Εκτέλεση Παραδειγμάτων](../../../00-quick-start)
- - [1. Βασική Συνομιλία](../../../00-quick-start)
- - [2. Πρότυπα Υπόδειξης](../../../00-quick-start)
- - [3. Κλήση Συναρτήσεων](../../../00-quick-start)
- - [4. Ερωτήσεις & Απαντήσεις Εγγράφων (Easy RAG)](../../../00-quick-start)
- - [5. Υπεύθυνη Τεχνητή Νοημοσύνη](../../../00-quick-start)
-- [Τι Δείχνει Κάθε Παράδειγμα](../../../00-quick-start)
-- [Επόμενα Βήματα](../../../00-quick-start)
-- [Αντιμετώπιση Προβλημάτων](../../../00-quick-start)
-
-## Introduction
-
-Αυτή η γρήγορη εκκίνηση έχει σκοπό να σας βάλει σε λειτουργία με το LangChain4j το ταχύτερο δυνατό. Καλύπτει τα απολύτως βασικά για την κατασκευή εφαρμογών AI με LangChain4j και GitHub Models. Στα επόμενα modules θα μεταβείτε σε Azure OpenAI και GPT-5.2 και θα εμβαθύνετε σε κάθε έννοια.
-
-## What is LangChain4j?
-
-Το LangChain4j είναι μια βιβλιοθήκη Java που απλοποιεί την κατασκευή εφαρμογών με τεχνητή νοημοσύνη. Αντί να ασχολείστε με HTTP clients και ανάλυση JSON, δουλεύετε με καθαρές Java APIs.
-
-Η "αλυσίδα" στο LangChain αναφέρεται στην αλυσίδωση πολλαπλών συστατικών - μπορεί να αλυσιδωθεί ένα prompt σε ένα μοντέλο σε ένα parser, ή να αλυσιδωθούν πολλές κλήσεις AI όπου η έξοδος της μίας τροφοδοτεί την είσοδο της επόμενης. Αυτή η γρήγορη εκκίνηση εστιάζει στα βασικά πριν εξερευνήσει πιο σύνθετες αλυσίδες.
-
-
-
-*Αλυσιδωτά συστατικά στο LangChain4j - οικοδομικά στοιχεία που συνδέονται για να δημιουργήσουν ισχυρές ροές εργασίας AI*
-
-Θα χρησιμοποιήσουμε τρία βασικά συστατικά:
-
-**ChatModel** - Η διεπαφή για αλληλεπιδράσεις με το μοντέλο AI. Καλείτε `model.chat("prompt")` και λαμβάνετε μια απάντηση ως string. Χρησιμοποιούμε το `OpenAiOfficialChatModel` που λειτουργεί με endpoints συμβατά με OpenAI όπως τα GitHub Models.
-
-**AiServices** - Δημιουργεί type-safe διεπαφές υπηρεσιών AI. Ορίζετε μεθόδους, τις σχολιάζετε με `@Tool`, και το LangChain4j αναλαμβάνει τον συντονισμό. Το AI καλεί αυτόματα τις Java μεθόδους σας όταν χρειάζεται.
-
-**MessageWindowChatMemory** - Διατηρεί το ιστορικό συνομιλίας. Χωρίς αυτό, κάθε αίτημα είναι ανεξάρτητο. Με αυτό, το AI θυμάται προηγούμενα μηνύματα και διατηρεί το πλαίσιο σε πολλούς γύρους.
-
-
-
-*Αρχιτεκτονική LangChain4j - βασικά συστατικά που συνεργάζονται για να τροφοδοτήσουν τις εφαρμογές AI σας*
-
-## LangChain4j Dependencies
-
-Αυτή η γρήγορη εκκίνηση χρησιμοποιεί τρεις εξαρτήσεις Maven στο [`pom.xml`](../../../00-quick-start/pom.xml):
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-Το module `langchain4j-open-ai-official` παρέχει την κλάση `OpenAiOfficialChatModel` που συνδέεται με APIs συμβατά με το OpenAI. Τα GitHub Models χρησιμοποιούν την ίδια μορφή API, οπότε δεν χρειάζεται ειδικός προσαρμογέας - απλά δείξτε τη βάση URL στο `https://models.github.ai/inference`.
-
-Το module `langchain4j-easy-rag` παρέχει αυτόματη διαίρεση εγγράφων, ενσωμάτωση και ανάκτηση ώστε να μπορείτε να χτίσετε εφαρμογές RAG χωρίς χειροκίνητη ρύθμιση κάθε βήματος.
-
-## Προαπαιτούμενα
-
-**Χρησιμοποιείτε το Dev Container;** Java και Maven είναι ήδη εγκατεστημένα. Χρειάζεστε μόνο ένα Personal Access Token του GitHub.
-
-**Τοπική Ανάπτυξη:**
-- Java 21+, Maven 3.9+
-- Personal Access Token από GitHub (οδηγίες παρακάτω)
-
-> **Σημείωση:** Αυτό το module χρησιμοποιεί το `gpt-4.1-nano` από GitHub Models. Μην τροποποιείτε το όνομα μοντέλου στον κώδικα - έχει ρυθμιστεί να λειτουργεί με τα διαθέσιμα μοντέλα του GitHub.
-
-## Ρύθμιση
-
-### 1. Αποκτήστε το GitHub Token σας
-
-1. Μεταβείτε στο [GitHub Settings → Personal Access Tokens](https://github.com/settings/personal-access-tokens)
-2. Πατήστε "Generate new token"
-3. Ορίστε ένα περιγραφικό όνομα (π.χ. "LangChain4j Demo")
-4. Ορίστε διάρκεια (συνιστώνται 7 ημέρες)
-5. Στο "Account permissions", βρείτε το "Models" και ορίστε σε "Read-only"
-6. Πατήστε "Generate token"
-7. Αντιγράψτε και αποθηκεύστε το token σας - δεν θα το δείτε ξανά
-
-### 2. Ορίστε το Token σας
-
-**Επιλογή 1: Χρήση VS Code (Συνιστάται)**
-
-Αν χρησιμοποιείτε το VS Code, προσθέστε το token στο αρχείο `.env` στη ρίζα του project:
-
-Αν το αρχείο `.env` δεν υπάρχει, αντιγράψτε το `.env.example` σε `.env` ή δημιουργήστε νέο `.env` στη ρίζα του project.
-
-**Παράδειγμα αρχείου `.env`:**
-```bash
-# Στο /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-Στη συνέχεια μπορείτε απλά να κάνετε δεξί κλικ σε οποιοδήποτε demo αρχείο (π.χ. `BasicChatDemo.java`) στον Explorer και να επιλέξετε **"Run Java"** ή να χρησιμοποιήσετε τις ρυθμίσεις εκκίνησης από το πάνελ Run and Debug.
-
-**Επιλογή 2: Χρήση Τερματικού**
-
-Ορίστε το token ως μεταβλητή περιβάλλοντος:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## Εκτέλεση Παραδειγμάτων
-
-**Χρήση VS Code:** Κάντε δεξί κλικ σε οποιοδήποτε demo αρχείο στον Explorer και επιλέξτε **"Run Java"**, ή χρησιμοποιήστε τις ρυθμίσεις εκκίνησης από το πάνελ Run and Debug (βεβαιωθείτε πρώτα ότι έχετε προσθέσει το token στο `.env`).
-
-**Χρήση Maven:** Εναλλακτικά, μπορείτε να τρέξετε από τη γραμμή εντολών:
-
-### 1. Βασική Συνομιλία
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. Πρότυπα Υπόδειξης
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-Δείχνει zero-shot, few-shot, chain-of-thought και role-based prompting.
-
-### 3. Κλήση Συναρτήσεων
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-Το AI καλεί αυτόματα τις Java μεθόδους σας όταν χρειάζεται.
-
-### 4. Ερωτήσεις & Απαντήσεις Εγγράφων (Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-Κάντε ερωτήσεις σχετικά με τα έγγραφά σας χρησιμοποιώντας Easy RAG με αυτόματη ενσωμάτωση και ανάκτηση.
-
-### 5. Υπεύθυνη Τεχνητή Νοημοσύνη
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-Δείτε πώς τα φίλτρα ασφάλειας AI αποκλείουν επιβλαβές περιεχόμενο.
-
-## Τι Δείχνει Κάθε Παράδειγμα
-
-**Βασική Συνομιλία** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-Ξεκινήστε εδώ για να δείτε το LangChain4j στην πιο απλή μορφή του. Θα δημιουργήσετε ένα `OpenAiOfficialChatModel`, θα στείλετε ένα prompt με `.chat()` και θα λάβετε απάντηση. Αυτό δείχνει τα θεμέλια: πώς να αρχικοποιείτε μοντέλα με προσαρμοσμένα endpoints και κλειδιά API. Μόλις κατανοήσετε αυτό το μοτίβο, όλα τα υπόλοιπα χτίζονται πάνω του.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 Δοκιμάστε με [GitHub Copilot](https://github.com/features/copilot) Chat:** Ανοίξτε το [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) και ρωτήστε:
-> - "Πώς θα άλλαζα από GitHub Models σε Azure OpenAI σε αυτόν τον κώδικα;"
-> - "Ποιοι άλλοι παράμετροι μπορώ να ρυθμίσω στο OpenAiOfficialChatModel.builder();"
-> - "Πώς προσθέτω streaming απαντήσεις αντί να περιμένω την πλήρη απάντηση;"
-
-**Μηχανική Υποδείξεων (Prompt Engineering)** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-Τώρα που ξέρετε πώς να μιλάτε σε ένα μοντέλο, ας εξερευνήσουμε τι του λέτε. Αυτό το demo χρησιμοποιεί την ίδια ρύθμιση μοντέλου αλλά δείχνει πέντε διαφορετικά πρότυπα υποδείξεων. Δοκιμάστε zero-shot prompts για άμεσες οδηγίες, few-shot prompts που μαθαίνουν από παραδείγματα, chain-of-thought prompts που αποκαλύπτουν βήματα συλλογισμού, και role-based prompts που θέτουν το πλαίσιο. Θα δείτε πώς το ίδιο μοντέλο δίνει ριζικά διαφορετικά αποτελέσματα ανάλογα με το πώς πλαισιώνετε το αίτημά σας.
-
-Το demo επίσης δείχνει prompt templates, μια ισχυρή μέθοδο για δημιουργία επαναχρησιμοποιούμενων prompts με μεταβλητές.
-Το παρακάτω παράδειγμα δείχνει ένα prompt που χρησιμοποιεί το LangChain4j `PromptTemplate` για να γεμίσει μεταβλητές. Το AI απαντά με βάση τον προορισμό και τη δραστηριότητα που παρέχονται.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 Δοκιμάστε με [GitHub Copilot](https://github.com/features/copilot) Chat:** Ανοίξτε το [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) και ρωτήστε:
-> - "Ποια είναι η διαφορά μεταξύ zero-shot και few-shot prompting, και πότε πρέπει να χρησιμοποιώ το καθένα;"
-> - "Πώς επηρεάζει η παράμετρος θερμοκρασίας τις απαντήσεις του μοντέλου;"
-> - "Ποιες τεχνικές υπάρχουν για να αποτρέψω επιθέσεις prompt injection σε παραγωγή;"
-> - "Πώς δημιουργώ επαναχρησιμοποιούμενα PromptTemplate αντικείμενα για κοινά πρότυπα;"
-
-**Ένταξη Εργαλείων (Tool Integration)** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-Εδώ γίνεται δυναμικό το LangChain4j. Θα χρησιμοποιήσετε το `AiServices` για να δημιουργήσετε έναν βοηθό AI που μπορεί να καλεί τις Java μεθόδους σας. Απλά σχολιάστε τις μεθόδους σας με `@Tool("περιγραφή")` και το LangChain4j κάνει τα υπόλοιπα - το AI αποφασίζει αυτόματα πότε να χρησιμοποιήσει κάθε εργαλείο ανάλογα με το τι ρωτά ο χρήστης. Αυτό δείχνει την κλήση συναρτήσεων, μια βασική τεχνική για την κατασκευή AI που μπορεί να εκτελεί ενέργειες και όχι μόνο να απαντά σε ερωτήσεις.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 Δοκιμάστε με [GitHub Copilot](https://github.com/features/copilot) Chat:** Ανοίξτε το [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) και ρωτήστε:
-> - "Πώς λειτουργεί το annotation @Tool και τι κάνει το LangChain4j με αυτό πίσω από τις σκηνές;"
-> - "Μπορεί το AI να καλέσει πολλαπλά εργαλεία στη σειρά για να λύσει πολύπλοκα προβλήματα;"
-> - "Τι συμβαίνει αν ένα εργαλείο ρίξει εξαίρεση - πώς πρέπει να διαχειριστώ τα σφάλματα;"
-> - "Πώς θα ενσωμάτωνα ένα πραγματικό API αντί για αυτό το παράδειγμα υπολογιστή;"
-
-**Ερωτήσεις & Απαντήσεις Εγγράφων (Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-Εδώ θα δείτε το RAG (retrieval-augmented generation) χρησιμοποιώντας την προσέγγιση "Easy RAG" του LangChain4j. Τα έγγραφα φορτώνονται, χωρίζονται αυτόματα και ενσωματώνονται σε μια ενήμερη μνήμη, μετά ένας ανακτών περιεχομένου παρέχει σχετικά κομμάτια στο AI κατά το χρόνο ερώτησης. Το AI απαντά βάσει των εγγράφων σας, όχι της γενικής του γνώσης.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 Δοκιμάστε με [GitHub Copilot](https://github.com/features/copilot) Chat:** Ανοίξτε το [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) και ρωτήστε:
-> - "Πώς το RAG αποτρέπει τις ψευδαισθήσεις AI συγκριτικά με τη χρήση δεδομένων εκπαίδευσης του μοντέλου;"
-> - "Ποια είναι η διαφορά μεταξύ αυτής της εύκολης προσέγγισης και μιας προσαρμοσμένης RAG pipeline;"
-> - "Πώς θα κλιμακώσω αυτό για να χειριστώ πολλαπλά έγγραφα ή μεγαλύτερες βάσεις γνώσης;"
-
-**Υπεύθυνη Τεχνητή Νοημοσύνη** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-Χτίστε ασφάλεια AI με πολλαπλά επίπεδα προστασίας. Αυτό το demo δείχνει δύο στρώματα προστασίας που συνεργάζονται:
-
-**Μέρος 1: LangChain4j Input Guardrails** - Αποκλείστε επικίνδυνα prompts πριν φτάσουν στο LLM. Δημιουργήστε προσαρμοσμένα guardrails που ελέγχουν για απαγορευμένες λέξεις-κλειδιά ή πρότυπα. Εκτελούνται στον κώδικά σας, άρα είναι γρήγορα και δωρεάν.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**Μέρος 2: Provider Safety Filters** - Τα GitHub Models έχουν ενσωματωμένα φίλτρα που πιάνουν ό,τι τα guardrails σας ίσως χάσουν. Θα δείτε σκληρούς αποκλεισμούς (HTTP 400 σφάλματα) για σοβαρές παραβάσεις και μαλακές απορρίψεις όπου το AI αρνείται ευγενικά.
-
-> **🤖 Δοκιμάστε με [GitHub Copilot](https://github.com/features/copilot) Chat:** Ανοίξτε το [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) και ρωτήστε:
-> - "Τι είναι το InputGuardrail και πώς φτιάχνω δικό μου;"
-> - "Ποια είναι η διαφορά μεταξύ σκληρού αποκλεισμού και ήπιας απόρριψης;"
-> - "Γιατί να χρησιμοποιώ και guardrails και φίλτρα παρόχου μαζί;"
-
-## Επόμενα Βήματα
-
-**Επόμενο Module:** [01-introduction - Ξεκινώντας με το LangChain4j](../01-introduction/README.md)
-
----
-
-**Πλοήγηση:** [← Πίσω στην Κεντρική](../README.md) | [Επόμενο: Module 01 - Εισαγωγή →](../01-introduction/README.md)
-
----
-
-## Αντιμετώπιση Προβλημάτων
-
-### Πρώτη Κατασκευή Maven
-
-**Πρόβλημα:** Αρχικό `mvn clean compile` ή `mvn package` διαρκεί πολύ (10-15 λεπτά)
-
-**Αιτία:** Το Maven πρέπει να κατεβάσει όλες τις εξαρτήσεις του project (Spring Boot, βιβλιοθήκες LangChain4j, Azure SDKs, κ.ά.) στην πρώτη κατασκευή.
-
-**Λύση:** Αυτό είναι φυσιολογικό. Οι επόμενες κατασκευές θα είναι πολύ πιο γρήγορες καθώς οι εξαρτήσεις έχουν cache τοπικά. Ο χρόνος λήψης εξαρτάται από την ταχύτητα του δικτύου σας.
-
-### Σύνταξη Εντολών Maven σε PowerShell
-
-**Πρόβλημα:** Οι εντολές Maven αποτυγχάνουν με σφάλμα `Unknown lifecycle phase ".mainClass=..."`
-**Αιτία**: Το PowerShell ερμηνεύει το `=` ως τελεστή ανάθεσης μεταβλητής, διακόπτοντας τη σύνταξη ιδιοτήτων του Maven
-
-**Λύση**: Χρησιμοποιήστε τον τελεστή διακοπής ανάλυσης `--%` πριν από την εντολή Maven:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-Ο τελεστής `--%` λέει στο PowerShell να περάσει όλα τα επόμενα ορίσματα κυριολεκτικά στο Maven χωρίς ερμηνεία.
-
-### Εμφάνιση Emoji στα Windows PowerShell
-
-**Πρόβλημα**: Οι απαντήσεις AI εμφανίζουν άχρηστους χαρακτήρες (π.χ., `????` ή `â??`) αντί για emoji στο PowerShell
-
-**Αιτία**: Η προεπιλεγμένη κωδικοποίηση του PowerShell δεν υποστηρίζει τα emoji UTF-8
-
-**Λύση**: Εκτελέστε αυτή την εντολή πριν από την εκτέλεση εφαρμογών Java:
-```cmd
-chcp 65001
-```
-
-Αυτό αναγκάζει την κωδικοποίηση UTF-8 στο τερματικό. Εναλλακτικά, χρησιμοποιήστε το Windows Terminal που έχει καλύτερη υποστήριξη Unicode.
-
-### Αποσφαλμάτωση Κλήσεων API
-
-**Πρόβλημα**: Σφάλματα ταυτοποίησης, όρια ρυθμού ή μη αναμενόμενες απαντήσεις από το μοντέλο AI
-
-**Λύση**: Τα παραδείγματα περιλαμβάνουν `.logRequests(true)` και `.logResponses(true)` για να εμφανίζουν τις κλήσεις API στην κονσόλα. Αυτό βοηθά στην επίλυση σφαλμάτων ταυτοποίησης, ορίων ρυθμού ή μη αναμενόμενων απαντήσεων. Αφαιρέστε αυτές τις σημαίες στην παραγωγή για μείωση του θορύβου στα αρχεία καταγραφής.
-
----
-
-
-**Αποποίηση ευθυνών**:
-Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που επιδιώκουμε ακρίβεια, παρακαλούμε να σημειώσετε ότι οι αυτοματοποιημένες μεταφράσεις μπορεί να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα του αποτελεί την έγκυρη πηγή. Για κρίσιμες πληροφορίες συνιστάται η επαγγελματική μετάφραση από ανθρώπινο μεταφραστή. Δεν φέρουμε καμία ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
-
\ No newline at end of file
diff --git a/translations/el/01-introduction/README.md b/translations/el/01-introduction/README.md
index c7daec14d..dbc310bd7 100644
--- a/translations/el/01-introduction/README.md
+++ b/translations/el/01-introduction/README.md
@@ -2,84 +2,84 @@
## Περιεχόμενα
-- [Οδηγός Βίντεο](../../../01-introduction)
-- [Τι θα μάθετε](../../../01-introduction)
-- [Προαπαιτούμενα](../../../01-introduction)
-- [Κατανόηση του Κεντρικού Προβλήματος](../../../01-introduction)
-- [Κατανόηση των Tokens](../../../01-introduction)
-- [Πώς Λειτουργεί η Μνήμη](../../../01-introduction)
-- [Πώς Χρησιμοποιεί Αυτό το LangChain4j](../../../01-introduction)
-- [Ανάπτυξη Υποδομής Azure OpenAI](../../../01-introduction)
-- [Εκτέλεση της Εφαρμογής Τοπικά](../../../01-introduction)
-- [Χρήση της Εφαρμογής](../../../01-introduction)
- - [Chat χωρίς Κατάσταση (Αριστερό Πάνελ)](../../../01-introduction)
- - [Chat με Κατάσταση (Δεξί Πάνελ)](../../../01-introduction)
-- [Επόμενα Βήματα](../../../01-introduction)
-
-## Οδηγός Βίντεο
+- [Περιήγηση σε Βίντεο](#περιήγηση-σε-βίντεο)
+- [Τι θα Μάθετε](#τι-θα-μάθετε)
+- [Απαιτήσεις](#απαιτήσεις)
+- [Κατανόηση του Βασικού Προβλήματος](#κατανόηση-του-βασικού-προβλήματος)
+- [Κατανόηση των Tokens](#κατανόηση-των-tokens)
+- [Πώς Λειτουργεί η Μνήμη](#πώς-λειτουργεί-η-μνήμη)
+- [Πώς Χρησιμοποιείται το LangChain4j](#πώς-χρησιμοποιείται-το-langchain4j)
+- [Ανάπτυξη Υποδομής Azure OpenAI](#ανάπτυξη-υποδομής-azure-openai)
+- [Εκτέλεση της Εφαρμογής Τοπικά](#εκτέλεση-της-εφαρμογής-τοπικά)
+- [Χρήση της Εφαρμογής](#χρήση-της-εφαρμογής)
+ - [Άνευ Κατάστασης Συνομιλία (Αριστερό Πάνελ)](#άνευ-κατάστασης-συνομιλία-αριστερό-πάνελ)
+ - [Κατάστασης Συνομιλία (Δεξί Πάνελ)](#κατάστασης-συνομιλία-δεξί-πάνελ)
+- [Επόμενα Βήματα](#επόμενα-βήματα)
+
+## Περιήγηση σε Βίντεο
Παρακολουθήστε αυτή τη ζωντανή παρουσίαση που εξηγεί πώς να ξεκινήσετε με αυτό το module:
-
+
-## Τι θα μάθετε
+## Τι θα Μάθετε
-Στο γρήγορο ξεκίνημα, χρησιμοποιήσατε τα GitHub Models για να στέλνετε προτροπές, να καλείτε εργαλεία, να δημιουργείτε ένα RAG pipeline και να δοκιμάζετε τους κανόνες ασφαλείας. Αυτά τα demos έδειξαν τι είναι δυνατό — τώρα μεταβαίνουμε στο Azure OpenAI και GPT-5.2 και αρχίζουμε να χτίζουμε εφαρμογές παραγωγικού τύπου. Αυτό το module εστιάζει σε συστήματα συνομιλίας AI που θυμούνται το πλαίσιο και διατηρούν κατάσταση — τις έννοιες που τα demos στο γρήγορο ξεκίνημα χρησιμοποιούσαν παρασκηνιακά αλλά δεν εξήγησαν.
+Αυτή είναι η αφετηρία σας με το LangChain4j και το Azure OpenAI. Ξεκινάμε με τα βασικά και αρχίζουμε να κατασκευάζουμε εφαρμογές παραγωγικού επιπέδου. Αυτό το module εστιάζει στην συνομιλητική AI που θυμάται το πλαίσιο και διατηρεί κατάσταση — τις θεμελιώδεις έννοιες πάνω στις οποίες βασίζονται όλα τα μετέπειτα modules.
-Θα χρησιμοποιήσουμε το GPT-5.2 της Azure OpenAI σε όλο τον οδηγό επειδή οι προηγμένες δυνατότητες λογικής του κάνουν πιο εμφανή τη συμπεριφορά των διαφορετικών προτύπων. Όταν προσθέσετε μνήμη, θα δείτε καθαρά τη διαφορά. Αυτό καθιστά πιο εύκολο να κατανοήσετε τι φέρνει το κάθε συστατικό στην εφαρμογή σας.
+Θα χρησιμοποιήσουμε το GPT-5.2 του Azure OpenAI σε όλο τον οδηγό επειδή οι προηγμένες ικανότητες λογικής του καθιστούν τη συμπεριφορά διαφορετικών προτύπων πιο εμφανή. Όταν προσθέσετε μνήμη, θα δείτε καθαρά τη διαφορά. Αυτό καθιστά πιο εύκολη την κατανόηση τι φέρνει κάθε συνιστώσα στην εφαρμογή σας.
-Θα δημιουργήσετε μία εφαρμογή που επιδεικνύει και τα δύο πρότυπα:
+Θα δημιουργήσετε μία εφαρμογή που δείχνει και τα δύο πρότυπα:
-**Chat χωρίς Κατάσταση** - Κάθε αίτημα είναι ανεξάρτητο. Το μοντέλο δεν θυμάται προηγούμενα μηνύματα. Αυτό είναι το πρότυπο που χρησιμοποιήσατε στο γρήγορο ξεκίνημα.
+**Άνευ Κατάστασης Συνομιλία** - Κάθε αίτημα είναι ανεξάρτητο. Το μοντέλο δεν θυμάται προηγούμενα μηνύματα. Αυτό είναι το απλούστερο σημείο εκκίνησης.
-**Chat με Κατάσταση** - Κάθε αίτημα περιλαμβάνει το ιστορικό συνομιλίας. Το μοντέλο διατηρεί το πλαίσιο σε πολλαπλούς γύρους συνομιλίας. Αυτό είναι που απαιτούν οι παραγωγικές εφαρμογές.
+**Κατάστασης Συνομιλία** - Κάθε αίτημα περιλαμβάνει το ιστορικό συνομιλίας. Το μοντέλο διατηρεί το πλαίσιο σε πολλαπλές ανταλλαγές. Αυτό απαιτούν οι παραγωγικές εφαρμογές.
-## Προαπαιτούμενα
+## Απαιτήσεις
- Συνδρομή Azure με πρόσβαση στο Azure OpenAI
- Java 21, Maven 3.9+
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
-> **Σημείωση:** Το Java, Maven, Azure CLI και Azure Developer CLI (azd) είναι προεγκατεστημένα στο παρεχόμενο devcontainer.
+> **Σημείωση:** Java, Maven, Azure CLI και Azure Developer CLI (azd) είναι προεγκατεστημένα στο παρεχόμενο devcontainer.
-> **Σημείωση:** Αυτό το module χρησιμοποιεί το GPT-5.2 στο Azure OpenAI. Η ανάπτυξη διαμορφώνεται αυτόματα μέσω του `azd up` - μην τροποποιείτε το όνομα του μοντέλου στον κώδικα.
+> **Σημείωση:** Αυτό το module χρησιμοποιεί το GPT-5.2 στο Azure OpenAI. Η ανάπτυξη ρυθμίζεται αυτόματα μέσω `azd up` - μην τροποποιήσετε το όνομα του μοντέλου στον κώδικα.
-## Κατανόηση του Κεντρικού Προβλήματος
+## Κατανόηση του Βασικού Προβλήματος
-Τα γλωσσικά μοντέλα είναι χωρίς κατάσταση. Κάθε κλήση API είναι ανεξάρτητη. Αν στείλετε "Το όνομά μου είναι Ιωάννης" και μετά ρωτήσετε "Ποιο είναι το όνομά μου;", το μοντέλο δεν έχει ιδέα ότι μόλις συστηθήκατε. Αντιμετωπίζει κάθε αίτημα σαν να είναι η πρώτη συνομιλία που έχετε ποτέ.
+Τα μοντέλα γλώσσας είναι άνευ κατάστασης. Κάθε κλήση API είναι ανεξάρτητη. Αν στείλετε "Το όνομά μου είναι Γιάννης" και μετά ρωτήσετε "Ποιο είναι το όνομά μου;", το μοντέλο δεν έχει ιδέα ότι μόλις συστήσατε τον εαυτό σας. Θεωρεί κάθε αίτημα σαν να είναι η πρώτη συνομιλία που είχατε ποτέ.
-Αυτό είναι εντάξει για απλές ερωτήσεις-απαντήσεις αλλά άχρηστο για πραγματικές εφαρμογές. Τα bots υποστήριξης πελατών πρέπει να θυμούνται τι τους είπατε. Οι προσωπικοί βοηθοί χρειάζονται πλαίσιο. Κάθε συνομιλία με πολλούς γύρους απαιτεί μνήμη.
+Αυτό είναι επαρκές για απλές ερωτήσεις-απαντήσεις αλλά άχρηστο για πραγματικές εφαρμογές. Τα bots υποστήριξης πελατών χρειάζεται να θυμούνται τι τους είπατε. Οι προσωπικοί βοηθοί χρειάζονται πλαίσιο. Κάθε συνομιλία πολλαπλών βημάτων απαιτεί μνήμη.
-Το παρακάτω διάγραμμα αντιπαραβάλλει τις δύο προσεγγίσεις — αριστερά, μια κλήση χωρίς κατάσταση που ξεχνά το όνομά σας· δεξιά, μια κλήση με κατάσταση υποστηριζόμενη από το ChatMemory που το θυμάται.
+Το παρακάτω διάγραμμα αντιπαραβάλλει τις δύο προσεγγίσεις — αριστερά, μια κλήση άνευ κατάστασης που ξεχνά το όνομά σας· δεξιά, μια κλήση με κατάσταση υποστηριζόμενη από ChatMemory που το θυμάται.
-
+
-*Η διαφορά μεταξύ συνομιλιών χωρίς κατάσταση (ανεξάρτητες κλήσεις) και με κατάσταση (με επίγνωση πλαισίου)*
+*Η διαφορά μεταξύ άνευ κατάστασης (ανεξάρτητες κλήσεις) και κατάστασης (επικείμενη στο πλαίσιο) συνομιλίες*
## Κατανόηση των Tokens
-Πριν βουτήξετε σε συνομιλίες, είναι σημαντικό να κατανοήσετε τα tokens - τις βασικές μονάδες κειμένου που επεξεργάζονται τα γλωσσικά μοντέλα:
+Πριν βουτήξετε στις συνομιλίες, είναι σημαντικό να κατανοήσετε τα tokens - τις βασικές μονάδες κειμένου που επεξεργάζονται τα μοντέλα γλώσσας:
-
+
-*Παράδειγμα πώς το κείμενο χωρίζεται σε tokens - "I love AI!" γίνεται 4 ξεχωριστές μονάδες επεξεργασίας*
+*Παράδειγμα πώς το κείμενο διασπάται σε tokens - "I love AI!" γίνεται 4 ξεχωριστές μονάδες επεξεργασίας*
-Τα tokens είναι ο τρόπος με τον οποίο τα μοντέλα AI μετρούν και επεξεργάζονται το κείμενο. Λέξεις, σημεία στίξης και ακόμη και κενά μπορεί να είναι tokens. Το μοντέλο σας έχει όριο στο πόσα tokens μπορεί να επεξεργαστεί ταυτόχρονα (400.000 για το GPT-5.2, με έως 272.000 tokens εισόδου και 128.000 tokens εξόδου). Η κατανόηση των tokens βοηθάει στη διαχείριση του μήκους της συνομιλίας και των κόστους.
+Τα tokens είναι το πώς τα μοντέλα AI μετρούν και επεξεργάζονται το κείμενο. Λέξεις, σημεία στίξης και ακόμα και κενά μπορεί να είναι tokens. Το μοντέλο σας έχει όριο πόσα tokens μπορεί να επεξεργαστεί ταυτόχρονα (400,000 για το GPT-5.2, με έως 272,000 εισοδικά tokens και 128,000 εξοδικά tokens). Η κατανόηση των tokens βοηθάει στη διαχείριση του μήκους της συνομιλίας και των κοστών.
## Πώς Λειτουργεί η Μνήμη
-Η μνήμη συνομιλίας επιλύει το πρόβλημα χωρίς κατάσταση διατηρώντας το ιστορικό της συνομιλίας. Πριν στείλετε το αίτημά σας στο μοντέλο, το πλαίσιο προσθέτει τα σχετικά προηγούμενα μηνύματα. Όταν ρωτάτε "Ποιο είναι το όνομά μου;", το σύστημα στέλνει όλο το ιστορικό συνομιλίας, επιτρέποντας στο μοντέλο να δει ότι είπατε προηγουμένως "Το όνομά μου είναι Ιωάννης."
+Η μνήμη συνομιλίας λύνει το πρόβλημα της άνευ κατάστασης φύσης διατηρώντας το ιστορικό της συνομιλίας. Πριν στείλετε το αίτημά σας στο μοντέλο, το πλαίσιο προθέτει σχετικά προηγούμενα μηνύματα. Όταν ρωτήσετε "Ποιο είναι το όνομά μου;", το σύστημα στέλνει στην πραγματικότητα ολόκληρο το ιστορικό συνομιλίας, επιτρέποντας στο μοντέλο να δει ότι είπατε προηγουμένως "Το όνομά μου είναι Γιάννης."
-Το LangChain4j παρέχει υλοποιήσεις μνήμης που χειρίζονται αυτό αυτόματα. Επιλέγετε πόσα μηνύματα θέλετε να κρατάτε και το πλαίσιο διαχειρίζεται το παράθυρο πλαισίου. Το παρακάτω διάγραμμα δείχνει πώς το MessageWindowChatMemory διατηρεί ένα ολισθαίνων παράθυρο πρόσφατων μηνυμάτων.
+Το LangChain4j παρέχει υλοποιήσεις μνήμης που διαχειρίζονται αυτό αυτόματα. Επιλέγετε πόσα μηνύματα θα διατηρήσετε και το πλαίσιο διαχειρίζεται το παράθυρο πλαισίου (context window). Το διάγραμμα παρακάτω δείχνει πώς το MessageWindowChatMemory διατηρεί ένα κυλιόμενο παράθυρο πρόσφατων μηνυμάτων.
-
+
-*Το MessageWindowChatMemory διατηρεί ένα ολισθαίνων παράθυρο πρόσφατων μηνυμάτων, απομακρύνοντας αυτόματα τα παλιά*
+*Το MessageWindowChatMemory διατηρεί ένα κυλιόμενο παράθυρο πρόσφατων μηνυμάτων, απορρίπτοντας αυτόματα τα παλιά*
-## Πώς Χρησιμοποιεί Αυτό το LangChain4j
+## Πώς Χρησιμοποιείται το LangChain4j
-Αυτό το module επεκτείνει το γρήγορο ξεκίνημα ενσωματώνοντας το Spring Boot και προσθέτοντας μνήμη συνομιλίας. Δείτε πώς συνδέονται τα κομμάτια:
+Αυτό το module ενσωματώνει το Spring Boot και προσθέτει μνήμη συνομιλίας. Δείτε πώς συνδέονται τα κομμάτια:
**Εξαρτήσεις** - Προσθέστε δύο βιβλιοθήκες LangChain4j:
@@ -94,7 +94,7 @@
```
-**Chat Model** - Διαμορφώστε το Azure OpenAI ως Spring bean ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+**Μοντέλο Συνομιλίας** - Διαμορφώστε το Azure OpenAI ως Spring bean ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -109,7 +109,7 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-Ο builder διαβάζει τα διαπιστευτήρια από μεταβλητές περιβάλλοντος που ρυθμίζονται από το `azd up`. Η ρύθμιση `baseUrl` στο endpoint του Azure κάνει τον OpenAI client να λειτουργεί με το Azure OpenAI.
+Ο builder διαβάζει πιστοποιητικά από μεταβλητές περιβάλλοντος που ορίζει το `azd up`. Η ρύθμιση `baseUrl` στο τέλος του Azure endpoint σας κάνει τον OpenAI client να λειτουργεί με το Azure OpenAI.
**Μνήμη Συνομιλίας** - Παρακολουθήστε το ιστορικό συνομιλίας με MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
@@ -124,48 +124,48 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-Δημιουργήστε τη μνήμη με `withMaxMessages(10)` για να κρατήσει τα τελευταία 10 μηνύματα. Προσθέστε μηνύματα χρήστη και AI με typed wrappers: `UserMessage.from(text)` και `AiMessage.from(text)`. Ανακτήστε το ιστορικό με `memory.messages()` και στείλτε το στο μοντέλο. Η υπηρεσία αποθηκεύει ξεχωριστές εμφανίσεις μνήμης ανά ID συνομιλίας, επιτρέποντας σε πολλούς χρήστες να συνομιλούν ταυτόχρονα.
+Δημιουργήστε μνήμη με το `withMaxMessages(10)` για να διατηρήσετε τα τελευταία 10 μηνύματα. Προσθέστε μηνύματα χρήστη και AI με τυποποιημένους wrappers: `UserMessage.from(text)` και `AiMessage.from(text)`. Ανακτήστε το ιστορικό με `memory.messages()` και στείλτε το στο μοντέλο. Η υπηρεσία αποθηκεύει ξεχωριστές στιγμές μνήμης ανά αναγνωριστικό συνομιλίας, επιτρέποντας σε πολλούς χρήστες να συνομιλούν ταυτόχρονα.
> **🤖 Δοκιμάστε με το [GitHub Copilot](https://github.com/features/copilot) Chat:** Ανοίξτε το [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) και ρωτήστε:
-> - "Πώς αποφασίζει το MessageWindowChatMemory ποια μηνύματα θα απορρίψει όταν το παράθυρο είναι γεμάτο;"
-> - "Μπορώ να υλοποιήσω αποθήκευση μνήμης με βάση δεδομένων αντί για μνήμη RAM;"
-> - "Πώς θα πρόσθετα περίληψη για συμπίεση του παλιού ιστορικού συνομιλίας;"
+> - "Πώς αποφασίζει το MessageWindowChatMemory ποια μηνύματα να απορρίψει όταν το παράθυρο είναι γεμάτο;"
+> - "Μπορώ να υλοποιήσω προσαρμοσμένη αποθήκευση μνήμης χρησιμοποιώντας μια βάση δεδομένων αντί για in-memory;"
+> - "Πώς θα πρόσθετα σύνοψη για συμπίεση παλαιάς ιστορίας συνομιλίας;"
-Το endpoint του chat χωρίς κατάσταση παραλείπει τη μνήμη εντελώς - απλά `chatModel.chat(prompt)` όπως στο γρήγορο ξεκίνημα. Το endpoint με κατάσταση προσθέτει τα μηνύματα στη μνήμη, ανακτά το ιστορικό και συμπεριλαμβάνει αυτό το πλαίσιο με κάθε αίτημα. Ίδια διαμόρφωση μοντέλου, διαφορετικά πρότυπα.
+Το endpoint άνευ κατάστασης παραλείπει τελείως τη μνήμη - απλά `chatModel.chat(prompt)` όπως στην γρήγορη εκκίνηση. Το endpoint κατάστασης προσθέτει μηνύματα στη μνήμη, ανακτά το ιστορικό και συμπεριλαμβάνει το πλαίσιο σε κάθε αίτημα. Ίδια διαμόρφωση μοντέλου, διαφορετικά πρότυπα.
## Ανάπτυξη Υποδομής Azure OpenAI
**Bash:**
```bash
cd 01-introduction
-azd up # Επιλέξτε συνδρομή και τοποθεσία (προτείνεται eastus2)
+azd up # Επιλέξτε συνδρομή και τοποθεσία (συνιστάται eastus2)
```
**PowerShell:**
```powershell
cd 01-introduction
-azd up # Επιλέξτε συνδρομή και τοποθεσία (προτείνεται eastus2)
+azd up # Επιλέξτε συνδρομή και τοποθεσία (προτεινόμενο το eastus2)
```
-> **Σημείωση:** Αν αντιμετωπίσετε σφάλμα χρονικού ορίου (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), απλά εκτελέστε ξανά `azd up`. Οι πόροι Azure μπορεί να εξακολουθούν να αναπτύσσονται στο παρασκήνιο και η επανάληψη επιτρέπει την ολοκλήρωση της ανάπτυξης μόλις οι πόροι φτάσουν σε τελικό στάδιο.
+> **Σημείωση:** Αν αντιμετωπίσετε σφάλμα χρονικού ορίου (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), απλώς εκτελέστε ξανά `azd up`. Οι πόροι Azure μπορεί να αναπτύσσονται ακόμα στο παρασκήνιο, και η επανάληψη επιτρέπει την ολοκλήρωση ανάπτυξης όταν οι πόροι φτάσουν σε τελικό στάδιο.
Αυτό θα:
-1. Αναπτύξει πόρο Azure OpenAI με τα μοντέλα GPT-5.2 και text-embedding-3-small
-2. Δημιουργήσει αυτόματα το αρχείο `.env` στη ρίζα του project με διαπιστευτήρια
+1. Αναπτύξει πόρο Azure OpenAI με μοντέλα GPT-5.2 και text-embedding-3-small
+2. Δημιουργήσει αυτόματα το αρχείο `.env` στη ρίζα του project με πιστοποιητικά
3. Ρυθμίσει όλες τις απαιτούμενες μεταβλητές περιβάλλοντος
-**Έχετε προβλήματα ανάπτυξης;** Δείτε το [Infrastructure README](infra/README.md) για λεπτομερή αντιμετώπιση προβλημάτων, περιλαμβάνοντας συγκρούσεις ονομάτων υποτομέα, βήματα χειροκίνητης ανάπτυξης στο Azure Portal, και οδηγίες διαμόρφωσης μοντέλων.
+**Έχετε προβλήματα στην ανάπτυξη;** Δείτε το [README Υποδομής](infra/README.md) για λεπτομερή αντιμετώπιση προβλημάτων, συμπεριλαμβανομένων συγκρούσεων ονομάτων υποτομέων, χειροκίνητων βημάτων ανάπτυξης στο Azure Portal και οδηγιών διαμόρφωσης μοντέλου.
-**Επαληθεύστε ότι η ανάπτυξη πέτυχε:**
+**Επιβεβαίωση επιτυχούς ανάπτυξης:**
**Bash:**
```bash
-cat ../.env # Πρέπει να εμφανίζει AZURE_OPENAI_ENDPOINT, API_KEY, κ.λπ.
+cat ../.env # Θα πρέπει να εμφανίζει AZURE_OPENAI_ENDPOINT, API_KEY, κ.λπ.
```
**PowerShell:**
```powershell
-Get-Content ..\.env # Πρέπει να εμφανίζει το AZURE_OPENAI_ENDPOINT, το API_KEY, κ.λπ.
+Get-Content ..\.env # Θα πρέπει να εμφανίζει το AZURE_OPENAI_ENDPOINT, το API_KEY, κ.λπ.
```
> **Σημείωση:** Η εντολή `azd up` δημιουργεί αυτόματα το αρχείο `.env`. Αν χρειαστεί να το ενημερώσετε αργότερα, μπορείτε είτε να επεξεργαστείτε το `.env` χειροκίνητα είτε να το αναδημιουργήσετε εκτελώντας:
@@ -175,7 +175,7 @@ Get-Content ..\.env # Πρέπει να εμφανίζει το AZURE_OPENAI_EN
> cd ..
> bash .azd-env.sh
> ```
-
+>
> **PowerShell:**
> ```powershell
> cd ..
@@ -184,41 +184,41 @@ Get-Content ..\.env # Πρέπει να εμφανίζει το AZURE_OPENAI_EN
## Εκτέλεση της Εφαρμογής Τοπικά
-**Επαληθεύστε την ανάπτυξη:**
+**Επιβεβαίωση ανάπτυξης:**
-Βεβαιωθείτε ότι το αρχείο `.env` υπάρχει στη ρίζα με τα διαπιστευτήρια Azure. Εκτελέστε αυτό από τον φάκελο του module (`01-introduction/`):
+Βεβαιωθείτε ότι το αρχείο `.env` υπάρχει στον ριζικό κατάλογο με τα πιστοποιητικά Azure. Εκτελέστε αυτό από τον κατάλογο του module (`01-introduction/`):
**Bash:**
```bash
-cat ../.env # Πρέπει να εμφανίζει το AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+cat ../.env # Πρέπει να εμφανίζει το AZURE_OPENAI_ENDPOINT, το API_KEY, το DEPLOYMENT
```
**PowerShell:**
```powershell
-Get-Content ..\.env # Πρέπει να εμφανίζει AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+Get-Content ..\.env # Πρέπει να εμφανίζει το AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**Εκκίνηση των εφαρμογών:**
-**Επιλογή 1: Χρήση του Spring Boot Dashboard (Συνιστάται για χρήστες VS Code)**
+**Επιλογή 1: Χρήση Spring Boot Dashboard (Προτεινόμενο για χρήστες VS Code)**
-Το dev container περιλαμβάνει την επέκταση Spring Boot Dashboard, που παρέχει οπτικό περιβάλλον διαχείρισης όλων των εφαρμογών Spring Boot. Μπορείτε να τη βρείτε στη Λωρίδα Εργασιών αριστερά στο VS Code (αντιστοιχεί στο εικονίδιο Spring Boot).
+Το dev container περιλαμβάνει την επέκταση Spring Boot Dashboard, που παρέχει οπτική διεπαφή για διαχείριση όλων των εφαρμογών Spring Boot. Μπορείτε να τη βρείτε στη γραμμή δραστηριοτήτων στην αριστερή πλευρά του VS Code (αναζητήστε το εικονίδιο Spring Boot).
Από το Spring Boot Dashboard μπορείτε να:
-- δείτε όλες τις διαθέσιμες εφαρμογές Spring Boot στο workspace
-- ξεκινήσετε/σταματήσετε εφαρμογές με ένα κλικ
-- δείτε logs εφαρμογών σε πραγματικό χρόνο
-- παρακολουθήσετε την κατάσταση των εφαρμογών
+- Δείτε όλες τις διαθέσιμες εφαρμογές Spring Boot στο χώρο εργασίας
+- Ξεκινήσετε/σταματήσετε εφαρμογές με ένα κλικ
+- Δείτε logs εφαρμογών σε πραγματικό χρόνο
+- Παρακολουθήσετε κατάσταση εφαρμογών
-Απλά πατήστε το κουμπί play δίπλα στο "introduction" για να ξεκινήσετε αυτό το module, ή εκκινήστε όλα τα modules ταυτόχρονα.
+Απλά κάντε κλικ στο κουμπί αναπαραγωγής δίπλα στο "introduction" για να ξεκινήσετε αυτό το module ή ξεκινήστε όλα τα modules μαζί.
-*Το Spring Boot Dashboard στο VS Code — ξεκινήστε, σταματήστε και παρακολουθήστε όλα τα modules από ένα μέρος*
+*Το Spring Boot Dashboard στο VS Code — εκκινήστε, σταματήστε και παρακολουθήστε όλα τα modules από ένα σημείο*
**Επιλογή 2: Χρήση shell scripts**
-Ξεκινήστε όλες τις web εφαρμογές (modules 01-04):
+Ξεκινήστε όλες τις διαδικτυακές εφαρμογές (modules 01-04):
**Bash:**
```bash
@@ -246,31 +246,31 @@ cd 01-introduction
.\start.ps1
```
-Και τα δύο scripts φορτώνουν αυτόματα τις μεταβλητές περιβάλλοντος από το αρχείο `.env` στη ρίζα και θα χτίσουν τα JARs αν δεν υπάρχουν.
+Και τα δύο scripts φορτώνουν αυτόματα τις μεταβλητές περιβάλλοντος από το ριζικό αρχείο `.env` και θα χτίσουν τα JAR αν δεν υπάρχουν.
-> **Σημείωση:** Αν προτιμάτε να χτίσετε όλα τα modules χειροκίνητα πριν την εκκίνηση:
+> **Σημείωση:** Αν προτιμάτε να χτίσετε όλα τα modules χειροκίνητα πριν την εκτέλεση:
>
> **Bash:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-
+>
> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-Ανοίξτε http://localhost:8080 στον περιηγητή σας.
+Ανοίξτε το http://localhost:8080 στον περιηγητή σας.
**Για να σταματήσετε:**
**Bash:**
```bash
-./stop.sh # Μόνο αυτό το μοντέλο
+./stop.sh # Μόνο αυτό το μονάδα
# Ή
-cd .. && ./stop-all.sh # Όλα τα μοντέλα
+cd .. && ./stop-all.sh # Όλες οι μονάδες
```
**PowerShell:**
@@ -282,41 +282,41 @@ cd ..; .\stop-all.ps1 # Όλα τα μοντέλα
## Χρήση της Εφαρμογής
-Η εφαρμογή παρέχει μια web διεπαφή με δύο υλοποιήσεις chat δίπλα-δίπλα.
+Η εφαρμογή παρέχει διεπαφή ιστού με δύο υλοποιήσεις συνομιλίας παράλληλα.
-
+
-*Πίνακας ελέγχου που δείχνει τις επιλογές Simple Chat (χωρίς κατάσταση) και Conversational Chat (με κατάσταση)*
+*Πίνακας επιλογών που δείχνει και τις δύο επιλογές: Απλή Συνομιλία (άνευ κατάστασης) και Συνομιλία (με κατάσταση)*
-### Chat χωρίς Κατάσταση (Αριστερό Πάνελ)
+### Άνευ Κατάστασης Συνομιλία (Αριστερό Πάνελ)
-Δοκιμάστε πρώτα αυτό. Πείτε "Το όνομά μου είναι Ιωάννης" και έπειτα αμέσως ρωτήστε "Ποιο είναι το όνομά μου;" Το μοντέλο δεν θα θυμάται γιατί κάθε μήνυμα είναι ανεξάρτητο. Αυτό επιδεικνύει το βασικό πρόβλημα με την ενσωμάτωση γλωσσικών μοντέλων — κανένα πλαίσιο συνομιλίας.
+Δοκιμάστε πρώτα αυτό. Πείτε "Το όνομά μου είναι Γιάννης" και αμέσως μετά ρωτήστε "Ποιο είναι το όνομά μου;". Το μοντέλο δεν θα το θυμάται γιατί κάθε μήνυμα είναι ανεξάρτητο. Αυτό δείχνει το βασικό πρόβλημα της απλής ενσωμάτωσης μοντέλων γλώσσας - έλλειψη πλαισίου συνομιλίας.
-
+
-*Το AI δεν θυμάται το όνομά σας από το προηγούμενο μήνυμα*
+*Η AI δεν θυμάται το όνομά σας από το προηγούμενο μήνυμα*
-### Chat με Κατάσταση (Δεξί Πάνελ)
+### Κατάστασης Συνομιλία (Δεξί Πάνελ)
-Τώρα δοκιμάστε την ίδια αλληλουχία εδώ. Πείτε "Το όνομά μου είναι Ιωάννης" και μετά "Ποιο είναι το όνομά μου;" Αυτή τη φορά θυμάται. Η διαφορά είναι το MessageWindowChatMemory - διατηρεί το ιστορικό συνομιλίας και το συμπεριλαμβάνει σε κάθε αίτημα. Έτσι δουλεύει η παραγωγική AI συνομιλίας.
+Τώρα δοκιμάστε την ίδια ακολουθία εδώ. Πείτε "Το όνομά μου είναι Γιάννης" και μετά "Ποιο είναι το όνομά μου;". Αυτή τη φορά το θυμάται. Η διαφορά είναι το MessageWindowChatMemory - διατηρεί το ιστορικό συνομιλίας και το περιλαμβάνει σε κάθε αίτημα. Αυτός είναι ο τρόπος που λειτουργεί η παραγωγική συνομιλητική AI.
-
+
-*Το AI θυμάται το όνομά σας από νωρίτερα στη συνομιλία*
+*Η AI θυμάται το όνομά σας από νωρίτερα στη συνομιλία*
-Και τα δύο πάνελ χρησιμοποιούν το ίδιο μοντέλο GPT-5.2. Η μόνη διαφορά είναι η μνήμη. Αυτό καθιστά σαφές τι φέρνει η μνήμη στην εφαρμογή σας και γιατί είναι απαραίτητη για πραγματικές περιπτώσεις χρήσης.
+Και τα δύο πάνελ χρησιμοποιούν το ίδιο μοντέλο GPT-5.2. Η μόνη διαφορά είναι η μνήμη. Αυτό κάνει σαφές τι προσθέτει η μνήμη στην εφαρμογή σας και γιατί είναι απαραίτητη για πραγματικές περιπτώσεις χρήσης.
## Επόμενα Βήματα
-**Επόμενο Module:** [02-prompt-engineering - Μηχανική Προτροπών με GPT-5.2](../02-prompt-engineering/README.md)
+**Επόμενο Module:** [02-prompt-engineering - Μηχανική Προτροπής με GPT-5.2](../02-prompt-engineering/README.md)
---
-**Πλοήγηση:** [← Προηγούμενο: Module 00 - Γρήγορο Ξεκίνημα](../00-quick-start/README.md) | [Πίσω στην κεντρική σελίδα](../README.md) | [Επόμενο: Module 02 - Μηχανική Προτροπών →](../02-prompt-engineering/README.md)
+**Πλοήγηση:** [← Πίσω στην Κεντρική σελίδα](../README.md) | [Επόμενο: Module 02 - Μηχανική Προτροπής →](../02-prompt-engineering/README.md)
---
-**Αποποίηση ευθυνών**:
-Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να λάβετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα του πρέπει να θεωρείται ως η αυθεντική πηγή. Για σημαντικές πληροφορίες συνιστάται επαγγελματική μετάφραση από ανθρώπινο μεταφραστή. Δεν φέρουμε ευθύνη για τυχόν παρανοήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
+**Αποποίηση ευθυνών**:
+Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
\ No newline at end of file
diff --git a/translations/el/02-prompt-engineering/README.md b/translations/el/02-prompt-engineering/README.md
index 85d307444..d19ad39a2 100644
--- a/translations/el/02-prompt-engineering/README.md
+++ b/translations/el/02-prompt-engineering/README.md
@@ -1,101 +1,101 @@
-# Ενότητα 02: Μηχανική Προτροπών με GPT-5.2
+# Ενότητα 02: Μηχανική Προτροπής με GPT-5.2
## Περιεχόμενα
-- [Περίπατος Βίντεο](../../../02-prompt-engineering)
-- [Τι Θα Μάθετε](../../../02-prompt-engineering)
-- [Προαπαιτούμενα](../../../02-prompt-engineering)
-- [Κατανόηση της Μηχανικής Προτροπών](../../../02-prompt-engineering)
-- [Βασικά της Μηχανικής Προτροπών](../../../02-prompt-engineering)
- - [Zero-Shot Προτροπή](../../../02-prompt-engineering)
- - [Few-Shot Προτροπή](../../../02-prompt-engineering)
- - [Chain of Thought](../../../02-prompt-engineering)
- - [Ρόλος-Βασισμένη Προτροπή](../../../02-prompt-engineering)
- - [Πρότυπα Προτροπών](../../../02-prompt-engineering)
-- [Προχωρημένα Πρότυπα](../../../02-prompt-engineering)
-- [Εκτέλεση της Εφαρμογής](../../../02-prompt-engineering)
-- [Στιγμιότυπα Εφαρμογής](../../../02-prompt-engineering)
-- [Εξερεύνηση των Προτύπων](../../../02-prompt-engineering)
- - [Χαμηλός vs Υψηλός Ενθουσιασμός](../../../02-prompt-engineering)
- - [Εκτέλεση Εργασίας (Εισαγωγές Εργαλείων)](../../../02-prompt-engineering)
- - [Κώδικας Αυτοαντανάκλασης](../../../02-prompt-engineering)
- - [Δομημένη Ανάλυση](../../../02-prompt-engineering)
- - [Συζήτηση με Πολλούς Γύρους](../../../02-prompt-engineering)
- - [Λογισμός Βήμα-Βήμα](../../../02-prompt-engineering)
- - [Περιορισμένη Έξοδος](../../../02-prompt-engineering)
-- [Τι Πραγματικά Μαθαίνετε](../../../02-prompt-engineering)
-- [Επόμενα Βήματα](../../../02-prompt-engineering)
-
-## Περίπατος Βίντεο
+- [Οδηγός Βίντεο](#οδηγός-βίντεο)
+- [Τι Θα Μάθετε](#τι-θα-μάθετε)
+- [Προαπαιτούμενα](#προαπαιτούμενα)
+- [Κατανόηση της Μηχανικής Προτροπής](#κατανόηση-της-μηχανικής-προτροπής)
+- [Βασικά της Μηχανικής Προτροπής](#βασικά-της-μηχανικής-προτροπής)
+ - [Μηδενική-Πρότυπη Προτροπή](#μηδενική-πρότυπη-προτροπή)
+ - [Μερική-Πρότυπη Προτροπή](#μερική-πρότυπη-προτροπή)
+ - [Αλυσιδωτή Σκέψη](#αλυσιδωτή-σκέψη)
+ - [Προτροπή με Βάση Ρόλο](#προτροπή-με-βάση-ρόλο)
+ - [Πρότυπα Προτροπών](#πρότυπα-προτροπών)
+- [Προηγμένα Πρότυπα](#προηγμένα-πρότυπα)
+- [Εκτέλεση της Εφαρμογής](#εκτέλεση-της-εφαρμογής)
+- [Στιγμιότυπα Εφαρμογής](#στιγμιότυπα-εφαρμογής)
+- [Εξερεύνηση των Προτύπων](#εξερεύνηση-των-μοτίβων)
+ - [Χαμηλός έναντι Υψηλού Ζήλου](#χαμηλή-vs-υψηλή-προθυμία)
+ - [Εκτέλεση Εργασίας (Προλόγοι Εργαλείων)](#εκτέλεση-εργασιών-εισαγωγικά-εργαλείων)
+ - [Αυτο-Ανακλαστικός Κώδικας](#αυτοαξιολογούμενος-κώδικας)
+ - [Δομημένη Ανάλυση](#δομημένη-ανάλυση)
+ - [Πολλαπλός Γύρος Συνομιλίας](#πολυγλωσσική-συζήτηση)
+ - [Βήμα-Βήμα Συλλογισμός](#συλλογιστική-βήμα-βήμα)
+ - [Περιορισμένη Έξοδος](#περιορισμένη-έξοδος)
+- [Τι Μαθαίνετε Πραγματικά](#τι-μάθετε-πραγματικά)
+- [Επόμενα Βήματα](#επόμενα-βήματα)
+
+## Οδηγός Βίντεο
Παρακολουθήστε αυτήν την ζωντανή συνεδρία που εξηγεί πώς να ξεκινήσετε με αυτήν την ενότητα:
-
+
## Τι Θα Μάθετε
-Το παρακάτω διάγραμμα παρέχει μια επισκόπηση των βασικών θεμάτων και δεξιοτήτων που θα αναπτύξετε σε αυτήν την ενότητα — από τις τεχνικές βελτίωσης προτροπών μέχρι τη ροή εργασίας βήμα-βήμα που θα ακολουθήσετε.
+Το παρακάτω διάγραμμα παρέχει μια επισκόπηση των βασικών θεμάτων και δεξιοτήτων που θα αναπτύξετε σε αυτήν την ενότητα — από τεχνικές βελτίωσης προτροπών έως τη βήμα-βήμα ροή εργασίας που θα ακολουθήσετε.
-Στις προηγούμενες ενότητες, εξερευνήσατε βασικές αλληλεπιδράσεις LangChain4j με Μοντέλα GitHub και είδατε πώς η μνήμη επιτρέπει τη συνομιλιακή AI με το Azure OpenAI. Τώρα θα εστιάσουμε στο πώς κάνετε ερωτήσεις — τις προτροπές αυτές καθαυτές — χρησιμοποιώντας το GPT-5.2 του Azure OpenAI. Ο τρόπος που δομείτε τις προτροπές σας επηρεάζει δραστικά την ποιότητα των απαντήσεων που λαμβάνετε. Ξεκινάμε με μια ανασκόπηση των βασικών τεχνικών προτροπών και μετά προχωράμε σε οκτώ προχωρημένα πρότυπα που εκμεταλλεύονται πλήρως τις δυνατότητες του GPT-5.2.
+Στην προηγούμενη ενότητα είδατε πώς η μνήμη επιτρέπει τη συνομιλιακή ΤΝ με το Azure OpenAI. Τώρα θα επικεντρωθούμε στο πώς κάνετε ερωτήσεις — τις ίδιες τις προτροπές — χρησιμοποιώντας το GPT-5.2 του Azure OpenAI. Ο τρόπος που δομείτε τις προτροπές σας επηρεάζει δραματικά την ποιότητα των απαντήσεων που λαμβάνετε. Ξεκινάμε με μια επισκόπηση των βασικών τεχνικών προτροπών και στη συνέχεια προχωράμε σε οκτώ προχωρημένα πρότυπα που αξιοποιούν πλήρως τις δυνατότητες του GPT-5.2.
-Θα χρησιμοποιήσουμε το GPT-5.2 επειδή εισάγει τον έλεγχο λογισμού - μπορείτε να πείτε στο μοντέλο πόση σκέψη να κάνει πριν απαντήσει. Αυτό κάνει τις διάφορες στρατηγικές προτροπών πιο εμφανείς και σας βοηθά να καταλάβετε πότε να χρησιμοποιήσετε κάθε προσέγγιση. Θα επωφεληθούμε επίσης από τα λιγότερα όρια χρήσης του Azure για το GPT-5.2 σε σχέση με τα Μοντέλα GitHub.
+Θα χρησιμοποιήσουμε το GPT-5.2 γιατί εισάγει έλεγχο συλλογισμού - μπορείτε να πείτε στο μοντέλο πόση σκέψη να κάνει πριν απαντήσει. Αυτό καθιστά τις διάφορες στρατηγικές προτροπής πιο εμφανείς και σας βοηθά να κατανοήσετε πότε να χρησιμοποιείτε κάθε προσέγγιση.
## Προαπαιτούμενα
-- Ολοκληρωμένη Ενότητα 01 (έχουν αναπτυχθεί πόροι Azure OpenAI)
-- Αρχείο `.env` στον ριζικό κατάλογο με διαπιστευτήρια Azure (δημιουργήθηκε από `azd up` στην Ενότητα 01)
+- Ολοκληρωμένη Ενότητα 01 (αναπτυγμένοι πόροι Azure OpenAI)
+- Αρχείο `.env` στον ριζικό κατάλογο με τα διαπιστευτήρια Azure (δημιουργημένο με `azd up` στην Ενότητα 01)
-> **Σημείωση:** Αν δεν έχετε ολοκληρώσει την Ενότητα 01, ακολουθήστε πρώτα τις οδηγίες ανάπτυξης εκεί.
+> **Σημείωση:** Αν δεν έχετε ολοκληρώσει την Ενότητα 01, ακολουθήστε τις οδηγίες ανάπτυξης εκεί πρώτα.
-## Κατανόηση της Μηχανικής Προτροπών
+## Κατανόηση της Μηχανικής Προτροπής
-Στην ουσία, η μηχανική προτροπών είναι η διαφορά μεταξύ ασαφών οδηγιών και ακριβών, όπως δείχνει η παρακάτω σύγκριση.
+Στον πυρήνα της, η μηχανική προτροπής είναι η διαφορά μεταξύ ασαφών και ακριβών οδηγιών, όπως δείχνει η παρακάτω σύγκριση.
-
+
-Η μηχανική προτροπών αφορά στο σχεδιασμό του κειμένου εισόδου που επιτυγχάνει σταθερά τα αποτελέσματα που χρειάζεστε. Δεν είναι απλώς θέμα να κάνετε ερωτήσεις - πρόκειται για τη δομή των αιτημάτων ώστε το μοντέλο να κατανοεί ακριβώς τι θέλετε και πώς να το παραδώσει.
+Η μηχανική προτροπής αφορά το σχεδιασμό του κειμένου εισόδου που σας παρέχει σταθερά τα αποτελέσματα που χρειάζεστε. Δεν πρόκειται απλά για τη διατύπωση ερωτήσεων - πρόκειται για τη δομή αιτημάτων ώστε το μοντέλο να κατανοεί ακριβώς τι θέλετε και πώς να το παραδώσει.
-Σκεφτείτε το σαν να δίνετε οδηγίες σε έναν συνάδελφο. «Διόρθωσε το σφάλμα» είναι ασαφές. «Διόρθωσε την εξαίρεση null pointer στο UserService.java γραμμή 45 προσθέτοντας έλεγχο null» είναι συγκεκριμένο. Τα γλωσσικά μοντέλα λειτουργούν με τον ίδιο τρόπο - η εξειδίκευση και η δομή έχουν σημασία.
+Σκεφτείτε το σαν να δίνετε οδηγίες σε έναν συνάδελφο. «Διόρθωσε το σφάλμα» είναι ασαφές. «Διόρθωσε την εξαίρεση null pointer στο UserService.java γραμμή 45 προσθέτοντας έναν έλεγχο null» είναι συγκεκριμένο. Τα μοντέλα γλώσσας λειτουργούν με τον ίδιο τρόπο - η ακρίβεια και η δομή έχουν σημασία.
-Το παρακάτω διάγραμμα δείχνει πώς το LangChain4j εντάσσεται σε αυτήν την εικόνα — συνδέοντας τα πρότυπα προτροπών σας με το μοντέλο μέσω των δομικών μπλοκ SystemMessage και UserMessage.
+Το παρακάτω διάγραμμα δείχνει πώς το LangChain4j εντάσσεται σε αυτήν την εικόνα — συνδέοντας τα πρότυπα προτροπών σας με το μοντέλο μέσω των δομικών στοιχείων SystemMessage και UserMessage.
-
+
-Το LangChain4j παρέχει τη δομή — συνδέσεις μοντέλου, μνήμη και τύπους μηνυμάτων — ενώ τα πρότυπα προτροπών είναι απλώς προσεκτικά δομημένο κείμενο που στέλνετε μέσω αυτής της δομής. Τα βασικά δομικά στοιχεία είναι το `SystemMessage` (που ορίζει τη συμπεριφορά και το ρόλο του AI) και το `UserMessage` (που μεταφέρει το πραγματικό σας αίτημα).
+Το LangChain4j παρέχει την υποδομή — συνδέσεις μοντέλου, μνήμη και τύπους μηνυμάτων — ενώ τα πρότυπα προτροπών είναι απλώς προσεκτικά δομημένα κείμενα που στέλνετε μέσα από αυτή την υποδομή. Τα βασικά δομικά στοιχεία είναι το `SystemMessage` (που ορίζει τη συμπεριφορά και το ρόλο της ΤΝ) και το `UserMessage` (που μεταφέρει το πραγματικό σας αίτημα).
-## Βασικά της Μηχανικής Προτροπών
+## Βασικά της Μηχανικής Προτροπής
-Οι πέντε βασικές τεχνικές που φαίνονται παρακάτω σχηματίζουν το θεμέλιο της αποτελεσματικής μηχανικής προτροπών. Καθεμία απευθύνεται σε διαφορετική πτυχή του πώς επικοινωνείτε με τα γλωσσικά μοντέλα.
+Οι πέντε βασικές τεχνικές που εμφανίζονται παρακάτω αποτελούν τη βάση της αποτελεσματικής μηχανικής προτροπής. Η κάθε μία αντιμετωπίζει μια διαφορετική πτυχή της επικοινωνίας σας με τα μοντέλα γλώσσας.
-
+
-Πριν βουτήξουμε στα προχωρημένα πρότυπα αυτής της ενότητας, ας ανασκοπήσουμε πέντε θεμελιώδεις τεχνικές προτροπών. Αυτά είναι τα δομικά στοιχεία που κάθε μηχανικός προτροπών πρέπει να γνωρίζει. Αν έχετε ήδη δουλέψει στην [Ενότητα Γρήγορης Έναρξης](../00-quick-start/README.md#2-prompt-patterns), τα έχετε δει στην πράξη — εδώ είναι το εννοιολογικό πλαίσιο πίσω από αυτά.
+Πριν εμβαθύνετε στα προχωρημένα πρότυπα αυτής της ενότητας, ας δούμε πέντε θεμελιώδεις τεχνικές προτροπής. Αυτές είναι τα δομικά στοιχεία που κάθε μηχανικός προτροπών πρέπει να γνωρίζει.
-### Zero-Shot Προτροπή
+### Μηδενική-Πρότυπη Προτροπή
-Η πιο απλή προσέγγιση: δώστε στο μοντέλο μια απευθείας οδηγία χωρίς παραδείγματα. Το μοντέλο βασίζεται εξ ολοκλήρου στην εκπαίδευσή του για να καταλάβει και να εκτελέσει την εργασία. Αυτό λειτουργεί καλά για απλά αιτήματα όπου η αναμενόμενη συμπεριφορά είναι προφανής.
+Η απλούστερη προσέγγιση: δώστε στο μοντέλο μια άμεση οδηγία χωρίς παραδείγματα. Το μοντέλο βασίζεται αποκλειστικά στην εκπαίδευσή του για να κατανοήσει και να εκτελέσει την εργασία. Λειτουργεί καλά για απλά αιτήματα όπου η αναμενόμενη συμπεριφορά είναι προφανής.
-
+
-*Άμεση οδηγία χωρίς παραδείγματα — το μοντέλο συμπεραίνει την εργασία από την οδηγία μόνο*
+*Άμεση οδηγία χωρίς παραδείγματα — το μοντέλο συμπεραίνει την εργασία μόνο από την οδηγία*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
String response = model.chat(prompt);
-// Απάντηση: "Θετική"
+// Απόκριση: "Θετικό"
```
-**Πότε να τη χρησιμοποιήσετε:** Απλές ταξινομήσεις, άμεσες ερωτήσεις, μεταφράσεις ή οποιαδήποτε εργασία το μοντέλο μπορεί να χειριστεί χωρίς περαιτέρω καθοδήγηση.
+**Πότε να χρησιμοποιείται:** Απλές ταξινομήσεις, άμεσες ερωτήσεις, μεταφράσεις ή οποιαδήποτε εργασία που το μοντέλο μπορεί να χειριστεί χωρίς πρόσθετη καθοδήγηση.
-### Few-Shot Προτροπή
+### Μερική-Πρότυπη Προτροπή
-Παρέχετε παραδείγματα που δείχνουν το μοτίβο που θέλετε να ακολουθήσει το μοντέλο. Το μοντέλο μαθαίνει το αναμενόμενο πρότυπο εισόδου-εξόδου από τα παραδείγματά σας και το εφαρμόζει σε νέα δεδομένα. Αυτό βελτιώνει δραστικά τη συνέπεια για εργασίες όπου η επιθυμητή μορφή ή συμπεριφορά δεν είναι προφανής.
+Παρέχετε παραδείγματα που δείχνουν το πρότυπο που θέλετε να ακολουθήσει το μοντέλο. Το μοντέλο μαθαίνει το αναμενόμενο μορφότυπο εισόδου-εξόδου από τα παραδείγματα και το εφαρμόζει σε νέες εισόδους. Αυτό βελτιώνει δραματικά τη συνέπεια σε εργασίες όπου η επιθυμητή μορφή ή συμπεριφορά δεν είναι προφανής.
-
+
-*Μάθηση από παραδείγματα — το μοντέλο αναγνωρίζει το μοτίβο και το εφαρμόζει σε νέα δεδομένα*
+*Μάθηση από παραδείγματα — το μοντέλο αναγνωρίζει το πρότυπο και το εφαρμόζει σε νέες εισόδους*
```java
String prompt = """
@@ -112,15 +112,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Πότε να τη χρησιμοποιήσετε:** Προσαρμοσμένες ταξινομήσεις, συνεπής μορφοποίηση, εργασίες ειδικού τομέα, ή όταν τα αποτελέσματα zero-shot είναι ασυνεπή.
+**Πότε να χρησιμοποιείται:** Προσαρμοσμένες ταξινομήσεις, συνεπής μορφοποίηση, εργασίες ειδικού τομέα ή όταν τα αποτελέσματα μηδενικής-πρότυπης προτροπής είναι ασυνεπή.
-### Chain of Thought
+### Αλυσιδωτή Σκέψη
-Ζητήστε από το μοντέλο να δείξει το συλλογισμό του βήμα-βήμα. Αντί να πηδήξει κατευθείαν σε απάντηση, το μοντέλο αναλύει το πρόβλημα και δουλεύει κάθε μέρος ρητά. Αυτό βελτιώνει την ακρίβεια σε μαθηματικά, λογική και σύνθετες εργασίες συλλογισμού.
+Ζητήστε από το μοντέλο να δείξει τη λογική του βήμα-βήμα. Αντί να πηδήξει απευθείας σε μια απάντηση, το μοντέλο αναλύει το πρόβλημα και προχωρά σε κάθε μέρος ρητά. Αυτό βελτιώνει την ακρίβεια σε μαθηματικά, λογική και πολύ-βηματικές εργασίες συλλογισμού.
-
+
-*Λογισμός βήμα-βήμα — ανάλυση σύνθετων προβλημάτων σε ρητά λογικά βήματα*
+*Βήμα-βήμα συλλογισμός — διάσπαση σύνθετων προβλημάτων σε ρητές λογικές ενότητες*
```java
String prompt = """
@@ -133,15 +133,15 @@ String response = model.chat(prompt);
// Το μοντέλο δείχνει: 15 - 8 = 7, στη συνέχεια 7 + 12 = 19 μήλα
```
-**Πότε να τη χρησιμοποιήσετε:** Μαθηματικά προβλήματα, λογικά παζλ, αποσφαλμάτωση ή οποιαδήποτε εργασία όπου η εμφάνιση της διαδικασίας συλλογισμού βελτιώνει την ακρίβεια και την εμπιστοσύνη.
+**Πότε να χρησιμοποιείται:** Μαθηματικά προβλήματα, λογικά παζλ, αποσφαλμάτωση ή οποιαδήποτε εργασία όπου η εμφάνιση της διαδικασίας συλλογισμού βελτιώνει την ακρίβεια και την αξιοπιστία.
-### Ρόλος-Βασισμένη Προτροπή
+### Προτροπή με Βάση Ρόλο
-Ορίστε μια περσόνα ή ρόλο για το AI πριν κάνετε την ερώτησή σας. Αυτό παρέχει πλαίσιο που διαμορφώνει τον τόνο, το βάθος και την εστίαση της απάντησης. Ένας «αρχιτέκτονας λογισμικού» δίνει διαφορετικές συμβουλές από έναν «νεότερο προγραμματιστή» ή έναν «ελεγκτή ασφαλείας».
+Ορίστε μια περσόνα ή ρόλο για την ΤΝ πριν κάνετε την ερώτησή σας. Αυτό παρέχει πλαίσιο που διαμορφώνει τον τόνο, το βάθος και την εστίαση της απάντησης. Ένας «αρχιτέκτονας λογισμικού» δίνει διαφορετικές συμβουλές από έναν «νεότερο προγραμματιστή» ή έναν «ελεγκτή ασφαλείας».
-
+
-*Ορισμός πλαισίου και περσόνας — η ίδια ερώτηση παίρνει διαφορετική απάντηση ανάλογα με τον ανατεθειμένο ρόλο*
+*Ορισμός πλαισίου και περσόνας — η ίδια ερώτηση λαμβάνει διαφορετική απάντηση ανάλογα με τον ορισμένο ρόλο*
```java
String prompt = """
@@ -157,15 +157,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Πότε να τη χρησιμοποιήσετε:** Ανασκοπήσεις κώδικα, διδασκαλία, ανάλυση ειδικού τομέα ή όταν χρειάζεστε απαντήσεις προσαρμοσμένες σε συγκεκριμένο επίπεδο εμπειρογνωμοσύνης ή οπτική γωνία.
+**Πότε να χρησιμοποιείται:** Αναθεώρηση κώδικα, διδασκαλία, ανάλυση ειδικού τομέα ή όταν χρειάζεστε απαντήσεις προσαρμοσμένες σε συγκεκριμένο επίπεδο τεχνογνωσίας ή προοπτική.
### Πρότυπα Προτροπών
-Δημιουργήστε επαναχρησιμοποιήσιμες προτροπές με μεταβλητές θέσεις. Αντί να γράφετε μια νέα προτροπή κάθε φορά, ορίστε ένα πρότυπο μία φορά και γεμίστε με διαφορετικές τιμές. Η κλάση `PromptTemplate` του LangChain4j το καθιστά εύκολο με τη σύνταξη `{{variable}}`.
+Δημιουργήστε επαναχρησιμοποιήσιμες προτροπές με μεταβλητές θέσεις. Αντί να γράφετε μια νέα προτροπή κάθε φορά, ορίστε ένα πρότυπο μία φορά και συμπληρώστε διαφορετικές τιμές. Η κλάση `PromptTemplate` του LangChain4j το καθιστά εύκολο με τη σύνταξη `{{variable}}`.
-*Επαναχρησιμοποιήσιμες προτροπές με μεταβλητές θέσεις — ένα πρότυπο, πολλές χρήσεις*
+*Επαναχρησιμοποιήσιμες προτροπές με μεταβλητές — ένα πρότυπο, πολλές χρήσεις*
```java
PromptTemplate template = PromptTemplate.from(
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**Πότε να τη χρησιμοποιήσετε:** Επαναλαμβανόμενα ερωτήματα με διαφορετικές εισόδους, μαζική επεξεργασία, δημιουργία επαναχρησιμοποιήσιμων ροών εργασίας AI ή οποιοδήποτε σενάριο όπου η δομή της προτροπής παραμένει ίδια αλλά αλλάζουν τα δεδομένα.
+**Πότε να χρησιμοποιείται:** Επανάληψη ερωτημάτων με διαφορετικές εισόδους, επεξεργασία παρτίδων, κατασκευή επαναχρησιμοποιήσιμων ροών εργασίας ΤΝ ή οποιοδήποτε σενάριο όπου η δομή της προτροπής παραμένει ίδια αλλά τα δεδομένα αλλάζουν.
---
-Αυτά τα πέντε θεμελιώδη σας δίνουν ένα σταθερό εργαλείο για τις περισσότερες εργασίες προτροπών. Το υπόλοιπο αυτής της ενότητας βασίζεται σε αυτά με **οκτώ προχωρημένα πρότυπα** που εκμεταλλεύονται τον έλεγχο λογισμού, την αυτοαξιολόγηση και τις ικανότητες δομημένης εξόδου του GPT-5.2.
+Αυτά τα πέντε βασικά στοιχεία σας παρέχουν ένα στιβαρό σύνολο εργαλείων για τις περισσότερες εργασίες προτροπής. Το υπόλοιπο της ενότητας βασίζεται σε αυτά με **οκτώ προχωρημένα πρότυπα** που αξιοποιούν τον έλεγχο συλλογισμού, την αυτο-αξιολόγηση και τις δομημένες δυνατότητες εξόδου του GPT-5.2.
-## Προχωρημένα Πρότυπα
+## Προηγμένα Πρότυπα
-Με τα βασικά καλυμμένα, ας περάσουμε στα οκτώ προχωρημένα πρότυπα που κάνουν αυτήν την ενότητα μοναδική. Δεν χρειάζεται κάθε πρόβλημα την ίδια προσέγγιση. Κάποιες ερωτήσεις χρειάζονται γρήγορες απαντήσεις, άλλες βαθιά σκέψη. Κάποιες χρειάζονται ορατό λογισμό, άλλες μόνο αποτελέσματα. Κάθε πρότυπο παρακάτω είναι βελτιστοποιημένο για διαφορετικό σενάριο — και ο έλεγχος λογισμού του GPT-5.2 κάνει τις διαφορές ακόμα πιο εμφανείς.
+Με τα βασικά καλυμμένα, ας περάσουμε στα οκτώ προχωρημένα πρότυπα που καθιστούν αυτήν την ενότητα μοναδική. Όχι όλα τα προβλήματα χρειάζονται την ίδια προσέγγιση. Κάποιες ερωτήσεις θέλουν γρήγορες απαντήσεις, άλλες βαθιά σκέψη. Κάποιες απαιτούν ορατό συλλογισμό, άλλες μόνο αποτελέσματα. Κάθε πρότυπο παρακάτω είναι βελτιστοποιημένο για διαφορετικό σενάριο — και ο έλεγχος συλλογισμού του GPT-5.2 καθιστά τις διαφορές ακόμα πιο έντονες.
-
+
-*Επισκόπηση των οκτώ προτύπων μηχανικής προτροπών και των περιπτώσεων χρήσης τους*
+*Επισκόπηση των οκτώ προτύπων μηχανικής προτροπής και των περιπτώσεων χρήσης τους*
-Το GPT-5.2 προσθέτει μια ακόμα διάσταση σε αυτά τα πρότυπα: *έλεγχο λογισμού*. Η γραμμή κύλισης παρακάτω δείχνει πόσο μπορείτε να προσαρμόσετε την προσπάθεια σκέψης του μοντέλου — από γρήγορες, άμεσες απαντήσεις σε βαθιά, λεπτομερή ανάλυση.
+Το GPT-5.2 προσθέτει μια επιπλέον διάσταση σε αυτά τα πρότυπα: *έλεγχο συλλογισμού*. Ο παρακάτω ρυθμιστής δείχνει πώς μπορείτε να ρυθμίσετε την προσπάθεια σκέψης του μοντέλου — από γρήγορες, άμεσες απαντήσεις έως βαθιά, ολοκληρωμένη ανάλυση.
-
+
-*Ο έλεγχος λογισμού του GPT-5.2 σάς επιτρέπει να καθορίσετε πόση σκέψη πρέπει να κάνει το μοντέλο — από γρήγορες άμεσες απαντήσεις έως βαθιά διερεύνηση*
+*Ο έλεγχος συλλογισμού του GPT-5.2 σας επιτρέπει να καθορίσετε πόση σκέψη πρέπει να κάνει το μοντέλο — από γρήγορες απαντήσεις έως βαθιά εξερεύνηση*
-**Χαμηλός Ενθουσιασμός (Γρήγορο & Εστιασμένο)** - Για απλές ερωτήσεις όπου θέλετε γρήγορες, άμεσες απαντήσεις. Το μοντέλο κάνει ελάχιστο λογισμό - μέγιστο 2 βήματα. Χρησιμοποιήστε το για υπολογισμούς, αναζητήσεις ή απλές ερωτήσεις.
+**Χαμηλός Ζήλος (Γρήγορο & Εστιασμένο)** - Για απλές ερωτήσεις όπου θέλετε γρήγορες, άμεσες απαντήσεις. Το μοντέλο κάνει ελάχιστο συλλογισμό - το πολύ 2 βήματα. Χρησιμοποιήστε το για υπολογισμούς, αναζητήσεις ή απλές ερωτήσεις.
```java
String prompt = """
@@ -219,12 +219,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> 💡 **Διερευνήστε με GitHub Copilot:** Ανοίξτε το [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) και ρωτήστε:
-> - "Ποια είναι η διαφορά μεταξύ προτύπων προτροπής χαμηλού και υψηλού ενθουσιασμού;"
-> - "Πώς βοηθούν τα XML tags στις προτροπές στη δομή της απάντησης του AI;"
-> - "Πότε πρέπει να χρησιμοποιώ πρότυπα αυτοαντανάκλασης αντί για άμεσες οδηγίες;"
+> 💡 **Εξερευνήστε με το GitHub Copilot:** Ανοίξτε το [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) και ρωτήστε:
+> - "Ποια είναι η διαφορά ανάμεσα σε πρότυπα χαμηλού και υψηλού ζήλου;"
+> - "Πώς βοηθούν τα XML tags στη δομή της απάντησης της ΤΝ;"
+> - "Πότε να χρησιμοποιώ πρότυπα αυτο-ανασκόπησης έναντι άμεσης οδηγίας;"
-**Υψηλός Ενθουσιασμός (Βαθύς & Λεπτομερής)** - Για σύνθετα προβλήματα όπου θέλετε ολοκληρωμένη ανάλυση. Το μοντέλο εξερευνά εκτενώς και δείχνει λεπτομερή συλλογισμό. Χρησιμοποιήστε το για σχεδιασμό συστημάτων, αποφάσεις αρχιτεκτονικής ή σύνθετη έρευνα.
+**Υψηλός Ζήλος (Βαθιά & Αναλυτικό)** - Για σύνθετα προβλήματα όπου θέλετε ολοκληρωμένη ανάλυση. Το μοντέλο εξερευνά διεξοδικά και δείχνει λεπτομερή συλλογισμό. Χρησιμοποιήστε το για σχεδιασμό συστήματος, αρχιτεκτονικές αποφάσεις ή πολύπλοκη έρευνα.
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**Εκτέλεση Εργασίας (Πρόοδος Βήμα-Βήμα)** - Για ροές εργασίας με πολλαπλά βήματα. Το μοντέλο παρέχει ένα αρχικό πλάνο, αφηγείται κάθε βήμα καθώς εργάζεται, και μετά δίνει μια περίληψη. Χρησιμοποιήστε το για μεταφορές, υλοποιήσεις ή οποιαδήποτε διαδικασία με πολλά βήματα.
+**Εκτέλεση Εργασίας (Πρόοδος Βήμα-Βήμα)** - Για ροές εργασίας με πολλά βήματα. Το μοντέλο παρέχει αρχικό σχεδιασμό, αφηγείται κάθε βήμα καθώς εργάζεται και στη συνέχεια δίνει περίληψη. Χρησιμοποιήστε το για μετακινήσεις, υλοποιήσεις ή οποιαδήποτε διαδικασία πολλαπλών βημάτων.
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Η προτροπή Chain-of-Thought ζητά ρητά από το μοντέλο να δείξει τη διαδικασία συλλογισμού του, βελτιώνοντας την ακρίβεια για σύνθετες εργασίες. Η ανάλυση βήμα-βήμα βοηθά τόσο τους ανθρώπους όσο και το AI να κατανοήσουν τη λογική.
+Η προτροπή αλυσιδωτής σκέψης ζητά ρητά από το μοντέλο να δείξει τη διαδικασία συλλογισμού του, βελτιώνοντας την ακρίβεια για σύνθετες εργασίες. Η διάσπαση βήμα-βήμα βοηθά ανθρώπους και ΤΝ να κατανοήσουν τη λογική.
-> **🤖 Δοκιμάστε με [GitHub Copilot](https://github.com/features/copilot) Chat:** Ρωτήστε για αυτό το πρότυπο:
+> **🤖 Δοκιμάστε με συνομιλία [GitHub Copilot](https://github.com/features/copilot):** Ρωτήστε για αυτό το πρότυπο:
> - "Πώς θα προσαρμόσω το πρότυπο εκτέλεσης εργασίας για μακροχρόνιες λειτουργίες;"
-> - "Ποιες είναι οι βέλτιστες πρακτικές για τη δομή εισαγωγών εργαλείων σε εφαρμογές παραγωγής;"
-> - "Πώς μπορώ να καταγράψω και να εμφανίσω τις ενδιάμεσες ενημερώσεις προόδου σε UI;"
+> - "Ποιες είναι οι βέλτιστες πρακτικές για δομή προλόγων εργαλείων σε παραγωγικές εφαρμογές;"
+> - "Πώς μπορώ να καταγράψω και να εμφανίσω ενδιάμεσα ενημερώσεις προόδου σε UI;"
-Το παρακάτω διάγραμμα απεικονίζει αυτήν τη ροή εργασίας Σχεδίαση → Εκτέλεση → Περίληψη.
+Το παρακάτω διάγραμμα απεικονίζει αυτή τη ροή εργασίας Σχεδιασμός → Εκτέλεση → Περίληψη.
-*Ροή εργασίας Σχεδίαση → Εκτέλεση → Περίληψη για εργασίες με πολλά βήματα*
+*Ροή εργασίας Σχεδιασμός → Εκτέλεση → Περίληψη για εργασίες πολλαπλών βημάτων*
-**Κώδικας Αυτοαντανάκλασης** - Για παραγωγή κώδικα ποιότητας παραγωγής. Το μοντέλο παράγει κώδικα που ακολουθεί πρότυπα παραγωγής με σωστή διαχείριση σφαλμάτων. Χρησιμοποιήστε το όταν δημιουργείτε νέες λειτουργίες ή υπηρεσίες.
+**Αυτο-Ανακλαστικός Κώδικας** - Για παραγωγή κώδικα ποιότητας παραγωγής. Το μοντέλο παράγει κώδικα που ακολουθεί πρότυπα παραγωγής με σωστή διαχείριση σφαλμάτων. Χρησιμοποιήστε το όταν δημιουργείτε νέες λειτουργίες ή υπηρεσίες.
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Το παρακάτω διάγραμμα δείχνει αυτόν τον επαναληπτικό κύκλο βελτίωσης — παράγει, αξιολογεί, εντοπίζει αδυναμίες και βελτιώνει μέχρι ο κώδικας να πληροί τα πρότυπα παραγωγής.
+Το παρακάτω διάγραμμα δείχνει αυτόν τον επαναληπτικό βρόχο βελτίωσης — παραγωγή, αξιολόγηση, εντοπισμός αδυναμιών και βελτίωση μέχρι ο κώδικας να ανταποκρίνεται στα πρότυπα παραγωγής.
-
+
-*Επαναληπτικός κύκλος βελτίωσης - παραγωγή, αξιολόγηση, εντοπισμός προβλημάτων, βελτίωση, επανάληψη*
+*Επαναληπτικός βρόχος βελτίωσης - παραγωγή, αξιολόγηση, εντοπισμός θεμάτων, βελτίωση, επανάληψη*
-**Δομημένη Ανάλυση** - Για συνεπή αξιολόγηση. Το μοντέλο ελέγχει τον κώδικα χρησιμοποιώντας ένα σταθερό πλαίσιο (ορθότητα, πρακτικές, επιδόσεις, ασφάλεια, διαχειρισιμότητα). Χρησιμοποιήστε το για ανασκοπήσεις κώδικα ή αξιολογήσεις ποιότητας.
+**Δομημένη Ανάλυση** - Για συνεπή αξιολόγηση. Το μοντέλο αναθεωρεί κώδικα χρησιμοποιώντας ένα σταθερό πλαίσιο (σωστότητα, πρακτικές, απόδοση, ασφάλεια, διατηρησιμότητα). Χρησιμοποιήστε το για αναθεωρήσεις κώδικα ή αξιολογήσεις ποιότητας.
```java
String prompt = """
@@ -354,18 +354,18 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> **🤖 Δοκιμάστε με [GitHub Copilot](https://github.com/features/copilot) Chat:** Ρωτήστε για δομημένη ανάλυση:
-> - "Πώς μπορώ να προσαρμόσω το πλαίσιο ανάλυσης για διαφορετικούς τύπους ανασκοπήσεων κώδικα;"
-> - "Ποιος είναι ο καλύτερος τρόπος να αναλύσω και να ενεργήσω σε δομημένη έξοδο προγραμματιστικά;"
-> - "Πώς διασφαλίζω συνεπή επίπεδα σοβαρότητας σε διαφορετικές συνεδρίες ανασκόπησης;"
+> **🤖 Δοκιμάστε με συνομιλία [GitHub Copilot](https://github.com/features/copilot):** Ρωτήστε για δομημένη ανάλυση:
+> - "Πώς μπορώ να προσωποποιήσω το πλαίσιο ανάλυσης για διαφορετικούς τύπους αναθεωρήσεων κώδικα;"
+> - "Ποιος είναι ο καλύτερος τρόπος για να αναλύσω και να ενεργήσω σε δομημένη έξοδο προγραμματιστικά;"
+> - "Πώς εξασφαλίζω συνεπή επίπεδα σοβαρότητας σε διαφορετικές συνεδρίες αναθεώρησης;"
-Το παρακάτω διάγραμμα δείχνει πώς αυτό το δομημένο πλαίσιο οργανώνει μια ανασκόπηση κώδικα σε συνεπείς κατηγορίες με επίπεδα σοβαρότητας.
+Το παρακάτω διάγραμμα δείχνει πώς αυτό το δομημένο πλαίσιο οργανώνει μια αναθεώρηση κώδικα σε συνεπείς κατηγορίες με επίπεδα σοβαρότητας.
-*Πλαίσιο για συνεπείς ανασκοπήσεις κώδικα με επίπεδα σοβαρότητας*
+*Πλαίσιο για συνεπείς αναθεωρήσεις κώδικα με επίπεδα σοβαρότητας*
-**Συζήτηση με Πολλούς Γύρους** - Για συνομιλίες που χρειάζονται πλαίσιο. Το μοντέλο θυμάται προηγούμενα μηνύματα και χτίζει πάνω σε αυτά. Χρησιμοποιήστε το για διαδραστικές συνεδρίες βοήθειας ή σύνθετες ερωτήσεις και απαντήσεις.
+**Πολλαπλός Γύρος Συνομιλίας** - Για συνομιλίες που χρειάζονται πλαίσιο. Το μοντέλο θυμάται προηγούμενα μηνύματα και χτίζει πάνω σε αυτά. Χρησιμοποιήστε το για διαδραστικές συνεδρίες βοήθειας ή σύνθετες ερωτήσεις-απαντήσεις.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-Το διάγραμμα παρακάτω οπτικοποιεί το πώς το πλαίσιο της συνομιλίας συσσωρεύεται με κάθε γύρο και πώς σχετίζεται με το όριο token του μοντέλου.
+Το παρακάτω διάγραμμα απεικονίζει πώς συσσωρεύεται το πλαίσιο συνομιλίας με κάθε γύρο και πώς σχετίζεται με το όριο token του μοντέλου.
-
+
-*Πώς συσσωρεύεται το πλαίσιο συνομιλίας μέσω πολλαπλών γύρων μέχρι να φτάσει το όριο token*
-**Βήμα-Βήμα Λογισμός** - Για προβλήματα που απαιτούν ορατή λογική. Το μοντέλο δείχνει ρητό συλλογισμό για κάθε βήμα. Χρησιμοποιήστε το αυτό για μαθηματικά προβλήματα, γρίφους λογικής ή όταν χρειάζεται να κατανοήσετε τη διαδικασία σκέψης.
+*Πώς συσσωρεύεται το πλαίσιο συνομιλίας σε πολλούς γύρους μέχρι να φτάσει το όριο token*
+
+**Βήμα-Βήμα Συλλογισμός** - Για προβλήματα που απαιτούν ορατή λογική. Το μοντέλο δείχνει ρητή λογική για κάθε βήμα. Χρησιμοποιήστε το για μαθηματικά προβλήματα, λογικά παζλ ή όταν χρειάζεστε να κατανοήσετε τη διαδικασία σκέψης.
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Το παρακάτω διάγραμμα απεικονίζει πώς το μοντέλο διασπά τα προβλήματα σε ρητά, αριθμημένα λογικά βήματα.
+Το παρακάτω διάγραμμα απεικονίζει πώς το μοντέλο διασπά προβλήματα σε ρητά, αριθμημένα λογικά βήματα.
+*Αποσύνθεση προβλημάτων σε ρητά λογικά βήματα*
-*Διάσπαση προβλημάτων σε ρητά λογικά βήματα*
-
-**Περιορισμένη Έξοδος** - Για απαντήσεις με συγκεκριμένες απαιτήσεις μορφής. Το μοντέλο ακολουθεί αυστηρά τους κανόνες μορφής και μήκους. Χρησιμοποιήστε αυτό για περιλήψεις ή όταν χρειάζεστε ακριβή δομή εξόδου.
+**Περιορισμένη Έξοδος** - Για απαντήσεις με συγκεκριμένες απαιτήσεις μορφοποίησης. Το μοντέλο ακολουθεί αυστηρά τους κανόνες μορφής και μήκους. Χρησιμοποιήστε το για περιλήψεις ή όταν χρειάζεστε ακριβή δομή εξόδου.
```java
String prompt = """
@@ -420,9 +420,9 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Το παρακάτω διάγραμμα δείχνει πώς οι περιορισμοί καθοδηγούν το μοντέλο να παράγει έξοδο που ακολουθεί αυστηρά τις απαιτήσεις σας για μορφή και μήκος.
+Το παρακάτω διάγραμμα δείχνει πώς οι περιορισμοί καθοδηγούν το μοντέλο να παράγει έξοδο που συμμορφώνεται αυστηρά με τις απαιτήσεις μορφής και μήκους σας.
-
+
*Επιβολή συγκεκριμένων απαιτήσεων μορφής, μήκους και δομής*
@@ -430,7 +430,7 @@ String response = chatModel.chat(prompt);
**Επαλήθευση ανάπτυξης:**
-Βεβαιωθείτε ότι το αρχείο `.env` υπάρχει στον κύριο φάκελο με τα διαπιστευτήρια Azure (δημιουργήθηκε κατά το Module 01). Εκτελέστε από το φάκελο του module (`02-prompt-engineering/`):
+Βεβαιωθείτε ότι το αρχείο `.env` υπάρχει στον κεντρικό κατάλογο με τα διαπιστευτήρια Azure (δημιουργήθηκε κατά το Module 01). Τρέξτε αυτό από τον κατάλογο του module (`02-prompt-engineering/`):
**Bash:**
```bash
@@ -439,32 +439,32 @@ cat ../.env # Θα πρέπει να εμφανίζει AZURE_OPENAI_ENDPOINT,
**PowerShell:**
```powershell
-Get-Content ..\.env # Πρέπει να εμφανίζει το AZURE_OPENAI_ENDPOINT, το API_KEY, το DEPLOYMENT
+Get-Content ..\.env # Πρέπει να εμφανίζει το AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**Εκκίνηση της εφαρμογής:**
-> **Σημείωση:** Αν έχετε ήδη εκκινήσει όλες τις εφαρμογές χρησιμοποιώντας `./start-all.sh` από τον κύριο φάκελο (όπως περιγράφεται στο Module 01), αυτό το module ήδη τρέχει στην θύρα 8083. Μπορείτε να παραλείψετε τις εντολές εκκίνησης παρακάτω και να πάτε απευθείας στο http://localhost:8083.
+> **Σημείωση:** Αν έχετε ήδη ξεκινήσει όλες τις εφαρμογές χρησιμοποιώντας το `./start-all.sh` από τον κεντρικό κατάλογο (όπως περιγράφεται στο Module 01), αυτό το module τρέχει ήδη στην πόρτα 8083. Μπορείτε να παραλείψετε τις εντολές εκκίνησης παρακάτω και να πάτε απευθείας στο http://localhost:8083.
**Επιλογή 1: Χρήση του Spring Boot Dashboard (Συνιστάται για χρήστες VS Code)**
-Το περιβάλλον ανάπτυξης περιλαμβάνει την επέκταση Spring Boot Dashboard, η οποία παρέχει οπτική διεπαφή για τη διαχείριση όλων των εφαρμογών Spring Boot. Μπορείτε να τη βρείτε στη γραμμή δραστηριοτήτων αριστερά στο VS Code (αναζητήστε το εικονίδιο Spring Boot).
+Το περιβάλλον ανάπτυξης περιλαμβάνει την επέκταση Spring Boot Dashboard, η οποία προσφέρει οπτική διεπαφή για τη διαχείριση όλων των εφαρμογών Spring Boot. Μπορείτε να το βρείτε στη Γραμμή Δραστηριοτήτων αριστερά στο VS Code (αναζητήστε το εικονίδιο Spring Boot).
Από το Spring Boot Dashboard, μπορείτε να:
-- Δείτε όλες τις διαθέσιμες εφαρμογές Spring Boot στο χώρο εργασίας
-- Εκκινήσετε/σταματήσετε εφαρμογές με ένα κλικ
-- Παρακολουθήσετε τα αρχεία καταγραφής εφαρμογών σε πραγματικό χρόνο
-- Επιβλέψετε την κατάσταση των εφαρμογών
+- Δείτε όλες τις διαθέσιμες εφαρμογές Spring Boot στον χώρο εργασίας
+- Ξεκινήσετε/σταματήσετε εφαρμογές με ένα κλικ
+- Προβάλετε τα αρχεία καταγραφής εφαρμογών σε πραγματικό χρόνο
+- Παρακολουθείτε την κατάσταση της εφαρμογής
Απλά κάντε κλικ στο κουμπί αναπαραγωγής δίπλα στο "prompt-engineering" για να ξεκινήσετε αυτό το module, ή ξεκινήστε όλα τα modules ταυτόχρονα.
-
+
-*Το Spring Boot Dashboard στο VS Code — εκκίνηση, διακοπή και παρακολούθηση όλων των modules από ένα μέρος*
+*Το Spring Boot Dashboard στο VS Code — ξεκινήστε, σταματήστε και παρακολουθήστε όλα τα modules από ένα σημείο*
**Επιλογή 2: Χρήση scripts κελύφους**
-Εκκινήστε όλες τις web εφαρμογές (modules 01-04):
+Ξεκινήστε όλες τις web εφαρμογές (modules 01-04):
**Bash:**
```bash
@@ -478,7 +478,7 @@ cd .. # Από τον ριζικό κατάλογο
.\start-all.ps1
```
-Ή εκκινήστε μόνο αυτό το module:
+Ή ξεκινήστε μόνο αυτό το module:
**Bash:**
```bash
@@ -492,9 +492,9 @@ cd 02-prompt-engineering
.\start.ps1
```
-Και τα δύο scripts φορτώνουν αυτόματα μεταβλητές περιβάλλοντος από το αρχείο `.env` στον κύριο φάκελο και θα χτίσουν τα JAR αν δεν υπάρχουν.
+Και τα δύο scripts φορτώνουν αυτόματα μεταβλητές περιβάλλοντος από το κεντρικό `.env` αρχείο και θα κατασκευάσουν τα JAR αν δεν υπάρχουν.
-> **Σημείωση:** Αν προτιμάτε να χτίσετε όλα τα modules χειροκίνητα πριν ξεκινήσετε:
+> **Σημείωση:** Αν προτιμάτε να χτίσετε όλα τα modules χειροκίνητα πριν την εκκίνηση:
>
> **Bash:**
> ```bash
@@ -521,88 +521,88 @@ cd .. && ./stop-all.sh # Όλα τα modules
**PowerShell:**
```powershell
-.\stop.ps1 # Μόνο αυτό το μονάδα
+.\stop.ps1 # Μόνο αυτό το module
# Ή
-cd ..; .\stop-all.ps1 # Όλες οι μονάδες
+cd ..; .\stop-all.ps1 # Όλα τα module
```
-## Στιγμιότυπα οθόνης της εφαρμογής
+## Στιγμιότυπα Εφαρμογής
-Ακολουθεί η κύρια διεπαφή του module prompt engineering, όπου μπορείτε να πειραματιστείτε με όλα τα οκτώ πρότυπα δίπλα-δίπλα.
+Εδώ είναι η κύρια διεπαφή του module μηχανικής προτροπών, όπου μπορείτε να πειραματιστείτε με και τα οκτώ μοτίβα δίπλα-δίπλα.
-
+
-*Ο κεντρικός πίνακας ελέγχου που δείχνει όλα τα 8 πρότυπα prompt engineering με τα χαρακτηριστικά και τις χρήσεις τους*
+*Ο κύριος πίνακας που εμφανίζει και τα 8 μοτίβα μηχανικής προτροπής με τα χαρακτηριστικά και τις χρήσεις τους*
-## Εξερευνώντας τα Πρότυπα
+## Εξερεύνηση των Μοτίβων
-Η διαδικτυακή διεπαφή σας επιτρέπει να πειραματιστείτε με διαφορετικές στρατηγικές prompt. Κάθε πρότυπο λύνει διαφορετικά προβλήματα - δοκιμάστε τα για να δείτε πότε λάμπει η κάθε προσέγγιση.
+Η web διεπαφή σας επιτρέπει να πειραματιστείτε με διαφορετικές στρατηγικές προτροπής. Κάθε μοτίβο λύνει διαφορετικά προβλήματα - δοκιμάστε τα για να δείτε πότε λάμπει η κάθε προσέγγιση.
-> **Σημείωση: Streaming vs Μη-Streaming** — Κάθε σελίδα προτύπου προσφέρει δύο κουμπιά: **🔴 Stream Response (Live)** και μια επιλογή **Μη-Streaming**. Το streaming χρησιμοποιεί Server-Sent Events (SSE) για να εμφανίζει tokens σε πραγματικό χρόνο καθώς το μοντέλο τα παράγει, οπότε βλέπετε την πρόοδο αμέσως. Η μη-Streaming επιλογή περιμένει ολόκληρη την απάντηση πριν την εμφανίσει. Για prompts που προκαλούν βαθύ συλλογισμό (π.χ. High Eagerness, Self-Reflecting Code), η κλήση μη-Streaming μπορεί να πάρει πολύ χρόνο — μερικές φορές λεπτά — χωρίς ορατή ανατροφοδότηση. **Χρησιμοποιήστε streaming όταν πειραματίζεστε με σύνθετα prompts** ώστε να δείτε το μοντέλο να λειτουργεί και να αποφύγετε την εντύπωση ότι το αίτημα έχει λήξει.
+> **Σημείωση: Streaming vs Μη Streaming** — Κάθε σελίδα μοτίβου προσφέρει δύο κουμπιά: **🔴 Stream Response (Live)** και μία επιλογή **Μη-Streaming**. Το streaming χρησιμοποιεί Server-Sent Events (SSE) για να εμφανίζει tokens σε πραγματικό χρόνο καθώς το μοντέλο τα παράγει, ώστε να βλέπετε την πρόοδο αμέσως. Η μη-streaming επιλογή περιμένει ολόκληρη την απάντηση πριν την εμφανίσει. Για προτροπές που απαιτούν βαθύ συλλογισμό (π.χ., High Eagerness, Self-Reflecting Code), η μη-streaming κλήση μπορεί να διαρκέσει πολύ — μερικές φορές λεπτά — χωρίς ορατή ανατροφοδότηση. **Χρησιμοποιήστε streaming όταν πειραματίζεστε με σύνθετες προτροπές** ώστε να βλέπετε το μοντέλο να δουλεύει και να αποφύγετε την εντύπωση ότι η αίτηση έχει λήξει.
>
-> **Σημείωση: Απαίτηση Περιηγητή** — Η λειτουργία streaming χρησιμοποιεί το Fetch Streams API (`response.body.getReader()`) που απαιτεί πλήρη περιηγητή (Chrome, Edge, Firefox, Safari). Δεν λειτουργεί στον ενσωματωμένο Simple Browser του VS Code, επειδή το webview του δεν υποστηρίζει το API ReadableStream. Αν χρησιμοποιείτε τον Simple Browser, τα κουμπιά μη-Streaming λειτουργούν κανονικά — μόνο τα κουμπιά streaming επηρεάζονται. Ανοίξτε το `http://localhost:8083` σε εξωτερικό περιηγητή για την πλήρη εμπειρία.
+> **Σημείωση: Απαιτήσεις Περιηγητή** — Η λειτουργία streaming χρησιμοποιεί το Fetch Streams API (`response.body.getReader()`) που απαιτεί πλήρη περιηγητή (Chrome, Edge, Firefox, Safari). Δεν λειτουργεί στον ενσωματωμένο Simple Browser του VS Code, καθώς το webview του δεν υποστηρίζει το ReadableStream API. Αν χρησιμοποιείτε τον Simple Browser, τα κουμπιά μη-streaming δουλεύουν κανονικά — μόνο τα κουμπιά streaming επηρεάζονται. Ανοίξτε `http://localhost:8083` σε εξωτερικό περιηγητή για την πλήρη εμπειρία.
### Χαμηλή vs Υψηλή Προθυμία
-Κάντε μια απλή ερώτηση όπως "Τι είναι το 15% του 200;" χρησιμοποιώντας Χαμηλή Προθυμία. Θα λάβετε άμεση, απευθείας απάντηση. Τώρα ρωτήστε κάτι σύνθετο όπως "Σχεδίασε μια στρατηγική caching για ένα API υψηλής κυκλοφορίας" χρησιμοποιώντας Υψηλή Προθυμία. Πατήστε **🔴 Stream Response (Live)** και παρακολουθήστε τον λεπτομερή συλλογισμό του μοντέλου να εμφανίζεται token-προς-token. Ίδιο μοντέλο, ίδια δομή ερώτησης - αλλά το prompt του λέει πόση σκέψη να κάνει.
+Κάντε μια απλή ερώτηση όπως "Ποιο είναι το 15% του 200;" χρησιμοποιώντας Χαμηλή Προθυμία. Θα λάβετε άμεση, απευθείας απάντηση. Τώρα ρωτήστε κάτι σύνθετο όπως "Σχεδίασε μια στρατηγική caching για ένα API με υψηλή επισκεψιμότητα" χρησιμοποιώντας Υψηλή Προθυμία. Κάντε κλικ στο **🔴 Stream Response (Live)** και δείτε τη λεπτομερή συλλογιστική του μοντέλου να εμφανίζεται token-το-token. Ίδιο μοντέλο, ίδια δομή ερώτησης - αλλά η προτροπή του λέει πόσο να σκεφτεί.
-### Εκτέλεση Εργασίας (Εισαγωγές Εργαλείων)
+### Εκτέλεση Εργασιών (Εισαγωγικά Εργαλείων)
-Τα πολυβηματικά workflows ωφελούνται από τον προ-σχεδιασμό και την αφήγηση της προόδου. Το μοντέλο περιγράφει τι θα κάνει, αφηγείται κάθε βήμα και στη συνέχεια συνοψίζει τα αποτελέσματα.
+Πολυβηματικές ροές εργασίας ωφελούνται από προμελέτη και αφήγηση προόδου. Το μοντέλο περιγράφει τι θα κάνει, ανακοινώνει κάθε βήμα, έπειτα συνοψίζει τα αποτελέσματα.
-### Αυτό-Αναστοχαστικός Κώδικας
+### Αυτοαξιολογούμενος Κώδικας
-Δοκιμάστε "Δημιουργήστε μια υπηρεσία επικύρωσης email". Αντί απλά να παράγει κώδικα και να σταματά, το μοντέλο παράγει, αξιολογεί με βάση κριτήρια ποιότητας, εντοπίζει αδυναμίες και βελτιώνει. Θα δείτε να επαναλαμβάνει μέχρι ο κώδικας να πληροί τα πρότυπα παραγωγής.
+Δοκιμάστε "Δημιούργησε υπηρεσία επαλήθευσης email". Αντί απλά να παράγει κώδικα και να σταματά, το μοντέλο παράγει, αξιολογεί με κριτήρια ποιότητας, εντοπίζει αδυναμίες και βελτιώνει. Θα δείτε να επαναλαμβάνει μέχρι ο κώδικας να πληροί τα πρότυπα παραγωγής.
### Δομημένη Ανάλυση
-Οι ανασκοπήσεις κώδικα χρειάζονται σταθερά πλαίσια αξιολόγησης. Το μοντέλο αναλύει τον κώδικα χρησιμοποιώντας σταθερές κατηγορίες (ορθότητα, πρακτικές, απόδοση, ασφάλεια) με επίπεδα σοβαρότητας.
+Οι επανεξετάσεις κώδικα απαιτούν σταθερά πλαίσια αξιολόγησης. Το μοντέλο αναλύει κώδικα με προκαθορισμένες κατηγορίες (ορθότητα, πρακτικές, απόδοση, ασφάλεια) με επίπεδα σοβαρότητας.
-### Συνομιλία Πολλαπλών Γύρων
+### Πολυγλωσσική Συζήτηση
-Ρωτήστε "Τι είναι το Spring Boot;" και συνεχίστε αμέσως με "Δείξε μου ένα παράδειγμα". Το μοντέλο θυμάται την πρώτη ερώτηση και σας δίνει συγκεκριμένο παράδειγμα Spring Boot. Χωρίς μνήμη, η δεύτερη ερώτηση θα ήταν πολύ γενική.
+Ρωτήστε "Τι είναι το Spring Boot;" και αμέσως συνεχίστε με "Δείξε μου ένα παράδειγμα". Το μοντέλο θυμάται την πρώτη σας ερώτηση και δίνει συγκεκριμένο παράδειγμα Spring Boot. Χωρίς μνήμη, η δεύτερη ερώτηση θα ήταν αόριστη.
-### Βήμα-Βήμα Λογισμός
+### Συλλογιστική Βήμα-Βήμα
-Επιλέξτε ένα μαθηματικό πρόβλημα και δοκιμάστε το με Βήμα-Βήμα Λογισμό και Χαμηλή Προθυμία. Η χαμηλή προθυμία απλώς δίνει την απάντηση - γρήγορα αλλά αδιαφανώς. Το βήμα-βήμα δείχνει κάθε υπολογισμό και απόφαση.
+Επιλέξτε ένα μαθηματικό πρόβλημα και δοκιμάστε το τόσο με τη Συλλογιστική Βήμα-Βήμα όσο και με τη Χαμηλή Προθυμία. Η χαμηλή προθυμία δίνει απλώς την απάντηση — γρήγορα αλλά αδιαφανώς. Το βήμα-βήμα σας δείχνει κάθε υπολογισμό και απόφαση.
### Περιορισμένη Έξοδος
-Όταν χρειάζεστε συγκεκριμένες μορφές ή αριθμό λέξεων, αυτό το πρότυπο επιβάλλει αυστηρή συμμόρφωση. Δοκιμάστε να δημιουργήσετε μια περίληψη με ακριβώς 100 λέξεις σε μορφή κουκίδων.
+Όταν χρειάζεστε συγκεκριμένες μορφές ή αριθμό λέξεων, αυτό το μοτίβο επιβάλλει αυστηρή συμμόρφωση. Δοκιμάστε να δημιουργήσετε μια περίληψη με ακριβώς 100 λέξεις σε μορφή κουκκίδων.
-## Τι Μαθαίνετε Πραγματικά
+## Τι Μάθετε Πραγματικά
-**Η Προσπάθεια Λογισμού Αλλάζει Τα Πάντα**
+**Η Προσπάθεια Συλλογισμού Αλλάζει τα Πάντα**
-Το GPT-5.2 σας επιτρέπει να ελέγξετε την υπολογιστική προσπάθεια μέσω των prompts σας. Η χαμηλή προσπάθεια σημαίνει γρήγορες απαντήσεις με ελάχιστη εξερεύνηση. Η υψηλή προσπάθεια σημαίνει ότι το μοντέλο παίρνει χρόνο να σκεφτεί βαθιά. Μαθαίνετε να ταιριάζετε την προσπάθεια με την πολυπλοκότητα του έργου - μη σπαταλάτε χρόνο σε απλές ερωτήσεις αλλά μη βιάζεστε σε σύνθετες αποφάσεις.
+Το GPT-5.2 σας επιτρέπει να ελέγχετε τον υπολογιστικό κόπο μέσω των προτροπών σας. Η χαμηλή προσπάθεια σημαίνει γρήγορες απαντήσεις με ελάχιστη διερεύνηση. Η υψηλή προσπάθεια σημαίνει ότι το μοντέλο αφιερώνει χρόνο σε βαθύ συλλογισμό. Μαθαίνετε να ταιριάζετε την προσπάθεια με την πολυπλοκότητα της εργασίας — μην χάνετε χρόνο σε απλές ερωτήσεις, αλλά μην βιάζεστε να πάρετε αποφάσεις σε σύνθετα ζητήματα.
**Η Δομή Καθοδηγεί τη Συμπεριφορά**
-Παρατηρήστε τις ετικέτες XML στα prompts; Δεν είναι διακοσμητικές. Τα μοντέλα ακολουθούν δομημένες οδηγίες πιο αξιόπιστα από ελεύθερο κείμενο. Όταν χρειάζεστε πολυ-βηματικές διαδικασίες ή σύνθετη λογική, η δομή βοηθά το μοντέλο να καταλάβει πού βρίσκεται και τι ακολουθεί. Το παρακάτω διάγραμμα αναλύει ένα καλά δομημένο prompt, δείχνοντας πώς ετικέτες όπως ``, ``, ``, ``, και `` οργανώνουν τις οδηγίες σας σε σαφή τμήματα.
+Παρατηρήσατε τις ετικέτες XML στις προτροπές; Δεν είναι διακοσμητικές. Τα μοντέλα ακολουθούν δομημένες οδηγίες πιο αξιόπιστα απ’ ό,τι ελεύθερο κείμενο. Όταν χρειάζεστε πολύβημες διαδικασίες ή πολύπλοκη λογική, η δομή βοηθά το μοντέλο να παρακολουθεί πού βρίσκεται και τι ακολουθεί. Το παρακάτω διάγραμμα διασπά μια καλά δομημένη προτροπή, δείχνοντας πώς οι ετικέτες όπως ``, ``, ``, ``, και `` οργανώνουν τις οδηγίες σας σε σαφείς ενότητες.
-
+
-*Ανατομία ενός καλά δομημένου prompt με σαφή τμήματα και οργάνωση τύπου XML*
+*Ανατομία μιας καλά δομημένης προτροπής με σαφείς ενότητες και δομή τύπου XML*
-**Ποιότητα Μέσω Αυτο-Αξιολόγησης**
+**Ποιότητα Μέσω Αυτοαξιολόγησης**
-Τα αυτο-αναστοχαστικά πρότυπα δουλεύουν κάνοντας ρητά τα κριτήρια ποιότητας. Αντί να ελπίζετε ότι το μοντέλο "το κάνει σωστά", του λέτε ακριβώς τι σημαίνει "σωστά": ορθή λογική, χειρισμός σφαλμάτων, απόδοση, ασφάλεια. Το μοντέλο μπορεί τότε να αξιολογήσει τη δική του έξοδο και να βελτιωθεί. Αυτό μετατρέπει τη δημιουργία κώδικα από λαχείο σε διαδικασία.
+Τα μοτίβα αυτοαξιολόγησης δουλεύουν κάνοντας ρητά τα κριτήρια ποιότητας. Αντί να ελπίζετε ότι το μοντέλο "το κάνει σωστά", του λέτε ακριβώς τι σημαίνει "σωστά": σωστή λογική, διαχείριση σφαλμάτων, απόδοση, ασφάλεια. Έπειτα το μοντέλο μπορεί να αξιολογήσει τη δική του έξοδο και να βελτιωθεί. Αυτό μετατρέπει τη δημιουργία κώδικα από λαχείο σε διαδικασία.
-**Το Περιεχόμενο Είναι Πεπερασμένο**
+**Το Πλαίσιο Είναι Πεπερασμένο**
-Οι συνομιλίες πολλαπλών γύρων δουλεύουν με το να περιλαμβάνουν το ιστορικό μηνυμάτων σε κάθε αίτηση. Αλλά υπάρχει όριο - κάθε μοντέλο έχει μέγιστο αριθμό tokens. Καθώς οι συνομιλίες μεγαλώνουν, θα χρειαστείτε στρατηγικές για να κρατάτε σχετικό το περιεχόμενο χωρίς να χτυπάτε το όριο. Αυτό το module σας δείχνει πώς λειτουργεί η μνήμη· αργότερα θα μάθετε πότε να συνοψίζετε, πότε να ξεχνάτε και πότε να ανακτάτε.
+Οι πολυγλωσσικές συνομιλίες λειτουργούν συμπεριλαμβάνοντας το ιστορικό μηνυμάτων με κάθε αίτηση. Αλλά υπάρχει όριο - κάθε μοντέλο έχει μέγιστο αριθμό tokens. Καθώς οι συνομιλίες μεγαλώνουν, θα χρειαστείτε στρατηγικές για να διατηρείτε σχετικό πλαίσιο χωρίς να υπερβαίνετε το όριο. Αυτό το module σας δείχνει πώς λειτουργεί η μνήμη· αργότερα θα μάθετε πότε να συνοψίζετε, πότε να ξεχνάτε και πότε να ανακτάτε.
## Επόμενα Βήματα
-**Επόμενο Module:** [03-rag - RAG (Ανάκτηση-Ενισχυμένη Γενιά)](../03-rag/README.md)
+**Επόμενο Module:** [03-rag - RAG (Αναζήτηση Αυξημένη Γεννήτρια)](../03-rag/README.md)
---
-**Πλοήγηση:** [← Προηγούμενο: Module 01 - Εισαγωγή](../01-introduction/README.md) | [Πίσω στην Αρχική](../README.md) | [Επόμενο: Module 03 - RAG →](../03-rag/README.md)
+**Πλοήγηση:** [← Προηγούμενο: Module 01 - Εισαγωγή](../01-introduction/README.md) | [Επιστροφή στην Αρχική](../README.md) | [Επόμενο: Module 03 - RAG →](../03-rag/README.md)
---
-**Αποποίηση ευθυνών**:
-Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που επιδιώκουμε ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις μπορεί να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα του θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική μετάφραση από ανθρώπινο μεταφραστή. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
+**Αποποίηση ευθυνών**:
+Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
\ No newline at end of file
diff --git a/translations/el/03-rag/README.md b/translations/el/03-rag/README.md
index 9d816c587..56d724a12 100644
--- a/translations/el/03-rag/README.md
+++ b/translations/el/03-rag/README.md
@@ -1,144 +1,143 @@
-# Module 03: RAG (Ανάκτηση-Ενισχυμένη Γεννήτρια)
+# Module 03: RAG (Γενετική με Ενισχυμένη Ανάκτηση)
-## Περιεχόμενα
+## Table of Contents
-- [Βίντεο Παρουσίασης](../../../03-rag)
-- [Τι Θα Μάθετε](../../../03-rag)
-- [Προαπαιτούμενα](../../../03-rag)
-- [Κατανόηση του RAG](../../../03-rag)
- - [Ποια Προσέγγιση RAG Χρησιμοποιεί Αυτό το Σεμινάριο;](../../../03-rag)
-- [Πώς Λειτουργεί](../../../03-rag)
- - [Επεξεργασία Εγγράφων](../../../03-rag)
- - [Δημιουργία Ενσωματώσεων](../../../03-rag)
- - [Σημασιολογική Αναζήτηση](../../../03-rag)
- - [Δημιουργία Απαντήσεων](../../../03-rag)
-- [Εκτέλεση της Εφαρμογής](../../../03-rag)
-- [Χρήση της Εφαρμογής](../../../03-rag)
- - [Ανέβασμα Εγγράφου](../../../03-rag)
- - [Κάντε Ερωτήσεις](../../../03-rag)
- - [Έλεγχος Πηγών Αναφορών](../../../03-rag)
- - [Πειραματισμός με Ερωτήσεις](../../../03-rag)
-- [Βασικές Έννοιες](../../../03-rag)
- - [Στρατηγική Τμηματοποίησης](../../../03-rag)
- - [Βαθμολογίες Ομοιότητας](../../../03-rag)
- - [Αποθήκευση Μνήμης](../../../03-rag)
- - [Διαχείριση Παραθύρου Πλαισίου](../../../03-rag)
-- [Πότε το RAG Είναι Σημαντικό](../../../03-rag)
-- [Επόμενα Βήματα](../../../03-rag)
+- [Video Walkthrough](#video-walkthrough)
+- [What You'll Learn](#what-youll-learn)
+- [Prerequisites](#prerequisites)
+- [Understanding RAG](#understanding-rag)
+ - [Which RAG Approach Does This Tutorial Use?](#which-rag-approach-does-this-tutorial-use)
+- [How It Works](#how-it-works)
+ - [Document Processing](#document-processing)
+ - [Creating Embeddings](#creating-embeddings)
+ - [Semantic Search](#semantic-search)
+ - [Answer Generation](#δημιουργία-απάντησης)
+- [Run the Application](#εκτέλεση-της-εφαρμογής)
+- [Using the Application](#χρήση-της-εφαρμογής)
+ - [Upload a Document](#ανέβασμα-εγγράφου)
+ - [Ask Questions](#κάντε-ερωτήσεις)
+ - [Check Source References](#ελέγξτε-τις-πηγές-αναφορών)
+ - [Experiment with Questions](#πειραματιστείτε-με-ερωτήσεις)
+- [Key Concepts](#κύριες-έννοιες)
+ - [Chunking Strategy](#στρατηγική-τμηματοποίησης)
+ - [Similarity Scores](#βαθμολογίες-ομοιότητας)
+ - [In-Memory Storage](#αποθήκευση-στο-μνήμης)
+ - [Context Window Management](#διαχείριση-παραθύρου-πλαισίου)
+- [When RAG Matters](#πότε-έχει-σημασία-η-rag)
+- [Next Steps](#επόμενα-βήματα)
-## Βίντεο Παρουσίασης
+## Video Walkthrough
-Παρακολουθήστε αυτήν τη ζωντανή συνεδρίαση που εξηγεί πώς να ξεκινήσετε με αυτό το module:
+Παρακολουθήστε αυτήν τη ζωντανή παρουσίαση που εξηγεί πώς να ξεκινήσετε με αυτό το module:
-
+
-## Τι Θα Μάθετε
+## What You'll Learn
-Στα προηγούμενα modules, μάθατε πώς να κάνετε συνομιλίες με το AI και να δομείτε αποτελεσματικά τις εντολές σας. Αλλά υπάρχει ένας θεμελιώδης περιορισμός: τα μοντέλα γλώσσας γνωρίζουν μόνο όσα έμαθαν κατά τη διάρκεια της εκπαίδευσής τους. Δεν μπορούν να απαντήσουν σε ερωτήσεις σχετικά με τις πολιτικές της εταιρείας σας, την τεκμηρίωση του έργου σας ή οποιεσδήποτε πληροφορίες δεν εκπαιδεύτηκαν.
+Στα προηγούμενα modules, μάθατε πώς να έχετε συνομιλίες με ΤΝ και να δομείτε αποτελεσματικά τις ερωτήσεις σας. Αλλά υπάρχει ένας θεμελιώδης περιορισμός: τα γλωσσικά μοντέλα γνωρίζουν μόνο ό,τι έχουν μάθει κατά την εκπαίδευση. Δεν μπορούν να απαντήσουν σε ερωτήσεις σχετικά με τις πολιτικές της εταιρείας σας, την τεκμηρίωση του έργου σας ή οποιαδήποτε πληροφορία δεν έχουν εκπαιδευτεί.
-Το RAG (Ανάκτηση-Ενισχυμένη Γεννήτρια) λύνει αυτό το πρόβλημα. Αντί να προσπαθείτε να διδάξετε στο μοντέλο τις πληροφορίες σας (το οποίο είναι ακριβό και μη πρακτικό), του δίνετε τη δυνατότητα να αναζητά μέσα στα έγγραφά σας. Όταν κάποιος θέτει μια ερώτηση, το σύστημα βρίσκει σχετικές πληροφορίες και τις συμπεριλαμβάνει στην εντολή. Το μοντέλο απαντάει βάσει αυτού του ανακτημένου πλαισίου.
+Το RAG (Γενετική με Ενισχυμένη Ανάκτηση) λύνει αυτό το πρόβλημα. Αντί να προσπαθείτε να διδάξετε στο μοντέλο τις πληροφορίες σας (που είναι ακριβό και ανέφικτο), του δίνετε τη δυνατότητα να αναζητήσει τα έγγραφά σας. Όταν κάποιος κάνει μια ερώτηση, το σύστημα βρίσκει σχετικές πληροφορίες και τις ενσωματώνει στο prompt. Το μοντέλο απαντά βάσει αυτού του ανακτημένου πλαισίου.
-Σκεφτείτε το RAG σαν να δίνετε στο μοντέλο μια βιβλιοθήκη αναφορών. Όταν κάνετε μια ερώτηση, το σύστημα:
+Σκεφτείτε το RAG σαν να δίνετε στο μοντέλο μια βιβλιοθήκη αναφοράς. Όταν κάνετε μια ερώτηση, το σύστημα:
-1. **Ερώτηση Χρήστη** - Κάνετε μια ερώτηση
-2. **Ενσωμάτωση** - Μετατρέπει την ερώτησή σας σε διάνυσμα
-3. **Αναζήτηση Διανύσματος** - Βρίσκει παρόμοια τμήματα εγγράφων
-4. **Συναρμολόγηση Πλαισίου** - Προσθέτει σχετικά τμήματα στην εντολή
-5. **Απάντηση** - Το LLM παράγει απάντηση βάσει του πλαισίου
+1. **Ερώτηση Χρήστη** - Κάνετε μια ερώτηση
+2. **Ενσωμάτωση** - Μετατρέπει την ερώτησή σας σε διάνυσμα
+3. **Αναζήτηση Διανυσμάτων** - Βρίσκει παρόμοια τμήματα εγγράφων
+4. **Σύνθεση Πλαισίου** - Προσθέτει σχετικά τμήματα στο prompt
+5. **Απάντηση** - Το LLM παράγει απάντηση βάσει του πλαισίου
-Αυτό στηρίζει τις απαντήσεις του μοντέλου στα πραγματικά σας δεδομένα αντί να βασίζεται μόνο στη γνώση της εκπαίδευσης ή να επινοεί απαντήσεις.
+Αυτό στηρίζει τις απαντήσεις του μοντέλου στα πραγματικά σας δεδομένα αντί να βασίζεται μόνο στη γνώση εκπαίδευσής του ή να εφεύρει απαντήσεις.
-## Προαπαιτούμενα
+## Prerequisites
-- Ολοκληρωμένο [Module 00 - Γρήγορη Εκκίνηση](../00-quick-start/README.md) (για το παράδειγμα Easy RAG που αναφέρεται αργότερα σε αυτό το module)
-- Ολοκληρωμένο [Module 01 - Εισαγωγή](../01-introduction/README.md) (πόροι Azure OpenAI αναπτυγμένοι, συμπεριλαμβανομένου του μοντέλου ενσωμάτωσης `text-embedding-3-small`)
-- Αρχείο `.env` στον ριζικό φάκελο με διαπιστευτήρια Azure (δημιουργημένο από την εντολή `azd up` στο Module 01)
+- Ολοκληρωμένο [Module 01 - Εισαγωγή](../01-introduction/README.md) (αναπτύχθηκαν πόροι Azure OpenAI, συμπεριλαμβανομένου του μοντέλου ενσωμάτωσης `text-embedding-3-small`)
+- Αρχείο `.env` στον ριζικό φάκελο με στοιχεία Azure (δημιουργημένο από `azd up` στο Module 01)
-> **Σημείωση:** Αν δεν έχετε ολοκληρώσει το Module 01, ακολουθήστε πρώτα τις οδηγίες ανάπτυξης εκεί. Η εντολή `azd up` αναπτύσσει τόσο το μοντέλο συνομιλίας GPT όσο και το μοντέλο ενσωμάτωσης που χρησιμοποιεί αυτό το module.
+> **Σημείωση:** Εάν δεν έχετε ολοκληρώσει το Module 01, ακολουθήστε πρώτα τις οδηγίες ανάπτυξης εκεί. Η εντολή `azd up` αναπτύσσει τόσο το μοντέλο chat GPT όσο και το μοντέλο ενσωμάτωσης που χρησιμοποιείται σε αυτό το module.
-## Κατανόηση του RAG
+## Understanding RAG
-Το παρακάτω διάγραμμα απεικονίζει την βασική ιδέα: αντί να βασίζεται μόνο στα δεδομένα εκπαίδευσης του μοντέλου, το RAG του παρέχει μια βιβλιοθήκη αναφοράς από τα έγγραφά σας για συμβουλευτικό έλεγχο πριν από την παραγωγή κάθε απάντησης.
+Το παρακάτω διάγραμμα δείχνει τον βασικό πυρήνα: αντί να βασίζεται μόνο στα δεδομένα εκπαίδευσης του μοντέλου, το RAG του παρέχει μια βιβλιοθήκη αναφοράς των εγγράφων σας για να συμβουλευτεί πριν δημιουργήσει κάθε απάντηση.
-*Αυτό το διάγραμμα δείχνει τη διαφορά μεταξύ ενός τυπικού LLM (που μαντεύει από τα δεδομένα εκπαίδευσης) και ενός LLM ενισχυμένου με RAG (που συμβουλεύεται πρώτα τα έγγραφά σας).*
+*Αυτό το διάγραμμα δείχνει τη διαφορά μεταξύ ενός τυπικού LLM (που μαντεύει από τα δεδομένα εκπαίδευσης) και ενός LLM με ενίσχυση RAG (που συμβουλεύεται πρώτα τα έγγραφά σας).*
-Δείτε πώς συνδέονται τα μέρη από άκρη σε άκρη. Η ερώτηση ενός χρήστη περνά μέσα από τέσσερα στάδια — ενσωμάτωση, αναζήτηση διανύσματος, συναρμολόγηση πλαισίου, και δημιουργία απάντησης — καθένα χτίζοντας πάνω στο προηγούμενο:
+Ορίστε πώς συνδέονται όλα τα κομμάτια από άκρη σε άκρη. Η ερώτηση ενός χρήστη περνά μέσα από τέσσερα στάδια — ενσωμάτωση, αναζήτηση διανυσμάτων, σύνθεση πλαισίου και παραγωγή απάντησης — το καθένα βασισμένο στο προηγούμενο:
-*Αυτό το διάγραμμα δείχνει την ολοκληρωμένη ροή RAG — μια ερώτηση χρήστη περνά μέσα από ενσωμάτωση, αναζήτηση διανύσματος, συναρμολόγηση πλαισίου, και παραγωγή απάντησης.*
+*Αυτό το διάγραμμα δείχνει τη ροή RAG από άκρη σε άκρη — μια ερώτηση χρήστη περνά μέσα από ενσωμάτωση, αναζήτηση διανυσμάτων, σύνθεση πλαισίου και παραγωγή απάντησης.*
-Το υπόλοιπο αυτού του module εξηγεί κάθε στάδιο λεπτομερώς, με κώδικα τον οποίο μπορείτε να εκτελέσετε και να τροποποιήσετε.
+Το υπόλοιπο του module περνά αναλυτικά από κάθε στάδιο, με κώδικα που μπορείτε να τρέξετε και να τροποποιήσετε.
-### Ποια Προσέγγιση RAG Χρησιμοποιεί Αυτό το Σεμινάριο;
+### Which RAG Approach Does This Tutorial Use?
-Το LangChain4j προσφέρει τρεις τρόπους για να υλοποιήσετε το RAG, κάθε ένας με διαφορετικό επίπεδο αφαίρεσης. Το παρακάτω διάγραμμα τα συγκρίνει πλάι-πλάι:
+Το LangChain4j προσφέρει τρεις τρόπους υλοποίησης του RAG, ο καθένας με διαφορετικό επίπεδο αφαίρεσης. Το παρακάτω διάγραμμα τους συγκρίνει δίπλα-δίπλα:
-*Αυτό το διάγραμμα συγκρίνει τις τρεις προσεγγίσεις RAG του LangChain4j — Easy, Native, και Advanced — δείχνοντας τα βασικά τους συστατικά και πότε να χρησιμοποιήσετε κάθε μία.*
+*Αυτό το διάγραμμα συγκρίνει τις τρεις προσεγγίσεις RAG του LangChain4j — Easy, Native, και Advanced — δείχνοντας τα βασικά τους στοιχεία και πότε να χρησιμοποιεί κανείς καθεμία.*
-| Προσέγγιση | Τι Κάνει | Αντισταθμιστικό Όφελος |
+| Προσέγγιση | Τι Κάνει | Ανταλλαγή |
|---|---|---|
-| **Easy RAG** | Συνδέει τα πάντα αυτόματα μέσω `AiServices` και `ContentRetriever`. Αντιστοιχίζετε ένα interface, προσθέτετε έναν retriever, και το LangChain4j αναλαμβάνει την ενσωμάτωση, αναζήτηση και σύνθεση εντολών κρυφά. | Ελάχιστος κώδικας, αλλά δεν βλέπετε τι συμβαίνει σε κάθε βήμα. |
-| **Native RAG** | Καλείτε εσείς το μοντέλο ενσωμάτωσης, αναζητάτε στην αποθήκη, φτιάχνετε την εντολή και παράγετε την απάντηση — βήμα-βήμα και ρητά. | Περισσότερος κώδικας, αλλά κάθε στάδιο είναι ορατό και τροποποιήσιμο. |
-| **Advanced RAG** | Χρησιμοποιεί το πλαίσιο `RetrievalAugmentor` με pluggable μετασχηματιστές ερωτήσεων, δρομολογητές, επαναταξινομητές και ενισχυτές περιεχομένου για παραγωγικές ροές εργασίας. | Μέγιστη ευελιξία, αλλά σημαντικά περισσότερη πολυπλοκότητα. |
+| **Easy RAG** | Συνδέει τα πάντα αυτόματα μέσω `AiServices` και `ContentRetriever`. Σημειώνετε ένα interface, συνδέετε έναν retriever, και το LangChain4j διαχειρίζεται την ενσωμάτωση, αναζήτηση και σύνθεση prompt πίσω από τις σκηνές. | Ελάχιστος κώδικας, αλλά δεν βλέπετε τι συμβαίνει σε κάθε βήμα. |
+| **Native RAG** | Καλείτε το μοντέλο ενσωμάτωσης, ψάχνετε στην αποθήκη, φτιάχνετε το prompt και παράγετε την απάντηση μόνοι σας — ένα ρητό βήμα τη φορά. | Περισσότερος κώδικας, αλλά κάθε στάδιο είναι ορατό και τροποποιήσιμο. |
+| **Advanced RAG** | Χρησιμοποιεί το πλαίσιο `RetrievalAugmentor` με ρυθμιζόμενους μετατροπείς ερωτήσεων, διανομείς, επαναταξινομητές και ενσωματωτές περιεχομένου για παραγωγικές ροές. | Μέγιστη ευελιξία, αλλά σημαντικά μεγαλύτερη πολυπλοκότητα. |
-**Αυτό το σεμινάριο χρησιμοποιεί την Native προσέγγιση.** Κάθε βήμα της ροής RAG — ενσωμάτωση της ερώτησης, αναζήτηση στην αποθήκη διανυσμάτων, συναρμολόγηση πλαισίου και παραγωγή απάντησης — είναι γραμμένο ρητά στο [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Αυτό είναι εκ προθέσεως: ως εκπαιδευτικό υλικό, είναι πιο σημαντικό να βλέπετε και να κατανοείτε κάθε στάδιο παρά να ελαχιστοποιείται ο κώδικας. Μόλις νιώσετε άνετα με το πώς τα μέρη συνδέονται, μπορείτε να προχωρήσετε στο Easy RAG για γρήγορα πρωτότυπα ή στο Advanced RAG για παραγωγικά συστήματα.
+**Αυτό το tutorial χρησιμοποιεί την προσέγγιση Native.** Κάθε βήμα της ροής RAG — ενσωμάτωση της ερώτησης, αναζήτηση στη βάση διανυσμάτων, σύνθεση του πλαισίου και παραγωγή απάντησης — γράφεται ρητά στο [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Αυτό είναι σκόπιμο: ως εκπαιδευτικό υλικό, είναι πιο σημαντικό να βλέπετε και να κατανοείτε κάθε στάδιο παρά να ελαχιστοποιείται ο κώδικας. Μόλις νιώσετε άνετα με τη λειτουργία των κομματιών, μπορείτε να περάσετε σε Easy RAG για γρήγορα πρωτότυπα ή Advanced RAG για συστήματα παραγωγής.
-> **💡 Έχετε ήδη δει το Easy RAG σε δράση;** Το [Quick Start module](../00-quick-start/README.md) περιλαμβάνει ένα παράδειγμα ερωταπαντήσεων εγγράφων ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)) που χρησιμοποιεί το Easy RAG — το LangChain4j αναλαμβάνει ενσωμάτωση, αναζήτηση και σύνθεση εντολών αυτόματα. Αυτό το module προχωρά ένα βήμα παραπέρα, ανοίγοντας αυτή τη ροή ώστε να βλέπετε και να ελέγχετε κάθε στάδιο εσείς οι ίδιοι.
+> **💡 Σας ενδιαφέρει το Easy RAG;** Το LangChain4j προσφέρει επίσης μια *Easy RAG* προσέγγιση όπου τα `AiServices` και ένας `ContentRetriever` διαχειρίζονται αυτόματα την ενσωμάτωση, την αναζήτηση και τη σύνθεση του prompt. Αυτό το module ακολουθεί μια πιο ρητή διαδρομή — σπάνε το σωλήνωση ώστε να βλέπετε και να ελέγχετε κάθε στάδιο μόνοι σας.
-Το παρακάτω διάγραμμα δείχνει τη ροή Easy RAG από το παράδειγμα Quick Start. Παρατηρήστε πώς τα `AiServices` και `EmbeddingStoreContentRetriever` κρύβουν όλη την πολυπλοκότητα — φορτώνετε ένα έγγραφο, προσθέτετε έναν retriever, και παίρνετε απαντήσεις. Η Native προσέγγιση σε αυτό το module ανοίγει όλα εκείνα τα κρυφά βήματα:
+Το παρακάτω διάγραμμα δείχνει τη ροή Easy RAG. Παρατηρήστε πώς τα `AiServices` και `EmbeddingStoreContentRetriever` κρύβουν όλη την πολυπλοκότητα — φορτώνετε ένα έγγραφο, προσθέτετε έναν retriever και παίρνετε απαντήσεις. Η Native προσέγγιση σε αυτό το module ανοίγει κάθε κρυμμένο βήμα:
-*Αυτό το διάγραμμα δείχνει τη ροή Easy RAG από το `SimpleReaderDemo.java`. Συγκρίνετέ το με την Native προσέγγιση που χρησιμοποιείται σε αυτό το module: το Easy RAG κρύβει την ενσωμάτωση, την ανάκτηση και τη σύνθεση εντολών πίσω από τα `AiServices` και `ContentRetriever` — φορτώνετε ένα έγγραφο, προσθέτετε retriever, και λαμβάνετε απαντήσεις. Η Native προσέγγιση εδώ ανοίγει αυτή τη ροή ώστε να καλείτε κάθε στάδιο (ενσωμάτωση, αναζήτηση, συναρμολόγηση πλαισίου, παραγωγή) μόνοι σας, δίνοντάς σας πλήρη ορατότητα και έλεγχο.*
+*Αυτό το διάγραμμα δείχνει τη ροή Easy RAG. Συγκρίνετε το με την Native προσέγγιση που χρησιμοποιείται σε αυτό το module: το Easy RAG κρύβει την ενσωμάτωση, την ανάκτηση και τη σύνθεση του prompt πίσω από τα `AiServices` και `ContentRetriever` — φόρτωνετε έγγραφο, προσθέτετε retriever και λαμβάνετε απαντήσεις. Η Native προσέγγιση σε αυτό το module ανοίγει τη ροή ώστε να καλείτε εσείς κάθε στάδιο (ενσωμάτωση, αναζήτηση, σύνθεση πλαισίου, παραγωγή) μόνοι σας, δίνοντάς σας πλήρη ορατότητα και έλεγχο.*
-## Πώς Λειτουργεί
+## How It Works
-Η ροή RAG σε αυτό το module χωρίζεται σε τέσσερα στάδια που εκτελούνται διαδοχικά κάθε φορά που ένας χρήστης θέτει μια ερώτηση. Πρώτα, ένα ανεβασμένο έγγραφο **αναλύεται και διαχωρίζεται σε τμήματα** εύχρηστου μεγέθους. Αυτά τα τμήματα στη συνέχεια μετατρέπονται σε **ενσωματώσεις διανυσμάτων** και αποθηκεύονται ώστε να μπορούν να συσχετιστούν μαθηματικά. Όταν έρχεται μια ερώτηση, το σύστημα πραγματοποιεί μια **σημασιολογική αναζήτηση** για να βρει τα πιο σχετικά τμήματα και τελικά τα περνά ως πλαίσιο στο LLM για **παραγωγή απάντησης**. Οι παρακάτω ενότητες εξετάζουν κάθε στάδιο με τον πραγματικό κώδικα και διαγράμματα. Ας δούμε το πρώτο βήμα.
+Η ροή RAG σε αυτό το module διασπάται σε τέσσερα στάδια που εκτελούνται διαδοχικά κάθε φορά που ένας χρήστης κάνει ερώτηση. Πρώτα, το ανέβασμα ενός εγγράφου **αναλύεται και χωρίζεται σε τμήματα** που είναι εύκολα στη διαχείριση. Αυτά τα τμήματα μετατρέπονται σε **ενσωματώσεις διανυσμάτων** και αποθηκεύονται ώστε να μπορούν να συγκριθούν μαθηματικά. Όταν φτάνει μια ερώτηση, το σύστημα εκτελεί μια **σημασιολογική αναζήτηση** για να βρει τα πιο σχετικά τμήματα και τελικά τα περνά ως πλαίσιο στο LLM για **παραγωγή απάντησης**. Οι ακόλουθες ενότητες αναλύουν κάθε στάδιο με πραγματικό κώδικα και διαγράμματα. Ας δούμε το πρώτο βήμα.
-### Επεξεργασία Εγγράφων
+### Document Processing
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-Όταν ανεβάζετε ένα έγγραφο, το σύστημα το αναλύει (PDF ή απλό κείμενο), προσθέτει μεταδεδομένα όπως το όνομα αρχείου, και στη συνέχεια το χωρίζει σε τμήματα — μικρότερα κομμάτια που χωρούν άνετα στο πλαίσιο του μοντέλου. Αυτά τα τμήματα επικαλύπτονται ελαφρώς ώστε να μην χάνεται το πλαίσιο στα όρια.
+Όταν ανεβάζετε ένα έγγραφο, το σύστημα το αναλύει (PDF ή απλό κείμενο), συνδέει μεταδεδομένα όπως το όνομα αρχείου και στη συνέχεια το χωρίζει σε τμήματα — μικρότερα κομμάτια που χωράνε άνετα στο παράθυρο πλαισίου του μοντέλου. Αυτά τα τμήματα επικαλύπτονται ελαφρώς ώστε να μην χάνεται πλαίσιο στα όρια.
```java
-// Αναλύστε το ανεβασμένο αρχείο και τυλίξτε το σε ένα Έγγραφο LangChain4j
+// Αναλύστε το ανεβασμένο αρχείο και τυλίξτε το σε ένα έγγραφο LangChain4j
Document document = Document.from(content, metadata);
-// Χωρίστε σε κομμάτια των 300 τοκεν με επικάλυψη 30 τοκεν
+// Διαχωρίστε σε κομμάτια των 300 συμβόλων με επικάλυψη 30 συμβόλων
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
+
+Το παρακάτω διάγραμμα δείχνει πώς λειτουργεί αυτό οπτικά. Παρατηρήστε πώς κάθε τμήμα μοιράζεται κάποιους tokens με τους γείτονές του — η επικάλυψη 30 tokens διασφαλίζει ότι κανένα σημαντικό πλαίσιο δεν χάνεται ανάμεσα:
-Το παρακάτω διάγραμμα δείχνει πώς δουλεύει αυτό οπτικά. Παρατηρήστε πώς κάθε τμήμα μοιράζεται μερικά tokens με τα γειτονικά του — η επικάλυψη 30 token διασφαλίζει ότι δεν χάνεται σημαντικό πλαίσιο ανάμεσα στα κομμάτια:
+
-
+*Αυτό το διάγραμμα δείχνει ένα έγγραφο να χωρίζεται σε τμήματα των 300 tokens με επικάλυψη 30 tokens, διατηρώντας το πλαίσιο στα όρια των τμημάτων.*
-*Αυτό το διάγραμμα δείχνει ένα έγγραφο που χωρίζεται σε τμήματα των 300 token με επικάλυψη 30 token, διατηρώντας το πλαίσιο στα όρια των τμημάτων.*
+> **🤖 Δοκιμάστε με το [GitHub Copilot](https://github.com/features/copilot) Chat:** Ανοίξτε το [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) και ρωτήστε:
+> - "Πώς χωρίζει το LangChain4j τα έγγραφα σε τμήματα και γιατί είναι σημαντική η επικάλυψη;"
+> - "Ποιο είναι το βέλτιστο μέγεθος τμήματος για διαφορετικούς τύπους εγγράφων και γιατί;"
+> - "Πώς διαχειρίζομαι έγγραφα σε πολλές γλώσσες ή με ειδική μορφοποίηση;"
-> **🤖 Δοκιμάστε με το [GitHub Copilot](https://github.com/features/copilot) Chat:** Ανοίξτε το [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) και ρωτήστε:
-> - "Πώς χωρίζει το LangChain4j τα έγγραφα σε τμήματα και γιατί η επικάλυψη είναι σημαντική;"
-> - "Ποιο είναι το βέλτιστο μέγεθος τμήματος για διαφορετικούς τύπους εγγράφων και γιατί;"
-> - "Πώς χειρίζομαι έγγραφα σε πολλές γλώσσες ή με ειδική μορφοποίηση;"
-
-### Δημιουργία Ενσωματώσεων
+### Creating Embeddings
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-Κάθε τμήμα μετατρέπεται σε έναν αριθμητικό αναπαριστώντας, που ονομάζεται ενσωμάτωση — ουσιαστικά ένας μετατροπέας από νόημα σε αριθμούς. Το μοντέλο ενσωμάτωσης δεν είναι "έξυπνο" όπως ένα μοντέλο συνομιλίας· δεν μπορεί να ακολουθεί εντολές, να συλλογίζεται ή να απαντά σε ερωτήσεις. Αυτό που κάνει είναι να χαρτογραφεί το κείμενο σε έναν μαθηματικό χώρο όπου παρόμοια νοήματα βρίσκονται κοντά το ένα στο άλλο — "αυτοκίνητο" κοντά σε "όχημα", "πολιτική επιστροφής" κοντά σε "επιστροφή χρημάτων". Σκεφτείτε το μοντέλο συνομιλίας ως ένα άτομο με το οποίο μπορείτε να μιλήσετε· το μοντέλο ενσωμάτωσης είναι ένα εξαιρετικό σύστημα αρχειοθέτησης.
+Κάθε τμήμα μετατρέπεται σε μια αριθμητική αναπαράσταση που ονομάζεται ενσωμάτωση — ουσιαστικά ένας μετατροπέας νοήματος σε αριθμούς. Το μοντέλο ενσωμάτωσης δεν είναι "έξυπνο" όπως ένα μοντέλο chat· δεν μπορεί να ακολουθεί οδηγίες, να λογικοποιεί ή να απαντά σε ερωτήσεις. Αυτό που κάνει είναι να χαρτογραφεί το κείμενο σε έναν μαθηματικό χώρο όπου παρόμοια νοήματα βρίσκονται κοντά — "αυτοκίνητο" κοντά σε "όχημα," "πολιτική επιστροφών" κοντά σε "επιστροφή χρημάτων." Σκεφτείτε ένα μοντέλο chat ως άτομο με το οποίο μπορείτε να μιλήσετε· ένα μοντέλο ενσωμάτωσης είναι ένα εξαιρετικό σύστημα αρχειοθέτησης.
-Το παρακάτω διάγραμμα οπτικοποιεί αυτή την ιδέα — το κείμενο μπαίνει, βγαίνουν αριθμητικά διανύσματα, και παρόμοια νοήματα τοποθετούνται κοντά:
+Το παρακάτω διάγραμμα απεικονίζει αυτήν την έννοια — το κείμενο μπαίνει, βγαίνουν αριθμητικά διανύσματα, και παρόμοια νοήματα παράγουν κοντινά διανύσματα:
-*Αυτό το διάγραμμα δείχνει πώς ένα μοντέλο ενσωμάτωσης μετατρέπει το κείμενο σε αριθμητικά διανύσματα, τοποθετώντας παρόμοια νοήματα — όπως "αυτοκίνητο" και "όχημα" — κοντά το ένα στο άλλο στο διανυσματικό χώρο.*
+*Αυτό το διάγραμμα δείχνει πώς ένα μοντέλο ενσωμάτωσης μετατρέπει κείμενο σε αριθμητικά διανύσματα, τοποθετώντας παρόμοια νοήματα — όπως "αυτοκίνητο" και "όχημα" — κοντά το ένα στο άλλο στον χώρο των διανυσμάτων.*
```java
@Bean
@@ -153,30 +152,30 @@ public EmbeddingModel embeddingModel() {
EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
+
+Το παρακάτω διάγραμμα κλάσεων δείχνει τις δύο ξεχωριστές ροές σε μια ροή RAG και τις κλάσεις LangChain4j που τις υλοποιούν. Η **ροή εισαγωγής** (τρέχει μία φορά κατά το ανέβασμα) χωρίζει το έγγραφο, ενσωματώνει τα τμήματα και τα αποθηκεύει μέσω `.addAll()`. Η **ροή ερώτησης** (τρέχει κάθε φορά που ο χρήστης ρωτά) ενσωματώνει την ερώτηση, ψάχνει στην αποθήκη μέσω `.search()` και περνά το σχετικό πλαίσιο στο μοντέλο chat. Και οι δύο ροές συναντώνται στο κοινό interface `EmbeddingStore`:
-Το παρακάτω διάγραμμα κλάσεων δείχνει τις δύο ξεχωριστές ροές σε μια ροή εργασίας RAG και τις κλάσεις LangChain4j που τις υλοποιούν. Η **ροή απορρόφησης** (τρέχει μία φορά κατά το ανέβασμα) χωρίζει το έγγραφο, ενσωματώνει τα τμήματα και τα αποθηκεύει μέσω της `.addAll()`. Η **ροή ερωτήσεων** (τρέχει κάθε φορά που ένας χρήστης ρωτά) ενσωματώνει την ερώτηση, αναζητά στην αποθήκη μέσω της `.search()`, και περνά το ταιριαστό πλαίσιο στο μοντέλο συνομιλίας. Και οι δύο ροές συναντώνται στη κοινή διεπαφή `EmbeddingStore`:
-
-
+
-*Αυτό το διάγραμμα δείχνει τις δύο ροές σε μια ροή RAG — απορρόφηση και ερώτηση — και πώς συνδέονται μέσω της κοινής EmbeddingStore.*
+*Αυτό το διάγραμμα δείχνει τις δύο ροές σε μια ροή RAG — εισαγωγής και ερώτησης — και πώς συνδέονται μέσω ενός κοινόχρηστου EmbeddingStore.*
-Μόλις αποθηκευτούν οι ενσωματώσεις, το παρόμοιο περιεχόμενο φυσικά ομαδοποιείται στον διανυσματικό χώρο. Η οπτικοποίηση παρακάτω δείχνει πώς έγγραφα σχετικά με συναφή θέματα καταλήγουν σε γειτονικά σημεία, καθιστώντας δυνατή τη σημασιολογική αναζήτηση:
+Μόλις αποθηκευτούν οι ενσωματώσεις, το παρόμοιο περιεχόμενο συγκεντρώνεται φυσικά στον χώρο των διανυσμάτων. Η παρακάτω οπτικοποίηση δείχνει πώς έγγραφα για σχετικά θέματα καταλήγουν κοντά το ένα στο άλλο, πράγμα που κάνει δυνατή τη σημασιολογική αναζήτηση:
-
+
-*Αυτή η οπτικοποίηση δείχνει πώς σχετικά έγγραφα ομαδοποιούνται στον 3D διανυσματικό χώρο, με θέματα όπως Τεχνικά Έγγραφα, Εμπορικοί Κανόνες, και Συχνές Ερωτήσεις να σχηματίζουν διακεκριμένες ομάδες.*
+*Αυτή η οπτικοποίηση δείχνει πώς σχετικά έγγραφα συσσωρεύονται μαζί σε τρισδιάστατο χώρο διανυσμάτων, με θέματα όπως Τεχνικά Έγγραφα, Επιχειρηματικοί Κανόνες και FAQ να σχηματίζουν διακριτές ομάδες.*
-Όταν ένας χρήστης αναζητά, το σύστημα ακολουθεί τέσσερα βήματα: ενσωματώνει τα έγγραφα μία φορά, ενσωματώνει την ερώτηση σε κάθε αναζήτηση, συγκρίνει το διάνυσμα της ερώτησης με όλα τα αποθηκευμένα διανύσματα χρησιμοποιώντας την ομοιότητα του συνημιτόνου, και επιστρέφει τα κορυφαία-K τμήματα με τις υψηλότερες βαθμολογίες. Το διάγραμμα παρακάτω περιγράφει κάθε βήμα και τις σχετικές κλάσεις LangChain4j:
+Όταν ένας χρήστης ψάχνει, το σύστημα ακολουθεί τέσσερα βήματα: ενσωματώνει τα έγγραφα μία φορά, ενσωματώνει την ερώτηση σε κάθε αναζήτηση, συγκρίνει το διάνυσμα της ερώτησης με όλα τα αποθηκευμένα διανύσματα με χρήση της ομοιότητας συνημίτονου, και επιστρέφει τα τμήματα με την υψηλότερη βαθμολογία Top-K. Το παρακάτω διάγραμμα περνά κάθε βήμα και τις αντίστοιχες κλάσεις LangChain4j:
-
+
-*Αυτό το διάγραμμα δείχνει τη διαδικασία αναζήτησης τεσσάρων βημάτων με ενσωμάτωση: ενσωμάτωση εγγράφων, ενσωμάτωση ερώτησης, σύγκριση διανυσμάτων με ομοιότητα συνημιτόνου, και επιστροφή των κορυφαίων αποτελεσμάτων.*
+*Αυτό το διάγραμμα δείχνει τη διαδικασία αναζήτησης ενσωμάτωσης σε τέσσερα βήματα: ενσωμάτωση εγγράφων, ενσωμάτωση ερώτησης, σύγκριση διανυσμάτων με ομοιότητα συνημίτονου και επιστροφή των κορυφαίων αποτελεσμάτων.*
-### Σημασιολογική Αναζήτηση
+### Semantic Search
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Όταν κάνετε μια ερώτηση, και η ερώτησή σας μετατρέπεται σε ενσωμάτωση. Το σύστημα συγκρίνει την ενσωμάτωση της ερώτησής σας με όλες τις ενσωματώσεις των τμημάτων εγγράφων. Βρίσκει τα τμήματα με τα πιο παρόμοια νοήματα — όχι απλώς μείωση λέξεων-κλειδιών, αλλά πραγματική σημασιολογική ομοιότητα.
+Όταν κάνετε μια ερώτηση, και αυτή η ερώτηση γίνεται επίσης μια ενσωμάτωση. Το σύστημα συγκρίνει την ενσωμάτωση της ερώτησής σας με όλες τις ενσωματώσεις των τμημάτων εγγράφων. Βρίσκει τα τμήματα με τα πιο παρόμοια νοήματα — όχι απλώς μετρήσεις λέξεων-κλειδιών, αλλά πραγματική σημασιολογική ομοιότητα.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -195,28 +194,28 @@ for (EmbeddingMatch match : matches) {
double score = match.score();
}
```
-
-Το παρακάτω διάγραμμα αντιπαραβάλλει τη σημασιολογική αναζήτηση με την παραδοσιακή αναζήτηση με λέξεις-κλειδιά. Μια αναζήτηση με λέξη-κλειδί για "όχημα" χάνει ένα τμήμα για "αυτοκίνητα και φορτηγά", αλλά η σημασιολογική αναζήτηση καταλαβαίνει ότι σημαίνουν το ίδιο και το επιστρέφει ως υψηλοβάθμο αποτέλεσμα:
+
+Το διάγραμμα παρακάτω αντιπαραβάλλει τη σημασιολογική αναζήτηση με την παραδοσιακή αναζήτηση λέξεων-κλειδιών. Μια αναζήτηση λέξεων-κλειδιών για "όχημα" χάνει ένα τμήμα για "αυτοκίνητα και φορτηγά," αλλά η σημασιολογική αναζήτηση καταλαβαίνει ότι σημαίνουν το ίδιο πράγμα και το επιστρέφει ως υψηλής βαθμολογίας ταίρι:
-*Αυτό το διάγραμμα συγκρίνει την αναζήτηση με βάση λέξεις-κλειδιά με τη σημασιολογική αναζήτηση, δείχνοντας πώς η σημασιολογική αναζήτηση αναζητά περιεχόμενο σχετικό εννοιολογικά ακόμη και όταν διαφέρουν οι ακριβείς λέξεις-κλειδιά.*
-Κάτω από την επιφάνεια, η ομοιότητα μετριέται χρησιμοποιώντας την συνημίτονα ομοιότητα — ουσιαστικά ρωτώντας "δεικνύουν αυτά τα δύο βέλη προς την ίδια κατεύθυνση;" Δύο τμήματα μπορούν να χρησιμοποιούν εντελώς διαφορετικές λέξεις, αλλά αν σημαίνουν το ίδιο πράγμα, τα διανύσματά τους δείχνουν στην ίδια κατεύθυνση και η βαθμολογία είναι κοντά στο 1.0:
+*Αυτό το διάγραμμα συγκρίνει την αναζήτηση με βάση λέξεις-κλειδιά με τη σημασιολογική αναζήτηση, δείχνοντας πώς η σημασιολογική αναζήτηση ανακτά περιεχόμενο που σχετίζεται εννοιολογικά ακόμα και όταν οι ακριβείς λέξεις-κλειδιά διαφέρουν.*
-
+Στο εσωτερικό, η ομοιότητα μετριέται χρησιμοποιώντας την ομοιότητα συνημίτονου — που ρωτά ουσιαστικά "δείχνουν αυτά τα δύο βέλη στην ίδια κατεύθυνση;" Δύο τμήματα μπορεί να χρησιμοποιούν εντελώς διαφορετικές λέξεις, αλλά αν σημαίνουν το ίδιο, τα διανύσματά τους δείχνουν προς την ίδια κατεύθυνση και έχουν βαθμολογία κοντά στο 1.0:
-*Αυτό το διάγραμμα απεικονίζει τη συνημίτονα ομοιότητα ως τη γωνία μεταξύ των διανυσμάτων ενσωμάτωσης — όσο πιο ευθυγραμμισμένα είναι τα διανύσματα, τόσο πιο κοντά στο 1.0 είναι η βαθμολογία, υποδεικνύοντας μεγαλύτερη σημασιολογική ομοιότητα.*
+
+*Αυτό το διάγραμμα απεικονίζει την ομοιότητα συνημιτόνου ως τη γωνία μεταξύ των διανυσμάτων ενσωμάτωσης — τα πιο ευθυγραμμισμένα διανύσματα έχουν βαθμολογία πιο κοντά στο 1.0, υποδηλώνοντας υψηλότερη σημασιολογική ομοιότητα.*
-> **🤖 Δοκίμασε με [GitHub Copilot](https://github.com/features/copilot) Chat:** Άνοιξε το [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) και ρώτα:
+> **🤖 Δοκιμάστε με το [GitHub Copilot](https://github.com/features/copilot) Chat:** Ανοίξτε το [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) και ρωτήστε:
> - "Πώς λειτουργεί η αναζήτηση ομοιότητας με τις ενσωματώσεις και τι καθορίζει τη βαθμολογία;"
> - "Ποιο όριο ομοιότητας πρέπει να χρησιμοποιήσω και πώς επηρεάζει τα αποτελέσματα;"
-> - "Πώς διαχειρίζομαι περιπτώσεις όπου δεν βρέθηκαν σχετικά έγγραφα;"
+> - "Πώς χειρίζομαι περιπτώσεις όπου δεν βρέθηκαν σχετικά έγγραφα;"
### Δημιουργία Απάντησης
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Τα πιο σχετικά τμήματα συγκεντρώνονται σε μια δομημένη υπόδειξη που περιλαμβάνει ρητές οδηγίες, το ανακτηθέν πλαίσιο και την ερώτηση του χρήστη. Το μοντέλο διαβάζει αυτά τα συγκεκριμένα τμήματα και απαντά βάσει αυτών των πληροφοριών — μπορεί να χρησιμοποιήσει μόνο ό,τι έχει μπροστά του, κάτι που αποτρέπει την παραγωγή ψευδών απαντήσεων.
+Τα πιο σχετικά τμήματα συντίθενται σε μια δομημένη προτροπή που περιλαμβάνει ρητές οδηγίες, το ανακτηθέν περιεχόμενο και την ερώτηση του χρήστη. Το μοντέλο διαβάζει αυτά τα συγκεκριμένα τμήματα και απαντά βάσει αυτών των πληροφοριών — μπορεί να χρησιμοποιήσει μόνο ό,τι έχει μπροστά του, κάτι που αποτρέπει την παρερμηνεία.
```java
String context = matches.stream()
@@ -237,55 +236,55 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-Το διάγραμμα παρακάτω δείχνει αυτή τη συναρμολόγηση σε δράση — τα τμήματα με την υψηλότερη βαθμολογία από το βήμα αναζήτησης εισάγονται στο πρότυπο υπόδειξης, και το `OpenAiOfficialChatModel` παράγει μια βασισμένη απάντηση:
+Το παρακάτω διάγραμμα δείχνει αυτή τη σύνθεση σε δράση — τα κορυφαία τμήματα με τη μεγαλύτερη βαθμολογία από το βήμα αναζήτησης εισάγονται στο πρότυπο προτροπής, και το `OpenAiOfficialChatModel` παράγει μια τεκμηριωμένη απάντηση:
-*Αυτό το διάγραμμα δείχνει πώς τα τμήματα με την υψηλότερη βαθμολογία συγκεντρώνονται σε μια δομημένη υπόδειξη, επιτρέποντας στο μοντέλο να παράγει μια βασισμένη απάντηση από τα δεδομένα σας.*
+*Αυτό το διάγραμμα δείχνει πώς τα κορυφαία σε βαθμολογία τμήματα συναρμολογούνται σε μια δομημένη προτροπή, επιτρέποντας στο μοντέλο να παράγει μια τεκμηριωμένη απάντηση από τα δεδομένα σας.*
## Εκτέλεση της Εφαρμογής
-**Επαλήθευση ανάπτυξης:**
+**Επιβεβαίωση ανάπτυξης:**
-Βεβαιωθείτε ότι το αρχείο `.env` υπάρχει στον ριζικό φάκελο με τα διαπιστευτήρια Azure (δημιουργήθηκε κατά τη διάρκεια του Μονάδα 01). Εκτελέστε το από τον φάκελο της μονάδας (`03-rag/`):
+Βεβαιωθείτε ότι το αρχείο `.env` υπάρχει στον ριζικό κατάλογο με διαπιστευτήρια Azure (δημιουργήθηκε κατά τη διάρκεια του Module 01). Εκτελέστε αυτό από το φάκελο του module (`03-rag/`):
**Bash:**
```bash
-cat ../.env # Θα πρέπει να εμφανίζει AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+cat ../.env # Θα πρέπει να εμφανίζει τα AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**PowerShell:**
```powershell
-Get-Content ..\.env # Πρέπει να εμφανίζει AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+Get-Content ..\.env # Θα πρέπει να εμφανίζει AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**Εκκίνηση της εφαρμογής:**
+**Εκκινήστε την εφαρμογή:**
-> **Σημείωση:** Αν έχετε ήδη ξεκινήσει όλες τις εφαρμογές χρησιμοποιώντας το `./start-all.sh` από τον ριζικό φάκελο (όπως περιγράφεται στο Μονάδα 01), αυτή η μονάδα τρέχει ήδη στην θύρα 8081. Μπορείτε να παραλείψετε τις παρακάτω εντολές εκκίνησης και να μεταβείτε απευθείας στο http://localhost:8081.
+> **Σημείωση:** Εάν έχετε ήδη ξεκινήσει όλες τις εφαρμογές χρησιμοποιώντας το `./start-all.sh` από τον ριζικό κατάλογο (όπως περιγράφεται στο Module 01), αυτό το module ήδη τρέχει στην θύρα 8081. Μπορείτε να παραλείψετε τις εντολές εκκίνησης παρακάτω και να πάτε απευθείας στο http://localhost:8081.
-**Επιλογή 1: Χρήση του Spring Boot Dashboard (Συνιστάται για χρήστες VS Code)**
+**Επιλογή 1: Χρήση του Spring Boot Dashboard (Προτεινόμενο για χρήστες VS Code)**
-Το dev container περιλαμβάνει την επέκταση Spring Boot Dashboard, που παρέχει οπτικό περιβάλλον για τη διαχείριση όλων των εφαρμογών Spring Boot. Μπορείτε να το βρείτε στη μπάρα δραστηριότητας στα αριστερά του VS Code (αναζητήστε το εικονίδιο του Spring Boot).
+Το περιβάλλον ανάπτυξης περιλαμβάνει την επέκταση Spring Boot Dashboard, που παρέχει ένα οπτικό περιβάλλον για τη διαχείριση όλων των εφαρμογών Spring Boot. Μπορείτε να το βρείτε στη γραμμή δραστηριοτήτων στα αριστερά του VS Code (αναζητήστε το εικονίδιο Spring Boot).
-Από το Spring Boot Dashboard μπορείτε να:
+Από το Spring Boot Dashboard, μπορείτε να:
- Δείτε όλες τις διαθέσιμες εφαρμογές Spring Boot στο χώρο εργασίας
- Ξεκινήσετε/σταματήσετε εφαρμογές με ένα κλικ
-- Προβάλετε αρχεία καταγραφής εφαρμογών σε πραγματικό χρόνο
-- Παρακολουθείτε την κατάσταση των εφαρμογών
+- Προβάλετε τα αρχεία καταγραφής εφαρμογών σε πραγματικό χρόνο
+- Παρακολουθήσετε την κατάσταση της εφαρμογής
-Απλά κάντε κλικ στο κουμπί εκκίνησης δίπλα στο "rag" για να ξεκινήσετε αυτή τη μονάδα, ή ξεκινήστε όλες τις μονάδες μαζί.
+Απλά κάντε κλικ στο κουμπί play δίπλα στο "rag" για να ξεκινήσετε αυτό το module, ή ξεκινήστε όλα τα modules μαζί.
-*Αυτή η εικόνα οθόνης δείχνει το Spring Boot Dashboard στο VS Code, όπου μπορείτε να ξεκινήσετε, να σταματήσετε και να παρακολουθήσετε εφαρμογές οπτικά.*
+*Αυτή η οθόνη δείχνει το Spring Boot Dashboard στο VS Code, όπου μπορείτε να ξεκινήσετε, να σταματήσετε και να παρακολουθήσετε τις εφαρμογές οπτικά.*
**Επιλογή 2: Χρήση shell scripts**
-Εκκινήστε όλες τις web εφαρμογές (μονάδες 01-04):
+Ξεκινήστε όλες τις web εφαρμογές (modules 01-04):
**Bash:**
```bash
-cd .. # Από τον ριζικό φάκελο
+cd .. # Από τον ριζικό κατάλογο
./start-all.sh
```
@@ -295,7 +294,7 @@ cd .. # Από τον ριζικό κατάλογο
.\start-all.ps1
```
-Ή εκκινήστε μόνο αυτή τη μονάδα:
+Ή ξεκινήστε μόνο αυτό το module:
**Bash:**
```bash
@@ -309,9 +308,9 @@ cd 03-rag
.\start.ps1
```
-Και τα δύο scripts φορτώνουν αυτόματα μεταβλητές περιβάλλοντος από το αρχείο `.env` του ριζικού φακέλου και θα δημιουργήσουν τα JAR αν δεν υπάρχουν.
+Και τα δύο scripts φορτώνουν αυτόματα τις μεταβλητές περιβάλλοντος από το ριζικό αρχείο `.env` και θα κατασκευάσουν τα JAR εάν δεν υπάρχουν.
-> **Σημείωση:** Αν προτιμάτε να κατασκευάσετε όλες τις μονάδες χειροκίνητα πριν την εκκίνηση:
+> **Σημείωση:** Εάν προτιμάτε να κατασκευάσετε όλα τα modules χειροκίνητα πριν από την εκκίνηση:
>
> **Bash:**
> ```bash
@@ -325,7 +324,7 @@ cd 03-rag
> mvn clean package -DskipTests
> ```
-Ανοίξτε το http://localhost:8081 στο πρόγραμμα περιήγησής σας.
+Ανοίξτε το http://localhost:8081 στον φυλλομετρητή σας.
**Για να σταματήσετε:**
@@ -345,93 +344,93 @@ cd ..; .\stop-all.ps1 # Όλα τα modules
## Χρήση της Εφαρμογής
-Η εφαρμογή παρέχει μια διαδικτυακή διεπαφή για την φόρτωση εγγράφων και την υποβολή ερωτήσεων.
+Η εφαρμογή παρέχει ένα διαδικτυακό περιβάλλον για ανέβασμα εγγράφων και ερωτήσεις.
-*Αυτή η εικόνα οθόνης δείχνει τη διεπαφή της εφαρμογής RAG όπου ανεβάζετε έγγραφα και κάνετε ερωτήσεις.*
+*Αυτή η εικόνα οθόνης δείχνει το περιβάλλον της εφαρμογής RAG όπου ανεβάζετε έγγραφα και κάνετε ερωτήσεις.*
### Ανέβασμα Εγγράφου
-Ξεκινήστε ανεβάζοντας ένα έγγραφο - τα αρχεία TXT είναι ιδανικά για δοκιμές. Ένα `sample-document.txt` παρέχεται σε αυτόν τον φάκελο που περιέχει πληροφορίες για τις λειτουργίες του LangChain4j, την υλοποίηση RAG και βέλτιστες πρακτικές - τέλειο για δοκιμή του συστήματος.
+Ξεκινήστε ανεβάζοντας ένα έγγραφο — τα αρχεία TXT λειτουργούν καλύτερα για δοκιμές. Ένα `sample-document.txt` παρέχεται σε αυτόν τον κατάλογο που περιέχει πληροφορίες για τις λειτουργίες του LangChain4j, την υλοποίηση RAG και τις βέλτιστες πρακτικές — ιδανικό για δοκιμή του συστήματος.
-Το σύστημα επεξεργάζεται το έγγραφό σας, το διασπά σε τμήματα και δημιουργεί ενσωματώσεις για κάθε τμήμα. Αυτό γίνεται αυτόματα όταν ανεβάζετε.
+Το σύστημα επεξεργάζεται το έγγραφο, το σπάει σε τμήματα και δημιουργεί ενσωματώσεις για κάθε τμήμα. Αυτό συμβαίνει αυτόματα κατά το ανέβασμα.
-### Υποβολή Ερωτήσεων
+### Κάντε Ερωτήσεις
-Τώρα κάντε συγκεκριμένες ερωτήσεις σχετικά με το περιεχόμενο του εγγράφου. Δοκιμάστε κάτι πραγματικό που δηλώνεται σαφώς στο έγγραφο. Το σύστημα αναζητά σχετικά τμήματα, τα συμπεριλαμβάνει στην υπόδειξη και παράγει μια απάντηση.
+Τώρα κάντε συγκεκριμένες ερωτήσεις σχετικά με το περιεχόμενο του εγγράφου. Δοκιμάστε κάτι γεγονότα που αναφέρονται ρητά στο έγγραφο. Το σύστημα αναζητά σχετικά τμήματα, τα περιλαμβάνει στην προτροπή και παράγει μια απάντηση.
-### Έλεγχος Αναφορών Πηγών
+### Ελέγξτε τις Πηγές Αναφορών
-Παρατηρήστε ότι κάθε απάντηση περιλαμβάνει αναφορές πηγών με βαθμολογίες ομοιότητας. Αυτές οι βαθμολογίες (0 έως 1) δείχνουν πόσο σχετικό ήταν κάθε τμήμα με την ερώτησή σας. Υψηλότερες βαθμολογίες σημαίνουν καλύτερες αντιστοιχίες. Αυτό σας επιτρέπει να επαληθεύσετε την απάντηση με βάση το πρωτότυπο υλικό.
+Παρατηρήστε ότι κάθε απάντηση περιλαμβάνει αναφορές πηγών με βαθμολογίες ομοιότητας. Αυτές οι βαθμολογίες (από 0 έως 1) δείχνουν πόσο σχετικό ήταν κάθε τμήμα με την ερώτησή σας. Οι υψηλότερες βαθμολογίες σημαίνουν καλύτερες αντιστοιχίες. Αυτό σας επιτρέπει να επαληθεύσετε την απάντηση με βάση το πρωτογενές υλικό.
-*Αυτή η εικόνα οθόνης δείχνει τα αποτελέσματα ερωτήσεων με την παραγόμενη απάντηση, τις αναφορές πηγών και τις βαθμολογίες σχετικότητας για κάθε ανακτηθέν τμήμα.*
+*Αυτή η εικόνα οθόνης δείχνει τα αποτελέσματα ερωτημάτων με την παραγόμενη απάντηση, τις αναφορές πηγών και τις βαθμολογίες σχετικότητας για κάθε ανακτηθέν τμήμα.*
### Πειραματιστείτε με Ερωτήσεις
-Δοκιμάστε διαφορετικούς τύπους ερωτήσεων:
+Δοκιμάστε διαφορετικά είδη ερωτήσεων:
- Συγκεκριμένα γεγονότα: "Ποιο είναι το κύριο θέμα;"
- Συγκρίσεις: "Ποια είναι η διαφορά μεταξύ X και Y;"
-- Περίληψη: "Περίληψη των βασικών σημείων για το Z"
+- Περίληψη: "Συνοψίστε τα βασικά σημεία σχετικά με το Z"
-Παρακολουθήστε πώς αλλάζουν οι βαθμολογίες σχετικότητας ανάλογα με το πόσο καλά η ερώτησή σας ταιριάζει με το περιεχόμενο του εγγράφου.
+Παρατηρήστε πώς αλλάζουν οι βαθμολογίες σχετικότητας βάσει το πόσο καλά ταιριάζει η ερώτησή σας με το περιεχόμενο του εγγράφου.
-## Βασικές Έννοιες
+## Κύριες Έννοιες
-### Στρατηγική Κατατμήσεων
+### Στρατηγική Τμηματοποίησης
-Τα έγγραφα διασπώνται σε τμήματα 300 tokens με 30 tokens επικάλυψη. Αυτή η ισορροπία διασφαλίζει ότι κάθε τμήμα έχει αρκετό πλαίσιο για να είναι ουσιαστικό ενώ παραμένει αρκετά μικρό ώστε να χωρούν πολλά τμήματα σε μια υπόδειξη.
+Τα έγγραφα χωρίζονται σε τμήματα 300 tokens με 30 tokens επικάλυψη. Αυτό το ισοζύγιο διασφαλίζει ότι κάθε τμήμα έχει αρκετό περιεχόμενο για να είναι ουσιαστικό, ενώ παραμένει ικανό να περιλάβει πολλαπλά τμήματα σε μια προτροπή.
### Βαθμολογίες Ομοιότητας
-Κάθε ανακτηθέν τμήμα συνοδεύεται από μια βαθμολογία ομοιότητας μεταξύ 0 και 1 που δείχνει πόσο στενά ταιριάζει με την ερώτηση του χρήστη. Το διάγραμμα παρακάτω οπτικοποιεί τα εύρη βαθμολογιών και πώς το σύστημα τα χρησιμοποιεί για τη φιλτραρίσματος αποτελεσμάτων:
+Κάθε ανακτηθέν τμήμα συνοδεύεται από βαθμολογία ομοιότητας μεταξύ 0 και 1 που δείχνει πόσο στενά ταιριάζει με την ερώτηση του χρήστη. Το παρακάτω διάγραμμα απεικονίζει τα εύρη βαθμολογίας και πώς το σύστημα τα χρησιμοποιεί για να φιλτράρει τα αποτελέσματα:
-*Αυτό το διάγραμμα δείχνει εύρη βαθμολογιών από 0 έως 1, με κατώτερο όριο 0.5 που φιλτράρει τα μη σχετικά τμήματα.*
+*Αυτό το διάγραμμα δείχνει τα εύρη βαθμολογίας από 0 έως 1, με ένα ελάχιστο όριο 0.5 που φιλτράρει τα άσχετα τμήματα.*
Οι βαθμολογίες κυμαίνονται από 0 έως 1:
-- 0.7-1.0: Πολύ σχετικό, ακριβής αντιστοιχία
-- 0.5-0.7: Σχετικό, καλό πλαίσιο
-- Κάτω από 0.5: Φιλτραρισμένο, πολύ ανομοιόμορφο
+- 0.7-1.0: Πολύ σχετικά, ακριβής αντιστοιχία
+- 0.5-0.7: Σχετικά, καλό πλαίσιο
+- Κάτω από 0.5: Φιλτράρεται, πολύ διαφορετικό
-Το σύστημα ανακτά μόνο τμήματα πάνω από το ελάχιστο όριο για να διασφαλίσει την ποιότητα.
+Το σύστημα ανακτά μόνο τμήματα πάνω από το ελάχιστο όριο για να εξασφαλίσει ποιότητα.
-Οι ενσωματώσεις λειτουργούν καλά όταν οι έννοιες συσσωρεύονται καθαρά, αλλά έχουν και αδύναμα σημεία. Το διάγραμμα παρακάτω δείχνει συνήθεις τρόπους αποτυχίας — τμήματα πολύ μεγάλα παράγουν θολά διανύσματα, τμήματα πολύ μικρά στερούνται πλαισίου, ασαφείς όροι σκιάζουν πολλαπλές ομάδες, και οι ακριβείς αναζητήσεις (IDs, αριθμοί μερών) δεν λειτουργούν καθόλου με ενσωματώσεις:
+Οι ενσωματώσεις δουλεύουν καλά όταν οι έννοιες συγκεντρώνονται καθαρά, αλλά έχουν αδύνατα σημεία. Το παρακάτω διάγραμμα δείχνει τις συνηθισμένες αποτυχίες — τμήματα που είναι πολύ μεγάλα παράγουν θολά διανύσματα, τμήματα πολύ μικρά στερούνται πλαισίου, αμβλυμμένες έννοιες δείχνουν σε πολλαπλές ομάδες, και αναζητήσεις ακριβούς αντιστοιχίας (IDs, αριθμοί ανταλλακτικών) δεν δουλεύουν καθόλου με τις ενσωματώσεις:
-*Αυτό το διάγραμμα δείχνει συνήθεις τρόπους αποτυχίας ενσωμάτωσης: τμήματα πολύ μεγάλα, τμήματα πολύ μικρά, ασαφείς όροι που δείχνουν σε πολλαπλές ομάδες, και ακριβείς αναζητήσεις όπως IDs.*
+*Αυτό το διάγραμμα δείχνει κοινές αποτυχίες ενσωμάτωσης: τμήματα πολύ μεγάλα, τμήματα πολύ μικρά, ασαφείς όροι που δείχνουν σε πολλαπλές ομάδες, και αναζητήσεις ακριβούς αντιστοιχίας όπως ID.*
-### Αποθήκευση στη Μνήμη
+### Αποθήκευση Στο Μνήμης
-Αυτή η μονάδα χρησιμοποιεί αποθήκευση στη μνήμη για απλότητα. Όταν επανεκκινείτε την εφαρμογή, τα ανεβασμένα έγγραφα χάνονται. Συστήματα παραγωγής χρησιμοποιούν επίμονες βάσεις δεδομένων διανυσμάτων όπως το Qdrant ή το Azure AI Search.
+Αυτό το module χρησιμοποιεί αποθήκευση στη μνήμη για απλότητα. Όταν επανεκκινήσετε την εφαρμογή, τα ανεβασμένα έγγραφα χάνονται. Συστήματα παραγωγής χρησιμοποιούν επίμονες βάσεις δεδομένων διανυσμάτων όπως οι Qdrant ή Azure AI Search.
### Διαχείριση Παραθύρου Πλαισίου
-Κάθε μοντέλο έχει μέγιστο παράθυρο πλαισίου. Δεν μπορείτε να συμπεριλάβετε κάθε τμήμα από ένα μεγάλο έγγραφο. Το σύστημα ανακτά τα N πιο σχετικά τμήματα (προεπιλογή 5) για να παραμείνει εντός ορίων ενώ παρέχει αρκετό πλαίσιο για ακριβείς απαντήσεις.
+Κάθε μοντέλο έχει ένα μέγιστο παράθυρο πλαισίου. Δεν μπορείτε να συμπεριλάβετε κάθε τμήμα από ένα μεγάλο έγγραφο. Το σύστημα ανακτά τα κορυφαία Ν πιο σχετικά τμήματα (εξ ορισμού 5) για να παραμένει εντός ορίων ενώ παρέχει αρκετό πλαίσιο για ακριβείς απαντήσεις.
-## Πότε έχει Σημασία το RAG
+## Πότε Έχει Σημασία η RAG
-Το RAG δεν είναι πάντα η κατάλληλη προσέγγιση. Ο παρακάτω οδηγός απόφασης σας βοηθά να αποφασίσετε πότε το RAG προσθέτει αξία έναντι απλούστερων προσεγγίσεων — όπως η άμεση ενσωμάτωση περιεχομένου στην υπόδειξη ή η χρήση της ενσωματωμένης γνώσης του μοντέλου:
+Η RAG δεν είναι πάντα η κατάλληλη προσέγγιση. Ο παρακάτω οδηγός απόφασης σας βοηθά να αποφασίσετε πότε η RAG προσθέτει αξία αντί πότε απλούστερες προσεγγίσεις — όπως η απευθείας συμπερίληψη περιεχομένου στην προτροπή ή η βασιζόμενη στη γνώση του μοντέλου — επαρκούν:
-*Αυτό το διάγραμμα δείχνει έναν οδηγό απόφασης για το πότε το RAG προσθέτει αξία και πότε οι απλούστερες προσεγγίσεις είναι επαρκείς.*
+*Αυτό το διάγραμμα δείχνει έναν οδηγό απόφασης για το πότε η RAG προσθέτει αξία σε σχέση με το πότε αρκούν απλούστερες προσεγγίσεις.*
## Επόμενα Βήματα
-**Επόμενη Μονάδα:** [04-tools - AI Agents with Tools](../04-tools/README.md)
+**Επόμενο Module:** [04-tools - AI Agents with Tools](../04-tools/README.md)
---
-**Πλοήγηση:** [← Προηγούμενο: Μονάδα 02 - Μηχανική Υποδείξεων](../02-prompt-engineering/README.md) | [Πίσω στην Αρχική](../README.md) | [Επόμενο: Μονάδα 04 - Εργαλεία →](../04-tools/README.md)
+**Πλοήγηση:** [← Προηγούμενο: Module 02 - Prompt Engineering](../02-prompt-engineering/README.md) | [Πίσω στην Αρχική](../README.md) | [Επόμενο: Module 04 - Tools →](../04-tools/README.md)
---
-**Αποποίηση ευθυνών**:
-Αυτή η εγγραφή έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρά τις προσπάθειές μας για ακρίβεια, παρακαλούμε να λάβετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλωσσική του μορφή πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται η επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
+**Αποποίηση ευθυνών**:
+Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
\ No newline at end of file
diff --git a/translations/el/04-tools/README.md b/translations/el/04-tools/README.md
index 7d4c50003..a525d782c 100644
--- a/translations/el/04-tools/README.md
+++ b/translations/el/04-tools/README.md
@@ -1,76 +1,76 @@
-# Module 04: Πράκτορες Τεχνητής Νοημοσύνης με Εργαλεία
+# Ενότητα 04: AI Πράκτορες με Εργαλεία
## Πίνακας Περιεχομένων
-- [Περιήγηση στο Βίντεο](../../../04-tools)
-- [Τι Θα Μάθετε](../../../04-tools)
-- [Προαπαιτούμενα](../../../04-tools)
-- [Κατανόηση των Πρακτόρων Τεχνητής Νοημοσύνης με Εργαλεία](../../../04-tools)
-- [Πώς Λειτουργεί η Κλήση Εργαλείων](../../../04-tools)
- - [Ορισμοί Εργαλείων](../../../04-tools)
- - [Λήψη Αποφάσεων](../../../04-tools)
- - [Εκτέλεση](../../../04-tools)
- - [Δημιουργία Απάντησης](../../../04-tools)
- - [Αρχιτεκτονική: Αυτόματη Δέσμευση στο Spring Boot](../../../04-tools)
-- [Αλυσιδωτή Χρήση Εργαλείων](../../../04-tools)
-- [Εκτέλεση της Εφαρμογής](../../../04-tools)
-- [Χρήση της Εφαρμογής](../../../04-tools)
- - [Δοκιμάστε Απλή Χρήση Εργαλείου](../../../04-tools)
- - [Δοκιμή Αλυσιδωτής Χρήσης Εργαλείων](../../../04-tools)
- - [Δείτε τη Ροή της Συνομιλίας](../../../04-tools)
- - [Πειραματιστείτε με Διάφορα Αιτήματα](../../../04-tools)
-- [Βασικές Έννοιες](../../../04-tools)
- - [Πρότυπο ReAct (Σκέψη και Δράση)](../../../04-tools)
- - [Η Περιγραφή των Εργαλείων Μετράει](../../../04-tools)
- - [Διαχείριση Συνεδρίας](../../../04-tools)
- - [Διαχείριση Σφαλμάτων](../../../04-tools)
-- [Διαθέσιμα Εργαλεία](../../../04-tools)
-- [Πότε να Χρησιμοποιήσετε Πράκτορες με Βάση τα Εργαλεία](../../../04-tools)
-- [Εργαλεία έναντι RAG](../../../04-tools)
-- [Επόμενα Βήματα](../../../04-tools)
-
-## Περιήγηση στο Βίντεο
-
-Παρακολουθήστε αυτή τη ζωντανή συνεδρία που εξηγεί πώς να ξεκινήσετε με αυτό το module:
-
-
+- [Περιήγηση σε Βίντεο](#περιήγηση-σε-βίντεο)
+- [Τι Θα Μάθετε](#τι-θα-μάθετε)
+- [Προαπαιτούμενα](#προαπαιτούμενα)
+- [Κατανόηση των AI Πρακτόρων με Εργαλεία](#κατανόηση-των-ai-πρακτόρων-με-εργαλεία)
+- [Πώς Λειτουργεί η Κλήση Εργαλείων](#πώς-λειτουργεί-η-κλήση-εργαλείων)
+ - [Ορισμοί Εργαλείων](#ορισμοί-εργαλείων)
+ - [Λήψη Αποφάσεων](#λήψη-αποφάσεων)
+ - [Εκτέλεση](#εκτέλεση)
+ - [Δημιουργία Απάντησης](#δημιουργία-απάντησης)
+ - [Αρχιτεκτονική: Αυτόματη Δρομολόγηση Spring Boot](#αρχιτεκτονική-αυτόματη-δρομολόγηση-spring-boot)
+- [Αλυσιδωτή Χρήση Εργαλείων](#αλυσιδωτή-χρήση-εργαλείων)
+- [Εκτέλεση της Εφαρμογής](#εκτέλεση-της-εφαρμογής)
+- [Χρήση της Εφαρμογής](#χρήση-της-εφαρμογής)
+ - [Δοκιμή Απλής Χρήσης Εργαλείου](#δοκιμάστε-απλή-χρήση-εργαλείου)
+ - [Δοκιμή Αλυσιδωτής Χρήσης Εργαλείων](#δοκιμάστε-αλυσιδωτή-χρήση-εργαλείων)
+ - [Δείτε τη Ροή της Συνομιλίας](#δείτε-τη-ροή-της-συνομιλίας)
+ - [Πειραματιστείτε με Διάφορα Αιτήματα](#πειραματιστείτε-με-διάφορα-αιτήματα)
+- [Βασικές Έννοιες](#κύριες-έννοιες)
+ - [Πρότυπο ReAct (Λογική και Δράση)](#πρότυπο-react-σκέψη-και-δράση)
+ - [Σημασία Περιγραφών Εργαλείων](#σημασία-περιγραφών-εργαλείων)
+ - [Διαχείριση Συνεδρίας](#διαχείριση-συνεδρίας)
+ - [Διαχείριση Σφαλμάτων](#διαχείριση-σφαλμάτων)
+- [Διαθέσιμα Εργαλεία](#διαθέσιμα-εργαλεία)
+- [Πότε να Χρησιμοποιείτε Πράκτορες Βασισμένους σε Εργαλεία](#πότε-να-χρησιμοποιείτε-πράκτορες-με-βάση-τα-εργαλεία)
+- [Εργαλεία έναντι RAG](#εργαλεία-vs-rag)
+- [Επόμενα Βήματα](#επόμενα-βήματα)
+
+## Περιήγηση σε Βίντεο
+
+Παρακολουθήστε αυτήν τη ζωντανή συνεδρία που εξηγεί πώς να ξεκινήσετε με αυτή την ενότητα:
+
+
## Τι Θα Μάθετε
-Μέχρι στιγμής, έχετε μάθει πώς να έχετε συνομιλίες με AI, να δομείτε αποτελεσματικά οδηγίες (prompts) και να βασίζετε τις απαντήσεις σας σε έγγραφα. Αλλά υπάρχει ακόμα ένας θεμελιώδης περιορισμός: τα γλωσσικά μοντέλα μπορούν να παράγουν μόνο κείμενο. Δεν μπορούν να ελέγξουν τον καιρό, να κάνουν υπολογισμούς, να αναζητήσουν σε βάσεις δεδομένων ή να αλληλεπιδράσουν με εξωτερικά συστήματα.
+Μέχρι τώρα, έχετε μάθει πώς να έχετε συνομιλίες με AI, να δομείτε αποτελεσματικά τις εντολές, και να εδραιώνετε τις απαντήσεις σας στα έγγραφά σας. Αλλά υπάρχει ακόμα ένας βασικός περιορισμός: τα γλωσσικά μοντέλα μπορούν μόνο να παράγουν κείμενο. Δεν μπορούν να ελέγξουν τον καιρό, να κάνουν υπολογισμούς, να ερωτήσουν βάσεις δεδομένων ή να αλληλεπιδράσουν με εξωτερικά συστήματα.
-Τα εργαλεία αλλάζουν αυτό. Δίνοντας στο μοντέλο πρόσβαση σε λειτουργίες που μπορεί να καλεί, το μετατρέπετε από γεννήτρια κειμένου σε πράκτορα που μπορεί να αναλαμβάνει δράσεις. Το μοντέλο αποφασίζει πότε χρειάζεται ένα εργαλείο, ποιο εργαλείο θα χρησιμοποιήσει και ποια ορίσματα θα περάσει. Ο κώδικάς σας εκτελεί τη λειτουργία και επιστρέφει το αποτέλεσμα. Το μοντέλο ενσωματώνει το αποτέλεσμα στην απάντησή του.
+Τα εργαλεία αλλάζουν αυτό. Δίνοντας στο μοντέλο πρόσβαση σε λειτουργίες που μπορεί να καλέσει, το μετατρέπετε από ένα εργαλείο παραγωγής κειμένου σε έναν πράκτορα που μπορεί να αναλαμβάνει δράσεις. Το μοντέλο αποφασίζει πότε χρειάζεται ένα εργαλείο, ποιο εργαλείο να χρησιμοποιήσει και ποια παραμέτρους να περάσει. Ο κώδικάς σας εκτελεί τη λειτουργία και επιστρέφει το αποτέλεσμα. Το μοντέλο ενσωματώνει αυτό το αποτέλεσμα στην απάντησή του.
## Προαπαιτούμενα
-- Ολοκληρωμένο [Module 01 - Εισαγωγή](../01-introduction/README.md) (αναπτυγμένοι πόροι Azure OpenAI)
-- Συνιστώμενα προηγούμενα modules (αυτό το module αναφέρεται σε [έννοιες RAG από το Module 03](../03-rag/README.md) στη σύγκριση Εργαλείων vs RAG)
-- Αρχείο `.env` στον ριζικό φάκελο με διαπιστευτήρια Azure (δημιουργήθηκε από `azd up` στο Module 01)
+- Ολοκληρωμένη [Ενότητα 01 - Εισαγωγή](../01-introduction/README.md) (αναπτύχθηκαν πόροι Azure OpenAI)
+- Συνιστάται να έχετε ολοκληρώσει τις προηγούμενες ενότητες (αυτή η ενότητα αναφέρεται σε [έννοιες RAG από την Ενότητα 03](../03-rag/README.md) στην σύγκριση Εργαλείων vs RAG)
+- Αρχείο `.env` στον βασικό κατάλογο με διαπιστευτήρια Azure (δημιουργήθηκε από `azd up` στην Ενότητα 01)
-> **Σημείωση:** Αν δεν έχετε ολοκληρώσει το Module 01, ακολουθήστε πρώτα τις οδηγίες ανάπτυξης εκεί.
+> **Σημείωση:** Αν δεν έχετε ολοκληρώσει την Ενότητα 01, ακολουθήστε πρώτα τις οδηγίες ανάπτυξης εκεί.
-## Κατανόηση των Πρακτόρων Τεχνητής Νοημοσύνης με Εργαλεία
+## Κατανόηση των AI Πρακτόρων με Εργαλεία
-> **📝 Σημείωση:** Ο όρος "πράκτορες" σε αυτό το module αναφέρεται σε βοηθούς AI με δυνατότητες κλήσης εργαλείων. Αυτό διαφέρει από τα πρότυπα **Agentic AI** (αυτόνομοι πράκτορες με σχεδιασμό, μνήμη και πολυβηματική λογική) που θα καλύψουμε στο [Module 05: MCP](../05-mcp/README.md).
+> **📝 Σημείωση:** Ο όρος "πράκτορες" σε αυτή την ενότητα αναφέρεται σε βοηθούς AI ενισχυμένους με δυνατότητες κλήσης εργαλείων. Αυτό διαφέρει από τα πρότυπα **Agentic AI** (αυτόνομοι πράκτορες με σχεδιασμό, μνήμη και λογική πολλαπλών βημάτων) που θα καλυφθούν στην [Ενότητα 05: MCP](../05-mcp/README.md).
-Χωρίς εργαλεία, ένα γλωσσικό μοντέλο μπορεί μόνο να παράγει κείμενο από τα δεδομένα εκπαίδευσής του. Ρωτήστε το για τον τρέχοντα καιρό, και απλά κάνει μια εικασία. Δώστε του εργαλεία, και μπορεί να καλέσει έναν API πρόγνωσης καιρού, να εκτελέσει υπολογισμούς ή να κάνει αναζητήσεις σε βάση δεδομένων — και στη συνέχεια να ενσωματώσει αυτά τα πραγματικά αποτελέσματα στην απάντησή του.
+Χωρίς εργαλεία, ένα γλωσσικό μοντέλο μπορεί μόνο να παράγει κείμενο από τα εκπαιδευτικά του δεδομένα. Ζητήστε του πληροφορίες για τον τρέχοντα καιρό, και πρέπει να μαντέψει. Δώστε του εργαλεία και μπορεί να καλέσει ένα API καιρού, να εκτελέσει υπολογισμούς, ή να ρωτήσει μια βάση δεδομένων — και μετά να ενσωματώσει αυτά τα πραγματικά αποτελέσματα στην απάντησή του.
-
+
-*Χωρίς εργαλεία, το μοντέλο μπορεί μόνο να εικάσει — με εργαλεία μπορεί να καλέσει APIs, να τρέξει υπολογισμούς και να επιστρέψει δεδομένα σε πραγματικό χρόνο.*
+*Χωρίς εργαλεία το μοντέλο μπορεί μόνο να μαντέψει — με εργαλεία μπορεί να καλέσει APIs, να κάνει υπολογισμούς και να επιστρέψει δεδομένα σε πραγματικό χρόνο.*
-Ένας πράκτορας AI με εργαλεία ακολουθεί το πρότυπο **Σκέψης και Δράσης (ReAct)**. Το μοντέλο δεν απαντά απλά — σκέφτεται τι χρειάζεται, δρα καλώντας ένα εργαλείο, παρατηρεί το αποτέλεσμα και στη συνέχεια αποφασίζει αν θα ενεργήσει ξανά ή θα δώσει την τελική απάντηση:
+Ένας πράκτορας AI με εργαλεία ακολουθεί ένα πρότυπο **Λογικής και Δράσης (ReAct)**. Το μοντέλο δεν απλώς απαντά — σκέφτεται τι χρειάζεται, ενεργεί καλώντας ένα εργαλείο, παρατηρεί το αποτέλεσμα, και μετά αποφασίζει αν θα δράσει ξανά ή θα δώσει την τελική απάντηση:
-1. **Σκέφτεται** — Ο πράκτορας αναλύει την ερώτηση του χρήστη και καθορίζει τις πληροφορίες που χρειάζεται
-2. **Δράση** — Ο πράκτορας επιλέγει το κατάλληλο εργαλείο, δημιουργεί σωστά τα ορίσματα και το καλεί
-3. **Παρατήρηση** — Ο πράκτορας λαμβάνει το αποτέλεσμα του εργαλείου και το αξιολογεί
-4. **Επανάληψη ή Απάντηση** — Αν χρειάζονται περισσότερα δεδομένα, ο πράκτορας επαναλαμβάνει τη διαδικασία, αλλιώς συνθέτει μια φυσική γλώσσα απάντηση
+1. **Λογική** — Ο πράκτορας αναλύει την ερώτηση του χρήστη και καθορίζει ποια πληροφορία χρειάζεται
+2. **Δράση** — Ο πράκτορας επιλέγει το σωστό εργαλείο, δημιουργεί τις σωστές παραμέτρους και το καλεί
+3. **Παρατήρηση** — Ο πράκτορας λαμβάνει το αποτέλεσμα του εργαλείου και αξιολογεί την έκβαση
+4. **Επανάληψη ή Απάντηση** — Αν χρειάζονται περισσότερα δεδομένα, ο πράκτορας επιστρέφει στην αρχή· αλλιώς συντάσσει μια απάντηση σε φυσική γλώσσα
-*Ο κύκλος ReAct — ο πράκτορας σκέφτεται τι να κάνει, δρα καλώντας εργαλείο, παρατηρεί το αποτέλεσμα και επαναλαμβάνει μέχρι να δώσει την τελική απάντηση.*
+*Ο κύκλος ReAct — ο πράκτορας σκέφτεται τι πρέπει να κάνει, ενεργεί καλώντας ένα εργαλείο, παρατηρεί το αποτέλεσμα και επαναλαμβάνει μέχρι να δώσει την τελική απάντηση.*
-Αυτό γίνεται αυτόματα. Εσείς ορίζετε τα εργαλεία και τις περιγραφές τους. Το μοντέλο αναλαμβάνει τη λήψη αποφάσεων για το πότε και πώς να τα χρησιμοποιήσει.
+Αυτό συμβαίνει αυτόματα. Ορίζετε τα εργαλεία και τις περιγραφές τους. Το μοντέλο αναλαμβάνει τη λήψη αποφάσεων για το πότε και πώς θα τα χρησιμοποιήσει.
## Πώς Λειτουργεί η Κλήση Εργαλείων
@@ -78,7 +78,7 @@
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-Ορίζετε συναρτήσεις με σαφείς περιγραφές και προδιαγραφές παραμέτρων. Το μοντέλο βλέπει αυτές τις περιγραφές στην προτροπή συστήματος και κατανοεί τι κάνει κάθε εργαλείο.
+Ορίζετε συναρτήσεις με σαφείς περιγραφές και προδιαγραφές παραμέτρων. Το μοντέλο βλέπει αυτές τις περιγραφές στο prompt συστήματος και κατανοεί τι κάνει κάθε εργαλείο.
```java
@Component
@@ -96,139 +96,139 @@ public interface Assistant {
String chat(@MemoryId String sessionId, @UserMessage String message);
}
-// Ο βοηθός συνδέεται αυτόματα από το Spring Boot με:
-// - Bean του ChatModel
-// - Όλες οι μέθοδοι @Tool από τις κλάσεις @Component
-// - Παροχέας ChatMemory για διαχείριση συνεδρίας
+// Ο Βοηθός συνδέεται αυτόματα από το Spring Boot με:
+// - Bean ChatModel
+// - Όλες οι μέθοδοι @Tool από κλάσεις @Component
+// - ChatMemoryProvider για διαχείριση συνεδρίας
```
-Το διάγραμμα παρακάτω αναλύει κάθε σχολιασμό και δείχνει πώς κάθε κομμάτι βοηθά το AI να καταλάβει πότε να καλέσει το εργαλείο και ποια ορίσματα να περάσει:
+Το παρακάτω διάγραμμα αναλύει κάθε σημείωση και δείχνει πώς κάθε μέρος βοηθά το AI να καταλάβει πότε να καλέσει το εργαλείο και ποια ορίσματα να περάσει:
-
+
-*Ανατομία ενός ορισμού εργαλείου — το @Tool λέει στο AI πότε να το χρησιμοποιήσει, το @P περιγράφει κάθε παράμετρο, και το @AiService συνδέει τα πάντα κατά την εκκίνηση.*
+*Ανατομία ορισμού εργαλείου — το @Tool λέει στο AI πότε να το χρησιμοποιήσει, το @P περιγράφει κάθε παράμετρο, και το @AiService συνδέει τα πάντα κατά την εκκίνηση.*
-> **🤖 Δοκιμάστε με το [GitHub Copilot](https://github.com/features/copilot) Chat:** Ανοίξτε το [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) και ρωτήστε:
-> - "Πώς θα ενσωμάτωνα έναν πραγματικό API καιρού όπως το OpenWeatherMap αντί για δεδομένα προσομοίωσης;"
-> - "Τι κάνει μια καλή περιγραφή εργαλείου που βοηθά το AI να το χρησιμοποιήσει σωστά;"
-> - "Πώς διαχειρίζομαι σφάλματα API και όρια κλήσεων στις υλοποιήσεις εργαλείων;"
+> **🤖 Δοκιμάστε με [GitHub Copilot](https://github.com/features/copilot) Chat:** Ανοίξτε το [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) και ρωτήστε:
+> - "Πώς θα ενσωμάτωνα ένα πραγματικό API καιρού όπως το OpenWeatherMap αντί για ψεύτικα δεδομένα;"
+> - "Τι κάνει μια καλή περιγραφή εργαλείου που βοηθά το AI να το χρησιμοποιεί σωστά;"
+> - "Πώς χειρίζομαι σφάλματα API και όρια ρυθμού στις υλοποιήσεις εργαλείων;"
### Λήψη Αποφάσεων
-Όταν ένας χρήστης ρωτά "Ποιος είναι ο καιρός στο Seattle;", το μοντέλο δεν διαλέγει τυχαία ένα εργαλείο. Συγκρίνει την πρόθεση του χρήστη με κάθε περιγραφή εργαλείου που έχει πρόσβαση, βαθμολογεί κάθε ένα για σχετικότητα και επιλέγει τον καλύτερο συνδυασμό. Έπειτα δημιουργεί μια δομημένη κλήση λειτουργίας με τα σωστά ορίσματα — σε αυτή την περίπτωση, ορίζοντας `location` σε `"Seattle"`.
+Όταν ένας χρήστης ρωτά "Ποιος είναι ο καιρός στο Σιάτλ;", το μοντέλο δεν διαλέγει τυχαία ένα εργαλείο. Συγκρίνει την πρόθεση του χρήστη με κάθε περιγραφή εργαλείου που έχει στη διάθεσή του, βαθμολογεί το καθένα για συνάφεια, και επιλέγει την καλύτερη αντιστοίχιση. Μετά παράγει μια δομημένη κλήση λειτουργίας με τις σωστές παραμέτρους — σε αυτή την περίπτωση, ορίζοντας το `location` σε `"Seattle"`.
-Αν κανένα εργαλείο δεν ταιριάζει στο αίτημα, το μοντέλο επιστρέφει απάντηση από τη δική του γνώση. Αν ταιριάζουν πολλά εργαλεία, επιλέγει το πιο συγκεκριμένο.
+Αν κανένα εργαλείο δεν ταιριάζει στο αίτημα του χρήστη, το μοντέλο επιστρέφει απάντηση από τη δική του γνώση. Αν ταιριάζουν πολλά εργαλεία, επιλέγει το πιο συγκεκριμένο.
-
+
-*Το μοντέλο αξιολογεί κάθε διαθέσιμο εργαλείο βάσει της πρόθεσης του χρήστη και επιλέγει το καλύτερο — γι' αυτό είναι σημαντικό να γράφετε σαφείς, συγκεκριμένες περιγραφές εργαλείων.*
+*Το μοντέλο αξιολογεί κάθε διαθέσιμο εργαλείο με βάση την πρόθεση του χρήστη και επιλέγει την καλύτερη αντιστοίχιση — γι’ αυτό είναι σημαντικό να γράφετε σαφείς, συγκεκριμένες περιγραφές εργαλείων.*
### Εκτέλεση
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-Το Spring Boot αυτόματα δένει τη δηλωτική διεπαφή `@AiService` με όλα τα καταχωρημένα εργαλεία, και το LangChain4j εκτελεί τις κλήσεις εργαλείων αυτόματα. Πίσω από τις σκηνές, μια πλήρης κλήση εργαλείου περνάει από έξι στάδια — από την ερώτηση του χρήστη σε φυσική γλώσσα μέχρι την τελική απάντηση σε φυσική γλώσσα:
+Το Spring Boot δρομολογεί αυτόματα τη δηλωτική διεπαφή `@AiService` με όλα τα εγγεγραμμένα εργαλεία, και το LangChain4j εκτελεί τις κλήσεις εργαλείων αυτόματα. Στο παρασκήνιο, μια ολοκληρωμένη κλήση εργαλείου περνάει από έξι στάδια — από την ερώτηση του χρήστη σε φυσική γλώσσα έως την απάντηση σε φυσική γλώσσα:
-*Η πλήρης ροή — ο χρήστης κάνει μια ερώτηση, το μοντέλο επιλέγει ένα εργαλείο, το LangChain4j το εκτελεί, και το μοντέλο ενσωματώνει το αποτέλεσμα σε φυσική απάντηση.*
+*Η πλήρης ροή — ο χρήστης κάνει μια ερώτηση, το μοντέλο επιλέγει ένα εργαλείο, το LangChain4j το εκτελεί και το μοντέλο ενσωματώνει το αποτέλεσμα σε φυσική απάντηση.*
-Αν τρέξατε το [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) στο Module 00, ήδη είδατε αυτό το πρότυπο σε δράση — τα εργαλεία `Calculator` καλούνταν με τον ίδιο τρόπο. Το παρακάτω διάγραμμα ακολουθίας δείχνει ακριβώς τι συνέβη κατά τη διάρκεια εκείνης της επίδειξης:
+Στο παρασκήνιο, το `AiServices` τρέχει τον ίδιο βρόχο κλήσης εργαλείων για κάθε εργαλείο — εδώ απεικονίζεται με έναν απλό `Calculator`. Το παρακάτω διάγραμμα ακολουθίας δείχνει ακριβώς τι συμβαίνει:
-*Ο βρόχος κλήσης εργαλείου από το Quick Start demo — τα `AiServices` στέλνουν το μήνυμά σας και τα σχήματα εργαλείων στο LLM, το LLM απαντά με μια κλήση λειτουργίας όπως `add(42, 58)`, το LangChain4j εκτελεί τοπικά τη μέθοδο του `Calculator` και τροφοδοτεί το αποτέλεσμα πίσω για την τελική απάντηση.*
+*Ο βρόχος κλήσης εργαλείου — το `AiServices` στέλνει το μήνυμά σας και το σχήμα εργαλείων στο LLM, το LLM απαντά με κλήση λειτουργίας όπως `add(42, 58)`, το LangChain4j εκτελεί τη μέθοδο `Calculator` τοπικά και επιστρέφει το αποτέλεσμα για την τελική απάντηση.*
-> **🤖 Δοκιμάστε με το [GitHub Copilot](https://github.com/features/copilot) Chat:** Ανοίξτε το [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) και ρωτήστε:
-> - "Πώς λειτουργεί το πρότυπο ReAct και γιατί είναι αποτελεσματικό για πράκτορες AI;"
+> **🤖 Δοκιμάστε με [GitHub Copilot](https://github.com/features/copilot) Chat:** Ανοίξτε το [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) και ρωτήστε:
+> - "Πώς δουλεύει το πρότυπο ReAct και γιατί είναι αποτελεσματικό για πράκτορες AI;"
> - "Πώς αποφασίζει ο πράκτορας ποιο εργαλείο να χρησιμοποιήσει και με ποια σειρά;"
-> - "Τι συμβαίνει αν αποτύχει η εκτέλεση εργαλείου - πώς πρέπει να χειριστώ τα σφάλματα αναλυτικά;"
+> - "Τι γίνεται αν αποτύχει μια εκτέλεση εργαλείου - πώς να χειριστώ τα σφάλματα σωστά;"
### Δημιουργία Απάντησης
-Το μοντέλο λαμβάνει τα δεδομένα καιρού και τα διαμορφώνει σε απάντηση φυσικής γλώσσας για τον χρήστη.
+Το μοντέλο λαμβάνει τα δεδομένα καιρού και τα μορφοποιεί σε μια απάντηση σε φυσική γλώσσα για τον χρήστη.
-### Αρχιτεκτονική: Αυτόματη Δέσμευση στο Spring Boot
+### Αρχιτεκτονική: Αυτόματη Δρομολόγηση Spring Boot
-Αυτό το module χρησιμοποιεί την ενσωμάτωση του LangChain4j με το Spring Boot μέσω δηλωτικών διεπαφών `@AiService`. Κατά την εκκίνηση, το Spring Boot ανακαλύπτει κάθε `@Component` που περιέχει μεθόδους `@Tool`, το bean του `ChatModel` και τον `ChatMemoryProvider` — και τα συνδέει όλα σε μια μοναδική διεπαφή `Assistant` με μηδενικό μπούσουλα (boilerplate).
+Αυτή η ενότητα χρησιμοποιεί την ενσωμάτωση LangChain4j με το Spring Boot και τις δηλωτικές διεπαφές `@AiService`. Κατά την εκκίνηση το Spring Boot εντοπίζει κάθε `@Component` που περιέχει μεθόδους `@Tool`, το bean `ChatModel`, και τον `ChatMemoryProvider` — και τα δρομολογεί όλα σε μια ενιαία διεπαφή `Assistant` χωρίς παραλληλισμούς κώδικα.
-
+
-*Η διεπαφή @AiService συνδέει το ChatModel, τα συστατικά εργαλείων και τον πάροχο μνήμης — το Spring Boot διαχειρίζεται αυτόματα τη δέσμευση.*
+*Η διεπαφή @AiService δένει μαζί το ChatModel, τα συστατικά εργαλείων και τον πάροχο μνήμης — το Spring Boot χειρίζεται όλη τη δρομολόγηση αυτόματα.*
-Εδώ είναι ο πλήρης κύκλος ζωής του αιτήματος ως διάγραμμα ακολουθίας — από το HTTP request μέσω του controller, του service και του auto-wired proxy, έως την εκτέλεση του εργαλείου και την επιστροφή:
+Εδώ είναι ο πλήρης κύκλος ζωής του αιτήματος ως διάγραμμα ακολουθίας — από το HTTP αίτημα, μέσα από τον controller, την υπηρεσία και τον αυτόματα δρομολογημένο proxy, μέχρι την εκτέλεση του εργαλείου και πίσω:
-
+
-*Ο πλήρης κύκλος ζωής του αιτήματος στο Spring Boot — το HTTP request περνάει από τον controller και το service στον auto-wired proxy του Assistant, που ενορχηστρώνει το LLM και τις κλήσεις εργαλείων αυτόματα.*
+*Ο πλήρης κύκλος ζωής αιτήματος Spring Boot — το αίτημα HTTP περνά μέσα από τον controller και την υπηρεσία προς τον αυτόματα δρομολογημένο proxy Assistant, που οργανώνει το LLM και τις κλήσεις εργαλειών αυτόματα.*
Κύρια οφέλη αυτής της προσέγγισης:
-- **Αυτόματη δέσμευση του Spring Boot** — Το ChatModel και τα εργαλεία εγχέονται αυτόματα
+- **Αυτόματη δρομολόγηση Spring Boot** — ChatModel και εργαλεία εγχέονται αυτόματα
- **Πρότυπο @MemoryId** — Αυτόματη διαχείριση μνήμης βάσει συνεδρίας
-- **Μοναδικό στιγμιότυπο** — Ο Assistant δημιουργείται μία φορά και επαναχρησιμοποιείται για καλύτερη απόδοση
-- **Εκτέλεση με ασφάλεια τύπων** — Κλήση Java μεθόδων απευθείας με μετατροπή τύπων
-- **Πολυβηματική ορχήστρωση** — Διαχειρίζεται αλυσιδωτή χρήση εργαλείων αυτόματα
-- **Μηδενικό μπούσουλα** — Χωρίς χειροκίνητες κλήσεις `AiServices.builder()` ή μνήμη HashMap
+- **Μοναδική περίπτωση** — Ο Assistant δημιουργείται μία φορά και επαναχρησιμοποιείται για καλύτερη απόδοση
+- **Εκτέλεση με τύπους ασφαλείς** — Κλήση Java μεθόδων απευθείας με μετατροπή τύπων
+- **Διαχείριση πολλαπλών βημάτων** — Αντιμετωπίζει αυτόματα την αλυσιδωτή χρήση εργαλείων
+- **Μηδενικός παραλληλισμός** — Δεν απαιτούνται χειροκίνητες κλήσεις `AiServices.builder()` ή memory HashMap
-Εναλλακτικές προσεγγίσεις (χειροκίνητο `AiServices.builder()`) απαιτούν περισσότερο κώδικα και στερούνται τα πλεονεκτήματα ενσωμάτωσης με το Spring Boot.
+Εναλλακτικές προσεγγίσεις (χειροκίνητο `AiServices.builder()`) απαιτούν περισσότερο κώδικα και χάνουν τα οφέλη της ενσωμάτωσης Spring Boot.
## Αλυσιδωτή Χρήση Εργαλείων
-**Αλυσιδωτή Χρήση Εργαλείων** — Η πραγματική δύναμη των πρακτόρων με εργαλεία δείχνει όταν μια ερώτηση απαιτεί πολλαπλά εργαλεία. Ρωτήστε "Ποιος είναι ο καιρός στο Seattle σε βαθμούς Φαρενάιτ;" και ο πράκτορας αλυσιδώνει αυτόματα δύο εργαλεία: πρώτα καλεί το `getCurrentWeather` για να πάρει τη θερμοκρασία σε Κελσίου, και μετά περνάει αυτό το αποτέλεσμα στο `celsiusToFahrenheit` για μετατροπή — όλα σε μία μόνο στροφή συνομιλίας.
+**Αλυσιδωτή Χρήση Εργαλείων** — Η πραγματική δύναμη των πράκτορων βασισμένων σε εργαλεία φαίνεται όταν μια ερώτηση απαιτεί πολλά εργαλεία. Ρωτήστε "Ποιος είναι ο καιρός στο Σιάτλ σε Φαρενάιτ;" και ο πράκτορας αλυσιδωτά συνδυάζει δύο εργαλεία: πρώτα καλεί το `getCurrentWeather` για να πάρει τη θερμοκρασία σε Κελσίου, μετά περνά αυτή την τιμή στο `celsiusToFahrenheit` για μετατροπή — όλα σε μια συνομιλία.
-*Αλυσιδωτή χρήση εργαλείων σε δράση — ο πράκτορας καλεί πρώτα το getCurrentWeather, μετά διοχετεύει το αποτέλεσμα σε Κελσίου στο celsiusToFahrenheit, και δίνει μια συνδυασμένη απάντηση.*
+*Αλυσιδωτή χρήση εργαλείων σε δράση — ο πράκτορας πρώτα καλεί το getCurrentWeather, μετά περνά το αποτέλεσμα σε Κελσίου στο celsiusToFahrenheit και δίνει συνδυασμένη απάντηση.*
-**Ομαλές Αποτυχίες** — Ζητήστε καιρό σε μια πόλη που δεν υπάρχει στα δεδομένα προσομοίωσης. Το εργαλείο επιστρέφει μήνυμα σφάλματος, και το AI εξηγεί ότι δεν μπορεί να βοηθήσει αντί να καταρρεύσει. Τα εργαλεία αποτυγχάνουν με ασφάλεια. Το διάγραμμα παρακάτω συγκρίνει τις δύο προσεγγίσεις — με σωστή διαχείριση σφαλμάτων, ο πράκτορας καταφέρνει την εξαίρεση και απαντά βοηθητικά, ενώ χωρίς αυτήν η εφαρμογή καταρρέει εντελώς:
+**Απαλά Σφάλματα** — Ζητήστε τον καιρό σε μια πόλη που δεν υπάρχει στα ψεύτικα δεδομένα. Το εργαλείο επιστρέφει μήνυμα σφάλματος και το AI εξηγεί ότι δεν μπορεί να βοηθήσει αντί να καταρρεύσει η εφαρμογή. Τα εργαλεία αποτυγχάνουν με ασφάλεια. Το παρακάτω διάγραμμα συγκρίνει τις δύο προσεγγίσεις — με σωστή διαχείριση σφαλμάτων, ο πράκτορας πιάνει την εξαίρεση και απαντά χρήσιμα, ενώ χωρίς αυτή η εφαρμογή καταρρέει:
-*Όταν ένα εργαλείο αποτυγχάνει, ο πράκτορας πιάνει το σφάλμα και απαντά με μια χρήσιμη εξήγηση αντί να καταρρεύσει.*
+*Όταν αποτυγχάνει ένα εργαλείο, ο πράκτορας πιάνει το σφάλμα και απαντά με χρήσιμη εξήγηση αντί να καταρρεύσει.*
-Αυτό γίνεται σε μία μόνο στροφή συνομιλίας. Ο πράκτορας ενορχηστρώνει αυτόνομα πολλαπλές κλήσεις εργαλείων.
+Αυτό συμβαίνει σε μια μόνο συνομιλία. Ο πράκτορας οργανώνει αυτόνομα πολλαπλές κλήσεις εργαλείων.
## Εκτέλεση της Εφαρμογής
-**Επαλήθευση ανάπτυξης:**
+**Επιβεβαίωση ανάπτυξης:**
-Εξασφαλίστε ότι το αρχείο `.env` υπάρχει στον ριζικό φάκελο με διαπιστευτήρια Azure (δημιουργήθηκε κατά το Module 01). Εκτελέστε αυτό από τον φάκελο του module (`04-tools/`):
+Βεβαιωθείτε ότι το αρχείο `.env` υπάρχει στον αρχικό φάκελο με διαπιστευτήρια Azure (δημιουργήθηκε κατά την Ενότητα 01). Εκτελέστε από το φάκελο της ενότητας (`04-tools/`):
**Bash:**
```bash
-cat ../.env # Θα πρέπει να εμφανιστεί το AZURE_OPENAI_ENDPOINT, το API_KEY, το DEPLOYMENT
+cat ../.env # Θα πρέπει να εμφανίζει το AZURE_OPENAI_ENDPOINT, το API_KEY, το DEPLOYMENT
```
**PowerShell:**
```powershell
-Get-Content ..\.env # Πρέπει να εμφανίζει το AZURE_OPENAI_ENDPOINT, το API_KEY, το DEPLOYMENT
+Get-Content ..\.env # Πρέπει να εμφανίζει το AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**Εκκινήστε την εφαρμογή:**
+**Εκκίνηση της εφαρμογής:**
-> **Σημείωση:** Αν έχετε ήδη εκκινήσει όλες τις εφαρμογές χρησιμοποιώντας `./start-all.sh` από τον ριζικό φάκελο (όπως περιγράφεται στο Module 01), αυτό το module τρέχει ήδη στη θύρα 8084. Μπορείτε να παραλείψετε τις παρακάτω εντολές εκκίνησης και να μεταβείτε απευθείας στο http://localhost:8084.
+> **Σημείωση:** Αν έχετε ήδη ξεκινήσει όλες τις εφαρμογές χρησιμοποιώντας το `./start-all.sh` από τον αρχικό φάκελο (όπως περιγράφεται στην Ενότητα 01), αυτή η ενότητα ήδη τρέχει στη θύρα 8084. Μπορείτε να παραλείψετε τις εντολές εκκίνησης παρακάτω και να μεταβείτε απευθείας στο http://localhost:8084.
**Επιλογή 1: Χρήση του Spring Boot Dashboard (Συνιστάται για χρήστες VS Code)**
-Το container ανάπτυξης περιλαμβάνει την επέκταση Spring Boot Dashboard, που παρέχει οπτική διεπαφή για τη διαχείριση όλων των εφαρμογών Spring Boot. Μπορείτε να τη βρείτε στο Activity Bar στο αριστερό μέρος του VS Code (αναζητήστε το εικονίδιο Spring Boot).
+Το περιβάλλον ανάπτυξης περιλαμβάνει την επέκταση Spring Boot Dashboard, που παρέχει οπτικό περιβάλλον για τη διαχείριση όλων των εφαρμογών Spring Boot. Μπορείτε να τη βρείτε στη γραμμή δραστηριότητας αριστερά στο VS Code (αναζητήστε το εικονίδιο Spring Boot).
Από το Spring Boot Dashboard, μπορείτε:
-- Να δείτε όλες τις διαθέσιμες εφαρμογές Spring Boot στο workspace
+- Να δείτε όλες τις διαθέσιμες εφαρμογές Spring Boot στον χώρο εργασίας
- Να ξεκινήσετε/σταματήσετε εφαρμογές με ένα κλικ
- Να δείτε logs εφαρμογών σε πραγματικό χρόνο
- Να παρακολουθείτε την κατάσταση των εφαρμογών
-Απλώς κάντε κλικ στο κουμπί αναπαραγωγής δίπλα στο "εργαλεία" για να ξεκινήσετε αυτό το module ή ξεκινήστε όλα τα modules ταυτόχρονα.
-Ακολουθεί πώς φαίνεται το Spring Boot Dashboard στο VS Code:
+Απλώς κάντε κλικ στο κουμπί αναπαραγωγής δίπλα στο "tools" για να ξεκινήσει αυτή η ενότητα, ή να ξεκινήσετε όλες τις ενότητες μαζί.
+Δείτε πώς εμφανίζεται το Spring Boot Dashboard στο VS Code:
-*Ο Πίνακας Ελέγχου Spring Boot στο VS Code — εκκίνηση, διακοπή και παρακολούθηση όλων των modules από ένα σημείο*
+*Ο Πίνακας Ελέγχου Spring Boot στο VS Code — εκκίνηση, διακοπή και παρακολούθηση όλων των μονάδων από ένα μέρος*
**Επιλογή 2: Χρήση shell scripts**
-Ξεκινήστε όλες τις διαδικτυακές εφαρμογές (modules 01-04):
+Εκκίνηση όλων των web εφαρμογών (μονάδες 01-04):
**Bash:**
```bash
@@ -242,7 +242,7 @@ cd .. # Από τον ριζικό κατάλογο
.\start-all.ps1
```
-Ή ξεκινήστε μόνο αυτό το module:
+Ή εκκίνηση μόνο αυτής της μονάδας:
**Bash:**
```bash
@@ -256,9 +256,9 @@ cd 04-tools
.\start.ps1
```
-Και τα δύο scripts φορτώνουν αυτόματα μεταβλητές περιβάλλοντος από το κεντρικό αρχείο `.env` και θα δημιουργήσουν τα JARs αν δεν υπάρχουν.
+Και τα δύο scripts φορτώνουν αυτόματα τις μεταβλητές περιβάλλοντος από το αρχείο root `.env` και θα δημιουργήσουν τα JARs αν δεν υπάρχουν.
-> **Σημείωση:** Αν προτιμάτε να δημιουργήσετε χειροκίνητα όλα τα modules πριν την εκκίνηση:
+> **Σημείωση:** Αν προτιμάτε να δημιουργήσετε όλες τις μονάδες χειροκίνητα πριν την εκκίνηση:
>
> **Bash:**
> ```bash
@@ -272,116 +272,116 @@ cd 04-tools
> mvn clean package -DskipTests
> ```
-Ανοίξτε το http://localhost:8084 στον περιηγητή σας.
+Ανοίξτε http://localhost:8084 στον περιηγητή σας.
**Για διακοπή:**
**Bash:**
```bash
-./stop.sh # Μόνο αυτό το module
+./stop.sh # Μόνο αυτό το μοντέλο
# Ή
-cd .. && ./stop-all.sh # Όλα τα modules
+cd .. && ./stop-all.sh # Όλα τα μοντέλα
```
**PowerShell:**
```powershell
-.\stop.ps1 # Μόνο αυτό το module
+.\stop.ps1 # Μόνο αυτό το μονάδα
# Ή
-cd ..; .\stop-all.ps1 # Όλα τα modules
+cd ..; .\stop-all.ps1 # Όλες οι μονάδες
```
## Χρήση της Εφαρμογής
-Η εφαρμογή παρέχει διεπαφή ιστού όπου μπορείτε να αλληλεπιδράσετε με έναν πράκτορα AI που έχει πρόσβαση σε εργαλεία καιρού και μετατροπής θερμοκρασίας. Δείτε πώς φαίνεται η διεπαφή — περιλαμβάνει παραδείγματα γρήγορης εκκίνησης και πάνελ συνομιλίας για αποστολή αιτημάτων:
+Η εφαρμογή παρέχει μια web διεπαφή όπου μπορείτε να αλληλεπιδράσετε με έναν AI πράκτορα που έχει πρόσβαση σε εργαλεία καιρού και μετατροπής θερμοκρασίας. Δείτε πώς φαίνεται η διεπαφή — περιλαμβάνει παραδείγματα γρήγορης εκκίνησης και πλαίσιο συνομιλίας για αποστολή αιτημάτων:
-
+
-*Η διεπαφή εργαλείων Πράκτορα AI - γρήγορα παραδείγματα και συνομιλιακή διεπαφή για αλληλεπίδραση με εργαλεία*
+*Η διεπαφή Εργαλείων AI Πράκτορα - γρήγορα παραδείγματα και πλαίσιο συνομιλίας για αλληλεπίδραση με τα εργαλεία*
### Δοκιμάστε Απλή Χρήση Εργαλείου
-Ξεκινήστε με ένα απλό αίτημα: "Μετατρέψτε 100 βαθμούς Fahrenheit σε Κελσίου". Ο πράκτορας αναγνωρίζει ότι χρειάζεται το εργαλείο μετατροπής θερμοκρασίας, το καλεί με τις σωστές παραμέτρους και επιστρέφει το αποτέλεσμα. Παρατηρήστε πόσο φυσικό φαίνεται — δεν υποδείξατε ποιο εργαλείο να χρησιμοποιήσει ή πώς να το καλέσει.
+Ξεκινήστε με ένα απλό αίτημα: "Μετατρέψτε 100 βαθμούς Φαρενάιτ σε Κελσίου". Ο πράκτορας αναγνωρίζει ότι χρειάζεται το εργαλείο μετατροπής θερμοκρασίας, το καλεί με τις σωστές παραμέτρους και επιστρέφει το αποτέλεσμα. Παρατηρήστε πόσο φυσικό φαίνεται — δεν ορίσατε ποιο εργαλείο να χρησιμοποιηθεί ή πώς να το καλέσετε.
-### Δοκιμάστε Αλυσίδωση Εργαλείων
+### Δοκιμάστε Αλυσιδωτή Χρήση Εργαλείων
-Τώρα δοκιμάστε κάτι πιο πολύπλοκο: "Ποιος είναι ο καιρός στο Σιάτλ και μετατρέψτε τον σε Fahrenheit;" Παρακολουθήστε τον πράκτορα να το εκτελεί σε βήματα. Πρώτα παίρνει τον καιρό (που επιστρέφει σε Κελσίου), αναγνωρίζει ότι πρέπει να τον μετατρέψει σε Fahrenheit, καλεί το εργαλείο μετατροπής και συνδυάζει τα αποτελέσματα σε μία απάντηση.
+Τώρα δοκιμάστε κάτι πιο περίπλοκο: "Ποιος είναι ο καιρός στο Σιάτλ και μετατρέψτε τον σε Φαρενάιτ;" Παρακολουθήστε τον πράκτορα να εργάζεται βήμα-βήμα. Πρώτα παίρνει τον καιρό (που επιστρέφει σε Κελσίου), αναγνωρίζει ότι χρειάζεται να μετατρέψει σε Φαρενάιτ, καλεί το εργαλείο μετατροπής και συνδυάζει τα δύο αποτελέσματα σε μία απάντηση.
### Δείτε τη Ροή της Συνομιλίας
-Η διεπαφή συνομιλίας διατηρεί το ιστορικό της συνομιλίας, επιτρέποντάς σας να έχετε αλληλεπιδράσεις πολλών γύρων. Μπορείτε να δείτε όλα τα προηγούμενα ερωτήματα και απαντήσεις, καθιστώντας εύκολο να παρακολουθείτε τη συνομιλία και να κατανοήσετε πώς ο πράκτορας χτίζει το πλαίσιο μέσα από πολλαπλές ανταλλαγές.
+Η διεπαφή συνομιλίας διατηρεί το ιστορικό της συνομιλίας, επιτρέποντάς σας να έχετε αλληλεπιδράσεις πολλών γύρων. Μπορείτε να δείτε όλα τα προηγούμενα ερωτήματα και απαντήσεις, κάνοντας εύκολο το να παρακολουθείτε τη συνομιλία και να κατανοείτε πώς ο πράκτορας χτίζει το πλαίσιο μέσα από πολλαπλές ανταλλαγές.
-*Πολλαπλής γύρου συνομιλία που δείχνει απλές μετατροπές, αναζητήσεις καιρού και αλυσίδωση εργαλείων*
+*Συνομιλία πολλών γύρων που δείχνει απλές μετατροπές, αναζητήσεις καιρού και αλυσιδωτή χρήση εργαλείων*
-### Πειραματιστείτε με Διάφορα Αίτήματα
+### Πειραματιστείτε με Διάφορα Αιτήματα
Δοκιμάστε διάφορους συνδυασμούς:
- Αναζητήσεις καιρού: "Ποιος είναι ο καιρός στο Τόκιο;"
- Μετατροπές θερμοκρασίας: "Πόσο είναι 25°C σε Κέλβιν;"
- Συνδυασμένα ερωτήματα: "Ελέγξτε τον καιρό στο Παρίσι και πείτε μου αν είναι πάνω από 20°C"
-Παρατηρήστε πώς ο πράκτορας ερμηνεύει τη φυσική γλώσσα και τη μεταφράζει σε κατάλληλες κλήσεις εργαλείων.
+Παρατηρήστε πώς ο πράκτορας ερμηνεύει τη φυσική γλώσσα και τη χαρτογραφεί σε κατάλληλες κλήσεις εργαλείων.
-## Βασικές Έννοιες
+## Κύριες Έννοιες
-### Πρότυπο ReAct (Λογισμός και Δράση)
+### Πρότυπο ReAct (Σκέψη και Δράση)
-Ο πράκτορας εναλλάσσεται μεταξύ λογισμού (αποφασίζοντας τι να κάνει) και δράσης (χρησιμοποιώντας εργαλεία). Αυτό το πρότυπο επιτρέπει αυτόνομη επίλυση προβλημάτων αντί απλώς ανταπόκριση σε εντολές.
+Ο πράκτορας εναλλάσσεται μεταξύ σκέψης (αποφασίζοντας τι να κάνει) και δράσης (χρησιμοποιώντας εργαλεία). Αυτό το πρότυπο επιτρέπει αυτόνομη επίλυση προβλημάτων αντί απλώς να ανταποκρίνεται σε οδηγίες.
### Σημασία Περιγραφών Εργαλείων
-Η ποιότητα των περιγραφών των εργαλείων επηρεάζει άμεσα το πόσο καλά τα χρησιμοποιεί ο πράκτορας. Καθαρές, συγκεκριμένες περιγραφές βοηθούν το μοντέλο να κατανοεί πότε και πώς να καλεί κάθε εργαλείο.
+Η ποιότητα των περιγραφών των εργαλείων σας επηρεάζει άμεσα το πόσο καλά τα χρησιμοποιεί ο πράκτορας. Καθαρές, συγκεκριμένες περιγραφές βοηθούν το μοντέλο να κατανοεί πότε και πώς να καλεί κάθε εργαλείο.
### Διαχείριση Συνεδρίας
-Η ανάλωση `@MemoryId` επιτρέπει αυτόματη διαχείριση μνήμης βάσει συνεδριών. Κάθε αναγνωριστικό συνεδρίας λαμβάνει τη δική του `ChatMemory` instance που διαχειρίζεται το bean `ChatMemoryProvider`, ώστε πολλοί χρήστες να μπορούν να αλληλεπιδρούν με τον πράκτορα ταυτόχρονα χωρίς να αναμιγνύονται οι συνομιλίες τους. Το παρακάτω διάγραμμα δείχνει πώς πολλοί χρήστες δρομολογούνται σε απομονωμένες αποθήκες μνήμης με βάση τα IDs συνεδρίας τους:
+Η `@MemoryId` ανάρτηση επιτρέπει αυτόματη διαχείριση μνήμης βάσει συνεδρίας. Κάθε αναγνωριστικό συνεδρίας λαμβάνει δική του `ChatMemory` παρουσία που διαχειρίζεται το bean `ChatMemoryProvider`, έτσι πολλοί χρήστες μπορούν να αλληλεπιδράσουν με τον πράκτορα ταυτόχρονα χωρίς να αναμειγνύονται οι συνομιλίες τους. Το παρακάτω διάγραμμα δείχνει πώς πολλοί χρήστες κατευθύνονται σε απομονωμένα καταστήματα μνήμης βάσει των αναγνωριστικών συνεδρίας τους:
-
+
-*Κάθε αναγνωριστικό συνεδρίας χαρτογραφείται σε απομονωμένο ιστορικό συνομιλίας — οι χρήστες δεν βλέπουν ποτέ τα μηνύματα άλλων.*
+*Κάθε αναγνωριστικό συνεδρίας αντιστοιχίζεται σε απομονωμένο ιστορικό συνομιλίας — οι χρήστες δεν βλέπουν ποτέ τα μηνύματα ο ένας του άλλου.*
### Διαχείριση Σφαλμάτων
-Τα εργαλεία μπορεί να αποτύχουν — χρόνοι λήξης API, άκυρες παράμετροι, αποτυχίες εξωτερικών υπηρεσιών. Οι πράκτορες παραγωγής χρειάζονται διαχείριση σφαλμάτων ώστε το μοντέλο να εξηγεί προβλήματα ή να δοκιμάζει εναλλακτικές χωρίς την κατάρρευση ολόκληρης εφαρμογής. Όταν ένα εργαλείο ρίχνει εξαίρεση, το LangChain4j τη συλλαμβάνει και τροφοδοτεί το μήνυμα λάθους πίσω στο μοντέλο, το οποίο μπορεί τότε να εξηγήσει το πρόβλημα σε φυσική γλώσσα.
+Τα εργαλεία μπορεί να αποτύχουν — οι API έχουν χρονικό όριο, παράμετροι μπορεί να είναι άκυρες, εξωτερικές υπηρεσίες να πέσουν. Οι παραγωγικοί πράκτορες χρειάζονται χειρισμό σφαλμάτων ώστε το μοντέλο να μπορεί να εξηγεί προβλήματα ή να προσπαθεί εναλλακτικές αντί να καταρρέει ολόκληρη η εφαρμογή. Όταν ένα εργαλείο πετάει εξαίρεση, το LangChain4j την πιάνει και τροφοδοτεί το μήνυμα σφάλματος πίσω στο μοντέλο, που τότε μπορεί να εξηγήσει το πρόβλημα σε φυσική γλώσσα.
## Διαθέσιμα Εργαλεία
-Το παρακάτω διάγραμμα δείχνει το ευρύ οικοσύστημα εργαλείων που μπορείτε να δημιουργήσετε. Αυτό το module δείχνει εργαλεία καιρού και θερμοκρασίας, αλλά το ίδιο πρότυπο `@Tool` λειτουργεί για οποιαδήποτε μέθοδο Java — από ερωτήματα βάσεων δεδομένων μέχρι επεξεργασία πληρωμών.
+Το παρακάτω διάγραμμα δείχνει το εκτενές οικοσύστημα εργαλείων που μπορείτε να δημιουργήσετε. Αυτή η μονάδα παρουσιάζει εργαλεία καιρού και θερμοκρασίας, αλλά το ίδιο πρότυπο `@Tool` λειτουργεί για οποιαδήποτε μέθοδο Java — από ερωτήματα βάσεων δεδομένων μέχρι επεξεργασία πληρωμών.
-*Οποιαδήποτε μέθοδος Java σημειωμένη με @Tool γίνεται διαθέσιμη στην AI — το πρότυπο επεκτείνεται σε βάσεις δεδομένων, API, email, λειτουργίες αρχείων και άλλα.*
+*Οποιαδήποτε μέθοδος Java με την ανάρτηση @Tool γίνεται διαθέσιμη για τον AI — το πρότυπο επεκτείνεται σε βάσεις δεδομένων, APIs, email, λειτουργίες αρχείων και άλλα.*
-## Πότε να Χρησιμοποιήσετε Πράκτορες με Εργαλεία
+## Πότε να Χρησιμοποιείτε Πράκτορες με Βάση τα Εργαλεία
-Δεν χρειάζονται όλα τα αιτήματα εργαλεία. Η απόφαση εξαρτάται από το αν η AI πρέπει να αλληλεπιδράσει με εξωτερικά συστήματα ή μπορεί να απαντήσει από τις δικές της γνώσεις. Ο παρακάτω οδηγός συνοψίζει πότε τα εργαλεία προσθέτουν αξία και πότε είναι περιττά:
+Όχι κάθε αίτημα χρειάζεται εργαλεία. Η απόφαση εξαρτάται από το αν ο AI χρειάζεται να αλληλεπιδράσει με εξωτερικά συστήματα ή μπορεί να απαντήσει από τη δική του γνώση. Ο παρακάτω οδηγός συνοψίζει πότε τα εργαλεία προσθέτουν αξία και πότε δεν είναι απαραίτητα:
-
+
-*Γρήγορος οδηγός απόφασης — τα εργαλεία είναι για δεδομένα σε πραγματικό χρόνο, υπολογισμούς και δράσεις· οι γενικές γνώσεις και οι δημιουργικές εργασίες δεν τα χρειάζονται.*
+*Ένας γρήγορος οδηγός απόφασης — τα εργαλεία είναι για δεδομένα σε πραγματικό χρόνο, υπολογισμούς και ενέργειες· η γενική γνώση και δημιουργικές εργασίες δεν τα χρειάζονται.*
## Εργαλεία vs RAG
-Τα modules 03 και 04 επεκτείνουν την ικανότητα της AI με διαφορετικούς τρόπους. Το RAG δίνει στο μοντέλο πρόσβαση σε **γνώση** ανακτώντας έγγραφα. Τα Εργαλεία δίνουν στο μοντέλο την ικανότητα να αναλαμβάνει **δράσεις** καλώντας λειτουργίες. Το παρακάτω διάγραμμα συγκρίνει τις δύο προσεγγίσεις πλευρά προς πλευρά — από τον τρόπο λειτουργίας κάθε ροής εργασίας μέχρι τα ανταλλάγματα μεταξύ τους:
+Οι μονάδες 03 και 04 επεκτείνουν ό,τι μπορεί να κάνει ο AI, αλλά με θεμελιωδώς διαφορετικούς τρόπους. Το RAG δίνει στο μοντέλο πρόσβαση σε **γνώση** ανακτώντας έγγραφα. Τα εργαλεία δίνουν στο μοντέλο τη δυνατότητα να κάνει **ενέργειες** καλώντας λειτουργίες. Το παρακάτω διάγραμμα συγκρίνει αυτές τις δύο προσεγγίσεις παράλληλα — από τον τρόπο λειτουργίας της κάθε ροής εργασίας μέχρι τα ανταλλάγματα μεταξύ τους:
-
+
-*Το RAG ανακτά πληροφορίες από στατικά έγγραφα — τα Εργαλεία εκτελούν ενέργειες και φέρνουν δυναμικά, ζωντανά δεδομένα. Πολλά συστήματα παραγωγής συνδυάζουν και τα δύο.*
+*Το RAG ανακτά πληροφορίες από στατικά έγγραφα — τα Εργαλεία εκτελούν ενέργειες και φέρνουν δυναμικά, ζωντανά δεδομένα. Πολλά παραγωγικά συστήματα συνδυάζουν και τα δύο.*
-Στην πράξη, πολλά συστήματα παραγωγής συνδυάζουν τις δύο προσεγγίσεις: RAG για θεμελίωση απαντήσεων στην τεκμηρίωσή σας και Εργαλεία για άντληση ζωντανών δεδομένων ή εκτέλεση λειτουργιών.
+Στην πράξη, πολλά παραγωγικά συστήματα συνδυάζουν και τις δύο προσεγγίσεις: RAG για να στηρίξουν απαντήσεις στην τεκμηρίωσή σας, και Εργαλεία για να φέρνουν ζωντανά δεδομένα ή να εκτελούν λειτουργίες.
## Επόμενα Βήματα
-**Επόμενο Module:** [05-mcp - Πρωτόκολλο Πλαισίου Μοντέλου (MCP)](../05-mcp/README.md)
+**Επόμενη Μονάδα:** [05-mcp - Πρωτόκολλο Συμφραζόμενου Μοντέλου (MCP)](../05-mcp/README.md)
---
-**Πλοήγηση:** [← Προηγούμενο: Module 03 - RAG](../03-rag/README.md) | [Επιστροφή στην Αρχική](../README.md) | [Επόμενο: Module 05 - MCP →](../05-mcp/README.md)
+**Πλοήγηση:** [← Προηγούμενο: Μονάδα 03 - RAG](../03-rag/README.md) | [Πίσω στην Αρχική](../README.md) | [Επόμενο: Μονάδα 05 - MCP →](../05-mcp/README.md)
---
-**Αποποίηση ευθυνών**:
-Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που επιδιώκουμε την ακρίβεια, παρακαλούμε να λάβετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα του θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες συνιστάται επαγγελματική μετάφραση από ανθρώπους. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
+**Αποποίηση ευθυνών**:
+Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
\ No newline at end of file
diff --git a/translations/el/README.md b/translations/el/README.md
index b92cd3855..6ac972525 100644
--- a/translations/el/README.md
+++ b/translations/el/README.md
@@ -6,14 +6,14 @@
### 🌐 Υποστήριξη Πολλών Γλωσσών
-#### Υποστηρίζεται μέσω GitHub Action (Αυτοματοποιημένα & Πάντα Ενημερωμένο)
+#### Υποστηρίζεται μέσω GitHub Action (Αυτόματη & Πάντα Ενημερωμένη)
[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](./README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
-> **Προτιμάτε να κάνετε κλωνοποίηση τοπικά;**
+> **Προτιμάτε τοπική κλωνοποίηση;**
>
-> Αυτό το αποθετήριο περιλαμβάνει πάνω από 50 μεταφράσεις γλωσσών που αυξάνουν σημαντικά το μέγεθος λήψης. Για να κλωνοποιήσετε χωρίς μεταφράσεις, χρησιμοποιήστε sparse checkout:
+> Αποθετήριο περιλαμβάνει πάνω από 50 μεταφράσεις γλωσσών που αυξάνουν σημαντικά το μέγεθος λήψης. Για κλωνοποίηση χωρίς μεταφράσεις, χρησιμοποιήστε sparse checkout:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -34,55 +34,56 @@
## Πίνακας Περιεχομένων
-1. [Γρήγορη Εκκίνηση](00-quick-start/README.md) - Ξεκινήστε με το LangChain4j
-2. [Εισαγωγή](01-introduction/README.md) - Μάθετε τα βασικά του LangChain4j
-3. [Σχεδιασμός Εντολών (Prompt Engineering)](02-prompt-engineering/README.md) - Κατακτήστε τον αποτελεσματικό σχεδιασμό εντολών
-4. [RAG (Αναγεννημένη Παραγωγή μέσω Ανάκτησης)](03-rag/README.md) - Δημιουργήστε έξυπνα συστήματα βάσει γνώσης
-5. [Εργαλεία](04-tools/README.md) - Ενσωματώστε εξωτερικά εργαλεία και απλούς βοηθούς
-6. [MCP (Πρωτόκολλο Πλαισίου Μοντέλου)](05-mcp/README.md) - Εργαστείτε με το Πρωτόκολλο Πλαισίου Μοντέλου (MCP) και μονάδες Agentic
+1. [Εισαγωγή](01-introduction/README.md) - Μάθετε τα βασικά του LangChain4j
+2. [Μηχανική Προτροπών](02-prompt-engineering/README.md) - Κατακτήστε τον αποτελεσματικό σχεδιασμό προτροπών
+3. [RAG (Γεννήτρια Αναζήτησης)](03-rag/README.md) - Δημιουργήστε ευφυή συστήματα γνώσης
+4. [Εργαλεία](04-tools/README.md) - Ενσωματώστε εξωτερικά εργαλεία και απλούς βοηθούς
+5. [MCP (Πρωτόκολλο Πλαισίου Μοντέλου)](05-mcp/README.md) - Εργαστείτε με το Πρωτόκολλο Πλαισίου Μοντέλου (MCP) και τα μονάδα Πρακτόρων
-### Βίντεο Οδηγίες
+### Βίντεο Καθοδήγησης
-Κάθε ενότητα έχει μια συνοδευτική ζωντανή συνεδρία όπου περνάμε βήμα-βήμα τις έννοιες και τον κώδικα.
+Κάθε ενότητα έχει μια συνοδευτική ζωντανή συνεδρία όπου περιηγούμαστε βήμα προς βήμα τις έννοιες και τον κώδικα.
| Ενότητα | Βίντεο |
|--------|-------|
| 01 - Εισαγωγή | [Ξεκινώντας με το LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
-| 02 - Σχεδιασμός Εντολών | [Σχεδιασμός Εντολών με LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
+| 02 - Μηχανική Προτροπών | [Μηχανική Προτροπών με LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
| 03 - RAG | [RAG με LangChain4j](https://www.youtube.com/watch?v=_olq75ZH_eY) |
| 04 - Εργαλεία & 05 - MCP | [Πράκτορες AI με Εργαλεία και MCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
---
-## Μονοπάτι Μάθησης
+## Μαθησιακή Διαδρομή
-**Νέος στο LangChain4j;** Ρίξτε μια ματιά στο [Γλωσσάρι](docs/GLOSSARY.md) για ορισμούς βασικών όρων και εννοιών.
+**Νέος στο LangChain4j;** Δείτε το [Λεξιλόγιο](docs/GLOSSARY.md) για ορισμούς βασικών όρων και εννοιών.
> **Γρήγορη Εκκίνηση**
-1. Κάντε fork αυτό το αποθετήριο στο λογαριασμό GitHub σας
-2. Επιλέξτε **Code** → καρτέλα **Codespaces** → **...** → **Νέο με επιλογές...**
-3. Χρησιμοποιήστε τις προεπιλογές – αυτό θα επιλέξει το container ανάπτυξης που δημιουργήθηκε για αυτό το μάθημα
-4. Κάντε κλικ στο **Create codespace**
-5. Περιμένετε 5-10 λεπτά για να είναι έτοιμο το περιβάλλον
-6. Πηδήξτε απευθείας στο [Γρήγορη Εκκίνηση](./00-quick-start/README.md) για να ξεκινήσετε!
+1. Κάντε fork αυτό το αποθετήριο στον λογαριασμό σας στο GitHub
+2. Κάντε κλικ **Code** → καρτέλα **Codespaces** → **...** → **Νέο με επιλογές...**
+3. Χρησιμοποιήστε τις προεπιλογές – αυτό θα επιλέξει το Development container που δημιουργήθηκε για αυτό το μάθημα
+4. Κάντε κλικ **Δημιουργία codespace**
+5. Περιμένετε 5-10 λεπτά για να ετοιμαστεί το περιβάλλον
+6. Μεταβείτε κατευθείαν στην [Εισαγωγή](./01-introduction/README.md) για να ξεκινήσετε!
-Μετά την ολοκλήρωση των ενοτήτων, εξερευνήστε τον [Οδηγό Δοκιμών](docs/TESTING.md) για να δείτε τις έννοιες δοκιμών του LangChain4j σε δράση.
+Μετά την ολοκλήρωση των ενοτήτων, εξερευνήστε τον [Οδηγό Δοκιμών](docs/TESTING.md) για να δείτε τις έννοιες δοκιμών LangChain4j εν δράσει.
-> **Σημείωση:** Αυτή η εκπαίδευση χρησιμοποιεί τόσο τα GitHub Models όσο και Azure OpenAI. Η ενότητα [Γρήγορη Εκκίνηση](00-quick-start/README.md) χρησιμοποιεί GitHub Models (δεν απαιτείται συνδρομή Azure), ενώ οι ενότητες 1-5 χρησιμοποιούν Azure OpenAI. Ξεκινήστε με έναν [ΔΩΡΕΑΝ λογαριασμό Azure](https://aka.ms/azure-free-account) αν δεν έχετε.
+> **Σημείωση:** Αυτή η εκπαίδευση χρησιμοποιεί Azure OpenAI. Ξεκινήστε με έναν [ΔΩΡΕΑΝ λογαριασμό Azure](https://aka.ms/azure-free-account) αν δεν έχετε ήδη.
-## Μάθηση με το GitHub Copilot
-Για να ξεκινήσετε γρήγορα την κωδικοποίηση, ανοίξτε αυτό το έργο σε έναν GitHub Codespace ή στο τοπικό IDE σας με το παρεχόμενο devcontainer. Το devcontainer που χρησιμοποιείται σε αυτό το μάθημα είναι προεγκατεστημένο με GitHub Copilot για προγραμματισμό σε ζευγάρι με AI.
+## Μάθηση με GitHub Copilot
-Κάθε παράδειγμα κώδικα περιλαμβάνει προτεινόμενες ερωτήσεις που μπορείτε να ρωτήσετε το GitHub Copilot για να εμβαθύνετε την κατανόησή σας. Ψάξτε για τις υποδείξεις 💡/🤖 στα:
+Για να ξεκινήσετε γρήγορα τον προγραμματισμό, ανοίξτε αυτό το έργο σε GitHub Codespace ή στον τοπικό IDE σας με το παρεχόμενο devcontainer. Το devcontainer που χρησιμοποιείται σε αυτό το μάθημα έρχεται προ-διαμορφωμένο με GitHub Copilot για προγραμματισμό AI σε ζευγάρι.
-- **Κεφαλίδες αρχείων Java** – Ερωτήσεις συγκεκριμένες για κάθε παράδειγμα
-- **README των ενοτήτων** – Εξερευνητικά ερωτήματα μετά τα παραδείγματα κώδικα
+Κάθε παράδειγμα κώδικα περιλαμβάνει προτεινόμενες ερωτήσεις που μπορείτε να κάνετε στον GitHub Copilot για να εμβαθύνετε την κατανόησή σας. Αναζητήστε τα εικονίδια 💡/🤖 στα:
-**Πώς να χρησιμοποιήσετε:** Ανοίξτε οποιοδήποτε αρχείο κώδικα και ρωτήστε το Copilot τις προτεινόμενες ερωτήσεις. Έχει πλήρες πλαίσιο του κώδικα και μπορεί να εξηγεί, να επεκτείνει και να προτείνει εναλλακτικές.
+- **Κεφαλίδες αρχείων Java** - Ερωτήσεις ειδικές για κάθε παράδειγμα
+- **README των ενοτήτων** - Εξερευνητικές προτροπές μετά από παραδείγματα κώδικα
+
+**Πώς να χρησιμοποιήσετε:** Ανοίξτε οποιοδήποτε αρχείο κώδικα και κάντε στον Copilot τις προτεινόμενες ερωτήσεις. Διαθέτει πλήρες πλαίσιο για τον κώδικα και μπορεί να εξηγήσει, να επεκτείνει και να προτείνει εναλλακτικές λύσεις.
+
+Θέλετε να μάθετε περισσότερα; Δείτε το [Copilot για προγραμματισμό AI σε ζευγάρι](https://aka.ms/GitHubCopilotAI).
-Θέλετε να μάθετε περισσότερα; Δείτε το [Copilot για Προγραμματισμό AI σε Ζεύγη](https://aka.ms/GitHubCopilotAI).
## Πρόσθετοι Πόροι
@@ -102,18 +103,18 @@
---
### Σειρά Γενετικής Τεχνητής Νοημοσύνης
-[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
-[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
-[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
-[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
+[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
+[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
+[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
---
### Βασική Μάθηση
-[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
+[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
@@ -121,14 +122,14 @@
---
### Σειρά Copilot
-[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
## Λήψη Βοήθειας
-Εάν κολλήσετε ή έχετε οποιεσδήποτε ερωτήσεις σχετικά με τη δημιουργία εφαρμογών AI, συμμετάσχετε:
+Εάν κολλήσετε ή έχετε ερωτήσεις σχετικά με την ανάπτυξη εφαρμογών AI, εγγραφείτε:
[](https://aka.ms/foundry/discord)
@@ -143,6 +144,6 @@
---
-**Αποποίηση ευθύνης**:
-Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που επιδιώκουμε ακρίβεια, παρακαλούμε να γνωρίζετε ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στην μητρική του γλώσσα πρέπει να θεωρείται η έγκυρη πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για οποιεσδήποτε παρεξηγήσεις ή λανθασμένες ερμηνείες προκύψουν από τη χρήση αυτής της μετάφρασης.
+**Αποποίηση ευθυνών**:
+Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
\ No newline at end of file
diff --git a/translations/el/docs/GLOSSARY.md b/translations/el/docs/GLOSSARY.md
index 1130c6463..91f50e0cc 100644
--- a/translations/el/docs/GLOSSARY.md
+++ b/translations/el/docs/GLOSSARY.md
@@ -1,58 +1,58 @@
-# Ορολογικός Λεξιλόγος LangChain4j
+# Λεξικό LangChain4j
## Περιεχόμενα
-- [Βασικές Έννοιες](../../../docs)
-- [Συστατικά LangChain4j](../../../docs)
-- [Έννοιες AI/ML](../../../docs)
-- [Φράγματα Ασφαλείας](../../../docs)
-- [Μηχανική Προτροπής](../../../docs)
-- [RAG (Ανάκτηση-Ενισχυμένη Γενιά)](../../../docs)
-- [Πράκτορες και Εργαλεία](../../../docs)
-- [Agentic Module](../../../docs)
-- [Πρωτόκολλο Πλαισίου Μοντέλου (MCP)](../../../docs)
-- [Υπηρεσίες Azure](../../../docs)
-- [Δοκιμές και Ανάπτυξη](../../../docs)
+- [Βασικές Έννοιες](#βασικές-έννοιες)
+- [Συστατικά LangChain4j](#συστατικά-langchain4j)
+- [Έννοιες AI/ML](#έννοιες-aiml)
+- [Προστατευτικά Μέτρα](#προστατευτικά-μέτρα)
+- [Σχεδίαση Προτροπών](#prompt-engineering---module-02)
+- [RAG (Ανάκτηση-Ενισχυμένη Γενιά)](#rag-retrieval-augmented-generation---module-03)
+- [Πράκτορες και Εργαλεία](#agents-and-tools---module-04)
+- [Agentic Module](#agentic-module---module-05)
+- [Πρωτόκολλο Πλαισίου Μοντέλου (MCP)](#model-context-protocol-mcp---module-05)
+- [Υπηρεσίες Azure](#azure-services---module-01)
+- [Δοκιμές και Ανάπτυξη](#testing-and-development---testing-guide)
-Γρήγορη αναφορά για όρους και έννοιες που χρησιμοποιούνται σε όλο το μάθημα.
+Γρήγορη αναφορά για όρους και έννοιες που χρησιμοποιούνται καθ’ όλη τη διάρκεια του μαθήματος.
## Βασικές Έννοιες
-**AI Agent** - Σύστημα που χρησιμοποιεί AI για να συλλογιστεί και να ενεργεί αυτόνομα. [Module 04](../04-tools/README.md)
+**AI Agent** - Σύστημα που χρησιμοποιεί ΤΝ για να συλλογιστεί και να δράσει αυτόνομα. [Module 04](../04-tools/README.md)
**Chain** - Ακολουθία λειτουργιών όπου η έξοδος τροφοδοτεί το επόμενο βήμα.
-**Chunking** - Διαχωρισμός εγγράφων σε μικρότερα κομμάτια. Τυπικά: 300-500 tokens με επικάλυψη. [Module 03](../03-rag/README.md)
+**Chunking** - Διαχωρισμός εγγράφων σε μικρότερα τμήματα. Τυπικά: 300-500 tokens με επικάλυψη. [Module 03](../03-rag/README.md)
-**Context Window** - Μέγιστος αριθμός tokens που μπορεί να επεξεργαστεί ένα μοντέλο. GPT-5.2: 400K tokens (έως 272K εισόδου, 128K εξόδου).
+**Context Window** - Μέγιστος αριθμός token που ένα μοντέλο μπορεί να επεξεργαστεί. GPT-5.2: 400Κ tokens (έως 272Κ εισόδου, 128Κ εξόδου).
-**Embeddings** - Αριθμητικοί διανύσματα που αντιπροσωπεύουν το νόημα του κειμένου. [Module 03](../03-rag/README.md)
+**Embeddings** - Αριθμητικοί διανύσματα που αναπαριστούν το νόημα του κειμένου. [Module 03](../03-rag/README.md)
-**Function Calling** - Το μοντέλο δημιουργεί δομημένα αιτήματα για κλήση εξωτερικών λειτουργιών. [Module 04](../04-tools/README.md)
+**Function Calling** - Το μοντέλο δημιουργεί δομημένα αιτήματα για κλήση εξωτερικών συναρτήσεων. [Module 04](../04-tools/README.md)
**Hallucination** - Όταν τα μοντέλα παράγουν λανθασμένες αλλά πιθανές πληροφορίες.
-**Prompt** - Είσοδος κειμένου σε γλωσσικό μοντέλο. [Module 02](../02-prompt-engineering/README.md)
+**Prompt** - Κείμενο εισόδου σε ένα γλωσσικό μοντέλο. [Module 02](../02-prompt-engineering/README.md)
**Semantic Search** - Αναζήτηση με βάση το νόημα χρησιμοποιώντας embeddings, όχι λέξεις-κλειδιά. [Module 03](../03-rag/README.md)
-**Stateful vs Stateless** - Stateless: χωρίς μνήμη. Stateful: διατηρεί το ιστορικό συνομιλίας. [Module 01](../01-introduction/README.md)
+**Stateful vs Stateless** - Stateless: χωρίς μνήμη. Stateful: διατηρεί ιστορικό συνομιλίας. [Module 01](../01-introduction/README.md)
-**Tokens** - Βασικές μονάδες κειμένου που επεξεργάζονται τα μοντέλα. Επηρεάζουν κόστη και περιορισμούς. [Module 01](../01-introduction/README.md)
+**Tokens** - Βασικές μονάδες κειμένου που τα μοντέλα επεξεργάζονται. Επηρεάζουν κόστος και όρια. [Module 01](../01-introduction/README.md)
-**Tool Chaining** - Διαδοχική εκτέλεση εργαλείων όπου η έξοδος πληροφορεί την επόμενη κλήση. [Module 04](../04-tools/README.md)
+**Tool Chaining** - Αλληλουχία εκτέλεσης εργαλείων όπου η έξοδος ενημερώνει την επόμενη κλήση. [Module 04](../04-tools/README.md)
## Συστατικά LangChain4j
-**AiServices** - Δημιουργεί τύπου ασφαλή interfaces για AI υπηρεσίες.
+**AiServices** - Δημιουργεί τύπος-ασφαλείς διεπαφές υπηρεσιών ΤΝ.
**OpenAiOfficialChatModel** - Ενοποιημένος πελάτης για μοντέλα OpenAI και Azure OpenAI.
-**OpenAiOfficialEmbeddingModel** - Δημιουργεί embeddings χρησιμοποιώντας τον επίσημο πελάτη OpenAI (υποστηρίζει και OpenAI και Azure OpenAI).
+**OpenAiOfficialEmbeddingModel** - Δημιουργεί embeddings χρησιμοποιώντας τον επίσημο πελάτη OpenAI (υποστηρίζει OpenAI και Azure OpenAI).
-**ChatModel** - Βασικό interface για γλωσσικά μοντέλα.
+**ChatModel** - Βασική διεπαφή για γλωσσικά μοντέλα.
-**ChatMemory** - Διατηρεί το ιστορικό συνομιλίας.
+**ChatMemory** - Διατηρεί ιστορικό συνομιλίας.
**ContentRetriever** - Βρίσκει σχετικά κομμάτια εγγράφων για RAG.
@@ -62,171 +62,169 @@
**EmbeddingStore** - Αποθηκεύει και ανακτά embeddings.
-**MessageWindowChatMemory** - Διατηρεί παράθυρο ολίσθησης με πρόσφατα μηνύματα.
+**MessageWindowChatMemory** - Διατηρεί κυλιόμενο παράθυρο πρόσφατων μηνυμάτων.
-**PromptTemplate** - Δημιουργεί επαναχρησιμοποιήσιμες προτροπές με θέσεις `{{variable}}`.
+**PromptTemplate** - Δημιουργεί επαναχρησιμοποιήσιμες προτροπές με placeholders `{{variable}}`.
-**TextSegment** - Κομμάτι κειμένου με μεταδεδομένα. Χρησιμοποιείται σε RAG.
+**TextSegment** - Τμήμα κειμένου με μεταδεδομένα. Χρησιμοποιείται στο RAG.
-**ToolExecutionRequest** - Αντιπροσωπεύει αίτημα εκτέλεσης εργαλείου.
+**ToolExecutionRequest** - Αναπαριστά αίτημα εκτέλεσης εργαλείου.
**UserMessage / AiMessage / SystemMessage** - Τύποι μηνυμάτων συνομιλίας.
## Έννοιες AI/ML
-**Few-Shot Learning** - Παροχή παραδειγμάτων στις προτροπές. [Module 02](../02-prompt-engineering/README.md)
+**Few-Shot Learning** - Παροχή παραδειγμάτων σε προτροπές. [Module 02](../02-prompt-engineering/README.md)
-**Large Language Model (LLM)** - Μοντέλα AI εκπαιδευμένα σε τεράστιες ποσότητες κειμένου.
+**Large Language Model (LLM)** - Μοντέλα ΤΝ εκπαιδευμένα σε τεράστιο όγκο κειμένων.
-**Reasoning Effort** - Παράμετρος GPT-5.2 που ελέγχει το βάθος της σκέψης. [Module 02](../02-prompt-engineering/README.md)
+**Reasoning Effort** - Παράμετρος GPT-5.2 που ελέγχει το βάθος σκέψης. [Module 02](../02-prompt-engineering/README.md)
-**Temperature** - Ελέγχει την τυχαιότητα στην έξοδο. Χαμηλό=ντετερμινιστικό, υψηλό=δημιουργικό.
+**Temperature** - Ελέγχει το βαθμό τυχαιότητας της εξόδου. Χαμηλό=ντετερμινιστικό, υψηλό=δημιουργικό.
**Vector Database** - Εξειδικευμένη βάση δεδομένων για embeddings. [Module 03](../03-rag/README.md)
**Zero-Shot Learning** - Εκτέλεση εργασιών χωρίς παραδείγματα. [Module 02](../02-prompt-engineering/README.md)
-## Φράγματα Ασφαλείας - [Module 00](../00-quick-start/README.md)
+## Προστατευτικά Μέτρα
-**Defense in Depth** - Πολλαπλό επίπεδο ασφαλείας που συνδυάζει φράγματα στο επίπεδο εφαρμογής με φίλτρα ασφαλείας παρόχου.
+**Defense in Depth** - Πολυεπίπεδη προσέγγιση ασφάλειας που συνδυάζει προστατευτικά σε επίπεδο εφαρμογής με φίλτρα ασφαλείας του παρόχου.
**Hard Block** - Ο πάροχος επιστρέφει σφάλμα HTTP 400 για σοβαρές παραβιάσεις περιεχομένου.
-**InputGuardrail** - Interface LangChain4j για επικύρωση εισόδου χρήστη πριν φτάσει στο LLM. Εξοικονομεί κόστος και καθυστέρηση μπλοκάροντας επιβλαβείς προτροπές νωρίς.
+**InputGuardrail** - Διεπαφή LangChain4j για επικύρωση εισόδου χρήστη πριν φτάσει στο LLM. Εξοικονομεί κόστος και καθυστέρηση εμποδίζοντας επιβλαβείς προτροπές νωρίς.
-**InputGuardrailResult** - Τύπος επιστροφής για επικύρωση φράγματος: `success()` ή `fatal("reason")`.
+**InputGuardrailResult** - Τύπος επιστροφής για επικύρωση guardrail: `success()` ή `fatal("reason")`.
-**OutputGuardrail** - Interface για επικύρωση απαντήσεων AI πριν επιστραφούν στους χρήστες.
+**OutputGuardrail** - Διεπαφή για επικύρωση απαντήσεων ΤΝ πριν επιστραφούν στον χρήστη.
-**Provider Safety Filters** - Ενσωματωμένα φίλτρα περιεχομένου από παρόχους AI (π.χ. GitHub Models) που ανιχνεύουν παραβιάσεις στο επίπεδο API.
+**Provider Safety Filters** - Ενσωματωμένα φίλτρα περιεχομένου από παρόχους ΤΝ (π.χ. Azure OpenAI) που ανιχνεύουν παραβάσεις σε επίπεδο API.
-**Soft Refusal** - Το μοντέλο αρνείται κόσμια να απαντήσει χωρίς να επιστρέψει σφάλμα.
+**Soft Refusal** - Το μοντέλο αρνείται ευγενικά να απαντήσει χωρίς να επιστρέφει σφάλμα.
-## Μηχανική Προτροπής - [Module 02](../02-prompt-engineering/README.md)
+## Σχεδίαση Προτροπών - [Module 02](../02-prompt-engineering/README.md)
-**Chain-of-Thought** - Σταδιακή επιχειρηματολογία για καλύτερη ακρίβεια.
+**Chain-of-Thought** - Βήμα-βήμα συλλογιστική για καλύτερη ακρίβεια.
-**Constrained Output** - Επιβολή συγκεκριμένης μορφής ή δομής.
+**Constrained Output** - Εφαρμογή συγκεκριμένης μορφής ή δομής.
-**High Eagerness** - Πρότυπο GPT-5.2 για σχολαστική συλλογιστική.
+**High Eagerness** - Πρότυπο GPT-5.2 για προσεκτική συλλογιστική.
**Low Eagerness** - Πρότυπο GPT-5.2 για γρήγορες απαντήσεις.
-**Multi-Turn Conversation** - Διατήρηση πλαισίου σε πολλαπλές ανταλλαγές.
+**Multi-Turn Conversation** - Διατήρηση πλαισίου κατά τη διάρκεια πολλαπλών ανταλλαγών.
-**Role-Based Prompting** - Ορισμός χαρακτήρα μοντέλου μέσω συστημικών μηνυμάτων.
+**Role-Based Prompting** - Ορισμός προσωπικότητας μοντέλου μέσω συστημικών μηνυμάτων.
-**Self-Reflection** - Το μοντέλο αξιολογεί και βελτιώνει την έξοδο του.
+**Self-Reflection** - Το μοντέλο αξιολογεί και βελτιώνει το αποτέλεσμα του.
**Structured Analysis** - Σταθερό πλαίσιο αξιολόγησης.
-**Task Execution Pattern** - Σχεδίαση → Εκτέλεση → Περίληψη.
+**Task Execution Pattern** - Σχεδιάζει → Εκτελεί → Συνοψίζει.
## RAG (Ανάκτηση-Ενισχυμένη Γενιά) - [Module 03](../03-rag/README.md)
**Document Processing Pipeline** - Φόρτωση → διαχωρισμός → ενσωμάτωση → αποθήκευση.
-**In-Memory Embedding Store** - Μη επίμονος αποθηκευτικός χώρος για δοκιμές.
+**In-Memory Embedding Store** - Μη μόνιμη αποθήκευση για δοκιμές.
-**RAG** - Συνδυάζει ανάκτηση με παραγωγή για εδραίωση απαντήσεων.
+**RAG** - Συνδυάζει ανάκτηση με γενιά για τεκμηρίωση απαντήσεων.
-**Similarity Score** - Μέτρο (0-1) σημασιολογικής ομοιότητας.
+**Similarity Score** - Μέτρηση (0-1) σημασιολογικής ομοιότητας.
-**Source Reference** - Μεταδεδομένα για ανακτημένο περιεχόμενο.
+**Source Reference** - Μεταδεδομένα για το ανακτηθέν περιεχόμενο.
## Πράκτορες και Εργαλεία - [Module 04](../04-tools/README.md)
-**@Tool Annotation** - Σημειώνει μεθόδους Java ως εργαλεία προσβάσιμα από AI.
+**@Tool Annotation** - Σημαδεύει μεθόδους Java ως εργαλεία κλήσιμα από ΤΝ.
-**ReAct Pattern** - Συλλογισμός → Δράση → Παρατήρηση → Επανάληψη.
+**ReAct Pattern** - Σκέψη → Δράση → Παρατήρηση → Επανάληψη.
**Session Management** - Ξεχωριστά πλαίσια για διαφορετικούς χρήστες.
-**Tool** - Συνάρτηση που μπορεί να καλέσει ένας AI πράκτορας.
+**Tool** - Συνάρτηση που μπορεί να καλέσει ένας πράκτορας ΤΝ.
**Tool Description** - Τεκμηρίωση σκοπού και παραμέτρων εργαλείου.
## Agentic Module - [Module 05](../05-mcp/README.md)
-**@Agent Annotation** - Σημειώνει interfaces ως AI πράκτορες με δηλωτικό ορισμό συμπεριφοράς.
+**@Agent Annotation** - Σηματοδοτεί διεπαφές ως πράκτορες ΤΝ με δηλωτικό ορισμό συμπεριφοράς.
-**Agent Listener** - Hook για παρακολούθηση εκτέλεσης πράκτορα μέσω `beforeAgentInvocation()` και `afterAgentInvocation()`.
+**Agent Listener** - Γάντζος για παρακολούθηση εκτέλεσης πράκτορα μέσω `beforeAgentInvocation()` και `afterAgentInvocation()`.
-**Agentic Scope** - Κοινή μνήμη όπου οι πράκτορες αποθηκεύουν εξόδους χρησιμοποιώντας `outputKey` για κατανάλωση από κατωτέρους πράκτορες.
+**Agentic Scope** - Κοινόχρηστη μνήμη όπου οι πράκτορες αποθηκεύουν αποτελέσματα με `outputKey` για να τα χρησιμοποιήσουν επόμενοι πράκτορες.
**AgenticServices** - Εργοστάσιο δημιουργίας πρακτόρων με `agentBuilder()` και `supervisorBuilder()`.
-**Conditional Workflow** - Διαδρομή βάσει συνθηκών προς διαφορετικούς ειδικούς πράκτορες.
+**Conditional Workflow** - Διαδρομή βάσει συνθηκών σε διαφορετικούς ειδικούς πράκτορες.
-**Human-in-the-Loop** - Μοτίβο ροής εργασίας με ανθρώπινους ελέγχους για έγκριση ή ανασκόπηση περιεχομένου.
+**Human-in-the-Loop** - Πρότυπο ροής εργασίας με ανθρώπινους σταθμούς ελέγχου για έγκριση ή αναθεώρηση περιεχομένου.
-**langchain4j-agentic** - Εξάρτηση Maven για δηλωτική κατασκευή πρακτόρων (πειραματικό).
+**langchain4j-agentic** - Εξάρτηση Maven για δηλωτική δημιουργία πρακτόρων (πειραματική).
-**Loop Workflow** - Επανάληψη εκτέλεσης πράκτορα μέχρι να πληρωθεί συνθήκη (π.χ. βαθμολογία ποιότητας ≥ 0.8).
+**Loop Workflow** - Επανάληψη εκτέλεσης πράκτορα μέχρι να πληρωθεί συνθήκη (π.χ. σκορ ποιότητας ≥ 0.8).
-**outputKey** - Παράμετρος annotation πράκτορα που καθορίζει πού αποθηκεύονται τα αποτελέσματα στο Agentic Scope.
+**outputKey** - Παράμετρος σχολιασμού πράκτορα που καθορίζει πού αποθηκεύονται τα αποτελέσματα στο Agentic Scope.
**Parallel Workflow** - Εκτέλεση πολλαπλών πρακτόρων ταυτόχρονα για ανεξάρτητες εργασίες.
**Response Strategy** - Πώς ο επιβλέπων διαμορφώνει την τελική απάντηση: LAST, SUMMARY ή SCORED.
-**Sequential Workflow** - Εκτέλεση πρακτόρων με σειρά όπου η έξοδος διοχετεύεται στο επόμενο βήμα.
+**Sequential Workflow** - Εκτέλεση πρακτόρων με σειρά όπου η έξοδος ρέει στο επόμενο βήμα.
-**Supervisor Agent Pattern** - Προχωρημένο μοτίβο agentic όπου ένας επιβλέπων LLM αποφασίζει δυναμικά ποιον υποπράκτορα να καλέσει.
+**Supervisor Agent Pattern** - Προχωρημένο agentic πρότυπο όπου ένας επιβλέπων LLM αποφασίζει δυναμικά ποιους υπο-πράκτορες να καλέσει.
## Πρωτόκολλο Πλαισίου Μοντέλου (MCP) - [Module 05](../05-mcp/README.md)
**langchain4j-mcp** - Εξάρτηση Maven για ενσωμάτωση MCP στο LangChain4j.
-**MCP** - Πρωτόκολλο Πλαισίου Μοντέλου: πρότυπο για σύνδεση εφαρμογών AI με εξωτερικά εργαλεία. Φτιάξτε μια φορά, χρησιμοποιήστε παντού.
+**MCP** - Πρωτόκολλο Πλαισίου Μοντέλου: πρότυπο για σύνδεση εφαρμογών ΤΝ με εξωτερικά εργαλεία. Φτιάχνεις μία φορά, χρησιμοποιείς παντού.
-**MCP Client** - Εφαρμογή που συνδέεται με MCP servers για ανακάλυψη και χρήση εργαλείων.
+**MCP Client** - Εφαρμογή που συνδέεται με διακομιστές MCP για ανακάλυψη και χρήση εργαλείων.
**MCP Server** - Υπηρεσία που εκθέτει εργαλεία μέσω MCP με σαφείς περιγραφές και σχήματα παραμέτρων.
-**McpToolProvider** - Συστατικό LangChain4j που περιτυλίγει εργαλεία MCP για χρήση σε AI υπηρεσίες και πράκτορες.
+**McpToolProvider** - Συστατικό LangChain4j που υλοποιεί MCP εργαλεία για χρήση σε υπηρεσίες ΤΝ και πράκτορες.
-**McpTransport** - Interface για επικοινωνία MCP. Υλοποιήσεις περιλαμβάνουν Stdio και HTTP.
+**McpTransport** - Διεπαφή για επικοινωνία MCP. Υλοποιήσεις περιλαμβάνουν Stdio και HTTP.
-**Stdio Transport** - Τοπική μεταφορά διεργασίας μέσω stdin/stdout. Χρήσιμο για πρόσβαση σε σύστημα αρχείων ή εργαλεία γραμμής εντολών.
+**Stdio Transport** - Τοπικός μεταφορέας διαδικασιών μέσω stdin/stdout. Χρήσιμος για πρόσβαση σε σύστημα αρχείων ή εργαλεία γραμμής εντολών.
-**StdioMcpTransport** - Υλοποίηση LangChain4j που δημιουργεί MCP server ως subprocess.
+**StdioMcpTransport** - Υλοποίηση LangChain4j που εκκινεί MCP server ως υποδιαδικασία.
-**Tool Discovery** - Ο πελάτης ρωτά τον server για διαθέσιμα εργαλεία με περιγραφές και σχήματα.
+**Tool Discovery** - Ο πελάτης ζητά από το διακομιστή διαθέσιμα εργαλεία με περιγραφές και σχήματα.
## Υπηρεσίες Azure - [Module 01](../01-introduction/README.md)
-**Azure AI Search** - Νέφος αναζήτησης με δυνατότητες vector. [Module 03](../03-rag/README.md)
+**Azure AI Search** - Cloud αναζήτηση με δυνατότητες διανυσμάτων. [Module 03](../03-rag/README.md)
-**Azure Developer CLI (azd)** - Αναπτύσσει πόρους Azure.
+**Azure Developer CLI (azd)** - Ανάπτυξη πόρων Azure.
-**Azure OpenAI** - Επιχειρησιακή υπηρεσία AI της Microsoft.
+**Azure OpenAI** - Επιχειρησιακή υπηρεσία ΤΝ της Microsoft.
-**Bicep** - Γλώσσα υποδομής ως κώδικας στο Azure. [Infrastructure Guide](../01-introduction/infra/README.md)
+**Bicep** - Γλώσσα υποδομής ως κώδικας Azure. [Infrastructure Guide](../01-introduction/infra/README.md)
**Deployment Name** - Όνομα ανάπτυξης μοντέλου στο Azure.
-**GPT-5.2** - Τελευταίο μοντέλο OpenAI με έλεγχο συλλογισμού. [Module 02](../02-prompt-engineering/README.md)
+**GPT-5.2** - Τελευταίο μοντέλο OpenAI με έλεγχο συλλογιστικής. [Module 02](../02-prompt-engineering/README.md)
## Δοκιμές και Ανάπτυξη - [Testing Guide](TESTING.md)
-**Dev Container** - Περιβάλλον ανάπτυξης σε κοντέινερ. [Configuration](../../../.devcontainer/devcontainer.json)
+**Dev Container** - Περιβάλλον ανάπτυξης με κοντέινερ. [Configuration](../../../.devcontainer/devcontainer.json)
-**GitHub Models** - Δωρεάν πλατφόρμα μοντέλων AI. [Module 00](../00-quick-start/README.md)
+**In-Memory Testing** - Δοκιμή με αποθήκευση στη μνήμη.
-**In-Memory Testing** - Δοκιμές με αποθήκευση στην μνήμη.
+**Integration Testing** - Δοκιμή με πραγματική υποδομή.
-**Integration Testing** - Δοκιμές με πραγματική υποδομή.
+**Maven** - Εργαλείο αυτοματισμού κατασκευής Java.
-**Maven** - Εργαλείο αυτοματοποίησης κατασκευής Java.
+**Mockito** - Πλαίσιο mocking για Java.
-**Mockito** - Πλαίσιο για mock αντικείμενα σε Java.
-
-**Spring Boot** - Πλαίσιο εφαρμογών Java. [Module 01](../01-introduction/README.md)
+**Spring Boot** - Πλαίσιο εφαρμογής Java. [Module 01](../01-introduction/README.md)
---
-**Αποποίηση ευθυνών**:
-Αυτό το έγγραφο έχει μεταφραστεί με τη χρήση της υπηρεσίας αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που προσπαθούμε για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα του θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες συνιστάται επαγγελματική μετάφραση από ανθρώπους. Δεν φέρουμε ευθύνη για τυχόν παρανοήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
+**Αποποίηση ευθυνών**:
+Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
\ No newline at end of file
diff --git a/translations/el/docs/TESTING.md b/translations/el/docs/TESTING.md
index 1780b5d2b..3b4a071da 100644
--- a/translations/el/docs/TESTING.md
+++ b/translations/el/docs/TESTING.md
@@ -2,19 +2,19 @@
## Πίνακας Περιεχομένων
-- [Γρήγορη Έναρξη](../../../docs)
-- [Τι Καλύπτουν οι Δοκιμές](../../../docs)
-- [Εκτέλεση των Δοκιμών](../../../docs)
-- [Εκτέλεση Δοκιμών στο VS Code](../../../docs)
-- [Πρότυπα Δοκιμών](../../../docs)
-- [Φιλοσοφία των Δοκιμών](../../../docs)
-- [Επόμενα Βήματα](../../../docs)
+- [Γρήγορη Εκκίνηση](#γρήγορη-εκκίνηση)
+- [Τι Καλύπτουν οι Δοκιμές](#τι-καλύπτουν-οι-δοκιμές)
+- [Εκτέλεση των Δοκιμών](#εκτέλεση-των-δοκιμών)
+- [Εκτέλεση Δοκιμών στο VS Code](#εκτέλεση-δοκιμών-στο-vs-code)
+- [Μοτίβα Δοκιμών](#μοτίβα-δοκιμών)
+- [Φιλοσοφία Δοκιμών](#φιλοσοφία-δοκιμών)
+- [Επόμενα Βήματα](#επόμενα-βήματα)
-Αυτός ο οδηγός σας καθοδηγεί μέσα από τις δοκιμές που δείχνουν πώς να δοκιμάσετε εφαρμογές Τεχνητής Νοημοσύνης χωρίς να απαιτούνται API κλειδιά ή εξωτερικές υπηρεσίες.
+Αυτός ο οδηγός σας καθοδηγεί μέσα από τις δοκιμές που δείχνουν πώς να δοκιμάσετε εφαρμογές AI χωρίς να απαιτούνται κλειδιά API ή εξωτερικές υπηρεσίες.
-## Γρήγορη Έναρξη
+## Γρήγορη Εκκίνηση
-Τρέξτε όλες τις δοκιμές με μία εντολή:
+Εκτελέστε όλες τις δοκιμές με μία εντολή:
**Bash:**
```bash
@@ -26,28 +26,27 @@ mvn test
mvn --% test
```
-Όταν όλες οι δοκιμές περάσουν, θα δείτε έξοδο όπως στην παρακάτω οθόνη — οι δοκιμές εκτελούνται χωρίς αποτυχίες.
+Όταν όλες οι δοκιμές περάσουν, θα πρέπει να δείτε έξοδο όπως το στιγμιότυπο παρακάτω — οι δοκιμές εκτελούνται χωρίς αποτυχίες.
-
+
*Επιτυχής εκτέλεση δοκιμών που δείχνει όλες τις δοκιμές να περνούν χωρίς αποτυχίες*
## Τι Καλύπτουν οι Δοκιμές
-Αυτή η ενότητα εστιάζει σε **μοναδιαίες δοκιμές** που τρέχουν τοπικά. Κάθε δοκιμή παρουσιάζει μια συγκεκριμένη έννοια του LangChain4j απομονωμένα. Η πυραμίδα δοκιμών παρακάτω δείχνει πού εντάσσονται οι μοναδιαίες δοκιμές — αποτελούν το γρήγορο, αξιόπιστο θεμέλιο πάνω στο οποίο χτίζεται η υπόλοιπη στρατηγική δοκιμών σας.
+Αυτό το μάθημα εστιάζει σε **μονάδες δοκιμών** που εκτελούνται τοπικά. Κάθε δοκιμή παρουσιάζει μια συγκεκριμένη έννοια LangChain4j απομονωμένη. Η πυραμίδα δοκιμών παρακάτω δείχνει πού εντάσσονται οι μονάδες δοκιμών — αποτελούν τη γρήγορη, αξιόπιστη βάση πάνω στην οποία χτίζεται η υπόλοιπη στρατηγική δοκιμών σας.
-*Πυραμίδα δοκιμών που δείχνει την ισορροπία μεταξύ μοναδιαίων δοκιμών (γρήγορες, απομονωμένες), δοκιμών ενσωμάτωσης (πραγματικά συστατικά) και δοκιμών από άκρο σε άκρο. Αυτή η εκπαίδευση καλύπτει μοναδιαίες δοκιμές.*
+*Πυραμίδα δοκιμών που δείχνει την ισορροπία μεταξύ μονάδων δοκιμών (γρήγορες, απομονωμένες), δοκιμών ολοκλήρωσης (πραγματικά στοιχεία) και δοκιμών end-to-end. Αυτή η εκπαίδευση καλύπτει τη μονάδα δοκιμών.*
| Ενότητα | Δοκιμές | Εστίαση | Κύρια Αρχεία |
|--------|-------|-------|-----------|
-| **00 - Γρήγορη Έναρξη** | 6 | Πρότυπα prompt και αντικατάσταση μεταβλητών | `SimpleQuickStartTest.java` |
-| **01 - Εισαγωγή** | 8 | Μνήμη συνομιλίας και κατάσταση συνομιλίας | `SimpleConversationTest.java` |
-| **02 - Μηχανική Prompt** | 12 | Πρότυπα GPT-5.2, επίπεδα προθυμίας, δομημένη έξοδος | `SimpleGpt5PromptTest.java` |
+| **01 - Εισαγωγή** | 8 | Μνήμη συνομιλίας και συνομιλία με κατάσταση | `SimpleConversationTest.java` |
+| **02 - Μηχανική Prompt** | 12 | Πρότυπα GPT-5.2, επίπεδα ενθουσιασμού, δομημένη έξοδος | `SimpleGpt5PromptTest.java` |
| **03 - RAG** | 10 | Εισαγωγή εγγράφων, ενσωματώσεις, αναζήτηση ομοιότητας | `DocumentServiceTest.java` |
-| **04 - Εργαλεία** | 12 | Κλήση λειτουργιών και αλυσίδες εργαλείων | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | Πρωτόκολλο Πλαισίου Μοντέλου με μεταφορά stdio | `SimpleMcpTest.java` |
+| **04 - Εργαλεία** | 12 | Κλήση λειτουργιών και αλυσιδωτές λειτουργίες εργαλείων | `SimpleToolsTest.java` |
+| **05 - MCP** | 8 | Πρωτόκολλο Πλαισίου Μοντέλου με μεταφορά Stdio | `SimpleMcpTest.java` |
## Εκτέλεση των Δοκιμών
@@ -63,7 +62,7 @@ mvn test
mvn --% test
```
-**Εκτελέστε δοκιμές για συγκεκριμένο module:**
+**Εκτέλεση δοκιμών για συγκεκριμένη ενότητα:**
**Bash:**
```bash
@@ -79,7 +78,7 @@ cd 01-introduction; mvn --% test
mvn --% test -pl 01-introduction
```
-**Εκτελέστε μια μόνο κλάση δοκιμής:**
+**Εκτέλεση μιας μόνο κλάσης δοκιμής:**
**Bash:**
```bash
@@ -91,45 +90,45 @@ mvn test -Dtest=SimpleConversationTest
mvn --% test -Dtest=SimpleConversationTest
```
-**Εκτελέστε συγκεκριμένη μέθοδο δοκιμής:**
+**Εκτέλεση συγκεκριμένης μεθόδου δοκιμής:**
**Bash:**
```bash
-mvn test -Dtest=SimpleConversationTest#πρέπει να διατηρεί το ιστορικό συνομιλίας
+mvn test -Dtest=SimpleConversationTest#θα πρέπει να διατηρεί το ιστορικό συνομιλίας
```
**PowerShell:**
```powershell
-mvn --% test -Dtest=SimpleConversationTest#πρέπει να διατηρεί το ιστορικό συνομιλιών
+mvn --% test -Dtest=SimpleConversationTest#θα πρέπει να διατηρεί το ιστορικό συνομιλίας
```
## Εκτέλεση Δοκιμών στο VS Code
-Αν χρησιμοποιείτε το Visual Studio Code, ο Εξερευνητής Δοκιμών παρέχει γραφικό περιβάλλον για την εκτέλεση και αποσφαλμάτωση δοκιμών.
+Αν χρησιμοποιείτε το Visual Studio Code, ο Test Explorer προσφέρει γραφική διεπαφή για την εκτέλεση και αποσφαλμάτωση των δοκιμών.
-
+
-*VS Code Εξερευνητής Δοκιμών που δείχνει το δέντρο δοκιμών με όλες τις κλάσεις δοκιμών Java και μεμονωμένες μεθόδους δοκιμών*
+*Ο Εξερευνητής Δοκιμών του VS Code δείχνει το δέντρο δοκιμών με όλες τις κλάσεις δοκιμής Java και τις μεμονωμένες μεθόδους δοκιμών*
-**Για να τρέξετε δοκιμές στο VS Code:**
+**Για να εκτελέσετε δοκιμές στο VS Code:**
-1. Ανοίξτε τον Εξερευνητή Δοκιμών κάνοντας κλικ στο εικονίδιο του δοκιμαστικού σωλήνα στη γραμμή δραστηριότητας
-2. Διευρύνετε το δέντρο δοκιμών για να δείτε όλα τα modules και τις κλάσεις δοκιμών
-3. Κάντε κλικ στο κουμπί αναπαραγωγής δίπλα σε οποιαδήποτε δοκιμή για να τη τρέξετε μεμονωμένα
+1. Ανοίξτε τον Εξερευνητή Δοκιμών κάνοντας κλικ στο εικονίδιο δοκιμαστικού σωλήνα στη γραμμή δραστηριότητας
+2. Αναπτύξτε το δέντρο δοκιμών για να δείτε όλες τις ενότητες και τις κλάσεις δοκιμών
+3. Κάντε κλικ στο κουμπί αναπαραγωγής δίπλα σε οποιαδήποτε δοκιμή για να την τρέξετε μεμονωμένα
4. Κάντε κλικ στο "Run All Tests" για να εκτελέσετε ολόκληρο το σύνολο
-5. Κάντε δεξί κλικ σε οποιαδήποτε δοκιμή και επιλέξτε "Debug Test" για να ορίσετε σημεία διακοπής και να βήμα-βήμα μέσα στον κώδικα
+5. Δεξί κλικ σε οποιαδήποτε δοκιμή και επιλέξτε "Debug Test" για να ορίσετε σημεία διακοπής και να εκτελέσετε βήμα προς βήμα τον κώδικα
-Ο Εξερευνητής Δοκιμών δείχνει πράσινα σημάδια για τις επιτυχημένες δοκιμές και παρέχει λεπτομερή μηνύματα αποτυχίας όταν οι δοκιμές αποτυγχάνουν.
+Ο Εξερευνητής Δοκιμών εμφανίζει πράσινες επιβεβαιώσεις για τις περασμένες δοκιμές και παρέχει λεπτομερή μηνύματα αποτυχίας όταν οι δοκιμές αποτυγχάνουν.
-## Πρότυπα Δοκιμών
+## Μοτίβα Δοκιμών
-### Πρότυπο 1: Δοκιμή Προτύπων Prompt
+### Μοτίβο 1: Δοκιμή Προτύπων Prompt
-Το απλούστερο πρότυπο δοκιμάζει πρότυπα prompt χωρίς να καλεί κανένα μοντέλο AI. Επαληθεύετε ότι η αντικατάσταση των μεταβλητών λειτουργεί σωστά και τα prompts μορφοποιούνται όπως αναμένεται.
+Το απλούστερο μοτίβο δοκιμάζει πρότυπα prompt χωρίς να καλεί κανένα μοντέλο AI. Επαληθεύετε ότι η αντικατάσταση μεταβλητών λειτουργεί σωστά και ότι τα prompts μορφοποιούνται όπως αναμένεται.
-*Δοκιμή πρότυπων prompt που δείχνει τη ροή αντικατάστασης μεταβλητών: πρότυπο με θέσεις κρατήματος → εφαρμόζονται τιμές → επιβεβαιώνεται η μορφοποιημένη έξοδος*
+*Δοκιμή προτύπων prompt που δείχνει ροή αντικατάστασης μεταβλητών: πρότυπο με θέσεις κράτησης → εφαρμόζονται τιμές → επαληθεύεται η μορφοποιημένη έξοδος*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-Αυτή η δοκιμή βρίσκεται στο `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
+Αυτό το μοτίβο επαληθεύει ότι η αντικατάσταση μεταβλητών λειτουργεί σωστά και τα prompts μορφοποιούνται όπως αναμένεται — χωρίς απαίτηση κλειδιού API ή κλήσης μοντέλου.
-**Τρέξτε την:**
+### Μοτίβο 2: Προσομοίωση Μοντέλων Γλώσσας
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#μορφοποίησηΠροτύπουΠροτροπήςΔοκιμής
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#δοκιμήΜορφοποίησηςΠροτύπουΠροτροπής
-```
-
-### Πρότυπο 2: Mocking Μοντέλων Γλώσσας
-
-Όταν δοκιμάζετε τη λογική συνομιλίας, χρησιμοποιήστε το Mockito για να δημιουργήσετε ψεύτικα μοντέλα που επιστρέφουν προκαθορισμένες απαντήσεις. Αυτό κάνει τις δοκιμές γρήγορες, δωρεάν και ντετερμινιστικές.
+Κατά τη δοκιμή της λογικής συνομιλίας, χρησιμοποιήστε Mockito για να δημιουργήσετε ψεύτικα μοντέλα που επιστρέφουν προκαθορισμένες απαντήσεις. Αυτό κάνει τις δοκιμές γρήγορες, δωρεάν και ντετερμινιστικές.
-
+
-*Σύγκριση που δείχνει γιατί προτιμώνται τα mocks για δοκιμές: είναι γρήγορα, δωρεάν, ντετερμινιστικά και δεν απαιτούν API κλειδιά*
+*Σύγκριση που δείχνει γιατί προτιμώνται τα mocks για δοκιμές: είναι γρήγορα, δωρεάν, ντετερμινιστικά και δεν απαιτούν κλειδιά API*
```java
@ExtendWith(MockitoExtension.class)
@@ -218,15 +205,15 @@ class SimpleConversationTest {
}
```
-Αυτό το πρότυπο εμφανίζεται στο `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Το mock διασφαλίζει συνεπή συμπεριφορά ώστε να μπορείτε να επαληθεύσετε ότι η διαχείριση μνήμης λειτουργεί σωστά.
+Αυτό το μοτίβο εμφανίζεται στο `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Το mock εξασφαλίζει σταθερή συμπεριφορά ώστε να επαληθεύσετε ότι η διαχείριση μνήμης λειτουργεί σωστά.
-### Πρότυπο 3: Δοκιμή Απομόνωσης Συνομιλίας
+### Μοτίβο 3: Δοκιμή Απομόνωσης Συνομιλίας
-Η μνήμη συνομιλίας πρέπει να κρατά τους πολλαπλούς χρήστες απομονωμένους. Αυτή η δοκιμή επαληθεύει ότι οι συνομιλίες δεν αναμειγνύουν συμφραζόμενα.
+Η μνήμη συνομιλίας πρέπει να κρατά τους χρήστες ξεχωριστούς. Αυτή η δοκιμή επαληθεύει ότι οι συνομιλίες δεν αναμιγνύουν τα συμφραζόμενα.
-*Δοκιμή απομόνωσης συνομιλίας που δείχνει ξεχωριστές αποθήκες μνήμης για διαφορετικούς χρήστες για να αποτρέπει το ανακάτεμα συμφραζομένων*
+*Δοκιμή απομόνωσης συνομιλίας που δείχνει ξεχωριστά καταστήματα μνήμης για διαφορετικούς χρήστες για να αποτραπεί η ανάμειξη συμφραζομένων*
```java
@Test
@@ -250,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-Κάθε συνομιλία διατηρεί το δικό της ανεξάρτητο ιστορικό. Σε παραγωγικά συστήματα, αυτή η απομόνωση είναι κρίσιμη για εφαρμογές πολλαπλών χρηστών.
+Κάθε συνομιλία διατηρεί το δικό της ανεξάρτητο ιστορικό. Σε συστήματα παραγωγής, αυτή η απομόνωση είναι κρίσιμη για εφαρμογές πολλαπλών χρηστών.
-### Πρότυπο 4: Δοκιμή Εργαλείων Ανεξάρτητα
+### Μοτίβο 4: Δοκιμή Εργαλείων Ανεξάρτητα
-Τα εργαλεία είναι λειτουργίες που το AI μπορεί να καλέσει. Δοκιμάστε τα απευθείας για να βεβαιωθείτε ότι λειτουργούν σωστά ανεξάρτητα από τις αποφάσεις του AI.
+Τα εργαλεία είναι λειτουργίες που μπορεί να καλέσει το AI. Δοκιμάστε τα απευθείας για να εξασφαλίσετε ότι λειτουργούν σωστά ανεξάρτητα από τις αποφάσεις του AI.
-*Δοκιμή εργαλείων ανεξάρτητα που δείχνει εκτέλεση ψεύτικου εργαλείου χωρίς κλήσεις AI για επαλήθευση επιχειρηματικής λογικής*
+*Δοκιμή εργαλείων ανεξάρτητα που δείχνει εκτέλεση mock εργαλείου χωρίς κλήσεις AI για να επαληθευτεί η επιχειρησιακή λογική*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-Αυτές οι δοκιμές από το `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` επαληθεύουν τη λογική των εργαλείων χωρίς την εμπλοκή του AI. Το παράδειγμα σύνδεσης δείχνει πώς η έξοδος ενός εργαλείου τροφοδοτεί την είσοδο άλλου.
+Αυτές οι δοκιμές από το `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` επαληθεύουν τη λογική εργαλείων χωρίς εμπλοκή AI. Το παράδειγμα αλυσιδωτής λειτουργίας δείχνει πώς η έξοδος ενός εργαλείου τροφοδοτεί την είσοδο ενός άλλου.
-### Πρότυπο 5: Δοκιμή RAG Μέσω Μνήμης
+### Μοτίβο 5: Δοκιμή RAG Εντός Μνήμης
-Τα συστήματα RAG παραδοσιακά απαιτούν διανυσματικές βάσεις δεδομένων και υπηρεσίες ενσωμάτωσης. Το πρότυπο μέσω μνήμης σας επιτρέπει να δοκιμάσετε ολόκληρη τη ροή χωρίς εξωτερικές εξαρτήσεις.
+Τα συστήματα RAG παραδοσιακά απαιτούν βάσεις δεδομένων διανυσμάτων και υπηρεσίες ενσωμάτωσης. Το μοτίβο εντός μνήμης σας επιτρέπει να δοκιμάσετε όλη την αλυσίδα χωρίς εξαρτήσεις.
-
+
-*Ροή εργασίας δοκιμής RAG μέσω μνήμης που δείχνει ανάλυση εγγράφων, αποθήκευση ενσωματώσεων και αναζήτηση ομοιότητας χωρίς να απαιτείται βάση δεδομένων*
+*Ροή εργασίας δοκιμών RAG εντός μνήμης που δείχνει ανάλυση εγγράφου, αποθήκευση ενσωματώσεων και αναζήτηση ομοιότητας χωρίς απαίτηση βάσης δεδομένων*
```java
@Test
@@ -306,15 +293,15 @@ void testProcessTextDocument() {
}
```
-Αυτή η δοκιμή από το `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` δημιουργεί ένα έγγραφο στη μνήμη και επαληθεύει το διαχωρισμό σε κομμάτια και τη διαχείριση μεταδεδομένων.
+Αυτή η δοκιμή από το `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` δημιουργεί ένα έγγραφο στη μνήμη και επαληθεύει το κομμάτιασμα και τη διαχείριση μεταδεδομένων.
-### Πρότυπο 6: Δοκιμή Ενσωμάτωσης MCP
+### Μοτίβο 6: Δοκιμή Ενσωμάτωσης MCP
-Το module MCP δοκιμάζει την ενσωμάτωση Πρωτοκόλλου Πλαισίου Μοντέλου χρησιμοποιώντας μεταφορά stdio. Αυτές οι δοκιμές επιβεβαιώνουν ότι η εφαρμογή σας μπορεί να ξεκινήσει και να επικοινωνήσει με MCP servers ως υπο-διαδικασίες.
+Η ενότητα MCP δοκιμάζει την ενσωμάτωση του Πρωτοκόλλου Πλαισίου Μοντέλου χρησιμοποιώντας τη μεταφορά stdio. Αυτές οι δοκιμές επαληθεύουν ότι η εφαρμογή σας μπορεί να δημιουργήσει και να επικοινωνήσει με MCP διακομιστές ως υποδιαδικασίες.
Οι δοκιμές στο `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` επαληθεύουν τη συμπεριφορά πελάτη MCP.
-**Τρέξτε τις:**
+**Εκτελέστε τις:**
**Bash:**
```bash
@@ -326,38 +313,37 @@ cd 05-mcp && mvn test
cd 05-mcp; mvn --% test
```
-## Φιλοσοφία των Δοκιμών
+## Φιλοσοφία Δοκιμών
-Δοκιμάστε τον κώδικά σας, όχι το AI. Οι δοκιμές σας πρέπει να επικυρώνουν τον κώδικα που γράφετε ελέγχοντας πώς κατασκευάζονται τα prompts, πώς διαχειρίζεται η μνήμη και πώς εκτελούνται τα εργαλεία. Οι απαντήσεις AI διαφέρουν και δεν θα πρέπει να αποτελούν μέρος των ελέγχων. Ρωτήστε τον εαυτό σας αν το πρότυπο prompt αντικαθιστά σωστά τις μεταβλητές, όχι αν το AI δίνει τη σωστή απάντηση.
+Δοκιμάστε τον κώδικά σας, όχι το AI. Οι δοκιμές σας πρέπει να επαληθεύουν τον κώδικα που γράφετε ελέγχοντας πώς κατασκευάζονται τα prompts, πώς διαχειρίζεται η μνήμη και πώς εκτελούνται τα εργαλεία. Οι απαντήσεις AI διαφέρουν και δεν θα πρέπει να περιλαμβάνονται στις δηλώσεις των δοκιμών. Αναρωτηθείτε αν το πρότυπο prompt σας αντικαθιστά σωστά τις μεταβλητές, όχι αν το AI δίνει τη σωστή απάντηση.
-Χρησιμοποιήστε mocks για τα μοντέλα γλώσσας. Είναι εξωτερικές εξαρτήσεις που είναι αργές, ακριβές και μη ντετερμινιστικές. Το mocking κάνει τις δοκιμές γρήγορες με χιλιοστά του δευτερολέπτου αντί για δευτερόλεπτα, δωρεάν χωρίς κόστος API, και ντετερμινιστικές με το ίδιο αποτέλεσμα κάθε φορά.
+Χρησιμοποιήστε mocks για μοντέλα γλώσσας. Αποτελούν εξωτερικές εξαρτήσεις που είναι αργές, ακριβές και μη ντετερμινιστικές. Η προσομοίωση κάνει τις δοκιμές γρήγορες με χιλιοστά του δευτερολέπτου αντί για δευτερόλεπτα, δωρεάν χωρίς κόστος API και ντετερμινιστικές με το ίδιο αποτέλεσμα κάθε φορά.
-Διατηρήστε τις δοκιμές ανεξάρτητες. Κάθε δοκιμή πρέπει να ετοιμάζει τα δικά της δεδομένα, να μην εξαρτάται από άλλες δοκιμές και να καθαρίζει μετά τη ολοκλήρωση. Οι δοκιμές πρέπει να περνούν ανεξάρτητα από τη σειρά εκτέλεσης.
+Διατηρήστε τις δοκιμές ανεξάρτητες. Κάθε δοκιμή θα πρέπει να ρυθμίζει τα δικά της δεδομένα, να μην εξαρτάται από άλλες δοκιμές και να καθαρίζει μετά τον εαυτό της. Οι δοκιμές πρέπει να περνούν ανεξαρτήτως της σειράς εκτέλεσης.
-Δοκιμάστε ακραίες περιπτώσεις πέρα από το ευτυχές μονοπάτι. Δοκιμάστε άδειες εισόδους, πολύ μεγάλες εισόδους, ειδικούς χαρακτήρες, μη έγκυρες παραμέτρους και οριακές συνθήκες. Αυτά συχνά αποκαλύπτουν σφάλματα που η φυσιολογική χρήση δεν εκθέτει.
+Δοκιμάστε άκρες περιπτώσεων πέρα από το συνηθισμένο μονοπάτι. Δοκιμάστε κενές εισόδους, πολύ μεγάλες εισόδους, ειδικούς χαρακτήρες, άκυρες παραμέτρους και οριακές συνθήκες. Αυτά συχνά αποκαλύπτουν σφάλματα που η κανονική χρήση δεν αποκαλύπτει.
-Χρησιμοποιήστε περιγραφικά ονόματα. Συγκρίνετε το `shouldMaintainConversationHistoryAcrossMultipleMessages()` με το `test1()`. Το πρώτο σας λέει ακριβώς τι ελέγχεται, καθιστώντας την αποσφαλμάτωση των αποτυχιών πολύ πιο εύκολη.
+Χρησιμοποιήστε περιγραφικά ονόματα. Συγκρίνετε το `shouldMaintainConversationHistoryAcrossMultipleMessages()` με το `test1()`. Το πρώτο σας λέει ακριβώς τι δοκιμάζεται, κάνοντας την αποσφαλμάτωση αποτυχιών πολύ πιο εύκολη.
## Επόμενα Βήματα
-Τώρα που κατανοείτε τα πρότυπα δοκιμών, εμβαθύνετε σε κάθε module:
+Τώρα που κατανοείτε τα μοτίβα δοκιμών, εξερευνήστε πιο βαθιά κάθε ενότητα:
-- **[00 - Γρήγορη Έναρξη](../00-quick-start/README.md)** - Ξεκινήστε με τα βασικά των προτύπων prompt
- **[01 - Εισαγωγή](../01-introduction/README.md)** - Μάθετε διαχείριση μνήμης συνομιλίας
-- **[02 - Μηχανική Prompt](../02-prompt-engineering/README.md)** - Κατακτήστε πρότυπα prompting GPT-5.2
-- **[03 - RAG](../03-rag/README.md)** - Δημιουργήστε συστήματα ανάκτησης-ενισχυμένης δημιουργίας
-- **[04 - Εργαλεία](../04-tools/README.md)** - Εφαρμόστε κλήσεις λειτουργιών και αλυσίδες εργαλείων
+- **[02 - Μηχανική Prompt](../02-prompt-engineering/README.md)** - Εξοικειωθείτε με τα μοτίβα prompt GPT-5.2
+- **[03 - RAG](../03-rag/README.md)** - Δημιουργήστε συστήματα ανάκτησης ενισχυμένης γεννήτριας
+- **[04 - Εργαλεία](../04-tools/README.md)** - Υλοποιήστε κλήση λειτουργιών και αλυσίδες εργαλείων
- **[05 - MCP](../05-mcp/README.md)** - Ενσωματώστε το Πρωτόκολλο Πλαισίου Μοντέλου
-Το README κάθε module παρέχει λεπτομερείς εξηγήσεις για τις έννοιες που δοκιμάζονται εδώ.
+Το README κάθε ενότητας παρέχει λεπτομερείς εξηγήσεις των εννοιών που δοκιμάζονται εδώ.
---
-**Πλοήγηση:** [← Επιστροφή στην Κύρια Σελίδα](../README.md)
+**Πλοήγηση:** [← Επιστροφή στην Αρχική](../README.md)
---
-**Αποποίηση ευθυνών**:
-Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που προσπαθούμε για ακρίβεια, παρακαλούμε να γνωρίζετε ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική μετάφραση από ανθρώπους. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
+**Αποποίηση ευθυνών**:
+Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
\ No newline at end of file
diff --git a/translations/en/.co-op-translator.json b/translations/en/.co-op-translator.json
index b1ac8e6d7..5a4506315 100644
--- a/translations/en/.co-op-translator.json
+++ b/translations/en/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "en"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-02T18:16:47+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T06:55:24+00:00",
"source_file": "01-introduction/README.md",
"language_code": "en"
},
@@ -18,20 +18,20 @@
"language_code": "en"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-02T18:18:55+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T06:51:52+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "en"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-02T18:20:12+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T06:54:40+00:00",
"source_file": "03-rag/README.md",
"language_code": "en"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T08:12:29+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T06:53:41+00:00",
"source_file": "04-tools/README.md",
"language_code": "en"
},
@@ -54,8 +54,8 @@
"language_code": "en"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T15:30:07+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T06:50:46+00:00",
"source_file": "README.md",
"language_code": "en"
},
@@ -72,14 +72,14 @@
"language_code": "en"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-02T18:22:55+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T06:52:15+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "en"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-02T18:23:40+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T06:52:44+00:00",
"source_file": "docs/TESTING.md",
"language_code": "en"
}
diff --git a/translations/en/00-quick-start/README.md b/translations/en/00-quick-start/README.md
deleted file mode 100644
index 9e4cc9bc6..000000000
--- a/translations/en/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# Module 00: Quick Start
-
-## Table of Contents
-
-- [Introduction](../../../00-quick-start)
-- [What is LangChain4j?](../../../00-quick-start)
-- [LangChain4j Dependencies](../../../00-quick-start)
-- [Prerequisites](../../../00-quick-start)
-- [Setup](../../../00-quick-start)
- - [1. Get Your GitHub Token](../../../00-quick-start)
- - [2. Set Your Token](../../../00-quick-start)
-- [Run the Examples](../../../00-quick-start)
- - [1. Basic Chat](../../../00-quick-start)
- - [2. Prompt Patterns](../../../00-quick-start)
- - [3. Function Calling](../../../00-quick-start)
- - [4. Document Q&A (Easy RAG)](../../../00-quick-start)
- - [5. Responsible AI](../../../00-quick-start)
-- [What Each Example Shows](../../../00-quick-start)
-- [Next Steps](../../../00-quick-start)
-- [Troubleshooting](../../../00-quick-start)
-
-## Introduction
-
-This quickstart is meant to get you up and running with LangChain4j as quickly as possible. It covers the absolute basics of building AI applications with LangChain4j and GitHub Models. In the next modules you'll switch to Azure OpenAI and GPT-5.2 and dive deeper into each concept.
-
-## What is LangChain4j?
-
-LangChain4j is a Java library that simplifies building AI-powered applications. Instead of dealing with HTTP clients and JSON parsing, you work with clean Java APIs.
-
-The "chain" in LangChain refers to chaining together multiple components - you might chain a prompt to a model to a parser, or chain multiple AI calls together where one output feeds into the next input. This quick start focuses on the fundamentals before exploring more complex chains.
-
-
-
-*Chaining components in LangChain4j - building blocks connect to create powerful AI workflows*
-
-We'll use three core components:
-
-**ChatModel** - The interface for AI model interactions. Call `model.chat("prompt")` and get a response string. We use `OpenAiOfficialChatModel` which works with OpenAI-compatible endpoints like GitHub Models.
-
-**AiServices** - Creates type-safe AI service interfaces. Define methods, annotate them with `@Tool`, and LangChain4j handles the orchestration. The AI automatically calls your Java methods when needed.
-
-**MessageWindowChatMemory** - Maintains conversation history. Without this, each request is independent. With it, the AI remembers previous messages and maintains context across multiple turns.
-
-
-
-*LangChain4j architecture - core components working together to power your AI applications*
-
-## LangChain4j Dependencies
-
-This quick start uses three Maven dependencies in the [`pom.xml`](../../../00-quick-start/pom.xml):
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-The `langchain4j-open-ai-official` module provides the `OpenAiOfficialChatModel` class that connects to OpenAI-compatible APIs. GitHub Models uses the same API format, so no special adapter is needed - just point the base URL to `https://models.github.ai/inference`.
-
-The `langchain4j-easy-rag` module provides automatic document splitting, embedding, and retrieval so you can build RAG applications without manually configuring each step.
-
-## Prerequisites
-
-**Using the Dev Container?** Java and Maven are already installed. You only need a GitHub Personal Access Token.
-
-**Local Development:**
-- Java 21+, Maven 3.9+
-- GitHub Personal Access Token (instructions below)
-
-> **Note:** This module uses `gpt-4.1-nano` from GitHub Models. Do not modify the model name in the code - it's configured to work with GitHub's available models.
-
-## Setup
-
-### 1. Get Your GitHub Token
-
-1. Go to [GitHub Settings → Personal Access Tokens](https://github.com/settings/personal-access-tokens)
-2. Click "Generate new token"
-3. Set a descriptive name (e.g., "LangChain4j Demo")
-4. Set expiration (7 days recommended)
-5. Under "Account permissions", find "Models" and set to "Read-only"
-6. Click "Generate token"
-7. Copy and save your token - you won't see it again
-
-### 2. Set Your Token
-
-**Option 1: Using VS Code (Recommended)**
-
-If you're using VS Code, add your token to the `.env` file in the project root:
-
-If the `.env` file does not exist, copy `.env.example` to `.env` or create a new `.env` file in the project root.
-
-**Example `.env` file:**
-```bash
-# In /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-Then you can simply right-click on any demo file (e.g., `BasicChatDemo.java`) in the Explorer and select **"Run Java"** or use the launch configurations from the Run and Debug panel.
-
-**Option 2: Using Terminal**
-
-Set the token as an environment variable:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## Run the Examples
-
-**Using VS Code:** Simply right-click on any demo file in the Explorer and select **"Run Java"**, or use the launch configurations from the Run and Debug panel (make sure you've added your token to the `.env` file first).
-
-**Using Maven:** Alternatively, you can run from the command line:
-
-### 1. Basic Chat
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. Prompt Patterns
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-Shows zero-shot, few-shot, chain-of-thought, and role-based prompting.
-
-### 3. Function Calling
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-AI automatically calls your Java methods when needed.
-
-### 4. Document Q&A (Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-Ask questions about your documents using Easy RAG with automatic embedding and retrieval.
-
-### 5. Responsible AI
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-See how AI safety filters block harmful content.
-
-## What Each Example Shows
-
-**Basic Chat** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-Start here to see LangChain4j at its simplest. You'll create an `OpenAiOfficialChatModel`, send a prompt with `.chat()`, and get back a response. This demonstrates the foundation: how to initialize models with custom endpoints and API keys. Once you understand this pattern, everything else builds on it.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 Try with [GitHub Copilot](https://github.com/features/copilot) Chat:** Open [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) and ask:
-> - "How would I switch from GitHub Models to Azure OpenAI in this code?"
-> - "What other parameters can I configure in OpenAiOfficialChatModel.builder()?"
-> - "How do I add streaming responses instead of waiting for the complete response?"
-
-**Prompt Engineering** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-Now that you know how to talk to a model, let's explore what you say to it. This demo uses the same model setup but shows five different prompting patterns. Try zero-shot prompts for direct instructions, few-shot prompts that learn from examples, chain-of-thought prompts that reveal reasoning steps, and role-based prompts that set context. You'll see how the same model gives dramatically different results based on how you frame your request.
-
-The demo also demonstrates prompt templates, which are a powerful way to create reusable prompts with variables.
-The below example shows a prompt using the LangChain4j `PromptTemplate` to fill in variables. The AI will answer based on the provided destination and activity.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 Try with [GitHub Copilot](https://github.com/features/copilot) Chat:** Open [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) and ask:
-> - "What's the difference between zero-shot and few-shot prompting, and when should I use each?"
-> - "How does the temperature parameter affect the model's responses?"
-> - "What are some techniques to prevent prompt injection attacks in production?"
-> - "How can I create reusable PromptTemplate objects for common patterns?"
-
-**Tool Integration** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-This is where LangChain4j gets powerful. You'll use `AiServices` to create an AI assistant that can call your Java methods. Just annotate methods with `@Tool("description")` and LangChain4j handles the rest - the AI automatically decides when to use each tool based on what the user asks. This demonstrates function calling, a key technique for building AI that can take actions, not just answer questions.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 Try with [GitHub Copilot](https://github.com/features/copilot) Chat:** Open [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) and ask:
-> - "How does the @Tool annotation work and what does LangChain4j do with it behind the scenes?"
-> - "Can the AI call multiple tools in sequence to solve complex problems?"
-> - "What happens if a tool throws an exception - how should I handle errors?"
-> - "How would I integrate a real API instead of this calculator example?"
-
-**Document Q&A (Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-Here you'll see RAG (retrieval-augmented generation) using LangChain4j's "Easy RAG" approach. Documents are loaded, automatically split and embedded into an in-memory store, then a content retriever supplies relevant chunks to the AI at query time. The AI answers based on your documents, not its general knowledge.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 Try with [GitHub Copilot](https://github.com/features/copilot) Chat:** Open [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) and ask:
-> - "How does RAG prevent AI hallucinations compared to using the model's training data?"
-> - "What's the difference between this easy approach and a custom RAG pipeline?"
-> - "How would I scale this to handle multiple documents or larger knowledge bases?"
-
-**Responsible AI** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-Build AI safety with defense in depth. This demo shows two layers of protection working together:
-
-**Part 1: LangChain4j Input Guardrails** - Block dangerous prompts before they reach the LLM. Create custom guardrails that check for prohibited keywords or patterns. These run in your code, so they're fast and free.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**Part 2: Provider Safety Filters** - GitHub Models has built-in filters that catch what your guardrails might miss. You'll see hard blocks (HTTP 400 errors) for severe violations and soft refusals where the AI politely declines.
-
-> **🤖 Try with [GitHub Copilot](https://github.com/features/copilot) Chat:** Open [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) and ask:
-> - "What is InputGuardrail and how do I create my own?"
-> - "What is the difference between a hard block and a soft refusal?"
-> - "Why use both guardrails and provider filters together?"
-
-## Next Steps
-
-**Next Module:** [01-introduction - Getting Started with LangChain4j](../01-introduction/README.md)
-
----
-
-**Navigation:** [← Back to Main](../README.md) | [Next: Module 01 - Introduction →](../01-introduction/README.md)
-
----
-
-## Troubleshooting
-
-### First-Time Maven Build
-
-**Issue**: Initial `mvn clean compile` or `mvn package` takes a long time (10-15 minutes)
-
-**Cause**: Maven needs to download all project dependencies (Spring Boot, LangChain4j libraries, Azure SDKs, etc.) on the first build.
-
-**Solution**: This is normal behavior. Subsequent builds will be much faster as dependencies are cached locally. Download time depends on your network speed.
-
-### PowerShell Maven Command Syntax
-
-**Issue**: Maven commands fail with error `Unknown lifecycle phase ".mainClass=..."`
-**Cause**: PowerShell interprets `=` as a variable assignment operator, breaking Maven property syntax
-
-**Solution**: Use the stop-parsing operator `--%` before the Maven command:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-The `--%` operator tells PowerShell to pass all remaining arguments literally to Maven without interpretation.
-
-### Windows PowerShell Emoji Display
-
-**Issue**: AI responses show garbage characters (e.g., `????` or `â??`) instead of emojis in PowerShell
-
-**Cause**: PowerShell's default encoding doesn't support UTF-8 emojis
-
-**Solution**: Run this command before executing Java applications:
-```cmd
-chcp 65001
-```
-
-This forces UTF-8 encoding in the terminal. Alternatively, use Windows Terminal which has better Unicode support.
-
-### Debugging API Calls
-
-**Issue**: Authentication errors, rate limits, or unexpected responses from the AI model
-
-**Solution**: The examples include `.logRequests(true)` and `.logResponses(true)` to show API calls in the console. This helps troubleshoot authentication errors, rate limits, or unexpected responses. Remove these flags in production to reduce log noise.
-
----
-
-
-**Disclaimer**:
-This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.
-
\ No newline at end of file
diff --git a/translations/en/01-introduction/README.md b/translations/en/01-introduction/README.md
index 6b6e276a4..3631f1265 100644
--- a/translations/en/01-introduction/README.md
+++ b/translations/en/01-introduction/README.md
@@ -2,19 +2,19 @@
## Table of Contents
-- [Video Walkthrough](../../../01-introduction)
-- [What You'll Learn](../../../01-introduction)
-- [Prerequisites](../../../01-introduction)
-- [Understanding the Core Problem](../../../01-introduction)
-- [Understanding Tokens](../../../01-introduction)
-- [How Memory Works](../../../01-introduction)
-- [How This Uses LangChain4j](../../../01-introduction)
-- [Deploy Azure OpenAI Infrastructure](../../../01-introduction)
-- [Run the Application Locally](../../../01-introduction)
-- [Using the Application](../../../01-introduction)
- - [Stateless Chat (Left Panel)](../../../01-introduction)
- - [Stateful Chat (Right Panel)](../../../01-introduction)
-- [Next Steps](../../../01-introduction)
+- [Video Walkthrough](#video-walkthrough)
+- [What You'll Learn](#what-youll-learn)
+- [Prerequisites](#prerequisites)
+- [Understanding the Core Problem](#understanding-the-core-problem)
+- [Understanding Tokens](#understanding-tokens)
+- [How Memory Works](#how-memory-works)
+- [How This Uses LangChain4j](#how-this-uses-langchain4j)
+- [Deploy Azure OpenAI Infrastructure](#deploy-azure-openai-infrastructure)
+- [Run the Application Locally](#run-the-application-locally)
+- [Using the Application](#using-the-application)
+ - [Stateless Chat (Left Panel)](#stateless-chat-left-panel)
+ - [Stateful Chat (Right Panel)](#stateful-chat-right-panel)
+- [Next Steps](#next-steps)
## Video Walkthrough
@@ -24,13 +24,13 @@ Watch this live session that explains how to get started with this module:
## What You'll Learn
-In the quick start, you used GitHub Models to send prompts, call tools, build a RAG pipeline, and test guardrails. Those demos showed what's possible — now we switch to Azure OpenAI and GPT-5.2 and start building production-style applications. This module focuses on conversational AI that remembers context and maintains state — the concepts those quick start demos used behind the scenes but didn't explain.
+This is your starting point with LangChain4j and Azure OpenAI. We begin with the fundamentals and start building production-style applications. This module focuses on conversational AI that remembers context and maintains state — the foundational concepts every later module builds on.
We'll use Azure OpenAI's GPT-5.2 throughout this guide because its advanced reasoning capabilities make the behavior of different patterns more apparent. When you add memory, you'll clearly see the difference. This makes it easier to understand what each component brings to your application.
You'll build one application that demonstrates both patterns:
-**Stateless Chat** - Each request is independent. The model has no memory of previous messages. This is the pattern you used in the quick start.
+**Stateless Chat** - Each request is independent. The model has no memory of previous messages. This is the simplest starting point.
**Stateful Conversation** - Each request includes conversation history. The model maintains context across multiple turns. This is what production applications require.
@@ -79,7 +79,7 @@ LangChain4j provides memory implementations that handle this automatically. You
## How This Uses LangChain4j
-This module extends the quick start by integrating Spring Boot and adding conversation memory. Here's how the pieces fit together:
+This module integrates Spring Boot and adds conversation memory. Here's how the pieces fit together:
**Dependencies** - Add two LangChain4j libraries:
@@ -312,11 +312,11 @@ Both panels use the same GPT-5.2 model. The only difference is memory. This make
---
-**Navigation:** [← Previous: Module 00 - Quick Start](../00-quick-start/README.md) | [Back to Main](../README.md) | [Next: Module 02 - Prompt Engineering →](../02-prompt-engineering/README.md)
+**Navigation:** [← Back to Main](../README.md) | [Next: Module 02 - Prompt Engineering →](../02-prompt-engineering/README.md)
---
**Disclaimer**:
-This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.
+This document has been translated using AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.
\ No newline at end of file
diff --git a/translations/en/02-prompt-engineering/README.md b/translations/en/02-prompt-engineering/README.md
index d37ada054..5e083ed6c 100644
--- a/translations/en/02-prompt-engineering/README.md
+++ b/translations/en/02-prompt-engineering/README.md
@@ -2,29 +2,29 @@
## Table of Contents
-- [Video Walkthrough](../../../02-prompt-engineering)
-- [What You'll Learn](../../../02-prompt-engineering)
-- [Prerequisites](../../../02-prompt-engineering)
-- [Understanding Prompt Engineering](../../../02-prompt-engineering)
-- [Prompt Engineering Fundamentals](../../../02-prompt-engineering)
- - [Zero-Shot Prompting](../../../02-prompt-engineering)
- - [Few-Shot Prompting](../../../02-prompt-engineering)
- - [Chain of Thought](../../../02-prompt-engineering)
- - [Role-Based Prompting](../../../02-prompt-engineering)
- - [Prompt Templates](../../../02-prompt-engineering)
-- [Advanced Patterns](../../../02-prompt-engineering)
-- [Run the Application](../../../02-prompt-engineering)
-- [Application Screenshots](../../../02-prompt-engineering)
-- [Exploring the Patterns](../../../02-prompt-engineering)
- - [Low vs High Eagerness](../../../02-prompt-engineering)
- - [Task Execution (Tool Preambles)](../../../02-prompt-engineering)
- - [Self-Reflecting Code](../../../02-prompt-engineering)
- - [Structured Analysis](../../../02-prompt-engineering)
- - [Multi-Turn Chat](../../../02-prompt-engineering)
- - [Step-by-Step Reasoning](../../../02-prompt-engineering)
- - [Constrained Output](../../../02-prompt-engineering)
-- [What You're Really Learning](../../../02-prompt-engineering)
-- [Next Steps](../../../02-prompt-engineering)
+- [Video Walkthrough](#video-walkthrough)
+- [What You'll Learn](#what-youll-learn)
+- [Prerequisites](#prerequisites)
+- [Understanding Prompt Engineering](#understanding-prompt-engineering)
+- [Prompt Engineering Fundamentals](#prompt-engineering-fundamentals)
+ - [Zero-Shot Prompting](#zero-shot-prompting)
+ - [Few-Shot Prompting](#few-shot-prompting)
+ - [Chain of Thought](#chain-of-thought)
+ - [Role-Based Prompting](#role-based-prompting)
+ - [Prompt Templates](#prompt-templates)
+- [Advanced Patterns](#advanced-patterns)
+- [Run the Application](#run-the-application)
+- [Application Screenshots](#application-screenshots)
+- [Exploring the Patterns](#exploring-the-patterns)
+ - [Low vs High Eagerness](#low-vs-high-eagerness)
+ - [Task Execution (Tool Preambles)](#task-execution-tool-preambles)
+ - [Self-Reflecting Code](#self-reflecting-code)
+ - [Structured Analysis](#structured-analysis)
+ - [Multi-Turn Chat](#multi-turn-chat)
+ - [Step-by-Step Reasoning](#step-by-step-reasoning)
+ - [Constrained Output](#constrained-output)
+- [What You're Really Learning](#what-youre-really-learning)
+- [Next Steps](#next-steps)
## Video Walkthrough
@@ -38,9 +38,9 @@ The following diagram provides an overview of the key topics and skills you'll d
-In the previous modules, you explored basic LangChain4j interactions with GitHub Models and saw how memory enables conversational AI with Azure OpenAI. Now we'll focus on how you ask questions — the prompts themselves — using Azure OpenAI's GPT-5.2. The way you structure your prompts dramatically affects the quality of responses you get. We start with a review of the fundamental prompting techniques, then move into eight advanced patterns that take full advantage of GPT-5.2's capabilities.
+In the previous module, you saw how memory enables conversational AI with Azure OpenAI. Now we'll focus on how you ask questions — the prompts themselves — using Azure OpenAI's GPT-5.2. The way you structure your prompts dramatically affects the quality of responses you get. We start with a review of the fundamental prompting techniques, then move into eight advanced patterns that take full advantage of GPT-5.2's capabilities.
-We'll use GPT-5.2 because it introduces reasoning control - you can tell the model how much thinking to do before answering. This makes different prompting strategies more apparent and helps you understand when to use each approach. We'll also benefit from Azure's fewer rate limits for GPT-5.2 compared to GitHub Models.
+We'll use GPT-5.2 because it introduces reasoning control - you can tell the model how much thinking to do before answering. This makes different prompting strategies more apparent and helps you understand when to use each approach.
## Prerequisites
@@ -71,7 +71,7 @@ The five core techniques shown below form the foundation of effective prompt eng
-Before diving into the advanced patterns in this module, let's review five foundational prompting techniques. These are the building blocks that every prompt engineer should know. If you've already worked through the [Quick Start module](../00-quick-start/README.md#2-prompt-patterns), you've seen these in action — here's the conceptual framework behind them.
+Before diving into the advanced patterns in this module, let's review five foundational prompting techniques. These are the building blocks that every prompt engineer should know.
### Zero-Shot Prompting
@@ -384,6 +384,7 @@ The diagram below visualizes how conversation context accumulates with each turn
*How conversation context accumulates over multiple turns until reaching the token limit*
+
**Step-by-Step Reasoning** - For problems requiring visible logic. The model shows explicit reasoning for each step. Use this for math problems, logic puzzles, or when you need to understand the thinking process.
```java
@@ -401,7 +402,6 @@ String response = chatModel.chat(prompt);
The diagram below illustrates how the model breaks problems into explicit, numbered logical steps.
-
*Breaking down problems into explicit logical steps*
**Constrained Output** - For responses with specific format requirements. The model strictly follows format and length rules. Use this for summaries or when you need precise output structure.
@@ -604,5 +604,5 @@ Multi-turn conversations work by including message history with each request. Bu
**Disclaimer**:
-This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.
+This document has been translated using AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.
\ No newline at end of file
diff --git a/translations/en/03-rag/README.md b/translations/en/03-rag/README.md
index 45cfcd01f..850fecb32 100644
--- a/translations/en/03-rag/README.md
+++ b/translations/en/03-rag/README.md
@@ -2,29 +2,29 @@
## Table of Contents
-- [Video Walkthrough](../../../03-rag)
-- [What You'll Learn](../../../03-rag)
-- [Prerequisites](../../../03-rag)
-- [Understanding RAG](../../../03-rag)
- - [Which RAG Approach Does This Tutorial Use?](../../../03-rag)
-- [How It Works](../../../03-rag)
- - [Document Processing](../../../03-rag)
- - [Creating Embeddings](../../../03-rag)
- - [Semantic Search](../../../03-rag)
- - [Answer Generation](../../../03-rag)
-- [Run the Application](../../../03-rag)
-- [Using the Application](../../../03-rag)
- - [Upload a Document](../../../03-rag)
- - [Ask Questions](../../../03-rag)
- - [Check Source References](../../../03-rag)
- - [Experiment with Questions](../../../03-rag)
-- [Key Concepts](../../../03-rag)
- - [Chunking Strategy](../../../03-rag)
- - [Similarity Scores](../../../03-rag)
- - [In-Memory Storage](../../../03-rag)
- - [Context Window Management](../../../03-rag)
-- [When RAG Matters](../../../03-rag)
-- [Next Steps](../../../03-rag)
+- [Video Walkthrough](#video-walkthrough)
+- [What You'll Learn](#what-youll-learn)
+- [Prerequisites](#prerequisites)
+- [Understanding RAG](#understanding-rag)
+ - [Which RAG Approach Does This Tutorial Use?](#which-rag-approach-does-this-tutorial-use)
+- [How It Works](#how-it-works)
+ - [Document Processing](#document-processing)
+ - [Creating Embeddings](#creating-embeddings)
+ - [Semantic Search](#semantic-search)
+ - [Answer Generation](#answer-generation)
+- [Run the Application](#run-the-application)
+- [Using the Application](#using-the-application)
+ - [Upload a Document](#upload-a-document)
+ - [Ask Questions](#ask-questions)
+ - [Check Source References](#check-source-references)
+ - [Experiment with Questions](#experiment-with-questions)
+- [Key Concepts](#key-concepts)
+ - [Chunking Strategy](#chunking-strategy)
+ - [Similarity Scores](#similarity-scores)
+ - [In-Memory Storage](#in-memory-storage)
+ - [Context Window Management](#context-window-management)
+- [When RAG Matters](#when-rag-matters)
+- [Next Steps](#next-steps)
## Video Walkthrough
@@ -40,18 +40,17 @@ RAG (Retrieval-Augmented Generation) solves this problem. Instead of trying to t
Think of RAG as giving the model a reference library. When you ask a question, the system:
-1. **User Query** - You ask a question
-2. **Embedding** - Converts your question to a vector
-3. **Vector Search** - Finds similar document chunks
-4. **Context Assembly** - Adds relevant chunks to the prompt
+1. **User Query** - You ask a question
+2. **Embedding** - Converts your question to a vector
+3. **Vector Search** - Finds similar document chunks
+4. **Context Assembly** - Adds relevant chunks to the prompt
5. **Response** - LLM generates an answer based on the context
This grounds the model's responses in your actual data instead of relying on its training knowledge or making up answers.
## Prerequisites
-- Completed [Module 00 - Quick Start](../00-quick-start/README.md) (for the Easy RAG example referenced later in this module)
-- Completed [Module 01 - Introduction](../01-introduction/README.md) (Azure OpenAI resources deployed, including the `text-embedding-3-small` embedding model)
+- Completed [Module 01 - Introduction](../01-introduction/README.md) (Azure OpenAI resources deployed, including the `text-embedding-3-small` embedding model)
- `.env` file in root directory with Azure credentials (created by `azd up` in Module 01)
> **Note:** If you haven't completed Module 01, follow the deployment instructions there first. The `azd up` command deploys both the GPT chat model and the embedding model used by this module.
@@ -80,21 +79,21 @@ LangChain4j offers three ways to implement RAG, each with a different level of a
*This diagram compares the three LangChain4j RAG approaches — Easy, Native, and Advanced — showing their key components and when to use each one.*
-| Approach | What It Does | Trade-off |
-|---|---|---|
-| **Easy RAG** | Wires everything automatically through `AiServices` and `ContentRetriever`. You annotate an interface, attach a retriever, and LangChain4j handles embedding, searching, and prompt assembly behind the scenes. | Minimal code, but you don't see what's happening at each step. |
-| **Native RAG** | You call the embedding model, search the store, build the prompt, and generate the answer yourself — one explicit step at a time. | More code, but every stage is visible and modifiable. |
-| **Advanced RAG** | Uses the `RetrievalAugmentor` framework with pluggable query transformers, routers, re-rankers, and content injectors for production-grade pipelines. | Maximum flexibility, but significantly more complexity. |
+| Approach | What It Does | Trade-off |
+|--------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------|
+| **Easy RAG** | Wires everything automatically through `AiServices` and `ContentRetriever`. You annotate an interface, attach a retriever, and LangChain4j handles embedding, searching, and prompt assembly behind the scenes. | Minimal code, but you don't see what's happening at each step. |
+| **Native RAG** | You call the embedding model, search the store, build the prompt, and generate the answer yourself — one explicit step at a time. | More code, but every stage is visible and modifiable. |
+| **Advanced RAG** | Uses the `RetrievalAugmentor` framework with pluggable query transformers, routers, re-rankers, and content injectors for production-grade pipelines. | Maximum flexibility, but significantly more complexity. |
**This tutorial uses the Native approach.** Each step of the RAG pipeline — embedding the query, searching the vector store, assembling the context, and generating the answer — is written out explicitly in [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). This is intentional: as a learning resource, it's more important that you see and understand every stage than that the code is minimized. Once you're comfortable with how the pieces fit together, you can graduate to Easy RAG for quick prototypes or Advanced RAG for production systems.
-> **💡 Already seen Easy RAG in action?** The [Quick Start module](../00-quick-start/README.md) includes a Document Q&A example ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)) that uses the Easy RAG approach — LangChain4j handles embedding, searching, and prompt assembly automatically. This module takes the next step by breaking open that pipeline so you can see and control each stage yourself.
+> **💡 Curious about Easy RAG?** LangChain4j also offers an *Easy RAG* approach where `AiServices` and a `ContentRetriever` handle embedding, searching, and prompt assembly automatically. This module takes the more explicit path — breaking open that pipeline so you can see and control each stage yourself.
-The diagram below shows the Easy RAG pipeline from that Quick Start example. Notice how `AiServices` and `EmbeddingStoreContentRetriever` hide all the complexity — you load a document, attach a retriever, and get answers. The Native approach in this module breaks each of those hidden steps open:
+The diagram below shows the Easy RAG pipeline. Notice how `AiServices` and `EmbeddingStoreContentRetriever` hide all the complexity — you load a document, attach a retriever, and get answers. The Native approach in this module breaks each of those hidden steps open:
-*This diagram shows the Easy RAG pipeline from `SimpleReaderDemo.java`. Compare this with the Native approach used in this module: Easy RAG hides the embedding, retrieval, and prompt assembly behind `AiServices` and `ContentRetriever` — you load a document, attach a retriever, and get answers. The Native approach in this module breaks that pipeline open so you call each stage (embed, search, assemble context, generate) yourself, giving you full visibility and control.*
+*This diagram shows the Easy RAG pipeline. Compare this with the Native approach used in this module: Easy RAG hides the embedding, retrieval, and prompt assembly behind `AiServices` and `ContentRetriever` — you load a document, attach a retriever, and get answers. The Native approach in this module breaks that pipeline open so you call each stage (embed, search, assemble context, generate) yourself, giving you full visibility and control.*
## How It Works
@@ -123,9 +122,9 @@ The diagram below shows how this works visually. Notice how each chunk shares so
*This diagram shows a document being split into 300-token chunks with 30-token overlap, preserving context at chunk boundaries.*
-> **🤖 Try with [GitHub Copilot](https://github.com/features/copilot) Chat:** Open [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) and ask:
-> - "How does LangChain4j split documents into chunks and why is overlap important?"
-> - "What's the optimal chunk size for different document types and why?"
+> **🤖 Try with [GitHub Copilot](https://github.com/features/copilot) Chat:** Open [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) and ask:
+> - "How does LangChain4j split documents into chunks and why is overlap important?"
+> - "What's the optimal chunk size for different document types and why?"
> - "How do I handle documents in multiple languages or with special formatting?"
### Creating Embeddings
@@ -201,10 +200,10 @@ The diagram below contrasts semantic search with traditional keyword search. A k
*This diagram compares keyword-based search with semantic search, showing how semantic search retrieves conceptually related content even when exact keywords differ.*
+
Under the hood, similarity is measured using cosine similarity — essentially asking "are these two arrows pointing in the same direction?" Two chunks can use completely different words, but if they mean the same thing their vectors point the same way and score close to 1.0:
-
*This diagram illustrates cosine similarity as the angle between embedding vectors — more aligned vectors score closer to 1.0, indicating higher semantic similarity.*
> **🤖 Try with [GitHub Copilot](https://github.com/features/copilot) Chat:** Open [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) and ask:
@@ -433,5 +432,5 @@ RAG isn't always the right approach. The decision guide below helps you determin
**Disclaimer**:
-This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.
+This document has been translated using AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.
\ No newline at end of file
diff --git a/translations/en/04-tools/README.md b/translations/en/04-tools/README.md
index 4f2d11d4c..310543bd9 100644
--- a/translations/en/04-tools/README.md
+++ b/translations/en/04-tools/README.md
@@ -2,32 +2,32 @@
## Table of Contents
-- [Video Walkthrough](../../../04-tools)
-- [What You'll Learn](../../../04-tools)
-- [Prerequisites](../../../04-tools)
-- [Understanding AI Agents with Tools](../../../04-tools)
-- [How Tool Calling Works](../../../04-tools)
- - [Tool Definitions](../../../04-tools)
- - [Decision Making](../../../04-tools)
- - [Execution](../../../04-tools)
- - [Response Generation](../../../04-tools)
- - [Architecture: Spring Boot Auto-Wiring](../../../04-tools)
-- [Tool Chaining](../../../04-tools)
-- [Run the Application](../../../04-tools)
-- [Using the Application](../../../04-tools)
- - [Try Simple Tool Usage](../../../04-tools)
- - [Test Tool Chaining](../../../04-tools)
- - [See Conversation Flow](../../../04-tools)
- - [Experiment with Different Requests](../../../04-tools)
-- [Key Concepts](../../../04-tools)
- - [ReAct Pattern (Reasoning and Acting)](../../../04-tools)
- - [Tool Descriptions Matter](../../../04-tools)
- - [Session Management](../../../04-tools)
- - [Error Handling](../../../04-tools)
-- [Available Tools](../../../04-tools)
-- [When to Use Tool-Based Agents](../../../04-tools)
-- [Tools vs RAG](../../../04-tools)
-- [Next Steps](../../../04-tools)
+- [Video Walkthrough](#video-walkthrough)
+- [What You'll Learn](#what-youll-learn)
+- [Prerequisites](#prerequisites)
+- [Understanding AI Agents with Tools](#understanding-ai-agents-with-tools)
+- [How Tool Calling Works](#how-tool-calling-works)
+ - [Tool Definitions](#tool-definitions)
+ - [Decision Making](#decision-making)
+ - [Execution](#execution)
+ - [Response Generation](#response-generation)
+ - [Architecture: Spring Boot Auto-Wiring](#architecture-spring-boot-auto-wiring)
+- [Tool Chaining](#tool-chaining)
+- [Run the Application](#run-the-application)
+- [Using the Application](#using-the-application)
+ - [Try Simple Tool Usage](#try-simple-tool-usage)
+ - [Test Tool Chaining](#test-tool-chaining)
+ - [See Conversation Flow](#see-conversation-flow)
+ - [Experiment with Different Requests](#experiment-with-different-requests)
+- [Key Concepts](#key-concepts)
+ - [ReAct Pattern (Reasoning and Acting)](#react-pattern-reasoning-and-acting)
+ - [Tool Descriptions Matter](#tool-descriptions-matter)
+ - [Session Management](#session-management)
+ - [Error Handling](#error-handling)
+- [Available Tools](#available-tools)
+- [When to Use Tool-Based Agents](#when-to-use-tool-based-agents)
+- [Tools vs RAG](#tools-vs-rag)
+- [Next Steps](#next-steps)
## Video Walkthrough
@@ -133,11 +133,11 @@ Spring Boot auto-wires the declarative `@AiService` interface with all registere
*The end-to-end flow — the user asks a question, the model selects a tool, LangChain4j executes it, and the model weaves the result into a natural response.*
-If you ran the [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) in Module 00, you already saw this pattern in action — the `Calculator` tools were called the same way. The sequence diagram below shows exactly what happened under the hood during that demo:
+Behind the scenes, `AiServices` runs the same tool-calling loop for any tool — here illustrated with a simple `Calculator`. The sequence diagram below shows exactly what happens under the hood:
-*The tool-calling loop from the Quick Start demo — `AiServices` sends your message and tool schemas to the LLM, the LLM replies with a function call like `add(42, 58)`, LangChain4j executes the `Calculator` method locally, and feeds the result back for the final answer.*
+*The tool-calling loop — `AiServices` sends your message and tool schemas to the LLM, the LLM replies with a function call like `add(42, 58)`, LangChain4j executes the `Calculator` method locally, and feeds the result back for the final answer.*
> **🤖 Try with [GitHub Copilot](https://github.com/features/copilot) Chat:** Open [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) and ask:
> - "How does the ReAct pattern work and why is it effective for AI agents?"
@@ -218,10 +218,10 @@ From the Spring Boot Dashboard, you can:
- Start/stop applications with a single click
- View application logs in real-time
- Monitor application status
+
Simply click the play button next to "tools" to start this module, or start all modules at once.
Here's what the Spring Boot Dashboard looks like in VS Code:
-
*The Spring Boot Dashboard in VS Code — start, stop, and monitor all modules from one place*
diff --git a/translations/en/README.md b/translations/en/README.md
index 6113a3b1d..97ba4c068 100644
--- a/translations/en/README.md
+++ b/translations/en/README.md
@@ -34,12 +34,11 @@ A course for building AI applications with LangChain4j and Azure OpenAI GPT-5.2,
## Table of Contents
-1. [Quick Start](00-quick-start/README.md) - Get started with LangChain4j
-2. [Introduction](01-introduction/README.md) - Learn the fundamentals of LangChain4j
-3. [Prompt Engineering](02-prompt-engineering/README.md) - Master effective prompt design
-4. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Build intelligent knowledge-based systems
-5. [Tools](04-tools/README.md) - Integrate external tools and simple assistants
-6. [MCP (Model Context Protocol)](05-mcp/README.md) - Work with the Model Context Protocol (MCP) and Agentic modules
+1. [Introduction](01-introduction/README.md) - Learn the fundamentals of LangChain4j
+2. [Prompt Engineering](02-prompt-engineering/README.md) - Master effective prompt design
+3. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Build intelligent knowledge-based systems
+4. [Tools](04-tools/README.md) - Integrate external tools and simple assistants
+5. [MCP (Model Context Protocol)](05-mcp/README.md) - Work with the Model Context Protocol (MCP) and Agentic modules
### Video Walkthroughs
@@ -65,11 +64,11 @@ Each module has a companion live session where we walk through the concepts and
3. Use the defaults – this will select the Development container created for this course
4. Click **Create codespace**
5. Wait 5-10 minutes for the environment to be ready
-6. Jump straight to [Quick Start](./00-quick-start/README.md) to get started!
+6. Jump straight to [Introduction](./01-introduction/README.md) to get started!
After completing the modules, explore the [Testing Guide](docs/TESTING.md) to see LangChain4j testing concepts in action.
-> **Note:** This training uses both GitHub Models and Azure OpenAI. The [Quick Start](00-quick-start/README.md) module uses GitHub Models (no Azure subscription required), while modules 1-5 use Azure OpenAI. Get started with a [FREE Azure account](https://aka.ms/azure-free-account) if you don't have one.
+> **Note:** This training uses Azure OpenAI. Get started with a [FREE Azure account](https://aka.ms/azure-free-account) if you don't have one.
## Learning with GitHub Copilot
@@ -145,6 +144,6 @@ MIT License - See [LICENSE](../../LICENSE) file for details.
---
-**Disclaimer**:
-This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.
+**Disclaimer**:
+This document has been translated using AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.
\ No newline at end of file
diff --git a/translations/en/docs/GLOSSARY.md b/translations/en/docs/GLOSSARY.md
index a2cd503a9..4ec51ece8 100644
--- a/translations/en/docs/GLOSSARY.md
+++ b/translations/en/docs/GLOSSARY.md
@@ -2,17 +2,17 @@
## Table of Contents
-- [Core Concepts](../../../docs)
-- [LangChain4j Components](../../../docs)
-- [AI/ML Concepts](../../../docs)
-- [Guardrails](../../../docs)
-- [Prompt Engineering](../../../docs)
-- [RAG (Retrieval-Augmented Generation)](../../../docs)
-- [Agents and Tools](../../../docs)
-- [Agentic Module](../../../docs)
-- [Model Context Protocol (MCP)](../../../docs)
-- [Azure Services](../../../docs)
-- [Testing and Development](../../../docs)
+- [Core Concepts](#core-concepts)
+- [LangChain4j Components](#langchain4j-components)
+- [AI/ML Concepts](#aiml-concepts)
+- [Guardrails](#guardrails)
+- [Prompt Engineering](#prompt-engineering---module-02)
+- [RAG (Retrieval-Augmented Generation)](#rag-retrieval-augmented-generation---module-03)
+- [Agents and Tools](#agents-and-tools---module-04)
+- [Agentic Module](#agentic-module---module-05)
+- [Model Context Protocol (MCP)](#model-context-protocol-mcp---module-05)
+- [Azure Services](#azure-services---module-01)
+- [Testing and Development](#testing-and-development---testing-guide)
Quick reference for terms and concepts used throughout the course.
@@ -86,7 +86,7 @@ Quick reference for terms and concepts used throughout the course.
**Zero-Shot Learning** - Performing tasks without examples. [Module 02](../02-prompt-engineering/README.md)
-## Guardrails - [Module 00](../00-quick-start/README.md)
+## Guardrails
**Defense in Depth** - Multi-layer security approach combining application-level guardrails with provider safety filters.
@@ -98,7 +98,7 @@ Quick reference for terms and concepts used throughout the course.
**OutputGuardrail** - Interface for validating AI responses before returning to users.
-**Provider Safety Filters** - Built-in content filters from AI providers (e.g., GitHub Models) that catch violations at the API level.
+**Provider Safety Filters** - Built-in content filters from AI providers (e.g., Azure OpenAI) that catch violations at the API level.
**Soft Refusal** - Model politely declines to answer without throwing an error.
@@ -212,8 +212,6 @@ Quick reference for terms and concepts used throughout the course.
**Dev Container** - Containerized development environment. [Configuration](../../../.devcontainer/devcontainer.json)
-**GitHub Models** - Free AI model playground. [Module 00](../00-quick-start/README.md)
-
**In-Memory Testing** - Testing with in-memory storage.
**Integration Testing** - Testing with real infrastructure.
@@ -228,5 +226,5 @@ Quick reference for terms and concepts used throughout the course.
**Disclaimer**:
-This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.
+This document has been translated using AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.
\ No newline at end of file
diff --git a/translations/en/docs/TESTING.md b/translations/en/docs/TESTING.md
index 1b4a36fe0..a9cf78739 100644
--- a/translations/en/docs/TESTING.md
+++ b/translations/en/docs/TESTING.md
@@ -2,13 +2,13 @@
## Table of Contents
-- [Quick Start](../../../docs)
-- [What the Tests Cover](../../../docs)
-- [Running the Tests](../../../docs)
-- [Running Tests in VS Code](../../../docs)
-- [Testing Patterns](../../../docs)
-- [Testing Philosophy](../../../docs)
-- [Next Steps](../../../docs)
+- [Quick Start](#quick-start)
+- [What the Tests Cover](#what-the-tests-cover)
+- [Running the Tests](#running-the-tests)
+- [Running Tests in VS Code](#running-tests-in-vs-code)
+- [Testing Patterns](#testing-patterns)
+- [Testing Philosophy](#testing-philosophy)
+- [Next Steps](#next-steps)
This guide walks you through the tests that demonstrate how to test AI applications without requiring API keys or external services.
@@ -42,7 +42,6 @@ This course focuses on **unit tests** that run locally. Each test demonstrates a
| Module | Tests | Focus | Key Files |
|--------|-------|-------|-----------|
-| **00 - Quick Start** | 6 | Prompt templates and variable substitution | `SimpleQuickStartTest.java` |
| **01 - Introduction** | 8 | Conversation memory and stateful chat | `SimpleConversationTest.java` |
| **02 - Prompt Engineering** | 12 | GPT-5.2 patterns, eagerness levels, structured output | `SimpleGpt5PromptTest.java` |
| **03 - RAG** | 10 | Document ingestion, embeddings, similarity search | `DocumentServiceTest.java` |
@@ -100,7 +99,7 @@ mvn test -Dtest=SimpleConversationTest#shouldMaintainConversationHistory
**PowerShell:**
```powershell
-mvn --% test -Dtest=SimpleConversationTest#should maintain conversation history
+mvn --% test -Dtest=SimpleConversationTest#shouldMaintainConversationHistory
```
## Running Tests in VS Code
@@ -148,19 +147,7 @@ void testPromptTemplateFormatting() {
}
```
-This test lives in `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
-
-**Run it:**
-
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#testPromptTemplateFormatting
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#testPromptTemplateFormatting
-```
+This pattern verifies that variable substitution works correctly and prompts are formatted as expected — no API key or model call required.
### Pattern 2: Mocking Language Models
@@ -342,7 +329,6 @@ Use descriptive names. Compare `shouldMaintainConversationHistoryAcrossMultipleM
Now that you understand the testing patterns, dive deeper into each module:
-- **[00 - Quick Start](../00-quick-start/README.md)** - Start with prompt template basics
- **[01 - Introduction](../01-introduction/README.md)** - Learn conversation memory management
- **[02 - Prompt Engineering](../02-prompt-engineering/README.md)** - Master GPT-5.2 prompting patterns
- **[03 - RAG](../03-rag/README.md)** - Build retrieval-augmented generation systems
@@ -359,5 +345,5 @@ Each module's README provides detailed explanations of the concepts tested here.
**Disclaimer**:
-This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.
+This document has been translated using AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.
\ No newline at end of file
diff --git a/translations/es/.co-op-translator.json b/translations/es/.co-op-translator.json
index 2d161a933..60bab8ec1 100644
--- a/translations/es/.co-op-translator.json
+++ b/translations/es/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "es"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-02T18:33:45+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T07:10:17+00:00",
"source_file": "01-introduction/README.md",
"language_code": "es"
},
@@ -18,20 +18,20 @@
"language_code": "es"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-02T18:36:23+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T07:05:13+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "es"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-02T18:38:06+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T07:09:25+00:00",
"source_file": "03-rag/README.md",
"language_code": "es"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T08:19:56+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T07:08:09+00:00",
"source_file": "04-tools/README.md",
"language_code": "es"
},
@@ -54,8 +54,8 @@
"language_code": "es"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T15:32:13+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T07:03:18+00:00",
"source_file": "README.md",
"language_code": "es"
},
@@ -72,14 +72,14 @@
"language_code": "es"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-02T18:41:35+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T07:05:48+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "es"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-02T18:42:26+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T07:06:23+00:00",
"source_file": "docs/TESTING.md",
"language_code": "es"
}
diff --git a/translations/es/00-quick-start/README.md b/translations/es/00-quick-start/README.md
deleted file mode 100644
index 8cb9548cd..000000000
--- a/translations/es/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# Module 00: Inicio rápido
-
-## Tabla de contenidos
-
-- [Introducción](../../../00-quick-start)
-- [¿Qué es LangChain4j?](../../../00-quick-start)
-- [Dependencias de LangChain4j](../../../00-quick-start)
-- [Requisitos previos](../../../00-quick-start)
-- [Configuración](../../../00-quick-start)
- - [1. Obtén tu token de GitHub](../../../00-quick-start)
- - [2. Configura tu token](../../../00-quick-start)
-- [Ejecuta los ejemplos](../../../00-quick-start)
- - [1. Chat básico](../../../00-quick-start)
- - [2. Patrones de solicitud](../../../00-quick-start)
- - [3. Llamada a funciones](../../../00-quick-start)
- - [4. Preguntas y respuestas sobre documentos (Easy RAG)](../../../00-quick-start)
- - [5. IA responsable](../../../00-quick-start)
-- [Qué muestra cada ejemplo](../../../00-quick-start)
-- [Próximos pasos](../../../00-quick-start)
-- [Solución de problemas](../../../00-quick-start)
-
-## Introducción
-
-Este inicio rápido está diseñado para que puedas comenzar a trabajar con LangChain4j lo más rápido posible. Cubre lo básico absoluto para construir aplicaciones de IA con LangChain4j y GitHub Models. En los próximos módulos cambiarás a Azure OpenAI y GPT-5.2 y profundizarás en cada concepto.
-
-## ¿Qué es LangChain4j?
-
-LangChain4j es una biblioteca Java que simplifica la creación de aplicaciones impulsadas por IA. En lugar de lidiar con clientes HTTP y análisis de JSON, trabajas con APIs Java limpias.
-
-La "cadena" en LangChain se refiere a encadenar múltiples componentes: podrías encadenar un prompt a un modelo, luego a un parser, o encadenar múltiples llamadas de IA donde la salida de una alimenta la entrada siguiente. Este inicio rápido se enfoca en los fundamentos antes de explorar cadenas más complejas.
-
-
-
-*Encadenar componentes en LangChain4j: bloques de construcción que se conectan para crear flujos de trabajo de IA potentes*
-
-Usaremos tres componentes principales:
-
-**ChatModel** - La interfaz para interacciones con modelos de IA. Llama a `model.chat("prompt")` y recibe una respuesta como cadena. Usamos `OpenAiOfficialChatModel` que funciona con endpoints compatibles con OpenAI como GitHub Models.
-
-**AiServices** - Crea interfaces de servicio AI con tipado seguro. Define métodos, anótalos con `@Tool` y LangChain4j maneja la orquestación. La IA llama automáticamente a tus métodos Java cuando es necesario.
-
-**MessageWindowChatMemory** - Mantiene el historial de conversación. Sin esto, cada petición es independiente. Con él, la IA recuerda mensajes previos y mantiene el contexto a través de múltiples intervenciones.
-
-
-
-*Arquitectura de LangChain4j: componentes principales que trabajan juntos para potenciar tus aplicaciones de IA*
-
-## Dependencias de LangChain4j
-
-Este inicio rápido usa tres dependencias Maven en el [`pom.xml`](../../../00-quick-start/pom.xml):
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-El módulo `langchain4j-open-ai-official` provee la clase `OpenAiOfficialChatModel` que conecta con APIs compatibles con OpenAI. GitHub Models usa el mismo formato de API, por lo que no se necesita un adaptador especial — solo apunta la URL base a `https://models.github.ai/inference`.
-
-El módulo `langchain4j-easy-rag` provee división automática de documentos, generación de embeddings y recuperación para que puedas construir aplicaciones RAG sin configurar cada paso manualmente.
-
-## Requisitos previos
-
-**¿Usando el contenedor Dev?** Java y Maven ya están instalados. Solo necesitas un Token de Acceso Personal de GitHub.
-
-**Desarrollo local:**
-- Java 21+, Maven 3.9+
-- Token de Acceso Personal de GitHub (instrucciones abajo)
-
-> **Nota:** Este módulo usa `gpt-4.1-nano` de GitHub Models. No modifiques el nombre del modelo en el código — está configurado para funcionar con los modelos disponibles de GitHub.
-
-## Configuración
-
-### 1. Obtén tu token de GitHub
-
-1. Ve a [Configuración de GitHub → Tokens de acceso personal](https://github.com/settings/personal-access-tokens)
-2. Haz clic en "Generate new token" (Generar nuevo token)
-3. Asigna un nombre descriptivo (p. ej., "Demo LangChain4j")
-4. Configura la expiración (7 días recomendado)
-5. En "Permisos de la cuenta", busca "Models" y ponlo en "Solo lectura"
-6. Haz clic en "Generate token" (Generar token)
-7. Copia y guarda tu token — no lo verás de nuevo
-
-### 2. Configura tu token
-
-**Opción 1: Usando VS Code (Recomendado)**
-
-Si usas VS Code, agrega tu token al archivo `.env` en la raíz del proyecto:
-
-Si el archivo `.env` no existe, copia `.env.example` a `.env` o crea un archivo `.env` nuevo en la raíz del proyecto.
-
-**Ejemplo de archivo `.env`:**
-```bash
-# En /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-Luego simplemente haz clic derecho en cualquier archivo demo (p. ej., `BasicChatDemo.java`) en el Explorador y selecciona **"Run Java"** o usa las configuraciones de ejecución desde el panel Ejecutar y Depurar.
-
-**Opción 2: Usando Terminal**
-
-Configura el token como variable de entorno:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## Ejecuta los ejemplos
-
-**Usando VS Code:** Simplemente haz clic derecho en cualquier archivo demo en el Explorador y selecciona **"Run Java"**, o usa las configuraciones desde el panel Ejecutar y Depurar (asegúrate de haber agregado tu token al archivo `.env` primero).
-
-**Usando Maven:** Alternativamente, puedes ejecutar desde línea de comandos:
-
-### 1. Chat básico
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. Patrones de solicitud
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-Muestra zero-shot, few-shot, cadena de pensamiento y solicitudes basadas en roles.
-
-### 3. Llamada a funciones
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-La IA llama automáticamente a tus métodos Java cuando es necesario.
-
-### 4. Preguntas y respuestas sobre documentos (Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-Haz preguntas sobre tus documentos usando Easy RAG con embedding y recuperación automáticos.
-
-### 5. IA responsable
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-Ve cómo los filtros de seguridad de IA bloquean contenido dañino.
-
-## Qué muestra cada ejemplo
-
-**Chat básico** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-Comienza aquí para ver LangChain4j en su forma más simple. Crearás un `OpenAiOfficialChatModel`, enviarás un prompt con `.chat()` y recibirás una respuesta. Esto demuestra la base: cómo inicializar modelos con endpoints y claves API personalizadas. Una vez entiendas este patrón, todo lo demás se construye sobre él.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 Prueba con [GitHub Copilot](https://github.com/features/copilot) Chat:** Abre [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) y pregunta:
-> - "¿Cómo cambiaría de GitHub Models a Azure OpenAI en este código?"
-> - "¿Qué otros parámetros puedo configurar en OpenAiOfficialChatModel.builder()?"
-> - "¿Cómo agrego respuestas en streaming en lugar de esperar la respuesta completa?"
-
-**Ingeniería de prompts** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-Ahora que sabes cómo hablar con un modelo, exploremos qué le dices. Esta demo usa la misma configuración de modelo pero muestra cinco patrones de prompt diferentes. Prueba prompts zero-shot para instrucciones directas, few-shot que aprenden de ejemplos, cadena de pensamiento que revela pasos de razonamiento y prompts basados en roles que establecen contexto. Verás cómo el mismo modelo da resultados muy distintos según cómo plantees la petición.
-
-La demo también muestra plantillas de prompt, que son una forma poderosa de crear prompts reutilizables con variables.
-El siguiente ejemplo muestra un prompt usando la `PromptTemplate` de LangChain4j para rellenar variables. La IA responderá basado en el destino y la actividad proporcionados.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 Prueba con [GitHub Copilot](https://github.com/features/copilot) Chat:** Abre [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) y pregunta:
-> - "¿Cuál es la diferencia entre zero-shot y few-shot prompting, y cuándo debería usar cada uno?"
-> - "¿Cómo afecta el parámetro temperature las respuestas del modelo?"
-> - "¿Cuáles son algunas técnicas para prevenir ataques de inyección de prompt en producción?"
-> - "¿Cómo puedo crear objetos PromptTemplate reutilizables para patrones comunes?"
-
-**Integración de herramientas** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-Aquí es donde LangChain4j se vuelve potente. Usarás `AiServices` para crear un asistente de IA capaz de llamar a tus métodos Java. Solo anota los métodos con `@Tool("descripción")` y LangChain4j hace el resto — la IA decide automáticamente cuándo usar cada herramienta según lo que el usuario pida. Esto demuestra la llamada a funciones, una técnica clave para construir IA que puede tomar acciones, no solo responder preguntas.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 Prueba con [GitHub Copilot](https://github.com/features/copilot) Chat:** Abre [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) y pregunta:
-> - "¿Cómo funciona la anotación @Tool y qué hace LangChain4j con ella detrás de escena?"
-> - "¿Puede la IA llamar a múltiples herramientas en secuencia para resolver problemas complejos?"
-> - "¿Qué pasa si una herramienta lanza una excepción - cómo debo manejar errores?"
-> - "¿Cómo integraría una API real en lugar de este ejemplo calculadora?"
-
-**Preguntas y respuestas sobre documentos (Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-Aquí verás RAG (generación aumentada por recuperación) usando el enfoque "Easy RAG" de LangChain4j. Se cargan documentos, se dividen y embeben automáticamente en un almacén en memoria, luego un recuperador de contenido suministra fragmentos relevantes a la IA al consultar. La IA responde basado en tus documentos, no en su conocimiento general.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 Prueba con [GitHub Copilot](https://github.com/features/copilot) Chat:** Abre [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) y pregunta:
-> - "¿Cómo previene RAG las alucinaciones de IA en comparación con usar los datos de entrenamiento del modelo?"
-> - "¿Cuál es la diferencia entre este enfoque fácil y una tubería RAG personalizada?"
-> - "¿Cómo escalaría esto para manejar múltiples documentos o bases de conocimiento más grandes?"
-
-**IA responsable** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-Construye seguridad en IA con defensa en profundidad. Esta demo muestra dos capas de protección trabajando juntas:
-
-**Parte 1: LangChain4j Input Guardrails** - Bloquea prompts peligrosos antes de que lleguen al LLM. Crea guardrails personalizados que revisen palabras clave o patrones prohibidos. Estos corren en tu código, son rápidos y gratuitos.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**Parte 2: Filtros de seguridad del proveedor** - GitHub Models tiene filtros integrados que atrapan lo que tus guardrails podrían pasar por alto. Verás bloqueos duros (errores HTTP 400) por violaciones severas y rechazos suaves donde la IA se niega cortésmente.
-
-> **🤖 Prueba con [GitHub Copilot](https://github.com/features/copilot) Chat:** Abre [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) y pregunta:
-> - "¿Qué es InputGuardrail y cómo creo el mío?"
-> - "¿Cuál es la diferencia entre un bloqueo duro y un rechazo suave?"
-> - "¿Por qué usar guardrails y filtros del proveedor juntos?"
-
-## Próximos pasos
-
-**Siguiente módulo:** [01-introduction - Comenzando con LangChain4j](../01-introduction/README.md)
-
----
-
-**Navegación:** [← Volver al principal](../README.md) | [Siguiente: Módulo 01 - Introducción →](../01-introduction/README.md)
-
----
-
-## Solución de problemas
-
-### Primera compilación Maven
-
-**Problema**: El comando inicial `mvn clean compile` o `mvn package` tarda mucho (10-15 minutos)
-
-**Causa**: Maven necesita descargar todas las dependencias del proyecto (Spring Boot, librerías LangChain4j, SDKs de Azure, etc.) en la primera compilación.
-
-**Solución**: Este comportamiento es normal. Las compilaciones posteriores serán mucho más rápidas porque las dependencias se almacenan en caché localmente. El tiempo de descarga depende de la velocidad de tu red.
-
-### Sintaxis del comando Maven en PowerShell
-
-**Problema**: Los comandos Maven fallan con el error `Unknown lifecycle phase ".mainClass=..."`
-**Causa**: PowerShell interpreta `=` como un operador de asignación de variable, rompiendo la sintaxis de propiedades de Maven
-
-**Solución**: Use el operador de parada de análisis `--%` antes del comando Maven:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-El operador `--%` indica a PowerShell que pase todos los argumentos restantes literalmente a Maven sin interpretarlos.
-
-### Visualización de emojis en Windows PowerShell
-
-**Problema**: Las respuestas de IA muestran caracteres basura (por ejemplo, `????` o `â??`) en lugar de emojis en PowerShell
-
-**Causa**: La codificación predeterminada de PowerShell no soporta emojis UTF-8
-
-**Solución**: Ejecute este comando antes de ejecutar aplicaciones Java:
-```cmd
-chcp 65001
-```
-
-Esto fuerza la codificación UTF-8 en la terminal. Alternativamente, use Windows Terminal que tiene mejor soporte para Unicode.
-
-### Depuración de llamadas a la API
-
-**Problema**: Errores de autenticación, límites de tasa o respuestas inesperadas del modelo de IA
-
-**Solución**: Los ejemplos incluyen `.logRequests(true)` y `.logResponses(true)` para mostrar llamadas a la API en la consola. Esto ayuda a solucionar errores de autenticación, límites de tasa o respuestas inesperadas. Elimine estas banderas en producción para reducir el ruido del registro.
-
----
-
-
-**Aviso Legal**:
-Este documento ha sido traducido utilizando el servicio de traducción AI [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la exactitud, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas derivadas del uso de esta traducción.
-
\ No newline at end of file
diff --git a/translations/es/01-introduction/README.md b/translations/es/01-introduction/README.md
index 17204615c..a92c693e2 100644
--- a/translations/es/01-introduction/README.md
+++ b/translations/es/01-introduction/README.md
@@ -1,87 +1,87 @@
-# Módulo 01: Comenzando con LangChain4j
+# Módulo 01: Introducción a LangChain4j
## Tabla de Contenidos
-- [Recorrido en Video](../../../01-introduction)
-- [Lo Que Aprenderás](../../../01-introduction)
-- [Prerrequisitos](../../../01-introduction)
-- [Entendiendo el Problema Central](../../../01-introduction)
-- [Entendiendo los Tokens](../../../01-introduction)
-- [Cómo Funciona la Memoria](../../../01-introduction)
-- [Cómo Esto Usa LangChain4j](../../../01-introduction)
-- [Implementar Infraestructura Azure OpenAI](../../../01-introduction)
-- [Ejecutar la Aplicación Localmente](../../../01-introduction)
-- [Usando la Aplicación](../../../01-introduction)
- - [Chat Sin Estado (Panel Izquierdo)](../../../01-introduction)
- - [Chat con Estado (Panel Derecho)](../../../01-introduction)
-- [Próximos Pasos](../../../01-introduction)
-
-## Recorrido en Video
+- [Video Tutorial](#video-tutorial)
+- [Lo que Aprenderás](#lo-que-aprenderás)
+- [Requisitos Previos](#requisitos-previos)
+- [Comprendiendo el Problema Central](#comprendiendo-el-problema-central)
+- [Comprendiendo los Tokens](#comprendiendo-los-tokens)
+- [Cómo Funciona la Memoria](#cómo-funciona-la-memoria)
+- [Cómo Esto Usa LangChain4j](#cómo-esto-usa-langchain4j)
+- [Desplegar Infraestructura Azure OpenAI](#desplegar-infraestructura-azure-openai)
+- [Ejecutar la Aplicación Localmente](#ejecutar-la-aplicación-localmente)
+- [Usando la Aplicación](#usando-la-aplicación)
+ - [Chat Sin Estado (Panel Izquierdo)](#chat-sin-estado-panel-izquierdo)
+ - [Chat Con Estado (Panel Derecho)](#chat-con-estado-panel-derecho)
+- [Próximos Pasos](#próximos-pasos)
+
+## Video Tutorial
Mira esta sesión en vivo que explica cómo comenzar con este módulo:
-## Lo Que Aprenderás
+## Lo que Aprenderás
-En el inicio rápido, usaste Modelos de GitHub para enviar indicaciones, llamar herramientas, construir una tubería RAG y probar límites de seguridad. Esas demostraciones mostraron lo que es posible — ahora cambiamos a Azure OpenAI y GPT-5.2 para comenzar a construir aplicaciones al estilo producción. Este módulo se enfoca en IA conversacional que recuerda contexto y mantiene estado — los conceptos que esos demos de inicio rápido usaron detrás de escena pero no explicaron.
+Este es tu punto de partida con LangChain4j y Azure OpenAI. Comenzamos con los fundamentos y empezamos a construir aplicaciones de estilo producción. Este módulo se centra en IA conversacional que recuerda el contexto y mantiene el estado — los conceptos fundamentales sobre los que se construyen todos los módulos posteriores.
Usaremos GPT-5.2 de Azure OpenAI a lo largo de esta guía porque sus capacidades avanzadas de razonamiento hacen que el comportamiento de diferentes patrones sea más evidente. Cuando agregas memoria, verás claramente la diferencia. Esto facilita entender qué aporta cada componente a tu aplicación.
Construirás una aplicación que demuestra ambos patrones:
-**Chat Sin Estado** - Cada solicitud es independiente. El modelo no recuerda mensajes previos. Este es el patrón que usaste en el inicio rápido.
+**Chat Sin Estado** - Cada solicitud es independiente. El modelo no tiene memoria de mensajes anteriores. Este es el punto de partida más simple.
-**Conversación con Estado** - Cada solicitud incluye el historial de la conversación. El modelo mantiene el contexto a través de múltiples interacciones. Esto es lo que requieren las aplicaciones en producción.
+**Conversación Con Estado** - Cada solicitud incluye el historial de la conversación. El modelo mantiene el contexto a través de múltiples intercambios. Esto es lo que requieren las aplicaciones de producción.
-## Prerrequisitos
+## Requisitos Previos
-- Suscripción de Azure con acceso a Azure OpenAI
-- Java 21, Maven 3.9+
+- Suscripción Azure con acceso a Azure OpenAI
+- Java 21, Maven 3.9+
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
> **Nota:** Java, Maven, Azure CLI y Azure Developer CLI (azd) están preinstalados en el devcontainer proporcionado.
-> **Nota:** Este módulo usa GPT-5.2 en Azure OpenAI. La implementación se configura automáticamente vía `azd up` - no modifiques el nombre del modelo en el código.
+> **Nota:** Este módulo usa GPT-5.2 en Azure OpenAI. El despliegue se configura automáticamente mediante `azd up` - no modifiques el nombre del modelo en el código.
-## Entendiendo el Problema Central
+## Comprendiendo el Problema Central
-Los modelos de lenguaje no mantienen estado. Cada llamada a la API es independiente. Si envías "Me llamo Juan" y luego preguntas "¿Cómo me llamo?", el modelo no sabe que acabas de presentarte. Trata cada solicitud como si fuera la primera conversación que tienes.
+Los modelos de lenguaje son sin estado. Cada llamada a la API es independiente. Si envías "Mi nombre es John" y luego preguntas "¿Cuál es mi nombre?", el modelo no tiene idea de que acabas de presentarte. Trata cada solicitud como si fuera la primera conversación que tienes.
-Esto está bien para preguntas y respuestas simples pero no sirve para aplicaciones reales. Los bots de atención al cliente necesitan recordar lo que les dijiste. Los asistentes personales necesitan contexto. Cualquier conversación de múltiples turnos requiere memoria.
+Esto está bien para preguntas y respuestas simples, pero es inútil para aplicaciones reales. Los bots de atención al cliente necesitan recordar lo que les dijiste. Los asistentes personales necesitan contexto. Cualquier conversación con múltiples intercambios requiere memoria.
El siguiente diagrama contrasta los dos enfoques — a la izquierda, una llamada sin estado que olvida tu nombre; a la derecha, una llamada con estado respaldada por ChatMemory que lo recuerda.
-
+
-*La diferencia entre conversaciones sin estado (llamadas independientes) y con estado (con consciencia de contexto)*
+*La diferencia entre conversaciones sin estado (llamadas independientes) y con estado (con conocimiento del contexto)*
-## Entendiendo los Tokens
+## Comprendiendo los Tokens
-Antes de adentrarnos en las conversaciones, es importante entender los tokens - las unidades básicas de texto que procesan los modelos de lenguaje:
+Antes de profundizar en las conversaciones, es importante entender los tokens - las unidades básicas de texto que procesan los modelos de lenguaje:
-*Ejemplo de cómo el texto se divide en tokens - "I love AI!" se convierte en 4 unidades separadas para procesamiento*
+*Ejemplo de cómo el texto se descompone en tokens - "¡Me encanta la IA!" se convierte en 4 unidades de procesamiento separadas*
-Los tokens son cómo los modelos de IA miden y procesan texto. Palabras, puntuación e incluso espacios pueden ser tokens. Tu modelo tiene un límite de cuántos tokens puede procesar a la vez (400,000 para GPT-5.2, con hasta 272,000 tokens de entrada y 128,000 de salida). Entender los tokens te ayuda a manejar la longitud de la conversación y los costos.
+Los tokens son cómo los modelos de IA miden y procesan texto. Las palabras, la puntuación e incluso los espacios pueden ser tokens. Tu modelo tiene un límite de cuántos tokens puede procesar a la vez (400,000 para GPT-5.2, con hasta 272,000 tokens de entrada y 128,000 tokens de salida). Entender los tokens te ayuda a manejar la longitud de la conversación y los costos.
## Cómo Funciona la Memoria
-La memoria de chat resuelve el problema de no mantener estado al conservar el historial de la conversación. Antes de enviar tu solicitud al modelo, el framework antepone mensajes previos relevantes. Cuando preguntas "¿Cómo me llamo?", el sistema en realidad envía todo el historial de la conversación, permitiendo al modelo ver que previamente dijiste "Me llamo Juan."
+La memoria de chat resuelve el problema sin estado manteniendo el historial de la conversación. Antes de enviar tu solicitud al modelo, el framework antepone los mensajes previos relevantes. Cuando preguntas "¿Cuál es mi nombre?", el sistema envía en realidad todo el historial de la conversación, permitiendo que el modelo vea que previamente dijiste "Mi nombre es John."
-LangChain4j provee implementaciones de memoria que manejan esto automáticamente. Tú eliges cuántos mensajes conservar y el framework administra la ventana de contexto. El siguiente diagrama muestra cómo MessageWindowChatMemory mantiene una ventana deslizante de mensajes recientes.
+LangChain4j provee implementaciones de memoria que manejan esto automáticamente. Tú eliges cuántos mensajes conservar y el framework gestiona la ventana de contexto. El diagrama a continuación muestra cómo MessageWindowChatMemory mantiene una ventana deslizante de mensajes recientes.
-*MessageWindowChatMemory mantiene una ventana deslizante de mensajes recientes, descartando automáticamente los más antiguos*
+*MessageWindowChatMemory mantiene una ventana deslizante de mensajes recientes, descartando automáticamente los antiguos*
## Cómo Esto Usa LangChain4j
-Este módulo extiende el inicio rápido integrando Spring Boot y añadiendo memoria a la conversación. Así es como encajan las piezas:
+Este módulo integra Spring Boot y añade memoria de conversación. Así es como encajan las piezas:
-**Dependencias** - Añade dos librerías de LangChain4j:
+**Dependencias** - Agrega dos librerías de LangChain4j:
```xml
@@ -109,7 +109,7 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-El constructor lee credenciales de variables de entorno establecidas por `azd up`. Configurar `baseUrl` a tu endpoint de Azure hace que el cliente OpenAI funcione con Azure OpenAI.
+El builder lee las credenciales de variables de ambiente establecidas por `azd up`. Configurar `baseUrl` con tu endpoint de Azure hace que el cliente OpenAI funcione con Azure OpenAI.
**Memoria de Conversación** - Rastrea el historial del chat con MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
@@ -124,16 +124,16 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-Crea la memoria con `withMaxMessages(10)` para conservar los últimos 10 mensajes. Añade mensajes de usuario e IA con los envoltorios tipados: `UserMessage.from(text)` y `AiMessage.from(text)`. Recupera el historial con `memory.messages()` y envíalo al modelo. El servicio almacena instancias de memoria separadas por ID de conversación, permitiendo que múltiples usuarios chateen simultáneamente.
+Crea la memoria con `withMaxMessages(10)` para conservar los últimos 10 mensajes. Añade mensajes de usuario y AI con wrappers tipados: `UserMessage.from(text)` y `AiMessage.from(text)`. Recupera el historial con `memory.messages()` y envíalo al modelo. El servicio almacena instancias de memoria separadas por ID de conversación, permitiendo que múltiples usuarios chateen simultáneamente.
> **🤖 Prueba con [GitHub Copilot](https://github.com/features/copilot) Chat:** Abre [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) y pregunta:
-> - "¿Cómo decide MessageWindowChatMemory qué mensajes eliminar cuando la ventana está llena?"
+> - "¿Cómo decide MessageWindowChatMemory qué mensajes descartar cuando la ventana está llena?"
> - "¿Puedo implementar almacenamiento de memoria personalizado usando una base de datos en lugar de memoria en RAM?"
-> - "¿Cómo agregaría una función de resumen para comprimir históricamente conversaciones antiguas?"
+> - "¿Cómo añadiría resumen para comprimir el historial antiguo de la conversación?"
-El endpoint de chat sin estado omite la memoria por completo - solo `chatModel.chat(prompt)` como en el inicio rápido. El endpoint con estado añade mensajes a la memoria, recupera el historial e incluye ese contexto con cada solicitud. Misma configuración del modelo, diferentes patrones.
+El endpoint de chat sin estado omite la memoria por completo - sólo `chatModel.chat(prompt)` como en el inicio rápido. El endpoint con estado añade mensajes a la memoria, recupera el historial e incluye ese contexto en cada solicitud. Mismo modelo, diferentes patrones.
-## Implementar Infraestructura Azure OpenAI
+## Desplegar Infraestructura Azure OpenAI
**Bash:**
```bash
@@ -147,16 +147,16 @@ cd 01-introduction
azd up # Seleccione la suscripción y la ubicación (se recomienda eastus2)
```
-> **Nota:** Si encuentras un error de tiempo de espera (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), simplemente ejecuta `azd up` nuevamente. Los recursos de Azure aún podrían estar aprovisionándose en segundo plano, y reintentar permite que la implementación se complete una vez que los recursos alcancen un estado final.
+> **Nota:** Si encuentras un error de timeout (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), simplemente ejecuta `azd up` nuevamente. Los recursos de Azure pueden estar todavía en provisión en segundo plano, y reintentar permite que el despliegue se complete una vez que los recursos alcanzan un estado terminal.
Esto hará:
-1. Desplegar el recurso Azure OpenAI con modelos GPT-5.2 y text-embedding-3-small
-2. Generar automáticamente el archivo `.env` en la raíz del proyecto con credenciales
-3. Configurar todas las variables de entorno requeridas
+1. Desplegar el recurso Azure OpenAI con los modelos GPT-5.2 y text-embedding-3-small
+2. Generar automáticamente el archivo `.env` en la raíz del proyecto con las credenciales
+3. Configurar todas las variables de entorno necesarias
-**¿Problemas con la implementación?** Consulta el [README de Infraestructura](infra/README.md) para resolver problemas detallados incluyendo conflictos de nombres de subdominios, pasos de implementación manual en Azure Portal y guías para configuración de modelos.
+**¿Tienes problemas con el despliegue?** Revisa el [README de Infraestructura](infra/README.md) para resolución detallada de conflictos con nombres de subdominios, pasos manuales para despliegue en Azure Portal y guía de configuración de modelos.
-**Verifica que la implementación haya sido exitosa:**
+**Verifica que el despliegue haya sido exitoso:**
**Bash:**
```bash
@@ -168,7 +168,7 @@ cat ../.env # Debe mostrar AZURE_OPENAI_ENDPOINT, API_KEY, etc.
Get-Content ..\.env # Debe mostrar AZURE_OPENAI_ENDPOINT, API_KEY, etc.
```
-> **Nota:** El comando `azd up` genera automáticamente el archivo `.env`. Si necesitas actualizarlo después, puedes editar el archivo manualmente o regenerarlo ejecutando:
+> **Nota:** El comando `azd up` genera automáticamente el archivo `.env`. Si necesitas actualizarlo más tarde, puedes editar el archivo `.env` manualmente o regenerarlo ejecutando:
>
> **Bash:**
> ```bash
@@ -184,9 +184,9 @@ Get-Content ..\.env # Debe mostrar AZURE_OPENAI_ENDPOINT, API_KEY, etc.
## Ejecutar la Aplicación Localmente
-**Verificar implementación:**
+**Verifica el despliegue:**
-Asegúrate que el archivo `.env` exista en el directorio raíz con las credenciales de Azure. Ejecuta esto desde el directorio del módulo (`01-introduction/`):
+Asegúrate de que el archivo `.env` exista en el directorio raíz con las credenciales de Azure. Ejecuta esto desde el directorio del módulo (`01-introduction/`):
**Bash:**
```bash
@@ -198,25 +198,25 @@ cat ../.env # Debe mostrar AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
Get-Content ..\.env # Debe mostrar AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**Iniciar las aplicaciones:**
+**Inicia las aplicaciones:**
**Opción 1: Usando Spring Boot Dashboard (Recomendado para usuarios de VS Code)**
-El contenedor de desarrollo incluye la extensión Spring Boot Dashboard, que ofrece una interfaz visual para gestionar todas las aplicaciones Spring Boot. Puedes encontrarla en la Barra de Actividades a la izquierda de VS Code (busca el ícono de Spring Boot).
+El contenedor de desarrollo incluye la extensión Spring Boot Dashboard, que provee una interfaz visual para manejar todas las aplicaciones Spring Boot. Puedes encontrarlo en la Barra de Actividad al lado izquierdo de VS Code (busca el ícono de Spring Boot).
-Desde el Spring Boot Dashboard, puedes:
+Desde Spring Boot Dashboard puedes:
- Ver todas las aplicaciones Spring Boot disponibles en el espacio de trabajo
-- Iniciar/detener aplicaciones con un solo clic
-- Ver los registros de la aplicación en tiempo real
+- Iniciar/detener aplicaciones con un clic
+- Ver logs de aplicación en tiempo real
- Monitorear el estado de la aplicación
-Simplemente haz clic en el botón de reproducir junto a "introduction" para iniciar este módulo o inicia todos los módulos a la vez.
+Simplemente haz clic en el botón de play al lado de "introduction" para iniciar este módulo, o inicia todos los módulos a la vez.
-
+
*El Spring Boot Dashboard en VS Code — inicia, detén y monitorea todos los módulos desde un solo lugar*
-**Opción 2: Usar scripts de shell**
+**Opción 2: Usando scripts shell**
Inicia todas las aplicaciones web (módulos 01-04):
@@ -232,7 +232,7 @@ cd .. # Desde el directorio raíz
.\start-all.ps1
```
-O inicia solo este módulo:
+O inicia sólo este módulo:
**Bash:**
```bash
@@ -246,7 +246,7 @@ cd 01-introduction
.\start.ps1
```
-Ambos scripts cargan automáticamente variables de entorno del archivo `.env` raíz y construirán los JARs si no existen.
+Ambos scripts cargan automáticamente variables de entorno desde el archivo `.env` raíz y construirán los JARs si no existen.
> **Nota:** Si prefieres construir todos los módulos manualmente antes de iniciar:
>
@@ -264,7 +264,7 @@ Ambos scripts cargan automáticamente variables de entorno del archivo `.env` ra
Abre http://localhost:8080 en tu navegador.
-**Para detener:**
+**Para detener la aplicación:**
**Bash:**
```bash
@@ -286,25 +286,25 @@ La aplicación provee una interfaz web con dos implementaciones de chat lado a l
-*Panel mostrando opciones para Chat Simple (sin estado) y Chat Conversacional (con estado)*
+*Panel que muestra opciones de Chat Simple (sin estado) y Chat Conversacional (con estado)*
### Chat Sin Estado (Panel Izquierdo)
-Prueba primero aquí. Di "Me llamo Juan" y luego inmediatamente pregunta "¿Cómo me llamo?" El modelo no recordará porque cada mensaje es independiente. Esto demuestra el problema central con la integración básica de modelos de lenguaje - no hay contexto de conversación.
+Prueba esto primero. Di "Mi nombre es John" y luego inmediatamente pregunta "¿Cuál es mi nombre?" El modelo no lo recordará porque cada mensaje es independiente. Esto demuestra el problema central con la integración básica de modelos de lenguaje - sin contexto de conversación.
*La IA no recuerda tu nombre del mensaje anterior*
-### Chat con Estado (Panel Derecho)
+### Chat Con Estado (Panel Derecho)
-Ahora prueba la misma secuencia aquí. Di "Me llamo Juan" y luego "¿Cómo me llamo?" Esta vez lo recuerda. La diferencia es MessageWindowChatMemory - mantiene el historial de la conversación e incluye ese contexto con cada solicitud. Así funciona la IA conversacional en producción.
+Ahora intenta la misma secuencia aquí. Di "Mi nombre es John" y luego "¿Cuál es mi nombre?" Esta vez lo recuerda. La diferencia es MessageWindowChatMemory - mantiene el historial de la conversación e incluye ese contexto en cada solicitud. Así funciona la IA conversacional en producción.
-
+
-*La IA recuerda tu nombre desde el inicio de la conversación*
+*La IA recuerda tu nombre de la conversación anterior*
-Ambos paneles usan el mismo modelo GPT-5.2. La única diferencia es la memoria. Esto deja claro qué aporta la memoria a tu aplicación y por qué es esencial para casos reales.
+Ambos paneles usan el mismo modelo GPT-5.2. La única diferencia es la memoria. Esto hace claro qué aporta la memoria a tu aplicación y por qué es esencial para casos de uso reales.
## Próximos Pasos
@@ -312,11 +312,11 @@ Ambos paneles usan el mismo modelo GPT-5.2. La única diferencia es la memoria.
---
-**Navegación:** [← Anterior: Módulo 00 - Inicio Rápido](../00-quick-start/README.md) | [Volver al Inicio](../README.md) | [Siguiente: Módulo 02 - Ingeniería de Prompts →](../02-prompt-engineering/README.md)
+**Navegación:** [← Volver al Principal](../README.md) | [Siguiente: Módulo 02 - Ingeniería de Prompts →](../02-prompt-engineering/README.md)
---
-**Descargo de responsabilidad**:
-Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por un humano. No nos hacemos responsables de malentendidos o interpretaciones erróneas derivadas del uso de esta traducción.
+**Descargo de responsabilidad**:
+Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción.
\ No newline at end of file
diff --git a/translations/es/02-prompt-engineering/README.md b/translations/es/02-prompt-engineering/README.md
index 15e396900..1b4a39b89 100644
--- a/translations/es/02-prompt-engineering/README.md
+++ b/translations/es/02-prompt-engineering/README.md
@@ -2,29 +2,29 @@
## Tabla de Contenidos
-- [Recorrido en Video](../../../02-prompt-engineering)
-- [Qué Aprenderás](../../../02-prompt-engineering)
-- [Prerequisitos](../../../02-prompt-engineering)
-- [Comprendiendo la Ingeniería de Prompts](../../../02-prompt-engineering)
-- [Fundamentos de la Ingeniería de Prompts](../../../02-prompt-engineering)
- - [Prompting Zero-Shot](../../../02-prompt-engineering)
- - [Prompting Few-Shot](../../../02-prompt-engineering)
- - [Cadena de Pensamiento](../../../02-prompt-engineering)
- - [Prompting Basado en Roles](../../../02-prompt-engineering)
- - [Plantillas de Prompts](../../../02-prompt-engineering)
-- [Patrones Avanzados](../../../02-prompt-engineering)
-- [Ejecutar la Aplicación](../../../02-prompt-engineering)
-- [Capturas de Pantalla de la Aplicación](../../../02-prompt-engineering)
-- [Explorando los Patrones](../../../02-prompt-engineering)
- - [Baja vs Alta Entusiasmo](../../../02-prompt-engineering)
- - [Ejecución de Tareas (Preambulos de Herramientas)](../../../02-prompt-engineering)
- - [Código Auto-Reflexivo](../../../02-prompt-engineering)
- - [Análisis Estructurado](../../../02-prompt-engineering)
- - [Chat de Múltiples Turnos](../../../02-prompt-engineering)
- - [Razonamiento Paso a Paso](../../../02-prompt-engineering)
- - [Salida Restringida](../../../02-prompt-engineering)
-- [Qué Estás Realmente Aprendiendo](../../../02-prompt-engineering)
-- [Próximos Pasos](../../../02-prompt-engineering)
+- [Recorrido en Video](#recorrido-en-video)
+- [Lo Que Aprenderás](#lo-que-aprenderás)
+- [Prerequisitos](#prerequisitos)
+- [Comprendiendo la Ingeniería de Prompts](#comprendiendo-la-ingeniería-de-prompts)
+- [Fundamentos de la Ingeniería de Prompts](#fundamentos-de-la-ingeniería-de-prompts)
+ - [Prompting Zero-Shot](#prompting-zero-shot)
+ - [Prompting Few-Shot](#prompting-few-shot)
+ - [Cadena de Pensamiento](#cadena-de-pensamiento)
+ - [Prompting Basado en Roles](#prompting-basado-en-roles)
+ - [Plantillas de Prompts](#plantillas-de-prompts)
+- [Patrones Avanzados](#patrones-avanzados)
+- [Ejecutar la Aplicación](#ejecutar-la-aplicación)
+- [Capturas de Pantalla de la Aplicación](#capturas-de-pantalla-de-la-aplicación)
+- [Explorando los Patrones](#explorando-los-patrones)
+ - [Baja vs Alta Entusiasmo](#baja-vs-alta-dedicación)
+ - [Ejecución de Tareas (Preámbulos de Herramientas)](#ejecución-de-tareas-preámbulos-de-herramientas)
+ - [Código Autorreflexivo](#código-auto-reflexivo)
+ - [Análisis Estructurado](#análisis-estructurado)
+ - [Chat Multivuelta](#chat-multinivel)
+ - [Razonamiento Paso a Paso](#razonamiento-paso-a-paso)
+ - [Salida Restringida](#salida-restringida)
+- [Lo que Realmente Estás Aprendiendo](#lo-que-realmente-estás-aprendiendo)
+- [Próximos Pasos](#próximos-pasos)
## Recorrido en Video
@@ -32,54 +32,54 @@ Mira esta sesión en vivo que explica cómo comenzar con este módulo:
-## Qué Aprenderás
+## Lo Que Aprenderás
-El siguiente diagrama ofrece una visión general de los temas clave y habilidades que desarrollarás en este módulo — desde técnicas de refinamiento de prompts hasta el flujo de trabajo paso a paso que seguirás.
+El siguiente diagrama ofrece una vista general de los temas y habilidades clave que desarrollarás en este módulo, desde técnicas de refinamiento de prompts hasta el flujo de trabajo paso a paso que seguirás.
-
+
-En los módulos anteriores, exploraste interacciones básicas de LangChain4j con modelos de GitHub y viste cómo la memoria habilita la IA conversacional con Azure OpenAI. Ahora nos enfocaremos en cómo haces preguntas — los prompts en sí — usando GPT-5.2 de Azure OpenAI. La manera en que estructuras tus prompts afecta dramáticamente la calidad de las respuestas que obtienes. Comenzamos con una revisión de las técnicas fundamentales de prompting, luego avanzamos a ocho patrones avanzados que aprovechan al máximo las capacidades de GPT-5.2.
+En el módulo anterior viste cómo la memoria habilita IA conversacional con Azure OpenAI. Ahora nos centraremos en cómo haces preguntas — los propios prompts — usando GPT-5.2 de Azure OpenAI. La forma en que estructuras tus prompts afecta drásticamente la calidad de las respuestas que obtienes. Comenzamos revisando las técnicas fundamentales de prompting, luego pasamos a ocho patrones avanzados que aprovechan al máximo las capacidades de GPT-5.2.
-Usaremos GPT-5.2 porque introduce control de razonamiento: puedes indicarle al modelo cuánto debe pensar antes de responder. Esto hace que las diferentes estrategias de prompting sean más evidentes y te ayuda a entender cuándo usar cada enfoque. También nos beneficiaremos de los menores límites de tasa de Azure para GPT-5.2 comparado con los modelos GitHub.
+Usaremos GPT-5.2 porque introduce control del razonamiento - puedes indicarle al modelo cuánto pensamiento hacer antes de responder. Esto hace que diferentes estrategias de prompting sean más evidentes y te ayuda a entender cuándo usar cada enfoque.
## Prerequisitos
- Haber completado el Módulo 01 (recursos de Azure OpenAI desplegados)
- Archivo `.env` en el directorio raíz con credenciales de Azure (creado por `azd up` en el Módulo 01)
-> **Nota:** Si no has completado el Módulo 01, sigue primero las instrucciones de despliegue allí.
+> **Nota:** Si no has completado el Módulo 01, sigue las instrucciones de despliegue ahí primero.
## Comprendiendo la Ingeniería de Prompts
-En su esencia, la ingeniería de prompts es la diferencia entre instrucciones vagas e instrucciones precisas, como ilustra la comparación abajo.
+En su esencia, la ingeniería de prompts es la diferencia entre instrucciones vagas y precisas, como ilustra la comparación siguiente.
-La ingeniería de prompts trata sobre diseñar texto de entrada que consistentemente te da los resultados que necesitas. No es solo hacer preguntas, es estructurar las solicitudes para que el modelo entienda exactamente qué quieres y cómo entregarlo.
+La ingeniería de prompts se trata de diseñar texto de entrada que consistentemente te dé los resultados que necesitas. No es solo hacer preguntas, sino estructurar solicitudes para que el modelo entienda exactamente qué quieres y cómo entregarlo.
-Piénsalo como dar instrucciones a un colega. "Arregla el bug" es vago. "Arregla la excepción de puntero nulo en UserService.java línea 45 añadiendo una comprobación de nulo" es específico. Los modelos de lenguaje funcionan igual: la especificidad y estructura importan.
+Piénsalo como dar instrucciones a un colega. "Arregla el bug" es vago. "Arregla la excepción de puntero nulo en UserService.java línea 45 añadiendo una comprobación de nulos" es específico. Los modelos de lenguaje funcionan igual — la especificidad y estructura importan.
-El diagrama de abajo muestra cómo LangChain4j encaja en este panorama — conectando tus patrones de prompt con el modelo a través de bloques constructores `SystemMessage` y `UserMessage`.
+El diagrama de abajo muestra cómo LangChain4j encaja en esta imagen — conectando tus patrones de prompt con el modelo mediante los bloques constructores SystemMessage y UserMessage.
-
+
-LangChain4j provee la infraestructura — conexiones al modelo, memoria y tipos de mensaje — mientras que los patrones de prompt son solo texto cuidadosamente estructurado que envías a través de esa infraestructura. Los bloques clave son `SystemMessage` (que establece el comportamiento y rol de la IA) y `UserMessage` (que lleva tu petición real).
+LangChain4j provee la infraestructura — conexiones al modelo, memoria y tipos de mensajes — mientras que los patrones de prompt son solo texto cuidadosamente estructurado que envías a través de esa infraestructura. Los bloques clave son `SystemMessage` (que establece el comportamiento y rol de la IA) y `UserMessage` (que lleva tu solicitud real).
## Fundamentos de la Ingeniería de Prompts
-Las cinco técnicas principales que se muestran a continuación forman la base de una ingeniería de prompts efectiva. Cada una aborda un aspecto diferente de cómo te comunicas con modelos de lenguaje.
+Las cinco técnicas centrales que se muestran a continuación forman la base de una ingeniería de prompts efectiva. Cada una aborda un aspecto diferente de cómo te comunicas con modelos de lenguaje.
-
+
-Antes de sumergirnos en los patrones avanzados de este módulo, revisemos cinco técnicas fundamentales de prompting. Estos son los bloques básicos que todo ingeniero de prompts debe conocer. Si ya trabajaste con el [módulo de inicio rápido](../00-quick-start/README.md#2-prompt-patterns), los has visto en acción — aquí está el marco conceptual detrás de ellos.
+Antes de profundizar en los patrones avanzados de este módulo, repasemos cinco técnicas básicas de prompting. Estos son los bloques constructores que todo ingeniero de prompts debe conocer.
### Prompting Zero-Shot
-El enfoque más simple: darle al modelo una instrucción directa sin ejemplos. El modelo se basa totalmente en su entrenamiento para entender y ejecutar la tarea. Funciona bien para solicitudes directas donde el comportamiento esperado es obvio.
+El enfoque más simple: darle al modelo una instrucción directa sin ejemplos. El modelo se basa completamente en su entrenamiento para entender y ejecutar la tarea. Esto funciona bien para solicitudes directas donde el comportamiento esperado es obvio.
-*Instrucción directa sin ejemplos — el modelo infiere la tarea solo a partir de la instrucción*
+*Instrucción directa sin ejemplos — el modelo infiere la tarea solo con la instrucción*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
@@ -87,15 +87,15 @@ String response = model.chat(prompt);
// Respuesta: "Positivo"
```
-**Cuándo usarlo:** Clasificaciones simples, preguntas directas, traducciones o cualquier tarea que el modelo pueda manejar sin orientación adicional.
+**Cuándo usarlo:** Clasificaciones simples, preguntas directas, traducciones o cualquier tarea que el modelo pueda manejar sin guía adicional.
### Prompting Few-Shot
-Proporciona ejemplos que demuestran el patrón que quieres que el modelo siga. El modelo aprende el formato input-output esperado de tus ejemplos y lo aplica a nuevas entradas. Esto mejora drásticamente la consistencia para tareas donde el formato o comportamiento deseado no es obvio.
+Proporciona ejemplos que demuestren el patrón que quieres que el modelo siga. El modelo aprende el formato esperado de entrada-salida a partir de tus ejemplos y lo aplica a nuevas entradas. Esto mejora dramáticamente la consistencia para tareas donde el formato o comportamiento deseado no es obvio.
-*Aprender de ejemplos — el modelo identifica el patrón y lo aplica a nuevos inputs*
+*Aprender de ejemplos — el modelo identifica el patrón y lo aplica a nuevas entradas*
```java
String prompt = """
@@ -112,15 +112,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Cuándo usarlo:** Clasificaciones personalizadas, formato consistente, tareas específicas de dominio o cuando los resultados zero-shot son inconsistentes.
+**Cuándo usarlo:** Clasificaciones personalizadas, formateo consistente, tareas específicas de dominio o cuando los resultados zero-shot son inconsistentes.
### Cadena de Pensamiento
-Pídele al modelo que muestre su razonamiento paso a paso. En lugar de saltar directo a una respuesta, el modelo descompone el problema y trabaja cada parte explícitamente. Esto mejora la precisión en matemáticas, lógica y tareas de razonamiento en múltiples pasos.
+Pide al modelo que muestre su razonamiento paso a paso. En lugar de saltar directamente a una respuesta, el modelo descompone el problema y trabaja cada parte explícitamente. Esto mejora la precisión en matemáticas, lógica y razonamiento multi-paso.
-
+
-*Razonamiento paso a paso — desglosar problemas complejos en pasos lógicos explícitos*
+*Razonamiento paso a paso — descomponiendo problemas complejos en pasos lógicos explícitos*
```java
String prompt = """
@@ -133,15 +133,15 @@ String response = model.chat(prompt);
// El modelo muestra: 15 - 8 = 7, luego 7 + 12 = 19 manzanas
```
-**Cuándo usarlo:** Problemas matemáticos, acertijos lógicos, depuración o cualquier tarea donde mostrar el proceso de razonamiento mejora precisión y confianza.
+**Cuándo usarlo:** Problemas matemáticos, acertijos lógicos, depuración o cualquier tarea donde mostrar el proceso de razonamiento improve la precisión y confianza.
### Prompting Basado en Roles
-Establece una persona o rol para la IA antes de hacer tu pregunta. Esto proporciona contexto que moldea el tono, profundidad y enfoque de la respuesta. Un “arquitecto de software” da consejos diferentes a un “desarrollador junior” o un “auditor de seguridad”.
+Define una persona o rol para la IA antes de hacer la pregunta. Esto provee contexto que moldea el tono, profundidad y foco de la respuesta. Un "arquitecto de software" ofrece consejos diferentes a un "desarrollador junior" o un "auditor de seguridad".
-*Establecer contexto y persona — la misma pregunta recibe respuestas diferentes según el rol asignado*
+*Estableciendo contexto y persona — la misma pregunta recibe respuestas diferentes según el rol asignado*
```java
String prompt = """
@@ -157,15 +157,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Cuándo usarlo:** Revisiones de código, tutorías, análisis específicos de dominio o cuando necesitas respuestas adaptadas a un nivel o perspectiva expertas.
+**Cuándo usarlo:** Revisiones de código, tutoría, análisis específico de dominio o cuando necesitas respuestas adaptadas a un nivel de experiencia o perspectiva particular.
### Plantillas de Prompts
-Crea prompts reutilizables con marcadores de posición variables. En lugar de escribir un prompt nuevo cada vez, defines una plantilla una vez y rellenas con diferentes valores. La clase `PromptTemplate` de LangChain4j facilita esto con la sintaxis `{{variable}}`.
+Crea prompts reutilizables con espacios variables. En lugar de escribir un prompt nuevo cada vez, define una plantilla una vez y llena valores diferentes. La clase `PromptTemplate` de LangChain4j facilita esto con la sintaxis `{{variable}}`.
-*Prompts reutilizables con marcadores variables — una plantilla, muchos usos*
+*Prompts reutilizables con espacios variables — una plantilla, muchos usos*
```java
PromptTemplate template = PromptTemplate.from(
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**Cuándo usarlo:** Consultas repetidas con diferentes inputs, procesamiento por lotes, creación de flujos de trabajo AI reutilizables o cualquier escenario donde la estructura del prompt permanece pero los datos cambian.
+**Cuándo usarlo:** Consultas repetidas con diferentes entradas, procesamiento por lotes, construcción de flujos de trabajo AI reutilizables o cualquier escenario donde la estructura del prompt es la misma pero cambian los datos.
---
-Estos cinco fundamentos te dan un conjunto sólido para la mayoría de tareas de prompting. El resto de este módulo se basa en ellos con **ocho patrones avanzados** que aprovechan el control de razonamiento, autoevaluación y capacidades de salida estructurada de GPT-5.2.
+Estos cinco fundamentos te brindan un conjunto sólido de herramientas para la mayoría de las tareas de prompting. El resto de este módulo se basa en ellos con **ocho patrones avanzados** que aprovechan el control de razonamiento, autoevaluación y la capacidad de salida estructurada de GPT-5.2.
## Patrones Avanzados
-Con los fundamentos cubiertos, vamos a los ocho patrones avanzados que hacen único este módulo. No todos los problemas necesitan el mismo enfoque. Algunas preguntas requieren respuestas rápidas, otras pensamiento profundo. Algunas necesitan razonamiento visible, otras solo resultados. Cada patrón abajo está optimizado para un escenario diferente — y el control de razonamiento de GPT-5.2 hace que las diferencias sean aún más notorias.
+Con los fundamentos cubiertos, pasemos a los ocho patrones avanzados que hacen único este módulo. No todos los problemas requieren el mismo enfoque. Algunas preguntas necesitan respuestas rápidas, otras pensamiento profundo. Algunas requieren razonamiento visible, otras solo resultados. Cada patrón abajo está optimizado para un escenario diferente — y el control del razonamiento de GPT-5.2 hace que las diferencias sean aún más pronunciadas.
-*Resumen de los ocho patrones de ingeniería de prompts y sus casos de uso*
+*Visión general de los ocho patrones de ingeniería de prompts y sus casos de uso*
-GPT-5.2 añade otra dimensión a estos patrones: *control de razonamiento*. El deslizador abajo muestra cómo puedes ajustar el esfuerzo de pensar del modelo — desde respuestas rápidas y directas hasta análisis profundos y exhaustivos.
+GPT-5.2 añade otra dimensión a estos patrones: *control de razonamiento*. El control deslizante abajo muestra cómo puedes ajustar el esfuerzo de pensamiento del modelo — desde respuestas rápidas y directas hasta análisis profundo y exhaustivo.
-*El control de razonamiento de GPT-5.2 te permite especificar cuánto debe pensar el modelo — desde respuestas rápidas hasta exploración profunda*
+*El control de razonamiento de GPT-5.2 te permite especificar cuánto debe pensar el modelo — desde respuestas rápidas directas hasta exploración profunda*
-**Bajo Entusiasmo (Rápido y Enfocado)** - Para preguntas simples donde quieres respuestas rápidas y directas. El modelo realiza razonamiento mínimo - máximo 2 pasos. Úsalo para cálculos, consultas o preguntas directas.
+**Bajo Entusiasmo (Rápido y Enfocado)** - Para preguntas simples donde quieres respuestas rápidas y directas. El modelo hace razonamiento mínimo - máximo 2 pasos. Úsalo para cálculos, consultas o preguntas directas.
```java
String prompt = """
@@ -220,11 +220,11 @@ String response = chatModel.chat(prompt);
```
> 💡 **Explora con GitHub Copilot:** Abre [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) y pregunta:
-> - "¿Cuál es la diferencia entre patrones de prompting de bajo entusiasmo y alto entusiasmo?"
+> - "¿Cuál es la diferencia entre los patrones de prompting de bajo entusiasmo y alto entusiasmo?"
> - "¿Cómo ayudan las etiquetas XML en los prompts a estructurar la respuesta de la IA?"
-> - "¿Cuándo debo usar patrones de autorreflexión vs instrucciones directas?"
+> - "¿Cuándo debería usar patrones de autorreflexión vs instrucción directa?"
-**Alto Entusiasmo (Profundo y Minucioso)** - Para problemas complejos donde quieres análisis exhaustivo. El modelo explora a fondo y muestra razonamiento detallado. Úsalo para diseño de sistemas, decisiones arquitectónicas o investigación compleja.
+**Alto Entusiasmo (Profundo y Exhaustivo)** - Para problemas complejos donde quieres un análisis completo. El modelo explora a fondo y muestra un razonamiento detallado. Úsalo para diseño de sistemas, decisiones arquitectónicas o investigación compleja.
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**Ejecución de Tareas (Progreso Paso a Paso)** - Para flujos de trabajo en múltiples pasos. El modelo proporciona un plan inicial, narra cada paso mientras trabaja, luego da un resumen. Úsalo para migraciones, implementaciones o cualquier proceso de varios pasos.
+**Ejecución de Tareas (Progreso Paso a Paso)** - Para flujos de trabajo multi-paso. El modelo provee un plan adelantado, narra cada paso conforme avanza y luego da un resumen. Úsalo para migraciones, implementaciones o cualquier proceso multi-paso.
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-El prompting de Cadena de Pensamiento le pide explícitamente al modelo que muestre su proceso de razonamiento, mejorando la precisión en tareas complejas. El desglose paso a paso ayuda tanto a humanos como a la IA a entender la lógica.
+El prompting Cadena de Pensamiento explícitamente pide al modelo mostrar su proceso de razonamiento, mejorando la precisión para tareas complejas. La descomposición paso a paso ayuda tanto a humanos como a la IA a entender la lógica.
> **🤖 Prueba con [GitHub Copilot](https://github.com/features/copilot) Chat:** Pregunta sobre este patrón:
> - "¿Cómo adaptaría el patrón de ejecución de tareas para operaciones de larga duración?"
-> - "¿Cuáles son las mejores prácticas para estructurar preámbulos de herramientas en aplicaciones de producción?"
-> - "¿Cómo puedo capturar y mostrar actualizaciones de progreso intermedias en una UI?"
+> - "¿Cuáles son las mejores prácticas para estructurar los preámbulos de herramientas en aplicaciones de producción?"
+> - "¿Cómo puedo capturar y mostrar actualizaciones de progreso intermedias en una interfaz de usuario?"
El diagrama abajo ilustra este flujo Planificar → Ejecutar → Resumir.
-*Flujo Planificar → Ejecutar → Resumir para tareas en múltiples pasos*
+*Flujo Planificar → Ejecutar → Resumir para tareas multi-paso*
-**Código Auto-Reflexivo** - Para generar código de calidad producción. El modelo genera código siguiendo estándares de producción con manejo adecuado de errores. Úsalo al construir nuevas funciones o servicios.
+**Código Autorreflexivo** - Para generar código con calidad de producción. El modelo genera código siguiendo estándares de producción con manejo adecuado de errores. Úsalo cuando construyas nuevas funcionalidades o servicios.
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-El diagrama abajo muestra este ciclo iterativo de mejora — generar, evaluar, identificar debilidades y refinar hasta que el código cumpla estándares de producción.
+El diagrama a continuación muestra este ciclo iterativo de mejora — generar, evaluar, identificar debilidades y refinar hasta que el código cumpla estándares de producción.
-
+
*Ciclo iterativo de mejora - generar, evaluar, identificar problemas, mejorar, repetir*
-**Análisis Estructurado** - Para evaluación consistente. El modelo revisa código usando un marco fijo (corrección, prácticas, rendimiento, seguridad, mantenibilidad). Úsalo para revisiones de código o evaluaciones de calidad.
+**Análisis Estructurado** - Para evaluaciones consistentes. El modelo revisa código usando un marco fijo (corrección, prácticas, rendimiento, seguridad, mantenibilidad). Úsalo para revisiones de código o evaluaciones de calidad.
```java
String prompt = """
@@ -356,8 +356,8 @@ String response = chatModel.chat(prompt);
> **🤖 Prueba con [GitHub Copilot](https://github.com/features/copilot) Chat:** Pregunta sobre análisis estructurado:
> - "¿Cómo puedo personalizar el marco de análisis para diferentes tipos de revisiones de código?"
-> - "¿Cuál es la mejor manera de analizar y actuar sobre salidas estructuradas programáticamente?"
-> - "¿Cómo aseguro niveles de severidad consistentes entre diferentes sesiones de revisión?"
+> - "¿Cuál es la mejor forma de parsear y actuar programáticamente sobre salidas estructuradas?"
+> - "¿Cómo garantizo niveles de severidad consistentes en diferentes sesiones de revisión?"
El siguiente diagrama muestra cómo este marco estructurado organiza una revisión de código en categorías consistentes con niveles de severidad.
@@ -365,7 +365,7 @@ El siguiente diagrama muestra cómo este marco estructurado organiza una revisi
*Marco para revisiones de código consistentes con niveles de severidad*
-**Chat de Múltiples Turnos** - Para conversaciones que necesitan contexto. El modelo recuerda mensajes previos y construye sobre ellos. Úsalo para sesiones de ayuda interactivas o preguntas y respuestas complejas.
+**Chat Multivuelta** - Para conversaciones que necesitan contexto. El modelo recuerda mensajes previos y construye sobre ellos. Úsalo para sesiones interactivas de ayuda o Q&A complejos.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-El diagrama siguiente visualiza cómo el contexto de la conversación se acumula con cada turno y cómo se relaciona con el límite de tokens del modelo.
+El diagrama abajo visualiza cómo el contexto de la conversación se acumula con cada turno y cómo se relaciona con el límite de tokens del modelo.
-*Cómo el contexto de la conversación se acumula durante múltiples turnos hasta alcanzar el límite de tokens*
-**Razonamiento Paso a Paso** - Para problemas que requieren lógica visible. El modelo muestra un razonamiento explícito para cada paso. Usa esto para problemas matemáticos, acertijos lógicos o cuando necesitas entender el proceso de pensamiento.
+*Cómo el contexto conversacional se acumula a través de múltiples turnos hasta alcanzar el límite de tokens*
+
+**Razonamiento Paso a Paso** - Para problemas que requieren lógica visible. El modelo muestra razonamiento explícito para cada paso. Úsalo para problemas matemáticos, acertijos lógicos o cuando necesitas entender el proceso de pensamiento.
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-El diagrama a continuación ilustra cómo el modelo descompone los problemas en pasos lógicos numerados y explícitos.
+El diagrama a continuación ilustra cómo el modelo descompone problemas en pasos lógicos explícitos y numerados.
+*Dividiendo problemas en pasos lógicos explícitos*
-*Desglosando problemas en pasos lógicos explícitos*
-
-**Salida Restringida** - Para respuestas con requisitos específicos de formato. El modelo sigue estrictamente las reglas de formato y longitud. Usa esto para resúmenes o cuando necesitas una estructura de salida precisa.
+**Salida Restringida** - Para respuestas con requisitos específicos de formato. El modelo sigue estrictamente las reglas de formato y longitud. Úsalo para resúmenes o cuando necesites una estructura de salida precisa.
```java
String prompt = """
@@ -420,13 +420,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-El siguiente diagrama muestra cómo las restricciones guían al modelo para producir una salida que cumple estrictamente con tus requisitos de formato y longitud.
+El siguiente diagrama muestra cómo las restricciones guían al modelo para producir una salida que se adhiera estrictamente a tus requisitos de formato y longitud.
-
+
-*Imponiendo requisitos específicos de formato, longitud y estructura*
+*Aplicando requisitos específicos de formato, longitud y estructura*
-## Ejecutar la Aplicación
+## Ejecutar la aplicación
**Verificar despliegue:**
@@ -434,7 +434,7 @@ Asegúrate de que el archivo `.env` exista en el directorio raíz con las creden
**Bash:**
```bash
-cat ../.env # Debería mostrar AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+cat ../.env # Debe mostrar AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**PowerShell:**
@@ -444,13 +444,13 @@ Get-Content ..\.env # Debe mostrar AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
**Iniciar la aplicación:**
-> **Nota:** Si ya iniciaste todas las aplicaciones usando `./start-all.sh` desde el directorio raíz (como se describe en el Módulo 01), este módulo ya está corriendo en el puerto 8083. Puedes omitir los comandos de inicio a continuación y acceder directamente a http://localhost:8083.
+> **Nota:** Si ya iniciaste todas las aplicaciones usando `./start-all.sh` desde el directorio raíz (como se describió en el Módulo 01), este módulo ya está ejecutándose en el puerto 8083. Puedes omitir los comandos de inicio a continuación e ir directamente a http://localhost:8083.
**Opción 1: Usando Spring Boot Dashboard (Recomendado para usuarios de VS Code)**
-El contenedor de desarrollo incluye la extensión Spring Boot Dashboard, que proporciona una interfaz visual para gestionar todas las aplicaciones Spring Boot. Puedes encontrarla en la Barra de Actividad a la izquierda en VS Code (busca el ícono de Spring Boot).
+El contenedor de desarrollo incluye la extensión Spring Boot Dashboard, que ofrece una interfaz visual para administrar todas las aplicaciones Spring Boot. Puedes encontrarla en la Barra de Actividad al lado izquierdo de VS Code (busca el ícono de Spring Boot).
-Desde el Spring Boot Dashboard puedes:
+Desde Spring Boot Dashboard, puedes:
- Ver todas las aplicaciones Spring Boot disponibles en el espacio de trabajo
- Iniciar/detener aplicaciones con un solo clic
- Ver los registros de la aplicación en tiempo real
@@ -492,9 +492,9 @@ cd 02-prompt-engineering
.\start.ps1
```
-Ambos scripts cargan automáticamente las variables de entorno desde el archivo `.env` raíz y construirán los JARs si no existen.
+Ambos scripts cargan automáticamente las variables de entorno del archivo `.env` raíz y construirán los JAR si no existen.
-> **Nota:** Si prefieres compilar todos los módulos manualmente antes de iniciar:
+> **Nota:** Si prefieres construir todos los módulos manualmente antes de iniciar:
>
> **Bash:**
> ```bash
@@ -526,83 +526,83 @@ cd .. && ./stop-all.sh # Todos los módulos
cd ..; .\stop-all.ps1 # Todos los módulos
```
-## Capturas de Pantalla de la Aplicación
+## Capturas de pantalla de la aplicación
Aquí está la interfaz principal del módulo de ingeniería de prompts, donde puedes experimentar con los ocho patrones uno al lado del otro.
-
+
-*El panel principal muestra los 8 patrones de ingeniería de prompts con sus características y casos de uso*
+*El panel principal mostrando los 8 patrones de ingeniería de prompts con sus características y casos de uso*
-## Explorando los Patrones
+## Explorando los patrones
-La interfaz web te permite experimentar con diferentes estrategias de prompting. Cada patrón resuelve diferentes problemas - pruébalos para ver cuándo brilla cada enfoque.
+La interfaz web te permite experimentar con diferentes estrategias de prompting. Cada patrón resuelve problemas diferentes; pruébalos para ver cuándo destaca cada enfoque.
-> **Nota: Streaming vs No Streaming** — Cada página de patrón ofrece dos botones: **🔴 Stream Response (Live)** y una opción **No streaming**. Streaming usa Eventos Enviados por el Servidor (SSE) para mostrar los tokens en tiempo real conforme el modelo los genera, por lo que ves el progreso inmediatamente. La opción no streaming espera toda la respuesta antes de mostrarla. Para prompts que desencadenan razonamientos profundos (por ejemplo, Alta Disposición, Código Auto-Reflexivo), la llamada no streaming puede tardar mucho — a veces minutos — sin retroalimentación visible. **Usa streaming cuando experimentes con prompts complejos** para que puedas ver el modelo trabajando y evitar la impresión de que la solicitud ha expirado.
+> **Nota: Transmisión vs No transmisión** — Cada página de patrón ofrece dos botones: **🔴 Transmitir respuesta (en vivo)** y una opción **No transmisión**. La transmisión utiliza Server-Sent Events (SSE) para mostrar tokens en tiempo real mientras el modelo los genera, así ves el progreso de inmediato. La opción no transmisión espera a que la respuesta completa esté lista para mostrarla. Para prompts que desencadenan razonamientos profundos (ej., Alta Dedicación, Código Auto-Reflexivo), la llamada no transmisión puede tardar mucho tiempo — a veces minutos — sin retroalimentación visible. **Usa la transmisión al experimentar con prompts complejos** para ver cómo trabaja el modelo y evitar la impresión de que la solicitud falló.
>
-> **Nota: Requisito del Navegador** — La función streaming usa la API Fetch Streams (`response.body.getReader()`) que requiere un navegador completo (Chrome, Edge, Firefox, Safari). No funciona en el Navegador Simple incorporado de VS Code, ya que su vista web no soporta la API ReadableStream. Si usas el Navegador Simple, los botones no streaming funcionarán normalmente — solo los botones streaming se ven afectados. Abre `http://localhost:8083` en un navegador externo para una experiencia completa.
+> **Nota: Requisito de navegador** — La función de transmisión usa Fetch Streams API (`response.body.getReader()`) que requiere un navegador completo (Chrome, Edge, Firefox, Safari). **No** funciona en el Navegador Simple incorporado de VS Code, ya que su vista web no soporta la API ReadableStream. Si usas el Navegador Simple, los botones de no transmisión seguirán funcionando con normalidad; solo los botones de transmisión se ven afectados. Abre `http://localhost:8083` en un navegador externo para la experiencia completa.
-### Baja vs Alta Disposición
+### Baja vs Alta Dedicación
-Haz una pregunta simple como "¿Cuál es el 15% de 200?" usando Baja Disposición. Obtendrás una respuesta directa e instantánea. Ahora haz algo complejo como "Diseña una estrategia de caché para una API con alto tráfico" usando Alta Disposición. Haz clic en **🔴 Stream Response (Live)** y observa el razonamiento detallado del modelo aparecer token por token. Mismo modelo, misma estructura de pregunta - pero el prompt le indica cuánto debe pensar.
+Haz una pregunta sencilla como "¿Cuál es el 15% de 200?" usando Baja Dedicación. Obtendrás una respuesta directa e instantánea. Ahora pregunta algo complejo como "Diseña una estrategia de caché para una API de alto tráfico" con Alta Dedicación. Haz clic en **🔴 Transmitir respuesta (en vivo)** y observa cómo el modelo va mostrando su razonamiento detallado token por token. Mismo modelo, misma estructura de pregunta, pero el prompt le indica cuánto debe pensar.
-### Ejecución de Tareas (Preámbulos de Herramientas)
+### Ejecución de tareas (Preámbulos de herramientas)
-Los flujos de trabajo con múltiples pasos se benefician de una planificación previa y narración del progreso. El modelo describe lo que hará, narra cada paso y luego resume los resultados.
+Los flujos de trabajo multi-paso se benefician de una planificación previa y narración del progreso. El modelo describe qué hará, narra cada paso y luego resume los resultados.
-### Código Auto-Reflectivo
+### Código Auto-Reflexivo
-Prueba con "Crear un servicio de validación de email". En lugar de solo generar código y detenerse, el modelo genera, evalúa contra criterios de calidad, identifica debilidades y mejora. Verás que itera hasta que el código cumple los estándares de producción.
+Prueba "Crear un servicio de validación de email". En lugar de solo generar código y detenerse, el modelo genera, evalúa contra criterios de calidad, identifica debilidades y mejora. Verás cómo itera hasta que el código cumple con los estándares de producción.
-### Análisis Estructurado
+### Análisis estructurado
-Las revisiones de código necesitan marcos de evaluación consistentes. El modelo analiza código usando categorías fijas (correctitud, prácticas, rendimiento, seguridad) con niveles de severidad.
+Las revisiones de código necesitan marcos de evaluación consistentes. El modelo analiza el código usando categorías fijas (corrección, prácticas, rendimiento, seguridad) con niveles de severidad.
-### Chat Multiturno
+### Chat multinivel
-Pregunta "¿Qué es Spring Boot?" luego inmediatamente sigue con "Muéstrame un ejemplo". El modelo recuerda tu primera pregunta y te da un ejemplo específico de Spring Boot. Sin memoria, esa segunda pregunta sería demasiado vaga.
+Pregunta "¿Qué es Spring Boot?" y luego continúa inmediatamente con "Muéstrame un ejemplo". El modelo recuerda tu primera pregunta y te da un ejemplo específico de Spring Boot. Sin memoria, la segunda pregunta sería demasiado vaga.
-### Razonamiento Paso a Paso
+### Razonamiento paso a paso
-Elige un problema matemático y pruébalo con Razonamiento Paso a Paso y Baja Disposición. La baja disposición solo te da la respuesta - rápido pero opaco. Paso a paso te muestra cada cálculo y decisión.
+Elige un problema matemático y pruébalo con Razonamiento paso a paso y con Baja Dedicación. Baja dedicación solo te da la respuesta — rápido pero opaco. Paso a paso te muestra cada cálculo y decisión.
-### Salida Restringida
+### Salida restringida
-Cuando necesitas formatos específicos o conteos exactos de palabras, este patrón fuerza estricto cumplimiento. Prueba generando un resumen con exactamente 100 palabras en formato de viñetas.
+Cuando necesitas formatos o conteos de palabras específicos, este patrón impone una estricta adherencia. Prueba generando un resumen con exactamente 100 palabras en formato de lista.
-## Lo que Realmente Estás Aprendiendo
+## Lo que realmente estás aprendiendo
-**El Esfuerzo de Razonamiento Cambia Todo**
+**El esfuerzo de razonamiento lo cambia todo**
-GPT-5.2 te permite controlar el esfuerzo computacional mediante tus prompts. Bajo esfuerzo significa respuestas rápidas con exploración mínima. Alto esfuerzo significa que el modelo se toma tiempo para pensar profundamente. Estás aprendiendo a ajustar el esfuerzo a la complejidad de la tarea - no pierdas tiempo en preguntas simples, pero tampoco apresures decisiones complejas.
+GPT-5.2 te permite controlar el esfuerzo computacional por medio de tus prompts. Bajo esfuerzo significa respuestas rápidas con exploración mínima. Alto esfuerzo significa que el modelo toma tiempo para pensar profundamente. Estás aprendiendo a empatar el esfuerzo con la complejidad de la tarea — no malgastes tiempo en preguntas simples, pero tampoco apresures decisiones complejas.
-**La Estructura Guía el Comportamiento**
+**La estructura guía el comportamiento**
-¿Notas las etiquetas XML en los prompts? No son decorativas. Los modelos siguen instrucciones estructuradas de manera más confiable que texto libre. Cuando necesitas procesos multietapas o lógica compleja, la estructura ayuda al modelo a rastrear en qué punto está y qué sigue. El diagrama abajo desglosa un prompt bien estructurado, mostrando cómo etiquetas como ``, ``, ``, ``, y `` organizan tus instrucciones en secciones claras.
+¿Notas las etiquetas XML en los prompts? No son decorativas. Los modelos siguen instrucciones estructuradas más confiablemente que texto libre. Cuando necesitas procesos de múltiples pasos o lógica compleja, la estructura ayuda al modelo a saber dónde está y qué sigue. El diagrama abajo desglosa un prompt bien estructurado, mostrando cómo las etiquetas como ``, ``, ``, ``, y `` organizan tus instrucciones en secciones claras.
-
+
*Anatomía de un prompt bien estructurado con secciones claras y organización estilo XML*
-**Calidad a Través de la Autoevaluación**
+**Calidad mediante autoevaluación**
-Los patrones auto-reflexivos funcionan haciendo explícitos los criterios de calidad. En lugar de esperar que el modelo "lo haga bien", le dices exactamente qué significa "bien": lógica correcta, manejo de errores, rendimiento, seguridad. Entonces el modelo puede evaluar su propia salida y mejorar. Esto convierte la generación de código de una lotería en un proceso.
+Los patrones auto-reflexivos funcionan haciendo explícitos los criterios de calidad. En lugar de esperar que el modelo "lo haga bien", le dices exactamente qué significa "bien": lógica correcta, manejo de errores, rendimiento, seguridad. El modelo puede luego evaluar su propia salida y mejorarla. Esto convierte la generación de código de una lotería en un proceso.
-**El Contexto es Finito**
+**El contexto es finito**
-Las conversaciones multiturno funcionan incluyendo el historial de mensajes con cada solicitud. Pero hay un límite - cada modelo tiene un conteo máximo de tokens. A medida que crecen las conversaciones, necesitarás estrategias para mantener el contexto relevante sin alcanzar ese límite. Este módulo muestra cómo funciona la memoria; más adelante aprenderás cuándo resumir, cuándo olvidar y cuándo recuperar.
+Las conversaciones multinivel funcionan incluyendo el historial de mensajes con cada solicitud. Pero hay un límite — cada modelo tiene un máximo de tokens. A medida que crecen las conversaciones, necesitarás estrategias para mantener contexto relevante sin pasar ese límite. Este módulo te muestra cómo funciona la memoria; más adelante aprenderás cuándo resumir, cuándo olvidar y cuándo recuperar.
-## Próximos Pasos
+## Próximos pasos
-**Próximo Módulo:** [03-rag - RAG (Generación Aumentada por Recuperación)](../03-rag/README.md)
+**Siguiente módulo:** [03-rag - RAG (Generación aumentada por recuperación)](../03-rag/README.md)
---
-**Navegación:** [← Anterior: Módulo 01 - Introducción](../01-introduction/README.md) | [Volver al Inicio](../README.md) | [Siguiente: Módulo 03 - RAG →](../03-rag/README.md)
+**Navegación:** [← Anterior: Módulo 01 - Introducción](../01-introduction/README.md) | [Volver al inicio](../README.md) | [Siguiente: Módulo 03 - RAG →](../03-rag/README.md)
---
-**Aviso Legal**:
-Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas derivadas del uso de esta traducción.
+**Descargo de responsabilidad**:
+Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción.
\ No newline at end of file
diff --git a/translations/es/03-rag/README.md b/translations/es/03-rag/README.md
index e39e7708f..14ed8e87c 100644
--- a/translations/es/03-rag/README.md
+++ b/translations/es/03-rag/README.md
@@ -2,29 +2,29 @@
## Tabla de Contenidos
-- [Video Explicativo](../../../03-rag)
-- [Lo Que Aprenderás](../../../03-rag)
-- [Requisitos Previos](../../../03-rag)
-- [Entendiendo RAG](../../../03-rag)
- - [¿Qué Enfoque RAG Usa Este Tutorial?](../../../03-rag)
-- [Cómo Funciona](../../../03-rag)
- - [Procesamiento de Documentos](../../../03-rag)
- - [Creación de Embeddings](../../../03-rag)
- - [Búsqueda Semántica](../../../03-rag)
- - [Generación de Respuestas](../../../03-rag)
-- [Ejecutar la Aplicación](../../../03-rag)
-- [Uso de la Aplicación](../../../03-rag)
- - [Subir un Documento](../../../03-rag)
- - [Hacer Preguntas](../../../03-rag)
- - [Verificar Referencias de Origen](../../../03-rag)
- - [Experimentar con Preguntas](../../../03-rag)
-- [Conceptos Clave](../../../03-rag)
- - [Estrategia de Segmentación](../../../03-rag)
- - [Puntajes de Similitud](../../../03-rag)
- - [Almacenamiento en Memoria](../../../03-rag)
- - [Gestión de la Ventana de Contexto](../../../03-rag)
-- [Cuándo Importa RAG](../../../03-rag)
-- [Próximos Pasos](../../../03-rag)
+- [Video Explicativo](#video-explicativo)
+- [Lo Que Aprenderás](#lo-que-aprenderás)
+- [Requisitos Previos](#requisitos-previos)
+- [Entendiendo RAG](#entendiendo-rag)
+ - [¿Qué Enfoque RAG Usa Este Tutorial?](#qué-enfoque-rag-usa-este-tutorial)
+- [Cómo Funciona](#cómo-funciona)
+ - [Procesamiento de Documentos](#procesamiento-de-documentos)
+ - [Creación de Embeddings](#creación-de-embeddings)
+ - [Búsqueda Semántica](#búsqueda-semántica)
+ - [Generación de Respuestas](#generación-de-respuestas)
+- [Ejecutar la Aplicación](#ejecutar-la-aplicación)
+- [Usando la Aplicación](#uso-de-la-aplicación)
+ - [Subir un Documento](#subir-un-documento)
+ - [Hacer Preguntas](#hacer-preguntas)
+ - [Consultar Referencias de la Fuente](#revisar-referencias-de-fuente)
+ - [Experimentar con Preguntas](#experimenta-con-preguntas)
+- [Conceptos Clave](#conceptos-clave)
+ - [Estrategia de División en Fragmentos](#estrategia-de-fragmentación)
+ - [Puntajes de Similitud](#puntuaciones-de-similitud)
+ - [Almacenamiento en Memoria](#almacenamiento-en-memoria)
+ - [Gestión de la Ventana de Contexto](#gestión-de-ventana-de-contexto)
+- [Cuándo Importa RAG](#cuándo-importa-rag)
+- [Próximos Pasos](#próximos-pasos)
## Video Explicativo
@@ -34,80 +34,79 @@ Mira esta sesión en vivo que explica cómo comenzar con este módulo:
## Lo Que Aprenderás
-En los módulos anteriores, aprendiste a tener conversaciones con IA y a estructurar tus indicaciones de forma efectiva. Pero hay una limitación fundamental: los modelos de lenguaje solo saben lo que aprendieron durante el entrenamiento. No pueden responder preguntas sobre las políticas de tu empresa, la documentación de tu proyecto, o cualquier información que no hayan visto durante el entrenamiento.
+En los módulos anteriores, aprendiste a tener conversaciones con IA y a estructurar tus prompts de manera efectiva. Pero hay una limitación fundamental: los modelos de lenguaje solo saben lo que aprendieron durante el entrenamiento. No pueden responder preguntas sobre las políticas de tu empresa, la documentación de tu proyecto o cualquier información con la que no fueron entrenados.
-RAG (Generación Aumentada por Recuperación) resuelve este problema. En lugar de intentar enseñar al modelo tu información (lo cual es costoso e impráctico), le das la capacidad de buscar en tus documentos. Cuando alguien hace una pregunta, el sistema encuentra información relevante y la incluye en la indicación. El modelo entonces responde basándose en ese contexto recuperado.
+RAG (Generación Aumentada por Recuperación) resuelve este problema. En lugar de intentar enseñar al modelo tu información (lo cual es costoso e impráctico), le das la capacidad de buscar en tus documentos. Cuando alguien hace una pregunta, el sistema encuentra la información relevante y la incluye en el prompt. El modelo entonces responde basándose en ese contexto recuperado.
Piensa en RAG como darle al modelo una biblioteca de referencia. Cuando haces una pregunta, el sistema:
-1. **Consulta del Usuario** - Haces una pregunta
+1. **Consulta del usuario** - Haces una pregunta
2. **Embedding** - Convierte tu pregunta en un vector
-3. **Búsqueda Vectorial** - Encuentra fragmentos de documentos similares
-4. **Ensamblaje del Contexto** - Añade fragmentos relevantes a la indicación
+3. **Búsqueda vectorial** - Encuentra fragmentos de documentos similares
+4. **Montaje del contexto** - Añade fragmentos relevantes al prompt
5. **Respuesta** - El LLM genera una respuesta basada en el contexto
-Esto fundamenta las respuestas del modelo en tus datos reales en lugar de depender solo de su conocimiento de entrenamiento o inventar respuestas.
+Esto fundamenta las respuestas del modelo en tus datos reales en lugar de depender solo en su conocimiento de entrenamiento o inventar respuestas.
## Requisitos Previos
-- Haber completado [Módulo 00 - Inicio Rápido](../00-quick-start/README.md) (para el ejemplo Easy RAG referenciado más adelante en este módulo)
-- Haber completado [Módulo 01 - Introducción](../01-introduction/README.md) (recursos Azure OpenAI desplegados, incluyendo el modelo de embedding `text-embedding-3-small`)
-- Archivo `.env` en el directorio raíz con credenciales Azure (creado por `azd up` en Módulo 01)
+- Haber completado [Módulo 01 - Introducción](../01-introduction/README.md) (recursos Azure OpenAI desplegados, incluyendo el modelo embedding `text-embedding-3-small`)
+- Archivo `.env` en el directorio raíz con credenciales de Azure (creado por `azd up` en el Módulo 01)
-> **Nota:** Si no has completado el Módulo 01, sigue primero las instrucciones de despliegue ahí. El comando `azd up` despliega tanto el modelo de chat GPT como el modelo de embedding usado por este módulo.
+> **Nota:** Si no has completado el Módulo 01, sigue primero las instrucciones de despliegue allí. El comando `azd up` despliega tanto el modelo de chat GPT como el modelo embedding usado por este módulo.
## Entendiendo RAG
-El diagrama a continuación ilustra el concepto central: en lugar de depender solo de los datos de entrenamiento del modelo, RAG le da una biblioteca de referencia con tus documentos para consultar antes de generar cada respuesta.
+El diagrama a continuación ilustra el concepto central: en lugar de depender solo en los datos de entrenamiento del modelo, RAG le da una biblioteca de referencia con tus documentos para consultar antes de generar cada respuesta.
-*Este diagrama muestra la diferencia entre un LLM estándar (que adivina a partir de datos de entrenamiento) y un LLM mejorado con RAG (que consulta primero tus documentos).*
+*Este diagrama muestra la diferencia entre un LLM estándar (que adivina basado en datos de entrenamiento) y un LLM mejorado con RAG (que consulta primero tus documentos).*
-Aquí se muestra cómo se conectan las piezas de principio a fin. La pregunta de un usuario pasa por cuatro etapas: embedding, búsqueda vectorial, ensamblaje del contexto y generación de respuesta — cada una construyendo sobre la anterior:
+Así es como las piezas se conectan de extremo a extremo. La pregunta de un usuario pasa por cuatro etapas: embedding, búsqueda vectorial, montaje del contexto y generación de respuestas — cada una construyendo sobre la anterior:
-*Este diagrama muestra la pipeline completa de RAG — la consulta del usuario pasa por embedding, búsqueda vectorial, ensamblaje del contexto y generación de respuesta.*
+*Este diagrama muestra la canalización RAG de extremo a extremo — una consulta de usuario pasa por embedding, búsqueda vectorial, montaje del contexto y generación de respuesta.*
-El resto de este módulo recorre cada etapa en detalle, con código que puedes ejecutar y modificar.
+El resto de este módulo recorre cada etapa con detalle, con código que puedes ejecutar y modificar.
### ¿Qué Enfoque RAG Usa Este Tutorial?
-LangChain4j ofrece tres maneras de implementar RAG, cada una con un nivel diferente de abstracción. El diagrama a continuación los compara lado a lado:
+LangChain4j ofrece tres formas de implementar RAG, cada una con un nivel diferente de abstracción. El diagrama a continuación las compara lado a lado:
*Este diagrama compara los tres enfoques RAG de LangChain4j — Fácil, Nativo y Avanzado — mostrando sus componentes clave y cuándo usar cada uno.*
-| Enfoque | Qué Hace | Compromiso |
+| Enfoque | Qué Hace | Compensación |
|---|---|---|
-| **Easy RAG** | Conecta todo automáticamente mediante `AiServices` y `ContentRetriever`. Anotas una interfaz, adjuntas un recuperador, y LangChain4j maneja embedding, búsqueda y ensamblaje del prompt detrás de escena. | Menor código, pero no ves lo que sucede en cada paso. |
-| **Native RAG** | Llamas tú mismo al modelo de embedding, buscas en el almacén, construyes el prompt y generas la respuesta — paso explícito por paso. | Más código, pero cada etapa es visible y modificable. |
-| **Advanced RAG** | Usa el framework `RetrievalAugmentor` con transformadores de consulta enchufables, enrutadores, reordenadores e inyectores de contenido para pipelines de producción. | Máxima flexibilidad, pero con mucha más complejidad. |
+| **Easy RAG** | Conecta todo automáticamente a través de `AiServices` y `ContentRetriever`. Anotas una interfaz, adjuntas un recuperador, y LangChain4j maneja embedding, búsqueda y ensamblaje del prompt detrás de escena. | Código mínimo, pero no ves lo que pasa en cada paso. |
+| **Native RAG** | Llamas al modelo embedding, buscas en la tienda, construyes el prompt y generas la respuesta tú mismo — un paso explícito a la vez. | Más código, pero cada etapa es visible y modificable. |
+| **Advanced RAG** | Usa el framework `RetrievalAugmentor` con transformadores de consulta plug-ins, rutadores, reordenadores y inyectores de contenido para canalizaciones de grado producción. | Máxima flexibilidad, pero mucha más complejidad. |
-**Este tutorial usa el enfoque Nativo.** Cada paso del pipeline RAG — embedding de la consulta, búsqueda en el almacén vectorial, ensamblaje del contexto, y generación de la respuesta — está explícitamente escrito en [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Esto es intencional: como recurso de aprendizaje, es más importante que veas y entiendas cada etapa que minimizar el código. Una vez que te sientas cómodo con cómo encajan las piezas, puedes avanzar al Easy RAG para prototipos rápidos o al Advanced RAG para sistemas en producción.
+**Este tutorial usa el enfoque Nativo.** Cada paso de la canalización RAG — embedding de la consulta, búsqueda en la tienda vectorial, montaje del contexto y generación de la respuesta — está explicitado en [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Esto es intencionado: como recurso didáctico, es más importante que veas y entiendas cada etapa que minimizar el código. Una vez cómodo con cómo encajan las piezas, puedes pasar a Easy RAG para prototipos rápidos o Advanced RAG para sistemas de producción.
-> **💡 ¿Ya viste Easy RAG en acción?** El [módulo de Inicio Rápido](../00-quick-start/README.md) incluye un ejemplo de Preguntas y Respuestas de Documentos ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)) que usa el enfoque Easy RAG — LangChain4j maneja automáticamente embedding, búsqueda y ensamblaje del prompt. Este módulo da el siguiente paso al abrir ese pipeline para que puedas ver y controlar cada etapa tú mismo.
+> **💡 ¿Curioso sobre Easy RAG?** LangChain4j también ofrece un enfoque *Easy RAG* donde `AiServices` y un `ContentRetriever` manejan automáticamente embedding, búsqueda y ensamblaje del prompt. Este módulo toma la ruta más explícita — desarmando esa canalización para que veas y controles cada etapa.
-El diagrama a continuación muestra el pipeline Easy RAG de ese ejemplo de Inicio Rápido. Nota cómo `AiServices` y `EmbeddingStoreContentRetriever` ocultan toda la complejidad — cargas un documento, adjuntas un recuperador y obtienes respuestas. El enfoque Nativo en este módulo desglosa cada uno de esos pasos ocultos:
+El diagrama a continuación muestra la canalización Easy RAG. Observa cómo `AiServices` y `EmbeddingStoreContentRetriever` ocultan toda la complejidad — cargas un documento, adjuntas un recuperador y obtienes respuestas. El enfoque Nativo de este módulo abre cada uno de esos pasos ocultos:
-
+
-*Este diagrama muestra el pipeline Easy RAG de `SimpleReaderDemo.java`. Compara esto con el enfoque Nativo usado en este módulo: Easy RAG oculta embedding, recuperación y ensamblaje del prompt detrás de `AiServices` y `ContentRetriever` — cargas un documento, adjuntas un recuperador y obtienes respuestas. El enfoque Nativo en este módulo descompone ese pipeline para que llames cada etapa (embedding, búsqueda, ensamblaje del contexto, generación) tú mismo, proporcionándote plena visibilidad y control.*
+*Este diagrama muestra la canalización Easy RAG. Compárala con el enfoque Nativo usado en este módulo: Easy RAG oculta embedding, recuperación y ensamblaje del prompt detrás de `AiServices` y `ContentRetriever` — cargas un documento, adjuntas un recuperador y obtienes respuestas. El enfoque Nativo de este módulo desarma esa canalización para que llames cada etapa (embed, buscar, ensamblar contexto, generar) tú mismo, dándote visibilidad y control completos.*
## Cómo Funciona
-El pipeline RAG en este módulo se divide en cuatro etapas que se ejecutan en secuencia cada vez que un usuario hace una pregunta. Primero, un documento subido es **analizado y segmentado** en partes manejables. Esos fragmentos se convierten en **embeddings vectoriales** y se almacenan para poder compararse matemáticamente. Cuando llega una consulta, el sistema realiza una **búsqueda semántica** para encontrar los fragmentos más relevantes, y finalmente los pasa como contexto al LLM para **generar la respuesta**. Las secciones siguientes recorren cada etapa con el código real y diagramas. Veamos el primer paso.
+La canalización RAG en este módulo se divide en cuatro etapas que se ejecutan secuencialmente cada vez que un usuario hace una pregunta. Primero, un documento subido es **analizado y dividido en fragmentos** manejables. Esos fragmentos luego se convierten en **embeddings vectoriales** y se almacenan para que puedan compararse matemáticamente. Cuando llega una consulta, el sistema realiza una **búsqueda semántica** para encontrar los fragmentos más relevantes, y finalmente los pasa como contexto al LLM para la **generación de la respuesta**. Las secciones a continuación describen cada etapa con código y diagramas. Comencemos con el primer paso.
### Procesamiento de Documentos
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-Cuando subes un documento, el sistema lo analiza (PDF o texto plano), le adjunta metadatos como el nombre del archivo, y luego lo divide en fragmentos — piezas más pequeñas que caben cómodamente en la ventana de contexto del modelo. Estos fragmentos se superponen ligeramente para que no se pierda contexto en los límites.
+Cuando subes un documento, el sistema lo analiza (PDF o texto plano), adjunta metadatos como el nombre del archivo, y luego lo divide en fragmentos — piezas más pequeñas que caben cómodamente en la ventana de contexto del modelo. Estos fragmentos se solapan ligeramente para no perder contexto en los límites.
```java
-// Analizar el archivo cargado y envolverlo en un Documento LangChain4j
+// Analizar el archivo subido y envolverlo en un Documento de LangChain4j
Document document = Document.from(content, metadata);
// Dividir en fragmentos de 300 tokens con una superposición de 30 tokens
@@ -117,28 +116,28 @@ DocumentSplitter splitter = DocumentSplitters
List segments = splitter.split(document);
```
-El diagrama a continuación muestra cómo funciona esto visualmente. Observa cómo cada fragmento comparte algunos tokens con sus vecinos — la superposición de 30 tokens asegura que no se pierda contexto importante entre los cortes:
+El diagrama a continuación muestra cómo funciona visualmente. Observa cómo cada fragmento comparte algunos tokens con sus vecinos — el solapamiento de 30 tokens asegura que no se pierda contexto importante entre los fragmentos:
-
+
-*Este diagrama muestra un documento dividido en fragmentos de 300 tokens con superposición de 30 tokens, preservando el contexto en los límites del fragmento.*
+*Este diagrama muestra un documento dividiéndose en fragmentos de 300 tokens con un solapamiento de 30 tokens, preservando el contexto en los límites de los fragmentos.*
> **🤖 Prueba con [GitHub Copilot](https://github.com/features/copilot) Chat:** Abre [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) y pregunta:
-> - "¿Cómo divide LangChain4j los documentos en fragmentos y por qué es importante la superposición?"
+> - "¿Cómo divide LangChain4j documentos en fragmentos y por qué es importante el solapamiento?"
> - "¿Cuál es el tamaño óptimo de fragmento para diferentes tipos de documentos y por qué?"
-> - "¿Cómo manejo documentos en varios idiomas o con formato especial?"
+> - "¿Cómo manejo documentos en múltiples idiomas o con formato especial?"
### Creación de Embeddings
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-Cada fragmento se convierte en una representación numérica llamada embedding — esencialmente un convertidor de significado a números. El modelo de embedding no es "inteligente" como un modelo de chat; no puede seguir instrucciones, razonar o responder preguntas. Lo que puede hacer es mapear texto a un espacio matemático donde significados similares quedan cerca unos de otros — “coche” cerca de “automóvil”, “política de reembolso” cerca de “devuélveme el dinero.” Piensa en un modelo de chat como una persona con quien puedes hablar; un modelo de embedding es un sistema de archivo ultra-eficiente.
+Cada fragmento se convierte en una representación numérica llamada embedding — esencialmente un convertidor de significado a números. El modelo embedding no es "inteligente" como un modelo de chat; no puede seguir instrucciones, razonar ni responder preguntas. Lo que sí puede hacer es mapear el texto en un espacio matemático donde significados similares quedan cerca — "auto" cerca de "automóvil," "política de reembolso" cerca de "devolver mi dinero." Piensa en un modelo de chat como una persona con quien puedes hablar; un modelo embedding es un sistema de archivo ultra eficiente.
-El diagrama a continuación visualiza este concepto — entra texto, salen vectores numéricos, y significados similares producen vectores cercanos:
+El diagrama a continuación visualiza este concepto — el texto entra, vectores numéricos salen, y significados similares producen vectores cercanos:
-
+
-*Este diagrama muestra cómo un modelo de embedding convierte texto en vectores numéricos, ubicando significados similares — como “coche” y “automóvil” — cerca uno del otro en el espacio vectorial.*
+*Este diagrama muestra cómo un modelo embedding convierte texto en vectores numéricos, colocando significados similares — como "auto" y "automóvil" — cerca uno del otro en el espacio vectorial.*
```java
@Bean
@@ -154,29 +153,29 @@ EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-El diagrama de clases a continuación muestra los dos flujos separados en un pipeline RAG y las clases LangChain4j que los implementan. El **flujo de ingestión** (se ejecuta una vez al subir) divide el documento, embebe los fragmentos, y los almacena vía `.addAll()`. El **flujo de consulta** (se ejecuta cada vez que un usuario pregunta) embebe la pregunta, busca en el almacén vía `.search()`, y pasa el contexto encontrado al modelo de chat. Ambos flujos se conectan por la interfaz compartida `EmbeddingStore`:
+El diagrama de clases muestra los dos flujos separados en una canalización RAG y las clases LangChain4j que los implementan. El **flujo de ingestión** (se ejecuta una vez al subir) divide el documento, embebe los fragmentos y los almacena vía `.addAll()`. El **flujo de consulta** (se ejecuta cada vez que un usuario pregunta) embebe la pregunta, busca en la tienda vía `.search()` y pasa el contexto coincidente al modelo chat. Ambos flujos convergen en la interfaz compartida `EmbeddingStore`:
-*Este diagrama muestra los dos flujos en un pipeline RAG — ingestión y consulta — y cómo se conectan a través de un EmbeddingStore compartido.*
+*Este diagrama muestra los dos flujos en una canalización RAG — ingestión y consulta — y cómo se conectan a través de un EmbeddingStore compartido.*
-Una vez que los embeddings están almacenados, el contenido similar naturalmente se agrupa en el espacio vectorial. La visualización a continuación muestra cómo documentos sobre temas relacionados terminan como puntos cercanos, lo que hace posible la búsqueda semántica:
+Una vez almacenados los embeddings, el contenido similar naturalmente se agrupa en el espacio vectorial. La visualización a continuación muestra cómo documentos sobre temas relacionados terminan como puntos cercanos, lo que hace posible la búsqueda semántica:
-*Esta visualización muestra cómo documentos relacionados se agrupan juntos en espacio vectorial 3D, con temas como Documentación Técnica, Reglas de Negocio y Preguntas Frecuentes formando grupos distintos.*
+*Esta visualización muestra cómo documentos relacionados se agrupan en 3D en el espacio vectorial, con temas como Documentos Técnicos, Reglas de Negocio y FAQs formando grupos distintos.*
-Cuando un usuario realiza una búsqueda, el sistema sigue cuatro pasos: embebe los documentos una vez, embebe la consulta en cada búsqueda, compara el vector de la consulta contra todos los vectores almacenados usando similitud coseno, y devuelve los fragmentos con los puntajes más altos (top-K). El diagrama a continuación describe cada paso y las clases LangChain4j involucradas:
+Cuando un usuario busca, el sistema sigue cuatro pasos: embeddear los documentos una vez, embeddear la consulta en cada búsqueda, comparar el vector de la consulta contra todos los vectores almacenados usando similitud coseno, y devolver los fragmentos con las mejores puntuaciones top-K. El diagrama a continuación describe cada paso y las clases LangChain4j involucradas:
-
+
-*Este diagrama muestra el proceso de búsqueda por embedding en cuatro pasos: embedear documentos, embedear la consulta, comparar vectores con similitud coseno, y devolver los mejores resultados.*
+*Este diagrama muestra el proceso de búsqueda embedding en cuatro pasos: embeddear documentos, embeddear la consulta, comparar vectores con similitud coseno, y devolver los mejores resultados top-K.*
### Búsqueda Semántica
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Cuando haces una pregunta, tu consulta también se convierte en un embedding. El sistema compara el embedding de tu pregunta contra los embeddings de todos los fragmentos. Encuentra los fragmentos con los significados más similares — no solo coincidencias de palabras clave, sino similitud semántica real.
+Cuando haces una pregunta, tu pregunta también se convierte en embedding. El sistema compara el embedding de tu pregunta con todos los embeddings de los fragmentos de documento. Encuentra los fragmentos con los significados más similares — no solo palabras clave coincidentes, sino similitud semántica real.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -196,27 +195,27 @@ for (EmbeddingMatch match : matches) {
}
```
-El diagrama a continuación contrasta la búsqueda semántica con la búsqueda tradicional por palabras clave. Una búsqueda por palabra clave de “vehículo” no encuentra un fragmento sobre “coches y camiones,” pero la búsqueda semántica entiende que significan lo mismo y lo devuelve como resultado con alta puntuación:
+El diagrama a continuación compara la búsqueda semántica con la búsqueda tradicional por palabras clave. Una búsqueda por palabra clave de "vehículo" no encuentra un fragmento sobre "autos y camiones," pero la búsqueda semántica entiende que significan lo mismo y lo devuelve con alta puntuación:
*Este diagrama compara la búsqueda basada en palabras clave con la búsqueda semántica, mostrando cómo la búsqueda semántica recupera contenido conceptualmente relacionado incluso cuando las palabras clave exactas difieren.*
-Bajo el capó, la similitud se mide usando la similitud coseno: básicamente preguntando "¿están estas dos flechas apuntando en la misma dirección?" Dos fragmentos pueden usar palabras completamente diferentes, pero si significan lo mismo sus vectores apuntan en la misma dirección y obtienen una puntuación cercana a 1.0:
-
+Internamente, la similitud se mide usando similitud coseno — esencialmente preguntando "¿apuntan estas dos flechas en la misma dirección?" Dos fragmentos pueden usar palabras completamente diferentes, pero si significan lo mismo sus vectores apuntan en la misma dirección y la puntuación es cercana a 1.0:
-*Este diagrama ilustra la similitud coseno como el ángulo entre vectores de incrustaciones — vectores más alineados obtienen puntuaciones más cercanas a 1.0, indicando mayor similitud semántica.*
+
+*Este diagrama ilustra la similitud del coseno como el ángulo entre vectores de incrustación: los vectores más alineados obtienen una puntuación más cercana a 1.0, lo que indica una mayor similitud semántica.*
> **🤖 Prueba con [GitHub Copilot](https://github.com/features/copilot) Chat:** Abre [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) y pregunta:
> - "¿Cómo funciona la búsqueda por similitud con embeddings y qué determina la puntuación?"
-> - "¿Qué umbral de similitud debería usar y cómo afecta los resultados?"
+> - "¿Qué umbral de similitud debo usar y cómo afecta los resultados?"
> - "¿Cómo manejo casos donde no se encuentran documentos relevantes?"
### Generación de Respuestas
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Los fragmentos más relevantes se ensamblan en un prompt estructurado que incluye instrucciones explícitas, el contexto recuperado y la pregunta del usuario. El modelo lee esos fragmentos específicos y responde basado en esa información — solo puede usar lo que tiene frente a sí, lo que previene alucinaciones.
+Los fragmentos más relevantes se ensamblan en un prompt estructurado que incluye instrucciones explícitas, el contexto recuperado y la pregunta del usuario. El modelo lee esos fragmentos específicos y responde basándose en esa información: solo puede usar lo que tiene delante, lo que previene la alucinación.
```java
String context = matches.stream()
@@ -237,15 +236,15 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-El diagrama a continuación muestra este ensamblaje en acción — los fragmentos con la puntuación más alta del paso de búsqueda se inyectan en la plantilla de prompt, y el `OpenAiOfficialChatModel` genera una respuesta fundamentada:
+El diagrama a continuación muestra este ensamblaje en acción: los fragmentos con mayor puntuación del paso de búsqueda se inyectan en la plantilla del prompt, y el `OpenAiOfficialChatModel` genera una respuesta fundamentada:
-
+
*Este diagrama muestra cómo los fragmentos con mayor puntuación se ensamblan en un prompt estructurado, permitiendo que el modelo genere una respuesta fundamentada a partir de tus datos.*
## Ejecutar la Aplicación
-**Verificar despliegue:**
+**Verificar el despliegue:**
Asegúrate de que el archivo `.env` exista en el directorio raíz con las credenciales de Azure (creado durante el Módulo 01). Ejecuta esto desde el directorio del módulo (`03-rag/`):
@@ -256,30 +255,30 @@ cat ../.env # Debe mostrar AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
**PowerShell:**
```powershell
-Get-Content ..\.env # Debe mostrar AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+Get-Content ..\.env # Debería mostrar AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**Iniciar la aplicación:**
-> **Nota:** Si ya iniciaste todas las aplicaciones usando `./start-all.sh` desde el directorio raíz (como se describe en el Módulo 01), este módulo ya está corriendo en el puerto 8081. Puedes omitir los comandos de inicio a continuación e ir directamente a http://localhost:8081.
+> **Nota:** Si ya iniciaste todas las aplicaciones usando `./start-all.sh` desde el directorio raíz (como se describe en el Módulo 01), este módulo ya está ejecutándose en el puerto 8081. Puedes omitir los comandos de inicio a continuación e ir directamente a http://localhost:8081.
-**Opción 1: Usando Spring Boot Dashboard (Recomendado para usuarios de VS Code)**
+**Opción 1: Usar Spring Boot Dashboard (Recomendado para usuarios de VS Code)**
-El contenedor de desarrollo incluye la extensión Spring Boot Dashboard, que ofrece una interfaz visual para administrar todas las aplicaciones Spring Boot. Puedes encontrarla en la Barra de Actividad al lado izquierdo de VS Code (busca el ícono de Spring Boot).
+El contenedor de desarrollo incluye la extensión Spring Boot Dashboard, que proporciona una interfaz visual para gestionar todas las aplicaciones Spring Boot. Puedes encontrarlo en la Barra de Actividades al lado izquierdo de VS Code (busca el ícono de Spring Boot).
-Desde Spring Boot Dashboard, puedes:
+Desde el Spring Boot Dashboard, puedes:
- Ver todas las aplicaciones Spring Boot disponibles en el espacio de trabajo
- Iniciar/detener aplicaciones con un solo clic
-- Ver los logs de la aplicación en tiempo real
+- Ver los registros de la aplicación en tiempo real
- Monitorear el estado de la aplicación
-Simplemente haz clic en el botón de reproducir junto a "rag" para iniciar este módulo, o inicia todos los módulos a la vez.
+Simplemente haz clic en el botón de reproducir al lado de "rag" para iniciar este módulo, o inicia todos los módulos a la vez.
-
+
-*Esta captura de pantalla muestra el panel de control Spring Boot en VS Code, donde puedes iniciar, detener y monitorear aplicaciones visualmente.*
+*Esta captura de pantalla muestra el Spring Boot Dashboard en VS Code, donde puedes iniciar, detener y monitorear aplicaciones visualmente.*
-**Opción 2: Usando scripts shell**
+**Opción 2: Usar scripts de shell**
Inicia todas las aplicaciones web (módulos 01-04):
@@ -309,9 +308,9 @@ cd 03-rag
.\start.ps1
```
-Ambos scripts cargan automáticamente las variables de entorno del archivo `.env` raíz y construirán los JAR si no existen.
+Ambos scripts cargan automáticamente variables de entorno desde el archivo `.env` raíz y construirán los JAR si no existen.
-> **Nota:** Si prefieres construir todos los módulos manualmente antes de iniciar:
+> **Nota:** Si prefieres compilar todos los módulos manualmente antes de iniciar:
>
> **Bash:**
> ```bash
@@ -331,7 +330,7 @@ Abre http://localhost:8081 en tu navegador.
**Bash:**
```bash
-./stop.sh # Solo este módulo
+./stop.sh # Este módulo solamente
# O
cd .. && ./stop-all.sh # Todos los módulos
```
@@ -345,29 +344,29 @@ cd ..; .\stop-all.ps1 # Todos los módulos
## Uso de la Aplicación
-La aplicación proporciona una interfaz web para subir documentos y hacer preguntas.
+La aplicación ofrece una interfaz web para subir documentos y hacer preguntas.
-
+
-*Esta captura de pantalla muestra la interfaz de la aplicación RAG donde subes documentos y haces preguntas.*
+*Esta captura de pantalla muestra la interfaz de la aplicación RAG donde cargas documentos y haces preguntas.*
### Subir un Documento
-Comienza subiendo un documento - los archivos TXT funcionan mejor para pruebas. Se proporciona un `sample-document.txt` en este directorio que contiene información sobre características de LangChain4j, implementación RAG y mejores prácticas - perfecto para probar el sistema.
+Comienza subiendo un documento: los archivos TXT funcionan mejor para pruebas. Se ofrece un `sample-document.txt` en este directorio que contiene información sobre características de LangChain4j, implementación de RAG y mejores prácticas, ideal para probar el sistema.
-El sistema procesa tu documento, lo divide en fragmentos y crea embeddings para cada fragmento. Esto sucede automáticamente cuando subes el archivo.
+El sistema procesa tu documento, lo divide en fragmentos y crea embeddings para cada fragmento. Esto ocurre automáticamente al subirlo.
### Hacer Preguntas
-Ahora formula preguntas específicas sobre el contenido del documento. Intenta algo factual que esté claramente indicado en el documento. El sistema busca fragmentos relevantes, los incluye en el prompt y genera una respuesta.
+Ahora formula preguntas específicas sobre el contenido del documento. Prueba con algo factual que esté claramente indicado en el documento. El sistema busca fragmentos relevantes, los incluye en el prompt y genera una respuesta.
-### Verificar Referencias de Fuente
+### Revisar Referencias de Fuente
-Nota que cada respuesta incluye referencias de fuente con puntuaciones de similitud. Estas puntuaciones (de 0 a 1) muestran qué tan relevante fue cada fragmento para tu pregunta. Puntuaciones más altas significan mejores coincidencias. Esto te permite verificar la respuesta contra el material fuente.
+Observa que cada respuesta incluye referencias a las fuentes con puntuaciones de similitud. Estas puntuaciones (de 0 a 1) muestran qué tan relevante fue cada fragmento para tu pregunta. Las puntuaciones más altas significan mejores coincidencias. Esto te permite verificar la respuesta con el material fuente.
-*Esta captura de pantalla muestra los resultados de la consulta con la respuesta generada, referencias de fuente y puntuaciones de relevancia para cada fragmento recuperado.*
+*Esta captura de pantalla muestra resultados de consulta con la respuesta generada, referencias a fuentes y puntuaciones de relevancia para cada fragmento recuperado.*
### Experimenta con Preguntas
@@ -376,17 +375,17 @@ Prueba diferentes tipos de preguntas:
- Comparaciones: "¿Cuál es la diferencia entre X y Y?"
- Resúmenes: "Resume los puntos clave sobre Z"
-Observa cómo cambian las puntuaciones de relevancia según qué tan bien tu pregunta coincide con el contenido del documento.
+Observa cómo cambian las puntuaciones de relevancia según qué tan bien tu pregunta coincida con el contenido del documento.
## Conceptos Clave
### Estrategia de Fragmentación
-Los documentos se dividen en fragmentos de 300 tokens con 30 tokens de solapamiento. Este equilibrio asegura que cada fragmento tenga suficiente contexto para ser significativo mientras permanece lo suficientemente pequeño para incluir varios fragmentos en un prompt.
+Los documentos se dividen en fragmentos de 300 tokens con 30 tokens de solapamiento. Este equilibrio asegura que cada fragmento tenga suficiente contexto para ser significativo mientras se mantiene lo suficientemente pequeño para incluir múltiples fragmentos en un prompt.
### Puntuaciones de Similitud
-Cada fragmento recuperado viene con una puntuación de similitud entre 0 y 1 que indica qué tan cerca coincide con la pregunta del usuario. El diagrama a continuación visualiza los rangos de puntuación y cómo el sistema los usa para filtrar resultados:
+Cada fragmento recuperado viene con una puntuación de similitud entre 0 y 1 que indica qué tan de cerca coincide con la pregunta del usuario. El diagrama a continuación visualiza los rangos de puntuación y cómo el sistema los usa para filtrar resultados:
@@ -395,43 +394,43 @@ Cada fragmento recuperado viene con una puntuación de similitud entre 0 y 1 que
Las puntuaciones van de 0 a 1:
- 0.7-1.0: Altamente relevante, coincidencia exacta
- 0.5-0.7: Relevante, buen contexto
-- Por debajo de 0.5: Filtrado, demasiado disímil
+- Por debajo de 0.5: Filtrado, demasiado diferente
El sistema solo recupera fragmentos por encima del umbral mínimo para garantizar calidad.
-Los embeddings funcionan bien cuando el significado se agrupa claramente, pero tienen puntos ciegos. El diagrama a continuación muestra los modos comunes de falla: fragmentos demasiado grandes producen vectores imprecisos, fragmentos muy pequeños carecen de contexto, términos ambiguos apuntan a múltiples grupos, y las búsquedas de coincidencia exacta (IDs, números de parte) no funcionan con embeddings en absoluto:
+Los embeddings funcionan bien cuando el significado está claramente agrupado, pero tienen puntos ciegos. El diagrama a continuación muestra los modos comunes de fallo: fragmentos demasiado grandes producen vectores confusos, fragmentos demasiado pequeños carecen de contexto, términos ambiguos apuntan a múltiples grupos, y las búsquedas de coincidencia exacta (IDs, números de parte) no funcionan con embeddings en absoluto:
-*Este diagrama muestra modos comunes de falla de embeddings: fragmentos demasiado grandes, fragmentos demasiado pequeños, términos ambiguos que apuntan a múltiples grupos, y búsquedas de coincidencia exacta como IDs.*
+*Este diagrama muestra modos comunes de falla de embeddings: fragmentos demasiado grandes, fragmentos demasiado pequeños, términos ambiguos que apuntan a múltiples grupos y búsquedas de coincidencia exacta como IDs.*
### Almacenamiento en Memoria
-Este módulo usa almacenamiento en memoria para simplicidad. Cuando reinicias la aplicación, los documentos subidos se pierden. Los sistemas en producción usan bases de datos vectoriales persistentes como Qdrant o Azure AI Search.
+Este módulo usa almacenamiento en memoria para simplificar. Cuando reinicias la aplicación, se pierden los documentos subidos. Los sistemas en producción usan bases de datos de vectores persistentes como Qdrant o Azure AI Search.
-### Gestión de la Ventana de Contexto
+### Gestión de Ventana de Contexto
-Cada modelo tiene una ventana máxima de contexto. No puedes incluir todos los fragmentos de un documento grande. El sistema recupera los N fragmentos más relevantes (por defecto 5) para mantenerse dentro de los límites mientras proporciona suficiente contexto para respuestas precisas.
+Cada modelo tiene una ventana máxima de contexto. No puedes incluir cada fragmento de un documento grande. El sistema recupera los N fragmentos más relevantes (por defecto 5) para mantenerse dentro de los límites y proveer suficiente contexto para respuestas precisas.
## Cuándo Importa RAG
-RAG no siempre es el enfoque correcto. La guía de decisiones a continuación te ayuda a determinar cuándo RAG agrega valor frente a cuándo enfoques más simples — como incluir contenido directamente en el prompt o confiar en el conocimiento incorporado del modelo — son suficientes:
+RAG no siempre es el enfoque adecuado. La guía de decisión abajo te ayuda a determinar cuándo RAG aporta valor frente a cuándo enfoques más simples —como incluir contenido directamente en el prompt o confiar en el conocimiento interno del modelo— son suficientes:
-*Este diagrama muestra una guía de decisión para cuándo RAG agrega valor versus cuándo enfoques más simples son suficientes.*
+*Este diagrama muestra una guía de decisión para cuándo RAG aporta valor frente a cuándo enfoques más simples son suficientes.*
## Próximos Pasos
-**Próximo Módulo:** [04-tools - Agentes de IA con Herramientas](../04-tools/README.md)
+**Siguiente Módulo:** [04-tools - Agentes de IA con Herramientas](../04-tools/README.md)
---
-**Navegación:** [← Anterior: Módulo 02 - Ingeniería de Prompts](../02-prompt-engineering/README.md) | [Volver al Inicio](../README.md) | [Siguiente: Módulo 04 - Herramientas →](../04-tools/README.md)
+**Navegación:** [← Prev: Módulo 02 - Ingeniería de Prompts](../02-prompt-engineering/README.md) | [Volver al Inicio](../README.md) | [Siguiente: Módulo 04 - Herramientas →](../04-tools/README.md)
---
-**Aviso Legal**:
-Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional realizada por un humano. No somos responsables de ningún malentendido o interpretación errónea derivada del uso de esta traducción.
+**Descargo de responsabilidad**:
+Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción.
\ No newline at end of file
diff --git a/translations/es/04-tools/README.md b/translations/es/04-tools/README.md
index 149ff6d82..b7006b734 100644
--- a/translations/es/04-tools/README.md
+++ b/translations/es/04-tools/README.md
@@ -2,75 +2,75 @@
## Tabla de Contenidos
-- [Recorrido en Video](../../../04-tools)
-- [Lo que Aprenderás](../../../04-tools)
-- [Prerrequisitos](../../../04-tools)
-- [Entendiendo los Agentes de IA con Herramientas](../../../04-tools)
-- [Cómo Funciona la Llamada a Herramientas](../../../04-tools)
- - [Definiciones de Herramientas](../../../04-tools)
- - [Toma de Decisiones](../../../04-tools)
- - [Ejecución](../../../04-tools)
- - [Generación de Respuestas](../../../04-tools)
- - [Arquitectura: Auto-Conexión en Spring Boot](../../../04-tools)
-- [Encadenamiento de Herramientas](../../../04-tools)
-- [Ejecutar la Aplicación](../../../04-tools)
-- [Uso de la Aplicación](../../../04-tools)
- - [Prueba de Uso Simple de Herramientas](../../../04-tools)
- - [Prueba de Encadenamiento de Herramientas](../../../04-tools)
- - [Ver Flujo de Conversación](../../../04-tools)
- - [Experimentar con Diferentes Solicitudes](../../../04-tools)
-- [Conceptos Clave](../../../04-tools)
- - [Patrón ReAct (Razonar y Actuar)](../../../04-tools)
- - [Importancia de las Descripciones de las Herramientas](../../../04-tools)
- - [Gestión de Sesiones](../../../04-tools)
- - [Manejo de Errores](../../../04-tools)
-- [Herramientas Disponibles](../../../04-tools)
-- [Cuándo Usar Agentes Basados en Herramientas](../../../04-tools)
-- [Herramientas vs RAG](../../../04-tools)
-- [Próximos Pasos](../../../04-tools)
-
-## Recorrido en Video
+- [Video Tutorial](#video-tutorial)
+- [Lo Que Aprenderás](#lo-que-aprenderás)
+- [Prerequisitos](#prerequisitos)
+- [Entendiendo Agentes de IA con Herramientas](#entendiendo-agentes-de-ia-con-herramientas)
+- [Cómo Funciona la Llamada a Herramientas](#cómo-funciona-la-llamada-a-herramientas)
+ - [Definiciones de Herramientas](#definiciones-de-herramientas)
+ - [Toma de Decisiones](#toma-de-decisiones)
+ - [Ejecución](#ejecución)
+ - [Generación de la Respuesta](#generación-de-la-respuesta)
+ - [Arquitectura: Auto-conexión con Spring Boot](#arquitectura-auto-conexión-con-spring-boot)
+- [Encadenamiento de Herramientas](#encadenamiento-de-herramientas)
+- [Ejecutar la Aplicación](#ejecutar-la-aplicación)
+- [Usar la Aplicación](#uso-de-la-aplicación)
+ - [Prueba de Uso Simple de Herramientas](#prueba-el-uso-simple-de-herramientas)
+ - [Prueba el Encadenamiento de Herramientas](#prueba-la-cadena-de-herramientas)
+ - [Ver Flujo de Conversación](#observa-el-flujo-de-conversación)
+ - [Experimenta con Diferentes Solicitudes](#experimenta-con-diferentes-solicitudes)
+- [Conceptos Clave](#conceptos-clave)
+ - [Patrón ReAct (Razonar y Actuar)](#patrón-react-razonar-y-actuar)
+ - [Las Descripciones de las Herramientas Importan](#las-descripciones-de-herramientas-importan)
+ - [Gestión de Sesiones](#gestión-de-sesiones)
+ - [Manejo de Errores](#manejo-de-errores)
+- [Herramientas Disponibles](#herramientas-disponibles)
+- [Cuándo Usar Agentes Basados en Herramientas](#cuándo-usar-agentes-basados-en-herramientas)
+- [Herramientas vs RAG](#herramientas-vs-rag)
+- [Próximos Pasos](#próximos-pasos)
+
+## Video Tutorial
Mira esta sesión en vivo que explica cómo comenzar con este módulo:
-## Lo que Aprenderás
+## Lo Que Aprenderás
-Hasta ahora, has aprendido a mantener conversaciones con IA, estructurar indicaciones de manera efectiva y fundamentar respuestas en tus documentos. Pero todavía hay una limitación fundamental: los modelos de lenguaje solo pueden generar texto. No pueden consultar el clima, realizar cálculos, consultar bases de datos o interactuar con sistemas externos.
+Hasta ahora, has aprendido cómo mantener conversaciones con IA, estructurar prompts de manera efectiva y fundamentar respuestas en tus documentos. Pero todavía hay una limitación fundamental: los modelos de lenguaje solo pueden generar texto. No pueden consultar el clima, realizar cálculos, consultar bases de datos ni interactuar con sistemas externos.
-Las herramientas cambian esto. Al darle al modelo acceso a funciones que puede llamar, lo transformas de un generador de texto a un agente que puede tomar acciones. El modelo decide cuándo necesita una herramienta, cuál usar y qué parámetros pasar. Tu código ejecuta la función y devuelve el resultado. El modelo incorpora ese resultado en su respuesta.
+Las herramientas cambian esto. Al darle al modelo acceso a funciones que puede llamar, lo transformas de un generador de texto a un agente que puede tomar acciones. El modelo decide cuándo necesita una herramienta, qué herramienta usar y qué parámetros pasar. Tu código ejecuta la función y devuelve el resultado. El modelo incorpora ese resultado en su respuesta.
-## Prerrequisitos
+## Prerequisitos
-- Completar [Módulo 01 - Introducción](../01-introduction/README.md) (recursos Azure OpenAI desplegados)
-- Se recomiendan los módulos previos completados (este módulo refiere a [conceptos de RAG del Módulo 03](../03-rag/README.md) en la comparación Herramientas vs RAG)
-- Archivo `.env` en el directorio raíz con credenciales de Azure (creado con `azd up` en el Módulo 01)
+- Haber completado [Módulo 01 - Introducción](../01-introduction/README.md) (recursos Azure OpenAI desplegados)
+- Se recomiendan módulos previos completados (este módulo refiere a [conceptos de RAG del Módulo 03](../03-rag/README.md) en la comparación Herramientas vs RAG)
+- Archivo `.env` en el directorio raíz con credenciales Azure (creado por `azd up` en el Módulo 01)
-> **Nota:** Si no has completado el Módulo 01, sigue primero las instrucciones de despliegue allí.
+> **Nota:** Si no has completado el Módulo 01, sigue primero las instrucciones de despliegue ahí.
-## Entendiendo los Agentes de IA con Herramientas
+## Entendiendo Agentes de IA con Herramientas
-> **📝 Nota:** El término "agentes" en este módulo se refiere a asistentes de IA mejorados con capacidades de llamada a herramientas. Esto es diferente de los patrones **Agentic AI** (agentes autónomos con planificación, memoria y razonamiento en múltiples pasos) que abordaremos en [Módulo 05: MCP](../05-mcp/README.md).
+> **📝 Nota:** El término "agentes" en este módulo se refiere a asistentes de IA mejorados con capacidad de llamada a herramientas. Esto es diferente a los patrones de **Agentes Autónomos** (agentes autónomos con planificación, memoria y razonamiento multietapa) que cubriremos en [Módulo 05: MCP](../05-mcp/README.md).
-Sin herramientas, un modelo de lenguaje solo puede generar texto basado en sus datos de entrenamiento. Pregúntale el clima actual y tiene que adivinar. Dale herramientas, y puede llamar a una API del clima, realizar cálculos o consultar una base de datos — luego entretejer esos resultados reales en su respuesta.
+Sin herramientas, un modelo de lenguaje solo puede generar texto de sus datos de entrenamiento. Pregúntale por el clima actual, y debe adivinar. Dale herramientas, y puede llamar a una API del clima, realizar cálculos o consultar una base de datos — luego teje esos resultados reales en su respuesta.
-*Sin herramientas, el modelo solo puede adivinar — con herramientas puede llamar APIs, realizar cálculos y devolver datos en tiempo real.*
+*Sin herramientas el modelo solo puede adivinar — con herramientas puede llamar APIs, hacer cálculos y devolver datos en tiempo real.*
-Un agente de IA con herramientas sigue un patrón de **Razonamiento y Acción (ReAct)**. El modelo no solo responde — piensa en lo que necesita, actúa llamando a una herramienta, observa el resultado y luego decide si actúa nuevamente o entrega la respuesta final:
+Un agente de IA con herramientas sigue un patrón de **Razonar y Actuar (ReAct)**. El modelo no solo responde — piensa en lo que necesita, actúa llamando a una herramienta, observa el resultado, y luego decide si actuar de nuevo o entregar la respuesta final:
1. **Razonar** — El agente analiza la pregunta del usuario y determina qué información necesita
2. **Actuar** — El agente selecciona la herramienta correcta, genera los parámetros adecuados y la llama
-3. **Observar** — El agente recibe la salida de la herramienta y evalúa el resultado
-4. **Repetir o Responder** — Si se necesita más datos, el agente repite; si no, compone una respuesta en lenguaje natural
+3. **Observar** — El agente recibe el resultado de la herramienta y evalúa
+4. **Repetir o Responder** — Si necesita más datos, vuelve al paso 1; si no, compone una respuesta en lenguaje natural
-*El ciclo ReAct — el agente razona sobre qué hacer, actúa llamando a una herramienta, observa el resultado y repite hasta poder entregar la respuesta final.*
+*El ciclo ReAct — el agente razona qué hacer, actúa llamando una herramienta, observa el resultado y repite hasta entregar la respuesta final.*
-Esto ocurre automáticamente. Definís las herramientas y sus descripciones. El modelo maneja la toma de decisión sobre cuándo y cómo usarlas.
+Esto sucede automáticamente. Definiste las herramientas y sus descripciones. El modelo maneja la toma de decisiones sobre cuándo y cómo usarlas.
## Cómo Funciona la Llamada a Herramientas
@@ -78,7 +78,7 @@ Esto ocurre automáticamente. Definís las herramientas y sus descripciones. El
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-Defines funciones con descripciones claras y especificaciones de parámetros. El modelo ve esas descripciones en su prompt de sistema y comprende lo que hace cada herramienta.
+Defines funciones con descripciones claras y especificaciones de parámetros. El modelo ve estas descripciones en su prompt de sistema y entiende qué hace cada herramienta.
```java
@Component
@@ -96,7 +96,7 @@ public interface Assistant {
String chat(@MemoryId String sessionId, @UserMessage String message);
}
-// El asistente está conectado automáticamente por Spring Boot con:
+// El asistente está automáticamente conectado por Spring Boot con:
// - Bean ChatModel
// - Todos los métodos @Tool de las clases @Component
// - ChatMemoryProvider para la gestión de sesiones
@@ -106,129 +106,129 @@ El diagrama a continuación desglosa cada anotación y muestra cómo cada parte
-*Anatomía de una definición de herramienta — @Tool indica a la IA cuándo usarla, @P describe cada parámetro, y @AiService conecta todo al inicio.*
+*Anatomía de una definición de herramienta — @Tool le dice a la IA cuándo usarla, @P describe cada parámetro, y @AiService conecta todo junto al iniciar.*
> **🤖 Prueba con [GitHub Copilot](https://github.com/features/copilot) Chat:** Abre [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) y pregunta:
> - "¿Cómo integraría una API real del clima como OpenWeatherMap en lugar de datos simulados?"
-> - "¿Qué hace que una buena descripción de herramienta ayude a la IA a usarla correctamente?"
-> - "¿Cómo manejo errores de API y límites de tasa en implementaciones de herramientas?"
+> - "¿Qué hace una buena descripción de herramienta que ayuda a la IA a usarla correctamente?"
+> - "¿Cómo manejo errores de API y límites de tasa en la implementación de herramientas?"
### Toma de Decisiones
-Cuando un usuario pregunta "¿Cuál es el clima en Seattle?", el modelo no elige una herramienta al azar. Compara la intención del usuario con cada descripción de herramienta a la que tiene acceso, puntúa cada una por relevancia y selecciona la mejor coincidencia. Luego genera una llamada de función estructurada con los parámetros correctos — en este caso, fijando `location` a `"Seattle"`.
+Cuando un usuario pregunta "¿Cuál es el clima en Seattle?", el modelo no elige una herramienta al azar. Compara la intención del usuario con todas las descripciones de herramientas a las que tiene acceso, califica cada una en relevancia y selecciona la mejor. Luego genera una llamada de función estructurada con los parámetros correctos — en este caso, ajustando `location` a `"Seattle"`.
-Si ninguna herramienta coincide con la solicitud del usuario, el modelo recurre a responder con su propio conocimiento. Si varias herramientas coinciden, elige la más específica.
+Si ninguna herramienta coincide con la solicitud del usuario, el modelo responde con base en su propio conocimiento. Si múltiples herramientas coinciden, elige la más específica.
-*El modelo evalúa todas las herramientas disponibles contra la intención del usuario y selecciona la mejor coincidencia — por eso es importante escribir descripciones claras y específicas.*
+*El modelo evalúa cada herramienta disponible contra la intención del usuario y selecciona la mejor coincidencia — por eso es importante escribir descripciones claras y específicas de herramientas.*
### Ejecución
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-Spring Boot conecta automáticamente la interfaz declarativa `@AiService` con todas las herramientas registradas, y LangChain4j ejecuta las llamadas a herramientas automáticamente. Detrás de escena, una llamada completa a herramienta fluye a través de seis etapas — desde la pregunta en lenguaje natural del usuario hasta la respuesta final en lenguaje natural:
+Spring Boot conecta automáticamente la interfaz declarativa `@AiService` con todas las herramientas registradas, y LangChain4j ejecuta las llamadas a herramientas automáticamente. Detrás de escena, una llamada completa a herramienta atraviesa seis etapas — desde la pregunta en lenguaje natural del usuario hasta la respuesta también en lenguaje natural:
-*El flujo de punta a punta — el usuario hace una pregunta, el modelo selecciona una herramienta, LangChain4j la ejecuta y el modelo integra el resultado en una respuesta natural.*
+*El flujo de extremo a extremo — el usuario hace una pregunta, el modelo selecciona una herramienta, LangChain4j la ejecuta y el modelo integra el resultado en una respuesta natural.*
-Si ejecutaste el [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) en el Módulo 00, ya viste este patrón en acción — las herramientas `Calculator` eran llamadas de la misma forma. El diagrama de secuencia abajo muestra exactamente qué pasó internamente durante esa demo:
+Por detrás, `AiServices` ejecuta el mismo ciclo de llamada a herramientas para cualquier herramienta — aquí ilustrado con un simple `Calculator`. El diagrama de secuencia a continuación muestra exactamente qué sucede internamente:
-*El ciclo de llamada a herramientas desde la demo de Inicio Rápido — `AiServices` envía tu mensaje y esquemas de herramientas al LLM, el LLM responde con una llamada función como `add(42, 58)`, LangChain4j ejecuta el método `Calculator` localmente y devuelve el resultado para la respuesta final.*
+*El ciclo de llamada a herramientas — `AiServices` envía tu mensaje y esquemas de herramientas al LLM, el LLM responde con una llamada de función como `add(42, 58)`, LangChain4j ejecuta el método `Calculator` localmente y envía el resultado para la respuesta final.*
> **🤖 Prueba con [GitHub Copilot](https://github.com/features/copilot) Chat:** Abre [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) y pregunta:
> - "¿Cómo funciona el patrón ReAct y por qué es efectivo para agentes de IA?"
> - "¿Cómo decide el agente qué herramienta usar y en qué orden?"
-> - "¿Qué sucede si falla la ejecución de una herramienta? ¿Cómo debo manejar errores de forma robusta?"
+> - "¿Qué pasa si falla la ejecución de una herramienta — cómo manejar errores de forma robusta?"
-### Generación de Respuesta
+### Generación de la Respuesta
El modelo recibe los datos del clima y los formatea en una respuesta en lenguaje natural para el usuario.
-### Arquitectura: Auto-Conexión en Spring Boot
+### Arquitectura: Auto-conexión con Spring Boot
-Este módulo usa la integración de LangChain4j con Spring Boot mediante interfaces declarativas `@AiService`. Al iniciar, Spring Boot descubre cada `@Component` que contiene métodos con `@Tool`, tu bean `ChatModel` y el `ChatMemoryProvider` — luego los conecta todos en una sola interfaz `Assistant` sin código repetitivo.
+Este módulo usa la integración de LangChain4j con Spring Boot mediante interfaces declarativas `@AiService`. Al iniciar, Spring Boot descubre cada `@Component` que contiene métodos `@Tool`, tu bean `ChatModel` y el `ChatMemoryProvider` — luego los conecta todos en una sola interfaz `Assistant` sin código repetitivo.
-
+
-*La interfaz @AiService une el ChatModel, los componentes de herramientas y el proveedor de memoria — Spring Boot gestiona toda la conexión automáticamente.*
+*La interfaz @AiService une el ChatModel, componentes de herramientas y el proveedor de memoria — Spring Boot maneja toda la conexión automáticamente.*
-Aquí está el ciclo completo de la solicitud en un diagrama de secuencia — desde la solicitud HTTP a través del controlador, servicio y proxy auto-conectado, hasta la ejecución de la herramienta y la respuesta:
+Aquí está el ciclo completo de la solicitud como diagrama de secuencia — desde la petición HTTP pasando por el controlador, servicio y proxy auto-conectado, hasta la ejecución de la herramienta y regreso:
-
+
-*El ciclo completo de solicitud en Spring Boot — la solicitud HTTP fluye a través del controlador y servicio al proxy Assistant auto-conectado, que orquesta el LLM y las llamadas a herramientas automáticamente.*
+*Ciclo completo de solicitud Spring Boot — la petición HTTP pasa por el controlador y servicio al proxy Assistant auto-conectado, que orquesta el LLM y llamadas a herramientas automáticamente.*
Beneficios clave de este enfoque:
-- **Auto-conexión de Spring Boot** — ChatModel y herramientas inyectados automáticamente
-- **Patrón @MemoryId** — Gestión automática de memoria basada en sesión
+- **Auto-conexión en Spring Boot** — ChatModel y herramientas inyectadas automáticamente
+- **Patrón @MemoryId** — Gestión automática de memoria por sesión
- **Instancia única** — Assistant creado una vez y reutilizado para mejor rendimiento
-- **Ejecución segura de tipo** — Métodos Java llamados directamente con conversión de tipos
-- **Orquestación de múltiples turnos** — Maneja encadenamiento de herramientas automáticamente
-- **Cero código repetitivo** — Sin llamadas manuales a `AiServices.builder()` ni mapas de memoria
+- **Ejecución segura en tipos** — Métodos Java llamados directamente con conversión de tipos
+- **Orquestación multivuelta** — Maneja encadenamiento de herramientas automáticamente
+- **Cero boilerplate** — Sin llamadas manuales a `AiServices.builder()` ni mapas de memoria
-Enfoques alternativos (manual `AiServices.builder()`) requieren más código y pierden los beneficios de integración con Spring Boot.
+Enfoques alternativos (manual `AiServices.builder()`) requieren más código y pierden beneficios de integración con Spring Boot.
## Encadenamiento de Herramientas
-**Encadenamiento de Herramientas** — El verdadero poder de los agentes basados en herramientas aparece cuando una sola pregunta requiere múltiples herramientas. Pregunta "¿Cuál es el clima en Seattle en Fahrenheit?" y el agente encadena automáticamente dos herramientas: primero llama a `getCurrentWeather` para obtener la temperatura en Celsius, luego pasa ese valor a `celsiusToFahrenheit` para la conversión — todo en un solo turno de conversación.
+**Encadenamiento de Herramientas** — El poder real de agentes basados en herramientas se muestra cuando una sola pregunta requiere múltiples herramientas. Pregunta "¿Cuál es el clima en Seattle en Fahrenheit?" y el agente encadena automáticamente dos herramientas: primero llama a `getCurrentWeather` para obtener la temperatura en Celsius, luego pasa ese valor a `celsiusToFahrenheit` para convertirlo — todo en una sola vuelta de conversación.
-*Encadenamiento de herramientas en acción — el agente llama primero a getCurrentWeather, luego pasa el resultado en Celsius a celsiusToFahrenheit y entrega una respuesta combinada.*
+*Encadenamiento de herramientas en acción — el agente llama primero getCurrentWeather, luego pasa el resultado en Celsius a celsiusToFahrenheit y entrega una respuesta combinada.*
-**Fallos Graceful** — Pide el clima en una ciudad que no está en los datos simulados. La herramienta devuelve un mensaje de error y la IA explica que no puede ayudar en lugar de fallar. Las herramientas fallan de forma segura. El diagrama a continuación contrasta ambos enfoques — con manejo adecuado de errores, el agente captura la excepción y responde amablemente, mientras sin él la aplicación entera colapsa:
+**Fallas Graceful** — Pide el clima en una ciudad que no está en los datos simulados. La herramienta devuelve un mensaje de error, y la IA explica que no puede ayudar en lugar de fallar. Las herramientas fallan de forma segura. El diagrama a continuación contrasta los dos enfoques — con manejo adecuado de errores, el agente captura la excepción y responde con ayuda, mientras que sin él la aplicación entera falla:
-*Cuando una herramienta falla, el agente captura el error y responde con una explicación útil en lugar de fallar.*
+*Cuando una herramienta falla, el agente atrapa el error y responde con una explicación útil en lugar de fallar.*
-Esto sucede en un solo turno de conversación. El agente orquesta múltiples llamadas a herramientas de forma autónoma.
+Esto ocurre en una sola vuelta de conversación. El agente orquesta múltiples llamadas a herramientas autónomamente.
## Ejecutar la Aplicación
-**Verificar despliegue:**
+**Verifica el despliegue:**
-Asegúrate de que el archivo `.env` exista en el directorio raíz con las credenciales de Azure (creado durante el Módulo 01). Ejecuta esto desde el directorio del módulo (`04-tools/`):
+Asegúrate de que el archivo `.env` exista en el directorio raíz con credenciales Azure (creado durante el Módulo 01). Ejecuta esto desde el directorio del módulo (`04-tools/`):
**Bash:**
```bash
-cat ../.env # Debería mostrar AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+cat ../.env # Debe mostrar AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**PowerShell:**
```powershell
-Get-Content ..\.env # Debería mostrar AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+Get-Content ..\.env # Debe mostrar AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**Iniciar la aplicación:**
+**Inicia la aplicación:**
-> **Nota:** Si ya iniciaste todas las aplicaciones usando `./start-all.sh` desde el directorio raíz (como se describió en el Módulo 01), este módulo ya está ejecutándose en el puerto 8084. Puedes omitir los comandos de inicio abajo y acceder directamente a http://localhost:8084.
+> **Nota:** Si ya iniciaste todas las aplicaciones usando `./start-all.sh` desde el directorio raíz (como se describió en el Módulo 01), este módulo ya está corriendo en el puerto 8084. Puedes saltarte los comandos de inicio y abrir directamente http://localhost:8084.
-**Opción 1: Usando el Spring Boot Dashboard (Recomendado para usuarios de VS Code)**
+**Opción 1: Usar el Spring Boot Dashboard (Recomendado para usuarios de VS Code)**
-El contenedor de desarrollo incluye la extensión Spring Boot Dashboard, que proporciona una interfaz visual para administrar todas las aplicaciones Spring Boot. La encontrarás en la Barra de Actividad al lado izquierdo de VS Code (busca el ícono de Spring Boot).
+El contenedor de desarrollo incluye la extensión Spring Boot Dashboard, que ofrece una interfaz visual para manejar todas las aplicaciones Spring Boot. Puedes encontrarla en la Barra de Actividades al lado izquierdo de VS Code (busca el ícono de Spring Boot).
-Desde el Spring Boot Dashboard, puedes:
-- Ver todas las aplicaciones Spring Boot disponibles en el espacio de trabajo
-- Iniciar/detener aplicaciones con un solo clic
-- Ver logs de aplicaciones en tiempo real
+Desde Spring Boot Dashboard puedes:
+- Ver todas las aplicaciones Spring Boot disponibles en el área de trabajo
+- Iniciar/detener aplicaciones con un solo click
+- Ver logs de la aplicación en tiempo real
- Monitorear el estado de las aplicaciones
-Simplemente haga clic en el botón de reproducir junto a "tools" para comenzar este módulo, o inicie todos los módulos a la vez.
-Así es como se ve el Spring Boot Dashboard en VS Code:
+Solo haz clic en el botón de reproducir junto a "tools" para iniciar este módulo, o inicia todos los módulos a la vez.
-
+Así se ve Spring Boot Dashboard en VS Code:
+
-*El Spring Boot Dashboard en VS Code — iniciar, detener y monitorear todos los módulos desde un solo lugar*
+*El Panel de Spring Boot en VS Code: inicia, detén y monitorea todos los módulos desde un solo lugar*
-**Opción 2: Usando scripts de shell**
+**Opción 2: Usando scripts shell**
-Inicie todas las aplicaciones web (módulos 01-04):
+Inicia todas las aplicaciones web (módulos 01-04):
**Bash:**
```bash
@@ -242,7 +242,7 @@ cd .. # Desde el directorio raíz
.\start-all.ps1
```
-O inicie solo este módulo:
+O inicia solo este módulo:
**Bash:**
```bash
@@ -256,9 +256,9 @@ cd 04-tools
.\start.ps1
```
-Ambos scripts cargan automáticamente las variables de entorno desde el archivo `.env` raíz y construirán los JARs si no existen.
+Ambos scripts cargan automáticamente las variables de entorno desde el archivo `.env` raíz y compilarán los JAR si no existen.
-> **Nota:** Si prefiere compilar todos los módulos manualmente antes de iniciar:
+> **Nota:** Si prefieres compilar todos los módulos manualmente antes de iniciar:
>
> **Bash:**
> ```bash
@@ -272,7 +272,7 @@ Ambos scripts cargan automáticamente las variables de entorno desde el archivo
> mvn clean package -DskipTests
> ```
-Abra http://localhost:8084 en su navegador.
+Abre http://localhost:8084 en tu navegador.
**Para detener:**
@@ -292,88 +292,88 @@ cd ..; .\stop-all.ps1 # Todos los módulos
## Uso de la Aplicación
-La aplicación ofrece una interfaz web donde puedes interactuar con un agente de IA que tiene acceso a herramientas de clima y conversión de temperatura. Así es como se ve la interfaz — incluye ejemplos rápidos y un panel de chat para enviar solicitudes:
+La aplicación ofrece una interfaz web donde puedes interactuar con un agente de IA que tiene acceso a herramientas de clima y conversión de temperatura. Así es como se ve la interfaz: incluye ejemplos de inicio rápido y un panel de chat para enviar solicitudes:
-
+
-*La interfaz de Herramientas del Agente de IA: ejemplos rápidos e interfaz de chat para interactuar con herramientas*
+*La interfaz de Herramientas del Agente IA - ejemplos rápidos e interfaz de chat para interactuar con las herramientas*
-### Pruebe un Uso Simple de Herramientas
+### Prueba el Uso Simple de Herramientas
-Comience con una solicitud sencilla: "Convertir 100 grados Fahrenheit a Celsius". El agente reconoce que necesita la herramienta de conversión de temperatura, la llama con los parámetros correctos y devuelve el resultado. Note lo natural que se siente — no especificó qué herramienta usar ni cómo llamarla.
+Comienza con una solicitud sencilla: "Convierte 100 grados Fahrenheit a Celsius". El agente reconoce que necesita la herramienta de conversión de temperatura, la usa con los parámetros correctos y devuelve el resultado. Observa lo natural que se siente: no especificaste qué herramienta usar ni cómo llamarla.
-### Pruebe la Cadena de Herramientas
+### Prueba la Cadena de Herramientas
-Ahora intente algo más complejo: "¿Cuál es el clima en Seattle y conviértalo a Fahrenheit?" Observe cómo el agente procesa esto en pasos. Primero obtiene el clima (que devuelve Celsius), reconoce que debe convertir a Fahrenheit, llama a la herramienta de conversión y combina ambos resultados en una sola respuesta.
+Ahora intenta algo más complejo: "¿Cuál es el clima en Seattle y conviértelo a Fahrenheit?" Mira cómo el agente trabaja paso a paso. Primero obtiene el clima (que devuelve en Celsius), reconoce que debe convertir a Fahrenheit, llama a la herramienta de conversión y combina ambos resultados en una sola respuesta.
-### Vea el Flujo de la Conversación
+### Observa el Flujo de Conversación
-La interfaz de chat mantiene el historial de la conversación, permitiendo interacciones multi-turno. Puede ver todas las consultas y respuestas anteriores, facilitando seguir la conversación y entender cómo el agente construye el contexto a lo largo de múltiples intercambios.
+La interfaz de chat mantiene el historial de la conversación, permitiéndote tener interacciones de varios turnos. Puedes ver todas las consultas y respuestas anteriores, facilitando seguir la conversación y entender cómo el agente construye contexto a través de múltiples intercambios.
-
+
-*Conversación multi-turno mostrando conversiones simples, consultas meteorológicas y encadenamiento de herramientas*
+*Conversación de múltiples turnos mostrando conversiones simples, consultas del clima y encadenamiento de herramientas*
-### Experimente con Diferentes Solicitudes
+### Experimenta con Diferentes Solicitudes
-Pruebe varias combinaciones:
-- Consultas meteorológicas: "¿Cuál es el clima en Tokio?"
-- Conversiones de temperatura: "¿Cuánto es 25 °C en Kelvin?"
-- Consultas combinadas: "Revisa el clima en París y dime si está por encima de 20 °C"
+Prueba varias combinaciones:
+- Consultas del clima: "¿Cuál es el clima en Tokio?"
+- Conversiones de temperatura: "¿Cuánto es 25°C en Kelvin?"
+- Consultas combinadas: "Consulta el clima en París y dime si está arriba de 20°C"
-Observe cómo el agente interpreta el lenguaje natural y lo mapea a llamadas apropiadas a herramientas.
+Observa cómo el agente interpreta el lenguaje natural y lo mapea a llamadas apropiadas a herramientas.
## Conceptos Clave
-### Patrón ReAct (Razonamiento y Acción)
+### Patrón ReAct (Razonar y Actuar)
-El agente alterna entre razonar (decidir qué hacer) y actuar (usar herramientas). Este patrón permite la resolución autónoma de problemas en lugar de solo responder a instrucciones.
+El agente alterna entre razonar (decidir qué hacer) y actuar (usar herramientas). Este patrón permite resolver problemas de forma autónoma en lugar de solo responder instrucciones.
-### Las Descripciones de las Herramientas Importan
+### Las Descripciones de Herramientas Importan
-La calidad de las descripciones de tus herramientas afecta directamente qué tan bien el agente las utiliza. Descripciones claras y específicas ayudan al modelo a entender cuándo y cómo llamar a cada herramienta.
+La calidad de las descripciones de tus herramientas afecta directamente qué tan bien el agente las usa. Descripciones claras y específicas ayudan al modelo a entender cuándo y cómo llamar cada herramienta.
### Gestión de Sesiones
-La anotación `@MemoryId` habilita la gestión automática de memoria basada en sesiones. Cada ID de sesión obtiene su propia instancia `ChatMemory` gestionada por el bean `ChatMemoryProvider`, de modo que múltiples usuarios pueden interactuar con el agente simultáneamente sin que sus conversaciones se mezclen. El siguiente diagrama muestra cómo múltiples usuarios se dirigen a almacenes de memoria aislados según sus IDs de sesión:
+La anotación `@MemoryId` permite la gestión automática de memoria basada en sesiones. Cada ID de sesión obtiene su propia instancia de `ChatMemory` gestionada por el bean `ChatMemoryProvider`, por lo que múltiples usuarios pueden interactuar con el agente simultáneamente sin mezclar sus conversaciones. El siguiente diagrama muestra cómo múltiples usuarios son dirigidos a almacenes de memoria aislados según sus IDs de sesión:
-
+
-*Cada ID de sesión se asigna a un historial de conversación aislado — los usuarios nunca ven los mensajes de otros.*
+*Cada ID de sesión se mapea a un historial de conversación aislado — los usuarios nunca ven los mensajes de los demás.*
### Manejo de Errores
-Las herramientas pueden fallar — las API pueden agotar tiempo, los parámetros pueden ser inválidos, los servicios externos pueden caer. Los agentes en producción necesitan manejo de errores para que el modelo pueda explicar problemas o intentar alternativas en lugar de colapsar toda la aplicación. Cuando una herramienta lanza una excepción, LangChain4j la captura y envía el mensaje de error al modelo, que entonces puede explicar el problema en lenguaje natural.
+Las herramientas pueden fallar — las APIs pueden tener tiempo de espera, parámetros podrían ser inválidos, servicios externos pueden caerse. Los agentes en producción necesitan manejo de errores para que el modelo pueda explicar problemas o intentar alternativas en vez de que toda la aplicación falle. Cuando una herramienta lanza una excepción, LangChain4j la captura y envía el mensaje de error de vuelta al modelo, el cual puede explicar el problema en lenguaje natural.
## Herramientas Disponibles
El diagrama a continuación muestra el amplio ecosistema de herramientas que puedes construir. Este módulo demuestra herramientas de clima y temperatura, pero el mismo patrón `@Tool` funciona para cualquier método Java — desde consultas a bases de datos hasta procesamiento de pagos.
-
+
-*Cada método Java anotado con @Tool queda disponible para la IA — el patrón se extiende a bases de datos, APIs, correo electrónico, operaciones de archivos y más.*
+*Cualquier método Java anotado con @Tool está disponible para la IA — el patrón se extiende a bases de datos, APIs, correo, operaciones de archivos y más.*
## Cuándo Usar Agentes Basados en Herramientas
-No todas las solicitudes necesitan herramientas. La decisión depende de si la IA necesita interactuar con sistemas externos o puede responder con su propio conocimiento. La siguiente guía resume cuándo las herramientas añaden valor y cuándo no son necesarias:
+No todas las solicitudes necesitan herramientas. La decisión depende de si la IA necesita interactuar con sistemas externos o puede responder desde su propio conocimiento. La guía siguiente resume cuándo las herramientas agregan valor y cuándo no son necesarias:
-
+
-*Una guía rápida para decidir — las herramientas son para datos en tiempo real, cálculos y acciones; el conocimiento general y tareas creativas no las necesitan.*
+*Guía rápida de decisión: las herramientas son para datos en tiempo real, cálculos y acciones; el conocimiento general y tareas creativas no las necesitan.*
## Herramientas vs RAG
-Los módulos 03 y 04 amplían lo que la IA puede hacer, pero de formas fundamentalmente diferentes. RAG le da al modelo acceso a **conocimiento** recuperando documentos. Las Herramientas le dan al modelo la capacidad de tomar **acciones** llamando funciones. El diagrama a continuación compara estos dos enfoques lado a lado — desde cómo opera cada flujo de trabajo hasta las compensaciones entre ellos:
+Los módulos 03 y 04 amplían lo que la IA puede hacer, pero de formas fundamentalmente diferentes. RAG le da al modelo acceso a **conocimiento** recuperando documentos. Las herramientas le dan la capacidad de tomar **acciones** llamando funciones. El diagrama a continuación compara estos dos enfoques lado a lado — desde cómo funciona cada flujo de trabajo hasta sus compromisos:
-
+
-*RAG recupera información de documentos estáticos — Las Herramientas ejecutan acciones y obtienen datos dinámicos en tiempo real. Muchos sistemas de producción combinan ambos.*
+*RAG recupera información de documentos estáticos — Herramientas ejecutan acciones y obtienen datos dinámicos en tiempo real. Muchos sistemas en producción combinan ambos.*
-En la práctica, muchos sistemas de producción combinan ambos enfoques: RAG para fundamentar respuestas en tu documentación y Herramientas para obtener datos en vivo o realizar operaciones.
+En la práctica, muchos sistemas de producción combinan ambos enfoques: RAG para fundamentar respuestas en tu documentación, y Herramientas para obtener datos en vivo o realizar operaciones.
## Próximos Pasos
-**Próximo Módulo:** [05-mcp - Protocolo de Contexto del Modelo (MCP)](../05-mcp/README.md)
+**Siguiente módulo:** [05-mcp - Protocolo de Contexto de Modelo (MCP)](../05-mcp/README.md)
---
@@ -383,5 +383,5 @@ En la práctica, muchos sistemas de producción combinan ambos enfoques: RAG par
**Descargo de responsabilidad**:
-Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos responsabilizamos por malentendidos o interpretaciones erróneas derivadas del uso de esta traducción.
+Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción.
\ No newline at end of file
diff --git a/translations/es/README.md b/translations/es/README.md
index 218092738..aad61a237 100644
--- a/translations/es/README.md
+++ b/translations/es/README.md
@@ -9,11 +9,11 @@ Un curso para construir aplicaciones de IA con LangChain4j y Azure OpenAI GPT-5.
#### Soportado vía GitHub Action (Automatizado y Siempre Actualizado)
-[Árabe](../ar/README.md) | [Bengalí](../bn/README.md) | [Búlgaro](../bg/README.md) | [Birmano (Myanmar)](../my/README.md) | [Chino (Simplificado)](../zh-CN/README.md) | [Chino (Tradicional, Hong Kong)](../zh-HK/README.md) | [Chino (Tradicional, Macao)](../zh-MO/README.md) | [Chino (Tradicional, Taiwán)](../zh-TW/README.md) | [Croata](../hr/README.md) | [Checo](../cs/README.md) | [Danés](../da/README.md) | [Neerlandés](../nl/README.md) | [Estonio](../et/README.md) | [Finés](../fi/README.md) | [Francés](../fr/README.md) | [Alemán](../de/README.md) | [Griego](../el/README.md) | [Hebreo](../he/README.md) | [Hindi](../hi/README.md) | [Húngaro](../hu/README.md) | [Indonesio](../id/README.md) | [Italiano](../it/README.md) | [Japonés](../ja/README.md) | [Kannada](../kn/README.md) | [Jemer](../km/README.md) | [Coreano](../ko/README.md) | [Lituano](../lt/README.md) | [Malayo](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepalí](../ne/README.md) | [Pidgin Nigeriano](../pcm/README.md) | [Noruego](../no/README.md) | [Persa (Farsi)](../fa/README.md) | [Polaco](../pl/README.md) | [Portugués (Brasil)](../pt-BR/README.md) | [Portugués (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Rumano](../ro/README.md) | [Ruso](../ru/README.md) | [Serbio (Cirílico)](../sr/README.md) | [Eslovaco](../sk/README.md) | [Esloveno](../sl/README.md) | [Español](./README.md) | [Suajili](../sw/README.md) | [Sueco](../sv/README.md) | [Tagalo (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Tailandés](../th/README.md) | [Turco](../tr/README.md) | [Ucraniano](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamita](../vi/README.md)
+[Árabe](../ar/README.md) | [Bengalí](../bn/README.md) | [Búlgaro](../bg/README.md) | [Birmano (Myanmar)](../my/README.md) | [Chino (Simplificado)](../zh-CN/README.md) | [Chino (Tradicional, Hong Kong)](../zh-HK/README.md) | [Chino (Tradicional, Macao)](../zh-MO/README.md) | [Chino (Tradicional, Taiwán)](../zh-TW/README.md) | [Croata](../hr/README.md) | [Checo](../cs/README.md) | [Danés](../da/README.md) | [Holandés](../nl/README.md) | [Estonio](../et/README.md) | [Finlandés](../fi/README.md) | [Francés](../fr/README.md) | [Alemán](../de/README.md) | [Griego](../el/README.md) | [Hebreo](../he/README.md) | [Hindi](../hi/README.md) | [Húngaro](../hu/README.md) | [Indonesio](../id/README.md) | [Italiano](../it/README.md) | [Japonés](../ja/README.md) | [Canarés](../kn/README.md) | [Jemer](../km/README.md) | [Coreano](../ko/README.md) | [Lituano](../lt/README.md) | [Malayo](../ms/README.md) | [Malayalam](../ml/README.md) | [Maratí](../mr/README.md) | [Nepalí](../ne/README.md) | [Pidgin Nigeriano](../pcm/README.md) | [Noruego](../no/README.md) | [Persa (Farsi)](../fa/README.md) | [Polaco](../pl/README.md) | [Portugués (Brasil)](../pt-BR/README.md) | [Portugués (Portugal)](../pt-PT/README.md) | [Panyabí (Gurmukhi)](../pa/README.md) | [Rumano](../ro/README.md) | [Ruso](../ru/README.md) | [Serbio (Cirílico)](../sr/README.md) | [Eslovaco](../sk/README.md) | [Esloveno](../sl/README.md) | [Español](./README.md) | [Swahili](../sw/README.md) | [Sueco](../sv/README.md) | [Tagalo (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Tailandés](../th/README.md) | [Turco](../tr/README.md) | [Ucraniano](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamita](../vi/README.md)
> **¿Prefieres Clonar Localmente?**
>
-> Este repositorio incluye más de 50 traducciones de idiomas que aumentan significativamente el tamaño de la descarga. Para clonar sin traducciones, usa la extracción parcial:
+> Este repositorio incluye traducciones en más de 50 idiomas, lo que aumenta significativamente el tamaño de la descarga. Para clonar sin traducciones, usa la extracción parcial:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -29,21 +29,20 @@ Un curso para construir aplicaciones de IA con LangChain4j y Azure OpenAI GPT-5.
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> Esto te da todo lo necesario para completar el curso con una descarga mucho más rápida.
+> Esto te proporciona todo lo necesario para completar el curso con una descarga mucho más rápida.
## Tabla de Contenidos
-1. [Inicio Rápido](00-quick-start/README.md) - Comienza con LangChain4j
-2. [Introducción](01-introduction/README.md) - Aprende los fundamentos de LangChain4j
-3. [Ingeniería de Prompts](02-prompt-engineering/README.md) - Domina el diseño efectivo de prompts
-4. [RAG (Generación Aumentada con Recuperación)](03-rag/README.md) - Construye sistemas inteligentes basados en conocimiento
-5. [Herramientas](04-tools/README.md) - Integra herramientas externas y asistentes simples
-6. [MCP (Protocolo de Contexto de Modelo)](05-mcp/README.md) - Trabaja con el Protocolo de Contexto de Modelo (MCP) y módulos agentes
+1. [Introducción](01-introduction/README.md) - Aprende los fundamentos de LangChain4j
+2. [Ingeniería de Prompts](02-prompt-engineering/README.md) - Domina el diseño efectivo de prompts
+3. [RAG (Generación Aumentada por Recuperación)](03-rag/README.md) - Construye sistemas inteligentes basados en conocimiento
+4. [Herramientas](04-tools/README.md) - Integra herramientas externas y asistentes simples
+5. [MCP (Protocolo de Contexto del Modelo)](05-mcp/README.md) - Trabaja con el Protocolo de Contexto del Modelo (MCP) y módulos Agénticos
-### Recorridos en Video
+### Videos Explicativos
-Cada módulo tiene una sesión en vivo complementaria donde exploramos los conceptos y el código paso a paso.
+Cada módulo tiene una sesión en vivo acompañante donde repasamos los conceptos y el código paso a paso.
| Módulo | Video |
|--------|-------|
@@ -54,34 +53,34 @@ Cada módulo tiene una sesión en vivo complementaria donde exploramos los conce
---
-## Ruta de Aprendizaje
+## Ruta de Aprendizaje
**¿Nuevo en LangChain4j?** Consulta el [Glosario](docs/GLOSSARY.md) para definiciones de términos y conceptos clave.
> **Inicio Rápido**
-1. Haz un fork de este repositorio en tu cuenta de GitHub
+1. Haz un fork de este repositorio a tu cuenta de GitHub
2. Haz clic en **Code** → pestaña **Codespaces** → **...** → **Nuevo con opciones...**
3. Usa los valores predeterminados – esto seleccionará el contenedor de Desarrollo creado para este curso
4. Haz clic en **Crear codespace**
5. Espera 5-10 minutos para que el entorno esté listo
-6. Ve directamente a [Inicio Rápido](./00-quick-start/README.md) para comenzar!
+6. Ve directamente a [Introducción](./01-introduction/README.md) para comenzar
-Después de completar los módulos, explora la [Guía de Pruebas](docs/TESTING.md) para ver conceptos de prueba de LangChain4j en acción.
+Después de completar los módulos, explora la [Guía de Testing](docs/TESTING.md) para ver los conceptos de testing de LangChain4j en acción.
-> **Nota:** Esta capacitación utiliza tanto GitHub Models como Azure OpenAI. El módulo [Inicio Rápido](00-quick-start/README.md) usa GitHub Models (no se requiere suscripción a Azure), mientras que los módulos 1-5 usan Azure OpenAI. Comienza con una [cuenta gratuita de Azure](https://aka.ms/azure-free-account) si no tienes una.
+> **Nota:** Esta capacitación usa Azure OpenAI. Comienza con una [cuenta Azure GRATIS](https://aka.ms/azure-free-account) si no tienes una.
-## Aprendiendo con GitHub Copilot
+## Aprendizaje con GitHub Copilot
-Para empezar a programar rápido, abre este proyecto en un GitHub Codespace o en tu IDE local con el devcontainer provisto. El devcontainer usado en este curso viene preconfigurado con GitHub Copilot para programación asistida por IA.
+Para comenzar a programar rápidamente, abre este proyecto en un GitHub Codespace o en tu IDE local con el devcontainer proporcionado. El devcontainer usado en este curso viene preconfigurado con GitHub Copilot para programación asistida por IA.
-Cada ejemplo de código incluye preguntas sugeridas que puedes hacerle a GitHub Copilot para profundizar en tu comprensión. Busca los prompt 💡/🤖 en:
+Cada ejemplo de código incluye preguntas sugeridas que puedes hacerle a GitHub Copilot para profundizar tu comprensión. Busca los prompts 💡/🤖 en:
- **Encabezados de archivos Java** - Preguntas específicas para cada ejemplo
-- **README de los módulos** - Preguntas para explorar tras los ejemplos de código
+- **READMEs de los módulos** - Prompts de exploración después de ejemplos de código
-**Cómo usarlo:** Abre cualquier archivo de código y haz a Copilot las preguntas sugeridas. Tiene contexto completo del código y puede explicar, extender y sugerir alternativas.
+**Cómo usar:** Abre cualquier archivo de código y hazle a Copilot las preguntas sugeridas. Tiene contexto completo del código y puede explicar, extender y sugerir alternativas.
¿Quieres aprender más? Consulta [Copilot para Programación Asistida por IA](https://aka.ms/GitHubCopilotAI).
@@ -111,32 +110,33 @@ Cada ejemplo de código incluye preguntas sugeridas que puedes hacerle a GitHub
---
-### Aprendizaje Central
+### Aprendizaje Básico
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
-[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
+
+[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
### Serie Copilot
-[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
-## Obtener Ayuda
+## Obtener ayuda
Si te quedas atascado o tienes alguna pregunta sobre cómo crear aplicaciones de IA, únete a:
-[](https://aka.ms/foundry/discord)
+[](https://aka.ms/foundry/discord)
-Si tienes comentarios sobre el producto o errores mientras desarrollas, visita:
+Si tienes comentarios sobre el producto o errores mientras construyes, visita:
-[](https://aka.ms/foundry/forum)
+[](https://aka.ms/foundry/forum)
## Licencia
@@ -145,6 +145,6 @@ Licencia MIT - Consulta el archivo [LICENSE](../../LICENSE) para más detalles.
---
-**Descargo de responsabilidad**:
-Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional realizada por humanos. No nos hacemos responsables de ningún malentendido o interpretación errónea derivada del uso de esta traducción.
+**Descargo de responsabilidad**:
+Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción.
\ No newline at end of file
diff --git a/translations/es/docs/GLOSSARY.md b/translations/es/docs/GLOSSARY.md
index 0889093be..4d5a85dee 100644
--- a/translations/es/docs/GLOSSARY.md
+++ b/translations/es/docs/GLOSSARY.md
@@ -1,44 +1,44 @@
-# Glosario de LangChain4j
+# Glosario LangChain4j
## Tabla de Contenidos
-- [Conceptos Básicos](../../../docs)
-- [Componentes de LangChain4j](../../../docs)
-- [Conceptos de IA/ML](../../../docs)
-- [Guardrails](../../../docs)
-- [Ingeniería de Prompts](../../../docs)
-- [RAG (Generación Aumentada con Recuperación)](../../../docs)
-- [Agentes y Herramientas](../../../docs)
-- [Módulo Agente](../../../docs)
-- [Protocolo de Contexto de Modelo (MCP)](../../../docs)
-- [Servicios de Azure](../../../docs)
-- [Pruebas y Desarrollo](../../../docs)
+- [Conceptos Fundamentales](#conceptos-fundamentales)
+- [Componentes de LangChain4j](#componentes-de-langchain4j)
+- [Conceptos de IA/ML](#conceptos-de-iaml)
+- [Guardarraíles](#guardarraíles)
+- [Ingeniería de Prompts](#prompt-engineering---module-02)
+- [RAG (Generación Aumentada por Recuperación)](#rag-retrieval-augmented-generation---module-03)
+- [Agentes y Herramientas](#agents-and-tools---module-04)
+- [Módulo Agéntico](#agentic-module---module-05)
+- [Protocolo de Contexto de Modelo (MCP)](#model-context-protocol-mcp---module-05)
+- [Servicios de Azure](#azure-services---module-01)
+- [Pruebas y Desarrollo](#testing-and-development---testing-guide)
-Referencia rápida de términos y conceptos utilizados en todo el curso.
+Referencia rápida para términos y conceptos usados a lo largo del curso.
-## Conceptos Básicos
+## Conceptos Fundamentales
**Agente de IA** - Sistema que usa IA para razonar y actuar de forma autónoma. [Módulo 04](../04-tools/README.md)
**Cadena** - Secuencia de operaciones donde la salida alimenta el siguiente paso.
-**Fragmentación** - Dividir documentos en partes más pequeñas. Típico: 300-500 tokens con solapamiento. [Módulo 03](../03-rag/README.md)
+**Segmentación** - Dividir documentos en partes más pequeñas. Típico: 300-500 tokens con superposición. [Módulo 03](../03-rag/README.md)
-**Ventana de Contexto** - Máximo de tokens que un modelo puede procesar. GPT-5.2: 400K tokens (hasta 272K entrada, 128K salida).
+**Ventana de Contexto** - Máximo de tokens que un modelo puede procesar. GPT-5.2: 400K tokens (hasta 272K de entrada, 128K de salida).
**Embeddings** - Vectores numéricos que representan el significado del texto. [Módulo 03](../03-rag/README.md)
-**Llamada de Función** - Modelo genera solicitudes estructuradas para llamar a funciones externas. [Módulo 04](../04-tools/README.md)
+**Llamada a Función** - El modelo genera solicitudes estructuradas para llamar funciones externas. [Módulo 04](../04-tools/README.md)
**Alucinación** - Cuando los modelos generan información incorrecta pero plausible.
-**Prompt** - Entrada de texto para un modelo de lenguaje. [Módulo 02](../02-prompt-engineering/README.md)
+**Prompt** - Texto de entrada para un modelo de lenguaje. [Módulo 02](../02-prompt-engineering/README.md)
-**Búsqueda Semántica** - Búsqueda por significado usando embeddings, no por palabras clave. [Módulo 03](../03-rag/README.md)
+**Búsqueda Semántica** - Búsqueda por significado usando embeddings, no palabras clave. [Módulo 03](../03-rag/README.md)
-**Con estado vs Sin estado** - Sin estado: sin memoria. Con estado: mantiene historial de conversación. [Módulo 01](../01-introduction/README.md)
+**Con Estado vs Sin Estado** - Sin estado: sin memoria. Con estado: mantiene historial de conversación. [Módulo 01](../01-introduction/README.md)
-**Tokens** - Unidades básicas de texto que los modelos procesan. Afecta costos y límites. [Módulo 01](../01-introduction/README.md)
+**Tokens** - Unidades básicas de texto que procesan los modelos. Afecta costos y límites. [Módulo 01](../01-introduction/README.md)
**Encadenamiento de Herramientas** - Ejecución secuencial de herramientas donde la salida informa la siguiente llamada. [Módulo 04](../04-tools/README.md)
@@ -48,13 +48,13 @@ Referencia rápida de términos y conceptos utilizados en todo el curso.
**OpenAiOfficialChatModel** - Cliente unificado para modelos OpenAI y Azure OpenAI.
-**OpenAiOfficialEmbeddingModel** - Crea embeddings usando el cliente oficial de OpenAI (soporta OpenAI y Azure OpenAI).
+**OpenAiOfficialEmbeddingModel** - Crea embeddings usando el cliente Oficial OpenAI (compatible con OpenAI y Azure OpenAI).
**ChatModel** - Interfaz principal para modelos de lenguaje.
-**ChatMemory** - Mantiene el historial de conversación.
+**ChatMemory** - Mantiene historial de conversación.
-**ContentRetriever** - Encuentra fragmentos relevantes de documentos para RAG.
+**ContentRetriever** - Encuentra fragmentos de documentos relevantes para RAG.
**DocumentSplitter** - Divide documentos en fragmentos.
@@ -62,67 +62,67 @@ Referencia rápida de términos y conceptos utilizados en todo el curso.
**EmbeddingStore** - Almacena y recupera embeddings.
-**MessageWindowChatMemory** - Mantiene ventana deslizante de mensajes recientes.
+**MessageWindowChatMemory** - Mantiene ventana móvil de mensajes recientes.
-**PromptTemplate** - Crea prompts reutilizables con marcadores `{{variable}}`.
+**PromptTemplate** - Crea prompts reutilizables con marcadores de posición `{{variable}}`.
**TextSegment** - Fragmento de texto con metadatos. Usado en RAG.
-**ToolExecutionRequest** - Representa la solicitud de ejecución de una herramienta.
+**ToolExecutionRequest** - Representa solicitud de ejecución de herramienta.
-**UserMessage / AiMessage / SystemMessage** - Tipos de mensajes en conversación.
+**UserMessage / AiMessage / SystemMessage** - Tipos de mensajes de conversación.
## Conceptos de IA/ML
-**Aprendizaje con pocos ejemplos** - Proveer ejemplos en los prompts. [Módulo 02](../02-prompt-engineering/README.md)
+**Aprendizaje con Pocos Ejemplos** - Proveer ejemplos en los prompts. [Módulo 02](../02-prompt-engineering/README.md)
-**Modelo de Lenguaje Grande (LLM)** - Modelos AI entrenados con grandes cantidades de texto.
+**Modelo de Lenguaje Grande (LLM)** - Modelos IA entrenados con grandes conjuntos de texto.
-**Esfuerzo de Razonamiento** - Parámetro GPT-5.2 que controla la profundidad del razonamiento. [Módulo 02](../02-prompt-engineering/README.md)
+**Esfuerzo de Razonamiento** - Parámetro GPT-5.2 que controla la profundidad del pensamiento. [Módulo 02](../02-prompt-engineering/README.md)
**Temperatura** - Controla la aleatoriedad de la salida. Bajo=determinista, alto=creativo.
**Base de Datos Vectorial** - Base de datos especializada para embeddings. [Módulo 03](../03-rag/README.md)
-**Aprendizaje sin ejemplos** - Realizar tareas sin ejemplos previos. [Módulo 02](../02-prompt-engineering/README.md)
+**Aprendizaje Zero-Shot** - Ejecutar tareas sin ejemplos. [Módulo 02](../02-prompt-engineering/README.md)
-## Guardrails - [Módulo 00](../00-quick-start/README.md)
+## Guardarraíles
-**Defensa en Profundidad** - Enfoque de seguridad multicapa que combina guardrails a nivel de aplicación con filtros de seguridad del proveedor.
+**Defensa en Profundidad** - Enfoque de seguridad por capas que combina guardarraíles a nivel de aplicación con filtros de seguridad del proveedor.
-**Bloqueo Duro** - El proveedor lanza error HTTP 400 por violaciones graves de contenido.
+**Bloqueo Estricto** - El proveedor lanza error HTTP 400 para violaciones severas de contenido.
-**InputGuardrail** - Interfaz de LangChain4j para validar la entrada del usuario antes de que llegue al LLM. Ahorra costo y latencia bloqueando prompts dañinos de forma temprana.
+**InputGuardrail** - Interfaz LangChain4j para validar entrada del usuario antes de llegar al LLM. Ahorra costo y latencia bloqueando prompts dañinos temprano.
-**InputGuardrailResult** - Tipo de retorno para validación guardrail: `success()` o `fatal("razón")`.
+**InputGuardrailResult** - Tipo de retorno para validación de guardarraíl: `success()` o `fatal("razón")`.
-**OutputGuardrail** - Interfaz para validar respuestas AI antes de devolverlas a usuarios.
+**OutputGuardrail** - Interfaz para validar respuestas de IA antes de devolverlas a usuarios.
-**Filtros de Seguridad del Proveedor** - Filtros de contenido incorporados de proveedores AI (p. ej., GitHub Models) que detectan violaciones a nivel API.
+**Filtros de Seguridad del Proveedor** - Filtros integrados de contenido de proveedores IA (ej. Azure OpenAI) que detectan violaciones en el nivel API.
-**Rechazo Suave** - El modelo se niega educadamente a responder sin lanzar error.
+**Rechazo Suave** - El modelo se niega cortésmente a responder sin generar error.
## Ingeniería de Prompts - [Módulo 02](../02-prompt-engineering/README.md)
-**Cadena de Pensamiento** - Razonamiento paso a paso para mejor precisión.
+**Cadena de Pensamiento** - Razonamiento paso a paso para mayor precisión.
-**Salida Restringida** - Imposición de formato o estructura específica.
+**Salida Restringida** - Imponer formato o estructura específica.
-**Alta Disposición** - Patrón GPT-5.2 para razonamiento minucioso.
+**Alta Motivación** - Patrón GPT-5.2 para razonamiento profundo.
-**Baja Disposición** - Patrón GPT-5.2 para respuestas rápidas.
+**Baja Motivación** - Patrón GPT-5.2 para respuestas rápidas.
-**Conversación Multi-Turno** - Mantener contexto a lo largo de intercambios.
+**Conversación Multi-Turno** - Mantener contexto en intercambios sucesivos.
-**Prompts Basados en Rol** - Establecer persona del modelo vía mensajes del sistema.
+**Prompt basado en Roles** - Configurar la persona del modelo via mensajes del sistema.
-**Autorreflexión** - El modelo evalúa y mejora su propia salida.
+**Autorreflexión** - El modelo evalúa y mejora su salida.
**Análisis Estructurado** - Marco fijo de evaluación.
-**Patrón de Ejecución de Tareas** - Planificar → Ejecutar → Resumir.
+**Patrón de Ejecución de Tarea** - Planificar → Ejecutar → Resumir.
-## RAG (Generación Aumentada con Recuperación) - [Módulo 03](../03-rag/README.md)
+## RAG (Generación Aumentada por Recuperación) - [Módulo 03](../03-rag/README.md)
**Pipeline de Procesamiento de Documentos** - Cargar → fragmentar → embeber → almacenar.
@@ -130,65 +130,65 @@ Referencia rápida de términos y conceptos utilizados en todo el curso.
**RAG** - Combina recuperación con generación para fundamentar respuestas.
-**Puntuación de Similitud** - Medida (0-1) de similitud semántica.
+**Puntaje de Similaridad** - Medida (0-1) de similitud semántica.
**Referencia de Fuente** - Metadatos sobre contenido recuperado.
## Agentes y Herramientas - [Módulo 04](../04-tools/README.md)
-**Anotación @Tool** - Marca métodos Java como herramientas accesibles para IA.
+**Anotación @Tool** - Marca métodos Java como herramientas invocables por IA.
**Patrón ReAct** - Razonar → Actuar → Observar → Repetir.
-**Gestión de Sesiones** - Contextos separados para usuarios diferentes.
+**Gestión de Sesiones** - Contextos separados para diferentes usuarios.
-**Herramienta** - Función que un agente de IA puede llamar.
+**Herramienta** - Función que un agente IA puede invocar.
-**Descripción de Herramienta** - Documentación del propósito y parámetros de la herramienta.
+**Descripción de Herramienta** - Documentación del propósito y parámetros de herramienta.
-## Módulo Agente - [Módulo 05](../05-mcp/README.md)
+## Módulo Agéntico - [Módulo 05](../05-mcp/README.md)
-**Anotación @Agent** - Marca interfaces como agentes AI con definición declarativa de comportamiento.
+**Anotación @Agent** - Marca interfaces como agentes IA con definición declarativa de comportamiento.
-**Agent Listener** - Hook para monitorear ejecución del agente vía `beforeAgentInvocation()` y `afterAgentInvocation()`.
+**Agent Listener** - Gancho para monitorear ejecución de agente vía `beforeAgentInvocation()` y `afterAgentInvocation()`.
-**Alcance Agente** - Memoria compartida donde agentes almacenan salidas usando `outputKey` para que otros agentes las consuman.
+**Alcance Agéntico** - Memoria compartida donde agentes almacenan salidas usando `outputKey` para que agentes posteriores consuman.
-**AgenticServices** - Factoría para crear agentes usando `agentBuilder()` y `supervisorBuilder()`.
+**AgenticServices** - Fábrica para crear agentes usando `agentBuilder()` y `supervisorBuilder()`.
-**Flujo Condicional** - Ruta basada en condiciones hacia diferentes agentes especialistas.
+**Flujo Condicional** - Ruta basada en condiciones hacia distintos agentes especialistas.
-**Humano en el Bucle** - Patrón de flujo que añade puntos de aprobación o revisión de contenido humana.
+**Humano en el Bucle** - Patrón de flujo añadiendo puntos de control humanos para aprobación o revisión de contenido.
**langchain4j-agentic** - Dependencia Maven para construcción declarativa de agentes (experimental).
-**Flujo en Bucle** - Iterar ejecución de agente hasta que se cumpla condición (p. ej., puntuación de calidad ≥ 0.8).
+**Flujo en Bucle** - Iterar ejecución de agente hasta que se cumpla condición (ej. puntaje de calidad ≥ 0.8).
-**outputKey** - Parámetro de anotación de agente que especifica dónde se guardan resultados en Alcance Agente.
+**outputKey** - Parámetro de anotación de agente que especifica dónde se almacenan resultados en Alcance Agéntico.
**Flujo Paralelo** - Ejecutar múltiples agentes simultáneamente para tareas independientes.
-**Estrategia de Respuesta** - Cómo el supervisor formula la respuesta final: LAST, SUMMARY o SCORED.
+**Estrategia de Respuesta** - Cómo el supervisor formula la respuesta final: ÚLTIMA, RESUMEN, o CON PUNTAJE.
**Flujo Secuencial** - Ejecutar agentes en orden donde la salida fluye al siguiente paso.
-**Patrón de Agente Supervisor** - Patrón agente avanzado donde un LLM supervisor decide dinámicamente qué sub-agentes invocar.
+**Patrón Agente Supervisor** - Patrón agéntico avanzado donde un supervisor LLM decide dinámicamente qué subagentes invocar.
## Protocolo de Contexto de Modelo (MCP) - [Módulo 05](../05-mcp/README.md)
**langchain4j-mcp** - Dependencia Maven para integración MCP en LangChain4j.
-**MCP** - Protocolo de Contexto de Modelo: estándar para conectar apps AI con herramientas externas. Construir una vez, usar en todas partes.
+**MCP** - Protocolo de Contexto de Modelo: estándar para conectar apps IA a herramientas externas. Crear una vez, usar en todas partes.
**Cliente MCP** - Aplicación que se conecta a servidores MCP para descubrir y usar herramientas.
**Servidor MCP** - Servicio que expone herramientas vía MCP con descripciones claras y esquemas de parámetros.
-**McpToolProvider** - Componente LangChain4j que envuelve herramientas MCP para uso en servicios AI y agentes.
+**McpToolProvider** - Componente LangChain4j que envuelve herramientas MCP para usar en servicios AI y agentes.
**McpTransport** - Interfaz para comunicación MCP. Implementaciones incluyen Stdio y HTTP.
-**Transporte Stdio** - Transporte de proceso local vía stdin/stdout. Útil para acceso a sistema de archivos o herramientas línea de comandos.
+**Transporte Stdio** - Transporte por proceso local vía stdin/stdout. Útil para acceso a sistema de archivos o herramientas de línea de comandos.
**StdioMcpTransport** - Implementación LangChain4j que lanza servidor MCP como subproceso.
@@ -198,35 +198,33 @@ Referencia rápida de términos y conceptos utilizados en todo el curso.
**Azure AI Search** - Búsqueda en la nube con capacidades vectoriales. [Módulo 03](../03-rag/README.md)
-**Azure Developer CLI (azd)** - Despliega recursos de Azure.
+**Azure Developer CLI (azd)** - Despliega recursos Azure.
-**Azure OpenAI** - Servicio AI empresarial de Microsoft.
+**Azure OpenAI** - Servicio de IA empresarial de Microsoft.
**Bicep** - Lenguaje de infraestructura como código para Azure. [Guía de Infraestructura](../01-introduction/infra/README.md)
-**Nombre de Despliegue** - Nombre para despliegue de modelo en Azure.
+**Nombre de Despliegue** - Nombre para el despliegue del modelo en Azure.
**GPT-5.2** - Último modelo OpenAI con control de razonamiento. [Módulo 02](../02-prompt-engineering/README.md)
## Pruebas y Desarrollo - [Guía de Pruebas](TESTING.md)
-**Dev Container** - Entorno de desarrollo conteinerizado. [Configuración](../../../.devcontainer/devcontainer.json)
-
-**GitHub Models** - Área de pruebas AI gratuita. [Módulo 00](../00-quick-start/README.md)
+**Contenedor Dev** - Entorno de desarrollo en contenedor. [Configuración](../../../.devcontainer/devcontainer.json)
**Pruebas en Memoria** - Pruebas con almacenamiento en memoria.
**Pruebas de Integración** - Pruebas con infraestructura real.
-**Maven** - Herramienta de automatización de construcción Java.
+**Maven** - Herramienta de automatización de compilación para Java.
-**Mockito** - Framework Java para mocks.
+**Mockito** - Framework de simulación para Java.
**Spring Boot** - Framework de aplicaciones Java. [Módulo 01](../01-introduction/README.md)
---
-**Aviso legal**:
-Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional realizada por humanos. No nos hacemos responsables de cualquier malentendido o interpretación errónea derivada del uso de esta traducción.
+**Descargo de responsabilidad**:
+Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción.
\ No newline at end of file
diff --git a/translations/es/docs/TESTING.md b/translations/es/docs/TESTING.md
index 83b2804f7..0f4188ed7 100644
--- a/translations/es/docs/TESTING.md
+++ b/translations/es/docs/TESTING.md
@@ -2,15 +2,15 @@
## Tabla de Contenidos
-- [Inicio Rápido](../../../docs)
-- [Qué Cubren las Pruebas](../../../docs)
-- [Ejecutar las Pruebas](../../../docs)
-- [Ejecutar Pruebas en VS Code](../../../docs)
-- [Patrones de Prueba](../../../docs)
-- [Filosofía de Pruebas](../../../docs)
-- [Próximos Pasos](../../../docs)
+- [Inicio Rápido](#inicio-rápido)
+- [Qué Cubren las Pruebas](#qué-cubren-las-pruebas)
+- [Ejecutando las Pruebas](#ejecutando-las-pruebas)
+- [Ejecutando Pruebas en VS Code](#ejecutando-pruebas-en-vs-code)
+- [Patrones de Prueba](#patrones-de-prueba)
+- [Filosofía de Pruebas](#filosofía-de-pruebas)
+- [Próximos Pasos](#próximos-pasos)
-Esta guía te lleva a través de las pruebas que demuestran cómo probar aplicaciones de IA sin requerir claves API ni servicios externos.
+Esta guía te lleva a través de las pruebas que demuestran cómo probar aplicaciones de IA sin requerir claves de API o servicios externos.
## Inicio Rápido
@@ -26,11 +26,11 @@ mvn test
mvn --% test
```
-Cuando todas las pruebas pasen, deberías ver una salida como la captura de pantalla a continuación — pruebas ejecutadas con cero fallos.
+Cuando todas las pruebas pasen, deberías ver una salida como la captura de pantalla a continuación — pruebas ejecutadas sin fallos.
-
+
-*Ejecución exitosa de pruebas mostrando todas las pruebas pasando sin fallos*
+*Ejecución exitosa de pruebas mostrando todas las pruebas aprobadas sin fallos*
## Qué Cubren las Pruebas
@@ -38,20 +38,19 @@ Este curso se enfoca en **pruebas unitarias** que se ejecutan localmente. Cada p
-*Pirámide de pruebas mostrando el balance entre pruebas unitarias (rápidas, aisladas), pruebas de integración (componentes reales) y pruebas end-to-end. Esta capacitación cubre pruebas unitarias.*
+*Pirámide de pruebas mostrando el equilibrio entre pruebas unitarias (rápidas, aisladas), pruebas de integración (componentes reales) y pruebas de extremo a extremo. Esta capacitación cubre pruebas unitarias.*
| Módulo | Pruebas | Enfoque | Archivos Clave |
|--------|---------|---------|----------------|
-| **00 - Inicio Rápido** | 6 | Plantillas de prompts y sustitución de variables | `SimpleQuickStartTest.java` |
| **01 - Introducción** | 8 | Memoria de conversación y chat con estado | `SimpleConversationTest.java` |
-| **02 - Ingeniería de Prompts** | 12 | Patrones GPT-5.2, niveles de eagerness, salida estructurada | `SimpleGpt5PromptTest.java` |
+| **02 - Ingeniería de Prompts** | 12 | Patrones GPT-5.2, niveles de entusiasmo, salida estructurada | `SimpleGpt5PromptTest.java` |
| **03 - RAG** | 10 | Ingesta de documentos, embeddings, búsqueda por similitud | `DocumentServiceTest.java` |
| **04 - Herramientas** | 12 | Llamado de funciones y encadenamiento de herramientas | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | Protocolo de Contexto de Modelo con transporte stdio | `SimpleMcpTest.java` |
+| **05 - MCP** | 8 | Protocolo de Contexto de Modelo con transporte Stdio | `SimpleMcpTest.java` |
-## Ejecutar las Pruebas
+## Ejecutando las Pruebas
-**Ejecutar todas las pruebas desde la raíz:**
+**Ejecuta todas las pruebas desde la raíz:**
**Bash:**
```bash
@@ -63,7 +62,7 @@ mvn test
mvn --% test
```
-**Ejecutar pruebas para un módulo específico:**
+**Ejecuta pruebas para un módulo específico:**
**Bash:**
```bash
@@ -75,11 +74,11 @@ mvn test -pl 01-introduction
**PowerShell:**
```powershell
cd 01-introduction; mvn --% test
-# O desde raíz
+# O desde la raíz
mvn --% test -pl 01-introduction
```
-**Ejecutar una sola clase de prueba:**
+**Ejecuta una clase de prueba individual:**
**Bash:**
```bash
@@ -91,45 +90,45 @@ mvn test -Dtest=SimpleConversationTest
mvn --% test -Dtest=SimpleConversationTest
```
-**Ejecutar un método de prueba específico:**
+**Ejecuta un método de prueba específico:**
**Bash:**
```bash
-mvn test -Dtest=SimpleConversationTest#deberíaMantenerHistorialDeConversación
+mvn test -Dtest=SimpleConversationTest#deberíaMantenerElHistorialDeConversación
```
**PowerShell:**
```powershell
-mvn --% test -Dtest=SimpleConversationTest#deberíaMantenerHistorialDeConversación
+mvn --% test -Dtest=SimpleConversationTest#deberíaMantenerElHistorialDeConversación
```
-## Ejecutar Pruebas en VS Code
+## Ejecutando Pruebas en VS Code
-Si usas Visual Studio Code, el Explorador de Pruebas ofrece una interfaz gráfica para ejecutar y depurar pruebas.
+Si usas Visual Studio Code, el Explorador de Pruebas proporciona una interfaz gráfica para ejecutar y depurar pruebas.
-
+
-*Explorador de Pruebas de VS Code mostrando el árbol de pruebas con todas las clases de prueba Java y métodos individuales de prueba*
+*Explorador de Pruebas de VS Code mostrando el árbol de pruebas con todas las clases Java y métodos de prueba individuales*
**Para ejecutar pruebas en VS Code:**
-1. Abre el Explorador de Pruebas haciendo clic en el ícono de matraz en la Barra de Actividades
-2. Expande el árbol de pruebas para ver todos los módulos y clases de prueba
-3. Haz clic en el botón de reproducir junto a cualquier prueba para ejecutarla individualmente
-4. Haz clic en "Run All Tests" para ejecutar todo el conjunto
-5. Haz clic derecho en cualquier prueba y selecciona "Debug Test" para establecer puntos de ruptura y depurar el código
+1. Abre el Explorador de Pruebas haciendo clic en el icono de matraz en la Barra de Actividades
+2. Expande el árbol de pruebas para ver todos los módulos y clases de prueba
+3. Haz clic en el botón de reproducir junto a cualquier prueba para ejecutarla individualmente
+4. Haz clic en "Ejecutar Todas las Pruebas" para ejecutar toda la suite
+5. Haz clic derecho en cualquier prueba y selecciona "Depurar Prueba" para establecer puntos de interrupción y avanzar por el código
-El Explorador de Pruebas muestra marcas verdes para las pruebas que pasan y provee mensajes detallados de fallo cuando las pruebas fallan.
+El Explorador de Pruebas muestra marcas verdes para las pruebas exitosas y proporciona mensajes detallados de fallos cuando las pruebas fallan.
## Patrones de Prueba
-### Patrón 1: Prueba de Plantillas de Prompt
+### Patrón 1: Probar Plantillas de Prompt
-El patrón más simple prueba plantillas de prompts sin llamar a ningún modelo de IA. Verificas que la sustitución de variables funcione correctamente y que los prompts estén formateados como se espera.
+El patrón más simple prueba plantillas de prompt sin llamar a ningún modelo de IA. Verificas que la sustitución de variables funcione correctamente y que los prompts estén formateados como se espera.
-
+
-*Pruebas de plantillas de prompt mostrando el flujo de sustitución de variables: plantilla con marcadores → valores aplicados → salida formateada verificada*
+*Pruebas de plantillas de prompt mostrando flujo de sustitución de variables: plantilla con marcadores → se aplican valores → salida formateada verificada*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-Esta prueba vive en `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
-
-**Ejecutarla:**
-
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#formatoDePlantillaDeSolicitudDePrueba
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#pruebaDeFormatoDePlantillaDeSolicitud
-```
+Este patrón verifica que la sustitución de variables funcione correctamente y que los prompts estén formateados como se espera — no se requiere clave API ni llamada al modelo.
-### Patrón 2: Mocking de Modelos de Lenguaje
+### Patrón 2: Simulación de Modelos de Lenguaje
Al probar la lógica de conversación, usa Mockito para crear modelos falsos que devuelven respuestas predeterminadas. Esto hace que las pruebas sean rápidas, gratuitas y deterministas.
-*Comparación mostrando por qué se prefieren mocks para pruebas: son rápidos, gratuitos, deterministas y no requieren claves API*
+*Comparación que muestra por qué se prefieren las simulaciones para pruebas: son rápidas, gratuitas, deterministas y no requieren claves API*
```java
@ExtendWith(MockitoExtension.class)
@@ -218,15 +205,15 @@ class SimpleConversationTest {
}
```
-Este patrón aparece en `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. El mock asegura un comportamiento consistente para que puedas verificar que la gestión de memoria funcione correctamente.
+Este patrón aparece en `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. El mock asegura un comportamiento consistente para que puedas verificar que la gestión de la memoria funcione correctamente.
### Patrón 3: Prueba de Aislamiento de Conversación
-La memoria de conversación debe mantener usuarios múltiples separados. Esta prueba verifica que las conversaciones no mezclen contextos.
+La memoria de conversación debe mantener separados a múltiples usuarios. Esta prueba verifica que las conversaciones no mezclen contextos.
-*Prueba de aislamiento de conversación mostrando almacenes de memoria separados para diferentes usuarios para evitar mezcla de contexto*
+*Prueba de aislamiento de conversación mostrando memorias separadas para diferentes usuarios para evitar mezcla de contextos*
```java
@Test
@@ -252,13 +239,13 @@ void shouldIsolateConversationsByid() {
Cada conversación mantiene su propio historial independiente. En sistemas de producción, este aislamiento es crítico para aplicaciones multiusuario.
-### Patrón 4: Prueba Independiente de Herramientas
+### Patrón 4: Probar Herramientas Independientemente
-Las herramientas son funciones que la IA puede llamar. Pruébalas directamente para asegurar que funcionen correctamente independientemente de las decisiones de la IA.
+Las herramientas son funciones que la IA puede llamar. Prúebalas directamente para asegurar que funcionen correctamente independientemente de las decisiones de la IA.
-*Pruebas independientes de herramientas mostrando ejecución de herramienta mock sin llamadas a IA para verificar lógica de negocio*
+*Pruebas de herramientas independientemente mostrando ejecución simulado de herramientas sin llamadas a IA para verificar la lógica empresarial*
```java
@Test
@@ -285,7 +272,7 @@ Estas pruebas de `04-tools/src/test/java/com/example/langchain4j/agents/tools/Si
### Patrón 5: Prueba RAG en Memoria
-Los sistemas RAG tradicionalmente requieren bases de datos vectoriales y servicios de embedding. El patrón en memoria te permite probar toda la tubería sin dependencias externas.
+Los sistemas RAG tradicionalmente requieren bases de datos vectoriales y servicios de embeddings. El patrón en memoria te permite probar todo el pipeline sin dependencias externas.
@@ -306,7 +293,7 @@ void testProcessTextDocument() {
}
```
-Esta prueba de `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` crea un documento en memoria y verifica la fragmentación y manejo de metadatos.
+Esta prueba de `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` crea un documento en memoria y verifica la segmentación y manejo de metadatos.
### Patrón 6: Pruebas de Integración MCP
@@ -314,7 +301,7 @@ El módulo MCP prueba la integración del Protocolo de Contexto de Modelo usando
Las pruebas en `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` validan el comportamiento del cliente MCP.
-**Ejecutarlas:**
+**Ejecuta las pruebas:**
**Bash:**
```bash
@@ -328,36 +315,35 @@ cd 05-mcp; mvn --% test
## Filosofía de Pruebas
-Prueba tu código, no la IA. Tus pruebas deben validar el código que escribes verificando cómo se construyen los prompts, cómo se maneja la memoria y cómo se ejecutan las herramientas. Las respuestas de IA varían y no deberían formar parte de las aserciones de las pruebas. Pregúntate si tu plantilla de prompt sustituye variables correctamente, no si la IA da la respuesta correcta.
+Prueba tu código, no la IA. Tus pruebas deberían validar el código que escribes verificando cómo se construyen los prompts, cómo se gestiona la memoria y cómo se ejecutan las herramientas. Las respuestas de IA varían y no deberían formar parte de las aserciones de prueba. Pregúntate si tu plantilla de prompt sustituye variables correctamente, no si la IA da la respuesta correcta.
-Usa mocks para los modelos de lenguaje. Son dependencias externas que son lentas, costosas y no deterministas. Mockear hace las pruebas rápidas con milisegundos en lugar de segundos, gratuitas sin costos de API y deterministas con el mismo resultado cada vez.
+Usa mocks para los modelos de lenguaje. Son dependencias externas lentas, costosas y no deterministas. Simularlas hace que las pruebas sean rápidas con tiempos en milisegundos en lugar de segundos, gratuitas sin costos de API y deterministas con el mismo resultado cada vez.
-Mantén las pruebas independientes. Cada prueba debe configurar sus propios datos, no depender de otras pruebas y limpiarse a sí misma. Las pruebas deben pasar sin importar el orden de ejecución.
+Mantén las pruebas independientes. Cada prueba debe configurar sus propios datos, no depender de otras pruebas y limpiar después de sí misma. Las pruebas deben pasar sin importar el orden de ejecución.
-Prueba casos límite más allá del camino feliz. Prueba entradas vacías, entradas muy grandes, caracteres especiales, parámetros inválidos y condiciones de límite. Estos a menudo revelan errores que el uso normal no expone.
+Prueba casos límite más allá del camino feliz. Intenta entradas vacías, entradas muy grandes, caracteres especiales, parámetros inválidos y condiciones de frontera. Estos casos a menudo revelan errores que el uso normal no expone.
-Usa nombres descriptivos. Compara `shouldMaintainConversationHistoryAcrossMultipleMessages()` con `test1()`. El primero te dice exactamente qué se está probando, haciendo que depurar fallos sea mucho más fácil.
+Usa nombres descriptivos. Compara `shouldMaintainConversationHistoryAcrossMultipleMessages()` con `test1()`. El primero te dice exactamente qué se está probando, haciendo la depuración mucho más sencilla.
## Próximos Pasos
Ahora que entiendes los patrones de prueba, profundiza en cada módulo:
-- **[00 - Inicio Rápido](../00-quick-start/README.md)** - Comienza con lo básico de plantillas de prompt
-- **[01 - Introducción](../01-introduction/README.md)** - Aprende gestión de memoria de conversación
-- **[02 - Ingeniería de Prompts](../02-prompt-engineering/README.md)** - Domina patrones de prompting GPT-5.2
-- **[03 - RAG](../03-rag/README.md)** - Construye sistemas de generación aumentada por recuperación
-- **[04 - Herramientas](../04-tools/README.md)** - Implementa llamadas a funciones y cadenas de herramientas
-- **[05 - MCP](../05-mcp/README.md)** - Integra Protocolo de Contexto de Modelo
+- **[01 - Introducción](../01-introduction/README.md)** - Aprende gestión de memoria de conversación
+- **[02 - Ingeniería de Prompts](../02-prompt-engineering/README.md)** - Domina los patrones de prompting GPT-5.2
+- **[03 - RAG](../03-rag/README.md)** - Construye sistemas de generación aumentada con recuperación
+- **[04 - Herramientas](../04-tools/README.md)** - Implementa llamadas a funciones y cadenas de herramientas
+- **[05 - MCP](../05-mcp/README.md)** - Integra el Protocolo de Contexto de Modelo
-Los README de cada módulo proveen explicaciones detalladas de los conceptos aquí probados.
+El README de cada módulo ofrece explicaciones detalladas de los conceptos probados aquí.
---
-**Navegación:** [← Volver al Principal](../README.md)
+**Navegación:** [← Volver al Inicio](../README.md)
---
-**Aviso legal**:
-Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la exactitud, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional realizada por humanos. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción.
+**Descargo de responsabilidad**:
+Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción.
\ No newline at end of file
diff --git a/translations/et/.co-op-translator.json b/translations/et/.co-op-translator.json
index 644fb7114..16fca6d41 100644
--- a/translations/et/.co-op-translator.json
+++ b/translations/et/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "et"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-02T22:07:03+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T09:15:44+00:00",
"source_file": "01-introduction/README.md",
"language_code": "et"
},
@@ -18,20 +18,20 @@
"language_code": "et"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-02T22:09:08+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T09:11:18+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "et"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-02T22:10:29+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T09:14:49+00:00",
"source_file": "03-rag/README.md",
"language_code": "et"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T09:28:29+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T09:13:35+00:00",
"source_file": "04-tools/README.md",
"language_code": "et"
},
@@ -54,8 +54,8 @@
"language_code": "et"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T16:59:40+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T09:09:52+00:00",
"source_file": "README.md",
"language_code": "et"
},
@@ -72,14 +72,14 @@
"language_code": "et"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-02T22:13:35+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T09:11:52+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "et"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-02T22:14:17+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T09:12:26+00:00",
"source_file": "docs/TESTING.md",
"language_code": "et"
}
diff --git a/translations/et/00-quick-start/README.md b/translations/et/00-quick-start/README.md
deleted file mode 100644
index 8a0d0a3e4..000000000
--- a/translations/et/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# Moodul 00: Kiire algus
-
-## Sisukord
-
-- [Sissejuhatus](../../../00-quick-start)
-- [Mis on LangChain4j?](../../../00-quick-start)
-- [LangChain4j sõltuvused](../../../00-quick-start)
-- [Eeltingimused](../../../00-quick-start)
-- [Seadistamine](../../../00-quick-start)
- - [1. Hangi oma GitHubi token](../../../00-quick-start)
- - [2. Määra oma token](../../../00-quick-start)
-- [Näidete käivitamine](../../../00-quick-start)
- - [1. Põhiline vestlus](../../../00-quick-start)
- - [2. Käskude mustrid](../../../00-quick-start)
- - [3. Funktsioonikõned](../../../00-quick-start)
- - [4. Dokumentide küsimused ja vastused (Lihtne RAG)](../../../00-quick-start)
- - [5. Vastutustundlik tehisintellekt](../../../00-quick-start)
-- [Mida iga näide näitab](../../../00-quick-start)
-- [Järgmised sammud](../../../00-quick-start)
-- [Probleemide lahendamine](../../../00-quick-start)
-
-## Sissejuhatus
-
-See kiire algus on mõeldud selleks, et saaksid LangChain4j-ga võimalikult kiiresti tööd alustada. See käsitleb AI-rakenduste ehitamise absoluutseid põhialuseid LangChain4j ja GitHubi mudelitega. Järgmistes moodulites lähed üle Azure OpenAI ja GPT-5.2 kasutamisele ning süüvid iga kontseptsiooni sügavamalt.
-
-## Mis on LangChain4j?
-
-LangChain4j on Java teek, mis lihtsustab AI-põhiste rakenduste loomist. HTTP klientide ja JSON parsimisega tegelemise asemel töötad puhaste Java API-dega.
-
-"Chain" LangChainis viitab mitme komponendi aheldamisele – võid näiteks ühendada käsku mudeliga, seejärel parseriga või ühendada mitmeid AI-kõnesid, kus üks väljund on järgmise sisend. See kiire algus keskendub aluspõhimõtetele, enne kui uurida keerukamaid ahelaid.
-
-
-
-*Ahelate ühendamine LangChain4j-s – ehitusplokid ühenduvad võimsate AI töövoogude loomiseks*
-
-Kasutame kolme põhikomponenti:
-
-**ChatModel** – Liides AI mudeliga suhtlemiseks. Kutsu `model.chat("prompt")` ja saa vastuseks tekst. Kasutame `OpenAiOfficialChatModel`-i, mis töötab OpenAI-ga ühilduvate lõpp-punktidega nagu GitHub Models.
-
-**AiServices** – Loob tüübiturvalisi AI teenuste liideseid. Määra meetodid, märgista neid `@Tool`-iga ja LangChain4j korraldab ülejäänu. AI kutsub automaatselt vajadusel sinu Java meetodeid.
-
-**MessageWindowChatMemory** – Säilitab vestlusajaloo. Ilma selleta on iga päring iseseisev, sellega mäletab AI eelnevaid sõnumeid ja hoiab konteksti mitme pöörde vältel.
-
-
-
-*LangChain4j arhitektuur – põhikomponendid töötavad koos, et võimendada sinu AI-rakendusi*
-
-## LangChain4j sõltuvused
-
-See kiire algus kasutab kolme Maven sõltuvust failis [`pom.xml`](../../../00-quick-start/pom.xml):
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-`langchain4j-open-ai-official` moodul pakub `OpenAiOfficialChatModel` klassi, mis ühendub OpenAI-ga ühilduvate API-dega. GitHub Models kasutab sama API vormingut, nii et eraldi adapterit ei ole vaja — piisas suunamisest baas-URL-iga `https://models.github.ai/inference`.
-
-`langchain4j-easy-rag` moodul pakub automaatset dokumentide jagamist, sisestamist ja päringut, et saaksid ehitada RAG-rakendusi ilma iga sammu käsitsi seadistamiseta.
-
-## Eeltingimused
-
-**Kas kasutad arenduscontainerit?** Java ja Maven on juba installitud. Sul on vaja vaid GitHubi isiklikku juurdepääsutokenit.
-
-**Kohalik arendus:**
-- Java 21 või uuem, Maven 3.9 või uuem
-- GitHubi isiklik juurdepääsutoken (juhised allpool)
-
-> **Märkus:** See moodul kasutab GitHub Models-ist mudelit `gpt-4.1-nano`. Ära muuda koodis mudelinime – see on seadistatud töötama GitHubi saadaolevate mudelitega.
-
-## Seadistamine
-
-### 1. Hangi oma GitHubi token
-
-1. Mine lehele [GitHub Settings → Personal Access Tokens](https://github.com/settings/personal-access-tokens)
-2. Vali "Generate new token"
-3. Sea kirjeldav nimi (nt "LangChain4j Demo")
-4. Sea aegumine (soovitavalt 7 päeva)
-5. "Account permissions" alt leia "Models" ja sea "Read-only"
-6. Kliki "Generate token"
-7. Kopeeri ja salvesta oma token – seda enam ei kuvata
-
-### 2. Määra oma token
-
-**Variant 1: Kasutades VS Code'i (Soovitatav)**
-
-Kui kasutad VS Code'i, lisa oma token projekti juurkataloogi faili `.env`:
-
-Kui `.env` faili pole, kopeeri `.env.example` failist `.env` või loo uus `.env` fail projekti juurkausta.
-
-**Näide `.env` failist:**
-```bash
-# Kaustas /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-Seejärel võid lihtsalt paremklõpsata mis tahes demo failil (nt `BasicChatDemo.java`) Exploreris ja valida **"Run Java"** või kasutada Run and Debug paneeli käivitustingimusi.
-
-**Variant 2: Kasutades terminali**
-
-Sea token keskkonnamuutujana:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## Näidete käivitamine
-
-**Kui kasutad VS Code'i:** Paremklõpsa lihtsalt mis tahes demo failil Exploreris ja vali **"Run Java"** või kasuta Run and Debug paneeli käivitustingimusi (veendu, et token on esmalt lisatud `.env` faili).
-
-**Kui kasutad Mavenit:** Võid kasutada ka käsurida:
-
-### 1. Põhiline vestlus
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. Käskude mustrid
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-Näitab zero-shot, few-shot, chain-of-thought ja rollipõhiseid käske.
-
-### 3. Funktsioonikõned
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-AI kutsub automaatselt sinu Java meetodeid vajadusel.
-
-### 4. Dokumentide küsimused ja vastused (Lihtne RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-Esita dokumentide kohta küsimusi, kasutades Easy RAG-i automaatse sisestuse ja otsinguga.
-
-### 5. Vastutustundlik tehisintellekt
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-Vaata, kuidas AI turvafiltrid blokeerivad kahjuliku sisu.
-
-## Mida iga näide näitab
-
-**Põhiline vestlus** – [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-Alusta siit, et näha LangChain4j lihtsaimat kasutust. Lood `OpenAiOfficialChatModel`-i, saadad päringu `.chat()` meetodi kaudu ja saad vastuse. See näitab alustalasid: kuidas algatada mudeleid kohandatud lõpp-punktide ja API võtmetega. Kui sellest mustrist aru saad, ehitub kõik muu sellele peale.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 Proovi [GitHub Copilot](https://github.com/features/copilot) Chat abil:** Ava [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) ja küsi:
-> - "Kuidas ma selle koodiga GitHub Models-ist Azure OpenAI-le üle läheksin?"
-> - "Milliseid muid parameetreid saan seadistada OpenAiOfficialChatModel.builder() meetodis?"
-> - "Kuidas lisada voogedastusega vastuseid selle asemel, et oodata täielikku vastust?"
-
-**Käskude inseneritöö** – [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-Nüüd kui tead, kuidas mudeliga rääkida, uurime, mida talle öelda. See demo kasutab sama mudeli seadistust, kuid näitab viit erinevat käskude mustrit. Proovi zero-shot käske otseste juhistena, few-shot skeeme näidete põhjal õppimiseks, chain-of-thought mustrit, mis paljastab mõttekäigu samme, ja rollipõhiseid käske, mis määravad konteksti. Näed, kuidas sama mudel annab väga erinevaid tulemusi, olenevalt sellest, kuidas päringu vormistad.
-
-Demo demonstreerib ka käskude malle (prompt templates), mis on võimas viis korduvkasutatavate käsu mallide loomiseks muutujatega.
-Alljärgnev näide kasutab LangChain4j `PromptTemplate`-d muutujate täitmiseks. AI vastab sihtkoha ja tegevuse põhjal.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 Proovi [GitHub Copilot](https://github.com/features/copilot) Chat abil:** Ava [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) ja küsi:
-> - "Mis vahe on zero-shot ja few-shot käsustamisel, millal kumbagi kasutada?"
-> - "Kuidas mõjutab mudeli vastuseid temperatuuriparameeter?"
-> - "Milliseid võtteid kasutada, et vältida käskude süstimist tootmises?"
-> - "Kuidas luua korduvkasutatavaid PromptTemplate objekte tavaliste mustrite jaoks?"
-
-**Tööriistade integratsioon** – [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-Siin muutub LangChain4j võimsaks. Kasutad `AiServices`-t AI assistendi loomiseks, mis kutsub sinu Java meetodeid. Märgista meetodid `@Tool("kirjeldus")` annotatsiooniga ja LangChain4j korraldab ülejäänu – AI otsustab automaatselt, millal ja millist tööriista kasutada vastavalt kasutaja päringule. See demonstreerib funktsioonikõnesid, mis on võtmetehnika AI jaoks, mis suudab tegutseda, mitte ainult vastata.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 Proovi [GitHub Copilot](https://github.com/features/copilot) Chat abil:** Ava [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) ja küsi:
-> - "Kuidas @Tool annotatsioon töötab ja mida LangChain4j sellega taga teeb?"
-> - "Kas AI saab mitut tööriista järjest kutsuda keerukate probleemide lahendamiseks?"
-> - "Mis juhtub, kui tööriist viskab vea – kuidas peaksin vead käsitlema?"
-> - "Kuidas integreerida päris API selle kalkulaatori näite asemel?"
-
-**Dokumentide küsimused ja vastused (Lihtne RAG)** – [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-Siin näed RAG-i (otsingupõhine generaator) kasutamist LangChain4j “Easy RAG” lähenemisega. Dokumendid laaditakse, automaatselt jagatakse ja sisestatakse mällu, seejärel päringut tegeva AI jaoks tarnitakse asjakohased tükid küsimuse ajal. AI vastab dokumentide põhjal, mitte oma üldise teadmiste põhjal.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 Proovi [GitHub Copilot](https://github.com/features/copilot) Chat abil:** Ava [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) ja küsi:
-> - "Kuidas RAG hoiab ära AI hallutsinatsioone võrreldes mudeli treeningandmete kasutamisega?"
-> - "Mis vahe on selle lihtsa lähenemise ja kohandatud RAG torustiku vahel?"
-> - "Kuidas skaleerida seda mitme dokumendi või suurema teadmistebaasi jaoks?"
-
-**Vastutustundlik tehisintellekt** – [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-Ehita AI turvalisus mitme kaitsetasemega. See demo näitab kahte kaitsest kihti, mis töötavad koos:
-
-**Osa 1: LangChain4j sisendi kontroll** – Blokeerib ohtlikud käsud enne LLM-ile jõudmist. Loo kohandatud reeglid, mis otsivad keelatud märksõnu või mustreid. Need töötavad koodis kiirelt ja tasuta.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**Osa 2: Teenusepakkuja turvafiltrid** – GitHub Models-il on sisseehitatud filtrid, mis püüavad kinni, mida su kontrollid võivad vahele jätta. Näed ranget blokeerimist (HTTP 400 vead) tõsiste rikkumiste korral ja pehmet keeldumist, kus AI viisakalt keelduv vastus annab.
-
-> **🤖 Proovi [GitHub Copilot](https://github.com/features/copilot) Chat abil:** Ava [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) ja küsi:
-> - "Mis on InputGuardrail ja kuidas luua oma?"
-> - "Mis vahe on rangel blokeerimisel ja pehmel keelamisel?"
-> - "Miks kasutada korraga nii reegleid kui teenusepakkuja filtreid?"
-
-## Järgmised sammud
-
-**Järgmine moodul:** [01-introduction - LangChain4j kasutuselevõtt](../01-introduction/README.md)
-
----
-
-**Navigeerimine:** [← Tagasi peamisele](../README.md) | [Järgmine: Moodul 01 - Sissejuhatus →](../01-introduction/README.md)
-
----
-
-## Probleemide lahendamine
-
-### Esimene Maven ehitus
-
-**Tõrge:** Esimene `mvn clean compile` või `mvn package` võtab kaua aega (10-15 minutit)
-
-**Põhjus:** Maven peab laadima alla kõik projekti sõltuvused (Spring Boot, LangChain4j teegid, Azure SDK-d jne) esimesel ehitusel.
-
-**Lahendus:** See on normaalne käitumine. Järgmised ehitused on palju kiirem, kuna sõltuvused on lokaalselt vahemällu salvestatud. Allalaadimise aeg sõltub teie võrgu kiirusest.
-
-### PowerShelli Maven käsu sünktaks
-
-**Tõrge:** Maven käsk ebaõnnestub veaga `Unknown lifecycle phase ".mainClass=..."`
-**Põhjus**: PowerShell tõlgendab `=` kui muutuja määramise operaatorit, mis rikub Maven omaduste süntaksit
-
-**Lahendus**: Kasuta peatamis-parsimise operaatorit `--%` enne Maven käsku:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-Operaator `--%` käsib PowerShellil edastada kõik järelejäänud argumendid Mavenile kirjapandult, tõlgendamata neid.
-
-### Windows PowerShell emojide kuvamine
-
-**Probleem**: AI vastused kuvavad PowerShellis emotikonide asemel segasemaid märke (nt `????` või `â??`)
-
-**Põhjus**: PowerShelli vaikimisi kodeering ei toeta UTF-8 emotikone
-
-**Lahendus**: Käivita see käsk enne Java rakenduste käivitamist:
-```cmd
-chcp 65001
-```
-
-See sunnib terminali kasutama UTF-8 kodeeringut. Alternatiivina kasuta Windows Terminali, mis toetab paremini Unicode'i.
-
-### API kutsete silumine
-
-**Probleem**: Autentimisvead, kiirusepiirangud või ootamatud vastused AI mudelilt
-
-**Lahendus**: Näidetes on `.logRequests(true)` ja `.logResponses(true)`, et kuvada API kutseid konsoolis. See aitab lahendada autentimisvigu, kiirusepiiranguid või ootamatuid vastuseid. Eemalda need lipud tootmiskeskkonnas, et vähendada logi müra.
-
----
-
-
-**Sissetõmbumine**:
-See dokument on tõlgitud kasutades tehisintellektil põhinevat tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi me püüame täpsust tagada, tuleb arvestada, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Tähtsa teabe korral soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tekkivate arusaamatuste või valemonumuste eest.
-
\ No newline at end of file
diff --git a/translations/et/01-introduction/README.md b/translations/et/01-introduction/README.md
index 49b505178..423880d4f 100644
--- a/translations/et/01-introduction/README.md
+++ b/translations/et/01-introduction/README.md
@@ -2,86 +2,86 @@
## Sisukord
-- [Video juhendamine](../../../01-introduction)
-- [Mida sa õpid](../../../01-introduction)
-- [Eeltingimused](../../../01-introduction)
-- [Põhiprobleemi mõistmine](../../../01-introduction)
-- [Tokonite mõistmine](../../../01-introduction)
-- [Kuidas mälu töötab](../../../01-introduction)
-- [Kuidas see kasutab LangChain4j](../../../01-introduction)
-- [Deploy Azure OpenAI infrastruktuur](../../../01-introduction)
-- [Rakenduse käivitamine lokaalselt](../../../01-introduction)
-- [Rakenduse kasutamine](../../../01-introduction)
- - [Seisunditu vestlus (vasak paneel)](../../../01-introduction)
- - [Seisundiga vestlus (parem paneel)](../../../01-introduction)
-- [Järgmised sammud](../../../01-introduction)
+- [Video juhendamine](#video-juhendamine)
+- [Mida sa õpid](#mida-sa-õpid)
+- [Eeltingimused](#eltingimused)
+- [Tuumaprobleemi mõistmine](#tuumaprobleemi-mõistmine)
+- [Tokenite mõistmine](#tokenite-mõistmine)
+- [Kuidas mälu töötab](#kuidas-mälu-tööt)
+- [Kuidas see kasutab LangChain4j](#kuidas-see-kasutab-langchain4j)
+- [Azure OpenAI infrastruktuuri juurutamine](#azure-openai-infrastruktuuri-juurutamine)
+- [Rakenduse lokaalne käitamine](#rakenduse-lokaalne-käitamine)
+- [Rakenduse kasutamine](#rakenduse-kasutamine)
+ - [Stateless vestlus (vasak paneel)](#stateless-vestlus-vasak-paneel)
+ - [Stateful vestlus (parem paneel)](#stateful-vestlus-parem-paneel)
+- [Järgmised sammud](#järgmised-sammud)
## Video juhendamine
-Vaata seda otseülekande salvestust, mis selgitab, kuidas selle mooduliga alustada:
+Vaata seda otseülekannet, mis selgitab, kuidas selle mooduliga alustada:
## Mida sa õpid
-Kiirlahenduses kasutasid GitHubi mudeleid, et saata päringuid, kutsuda tööriistu, ehitada RAG-torustikku ja testida turvameetmeid. Need demo'd näitasid, mis on võimalik — nüüd liigume üle Azure OpenAI ja GPT-5.2 peale ning hakkame ehitama tootmistasemel rakendusi. See moodul keskendub dialoogipõhisele tehisintellektile, mis mäletab konteksti ja hoiab seisundit — need on mõisted, mida kiirlahenduse demo'd taustal kasutasid, kuid ei selgitanud.
+See on sinu lähtepunkt LangChain4j ja Azure OpenAI kasutamiseks. Alustame põhialustest ja hakkame looma tootmistasemel rakendusi. See moodul keskendub vestluslikule tehisintellektile, mis mäletab konteksti ja hoiab olekut — need on põhikontseptsioonid, millele kõik hilisemad moodulid tuginevad.
-Kogu juhendis kasutame Azure OpenAI GPT-5.2 mudelit, kuna selle täiustatud mõtlemisvõime teeb erinevate mustrite käitumise paremini nähtavaks. Mälu lisamisel näed selgelt erinevust. See muudab lihtsamaks mõista, mida iga komponent sinu rakendusele lisab.
+Selles juhendis kasutame kogu aeg Azure OpenAI GPT-5.2, sest selle arenenud mõtlemisvõimed muudavad erinevate mustrite käitumise selgemaks. Kui lisad mälu, näed vahet selgelt. See lihtsustab mõistmist, mida iga komponent sinu rakendusele annab.
Sa ehitad ühe rakenduse, mis demonstreerib mõlemat mustrit:
-**Seisunditu vestlus** - Iga päring on iseseisev. Mudelil puudub mälu eelnevate sõnumite kohta. See on see mustrilahendus, mida kasutasid kiirlahenduses.
+**Stateless vestlus** – iga päring on iseseisev. Mudelil puudub mälu varasemate sõnumite kohta. See on kõige lihtsam lähtepunkt.
-**Seisundiga vestlus** - Iga päring sisaldab vestluse ajalugu. Mudel hoiab konteksti mitme vahetuse ulatuses. Selle nõuavad tootmisrakendused.
+**Stateful vestlus** – iga päring sisaldab vestluse ajalugu. Mudel hoiab konteksti mitme vahetuse vältel. Seda nõuavad tootmisrakendused.
## Eeltingimused
- Azure tellimus koos Azure OpenAI ligipääsuga
-- Java 21, Maven 3.9+
+- Java 21, Maven 3.9+
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
-> **Märkus:** Java, Maven, Azure CLI ja Azure Developer CLI (azd) on eelinstalleeritud pakutud devcontaineris.
+> **Märkus:** Java, Maven, Azure CLI ja Azure Developer CLI (azd) on kaasas eeltöödeldud arendus konteineris.
-> **Märkus:** See moodul kasutab GPT-5.2 Azure OpenAI-st. Deploy konfiguratsioon toimub automaatselt `azd up` kaudu — ära muuda mudeli nime koodis.
+> **Märkus:** See moodul kasutab GPT-5.2 Azure OpenAI platvormil. Juurutamine on automaatselt konfigureeritud `azd up` käsuga — ärge muutke mudeli nime koodis.
-## Põhiprobleemi mõistmine
+## Tuumaprobleemi mõistmine
-Keelemudelid on seisunditud. Iga API kõne on iseseisev. Kui sa saadad "Minu nimi on John" ja siis küsid "Mis on minu nimi?", mudelil pole aimugi, et sa just end tutvustasid. Ta käsitleb iga päringut nagu esimese vestlusena, mis sul kunagi olnud on.
+Keelemudelid on olekuta. Iga API-päring on iseseisev. Kui sa saadad "Minu nimi on John" ja seejärel küsid "Mis mu nimi on?", siis mudel ei tea, et sa just ennast tutvustasid. Ta käsitleb iga päringut, nagu see oleks sinu esimene vestlus üldse.
-See sobib lihtsatele küsimustele ja vastustele, kuid on päris rakendustes kasutuskõlbmatu. Klienditeenindusbotid peavad mäletama, mida neile öeldi. Isiklikud assistendid vajavad konteksti. Igas mitme vahetusega vestluses on mälu vajalik.
+See sobib lihtsate küsimuste-vastuste jaoks, aga pole kasulik pärisrakendusteks. Klienditeeninduse botid peavad meeles pidama, mida sa neile rääkisid. Isiklikud assistendid vajavad konteksti. Iga mitmevahetuseline vestlus nõuab mälu.
-Järgnev diagramm võrdleb kahte lähenemist — vasakul seisunditu kõne, kes unustab su nime; paremal seisundiga kõne, mida toetab ChatMemory ja mis mäletab seda.
+Järgmine diagramm näitab kahte lähenemist – vasakul olekuta kõne, mis unustab su nime; paremal olekuga kõne ChatMemory taustal, mis su nime mäletab.
-*Vahe seisunditu (iseseisvad kõned) ja seisundiga (kontekstiteadlikud) vestluste vahel*
+*Vahe olekuteta (iseseisvad kõned) ja olekuga (konteksti tundvad) vestluste vahel*
-## Tokonite mõistmine
+## Tokenite mõistmine
-Enne vestlustesse süvenemist on oluline mõista tokeneid – põhilisi tekstiplokke, mida keelemudelid töötlevad:
+Enne vestlustesse sukeldumist on oluline mõista tokeneid – põhielemendid tekstist, mida keelemudelid töötlevad:
-*Näide, kuidas tekst lagundatakse tokeniteks – "I love AI!" jaguneb neljaks eraldi töötlemise ühikuks*
+*Näide, kuidas tekst jaotatakse tokeniteks – "I love AI!" muutub neljaks eraldi töötlemisühikuks*
-Tokendid on see, kuidas tehisintellekt mudelid mõõdavad ja töötlevad teksti. Sõnad, kirjavahemärgid ja isegi tühikud võivad olla token'iteks. Sinu mudelil on piir, kui palju tokeneid ta korraga suudab töödelda (GPT-5.2 puhul 400 000, seesama jaotatuna kuni 272 000 sisendtokeniks ja 128 000 väljundtokeniks). Tokonite mõistmine aitab sul hallata vestluse pikkust ja kulusid.
+Tokenid on see, kuidas tehisintellekt mudelid mõõdavad ja töötlevad teksti. Sõnad, kirjavahemärgid ja isegi tühikud võivad olla tokenid. Sinu mudelil on piirates, mitu tokenit ta korraga suudab töödelda (400 000 GPT-5.2 puhul, kuni 272 000 sisendtokenit ja 128 000 väljundtokenit). Tokenite mõistmine aitab vestluse pikkust ja kulusid paremini hallata.
## Kuidas mälu töötab
-Vestluse mälu lahendab seisunditu probleemi, säilitades vestluse ajaloo. Enne, kui päring mudelile saadetakse, lisab raamistik ette asjakohased varasemad sõnumid. Kui sa küsid "Mis on mu nimi?", saadab süsteem tegelikult kogu vestluse ajaloo, mis võimaldab mudelil näha, et sa eespool ütlesid "Minu nimi on John".
+Vestluse mälu lahendab olekuta probleemi, hoides vestluse ajaloo meeles. Enne kui saadad mudelile päringu, lisab raamistik vastavad varasemad sõnumid ette. Kui sa küsid "Mis mu nimi on?", saadab süsteem kogu vestluse ajaloo, mis võimaldab mudelil näha, et sa ütlesid "Minu nimi on John".
-LangChain4j pakub mälu teostusi, mis teevad seda automaatselt. Sa valid, kui palju sõnumeid säilitada, ja raamistik haldab konteksti akent. Allolev diagramm näitab, kuidas MessageWindowChatMemory haldab liugakent viimaste sõnumite jaoks.
+LangChain4j pakub mälulahendusi, mis teevad seda automaatselt. Sa valid, mitu sõnumit hoida ja raamistik haldab konteksti akent. Allolev diagramm näitab, kuidas MessageWindowChatMemory hoiab libisevat akent viimaste sõnumite jaoks.
-*MessageWindowChatMemory hoiab liugakent viimaste sõnumite jaoks, automaatselt vanu välja visates*
+*MessageWindowChatMemory hoiab libisevat akent viimaste sõnumite jaoks ja viskab automaatselt välja vanad*
## Kuidas see kasutab LangChain4j
-See moodul laiendab kiirlahendust, integreerides Spring Boot'i ja lisades vestluse mälu. Siin on kuidas komponendid kokku sobivad:
+See moodul integreerib Spring Booti ja lisab vestlusmälusüsteemi. Nii sobituvad komponendid kokku:
-**Sõltuvused** - Lisa kaks LangChain4j teeki:
+**Sõltuvused** – lisa kaks LangChain4j teeki:
```xml
@@ -94,7 +94,7 @@ See moodul laiendab kiirlahendust, integreerides Spring Boot'i ja lisades vestlu
```
-**Vestlusmudel** - Konfigureeri Azure OpenAI Spring bean'ina ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+**Vestlusmudel** – konfigureeri Azure OpenAI Spring bean-ina ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -109,9 +109,9 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-Builder loeb tõestust andmed keskkonnamuutujatest, mida seab `azd up`. `baseUrl` seadmine sinu Azure lõpp-punktile muudab OpenAI kliendi töövõimeliseks Azure OpenAI-ga.
+Builder loeb mandaadid keskkonnamuutujatest, mis on seadistatud `azd up` poolt. `baseUrl` seadmine oma Azure lõpp-punkti suunab OpenAI kliendi Azure OpenAI teenusele.
-**Vestluse mälu** - Jälgi vestluse ajalugu MessageWindowChatMemory abil ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
+**Vestluse mälu** – hoia vestluse ajalugu MessageWindowChatMemory abil ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -124,16 +124,16 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-Loo mälu `withMaxMessages(10)` abil, et hoida viimased 10 sõnumit. Lisa kasutaja ja AI sõnumid tüübitud mähistega: `UserMessage.from(text)` ja `AiMessage.from(text)`. Ajalugu taasta `memory.messages()` abil ja saada mudelile. Teenus salvestab eraldi mälu eksemplarid iga vestluse ID jaoks, võimaldades mitmel kasutajal korraga vestelda.
+Loo mälu `withMaxMessages(10)`-ga, et hoida viimast 10 sõnumit. Lisa kasutaja ja AI sõnumid tüübitud wrapperitega: `UserMessage.from(text)` ja `AiMessage.from(text)`. Tõmba ajalugu `memory.messages()` abil ja saada see mudelile. Teenus salvestab iga vestluse ID kohta eraldi mälukopsu, võimaldades mitmel kasutajal vestelda samaaegselt.
-> **🤖 Proovi [GitHub Copilot](https://github.com/features/copilot) Chat'iga:** Ava [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) ja küsi:
-> - "Kuidas MessageWindowChatMemory otsustab, millised sõnumid akna täitumisel välja visata?"
-> - "Kas ma saan rakendada kohandatud mälu salvestamist, kasutades andmebaasi mälus hoidmise asemel?"
-> - "Kuidas ma lisaksin vanade vestluste ajaloo kokkuvõtmise?"
+> **🤖 Proovi koos [GitHub Copilot](https://github.com/features/copilot) vestlusega:** Ava [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) ja küsi:
+> - "Kuidas otsustab MessageWindowChatMemory, milliseid sõnumeid eemaldada, kui aken on täis?"
+> - "Kas ma saan implementerida kohandatud mälusalvestust andmebaasi abil, mitte ainult mälus?"
+> - "Kuidas lisada kokkuvõtete tegemist vana vestluse ajaloo tihendamiseks?"
-Seisunditu vestluse lõpp-punkt jätab mälu täielikult vahele — lihtne `chatModel.chat(prompt)` nagu kiirlahenduses. Seisundiga lõpp-punkt lisab sõnumid mällu, taasesitab ajaloo ja kaasab selle konteksti iga päringuga. Sama mudeli seadistus, erinevad mustrid.
+Stateless vestluse lõpp-punkt jätab mälusüsteemi vahele — lihtsalt `chatModel.chat(prompt)` nagu kiire algus. Stateful lõpp-punkt lisab sõnumid mällu, tõmbab ajaloo ja lisab selle konteksti iga päringu juurde. Sama mudeli konfiguratsioon, erinevad mustrid.
-## Deploy Azure OpenAI infrastruktuur
+## Azure OpenAI infrastruktuuri juurutamine
**Bash:**
```bash
@@ -147,28 +147,28 @@ cd 01-introduction
azd up # Valige tellimus ja asukoht (soovitatav on eastus2)
```
-> **Märkus:** Kui kohtad ajapiirangu tõrget (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), käivita lihtsalt uuesti `azd up`. Azure ressursid võivad taustal hetkel seadistamisel olla ja korduskatse võimaldab deploy lõpule viia, kui ressursid jõuavad lõplikku olekusse.
+> **Märkus:** Kui saad veateate aja ületamise kohta (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), lihtsalt käivita uuesti `azd up`. Azure ressursid võivad veel taustal juurutamisel olla ja taaskäivitamine lubab juurutusel lõpule jõuda, kui ressursid jõuavad lõppseisundisse.
-See sooritab:
-1. Deploy Azure OpenAI ressurss GPT-5.2 ja text-embedding-3-small mudelitega
-2. Automaatse `.env` faili genereerimise projekti juurkausta koos tõestust andmetega
-3. Kõik vajalike keskkonnamuutujate seadistamise
+See teeb järgmist:
+1. Juurutab Azure OpenAI ressursi koos GPT-5.2 ja text-embedding-3-small mudelitega
+2. Genereerib automaatselt projekti juurkausta `.env` faili mandaadiga
+3. Seadistab kõik vajalikud keskkonnamuutujad
-**Kui esineb deploy probleeme?** Vaata [Infrastructure README](infra/README.md), kus on põhjalik tõrkeotsing, sealhulgas alamdomeeni nime konfliktid, käsitsi Azure Portali deploy sammud ja mudeli seadistamise juhised.
+**Kas on probleeme juurutamisega?** Loe [Infrastruktuuri README-st](infra/README.md), kus on detailne tõrkeotsing, sealhulgas alamdomeeni nime konfliktid, käsitsi Azure Portaali juurutamise juhised ja mudeli konfigureerimine.
-**Veendu, et deploy õnnestus:**
+**Kontrolli, kas juurutamine õnnestus:**
**Bash:**
```bash
-cat ../.env # Peaks näitama AZURE_OPENAI_ENDPOINT, API_KEY jms.
+cat ../.env # Peaks kuvama AZURE_OPENAI_ENDPOINT, API_KEY jms.
```
**PowerShell:**
```powershell
-Get-Content ..\.env # Peaks näitama AZURE_OPENAI_ENDPOINT, API_KEY jms.
+Get-Content ..\.env # Peaks näitama AZURE_OPENAI_ENDPOINT, API_KEY jt.
```
-> **Märkus:** `azd up` käsu käivitamine genereerib automaatselt `.env` faili. Kui vajad hiljem uuendamist, võid kas käsitsi `.env` faili muuta või uuesti genereerida, käivitades:
+> **Märkus:** `azd up` käsk genereerib `.env` faili automaatselt. Kui vajad hiljem selle uuendamist, võid kas muuta `.env` faili käsitsi või genereerida selle uuesti käivitades:
>
> **Bash:**
> ```bash
@@ -182,15 +182,15 @@ Get-Content ..\.env # Peaks näitama AZURE_OPENAI_ENDPOINT, API_KEY jms.
> .\.azd-env.ps1
> ```
-## Rakenduse lokaal käivitamine
+## Rakenduse lokaalne käitamine
-**Veendu deploy õnnestumises:**
+**Kontrolli juurutamist:**
-Veendu, et `.env` fail asub juurkaustas koos Azure tõestust andmetega. Käivita see mooduli kaustast (`01-introduction/`):
+Veendu, et `.env` fail on olemas juurkataloogis koos Azure mandaadiga. Käivita see mooduli kataloogist (`01-introduction/`):
**Bash:**
```bash
-cat ../.env # Tuleks näidata AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+cat ../.env # Peaks näitama AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**PowerShell:**
@@ -198,37 +198,37 @@ cat ../.env # Tuleks näidata AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
Get-Content ..\.env # Peaks näitama AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**Alusta rakendusi:**
+**Käivita rakendused:**
-**Variant 1: Kasutades Spring Boot Dashboardi (Soovitatav VS Code kasutajatele)**
+**Variant 1: Spring Boot Dashboardi kasutamine (soovitatav VS Code kasutajatele)**
-Dev container sisaldab Spring Boot Dashboard laiendust, mis pakub visuaalset liidest, et hallata kõiki Spring Boot rakendusi. Leiad selle VS Code vasakpoolsest Activity Bar-ist (otsi Spring Boot ikooni).
+Arenduskonteiner sisaldab Spring Boot Dashboard laiendust, mis pakub visuaalset liidest kõigi Spring Boot rakenduste haldamiseks. Selle leiad vasaku külje tegevusribalt VS Code's (otsi Spring Boot ikooni).
-Spring Boot Dashboardilt saad:
-- Näha kõiki saadaval olevaid Spring Boot rakendusi töökohas
-- Alustada/peatada rakendusi ühe klikiga
+Spring Boot Dashboardist saad:
+- Näha kõiki tööalal olevaid Spring Boot rakendusi
+- Käivitada/peatada rakendusi ühe klikiga
- Vaadata rakenduse logisid reaalajas
- Jälgida rakenduse olekut
-Lihtsalt kliki "introduction" kõrval mängimise nupule, et käivitada see moodul või käivita kõik korraga.
+Lihtsalt vajuta mängunuppu "introduction" kõrval, et see moodul käivitada, või alusta korraga kõiki mooduleid.
-*Spring Boot Dashboard VS Code's — käivita, peata ja jälgi kõiki mooduleid ühest kohast*
+*Spring Boot Dashboard VS Code's — alusta, peata ja jälgi kõiki mooduleid ühest kohast*
-**Variant 2: Kasutades shell skripte**
+**Variant 2: Käsurea skriptide kasutamine**
Käivita kõik veebirakendused (moodulid 01-04):
**Bash:**
```bash
-cd .. # Juurest kataloogist
+cd .. # Juurekataloogist
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # Juura kataloogist
+cd .. # Juure kataloogist
.\start-all.ps1
```
@@ -246,9 +246,9 @@ cd 01-introduction
.\start.ps1
```
-Mõlemad skriptid laadivad automaatselt keskkonnamuutujad juurkaustas `.env` failist ja ehitavad JAR failid, kui neid veel pole.
+Mõlemad skriptid laadivad automaatselt keskkonnamuutujad juurest `.env` failist ja ehitavad JAR-failid, kui need puuduvad.
-> **Märkus:** Kui tahad ehitada kõik moodulid käsitsi enne käivitamist:
+> **Märkus:** Kui soovid kõik moodulid käsitsi enne käivitamist ehitada:
>
> **Bash:**
> ```bash
@@ -262,7 +262,7 @@ Mõlemad skriptid laadivad automaatselt keskkonnamuutujad juurkaustas `.env` fai
> mvn clean package -DskipTests
> ```
-Ava oma brauseris http://localhost:8080.
+Ava oma brauseris http://localhost:8080
**Peatamiseks:**
@@ -282,41 +282,41 @@ cd ..; .\stop-all.ps1 # Kõik moodulid
## Rakenduse kasutamine
-Rakendus pakub veebipõhist liidest kahe vestluslahendusega kõrvuti.
+Rakendus pakub veebiliidest kahe kõnelogi rakendusega kõrvuti.
-*Armatuurlaud, mis kuvab nii lihtsa vestluse (seisunditu) kui ka dialoogipõhise vestluse (seisundiga) valikud*
+*Armatuurlaud, mis näitab nii lihtsat vestlust (stateless) kui ka vestlussessiooni (stateful) valikud*
-### Seisunditu vestlus (vasak paneel)
+### Stateless vestlus (vasak paneel)
-Proovi esmalt seda. Küsi "Minu nimi on John" ja siis kohe "Mis on mu nimi?" Mudel ei mäleta, sest iga sõnum on iseseisev. See demonstreerib põhiprobleemi keelemudelite tavaintegratsioonis – puudub vestluse kontekst.
+Proovi esmalt. Küsi "Minu nimi on John" ja seejärel kohe "Mis mu nimi on?". Mudel ei mäleta, sest iga sõnum on iseseisev. See demonstreerib baaskeelemudeli integratsiooni tuumaprobleemi - puudub vestluse kontekst.
-*Tehisintellekt ei mäleta su nime eelmisest sõnumist*
+*Tehisintellekt ei mäleta eelmistest sõnumitest sinu nime*
-### Seisundiga vestlus (parem paneel)
+### Stateful vestlus (parem paneel)
-Nüüd proovi sama jada siin. Küsi "Minu nimi on John" ja seejärel "Mis on mu nimi?" Seekord mäletab. Erinevus on MessageWindowChatMemory - see hoiab vestluse ajaloo ja lisab selle iga päringuga kaasa. Nii töötab tootmisvestluse tehisintellekt.
+Proovi nüüd sama järjestust siin. Küsi "Minu nimi on John" ja siis "Mis mu nimi on?" Sel korral mäletab. Erinevus on MessageWindowChatMemory - see hoiab vestluse ajaloo ja lisab selle iga päringu juurde. Nii toimib tootmise vestluslik tehisintellekt.
-*Tehisintellekt mäletab su nime varasemast vestlusest*
+*Tehisintellekt mäletab varasemat vestlust ja sinu nime*
-Mõlemad paneelid kasutavad sama GPT-5.2 mudelit. Erinevus on ainult mälus. See teeb selgeks, mida mälu rakendusele annab ja miks see on tegelikes kasutusjuhtudes oluline.
+Mõlemad paneelid kasutavad sama GPT-5.2 mudelit. Ainuke erinevus on mälu olemasolu. See teeb selgeks, mida mälu sinu rakendusele lisab ja miks see on tõeliste kasutusjuhtude puhul oluline.
## Järgmised sammud
-**Järgmine moodul:** [02-prompt-engineering - Prompt Engineering GPT-5.2-ga](../02-prompt-engineering/README.md)
+**Järgmine moodul:** [02-prompt-engineering - Päringu inseneriteadus GPT-5.2-ga](../02-prompt-engineering/README.md)
---
-**Navigatsioon:** [← Eelmine: Moodul 00 – Kiirlahendus](../00-quick-start/README.md) | [Tagasi avalehele](../README.md) | [Järgmine: Moodul 02 – Prompt Engineering →](../02-prompt-engineering/README.md)
+**Navigeerimine:** [← Tagasi põhiosasse](../README.md) | [Järgmine: Moodul 02 - Päringu inseneriteadus →](../02-prompt-engineering/README.md)
---
-**Vastutusest loobumine**:
-See dokument on tõlgitud tehisintellekti tõlketeenuse [Co-op Translator](https://github.com/Azure/co-op-translator) abil. Kuigi püüame tagada täpsust, tuleks arvestada, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Originaaldokument selle algkeeles tuleks pidada autoriteetseks allikaks. Tähtsa teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei võta vastutust mis tahes arusaamatuste või vale tõlgenduste eest, mis tulenevad selle tõlke kasutamisest.
+**Lahtiütlus**:
+See dokument on tõlgitud kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi me püüdleme täpsuse poole, palun pange tähele, et automatiseeritud tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud eksimustest või valesti mõistmistest.
\ No newline at end of file
diff --git a/translations/et/02-prompt-engineering/README.md b/translations/et/02-prompt-engineering/README.md
index f10200e05..7afb847c4 100644
--- a/translations/et/02-prompt-engineering/README.md
+++ b/translations/et/02-prompt-engineering/README.md
@@ -1,85 +1,85 @@
-# Moodul 02: Päringu inseneriteadus GPT-5.2-ga
+# Moodul 02: Promptide inseneriteadus GPT-5.2-ga
## Sisukord
-- [Video juhend](../../../02-prompt-engineering)
-- [Mida sa õpid](../../../02-prompt-engineering)
-- [Eeltingimused](../../../02-prompt-engineering)
-- [Mõistmine, mis on päringu inseneriteadus](../../../02-prompt-engineering)
-- [Päringu inseneriteaduse alused](../../../02-prompt-engineering)
- - [Nullnäitega päring](../../../02-prompt-engineering)
- - [Mõne näitega päring](../../../02-prompt-engineering)
- - [Mõttekäigu ahel](../../../02-prompt-engineering)
- - [Rollipõhine päring](../../../02-prompt-engineering)
- - [Päringumallid](../../../02-prompt-engineering)
-- [Täiustatud mustrid](../../../02-prompt-engineering)
-- [Rakenduse käivitamine](../../../02-prompt-engineering)
-- [Rakenduse ekraanipildid](../../../02-prompt-engineering)
-- [Mustrid lahti seletatuna](../../../02-prompt-engineering)
- - [Madal vs kõrge innukus](../../../02-prompt-engineering)
- - [Ülesande täitmine (tööriista sissejuhatused)](../../../02-prompt-engineering)
- - [Enda peegeldav kood](../../../02-prompt-engineering)
- - [Struktureeritud analüüs](../../../02-prompt-engineering)
- - [Mitme vooru vestlus](../../../02-prompt-engineering)
- - [Samm-sammult mõtlemine](../../../02-prompt-engineering)
- - [Piiratud väljund](../../../02-prompt-engineering)
-- [Mida sa tegelikult õpid](../../../02-prompt-engineering)
-- [Järgmised sammud](../../../02-prompt-engineering)
+- [Videojuhend](#videojuhend)
+- [Mida Sa Õpid](#mida-sa-õpid)
+- [Eeldused](#eeldused)
+- [Promptide inseneriteaduse mõistmine](#promptide-inseneriteaduse-mõistmine)
+- [Promptide inseneriteaduse alused](#promptide-inseneriteaduse-alused)
+ - [Null-kohaline promptimine](#null-kohaline-promptimine)
+ - [Mõned näited promptimine](#mõned-näited-promptimine)
+ - [Mõtte ahel](#mõtte-ahel)
+ - [Rollipõhine promptimine](#rollipõhine-promptimine)
+ - [Promptide mallid](#promptide-mallid)
+- [Täiustatud mustrid](#täiustatud-mustrid)
+- [Rakenduse käivitamine](#rakenduse-käivitamine)
+- [Rakenduse ekraanipildid](#rakenduse-ekraanipildid)
+- [Mustrid lähemalt](#musterite-uurimine)
+ - [Madal vs Kõrge innukus](#madal-vs-kõrge-innukus)
+ - [Tööülesannete täitmine (tööriistade eeltekstid)](#ülesande-täitmine-tööriistapromptid)
+ - [Isekriitiline kood](#enesepeegeldav-kood)
+ - [Struktureeritud analüüs](#struktureeritud-analüüs)
+ - [Mitme vooruga vestlus](#mitme-käiguline-vestlus)
+ - [Samm-sammuline põhjendus](#samm-sammuline-põhjendus)
+ - [Piiratud väljund](#piiratud-väljund)
+- [Mida Sa Tõeliselt Õpid](#mida-te-tegelikult-õpite)
+- [Järgmised sammud](#järgmised-sammud)
-## Video juhend
+## Videojuhend
-Vaata seda otseülekannet, mis selgitab, kuidas selle mooduliga alustada:
+Vaata seda otseülekannet, mis selgitab, kuidas käivitada see moodul:
-
+
-## Mida sa õpid
+## Mida Sa Õpid
-Järgnev diagramm annab ülevaate peamistest teemadest ja oskustest, mida selles moodulis arendad — alates päringu täpsustamise tehnikatest kuni samm-sammulise töövooni, mida järgid.
+Järgnev diagramm annab ülevaate olulisematest teemadest ja oskustest, mida selles moodulis arendad — alates promptide lihvimise tehnikatest kuni samm-sammulise töövoo järgimiseni.
-
+
-Eelmistes moodulites uurisid LangChain4j põhilisi käitumisi GitHubi mudelitega ja nägid, kuidas mälu võimaldab vestluslikku tehisintellekti Azure OpenAI abil. Nüüd keskendume sellele, kuidas sa küsimusi esitad — päringutele endile — kasutades Azure OpenAI GPT-5.2. Viis, kuidas sa oma päringud struktureerid, mõjutab oluliselt vastuste kvaliteeti. Alustame põhitehnikate ülevaatega ja liigume edasi kaheksasse täiustatud mustrisse, mis kasutavad täielikult GPT-5.2 võimeid.
+Eelnevas moodulis nägid, kuidas mälu võimaldab vestlus-AI-d Azure OpenAI abil. Nüüd keskendume sellele, kuidas sa esitad küsimusi — promptidele endile — kasutades Azure OpenAI GPT-5.2. Sinu promptide ülesehitus mõjutab oluliselt saadud vastuste kvaliteeti. Alustame põhitehnikate ülevaatega ja liigume edasi kaheksa täiustatud mustrini, mis võtavad GPT-5.2 võimekuse täielikult kasutusele.
-Kasutame GPT-5.2, sest see lisab mõtlemise juhtimise - saad mudelile öelda, kui palju ta peaks enne vastamist mõtlema. See muudab erinevad päringustrateegiad selgemaks ja aitab mõista, millal iga lähenemist kasutada. Samuti on GPT-5.2-l Azure keskkonnas vähem kiiruspiiranguid võrreldes GitHubi mudelitega.
+Kasutame GPT-5.2, sest see tutvustab põhjendusjuhtimist – sa saad mudelile öelda, kui palju mõtlemist enne vastamist teha tuleb. See muudab erinevad promptimise strateegiad selgemaks ja aitab mõista, millal iga lähenemist kasutada.
-## Eeltingimused
+## Eeldused
-- Lõpetatud Moodul 01 (Azure OpenAI ressursid juurutatud)
-- Juurekataloogis `.env` fail koos Azure mandaatidega (tehtud `azd up` käsklusega Moodul 01-s)
+- Läbitud Moodul 01 (Azure OpenAI ressursid paigaldatud)
+- Juurekataloogis `.env` fail Azure volitustega (loodud käsuga `azd up` Moodulis 01)
-> **Märkus:** Kui sa pole Moodulit 01 lõpetanud, järgi sealset juurutusjuhendit esmalt.
+> **Märkus:** Kui pole lõpetanud Moodulit 01, järgi esmalt sealset paigaldamisjuhendit.
-## Mõistmine, mis on päringu inseneriteadus
+## Promptide inseneriteaduse mõistmine
-Päringu inseneriteadus seisneb olemuselt erinevuses ebaselgete ja täpsete juhiste vahel, nagu allolev võrdlus näitab.
+Promptide inseneriteadus seisneb peamiselt selles, et juhised on kas ebamäärased või täpsed – järgnev võrdlus seda illustreerib.
-
+
-Päringu inseneriteadus tähendab sisendi teksti disainimist nii, et see annab järjepidevalt soovitud tulemuse. See ei seisne ainult küsimuste esitamises — vaid päringute struktuuris, nii et mudel mõistab täpselt, mida sa soovid ja kuidas seda toimetada.
+Promptide inseneriteadus tähendab sisendi kavandamist nii, et see tagab sulle alati soovitud tulemused. See ei seisne ainult küsimuste esitamisel, vaid selleks, et päringud oleksid selliselt üles ehitatud, et mudel mõistaks täpselt, mida sa tahad ja kuidas seda esitada.
-Mõtle sellele kui kolleegile juhiste andmisele. „Paranda viga“ on ebamäärane. „Paranda nullviite erind UserService.java faili 45. real, lisades nullkontrolli“ on konkreetne. Keelemudelid töötavad samal viisil — täpsus ja struktuur on olulised.
+Mõtle sellele nagu juhiste andmine kolleegile. "Paranda viga" on ebamäärane. "Paranda UserService.java faili rea 45 tühiväärtusepaanika, lisades nulli kontrolli" on konkreetne. Keelemudelid töötavad samamoodi – tähtis on täpsus ja ülesehitus.
-Järgnev diagramm näitab, kuidas LangChain4j seda pilti täiendab — ühendades su päringumustrid mudeliga läbi SystemMessage ja UserMessage ehituskivide.
+Järgnev diagramm näitab, kuidas LangChain4j sinna sobitub — ühendades su promptimustrid mudeliga läbi SystemMessage ja UserMessage ehitusplokkide.
-LangChain4j pakub infrastruktuuri — mudeliühendused, mälu ja sõnumite tüübid — samas kui päringumustrid on lihtsalt hoolikalt struktureeritud tekst, mida sa selle infrastruktuuri kaudu saadad. Peamised ehituskivid on `SystemMessage` (mis määrab tehisintellekti käitumise ja rolli) ning `UserMessage` (mis kannab sinu tegelikku päringut).
+LangChain4j tagab infrastruktuuri — mudeliga ühendused, mälu ja sõnumsiseste tüübid — samal ajal kui promptimustrid on lihtsalt hoolikalt üles ehitatud tekst, mida selle infrastruktuuri kaudu saadad. Peamised ehitusplokid on `SystemMessage` (mis määrab AI käitumise ja rolli) ja `UserMessage` (mis kannab su tegeliku päringu).
-## Päringu inseneriteaduse alused
+## Promptide inseneriteaduse alused
-Viis põhilist tehnikat, mis allpool näidatud, moodustavad tõhusa päringu inseneriteaduse vundamendi. Igaüks neist käsitleb erinevat aspekti, kuidas keelega mudelitega suhelda.
+Viis põhitehnikat, mis on allpool näidatud, moodustavad tõhusa promptimise aluse. Igaüks neist käsitleb erinevat aspekti keeletega suhtlemisest.
-
+
-Enne kui sukelduda selle mooduli täiustatud mustritesse, vaatleme üle viis alustehnikat. Need on ehituskivid, mida iga päringu insener peaks teadma. Kui oled juba läbinud [Kiirstardi mooduli](../00-quick-start/README.md#2-prompt-patterns), oled neid juba näinud — siin on nende kontseptuaalne raamistik.
+Enne selle mooduli täiustatud mustrite juurde asumist vaatame üle viis fundamentaalset promptimise tehnikat. Need on ehitusplokid, mida iga promptide insener peaks teadma.
-### Nullnäitega päring
+### Null-kohaline promptimine
-Lihtsaim lähenemine: anna mudelile otsene juhis ilma näideteta. Mudel tugineb üksnes oma treeningandmetele, et mõista ja täita ülesanne. See toimib hästi lihtsate päringute puhul, kus oodatav käitumine on ilmne.
+Kõige lihtsam lähenemine: anna mudelile otsene juhis ilma näideteta. Mudel tugineb täielikult oma treeningule, et mõista ja täita ülesannet. See töötab hästi lihtsate päringute puhul, kus ootuspärane käitumine on ilmne.
-
+
-*Otsene juhis ilma näideteta — mudel tuletab ülesande ainult juhisest*
+*Otsene juhis ilma näideteta — mudel järeldab ülesande ainult juhise põhjal*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
@@ -87,15 +87,15 @@ String response = model.chat(prompt);
// Vastus: "Positiivne"
```
-**Millal kasutada:** Lihtsad klassifikatsioonid, otsesed küsimused, tõlked või igasugune ülesanne, mida mudel suudab täita ilma täiendava juhiseta.
+**Millal kasutada:** Lihtsad klassifikatsioonid, otsesed küsimused, tõlkimised või mis tahes ülesanne, mida mudel suudab täita ilma täiendava juhendamiseta.
-### Mõne näitega päring
+### Mõned näited promptimine
-Anna näited, mis demonstreerivad mustrit, mida mudel peaks järgima. Mudel õpib näidetest sisendi-väljundi formaadi ja rakendab seda uutele sisenditele. See parandab järjepidevust ülesannetes, kus soovitud formaat või käitumine pole ilmselge.
+Too näited, mis näitavad mustrit, mida mudel peaks järgima. Mudel õpib sinu näidetest oodatud sisendi-väljundi formaadi ja rakendab seda uutele sisenditele. See parandab oluliselt järjepidevust ülesannetes, kus soovitud formaat või käitumine ei ole ilmne.
-
+
-*Näidetest õppimine — mudel tuvastab mustri ja rakendab seda uutele sisenditele*
+*Õppimine näidete kaudu — mudel tuvastab mustri ja rakendab seda uutele sisenditele*
```java
String prompt = """
@@ -112,15 +112,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Millal kasutada:** Kohandatud klassifikatsioonid, järjepidev vormindus, domeenispetsiifilised ülesanded või olukorrad, kus nullnäitega tulemused on ebajärjekindlad.
+**Millal kasutada:** Kohandatud klassifikatsioonid, järjepidev vormistus, domeenispetsiifilised ülesanded või kui null-kohaliste tulemused on ebajärjekindlad.
-### Mõttekäigu ahel
+### Mõtte ahel
-Paluge mudelil näidata oma mõtlemist samm-sammult. Selle asemel, et kohe vastusele jõuda, lahendab mudel probleemi ja töötab läbi iga osa selgelt. See parandab täpsust matemaatika, loogika ja mitmeastmeliste ülesannete puhul.
+Paluge mudelil näidata oma põhjendust samm-sammult. Selle asemel, et kohe vastust anda, jagab mudel probleemi osadeks ja lahendab need ükshaaval selgelt välja tuues. See parandab täpsust matemaatikas, loogikas ja mitmesammulistes põhjendusülesannetes.
-
+
-*Samm-sammuline mõtlemine — keeruliste probleemide jagamine loogilisteks sammudeks*
+*Samm-sammuline põhjendus — keerukate probleemide lagundamine loogilisteks sammudeks*
```java
String prompt = """
@@ -133,15 +133,15 @@ String response = model.chat(prompt);
// Mudel näitab: 15 - 8 = 7, siis 7 + 12 = 19 õuna
```
-**Millal kasutada:** Matemaatikaprobleemid, loogikapusled, silumine või igasugune ülesanne, kus mõtlemisprotsessi näitamine parandab täpsust ja usaldusväärsust.
+**Millal kasutada:** Matemaatikaülesanded, loogikamõistatused, silumine või mis tahes ülesanne, kus põhjendusprotsessi näitamine parandab täpsust ja usaldusväärsust.
-### Rollipõhine päring
+### Rollipõhine promptimine
-Sea AI-le persona või roll enne küsimust. See annab konteksti, mis määrab vastuse tooni, sügavuse ja fookuse. „Tarkvaraarhitekt“ annab erinevat nõu kui „noorem arendaja“ või „turbeauditor“.
+Sea AI-le enne küsimuse esitamist isiksus või roll. See annab konteksti, mis kujundab vastuse toonust, sügavust ja fookust. Näiteks "tarkvara arhitekt" annab teistsuguseid nõuandeid kui "noorem arendaja" või "turvaauditor".
-
+
-*Konteksti ja persona kehtestamine — sama küsimus saab erineva vastuse vastavalt määratud rollile*
+*Konteksti ja isiksuse määramine — sama küsimuse puhul võib vastus sõltuda määratud rollist*
```java
String prompt = """
@@ -157,15 +157,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Millal kasutada:** Koodiülevaated, juhendamine, domeenispetsiifiline analüüs või kui vajad vastuseid, mis on kohandatud konkreetse pädevustaseme või vaatenurga järgi.
+**Millal kasutada:** Koodikontrolle, juhendamist, domeenispetsiifilist analüüsi või kui vajad vastuseid, mis on kohandatud konkreetsele teadmiste tasemele või vaatenurgale.
-### Päringumallid
+### Promptide mallid
-Loo taaskasutatavad päringud muutujate kohatäitjatega. Selle asemel, et iga kord uut päringut kirjutada, defineeri mall üks kord ja täida erinevad väärtused. LangChain4j `PromptTemplate` klass teeb selle lihtsaks `{{muutuja}}` süntaksiga.
+Loo korduvkasutatavad promptid muutujaplaanidega. Selle asemel, et kirjutada iga kord uus prompt, defineeri mall üks kord ja täida see erinevate väärtustega. LangChain4j `PromptTemplate` klass teeb seda lihtsaks `{{variable}}` süntaksiga.
-
+
-*Taaskasutatavad päringud muutujate kohatäitjatega — üks mall, palju kasutuskordi*
+*Korduvkasutatavad promptid muutuja asendustega — üks mall, palju kasutusi*
```java
PromptTemplate template = PromptTemplate.from(
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**Millal kasutada:** Korduvad päringud erinevate sisenditega, partiitöötlus, taaskasutatavate AI töövoogude loomine või igasugune olukord, kus päringu struktuur jääb samaks, kuid andmed muutuvad.
+**Millal kasutada:** Korduvate päringute puhul erinevate sisenditega, hulgitöötluses, korduvkasutatavate AI töövoogude ehitamisel või igas olukorras, kus prompti struktuur jääb samaks, kuid andmed muutuvad.
---
-Need viis alusteadust annavad sulle tugeva tööriistakomplekti enamikele päringutöödele. Ülejäänud moodul ehitab nendele põhinevalt kaheksale täiustatud mustrile, mis kasutavad GPT-5.2 mõtlemise juhtimist, enesehinnangut ja struktureeritud väljundi võimeid.
+Need viis alust loovad tugeva tööriistakomplekti enamike promptimise ülesannete jaoks. Selle mooduli ülejäänud osa põhineb neil ning sisaldab **kaheksat täiustatud mustrit**, mis kasutavad GPT-5.2 põhjendusjuhtimise, enesehindamise ja struktureeritud väljundi võimalusi.
## Täiustatud mustrid
-Pärast alustehnikate katmist liigume kaheksasse täiustatud mustrisse, mis teevad selle mooduli unikaalseks. Mitte kõik probleemid ei vaja sama lähenemist. Mõned küsimused vajavad kiireid vastuseid, teised põhjalikku mõtlemist. Mõned vajavad nähtavat järeldust, teised vajavad lihtsalt tulemusi. Iga alljärgnev muster on optimeeritud erineva stsenaariumi jaoks — ja GPT-5.2 mõtlemise juhtimine teeb need erinevused veelgi selgemaks.
+Kui alused on kaetud, liigume kaheksa täiustatud mustri juurde, mis teevad selle mooduli ainulaadseks. Mitte kõik probleemid ei vaja sama lähenemist. Mõned küsimused vajavad kiireid vastuseid, teised sügavat mõtlemist. Mõned vajavad nähtavat põhjendust, teised lihtsalt tulemusi. Iga alljärgnev muster on optimeeritud erinevaks stsenaariumiks — ning GPT-5.2 põhjendusjuhtimine muudab erinevused veelgi selgemaks.
-
+
-*Kaheksa päringu insenerteaduse mustri ülevaade ja nende kasutusjuhud*
+*Kaheksa promptide insenerimustri ülevaade ja nende kasutusjuhud*
-GPT-5.2 lisab neile mustritele veel ühe mõõtme: *mõtlemise juhtimise*. Allolev liugur näitab, kuidas saad mudeli mõtlemise pingutust reguleerida — alates kiiretest otsestest vastustest kuni sügava ja põhjaliku analüüsini.
+GPT-5.2 lisab nendele mustritele veel ühe mõõtme: *põhjendusjuhtimise*. Liugur allpool näitab, kuidas saad mudeli mõtlemise pingutust reguleerida — kiiretest otsevastustest kuni põhjaliku süvaanalüüsini.
-
+
-*GPT-5.2 mõtlemise juhtimine võimaldab määrata, kui palju mudel peaks mõtlema — alates kiiretest otsestest vastustest kuni sügava uurimiseni*
+*GPT-5.2 põhjendusjuhtimine lubab määrata, kui palju mudel peab mõtlema — alates kiiretest otsestest vastustest kuni põhjaliku uurimiseni*
-**Madal innukus (kiire ja fokusseeritud)** – lihtsate küsimuste jaoks, kus vajad kiireid ja otseseid vastuseid. Mudel teeb minimaalset mõtlemist – maksimaalselt 2 sammu. Kasuta seda arvutusteks, otsinguteks või lihtsateks küsimusteks.
+**Madal innukus (Kiire & Fookustatud)** - Lihtsate küsimuste puhul, kus tahad kiireid ja otseseid vastuseid. Mudel teeb minimaalset põhjendust - maksimaalselt 2 sammu. Kasuta seda arvutuste, päringute või sirgjooneliste küsimuste jaoks.
```java
String prompt = """
@@ -220,11 +220,11 @@ String response = chatModel.chat(prompt);
```
> 💡 **Uuri GitHub Copilotiga:** Ava [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) ja küsi:
-> - "Mis vahe on madala ja kõrge innukusega päringu mustritel?"
-> - "Kuidas XML sildid päringutes aitavad AI vastust struktureerida?"
-> - "Millal peaksin kasutama enesepeegeldamise mustreid ja millal otseseid juhiseid?"
+> - "Mis vahe on madala ja kõrge innukusega promptimustritel?"
+> - "Kuidas XML sildid promptides aitavad AI vastuseid struktureerida?"
+> - "Millal peaksin kasutama eneserefleksiooni mustreid vs otseseid juhiseid?"
-**Kõrge innukus (põhjalik ja põhjalik)** – keerukate probleemide jaoks, kus vajad laiaulatuslikku analüüsi. Mudel uurib põhjalikult ja näitab detailset mõtlemist. Kasuta seda süsteemide disaini, arhitektuuriotsuste või keeruka uurimuse jaoks.
+**Kõrge innukus (Sügav & Põhjalik)** - Komplekssete probleemide puhul, kus soovid põhjalikku analüüsi. Mudel uurib põhjalikult ja näitab detailset põhjendust. Kasuta seda süsteemide disaini, arhitektuuriliste otsuste või keerukate uurimistööde jaoks.
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**Ülesande täitmine (samm-sammuline edenemine)** – mitmeastmeliste töövoogude jaoks. Mudel annab alguses plaani, kirjeldab iga toimingut töö käigus ja annab seejärel kokkuvõtte. Kasuta seda migratsioonide, juurutuste või mistahes mitmeastmelise protsessi jaoks.
+**Tööülesannete täitmine (samm-sammuline edenemine)** - Mitmesammuliste töövoogude jaoks. Mudel annab etteplaani, jutustab iga sammu töötlemise ajal ja annab kokkuvõtte. Kasuta migreerimiste, rakenduste või mõne muu mitmesammulise protsessi jaoks.
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Mõttekäigu ahela päring palub mudelil selgelt näidata järeldusprotsessi, parandades keerukate ülesannete täpsust. Samm-sammuline jaotus aitab nii inimestel kui tehisintellektil loogikat mõista.
+Mõtte ahela promptimine palub mudelil selgelt näidata oma põhjendusprotsessi, parandades täpsust komplekssete ülesannete puhul. Samm-sammult lagundamine aitab nii inimestel kui AI-l loogikat mõista.
-> **🤖 Proovi [GitHub Copilot](https://github.com/features/copilot) Chat'iga:** Küsi selle mustri kohta:
-> - "Kuidas kohandada ülesande täitmise mustrit pikkadeks operatsioonideks?"
-> - "Millised on parimad tavad tööriista sissejuhatuste struktuuri jaoks tootmises?"
-> - "Kuidas püüda ja kuvada vahepealseid edenemisteateid kasutajaliideses?"
+> **🤖 Proovi [GitHub Copiloti](https://github.com/features/copilot) Chat'iga:** Küsi selle mustri kohta:
+> - "Kuidas kohandada tööülesande täitmise mustrit pikaajaliste operatsioonide jaoks?"
+> - "Millised on parimad praktikad tööriistade eeltekstid rakendustes?"
+> - "Kuidas tabada ja kuvada vahe-edenemise uuendusi kasutajaliideses?"
-Järgnev diagramm illustreerib seda Plaani → Täida → Kokkuvõtte töövoogu.
+Järgnev diagramm illustreerib seda Plaan → Täida → Kokkuvõte töövoogu.
-
+
-*Plaani → Täida → Kokkuvõtte töövoog mitmeastmeliste ülesannete jaoks*
+*Plaan → Täida → Kokkuvõte töövoog mitmesammuliste ülesannete jaoks*
-**Enda peegeldav kood** – tootmiskvaliteediga koodi genereerimiseks. Mudel genereerib koodi, järgides tootmistandardeid ja korralikku veahaldust. Kasuta seda uute funktsioonide või teenuste loomisel.
+**Isekriitiline kood** - Toodangukvaliteediga koodi genereerimiseks. Mudel loob koodi vastavalt tootmisstandarditele, sh nõuetekohase veakäsitlusega. Kasuta seda uute funktsioonide või teenuste arendamisel.
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Allolev diagramm näitab iteratiivset täiustamisringi — genereeri, hinda, tuvasta nõrkused ja täiusta, kuni kood vastab tootmisnõuetele.
+Järgnev diagramm näitab seda iteratiivse täiustamise tsüklit — genereeri, hinda, tuvastu puudujäägid ja paranda, kuni kood vastab tootmisstandarditele.
-
+
-*Iteratiivne täiustamisring – genereeri, hinda, tuvastamisprobleemid, paranda, korda*
+*Iteratiivne täiustamise tsükkel – genereeri, hinda, leia puudused, paranda, korda*
-**Struktureeritud analüüs** – järjepidevaks hindamiseks. Mudel vaatab koodi üle fikseeritud raamistikus (õigsus, tavad, jõudlus, turvalisus, hooldatavus). Kasuta seda koodiülevaadete või kvaliteedi hindamise puhul.
+**Struktureeritud analüüs** - Järjekindla hindamise jaoks. Mudel vaatab koodi üle fikseeritud raamistikus (õigsus, praktika, jõudlus, turvalisus, hooldatavus). Kasuta seda koodikontrollide või kvaliteedihindamiste jaoks.
```java
String prompt = """
@@ -354,18 +354,18 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> **🤖 Proovi [GitHub Copilot](https://github.com/features/copilot) Chat'iga:** Küsi struktureeritud analüüsi kohta:
-> - "Kuidas kohandada analüüsiraamistikku erinevate tüüpi koodiülevaadete jaoks?"
-> - "Mis on parim viis struktureeritud väljundi lugemiseks ja tegevuse võtmiseks programmeeritult?"
-> - "Kuidas tagada järjepidev raskusastmete tase erinevate ülevaatesessioonide vahel?"
+> **🤖 Proovi [GitHub Copiloti](https://github.com/features/copilot) Chat'iga:** Küsi struktureeritud analüüsi kohta:
+> - "Kuidas kohandada analüüsiraamistikku erinevate koodikontrollitüüpide jaoks?"
+> - "Mis on parim viis struktureeritud väljundi programmiliseks töötlemiseks ja tegutsemiseks?"
+> - "Kuidas tagada järjekindel raskusastmete määramine erinevates läbivaatuse sessioonides?"
-Järgmine diagramm näitab, kuidas see struktureeritud raamistik korraldab koodiülevaate järjekindlatesse kategooriatesse raskusastmega.
+Järgnev diagramm näitab, kuidas see raamistik organiseerib koodikontrolli järjekindlatesse kategooriatesse koos raskusastmetega.
-*Järjepidevate koodiülevaadete raamistik raskusastmetega*
+*Järjekindlate koodikontrollide raamistik raskusastmetega*
-**Mitme vooru vestlus** – vestluste jaoks, mis vajavad konteksti. Mudel mäletab varasemaid sõnumeid ja arendab neid edasi. Kasuta seda interaktiivsetes abisessioonides või keerukates Q&A-stseenides.
+**Mitme vooruga vestlus** - Vestluste jaoks, mis vajavad konteksti. Mudel mäletab varasemaid sõnumeid ja ehitab neile juurde. Kasuta seda interaktiivsete abiseansside või keerukate küsimuste ja vastuste jaoks.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-Järgmine diagramm visualiseerib, kuidas vestluse kontekst akumuleerub iga vooruga ja kuidas see on seotud mudeli tokeni piiranguga.
+Järgnev diagramm visualiseerib, kuidas vestluse kontekst koguneb mitme vooru jooksul ja kuidas see seostub mudeli tokeni piiriga.
-
+
-*Kuidas vestluse kontekst akumuleerub mitme vooru jooksul kuni tokeni piirini*
-**Samm-sammult põhjendus** – Probleemide puhul, mis vajavad nähtavat loogikat. Mudel näitab iga sammu jaoks selget põhjendust. Kasuta seda matemaatikaülesannete, loogikapuslede või siis, kui vajad arusaamist mõtlemisprotsessist.
+*Kuidas vestluse kontekst koguneb mitme vooruga kuni tokeni piirini*
+
+**Samm-sammuline põhjendus** - Probleemide jaoks, mis vajavad nähtavat loogikat. Mudel näitab selget põhjendust iga sammu kohta. Kasuta seda matemaatikaülesannete, loogikamõistatuste või siis, kui vajad mõtlemisprotsessi mõistmist.
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Järgmine joonis illustreerib, kuidas mudel jaotab probleeme selgeteks, nummerdatud loogilisteks sammudeks.
-
-
+Järgnev diagramm näitab, kuidas mudel jagab probleemid konkreetseteks, nummerdatud loogilisteks sammudeks.
-*Probleemide jaotamine selgeteks loogilisteks sammudeks*
+
+*Probleemide jagamine selgeteks loogilisteks sammudeks*
-**Piiratud väljund** – Vastuste puhul, millel on konkreetse formaadi nõuded. Mudel järgib rangelt formaadi ja pikkuse reegleid. Kasuta seda kokkuvõtete tegemiseks või kui vajad täpset väljundi struktuuri.
+**Piiratud väljund** – vastuste puhul, millel on konkreetsed vormingu nõuded. Mudel järgib rangelt vormingu ja pikkuse reegleid. Kasutatakse kokkuvõtete jaoks või kui on vaja täpset väljundi struktuuri.
```java
String prompt = """
@@ -420,51 +420,51 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Järgmine joonis näitab, kuidas piirangud juhivad mudelit genereerima väljundit, mis striktse järgib sinu formaadi ja pikkuse nõudeid.
+Järgnev diagramm näitab, kuidas piirangud juhivad mudelit väljundi loomisel, mis rangelt vastab teie vormingu ja pikkuse nõuetele.
-*Konkreetsed formaadi, pikkuse ja struktuuri nõuded*
+*Konkreetsed vormingu, pikkuse ja struktuuri nõueteks järgimine*
-## Käivita rakendus
+## Rakenduse käivitamine
-**Kontrolli juurutust:**
+**Paigaldamise kontrollimine:**
-Veendu, et `.env` fail eksisteerib juurkataloogis koos Azure'i volitustega (loodud moodulis 01). Käivita see mooduli kataloogist (`02-prompt-engineering/`):
+Veenduge, et `.env` fail eksisteerib juurkaustas koos Azure volitustega (loodud moodulis 01). Käivitage see mooduli kaustast (`02-prompt-engineering/`):
**Bash:**
```bash
-cat ../.env # Peaks näitama AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+cat ../.env # Peab näitama AZURE_OPENAI_ENDPOINTi, API_KEYd, DEPLOYMENTi
```
**PowerShell:**
```powershell
-Get-Content ..\.env # Peaks kuvama AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+Get-Content ..\.env # Tuleks näidata AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**Alusta rakendust:**
+**Rakenduse käivitamine:**
-> **Märkus:** Kui oled juba kõik rakendused käivitanud käsuga `./start-all.sh` juurkataloogist (nagu kirjeldatud moodulis 01), siis see moodul töötab juba pordil 8083. Võid järgmised käivituskäsud vahele jätta ja minna otse aadressile http://localhost:8083.
+> **Märkus:** Kui olete juba käivitanud kõik rakendused, kasutades `./start-all.sh` juurkaustast (nagu kirjeldatud moodulis 01), siis see moodul töötab juba pordil 8083. Võite alljärgnevad käivitamiskäsud vahele jätta ja minna otse aadressile http://localhost:8083.
-**Valik 1: Kasutades Spring Boot Dashboard’i (Soovitatav VS Code kasutajatele)**
+**Variant 1: Spring Boot'i juhtpaneeli kasutamine (Soovitatav VS Code kasutajatele)**
-Arendus konteiner sisaldab Spring Boot Dashboard laiendust, mis pakub visuaalset kasutajaliidest kõigi Spring Boot rakenduste haldamiseks. Leiad selle VS Code vasaku külje Activity Bar’ist (otsa otsi Spring Boot ikooni).
+Dev konteiner sisaldab Spring Boot Dashboard laiendust, mis pakub visuaalset liidest kõigi Spring Boot rakenduste haldamiseks. Leidke see VS Code ühelt vasakult küljelt tegevusribalt (otsige Spring Boot ikooni).
-Spring Boot Dashboard’ist saad:
-- Näha kõiki tööruumis saadaolevaid Spring Boot rakendusi
-- Alustada/peatada rakendusi ühe klikiga
-- Vaadata rakenduste logisid reaalajas
+Spring Boot Dashboard'ist võite:
+- Näha kõiki tööruumi saadaolevaid Spring Boot rakendusi
+- Alustada/peatada rakendusi ühe klõpsuga
+- Vaadata rakenduse logisid reaalajas
- Jälgida rakenduse olekut
-Lihtsalt klõpsa mängunupule "prompt-engineering" kõrval, et alustada seda moodulit või käivita korraga kõik moodulid.
+Klõpsake lihtsalt "prompt-engineering" kõrval olevat esitamise nuppu, et seda moodulit käivitada või käivitage korraga kõik moodulid.
-
+
-*Spring Boot Dashboard VS Code’is — alusta, peata ja jälgi kõiki mooduleid ühest kohast*
+*Spring Boot Dashboard VS Code'is — alustage, peatage ja jälgige kõiki mooduleid ühest kohast*
-**Valik 2: Kasutades shell skripte**
+**Variant 2: Shell skriptide kasutamine**
-Käivita kõik veebirakendused (moodulid 01–04):
+Käivitage kõik veebirakendused (moodulid 01-04):
**Bash:**
```bash
@@ -474,11 +474,11 @@ cd .. # Juurekataloogist
**PowerShell:**
```powershell
-cd .. # Juure kataloogist
+cd .. # Juurekataloogist
.\start-all.ps1
```
-Või alusta ainult seda moodulit:
+Või käivitage ainult see moodul:
**Bash:**
```bash
@@ -492,9 +492,9 @@ cd 02-prompt-engineering
.\start.ps1
```
-Mõlemad skriptid laadivad automaatselt keskkonnamuutujad juurest `.env` failist ja koostavad JAR-failid, kui neid pole olemas.
+Mõlemad skriptid laadivad automaatselt keskkonnamuutujad juurekaustus asuvast `.env` failist ning ehitavad JAR-failid, kui neid ei eksisteeri.
-> **Märkus:** Kui soovid kõik moodulid käsitsi enne käivitamist kompileerida:
+> **Märkus:** Kui eelistate kõik moodulid enne käivitamist käsitsi kokku panna:
>
> **Bash:**
> ```bash
@@ -508,7 +508,7 @@ Mõlemad skriptid laadivad automaatselt keskkonnamuutujad juurest `.env` failist
> mvn clean package -DskipTests
> ```
-Ava oma brauseris aadress http://localhost:8083.
+Avage oma brauseris http://localhost:8083.
**Peatamiseks:**
@@ -528,81 +528,81 @@ cd ..; .\stop-all.ps1 # Kõik moodulid
## Rakenduse ekraanipildid
-Siin on prompt engineering mooduli põhiliides, kus saad katsetada kõiki kaheksat mustrit kõrvuti.
+Siin on prompt-insenerimise mooduli põhiline liides, kus saate kõiki kaheksat mustrit kõrvuti katsetada.
-
+
-*Põhidiagramm, mis kuvab kõiki 8 prompt engineering mustrit nende omaduste ja kasutusjuhtumitega*
+*Peamine juhtpaneel, kus kuvatakse kõik 8 prompt-insenerimise mustrit koos nende omaduste ja kasutusjuhtudega*
## Musterite uurimine
-Veebiliides võimaldab sul katsetada erinevaid promptimise strateegiaid. Iga muster lahendab erinevaid probleeme – proovi neid, et näha, millal milline lähenemine töötab kõige paremini.
+Veebiliides võimaldab teil katsetada erinevaid promptimise strateegiaid. Iga muster lahendab erinevaid probleeme – proovige neid, et näha, millal iga lähenemine sobib.
-> **Märkus: Voogedastus vs Mittevoogedastus** — Iga mustri lehel on kaks nuppu: **🔴 Voogvastus (Live)** ja **Mittevoogedastus** valik. Voogedastus kasutab Server-Sent Events (SSE), et kuvada mudelei genereeritavaid silte reaalajas, nii näed edenemist kohe. Mittevoogedastus ootab kogu vastust ära enne kuvamist. Sügava põhjenduse korral (nt High Eagerness, Self-Reflecting Code) võib mittevoogedastus võtta väga kaua aega — mõnikord minuteid — ilma nähtava tagasisideta. **Kasuta voogedastust keerukate promptidega katsetamisel**, et näha mudeli tööd ja vältida arusaama, et päring on aegunud.
+> **Märkus: voogedastus vs mittevoogedastus** — Iga mustri lehel on kaks nuppu: **🔴 Stream Response (Live)** ja **mittevoogedastus** variant. Voogedastus kasutab serverist saadetavaid sündmusi (SSE), et näidata märksõnu reaalajas, kui mudel neid genereerib, nii et saate kohe edenemist näha. Mittevoogedastus ootab kogu vastuse saamist enne kuvamist. Sügavat mõtlemist nõudvate promptide (nt High Eagerness, Self-Reflecting Code) puhul võib mittevoogedastus võtta väga kaua aega — mõnikord minutit — ilma nähtava tagasisideta. **Kasutage voogedastust keerukate promptide puhul**, et näha mudeli tööd ja vältida muljet, et päring on aegunud.
>
-> **Märkus: Brauseri nõuded** — Voogedastuse funktsioon kasutab Fetch Streams API-d (`response.body.getReader()`), mis nõuab täielikku brauserit (Chrome, Edge, Firefox, Safari). See **ei tööta** VS Code'i sisseehitatud Simple Browser'is, kuna selle veebivaade ei toeta ReadableStream API-d. Kui kasutad Simple Browser’i, siis mittevoogedastusnupud töötavad tavalise kujul – ainult voogedastusnupud on mõjutatud. Ava täielikuks kogemuseks `http://localhost:8083` välises brauseris.
+> **Märkus: brauseri nõue** — Voogedastusfunktsioon kasutab Fetch Streams API-d (`response.body.getReader()`), mis vajab täisväärtuslikku brauserit (Chrome, Edge, Firefox, Safari). See ei tööta VS Code'i sisseehitatud Simple Browser-is, kuna selle veebivaade ei toeta ReadableStream API-d. Kui kasutate Simple Browserit, töötavad mittevoogedastuse nupud normaalselt – ainult voogedastuse nupud on piiratud. Avage täiskogemuse saamiseks `http://localhost:8083` välist brauserit.
-### Madal vs Kõrge Janunevus
+### Madal vs kõrge innukus
-Esita lihtne küsimus nagu "Mis on 15% arvust 200?" kasutades Madalat Janunevust. Saad kohese, otsese vastuse. Nüüd esita keerukam küsimus nagu "Töötle välja kõrge koormusega API vahemälustrateegia" kasutades Kõrget Janunevust. Vajuta **🔴 Voogvastus (Live)** ja vaata, kuidas mudeli detailne põhjendus ilmub sümboli kaupa. Sama mudel, sama küsimuse struktuur – aga prompt ütleb, kui palju mõelda.
+Esitage lihtne küsimus nagu "Mis on 15% 200-st?" kasutades Madalat Innukust. Saate kohe otsese vastuse. Nüüd küsige midagi keerulisemat nagu "Disainige vahemällu salvestamise strateegia suure liiklusega API jaoks" kasutades Kõrget Innukust. Klõpsake **🔴 Stream Response (Live)** ja vaadake, kuidas mudeli detailne põhjendus ilmub ühikute kaupa. Sama mudel, sama küsimuse struktuur – kuid prompt räägib, kui palju mõtlemist teha.
-### Ülesande täitmine (Tööriistade eelsõnad)
+### Ülesande täitmine (Tööriistapromptid)
-Mitmesammulised töövood saavad kasu eelplaneerimisest ja protsessi jutustamisest. Mudel kirjeldab, mida teeb, kirjeldab iga sammu ja seejärel võtab tulemused kokku.
+Mitmeastmelised töövood saavad kasu etteplaneerimisest ja edenemise jutustamisest. Mudel kirjeldab, mida teeb, jutustab iga sammu ja seejärel võtab tulemused kokku.
### Enesepeegeldav kood
-Proovi "Loo e-posti valideerimise teenus". Selle asemel, et lihtsalt koodi genereerida ja peatuda, genereerib mudel, hindab seda kvaliteedikriteeriumite järgi, tuvastab nõrkused ja täiustab. Näed, kuidas see iteratsioonivalt töötab, kuni kood vastab tootmisstandarditele.
+Proovige "Loo e-posti valideerimise teenus". Selle asemel, et lihtsalt koodi genereerida ja lõpetada, genereerib mudel, hindab kvaliteedikriteeriumite alusel, tuvastab nõrkused ja parandab. Näete, kuidas ta kordab kuni kood vastab tootmisstandarditele.
### Struktureeritud analüüs
-Koodikontrollid vajavad järjepidevaid hindamisraamistikke. Mudel analüüsib koodi fikseeritud kategooriate alusel (õigsus, praktikad, jõudlus, turvalisus) koos tõsidustasemega.
+Koodi ülevaated vajavad järjepidevaid hindamisraamistikke. Mudel analüüsib koodi fikseeritud kategooriate kaupa (õigsus, toimingud, jõudlus, turvalisus) koos tõsidustasemega.
-### Mitmesammuline vestlus
+### Mitme-käiguline vestlus
-Küsi "Mis on Spring Boot?" ja seejärel kohe "Näita mulle näidet". Mudel mäletab sinu esimest küsimust ja annab just selle põhjal Spring Boot näite. Ilma mäluta oleks teine küsimus liiga ebamäärane.
+Küsige "Mis on Spring Boot?" ja seejärel kohe "Näita mulle näidet". Mudel mäletab teie esimest küsimust ja annab teile Spring Booti näite spetsiaalselt. Ilma mäluta oleks teine küsimus liiga ebamäärane.
-### Samm-sammult põhjendus
+### Samm-sammuline põhjendus
-Vali mõni matemaatikaülesanne ja proovi seda nii Samm-sammult põhjendusega kui ka Madala Janunevusega. Madal janunevus annab lihtsalt vastuse – kiire, aga mustri mõttes ebaselge. Samm-sammult näitab kõiki arvutusi ja otsuseid.
+Valige matemaatikaülesanne ja proovige seda nii samm-sammulise põhjenduse kui ka madala innukusega. Madal innukus annab lihtsalt vastuse – kiiresti, kuid varjatud. Samm-sammuline näitab kõiki arvutusi ja otsuseid.
### Piiratud väljund
-Kui vajad teatud formaate või sõnade arvu, tagab see muster rangelt nõuete järgimise. Proovi genereerida kokkuvõte, mis sisaldab täpselt 100 sõna märkepunktides.
+Kui vajate konkreetseid vorminguid või sõnade arvu, kehtestab see muster rangeid reegleid. Proovige genereerida kokkuvõte, millel on täpselt 100 sõna ja mis on punktidena esitatud.
-## Mida sa tegelikult õpid
+## Mida te tegelikult õpite
-**Põhjenduse pingutus muudab kõik**
+**Põhjendusjõud muudab kõik**
-GPT-5.2 võimaldab sul juhtida arvutuspingutust läbi promptide. Madal pingutus tähendab kiireid vastuseid minimaalse uurimisega. Kõrge pingutus tähendab, et mudel võtab aega sügavaks mõtlemiseks. Õpid sejama pingutuse ülesande keerukusega – ära raiska aega lihtsatele küsimustele, aga ära kiirusta keeruliste otsuste tegemisega.
+GPT-5.2 võimaldab teil juhtida arvutusjõudu oma promptide kaudu. Madal jõud tähendab kiireid vastuseid vähese uurimisega. Kõrge jõud tähendab, et mudel võtab aega sügavalt mõtlemiseks. Õpite sobitama jõudu ülesande keerukusega – ärge raisake aega lihtsate küsimuste peale, kuid ärge ka kiirustage keerukate otsustega.
**Struktuur juhib käitumist**
-Kui märkad promptis XML-tähiseid? Need ei ole lihtsalt kaunistuseks. Mudelid järgivad struktureeritud juhiseid usaldusväärsemalt kui vabateksti. Kui vajad mitmesammulisi protsesse või keerulist loogikat, aitab struktuur mudelil jälgida, kus ta parasjagu on ja mis järgmine samm on. Järgmine joonis jagab hästi struktureeritud prompti, näidates, kuidas sildid nagu ``, ``, ``, ``, ja `` organiseerivad juhised selgeteks sektsioonideks.
+Kas olete märganud promptide XML-silte? Need ei ole kaunistuseks. Mudelid järgivad struktureeritud juhiseid usaldusväärsemalt kui vabateksti. Kui vajate mitmeastmelisi protsesse või keerukat loogikat, aitab struktuur mudelil jälgida, kus ta on ja mis tuleb järgmiseks. Järgmine diagramm lagundab hästi struktureeritud prompti, näidates, kuidas sildid ``, ``, ``, `` ja `` organiseerivad teie juhised selgeteks osadeks.
-*Hästi struktureeritud prompti anatoomia selgete sektsioonide ja XML-laadse korraldusega*
+*Hästi struktureeritud prompti anatoomia selgete osade ja XML-laadse korraldusega*
**Kvaliteet läbi enesehindamise**
-Enesepeegeldamise mustrid töötavad, tehes kvaliteedikriteeriumid eksplitsiitseks. Selle asemel, et loota, et mudel "teeb õigesti", ütled täpselt, mida tähendab "õige": korrektne loogika, veakäsitlus, jõudlus, turvalisus. Seejärel saab mudel enda väljundit hinnata ja paremaks muuta. See muudab koodigeneratsiooni loteriist protsessiks.
+Enesepeegeldavad mustrid töötavad nii, et teevad kvaliteedikriteeriumid selgelt nähtavaks. Selle asemel, et loota mudeli „õigele tegutsemisele“, ütlete talle täpselt, mida „õige“ tähendab: õige loogika, veahaldus, jõudlus, turvalisus. Mudel saab seejärel hinnata oma väljundit ja parandada seda. See muudab koodi genereerimise loteriist protsessiks.
**Kontekst on piiratud**
-Mitmesammulised vestlused toimivad, kaasates iga päringu juurde sõnumi ajaloo. Kuid on piir – iga mudeli tokenite arv on maksimaalne. Vestluse kasvades vajad strateegiaid, et hoida asjakohane kontekst ilma selle piirmäära ületamata. See moodul näitab sulle, kuidas mälu töötab; hiljem õpid, millal võtta kokku, millal unustada ja millal taastada.
+Mitme-käigulised vestlused töötavad, lisades igale päringule sõnumite ajaloo. Kuid on piir – igal mudelil on maksimaalne tokenite arv. Vestluste kasvades peate leidma strateegiaid, kuidas hoida asjakohast konteksti ilma selle lakini jõudmata. See moodul näitab teile, kuidas mälu töötab; hiljem õpite, millal kokkuvõtteid teha, millal unustada ja millal pärida.
## Järgmised sammud
-**Järgmine moodul:** [03-rag - RAG (teadmistepõhine genereerimine)](../03-rag/README.md)
+**Järgmine moodul:** [03-rag - RAG (otsingupõhine suurendatud genereerimine)](../03-rag/README.md)
---
-**Navigeerimine:** [← Eelmine: Moodul 01 - Sissejuhatus](../01-introduction/README.md) | [Tagasi põhilehele](../README.md) | [Järgmine: Moodul 03 - RAG →](../03-rag/README.md)
+**Navigeerimine:** [← Eelmine: Moodul 01 - Sissejuhatus](../01-introduction/README.md) | [Tagasi avalehele](../README.md) | [Järgmine: Moodul 03 - RAG →](../03-rag/README.md)
---
-**Vastutusest loobumine**:
-See dokument on tõlgitud kasutades tehisintellektil põhinevat tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi püüdleme täpsuse poole, palume arvestada, et automatiseeritud tõlked võivad sisaldada vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul on soovitatav kasutada professionaalseid inimtõlkeid. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või valesti mõistmiste eest.
+**Lahtiütlus**:
+See dokument on tõlgitud kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi me püüdleme täpsuse poole, palun pange tähele, et automatiseeritud tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud eksimustest või valesti mõistmistest.
\ No newline at end of file
diff --git a/translations/et/03-rag/README.md b/translations/et/03-rag/README.md
index b32f41fde..1a5601fb2 100644
--- a/translations/et/03-rag/README.md
+++ b/translations/et/03-rag/README.md
@@ -1,146 +1,143 @@
-# Moodul 03: RAG (taastepõhine loomine)
+# Moodul 03: RAG (otsingupõhine genereerimine)
## Sisukord
-- [Video juhendamine](../../../03-rag)
-- [Mida sa õpid](../../../03-rag)
-- [Eeldused](../../../03-rag)
-- [RAG mõistmine](../../../03-rag)
- - [Millist RAG lähenemist see juhend kasutab?](../../../03-rag)
-- [Kuidas see töötab](../../../03-rag)
- - [Dokumendi töötlemine](../../../03-rag)
- - [Manuste loomine](../../../03-rag)
- - [Semantiline otsing](../../../03-rag)
- - [Vastuste genereerimine](../../../03-rag)
-- [Rakenduse käivitamine](../../../03-rag)
-- [Rakenduse kasutamine](../../../03-rag)
- - [Dokumendi üleslaadimine](../../../03-rag)
- - [Küsimuste esitamine](../../../03-rag)
- - [Allikaviidete kontrollimine](../../../03-rag)
- - [Katsetamine küsimustega](../../../03-rag)
-- [Põhikontseptsioonid](../../../03-rag)
- - [Tükeldamisstrateegia](../../../03-rag)
- - [Sarnasuskoefitsiendid](../../../03-rag)
- - [Mälusalvestus](../../../03-rag)
- - [Kontekstivälja haldamine](../../../03-rag)
-- [Millal RAG on oluline](../../../03-rag)
-- [Järgmised sammud](../../../03-rag)
-
-## Video juhendamine
-
-Vaata seda otseülekannet, mis selgitab, kuidas selle mooduliga alustada:
+- [Videojuhend](#videojuhend)
+- [Mida Sa Õpid](#mida-sa-õpid)
+- [Eelnõuded](#eelnõuded)
+- [RAG mõistmine](#rag-mõistmine)
+ - [Millist RAG lähenemist see juhend kasutab?](#millist-rag-lähenemist-see-juhend-kasutab)
+- [Kuidas see töötab](#kuidas-see-töötab)
+ - [Dokumendi töötlemine](#dokumendi-töötlemine)
+ - [Sissejuhatuste loomine](#sissejuhatuste-loomine)
+ - [Semantiline otsing](#semantiline-otsing)
+ - [Vastuse genereerimine](#vastuse-loomine)
+- [Rakenduse käivitamine](#rakenduse-käivitamine)
+- [Rakenduse kasutamine](#rakenduse-kasutamine)
+ - [Dokumendi üleslaadimine](#dokumendi-üleslaadimine)
+ - [Küsimuste esitamne](#küsi-küsimusi)
+ - [Allikaviidete kontrollimine](#kontrolli-allikaviiteid)
+ - [Katsetamine küsimustega](#katseta-küsimustega)
+- [Põhikontseptsioonid](#olulised-mõisted)
+ - [Tükkideks jagamise strateegia](#lõikude-strateegia)
+ - [Sarnasuse skoorid](#sarnasusskoorid)
+ - [Mälusalvestus](#mälupõhine-salvestus)
+ - [Kontekstiakna haldamine](#konteksti-akna-haldamine)
+- [Millal RAG on oluline](#millal-rag-on-oluline)
+- [Järgmised sammud](#järgmised-sammud)
+
+## Videojuhend
+
+Vaata seda reaalajas sessiooni, mis selgitab, kuidas selle mooduli alustamiseks:
-## Mida sa õpid
+## Mida Sa Õpid
-Eelnevates moodulites õppisid, kuidas vestelda tehisintellektiga ja oma päringuid efektiivselt struktureerida. Kuid on üks põhipiirang: keelemudelid teavad ainult seda, mida neile treeningu ajal õpetati. Nad ei saa vastata küsimustele sinu ettevõtte poliitikate, projektdokumentatsiooni või muu info kohta, mida neile ei ole õpetatud.
+Eelnevates moodulites õppisid, kuidas suhelda tehisintellektiga ja struktureerida oma juhiseid efektiivselt. Kuid on üks põhimõtteline piirang: keelemudelid teavad vaid seda, mida nad treeningu ajal õppisid. Nad ei saa vastata küsimustele sinu ettevõtte poliitikate, projekti dokumentatsiooni või muu teabe kohta, mida neile treenimisel ei sisestatud.
-RAG (taastepõhine loomine) lahendab selle probleemi. Selle asemel, et pead mudelit sinu infole õpetama (mis on kallis ja ebaefektiivne), annad mudelile võimaluse otsida sinu dokumentidest. Kui keegi esitab küsimuse, leiab süsteem asjakohase info ja lisab selle päringusse. Mudel vastab siis selle taasesitatud konteksti põhjal.
+RAG (otsingupõhine genereerimine) lahendab selle probleemi. Selle asemel, et püüda mudelile sinu infot õpetada (mis on kallis ja ebaratsionaalne), annad talle võime otsida sinu dokumentidest. Kui keegi esitab mingi küsimuse, leiab süsteem asjakohase info ja lisab selle juhise hulka. Seejärel mudel vastab selle toomise baasil.
-Mõtle RAG-le kui viitetuumale mudeli jaoks. Kui sa küsid küsimust, teeb süsteem:
+Mõtle RAG-ile kui viidete raamatukogule mudelile. Kui esitad küsimuse, teeb süsteem järgmised sammud:
-1. **Kasutaja päring** – sa esitad küsimuse
-2. **Embedimine** – teisendab sinu küsimuse vektoriks
-3. **Vektoripäring** – leiab sarnased dokumendi tükid
-4. **Konteksti kokku panemine** – lisab vastavad tükid päringusse
-5. **Vastus** – LLM genereerib vastuse põhinedes kontekstile
+1. **Kasutaja päring** - Sa esitad küsimuse
+2. **Embedding** - Konverteerib sinu küsimuse vektoriks
+3. **Vektorotsing** - Leiab sarnase dokumendi tükid
+4. **Konteksti kokkupanek** - Lisab asjakohased tükid juhisesse
+5. **Vastus** - LLM genereerib vastuse konteksti põhjal
-See seab mudeli vastused sinu tegelikele andmetele, mitte ei sõltu ainult treeningteadmistest või ei leiuta vastuseid ise.
+See annab mudeli vastustele kindla baasi sinu tegelikest andmetest, mitte ei tugine üksnes treeningteadmistel ega improviseeri vastuseid.
-## Eeldused
+## Eelnõuded
-- Läbitud [Moodul 00 - Kiire algus](../00-quick-start/README.md) (lihtsa RAG näite jaoks, mida selles moodulis hiljem käsitletakse)
-- Läbitud [Moodul 01 - Sissejuhatus](../01-introduction/README.md) (kinnitatud Azure OpenAI ressursid, sh `text-embedding-3-small` manustumudel)
-- Juurekaustas olemas `.env` fail Azure mandaadiga (loodud `azd up` käsklusega Moodulis 01)
+- Lõpetatud [Moodul 01 - Sissejuhatus](../01-introduction/README.md) (Azure OpenAI ressursid paigaldatud, sh `text-embedding-3-small` embedimismudel)
+- `.env` fail juurkataloogis koos Azure volitustega (loodud käsuga `azd up` Moodulis 01)
-> **Märkus:** Kui sa ei ole veel Moodulit 01 lõpetanud, järgi esmalt seal olevaid paigaldusjuhiseid. Käsk `azd up` käivitab nii GPT vestlusmudeli kui ka manustumudeli, mida see moodul kasutab.
+> **Märkus:** Kui sa ei ole lõpetanud Moodulit 01, järgi sealset paigaldusjuhendit esmalt. Käsk `azd up` paigaldab nii GPT vestlusmudeli kui ka selle mooduli embedimismudeli.
## RAG mõistmine
-Järgmine diagramm illustreerib põhimõtet: selle asemel, et toetuda ainult mudeli treeningandmetele, annab RAG mudelile viiteraamatu sinu dokumentidest, mida ta saab enne vastuse genereerimist kasutada.
+Joonis allpool illustreerib põhikontseptsiooni: RAG ei tugine üksnes mudeli treeningandmetele, vaid annab talle ligipääsu sinu dokumentide raamatukogule enne iga vastuse genereerimist.
-*See diagramm näitab erinevust tavapärase LLM-i (mis juhindub treeningandmetest) ning RAG-toega LLM-i vahel (mis esmalt otsib sinu dokumente).*
+*Selles joonises näidatakse erinevust tavalise LLM vahel (mis oletab treeningandmete põhjal) ja RAG-ga tugevdatu vahel (mis esmalt kontrollib ära sinu dokumendid).*
-Nii on tükid omavahel seotud. Kasutaja päring läbib neli sammu — manustamine, vektoripäring, konteksti kokku panemine ja vastuse genereerimine — igaüks toetub eelnevale:
+Siin on sammud ükshaaval lõpp-punktini. Kasutaja küsimus liigub läbi nelja etapi — embedding, vektorotsingu, konteksti kokkupaneku ja vastuse genereerimise — igaüks tugineb eelnevale:
-*See diagramm näitab RAG täielikku torujuhtme — kasutaja päring läbib manustamise, vektoripäringu, konteksti kokkupaneku ja vastuse genereerimise.*
+*Selles joonises on RAG töövool lõpp-punktini — kasutaja päring läbib embeddingu, vektorotsingu, konteksti kokku paneku ja vastuse genereerimise.*
-Ülejäänud moodul kirjeldab iga etappi detailsemalt, koos koodinäidete ja diagrammidega.
+Järgmised sektsioonid käivad läbi iga etapi, koos koodiga, mida saad käivitada ja muuta.
### Millist RAG lähenemist see juhend kasutab?
-LangChain4j pakub kolme võimalust RAG-i rakendamiseks, igaühel erinev abstraktsioonitase. Allolev diagramm võrdleb neid kõrvuti:
+LangChain4j pakub kolme RAG rakendamist, igaüks erineval abstraktsioonitasemel. Joonis allpool võrdleb neid kõrvuti:
-*See diagramm võrdleb kolme LangChain4j RAG lähenemist — Lihtne, Natiivne ja Täiustatud — näidates nende peamisi komponente ja kasutusolukordi.*
+*Selles joonises on kolm LangChain4j RAG lähenemist — Easy, Native ja Advanced — ning näidatakse nende põhikomponente ja kasutamise olukordi.*
-| Lähenemine | Mida see teeb | Kompromiss |
+| Lähenemine | Mida See Teeb | Kompromiss |
|---|---|---|
-| **Lihtne RAG** | Seob kõik automaatselt `AiServices` ja `ContentRetriever` kaudu. Sa märgid liidese, lisad taastele, ja LangChain4j haldab manustamist, otsingut ja päringu kokkupanekut tagaplaanil. | Vähe koodi, aga sa ei näe täpselt, mis igas etapis toimub. |
-| **Natiivne RAG** | Sa kutsud ise manustusmudelit, otsid andmestikus, ehitad päringu ja genereerid vastuse — sammhaaval ja selgelt. | Rohkem koodi, aga iga etapp on nähtav ja kohandatav. |
-| **Täiustatud RAG** | Kasutab `RetrievalAugmentor` raamistikku, kus on võimalik lisada päringumuundureid, marsruutereid, järjestajaid ja konteksti lisajaid tootmisklassi torujuhtmeks. | Kõrgeim paindlikkus, kuid ka märkimisväärne keerukus. |
+| **Easy RAG** | Sidub kõik automaatselt läbi `AiServices` ja `ContentRetriever`. Sa märgistad liidese, lisad retriiveri ning LangChain4j haldab embedimist, otsingut ja käsu koostamist taga. | Vähe koodi, kuid sa ei näe, mis toimub igas sammus. |
+| **Native RAG** | Sa kutsud embedimismudeli, otsid andmebaasist, koostad käsu ja genereerid vastuse ise — samm-sammult. | Rohkem koodi, kuid iga etapp on nähtav ja muudetav. |
+| **Advanced RAG** | Kasutab `RetrievalAugmentor` raamistikku koos vahetatavate päringu muundurite, marsruuterite, ümberhinnangute ja sisendite lisajatega tootmiskvaliteediga torujuhtmete jaoks. | Maksimaalne paindlikkus, kuid palju keerulisem. |
-**See juhend kasutab Natiivset lähenemist.** Iga RAG torujuhtme samm — päringu manustamine, vektoripäringu tegemine, konteksti koostamine ja vastuse genereerimine — on selgelt kirjas [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) failis. See on teadlik valik: õppematerjalina on tähtsam, et näeksid ja mõistaksid iga etappi, kui et kood oleks vähendatud. Kui oled senise tööga mugav, võid kiirete prototüüpide jaoks minna Lihtsa RAG juurde või tootmisprojektide jaoks Täiustatud RAG-i.
+**See juhend kasutab Native lähenemist.** Iga RAG torujuhtme samm — päringu embedimine, vektoripoest otsimine, konteksti kogumine ja vastuse genereerimine — on selgelt lahti kirjutatud [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). See on teadlik valik: õppematerjalina on olulisem, et sa näeksid ja mõistaksid iga etappi, kui et kood oleks minimaalselt kirjutatud. Kui oled igas etapis mugav, võid üle minna Easy RAG-le kiireteks prototüüpideks või Advanced RAG-le tootmissüsteemide jaoks.
-> **💡 Oled Lihtsat RAG-i juba näinud?** [Kiire alguse moodul](../00-quick-start/README.md) sisaldab dokumendi küsimuste ja vastuste näidet ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)), mis kasutab Lihtsat RAG-i — LangChain4j haldab manustamist, otsingut ja päringu kokkupanekut automaatselt. See moodul võtab järgmise sammu, avades selle torujuhtme nii, et sa näed ja juhid iga etappi ise.
+> **💡 Huvitatud Easy RAG-st?** LangChain4j pakub ka *Easy RAG* lähenemist, kus `AiServices` ja `ContentRetriever` haldavad embedimist, otsingut ja käsu koostamist automaatselt. See moodul kasutab selgemat teed — avab selle torujuhtme iga etapi, et sa näeksid ja kontrolliksid seda ise.
-Allolev diagramm näitab Lihtsa RAG torujuhet eelmainitud Kiire alguse näitest. Märka, kuidas `AiServices` ja `EmbeddingStoreContentRetriever` peidavad kogu keerukuse — laed dokumendi, lisad taastaja ja saad vastused. Selle mooduli Natiivne lähenemine avab neid peidetud samme:
+Joonis allpool näitab Easy RAG torujuhet. Märka, kuidas `AiServices` ja `EmbeddingStoreContentRetriever` varjavad kogu keerukust — sa laed dokumendi, lisad retriiveri ja saad vastused. Native lähenemine selles moodulis avab kõik need varjatud sammud:
-
+
-*See diagramm näitab Lihtsa RAG torujuhet `SimpleReaderDemo.java` failist. Võrdle seda Natiivse lähenemisega selles moodulis: Lihtne RAG peidab manustamise, taaste ja päringu kokkupaneku `AiServices` ja `ContentRetriever` taha — laed dokumendi, lisad taastaja ja saad vastused. Selle mooduli Natiivne lähenemine avab selle torujuhtme, nii et sa kutsud iga etappi (manusta, otsi, kogu kontekst, genereeri) ise, saades täieliku ülevaate ja kontrolli.*
+*Selles joonises on Easy RAG torujuht. Võrdle seda Native lähenemisega selles moodulis: Easy RAG varjab embedimist, otsingut ja käsu koostamist `AiServices` ja `ContentRetriever` taga — sa laed dokumendi, lülitad retriiveri sisse ja saad vastused. Native lähenemine selles moodulis avab kogu torujuhtme, nii et sa kutsud iga etappi ise (embed, otsing, konteksti koostamine, genereerimine), pakkudes täisvaatlust ja kontrolli.*
## Kuidas see töötab
-Selles moodulis jaguneb RAG torujuhe neljaks sammuks, mis toimuvad järjest iga kord, kui kasutaja esitab küsimuse. Esiteks analüüsitakse üleslaaditud dokument, mis jagatakse haldamiseks sobivateks tükkideks. Need tükid teisendatakse vektoriteks (manustusteks) ja salvestatakse, et neid saaks matemaatiliselt võrrelda. Päringu korral teeb süsteem semantilise otsingu, et leida kõige asjakohasemad tükid, ning edastab need kontekstina LLM-ile vastuse genereerimiseks. Järgnevad osad selgitavad iga sammu koos koodiga.
-
-Vaatame esmalt dokumendi töötlemist.
+Selles moodulis jaguneb RAG torujuhe neljaks etapiks, mis käivad kasutaja iga küsimuse korral järjestikku läbi. Esmalt eelnevalt üles laetud dokument on **parsitakse ja tükkideks jagatud**, väiksemateks osadeks, mis mahuvad mugavalt mudeli kontekstiaknasse. Need tükid teisendatakse **vektoriteks** ehk embedimisteks ja säilitatakse, et neid saab matemaatiliselt võrrelda. Kui päring jõuab kohale, toimub **semantiline otsing**, et leida kõige asjakohasemad tükid. Lõpuks antakse need kontekstina LLM-ile vastuse genereerimiseks. Järgnevad osad selgitavad iga etappi koos reaalse koodi ja joonistega. Vaatame esimese sammu.
### Dokumendi töötlemine
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-Kui sa dokumenti üles laed, süsteem analüüsib selle (PDF või lihttekst), lisab metainfot nagu failinimi ja seejärel jagab selle osadeks — väiksemateks tükkideks, mis mahuvad mudeli kontekstiväljale mugavalt. Need tükid kattuvad veidi, et piiril ei kaoks oluline kontekst.
+Kui sa laed dokumendi üles, süsteem parsib selle (PDF või tavatekst), lisab metadata nagu failinimi ja jagab selle tükkideks — väiksemateks osadeks, mis mahuvad mudeli konteksti aknasse. Need tükid kattuvad osaliselt, et sa ei kaotaks konteksti servades.
```java
-// Analüüsi üleslaaditud faili ja mässi see LangChain4j dokumendi sisse
+// Töötle üleslaaditud fail ja paki see LangChain4j dokumendiks
Document document = Document.from(content, metadata);
-// Jaga 300-tokenilisteks tükkideks, millel on 30-tokeniline kattuvus
+// Jaga 300 tokeni kaupa tükkideks, mis kattuvad 30 tokeniga
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
-
-Allolev diagramm illustreerib seda visuaalselt. Märka, kuidas iga tükk jagab mõningaid tokeneid naaber tükkidega — 30-tokeni kattuvus tagab, et oluline kontekst ei jää vahele:
+
+Joonis allpool näitab seda visuaalselt. Märka, kuidas iga tükk jagab mõningaid tokeneid oma naabritega — 30-tokeniline kattumine tagab, et oluline kontekst ei kaotsi:
-*See diagramm näitab dokumenti, mis on jagatud 300 tokeni suurusteks tükkideks, kus on 30-tokeniline kattuvus, säilitades konteksti tükkide piiridel.*
+*Selles joonises näidatakse dokumenti, mis on jagatud 300 tokeni pikkusteks tükikesteks 30 tokeni kattumisega, säilitades konteksti tükkide servades.*
-> **🤖 Proovi koos [GitHub Copilot](https://github.com/features/copilot) Chat’iga:** Ava [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) ja küsi:
-> - "Kuidas LangChain4j jagab dokumente tükkideks ja miks on kattuvus oluline?"
-> - "Mis on optimaalne tüki suurus erinevate dokumentide jaoks ja miks?"
+> **🤖 Proovi [GitHub Copilot](https://github.com/features/copilot) Chati abil:** Ava [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) ja küsi:
+> - "Kuidas LangChain4j jagab dokumendid tükkideks ja miks kattumine on oluline?"
+> - "Mis on optimaalne tüki suurus erinevate dokumentide jaoks ja miks?"
> - "Kuidas käsitleda dokumente mitmes keeles või erilise vormindusega?"
-### Manuste loomine
+### Sissejuhatuste loomine
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-Iga tükk teisendatakse numbriliseks kujutiseks, nn manustuseks — tähenduse teisendaja arvudeks. Manustumudel ise ei ole „tark“ nagu vestlusmudel; ta ei suuda juhiseid järgida, loogiliselt põhjendada ega küsimustele vastata. Mida ta teeb, on tekstikildude asukoha määramine matemaatilises ruumis, kus lähedased tähendused paiknevad üksteisele lähedal — „auto“ on lähedal „autole“, „tagasimakse poliitika“ lähedal „raha tagastamisele“. Mõtle vestlusmudelile kui inimesele, kellega rääkida; manustumudel on tõhus ja hea süsteem asjade sortimiseks.
+Iga tükk teisendatakse numbriliseks esinduseks, mida nimetatakse embeddinguks — sisuliselt tähenduse ja numbrite konvertoriks. Embedimismudel pole "intelligentne" nagu vestlusmudel; ta ei suuda järgida juhiseid, arutleda ega vastata küsimustele. Mida ta teeb, on tekstide kaardistamine matemaatilisse ruumi, kus sarnased tähendused paiknevad üksteisele lähedal — näiteks "auto" ja "sõiduauto" on lähestikku, "tagasimakse poliitika" on lähedane "raha tagastamisele". Mõtle vestlusmudelit kui sõpra, kellega saab rääkida; embedimismudel on väga hea arhiveerimissüsteem.
-Allolev diagramm illustreerib seda mõistet — tekst läheb sisse, numbrilised vektorid tulevad välja, ning sarnased tähendused tähistatakse vektoriruumi lähedal:
+Joonis allpool visualiseerib seda kontseptsiooni — tekst sisse, numbrilised vektorid välja, ja sarnased tähendused tekitavad lähedalolevad vektorid:
-
+
-*See diagramm näitab, kuidas manustumudel teisendab teksti numbriliseks vektoriks, pannes sarnased tähendused — nagu „auto“ ja „automaat“ — üksteisele lähedale vektoriruumis.*
+*Selles joonises on näidatud, kuidas embedimismudel konverteerib teksti numbrilisteks vektoriteks, pannes sarnased tähendused nagu "auto" ja "sõiduauto" vektoriruumis lähedale.*
```java
@Bean
@@ -155,30 +152,30 @@ public EmbeddingModel embeddingModel() {
EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-
-Järgmine klassidiagramm näitab kahte sõltumatut voogu RAG torujuhtmes ja LangChain4j klasse, mis neid realiseerivad. **Sisseimemise voog** (käib ühe korra üleslaadimisel) jagab dokumendi tükkideks, manustab need ja salvestab `.addAll()` kaudu. **Päringuvoog** (igakordse kasutajapäringu ajal) manustab küsimuse, otsib salvestusest `.search()` kaudu ja edastab sobitatud konteksti vestlusmudelile. Mõlemad vood kohtuvad jagatud `EmbeddingStore` liidesel:
+
+Järgmine klassidiagramm näitab kahte eraldi töövoogu RAG torujuhtmes ja LangChain4j klasse, mis neid katavad. **Sisendvoog** (käivitatakse üleslaadimisel) jagab dokumendi, teeb tükkidele embeddingud ja salvestab need `.addAll()` meetodiga. **Päringuvoog** (käivitatakse iga kord, kui kasutaja esitab küsimuse) teeb päringust embeddingu, otsib poe kaudu `.search()` meetodiga ja annab leitud konteksti vestlusmudelile. Mõlemad vood kohtuvad jagatud `EmbeddingStore` liidese juures:
-*See diagramm näitab kahte RAG voogu — sisseimemist ja päringut — ja nende ühendust ühise EmbeddingStore kaudu.*
+*Selles joonises on RAG torujuhtme kaks voogu — sisend ja päring — ning nende ühendus ühise EmbeddingStore´i kaudu.*
-Kui manused on salvestatud, koonduvad sarnased sisud loogiliselt vektoriruumi lähedale. Allolev visualisatsioon näitab, kuidas seotud teemad paistavad 3D-ruumis klastritena, mis teeb semantilise otsingu võimalikuks:
+Kui embeddingud on salvestatud, koonduvad sarnased dokumendid loomulikult vektoriruumis kokku. Järgmine visualisatsioon näitab, kuidas seotud teemad koonduvad lähestikku punktidesse, mis võimaldab semantilist otsingut:
-
+
-*See visualisatsioon näitab, kuidas seotud dokumendid rühmituvad 3D vektoriruumi, moodustades erinevad grupid nagu tehnilised dokumendid, ärireeglid ja korduma kippuvad küsimused.*
+*See visualisatsioon näitab seotud dokumentide koondumist 3D vektoriruumis, kus on eristuvad grupid nagu Tehnilised dokumendid, Ärieeskirjad ja KKK.*
-Kui kasutaja otsib, järgib süsteem nelja sammu: manustab dokumendid kord, manustab päringu iga otsingu ajal, võrdleb päringu vektorit kõigi salvestatud vektoritega kosiinussarnasuse järgi ja tagastab tipp-K kõrgeima skooriga tükid. Allolev diagramm kirjeldab iga sammu ja kaasatud LangChain4j klasse:
+Kui kasutaja otsib, toimib süsteem neljas etapis: embedib dokumendid ühekordselt, embedib iga otsingu päringu eraldi, võrdleb päringu vektorit kõigi salvestatud vektoritega koosiin sarnasuse alusel ja tagastab parima K skooriga tükid. Joonis allpool demonstreerib iga sammu koos vastavate LangChain4j klassidega:
-
+
-*See diagramm näitab nelja sammu manustamise otsimusprotsessis: manusta dokumendid, manusta päring, võrdle vektoreid kosiinussarnasuse alusel ja tagasta tipp-K tulemid.*
+*Selles joonises on neljaastmeline embedimise otsingu protsess: embedid dokumendid, embedid päringu, võrdled vektoreid koosiin sarnasuse alusel ja tagastad tipp-K tulemused.*
### Semantiline otsing
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Kui küsid küsimust, teisendatakse sinu küsimus samuti manustuseks. Süsteem võrdleb sinu päringu manustust kõigi dokumendi tükkide manustustega. Ta leiab kõige sarnasema tähendusega tükid — mitte ainult märksõnade kattuvuse põhjal, vaid tõelise semantilise sarnasuse alusel.
+Kui sa esitad küsimuse, muutub ka sinu küsimus embeddinguks. Süsteem võrdleb sinu päringu embeddingut kõigi dokumenditükkide embeddingutega. Ta leiab tükid, mille tähendused on sarnasemad — mitte ainult märksõnade kattumised, vaid tegelik semantiline sarnasus.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -197,28 +194,28 @@ for (EmbeddingMatch match : matches) {
double score = match.score();
}
```
-
-Allolev diagramm võrdleb semantilist otsingut tavapärase märksõnapõhise otsinguga. Märksõnapõhine „sõiduk“ otsing jätab leidmata tüki „autod ja veoautod“, kuid semantiline otsing mõistab, et need tähendavad sama asja ja tagastab selle kõrge skooriga tulemusena:
+
+Joonis allpool võrdleb semantilist otsingut traditsioonilise märksõnapõhise otsinguga. Märksõnapõhine otsing päringuga "sõiduk" jätab vahele mõned tükid teemal "autod ja veoautod", kuid semantiline otsing mõistab, et need tähendavad sama asja ja tagastab selle kõrge skooriga vasteidena:
-*See diagramm võrdleb märksõnapõhist otsingut semantilise otsinguga, näidates kuidas viimane leiab mõistepõhiseid seotud sisusid ka siis, kui täpsed märksõnad ei lange kokku.*
-Masinapõhiselt mõõdetakse sarnasust kasutades kosinussarnasust — sisuliselt küsides „Kas need kaks noolt osutavad sama suunda?“ Kaks lõiku võivad kasutada täiesti erinevaid sõnu, kuid kui nende tähendus on sama, osutavad nende vektorid samasse suunda ja skoorivad ligikaudu 1.0:
+*Selles joonises võrreldakse märksõnapõhist otsingut semantilise otsinguga, mis leiab mõistepõhist seotud sisu ka siis, kui märksõnad erinevad.*
-
+Tegelikult mõõdetakse sarnasust koosiiniga — küsimusega "kas need kaks noolt osutavad samasse suunda?" Kahe tükki sõnad võivad olla täiesti erinevad, kuid kui tähendused kattuvad, osutavad vektorid samasse suunda ja skoor on ligi 1.0:
-*See diagramm illustreerib kosinussarnasust kui nurka manustatud vektorite vahel — rohkem joondunud vektorid skoorivad lähemale 1.0-le, mis näitab suuremat semantilist sarnasust.*
+
+*Selles diagrammis on kujutatud kosini sarnasust manustatud vektorite vahelise nurga kaudu — rohkem ühtlustatud vektorid saavad skoori lähemale 1,0-le, mis näitab kõrgemat semantilist sarnasust.*
-> **🤖 Proovi [GitHub Copilot](https://github.com/features/copilot) Chatiga:** Ava faili [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) ja küsi:
-> - "Kuidas töötab sarnasuse otsing manustega ja mis määrab skoori?"
-> - "Millist sarnasuse läve peaksin kasutama ja kuidas see tulemusi mõjutab?"
-> - "Kuidas käituda juhtudel, kui asjakohaseid dokumente ei leita?"
+> **🤖 Proovi [GitHub Copilot](https://github.com/features/copilot) Chat'iga:** Ava [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) ja küsi:
+> - "Kuidas töötab sarnasusotsing manustustega ja mis määrab skoori?"
+> - "Millist sarnasuse lävendit peaksin kasutama ja kuidas see tulemusi mõjutab?"
+> - "Kuidas ma käsitlen olukordi, kus sobivaid dokumente ei leita?"
-### Vastuse Genereerimine
+### Vastuse loomine
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Kõige asjakohasemad lõigud koostatakse struktureeritud küsimuseks, mis sisaldab selgeid juhiseid, päringukonteksti ja kasutaja küsimust. Mudel loeb neid konkreetseid lõike ja vastab selle info põhjal — ta saab kasutada ainult seda, mis tal ees on, mis takistab hallutsinatsioone.
+Kõige asjakohasemad lõigud koostatakse struktureeritud päringuks, mis sisaldab selgeid juhiseid, päringu konteksti ja kasutaja küsimust. Mudel loeb need konkreetsed lõigud ja vastab nende põhjal — ta saab kasutada ainult seda, mis on ees, mis takistab hallutsinatsiooni.
```java
String context = matches.stream()
@@ -239,65 +236,65 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-Allolev diagramm näitab seda kokkupanekut tegevuses — otsingust saadud kõige paremini skoorivad lõigud süstitakse küsimuse malli ja `OpenAiOfficialChatModel` genereerib kinnitatud vastuse:
+Allolev diagramm näitab seda kokkupanekut tegevuses — otsingust parima skooriga lõigud sisestatakse päringumalli ja `OpenAiOfficialChatModel` genereerib põhjaliku vastuse:
-
+
-*See diagramm näitab, kuidas kõrgeima skooriga lõigud koostatakse struktureeritud küsimuseks, võimaldades mudelil genereerida kinnitatud vastuse teie andmetest.*
+*Selles diagrammis näidatakse, kuidas parima skooriga lõigud kogutakse struktureeritud päringusse, mis võimaldab mudelil teie andmetest põhjendatud vastust genereerida.*
-## Rakenduse Käivitamine
+## Rakenduse käivitamine
-**Kontrolli deployd:**
+**Kontrolli paigaldust:**
-Veendu, et `.env` fail asub juurkataloogis Azure'i mandaatidega (loodud moodulis 01). Käivita see mooduli kataloogist (`03-rag/`):
+Veendu, et juurkataloogis oleks olemas `.env` fail koos Azure volitustega (loodud moodulis 01). Käivita see mooduli kataloogist (`03-rag/`):
**Bash:**
```bash
-cat ../.env # Peaks näitama AZURE_OPENAI_ENDPOINT-i, API_KEY-d, DEPLOYMENT-i
+cat ../.env # Peaks näitama AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**PowerShell:**
```powershell
-Get-Content ..\.env # Tuleks näidata AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+Get-Content ..\.env # Peaks näitama AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**Alusta rakendust:**
-> **Märkus:** Kui alustasid juba kõigi rakendustega `./start-all.sh` abil juurkataloogist (nagu kirjeldatud moodulis 01), töötab see moodul juba pordil 8081. Võid alltoodud käsud vahele jätta ja minna otse http://localhost:8081.
+> **Märkus:** Kui oled juba käivitanud kõik rakendused käsuga `./start-all.sh` juurkataloogist (nagu moodulis 01 kirjeldatud), töötab see moodul juba pordil 8081. Võid allolevad käivitamiskäsud vahele jätta ja minna otse aadressile http://localhost:8081.
-**Valik 1: Spring Boot Dashboardi kasutamine (Soovitatav VS Code kasutajatele)**
+**Variant 1: Kasutades Spring Boot Dashboardi (Soovitatav VS Code kasutajatele)**
-Arenduscontainer sisaldab Spring Boot Dashboard laiendust, mis pakub visuaalset kasutajaliidest kõigi Spring Boot rakenduste haldamiseks. Leiad selle aktiivsusribalt VS Code vasakul pool (otsige Spring Boot ikooni).
+Arendus konteiner sisaldab Spring Boot Dashboard laiendust, mis pakub visuaalset liidest kõigi Spring Boot rakenduste haldamiseks. Selle leiad VS Code vasakult küljeribalt (otsi Spring Boot ikooni).
-Spring Boot Dashboardilt saad:
+Spring Boot Dashboardist saad:
- Näha kõiki tööruumis olevaid Spring Boot rakendusi
- Käivitada/peatada rakendusi ühe klikiga
- Vaadata rakenduse logisid reaalajas
-- Jälgida rakenduse olekut
+- Jälgida rakenduste olekut
-Lihtsalt kliki "rag" kõrval olevale play-nupule selle mooduli käivitamiseks või alusta korraga kõiki mudeleid.
+Lihtsalt klõpsa nupule "rag" kõrval, et käivitada see moodul või alusta korraga kõiki mooduleid.
-*See kuvatõmmis näitab Spring Boot Dashboardi VS Codes, kus saad visuaalselt rakendusi käivitada, peatada ja jälgida.*
+*Sellel ekraanipildil on näha Spring Boot Dashboard VS Codes, kus saad rakendusi visuaalselt käivitada, peatada ja jälgida.*
-**Valik 2: Shell skriptide kasutamine**
+**Variant 2: Kasutades käsurea skripte**
Käivita kõik veebirakendused (moodulid 01-04):
**Bash:**
```bash
-cd .. # Juure kataloogist
+cd .. # Juurekataloogist
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # Juurekataloogist
+cd .. # Juure kataloogist
.\start-all.ps1
```
-Või alusta ainult seda moodulit:
+Või käivita vaid see moodul:
**Bash:**
```bash
@@ -311,9 +308,9 @@ cd 03-rag
.\start.ps1
```
-Mõlemad skriptid laadivad automaatselt keskkonnamuutujaid juurpõhjast `.env` failist ja ehitavad JAR-id, kui need puuduvad.
+Mõlemad skriptid laadivad automaatselt keskkonnamuutujad juurkataloogist `.env` failist ning ehitavad JARid, kui neid pole veel olemas.
-> **Märkus:** Kui soovid enne käivitust kõik moodulid käsitsi ehitada:
+> **Märkus:** Kui soovid ehitada kõik moodulid käsitsi enne käivitamist:
>
> **Bash:**
> ```bash
@@ -345,95 +342,95 @@ cd .. && ./stop-all.sh # Kõik moodulid
cd ..; .\stop-all.ps1 # Kõik moodulid
```
-## Rakenduse Kasutamine
+## Rakenduse kasutamine
-Rakendus pakub veebiliidest dokumentide üleslaadimiseks ja küsimiseks.
+Rakendus pakub veebiliidest dokumentide üleslaadimiseks ja küsimuste esitamiseks.
-
+
-*See kuvatõmmis näitab RAG rakenduse kasutajaliidest, kus saad üles laadida dokumente ja esitada küsimusi.*
+*Sellel ekraanipildil on näha RAG rakenduse liides, kus saad dokumente üles laadida ja küsimusi esitada.*
### Dokumendi üleslaadimine
-Alusta dokumendi üleslaadimisest – testimisel sobivad kõige paremini TXT failid. Selle kataloogi on lisatud `sample-document.txt`, mis sisaldab infot LangChain4j omaduste, RAG implementatsiooni ja parimate tavade kohta – ideaalne süsteemi testimiseks.
+Alusta dokumendi üleslaadimisega — testimiseks sobivad kõige paremini TXT-failid. Selles kataloogis on olemas `sample-document.txt`, mis sisaldab infot LangChain4j omaduste, RAG rakenduse ja parimate tavade kohta — ideaalne süsteemi testimiseks.
-Süsteem töötleb su dokumendi, jagab selle lõikudeks ja loob iga lõigu jaoks manused. See toimub automaatselt kohe peale üleslaadimist.
+Süsteem töötleb sinu dokumendi, jagab selle lõikudeks ja loob igale lõigule manustused. See toimub automaatselt pärast üleslaadimist.
-### Küsimuste Esitamine
+### Küsi küsimusi
-Nüüd esita konkreetseid küsimusi dokumenti sisu kohta. Proovi faktilisi küsimusi, mis on dokumendis selgelt välja toodud. Süsteem otsib asjakohased lõigud, lisab need küsimuse konteksti ja genereerib vastuse.
+Esita nüüd dokumendi sisu kohta konkreetseid küsimusi. Proovi midagi faktilist, mis on dokumendis selgelt välja toodud. Süsteem otsib asjakohaseid lõike, lisab need päringusse ja genereerib vastuse.
-### Allika Viidete Kontrollimine
+### Kontrolli allikaviiteid
-Pange tähele, et iga vastus sisaldab allika viiteid koos sarnasuse skooridega. Need skoorid (0 kuni 1) näitavad, kui asjakohane iga lõik sinu küsimusega oli. Kõrgemad skoorid tähendavad paremaid vasteid. Sellega saad vastuse kontrollida allikmaterjali vastu.
+Pane tähele, et iga vastus sisaldab allikaviiteid koos sarnasusskooridega. Need skoorid (0 kuni 1) näitavad, kui asjakohane iga lõik oli sinu küsimusele. Kõrgemad skoorid tähendavad paremaid vasteid. See võimaldab sul vastuse võrrelda algallikaga.
-
+
-*See kuvatõmmis näitab päringu tulemusi koos genereeritud vastuse, allika viidete ja iga leitud lõigu asjakohasuse skooriga.*
+*Sellel ekraanipildil on näha päringu tulemused koos genereeritud vastuse, allikaviidete ja iga leitud lõigu asjakohasuskoori.*
-### Küsitlusega Katsetamine
+### Katseta küsimustega
Proovi erinevat tüüpi küsimusi:
-- Konkreetsed faktid: "Mis on peamine teema?"
+- Konkreetsed faktid: "Mis on põhiteema?"
- Võrdlused: "Mis vahe on X ja Y vahel?"
-- Kokkuvõtted: "Kokkuvõtke Z põhiteemad"
+- Kokkuvõtted: "Kokkuvõtte põhikohad Z kohta"
-Jälgi, kuidas asjakohasuse skoorid muutuvad vastavalt sellele, kui hästi su küsimus dokumenti sobib.
+Vaata, kuidas muutuvad asjakohasus skoorid vastavalt sellele, kui hästi sinu küsimus dokumendi sisuga sobib.
-## Põhimõisted
+## Olulised mõisted
-### Lõikude Jagamise Strateegia
+### Lõikude strateegia
-Dokumendid jagatakse 300 märgiga lõikudeks, millel on 30 märgiline kattuvus. See tasakaal tagab, et iga lõik sisaldab piisavalt konteksti, et olla tähenduslik, samas jäädes piisavalt väikeseks, et mahutada mitut lõiku ühte küsimusse.
+Dokumendid jagatakse 300-token'ilise pikkusega lõikudeks, kus on 30 tokeni kattuvust. See tasakaal tagab, et igal lõigul on piisavalt konteksti, et olla tähenduslik, kuid samas piisavalt väike, et mahtuda päringusse mitu lõiku.
-### Sarnasuse Skoorid
+### Sarnasusskoorid
-Iga leitud lõikuga tuleb kaasas sarnasuse skoor 0 kuni 1, mis näitab, kui lähedalt see kasutaja küsimusele vastab. Alljärgnev diagramm visualiseerib skooride vahemikke ja seda, kuidas süsteem neid tulemuste filtreerimiseks kasutab:
+Iga leitud lõik on varustatud sarnasusskooriga vahemikus 0 kuni 1, mis näitab kui hästi see kasutaja küsimusega vastab. Järgmine diagramm visualiseerib skooride vahemikke ja kuidas süsteem neid tulemuste filtreerimiseks kasutab:
-
+
-*See diagramm näitab skooride vahemikke 0 kuni 1, kus minimaalne lävi on 0.5, mis filtreerib välja asjakohatud lõigud.*
+*Selles diagrammis on näha skooride vahemikud 0 kuni 1, kus minimaalseks lävendiks on 0,5, mis filtreerib välja ebasobivad lõigud.*
-Skoorid jäävad vahemikku 0 kuni 1:
-- 0.7-1.0: Väga asjakohane, täpne vaste
-- 0.5-0.7: Asjakohane, hea kontekst
-- Alla 0.5: Filtreeritud välja, liiga erinev
+Skoorid on vahemikus 0 kuni 1:
+- 0,7–1,0: Väga asjakohane, täpne vaste
+- 0,5–0,7: Asjakohane, hea kontekst
+- Alla 0,5: Filtreeritud välja, liiga erinev
-Süsteem tagastab ainult lõigud, mis ületavad miinimalläve, et tagada kvaliteet.
+Süsteem otsib ainult lõikeid, mis ületavad minimaalse lävendi, kvaliteedi tagamiseks.
-Manused töötavad hästi, kui tähendused klastrites selged on, kuid neil on ka pimedad kohad. Järgnev diagramm näitab levinud ebaõnnestumise viise — liiga suured lõigud annavad ebaselged vektorid, liiga väikesed lõigud on kontekstist vaesed, mitmetähenduslikud terminid viitavad mitmele klastrile ja täpse vaste otsingud (ID-d, osanumber) ei tööta manustega sugugi:
+Manustused töötavad hästi selgete tähenduste rühmitamisel, kuid neil on ka kitsaskohad. Järgmine diagramm näitab levinud veaolukordi — liiga suured lõigud annavad uduseid vektoreid, liiga väikesed lõigud puuduvad konteksti, mitmetähenduslikud terminid viitavad mitmele rühmale ja täpsed otsingud (ID-d, osanumbrids) ei tööta manustustega üldse:
-
+
-*See diagramm näitab levinud manustamise ebaõnnestumise vorme: liiga suured lõigud, liiga väikesed lõigud, mitmetähenduslikud terminid, mis viitavad mitmele klastrile, ning täpsed vasteotsingud nagu ID-d.*
+*Selles diagrammis on näha levinumaid manustamise veaolukordi: liiga suured lõigud, liiga väikesed lõigud, mitmetähenduslikud terminid, mis viitavad mitmele rühmale, ja täpsed otsingud nagu ID-d.*
-### Mälu Põhine Andmesalvestus
+### Mälupõhine salvestus
-See moodul kasutab lihtsuse huvides mälusalvestust. Rakenduse taaskäivitamisel kaovad üles laaditud dokumendid. Tootmiskeskkonnas kasutatakse püsivaid vektorandmebaase nagu Qdrant või Azure AI Search.
+See moodul kasutab lihtsuse huvides mälus hoidmist. Rakenduse taaskäivitamisel kaovad üleslaaditud dokumendid. Tootmiskeskkonnas kasutatakse püsivaid vektorandmebaase nagu Qdrant või Azure AI Search.
-### Konteksti Akna Halduse
+### Konteksti akna haldamine
-Igal mudelil on maksimaalne konteksti aken. Sa ei saa lisada kõiki lõike väga suurest dokumendist. Süsteem tagastab kõige asjakohasemad N lõiku (vaikimisi 5), et jääda piiridesse, kuid pakkuda piisavalt konteksti täpsete vastuste jaoks.
+Igal mudelil on maksimaalne konteksti akna suurus. Suurtest dokumentidest ei saa kõiki lõike korraga lisada. Süsteem otsib üles parima N asjakohased lõigud (vaikimisi 5), et jääda piiridesse, pakkudes samas piisavalt konteksti täpsete vastuste andmiseks.
-## Millal RAG Loeb
+## Millal RAG on oluline
-RAG ei ole alati õige lahendus. Järgmine otsustusjuhend aitab sul otsustada, millal RAG lisab väärtust võrreldes lihtsamate lähenemisviisidega — nagu sisu otse küsimusse lisamine või mudeli sisseehitatud teadmiste kasutamine:
+RAG ei ole alati parim lahendus. Järgmine otsusjuht aitab määrata, millal RAG lisab väärtust ja millal lihtsamad lahendused — nagu sisu otse päringusse lisamine või mudeli sisseehitatud teadmiste kasutamine — on piisavad:
-
+
-*See diagramm näitab otsustusjuhendit, millal RAG lisab väärtust ja millal piisavad lihtsamad lähenemised.*
+*Selles diagrammis on otsustustugi, mis näitab, millal RAG lisab väärtust ja millal lihtsamad lahendused on piisavad.*
-## Järgmised Sammud
+## Järgmised sammud
-**Järgmine moodul:** [04-tools - Tehisintellekti agendid tööriistadega](../04-tools/README.md)
+**Järgmine moodul:** [04-tools - AI Agents with Tools](../04-tools/README.md)
---
-**Navigeerimine:** [← Eelmine: Moodul 02 - Küsitluste inseneritöö](../02-prompt-engineering/README.md) | [Tagasi Avalehile](../README.md) | [Järgmine: Moodul 04 - Tööriistad →](../04-tools/README.md)
+**Navigeerimine:** [← Eelmine: Moodul 02 - Päringute konstrueerimine](../02-prompt-engineering/README.md) | [Tagasi avalehele](../README.md) | [Järgmine: Moodul 04 - Tööriistad →](../04-tools/README.md)
---
-**Vastutusest loobumine**:
-See dokument on tõlgitud kasutades tehisintellektil põhinevat tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi püüdleme täpsuse poole, palun pange tähele, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algset dokumenti selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalse inimtõlke teenust. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või väärinterpreteerimiste eest.
+**Lahtiütlus**:
+See dokument on tõlgitud kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi me püüdleme täpsuse poole, palun pange tähele, et automatiseeritud tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud eksimustest või valesti mõistmistest.
\ No newline at end of file
diff --git a/translations/et/04-tools/README.md b/translations/et/04-tools/README.md
index 19e482e3f..c31c7d945 100644
--- a/translations/et/04-tools/README.md
+++ b/translations/et/04-tools/README.md
@@ -1,84 +1,84 @@
-# Moodul 04: Tehisintellekti agendid tööriistadega
+# Moodul 04: AI Agendid tööriistadega
## Sisukord
-- [Video juhend](../../../04-tools)
-- [Mida õpite](../../../04-tools)
-- [Eeldused](../../../04-tools)
-- [Tehisintellekti agentide mõistmine tööriistadega](../../../04-tools)
-- [Kuidas tööriistakutse töötab](../../../04-tools)
- - [Tööriistade definitsioonid](../../../04-tools)
- - [Otsuste tegemine](../../../04-tools)
- - [Täideviimine](../../../04-tools)
- - [Vastusvõime genereerimine](../../../04-tools)
- - [Arhitektuur: Spring Boot automaatühendus](../../../04-tools)
-- [Tööriistade aheldamine](../../../04-tools)
-- [Rakenduse käivitamine](../../../04-tools)
-- [Rakenduse kasutamine](../../../04-tools)
- - [Proovi lihtsat tööriista kasutust](../../../04-tools)
- - [Testi tööriistade aheldamist](../../../04-tools)
- - [Vaata vestluse kulgu](../../../04-tools)
- - [Katseta erinevate päringutega](../../../04-tools)
-- [Põhikontseptsioonid](../../../04-tools)
- - [ReAct muster (põhjendamine ja tegutsemine)](../../../04-tools)
- - [Tööriistade kirjeldused on olulised](../../../04-tools)
- - [Seansi haldus](../../../04-tools)
- - [Veadega toimetulek](../../../04-tools)
-- [Saadaval olevad tööriistad](../../../04-tools)
-- [Millal kasutada tööriistapõhiseid agente](../../../04-tools)
-- [Tööriistad vs RAG](../../../04-tools)
-- [Järgmised sammud](../../../04-tools)
-
-## Video juhend
-
-Vaadake seda otseülekannet, mis selgitab, kuidas selle mooduliga alustada:
+- [Video Juhend](#video-juhend)
+- [Mida Sa Õpid](#mida-sa-õpid)
+- [Eeltingimused](#eeltingimused)
+- [AI Agentide Mõistmine Tööriistadega](#ai-agentide-mõistmine-tööriistadega)
+- [Kuidas Tööriista Kutsumine Töötab](#kuidas-tööriista-kutsumine-töötab)
+ - [Tööriistade Definitsioonid](#tööriistade-definitsioonid)
+ - [Otsuste Tegemine](#otsuste-tegemine)
+ - [Täideviimine](#täideviimine)
+ - [Vastuse Genereerimine](#vastuse-genereerimine)
+ - [Arhitektuur: Spring Boot Automaatühendus](#arhitektuur-spring-boot-automaatühendus)
+- [Tööriistade Järgnevus](#tööriistade-järgnevus)
+- [Rakenduse Käivitamine](#rakenduse-käivitamine)
+- [Rakenduse Kasutamine](#rakenduse-kasutamine)
+ - [Proovi Lihtsat Tööriista Kasutust](#proovi-lihtsat-tööriista-kasutust)
+ - [Testi Tööriistade Järgnevust](#testi-tööriistade-ahelat)
+ - [Vaata Vestluse Voogu](#vaata-vestluse-voogu)
+ - [Katseta Erinevate Päringutega](#katseta-erinevate-päringutega)
+- [Olulised Mõisted](#peamised-kontseptsioonid)
+ - [ReAct Muster (Põhjendamine ja Tegutsemine)](#react-muster-põhjus-ja-tegutsemine)
+ - [Tööriistade Kirjeldused on Tähtsad](#tööriistade-kirjeldused-on-tähtsad)
+ - [Sessioonihaldus](#sessiooni-haldus)
+ - [Vigade Käitlemine](#veahaldus)
+- [Saadaval Tööriistad](#saadaval-olevad-tööriistad)
+- [Millal Kasutada Tööriistapõhiseid Agente](#millal-kasutada-tööriistapõhiseid-agente)
+- [Tööriistad vs RAG](#tööriistad-vs-rag)
+- [Järgmised Sammud](#järgmised-sammud)
+
+## Video Juhend
+
+Vaata seda otseülekannet, mis selgitab, kuidas selle mooduliga alustada:
-## Mida õpite
+## Mida Sa Õpid
-Seni olete õppinud, kuidas tehisintellektiga vestelda, vormistada päringuid efektiivselt ning siduda vastuseid oma dokumentidega. Kuid on olemas põhiepitsus: keelemudelid suudavad genereerida ainult teksti. Nad ei saa ilma abiliste ja tööriistadeta ilmaennustust kontrollida, arvutusi teha, andmebaase pärida ega välissüsteemidega suhelda.
+Nii kaugele oled õppinud, kuidas pidada vestlusi AI-ga, struktureerida tõhusaid prompt’e ja põhendada vastuseid oma dokumentides. Kuid on endiselt põhimõtteline piirang: keelemudelid saavad vaid teksti genereerida. Nad ei saa ilmaennustust teha, arvutusi lahendada, andmebaase pärida ega suhelda väliste süsteemidega.
-Tööriistad muudavad selle. Kui mudelile anda võimalus kutsuda funktsioone, muudate temast tekstigeneraatori asemel agendi, kes saab tegutseda. Mudel otsustab, millal tal tööriista vaja on, millist tööriista kasutada ja milliseid parameetreid edasi anda. Teie kood täidab funktsiooni ja tagastab tulemuse. Mudel integreerib selle tulemuse oma vastusesse.
+Tööriistad muudavad selle. Anda mudelile juurdepääs funktsioonidele, mida ta saab kutsuda, muudab selle tekstigeneraatorist agendiks, kes suudab tegutseda. Mudel otsustab, millal tal on vaja tööriista, millist tööriista kasutada ja milliseid parameetreid edastada. Sinu kood täidab funktsiooni ja tagastab tulemuse. Mudel kasutab seda tulemust oma vastuses.
-## Eeldused
+## Eeltingimused
-- On läbitud [Moodul 01 - Sissejuhatus](../01-introduction/README.md) (Azure OpenAI ressursid paigaldatud)
-- Soovitatavalt on läbitud varasemad moodulid (see moodul viitab [RAG kontseptsioonidele Moodulis 03](../03-rag/README.md) tööriistade ja RAG võrdluses)
-- Juurkausta `.env` fail Azure volitustega (loodud `azd up` käsuga Moodul 01 jooksul)
+- Läbitud [Moodul 01 - Sissejuhatus](../01-introduction/README.md) (Azure OpenAI ressursid juurutatud)
+- Soovitatavalt läbitud varasemad moodulid (see moodul viitab [RAG kontseptsioonidele Moodulis 03](../03-rag/README.md) Tööriistade vs RAG võrdluses)
+- Juurekataloogis asuv `.env` fail Azure volitustega (loodud `azd up` abil Moodulis 01)
-> **Märkus:** Kui te pole Moodulit 01 läbinud, järgige esmalt seal olevaid juurutusjuhiseid.
+> **Märkus:** Kui sa pole veel Moodulit 01 läbinud, järgi esmalt seal olevaid juurutusjuhiseid.
-## Tehisintellekti agentide mõistmine tööriistadega
+## AI Agentide Mõistmine Tööriistadega
-> **📝 Märkus:** Selles moodulis tähendab "agentide" all tehisintellektipõhiseid abistajaid, kellel on tööriistakutsete võimekus. See erineb **Agentic AI** mustritest (iseseisvad agendid planeerimise, mälu ja mitmeastmelise mõtlemisega), mida käsitleme [Moodulis 05: MCP](../05-mcp/README.md).
+> **📝 Märkus:** Selles moodulis viitab mõiste "agendid" AI assistentidele, millel on tööriista kutsumise võimekus. See erineb **Agentic AI** mustritest (autonoomsed agendid planeerimise, mälu ja mitmeastmelise põhjendamisega), mida käsitleme [Moodulis 05: MCP](../05-mcp/README.md).
-Ilma tööriistadeta suudab keelemudel genereerida teksti ainult oma treeningandmete põhjal. Küsi temalt ilmateadet ja ta peab arvama. Kui anda tööriistad, saab ta kutsuda ilma API-t, teha arvutusi või pärida andmebaasi — ning neid tegelikke tulemusi oma vastusesse kanda.
+Ilma tööriistadeta saab keelemudel ainult oma treeningandmetest teksti genereerida. Küsi ilmakaarti ja ta peab aimama. Anna talle tööriistad ja ta saab kutsuda ilma API, teha arvutusi või andmebaasi päringuid — ning põimida need reaalsete tulemused oma vastusesse.
-
+
-*Ilma tööriistadeta mudel ainult arvab — tööriistadega saab ta kutsuda API-sid, teha arvutusi ja tagastada reaalajas andmeid.*
+*Ilma tööriistadeta saab mudel ainult oletada — tööriistadega saab ta kutsuda API-sid, teha arvutusi ja tagastada reaalajas andmeid.*
-Tehisintellekti agent tööriistadega järgib **Reasoning and Acting (ReAct)** mustrit. Mudel ei vastagi lihtsalt — ta mõtleb, mida vajab, kutsub tööriista, jälgib tulemust ning otsustab siis, kas tegutseda edasi või anda lõplik vastus:
+AI agent tööriistadega järgib **Põhjendamise ja Tegutsemise (ReAct)** mustrit. Mudel ei vasta lihtsalt — ta mõtleb, mida vajab, tegutseb tööriista kutsumisega, jälgib tulemust ja otsustab, kas tegutseda uuesti või anda lõplik vastus:
-1. **Põhjenda** — Agent analüüsib kasutaja küsimust ja tuvastab vajaliku info
-2. **Tegu** — Agent valib õige tööriista, genereerib korrektseid parameetreid ja kutsub selle
-3. **Jälgi** — Agent saab tööriista väljundi ja hindab tulemust
-4. **Korda või vasta** — Kui vaja on rohkem andmeid, kordab agent tsüklit; vastasel juhul koostab loomuliku keele vastuse
+1. **Põhjenda** — Agent analüüsib kasutaja küsimust ja määrab vajaliku info
+2. **Tegutse** — Agent valib sobiva tööriista, genereerib õiged parameetrid ja kutsub selle
+3. **Vaatle** — Agent saab tööriista väljundi ja hindab tulemust
+4. **Korda või Vasta** — Kui vaja rohkem andmeid, kordab agent tsüklit; muidu koostab loomuliku keele vastuse
-
+
-*ReAct tsükkel — agent põhjendab, mida teha, kutsub tööriista, jälgib tulemust ja kordab, kuni suudab anda lõpliku vastuse.*
+*ReAct tsükkel — agent põhjendab, mida teha, tegutseb tööriista kutsumisega, vaatleb tulemust ja kordab kuni lõpliku vastuse esitamiseni.*
-See toimub automaatselt. Te ise määratlete tööriistad ja nende kirjeldused. Mudel teeb otsuse, millal ja kuidas neid kasutada.
+See toimub automaatselt. Sa defineerid tööriistad ja nende kirjeldused. Mudel haldab otsustamist, millal ja kuidas neid kasutada.
-## Kuidas tööriistakutse töötab
+## Kuidas Tööriista Kutsumine Töötab
-### Tööriistade definitsioonid
+### Tööriistade Definitsioonid
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-Te määratlete funktsioonid selgete kirjelduste ja parameetrispetsifikatsioonidega. Mudel näeb neid kirjeldusi oma süsteemi promptis ja mõistab, mida iga tööriist teeb.
+Sa defineerid funktsioonid selgete kirjelduste ja parameetrite spetsifikatsioonidega. Mudel näeb neid kirjeldusi oma süsteemipromptis ja mõistab, mida iga tööriist teeb.
```java
@Component
@@ -86,7 +86,7 @@ public class WeatherTool {
@Tool("Get the current weather for a location")
public String getCurrentWeather(@P("Location name") String location) {
- // Teie ilmaotsingu loogika
+ // Teie ilmainfo päringu loogika
return "Weather in " + location + ": 22°C, cloudy";
}
}
@@ -96,153 +96,153 @@ public interface Assistant {
String chat(@MemoryId String sessionId, @UserMessage String message);
}
-// Assistent on Spring Booti poolt automaatselt ühendatud järgmistega:
-// - ChatModel komponent
+// Abi on Spring Booti poolt automaatselt ühendatud järgmistega:
+// - ChatModel bean
// - Kõik @Tool meetodid @Component klassidest
-// - ChatMemoryProvider sessioonihalduseks
+// - ChatMemoryProvider sessiooni haldamiseks
```
-Järgmine diagramm lahtiseletab iga annotatsiooni ja näitab, kuidas iga osa aitab tehisintellektil mõista, millal tööriista kutsuda ja milliseid argumente edasi anda:
+Järgmine skeem lahti seletab iga annotatsiooni ja näitab, kuidas iga osa aitab tehisintellektil mõista, millal tööriista kutsuda ja milliseid argumente edastada:
-
+
-*Tööriista definitsiooni anatoomia — @Tool ütleb AI-le, millal seda kasutada, @P kirjeldab iga parameetrit ning @AiService ühendab kõik käivitamisel.*
+*Tööriistade definitsiooni anatoomia — @Tool ütleb tehisintellektile, millal seda kasutada, @P kirjeldab iga parameetrit ja @AiService ühendab kõik käivitamisel.*
-> **🤖 Proovi koos [GitHub Copilot](https://github.com/features/copilot) Chatiga:** Ava [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) ja küsi:
-> - "Kuidas integreerida päris ilma API nagu OpenWeatherMap, mitte tehisandmeid?"
-> - "Mis on hea tööriistakirjelduse omadused, mis aitavad AI-l seda korrektselt kasutada?"
-> - "Kuidas käidelda API-vigu ja piiranguid tööriistade rakendamisel?"
+> **🤖 Proovi [GitHub Copilot](https://github.com/features/copilot) Chat’iga:** Ava [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) ja küsi:
+> - "Kuidas integreerida päris ilma API nagu OpenWeatherMap simuleeritud andmete asemel?"
+> - "Mis teeb tööriista kirjelduse heaks ja aitab AI kasutamisel seda õigesti kasutada?"
+> - "Kuidas käsitleda API vigu ja päringu piire tööriista rakendustes?"
-### Otsuste tegemine
+### Otsuste Tegemine
-Kui kasutaja küsib: "Milline on ilm Seattle'is?", ei vali mudel tööriista juhuslikult. Ta võrdleb kasutaja kavatsust iga tööriista kirjeldusega, hindab iga relevantsust ja valib parima vaste. Ta genereerib struktureeritud funktsioonikutse õigetel parameetritel — antud juhul seatakse `location` väärtuseks `"Seattle"`.
+Kui kasutaja küsib "Milline on ilm Seattle’is?", ei vali mudel tööriista juhuslikult. Ta võrdleb kasutaja tahet kõigi tema käsutuses olevate tööriistade kirjeldustega, hinde igaüht asjakohasuse põhjal ja valib parima vaste. Seejärel genereerib struktureeritud funktsiooni kutsumise õigete parameetritega — antud juhul seab `location` väärtuseks `"Seattle"`.
-Kui ükski tööriist ei sobi kasutaja päringuga, vastab mudel oma teadmiste põhjal. Kui sobivaid tööriistu on mitu, valib kõige spetsiifilisema.
+Kui ükski tööriist ei vasta kasutaja päringule, vastab mudel oma teadmiste põhjal. Kui sobivaid tööriistu on mitu, valib kõige spetsiifilisema.
-
+
-*Mudel hindab iga saadavaloleva tööriista kasutaja kavatsuse vastu ja valib parima sobivuse — seepärast on oluline kirjutada selge ja konkreetne tööriistakirjeldus.*
+*Mudel hindab kõiki olemasolevaid tööriistu kasutaja eesmärgiga ja valib parima sobivuse — sellepärast on selgete ja spetsiifiliste tööriistakirjelduste kirjutamine oluline.*
### Täideviimine
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-Spring Boot ühendab automaatselt deklaratiivse `@AiService` liidese kõigi registreeritud tööriistadega ning LangChain4j täidab tööriistakutsed automaatselt. Tagatipuks voolab komplektne tööriistakutse kuue etapi kaudu — kasutaja loomulikust keeles küsimusest tagasi loomuliku keele vastuseni:
+Spring Boot ühendab deklaratiivse `@AiService` liidese kõigi registreeritud tööriistadega automaatselt ning LangChain4j täidab tööriistakutsed ise. Tagaplaanil kulgeb täiesti tööriistakutse kuue faasiga — kasutaja loomuliku keele küsimusest loodusesse vastuseni tagasi:
-
+
-*Täielik voog — kasutaja esitab küsimuse, mudel valib tööriista, LangChain4j täidab selle ja mudel lõimib tulemuse loomulikuks vastuseks.*
+*Algusest lõpuni voog — kasutaja esitab küsimuse, mudel valib tööriista, LangChain4j täidab selle ja mudel põimib tulemuse loomulikku vastusesse.*
-Kui käivitasite [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) Moodulis 00, nägite seda mustrit töös — `Calculator` tööriistad kutsuti täpselt samamoodi. Järgmine järjestusdiagramm näitab täpselt, mis sel ajal toimus:
+Tagaplaanil käivitab `AiServices` sama tööriistakutsete tsükli iga tööriista jaoks — siin lihtsustatud `Calculatori` näitel. Allolev järjestusdiagramm näitab täpselt, mis toimub allapoole vooludes:
-
+
-*Tööriistakutse tsükkel Quick Start demos — `AiServices` saadab teie sõnumi ja tööriistade skeemid LLM-ile, LLM vastab funktsioonikutsega nagu `add(42, 58)`, LangChain4j täidab kohapeal `Calculator` meetodi ja tagastab tulemuse lõplikuks vastuseks.*
+*Tööriistakutse tsükkel — `AiServices` saadab su sõnumi ja tööriistaskemad LLM-ile, LLM vastab funktsioonikutsena nagu `add(42, 58)`, LangChain4j täidab kohalikult `Calculator` meetodi ja tagastab tulemuse lõpliku vastuse jaoks.*
-> **🤖 Proovi koos [GitHub Copilot](https://github.com/features/copilot) Chatiga:** Ava [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) ja küsi:
-> - "Kuidas ReAct muster toimib ja miks on see tehisintellekti agentidele efektiivne?"
-> - "Kuidas agent otsustab, millist tööriista kasutada ja millises järjekorras?"
-> - "Mis juhtub, kui tööriista täideviimine ebaõnnestub - kuidas vigadega kindlalt toime tulla?"
+> **🤖 Proovi [GitHub Copilot](https://github.com/features/copilot) Chat’iga:** Ava [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) ja küsi:
+> - "Kuidas töötab ReAct muster ja miks see on AI agentide puhul tõhus?"
+> - "Kuidas agent otsustab, millist tööriista kasutada ja mis järjekorras?"
+> - "Mis juhtub, kui tööriista täideviimine ebaõnnestub - kuidas käsitleda vigu kindlalt?"
-### Vastuse genereerimine
+### Vastuse Genereerimine
-Mudel saab ilmateabe ja vormindab selle kasutajale loomulikus keeles vastuseks.
+Mudel saab ilmaandmed ja vormistab need loomulikus keeles vastuseks kasutajale.
-### Arhitektuur: Spring Boot automaatühendus
+### Arhitektuur: Spring Boot Automaatühendus
-See moodul kasutab LangChain4j Spring Boot integreerimist deklaratiivsete `@AiService` liidestega. Käivitamisel leiab Spring Boot kõik `@Component`-id, mis sisaldavad `@Tool` meetodeid, teie `ChatModel` beani ja `ChatMemoryProvider` — ning ühendab need kõik ühte `Assistant` liidesesse ilma täiendava koodita.
+Selles moodulis kasutatakse LangChain4j Spring Boot integratsiooni deklaratiivsete `@AiService` liidestega. Käivitamisel avastab Spring Boot iga `@Component`, mis sisaldab `@Tool` meetodeid, sinu `ChatModel` bean’i ja `ChatMemoryProvider` — ning ühendab kõik üheks `Assistant` liideseks nullkoodita.
-
+
-*@AiService liides ühendab ChatModeli, tööriista komponendid ja mälupakkuja — Spring Boot haldab automaatselt kogu ühenduse.*
+*@AiService liides ühendab kokku ChatModel’i, tööriistakomponendid ja mälu pakkuja — Spring Boot haldab kogu ühenduse automaatselt.*
-Järgnevalt on kogu päringu elutsükkel järjestusdiagrammina — HTTP päringust kontrolleri, teenuse ja automaatselt ühendatud proksi kaudu tööriistakutse täideviimiseni ja tagasi:
+Siin on kogu päringu elutsükkel järjestusdiagrammina — HTTP päringust kontrolleri, teenuse ja automaatühendatud proksi kaudu tööriistakutseni ja tagasi:
-
+
-*Täielik Spring Boot päringu elutsükkel — HTTP päring voolab läbi kontrolleri ja teenuse automaatselt ühendatud Assistant proksisse, kes orkestreerib LLM-i ja tööriistakutsed iseseisvalt.*
+*Täielik Spring Boot päringu elutsükkel — HTTP päring voolab läbi kontrolleri ja teenuse automaatselt ühendatud Assistant proksi juurde, mis korraldab LLM ja tööriistakutsed iseseisvalt.*
Selle lähenemise peamised eelised:
- **Spring Boot automaatühendus** — ChatModel ja tööriistad süstitakse automaatselt
-- **@MemoryId muster** — Automaatne seansipõhine mälu haldus
-- **Üks instants** — Assistant luuakse korra ja kasutatakse uuesti parema jõudluse jaoks
-- **Tüübiturvaline täideviimine** — Java meetodid kutsutakse otse tüübi teisendusega
-- **Mitme sammuga orkestreerimine** — Haldbab tööriistade aheldamist automaatselt
-- **Null täiendavat koodi** — Ei ole vaja käsitsi kutsuda `AiServices.builder()` või mälu HashMapi
+- **@MemoryId muster** — Automaatne sessioonipõhine mäluhaldus
+- **Üks eksemplar** — Assistant loodud korra ja korduvkasutatud paremaks jõudluseks
+- **Tüübikindel täideviimine** — Java meetodid kutsutakse otse koos tüübi konverteerimisega
+- **Mitme sammuga korraldus** — Haldab tööriistade ühendamist automaatselt
+- **Nullkood** — Ei ole vaja käsitsi `AiServices.builder()` kutsumisi ega mäluhaldus HashMap’i
-Alternatiivsed lähenemised (käsitsi `AiServices.builder()`) vajavad rohkem koodi ja jäävad ilma Spring Boot integratsiooni eelistest.
+Alternatiivsed käsitletavad lähenemised (käsitsi `AiServices.builder()`) vajavad rohkem koodi ja jäävad ilma Spring Boot integratsiooni eelistest.
-## Tööriistade aheldamine
+## Tööriistade Järgnevus
-**Tööriistade aheldamine** — Tööriistapõhiste agentide tõeline võimsus tuleb ilmsiks siis, kui üks küsimus vajab mitut tööriista. Küsi: "Milline on Seattle'i ilm Fahrenheitides?" ja agent aheldab automaatselt kaks tööriista: esmalt kutsub `getCurrentWeather`, et saada temperatuur Celsiuses, seejärel edastab selle väärtuse `celsiusToFahrenheit` konverteerimiseks — kõik ühe vestluse jooksul.
+**Tööriistade Järgnevus** — Tööriistapõhiste agentide tõeline jõud avaldub siis, kui üks küsimus nõuab mitut tööriista. Küsi "Milline on ilm Seattle’is Fahrenheitides?" ja agent ühendab automaatselt kaks tööriista: esmalt kutsub `getCurrentWeather`, et saada temperatuur Celsiuses, seejärel annab selle tulemuse `celsiusToFahrenheit`-ile ümberarvestamiseks — kõik ühes vestluse sammus.
-
+
-*Tööriistade aheldamine töös — agent kutsub esmalt getCurrentWeather, seejärel suunab Celsiuse tulemuse celsiusToFahrenheit-i ja annab kokkuvõtva vastuse.*
+*Tööriistade järgnevus tegevuses — agent kutsub esmalt getCurrentWeather, siis suunab Celsiuse tulemuse celsiusToFahrenheit-i ja annab kokkuvõtliku vastuse.*
-**Viisakas vigade käsitlemine** — Küsi ilma linna kohta, mis ei ole tehisandmetes. Tööriist tagastab veateate ning tehisintellekt seletab, et ei saa aidata, selle asemel et kokku jooksu teha. Tööriistad ebaõnnestuvad turvaliselt. Järgmine diagramm võrdleb kahte lähenemist — korraliku vigade käitlemisega agent tabab erandi ja vastab abivalmilt, ilma selleta kukub kogu rakendus kokku:
+**Vigade Maaratlus** — Küsi ilma kohta linnast, mis pole simulatsioonandmetes. Tööriist tagastab veateate ja AI selgitab, et ei saa aidata, selle asemel et rike tekiks. Tööriistad ebaõnnestuvad turvaliselt. Järgmine skeem võrdleb kahte lähenemist — korraliku veahaldusega püüab agent vea kinni ja vastab abistavalt, ilma selleta kukub kogu rakendus kokku:
-
+
-*Kui tööriist ebaõnnestub, tabab agent vea ja vastab abivalmilt, selle asemel et rakendus kokku jookseks.*
+*Kui tööriist ebaõnnestub, püüab agent vea kinni ja vastab kasuliku selgitusega selle asemel, et kokku kukkuda.*
-See juhtub ühe vestlusvooru jooksul. Agent orkestreerib automaatselt mitut tööriistakutset.
+See kõik toimub ühes vestluse sammus. Agent korraldab mitmeid tööriistakutseid iseseisvalt.
-## Rakenduse käivitamine
+## Rakenduse Käivitamine
-**Kontrollige juurutust:**
+**Kontrolli juurutust:**
-Veenduge, et juurkaustas on olemas `.env` fail Azure volitustega (loodud Moodulis 01). Käivitage see mooduli kaustast (`04-tools/`):
+Veendu, et juurekataloogis on `.env` fail Azure volitustega (loodud Moodulis 01). Käivita see moodulikaustast (`04-tools/`):
-**Bash:**
+**Bash:**
```bash
cat ../.env # Peaks näitama AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
Get-Content ..\.env # Peaks näitama AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
+
**Rakenduse käivitamine:**
-> **Märkus:** Kui olete juba käivitanud kõik rakendused käsuga `./start-all.sh` juurkaustast (nagu kirjeldatud Moodulis 01), töötab see moodul porti 8084. Võite käivituskäsklused vahele jätta ja minna otse aadressile http://localhost:8084.
+> **Märkus:** Kui sa oled juba käivitanud kõik rakendused käsuga `./start-all.sh` juurest (nagu kirjeldatud Moodulis 01), siis see moodul juba töötab pordil 8084. Võid käivitamiskäsud vahele jätta ja minna otse aadressile http://localhost:8084.
-**Variant 1: Spring Boot Dashboardi kasutamine (soovitatav VS Code kasutajatele)**
+**Variant 1: Kasutades Spring Boot Dashboard’i (Soovitatav VS Code kasutajatele)**
-Arenduskonteiner sisaldab Spring Boot Dashboard laiendust, mis pakub visuaalset liidest kõigi Spring Boot rakenduste haldamiseks. Leiate selle VS Code’i vasakpoolse tööriistariba ikoonilt, otsides Spring Boot ikooni.
+Arenduskonteiner sisaldab Spring Boot Dashboard laiendust, mis pakub visuaalset liidest kõigi Spring Boot rakenduste haldamiseks. Sa leiad selle VS Code vasakpoolsest Activity Bar’ist (otsi Spring Boot ikooni).
-Spring Boot Dashboardi kaudu saate:
-- Näha kõiki tööruumis olevaid Spring Boot rakendusi
-- Käivitada/peatada rakendusi ühe klõpsuga
-- Vaadata rakenduste logisid reaalajas
+Spring Boot Dashboard’i abil saad:
+- Näha kõiki töölaua Spring Boot rakendusi
+- Käivitada/peatada rakendusi ühe klikiga
+- Vaadata rakenduse logisid reaalajas
- Jälgida rakenduse olekut
-Lihtsalt klõpsake selle mooduli käivitamiseks nupu "tools" kõrval olevat esitamisnuppu või käivitage kõik moodulid korraga.
-Siin on, kuidas Spring Boot Dashboard VS Code'is välja näeb:
+Lihtsalt klõpsa "tools" kõrval olevat play nuppu, et käivitada see moodul, või alusta korraga kõiki mooduleid.
-
+Siin on, kuidas Spring Boot Dashboard VS Code’is välja näeb:
+
-*Spring Boot Dashboard VS Code'is — käivitage, peatage ja jälgige kõiki mooduleid ühest kohast*
+*Spring Boot Tööriistalaud VS Code’is — alusta, peata ja jälgi kõiki mooduleid ühest kohast*
-**Valik 2: Shell-skriptide kasutamine**
+**Variant 2: Shell-i skriptide kasutamine**
-Käivitage kõik veebirakendused (moodulid 01-04):
+Alusta kõiki veebirakendusi (moodulid 01-04):
**Bash:**
```bash
-cd .. # Juurekataloogist
+cd .. # Juurkaustast
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # Juurestikust
+cd .. # Põhijuurkataloogist
.\start-all.ps1
```
-Või käivitage ainult see moodul:
+Või alusta ainult seda moodulit:
**Bash:**
```bash
@@ -256,9 +256,9 @@ cd 04-tools
.\start.ps1
```
-Mõlemad skriptid laadivad automaatselt keskkonnamuutujad juurkataloogis asuvast `.env` failist ning ehitavad JAR-id, kui neid ei eksisteeri.
+Mõlemad skriptid laadivad automaatselt keskkonnamuutujad juurest `.env` failist ja ehitavad JAR-id, kui neid veel ei ole.
-> **Märkus:** Kui soovite enne käivitamist kõik moodulid käsitsi ehitada:
+> **Märkus:** Kui soovid enne käivitamist kõik moodulid käsitsi ehitada:
>
> **Bash:**
> ```bash
@@ -272,7 +272,7 @@ Mõlemad skriptid laadivad automaatselt keskkonnamuutujad juurkataloogis asuvast
> mvn clean package -DskipTests
> ```
-Avage oma brauseris aadress .
+Ava oma brauseris aadress http://localhost:8084.
**Peatamiseks:**
@@ -292,96 +292,96 @@ cd ..; .\stop-all.ps1 # Kõik moodulid
## Rakenduse kasutamine
-Rakendus pakub veebiliidest, kus saate suhelda AI agendiga, kellel on juurdepääs ilma- ja temperatuuri teisendamise tööriistadele. Siin on liides — sisaldab kiire algusega näiteid ja vestluspaneeli päringute saatmiseks:
+Rakendus pakub veebiliidest, kus saad suhelda AI-agentiga, kellel on ligipääs ilma- ja temperatuuri teisendamise tööriistadele. Näiteks näeb kasutajaliides välja selline — sisaldab kiirstart näiteid ja vestluse paneeli päringute saatmiseks:
-
+
-*AI Agent Tools liides – kiireid näiteid ja vestlusliides tööriistadega suhtlemiseks*
+*AI Agendi Tööriistade liides - kiirnäited ja vestlusliides tööriistadega suhtlemiseks*
### Proovi lihtsat tööriista kasutust
-Alusta lihtsast päringust: "Convert 100 degrees Fahrenheit to Celsius". Agent tuvastab, et tal on vaja temperatuuri teisendamise tööriista, kutsub selle õige parameetritega ja tagastab tulemuse. Märka, kui loomulik see on – sa ei pidanud täpsustama, millist tööriista kasutada või kuidas seda kutsuda.
+Alusta lihtsast päringust: "Teisenda 100 kraadi Fahrenheitist Celsiuseks". Agent mõistab, et tal on vaja temperatuuri teisendamise tööriista, kutsub seda õigete parameetritega ja tagastab tulemuse. Pane tähele, kui loomulik see on - sa ei pidanud täpsustama, millist tööriista kasutada või kuidas seda kutsuda.
### Testi tööriistade ahelat
-Proovi nüüd keerulisemat: "What's the weather in Seattle and convert it to Fahrenheit?" Vaata, kuidas agent samm-sammult töötab. Esiteks hangib ta ilma (mis tagastab Celsius), tunneb ära vajaduse teisendada Fahrenheitiks, kutsub teisendusvahendi ja ühendab mõlemad tulemused ühe vastusena.
+Proovi midagi keerukamat: "Milline on ilm Seattle’is ja teisenda see Fahrenheitiks?" Vaatle, kuidas agent samm-sammult töötab. Ta võtab esmalt ilmateate (mis tagastab Celsiuse kraadid), mõistab, et peab teisendama Fahrenheitiks, kutsub teisendustööriista ja ühendab mõlemad tulemused ühte vastusesse.
-### Vaata vestluse kulgu
+### Vaata vestluse voogu
-Vestlusliides säilitab vestluse ajaloo, võimaldades mitmevoorulist suhtlust. Näed kõiki varasemaid päringuid ja vastuseid, mis hõlbustab vestluse jälgimist ja mõistmist, kuidas agent ehitab konteksti mitme vahetuse jooksul.
+Vestlusliides hoiab vestluste ajalugu, võimaldades mitmetoalisi dialooge. Sa näed kõiki eelnevaid päringuid ja vastuseid, mis teeb kergeks vestluse jälgimise ja mõistmise, kuidas agent konteksti mitme vahetusega üles ehitab.
-
+
-*Mitmevooruline vestlus, mis näitab lihtsaid teisendusi, ilmapäringuid ja tööriistade ahelat*
+*Mitme vooruga vestlus, mis näitab lihtsaid teisendusi, ilmateateid ja tööriistade ahelat*
-### Katseta erinevaid päringuid
+### Katseta erinevate päringutega
Proovi erinevaid kombinatsioone:
-- Ilmapäringud: "What's the weather in Tokyo?"
-- Temperatuuri teisendused: "What is 25°C in Kelvin?"
-- Ühispäringud: "Check the weather in Paris and tell me if it's above 20°C"
+- Ilmateated: "Milline on ilm Tokyos?"
+- Temperatuuri teisendused: "Mis on 25°C kelvinites?"
+- Ühendatud päringud: "Kontrolli Pariisi ilma ja ütle, kas temperatuur on üle 20°C"
-Märka, kuidas agent tõlgendab loomulikku keelt ja kaardistab selle sobivateks tööriistakutseteks.
+Pane tähele, kuidas agent tõlgendab loomulikku keelt ja seob selle sobivate tööriistakutsetega.
-## Põhimõisted
+## Peamised kontseptsioonid
-### ReAct muster (Põhjendamine ja Tegutsemine)
+### ReAct muster (Põhjus ja Tegutsemine)
-Agent vaheldub põhjendamise (otsustamine, mida teha) ja tegutsemise (tööriistade kasutamine) vahel. See muster võimaldab autonoomset probleemilahendust, mitte ainult juhiste täitmist.
+Agent vaheldumisi põhjendab (otsustab, mida teha) ja tegutseb (kasutab tööriistu). See muster võimaldab autonoomset probleemilahendust, mitte ainult juhiste täitmist.
-### Tööriistade kirjeldusel on tähtsus
+### Tööriistade kirjeldused on tähtsad
-Tööriistakirjelduse kvaliteet mõjutab otseselt, kui hästi agent neid kasutab. Selged, spetsiifilised kirjeldused aitavad mudelil mõista, millal ja kuidas iga tööriista kutsuda.
+Tööriistade kirjelduste kvaliteet määrab otse, kui hästi agent neid kasutab. Selged ja spetsiifilised kirjeldused aitavad mudelil mõista, millal ja kuidas iga tööriista kutsuda.
-### Sessioonihaldus
+### Sessiooni haldus
-`@MemoryId` annotatsioon võimaldab automaatset sessioonipõhist mäluhaldust. Iga sessiooni ID jaoks luuakse oma `ChatMemory` instants, mida haldab `ChatMemoryProvider` bean, nii et mitmed kasutajad saavad korraga agendiga suhelda ilma, et nende vestlused seguneksid. Järgnev diagramm näitab, kuidas mitu kasutajat suunatakse eraldatud mälupoodidesse vastavalt nende sessiooni ID-dele:
+`@MemoryId` annotatsioon lubab automaatset sessioonipõhist mälu haldust. Iga sessiooni ID-le luuakse oma `ChatMemory` instants, mida haldab `ChatMemoryProvider` bean, nii et mitmed kasutajad saavad samaaegselt agentidega suhelda ilma, et vestlused seguneksid. Järgmine diagramm näitab, kuidas mitmed kasutajad suunatakse eraldatud vestlusmäludele vastavalt nende sessiooni ID-dele:
-
+
-*Iga sessiooni ID vastab eraldatud vestluse ajalool — kasutajad ei näe kunagi teiste sõnumeid.*
+*Iga sessiooni ID vastab isoleeritud vestluse ajaloole — kasutajad ei näe kunagi teiste sõnumeid.*
-### Vea käsitlemine
+### Veahaldus
-Tööriistad võivad ebaõnnestuda — API-d aeguvad, parameetrid võivad olla vigased, välisteenused ei tööta. Tootmisagentidele on vajalik veahaldus, et mudel suudaks probleemi selgitada või alternatiive proovida, mitte et terve rakendus kokku jookseks. Kui tööriist viskab erindi, püüab LangChain4j selle kinni ja edastab veateate mudelile, mis võib seejärel probleemi loomulikus keeles selgitada.
+Tööriistad võivad ebaõnnestuda — API-d aeguvad, parameetrid võivad olla valed, välised teenused võivad olla maas. Tootmisagentidel on vaja veahaldust, et mudel saaks probleeme selgitada või proovida alternatiive, mitte et kogu rakendus kokku jookseks. Kui tööriist viskab erandi, tabab LangChain4j selle ja suunab veateate mudelile tagasi, kes saab probleemi selgitada loomulikus keeles.
-## Saadavalolevad tööriistad
+## Saadaval olevad tööriistad
-Järgmine diagramm näitab laia tööriistade ökosüsteemi, mida saate ehitada. See moodul demonstreerib ilma- ja temperatuuri tööriistu, kuid sama `@Tool` muster toimib mistahes Java meetodi puhul — alates andmebaasipäringutest kuni maksete töötlemiseni.
+Järgmine diagramm näitab laia tööriistade ökosüsteemi, mida saad ehitada. See moodul demonstreerib ilma- ja temperatuuritööriistu, kuid sama `@Tool` muster töötab mis tahes Java meetodi puhul — alates andmebaasi päringutest kuni maksete töötlemiseni.
-
+
-*Mitte ükski Java meetod, mida annotatsiooniga @Tool märgistatakse, ei muutuks saadavaks AI-le — mustrit saab laiendada andmebaaside, API-de, e-posti, failitöötluse ja muu puhul.*
+*Iga Java meetod, mis on märgistatud @Tool-iga, saab AI-le kättesaadavaks — muster laieneb andmebaasidele, API-dele, e-postile, failitöötlusele ja muule.*
## Millal kasutada tööriistapõhiseid agente
-Mitte iga päring ei vaja tööriistu. Otsus sõltub sellest, kas AI-l on vaja suhelda välissüsteemidega või saab vastata oma teadmiste põhjal. Järgmine juhend võtab kokku, millal tööriistad väärtust lisavad ja millal neid pole vaja:
+Mitte iga päring ei vaja tööriistu. Otsus sõltub sellest, kas AI-l on vaja suhelda väliste süsteemidega või saab ta vastata oma teadmiste põhjal. Järgmine juhend koondab, millal tööriistad on kasulikud ja millal tarbetud:
-
+
-*Kiire otsustusjuhend — tööriistad on mõeldud reaalajas andmete, arvutuste ja toimingute jaoks; üldteadmised ja loomingulised ülesanded neid ei vaja.*
+*Kiire otsustusjuhend — tööriistad on reaalajas andmete, arvutuste ja toimingute jaoks; üldised teadmised ja loomingulised ülesanded ei vaja neid.*
## Tööriistad vs RAG
-Moodulid 03 ja 04 laiendavad mõlemad, mida AI suudab teha, kuid põhjalikult erineval moel. RAG annab mudelile juurdepääsu **teadmistele** dokumentide abil. Tööriistad annavad mudelile võime **toimingute** tegemiseks funktsioone kutsuda. Järgnev diagramm võrdleb neid kahte lähenemist kõrvuti — alates tööprotsesside toimimisest kuni kompromissideni:
+Moodulid 03 ja 04 laiendavad AI võimekust, aga põhimõtteliselt erinevalt. RAG annab mudelile ligipääsu **teadmistele** dokumentide toomise kaudu. Tööriistad annavad mudelile võime **teha toiminguid** funktsioonide kutsumise kaudu. Järgmine diagramm võrdleb neid kahte lähenemist kõrvuti — alates sellest, kuidas töövood toimivad kuni nende vaheliste kompromissideni:
-
+
-*RAG hangib infot staatilistest dokumentidest — tööriistad täidavad toiminguid ja hangivad dünaamilisi, reaalajas andmeid. Paljud tootmissüsteemid kombineerivad mõlemat.*
+*RAG toob infot staatilistest dokumentidest — Tööriistad täidavad toiminguid ja hangivad dünaamilisi, reaalajas andmeid. Paljud tootmissüsteemid kasutavad mõlemat kombineeritult.*
-Praktikas kasutavad paljud tootmissüsteemid mõlemat lähenemist: RAG kinnitab vastused teie dokumentatsioonile ja tööriistad hangivad elusaid andmeid või teevad toiminguid.
+Praktikas kasutavad paljud tootmissüsteemid mõlemaid lähenemisi: RAG dokumentatsiooni toetamiseks ja Tööriistad elavate andmete hankimiseks või toimingute tegemiseks.
## Järgmised sammud
-**Järgmine moodul:** [05-mcp - Model Context Protocol (MCP)](../05-mcp/README.md)
+**Järgmine moodul:** [05-mcp - Mudeli konteksti protokoll (MCP)](../05-mcp/README.md)
---
-**Navigeerimine:** [← Eelmine: Moodul 03 - RAG](../03-rag/README.md) | [Tagasi Pealehele](../README.md) | [Järgmine: Moodul 05 - MCP →](../05-mcp/README.md)
+**Navigeerimine:** [← Eelmine: Moodul 03 - RAG](../03-rag/README.md) | [Tagasi avalehele](../README.md) | [Järgmine: Moodul 05 - MCP →](../05-mcp/README.md)
---
-**Vastutusest loobumine**:
-See dokument on tõlgitud AI tõlketeenuse [Co-op Translator](https://github.com/Azure/co-op-translator) abil. Kuigi püüame tagada täpsust, palun arvestage, et automaatses tõlkes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tingitud arusaamatuste või valesti mõistmiste eest.
+**Lahtiütlus**:
+See dokument on tõlgitud kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi me püüdleme täpsuse poole, palun pange tähele, et automatiseeritud tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud eksimustest või valesti mõistmistest.
\ No newline at end of file
diff --git a/translations/et/README.md b/translations/et/README.md
index 891ad7338..b9cabd1df 100644
--- a/translations/et/README.md
+++ b/translations/et/README.md
@@ -2,18 +2,18 @@
# LangChain4j algajatele
-Kursus AI rakenduste loomiseks LangChain4j ja Azure OpenAI GPT-5.2 abil, alates lihtsast vestlusest kuni AI agentideni.
+Kursus AI rakenduste ehitamiseks kasutades LangChain4j ja Azure OpenAI GPT-5.2, alates lihtsast vestlusest kuni AI agentideni.
### 🌐 Mitmekeelne tugi
-#### Toetatud GitHub Actioni kaudu (automatiseeritud ja alati ajakohane)
+#### Toetatud GitHub Actioni kaudu (Automaatne ja alati ajakohane)
[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](./README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
-> **Eelistate kloonida kohapeal?**
+> **Eelistad kloonimist lokaalselt?**
>
-> See hoidla sisaldab üle 50 keele tõlkeid, mis suurendab allalaadimise mahtu märkimisväärselt. Kui soovite kloonida ilma tõlgeteta, kasutage hõredat checkouti:
+> See hoidla sisaldab üle 50 keele tõlget, mis suurendab allalaaditava faili suurust märkimisväärselt. Tõlgeteta kloonimiseks kasuta sparsed checkouti:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -29,64 +29,63 @@ Kursus AI rakenduste loomiseks LangChain4j ja Azure OpenAI GPT-5.2 abil, alates
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> See annab teile kõik vajaliku kursuse lõpetamiseks märksa kiirema allalaadimisega.
+> See annab sulle kõik vajaliku kursuse läbimiseks palju kiirema allalaadimisega.
## Sisukord
-1. [Kiire alustamine](00-quick-start/README.md) - LangChain4j-ga alustamine
-2. [Sissejuhatus](01-introduction/README.md) - Õppige LangChain4j põhialuseid
-3. [Päästiku inseneriteadus](02-prompt-engineering/README.md) - Saavutage tulemuslik päästiku kujundamine
-4. [RAG (otsingupõhine genereerimine)](03-rag/README.md) - Looge nutikaid teadmistepõhiseid süsteeme
-5. [Tööriistad](04-tools/README.md) - Integreerige väliseid tööriistu ja lihtsaid assistente
-6. [MCP (mudelikonteksti protokoll)](05-mcp/README.md) - Töötage MCP ja agentidel põhinevate moodulitega
+1. [Sissejuhatus](01-introduction/README.md) - Õpi LangChain4j põhialuseid
+2. [Promptide loomine](02-prompt-engineering/README.md) - Õpi tõhusaid promptide disainimise tehnikaid
+3. [RAG (otsingupõhine genereerimine)](03-rag/README.md) - Ehita nutikaid teadmistepõhiseid süsteeme
+4. [Tööriistad](04-tools/README.md) - Integreeri väliseid tööriistu ja lihtsaid assistente
+5. [MCP (Mudeli konteksti protokoll)](05-mcp/README.md) - Tööta Model Context Protocoli (MCP) ja agentide moodulitega
### Video juhendid
-Igal moodulil on kaasas otseülekande sessioon, kus käsitleme kontsepte ja koodi samm-sammult.
+Iga mooduli juurde kuulub otseülekandes juhend, kus samm-sammult käime läbi kontseptsioonid ja koodi.
| Moodul | Video |
|--------|-------|
-| 01 - Sissejuhatus | [Alustamine LangChain4j-ga](https://www.youtube.com/live/nl_troDm8rQ) |
-| 02 - Päästiku inseneriteadus | [Päästiku inseneriteadus LangChain4j-ga](https://www.youtube.com/live/PJ6aBaE6bog) |
-| 03 - RAG | [RAG LangChain4j-ga](https://www.youtube.com/watch?v=_olq75ZH_eY) |
+| 01 - Sissejuhatus | [LangChain4j kasutuselevõtt](https://www.youtube.com/live/nl_troDm8rQ) |
+| 02 - Promptide loomine | [Promptide loomine LangChain4j-ga](https://www.youtube.com/live/PJ6aBaE6bog) |
+| 03 - RAG | [RAG koos LangChain4j-ga](https://www.youtube.com/watch?v=_olq75ZH_eY) |
| 04 - Tööriistad & 05 - MCP | [AI agentide loomine tööriistade ja MCP-ga](https://www.youtube.com/watch?v=O_J30kZc0rw) |
---
## Õppeteekond
-**Oled LangChain4j-s uus?** Tutvu [Sõnastikuga](docs/GLOSSARY.md), et mõista võtmetermineid ja kontseptsioone.
+**Oled uus LangChain4j juures?** Vaata [Sõnastikku](docs/GLOSSARY.md), kus selgitatakse võtmetermineid ja kontseptsioone.
-> **Kiire alustamine**
+> **Kiirstart**
-1. Tehke failide koopia (fork) sellest hoidlast oma GitHub kontole
-2. Klõpsake **Code** → **Codespaces** vahekaart → **...** → **New with options...**
-3. Kasutage vaikeväärtusi – see valib selle kursuse jaoks loodud arenduskonteineri
+1. Looge selle hoidla fork oma GitHubi kontole
+2. Klõpsake **Code** → **Codespaces** sakk → **...** → **New with options...**
+3. Kasutage vaikeseadeid – see valib kursuse jaoks loodud arendus konteineri
4. Klõpsake **Create codespace**
-5. Oodake 5-10 minutit, kuni keskkond on valmis
-6. Hüppa otse [Kiire alustamise](./00-quick-start/README.md) juurde, et alustada!
+5. Oodake 5–10 minutit, kuni keskkond on valmis
+6. Alustage otse [sissejuhatusest](./01-introduction/README.md)!
-Moodulite läbimisel uurige ka [Testimisjuhendit](docs/TESTING.md), et näha LangChain4j testimise kontseptsioone praktikas.
+Pärast moodulite läbimist uurige [Testimise juhendit](docs/TESTING.md), et näha LangChain4j testimise kontseptsioone praktikas.
-> **Märkus:** See koolitus kasutab nii GitHubi mudeleid kui ka Azure OpenAI-d. [Kiire alustamise](00-quick-start/README.md) moodul kasutab GitHubi mudeleid (Azure tellimust pole vaja), samas kui moodulid 1–5 kasutavad Azure OpenAI-d. Kui teil veel pole, alustage [TASUTA Azure kontoga](https://aka.ms/azure-free-account).
+> **Märkus:** See koolitus kasutab Azure OpenAI. Kui sul pole veel kontot, alusta [TASUTA Azure konto](https://aka.ms/azure-free-account) loomisega.
## Õppimine GitHub Copilotiga
-Kiireks kodeerimiseks avage see projekt GitHub Codespaces või oma kohaliku IDE-s antud devcontaineriga. Kursuses kasutatav devcontainer on eelkonfigureeritud GitHub Copilotiga AI paarprogrammeerimiseks.
+Selleks, et kiiresti kodeerima hakata, ava see projekt GitHub Codespaces või oma lokaalses IDEs koos antud devcontaineriga. Kursuses kasutatav devcontainer on eelseadistatud GitHub Copilotiga AI paarisprogrammeerimiseks.
-Iga koodinäite juures on soovitatavad küsimused, mida võite GitHub Copilotile esitada, et oma arusaamist süvendada. Otsige 💡/🤖 viiteid:
+Iga koodinäite juures on soovituslikud küsimused, mida võid Copilotilt küsida, et oma arusaamist süvendada. Otsi 💡/🤖 märgendit:
-- **Java failide päistes** – näidete spetsiifilised küsimused
+- **Java failide päistes** – iga näite kohta spetsiifilised küsimused
- **Mooduli README-d** – uurimisküsimused pärast koodinäiteid
-**Kuidas kasutada:** Avage ükskõik milline koodifail ja küsige Copilotilt soovitatud küsimusi. Tal on kogu koodibaasi kontekst ja ta suudab selgitada, laiendada ja pakkuda alternatiive.
+**Kuidas kasutada:** Ava ükskõik milline koodifail ja küsi soovitatud küsimusi Copilotilt. Tal on kogu koodibaasi kontekst olemas, ta saab seletada, laiendada ja soovitada alternatiive.
-Tahate rohkem teada? Vaadake [Copilot AI paarprogrammeerimiseks](https://aka.ms/GitHubCopilotAI).
+Tahad rohkem teada? Vaata [Copilot AI paarisprogrammeerimiseks](https://aka.ms/GitHubCopilotAI).
-## Lisamaterjalid
+## Täiendavad ressursid
### LangChain
@@ -99,7 +98,7 @@ Tahate rohkem teada? Vaadake [Copilot AI paarprogrammeerimiseks](https://aka.ms/
[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
---
@@ -111,40 +110,41 @@ Tahate rohkem teada? Vaadake [Copilot AI paarprogrammeerimiseks](https://aka.ms/
---
-### Põhioskused
-[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
+### Põhiõpe
+[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
+[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
+
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
-### Copiloti sari
+### Copilot seeria
[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
## Abi saamine
-Kui takerdu või sul on küsimusi tehisintellekti rakenduste loomisel, liitu:
+Kui takerdud või sul on küsimusi AI-rakenduste loomise kohta, liitu:
[](https://aka.ms/foundry/discord)
-Kui sul on toodet puudutav tagasiside või ehitamise ajal ilmnevad vead, külasta:
+Kui sul on toodete tagasisidet või ehitusprotsessis ilmneb vigu, külasta:
-[](https://aka.ms/foundry/forum)
+[](https://aka.ms/foundry/forum)
## Litsents
-MIT litsents - täpsemate üksikasjade jaoks vt [LICENSE](../../LICENSE) faili.
+MIT litsents - vaata üksikasju [LICENSE](../../LICENSE) failist.
---
-**Vastutusest loobumine**:
-See dokument on tõlgitud kasutades tehisintellekti tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi püüame täpsust, palun arvestage, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise info puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta tõlke kasutamisest tingitud arusaamatuste või väärtõlgenduste eest.
+**Lahtiütlus**:
+See dokument on tõlgitud kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi me püüdleme täpsuse poole, palun pange tähele, et automatiseeritud tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud eksimustest või valesti mõistmistest.
\ No newline at end of file
diff --git a/translations/et/docs/GLOSSARY.md b/translations/et/docs/GLOSSARY.md
index b67270f09..5549880e0 100644
--- a/translations/et/docs/GLOSSARY.md
+++ b/translations/et/docs/GLOSSARY.md
@@ -2,231 +2,229 @@
## Sisukord
-- [Põhikontseptsioonid](../../../docs)
-- [LangChain4j komponendid](../../../docs)
-- [AI/ML kontseptsioonid](../../../docs)
-- [Guardrails](../../../docs)
-- [Prompt Engineering](../../../docs)
-- [RAG (Retrieval-Augmented Generation)](../../../docs)
-- [Agentid ja Tööriistad](../../../docs)
-- [Agentic Moodul](../../../docs)
-- [Mudeli Konteksti Protokoll (MCP)](../../../docs)
-- [Azure Teenused](../../../docs)
-- [Testimine ja Arendus](../../../docs)
+- [Põhikontseptsioonid](#põhikontseptsioonid)
+- [LangChain4j Komponendid](#langchain4j-komponendid)
+- [AI/ML Kontseptsioonid](#aiml-kontseptsioonid)
+- [Kaitsemehhanismid](#kaitsemehhanismid)
+- [Promptide Loomine](#prompt-engineering---module-02)
+- [RAG (Retrieval-Augmented Generation)](#rag-retrieval-augmented-generation---module-03)
+- [Agendid ja Tööriistad](#agents-and-tools---module-04)
+- [Agentne Moodul](#agentic-module---module-05)
+- [Mudeli Konteksti Protokoll (MCP)](#model-context-protocol-mcp---module-05)
+- [Azure Teenused](#azure-services---module-01)
+- [Testimine ja Arendus](#testing-and-development---testing-guide)
Kiire viide kursuse jooksul kasutatud terminitele ja kontseptsioonidele.
## Põhikontseptsioonid
-**AI Agent** - Süsteem, mis kasutab tehisintellekti autonoomseks mõtlemiseks ja tegutsemiseks. [Moodul 04](../04-tools/README.md)
+**AI Agent** - Süsteem, mis kasutab tehisintellekti mõtlemiseks ja autonoomseks tegutsemiseks. [Moodul 04](../04-tools/README.md)
-**Chain** - Operatsioonide jada, kus väljund läheb järgmisse sammu.
+**Kett (Chain)** - Tegevuste jada, kus väljund läheb järgmise sammu sisendiks.
-**Chunking** - Dokumentide jagamine väiksemateks osadeks. Tüüpiline: 300-500 tokenit koos kattuvusega. [Moodul 03](../03-rag/README.md)
+**Tükeldamine (Chunking)** - Dokumentide jaotamine väiksemateks osadeks. Tavaliselt 300-500 märki ülekattega. [Moodul 03](../03-rag/README.md)
-**Context Window** - Maksimaalne tokenite arv, mida mudel suudab töödelda. GPT-5.2: 400K tokenit (kuni 272K sisend, 128K väljund).
+**Kontekstiakna suurus** - Maksimaalne märgiste arv, mida mudel saab töödelda. GPT-5.2: 400K märki (kuni 272K sisend, 128K väljund).
-**Embeddings** - Teksti tähendust esindavad numbrilised vektorid. [Moodul 03](../03-rag/README.md)
+**Koodvektorid (Embeddings)** - Numbrilised vektorid, mis esindavad teksti tähendust. [Moodul 03](../03-rag/README.md)
-**Function Calling** - Mudel genereerib struktureeritud päringuid väliste funktsioonide kutsumiseks. [Moodul 04](../04-tools/README.md)
+**Funktsiooni Kutsumine** - Mudel genereerib struktureeritud päringuid väliste funktsioonide kutsumiseks. [Moodul 04](../04-tools/README.md)
-**Hallucination** - Kui mudelid genereerivad vale, aga usutavat infot.
+**Hallutsinatsioon** - Kui mudelid genereerivad vale, kuid usutavat infot.
**Prompt** - Tekstisisend keelemudelile. [Moodul 02](../02-prompt-engineering/README.md)
-**Semantic Search** - Otsing tähenduse järgi, kasutades embeddings'e, mitte märksõnu. [Moodul 03](../03-rag/README.md)
+**Semantiline Otsing** - Otsing tähenduse järgi, kasutades koodvektoreid, mitte märksõnu. [Moodul 03](../03-rag/README.md)
-**Stateful vs Stateless** - Stateless: mäluta. Stateful: hoiab vestluse ajalugu. [Moodul 01](../01-introduction/README.md)
+**Riigipõhine vs Riigivaba (Stateful vs Stateless)** - Riigivaba: pole mälulugu. Riigipõhine: säilitab vestluse ajaloo. [Moodul 01](../01-introduction/README.md)
-**Tokens** - Teksti põhiüksused, mida mudelid töötlevad. Mõjutab kulusid ja piiranguid. [Moodul 01](../01-introduction/README.md)
+**Märgid (Tokens)** - Mudelite töödeldavad põhiühikud. Mõjutab kulusid ja piiranguid. [Moodul 01](../01-introduction/README.md)
-**Tool Chaining** - Tööriistade järjestikune täitmine, kus väljund juhib järgmist kutset. [Moodul 04](../04-tools/README.md)
+**Tööriistade Kettimine** - Tööriistade järjestikune käivitamine, kus väljund suunab järgmist funktsioonikõnet. [Moodul 04](../04-tools/README.md)
-## LangChain4j komponendid
+## LangChain4j Komponendid
-**AiServices** - Loob tüübiturvalisi tehisintellekti teenuste liideseid.
+**AiServices** - Loob tüübikindlaid AI teenuste liideseid.
**OpenAiOfficialChatModel** - Ühtne klient OpenAI ja Azure OpenAI mudelitele.
-**OpenAiOfficialEmbeddingModel** - Loob embeddings'e OpenAI ametliku kliendi abil (toetab nii OpenAI kui Azure OpenAI).
+**OpenAiOfficialEmbeddingModel** - Loob koodvektoreid OpenAI ametliku kliendi abil (toetab nii OpenAI kui Azure OpenAI).
-**ChatModel** - Keelemudelite põhiliides.
+**ChatModel** - Keelemudelite põhiline liides.
-**ChatMemory** - Säilitab vestluse ajaloo.
+**ChatMemory** - Hoiab vestluse ajalugu.
-**ContentRetriever** - Leiab RAG jaoks asjakohaseid dokumentide tükke.
+**ContentRetriever** - Leiab olulised dokumenditükid RAG jaoks.
**DocumentSplitter** - Jagab dokumendid osadeks.
-**EmbeddingModel** - Konkreetsete võtmesõnade teisendamine numbrilisteks vektoriteks.
+**EmbeddingModel** - Muudab teksti numbrilisteks vektoriteks.
-**EmbeddingStore** - Salvestab ja hangib embeddings'e.
+**EmbeddingStore** - Salvestab ja hangib koodvektoreid.
-**MessageWindowChatMemory** - Hoiab liikuva akna hiljutiste sõnumite jaoks.
+**MessageWindowChatMemory** - Hoiab järjepidevalt viimaste sõnumite liugakent.
-**PromptTemplate** - Loob taaskasutatavaid prompt-malle koos `{{variable}}` kohatäiteks.
+**PromptTemplate** - Loob taaskasutatavaid prompte koos `{{variable}}` asendustega.
-**TextSegment** - Tekstitükk metainfoga. Kasutatakse RAG koosseisus.
+**TextSegment** - Tekstitükk koos metainfo ja kasutatakse RAGis.
-**ToolExecutionRequest** - Tööriista täitmise taotluse esitlus.
+**ToolExecutionRequest** - Esindab tööriista täitmise päringut.
-**UserMessage / AiMessage / SystemMessage** - Vestlusakna sõnumitüübid.
+**UserMessage / AiMessage / SystemMessage** - Vestluse sõnumitüübid.
-## AI/ML kontseptsioonid
+## AI/ML Kontseptsioonid
-**Few-Shot Learning** - Selgitavate näidete esitamine promptides. [Moodul 02](../02-prompt-engineering/README.md)
+**Few-Shot Learning** - Näidete pakkumine promptides. [Moodul 02](../02-prompt-engineering/README.md)
-**Large Language Model (LLM)** - Suurekeelne mudel, mida on treenitud tohutul hulgal tekstidel.
+**Suur Keelemudel (LLM)** - AI mudelid, mis on treenitud suurte tekstikorpuste peal.
-**Reasoning Effort** - GPT-5.2 parameeter, mis juhib mõtlemise sügavust. [Moodul 02](../02-prompt-engineering/README.md)
+**Loogiline Pingutus (Reasoning Effort)** - GPT-5.2 parameeter, mis kontrollib mõtlemise sügavust. [Moodul 02](../02-prompt-engineering/README.md)
-**Temperature** - Juhtib väljundi juhuslikkust. Madal=deterministlik, kõrge=loov.
+**Temperatuur** - Juhtib väljundi juhuslikkust. Madal=deterministlik, kõrge=loov.
-**Vector Database** - Spetsiaalne andmebaas embeddings'ite jaoks. [Moodul 03](../03-rag/README.md)
+**Vektorandmebaas** - Spetsiaalne andmebaas koodvektorite jaoks. [Moodul 03](../03-rag/README.md)
-**Zero-Shot Learning** - Ülesannete täitmine ilma näideteta. [Moodul 02](../02-prompt-engineering/README.md)
+**Zero-Shot Learning** - Ülesannete sooritamine ilma näideteta. [Moodul 02](../02-prompt-engineering/README.md)
-## Guardrails - [Moodul 00](../00-quick-start/README.md)
+## Kaitsemehhanismid
-**Defense in Depth** - Mitmetasandiline turvalahendus, mis kombineerib rakenduse tasandi piire ja pakkuja turvafiltreid.
+**Kaitsekihid (Defense in Depth)** - Turvalisuse mitmetasandiline lähenemine, mis ühendab rakenduse tasandi kaitsed pakkuja turvafiltritega.
-**Hard Block** - Pakkuja viskab HTTP 400 vea tõsiste sisurikete korral.
+**Tõsine Blokeerimine (Hard Block)** - Pakkuja tõstab HTTP 400 vea tõsiste sisurikkumiste korral.
-**InputGuardrail** - LangChain4j liides kasutaja sisendi valideerimiseks enne LLM-i jõudmist. Säästab kulusid ja viivitusi, blokeerides kahjulikud promptid varakult.
+**InputGuardrail** - LangChain4j liides kasutaja sisendi valideerimiseks enne LLMi jõudmist. Säästab kulusid ja latentsust, blokeerides kahjulikud promptid varakult.
-**InputGuardrailResult** - Tagastustüüp guardrali valideerimisel: `success()` või `fatal("põhjus")`.
+**InputGuardrailResult** - Tagastustüüp kaitse valideerimiseks: `success()` või `fatal("põhjus")`.
-**OutputGuardrail** - Liides AI-väljundi valideerimiseks enne kasutajale tagastamist.
+**OutputGuardrail** - Liides AI vastuste valideerimiseks enne kasutajale tagastamist.
-**Provider Safety Filters** - AI pakkujate (nt GitHub Models) sisseehitatud sisufiltrid, mis tabavad rikkumisi API tasemel.
+**Pakkuja Turvafiltrid** - AI pakkujate (nt Azure OpenAI) sisseehitatud sisufiltrid, mis tabavad rikkumisi API tasandil.
-**Soft Refusal** - Mudel keeldub viisakalt vastamast, ilma vea viskamata.
+**Pehme Keeldumine (Soft Refusal)** - Mudel keeldub viisakalt vastamast vigade tekitamiseta.
-## Prompt Engineering - [Moodul 02](../02-prompt-engineering/README.md)
+## Promptide Loomine - [Moodul 02](../02-prompt-engineering/README.md)
-**Chain-of-Thought** - Samm-sammuline põhjendamine parema täpsuse saavutamiseks.
+**Chain-of-Thought** - Järkjärguline loogika parema täpsuse saavutamiseks.
-**Constrained Output** - Spetsiifilise vormingu või struktuuri nõudmine.
+**Piiratud Väljund (Constrained Output)** - Sundida kindlat formaati või struktuuri.
-**High Eagerness** - GPT-5.2 muster põhjalikuks põhjendamiseks.
+**Suur Pühendumus (High Eagerness)** - GPT-5.2 muster põhjalikuks mõtlemiseks.
-**Low Eagerness** - GPT-5.2 muster kiireteks vastusteks.
+**Madal Pühendumus (Low Eagerness)** - GPT-5.2 muster kiireteks vastusteks.
-**Multi-Turn Conversation** - Konteksti hoidmine mitme vahetuse jooksul.
+**Mitme-Korra Vestlus (Multi-Turn Conversation)** - Mõtteviisi säilitamine vestluse jooksul.
-**Role-Based Prompting** - Mudeli isikupära seadmine süsteemisõnumite kaudu.
+**Rollipõhine Promptimine** - Mudeli persona määramine süsteemsete sõnumite kaudu.
-**Self-Reflection** - Mudel hindab ja parandab oma väljundit.
+**Eneseanalüüs (Self-Reflection)** - Mudel hindab ja täiustab oma väljundit.
-**Structured Analysis** - Fikseeritud hindamisraamistik.
+**Struktureeritud Analüüs** - Kindel hindamismeetod.
-**Task Execution Pattern** - Planeeri → Täida → Kokkuvõtte.
+**Ülesande Täitmise Muster** - Plaan → Täida → Kokkuvõtte tee.
## RAG (Retrieval-Augmented Generation) - [Moodul 03](../03-rag/README.md)
-**Document Processing Pipeline** - Lae → tükelda → embedding → salvestus.
+**Dokumenditöötlusvoog** - Lae → tükelda → kodeeri → salvesta.
-**In-Memory Embedding Store** - Mitte-püsiv salvestus testimiseks.
+**Mälupõhine Koodvektoripood** - Ajutine hoidla testimiseks.
-**RAG** - Kombineerib otsingu ja generatsiooni vastuste täpsustamiseks.
+**RAG** - Ühendab info hankimise ja genereerimise, et vastused oleksid põhjendatud.
-**Similarity Score** - Semantilise sarnasuse mõõt (0-1).
+**Sarnasuse Hinne** - Semantilise sarnasuse mõõt (0-1).
-**Source Reference** - Metainfo otsitud sisu kohta.
+**Allika Viide** - Metaandmed hangitud sisu kohta.
-## Agentid ja Tööriistad - [Moodul 04](../04-tools/README.md)
+## Agendid ja Tööriistad - [Moodul 04](../04-tools/README.md)
-**@Tool Annotation** - Märgib Java meetodid AI-ga kutsutavateks tööriistadeks.
+**@Tool Märgend** - Märgistab Java meetodid AI-kõlbulikeks tööriistadeks.
-**ReAct Pattern** - Mõtle → Tegutse → Vaata → Korda.
+**ReAct Muster** - Mõtle → Tegutse → Vaata → Korda.
-**Session Management** - Eraldab erinevate kasutajate kontekstid.
+**Sessiooni Halduse** - Erinevad kontekstid kasutajate jaoks.
-**Tool** - Funktsioon, mida AI agent saab kutsuda.
+**Tööriist** - Funktsioon, mida AI agent saab kutsuda.
-**Tool Description** - Tööriista eesmärgi ja parameetrite dokumentatsioon.
+**Tööriista Kirjeldus** - Dokumentatsioon tööriista eesmärgi ja parameetrite kohta.
-## Agentic Moodul - [Moodul 05](../05-mcp/README.md)
+## Agentne Moodul - [Moodul 05](../05-mcp/README.md)
-**@Agent Annotation** - Märgib liidesed AI agentideks koos deklaratiivse käitumise määratlusega.
+**@Agent Märgend** - Märgistab liidesed AI agentideks deklaratiivse käitumise kirjeldamiseks.
-**Agent Listener** - Konks agentide täitmise jälgimiseks meetodite `beforeAgentInvocation()` ja `afterAgentInvocation()` kaudu.
+**Agendi Kuulaja (Agent Listener)** - Konks agentide täitmise jälgimiseks meetoditega `beforeAgentInvocation()` ja `afterAgentInvocation()`.
-**Agentic Scope** - Jagatud mälu, kus agentide väljundid talletatakse ja mida järgmised agentid tarbivad.
+**Agentne Ulatus (Agentic Scope)** - Jagatud mälu, kuhu agentide tulemused salvestatakse, et teised agentid saaksid neid kasutada.
-**AgenticServices** - Agentide loomiseks mõeldud tehas kasutades `agentBuilder()` ja `supervisorBuilder()`.
+**AgenticServices** - Tehas agentide loomiseks kasutades `agentBuilder()` ja `supervisorBuilder()`.
-**Conditional Workflow** - Tingimuslik marsruutimine erinevate spetsialist-agentide juurde.
+**Tingimuslik Töövoog** - Tähtis marsruut tingimuse põhjal erinevatele spetsialistagentidele.
-**Human-in-the-Loop** - Töötlemismuster, mis lisab inimkontrollpunktid kinnituseks või sisukontrolliks.
+**Inimene Ahelas (Human-in-the-Loop)** - Töövoo muster, mis lisab inimsektsioonid heakskiiduks või sisukontrolliks.
-**langchain4j-agentic** - Maven sõltuvus deklaratiivseks agentide ehitamiseks (eksperimentaalne).
+**langchain4j-agentic** - Maven sõltuvus deklaratiivseks agentide loomiseks (katsefaasis).
-**Loop Workflow** - Agentide täitmine kordub, kuni tingimus on täidetud (nt kvaliteediskoor ≥ 0.8).
+**Tsükliline Töövoog (Loop Workflow)** - Iteratiivne agentide täitmine kuni tingimus täitub (nt kvaliteediskoor ≥ 0.8).
-**outputKey** - Agendi annotatsiooni parameeter, mis määrab, kuhu tulemused Agentic Scope'is salvestatakse.
+**outputKey** - Agendi märgendiparameeter, mis määrab, kuhu Agentse Ulatuses tulemused salvestatakse.
-**Parallel Workflow** - Mitme agendi samaaegne käivitamine iseseisvate ülesannete jaoks.
+**Paralleeltöövoog (Parallel Workflow)** - Mitme agendi samaaegne täitmine iseseisvate ülesannete jaoks.
-**Response Strategy** - Kuidas juhendaja koostab lõpliku vastuse: LAST, SUMMARY või SCORED.
+**Vastustrateegia** - Kuidas juhendaja vormistab lõpliku vastuse: VIIMANE, KOKKUVÕTE või SKOORITUD.
-**Sequential Workflow** - Agentide järjekordne täitmine, kus väljund voolab järgmisesse sammu.
+**Järjestikune Töövoog (Sequential Workflow)** - Agentide järjestikune täitmine, kus väljund liigub järgmisesse sammu.
-**Supervisor Agent Pattern** - Täiustatud agentide muster, kus juhendaja LLM otsustab dünaamiliselt, milliseid sub-agente kutsuda.
+**Juhendaja Agendi Muster (Supervisor Agent Pattern)** - Täiustatud agentne muster, kus juhendaja LLM otsustab dünaamiliselt, milliseid alamagente kutsuda.
## Mudeli Konteksti Protokoll (MCP) - [Moodul 05](../05-mcp/README.md)
-**langchain4j-mcp** - Maven sõltuvus MCP integreerimiseks LangChain4j'sse.
+**langchain4j-mcp** - Maven sõltuvus MCP integreerimiseks LangChain4j-s.
-**MCP** - Mudeli konteksti protokoll: standard AI rakenduste ühendamiseks väliste tööriistadega. Tee kord ja kasuta kõikjal.
+**MCP** - Mudeli Konteksti Protokoll: standard AI rakenduste ühendamiseks väliste tööriistadega. Ehita üks kord, kasuta kõikjal.
-**MCP Client** - Rakendus, mis ühendub MCP serveritega tööriistade leidmiseks ja kasutamiseks.
+**MCP Klient** - Rakendus, mis ühendub MCP serveritega tööriistade avastamiseks ja kasutamiseks.
-**MCP Server** - Teenus, mis eksponeerib tööriistu MCP kaudu koos selgete kirjelduste ja parameetrite skeemidega.
+**MCP Server** - Teenus, mis pakub tööriistu MCP kaudu selgete kirjelduste ja parameetrite skeemidega.
-**McpToolProvider** - LangChain4j komponent, mis pakib MCP tööriistad AI teenuste ja agentide kasutamiseks.
+**McpToolProvider** - LangChain4j komponent, mis pakendab MCP tööriistad kasutamiseks AI teenustes ja agentides.
-**McpTransport** - Liides MCP side jaoks. Rakendused: Stdio ja HTTP.
+**McpTransport** - Liides MCP kommunikatsiooni jaoks. Implementatsioonid sisaldavad Stdio ja HTTP.
-**Stdio Transport** - Kohalik protsessi transport läbi stdin/stdout. Kasulik failisüsteemi juurdepääsuks või käsurea tööriistadele.
+**Stdio Transport** - Kohalik protsessi transport läbi stdin/stdout. Kasulik failisüsteemi ligipääsu või käsureatööriistade jaoks.
-**StdioMcpTransport** - LangChain4j rakendus, mis käivitab MCP serveri alamprotsessina.
+**StdioMcpTransport** - LangChain4j implementatsioon, mis käivitab MCP serveri alamprotsessina.
-**Tool Discovery** - Klient küsib serverilt saadaval olevate tööriistade kirjeldusi ja skeeme.
+**Tööriistade Avastamine** - Klient pärib serverilt saadaolevad tööriistad koos kirjelduste ja skeemidega.
## Azure Teenused - [Moodul 01](../01-introduction/README.md)
-**Azure AI Search** - Pilvepõhine otsing koos vektorite võimetega. [Moodul 03](../03-rag/README.md)
+**Azure AI Otsing** - Pilveotsing vektorvõimalustega. [Moodul 03](../03-rag/README.md)
**Azure Developer CLI (azd)** - Azure ressursside juurutamine.
-**Azure OpenAI** - Microsofti ettevõtete tehisintellekti teenus.
+**Azure OpenAI** - Microsofti ettevõtte AI teenus.
-**Bicep** - Azure infrastruktuuri koodikeel. [Infrastruktuuri juhend](../01-introduction/infra/README.md)
+**Bicep** - Azure infrastruktuuri kui koodi keel. [Infrastruktuuri juhend](../01-introduction/infra/README.md)
-**Deployment Name** - Nimi mudeli juurutamiseks Azure'is.
+**Juurutuse Nimi** - Mudeli juurutuse nimi Azure'is.
-**GPT-5.2** - Viimane OpenAI mudel mõtlemise juhtimisega. [Moodul 02](../02-prompt-engineering/README.md)
+**GPT-5.2** - Viimane OpenAI mudel mõtlemise kontrolliga. [Moodul 02](../02-prompt-engineering/README.md)
-## Testimine ja Arendus - [Testimise juhend](TESTING.md)
+## Testimine ja Arendus - [Testimise Juhend](TESTING.md)
-**Dev Container** - Konteinerpõhine arenduskeskkond. [Seadistus](../../../.devcontainer/devcontainer.json)
+**Dev Container** - Konteineriseeritud arenduskeskkond. [Konfiguratsioon](../../../.devcontainer/devcontainer.json)
-**GitHub Models** - Tasuta AI mudelite mänguväljak. [Moodul 00](../00-quick-start/README.md)
+**Mälupõhine Testimine** - Testimine mälusalvestusega.
-**In-Memory Testimine** - Testimine mälu baasil salvestusega.
+**Integreerimistestimine** - Testimine reaalse infrastruktuuriga.
-**Integration Testing** - Testimine päris infrastruktuuriga.
+**Maven** - Java ehitamise automatiseerimise tööriist.
-**Maven** - Java ehitustööriist.
+**Mockito** - Java teema jäljendamise raamistik.
-**Mockito** - Java testimise raamistik.
-
-**Spring Boot** - Java rakendusraamistik. [Moodul 01](../01-introduction/README.md)
+**Spring Boot** - Java rakenduse raamistik. [Moodul 01](../01-introduction/README.md)
---
-**Vastutusest loobumine**:
-See dokument on tõlgitud kasutades tehisintellekti tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi püüame täpsust, tuleb arvestada, et automatiseeritud tõlkes võivad esineda vead või ebatäpsused. Originaaldokument oma emakeeles tuleks pidada autoriteetseks allikaks. Kriitilise informatsiooni puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud arusaamatuste ega valesti tõlgendamise eest.
+**Lahtiütlus**:
+See dokument on tõlgitud kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi me püüdleme täpsuse poole, palun pange tähele, et automatiseeritud tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud eksimustest või valesti mõistmistest.
\ No newline at end of file
diff --git a/translations/et/docs/TESTING.md b/translations/et/docs/TESTING.md
index e3cf8e34b..2226a2101 100644
--- a/translations/et/docs/TESTING.md
+++ b/translations/et/docs/TESTING.md
@@ -2,19 +2,19 @@
## Sisukord
-- [Kiire algus](../../../docs)
-- [Mida testid katavad](../../../docs)
-- [Testide käivitamine](../../../docs)
-- [Testide käivitamine VS Code'is](../../../docs)
-- [Testimismustrid](../../../docs)
-- [Testimise filosoofia](../../../docs)
-- [Järgmised sammud](../../../docs)
+- [Kiire algus](#kiire-algus)
+- [Mida testid sisaldavad](#mida-testid-sisaldavad)
+- [Testide käivitamine](#testide-käivitamine)
+- [Testide käivitamine VS Code'is](#testide-käivitamine-vs-codeis)
+- [Testimismustrid](#testimismustrid)
+- [Testimise filosoofia](#testimise-filosoofia)
+- [Järgmised sammud](#järgmised-sammud)
-See juhend juhendab sind läbi testide, mis näitavad, kuidas testida tehisintellekti rakendusi ilma API võtmete või väliste teenusteta.
+See juhend viib teid läbi testide, mis näitavad, kuidas testida AI rakendusi ilma API-võtmeteta või välist teenust kasutamata.
## Kiire algus
-Käivita kõik testid ühe käsuga:
+Käivitage kõik testid ühe käsuga:
**Bash:**
```bash
@@ -26,32 +26,31 @@ mvn test
mvn --% test
```
-Kui kõik testid läbivad, peaksid nägema väljundit nagu alloleval ekraanipildil — testid jooksid ilma ühegi veata.
+Kui kõik testid läbivad, peaksite nägema väljundit nagu alloleval ekraanipildil — testid jooksevad ilma ühegi veata.
-
+
-*Edasijõudnud testide käivitamine, kus kõik testid läbisid ilma vigadeta*
+*Õnnestunud testi täitmine, kus kõik testid läbivad ilma vigadeta*
-## Mida testid katavad
+## Mida testid sisaldavad
-See kursus keskendub **ühikutestidele**, mis jooksevad lokaalselt. Iga test demonstreerib konkreetset LangChain4j kontseptsiooni isoleeritult. Allolev testimise püramiid näitab, kus ühikutestid sobituvad — need moodustavad kiire ja usaldusväärse aluse, millele ülejäänud testistrateegia tugineb.
+See kursus keskendub **ühiktestidele**, mis jooksevad lokaalselt. Iga test demonstreerib konkreetset LangChain4j kontseptsiooni isolatsioonis. Allpool olev testimise püramiid näitab, kuhu ühiktestid mahuvad — need moodustavad kiiruse ja usaldusväärsuse aluse, millele teie ülejäänud testistrateegia toetub.
-*Testimise püramiid näitab tasakaalu ühikutestide (kiired, isoleeritud), integratsioonitestide (päris komponendid) ja lõpuni-testide vahel. See koolitus käsitleb ühikutestimist.*
+*Testimise püramiid näitab tasakaalu ühiktestide (kiired, isoleeritud), integratsioonitestide (päris komponendid) ja lõppastme testide vahel. See koolitus katab ühiketste.*
| Moodul | Testid | Fookus | Olulised failid |
|--------|--------|--------|-----------------|
-| **00 - Kiire algus** | 6 | Käsu mallid ja muutujate asendamine | `SimpleQuickStartTest.java` |
-| **01 - Sissejuhatus** | 8 | Vestlusmälu ja olekupõhine vestlus | `SimpleConversationTest.java` |
-| **02 - Käsu inseneriteadus** | 12 | GPT-5.2 mustrid, innukuse tasemed, struktureeritud väljund | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | Dokumendi importimine, vektorid, sarnasuse otsing | `DocumentServiceTest.java` |
-| **04 - Tööriistad** | 12 | Funktsioonikutsed ja tööriistade kettimine | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | Mudeli konteksti protokoll StdIO transpordiga | `SimpleMcpTest.java` |
+| **01 - Sissejuhatus** | 8 | Vestluse mälu ja oleku säilitamine | `SimpleConversationTest.java` |
+| **02 - Promptide inseneritöö** | 12 | GPT-5.2 mustrid, ootuse tasemed, struktureeritud väljund | `SimpleGpt5PromptTest.java` |
+| **03 - RAG** | 10 | Dokumendi sisestamine, embeddingud, sarnasuse otsing | `DocumentServiceTest.java` |
+| **04 - Tööriistad** | 12 | Funktsioonide kutsumine ja tööriistade ahelad | `SimpleToolsTest.java` |
+| **05 - MCP** | 8 | Model Context Protocol stdio transpordiga | `SimpleMcpTest.java` |
## Testide käivitamine
-**Käivita kõik testid juurkataloogist:**
+**Käivitage kõik testid juurest:**
**Bash:**
```bash
@@ -63,7 +62,7 @@ mvn test
mvn --% test
```
-**Käivita testid konkreetse mooduli jaoks:**
+**Käivitage testid kindla mooduli jaoks:**
**Bash:**
```bash
@@ -79,7 +78,7 @@ cd 01-introduction; mvn --% test
mvn --% test -pl 01-introduction
```
-**Käivita üks testiklass:**
+**Käivitage üks testiklass:**
**Bash:**
```bash
@@ -91,7 +90,7 @@ mvn test -Dtest=SimpleConversationTest
mvn --% test -Dtest=SimpleConversationTest
```
-**Käivita konkreetne testimeetod:**
+**Käivitage konkreetne testimeetod:**
**Bash:**
```bash
@@ -105,31 +104,31 @@ mvn --% test -Dtest=SimpleConversationTest#peaks säilitama vestluse ajaloo
## Testide käivitamine VS Code'is
-Kui kasutad Visual Studio Code'i, pakub Test Explorer graafilise liidese testide käivitamiseks ja silumiseks.
+Kui kasutate Visual Studio Code'i, annab Test Explorer graafilise kasutajaliidese testide käivitamiseks ja silumiseks.
-*VS Code Test Explorer näitab testipuu kõigi Java testiklasside ja üksikute testimeetoditega*
+*VS Code Test Exploreri testipuu, kus on kõik Java testiklassid ja üksikud testimeetodid*
**Testide käivitamiseks VS Code'is:**
-1. Ava Test Explorer, klõpsates tegevusriba klaasikese ikoonile
-2. Laienda testipuu, et näha kõiki mooduleid ja testiklasse
-3. Klõpsa käivitusnupul mistahes testi kõrval, et seda üksikult käivitada
-4. Klõpsa "Run All Tests", et käivitada kõik testid korraga
-5. Paremklõpsa mistahes testil ja vali "Debug Test", et seada murdepunkte ja sammuda koodi läbi
+1. Avage Test Explorer, klõpsates Activity Baril olevat mõõteriista ikooni
+2. Laiendage testipuu, et näha kõiki mooduleid ja testiklasse
+3. Klõpsake mängu ikoonil mis tahes testi kõrval, et seda individuaalselt käivitada
+4. Klõpsake nuppu "Run All Tests", et käivitada kogu komplekt
+5. Paremklõpsake mis tahes testi ja valige "Debug Test", et panna murdepunkte ja läbida koodi sammhaaval
-Test Explorer näitab rohelisi linnukesi läbitud testide juures ja kuvab detailseid tõrketeateid vigade korral.
+Test Explorer kuvab rohelisi linnukesi läbinud testide juures ja annab üksikasjalikud veateated, kui testid ebaõnnestuvad.
## Testimismustrid
-### Muster 1: Käsu mallide testimine
+### Muster 1: Promptide mallide testimine
-Lihtsaim muster testib käsu malli ilma, et kutsutakse AI mudelit. Kontrollid, et muutujate asendamine toimib korrektselt ja käsud formeeritakse ootuspäraselt.
+Kõige lihtsam muster testib promptide malle ilma AI mudelit kutsumata. Kontrollite, et muutujate asendamine toimiks õigesti ja promptid oleksid ootuspäraselt vormindatud.
-
+
-*Käsu mallide testimine näitab muutujate asenduse protsessi: mall koos kohatäidetega → väärtused rakendatud → vormindatud väljund kontrollitud*
+*Promptide mallide testimine, mis näitab muutujate asendamise voogu: mall kohatäitega → väärtuste rakendamine → vormindatud väljundi kontroll*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-See test asub failis `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
+See muster kontrollib, et muutujate asendamine toimib õigesti ja promptid vormindatakse ootuspäraselt — API võtit ega mudelikõnet ei ole vaja.
-**Käivita see:**
+### Muster 2: Keelemudelite katmine
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#testiPromptMallimiseVormindamine
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#testiPromptMallideFormaatimine
-```
-
-### Muster 2: Keelemudelite nõelimine (mockimine)
-
-Vestlusloogika testimisel kasuta Mockito’t võltsmudelite loomiseks, mis tagastavad etteantud vastuseid. See teeb testid kiired, tasuta ja määratletavad.
+Vestlusloogika testimisel kasutage Mockito, et luua võltsmudeleid, mis tagastavad eelnevalt määratud vastuseid. See teeb testid kiireks, tasuta ja deterministlikuks.
-
+
-*Võrdlus, miks testimiseks eelistatakse mocke: need on kiired, tasuta, määratletavad ja ei vaja API võtmeid*
+*Võrdlus, mis näitab, miks testimisel eelistatakse võltse: need on kiired, tasuta, deterministlikud ja EI vaja API võtmeid*
```java
@ExtendWith(MockitoExtension.class)
@@ -218,15 +205,15 @@ class SimpleConversationTest {
}
```
-See muster ilmub failis `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Mock tagab järjepideva käitumise, et kontrollida mälu haldamist korrektselt.
+See muster ilmub failis `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Võlts tagab järjepideva käitumise, et kontrollida mälu haldust õigesti toimivat.
### Muster 3: Vestluse isoleerimise testimine
-Vestlusmälul peab olema võime hoida erinevate kasutajate andmed eraldi. See test kontrollib, et vestlused ei sega kontekste omavahel.
+Vestluse mälu peab kasutajaid eristama. See test kontrollib, et vestlused ei segaks kontekste.
-*Vestluse isoleerimise testimine, näidates eraldi mäluhoidlaid erinevate kasutajate jaoks, et vältida kontekstide juhtumist*
+*Vestluse isoleerimise testimine näitab eraldi mäluhoidlaid eri kasutajate jaoks konteksti segamise vältimiseks*
```java
@Test
@@ -250,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-Iga vestlus säilitab oma sõltumatu ajaloo. Tootmissüsteemides on see isoleeritus kriitiline mitme kasutajaga rakenduste jaoks.
+Iga vestlus hoiab enda sõltumatut ajalugu. Tootmissüsteemides on see isoleeritus oluline mitmekasutajarakenduste jaoks.
-### Muster 4: Tööriistade sõltumatu testimine
+### Muster 4: Tööriistade eraldiseisev testimine
-Tööriistad on AI poolt kutsutavad funktsioonid. Testi neid otse, et tagada nende korrektsus sõltumata AI otsustest.
+Tööriistad on funktsioonid, mida AI saab kutsuda. Testige neid otse, et veenduda, et need töötavad õigesti, sõltumata AI otsustest.
-*Tööriistade sõltumatu testimine, kus mock-tööriistad töötavad ilma AI kutseta, kontrollimaks äri loogikat*
+*Tööriistade eraldiseisev testimine näitab võltsimise tööriista käivitamist ilma AI kutsumata äriloogika kontrollimiseks*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-Need testid failis `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` valideerivad tööriistade loogikat ilma AI kaasamiseta. Kettimise näide näitab, kuidas ühe tööriista väljund suunatakse teise sisendiks.
+Need testid failist `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` valideerivad tööriistade loogikat ilma AI kaasamiseta. Ahela näide näitab, kuidas ühe tööriista väljund läheb teise sisendiks.
-### Muster 5: Mälu-põhise RAG testimine
+### Muster 5: Mälu-põhine RAG testimine
-RAG süsteemid vajavad tavaliselt vektorandmebaase ja manustusteenuseid. Mälu-põhine muster lubab testida kogu töövoogu ilma väliste sõltuvusteta.
+RAG süsteemid kasutavad tavaliselt vektordatabaase ja embedimis-teenuseid. Mälu-põhine muster võimaldab testida kogu torujuhet ilma väliste sõltuvusteta.
-*Mälu-põhise RAG testimise töövoog, kus toimub dokumendi analüüs, manuste salvestus ja sarnasuse otsing ilma andmebaasi nõudmata*
+*Mälu-põhise RAG testimisläbivaade, mis kuvab dokumendi töötlemist, embedimiste salvestamist ja sarnasuse otsingut ilma andmebaasi nõudmata*
```java
@Test
@@ -306,15 +293,15 @@ void testProcessTextDocument() {
}
```
-See test failist `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` loob dokumendi mälus ja kontrollib tükkideks jaotust ja metaandmete töötlemist.
+See test failist `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` loob dokumendi mällu ja kontrollib tükkide tegemist ning metaandmete käitlemist.
### Muster 6: MCP integratsioonitestimine
-MCP moodul testib Mudeli konteksti protokolli (Model Context Protocol) integreerimist stdio transpordi abil. Need testid kinnitavad, et sinu rakendus suudab käivitada ning suhelda MCP serveritega alamprotsessidena.
+MCP moodul testib Model Context Protocol integreerimist stdio transpordi kaudu. Need testid kontrollivad, et teie rakendus saab käivitada ja suhelda MCP serveritega alamprotsessidena.
Testid failis `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` valideerivad MCP kliendi käitumist.
-**Käivita need:**
+**Käivitage need:**
**Bash:**
```bash
@@ -328,36 +315,35 @@ cd 05-mcp; mvn --% test
## Testimise filosoofia
-Testeeri oma koodi, mitte AI-d. Sinu testid peaksid valideerima kirjutatud koodi kontrollides, kuidas käske konstrueeritakse, kuidas mälu hallatakse ja kuidas tööriistad täidetakse. AI vastused varieeruvad ega tohiks olla testide väidetes osa. Küsi endalt, kas sinu käsu mall asendab muutujad õigesti, mitte kas AI annab õige vastuse.
+Testige oma koodi, mitte AI-d. Testid peaksid valideerima kirjutatud koodi, kontrollides, kuidas promptid konstrueeritakse, kuidas mälu hallatakse ja kuidas tööriistad täidetakse. AI vastused varieeruvad ega tohiks olla testi kinnituses osa. Küsige endalt, kas teie prompti mall asendab muutujaid õigesti, mitte seda, kas AI annab õige vastuse.
-Kasuta mocks’i keelemudelite jaoks. Need on välised sõltuvused, mis on aeglased, kulukad ja määratlematud. Mockimine teeb testid kiired (millisekunditega sekundite asemel), tasuta ilma API kuludeta ja määratletavad iga kord sama tulemusega.
+Kasutage keelemudelite puhul valemänge. Need on välised sõltuvused, mis on aeglased, kallid ja mitte-deterministlikud. Valemängud muudavad testid kiiremaks (millisekundites, mitte sekundites), tasuta (ilma API kuludeta) ja deterministlikuks (iga kord sama tulemus).
-Hoidke testid sõltumatud. Iga test peaks seadistama oma andmed, mitte lootma teistele testidele ja pärast oma tööd koristama. Testid peaksid läbima sõltumata käivitamise järjekorrast.
+Hoia testid iseseisvad. Iga test peaks seadistama oma andmed, mitte sõltuma teistest testidest ja puhastama enda järel. Testid peaksid läbima sõltumata käivitamise järjekorrast.
-Testeeri äärejuhtumeid üle normaalse kasutuse. Proovi tühje sisendeid, väga suuri sisendeid, erimärke, sobimatuid parameetreid ja piirtingimusi. Need paljastavad sageli vigu, mida tavaline kasutus ei näita.
+Testige äärmusjuhtumeid peale õnne tee. Katsetage tühjade sisenditega, väga suurte sisenditega, erimärkidega, vigaste parameetrite ja piiritingimustega. Need paljastavad tihti vead, mida tavakasutus ei näita.
-Kasuta kirjeldavaid nimesid. Võrdle `shouldMaintainConversationHistoryAcrossMultipleMessages()` ja `test1()`. Esimene ütleb täpselt, mida testitakse, tehnikavigade parandamine on palju lihtsam.
+Kasutage kirjeldavaid nimesid. Võrrelge `shouldMaintainConversationHistoryAcrossMultipleMessages()` ja `test1()`. Esimene ütleb täpselt, mida testitakse, muutes rikete silumise palju lihtsamaks.
## Järgmised sammud
-Nüüd, kui sa mõistad testimismustreid, süüvi iga mooduli põhjalikumalt:
+Nüüd, kui mõistate testimismustreid, sukeldage end sügavamale iga mooduli juurde:
-- **[00 - Kiire algus](../00-quick-start/README.md)** - Alusta käsu mallide alustest
-- **[01 - Sissejuhatus](../01-introduction/README.md)** - Õpi vestlusmälu haldust
-- **[02 - Käsu inseneriteadus](../02/prompt-engineering/README.md)** - Master GPT-5.2 käsu mustrid
-- **[03 - RAG](../03-rag/README.md)** - Ehita väljatoomisvõimendusega generaatorisüsteeme
-- **[04 - Tööriistad](../04-tools/README.md)** - Rakenda funktsioonikutsed ja tööriistade kettimine
-- **[05 - MCP](../05-mcp/README.md)** - Integreeri Model Context Protocol
+- **[01 - Sissejuhatus](../01-introduction/README.md)** - Õppige vestluse mälu haldamist
+- **[02 - Promptide inseneritöö](../02-prompt-engineering/README.md)** - Valdage GPT-5.2 promptide mustreid
+- **[03 - RAG](../03-rag/README.md)** - Looge päringutega täiustatud generaatori süsteeme
+- **[04 - Tööriistad](../04-tools/README.md)** - Rakendage funktsioonide kutsumist ja tööriistade ahelaid
+- **[05 - MCP](../05-mcp/README.md)** - Integreerige Model Context Protocol
-Iga mooduli README annab üksikasjaliku selgituse siin testitavate kontseptsioonide kohta.
+Iga mooduli README annab üksikasjalikke seletusi siin testitud kontseptsioonide kohta.
---
-**Navigeerimine:** [← Tagasi avalehele](../README.md)
+**Navigeerimine:** [← Tagasi peamenüüsse](../README.md)
---
-**Vastutusest loobumine**:
-See dokument on tõlgitud kasutades tehisintellekti tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi püüame täpsust, palun pange tähele, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tingitud võimalikest arusaamatustest või väärarusaamadest.
+**Lahtiütlus**:
+See dokument on tõlgitud kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi me püüdleme täpsuse poole, palun pange tähele, et automatiseeritud tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud eksimustest või valesti mõistmistest.
\ No newline at end of file
diff --git a/translations/fa/.co-op-translator.json b/translations/fa/.co-op-translator.json
index 13c6ea7e5..f05263a1d 100644
--- a/translations/fa/.co-op-translator.json
+++ b/translations/fa/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "fa"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-02T22:25:05+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T07:19:20+00:00",
"source_file": "01-introduction/README.md",
"language_code": "fa"
},
@@ -18,20 +18,20 @@
"language_code": "fa"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-02T22:27:41+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T07:14:01+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "fa"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-02T22:29:20+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T07:18:25+00:00",
"source_file": "03-rag/README.md",
"language_code": "fa"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T12:17:22+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T07:16:53+00:00",
"source_file": "04-tools/README.md",
"language_code": "fa"
},
@@ -54,8 +54,8 @@
"language_code": "fa"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T15:34:31+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T07:12:27+00:00",
"source_file": "README.md",
"language_code": "fa"
},
@@ -72,14 +72,14 @@
"language_code": "fa"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-02T22:33:17+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T07:14:31+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "fa"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-02T22:34:03+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T07:15:21+00:00",
"source_file": "docs/TESTING.md",
"language_code": "fa"
}
diff --git a/translations/fa/00-quick-start/README.md b/translations/fa/00-quick-start/README.md
deleted file mode 100644
index 7e5be0891..000000000
--- a/translations/fa/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# ماژول ۰۰: شروع سریع
-
-## فهرست مطالب
-
-- [مقدمه](../../../00-quick-start)
-- [LangChain4j چیست؟](../../../00-quick-start)
-- [وابستگیهای LangChain4j](../../../00-quick-start)
-- [پیشنیازها](../../../00-quick-start)
-- [راهاندازی](../../../00-quick-start)
- - [۱. دریافت توکن گیتهاب](../../../00-quick-start)
- - [۲. تنظیم توکن خود](../../../00-quick-start)
-- [اجرای نمونهها](../../../00-quick-start)
- - [۱. چت پایه](../../../00-quick-start)
- - [۲. الگوهای پرامپت](../../../00-quick-start)
- - [۳. فراخوانی تابع](../../../00-quick-start)
- - [۴. پرسش و پاسخ اسناد (Easy RAG)](../../../00-quick-start)
- - [۵. هوش مصنوعی مسئولانه](../../../00-quick-start)
-- [هر مثال چه چیزی نشان میدهد](../../../00-quick-start)
-- [گامهای بعدی](../../../00-quick-start)
-- [عیبیابی](../../../00-quick-start)
-
-## مقدمه
-
-این شروع سریع برای این است که شما را سریعتر با LangChain4j راهاندازی کند. این راهنما اصول اولیه ساخت برنامههای هوش مصنوعی با LangChain4j و مدلهای گیتهاب را پوشش میدهد. در ماژولهای بعدی به Azure OpenAI و GPT-5.2 سوئیچ خواهید کرد و هر مفهوم را عمیقتر بررسی میکنید.
-
-## LangChain4j چیست؟
-
-LangChain4j یک کتابخانه جاوا است که ساخت برنامههای هوش مصنوعی را ساده میکند. به جای کار با کلاینتهای HTTP و پارس کردن JSON، با APIهای تمیز جاوا کار میکنید.
-
-«زنجیره» در LangChain به معنی زنجیر کردن چندین مولفه است - ممکن است یک پرامپت را به یک مدل و سپس به یک پارسر متصل کنید، یا چند فراخوانی AI را به هم زنجیر کنید که خروجی یکی به ورودی بعدی میرود. این شروع سریع روی اصول اولیه متمرکز است پیش از آنکه زنجیرههای پیچیدهتر را بررسی کنیم.
-
-
-
-*زنجیر کردن مولفهها در LangChain4j - بلوکهای سازنده متصل میشوند تا گردشکارهای قدرتمند هوش مصنوعی ایجاد کنند*
-
-ما از سه مولفه اصلی استفاده میکنیم:
-
-**ChatModel** - رابط تعامل با مدل هوش مصنوعی. تابع `model.chat("prompt")` را فراخوانی کنید و یک رشته پاسخ دریافت کنید. ما از `OpenAiOfficialChatModel` استفاده میکنیم که با نقطههای پایانی سازگار با OpenAI مانند مدلهای GitHub کار میکند.
-
-**AiServices** - رابطهای سرویس هوش مصنوعی با نوع ایمن ایجاد میکند. متدها را تعریف کنید، آنها را با `@Tool` حاشیهنویسی کنید و LangChain4j هماهنگی را مدیریت میکند. هوش مصنوعی به طور خودکار هنگام نیاز متدهای جاوای شما را فراخوانی میکند.
-
-**MessageWindowChatMemory** - تاریخچه گفتگو را نگهداری میکند. بدون آن، هر درخواست مستقل است. با آن، هوش مصنوعی پیامهای قبلی را به خاطر میسپارد و در چند نوبت زمینه را حفظ میکند.
-
-
-
-*معماری LangChain4j - مولفههای اصلی که با هم کار میکنند تا برنامههای هوش مصنوعی شما را توانمند کنند*
-
-## وابستگیهای LangChain4j
-
-این شروع سریع از سه وابستگی Maven در [`pom.xml`](../../../00-quick-start/pom.xml) استفاده میکند:
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-ماژول `langchain4j-open-ai-official` کلاس `OpenAiOfficialChatModel` را فراهم میکند که به APIهای سازگار با OpenAI متصل میشود. مدلهای GitHub از همان قالب API استفاده میکنند، بنابراین نیاز به آداپتور خاصی نیست – کافی است آدرس پایه را به `https://models.github.ai/inference` تنظیم کنید.
-
-ماژول `langchain4j-easy-rag` جداسازی خودکار اسناد، جاسازی و بازیابی را فراهم میکند تا بتوانید برنامههای RAG بسازید بدون اینکه هر مرحله را دستی پیکربندی کنید.
-
-## پیشنیازها
-
-**از Dev Container استفاده میکنید؟** جاوا و Maven قبلاً نصب شدهاند. فقط به توکن دسترسی شخصی گیتهاب نیاز دارید.
-
-**توسعه محلی:**
-- جاوا ۲۱ یا بالاتر، Maven 3.9 یا بالاتر
-- توکن دسترسی شخصی گیتهاب (دستورالعملها در پایین)
-
-> **توجه:** این ماژول از مدل `gpt-4.1-nano` از مدلهای GitHub استفاده میکند. نام مدل را در کد تغییر ندهید – این نام برای کار با مدلهای در دسترس GitHub تنظیم شده است.
-
-## راهاندازی
-
-### ۱. دریافت توکن گیتهاب
-
-۱. به [تنظیمات گیتهاب → توکنهای دسترسی شخصی](https://github.com/settings/personal-access-tokens) بروید
-۲. روی «Generate new token» کلیک کنید
-۳. یک نام توصیفی تنظیم کنید (مثلاً «LangChain4j Demo»)
-۴. تاریخ انقضا را تنظیم کنید (۷ روز توصیه میشود)
-۵. زیر «دسترسیهای حساب»، بخش «Models» را پیدا کنید و روی «فقط خواندنی» تنظیم کنید
-۶. روی «Generate token» کلیک کنید
-۷. توکن را کپی و ذخیره کنید – دوباره نمایش داده نخواهد شد
-
-### ۲. تنظیم توکن خود
-
-**گزینه ۱: استفاده از VS Code (توصیه شده)**
-
-اگر از VS Code استفاده میکنید، توکن خود را به فایل `.env` در ریشه پروژه اضافه کنید:
-
-اگر فایل `.env` وجود ندارد، فایل `.env.example` را به `.env` کپی کنید یا یک فایل `.env` جدید در ریشه پروژه بسازید.
-
-**مثال فایل `.env`:**
-```bash
-# در /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-سپس میتوانید به سادگی روی هر فایل دمو (مثلاً `BasicChatDemo.java`) در اکسپلورر راستکلیک کرده و **«Run Java»** را انتخاب کنید یا از پیکربندیهای اجرا در پنل Run and Debug استفاده کنید.
-
-**گزینه ۲: استفاده از ترمینال**
-
-توکن را به عنوان متغیر محیطی تنظیم کنید:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## اجرای نمونهها
-
-**استفاده از VS Code:** فقط روی هر فایل دمو در اکسپلورر راستکلیک کرده و **«Run Java»** را انتخاب کنید، یا از پیکربندیهای اجرا در پنل Run and Debug استفاده کنید (اطمینان حاصل کنید که اول توکن را به فایل `.env` اضافه کردهاید).
-
-**استفاده از Maven:** به طور متناوب، میتوانید از خط فرمان اجرا کنید:
-
-### ۱. چت پایه
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### ۲. الگوهای پرامپت
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-الگوهای zero-shot، few-shot، chain-of-thought و مبتنی بر نقش را نشان میدهد.
-
-### ۳. فراخوانی تابع
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-هوش مصنوعی به طور خودکار هنگام نیاز متدهای جاوای شما را فراخوانی میکند.
-
-### ۴. پرسش و پاسخ اسناد (Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-سوالاتی در مورد اسناد خود با استفاده از Easy RAG با جاسازی و بازیابی خودکار بپرسید.
-
-### ۵. هوش مصنوعی مسئولانه
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-ببینید چگونه فیلترهای ایمنی هوش مصنوعی محتوای مضر را مسدود میکنند.
-
-## هر مثال چه چیزی نشان میدهد
-
-**چت پایه** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-از اینجا شروع کنید تا LangChain4j را در سادهترین حالت خودش ببینید. یک `OpenAiOfficialChatModel` میسازید، یک پرامپت با `.chat()` میفرستید و پاسخ را دریافت میکنید. این پایه را نشان میدهد: چگونه مدلها را با نقاط پایانی سفارشی و کلید API مقداردهی اولیه کنید. وقتی این الگو را فهمیدید، بقیه چیزها بر اساس آن ساخته میشوند.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 امتحان با چت [GitHub Copilot](https://github.com/features/copilot):** فایل [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) را باز کنید و بپرسید:
-> - "چگونه در این کد از مدلهای GitHub به Azure OpenAI سوئیچ کنم؟"
-> - "چه پارامترهای دیگری را میتوانم در OpenAiOfficialChatModel.builder() تنظیم کنم؟"
-> - "چگونه میتوانم به جای انتظار برای پاسخ کامل، پاسخهای استریم شده اضافه کنم؟"
-
-**مهندسی پرامپت** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-حالا که میدانید چگونه با مدل صحبت کنید، بیایید ببینیم چه چیزی به آن میگویید. این دمو از همان تنظیم مدل استفاده میکند اما پنج الگوی پرامپت مختلف را نشان میدهد. پرامپتهای zero-shot برای دستورهای مستقیم، few-shot که از مثالها یاد میگیرند، chain-of-thought که مراحل استدلال را نشان میدهد و پرامپتهای مبتنی بر نقش که زمینه را تنظیم میکنند را امتحان کنید. خواهید دید همان مدل بسته به چارچوب بندی درخواست شما چطور پاسخهای بسیار متفاوتی میدهد.
-
-این دمو همچنین الگوهای پرامپت را نشان میدهد که روشی قدرتمند برای ایجاد پرامپتهای قابل استفاده مجدد با متغیرها هستند.
-مثال زیر پرامپتی را با استفاده از `PromptTemplate` در LangChain4j برای پر کردن متغیرها نشان میدهد. هوش مصنوعی بر اساس مقصد و فعالیت داده شده پاسخ خواهد داد.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 امتحان با چت [GitHub Copilot](https://github.com/features/copilot):** فایل [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) را باز کنید و بپرسید:
-> - "تفاوت پرامپت zero-shot و few-shot چیست و چه زمانی هرکدام را باید استفاده کنم؟"
-> - "پارامتر دما چگونه روی پاسخهای مدل تاثیر میگذارد؟"
-> - "چند تکنیک برای جلوگیری از حملات تزریق پرامپت در تولید چیست؟"
-> - "چگونه میتوانم اشیاء PromptTemplate قابل استفاده مجدد برای الگوهای رایج بسازم؟"
-
-**ادغام ابزار** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-اینجا LangChain4j قدرتمند میشود. شما از `AiServices` استفاده میکنید تا دستیار هوش مصنوعی بسازید که بتواند متدهای جاوای شما را فراخوانی کند. کافی است متدها را با `@Tool("توضیح")` حاشیهنویسی کنید و LangChain4j بقیه کارها را انجام میدهد – هوش مصنوعی به طور خودکار تصمیم میگیرد کی از هر ابزار استفاده کند بر اساس درخواست کاربر. این تکنیک فراخوانی تابع را نشان میدهد که کلید ساخت هوش مصنوعی است که میتواند اقدام انجام دهد نه فقط پاسخ دهد.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 امتحان با چت [GitHub Copilot](https://github.com/features/copilot):** فایل [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) را باز کنید و بپرسید:
-> - "برچسب @Tool چگونه کار میکند و LangChain4j پشت صحنه با آن چه میکند؟"
-> - "آیا هوش مصنوعی میتواند چند ابزار را به ترتیب برای حل مسائل پیچیده فراخوانی کند؟"
-> - "اگر یک ابزار استثنا بیندازد چه اتفاقی میافتد – چطور باید خطاها را مدیریت کنم؟"
-> - "چگونه یک API واقعی را به جای این مثال ماشین حساب یکپارچه کنم؟"
-
-**پرسش و پاسخ اسناد (Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-اینجا RAG (تولید تقویتشده با بازیابی) با روش «Easy RAG» در LangChain4j را میبینید. اسناد بارگذاری، به صورت خودکار تقسیم و در یک حافظه درجا جاسازی میشوند، سپس بازیاب محتوا بخشهای مرتبط را در زمان پرسش به هوش مصنوعی میدهد. هوش مصنوعی بر اساس اسناد شما پاسخ میدهد نه دانش عمومی خود.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 امتحان با چت [GitHub Copilot](https://github.com/features/copilot):** فایل [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) را باز کنید و بپرسید:
-> - "چگونه RAG از هذیانهای هوش مصنوعی جلوگیری میکند در مقایسه با استفاده از دادههای آموزش مدل؟"
-> - "تفاوت این روش آسان با یک خط لوله RAG سفارشی چیست؟"
-> - "چگونه این را مقیاسپذیر کنم تا چندین سند یا پایگاه دانش بزرگتر را اداره کند؟"
-
-**هوش مصنوعی مسئولانه** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-ساخت ایمنی هوش مصنوعی با محافظت چندلایه. این دمو دو لایه حفاظت که با هم کار میکنند را نشان میدهد:
-
-**بخش ۱: محافظ پایش ورودی LangChain4j** - پرامپتهای خطرناک را قبل از رسیدن به مدل بزرگ زبان مسدود میکند. محافظهای سفارشی بسازید که کلمات یا الگوهای ممنوعه را بررسی کنند. اینها در کد شما اجرا میشوند، پس سریع و رایگاناند.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**بخش ۲: فیلترهای ایمنی ارائهدهنده** - مدلهای GitHub دارای فیلترهای داخلی هستند که مواردی را که محافظهای شما ممکن است از دست بدهند، میگیرند. بلوکهای سخت (خطای HTTP 400) برای تخلفات شدید و ردهای نرم که هوش مصنوعی مودبانه امتناع میکند را میبینید.
-
-> **🤖 امتحان با چت [GitHub Copilot](https://github.com/features/copilot):** فایل [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) را باز کنید و بپرسید:
-> - "InputGuardrail چیست و چگونه میتوانم محافظ خودم را بسازم؟"
-> - "تفاوت بلوک سخت و رد نرم چیست؟"
-> - "چرا باید هم محافظها و هم فیلترهای ارائهدهنده را با هم استفاده کرد؟"
-
-## گامهای بعدی
-
-**ماژول بعدی:** [۰۱-مقدمه - شروع کار با LangChain4j](../01-introduction/README.md)
-
----
-
-**ناوبری:** [← بازگشت به اصلی](../README.md) | [بعدی: ماژول ۰۱ - مقدمه →](../01-introduction/README.md)
-
----
-
-## عیبیابی
-
-### ساخت نخستینبار Maven
-
-**مشکل:** اجرای اولیه `mvn clean compile` یا `mvn package` زمان زیادی میبرد (۱۰-۱۵ دقیقه)
-
-**علت:** Maven نیاز دارد تمام وابستگیهای پروژه (Spring Boot، کتابخانههای LangChain4j، SDKهای Azure و غیره) را برای اولین ساخت دانلود کند.
-
-**راه حل:** این رفتار عادی است. ساختهای بعدی بسیار سریعتر خواهند بود چون وابستگیها به صورت محلی کش میشوند. زمان دانلود بستگی به سرعت شبکه شما دارد.
-
-### نحو دستورات Maven در PowerShell
-
-**مشکل:** دستورات Maven با خطای `Unknown lifecycle phase ".mainClass=..."` شکست میخورند
-**علت**: پاورشل `=` را به عنوان عملگر انتساب متغیر تفسیر میکند که باعث خراب شدن نحو خاصیت Maven میشود
-
-**راهحل**: از عملگر توقف پارس `--%` قبل از فرمان Maven استفاده کنید:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-عملگر `--%` به پاورشل میگوید که تمام آرگومانهای باقیمانده را بدون تفسیر به صورت دقیق به Maven ارسال کند.
-
-### نمایش شکلک در Windows PowerShell
-
-**مشکل**: پاسخهای AI به جای شکلکها کاراکترهای نامفهوم (مثل `????` یا `â??`) را نمایش میدهند در پاورشل
-
-**علت**: رمزگذاری پیشفرض پاورشل از شکلکهای UTF-8 پشتیبانی نمیکند
-
-**راهحل**: این دستور را قبل از اجرای برنامههای Java اجرا کنید:
-```cmd
-chcp 65001
-```
-
-این باعث اجبار رمزگذاری UTF-8 در ترمینال میشود. همچنین میتوانید از Windows Terminal که پشتیبانی بهتری از یونیکد دارد استفاده کنید.
-
-### اشکالزدایی تماسهای API
-
-**مشکل**: خطاهای احراز هویت، محدودیتهای نرخ، یا پاسخهای غیرمنتظره از مدل AI
-
-**راهحل**: مثالها شامل `.logRequests(true)` و `.logResponses(true)` هستند تا تماسهای API را در کنسول نشان دهند. این کمک میکند تا خطاهای احراز هویت، محدودیتهای نرخ، یا پاسخهای غیرمنتظره را عیبیابی کنید. این گزینهها را در محیط تولید حذف کنید تا حجم لاگ کاهش یابد.
-
----
-
-
-**سلب مسئولیت**:
-این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در پی دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است حاوی خطاها یا نادقتیهایی باشند. سند اصلی به زبان بومی خود باید بهعنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، استفاده از ترجمه حرفهای انسانی توصیه میشود. ما مسئول هیچ گونه سوءتفاهم یا تفسیر نادرستی که از کاربرد این ترجمه ناشی شود، نمیباشیم.
-
\ No newline at end of file
diff --git a/translations/fa/01-introduction/README.md b/translations/fa/01-introduction/README.md
index c3c4de20f..1bf290e25 100644
--- a/translations/fa/01-introduction/README.md
+++ b/translations/fa/01-introduction/README.md
@@ -2,86 +2,86 @@
## فهرست مطالب
-- [نمایش ویدئویی](../../../01-introduction)
-- [آنچه یاد خواهید گرفت](../../../01-introduction)
-- [پیشنیازها](../../../01-introduction)
-- [درک مشکل اصلی](../../../01-introduction)
-- [درک توکنها](../../../01-introduction)
-- [نحوه عملکرد حافظه](../../../01-introduction)
-- [نحوه استفاده از LangChain4j](../../../01-introduction)
-- [استقرار زیرساخت Azure OpenAI](../../../01-introduction)
-- [اجرای برنامه بهصورت محلی](../../../01-introduction)
-- [استفاده از برنامه](../../../01-introduction)
- - [چت ایستا (پنل چپ)](../../../01-introduction)
- - [چت دارای وضعیت (پنل راست)](../../../01-introduction)
-- [گامهای بعدی](../../../01-introduction)
-
-## نمایش ویدئویی
+- [بررسی ویدئویی](#بررسی-ویدئویی)
+- [آنچه خواهید آموخت](#آنچه-خواهید-آموخت)
+- [پیشنیازها](#پیشنیازها)
+- [درک مشکل اصلی](#درک-مشکل-اصلی)
+- [درک توکنها](#درک-توکنها)
+- [چگونگی کارکرد حافظه](#چگونگی-کارکرد-حافظه)
+- [نحوه استفاده از LangChain4j در این پروژه](#نحوه-استفاده-از-langchain4j-در-این-پروژه)
+- [استقرار زیرساخت Azure OpenAI](#استقرار-زیرساخت-azure-openai)
+- [اجرای برنامه به صورت محلی](#اجرای-برنامه-به-صورت-محلی)
+- [استفاده از برنامه](#استفاده-از-برنامه)
+ - [چت بدون وضعیت (پنل سمت چپ)](#چت-بدون-وضعیت-پنل-سمت-چپ)
+ - [چت دارای وضعیت (پنل سمت راست)](#چت-دارای-وضعیت-پنل-سمت-راست)
+- [گامهای بعدی](#گامهای-بعدی)
+
+## بررسی ویدئویی
این جلسه زنده را تماشا کنید که توضیح میدهد چگونه با این ماژول شروع کنید:
-## آنچه یاد خواهید گرفت
+## آنچه خواهید آموخت
-در شروع سریع، از مدلهای GitHub برای ارسال درخواستها، فراخوانی ابزارها، ساخت خط لوله RAG و آزمایش محافظها استفاده کردید. آن دموها نشان دادند چه چیزی ممکن است — اکنون به Azure OpenAI و GPT-5.2 سوئیچ میکنیم و شروع به ساخت برنامههای تولیدی میکنیم. این ماژول بر هوش مصنوعی مکالمهای که زمینه را به خاطر میسپارد و وضعیت را حفظ میکند تمرکز دارد — مفاهیمی که آن دموهای شروع سریع در پشت صحنه استفاده کردند اما توضیح ندادند.
+این نقطه شروع شما با LangChain4j و Azure OpenAI است. ما با اصول پایه شروع کرده و به ساخت برنامههای سبک تولید میپردازیم. این ماژول بر روی هوش مصنوعی مکالمهای متمرکز است که زمینه را به خاطر میسپارد و وضعیت را حفظ میکند — مفاهیم پایهای که هر ماژول بعدی بر اساس آنها ساخته میشود.
-در تمام این راهنما از GPT-5.2 Azure OpenAI استفاده خواهیم کرد چون قابلیتهای پیشرفته استدلال آن رفتار الگوهای مختلف را واضحتر میکند. وقتی حافظه اضافه کنید، تفاوت را به روشنی خواهید دید. این کار فهمیدن اینکه هر مؤلفه چه چیزی به برنامه شما میآورد را آسانتر میکند.
+در سراسر راهنما از GPT-5.2 شرکت Azure OpenAI استفاده خواهیم کرد چون قابلیتهای استدلال پیشرفته آن رفتار الگوهای مختلف را مشهودتر میکند. وقتی حافظه اضافه میکنید، تفاوت به وضوح قابل مشاهده است. این درک آسانتری از نقش هر مؤلفه در برنامه شما ایجاد میکند.
شما یک برنامه خواهید ساخت که هر دو الگو را نشان میدهد:
-**چت ایستا** - هر درخواست مستقل است. مدل هیچ حافظهای از پیامهای قبلی ندارد. این همان الگویی است که در شروع سریع استفاده کردید.
+**چت بدون وضعیت** – هر درخواست مستقل است. مدل هیچگونه حافظهای از پیامهای قبلی ندارد. این سادهترین نقطه شروع است.
-**مکالمه دارای وضعیت** - هر درخواست شامل تاریخچه مکالمه است. مدل زمینه را در طول چندین نوبت حفظ میکند. این چیزی است که برنامههای تولیدی نیاز دارند.
+**گفتگوی دارای وضعیت** – هر درخواست شامل تاریخچه گفتگو است. مدل در چندین دور مکالمه زمینه را حفظ میکند. این چیزی است که برنامههای تولیدی نیاز دارند.
## پیشنیازها
-- اشتراک Azure با دسترسی Azure OpenAI
+- اشتراک Azure با دسترسی به Azure OpenAI
- Java 21، Maven 3.9+
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
-> **توجه:** Java، Maven، Azure CLI و Azure Developer CLI (azd) در devcontainer ارائه شده از قبل نصب شدهاند.
+> **توجه:** Java، Maven، Azure CLI و Azure Developer CLI (azd) از پیش در کانتینر توسعه ارائه شده نصب هستند.
-> **توجه:** این ماژول از GPT-5.2 روی Azure OpenAI استفاده میکند. استقرار به صورت خودکار از طریق `azd up` تنظیم میشود - نام مدل را در کد تغییر ندهید.
+> **توجه:** این ماژول از GPT-5.2 روی Azure OpenAI استفاده میکند. استقرار به صورت خودکار از طریق `azd up` پیکربندی میشود - نام مدل در کد را تغییر ندهید.
## درک مشکل اصلی
-مدلهای زبانی ایستا هستند. هر فراخوان API مستقل است. اگر بگویید «اسم من جان است» و سپس بپرسید «اسم من چیست؟» مدل نمیداند که شما همین الان خودتان را معرفی کردید. هر درخواست را انگار اولین مکالمهای است که تا به حال داشتهاید، میداند.
+مدلهای زبان بدون وضعیت هستند. هر تماس API مستقل است. اگر بگویید «اسم من جان است» و سپس بپرسید «اسم من چیست؟»، مدل هیچ ایدهای ندارد که شما همین الان خودتان را معرفی کردهاید. هر درخواست را گویی اولین مکالمه شماست میپندارد.
-این برای پرسش و پاسخ ساده خوب است اما برای برنامههای واقعی بیفایده است. رباتهای خدمات مشتری باید به یاد داشته باشند چه گفتهاید. دستیارهای شخصی نیاز به زمینه دارند. هر مکالمه چند مرحلهای به حافظه نیاز دارد.
+این برای پرسش و پاسخهای ساده مناسب است ولی برای برنامههای واقعی بیفایده است. رباتهای خدمات مشتری باید آنچه به آنها گفتهاید را به خاطر بسپارند. دستیارهای شخصی نیاز به زمینه دارند. هر مکالمه چند دوری نیازمند حافظه است.
-نمودار زیر دو رویکرد را مقایسه میکند — در سمت چپ، یک فراخوان ایستا که نام شما را فراموش میکند؛ در سمت راست، یک فراخوان دارای وضعیت پشتیبانی شده توسط ChatMemory که آن را به یاد میآورد.
+نمودار زیر دو رویکرد را مقایسه میکند — در سمت چپ، تماس بدون وضعیت که اسم شما را فراموش میکند؛ در سمت راست، تماس دارای وضعیت با پشتیبانی ChatMemory که آن را به یاد میآورد.
-
+
-*تفاوت بین مکالمات ایستا (فراخوانهای مستقل) و دارای وضعیت (آگاه به زمینه)*
+*تفاوت بین گفتگوهای بدون وضعیت (تماسهای مستقل) و دارای وضعیت (آگاه به زمینه)*
## درک توکنها
-قبل از شروع مکالمات، مهم است که توکنها را بفهمیم - واحدهای پایه متن که مدلهای زبانی پردازش میکنند:
+قبل از ورود به مکالمات، مهم است که توکنها را بفهمید - واحدهای پایه متن که مدلهای زبان پردازش میکنند:
-*نمونهای از چگونگی تقسیم متن به توکنها - "I love AI!" به ۴ واحد پردازش جداگانه تبدیل میشود*
+*مثال نحوه تجزیه متن به توکنها - «I love AI!» به ۴ واحد پردازشی جداگانه تبدیل میشود*
-توکنها راهی هستند که مدلهای هوش مصنوعی متن را اندازهگیری و پردازش میکنند. کلمات، نشانهگذاری و حتی فاصلهها میتوانند توکن باشند. مدل شما محدودیت تعداد توکنهایی که میتواند یکجا پردازش کند را دارد (۴۰۰,۰۰۰ برای GPT-5.2، شامل حداکثر ۲۷۲,۰۰۰ توکن ورودی و ۱۲۸,۰۰۰ توکن خروجی). فهمیدن توکنها به مدیریت طول مکالمه و هزینهها کمک میکند.
+توکنها واحد اندازهگیری و پردازش متن از سوی مدلهای هوش مصنوعی هستند. کلمات، نشانهگذاری و حتی فواصل ممکن است توکن باشند. مدل شما محدودیتی در تعداد توکنهایی که میتواند همزمان پردازش کند دارد (۴۰۰,۰۰۰ برای GPT-5.2، با حداکثر ۲۷۲,۰۰۰ توکن ورودی و ۱۲۸,۰۰۰ توکن خروجی). آگاهی از توکنها به مدیریت طول مکالمه و هزینهها کمک میکند.
-## نحوه عملکرد حافظه
+## چگونگی کارکرد حافظه
-حافظه چت مشکل ایستا بودن را با حفظ تاریخچه مکالمه حل میکند. پیش از ارسال درخواست به مدل، چارچوب پیامهای قبلی مرتبط را اضافه میکند. وقتی میپرسید «اسم من چیست؟»، سیستم در واقع تمام تاریخچه مکالمه را ارسال میکند تا مدل ببیند که پیشتر گفته بودید «اسم من جان است.»
+حافظه چت مشکل بدون وضعیت بودن را با حفظ تاریخچه مکالمه حل میکند. قبل از ارسال درخواست به مدل، فریمورک پیامهای مرتبط قبلی را در ابتدا قرار میدهد. وقتی میپرسید «اسم من چیست؟»، سیستم در واقع کل تاریخچه مکالمه را ارسال میکند تا مدل ببیند قبلاً گفتید «اسم من جان است.»
-LangChain4j پیادهسازیهایی از حافظه ارائه میدهد که این کار را به صورت خودکار انجام میدهند. شما تعیین میکنید چند پیام نگهداری شود و چارچوب پنجره زمینه را مدیریت میکند. نمودار زیر نشان میدهد چگونه MessageWindowChatMemory پنجرهای لغزنده از پیامهای اخیر را حفظ میکند.
+LangChain4j پیادهسازیهای حافظه را ارائه میدهد که این کار را به صورت خودکار مدیریت میکنند. شما تعیین میکنید که چند پیام حفظ شود و فریمورک پنجره زمینه را مدیریت میکند. نمودار زیر نشان میدهد چگونه MessageWindowChatMemory یک پنجره لغزشی از پیامهای اخیر را حفظ میکند.
-*MessageWindowChatMemory پنجره لغزندهای از پیامهای اخیر نگه میدارد و پیامهای قدیمیتر را به صورت خودکار حذف میکند*
+*MessageWindowChatMemory یک پنجره لغزشی از پیامهای اخیر حفظ میکند و به صورت خودکار پیامهای قدیمی را حذف میکند*
-## نحوه استفاده از LangChain4j
+## نحوه استفاده از LangChain4j در این پروژه
-این ماژول شروع سریع را با ادغام Spring Boot و افزودن حافظه مکالمه گسترش میدهد. اینجا چگونگی کنار هم قرار گرفتن بخشها آمده است:
+این ماژول Spring Boot را یکپارچه کرده و حافظه مکالمه را اضافه میکند. اجزا به این صورت کنار هم قرار میگیرند:
-**وابستگیها** - دو کتابخانه LangChain4j اضافه کنید:
+**وابستگیها** – افزودن دو کتابخانه LangChain4j:
```xml
@@ -94,7 +94,7 @@ LangChain4j پیادهسازیهایی از حافظه ارائه می
```
-**مدل چت** - Azure OpenAI را بهعنوان یک bean در Spring پیکربندی کنید ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+**مدل چت** – پیکربندی Azure OpenAI به عنوان یک bean در Spring ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -109,9 +109,9 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-سازنده اعتبارنامهها را از متغیرهای محیطی که توسط `azd up` تنظیم شدهاند میخواند. تنظیم `baseUrl` به نقطه پایان Azure شما باعث میشود کلاینت OpenAI با Azure OpenAI کار کند.
+سازنده اطلاعات کاربری را از متغیرهای محیطی که توسط `azd up` تنظیم شدهاند میخواند. تنظیم `baseUrl` به نقطه پایانی Azure شما باعث میشود کلاینت OpenAI با Azure OpenAI کار کند.
-**حافظه مکالمه** - تاریخچه چت را با MessageWindowChatMemory پیگیری کنید ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
+**حافظه مکالمه** – پیگیری تاریخچه چت با MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -124,18 +124,18 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-حافظه را با `withMaxMessages(10)` ایجاد کنید تا ۱۰ پیام آخر را نگه دارد. پیامهای کاربر و هوش مصنوعی را با پوششهای تایپ شده `UserMessage.from(text)` و `AiMessage.from(text)` اضافه کنید. تاریخچه را با `memory.messages()` بازیابی کنید و به مدل ارسال کنید. این سرویس نمونههای حافظه جداگانه به ازای هر شناسه مکالمه ذخیره میکند، که به چند کاربر اجازه میدهد به طور همزمان گفتگو کنند.
+با `withMaxMessages(10)` حافظه را میسازید تا ۱۰ پیام اخیر را حفظ کند. پیامهای کاربر و هوش مصنوعی را با کپسولهای نوعی شده میافزایید: `UserMessage.from(text)` و `AiMessage.from(text)`. تاریخچه را با `memory.messages()` دریافت کرده و به مدل ارسال میکنید. سرویس نمونههای حافظه جداگانه برای هر شناسه مکالمه نگه میدارد تا چندین کاربر بتوانند همزمان گفتگو کنند.
-> **🤖 امتحان کنید با گفتگوی [GitHub Copilot](https://github.com/features/copilot):** فایل [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) را باز کنید و بپرسید:
-> - «MessageWindowChatMemory چگونه تصمیم میگیرد کدام پیامها را وقتی پنجره پر است حذف کند؟»
-> - «آیا میتوانم ذخیرهسازی حافظه سفارشی با استفاده از پایگاه داده به جای حافظه درونبرنامهای پیاده کنم؟»
-> - «چگونه میتوانم خلاصهسازی برای فشردهسازی تاریخچه قدیمی مکالمه اضافه کنم؟»
+> **🤖 امتحان با چت [GitHub Copilot](https://github.com/features/copilot):** فایل [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) را باز کرده و بپرسید:
+> - "MessageWindowChatMemory چگونه تصمیم میگیرد وقتی پنجره پر است کدام پیامها را حذف کند؟"
+> - "آیا میتوانم حافظه سفارشی را با استفاده از پایگاه داده به جای درونحافظهای پیادهسازی کنم؟"
+> - "چگونه میتوانم خلاصهسازی برای فشردهسازی تاریخچه قدیمی مکالمه اضافه کنم؟"
-نقطه پایان چت ایستا حافظه را به کلی رد میکند — فقط `chatModel.chat(prompt)` مانند شروع سریع. نقطه پایان دارای وضعیت پیامها را به حافظه اضافه میکند، تاریخچه را بازیابی میکند و آن زمینه را با هر درخواست میفرستد. همان پیکربندی مدل، الگوهای متفاوت.
+نقطه پایان چت بدون وضعیت کاملاً حافظه را نادیده میگیرد - به سادگی `chatModel.chat(prompt)` مانند راهاندازی سریع. نقطه پایان دارای وضعیت پیامها را به حافظه اضافه میکند، تاریخچه را بازیابی کرده و آن زمینه را با هر درخواست میفرستد. پیکربندی مدل یکسان است، ولی الگوها متفاوتند.
## استقرار زیرساخت Azure OpenAI
-**Bash:**
+**بش:**
```bash
cd 01-introduction
azd up # اشتراک و مکان را انتخاب کنید (eastus2 توصیه میشود)
@@ -144,21 +144,21 @@ azd up # اشتراک و مکان را انتخاب کنید (eastus2 توصی
**PowerShell:**
```powershell
cd 01-introduction
-azd up # اشتراک و موقعیت را انتخاب کنید (پیشنهاد شده: eastus2)
+azd up # اشتراک و مکان را انتخاب کنید (eastus2 توصیه میشود)
```
-> **توجه:** اگر با خطای زمان انتظار (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`) مواجه شدید، کافی است دوباره `azd up` را اجرا کنید. منابع Azure ممکن است هنوز در پسزمینه در حال آمادهسازی باشند و تلاش مجدد اجازه میدهد استقرار پس از رسیدن منابع به حالت نهایی کامل شود.
+> **توجه:** اگر خطای زمانتمامی (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`) دریافت کردید، کافیست دوباره `azd up` را اجرا کنید. منابع Azure ممکن است هنوز در حال استقرار باشند و تکرار باعث میشود استقرار وقتی منابع به حالت نهایی میرسند تکمیل شود.
-این کارها را انجام خواهد داد:
+این کار موارد زیر را انجام میدهد:
1. استقرار منبع Azure OpenAI با مدلهای GPT-5.2 و text-embedding-3-small
-2. تولید خودکار فایل `.env` در روت پروژه با اعتبارنامهها
-3. تنظیم تمام متغیرهای محیطی لازم
+2. ایجاد خودکار فایل `.env` در ریشه پروژه با مدارک
+3. تنظیم همه متغیرهای محیطی مورد نیاز
-**مشکل در استقرار دارید؟** راهنمای عیبیابی دقیق شامل تعارض نام دامنه فرعی، مراحل استقرار دستی در Azure Portal، و راهنمای پیکربندی مدل را در [Infrastructure README](infra/README.md) ببینید.
+**در صورت بروز مشکل در استقرار:** راهنمای [README زیرساخت](infra/README.md) را ببینید شامل رفع تعارض نام زیردامنه، مراحل استقرار دستی در Azure Portal و راهنمای پیکربندی مدل.
-**بررسی موفقیت استقرار:**
+**تأیید موفقیت استقرار:**
-**Bash:**
+**بش:**
```bash
cat ../.env # باید AZURE_OPENAI_ENDPOINT، API_KEY و غیره را نشان دهد.
```
@@ -168,9 +168,9 @@ cat ../.env # باید AZURE_OPENAI_ENDPOINT، API_KEY و غیره را نشا
Get-Content ..\.env # باید AZURE_OPENAI_ENDPOINT، API_KEY و غیره را نشان دهد.
```
-> **توجه:** دستور `azd up` به صورت خودکار فایل `.env` را ایجاد میکند. اگر بعداً نیاز به بهروزرسانی دارید، میتوانید یا فایل `.env` را به صورت دستی ویرایش کنید یا آن را با اجرای:
+> **توجه:** دستور `azd up` به طور خودکار فایل `.env` را ایجاد میکند. اگر بعداً نیاز به بهروزرسانی داشتید، میتوانید یا به صورت دستی آن را ویرایش کنید یا با اجرای:
>
-> **Bash:**
+> **بش:**
> ```bash
> cd ..
> bash .azd-env.sh
@@ -182,15 +182,15 @@ Get-Content ..\.env # باید AZURE_OPENAI_ENDPOINT، API_KEY و غیره را
> .\.azd-env.ps1
> ```
-## اجرای برنامه بهصورت محلی
+## اجرای برنامه به صورت محلی
-**بررسی استقرار:**
+**تأیید استقرار:**
-اطمینان حاصل کنید فایل `.env` در دایرکتوری ریشه با اعتبارنامههای Azure موجود است. این را از دایرکتوری ماژول (`01-introduction/`) اجرا کنید:
+مطمئن شوید فایل `.env` با مدارک Azure در شاخه ریشه وجود دارد. این فرمان را از پوشه ماژول (`01-introduction/`) اجرا کنید:
-**Bash:**
+**بش:**
```bash
-cat ../.env # باید AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT را نمایش دهد
+cat ../.env # باید AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT را نشان دهد
```
**PowerShell:**
@@ -200,27 +200,27 @@ Get-Content ..\.env # باید AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT ر
**شروع برنامهها:**
-**گزینه ۱: استفاده از Spring Boot Dashboard (توصیه شده برای کاربران VS Code)**
+**گزینه ۱: استفاده از داشبورد Spring Boot (توصیه شده برای کاربران VS Code)**
-dev container شامل افزونه Spring Boot Dashboard است که رابطی بصری برای مدیریت همه برنامههای Spring Boot فراهم میکند. میتوانید آن را در Activity Bar در سمت چپ VS Code پیدا کنید (آیکون Spring Boot را ببینید).
+کانتینر توسعه دارای افزونه Spring Boot Dashboard است که رابط بصری برای مدیریت همه برنامههای Spring Boot فراهم میکند. میتوانید آن را در نوار فعالیت سمت چپ VS Code ببینید (آیکون Spring Boot).
-از Spring Boot Dashboard میتوانید:
+از داشبورد Spring Boot میتوانید:
- همه برنامههای Spring Boot موجود در فضای کاری را ببینید
-- با یک کلیک برنامهها را شروع یا متوقف کنید
+- برنامهها را با یک کلیک شروع/توقف کنید
- لاگهای برنامه را به صورت زنده مشاهده کنید
-- وضعیت برنامهها را نظارت کنید
+- وضعیت برنامه را نظارت کنید
-فقط روی دکمه پلی کنار "introduction" کلیک کنید تا این ماژول شروع شود، یا همه ماژولها را یکجا اجرا کنید.
+کافیست روی دکمه پخش کنار "introduction" کلیک کنید تا این ماژول شروع شود، یا همه ماژولها را همزمان اجرا کنید.
-
+
*داشبورد Spring Boot در VS Code — شروع، توقف و نظارت بر همه ماژولها از یک مکان*
**گزینه ۲: استفاده از اسکریپتهای شل**
-تمام برنامههای وب (ماژولهای ۰۱ تا ۰۴) را اجرا کنید:
+تمام برنامههای وب (ماژولهای ۰۱ تا ۰۴) را شروع کنید:
-**Bash:**
+**بش:**
```bash
cd .. # از دایرکتوری ریشه
./start-all.sh
@@ -228,13 +228,13 @@ cd .. # از دایرکتوری ریشه
**PowerShell:**
```powershell
-cd .. # از فهرست ریشه
+cd .. # از دایرکتوری ریشه
.\start-all.ps1
```
-یا فقط این ماژول را اجرا کنید:
+یا فقط همین ماژول را اجرا کنید:
-**Bash:**
+**بش:**
```bash
cd 01-introduction
./start.sh
@@ -246,11 +246,11 @@ cd 01-introduction
.\start.ps1
```
-هر دو اسکریپت به صورت خودکار متغیرهای محیطی را از فایل `.env` ریشه بارگذاری میکنند و در صورت نبود، فایلهای JAR را میسازند.
+هر دو اسکریپت به صورت خودکار متغیرهای محیطی را از فایل `.env` ریشه بارگذاری میکنند و در صورت عدم وجود، فایلهای JAR را میسازند.
-> **توجه:** اگر ترجیح میدهید همه ماژولها را دستی قبل از شروع بسازید:
+> **توجه:** اگر میخواهید همه ماژولها را به صورت دستی بسازید قبل از شروع:
>
-> **Bash:**
+> **بش:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
@@ -262,11 +262,11 @@ cd 01-introduction
> mvn clean package -DskipTests
> ```
-مرورگر خود را باز کرده و http://localhost:8080 را مشاهده کنید.
+در مرورگر خود http://localhost:8080 را باز کنید.
**برای توقف:**
-**Bash:**
+**بش:**
```bash
./stop.sh # فقط این ماژول
# یا
@@ -277,46 +277,46 @@ cd .. && ./stop-all.sh # همه ماژولها
```powershell
.\stop.ps1 # فقط این ماژول
# یا
-cd ..; .\stop-all.ps1 # همه ماژولها
+cd ..; .\stop-all.ps1 # تمام ماژولها
```
## استفاده از برنامه
-این برنامه یک رابط وب با دو پیادهسازی چت کنار هم فراهم میکند.
+برنامه رابط وب با دو پیادهسازی چت را به صورت کنار هم ارائه میدهد.
-*داشبورد نشاندهنده گزینههای چت ساده (ایستا) و چت مکالمهای (دارای وضعیت)*
+*داشبورد نمایشدهنده هر دو گزینه چت ساده (بدون وضعیت) و چت مکالمهای (دارای وضعیت)*
-### چت ایستا (پنل چپ)
+### چت بدون وضعیت (پنل سمت چپ)
-ابتدا این را امتحان کنید. بگویید «اسم من جان است» و سپس فوراً بپرسید «اسم من چیست؟» مدل به یاد نمیآورد چون هر پیام مستقل است. این نشاندهنده مشکل اصلی ادغام ساده مدلهای زبانی — نبود زمینه مکالمه — است.
+اول این را امتحان کنید. بگویید «اسم من جان است» و بلافاصله بعد بپرسید «اسم من چیست؟» مدل به خاطر نمیآورد چون هر پیام مستقل است. این مشکل اصلی ادغام اولیه مدل زبان است — بدون زمینه مکالمه.
-
+
-*هوش مصنوعی نام شما را از پیام قبلی به یاد نمیآورد*
+*هوش مصنوعی اسم شما را از پیام قبلی به خاطر نمیآورد*
-### چت دارای وضعیت (پنل راست)
+### چت دارای وضعیت (پنل سمت راست)
-اکنون همان دنباله را اینجا امتحان کنید. بگویید «اسم من جان است» و سپس بپرسید «اسم من چیست؟» این بار به یاد دارد. تفاوت MessageWindowChatMemory است — تاریخچه مکالمه را حفظ میکند و با هر درخواست آن را ارسال میکند. این همان کاری است که هوش مصنوعی مکالمهای در تولید انجام میدهد.
+حالا همین دنباله را اینجا امتحان کنید. «اسم من جان است» و سپس «اسم من چیست؟» این بار مدل به خاطر میآورد. تفاوت پیامها توسط MessageWindowChatMemory است - که تاریخچه مکالمه را حفظ کرده و با هر درخواست میفرستد. این همان طریقه کار هوش مصنوعی مکالمهای تولیدی است.
-*هوش مصنوعی نام شما را از ابتدای مکالمه به یاد میآورد*
+*هوش مصنوعی اسم شما را از ابتدای مکالمه به یاد دارد*
-هر دو پنل از همان مدل GPT-5.2 استفاده میکنند. تنها تفاوت حافظه است. این واضح میکند که حافظه چه چیزی به برنامه شما میآورد و چرا برای موارد واقعی ضروری است.
+هر دو پنل از مدل GPT-5.2 یکسان استفاده میکنند. تنها تفاوت حافظه است. این به وضوح نشان میدهد حافظه چه مزیتی به برنامه شما میدهد و چرا برای موارد واقعی ضروری است.
## گامهای بعدی
-**ماژول بعدی:** [۰۲-مهندسی_پرومپت - مهندسی پرومپت با GPT-5.2](../02-prompt-engineering/README.md)
+**ماژول بعدی:** [۰۲-مهندسی پرامپت - مهندسی پرامپت با GPT-5.2](../02-prompt-engineering/README.md)
---
-**ناوبری:** [← قبلی: ماژول ۰۰ - شروع سریع](../00-quick-start/README.md) | [بازگشت به اصلی](../README.md) | [بعدی: ماژول ۰۲ - مهندسی پرومپت →](../02-prompt-engineering/README.md)
+**ناوبری:** [← بازگشت به اصلی](../README.md) | [بعدی: ماژول ۰۲ - مهندسی پرامپت →](../02-prompt-engineering/README.md)
---
-**توضیح مهم**:
-این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نواقصی باشد. سند اصلی به زبان بومی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، استفاده از ترجمه حرفهای انسانی توصیه میشود. ما مسئول هیچ گونه سوء تفاهم یا تفسیر نادرستی که از استفاده این ترجمه ناشی شود، نیستیم.
+**سلب مسئولیت**:
+این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوء تفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.
\ No newline at end of file
diff --git a/translations/fa/02-prompt-engineering/README.md b/translations/fa/02-prompt-engineering/README.md
index f5ff7b882..6f05f5786 100644
--- a/translations/fa/02-prompt-engineering/README.md
+++ b/translations/fa/02-prompt-engineering/README.md
@@ -2,100 +2,100 @@
## فهرست مطالب
-- [مرور ویدیو](../../../02-prompt-engineering)
-- [آنچه خواهید آموخت](../../../02-prompt-engineering)
-- [پیشنیازها](../../../02-prompt-engineering)
-- [درک مهندسی پرامپت](../../../02-prompt-engineering)
-- [مبانی مهندسی پرامپت](../../../02-prompt-engineering)
- - [پرامپت بدون نمونه (Zero-Shot)](../../../02-prompt-engineering)
- - [پرامپت با نمونههای محدود (Few-Shot)](../../../02-prompt-engineering)
- - [زنجیره فکری (Chain of Thought)](../../../02-prompt-engineering)
- - [پرامپت مبتنی بر نقش](../../../02-prompt-engineering)
- - [قالبهای پرامپت](../../../02-prompt-engineering)
-- [الگوهای پیشرفته](../../../02-prompt-engineering)
-- [اجرای برنامه](../../../02-prompt-engineering)
-- [اسکرینشاتهای برنامه](../../../02-prompt-engineering)
-- [کاوش الگوها](../../../02-prompt-engineering)
- - [تمایل کم در مقابل تمایل زیاد](../../../02-prompt-engineering)
- - [اجرای کار (پیشگفتارهای ابزار)](../../../02-prompt-engineering)
- - [کد خودبازتابی](../../../02-prompt-engineering)
- - [تحلیل ساختیافته](../../../02-prompt-engineering)
- - [چت چندمرحلهای](../../../02-prompt-engineering)
- - [استدلال گامبهگام](../../../02-prompt-engineering)
- - [خروجی محدود شده](../../../02-prompt-engineering)
-- [آنچه واقعاً میآموزید](../../../02-prompt-engineering)
-- [مرحله بعدی](../../../02-prompt-engineering)
-
-## مرور ویدیو
+- [نمایش ویدئو](#نمایش-ویدئو)
+- [چیزهایی که یاد میگیرید](#چیزهایی-که-یاد-میگیرید)
+- [پیشنیازها](#پیشنیازها)
+- [درک مهندسی پرامپت](#درک-مهندسی-پرامپت)
+- [اصول مهندسی پرامپت](#اصول-مهندسی-پرامپت)
+ - [پرامپت صفر-شات](#پرامپت-صفر-شات)
+ - [پرامپت چند-شات](#پرامپت-چند-شات)
+ - [زنجیره تفکر](#زنجیره-تفکر)
+ - [پرامپت بر اساس نقش](#پرامپت-بر-اساس-نقش)
+ - [قالبهای پرامپت](#قالبهای-پرامپت)
+- [الگوهای پیشرفته](#الگوهای-پیشرفته)
+- [اجرای برنامه](#اجرای-برنامه)
+- [تصاویر برنامه](#تصاویر-برنامه)
+- [کاوش در الگوها](#بررسی-الگوها)
+ - [انگیزه کم در مقابل انگیزه زیاد](#اشتیاق-کم-در-مقابل-اشتیاق-زیاد)
+ - [اجرای وظیفه (مقدمههای ابزار)](#اجرای-کار-پیشنویس-ابزارها)
+ - [کد خودبازتابی](#کد-خودبازتابی)
+ - [تحلیل ساختاریافته](#تحلیل-ساختاریافته)
+ - [چت چند مرحلهای](#چت-چندمرحلهای)
+ - [استدلال مرحله به مرحله](#استدلال-گامبهگام)
+ - [خروجی محدود شده](#خروجی-محدودشده)
+- [آنچه واقعاً یاد میگیرید](#آنچه-واقعاً-یاد-میگیرید)
+- [گامهای بعدی](#مراحل-بعدی)
+
+## نمایش ویدئو
این جلسه زنده را تماشا کنید که توضیح میدهد چگونه با این ماژول شروع کنید:
-## آنچه خواهید آموخت
+## چیزهایی که یاد میگیرید
-نمودار زیر نمای کلی از موضوعات و مهارتهای کلیدی که در این ماژول توسعه خواهید داد را نشان میدهد — از تکنیکهای بهبود پرامپت تا جریان کاری گامبهگام که دنبال خواهید کرد.
+نمودار زیر نمای کلی از موضوعات و مهارتهای کلیدی را که در این ماژول توسعه خواهید داد ارائه میدهد — از تکنیکهای اصلاح پرامپت گرفته تا جریان کاری مرحله به مرحلهای که دنبال خواهید کرد.
-
+
-در ماژولهای قبلی، تعاملات پایه LangChain4j با مدلهای GitHub را بررسی کردید و دیدید که چگونه حافظه AI گفتگو محور با Azure OpenAI را امکانپذیر میکند. حالا تمرکز ما روی نحوه پرسیدن سوالات — خود پرامپتها — با استفاده از GPT-5.2 Azure OpenAI است. نحوه ساختاردهی پرامپتها تأثیر چشمگیری بر کیفیت پاسخهایی که دریافت میکنید دارد. ابتدا تکنیکهای بنیادی پرامپت را مرور میکنیم، سپس به هشت الگوی پیشرفته میپردازیم که از قابلیتهای GPT-5.2 بهطور کامل بهرهمند میشوند.
+در ماژول قبلی، دیدید که چگونه حافظه به هوش مصنوعی مکالمهای با Azure OpenAI امکان میدهد. حالا تمرکز ما روی نحوه پرسیدن سوالات است — خود پرامپتها — با استفاده از GPT-5.2 در Azure OpenAI. نحوه ساختاردهی پرامپتها تأثیر چشمگیری بر کیفیت پاسخهایی که میگیرید دارد. ما با مرور تکنیکهای بنیادی پرامپت شروع میکنیم، سپس به هشت الگوی پیشرفته میپردازیم که از تمام قابلیتهای GPT-5.2 بهره میبرند.
-ما از GPT-5.2 استفاده میکنیم چون کنترل استدلال را معرفی میکند - میتوانید به مدل بگویید چقدر باید قبل از پاسخ فکر کند. این باعث میشود استراتژیهای مختلف پرامپت واضحتر شده و به شما کمک میکند بفهمید کِی و چگونه از هر روش استفاده کنید. همچنین از محدودیت نرخ کمتر Azure برای GPT-5.2 نسبت به مدلهای GitHub بهرهمند میشویم.
+ما از GPT-5.2 استفاده میکنیم زیرا کنترل استدلال را معرفی میکند - میتوانید به مدل بگویید چقدر باید قبل از پاسخ تفکر کند. این باعث میشود استراتژیهای مختلف پرامپت واضحتر شود و به شما کمک میکند بفهمید چه موقع از هر روش استفاده کنید.
## پیشنیازها
- تکمیل ماژول ۰۱ (منابع Azure OpenAI مستقر شده)
-- فایل `.env` در شاخه ریشه با اعتبارنامههای Azure (ساخته شده توسط دستور `azd up` در ماژول ۰۱)
+- فایل `.env` در ریشه دایرکتوری با مدارک Azure (ایجاد شده توسط `azd up` در ماژول ۰۱)
> **توجه:** اگر ماژول ۰۱ را تکمیل نکردهاید، ابتدا دستورالعملهای استقرار آن را دنبال کنید.
## درک مهندسی پرامپت
-در اصل، مهندسی پرامپت تفاوت بین دستورهای مبهم و دقیق است، همانطور که مقایسه زیر نشان میدهد.
+در اصل، مهندسی پرامپت تفاوت بین دستورالعملهای مبهم و دستورالعملهای دقیق است، همانطور که مقایسه زیر نشان میدهد.
-مهندسی پرامپت مربوط به طراحی متنی است که به طور مداوم نتایجی را که نیاز دارید به شما بدهد. فقط پرسیدن سوال نیست — بلکه ساختار دادن درخواستهاست به طوری که مدل دقیقاً بفهمد چه میخواهید و چگونه آن را ارائه دهد.
+مهندسی پرامپت درباره طراحی متن ورودی است که به طور مداوم نتایجی را که نیاز دارید به شما میدهد. فقط پرسیدن سوال نیست - بلکه ساختاربندی درخواستهاست تا مدل دقیقاً بفهمد چه میخواهید و چگونه آن را ارائه دهد.
-این را مانند دادن دستور به یک همکار در نظر بگیرید. "رفع اشکال کن" گنگ است. "رفع خطای null pointer در UserService.java خط ۴۵ با افزودن بررسی null" دقیق است. مدلهای زبانی نیز همینطور کار میکنند — دقت و ساختار اهمیت دارد.
+به آن مثل دادن دستورالعمل به یک همکار فکر کنید. "اشکال را رفع کن" مبهم است. "رفع خطای اشارهگر null در UserService.java خط ۴۵ با افزودن بررسی null" دقیق است. مدلهای زبانی نیز به همین صورت کار میکنند - دقت و ساختار اهمیت دارد.
-نمودار زیر نشان میدهد که چگونه LangChain4j در این تصویر جای میگیرد — الگوهای پرامپت شما را از طریق واحدهای ساختاری SystemMessage و UserMessage به مدل متصل میکند.
+نمودار زیر نشان میدهد چگونه LangChain4j در این تصویر قرار میگیرد — الگوهای پرامپت شما را از طریق بلوکهای ساختاری SystemMessage و UserMessage به مدل متصل میکند.
-
+
-LangChain4j زیرساختها را فراهم میکند — اتصال به مدلها، حافظه، و انواع پیامها — در حالی که الگوهای پرامپت صرفاً متنهای ساختارمندی هستند که از طریق این زیرساخت ارسال میشوند. واحدهای سازنده کلیدی `SystemMessage` (که رفتار و نقش AI را مشخص میکند) و `UserMessage` (که درخواست واقعی شما را حمل میکند) هستند.
+LangChain4j زیرساختها را فراهم میکند — ارتباطات مدل، حافظه، و انواع پیام — در حالی که الگوهای پرامپت فقط متون ساختاربندی شدهای هستند که از طریق این زیرساخت ارسال میکنید. بلوکهای کلیدی `SystemMessage` (که رفتار و نقش AI را تعیین میکند) و `UserMessage` (که درخواست واقعی شما را حمل میکند) هستند.
-## مبانی مهندسی پرامپت
+## اصول مهندسی پرامپت
-پنج تکنیک اصلی زیر پایههای مهندسی پرامپت مؤثر را تشکیل میدهند. هر یک جنبهای متفاوت از چگونگی ارتباط شما با مدلهای زبانی را پوشش میدهند.
+پنج تکنیک اصلی زیر اساس مهندسی پرامپت موثر را تشکیل میدهند. هر کدام جنبه متفاوتی از نحوه ارتباط شما با مدلهای زبانی را پوشش میدهند.
-
+
-قبل از پرداختن به الگوهای پیشرفته در این ماژول، بیایید پنج تکنیک بنیادی پرامپت را مرور کنیم. اینها بلوکهای ساختاری هستند که هر مهندس پرامپت باید بشناسد. اگر قبلاً ماژول [شروع سریع](../00-quick-start/README.md#2-prompt-patterns) را کار کردهاید، اینها را در عمل دیدهاید — در اینجا چارچوب مفهومی پشت آنها آورده شده است.
+قبل از پرداختن به الگوهای پیشرفته در این ماژول، بیایید پنج تکنیک بنیادی پرامپت را مرور کنیم. اینها بلوکهای ساختمانی هستند که هر مهندس پرامپت باید بداند.
-### پرامپت بدون نمونه (Zero-Shot Prompting)
+### پرامپت صفر-شات
-سادهترین روش: به مدل دستوری مستقیم بدون هیچ مثالی بدهید. مدل به طور کامل بر آموزش خود تکیه میکند تا وظیفه را بفهمد و اجرا کند. این برای درخواستهای ساده که رفتار مورد انتظار واضح است، خوب کار میکند.
+سادهترین رویکرد: به مدل یک دستور مستقیم بدون هیچ مثالی بدهید. مدل کاملاً بر اساس آموزش خود متکی است تا کار را بفهمد و اجرا کند. این برای درخواستهای ساده که رفتار مورد انتظار واضح است به خوبی کار میکند.
-
+
-*دستور مستقیم بدون نمونه — مدل تنها از دستور، وظیفه را استنتاج میکند*
+*دستور مستقیم بدون مثال — مدل فقط از روی دستور کار را استنباط میکند*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
String response = model.chat(prompt);
-// پاسخ: «مثبت»
+// پاسخ: "مثبت"
```
+
+**زمان استفاده:** دستهبندیهای ساده، سوالات مستقیم، ترجمهها، یا هر کار که مدل میتواند بدون راهنمایی اضافی انجام دهد.
-**زمان استفاده:** طبقهبندیهای ساده، سوالات مستقیم، ترجمهها یا هر وظیفهای که مدل بدون راهنمایی بیشتر میتواند انجام دهد.
+### پرامپت چند-شات
-### پرامپت با نمونههای محدود (Few-Shot Prompting)
+مثالهایی ارائه دهید که الگوی مورد نظر را به مدل نشان میدهد. مدل فرمت ورودی-خروجی مورد انتظار را از نمونهها یاد میگیرد و آن را به ورودیهای جدید اعمال میکند. این به طور قابل توجهی انسجام را برای کارهایی که فرمت یا رفتار دلخواه واضح نیست، افزایش میدهد.
-نمونههایی ارائه دهید که الگویی که میخواهید مدل دنبال کند را نشان میدهد. مدل قالب ورودی-خروجی مورد انتظار را از نمونههای شما یاد میگیرد و آن را روی ورودیهای جدید اعمال میکند. این باعث افزایش ثبات در وظایفی میشود که قالب یا رفتار مطلوب واضح نیست.
+
-
-
-*یادگیری از نمونهها — مدل الگو را تشخیص داده و روی ورودیهای جدید اعمال میکند*
+*یادگیری از مثالها — مدل الگو را شناسایی کرده و برای ورودیهای جدید اعمال میکند*
```java
String prompt = """
@@ -111,16 +111,16 @@ String prompt = """
""";
String response = model.chat(prompt);
```
+
+**زمان استفاده:** دستهبندیهای سفارشی، قالببندی سازگار، کارهای حوزه خاص، یا زمانی که نتایج صفر-شات ناپایدار است.
-**زمان استفاده:** طبقهبندیهای سفارشی، قالبدهی یکنواخت، وظایف حوزه-محور یا هنگامی که نتایج zero-shot ناپایدار هستند.
-
-### زنجیره فکری (Chain of Thought)
+### زنجیره تفکر
-از مدل بخواهید که استدلال خود را گامبهگام نشان دهد. به جای پریدن مستقیم به پاسخ، مدل مسئله را تفکیک کرده و هر بخش را به صورت صریح بررسی میکند. این دقت در مسائل ریاضی، منطق، و استدلال چندمرحلهای را ارتقا میدهد.
+از مدل بخواهید استدلال خود را قدم به قدم نشان دهد. به جای رفتن مستقیم به پاسخ، مدل مسئله را تقسیم کرده و هر قسمت را به صورت صریح پیش میبرد. این دقت را در مسائل ریاضی، منطق و استدلال چند مرحلهای بهبود میبخشد.
-
+
-*استدلال گامبهگام — تقسیم مسائل پیچیده به مراحل منطقی صریح*
+*استدلال مرحله به مرحله — تقسیم مسائل پیچیده به گامهای منطقی صریح*
```java
String prompt = """
@@ -130,18 +130,18 @@ String prompt = """
Let's solve this step-by-step:
""";
String response = model.chat(prompt);
-// مدل نشان میدهد: ۷ = ۸ - ۱۵، سپس ۱۹ = ۱۲ + ۷ سیبها
+// مدل نشان میدهد: ۱۵ - ۸ = ۷، سپس ۷ + ۱۲ = ۱۹ سیب
```
+
+**زمان استفاده:** مسائل ریاضی، معماهای منطقی، رفع اشکال، یا هر کاری که نشان دادن فرآیند استدلال دقت و اعتماد را بالا میبرد.
-**زمان استفاده:** مسائل ریاضی، معماهای منطقی، اشکالزدایی، یا هر وظیفهای که نشان دادن روند استدلال دقت و اعتماد را بهبود میبخشد.
+### پرامپت بر اساس نقش
-### پرامپت مبتنی بر نقش
+قبل از پرسیدن سوال، شخصیتی یا نقشی برای AI تعیین کنید. این زمینهای فراهم میکند که لحن، عمق، و تمرکز پاسخ را شکل میدهد. یک "معمار نرمافزار" مشاوره متفاوتی نسبت به "توسعهدهنده مبتدی" یا "ممیزی امنیتی" میدهد.
-قبل از پرسیدن سوال، شخصیتی یا نقشی برای AI تعریف کنید. این زمینهای فراهم میکند که لحن، عمق، و تمرکز پاسخ را شکل میدهد. «معمار نرمافزار» مشاوره متفاوتی نسبت به «توسعهدهنده تازهکار» یا «بازرس امنیت» میدهد.
+
-
-
-*تنظیم زمینه و نقش — همان سوال با توجه به نقش تعیینشده پاسخ متفاوت میگیرد*
+*تعیین زمینه و شخصیت — همان سوال پاسخ متفاوتی بسته به نقش تعیین شده میگیرد*
```java
String prompt = """
@@ -156,16 +156,16 @@ String prompt = """
""";
String response = model.chat(prompt);
```
-
-**زمان استفاده:** بررسی کدها، آموزش، تحلیلهای حوزهمحور یا زمانی که به پاسخهای متناسب با سطح تخصص یا دیدگاه خاص نیاز دارید.
+
+**زمان استفاده:** بازبینی کد، تدریس، تحلیل حوزه خاص، یا هر زمانی که نیاز به پاسخهای متناسب با سطح تخصص یا دیدگاه خاص باشد.
### قالبهای پرامپت
-پرامپتهای قابل استفاده مجدد با جایگزینهایی برای متغیرها بسازید. به جای نوشتن پرامپت جدید هر بار، یک قالب یکبار تعریف کنید و مقادیر متفاوت پر کنید. کلاس `PromptTemplate` در LangChain4j این کار را با نحو `{{variable}}` آسان میکند.
+پرامپتهای قابل استفاده مجدد با جایگزینهای متغیر بسازید. به جای نوشتن پرامپت جدید هر بار، یک قالب تعریف کنید و مقادیر مختلف را پر کنید. کلاس `PromptTemplate` در LangChain4j این کار را با نحو `{{variable}}` آسان میکند.
-*پرامپتهای قابل استفاده مجدد با جایگزینهای متغیر — یک قالب، چندین کاربرد*
+*پرامپتهای قابل استفاده مجدد با جایگزینهای متغیر — یک قالب، استفادههای متعدد*
```java
PromptTemplate template = PromptTemplate.from(
@@ -179,28 +179,28 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-
-**زمان استفاده:** پرسشهای تکراری با ورودیهای متفاوت، پردازش دستهای، ساخت جریانهای کاری AI قابل استفاده مجدد، یا هر موقعیتی که ساختار پرامپت ثابت و دادهها متغیر باشند.
+
+**زمان استفاده:** پرسشهای تکراری با ورودیهای مختلف، پردازش دستهای، ساخت جریانهای کاری AI قابل استفاده مجدد، یا هر موقعیتی که ساختار پرامپت یکسان میماند ولی دادهها تغییر میکنند.
---
-این پنج مبنا ابزار قابل اعتمادی را برای اکثر وظایف پرامپت در اختیار شما میگذارند. بقیه این ماژول بر اساس آنها هشت الگوی پیشرفته را ارائه میدهد که کنترل استدلال، خودارزیابی، و قابلیتهای خروجی ساختیافته GPT-5.2 را به کار میگیرند.
+این پنج اصل یک جعبه ابزار محکم برای اکثر کارهای پرامپت به شما میدهد. بقیه این ماژول بر اساس آنها با **هشت الگوی پیشرفته** ساخته شده است که کنترل استدلال، خودارزیابی، و قابلیتهای خروجی ساختاریافته GPT-5.2 را به کار میگیرند.
## الگوهای پیشرفته
-پس از پوشش مبانی، به هشت الگوی پیشرفته میرسیم که این ماژول را منحصر به فرد میکنند. همه مشکلات نیاز به همان روش ندارند. برخی سوالات پاسخهای سریع میخواهند، برخی دیگر تفکر عمیق. برخی نیاز به نمایش استدلال دارند، برخی فقط به نتایج نیازمندند. هر الگو برای سناریوی متفاوتی بهینه شده — و کنترل استدلال GPT-5.2 تفاوتها را برجستهتر میکند.
+پس از پوشش اصول، بیایید به هشت الگوی پیشرفته بپردازیم که این ماژول را منحصر به فرد میکند. همه مسائل به یک روش نیاز ندارند. برخی سوالات نیاز به پاسخ سریع دارند، برخی به تفکر عمیق. بعضی به استدلال قابل مشاهده نیاز دارند، برخی فقط نتایج. هر الگو به سناریویی متفاوت بهینه شده است — و کنترل استدلال GPT-5.2 این تفاوتها را بیش از پیش نمایان میکند.
-
+
-*مروری بر هشت الگوی مهندسی پرامپت و کاربردهای آنها*
+*نمای کلی هشت الگوی مهندسی پرامپت و موارد استفاده آنها*
-GPT-5.2 بعد جدیدی به این الگوها اضافه میکند: *کنترل استدلال*. اسلایدر زیر نشان میدهد چطور میتوانید میزان تلاش فکری مدل را تنظیم کنید — از پاسخهای سریع و مستقیم تا تحلیل عمیق و کامل.
+GPT-5.2 بعد دیگری به این الگوها اضافه میکند: *کنترل استدلال*. لغزنده زیر نشان میدهد چگونه میتوانید میزان تفکر مدل را تنظیم کنید — از پاسخهای سریع و مستقیم تا تحلیل عمیق و دقیق.
-*کنترل استدلال GPT-5.2 به شما اجازه میدهد تعیین کنید مدل چقدر باید فکر کند — از پاسخهای سریع و مستقیم تا کاوش عمیق*
+*کنترل استدلال GPT-5.2 اجازه میدهد مشخص کنید مدل چقدر باید فکر کند — از پاسخهای سریع تا کاوش عمیق*
-**تمایل کم (سریع و متمرکز)** - برای سوالات ساده که میخواهید پاسخهای سریع و مستقیم بگیرید. مدل حداقل استدلال میکند - حداکثر ۲ مرحله. این را برای محاسبات، جستجوها، یا سوالات ساده استفاده کنید.
+**انگیزه کم (سریع و متمرکز)** - برای سوالات ساده که پاسخهای سریع و مستقیم میخواهید. مدل حداقل استدلال میکند - حداکثر ۲ مرحله. این را برای محاسبات، جستجوها، یا سوالات ساده به کار ببرید.
```java
String prompt = """
@@ -218,13 +218,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
+
+> 💡 **کشف با GitHub Copilot:** فایل [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) را باز کنید و بپرسید:
+> - "تفاوت الگوهای پرامپت انگیزه کم و انگیزه زیاد چیست؟"
+> - "چطور تگهای XML در پرامپتها به ساختاردهی پاسخ AI کمک میکنند؟"
+> - "کی باید از الگوهای خودبازتابی استفاده کنم و کی از دستور مستقیم؟"
-> 💡 **با GitHub Copilot کاوش کنید:** فایل [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) را باز کنید و بپرسید:
-> - "فرق الگوهای تمایل کم و تمایل زیاد در پرامپت چیست؟"
-> - "چگونه برچسبهای XML در پرامپت به ساختار پاسخ AI کمک میکنند؟"
-> - "چه زمانی باید از الگوهای خودبازتابی استفاده کنم و چه زمانی از دستور مستقیم؟"
-
-**تمایل زیاد (عمیق و دقیق)** - برای مشکلات پیچیده که نیاز به تحلیل جامع دارید. مدل عمیق کاوش کرده و استدلال دقیق نشان میدهد. این را برای طراحی سیستم، تصمیمات معماری، یا تحقیقات پیچیده استفاده کنید.
+**انگیزه زیاد (عمیق و دقیق)** - برای مسائل پیچیده که تحلیل جامعی میخواهید. مدل به طور کامل کاوش میکند و استدلال دقیق نشان میدهد. این را برای طراحی سیستم، تصمیمات معماری، یا پژوهش پیچیده استفاده کنید.
```java
String prompt = """
@@ -237,8 +237,8 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-
-**اجرای کار (پیشرفت گامبهگام)** - برای جریانهای کاری چندمرحلهای. مدل یک برنامه اولیه ارائه میدهد، هر گام را هنگام اجرا روایت میکند، سپس خلاصهای میدهد. این را برای مهاجرتها، پیادهسازیها، یا هر فرایند چندمرحلهای استفاده کنید.
+
+**اجرای وظیفه (پیشرفت مرحله به مرحله)** - برای جریانهای کاری چند مرحلهای. مدل برنامهای مقدماتی میدهد، هر مرحله را در حین کار روایت میکند، سپس خلاصه ارائه میدهد. این را برای مهاجرتها، پیادهسازیها، یا هر فرایند چند مرحلهای استفاده کنید.
```java
String prompt = """
@@ -275,21 +275,21 @@ String prompt = """
String response = chatModel.chat(prompt);
```
+
+پرامپت زنجیره تفکر به صراحت از مدل میخواهد فرآیند استدلال خود را نشان دهد، که دقت را در کارهای پیچیده افزایش میدهد. تقسیمبندی مرحله به مرحله به انسان و AI کمک میکند منطق را بفهمند.
-پرامپت زنجیره فکری از مدل میخواهد روند استدلال خود را آشکار کند که دقت را برای وظایف پیچیده افزایش میدهد. تقسیمبندی گامبهگام باعث میشود هم انسانها و هم AI منطق را بهتر درک کنند.
-
-> **🤖 با چت [GitHub Copilot](https://github.com/features/copilot) امتحان کنید:** درباره این الگو بپرسید:
-> - "چگونه الگوی اجرای کار را برای عملیات طولانیمدت سازگار کنم؟"
-> - "بهترین روش ساختاردهی پیشگفتارهای ابزار در برنامههای تولیدی چیست؟"
-> - "چگونه پیشرفت میانی را در UI ضبط و نمایش دهم؟"
+> **🤖 با چت [GitHub Copilot](https://github.com/features/copilot) امتحان کنید:** درباره این الگو سوال کنید:
+> - "چگونه الگوی اجرای وظیفه را برای عملیات طولانیمدت تطبیق دهم؟"
+> - "بهترین روشها برای ساختاردهی مقدمههای ابزار در برنامههای تولیدی چیست؟"
+> - "چطور میتوانم بهروزرسانیهای پیشرفت میانی را در یک رابط کاربری ضبط و نمایش دهم؟"
-نمودار زیر جریان کار برنامهریزی → اجرا → خلاصه را نشان میدهد.
+نمودار زیر این جریان کاری برنامهریزی → اجرا → خلاصهسازی را نشان میدهد.
-
+
-*جریان برنامهریزی → اجرا → خلاصه برای وظایف چندمرحلهای*
+*جریان کاری برنامهریزی → اجرا → خلاصهسازی برای کارهای چند مرحلهای*
-**کد خودبازتابی** - برای تولید کد با کیفیت تولید. مدل کدی تولید میکند که استانداردهای تولید، از جمله مدیریت خطا، را رعایت میکند. هنگام ساخت ویژگیها یا سرویسهای جدید از این استفاده کنید.
+**کد خودبازتابی** - برای تولید کد با کیفیت تولید. مدل کدی میسازد که استانداردهای تولید را دنبال میکند با مدیریت خطای مناسب. این را هنگام ساخت ویژگیها یا سرویسهای جدید استفاده کنید.
```java
String prompt = """
@@ -299,14 +299,14 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-
-نمودار زیر این چرخه بهبود تکراری را نمایش میدهد — تولید کد، ارزیابی، شناسایی ضعفها، و اصلاح تا زمانی که کد به استاندارد تولید برسد.
+
+نمودار زیر این حلقه بهبود تکراری را نشان میدهد — تولید، ارزیابی، شناسایی ضعفها، و بازبینی تا کد به استانداردهای تولید برسد.
-*چرخه بهبود تکراری - تولید، ارزیابی، شناسایی مشکلات، بهبود، تکرار*
+*حلقه بهبود تکراری - تولید، ارزیابی، شناسایی مشکلات، بهبود، تکرار*
-**تحلیل ساختیافته** - برای ارزیابی یکنواخت. مدل کد را با چارچوبی ثابت بررسی میکند (درستی، شیوهها، عملکرد، امنیت، قابلیت نگهداری). این را برای بررسی کد یا ارزیابی کیفیت استفاده کنید.
+**تحلیل ساختاریافته** - برای ارزیابی سازگار. مدل کد را با استفاده از چارچوبی ثابت (درستی، شیوهها، عملکرد، امنیت، نگهداری) بررسی میکند. این را برای بازبینی کد یا ارزیابی کیفیت استفاده کنید.
```java
String prompt = """
@@ -353,19 +353,19 @@ String prompt = """
String response = chatModel.chat(prompt);
```
+
+> **🤖 با چت [GitHub Copilot](https://github.com/features/copilot) امتحان کنید:** درباره تحلیل ساختاریافته سوال کنید:
+> - "چگونه میتوانم چارچوب تحلیل را برای انواع مختلف بازبینی کد سفارشی کنم؟"
+> - "بهترین روش برای پردازش و اعمال خروجی ساختاریافته به صورت برنامهنویسی چیست؟"
+> - "چگونه میتوانم اطمینان حاصل کنم سطوح شدت در جلسات بازبینی مختلف سازگار است؟"
-> **🤖 با چت [GitHub Copilot](https://github.com/features/copilot) امتحان کنید:** درباره تحلیل ساختیافته بپرسید:
-> - "چگونه چارچوب تحلیل را برای انواع بررسی کد متفاوت سفارشی کنم؟"
-> - "بهترین روش برای تجزیه و استفاده از خروجی ساختاریافته به صورت برنامهنویسی چیست؟"
-> - "چگونه سطوح شدت را در جلسات بررسی مختلف به طور یکنواخت تضمین کنم؟"
-
-نمودار زیر نشان میدهد چگونه این چارچوب ساختیافته یک بررسی کد را به دستههای سازگار با سطوح شدت تقسیم میکند.
+نمودار زیر نشان میدهد چگونه این چارچوب ساختاریافته، بازبینی کد را به دستهبندیهای سازگار با سطوح شدت سازماندهی میکند.
-
+
-*چارچوب برای بررسی کد یکنواخت با سطوح شدت*
+*چارچوب بازبینی کد سازگار با سطوح شدت*
-**چت چندمرحلهای** - برای گفتگوهایی که نیاز به زمینه دارند. مدل پیامهای قبلی را به یاد میآورد و بر آنها بنا میکند. این را برای جلسات کمک تعاملی یا پرسش و پاسخهای پیچیده استفاده کنید.
+**چت چند مرحلهای** - برای گفتگوهایی که نیاز به محتوا دارند. مدل پیامهای قبلی را به خاطر میسپارد و بر اساس آنها میسازد. این را برای جلسات کمک تعاملی یا پرسش و پاسخ پیچیده به کار ببرید.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -378,13 +378,14 @@ memory.add(UserMessage.from("Show me an example"));
AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-
-نمودار زیر نشان میدهد چگونه زمینه گفتگو با هر نوبت جمع میشود و چطور با محدودیت توکن مدل مرتبط است.
+
+نمودار زیر نشان میدهد چگونه زمینه مکالمه با هر مرحله جمع میشود و چگونه به محدودیت توکن مدل مرتبط است.
-*چگونه زمینه گفتگو در چند نوبت تجمع مییابد تا به حد توکن برسد*
-**دلیلیابی مرحلهبهمرحله** - برای مسائلی که منطق قابل مشاهده نیاز دارند. مدل برای هر مرحله دلیلیابی صریح ارائه میدهد. از این برای مسائل ریاضی، معماهای منطقی یا زمانی که نیاز به درک فرآیند فکری دارید استفاده کنید.
+*چگونه زمینه مکالمه در چندین مرحله تجمع مییابد تا به محدودیت توکن برسد*
+
+**استدلال مرحله به مرحله** - برای مسائلی که نیاز به منطق قابل مشاهده دارند. مدل استدلال صریح برای هر مرحله را نشان میدهد. این را برای مسائل ریاضی، معماهای منطقی، یا زمانی که باید فرآیند تفکر را درک کنید استفاده کنید.
```java
String prompt = """
@@ -397,14 +398,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
+
+نمودار زیر نشان میدهد چگونه مدل مسائل را به گامهای منطقی شمارهگذاری شده و صریح تقسیم میکند.
-نمودار زیر نشان میدهد چگونه مدل مسائل را به مراحل منطقی شمارهگذاریشده و صریح تقسیم میکند.
+
+*شکستن مسائل به گامهای منطقی صریح*
-
-
-*تقسیم مسائل به مراحل منطقی صریح*
-
-**خروجی محدود شده** - برای پاسخهایی با الزامات قالببندی خاص. مدل بهدقت قوانین قالب و طول را رعایت میکند. از این برای خلاصهها یا زمانی که به ساختار دقیق خروجی نیاز دارید استفاده کنید.
+**خروجی محدودشده** - برای پاسخهایی با الزامات قالببندی خاص. مدل دقیقاً از قوانین قالب و طول پیروی میکند. این حالت را برای خلاصهها یا وقتی نیاز به ساختار دقیق خروجی دارید، استفاده کنید.
```java
String prompt = """
@@ -420,17 +420,17 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-نمودار زیر نشان میدهد چگونه محدودیتها مدل را هدایت میکنند تا خروجی مطابق با قالب و الزامات طول ارائه دهد.
+نمودار زیر نشان میدهد چگونه محدودیتها مدل را هدایت میکنند تا خروجی دقیقاً مطابق با الزامات قالب و طول شما تولید کند.
-
+
-*اجرای الزامات خاص قالب، طول و ساختار*
+*اجرای الزامات قالب، طول و ساختار خاص*
## اجرای برنامه
**بررسی استقرار:**
-اطمینان حاصل کنید فایل `.env` در شاخه ریشه با اطلاعات اعتبارنامه Azure وجود دارد (ایجاد شده در طول ماژول ۰۱). این را از دایرکتوری ماژول (`02-prompt-engineering/`) اجرا کنید:
+اطمینان حاصل کنید فایل `.env` در ریشه پروژه وجود دارد و دارای مجوزهای Azure است (که در ماژول ۰۱ ایجاد شده است). این دستور را از دایرکتوری ماژول (`02-prompt-engineering/`) اجرا کنید:
**Bash:**
```bash
@@ -442,29 +442,29 @@ cat ../.env # باید AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT را نما
Get-Content ..\.env # باید AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT را نشان دهد
```
-**راهاندازی برنامه:**
+**شروع برنامه:**
-> **توجه:** اگر قبلاً همه برنامهها را با استفاده از `./start-all.sh` از دایرکتوری ریشه (همانطور که در ماژول ۰۱ توضیح داده شده) شروع کردهاید، این ماژول قبلاً روی پورت ۸۰۸۳ در حال اجرا است. میتوانید دستورات شروع زیر را رد کنید و مستقیماً به http://localhost:8083 بروید.
+> **توجه:** اگر از قبل همه برنامهها را با دستور `./start-all.sh` از ریشه (مطابق با ماژول ۰۱) اجرا کردهاید، این ماژول روی پورت 8083 در حال اجراست. میتوانید اجرای دستورات شروع زیر را رد کنید و مستقیماً به http://localhost:8083 بروید.
-**گزینه ۱: استفاده از Spring Boot Dashboard (توصیه شده برای کاربران VS Code)**
+**گزینه ۱: استفاده از Spring Boot Dashboard (مورد پیشنهاد کاربران VS Code)**
-کانتینر توسعه شامل افزونه Spring Boot Dashboard است که رابط کاربری بصری برای مدیریت همه برنامههای Spring Boot فراهم میکند. میتوانید آن را در نوار فعالیت در سمت چپ VS Code (به دنبال آیکون Spring Boot) پیدا کنید.
+کانتینر توسعه شامل افزونه Spring Boot Dashboard است که یک رابط بصری برای مدیریت همه برنامههای Spring Boot فراهم میکند. این افزونه را در نوار فعالیت در سمت چپ VS Code میتوانید بیابید (آیکون Spring Boot را جستجو کنید).
-از طریق Spring Boot Dashboard میتوانید:
-- همه برنامههای Spring Boot موجود در فضای کاری را مشاهده کنید
-- برنامهها را با یک کلیک شروع/توقف کنید
-- لاگهای برنامه را بهصورت زنده ببینید
+از Spring Boot Dashboard میتوانید:
+- تمام برنامههای Spring Boot موجود در فضای کاری را ببینید
+- برنامهها را فقط با یک کلیک شروع/توقف کنید
+- لاگهای برنامه را به صورت زنده مشاهده کنید
- وضعیت برنامه را مانیتور کنید
-فقط روی دکمه پخش کنار "prompt-engineering" کلیک کنید تا این ماژول شروع شود، یا همه ماژولها را یکجا شروع کنید.
+فقط روی دکمه پخش کنار «prompt-engineering» کلیک کنید تا این ماژول شروع شود، یا همه ماژولها را همزمان اجرا کنید.
-
+
-*داشبورد Spring Boot در VS Code — شروع، توقف و مدیریت همه ماژولها از یک محل*
+*داشبورد Spring Boot در VS Code — شروع، توقف و نظارت بر همه ماژولها از یک محل*
**گزینه ۲: استفاده از اسکریپتهای شل**
-تمام برنامههای وب (ماژولهای ۰۱ تا ۰۴) را شروع کنید:
+همه برنامههای وب (ماژولهای ۰۱ تا ۰۴) را شروع کنید:
**Bash:**
```bash
@@ -474,11 +474,11 @@ cd .. # از دایرکتوری ریشه
**PowerShell:**
```powershell
-cd .. # از دایرکتوری ریشه
+cd .. # از فهرست اصلی
.\start-all.ps1
```
-یا فقط این ماژول را شروع کنید:
+یا فقط این ماژول را اجرا کنید:
**Bash:**
```bash
@@ -492,9 +492,9 @@ cd 02-prompt-engineering
.\start.ps1
```
-هر دو اسکریپت بهطور خودکار متغیرهای محیطی را از فایل `.env` ریشه بارگذاری میکنند و در صورت عدم وجود JAR ها را میسازند.
+هر دو اسکریپت به صورت خودکار متغیرهای محیطی را از فایل `.env` ریشه بارگذاری میکنند و در صورت عدم وجود، فایلهای JAR را میسازند.
-> **توجه:** اگر میخواهید قبل از شروع همه ماژولها را دستی بسازید:
+> **توجه:** اگر ترجیح میدهید قبل از شروع، همه ماژولها را به صورت دستی بسازید:
>
> **Bash:**
> ```bash
@@ -508,9 +508,9 @@ cd 02-prompt-engineering
> mvn clean package -DskipTests
> ```
-مرورگر خود را باز کرده و به http://localhost:8083 بروید.
+در مرورگر خود http://localhost:8083 را باز کنید.
-**برای توقف برنامه:**
+**برای توقف:**
**Bash:**
```bash
@@ -526,83 +526,83 @@ cd .. && ./stop-all.sh # همه ماژولها
cd ..; .\stop-all.ps1 # همه ماژولها
```
-## اسکرینشاتهای برنامه
+## تصاویر برنامه
-در اینجا رابط اصلی ماژول prompt engineering است که میتوانید همزمان با هر هشت الگو آزمایش کنید.
+در اینجا رابط اصلی ماژول مهندسی پرامپت نمایش داده شده است، جایی که میتوانید با همه هشت الگو کنار هم آزمایش کنید.
-
+
-*داشبورد اصلی که هر ۸ الگوی مهندسی درخواست را با ویژگیها و موارد کاربرد آنها نشان میدهد*
+*داشبورد اصلی نشاندهنده هر ۸ الگوی مهندسی پرامپت به همراه ویژگیها و موارد استفادهشان*
-## کاوش الگوها
+## بررسی الگوها
-رابط وب به شما اجازه میدهد تا با استراتژیهای مختلف درخواست آزمایش کنید. هر الگو مسائل متفاوتی را حل میکند — آنها را امتحان کنید تا ببینید هر رویکرد چه زمانی اثر میکند.
+رابط وب به شما اجازه میدهد با استراتژیهای مختلف پرامپت آزمایش کنید. هر الگو مسائل متفاوتی را حل میکند - آنها را امتحان کنید و ببینید هر کدام چه زمانی بهترین عملکرد را دارند.
-> **توجه: پخش زنده در مقایسه با غیرپخش زنده** — هر صفحه الگو دو دکمه دارد: **🔴 پاسخ زنده (Stream Response)** و گزینه **غیرپخش زنده**. پخش زنده از Server-Sent Events (SSE) برای نمایش لحظهای توکنها همزمان با تولید مدل استفاده میکند، بنابراین پیشرفت بلافاصله قابل مشاهده است. گزینه غیرپخش زنده منتظر میماند تا پاسخ کامل تولید شود قبل از نمایش. برای درخواستهایی که استدلال عمیق لازم دارند (مثل High Eagerness، Self-Reflecting Code)، تماس غیرپخش زنده ممکن است بسیار طولانی شود — گاهی حتی دقیقهها — بدون بازخورد بصری. **هنگام آزمایش با درخواستهای پیچیده از پخش زنده استفاده کنید** تا مدل را در حال کار ببینید و از تصور تایماوت درخواست جلوگیری کنید.
+> **توجه: پخش زنده در مقابل غیر زنده** — هر صفحه الگو دو دکمه دارد: **🔴 پخش پاسخ (زنده)** و گزینهای برای حالت **غیر زنده**. پخش زنده از رویدادهای ارسالی سرور (SSE) برای نمایش توکنها به صورت زنده استفاده میکند، بنابراین شما پیشرفت را بلافاصله میبینید. حالت غیرزنده کل پاسخ را منتظر میماند تا نمایش دهد. برای پرامپتهایی که به استدلال عمیق نیاز دارند (مثلاً High Eagerness، Self-Reflecting Code) تماس غیرزنده ممکن است بسیار طول بکشد — گاهی دقیقهها — بدون اینکه بازخوردی ظاهر شود. **هنگام آزمایش پرامپتهای پیچیده از پخش زنده استفاده کنید** تا مدل را در حال کار ببینید و از فرض اتمام زمان درخواست جلوگیری کنید.
>
-> **توجه: نیازمندی مرورگر** — ویژگی پخش زنده از Fetch Streams API (`response.body.getReader()`) استفاده میکند که نیاز به مرورگر کامل (Chrome, Edge, Firefox, Safari) دارد. این در Simple Browser داخلی VS Code کار نمیکند زیرا وبویو آن از ReadableStream API پشتیبانی نمیکند. اگر از Simple Browser استفاده کنید، دکمههای غیرپخش زنده بهطور معمول کار میکنند — فقط دکمههای پخش زنده تحت تاثیر هستند. برای تجربه کامل `http://localhost:8083` را در مرورگر خارجی باز کنید.
+> **توجه: نیاز مرورگر** — قابلیت پخش زنده از Fetch Streams API (`response.body.getReader()`) استفاده میکند که به مرورگر کامل (Chrome, Edge, Firefox, Safari) نیاز دارد. این قابلیت در Simple Browser تعبیه شده در VS Code کار نمیکند، زیرا وبویو آن API ReadableStream را پشتیبانی نمیکند. اگر از Simple Browser استفاده میکنید، دکمههای غیرزنده به طور عادی کار میکنند — فقط دکمههای پخش زنده تحتتأثیر هستند. برای تجربه کامل، `http://localhost:8083` را در یک مرورگر خارجی باز کنید.
-### Eagerness کم در مقابل زیاد
+### اشتیاق کم در مقابل اشتیاق زیاد
-یک سوال ساده مثل "۱۵٪ از ۲۰۰ چقدر است؟" با Eagerness کم بپرسید. پاسخ فوری و مستقیم دریافت میکنید. حالا یک سوال پیچیده مانند "طراحی استراتژی کشینگ برای یک API پرترافیک" با Eagerness زیاد بپرسید. روی **🔴 پاسخ زنده (Stream Response)** کلیک کنید و مشاهدۀ دلیلیابی دقیق مدل را توکنبهتوکن ببینید. مدل همان است، ساختار سوال همان است — اما درخواست نشان میدهد چقدر باید فکر کند.
+سؤال سادهای مثل «۱۵٪ از ۲۰۰ چقدر است؟» را با اشتیاق کم بپرسید. پاسخ سریع و مستقیم دریافت میکنید. اکنون یک سؤال پیچیده مثل «یک استراتژی کشینگ برای یک API پر ترافیک طراحی کن» را با اشتیاق زیاد بپرسید. روی **🔴 پخش پاسخ (زنده)** کلیک کنید و شاهد استدلال دقیق مدل به صورت توکن به توکن خواهید بود. مدل یکسان، ساختار سؤال یکسان — اما پرامپت مشخص میکند چقدر فکر کند.
-### اجرای وظایف (پیشگفتار ابزار)
+### اجرای کار (پیشنویس ابزارها)
-گردشهای کار چندمرحلهای از برنامهریزی اولیه و روایت پیشرفت بهره میبرند. مدل توضیح میدهد چه میکند، هر مرحله را روایت میکند و سپس نتایج را خلاصه میکند.
+فرآیندهای چندمرحلهای از برنامهریزی مقدماتی و روایت پیشرفت بهره میبرند. مدل توضیح میدهد چه کاری خواهد کرد، هر گام را شرح میدهد و سپس نتایج را خلاصه میکند.
### کد خودبازتابی
-مثلاً "ایجاد سرویس اعتبارسنجی ایمیل" را امتحان کنید. به جای فقط تولید کد و توقف، مدل کد را تولید، بر اساس معیارهای کیفیت ارزیابی، نقاط ضعف را شناسایی و بهبود میدهد. میبینید که تا رسیدن به استانداردهای تولید چندین بار تکرار میکند.
+«یک سرویس اعتبارسنجی ایمیل بساز» را امتحان کنید. مدل فقط به تولید کد اکتفا نمیکند بلکه آن را ارزیابی میکند، نقاط ضعف را شناسایی و بهبود میبخشد. میبینید که تا رسیدن کد به سطح کیفیت تولید تکرار میشود.
### تحلیل ساختاریافته
-بازبینی کد به چارچوبهای ارزیابی ثابت نیاز دارد. مدل کد را با استفاده از دستهبندیهای ثابت (درستی، روشها، عملکرد، امنیت) با سطوح شدت تحلیل میکند.
+نقد کد نیاز به چارچوبهای ارزیابی ثابت دارد. مدل کد را با دستهبندیهای مشخص (درستی، شیوهها، عملکرد، امنیت) و با درج سطوح شدت تحلیل میکند.
### چت چندمرحلهای
-سوال "Spring Boot چیست؟" را بپرسید، سپس بلافاصله ادامه دهید با "یک مثال نشان بده". مدل سوال اول شما را به خاطر میسپارد و یک مثال Spring Boot خاص ارائه میدهد. بدون حافظه، سوال دوم خیلی مبهم بود.
+سؤال «Spring Boot چیست؟» را بپرسید و بلافاصله دنبال آن «مثالی نشان بده» را بپرسید. مدل سؤال اول را به خاطر میسپارد و مثال مربوط به Spring Boot را میدهد. بدون حافظه، سؤال دوم بسیار مبهم بود.
-### دلیلیابی مرحلهبهمرحله
+### استدلال گامبهگام
-یک مسئله ریاضی انتخاب کنید و آن را هم با دلیلیابی مرحله به مرحله و هم با Eagerness کم امتحان کنید. Eagerness کم فقط پاسخ را میدهد — سریع اما مبهم. حالت مرحله به مرحله هر محاسبه و تصمیم را نشان میدهد.
+یک مسئله ریاضی انتخاب کنید و آن را با استدلال گامبهگام و اشتیاق کم امتحان کنید. اشتیاق کم فقط پاسخ را سریع میدهد — سریع اما مبهم؛ استدلال گامبهگام هر محاسبه و تصمیم را نشان میدهد.
-### خروجی محدود شده
+### خروجی محدودشده
-وقتی به فرمت خاص یا تعداد دقیق کلمات نیاز دارید، این الگو پیروی دقیق را تضمین میکند. مثلا تولید خلاصهای با دقیقاً ۱۰۰ کلمه در قالب فهرستوار.
+وقتی به فرمت یا تعداد کلمات خاص نیاز دارید، این الگو رعایت دقیق آن را اجباری میکند. مثلاً تولید خلاصهای دقیقاً با ۱۰۰ کلمه به صورت نقطهگذاری شده.
-## چیزی که واقعاً یاد میگیرید
+## آنچه واقعاً یاد میگیرید
**تلاش استدلال همه چیز را تغییر میدهد**
-GPT-5.2 به شما امکان کنترل تلاش محاسباتی را از طریق درخواستهای خود میدهد. تلاش کم به پاسخهای سریع با حداقل بررسی منجر میشود. تلاش زیاد یعنی مدل زمان میگذارد تا عمیق فکر کند. شما یاد میگیرید میزان تلاش را متناسب با پیچیدگی وظیفه تطبیق دهید — زمان خود را برای سوالات ساده تلف نکنید، اما تصمیمهای پیچیده را نیز شتابزده نگیرید.
+GPT-5.2 به شما اجازه میدهد از طریق پرامپتها کنترل تلاش محاسباتی را به دست بگیرید. تلاش کم یعنی پاسخهای سریع با حداقل بررسی. تلاش زیاد یعنی مدل زمان صرف تفکر عمیق میکند. شما یاد میگیرید تلاش را با پیچیدگی کارها تطبیق دهید — برای پرسشهای ساده وقت تلف نکنید اما در تصمیمات پیچیده عجله نکنید.
**ساختار رفتار را هدایت میکند**
-توجه کنید به تگهای XML در درخواستها؟ آنها فقط تزئینی نیستند. مدلها دستورالعملهای ساختاریافته را پایدارتر از متن آزاد دنبال میکنند. وقتی به فرآیندهای چندمرحلهای یا منطق پیچیده نیاز دارید، ساختار به مدل کمک میکند جایگاه خود را پیگیری کند و بداند مرحله بعدی چیست. نمودار زیر یک درخواست ساختاریافته را باز میکند و نشان میدهد چگونه تگهایی مانند ``, ``, ``, ``, و `` دستورالعملها را به بخشهای واضح تقسیم میکنند.
+متوجه تگهای XML در پرامپتها شدهاید؟ اینها تزئینی نیستند. مدلها دستورالعملهای ساختاریافته را بهتر از متن آزاد دنبال میکنند. وقتی به فرآیندهای چندمرحلهای یا منطق پیچیده نیاز دارید، ساختار کمک میکند مدل بداند کجاست و بعد چه باید بکند. نمودار زیر یک پرامپت خوب ساختار یافته را نشان میدهد که چگونه تگهایی مانند ``, ``, ``, ``, و `` دستورالعملها را به بخشهای واضح تقسیم میکند.
-
+
-*آناتومی یک درخواست خوب ساختار یافته با بخشهای واضح و سازماندهی به سبک XML*
+*آناتومی یک پرامپت ساختارمند با بخشهای واضح و سازماندهی به سبک XML*
**کیفیت از طریق خودارزیابی**
-الگوهای خودبازتابی با بیان صریح معیارهای کیفیت کار میکنند. به جای امید به درست انجام دادن مدل، به آن دقیقاً میگویید “درست” یعنی چه: منطق صحیح، مدیریت خطا، عملکرد، امنیت. سپس مدل میتواند خروجی خود را ارزیابی و بهبود دهد. این تولید کد را از شانس به یک فرایند تبدیل میکند.
+الگوهای خودبازتابی با صراحت معیارهای کیفیت را بیان میکنند. به جای اینکه امیدوار باشید مدل «درست انجام دهد»، به آن دقیقاً میگویید «درست» یعنی چه: منطق صحیح، مدیریت خطا، عملکرد، امنیت. مدل سپس میتواند خروجی خود را ارزیابی و بهبود دهد. این باعث میشود تولید کد به جای قرعهکشی، به یک فرآیند تبدیل شود.
-**زمینه محدود است**
+**متن محدود است**
-گفتگوهای چندمرحلهای با افزودن تاریخچه پیامها به هر درخواست کار میکنند. اما محدودیت وجود دارد — هر مدل حداکثر تعداد توکن دارد. با رشد گفتگوها، شما به استراتژیهایی نیاز دارید که زمینه مرتبط را نگه دارند بدون اینکه به آن سقف برسند. این ماژول به شما نشان میدهد حافظه چگونه کار میکند؛ بعداً خواهید آموخت چه زمانی خلاصه کنید، چه زمانی فراموش کنید و چه زمانی بازیابی کنید.
+گفتگوهای چندمرحلهای با قرار دادن تاریخچه پیامها در هر درخواست کار میکنند. اما یک حدی دارد — هر مدل تعداد توکنهای محدودی دارد. با رشد مکالمه، باید راهکارهایی برای حفظ زمینه مرتبط بدون عبور از حد پیدا کنید. این ماژول نحوه کار حافظه را نشان میدهد؛ بعداً خواهید آموخت کی خلاصه کنید، کی فراموش کنید و کی بازیابی کنید.
-## گامهای بعدی
+## مراحل بعدی
-**ماژول بعدی:** [03-rag - RAG (تولید افزوده شده بازیابی)](../03-rag/README.md)
+**ماژول بعدی:** [03-rag - تولید تکمیلی به کمک جستجو (RAG)](../03-rag/README.md)
---
-**ناوبری:** [← قبلی: ماژول ۰۱ - مقدمه](../01-introduction/README.md) | [بازگشت به اصلی](../README.md) | [بعدی: ماژول ۰۳ - RAG →](../03-rag/README.md)
+**ناوبری:** [← قبلی: ماژول ۰۱ - معرفی](../01-introduction/README.md) | [بازگشت به اصلی](../README.md) | [بعدی: ماژول ۰۳ - RAG →](../03-rag/README.md)
---
**سلب مسئولیت**:
-این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است حاوی اشکالات یا نادرستیهایی باشند. سند اصلی به زبان بومی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، توصیه میشود از ترجمه حرفهای انسانی استفاده شود. ما در قبال هرگونه سوءتفاهم یا برداشت غلط ناشی از استفاده از این ترجمه مسئولیتی نمیپذیریم.
+این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوء تفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.
\ No newline at end of file
diff --git a/translations/fa/03-rag/README.md b/translations/fa/03-rag/README.md
index ce26a6e0b..23c0e813c 100644
--- a/translations/fa/03-rag/README.md
+++ b/translations/fa/03-rag/README.md
@@ -1,110 +1,109 @@
-# ماژول ۰۳: RAG (تولید افزودهشده با بازیابی)
+# ماژول ۰۳: RAG (تولید تقویتشده با بازیابی)
## فهرست مطالب
-- [نمایش ویدئویی](../../../03-rag)
-- [آنچه خواهید آموخت](../../../03-rag)
-- [پیشنیازها](../../../03-rag)
-- [درک RAG](../../../03-rag)
- - [کدام رویکرد RAG در این آموزش استفاده میشود؟](../../../03-rag)
-- [نحوه کار](../../../03-rag)
- - [پردازش اسناد](../../../03-rag)
- - [ایجاد جاسازیها](../../../03-rag)
- - [جستجوی معنایی](../../../03-rag)
- - [تولید پاسخ](../../../03-rag)
-- [اجرای برنامه](../../../03-rag)
-- [استفاده از برنامه](../../../03-rag)
- - [بارگذاری یک سند](../../../03-rag)
- - [پرسیدن سوالات](../../../03-rag)
- - [بررسی مراجع منبع](../../../03-rag)
- - [آزمایش با سوالات](../../../03-rag)
-- [مفاهیم کلیدی](../../../03-rag)
- - [استراتژی قطعهبندی](../../../03-rag)
- - [امتیازهای شباهت](../../../03-rag)
- - [ذخیرهسازی در حافظه](../../../03-rag)
- - [مدیریت پنجره زمینه](../../../03-rag)
-- [زمانی که RAG اهمیت دارد](../../../03-rag)
-- [گامهای بعدی](../../../03-rag)
-
-## نمایش ویدئویی
-
-این جلسه زنده را تماشا کنید که توضیح میدهد چگونه با این ماژول شروع کنید:
+- [تماشای ویدیو](#تماشای-ویدیو)
+- [آنچه یاد خواهید گرفت](#آنچه-یاد-خواهید-گرفت)
+- [پیشنیازها](#پیشنیازها)
+- [درک RAG](#درک-rag)
+ - [کدام رویکرد RAG در این آموزش استفاده میشود؟](#کدام-رویکرد-rag-در-این-آموزش-استفاده-میشود؟)
+- [نحوه کارکرد](#نحوه-کارکرد)
+ - [پردازش سند](#پردازش-سند)
+ - [ایجاد تعبیهها](#ایجاد-تعبیهها)
+ - [جستجوی معنایی](#جستجوی-معنایی)
+ - [تولید پاسخ](#تولید-پاسخ)
+- [اجرای برنامه](#اجرای-برنامه)
+- [استفاده از برنامه](#استفاده-از-برنامه)
+ - [بارگذاری سند](#بارگذاری-سند)
+ - [پرسیدن سوال](#پرسیدن-سوالات)
+ - [بررسی منابع](#بررسی-مراجع-منبع)
+ - [آزمایش با سوالات](#آزمایش-با-سوالات-مختلف)
+- [مفاهیم کلیدی](#مفاهیم-کلیدی)
+ - [استراتژی تکهبندی](#استراتژی-تقسیم-بخشها)
+ - [امتیازهای شباهت](#امتیازهای-شباهت)
+ - [ذخیرهسازی در حافظه](#ذخیرهسازی-در-حافظه)
+ - [مدیریت پنجره متن](#مدیریت-پنجره-زمینه)
+- [زمان اهمیت RAG](#کی-rag-اهمیت-دارد)
+- [گامهای بعدی](#مراحل-بعدی)
+
+## تماشای ویدیو
+
+این جلسه زنده را ببینید که توضیح میدهد چگونه با این ماژول شروع به کار کنید:
-## آنچه خواهید آموخت
+## آنچه یاد خواهید گرفت
-در ماژولهای قبلی، یاد گرفتهاید چگونه با هوش مصنوعی گفتگو کنید و ساختار درخواستهای خود را بهطور مؤثر تنظیم کنید. اما یک محدودیت اساسی وجود دارد: مدلهای زبانی فقط آنچه در طی آموزش یاد گرفتهاند را میدانند. آنها نمیتوانند به سوالات مربوط به سیاستهای شرکت شما، مستندات پروژهتان یا هر اطلاعاتی که آموزش ندیدهاند پاسخ دهند.
+در ماژولهای قبلی یاد گرفتید چگونه با هوش مصنوعی گفتگو کنید و پرامپتهای خود را بهطور مؤثر ساختاربندی کنید. اما یک محدودیت بنیادی وجود دارد: مدلهای زبانی فقط آنچه را در حین آموزش یاد گرفتهاند میدانند. آنها نمیتوانند به سوالاتی درباره سیاستهای شرکت شما، مستندات پروژهتان، یا هر اطلاعاتی که روی آن آموزش ندیدهاند پاسخ دهند.
-RAG (تولید افزودهشده با بازیابی) این مشکل را حل میکند. به جای تلاش برای آموزش اطلاعات شما به مدل (که پرهزینه و غیرعملی است)، به مدل توانایی جستجو در اسناد شما داده میشود. وقتی کسی سوالی میپرسد، سیستم اطلاعات مرتبط را پیدا کرده و در درخواست وارد میکند. مدل سپس بر اساس آن زمینه بازیابی شده پاسخ میدهد.
+RAG (تولید تقویتشده با بازیابی) این مشکل را حل میکند. به جای اینکه بخواهید مدل را با اطلاعات خود آموزش دهید (که هزینهبر و غیرعملی است)، به آن توانایی جستجو در اسناد خود را میدهید. وقتی کسی سوالی میپرسد، سیستم اطلاعات مرتبط را پیدا کرده و در پرامپت وارد میکند. سپس مدل بر اساس آن زمینه بازیابیشده پاسخ میدهد.
-به RAG مانند ایجاد یک کتابخانه مرجع برای مدل فکر کنید. وقتی سوالی میپرسید، سیستم:
+RAG را مانند دادن یک کتابخانه مرجع به مدل در نظر بگیرید. وقتی سوال میپرسید، سیستم:
-1. **سوال کاربر** - شما سوالی میپرسید
-2. **جاسازی** - سوال شما را به بردار تبدیل میکند
-3. **جستجوی برداری** - قطعات اسناد مشابه را پیدا میکند
-4. **ترکیب زمینه** - قطعات مرتبط را به درخواست اضافه میکند
-5. **پاسخ** - مدل زبانی پاسخ را بر اساس زمینه تولید میکند
+1. **پرسش کاربر** - شما سوال میپرسید
+2. **تعبیهسازی** - سوال شما به بردار تبدیل میشود
+3. **جستجوی برداری** - بخشهای مشابه سند پیدا میشوند
+4. **گردآوری متن زمینه** - بخشهای مرتبط به پرامپت اضافه میشود
+5. **پاسخ** - مدل زبانی بزرگ پاسخ را بر اساس متن زمینه ایجاد میکند
-این کار پاسخهای مدل را مبتنی بر دادههای واقعی شما میکند به جای تکیه بر دانش آموزش دیده یا تخیل پاسخها.
+این باعث میشود پاسخهای مدل بر اساس دادههای واقعی شما باشد، نه فقط دانستههای آموزشی یا حدسهای غیرواقعی.
## پیشنیازها
-- اتمام [ماژول ۰۰ - شروع سریع](../00-quick-start/README.md) (برای مثال Easy RAG که بعداً در این ماژول به آن اشاره شده است)
-- اتمام [ماژول ۰۱ - مقدمه](../01-introduction/README.md) (منابع Azure OpenAI مستقر شده، شامل مدل جاسازی `text-embedding-3-small`)
-- فایل `.env` در دایرکتوری ریشه با اعتبارنامههای Azure (ایجاد شده توسط فرمان `azd up` در ماژول ۰۱)
+- اتمام [ماژول ۰۱ - معرفی](../01-introduction/README.md) (استقرار منابع Azure OpenAI، شامل مدل تعبیهسازی `text-embedding-3-small`)
+- فایل `.env` در شاخه اصلی با اطلاعات Azure (ایجاد شده توسط دستور `azd up` در ماژول ۰۱)
-> **توجه:** اگر ماژول ۰۱ را کامل نکردهاید، ابتدا دستورالعملهای استقرار آن را دنبال کنید. فرمان `azd up` مدل گپ GPT و مدل جاسازی استفادهشده در این ماژول را مستقر میکند.
+> **توجه:** اگر ماژول ۰۱ را کامل نکردهاید، ابتدا دستورالعملهای استقرار آن را دنبال کنید. دستور `azd up` هر دو مدل گفتگو GPT و مدل تعبیهسازی مورد استفاده این ماژول را مستقر میکند.
## درک RAG
-شکل زیر مفهوم اصلی را نشان میدهد: به جای تکیه صرف بر دادههای آموزشی مدل، RAG یک کتابخانه مرجع از اسناد شما به آن میدهد تا قبل از تولید هر پاسخ، مشورت کند.
+نمودار زیر مفهوم اصلی را نشان میدهد: به جای تکیه صرف بر دادههای آموزشی مدل، RAG به آن یک کتابخانه مرجع از اسناد شما میدهد تا قبل از ایجاد هر پاسخ، به آن مراجعه کند.
-*این نمودار تفاوت بین مدل زبانی استاندارد (که از دادههای آموزشی حدس میزند) و مدل زبانی تقویتشده با RAG (که ابتدا اسناد شما را مرور میکند) را نشان میدهد.*
+*این نمودار تفاوت بین یک مدل زبانی استاندارد (که از دادههای آموزشی حدس میزند) و یک مدل زبانی تقویتشده RAG (که ابتدا به اسناد شما مراجعه میکند) را نشان میدهد.*
-در اینجا نحوه اتصال اجزا به صورت انتها به انتها آورده شده است. سوال کاربر از چهار مرحله عبور میکند — جاسازی، جستجوی برداری، ترکیب زمینه، و تولید پاسخ — که هر کدام بر مرحله قبلی بنا شدهاند:
+اتصالات قطعات سیستم از ابتدا تا انتها به این صورت است. سوال کاربر از چهار مرحله میگذرد — تعبیهسازی، جستجوی برداری، جمعآوری متن زمینه، و تولید پاسخ — که هر مرحله بر مرحله قبل بنا شده است:
-*این نمودار خط لوله RAG انتها به انتها را نشان میدهد — سوال کاربر از جاسازی، جستجوی برداری، ترکیب زمینه و تولید پاسخ عبور میکند.*
+*این نمودار خط لوله انتها به انتهای RAG را نشان میدهد — پرسش کاربر از مراحل تعبیهسازی، جستجوی برداری، جمعآوری متن زمینه و تولید پاسخ عبور میکند.*
-بقیه این ماژول هر مرحله را با جزئیات طی میکند، همراه با کدهایی که میتوانید اجرا و تغییر دهید.
+باقی ماژول هر مرحله را با جزئیات، همراه با کد قابل اجرا و قابل تغییر، بررسی میکند.
### کدام رویکرد RAG در این آموزش استفاده میشود؟
-LangChain4j سه راه برای پیادهسازی RAG ارائه میدهد، هر کدام با سطح انتزاعی متفاوت. نمودار زیر آنها را کنار هم مقایسه میکند:
+LangChain4j سه روش برای پیادهسازی RAG ارائه میدهد، هرکدام با سطح انتزاع متفاوت. نمودار زیر آنها را کنار هم مقایسه میکند:
-*این نمودار سه رویکرد RAG در LangChain4j — آسان، بومی و پیشرفته — را با اجزای کلیدی آنها و زمان مناسب استفاده نشان میدهد.*
+*این نمودار سه رویکرد RAG در LangChain4j — آسان، بومی و پیشرفته — را نشان میدهد، بخشهای کلیدی و زمان استفاده از هرکدام را توضیح میدهد.*
-| رویکرد | کاری که انجام میدهد | معایب |
+| رویکرد | چه کاری انجام میدهد | مصالحه |
|---|---|---|
-| **Easy RAG** | همه چیز را خودکار با `AiServices` و `ContentRetriever` لینک میکند. شما یک اینترفیس حاشیهنویسی میکنید، یک بازیابیکننده اضافه میکنید و LangChain4j جاسازی، جستجو و ترکیب زمینه را پشت صحنه مدیریت میکند. | حداقل کد، اما نمیبینید در هر مرحله چه اتفاقی میافتد. |
-| **Native RAG** | مدل جاسازی را صدا میزنید، در فروشگاه جستجو میکنید، درخواست را میسازید و پاسخ را خودتان تولید میکنید — هر مرحله به صورت صریح و جداگانه. | کد بیشتر، ولی هر مرحله قابل مشاهده و قابل تغییر است. |
-| **Advanced RAG** | از چارچوب `RetrievalAugmentor` با تبدیلکنندههای پرسوجو، روتورها، رتبهبندی مجدد و تزریقکنندههای محتوا برای خط لولههای تولید استفاده میکند. | حداکثر انعطافپذیری، اما پیچیدگی بسیار بیشتر. |
+| **Easy RAG** | همه چیز را به صورت خودکار از طریق `AiServices` و `ContentRetriever` سیمکشی میکند. شما یک رابط را توضیح میدهید، یک بازیاب متصل میکنید و LangChain4j تعبیهسازی، جستجو و جمعآوری پرامپت را پشت صحنه مدیریت میکند. | کمترین کد، اما شما دقیقاً نمیبینید در هر مرحله چه اتفاقی میافتد. |
+| **Native RAG** | خودتان مدل تعبیهسازی را صدا میزنید، فروشگاه را جستجو میکنید، پرامپت را میسازید و پاسخ را تولید میکنید — هر مرحله آشکار و جداگانه. | کد بیشتر، اما هر مرحله قابل مشاهده و تغییر است. |
+| **Advanced RAG** | از چارچوب `RetrievalAugmentor` با تبدیلکنندههای پرسش، مسیریابها، دوباره رتبهبندها و تزریقکنندههای محتوا برای خطلولههای سطح تولید استفاده میکند. | حداکثر انعطافپذیری، اما به مراتب پیچیدهتر. |
-**این آموزش رویکرد Native را به کار میبرد.** هر مرحله از خط لوله RAG — جاسازی پرسوجو، جستجوی فروشگاه برداری، ترکیب زمینه و تولید پاسخ — به صورت واضح در [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) نوشته شده است. این کار عمدی است: به عنوان یک منبع یادگیری، مهمتر است که هر مرحله را ببینید و بفهمید تا کد کمترین اندازه ممکن باشد. زمانی که با نحوه اتصال اجزا آشنا شدید، میتوانید به Easy RAG برای نمونهسازی سریع یا Advanced RAG برای سیستمهای تولید منتقل شوید.
+**این آموزش رویکرد Native را به کار میبرد.** هر مرحله از خط لوله RAG — تعبیهسازی پرسش، جستجوی فروشگاه بردار، جمعآوری متن زمینه، و تولید پاسخ — بهطور صریح در [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) نوشته شده است. این کار عمدی است: به عنوان منبع آموزشی، مهمتر است که شما هر مرحله را ببینید و درک کنید تا اینکه کد به حداقل برسد. وقتی راحت شدید که قطعات چگونه کنار هم مینشینند، میتوانید به Easy RAG برای نمونههای سریع یا Advanced RAG برای سیستمهای تولیدی منتقل شوید.
-> **💡 قبلاً Easy RAG را دیدهاید؟** ماژول [شروع سریع](../00-quick-start/README.md) شامل مثال پرسش و پاسخ اسناد ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)) است که رویکرد Easy RAG را استفاده میکند — LangChain4j به صورت خودکار جاسازی، جستجو و ترکیب زمینه را مدیریت میکند. این ماژول گام بعدی را برداشته و آن خط لوله را باز میکند تا شما هر مرحله را ببینید و کنترل کنید.
+> **💡 کنجکاو درباره Easy RAG؟** LangChain4j همچنین رویکرد *Easy RAG* را ارائه میدهد که در آن `AiServices` و `ContentRetriever` تعبیهسازی، جستجو و جمعآوری پرامپت را به طور خودکار انجام میدهند. این ماژول مسیر واضحتری را میپیماید تا بتوانید هر مرحله را خودتان ببینید و کنترل کنید.
-نمودار زیر خط لوله Easy RAG از آن مثال شروع سریع را نشان میدهد. دقت کنید چگونه `AiServices` و `EmbeddingStoreContentRetriever` همه پیچیدگیها را پنهان میکنند — یک سند بارگذاری میکنید، بازیابیکننده اضافه میکنید، و پاسخ میگیرید. رویکرد بومی در این ماژول هر یک از قدمهای پنهان را باز میکند:
+نمودار زیر خط لوله Easy RAG را نشان میدهد. توجه کنید که چگونه `AiServices` و `EmbeddingStoreContentRetriever` همه پیچیدگیها را پنهان میکنند — شما یک سند بارگذاری میکنید، یک بازیاب متصل میکنید و پاسخ میگیرید. رویکرد بومی در این ماژول هر یک از آن مراحل پنهانشده را باز میکند:
-*این نمودار خط لوله Easy RAG از `SimpleReaderDemo.java` را نشان میدهد. آن را با رویکرد بومی این ماژول مقایسه کنید: Easy RAG جاسازی، بازیابی و ترکیب زمینه را پشت `AiServices` و `ContentRetriever` پنهان میکند — شما یک سند بارگذاری میکنید، بازیابیکننده میزنید و پاسخ میگیرید. رویکرد بومی این ماژول آن خط لوله را باز میکند تا شما خود هر مرحله (جاسازی، جستجو، ترکیب زمینه، تولید) را فراخوانی کنید، از این رو دید و کنترل کامل دارید.*
+*این نمودار خط لوله Easy RAG را نشان میدهد. آن را با رویکرد بومی این ماژول مقایسه کنید: Easy RAG تعبیهسازی، بازیابی و ساخت پرامپت را پشت `AiServices` و `ContentRetriever` مخفی میکند — شما سندی بارگذاری میکنید، بازیابیکنندهای متصل میکنید و پاسخ میگیرید. رویکرد بومی در این ماژول آن خط لوله را باز میکند تا شما هر مرحله (تعبیهسازی، جستجو، جمعآوری متن، تولید) را خودتان صدا بزنید، که دید و کنترل کاملی به شما میدهد.*
-## نحوه کار
+## نحوه کارکرد
-خط لوله RAG در این ماژول به چهار مرحله تقسیم میشود که هر بار کاربر سوالی میپرسد به ترتیب اجرا میشوند. ابتدا یک سند بارگذاری شده، **تجزیه و به قطعات قابل مدیریت تقسیم میشود (chunked)**. سپس این قطعات به **جاسازیهای برداری** تبدیل شده و ذخیره میشوند تا بتوان آنها را به صورت ریاضی مقایسه کرد. وقتی یک پرسوجو میرسد، سیستم یک **جستجوی معنایی** انجام میدهد تا مرتبطترین قطعات را پیدا کند، و در نهایت آنها را به عنوان زمینه به مدل زبانی برای **تولید پاسخ** میدهد. بخشهای زیر هر مرحله را با کد و نمودار واقعی توضیح میدهند. ابتدا به مرحله اول میپردازیم.
+خط لوله RAG در این ماژول به چهار مرحله تقسیم میشود که هر بار یک کاربر سوال میپرسد به ترتیب اجرا میشوند. ابتدا سند بارگذاریشده **تجزیه و به تکههای قابل مدیریت تقسیم میشود**. سپس این تکهها به **بردارهای تعبیه تبدیل** و ذخیره میشوند تا بتوان آنها را به صورت ریاضی مقایسه کرد. وقتی پرسش میرسد، سیستم برای یافتن مرتبطترین تکهها **جستجوی معنایی** انجام میدهد و در نهایت آنها را به عنوان متن زمینه به مدل زبانی بزرگ برای **تولید پاسخ** میفرستد. بخشهای زیر هر مرحله را با کد واقعی و نمودارها بررسی میکنند. ابتدا گام اول را ببینیم.
-### پردازش اسناد
+### پردازش سند
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-وقتی سندی بارگذاری میکنید، سیستم آن را (PDF یا متن ساده) تجزیه میکند، فرادادهای مانند نام فایل به آن اضافه میکند و سپس آن را به قطعات تقسیم میکند — قطعات کوچکتری که به راحتی در پنجره زمینه مدل جا میگیرند. این قطعات کمی همپوشانی دارند تا در مرزها زمینه از بین نرود.
+وقتی سندی بارگذاری میکنید، سیستم آن را (PDF یا متن ساده) تجزیه میکند، متادیتا مانند نام فایل را اضافه میکند و سپس آن را به تکههایی تقسیم میکند — قطعات کوچکتری که به راحتی در پنجره متن مدل جای بگیرند. این تکهها کمی همپوشانی دارند تا زمینه در مرزها از دست نرود.
```java
// فایل بارگذاری شده را تجزیه کرده و در یک سند LangChain4j قرار دهید
@@ -116,30 +115,29 @@ DocumentSplitter splitter = DocumentSplitters
List segments = splitter.split(document);
```
-
-
-نمودار زیر نشان میدهد این کار چگونه به صورت بصری انجام میشود. توجه کنید هر قطعه چند توکن با همسایههایش در آمیخته است — همپوشانی ۳۰ توکنی اطمینان میدهد هیچ زمینه مهمی بین شکافها از دست نرود:
+
+نمودار زیر نحوه کار را به صورت تصویری نشان میدهد. ببینید هر تکه چگونه با همسایگانش برخی توکنها را به اشتراک میگذارد — همپوشانی ۳۰ توکن تضمین میکند که هیچ زمینه مهمی در شکافها از دست نرود:
-*این نمودار سندی را نشان میدهد که به قطعات ۳۰۰ توکنی با ۳۰ توکن همپوشانی تقسیم شده است، و زمینه مرز قطعات حفظ شده است.*
+*این نمودار نشان میدهد چگونه یک سند به تکههای ۳۰۰ توکنی با همپوشانی ۳۰ توکنی تقسیم میشود، و زمینه در مرز تکهها حفظ میشود.*
-> **🤖 امتحان کنید با مکالمه [GitHub Copilot](https://github.com/features/copilot):** فایل [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) را باز کنید و بپرسید:
-> - "چگونه LangChain4j اسناد را به قطعات تقسیم میکند و چرا همپوشانی مهم است؟"
-> - "اندازه بهینه قطعات برای انواع مختلف اسناد چیست و چرا؟"
-> - "چگونه اسناد چندزبانه یا با فرمت خاص را مدیریت کنم؟"
+> **🤖 با [گیتهاب کاپایلوت](https://github.com/features/copilot) گفتگو کنید:** فایل [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) را باز کنید و بپرسید:
+> - "LangChain4j چطور اسناد را به تکههایی تقسیم میکند و چرا همپوشانی مهم است؟"
+> - "اندازه بهینه تکه برای انواع مختلف اسناد چیست و چرا؟"
+> - "چطور با اسناد چندزبانه یا با قالببندی ویژه برخورد کنیم؟"
-### ایجاد جاسازیها
+### ایجاد تعبیهها
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-هر قطعه به یک نمایش عددی به نام جاسازی تبدیل میشود — در واقع تبدیل معانی به اعداد. مدل جاسازی مانند یک مدل گفتگو "هوشمند" نیست؛ نمیتواند دستورالعمل بگیرد، استدلال کند یا پاسخ سوال دهد. کاری که میکند این است که متن را به فضایی ریاضی نقشه میکند که معانی مشابه در کنار هم قرار میگیرند — "ماشین" کنار "اتومبیل"، "سیاست بازپرداخت" کنار "پس گرفتن پولم". مدل گفتگو مانند یک فردی است که با او صحبت میکنید؛ مدل جاسازی سیستم بایگانی بسیار خوبی است.
+هر تکه به یک نمایش عددی به نام تعبیه تبدیل میشود — اساساً یک تبدیل معنا به اعداد. مدل تعبیهسازی هوشمند نیست مانند مدل گفتگویی؛ نمیتواند دستورالعملها را دنبال کند، استدلال کند یا به سوالات پاسخ دهد. کاری که انجام میدهد این است که متن را به فضایی ریاضی نگاشت میکند که معانی مشابه نزدیک هم قرار میگیرند — "car" نزدیک "automobile"، "refund policy" نزدیک "return my money". مدل گفتگویی مانند فردی است که میتوانید با او صحبت کنید؛ مدل تعبیهسازی مانند یک سامانه بایگانی بسیار خوب است.
-نمودار زیر این مفهوم را به تصویر میکشد — متن وارد میشود، بردارهای عددی بیرون میآیند، و معانی مشابه بردارهای نزدیک به هم تولید میکنند:
+نمودار زیر این مفهوم را نمایش میدهد — متن وارد میشود، بردارهای عددی بیرون میآیند و معانی مشابه بردارهای نزدیکی تولید میکنند:
-*این نمودار نشان میدهد چگونه مدل جاسازی متن را به بردارهای عددی تبدیل میکند، معانی مشابه مثل "ماشین" و "اتومبیل" را در فضای برداری نزدیک به هم قرار میدهد.*
+*این نمودار نشان میدهد که یک مدل تعبیهسازی چگونه متن را به بردارهای عددی تبدیل میکند، و معانی مشابه مانند "car" و "automobile" را در فضای بردار نزدیک به هم قرار میدهد.*
```java
@Bean
@@ -154,31 +152,30 @@ public EmbeddingModel embeddingModel() {
EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-
-
-نمودار کلاسی زیر دو جریان جداگانه در خط لوله RAG و کلاسهای LangChain4j که آنها را پیادهسازی میکنند، نشان میدهد. جریان **ورودی** (یک بار هنگام بارگذاری) سند را تقسیم میکند، قطعات را جاسازی میکند و از طریق `.addAll()` ذخیره میکند. جریان **پرسوجو** (هر بار که کاربر سوال میپرسد) سوال را جاسازی میکند، فروشگاه را با `.search()` جستجو میکند، و زمینههای یافته شده را به مدل مکالمه میفرستد. هر دو جریان به رابط مشترک `EmbeddingStore` میرسند:
+
+نمودار کلاس زیر دو جریان جداگانه در خط لوله RAG و کلاسهای LangChain4j را که آنها را پیادهسازی میکنند نشان میدهد. جریان **ورودی** (یکبار در زمان بارگذاری اجرا میشود) سند را تقسیم، تکهها را تعبیهسازی و با `.addAll()` ذخیره میکند. جریان **پرسش** (هر بار که کاربر سوال میپرسد اجرا میشود) سوال را تعبیهسازی، فروشگاه را با `.search()` جستجو و متن مرتبط را به مدل گفتگویی میفرستد. هر دو جریان به رابط مشترک `EmbeddingStore` میرسند:
-*این نمودار دو جریان در خط لوله RAG — ورودی و پرسوجو — و اتصال آنها از طریق EmbeddingStore مشترک را نشان میدهد.*
+*این نمودار دو جریان در خط لوله RAG — ورودی و پرسش — و نحوه اتصال آنها از طریق EmbeddingStore مشترک را نشان میدهد.*
-پس از ذخیره جاسازیها، محتوای مشابه به طور طبیعی در فضای برداری در خوشههای نزدیک قرار میگیرند. تصویر زیر نشان میدهد چگونه اسناد مربوط به موضوعات مرتبط به صورت نقاط نزدیک کنار هم قرار میگیرند که امکان جستجوی معنایی را فراهم میکند:
+وقتی تعبیهها ذخیره شدند، محتوای مشابه به طور طبیعی در فضای بردار کنار هم خوشهبندی میشوند. تصویر زیر نشان میدهد چگونه اسناد مرتبط در نزدیکی یکدیگر به صورت نقاطی کنار هم قرار میگیرند، که امکان جستجوی معنایی را فراهم میکند:
-*این تصویر نشان میدهد چگونه اسناد مرتبط در فضای برداری سهبعدی گرد هم میآیند و موضوعاتی مانند مستندات فنی، قوانین کسبوکار و سوالات متداول گروههای متمایز تشکیل میدهند.*
+*این تصویر خوشهبندی اسناد مرتبط را در فضای سهبعدی بردار نشان میدهد، با موضوعاتی مانند اسناد فنی، قوانین کسبوکار و سوالات متداول که گروههای متمایزی تشکیل میدهند.*
-وقتی کاربری جستجو میکند، سیستم چهار مرحله را دنبال میکند: یک بار اسناد را جاسازی میکند، هر بار پرسوجو را جاسازی میکند، بردار پرسوجو را با همه بردارهای ذخیرهشده با شباهت کسینوسی مقایسه میکند، و بهترین K قطعه با امتیاز بالا را بازمیگرداند. نمودار زیر هر مرحله و کلاسهای LangChain4j مرتبط را نشان میدهد:
+وقتی کاربر جستجو میکند، سیستم چهار گام را طی میکند: اسناد یکبار تعبیه میشوند، پرسش در هر جستجو تعبیه میشود، بردار پرسش با همه بردارهای ذخیرهشده با شباهت کسینوسی مقایسه میشود، و بخشهای برتر نتیجه بازگردانده میشوند. نمودار زیر هر گام و کلاسهای LangChain4j مربوط را نشان میدهد:
-*این نمودار فرایند جستجوی چهار مرحلهای جاسازی را نشان میدهد: جاسازی اسناد، جاسازی پرسوجو، مقایسه بردارها با شباهت کسینوسی، و بازگرداندن نتایج برتر.*
+*این نمودار فرایند جستجوی تعبیه در چهار گام را نشان میدهد: تعبیه اسناد، تعبیه پرسش، مقایسه بردارها با شباهت کسینوسی، و بازگرداندن نتایج برتر.*
### جستجوی معنایی
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-وقتی سوالی میپرسید، سوال شما نیز به یک جاسازی تبدیل میشود. سیستم جاسازی سوال شما را با جاسازی همه قطعات سند مقایسه میکند. قطعاتی که بیشترین معنای مشابه دارند را پیدا میکند - نه فقط کلمات کلیدی که مطابقت دارند، بلکه شباهت معنایی واقعی.
+وقتی سوال میپرسید، خود سوال نیز به تعبیه تبدیل میشود. سیستم تعبیه سوال را با همه تعبیههای تکههای سند مقایسه میکند. تکههایی با معانی مشابه را مییابد — نه فقط مطابقت کلمات کلیدی، بلکه شباهت معنایی واقعی.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -197,29 +194,28 @@ for (EmbeddingMatch match : matches) {
double score = match.score();
}
```
-
-
-نمودار زیر جستجوی معنایی را در مقابل جستجوی سنتی کلمات کلیدی مقایسه میکند. جستجوی کلمه کلیدی برای " وسیله نقلیه" یک قطعه مربوط به "ماشینها و کامیونها" را از دست میدهد، ولی جستجوی معنایی میفهمد آنها یک معنی دارند و آن را به عنوان یک نتیجه با امتیاز بالا بازمیگرداند:
+
+نمودار زیر جستجوی معنایی را با جستجوی سنتی کلمات کلیدی مقایسه میکند. جستجوی کلمه کلیدی "vehicle" یک تکه درباره "cars and trucks" را از دست میدهد، ولی جستجوی معنایی میفهمد که آنها یکی هستند و آن را به عنوان نتیجه با امتیاز بالا برمیگرداند:
-*این نمودار جستجوی مبتنی بر کلمه کلیدی را با جستجوی معنایی مقایسه میکند، نشان میدهد چگونه جستجوی معنایی حتی زمانی که کلمات کلیدی دقیق متفاوتند محتواهای مرتبط مفهومی را بازیابی میکند.*
-در پشت صحنه، شباهت با استفاده از تشابه کسینوس اندازهگیری میشود — اساساً پرسشی مشابه «آیا این دو پیکان به یک جهت اشاره میکنند؟» دو بخش میتوانند کاملاً از کلمات متفاوتی استفاده کنند، اما اگر معنایشان یکی باشد، بردارهایشان به یک سمت اشاره میکنند و نمره نزدیک به ۱.۰ میگیرند:
+*این نمودار جستجوی مبتنی بر کلمات کلیدی را با جستجوی معنایی مقایسه میکند و نشان میدهد چگونه جستجوی معنایی حتی وقتی کلمات کلیدی دقیق متفاوت هستند، محتوای مرتبط مفهومی را بازیابی میکند.*
-
+در پسزمینه، شباهت با استفاده از شباهت کسینوسی اندازهگیری میشود — اساساً سوال میشود "آیا این دو پیکان به یک جهت اشاره میکنند؟" دو تکه میتوانند کلمات کاملاً متفاوتی داشته باشند، ولی اگر معنی یکسانی داشته باشند بردارهایشان به یک سمت اشاره کرده و امتیاز نزدیک ۱.۰ میگیرند:
-*این نمودار تشابه کسینوس را به عنوان زاویه بین بردارهای جاسازی نشان میدهد — بردارهای همراستا نمرهای نزدیک به ۱.۰ کسب میکنند که نشاندهنده شباهت معنایی بالاتر است.*
+
+*این نمودار نشاندهنده شباهت کسینوس بهعنوان زاویه بین بردارهای جاسازی است — بردارهای همراستا امتیاز نزدیکتر به ۱.۰ میگیرند که نشاندهنده شباهت معنایی بالاتر است.*
-> **🤖 امتحان با [GitHub Copilot](https://github.com/features/copilot) Chat:** فایل [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) را باز کنید و بپرسید:
-> - "جستجوی شباهت چگونه با جاسازیها کار میکند و چه چیزی نمره را تعیین میکند؟"
-> - "چه آستانه شباهتی باید استفاده کنم و چگونه روی نتایج تأثیر میگذارد؟"
-> - "چگونه مواردی که اسناد مرتبط پیدا نمیشوند را مدیریت کنم؟"
+> **🤖 امتحان کنید با [GitHub Copilot](https://github.com/features/copilot) Chat:** فایل [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) را باز کنید و بپرسید:
+> - "جستجوی شباهت چگونه با جاسازیها کار میکند و چه چیزی امتیاز را تعیین میکند؟"
+> - "چه حد آستانه شباهتی باید استفاده کنم و چگونه بر نتایج تأثیر میگذارد؟"
+> - "چگونه مواردی که هیچ مدارک مرتبطی یافت نمیشود را مدیریت کنم؟"
### تولید پاسخ
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-مهمترین بخشها در قالب یک پرامپت ساختاریافته که شامل دستورالعملهای صریح، زمینه بازیابیشده و سؤال کاربر است، گردآوری میشوند. مدل این بخشهای مشخص را میخواند و بر اساس آن اطلاعات پاسخ میدهد — فقط میتواند از اطلاعات موجود استفاده کند که از ایجاد توهم جلوگیری میکند.
+مرتبطترین بخشها به یک پرامپت ساختاریافته جمعآوری میشوند که شامل دستورالعملهای صریح، زمینه بازیابیشده و سؤال کاربر است. مدل آن بخشهای خاص را میخواند و بر اساس آن اطلاعات پاسخ میدهد — فقط میتواند از آنچه در مقابلش است استفاده کند، که از ایجاد توهم جلوگیری میکند.
```java
String context = matches.stream()
@@ -239,194 +235,194 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
+
+نمودار زیر این گردآوری را به نمایش میگذارد — بخشهای با بالاترین امتیاز از مرحله جستجو وارد قالب پرامپت میشوند و `OpenAiOfficialChatModel` پاسخ مبتنی بر داده تولید میکند:
-نمودار زیر این فرایند گردآوری را در عمل نشان میدهد — بخشهای با بالاترین امتیاز از مرحله جستجو وارد قالب پرامپت میشوند و `OpenAiOfficialChatModel` پاسخ مبتنی بر داده تولید میکند:
+
-
-
-*این نمودار نشان میدهد چگونه بخشهای با بالاترین امتیاز در یک پرامپت ساختاریافته جمعآوری میشوند و به مدل اجازه میدهد پاسخی مبتنی بر دادههای شما تولید کند.*
+*این نمودار نشان میدهد که چگونه بخشهای با بالاترین امتیاز به یک پرامپت ساختاریافته تبدیل میشوند تا مدل پاسخ مبتنی بر دادههای شما را تولید کند.*
## اجرای برنامه
-**تأیید استقرار:**
+**بررسی استقرار:**
-اطمینان حاصل کنید فایل `.env` در دایرکتوری ریشه با اعتبارنامههای Azure وجود دارد (که در ماژول ۰۱ ایجاد شده است). این دستور را از دایرکتوری ماژول (`03-rag/`) اجرا کنید:
+اطمینان حاصل کنید فایل `.env` در دایرکتوری ریشه با اعتبارات Azure موجود است (ساخته شده در طول ماژول ۰۱). این دستور را از دایرکتوری ماژول (`03-rag/`) اجرا کنید:
-**Bash:**
+**Bash:**
```bash
cat ../.env # باید AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT را نشان دهد
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
-Get-Content ..\.env # باید AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT را نشان دهد
+Get-Content ..\.env # باید AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT را نمایش دهد
```
+
+**راهاندازی برنامه:**
-**اجرای برنامه:**
-
-> **توجه:** اگر قبلاً همه برنامهها را با دستور `./start-all.sh` از ریشه (طبق توضیحات ماژول ۰۱) اجرا کرده باشید، این ماژول هم اکنون روی پورت ۸۰۸۱ در حال اجرا است. میتوانید دستورات شروع زیر را رد کنید و مستقیم به http://localhost:8081 بروید.
+> **توجه:** اگر قبلاً همه برنامهها را با استفاده از `./start-all.sh` از دایرکتوری ریشه (مطابق شرح در ماژول ۰۱) شروع کردهاید، این ماژول هم اکنون روی پورت ۸۰۸۱ اجرا میشود. میتوانید دستورات شروع زیر را رد کرده و مستقیماً به http://localhost:8081 بروید.
**گزینه ۱: استفاده از Spring Boot Dashboard (توصیه شده برای کاربران VS Code)**
-کانتینر توسعه شامل افزونه Spring Boot Dashboard است که رابط کاربری تصویری برای مدیریت همه برنامههای Spring Boot فراهم میکند. آن را در نوار فعالیت سمت چپ VS Code بیابید (آیکون Spring Boot را نگاه کنید).
+کانتینر توسعه شامل افزونه Spring Boot Dashboard است که رابط بصری برای مدیریت همه برنامههای Spring Boot فراهم میکند. در نوار فعالیت سمت چپ VS Code آن را پیدا کنید (نماد Spring Boot را جستجو کنید).
-از طریق Spring Boot Dashboard میتوانید:
-- همه برنامههای Spring Boot موجود در محیط کاری را ببینید
-- برنامهها را با یک کلیک راهاندازی/متوقف کنید
-- لاگهای برنامه را به صورت زنده مشاهده کنید
-- وضعیت برنامهها را پایش کنید
+از Spring Boot Dashboard میتوانید:
+- همه برنامههای Spring Boot موجود در محیط کاری را ببینید
+- برنامهها را با یک کلیک شروع/توقف کنید
+- لاگهای برنامه را به صورت زنده مشاهده کنید
+- وضعیت برنامه را نظارت کنید
-فقط روی دکمه پخش کنار "rag" کلیک کنید تا این ماژول شروع شود، یا همه ماژولها را همزمان راهاندازی نمایید.
+فقط روی دکمه پخش کنار "rag" کلیک کنید تا این ماژول اجرا شود، یا همه ماژولها را همزمان شروع کنید.
-
+
-*این تصویر اسکرینشات داشبورد Spring Boot در VS Code را نشان میدهد که از طریق آن میتوانید برنامهها را به صورت تصویری اجرا، متوقف و پایش کنید.*
+*این اسکرینشات نمای Spring Boot Dashboard در VS Code را نشان میدهد، جایی که میتوانید به صورت بصری برنامهها را شروع، متوقف و نظارت کنید.*
-**گزینه ۲: استفاده از اسکریپتهای شل**
+**گزینه ۲: استفاده از اسکریپتهای خط فرمان**
-همه برنامههای وب (ماژولهای ۰۱-۰۴) را اجرا کنید:
+همه برنامههای وب (ماژولهای ۰۱ تا ۰۴) را اجرا کنید:
-**Bash:**
+**Bash:**
```bash
cd .. # از دایرکتوری ریشه
./start-all.sh
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
cd .. # از دایرکتوری ریشه
.\start-all.ps1
```
+
+یا فقط این ماژول را اجرا کنید:
-یا فقط همین ماژول را اجرا کنید:
-
-**Bash:**
+**Bash:**
```bash
cd 03-rag
./start.sh
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
cd 03-rag
.\start.ps1
```
+
+هر دو اسکریپت متغیرهای محیطی را بهطور خودکار از فایل `.env` ریشه بارگذاری میکنند و در صورت عدم وجود JARها آنها را میسازند.
-هر دو اسکریپت بهطور خودکار متغیرهای محیطی را از فایل `.env` ریشه بارگذاری میکنند و در صورتی که فایل JAR وجود نداشته باشد آن را میسازند.
-
-> **توجه:** اگر ترجیح میدهید قبل از شروع همه ماژولها را به صورت دستی بسازید:
->
-> **Bash:**
+> **توجه:** اگر میخواهید قبل از اجرای آنها همه ماژولها را به صورت دستی بسازید:
+>
+> **Bash:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
->
-> **PowerShell:**
+
+> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-
-آدرس http://localhost:8081 را در مرورگر خود باز کنید.
+
+مرورگر خود را باز کرده و به http://localhost:8081 بروید.
**برای توقف:**
-**Bash:**
+**Bash:**
```bash
./stop.sh # فقط این ماژول
# یا
cd .. && ./stop-all.sh # همه ماژولها
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
.\stop.ps1 # فقط این ماژول
# یا
cd ..; .\stop-all.ps1 # همه ماژولها
```
-
+
## استفاده از برنامه
-برنامه یک رابط وب برای بارگذاری اسناد و پرسشوپاسخ فراهم میکند.
+برنامه رابط وبی برای بارگذاری سند و پرسیدن سوال فراهم میکند.
-
+
-*این تصویر اسکرینشات رابط برنامه RAG را نشان میدهد جایی که میتوانید اسناد بارگذاری کرده و سؤال بپرسید.*
+*این اسکرینشات رابط برنامه RAG را نشان میدهد که در آن میتوانید اسناد را بارگذاری کرده و سوال بپرسید.*
### بارگذاری سند
-با بارگذاری یک سند شروع کنید — فایلهای TXT برای آزمایش بهترین هستند. یک فایل `sample-document.txt` در این دایرکتوری موجود است که شامل اطلاعاتی درباره ویژگیهای LangChain4j، پیادهسازی RAG و بهترین شیوهها است — مناسب برای آزمایش سیستم.
+با بارگذاری یک سند شروع کنید — فایلهای TXT برای آزمایش بهترین عملکرد را دارند. در این پوشه یک فایل `sample-document.txt` موجود است که شامل اطلاعات درباره ویژگیهای LangChain4j، پیادهسازی RAG و بهترین روشها است — مناسب برای تست سیستم.
-سیستم سند شما را پردازش میکند، آن را به بخشهایی تقسیم میکند و جاسازی (embedding) برای هر بخش میسازد. این کار به طور خودکار هنگام بارگذاری انجام میشود.
+سیستم سند شما را پردازش میکند، آن را به بخشهایی تقسیم کرده و برای هر بخش جاسازی ایجاد میکند. این فرآیند هنگام بارگذاری بهطور خودکار انجام میشود.
-### پرسش سؤالها
+### پرسیدن سوالات
-اکنون سؤالهای مشخص درباره محتوای سند بپرسید. سؤالاتی را امتحان کنید که پاسخ قاطع و مشخصی در سند دارند. سیستم بخشهای مرتبط را جستجو میکند، آنها را در پرامپت وارد میکند و پاسخ تولید مینماید.
+حالا سوالات مشخصی درباره محتوای سند بپرسید. چیزی واقعی و آشکار در سند باشد. سیستم بخشهای مرتبط را جستجو میکند، آنها را در پرامپت میگنجاند و پاسخ تولید میکند.
-### بررسی مراجع منابع
+### بررسی مراجع منبع
-متوجه باشید هر پاسخ شامل مراجع منبع به همراه نمرات شباهت است. این نمرات (از ۰ تا ۱) نشان میدهد هر بخش چقدر به سؤال شما مرتبط بوده است. نمرات بالاتر یعنی تطابق بهتر. این امکان را به شما میدهد پاسخ را با محتوای منبع بررسی کنید.
+توجه داشته باشید هر پاسخ شامل مراجع منبع با امتیازهای شباهت است. این امتیازها (از ۰ تا ۱) نشان میدهند هر بخش چقدر به سوال شما مرتبط بوده است. امتیازهای بالاتر به معنای تطابق بهتر است. این به شما امکان میدهد پاسخ را با منبع اصلی بررسی کنید.
-
+
-*این تصویر اسکرینشات نتایج جستجو را نشان میدهد که پاسخ تولید شده، مراجع منبع و نمرات ارتباط برای هر بخش بازیابی شده را نمایش میدهد.*
+*این اسکرینشات نتایج پرسوجو را با پاسخ تولید شده، مراجع منبع و امتیازهای مرتبط برای هر بخش بازیابی شده نشان میدهد.*
-### آزمایش سؤالها
+### آزمایش با سوالات مختلف
-انواع مختلف سؤال را امتحان کنید:
-- حقایق مشخص: «موضوع اصلی چیست؟»
-- مقایسهها: «تفاوت X و Y چیست؟»
-- خلاصهها: «نکات کلیدی درباره Z را خلاصه کن»
+انواع سوالات مختلف را امتحان کنید:
+- حقایق مشخص: "موضوع اصلی چیست؟"
+- مقایسهها: "تفاوت بین X و Y چیست؟"
+- خلاصهها: "نکات کلیدی درباره Z را خلاصه کن"
-مشاهده کنید چگونه نمرات ارتباط بسته به میزان تطابق سؤال شما با محتوای سند تغییر میکند.
+تغییر امتیازهای مرتبط را بر اساس تطابق سوال با محتوای سند مشاهده کنید.
## مفاهیم کلیدی
-### استراتژی بخشبندی
+### استراتژی تقسیم بخشها
-اسناد به بخشهای ۳۰۰ توکنی با ۳۰ توکن همپوشانی تقسیم میشوند. این تعادل اطمینان میدهد که هر بخش زمینه کافی برای معنا دارد در حالی که به اندازه کافی کوچک است تا چندین بخش را در یک پرامپت قرار دهد.
+اسناد به بخشهای ۳۰۰ توکنی با ۳۰ توکن همپوشانی تقسیم میشوند. این تعادل اجازه میدهد هر بخش زمینه کافی برای معنا داشتن داشته باشد و در عین حال کوچک باشد تا چندین بخش در یک پرامپت جا شوند.
-### نمرات شباهت
+### امتیازهای شباهت
-هر بخش بازیابی شده همراه با نمره شباهتی بین ۰ و ۱ است که نشان میدهد چقدر به سؤال کاربر مرتبط است. نمودار زیر بازههای نمره و نحوه استفاده سیستم برای فیلتر کردن نتایج را نشان میدهد:
+هر بخش بازیابی شده همراه با امتیاز شباهتی بین ۰ تا ۱ است که نشان میدهد چقدر به سوال کاربر نزدیک است. نمودار زیر بازههای امتیاز و نحوه استفاده سیستم از آنها برای فیلتر کردن نتایج را نشان میدهد:
-
+
-*این نمودار بازه نمرات از ۰ تا ۱ را نشان میدهد، با آستانه حداقل ۰.۵ که بخشهای نامرتبط را فیلتر میکند.*
+*این نمودار بازه امتیازها از ۰ تا ۱ را نشان میدهد، با حداقل آستانه ۰.۵ که بخشهای نامرتبط را فیلتر میکند.*
-نمرات از ۰ تا ۱ به شرح زیر هستند:
-- ۰.۷-۱.۰: بسیار مرتبط، تطابق دقیق
-- ۰.۵-۰.۷: مرتبط، زمینه خوب
-- کمتر از ۰.۵: فیلتر شده، خیلی متفاوت
+امتیازها بازه ۰ تا ۱ دارند:
+- ۰.۷-۱.۰: خیلی مرتبط، تطابق دقیق
+- ۰.۵-۰.۷: مرتبط، زمینه خوب
+- کمتر از ۰.۵: فیلتر شده، خیلی نامرتبط
-سیستم فقط بخشهایی را بازیابی میکند که بالای آستانه حداقل باشند تا کیفیت حفظ شود.
+سیستم فقط بخشهایی را بازیابی میکند که بالاتر از حداقل آستانه باشند تا کیفیت حفظ شود.
-جاسازیها زمانی که خوشهبندی معنایی واضح باشد خوب عمل میکنند، اما نقاط کور دارند. نمودار زیر حالتهای شکست رایج را نشان میدهد — بخشهایی که خیلی بزرگ هستند بردارهای مبهم تولید میکنند، بخشهای خیلی کوچک زمینه ندارند، اصطلاحات مبهم به چند خوشه اشاره میکنند، و جستجوهای تطابق دقیق (کدها، شماره قطعات) اصلاً با جاسازیها کار نمیکنند:
+جاسازیها زمانی خوب عمل میکنند که معانی به وضوح خوشهبندی شوند، اما نقاط کور دارند. نمودار زیر حالتهای رایج شکست را نشان میدهد — بخشهای خیلی بزرگ بردارهای مبهم ایجاد میکنند، بخشهای خیلی کوچک فاقد زمینه هستند، اصطلاحات مبهم به چندین خوشه اشاره میکنند و جستجوهای تطابق دقیق (شناسهها، شماره قطعات) کاملاً با جاسازیها کار نمیکند:
-
+
-*این نمودار حالتهای شکست رایج جاسازی را نشان میدهد: بخشهای خیلی بزرگ، بخشهای خیلی کوچک، اصطلاحات مبهم که به چند خوشه اشاره دارند، و جستجوهای تطابق دقیق مانند شناسهها.*
+*این نمودار حالتهای رایج شکست جاسازی را نشان میدهد: بخشهای خیلی بزرگ، بخشهای خیلی کوچک، اصطلاحات مبهم که به چندین خوشه اشاره میکنند، و جستجوهای تطابق دقیق مانند شناسهها.*
-### ذخیرهسازی در حافظه موقت
+### ذخیرهسازی در حافظه
-این ماژول برای سادگی از ذخیرهسازی در حافظه موقت استفاده میکند. وقتی برنامه را دوباره راهاندازی کنید، اسناد بارگذاری شده از دست میروند. سیستمهای تولیدی از پایگاه دادههای برداری پایدار مانند Qdrant یا Azure AI Search استفاده میکنند.
+این ماژول برای سادگی از ذخیرهسازی در حافظه استفاده میکند. هنگام راهاندازی مجدد برنامه، اسناد بارگذاری شده از دست میروند. سیستمهای تولیدی از پایگاه دادههای برداری دائمی مانند Qdrant یا Azure AI Search بهره میبرند.
### مدیریت پنجره زمینه
-هر مدل یک پنجره زمینه حداکثر دارد. نمیتوان همه بخشهای یک سند بزرگ را در آن گنجاند. سیستم فقط N بخش مرتبط برتر را بازیابی میکند (پیشفرض ۵) تا در محدوده ظرفیت بماند و همزمان زمینه کافی برای پاسخهای دقیق فراهم کند.
+هر مدل یک پنجره زمینه حداکثری دارد. نمیتوانید هر بخش از یک سند بزرگ را وارد کنید. سیستم بالاترین N بخش مرتبط را بازیابی میکند (پیشفرض ۵) تا در محدودیتها بماند و در عین حال زمینه کافی برای پاسخهای دقیق فراهم گردد.
-## وقتی RAG اهمیت دارد
+## کی RAG اهمیت دارد
-روش RAG همیشه بهترین گزینه نیست. راهنمای تصمیمگیری زیر کمک میکند تشخیص دهید چه زمانی RAG ارزش میافزاید و چه زمانی روشهای سادهتر — مانند وارد کردن محتوا مستقیماً در پرامپت یا تکیه بر دانش داخلی مدل — کافی است:
+RAG همیشه رویکرد مناسب نیست. راهنمای تصمیم زیر به شما کمک میکند تعیین کنید چه زمانی RAG ارزش افزوده دارد و چه زمانی روشهای سادهتر — مانند قرار دادن محتوا مستقیماً در پرامپت یا اعتماد به دانش داخلی مدل — کافی هستند:
-
+
-*این نمودار راهنمای تصمیمگیری درباره زمانهایی که RAG ارزش افزوده ایجاد میکند و زمانهایی که روشهای سادهتر کافیاند را نشان میدهد.*
+*این نمودار راهنمای تصمیمگیری برای زمان استفاده از RAG در مقابل زمان کافی بودن روشهای سادهتر را نشان میدهد.*
-## گامهای بعدی
+## مراحل بعدی
-**ماژول بعدی:** [04-tools - عوامل هوش مصنوعی با ابزارها](../04-tools/README.md)
+**ماژول بعدی:** [04-tools - عاملهای هوش مصنوعی با ابزارها](../04-tools/README.md)
---
@@ -435,6 +431,6 @@ cd ..; .\stop-all.ps1 # همه ماژولها
---
-**سلب مسئولیت**:
-این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما برای دقت تلاش میکنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است دارای خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود، باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، استفاده از ترجمه حرفهای انسانی توصیه میشود. ما مسئول هیچگونه سوءتفاهم یا تفسیر نادرست ناشی از استفاده از این ترجمه نیستیم.
+**سلب مسئولیت**:
+این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوء تفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.
\ No newline at end of file
diff --git a/translations/fa/04-tools/README.md b/translations/fa/04-tools/README.md
index 9d0b31137..fedcbda2c 100644
--- a/translations/fa/04-tools/README.md
+++ b/translations/fa/04-tools/README.md
@@ -1,84 +1,84 @@
-# ماژول ۰۴: عاملهای هوش مصنوعی با ابزارها
+# ماژول ۰۴: عوامل هوش مصنوعی با ابزارها
## فهرست مطالب
-- [مرور ویدئویی](../../../04-tools)
-- [چه چیزهایی یاد خواهید گرفت](../../../04-tools)
-- [پیشنیازها](../../../04-tools)
-- [درک عاملهای هوش مصنوعی با ابزارها](../../../04-tools)
-- [نحوه عملکرد فراخوانی ابزار](../../../04-tools)
- - [تعاریف ابزار](../../../04-tools)
- - [تصمیمگیری](../../../04-tools)
- - [اجرا](../../../04-tools)
- - [تولید پاسخ](../../../04-tools)
- - [معماری: اتصال خودکار در Spring Boot](../../../04-tools)
-- [زنجیرهسازی ابزار](../../../04-tools)
-- [اجرای برنامه](../../../04-tools)
-- [استفاده از برنامه](../../../04-tools)
- - [تست استفاده ساده از ابزار](../../../04-tools)
- - [آزمایش زنجیرهسازی ابزار](../../../04-tools)
- - [مشاهده جریان گفتگو](../../../04-tools)
- - [آزمایش درخواستهای مختلف](../../../04-tools)
-- [مفاهیم کلیدی](../../../04-tools)
- - [الگوی ReAct (استدلال و عمل)](../../../04-tools)
- - [اهمیت توضیحات ابزار](../../../04-tools)
- - [مدیریت جلسه](../../../04-tools)
- - [مدیریت خطا](../../../04-tools)
-- [ابزارهای موجود](../../../04-tools)
-- [چه زمانی باید از عاملهای مبتنی بر ابزار استفاده کرد](../../../04-tools)
-- [ابزارها در مقابل RAG](../../../04-tools)
-- [گامهای بعدی](../../../04-tools)
-
-## مرور ویدئویی
+- [راهنمای ویدئویی](#راهنمای-ویدئویی)
+- [آنچه یاد خواهید گرفت](#آنچه-یاد-خواهید-گرفت)
+- [پیشنیازها](#پیشنیازها)
+- [درک عوامل هوش مصنوعی با ابزارها](#درک-عوامل-هوش-مصنوعی-با-ابزارها)
+- [نحوه کارکرد فراخوانی ابزار](#نحوه-کارکرد-فراخوانی-ابزار)
+ - [تعاریف ابزار](#تعاریف-ابزار)
+ - [تصمیمگیری](#تصمیمگیری)
+ - [اجرا](#اجرا)
+ - [تولید پاسخ](#تولید-پاسخ)
+ - [معماری: اتصال خودکار Spring Boot](#معماری-اتصال-خودکار-spring-boot)
+- [زنجیرهسازی ابزارها](#زنجیرهسازی-ابزارها)
+- [اجرای برنامه](#اجرای-برنامه)
+- [استفاده از برنامه](#استفاده-از-برنامه)
+ - [امتحان استفاده ساده از ابزار](#آزمایش-استفاده-ساده-از-ابزار)
+ - [آزمایش زنجیرهسازی ابزار](#آزمایش-زنجیرهسازی-ابزار)
+ - [مشاهده جریان مکالمه](#مشاهده-جریان-مکالمه)
+ - [آزمایش درخواستهای مختلف](#آزمایش-درخواستهای-مختلف)
+- [مفاهیم کلیدی](#مفاهیم-کلیدی)
+ - [الگوی ReAct (استدلال و عمل)](#الگوی-react-استدلال-و-عمل)
+ - [اهمیت توضیحات ابزار](#توضیحات-ابزار-مهم-است)
+ - [مدیریت جلسه](#مدیریت-نشست)
+ - [مدیریت خطا](#مدیریت-خطا)
+- [ابزارهای در دسترس](#ابزارهای-در-دسترس)
+- [زمان استفاده از عوامل مبتنی بر ابزار](#چه-زمانی-از-عاملهای-مبتنی-بر-ابزار-استفاده-کنیم)
+- [ابزارها در مقابل RAG](#ابزارها-در-مقابل-rag)
+- [گامهای بعدی](#مراحل-بعدی)
+
+## راهنمای ویدئویی
این جلسه زنده را تماشا کنید که توضیح میدهد چگونه با این ماژول شروع کنید:
-
+
-## چه چیزهایی یاد خواهید گرفت
+## آنچه یاد خواهید گرفت
-تا کنون یاد گرفتهاید چگونه با هوش مصنوعی گفتگو کنید، درخواستها را بهطور مؤثر ساختاربندی کنید و پاسخها را بر اساس اسناد خود پایهگذاری نمایید. اما هنوز یک محدودیت اساسی وجود دارد: مدلهای زبان تنها میتوانند متن تولید کنند. آنها نمیتوانند وضعیت آب و هوا را بررسی کنند، محاسبات انجام دهند، پایگاههای داده را جستجو کنند یا با سیستمهای خارجی تعامل داشته باشند.
+تا کنون یاد گرفتهاید چگونه با هوش مصنوعی گفتگو کنید، پرامپتها را به طور مؤثر ساختاربندی کنید و پاسخها را در اسناد خود مستند کنید. اما هنوز یک محدودیت بنیادی وجود دارد: مدلهای زبانی فقط میتوانند متن تولید کنند. آنها نمیتوانند وضعیت آب و هوا را بررسی کنند، محاسبات انجام دهند، پایگاه دادهها را جستجو کنند یا با سیستمهای خارجی تعامل داشته باشند.
-ابزارها این محدودیت را تغییر میدهند. با دادن دسترسی به مدل برای فراخوانی توابع، آن را از یک تولیدکننده متن به عاملی که میتواند اقدامات انجام دهد تبدیل میکنید. مدل تصمیم میگیرد چه زمانی به ابزار نیاز دارد، کدام ابزار را استفاده کند و چه پارامترهایی ارسال کند. کد شما تابع را اجرا کرده و نتیجه را باز میگرداند. مدل آن نتیجه را در پاسخ خود جای میدهد.
+ابزارها این وضعیت را تغییر میدهند. با دادن دسترسی به مدل به عملکردهایی که میتواند آنها را فراخوانی کند، آن را از تولیدکننده متن به عاملی تبدیل میکنید که میتواند عمل کند. مدل تصمیم میگیرد که کی به یک ابزار نیاز دارد، کدام ابزار را استفاده کند و چه پارامترهایی را ارسال نماید. کد شما عملکرد را اجرا کرده و نتیجه را بازمیگرداند. مدل آن نتیجه را در پاسخ خود وارد میکند.
## پیشنیازها
-- تکمیل [ماژول ۰۱ - مقدمه](../01-introduction/README.md) (منابع Azure OpenAI مستقر شدهاند)
-- توصیه میشود ماژولهای قبلی تکمیل شده باشند (این ماژول به [مفاهیم RAG از ماژول ۰۳](../03-rag/README.md) در مقایسه ابزارها در مقابل RAG اشاره دارد)
-- فایل `.env` در دایرکتوری ریشه با اعتبارنامههای Azure (ایجاد شده توسط `azd up` در ماژول ۰۱)
+- تکمیل شده [ماژول ۰۱ - مقدمه](../01-introduction/README.md) (منابع Azure OpenAI مستقر شده)
+- تکمیل ماژولهای قبلی توصیه شده (این ماژول به [مفاهیم RAG از ماژول ۰۳](../03-rag/README.md) در مقایسه ابزارها با RAG اشاره دارد)
+- فایل `.env` در دایرکتوری ریشه با اعتبارنامههای Azure (ایجاد شده با `azd up` در ماژول ۰۱)
-> **توجه:** اگر ماژول ۰۱ را تکمیل نکردید، ابتدا دستورالعملهای استقرار آنجا را دنبال کنید.
+> **توجه:** اگر ماژول ۰۱ را تکمیل نکردهاید، ابتدا از دستورالعملهای استقرار آن پیروی کنید.
-## درک عاملهای هوش مصنوعی با ابزارها
+## درک عوامل هوش مصنوعی با ابزارها
-> **📝 توجه:** در این ماژول اصطلاح «عاملها» به دستیاران هوش مصنوعی مجهز به قابلیت فراخوانی ابزار اشاره دارد. این با الگوهای **Agentic AI** (عاملهای خودکار با برنامهریزی، حافظه و استدلال چندمرحلهای) که در [ماژول ۰۵: MCP](../05-mcp/README.md) پوشش داده خواهد شد، متفاوت است.
+> **📝 توجه:** اصطلاح «عوامل» در این ماژول به دستیاران هوش مصنوعی اشاره دارد که با قابلیتهای فراخوانی ابزار تقویت شدهاند. این با الگوهای **Agentic AI** (عوامل مستقل با برنامهریزی، حافظه و استدلال چندمرحلهای) که در [ماژول ۰۵: MCP](../05-mcp/README.md) پوشش داده میشوند، متفاوت است.
-بدون ابزار، یک مدل زبان فقط میتواند متن تولید کند که بر اساس دادههای آموزشی خودش است. از آن درباره آب و هوای فعلی سؤال کنید، باید حدس بزند. اگر ابزار بدهید، میتواند یک API هواشناسی فراخوانی کند، محاسبات انجام دهد یا پایگاه دادهای را جستجو کند — سپس آن نتایج واقعی را در پاسخ خود بگنجاند.
+بدون ابزار، یک مدل زبانی فقط میتواند متن را از دادههای آموزشی خود تولید کند. از آن بخواهید وضعیت آب و هوا را بگوید، باید حدس بزند. به آن ابزار بدهید و میتواند API وضعیت هوا را فراخوانی کند، محاسبات انجام دهد یا پایگاه داده را جستجو کند — سپس آن نتایج واقعی را در پاسخ خود بگنجاند.
-*بدون ابزار مدل فقط حدس میزند — با ابزار میتواند APIها، محاسبات را اجرا کند و دادههای زمان واقعی بازگرداند.*
+*بدون ابزار مدل فقط حدس میزند — با ابزارها میتواند APIها را فراخوانی کند، محاسبه انجام دهد و دادههای لحظهای را بازگرداند.*
-یک عامل هوش مصنوعی با ابزارها از الگوی **استدلال و عمل (ReAct)** پیروی میکند. مدل فقط پاسخ نمیدهد — درباره آنچه نیاز دارد فکر میکند، با فراخوانی یک ابزار عمل میکند، نتیجه را مشاهده میکند و سپس تصمیم میگیرد که دوباره عمل کند یا پاسخ نهایی را ارائه دهد:
+یک عامل هوش مصنوعی با ابزارها از الگوی **استدلال و عمل (ReAct)** پیروی میکند. مدل فقط پاسخ نمیدهد — تفکر میکند که چه نیاز دارد، با فراخوانی ابزار عمل میکند، نتیجه را مشاهده میکند و سپس تصمیم میگیرد که دوباره عمل کند یا پاسخ نهایی را ارائه دهد:
-۱. **استدلال** — عامل سؤال کاربر را تجزیه و تحلیل میکند و تعیین میکند چه اطلاعاتی نیاز دارد
-۲. **عمل** — عامل ابزار مناسب را انتخاب کرده، پارامترهای درست را تولید میکند و آن را فرا میخواند
-۳. **مشاهده** — عامل خروجی ابزار را دریافت کرده و ارزیابی میکند
-۴. **تکرار یا پاسخ** — اگر داده بیشتری لازم باشد، حلقه تکرار میشود؛ در غیر این صورت پاسخ نهایی به زبان طبیعی تنظیم میشود
+1. **استدلال** — عامل سؤال کاربر را تحلیل و مشخص میکند چه اطلاعاتی نیاز دارد
+2. **عمل** — عامل ابزار مناسب را انتخاب، پارامترهای صحیح را تولید و آن را فراخوانی میکند
+3. **مشاهده** — عامل خروجی ابزار را دریافت و نتیجه را ارزیابی میکند
+4. **تکرار یا پاسخ** — اگر دادهی بیشتری نیاز باشد، عامل به مرحله اول برمیگردد؛ در غیر این صورت پاسخ نهایی را به زبان طبیعی میسازد
-*چرخه ReAct — عامل درباره آنچه باید انجام دهد استدلال میکند، با فراخوانی ابزار عمل میکند، نتیجه را مشاهده میکند و تا رسیدن به پاسخ نهایی حلقه میزند.*
+*چرخه ReAct — عامل در مورد اینکه چه کاری انجام دهد استدلال میکند، با فراخوانی ابزار عمل میکند، نتیجه را مشاهده میکند و تا زمانی که بتواند پاسخ نهایی را ارائه دهد، تکرار میکند.*
-این روند بهطور خودکار انجام میشود. شما ابزارها و توضیحات آنها را تعریف میکنید. مدل تصمیمگیری درباره زمان و نحوه استفاده آنها را بر عهده میگیرد.
+این فرایند به طور خودکار انجام میشود. شما ابزارها و توضیحاتشان را تعریف میکنید. مدل تصمیمگیری درباره زمان و نحوه استفاده از آنها را بر عهده دارد.
-## نحوه عملکرد فراخوانی ابزار
+## نحوه کارکرد فراخوانی ابزار
### تعاریف ابزار
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-شما توابعی با توضیحات واضح و مشخصات پارامتر تعریف میکنید. مدل این توضیحات را در درخواست سیستم خود مشاهده کرده و میفهمد هر ابزار چه کاری انجام میدهد.
+شما توابعی با توضیح واضح و مشخصات پارامترها تعریف میکنید. مدل این توضیحات را در پرامپت سیستمی خود میبیند و درک میکند هر ابزار چه کاری انجام میدهد.
```java
@Component
@@ -86,7 +86,7 @@ public class WeatherTool {
@Tool("Get the current weather for a location")
public String getCurrentWeather(@P("Location name") String location) {
- // منطق جستجوی آب و هوای شما
+ // منطق جستجوی هوای شما
return "Weather in " + location + ": 22°C, cloudy";
}
}
@@ -96,141 +96,139 @@ public interface Assistant {
String chat(@MemoryId String sessionId, @UserMessage String message);
}
-// دستیار به طور خودکار توسط Spring Boot متصل شده است به:
-// - بین ChatModel
-// - تمام روشهای @Tool از کلاسهای @Component
-// - ChatMemoryProvider برای مدیریت جلسه
+// دستیار به طور خودکار توسط Spring Boot متصل شده است با:
+// - Bean مدل چت
+// - همه متدهای @Tool از کلاسهای @Component
+// - ارائهدهنده حافظه چت برای مدیریت نشستها
```
-
-نمودار زیر هر نکته را تجزیه کرده و نشان میدهد چگونه هر قطعه به هوش مصنوعی کمک میکند زمان فراخوانی ابزار و آرگومانهای پاس داده شده را بفهمد:
+نمودار زیر هر توضیح را تجزیه کرده و نشان میدهد هر بخش چگونه به AI کمک میکند زمان فراخوانی ابزار و پارامترهایی که باید ارسال شود را بفهمد:
-*آناتومی تعریف یک ابزار — @Tool به هوش مصنوعی میگوید چه زمانی از آن استفاده کند، @P هر پارامتر را توصیف میکند، و @AiService در زمان راهاندازی همه چیز را متصل میکند.*
+*آناتومی تعریف یک ابزار — @Tool به AI میگوید کی از آن استفاده کند، @P هر پارامتر را توصیف میکند و @AiService همه چیز را هنگام راهاندازی متصل میکند.*
-> **🤖 با [GitHub Copilot](https://github.com/features/copilot) چت کنید:** [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) را باز کنید و بپرسید:
-> - "چگونه یک API واقعی هواشناسی مثل OpenWeatherMap را به جای دادههای شبیهسازی شده ادغام کنم؟"
-> - "یک توضیح خوب برای ابزار چگونه است که به هوش مصنوعی در استفاده صحیح کمک میکند؟"
-> - "چگونه خطاها و محدودیتهای نرخ API را در پیادهسازی ابزار مدیریت کنم؟"
+> **🤖 امتحان کنید با چت [GitHub Copilot](https://github.com/features/copilot):** فایل [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) را باز کنید و بپرسید:
+> - "چگونه میتوانم یک API واقعی وضعیت هوا مانند OpenWeatherMap را به جای دادههای شبیهسازی شده یکپارچه کنم؟"
+> - "یک توضیح ابزار خوب که به AI کمک کند به درستی از آن استفاده کند، چگونه است؟"
+> - "چگونه خطاهای API و محدودیتهای نرخ را در پیادهسازی ابزار مدیریت کنم؟"
### تصمیمگیری
-وقتی کاربر میپرسد «آب و هوای سیاتل چگونه است؟»، مدل بهطور تصادفی ابزار انتخاب نمیکند. هدف کاربر را با تمام توضیحات ابزارهایی که به آنها دسترسی دارد مقایسه میکند، برای هر کدام نمرهای از نظر ارتباط میدهد و بهترین تطابق را انتخاب میکند. سپس یک فراخوانی تابع ساختاریافته با پارامترهای صحیح تولید میکند — در این مورد مقدار `location` را `"Seattle"` تنظیم میکند.
+وقتی کاربر میپرسد «وضعیت هوا در سیاتل چیست؟»، مدل تصادفی یک ابزار انتخاب نمیکند. مدل قصد کاربر را با هر توضیح ابزاری که دسترسی دارد مقایسه میکند، هرکدام را بر اساس مرتبط بودن امتیاز میدهد و بهترین تطبیق را انتخاب میکند. سپس فراخوانی تابع ساختار یافتهای با پارامترهای صحیح تولید میکند — در این مورد، تنظیم `location` به `"Seattle"`.
-اگر هیچ ابزاری با درخواست کاربر تطابق نداشته باشد، مدل به پاسخ دادن از دانش خود بازمیگردد. اگر چندین ابزار تطبیق داشتند، دقیقترین ابزار انتخاب میشود.
+اگر هیچ ابزاری با درخواست کاربر مطابقت نداشته باشد، مدل از دانش خودش پاسخ میدهد. اگر چند ابزار مطابقت داشتند، دقیقترین را انتخاب میکند.
-
+
-*مدل هر ابزار موجود را نسبت به هدف کاربر ارزیابی کرده و بهترین تطابق را انتخاب میکند — به همین دلیل نوشتن توضیحات واضح و مشخص ابزار مهم است.*
+*مدل همه ابزارهای موجود را بر اساس قصد کاربر ارزیابی میکند و بهترین تطبیق را انتخاب میکند — به همین دلیل نوشتن توضیحات ابزار واضح و خاص اهمیت دارد.*
### اجرا
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-Spring Boot رابط `@AiService` اعلامی را با تمام ابزارهای ثبتشده بهصورت خودکار متصل میکند و LangChain4j فراخوانی ابزارها را بهطور خودکار اجرا میکند. پشت صحنه، یک فراخوانی کامل ابزار از شش مرحله عبور میکند — از سؤال زبان طبیعی کاربر تا پاسخ زبان طبیعی نهایی:
+Spring Boot رابط اعلانی `@AiService` را با همه ابزارهای ثبت شده خودکار متصل میکند و LangChain4j فراخوانی ابزارها را به صورت خودکار اجرا میکند. پشت صحنه، یک فراخوانی کامل ابزار از شش مرحله عبور میکند — از سؤال زبان طبیعی کاربر تا پاسخ به زبان طبیعی:
-
+
-*روند انتها به انتها — کاربر سؤال میکند، مدل یک ابزار انتخاب میکند، LangChain4j آن را اجرا میکند و مدل نتیجه را در پاسخ طبیعی جای میدهد.*
+*جریان انتها به انتها — کاربر سؤال میپرسد، مدل یک ابزار انتخاب میکند، LangChain4j آن را اجرا میکند و مدل نتیجه را در یک پاسخ طبیعی میبافد.*
-اگر [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) را در ماژول ۰۰ اجرا کرده باشید، قبلاً این الگو را دیدهاید — ابزارهای `Calculator` به همین صورت فراخوانی شدند. نمودار توالی زیر دقیقاً نشان میدهد در آن دمو چه اتفاقی افتاد:
+پشت صحنه، `AiServices` همان حلقه فراخوانی ابزار را برای هر ابزاری اجرا میکند — اینجا با یک `Calculator` ساده نشان داده شده است. نمودار دنباله زیر دقیقاً نشان میدهد چه مواردی در پسزمینه اتفاق میافتد:
-*حلقه فراخوانی ابزار از دمو Quick Start — `AiServices` پیام و طرحوارههای ابزار شما را به LLM میفرستد، LLM با یک فراخوانی تابع مانند `add(42, 58)` پاسخ میدهد، LangChain4j روش `Calculator` را بهصورت محلی اجرا میکند و نتیجه را برای پاسخ نهایی بازمیگرداند.*
+*حلقه فراخوانی ابزار — `AiServices` پیام و اسکیماهای ابزار شما را به LLM ارسال میکند، LLM پاسخ میدهد با یک فراخوانی تابع مانند `add(42, 58)`, LangChain4j روش `Calculator` را به صورت محلی اجرا میکند و نتیجه را برای پاسخ نهایی بازمیگرداند.*
-> **🤖 با [GitHub Copilot](https://github.com/features/copilot) چت کنید:** [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) را باز کنید و بپرسید:
-> - "الگوی ReAct چگونه کار میکند و چرا برای عاملهای هوش مصنوعی مؤثر است؟"
-> - "عامل چگونه تصمیم میگیرد کدام ابزار را به چه ترتیبی استفاده کند؟"
-> - "اگر اجرای یک ابزار شکست خورد چه اتفاقی میافتد — چگونه باید خطاها را بهطور قابل اعتماد مدیریت کنم؟"
+> **🤖 امتحان کنید با چت [GitHub Copilot](https://github.com/features/copilot):** فایل [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) را باز کنید و بپرسید:
+> - "الگوی ReAct چگونه کار میکند و چرا برای عوامل هوش مصنوعی مؤثر است؟"
+> - "عامل چگونه تصمیم میگیرد از کدام ابزار استفاده کند و به چه ترتیبی؟"
+> - "اگر اجرای یک ابزار شکست خورد چه میشود - چگونه باید خطاها را بهطور مقاوم مدیریت کنم؟"
### تولید پاسخ
-مدل دادههای آب و هوا را دریافت کرده و آن را به یک پاسخ زبان طبیعی برای کاربر فرمت میکند.
+مدل دادههای هواشناسی را دریافت کرده و آن را به یک پاسخ با زبان طبیعی برای کاربر قالببندی میکند.
-### معماری: اتصال خودکار در Spring Boot
+### معماری: اتصال خودکار Spring Boot
-این ماژول از ادغام LangChain4j با Spring Boot با رابطهای اعلامی `@AiService` استفاده میکند. در زمان راهاندازی، Spring Boot هر `@Component` که شامل متدهای `@Tool` است، bean مدل چت شما و `ChatMemoryProvider` را پیدا کرده، و همه را در یک رابط `Assistant` بدون کد اضافی متصل میکند.
+این ماژول از ادغام LangChain4j با Spring Boot با رابطهای اعلانی `@AiService` استفاده میکند. هنگام راهاندازی، Spring Boot هر `@Component` که حاوی متدهای `@Tool` است، bean مدل گفتگو و `ChatMemoryProvider` را کشف میکند — سپس همه آنها را در یک رابط `Assistant` با صفر کد تکراری متصل میکند.
-*رابط `@AiService` مدل چت، مؤلفههای ابزار و ارائهدهنده حافظه را به هم متصل میکند — Spring Boot همه اتصالها را بهطور خودکار مدیریت میکند.*
+*رابط @AiService مدل گفتگو، کامپوننتهای ابزار و ارائهدهنده حافظه را به هم پیوند میدهد — Spring Boot همه اتصالها را خودکار انجام میدهد.*
-روند کامل چرخه درخواست بهصورت نمودار توالی — از درخواست HTTP تا کنترلر، سرویس و پراکسی متصل خودکار، و تا اجرای ابزار و بازگشت پاسخ:
+در اینجا چرخه کامل درخواست به صورت نمودار توالی — از درخواست HTTP از طریق کنترلر، سرویس و پراکسی متصل خودکار تا اجرای ابزار و بازگشت نمایش داده شده است:
-
+
-*چرخه کامل درخواست در Spring Boot — درخواست HTTP از کنترلر و سرویس عبور میکند تا به پراکسی `Assistant` متصل خودکار برسد که LLM و فراخوانیهای ابزار را بهطور خودکار مدیریت میکند.*
+*چرخه کامل درخواست Spring Boot — درخواست HTTP از کنترلر و سرویس تا پراکسی Assistant متصل خودکار عبور میکند که هماهنگی LLM و فراخوانی ابزارها را خودکار انجام میدهد.*
-مزایای کلیدی این روش:
+مزایای کلیدی این رویکرد:
-- **اتصال خودکار Spring Boot** — مدل چت و ابزارها بهصورت خودکار تزریق میشوند
-- **الگوی @MemoryId** — مدیریت حافظه مبتنی بر جلسه بهطور خودکار
-- **یک نمونه واحد** — ساخته شدن یک بار Assistant و استفاده مجدد برای عملکرد بهتر
-- **اجرای نوع امن** — متدهای جاوا مستقیماً با تبدیل نوع فراخوانی میشوند
-- **هماهنگی چندمرحلهای** — زنجیرهسازی ابزار را بهطور خودکار مدیریت میکند
-- **کد اضافی صفر** — بدون نیاز به فراخوانی دستی `AiServices.builder()` یا نگهداری HashMap حافظه
+- **اتصال خودکار Spring Boot** — مدل گفتگو و ابزارها به صورت خودکار تزریق میشوند
+- **الگوی @MemoryId** — مدیریت خودکار حافظه مبتنی بر جلسه
+- **یک نمونه واحد** — Assistant یک بار ساخته شده و برای عملکرد بهتر مجدداً استفاده میشود
+- **اجرای نوع امن** — متدهای جاوا به صورت مستقیم با تبدیل نوع فراخوانی میشوند
+- **هماهنگی چندمرحلهای** — زنجیرهسازی ابزارها را به صورت خودکار مدیریت میکند
+- **صفر کد تکراری** — بدون فراخوانیهای دستی `AiServices.builder()` یا هشمپ حافظه
-روشهای جایگزین (فراخوانی دستی `AiServices.builder()`) کد بیشتری میطلبند و از مزایای ادغام Spring Boot محروماند.
+رویکردهای جایگزین (دستی با `AiServices.builder()`) نیازمند کد بیشتر و فاقد مزایای ادغام Spring Boot هستند.
-## زنجیرهسازی ابزار
+## زنجیرهسازی ابزارها
-**زنجیرهسازی ابزار** — قدرت واقعی عاملهای مبتنی بر ابزار وقتی ظاهر میشود که یک سؤال واحد به چندین ابزار نیاز داشته باشد. از عامل بپرسید «آب و هوای سیاتل به فارنهایت چقدر است؟» و عامل به طور خودکار دو ابزار را زنجیره میکند: ابتدا `getCurrentWeather` را برای دریافت دما به سلسیوس فراخوانی میکند، سپس مقدار را به `celsiusToFahrenheit` برای تبدیل میفرستد — همه در یک دور گفتگو.
+**زنجیرهسازی ابزارها** — قدرت واقعی عوامل مبتنی بر ابزار زمانی ظاهر میشود که یک سؤال واحد به چند ابزار نیاز داشته باشد. بپرسید «وضعیت هوا در سیاتل به فارنهایت چیست؟» و عامل به صورت خودکار دو ابزار را زنجیره میکند: ابتدا `getCurrentWeather` را برای گرفتن دما به سانتیگراد فراخوانی میکند، سپس آن مقدار را به `celsiusToFahrenheit` برای تبدیل میفرستد — همه در یک نوبت مکالمه.
-*زنجیرهسازی ابزار در عمل — عامل ابتدا getCurrentWeather را فراخوانی میکند، سپس نتیجه سلسیوس را به celsiusToFahrenheit میدهد و پاسخ ترکیبی ارائه میدهد.*
+*زنجیرهسازی ابزار در عمل — عامل ابتدا getCurrentWeather را فراخوانی میکند، سپس نتیجه سانتیگراد را به celsiusToFahrenheit میفرستد و پاسخ ترکیبی ارائه میدهد.*
-**شکستهای آرام** — از ابزار درباره آب و هوا در شهری که در دادههای شبیهسازی وجود ندارد بپرسید. ابزار پیام خطا بازمیگرداند و هوش مصنوعی به جای خراب شدن برنامه توضیح میدهد نمیتواند کمک کند. ابزارها بهطور ایمن خطا میدهند. نمودار زیر دو رویکرد را نشان میدهد — با مدیریت خطای مناسب، عامل استثنا را گرفته و پاسخ مفیدی میدهد، در حالی که بدون آن کل برنامه کرش میکند:
+**خطاهای بیدردسر** — برای هوای شهری که در دادههای شبیهسازی نیست درخواست کنید. ابزار پیام خطا بازمیگرداند و هوش مصنوعی توضیح میدهد که نمیتواند کمک کند به جای اینکه برنامه کرش کند. ابزارها به طور ایمن خطا میدهند. نمودار زیر دو رویکرد را مقایسه میکند — با مدیریت صحیح خطا، عامل استثنا را گرفته و پاسخ کمککننده میدهد، در حالی که بدون آن کل برنامه کرش میکند:
-
+
-*وقتی ابزار شکست میخورد، عامل خطا را گرفته و به جای کرش کردن، با توضیح مفید پاسخ میدهد.*
+*وقتی ابزار شکست میخورد، عامل خطا را میگیرد و به جای کرش کردن، با توضیح مفید پاسخ میدهد.*
-این اتفاق در یک دور گفتگو رخ میدهد. عامل به طور مستقل چندین فراخوانی ابزار را هماهنگ میکند.
+این در یک نوبت مکالمه انجام میشود. عامل با خودکارسازی چند فراخوانی ابزار را هماهنگ میکند.
## اجرای برنامه
-**تأیید استقرار:**
+**اطمینان از استقرار:**
-اطمینان حاصل کنید که فایل `.env` در دایرکتوری ریشه با اعتبارنامههای Azure وجود دارد (در ماژول ۰۱ ایجاد شده است). این دستور را از پوشه ماژول (`04-tools/`) اجرا کنید:
+مطمئن شوید فایل `.env` در شاخه ریشه با اعتبارنامههای Azure وجود دارد (ایجاد شده در ماژول ۰۱). از دایرکتوری ماژول (`04-tools/`) این دستورات را اجرا کنید:
-**Bash:**
+**Bash:**
```bash
-cat ../.env # باید AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT را نمایش دهد
+cat ../.env # باید AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT را نشان دهد
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
-Get-Content ..\.env # باید AZURE_OPENAI_ENDPOINT ، API_KEY ، DEPLOYMENT را نمایش دهد
+Get-Content ..\.env # باید AZURE_OPENAI_ENDPOINT، API_KEY، DEPLOYMENT را نمایش دهد
```
-
-**شروع برنامه:**
+**راهاندازی برنامه:**
-> **توجه:** اگر قبلاً همه برنامهها را با استفاده از `./start-all.sh` از دایرکتوری ریشه (طبق ماژول ۰۱) اجرا کردهاید، این ماژول در پورت ۸۰۸۴ در حال اجراست. میتوانید دستورات شروع را رد کرده و مستقیماً به http://localhost:8084 بروید.
+> **توجه:** اگر قبلاً همه برنامهها را با استفاده از `./start-all.sh` از ریشه (طبق ماژول ۰۱) راهاندازی کردهاید، این ماژول در حال حاضر بر روی پورت 8084 اجرا میشود. میتوانید دستورهای شروع زیر را رد کنید و مستقیماً به http://localhost:8084 بروید.
-**گزینه ۱: استفاده از داشبورد Spring Boot (توصیه شده برای کاربران VS Code)**
+**گزینه ۱: استفاده از Spring Boot Dashboard (توصیه برای کاربران VS Code)**
-کانتینر توسعه شامل افزونه داشبورد Spring Boot است که رابط بصری برای مدیریت همه برنامههای Spring Boot ارائه میدهد. این را در نوار فعالیت در سمت چپ VS Code (آیکون Spring Boot) پیدا کنید.
+کانتینر توسعه شامل افزونه Spring Boot Dashboard است که رابط بصری برای مدیریت همه برنامههای Spring Boot فراهم میکند. میتوانید آن را در نوار فعالیت سمت چپ VS Code (آیکون Spring Boot) پیدا کنید.
-از داشبورد Spring Boot میتوانید:
-- همه برنامههای Spring Boot موجود در فضای کاری را ببینید
-- برنامهها را با یک کلیک شروع/توقف کنید
-- لاگهای برنامه را بهصورت زنده مشاهده کنید
-- وضعیت برنامه را رصد کنید
-بهسادگی روی دکمه پخش کنار "ابزارها" کلیک کنید تا این ماژول شروع شود، یا همه ماژولها را همزمان اجرا کنید.
+از طریق Spring Boot Dashboard میتوانید:
+- همه برنامههای Spring Boot موجود در محیط کاری را ببینید
+- برنامهها را با یک کلیک شروع/توقف کنید
+- لاگهای برنامه را به صورت زنده ببینید
+- وضعیت برنامه را نظارت کنید
-نمای داشبورد Spring Boot در VS Code به این صورت است:
+به سادگی روی دکمه پخش کنار "tools" کلیک کنید تا این ماژول شروع شود، یا همه ماژولها را همزمان اجرا کنید.
-
+نمایی که داشبورد Spring Boot در VS Code دارد به شکل زیر است:
+
-*داشبورد Spring Boot در VS Code — شروع، توقف و نظارت بر همه ماژولها از یک محل*
+*داشبورد Spring Boot در VS Code — شروع، توقف و نظارت روی همه ماژولها از یک مکان*
-**گزینه ۲: استفاده از اسکریپتهای شل**
+**گزینه ۲: استفاده از اسکریپتهای شِل**
-شروع همه برنامههای تحت وب (ماژولهای ۰۱-۰۴):
+همه برنامههای وب (ماژولهای ۰۱-۰۴) را شروع کنید:
**Bash:**
```bash
@@ -244,7 +242,7 @@ cd .. # از دایرکتوری ریشه
.\start-all.ps1
```
-یا فقط همین ماژول را شروع کنید:
+یا فقط این ماژول را شروع کنید:
**Bash:**
```bash
@@ -258,9 +256,9 @@ cd 04-tools
.\start.ps1
```
-هر دو اسکریپت به صورت خودکار متغیرهای محیطی را از فایل ریشه `.env` بارگیری میکنند و در صورتی که فایلهای JAR وجود نداشته باشند آنها را میسازند.
+هر دو اسکریپت به صورت خودکار متغیرهای محیطی را از فایل ریشه `.env` بارگذاری میکنند و در صورتی که فایلهای JAR وجود نداشته باشند، آنها را میسازند.
-> **توجه:** اگر ترجیح میدهید همه ماژولها را پیش از شروع به صورت دستی بسازید:
+> **نکته:** اگر ترجیح میدهید قبل از شروع همه ماژولها را به صورت دستی بسازید:
>
> **Bash:**
> ```bash
@@ -274,13 +272,13 @@ cd 04-tools
> mvn clean package -DskipTests
> ```
-در مرورگر خود به آدرس http://localhost:8084 بروید.
+در مرورگر خود به آدرس http://localhost:8084 مراجعه کنید.
**برای توقف:**
**Bash:**
```bash
-./stop.sh # فقط این ماژول
+./stop.sh # این ماژول فقط
# یا
cd .. && ./stop-all.sh # همه ماژولها
```
@@ -294,88 +292,88 @@ cd ..; .\stop-all.ps1 # همه ماژولها
## استفاده از برنامه
-این برنامه یک رابط وب فراهم میکند که میتوانید با یک عامل هوش مصنوعی که به ابزارهای هواشناسی و تبدیل دما دسترسی دارد تعامل کنید. نمای رابط به این صورت است — که شامل مثالهای شروع سریع و یک پنل چت برای ارسال درخواستها است:
+این برنامه یک رابط وب فراهم میکند که میتوانید با یک عامل هوش مصنوعی که به ابزارهای آبوهوا و تبدیل دما دسترسی دارد، تعامل برقرار کنید. نمایی از رابط اینجا آمده است — شامل مثالهای شروع سریع و پنل چت برای ارسال درخواستها:
-
+
*رابط ابزارهای عامل هوش مصنوعی - مثالهای سریع و رابط چت برای تعامل با ابزارها*
-### امتحان استفاده ساده از ابزار
+### آزمایش استفاده ساده از ابزار
-با یک درخواست ساده شروع کنید: "تبدیل ۱۰۰ درجه فارنهایت به سلسیوس". عامل تشخیص میدهد که باید از ابزار تبدیل دما استفاده کند، آن را با پارامترهای درست فراخوانی میکند و نتیجه را برمیگرداند. توجه کنید چقدر این کار طبیعی به نظر میرسد — مشخص نکردید از کدام ابزار استفاده کنید یا چطور آن را فراخوانی کنید.
+با یک درخواست ساده شروع کنید: «100 درجه فارنهایت را به سلسیوس تبدیل کن». عامل تشخیص میدهد که باید از ابزار تبدیل دما استفاده کند، آن را با پارامترهای درست فراخوانی میکند و نتیجه را برمیگرداند. ببینید چقدر طبیعی است — شما مشخص نکردید کدام ابزار را استفاده کند یا چگونه آن را فراخوانی کنید.
-### آزمایش زنجیر کردن ابزارها
+### آزمایش زنجیرهسازی ابزار
-حالا چیزی پیچیدهتر را امتحان کنید: "هوا در سیاتل چطور است و آن را به فارنهایت تبدیل کن؟" ببینید عامل چگونه این کار را مرحله به مرحله انجام میدهد. ابتدا هواشناسی را دریافت میکند (که دما را به سلسیوس برمیگرداند)، تشخیص میدهد باید آن را به فارنهایت تبدیل کند، ابزار تبدیل را فراخوانی میکند و سپس هر دو نتیجه را در یک پاسخ میآمیزد.
+حالا یک درخواست پیچیدهتر را امتحان کنید: «آبوهوا در سیاتل چطور است و آن را به فارنهایت تبدیل کن؟» مشاهده کنید که عامل به صورت مرحله به مرحله کار را انجام میدهد. ابتدا آبوهوا را دریافت میکند (که به سلسیوس است)، تشخیص میدهد که باید به فارنهایت تبدیل کند، ابزار تبدیل را فراخوانی میکند و هر دو نتیجه را در یک پاسخ ترکیب میکند.
-### مشاهده جریان گفتگو
+### مشاهده جریان مکالمه
-رابط چت سابقه گفتگو را حفظ میکند و امکان تعامل چند مرحلهای را فراهم میآورد. میتوانید تمام سوالات و پاسخهای قبلی را ببینید که پیگیری گفتگو و درک نحوه ساخت زمینه توسط عامل در چندین تبادل را آسان میکند.
+رابط چت تاریخچه مکالمات را حفظ میکند و به شما اجازه میدهد تعاملهای چندمرحلهای داشته باشید. میتوانید تمام پرسشها و پاسخهای قبلی را ببینید و دنبال کردن مکالمه و درک نحوه ساخت زمینه توسط عامل را ساده میکند.
-
+
-*گفتگوی چند مرحلهای که تبدیلهای ساده، جستجوی هوا و زنجیر کردن ابزارها را نشان میدهد*
+*مکالمه چندمرحلهای شامل تبدیلهای ساده، جستجوی آبوهوا و زنجیرهسازی ابزار*
### آزمایش درخواستهای مختلف
-ترکیبهای مختلف را امتحان کنید:
-- جستجوی هوا: "هوا در توکیو چطور است؟"
-- تبدیل دما: "۲۵ درجه سلسیوس چقدر در کلوین است؟"
-- پرسشهای ترکیبی: "هوا در پاریس را بررسی کن و بگو آیا بالای ۲۰ درجه سلسیوس است یا نه"
+ترکیبات مختلف را امتحان کنید:
+- جستجوی آبوهوا: «آبوهوا در توکیو چطور است؟»
+- تبدیل دما: «25 درجه سلسیوس چند کلوین است؟»
+- پرسشهای ترکیبی: «آبوهوا در پاریس را بررسی کن و بگو اگر بالای 20 درجه سلسیوس است»
-توجه کنید که عامل چگونه زبان طبیعی را تفسیر میکند و آن را به فراخوانیهای مناسب ابزار نگاشت میکند.
+توجه کنید که عامل چگونه زبان طبیعی را تعبیر میکند و آن را به فراخوانیهای مناسب ابزار نگاشت میکند.
## مفاهیم کلیدی
-### الگوی ReAct (استدلال و اقدام)
+### الگوی ReAct (استدلال و عمل)
-عامل بین استدلال (تصمیمگیری درباره کار بعدی) و اقدام (استفاده از ابزارها) تناوب دارد. این الگو امکان حل مستقل مسئله را فراهم میکند نه فقط پاسخ به دستورات.
+عامل بین استدلال (تصمیمگیری در مورد کار بعدی) و عمل (استفاده از ابزارها) جابجا میشود. این الگو امکان حل خودکار مسئله را فراهم میکند، نه فقط پاسخ به دستورها.
-### اهمیت توضیحات ابزارها
+### توضیحات ابزار مهم است
-کیفیت توضیحات ابزار شما مستقیماً بر نحوه استفاده عامل از آنها تأثیر میگذارد. توضیحهای واضح و مشخص به مدل کمک میکند بفهمد چه زمانی و چگونه باید هر ابزار را فراخوانی کند.
+کیفیت توضیحات ابزار مستقیم روی نحوه استفاده بهتر عامل تأثیر میگذارد. توضیحات واضح و مشخص به مدل کمک میکند که چه موقع و چگونه هر ابزار را فراخوانی کند.
-### مدیریت جلسه
+### مدیریت نشست
-حاشیهنویسی `@MemoryId` امکان مدیریت خودکار حافظه مبتنی بر جلسه را فعال میکند. هر شناسه جلسه یک نمونه `ChatMemory` مخصوص به خود را دارد که توسط مولفه `ChatMemoryProvider` مدیریت میشود، پس چندین کاربر میتوانند همزمان با عامل تعامل داشته باشند بدون اینکه گفتگوهایشان با هم مخلوط شوند. نمودار زیر نشان میدهد چگونه چند کاربر به حافظههای مجزا بر اساس شناسههای جلسه ارجاع داده میشوند:
+حاشیهنویسی `@MemoryId` امکان مدیریت حافظه مبتنی بر نشست را به صورت خودکار فراهم میکند. هر شناسه نشست یک نمونه `ChatMemory` منحصر به فرد دریافت میکند که توسط Bean `ChatMemoryProvider` مدیریت میشود، بنابراین چندین کاربر میتوانند به طور همزمان با عامل تعامل داشته باشند بدون اینکه مکالماتشان با یکدیگر مخلوط شود. نمودار زیر نشان میدهد که چگونه چندین کاربر به فروشگاههای حافظه جداگانه بر اساس شناسههای نشستشان هدایت میشوند:
-
+
-*هر شناسه جلسه به یک سابقه گفتگو ایزوله شده نگاشت میشود — کاربران هرگز پیامهای همدیگر را نمیبینند.*
+*هر شناسه نشست به یک تاریخچه مکالمه جداگانه نگاشت میشود — کاربران هرگز پیامهای یکدیگر را نمیبینند.*
### مدیریت خطا
-ابزارها ممکن است دچار خطا شوند — APIها تایماوت کنند، پارامترها نامعتبر باشند، سرویسهای خارجی قطع شوند. عوامل تولیدی به مدیریت خطا نیاز دارند تا مدل بتواند مشکلات را توضیح دهد یا جایگزینهایی را امتحان کند به جای اینکه کل برنامه خراب شود. وقتی ابزاری استثنا پرتاب میکند، LangChain4j آن را میگیرد و پیام خطا را به مدل برمیگرداند، که سپس میتواند مشکل را به زبان طبیعی توضیح دهد.
+ابزارها ممکن است دچار خطا شوند — APIها ممکن است زمانتأخیر داشته باشند، پارامترها نادرست باشند، سرویسهای خارجی ممکن است از کار بیفتند. عاملهای تولید باید خطاها را مدیریت کنند تا مدل بتواند مشکلات را توضیح دهد یا جایگزینهایی امتحان کند، به جای اینکه کل برنامه کرش کند. وقتی یک ابزار استثنا پرتاب میکند، LangChain4j آن را گرفته و پیام خطا را به مدل بازمیگرداند که سپس میتواند مشکل را به زبان طبیعی توضیح دهد.
-## ابزارهای موجود
+## ابزارهای در دسترس
-نمودار زیر اکوسیستم گستردهای از ابزارها را که میتوانید بسازید نشان میدهد. این ماژول ابزارهای هواشناسی و دمایی را نشان میدهد، اما همان الگوی `@Tool` برای هر متد جاوا قابل استفاده است — از پرسوجوهای پایگاه داده تا پردازش پرداخت.
+نمودار زیر اکوسیستم گسترده ابزارهایی که میتوانید بسازید را نشان میدهد. این ماژول ابزارهای آبوهوا و دما را نشان میدهد، اما همان الگوی `@Tool` برای هر متد جاوا کار میکند — از پرسوجوی دیتابیس تا پردازش پرداخت.
-
+
-*هر متد جاوایی که با @Tool نشانهگذاری شود برای هوش مصنوعی در دسترس قرار میگیرد — این الگو شامل پایگاه دادهها، APIها، ایمیل، عملیات فایل و بیشتر میشود.*
+*هر متد جاوا که با @Tool نشانهگذاری شده باشد برای هوش مصنوعی در دسترس قرار میگیرد — الگو به دیتابیسها، APIها، ایمیل، عملیات فایل و بیشتر گسترش مییابد.*
-## کی از عوامل مبتنی بر ابزار استفاده کنیم
+## چه زمانی از عاملهای مبتنی بر ابزار استفاده کنیم
-هر درخواستی به ابزار نیاز ندارد. تصمیمگیری بستگی دارد به اینکه آیا هوش مصنوعی باید با سیستمهای خارجی تعامل کند یا میتواند از دانش خود پاسخ دهد. راهنمای زیر خلاصه میکند چه مواقعی ابزارها ارزش افزوده دارند و چه مواقعی غیرضروریاند:
+هر درخواستی به ابزار نیاز ندارد. تصمیم به این بستگی دارد که آیا AI باید با سیستمهای خارجی تعامل داشته باشد یا بتواند از دانش خودش پاسخ دهد. راهنمای زیر خلاصه میکند که چه زمانی ابزارها ارزش افزوده دارند و چه زمانی ضروری نیستند:
-
+
-*راهنمای سریع تصمیمگیری — ابزارها برای دادههای لحظهای، محاسبات و کارها هستند؛ دانش عمومی و وظایف خلاقانه نیازی به آنها ندارند.*
+*راهنمای تصمیمگیری سریع — ابزارها برای دادههای بلادرنگ، محاسبات و عملیات؛ دانش عمومی و کارهای خلاقانه نیاز به آنها ندارند.*
## ابزارها در مقابل RAG
-ماژولهای ۰۳ و ۰۴ هر دو قابلیتهای هوش مصنوعی را گسترش میدهند ولی به صورت بنیادی متفاوت. RAG به مدل دسترسی به **دانش** میدهد با بازیابی اسناد. ابزارها به مدل امکان انجام **عملیات** با فراخوانی توابع را میدهند. نمودار زیر این دو رویکرد را کنار هم مقایسه میکند — از نحوه عملکرد هر گردش کار تا مزایا و معایب آنها:
+ماژولهای ۰۳ و ۰۴ هر دو قابلیتهای AI را افزایش میدهند، اما به طور بنیادی متفاوت. RAG به مدل دسترسی به **دانش** را میدهد با بازخوانی اسناد. ابزارها به مدل امکان انجام **عملکردها** را با فراخوانی توابع میدهند. نمودار زیر این دو رویکرد را در کنار هم مقایسه میکند — از نحوه عملکرد هر جریان کاری تا مزایا و معایب آنها:
-
+
-*RAG اطلاعات را از اسناد ایستا بازیابی میکند — ابزارها عملیات اجرا و دادههای پویا و لحظهای را واکشی میکنند. بسیاری از سیستمهای تولیدی هر دو را ترکیب میکنند.*
+*RAG اطلاعات را از اسناد ایستا بازیابی میکند — ابزارها عملیات را انجام میدهند و دادههای پویا و بلادرنگ را واکشی میکنند. بسیاری از سیستمهای تولیدی هر دو را با هم ترکیب میکنند.*
-در عمل، بسیاری از سیستمهای تولیدی هر دو رویکرد را ترکیب میکنند: RAG برای پایهگذاری پاسخها در مستندات شما، و ابزارها برای واکشی دادههای زنده یا انجام عملیات.
+در عمل، بسیاری از سیستمهای تولیدی هر دو رویکرد را ترکیب میکنند: RAG برای پایهگذاری پاسخها بر مستندات شما، و ابزارها برای واکشی دادههای زنده یا انجام عملیات.
-## گامهای بعدی
+## مراحل بعدی
-**ماژول بعدی:** [05-mcp - Model Context Protocol (MCP)](../05-mcp/README.md)
+**ماژول بعدی:** [05-mcp - پروتکل زمینه مدل (MCP)](../05-mcp/README.md)
---
@@ -384,6 +382,6 @@ cd ..; .\stop-all.ps1 # همه ماژولها
---
-**سلب مسئولیت**:
-این سند با استفاده از خدمات ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است حاوی خطاها یا نواقصی باشند. سند اصلی به زبان بومی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما مسئول هیچ گونه سوءتفاهم یا تفسیر نادرست ناشی از استفاده از این ترجمه نیستیم.
+**سلب مسئولیت**:
+این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوء تفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.
\ No newline at end of file
diff --git a/translations/fa/README.md b/translations/fa/README.md
index 22fef4002..f9ff7b6de 100644
--- a/translations/fa/README.md
+++ b/translations/fa/README.md
@@ -2,18 +2,18 @@
# LangChain4j برای مبتدیان
-یک دوره برای ساخت برنامههای هوش مصنوعی با LangChain4j و Azure OpenAI GPT-5.2، از چت پایه تا عاملهای هوش مصنوعی.
+دورهای برای ساخت برنامههای هوش مصنوعی با LangChain4j و Azure OpenAI GPT-5.2، از چت پایه تا عوامل هوش مصنوعی.
### 🌐 پشتیبانی چندزبانه
-#### پشتیبانی شده از طریق GitHub Action (خودکار و همیشه بهروز)
+#### پشتیبانی از طریق GitHub Action (خودکار و همیشه بهروز)
-[عربی](../ar/README.md) | [بنگالی](../bn/README.md) | [بلغاری](../bg/README.md) | [برمهای (میانمار)](../my/README.md) | [چینی (سادهشده)](../zh-CN/README.md) | [چینی (سنتی، هنگکنگ)](../zh-HK/README.md) | [چینی (سنتی، ماکائو)](../zh-MO/README.md) | [چینی (سنتی، تایوان)](../zh-TW/README.md) | [کرواسی](../hr/README.md) | [چک](../cs/README.md) | [دانمارکی](../da/README.md) | [هلندی](../nl/README.md) | [استونیایی](../et/README.md) | [فنلاندی](../fi/README.md) | [فرانسوی](../fr/README.md) | [آلمانی](../de/README.md) | [یونانی](../el/README.md) | [عبری](../he/README.md) | [هندی](../hi/README.md) | [مجارستانی](../hu/README.md) | [اندونزیایی](../id/README.md) | [ایتالیایی](../it/README.md) | [ژاپنی](../ja/README.md) | [کاننادا](../kn/README.md) | [خمر](../km/README.md) | [کرهای](../ko/README.md) | [لیتوانیایی](../lt/README.md) | [مالایی](../ms/README.md) | [مالایالام](../ml/README.md) | [مراتی](../mr/README.md) | [نپالی](../ne/README.md) | [پیجین نیجریهای](../pcm/README.md) | [نروژی](../no/README.md) | [فارسی (Farsi)](./README.md) | [لهستانی](../pl/README.md) | [پرتغالی (برزیل)](../pt-BR/README.md) | [پرتغالی (پرتغال)](../pt-PT/README.md) | [پنجابی (Gurmukhi)](../pa/README.md) | [رومانیایی](../ro/README.md) | [روسی](../ru/README.md) | [صربی (سیریلیک)](../sr/README.md) | [اسلواکی](../sk/README.md) | [اسلوونی](../sl/README.md) | [اسپانیایی](../es/README.md) | [سواهدی](../sw/README.md) | [سوئدی](../sv/README.md) | [تاگالوگ (فیلیپینی)](../tl/README.md) | [تامیل](../ta/README.md) | [تلوگو](../te/README.md) | [تایلندی](../th/README.md) | [ترکی](../tr/README.md) | [اوکراینی](../uk/README.md) | [اردو](../ur/README.md) | [ویتنامی](../vi/README.md)
+[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](./README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
-> **ترجیح میدهید محلی کلون کنید؟**
+> **ترجیح میدهید به صورت محلی کلون کنید؟**
>
-> این مخزن بیش از ۵۰ ترجمه زبان را شامل میشود که اندازه دانلود را به طور قابل توجهی افزایش میدهد. برای کلون کردن بدون ترجمهها، از sparse checkout استفاده کنید:
+> این مخزن شامل بیش از ۵۰ ترجمه زبانی است که حجم دانلود را به طور قابل توجهی افزایش میدهد. برای کلون بدون ترجمهها، از sparse checkout استفاده کنید:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -22,71 +22,70 @@
> git sparse-checkout set --no-cone '/*' '!translations' '!translated_images'
> ```
>
-> **CMD (ویندوز):**
+> **CMD (Windows):**
> ```cmd
> git clone --filter=blob:none --sparse https://github.com/microsoft/LangChain4j-for-Beginners.git
> cd LangChain4j-for-Beginners
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> این به شما همه چیز لازم برای تکمیل دوره را با سرعت دانلود بسیار بالاتر میدهد.
+> این به شما همه چیز را میدهد تا دوره را با سرعت دانلود بسیار سریعتر به پایان برسانید.
## فهرست مطالب
-1. [شروع سریع](00-quick-start/README.md) - شروع کار با LangChain4j
-2. [مقدمه](01-introduction/README.md) - یادگیری اصول اولیه LangChain4j
-3. [مهندسی پرامپت](02-prompt-engineering/README.md) - تسلط بر طراحی مؤثر پرامپت
-4. [RAG (تولید تقویتشده با بازیابی)](03-rag/README.md) - ساخت سیستمهای هوشمند مبتنی بر دانش
-5. [ابزارها](04-tools/README.md) - یکپارچهسازی ابزارهای خارجی و دستیارهای ساده
-6. [MCP (پروتکل زمینه مدل)](05-mcp/README.md) - کار با پروتکل زمینه مدل (MCP) و ماژولهای عاملی
+1. [مقدمه](01-introduction/README.md) - اصول اولیه LangChain4j را بیاموزید
+2. [مهندسی پرامپت](02-prompt-engineering/README.md) - طراحی مؤثر پرامپت را فرا بگیرید
+3. [RAG (تولید تکمیلشده با بازیابی)](03-rag/README.md) - ساخت سیستمهای هوشمند مبتنی بر دانش
+4. [ابزارها](04-tools/README.md) - ادغام ابزارهای خارجی و دستیارهای ساده
+5. [MCP (پروتکل زمینه مدل)](05-mcp/README.md) - کار با پروتکل زمینه مدل (MCP) و ماژولهای عامل
-### مرورهای ویدیویی
+### آموزشهای ویدیویی
-هر ماژول یک جلسه زنده همراه دارد که در آن مفاهیم و کد را گام به گام مرور میکنیم.
+هر ماژول یک جلسه زنده همراه دارد که در آن مفاهیم و کد گام به گام آموزش داده میشود.
-| ماژول | ویدئو |
+| ماژول | ویدیو |
|--------|-------|
-| ۰۱ - مقدمه | [شروع با LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
+| ۰۱ - مقدمه | [شروع کار با LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
| ۰۲ - مهندسی پرامپت | [مهندسی پرامپت با LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
| ۰۳ - RAG | [RAG با LangChain4j](https://www.youtube.com/watch?v=_olq75ZH_eY) |
-| ۰۴ - ابزارها و ۰۵ - MCP | [عاملهای AI با ابزارها و MCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
+| ۰۴ - ابزارها و ۰۵ - MCP | [عوامل هوش مصنوعی با ابزارها و MCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
---
## مسیر یادگیری
-**جدید در LangChain4j؟** برای تعریف اصطلاحات و مفاهیم کلیدی به [واژهنامه](docs/GLOSSARY.md) مراجعه کنید.
+**تازهکار در LangChain4j؟** برای تعریف اصطلاحات و مفاهیم کلیدی به [واژهنامه](docs/GLOSSARY.md) مراجعه کنید.
> **شروع سریع**
-1. این مخزن را به حساب گیتهاب خود فورک کنید
-2. روی **Code** → تب **Codespaces** → روی **...** کلیک کنید → **New with options...**
-3. پیشفرضها را انتخاب کنید – این کانتینر توسعه ساخته شده برای این دوره را انتخاب میکند
+1. این مخزن را به حساب GitHub خود فورک کنید
+2. روی **Code** → برگه **Codespaces** → **...** → **New with options...** کلیک کنید
+3. از تنظیمات پیشفرض استفاده کنید – این گزینه کانتینر توسعه ایجاد شده برای این دوره را انتخاب میکند
4. روی **Create codespace** کلیک کنید
-5. ۵-۱۰ دقیقه صبر کنید تا محیط آماده شود
-6. مستقیماً به [شروع سریع](./00-quick-start/README.md) بروید تا شروع کنید!
+5. ۵ تا ۱۰ دقیقه منتظر بمانید تا محیط آماده شود
+6. مستقیم به [مقدمه](./01-introduction/README.md) بروید و شروع کنید!
-پس از تکمیل ماژولها، راهنمای [تست](docs/TESTING.md) را بررسی کنید تا مفاهیم تست LangChain4j را در عمل ببینید.
+پس از تکمیل ماژولها، به [راهنمای تست](docs/TESTING.md) مراجعه کنید تا مفاهیم تست LangChain4j را در عمل مشاهده کنید.
-> **توجه:** این آموزش هم از GitHub Models و هم Azure OpenAI استفاده میکند. ماژول [شروع سریع](00-quick-start/README.md) از GitHub Models استفاده میکند (نیازی به اشتراک Azure ندارد)، در حالی که ماژولهای ۱ تا ۵ از Azure OpenAI بهره میبرند. اگر حساب Azure ندارید، با [یک حساب رایگان Azure](https://aka.ms/azure-free-account) شروع کنید.
+> **توجه:** این آموزش از Azure OpenAI استفاده میکند. اگر حساب Azure رایگان ندارید، با یک [حساب رایگان Azure](https://aka.ms/azure-free-account) شروع کنید.
## یادگیری با GitHub Copilot
-برای شروع سریع کدنویسی، این پروژه را در GitHub Codespace یا IDE محلی خود با devcontainer ارائه شده باز کنید. devcontainer استفاده شده در این دوره به صورت پیشفرض با GitHub Copilot برای برنامهنویسی جفت هوش مصنوعی پیکربندی شده است.
+برای شروع سریع برنامهنویسی، این پروژه را در GitHub Codespace یا IDE محلی خود با devcontainer ارائه شده باز کنید. devcontainer استفاده شده در این دوره از قبل با GitHub Copilot برای برنامهنویسی هوش مصنوعی همراه پیکربندی شده است.
-هر نمونه کد شامل سؤالات پیشنهادی است که میتوانید از GitHub Copilot بپرسید تا درک خود را عمیقتر کنید. به دنبال نشانههای 💡/🤖 در:
+هر مثال کد شامل پرسشهایی است که میتوانید از GitHub Copilot بپرسید تا فهم خود را عمیقتر کنید. به دنبال علامتهای 💡/🤖 در:
-- **سرفصل فایلهای جاوا** - سؤالهای خاص هر نمونه
-- **README ماژولها** - پیشنهادهای کاوش پس از نمونههای کد
+- **سرصفحه فایلهای جاوا** - سوالات خاص هر مثال
+- **README ماژولها** - پیشنهادهای کشف پس از مثالهای کد
-**نحوه استفاده:** هر فایل کد را باز کرده و سؤالهای پیشنهادی را از Copilot بپرسید. او کاملاً از کد اطلاع دارد و میتواند توضیح دهد، گسترش دهد و جایگزینها را پیشنهاد کند.
+**نحوه استفاده:** هر فایل کد را باز کنید و سوالات پیشنهادی را از Copilot بپرسید. او کاملاً با کد آشنا است و میتواند توضیح دهد، گسترش دهد و پیشنهادهایی بدهد.
-میخواهید بیشتر یاد بگیرید؟ به [Copilot برای برنامهنویسی جفت هوش مصنوعی](https://aka.ms/GitHubCopilotAI) مراجعه کنید.
+میخواهید بیشتر یاد بگیرید؟ به [Copilot برای برنامهنویسی هوش مصنوعی همراه](https://aka.ms/GitHubCopilotAI) مراجعه کنید.
-## منابع بیشتر
+## منابع اضافی
### LangChain
@@ -95,19 +94,19 @@
[](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin)
---
-### Azure / Edge / MCP / عاملها
+### Azure / Edge / MCP / Agents
[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
---
-### سری هوش تولیدی
-[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
-[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
-[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
-[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
+### سری هوش مصنوعی مولد
+[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
+[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
+[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
+[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
---
@@ -117,34 +116,34 @@
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
-
-### سری کوپایلوت
-[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
+
+### مجموعه Copilot
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
## دریافت کمک
-اگر گیر افتادید یا سوالی درباره ساخت برنامههای هوش مصنوعی داشتید، بپیوندید به:
+اگر به مشکلی برخوردید یا سوالی درباره ساخت برنامههای هوش مصنوعی داشتید، بپیوندید به:
-[](https://aka.ms/foundry/discord)
+[](https://aka.ms/foundry/discord)
-اگر بازخورد یا خطایی در حین ساخت محصول داشتید، مراجعه کنید به:
+اگر بازخورد محصول یا خطاهایی هنگام ساخت داشتید، مراجعه کنید به:
-[](https://aka.ms/foundry/forum)
+[](https://aka.ms/foundry/forum)
## مجوز
-مجوز MIT - برای جزئیات به فایل [LICENSE](../../LICENSE) مراجعه کنید.
+مجوز MIT - جزئیات را در فایل [LICENSE](../../LICENSE) ببینید.
---
-**سلب مسئولیت**:
-این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما به دقت تلاش میکنیم، لطفاً آگاه باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. نسخه اصلی سند به زبان مادری آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما مسئول هیچ گونه سوءتفاهم یا برداشت نادرستی که از استفاده این ترجمه ناشی شود، نیستیم.
+**سلب مسئولیت**:
+این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوء تفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.
\ No newline at end of file
diff --git a/translations/fa/docs/GLOSSARY.md b/translations/fa/docs/GLOSSARY.md
index c68d5404c..b48af3933 100644
--- a/translations/fa/docs/GLOSSARY.md
+++ b/translations/fa/docs/GLOSSARY.md
@@ -2,57 +2,57 @@
## فهرست مطالب
-- [مفاهیم اصلی](../../../docs)
-- [اجزای LangChain4j](../../../docs)
-- [مفاهیم هوش مصنوعی/یادگیری ماشینی](../../../docs)
-- [Guardrails](../../../docs)
-- [مهندسی درخواست](../../../docs)
-- [RAG (تولید افزوده شده بازیابی)](../../../docs)
-- [عاملها و ابزارها](../../../docs)
-- [ماژول عاملی](../../../docs)
-- [پروتکل زمینه مدل (MCP)](../../../docs)
-- [خدمات Azure](../../../docs)
-- [آزمایش و توسعه](../../../docs)
-
-مرجع سریع برای اصطلاحات و مفاهیم استفاده شده در طول دوره.
+- [مفاهیم اصلی](#مفاهیم-اصلی)
+- [اجزای LangChain4j](#اجزای-langchain4j)
+- [مفاهیم AI/ML](#مفاهیم-aiml)
+- [محافظها](#محافظها)
+- [مهندسی پرامپت](#prompt-engineering---module-02)
+- [RAG (تولید افزوده شده با بازیابی)](#rag-retrieval-augmented-generation---module-03)
+- [عاملها و ابزارها](#agents-and-tools---module-04)
+- [مدول عاملمحور](#agentic-module---module-05)
+- [پروتکل زمینه مدل (MCP)](#model-context-protocol-mcp---module-05)
+- [خدمات Azure](#azure-services---module-01)
+- [آزمایش و توسعه](#testing-and-development---testing-guide)
+
+مرجع سریع برای اصطلاحات و مفاهیم مورد استفاده در کل دوره.
## مفاهیم اصلی
-**عامل هوش مصنوعی (AI Agent)** - سیستمی که از هوش مصنوعی برای استدلال و عمل به صورت خودمختار استفاده میکند. [ماژول 04](../04-tools/README.md)
+**عامل هوش مصنوعی** - سیستمی که از هوش مصنوعی برای استدلال و عمل خودکار استفاده میکند. [ماژول ۰۴](../04-tools/README.md)
-**زنجیره (Chain)** - دنبالهای از عملیات که خروجی مرحله قبلی ورودی مرحله بعدی است.
+**زنجیره** - دنبالهای از عملیات که خروجی به مرحله بعدی منتقل میشود.
-**تکهتکه کردن (Chunking)** - تقسیم اسناد به قطعات کوچکتر. معمولاً: ۳۰۰-۵۰۰ توکن با همپوشانی. [ماژول 03](../03-rag/README.md)
+**تکهبندی** - تقسیم اسناد به قطعات کوچکتر. معمولاً: ۳۰۰-۵۰۰ توکن با همپوشانی. [ماژول ۰۳](../03-rag/README.md)
-**پنجره زمینه (Context Window)** - حداکثر توکنهایی که مدل میتواند پردازش کند. GPT-5.2: ۴۰۰K توکن (تا ۲۷۲K ورودی، ۱۲۸K خروجی).
+**پنجره زمینه** - حداکثر توکنی که مدل میتواند پردازش کند. GPT-5.2: ۴۰۰ هزار توکن (تا ۲۷۲ هزار ورودی، ۱۲۸ هزار خروجی).
-**بردارها (Embeddings)** - بردارهای عددی که معنای متن را نمایش میدهند. [ماژول 03](../03-rag/README.md)
+**بردارهای تعبیه** - بردارهای عددی که معنای متن را نشان میدهند. [ماژول ۰۳](../03-rag/README.md)
-**فراخوانی تابع (Function Calling)** - مدلی که درخواستهای ساختاریافته برای فراخوانی توابع خارجی تولید میکند. [ماژول 04](../04-tools/README.md)
+**فراخوانی تابع** - مدل درخواستهای ساختار یافته برای فراخوانی توابع خارجی تولید میکند. [ماژول ۰۴](../04-tools/README.md)
-**توهم (Hallucination)** - زمانی که مدلها اطلاعات نادرست اما محتمل تولید میکنند.
+**توهم** - زمانی که مدلها اطلاعات نادرست اما قابل قبول تولید میکنند.
-**درخواست (Prompt)** - ورودی متنی به مدل زبانی. [ماژول 02](../02-prompt-engineering/README.md)
+**پرامپت** - ورودی متنی به مدل زبانی. [ماژول ۰۲](../02-prompt-engineering/README.md)
-**جستجوی معنایی (Semantic Search)** - جستجو بر اساس معنا با استفاده از بردارها، نه کلیدواژهها. [ماژول 03](../03-rag/README.md)
+**جستجوی معنایی** - جستجو بر اساس معنا با استفاده از بردارهای تعبیه، نه کلمات کلیدی. [ماژول ۰۳](../03-rag/README.md)
-**حالتمند در مقابل بدون حالت (Stateful vs Stateless)** - بدون حالت: بدون حافظه. حالتمند: نگهداری تاریخچه مکالمه. [ماژول 01](../01-introduction/README.md)
+**حالت بدون حفظ وضعیت در مقابل حفظ وضعیت** - بدون حفظ وضعیت: بدون حافظه. حفظ وضعیت: تاریخچه مکالمه را نگه میدارد. [ماژول ۰۱](../01-introduction/README.md)
-**توکنها (Tokens)** - واحدهای پایه متنی که مدلها پردازش میکنند. تاثیرگذار بر هزینهها و محدودیتها. [ماژول 01](../01-introduction/README.md)
+**توکنها** - واحدهای متنی پایه که مدلها پردازش میکنند. بر هزینهها و محدودیتها تأثیر میگذارد. [ماژول ۰۱](../01-introduction/README.md)
-**زنجیره ابزار (Tool Chaining)** - اجرای متوالی ابزارها که خروجی مرحله قبلی به تماس بعدی اطلاع میدهد. [ماژول 04](../04-tools/README.md)
+**زنجیره ابزار** - اجرای متوالی ابزارها که خروجی مرحله قبلی را برای مرحله بعدی استفاده میکند. [ماژول ۰۴](../04-tools/README.md)
## اجزای LangChain4j
-**AiServices** - ایجاد رابطهای خدمات هوش مصنوعی با نوع ایمن.
+**AiServices** - ایجاد رابطهای خدمات AI نوع ایمن.
-**OpenAiOfficialChatModel** - کلاینت یکپارچه برای مدلهای OpenAI و Azure OpenAI.
+**OpenAiOfficialChatModel** - مشتری یکپارچه برای مدلهای OpenAI و Azure OpenAI.
-**OpenAiOfficialEmbeddingModel** - ایجاد بردارها با استفاده از کلاینت رسمی OpenAI (پشتیبانی از هر دو OpenAI و Azure OpenAI).
+**OpenAiOfficialEmbeddingModel** - ایجاد بردارهای تعبیه با استفاده از مشتری رسمی OpenAI (پشتیبانی از OpenAI و Azure OpenAI).
**ChatModel** - رابط اصلی برای مدلهای زبانی.
-**ChatMemory** - نگهداری تاریخچه مکالمه.
+**ChatMemory** - حفظ تاریخچه مکالمه.
**ContentRetriever** - یافتن قطعات مرتبط سند برای RAG.
@@ -60,173 +60,171 @@
**EmbeddingModel** - تبدیل متن به بردارهای عددی.
-**EmbeddingStore** - ذخیره و بازیابی بردارها.
+**EmbeddingStore** - ذخیره و بازیابی بردارهای تعبیه.
-**MessageWindowChatMemory** - نگهداری پنجره متحرک پیامهای اخیر.
+**MessageWindowChatMemory** - حفظ پنجره لغزندهای از پیامهای اخیر.
-**PromptTemplate** - ایجاد درخواستهای قابل استفاده مجدد با جایگزینهای `{{variable}}`.
+**PromptTemplate** - ایجاد پرامپتهای قابل استفاده مجدد با جایگزینهای `{{variable}}`.
-**TextSegment** - قطعه متنی همراه با متادیتا. استفاده شده در RAG.
+**TextSegment** - قطعه متنی با فراداده. در RAG استفاده میشود.
-**ToolExecutionRequest** - نمایش درخواست اجرای ابزار.
+**ToolExecutionRequest** - نمایانگر درخواست اجرای ابزار.
-**UserMessage / AiMessage / SystemMessage** - انواع پیامهای مکالمه.
+**UserMessage / AiMessage / SystemMessage** - انواع پیام مکالمه.
-## مفاهیم هوش مصنوعی/یادگیری ماشینی
+## مفاهیم AI/ML
-**یادگیری با نمونههای اندک (Few-Shot Learning)** - ارائه مثالها در درخواستها. [ماژول 02](../02-prompt-engineering/README.md)
+**یادگیری با نمونه کم (Few-Shot Learning)** - ارائه نمونهها در پرامپتها. [ماژول ۰۲](../02-prompt-engineering/README.md)
-**مدل زبانی بزرگ (LLM)** - مدلهای هوش مصنوعی آموزش دیده روی دادههای متنی بسیار زیاد.
+**مدل زبانی بزرگ (LLM)** - مدلهای AI آموزش دیده روی حجم زیادی از دادههای متنی.
-**تلاش استدلالی (Reasoning Effort)** - پارامتر GPT-5.2 برای کنترل عمق تفکر. [ماژول 02](../02-prompt-engineering/README.md)
+**تلاش استدلالی** - پارامتری در GPT-5.2 که عمق تفکر را کنترل میکند. [ماژول ۰۲](../02-prompt-engineering/README.md)
-**دمای خروجی (Temperature)** - کنترل تصادفی بودن خروجی. پایین=قابل پیشبینی، بالا=خلاقانه.
+**دما (Temperature)** - کنترل تصادفی بودن خروجی. پایین = قطعی، بالا = خلاقانه.
-**پایگاه داده برداری (Vector Database)** - پایگاه داده تخصصی برای بردارها. [ماژول 03](../03-rag/README.md)
+**پایگاه داده برداری** - پایگاه داده تخصصی برای بردارهای تعبیه. [ماژول ۰۳](../03-rag/README.md)
-**یادگیری بدون نمونه (Zero-Shot Learning)** - انجام کارها بدون ارائه مثال. [ماژول 02](../02-prompt-engineering/README.md)
+**یادگیری بدون نمونه (Zero-Shot Learning)** - انجام وظایف بدون نمونه. [ماژول ۰۲](../02-prompt-engineering/README.md)
-## Guardrails - [ماژول 00](../00-quick-start/README.md)
+## محافظها
-**دفاع چندلایه (Defense in Depth)** - رویکرد امنیتی با چند لایه که guardrails در سطح برنامه را با فیلترهای ایمنی ارائه دهنده ترکیب میکند.
+**دفاع در عمق** - رویکرد امنیتی چندلایه که محافظهای در سطح برنامه را با فیلترهای ایمنی ارائهدهنده ترکیب میکند.
-**بلاک سخت (Hard Block)** - ارائه دهنده در صورت تخلفات شدید محتوایی خطای HTTP 400 میدهد.
+**مسدودسازی سخت** - ارائهدهنده خطای HTTP 400 برای نقضهای جدی محتوا صادر میکند.
-**InputGuardrail** - رابط LangChain4j برای اعتبارسنجی ورودی کاربر قبل از رسیدن به LLM. صرفهجویی در هزینه و تاخیر با مسدود کردن درخواستهای مضر در مراحل اولیه.
+**محافظ ورودی** - رابط LangChain4j برای اعتبارسنجی ورودی کاربر قبل از رسیدن به LLM. با مسدود کردن زودهنگام پرامپتهای مضر، هزینه و تأخیر را کاهش میدهد.
-**InputGuardrailResult** - نوع بازگشتی برای اعتبارسنجی guardrail: `success()` یا `fatal("reason")`.
+**نتیجه محافظ ورودی** - نوع بازگشتی برای اعتبارسنجی محافظ: `success()` یا `fatal("reason")`.
-**OutputGuardrail** - رابط برای اعتبارسنجی پاسخهای هوش مصنوعی پیش از بازگشت به کاربران.
+**محافظ خروجی** - رابط برای اعتبارسنجی پاسخهای AI قبل از بازگشت به کاربران.
-**فیلترهای ایمنی ارائهدهنده (Provider Safety Filters)** - فیلترهای محتوای درونساخت ارائهدهندگان هوش مصنوعی (مانند GitHub Models) که تخلفات را در سطح API تشخیص میدهند.
+**فیلترهای ایمنی ارائهدهنده** - فیلترهای محتوای داخلی از ارائهدهندگان هوش مصنوعی (مثلاً Azure OpenAI) که نقضها را در سطح API میگیرند.
-**رد خارج از چارچوب نرم (Soft Refusal)** - مدل با احترام از پاسخ دادن امتناع میکند بدون اینکه خطا دهد.
+**رد نرم** - مدل به طور مودبانه از پاسخ دادن امتناع میکند بدون اینکه خطا بدهد.
-## مهندسی درخواست - [ماژول 02](../02-prompt-engineering/README.md)
+## مهندسی پرامپت - [ماژول ۰۲](../02-prompt-engineering/README.md)
-**زنجیره تفکر (Chain-of-Thought)** - استدلال گامبهگام برای دقت بهتر.
+**زنجیره تفکر** - استدلال گام به گام برای دقت بهتر.
-**خروجی محدود (Constrained Output)** - اعمال قالب یا ساختار مشخص.
+**خروجی محدود شده** - اجبار به فرمت یا ساختار خاص.
-**اشتیاق بالا (High Eagerness)** - الگوی GPT-5.2 برای استدلال کامل.
+**اشتیاق زیاد** - الگوی GPT-5.2 برای استدلال کامل.
-**اشتیاق پایین (Low Eagerness)** - الگوی GPT-5.2 برای پاسخ سریع.
+**اشتیاق پایین** - الگوی GPT-5.2 برای پاسخهای سریع.
-**مکالمه چند مرحلهای (Multi-Turn Conversation)** - حفظ زمینه در تبادلهای متعدد.
+**مکالمه چندنوبتی** - حفظ زمینه در تبادلات مختلف.
-**درخواست با نقش (Role-Based Prompting)** - تعیین شخصیت مدل از طریق پیامهای سیستمی.
+**پرامپت نقشمحور** - تنظیم شخصیت مدل از طریق پیامهای سیستمی.
-**خودبازبینی (Self-Reflection)** - مدل خروجی خود را ارزیابی و بهبود میبخشد.
+**بازتاب خود** - مدل خروجی خود را ارزیابی و بهبود میبخشد.
-**تحلیل ساختاری (Structured Analysis)** - چارچوب ارزیابی مشخص.
+**تحلیل ساختاریافته** - چارچوب ارزیابی ثابت.
-**الگوی اجرای وظیفه (Task Execution Pattern)** - برنامهریزی → اجرا → خلاصهسازی.
+**الگوی اجرای وظیفه** - برنامهریزی → اجرا → خلاصهسازی.
-## RAG (تولید افزوده شده بازیابی) - [ماژول 03](../03-rag/README.md)
+## RAG (تولید افزوده شده با بازیابی) - [ماژول ۰۳](../03-rag/README.md)
-**خط پردازش سند (Document Processing Pipeline)** - بارگیری → تکه تکه کردن → تعبیه → ذخیره.
+**خط لوله پردازش سند** - بارگذاری → تکهبندی → تعبیه سازی → ذخیره.
-**انبار بردار در حافظه (In-Memory Embedding Store)** - ذخیرهسازی غیرپایدار برای آزمایش.
+**ذخیرهسازی تعبیه در حافظه** - ذخیرهسازی غیر پایدار برای آزمایش.
-**RAG** - ترکیب بازیابی با تولید برای اساس دادن پاسخها.
+**RAG** - ترکیب بازیابی با تولید برای پاسخهای منطبق بر مستندات.
-**امتیاز شباهت (Similarity Score)** - اندازهگیری (۰-۱) شباهت معنایی.
+**امتیاز شباهت** - اندازهگیری (۰ تا ۱) شباهت معنایی.
-**مرجع منبع (Source Reference)** - متادیتا درباره محتوای بازیابی شده.
+**ارجاع منبع** - فراداده درباره محتوای بازیابی شده.
-## عاملها و ابزارها - [ماژول 04](../04-tools/README.md)
+## عاملها و ابزارها - [ماژول ۰۴](../04-tools/README.md)
-**حاشیهنویسی @Tool** - علامتگذاری متدهای جاوا به عنوان ابزارهای قابل فراخوانی توسط هوش مصنوعی.
+**@Tool Annotation** - علامتگذاری متدهای جاوا به عنوان ابزارهای قابل فراخوانی توسط AI.
**الگوی ReAct** - استدلال → عمل → مشاهده → تکرار.
-**مدیریت جلسه (Session Management)** - زمینههای جداگانه برای کاربران مختلف.
+**مدیریت جلسه** - زمینههای جداگانه برای کاربران مختلف.
-**ابزار (Tool)** - تابعی که یک عامل هوش مصنوعی میتواند آن را فراخوانی کند.
+**ابزار** - تابعی که عامل AI میتواند فراخوانی کند.
-**توضیح ابزار (Tool Description)** - مستندسازی هدف و پارامترهای ابزار.
+**توضیح ابزار** - مستندسازی هدف و پارامترهای ابزار.
-## ماژول عاملی - [ماژول 05](../05-mcp/README.md)
+## مدول عاملمحور - [ماژول ۰۵](../05-mcp/README.md)
-**حاشیهنویسی @Agent** - علامتگذاری رابطها به عنوان عوامل هوش مصنوعی با تعریف رفتار اظهاری.
+**@Agent Annotation** - علامتگذاری رابطها به عنوان عوامل AI با تعریف رفتاری اظهاری.
-**شنونده عامل (Agent Listener)** - قلابی برای مانیتورینگ اجرای عامل via `beforeAgentInvocation()` و `afterAgentInvocation()`.
+**شنونده عامل** - هوک برای نظارت بر اجرای عامل از طریق `beforeAgentInvocation()` و `afterAgentInvocation()`.
-**حوزه عاملی (Agentic Scope)** - حافظه مشترکی که عوامل نتایج را با استفاده از `outputKey` ذخیره میکنند تا عوامل پاییندستی مصرف کنند.
+**دامنه عاملی** - حافظه مشترکی که عوامل خروجیها را با استفاده از `outputKey` ذخیره میکنند تا عوامل پاییندستی مصرف کنند.
-**AgenticServices** - کارخانهای برای ایجاد عوامل با استفاده از `agentBuilder()` و `supervisorBuilder()`.
+**AgenticServices** - کارخانه برای ساخت عوامل با استفاده از `agentBuilder()` و `supervisorBuilder()`.
-**جریان کاری شرطی (Conditional Workflow)** - مسیریابی بر اساس شرایط به عوامل متخصص مختلف.
+**گردش کار شرطی** - مسیر دهی به عوامل متخصص مختلف بر اساس شرایط.
-**انسان در حلقه (Human-in-the-Loop)** - الگوی جریان کاری افزودن نقاط کنترل انسانی برای تایید یا بازبینی محتوا.
+**انسان در حلقه** - الگوی گردش کار که نقاط بررسی انسانی برای تایید یا بازبینی محتوا اضافه میکند.
-**langchain4j-agentic** - وابستگی Maven برای ساخت عامل اظهاری (آزمایشی).
+**langchain4j-agentic** - وابستگی مِیون برای ساخت عاملهای اظهاری (آزمایشی).
-**جریان کاری حلقهای (Loop Workflow)** - تکرار اجرای عامل تا زمانی که شرطی برآورده شود (مثلاً امتیاز کیفیت ≥ ۰.۸).
+**گردش کار حلقهای** - اجرای مکرر عامل تا رسیدن به یک شرط (مثلاً امتیاز کیفیت ≥ ۰.۸).
-**outputKey** - پارامتر حاشیهنویسی عامل که مشخص میکند نتایج کجا در حوزه عاملی ذخیره شوند.
+**outputKey** - پارامتر علامتگذاری عامل که مشخص میکند نتایج کجا در دامنه عاملی ذخیره شوند.
-**جریان کاری موازی (Parallel Workflow)** - اجرای همزمان چند عامل برای وظایف مستقل.
+**گردش کار موازی** - اجرای چند عامل به طور همزمان برای وظایف مستقل.
-**استراتژی پاسخ (Response Strategy)** - نحوه فرموله کردن پاسخ نهایی توسط سرپرست: LAST، SUMMARY یا SCORED.
+**استراتژی پاسخ** - چگونگی فرمولاسیون پاسخ نهایی توسط ناظر: آخرین، خلاصه یا امتیازدهی شده.
-**جریان کاری ترتیبی (Sequential Workflow)** - اجرای عوامل به ترتیبی که خروجی به مرحله بعدی منتقل شود.
+**گردش کار ترتیبی** - اجرای عوامل به ترتیب که خروجی به مرحله بعدی انتقال مییابد.
-**الگوی عامل سرپرست (Supervisor Agent Pattern)** - الگوی پیشرفته عاملی که در آن یک LLM سرپرست به صورت پویا تصمیم میگیرد کدام عوامل زیرمجموعه را فراخوانی کند.
+**الگوی عامل ناظر** - الگوی پیشرفته عاملی که در آن یک LLM ناظر به طور پویا تصمیم میگیرد کدام زیرعاملها را فراخوانی کند.
-## پروتکل زمینه مدل (MCP) - [ماژول 05](../05-mcp/README.md)
+## پروتکل زمینه مدل (MCP) - [ماژول ۰۵](../05-mcp/README.md)
-**langchain4j-mcp** - وابستگی Maven برای ادغام MCP در LangChain4j.
+**langchain4j-mcp** - وابستگی مِیون برای ادغام MCP در LangChain4j.
-**MCP** - پروتکل زمینه مدل: استاندارد اتصال برنامههای هوش مصنوعی به ابزارهای خارجی. یک بار بساز، همهجا استفاده کن.
+**MCP** - پروتکل زمینه مدل: استانداردی برای اتصال برنامههای AI به ابزارهای خارجی. یک بار بسازید، همه جا استفاده کنید.
-**مشتری MCP (MCP Client)** - برنامهای که به سرورهای MCP متصل میشود تا ابزارها را کشف و استفاده کند.
+**مشتری MCP** - برنامهای که به سرورهای MCP متصل میشود تا ابزارها را کشف و استفاده کند.
-**سرور MCP (MCP Server)** - سرویس ارائهدهنده ابزارها از طریق MCP با توصیفات و اسکیمای پارامترهای شفاف.
+**سرور MCP** - خدماتی که ابزارها را از طریق MCP با شرحهای واضح و ساختار پارامترها ارائه میدهد.
-**McpToolProvider** - جزء LangChain4j که ابزارهای MCP را برای استفاده در خدمات و عوامل هوش مصنوعی بستهبندی میکند.
+**McpToolProvider** - جزء LangChain4j که ابزارهای MCP را برای استفاده در خدمات AI و عاملها بستهبندی میکند.
-**McpTransport** - رابط ارتباط MCP. پیادهسازیها شامل Stdio و HTTP.
+**McpTransport** - رابط برای ارتباط MCP. پیادهسازیها شامل Stdio و HTTP است.
-**انتقال Stdio** - انتقال محلی از طریق stdin/stdout. برای دسترسی به فایلسیستم یا ابزارهای خط فرمان مفید است.
+**ترابری Stdio** - ترابری فرآیند محلی از طریق stdin/stdout. برای دسترسی به سیستم فایل یا ابزارهای خط فرمان مفید است.
-**StdioMcpTransport** - پیادهسازی LangChain4j که سرور MCP را به صورت فرایند فرعی اجرا میکند.
+**StdioMcpTransport** - پیادهسازی LangChain4j که سرور MCP را به عنوان زیرفرآیند اجرا میکند.
-**کشف ابزار (Tool Discovery)** - مشتری از سرور درخواست فهرست ابزارهای موجود با توصیفات و اسکیمای پارامترها میکند.
+**کشف ابزار** - مشتری از سرور درباره ابزارهای موجود با شرحها و ساختارها پرسوجو میکند.
-## خدمات Azure - [ماژول 01](../01-introduction/README.md)
+## خدمات Azure - [ماژول ۰۱](../01-introduction/README.md)
-**Azure AI Search** - جستجوی ابری با قابلیتهای برداری. [ماژول 03](../03-rag/README.md)
+**Azure AI Search** - جستجوی ابری با قابلیتهای برداری. [ماژول ۰۳](../03-rag/README.md)
-**Azure Developer CLI (azd)** - استقرار منابع Azure.
+**Azure Developer CLI (azd)** - مستقرسازی منابع Azure.
**Azure OpenAI** - سرویس هوش مصنوعی سازمانی مایکروسافت.
-**Bicep** - زبان Infrastructure as Code برای Azure. [راهنمای زیرساخت](../01-introduction/infra/README.md)
+**Bicep** - زبان زیرساخت به عنوان کد Azure. [راهنمای زیرساخت](../01-introduction/infra/README.md)
-**نام استقرار (Deployment Name)** - نام برای استقرار مدل در Azure.
+**نام مستقرسازی** - نام برای استقرار مدل در Azure.
-**GPT-5.2** - جدیدترین مدل OpenAI با کنترل استدلال. [ماژول 02](../02-prompt-engineering/README.md)
+**GPT-5.2** - جدیدترین مدل OpenAI با کنترل استدلالی. [ماژول ۰۲](../02-prompt-engineering/README.md)
## آزمایش و توسعه - [راهنمای آزمایش](TESTING.md)
-**Dev Container** - محیط توسعه کانتینر شده. [پیکربندی](../../../.devcontainer/devcontainer.json)
+**محیط توسعه کانتینری (Dev Container)** - محیط توسعه کانتینری. [پیکربندی](../../../.devcontainer/devcontainer.json)
-**GitHub Models** - زمین بازی رایگان مدلهای هوش مصنوعی. [ماژول 00](../00-quick-start/README.md)
+**آزمایش در حافظه** - آزمایش با ذخیرهسازی در حافظه.
-**آزمایش در حافظه (In-Memory Testing)** - آزمایش با ذخیرهسازی در حافظه.
+**آزمایش یکپارچگی** - آزمایش با زیرساخت واقعی.
-**آزمایش یکپارچهسازی (Integration Testing)** - آزمایش با زیرساخت واقعی.
+**Maven** - ابزار ساخت اتوماتیک جاوا.
-**Maven** - ابزار ساخت اتوماسیون جاوا.
+**Mockito** - چارچوب ساخت اشیاء آزمایشی جاوا.
-**Mockito** - چارچوب ماکینگ جاوا.
-
-**Spring Boot** - چارچوب برنامهنویسی جاوا. [ماژول 01](../01-introduction/README.md)
+**Spring Boot** - چارچوب برنامهنویسی جاوا. [ماژول ۰۱](../01-introduction/README.md)
---
-**سلب مسئولیت**:
-این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما برای دقت تلاش میکنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نا دقتهایی باشند. سند اصلی به زبان بومی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوء تفاهم یا تفسیر نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.
+**سلب مسئولیت**:
+این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوء تفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.
\ No newline at end of file
diff --git a/translations/fa/docs/TESTING.md b/translations/fa/docs/TESTING.md
index 68c0fb4f8..553d51dfd 100644
--- a/translations/fa/docs/TESTING.md
+++ b/translations/fa/docs/TESTING.md
@@ -1,20 +1,20 @@
-# تست برنامههای LangChain4j
+# آزمایش برنامههای LangChain4j
## فهرست مطالب
-- [شروع سریع](../../../docs)
-- [موضوعات پوشش داده شده در تستها](../../../docs)
-- [اجرای تستها](../../../docs)
-- [اجرای تستها در VS Code](../../../docs)
-- [الگوهای تست](../../../docs)
-- [فلسفه تست](../../../docs)
-- [گامهای بعدی](../../../docs)
+- [شروع سریع](#شروع-سریع)
+- [محتوای آزمونها](#محتوای-آزمونها)
+- [اجرای آزمونها](#اجرای-آزمونها)
+- [اجرای آزمونها در VS Code](#اجرای-آزمونها-در-vs-code)
+- [الگوهای آزمایشی](#الگوهای-آزمایشی)
+- [فلسفه آزمایش](#فلسفه-آزمایش)
+- [گامهای بعدی](#گامهای-بعدی)
-این راهنما شما را با تستهایی آشنا میکند که نشان میدهند چگونه برنامههای هوش مصنوعی را بدون نیاز به کلیدهای API یا سرویسهای خارجی تست کنید.
+این راهنما شما را از طریق آزمونهایی که نشان میدهند چگونه برنامههای هوش مصنوعی را بدون نیاز به کلیدهای API یا سرویسهای خارجی آزمایش کنید راهنمایی میکند.
## شروع سریع
-تمام تستها را با یک دستور اجرا کنید:
+تمام آزمونها را با یک دستور اجرا کنید:
**Bash:**
```bash
@@ -26,32 +26,31 @@ mvn test
mvn --% test
```
-وقتی همه تستها با موفقیت اجرا شدند، باید خروجی مانند تصویر زیر ببینید — تستها بدون خطا اجرا شدهاند.
+وقتی همه آزمونها با موفقیت گذشتند، باید خروجی شبیه به تصویر زیر ببینید — آزمونها بدون هیچ شکست اجرا میشوند.
-
+
-*اجرای موفق تستها که همه تستها را بدون خطا نشان میدهد*
+*اجرای موفقیتآمیز آزمونها که نشان میدهد همه آزمونها بدون شکست گذشتند*
-## موضوعات پوشش داده شده در تستها
+## محتوای آزمونها
-این دوره بر **تستهای واحد** که به صورت محلی اجرا میشوند تمرکز دارد. هر تست یک مفهوم خاص از LangChain4j را به صورت جداگانه نشان میدهد. هرم تست زیر محل قرارگیری تستهای واحد را نشان میدهد — آنها پایهای سریع و قابل اعتماد هستند که بقیه استراتژی تست شما بر اساس آن ساخته میشود.
+این دوره بر روی **آزمونهای واحد** که به صورت محلی اجرا میشوند تمرکز دارد. هر آزمون یک مفهوم خاص از LangChain4j را به طور مجزا نشان میدهد. هرم آزمایش زیر نشان میدهد که آزمونهای واحد در کجا قرار میگیرند — آنها پایه سریع و قابل اعتمادی تشکیل میدهند که باقی استراتژی آزمون شما بر آن بنا میشود.
-
+
-*هرم تست که تعادل بین تستهای واحد (سریع، جداگانه)، تستهای یکپارچهسازی (کامپوننتهای واقعی) و تستهای انتها-به-انتها را نشان میدهد. این آموزش بر تست واحد متمرکز است.*
+*هرم آزمایش که تعادل بین آزمونهای واحد (سریع، جدا شده)، آزمونهای یکپارچهسازی (کامپوننتهای واقعی) و آزمونهای انتها به انتها را نشان میدهد. این آموزش پوششدهنده آزمون واحد است.*
-| ماژول | تستها | محور تمرکز | فایلهای کلیدی |
+| ماژول | آزمونها | تمرکز | فایلهای کلیدی |
|--------|-------|-------|-----------|
-| **00 - شروع سریع** | 6 | قالبهای پرسش و جایگزینی متغیرها | `SimpleQuickStartTest.java` |
-| **01 - معرفی** | 8 | حافظه مکالمه و چت حالتمند | `SimpleConversationTest.java` |
-| **02 - مهندسی پرسش** | 12 | الگوهای GPT-5.2، سطوح اشتیاق، خروجی ساختاریافته | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | دریافت اسناد، تعبیهها، جستجوی مشابهت | `DocumentServiceTest.java` |
-| **04 - ابزارها** | 12 | فراخوانی تابع و زنجیرهسازی ابزارها | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | پروتکل زمینه مدل با انتقال stdio | `SimpleMcpTest.java` |
+| **۰۱ - مقدمه** | ۸ | حافظه مکالمه و چت حالتدار | `SimpleConversationTest.java` |
+| **۰۲ - مهندسی پرسوجو** | ۱۲ | الگوهای GPT-5.2، سطوح اشتیاق، خروجی ساختیافته | `SimpleGpt5PromptTest.java` |
+| **۰۳ - RAG** | ۱۰ | وارد کردن سند، جاسازیها، جستجوی مشابهت | `DocumentServiceTest.java` |
+| **۰۴ - ابزارها** | ۱۲ | فراخوانی توابع و زنجیره ابزارها | `SimpleToolsTest.java` |
+| **۰۵ - MCP** | ۸ | پروتکل زمینه مدل با انتقال stdio | `SimpleMcpTest.java` |
-## اجرای تستها
+## اجرای آزمونها
-**اجرای همه تستها از ریشه:**
+**اجرای همه آزمونها از ریشه پروژه:**
**Bash:**
```bash
@@ -63,7 +62,7 @@ mvn test
mvn --% test
```
-**اجرای تستهای یک ماژول خاص:**
+**اجرای آزمونها برای یک ماژول خاص:**
**Bash:**
```bash
@@ -79,7 +78,7 @@ cd 01-introduction; mvn --% test
mvn --% test -pl 01-introduction
```
-**اجرای یک کلاس تست خاص:**
+**اجرای یک کلاس آزمون واحد:**
**Bash:**
```bash
@@ -91,45 +90,45 @@ mvn test -Dtest=SimpleConversationTest
mvn --% test -Dtest=SimpleConversationTest
```
-**اجرای یک متد تست مشخص:**
+**اجرای یک متد آزمون مشخص:**
**Bash:**
```bash
-mvn test -Dtest=SimpleConversationTest#باید سابقه مکالمه را حفظ کند
+mvn test -Dtest=SimpleConversationTest#باید تاریخچهی گفتگو حفظ شود
```
**PowerShell:**
```powershell
-mvn --% test -Dtest=SimpleConversationTest#آیا باید سابقه گفتگو حفظ شود؟
+mvn --% test -Dtest=SimpleConversationTest#باید تاریخچه مکالمه حفظ شود
```
-## اجرای تستها در VS Code
+## اجرای آزمونها در VS Code
-اگر از Visual Studio Code استفاده میکنید، Test Explorer یک رابط گرافیکی برای اجرای تستها و اشکالزدایی ارائه میدهد.
+اگر از Visual Studio Code استفاده میکنید، Test Explorer یک رابط گرافیکی برای اجرای و دیباگ کردن آزمونها فراهم میکند.
-
+
-*Test Explorer در VS Code درخت تستها را با همه کلاسهای تست جاوا و متدهای تست جداگانه نشان میدهد*
+*کاوشگر آزمون VS Code که درخت آزمون را با تمام کلاسهای آزمون جاوا و متدهای آزمون فردی نشان میدهد*
-**برای اجرای تستها در VS Code:**
+**برای اجرای آزمونها در VS Code:**
-1. تست اکسپلورر را با کلیک بر روی آیکون ارلن آزمایش در نوار فعالیت باز کنید
-2. درخت تست را گسترش دهید تا همه ماژولها و کلاسهای تست را ببینید
-3. روی دکمه پخش کنار هر تست کلیک کنید تا به صورت جداگانه اجرا شود
+1. با کلیک روی آیکون ارلنما در نوار فعالیت (Activity Bar) کاوشگر آزمون را باز کنید
+2. درخت آزمون را باز کنید تا همه ماژولها و کلاسهای آزمون را ببینید
+3. روی دکمه پخش کنار هر آزمون کلیک کنید تا فقط آن را اجرا کنید
4. روی "Run All Tests" کلیک کنید تا کل مجموعه اجرا شود
-5. روی هر تست راستکلیک کنید و "Debug Test" را انتخاب کنید تا نقاط قطع تنظیم و کد مرحلهبهمرحله اجرا شود
+5. روی هر آزمون راستکلیک کرده و "Debug Test" را انتخاب کنید تا نقاط توقف تنظیم و مرحلهای کد را بررسی کنید
-Test Explorer تیکهای سبز برای تستهای موفق نشان میدهد و پیامهای خطای دقیق را در زمان شکست تستها ارائه میدهد.
+کاوشگر آزمون علامتهای تیک سبز برای آزمونهای موفق و پیامهای شکست دقیق هنگام ناموفق بودن آزمونها را نشان میدهد.
-## الگوهای تست
+## الگوهای آزمایشی
-### الگو ۱: تست قالب پرسشها
+### الگو ۱: آزمایش قالبهای پرسوجو
-سادهترین الگو قالب پرسشها را بدون فراخوانی هیچ مدل هوش مصنوعی تست میکند. شما میسنجید که جایگزینی متغیرها به درستی انجام شده و قالبها طبق انتظار فرمت شدهاند.
+سادهترین الگو قالبهای پرسوجو را بدون فراخوانی هیچ مدل هوش مصنوعی آزمایش میکند. شما صحت جایگزینی متغیرها را بررسی میکنید و اطمینان مییابید که قالبها به درستی قالببندی شدهاند.
-
+
-*تست قالبهای پرسش که جریان جایگزینی متغیرها را نشان میدهد: قالب با مکاننماها → مقادیر اعمال شده → خروجی فرمت شده تأیید شده*
+*آزمایش قالبهای پرسوجو که جریان جایگزینی متغیرها را نشان میدهد: قالب با مکاننماها → مقادیر اعمال شده → خروجی قالببندی شده تأیید شده*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-این تست در `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java` قرار دارد.
+این الگو تأیید میکند که جایگزینی متغیرها به درستی انجام شده و قالبها به شکل مورد انتظار قالببندی شدهاند — نیازی به کلید API یا فراخوانی مدل نیست.
-**برای اجرا:**
+### الگو ۲: ایجاد مدلهای زبان جعلی (Mocking)
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#قالببندی الگوی درخواست آزمایشی
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#قالببندی آزمون الگوخواسته
-```
-
-### الگو ۲: شبیهسازی مدلهای زبانی
-
-در تست منطق مکالمه، از Mockito برای ساخت مدلهای جعلی استفاده کنید که پاسخهای از پیش تعیینشده برمیگردانند. این موجب سرعت، رایگان بودن و قطعی بودن تستها میشود.
+هنگام آزمایش منطق مکالمه، از Mockito برای ساخت مدلهای جعلی استفاده کنید که پاسخهای از پیش تعیین شده را برمیگردانند. این باعث میشود آزمونها سریع، رایگان و قطعی باشند.
-
+
-*مقایسهای که نشان میدهد چرا شبیهسازیها برای تست ترجیح داده میشوند: سریع، رایگان، قطعی و بدون نیاز به کلیدهای API هستند*
+*مقایسهای که چرا مدلهای جعلی برای آزمایش ترجیح داده میشوند: سریع، رایگان، قطعی و بدون نیاز به کلید API*
```java
@ExtendWith(MockitoExtension.class)
@@ -218,15 +205,15 @@ class SimpleConversationTest {
}
```
-این الگو در `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java` ظاهر میشود. شبیهسازی رفتار یکسان را تضمین میکند تا بتوانید مدیریت حافظه را به درستی تأیید کنید.
+این الگو در فایل `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java` ظاهر میشود. مدل جعلی رفتار یکنواخت را تضمین میکند تا بتوانید مدیریت حافظه را به درستی بررسی کنید.
-### الگو ۳: تست جداسازی مکالمه
+### الگو ۳: آزمایش جداسازی مکالمه
-حافظه مکالمه باید کاربران مختلف را جدا نگه دارد. این تست تأیید میکند که مکالمات زمینهها را مخلوط نمیکنند.
+حافظه مکالمه باید چندین کاربر را جدا نگه دارد. این آزمون تأیید میکند که مکالمات زمینهها را مخلوط نمیکنند.
-
+
-*تست جداسازی مکالمه که فروشگاههای حافظه جداگانه برای کاربران مختلف برای جلوگیری از مخلوط شدن زمینهها را نشان میدهد*
+*آزمایش جداسازی مکالمه که نشاندهنده نگهداری حافظه جداگانه برای کاربران مختلف برای جلوگیری از مخلوط شدن زمینهها است*
```java
@Test
@@ -250,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-هر مکالمه تاریخچه مستقل خود را حفظ میکند. در سیستمهای تولید، این جداسازی برای برنامههای چند کاربره حیاتی است.
+هر مکالمه تاریخچه مستقل خود را حفظ میکند. در سیستمهای تولید، این جداسازی برای برنامههای چندکاربره حیاتی است.
-### الگو ۴: تست ابزارها به صورت مستقل
+### الگو ۴: آزمایش مستقل ابزارها
-ابزارها توابعی هستند که هوش مصنوعی میتواند فراخوانی کند. آنها را به صورت مستقیم تست کنید تا مطمئن شوید فارغ از تصمیمات هوش مصنوعی درست کار میکنند.
+ابزارها توابعی هستند که هوش مصنوعی میتواند فراخوانی کند. آنها را مستقیماً آزمایش کنید تا اطمینان حاصل شود که بدون توجه به تصمیمات هوش مصنوعی به درستی کار میکنند.
-
+
-*تست ابزارها به صورت مستقل که اجرای ابزارهای شبیهسازیشده بدون فراخوانی هوش مصنوعی را برای تأیید منطق کسبوکار نشان میدهد*
+*آزمایش مستقل ابزارها که اجرای ابزارهای جعلی بدون فراخوانی هوش مصنوعی را نشان میدهد تا منطق کسبوکار تحقق یابد*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-این تستها از `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` منطق ابزار را بدون دخالت هوش مصنوعی اعتبارسنجی میکنند. مثال زنجیرهسازی نشان میدهد چگونه خروجی ابزار یک ورودی برای دیگری است.
+این آزمایشها از `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` منطق ابزار را بدون دخالت هوش مصنوعی اعتبارسنجی میکنند. نمونه زنجیرهای نشان میدهد چگونه خروجی یک ابزار به ورودی ابزار دیگر میرود.
-### الگو ۵: تست RAG در حافظه
+### الگو ۵: آزمایش RAG در حافظه
-سیستمهای RAG معمولاً به پایگاه دادههای برداری و سرویسهای تعبیه نیاز دارند. الگوی درون حافظه اجازه میدهد کل خط لوله بدون وابستگیهای خارجی تست شود.
+سیستمهای RAG معمولاً به پایگاه دادههای برداری و خدمات جاسازی نیاز دارند. الگوی درون حافظه اجازه میدهد کل زنجیره بدون وابستگی خارجی آزمایش شود.
-
+
-*روند تست RAG در حافظه که تجزیه سند، ذخیره تعبیهها و جستجوی مشابهت را بدون نیاز به پایگاه داده نشان میدهد*
+*فرآیند آزمایشی RAG در حافظه که پارس کردن سند، ذخیره جاسازی و جستجوی مشابهت را بدون نیاز به پایگاه داده نشان میدهد*
```java
@Test
@@ -306,15 +293,15 @@ void testProcessTextDocument() {
}
```
-این تست از `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` سندی را در حافظه ایجاد میکند و تجزیه بخشبندی و مدیریت متادیتا را تأیید میکند.
+این آزمون از `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` یک سند در حافظه ایجاد میکند و قطعهبندی و مدیریت متادیتا را بررسی میکند.
-### الگو ۶: تست یکپارچهسازی MCP
+### الگو ۶: آزمایش یکپارچهسازی MCP
-ماژول MCP تست پروتکل زمینه مدل را با استفاده از انتقال stdio انجام میدهد. این تستها اطمینان میدهند که برنامه شما میتواند سرورهای MCP را به عنوان زیرفرآیند اجرا و با آنها ارتباط برقرار کند.
+ماژول MCP آزمایش یکپارچهسازی پروتکل زمینه مدل را با انتقال stdio انجام میدهد. این آزمایشها اطمینان میدهند که برنامه شما میتواند سرورهای MCP را به صورت زیرفرآیند ایجاد و با آنها ارتباط برقرار کند.
-تستها در `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` رفتار کلاینت MCP را اعتبارسنجی میکنند.
+آزمونها در `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` رفتار کلاینت MCP را اعتبارسنجی میکنند.
-**برای اجرا:**
+**اجرایشان کنید:**
**Bash:**
```bash
@@ -326,38 +313,37 @@ cd 05-mcp && mvn test
cd 05-mcp; mvn --% test
```
-## فلسفه تست
+## فلسفه آزمایش
-کد خود را تست کنید، نه هوش مصنوعی را. تستهای شما باید کدی را که مینویسید با بررسی نحوه ساخت پرسشها، مدیریت حافظه و اجرای ابزارها اعتبارسنجی کنند. پاسخهای هوش مصنوعی متفاوت هستند و نباید بخشی از تأییدیههای تست باشند. از خود بپرسید آیا قالب پرسش شما متغیرها را به درستی جایگزین میکند، نه اینکه آیا هوش مصنوعی پاسخ درست میدهد.
+کد خود را آزمایش کنید، نه هوش مصنوعی را. آزمونهای شما باید کدی که مینویسید را با بررسی نحوه ساخت پرسوجوها، مدیریت حافظه و اجرای ابزارها اعتبارسنجی کنند. پاسخهای هوش مصنوعی متغیر هستند و نباید جزو تأییدیههای آزمون باشند. از خود بپرسید آیا قالب پرسوجوی شما به درستی جایگزین متغیرها را انجام میدهد، نه اینکه آیا پاسخ هوش مصنوعی درست است.
-از شبیهسازیها برای مدلهای زبانی استفاده کنید. آنها وابستگیهای خارجی هستند که کند، گران و غیرقطعی هستند. شبیهسازی تستها را سریع با میلیثانیه به جای ثانیه، رایگان بدون هزینه API و قطعی با همان نتیجه در هر بار اجرا میکند.
+از مدلهای جعلی برای مدلهای زبان استفاده کنید. آنها وابستگیهای خارجی هستند که کند، پرهزینه و غیرقطعیاند. استفاده از جعلیها باعث میشود آزمونها سریع (با میلیثانیه به جای ثانیه)، رایگان (بدون هزینه API) و قطعی (همیشه نتیجه یکسان) باشند.
-تستها را مستقل نگه دارید. هر تست باید دادههای خودش را راهاندازی کند، به تستهای دیگر وابسته نباشد و پس از اجرا پاکسازی کند. تستها باید فارغ از ترتیب اجرا پذیرفته شوند.
+آزمونها را مستقل نگه دارید. هر آزمون باید دادههای خود را تنظیم کند، به آزمونهای دیگر وابسته نباشد و پس از اجرا پاکسازی کند. آزمونها باید صرفنظر از ترتیب اجرا، موفق باشند.
-موارد حاشیهای فراتر از مسیر خوشحال را تست کنید. ورودیهای خالی، خیلی بزرگ، کاراکترهای خاص، پارامترهای نامعتبر و شرایط مرزی را امتحان کنید. این موارد اغلب خطاهایی را نشان میدهند که استفاده عادی نشان نمیدهد.
+موارد حاشیهای را فراتر از مسیر خوشآیند آزمایش کنید. ورودیهای خالی، ورودیهای بسیار بزرگ، کاراکترهای خاص، پارامترهای نامعتبر و شرایط مرزی را امتحان کنید. این موارد اغلب باگهایی را آشکار میکنند که استفاده معمولی نشان نمیدهد.
-از نامهای توصیفی استفاده کنید. مقایسه کنید `shouldMaintainConversationHistoryAcrossMultipleMessages()` با `test1()`. اولی دقیقا میگوید چه چیزی تست میشود و عیبیابی خطاها را بسیار آسان میکند.
+از نامهای توصیفی استفاده کنید. مقایسه کنید `shouldMaintainConversationHistoryAcrossMultipleMessages()` با `test1()` را. نام اول دقیقاً توضیح میدهد چه چیزی آزمایش میشود و اشکالزدایی شکستها را بسیار آسانتر میکند.
## گامهای بعدی
-حالا که الگوهای تست را درک کردید، به صورت عمیقتر به هر ماژول بپردازید:
+حال که الگوهای آزمایشی را فهمیدهاید، عمیقتر به هر ماژول بپردازید:
-- **[00 - شروع سریع](../00-quick-start/README.md)** - شروع با اصول قالب پرسش
-- **[01 - معرفی](../01-introduction/README.md)** - یادگیری مدیریت حافظه مکالمه
-- **[02 - مهندسی پرسش](../02/prompt-engineering/README.md)** - تسلط بر الگوهای GPT-5.2
-- **[03 - RAG](../03-rag/README.md)** - ساخت سیستمهای تولید تکمیل شده با بازیابی
-- **[04 - ابزارها](../04-tools/README.md)** - پیادهسازی فراخوانی توابع و زنجیره ابزارها
-- **[05 - MCP](../05-mcp/README.md)** - یکپارچهسازی پروتکل زمینه مدل
+- **[۰۱ - مقدمه](../01-introduction/README.md)** - یادگیری مدیریت حافظه مکالمه
+- **[۰۲ - مهندسی پرسوجو](../02-prompt-engineering/README.md)** - تسلط بر الگوهای پرسوجوی GPT-5.2
+- **[۰۳ - RAG](../03-rag/README.md)** - ساخت سیستمهای تولید افزوده بازیابی شده
+- **[۰۴ - ابزارها](../04-tools/README.md)** - پیادهسازی فراخوانی توابع و زنجیره ابزارها
+- **[۰۵ - MCP](../05-mcp/README.md)** - یکپارچهسازی پروتکل زمینه مدل
-README هر ماژول توضیحات مفصل مفاهیم تست شده در اینجا را ارائه میدهد.
+README هر ماژول توضیحات دقیقی از مفاهیم آزمون شده در اینجا ارائه میدهد.
---
-**ناوبری:** [← بازگشت به اصلی](../README.md)
+**گردش در سند:** [← بازگشت به اصلی](../README.md)
---
-**توضیح مسئولیت**:
-این سند با استفاده از سرویس ترجمه ماشینی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نواقصی باشند. سند اصلی به زبان مادری آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفهای توسط انسان توصیه میشود. ما در قبال هر گونه سوءتفاهم یا تفسیر نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.
+**سلب مسئولیت**:
+این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوء تفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.
\ No newline at end of file
diff --git a/translations/fi/.co-op-translator.json b/translations/fi/.co-op-translator.json
index ff9ecc939..933f94346 100644
--- a/translations/fi/.co-op-translator.json
+++ b/translations/fi/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "fi"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-02T23:35:27+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T12:23:30+00:00",
"source_file": "01-introduction/README.md",
"language_code": "fi"
},
@@ -18,20 +18,20 @@
"language_code": "fi"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-02T23:37:47+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T12:18:23+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "fi"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-02T23:39:22+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T12:22:35+00:00",
"source_file": "03-rag/README.md",
"language_code": "fi"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T11:25:43+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T12:21:07+00:00",
"source_file": "04-tools/README.md",
"language_code": "fi"
},
@@ -54,8 +54,8 @@
"language_code": "fi"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T17:08:42+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T12:16:45+00:00",
"source_file": "README.md",
"language_code": "fi"
},
@@ -72,14 +72,14 @@
"language_code": "fi"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-02T23:42:46+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T12:19:01+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "fi"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-02T23:43:32+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T12:19:43+00:00",
"source_file": "docs/TESTING.md",
"language_code": "fi"
}
diff --git a/translations/fi/00-quick-start/README.md b/translations/fi/00-quick-start/README.md
deleted file mode 100644
index 1b2d14cd0..000000000
--- a/translations/fi/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# Module 00: Quick Start
-
-## Table of Contents
-
-- [Introduction](../../../00-quick-start)
-- [What is LangChain4j?](../../../00-quick-start)
-- [LangChain4j Dependencies](../../../00-quick-start)
-- [Prerequisites](../../../00-quick-start)
-- [Setup](../../../00-quick-start)
- - [1. Get Your GitHub Token](../../../00-quick-start)
- - [2. Set Your Token](../../../00-quick-start)
-- [Run the Examples](../../../00-quick-start)
- - [1. Basic Chat](../../../00-quick-start)
- - [2. Prompt Patterns](../../../00-quick-start)
- - [3. Function Calling](../../../00-quick-start)
- - [4. Document Q&A (Easy RAG)](../../../00-quick-start)
- - [5. Responsible AI](../../../00-quick-start)
-- [What Each Example Shows](../../../00-quick-start)
-- [Next Steps](../../../00-quick-start)
-- [Troubleshooting](../../../00-quick-start)
-
-## Introduction
-
-Tämä pikaopas on tarkoitettu saamaan sinut nopeasti käyntiin LangChain4j:n kanssa. Se kattaa AI-sovellusten rakentamisen aivan perusteet LangChain4j:n ja GitHub-mallien avulla. Seuraavissa moduuleissa siirryt Azure OpenAI:hin ja GPT-5.2:een ja sukellat syvemmälle jokaiseen käsitteeseen.
-
-## What is LangChain4j?
-
-LangChain4j on Java-kirjasto, joka yksinkertaistaa tekoälyllä varustettujen sovellusten rakentamista. HTTP-asiakkaiden ja JSON-jäsentämisen sijaan työskentelet puhtaiden Java-rajapintojen kanssa.
-
-LangChainin "ketju" tarkoittaa useiden komponenttien ketjuttamista yhteen – voit ketjuttaa esimerkiksi kehotteen malliin ja sieltä jäsentimeen, tai ketjuttaa useita tekoälykutsuja, joissa yksi lähtö syöttää seuraavaa syötettä. Tämä pikaopas keskittyy perusteisiin ennen monimutkaisempien ketjujen tutkimista.
-
-
-
-*Komponenttien ketjuttaminen LangChain4j:ssä – rakennuspalikat yhdistyvät luoden tehokkaita tekoälytyönkulkuja*
-
-Käytämme kolmea ydinkomponenttia:
-
-**ChatModel** – Rajapinta tekoälymallien vuorovaikutukseen. Kutsu `model.chat("prompt")` ja saat vastausmerkkijonon. Käytämme `OpenAiOfficialChatModel`-luokkaa, joka toimii OpenAI-yhteensopivien rajapintojen kuten GitHub-mallien kanssa.
-
-**AiServices** – Luo tyyppiturvallisia tekoälypalvelunrajapintoja. Määrittele metodit, merkkaa ne `@Tool`-annotaatiolla, ja LangChain4j hoitaa orkestroinnin. Tekoäly kutsuu automaattisesti Java-menetelmiäsi tarpeen mukaan.
-
-**MessageWindowChatMemory** – Säilyttää keskusteluhistorian. Ilman tätä jokainen pyyntö on itsenäinen. Tämän kanssa tekoäly muistaa edelliset viestit ja ylläpitää kontekstia useiden vuorojen yli.
-
-
-
-*LangChain4j-arkkitehtuuri – ydinkomponentit toimivat yhdessä tehostaen tekoälysovelluksiasi*
-
-## LangChain4j Dependencies
-
-Tämä pikaopas käyttää kolmea Maven-riippuvuutta tiedostossa [`pom.xml`](../../../00-quick-start/pom.xml):
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-`langchain4j-open-ai-official`-moduuli tarjoaa `OpenAiOfficialChatModel`-luokan, joka yhdistää OpenAI-yhteensopiviin rajapintoihin. GitHub-mallit käyttävät samaa rajapintamuotoa, joten erityistä sovitinta ei tarvita – osoita vain perus-URL `https://models.github.ai/inference`.
-
-`langchain4j-easy-rag`-moduuli tarjoaa automaattisen asiakirjojen pilkkomisen, upotuksen ja haun, jotta voit rakentaa RAG-sovelluksia ilman manuaalista konfigurointia jokaiseen vaiheeseen.
-
-## Prerequisites
-
-**Käytätkö Dev Containeria?** Java ja Maven on jo asennettu. Tarvitset vain GitHubin henkilökohtaisen käyttöoikeustunnuksen.
-
-**Paikallinen kehitys:**
-- Java 21+, Maven 3.9+
-- GitHubin henkilökohtainen käyttöoikeustunnus (ohjeet alla)
-
-> **Huom:** Tässä moduulissa käytetään `gpt-4.1-nano` GitHub-malleista. Älä muuta mallin nimeä koodissa – se on määritetty toimimaan GitHubin saatavilla olevien mallien kanssa.
-
-## Setup
-
-### 1. Get Your GitHub Token
-
-1. Mene osoitteeseen [GitHub Settings → Personal Access Tokens](https://github.com/settings/personal-access-tokens)
-2. Klikkaa "Generate new token"
-3. Anna kuvaava nimi (esim. "LangChain4j Demo")
-4. Aseta vanhenemisaika (suositus 7 päivää)
-5. "Account permissions" kohdassa etsi "Models" ja aseta "Read-only"
-6. Klikkaa "Generate token"
-7. Kopioi ja tallenna tunnuksesi – et näe sitä enää uudelleen
-
-### 2. Set Your Token
-
-**Vaihtoehto 1: VS Code (suositus)**
-
-Jos käytät VS Codea, lisää tunnuksesi `.env`-tiedostoon projektin juureen:
-
-Jos `.env`-tiedostoa ei ole, kopioi `.env.example` nimellä `.env` tai luo uusi `.env` projektiin.
-
-**Esimerkki `.env`-tiedostosta:**
-```bash
-# Tiedostossa /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-Sitten voit yksinkertaisesti klikata hiiren oikealla mitä tahansa demotiedostoa (esim. `BasicChatDemo.java`) Explorerissa ja valita **"Run Java"** tai käyttää Run and Debug -paneelin käynnistyskonfiguraatioita.
-
-**Vaihtoehto 2: Terminaali**
-
-Aseta tunnus ympäristömuuttujaksi:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## Run the Examples
-
-**VS Code:** Klikkaa hiiren oikealla mitä tahansa demotiedostoa Explorerissa ja valitse **"Run Java"**, tai käytä Run and Debug -paneelin käynnistyskonfiguraatioita (muista lisätä token ensin `.env`-tiedostoon).
-
-**Mavenilla:** Vaihtoehtoisesti voit ajaa komentoriviltä:
-
-### 1. Basic Chat
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. Prompt Patterns
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-Näyttää zero-shot, few-shot, chain-of-thought ja roolipohjaiset kehotteet.
-
-### 3. Function Calling
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-Tekoäly kutsuu automaattisesti Java-menetelmiäsi tarvittaessa.
-
-### 4. Document Q&A (Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-Kysy kysymyksiä dokumenteistasi Easy RAG:n avulla, jossa upotus ja haku tapahtuvat automaattisesti.
-
-### 5. Responsible AI
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-Katso miten tekoälyn turvallisuussuodattimet estävät haitallista sisältöä.
-
-## What Each Example Shows
-
-**Basic Chat** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-Aloita tästä nähdäksesi LangChain4j:n yksinkertaisimmillaan. Luo `OpenAiOfficialChatModel`, lähetä kehotteella `.chat()` ja saa vastaus. Tämä näyttää perustan: miten mallin alustus custom-päätepisteillä ja API-avaimilla tehdään. Kun ymmärrät tämän mallin, kaikki muu rakentuu sen varaan.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 Kokeile [GitHub Copilotin](https://github.com/features/copilot) Chatilla:** Avaa [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) ja kysy:
-> - "Miten vaihtaisin koodissa GitHub-malleista Azure OpenAI:hin?"
-> - "Mitä muita parametreja voin määrittää OpenAiOfficialChatModel.builder()-metodissa?"
-> - "Miten lisäisin streaming-vastaukset sen sijaan että odotan koko vastausta?"
-
-**Prompt Engineering** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-Nyt kun tiedät, miten puhut mallille, tutki mitä sanot sille. Tämä demo käyttää samaa mallikonfiguraatiota mutta näyttää viisi erilaista kehotemallia. Kokeile zero-shot-kehotteita suorille ohjeille, few-shot-kehotteita jotka oppivat esimerkeistä, chain-of-thought-kehotteita jotka paljastavat päättelyvaiheita ja roolipohjaisia kehotteita, jotka määrittävät kontekstin. Näet miten sama malli antaa dramaattisen erilaisia vastauksia kehotteen asettelun perusteella.
-
-Demo näyttää myös kehotepohjat, jotka ovat tehokas tapa luoda uudelleen käytettäviä kehotteita muuttujilla.
-Alla oleva esimerkki näyttää kehotteen LangChain4j `PromptTemplate`-objektia käyttäen, jossa täytetään muuttujia. Tekoäly vastaa annetun kohteen ja aktiviteetin perusteella.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 Kokeile [GitHub Copilotin](https://github.com/features/copilot) Chatilla:** Avaa [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) ja kysy:
-> - "Mikä ero on zero-shot- ja few-shot-kehotteilla, ja milloin käytän kumpaakin?"
-> - "Miten lämpötila-parametri vaikuttaa mallin vastauksiin?"
-> - "Mitkä ovat tekniikoita estää kehotepohjien injektointihyökkäykset tuotannossa?"
-> - "Miten luon uudelleenkäytettäviä PromptTemplate-objekteja yleisiin malleihin?"
-
-**Tool Integration** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-Tässä LangChain4j muuttuu tehokkaaksi. Käytät `AiServices`-luokkaa tekoälyavustajan luomiseen, joka voi kutsua Java-metodejasi. Riittää, että merkitset metodit `@Tool("kuvaus")`-annotaatiolla ja LangChain4j hoitaa loput – tekoäly päättää automaattisesti, milloin käyttää mitäkin työkalua käyttäjän pyynnön mukaan. Tämä esittelee funktiokutsut, keskeisen tekniikan tekoälyn rakentamiseen, joka voi suorittaa toimintoja eikä vain vastata kysymyksiin.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 Kokeile [GitHub Copilotin](https://github.com/features/copilot) Chatilla:** Avaa [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) ja kysy:
-> - "Miten @Tool-annotaatio toimii ja mitä LangChain4j tekee sillä taustalla?"
-> - "Voiko tekoäly kutsua useita työkaluja peräkkäin ratkaistakseen monimutkaisia ongelmia?"
-> - "Mitä tapahtuu, jos työkalu heittää poikkeuksen – miten virheet pitäisi käsitellä?"
-> - "Miten integroisin oikean API:n tämän laskuesimerkin sijaan?"
-
-**Document Q&A (Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-Tässä näet RAG:n (retrieval-augmented generation) käyttäen LangChain4j:n "Easy RAG" -menetelmää. Asiakirjat ladataan, pilkotaan automaattisesti ja upotetaan muistiin, minkä jälkeen sisältöhaku toimittaa relevanteimmat palat tekoälylle kyselyhetkellä. Tekoäly vastaa asiakirjojesi perusteella, ei yleisen tietämyksensä.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 Kokeile [GitHub Copilotin](https://github.com/features/copilot) Chatilla:** Avaa [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) ja kysy:
-> - "Miten RAG estää tekoälyn harhaluulot verrattuna mallin koulutusdataan?"
-> - "Mikä ero on tässä helpossa lähestymistavassa ja mukautetussa RAG-putkessa?"
-> - "Miten skaalaisin tämän käsittelemään useita asiakirjoja tai isompia tietovarastoja?"
-
-**Responsible AI** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-Rakenna tekoälyn turvallisuus kerrospintaisesti. Tämä demo näyttää kaksi suojaustasoa, jotka toimivat yhdessä:
-
-**Osa 1: LangChain4j Input Guardrails** – Estää vaaralliset kehotteet ennen niiden pääsyä LLM:ään. Luo omat suojakaiteet, jotka tarkistavat kielletyt avainsanat tai kaavat. Nämä toimivat koodissasi, joten ne ovat nopeita ja ilmaisia.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**Osa 2: Tarjoajan turvafiltterit** – GitHub-malleissa on sisäänrakennetut suodattimet, jotka tarttuvat siihen, mitä suojakaiteesi voivat jäädä huomaamatta. Näet tiukat estot (HTTP 400 -virheet) vakavissa rikkomuksissa ja pehmeät kieltäytymiset, joissa tekoäly kohteliaasti kieltäytyy.
-
-> **🤖 Kokeile [GitHub Copilotin](https://github.com/features/copilot) Chatilla:** Avaa [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) ja kysy:
-> - "Mikä on InputGuardrail ja miten luon oman?"
-> - "Mikä ero on kovalla estolla ja pehmeällä kieltäytymisellä?"
-> - "Miksi käyttää sekä suojakaiteita että tarjoajan suodattimia yhdessä?"
-
-## Next Steps
-
-**Seuraava moduuli:** [01-introduction - Getting Started with LangChain4j](../01-introduction/README.md)
-
----
-
-**Navigointi:** [← Takaisin pääsivulle](../README.md) | [Seuraava: Module 01 - Introduction →](../01-introduction/README.md)
-
----
-
-## Troubleshooting
-
-### First-Time Maven Build
-
-**Ongelma**: Ensimmäinen `mvn clean compile` tai `mvn package` kestää kauan (10–15 minuuttia)
-
-**Syy**: Mavenin täytyy ladata kaikki projektin riippuvuudet (Spring Boot, LangChain4j-kirjastot, Azure SDK:t jne.) ensimmäisellä kerralla.
-
-**Ratkaisu**: Tämä on normaalia käyttäytymistä. Seuraavat kerrat ovat paljon nopeampia, kun riippuvuudet on tallennettu paikallisesti. Latausaika riippuu verkkoyhteyden nopeudesta.
-
-### PowerShell Maven Command Syntax
-
-**Ongelma:** Maven-komennot epäonnistuvat virheellä `Unknown lifecycle phase ".mainClass=..."`
-**Syy**: PowerShell tulkitsee `=` muuttujan määrittämisen operaattorina, mikä rikkoo Maven-ominaisuussyntaksin
-
-**Ratkaisu**: Käytä pysäytyksen jäsentämisoperaattoria `--%` ennen Maven-komentoa:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-`--%`-operaattori kertoo PowerShellille, että kaikki jäljellä olevat argumentit annetaan kirjaimellisesti Mavenille ilman tulkintaa.
-
-### Windows PowerShellin emojeiden näyttö
-
-**Ongelma**: AI-vastauksissa näkyy roska merkkeinä (esim. `????` tai `â??`) PowerShellissä emojien sijaan
-
-**Syy**: PowerShellin oletuskoodaus ei tue UTF-8-emojia
-
-**Ratkaisu**: Suorita tämä komento ennen Java-sovellusten käynnistystä:
-```cmd
-chcp 65001
-```
-
-Tämä pakottaa UTF-8-koodauksen terminaaliin. Vaihtoehtoisesti käytä Windows Terminalia, jossa on parempi Unicode-tuki.
-
-### API-pyyntöjen virheenkorjaus
-
-**Ongelma**: Todennusvirheitä, pyyntörajoituksia tai odottamattomia vastauksia AI-mallilta
-
-**Ratkaisu**: Esimerkeissä on `.logRequests(true)` ja `.logResponses(true)` näyttääksesi API-kutsut konsolissa. Tämä auttaa ratkaisemaan todennusvirheitä, pyyntörajoituksia tai odottamattomia vastauksia. Poista nämä liput tuotannossa vähentääksesi lokiääntä.
-
----
-
-
-**Vastuuvapauslauseke**:
-Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, otathan huomioon, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäiskielellä tulisi pitää virallisena lähteenä. Tärkeiden tietojen osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinkäsityksistä tai virhetulkinnoista.
-
\ No newline at end of file
diff --git a/translations/fi/01-introduction/README.md b/translations/fi/01-introduction/README.md
index fb4d13216..9dc7a8a62 100644
--- a/translations/fi/01-introduction/README.md
+++ b/translations/fi/01-introduction/README.md
@@ -1,85 +1,85 @@
-# Module 01: Aloittaminen LangChain4j:n kanssa
+# Moduuli 01: LangChain4j:n perusteet
## Sisällysluettelo
-- [Videoesittely](../../../01-introduction)
-- [Mitä opit](../../../01-introduction)
-- [Esivaatimukset](../../../01-introduction)
-- [Ymmärtäminen ydinkysymyksestä](../../../01-introduction)
-- [Tokenien ymmärtäminen](../../../01-introduction)
-- [Miten muisti toimii](../../../01-introduction)
-- [Miten tämä käyttää LangChain4j:ta](../../../01-introduction)
-- [Ota Azure OpenAI -ympäristö käyttöön](../../../01-introduction)
-- [Suorita sovellus paikallisesti](../../../01-introduction)
-- [Sovelluksen käyttäminen](../../../01-introduction)
- - [Stateless-chat (vasen paneeli)](../../../01-introduction)
- - [Stateful-chat (oikea paneeli)](../../../01-introduction)
-- [Seuraavat askeleet](../../../01-introduction)
+- [Videokävely](#videokävely)
+- [Mitä opit](#mitä-opit)
+- [Esivaatimukset](#esivaatimukset)
+- [Ymmärrä ydinkysymys](#ymmärrä-ydinkysymys)
+- [Ymmärrä tokenit](#ymmärrä-tokenit)
+- [Miten muisti toimii](#miten-muisti-toimii)
+- [Miten tämä käyttää LangChain4j:ta](#miten-tämä-käyttää-langchain4jta)
+- [Ota Azure OpenAI -infrastruktuuri käyttöön](#ota-azure-openai-infrastruktuuri-käyttöön)
+- [Suorita sovellus paikallisesti](#suorita-sovellus-paikallisesti)
+- [Sovelluksen käyttäminen](#sovelluksen-käyttäminen)
+ - [Stateless Chat (vasen paneeli)](#stateless-chat-vasen-paneeli)
+ - [Stateful Chat (oikea paneeli)](#stateful-chat-oikea-paneeli)
+- [Seuraavat askeleet](#seuraavat-askeleet)
-## Videoesittely
+## Videokävely
-Katso tämä live-sessio, joka selittää, miten aloitetaan tämän moduulin kanssa:
+Katso tämä live-sessio, joka selittää, miten aloittaa tämän moduulin kanssa:
## Mitä opit
-Pika-alussa käytit GitHub-malleja lähettääksesi kehotteita, kutsuaksesi työkaluja, rakentaaksesi RAG-putken ja testataksesi suojauksia. Ne demot näyttivät, mitä on mahdollista — nyt siirrymme Azure OpenAI:n ja GPT-5.2:n käyttöön ja alamme rakentaa tuotantotason sovelluksia. Tämä moduuli keskittyy keskustelevaan tekoälyyn, joka muistaa kontekstin ja ylläpitää tilaa — käsitteet, joita nämä pika-alun demot käyttivät taustalla mutta eivät selittäneet.
+Tämä on lähtökohtasi LangChain4j:n ja Azure OpenAI:n kanssa. Aloitamme perusteista ja alamme rakentaa tuotantotyyppisiä sovelluksia. Tämä moduuli keskittyy keskustelevaan tekoälyyn, joka muistaa kontekstin ja ylläpitää tilaa — perustavanlaatuiset käsitteet, joihin myöhemmät moduulit rakentuvat.
-Käytämme tässä oppaassa Azure OpenAI:n GPT-5.2:ta, koska sen edistyneet päättelykyvyt tekevät eri mallien käyttäytymisen selkeämmäksi. Kun lisäät muistin, näet eron selvästi. Tämä helpottaa ymmärtämään, mitä kukin komponentti tuo sovellukseesi.
+Käytämme koko oppaassa Azure OpenAI:n GPT-5.2:ta, koska sen kehittyneet päättelykyvyt tekevät erilaisten mallien käyttäytymisen selkeämmin näkyväksi. Kun lisäät muistin, näet eron selvästi. Tämä helpottaa ymmärtämään, mitä kukin komponentti tuo sovellukseesi.
-Rakennat yhden sovelluksen, joka havainnollistaa molempia malleja:
+Rakennat yhden sovelluksen, joka demonstroi molempia malleja:
-**Stateless-chat** – Jokainen pyyntö on itsenäinen. Malli ei muista aiempia viestejä. Tämä on malli, jota käytit pika-alussa.
+**Stateless Chat** – Jokainen pyyntö on itsenäinen. Mallilla ei ole muistia aiemmista viesteistä. Tämä on yksinkertaisin lähtökohta.
-**Stateful-keskustelu** – Jokainen pyyntö sisältää keskusteluhistorian. Malli ylläpitää kontekstia useiden vuorojen ajan. Tätä tuotantosovellukset vaativat.
+**Stateful Conversation** – Jokainen pyyntö sisältää keskusteluhistorian. Malli ylläpitää kontekstia useiden vuorojen ajan. Tätä tuotantosovellukset vaativat.
## Esivaatimukset
- Azure-tilaus, jossa on Azure OpenAI -käyttöoikeus
-- Java 21, Maven 3.9+
+- Java 21, Maven 3.9+
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
-> **Huom:** Java, Maven, Azure CLI ja Azure Developer CLI (azd) on esiasennettu mukana toimitettuun devcontaineriin.
+> **Huom:** Java, Maven, Azure CLI ja Azure Developer CLI (azd) on esiasennettu toimitettuun kehitysympäristöön.
-> **Huom:** Tämä moduuli käyttää GPT-5.2:a Azure OpenAI:ssa. Käyttöönotto määritellään automaattisesti `azd up` -komennolla – älä muuta mallin nimeä koodissa.
+> **Huom:** Tämä moduuli käyttää GPT-5.2:ta Azure OpenAI:ssa. Käyttöönotto määritetään automaattisesti komennolla `azd up` – älä muuta mallin nimeä koodissa.
-## Ymmärtäminen ydinkysymyksestä
+## Ymmärrä ydinkysymys
-Kielimallit ovat tilattomia. Jokainen API-kutsu on itsenäinen. Jos lähetät "Nimeni on John" ja sitten kysyt "Mikä nimeni on?", malli ei tiedä, että juuri esittäydyit. Se käsittelee jokaisen pyynnön kuin se olisi ensimmäinen keskustelusi.
+Kielimallit ovat tilattomia. Jokainen API-kutsu on itsenäinen. Jos lähettää "Minun nimeni on John" ja sitten kysyy "Mikä on nimeni?", malli ei tiedä, että juuri esittelit itsesi. Se käsittelee jokaisen pyynnön ikään kuin se olisi sinun ensimmäinen keskustelusi koskaan.
-Tämä sopii yksinkertaisiin kyselyihin, mutta on hyödytöntä oikeissa sovelluksissa. Asiakaspalvelubottien pitää muistaa, mitä kerroit niille. Henkilökohtaisten avustajien tarvitsee saada konteksti. Kaikki monivuoroinen keskustelu vaatii muistia.
+Tämä toimii yksinkertaisissa kysymys-vastaus-tilanteissa, mutta on käyttökelvoton oikeissa sovelluksissa. Asiakaspalvelubottien täytyy muistaa, mitä kerroit heille. Henkilökohtaiset avustajat tarvitsevat kontekstin. Kaikki monivuorovaikutteiset keskustelut vaativat muistia.
-Seuraava kaavio vertaa kahta lähestymistapaa — vasemmalla tilaton kutsu, joka unohtaa nimesi; oikealla tilaava kutsu, jota tukee ChatMemory ja joka muistaa sen.
+Seuraava kuvio vertaa kahta lähestymistapaa — vasemmalla tilaton kutsu, joka unohtaa nimesi; oikealla tilallinen kutsu, jota tukee ChatMemory, joka muistaa sen.
-*Ero tilattoman (itsenäiset kutsut) ja tilaavan (kontekstia huomioivan) keskustelun välillä*
+*Erot tilattoman (itsenäiset kutsut) ja tilallisen (kontekstia ymmärtävän) keskustelun välillä*
-## Tokenien ymmärtäminen
+## Ymmärrä tokenit
-Ennen kuin sukellat keskusteluihin, on tärkeää ymmärtää tokenit – perusyksiköt tekstissä, joita kielimallit käsittelevät:
+Ennen keskusteluihin sukeltamista on tärkeää ymmärtää tokenit – perusyksiköt tekstiä, joita kielimallit käsittelevät:
-*Esimerkki siitä, miten teksti pilkotaan tokeneiksi – "I love AI!" muuttuu 4 erilliseksi käsittelyyksiköksi*
+*Esimerkki siitä, miten teksti pilkotaan tokeneiksi – "I love AI!" muodostaa 4 erillistä käsittelyyksikköä*
-Tokenit ovat mittayksikkö AI-malleille tekstin mittaamisessa ja käsittelyssä. Sanat, välimerkit ja jopa välilyönnit voivat olla tokeneita. Mallillasi on raja, kuinka monta tokenia se voi käsitellä kerralla (GPT-5.2:lle 400 000, josta enintään 272 000 syöttötokeneita ja 128 000 tulostokoneita). Tokenien ymmärtäminen auttaa hallitsemaan keskustelun pituutta ja kustannuksia.
+Tokenit ovat tapa, jolla tekoälymallit mittaavat ja käsittelevät tekstiä. Sanat, välimerkit ja jopa välilyönnit voivat olla tokeneita. Mallillasi on raja, kuinka monta tokenia se voi käsitellä kerralla (GPT-5.2:lla 400 000, joista enintään 272 000 syöttötokeneita ja 128 000 tulostokoneita). Tokenien ymmärtäminen auttaa hallitsemaan keskustelun pituutta ja kustannuksia.
## Miten muisti toimii
-Chat-muisti ratkaisee tilattomuuden ongelman ylläpitämällä keskusteluhistoriaa. Ennen kuin lähetät pyynnön mallille, kehys lisää mukaan aiemmin soveltuvia viestejä. Kun kysyt "Mikä nimeni on?", järjestelmä lähettää koko keskusteluhistorian, jolloin malli näkee, että sanoit aiemmin "Nimeni on John."
+Chat-muisti ratkaisee tilattomuuden ongelman säilyttämällä keskusteluhistorian. Ennen malliin lähettämistä kehys lisää siihen relevantit aiemmat viestit. Kun kysyt "Mikä on nimeni?", järjestelmä lähettää koko keskusteluhistorian, jolloin malli näkee, että sanasit aiemmin "Minun nimeni on John."
-LangChain4j tarjoaa muistiratkaisuja, jotka hoitavat tämän automaattisesti. Valitset, kuinka monta viestiä säilytät, ja kehys hallinnoi kontekstin ikkunaa. Alla olevassa kaaviossa näkyy, miten MessageWindowChatMemory ylläpitää liukuaakkkoa viimeisimmistä viesteistä.
+LangChain4j tarjoaa muistien toteutuksia, jotka hoitavat tämän automaattisesti. Valitset, kuinka monta viestiä haluat säilyttää, ja kehys hallinnoi konteksti-ikkunaa. Alla oleva kuvio näyttää, miten MessageWindowChatMemory ylläpitää liukuvana ikkunana uusimpia viestejä.
-*MessageWindowChatMemory ylläpitää liukuvaa ikkunaa viimeisimmistä viesteistä ja pudottaa automaattisesti vanhoja*
+*MessageWindowChatMemory ylläpitää liukuvana ikkunana uusimpia viestejä, pudottaen automaattisesti vanhat*
## Miten tämä käyttää LangChain4j:ta
-Tämä moduuli laajentaa pika-aloitusta integroimalla Spring Bootin ja lisäämällä keskustelumuistin. Näin osat toimivat yhdessä:
+Tämä moduuli integroi Spring Bootin ja lisää keskustelumuistin. Näin osat nivoutuvat yhteen:
**Riippuvuudet** – Lisää kaksi LangChain4j-kirjastoa:
@@ -94,7 +94,7 @@ Tämä moduuli laajentaa pika-aloitusta integroimalla Spring Bootin ja lisääm
```
-**Chat-malli** – Määritä Azure OpenAI Spring beaniksi ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+**Chat-malli** – Määritä Azure OpenAI Springin beanina ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -109,7 +109,7 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-Builder lukee käyttöoikeustiedot ympäristömuuttujista, jotka ovat asetettu `azd up`:lla. Määrittämällä `baseUrl` Azure-päätepisteellesi saat OpenAI-asiakkaan toimimaan Azure OpenAI:n kanssa.
+Rakentaja lukee tunnistetiedot ympäristömuuttujista, jotka `azd up` asettaa. Määrittämällä `baseUrl` Azure-päätepisteeksi OpenAI-asiakas toimii Azure OpenAI:n kanssa.
**Keskustelumuisti** – Seuraa chat-historiaa MessageWindowChatMemorylla ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
@@ -124,51 +124,51 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-Luo muisti `withMaxMessages(10)` pitämään viimeiset 10 viestiä. Lisää käyttäjän ja tekoälyn viestit tyypeillä kääreillä: `UserMessage.from(text)` ja `AiMessage.from(text)`. Hae historia `memory.messages()`-metodilla ja lähetä se mallille. Palvelu tallentaa erilliset muisti-instanssit keskustelu-ID:lle, jolloin useat käyttäjät voivat keskustella samanaikaisesti.
+Luo muisti komennolla `withMaxMessages(10)` jättäen viimeiset 10 viestiä talteen. Lisää käyttäjän ja tekoälyn viestit tyypitetyillä kääreillä: `UserMessage.from(text)` ja `AiMessage.from(text)`. Hae historia `memory.messages()`-metodilla ja lähetä se mallille. Palvelu tallentaa erilliset muistiyksiköt kutakin keskustelutunnusta varten, mahdollistaen useiden käyttäjien samanaikaisen chatin.
-> **🤖 Kokeile [GitHub Copilot](https://github.com/features/copilot) Chatin kanssa:** Avaa [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) ja kysy:
-> - "Miten MessageWindowChatMemory päättää, mitkä viestit pudottaa, kun ikkuna on täynnä?"
-> - "Voinko toteuttaa oman muistivaraston käyttämällä tietokantaa muistin sijaan?"
-> - "Miten lisäisin tiivistämisen vanhan keskusteluhistorian puristamiseksi?"
+> **🤖 Kokeile GitHub Copilotin [Chatin](https://github.com/features/copilot) kanssa:** Avaa [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) ja kysy:
+> - "Miten MessageWindowChatMemory päättää, mitkä viestit pudotetaan, kun ikkuna on täysi?"
+> - "Voinko toteuttaa oman muistivarastoinnin tietokannan avulla in-memoryn sijaan?"
+> - "Miten lisäisin yhteenvetotoiminnon vanhan keskusteluhistorian tiivistämiseksi?"
-Stateless-chatin päätepiste ohittaa muistin täysin – pelkkä `chatModel.chat(prompt)` kuten pika-alussa. Stateful-päätepiste lisää viestit muistiin, hakee historian ja sisältää kontekstin jokaisessa pyynnössä. Sama malli, eri mallit.
+Tilaton chat-päätepiste jättää muistin kokonaan pois – vain `chatModel.chat(prompt)` kuten pika-alussa. Tilallinen päätepiste lisää viestit muistiin, hakee historian ja liittää kontekstin jokaiseen pyyntöön. Sama malliasetus, erilaiset toteutustyylit.
-## Ota Azure OpenAI -ympäristö käyttöön
+## Ota Azure OpenAI -infrastruktuuri käyttöön
**Bash:**
```bash
cd 01-introduction
-azd up # Valitse tilaus ja sijainti (eastus2 suositeltu)
+azd up # Valitse tilaus ja sijainti (suositeltu eastus2)
```
**PowerShell:**
```powershell
cd 01-introduction
-azd up # Valitse tilaus ja sijainti (suositellaan eastus2)
+azd up # Valitse tilaus ja sijainti (eastus2 suositus)
```
-> **Huom:** Jos kohtaat aikakatkaisuvian (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), aja yksinkertaisesti `azd up` uudelleen. Azure-resurssit voivat olla vielä pystytystilassa taustalla, ja uudelleenyritys sallii käyttöönoton valmistumisen, kun resurssit saavuttavat lopullisen tilan.
+> **Huom:** Jos kohtaat aikakatkaisuvirheen (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), suorita vain `azd up` uudelleen. Azure-resurssit saattavat olla vielä määrittelyvaiheessa taustalla, ja uudelleenyritys mahdollistaa käyttöönoton etenemisen, kun tilat saavuttavat loppuvaiheen.
Tämä:
-1. Ota Azure OpenAI -resurssi käyttöön GPT-5.2- ja text-embedding-3-small -malleilla
-2. Luo automaattisesti `.env`-tiedoston projektin juureen käyttöoikeuksilla
+1. Ottaa käyttöön Azure OpenAI -resurssin GPT-5.2:lla ja text-embedding-3-small -malleilla
+2. Luo automaattisesti `.env`-tiedoston projektin juureen tunnistetiedoilla
3. Asettaa kaikki tarvittavat ympäristömuuttujat
-**Onko käyttöönotossa ongelmia?** Katso [Infrastructure README](infra/README.md) -tiedosto vianmäärityksestä, mukaan lukien aliverkkotunnuskonfliktit, manuaaliset Azure Portal -asennusohjeet ja mallin konfigurointiohjeet.
+**Onko käyttöönotossa ongelmia?** Katso [Infrastructure README](infra/README.md) saadaksesi yksityiskohtaisia ohjeita, mukaan lukien aliverkkotunnusten ristiriidat, manuaaliset Azure-portaalin käyttöönotto-ohjeet ja mallien konfigurointiohjeet.
**Varmista, että käyttöönotto onnistui:**
**Bash:**
```bash
-cat ../.env # Tulisi näyttää AZURE_OPENAI_ENDPOINT, API_KEY jne.
+cat ../.env # Pitäisi näyttää AZURE_OPENAI_ENDPOINT, API_KEY, jne.
```
**PowerShell:**
```powershell
-Get-Content ..\.env # Pitäisi näyttää AZURE_OPENAI_ENDPOINT, API_KEY, jne.
+Get-Content ..\.env # Tulisi näyttää AZURE_OPENAI_ENDPOINT, API_KEY jne.
```
-> **Huom:** `azd up` -komento luo `.env`-tiedoston automaattisesti. Jos sinun täytyy päivittää sitä myöhemmin, voit joko muokata `.env`-tiedostoa käsin tai luoda sen uudelleen suorittamalla:
+> **Huom:** `azd up` -komento luo `.env`-tiedoston automaattisesti. Jos sinun täytyy päivittää sitä myöhemmin, voit joko muokata `.env`-tiedostoa manuaalisesti tai luoda sen uudelleen ajamalla:
>
> **Bash:**
> ```bash
@@ -184,41 +184,41 @@ Get-Content ..\.env # Pitäisi näyttää AZURE_OPENAI_ENDPOINT, API_KEY, jne.
## Suorita sovellus paikallisesti
-**Varmista käyttöönotto:**
+**Varmista käyttöönoton onnistuminen:**
-Varmista, että `.env`-tiedosto on olemassa juurihakemistossa, sisältäen Azure-käyttäjätunnukset. Suorita tämä moduulikansiosta (`01-introduction/`):
+Varmista, että `.env`-tiedosto on olemassa juurikansiossa Azure-tunnistetietoineen. Suorita tämä moduulikansiosta (`01-introduction/`):
**Bash:**
```bash
-cat ../.env # Pitäisi näyttää AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+cat ../.env # Tulisi näyttää AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**PowerShell:**
```powershell
-Get-Content ..\.env # Näyttää AZURE_OPENAI_ENDPOINTin, API_KEYn, DEPLOYMENTin
+Get-Content ..\.env # Tulisi näyttää AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**Käynnistä sovellukset:**
**Vaihtoehto 1: Spring Boot Dashboardin käyttö (suositeltu VS Code -käyttäjille)**
-Dev-container sisältää Spring Boot Dashboard -laajennuksen, joka tarjoaa visuaalisen käyttöliittymän kaikkien Spring Boot -sovellusten hallintaan. Löydät sen VS Coden vasemman reunan Aktiviteettipalkista (etsi Spring Boot -ikonia).
+Kehitysympäristö sisältää Spring Boot Dashboard -laajennuksen, joka tarjoaa visuaalisen käyttöliittymän kaikkien Spring Boot -sovellusten hallintaan. Löydät sen VS Coden vasemman reunan Activity Barista (etsi Spring Boot -kuvake).
Spring Boot Dashboardista voit:
-- Nähdä kaikki käytettävissä olevat Spring Boot -sovellukset työtilassa
+- Nähdä kaikki työtilan käytettävissä olevat Spring Boot -sovellukset
- Käynnistää/pysäyttää sovellukset yhdellä napsautuksella
-- Katsoa sovelluslokia reaaliajassa
-- Valvoa sovellusten tilaa
+- Tarkastella sovelluslokeja reaaliaikaisesti
+- Valvoa sovelluksen tilaa
-Napsauta toistopainiketta "introduction"-moduulin vieressä käynnistääksesi tämän moduulin, tai käynnistä kaikki moduulit kerralla.
+Napsauta toistopainiketta kohdan "introduction" vieressä käynnistääksesi tämän moduulin, tai käynnistä kaikki moduulit kerralla.
-*Spring Boot Dashboard VS Codessa — käynnistä, pysäytä ja valvo kaikki moduulit yhdestä paikasta*
+*Spring Boot Dashboard VS Codessa — käynnistä, pysäytä ja valvo kaikkia moduuleja yhdestä paikasta*
-**Vaihtoehto 2: Kuoriskriptien käyttö**
+**Vaihtoehto 2: Shell-skriptien käyttö**
-Käynnistä kaikki web-sovellukset (moduulit 01–04):
+Käynnistä kaikki web-sovellukset (moduulit 01-04):
**Bash:**
```bash
@@ -262,9 +262,9 @@ Molemmat skriptit lataavat automaattisesti ympäristömuuttujat juuren `.env`-ti
> mvn clean package -DskipTests
> ```
-Avaa http://localhost:8080 selaimessasi.
+Avaa selaimessa http://localhost:8080.
-**Pysäyttääksesi:**
+**Sovelluksen pysäyttäminen:**
**Bash:**
```bash
@@ -282,41 +282,41 @@ cd ..; .\stop-all.ps1 # Kaikki moduulit
## Sovelluksen käyttäminen
-Sovellus tarjoaa verkkokäyttöliittymän, jossa on kaksi viestien toteutusta rinnakkain.
+Sovellus tarjoaa verkkokäyttöliittymän, jossa on kaksi chat-toteutusta vierekkäin.
-*Hallintapaneeli, joka näyttää sekä yksinkertaisen chatin (tilaton) että keskusteleva chat (tilallinen)*
+*Etusivu, jossa näkyvissä sekä Simple Chat (stateless) että Conversational Chat (stateful) -vaihtoehdot*
-### Stateless-chat (vasen paneeli)
+### Stateless Chat (vasen paneeli)
-Kokeile ensin tätä. Kysy "Nimeni on John" ja heti perään "Mikä nimeni on?" Malli ei muista, koska jokainen viesti on itsenäinen. Tämä havainnollistaa perustavanlaatuista ongelmaa peruskielimallin integraatiossa – ei keskustelukontekstia.
+Kokeile ensin tätä. Kysy "Minun nimeni on John" ja heti perään "Mikä on nimeni?" Malli ei muista, koska kukin viesti on itsenäinen. Tämä havainnollistaa perusongelman peruskielimallien integroinnissa – ei keskustelukontekstia.
*Tekoäly ei muista nimeäsi edellisestä viestistä*
-### Stateful-chat (oikea paneeli)
+### Stateful Chat (oikea paneeli)
-Kokeile nyt samaa sarjaa täällä. Kysy "Nimeni on John" ja sitten "Mikä nimeni on?" Tällä kertaa se muistaa. Erona on MessageWindowChatMemory – se ylläpitää keskusteluhistoriaa ja sisällyttää sen jokaiseen pyyntöön. Näin tuotantokeskustelevat tekoälyt toimivat.
+Kokeile nyt samaa sarjaa täällä. Kysy "Minun nimeni on John" ja sitten "Mikä on nimeni?" Tällä kertaa se muistaa. Erotuksena on MessageWindowChatMemory – se ylläpitää keskusteluhistoriaa ja lisää sen jokaiseen pyyntöön. Näin tuotantokeskusteleva tekoäly toimii.
*Tekoäly muistaa nimesi aiemmasta keskustelusta*
-Molemmissa paneeleissa käytetään samaa GPT-5.2-mallia. Ainoa ero on muisti. Tämä tekee selväksi, mitä muisti tuo sovellukseesi ja miksi se on olennaista todellisiin käyttötapauksiin.
+Molemmat paneelit käyttävät samaa GPT-5.2-mallia. Erona on vain muisti. Tämä selkeyttää, mitä muisti tuo sovellukseesi ja miksi se on välttämätön oikeissa käyttötapauksissa.
## Seuraavat askeleet
-**Seuraava moduuli:** [02-prompt-engineering - Kehoteinsinöörityö GPT-5.2:n kanssa](../02-prompt-engineering/README.md)
+**Seuraava moduuli:** [02-prompt-engineering - Prompt Engineering GPT-5.2:n kanssa](../02-prompt-engineering/README.md)
---
-**Navigointi:** [← Edellinen: Module 00 - Pika-aloitus](../00-quick-start/README.md) | [Takaisin pääsivulle](../README.md) | [Seuraava: Module 02 - Kehoteinsinöörityö →](../02-prompt-engineering/README.md)
+**Navigointi:** [← Takaisin pääsivulle](../README.md) | [Seuraava: Moduuli 02 - Prompt Engineering →](../02-prompt-engineering/README.md)
---
**Vastuuvapauslauseke**:
-Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, on hyvä huomioida, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäiskielellä tulee pitää määräävänä lähteenä. Tärkeissä tiedoissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinkäsityksistä tai virhetulkinnoista.
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, otathan huomioon, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäiskielellä on virallinen lähde. Tärkeissä asioissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinymmärryksistä tai tulkinnoista.
\ No newline at end of file
diff --git a/translations/fi/02-prompt-engineering/README.md b/translations/fi/02-prompt-engineering/README.md
index 02ef19c05..cccca5cf6 100644
--- a/translations/fi/02-prompt-engineering/README.md
+++ b/translations/fi/02-prompt-engineering/README.md
@@ -1,85 +1,85 @@
-# Moduuli 02: Prompt Engineering GPT-5.2:n kanssa
+# Moduuli 02: Prompt-suunnittelu GPT-5.2:n kanssa
## Sisällysluettelo
-- [Videokävely](../../../02-prompt-engineering)
-- [Mitkä asiat opit](../../../02-prompt-engineering)
-- [Esivaatimukset](../../../02-prompt-engineering)
-- [Prompt Engineeringin ymmärtäminen](../../../02-prompt-engineering)
-- [Prompt Engineering -perusteet](../../../02-prompt-engineering)
- - [Zero-Shot Prompting](../../../02-prompt-engineering)
- - [Few-Shot Prompting](../../../02-prompt-engineering)
- - [Chain of Thought](../../../02-prompt-engineering)
- - [Role-Based Prompting](../../../02-prompt-engineering)
- - [Prompt Templates](../../../02-prompt-engineering)
-- [Edistyneet mallit](../../../02-prompt-engineering)
-- [Sovelluksen ajaminen](../../../02-prompt-engineering)
-- [Sovelluksen ruutukaappaukset](../../../02-prompt-engineering)
-- [Mallien tutkiminen](../../../02-prompt-engineering)
- - [Matalan ja korkean innokkuuden erot](../../../02-prompt-engineering)
- - [Tehtävän suoritus (työkalujen alkutekstit)](../../../02-prompt-engineering)
- - [Itseään peilaava koodi](../../../02-prompt-engineering)
- - [Rakenteellinen analyysi](../../../02-prompt-engineering)
- - [Monivaiheinen keskustelu](../../../02-prompt-engineering)
- - [Askel askeleelta -päättely](../../../02-prompt-engineering)
- - [Rajoitettu tulostus](../../../02-prompt-engineering)
-- [Mitä todella opit](../../../02-prompt-engineering)
-- [Seuraavat askeleet](../../../02-prompt-engineering)
-
-## Videokävely
-
-Katso tämä live-istunto, joka selittää, kuinka pääset alkuun tämän moduulin kanssa:
+- [Videoesittely](#videoesittely)
+- [Mitä opit](#mitä-opit)
+- [Esivaatimukset](#esivaatimukset)
+- [Ymmärtäminen prompt-suunnittelusta](#ymmärtäminen-prompt-suunnittelusta)
+- [Prompt-suunnittelun perusteet](#prompt-suunnittelun-perusteet)
+ - [Zero-Shot Prompting](#zero-shot-prompting)
+ - [Few-Shot Prompting](#few-shot-prompting)
+ - [Chain of Thought](#chain-of-thought)
+ - [Role-Based Prompting](#role-based-prompting)
+ - [Prompt Templates](#prompt-templates)
+- [Edistyneet kuviot](#edistyneet-kuviot)
+- [Sovelluksen käynnistäminen](#suorita-sovellus)
+- [Sovelluksen kuvakaappauksia](#sovelluksen-kuvakaappaukset)
+- [Kuvioiden tutkiminen](#mallien-tutkiminen)
+ - [Matala vs korkea innokkuus](#matala-vs-korkea-innokkuus)
+ - [Tehtävän suoritus (työkalujen esipuheet)](#tehtävän-suoritus-tool-preambles)
+ - [Itsereflektoiva koodi](#itsearvioiva-koodi)
+ - [Rakenteellinen analyysi](#rakenteellinen-analyysi)
+ - [Monikäyttökertakeskustelu](#monivaiheinen-keskustelu)
+ - [Askel askeleelta päättely](#vaiheittainen-päättely)
+ - [Rajoitettu tulostus](#rajoitettu-tulostus)
+- [Mitä todella opit](#mitä-todellisuudessa-opit)
+- [Seuraavat askeleet](#seuraavat-vaiheet)
+
+## Videoesittely
+
+Katso tämä live-sessio, joka selittää, miten aloittaa tämän moduulin kanssa:
-## Mitkä asiat opit
+## Mitä opit
-Seuraava kaavio tarjoaa yleiskuvan keskeisistä aiheista ja taidoista, joita kehität tässä moduulissa — promptien hienosäätötekniikoista askel askeleelta -työnkulkuun, jota seuraat.
+Seuraava kaavio antaa yleiskuvan moduulin keskeisistä aiheista ja taidoista — promptin hienosäätötekniikoista askel askeleelta etenevään työnkulkuun, jota seuraat.
-Edellisissä moduuleissa tutustuit perus LangChain4j -vuorovaikutuksiin GitHub-mallien kanssa ja näit, miten muisti mahdollistaa Azure OpenAI:n kanssa käydyn keskustelun tekoälyn. Nyt keskitymme siihen, miten esität kysymyksiä — itse prompteihin — käyttäen Azure OpenAI:n GPT-5.2:ta. Tapa, jolla rakentelet promptit, vaikuttaa dramaattisesti saamaasi vastauksen laatuun. Aloitamme perustekniikoiden kertaamisella, ja siirrymme sitten kahdeksaan edistyneeseen malliin, jotka hyödyntävät GPT-5.2:n ominaisuuksia täysimääräisesti.
+Edellisessä moduulissa näit, miten muisti mahdollistaa keskustelevan tekoälyn Azure OpenAI:n kanssa. Nyt keskitymme siihen, miten esität kysymykset — eli itse promptit — käyttäen Azure OpenAI:n GPT-5.2:ta. Tapa, jolla rakennat promptisi, vaikuttaa merkittävästi saamiesi vastausten laatuun. Aloitamme perustekniikoiden katsauksella ja siirrymme sitten kahdeksaan edistyneeseen kuvioon, jotka hyödyntävät GPT-5.2:n kykyjä täydellisesti.
-Käytämme GPT-5.2:ta, koska se tuo mukanaan päättelyohjauksen — voit kertoa mallille, kuinka paljon ajattelua sen tulisi tehdä ennen vastaamista. Tämä tekee eri promptaustaktiikoista selkeämpiä ja auttaa sinua ymmärtämään, milloin mitäkin lähestymistapaa kannattaa käyttää. Lisäksi hyödymme Azuren pienemmistä käyttörajoituksista GPT-5.2:lle verrattuna GitHub-malleihin.
+Käytämme GPT-5.2:ta, koska se tuo mukanaan päättelyn hallinnan — voit kertoa mallille, kuinka paljon sen tulee ajatella ennen vastaamista. Tämä tuo eri promptausstrategiat selkeämmin esiin ja auttaa ymmärtämään, milloin käyttää kutakin lähestymistapaa.
## Esivaatimukset
-- Moduuli 01 suoritettu (Azure OpenAI -resurssit otettu käyttöön)
-- `.env`-tiedosto juurihakemistossa, jossa Azure-tunnukset (luotu moduulin 01 `azd up` -komennolla)
+- Moduuli 01 suoritettuna (Azure OpenAI -resurssit otettu käyttöön)
+- `.env`-tiedosto juurihakemistossa Azure-tunnuksilla (luotu `azd up` -komennolla Moduulissa 01)
-> **Huom:** Jos et ole suorittanut moduulia 01, seuraa ensin siellä olevia käyttöönotto-ohjeita.
+> **Huom:** Jos et ole suorittanut Moduulia 01, noudata ensin siellä annettuja käyttöönotto-ohjeita.
-## Prompt Engineeringin ymmärtäminen
+## Ymmärtäminen prompt-suunnittelusta
-Prompt engineering on pohjimmiltaan ero epämääräisten ja tarkkojen ohjeiden välillä, kuten alla oleva vertailu havainnollistaa.
+Ytimeltään prompt-suunnittelu on ero epämääräisten ohjeiden ja täsmällisten ohjeiden välillä, kuten alla oleva vertailu havainnollistaa.
-Prompt engineering tarkoittaa syötteen suunnittelua siten, että saat johdonmukaisesti tarvitsemiasi tuloksia. Kyse ei ole vain kysymysten esittämisestä — vaan pyynnön rakentamisesta niin, että malli ymmärtää tarkalleen, mitä haluat ja miten se toimitetaan.
+Prompt-suunnittelu tarkoittaa syötteen muotoilua siten, että saat jatkuvasti tarvitsemasi tulokset. Kyse ei ole pelkästään kysymysten esittämisestä — vaan pyyntöjen rakenteistamisesta niin, että malli ymmärtää täsmälleen mitä haluat ja miten sen tulee vastata.
-Ajattele sitä kuin annettaisit ohjeita kollegalle. "Korjaa virhe" on epämääräinen ohje. "Korjaa null pointer exception UserService.java:n rivillä 45 lisäämällä null-tarkistus" on tarkka. Kielimallit toimivat samalla tavalla — tarkkuus ja rakenne ratkaisevat.
+Ajattele sitä kuin antaisit ohjeita kollegalle. "Korjaa bugi" on epämääräinen. "Korjaa UserService.java-tiedoston rivin 45 null-viittaus virhe lisäämällä null-tarkistus" on tarkka. Kielimallit toimivat samalla tavalla — täsmällisyys ja rakenne ovat tärkeitä.
-Alla oleva kaavio näyttää, miten LangChain4j liittyy tähän kuvaan — se yhdistää promptimallit malliin SystemMessage- ja UserMessage-rakenteiden kautta.
+Alla olevassa kaaviossa näkyy, miten LangChain4j liittyy tähän kuvaan — se yhdistää prompt-kuviot malliin SystemMessage- ja UserMessage-rakenteiden kautta.
-LangChain4j tarjoaa infrastruktuurin — malliyhteydet, muistin ja viestityypit — kun taas promptimallit ovat vain huolellisesti rakennetun tekstin lähettämistä tämän infrastruktuurin läpi. Keskeiset rakennuspalikat ovat `SystemMessage` (joka määrittää tekoälyn käyttäytymisen ja roolin) ja `UserMessage` (joka kantaa varsinaisen pyynnön).
+LangChain4j tarjoaa infrastruktuurin — malliyhteydet, muistin ja viestityypit — kun taas prompt-kuviot ovat huolellisesti rakenteistettua tekstiä, jota lähetät tämän infrastruktuurin läpi. Keskeiset rakennuspalikat ovat `SystemMessage` (joka määrittää tekoälyn toiminnan ja roolin) ja `UserMessage` (joka sisältää varsinaisen pyyntösi).
-## Prompt Engineering -perusteet
+## Prompt-suunnittelun perusteet
-Alla esitetyt viisi ydintekniikkaa muodostavat tehokkaan prompt engineeringin perustan. Kukin käsittelee eri näkökulmaa siihen, miten kommunikoit kielimallien kanssa.
+Alla esitetyt viisi perusmenetelmää muodostavat tehokkaan prompt-suunnittelun perustan. Kukin käsittelee eri puolta siitä, miten kommunikoit kielimallien kanssa.
-Ennen kuin sukellamme tämän moduulin edistyneisiin malleihin, kertaamme viisi perustekniikkaa. Nämä ovat rakennuspalikoita, jotka jokaisen prompt-insinöörin tulee tuntea. Jos olet jo käynyt läpi [Quick Start -moduulin](../00-quick-start/README.md#2-prompt-patterns), olet nähnyt niitä käytännössä — tässä on niiden konseptuaalinen kehys.
+Ennen kuin sukellamme moduulin edistyneisiin kuvioihin, kerrataan viisi perustekniikkaa. Nämä ovat rakennuspalikoita, jotka jokaisen prompt-suunnittelijan tulisi tuntea.
### Zero-Shot Prompting
-Yksinkertaisin tapa: anna mallille suora ohje ilman esimerkkejä. Malli luottaa täysin koulutukseensa ymmärtääkseen ja suorittaakseen tehtävän. Tämä toimii hyvin suoraviivaisissa pyynnöissä, joissa odotettu käyttäytyminen on ilmeistä.
+Yksinkertaisin lähestymistapa: anna mallille suora ohje ilman esimerkkejä. Malli luottaa täysin koulutukseensa tehtävän ymmärtämiseksi ja suorittamiseksi. Tämä toimii hyvin suoraviivaisissa pyynnöissä, joissa odotettu käyttäytyminen on ilmeistä.
-*Suora ohje ilman esimerkkejä — malli päättelee tehtävän pelkästään ohjeesta*
+*Suora ohje ilman esimerkkejä — malli päättelee tehtävän pelkästä ohjeesta*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
@@ -87,15 +87,15 @@ String response = model.chat(prompt);
// Vastaus: "Positiivinen"
```
-**Milloin käyttää:** Yksinkertaiset luokitukset, suorat kysymykset, käännökset tai mikä tahansa tehtävä, jonka malli osaa hoitaa ilman lisäohjeita.
+**Milloin käyttää:** Yksinkertaiset luokittelut, suoraviivaista kyselyt, käännökset tai tehtävät, jotka malli osaa hoitaa ilman lisäohjausta.
### Few-Shot Prompting
-Anna esimerkkejä, jotka näyttävät mallille, mitä mallia haluat sen noudattavan. Malli oppii odotetun syöte-tuotos-muodon esimerkeistäsi ja soveltaa sitä uusiin syötteisiin. Tämä parantaa merkittävästi johdonmukaisuutta tehtävissä, joissa haluttu muoto tai käyttäytyminen ei ole ilmeistä.
+Anna esimerkkejä, jotka osoittavat mallille seurattavan kaavan. Malli oppii odotetun syöte–tuloste-muodon esimerkeistä ja soveltaa sitä uusiin syötteisiin. Tämä parantaa merkittävästi johdonmukaisuutta tehtävissä, joissa haluttu muoto tai käyttäytyminen ei ole ilmeistä.
-*Oppiminen esimerkeistä — malli tunnistaa mallin ja soveltaa sitä uusiin syötteisiin*
+*Oppii esimerkkien kautta — malli tunnistaa kaavan ja soveltaa sitä uusiin syötteisiin*
```java
String prompt = """
@@ -112,15 +112,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Milloin käyttää:** Räätälöidyt luokitukset, johdonmukainen muotoilu, toimialakohtaiset tehtävät tai silloin kun zero-shot-tulokset ovat epäjohdonmukaisia.
+**Milloin käyttää:** Mukautetut luokittelut, johdonmukainen muotoilu, tekemäkohtaiset tehtävät tai kun zero-shot-tulokset ovat epäjohdonmukaisia.
### Chain of Thought
-Pyydä mallia näyttämään päättelynsä vaihe vaiheelta. Sen sijaan, että hyppäisi suoraan vastaukseen, malli pilkkoo ongelman ja käsittelee jokaisen osan erikseen. Tämä parantaa tarkkuutta matemaattisissa, loogisissa ja monivaiheisissa päättelytehtävissä.
+Pyydä mallia näyttämään päättelynsä askel askeleelta. Sen sijaan, että se hyppääisi suoraan vastaukseen, malli hajottaa ongelman ja käsittelee jokaisen osan selkeästi. Tämä parantaa tarkkuutta matematiikassa, logiikassa ja monivaiheisessa päättelyssä.
-*Askel askeleelta -päättely — monimutkaisten ongelmien pilkkominen eksplisiittisiin loogisiin vaiheisiin*
+*Askel askeleelta päättely — monimutkaisten ongelmien hajottaminen selkeiksi loogisiksi vaiheiksi*
```java
String prompt = """
@@ -133,15 +133,15 @@ String response = model.chat(prompt);
// Malli näyttää: 15 - 8 = 7, sitten 7 + 12 = 19 omenaa
```
-**Milloin käyttää:** Matematiikan ongelmat, loogiset pulmat, virheen etsintä tai mikä tahansa tehtävä, jossa päättelyprosessin näyttäminen parantaa tarkkuutta ja luottamusta.
+**Milloin käyttää:** Matematiikan ongelmat, loogiset pulmat, virheenkorjaukset tai tehtävät, joissa päättelyprosessin näyttäminen parantaa tarkkuutta ja luottamusta.
### Role-Based Prompting
-Aseta tekoälylle persoona tai rooli ennen kuin esität kysymyksen. Tämä antaa kontekstin, joka muokkaa vastauksen sävyä, syvyyttä ja painopistettä. "Ohjelmistoarkkitehti" antaa erilaista neuvontaa kuin "juniori-kehittäjä" tai "turvallisuustarkastaja".
+Aseta tekoälylle rooli tai persoona ennen kysymyksen esittämistä. Tämä antaa kontekstin, joka muokkaa vastauksen sävyä, syvyyttä ja painotusta. "Ohjelmistoarkkitehti" antaa erilaisia neuvoja kuin "juniori-kehittäjä" tai "turvallisuusauditoija".
-*Kontekstin ja persoonan asettaminen — samaan kysymykseen saadaan eri vastauksia roolista riippuen*
+*Kontekstin ja roolin asettaminen — sama kysymys saa eri vastauksen roolista riippuen*
```java
String prompt = """
@@ -157,15 +157,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Milloin käyttää:** Koodikatselmukset, opetus, toimialakohtainen analyysi tai silloin kun tarvitset vastauksia, jotka on räätälöity tietyn asiantuntemustason tai näkökulman mukaan.
+**Milloin käyttää:** Koodikatselmukset, opastus, toimialakohtaiset analyysit tai kun tarvitset vastauksia, jotka on räätälöity tietylle asiantuntemustasolle tai näkökulmalle.
### Prompt Templates
-Luo uudelleenkäytettäviä prompt-malleja muuttujapaikoilla. Sen sijaan, että kirjoittaisit uuden promptin joka kerta, määrittele mallipohja kerran ja täytä eri arvot. LangChain4j:n `PromptTemplate`-luokka tekee tämän helpoksi `{{variable}}`-syntaksilla.
+Luo uudelleenkäytettäviä promptteja muuttuvilla paikkamerkeillä. Sen sijaan, että kirjoittaisit uuden promptin joka kerta, määrittele malli kerran ja täytä eri arvot. LangChain4j:n `PromptTemplate`-luokka tekee tämän helpoksi `{{muuttuja}}`-syntaksilla.
-*Uudelleenkäytettävät promptit muuttujapaikoilla — yksi malli, monta käyttötarkoitusta*
+*Uudelleenkäytettävät promptit muuttuvilla paikkamerkeillä — yksi malli, monta käyttötapaa*
```java
PromptTemplate template = PromptTemplate.from(
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**Milloin käyttää:** Toistuvat kyselyt eri syötteillä, eräkäsittely, uudelleenkäytettävien tekoälytyönkulkujen rakentaminen tai mikä tahansa tilanne, jossa promptin rakenne pysyy samana mutta data vaihtelee.
+**Milloin käyttää:** Toistuvat kyselyt eri syötteillä, eräkäsittely, uudelleenkäytettävien tekoälytyönkulkujen rakentaminen tai kaikki tilanteet, joissa promptin rakenne pysyy samana, mutta data vaihtuu.
---
-Nämä viisi perustekniikkaa tarjoavat vahvan työkalupakin useimpiin promptaustehtäviin. Loput tästä moduulista rakentuvat niiden päälle käyttäen **kahtatoista edistynyttä mallia**, jotka hyödyntävät GPT-5.2:n päättelyohjausta, itsearviointia ja rakenteellista tulostusta.
+Nämä viisi perustekniikkaa antavat sinulle vahvan työkalupakin useimpiin promptaukseen liittyviin tehtäviin. Loput tästä moduulista rakentuvat niiden päälle käyttäen **kahdeksaa edistynyttä kuviota**, jotka hyödyntävät GPT-5.2:n päättelyn hallintaa, itsearviointia ja rakenteellista tulostusta.
-## Edistyneet mallit
+## Edistyneet kuviot
-Kun perusteet on käyty läpi, siirrytään kahdeksaan edistyneeseen malliin, jotka tekevät tästä moduulista ainutlaatuisen. Kaikki ongelmat eivät vaadi samaa lähestymistapaa. Jotkut kysymykset tarvitsevat nopeita vastauksia, toiset syvällistä pohdintaa. Jotkin vaativat näkyvää päättelyä, toiset vain tuloksia. Jokainen alla oleva malli on optimoitu eri tilanteeseen — ja GPT-5.2:n päättelyohjaus korostaa näiden eroja entisestään.
+Kun perustekniikat on käyty läpi, siirrytään kahdeksaan edistyneeseen kuvioon, jotka tekevät tästä moduulista ainutlaatuisen. Kaikki ongelmat eivät vaadi samaa lähestymistapaa. Jotkut kysymykset tarvitsevat nopeita vastauksia, toiset syvällistä pohdintaa. Jotkut vaativat näkyvää päättelyä, toiset pelkkää tulosta. Alla olevat kuviot on optimoitu eri tilanteisiin — ja GPT-5.2:n päättelyn hallinta tekee eroista vielä selkeämpiä.
-*Yleiskatsaus kahdeksaan prompt engineering -malliin ja niiden käyttötapauksiin*
+*Yleiskuva kahdeksasta prompt-suunnittelukuvioista ja niiden käyttötapauksista*
-GPT-5.2 lisää näihin malleihin uuden ulottuvuuden: *päättelyohjauksen*. Liukusäädin alla näyttää, kuinka voit säätää mallin ajatteluprosessin voimakkuuden — nopeista suoriin vastauksiin ja syvälliseen, perusteelliseen analyysiin.
+GPT-5.2 tuo näihin kuvioihin uuden ulottuvuuden: *päättelyn hallinnan*. Alla oleva liukusäädin näyttää, miten voit säätää mallin ajattelun määrää — nopeista suorista vastauksista syvälliseen ja perusteelliseen analyysiin.
-*GPT-5.2:n päättelyohjaus antaa sinun määrittää, kuinka paljon mallin tulee ajatella — nopeista suorista vastauksista syvälliseen tarkasteluun*
+*GPT-5.2:n päättelyn hallinta antaa mahdollisuuden määrittää, kuinka paljon ajattelua mallin tulee tehdä — nopeista suorista vastauksista syvälliseen pohdintaan*
-**Matalan innokkuuden tila (Nopea & Tämänhetkinen)** - Yksinkertaisiin kysymyksiin, joissa haluat nopeita, suoria vastauksia. Malli käyttää minimaalista päättelyä – enintään 2 askelta. Käytä tätä laskuihin, hakuun tai suoraviivaisiin kysymyksiin.
+**Matala innokkuus (nopea & keskittynyt)** – Yksinkertaisiin kysymyksiin, joissa haluat nopeita ja suoria vastauksia. Malli käyttää vähäistä päättelyä — enintään 2 askelta. Käytä tätä laskuihin, hakuihin tai suoraviivaisiin kysymyksiin.
```java
String prompt = """
@@ -219,12 +219,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> 💡 **Tutki GitHub Copilotin kanssa:** Avaa [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) ja kysy:
-> - "Mikä on ero matalan ja korkean innokkuuden promptausmallien välillä?"
-> - "Miten XML-tunnisteet prompteissa auttavat muotoilemaan tekoälyn vastauksen?"
-> - "Milloin käytän itsearviointimalleja verrattuna suoriin ohjeisiin?"
+> 💡 **Tutustu GitHub Copilotilla:** Avaa [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) ja kysy:
+> - "Mikä on ero matalan ja korkean innokkuuden prompt-kuvioiden välillä?"
+> - "Miten XML-tunnisteet promptissa auttavat AI:n vastauksen jäsentelyssä?"
+> - "Milloin käytän itsereflektoivia kuvioita verrattuna suoriin ohjeisiin?"
-**Korkean innokkuuden tila (Syvällinen & Perusteellinen)** - Monimutkaisiin ongelmiin, joissa haluat kattavan analyysin. Malli tutkii aihetta perusteellisesti ja näyttää yksityiskohtaisen päättelyn. Käytä tätä järjestelmäsuunnittelussa, arkkitehtuuripäätöksissä tai monimutkaisessa tutkimuksessa.
+**Korkea innokkuus (syvällinen & perusteellinen)** – Monimutkaisiin ongelmiin, joihin haluat kattavan analyysin. Malli tutkii perusteellisesti ja näyttää yksityiskohtaista päättelyä. Käytä tätä järjestelmäsuunnittelussa, arkkitehtuuripäätöksissä tai monimutkaisessa tutkimuksessa.
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**Tehtävän suoritus (askel askeleelta etenevä prosessi)** - Monivaiheisiin työnkulkuihin. Malli antaa etukäteen suunnitelman, kuvailee kunkin vaiheen työskentelyn aikana, ja lopuksi esittää yhteenvedon. Käytä tätä migraatioissa, toteutuksissa tai missä tahansa monivaiheisessa prosessissa.
+**Tehtävän suoritus (askel askeleelta eteneminen)** – Monivaiheisiin työnkulkuihin. Malli antaa aluksi suunnitelman, kertoo jokaisesta työvaiheesta työn edetessä ja lopuksi koosteen. Käytä tätä migraatioissa, toteutuksissa tai muissa monivaiheisissa prosesseissa.
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Chain-of-Thought -promptaus pyytää mallia erittäin selkeästi näyttämään päättelyprosessinsa, mikä parantaa tarkkuutta monimutkaisissa tehtävissä. Askel askeleelta -erittely auttaa sekä ihmisiä että tekoälyä ymmärtämään logiikan.
+Chain-of-Thought -promptaus pyytää mallia näyttämään päättelyprosessinsa eksplisiittisesti, mikä parantaa tarkkuutta monimutkaisissa tehtävissä. Askel askeleelta eteneminen auttaa sekä ihmisiä että tekoälyä ymmärtämään logiikan.
-> **🤖 Kokeile [GitHub Copilot](https://github.com/features/copilot) Chatin kanssa:** Kysy tästä mallista:
-> - "Miten mukauttaisin tehtävän suoritusmallin pitkäkestoisia operaatioita varten?"
-> - "Mitkä ovat parhaat käytännöt työkalujen aloitustekstien järjestämisessä tuotantosovelluksissa?"
-> - "Miten voin kaapata ja näyttää välivaiheen etenemispäivityksiä käyttöliittymässä?"
+> **🤖 Kokeile [GitHub Copilot](https://github.com/features/copilot) Chat:issa:** Kysy tästä kuviosta:
+> - "Miten muutan tehtävän suorituskuviota pitkään kestävien operaatioiden yhteydessä?"
+> - "Mitkä ovat parhaat käytännöt työkalujen esipuheiden rakenteistamiseen tuotantosovelluksissa?"
+> - "Miten voin tallentaa ja näyttää väliaikaiset etenemispäivitykset käyttöliittymässä?"
-Alla oleva kaavio havainnollistaa tätä Suunnittelu → Suoritus → Yhteenveto -työnkulkua.
+Alla oleva kaavio havainnollistaa tätä Suunnittele → Suorita → Yhteenveto -työnkulkua.
-*Suunnittelu → Suoritus → Yhteenveto -työnkulku monivaiheisissa tehtävissä*
+*Suunnittele → Suorita → Yhteenveto -työnkulku monivaiheisiin tehtäviin*
-**Itseään peilaava koodi** – Tuotantokelpoisen koodin generointiin. Malli luo koodia noudattaen tuotantostandardeja ja huolella virheenkäsittelyä. Käytä tätä rakentaessasi uusia ominaisuuksia tai palveluita.
+**Itsereflektoiva koodi** – Tuotantotasoisen koodin generointiin. Malli generoi koodia tuotantostandardien mukaan asianmukaisella virheenkäsittelyllä. Käytä tätä rakennettaessa uusia ominaisuuksia tai palveluita.
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Alla oleva kaavio näyttää tämän iteratiivisen parannuskierron — generoi, arvioi, tunnista heikkoudet ja hienosäädä kunnes koodi täyttää tuotantovaatimukset.
+Alla oleva kaavio kuvaa tämän iteratiivisen parantamisen kierteen — generoi, arvioi, tunnista heikkoudet ja hienosäädä, kunnes koodi täyttää tuotantovaatimukset.
-*Iteratiivinen parannuskierto - generointi, arviointi, ongelmien tunnistus, parannus, toisto*
+*Iteratiivinen parantamiskierre — generoi, arvioi, tunnista ongelmat, paranna, toista*
-**Rakenteellinen analyysi** — Johdonmukaiseen arviointiin. Malli tarkastelee koodia kiinteän kehyksen mukaisesti (oikeellisuus, käytännöt, suorituskyky, turvallisuus, ylläpidettävyys). Käytä tätä koodikatselmuksissa tai laadunarvioinneissa.
+**Rakenteellinen analyysi** – Johdonmukaiseen arviointiin. Malli tarkastaa koodin kiinteän kehyksen mukaan (oikeellisuus, käytännöt, suorituskyky, turvallisuus, ylläpidettävyys). Käytä tätä koodikatselmuksiin tai laadun arviointiin.
```java
String prompt = """
@@ -354,18 +354,18 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> **🤖 Kokeile [GitHub Copilot](https://github.com/features/copilot) Chatin kanssa:** Kysy rakenteellisesta analyysista:
-> - "Miten räätälöin analyysikehyksen eri tyyppisiin koodikatselmuksiin?"
-> - "Mikä on paras tapa jäsentää ja hyödyntää rakenteellista tulostetta ohjelmallisesti?"
-> - "Miten varmistan johdonmukaiset vakavuustasot eri katselmusistunnoissa?"
+> **🤖 Kokeile [GitHub Copilot](https://github.com/features/copilot) Chat:issa:** Kysy rakenteellisesta analyysistä:
+> - "Miten voin räätälöidä analyysikehystä eri tyyppisille koodikatselmuksille?"
+> - "Mikä on paras tapa jäsentää ja käsitellä rakenteellista tulostetta ohjelmallisesti?"
+> - "Miten varmistaa johdonmukaiset vakavuustasot eri katselmussessioissa?"
-Seuraava kaavio näyttää, miten tämä rakenne jäsentää koodikatselmuksen johdonmukaisiin kategorioihin vakavuustasojen kanssa.
+Seuraava kaavio näyttää, miten tämä rakenteellinen kehys jäsentää koodikatselmuksen johdonmukaisiin kategorioihin vakavuustasoineen.
-*Kehys johdonmukaisiin koodikatselmuksiin vakavuustasoineen*
+*Kehys johdonmukaisiin koodikatselmuksiin vakavuustasojen kanssa*
-**Monivaiheinen keskustelu** — Keskusteluihin, joissa tarvitaan kontekstia. Malli muistaa aiemmat viestit ja rakentaa niistä eteenpäin. Käytä tätä vuorovaikutteisissa tukisessioissa tai monimutkaisessa kysymys-vastaus -toiminnassa.
+**Monikäyttökertakeskustelu** – Keskusteluihin, jotka tarvitsevat kontekstia. Malli muistaa aiemmat viestit ja rakentaa niiden varaan. Käytä tätä interaktiivisiin tukisessioihin tai monimutkaisiin kysymys–vastaus-tilanteisiin.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-Alla oleva kaavio havainnollistaa, miten keskustelukonteksti karttuu kierrosten myötä ja miten se liittyy mallin token-rajoitukseen.
+Alla oleva kaavio havainnollistaa, miten keskustelukonteksti kertyy kunkin vaiheen myötä ja miten se liittyy mallin token-rajoitukseen.
-*Kuinka keskustelukonteksti karttuu useiden vaihtojen aikana token-rajan saavuttamiseen saakka*
-**Vaiheittainen päättely** – Ongelmissa, jotka vaativat näkyvää logiikkaa. Malli näyttää selkeän päättelyn jokaiselle vaiheelle. Käytä tätä matemaattisissa ongelmissa, logiikkapähkinöissä tai kun haluat ymmärtää ajatteluprosessin.
+*Kuinka keskustelukonteksti kertyy useiden käänteiden aikana token-rajalle saakka*
+
+**Askel askeleelta päättely** – Ongelmissa, jotka vaativat näkyvää logiikkaa. Malli näyttää eksplisiittisen päättelyn jokaiselle askeleelle. Käytä tätä matematiikan ongelmiin, loogisiin pulmisiin tai kun tarvitset ymmärrystä ajatteluprosessista.
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Alla oleva kaavio havainnollistaa, miten malli jakaa ongelmat selkeiksi, numeroiduiksi loogisiksi vaiheiksi.
-
-
+Alla oleva kaavio havainnollistaa, miten malli jakaa ongelmat eksplisiittisiin, numeroituihin loogisiin vaiheisiin.
-*Ongelmien jakaminen selkeisiin loogisiin vaiheisiin*
+
+*Ongelmien purkaminen eksplisiittisiksi loogisiksi vaiheiksi*
-**Rajoitettu tuloste** – Vastauksissa, joissa vaaditaan tiettyä muotoa. Malli noudattaa tiukasti muoto- ja pituussääntöjä. Käytä tätä yhteenvetoihin tai silloin, kun tarvitset tarkan tulosteen rakenteen.
+**Rajoitettu tulostus** – Vastauksissa, joissa on erityisiä formaatti- ja pituusvaatimuksia. Malli noudattaa tarkasti formaatti- ja pituussääntöjä. Käytä tätä yhteenvetoihin tai kun tarvitset täsmällistä tulosten rakennetta.
```java
String prompt = """
@@ -419,190 +419,190 @@ String prompt = """
String response = chatModel.chat(prompt);
```
+
+Seuraava kaavio näyttää, kuinka rajoitukset ohjaavat mallia tuottamaan vastauksen, joka noudattaa tiukasti antamiasi formaatti- ja pituusvaatimuksia.
-Seuraava kaavio näyttää, miten rajoitukset ohjaavat mallia tuottamaan vastauksia, jotka noudattavat täsmällisesti vaatimuksia muodon ja pituuden suhteen.
+
-
-
-*Tarkasti määritettyjen muoto-, pituus- ja rakennevaatimusten noudattaminen*
+*Erityisten formaatti-, pituus- ja rakennevaatimusten noudattaminen*
## Suorita sovellus
-**Vahvista käyttöönotto:**
+**Varmista käyttöönotto:**
-Varmista, että `.env`-tiedosto on juurihakemistossa ja sisältää Azure-tunnistetiedot (luotu moduulissa 01). Aja tämä moduulihakemistosta (`02-prompt-engineering/`):
+Varmista, että `.env`-tiedosto on olemassa juurikansiossa Azure-tunnuksilla (luotu moduulin 01 aikana). Suorita tämä moduulihakemistosta (`02-prompt-engineering/`):
-**Bash:**
+**Bash:**
```bash
cat ../.env # Tulisi näyttää AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
-Get-Content ..\.env # Tulisi näyttää AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+Get-Content ..\.env # Tulis näyttää AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
+
**Käynnistä sovellus:**
-> **Huom:** Jos olet jo käynnistänyt kaikki sovellukset komennolla `./start-all.sh` juurihakemistosta (kuten moduulissa 01 kuvattiin), tämä moduuli on jo käynnissä portissa 8083. Voit ohittaa alla olevat käynnistyskomennot ja mennä suoraan osoitteeseen http://localhost:8083.
+> **Huom:** Jos olet jo käynnistänyt kaikki sovellukset käyttämällä `./start-all.sh` juurikansiosta (kuten kuvattiin moduulissa 01), tämä moduuli on jo käynnissä portissa 8083. Voit ohittaa käynnistyskomennot alla ja siirtyä suoraan osoitteeseen http://localhost:8083.
-**Vaihtoehto 1: Spring Boot Dashboardin käyttö (suositellaan VS Code -käyttäjille)**
+**Vaihtoehto 1: Spring Boot Dashboardin käyttö (suositeltava VS Code -käyttäjille)**
-Kehityssäilö sisältää Spring Boot Dashboard -laajennuksen, joka tarjoaa visuaalisen käyttöliittymän kaikkien Spring Boot -sovellusten hallintaan. Löydät sen VS Coden vasemmanpuoleisesta Activity Barista (etsi Spring Boot -kuvake).
+Dev-containere sisältää Spring Boot Dashboard -laajennuksen, joka tarjoaa visuaalisen käyttöliittymän kaikkien Spring Boot -sovellusten hallintaan. Löydät sen VS Code:n vasemman laidan Activity Barista (etsi Spring Boot -kuvaketta).
-Spring Boot Dashboardista voit:
-- Näyttää kaikki käytettävissä olevat Spring Boot -sovellukset työtilassa
-- Käynnistää/pysäyttää sovellukset yhdellä napsautuksella
-- Tarkastella sovelluksen lokeja reaaliajassa
-- Valvoa sovellusten tilannetta
+Spring Boot Dashboardista voit:
+- Nähdä kaikki käytettävissä olevat Spring Boot -sovellukset työtilassa
+- Käynnistää/lopettaa sovelluksia yhdellä napsautuksella
+- Tarkastella sovelluslokeja reaaliajassa
+- Valvoa sovellusten tilaa
-Klikkaa yksinkertaisesti toistopainiketta "prompt-engineering" -kohdan vieressä käynnistääksesi tämän moduulin, tai käynnistä kaikki moduulit kerralla.
+Napsauta yksinkertaisesti toistopainiketta "prompt-engineering" -kohdan vieressä käynnistääksesi tämän moduulin, tai käynnistä kaikki moduulit kerralla.
-*Spring Boot Dashboard VS Codessa – käynnistä, pysäytä ja valvo kaikki moduulit yhdestä paikasta*
+*Spring Boot Dashboard VS Code:ssa – käynnistä, pysäytä ja valvo kaikkia moduuleja yhdestä paikasta*
**Vaihtoehto 2: Shell-skriptien käyttö**
-Käynnistä kaikki web-sovellukset (moduulit 01-04):
+Käynnistä kaikki verkkosovellukset (moduulit 01-04):
-**Bash:**
+**Bash:**
```bash
cd .. # Juurihakemistosta
./start-all.sh
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
-cd .. # Juurihakemistosta
+cd .. # Juurikansiosta
.\start-all.ps1
```
-
+
Tai käynnistä vain tämä moduuli:
-**Bash:**
+**Bash:**
```bash
cd 02-prompt-engineering
./start.sh
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
cd 02-prompt-engineering
.\start.ps1
```
+
+Molemmat skriptit lataavat automaattisesti ympäristömuuttujat juurihakemistossa olevasta `.env`-tiedostosta ja rakentavat JAR-tiedostot, jos niitä ei vielä ole.
-Kummatkin skriptit lataavat automaattisesti ympäristömuuttujat juurihakemiston `.env`-tiedostosta ja rakentavat JAR-tiedostot, jos niitä ei ole olemassa.
-
-> **Huom:** Jos haluat rakentaa kaikki moduulit manuaalisesti ennen käynnistystä:
->
-> **Bash:**
+> **Huom:** Jos haluat rakentaa kaikki moduulit manuaalisesti ennen käynnistystä:
+>
+> **Bash:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
->
-> **PowerShell:**
+
+> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
+
+Avaa http://localhost:8083 selaimessasi.
-Avaa selaimessa http://localhost:8083.
+**Pysäyttääksesi:**
-**Pysäytä sovellus:**
-
-**Bash:**
+**Bash:**
```bash
-./stop.sh # Tämä moduuli vain
+./stop.sh # Vain tämä moduuli
# Tai
cd .. && ./stop-all.sh # Kaikki moduulit
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
-.\stop.ps1 # Tämä moduuli vain
+.\stop.ps1 # Vain tämä moduuli
# Tai
cd ..; .\stop-all.ps1 # Kaikki moduulit
```
-
+
## Sovelluksen kuvakaappaukset
Tässä on prompt engineering -moduulin pääkäyttöliittymä, jossa voit kokeilla kaikkia kahdeksaa mallia rinnakkain.
-
+
-*Päähallintapaneeli näyttää kaikki 8 prompt engineering -mallia niiden ominaisuuksineen ja käyttötapauksineen*
+*Pääkojelauta, jossa näkyy kaikki 8 prompt engineering -mallia niiden ominaisuuksineen ja käyttötapauksineen*
## Mallien tutkiminen
-Verkkokäyttöliittymä antaa kokeilla eri ohjausstrategioita. Jokainen malli ratkaisee eri ongelmia – kokeile niitä nähdäksesi, milloin kukin lähestymistapa toimii parhaiten.
+Verkkokäyttöliittymä mahdollistaa erilaisten ohjausstrategioiden kokeilun. Jokainen malli ratkaisee erilaisia ongelmia – kokeile niitä nähdäksesi, milloin kukin lähestymistapa toimii parhaiten.
-> **Huom: Virtautus vs Ei-virtautus** — Jokaisella mallisivulla on kaksi painiketta: **🔴 Virtauta vastaus (reaaliaikainen)** ja **Ei-virtautus** -vaihtoehto. Virtautus käyttää Server-Sent Events (SSE) -tekniikkaa näyttäen tokeneita reaaliajassa, kun malli tuottaa niitä, joten näet edistymisen heti. Ei-virtautus-vaihtoehto odottaa koko vastauksen valmiiksi ennen näyttämistä. Syvällistä päättelyä vaativissa kehotteissa (esim. High Eagerness, Self-Reflecting Code) ei-virtautus-kutsu voi kestää hyvin kauan – joskus minuutteja – eikä anna näkyvää palautetta. **Käytä virtausta monimutkaisissa kokeiluissa**, jotta näet mallin toiminnan ja vältät vaikutelman aikakatkaisusta.
->
-> **Huom: Selaimen vaatimukset** — Virtausominaisuus käyttää Fetch Streams -API:a (`response.body.getReader()`), joka vaatii täysimittaisen selaimen (Chrome, Edge, Firefox, Safari). Se EI toimi VS Coden sisäänrakennetussa Simple Browserissa, koska sen webview ei tue ReadableStream API:a. Jos käytät Simple Browseria, ei-virtautus-painikkeet toimivat normaalisti – virtauspainikkeet ovat ainoastaan rajoitettuja. Avaa `http://localhost:8083` ulkoisessa selaimessa saadaksesi täyden kokemuksen.
+> **Huom: Streaming vs ei-streaming** — Jokaisella mallin sivulla on kaksi painiketta: **🔴 Stream Response (Live)** ja **Ei-streamaava** vaihtoehto. Striimaus käyttää Server-Sent Events (SSE) -tekniikkaa näyttämään tokenit reaaliajassa mallin generoimisen yhteydessä, joten näet etenemisen heti. Ei-streamaava vaihtoehto odottaa koko vastauksen valmistumista ennen näyttämistä. Syvällistä päättelyä vaativissa kysymyksissä (esim. High Eagerness, Self-Reflecting Code) ei-streamaava kutsu voi kestää hyvin kauan – jopa minuutteja – ilman näkyvää palautetta. **Käytä striimausta monimutkaisten kyselyiden kanssa**, jotta näet mallin toiminnassa ja vältyt vaikutelmalta, että pyyntö aikakatkaistiin.
+>
+> **Huom: Selainvaatimus** — Striimausominaisuus käyttää Fetch Streams APIa (`response.body.getReader()`), joka vaatii täyden selaimen (Chrome, Edge, Firefox, Safari). Se ei toimi VS Code:n sisäänrakennetussa Simple Browserissa, koska sen webview ei tue ReadableStream APIa. Jos käytät Simple Browseria, ei-streamaavat painikkeet toimivat normaalisti – vain striimauspainikkeet eivät. Avaa `http://localhost:8083` ulkoisessa selaimessa parhaan käyttökokemuksen saamiseksi.
-### Matala vs Korkea innokkuus
+### Matala vs korkea innokkuus
-Kysy yksinkertainen kysymys kuten "Mikä on 15 % luvusta 200?" käyttäen Matala innokkuus -tapaa. Saat välittömän, suoraviivaisen vastauksen. Kysy sitten jotain monimutkaista, esimerkiksi "Suunnittele välimuististrategia suurliikenteiselle API:lle", käyttäen Korkea innokkuus -tapaa. Klikkaa **🔴 Virtauta vastaus (reaaliaikainen)** ja katso, kuinka mallin yksityiskohtainen päättely ilmestyy token tokenilta. Sama malli, sama kysymysrakenne – mutta kehotus määrää, kuinka paljon sen tulee ajatella.
+Kysy yksinkertainen kysymys kuten "Mikä on 15% luvusta 200?" käyttäen Low Eagernessia. Saat välittömän ja suoran vastauksen. Nyt kysy monimutkaisempi kysymys kuten "Suunnittele välimuististrategia korkealiikenteiselle API:lle" käyttäen High Eagernessia. Klikkaa **🔴 Stream Response (Live)** ja seuraa, kuinka mallin yksityiskohtainen päättely ilmestyy token tokenilta. Sama malli, sama kysymysrakenne – mutta pyyntö ohjaa mallia kuinka paljon ajattelua tehdä.
-### Tehtävän suoritus (Työkalujen esilauseet)
+### Tehtävän suoritus (Tool Preambles)
-Monivaiheiset työnkulut hyötyvät etukäteissuunnittelusta ja etenemisen artikkeloinnista. Malli hahmottelee, mitä se aikoo tehdä, kuvailee kunkin vaiheen ja tiivistää tulokset.
+Monivaiheiset työnkulut hyötyvät suunnittelusta ja etenemisen kerronnasta etukäteen. Malli hahmottelee, mitä aikoo tehdä, selostaa jokaisen vaiheen ja tiivistää lopputulokset.
### Itsearvioiva koodi
-Kokeile "Luo sähköpostin validointipalvelu". Sen sijaan, että malli vain generoi koodin ja pysähtyy, se luo, arvioi laatukriteerien mukaan, tunnistaa heikkoudet ja parantaa. Näet, kuinka se toistaa, kunnes koodi täyttää tuotantovaatimukset.
+Kokeile "Luo sähköpostin validointipalvelu". Sen sijaan, että malli vain generoisi koodin ja pysähtyisi, se luo, arvioi laatukriteerien perusteella, tunnistaa heikkoudet ja parantaa. Näet, kuinka se käy koodia läpi kunnes se täyttää tuotantostandardit.
-### Jäsennelty analyysi
+### Rakenteellinen analyysi
-Koodikatselmukset tarvitsevat yhdenmukaiset arviointikehykset. Malli analysoi koodia kiinteiden kategorioiden (oikeellisuus, käytännöt, suorituskyky, turvallisuus) mukaan vakavuustasoilla.
+Koodikatselmukset tarvitsevat johdonmukaiset arviointikehykset. Malli analysoi koodia kiinteillä kategorioilla (oikeellisuus, käytännöt, suorituskyky, turvallisuus) vakavuustasoineen.
### Monivaiheinen keskustelu
-Kysy "Mikä on Spring Boot?" ja seuraa heti kysymällä "Näytä esimerkki". Malli muistaa ensimmäisen kysymyksen ja antaa juuri sinulle sopivan Spring Boot -esimerkin. Ilman muistia toinen kysymys olisi liian epämääräinen.
+Kysy "Mikä on Spring Boot?" ja heti sen jälkeen "Näytä esimerkki". Malli muistaa ensimmäisen kysymyksesi ja antaa sinulle juuri Spring Boot -esimerkin. Ilman muistia tuo toinen kysymys olisi liian epämääräinen.
### Vaiheittainen päättely
-Valitse matemaattinen tehtävä ja kokeile sekä Vaiheittaisella päättelyllä että Matala innokkuus -tavalla. Matala innokkuus antaa vain vastauksen – nopeasti mutta läpinäkymättömästi. Vaiheittainen näyttää jokaisen laskelman ja päätöksen.
+Valitse matemaattinen tehtävä ja kokeile sitä sekä Step-by-Step Reasoningilla että Low Eagernessilla. Matala innokkuus antaa vain vastauksen – nopeasti mutta vaillinaisesti. Vaiheittainen päättely näyttää jokaisen laskelman ja päätöksen.
-### Rajoitettu tuloste
+### Rajoitettu tulostus
-Kun tarvitset tiettyjä muotoja tai sanamääriä, tämä malli varmistaa tarkkojen vaatimusten noudattamisen. Kokeile tuottaa yhteenveto, jossa on täsmälleen 100 sanaa bullet point -muodossa.
+Kun tarvitset tarkkoja formaatteja tai sanamääriä, tämä malli varmistaa tiukan noudattamisen. Kokeile luoda yhteenveto, jossa on täsmälleen 100 sanaa bullet point -muodossa.
-## Mitä todella opit
+## Mitä todellisuudessa opit
-**Päättelyn vaivannäkö muuttaa kaiken**
+**Päättelypanos muuttaa kaiken**
-GPT-5.2 antaa sinun hallita laskennallista vaivannäköä kehotteidesi kautta. Matala vaivannäkö tarkoittaa nopeita vastauksia vähäisellä etsinnällä. Korkea vaivannäkö tarkoittaa, että malli käyttää aikaa syvälliseen ajatteluun. Opit sovittamaan vaivannäön tehtävän monimutkaisuuteen – älä käytä aikaa yksinkertaisiin kysymyksiin, mutta älä myöskään kiirehdi monimutkaisia päätöksiä.
+GPT-5.2 antaa sinun hallita laskentatehoa pyyntöjen kautta. Matala panos tarkoittaa nopeita vastauksia, joissa on vähän tutkiskelua. Korkea panos tarkoittaa, että malli käyttää aikaa syvälliseen ajatteluun. Opit sovittamaan panoksen tehtävän monimutkaisuuteen – älä tuhlaa aikaa yksinkertaisiin kysymyksiin, mutta älä myöskään kiirehdi monimutkaisia päätöksiä.
-**Rakenne ohjaa käyttäytymistä**
+**Rakenne ohjaa toimintaa**
-Huomaatko kehotteiden XML-tunnisteet? Ne eivät ole koristeita. Mallit seuraavat rakenteellisia ohjeistuksia luotettavammin kuin vapaata tekstiä. Kun tarvitset monivaiheisia prosesseja tai monimutkaista logiikkaa, rakenne auttaa mallia seuraamaan, missä se on ja mitä seuraavaksi tehdään. Alla oleva kaavio purkaa hyvin jäsennellyn kehotteen näyttämällä, miten tunnisteet kuten ``, ``, ``, `` ja `` järjestävät ohjeet selkeisiin osiin.
+Huomaatko XML-tunnisteet pyytämisissä? Ne eivät ole koristeita. Mallit noudattavat rakenteellisia ohjeita luotettavammin kuin vapaamuotoista tekstiä. Kun tarvitset monivaiheisia prosesseja tai monimutkaista logiikkaa, rakenne auttaa mallia seuraamaan, missä se on ja mitä seuraavaksi tapahtuu. Alla oleva kaavio purkaa hyvin rakennetun kehotteen, joka näyttää kuinka tunnisteet kuten ``, ``, ``, `` ja `` järjestävät ohjeesi selkeisiin osioihin.
-
+
-*Hyvin jäsennellyn kehotteen anatomia, jossa selkeät osiot ja XML-tyylinen järjestely*
+*Hyvin rakennetun kehotteen anatomia selkeine osioineen ja XML-tyylisine järjestelyineen*
-**Laatu itsearvioinnilla**
+**Laatu itsearvioinnin kautta**
-Itsearvioiviin malleihin sisältyy laatukriteerien selkeä määrittely. Sen sijaan, että toivoisit mallin "tekevän oikein", kerrot sille täsmälleen, mitä "oikein" tarkoittaa: oikea logiikka, virheenkäsittely, suorituskyky, turvallisuus. Malli voi sitten arvioida omaa tuotostaan ja parantaa sitä. Tämä muuttaa koodin generoinnin arpajaisista prosessiksi.
+Itsearvioivissa malleissa laatukriteerit tuodaan eksplisiittisesti esiin. Sen sijaan, että toivotaan mallin "tekevän oikein", kerrot sille tarkasti, mitä "oikein" tarkoittaa: oikea logiikka, virheenkäsittely, suorituskyky, turvallisuus. Malli voi sitten arvioida omaa tuotostaan ja parantaa sitä. Tämä muuttaa koodin generoinnin arpajaisesta hallituksi prosessiksi.
**Konteksti on rajallinen**
-Monivaiheiset keskustelut toimivat sisällyttämällä viestihistorian jokaiseen pyyntöön. Mutta on olemassa raja – jokaisella mallilla on enimmäistokenien määrä. Kun keskustelut kasvavat, tarvitset strategioita pitää olennaiset tiedot ilman, että ylität tämän rajan. Tämä moduuli näyttää, miten muisti toimii; myöhemmin opit, milloin tiivistää, milloin unohtaa ja milloin hakea uudelleen.
+Monivaiheiset keskustelut toimivat sisällyttämällä viestihistorian jokaiseen pyyntöön. Mutta on olemassa raja – jokaisella mallilla on maksimimäärä tokeneita. Keskustelujen kasvaessa tarvitset strategioita merkityksellisen kontekstin ylläpitämiseksi ilman rajan ylittymistä. Tämä moduuli näyttää, kuinka muisti toimii; myöhemmin opit, milloin tiivistää, milloin unohtaa ja milloin hakea tietoa uudelleen.
-## Seuraavat askeleet
+## Seuraavat vaiheet
-**Seuraava moduuli:** [03-rag - RAG (Hakua täydentävä generointi)](../03-rag/README.md)
+**Seuraava moduuli:** [03-rag - RAG (Retrieval-Augmented Generation)](../03-rag/README.md)
---
-**Navigointi:** [← Edellinen: Moduuli 01 - Johdanto](../01-introduction/README.md) | [Takaisin pääsivulle](../README.md) | [Seuraava: Moduuli 03 - RAG →](../03-rag/README.md)
+**Navigointi:** [← Edellinen: Module 01 - Johdanto](../01-introduction/README.md) | [Takaisin pääsivulle](../README.md) | [Seuraava: Module 03 - RAG →](../03-rag/README.md)
---
**Vastuuvapauslauseke**:
-Tämä asiakirja on käännetty käyttäen tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, tulee huomioida, että automaattikäännöksissä saattaa esiintyä virheitä tai epätarkkuuksia. Alkuperäinen asiakirja omalla kielellään on virallinen lähde. Tärkeissä tiedoissa suositellaan ammattilaisen tekemää ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä johtuvista väärinymmärryksistä tai tulkinnoista.
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, otathan huomioon, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäiskielellä on virallinen lähde. Tärkeissä asioissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinymmärryksistä tai tulkinnoista.
\ No newline at end of file
diff --git a/translations/fi/03-rag/README.md b/translations/fi/03-rag/README.md
index 9cb32541c..b342a2d2e 100644
--- a/translations/fi/03-rag/README.md
+++ b/translations/fi/03-rag/README.md
@@ -1,144 +1,143 @@
-# Moduuli 03: RAG (Hakua laajentava generointi)
+# Moduuli 03: RAG (Retrieval-Augmented Generation)
## Sisällysluettelo
-- [Video läpikäynti](../../../03-rag)
-- [Mitä opit](../../../03-rag)
-- [Esivaatimukset](../../../03-rag)
-- [RAG:n ymmärtäminen](../../../03-rag)
- - [Mikä RAG-lähestymistapa tätä opetusohjelmaa käyttää?](../../../03-rag)
-- [Miten se toimii](../../../03-rag)
- - [Dokumentin käsittely](../../../03-rag)
- - [Embeddingsien luominen](../../../03-rag)
- - [Semanttinen haku](../../../03-rag)
- - [Vastauksen generointi](../../../03-rag)
-- [Sovelluksen suorittaminen](../../../03-rag)
-- [Sovelluksen käyttö](../../../03-rag)
- - [Dokumentin lataaminen](../../../03-rag)
- - [Kysymysten esittäminen](../../../03-rag)
- - [Lähdeviitteiden tarkistaminen](../../../03-rag)
- - [Kokeile kysymyksiä](../../../03-rag)
-- [Keskeiset käsitteet](../../../03-rag)
- - [Paloittelustrategia](../../../03-rag)
- - [Samankaltaisuuspisteet](../../../03-rag)
- - [Muistissa säilytys](../../../03-rag)
- - [Kontekstin hallinta](../../../03-rag)
-- [Milloin RAG on tärkeä](../../../03-rag)
-- [Seuraavat askeleet](../../../03-rag)
-
-## Video läpikäynti
-
-Katso tämä live-sessio, joka selittää, miten alkaa työskennellä tämän moduulin kanssa:
+- [Videoesittely](#videoesittely)
+- [Mitä opit](#mitä-opit)
+- [Esivaatimukset](#esivaatimukset)
+- [RAG:n ymmärtäminen](#ragn-ymmärtäminen)
+ - [Minkä RAG-lähestymistavan tämä opas käyttää?](#minkä-rag-lähestymistavan-tämä-opas-käyttää)
+- [Miten se toimii](#miten-se-toimii)
+ - [Dokumentin käsittely](#dokumentin-käsittely)
+ - [Upotusten luominen](#upotusten-luominen)
+ - [Semanttinen haku](#semanttinen-haku)
+ - [Vastauksen luominen](#vastauksen-generointi)
+- [Sovelluksen suorittaminen](#sovelluksen-käynnistäminen)
+- [Sovelluksen käyttö](#sovelluksen-käyttö)
+ - [Dokumentin lataaminen](#dokumentin-lataaminen)
+ - [Kysymysten esittäminen](#kysymysten-esittäminen)
+ - [Lähdeviitteiden tarkistaminen](#lähdeviitteiden-tarkistus)
+ - [Kokeile kysymyksiä](#kokeile-erilaisia-kysymyksiä)
+- [Keskeiset käsitteet](#keskeiset-käsitteet)
+ - [Pilkkomisstrategia](#kappaleiden-jako)
+ - [Samanlaisuuspisteet](#samankaltaisuuspisteet)
+ - [Muistivarasto](#muistiin-tallennus)
+ - [Kontekstin ikkunan hallinta](#konteksti-ikkunan-hallinta)
+- [Milloin RAG on tärkeä](#milloin-rag-on-tärkeä)
+- [Seuraavat askeleet](#seuraavat-askeleet)
+
+## Videoesittely
+
+Katso tämä live-istunto, joka selittää kuinka pääset alkuun tämän moduulin kanssa:
## Mitä opit
-Edellisissä moduuleissa opit, kuinka käydä keskusteluja tekoälyn kanssa ja järjestää kehotteet tehokkaasti. Mutta on olemassa perustavanlaatuinen rajoitus: kielimallit tietävät vain sen, mitä ne oppivat harjoittelun aikana. Ne eivät voi vastata kysymyksiin yrityksesi käytännöistä, projektidokumentaatiosta tai muista tiedoista, joihin niitä ei ole koulutettu.
+Aiemmissa moduuleissa opit keskustelemaan tekoälyn kanssa ja jäsentämään pyyntöjäsi tehokkaasti. Mutta on olemassa perustavanlaatuinen rajoitus: kielimallit tietävät vain sen, mitä ne oppivat harjoittelun aikana. Ne eivät voi vastata kysymyksiin yrityksesi käytännöistä, projektidokumentaatiostasi tai mistään tiedosta, jota niiden koulutuksessa ei ole ollut.
-RAG (Retrieval-Augmented Generation) ratkaisee tämän ongelman. Sen sijaan, että yritettäisiin opettaa mallille tietosi (mikä on kallista ja epäkäytännöllistä), annat mallille kyvyn hakea tietoa dokumenteistasi. Kun joku esittää kysymyksen, järjestelmä löytää relevanttia tietoa ja lisää sen kehotteeseen. Malli vastaa sitten haetun kontekstin perusteella.
+RAG (Retrieval-Augmented Generation) ratkaisee tämän ongelman. Sen sijaan, että yrittäisit opettaa mallille tietosi (mikä on kallista ja epäkäytännöllistä), annat mallille mahdollisuuden hakea dokumenteistasi. Kun joku esittää kysymyksen, järjestelmä löytää asiaankuuluvat tiedot ja liittää ne pyyntöön. Malli vastaa sitten haetun kontekstin pohjalta.
-Ajattele RAG:ia kuin mallille annettavaa viitelähdekirjastoa. Kun kysyt kysymyksen, järjestelmä:
+Ajattele RAG:ia mallin viitetietokirjastona. Kun esität kysymyksen, järjestelmä:
-1. **Käyttäjän kysely** - Esität kysymyksen
-2. **Embedding** - Muuntaa kysymyksen vektoriksi
-3. **Vektorihaku** - Löytää samankaltaiset dokumenttipalat
-4. **Kontekstin kokoaminen** - Lisää merkitykselliset palat kehotteeseen
-5. **Vastaus** - LLM luo vastauksen kontekstin perusteella
+1. **Käyttäjän kysely** – Sinä esität kysymyksen
+2. **Upotus** – Muuntaa kysymyksesi vektoriksi
+3. **Vektorihaku** – Löytää samankaltaiset dokumenttipalat
+4. **Kontekstin koostaminen** – Lisää asiaankuuluvat palat pyyntöön
+5. **Vastaus** – Suuri kielimalli luo vastauksen kontekstin perusteella
-Näin mallin vastaukset perustuvat todelliseen dataasi sen sijaan, että ne vain nojaisivat koulutustietoonsa tai keksisivät vastauksia.
+Tämä perustaa mallin vastaukset todellisiin tietoihisi sen sijaan, että se luottaisi vain harjoittelutietoihin tai keksisi vastauksia.
## Esivaatimukset
-- Suoritettu [Moduuli 00 - Nopeasti alkuun](../00-quick-start/README.md) (Easy RAG -esimerkin käyttöönottoa varten, jota viitataan tässä moduulissa)
-- Suoritettu [Moduuli 01 - Johdanto](../01-introduction/README.md) (Azure OpenAI -resurssit käyttöön otettuna, mukaan lukien `text-embedding-3-small` embedding-malli)
-- `.env`-tiedosto juurihakemistossa Azure-tunnuksilla (luotu `azd up` komennolla Moduulissa 01)
+- Valmis [Moduuli 01 - Johdanto](../01-introduction/README.md) (Azure OpenAI -resurssit käyttöön otettuna, mukaan lukien `text-embedding-3-small` -upotusmalli)
+- `.env`-tiedosto juurihakemistossa Azure-tunnuksillasi (luotu `azd up` -komennolla moduulissa 01)
-> **Huom:** Jos et ole suorittanut Moduulia 01, seuraa ensin siellä annettuja käyttöönotto-ohjeita. `azd up` -komento ottaa käyttöön sekä GPT-chat-mallin että tämän moduulin käyttämän embedding-mallin.
+> **Huom:** Jos et ole vielä suorittanut moduulia 01, noudata ensin siellä annettuja käyttöönotto-ohjeita. `azd up` -komento ottaa käyttöön sekä GPT-chat-mallin että tämän moduulin käyttämän upotusmallin.
## RAG:n ymmärtäminen
-Alla oleva kaavio havainnollistaa ydinkäsitettä: sen sijaan, että luotettaisiin ainoastaan mallin koulutusdataan, RAG antaa mallille viitelähdekirjaston dokumenteistasi, joita se voi käyttää ennen kunkin vastauksen generointia.
+Alla oleva kaavio havainnollistaa ydinkonseptin: RAG ei perustu pelkästään mallin koulutusdataan, vaan antaa mallille viitetietokirjaston dokumenteistasi, joita se voi käyttää ennen jokaisen vastauksen luomista.
-
+
-*Tämä kaavio näyttää eron perinteisen LLM:n (joka arvaa koulutusdatan pohjalta) ja RAG-laajennetun LLM:n välillä (joka konsultoi ensin dokumenttejasi).*
+*Tämä kaavio näyttää eron tavallisen LLM:n (joka arvaa koulutusdatan pohjalta) ja RAG-parannetun LLM:n (joka käyttää ensin dokumenttejasi) välillä.*
-Näin prosessin osat liittyvät toisiinsa päästä päähän. Käyttäjän kysymys kulkee neljän vaiheen läpi — embedding, vektorihaku, kontekstin kokoaminen ja vastauksen generointi — jokainen rakentuu edellisen päälle:
+Tässä on miten osat kytkeytyvät päästä päähän. Käyttäjän kysymys kulkee neljän vaiheen läpi — upotus, vektorihaku, kontekstin koostaminen ja vastauksen luominen — kukin rakentuu edellisen päälle:
-
+
-*Tämä kaavio näyttää RAG-putken päästä päähän — käyttäjän kysely kulkee embeddingin, vektorihakujen, kontekstin kokoamisen ja vastauksen generoinnin läpi.*
+*Tämä kaavio näyttää RAG-putken päästä päähän — käyttäjän kysely kulkee upotuksen, vektorihakemiston, kontekstin kokoamisen ja vastauksen luomisen kautta.*
-Tämän moduulin loput osat käyvät läpi kukin vaiheen yksityiskohtaisesti, sisältäen koodin jota voit ajaa ja muokata.
+Tämän moduulin loput osat käyvät jokaisen vaiheen läpi yksityiskohtaisesti, sisältäen koodin jota voit suorittaa ja muokata.
-### Mikä RAG-lähestymistapa tätä opetusohjelmaa käyttää?
+### Minkä RAG-lähestymistavan tämä opas käyttää?
-LangChain4j tarjoaa kolme tapaa toteuttaa RAG, joista jokainen tarjoaa eri tason abstraktiota. Alla oleva kaavio vertailee niitä rinnakkain:
+LangChain4j tarjoaa kolme tapaa toteuttaa RAG, kukin eri abstraktiotason kanssa. Alla oleva kaavio vertaa niitä rinnakkain:
-
+
-*Tämä kaavio vertailee LangChain4j:n kolmea RAG-lähestymistapaa — Easy, Native ja Advanced — ja näyttää niiden keskeiset osat sekä käyttötarkoitukset.*
+*Tämä kaavio vertailee LangChain4j:n kolmea RAG-lähestymistapaa — Easy, Native ja Advanced — näyttäen niiden keskeiset komponentit ja milloin niitä käytetään.*
-| Lähestymistapa | Mitä se tekee | Kompromissi |
+| Lähestymistapa | Mitä se tekee | Vaihtoehto |
|---|---|---|
-| **Easy RAG** | Kytkee kaiken automaattisesti `AiServices` ja `ContentRetriever` kautta. Määrittelet rajapinnan, liität haun, ja LangChain4j hoitaa taustalla dosenttien upotuksen, haun ja kehotteen kokoonpanon. | Vähiten koodia, mutta et näe mitä kukin vaihe tarkalleen tekee. |
-| **Native RAG** | Kutsut upotusmallia, haet tallennuspaikasta, rakennat kehotteen ja generoit vastauksen – yksi näkyvä vaihe kerrallaan. | Enemmän koodia, mutta jokainen vaihe näkyvissä ja muokattavissa. |
-| **Advanced RAG** | Käyttää `RetrievalAugmentor`-kehystä, jossa on plugarit kyselymuuntajille, reitittimille, uudelleenjärjestäjille ja sisällön injektoreille tuotantotason putkissa. | Maksimaalinen joustavuus, mutta merkittävästi monimutkaisempi. |
+| **Easy RAG** | Kytkee kaiken automaattisesti `AiServices`- ja `ContentRetriever`-luokkien kautta. Merkitset rajapinnan, liität hakutoiminnon, ja LangChain4j hoitaa upotuksen, haun ja pyyntöjen kokoamisen taustalla. | Vähäinen koodimäärä, mutta et näe mitä kussakin vaiheessa tapahtuu. |
+| **Native RAG** | Kutsut upotusmallin, haet tietovarastosta, rakennat pyynnön ja luot vastauksen itse — yksi selkeä vaihe kerrallaan. | Enemmän koodia, mutta jokainen vaihe on näkyvissä ja muokattavissa. |
+| **Advanced RAG** | Käyttää `RetrievalAugmentor`-kehystä, jossa on vaihdettavissa olevia kyselyn muuntajia, reitittimiä, uudelleenjärjestelijöitä ja sisällön syöttäjiä tuotantotason putkistoihin. | Maksimaalinen joustavuus, mutta huomattavasti monimutkaisempi. |
-**Tämä opetusohjelma käyttää Native-lähestymistapaa.** RAG-putken jokainen vaihe — kyselyn upotus, vektorikaupan haku, kontekstin kokoaminen ja vastauksen generointi — on kirjoitettu selkeästi tiedostossa [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Tämä on tarkoituksellista: oppimateriaaliin on tärkeämpää, että näet ja ymmärrät jokaisen vaiheen kuin että koodi olisi minimoitu. Kun olet mukava sen kanssa miten osat sopivat yhteen, voit siirtyä Easy RAG:n pariin nopeisiin prototyyppeihin tai Advanced RAG:n tuotantojärjestelmiin.
+**Tämä opas käyttää Native-lähestymistapaa.** Jokainen RAG-putken vaihe — kyselyn upotus, vektorivaraston haku, kontekstin kokoaminen ja vastauksen luominen — on kirjoitettu näkyvästi tiedostossa [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Tämä on tarkoituksellista: oppimateriaalina on tärkeämpää, että näet ja ymmärrät jokaisen vaiheen kuin että koodi olisi minimoitu. Kun tunnet, miten osat liittyvät toisiinsa, voit siirtyä Easy RAG:iin nopeita prototyyppejä varten tai Advanced RAG:iin tuotantojärjestelmiin.
-> **💡 Oletko jo nähnyt Easy RAG:n toiminnassa?** [Nopeasti alkuun -moduuli](../00-quick-start/README.md) sisältää Document Q&A -esimerkin ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)), joka käyttää Easy RAG -lähestymistapaa — LangChain4j hoitaa upotuksen, haun ja kehotteen kokoonpanon automaattisesti. Tämä moduuli vie sen seuraavalle tasolle avaamalla putken, jotta voit itse nähdä ja hallita jokaista vaihetta.
+> **💡 Kiinnostunut Easy RAG:stä?** LangChain4j tarjoaa myös *Easy RAG* -lähestymistavan, jossa `AiServices` ja `ContentRetriever` hoitavat upotuksen, haun ja pyyntöjen kokoamisen automaattisesti. Tämä moduuli käyttää selkeämpää reittiä — se avaa putken vaihe vaiheelta, jotta näet ja hallitset jokaisen osan itse.
-Alla oleva kaavio näyttää Easy RAG -putken tuosta Quick Start -esimerkistä. Huomaa, kuinka `AiServices` ja `EmbeddingStoreContentRetriever` piilottavat kaiken monimutkaisuuden — lataat dokumentin, liität hakijan ja saat vastaukset. Tämän moduulin Native-lähestymistapa avaa jokaisen kätketyn vaiheen:
+Alla oleva kaavio näyttää Easy RAG -putken. Huomaa miten `AiServices` ja `EmbeddingStoreContentRetriever` piilottavat monimutkaisuuden — lataa dokumentti, liitä hakutoiminto ja saa vastauksia. Tämä moduulin Native-lähestymistapa avaa nuo piilotetut vaiheet:
-
+
-*Tämä kaavio näyttää Easy RAG -putken tiedostosta `SimpleReaderDemo.java`. Vertaa sitä tämän moduulin Native-lähestymistapaan: Easy RAG piilottaa upotuksen, haun ja kehotteen kokoamisen `AiServices` ja `ContentRetriever` taakse — lataat dokumentin, liität hakijan ja saat vastaukset. Tämä moduulin Native-lähestymistapa avaa putken, jolloin kutsut jokaisen vaiheen (upota, hae, kokoa konteksti, generoi) itse, tarjoten täyden näkyvyyden ja kontrollin.*
+*Tämä kaavio näyttää Easy RAG-putken. Verrattuna tähän Native-lähestymistapaa, jota käytetään tässä moduulissa: Easy RAG piilottaa upotuksen, haun ja pyyntöjen kokoamisen `AiServices`in ja `ContentRetriever`in taakse — lataat dokumentin, liität hakijan ja saat vastauksia. Tämä moduuli avaa kyseisen putken, jotta voit kutsua jokaista vaihetta (upotus, haku, kontekstin kokoaminen, vastaus) itse, tarjoten täydellisen näkyvyyden ja hallinnan.*
## Miten se toimii
-Tässä moduulissa RAG-putki jakautuu neljään vaiheeseen, jotka suoritetaan peräkkäin joka kerta kun käyttäjä esittää kysymyksen. Ensin ladattu dokumentti **jäsennetään ja pilkotaan paloiksi** hallittavaan muotoon. Nämä palat muunnetaan sitten **vektorisijoituksiksi** ja tallennetaan, jotta niitä voidaan vertailla matemaattisesti. Kun kysely saapuu, järjestelmä suorittaa **semanttisen haun** löytääkseen merkityksellisimmät osat, ja lopuksi välittää ne kontekstiksi LLM:lle **vastauksen generointia** varten. Alla olevat osiot käyvät läpi jokaisen vaiheen koodin ja kaavioiden kanssa. Katsotaanpa ensin dokumentin käsittelyä.
+Tämän moduulin RAG-putki jakautuu neljään vaiheeseen, jotka suoritetaan peräkkäin aina, kun käyttäjä esittää kysymyksen. Ensin ladattu dokumentti **jäsennetään ja pilkotaan** hallittaviksi paloiksi. Nämä palat muunnetaan sitten **vektoriedustuksiksi (upotuksiksi)** ja varastoidaan, jotta niitä voidaan vertailla matemaattisesti. Kun kysely saapuu, järjestelmä suorittaa **semanttisen haun** löytääkseen merkityksellisimmät palat, ja lopuksi välittää ne kontekstina LLM:lle **vastauksen luomiseksi**. Seuraavat osiot käyvät jokaisen vaiheen läpi konkreettisen koodin ja kaavioiden kera. Aloitetaan ensimmäisestä vaiheesta.
### Dokumentin käsittely
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-Kun lataat dokumentin, järjestelmä jäsentää sen (PDF tai pelkkä teksti), liittää metatietoja kuten tiedostonimen, ja pilkkoo sen paloiksi — pienemmiksi osiksi, jotka mahtuvat mukavasti mallin kontekstin ikkunaan. Nämä palat limittyvät hieman, jotta rajapinnoissa ei menetetä kontekstia.
+Kun lataat dokumentin, järjestelmä jäsentää sen (PDF tai tavallinen teksti), liittää metatiedot kuten tiedostonimen, ja pilkkoo sen paloiksi — pienemmiksi osiksi, jotka mahtuvat mukavasti mallin kontekstin ikkunaan. Nämä palat limittäytyvät hieman, jotta konteksti ei katoa rajapinnoissa.
```java
-// Jäsennä ladattu tiedosto ja kääri se LangChain4j-dokumenttiin
+// Jäsennä ladattu tiedosto ja kiedo se LangChain4j-dokumenttiin
Document document = Document.from(content, metadata);
-// Jaa 300-tokenin paloiksi, joissa on 30-tokenin päällekkäisyys
+// Jaa 300-tokenin paloihin, joissa on 30-tokenin päällekkäisyys
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
-Alla oleva kaavio havainnollistaa tätä visuaalisesti. Huomaa, miten jokainen pala jakaa joitain tokeneita naapurinsa kanssa — 30 tokenin limitys varmistaa, että tärkeä konteksti ei putoa rakoihin:
+Alla oleva kaavio näyttää tämän toiminnan visuaalisesti. Huomaa miten jokainen pala jakaa joitain tokeneita naapureidensa kanssa — 30 tokenin limitys varmistaa, ettei tärkeä konteksti katkea:
-
+
-*Tämä kaavio näyttää dokumentin pilkkomisen 300 tokenin paloihin, 30 tokenin limityksellä, jolloin konteksti säilyy paloissa.*
+*Tämä kaavio näyttää dokumentin jakamisen 300 tokenin paloiksi, joissa on 30 tokenin limitys, joka säilyttää kontekstin palojen rajapinnoilla.*
-> **🤖 Kokeile [GitHub Copilot](https://github.com/features/copilot) Chatissa:** Avaa [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) ja kysy:
-> - "Miten LangChain4j pilkkoo dokumentit paloihin ja miksi limitys on tärkeää?"
-> - "Mikä on optimaalinen palakoko eri dokumenttityypeille ja miksi?"
-> - "Miten käsittelen dokumentteja useilla kielillä tai erikoisformaatilla?"
+> **🤖 Kokeile [GitHub Copilot](https://github.com/features/copilot) Chat -työkalulla:** Avaa [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) ja kysy:
+> - "Miten LangChain4j pilkkoo dokumentit paloiksi ja miksi limitys on tärkeää?"
+> - "Mikä on optimaalinen palakoko eri dokumenttityypeille ja miksi?"
+> - "Miten käsitellä monikielisiä dokumentteja tai erikoismuotoiluja?"
-### Embeddingsien luominen
+### Upotusten luominen
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-Jokainen pala muunnetaan numeeriseen esitykseen, jota kutsutaan embeddingiksi — käytännössä merkityksen muuttajaksi numeroiksi. Embedding-malli ei ole "älykäs" kuten chat-malli; se ei voi seurata ohjeita, järkeillä tai vastata kysymyksiin. Sen sijaan se muuntaa tekstin matemaattiseen tilaan, jossa samankaltaiset merkitykset sijoittuvat lähelle toisiaan — "car" lähelle "automobile", "refund policy" lähelle "return my money". Ajattele chat-mallia ihmisenä, jonka kanssa voit puhua; embedding-malli on erittäin hyvä arkistointijärjestelmä.
+Jokainen pala muunnetaan numeeriseksi edustukseksi, jota kutsutaan upotukseksi — käytännössä merkityksen muuntaminen luvuiksi. Upotusmalli ei ole "älykäs" siinä mielessä kuin chat-malli; se ei seuraa ohjeita, päätttele tai vastaa kysymyksiin. Se osaa kuitenkin kuvata tekstin matemaattisessa tilassa, jossa samanlaiset merkitykset sijaitsevat lähellä toisiaan — "auto" lähellä "ajoneuvoa", "palautuskäytäntö" lähellä "rahan palautusta". Voit ajatella chat-mallia ihmisenä, jolle voi puhua; upotusmalli on erittäin tehokas arkistojärjestelmä.
-Alla oleva kaavio visualisoi tämän käsitteen — teksti syötetään sisään, numeeriset vektorit tulevat ulos, ja samankaltaiset merkitykset tuottavat lähellä sijaitsevia vektoreita:
+Alla oleva kaavio havainnollistaa tätä konseptia — teksti menee sisään, numeeriset vektorit tulevat ulos, ja samankaltaiset merkitykset tuottavat lähekkäin sijaitsevia vektoreita:
-
+
-*Tämä kaavio näyttää miten embedding-malli muuntaa tekstin numeerisiksi vektoreiksi, sijoittaen saman merkityksen sanat kuten "car" ja "automobile" lähelle toisiaan vektoritilassa.*
+*Tämä kaavio näyttää miten upotusmalli muuntaa tekstin numeerisiksi vektoreiksi, sijoittaen samankaltaiset merkitykset — kuten "auto" ja "ajoneuvo" — lähelle toisiaan vektoritilassa.*
```java
@Bean
@@ -154,29 +153,29 @@ EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-Alla oleva luokkakaavio näyttää kaksi erillistä virtaa RAG-putkessa ja LangChain4j-luokat, jotka toteuttavat ne. **Ingestiovirta** (suoritetaan kerran latauksen yhteydessä) pilkkoo dokumentin, muuntaa palat upotuksiksi ja tallentaa ne `.addAll()` metodilla. **Kyselyvirta** (suoritetaan aina kun käyttäjä kysyy) upottaa kysymyksen, etsii tallennuspaikasta `.search()` metodilla ja välittää osuneet kontekstit chat-mallille. Molemmat virrat kohtaavat jaetun `EmbeddingStore`-rajapinnan kautta:
+Alla oleva luokkakaavio näyttää kaksi erillistä virtaa RAG-putkessa ja LangChain4j-luokat, jotka niitä toteuttavat. **Sisäänottovaihe** (suoritetaan kerran lataushetkellä) pilkkoo dokumentin, upottaa palat ja tallentaa ne `.addAll()`-metodilla. **Kyselyvaihe** (suoritetaan joka kerta kun käyttäjä kysyy) upottaa kysymyksen, hakee varastosta `.search()`-metodilla ja välittää löydetyn kontekstin chat-mallille. Molemmat virrat kohtaavat yhteisessä `EmbeddingStore` -rajapinnassa:
-
+
-*Tämä kaavio näyttää kaksi virtaa RAG-putkessa — datajen syöttö ja kysely — ja miten ne yhdistyvät yhteisen EmbeddingStoren kautta.*
+*Tämä kaavio näyttää kaksi RAG-putken virtaa — sisäänoton ja kyselyn — ja niiden kytkeytymisen yhteisen EmbeddingStore-rajapinnan kautta.*
-Kun embeddings on tallennettu, samankaltaiset sisällöt ryhmittyvät luontaisesti vektoritilassa yhteen. Alla oleva visualisointi näyttää, miten aihepiirit kuten Tekninen dokumentaatio, Liiketoiminnan säännöt ja Usein kysytyt kysymykset muodostavat selkeitä ryhmiä, mikä mahdollistaa semanttisen haun:
+Kun upotukset on tallennettu, samankaltaiset sisällöt ryhmittyvät luonnollisesti toistensa läheisyyteen vektoritilassa. Alla oleva visualisointi osoittaa, miten aihepiireittäin liittyvät dokumentit muodostavat lähellä toisiaan olevia pisteitä, mikä tekee semanttisesta hausta mahdollista:
-
+
-*Tämä visualisointi näyttää miten aihealueisiin liittyvät dokumentit ryhmittyvät 3D-vektoritilassa.*
+*Tämä visualisointi näyttää miten aiheiltaan samankaltaiset dokumentit ryhmittyvät toistensa lähelle 3D-vektoritilassa, aiheina mm. tekniset dokumentit, liiketoimintasäännöt ja FAQit.*
-Kun käyttäjä hakee, järjestelmä seuraa neljää vaihetta: dokumentit upotetaan kerran, kysely upotetaan jokaisella haulla, kyselyvektori verrataan kaikkiin tallennettuihin vektoreihin kosinisimilariteetin avulla, ja palautetaan top-K parhaat osumat. Alla oleva kaavio näyttää jokaisen vaiheen ja niihin liittyvät LangChain4j-luokat:
+Kun käyttäjä hakee, järjestelmä suorittaa neljä vaihetta: upottaa dokumentit kerran, upottaa kyselyn jokaisella haulla, vertaa kyselyvektoria kaikkia tallennettuja vektoreita vastaan kosinisen samankaltaisuuden avulla, ja palauttaa kärki-K parasta osumaa. Alla olevassa kaaviossa käydään läpi jokainen vaihe ja LangChain4j:n luokat mukaan lukien:
-
+
-*Tämä kaavio näyttää neljä vaihetta embedding-haussa: dokumenttien upotus, kyselyn upotus, vektorien vertailu kosinisimilariteetilla, ja parhaiden K tulosten palautus.*
+*Tämä kaavio näyttää nelivaiheisen upotushakuprosessin: upotetaan dokumentit, upotetaan kysely, verrataan vektoreita kosinisamankaltaisuudella, ja palautetaan kärki-K tulokset.*
### Semanttinen haku
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Kun esität kysymyksen, kysymyksestä muodostetaan myös embedding. Järjestelmä vertaa kysymyksesi embeddingiä kaikkiin dokumenttipalojen embeddingsiin. Se löytää ne palat, joiden merkitys on lähimpänä — ei pelkästään avainsanojen vastaavuuden perusteella, vaan todellisen semanttisen samankaltaisuuden.
+Kun esität kysymyksen, kysymyksesi myös muunnetaan upotukseksi. Järjestelmä vertaa kysymyksesi upotusta kaikkien dokumenttipalojen upotuksiin. Se löytää ne palat, joilla on merkitykseltään lähimpänä - ei pelkästään avainsanojen täsmäystä, vaan todellinen semanttinen samankaltaisuus.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -196,27 +195,27 @@ for (EmbeddingMatch match : matches) {
}
```
-Alla oleva kaavio vertaa semanttista hakua perinteiseen avainsanahakuun. Avainsanahaku sanalla "vehicle" ohittaa palan, jossa puhutaan "autoista ja kuorma-autoista", mutta semanttinen haku ymmärtää, että ne tarkoittavat samaa asiaa ja palauttaa sen korkealla pistemäärällä:
+Alla oleva kaavio vertaa semanttista hakua perinteiseen avainsanahakuun. Avainsanahaku sanalle "ajoneuvo" ohittaa palan, jossa puhutaan "autoista ja kuorma-autoista", mutta semanttinen haku ymmärtää niiden tarkoittavan samaa asiaa ja palauttaa sen korkeasti pisteytettynä osumana:
-
+
-*Tämä kaavio vertailee avainsanapohjaista ja semanttista hakua, näyttäen miten semanttinen haku löytää käsitteellisesti liittyvää sisältöä, vaikka tarkat avainsanat eroavat.*
-Alla olevassa arvossa samankaltaisuutta mitataan kosinisamankaltaisuuden avulla — käytännössä kysytään "osoittavatko nämä kaksi nuolta samaan suuntaan?" Kaksi tekstipalasta voivat käyttää täysin eri sanoja, mutta jos ne tarkoittavat samaa asiaa, niiden vektorit osoittavat samaan suuntaan ja pisteet ovat lähellä 1.0:
+*Tämä kaavio vertaa avainsanapohjaista hakua semanttiseen hakuun, näyttäen miten semanttinen haku löytää käsitteellisesti liittyvää sisältöä vaikka tarkat avainsanat eroavat.*
-
+Tietokoneen mittarina samankaltaisuudelle käytetään kosinista samankaltaisuutta — käytännössä kysyen "osoittavatko nämä kaksi nuolta samaan suuntaan?" Kaksi palaa voivat käyttää täysin erilaisia sanoja, mutta jos ne tarkoittavat samaa, niiden vektorit osoittavat samaan suuntaan ja arvo on lähellä 1.0:
-*Tämä kaavio havainnollistaa kosinisamankaltaisuutta upotettujen vektoreiden välisenä kulmana — enemmän linjassa olevat vektorit saavat pisteet lähempänä 1.0, mikä osoittaa suurempaa semanttista samankaltaisuutta.*
+
+*Tämä kaavio havainnollistaa kosinissimilariteettia upotusvektorien välisenä kulmana — mitä paremmin kohdistuneet vektorit, sitä lähempänä pistemäärä on 1.0, mikä tarkoittaa suurempaa semanttista samankaltaisuutta.*
-> **🤖 Kokeile [GitHub Copilot](https://github.com/features/copilot) Chatilla:** Avaa [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) ja kysy:
+> **🤖 Kokeile [GitHub Copilot](https://github.com/features/copilot) Chatin kanssa:** Avaa [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) ja kysy:
> - "Miten samankaltaisuushaku toimii upotusten kanssa ja mikä määrää pistemäärän?"
-> - "Mitä samankaltaisuuskynnystä minun tulisi käyttää ja miten se vaikuttaa tuloksiin?"
-> - "Miten käsittelen tilanteet, joissa ei löydy relevantteja dokumentteja?"
+> - "Mikä samankaltaisuuskynnys minun pitäisi käyttää ja miten se vaikuttaa tuloksiin?"
+> - "Miten käsittelen tapauksia, joissa ei löydy relevantteja dokumentteja?"
-### Vastausten tuottaminen
+### Vastauksen generointi
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Merkityksellisimmät tekstipalaset kootaan rakenteelliseksi kehotteeksi, joka sisältää selkeät ohjeet, haetun kontekstin ja käyttäjän kysymyksen. Malli lukee nämä tietyt palaset ja vastaa niiden perusteella — se voi käyttää vain sitä tietoa, mikä sillä on edessään, mikä estää harhan muodostumisen.
+Osuvimmat kappaleet koottaan rakenteelliseksi kehotteeksi, joka sisältää selkeät ohjeet, haetun kontekstin ja käyttäjän kysymyksen. Malli lukee nämä tietyt kappaleet ja vastaa niiden pohjalta — se voi käyttää vain näkyvissä olevia tietoja, mikä estää hallusinaatiot.
```java
String context = matches.stream()
@@ -237,17 +236,17 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-Alla oleva kaavio näyttää tämän kokoamisen toiminnassa — haun vaiheessa parhaat pisteet saaneet tekstipalaset sijoitetaan kehotteen malliin, ja `OpenAiOfficialChatModel` tuottaa perustellun vastauksen:
+Alla oleva kaavio näyttää tämän kokoonpanon toiminnassa — hakuvaiheen parhaiten pisteytetyt kappaleet upotetaan kehottepohjaan, ja `OpenAiOfficialChatModel` tuottaa perustellun vastauksen:
-
+
-*Tässä kaaviossa näytetään, miten parhaiten pisteytetyt tekstipalaset kootaan rakenteelliseksi kehotteeksi, jolloin malli voi tuottaa perustellun vastauksen datastasi.*
+*Tämä kaavio näyttää, miten parhaiten pisteytetyt kappaleet kootaan rakenteelliseksi kehotteeksi, jolloin malli voi luoda perustellun vastauksen datastasi.*
## Sovelluksen käynnistäminen
-**Tarkista käyttöönotto:**
+**Varmista käyttöönotto:**
-Varmista, että juuri hakemistossa on `.env`-tiedosto, jossa on Azure-tunnukset (luotu moduulissa 01). Suorita tämä moduulin hakemistosta (`03-rag/`):
+Varmista, että `.env`-tiedosto on juurikansiossa Azure-tunnistetiedoilla (luotu Modulissa 01). Suorita tämä moduulihakemistosta (`03-rag/`):
**Bash:**
```bash
@@ -261,27 +260,27 @@ Get-Content ..\.env # Tulisi näyttää AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYM
**Käynnistä sovellus:**
-> **Huom:** Jos olet jo käynnistänyt kaikki sovellukset käyttämällä `./start-all.sh` juuri hakemistosta (kuten moduulissa 01 kuvattu), tämä moduuli on jo käynnissä portissa 8081. Voit ohittaa alla olevat käynnistyskomennot ja mennä suoraan osoitteeseen http://localhost:8081.
+> **Huom:** Jos olet jo käynnistänyt kaikki sovellukset käyttämällä `./start-all.sh` juurikansiosta (kuten Modulissa 01 kuvattu), tämä moduuli on jo käynnissä portissa 8081. Voit ohittaa alla olevat käynnistyskomennot ja siirtyä suoraan osoitteeseen http://localhost:8081.
**Vaihtoehto 1: Spring Boot Dashboardin käyttäminen (suositeltu VS Code -käyttäjille)**
-Kehityssäiliö sisältää Spring Boot Dashboard -laajennuksen, joka tarjoaa visuaalisen käyttöliittymän kaikkien Spring Boot -sovellusten hallintaan. Löydät sen Activity Barista VS Codessa vasemmalta (etsi Spring Boot -kuvaketta).
+Kehityssäiliö sisältää Spring Boot Dashboard -laajennuksen, joka tarjoaa visuaalisen käyttöliittymän kaikkien Spring Boot -sovellusten hallintaan. Löydät sen VS Coden vasemmasta sivupalkista (etsi Spring Boot -kuvake).
Spring Boot Dashboardista voit:
-- Nähdä kaikki käytettävissä olevat Spring Boot -sovellukset työtilassa
-- Käynnistää/pysäyttää sovelluksia yhdellä napsautuksella
+- Näyttää kaikki käytettävissä olevat Spring Boot -sovellukset työtilassa
+- Käynnistää/lopettaa sovelluksia yhden napsautuksen avulla
- Katsoa sovelluslokeja reaaliajassa
-- Seurata sovellusten tilaa
+- Valvoa sovellusten tilaa
-Napsauta pelipainiketta "rag" vierestä käynnistääksesi tämän moduulin, tai käynnistä kaikki moduulit kerralla.
+Klikkaa "rag"-moduulin vieressä olevaa toistopainiketta käynnistääksesi tämän moduulin, tai käynnistä kaikki moduulit kerralla.
-*Tässä kuvakaappauksessa näkyy Spring Boot Dashboard VS Codessa, jossa voit käynnistää, pysäyttää ja valvoa sovelluksia visuaalisesti.*
+*Tämä kuvakaappaus näyttää Spring Boot Dashboardin VS Codessa, jossa voit käynnistää, pysäyttää ja valvoa sovelluksia visuaalisesti.*
-**Vaihtoehto 2: Shell-skriptien käyttäminen**
+**Vaihtoehto 2: Kuoriskriptien käyttäminen**
-Käynnistä kaikki web-sovellukset (moduulit 01-04):
+Käynnistä kaikki web-sovellukset (moduulit 01–04):
**Bash:**
```bash
@@ -309,7 +308,7 @@ cd 03-rag
.\start.ps1
```
-Molemmat skriptit lataavat automaattisesti ympäristömuuttujat juuren `.env`-tiedostosta ja rakentavat JAR-tiedostot tarvittaessa.
+Molemmat skriptit lataavat automaattisesti ympäristömuuttujat juurikansion `.env`-tiedostosta ja kokoavat JAR-tiedostot, jos niitä ei vielä ole.
> **Huom:** Jos haluat rakentaa kaikki moduulit manuaalisesti ennen käynnistystä:
>
@@ -318,16 +317,16 @@ Molemmat skriptit lataavat automaattisesti ympäristömuuttujat juuren `.env`-ti
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
->
+
> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-Avaa selain ja mene osoitteeseen http://localhost:8081.
+Avaa selaimessasi osoite http://localhost:8081.
-**Pysäytys:**
+**Sovelluksen pysäyttäminen:**
**Bash:**
```bash
@@ -343,83 +342,83 @@ cd .. && ./stop-all.sh # Kaikki moduulit
cd ..; .\stop-all.ps1 # Kaikki moduulit
```
-## Sovelluksen käyttäminen
+## Sovelluksen käyttö
-Sovellus tarjoaa verkkokäyttöliittymän dokumenttien lataamiseen ja kysymyksiin.
+Sovellus tarjoaa web-käyttöliittymän dokumenttien lataamiseen ja kysymysten esittämiseen.
-
+
-*Tämä kuvakaappaus näyttää RAG-sovelluksen käyttöliittymän, jossa voit ladata dokumentteja ja esittää kysymyksiä.*
+*Tämä kuvakaappaus näyttää RAG-sovelluksen käyttöliittymän, jossa lataat dokumentteja ja esität kysymyksiä.*
### Dokumentin lataaminen
-Aloita lataamalla dokumentti — TXT-tiedostot toimivat parhaiten testauksessa. Tässä hakemistossa on mukana `sample-document.txt`, joka sisältää tietoja LangChain4j:n ominaisuuksista, RAG:n toteutuksesta ja parhaista käytännöistä — täydellinen testausjärjestelmäksi.
+Aloita lataamalla dokumentti – TXT-tiedostot sopivat testiä varten parhaiten. Tässä hakemistossa on mukana `sample-document.txt`, joka sisältää tietoa LangChain4j-ominaisuuksista, RAG-toteutuksesta ja parhaista käytännöistä – täydellinen järjestelmän testaamiseen.
-Järjestelmä käsittelee dokumenttisi, pilkkoo sen tekstipalasiin ja luo upotukset jokaiselle palaselle. Tämä tapahtuu automaattisesti latauksen yhteydessä.
+Järjestelmä käsittelee dokumenttisi, jakaa sen kappaleisiin ja luo kullekin kappaleelle upotukset. Tämä tapahtuu automaattisesti latauksen yhteydessä.
-### Kysy kysymyksiä
+### Kysymysten esittäminen
-Esitä nyt konkreettisia kysymyksiä dokumentin sisällöstä. Kokeile jotain faktapohjaista, joka on selkeästi dokumentissa mainittu. Järjestelmä hakee relevantit palaset, liittää ne kehotteeseen ja tuottaa vastauksen.
+Esitä nyt tarkkoja kysymyksiä dokumentin sisällöstä. Kokeile faktoja, jotka ovat selvästi mainittu dokumentissa. Järjestelmä hakee osuvat kappaleet, lisää ne kehotteeseen ja tuottaa vastauksen.
-### Tarkista lähdemerkinnät
+### Lähdeviitteiden tarkistus
-Huomaa, että jokainen vastaus sisältää lähdeviitteitä samankaltaisuuspisteillä. Nämä pisteet (0–1) osoittavat, kuinka relevantti kukin pala oli kysymykseesi nähden. Korkeammat pisteet tarkoittavat parempia osumia. Näin voit varmistaa vastauksen vastaavuuden lähdemateriaaliin.
+Huomaa, että jokainen vastaus sisältää lähdelähteet ja samankaltaisuuspisteet. Nämä pisteet (0–1) kertovat, kuinka relevantti kukin kappale oli kysymykseesi nähden. Korkeammat pisteet merkitsevät parempia osumia. Tämä auttaa sinua arvioimaan vastauksen luotettavuutta lähdemateriaalin perusteella.
-
+
-*Tämä kuvakaappaus näyttää kyselytulokset, generoitu vastauksen, lähdemerkinnät ja merkityspisteet jokaiselle haetulle tekstipalalle.*
+*Tässä kuvakaappauksessa näkyvät kyselytulokset, joissa ovat generoitu vastaus, lähdeviitteet ja kunkin haetun kappaleen merkityspisteet.*
### Kokeile erilaisia kysymyksiä
Kokeile erilaisia kysymystyyppejä:
- Tarkat faktat: "Mikä on pääaihe?"
- Vertailut: "Mikä on ero X:n ja Y:n välillä?"
-- Yhteenvedot: "Tiivistä tärkeimmät kohdat Z:stä"
+- Yhteenveto: "Tiivistä tärkeimmät kohdat liittyen Z:ään"
Seuraa, miten merkityspisteet muuttuvat sen mukaan, kuinka hyvin kysymyksesi vastaa dokumentin sisältöä.
## Keskeiset käsitteet
-### Tekstipalojen muodostaminen
+### Kappaleiden jako
-Dokumentit jaetaan 300 tokenin tekstipalasiin, joissa on 30 tokenin päällekkäisyys. Tämä tasapaino varmistaa, että jokaisella palasella on riittävästi kontekstia ollakseen merkityksellinen, mutta ne pysyvät tarpeeksi pieniä, jotta useita palasia mahtuu kehotteeseen.
+Dokumentit jaetaan 300 tokenin kappaleiksi, joissa on 30 tokenin päällekkäisyys. Tämä tasapaino takaa, että jokaisessa kappaleessa on riittävästi kontekstia ollakseen merkityksellinen, mutta kappaleet pysyvät tarpeeksi pieniä, jotta useita kappaleita voi sisällyttää kehotteeseen.
### Samankaltaisuuspisteet
-Jokaisella haetulla tekstipalalla on samankaltaisuuspiste, jonka arvo on 0–1 ja joka osoittaa, kuinka tarkasti se vastaa käyttäjän kysymystä. Alla oleva kaavio visualisoi pistemäärien vaihtelut ja miten järjestelmä käyttää niitä tulosten suodattamiseen:
+Jokainen haettu kappale sisältää samankaltaisuuspisteen välillä 0–1, joka ilmaisee, kuinka hyvin se vastaa käyttäjän kysymystä. Alla oleva kaavio havainnollistaa pistealueita ja miten järjestelmä käyttää niitä tulosten suodattamiseen:
-
+
-*Tämä kaavio näyttää pistemääräalueet 0:sta 1:een, vähimmäiskynnyksen ollessa 0.5, joka suodattaa pois ei-relevantit tekstipalaset.*
+*Tämä kaavio näyttää pistemäärien alueet 0–1, minimikynnyksen 0.5, joka suodattaa pois epäolennaiset kappaleet.*
-Pisteet vaihtelevat välillä 0–1:
-- 0.7–1.0: Erittäin relevantti, täsmää tarkasti
+Pisteet vaihtelevat 0:sta 1:een:
+- 0.7–1.0: Erittäin relevantti, täysi vastaavuus
- 0.5–0.7: Relevantti, hyvä konteksti
- Alle 0.5: Suodatettu pois, liian erilainen
-Järjestelmä hakee vain vähimmäiskynnyksen ylittävät tekstipalaset laadun varmistamiseksi.
+Järjestelmä hakee vain kappaleet, jotka ylittävät minimikynnyksen laadun varmistamiseksi.
-Upotukset toimivat hyvin, kun merkitys ryhmittyy selkeästi, mutta niillä on sokeita pisteitä. Alla oleva kaavio näyttää yleisimmät virhetilanteet — liian isot tekstipalaset tuottavat epäselvät vektorit, liian pienillä paikoilla ei ole kontekstia, epämääräiset termit osoittavat useisiin ryhmiin, ja täsmähaku (tunnisteet, osanumerot) ei toimi lainkaan upotusten kanssa:
+Upotukset toimivat hyvin, kun merkitykset ryhmittyvät selkeästi, mutta niillä on myös heikkouksia. Alla oleva kaavio näyttää yleiset epäonnistumistilanteet — liian suuret kappaleet tuottavat epämääräisiä vektoreita, liian pienet kappaleet eivät anna riittävästi kontekstia, monitulkintaiset termit ohjaavat useisiin ryhmiin, ja täsmähaku (ID:t, osanumero) ei toimi lainkaan upotusten kanssa:
-
+
-*Tämä kaavio näyttää yleisimmät upotusvirheiden tyypit: liian isot tai pienet tekstipalaset, epämääräiset termit, jotka osoittavat useisiin ryhmiin, sekä täsmähaku kuten tunnisteet.*
+*Tämä kaavio näyttää yleiset upotusten epäonnistumistilat: liian isot kappaleet, liian pienet kappaleet, monitulkintaiset termit, ja täsmähaku kuten ID-tunnukset.*
-### Muistissa oleva tallennus
+### Muistiin tallennus
-Tässä moduulissa käytetään yksinkertaisuuden vuoksi muistipohjaista tallennusta. Kun käynnistät sovelluksen uudelleen, ladatut dokumentit katoavat. Tuotantojärjestelmissä käytetään pysyviä vektoritietokantoja, kuten Qdrant tai Azure AI Search.
+Tämä moduuli käyttää yksinkertaisuuden vuoksi muistipohjaista tallennusta. Kun käynnistät sovelluksen uudelleen, ladatut dokumentit katoavat. Tuotantojärjestelmissä käytetään pysyviä vektoripohjaisia tietokantoja kuten Qdrant tai Azure AI Search.
-### Kontekstiikkunan hallinta
+### Konteksti-ikkunan hallinta
-Jokaisella mallilla on maksimi kontekstiikkunan koko. Et voi sisällyttää kaikkia tekstipaloja suurista dokumenteista. Järjestelmä hakee viisi parhaimmin relevanttia tekstipalasta (oletus 5) pitäen kontekstin koossa vastauksen tarkkuuden takaamiseksi.
+Jokaisella mallilla on maksimikonteksti-ikkuna. Et voi sisällyttää jokaista kappaletta isosta dokumentista. Järjestelmä hakee tärkeimmät N relevanttia kappaletta (oletuksena 5) pysyäkseen rajoissa ja tarjotakseen riittävästi kontekstia tarkkojen vastausten tuottamiseen.
-## Milloin RAG on olennaista
+## Milloin RAG on tärkeä
-RAG ei ole aina oikea lähestymistapa. Alla oleva päätöspuu auttaa sinua päättämään, milloin RAG tuo lisäarvoa, ja milloin yksinkertaisemmat lähestymistavat — kuten sisällön suora sisällyttäminen kehotteeseen tai mallin sisäisen tiedon hyödyntäminen — riittävät:
+RAG ei aina ole oikea lähestymistapa. Alla oleva päätöksentekokaavio auttaa sinua arvioimaan, milloin RAG lisää arvoa ja milloin yksinkertaisemmat tavat — kuten sisällön suora lisääminen kehotteeseen tai mallin sisäänrakennetun tiedon käyttäminen — riittävät:
-
+
-*Tämä kaavio näyttää päätöspuun siitä, milloin RAG tuo lisäarvoa verrattuna yksinkertaisempiin menetelmiin.*
+*Tämä kaavio näyttää päätöksenteko-ohjeen siitä, milloin RAG lisää arvoa ja milloin yksinkertaisemmat lähestymistavat riittävät.*
## Seuraavat askeleet
@@ -427,11 +426,11 @@ RAG ei ole aina oikea lähestymistapa. Alla oleva päätöspuu auttaa sinua pä
---
-**Navigointi:** [← Edellinen: Moduuli 02 - Kehoteinsinööri](../02-prompt-engineering/README.md) | [Takaisin pääsivulle](../README.md) | [Seuraava: Moduuli 04 - Työkalut →](../04-tools/README.md)
+**Navigointi:** [← Edellinen: Moduuli 02 - Kehote-Engineerointi](../02-prompt-engineering/README.md) | [Takaisin pääsivulle](../README.md) | [Seuraava: Moduuli 04 - Työkalut →](../04-tools/README.md)
---
**Vastuuvapauslauseke**:
-Tämä asiakirja on käännetty tekoälykäännöspalvelulla [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäiskielellä tulee pitää virallisena lähteenä. Tärkeässä tiedossa suositellaan ammattilaisen tekemää ihmiskäännöstä. Emme ole vastuussa tästä käännöksestä aiheutuvista väärinymmärryksistä tai virhetulkinnoista.
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, otathan huomioon, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäiskielellä on virallinen lähde. Tärkeissä asioissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinymmärryksistä tai tulkinnoista.
\ No newline at end of file
diff --git a/translations/fi/04-tools/README.md b/translations/fi/04-tools/README.md
index 0c8d8222c..bc72acdc8 100644
--- a/translations/fi/04-tools/README.md
+++ b/translations/fi/04-tools/README.md
@@ -1,84 +1,84 @@
-# Moduuli 04: AI-agentit työkaluilla
+# Moduuli 04: Tekoälyagentit työkalujen kanssa
## Sisällysluettelo
-- [Videoesittely](../../../04-tools)
-- [Mitä opit](../../../04-tools)
-- [Esivaatimukset](../../../04-tools)
-- [Ymmärtäminen: AI-agentit työkaluilla](../../../04-tools)
-- [Kuinka työkalukutsut toimivat](../../../04-tools)
- - [Työkalujen määrittelyt](../../../04-tools)
- - [Päätöksenteko](../../../04-tools)
- - [Suoritus](../../../04-tools)
- - [Vastauksen luominen](../../../04-tools)
- - [Arkkitehtuuri: Spring Boot automaattijohtaminen](../../../04-tools)
-- [Työkaluketjutus](../../../04-tools)
-- [Sovelluksen käynnistäminen](../../../04-tools)
-- [Sovelluksen käyttö](../../../04-tools)
- - [Kokeile yksinkertaista työkalun käyttöä](../../../04-tools)
- - [Testaa työkaluketjutusta](../../../04-tools)
- - [Katso keskustelun kulku](../../../04-tools)
- - [Kokeile erilaisia pyyntöjä](../../../04-tools)
-- [Keskeiset käsitteet](../../../04-tools)
- - [ReAct-malli (järjestelmällinen ajattelu ja toiminta)](../../../04-tools)
- - [Työkalujen kuvaukset ovat tärkeitä](../../../04-tools)
- - [Istunnon hallinta](../../../04-tools)
- - [Virheenkäsittely](../../../04-tools)
-- [Saatavilla olevat työkalut](../../../04-tools)
-- [Milloin käyttää työkalupohjaisia agenteja](../../../04-tools)
-- [Työkalut vs RAG](../../../04-tools)
-- [Seuraavat askeleet](../../../04-tools)
-
-## Videoesittely
-
-Katso tämä suora sessio, joka selittää, kuinka aloittaa tämän moduulin kanssa:
-
-
+- [Videokävely](#videokävely)
+- [Mitä opit](#mitä-opit)
+- [Esivaatimukset](#esivaatimukset)
+- [Tekoälyagenttien ymmärtäminen työkaluilla](#tekoälyagenttien-ymmärtäminen-työkaluilla)
+- [Kuinka työkalukutsu toimii](#kuinka-työkalukutsu-toimii)
+ - [Työkalumääritelmät](#työkalumääritelmät)
+ - [Päätöksenteko](#päätöksenteko)
+ - [Suoritus](#suoritus)
+ - [Vastauksen generointi](#vastauksen-generointi)
+ - [Arkkitehtuuri: Spring Bootin automaattinen törmäys](#arkkitehtuuri-spring-bootin-automaattinen-törmäys)
+- [Työkaluketjutus](#työkaluketjutus)
+- [Sovelluksen suorittaminen](#sovelluksen-suorittaminen)
+- [Sovelluksen käyttäminen](#sovelluksen-käyttö)
+ - [Kokeile yksinkertaista työkalun käyttöä](#kokeile-yksinkertaista-työkalun-käyttöä)
+ - [Testaa työkaluketjutusta](#testaa-työkaluketjutusta)
+ - [Näe keskustelun kulku](#katso-keskustelun-kulkua)
+ - [Kokeile erilaisia pyyntöjä](#kokeile-erilaisia-pyyntöjä)
+- [Keskeiset käsitteet](#keskeiset-käsitteet)
+ - [ReAct-malli (Päättely ja toiminta)](#react-malli-päättely-ja-toiminta)
+ - [Työkalujen kuvaukset ovat tärkeitä](#tärkeitä-työkalukuvauksia)
+ - [Istunnon hallinta](#istunnon-hallinta)
+ - [Virheiden käsittely](#virheenkäsittely)
+- [Saatavilla olevat työkalut](#saatavilla-olevat-työkalut)
+- [Milloin käyttää työkalupohjaisia agentteja](#milloin-käyttää-työkalupohjaisia-agentteja)
+- [Työkalut vs RAG](#työkalut-vs-rag)
+- [Seuraavat askeleet](#seuraavat-askeleet)
+
+## Videokävely
+
+Katso tämä live-istunto, joka selittää miten aloittaa tämän moduulin kanssa:
+
+
## Mitä opit
-Tähän mennessä olet oppinut käymään keskusteluja tekoälyn kanssa, rakentamaan kehotteet tehokkaasti ja perustamaan vastaukset asiakirjoihisi. Mutta on vielä yksi perustavanlaatuinen rajoitus: kielimallit pystyvät tuottamaan vain tekstiä. Ne eivät voi tarkistaa säätä, suorittaa laskelmia, hakea tietokannoista tai olla vuorovaikutuksessa ulkoisten järjestelmien kanssa.
+Tähän mennessä olet oppinut käymään keskusteluja tekoälyn kanssa, rakentamaan kehotteita tehokkaasti ja perustamaan vastauksia dokumentteihisi. Mutta on vielä yksi perusrajoitus: kielimallit voivat ainoastaan generoida tekstiä. Ne eivät voi tarkistaa säätä, suorittaa laskutoimituksia, kysyä tietokannoista tai olla vuorovaikutuksessa ulkoisten järjestelmien kanssa.
-Työkalut muuttavat tämän. Antamalla mallille pääsyn funktioihin, joita se voi kutsua, muutat sen tekstintuottajasta agentiksi, joka voi toimia. Malli päättää, milloin se tarvitsee työkalua, mitä työkalua käyttää ja mitä parametreja antaa. Koodisi suorittaa funktion ja palauttaa tuloksen. Malli sisällyttää tämän tuloksen vastaukseensa.
+Työkalut muuttavat tätä. Antamalla mallille pääsyn kutsuttaviin toimintoihin, muutat sen tekstigeneraattorista agentiksi, joka voi toimia. Malli päättää, milloin se tarvitsee työkalun, mitä työkalua käyttää ja mitä parametreja antaa. Koodisi suorittaa funktion ja palauttaa tuloksen. Malli sisällyttää tämän tuloksen vastaukseensa.
## Esivaatimukset
- Suoritettu [Moduuli 01 - Johdanto](../01-introduction/README.md) (Azure OpenAI -resurssit otettu käyttöön)
-- Suositellaan suoritettuja aiempia moduuleja (tässä moduulissa viitataan [RAG-käsitteisiin Moduulista 03](../03-rag/README.md) vertailussa Tools vs RAG)
-- `.env`-tiedosto juurihakemistossa Azure-tunnuksilla (luotu `azd up` -komennolla Moduulissa 01)
+- Edellisten moduulien suorittaminen on suositeltavaa (tämä moduuli viittaa [RAG-konsepteihin Moduulista 03](../03-rag/README.md) Työkalut vs RAG -vertailussa)
+- `.env`-tiedosto juurihakemistossa Azure-tunnuksilla (luotu komennolla `azd up` Moduulissa 01)
-> **Huom:** Jos et ole suorittanut Moduulia 01, seuraa siellä annettuja käyttöönotto-ohjeita ensin.
+> **Huom:** Jos et ole suorittanut Moduulia 01, noudata ensin siellä annettuja asennusohjeita.
-## Ymmärtäminen: AI-agentit työkaluilla
+## Tekoälyagenttien ymmärtäminen työkaluilla
-> **📝 Huom:** Tässä moduulissa termi "agentit" tarkoittaa työkaluja kutsuvilla ominaisuuksilla vahvistettuja tekoälyavustajia. Tämä eroaa **Agentic AI** -malleista (autonomiset agentit, joilla on suunnittelu, muisti ja monivaiheinen päättely), joita käsittelemme [Moduulissa 05: MCP](../05-mcp/README.md).
+> **📝 Huom:** Tässä moduulissa termi "agentit" viittaa tekoälyavustajiin, jotka on parannettu työkalukutsutoiminnoilla. Tämä eroaa **Agentic AI** -malleista (autonomiset agentit, joilla on suunnittelu, muisti ja monivaiheinen päättely), joita käsittelemme [Moduulissa 05: MCP](../05-mcp/README.md).
-Ilman työkaluja kielimalli voi luoda tekstiä vain koulutusdatastaan. Kysy säästä ja sen täytyy arvata. Anna työkalut, niin se voi kutsua sää-API:ta, tehdä laskutoimituksia tai hakea tietokannasta — ja kutoa nämä todelliset tulokset vastaukseensa.
+Ilman työkaluja kielimalli voi ainoastaan generoida tekstiä koulutusdatastaan. Kysy siltä tämänhetkinen sää, niin sen pitää veikata. Anna sille työkaluja, niin se voi kutsua sää-API:a, suorittaa laskutoimituksia tai kysyä tietokannasta — ja kietoa nämä todelliset tulokset vastaukseensa.
-
+
-*Ilman työkaluja malli vain arvaa — työkaluilla se voi kutsua API:ita, suorittaa laskelmia ja palauttaa reaaliaikaista tietoa.*
+*Ilman työkaluja malli vain veikkaa — työkaluilla se voi kutsua API:ita, suorittaa laskuja ja palauttaa reaaliaikaista dataa.*
-AI-agentti työkaluilla noudattaa **ReAct** (Reasoning and Acting) -mallia. Malli ei vain vastaa — se miettii, mitä tarvitsee, toimii kutsumalla työkalua, havaitsee tuloksen ja päättää sitten, toimiiko uudestaan vai antaa lopullisen vastauksen:
+Tekoälyagentti työkaluilla noudattaa **Päättely ja Toiminta (ReAct)** -mallia. Malli ei vain vastaa — se miettii, mitä se tarvitsee, toimii kutsumalla työkalua, tarkkailee tulosta ja päättää, toimiiko uudelleen vai antaa lopullisen vastauksen:
-1. **Päättele** — Agentti analysoi käyttäjän kysymyksen ja määrittää tarvittavat tiedot
-2. **Toimi** — Agentti valitsee oikean työkalun, luo oikeat parametrit ja kutsuu sitä
-3. **Havaitse** — Agentti vastaanottaa työkalun tuloksen ja arvioi sen
-4. **Toista tai Vastaa** — Jos tarvitaan lisää tietoa, agentti kiertää uudestaan; muuten muodostaa luonnollisen kielen vastauksen
+1. **Päättele** — Agentti analysoi käyttäjän kysymyksen ja määrittää, mitä tietoa se tarvitsee
+2. **Toimi** — Agentti valitsee sopivan työkalun, generoi oikeat parametrit ja kutsuu sitä
+3. **Tarkkaile** — Agentti vastaanottaa työkalun tuloksen ja arvioi sen
+4. **Toista tai vastaa** — Jos lisätietoa tarvitaan, agentti palaa aloitukseen; muuten se kokoaa luonnollisen kielen vastauksen
-
+
-*ReAct-sykli — agentti päättää mitä tehdä, toimii kutsumalla työkalua, havaitsee tuloksen ja toistaa kunnes voi antaa lopullisen vastauksen.*
+*ReAct-sykli — agentti päättää mitä tehdä, toimii kutsumalla työkalua, tarkkailee tulosta ja toistaa kunnes se voi antaa lopullisen vastauksen.*
-Tämä tapahtuu automaattisesti. Määrittelet työkalut ja niiden kuvaukset. Malli hoitaa päätöksenteon siitä, milloin ja miten niitä käyttää.
+Tämä tapahtuu automaattisesti. Määrittelet työkalut ja niiden kuvaukset. Malli huolehtii päätöksenteosta siitä, milloin ja miten työkaluja käytetään.
-## Kuinka työkalukutsut toimivat
+## Kuinka työkalukutsu toimii
-### Työkalujen määrittelyt
+### Työkalumääritelmät
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-Määrittelet funktiot selkeine kuvauksineen ja parametri-spesifikaatioineen. Malli näkee nämä kuvaukset järjestelmäkehotteessaan ja ymmärtää, mitä kukin työkalu tekee.
+Määrittelet funktiot selkeillä kuvauksilla ja parametrien määrittelyillä. Malli näkee nämä kuvaukset järjestelmäkehotteessaan ja ymmärtää, mitä kukin työkalu tekee.
```java
@Component
@@ -86,7 +86,7 @@ public class WeatherTool {
@Tool("Get the current weather for a location")
public String getCurrentWeather(@P("Location name") String location) {
- // Säähautasi logiikka
+ // Säätietojen hakulogiikkasi
return "Weather in " + location + ": 22°C, cloudy";
}
}
@@ -96,149 +96,149 @@ public interface Assistant {
String chat(@MemoryId String sessionId, @UserMessage String message);
}
-// Avustaja kytketään automaattisesti Spring Bootin avulla:
-// - ChatModel-palvelu
-// - Kaikki @Tool-menetelmät @Component-luokista
+// Avustaja on automaattisesti yhteydessä Spring Bootilla seuraaviin:
+// - ChatModel bean
+// - Kaikki @Tool-metodit @Component-luokista
// - ChatMemoryProvider istunnon hallintaan
```
-
-Alla oleva kaavio purkaa jokaisen annotaation ja näyttää, miten jokainen osa auttaa tekoälyä ymmärtämään, milloin kutsua työkalua ja mitä argumentteja antaa:
-
+Alla oleva kaavio purkaa jokaiseen annotaatioon ja näyttää, miten kukin osa auttaa tekoälyä ymmärtämään, milloin työkalu kutsutaan ja mitä argumentteja annetaan:
-*Työkalumäärittelyn rakenne — @Tool kertoo tekoälylle, milloin käyttää työkalua, @P kuvaa jokaisen parametrin ja @AiService kytkee kaiken yhteen käynnistyksen yhteydessä.*
+
+
+*Työkalumääritelmän anatomia — @Tool kertoo tekoälylle, milloin käyttää työkalua, @P kuvaa jokaisen parametrin, ja @AiService kytkee kaiken käynnistyksessä.*
> **🤖 Kokeile [GitHub Copilot](https://github.com/features/copilot) Chatin kanssa:** Avaa [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) ja kysy:
-> - "Miten integroidaan oikea säähallinta-API, kuten OpenWeatherMap, testidatan sijaan?"
-> - "Mikä tekee hyvästä työkalukuvauksesta, joka auttaa tekoälyä käyttämään työkalua oikein?"
-> - "Miten käsitellään API-virheitä ja käyttörajoituksia työkalujen toteutuksissa?"
+> - "Kuinka integroisin oikean sää-API:n kuten OpenWeatherMapin sen sijaan, että käyttäisin mallinnettua dataa?"
+> - "Mikä tekee hyvästä työkalukuvauksesta, joka auttaa tekoälyä käyttämään sitä oikein?"
+> - "Miten käsittelen API-virheitä ja rajapintojen käyttörajoituksia työkalujen toteutuksissa?"
### Päätöksenteko
-Kun käyttäjä kysyy "Mikä on sää Seattlella?", malli ei valitse työkalua sattumalta. Se vertaa käyttäjän aikomusta jokaiseen käytettävissä olevaan työkalukuvauskseen, pisteyttää ne osuvuuden mukaan ja valitsee parhaan. Se luo sitten rakenteellisen funktiokutsun oikeilla parametreilla — tässä tapauksessa asettaa `location` arvoksi `"Seattle"`.
+Kun käyttäjä kysyy "Mikä on sää Seattlella?", malli ei valitse työkalua satunnaisesti. Se vertaa käyttäjän aikomusta jokaiseen työkalukuvaan, arvioi ne merkityksellisyyden mukaan ja valitsee parhaan osuman. Se generoi rakenteellisen funktiokutsun oikeilla parametreilla — tässä tapauksessa asettaa `location` arvoksi `"Seattle"`.
-Jos mikään työkalu ei vastaa käyttäjän pyyntöä, malli vastaa omien tietojensa perusteella. Jos useampi työkalu sopii, se valitsee tarkimman.
+Jos mikään työkalu ei sovi käyttäjän pyyntöön, malli vastaa omasta tietämyksestään. Jos useampi työkalu sopii, se valitsee spesifisemmän.
-
+
-*Malli arvioi jokaisen saatavilla olevan työkalun käyttäjän aikomukseen nähden ja valitsee parhaan — siksi selkeiden ja täsmällisten työkalukuvauksien kirjoittaminen on tärkeää.*
+*Malli arvioi jokaisen käytettävissä olevan työkalun käyttäjän aikomusta vasten ja valitsee parhaan — siksi selkeiden ja tarkkojen työkalukuvauksien kirjoittaminen on tärkeää.*
### Suoritus
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-Spring Boot liittää automaattisesti `@AiService` -rajapinnan kaikkiin rekisteröityihin työkaluihin, ja LangChain4j suorittaa työkalukutsut automaattisesti. Taustalla täydellinen työkalukutsu kulkee kuuden vaiheen läpi — käyttäjän luonnollisen kielen kysymyksestä aina takaisin luonnollisen kielen vastaukseen:
+Spring Boot kytkee deklaratiivisen `@AiService`-rajapinnan kaikkiin rekisteröityihin työkaluihin, ja LangChain4j suorittaa työkalukutsut automaattisesti. Kulissien takana täydellinen työkalukutsu kulkee kuuden vaiheen läpi — käyttäjän luonnollisen kielen kysymyksestä luonnollisen kielen vastaukseen:
-
+
-*Loppuun asti kulkeva prosessi — käyttäjä kysyy, malli valitsee työkalun, LangChain4j suorittaa sen ja malli kytkee tuloksen luonnolliseen vastaukseen.*
+*Loppuun asti kulkeva virtaus — käyttäjä kysyy kysymyksen, malli valitsee työkalun, LangChain4j suorittaa sen ja malli liittää tuloksen luonnolliseen vastaukseen.*
-Jos olet ajanut [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) Moduulissa 00, olet nähnyt saman mallin toiminnassa — `Calculator`-työkaluja kutsuttiin samalla tavalla. Alla oleva sekvenssikaavio näyttää tarkalleen, mitä demon aikana tapahtui:
+Kulissien takana `AiServices` pyörittää samaa työkalukutsusilmukkaa mille tahansa työkalulle — tässä yksinkertaisen `Calculator`-esimerkin kautta. Seuraava sekvenssikaavio näyttää tarkalleen, mitä tapahtuu sisäisesti:
-*Työkalukutsun silmukka Quick Start -demosta — `AiServices` lähettää viestisi ja työkalujen skeemat LLM:lle, LLM vastaa funktiokutsulla kuten `add(42, 58)`, LangChain4j suorittaa `Calculator`-metodin paikallisesti ja syöttää tuloksen takaisin lopullista vastausta varten.*
+*Työkalukutsusilmukka — `AiServices` lähettää viestin ja työkaluskeemat LLM:lle, LLM vastaa funktiokutsulla kuten `add(42, 58)`, LangChain4j suorittaa `Calculator`-metodin paikallisesti ja syöttää tuloksen lopulliseen vastaukseen.*
> **🤖 Kokeile [GitHub Copilot](https://github.com/features/copilot) Chatin kanssa:** Avaa [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) ja kysy:
-> - "Miten ReAct-malli toimii ja miksi se on tehokas AI-agenteille?"
+> - "Miten ReAct-malli toimii ja miksi se on tehokas tekoälyagenteille?"
> - "Miten agentti päättää, mitä työkalua käyttää ja missä järjestyksessä?"
-> - "Mitä tapahtuu, jos työkalun suoritus epäonnistuu — miten virheiden käsittely tulisi toteuttaa luotettavasti?"
+> - "Mitä tapahtuu, jos työkalun suoritus epäonnistuu - miten virheet kannattaa käsitellä luotettavasti?"
-### Vastauksen luominen
+### Vastauksen generointi
Malli vastaanottaa säädatan ja muotoilee siitä käyttäjälle luonnollisen kielen vastauksen.
-### Arkkitehtuuri: Spring Boot automaattijohtaminen
+### Arkkitehtuuri: Spring Bootin automaattinen törmäys
-Tämä moduuli käyttää LangChain4j:n Spring Boot -integraatiota deklaratiivisten `@AiService` -rajapintojen kanssa. Käynnistyksen yhteydessä Spring Boot löytää kaikki `@Component`it, jotka sisältävät `@Tool`-metodeja, ChatModel-beanin ja ChatMemoryProviderin — ja liittää ne kaikki yhdeksi `Assistant`-rajapinnaksi ilman boilerplate-koodia.
+Tämä moduuli käyttää LangChain4j:n Spring Boot -integraatiota deklaratiivisilla `@AiService`-rajapinnoilla. Käynnistyksessä Spring Boot löytää kaikki `@Component`-luokat, jotka sisältävät `@Tool`-metodeja, ChatModel-beanin ja ChatMemoryProviderin — ja kytkee ne kaikki yhdeksi `Assistant`-rajapinnaksi ilman boilerplate-koodia.
-
+
-*@AiService-rajapinta sitoo yhteen ChatModelin, työkalukomponentit ja muistinhallinnan — Spring Boot hoitaa kaiken liitännän automaattisesti.*
+*@AiService-rajapinta yhdistää ChatModelin, työkalukomponentit ja muistin tarjoajan — Spring Boot huolehtii kaikesta automaattisesti.*
-Tässä koko pyyntöjen elinkaari sekvenssikaaviona — HTTP-pyynnöstä ohjaimeen, palveluun, automaattijohtimeen, työkalukutsuun ja takaisin:
+Tässä on koko pyyntöelinkaari sekvenssikaaviona — HTTP-pyynnöstä kontrollerin, palvelun ja automaattisesti kytketyn proxyn kautta työkalun suorittamiseen ja takaisin:
-
+
-*Koko Spring Boot -pyynnön elinkaari — HTTP-pyyntö kulkee ohjaimen ja palvelun kautta automaattijohtoisen Assistant-proxyn läpi, joka orkestroi LLM:n ja työkalukutsut automaattisesti.*
+*Kokonainen Spring Boot -pyyntöelinkaari — HTTP-pyyntö kulkee kontrollerin ja palvelun kautta Assistant-proxylle, joka orkestroi LLM:n ja työkalukutsut automaattisesti.*
-Tämän lähestymistavan keskeiset edut:
+Tämän lähestymistavan tärkeimmät edut:
-- **Spring Boot automaattijohtaminen** — ChatModel ja työkalut injektoidaan automaattisesti
-- **@MemoryId-malli** — Istuntopohjainen automaattinen muistinhallinta
-- **Yksi instanssi** — Assistant luodaan kerran ja käytetään uudestaan suorituskyvyn parantamiseksi
-- **Tyyppiturvallinen suoritus** — Java-metodit kutsutaan suoraan tyypinmuunnoksella
-- **Monivuoroinen orkestrointi** — Hallitsee työkaluketjutuksen automaattisesti
-- **Ei boilerplate-koodia** — Ei käsin tehtäviä `AiServices.builder()` -kutsuja tai muistihashtabeja
+- **Spring Boot automaattinen kytkentä** — ChatModel ja työkalut injektoidaan automaattisesti
+- **@MemoryId-malli** — Automaattinen istuntopohjainen muistin hallinta
+- **Yksi instanssi** — Assistant luodaan kerran ja uudelleenkäytetään paremman suorituskyvyn vuoksi
+- **Tyyppiturvallinen suoritus** — Java-metodit kutsutaan suoraan tyypinmuunnoksella
+- **Monivaiheinen orkestrointi** — Käsittelee työkaluketjutuksen automaattisesti
+- **Ei boilerplatea** — Ei manuaalisia `AiServices.builder()` -kutsuja eikä muistihakemistoa
-Vaihtoehtoiset lähestymistavat (käsin tehtävät `AiServices.builder()` -kutsut) vaativat enemmän koodia ja eivät hyödynnä Spring Boot -integraation etuja.
+Vaihtoehtoiset käsitteet (manuaalinen `AiServices.builder()`) vaativat enemmän koodia ja jäävät ilman Spring Boot -integraation etuja.
## Työkaluketjutus
-**Työkaluketjutus** — Työkalupohjaisten agenttien todellinen voima näkyy, kun yksittäinen kysymys vaatii useita työkaluja. Kysy "Mikä on Seattlelän sää fahrenheit-asteina?" ja agentti ketjuttaa automaattisesti kaksi työkalua: ensin se kutsuu `getCurrentWeather` saadakseen lämpötilan celsiusasteina, sitten siirtää arvon `celsiusToFahrenheit`-työkalulle muuntamista varten — kaikki yhdessä keskusteluvuorossa.
+**Työkaluketjutus** — työkalupohjaisten agenttien todellinen voima näkyy, kun yksittäinen kysymys tarvitsee useita työkaluja. Kysy: "Mikä on sää Seattlella Fahrenheit-asteina?" ja agentti ketjuttaa automaattisesti kaksi työkalua: ensin se kutsuu `getCurrentWeather` saadakseen lämpötilan celsiusasteina, ja sitten antaa arvon `celsiusToFahrenheit`-työkalulle muuntamista varten — kaikki yhdessä keskustelukierrossa.
-*Työkaluketjutus toiminnassa — agentti kutsuu ensin getCurrentWeather, sitten ohjaa celsius-tuloksen celsiusToFahrenheit-työkalulle ja tarjoaa yhdistetyn vastauksen.*
+*Työkaluketjutus toiminnassa — agentti kutsuu ensin getCurrentWeatherin, syöttää sitten Celsius-tuloksen celsiusToFahrenheitille ja antaa yhdistetyn vastauksen.*
-**Sulava virheiden käsittely** — Kysy sää jossain kaupungissa, jota ei ole testidatassa. Työkalu palauttaa virheilmoituksen ja tekoäly selittää, ettei voi auttaa sen sijaan, että kaatuisi. Työkalut käsittelevät virheensä turvallisesti. Alla oleva kaavio vertaa kahta lähestymistapaa — asianmukaisella virheenkäsittelyllä agentti sieppaa poikkeuksen ja vastaa avuliaasti, ilman sitä koko sovellus kaatuu:
+**Hallittu virhetilanteet** — Kysy sää jostain kaupungista, joka ei ole määritellyssä mallidatassa. Työkalu palauttaa virheilmoituksen, ja tekoäly selittää, ettei pysty auttamaan sen sijaan, että kaatuisi. Työkalut eivät kaadu, vaan epäonnistuvat turvallisesti. Alla oleva kaavio vertaa kahta lähestymistapaa — asianmukaisella virheenkäsittelyllä agentti nappaa poikkeuksen ja vastaa auttavasti, ilman sitä koko sovellus kaatuu:
-
+
-*Kun työkalu epäonnistuu, agentti sieppaa virheen ja vastaa avuliaalla selityksellä kaatumisen sijaan.*
+*Kun työkalu epäonnistuu, agentti tarttuu virheeseen ja vastaa hyödyllisellä selityksellä kaatumisen sijaan.*
-Tämä tapahtuu yhdellä keskustelukierroksella. Agentti orkestroi useita työkalukutsuja itsenäisesti.
+Tämä tapahtuu yhdellä keskustelukierroksella. Agentti orkestroi useita työkaluja itsenäisesti.
-## Sovelluksen käynnistäminen
+## Sovelluksen suorittaminen
-**Tarkista käyttöönotto:**
+**Varmista käyttöönotto:**
-Varmista, että `.env`-tiedosto on juurihakemistossa ja sisältää Azure-tunnukset (luotu Moduulin 01 aikana). Aja komennot moduulihakemistosta (`04-tools/`):
+Varmista, että `.env`-tiedosto on juurikansiossa Azure-tunnuksilla (luotu Moduulissa 01). Suorita tämä moduulihakemistosta (`04-tools/`):
-**Bash:**
+**Bash:**
```bash
cat ../.env # Tulisi näyttää AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
Get-Content ..\.env # Tulisi näyttää AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
-**Käynnistä sovellus:**
-> **Huom:** Jos olet jo käynnistänyt kaikki sovellukset `./start-all.sh` -skriptillä juurihakemistosta (kuten Moduulin 01 ohjeissa), tämä moduuli on jo käynnissä portissa 8084. Voit ohittaa alla olevat käynnistyskomennot ja mennä suoraan osoitteeseen http://localhost:8084.
+**Aloita sovellus:**
+
+> **Huom:** Jos olet jo käynnistänyt kaikki sovellukset komennolla `./start-all.sh` juurihakemistosta (kuten Moduulissa 01 kuvattu), tämä moduuli on jo käynnissä portissa 8084. Voit jättää alla olevat käynnistyskomennot väliin ja mennä suoraan osoitteeseen http://localhost:8084.
-**Vaihtoehto 1: Spring Boot Dashboardin käyttö (suositeltu VS Code -käyttäjille)**
+**Vaihtoehto 1: Spring Boot Dashboardin käyttö (Suositeltu VS Code -käyttäjille)**
-Kehityskontti sisältää Spring Boot Dashboard -laajennuksen, joka tarjoaa visuaalisen käyttöliittymän kaikkien Spring Boot -sovellusten hallintaan. Löydät sen VS Coden vasemman laidan Activity Bar -palkista (etsi Spring Boot -kuvake).
+Kehityssäilössä on mukana Spring Boot Dashboard -laajennus, joka tarjoaa visuaalisen käyttöliittymän hallita kaikkia Spring Boot -sovelluksia. Löydät sen vasemman reunan Activity Barista (etsi Spring Boot -ikonia).
-Spring Boot Dashboardista voit:
+Spring Boot Dashboardista voit:
- Näyttää kaikki käytettävissä olevat Spring Boot -sovellukset työtilassa
-- Käynnistää/pysäyttää sovellukset yhdellä napsautuksella
-- Katsoa sovelluslokeja reaaliaikaisesti
-- Monitoroida sovelluksen tilaa
-Aloita tämä moduuli yksinkertaisesti napsauttamalla "tools"-kohdan vieressä olevaa toistopainiketta tai käynnistä kaikki moduulit kerralla.
+- Käynnistää/pysäyttää sovelluksia yhdellä klikkauksella
+- Tarkastella sovelluslokeja reaaliajassa
+- Valvoa sovelluksen tilaa
-Tältä Spring Boot Dashboard näyttää VS Codessa:
+Napsauta yksinkertaisesti soittonappia "tools" kohdalla käynnistääksesi tämän moduulin tai käynnistä kaikki moduulit kerralla.
-
+Tältä Spring Boot Dashboard näyttää VS Codessa:
+
-*Spring Boot Dashboard VS Codessa — käynnistä, pysäytä ja valvo kaikkia moduuleja yhdestä paikasta*
+*Spring Boot -kojelauta VS Codessa — käynnistä, pysäytä ja valvo kaikkia moduuleja yhdestä paikasta*
-**Vaihtoehto 2: Shell-komentosarjojen käyttö**
+**Vaihtoehto 2: Kuoriskriptien käyttö**
Käynnistä kaikki web-sovellukset (moduulit 01-04):
**Bash:**
```bash
-cd .. # Juurihakemistosta
+cd .. # Juurikansiosta
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # Juurihakemistosta
+cd .. # Juurikansiosta
.\start-all.ps1
```
@@ -256,7 +256,7 @@ cd 04-tools
.\start.ps1
```
-Molemmat skriptit lataavat automaattisesti ympäristömuuttujat juurikansion `.env`-tiedostosta ja rakentavat JAR-tiedostot, jos ne eivät ole olemassa.
+Molemmat skriptit lataavat automaattisesti ympäristömuuttujat juuren `.env`-tiedostosta ja rakentavat JAR-tiedostot, jos niitä ei ole olemassa.
> **Huom:** Jos haluat rakentaa kaikki moduulit manuaalisesti ennen käynnistämistä:
>
@@ -265,111 +265,111 @@ Molemmat skriptit lataavat automaattisesti ympäristömuuttujat juurikansion `.e
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-
+>
> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-Avaa selaimessa osoite http://localhost:8084.
+Avaa selaimessasi http://localhost:8084.
-**Pysäyttääksesi:**
+**Pysäyttämiseksi:**
**Bash:**
```bash
-./stop.sh # Tämä moduuli vain
+./stop.sh # Vain tämä moduuli
# Tai
cd .. && ./stop-all.sh # Kaikki moduulit
```
**PowerShell:**
```powershell
-.\stop.ps1 # Tämä moduuli vain
+.\stop.ps1 # Vain tämä moduuli
# Tai
cd ..; .\stop-all.ps1 # Kaikki moduulit
```
## Sovelluksen käyttö
-Sovellus tarjoaa selainkäyttöliittymän, jonka kautta voit olla vuorovaikutuksessa tekoälyagentin kanssa, jolla on pääsy sää- ja lämpötilamuuntotyökaluihin. Tältä käyttöliittymä näyttää — se sisältää pikaesimerkit ja chat-paneelin pyyntöjen lähettämiseen:
+Sovellus tarjoaa web-käyttöliittymän, jossa voit olla vuorovaikutuksessa tekoälyagentin kanssa, jolla on pääsy sää- ja lämpötilamuunnostyökaluihin. Tässä miltä käyttöliittymä näyttää — se sisältää pikaesimerkkejä ja chat-paneelin pyynnöille:
-
+
-*AI Agent Tools -käyttöliittymä - pikaesimerkkejä ja chat-käyttöliittymä työkalujen käyttöön*
+*Tekoälyagentin työkalujen käyttöliittymä – pikaesimerkkejä ja chat-käyttöliittymä työkalujen kanssa vuorovaikutukseen*
### Kokeile yksinkertaista työkalun käyttöä
-Aloita suoraviivaisella pyynnöllä: "Muuta 100 astetta Fahrenheitista Celsiukseksi". Agentti tunnistaa, että tarvitsee lämpötilamuuntotyökalun, kutsuu sitä oikeilla parametreilla ja palauttaa tuloksen. Huomaa, kuinka luonnolliselta tämä tuntuu — et määritellyt, mitä työkalua käyttää tai miten sitä kutsutaan.
+Aloita suoraviivaisella pyynnöllä: "Muunna 100 astetta Fahrenheitia Celsius-asteiksi". Agentti tunnistaa, että se tarvitsee lämpötilamuunnostyökalua, kutsuu sitä oikeilla parametreilla ja palauttaa tuloksen. Huomaa miten luonnolliselta tämä tuntuu – sinun ei tarvinnut määritellä, mitä työkalua tai miten sitä käyttää.
-### Testaa työkalujen ketjutusta
+### Testaa työkaluketjutusta
-Kokeile nyt jotain monimutkaisempaa: "Mikä on sää Seattlessa ja muuta se Fahrenheit-asteiksi?" Katso, kuinka agentti toimii tämän läpi vaiheittain. Se hakee ensin sään (joka palauttaa Celsius-asteet), tunnistaa, että tarvitsee muuntaa Fahrenheitiksi, kutsuu muunnostyökalua ja yhdistää molemmat tulokset yhdeksi vastaukseksi.
+Kokeile nyt monimutkaisempaa: "Mikä on sää Seattlessa ja muunna se Fahrenheit-asteiksi?" Katso, miten agentti toimii vaiheittain. Se ensin hakee sään (joka palauttaa Celsius-asteet), tunnistaa tarpeen muuntaa Fahrenheitiksi, kutsuu muunnostyökalua ja yhdistää molemmat tulokset yhdeksi vastaukseksi.
-### Katso keskustelun kulku
+### Katso keskustelun kulkua
-Chat-käyttöliittymä säilyttää keskusteluhistorian, jolloin voit käydä monivuorovaikutteisia keskusteluja. Näet kaikki aiemmat kyselyt ja vastaukset, mikä helpottaa keskustelun seuraamista ja ymmärtämään, miten agentti rakentaa kontekstia useiden vaihdosten aikana.
+Chat-käyttöliittymä ylläpitää keskusteluhistoriaa, jolloin voit käydä monivaiheisia vuorovaikutuksia. Näet kaikki aiemmat kyselyt ja vastaukset, mikä helpottaa keskustelun seuraamista ja ymmärtämään, miten agentti rakentaa kontekstia useiden vaihdosten aikana.
-
+
-*Monivuoroinen keskustelu, jossa tehdään yksinkertaisia muunnoksia, säähaut ja työkaluketjutuksia*
+*Monivaiheinen keskustelu, jossa näkyy yksinkertaisia muunnoksia, säähaut ja työkaluketjutus*
### Kokeile erilaisia pyyntöjä
Kokeile erilaisia yhdistelmiä:
-- Säätiedotukset: "Mikä on sää Tokiossa?"
-- Lämpötilamuunnokset: "Mikä on 25°C Kelvineinä?"
-- Yhdistetyt kyselyt: "Tarkista sää Pariisissa ja kerro, onko lämpötila yli 20°C"
+- Säähaut: "Millainen sää on Tokiossa?"
+- Lämpötilamuunnokset: "Mikä on 25°C Kelvineissä?"
+- Yhdistelmätiedustelut: "Tarkista sään tila Pariisissa ja kerro, onko siellä yli 20°C"
-Huomaa, kuinka agentti tulkitsee luonnollista kieltä ja mapittaa sen sopiviksi työkalukutsuiksi.
+Huomaa, miten agentti tulkitsee luonnollista kieltä ja yhdistää sen sopiviin työkalukutsuihin.
## Keskeiset käsitteet
-### ReAct-malli (Päättely ja toiminta)
+### ReAct-malli (Päättely ja Toiminta)
-Agentti vuorottelee päättelyn (päätös, mitä tehdä) ja toimimisen (työkalujen käyttö) välillä. Tämä malli mahdollistaa autonomisen ongelmanratkaisun pelkän ohjeiden seuraamisen sijaan.
+Agentti vuorottelee päättelyn (päätösten tekemisen) ja toiminnan (työkalujen käytön) välillä. Tämä malli mahdollistaa itsenäisen ongelmanratkaisun pelkkien käskyihin vastaamisen sijaan.
-### Työkalujen kuvauksilla on merkitystä
+### Tärkeitä työkalukuvauksia
-Työkalukuvauksesi laatu vaikuttaa suoraan siihen, kuinka hyvin agentti osaa käyttää niitä. Selkeät ja täsmälliset kuvaukset auttavat mallia ymmärtämään, milloin ja miten kutakin työkalua kutsutaan.
+Työkalukuvauksiesi laatu vaikuttaa suoraan siihen, miten hyvin agentti käyttää työkaluja. Selkeät, täsmälliset kuvaukset auttavat mallia ymmärtämään, milloin ja miten kutakin työkalua kutsutaan.
### Istunnon hallinta
-`@MemoryId`-annotaatio mahdollistaa automaattisen istuntokohtaisen muistinhallinnan. Jokainen istuntotunnus saa oman `ChatMemory`-instanssin, jota hallinnoi `ChatMemoryProvider`-bean, joten useat käyttäjät voivat olla vuorovaikutuksessa agentin kanssa samanaikaisesti ilman, että keskustelut sekoittuvat. Seuraava kaavio näyttää, miten useat käyttäjät ohjataan erillisiin muistivarastoihin istuntotunnustensa perusteella:
+`@MemoryId`-annotaatio mahdollistaa automaattisen istuntokohtaisen muistinhallinnan. Jokainen istunto saa oman `ChatMemory`-instanssinsa, jota hallinnoi `ChatMemoryProvider`-bean, joten useat käyttäjät voivat olla vuorovaikutuksessa agentin kanssa samanaikaisesti ilman, että heidän keskustelunsa sekoittuvat. Seuraava kaavio näyttää, miten käyttäjät ohjataan eristyneisiin muistivarastoihin istunnon perusteella:
-
+
-*Jokainen istuntotunnus vastaa erillistä keskusteluhistoriaa — käyttäjät eivät näe toistensa viestejä.*
+*Jokainen istunto-ID ohjautuu erilliseen keskusteluhistoriaan — käyttäjät eivät näe toistensa viestejä.*
### Virheenkäsittely
-Työkalut voivat epäonnistua — API:t aikakatkaisevat, parametrit voivat olla virheellisiä, ulkoiset palvelut voivat olla alas. Tuotantoagentit tarvitsevat virheenkäsittelyn, jotta malli voi selittää ongelmat tai yrittää vaihtoehtoja sen sijaan, että koko sovellus kaatuu. Kun työkalu heittää poikkeuksen, LangChain4j sieppaa sen ja välittää virheilmoituksen takaisin mallille, joka voi sitten selittää ongelman luonnollisella kielellä.
+Työkalut voivat epäonnistua — API-yhteys voi aikakatketa, parametrit saattavat olla virheellisiä, ulkoiset palvelut voivat olla poissa käytöstä. Tuotantoagenttien tulee huolehtia virheistä, jotta malli voi selittää ongelmat tai kokeilla vaihtoehtoja sen sijaan, että koko sovellus kaatuisi. Kun työkalu heittää poikkeuksen, LangChain4j poimii sen ja syöttää virheilmoituksen takaisin mallille, joka osaa sitten selittää ongelman luonnollisella kielellä.
## Saatavilla olevat työkalut
-Alla oleva kaavio näyttää laajan työkaluekosysteemin, jonka voit rakentaa. Tämä moduuli demonstroi sää- ja lämpötilatyökaluja, mutta sama `@Tool`-malli toimii minkä tahansa Java-metodin kanssa — tietokantakyselyistä maksuliikenteeseen.
+Alla oleva kaavio esittelee laajan kokoelman työkaluja, joita voit rakentaa. Tämä moduuli esittelee sää- ja lämpötilatyökaluja, mutta sama `@Tool`-malli toimii minkä tahansa Java-metodin kanssa — oli kyse sitten tietokantakyselyistä tai maksun käsittelystä.
-
+
-*Mikä tahansa `@Tool`-annotaatiolla varustettu Java-metodi tulee saataville tekoälylle — malli laajenee tietokantoihin, API:ihin, sähköposteihin, tiedostotoimintoihin ja muuhun.*
+*Mikä tahansa Java-metodi, joka on merkitty @Toolilla, tulee käyttöön tekoälylle — malli laajenee tietokantoihin, rajapintoihin, sähköposteihin, tiedostotoimintoihin ja muuhun.*
-## Milloin käyttää työkalupohjaisia agenteja
+## Milloin käyttää työkalupohjaisia agentteja
-Kaikki pyynnöt eivät tarvitse työkaluja. Päätös perustuu siihen, tarvitseeko tekoäly olla vuorovaikutuksessa ulkoisten järjestelmien kanssa vai voiko se vastata omasta tiedostaan. Seuraava opas tiivistää, milloin työkalut tuovat lisäarvoa ja milloin ne ovat tarpeettomia:
+Kaikki pyynnöt eivät vaadi työkaluja. Päätös pohjautuu siihen, tarvitseeko tekoäly olla vuorovaikutuksessa ulkoisten järjestelmien kanssa vai pystyykö se vastaamaan omasta tiedostaan. Seuraava opas tiivistää, milloin työkalut tuovat lisäarvoa ja milloin ne ovat tarpeettomia:
-
+
-*Nopea päätösopas — työkalut ovat reaaliaikaisiin tietoihin, laskelmiin ja toimintoihin; yleistä tietoa ja luovia tehtäviä varten niitä ei tarvita.*
+*Nopea päätösopas — työkaluja käytetään reaaliaikaiseen dataan, laskentoihin ja toimenpiteisiin; yleinen tieto ja luovat tehtävät eivät niitä tarvitse.*
## Työkalut vs RAG
-Moduulit 03 ja 04 laajentavat tekoälyn kykyjä, mutta pohjimmiltaan eri tavoin. RAG antaa mallille pääsyn **tietoon** hakemalla dokumentteja. Työkalut antavat mallille kyvyn suorittaa **toimintoja** kutsumalla funktioita. Alla oleva kaavio vertaa näitä kahta lähestymistapaa rinnakkain — miten kukin työnkulku toimii ja mitkä ovat niiden kompromissit:
+Moduulit 03 ja 04 laajentavat tekoälyn kykyjä, mutta perustavanlaatuisesti eri tavalla. RAG antaa mallille pääsyn **tietoon** hakemalla dokumentteja. Työkalut antavat mallille kyvyn suorittaa **toimia** kutsumalla funktioita. Alla oleva kaavio vertaa näitä kahta lähestymistapaa rinnakkain — miten kummankin työnkulku toimii ja niiden välillä tehdyt kompromissit:
-
+
-*RAG hakee tietoa staattisista dokumenteista — Työkalut suorittavat toimia ja hakevat dynaamista, reaaliaikaista dataa. Monet tuotantojärjestelmät yhdistävät molemmat.*
+*RAG hakee tietoa staattisista dokumenteista — Työkalut suorittavat toimintoja ja hakevat dynaamista, reaaliaikaista dataa. Monet tuotantojärjestelmät yhdistävät molemmat.*
-Käytännössä monet tuotantojärjestelmät yhdistävät molemmat lähestymistavat: RAG vahvistamaan vastaukset dokumentaatiollasi ja Työkalut live-datan hakemiseen tai operaatioiden suorittamiseen.
+Käytännössä monet tuotantojärjestelmät yhdistävät molemmat lähestymistavat: RAG vastauksille dokumentaatioon perustuen ja Työkalut live-datan hakemiseen tai toimintojen suorittamiseen.
## Seuraavat askeleet
@@ -383,5 +383,5 @@ Käytännössä monet tuotantojärjestelmät yhdistävät molemmat lähestymista
**Vastuuvapauslauseke**:
-Tämä asiakirja on käännetty tekoälypohjaisella käännöspalvelulla [Co-op Translator](https://github.com/Azure/co-op-translator). Pyrimme tarkkuuteen, mutta ota huomioon, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen omalla kielellä tulee katsoa viralliseksi lähteeksi. Tärkeissä asioissa suositellaan ammattimaista ihmiskääntäjää. Emme ole vastuussa tämän käännöksen käytöstä johtuvista väärinymmärryksistä tai virhetulkintojen seurauksista.
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, otathan huomioon, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäiskielellä on virallinen lähde. Tärkeissä asioissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinymmärryksistä tai tulkinnoista.
\ No newline at end of file
diff --git a/translations/fi/README.md b/translations/fi/README.md
index a0e1c0e67..d71ccbb7b 100644
--- a/translations/fi/README.md
+++ b/translations/fi/README.md
@@ -1,19 +1,19 @@
-# LangChain4j aloittelijoille
+# LangChain4j Aloittelijoille
Kurssi tekoälysovellusten rakentamiseen LangChain4j:llä ja Azure OpenAI GPT-5.2:lla, peruschatista tekoälyagentteihin.
### 🌐 Monikielinen tuki
-#### Tuettu GitHub Actionin kautta (automaattinen ja aina ajan tasalla)
+#### Tuettu GitHub Actionin kautta (Automaattinen ja aina ajan tasalla)
-[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](./README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
+[Arabia](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgaria](../bg/README.md) | [Burma (Myanmar)](../my/README.md) | [Kiina (yksinkertaistettu)](../zh-CN/README.md) | [Kiina (perinteinen, Hong Kong)](../zh-HK/README.md) | [Kiina (perinteinen, Macao)](../zh-MO/README.md) | [Kiina (perinteinen, Taiwan)](../zh-TW/README.md) | [Kroatia](../hr/README.md) | [Tšekki](../cs/README.md) | [Tanska](../da/README.md) | [Hollanti](../nl/README.md) | [Viro](../et/README.md) | [Suomi](./README.md) | [Ranska](../fr/README.md) | [Saksa](../de/README.md) | [Kreikka](../el/README.md) | [Heprea](../he/README.md) | [Hindi](../hi/README.md) | [Unkari](../hu/README.md) | [Indonesia](../id/README.md) | [Italia](../it/README.md) | [Japani](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korea](../ko/README.md) | [Liettua](../lt/README.md) | [Malaiji](../ms/README.md) | [Malajalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norja](../no/README.md) | [Persia (Farsi)](../fa/README.md) | [Puola](../pl/README.md) | [Portugali (Brasilia)](../pt-BR/README.md) | [Portugali (Portugali)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romania](../ro/README.md) | [Venäjä](../ru/README.md) | [Serbia (kyrillinen)](../sr/README.md) | [Slovakki](../sk/README.md) | [Sloveeni](../sl/README.md) | [Espanja](../es/README.md) | [Swahili](../sw/README.md) | [Ruotsi](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamili](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkki](../tr/README.md) | [Ukraina](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnam](../vi/README.md)
-> **Haluatko kloonata paikallisesti?**
+> **Haluatko mieluummin kloonata paikallisesti?**
>
-> Tämä repositorio sisältää yli 50 kielen käännöksiä, mikä kasvattaa merkittävästi lataustiedostojen kokoa. Kun haluat kloonata ilman käännöksiä, käytä sparse checkout -toimintoa:
+> Tämä arkisto sisältää yli 50 käännöstä, jotka lisäävät merkittävästi latauskokoa. Jos haluat kloonata ilman käännöksiä, käytä sparse checkout -toimintoa:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -29,59 +29,58 @@ Kurssi tekoälysovellusten rakentamiseen LangChain4j:llä ja Azure OpenAI GPT-5.
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> Näin saat kaiken tarvitsemasi kurssin suorittamiseen huomattavasti nopeammin.
+> Näin saat kaiken tarvitsemasi kurssin suorittamiseen paljon nopeammalla latauksella.
## Sisällysluettelo
-1. [Pika-aloitus](00-quick-start/README.md) - Aloita LangChain4j:n kanssa
-2. [Johdanto](01-introduction/README.md) - Opiskele LangChain4j:n perusteet
-3. [Prompt-tekniikat](02-prompt-engineering/README.md) - Hallitse tehokas promttien suunnittelu
-4. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Rakenna älykkäitä tietopohjaisia järjestelmiä
-5. [Työkalut](04-tools/README.md) - Integroi ulkoisia työkaluja ja yksinkertaisia avustajia
-6. [MCP (Model Context Protocol)](05-mcp/README.md) - Työskentele Model Context Protocolin (MCP) ja agenttimoduulien kanssa
+1. [Johdanto](01-introduction/README.md) - Opi LangChain4j:n perusteet
+2. [Prompt-suunnittelu](02-prompt-engineering/README.md) - Hallitse tehokas kehotteen suunnittelu
+3. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Rakenna älykkäitä tietopohjaisia järjestelmiä
+4. [Työkalut](04-tools/README.md) - Integroi ulkoiset työkalut ja yksinkertaiset avustajat
+5. [MCP (Model Context Protocol)](05-mcp/README.md) - Työskentele Model Context Protocolin (MCP) ja Agentic-moduulien kanssa
-### Video-opastukset
+### Videokävelyt läpi
-Jokaisella moduulilla on mukana seurantaistunto, jossa käymme läpi käsitteet ja koodin vaihe vaiheelta.
+Jokaisella moduulilla on mukana live-istunto, jossa käymme läpi käsitteet ja koodin askel askeleelta.
| Moduuli | Video |
|--------|-------|
-| 01 - Johdanto | [Aloitus LangChain4j:n kanssa](https://www.youtube.com/live/nl_troDm8rQ) |
-| 02 - Prompt-tekniikat | [Prompt-tekniikat LangChain4j:llä](https://www.youtube.com/live/PJ6aBaE6bog) |
+| 01 - Johdanto | [LangChain4j:n aloittaminen](https://www.youtube.com/live/nl_troDm8rQ) |
+| 02 - Prompt-suunnittelu | [Prompt-suunnittelu LangChain4j:llä](https://www.youtube.com/live/PJ6aBaE6bog) |
| 03 - RAG | [RAG LangChain4j:llä](https://www.youtube.com/watch?v=_olq75ZH_eY) |
-| 04 - Työkalut & 05 - MCP | [Tekoälyagentit työkalujen ja MCP:n kanssa](https://www.youtube.com/watch?v=O_J30kZc0rw) |
+| 04 - Työkalut & 05 - MCP | [Tekoälyagentit työkaluilla ja MCP:llä](https://www.youtube.com/watch?v=O_J30kZc0rw) |
---
## Oppimispolku
-**Uusi LangChain4j:ssä?** Tutustu [Sanastoon](docs/GLOSSARY.md) saadaksesi määritelmiä tärkeistä termeistä ja käsitteistä.
+**Uusi LangChain4j:ssä?** Tutustu [Sanastoon](docs/GLOSSARY.md) avaintermeihin ja käsitteisiin.
-> **Pika-aloitus**
+> **Pikakäynnistys**
-1. Tee fork tälle repositoriolle GitHub-tilillesi
-2. Klikkaa **Code** → **Codespaces**-välilehti → **...** → **New with options...**
-3. Käytä oletuksia – tämä valitsee tämän kurssin kehitysyhteisön konttiympäristön
-4. Klikkaa **Create codespace**
-5. Odota 5–10 minuuttia ympäristön valmistumiseen
-6. Siirry suoraan kohtaan [Pika-aloitus](./00-quick-start/README.md) aloittaaksesi!
+1. Forkkaa tämä arkisto GitHub-tilillesi
+2. Klikkaa **Code** → **Codespaces** -välilehti → **...** → **Uusi vaihtoehdoilla...**
+3. Käytä oletuksia – tämä valitsee tälle kurssille luodun kehityssäiliön
+4. Klikkaa **Luo codespace**
+5. Odota 5–10 minuuttia ympäristön valmistumista
+6. Siirry suoraan [Johdantoon](./01-introduction/README.md) ja aloita!
-Kun moduulit on suoritettu, tutustu [Testausoppaaseen](docs/TESTING.md) nähdäksesi LangChain4j:n testauskonseptit käytännössä.
+Moduulien suorittamisen jälkeen tutustu [Testausoppaaseen](docs/TESTING.md) nähdäksesi LangChain4j:n testauskäsitteet käytännössä.
-> **Huom:** Tämä koulutus käyttää sekä GitHub malleja että Azure OpenAI:ta. [Pika-aloitus](00-quick-start/README.md) moduuli käyttää GitHub malleja (ei tarvita Azure-tiliä), kun taas moduulit 1–5 käyttävät Azure OpenAI:ta. Aloita [MAKSUTTOMALLA Azure-tilillä](https://aka.ms/azure-free-account), jos sinulla ei vielä ole tiliä.
+> **Huom:** Tämä koulutus käyttää Azure OpenAI:a. Aloita ilmaisella [Azure-tilillä](https://aka.ms/azure-free-account), jos sinulla ei vielä ole sellaista.
## Oppiminen GitHub Copilotin kanssa
-Aloita koodaaminen nopeasti avaamalla tämä projekti GitHub Codespacessa tai paikallisessa IDE:ssä mukana tulevalla devcontainerilla. Tässä kurssissa käytetyssä devcontainerissa on esikonfiguroitu GitHub Copilot tekoälypohjaiseen pariohjelmointiin.
+Pääset nopeasti koodauksen alkuun avaamalla tämän projektin GitHub Codespacessa tai paikallisessa IDE:ssä annetulla devcontainerilla. Tässä kurssissa käytetty devcontainer on valmiiksi konfiguroitu GitHub Copilotille tekoälypariohjelmointia varten.
-Jokaisessa koodiesimerkissä on ehdotettuja kysymyksiä, joita voit esittää GitHub Copilotille syventääksesi ymmärrystäsi. Etsi 💡/🤖 kehotteita:
+Jokainen koodiesimerkki sisältää ehdotettuja kysymyksiä, joita voit esittää GitHub Copilotille saadaksesi syvällisempää ymmärrystä. Etsi 💡/🤖 kehotteita:
-- **Java-tiedostojen otsikoissa** - Esimerkkikohtaisia kysymyksiä
-- **Moduulien README-tiedostoissa** - Tutkimuskysymyksiä koodiesimerkkien jälkeen
+- **Java-tiedostojen ylätunnisteista** – jokaiselle esimerkkikoodille spesifisiä kysymyksiä
+- **Moduulien README:stä** – tutkimuskysymyksiä koodiesimerkkien jälkeen
-**Käyttöohje:** Avaa mikä tahansa kooditiedosto ja kysy Copilotilta ehdotettuja kysymyksiä. Se tuntee koko koodikannan, ja voi selittää, laajentaa ja ehdottaa vaihtoehtoja.
+**Käyttöohje:** Avaa mikä tahansa kooditiedosto ja esitä Copilotille ehdotetut kysymykset. Se näkee koko koodipohjan ja voi selittää, laajentaa sekä ehdottaa vaihtoehtoja.
Haluatko oppia lisää? Tutustu [Copilot tekoälypariohjelmointiin](https://aka.ms/GitHubCopilotAI).
@@ -90,42 +89,43 @@ Haluatko oppia lisää? Tutustu [Copilot tekoälypariohjelmointiin](https://aka.
### LangChain
-[](https://aka.ms/langchain4j-for-beginners)
-[](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
-[](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin)
+[](https://aka.ms/langchain4j-for-beginners)
+[](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
+[](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin)
---
-### Azure / Edge / MCP / Agents
-[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
+### Azure / Edge / MCP / Agentit
+[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
---
-### Generative AI Series
-[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
-[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
-[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
-[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
+### Generatiivinen tekoäly -sarja
+[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
+[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
+[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
+[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
---
-### Keskeinen opiskelu
-[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
-[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
+### Keskeinen oppiminen
+[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
+
+[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
### Copilot-sarja
-[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
## Apua
@@ -134,17 +134,17 @@ Jos jäät jumiin tai sinulla on kysyttävää tekoälysovellusten rakentamisest
[](https://aka.ms/foundry/discord)
-Jos sinulla on tuotepalautetta tai kohtaat virheitä rakentamisen aikana, käy:
+Jos sinulla on tuotepalautetta tai rakennusvirheitä, käy:
[](https://aka.ms/foundry/forum)
## Lisenssi
-MIT-lisenssi – Katso lisätietoja [LICENSE](../../LICENSE) tiedostosta.
+MIT-lisenssi - Katso lisätiedot tiedostosta [LICENSE](../../LICENSE).
---
-**Vastuuvapauslauseke**:
-Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Pyrimme tarkkuuteen, mutta ota huomioon, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäiskielellä tulee pitää auktoriteettisena lähteenä. Tärkeiden tietojen osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinkäsityksistä tai virhetulkinnoista.
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, otathan huomioon, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäiskielellä on virallinen lähde. Tärkeissä asioissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinymmärryksistä tai tulkinnoista.
\ No newline at end of file
diff --git a/translations/fi/docs/GLOSSARY.md b/translations/fi/docs/GLOSSARY.md
index 742574d5c..cdfb95a98 100644
--- a/translations/fi/docs/GLOSSARY.md
+++ b/translations/fi/docs/GLOSSARY.md
@@ -2,231 +2,229 @@
## Sisällysluettelo
-- [Peruskäsitteet](../../../docs)
-- [LangChain4j-komponentit](../../../docs)
-- [AI/ML-käsitteet](../../../docs)
-- [Suojausmekanismit](../../../docs)
-- [Prompt-suunnittelu](../../../docs)
-- [RAG (hakupohjainen generointi)](../../../docs)
-- [Agentit ja työkalut](../../../docs)
-- [Agenttimoduuli](../../../docs)
-- [Mallin kontekstiprotokolla (MCP)](../../../docs)
-- [Azure-palvelut](../../../docs)
-- [Testaus ja kehitys](../../../docs)
-
-Nopea viite kursilla käytetyille termeille ja käsitteille.
+- [Peruskäsitteet](#peruskäsitteet)
+- [LangChain4j Komponentit](#langchain4j-komponentit)
+- [AI/ML Käsitteet](#aiml-käsitteet)
+- [Suojakaiteet](#suojakaiteet)
+- [Prompt-suunnittelu](#prompt-engineering---module-02)
+- [RAG (Hakua Tehostettu Generointi)](#rag-retrieval-augmented-generation---module-03)
+- [Agentit ja Työkalut](#agents-and-tools---module-04)
+- [Agenttien Moduuli](#agentic-module---module-05)
+- [Mallin Kontekstiprotokolla (MCP)](#model-context-protocol-mcp---module-05)
+- [Azure-palvelut](#azure-services---module-01)
+- [Testaus ja Kehitys](#testing-and-development---testing-guide)
+
+Pikaviite kurssin aikana käytettyihin termeihin ja käsitteisiin.
## Peruskäsitteet
-**AI Agentti** – Järjestelmä, joka käyttää tekoälyä järkeilyyn ja toimintaan itsenäisesti. [Moduuli 04](../04-tools/README.md)
+**AI Agentti** - Järjestelmä, joka käyttää tekoälyä päättelemiseen ja toimimiseen itsenäisesti. [Moduuli 04](../04-tools/README.md)
-**Ketju** – Toimintojen sarja, jossa tulos syötetään seuraavaan vaiheeseen.
+**Ketju** - Toimintojen sarja, jossa yksi tuotanto syöttää seuraavaan vaiheeseen.
-**Paloittelu (Chunking)** – Asiakirjojen pilkkominen pienempiin osiin. Tyypillisesti 300–500 tokenia päällekkäisyydellä. [Moduuli 03](../03-rag/README.md)
+**Paloittelu** - Asiakirjojen jakaminen pienempiin osiin. Tyypillinen: 300–500 tokenia päällekkäin. [Moduuli 03](../03-rag/README.md)
-**Kontekstin ikkuna** – Maksimi tokenien määrä, jonka malli voi käsitellä. GPT-5.2: 400K tokenia (enintään 272K syöte, 128K tuotos).
+**Kontekstin Ikkuna** - Maksimimäärä tokeneita, joita malli voi käsitellä. GPT-5.2: 400K tokenia (jopa 272K syöte, 128K tuloste).
-**Upotukset (Embeddings)** – Numeromuotoiset vektorit, jotka edustavat tekstin merkitystä. [Moduuli 03](../03-rag/README.md)
+**Upotukset** - Numeromuotoisia vektoreita, jotka kuvaavat tekstin merkitystä. [Moduuli 03](../03-rag/README.md)
-**Funktiokutsu** – Malli tuottaa jäsenneltyjä pyyntöjä kutsuakseen ulkoisia funktioita. [Moduuli 04](../04-tools/README.md)
+**Funktiokutsut** - Malli tuottaa jäsenneltyjä pyyntöjä ulkoisten funktioiden kutsumiseksi. [Moduuli 04](../04-tools/README.md)
-**Hallusinaatiot** – Kun mallit tuottavat virheellistä mutta uskottavaa tietoa.
+**Hallusinaatio** - Tilanne, jossa mallit tuottavat virheellistä mutta uskottavaa tietoa.
-**Promptti** – Tekstisyöte kielimallille. [Moduuli 02](../02-prompt-engineering/README.md)
+**Prompt** - Tekstisyöte kielimallille. [Moduuli 02](../02-prompt-engineering/README.md)
-**Semanttinen haku** – Haku merkityksen mukaan upotuksia hyödyntäen, ei avainsanoilla. [Moduuli 03](../03-rag/README.md)
+**Semanttinen Haku** - Haku merkityksen mukaan upotuksia käyttäen, ei avainsanoilla. [Moduuli 03](../03-rag/README.md)
-**Tilallinen vs. tilaton** – Tilaton: ei muistia. Tilallinen: ylläpitää keskusteluhistoriaa. [Moduuli 01](../01-introduction/README.md)
+**Tilan säilyttäminen vs. tilaton** - Tilaton: ei muistia. Tilallinen: säilyttää keskusteluhistorian. [Moduuli 01](../01-introduction/README.md)
-**Tokenit** – Perusyksiköt, joita mallit käyttävät. Vaikuttaa kustannuksiin ja rajoihin. [Moduuli 01](../01-introduction/README.md)
+**Tokenit** - Perusyksiköt, joita mallit käsittelevät. Vaikuttavat kustannuksiin ja rajoihin. [Moduuli 01](../01-introduction/README.md)
-**Työkaluketjutus** – Peräkkäinen työkalujen suoritus, jossa tulos ohjaa seuraavaa kutsua. [Moduuli 04](../04-tools/README.md)
+**Työkaluketjutus** - Työkalujen peräkkäinen suoritus, jossa tuotanto ohjaa seuraavaa kutsua. [Moduuli 04](../04-tools/README.md)
-## LangChain4j-komponentit
+## LangChain4j Komponentit
-**AiServices** – Luo tyyppiturvalliset tekoälypalvelu-rajapinnat.
+**AiServices** - Luo tyyppiturvalliset AI-palvelurajapinnat.
-**OpenAiOfficialChatModel** – Yhdistetty asiakas OpenAI:n ja Azure OpenAI:n malleille.
+**OpenAiOfficialChatModel** - Yhtenäinen asiakas OpenAI:n ja Azure OpenAI:n malleille.
-**OpenAiOfficialEmbeddingModel** – Luo upotuksia OpenAI Official -asiakasta käyttäen (tukee sekä OpenAI:ta että Azure OpenAI:ta).
+**OpenAiOfficialEmbeddingModel** - Luo upotuksia OpenAI Official -asiakkaalla (tukee sekä OpenAI:ta että Azure OpenAI:ta).
-**ChatModel** – Ydinkäyttöliittymä kielimalleille.
+**ChatModel** - Kielimallien ydinrajapinta.
-**ChatMemory** – Pitää yllä keskusteluhistoriaa.
+**ChatMemory** - Säilyttää keskusteluhistorian.
-**ContentRetriever** – Löytää relevantteja asiakirjan palasia RAG:ia varten.
+**ContentRetriever** - Löytää olennaisia asiakirjapaloja RAG:ia varten.
-**DocumentSplitter** – Pilkkoo asiakirjat paloiksi.
+**DocumentSplitter** - Jakaa asiakirjat paloihin.
-**EmbeddingModel** – Muuntaa tekstin numeerisiksi vektoreiksi.
+**EmbeddingModel** - Muuntaa tekstin numeerisiksi vektoreiksi.
-**EmbeddingStore** – Tallentaa ja hakee upotuksia.
+**EmbeddingStore** - Tallentaa ja hakee upotuksia.
-**MessageWindowChatMemory** – Pitää yllä liukuvaa ikkunaa viimeisimmistä viesteistä.
+**MessageWindowChatMemory** - Säilyttää liukuvan ikkunan viimeisimmistä viesteistä.
-**PromptTemplate** – Luo uudelleenkäytettäviä promptteja `{{variable}}`-paikkamerkkejä käyttäen.
+**PromptTemplate** - Luo uudelleenkäytettäviä prompt-malleja `{{variable}}` paikkamerkeillä.
-**TextSegment** – Tekstipala metatiedoilla. Käytetään RAG:ssa.
+**TextSegment** - Tekstipala metatiedolla. Käytetään RAG:issa.
-**ToolExecutionRequest** – Edustaa työkalun suorituspyyntöä.
+**ToolExecutionRequest** - Edustaa työkalun suorituspyyntöä.
-**UserMessage / AiMessage / SystemMessage** – Keskusteluviestityypit.
+**UserMessage / AiMessage / SystemMessage** - Keskusteluviestityypit.
-## AI/ML-käsitteet
+## AI/ML Käsitteet
-**Few-Shot-oppiminen** – Tarjoaa esimerkkejä promptissa. [Moduuli 02](../02-prompt-engineering/README.md)
+**Few-Shot Learning** - Esimerkkien antaminen promptissa. [Moduuli 02](../02-prompt-engineering/README.md)
-**Suuri kielimalli (LLM)** – Suuret tekoälymallit, jotka on koulutettu valtavilla tekstidatoilla.
+**Suuri Kielimalli (LLM)** - Tekoälymalleja, jotka on koulutettu laajalla tekstidatalla.
-**Järkeilytyömäärä** – GPT-5.2:n parametri, joka ohjaa ajattelun syvyyttä. [Moduuli 02](../02-prompt-engineering/README.md)
+**Päätelmätarkkuus** - GPT-5.2:n parametri, joka säätelee pohdinnan syvyyttä. [Moduuli 02](../02-prompt-engineering/README.md)
-**Lämpötila** – Ohjaa tuotoksen satunnaisuutta. Matala=deterministinen, korkea=luova.
+**Lämpötila** - Säätää tuotannon satunnaisuutta. Matala=deterministinen, korkea=luova.
-**Vektoritietokanta** – Erityistietokanta upotuksille. [Moduuli 03](../03-rag/README.md)
+**Vektoripohjainen Tietokanta** - Erikoistunut tietokanta upotuksille. [Moduuli 03](../03-rag/README.md)
-**Zero-Shot-oppiminen** – Suorittaa tehtäviä ilman esimerkkejä. [Moduuli 02](../02-prompt-engineering/README.md)
+**Nollakoeoppiminen** - Tehtävien suorittaminen ilman esimerkkejä. [Moduuli 02](../02-prompt-engineering/README.md)
-## Suojausmekanismit - [Moduuli 00](../00-quick-start/README.md)
+## Suojakaiteet
-**Defense in Depth** – Monikerroksinen suojausmenetelmä, joka yhdistää sovellustason suojaukset ja palveluntarjoajan turvallisuussuodattimet.
+**Monitasoinen Suojaus** - Usean kerroksen turvamenetelmä, joka yhdistää sovellustason suojakaiteet tarjoajan turvallisuussuodattimiin.
-**Kova esto** – Palveluntarjoaja palauttaa HTTP 400 -virheen vakavista sisällön rikkomuksista.
+**Hard Block** - Tarjoaja palauttaa HTTP 400 virheen vakavista sisältörikkomuksista.
-**InputGuardrail** – LangChain4j-rajapinta käyttäjän syötteen validointiin ennen LLM:ää. Säästää kustannuksia ja viiveitä estämällä haitalliset promptit varhain.
+**InputGuardrail** - LangChain4j-rajapinta käyttäjän syötteen validointiin ennen LLM:ää. Säästää kustannuksia ja viivettä blokkaamalla haitalliset promptit varhaisessa vaiheessa.
-**InputGuardrailResult** – Palautustyyppi suojauksen validointiin: `success()` tai `fatal("syy")`.
+**InputGuardrailResult** - Palautustyyppi suojakaiteen validoinnissa: `success()` tai `fatal("syy")`.
-**OutputGuardrail** – Rajapinta AI-vastausten validointiin ennen niiden palaut tamista käyttäjille.
+**OutputGuardrail** - Rajapinta AI-vastausten validointiin ennen palauttamista käyttäjälle.
-**Palveluntarjoajan turvallisuussuodattimet** – AI-palveluntarjoajien sisäänrakennetut sisältösuodattimet (esim. GitHub Models), jotka pysäyttävät rikkomukset API-tasolla.
+**Providerin Turvasuodattimet** - AI-palveluntarjoajien (esim. Azure OpenAI) sisäänrakennetut sisältösuodattimet, jotka havaitsevat rikkomukset API-tasolla.
-**Pehmeä kieltäytyminen** – Malli kieltäytyy kohteliaasti vastaamasta ilman virheilmoitusta.
+**Pehmeä Kieltäytyminen** - Malli kohteliaasti kieltäytyy vastaamasta ilman virhettä.
## Prompt-suunnittelu - [Moduuli 02](../02-prompt-engineering/README.md)
-**Ketjureaaliajattelu** – Askel askeleelta järkeily parempaan tarkkuuteen.
+**Ajatusketju** - Askel askeleelta -päätelmät paremman tarkkuuden saavuttamiseksi.
-**Rajoitettu tuotos** – Määrätyn muodon tai rakenteen pakkokeino.
+**Rajoitettu Tuotos** - Tietyn muodon tai rakenteen pakottaminen.
-**Korkea innokkuus** – GPT-5.2 -kuvio perusteelliseen järkeilyyn.
+**Korkea Innokkuus** - GPT-5.2 kuvio perusteelliseen päättelyyn.
-**Matala innokkuus** – GPT-5.2 -kuvio nopeisiin vastauksiin.
+**Matala Innokkuus** - GPT-5.2 kuvio nopeisiin vastauksiin.
-**Monikertakeskustelu** – Kontextin ylläpito vaihdoissa.
+**Monikierroksinen Keskustelu** - Kontekstin ylläpito vaihtojen välillä.
-**Roolipohjainen prompttaus** – Mallin persoonan asettaminen järjestelmäviesteillä.
+**Roolipohjainen Prompttaus** - Mallipersoonan asettaminen järjestelmäviestein.
-**Itsearviointi** – Malli arvioi ja parantaa omaa tuotostaan.
+**Itsetutkiskelu** - Malli arvioi ja parantaa omaa tuotostaan.
-**Rakenteellinen analyysi** – Kiinteä arviointikehys.
+**Rakenteellinen Analyysi** - Kiinteä arviointikehys.
-**Tehtävän suorituksen malli** – Suunnittele → Suorita → Tiivistä.
+**Tehtävän Suorituskuvio** - Suunnittele → Suorita → Yhteenveto.
-## RAG (hakupohjainen generointi) - [Moduuli 03](../03-rag/README.md)
+## RAG (Hakua Tehostettu Generointi) - [Moduuli 03](../03-rag/README.md)
-**Asiakirjojen käsittelyputki** – Lataa → paloita → upota → tallenna.
+**Asiakirjaprosessointiputki** - Lataa → paloita → upota → tallenna.
-**Muistipohjainen upotustallennus** – Ei-pysyvä tallennustila testaukseen.
+**Muistipohjainen Upotusvarasto** - Ei-pysyvä tallennus testaukseen.
-**RAG** – Yhdistää haun ja generoinnin vastusten perustamiseksi.
+**RAG** - Yhdistää tiedonhakua ja generointia vastauksen perustaksi.
-**Samanlaisuuspisteet** – Semanttisen samankaltaisuuden mitta (0–1).
+**Samanlaisuuspisteet** - Mitta (0-1) semanttisen samankaltaisuuden asteesta.
-**Lähteiden viittaus** – Metatiedot haetusta sisällöstä.
+**Lähdeviite** - Metatiedot haetusta sisällöstä.
-## Agentit ja työkalut - [Moduuli 04](../04-tools/README.md)
+## Agentit ja Työkalut - [Moduuli 04](../04-tools/README.md)
-**@Tool-annotaatio** – Merkitsee Java-metodit tekoälyn kutsuttaviksi työkaluiksi.
+**@Tool Annotaation** - Merkitsee Java-metodit tekoälyn kutsumiksi työkaluiksi.
-**ReAct-kuvio** – Järkeile → Toimi → Havainnoi → Toista.
+**ReAct Kuvio** - Pätee → Toimi → Havainnoi → Toista.
-**Istunnon hallinta** – Eri käyttäjille erilliset kontekstit.
+**Istunnon Hallinta** - Eri käyttäjille erilliset kontekstit.
-**Työkalu** – Funktio, jota AI-agentti voi kutsua.
+**Työkalu** - Toiminto, jonka tekoälyagentti voi kutsua.
-**Työkalun kuvaus** – Dokumentaatio työkalun tarkoituksesta ja parametreista.
+**Työkalun Kuvaus** - Dokumentaatio työkalun tarkoituksesta ja parametreista.
-## Agenttimoduuli - [Moduuli 05](../05-mcp/README.md)
+## Agenttien Moduuli - [Moduuli 05](../05-mcp/README.md)
-**@Agent-annotaatio** – Merkitsee rajapinnat tekoälyagenteiksi, joilla on deklaratiivinen käyttäytymismäärittely.
+**@Agent Annotaation** - Merkitsee rajapinnat tekoälyagenteiksi deklaratiivisella käyttäytymismäärittelyllä.
-**Agent-kuuntelija** – Koukkupiste agentin suorituksen seurantaan `beforeAgentInvocation()` ja `afterAgentInvocation()` kautta.
+**Agentin Kuuntelija** - Hook agentin suorituksen valvontaan `beforeAgentInvocation()` ja `afterAgentInvocation()` kautta.
-**Agenttinen laajuus** – Jaettu muisti, johon agentit tallentavat tulokset `outputKey`-avaimella seuraaville agenteille käytettäväksi.
+**Agenttien Muisti** - Jaettu muisti, johon agentit tallentavat tuotoksia `outputKey` avulla, jota alemmat agentit voivat käyttää.
-**AgenticServices** – Tehdas agenttien luomiseen `agentBuilder()`- ja `supervisorBuilder()`-metodeilla.
+**Agenttien Palvelut** - Tehdas agenttien luomiseen `agentBuilder()` ja `supervisorBuilder()` -menetelmillä.
-**Ehdollinen työnkulku** – Reittaus ehtojen perusteella eri asiantuntija-agentteihin.
+**Ehdollinen Työnkulku** - Reititys ehdon perusteella eri erikoisagentteihin.
-**Ihmisen rooli prosessissa** – Työnkulku, joka lisää ihmisen tarkastus- tai hyväksyntävaiheita.
+**Ihminen Silmukassa** - Työnkulku, jossa on ihmisen tarkastuspisteet hyväksynnälle tai sisällön tarkastukselle.
-**langchain4j-agentic** – Maven-riippuvuus deklaratiiviseen agenttirakentamiseen (kokeellinen).
+**langchain4j-agentic** - Maven-riippuvuus deklaratiiviseen agentinrakentamiseen (kokeellinen).
-**Silmukkatyönkulku** – Agentin suorituksen toisto, kunnes ehto täyttyy (esim. laatupisteet ≥ 0.8).
+**Silmukka Työnkulku** - Toistetaan agentin suoritus, kunnes ehto täyttyy (esim. laatuarvo ≥ 0.8).
-**outputKey** – Agentti-annotaation parametri, joka määrittää missä tulokset tallennetaan Agenttiseen laajuuteen.
+**outputKey** - Agenttiannotaation parametri, joka määrittää minne tulokset tallennetaan agenttien muistissa.
-**Rinnakkainen työnkulku** – Useiden agenttien yhtäaikainen suoritus riippumattomille tehtäville.
+**Rinnakkainen Työnkulku** - Usean agentin samanaikainen suoritus riippumattomille tehtäville.
-**Vastausstrategia** – Kuinka valvoja muodostaa lopullisen vastauksen: VIIMEINEN, YHTEENVETO tai PISTETTY.
+**Vastausstrategia** - Miten valvoja muotoilee lopullisen vastauksen: VIIMEINEN, YHTEENVETO tai ARVIOITU.
-**Järjestelmällinen työnkulku** – Agenttien suoritus järjestyksessä, jossa tulokset siirtyvät seuraavaan vaiheeseen.
+**Järjestyksellinen Työnkulku** - Suoritetaan agentit peräkkäin, jolloin tuotanto virtaa seuraavaan vaiheeseen.
-**Valvoja-agenttikuva** – Edistynyt agenttipatteri, jossa valvoja-LLM päättää dynaamisesti alitehtävien kutsumisesta.
+**Valvojan Agenttikuvio** - Edistynyt agenttikuva, jossa valvoja-LLM päättää dynaamisesti, mitä ala-agentteja kutsutaan.
-## Mallin kontekstiprotokolla (MCP) - [Moduuli 05](../05-mcp/README.md)
+## Mallin Kontekstiprotokolla (MCP) - [Moduuli 05](../05-mcp/README.md)
-**langchain4j-mcp** – Maven-riippuvuus MCP-integraatioon LangChain4j:ssä.
+**langchain4j-mcp** - Maven-riippuvuus MCP-integraatioon LangChain4j:ssä.
-**MCP** – Model Context Protocol: standardi AI-sovellusten liittämiseen ulkoisiin työkaluihin. Rakennat kerran, käytät kaikkialla.
+**MCP** - Model Context Protocol: standardi AI-sovellusten liittämiseksi ulkoisiin työkaluihin. Rakennetaan kerran, käytetään kaikkialla.
-**MCP-asiakas** – Sovellus, joka yhdistää MCP-palvelimiin löytääkseen ja käyttääkseen työkaluja.
+**MCP Client** - Sovellus, joka yhdistää MCP-palvelimiin työkalujen löytöä ja käyttöä varten.
-**MCP-palvelin** – Palvelu, joka tarjoaa työkaluja MCP:n kautta selkeillä kuvauksilla ja parametrikaavoilla.
+**MCP Server** - Palvelu, joka tarjoaa työkalut MCP:n kautta selkeine kuvauksineen ja parametriskaaloineen.
-**McpToolProvider** – LangChain4j-komponentti, joka käärii MCP-työkalut käyttöön AI-palveluissa ja agenteissa.
+**McpToolProvider** - LangChain4j-komponentti, joka käärii MCP-työkalut AI-palvelujen ja agenttien käyttöön.
-**McpTransport** – Rajapinta MCP-kommunikaatioon. Toteutuksia ovat mm. Stdio ja HTTP.
+**McpTransport** - Rajapinta MCP-viestintään. Toteutuksia ovat Stdio ja HTTP.
-**Stdio-kuljetus** – Paikallinen prosessikuljetus stdin/stdoutin kautta. Hyödyllinen tiedostojärjestelmän tai komentorivityökalujen käyttöön.
+**Stdio Transport** - Paikallinen prosessikuljetus stdin/stdoutin kautta. Kätevä tiedostojärjestelmän käyttöön tai komentorivityökaluihin.
-**StdioMcpTransport** – LangChain4j:n toteutus, joka käynnistää MCP-palvelimen aliprosessina.
+**StdioMcpTransport** - LangChain4j-toteutus, joka käynnistää MCP-palvelimen aliprosessina.
-**Työkalujen löytäminen** – Asiakas kysyy palvelimelta saatavilla olevat työkalut kuvauksineen ja kaavoineen.
+**Työkalujen Löytäminen** - Client kysyy palvelimelta saatavilla olevat työkalut kuvauksineen ja skeemoineen.
## Azure-palvelut - [Moduuli 01](../01-introduction/README.md)
-**Azure AI Search** – Pilvipohjainen haku vektoritoiminnoilla. [Moduuli 03](../03-rag/README.md)
+**Azure AI Search** - Pilvihakuratkaisu vektoritoiminnoilla. [Moduuli 03](../03-rag/README.md)
-**Azure Developer CLI (azd)** – Azure-resurssien käyttöönotto.
+**Azure Developer CLI (azd)** - Azure-resurssien käyttöönotto.
-**Azure OpenAI** – Microsoftin yritystason tekoälypalvelu.
+**Azure OpenAI** - Microsoftin yritystason tekoälypalvelu.
-**Bicep** – Azure infrastruktuurin koodikieli. [Infrastruktuuriopas](../01-introduction/infra/README.md)
+**Bicep** - Azure infrastruktuurikaavan kieli. [Infrastruktuuriohje](../01-introduction/infra/README.md)
-**Käyttöönoton nimi** – Mallin käyttöönoton nimi Azuressa.
+**Käyttöönoton Nimi** - Mallin käyttöönoton nimi Azure-palvelussa.
-**GPT-5.2** – Uusin OpenAI-malli, jossa järkeilyn ohjaus. [Moduuli 02](../02-prompt-engineering/README.md)
+**GPT-5.2** - Uusin OpenAI:n malli, jossa on päätelmien ohjaus. [Moduuli 02](../02-prompt-engineering/README.md)
-## Testaus ja kehitys - [Testausopas](TESTING.md)
+## Testaus ja Kehitys - [Testausopas](TESTING.md)
-**Dev Container** – Konttitoiminen kehitysympäristö. [Konfigurointi](../../../.devcontainer/devcontainer.json)
+**Dev Container** - Kontitetty kehitysympäristö. [Konfiguraatio](../../../.devcontainer/devcontainer.json)
-**GitHub Models** – Ilmainen tekoälymallien leikkikenttä. [Moduuli 00](../00-quick-start/README.md)
+**Muistitestaus** - Testaus muistipohjaisen tallennuksen avulla.
-**Muistipohjainen testaus** – Testaus muistipohjaisella tallennuksella.
+**Integraatiotestaus** - Testaus todellisella infrastruktuurilla.
-**Integraatiotestaus** – Testaus todellisella infrastruktuurilla.
+**Maven** - Java build-automaatio työkalu.
-**Maven** – Java-rakennusautomaatio.
+**Mockito** - Java-kirjaston testauskirjasto.
-**Mockito** – Java-kirjastojen mockaustyökalu.
-
-**Spring Boot** – Java-sovelluskehys. [Moduuli 01](../01-introduction/README.md)
+**Spring Boot** - Java sovelluskehys. [Moduuli 01](../01-introduction/README.md)
---
**Vastuuvapauslauseke**:
-Tämä asiakirja on käännetty käyttäen tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja omalla kielellään on ensisijainen lähde. Tärkeissä tiedoissa suosittelemme ammattilaisen tekemää käännöstä. Emme ole vastuussa tämän käännöksen käytöstä johtuvista väärinkäsityksistä tai virhetulkinnoista.
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, otathan huomioon, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäiskielellä on virallinen lähde. Tärkeissä asioissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinymmärryksistä tai tulkinnoista.
\ No newline at end of file
diff --git a/translations/fi/docs/TESTING.md b/translations/fi/docs/TESTING.md
index d5d28f853..fbfddc138 100644
--- a/translations/fi/docs/TESTING.md
+++ b/translations/fi/docs/TESTING.md
@@ -2,17 +2,17 @@
## Sisällysluettelo
-- [Pikaopas](../../../docs)
-- [Mitä testit kattavat](../../../docs)
-- [Testien suorittaminen](../../../docs)
-- [Testien suorittaminen VS Codessa](../../../docs)
-- [Testausmallit](../../../docs)
-- [Testausfilosofia](../../../docs)
-- [Seuraavat askeleet](../../../docs)
+- [Pika-aloitus](#pika-aloitus)
+- [Mitä testit kattavat](#mitä-testit-kattavat)
+- [Testien suorittaminen](#testien-suorittaminen)
+- [Testien suorittaminen VS Codessa](#testien-suorittaminen-vs-codessa)
+- [Testausmallit](#testausmallit)
+- [Testausfilosofia](#testausfilosofia)
+- [Seuraavat askeleet](#seuraavat-askelket)
-Tämä opas kävelee sinut läpi testien, jotka osoittavat, kuinka testata tekoälysovelluksia ilman, että tarvitset API-avaimia tai ulkoisia palveluita.
+Tämä opas ohjaa sinut testien läpi, jotka demonstroivat, kuinka testata tekoälysovelluksia ilman API-avaimia tai ulkoisia palveluita.
-## Pikaopas
+## Pika-aloitus
Suorita kaikki testit yhdellä komennolla:
@@ -26,32 +26,31 @@ mvn test
mvn --% test
```
-Kun kaikki testit onnistuvat, näet alla olevan kuvakaappauksen kaltaisen lopputuloksen — testit suoritetaan ilman yhtään virhettä.
+Kun kaikki testit läpäisevät, näet alla olevan kaltaisen tulosteen — testit suoritetaan ilman virheitä.
-
+
-*Onnistuneen testiajon tulos näyttää kaikki testit läpäistyinä ilman virheitä*
+*Onnistuneen testin suoritus näyttää kaikki testit läpäistyinä ilman virheitä*
## Mitä testit kattavat
-Tämä kurssi keskittyy **yksikkötesteihin**, jotka suoritetaan paikallisesti. Jokainen testi esittelee tietyn LangChain4j-konseptin erillään. Alla oleva testauspyramidi näyttää, mihin yksikkötestit sopivat — ne muodostavat nopean ja luotettavan perustan, jolle muu testausstrategiasi rakentuu.
+Tämä kurssi keskittyy **yksikkötesteihin**, jotka suoritetaan paikallisesti. Jokainen testi demonstroi tiettyä LangChain4j-konseptia eristetysti. Alla oleva testauksen pyramidi näyttää, missä yksikkötestit sijoittuvat — ne muodostavat nopean, luotettavan perustan, jolle muu testausstrategiasi rakentuu.
-
+
-*Testauspyramidi näyttää tasapainon yksikkötestien (nopeat, eristetyt), integraatiotestien (todelliset komponentit) ja loppukäyttäjätestien välillä. Tämä koulutus kattaa yksikkötestauksen.*
+*Testauspyramidi näyttää tasapainon yksikkötestien (nopeat, eristetyt), integraatiotestien (todelliset komponentit) ja päätepisteestä päätepisteeseen tehtävien testien välillä. Tämä koulutus kattaa yksikkötestauksen.*
-| Moduuli | Testit | Painopiste | Keskeiset tiedostot |
+| Moduuli | Testit | Fokus | Avaintiedostot |
|--------|-------|-------|-----------|
-| **00 - Pikaopas** | 6 | Kehote-pohjat ja muuttujien korvaus | `SimpleQuickStartTest.java` |
-| **01 - Johdanto** | 8 | Keskustelumuisti ja tilallinen keskustelu | `SimpleConversationTest.java` |
-| **02 - Kehoteinsinöörityö** | 12 | GPT-5.2-kuviot, innokkuustasot, jäsennelty tuloste | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | Asiakirjojen sisäänotto, upotukset, samankaltaisuushaku | `DocumentServiceTest.java` |
+| **01 - Johdanto** | 8 | Keskustelumuisti ja tilalliset chatit | `SimpleConversationTest.java` |
+| **02 - Prompt-engineering** | 12 | GPT-5.2-mallit, innokkuustasot, jäsennelty ulostulo | `SimpleGpt5PromptTest.java` |
+| **03 - RAG** | 10 | Dokumenttien syöttö, upotukset, samankaltaisuushaku | `DocumentServiceTest.java` |
| **04 - Työkalut** | 12 | Funktiokutsut ja työkaluketjut | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | Model Context Protocol stdio-siirrolla | `SimpleMcpTest.java` |
+| **05 - MCP** | 8 | Mallikontekstiprotokolla stdio-siirrolla | `SimpleMcpTest.java` |
## Testien suorittaminen
-**Suorita kaikki testit juurihakemistosta:**
+**Suorita kaikki testit juuresta:**
**Bash:**
```bash
@@ -63,19 +62,19 @@ mvn test
mvn --% test
```
-**Suorita testit tietylle moduulille:**
+**Suorita testit tietyssä moduulissa:**
**Bash:**
```bash
cd 01-introduction && mvn test
-# Tai juurihakemistosta
+# Tai juuresta
mvn test -pl 01-introduction
```
**PowerShell:**
```powershell
cd 01-introduction; mvn --% test
-# Tai juurihakemistosta
+# Tai juuresta
mvn --% test -pl 01-introduction
```
@@ -95,41 +94,41 @@ mvn --% test -Dtest=SimpleConversationTest
**Bash:**
```bash
-mvn test -Dtest=SimpleConversationTest#tulisiSäilyttääKeskusteluhistoria
+mvn test -Dtest=SimpleConversationTest#pitäisi säilyttää keskusteluhistoria
```
**PowerShell:**
```powershell
-mvn --% test -Dtest=SimpleConversationTest#tulisiko säilyttää keskusteluhistoria
+mvn --% test -Dtest=SimpleConversationTest#tulisi säilyttää keskusteluhistoria
```
## Testien suorittaminen VS Codessa
-Jos käytät Visual Studio Codea, Test Explorer tarjoaa graafisen käyttöliittymän testien suorittamiseen ja virheenkorjaukseen.
+Jos käytät Visual Studio Codea, Test Explorer tarjoaa graafisen käyttöliittymän testien ajamiseen ja virheiden etsintään.
-*VS Code Test Explorer näyttää testipuuston, jossa kaikki Java-testiluokat ja yksittäiset testimetodit*
+*VS Code Test Explorer näyttää testipuuhun kaikki Java-testiluokat ja yksittäiset testimetodit*
**Testien suorittaminen VS Codessa:**
-1. Avaa Test Explorer napsauttamalla reagenssipulloa Aktiviteettipalkissa
+1. Avaa Test Explorer klikkaamalla lasipulloikonia Activity Barissa
2. Laajenna testipuuta nähdäksesi kaikki moduulit ja testiluokat
-3. Napsauta esityspainiketta minkä tahansa testin vieressä suorittaaksesi sen yksittäin
-4. Napsauta "Run All Tests" suorittaaksesi koko testipaketin
-5. Oikeaklikkaa mitä tahansa testiä ja valitse "Debug Test" asettaaksesi taukopaikkoja ja astuaksesi koodiin
+3. Klikkaa yksittäisen testin vieressä olevaa toistopainiketta ajaaksesi sen erikseen
+4. Klikkaa "Run All Tests" suorittaaksesi kaikki testit
+5. Klikkaa hiiren oikealla testin päällä ja valitse "Debug Test" asettaaksesi breakpointteja ja seurataksesi koodia askel askeleelta
-Test Explorer näyttää vihreät valintamerkit läpäistyille testeille ja antaa yksityiskohtaiset virheilmoitukset, jos testit epäonnistuvat.
+Test Explorer näyttää vihreät tägit läpäistyille testeille ja tarjoaa yksityiskohtaiset virheilmoitukset, kun testit epäonnistuvat.
## Testausmallit
-### Kuvio 1: Kehote-mallipohjien testaus
+### Malli 1: Prompt-mallien testaus
-Yksinkertaisin kuvio testaa kehote-mallipohjia ilman, että kutsutaan mitään tekoälymallia. Varmistat, että muuttujien korvaus toimii oikein ja kehote on muotoiltu odotetusti.
+Yksinkertaisin malli testaa prompt-malleja ilman, että kutsutaan mitään tekoälymallia. Varmistat, että muuttujien korvaus toimii oikein ja promptit muotoillaan odotetusti.
-
+
-*Kehote-mallipohjien testaus näyttää muuttujien korvausprosessin: pohja paikkamerkeillä → arvot sovelletaan → muotoiltu tuloste tarkistetaan*
+*Prompt-mallien testaus, joka näyttää muuttujien korvausprosessin: malli paikkamerkkeineen → arvot sovelletaan → muotoiltu ulostulo tarkistetaan*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-Tämä testi sijaitsee tiedostossa `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
+Tämä malli varmistaa, että muuttujien korvaus toimii oikein ja promptit muotoillaan odotetusti — ei tarvita API-avaimia tai mallikutsuja.
-**Suorita:**
+### Malli 2: Kielimallien peukalointi (Mocking)
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#testaaKehyksenMuotoilua
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#testaaKehyksenMuotoilua
-```
-
-### Kuvio 2: Kielen mallien mokkaus
-
-Keskustelulogiikan testaamiseen käytä Mockitoa luomaan väärennettyjä malleja, jotka palauttavat ennalta määritettyjä vastauksia. Näin testit ovat nopeita, ilmaisia ja määrätietoisia.
+Kun testaat keskustelulogiikkaa, käytä Mockitoa luodaksesi väärennettyjä malleja, jotka palauttavat ennaltamäärättyjä vastauksia. Tämä tekee testeistä nopeita, ilmaisia ja määrämuotoisia.
-
+
-*Vertailu, miksi mokkeja suositaan testauksessa: ne ovat nopeita, ilmaisia, määrätietoisia eikä niihin tarvita API-avaimia*
+*Vertailu, joka näyttää miksi mokkaukset ovat testauksessa parempia: ne ovat nopeita, ilmaisia, määrämukaisia ja eivät vaadi API-avaimia*
```java
@ExtendWith(MockitoExtension.class)
@@ -213,20 +200,20 @@ class SimpleConversationTest {
conversationService.chat(conversationId, "Third message");
List history = conversationService.getHistory(conversationId);
- assertThat(history).hasSize(6); // 3 käyttäjä- + 3 tekoälyviestiä
+ assertThat(history).hasSize(6); // 3 käyttäjä + 3 tekoälyviestiä
}
}
```
-Tämä kuvio esiintyy tiedostossa `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Mokki varmistaa johdonmukaisen käyttäytymisen, jotta voit tarkistaa, että muistin hallinta toimii oikein.
+Tämä malli esiintyy tiedostossa `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Mock varmistaa yhtenäisen käyttäytymisen, jotta voit tarkistaa muistinhallinnan oikeellisuuden.
-### Kuvio 3: Keskustelun eristäminen
+### Malli 3: Keskustelujen eristäminen testauksessa
-Keskustelumuistin tulee pitää useat käyttäjät erillään. Tämä testi varmistaa, etteivät keskustelut sekoita konteksteja.
+Keskustelumuistin on pidettävä useat käyttäjät erillään. Tämä testi varmistaa, ettei keskustelujen kontekstit sekoitu.
-
+
-*Keskustelun eristämisen testaus osoittaa erilliset muistikaupat eri käyttäjille kontekstin sekoittumisen estämiseksi*
+*Keskustelujen eristämisen testaus, joka näyttää erilliset muistiyksiköt eri käyttäjille kontekstin sekoittumisen estämiseksi*
```java
@Test
@@ -250,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-Jokaisella keskustelulla on oma itsenäinen historiansa. Tuotantojärjestelmissä tämä eristys on kriittinen monikäyttäjäsovelluksille.
+Jokainen keskustelu ylläpitää omaa riippumatonta historiaansa. Tuotantojärjestelmissä tämä eristäminen on kriittistä monikäyttäjäisille sovelluksille.
-### Kuvio 4: Työkalujen erillinen testaus
+### Malli 4: Työkalujen itsenäinen testaus
-Työkalut ovat toimintoja, joita tekoäly voi kutsua. Testaa niitä suoraan varmistaaksesi, että ne toimivat oikein riippumatta tekoälyn päätöksistä.
+Työkalut ovat funktioita, joita tekoäly voi kutsua. Testaa niitä suoraan varmistaaksesi, että ne toimivat oikein riippumatta tekoälyn päätöksistä.
-
+
-*Työkalujen itsenäinen testaus näyttää moki-työkalun suorituksen ilman tekoälykutsuja liiketoimintalogiikan varmistamiseksi*
+*Työkalujen itsenäinen testaus, joka näyttää peukaloidun työkalun suorituksen ilman tekoälykutsuja liiketoimintalogiikan tarkistamiseksi*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-Nämä testit tiedostosta `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` validoivat työkalulogiikan ilman tekoälyosallistumista. Ketjutusesimerkki näyttää, kuinka yhden työkalun tulos syötetään toisen syötteeksi.
+Nämä testit tiedostosta `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` validoivat työkalulogiikan ilman tekoälyn osallisuutta. Ketjutus-esimerkki näyttää, miten yhden työkalun ulostulo syötetään toisen työkalun syötteeksi.
-### Kuvio 5: Muistiin perustuva RAG-testaus
+### Malli 5: Muistissa tapahtuva RAG-testauksen malli
-RAG-järjestelmät vaativat perinteisesti vektoripohjaiset tietokannat ja upotuspalvelut. Muistiin perustuva kuvio antaa sinun testata koko putkea ilman ulkoisia riippuvuuksia.
+RAG-järjestelmät vaativat perinteisesti vektorikantoja ja upotusten palveluita. Muistissa tapahtuva malli antaa testata koko putkea ilman ulkoisia riippuvuuksia.
-
+
-*Muistiin perustuva RAG-testing työnkulku näyttää asiakirjan jäsentämisen, upotustallennuksen ja samankaltaisuushaun ilman tietokantaa*
+*Muistissa tapahtuvan RAG-testauksen työnkulku, joka näyttää dokumentin jäsentämisen, upotusten tallennuksen ja samankaltaisuushaun ilman tietokantaa*
```java
@Test
@@ -306,13 +293,13 @@ void testProcessTextDocument() {
}
```
-Tämä testi tiedostosta `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` luo asiakirjan muistiin ja varmistaa pilkkomisen ja metatietojen käsittelyn.
+Tämä testi tiedostosta `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` luo dokumentin muistiin ja varmistaa paloittelun ja metadatan käsittelyn.
-### Kuvio 6: MCP-integraatiotestaus
+### Malli 6: MCP-integraatiotestaus
-MCP-moduuli testaa Model Context Protocol -integraatiota stdio-siirron avulla. Nämä testit varmistavat, että sovelluksesi voi käynnistää ja kommunikoida MCP-palvelimien kanssa aliprosesseina.
+MCP-moduuli testaa Model Context Protocol -integraatiota stdio-siirtoa käyttäen. Nämä testit varmistavat, että sovelluksesi pystyy käynnistämään MCP-palvelimen aliprosessina ja keskustelemaan sen kanssa.
-Testit tiedostossa `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` validoivat MCP-asiakkaan käyttäytymisen.
+Testit tiedostossa `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` validoivat MCP-asiakasohjelman käyttäytymisen.
**Suorita ne:**
@@ -328,36 +315,35 @@ cd 05-mcp; mvn --% test
## Testausfilosofia
-Testaa koodiasi, älä tekoälyä. Testiesi tulisi validoida kirjoittamasi koodi tarkistamalla, miten kehotteet rakentuvat, miten muistia hallitaan ja miten työkalut suoritetaan. Tekoälyn vastaukset vaihtelevat eikä niiden pitäisi olla osa testiväittämiä. Kysy itseltäsi, korvaako kehote-mallisi muuttujat oikein, älä sitä, antaako tekoäly oikean vastauksen.
+Testaa omaa koodiasi, älä tekoälyä. Testiesi tulisi validoida kirjoittamasi koodi tarkistamalla, miten promptit rakennetaan, miten muisti hallitaan ja miten työkalut suoritetaan. Tekoälyn vastaukset vaihtelevat, eikä niitä pitäisi käyttää testien väitteissä. Kysy itseltäsi, korvaako prompttemplaatti muuttujat oikein, ei sitä, antako tekoäly oikean vastauksen.
-Käytä mokkeja kielimalleille. Ne ovat ulkoisia riippuvuuksia, jotka ovat hitaita, kalliita ja epädeterministisiä. Mokkaus tekee testeistä nopeita, millisekunneissa sekuntien sijaan; ilmaisia ilman API-kustannuksia ja määrätietoisia samaan tulokseen joka kerta.
+Käytä mokkeja kielimalleille. Ne ovat ulkoisia riippuvuuksia, jotka ovat hitaita, kalliita ja epädeterministisiä. Mokkaus tekee testeistä nopeita (millisekunneissa sekuntien sijaan), ilmaisia (ei API-kuluja) ja määrämukaisia (sama tulos aina).
-Pidä testit itsenäisinä. Jokaisen testin tulisi luoda omat datansa, olla riippumatta muista testeistä ja siivota jälkensä. Testien tulee läpäistä ajosta riippumatta.
+Pidä testit itsenäisinä. Jokaisen testin tulisi luoda omat datansa, olla riippumaton muista testeistä ja siivota jälkensä. Testien tulisi läpäistä riippumatta niiden suoritusjärjestyksestä.
-Testaa reunatapauksia onnellisen polun ulkopuolella. Kokeile tyhjiä syötteitä, hyvin suuria syötteitä, erikoismerkkejä, virheellisiä parametreja ja raja-arvoja. Nämä paljastavat usein virheitä, joita normaali käyttö ei paljasta.
+Testaa reunatapauksia onnellisten polkujen lisäksi. Kokeile tyhjiä syötteitä, hyvin suuria syötteitä, erikoismerkkejä, virheellisiä parametreja ja raja-arvoja. Nämä paljastavat usein virheitä, joita normaali käyttö ei löydä.
-Käytä kuvaavia nimiä. Vertaa `shouldMaintainConversationHistoryAcrossMultipleMessages()` ja `test1()` -nimiä. Ensimmäinen kertoo tarkalleen, mitä testataan, jolloin virheenkorjaus on helpompaa.
+Käytä kuvaavia nimiä. Vertaa `shouldMaintainConversationHistoryAcrossMultipleMessages()` nimitystä `test1()` kanssa. Ensimmäinen kertoo täsmälleen, mitä testataan, mikä helpottaa vikojen löytämistä.
## Seuraavat askeleet
-Nyt kun ymmärrät testausmallit, sukella syvemmälle kuhunkin moduuliin:
+Nyt kun ymmärrät testausmallit, sukeltaa syvemmälle kuhunkin moduuliin:
-- **[00 - Pikaopas](../00-quick-start/README.md)** - Aloita kehote-mallipohjien perusteista
-- **[01 - Johdanto](../01-introduction/README.md)** - Opi keskustelumuistin hallinta
-- **[02 - Kehoteinsinöörityö](../02/prompt-engineering/README.md)** - Hallitse GPT-5.2-kehote-kuviot
-- **[03 - RAG](../03-rag/README.md)** - Rakenna tiedonhakupohjaiset generointijärjestelmät
-- **[04 - Työkalut](../04-tools/README.md)** - Toteuta funktiokutsut ja työkaluketjut
-- **[05 - MCP](../05-mcp/README.md)** - Integroi Model Context Protocol
+- **[01 - Johdanto](../01-introduction/README.md)** – Opi keskustelumuistin hallinta
+- **[02 - Prompt-engineering](../02-prompt-engineering/README.md)** – Hallitse GPT-5.2-mallien käyttötavat
+- **[03 - RAG](../03-rag/README.md)** – Rakenna hakua laajentavia generointijärjestelmiä
+- **[04 - Työkalut](../04-tools/README.md)** – Toteuta funktiokutsut ja työkaluketjut
+- **[05 - MCP](../05-mcp/README.md)** – Integroi Mallikontekstiprotokolla
-Jokaisen moduulin README tarjoaa yksityiskohtaiset selitykset täällä testatuista konsepteista.
+Jokaisen moduulin README sisältää yksityiskohtaiset selitykset täällä testatuista konsepteista.
---
-**Navigointi:** [← Takaisin pääsivulle](../README.md)
+**Navigointi:** [← Takaisin päähakemistoon](../README.md)
---
**Vastuuvapauslauseke**:
-Tämä asiakirja on käännetty AI-käännöspalvelulla [Co-op Translator](https://github.com/Azure/co-op-translator). Pyrimme tarkkuuteen, mutta ole hyvä ja huomioi, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen omalla kielellä on pidettävä auktoritatiivisena lähteenä. Tärkeiden tietojen osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinymmärryksistä tai virheellisistä tulkinnoista.
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, otathan huomioon, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäiskielellä on virallinen lähde. Tärkeissä asioissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinymmärryksistä tai tulkinnoista.
\ No newline at end of file
diff --git a/translations/fr/.co-op-translator.json b/translations/fr/.co-op-translator.json
index 1c3508550..c73a17c39 100644
--- a/translations/fr/.co-op-translator.json
+++ b/translations/fr/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "fr"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-02T18:24:43+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T07:02:23+00:00",
"source_file": "01-introduction/README.md",
"language_code": "fr"
},
@@ -18,20 +18,20 @@
"language_code": "fr"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-02T18:27:07+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T06:57:40+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "fr"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-02T18:28:33+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T07:01:24+00:00",
"source_file": "03-rag/README.md",
"language_code": "fr"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T08:16:02+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T06:59:55+00:00",
"source_file": "04-tools/README.md",
"language_code": "fr"
},
@@ -54,8 +54,8 @@
"language_code": "fr"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T15:31:12+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T06:56:10+00:00",
"source_file": "README.md",
"language_code": "fr"
},
@@ -72,14 +72,14 @@
"language_code": "fr"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-02T18:31:45+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T06:58:13+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "fr"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-02T18:32:34+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T06:58:48+00:00",
"source_file": "docs/TESTING.md",
"language_code": "fr"
}
diff --git a/translations/fr/00-quick-start/README.md b/translations/fr/00-quick-start/README.md
deleted file mode 100644
index e976d73e4..000000000
--- a/translations/fr/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# Module 00 : Démarrage rapide
-
-## Table des matières
-
-- [Introduction](../../../00-quick-start)
-- [Qu'est-ce que LangChain4j ?](../../../00-quick-start)
-- [Dépendances LangChain4j](../../../00-quick-start)
-- [Prérequis](../../../00-quick-start)
-- [Installation](../../../00-quick-start)
- - [1. Obtenez votre token GitHub](../../../00-quick-start)
- - [2. Configurez votre token](../../../00-quick-start)
-- [Exécuter les exemples](../../../00-quick-start)
- - [1. Chat de base](../../../00-quick-start)
- - [2. Modèles de prompt](../../../00-quick-start)
- - [3. Appel de fonctions](../../../00-quick-start)
- - [4. Questions/Réponses sur documents (Easy RAG)](../../../00-quick-start)
- - [5. IA responsable](../../../00-quick-start)
-- [Ce que chaque exemple montre](../../../00-quick-start)
-- [Étapes suivantes](../../../00-quick-start)
-- [Dépannage](../../../00-quick-start)
-
-## Introduction
-
-Ce démarrage rapide vise à vous mettre en route avec LangChain4j le plus rapidement possible. Il couvre les bases absolues de la création d’applications d’IA avec LangChain4j et GitHub Models. Dans les modules suivants, vous passerez à Azure OpenAI et GPT-5.2 et approfondirez chaque concept.
-
-## Qu'est-ce que LangChain4j ?
-
-LangChain4j est une bibliothèque Java qui simplifie la création d’applications alimentées par l’IA. Au lieu de gérer des clients HTTP et le parsing JSON, vous travaillez avec des API Java propres.
-
-Le terme « chaîne » dans LangChain fait référence au chaînage de plusieurs composants – vous pouvez enchaîner un prompt à un modèle puis à un parseur, ou enchaîner plusieurs appels IA où une sortie sert d’entrée au suivant. Ce démarrage rapide se concentre sur les fondamentaux avant d’explorer des chaînes plus complexes.
-
-
-
-*Chaînage des composants dans LangChain4j – les blocs de construction se connectent pour créer des workflows IA puissants*
-
-Nous utiliserons trois composants principaux :
-
-**ChatModel** – Interface pour les interactions avec les modèles IA. Appelez `model.chat("prompt")` et obtenez une chaîne de réponse. Nous utilisons `OpenAiOfficialChatModel` qui fonctionne avec les points d'entrée compatibles OpenAI comme GitHub Models.
-
-**AiServices** – Crée des interfaces de service IA typées. Définissez des méthodes, annotées avec `@Tool`, et LangChain4j gère l’orchestration. L’IA appelle automatiquement vos méthodes Java quand nécessaire.
-
-**MessageWindowChatMemory** – Maintient l’historique de conversation. Sans cela, chaque requête est indépendante. Avec, l’IA se souvient des messages précédents et maintient le contexte sur plusieurs tours.
-
-
-
-*Architecture LangChain4j – composants principaux travaillant ensemble pour alimenter vos applications IA*
-
-## Dépendances LangChain4j
-
-Ce démarrage rapide utilise trois dépendances Maven dans le [`pom.xml`](../../../00-quick-start/pom.xml) :
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-Le module `langchain4j-open-ai-official` fournit la classe `OpenAiOfficialChatModel` qui se connecte aux API compatibles OpenAI. GitHub Models utilise le même format d’API, donc aucun adaptateur spécial n’est nécessaire – il suffit de pointer l’URL de base vers `https://models.github.ai/inference`.
-
-Le module `langchain4j-easy-rag` fournit la découpe automatique des documents, l’intégration et la recherche, vous permettant de construire des applications RAG sans configurer manuellement chaque étape.
-
-## Prérequis
-
-**Utilisez-vous le conteneur de développement ?** Java et Maven sont déjà installés. Vous avez seulement besoin d’un token d'accès personnel GitHub.
-
-**Développement local :**
-- Java 21+, Maven 3.9+
-- Token d'accès personnel GitHub (instructions ci-dessous)
-
-> **Note :** Ce module utilise `gpt-4.1-nano` de GitHub Models. Ne modifiez pas le nom du modèle dans le code – il est configuré pour fonctionner avec les modèles disponibles chez GitHub.
-
-## Installation
-
-### 1. Obtenez votre token GitHub
-
-1. Allez sur [Paramètres GitHub → Tokens d’accès personnels](https://github.com/settings/personal-access-tokens)
-2. Cliquez sur "Générer un nouveau token"
-3. Donnez un nom descriptif (ex. « LangChain4j Démo »)
-4. Choisissez une expiration (7 jours recommandé)
-5. Sous « Permissions du compte », trouvez « Models » et mettez « Lecture seule »
-6. Cliquez sur « Générer le token »
-7. Copiez et enregistrez votre token – vous ne le reverrez pas
-
-### 2. Configurez votre token
-
-**Option 1 : Utiliser VS Code (recommandé)**
-
-Si vous utilisez VS Code, ajoutez votre token dans le fichier `.env` à la racine du projet :
-
-Si le fichier `.env` n’existe pas, copiez `.env.example` en `.env` ou créez un nouveau fichier `.env` à la racine du projet.
-
-**Exemple de fichier `.env` :**
-```bash
-# Dans /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-Ensuite, vous pouvez simplement cliquer-droit sur n’importe quel fichier demo (ex. `BasicChatDemo.java`) dans l’explorateur et sélectionner **"Run Java"** ou utiliser les configurations de lancement dans le panneau Run and Debug.
-
-**Option 2 : Utiliser le terminal**
-
-Définissez le token comme variable d’environnement :
-
-**Bash :**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell :**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## Exécuter les exemples
-
-**Avec VS Code :** Cliquez simplement-droit sur un fichier demo dans l’explorateur et sélectionnez **"Run Java"**, ou utilisez les configurations de lancement dans le panneau Run and Debug (en vous assurant d’avoir ajouté votre token dans le fichier `.env` au préalable).
-
-**Avec Maven :** Sinon, lancez depuis la ligne de commande :
-
-### 1. Chat de base
-
-**Bash :**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell :**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. Modèles de prompt
-
-**Bash :**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell :**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-Montre le zero-shot, few-shot, chain-of-thought et les prompts basés sur les rôles.
-
-### 3. Appel de fonctions
-
-**Bash :**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell :**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-L’IA appelle automatiquement vos méthodes Java lorsque nécessaire.
-
-### 4. Questions/Réponses sur documents (Easy RAG)
-
-**Bash :**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell :**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-Posez des questions sur vos documents utilisant Easy RAG avec intégration et recherche automatiques.
-
-### 5. IA responsable
-
-**Bash :**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell :**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-Voyez comment les filtres de sécurité IA bloquent les contenus nuisibles.
-
-## Ce que chaque exemple montre
-
-**Chat de base** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-Commencez ici pour voir LangChain4j dans sa forme la plus simple. Vous créerez un `OpenAiOfficialChatModel`, enverrez un prompt avec `.chat()`, et obtiendrez une réponse. Cela montre les bases : comment initialiser les modèles avec des points d’entrée et clés API personnalisés. Une fois ce schéma compris, tout le reste s’appuie dessus.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 Essayez avec [GitHub Copilot](https://github.com/features/copilot) Chat :** Ouvrez [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) et demandez :
-> - « Comment passer de GitHub Models à Azure OpenAI dans ce code ? »
-> - « Quels autres paramètres puis-je configurer dans OpenAiOfficialChatModel.builder() ? »
-> - « Comment ajouter des réponses en streaming au lieu d’attendre la réponse complète ? »
-
-**Ingénierie des prompts** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-Maintenant que vous savez comment parler à un modèle, explorons ce que vous lui dites. Cette démo utilise la même configuration de modèle mais montre cinq modèles de prompt différents. Essayez les prompts zero-shot pour des instructions directes, few-shot qui apprennent à partir d’exemples, chain-of-thought qui révèlent les étapes de raisonnement, et les prompts basés sur les rôles qui définissent le contexte. Vous verrez comment le même modèle donne des résultats très différents selon la formulation de la demande.
-
-La démo montre aussi des templates de prompt, une façon puissante de créer des prompts réutilisables avec des variables.
-L’exemple ci-dessous montre un prompt utilisant `PromptTemplate` LangChain4j pour remplir des variables. L’IA répondra en fonction de la destination et de l’activité indiquées.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 Essayez avec [GitHub Copilot](https://github.com/features/copilot) Chat :** Ouvrez [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) et demandez :
-> - « Quelle est la différence entre les prompts zero-shot et few-shot, et quand utiliser chacun ? »
-> - « Comment le paramètre temperature influence-t-il les réponses du modèle ? »
-> - « Quelles sont les techniques pour prévenir les attaques d’injection de prompt en production ? »
-> - « Comment créer des objets PromptTemplate réutilisables pour des modèles courants ? »
-
-**Intégration d’outils** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-C’est ici que LangChain4j devient puissant. Vous utiliserez `AiServices` pour créer un assistant IA qui peut appeler vos méthodes Java. Il suffit d’annoter les méthodes avec `@Tool("description")` et LangChain4j gère le reste – l’IA décide automatiquement quand utiliser chaque outil selon la demande de l’utilisateur. Cela illustre l’appel de fonction, une technique clé pour construire une IA capable d’agir, pas seulement répondre.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 Essayez avec [GitHub Copilot](https://github.com/features/copilot) Chat :** Ouvrez [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) et demandez :
-> - « Comment fonctionne l’annotation @Tool et que fait LangChain4j en coulisses ? »
-> - « L’IA peut-elle appeler plusieurs outils en séquence pour résoudre des problèmes complexes ? »
-> - « Que se passe-t-il si un outil lance une exception – comment gérer les erreurs ? »
-> - « Comment intégrer une vraie API au lieu de cet exemple de calculatrice ? »
-
-**Questions/Réponses sur documents (Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-Ici vous verrez RAG (retrieval-augmented generation) avec l’approche « Easy RAG » de LangChain4j. Les documents sont chargés, automatiquement découpés et intégrés dans un magasin en mémoire, puis un récupérateur de contenu fournit les morceaux pertinents à l’IA au moment de la requête. L’IA répond en fonction de vos documents, non de ses connaissances générales.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 Essayez avec [GitHub Copilot](https://github.com/features/copilot) Chat :** Ouvrez [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) et demandez :
-> - « Comment RAG prévient-il les hallucinations IA comparé à l’utilisation des données d’entraînement du modèle ? »
-> - « Quelle est la différence entre cette approche facile et un pipeline RAG personnalisé ? »
-> - « Comment évoluer pour gérer plusieurs documents ou des bases de connaissances plus larges ? »
-
-**IA responsable** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-Construisez la sécurité IA avec une défense en profondeur. Cette démo montre deux couches de protection fonctionnant ensemble :
-
-**Partie 1 : LangChain4j Input Guardrails** – Bloque les prompts dangereux avant qu’ils n’atteignent le LLM. Créez des garde-fous personnalisés qui vérifient la présence de mots-clés ou motifs interdits. Ils tournent dans votre code, donc rapides et gratuits.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**Partie 2 : Filtres de sécurité du fournisseur** – GitHub Models dispose de filtres intégrés qui attrapent ce que vos garde-fous pourraient manquer. Vous verrez des blocages stricts (erreurs HTTP 400) pour violations graves et des refus doux où l’IA décline poliment.
-
-> **🤖 Essayez avec [GitHub Copilot](https://github.com/features/copilot) Chat :** Ouvrez [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) et demandez :
-> - « Qu’est-ce qu’InputGuardrail et comment en créer un ? »
-> - « Quelle est la différence entre un blocage dur et un refus doux ? »
-> - « Pourquoi utiliser à la fois garde-fous et filtres fournisseur ? »
-
-## Étapes suivantes
-
-**Module suivant :** [01-introduction – Premiers pas avec LangChain4j](../01-introduction/README.md)
-
----
-
-**Navigation :** [← Retour au principal](../README.md) | [Suivant : Module 01 – Introduction →](../01-introduction/README.md)
-
----
-
-## Dépannage
-
-### Première compilation Maven
-
-**Problème :** Le premier `mvn clean compile` ou `mvn package` prend beaucoup de temps (10-15 minutes)
-
-**Cause :** Maven doit télécharger toutes les dépendances du projet (Spring Boot, bibliothèques LangChain4j, SDK Azure, etc.) lors de la première compilation.
-
-**Solution :** C’est un comportement normal. Les compilations suivantes seront beaucoup plus rapides car les dépendances sont mises en cache localement. Le temps de téléchargement dépend de la vitesse de votre réseau.
-
-### Syntaxe des commandes Maven sous PowerShell
-
-**Problème :** Les commandes Maven échouent avec l’erreur `Unknown lifecycle phase ".mainClass=..."`
-**Cause** : PowerShell interprète `=` comme un opérateur d'affectation de variable, ce qui casse la syntaxe des propriétés Maven
-
-**Solution** : Utilisez l'opérateur d'arrêt d'analyse `--%` avant la commande Maven :
-
-**PowerShell :**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash :**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-L'opérateur `--%` indique à PowerShell de passer tous les arguments restants littéralement à Maven sans interprétation.
-
-### Affichage des emojis dans Windows PowerShell
-
-**Problème** : Les réponses de l'IA affichent des caractères indésirables (par exemple, `????` ou `â??`) au lieu des emojis dans PowerShell
-
-**Cause** : L'encodage par défaut de PowerShell ne supporte pas les emojis UTF-8
-
-**Solution** : Exécutez cette commande avant de lancer les applications Java :
-```cmd
-chcp 65001
-```
-
-Cela force l'encodage UTF-8 dans le terminal. Sinon, utilisez Windows Terminal qui offre une meilleure prise en charge de l'Unicode.
-
-### Débogage des appels API
-
-**Problème** : Erreurs d'authentification, limites de taux ou réponses inattendues du modèle d'IA
-
-**Solution** : Les exemples incluent `.logRequests(true)` et `.logResponses(true)` pour afficher les appels API dans la console. Cela aide à dépanner les erreurs d'authentification, les limites de taux ou les réponses inattendues. Supprimez ces options en production pour réduire les logs.
-
----
-
-
-**Avertissement** :
-Ce document a été traduit à l’aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforçons d’assurer l’exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d’origine doit être considéré comme la source faisant foi. Pour les informations cruciales, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou de mauvaises interprétations résultant de l’utilisation de cette traduction.
-
\ No newline at end of file
diff --git a/translations/fr/01-introduction/README.md b/translations/fr/01-introduction/README.md
index d7590965a..fd880bba3 100644
--- a/translations/fr/01-introduction/README.md
+++ b/translations/fr/01-introduction/README.md
@@ -1,22 +1,22 @@
-# Module 01 : Démarrage avec LangChain4j
+# Module 01 : Premiers pas avec LangChain4j
## Table des matières
-- [Présentation vidéo](../../../01-introduction)
-- [Ce que vous apprendrez](../../../01-introduction)
-- [Prérequis](../../../01-introduction)
-- [Comprendre le problème central](../../../01-introduction)
-- [Comprendre les tokens](../../../01-introduction)
-- [Comment fonctionne la mémoire](../../../01-introduction)
-- [Comment cela utilise LangChain4j](../../../01-introduction)
-- [Déployer l'infrastructure Azure OpenAI](../../../01-introduction)
-- [Exécuter l'application localement](../../../01-introduction)
-- [Utiliser l'application](../../../01-introduction)
- - [Chat sans état (panneau de gauche)](../../../01-introduction)
- - [Conversation avec état (panneau de droite)](../../../01-introduction)
-- [Étapes suivantes](../../../01-introduction)
-
-## Présentation vidéo
+- [Présentation Vidéo](#présentation-vidéo)
+- [Ce que vous apprendrez](#ce-que-vous-apprendrez)
+- [Prérequis](#prérequis)
+- [Comprendre le problème central](#comprendre-le-problème-central)
+- [Comprendre les jetons](#comprendre-les-jetons)
+- [Comment fonctionne la mémoire](#comment-fonctionne-la-mémoire)
+- [Comment cela utilise LangChain4j](#comment-cela-utilise-langchain4j)
+- [Déployer l'infrastructure Azure OpenAI](#déployer-linfrastructure-azure-openai)
+- [Exécuter l'application localement](#exécuter-lapplication-localement)
+- [Utiliser l'application](#utiliser-lapplication)
+ - [Chat sans état (panneau gauche)](#chat-sans-état-panneau-gauche)
+ - [Chat avec état (panneau droit)](#chat-avec-état-panneau-droit)
+- [Étapes suivantes](#étapes-suivantes)
+
+## Présentation Vidéo
Regardez cette session en direct qui explique comment commencer avec ce module :
@@ -24,20 +24,20 @@ Regardez cette session en direct qui explique comment commencer avec ce module :
## Ce que vous apprendrez
-Dans le démarrage rapide, vous avez utilisé GitHub Models pour envoyer des invites, appeler des outils, construire un pipeline RAG et tester des garde-fous. Ces démonstrations montraient ce qui est possible — maintenant nous passons à Azure OpenAI et GPT-5.2 pour commencer à construire des applications de style production. Ce module se concentre sur l'IA conversationnelle qui se souvient du contexte et maintient l'état — les concepts que ces démonstrations en démarrage rapide utilisaient en coulisses mais n'expliquaient pas.
+C'est votre point de départ avec LangChain4j et Azure OpenAI. Nous commençons par les fondamentaux et commençons à construire des applications de type production. Ce module se concentre sur l'IA conversationnelle qui se souvient du contexte et maintient l'état — les concepts fondamentaux sur lesquels chaque module ultérieur se base.
-Nous utiliserons Azure OpenAI GPT-5.2 tout au long de ce guide car ses capacités avancées de raisonnement rendent le comportement de différents modèles plus apparent. Lorsque vous ajoutez de la mémoire, vous verrez clairement la différence. Cela facilite la compréhension de ce que chaque composant apporte à votre application.
+Nous utiliserons GPT-5.2 d'Azure OpenAI tout au long de ce guide car ses capacités de raisonnement avancées rendent le comportement des différents modèles plus évident. Lorsque vous ajoutez la mémoire, vous verrez clairement la différence. Cela facilite la compréhension de ce que chaque composant apporte à votre application.
-Vous construirez une application démontrant les deux modèles :
+Vous construirez une application qui démontre les deux modèles :
-**Chat sans état** - Chaque requête est indépendante. Le modèle n'a aucun souvenir des messages précédents. C'est le modèle que vous avez utilisé dans le démarrage rapide.
+**Chat sans état** – Chaque requête est indépendante. Le modèle ne se souvient pas des messages précédents. C’est le point de départ le plus simple.
-**Conversation avec état** - Chaque requête inclut l'historique de la conversation. Le modèle maintient le contexte à travers plusieurs échanges. C'est ce que nécessitent les applications en production.
+**Conversation avec état** – Chaque requête inclut l’historique de la conversation. Le modèle conserve le contexte sur plusieurs tours. C’est ce dont les applications en production ont besoin.
## Prérequis
-- Abonnement Azure avec accès à Azure OpenAI
-- Java 21, Maven 3.9+
+- Abonnement Azure avec accès Azure OpenAI
+- Java 21, Maven 3.9+
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
@@ -47,41 +47,41 @@ Vous construirez une application démontrant les deux modèles :
## Comprendre le problème central
-Les modèles de langage sont sans état. Chaque appel API est indépendant. Si vous envoyez "Je m'appelle John" puis demandez "Comment je m'appelle ?", le modèle ne sait pas que vous venez de vous présenter. Il traite chaque requête comme si c'était la première conversation que vous avez jamais eue.
+Les modèles de langage sont sans état. Chaque appel API est indépendant. Si vous envoyez « Je m’appelle John » puis demandez « Quel est mon nom ? », le modèle n’a aucune idée que vous venez de vous présenter. Il traite chaque requête comme si c'était la toute première conversation que vous avez jamais eue.
-C'est suffisant pour des questions-réponses simples mais inutilisable pour de vraies applications. Les bots de service client doivent se souvenir de ce que vous leur avez dit. Les assistants personnels ont besoin de contexte. Toute conversation à plusieurs tours nécessite de la mémoire.
+Cela fonctionne pour des questions-réponses simples mais est inutile pour de vraies applications. Les bots de service client doivent se souvenir de ce que vous leur avez dit. Les assistants personnels ont besoin de contexte. Toute conversation multi-tours nécessite une mémoire.
-Le schéma suivant contraste les deux approches — à gauche, un appel sans état qui oublie votre nom ; à droite, un appel avec état soutenu par ChatMemory qui s'en souvient.
+Le diagramme suivant contraste les deux approches — à gauche, un appel sans état qui oublie votre nom ; à droite, un appel avec état soutenu par ChatMemory qui s'en souvient.
-*La différence entre les conversations sans état (appels indépendants) et avec état (contexte pris en compte)*
+*La différence entre conversations sans état (appels indépendants) et avec état (contexte pris en compte)*
-## Comprendre les tokens
+## Comprendre les jetons
-Avant d'entrer dans les conversations, il est important de comprendre les tokens - les unités de base de texte que les modèles de langage traitent :
+Avant d’aller dans les conversations, il est important de comprendre les jetons - les unités de base du texte que les modèles de langage traitent :
-*Exemple de comment un texte est découpé en tokens - "I love AI!" devient 4 unités de traitement distinctes*
+*Exemple de découpage du texte en jetons - « I love AI ! » devient 4 unités de traitement distinctes*
-Les tokens sont la manière dont les modèles d'IA mesurent et traitent le texte. Les mots, la ponctuation et même les espaces peuvent être des tokens. Votre modèle a une limite sur le nombre de tokens qu'il peut traiter à la fois (400 000 pour GPT-5.2, avec jusqu'à 272 000 tokens d'entrée et 128 000 tokens de sortie). Comprendre les tokens vous aide à gérer la longueur de la conversation et les coûts.
+Les jetons sont la manière dont les modèles IA mesurent et traitent le texte. Les mots, la ponctuation, et même les espaces peuvent être des jetons. Votre modèle a une limite du nombre de jetons qu'il peut traiter en une fois (400 000 pour GPT-5.2, avec jusqu’à 272 000 jetons d’entrée et 128 000 jetons de sortie). Comprendre les jetons vous aide à gérer la longueur des conversations et les coûts.
## Comment fonctionne la mémoire
-La mémoire de conversation résout le problème de l'absence d'état en maintenant l'historique des échanges. Avant d'envoyer votre requête au modèle, le cadre ajoute en préfixe les messages précédents pertinents. Quand vous demandez "Comment je m'appelle ?", le système envoie en réalité l’historique complet des messages, permettant au modèle de voir que vous avez précédemment dit "Je m'appelle John".
+La mémoire de chat résout le problème sans état en maintenant l’historique de la conversation. Avant d’envoyer votre requête au modèle, le cadre préfixe les messages précédents pertinents. Quand vous demandez « Quel est mon nom ? », le système envoie en réalité tout l’historique de la conversation, permettant au modèle de voir que vous avez précédemment dit « Je m’appelle John ».
-LangChain4j fournit des implémentations de mémoire qui gèrent cela automatiquement. Vous choisissez combien de messages conserver et le cadre gère la fenêtre de contexte. Le schéma ci-dessous montre comment MessageWindowChatMemory maintient une fenêtre coulissante des messages récents.
+LangChain4j fournit des implémentations de mémoire qui gèrent cela automatiquement. Vous choisissez combien de messages conserver et le cadre gère la fenêtre contextuelle. Le schéma ci-dessous montre comment MessageWindowChatMemory maintient une fenêtre coulissante des messages récents.
-*MessageWindowChatMemory maintient une fenêtre coulissante des messages récents, supprimant automatiquement les anciens*
+*MessageWindowChatMemory maintient une fenêtre coulissante de messages récents, retirant automatiquement les anciens*
## Comment cela utilise LangChain4j
-Ce module étend le démarrage rapide en intégrant Spring Boot et en ajoutant la mémoire de conversation. Voici comment les éléments s'assemblent :
+Ce module intègre Spring Boot et ajoute la mémoire de conversation. Voici comment les pièces s’assemblent :
-**Dépendances** — Ajoutez deux bibliothèques LangChain4j :
+**Dépendances** – Ajoutez deux bibliothèques LangChain4j :
```xml
@@ -94,7 +94,7 @@ Ce module étend le démarrage rapide en intégrant Spring Boot et en ajoutant l
```
-**Modèle de chat** — Configurez Azure OpenAI comme bean Spring ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)) :
+**Modèle de Chat** – Configurez Azure OpenAI comme un bean Spring ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)) :
```java
@Bean
@@ -109,9 +109,9 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-Le builder lit les identifiants depuis les variables d’environnement définies par `azd up`. Le paramètre `baseUrl` pointant vers votre point de terminaison Azure permet au client OpenAI de fonctionner avec Azure OpenAI.
+Le builder lit les identifiants depuis les variables d’environnement définies par `azd up`. Le paramètre `baseUrl` vers votre point d’accès Azure permet au client OpenAI de fonctionner avec Azure OpenAI.
-**Mémoire de conversation** — Suivez l’historique du chat avec MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)) :
+**Mémoire de conversation** – Suivez l’historique du chat avec MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)) :
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -124,39 +124,39 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-Créez la mémoire avec `withMaxMessages(10)` pour conserver les 10 derniers messages. Ajoutez les messages utilisateur et IA avec des wrappers typés : `UserMessage.from(text)` et `AiMessage.from(text)`. Récupérez l’historique avec `memory.messages()` et envoyez-le au modèle. Le service stocke des instances de mémoire séparées par ID de conversation, permettant à plusieurs utilisateurs de discuter simultanément.
+Créez la mémoire avec `withMaxMessages(10)` pour conserver les 10 derniers messages. Ajoutez les messages utilisateur et IA avec des wrappers typés : `UserMessage.from(text)` et `AiMessage.from(text)`. Récupérez l’historique avec `memory.messages()` et envoyez-le au modèle. Le service stocke des instances de mémoire distinctes par ID de conversation, permettant à plusieurs utilisateurs de discuter simultanément.
> **🤖 Essayez avec [GitHub Copilot](https://github.com/features/copilot) Chat :** Ouvrez [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) et demandez :
-> - « Comment MessageWindowChatMemory décide-t-il quels messages supprimer lorsque la fenêtre est pleine ? »
-> - « Puis-je implémenter un stockage mémoire personnalisé utilisant une base de données au lieu de la mémoire en RAM ? »
-> - « Comment ajouter un résumé pour compresser l'historique ancien des conversations ? »
+> - "Comment MessageWindowChatMemory décide-t-il quels messages supprimer lorsque la fenêtre est pleine ?"
+> - "Puis-je implémenter un stockage de mémoire personnalisé en utilisant une base de données plutôt que la mémoire in-memory ?"
+> - "Comment ajouterais-je une synthèse pour compresser l’historique de la conversation ancienne ?"
-Le point de terminaison de chat sans état ignore la mémoire — juste `chatModel.chat(prompt)` comme dans le démarrage rapide. Le point de terminaison avec état ajoute les messages à la mémoire, récupère l’historique et inclut ce contexte à chaque requête. Même configuration de modèle, modèles différents.
+L’endpoint de chat sans état évite complètement la mémoire – juste `chatModel.chat(prompt)` comme le démarrage rapide. L’endpoint avec état ajoute les messages à la mémoire, récupère l’historique et inclut ce contexte à chaque requête. Même configuration du modèle, modèles différents.
## Déployer l'infrastructure Azure OpenAI
**Bash :**
```bash
cd 01-introduction
-azd up # Sélectionnez l'abonnement et l'emplacement (eastus2 recommandé)
+azd up # Sélectionnez l’abonnement et l’emplacement (eastus2 recommandé)
```
**PowerShell :**
```powershell
cd 01-introduction
-azd up # Sélectionnez l'abonnement et l'emplacement (estus2 recommandé)
+azd up # Sélectionnez l'abonnement et l'emplacement (eastus2 recommandé)
```
-> **Note :** Si vous rencontrez une erreur de type timeout (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), exécutez simplement `azd up` de nouveau. Les ressources Azure peuvent être encore en cours de provisionnement en arrière-plan, et réessayer permet au déploiement de se terminer une fois que les ressources sont dans un état terminal.
+> **Note :** Si vous rencontrez une erreur de timeout (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), lancez simplement `azd up` à nouveau. Les ressources Azure peuvent encore être en cours de provisionnement en arrière-plan, et retenter permet au déploiement de se terminer une fois les ressources à un état terminal.
Cela va :
1. Déployer la ressource Azure OpenAI avec les modèles GPT-5.2 et text-embedding-3-small
-2. Générer automatiquement le fichier `.env` à la racine du projet avec les identifiants
+2. Générer automatiquement un fichier `.env` à la racine du projet avec les identifiants
3. Configurer toutes les variables d’environnement nécessaires
-**Vous avez des problèmes de déploiement ?** Consultez le [README Infrastructure](infra/README.md) pour un dépannage détaillé incluant les conflits de noms de sous-domaines, les étapes manuelles via le portail Azure, et des conseils sur la configuration du modèle.
+**Vous avez des problèmes de déploiement ?** Consultez le [README Infrastructure](infra/README.md) pour des conseils détaillés de dépannage incluant conflits de noms de sous-domaines, étapes manuelles de déploiement via le portail Azure, et guide de configuration des modèles.
-**Vérifiez que le déploiement a réussi :**
+**Vérifier que le déploiement a réussi :**
**Bash :**
```bash
@@ -168,7 +168,7 @@ cat ../.env # Devrait afficher AZURE_OPENAI_ENDPOINT, API_KEY, etc.
Get-Content ..\.env # Devrait afficher AZURE_OPENAI_ENDPOINT, API_KEY, etc.
```
-> **Note :** La commande `azd up` génère automatiquement le fichier `.env`. Si vous devez le mettre à jour plus tard, vous pouvez soit éditer le fichier `.env` manuellement, soit le régénérer en exécutant :
+> **Note :** La commande `azd up` génère automatiquement le fichier `.env`. Si vous avez besoin de le mettre à jour plus tard, vous pouvez soit éditer manuellement le fichier `.env`, soit le régénérer en lançant :
>
> **Bash :**
> ```bash
@@ -184,7 +184,7 @@ Get-Content ..\.env # Devrait afficher AZURE_OPENAI_ENDPOINT, API_KEY, etc.
## Exécuter l'application localement
-**Vérifiez le déploiement :**
+**Vérifier le déploiement :**
Assurez-vous que le fichier `.env` existe à la racine avec les identifiants Azure. Exécutez ceci depuis le répertoire du module (`01-introduction/`) :
@@ -200,21 +200,21 @@ Get-Content ..\.env # Devrait afficher AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYME
**Démarrer les applications :**
-**Option 1 : Utiliser le Spring Boot Dashboard (recommandé pour les utilisateurs de VS Code)**
+**Option 1 : Utiliser Spring Boot Dashboard (recommandé pour les utilisateurs VS Code)**
-Le conteneur de développement inclut l’extension Spring Boot Dashboard, qui fournit une interface visuelle pour gérer toutes les applications Spring Boot. Vous pouvez le trouver dans la barre d’activité à gauche de VS Code (recherchez l’icône Spring Boot).
+Le conteneur de développement inclut l’extension Spring Boot Dashboard, qui fournit une interface visuelle pour gérer toutes les applications Spring Boot. Vous le trouverez dans la barre d’activités à gauche dans VS Code (cherchez l’icône Spring Boot).
Depuis le Spring Boot Dashboard, vous pouvez :
- Voir toutes les applications Spring Boot disponibles dans l’espace de travail
-- Démarrer/arrêter les applications en un clic
-- Voir les logs d’application en temps réel
-- Surveiller l'état des applications
+- Démarrer/arrêter les applications d’un simple clic
+- Visualiser les logs des applications en temps réel
+- Surveiller l’état des applications
-Il suffit de cliquer sur le bouton play à côté de "introduction" pour démarrer ce module, ou de lancer tous les modules à la fois.
+Cliquez simplement sur le bouton lecture à côté de « introduction » pour lancer ce module, ou démarrez tous les modules en une fois.
-*Le Spring Boot Dashboard dans VS Code — démarrez, arrêtez et surveillez tous les modules depuis un seul endroit*
+*Le Spring Boot Dashboard dans VS Code — démarrer, arrêter et surveiller tous les modules depuis un seul endroit*
**Option 2 : Utiliser des scripts shell**
@@ -232,7 +232,7 @@ cd .. # Depuis le répertoire racine
.\start-all.ps1
```
-Ou démarrez juste ce module :
+Ou démarrez seulement ce module :
**Bash :**
```bash
@@ -246,9 +246,9 @@ cd 01-introduction
.\start.ps1
```
-Les deux scripts chargent automatiquement les variables d'environnement à partir du fichier `.env` à la racine et construiront les JARs s'ils n'existent pas.
+Les deux scripts chargent automatiquement les variables d'environnement depuis le fichier `.env` à la racine et compileront les JAR si ceux-ci n’existent pas encore.
-> **Note :** Si vous préférez construire manuellement tous les modules avant de démarrer :
+> **Note :** Si vous préférez compiler tous les modules manuellement avant de démarrer :
>
> **Bash :**
> ```bash
@@ -268,55 +268,55 @@ Ouvrez http://localhost:8080 dans votre navigateur.
**Bash :**
```bash
-./stop.sh # Ce module uniquement
+./stop.sh # Ce module seulement
# Ou
cd .. && ./stop-all.sh # Tous les modules
```
**PowerShell :**
```powershell
-.\stop.ps1 # Ce module uniquement
+.\stop.ps1 # Ce module seulement
# Ou
cd ..; .\stop-all.ps1 # Tous les modules
```
## Utiliser l'application
-L'application fournit une interface web avec deux implémentations de chat côte à côte.
+L’application fournit une interface web avec deux implémentations de chat côte à côte.
-*Tableau de bord montrant à la fois Simple Chat (sans état) et Conversational Chat (avec état)*
+*Tableau de bord montrant les options Chat Simple (sans état) et Chat Conversationnel (avec état)*
-### Chat sans état (panneau de gauche)
+### Chat sans état (panneau gauche)
-Testez ceci en premier. Dites « Je m'appelle John » puis demandez immédiatement « Comment je m'appelle ? » Le modèle ne se souviendra pas car chaque message est indépendant. Cela démontre le problème central avec l’intégration basique des modèles de langage – absence de contexte de conversation.
+Essayez d’abord celui-ci. Dites « Je m’appelle John » puis demandez immédiatement « Quel est mon nom ? » Le modèle ne s’en souviendra pas car chaque message est indépendant. Cela illustre le problème central de l’intégration simple du modèle de langue — aucun contexte de conversation.
*L’IA ne se souvient pas de votre nom du message précédent*
-### Conversation avec état (panneau de droite)
+### Chat avec état (panneau droit)
-Essayez maintenant la même séquence ici. Dites « Je m'appelle John » puis « Comment je m'appelle ? » Cette fois il s’en souvient. La différence est MessageWindowChatMemory – il maintient l’historique de la conversation et l’inclut dans chaque requête. C’est ainsi que fonctionne l’IA conversationnelle en production.
+Essayez maintenant la même séquence ici. Dites « Je m’appelle John » puis « Quel est mon nom ? » Cette fois, elle s’en souvient. La différence vient de MessageWindowChatMemory – elle maintient l’historique de la conversation et l’inclut à chaque requête. C’est ainsi que fonctionne l’IA conversationnelle en production.
-*L’IA se souvient de votre nom plus tôt dans la conversation*
+*L’IA se souvient de votre nom depuis le début de la conversation*
-Les deux panneaux utilisent le même modèle GPT-5.2. La seule différence est la mémoire. Cela montre clairement ce que la mémoire apporte à votre application et pourquoi elle est essentielle pour les cas d’utilisation réels.
+Les deux panneaux utilisent le même modèle GPT-5.2. La seule différence est la mémoire. Cela montre clairement ce que la mémoire apporte à votre application et pourquoi elle est essentielle pour les cas d’usage réels.
## Étapes suivantes
-**Module suivant :** [02-prompt-engineering - Création d'invites avec GPT-5.2](../02-prompt-engineering/README.md)
+**Module suivant :** [02-prompt-engineering - Prompt Engineering avec GPT-5.2](../02-prompt-engineering/README.md)
---
-**Navigation :** [← Précédent : Module 00 - Démarrage rapide](../00-quick-start/README.md) | [Retour au principal](../README.md) | [Suivant : Module 02 - Création d'invites →](../02-prompt-engineering/README.md)
+**Navigation :** [← Retour au principal](../README.md) | [Suivant : Module 02 - Prompt Engineering →](../02-prompt-engineering/README.md)
---
-**Clause de non-responsabilité** :
-Ce document a été traduit à l'aide du service de traduction automatisée [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent comporter des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour toute information critique, il est recommandé de faire appel à une traduction professionnelle réalisée par un humain. Nous ne saurions être tenus responsables des malentendus ou erreurs d'interprétation résultant de l'utilisation de cette traduction.
+**Avertissement** :
+Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforçions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour les informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous ne saurions être tenus responsables des malentendus ou erreurs d'interprétation découlant de l'utilisation de cette traduction.
\ No newline at end of file
diff --git a/translations/fr/02-prompt-engineering/README.md b/translations/fr/02-prompt-engineering/README.md
index f76bfe742..a776b7e79 100644
--- a/translations/fr/02-prompt-engineering/README.md
+++ b/translations/fr/02-prompt-engineering/README.md
@@ -1,101 +1,101 @@
-# Module 02 : Ingénierie des prompts avec GPT-5.2
+# Module 02 : Ingénierie des invites avec GPT-5.2
## Table des matières
-- [Présentation vidéo](../../../02-prompt-engineering)
-- [Ce que vous apprendrez](../../../02-prompt-engineering)
-- [Prérequis](../../../02-prompt-engineering)
-- [Comprendre l'ingénierie des prompts](../../../02-prompt-engineering)
-- [Fondamentaux de l'ingénierie des prompts](../../../02-prompt-engineering)
- - [Prompting Zero-Shot](../../../02-prompt-engineering)
- - [Prompting Few-Shot](../../../02-prompt-engineering)
- - [Chaîne de pensée](../../../02-prompt-engineering)
- - [Prompting basé sur les rôles](../../../02-prompt-engineering)
- - [Modèles de prompts](../../../02-prompt-engineering)
-- [Schémas avancés](../../../02-prompt-engineering)
-- [Exécuter l'application](../../../02-prompt-engineering)
-- [Captures d'écran de l'application](../../../02-prompt-engineering)
-- [Exploration des schémas](../../../02-prompt-engineering)
- - [Faible vs Forte Empressement](../../../02-prompt-engineering)
- - [Exécution de tâches (préambules d'outils)](../../../02-prompt-engineering)
- - [Code auto-réfléchissant](../../../02-prompt-engineering)
- - [Analyse structurée](../../../02-prompt-engineering)
- - [Chat multi-tours](../../../02-prompt-engineering)
- - [Raisonnement étape par étape](../../../02-prompt-engineering)
- - [Sortie contrainte](../../../02-prompt-engineering)
-- [Ce que vous apprenez vraiment](../../../02-prompt-engineering)
-- [Étapes suivantes](../../../02-prompt-engineering)
+- [Présentation vidéo](#présentation-vidéo)
+- [Ce que vous allez apprendre](#ce-que-vous-allez-apprendre)
+- [Prérequis](#prérequis)
+- [Comprendre l'ingénierie des invites](#comprendre-lingénierie-des-invites)
+- [Fondamentaux de l'ingénierie des invites](#fondamentaux-de-lingénierie-des-invites)
+ - [Invites zéro-coup](#invites-zéro-coup)
+ - [Invites à quelques exemples](#invites-à-quelques-exemples)
+ - [Chaîne de pensée](#chaîne-de-pensée)
+ - [Invites basées sur un rôle](#invites-basées-sur-un-rôle)
+ - [Modèles d'invites](#modèles-dinvites)
+- [Modèles avancés](#modèles-avancés)
+- [Exécuter l'application](#exécuter-l’application)
+- [Captures d'écran de l'application](#captures-d’écran-de-l’application)
+- [Explorer les modèles](#exploration-des-motifs)
+ - [Faible vs forte motivation](#faible-vs-forte-implication)
+ - [Exécution des tâches (préambules d’outils)](#exécution-de-tâches-préambules-d’outil)
+ - [Code auto-réfléchi](#code-auto-réfléchi)
+ - [Analyse structurée](#analyse-structurée)
+ - [Chat multi-interactions](#chat-multi-tour)
+ - [Raisonnement étape par étape](#raisonnement-étape-par-étape)
+ - [Sortie contrainte](#sortie-contraint)
+- [Ce que vous apprenez réellement](#ce-que-vous-apprenez-vraiment)
+- [Étapes suivantes](#étapes-suivantes)
## Présentation vidéo
Regardez cette session en direct qui explique comment démarrer avec ce module :
-
+
-## Ce que vous apprendrez
+## Ce que vous allez apprendre
-Le diagramme suivant donne un aperçu des sujets clés et des compétences que vous développerez dans ce module — des techniques de raffinage des prompts au workflow étape par étape que vous suivrez.
+Le diagramme suivant offre un aperçu des thèmes clés et des compétences que vous développerez dans ce module — des techniques de raffinement d’invites au flux de travail étape par étape que vous suivrez.
-
+
-Dans les modules précédents, vous avez exploré les interactions basiques de LangChain4j avec les modèles GitHub et vu comment la mémoire permet l'IA conversationnelle avec Azure OpenAI. Nous allons maintenant nous concentrer sur la manière dont vous posez des questions — les prompts eux-mêmes — en utilisant GPT-5.2 d'Azure OpenAI. La façon dont vous structurez vos prompts influence considérablement la qualité des réponses. Nous commençons par une revue des techniques fondamentales de prompting, puis passons à huit schémas avancés qui exploitent pleinement les capacités de GPT-5.2.
+Dans le module précédent, vous avez vu comment la mémoire permet l’IA conversationnelle avec Azure OpenAI. Maintenant, nous allons nous concentrer sur la façon dont vous posez les questions — les invites elles-mêmes — en utilisant GPT-5.2 d’Azure OpenAI. La manière dont vous structurez vos invites influence fortement la qualité des réponses obtenues. Nous commençons par une revue des techniques fondamentales d’invite, puis passons à huit modèles avancés qui tirent pleinement parti des capacités de GPT-5.2.
-Nous utiliserons GPT-5.2 car il introduit le contrôle du raisonnement — vous pouvez indiquer au modèle combien de réflexion effectuer avant de répondre. Cela rend les différentes stratégies de prompting plus apparentes et vous aide à comprendre quand utiliser chaque approche. Nous profiterons également des limites de taux plus souples d'Azure pour GPT-5.2 par rapport aux modèles GitHub.
+Nous utilisons GPT-5.2 car il introduit un contrôle du raisonnement — vous pouvez indiquer au modèle combien de réflexion effectuer avant de répondre. Cela rend les différentes stratégies d’invite plus évidentes et vous aide à comprendre quand utiliser chaque approche.
## Prérequis
-- Module 01 complété (ressources Azure OpenAI déployées)
-- Fichier `.env` dans le répertoire racine avec les identifiants Azure (créé par `azd up` dans le Module 01)
+- Module 01 terminé (ressources Azure OpenAI déployées)
+- Fichier `.env` à la racine avec les identifiants Azure (créé par `azd up` dans le Module 01)
-> **Note :** Si vous n'avez pas terminé le Module 01, suivez d'abord les instructions de déploiement là-bas.
+> **Note :** Si vous n’avez pas terminé le Module 01, suivez d’abord les instructions de déploiement indiquées là-bas.
-## Comprendre l'ingénierie des prompts
+## Comprendre l'ingénierie des invites
-Fondamentalement, l'ingénierie des prompts est la différence entre des consignes vagues et précises, comme l'illustre la comparaison ci-dessous.
+Fondamentalement, l’ingénierie des invites est ce qui différencie des instructions vagues d’instructions précises, comme l’illustre la comparaison ci-dessous.
-
+
-L'ingénierie des prompts consiste à concevoir un texte d'entrée qui vous donne systématiquement les résultats dont vous avez besoin. Il ne s'agit pas seulement de poser des questions — il s'agit de structurer les requêtes pour que le modèle comprenne exactement ce que vous voulez et comment le fournir.
+L’ingénierie des invites consiste à concevoir un texte d’entrée qui vous donne systématiquement les résultats souhaités. Ce n’est pas seulement poser des questions — c’est structurer les requêtes pour que le modèle comprenne exactement ce que vous voulez et comment le fournir.
-Pensez-y comme donner des instructions à un collègue. « Corrige le bug » est vague. « Corrige l'exception de pointeur nul dans UserService.java ligne 45 en ajoutant une vérification de null » est précis. Les modèles de langage fonctionnent de la même manière — la précision et la structure comptent.
+Pensez-y comme donner des instructions à un collègue. "Corrige le bug" est vague. "Corrige l’exception de pointeur nul dans UserService.java ligne 45 en ajoutant une vérification de null" est précis. Les modèles linguistiques fonctionnent de la même manière — la précision et la structure comptent.
-Le diagramme ci-dessous montre comment LangChain4j s'intègre dans ce schéma — connectant vos modèles de prompt au modèle via les blocs `SystemMessage` et `UserMessage`.
+Le diagramme ci-dessous montre comment LangChain4j s’intègre dans ce cadre — en connectant vos modèles d’invites au modèle via les blocs `SystemMessage` et `UserMessage`.
-
+
-LangChain4j fournit l'infrastructure — connexions aux modèles, mémoire et types de messages — tandis que les schémas de prompt sont simplement du texte structuré que vous envoyez à travers cette infrastructure. Les blocs de construction clés sont `SystemMessage` (qui définit le comportement et le rôle de l'IA) et `UserMessage` (qui porte votre demande réelle).
+LangChain4j fournit l’infrastructure — connexions au modèle, mémoire et types de messages — tandis que les modèles d’invites ne sont que des textes soigneusement structurés que vous envoyez via cette infrastructure. Les éléments clés sont `SystemMessage` (qui définit le comportement et le rôle de l’IA) et `UserMessage` (qui contient votre requête réelle).
-## Fondamentaux de l'ingénierie des prompts
+## Fondamentaux de l'ingénierie des invites
-Les cinq techniques principales montrées ci-dessous forment la base d'une ingénierie des prompts efficace. Chacune aborde un aspect différent de la façon dont vous communiquez avec les modèles de langage.
+Les cinq techniques principales ci-dessous forment la base d’une ingénierie des invites efficace. Chacune couvre un aspect différent de la communication avec les modèles linguistiques.
-
+
-Avant de plonger dans les schémas avancés de ce module, revoyons cinq techniques fondamentales de prompting. Ce sont les blocs de construction que tout ingénieur en prompts devrait connaître. Si vous avez déjà travaillé le [module de démarrage rapide](../00-quick-start/README.md#2-prompt-patterns), vous les avez vus en action — voici le cadre conceptuel derrière eux.
+Avant d’aborder les modèles avancés de ce module, passons en revue cinq techniques fondamentales d’invite. Ce sont les blocs de construction que tout ingénieur d’invites doit connaître.
-### Prompting Zero-Shot
+### Invites zéro-coup
-L'approche la plus simple : donnez au modèle une instruction directe sans exemples. Le modèle s'appuie entièrement sur son entraînement pour comprendre et exécuter la tâche. Cela fonctionne bien pour des demandes simples où le comportement attendu est évident.
+L’approche la plus simple : donner une instruction directe au modèle sans exemples. Le modèle s’appuie entièrement sur son entraînement pour comprendre et exécuter la tâche. Cela fonctionne bien pour des requêtes simples où le comportement attendu est évident.
-
+
-*Instruction directe sans exemples — le modèle déduit la tâche à partir de l'instruction seule*
+*Instruction directe sans exemples — le modèle infère la tâche à partir de l’instruction seule*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
String response = model.chat(prompt);
-// Réponse : "Positif"
+// Réponse : « Positive »
```
-**Quand utiliser :** classifications simples, questions directes, traductions, ou toute tâche que le modèle peut gérer sans orientation supplémentaire.
+**Quand utiliser :** Classifications simples, questions directes, traductions ou toute tâche que le modèle peut gérer sans guidance supplémentaire.
-### Prompting Few-Shot
+### Invites à quelques exemples
-Fournissez des exemples qui montrent le modèle le schéma que vous voulez qu’il suive. Le modèle apprend le format entrée-sortie attendu à partir de vos exemples et l'applique aux nouvelles entrées. Cela améliore considérablement la cohérence pour des tâches où le format ou le comportement désiré n'est pas évident.
+Fournissez des exemples qui montrent le modèle le modèle à suivre. Le modèle apprend le format attendu entrée-sortie à partir de vos exemples et l’applique aux nouvelles entrées. Cela améliore considérablement la cohérence pour les tâches où le format ou le comportement souhaité n’est pas évident.
-
+
-*Apprentissage par exemples — le modèle identifie le schéma et l'applique aux nouvelles entrées*
+*Apprentissage par exemples — le modèle identifie le modèle et l’applique à de nouvelles entrées*
```java
String prompt = """
@@ -112,11 +112,11 @@ String prompt = """
String response = model.chat(prompt);
```
-**Quand utiliser :** classifications personnalisées, formatage cohérent, tâches spécifiques à un domaine, ou lorsque les résultats zero-shot sont incohérents.
+**Quand utiliser :** Classifications personnalisées, formatage cohérent, tâches spécifiques au domaine, ou quand les résultats zéro-coup sont incohérents.
### Chaîne de pensée
-Demandez au modèle de montrer son raisonnement étape par étape. Au lieu de sauter directement à une réponse, le modèle décompose le problème et travaille chaque partie explicitement. Cela améliore la précision pour les mathématiques, la logique et les raisonnements multi-étapes.
+Demandez au modèle de montrer son raisonnement étape par étape. Au lieu de passer directement à une réponse, le modèle décompose le problème et traite chaque partie explicitement. Cela améliore la précision sur les tâches de mathématiques, logique et raisonnement en plusieurs étapes.
@@ -133,15 +133,15 @@ String response = model.chat(prompt);
// Le modèle montre : 15 - 8 = 7, puis 7 + 12 = 19 pommes
```
-**Quand utiliser :** problèmes mathématiques, énigmes logiques, débogage, ou toute tâche où montrer le raisonnement améliore l'exactitude et la confiance.
+**Quand utiliser :** Problèmes mathématiques, casse-tête logiques, débogage, ou toute tâche où montrer le processus de raisonnement améliore la précision et la confiance.
-### Prompting basé sur les rôles
+### Invites basées sur un rôle
-Définissez une persona ou un rôle pour l'IA avant de poser votre question. Cela fournit un contexte qui façonne le ton, la profondeur et le focus de la réponse. Un « architecte logiciel » donne des conseils différents d'un « développeur junior » ou d'un « auditeur sécurité ».
+Attribuez un personnage ou un rôle à l’IA avant de poser votre question. Cela fournit un contexte qui façonne le ton, la profondeur et le focus de la réponse. Un « architecte logiciel » donne des conseils différents d’un « développeur junior » ou d’un « auditeur sécurité ».
-
+
-*Définir le contexte et la persona — la même question reçoit une réponse différente selon le rôle assigné*
+*Définition du contexte et du personnage — une même question reçoit une réponse différente selon le rôle assigné*
```java
String prompt = """
@@ -157,15 +157,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Quand utiliser :** revues de code, tutorat, analyses spécifiques à un domaine, ou lorsque vous avez besoin de réponses adaptées à un niveau d’expertise ou une perspective particulière.
+**Quand utiliser :** Revue de code, tutorat, analyse spécifique au domaine, ou quand vous avez besoin de réponses adaptées à un niveau d’expertise ou perspective particulière.
-### Modèles de prompts
+### Modèles d'invites
-Créez des prompts réutilisables avec des espaces réservés variables. Au lieu d'écrire un nouveau prompt à chaque fois, définissez un modèle une fois et remplissez-le avec différentes valeurs. La classe `PromptTemplate` de LangChain4j rend cela simple avec la syntaxe `{{variable}}`.
+Créez des invites réutilisables avec des espaces réservés variables. Au lieu d’écrire une nouvelle invite à chaque fois, définissez un modèle une fois et remplissez-le avec différentes valeurs. La classe `PromptTemplate` de LangChain4j facilite cela avec la syntaxe `{{variable}}`.
-
+
-*Prompts réutilisables avec espaces réservés variables — un modèle, de nombreuses utilisations*
+*Invites réutilisables avec espaces réservés variables — un modèle, de nombreuses utilisations*
```java
PromptTemplate template = PromptTemplate.from(
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**Quand utiliser :** requêtes répétées avec différentes entrées, traitement par lots, création de workflows IA réutilisables, ou tout scénario où la structure du prompt reste la même mais les données changent.
+**Quand utiliser :** Requêtes répétées avec différentes entrées, traitement par lots, construction de flux de travail IA réutilisables, ou tout scénario où la structure d’invite reste la même mais les données changent.
---
-Ces cinq fondamentaux vous donnent un solide kit d’outils pour la plupart des tâches de prompting. Le reste de ce module s’appuie dessus avec **huit schémas avancés** qui tirent parti du contrôle du raisonnement, de l'auto-évaluation et des capacités de sortie structurée de GPT-5.2.
+Ces cinq fondamentaux vous donnent une boîte à outils solide pour la plupart des tâches d’invite. Le reste de ce module s’appuie dessus avec **huit modèles avancés** qui exploitent le contrôle du raisonnement, l’auto-évaluation et les capacités de sortie structurée de GPT-5.2.
-## Schémas avancés
+## Modèles avancés
-Avec les fondamentaux couverts, passons aux huit schémas avancés qui rendent ce module unique. Tous les problèmes n’ont pas besoin de la même approche. Certaines questions demandent des réponses rapides, d’autres une réflexion profonde. Certaines ont besoin d'un raisonnement visible, d’autres seulement des résultats. Chaque schéma ci-dessous est optimisé pour un scénario différent — et le contrôle du raisonnement de GPT-5.2 rend les différences encore plus marquées.
+Avec les fondamentaux couverts, passons aux huit modèles avancés qui rendent ce module unique. Tous les problèmes ne nécessitent pas la même approche. Certaines questions requièrent des réponses rapides, d’autres une réflexion approfondie. Certaines ont besoin d’un raisonnement visible, d’autres seulement des résultats. Chaque modèle ci-dessous est optimisé pour un scénario différent — et le contrôle du raisonnement de GPT-5.2 accentue encore ces différences.
-
+
-*Vue d'ensemble des huit schémas d'ingénierie des prompts et leurs cas d'usage*
+*Vue d’ensemble des huit modèles d’ingénierie des invites et leurs cas d’utilisation*
-GPT-5.2 ajoute une autre dimension à ces schémas : *le contrôle du raisonnement*. Le curseur ci-dessous montre comment vous pouvez ajuster l’effort de réflexion du modèle — depuis des réponses rapides et directes jusqu’à une analyse profonde et minutieuse.
+GPT-5.2 ajoute une dimension supplémentaire à ces modèles : *le contrôle du raisonnement*. Le curseur ci-dessous montre comment vous pouvez ajuster l’effort de réflexion du modèle — de réponses rapides et directes à une analyse profonde et minutieuse.
-*Le contrôle du raisonnement de GPT-5.2 vous permet de spécifier combien de réflexion le modèle doit faire — des réponses rapides aux explorations approfondies*
+*Le contrôle du raisonnement de GPT-5.2 vous permet de spécifier combien de réflexion le modèle doit effectuer — des réponses rapides et directes à une exploration approfondie*
-**Faible empressement (Rapide & ciblé)** - Pour des questions simples où vous voulez des réponses rapides et directes. Le modèle fait un raisonnement minimal - maximum 2 étapes. Utilisez cela pour des calculs, recherches, ou questions simples.
+**Faible motivation (Rapide & ciblé)** – Pour les questions simples où vous souhaitez des réponses rapides et directes. Le modèle fait un minimum de raisonnement — maximum 2 étapes. Utilisez ceci pour des calculs, des consultations ou des questions simples.
```java
String prompt = """
@@ -220,11 +220,11 @@ String response = chatModel.chat(prompt);
```
> 💡 **Explorez avec GitHub Copilot :** Ouvrez [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) et demandez :
-> - « Quelle est la différence entre les schémas de faible et fort empressement en prompting ? »
-> - « Comment les balises XML dans les prompts aident-elles à structurer la réponse de l’IA ? »
-> - « Quand devrais-je utiliser les schémas d'auto-réflexion vs l'instruction directe ? »
+> - « Quelle est la différence entre les modèles d’invite à faible et haute motivation ? »
+> - « Comment les balises XML dans les invites aident-elles à structurer la réponse de l’IA ? »
+> - « Quand dois-je utiliser les modèles d’auto-réflexion vs l’instruction directe ? »
-**Fort empressement (Profond & minutieux)** - Pour des problèmes complexes où vous voulez une analyse complète. Le modèle explore en profondeur et montre un raisonnement détaillé. Utilisez cela pour la conception de systèmes, décisions d’architecture, ou recherches complexes.
+**Haute motivation (Profond & minutieux)** – Pour les problèmes complexes où vous souhaitez une analyse complète. Le modèle explore en profondeur et montre un raisonnement détaillé. Utilisez ceci pour la conception système, les décisions d’architecture ou la recherche complexe.
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**Exécution de tâches (progrès étape par étape)** - Pour des workflows multi-étapes. Le modèle fournit un plan initial, décrit chaque étape au fur et à mesure, puis donne un résumé. Utilisez cela pour des migrations, implémentations, ou tout processus multi-étapes.
+**Exécution des tâches (Progression étape par étape)** – Pour les flux de travail en plusieurs étapes. Le modèle fournit un plan initial, raconte chaque étape pendant qu’il travaille, puis donne un résumé. Utilisez ceci pour les migrations, les implémentations ou tout processus en plusieurs étapes.
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Le prompting en chaîne de pensée demande explicitement au modèle de montrer son raisonnement, améliorant la précision pour les tâches complexes. La décomposition étape par étape aide à la compréhension aussi bien pour les humains que pour l’IA.
+L’invite chaîne de pensée demande explicitement au modèle de montrer son raisonnement, améliorant ainsi la précision sur les tâches complexes. La décomposition étape par étape aide aussi bien les humains que l’IA à comprendre la logique.
-> **🤖 Essayez avec le chat [GitHub Copilot](https://github.com/features/copilot) :** Posez des questions sur ce schéma :
-> - « Comment adapter le schéma d'exécution de tâches pour des opérations longues ? »
-> - « Quelles sont les bonnes pratiques pour structurer les préambules d’outils dans les applications de production ? »
-> - « Comment capturer et afficher les mises à jour de progrès intermédiaires dans une interface utilisateur ? »
+> **🤖 Essayez avec [GitHub Copilot](https://github.com/features/copilot) Chat :** Posez des questions sur ce modèle :
+> - « Comment adapterais-je le modèle d’exécution des tâches pour les opérations de longue durée ? »
+> - « Quelles sont les bonnes pratiques pour structurer les préambules d’outils dans des applications en production ? »
+> - « Comment capturer et afficher les mises à jour de progression intermédiaires dans une interface utilisateur ? »
-Le diagramme ci-dessous illustre ce workflow Plan → Exécution → Résumé.
+Le schéma ci-dessous illustre ce flux Planifier → Exécuter → Résumer.
-
+
-*Workflow Plan → Exécution → Résumé pour les tâches multi-étapes*
+*Flux Planifier → Exécuter → Résumer pour les tâches en plusieurs étapes*
-**Code auto-réfléchissant** - Pour générer du code de qualité production. Le modèle génère du code en suivant les standards de production avec une gestion appropriée des erreurs. Utilisez cela lors de la création de nouvelles fonctionnalités ou services.
+**Code auto-réfléchi** – Pour générer du code de qualité production. Le modèle génère du code suivant les standards de production avec une gestion adéquate des erreurs. Utilisez ceci lors de la création de nouvelles fonctionnalités ou services.
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Le diagramme ci-dessous montre cette boucle d'amélioration itérative — générer, évaluer, identifier les faiblesses, et affiner jusqu'à ce que le code respecte les standards de production.
+Le diagramme ci-dessous montre cette boucle d’amélioration itérative — générer, évaluer, identifier les faiblesses, affiner jusqu’à ce que le code réponde aux standards de production.
-
+
-*Boucle d'amélioration itérative - générer, évaluer, identifier les problèmes, améliorer, répéter*
+*Boucle d’amélioration itérative - générer, évaluer, identifier les problèmes, améliorer, répéter*
-**Analyse structurée** - Pour une évaluation cohérente. Le modèle révise le code avec un cadre fixe (exactitude, pratiques, performance, sécurité, maintenabilité). Utilisez cela pour des revues de code ou évaluations qualité.
+**Analyse structurée** – Pour une évaluation cohérente. Le modèle passe en revue le code selon un cadre fixe (exactitude, bonnes pratiques, performance, sécurité, maintenabilité). Utilisez ceci pour les revues de code ou évaluations qualité.
```java
String prompt = """
@@ -354,18 +354,18 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> **🤖 Essayez avec le chat [GitHub Copilot](https://github.com/features/copilot) :** Posez des questions sur l’analyse structurée :
+> **🤖 Essayez avec [GitHub Copilot](https://github.com/features/copilot) Chat :** Posez des questions sur l’analyse structurée :
> - « Comment personnaliser le cadre d’analyse pour différents types de revues de code ? »
-> - « Quelle est la meilleure façon de parser et d’agir sur une sortie structurée de manière programmatique ? »
-> - « Comment assurer une cohérence des niveaux de gravité à travers différentes sessions de revue ? »
+> - « Quelle est la meilleure méthode pour analyser et agir sur une sortie structurée de manière programmatique ? »
+> - « Comment garantir des niveaux de gravité cohérents à travers différentes sessions de revue ? »
Le diagramme suivant montre comment ce cadre structuré organise une revue de code en catégories cohérentes avec des niveaux de gravité.
-
+
*Cadre pour des revues de code cohérentes avec niveaux de gravité*
-**Chat multi-tours** - Pour des conversations nécessitant du contexte. Le modèle se souvient des messages précédents et construit dessus. Utilisez cela pour des sessions d’aide interactives ou Q&A complexes.
+**Chat multi-interactions** – Pour les conversations qui ont besoin de contexte. Le modèle se souvient des messages précédents et s’appuie dessus. Utilisez ceci pour des sessions d’aide interactives ou des questions-réponses complexes.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-Le diagramme ci-dessous visualise comment le contexte de conversation s'accumule à chaque tour et comment il se rapporte à la limite de tokens du modèle.
+Le diagramme ci-dessous visualise comment le contexte d’une conversation s’accumule à chaque tour et comment cela se rapporte à la limite de tokens du modèle.
-
+
-*Comment le contexte de la conversation s'accumule sur plusieurs tours jusqu'à atteindre la limite de tokens*
-**Raisonnement étape par étape** - Pour les problèmes nécessitant une logique visible. Le modèle montre un raisonnement explicite pour chaque étape. Utilisez ceci pour les problèmes de mathématiques, les puzzles logiques ou lorsque vous devez comprendre le processus de réflexion.
+*Comment le contexte de la conversation s’accumule sur plusieurs échanges jusqu’à atteindre la limite de tokens*
+
+**Raisonnement étape par étape** – Pour les problèmes nécessitant une logique visible. Le modèle montre un raisonnement explicite à chaque étape. Utilisez ceci pour les problèmes mathématiques, puzzles logiques, ou quand vous devez comprendre le processus de réflexion.
```java
String prompt = """
@@ -400,11 +401,10 @@ String response = chatModel.chat(prompt);
Le diagramme ci-dessous illustre comment le modèle décompose les problèmes en étapes logiques explicites et numérotées.
-
-
+
*Décomposer les problèmes en étapes logiques explicites*
-**Sortie contrainte** - Pour les réponses avec des exigences spécifiques de format. Le modèle suit strictement les règles de format et de longueur. Utilisez ceci pour les résumés ou lorsque vous avez besoin d’une structure de sortie précise.
+**Sortie contraint** - Pour les réponses avec des exigences spécifiques de format. Le modèle suit strictement les règles de format et de longueur. Utilisez ceci pour des résumés ou lorsque vous avez besoin d’une structure de sortie précise.
```java
String prompt = """
@@ -424,13 +424,13 @@ Le diagramme suivant montre comment les contraintes guident le modèle pour prod
-*Application spécifique des exigences de format, longueur et structure*
+*Application des exigences spécifiques de format, longueur et structure*
-## Exécuter l'application
+## Exécuter l’application
**Vérifier le déploiement :**
-Assurez-vous que le fichier `.env` existe dans le répertoire racine avec les identifiants Azure (créés lors du module 01). Exécutez ceci depuis le répertoire du module (`02-prompt-engineering/`) :
+Assurez-vous que le fichier `.env` existe à la racine avec les identifiants Azure (créés pendant le Module 01). Lancez ceci depuis le répertoire du module (`02-prompt-engineering/`) :
**Bash :**
```bash
@@ -442,27 +442,27 @@ cat ../.env # Devrait afficher AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
Get-Content ..\.env # Devrait afficher AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**Démarrer l'application :**
+**Démarrer l’application :**
-> **Note :** Si vous avez déjà démarré toutes les applications en utilisant `./start-all.sh` depuis le répertoire racine (comme décrit dans le module 01), ce module fonctionne déjà sur le port 8083. Vous pouvez ignorer les commandes de démarrage ci-dessous et aller directement à http://localhost:8083.
+> **Note :** Si vous avez déjà démarré toutes les applications avec `./start-all.sh` depuis la racine (comme décrit dans le Module 01), ce module est déjà en cours d’exécution sur le port 8083. Vous pouvez ignorer les commandes de démarrage ci-dessous et accéder directement à http://localhost:8083.
-**Option 1 : Utiliser le Spring Boot Dashboard (recommandé pour les utilisateurs de VS Code)**
+**Option 1 : Utilisation du Spring Boot Dashboard (recommandé pour les utilisateurs de VS Code)**
-Le conteneur de développement inclut l’extension Spring Boot Dashboard, qui offre une interface visuelle pour gérer toutes les applications Spring Boot. Vous pouvez le trouver dans la barre d’activités à gauche dans VS Code (cherchez l’icône Spring Boot).
+Le conteneur dev inclut l’extension Spring Boot Dashboard, qui fournit une interface visuelle pour gérer toutes les applications Spring Boot. Vous pouvez la trouver dans la barre d’activité à gauche de VS Code (cherchez l’icône Spring Boot).
Depuis le Spring Boot Dashboard, vous pouvez :
- Voir toutes les applications Spring Boot disponibles dans l’espace de travail
-- Démarrer/arrêter les applications en un clic
-- Visualiser les logs des applications en temps réel
-- Surveiller le statut des applications
+- Démarrer/arrêter les applications d’un simple clic
+- Consulter les journaux des applications en temps réel
+- Surveiller l’état des applications
-Cliquez simplement sur le bouton lecture à côté de "prompt-engineering" pour démarrer ce module, ou démarrez tous les modules en une seule fois.
+Cliquez simplement sur le bouton de lecture à côté de "prompt-engineering" pour démarrer ce module, ou démarrez tous les modules d’un coup.
-
+
*Le Spring Boot Dashboard dans VS Code — démarrer, arrêter et surveiller tous les modules depuis un seul endroit*
-**Option 2 : Utiliser des scripts shell**
+**Option 2 : Utilisation des scripts shell**
Démarrer toutes les applications web (modules 01-04) :
@@ -492,9 +492,9 @@ cd 02-prompt-engineering
.\start.ps1
```
-Les deux scripts chargent automatiquement les variables d’environnement depuis le fichier `.env` racine et construiront les JAR si ils n’existent pas.
+Les deux scripts chargent automatiquement les variables d’environnement depuis le fichier `.env` à la racine et construiront les JARs s’ils n’existent pas.
-> **Note :** Si vous préférez construire tous les modules manuellement avant de démarrer :
+> **Note :** Si vous préférez construire tous les modules manuellement avant de lancer :
>
> **Bash :**
> ```bash
@@ -514,7 +514,7 @@ Ouvrez http://localhost:8083 dans votre navigateur.
**Bash :**
```bash
-./stop.sh # Seulement ce module
+./stop.sh # Ce module uniquement
# Ou
cd .. && ./stop-all.sh # Tous les modules
```
@@ -528,81 +528,81 @@ cd ..; .\stop-all.ps1 # Tous les modules
## Captures d’écran de l’application
-Voici l’interface principale du module de prompt engineering, où vous pouvez expérimenter les huit motifs côte à côte.
+Voici l’interface principale du module d’ingénierie des prompts, où vous pouvez expérimenter avec les huit motifs côte à côte.
-
+
-*Le tableau de bord principal montrant les 8 motifs de prompt engineering avec leurs caractéristiques et cas d’usage*
+*Le tableau de bord principal affichant les 8 motifs d’ingénierie des prompts avec leurs caractéristiques et cas d’utilisation*
-## Explorer les motifs
+## Exploration des motifs
-L’interface web vous permet d’expérimenter différentes stratégies de prompting. Chaque motif résout des problèmes différents — essayez-les pour voir quand chaque approche est pertinente.
+L’interface web vous permet d’expérimenter différentes stratégies de prompt. Chaque motif résout des problèmes différents – essayez-les pour voir quand chaque approche brille.
-> **Note : Streaming vs Non-Streaming** — Chaque page de motif offre deux boutons : **🔴 Diffuser la réponse (Live)** et une option **Non-streaming**. Le streaming utilise les Server-Sent Events (SSE) pour afficher les tokens en temps réel au fur et à mesure que le modèle les génère, vous voyez donc le progrès immédiatement. L’option non-streaming attend la réponse complète avant de l’afficher. Pour les prompts qui déclenchent un raisonnement approfondi (ex : Grande Implication, Code Auto-réflexif), l’appel non-streaming peut prendre très longtemps — parfois des minutes — sans retour visible. **Utilisez le streaming lors de l’expérimentation de prompts complexes** pour voir le modèle travailler et éviter l’impression que la requête a expiré.
+> **Note : Streaming vs Non-Streaming** — Chaque page de motif offre deux boutons : **🔴 Diffuser la réponse (en direct)** et une option **Non-diffusion**. Le streaming utilise les Server-Sent Events (SSE) pour afficher les tokens en temps réel pendant que le modèle les génère, vous voyez donc la progression immédiatement. L’option non-diffusion attend la réponse complète avant de l’afficher. Pour les prompts qui déclenchent un raisonnement approfondi (ex. : Forte Implication, Code Auto-Réfléchi), l’appel non-diffusion peut prendre très longtemps – parfois des minutes – sans aucun retour visible. **Utilisez le streaming pour expérimenter avec des prompts complexes** afin de voir le modèle travailler et éviter l’impression que la requête a expiré.
>
-> **Note : Navigateur requis** — La fonction de streaming utilise l’API Fetch Streams (`response.body.getReader()`) qui nécessite un navigateur complet (Chrome, Edge, Firefox, Safari). Elle ne fonctionne **pas** dans le Simple Browser intégré de VS Code, car sa webview ne supporte pas l’API ReadableStream. Si vous utilisez le Simple Browser, les boutons non-streaming fonctionneront toujours normalement — seuls les boutons de streaming sont impactés. Ouvrez `http://localhost:8083` dans un navigateur externe pour une expérience complète.
+> **Note : Exigence du navigateur** — La fonctionnalité de streaming utilise l’API Fetch Streams (`response.body.getReader()`) qui nécessite un navigateur complet (Chrome, Edge, Firefox, Safari). Elle **ne fonctionne pas** dans le navigateur Simple intégré de VS Code, car sa webview ne supporte pas l’API ReadableStream. Si vous utilisez le Simple Browser, les boutons non-diffusion fonctionneront normalement – seul le streaming est affecté. Ouvrez `http://localhost:8083` dans un navigateur externe pour une expérience complète.
-### Faible vs Grande Implication
+### Faible vs Forte Implication
-Posez une question simple comme « Quel est 15 % de 200 ? » en mode Faible Implication. Vous obtenez une réponse instantanée et directe. Maintenant posez quelque chose de complexe comme « Concevez une stratégie de mise en cache pour une API à fort trafic » en mode Grande Implication. Cliquez sur **🔴 Diffuser la réponse (Live)** et regardez le raisonnement détaillé du modèle apparaître token après token. Même modèle, même structure de question — mais le prompt indique combien de réflexion faire.
+Posez une question simple comme « Quel est 15 % de 200 ? » avec Faible Implication. Vous obtenez une réponse instantanée et directe. Maintenant posez quelque chose de complexe comme « Concevez une stratégie de cache pour une API à fort trafic » avec Forte Implication. Cliquez sur **🔴 Diffuser la réponse (en direct)** et regardez le raisonnement détaillé du modèle apparaître token par token. Même modèle, même structure de question – mais le prompt indique combien de réflexion effectuer.
-### Exécution de tâches (Preambles Outils)
+### Exécution de tâches (Préambules d’outil)
-Les workflows en plusieurs étapes bénéficient d’une planification préalable et d’une narration des progrès. Le modèle décrit ce qu’il va faire, raconte chaque étape, puis résume les résultats.
+Les workflows à étapes multiples bénéficient d’une planification préalable et d’une narration des progrès. Le modèle décrit ce qu’il va faire, narre chaque étape, puis résume les résultats.
-### Code Auto-réflexif
+### Code Auto-Réfléchi
-Essayez « Crée un service de validation d’email ». Au lieu de simplement générer du code puis s’arrêter, le modèle génère, évalue selon des critères de qualité, identifie les faiblesses, puis améliore. Vous le voyez itérer jusqu’à ce que le code respecte les standards de production.
+Essayez « Créez un service de validation d’email ». Au lieu de simplement générer du code et s’arrêter, le modèle génère, évalue selon des critères de qualité, identifie des faiblesses et améliore. Vous le verrez itérer jusqu’à ce que le code atteigne les standards de production.
-### Analyse structurée
+### Analyse Structurée
-Les revues de code nécessitent des cadres d’évaluation cohérents. Le modèle analyse le code avec des catégories fixes (correction, bonnes pratiques, performance, sécurité) avec des niveaux de gravité.
+Les revues de code nécessitent des cadres d’évaluation cohérents. Le modèle analyse le code en utilisant des catégories fixes (exactitude, pratiques, performance, sécurité) avec des niveaux de gravité.
-### Chat multi-tours
+### Chat Multi-Tour
-Demandez « Qu’est-ce que Spring Boot ? » puis enchaînez immédiatement avec « Montre-moi un exemple ». Le modèle se souvient de votre première question et vous donne un exemple précis de Spring Boot. Sans mémoire, cette deuxième question serait trop vague.
+Demandez « Qu’est-ce que Spring Boot ? » puis immédiatement « Montre-moi un exemple ». Le modèle se souvient de votre première question et vous donne un exemple Spring Boot spécifique. Sans mémoire, cette deuxième question serait trop vague.
-### Raisonnement étape par étape
+### Raisonnement Étape par Étape
-Choisissez un problème mathématique et essayez-le à la fois avec Raisonnement étape par étape et Faible Implication. Faible implication vous donne juste la réponse — rapide mais opaque. Le raisonnement étape par étape vous montre chaque calcul et décision.
+Choisissez un problème de math et essayez-le avec Raisonnement Étape par Étape et Faible Implication. La faible implication vous donne juste la réponse – rapide mais opaque. L’étape par étape vous montre chaque calcul et décision.
-### Sortie contrainte
+### Sortie Contraint
-Quand vous avez besoin de formats spécifiques ou de nombres de mots précis, ce motif impose un respect strict. Essayez de générer un résumé avec exactement 100 mots au format liste à puces.
+Quand vous avez besoin de formats spécifiques ou de comptes précis de mots, ce motif impose un respect strict. Essayez de générer un résumé avec exactement 100 mots en format liste à puces.
## Ce que vous apprenez vraiment
**L’effort de raisonnement change tout**
-GPT-5.2 vous permet de contrôler l’effort de calcul via vos prompts. Un faible effort signifie des réponses rapides avec peu d’exploration. Un effort élevé signifie que le modèle prend le temps de réfléchir profondément. Vous apprenez à adapter l’effort à la complexité de la tâche — ne perdez pas de temps sur des questions simples, mais ne précipitez pas les décisions complexes non plus.
+GPT-5.2 vous permet de contrôler l’effort computationnel via vos prompts. Un faible effort signifie des réponses rapides avec exploration minimale. Un effort élevé signifie que le modèle prend le temps de réfléchir profondément. Vous apprenez à adapter l’effort à la complexité de la tâche – ne perdez pas de temps sur des questions simples, mais ne précipitez pas non plus les décisions complexes.
**La structure guide le comportement**
-Vous remarquez les balises XML dans les prompts ? Elles ne sont pas décoratives. Les modèles suivent des instructions structurées plus fiablement que du texte libre. Quand vous avez besoin de processus multi-étapes ou de logique complexe, la structure aide le modèle à savoir où il en est et ce qui vient après. Le diagramme ci-dessous décompose un prompt bien structuré, montrant comment les balises comme ``, ``, ``, `` et `` organisent vos instructions en sections claires.
+Vous avez remarqué les balises XML dans les prompts ? Elles ne sont pas décoratives. Les modèles suivent les instructions structurées de façon plus fiable que du texte libre. Quand vous avez besoin de processus multi-étapes ou de logiques complexes, la structure aide le modèle à suivre où il en est et ce qui vient ensuite. Le diagramme ci-dessous décompose un prompt bien structuré, montrant comment les balises comme ``, ``, ``, ``, et `` organisent vos instructions en sections claires.
-*Anatomie d’un prompt bien structuré avec des sections claires et organisation de type XML*
+*Anatomie d’un prompt bien structuré avec sections claires et organisation de style XML*
**Qualité par auto-évaluation**
-Les motifs auto-réflexifs fonctionnent en rendant explicites les critères de qualité. Au lieu d’espérer que le modèle « fasse bien », vous lui dites exactement ce que signifie « bien » : logique correcte, gestion des erreurs, performance, sécurité. Le modèle peut alors évaluer sa propre sortie et s’améliorer. Cela transforme la génération de code d’une loterie en un processus.
+Les motifs auto-réfléchissants fonctionnent en rendant explicites les critères de qualité. Au lieu d’espérer que le modèle « fasse bien », vous lui dites précisément ce que signifie « bien » : logique correcte, gestion des erreurs, performance, sécurité. Le modèle peut alors évaluer sa propre sortie et s’améliorer. Cela transforme la génération de code d’une loterie en un processus.
**Le contexte est fini**
-Les conversations multi-tours fonctionnent en incluant l’historique des messages à chaque requête. Mais il y a une limite — chaque modèle a un nombre maximal de tokens. À mesure que les conversations s’allongent, vous aurez besoin de stratégies pour garder le contexte pertinent sans dépasser ce plafond. Ce module vous montre comment fonctionne la mémoire ; plus tard vous apprendrez quand résumer, quand oublier, et quand récupérer.
+Les conversations multi-tours fonctionnent en incluant l’historique des messages avec chaque requête. Mais il y a une limite – chaque modèle a un compte maximal de tokens. À mesure que les conversations grandissent, vous aurez besoin de stratégies pour garder un contexte pertinent sans atteindre ce plafond. Ce module vous montre comment fonctionne la mémoire ; plus tard vous apprendrez quand résumer, quand oublier et quand récupérer.
-## Prochaines étapes
+## Étapes suivantes
-**Module suivant :** [03-rag - RAG (Génération augmentée par recherche)](../03-rag/README.md)
+**Module suivant :** [03-rag - RAG (Retrieval-Augmented Generation)](../03-rag/README.md)
---
-**Navigation :** [← Précédent : Module 01 - Introduction](../01-introduction/README.md) | [Retour au début](../README.md) | [Suivant : Module 03 - RAG →](../03-rag/README.md)
+**Navigation :** [← Précédent : Module 01 - Introduction](../01-introduction/README.md) | [Retour au principal](../README.md) | [Suivant : Module 03 - RAG →](../03-rag/README.md)
---
-**Avis de non-responsabilité** :
-Ce document a été traduit à l’aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d’être précis, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d’origine doit être considéré comme la source faisant foi. Pour toute information critique, une traduction professionnelle réalisée par un humain est recommandée. Nous déclinons toute responsabilité en cas de malentendus ou de mauvaises interprétations résultant de l’utilisation de cette traduction.
+**Avertissement** :
+Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforçions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour les informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous ne saurions être tenus responsables des malentendus ou erreurs d'interprétation découlant de l'utilisation de cette traduction.
\ No newline at end of file
diff --git a/translations/fr/03-rag/README.md b/translations/fr/03-rag/README.md
index 9bd8cf011..eb10dfac9 100644
--- a/translations/fr/03-rag/README.md
+++ b/translations/fr/03-rag/README.md
@@ -2,31 +2,31 @@
## Table des matières
-- [Parcours vidéo](../../../03-rag)
-- [Ce que vous apprendrez](../../../03-rag)
-- [Prérequis](../../../03-rag)
-- [Comprendre RAG](../../../03-rag)
- - [Quelle approche RAG ce tutoriel utilise-t-il ?](../../../03-rag)
-- [Comment ça fonctionne](../../../03-rag)
- - [Traitement des documents](../../../03-rag)
- - [Création des embeddings](../../../03-rag)
- - [Recherche sémantique](../../../03-rag)
- - [Génération de réponse](../../../03-rag)
-- [Lancer l'application](../../../03-rag)
-- [Utiliser l'application](../../../03-rag)
- - [Télécharger un document](../../../03-rag)
- - [Poser des questions](../../../03-rag)
- - [Vérifier les références des sources](../../../03-rag)
- - [Expérimenter avec les questions](../../../03-rag)
-- [Concepts clés](../../../03-rag)
- - [Stratégie de découpage](../../../03-rag)
- - [Scores de similarité](../../../03-rag)
- - [Stockage en mémoire](../../../03-rag)
- - [Gestion de la fenêtre de contexte](../../../03-rag)
-- [Quand RAG est important](../../../03-rag)
-- [Prochaines étapes](../../../03-rag)
-
-## Parcours vidéo
+- [Présentation vidéo](#présentation-vidéo)
+- [Ce que vous apprendrez](#ce-que-vous-apprendrez)
+- [Prérequis](#prérequis)
+- [Comprendre RAG](#comprendre-rag)
+ - [Quelle approche RAG ce tutoriel utilise-t-il ?](#quelle-approche-rag-ce-tutoriel-utilise-t-il)
+- [Comment ça fonctionne](#comment-ça-fonctionne)
+ - [Traitement des documents](#traitement-des-documents)
+ - [Création des embeddings](#création-des-embeddings)
+ - [Recherche sémantique](#recherche-sémantique)
+ - [Génération des réponses](#génération-de-réponse)
+- [Exécuter l'application](#exécuter-lapplication)
+- [Utiliser l'application](#utilisation-de-lapplication)
+ - [Télécharger un document](#téléversez-un-document)
+ - [Poser des questions](#posez-des-questions)
+ - [Vérifier les références sources](#vérifiez-les-références-sources)
+ - [Expérimenter avec les questions](#expérimentez-avec-les-questions)
+- [Concepts clés](#concepts-clés)
+ - [Stratégie de découpage](#stratégie-de-découpage)
+ - [Scores de similarité](#scores-de-similarité)
+ - [Stockage en mémoire](#stockage-en-mémoire)
+ - [Gestion de la fenêtre de contexte](#gestion-de-la-fenêtre-de-contexte)
+- [Quand RAG est important](#quand-rag-est-important)
+- [Prochaines étapes](#étapes-suivantes)
+
+## Présentation vidéo
Regardez cette session en direct qui explique comment démarrer avec ce module :
@@ -34,111 +34,110 @@ Regardez cette session en direct qui explique comment démarrer avec ce module :
## Ce que vous apprendrez
-Dans les modules précédents, vous avez appris à converser avec l'IA et à structurer vos invites de manière efficace. Mais il y a une limitation fondamentale : les modèles de langue ne connaissent que ce qu'ils ont appris lors de leur entraînement. Ils ne peuvent pas répondre à des questions sur les politiques de votre entreprise, votre documentation de projet, ou toute information sur laquelle ils n'ont pas été entraînés.
+Dans les modules précédents, vous avez appris à avoir des conversations avec l'IA et à structurer efficacement vos prompts. Mais il existe une limitation fondamentale : les modèles de langage ne connaissent que ce qu’ils ont appris lors de l’entraînement. Ils ne peuvent pas répondre à des questions sur les politiques de votre entreprise, la documentation de vos projets, ou toute information sur laquelle ils n’ont pas été entraînés.
-RAG (Génération Augmentée par Recherche) résout ce problème. Plutôt que d'essayer d'enseigner vos informations au modèle (ce qui est coûteux et peu pratique), vous lui donnez la capacité de chercher dans vos documents. Lorsqu'une question est posée, le système trouve des informations pertinentes et les inclut dans l'invite. Le modèle répond ensuite en se basant sur ce contexte récupéré.
+RAG (Génération Augmentée par Recherche) résout ce problème. Plutôt que d’essayer d’enseigner au modèle vos informations (ce qui est coûteux et peu pratique), vous lui donnez la capacité de rechercher dans vos documents. Lorsqu’une question est posée, le système trouve les informations pertinentes et les inclut dans le prompt. Le modèle répond alors en se basant sur ce contexte récupéré.
-Pensez à RAG comme donnant au modèle une bibliothèque de référence. Quand vous posez une question, le système :
+Pensez à RAG comme si vous donniez au modèle une bibliothèque de référence. Lorsque vous posez une question, le système :
-1. **Question utilisateur** – Vous posez une question
-2. **Embedding** – Convertit votre question en vecteur
-3. **Recherche vectorielle** – Trouve des morceaux de documents similaires
-4. **Assemblage du contexte** – Ajoute les morceaux pertinents à l'invite
-5. **Réponse** – Le LLM génère une réponse basée sur le contexte
+1. **Question de l’utilisateur** - Vous posez une question
+2. **Embedding** - Convertit votre question en vecteur
+3. **Recherche vectorielle** - Trouve des morceaux de documents similaires
+4. **Assemblage du contexte** - Ajoute les morceaux pertinents au prompt
+5. **Réponse** - Le LLM génère une réponse basée sur le contexte
-Cela ancre les réponses du modèle dans vos données réelles plutôt que de se fier à ses connaissances d'entraînement ou d'inventer des réponses.
+Cela ancre les réponses du modèle dans vos données réelles au lieu de s’appuyer uniquement sur ses connaissances d’entraînement ou d’inventer des réponses.
## Prérequis
-- Avoir terminé le [Module 00 - Démarrage rapide](../00-quick-start/README.md) (pour l'exemple Easy RAG mentionné plus tard dans ce module)
-- Avoir terminé le [Module 01 - Introduction](../01-introduction/README.md) (ressources Azure OpenAI déployées, y compris le modèle d'embedding `text-embedding-3-small`)
-- Fichier `.env` dans le répertoire racine avec les identifiants Azure (créé par `azd up` dans le Module 01)
+- Module [01 - Introduction](../01-introduction/README.md) terminé (ressources Azure OpenAI déployées, incluant le modèle d’embedding `text-embedding-3-small`)
+- Fichier `.env` dans le répertoire racine avec les identifiants Azure (créé par la commande `azd up` dans le Module 01)
-> **Note :** Si vous n'avez pas terminé le Module 01, suivez d'abord les instructions de déploiement là-bas. La commande `azd up` déploie à la fois le modèle de chat GPT et le modèle d'embedding utilisé dans ce module.
+> **Note :** Si vous n'avez pas terminé le Module 01, suivez d'abord les instructions de déploiement indiquées. La commande `azd up` déploie à la fois le modèle de chat GPT et le modèle d'embedding utilisé par ce module.
## Comprendre RAG
-Le schéma ci-dessous illustre le concept clé : au lieu de s'appuyer uniquement sur les données d'entraînement du modèle, RAG lui fournit une bibliothèque de référence de vos documents à consulter avant de générer chaque réponse.
+Le schéma ci-dessous illustre le concept central : au lieu de se fier uniquement aux données d'entraînement du modèle, RAG lui donne une bibliothèque de vos documents à consulter avant de générer chaque réponse.
-*Ce schéma montre la différence entre un LLM standard (qui devine à partir des données d'entraînement) et un LLM amélioré par RAG (qui consulte d'abord vos documents).*
+*Ce schéma montre la différence entre un LLM standard (qui devine à partir des données d’entraînement) et un LLM amélioré par RAG (qui consulte d’abord vos documents).*
-Voici comment les éléments se connectent de bout en bout. La question d'un utilisateur passe par quatre étapes — embedding, recherche vectorielle, assemblage du contexte, et génération de réponse — chacune bâtie sur la précédente :
+Voici comment les éléments se connectent de bout en bout. La question d’un utilisateur passe par quatre étapes — embedding, recherche vectorielle, assemblage du contexte et génération de réponse — chacune s’appuyant sur la précédente :
-*Ce schéma montre la chaîne complète du pipeline RAG — une question utilisateur passe par embedding, recherche vectorielle, assemblage du contexte et génération de réponse.*
+*Ce schéma montre la chaîne complète RAG — une question utilisateur traverse les étapes d'embedding, recherche vectorielle, assemblage du contexte et génération de réponse.*
-Le reste de ce module détaille chaque étape en détail, avec du code que vous pouvez exécuter et modifier.
+Le reste de ce module détaille chaque étape, avec du code que vous pouvez exécuter et modifier.
### Quelle approche RAG ce tutoriel utilise-t-il ?
-LangChain4j propose trois façons d'implémenter RAG, chacune avec un niveau d'abstraction différent. Le schéma ci-dessous les compare côte à côte :
+LangChain4j propose trois façons d’implémenter RAG, chacune offrant un niveau d’abstraction différent. Le schéma ci-dessous les compare côte à côte :
-*Ce schéma compare les trois approches LangChain4j RAG — Easy, Native, et Avancé — montrant leurs composants clés et quand les utiliser.*
+*Ce schéma compare les trois approches RAG de LangChain4j — Facile, Native, et Avancée — montrant leurs composants clés et quand les utiliser.*
-| Approche | Ce qu'elle fait | Compromis |
+| Approche | Ce qu’elle fait | Compromis |
|---|---|---|
-| **Easy RAG** | Connecte automatiquement tout via `AiServices` et `ContentRetriever`. Vous annotez une interface, attachez un retriever, et LangChain4j gère l'embedding, la recherche, et l'assemblage d'invite en coulisses. | Code minimal, mais vous ne voyez pas ce qui se passe à chaque étape. |
-| **Native RAG** | Vous appelez le modèle d'embedding, cherchez dans le magasin, construisez l'invite et générez la réponse vous-même — étape explicite par étape. | Plus de code, mais chaque étape est visible et modifiable. |
-| **Advanced RAG** | Utilise le framework `RetrievalAugmentor` avec des transformeurs de requêtes, des routeurs, des re-classeurs, et des injecteurs de contenu modulaires pour des pipelines de production. | Flexibilité maximale, mais complexité nettement supérieure. |
+| **Easy RAG** | Connecte automatiquement tout via `AiServices` et `ContentRetriever`. Vous annotez une interface, attachez un retriever, et LangChain4j gère en coulisses embedding, recherche et assemblage des prompts. | Code minimal, mais vous ne voyez pas ce qui se passe à chaque étape. |
+| **Native RAG** | Vous appelez vous-même le modèle d’embedding, recherchez dans le magasin, assemblez le prompt et générez la réponse — une étape explicite à la fois. | Plus de code, mais chaque étape est visible et modifiable. |
+| **Advanced RAG** | Utilise le cadre `RetrievalAugmentor` avec des transformateurs de requêtes, routeurs, re-classificateurs, et injecteurs de contenu modulaires pour des pipelines de production. | Flexibilité maximale, mais complexité nettement plus élevée. |
-**Ce tutoriel utilise l'approche Native.** Chaque étape du pipeline RAG — embedding de la requête, recherche dans le magasin vectoriel, assemblage du contexte, et génération de réponse — est explicitement écrite dans [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). C'est intentionnel : en tant que ressource pédagogique, il est plus important que vous voyiez et compreniez chaque étape plutôt que le code soit minimisé. Une fois à l'aise avec les pièces, vous pouvez passer à Easy RAG pour des prototypes rapides ou Advanced RAG pour des systèmes en production.
+**Ce tutoriel utilise l’approche Native.** Chaque étape de la chaîne RAG — embedding de la requête, recherche dans le magasin vectoriel, assemblage du contexte, et génération de la réponse — est explicitement écrite dans [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). C’est volontaire : en tant que ressource pédagogique, il est plus important que vous voyiez et compreniez chaque étape que de minimiser le code. Une fois à l’aise avec la chaîne, vous pourrez basculer sur Easy RAG pour des prototypes rapides ou Advanced RAG pour des systèmes en production.
-> **💡 Vous avez déjà vu Easy RAG en action ?** Le [module Démarrage Rapide](../00-quick-start/README.md) inclut un exemple Document Q&A ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)) qui utilise l'approche Easy RAG — LangChain4j gère automatiquement l'embedding, la recherche, et l'assemblage de l'invite. Ce module fait un pas de plus en ouvrant ce pipeline pour que vous puissiez voir et contrôler chaque étape vous-même.
+> **💡 Curieux à propos de Easy RAG ?** LangChain4j offre aussi une approche *Easy RAG* où `AiServices` et un `ContentRetriever` gèrent automatiquement l'embedding, la recherche et l'assemblage des prompts. Ce module prend le chemin plus explicite — en ouvrant cette chaîne pour que vous puissiez voir et contrôler chaque étape.
-Le schéma ci-dessous montre le pipeline Easy RAG de cet exemple Démarrage Rapide. Notez comment `AiServices` et `EmbeddingStoreContentRetriever` cachent toute la complexité — vous chargez un document, attachez un retriever, et obtenez des réponses. L'approche Native dans ce module ouvre chacune de ces étapes cachées :
+Le schéma ci-dessous montre la pipeline Easy RAG. Notez comment `AiServices` et `EmbeddingStoreContentRetriever` cachent toute la complexité — vous chargez un document, vous attachez un retriever, et obtenez des réponses. L’approche Native dans ce module ouvre chacune de ces étapes cachées :
-*Ce schéma montre le pipeline Easy RAG de `SimpleReaderDemo.java`. Comparez-le à l'approche Native utilisée ici : Easy RAG cache l'embedding, la récupération et l'assemblage de l'invite derrière `AiServices` et `ContentRetriever` — vous chargez un document, attachez un retriever, et obtenez des réponses. L'approche Native ouvre ce pipeline afin que vous appeliez chaque étape (embedder, chercher, assembler le contexte, générer) vous-même, vous donnant une visibilité et un contrôle complets.*
+*Ce schéma montre la pipeline Easy RAG. Comparez avec l’approche Native utilisée dans ce module : Easy RAG cache embedding, récupération et assemblage du prompt derrière `AiServices` et `ContentRetriever` — vous chargez un document, attachez un retriever, et obtenez des réponses. L’approche Native ouvre cette pipeline pour que vous appeliez chaque étape (embedded, rechercher, assembler le contexte, générer) vous-même, offrant pleine visibilité et contrôle.*
## Comment ça fonctionne
-Le pipeline RAG dans ce module est divisé en quatre étapes qui s'exécutent en séquence à chaque fois qu'un utilisateur pose une question. D'abord, un document chargé est **analysé et découpé en morceaux** exploitables. Ces morceaux sont ensuite convertis en **embeddings vecteurs** et stockés pour être comparés mathématiquement. Lorsqu'une requête arrive, le système effectue une **recherche sémantique** pour trouver les morceaux les plus pertinents, puis les passe en contexte au LLM pour la **génération de réponse**. Les sections suivantes parcourent chaque étape avec le code réel et des diagrammes. Regardons la première étape.
+La pipeline RAG dans ce module se divise en quatre étapes séquentielles à chaque fois qu’un utilisateur pose une question. Premièrement, un document uploadé est **analysé et découpé en morceaux** gérables. Ces morceaux sont ensuite transformés en **embeddings vectoriels** et stockés pour pouvoir être comparés mathématiquement. Lorsqu’une requête arrive, le système effectue une **recherche sémantique** pour trouver les morceaux les plus pertinents, puis les passe comme contexte au LLM pour **génération de réponse**. Les sections ci-dessous expliquent chaque étape avec le code réel et des diagrammes. Regardons la première étape.
### Traitement des documents
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-Lorsque vous téléchargez un document, le système l'analyse (PDF ou texte brut), attache des métadonnées telles que le nom de fichier, puis le découpe en morceaux — des segments plus petits qui tiennent confortablement dans la fenêtre de contexte du modèle. Ces morceaux se chevauchent légèrement pour éviter de perdre du contexte aux limites.
+Quand vous chargez un document, le système l’analyse (PDF ou texte brut), y attache des métadonnées comme le nom de fichier, puis le décompose en morceaux — des parties plus petites qui tiennent confortablement dans la fenêtre de contexte du modèle. Ces morceaux se chevauchent légèrement pour ne pas perdre de contexte aux frontières.
```java
-// Analyser le fichier téléchargé et l'encapsuler dans un Document LangChain4j
+// Analyser le fichier téléchargé et l'encapsuler dans un document LangChain4j
Document document = Document.from(content, metadata);
-// Diviser en morceaux de 300 jetons avec un chevauchement de 30 jetons
+// Diviser en morceaux de 300 tokens avec un chevauchement de 30 tokens
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
-Le schéma ci-dessous montre comment cela fonctionne visuellement. Notez que chaque morceau partage certains tokens avec ses voisins — le chevauchement de 30 tokens garantit qu'aucun contexte important ne se perd entre les morceaux :
+Le schéma ci-dessous montre visuellement comment cela fonctionne. Notez comment chaque morceau partage certains tokens avec ses voisins — le chevauchement de 30 tokens garantit qu’aucun contexte important ne tombe entre les mailles du filet :
-
+
-*Ce schéma montre un document découpé en morceaux de 300 tokens avec un chevauchement de 30 tokens, préservant le contexte aux frontières des morceaux.*
+*Ce schéma montre un document découpé en morceaux de 300 tokens avec un chevauchement de 30 tokens, préservant le contexte aux limites des morceaux.*
> **🤖 Essayez avec [GitHub Copilot](https://github.com/features/copilot) Chat :** Ouvrez [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) et demandez :
-> - « Comment LangChain4j découpe-t-il les documents en morceaux et pourquoi le chevauchement est-il important ? »
-> - « Quelle est la taille optimale des morceaux pour différents types de documents et pourquoi ? »
-> - « Comment gérer des documents en plusieurs langues ou avec une mise en forme spéciale ? »
+> - "Comment LangChain4j découpe-t-il les documents en morceaux et pourquoi le chevauchement est-il important ?"
+> - "Quelle est la taille optimale des morceaux pour différents types de documents et pourquoi ?"
+> - "Comment gérer les documents en plusieurs langues ou avec une mise en forme spéciale ?"
### Création des embeddings
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-Chaque morceau est converti en une représentation numérique appelée embedding — essentiellement un convertisseur de sens en nombres. Le modèle d'embedding n'est pas "intelligent" comme un modèle de chat ; il ne peut pas suivre des instructions, raisonner ou répondre à des questions. Ce qu'il fait, c'est mapper le texte dans un espace mathématique où des sens similaires se retrouvent proches — « voiture » près de « automobile », « politique de remboursement » près de « retourner mon argent ». Pensez à un modèle de chat comme une personne à qui parler ; un modèle d'embedding est un système de classement ultra-efficace.
+Chaque morceau est converti en une représentation numérique appelée embedding — essentiellement un convertisseur de sens en nombres. Le modèle d’embedding n’est pas « intelligent » comme un modèle de chat ; il ne suit pas d’instructions, ne raisonne pas et ne répond pas aux questions. Ce qu’il fait, c’est mapper le texte dans un espace mathématique où des significations similaires se regroupent — « voiture » proche de « automobile », « politique de remboursement » proche de « rendre mon argent ». Pensez à un modèle de chat comme une personne avec qui vous parlez ; un modèle d’embedding, c’est un système de classement ultra performant.
-Le schéma ci-dessous visualise ce concept — du texte entre, des vecteurs numériques sortent, et des sens similaires produisent des vecteurs proches :
+Le schéma ci-dessous illustre ce concept — du texte en entrée, des vecteurs numériques en sortie, et des significations proches produisent des vecteurs voisins :
-
+
-*Ce schéma montre comment un modèle d'embedding convertit le texte en vecteurs numériques, plaçant des sens similaires — comme « voiture » et « automobile » — proches dans l'espace vectoriel.*
+*Ce schéma montre comment un modèle d’embedding convertit le texte en vecteurs numériques, plaçant les significations similaires — comme « voiture » et « automobile » — proches dans l’espace vectoriel.*
```java
@Bean
@@ -154,29 +153,29 @@ EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-Le diagramme de classes ci-dessous montre les deux flux séparés dans un pipeline RAG et les classes LangChain4j qui les implémentent. Le **flux d'ingestion** (exécuté une fois au moment du chargement) découpe le document, embedde les morceaux, et les stocke via `.addAll()`. Le **flux de requête** (exécuté à chaque question utilisateur) embedde la question, cherche dans le magasin via `.search()`, et passe le contexte trouvé au modèle de chat. Les deux flux se rejoignent sur l'interface partagée `EmbeddingStore` :
+Le diagramme de classes ci-dessous montre les deux flux séparés dans un pipeline RAG et les classes LangChain4j qui les mettent en œuvre. Le **flux d’ingestion** (exécuté une fois lors du téléchargement) découpe le document, embedde les morceaux, et les stocke via `.addAll()`. Le **flux de requête** (exécuté chaque fois qu’un utilisateur pose une question) embedde la question, recherche dans le magasin via `.search()`, et transmet le contexte correspondant au modèle de chat. Les deux flux se croisent sur l’interface partagée `EmbeddingStore` :
-
+
-*Ce schéma montre les deux flux dans un pipeline RAG — ingestion et requête — et comment ils se connectent via un EmbeddingStore partagé.*
+*Ce schéma montre les deux flux d’un pipeline RAG — ingestion et requête — et comment ils se connectent via un EmbeddingStore partagé.*
-Une fois les embeddings stockés, les contenus similaires se regroupent naturellement dans l'espace vectoriel. La visualisation ci-dessous montre comment les documents sur des sujets liés forment des points proches, ce qui rend la recherche sémantique possible :
+Une fois les embeddings stockés, les contenus similaires se regroupent naturellement dans l’espace vectoriel. La visualisation ci-dessous montre comment les documents sur des sujets liés forment des points proches, rendant la recherche sémantique possible :
-*Cette visualisation montre comment des documents liés se regroupent en 3D dans l'espace vectoriel, avec des sujets comme Documents Techniques, Règles d'Entreprise, et FAQ formant des regroupements distincts.*
+*Cette visualisation montre comment les documents liés se regroupent dans un espace vectoriel 3D, avec des sujets comme Documentation Technique, Règles Métier, et FAQ formant des groupes distincts.*
-Lorsqu'un utilisateur effectue une recherche, le système suit quatre étapes : embedder les documents une fois, embedder la requête à chaque recherche, comparer le vecteur de requête à tous les vecteurs stockés via la similarité cosinus, et retourner les meilleurs K morceaux. Le schéma ci-dessous parcourt chaque étape et les classes LangChain4j impliquées :
+Lorsqu’un utilisateur effectue une recherche, le système suit quatre étapes : embedder les documents une fois, embedder la requête à chaque recherche, comparer le vecteur de la requête à tous les vecteurs stockés en utilisant la similarité cosinus, et retourner les K meilleurs morceaux. Le schéma ci-dessous présente chaque étape ainsi que les classes LangChain4j impliquées :
-
+
-*Ce schéma montre le processus de recherche en quatre étapes : embedder les documents, embedder la requête, comparer les vecteurs avec la similarité cosinus, et retourner les meilleurs résultats.*
+*Ce schéma montre les quatre étapes de la recherche par embedding : embedder les documents, embedder la requête, comparer les vecteurs avec la similarité cosinus, et retourner les meilleurs résultats.*
### Recherche sémantique
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Lorsque vous posez une question, votre question devient aussi un embedding. Le système compare l'embedding de votre question avec tous les embeddings des morceaux de documents. Il trouve les morceaux aux significations les plus similaires — pas seulement par correspondance de mots-clés, mais par similarité sémantique réelle.
+Lorsque vous posez une question, celle-ci est également convertie en embedding. Le système compare l’embedding de votre question à tous les embeddings des morceaux du document. Il trouve les morceaux au sens le plus proche — pas seulement des mots-clés correspondants, mais une réelle similarité sémantique.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -196,27 +195,27 @@ for (EmbeddingMatch match : matches) {
}
```
-Le schéma ci-dessous contraste la recherche sémantique avec la recherche traditionnelle par mots-clés. Une recherche par mot-clé pour « véhicule » manque un morceau parlant de « voitures et camions », mais la recherche sémantique comprend qu'ils veulent dire la même chose et le retourne comme un résultat classé haut :
+Le schéma ci-dessous illustre la différence entre la recherche sémantique et la recherche traditionnelle par mots-clés. Une recherche par mot-clé sur « véhicule » passe à côté d’un morceau parlant de « voitures et camions », alors que la recherche sémantique comprend qu’ils signifient la même chose et le retourne parmi les résultats les mieux notés :
-*Ce schéma compare la recherche basée sur mots-clés à la recherche sémantique, montrant comment la recherche sémantique récupère un contenu conceptuellement lié même lorsque les mots exacts diffèrent.*
-Sous le capot, la similarité est mesurée en utilisant la similarité cosinus — se demandant essentiellement « ces deux flèches pointent-elles dans la même direction ? » Deux segments peuvent utiliser des mots complètement différents, mais s'ils signifient la même chose, leurs vecteurs pointent dans la même direction et obtiennent un score proche de 1.0 :
+*Ce schéma compare la recherche basée sur mots-clés avec la recherche sémantique, montrant comment la recherche sémantique récupère du contenu conceptuellement lié même lorsque les mots exacts diffèrent.*
-
+Sous le capot, la similarité est mesurée via la similarité cosinus — une façon de demander « ces deux flèches pointent-elles dans la même direction ? » Deux morceaux peuvent utiliser des mots complètement différents, mais si leur sens est identique, leurs vecteurs pointent dans la même direction et obtiennent un score proche de 1,0 :
-*Ce diagramme illustre la similarité cosinus comme l’angle entre les vecteurs d’embeddding — des vecteurs plus alignés obtiennent un score proche de 1.0, indiquant une plus grande similarité sémantique.*
+
+*Ce diagramme illustre la similarité cosinus comme l'angle entre les vecteurs d'incorporation — des vecteurs plus alignés obtiennent un score proche de 1.0, indiquant une similarité sémantique plus élevée.*
> **🤖 Essayez avec [GitHub Copilot](https://github.com/features/copilot) Chat :** Ouvrez [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) et demandez :
-> - « Comment fonctionne la recherche par similarité avec les embeddings et qu’est-ce qui détermine le score ? »
-> - « Quel seuil de similarité dois-je utiliser et comment cela influence-t-il les résultats ? »
-> - « Comment gérer les cas où aucun document pertinent n’est trouvé ? »
+> - « Comment fonctionne la recherche de similarité avec les incorporations et qu'est-ce qui détermine le score ? »
+> - « Quel seuil de similarité devrais-je utiliser et comment cela affecte-t-il les résultats ? »
+> - « Comment gérer les cas où aucun document pertinent n'est trouvé ? »
### Génération de Réponse
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Les segments les plus pertinents sont assemblés dans un prompt structuré comprenant des instructions explicites, le contexte récupéré, et la question de l’utilisateur. Le modèle lit ces segments spécifiques et répond sur cette base — il ne peut utiliser que ce qui est devant lui, ce qui évite les hallucinations.
+Les fragments les plus pertinents sont assemblés en une invite structurée qui comprend des instructions explicites, le contexte récupéré, et la question de l'utilisateur. Le modèle lit ces fragments spécifiques et répond sur la base de ces informations — il ne peut utiliser que ce qui se trouve devant lui, ce qui empêche les hallucinations.
```java
String context = matches.stream()
@@ -237,21 +236,21 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-Le diagramme ci-dessous montre cette assemblée en action — les segments les mieux notés de l’étape de recherche sont injectés dans le modèle de prompt, et `OpenAiOfficialChatModel` génère une réponse fondée :
+Le diagramme ci-dessous montre cet assemblage en action — les fragments les mieux notés de l'étape de recherche sont injectés dans le modèle d'invite, et le `OpenAiOfficialChatModel` génère une réponse fondée :
-
+
-*Ce diagramme montre comment les segments les mieux notés sont assemblés dans un prompt structuré, permettant au modèle de générer une réponse fondée à partir de vos données.*
+*Ce diagramme montre comment les fragments les mieux notés sont assemblés en une invite structurée, permettant au modèle de générer une réponse fondée à partir de vos données.*
-## Lancer l’Application
+## Exécuter l'Application
-**Vérifier le déploiement :**
+**Vérifiez le déploiement :**
-Assurez-vous que le fichier `.env` existe dans le répertoire racine avec les identifiants Azure (créés pendant le Module 01). Exécutez cette commande depuis le répertoire du module (`03-rag/`) :
+Assurez-vous que le fichier `.env` existe dans le répertoire racine avec les identifiants Azure (créés lors du Module 01). Lancez ceci depuis le répertoire du module (`03-rag/`) :
**Bash :**
```bash
-cat ../.env # Doit afficher AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+cat ../.env # Devrait afficher AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**PowerShell :**
@@ -259,29 +258,29 @@ cat ../.env # Doit afficher AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
Get-Content ..\.env # Devrait afficher AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**Démarrer l’application :**
+**Démarrer l'application :**
-> **Note :** Si vous avez déjà lancé toutes les applications avec `./start-all.sh` depuis le répertoire racine (comme décrit dans le Module 01), ce module est déjà en fonctionnement sur le port 8081. Vous pouvez sauter les commandes de démarrage ci-dessous et aller directement sur http://localhost:8081.
+> **Note :** Si vous avez déjà démarré toutes les applications avec `./start-all.sh` depuis le répertoire racine (comme décrit dans le Module 01), ce module est déjà en cours d'exécution sur le port 8081. Vous pouvez ignorer les commandes de démarrage ci-dessous et aller directement à http://localhost:8081.
-**Option 1 : Utiliser Spring Boot Dashboard (recommandé pour les utilisateurs de VS Code)**
+**Option 1 : Utilisation du Spring Boot Dashboard (recommandé pour les utilisateurs de VS Code)**
-Le conteneur de développement inclut l’extension Spring Boot Dashboard, qui fournit une interface visuelle pour gérer toutes les applications Spring Boot. Vous pouvez la trouver dans la barre d’activités à gauche dans VS Code (cherchez l’icône Spring Boot).
+Le conteneur de développement inclut l'extension Spring Boot Dashboard, qui fournit une interface visuelle pour gérer toutes les applications Spring Boot. Vous la trouverez dans la barre d'activités à gauche de VS Code (cherchez l'icône Spring Boot).
Depuis le Spring Boot Dashboard, vous pouvez :
-- Voir toutes les applications Spring Boot disponibles dans l’espace de travail
-- Démarrer/arrêter les applications d’un simple clic
-- Consulter les journaux en temps réel
-- Surveiller l’état des applications
+- Voir toutes les applications Spring Boot disponibles dans l'espace de travail
+- Démarrer/arrêter les applications d'un simple clic
+- Voir les journaux des applications en temps réel
+- Surveiller le statut des applications
-Cliquez simplement sur le bouton lecture à côté de « rag » pour démarrer ce module, ou lancez tous les modules en une fois.
+Cliquez simplement sur le bouton play à côté de « rag » pour démarrer ce module, ou démarrez tous les modules en une fois.
-*Cette capture d’écran montre le Spring Boot Dashboard dans VS Code, où vous pouvez démarrer, arrêter et surveiller visuellement les applications.*
+*Cette capture d'écran montre le Spring Boot Dashboard dans VS Code, où vous pouvez démarrer, arrêter et surveiller visuellement les applications.*
-**Option 2 : Utiliser les scripts shell**
+**Option 2 : Utilisation de scripts shell**
-Lancez toutes les applications web (modules 01-04) :
+Démarrez toutes les applications web (modules 01-04) :
**Bash :**
```bash
@@ -295,7 +294,7 @@ cd .. # Depuis le répertoire racine
.\start-all.ps1
```
-Ou lancez uniquement ce module :
+Ou démarrez uniquement ce module :
**Bash :**
```bash
@@ -309,16 +308,16 @@ cd 03-rag
.\start.ps1
```
-Les deux scripts chargent automatiquement les variables d’environnement depuis le fichier `.env` racine et construiront les JARs s’ils n’existent pas.
+Les deux scripts chargent automatiquement les variables d'environnement depuis le fichier `.env` racine et construiront les JAR si ceux-ci n'existent pas.
-> **Note :** Si vous préférez construire manuellement tous les modules avant de lancer :
+> **Note :** Si vous préférez construire tous les modules manuellement avant de démarrer :
>
> **Bash :**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-
+>
> **PowerShell :**
> ```powershell
> cd .. # Go to root directory
@@ -331,107 +330,107 @@ Ouvrez http://localhost:8081 dans votre navigateur.
**Bash :**
```bash
-./stop.sh # Ce module seulement
+./stop.sh # Ce module uniquement
# Ou
cd .. && ./stop-all.sh # Tous les modules
```
**PowerShell :**
```powershell
-.\stop.ps1 # Ce module seulement
+.\stop.ps1 # Ce module uniquement
# Ou
cd ..; .\stop-all.ps1 # Tous les modules
```
-## Utiliser l’Application
+## Utilisation de l'Application
-L’application fournit une interface web pour le téléversement de documents et la pose de questions.
+L'application fournit une interface web pour le téléchargement de documents et la pose de questions.
-
+
-*Cette capture d’écran montre l’interface de l’application RAG où vous téléversez des documents et posez des questions.*
+*Cette capture d'écran montre l'interface de l'application RAG où vous téléversez des documents et posez des questions.*
-### Téléverser un Document
+### Téléversez un Document
-Commencez par téléverser un document - les fichiers TXT fonctionnent le mieux pour tester. Un `sample-document.txt` est fourni dans ce répertoire, contenant des informations sur les fonctionnalités de LangChain4j, la mise en œuvre RAG, et les bonnes pratiques — parfait pour tester le système.
+Commencez par téléverser un document — les fichiers TXT fonctionnent le mieux pour les tests. Un fichier `sample-document.txt` est fourni dans ce répertoire, contenant des informations sur les fonctionnalités LangChain4j, l'implémentation RAG, et les bonnes pratiques — parfait pour tester le système.
-Le système traite votre document, le divise en segments, et crée des embeddings pour chaque segment. Cela se fait automatiquement lors du téléversement.
+Le système traite votre document, le découpe en fragments, et crée des incorporations pour chaque fragment. Cela se fait automatiquement dès que vous téléversez.
-### Poser des Questions
+### Posez des Questions
-Posez maintenant des questions spécifiques sur le contenu du document. Essayez quelque chose de factuel et clairement indiqué dans le document. Le système recherche les segments pertinents, les inclut dans le prompt, et génère une réponse.
+Posez maintenant des questions spécifiques sur le contenu du document. Essayez quelque chose de factuel clairement indiqué dans le document. Le système cherche les fragments pertinents, les inclut dans l'invite, et génère une réponse.
-### Vérifier les Références Sources
+### Vérifiez les Références Sources
-Remarquez que chaque réponse inclut des références sources avec des scores de similarité. Ces scores (entre 0 et 1) montrent à quel point chaque segment était pertinent pour votre question. Des scores élevés signifient de meilleures correspondances. Cela vous permet de vérifier la réponse par rapport à la source.
+Notez que chaque réponse inclut des références sources avec des scores de similarité. Ces scores (de 0 à 1) indiquent à quel point chaque fragment était pertinent pour votre question. Des scores plus élevés signifient de meilleures correspondances. Cela vous permet de vérifier la réponse par rapport au matériel source.
-
+
-*Cette capture d’écran montre les résultats d’une requête avec la réponse générée, les références sources, et les scores de pertinence pour chaque segment récupéré.*
+*Cette capture d'écran montre les résultats d'une requête avec la réponse générée, les références sources, et les scores de pertinence pour chaque fragment récupéré.*
### Expérimentez avec les Questions
Essayez différents types de questions :
- Faits spécifiques : « Quel est le sujet principal ? »
- Comparaisons : « Quelle est la différence entre X et Y ? »
-- Résumés : « Résumez les points clés sur Z »
+- Résumés : « Résumez les points clés concernant Z »
-Observez comment les scores de pertinence changent selon la qualité de la correspondance entre votre question et le contenu du document.
+Observez comment les scores de pertinence changent en fonction de la correspondance entre votre question et le contenu du document.
## Concepts Clés
-### Stratégie de Chunking
+### Stratégie de Découpage
-Les documents sont découpés en segments de 300 tokens avec un chevauchement de 30 tokens. Ce compromis garantit que chaque segment contient suffisamment de contexte pour être significatif tout en restant suffisamment petit pour inclure plusieurs segments dans un prompt.
+Les documents sont divisés en fragments de 300 jetons avec un chevauchement de 30 jetons. Cet équilibre garantit que chaque fragment contient assez de contexte pour être significatif tout en restant assez petit pour inclure plusieurs fragments dans une invite.
### Scores de Similarité
-Chaque segment récupéré est accompagné d’un score de similarité entre 0 et 1 indiquant à quel point il correspond à la question de l’utilisateur. Le diagramme ci-dessous visualise les plages de score et la manière dont le système les utilise pour filtrer les résultats :
+Chaque fragment récupéré est accompagné d'un score de similarité compris entre 0 et 1 indiquant sa proximité avec la question de l'utilisateur. Le diagramme ci-dessous visualise les plages de score et comment le système les utilise pour filtrer les résultats :
-*Ce diagramme montre les plages de scores de 0 à 1, avec un seuil minimum de 0,5 qui filtre les segments non pertinents.*
+*Ce diagramme montre les plages de score de 0 à 1, avec un seuil minimum de 0.5 qui filtre les fragments non pertinents.*
-Les scores varient de 0 à 1 :
-- 0,7-1,0 : Très pertinent, correspondance exacte
-- 0,5-0,7 : Pertinent, bon contexte
-- En dessous de 0,5 : Filtré, trop dissemblable
+Les scores vont de 0 à 1 :
+- 0.7-1.0 : Très pertinent, correspondance exacte
+- 0.5-0.7 : Pertinent, bon contexte
+- En dessous de 0.5 : Filtré, trop dissemblable
-Le système ne récupère que les segments au-dessus du seuil minimal pour garantir la qualité.
+Le système ne récupère que les fragments au-dessus du seuil minimum pour assurer la qualité.
-Les embeddings fonctionnent bien lorsque le sens est clairement clusterisé, mais ont des angles morts. Le diagramme ci-dessous montre les modes d’échec courants — les segments trop grands produisent des vecteurs flous, les segments trop petits manquent de contexte, les termes ambigus pointent vers plusieurs clusters, et les recherches par correspondance exacte (IDs, numéros de pièces) ne fonctionnent pas du tout avec les embeddings :
+Les incorporations fonctionnent bien lorsque le sens se regroupe clairement, mais elles ont des angles morts. Le diagramme ci-dessous montre les modes de défaillance courants — les fragments trop grands produisent des vecteurs flous, les fragments trop petits manquent de contexte, les termes ambigus pointent vers plusieurs groupes, et les recherches par correspondance exacte (ID, numéros de pièce) ne fonctionnent pas du tout avec les incorporations :
-
+
-*Ce diagramme montre les modes d’échec communs des embeddings : segments trop grands, segments trop petits, termes ambigus dirigés vers plusieurs clusters, et recherches par correspondance exacte comme les IDs.*
+*Ce diagramme montre les modes de défaillance courants des incorporations : fragments trop grands, fragments trop petits, termes ambigus pointant vers plusieurs groupes, et recherches par correspondance exacte comme les IDs.*
### Stockage en Mémoire
-Ce module utilise un stockage en mémoire pour la simplicité. Quand vous redémarrez l’application, les documents téléversés sont perdus. Les systèmes en production utilisent des bases de données vectorielles persistantes comme Qdrant ou Azure AI Search.
+Ce module utilise un stockage en mémoire pour la simplicité. Lorsque vous redémarrez l'application, les documents téléversés sont perdus. Les systèmes en production utilisent des bases de données vectorielles persistantes comme Qdrant ou Azure AI Search.
### Gestion de la Fenêtre de Contexte
-Chaque modèle a une fenêtre de contexte maximale. Vous ne pouvez pas inclure tous les segments d’un grand document. Le système récupère les N segments les plus pertinents (par défaut 5) pour rester dans les limites tout en fournissant suffisamment de contexte pour des réponses précises.
+Chaque modèle a une fenêtre de contexte maximale. Vous ne pouvez pas inclure tous les fragments d'un grand document. Le système récupère les N fragments les plus pertinents (par défaut 5) pour rester dans les limites tout en fournissant assez de contexte pour des réponses précises.
-## Quand le RAG est Important
+## Quand RAG est Important
-Le RAG n’est pas toujours la bonne approche. Le guide de décision ci-dessous vous aide à déterminer quand le RAG apporte une valeur ajoutée versus quand des approches plus simples — comme inclure le contenu directement dans le prompt ou s’appuyer sur les connaissances intégrées du modèle — suffisent :
+RAG n'est pas toujours la meilleure approche. Le guide de décision ci-dessous vous aide à déterminer quand RAG apporte une valeur ajoutée versus quand des approches plus simples — comme inclure le contenu directement dans l'invite ou compter sur la connaissance intégrée du modèle — suffisent :
-
+
-*Ce diagramme montre un guide décisionnel pour savoir quand le RAG ajoute de la valeur par rapport à des approches plus simples.*
+*Ce diagramme montre un guide de décision pour savoir quand RAG apporte de la valeur par rapport aux approches plus simples.*
## Étapes Suivantes
-**Module suivant :** [04-tools - Agents IA avec Outils](../04-tools/README.md)
+**Module Suivant :** [04-tools - Agents IA avec Outils](../04-tools/README.md)
---
-**Navigation :** [← Précédent : Module 02 - Prompt Engineering](../02-prompt-engineering/README.md) | [Retour à l’Accueil](../README.md) | [Suivant : Module 04 - Outils →](../04-tools/README.md)
+**Navigation :** [← Précédent : Module 02 - Ingénierie de Prompt](../02-prompt-engineering/README.md) | [Retour au Principal](../README.md) | [Suivant : Module 04 - Outils →](../04-tools/README.md)
---
-**Avertissement** :
-Ce document a été traduit à l’aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d’assurer l’exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des imprécisions. Le document original dans sa langue d’origine doit être considéré comme la source faisant foi. Pour les informations critiques, il est recommandé de recourir à une traduction professionnelle effectuée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou de mauvaises interprétations résultant de l’utilisation de cette traduction.
+**Avertissement** :
+Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforçions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour les informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous ne saurions être tenus responsables des malentendus ou erreurs d'interprétation découlant de l'utilisation de cette traduction.
\ No newline at end of file
diff --git a/translations/fr/04-tools/README.md b/translations/fr/04-tools/README.md
index 9e3db6fc8..4b00bd29d 100644
--- a/translations/fr/04-tools/README.md
+++ b/translations/fr/04-tools/README.md
@@ -1,80 +1,80 @@
-# Module 04 : Agents IA avec des Outils
-
-## Table des Matières
-
-- [Parcours Vidéo](../../../04-tools)
-- [Ce que vous apprendrez](../../../04-tools)
-- [Prérequis](../../../04-tools)
-- [Comprendre les agents IA avec des outils](../../../04-tools)
-- [Comment fonctionne l'appel d'outils](../../../04-tools)
- - [Définitions d'outils](../../../04-tools)
- - [Prise de décision](../../../04-tools)
- - [Exécution](../../../04-tools)
- - [Génération de la réponse](../../../04-tools)
- - [Architecture : Auto-wiring Spring Boot](../../../04-tools)
-- [Chaînage d'outils](../../../04-tools)
-- [Lancer l'application](../../../04-tools)
-- [Utilisation de l'application](../../../04-tools)
- - [Essayer un usage simple d'un outil](../../../04-tools)
- - [Tester le chaînage d'outils](../../../04-tools)
- - [Voir le déroulement de la conversation](../../../04-tools)
- - [Expérimenter avec différentes requêtes](../../../04-tools)
-- [Concepts clés](../../../04-tools)
- - [Pattern ReAct (Raisonnement et Action)](../../../04-tools)
- - [Les descriptions d'outils comptent](../../../04-tools)
- - [Gestion des sessions](../../../04-tools)
- - [Gestion des erreurs](../../../04-tools)
-- [Outils disponibles](../../../04-tools)
-- [Quand utiliser des agents basés sur des outils](../../../04-tools)
-- [Outils vs RAG](../../../04-tools)
-- [Étapes suivantes](../../../04-tools)
-
-## Parcours Vidéo
-
-Regardez cette session en direct qui explique comment débuter avec ce module :
-
-
+# Module 04 : Agents IA avec Outils
+
+## Table des matières
+
+- [Présentation vidéo](#présentation-vidéo)
+- [Ce que vous apprendrez](#ce-que-vous-apprendrez)
+- [Prérequis](#prérequis)
+- [Comprendre les agents IA avec outils](#comprendre-les-agents-ia-avec-outils)
+- [Comment fonctionne l’appel d’outils](#comment-fonctionne-l’appel-d’outils)
+ - [Définitions des outils](#définitions-des-outils)
+ - [Prise de décision](#prise-de-décision)
+ - [Exécution](#exécution)
+ - [Génération de réponse](#génération-de-réponse)
+ - [Architecture : Auto-injection Spring Boot](#architecture-auto-injection-spring-boot)
+- [Chaînage d’outils](#chaînage-d’outils)
+- [Exécuter l’application](#exécuter-l’application)
+- [Utilisation de l’application](#utilisation-de-l’application)
+ - [Essayez une utilisation simple des outils](#essayez-une-utilisation-simple-des-outils)
+ - [Tester le chaînage d’outils](#testez-le-chaînage-d’outils)
+ - [Voir le flux de conversation](#voyez-le-flux-de-conversation)
+ - [Expérimentez avec différentes requêtes](#expérimentez-avec-différentes-requêtes)
+- [Concepts clés](#concepts-clés)
+ - [Pattern ReAct (Raisonnement et Action)](#modèle-react-raisonner-et-agir)
+ - [L’importance des descriptions d’outils](#les-descriptions-d’outils-comptent)
+ - [Gestion des sessions](#gestion-de-session)
+ - [Gestion des erreurs](#gestion-des-erreurs)
+- [Outils disponibles](#outils-disponibles)
+- [Quand utiliser des agents basés sur des outils](#quand-utiliser-des-agents-basés-sur-les-outils)
+- [Outils vs RAG](#outils-vs-rag)
+- [Étapes suivantes](#étapes-suivantes)
+
+## Présentation vidéo
+
+Regardez cette session en direct qui explique comment démarrer avec ce module :
+
+
## Ce que vous apprendrez
-Jusqu'à présent, vous avez appris à converser avec une IA, à structurer efficacement des prompts, et à ancrer les réponses dans vos documents. Mais il existe toujours une limitation fondamentale : les modèles de langage ne peuvent générer que du texte. Ils ne peuvent pas consulter la météo, effectuer des calculs, interroger des bases de données ou interagir avec des systèmes externes.
+Jusqu’à présent, vous avez appris à avoir des conversations avec l’IA, structurer efficacement les prompts et ancrer les réponses dans vos documents. Mais il reste une limitation fondamentale : les modèles de langage ne peuvent générer que du texte. Ils ne peuvent pas consulter la météo, effectuer des calculs, interroger des bases de données ou interagir avec des systèmes externes.
-Les outils changent cela. En donnant au modèle accès à des fonctions qu’il peut appeler, vous le transformez d’un générateur de texte en un agent capable d’agir. Le modèle décide quand il a besoin d’un outil, quel outil utiliser, et quels paramètres transmettre. Votre code exécute la fonction et renvoie le résultat. Le modèle incorpore ce résultat dans sa réponse.
+Les outils changent cela. En donnant au modèle accès à des fonctions qu’il peut appeler, vous le transformez d’un générateur de texte en un agent capable d’agir. Le modèle décide quand il a besoin d’un outil, quel outil utiliser et quels paramètres transmettre. Votre code exécute la fonction et retourne le résultat. Le modèle incorpore ce résultat dans sa réponse.
## Prérequis
-- Avoir terminé le [Module 01 - Introduction](../01-introduction/README.md) (ressources Azure OpenAI déployées)
-- Avoir terminé les modules précédents recommandés (ce module fait référence aux [concepts RAG du Module 03](../03-rag/README.md) dans la comparaison Outils vs RAG)
+- Module [01 - Introduction](../01-introduction/README.md) complété (ressources Azure OpenAI déployées)
+- Modules précédents recommandés (ce module fait référence aux [concepts RAG du Module 03](../03-rag/README.md) dans la comparaison Outils vs RAG)
- Fichier `.env` dans le répertoire racine avec les identifiants Azure (créé par `azd up` dans le Module 01)
-> **Note :** Si vous n'avez pas terminé le Module 01, suivez d'abord les instructions de déploiement indiquées.
+> **Note :** Si vous n’avez pas encore terminé le Module 01, suivez d’abord les instructions de déploiement qui y figurent.
-## Comprendre les agents IA avec des outils
+## Comprendre les agents IA avec outils
-> **📝 Note :** Le terme « agents » dans ce module désigne des assistants IA améliorés avec la capacité d’appeler des outils. Ceci est différent des modèles **Agentic AI** (agents autonomes avec planification, mémoire et raisonnement multi-étapes) que nous aborderons dans le [Module 05 : MCP](../05-mcp/README.md).
+> **📝 Note :** Le terme « agents » dans ce module désigne des assistants IA enrichis de la capacité à appeler des outils. Cela diffère des patterns **Agentic AI** (agents autonomes avec planification, mémoire et raisonnement multi-étapes) que nous traiterons dans le [Module 05 : MCP](../05-mcp/README.md).
-Sans outils, un modèle de langage peut uniquement générer du texte à partir de ses données d'entraînement. Demandez-lui la météo actuelle, il doit deviner. Donnez-lui des outils et il peut appeler une API météo, effectuer des calculs ou interroger une base de données — puis intégrer ces résultats réels dans sa réponse.
+Sans outils, un modèle de langage ne peut générer que du texte issu de ses données d’entraînement. Demandez la météo actuelle, il doit deviner. Donnez-lui des outils, il peut appeler une API météo, effectuer des calculs ou interroger une base de données — puis intégrer ces résultats réels dans sa réponse.
-*Sans outils, le modèle ne peut que deviner — avec des outils, il peut appeler des API, exécuter des calculs et retourner des données en temps réel.*
+*Sans outils, le modèle ne peut que deviner — avec des outils, il peut appeler des API, faire des calculs et fournir des données en temps réel.*
-Un agent IA avec des outils suit un pattern **Reasoning and Acting (ReAct)**. Le modèle ne se contente pas de répondre — il réfléchit à ce dont il a besoin, agit en appelant un outil, observe le résultat, puis décide s’il doit agir à nouveau ou livrer la réponse finale :
+Un agent IA avec outils suit un pattern **Raisonnement et Action (ReAct)**. Le modèle ne se contente pas de répondre — il réfléchit à ce dont il a besoin, agit en appelant un outil, observe le résultat, puis décide s’il doit agir à nouveau ou fournir la réponse finale :
-1. **Raisonner** — L’agent analyse la question de l’utilisateur et détermine quelles informations il lui faut
-2. **Agir** — L’agent sélectionne l’outil approprié, génère les paramètres corrects, et l’appelle
-3. **Observer** — L’agent reçoit la sortie de l’outil et évalue le résultat
+1. **Raisonner** — L’agent analyse la question de l’utilisateur et détermine quelles informations sont nécessaires
+2. **Agir** — L’agent sélectionne l’outil approprié, génère les bons paramètres, puis l’appelle
+3. **Observer** — L’agent reçoit la sortie de l’outil et évalue le résultat
4. **Répéter ou Répondre** — Si plus de données sont nécessaires, l’agent recommence ; sinon, il compose une réponse en langage naturel
-*Le cycle ReAct — l’agent raisonne sur ce qu’il doit faire, agit en appelant un outil, observe le résultat, et boucle jusqu’à pouvoir fournir la réponse finale.*
+*Le cycle ReAct — l’agent raisonne sur ce qu’il doit faire, agit en appelant un outil, observe le résultat et boucle jusqu’à fournir la réponse finale.*
-Cela se passe automatiquement. Vous définissez les outils et leurs descriptions. Le modèle gère la prise de décision pour savoir quand et comment les utiliser.
+Ceci se passe automatiquement. Vous définissez les outils et leurs descriptions. Le modèle prend en charge la prise de décision sur quand et comment les utiliser.
-## Comment fonctionne l'appel d'outils
+## Comment fonctionne l’appel d’outils
-### Définitions d'outils
+### Définitions des outils
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
@@ -102,134 +102,131 @@ public interface Assistant {
// - ChatMemoryProvider pour la gestion des sessions
```
+Le diagramme ci-dessous décompose chaque annotation et montre comment chaque élément aide l’IA à comprendre quand appeler l’outil et quels arguments transmettre :
-Le schéma ci-dessous détaille chaque annotation et montre comment chaque élément aide l’IA à comprendre quand appeler l’outil et quels arguments transmettre :
+
-
+*Anatomie d’une définition d’outil — @Tool indique à l’IA quand l’utiliser, @P décrit chaque paramètre, et @AiService connecte tout automatiquement au démarrage.*
-*Anatomie d’une définition d’outil — @Tool indique à l’IA quand l’utiliser, @P décrit chaque paramètre, et @AiService connecte tout au démarrage.*
-
-> **🤖 Essayez avec [GitHub Copilot](https://github.com/features/copilot) Chat :** Ouvrez [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) et demandez :
-> - « Comment intégrerais-je une vraie API météo comme OpenWeatherMap au lieu de données factices ? »
-> - « Qu’est-ce qui fait une bonne description d’outil qui aide l’IA à l’utiliser correctement ? »
+> **🤖 Essayez avec [GitHub Copilot](https://github.com/features/copilot) Chat :** Ouvrez [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) et demandez :
+> - « Comment intégrer une vraie API météo comme OpenWeatherMap plutôt que des données simulées ? »
+> - « Qu’est-ce qui fait une bonne description d’outil pour aider l’IA à l’utiliser correctement ? »
> - « Comment gérer les erreurs d’API et les limites de requêtes dans l’implémentation des outils ? »
### Prise de décision
-Lorsqu’un utilisateur demande « Quelle est la météo à Seattle ? », le modèle ne choisit pas un outil au hasard. Il compare l’intention de l’utilisateur à chaque description d’outil accessible, évalue leur pertinence, et sélectionne la meilleure correspondance. Il génère alors un appel de fonction structuré avec les bons paramètres — ici, en définissant `location` à `"Seattle"`.
+Quand un utilisateur demande « Quelle est la météo à Seattle ? », le modèle ne choisit pas un outil au hasard. Il compare l’intention de l’utilisateur avec chaque description d’outil dont il dispose, attribue un score de pertinence à chacune, puis sélectionne la meilleure correspondance. Il génère ensuite un appel de fonction structuré avec les bons paramètres — ici, en définissant `location` à `"Seattle"`.
-Si aucun outil ne correspond à la demande, le modèle répond depuis ses propres connaissances. Si plusieurs outils correspondent, il choisit le plus spécifique.
+Si aucun outil ne correspond à la requête, le modèle répond depuis ses connaissances. Si plusieurs outils correspondent, il choisit le plus spécifique.
-
+
-*Le modèle évalue chaque outil disponible par rapport à l’intention de l’utilisateur et sélectionne la meilleure correspondance — d’où l’importance d’écrire des descriptions d’outils claires et précises.*
+*Le modèle évalue chaque outil disponible face à l’intention de l’utilisateur et sélectionne la meilleure correspondance — c’est pourquoi il est important de rédiger des descriptions d’outils claires et spécifiques.*
### Exécution
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-Spring Boot connecte automatiquement l’interface déclarative `@AiService` avec tous les outils enregistrés, et LangChain4j exécute les appels aux outils automatiquement. Dans les coulisses, un appel complet d’outil passe par six étapes — depuis la question en langage naturel posée par l'utilisateur jusqu’à la réponse finale en langage naturel :
+Spring Boot injecte automatiquement l’interface déclarative `@AiService` avec tous les outils enregistrés, et LangChain4j exécute les appels d’outils automatiquement. En coulisses, un appel complet d’outil traverse six étapes — de la question en langage naturel de l’utilisateur jusqu’à la réponse en langage naturel :
-
+
*Le flux de bout en bout — l’utilisateur pose une question, le modèle sélectionne un outil, LangChain4j l’exécute, et le modèle intègre le résultat dans une réponse naturelle.*
-Si vous avez exécuté la [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) du Module 00, vous avez déjà vu ce pattern en action — les outils `Calculator` étaient appelés de la même manière. Le diagramme de séquence ci-dessous détaille exactement ce qui s’est passé sous le capot durant cette démo :
+En coulisses, `AiServices` exécute la même boucle d’appel d’outil pour n’importe quel outil — ici illustré avec un simple `Calculator`. Le diagramme de séquence ci-dessous montre exactement ce qui se passe sous le capot :
-
+
-*La boucle d’appel d’outils du démo Quick Start — `AiServices` envoie votre message et les schémas d’outils au LLM, le LLM répond par un appel de fonction comme `add(42, 58)`, LangChain4j exécute la méthode `Calculator` localement, et renvoie le résultat pour la réponse finale.*
+*La boucle d’appel d’outil — `AiServices` envoie votre message et les schémas d’outils au LLM, le LLM répond avec un appel de fonction comme `add(42, 58)`, LangChain4j exécute localement la méthode du `Calculator`, puis renvoie le résultat pour la réponse finale.*
-> **🤖 Essayez avec [GitHub Copilot](https://github.com/features/copilot) Chat :** Ouvrez [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) et demandez :
-> - « Comment fonctionne le pattern ReAct et pourquoi est-il efficace pour les agents IA ? »
-> - « Comment l’agent décide quel outil utiliser et dans quel ordre ? »
-> - « Que se passe-t-il si l’exécution d’un outil échoue - comment gérer les erreurs de manière robuste ? »
+> **🤖 Essayez avec [GitHub Copilot](https://github.com/features/copilot) Chat :** Ouvrez [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) et demandez :
+> - « Comment fonctionne le pattern ReAct et pourquoi est-il efficace pour les agents IA ? »
+> - « Comment l’agent décide quel outil utiliser et dans quel ordre ? »
+> - « Que se passe-t-il si l’exécution d’un outil échoue — comment gérer les erreurs de manière robuste ? »
-### Génération de la réponse
+### Génération de réponse
Le modèle reçoit les données météo et les formate en une réponse en langage naturel pour l’utilisateur.
-### Architecture : Auto-wiring Spring Boot
+### Architecture : Auto-injection Spring Boot
-Ce module utilise l’intégration LangChain4j avec Spring Boot via des interfaces déclaratives `@AiService`. Au démarrage, Spring Boot découvre chaque `@Component` contenant des méthodes `@Tool`, votre bean `ChatModel`, et le `ChatMemoryProvider` — puis les connecte tous dans une seule interface `Assistant` sans aucun code répétitif.
+Ce module utilise l’intégration Spring Boot de LangChain4j avec des interfaces déclaratives `@AiService`. Au démarrage, Spring Boot découvre chaque `@Component` contenant des méthodes `@Tool`, votre bean `ChatModel` et le `ChatMemoryProvider` — puis les injecte tous dans une interface unique `Assistant` sans aucun code répétitif.
-
+
-*L’interface @AiService relie le ChatModel, les composants outils, et le fournisseur mémoire — Spring Boot gère automatiquement tout le câblage.*
+*L’interface @AiService relie le ChatModel, les composants d’outils et le fournisseur de mémoire — Spring Boot gère automatiquement toute l’injection.*
-Voici le cycle complet d’une requête sous forme de diagramme de séquence — depuis la requête HTTP via le contrôleur, le service, le proxy auto-câblé, jusqu’à l’exécution de l’outil et le retour :
+Voici le cycle complet d’une requête représenté en diagramme de séquence — de la requête HTTP au contrôleur, service et proxy auto-injecté, jusqu’à l’exécution de l’outil et retour :
-
+
-*Le cycle complet de la requête Spring Boot — la requête HTTP passe par le contrôleur et le service vers le proxy Assistant automonté, qui orchestre automatiquement le LLM et les appels aux outils.*
+*Le cycle complet d’une requête Spring Boot — la requête HTTP transite par le contrôleur et le service vers le proxy Assistant auto-injecté, qui orchestre automatiquement le LLM et les appels d’outils.*
Les avantages clés de cette approche :
-- **Auto-wiring Spring Boot** — injection automatique du ChatModel et des outils
-- **Pattern @MemoryId** — gestion automatique de la mémoire par session
-- **Instance unique** — Assistant créé une fois pour une meilleure performance
-- **Exécution typée** — méthodes Java appelées directement avec conversion de types
-- **Orchestration multi-étapes** — gestion automatique du chaînage d’outils
-- **Aucun code répétitif** — pas d’appel manuel à `AiServices.builder()` ni gestion explicite de HashMap mémoire
+- **Auto-injection Spring Boot** — ChatModel et outils injectés automatiquement
+- **Pattern @MemoryId** — Gestion automatique de la mémoire basée sur la session
+- **Instance unique** — Assistant créé une fois et réutilisé pour de meilleures performances
+- **Exécution typée** — Méthodes Java appelées directement avec conversion de types
+- **Orchestration multi-tours** — Chaînage d’outils géré automatiquement
+- **Zéro code répétitif** — Pas d’appels manuels à `AiServices.builder()` ou de HashMap mémoire
-Les approches alternatives (manuelles via `AiServices.builder()`) nécessitent plus de code et ne profitent pas des avantages de Spring Boot.
+Les approches alternatives (construction manuelle via `AiServices.builder()`) nécessitent plus de code et perdent les bénéfices de l’intégration Spring Boot.
-## Chaînage d'outils
+## Chaînage d’outils
-**Chaînage d'outils** — La vraie puissance des agents basés sur des outils apparaît lorsqu’une seule question nécessite plusieurs outils. Demandez « Quelle est la météo à Seattle en Fahrenheit ? » et l’agent enchaîne automatiquement deux outils : d’abord il appelle `getCurrentWeather` pour obtenir la température en Celsius, puis il transmet cette valeur à `celsiusToFahrenheit` pour la conversion — tout cela en un seul tour de conversation.
+**Chaînage d’outils** — La vraie puissance des agents basés sur outils se manifeste lorsqu’une seule question nécessite plusieurs outils. Demandez « Quelle est la météo à Seattle en Fahrenheit ? » et l’agent enchaîne automatiquement deux outils : il appelle d’abord `getCurrentWeather` pour obtenir la température en Celsius, puis transmet cette valeur à `celsiusToFahrenheit` pour la conversion — tout cela en un seul tour de conversation.
-
+
-*Chaînage d’outils en action — l’agent appelle d’abord getCurrentWeather, puis passe le résultat en Celsius à celsiusToFahrenheit, et fournit une réponse combinée.*
+*Chaînage d’outils en action — l’agent appelle d’abord getCurrentWeather, puis transmet le résultat en Celsius à celsiusToFahrenheit, et fournit une réponse combinée.*
-**Gestion élégante des échecs** — Demandez la météo dans une ville qui n’est pas dans les données factices. L’outil renvoie un message d’erreur, et l’IA explique qu’elle ne peut pas aider au lieu de planter. Les outils échouent en toute sécurité. Le schéma ci-dessous contraste les deux approches — avec une gestion correcte des erreurs, l’agent intercepte l’exception et répond utilement, tandis que sans cela l’application entière plante :
+**Échecs gracieux** — Demandez la météo dans une ville qui n’est pas dans les données simulées. L’outil renvoie un message d’erreur et l’IA explique qu’elle ne peut pas aider plutôt que de planter. Les outils échouent en toute sécurité. Le diagramme ci-dessous met en contraste les deux approches — avec une gestion correcte des erreurs, l’agent intercepte l’exception et répond utilement, tandis que sans elle l’application entière plante :
-
+
-*Quand un outil échoue, l’agent attrape l’erreur et répond avec une explication utile au lieu de planter.*
+*Quand un outil échoue, l’agent intercepte l’erreur et répond avec une explication utile au lieu de planter.*
-Cela se déroule en un seul tour de conversation. L’agent orchestre les appels multiples aux outils de manière autonome.
+Cela se passe en un seul tour de conversation. L’agent orchestre plusieurs appels d’outils de façon autonome.
-## Lancer l'application
+## Exécuter l’application
**Vérifiez le déploiement :**
-Assurez-vous que le fichier `.env` existe dans le répertoire racine avec les identifiants Azure (créé lors du Module 01). Lancez cette commande depuis le répertoire du module (`04-tools/`) :
+Assurez-vous que le fichier `.env` existe dans le répertoire racine avec les identifiants Azure (créé pendant le Module 01). Exécutez ceci depuis le répertoire du module (`04-tools/`) :
-**Bash :**
+**Bash :**
```bash
-cat ../.env # Devrait afficher AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+cat ../.env # Doit afficher AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
-**PowerShell :**
+**PowerShell :**
```powershell
-Get-Content ..\.env # Devrait afficher AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+Get-Content ..\.env # Doit afficher AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
+**Démarrer l’application :**
-**Démarrez l’application :**
+> **Note :** Si vous avez déjà démarré toutes les applications via `./start-all.sh` depuis le répertoire racine (comme décrit dans le Module 01), ce module est déjà en cours d’exécution sur le port 8084. Vous pouvez sauter les commandes de démarrage ci-dessous et aller directement à http://localhost:8084.
-> **Note :** Si vous avez déjà démarré toutes les applications avec `./start-all.sh` depuis le répertoire racine (comme décrit dans le Module 01), ce module tourne déjà sur le port 8084. Vous pouvez passer les commandes de démarrage ci-dessous et aller directement à http://localhost:8084.
+**Option 1 : Utiliser le Spring Boot Dashboard (recommandé pour les utilisateurs de VS Code)**
-**Option 1 : Utiliser le Spring Boot Dashboard (recommandé pour les utilisateurs VS Code)**
+Le conteneur dev inclut l’extension Spring Boot Dashboard, qui offre une interface visuelle pour gérer toutes les applications Spring Boot. Vous pouvez la trouver dans la barre d’activités à gauche de VS Code (cherchez l’icône Spring Boot).
-Le conteneur de développement inclut l’extension Spring Boot Dashboard, qui offre une interface visuelle pour gérer toutes les applications Spring Boot. Vous la trouverez dans la barre d’activités à gauche dans VS Code (cherchez l’icône Spring Boot).
-
-Depuis le Spring Boot Dashboard, vous pouvez :
-- Voir toutes les applications Spring Boot disponibles dans l’espace de travail
-- Démarrer/arrêter les applications en un clic
-- Visualiser les logs des applications en temps réel
+Depuis le Spring Boot Dashboard, vous pouvez :
+- Voir toutes les applications Spring Boot disponibles dans l’espace de travail
+- Démarrer/arrêter les applications d’un simple clic
+- Consulter les logs applicatifs en temps réel
- Surveiller le statut des applications
-Il suffit de cliquer sur le bouton de lecture à côté de "tools" pour démarrer ce module, ou démarrer tous les modules en même temps.
-Voici à quoi ressemble le Spring Boot Dashboard dans VS Code :
+Cliquez simplement sur le bouton lecture à côté de "tools" pour démarrer ce module, ou lancez tous les modules en même temps.
-
+Voici à quoi ressemble le Spring Boot Dashboard dans VS Code :
+
-*Le Spring Boot Dashboard dans VS Code — démarrer, arrêter et surveiller tous les modules depuis un seul endroit*
+*Le tableau de bord Spring Boot dans VS Code — démarrer, arrêter et surveiller tous les modules depuis un seul endroit*
-**Option 2 : Utiliser des scripts shell**
+**Option 2 : Utilisation de scripts shell**
Démarrer toutes les applications web (modules 01-04) :
@@ -259,9 +256,9 @@ cd 04-tools
.\start.ps1
```
-Les deux scripts chargent automatiquement les variables d’environnement à partir du fichier `.env` racine et construiront les JARs s’ils n’existent pas.
+Les deux scripts chargent automatiquement les variables d'environnement depuis le fichier racine `.env` et construiront les JAR si ceux-ci n’existent pas.
-> **Note :** Si vous préférez construire tous les modules manuellement avant de démarrer :
+> **Note :** Si vous préférez construire manuellement tous les modules avant de démarrer :
>
> **Bash :**
> ```bash
@@ -281,7 +278,7 @@ Ouvrez http://localhost:8084 dans votre navigateur.
**Bash :**
```bash
-./stop.sh # Seulement ce module
+./stop.sh # Ce module uniquement
# Ou
cd .. && ./stop-all.sh # Tous les modules
```
@@ -295,86 +292,86 @@ cd ..; .\stop-all.ps1 # Tous les modules
## Utilisation de l’Application
-L’application fournit une interface web où vous pouvez interagir avec un agent IA qui a accès aux outils météo et de conversion de température. Voici à quoi ressemble l’interface — elle inclut des exemples rapides et un panneau de discussion pour envoyer des requêtes :
+L’application fournit une interface web où vous pouvez interagir avec un agent IA ayant accès à des outils météo et de conversion de température. Voici à quoi ressemble l’interface — elle inclut des exemples de démarrage rapide et un panneau de chat pour envoyer des requêtes :
-
+
-*L’interface des outils de l’agent IA - exemples rapides et interface de chat pour interagir avec les outils*
+*L’interface des Outils de l’Agent IA - exemples rapides et interface de chat pour interagir avec les outils*
-### Essayez l’utilisation simple d’un outil
+### Essayez une Utilisation Simple des Outils
-Commencez par une demande simple : « Convertir 100 degrés Fahrenheit en Celsius ». L’agent reconnaît qu’il a besoin de l’outil de conversion de température, l’appelle avec les bons paramètres et renvoie le résultat. Remarquez à quel point cela semble naturel — vous n’avez pas spécifié quel outil utiliser ni comment l’appeler.
+Commencez par une requête simple : « Convertir 100 degrés Fahrenheit en Celsius ». L’agent reconnaît qu’il doit utiliser l’outil de conversion de température, l’appelle avec les bons paramètres et retourne le résultat. Notez à quel point c’est naturel — vous n’avez pas spécifié quel outil utiliser ni comment l’appeler.
-### Testez la chaîne d’outils
+### Testez le Chaînage d’Outils
-Essayez maintenant quelque chose de plus complexe : « Quel temps fait-il à Seattle et convertis-le en Fahrenheit ? » Regardez l’agent traiter cela étape par étape. Il récupère d’abord la météo (qui renvoie en Celsius), reconnaît qu’il doit convertir en Fahrenheit, appelle l’outil de conversion, et combine les deux résultats en une seule réponse.
+Essayez maintenant quelque chose de plus complexe : « Quel temps fait-il à Seattle et convertis-le en Fahrenheit ? » Regardez comment l’agent procède en étapes. Il récupère d’abord la météo (qui retourne en Celsius), reconnaît qu’il doit convertir en Fahrenheit, appelle l’outil de conversion, et combine les deux résultats en une seule réponse.
-### Voir le déroulement de la conversation
+### Voyez le Flux de Conversation
-L’interface de chat garde l’historique des conversations, ce qui vous permet d’avoir des interactions à plusieurs tours. Vous pouvez voir toutes les requêtes et réponses précédentes, facilitant le suivi de la conversation et la compréhension de la manière dont l’agent construit le contexte au fil des échanges.
+L’interface de chat conserve l’historique des conversations, vous permettant d’avoir des interactions multi-tours. Vous pouvez voir toutes les requêtes et réponses précédentes, ce qui facilite le suivi de la conversation et la compréhension de la manière dont l’agent construit le contexte au fil des échanges.
-
+
-*Conversation à plusieurs tours montrant des conversions simples, des recherches météo et des chaînes d’outils*
+*Conversation multi-tours montrant des conversions simples, des recherches météo et le chaînage d’outils*
-### Expérimentez avec différentes requêtes
+### Expérimentez avec Différentes Requêtes
-Essayez différentes combinaisons :
+Essayez diverses combinaisons :
- Recherches météo : « Quel temps fait-il à Tokyo ? »
- Conversions de température : « Que vaut 25°C en Kelvin ? »
-- Requêtes combinées : « Vérifie le temps à Paris et dis-moi s’il fait plus de 20°C »
+- Requêtes combinées : « Vérifie la météo à Paris et dis-moi s’il fait plus de 20°C »
-Observez comment l’agent interprète le langage naturel et le traduit en appels appropriés aux outils.
+Notez comment l’agent interprète le langage naturel et le mappe à des appels appropriés aux outils.
-## Concepts Clés
+## Concepts clés
-### Modèle ReAct (Raisonnement et Action)
+### Modèle ReAct (Raisonner et Agir)
-L’agent alterne entre le raisonnement (décider quoi faire) et l’action (utiliser les outils). Ce modèle permet une résolution autonome de problème plutôt que de simplement répondre à des instructions.
+L’agent alterne entre raisonner (décider quoi faire) et agir (utiliser les outils). Ce modèle permet une résolution autonome de problèmes plutôt que de simplement répondre à des instructions.
-### Les descriptions des outils comptent
+### Les Descriptions d’Outils Comptent
-La qualité de vos descriptions d’outils influence directement la qualité de leur utilisation par l’agent. Des descriptions claires et spécifiques aident le modèle à comprendre quand et comment appeler chaque outil.
+La qualité des descriptions de vos outils influence directement la capacité de l’agent à les utiliser correctement. Des descriptions claires et spécifiques aident le modèle à comprendre quand et comment appeler chaque outil.
-### Gestion de session
+### Gestion de Session
-L’annotation `@MemoryId` permet une gestion automatique de la mémoire basée sur la session. Chaque ID de session obtient sa propre instance de `ChatMemory` gérée par le bean `ChatMemoryProvider`, permettant à plusieurs utilisateurs d’interagir avec l’agent simultanément sans mélanger leurs conversations. Le schéma suivant montre comment plusieurs utilisateurs sont dirigés vers des mémoires isolées en fonction de leur ID de session :
+L’annotation `@MemoryId` permet une gestion automatique de la mémoire basée sur la session. Chaque ID de session obtient sa propre instance `ChatMemory` gérée par le bean `ChatMemoryProvider`, permettant à plusieurs utilisateurs d’interagir simultanément avec l’agent sans mélange des conversations. Le diagramme suivant montre comment plusieurs utilisateurs sont dirigés vers des mémoires isolées basées sur leurs ID de session :
-
+
*Chaque ID de session correspond à un historique de conversation isolé — les utilisateurs ne voient jamais les messages des autres.*
-### Gestion des erreurs
+### Gestion des Erreurs
-Les outils peuvent échouer — les API peuvent expirer, des paramètres peuvent être invalides, des services externes peuvent tomber en panne. Les agents en production ont besoin de gestion des erreurs pour que le modèle puisse expliquer les problèmes ou essayer des alternatives au lieu de faire planter toute l’application. Lorsqu’un outil lance une exception, LangChain4j la capte et renvoie le message d’erreur au modèle, qui peut alors expliquer le problème en langage naturel.
+Les outils peuvent échouer — les API peuvent expirer, les paramètres être invalides, les services externes tomber en panne. Les agents de production ont besoin de gestion des erreurs pour que le modèle puisse expliquer les problèmes ou essayer des alternatives plutôt que de faire planter l’application entière. Lorsqu’un outil lance une exception, LangChain4j la capture et renvoie le message d’erreur au modèle, qui peut alors expliquer le problème en langage naturel.
-## Outils Disponibles
+## Outils disponibles
-Le diagramme ci-dessous montre l’écosystème large d’outils que vous pouvez construire. Ce module démontre les outils météo et de température, mais le même modèle `@Tool` fonctionne pour n’importe quelle méthode Java — des requêtes de base de données au traitement des paiements.
+Le diagramme ci-dessous montre l’écosystème étendu d’outils que vous pouvez construire. Ce module démontre des outils météo et de température, mais le même modèle `@Tool` fonctionne pour toute méthode Java — des requêtes de base de données au traitement des paiements.
-
+
-*Toute méthode Java annotée avec @Tool devient disponible à l’IA — le modèle s’étend aux bases de données, APIs, e-mails, opérations sur fichiers, et plus.*
+*Toute méthode Java annotée avec @Tool devient disponible pour l’IA — le modèle s’étend aux bases de données, APIs, e-mails, opérations de fichiers, et plus.*
-## Quand utiliser des agents basés sur des outils
+## Quand utiliser des agents basés sur les outils
-Toutes les requêtes n’ont pas besoin d’outils. La décision dépend de si l’IA doit interagir avec des systèmes externes ou peut répondre avec ses propres connaissances. Le guide suivant résume quand les outils ajoutent de la valeur et quand ils sont inutiles :
+Toutes les requêtes ne nécessitent pas d’outils. La décision dépend de si l’IA doit interagir avec des systèmes externes ou peut répondre à partir de sa propre connaissance. Le guide ci-dessous résume quand les outils apportent de la valeur et quand ils sont superflus :
-
+
-*Un guide de décision rapide — les outils servent aux données en temps réel, calculs et actions ; les connaissances générales et tâches créatives n’en ont pas besoin.*
+*Un guide rapide de décision — les outils servent pour les données en temps réel, calculs et actions ; les connaissances générales et tâches créatives n’en ont pas besoin.*
## Outils vs RAG
-Les modules 03 et 04 étendent tous deux ce que l’IA peut faire, mais de manière fondamentalement différente. RAG donne au modèle accès à la **connaissance** en récupérant des documents. Les outils permettent au modèle de prendre des **actions** en appelant des fonctions. Le diagramme ci-dessous compare ces deux approches côte à côte — du fonctionnement du workflow aux compromis entre elles :
+Les modules 03 et 04 étendent tous deux les capacités de l’IA, mais de façons fondamentalement différentes. RAG donne au modèle accès à la **connaissance** en récupérant des documents. Les outils donnent au modèle la capacité de prendre des **actions** en appelant des fonctions. Le diagramme ci-dessous compare ces deux approches côte à côte — du fonctionnement des workflows aux compromis entre elles :
-
+
-*RAG récupère des informations à partir de documents statiques — Les outils exécutent des actions et récupèrent des données dynamiques en temps réel. Beaucoup de systèmes de production combinent les deux.*
+*RAG récupère des informations depuis des documents statiques — les outils exécutent des actions et récupèrent des données dynamiques et en temps réel. Beaucoup de systèmes de production combinent les deux.*
-En pratique, de nombreux systèmes de production combinent les deux approches : RAG pour ancrer les réponses dans votre documentation, et les outils pour récupérer des données en direct ou effectuer des opérations.
+En pratique, nombreux sont les systèmes de production qui combinent les deux approches : RAG pour ancrer les réponses dans votre documentation, et Outils pour récupérer des données en direct ou réaliser des opérations.
-## Étapes Suivantes
+## Étapes suivantes
**Module suivant :** [05-mcp - Model Context Protocol (MCP)](../05-mcp/README.md)
@@ -385,6 +382,6 @@ En pratique, de nombreux systèmes de production combinent les deux approches :
---
-**Avertissement** :
-Ce document a été traduit à l’aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforçons d’assurer l’exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d’origine doit être considéré comme la source faisant foi. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou de mauvaises interprétations résultant de l’utilisation de cette traduction.
+**Avertissement** :
+Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforçions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour les informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous ne saurions être tenus responsables des malentendus ou erreurs d'interprétation découlant de l'utilisation de cette traduction.
\ No newline at end of file
diff --git a/translations/fr/README.md b/translations/fr/README.md
index 3fe81f2ef..611729e00 100644
--- a/translations/fr/README.md
+++ b/translations/fr/README.md
@@ -2,7 +2,7 @@
# LangChain4j pour débutants
-Un cours pour créer des applications IA avec LangChain4j et Azure OpenAI GPT-5.2, du chat basique aux agents IA.
+Un cours pour construire des applications d'IA avec LangChain4j et Azure OpenAI GPT-5.2, du chat basique aux agents IA.
### 🌐 Support multilingue
@@ -13,7 +13,7 @@ Un cours pour créer des applications IA avec LangChain4j et Azure OpenAI GPT-5.
> **Préférez cloner localement ?**
>
-> Ce dépôt inclut plus de 50 traductions linguistiques ce qui augmente considérablement la taille du téléchargement. Pour cloner sans traductions, utilisez le sparse checkout :
+> Ce dépôt comprend plus de 50 traductions de langues ce qui augmente significativement la taille du téléchargement. Pour cloner sans traductions, utilisez le sparse checkout :
>
> **Bash / macOS / Linux :**
> ```bash
@@ -29,26 +29,25 @@ Un cours pour créer des applications IA avec LangChain4j et Azure OpenAI GPT-5.
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> Cela vous donne tout ce dont vous avez besoin pour compléter le cours avec un téléchargement bien plus rapide.
+> Cela vous fournit tout ce dont vous avez besoin pour compléter le cours avec un téléchargement beaucoup plus rapide.
## Table des matières
-1. [Démarrage rapide](00-quick-start/README.md) - Démarrez avec LangChain4j
-2. [Introduction](01-introduction/README.md) - Apprenez les fondamentaux de LangChain4j
-3. [Conception de prompt](02-prompt-engineering/README.md) - Maîtrisez la conception efficace de prompts
-4. [RAG (Génération augmentée par récupération)](03-rag/README.md) - Créez des systèmes intelligents basés sur la connaissance
-5. [Outils](04-tools/README.md) - Intégrez des outils externes et assistants simples
-6. [MCP (Protocole de Contexte Modèle)](05-mcp/README.md) - Travaillez avec le Protocole de Contexte Modèle (MCP) et les modules Agentiques
+1. [Introduction](01-introduction/README.md) - Apprenez les fondamentaux de LangChain4j
+2. [Ingénierie de prompt](02-prompt-engineering/README.md) - Maîtrisez la conception efficace de prompt
+3. [RAG (Récupération Augmentée par la Génération)](03-rag/README.md) - Construisez des systèmes intelligents basés sur la connaissance
+4. [Outils](04-tools/README.md) - Intégrez des outils externes et assistants simples
+5. [MCP (Protocole de Contexte de Modèle)](05-mcp/README.md) - Travaillez avec le Protocole de Contexte de Modèle (MCP) et les modules Agentic
### Vidéos explicatives
-Chaque module est accompagné d'une session en direct où nous parcourons les concepts et le code étape par étape.
+Chaque module a une session en direct associée où nous parcourons les concepts et le code pas à pas.
| Module | Vidéo |
|--------|-------|
-| 01 - Introduction | [Premiers pas avec LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
-| 02 - Conception de prompt | [Conception de prompt avec LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
+| 01 - Introduction | [Commencer avec LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
+| 02 - Ingénierie de prompt | [Ingénierie de prompt avec LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
| 03 - RAG | [RAG avec LangChain4j](https://www.youtube.com/watch?v=_olq75ZH_eY) |
| 04 - Outils & 05 - MCP | [Agents IA avec Outils et MCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
@@ -60,29 +59,30 @@ Chaque module est accompagné d'une session en direct où nous parcourons les co
> **Démarrage rapide**
-1. Forkez ce dépôt vers votre compte GitHub
-2. Cliquez sur **Code** → onglet **Codespaces** → **...** → **Nouveau avec options...**
+1. Forkez ce dépôt sur votre compte GitHub
+2. Cliquez sur **Code** → l’onglet **Codespaces** → **...** → **Nouveau avec options...**
3. Utilisez les paramètres par défaut – cela sélectionnera le conteneur de développement créé pour ce cours
-4. Cliquez sur **Créer codespace**
-5. Patientez 5-10 minutes que l'environnement soit prêt
-6. Allez directement à [Démarrage rapide](./00-quick-start/README.md) pour commencer !
+4. Cliquez sur **Créer un codespace**
+5. Attendez 5 à 10 minutes pour que l’environnement soit prêt
+6. Passez directement à [Introduction](./01-introduction/README.md) pour commencer !
Après avoir complété les modules, explorez le [Guide de test](docs/TESTING.md) pour voir les concepts de test LangChain4j en action.
-> **Note :** Cette formation utilise à la fois les modèles GitHub et Azure OpenAI. Le module [Démarrage rapide](00-quick-start/README.md) utilise les modèles GitHub (abonnement Azure non requis), tandis que les modules 1 à 5 utilisent Azure OpenAI. Commencez avec un [compte Azure GRATUIT](https://aka.ms/azure-free-account) si vous n'en avez pas.
+> **Note :** Cette formation utilise Azure OpenAI. Commencez avec un [compte Azure GRATUIT](https://aka.ms/azure-free-account) si vous n’en avez pas.
+
## Apprentissage avec GitHub Copilot
-Pour coder rapidement, ouvrez ce projet dans un GitHub Codespace ou votre IDE local avec le devcontainer fourni. Le devcontainer utilisé dans ce cours est préconfiguré avec GitHub Copilot pour une programmation assistée IA en binôme.
+Pour démarrer rapidement votre codage, ouvrez ce projet dans un GitHub Codespace ou votre IDE local avec le devcontainer fourni. Le devcontainer utilisé dans ce cours est préconfiguré avec GitHub Copilot pour la programmation assistée par IA.
-Chaque exemple de code inclut des questions suggérées que vous pouvez poser à GitHub Copilot pour approfondir votre compréhension. Cherchez les invites 💡/🤖 dans :
+Chaque exemple de code inclut des questions suggérées que vous pouvez poser à GitHub Copilot pour approfondir votre compréhension. Recherchez les invites 💡/🤖 dans :
-- **En-têtes de fichiers Java** - Questions spécifiques à chaque exemple
-- **README des modules** - Invites d'exploration après les exemples de code
+- **En-têtes de fichiers Java** – Questions spécifiques à chaque exemple
+- **README des modules** – Invites d’exploration après les exemples de code
-**Comment utiliser :** Ouvrez n'importe quel fichier de code et posez à Copilot les questions suggérées. Il a le contexte complet du code et peut expliquer, étendre et suggérer des alternatives.
+**Comment utiliser :** Ouvrez n’importe quel fichier de code et posez à Copilot les questions suggérées. Il a le contexte complet du code et peut expliquer, étendre et suggérer des alternatives.
-Envie d'en savoir plus ? Découvrez [Copilot pour la programmation assistée IA](https://aka.ms/GitHubCopilotAI).
+Vous souhaitez en savoir plus ? Consultez [Copilot pour la programmation assistée par IA](https://aka.ms/GitHubCopilotAI).
## Ressources supplémentaires
@@ -110,19 +110,19 @@ Envie d'en savoir plus ? Découvrez [Copilot pour la programmation assistée IA]
---
-### Apprentissages fondamentaux
+### Apprentissage fondamental
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
-[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
+[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
### Série Copilot
-[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
@@ -133,7 +133,7 @@ Si vous êtes bloqué ou avez des questions sur la création d'applications IA,
[](https://aka.ms/foundry/discord)
-Si vous avez des retours produit ou des erreurs lors de la création, visitez :
+Si vous avez des retours sur le produit ou des erreurs lors de la création, visitez :
[](https://aka.ms/foundry/forum)
@@ -144,6 +144,6 @@ Licence MIT - Voir le fichier [LICENSE](../../LICENSE) pour plus de détails.
---
-**Avertissement** :
-Ce document a été traduit à l’aide du service de traduction automatisée [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforçions d’assurer l’exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des imprécisions. Le document original dans sa langue native doit être considéré comme la source faisant foi. Pour les informations critiques, une traduction professionnelle humaine est recommandée. Nous déclinons toute responsabilité en cas de malentendus ou de mauvaises interprétations résultant de l’utilisation de cette traduction.
+**Avertissement** :
+Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforçions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour les informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous ne saurions être tenus responsables des malentendus ou erreurs d'interprétation découlant de l'utilisation de cette traduction.
\ No newline at end of file
diff --git a/translations/fr/docs/GLOSSARY.md b/translations/fr/docs/GLOSSARY.md
index 1fb902dc1..aa701735a 100644
--- a/translations/fr/docs/GLOSSARY.md
+++ b/translations/fr/docs/GLOSSARY.md
@@ -1,186 +1,186 @@
-# LangChain4j Glossaire
+# Glossaire LangChain4j
-## Table des Matières
+## Table des matières
-- [Concepts de Base](../../../docs)
-- [Composants LangChain4j](../../../docs)
-- [Concepts AI/ML](../../../docs)
-- [Guardrails](../../../docs)
-- [Ingénierie des Prompts](../../../docs)
-- [RAG (Retrieval-Augmented Generation)](../../../docs)
-- [Agents et Outils](../../../docs)
-- [Module Agentique](../../../docs)
-- [Protocole de Contexte Modèle (MCP)](../../../docs)
-- [Services Azure](../../../docs)
-- [Tests et Développement](../../../docs)
+- [Concepts de base](#concepts-de-base)
+- [Composants LangChain4j](#composants-langchain4j)
+- [Concepts IA/ML](#concepts-iaml)
+- [Garde-fous](#garde-fous)
+- [Ingénierie des prompts](#prompt-engineering---module-02)
+- [RAG (Génération augmentée par récupération)](#rag-retrieval-augmented-generation---module-03)
+- [Agents et Outils](#agents-and-tools---module-04)
+- [Module Agentique](#agentic-module---module-05)
+- [Protocole de Contexte de Modèle (MCP)](#model-context-protocol-mcp---module-05)
+- [Services Azure](#azure-services---module-01)
+- [Tests et Développement](#testing-and-development---testing-guide)
-Référence rapide pour les termes et concepts utilisés tout au long du cours.
+Référence rapide des termes et concepts utilisés tout au long du cours.
-## Concepts de Base
+## Concepts de base
-**Agent IA** - Système utilisant l'IA pour raisonner et agir de manière autonome. [Module 04](../04-tools/README.md)
+**Agent IA** - Système qui utilise l'IA pour raisonner et agir de manière autonome. [Module 04](../04-tools/README.md)
**Chaîne** - Séquence d'opérations où la sortie alimente l'étape suivante.
-**Découpage** - Fragmenter les documents en morceaux plus petits. Typiquement : 300-500 tokens avec chevauchement. [Module 03](../03-rag/README.md)
+**Chunking** - Découpage des documents en morceaux plus petits. Typique : 300-500 tokens avec chevauchement. [Module 03](../03-rag/README.md)
-**Fenêtre de Contexte** - Nombre maximal de tokens qu'un modèle peut traiter. GPT-5.2 : 400K tokens (jusqu'à 272K en entrée, 128K en sortie).
+**Fenêtre de contexte** - Nombre maximal de tokens qu'un modèle peut traiter. GPT-5.2 : 400K tokens (jusqu'à 272K en entrée, 128K en sortie).
-**Embeddings** - Vecteurs numériques représentant la signification du texte. [Module 03](../03-rag/README.md)
+**Embeddings** - Vecteurs numériques représentant le sens du texte. [Module 03](../03-rag/README.md)
-**Appel de Fonction** - Le modèle génère des requêtes structurées pour appeler des fonctions externes. [Module 04](../04-tools/README.md)
+**Appel de fonction** - Le modèle génère des requêtes structurées pour appeler des fonctions externes. [Module 04](../04-tools/README.md)
-**Hallucination** - Quand les modèles génèrent des informations incorrectes mais plausibles.
+**Hallucination** - Lorsque les modèles génèrent des informations incorrectes mais plausibles.
-**Prompt** - Texte d’entrée donné à un modèle de langage. [Module 02](../02-prompt-engineering/README.md)
+**Prompt** - Texte d'entrée pour un modèle de langage. [Module 02](../02-prompt-engineering/README.md)
-**Recherche Sémantique** - Recherche par signification utilisant des embeddings, pas des mots-clés. [Module 03](../03-rag/README.md)
+**Recherche sémantique** - Recherche par sens utilisant des embeddings, pas des mots-clés. [Module 03](../03-rag/README.md)
-**Avec état vs Sans état** - Sans état : pas de mémoire. Avec état : maintien de l’historique de la conversation. [Module 01](../01-introduction/README.md)
+**Sans état vs avec état** - Sans état : pas de mémoire. Avec état : conserve l'historique de la conversation. [Module 01](../01-introduction/README.md)
-**Tokens** - Unités de texte de base traitées par les modèles. Impacte les coûts et les limites. [Module 01](../01-introduction/README.md)
+**Tokens** - Unités de texte de base que les modèles traitent. Impacte coûts et limites. [Module 01](../01-introduction/README.md)
-**Chaînage d’Outils** - Exécution séquentielle d’outils où la sortie informe l’appel suivant. [Module 04](../04-tools/README.md)
+**Chaînage d'outils** - Exécution séquentielle d'outils où la sortie informe l'appel suivant. [Module 04](../04-tools/README.md)
## Composants LangChain4j
-**AiServices** - Crée des interfaces de services IA typées.
+**AiServices** - Crée des interfaces de service IA typées.
-**OpenAiOfficialChatModel** - Client unifié pour les modèles OpenAI et Azure OpenAI.
+**OpenAiOfficialChatModel** - Client unifié pour modèles OpenAI et Azure OpenAI.
-**OpenAiOfficialEmbeddingModel** - Crée des embeddings utilisant le client officiel OpenAI (supporte OpenAI et Azure OpenAI).
+**OpenAiOfficialEmbeddingModel** - Crée des embeddings via le client officiel OpenAI (supporte OpenAI et Azure OpenAI).
-**ChatModel** - Interface centrale pour les modèles de langage.
+**ChatModel** - Interface principale pour les modèles de langage.
-**ChatMemory** - Maintient l’historique des conversations.
+**ChatMemory** - Conserve l'historique de la conversation.
-**ContentRetriever** - Trouve des fragments documents pertinents pour RAG.
+**ContentRetriever** - Trouve des morceaux de documents pertinents pour RAG.
-**DocumentSplitter** - Divise les documents en fragments.
+**DocumentSplitter** - Découpe les documents en chunks.
**EmbeddingModel** - Convertit le texte en vecteurs numériques.
-**EmbeddingStore** - Stocke et récupère des embeddings.
+**EmbeddingStore** - Stocke et récupère les embeddings.
**MessageWindowChatMemory** - Maintient une fenêtre glissante des messages récents.
**PromptTemplate** - Crée des prompts réutilisables avec des espaces réservés `{{variable}}`.
-**TextSegment** - Fragment de texte avec métadonnées. Utilisé en RAG.
+**TextSegment** - Morceau de texte avec métadonnées. Utilisé dans RAG.
-**ToolExecutionRequest** - Représente une requête d'exécution d'outil.
+**ToolExecutionRequest** - Représente une requête d’exécution d’outil.
**UserMessage / AiMessage / SystemMessage** - Types de messages de conversation.
-## Concepts AI/ML
+## Concepts IA/ML
-**Apprentissage Few-Shot** - Fournir des exemples dans les prompts. [Module 02](../02-prompt-engineering/README.md)
+**Few-Shot Learning** - Fournir des exemples dans les prompts. [Module 02](../02-prompt-engineering/README.md)
-**Grand Modèle de Langage (LLM)** - Modèles IA entraînés sur d’immenses volumes de texte.
+**Large Language Model (LLM)** - Modèles IA entraînés sur de vastes données textuelles.
-**Effort de Raisonnement** - Paramètre GPT-5.2 contrôlant la profondeur de la réflexion. [Module 02](../02-prompt-engineering/README.md)
+**Effort de raisonnement** - Paramètre GPT-5.2 contrôlant la profondeur de réflexion. [Module 02](../02-prompt-engineering/README.md)
-**Température** - Contrôle la variabilité des sorties. Faible = déterministe, élevé = créatif.
+**Température** - Contrôle l’aléatoire des sorties. Faible = déterministe, élevé = créatif.
-**Base de Données Vectorielle** - Base spécialisée pour les embeddings. [Module 03](../03-rag/README.md)
+**Base de données vectorielle** - Base de données spécialisée pour les embeddings. [Module 03](../03-rag/README.md)
-**Apprentissage Zero-Shot** - Effectuer des tâches sans exemples. [Module 02](../02-prompt-engineering/README.md)
+**Zero-Shot Learning** - Réaliser des tâches sans exemples. [Module 02](../02-prompt-engineering/README.md)
-## Guardrails - [Module 00](../00-quick-start/README.md)
+## Garde-fous
-**Défense en Profondeur** - Approche de sécurité multi-couches combinant guardrails applicatifs et filtres de sécurité fournisseur.
+**Défense en profondeur** - Approche de sécurité multi-couches combinant garde-fous applicatifs et filtres de sécurité du fournisseur.
-**Blocage Strict** - Le fournisseur retourne une erreur HTTP 400 pour violations graves de contenu.
+**Blocage dur** - Le fournisseur renvoie une erreur HTTP 400 pour des violations sévères de contenu.
-**InputGuardrail** - Interface LangChain4j pour valider la saisie utilisateur avant qu'elle n'atteigne le LLM. Économise coûts et latence en bloquant tôt les prompts nuisibles.
+**InputGuardrail** - Interface LangChain4j pour valider les entrées utilisateurs avant qu'elles n’atteignent le LLM. Économise coûts et latence en bloquant tôt les prompts nuisibles.
-**InputGuardrailResult** - Type de retour pour la validation guardrail : `success()` ou `fatal("raison")`.
+**InputGuardrailResult** - Type de retour pour validation des garde-fous : `success()` ou `fatal("raison")`.
-**OutputGuardrail** - Interface pour valider les réponses IA avant de les retourner aux utilisateurs.
+**OutputGuardrail** - Interface pour valider les réponses IA avant de les renvoyer aux utilisateurs.
-**Filtres de Sécurité Fournisseur** - Filtres intégrés fournis par les fournisseurs d’IA (ex. GitHub Models) qui détectent les violations au niveau API.
+**Filtres de sécurité du fournisseur** - Filtres de contenu intégrés des fournisseurs d’IA (ex : Azure OpenAI) qui interceptent les violations au niveau de l’API.
-**Refus Doux** - Le modèle refuse poliment de répondre sans générer d’erreur.
+**Refus doux** - Le modèle décline poliment de répondre sans générer d’erreur.
-## Ingénierie des Prompts - [Module 02](../02-prompt-engineering/README.md)
+## Ingénierie des prompts - [Module 02](../02-prompt-engineering/README.md)
-**Chaîne de Raisonnement** - Raisonnement étape par étape pour une meilleure précision.
+**Chaîne de pensée (Chain-of-Thought)** - Raisonnement étape par étape pour plus de précision.
-**Sortie Contraint** - Imposer un format ou une structure spécifique.
+**Sortie contrainte** - Application d’un format ou structure spécifiques.
-**Forte Volonté** - Patron GPT-5.2 pour un raisonnement approfondi.
+**Forte motivation** - Modèle GPT-5.2 pour un raisonnement approfondi.
-**Faible Volonté** - Patron GPT-5.2 pour des réponses rapides.
+**Faible motivation** - Modèle GPT-5.2 pour des réponses rapides.
-**Conversation Multi-Tours** - Maintien du contexte sur plusieurs échanges.
+**Conversation multi-tours** - Maintien du contexte à travers les échanges.
-**Prompting Basé sur les Rôles** - Définir la persona du modèle via des messages système.
+**Prompting basé sur les rôles** - Définir la persona du modèle via des messages système.
-**Autoréflexion** - Le modèle évalue et améliore ses propres sorties.
+**Auto-réflexion** - Le modèle évalue et améliore sa sortie.
-**Analyse Structurée** - Cadre d’évaluation fixe.
+**Analyse structurée** - Cadre d’évaluation fixe.
-**Patron d’Exécution de Tâche** - Planifier → Exécuter → Résumer.
+**Modèle d’exécution de tâche** - Planifier → Exécuter → Résumer.
-## RAG (Retrieval-Augmented Generation) - [Module 03](../03-rag/README.md)
+## RAG (Génération augmentée par récupération) - [Module 03](../03-rag/README.md)
-**Pipeline de Traitement de Document** - Charger → découper → encoder → stocker.
+**Pipeline de traitement documentaire** - Charger → découper → créer embeddings → stocker.
-**Magasin d’Embeddings en Mémoire** - Stockage non persistant pour les tests.
+**Stockage d’embeddings en mémoire** - Stockage non persistant pour tests.
-**RAG** - Combine la récupération avec la génération pour ancrer les réponses.
+**RAG** - Combine récupération et génération pour ancrer les réponses.
-**Score de Similarité** - Mesure (0-1) de similarité sémantique.
+**Score de similarité** - Mesure (0-1) de similitude sémantique.
-**Référence Source** - Métadonnées sur le contenu récupéré.
+**Référence source** - Métadonnées sur le contenu récupéré.
## Agents et Outils - [Module 04](../04-tools/README.md)
**Annotation @Tool** - Marque les méthodes Java comme outils appelables par l’IA.
-**Patron ReAct** - Raisonner → Agir → Observer → Répéter.
+**Modèle ReAct** - Raisonner → Agir → Observer → Répéter.
-**Gestion de Session** - Contextes séparés pour différents utilisateurs.
+**Gestion de session** - Contextes séparés pour différents utilisateurs.
**Outil** - Fonction qu’un agent IA peut appeler.
-**Description d’Outil** - Documentation sur l’usage et les paramètres de l’outil.
+**Description d’outil** - Documentation sur la finalité et les paramètres de l’outil.
## Module Agentique - [Module 05](../05-mcp/README.md)
-**Annotation @Agent** - Marque les interfaces comme agents IA avec définition de comportement déclarative.
+**Annotation @Agent** - Marque les interfaces comme agents IA avec définition déclarative du comportement.
-**Agent Listener** - Crochet pour surveiller l’exécution agent via `beforeAgentInvocation()` et `afterAgentInvocation()`.
+**Agent Listener** - Hook pour surveiller l’exécution d’un agent via `beforeAgentInvocation()` et `afterAgentInvocation()`.
-**Portée Agentique** - Mémoire partagée où les agents stockent leurs sorties sous `outputKey` pour consommation par d’autres agents.
+**Portée agentique** - Mémoire partagée où les agents stockent des sorties avec `outputKey` pour consommation par d’autres agents.
-**AgenticServices** - Fabrique pour créer des agents via `agentBuilder()` et `supervisorBuilder()`.
+**AgenticServices** - Usine pour créer des agents avec `agentBuilder()` et `supervisorBuilder()`.
-**Flux Conditionnel** - Dirige selon des conditions vers différents agents spécialistes.
+**Workflow conditionnel** - Routage basé sur conditions vers différents agents spécialistes.
-**Humain dans la Boucle** - Patron de flux ajoutant des points de contrôle humains pour approbation ou revue de contenu.
+**Humain dans la boucle** - Pattern avec étapes humaines pour approbation ou revue de contenu.
**langchain4j-agentic** - Dépendance Maven pour construction déclarative d’agents (expérimental).
-**Boucle de Flux** - Itérer l’exécution de l’agent jusqu’à ce qu’une condition soit remplie (ex. score qualité ≥ 0.8).
+**Workflow en boucle** - Itérer l’exécution d’un agent jusqu’à ce qu’une condition soit satisfaite (ex : score qualité ≥ 0.8).
-**outputKey** - Paramètre d’annotation agent définissant où les résultats sont stockés dans la Portée Agentique.
+**outputKey** - Paramètre d’annotation agent indiquant où stocker les résultats dans la portée agentique.
-**Flux Parallèle** - Exécuter plusieurs agents simultanément pour des tâches indépendantes.
+**Workflow parallèle** - Exécuter plusieurs agents simultanément pour tâches indépendantes.
-**Stratégie de Réponse** - Façon dont le superviseur formule la réponse finale : LAST, SUMMARY, ou SCORED.
+**Stratégie de réponse** - Manière dont le superviseur formule la réponse finale : LAST, SUMMARY, ou SCORED.
-**Flux Séquentiel** - Exécuté agents en ordre où la sortie alimente l’étape suivante.
+**Workflow séquentiel** - Exécuter les agents dans l’ordre où la sortie alimente l’étape suivante.
-**Patron Agent Superviseur** - Patron agentique avancé où un LLM superviseur décide dynamiquement quels sous-agents invoquer.
+**Modèle d’agent superviseur** - Pattern agentique avancé où un superviseur LLM décide dynamiquement quels sous-agents invoquer.
-## Protocole de Contexte Modèle (MCP) - [Module 05](../05-mcp/README.md)
+## Protocole de Contexte de Modèle (MCP) - [Module 05](../05-mcp/README.md)
-**langchain4j-mcp** - Dépendance Maven pour intégration MCP dans LangChain4j.
+**langchain4j-mcp** - Dépendance Maven pour l’intégration MCP dans LangChain4j.
-**MCP** - Protocole de Contexte Modèle : standard pour connecter les applis IA à des outils externes. Construire une fois, utiliser partout.
+**MCP** - Protocole de Contexte de Modèle : standard pour connecter les applications IA à des outils externes. Construire une fois, utiliser partout.
-**Client MCP** - Application qui se connecte aux serveurs MCP pour découvrir et utiliser les outils.
+**Client MCP** - Application qui se connecte aux serveurs MCP pour découvrir et utiliser des outils.
**Serveur MCP** - Service exposant des outils via MCP avec descriptions claires et schémas de paramètres.
@@ -188,37 +188,35 @@ Référence rapide pour les termes et concepts utilisés tout au long du cours.
**McpTransport** - Interface pour communication MCP. Implémentations incluent Stdio et HTTP.
-**Transport Stdio** - Transport local par processus via stdin/stdout. Utile pour accès système de fichiers ou outils ligne de commande.
+**Transport Stdio** - Transport de processus local via stdin/stdout. Utile pour accès système de fichiers ou outils en ligne de commande.
**StdioMcpTransport** - Implémentation LangChain4j lançant le serveur MCP en sous-processus.
-**Découverte d’Outils** - Client interroge le serveur pour les outils disponibles avec descriptions et schémas.
+**Découverte d’outils** - Le client interroge le serveur pour les outils disponibles avec descriptions et schémas.
## Services Azure - [Module 01](../01-introduction/README.md)
**Azure AI Search** - Recherche cloud avec capacités vectorielles. [Module 03](../03-rag/README.md)
-**Azure Developer CLI (azd)** - Déploie des ressources Azure.
+**Azure Developer CLI (azd)** - Déploie les ressources Azure.
-**Azure OpenAI** - Service IA entreprise de Microsoft.
+**Azure OpenAI** - Service IA d’entreprise de Microsoft.
-**Bicep** - Langage d’infrastructure Azure-as-code. [Guide Infrastructure](../01-introduction/infra/README.md)
+**Bicep** - Langage infrastructure-as-code Azure. [Guide Infrastructure](../01-introduction/infra/README.md)
-**Nom de Déploiement** - Nom du déploiement modèle dans Azure.
+**Nom de déploiement** - Nom pour le déploiement du modèle dans Azure.
**GPT-5.2** - Dernier modèle OpenAI avec contrôle du raisonnement. [Module 02](../02-prompt-engineering/README.md)
-## Tests et Développement - [Guide de Tests](TESTING.md)
+## Tests et Développement - [Guide de tests](TESTING.md)
-**Dev Container** - Environnement de développement containerisé. [Configuration](../../../.devcontainer/devcontainer.json)
+**Dev Container** - Environnement de développement conteneurisé. [Configuration](../../../.devcontainer/devcontainer.json)
-**GitHub Models** - Terrain de jeu AI modèle gratuit. [Module 00](../00-quick-start/README.md)
+**Tests en mémoire** - Tests avec stockage en mémoire.
-**Test en Mémoire** - Tests avec stockage en mémoire.
+**Tests d’intégration** - Tests avec infrastructure réelle.
-**Tests d’Intégration** - Tests avec infrastructure réelle.
-
-**Maven** - Outil d’automatisation de construction Java.
+**Maven** - Outil d’automatisation de build Java.
**Mockito** - Framework de moquage Java.
@@ -227,6 +225,6 @@ Référence rapide pour les termes et concepts utilisés tout au long du cours.
---
-**Avis de non-responsabilité** :
-Ce document a été traduit à l'aide du service de traduction par IA [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant foi. Pour les informations critiques, une traduction professionnelle réalisée par un humain est recommandée. Nous déclinons toute responsabilité en cas de malentendus ou de mauvaises interprétations résultant de l'utilisation de cette traduction.
+**Avertissement** :
+Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforçions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour les informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous ne saurions être tenus responsables des malentendus ou erreurs d'interprétation découlant de l'utilisation de cette traduction.
\ No newline at end of file
diff --git a/translations/fr/docs/TESTING.md b/translations/fr/docs/TESTING.md
index 0e1e4f45e..99734fbc4 100644
--- a/translations/fr/docs/TESTING.md
+++ b/translations/fr/docs/TESTING.md
@@ -2,19 +2,19 @@
## Table des matières
-- [Démarrage rapide](../../../docs)
-- [Ce que couvrent les tests](../../../docs)
-- [Exécuter les tests](../../../docs)
-- [Exécuter les tests dans VS Code](../../../docs)
-- [Modèles de test](../../../docs)
-- [Philosophie de test](../../../docs)
-- [Étapes suivantes](../../../docs)
+- [Démarrage rapide](#démarrage-rapide)
+- [Ce que couvrent les tests](#ce-que-couvrent-les-tests)
+- [Exécution des tests](#exécution-des-tests)
+- [Exécution des tests dans VS Code](#exécution-des-tests-dans-vs-code)
+- [Modèles de test](#modèles-de-test)
+- [Philosophie de test](#philosophie-de-test)
+- [Étapes suivantes](#étapes-suivantes)
-Ce guide vous guide à travers les tests qui démontrent comment tester des applications d'IA sans nécessiter de clés API ou de services externes.
+Ce guide vous accompagne à travers les tests qui démontrent comment tester des applications IA sans nécessiter de clés API ou de services externes.
## Démarrage rapide
-Exécutez tous les tests avec une seule commande :
+Exécutez tous les tests avec une seule commande :
**Bash :**
```bash
@@ -26,30 +26,29 @@ mvn test
mvn --% test
```
-Lorsque tous les tests réussissent, vous devriez voir une sortie comme la capture d’écran ci-dessous — les tests s'exécutent sans aucune erreur.
+Lorsque tous les tests réussissent, vous devriez voir une sortie similaire à la capture d'écran ci-dessous — les tests s'exécutent sans aucune erreur.
-
+
-*Exécution réussie des tests montrant que tous les tests passent sans aucune erreur*
+*Exécution réussie des tests montrant que tous les tests sont passés sans aucune erreur*
## Ce que couvrent les tests
-Ce cours se concentre sur les **tests unitaires** qui s'exécutent localement. Chaque test démontre un concept spécifique de LangChain4j isolément. La pyramide de test ci-dessous montre où s’insèrent les tests unitaires — ils forment la base rapide et fiable sur laquelle le reste de votre stratégie de test s’appuie.
+Ce cours se concentre sur les **tests unitaires** qui s'exécutent localement. Chaque test démontre un concept spécifique de LangChain4j isolément. La pyramide de tests ci-dessous montre où s'inscrivent les tests unitaires — ils forment la base rapide et fiable sur laquelle le reste de votre stratégie de test se construit.
-
+
-*Pyramide de test montrant l’équilibre entre les tests unitaires (rapides, isolés), les tests d’intégration (composants réels) et les tests de bout en bout. Cette formation couvre les tests unitaires.*
+*Pyramide de tests montrant l'équilibre entre tests unitaires (rapides, isolés), tests d'intégration (composants réels) et tests de bout en bout. Cette formation couvre les tests unitaires.*
| Module | Tests | Focus | Fichiers clés |
|--------|-------|-------|---------------|
-| **00 - Démarrage rapide** | 6 | Modèles d'invite et substitution de variables | `SimpleQuickStartTest.java` |
| **01 - Introduction** | 8 | Mémoire de conversation et chat avec état | `SimpleConversationTest.java` |
-| **02 - Prompt Engineering** | 12 | Patterns GPT-5.2, niveaux d’empressement, sortie structurée | `SimpleGpt5PromptTest.java` |
+| **02 - Prompt Engineering** | 12 | Modèles GPT-5.2, niveaux d'empressement, sortie structurée | `SimpleGpt5PromptTest.java` |
| **03 - RAG** | 10 | Ingestion de documents, embeddings, recherche de similarité | `DocumentServiceTest.java` |
-| **04 - Outils** | 12 | Appels de fonctions et chaînage d’outils | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | Protocole Model Context avec transport Stdio | `SimpleMcpTest.java` |
+| **04 - Outils** | 12 | Appels de fonctions et chaînage d'outils | `SimpleToolsTest.java` |
+| **05 - MCP** | 8 | Protocole de contexte de modèle avec transport Stdio | `SimpleMcpTest.java` |
-## Exécuter les tests
+## Exécution des tests
**Exécuter tous les tests depuis la racine :**
@@ -95,41 +94,41 @@ mvn --% test -Dtest=SimpleConversationTest
**Bash :**
```bash
-mvn test -Dtest=SimpleConversationTest#doitMaintenirLHistoriqueDeLaConversation
+mvn test -Dtest=SimpleConversationTest#devraitMaintenirLHistoriqueDeConversation
```
**PowerShell :**
```powershell
-mvn --% test -Dtest=SimpleConversationTest#doitMaintenirLHistoriqueDeConversation
+mvn --% test -Dtest=SimpleConversationTest#doitMaintenirLhistoriqueDeLaConversation
```
-## Exécuter les tests dans VS Code
+## Exécution des tests dans VS Code
-Si vous utilisez Visual Studio Code, l’Explorateur de tests fournit une interface graphique pour exécuter et déboguer les tests.
+Si vous utilisez Visual Studio Code, l'Explorateur de tests offre une interface graphique pour exécuter et déboguer les tests.
-
+
-*Explorateur de tests VS Code montrant l’arbre des tests avec toutes les classes de test Java et les méthodes de test individuelles*
+*Explorateur de tests VS Code affichant l'arbre des tests avec toutes les classes de test Java et les méthodes de test individuelles*
-**Pour exécuter les tests dans VS Code :**
+**Pour exécuter les tests dans VS Code :**
-1. Ouvrez l’Explorateur de tests en cliquant sur l’icône du bécher dans la barre d’activité
-2. Développez l’arbre des tests pour voir tous les modules et classes de test
-3. Cliquez sur le bouton de lecture à côté de n’importe quel test pour l’exécuter individuellement
-4. Cliquez sur « Exécuter tous les tests » pour lancer l’ensemble de la suite
-5. Faites un clic droit sur un test et sélectionnez « Déboguer le test » pour définir des points d’arrêt et parcourir le code
+1. Ouvrez l'Explorateur de tests en cliquant sur l'icône du bécher dans la barre d'activité
+2. Développez l'arbre des tests pour voir tous les modules et classes de test
+3. Cliquez sur le bouton lecture à côté de n'importe quel test pour l'exécuter individuellement
+4. Cliquez sur "Run All Tests" pour exécuter toute la suite
+5. Faites un clic droit sur un test et sélectionnez "Debug Test" pour placer des points d'arrêt et avancer dans le code
-L’Explorateur de tests affiche des coches vertes pour les tests réussis et fournit des messages d’échec détaillés lorsque les tests échouent.
+L'Explorateur de tests affiche des coches vertes pour les tests réussis et fournit des messages d'erreur détaillés en cas d'échec.
## Modèles de test
-### Modèle 1 : Tester les modèles d'invite
+### Modèle 1 : Tester les modèles de prompts
-Le modèle le plus simple teste les modèles d’invite sans appeler de modèle IA. Vous vérifiez que la substitution de variables fonctionne correctement et que les invites sont formatées comme prévu.
+Le modèle le plus simple teste les modèles de prompts sans appeler de modèle IA. Vous vérifiez que la substitution des variables fonctionne correctement et que les prompts sont formatés comme prévu.
-
+
-*Test des modèles d’invite montrant le flux de substitution de variables : modèle avec espaces réservés → valeurs appliquées → sortie formatée vérifiée*
+*Test des modèles de prompts montrant le flux de substitution des variables : modèle avec espaces réservés → valeurs appliquées → sortie formatée vérifiée*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-Ce test se trouve dans `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
-
-**Exécutez-le :**
-
-**Bash :**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#testFormatageDuModèleDePrompt
-```
-
-**PowerShell :**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#testPromptTemplateFormatting
-```
+Ce modèle vérifie que la substitution des variables fonctionne correctement et que les prompts sont formatés comme prévu — aucune clé API ou appel au modèle requis.
### Modèle 2 : Simuler les modèles de langage
-Lors des tests de logique de conversation, utilisez Mockito pour créer des modèles fictifs qui renvoient des réponses prédéterminées. Cela rend les tests rapides, gratuits et déterministes.
+Lors du test de la logique de conversation, utilisez Mockito pour créer des modèles factices qui renvoient des réponses prédéterminées. Cela rend les tests rapides, gratuits et déterministes.
-
+
-*Comparaison montrant pourquoi les simulations sont préférées pour les tests : elles sont rapides, gratuites, déterministes et ne nécessitent pas de clés API*
+*Comparaison montrant pourquoi les mocks sont préférés pour les tests : ils sont rapides, gratuits, déterministes et ne nécessitent pas de clés API*
```java
@ExtendWith(MockitoExtension.class)
@@ -218,15 +205,15 @@ class SimpleConversationTest {
}
```
-Ce modèle apparaît dans `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. La maquette garantit un comportement cohérent pour vérifier que la gestion de la mémoire fonctionne correctement.
+Ce modèle apparaît dans `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Le mock garantit un comportement cohérent afin que vous puissiez vérifier que la gestion de la mémoire fonctionne correctement.
-### Modèle 3 : Tester l’isolation des conversations
+### Modèle 3 : Tester l'isolation des conversations
La mémoire de conversation doit garder plusieurs utilisateurs séparés. Ce test vérifie que les conversations ne mélangent pas les contextes.
-
+
-*Test d’isolation des conversations montrant des magasins de mémoire distincts pour différents utilisateurs afin d’éviter le mélange des contextes*
+*Test de l'isolation des conversations montrant des mémoires séparées pour différents utilisateurs afin d'éviter le mélange de contexte*
```java
@Test
@@ -250,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-Chaque conversation maintient son propre historique indépendant. Dans les systèmes de production, cette isolation est cruciale pour les applications multi-utilisateurs.
+Chaque conversation maintient son propre historique indépendant. Dans les systèmes en production, cette isolation est critique pour les applications multi-utilisateurs.
### Modèle 4 : Tester les outils indépendamment
-Les outils sont des fonctions que l’IA peut appeler. Testez-les directement pour garantir qu’ils fonctionnent correctement indépendamment des décisions de l’IA.
+Les outils sont des fonctions que l'IA peut appeler. Testez-les directement pour vous assurer qu'ils fonctionnent correctement indépendamment des décisions de l'IA.
-
+
-*Test des outils indépendamment montrant l’exécution d’outils simulés sans appels IA pour vérifier la logique métier*
+*Test des outils indépendants montrant l'exécution simulée d'outils sans appels IA pour vérifier la logique métier*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-Ces tests issus de `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` valident la logique des outils sans intervention d’IA. L’exemple de chaînage montre comment la sortie d’un outil alimente l’entrée d’un autre.
+Ces tests issus de `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` valident la logique des outils sans intervention de l'IA. L'exemple de chaînage montre comment la sortie d'un outil alimente l'entrée d'un autre.
-### Modèle 5 : Test RAG en mémoire
+### Modèle 5 : Test de RAG en mémoire
-Les systèmes RAG nécessitent traditionnellement des bases de données vectorielles et des services d’embeddding. Le modèle en mémoire vous permet de tester toute la chaîne sans dépendances externes.
+Les systèmes RAG nécessitent traditionnellement des bases de données vectorielles et des services d'embedding. Le modèle en mémoire vous permet de tester toute la chaîne sans dépendances externes.
-
+
-*Flux de travail du test RAG en mémoire montrant l’analyse de documents, le stockage d’embedddings et la recherche de similarité sans base de données*
+*Workflow de test RAG en mémoire montrant l'analyse de documents, le stockage d'embeddings et la recherche de similarité sans nécessiter de base de données*
```java
@Test
@@ -306,15 +293,15 @@ void testProcessTextDocument() {
}
```
-Ce test de `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` crée un document en mémoire et vérifie la segmentation et la gestion des métadonnées.
+Ce test issu de `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` crée un document en mémoire et vérifie le découpage en morceaux et la gestion des métadonnées.
-### Modèle 6 : Test d’intégration MCP
+### Modèle 6 : Test d'intégration MCP
-Le module MCP teste l’intégration du protocole Model Context via le transport stdio. Ces tests vérifient que votre application peut lancer et communiquer avec des serveurs MCP en tant que sous-processus.
+Le module MCP teste l'intégration du Protocole de Contexte de Modèle utilisant le transport stdio. Ces tests vérifient que votre application peut lancer et communiquer avec des serveurs MCP en sous-processus.
-Les tests de `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` valident le comportement du client MCP.
+Les tests dans `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` valident le comportement du client MCP.
-**Exécutez-les :**
+**Exécutez-les :**
**Bash :**
```bash
@@ -328,36 +315,35 @@ cd 05-mcp; mvn --% test
## Philosophie de test
-Testez votre code, pas l’IA. Vos tests doivent valider le code que vous écrivez en vérifiant comment les invites sont construites, comment la mémoire est gérée, et comment les outils s’exécutent. Les réponses IA varient et ne devraient pas faire partie des assertions de test. Demandez-vous si votre modèle d’invite substitue correctement les variables, pas si l’IA donne la bonne réponse.
+Testez votre code, pas l'IA. Vos tests doivent valider le code que vous écrivez en vérifiant comment les prompts sont construits, comment la mémoire est gérée et comment les outils s'exécutent. Les réponses IA varient et ne doivent pas faire partie des assertions de test. Demandez-vous si votre modèle de prompt substitue correctement les variables, pas si l'IA donne la bonne réponse.
-Utilisez des simulations pour les modèles de langage. Ce sont des dépendances externes qui sont lentes, coûteuses et non déterministes. Simuler rend les tests rapides avec des millisecondes au lieu de secondes, gratuits sans coûts API, et déterministes avec le même résultat à chaque fois.
+Utilisez des mocks pour les modèles de langage. Ce sont des dépendances externes lentes, coûteuses et non déterministes. Le mock rend les tests rapides avec des millisecondes au lieu de secondes, gratuits sans coûts API, et déterministes avec le même résultat à chaque fois.
-Gardez les tests indépendants. Chaque test doit configurer ses propres données, ne pas dépendre d’autres tests, et nettoyer après lui-même. Les tests doivent passer indépendamment de l’ordre d’exécution.
+Gardez les tests indépendants. Chaque test doit configurer ses propres données, ne pas dépendre d'autres tests, et nettoyer après lui-même. Les tests doivent réussir quel que soit l'ordre d'exécution.
-Testez les cas limites au-delà du chemin heureux. Essayez des entrées vides, très volumineuses, des caractères spéciaux, des paramètres invalides et des conditions aux limites. Cela révèle souvent des bugs que l’utilisation normale n’expose pas.
+Testez les cas limites au-delà du chemin heureux. Essayez des entrées vides, des entrées très grandes, des caractères spéciaux, des paramètres invalides et des conditions aux limites. Ceux-ci révèlent souvent des bugs que l'utilisation normale n'expose pas.
-Utilisez des noms descriptifs. Comparez `shouldMaintainConversationHistoryAcrossMultipleMessages()` avec `test1()`. Le premier vous dit exactement ce qui est testé, facilitant grandement le débogage des échecs.
+Utilisez des noms descriptifs. Comparez `shouldMaintainConversationHistoryAcrossMultipleMessages()` avec `test1()`. Le premier indique exactement ce qui est testé, facilitant grandement le débogage des échecs.
## Étapes suivantes
Maintenant que vous comprenez les modèles de test, approfondissez chaque module :
-- **[00 - Démarrage rapide](../00-quick-start/README.md)** - Commencez avec les bases des modèles d’invite
- **[01 - Introduction](../01-introduction/README.md)** - Apprenez la gestion de la mémoire de conversation
-- **[02 - Prompt Engineering](../02/prompt-engineering/README.md)** - Maîtrisez les patterns GPT-5.2 pour les invites
+- **[02 - Prompt Engineering](../02-prompt-engineering/README.md)** - Maîtrisez les modèles de prompting GPT-5.2
- **[03 - RAG](../03-rag/README.md)** - Construisez des systèmes de génération augmentée par récupération
-- **[04 - Outils](../04-tools/README.md)** - Implémentez l’appel de fonctions et les chaînes d’outils
-- **[05 - MCP](../05-mcp/README.md)** - Intégrez le protocole Model Context
+- **[04 - Outils](../04-tools/README.md)** - Implémentez les appels de fonctions et les chaînes d'outils
+- **[05 - MCP](../05-mcp/README.md)** - Intégrez le Protocole de Contexte de Modèle
Le README de chaque module fournit des explications détaillées des concepts testés ici.
---
-**Navigation :** [← Retour à l’accueil](../README.md)
+**Navigation :** [← Retour au principal](../README.md)
---
-**Avis de non-responsabilité** :
-Ce document a été traduit à l’aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d’assurer la précision, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d’origine doit être considéré comme la source faisant foi. Pour les informations critiques, il est recommandé de recourir à une traduction professionnelle par un traducteur humain. Nous déclinons toute responsabilité en cas de malentendus ou d’interprétations erronées résultant de l’utilisation de cette traduction.
+**Avertissement** :
+Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforçions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour les informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous ne saurions être tenus responsables des malentendus ou erreurs d'interprétation découlant de l'utilisation de cette traduction.
\ No newline at end of file
diff --git a/translations/he/.co-op-translator.json b/translations/he/.co-op-translator.json
index 34705f489..16ea18879 100644
--- a/translations/he/.co-op-translator.json
+++ b/translations/he/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "he"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-03T03:14:08+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T08:31:23+00:00",
"source_file": "01-introduction/README.md",
"language_code": "he"
},
@@ -18,20 +18,20 @@
"language_code": "he"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-03T03:16:24+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T08:26:35+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "he"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-03T03:17:56+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T08:30:25+00:00",
"source_file": "03-rag/README.md",
"language_code": "he"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T09:58:18+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T08:29:06+00:00",
"source_file": "04-tools/README.md",
"language_code": "he"
},
@@ -54,8 +54,8 @@
"language_code": "he"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T17:11:41+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T08:25:11+00:00",
"source_file": "README.md",
"language_code": "he"
},
@@ -72,14 +72,14 @@
"language_code": "he"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-03T03:21:20+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T08:27:11+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "he"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-03T03:22:06+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T08:27:53+00:00",
"source_file": "docs/TESTING.md",
"language_code": "he"
}
diff --git a/translations/he/00-quick-start/README.md b/translations/he/00-quick-start/README.md
deleted file mode 100644
index 3d9dbc5f0..000000000
--- a/translations/he/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# מודול 00: התחלה מהירה
-
-## תוכן העניינים
-
-- [הקדמה](../../../00-quick-start)
-- [מה זה LangChain4j?](../../../00-quick-start)
-- [תלויות LangChain4j](../../../00-quick-start)
-- [דרישות מוקדמות](../../../00-quick-start)
-- [התקנה](../../../00-quick-start)
- - [1. קבל את אסימון ה-GitHub שלך](../../../00-quick-start)
- - [2. הגדר את האסימון שלך](../../../00-quick-start)
-- [הרץ את הדוגמאות](../../../00-quick-start)
- - [1. שיחת בסיס](../../../00-quick-start)
- - [2. תבניות פרומפט](../../../00-quick-start)
- - [3. קריאת פונקציות](../../../00-quick-start)
- - [4. שאלות ותשובות על מסמכים (Easy RAG)](../../../00-quick-start)
- - [5. בינה מלאכותית אחראית](../../../00-quick-start)
-- [מה כל דוגמה מציגה](../../../00-quick-start)
-- [שלבים הבאים](../../../00-quick-start)
-- [פתרון בעיות](../../../00-quick-start)
-
-## הקדמה
-
-ההתחלה המהירה הזו מיועדת לקבל אותך עובדים עם LangChain4j במהירות האפשרית. היא מכסה את הבסיס המוחלט בבניית יישומי בינה מלאכותית עם LangChain4j ודגמי GitHub. במודולים הבאים תעבור ל-Azure OpenAI ו-GPT-5.2 ותעמיק בכל מושג.
-
-## מה זה LangChain4j?
-
-LangChain4j היא ספריית Java שמפשטת את בניית היישומים המונעים בינה מלאכותית. במקום להתמודד עם לקוחות HTTP וניתוח JSON, אתה עובד עם ממשקי API נקיים של Java.
-
-המילה "chain" ב-LangChain מתייחסת לקישור של רכיבים מרובים יחד - ניתן לקשר פרומפט לדגם, לדפדפן, או לקשר קריאות AI מרובות יחד כאשר פלט אחד מזין את הקלט הבא. התחלת מהירה זו מתמקדת ביסודות לפני חקירת שרשראות מורכבות יותר.
-
-
-
-*שרשור רכיבים ב-LangChain4j - אבני בניין שמתחברים ליצירת זרימות עבודה עוצמתיות של בינה מלאכותית*
-
-נשתמש בשלושה רכיבים מרכזיים:
-
-**ChatModel** - הממשק לאינטראקציות עם מודל AI. קרא `model.chat("prompt")` וקבל מחרוזת תגובה. אנו משתמשים ב-`OpenAiOfficialChatModel` שעובד עם נקודות קצה תואמות OpenAI כמו דגמי GitHub.
-
-**AiServices** - יוצר ממשקי שירות AI בטוחים טיפוסית. הגדר שיטות, סמן אותן ב-`@Tool`, ו-LangChain4j מנהל את התזמור. ה-AI קורא אוטומטית את שיטות ה-Java שלך כשנדרש.
-
-**MessageWindowChatMemory** - שומר היסטוריית שיחה. בלעדיו, כל בקשה היא עצמאית. איתו, ה-AI זוכר הודעות קודמות ושומר הקשר במספר סבבים.
-
-
-
-*ארכיטקטורת LangChain4j - רכיבים מרכזיים העובדים ביחד להנעת יישומי ה-AI שלך*
-
-## תלויות LangChain4j
-
-ההתחלה המהירה הזו משתמשת בשלוש תלויות של Maven בקובץ [`pom.xml`](../../../00-quick-start/pom.xml):
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-מודול `langchain4j-open-ai-official` מספק את המחלקה `OpenAiOfficialChatModel` שמתחברת ל-APIs תואמי OpenAI. דגמי GitHub משתמשים באותו פורמט API, כך שאין צורך במתאם מיוחד - פשוט הצבע על כתובת הבסיס ל-`https://models.github.ai/inference`.
-
-מודול `langchain4j-easy-rag` מספק חלוקה, הטמעה ושליפה אוטומטית של מסמכים כך שתוכל לבנות יישומי RAG ללא הגדרה ידנית של כל שלב.
-
-## דרישות מוקדמות
-
-**משתמש ב-Dev Container?** Java ו-Maven מותקנים מראש. כל מה שצריך הוא אסימון גישה אישי ל-GitHub.
-
-**פיתוח מקומי:**
-- Java 21+, Maven 3.9+
-- אסימון גישה אישי ל-GitHub (הוראות למטה)
-
-> **הערה:** מודול זה משתמש ב-`gpt-4.1-nano` מדגמי GitHub. אל תשנה את שם הדגם בקוד - הוא מוגדר לעבוד עם דגמי GitHub הזמינים.
-
-## התקנה
-
-### 1. קבל את אסימון ה-GitHub שלך
-
-1. עבור אל [הגדרות GitHub → אסימוני גישה אישית](https://github.com/settings/personal-access-tokens)
-2. לחץ על "Generate new token"
-3. קבע שם תיאורי (למשל, "LangChain4j Demo")
-4. הגדר תוקף (מומלץ 7 ימים)
-5. תחת "הרשאות חשבון", אתר "Models" והגדר לקריאה בלבד
-6. לחץ על "Generate token"
-7. העתק ושמור את האסימון - לא תראה אותו שוב
-
-### 2. הגדר את האסימון שלך
-
-**אפשרות 1: שימוש ב-VS Code (מומלץ)**
-
-אם אתה משתמש ב-VS Code, הוסף את האסימון שלך לקובץ `.env` בספריית הפרויקט:
-
-אם קובץ `.env` לא קיים, העתק את `.env.example` ל-`.env` או צור קובץ `.env` חדש בספריית הפרויקט.
-
-**קובץ `.env` לדוגמה:**
-```bash
-# בקובץ /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-אז תוכל פשוט ללחוץ קליק ימני על כל קובץ דמו (למשל `BasicChatDemo.java`) בסייר ולבחור **"Run Java"**, או להשתמש בהרצות מתוך לוח ההפעלה והניפוי.
-
-**אפשרות 2: שימוש בטרמינל**
-
-הגדר את האסימון כמשתנה סביבה:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## הרץ את הדוגמאות
-
-**שימוש ב-VS Code:** פשוט לחץ קליק ימני על כל קובץ דמו בסייר ובחר **"Run Java"**, או השתמש בהרצות מלוח ההפעלה והניפוי (ודא שהוספת את האסימון לקובץ `.env` קודם).
-
-**שימוש ב-Maven:** לחלופין, תוכל להריץ משורת הפקודה:
-
-### 1. שיחת בסיס
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. תבניות פרומפט
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-מציג אפס-שיט, כמה-שיט, שרשרת מחשבה, ופרומפטים מבוססי תפקיד.
-
-### 3. קריאת פונקציות
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-ה-AI קורא אוטומטית את שיטות ה-Java שלך כשנדרש.
-
-### 4. שאלות ותשובות על מסמכים (Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-שאל שאלות על המסמכים שלך באמצעות Easy RAG עם הטמעה ושליפה אוטומטית.
-
-### 5. בינה מלאכותית אחראית
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-ראה כיצד מסנני בטיחות AI חוסמים תוכן מזיק.
-
-## מה כל דוגמה מציגה
-
-**שיחת בסיס** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-התחל כאן כדי לראות את LangChain4j בפשטותו. תיצור `OpenAiOfficialChatModel`, תשלח פרומפט עם `.chat()`, ותקבל תגובה בחזרה. זה מדגים את היסודות: איך לאתחל דגמים עם נקודות קצה מקוסטמות ומפתחות API. ברגע שתבין את התבנית הזו, כל השאר מתבסס עליה.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 נסה עם צ'אט [GitHub Copilot](https://github.com/features/copilot):** פתח את [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) ושאל:
-> - "איך אני מעביר מדגמי GitHub ל-Azure OpenAI בקוד הזה?"
-> - "אילו פרמטרים נוספים אני יכול להגדיר ב-OpenAiOfficialChatModel.builder()?"
-> - "איך מוסיפים תגובות סטרימינג במקום לחכות לתגובה מלאה?"
-
-**הנדסת פרומפט** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-עכשיו כשאתה יודע איך לדבר עם דגם, בוא נחקור מה אתה אומר לו. הדמו הזה משתמש באותה הגדרת דגם אך מציג חמישה דפוסי פרומפט שונים. נסה פרומפטים אפס-שיט להוראות ישירות, כמה-שיט שלומדים מדוגמאות, שרשרת מחשבה שחושפת שלבי הסבר, ופרומפטים מבוססי תפקיד שמגדירים הקשר. תראה איך אותו דגם נותן תוצאות שונות מאוד לפי אופן ניסוח הבקשה.
-
-הדמו גם מציג תבניות פרומפט, דרך עוצמתית ליצור פרומפטים ברי שימוש חוזר עם משתנים.
-הדוגמה למטה מראה פרומפט שמשתמש ב-PromptTemplate של LangChain4j למילוי משתנים. ה-AI יענה בהתבסס על היעד והפעילות שסופקו.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 נסה עם צ'אט [GitHub Copilot](https://github.com/features/copilot):** פתח את [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) ושאל:
-> - "מה ההבדל בין אפס-שיט לכמה-שיט, ומתי כדאי להשתמש בכל אחד?"
-> - "איך פרמטר הטמפרטורה משפיע על תגובות המודל?"
-> - "אילו טכניקות קיימות למניעת התקפות הזרקת פרומפט בפרודקשן?"
-> - "איך ליצור אובייקטים של PromptTemplate ברי שימוש חוזר לתבניות נפוצות?"
-
-**אינטגרציית כלים** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-כאן LangChain4j הופך לעוצמתי. תשתמש ב-`AiServices` כדי ליצור עוזר AI שיכול לקרוא לשיטות ה-Java שלך. פשוט סמן שיטות ב-`@Tool("תיאור")` ו-LangChain4j מטפל בשאר - ה-AI מחליט אוטומטית מתי להשתמש בכל כלי לפי מה שהמשתמש מבקש. זה מדגים קריאת פונקציות, טכניקה מרכזית לבניית AI שיכול לפעול, לא רק לענות על שאלות.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 נסה עם צ'אט [GitHub Copilot](https://github.com/features/copilot):** פתח את [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) ושאל:
-> - "איך באנוטציית @Tool עובדת ומה LangChain4j עושה איתה מאחורי הקלעים?"
-> - "האם ה-AI יכול לקרוא לכלים מרובים ברצף לפתור בעיות מורכבות?"
-> - "מה קורה אם כלי זורק חריגה - איך להתמודד עם שגיאות?"
-> - "איך הייתי משלב API אמיתי במקום דוגמת המכונה המכפלה הזו?"
-
-**שאלות ותשובות על מסמכים (Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-כאן תראה RAG (הפקה משודרגת בשליפה) באמצעות גישת "Easy RAG" של LangChain4j. מסמכים מועלים, מחולקים ומוטמעים אוטומטית בחנות זיכרון, ואז מחלץ תוכן מספק חתיכות רלוונטיות ל-AI בזמן השאילתה. ה-AI עונה על סמך המסמכים שלך, לא הידע הכללי שלו.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 נסה עם צ'אט [GitHub Copilot](https://github.com/features/copilot):** פתח את [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) ושאל:
-> - "איך RAG מונע הזיות AI לעומת שימוש בנתוני אימון המודל?"
-> - "מה ההבדל בין הגישה הפשוטה הזו לצינור RAG מותאם אישית?"
-> - "איך הייתי מגדיל את זה לטפל במסמכים מרובים או בסיסי ידע גדולים יותר?"
-
-**בינה מלאכותית אחראית** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-בנה בטיחות AI עם הגנה לעומק. הדמו מציג שני שכבות הגנה שפועלות יחד:
-
-**חלק 1: משמר קלט LangChain4j** - חוסם פרומפטים מסוכנים לפני שישיגו את ה-LLM. צור משמרות קלט מותאמות שמאתרות מילים או דפוסים אסורים. אלו רצות בקוד שלך, כך שהן מהירות וללא עלות.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**חלק 2: מסנני בטיחות הספק** - לדגמי GitHub יש מסננים מובנים שתופסים מה שהמשמרות שלך עלולות לפספס. תראה חסימות קשות (שגיאות HTTP 400) להפרות חמורות וסירובים רכים שבהם ה-AI מסרב בנימוס.
-
-> **🤖 נסה עם צ'אט [GitHub Copilot](https://github.com/features/copilot):** פתח את [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) ושאל:
-> - "מה זה InputGuardrail ואיך יוצרים משמר קלט משלך?"
-> - "מה ההבדל בין חסימה קשה לסירוב רך?"
-> - "למה להשתמש גם במשמרות קלט וגם במסנני ספקים יחד?"
-
-## שלבים הבאים
-
-**המודול הבא:** [01-introduction - התחלה עם LangChain4j](../01-introduction/README.md)
-
----
-
-**ניווט:** [← חזרה לעמוד ראשי](../README.md) | [הבא: מודול 01 - הקדמה →](../01-introduction/README.md)
-
----
-
-## פתרון בעיות
-
-### בניית Maven בפעם הראשונה
-
-**בעיה**: `mvn clean compile` או `mvn package` ראשוני אורך זמן רב (10-15 דקות)
-
-**סיבה**: Maven צריך להוריד את כל התלויות של הפרויקט (Spring Boot, ספריות LangChain4j, SDKים של Azure וכו') בבנייה הראשונה.
-
-**פתרון**: זה התנהגות תקינה. הבניות הבאות יהיו מהירות יותר כי התלויות נשמרות במטמון במחשב המקומי. זמן ההורדה תלוי במהירות החיבור שלך.
-
-### תחביר פקודת Maven ב-PowerShell
-
-**בעיה**: פקודות Maven נכשלות עם השגיאה `Unknown lifecycle phase ".mainClass=..."`
-**סיבה**: PowerShell מפרש את `=` כאופרטור להקצאת משתנה, ובכך שובר את תחביר התכונות של Maven
-
-**פתרון**: השתמש באופרטור עצירת הניתוח `--%` לפני פקודת Maven:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-האופרטור `--%` מורה ל-PowerShell להעביר את כל הפרמטרים הנותרים כמו שהם ל-Maven ללא פירוש.
-
-### הצגת אימוג'ים ב-Windows PowerShell
-
-**בעיה**: תגובות של AI מציגות תווים משובשים (למשל, `????` או `â??`) במקום אימוג'ים ב-PowerShell
-
-**סיבה**: הקידוד הברירת מחדל של PowerShell אינו תומך באימוג'ים ב-UTF-8
-
-**פתרון**: הרץ את הפקודה הזו לפני ביצוע אפליקציות Java:
-```cmd
-chcp 65001
-```
-
-זה מאלץ קידוד UTF-8 במסוף. לחלופין, השתמש ב-Windows Terminal שיש לו תמיכה טובה יותר ב-Unicode.
-
-### ניתוח שגיאות בקריאות API
-
-**בעיה**: שגיאות אימות, הגבלות על קצב, או תגובות בלתי צפויות מהמודל של ה-AI
-
-**פתרון**: הדוגמאות כוללות `.logRequests(true)` ו-`.logResponses(true)` להצגת קריאות API בקונסולה. זה עוזר לאתר שגיאות אימות, הגבלות קצב, או תגובות בלתי צפויות. הסר דגלים אלו בפרודקשן להפחתת רעש ברישומים.
-
----
-
-
-**כתב ויתור**:
-מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדייק, יש להיות מודעים לכך שתרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. יש לראות במסמך המקורי בשפה המקורית כמקור הסמכות. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי מתרגם אנושי. אנו לא נושאים באחריות על כל אי-הבנות או פירושים שגויים הנובעים משימוש בתרגום זה.
-
\ No newline at end of file
diff --git a/translations/he/01-introduction/README.md b/translations/he/01-introduction/README.md
index c033e8d0c..39d462be1 100644
--- a/translations/he/01-introduction/README.md
+++ b/translations/he/01-introduction/README.md
@@ -2,86 +2,86 @@
## תוכן העניינים
-- [מדריך וידאו](../../../01-introduction)
-- [מה תלמדו](../../../01-introduction)
-- [דרישות מוקדמות](../../../01-introduction)
-- [הבנת הבעיה המרכזית](../../../01-introduction)
-- [הבנת טוקנים](../../../01-introduction)
-- [איך זיכרון עובד](../../../01-introduction)
-- [איך זה משתמש ב-LangChain4j](../../../01-introduction)
-- [פריסת תשתית Azure OpenAI](../../../01-introduction)
-- [הרצת האפליקציה מקומית](../../../01-introduction)
-- [שימוש באפליקציה](../../../01-introduction)
- - [שיחת ללא זיכרון (לוח שמאלי)](../../../01-introduction)
- - [שיחת עם זיכרון (לוח ימני)](../../../01-introduction)
-- [השלבים הבאים](../../../01-introduction)
-
-## מדריך וידאו
-
-צפו במפגש חי שמסביר איך להתחיל עם מודול זה:
+- [סיור וידאו](#סיור-וידאו)
+- [מה תלמדו](#מה-תלמדו)
+- [דרישות מוקדמות](#דרישות-מוקדמות)
+- [הבנת הבעיה המרכזית](#הבנת-הבעיה-המרכזית)
+- [הבנת טוקנים](#הבנת-טוקנים)
+- [איך הזיכרון פועל](#איך-הזיכרון-פועל)
+- [כיצד מודול זה משתמש ב-LangChain4j](#כיצד-מודול-זה-משתמש-ב-langchain4j)
+- [פריסת תשתית Azure OpenAI](#פריסת-תשתית-azure-openai)
+- [הרצת האפליקציה מקומית](#הרצת-האפליקציה-מקומית)
+- [שימוש באפליקציה](#שימוש-באפליקציה)
+ - [צ'אט ללא מצב (פאנל שמאל)](#צאט-ללא-מצב-פאנל-שמאל)
+ - [צ'אט עם מצב (פאנל ימין)](#צאט-עם-מצב-פאנל-ימין)
+- [שלבים הבאים](#שלבים-הבאים)
+
+## סיור וידאו
+
+צפו במפגש חי שמסביר כיצד להתחיל עם מודול זה:
## מה תלמדו
-בהתחלה המהירה השתמשתם במודלים של GitHub כדי לשלוח הנחיות, לקרוא כלים, לבנות צינור RAG ולבדוק כללי שמירה. הדמואים האלו הראו מה אפשרי — עכשיו נעבור ל-Azure OpenAI ו-GPT-5.2 ונתחיל לבנות אפליקציות בסגנון ייצור. מודול זה מתמקד בבינה מלאכותית שיחתית שזוכרת הקשר ומנהלת מצב — המושגים שהדמואים של ההתחלה המהירה השתמשו בהם מאחורי הקלעים אך לא הסבירו.
+זהו נקודת ההתחלה שלכם עם LangChain4j ו-Azure OpenAI. נתחיל עם הבסיס ונבנה אפליקציות בסגנון ייצור. מודול זה מתמקד ב-AI שיחתי שזוכר הקשר ומתחזק מצב — המושגים היסודיים שכל מודול מאוחר יותר מתבסס עליהם.
-נשתמש ב-GPT-5.2 של Azure OpenAI לאורך מדריך זה כי יכולות ההנמקה המתקדמות שלו ממחישות טוב יותר את התנהגותם של דפוסים שונים. כשמוסיפים זיכרון, רואים בבירור את ההבדל. זה מקל על ההבנה מה כל מרכיב מביא לאפליקציה שלכם.
+נשתמש ב-GPT-5.2 של Azure OpenAI לאורך כל המדריך הזה כי יכולות ההסקה המתקדמות שלו מדגישות טוב יותר את ההבדלים בין דפוסים שונים. כשאתם מוסיפים זיכרון, ההבדל יהיה ברור יותר. זה מקל על ההבנה של מה שכל רכיב מביא לאפליקציה שלכם.
תבנו אפליקציה אחת שמדגימה את שני הדפוסים:
-**שיחת ללא זיכרון** - כל בקשה היא עצמאית. למודל אין זיכרון של הודעות קודמות. זהו הדפוס שבו השתמשתם בהתחלה המהירה.
+**צ'אט ללא מצב** - כל בקשה עצמאית. למודל אין זיכרון של ההודעות הקודמות. זו הנקודת התחלה הפשוטה ביותר.
-**שיחה עם זיכרון** - כל בקשה כוללת היסטוריית שיחה. המודל שומר הקשר על פני מספר סבבים. כך אפליקציות ייצור אמיתיות פועלות.
+**שיחה עם מצב** - כל בקשה כוללת היסטוריית שיחה. המודל שומר הקשר לאורך מספר סבבים. זה מה שנדרש באפליקציות ייצור.
## דרישות מוקדמות
-- מנוי Azure עם גישה ל-Azure OpenAI
-- Java 21, Maven 3.9+
-- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
+- חשבון Azure עם גישה ל-Azure OpenAI
+- Java 21, Maven 3.9+
+- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
-> **הערה:** Java, Maven, Azure CLI ו-Azure Developer CLI (azd) מותקנים מראש ב-devcontainer המסופק.
+> **הערה:** Java, Maven, Azure CLI ו-Azure Developer CLI (azd) מותקנים מראש בקונטיינר הפיתוח שסופק.
-> **הערה:** מודול זה משתמש ב-GPT-5.2 על Azure OpenAI. הפריסה מוגדרת אוטומטית דרך `azd up` - אל תשנו את שם המודל בקוד.
+> **הערה:** מודול זה משתמש ב-GPT-5.2 ב-Azure OpenAI. הפריסה מוגדרת אוטומטית דרך `azd up` - אל תשנו את שם המודל בקוד.
## הבנת הבעיה המרכזית
-מודלי שפה הם ללא זיכרון. כל קריאת API היא עצמאית. אם אתה שולח "השם שלי הוא ג'ון" ואז שואל "מה השם שלי?", המודל אינו מודע לכך שהצגת את עצמך זה עתה. הוא מתייחס לכל בקשה כאילו זו השיחה הראשונה שהיתה לך אי פעם.
+מודלים לשוניים הם חסרי-מצב. כל קריאת API היא עצמאית. אם תשלחו "שמי ג'ון" ואז תשאלו "מה השם שלי?", המודל אינו מודע לכך שהצגת את עצמך קודם לכן. הוא מתייחס לכל בקשה כאילו זו השיחה הראשונה שלכם אי פעם.
-זה בסדר לשאלות ותשובות פשוטות אך חסר תועלת לאפליקציות אמיתיות. רובוטים של שירות לקוחות צריכים לזכור מה שסיפרת להם. עוזרים אישיים צריכים הקשר. כל שיחה רב-סבבית דורשת זיכרון.
+זה בסדר לשאלות ותשובות פשוטות אך חסר ערך באפליקציות אמיתיות. רובוטי שירות לקוחות צריכים לזכור מה אמרתם להם. עוזרים אישיים זקוקים להקשר. כל שיחה רב-סיבובית מחייבת זיכרון.
-הדיאגרמה הבאה משווה בין שתי הגישות — בצד שמאל קריאה ללא זיכרון ששוכחת את שמך; מצד ימין קריאה עם זיכרון מגובה ב-ChatMemory שזוכרת אותו.
+התמונה הבאה מציגה השוואה בין הגישות — משמאל קריאה ללא מצב ששוכחת את שמך; מימין קריאה עם מצב הנתמכת ב-ChatMemory ששומרת זאת בזיכרון.
-*ההבדל בין שיחות ללא זיכרון (קריאות עצמאיות) ושיחות עם זיכרון (מודעות להקשר)*
+*ההבדל בין שיחות ללא מצב (קריאות עצמאיות) ושיחות עם מצב (מודעות להקשר)*
## הבנת טוקנים
-לפני שנכנסים לשיחות, חשוב להבין טוקנים - יחידות הבסיס של טקסט שמודלי שפה מעבדים:
+לפני שנצלול לשיחות, חשוב להבין טוקנים - יחידות היסוד של הטקסט שהמודלים הלשוניים מעבדים:
-*דוגמה לאופן שבו טקסט מפורק לטוקנים - "I love AI!" הופך ל-4 יחידות עיבוד נפרדות*
+*דוגמה לאופן בו הטקסט נשבר לטוקנים - "I love AI!" הופך ל-4 יחידות נפרדות לעיבוד*
-טוקנים הם האופן שבו מודלי בינה מלאכותית מודדים ומעבדים טקסט. מילים, פיסוק ואפילו רווחים יכולים להיות טוקנים. למודל שלך יש מגבלה על כמות הטוקנים שהוא יכול לעבד בבת אחת (400,000 ל-GPT-5.2, עם עד 272,000 טוקנים קלט ו-128,000 טוקני פלט). הבנת הטוקנים עוזרת לך לנהל את אורך השיחות והעלויות.
+טוקנים הם האופן שבו מודלי AI מודדים ומעבדים טקסט. מילים, סימני פיסוק ואפילו רווחים יכולים להיות טוקנים. למודל שלך יש מגבלה של כמה טוקנים הוא יכול לעבד בבת אחת (400,000 ל-GPT-5.2, כולל עד 272,000 טוקנים קלט ו-128,000 טוקני פלט). הבנת הטוקנים עוזרת לך לנהל אורך שיחה ועלויות.
-## איך זיכרון עובד
+## איך הזיכרון פועל
-זיכרון שיחה פותר את בעיית היעדר הזיכרון באמצעות שמירת היסטוריית השיחה. לפני שליחת הבקשה למודל, המסגרת מוסיפה את ההודעות הרלוונטיות הקודמות. כשאתה שואל "מה השם שלי?", המערכת למעשה שולחת את כל ההיסטוריה של השיחה, ומאפשרת למודל לראות שאמרת קודם "השם שלי הוא ג'ון."
+זיכרון הצ'אט פותר את בעיית חוסר-המצב על ידי שמירת היסטוריית השיחה. לפני שליחת הבקשה למודל, המסגרת מדביקה הודעות רלוונטיות קודמות. כשאתה שואל "מה השם שלי?", המערכת למעשה שולחת את כל היסטוריית השיחה, מה שמאפשר למודל לראות שאמרת לפני כן "שמי ג'ון".
-LangChain4j מספק מימושי זיכרון שעושים זאת אוטומטית. אתה בוחר כמה הודעות לשמור והמסגרת מנהלת את חלון ההקשר. הדיאגרמה למטה מראה איך MessageWindowChatMemory שומר חלון מחליק של הודעות אחרונות.
+LangChain4j מספק מימושים לזיכרון שמטפלים בזה באופן אוטומטי. אתה בוחר כמה הודעות לשמור והמסגרת מנהלת את חלון ההקשר. התרשים למטה מראה כיצד MessageWindowChatMemory שומר חלון מחליק של הודעות אחרונות.
-*MessageWindowChatMemory שומר חלון מחליק של הודעות אחרונות, ומסיר אוטומטית הודעות ישנות*
+*MessageWindowChatMemory שומר על חלון מחליק של הודעות אחרונות, משחרר אוטומטית הודעות ישנות*
-## איך זה משתמש ב-LangChain4j
+## כיצד מודול זה משתמש ב-LangChain4j
-מודול זה מרחיב את ההתחלה המהירה באמצעות שילוב Spring Boot והוספת זיכרון שיחה. כך החלקים מתחברים יחד:
+מודול זה משלב Spring Boot ומוסיף זיכרון שיחה. כך החלקים מתחברים יחד:
-**תלויות** - הוסף שתי ספריות LangChain4j:
+**תלויות** - הוסיפו שתי ספריות LangChain4j:
```xml
@@ -94,7 +94,7 @@ LangChain4j מספק מימושי זיכרון שעושים זאת אוטומט
```
-**מודל שיחה** - הגדר את Azure OpenAI כבין של Spring ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+**מודל שיחה** - קבעו את Azure OpenAI כבין Spring ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -109,9 +109,9 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-הבונה קורא את האישורים ממשתני סביבה שהוגדרו על ידי `azd up`. הגדרת `baseUrl` לכתובת ה-endpoint של Azure שלך מאפשרת ללקוח OpenAI לעבוד עם Azure OpenAI.
+הבונה קורא את אישורי הגישה ממשתני הסביבה שהוגדרו על ידי `azd up`. קביעת `baseUrl` לנקודת הקצה של Azure שלכם מאפשרת ללקוח OpenAI לעבוד עם Azure OpenAI.
-**זיכרון שיחה** - עקוב אחרי היסטוריית השיחות באמצעות MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
+**זיכרון שיחה** - עקבו אחרי היסטוריית השיחה עם MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -124,14 +124,14 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-צור זיכרון עם `withMaxMessages(10)` לשמירת 10 ההודעות האחרונות. הוסף הודעות משתמש ובינה מלאכותית בעטיפות טיפוסיות: `UserMessage.from(text)` ו-`AiMessage.from(text)`. שלוף היסטוריה עם `memory.messages()` ושלח אותה למודל. השירות שומר מופעי זיכרון נפרדים לכל מזהה שיחה, ומאפשר למספר משתמשים לנהל שיחות בו זמנית.
+צרו זיכרון עם `withMaxMessages(10)` לשמירה של 10 ההודעות האחרונות. הוסיפו הודעות משתמש והודעות AI עם עטיפות טיפוסיות: `UserMessage.from(text)` ו-`AiMessage.from(text)`. שלפו היסטוריה עם `memory.messages()` ושלחו אותה למודל. השירות מאחסן מופעי זיכרון נפרדים לפי מזהה שיחה, ומאפשר למספר משתמשים לנהל שיחות במקביל.
-> **🤖 נסה עם [GitHub Copilot](https://github.com/features/copilot) Chat:** פתח את [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) ושאל:
-> - "איך MessageWindowChatMemory מחליט אילו הודעות להסיר כשהחלון מלא?"
-> - "האם אפשר לממש אחסון זיכרון מותאם אישית באמצעות מסד נתונים במקום בזיכרון פנימי?"
-> - "איך הייתי מוסיף סיכום ללחוץ את היסטוריית השיחה הישנה?"
+> **🤖 נסו עם [GitHub Copilot](https://github.com/features/copilot) Chat:** פתחו את [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) ושאלו:
+> - "כיצד MessageWindowChatMemory מחליט אילו הודעות לזרוק כשהחלון מלא?"
+> - "האם אוכל ליישם אחסון זיכרון מותאם אישית באמצעות מסד נתונים במקום זיכרון פנימי?"
+> - "איך אוכל להוסיף סיכום לדחיסת היסטוריית שיחה ישנה?"
-נקודת הקצה של שיחת ללא זיכרון מדלגת על הזיכרון לגמרי - פשוט `chatModel.chat(prompt)` כמו בהתחלה המהירה. נקודת הקצה של שיחה עם זיכרון מוסיפה הודעות לזיכרון, מושכת היסטוריה ומכלילה את ההקשר בכל בקשה. אותה הגדרת מודל, דפוסים שונים.
+נקודת הקצה של הצ'אט ללא מצב מדלגת על הזיכרון - פשוט `chatModel.chat(prompt)` כמו ההתחלה המהירה. נקודת הקצה עם מצב מוסיפה הודעות לזיכרון, שולפת היסטוריה וכוללת את ההקשר הזה בכל בקשה. אותה תצורת מודל, דפוסים שונים.
## פריסת תשתית Azure OpenAI
@@ -147,82 +147,83 @@ cd 01-introduction
azd up # בחר מנוי ומיקום (מומלץ eastus2)
```
-> **הערה:** אם אתה נתקל בשגיאת timeout (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), פשוט הרץ `azd up` שוב. משאבי Azure עשויים להיות עדיין בתהליך פריסה ברקע, ונסיון חוזר מאפשר לפריסה להסתיים כשהמשאבים מגיעים למצב סופי.
+> **הערה:** אם תקבלו שגיאת timeout (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), פשוט הריצו שוב `azd up`. משאבי Azure עדיין עשויים להיות בתהליך פריסה ברקע, ונסיון חוזר מאפשר לפריסה להסתיים כשתנאי המשאבים יהיו סופיים.
-זה י:
-1. יפרוס משאב Azure OpenAI עם מודלים GPT-5.2 ו-text-embedding-3-small
-2. ייצור אוטומטית קובץ `.env` בשורש הפרויקט עם האישורים
-3. יקבע את כל משתני הסביבה הנדרשים
+זה יקרה:
+1. פריסת משאב Azure OpenAI עם מודלי GPT-5.2 ו-text-embedding-3-small
+2. יצירת קובץ `.env` אוטומטית בשורש הפרויקט עם האישורים
+3. הגדרת כל משתני הסביבה הנדרשים
-**בעיות בפריסה?** ראה את [קובץ ההסבר התשתיתי](infra/README.md) לפתרון בעיות מפורט כולל התנגשויות בשמות תת-דומיין, שלבי פריסה ידנית ב-Azure Portal, והנחיות להגדרת מודלים.
+**בעיות בפריסה?** עיינו ב-[README תשתית](infra/README.md) לפירוט פתרון בעיות כולל סכסוכי שמות תת-דומיין, שלבי פריסה ידנית בפורטל Azure והדרכה לתצורת מודל.
-**אימות פריסה הצליחה:**
+**וודאו שהפריסה הצליחה:**
**Bash:**
```bash
-cat ../.env # צריך להראות את AZURE_OPENAI_ENDPOINT, API_KEY וכו'.
+cat ../.env # אמור להציג את AZURE_OPENAI_ENDPOINT, API_KEY, וכו'.
```
**PowerShell:**
```powershell
-Get-Content ..\.env # צריך להציג AZURE_OPENAI_ENDPOINT, API_KEY, וכו'.
+Get-Content ..\.env # צריך להציג את AZURE_OPENAI_ENDPOINT, API_KEY, וכו'.
```
-> **הערה:** פקודת `azd up` יוצרת אוטומטית את הקובץ `.env`. אם אתה צריך לעדכן אותו מאוחר יותר, אתה יכול לערוך את הקובץ `.env` ידנית או ליצור מחדש על ידי הרצת:
+> **הערה:** הפקודה `azd up` יוצרת אוטומטית את קובץ `.env`. אם תצטרכו לעדכן אותו מאוחר יותר, תוכלו לערוך את הקובץ ידנית או ליצור אותו מחדש באמצעות:
>
> **Bash:**
> ```bash
> cd ..
> bash .azd-env.sh
> ```
->
+
> **PowerShell:**
> ```powershell
> cd ..
> .\.azd-env.ps1
> ```
+
## הרצת האפליקציה מקומית
-**אימות פריסה:**
+**וודאו את הפריסה:**
-ודא שקובץ `.env` קיים בספרייה הראשית עם אישורי Azure. הרץ זאת מספריית המודול (`01-introduction/`):
+ודאו שקובץ `.env` קיים בשורש התיקייה עם האישורים של Azure. הריצו זאת מתיקיית המודול (`01-introduction/`):
**Bash:**
```bash
-cat ../.env # צריך להראות AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+cat ../.env # צריך להציג את AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**PowerShell:**
```powershell
-Get-Content ..\.env # צריך להציג את AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+Get-Content ..\.env # אמור להציג AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**הפעל את האפליקציות:**
+**התחילו את האפליקציות:**
-**אפשרות 1: שימוש ב-Spring Boot Dashboard (מומלץ למשתמשי VS Code)**
+**אפשרות 1: שימוש בלוח הבקרה של Spring Boot (מומלץ למשתמשי VS Code)**
-מיכל הפיתוח כולל את הרחבת Spring Boot Dashboard, המספקת ממשק חזותי לניהול כל אפליקציות Spring Boot. ניתן למצוא אותה ב-Activity Bar בצד שמאל של VS Code (חפש את סמל Spring Boot).
+קונטיינר הפיתוח כולל את תוסף לוח הבקרה של Spring Boot, שמספק ממשק חזותי לניהול כל אפליקציות Spring Boot. תוכלו למצוא אותו בסרגל הפעילות בצד שמאל של VS Code (סמל Spring Boot).
-מ-Spring Boot Dashboard, אתה יכול:
-- לראות את כל אפליקציות ה-Spring Boot הזמינות בסביבת העבודה
-- להפעיל/להפסיק אפליקציות בלחיצה פשוטה
-- לצפות בלוגים של האפליקציה בזמן אמת
-- לנטר סטטוס האפליקציה
+מלוח הבקרה של Spring Boot ניתן:
+- לראות את כל אפליקציות Spring Boot הזמינות בסביבת העבודה
+- להתחיל/להפסיק אפליקציות בלחיצה אחת
+- לצפות ביומני האפליקציה בזמן אמת
+- לנטר את מצב האפליקציה
-פשוט לחץ על כפתור ההפעלה ליד "introduction" כדי להתחיל במודול הזה, או הפעל את כל המודולים בבת אחת.
+פשוט לחצו על כפתור ההפעלה ליד "introduction" כדי להתחיל מודול זה, או התחילו את כל המודולים יחד.
-*הלוח של Spring Boot ב-VS Code — הפעלה, עצירה ומעקב אחר כל המודולים במקום אחד*
+*לוח הבקרה של Spring Boot ב-VS Code — התחילו, עצרו ונטרו את כל המודולים במקום אחד*
**אפשרות 2: שימוש בסקריפטים של shell**
-הפעל את כל אפליקציות הווב (מודולים 01-04):
+הפעילו את כל אפליקציות הרשת (מודולים 01-04):
**Bash:**
```bash
-cd .. # מספריית השורש
+cd .. # מהספרייה הראשית
./start-all.sh
```
@@ -232,7 +233,7 @@ cd .. # מתיקיית השורש
.\start-all.ps1
```
-או הפעל רק את המודול הזה:
+או התחילו רק את המודול הזה:
**Bash:**
```bash
@@ -246,25 +247,25 @@ cd 01-introduction
.\start.ps1
```
-שני הסקריפטים טוענים אוטומטית משתני סביבה מקובץ `.env` בשורש וייבנו את קבצי ה-JAR אם אינם קיימים.
+שני הסקריפטים טוענים אוטומטית משתני סביבה מקובץ `.env` בשורש ויבנו את קובצי JAR אם הם לא קיימים.
-> **הערה:** אם אתה מעדיף לבנות את כל המודולים ידנית לפני ההפעלה:
+> **הערה:** אם אתם מעדיפים לבנות את כל המודולים ידנית לפני ההפעלה:
>
> **Bash:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
->
+
> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-פתח את http://localhost:8080 בדפדפן שלך.
+פתחו בדפדפן http://localhost:8080.
-**כדי לעצור:**
+**לעצור:**
**Bash:**
```bash
@@ -280,43 +281,44 @@ cd .. && ./stop-all.sh # כל המודולים
cd ..; .\stop-all.ps1 # כל המודולים
```
+
## שימוש באפליקציה
-האפליקציה מספקת ממשק אינטרנט עם שתי יישומי שיחה לצד זה.
+האפליקציה מספקת ממשק רשת עם שתי מימושי צ'אט זה לצד זה.
-*לוח המחוונים מציג את שתי אפשרויות השיחה: Simple Chat (ללא זיכרון) ו-Conversational Chat (עם זיכרון)*
+*לוח מחוונים המראה הן צ'אט פשוט (ללא מצב) והן צ'אט שיחות (עם מצב)*
-### שיחת ללא זיכרון (לוח שמאלי)
+### צ'אט ללא מצב (פאנל שמאל)
-נסו את זה קודם. שאלו "השם שלי הוא ג'ון" ואז מיד שאלו "מה השם שלי?" המודל לא יזכור כי כל הודעה עצמאית. זה מדגים את הבעיה המרכזית עם אינטגרציה בסיסית של מודל שפה - אין הקשר שיחה.
+נסו קודם לכן. אמרו "שמי ג'ון" ואז מיד שאלו "מה השם שלי?" המודל לא יזכור כי כל הודעה עצמאית. זה מדגים את הבעיה המרכזית באינטגרציה בסיסית של מודל שפה — אין הקשר שיחה.
-*ה-AI לא זוכר את שמך מהודעה קודמת*
+*ה-AI לא זוכר את השם שלך מההודעה הקודמת*
-### שיחת עם זיכרון (לוח ימני)
+### צ'אט עם מצב (פאנל ימין)
-עכשיו נסו את אותה הרצף כאן. שאלו "השם שלי הוא ג'ון" ואז "מה השם שלי?" הפעם הוא זוכר. ההבדל הוא MessageWindowChatMemory - שומר היסטוריית שיחה ומכליל אותה בכל בקשה. כך בינה מלאכותית שיחתית במצב ייצור פועלת.
+עכשיו נסו את אותו רצף כאן. אמרו "שמי ג'ון" ואז "מה השם שלי?" הפעם הוא זוכר. ההבדל הוא MessageWindowChatMemory - הוא שומר היסטוריית שיחה וכולל אותו בכל בקשה. כך AI שיחות ייצור עובדות.
-*ה-AI זוכר את שמך משלב קודם בשיחה*
+*ה-AI זוכר את שמך מהשיחה הקודמת*
-שני הלוחות משתמשים באותו מודל GPT-5.2. ההבדל היחיד הוא הזיכרון. זה מבהיר מה הזיכרון מביא לאפליקציה שלך ומדוע הוא חיוני לשימושים אמיתיים.
+שני הפאנלים משתמשים באותו מודל GPT-5.2. ההבדל היחיד הוא בזיכרון. זה מבהיר מה הזיכרון מביא לאפליקציה שלך ולמה הוא חיוני לשימושים אמיתיים.
-## השלבים הבאים
+## שלבים הבאים
-**מודול הבא:** [02-prompt-engineering - הנדסת פרומפט עם GPT-5.2](../02-prompt-engineering/README.md)
+**מודול הבא:** [02-prompt-engineering - הנדסת פקודות עם GPT-5.2](../02-prompt-engineering/README.md)
---
-**ניווט:** [← הקודם: מודול 00 - התחלה מהירה](../00-quick-start/README.md) | [חזרה לעמוד הראשי](../README.md) | [הבא: מודול 02 - הנדסת פרומפט →](../02-prompt-engineering/README.md)
+**ניווט:** [← חזרה לעמוד הראשי](../README.md) | [הבא: מודול 02 - הנדסת פקודות →](../02-prompt-engineering/README.md)
---
**כתב ויתור**:
-מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). על אף שאנו מתאמצים להשיג דיוק, יש להיזהר כי תרגומים אוטומטיים עשויים לכלול טעויות או אי דיוקים. המסמך המקורי בשפתו המקורית ייחשב כמקור הסמכות. למידע קריטי מומלץ להיעזר בתרגום מקצועי בידי מתרגם אנושי. אנו לא נושאים באחריות לכל אי הבנה או פרשנות שגויה הנובעות משימוש בתרגום זה.
+מסמך זה תורגם באמצעות שירות תרגום אוטומטי [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. יש להחשיב את המסמך המקורי בשפתו הטבעית כמקור הסמכות. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי מתרגם אדם. אנו לא אחראים לכל אי-הבנה או פירוש שגוי הנובע מהשימוש בתרגום זה.
\ No newline at end of file
diff --git a/translations/he/02-prompt-engineering/README.md b/translations/he/02-prompt-engineering/README.md
index 4ffeb039e..bd3a9ff16 100644
--- a/translations/he/02-prompt-engineering/README.md
+++ b/translations/he/02-prompt-engineering/README.md
@@ -1,85 +1,85 @@
-# מודול 02: הנדסת פרומפטים עם GPT-5.2
+# מודול 02: הנדסת פקודות עם GPT-5.2
-## תוכן העניינים
+## תוכן עניינים
-- [הדרכה בוידאו](../../../02-prompt-engineering)
-- [מה תלמד](../../../02-prompt-engineering)
-- [דרישות מקדימות](../../../02-prompt-engineering)
-- [הבנת הנדסת פרומפטים](../../../02-prompt-engineering)
-- [יסודות הנדסת פרומפטים](../../../02-prompt-engineering)
- - [פרומפטים ללא דוגמאות (Zero-Shot)](../../../02-prompt-engineering)
- - [פרומפטים עם מספר דוגמאות (Few-Shot)](../../../02-prompt-engineering)
- - [שרשרת חשיבה](../../../02-prompt-engineering)
- - [פרומפטים מבוססי תפקיד](../../../02-prompt-engineering)
- - [תבניות פרומפטים](../../../02-prompt-engineering)
-- [תבניות מתקדמות](../../../02-prompt-engineering)
-- [הרצת האפליקציה](../../../02-prompt-engineering)
-- [צילום מסך של האפליקציה](../../../02-prompt-engineering)
-- [חקירת התבניות](../../../02-prompt-engineering)
- - [רצון נמוך מול גבוה](../../../02-prompt-engineering)
- - [ביצוע משימות (הקדמות לכלים)](../../../02-prompt-engineering)
- - [קוד תוך-השקפה עצמית](../../../02-prompt-engineering)
- - [ניתוח מובנה](../../../02-prompt-engineering)
- - [שיחות מרובות סבבים](../../../02-prompt-engineering)
- - [הסקת מסקנות שלב אחר שלב](../../../02-prompt-engineering)
- - [תפוקת פלט מוגבלת](../../../02-prompt-engineering)
-- [מה אתה באמת לומד](../../../02-prompt-engineering)
-- [השלבים הבאים](../../../02-prompt-engineering)
+- [סקירת וידאו](#סקירת-וידאו)
+- [מה תלמדו](#מה-תלמדו)
+- [קדם תנאים](#קדם-תנאים)
+- [הבנת הנדסת פקודות](#הבנת-הנדסת-פקודות)
+- [יסודות הנדסת פקודות](#יסודות-הנדסת-פקודות)
+ - [איפוס ירי פקודות](#אפס-ירי-פקודות)
+ - [איפוס ירי עם מספר דוגמאות](#ירי-פקודות-עם-מספר-דוגמאות)
+ - [שרשרת מחשבה](#שרשרת-מחשבה)
+ - [איפוס מבוסס תפקיד](#איפוס-מבוסס-תפקיד)
+ - [תבניות פקודות](#תבניות-פקודות)
+- [תבניות מתקדמות](#תבניות-מתקדמות)
+- [הרצת היישום](#הרצת-היישום)
+- [צילום מסך של היישום](#צילומי-מסך-של-היישום)
+- [חקירת התבניות](#חקר-התבניות)
+ - [רצון נמוך לעומת גבוה](#eagerness-נמוכה-מול-גבוהה)
+ - [ביצוע משימה (הקדמות כלים)](#ביצוע-משימות-פתיחי-כלים)
+ - [קוד עם חשיבה עצמית](#קוד-המשתקף-מעצמו)
+ - [ניתוח מובנה](#ניתוח-מובנה)
+ - [שיחה מרובת סבבים](#שיחה-מרובת-סבבים)
+ - [היסק שלב אחר שלב](#נימוקים-שלב-אחר-שלב)
+ - [פלט מוגבל](#פלט-מוגבל)
+- [מה שלמדתם באמת](#מה-שלמעשה-אתה-לומד)
+- [השלבים הבאים](#צעדים-הבאים)
-## הדרכה בוידאו
+## סקירת וידאו
-צפה במפגש חי זה המבהיר כיצד להתחיל עם המודול:
+צפו במפגש החי הזה שמסביר כיצד להתחיל לעבוד עם מודול זה:
-
+
-## מה תלמד
+## מה תלמדו
-הדיאגרמה הבאה מספקת סקירה של הנושאים המרכזיים והכישורים שתפתח במודול זה — מטכניקות שיפור הפרומפט ועד תהליך העבודה שלב אחר שלב שתעקוב אחריו.
+הדיאגרמה הבאה מספקת סקירה כללית של הנושאים המרכזיים והכישורים שתפתחו במודול זה — מטכניקות שיפור פקודות ועד זרימת העבודה שלב אחר שלב שתעקבו אחריה.
-
+
-במודולים הקודמים חקרת אינטראקציות בסיסיות עם LangChain4j ו-GitHub Models וראית כיצד הזיכרון מאפשר AI שיחתי עם Azure OpenAI. כעת נתמקד כיצד אתה שואל שאלות — הפרומפטים עצמם — באמצעות GPT-5.2 של Azure OpenAI. האופן בו אתה מבנה את הפרומפטים שלך משפיע באופן דרמטי על איכות התגובות. נתחיל בסקירה של טכניקות הפרומפט הבסיסיות, ואז נעבור לשמונה תבניות מתקדמות שמנצלות באופן מלא את היכולות של GPT-5.2.
+במודול הקודם ראיתם כיצד הזיכרון מאפשר בינה מלאכותית שיחה עם Azure OpenAI. כעת נתמקד כיצד אתם שואלים שאלות — כלומר הפקודות עצמן — באמצעות GPT-5.2 של Azure OpenAI. האופן בו אתם מבנים את הפקודות משפיע באופן דרמטי על איכות התגובות שתקבלו. נתחיל בסקירת טכניקות הפקודות הבסיסיות, ואז נעבור לשמונה תבניות מתקדמות המנצלות במלואן את יכולות GPT-5.2.
-נשתמש ב-GPT-5.2 משום שהוא מציג שליטה בחשיבה - אתה יכול להגיד למודל כמה לחשוב לפני שהוא עונה. זה מדגיש אסטרטגיות פרומפט שונות ועוזר לך להבין מתי להשתמש בכל גישה. כמו כן, ניהנה מהמגבלות הקצב הטובות יותר של Azure ל-GPT-5.2 בהשוואה ל-GitHub Models.
+נשתמש ב-GPT-5.2 מכיוון שהוא מציג שליטה בהיגיון - אתם יכולים להורות למודל כמה לחשוב לפני מענה. זה מבהיר אסטרטגיות פקודה שונות ועוזר לכם להבין מתי להשתמש בכל גישה.
-## דרישות מקדימות
+## קדם תנאים
-- השלמת מודול 01 (משאבי Azure OpenAI מוגדרים)
-- קובץ `.env` בספרייה הראשית עם אישורי Azure (נוצר על ידי `azd up` במודול 01)
+- השלמת מודול 01 (משאבי Azure OpenAI מופעלים)
+- קובץ `.env` בתיקיית השורש עם אישורי Azure (נוצר על ידי `azd up` במודול 01)
-> **הערה:** אם לא השלמת את מודול 01, בצע תחילה את הוראות ההטמעה שם.
+> **הערה:** אם לא השלמתם את מודול 01, יש לעקוב תחילה אחר הוראות הפריסה שם.
-## הבנת הנדסת פרומפטים
+## הבנת הנדסת פקודות
-בסיס הנדסת הפרומפטים הוא ההבדל בין הוראות מעורפלות לבין מדויקות, כפי שמדגים ההשוואה למטה.
+בבסיסו, הנדסת פקודות היא ההבדל בין הוראות לא מדויקות להוראות מדויקות, כפי שההשוואה למטה ממחישה.
-
+
-הנדסת פרומפטים עוסקת בתכנון טקסט קלט שמקבל עמודות תוצאות בתצורה עקבית. זה לא רק לשאול שאלות – זה לבנות בקשות כך שהמודל יבין בדיוק מה אתה רוצה וכיצד להעניק זאת.
+הנדסת פקודות עוסקת בעיצוב טקסט קלט שמביא איתם בתוצאות הרצויות בעקביות. זה לא רק לשאול שאלות - אלא לבנות בקשות כך שהמודל יבין בדיוק מה אתם רוצים ואיך לספק זאת.
-תחשוב על זה כמו מתן הוראות לעמית לעבודה. "תקן את הבאג" היא הוראה מעורפלת. "תקן את החריגה null pointer ב-UserService.java שורה 45 על ידי הוספת בדיקת null" היא מדויקת. מודלי שפה פועלים באותו אופן - ספציפיות ומבנה הם חשובים.
+תחשבו על זה כמו מתן הוראות לעמית לעבודה. "תקן את הבאג" זו הוראה מעורפלת. "תקן את חריגת הנקודה הריקה ב-UserService.java שורה 45 על ידי הוספת בדיקת null" היא מדויקת. מודלי השפה פועלים באותה צורה - פירוט ומבנה חשובים.
-הדיאגרמה הבאה מציגה כיצד LangChain4j משתלב בתמונה — מחבר את דפוסי הפרומפט שלך למודל דרך רכיבי הבנייה SystemMessage ו-UserMessage.
+הדיאגרמה למטה מראה כיצד LangChain4j משתלב בתמונה — מחבר את תבניות הפקודה שלכם למודל באמצעות בלוקי הבנייה SystemMessage ו-UserMessage.
-LangChain4j מספק את התשתית — חיבורים למודלים, זיכרון, וסוגי הודעות — בעוד שדפוסי הפרומפט הם פשוט טקסט מובנה בקפידה שאתה שולח דרך התשתית הזו. אבני הבניין המרכזיות הן `SystemMessage` (שקובעת את התנהגות ותפקיד ה-AI) ו-`UserMessage` (שנושא את הבקשה הממשית שלך).
+LangChain4j מספק את התשתית — חיבורי מודל, זיכרון וסוגי הודעות — בעוד שתבניות הפקודות הן רק טקסט מבנה בקפידה שאתם שולחים דרך התשתית הזו. אבני הבניין המרכזיות הן `SystemMessage` (שמצב את ההתנהגות והתפקיד של ה-AI) ו-`UserMessage` (שאוחז בבקשה העצמאית שלכם).
-## יסודות הנדסת פרומפטים
+## יסודות הנדסת פקודות
-חמש טכניקות הליבה המוצגות למטה מהוות את הבסיס להנדסת פרומפטים יעילה. כל אחת מתמקדת בהיבט אחר של האופן בו אתה מתקשר עם מודלי שפה.
+חמש הטכניקות העיקריות המופיעות למטה מהוות את הבסיס להנדסת פקודות אפקטיבית. כל אחת מתמקדת באספקט שונה של האינטראקציה שלכם עם מודלי שפה.
-
+
-לפני שנצלול לתבניות המתקדמות במודול זה, נעבור על חמש טכניקות פרומפט בסיסיות. אלו אבני הבניין שכל מהנדס פרומפט צריך להכיר. אם כבר עבדת עם [מודול ההתחלה המהירה](../00-quick-start/README.md#2-prompt-patterns), ראית אותן בפועל — הנה המסגרת התיאורטית שמאחוריהן.
+לפני שנצלול לתבניות המתקדמות במודול זה, נסקור חמש טכניקות פקודה בסיסיות. אלה אבני הבניין שכל מהנדס פקודות צריך להכיר.
-### פרומפט ללא דוגמאות (Zero-Shot)
+### אפס ירי פקודות
-הגישה הפשוטה ביותר: תן למודל הוראה ישירה ללא דוגמאות. המודל מתבסס לחלוטין על האימון שלו כדי להבין ולבצע את המשימה. זה עובד היטב עבור בקשות פשוטות שבהן ההתנהגות המצופה ברורה.
+הגישה הפשוטה ביותר: לתת למודל הוראה ישירה ללא דוגמאות. המודל מסתמך לחלוטין על האימון שלו כדי להבין ולבצע את המשימה. זה עובד טוב לבקשות פשוטות שבהן ההתנהגות הצפויה ברורה.
-
+
-*הוראה ישירה ללא דוגמאות — המודל מסיק את המשימה מההוראה בלבד*
+*הוראה ישירה ללא דוגמאות — המודל מסיק את המשימה מהוראה בלבד*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
@@ -87,15 +87,15 @@ String response = model.chat(prompt);
// תגובה: "חיובי"
```
-**מתי להשתמש:** סיווגים פשוטים, שאלות ישירות, תרגומים, או כל משימה שהמודל יכול לטפל בה ללא הנחיות נוספות.
+**מתי להשתמש:** סיווגים פשוטים, שאלות ישירות, תרגומים, או כל משימה שהמודל יכול להתמודד איתה בלי הדרכה נוספת.
-### פרומפט עם מספר דוגמאות (Few-Shot)
+### ירי פקודות עם מספר דוגמאות
-ספק דוגמאות המדגימות את הדפוס שברצונך שהמודל יעקוב אחריו. המודל לומד את פורמט הקלט-פלט המצופה מהדוגמאות שלך ומיישם אותו על קלטים חדשים. זה משפר באופן דרמטי את העקביות במשימות שבהן הפורמט או ההתנהגות הרצויים אינם מובנים מאליהם.
+מספקים דוגמאות המדגימות את התבנית שברצונכם שהמודל יעקוב אחריה. המודל לומד את פורמט הקלט-פלט המצופה מדוגמאותיכם ומיישם אותו על קלטים חדשים. זה משפר מאוד את העקביות למשימות שבהן פורמט או התנהגות רצויים אינם ברורים.
-
+
-*לומד מדוגמאות — המודל מזהה את הדפוס ומחיל אותו על קלטים חדשים*
+*לימוד מדוגמאות — המודל מזהה את התבנית ומיישם אותה על קלטים חדשים*
```java
String prompt = """
@@ -112,15 +112,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**מתי להשתמש:** סיווגים מותאמים אישית, עיצוב עקבי, משימות ספציפיות לתחום, או כאשר תוצאות ה-zero-shot אינן עקביות.
+**מתי להשתמש:** סיווגים מותאמים אישית, עיצוב עקבי, משימות בתחום ספציפי, או כאשר תוצאות אפס ירי אינן עקביות.
-### שרשרת חשיבה (Chain of Thought)
+### שרשרת מחשבה
-בקש מהמודל להראות את ההיגיון שלו שלב אחר שלב. במקום לקפוץ ישר לתשובה, המודל מפצל את הבעיה ועובד על כל חלק במפורש. זה משפר את הדיוק בבעיות מתמטיות, לוגיות, ובהסקת מסקנות מרובה שלבים.
+בקשו מהמודל להראות את ההיגיון שלו צעד אחר צעד. במקום לקפוץ ישר לתשובה, המודל מפרק את הבעיה ועובר על כל חלק במפורש. זה משפר את הדיוק באלות מתמטיות, לוגיקה ומשימות היסק רב-שלבי.
-
+
-*היגיון שלב אחר שלב — מפצל בעיות מורכבות לשלבים לוגיים מפורשים*
+*היסק שלב אחר שלב — שבירת בעיות מורכבות לצעדים לוגיים מפורשים*
```java
String prompt = """
@@ -130,18 +130,18 @@ String prompt = """
Let's solve this step-by-step:
""";
String response = model.chat(prompt);
-// המודל מראה: 15 - 8 = 7, ואז 7 + 12 = 19 תפוחים
+// הדגם מציג: 15 - 8 = 7, אז 7 + 12 = 19 תפוחים
```
-**מתי להשתמש:** בעיות מתמטיות, חידות לוגיות, איתור שגיאות, או כל משימה שבה הצגת תהליך ההיגיון משפרת דיוק ואמון.
+**מתי להשתמש:** בעיות מתמטיות, חידות לוגיות, איתור באגים, או כל משימה שבה הצגת תהליך ההיגיון משפרת דיוק ואמון.
-### פרומפטים מבוססי תפקיד (Role-Based Prompting)
+### איפוס מבוסס תפקיד
-הגדר אישיות או תפקיד ל-AI לפני ששואלים את שאלתך. זה מספק הקשר שמעצב את הטון, העומק, והפוקוס של התגובה. "ארכיטקט תוכנה" נותן עצות שונות מ"מתכנת צעיר" או "בודק אבטחה".
+הגדירו פרסונה או תפקיד ל-AI לפני ששואלים את השאלה. זה מספק הקשר שמעצבת את הטון, העומק, והמיקוד של התשובה. "ארכיטקט תוכנה" נותן עצות שונות מ"מפתח זוטר" או "מבקר אבטחה".
-
+
-*קביעת הקשר ואישיות — אותה שאלה מקבלת תגובה שונה בהתאם לתפקיד שיוחס*
+*הגדרת הקשר ופרסונה — אותה שאלה מקבלת תשובה שונה בהתאם לתפקיד שהוקצה*
```java
String prompt = """
@@ -157,15 +157,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**מתי להשתמש:** סקירות קוד, הדרכה, ניתוח תחום ספציפי, או כשאתה צריך תגובות המותאמות לרמת מומחיות או נקודת מבט מסוימת.
+**מתי להשתמש:** סקירות קוד, הדרכה, ניתוחים בתחום ספציפי, או כאשר אתם צריכים תגובות מותאמות לרמת מומחיות או נקודת מבט מסוימת.
-### תבניות פרומפטים (Prompt Templates)
+### תבניות פקודות
-צור פרומפטים לשימוש חוזר עם משתנים למילוי. במקום לכתוב פרומפט חדש בכל פעם, הגדר תבנית אחת ומלא בה ערכים שונים. מחלקת `PromptTemplate` של LangChain4j מקלה על כך בשימוש בתחביר `{{variable}}`.
+צרו פקודות רב-פעמיות עם תבניות משתנים. במקום לכתוב פקודה חדשה בכל פעם, הגדירו תבנית פעם אחת ומלאו בערכים שונים. מחלקת `PromptTemplate` של LangChain4j מקלה על כך עם תחביר `{{variable}}`.
-
+
-*פרומפטים לשימוש חוזר עם משתנים — תבנית אחת, שימושים רבים*
+*פקודות רב-פעמיות עם משתנים — תבנית אחת, שימושים רבים*
```java
PromptTemplate template = PromptTemplate.from(
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**מתי להשתמש:** שאילתות חוזרות עם קלטים שונים, עיבוד באצוות, בניית תהליכי עבודה של AI לשימוש חוזר, או בכל מצב שבו מבנה הפרומפט נשאר זהה אך הנתונים משתנים.
+**מתי להשתמש:** שאילתות חוזרות עם קלטים שונים, עיבוד באצווה, בניית זרימות עבודה של AI רב-שימושיות, או כל תרחיש שבו מבנה הפקודה נשאר קבוע אך הנתונים משתנים.
---
-חמשת היסודות הללו מעניקים לך ערכת כלים איתנה לרוב משימות הפרומפט. שאר המודול ממשיך איתם עם **שמונה תבניות מתקדמות** המנצלות את בקרת החשיבה, ההערכה העצמית, ויכולות הפלט המובנה של GPT-5.2.
+חמשת היסודות האלו נותנים לכם ערכת כלים איתנה לרוב משימות הפקודה. שאר המודול מתבסס עליהם עם **שמונה תבניות מתקדמות** שמנצלות את שליטת ההיגיון, ההערכה העצמית והפלט המובנה של GPT-5.2.
## תבניות מתקדמות
-לאחר כיסוי היסודות, נמשיך לשמונה תבניות מתקדמות שמייחדות מודול זה. לא כל בעיה זקוקה לאותה גישה. חלק מהשאלות דורשות תשובות מהירות, אחרות דורשות חשיבה מעמיקה. חלק דורשות היגיון גלוי, אחרות רק תוצאות. כל תבנית למטה מותאמת לסיטואציה שונה — ובקרת החשיבה של GPT-5.2 מדגישה את ההבדלים עוד יותר.
+עם היסודות הנלמדים, נעבור לשמונה התבניות המתקדמות שהופכות מודול זה לייחודי. לא כל הבעיות זקוקות לאותה גישה. חלק מהשאלות דורשות תשובות מהירות, אחרות דורשות חשיבה עמוקה. חלק דורשות היגיון גלוי, אחרות רק תוצאות. כל תבנית מטה אופטימלית לתרחיש אחר — ושליטה בהיגיון של GPT-5.2 מדגישה את ההבדלים.
-
+
-*סקירה של שמונת דפוסי הנדסת הפרומפט והשימושים שלהם*
+*סקירה של שמונת תבניות הנדסת הפקודות והשימושים שלהן*
-GPT-5.2 מוסיף מימד חדש לתבניות האלה: *בקרת חשיבה*. המחוון למטה מראה כיצד ניתן לכוון את מאמץ החשיבה של המודל — מתשובות מהירות וישירות ועד ניתוח עמוק ויסודי.
+GPT-5.2 מוסיף מימד נוסף לתבניות האלו: *שליטה בהיגיון*. המחוון למטה מראה כיצד ניתן לכוונן את מאמץ החשיבה של המודל — מתשובות מהירות וישירות ועד לניתוח מעמיק ויסודי.
-
+
-*בקרת החשיבה של GPT-5.2 מאפשרת לך לציין כמה לחשוב המודל צריך — מתשובות מהירות ועד לחקירה מעמיקה*
+*שליטה בהיגיון של GPT-5.2 מאפשרת לכם לציין כמה לחשוב המודל - מתשובות מהירות ועד חקירה מעמיקה*
-**רצון נמוך (מהיר וממוקד)** - לשאלות פשוטות שבהן רוצים תשובות מהירות וישירות. המודל מבצע מינימום חשיבה - מקסימום 2 שלבים. השתמש בזה לחישובים, חיפושים, או שאלות פשוטות.
+**רצון נמוך (מהיר וממוקד)** - לשאלות פשוטות שבהן אתם רוצים תשובות מהירות וישירות. המודל מבצע היגיון מינימלי - מקסימום 2 צעדים. השתמשו בזה עבור חישובים, חיפושים או שאלות ישירות.
```java
String prompt = """
@@ -219,12 +219,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> 💡 **חקור עם GitHub Copilot:** פתח [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) ושאל:
-> - "מה ההבדל בין דפוסי פרומפט של רצון נמוך לעומת גבוה?"
-> - "כיצד תגיות XML בפרומפטים עוזרות במבנה תגובת ה-AI?"
-> - "מתי יש להשתמש בתבניות השיקוף העצמי מול הוראות ישירות?"
+> 💡 **חקור עם GitHub Copilot:** פתח את [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) ושאל:
+> - "מה ההבדל בין דפוסי פקודה של רצון נמוך לעומת רצון גבוה?"
+> - "כיצד תגי ה-XML בפקודות עוזרים לבנות את תגובת ה-AI?"
+> - "מתי יש להשתמש בתבניות של חשיבה עצמית לעומת הוראה ישירה?"
-**רצון גבוה (עמוק ויסודי)** - לבעיות מורכבות שבהן רוצים ניתוח מעמיק. המודל חוקר באופן יסודי ומציג היגיון מפורט. השתמש בזה לתכנון מערכות, החלטות ארכיטקטורה, או מחקר מורכב.
+**רצון גבוה (עמוק ויסודי)** - לבעיות מורכבות שבהן אתם רוצים ניתוח מעמיק. המודל חוקר לעומק ומראה היגיון מפורט. השתמשו בזה לעיצוב מערכות, החלטות ארכיטקטוניות, או מחקר מורכב.
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**ביצוע משימה (התקדמות שלב אחר שלב)** - עבור תהליכים מרובי שלבים. המודל מספק תוכנית מראש, מתאר כל שלב בזמן העבודה, ואז נותן סיכום. השתמש בזה להעברות, יישומים, או כל תהליך מרובה שלבים.
+**ביצוע משימות (התקדמות שלב-אחר-שלב)** - לזרימות עבודה רב-שלביות. המודל מספק תוכנית מקדימה, מפרט כל שלב בעבודה ואז נותן סיכום. השתמשו בזה עבור מעבר נתונים, יישומים או כל תהליך רב שלבים.
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-פרומפט שרשרת-חשיבה מבקש במפורש מהמודל להראות את תהליך ההיגיון שלו, ומשפר דיוק במשימות מורכבות. הפירוט שלב אחר שלב מסייע גם לבני אדם וגם ל-AI להבין את הלוגיקה.
+איפוס שרשרת מחשבה מבקש במפורש מהמודל להראות את תהליך ההיגיון שלו, ומשפר את הדיוק במשימות מורכבות. הפירוק שלב אחר שלב עוזר גם לבני אדם וגם ל-AI להבין את הלוגיקה.
-> **🤖 נסה עם צ'אט של [GitHub Copilot](https://github.com/features/copilot):** שאל על התבנית הזו:
-> - "כיצד אתאים את דפוס ביצוע המשימה לפעולות ארוכות-טווח?"
-> - "מהם ההרגלים הטובים ביותר למבני הקדמות לכלים באפליקציות פרודקשן?"
-> - "כיצד אוכל לתפוס ולהציג עדכוני התקדמות ביניים בממשק משתמש?"
+> **🤖 נסה עם צ’אט [GitHub Copilot](https://github.com/features/copilot):** שאל על התבנית הזו:
+> - "איך אסתגל את דפוס ביצוע המשימות עבור פעולות ארוכות טווח?"
+> - "מהן השיטות הטובות ביותר לבניית הקדמות כלים ביישומים פרודקשן?"
+> - "כיצד אוכל לתעד ולהציג עדכוני התקדמות בינוניים בממשק משתמש?"
-הדיאגרמה הבאה ממחישה את תהליך העבודה תכנון → ביצוע → סיכום.
+הדיאגרמה למטה מדגימה את זרימת העבודה תכנון → ביצוע → סיכום.
-
+
-*תהליך תכנון → ביצוע → סיכום למשימות מרובות שלבים*
+*זרימת עבודה תכנון → ביצוע → סיכום למשימות רב-שלביות*
-**קוד תוך-השקפה עצמית** - ליצירת קוד איכותי לפרודקשן. המודל מייצר קוד בהתאם לתקני פרודקשן עם טיפול נאות בשגיאות. השתמש בזה בעת בניית תכונות או שירותים חדשים.
+**קוד עם חשיבה עצמית** - ליצירת קוד באיכות הפקה. המודל מייצר קוד העומד בסטנדרטים של הפקה עם טיפול שגיאות תקין. השתמשו בזה בבניית תכונות או שירותים חדשים.
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-הדיאגרמה הבאה מראה את הלולאת השיפור החוזרת הזו — ייצור, הערכה, זיהוי חולשות, ושיפור עד שהקוד עומד בתקן הפרודקשן.
+הדיאגרמה הבאה מציגה את מחזור השיפור החוזר הזה — ייצור, הערכה, זיהוי נקודות תורפה, ושיפור עד שהקוד עומד בסטנדרטים של הפקה.
-
+
-*לולאת שיפור חוזרת - יצירה, הערכה, זיהוי בעיות, שיפור, חזרה*
+*מחזור שיפור חוזר - הפקה, הערכה, איתור בעיות, שיפור, חזרה*
-**ניתוח מובנה** - להערכה עקבית. המודל בודק קוד תוך שימוש במסגרת קבועה (נכונות, נהלים, ביצועים, אבטחה, תחזוקה). השתמש בזה לסקירות קוד או הערכות איכות.
+**ניתוח מובנה** - להערכה עקבית. המודל סוקר קוד באמצעות מסגרת קבועה (נכונות, פרקטיקות, ביצועים, אבטחה, תחזוקה). השתמשו בזה לביקורות קוד או הערכות איכות.
```java
String prompt = """
@@ -354,18 +354,18 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> **🤖 נסה עם צ'אט של [GitHub Copilot](https://github.com/features/copilot):** שאל על ניתוח מובנה:
-> - "כיצד אוכל להתאים את מסגרת הניתוח לסוגים שונים של סקירות קוד?"
-> - "מה הדרך הטובה ביותר לפרש ולהשתמש בפלט מובנה באופן תכנותי?"
-> - "כיצד להבטיח רמות חומרה עקביות על פני סבבי סקירה שונים?"
+> **🤖 נסה עם צ’אט [GitHub Copilot](https://github.com/features/copilot):** שאל על ניתוח מובנה:
+> - "כיצד להתאים אישית את מסגרת הניתוח לסוגים שונים של ביקורות קוד?"
+> - "מהו האופן הטוב ביותר לנתח ולפעול על פלט מובנה בתוכנה?"
+> - "כיצד להבטיח רמות חומרה עקביות במפגשי ביקורת שונים?"
-הדיאגרמה הבאה מראה כיצד המסגרת המובנית מארגנת סקירת קוד לקטגוריות עקביות עם רמות חומרה.
+הדיאגרמה להלן מראה כיצד המסגרת המובנית מארגנת ביקורת קוד לקטגוריות עקביות עם רמות חומרה.
-
+
-*מסגרת לסקירות קוד עקביות עם רמות חומרה*
+*מסגרת לביקורות קוד עקביות עם רמות חומרה*
-**שיחות מרובות סבבים** - לשיחות שדורשות הקשר. המודל זוכר הודעות קודמות ובונה על פיהן. השתמש בזה למפגשי עזרה אינטראקטיביים או שאלות ותשובות מורכבות.
+**שיחה מרובת סבבים** - לשיחות שדורשות הקשר. המודל זוכר הודעות קודמות ובונה עליהן. השתמשו בזה למפגשי עזרה אינטראקטיביים או שאלות ותשובות מורכבות.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-הדיאגרמה הבאה ממחישה כיצד מצטבר הקשר השיח עם כל סבב וכיצד הוא משפיע על מגבלת הטוקנים של המודל.
+הדיאגרמה הבאה ממחישה כיצד הקשר השיחה מצטבר בכל סבב ואיך זה מתקשר למגבלת הטוקנים של המודל.
-*כיצד מצטבר הקשר השיח על פני מספר סבבים עד להגעה למגבלת הטוקנים*
-**הסבר צעד-אחר-צעד** - עבור בעיות הדורשות לוגיקה גלויה. המודל מציג הסבר מפורש עבור כל שלב. השתמש בזה עבור בעיות מתמטיות, חידות לוגיות, או כאשר אתה צריך להבין את תהליך החשיבה.
+*כיצד מצטבר הקשר שיחה על פני סבבים רבים עד שמגיעים למגבלת הטוקנים*
+
+**היסק שלב אחר שלב** - לבעיות שדורשות לוגיקה גלויה. המודל מראה היגיון מפורש עבור כל שלב. השתמשו בזה לבעיות מתמטיות, חידות לוגיות, או כשאתם צריכים להבין את תהליך החשיבה.
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-הדיאגרמה למטה ממחישה כיצד המודל מפרק בעיות לשלבים לוגיים מפורשים וממוספרים.
-
-
+הדיאגרמה למטה ממחישה כיצד המודל מפרק בעיות לצעדים לוגיים מפורשים וממוספרים.
-*פירוק בעיות לשלבים לוגיים מפורשים*
+
+*פירוק בעיות לצעדים לוגיים מפורשים*
-**פלט מוגבל** - עבור תגובות עם דרישות פורמט ספציפיות. המודל עומד בקפדנות בחוקי הפורמט והאורך. השתמש בזה עבור סיכומים או כאשר אתה צריך מבנה פלט מדויק.
+**פלט מוגבל** - לתשובות עם דרישות פורמט ספציפיות. המודל פועל בקפדנות לפי כללי הפורמט והאורך. השתמש בזה לסיכומים או כאשר נדרש מבנה פלט מדויק.
```java
String prompt = """
@@ -420,17 +420,17 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-הדיאגרמה הבאה מראה כיצד מגבלות מנחות את המודל לייצר פלט המתאים בקפדנות לדרישות הפורמט והאורך שלך.
+הדיאגרמה הבאה ממחישה כיצד מגבלות מנחות את המודל לייצר פלט שמקפיד לשמור בקפדנות על דרישות הפורמט והאורך שלך.
-
+
*אכיפת דרישות פורמט, אורך ומבנה ספציפיות*
-## הפעלת היישום
+## הרצת היישום
**אימות פריסה:**
-ודא שקובץ ה-`.env` קיים בתיקיית השורש עם האישורים של Azure (נוצר במהלך מודול 01). הפעל זאת מתיקיית המודול (`02-prompt-engineering/`):
+ודא שקובץ ה-`.env` קיים בספריית השורש עם האישורים של Azure (נוצר במהלך מודול 01). הרץ זאת מספריית המודול (`02-prompt-engineering/`):
**Bash:**
```bash
@@ -439,32 +439,32 @@ cat ../.env # צריך להציג את AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYME
**PowerShell:**
```powershell
-Get-Content ..\.env # צריך להציג את AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+Get-Content ..\.env # צריך להציג AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**הפעל את היישום:**
-> **הערה:** אם כבר הפעלת את כל היישומים באמצעות `./start-all.sh` מתיקיית השורש (כמתואר במודול 01), מודול זה כבר רץ על פורט 8083. ניתן לדלג על פקודות ההפעלה למטה ולעבור ישירות ל-http://localhost:8083.
+> **הערה:** אם כבר הפעלת את כל היישומים באמצעות `./start-all.sh` מספריית השורש (כמו שמתואר במודול 01), מודול זה כבר רץ בפורט 8083. ניתן לדלג על פקודות ההפעלה למטה ולעבור ישירות ל- http://localhost:8083.
-**אפשרות 1: שימוש בלוח ניהול Spring Boot (מומלץ למשתמשי VS Code)**
+**אפשרות 1: שימוש ב-Spring Boot Dashboard (מומלץ למשתמשי VS Code)**
-מיכל הפיתוח כולל את התוסף Spring Boot Dashboard, המספק ממשק ויזואלי לניהול כל יישומי Spring Boot. ניתן למצוא אותו בסרגל הפעילות בצד השמאלי של VS Code (חפש את סמל Spring Boot).
+מיכל המפתחים כולל את תוסף Spring Boot Dashboard, שנותן ממשק חזותי לניהול כל יישומי Spring Boot. ניתן למצוא אותו בסרגל הפעילות בצד שמאל של VS Code (חפש את סמל Spring Boot).
-ממול לוח ניהול Spring Boot, ניתן:
+מן ה-Spring Boot Dashboard ניתן:
- לראות את כל יישומי Spring Boot הזמינים בסביבת העבודה
- להפעיל/להפסיק יישומים בלחיצה אחת
-- להציג לוגים של היישום בזמן אמת
+- לצפות בלוגים של היישום בזמן אמת
- לנטר את מצב היישום
-פשוט לחץ על כפתור ההפעלה ליד "prompt-engineering" כדי להפעיל את המודול, או הפעל את כל המודולים ביחד.
+פשוט לחץ על כפתור ההפעלה ליד "prompt-engineering" כדי להפעיל את המודול הזה, או הפעל את כל המודולים בבת אחת.
-
+
-*לוח ניהול Spring Boot ב-VS Code — הפעלה, הפסקה ומעקב אחר כל המודולים ממקום אחד*
+*לוח הבקרה של Spring Boot ב-VS Code — הפעל, עצור וצפה במעקב אחרי כל המודולים במקום אחד*
-**אפשרות 2: שימוש בסקריפטים של shell**
+**אפשרות 2: שימוש בסקריפטים ב-shell**
-הפעל את כל יישומי הרשת (מודולים 01-04):
+הפעל את כל יישומי האינטרנט (מודולים 01-04):
**Bash:**
```bash
@@ -478,7 +478,7 @@ cd .. # מספריית השורש
.\start-all.ps1
```
-או הפעל רק את המודול הזה:
+או הפעל רק מודול זה:
**Bash:**
```bash
@@ -492,7 +492,7 @@ cd 02-prompt-engineering
.\start.ps1
```
-שני הסקריפטים טוענים אוטומטית משתני סביבה מקובץ ה-`.env` בשורש ויבנו את קבצי ה-JAR אם הם לא קיימים.
+שני הסקריפטים טוענים אוטומטית משתני סביבה מקובץ ה-`.env` שבשורש ויבנו את קבצי ה-JAR במידה ואינם קיימים.
> **הערה:** אם אתה מעדיף לבנות את כל המודולים ידנית לפני ההפעלה:
>
@@ -501,7 +501,7 @@ cd 02-prompt-engineering
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
->
+
> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
@@ -510,87 +510,87 @@ cd 02-prompt-engineering
פתח את http://localhost:8083 בדפדפן שלך.
-**כדי לעצור:**
+**להפסקה:**
**Bash:**
```bash
-./stop.sh # מודול זה בלבד
+./stop.sh # רק מודול זה
# או
cd .. && ./stop-all.sh # כל המודולים
```
**PowerShell:**
```powershell
-.\stop.ps1 # מודול זה בלבד
+.\stop.ps1 # רק מודול זה
# או
cd ..; .\stop-all.ps1 # כל המודולים
```
## צילומי מסך של היישום
-הנה הממשק הראשי של מודול הנדסת הפרומפטים, שבו ניתן להתנסות בכל שמונת הדפוסים זה לצד זה.
+הנה ממשק הראשי של מודול הנדסת הפרומפטים, בו אפשר להתנסות בכל שמונת התבניות זה לצד זה.
-
+
-*הלוח הראשי המציג את כל 8 דפוסי הנדסת פרומפט עם התכונות ומקרי השימוש שלהם*
+*לוח הבקרה הראשי המציג את כל 8 תבניות הנדסת הפרומפטים עם המאפיינים ומקרי השימוש שלהן*
-## חקר הדפוסים
+## חקר התבניות
-ממשק הרשת מאפשר לך להתנסות באסטרטגיות פרומפט שונות. כל דפוס פותר בעיות שונות - נסה אותם כדי לראות מתי כל גישה בולטת.
+ממשק האינטרנט מאפשר לך להתנסות באסטרטגיות פרומפט שונות. כל תבנית פותרת בעיות שונות - נסה לראות מתי כל גישה בהירה יותר.
-> **הערה: שידור מול לא-שידור** — בכל דף דפוס מוצעים שני כפתורים: **🔴 שידור תגובה (חי)** ואפשרות **לא-שידור**. שידור משתמש ב-Server-Sent Events (SSE) להצגת הטוקנים בזמן אמת כשהמודל מייצר אותם, כך שאתה רואה התקדמות מיידית. האופציה הלא-שידורית מחכה לתגובה המלאה לפני ההצגה. עבור פרומפטים המפעילים חשיבה מעמיקה (למשל, High Eagerness, קוד המשתקף עצמי), הקריאה הלא-שידורית יכולה לקחת זמן רב מאוד — לפעמים דקות — ללא משוב גלוי. **השתמש בשידור בעת התנסות עם פרומפטים מורכבים** כדי שתוכל לראות את המודל פועל ולהימנע מהתרשמות שהבקשה נתקעה.
+> **הערה: סטרימינג מול אי-סטרימינג** — כל דף תבנית כולל שני כפתורים: **🔴 זרם תגובה (חי)** ואפשרות **לא סטרימינג**. סטרימינג משתמש ב-Server-Sent Events (SSE) כדי להציג את הטוקנים בזמן אמת כשהמודל מייצר אותם, כך שאתה רואה את ההתקדמות מיידית. האופציה הלא סטרימינג מחכה לתגובה המלאה לפני התצוגה. בפרומפטים שדורשים חשיבה עמוקה (כגון High Eagerness, קוד המשתקף מעצמו), הקריאה הלא סטרימינג יכולה לקחת זמן רב מאוד — לפעמים דקות — בלי משוב ויזואלי. **השתמש בסטרימינג כשאתה מתנסה בפרומפטים מורכבים** כדי לראות את המודל פועל ולהימנע מהרגשת כתובת בקשת זמן.
>
-> **הערת דפדפן** — תכונת השידור משתמשת ב-Fetch Streams API (`response.body.getReader()`) הדורש דפדפן מלא (Chrome, Edge, Firefox, Safari). היא **אינה עובדת** בדפדפן הפשוט המובנה של VS Code, שכן ה-webview שלו לא תומך ב-ReadableStream API. אם אתה משתמש בדפדפן הפשוט, הכפתורים הלא-שידוריים יעבדו כרגיל — רק כפתורי השידור מושפעים. פתח `http://localhost:8083` בדפדפן חיצוני לחוויה מלאה.
+> **הערה: דרישת דפדפן** — תכונת הסטרימינג עושה שימוש ב-Fetch Streams API (`response.body.getReader()`) שדורש דפדפן מלא (Chrome, Edge, Firefox, Safari). זה **לא** עובד בדפדפן הפשוט המובנה ב-VS Code, שכן ה-webview שלו אינו תומך ב-ReadableStream API. אם אתה משתמש בשחקן הפשוט, כפתורי הלא סטרימינג יעבדו כסדרם — רק כפתורי הסטרימינג יושפעו. פתח את `http://localhost:8083` בדפדפן חיצוני לקבלת החוויה המלאה.
-### נמוך מול גבוה בהתלהבות
+### Eagerness נמוכה מול גבוהה
-שאול שאלה פשוטה כמו "מה זה 15% מתוך 200?" באמצעות Low Eagerness. תקבל תשובה ישירה ומידית. עכשיו שאל שאלה מורכבת כמו "עצב אסטרטגיית מטמון ל-API בתעבורה גבוהה" באמצעות High Eagerness. לחץ **🔴 שידור תגובה (חי)** וצפה בהופעת ההסבר המפורט של המודל טוקן אחרי טוקן. אותו מודל, אותה שאלה – אבל הפרומפט מורה כמה לחשוב.
+שאול שאלה פשוטה כמו "כמה זה 15% מ-200?" באמצעות Eagerness נמוכה. תקבל תשובה ישירה ומיידית. עכשיו שאול משהו מורכב כמו "עצב אסטרטגיית מטמון עבור API בעומס גבוה" עם Eagerness גבוהה. לחץ על **🔴 זרם תגובה (חי)** וצפה בנימוקים המפורטים של המודל מופיעים טוקן אחר טוקן. אותו מודל, אותו מבנה שאלה - אבל הפרומפט אומר לו כמה לחשוב.
-### ביצוע משימה (קדימונים לכלים)
+### ביצוע משימות (פתיחי כלים)
-זרימות עבודה מרובות שלבים מרוויחות מתכנון מראש וסיפור התקדמות. המודל מפרט מה יעשה, מתאר כל שלב, ואז מסכם תוצאות.
+זרימות עבודה מרובות שלבים מרוויחות מתכנון מראש ונרטיב התקדמות. המודל מפרט מה יעשה, מתאר כל שלב, ואז מסכם תוצאות.
-### קוד המשתקף עצמי
+### קוד המשתקף מעצמו
-נסה "צור שירות לאימות דואר אלקטרוני". במקום רק להפיק קוד ולעצור, המודל מייצר, מעריך לפי קריטריוני איכות, מזהה חולשות ומשפר. תראה אותו חוזר על עצמו עד שהקוד עומד בסטנדרטים של ייצור.
+נסה "צור שירות לאימות אימייל". במקום רק ליצור קוד ולעצור, המודל מייצר, מעריך לפי קריטריוני איכות, מזהה חולשות ומשפר. תראה אותו ממשיך עד שהקוד עומד בסטנדרטים לייצור.
### ניתוח מובנה
-סקירות קוד דורשות מסגרות הערכה עקביות. המודל מנתח קוד לפי קטגוריות קבועות (נכונות, שיטות, ביצועים, אבטחה) עם רמות חומרה.
+סקירות קוד צריכות מסגרות הערכה עקביות. המודל מנתח קוד לפי קטגוריות קבועות (נכונות, פרקטיקות, ביצועים, אבטחה) עם דרגות חומרה.
### שיחה מרובת סבבים
-שאול "מה זה Spring Boot?" ואז מיד המשך עם "הראה לי דוגמה". המודל זוכר את השאלה הראשונה ונותן דוגמת Spring Boot ספציפית. בלי זיכרון, השאלה השנייה הייתה מעורפלת מדי.
+שאול "מה זה Spring Boot?" ואז מיד המשך ב"הראה לי דוגמה". המודל זוכר את השאלה הראשונה ונותן דוגמת Spring Boot ספציפית. בלי זיכרון, השאלה השנייה הייתה כללית מדי.
-### הסבר צעד-אחר-צעד
+### נימוקים שלב-אחר-שלב
-בחר בעיית מתמטיקה ונסה אותה הן עם הסבר צעד-אחר-צעד והן עם Low Eagerness. ההתלהבות הנמוכה נותנת רק את התשובה - מהיר אך לא שקוף. בהסבר צעד-אחר-צעד תראה כל חישוב והחלטה.
+בחר בעיה מתמטית ונסה אותה עם נימוקים שלב-אחר-שלב ועם Eagerness נמוכה. Eagerness נמוכה נותן רק את התשובה — מהיר אבל לא מובן. נימוקים שלב-אחר-שלב מראים כל חישוב והחלטה.
### פלט מוגבל
-כשהדרוש פורמטים מסוימים או ספירת מילים, דפוס זה מאכף עמידה מדויקת. נסה לייצר סיכום במדויק עם 100 מילים בפורמט נקודות.
+כשנדרשים פורמטים ספציפיים או ספירת מילים, תבנית זו מכריחה שמירה קפדנית. נסה לייצר סיכום עם בדיוק 100 מילים בפורמט נקודות.
-## מה שלומדים באמת
+## מה שלמעשה אתה לומד
-**מאמץ ההסבר משנה הכל**
+**מאמץ נימוק משנה הכל**
-GPT-5.2 מאפשר לך לשלוט במאמץ המחשובי דרך הפרומפטים שלך. מאמץ נמוך נותן תגובות מהירות עם חקירה מינימלית. מאמץ גבוה מביא את המודל להשקיע מחשבה עמוקה. אתה לומד להתאים את המאמץ למורכבות המשימה — אל תבזבז זמן על שאלות פשוטות, אבל אל תמהר בהחלטות מורכבות.
+GPT-5.2 מאפשר לך לשלוט במאמץ החישובי דרך הפרומפטים שלך. מאמץ נמוך משמעותו תגובות מהירות עם חיפוש מינימלי. מאמץ גבוה אומר שהמודל משקיע זמן לחשוב לעומק. אתה לומד להתאים מאמץ למורכבות המשימה - אל תבזבז זמן על שאלות פשוטות, אבל גם אל למהר להחליט על דברים מורכבים.
-**מבנה מנהל התנהגות**
+**מבנה מכוון התנהגות**
-שמתי לב לתגי XML בפרומפטים? הם לא רק לקישוט. מודלים עומדים בהוראות מובנות בצורה אמינה יותר מאשר טקסט חופשי. כשאתה צריך תהליכים רב-שלביים או לוגיקה מורכבת, המבנה עוזר למודל לעקוב מהיכן הוא ומה הבא. הדיאגרמה למטה מפרקת פרומפט ממוסגר היטב, ומראה כיצד תגיות כמו ``, ``, ``, ``, ו-`` מארגנות את ההוראות לחלקים ברורים.
+שמעת את תגי ה-XML בפרומפטים? הם לא לקישוט. מודלים פועלים לפי הוראות מובנות בצורה מהימנה יותר מטקסט חופשי. כשצריך תהליכים מרובי שלבים או לוגיקה מורכבת, המבנה עוזר למודל לעקוב היכן הוא ומה הבא. הדיאגרמה למטה מפצלת פרומפט מובנה היטב, ומראה איך תגיות כמו ``, ``, ``, ``, ו-`` מארגנות את ההוראות שלך לסעיפים ברורים.
-
+
-*אנטומיה של פרומפט מובנה היטב עם חלקים ברורים וארגון בסגנון XML*
+*אנטומיה של פרומפט מובנה היטב עם סעיפים ברורים וארגון בסגנון XML*
**איכות דרך הערכה עצמית**
-דפוסי ההשתקפות העצמית פועלים על ידי הפיכת קריטריוני האיכות למפורשים. במקום לקוות שהמודל "יעשה נכון", אתה אומר במדויק מה זה "נכון": לוגיקה נכונה, טיפול בשגיאות, ביצועים, אבטחה. המודל יכול להעריך את הפלט שלו ולשפר אותו. זה ממיר ייצור קוד מגלגל לוטו לתהליך מוגדר.
+תבניות המשתקפות מעצמן פועלות על ידי הפיכת קריטריוני האיכות לברורים. במקום לקוות שהמודל "יעשה נכון", אתה אומר לו בדיוק מהי "נכונות": לוגיקה תקינה, טיפול בשגיאות, ביצועים, אבטחה. המודל יכול אז להעריך את הפלט שלו ולשפר. זה הופך יצירת קוד מהגרלה לתהליך מבוקר.
-**הקשר הוא מוגבל**
+**הקשר הוא סופי**
-שיחות רב-סבביות פועלות על ידי הכללת היסטוריית ההודעות עם כל בקשה. אך יש גבול - לכל מודל יש מספר טוקנים מקסימלי. ככל שהשיחות מתארכות, תזדקק לאסטרטגיות לשמירה על ההקשר הרלוונטי מבלי להגיע לתקרה הזו. מודול זה מראה לך כיצד זיכרון עובד; מאוחר יותר תלמד מתי לסכם, מתי לשכוח ומתי לשלוף.
+שיחות מרובות סבבים פועלות על ידי הכללת היסטוריית ההודעות בכל בקשה. אך יש גבול - לכל מודל יש מספר טוקנים מקסימלי. ככל שהשיחות מתקצרות, אתה תצטרך אסטרטגיות לשמור על הקשר רלוונטי מבלי לחרוג מהמקסימום. המודול הזה מראה לך איך הזיכרון עובד; אחרי זה תלמד מתי לסכם, מתי לשכוח ומתי לשלוף.
## צעדים הבאים
@@ -598,11 +598,11 @@ GPT-5.2 מאפשר לך לשלוט במאמץ המחשובי דרך הפרומפ
---
-**ניווט:** [← קודם: מודול 01 - מבוא](../01-introduction/README.md) | [חזרה לעיקרי](../README.md) | [הבא: מודול 03 - RAG →](../03-rag/README.md)
+**ניווט:** [← קודם: מודול 01 - מבוא](../01-introduction/README.md) | [חזרה לעמוד הראשי](../README.md) | [הבא: מודול 03 - RAG →](../03-rag/README.md)
---
-**הצהרת זכויות**:
-מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). על אף שאנו שואפים לדיוק, יש להביא בחשבון כי תרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. המסמך המקורי בשפתו המקורית ייחשב כמקור הסמכות. עבור מידע קריטי, מומלץ לתרגם על ידי מתרגם מקצועי אנושי. אנו אינם אחראים לכל אי הבנה או פרשנות שגויה הנובעים משימוש בתרגום זה.
+**כתב ויתור**:
+מסמך זה תורגם באמצעות שירות תרגום אוטומטי [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. יש להחשיב את המסמך המקורי בשפתו הטבעית כמקור הסמכות. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי מתרגם אדם. אנו לא אחראים לכל אי-הבנה או פירוש שגוי הנובע מהשימוש בתרגום זה.
\ No newline at end of file
diff --git a/translations/he/03-rag/README.md b/translations/he/03-rag/README.md
index 91a63769d..96954c70a 100644
--- a/translations/he/03-rag/README.md
+++ b/translations/he/03-rag/README.md
@@ -1,144 +1,144 @@
-# מודול 03: RAG (הפקה עם חיפוש משולב)
+# מודול 03: RAG (יצירה מוגברת באמצעות חיפוש)
-## תוכן עניינים
+## תוכן העניינים
-- [סדרת וידאו](../../../03-rag)
-- [מה תלמד](../../../03-rag)
-- [דרישות מוקדמות](../../../03-rag)
-- [הבנת RAG](../../../03-rag)
- - [איזה גישת RAG השיעור הזה משתמש?](../../../03-rag)
-- [איך זה עובד](../../../03-rag)
- - [עיבוד מסמכים](../../../03-rag)
- - [יצירת הטמעות](../../../03-rag)
- - [חיפוש סמנטי](../../../03-rag)
- - [יצירת תשובות](../../../03-rag)
-- [הרץ את היישום](../../../03-rag)
-- [שימוש ביישום](../../../03-rag)
- - [העלה מסמך](../../../03-rag)
- - [שאול שאלות](../../../03-rag)
- - [בדוק הפניות מקור](../../../03-rag)
- - [נסו ניסויים עם שאלות](../../../03-rag)
-- [מונחים עיקריים](../../../03-rag)
- - [אסטרטגיית חתיכות](../../../03-rag)
- - [ציוני דמיון](../../../03-rag)
- - [אחסון בזיכרון](../../../03-rag)
- - [ניהול חלון הקשר](../../../03-rag)
-- [מתי RAG חשוב](../../../03-rag)
-- [השלבים הבאים](../../../03-rag)
+- [סרטון הדרכה](#סרטון-הדרכה)
+- [מה תלמדו](#מה-תלמדו)
+- [דרישות מקדימות](#דרישות-מקדימות)
+- [הבנת RAG](#הבנת-rag)
+ - [איזו גישת RAG מכסה המדריך הזה?](#איזו-גישת-rag-מכסה-המדריך-הזה)
+- [איך זה עובד](#איך-זה-עובד)
+ - [עיבוד מסמכים](#עיבוד-מסמכים)
+ - [יצירת השתקפויות](#יצירת-השתקפויות)
+ - [חיפוש סמנטי](#חיפוש-סמנטי)
+ - [הפקת תשובות](#יצירת-תשובות)
+- [הפעלת האפליקציה](#הפעלת-היישום)
+- [שימוש באפליקציה](#שימוש-ביישום)
+ - [העלאת מסמך](#העלאת-מסמך)
+ - [שאילת שאלות](#שאל-שאלות)
+ - [בדיקת מקורות](#בדוק-הפניות-למקורות)
+ - [ניסויים עם שאלות](#נסה-שאלות-שונות)
+- [מושגים מרכזיים](#מושגים-מרכזיים)
+ - [אסטרטגיית חלוקה לנתחים](#אסטרטגיית-חיתוך-לחתיכות)
+ - [דירוגי דמיון](#ציוני-דמיון)
+ - [אחסון בזיכרון](#אחסון-בזיכרון)
+ - [ניהול חלון הקשר](#ניהול-חלון-הקשר)
+- [מתי RAG חשוב](#מתי-rag-חשוב)
+- [שלבים הבאים](#השלבים-הבאים)
-## סדרת וידאו
+## סרטון הדרכה
-צפו במפגש חי זה שמסביר כיצד להתחיל עם מודול זה:
+צפו במפגש חי זה שמסביר איך להתחיל עם מודול זה:
-
+
-## מה תלמד
+## מה תלמדו
-במודולים הקודמים למדת כיצד לקיים שיחות עם AI ולבנות בפרומפטים באופן אפקטיבי. אך יש הגבלה בסיסית: דגמי שפה יודעים רק את מה שלמדו במהלך האימון. הם לא יכולים לענות על שאלות על מדיניות החברה שלך, תיעוד הפרויקט שלך, או כל מידע שלא אומנו עליו.
+במודולים הקודמים, למדתם איך לנהל שיחות עם AI ולבנות פרומפטים בצורה יעילה. אך יש מגבלה יסודית: מודלים של שפה יודעים רק את מה שלמדו במהלך האימון. הם לא יכולים לענות על שאלות לגבי מדיניות החברה שלכם, תיעוד הפרויקט, או כל מידע שלא אומן עליהם.
-RAG (הפקה עם חיפוש משולב) פותר את הבעיה הזו. במקום לנסות ללמד את המודל את המידע שלך (הדבר יקר ובלתי מעשי), אתה נותן לו את היכולת לחפש בתוך המסמכים שלך. כאשר מישהו שואל שאלה, המערכת מוצאת מידע רלוונטי ומכלילה אותו בפרומפט. המודל אז עונה על סמך ההקשר שנמצא.
+RAG (יצירה מוגברת באמצעות חיפוש) פותר את הבעיה הזו. במקום לנסות ללמד את המודל את המידע שלכם (מה שעלול להיות יקר ובלתי מעשי), אתם נותנים לו את היכולת לחפש בתוך המסמכים שלכם. כשמישהו שואל שאלה, המערכת מוצאת מידע רלוונטי ומכנסת אותו בפרומפט. המודל עונה על סמך הקשר זה.
-תחשוב על RAG כמתן ספריית התייחסות למודל. כשאתה שואל שאלה, המערכת:
+תחשבו על RAG כעל מתן ספריית התייחסות למודל. כשאתם שואלים שאלה, המערכת:
-1. **שאילתת משתמש** - אתה שואל שאלה
-2. **הטמעה** - ממיר את השאלה שלך לווקטור
-3. **חיפוש וקטורי** - מוצא חתיכות מסמך דומות
-4. **הרכבת הקשר** - מוסיף חתיכות רלוונטיות לפרומפט
-5. **תגובה** - דגם שפה גדול מייצר תשובה בהסתמך על ההקשר
+1. **שאלת משתמש** - אתם שואלים שאלה
+2. **השתקפות** - המרה של שאלתכם לווקטור
+3. **חיפוש בווקטורים** - מציאת נתחי מסמכים דומים
+4. **הרכבת הקשר** - הוספת נתחי מידע רלוונטיים לפרומפט
+5. **תגובה** - מודל השפה הגדול מייצר תשובה על בסיס ההקשר
-זה מייסד את התשובות של המודל על הנתונים האמיתיים שלך במקום להסתמך על ידע האימון שלו או על המצאה של תשובות.
+זה מבסס את התגובות של המודל על הנתונים האמיתיים שלכם במקום להסתמך על הידע מהאימון או על יצירת תשובות בדויות.
-## דרישות מוקדמות
+## דרישות מקדימות
-- השלמת [מודול 00 - התחלה מהירה](../00-quick-start/README.md) (לדוגמה של Easy RAG שמוזכר בהמשך במודול זה)
-- השלמת [מודול 01 - מבוא](../01-introduction/README.md) (משאבי Azure OpenAI שהופעלו, כולל דגם הטמעה `text-embedding-3-small`)
-- קובץ `.env` בתיקיית השורש עם אישורי Azure (נוצר ע"י `azd up` במודול 01)
+- השלמת [מודול 01 - מבוא](../01-introduction/README.md) (פריסת משאבי Azure OpenAI, כולל מודל ההשתקפות `text-embedding-3-small`)
+- קובץ `.env` בספריית השורש עם אישורי Azure (נוצר על ידי `azd up` במודול 01)
-> **הערה:** אם לא השלמת את מודול 01, עקוב אחר הוראות ההפעלה שם תחילה. הפקודה `azd up` מפעילה גם את דגם השיחה GPT וגם את דגם ההטמעה שבו משתמש מודול זה.
+> **הערה:** אם לא השלמתם את מודול 01, עקבו קודם אחרי הוראות הפריסה שם. הפקודה `azd up` מפעילה את מודל הצ'אט GPT ואת מודל ההשתקפות המשמש במודול זה.
## הבנת RAG
-הדיאגרמה למטה ממחישה את הרעיון המרכזי: במקום להסתמך רק על נתוני האימון של המודל, RAG מעניק לו ספריית התייחסות למסמכים שלך ליעוץ לפני יצירת כל תשובה.
+הדיאגרמה למטה ממחישה את הרעיון הראשי: במקום להסתמך רק על נתוני האימון של המודל, RAG נותן לו ספריית התייחסות של המסמכים שלכם להתייעצות לפני הפקת כל תשובה.
-
+
-*דיאגרמה זו מראה את ההבדל בין מודל שפה רגיל (שמתבסס על ניחושים מנתוני האימון) לבין מודל RAG משופר (שפונה למסמכים שלך קודם).*
+*דיאגרמה זו מציגה את ההבדל בין מודל שפה רגיל (המנחש על סמך נתוני האימון) לבין מודל שפה מוגבר ב-RAG (המשתמש קודם במסמכי החברה).*
-כך החלקים מתחברים מקצה לקצה. שאלה של משתמש זורמת דרך ארבעה שלבים — הטמעה, חיפוש וקטורי, הרכבת הקשר, ויצירת תשובה — שכל אחד מהם בונה על הקודם:
+כך כל החלקים מתחברים מקצה אל קצה. שאלה של משתמש עוברת ארבעה שלבים — השתקפות, חיפוש וקטורי, הרכבת הקשר, והפקת תשובה — שכל אחד בנוי על הקודם:
-
+
-*דיאגרמה זו מציגה את צינור ה-RAG מקצה לקצה — שאילתת משתמש זורמת דרך הטמעה, חיפוש וקטורי, הרכבת הקשר ויצירת תשובה.*
+*דיאגרמה זו מציגה את תהליך ה-RAG מקצה אל קצה — שאילתא עוברת דרך השתקפות, חיפוש וקטורי, הרכבת הקשר, והפקת תשובה.*
-שאר המודול מפורט כל שלב עם הקוד שאתה יכול להריץ ולשנות.
+שאר המודול מסביר כל שלב בפירוט, עם קוד שניתן להריץ ולשנות.
-### איזה גישת RAG השיעור הזה משתמש?
+### איזו גישת RAG מכסה המדריך הזה?
-LangChain4j מציע שלוש דרכים ליישם RAG, כל אחת עם רמת הפשטה שונה. הדיאגרמה למטה משווה ביניהן זו לצד זו:
+LangChain4j מציע שלוש דרכים ליישום RAG, כל אחת ברמת הפשטה שונה. הדיאגרמה למטה משווה ביניהן זו לצד זו:
-
+
-*דיאגרמה זו משווה בין שלוש גישות RAG של LangChain4j — Easy, Native ו-Advanced — ומציגה את הרכיבים המרכזיים ומתי להשתמש בכל אחת.*
+*דיאגרמה זו משווה את שלוש הגישות ל-RAG ב-LangChain4j — Easy, Native, ו-Advanced — ומציגה את הרכיבים המרכזיים ומתי להשתמש בכל אחת.*
-| גישה | מה היא עושה | תשלום / פשרה |
+| גישה | מה היא עושה | פשרה |
|---|---|---|
-| **Easy RAG** | מחבר הכל אוטומטית דרך `AiServices` ו-`ContentRetriever`. אתה מגדיר ממשק, מצרף מחפש, ו-LangChain4j מנהל את ההטמעה, החיפוש והרכבת הפרומפט מאחורי הקלעים. | קוד מינימלי, אבל אינך רואה מה קורה בכל שלב. |
-| **Native RAG** | אתה קורא ישירות לדגם ההטמעה, מחפש במאגר, בונה את הפרומפט, ומייצר את התשובה בעצמך — שלב מפורש בכל פעם. | יותר קוד, אבל כל שלב נראה וניתן לשינוי. |
-| **Advanced RAG** | משתמש במסגרת `RetrievalAugmentor` עם מעבדים, מנתבים, מסדרים מחדש ומזריקים תוכן להתקנות צינורות הפקה. | גמישות מקסימלית, אבל מורכבות גבוהה מאוד. |
+| **Easy RAG** | מחברת אוטומטית הכל דרך `AiServices` ו-`ContentRetriever`. אתם מגדירים ממשק, מחברים מחפש, ו-LangChain4j מטפל בהשתקפות, חיפוש והרכבת הפרומפט מאחורי הקלעים. | מינימום קוד, אך אינכם רואים מה קורה בכל שלב. |
+| **Native RAG** | אתם קוראים למודל ההשתקפות, מחפשים במאגר, בונים את הפרומפט ומפיקים את התשובה בעצמכם — שלב אחר שלב במפורש. | יותר קוד, אך כל שלב גלוי וניתן לשינוי. |
+| **Advanced RAG** | משתמש במסגרת `RetrievalAugmentor` עם ממירי שאלות, מפנים, מסדרים מחדש ומזריקים תוכן הניתנים להתאמה לצנרת ייצור. | גמישות מקסימלית, אך עם מורכבות גבוהה יותר. |
-**השיעור הזה משתמש בגישת Native.** כל שלב בצינור RAG — הטמעת השאלה, חיפוש במאגר הווקטורי, הרכבת ההקשר ויצירת התשובה — כתוב במפורש ב-[`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). זה מכוון: כחומר לימוד, חשוב יותר שתראה ותבין כל שלב מאשר שהקוד יהיה מקוצר. ברגע שאתה מרגיש נוח עם איך הדברים מתחברים, תוכל להתקדם ל-Easy RAG לפרוטוטייפים או ל-Advanced RAG למערכות ייצור.
+**המדריך הזה משתמש בגישת Native.** כל שלב בצנרת RAG — השתקפות השאלה, חיפוש במאגר הווקטורים, הרכבת ההקשר, והפקת התשובה — כתוב בפירוש ב־[`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). זה מכוון: כמקור ללמידה, חשוב לראות ולהבין כל שלב לעומת קוד מקוצר. כשתרגישו נוח עם רצף השלבים, תוכלו לעבור ל-Easy RAG לפרוטוטייפים מהירים או ל-Advanced RAG למערכות ייצור.
-> **💡 כבר ראית את Easy RAG בפעולה?** מודול [Quick Start](../00-quick-start/README.md) כולל דוגמת שאלות ותשובות על מסמכים ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)) שמשתמשת בגישת Easy RAG — LangChain4j מטפל בהטמעה, חיפוש והרכבת הפרומפט באופן אוטומטי. מודול זה לוקח את הצעד הבא על ידי פירוק הצינור כך שתוכל לראות ולשלוט בכל שלב בעצמך.
+> **💡 סקרנים לגבי Easy RAG?** LangChain4j גם מציע גישת *Easy RAG* בה "AiServices" ו-"ContentRetriever" מטפלות בהשתקפות, חיפוש והרכבת הפרומפט אוטומטית. מודול זה לוקח את הדרך הברורה — פותח את הצנרת הזו לידיכם כדי שתוכלו לראות ולשלוט בכל שלב בעצמכם.
-הדיאגרמה למטה מראה את צינור Easy RAG מהדוגמה של Quick Start. שים לב איך `AiServices` ו-`EmbeddingStoreContentRetriever` מכסים את כל המורכבות — אתה טוען מסמך, מצרף מחפש, ומקבל תשובות. הגישת Native במודול זה מפורקת כל אחת מהשלבים הנסתרים:
+הדיאגרמה למטה מראה את צנרת Easy RAG. שימו לב איך `AiServices` ו-`EmbeddingStoreContentRetriever` מסתירים את כל המורכבות — אתם טוענים מסמך, מחברים מחפש, ומקבלים תשובות. הגישה Native במודול זה מפורקת לשלבים גלויים:
-
+
-*דיאגרמה זו מציגה את צינור Easy RAG מ-`SimpleReaderDemo.java`. השווה זאת עם גישת Native שבמודול זה: Easy RAG מסתיר את ההטמעה, החיפוש והרכבת הפרומפט מאחורי `AiServices` ו-`ContentRetriever` — אתה טוען מסמך, מצרף מחפש, ומקבל תשובות. גישת Native במודול זה מפרקת את הצינור כך שאתה קורא כל שלב (הטמע, חפש, הרכב הקשר, הפק) בעצמך, ומספקת לך נראות ושליטה מלאות.*
+*דיאגרמה זו מציגה את צנרת Easy RAG. השוו זאת לגישת Native שבמודול זה: Easy RAG מסתיר את ההשתקפות, החיפוש והרכבת הפרומפט מאחורי `AiServices` ו-`ContentRetriever` — אתם טוענים מסמך, מחברים מחפש, ומקבלים תשובות. בגישת Native פורקים את הצנרת הזו כך שקוראים כל שלב בעצמכם (השתקפות, חיפוש, הרכבת הקשר, הפקת תשובה), מה שמאפשר שליטה וצפייה מלאה.*
## איך זה עובד
-צינור ה-RAG במודול זה מפורק לארבעה שלבים המופעלים ברצף בכל פעם שמשתמש שואל שאלה. ראשית, מסמך שהועלה **מפורש ומחולק לחתיכות** לחלקים ניתנים לניהול. חתיכות אלה מומרות ל**הטמעות וקטוריות** ומאוחסנות כך שניתן יהיה להשוות אותן מתמטית. כשהשאילתא מגיעה, המערכת מבצעת **חיפוש סמנטי** כדי למצוא את החתיכות הרלוונטיות ביותר, ולבסוף מעבירה אותן להקשר ל-LLM עבור **יצירת תשובה**. הסעיפים הבאים יסבירו כל שלב עם הקוד והדיאגרמות. נתחיל משלב ראשון.
+צנרת ה-RAG במודול זה מתחלקת לארבעה שלבים שמתרחשים ברצף בכל פעם שמשתמש שואל שאלה. קודם, המסמך שהועלה נערך ומחולק ל**נתחים** קטנים ונוחים לעיבוד. נתחי המסמך מומרות ל**השתקפויות וקטוריות** ונאחסנות להשוואה מתמטית. כאשר מתקבלת שאילתא, המערכת מבצעת **חיפוש סמנטי** למציאת הנתחי המסמך הרלוונטיים, ולבסוף מעבירה אותם כהקשר למודל השפה להפקת **התשובה**. הסעיפים הבאים מפרטים כל שלב עם הקוד והדיאגרמות המתאימות. נתחיל עם השלב הראשון.
### עיבוד מסמכים
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-כשאתה מעלה מסמך, המערכת מפרשת אותו (PDF או טקסט פשוט), מצרפת מטא-דאטה כמו שם הקובץ, ואז מחלקת אותו לחתיכות — חלקים קטנים יותר שמתאימים בנוחות לחלון ההקשר של המודל. החתיכות חופפות במעט כך שלא יאבד ההקשר בגבולות.
+כשאתם מעלים מסמך, המערכת מנתחת אותו (PDF או טקסט פשוט), מצרפת מטא-נתונים כמו שם הקובץ, ואז מחלקת אותו לנתחים — חתיכות קטנות שמתאימות בנוחות לחלון ההקשר של המודל. נתחי המסמך חופפים במעט כדי לא לאבד הקשר בגבולות הבלוקים.
```java
// נתח את הקובץ שהועלה ועטוף אותו במסמך LangChain4j
Document document = Document.from(content, metadata);
-// חלק לחתיכות של 300 טוקנים עם חפיפה של 30 טוקנים
+// חלק לחתיכות של 300 תווים עם חפיפה של 30 תווים
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
-הדיאגרמה למטה מראה איך זה עובד בצורה ויזואלית. שים לב כיצד כל חתיכה חולקת כמה טוקנים עם השכנות שלה — חפיפה של 30 טוקנים מבטיחה שלא יאבד הקשר חשוב בין החתיכות:
-
+הדיאגרמה למטה מציגה זאת באופן חזותי. שימו לב שכל נתח חולק טוקנים עם שכניו — חפיפה של 30 טוקנים מבטיחה שאין הקשר מפספס בין הבלוקים:
-*דיאגרמה זו מציגה מסמך שמתחלק לחתיכות של 300 טוקנים עם חפיפה של 30 טוקנים, לשימור ההקשר בגבולות החתיכות.*
+
-> **🤖 נסה עם [GitHub Copilot](https://github.com/features/copilot) Chat:** פתח את [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) ושאל:
-> - "איך LangChain4j מחלק מסמכים לחתיכות ולמה החפיפה חשובה?"
-> - "מה הגודל האופטימלי של חתיכה לסוגי מסמכים שונים ולמה?"
-> - "איך לטפל במסמכים בשפות מרובות או עם עיצוב מיוחד?"
+*דיאגרמה זו מציגה את חלוקת המסמך לנתחים בגודל 300 טוקנים עם חפיפה של 30 טוקנים, לשמירת ההקשר בגבולות הנתחים.*
-### יצירת הטמעות
+> **🤖 נסו עם [GitHub Copilot](https://github.com/features/copilot) Chat:** פתחו את [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) ושאלו:
+> - "איך LangChain4j מחלק מסמכים לנתחים ולמה החפיפה חשובה?"
+> - "מה גודל הנתח האופטימלי לסוגי מסמכים שונים ומדוע?"
+> - "איך מטפלים במסמכים בשפות מרובות או עם עיצוב מיוחד?"
+
+### יצירת השתקפויות
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-כל חתיכה מומרת לייצוג מספרי שנקרא הטמעה — למעשה ממיר משמעות למספרים. דגם ההטמעה אינו "חכם" כמו דגם שיחה; הוא לא יכול לבצע הוראות, להסיק מסקנות או לענות על שאלות. מה שהוא יודע לעשות הוא למפות טקסט לחלל מתמטי שבו משמעויות דומות קרובות זו לזו — "רכב" קרוב ל"אוטומוביל", "מדיניות החזרות" קרוב ל"החזר כספי שלי". תחשוב על דגם שיחה כעל אדם שאפשר לדבר איתו; דגם הטמעה הוא מערכת ארכוב טובה במיוחד.
+כל נתח מומר לייצוג מספרי הנקרא השתקפות — בעצם ממיר משמעות למספרים. מודל ההשתקפות אינו "חכם" כמו מודל צ'אט; הוא לא מבצע הוראות, לא מסיק מסקנות ולא עונה על שאלות. מה שהוא כן עושה הוא למפות טקסט לחלל מתמטי שבו משמעויות דומות מתרכזות קרוב זו לזו — "car" ו-"automobile" קרובים, "מדיניות החזר" קרובה ל-"אחזיר את כספי". חשבו על מודל צ'אט כאדם שאפשר לדבר איתו; מודל השתקפות הוא מערכת מיון מצוינת.
-הדיאגרמה למטה ממחישה את הקונספט — טקסט נכנס, וקטורים מספריים יוצאים, ומשמעויות דומות יוצרות וקטורים קרובים:
+הדיאגרמה למטה ממחישה את הקונספט — טקסט נכנס, וקטורים מספריים יוצאים, ומשמעויות דומות ממוקמות קרוב בחלל הווקטורי:
-
+
-*דיאגרמה זו מראה כיצד דגם הטמעה ממיר טקסט לווקטורים מספריים, כשמשמעויות דומות — כמו "רכב" ו"אוטומוביל" — קרובות אחת לשנייה במרחב הווקטורי.*
+*דיאגרמה זו מראה איך מודל השתקפות ממיר טקסט לווקטורים מספריים, ומניח משמעויות דומות — כמו "car" ו-"automobile" — סמוך זו לזו במרחב הווקטורי.*
```java
@Bean
@@ -154,29 +154,30 @@ EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-דיאגרמת המחלקה למטה מראה את שני זרמי העבודה בצינור RAG ואת מחלקות LangChain4j המיישמות אותם. **זרם ההכנסה** (רץ פעם אחת בעת ההעלאה) מחלק את המסמך, מממש את ההטמעות, ומאחסן אותן באמצעות `.addAll()`. **זרם השאילתא** (רץ בכל פעם שמשתמש שואל) מממש את השאלה, מחפש במאגר דרך `.search()`, ומעביר את ההקשר המתאים לדגם השיחה. שני הזרמים נפגשים בממשק המשותף `EmbeddingStore`:
-
+דיאגרמת המחלקות למטה מראה את שתי זרימות העבודה בצנרת RAG ואת מחלקות LangChain4j שמממשות אותן. **זרם הבליעה** (רץ פעם אחת בעת ההעלאה) מחלק את המסמך, משתקף את הנתחים, ואוגר אותם באמצעות `.addAll()`. **זרם השאילתות** (רץ בכל פעם שמשתמש שואל) משתקף את השאלה, מחפש במאגר באמצעות `.search()`, ומעביר את ההקשר התואם למודל הצ'אט. שתי הזרימות נפגשות בממשק המשותף `EmbeddingStore`:
+
+
-*דיאגרמה זו מראה את שני הזרמים בצינור RAG — הכנסת נתונים ושאילתות — ואיך הם מחוברים דרך EmbeddingStore משותף.*
+*דיאגרמה זו מציגה את שתי הזרימות בצנרת RAG — בליעה ושאילתה — ואיך הן מתחברות דרך ממשק משותף EmbeddingStore.*
-כאשר ההטמעות מאוחסנות, תוכן דומה מצטבר באופן טבעי במרחב הווקטורי. ההדמיה למטה מראה איך מסמכים על נושאים קרובים מסתדרים כנקודות סמוכות, מה שמאפשר את החיפוש הסמנטי:
+לאחר שההשקפויות מאוחסנות, תוכן דומה מתרכז בטבעיות בחלל הווקטורי. הוויזואליזציה למטה מציגה איך מסמכים על נושאים קשורים מסתדרים כנקודות סמוכות, מה שמאפשר חיפוש סמנטי:
-
+
-*הדמיה זו מציגה כיצד מסמכים קשורים מצטברים ביחד במרחב וקטורי תלת-ממדי, עם נושאים כמו מסמכים טכניים, כללי עסקים ושאלות נפוצות שיוצרים קבוצות מובחנות.*
+*וויזואליזציה זו מראה איך מסמכים קרובים בנושא מצטברים יחד במרחב וקטורי תלת-ממדי, עם נושאים כמו תיעוד טכני, כללי עסק ו-FAQs שיוצרים קבוצות מובחנות.*
-כשהמשתמש מחפש, המערכת מבצעת ארבעה שלבים: מטמיעה את המסמכים פעם אחת, מטמיעה את השאילתא בכל חיפוש, משווה את וקטור השאילתא לכל הוקטורים המאוחסנים בעזרת דמיון קוסינוס, ומחזירה את הקטעים עם הציון הגבוה ביותר K. הדיאגרמה למטה מבקשת כל שלב ומחלקות LangChain4j המעורבות:
+כאשר משתמש מחפש, המערכת עוקבת אחרי ארבעה שלבים: היא משתקפת את המסמכים פעם אחת, משתקפת את השאילתה בכל חיפוש, משווה את וקטור השאילתה עם כל הווקטורים המאוחסנים לפי דמיון קוסינוס, ומחזירה את קבצי הנתח המדורגים הכי גבוהים. הדיאגרמה למטה מפרטת כל שלב ואת מחלקות LangChain4j שמעורבות:
-
+
-*דיאגרמה זו מראה את תהליך חיפוש ההטמעה בארבעה שלבים: הטמעת מסמכים, הטמעת השאילתא, השוואת וקטורים עם דמיון קוסינוס, והחזרת התוצאות הטובות ביותר.*
+*דיאגרמה זו מציגה את תהליך החיפוש בהשתקפויות בארבעה שלבים: השתקפות מסמכים, השתקפות השאילתה, השוואת וקטורים בעזרת דמיון קוסינוס, והחזרת תוצאות מובילות.*
### חיפוש סמנטי
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-כשאתה שואל שאלה, גם השאלה שלך הופכת להטמעה. המערכת משווה את הטמעת השאלה שלך עם כל הטמעות חתיכות המסמך. היא מוצאת את החתיכות עם המשמעויות הדומות ביותר - לא רק מילות מפתח תואמות, אלא דמיון סמנטי ממשי.
+כשתשאלו שאלה, גם השאלה הופכת להשקפה. המערכת משווה את השתקפות השאלה שלכם לכל נתחי המסמך המושתקים. היא מוצאת את הנתחי המסמך עם המשמעויות הקרובות ביותר — לא רק חיפוש מילות מפתח, אלא דמיון סמנטי אמיתי.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -196,27 +197,28 @@ for (EmbeddingMatch match : matches) {
}
```
-הדיאגרמה למטה משווה בין חיפוש סמנטי לחיפוש מילות מפתח מסורתי. חיפוש מילות מפתח על "רכב" מפספס חתיכה על "מכוניות ומשאיות", אבל החיפוש הסמנטי מבין שהם משמעותם אותו דבר ומחזיר אותה תוצאה עם ציון גבוה:
-
+הדיאגרמה למטה משווה בין חיפוש סמנטי לחיפוש מילות מפתח מסורתי. חיפוש מילות מפתח על "vehicle" מפספס נתח המסביר "cars and trucks," אבל חיפוש סמנטי מבין שהם משמעותית זהים ומחזיר את זה כתוצאה עם דירוג גבוה:
-*דיאגרמה זו משווה חיפוש מבוסס-מילות מפתח עם חיפוש סמנטי, ומראה איך חיפוש סמנטי מאתר תוכן מושגי קשור גם כשמילות המפתח המדויקות שונות.*
-מתחת למכסה המנוע, דמיון נמדד באמצעות דמיון קוסינוס — בעצם שואל "האם שתי החצים הללו מצביעים לאותו כיוון?" שני מקטעים יכולים להשתמש במילים שונות לחלוטין, אך אם הם פירושם זהה, הווקטורים שלהם מצביעים באותו כיוון ומקבלים ציון קרוב ל-1.0:
+
-
+*דיאגרמה זו משווה בין חיפוש מבוסס מילת מפתח לחיפוש סמנטי, ומראה כיצד חיפוש סמנטי מחזיר תוכן קשור רעיונית גם כשהמילות מפתח אינן זהות בדיוק.*
-*התרשים הזה ממחיש את דמיון הקוסינוס כזוית בין וקטורי ההטמעה — וקטורים המותאמים טוב יותר מקבלים ציון קרוב יותר ל-1.0, מה שמצביע על דמיון סמנטי גבוה יותר.*
+מתחת לפני השטח, הדמיון נמדד באמצעות דמיון קוסינוס — שואל בעצם "האם שני החצים מצביעים על אותו כיוון?" שני נתחי טקסט יכולים להשתמש במילים שונות לחלוטין, אך אם המשמעות זהה וקטוריהם מצביעים באותו כיוון ומקבלים ציון קרוב ל-1.0:
+
+
+*תרשים זה ממחיש את הדמיון הקוסינוסי כזווית בין וקטורי הטמעה — וקטורים המיושרים יותר מקבלים ציון קרוב יותר ל-1.0, מה שמעיד על דמיון סמנטי גבוה יותר.*
> **🤖 נסה עם [GitHub Copilot](https://github.com/features/copilot) Chat:** פתח את [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) ושאל:
> - "איך עובד חיפוש דמיון עם הטמעות ומה קובע את הציון?"
-> - "איזה סף דמיון עליי להשתמש ואיך זה משפיע על התוצאות?"
-> - "איך להתמודד עם מקרים שבהם לא נמצאו מסמכים רלוונטיים?"
+> - "איזה סף דמיון כדאי להשתמש וכיצד זה משפיע על התוצאות?"
+> - "איך מטפלים במקרים שבהם לא נמצאו מסמכים רלוונטיים?"
-### יצירת תשובה
+### יצירת תשובות
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-המקטעים הרלוונטיים ביותר מורכבים לפרומפט מובנה שכולל הנחיות מפורשות, ההקשר שנשלף, ושאלת המשתמש. המודל קורא את המקטעים הספציפיים האלה ועונה בהתבסס על המידע — הוא יכול להשתמש רק במה שנמצא מולו, מה שמונע הזיות.
+החתיכות הרלוונטיות ביותר מורכבות לתוך פרומפט מובנה הכולל הוראות מפורשות, ההקשר שנשלף, ושאלת המשתמש. המודל קורא את החתיכות הספציפיות האלו ועונה על סמך המידע — הוא יכול להשתמש רק במה שיש מולו, מה שמונע הזיות.
```java
String context = matches.stream()
@@ -237,17 +239,17 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-התרשים למטה מראה את התהליך הזה בפעולה — המקטעים עם הציון הגבוה ביותר משלב החיפוש מוזנים לתבנית הפרומפט, ו-`OpenAiOfficialChatModel` מייצר תשובה מבוססת:
+התרשים למטה מראה את ההרכבה בפעולה — החלקים המובילים בציון משלב החיפוש מוזרקים לתבנית הפרומפט, וה־`OpenAiOfficialChatModel` מייצר תשובה מבוססת:
-*התרשים מציג איך המקטעים בעלי הציון הגבוה מורכבים לפרומפט מובנה, ומאפשרים למודל לייצר תשובה מבוססת מתוך הנתונים שלך.*
+*תרשים זה מראה כיצד החתיכות בעלות הציון הגבוה מורכבות לפרומפט מובנה, ומאפשרות למודל לייצר תשובה מבוססת מהנתונים שלך.*
## הפעלת היישום
-**אימות פריסה:**
+**אמת את הפריסה:**
-ודא שקובץ `.env` קיים בתיקיית השורש עם אישורי Azure (נוצר במהלך מודול 01). הפעל זאת מתיקיית המודול (`03-rag/`):
+ודא שקובץ `.env` קיים בספריית השורש עם אישורי Azure (נוצר במהלך יחידת 01). הרץ זאת מתיקיית היחידה (`03-rag/`):
**Bash:**
```bash
@@ -256,46 +258,46 @@ cat ../.env # צריך להציג את AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYME
**PowerShell:**
```powershell
-Get-Content ..\.env # אמור להראות AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+Get-Content ..\.env # צריך להציג את AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**הפעל את היישום:**
-> **הערה:** אם כבר הפעלת את כל היישומים באמצעות `./start-all.sh` מתיקיית השורש (כמתואר במודול 01), מודול זה כבר רץ בפורט 8081. באפשרותך לדלג על פקודות ההפעלה למטה ולעבור ישירות ל-http://localhost:8081.
+> **הערה:** אם התחלת כבר את כל היישומים באמצעות `./start-all.sh` מספריית השורש (כמתואר ביחידה 01), יחידה זו כבר רצה על הפורט 8081. אפשר לדלג על פקודות ההפעלה למטה ולעבור ישירות ל-http://localhost:8081.
**אפשרות 1: שימוש ב-Spring Boot Dashboard (מומלץ למשתמשי VS Code)**
-המיכל לפיתוח כולל את תוסף Spring Boot Dashboard, המספק ממשק חזותי לניהול כל יישומי Spring Boot. ניתן למצוא אותו בסרגל הפעילות בצד השמאלי של VS Code (חפש את סמל Spring Boot).
+מיכל הפיתוח כולל את הרחבת Spring Boot Dashboard, שמספקת ממשק ויזואלי לניהול כל יישומי Spring Boot. ניתן למצוא אותו בסרגל הפעילות בצד שמאל של VS Code (חפש את סמל Spring Boot).
-מסך Spring Boot Dashboard מאפשר:
+מ-Spring Boot Dashboard, ניתן:
- לראות את כל יישומי Spring Boot הזמינים בסביבת העבודה
-- להפעיל/להפסיק יישומים בלחיצה אחת
+- להפעיל/להפסיק יישומים בלחיצה יחידה
- לצפות בלוגים של היישום בזמן אמת
-- לעקוב אחר מצב היישום
+- לנטר את מצב היישום
-פשוט לחץ על כפתור ההפעלה שליד "rag" כדי להפעיל את המודול הזה, או הפעל את כל המודולים יחד.
+פשוט תלחץ על כפתור ההפעלה לצד "rag" כדי להפעיל יחידה זו, או להפעיל את כל היחידות בבת אחת.
-*צילום המסך הזה מציג את Spring Boot Dashboard ב-VS Code, בו ניתן להפעיל, להפסיק ולעקוב אחר יישומים בצורה חזותית.*
+*צילום מסך זה מראה את Spring Boot Dashboard ב-VS Code, שם ניתן להפעיל, לעצור ולנטר יישומים באופן ויזואלי.*
**אפשרות 2: שימוש בסקריפטים של shell**
-הפעל את כל יישומי האינטרנט (מודולים 01-04):
+הפעל את כל יישומי האינטרנט (יחידות 01-04):
**Bash:**
```bash
-cd .. # מהספרייה השורשית
+cd .. # מתיקיית השורש
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # מהספרייה הראשית
+cd .. # מתיקיית השורש
.\start-all.ps1
```
-או הפעל רק את המודול הזה:
+או הפעל רק יחידה זו:
**Bash:**
```bash
@@ -309,9 +311,9 @@ cd 03-rag
.\start.ps1
```
-שני הסקריפטים טוענים אוטומטית משתני סביבה מקובץ `.env` בתיקיית השורש ויבנו את קבצי ה-JAR אם הם אינם קיימים.
+שני הסקריפטים טוענים אוטומטית משתנים מהסביבה מקובץ `.env` בספריית השורש ויבנו את קבצי ה-JAR אם אינם קיימים.
-> **הערה:** אם אתה מעדיף לבנות את כל המודולים ידנית לפני ההפעלה:
+> **הערה:** אם אתה מעדיף לבנות את כל היחידות ידנית לפני ההפעלה:
>
> **Bash:**
> ```bash
@@ -327,111 +329,111 @@ cd 03-rag
פתח את http://localhost:8081 בדפדפן שלך.
-**כדי לעצור:**
+**להפסקת היישום:**
**Bash:**
```bash
-./stop.sh # רק מודול זה
+./stop.sh # רק במודול זה
# או
cd .. && ./stop-all.sh # כל המודולים
```
**PowerShell:**
```powershell
-.\stop.ps1 # מודול זה בלבד
+.\stop.ps1 # רק מודול זה
# או
cd ..; .\stop-all.ps1 # כל המודולים
```
## שימוש ביישום
-היישום מספק ממשק רשת להעלאת מסמכים ושאילת שאלות.
+היישום מספק ממשק אינטרנט להעלאת מסמכים ושאילת שאלות.
-*צילום המסך מציג את ממשק היישום RAG בו ניתן להעלות מסמכים ולשאול שאלות.*
+*צילום מסך זה מראה את ממשק יישום RAG שבו מטעינים מסמכים ושואלים שאלות.*
### העלאת מסמך
-תתחיל בהעלאת מסמך - קבצי TXT מתאימים במיוחד לבדיקה. קיימת דוגמה בשם `sample-document.txt` בתיקייה זו שמכילה מידע על תכונות LangChain4j, יישום RAG, והמלצות טובות - מושלם לבדיקה.
+התחל בהעלאת מסמך - קבצי TXT עובדים הכי טוב לבדיקה. קובץ `sample-document.txt` זמין בתיקייה זו וכולל מידע על תכונות LangChain4j, יישום RAG, ושיטות עבודה מומלצות - מצוין לבדוק עם המערכת.
-המערכת מעבדת את המסמך שלך, מפרקת אותו למקטעים, ויוצרת הטמעות עבור כל מקטע. זה מתבצע אוטומטית בזמן ההעלאה.
+המערכת מעבדת את המסמך, מפרקת אותו לחתיכות, ויוצרת הטמעות לכל חתיכה. זה נעשה אוטומטית בעת ההעלאה.
-### שאילת שאלות
+### שאל שאלות
-כעת שאל שאלות ספציפיות לגבי תוכן המסמך. נסה משהו עובדתי שמצוין במפורש במסמך. המערכת מחפשת מקטעים רלוונטיים, כוללת אותם בפרומפט, ומייצרת תשובה.
+כעת שאל שאלות ספציפיות בנוגע לתוכן המסמך. נסה משהו עובדתי שמפורש במפורש במסמך. המערכת מחפשת חתיכות רלוונטיות, כוללת אותן בפרומפט, ויוצרת תשובה.
-### בדוק הפניות למקור
+### בדוק הפניות למקורות
-שים לב שכל תשובה כוללת הפניות למקורות עם ציוני דמיון. ציונים אלה (מ-0 עד 1) מראים עד כמה כל מקטע היה רלוונטי לשאלתך. ציונים גבוהים משמעותם התאמה טובה יותר. זה מאפשר לך לאמת את התשובה מול החומר המקורי.
+שים לב שכל תשובה כוללת הפניות למקורות עם ציוני דמיון. ציונים אלו (0 עד 1) מראים עד כמה כל חתיכה הייתה רלוונטית לשאלתך. ציונים גבוהים משמעותם התאמות טובות יותר. זה מאפשר לך לאמת את התשובה מול חומר המקור.
-*צילום המסך מציג תוצאות שאילתה עם התשובה שנוצרה, הפניות למקור, וציוני רלוונטיות לכל מקטע שנשלף.*
+*צילום מסך זה מראה תוצאות שאילתה עם התשובה שנוצרה, הפניות למקורות, וציוני רלוונטיות עבור כל חתיכה שהושגה.*
### נסה שאלות שונות
-נסה סוגים שונים של שאלות:
-- עובדות ספציפיות: "מה הנושא העיקרי?"
+נסה סוגי שאלות שונים:
+- עובדות ספציפיות: "מה הנושא המרכזי?"
- השוואות: "מה ההבדל בין X ל-Y?"
- סיכומים: "סכם את הנקודות המרכזיות לגבי Z"
-עיין כיצד ציוני הרלוונטיות משתנים בהתאם לאיכות ההתאמה בין שאלתך לתוכן המסמך.
+צפה כיצד ציוני הרלוונטיות משתנים בהתאם למידת ההתאמה של שאלתך לתוכן המסמך.
## מושגים מרכזיים
-### אסטרטגיית פירוק למקטעים
+### אסטרטגיית חיתוך לחתיכות
-מסמכים מחולקים למקטעים של 300 טוקנים עם חפיפה של 30 טוקנים. איזון זה מבטיח שלכל מקטע יש הקשר מספק להיות משמעותי ועדיין קטן מספיק כדי לאפשר לכלול מקטעים מרובים בפרומפט.
+המסמכים מחולקים לחתיכות של 300 תווים עם חפיפה של 30 תווים. איזון זה מבטיח שלכל חתיכה יש מספיק הקשר כדי להיות משמעותית, תוך שמירה על גודל קטן דיה לכלול מספר חתיכות בפרומפט.
### ציוני דמיון
-כל מקטע שנשלף מגיע עם ציון דמיון בין 0 ל-1 שמצביע על מידת ההתאמה לשאלת המשתמש. התרשים למטה מראה את טווחי הציונים ואיך המערכת משתמשת בהם לסינון התוצאות:
+כל חתיכה שהושגה מגיעה עם ציון דמיון בין 0 ל-1 המציין עד כמה היא תואמת את שאלת המשתמש. התרשים למטה מראה את טווחי הציונים וכיצד המערכת משתמשת בהם לסינון תוצאות:
-*התרשים מראה טווחי ציונים בין 0 ל-1, עם סף מינימלי של 0.5 שמסנן מקטעים לא רלוונטיים.*
+*תרשים המדגים טווחי ציונים מ-0 עד 1, עם סף מינימום של 0.5 שמסנן חתיכות לא רלוונטיות.*
הציונים נעים בין 0 ל-1:
- 0.7-1.0: רלוונטי מאוד, התאמה מדויקת
- 0.5-0.7: רלוונטי, הקשר טוב
-- מתחת ל-0.5: מסונן החוצה, שונה מדי
+- מתחת ל-0.5: מסונן החוצה, לא דומה מספיק
-המערכת מושכת רק מקטעים עם ציון מעל הסף המינימלי כדי להבטיח איכות.
+המערכת מחלצת רק חתיכות מעל לסף המינימלי כדי להבטיח איכות.
-ההטמעות עובדות טוב כשהמשמעות מקובצת בצורה ברורה, אך יש להן נקודות עיוורות. התרשים למטה מדגים מצבי כשל נפוצים — מקטעים גדולים מדי מייצרים וקטורים "מעורפלים", מקטעים קטנים מדי חסרי הקשר, מונחים שאינם חד משמעיים מפנים למספר אשכולות, וחיפושים מדויקים (מספרי זיהוי, מספרי חלקים) אינם עובדים כלל עם הטמעות:
+הטמעות עובדות טוב כאשר המשמעויות מתאגדות נקי, אך יש להן נקודות עיוורות. התרשים למטה מראה מצבי כשל נפוצים — חתיכות גדולות מדי מייצרות וקטורים מטושטשים, חתיכות קטנות מדי חסרות הקשר, מונחים דו משמעותיים מפנים למספר אשכולות, וחיפושים בהתאמה מדויקת (מספרי זיהוי, מספרי חלקים) אינם עובדים עם הטמעות בכלל:
-*התרשים מראה מצבי כשל נפוצים בהטמעות: מקטעים גדולים מדי, קטנים מדי, מונחים לא ברורים שמפנים למספר אשכולות, וחיפושים מדויקים כמו מספרי זיהוי.*
+*תרשים זה מראה מצבי כשל נפוצים בטמעות: חתיכות גדולות מדי, חתיכות קטנות מדי, מונחים דו משמעותיים המפנים לאשכולות מרובים, וחיפושים בהתאמה מדויקת כמו מספרי זיהוי.*
### אחסון בזיכרון
-מודול זה משתמש באחסון בזיכרון לצורך פשטות. כשאתה מחדש את היישום, המסמכים שהועלו יאבדו. מערכות ייצור משתמשות במסדי נתונים וקטוריים מתמידים כגון Qdrant או Azure AI Search.
+יחידה זו משתמשת באחסון בזיכרון לצורך הפשטה. כשאתה מפעיל מחדש את היישום, המסמכים שהועלו אובדים. מערכות פרודקשן משתמשות במסדי נתונים וקטוריים מתמידים כמו Qdrant או Azure AI Search.
### ניהול חלון הקשר
-לכל מודל יש מגבלת חלון הקשר מקסימלית. אי אפשר לכלול כל מקטע ממסמך גדול. המערכת מושכת את חמשת (ברירת מחדל) המקטעים הרלוונטיים ביותר כדי להישאר בתוך הגבולות ולספק מספיק הקשר לתשובות מדויקות.
+לכל מודל יש חלון הקשר מקסימלי. אינך יכול לכלול כל חתיכה ממסמך גדול. המערכת מחלצת את 5 החתיכות הרלוונטיות ביותר (ברירת מחדל) כדי להישאר בגבולות תוך מתן הקשר מספיק לתשובות מדויקות.
## מתי RAG חשוב
-RAG לא תמיד הגישה הנכונה. מדריך ההחלטות למטה עוזר לקבוע מתי RAG מוסיף ערך ומתי גישות פשוטות יותר — כמו לכלול תוכן ישירות בפרומפט או להסתמך על הידע המובנה של המודל — די וישר:
+RAG אינו תמיד הגישה הנכונה. מדריך ההחלטה למטה עוזר לך לקבוע מתי RAG מוסיף ערך מול מתי גישות פשוטות יותר — כמו הכללת תוכן ישירות בפרומפט או הסתמכות על הידע המובנה של המודל — מספיקות:
-*התרשים מציג מדריך החלטה מתי RAG מוסיף ערך ומתי גישות פשוטות מספיקות.*
+*תרשים זה מראה מדריך החלטה מתי RAG מוסיף ערך ומתי גישות פשוטות מספקות.*
-## שלבים הבאים
+## השלבים הבאים
-**מודול הבא:** [04-tools - סוכני AI עם כלים](../04-tools/README.md)
+**היחידה הבאה:** [04-tools - סוכני AI עם כלים](../04-tools/README.md)
---
-**ניווט:** [← קודם: מודול 02 - הנדסת פרומפטים](../02-prompt-engineering/README.md) | [חזרה לעמוד הראשי](../README.md) | [הבא: מודול 04 - כלים →](../04-tools/README.md)
+**ניווט:** [← קודמת: יחידה 02 - הנדסת פרומפט](../02-prompt-engineering/README.md) | [חזרה לעמוד הראשי](../README.md) | [הבא: יחידה 04 - כלים →](../04-tools/README.md)
---
-**כתב ויתור**:
-מסמך זה תורגם באמצעות שירות תרגום בבינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, נא שים לב כי תרגומים אוטומטיים עלולים להכיל שגיאות או אי דיוקים. יש להתייחס למסמך המקורי בשפת המקור כמקור הסמכותי. עבור מידע קריטי מומלץ לתרגום מקצועי על ידי בני אדם. איננו אחראים לכל אי הבנה או פרשנות שגויה הנובעת משימוש בתרגום זה.
+**כתב ויתור**:
+מסמך זה תורגם באמצעות שירות תרגום אוטומטי [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. יש להחשיב את המסמך המקורי בשפתו הטבעית כמקור הסמכות. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי מתרגם אדם. אנו לא אחראים לכל אי-הבנה או פירוש שגוי הנובע מהשימוש בתרגום זה.
\ No newline at end of file
diff --git a/translations/he/04-tools/README.md b/translations/he/04-tools/README.md
index ea720d8df..bf509c294 100644
--- a/translations/he/04-tools/README.md
+++ b/translations/he/04-tools/README.md
@@ -1,84 +1,84 @@
-# מודול 04: סוכני בינה מלאכותית עם כלים
-
-## תוכן העניינים
-
-- [סקירת וידאו](../../../04-tools)
-- [מה תלמדו](../../../04-tools)
-- [דרישות מוקדמות](../../../04-tools)
-- [הבנת סוכני בינה מלאכותית עם כלים](../../../04-tools)
-- [איך פועלת קריאת כלים](../../../04-tools)
- - [הגדרות כלים](../../../04-tools)
- - [קבלת החלטות](../../../04-tools)
- - [הוצאה לפועל](../../../04-tools)
- - [יצירת תגובה](../../../04-tools)
- - [ארכיטקטורה: Spring Boot auto-wiring](../../../04-tools)
-- [שרשור כלים](../../../04-tools)
-- [הרצת האפליקציה](../../../04-tools)
-- [שימוש באפליקציה](../../../04-tools)
- - [נסה שימוש פשוט בכלים](../../../04-tools)
- - [בדוק שרשור כלים](../../../04-tools)
- - [ראה זרימת שיחה](../../../04-tools)
- - [נסו ניסויים עם בקשות שונות](../../../04-tools)
-- [מושגים מרכזיים](../../../04-tools)
- - [תבנית ReAct (הסקה ופעולה)](../../../04-tools)
- - [חשיבות תיאורי הכלים](../../../04-tools)
- - [ניהול סשן](../../../04-tools)
- - [טיפול בשגיאות](../../../04-tools)
-- [כלים זמינים](../../../04-tools)
-- [מתי להשתמש בסוכני מבוססי כלים](../../../04-tools)
-- [כלים מול RAG](../../../04-tools)
-- [צעדים הבאים](../../../04-tools)
-
-## סקירת וידאו
-
-צפו במפגש חי זה שמסביר כיצד להתחיל עם מודול זה:
-
-
-
-## מה תלמדו
-
-עד כה, למדתם כיצד לנהל שיחות עם בינה מלאכותית, לבנות בקשות בצורה יעילה, ולבסס תגובות על המסמכים שלכם. אבל עדיין יש מגבלה בסיסית: מודלי שפה יכולים רק לייצר טקסט. הם לא יכולים לבדוק את מזג האוויר, לבצע חישובים, לשאול מאגרי מידע או לקיים אינטראקציה עם מערכות חיצוניות.
-
-כלים משנים את זה. בכך שהם נותנים למודל גישה לפונקציות שהוא יכול לקרוא להן, אתם הופכים אותו מיצרן טקסט לסוכן שיכול לבצע פעולות. המודל מחליט מתי הוא זקוק לכלי, איזה כלי להשתמש ומה הפרמטרים להעביר. הקוד שלכם מבצע את הפונקציה ומחזיר את התוצאה. המודל משלב את התוצאה הזאת בתגובתו.
+# מודול 04: סוכני AI עם כלים
+
+## תוכן עניינים
+
+- [סיור וידאו](#סיור-וידאו)
+- [מה תלמד](#מה-תלמד)
+- [דרישות מוקדמות](#דרישות-מוקדמות)
+- [הבנת סוכני AI עם כלים](#הבנת-סוכני-ai-עם-כלים)
+- [איך קריאת כלים עובדת](#איך-קריאת-כלים-עובדת)
+ - [הגדרות כלים](#הגדרות-כלים)
+ - [קבלת החלטות](#קבלת-החלטות)
+ - [ביצוע](#ביצוע)
+ - [יצירת תגובה](#יצירת-תגובה)
+ - [ארכיטקטורה: חיבור אוטומטי ב-Spring Boot](#ארכיטקטורה-חיבור-אוטומטי-ב-spring-boot)
+- [שרשור כלים](#שרשור-כלים)
+- [הרצת היישום](#הרצת-היישום)
+- [שימוש ביישום](#שימוש-באפליקציה)
+ - [נסה שימוש פשוט בכלי](#נסה-שימוש-פשוט-בכלי)
+ - [בדוק שרשור כלים](#בדוק-רצף-כלים)
+ - [ראה את זרם השיחה](#ראה-את-verlauf-השיחה)
+ - [התנסה בבקשות שונות](#נסה-בקשות-שונות)
+- [מונחים מרכזיים](#רעיונות-מרכזיים)
+ - [תבנית ReAct (היסק ופעולה)](#תבנית-react-הסקה-ופעולה)
+ - [תיאורים של כלים חשובים](#תיאורי-כלים-חשובים)
+ - [ניהול סשן](#ניהול-מושבים)
+ - [ניהול שגיאות](#טיפול-בשגיאות)
+- [כלים זמינים](#כלים-זמינים)
+- [מתי להשתמש בסוכנים מבוססי כלים](#מתי-להשתמש-בסוכנים-מבוססי-כלים)
+- [כלים מול RAG](#כלים-לעומת-rag)
+- [שלבים הבאים](#השלבים-הבאים)
+
+## סיור וידאו
+
+צפו במפגש חי זה שמסביר איך להתחיל עם מודול זה:
+
+
+
+## מה תלמד
+
+עד כה למדת איך לנהל שיחות עם AI, לארגן פרומפטים ביעילות, ולבסס תגובות על המסמכים שלך. אך יש מגבלה יסודית: מודלים של שפה יכולים רק ליצור טקסט. הם לא יכולים לבדוק את מזג האוויר, לבצע חישובים, לשאול מאגרי מידע או לתקשר עם מערכות חיצוניות.
+
+כלים משנים את זה. על ידי מתן גישה לפונקציות שהמודל יכול לקרוא להן, אתה הופך אותו מגן טקסט לסוכן שיכול לבצע פעולות. המודל מחליט מתי הוא צריך כלי, איזה כלי להשתמש, ואילו פרמטרים להעביר. הקוד שלך מבצע את הפונקציה ומחזיר את התוצאה. המודל משלב את התוצאה הזאת לתגובה שלו.
## דרישות מוקדמות
- השלמת [מודול 01 - מבוא](../01-introduction/README.md) (משאבי Azure OpenAI הוגדרו)
-- מומלץ שהמודולים הקודמים התרחשו (מודול זה מתייחס ל[מושגי RAG ממודול 03](../03-rag/README.md) בהשוואה בין כלים ל-RAG)
-- קובץ `.env` בספריית השורש עם קרדנציאליים של Azure (נוצר על ידי `azd up` במודול 01)
+- מומלץ להשלים מודולים קודמים (המודול מתייחס ל[מושגי RAG ממודול 03](../03-rag/README.md) בהשוואה בין כלים ל-RAG)
+- קובץ `.env` בתיקיית השורש עם אישורי Azure (נוצר על ידי `azd up` במודול 01)
-> **הערה:** אם לא השלמתם את מודול 01, עקבו תחילה אחר הוראות הפריסה שם.
+> **הערה:** אם לא השלמת את מודול 01, עקוב תחילה אחר הוראות הפריסה שם.
-## הבנת סוכני בינה מלאכותית עם כלים
+## הבנת סוכני AI עם כלים
-> **📝 הערה:** המונח "סוכנים" במודול זה מתייחס לעוזרי בינה מלאכותית המורחבים ביכולת קריאת כלים. זה שונה מתבניות **Agentic AI** (סוכנים אוטונומיים עם תכנון, זיכרון והסקת מסקנות רב-שלבית) שנסקור ב[מודול 05: MCP](../05-mcp/README.md).
+> **📝 הערה:** המונח "סוכנים" במודול זה מתייחס לעוזרי AI המשופרים עם יכולות קריאת כלים. זה שונה מתבניות **Agentic AI** (סוכנים אוטונומיים עם תכנון, זיכרון והיסק רב-שלבי) שנכסה ב-[מודול 05: MCP](../05-mcp/README.md).
-בלי כלים, מודל שפה יכול רק לייצר טקסט מתוך נתוני האימון שלו. שאל אותו מה מזג האוויר הנוכחי, והוא יצטרך לנחש. תן לו כלים, והוא יכול לקרוא ל-API של מזג האוויר, לבצע חישובים או לשאול מאגר מידע — ואז לשזור את התוצאות האמיתיות הללו בתגובתו.
+בלי כלים, מודל שפה יכול רק ליצור טקסט מהנתונים שבהם הוא אומן. שאלה אותו לגבי מזג האוויר הנוכחי, והוא צריך לנחש. תן לו כלים, והוא יכול לקרוא ל-API של מזג אוויר, לעשות חישובים או לשאול מסד נתונים — ואז לשלב את התוצאות האמיתיות הללו בתגובתו.
-*בלי כלים המודל רק מנחש — עם כלים הוא יכול לקרוא APIs, לבצע חישובים ולהחזיר נתונים בזמן אמת.*
+*בלי כלים המודל יכול רק לנחש — עם כלים הוא יכול לקרוא ל-APIs, להריץ חישובים ולהחזיר נתונים בזמן אמת.*
-סוכן בינה מלאכותית עם כלים פועל לפי תבנית **ReAct (הסקה ופעולה)**. המודל לא רק מגיב — הוא חושב על מה שהוא צריך, פועל על ידי קריאת כלי, מתבונן בתוצאה, ואז מחליט אם לפעול שוב או לספק את התשובה הסופית:
+סוכן AI עם כלים פועל לפי תבנית **Reasoning and Acting (ReAct)**. המודל לא רק מגיב — הוא חושב על מה שהוא צריך, פועל על ידי קריאת כלי, מתבונן בתוצאה, ואז מחליט אם לפעול שוב או לספק את התשובה הסופית:
-1. **הסקה** — הסוכן מנתח את שאלת המשתמש וקובע אילו מידע הוא צריך
-2. **פעולה** — הסוכן בוחר את הכלי הנכון, מייצר את הפרמטרים המתאימים, וקורא לו
-3. **התבוננות** — הסוכן מקבל את הפלט מהכלי ומעריך את התוצאה
-4. **חזרה או תגובה** — אם נדרשת עוד מידע, הסוכן חוזר על המחזור; אחרת, מחבר תשובה בשפה טבעית
+1. **היסק** — הסוכן מנתח את שאלת המשתמש ומחליט איזה מידע הוא צריך
+2. **פעולה** — הסוכן בוחר את הכלי הנכון, מייצר את הפרמטרים הנכונים, וקורא לו
+3. **התבוננות** — הסוכן מקבל את הפלט של הכלי ומעריך את התוצאה
+4. **חזרה או תגובה** — אם יש צורך במידע נוסף, הסוכן חוזר; אחרת, הוא מחבר תשובה בשפה טבעית
-*מחזור ReAct — הסוכן חושב מה לעשות, פועל על ידי קריאת כלי, מתבונן בתוצאה וחוזר עד שהוא יכול לספק את התשובה הסופית.*
+*מחזור ReAct — הסוכן הוסק מה לעשות, פועל על ידי קריאת כלי, מתבונן בתוצאה, וחוזר עד שהוא יכול לספק את התשובה הסופית.*
-זה מתרחש אוטומטית. אתם מגדירים את הכלים וההגדרות שלהם. המודל אחראי לקבלת ההחלטות מתי ואיך להשתמש בהם.
+זה קורה אוטומטית. אתה מגדיר את הכלים ואת תיאורי הכלים שלהם. המודל מטפל בקבלת ההחלטות מתי ואיך להשתמש בהם.
-## איך פועלת קריאת כלים
+## איך קריאת כלים עובדת
### הגדרות כלים
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-אתם מגדירים פונקציות עם תיאורים ברורים ומפרטי פרמטרים. המודל רואה את התיאורים האלה בבקשת המערכת שלו ומבין מה כל כלי עושה.
+אתה מגדיר פונקציות עם תיאורים ברורים ומפרט של פרמטרים. המודל רואה את התיאורים הללו בפרומפט של המערכת ומבין מה כל כלי עושה.
```java
@Component
@@ -97,134 +97,134 @@ public interface Assistant {
}
// העוזר מחובר אוטומטית על ידי Spring Boot עם:
-// - bean של ChatModel
+// - אובייקט ChatModel
// - כל שיטות @Tool מתוך מחלקות @Component
-// - ChatMemoryProvider לניהול מושבים
+// - ספק זיכרון הצ'אט לניהול מושבים
```
-הדיאגרמה למטה מפורקת כל אנוטציה ומראה כיצד כל חלק עוזר לבינה להבין מתי לקרוא לכלי ואילו ארגומנטים להעביר:
+הדיאגרמה למטה מפרקת כל אנוטציה ומראה איך כל חלק מסייע ל-AI להבין מתי לקרוא לכלי ואילו ארגומנטים להעביר:
-
+
-*מבנה של הגדרת כלי — @Tool אומר לבינה מתי להשתמש בו, @P מתאר כל פרמטר, ו-@AiService מחבר את הכל יחד בפתיחה.*
+*אנטומיה של הגדרת כלי — @Tool אומר ל-AI מתי להשתמש בו, @P מתאר כל פרמטר, ו-@AiService מחבר הכל יחד בהפעלה.*
-> **🤖 נסה עם [GitHub Copilot](https://github.com/features/copilot) צ׳אט:** פתח את [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) ואז שאל:
-> - "איך אשילב API אמיתי של מזג אוויר כמו OpenWeatherMap במקום נתוני מדומה?"
-> - "מה הופך תיאור כלי לטוב שעוזר לבינה להשתמש בו נכון?"
-> - "איך מטפלים בשגיאות API והגבלות קצב בהטמעת כלים?"
+> **🤖 נסה עם [GitHub Copilot](https://github.com/features/copilot) Chat:** פתח את [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) ושאל:
+> - "איך הייתי משלב API אמיתי למזג אוויר כמו OpenWeatherMap במקום נתונים מדומים?"
+> - "מה הופך תיאור כלי לטוב שמסייע ל-AI להשתמש בו נכון?"
+> - "איך מטפלים בשגיאות API ומגבלות קצב ביישום כלים?"
### קבלת החלטות
-כשמשתמש שואל "מה מזג האוויר בסיאטל?", המודל לא בוחר כלי באקראי. הוא משווה את כוונת המשתמש לכל תיאור כלי שיש לו גישה אליו, נותן ניקוד לכל אחד על רלוונטיות, ובוחר את ההתאמה הטובה ביותר. לאחר מכן הוא מייצר קריאת פונקציה מובנית עם הפרמטרים הנכונים — במקרה הזה, מגדיר `location` ל-"Seattle".
+כאשר משתמש שואל "מה מזג האוויר בסיאטל?", המודל לא בוחר כלי באקראי. הוא משווה את הכוונה של המשתמש מול כל תיאור כלי שברשותו, מדרג כל אחד לפי רלוונטיות, ובוחר את ההתאמה הטובה ביותר. לאחר מכן הוא מייצר קריאת פונקציה מובנית עם הפרמטרים הנכונים — במקרה זה, מגדיר את `location` ל- `"Seattle"`.
-אם אף כלי לא מתאים לבקשת המשתמש, המודל חוזר לענות מתוך הידע שלו. אם מספר כלים מתאימים, הוא בוחר את הספציפי ביותר.
+אם אין כלי שמתאים לבקשת המשתמש, המודל עובר לענות מתוך הידע שלו. אם יש התאמה למספר כלים, הוא בוחר את הספציפי ביותר.
-
+
-*המודל מעריך כל כלי זמין מול כוונת המשתמש ובוחר את ההתאמה הטובה ביותר — לכן כתיבת תיאורי כלים ברורים ומפורטים חשובה.*
+*המודל מעריך כל כלי זמין מול כוונת המשתמש ובוחר את ההתאמה הטובה ביותר — לכן חשוב לכתוב תיאורי כלים ברורים וספציפיים.*
-### הוצאה לפועל
+### ביצוע
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-Spring Boot מחבר אוטומטית את הממשק ההכרזתי `@AiService` עם כל הכלים הרשומים, ו-LangChain4j מבצע את קריאות הכלים באופן אוטומטי. מאחורי הקלעים, זרימת קריאת הכלי עוברת שישה שלבים — משאלת משתמש בשפה טבעית ועד תשובה בשפה טבעית:
+Spring Boot מחבר אוטומטית את הממשק ההצהרתי `@AiService` עם כל הכלים הרשומים, ו-LangChain4j מבצע קריאות כלי אוטומטית. מאחורי הקלעים, זרם קריאת כלי שלם עובר שישה שלבים — מהשאלה בשפה טבעית של המשתמש ועד התשובה בשפה טבעית:
-
+
-*זרימה מקצה לקצה — המשתמש שואל שאלה, המודל בוחר כלי, LangChain4j מריץ אותו, והמודל שוזר את התוצאה לתגובה טבעית.*
+*הזרימה מקצה לקצה — המשתמש שואל שאלה, המודל בוחר כלי, LangChain4j מבצע אותו, והמודל משלב את התוצאה בתגובה טבעית.*
-אם הרצתם את [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) במודול 00, ראיתם כבר את התבנית הזאת — הכלים `Calculator` קראו באותה הדרך. דיאגרמת הרצף שלמטה מראה בדיוק מה קרה מתחת לפני השטח במהלך ההדגמה ההיא:
+מאחורי הקלעים, `AiServices` מריץ את אותו לולאת קריאת כלים לכל כלי — כאן מיוצג על ידי `Calculator` פשוט. דיאגרמת הרצף למטה מראה בדיוק מה קורה מתחת לפני השטח:
-*לולאת קריאת הכלים מהדמו Quick Start — `AiServices` שולח את ההודעה שלך ואת סכמות הכלים ל-LLM, ה-LLM מגיב עם קריאת פונקציה כמו `add(42, 58)`, LangChain4j מבצע את המתודה `Calculator` מונעית, ומחזיר את התוצאה לתשובה הסופית.*
+*לולאת קריאת כלי — `AiServices` שולח את ההודעה שלך ואת סכימות הכלים ל-LLM, ה-LLM מחזיר קריאת פונקציה כמו `add(42, 58)`, LangChain4j מבצע את המתודה של `Calculator` באופן מקומי, ומחזיר את התוצאה לתשובה הסופית.*
-> **🤖 נסה עם [GitHub Copilot](https://github.com/features/copilot) צ׳אט:** פתח את [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) ואז שאל:
-> - "איך תבנית ReAct עובדת ולמה היא יעילה לסוכני בינה מלאכותית?"
+> **🤖 נסה עם [GitHub Copilot](https://github.com/features/copilot) Chat:** פתח את [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) ושאל:
+> - "איך תבנית ReAct עובדת ולמה היא יעילה לסוכני AI?"
> - "איך הסוכן מחליט איזה כלי להשתמש ובאיזה סדר?"
-> - "מה קורה אם ביצוע של כלי נכשל - איך כדאי לטפל בשגיאות בצורה חזקה?"
+> - "מה קורה אם ביצוע כלי נכשל - איך לטפל בשגיאות בצורה אמינה?"
### יצירת תגובה
-המודל מקבל את נתוני מזג האוויר ומעצב אותם לתגובה בשפה טבעית למשתמש.
+המודל מקבל את נתוני מזג האוויר ומעצב אותם לתגובה בשפה טבעית עבור המשתמש.
-### ארכיטקטורה: Spring Boot auto-wiring
+### ארכיטקטורה: חיבור אוטומטי ב-Spring Boot
-מודול זה משתמש באינטגרציה של LangChain4j עם Spring Boot באמצעות ממשקי `@AiService` הכרזתיים. בזמן הפתיחה Spring Boot מגלה כל `@Component` המכיל מתודות עם `@Tool`, את bean ה-`ChatModel` שלך ו-`ChatMemoryProvider` — ואז מחבר את כולם לממשק `Assistant` יחיד ללא צורך בקוד נוסף.
+מודול זה משתמש באינטגרציה של LangChain4j עם Spring Boot באמצעות ממשקי `@AiService` הצהרתיים. בהפעלה Spring Boot מוצא כל `@Component` שמכיל מתודות עם `@Tool`, את bean של ה-`ChatModel`, ו-`ChatMemoryProvider` — ואז מחבר אותם כולם לממשק `Assistant` יחיד ללא קוד boilerplate.
-
+
-*ממשק @AiService מחבר יחד את ה-ChatModel, רכיבי הכלים וספק הזיכרון — Spring Boot מטפל בכל החיבור אוטומטית.*
+*ממשק @AiService מקשר יחד את ה-ChatModel, רכיבי הכלים, וספק הזיכרון — Spring Boot מטפל בחיבור כולו אוטומטית.*
-הנה מחזור חיים מלא כתרשים רצף — מבקשת HTTP דרך הבקר, השירות והפרוקסי המחובר אוטומטית, כל הדרך להוצאה לפועל של הכלי וחזרה:
+הנה מחזור החיים המלא של הבקשה כדיאגרמת רצף — מהבקשה HTTP דרך הבקר, השירות, והפרוקסי המחובר אוטומטית, ועד לביצוע הכלי והחזרה:
-
+
-*מחזור החיים המלא של בקשת Spring Boot — בקשת HTTP זורמת דרך הבקר והשירות לפרוקסי Assistant המטפל ב-LLM ובקריאות הכלים אוטומטית.*
+*מחזור החיים המלא של בקשת Spring Boot — בקשת HTTP זורמת דרך הבקר והשירות לפרוקסי Assistant המחובר אוטומטית, שמנהל את ה-LLM וקריאות הכלים באופן אוטומטי.*
-יתרונות מרכזיים בגישה זו:
+יתרונות מרכזיים של גישה זו:
-- **Spring Boot auto-wiring** — ChatModel והכלים מוזרקים אוטומטית
+- **חיבור אוטומטי ב-Spring Boot** — הזרקת ChatModel וכלים אוטומטית
- **תבנית @MemoryId** — ניהול זיכרון מבוסס סשן אוטומטי
-- **מופע יחיד** — Assistant נוצר פעם אחת ומשומש מחדש לביצועים טובים יותר
-- **הוצאה לפועל בטוחה טיפוסית** — מתודות Java נקראות ישירות עם המרה טיפוסית
-- **ניהול סבב מסובב** — מטפל בשרשור כלים אוטומטית
-- **ללא קוד מובנה מיותר** — ללא קריאות ידניות ל-`AiServices.builder()` או HashMap זיכרון
+- **מופע יחיד** — Assistant נוצר פעם אחת ומשמש שוב לביצועים טובים יותר
+- **ביצוע בטוח טיפוסית** — שיטות Java נקראות ישירות עם המרת טיפוסים
+- **אורקסטרציה מרובת סבבים** — מטפלת בשרשור כלים אוטומטית
+- **ללא boilerplate** — אין צורך לקריאות ידניות ל-AiServices.builder() או HashMap זיכרון
-גישות חלופיות (עם גלגול `AiServices.builder()` ידני) דורשות יותר קוד ומפספסות את יתרונות האינטגרציה עם Spring Boot.
+גישות חלופיות (קריאות ידניות ל-AiServices.builder()) דורשות יותר קוד וחסרות את יתרונות האינטגרציה של Spring Boot.
## שרשור כלים
-**שרשור כלים** — הכוח האמיתי של סוכני כלים מתבצע כאשר שאלה אחת דורשת מספר כלים. שאלו "מה מזג האוויר בסיאטל בפרנהייט?" והסוכן יקשר אוטומטית שני כלים: קודם הוא יקרא ל-`getCurrentWeather` לקבלת הטמפרטורה בצלזיוס, ואז יעביר את הערך ל-`celsiusToFahrenheit` להמרה — הכל בסיבוב שיחה אחד.
+**שרשור כלים** — הכוח האמיתי של סוכנים מבוססי כלים מתגלה כאשר שאלה בודדת דורשת כמה כלים. שאל "מה מזג האוויר בסיאטל בפארנהייט?" והסוכן אוטומטית בשרשרת של שני כלים: קודם הוא קורא ל-`getCurrentWeather` לקבלת הטמפרטורה בצלזיוס, ואז מעביר את הערך ל-`celsiusToFahrenheit` להמרה — כל זאת בסבב שיחה יחיד.
-*שרשור כלים בפעולה — הסוכן קורא ראשית ל-getCurrentWeather, אחר כך מחבר את התוצאה בצלזיוס ל-celsiusToFahrenheit, ומספק תשובה משולבת.*
+*שרשור כלים בפעולה — הסוכן קורא קודם את getCurrentWeather, ואז מעביר את התוצאה בצלזיוס ל-celsiusToFahrenheit, ומספק תשובה משולבת.*
-**כישלונות מכוונים** — בקשו מזג אוויר לעיר שאינה קיימת בנתוני המדומה. הכלי מחזיר הודעת שגיאה, והבינה מסבירה שהיא לא יכולה לעזור במקום לקרוס. כלים נכשלים בבטחה. הדיאגרמה למטה משווה בין שתי הגישות — עם טיפול שגיאות נכון הסוכן תופס את החריגה ומגיב באמצעות הסבר מועיל, בעוד ללא טיפול האפליקציה כולה קורסת:
+**כשלונות אלגנטיים** — שאל לגבי מזג האוויר בעיר שאינה בנתונים המדומים. הכלי מחזיר הודעת שגיאה, וה-AI מסביר שהוא לא יכול לעזור במקום לקרוס. כלים נכשלים בצורה בטוחה. הדיאגרמה הבאה משווה בין שתי הגישות — עם טיפול שגיאות נכון הסוכן תופס את החריגה ומגיב בעזרה, ואילו בלי זה היישום כולו קורס:
-*כאשר כלי נכשל, הסוכן תופס את השגיאה ומגיב בהסבר מועיל במקום לקרוס.*
+*כאשר כלי נכשל, הסוכן תופס את השגיאה ומגיב עם הסבר מועיל במקום לקרוס.*
-זה מתרחש בסיבוב שיחה יחיד. הסוכן מארגן את קריאות הכלים הרבות אוטונומית.
+זה קורה בסבב שיחה אחד. הסוכן מנהל ביצוע של מספר קריאות כלים באופן עצמאי.
-## הרצת האפליקציה
+## הרצת היישום
-**אימות הפריסה:**
+**וודא פריסה:**
-ודאו שקובץ `.env` קיים בספריית השורש עם קרדנציאליים של Azure (נוצר במהלך מודול 01). הריצו זאת מספריית המודול (`04-tools/`):
+וודא שקובץ `.env` קיים בתיקיית השורש עם האישורים של Azure (נוצר במהלך מודול 01). הרץ זאת מתיקיית המודול (`04-tools/`):
-**Bash:**
+**בבש:**
```bash
-cat ../.env # אמור להציג AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+cat ../.env # צריך להציג את AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**PowerShell:**
```powershell
-Get-Content ..\.env # צריך להציג את AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+Get-Content ..\.env # אמור להציג את AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**הפעלת האפליקציה:**
+**הפעל את היישום:**
-> **הערה:** אם כבר התחלתם את כל האפליקציות באמצעות `./start-all.sh` מספריית השורש (כמתואר במודול 01), מודול זה כבר פועל בנמל 8084. ניתן לדלג על פקודות ההפעלה למטה וללכת ישירות ל- http://localhost:8084.
+> **הערה:** אם כבר התחלת את כל היישומים באמצעות `./start-all.sh` מתיקיית השורש (כמתואר במודול 01), מודול זה כבר רץ על פורט 8084. ניתן לדלג על פקודות ההפעלה למטה ולעבור ישירות ל-http://localhost:8084.
**אפשרות 1: שימוש ב-Spring Boot Dashboard (מומלץ למשתמשי VS Code)**
-מיכל הפיתוח כולל את תוסף Spring Boot Dashboard, שמספק ממשק חזותי לניהול כל אפליקציות Spring Boot. ניתן למצוא אותו בסרגל הפעולות משמאל ב-VS Code (חפשו את סמל Spring Boot).
+מיכל הפיתוח כולל את התוסף Spring Boot Dashboard, המציע ממשק ויזואלי לניהול כל יישומי Spring Boot. ניתן למצוא אותו בסרגל הפעילויות בצד שמאל של VS Code (חפש את הסמל של Spring Boot).
-מה-Spring Boot Dashboard תוכלו:
-- לראות את כל אפליקציות Spring Boot הזמינות בסביבת העבודה
-- להפעיל/לכבות אפליקציות בלחיצה אחת
-- לצפות ביומני האפליקציה בזמן אמת
-- לנטר את מצב האפליקציה
-פשוט לחצו על כפתור ההפעלה לצד "tools" כדי להתחיל את המודול הזה, או להפעיל את כל המודולים בבת אחת.
+מ-Spring Boot Dashboard, ניתן:
+- לראות את כל יישומי Spring Boot זמינים בסביבת העבודה
+- להפעיל/להפסיק יישומים בלחיצה אחת
+- לצפות ביומני היישומים בזמן אמת
+- לנטר את מצב היישומים
-ככה נראה לוח הבקרה של Spring Boot ב-VS Code:
+פשוט לחץ על כפתור ההפעלה ליד "tools" כדי להפעיל את המודול הזה, או הפעל את כל המודולים בבת אחת.
-
+כך נראה Spring Boot Dashboard ב-VS Code:
+
-*לוח הבקרה של Spring Boot ב-VS Code — הפעלה, עצירה ומעקב אחר כל המודולים במקום אחד*
+*לוח הבקרה של Spring Boot ב-VS Code — הפעלה, עצירה וניטור של כל המודולים במקום אחד*
**אפשרות 2: שימוש בסקריפטים של shell**
@@ -238,11 +238,11 @@ cd .. # מתיקיית השורש
**PowerShell:**
```powershell
-cd .. # מתיקיית השורש
+cd .. # מהספרייה השורשית
.\start-all.ps1
```
-או להפעיל רק את המודול הזה:
+או הפעל רק את המודול הזה:
**Bash:**
```bash
@@ -256,9 +256,9 @@ cd 04-tools
.\start.ps1
```
-שני הסקריפטים טוענים אוטומטית משתני סביבה מקובץ `.env` בשורש ויבנו את קבצי ה-JAR אם הם לא קיימים.
+שני הסקריפטים טוענים אוטומטית משתני סביבה מקובץ `.env` השורש ויבנו את קבצי ה-JAR אם הם אינם קיימים.
-> **הערה:** אם אתם מעדיפים לבנות את כל המודולים באופן ידני לפני ההפעלה:
+> **הערה:** אם אתה מעדיף לבנות את כל המודולים ידנית לפני ההפעלה:
>
> **Bash:**
> ```bash
@@ -272,13 +272,13 @@ cd 04-tools
> mvn clean package -DskipTests
> ```
-פתחו את http://localhost:8084 בדפדפן שלכם.
+פתח את http://localhost:8084 בדפדפן שלך.
-**כדי לעצור:**
+**לעצירה:**
**Bash:**
```bash
-./stop.sh # רק במודול זה
+./stop.sh # מודול זה בלבד
# או
cd .. && ./stop-all.sh # כל המודולים
```
@@ -292,96 +292,96 @@ cd ..; .\stop-all.ps1 # כל המודולים
## שימוש באפליקציה
-האפליקציה מספקת ממשק רשת שבו תוכלו לתקשר עם סוכן AI שיש לו גישה לכלי מזג אוויר והמרת טמפרטורות. כך נראה הממשק — כולל דוגמאות התחלה מהירה ולוח שיחה לשליחת בקשות:
+האפליקציה מספקת ממשק ווב בו ניתן לתקשר עם סוכן AI שיש לו גישה לכלי מזג אוויר והמרת טמפרטורה. כך נראה הממשק — כולל דוגמאות התחלה מהירה ופאנל שיחה לשליחת בקשות:
-
+
-*ממשק כלי סוכן AI - דוגמאות מהירות וממשק שיחה לאינטראקציה עם הכלים*
+*ממשק כלי סוכן AI - דוגמאות מהירות וממשק שיחה לאינטראקציה עם כלים*
-### נסו שימוש פשוט בכלי
+### נסה שימוש פשוט בכלי
-התחילו עם בקשה פשוטה: "המר 100 מעלות פרנהייט לסלזיוס". הסוכן מזהה שהוא צריך להשתמש בכלי המרת הטמפרטורה, קורא לו עם הפרמטרים המתאימים, ומחזיר את התוצאה. שימו לב כמה זה טבעי - לא ציינתם איזה כלי להשתמש או איך לקרוא לו.
+התחל עם בקשה פשוטה: "המר 100 מעלות פרנהייט לצלזיוס". הסוכן מזהה שהוא צריך את כלי המרת הטמפרטורה, מפעיל אותו עם הפרמטרים הנכונים ומחזיר את התוצאה. שים לב כמה זה טבעי - לא ציינת איזה כלי להשתמש או איך להפעיל אותו.
-### בדקו שרשור כלים
+### בדוק רצף כלים
-עכשיו נסו משהו מורכב יותר: "מה מזג האוויר בסיאטל והמר את זה לפרנהייט?" צפו בסוכן מבצע זאת בשלבים. הוא קודם מקבל את מזג האוויר (שמחזיר בסלזיוס), מזהה צורך להמיר לפרנהייט, קורא לכלי ההמרה, ומשלב את שתי התוצאות לתגובה אחת.
+עכשיו נסה משהו מורכב יותר: "מה מזג האוויר בסיאטל והמר את זה לפרנהייט?" צפה איך הסוכן עובד על זה בשלבים. הוא מקבל קודם את מזג האוויר (שמחזיר צלזיוס), מזהה שהוא צריך להמיר לפרנהייט, מפעיל את כלי ההמרה ומשלב את שתי התוצאות בתגובה אחת.
-### ראו רצף השיחה
+### ראה את Verlauf השיחה
-ממשק השיחה שומר היסטוריית שיחה, ומאפשר לכם לנהל אינטראקציות מרובות סבבים. תוכלו לראות את כל השאלות והתגובות הקודמות, מה שמקל לעקוב אחר השיחה ולהבין איך הסוכן בונה הקשר לאורך החלפות מרובות.
+ממשק השיחה שומר היסטוריית שיחה, ומאפשר לך לקיים אינטראקציות מרובות סבבים. תוכל לראות את כל השאלות והתשובות הקודמות, מה שמקל לעקוב אחרי השיחה ולהבין איך הסוכן בונה הקשר במהלך החלפות מרובות.
-
+
-*שיחה מרובת סבבים המראה המרות פשוטות, בדיקות מזג אוויר ושרשור כלים*
+*שיחת מרובות סבבים המציגה המרות פשוטות, בדיקות מזג אוויר ורצף כלים*
-### נסו בקשות שונות
+### נסה בקשות שונות
-נסו שילובים שונים:
+נסה שילובים שונים:
- בדיקות מזג אוויר: "מה מזג האוויר בטוקיו?"
- המרות טמפרטורה: "כמה זה 25°C בקלווין?"
- שאילתות משולבות: "בדוק את מזג האוויר בפריז ואמר לי אם מעל 20°C"
-שימו לב איך הסוכן מפרש שפת טבעית וממפה אותה לקריאות כלים מתאימות.
+שימו לב איך הסוכן מפרש שפה טבעית וממפה לכך קריאות כלים מתאימות.
## רעיונות מרכזיים
-### דפוס ReAct (היסק ופעולה)
+### תבנית ReAct (הסקה ופעולה)
-הסוכן מתחלף בין היסק (החלטה מה לעשות) ופעולה (שימוש בכלים). דפוס זה מאפשר פתרון בעיות עצמאי יותר מאשר תגובה פשוטה להוראות.
+הסוכן מתחלף בין הסקה (החלטה מה לעשות) לבין פעולה (שימוש בכלים). תבנית זו מאפשרת פתרון בעיות עצמאי במקום רק תגובה להוראות.
### תיאורי כלים חשובים
-איכות התיאורים של הכלים משפיעה ישירות על איך שהסוכן משתמש בהם. תיאורים ברורים ומפורטים מסייעים לדגם להבין מתי ואיך לקרוא לכל כלי.
+איכות תיאורי הכלים שלך משפיעה ישירות על איך הסוכן משתמש בהם. תיאורים ברורים ומפורשים עוזרים למודל להבין מתי ואיך לקרוא לכל כלי.
### ניהול מושבים
-האנוטציה `@MemoryId` מאפשרת ניהול זיכרון מבוסס מושבים באופן אוטומטי. לכל מזהה מושב מתקבל מופע `ChatMemory` מנוהל על ידי ה-bean `ChatMemoryProvider`, כך שמשתמשים מרובים יכולים לתקשר עם הסוכן בו זמנית ללא עירוב שיחות שלהם. התרשים הבא מראה כיצד משתמשים שונים מנותבים למחסני זיכרון מבודדים על בסיס מזהי המושב שלהם:
+האנוטציה `@MemoryId` מאפשרת ניהול זיכרון מבוסס מושב באופן אוטומטי. לכל מזהה מושב יש מופע `ChatMemory` מנוהל על ידי ה-bean `ChatMemoryProvider`, כך שמספר משתמשים יכולים לתקשר עם הסוכן בו זמנית מבלי שהשיחות שלהם יתערבבו. התמונה הבאה מראה איך משתמשים מרובים מנותבים למחסני זיכרון מבודדים בהתבסס על מזהי המושבים שלהם:
-
+
-*כל מזהה מושב מתורגם להיסטוריית שיחה מבודדת — משתמשים לעולם לא רואים את ההודעות של אחרים.*
+*לכל מזהה מושב יש היסטוריית שיחה מבודדת — משתמשים לעולם אינם רואים את ההודעות של אחרים.*
### טיפול בשגיאות
-כלים עלולים להיכשל — ממשקי API עשויים לפוג תוקף, פרמטרים יכולים להיות לא תקינים, ושירותים חיצוניים יכולים להפסיק לפעול. סוכנים בייצור זקוקים לטיפול בשגיאות כדי שהדגם יוכל להסביר בעיות או לנסות חלופות במקום לקרוס. כאשר כלי זורק חריגה, LangChain4j תופס אותה ומחזיר את הודעת השגיאה לדגם, כך שהדגם יכול להסביר את הבעיה בשפת טבעית.
+כלים יכולים להיכשל — APIים נגמרים בזמן, פרמטרים עלולים להיות לא חוקיים, שירותים חיצוניים נופלים. סוכני ייצור צריכים טיפול בשגיאות כדי שהמודל יוכל להסביר בעיות או לנסות אלטרנטיבות במקום לקרוס כל האפליקציה. כשכלי זורק חריגה, LangChain4j תופס אותה ומחזיר את הודעת השגיאה למודל, שיכול אז להסביר את הבעיה בשפה טבעית.
## כלים זמינים
-התרשים הבא מראה את המערכת האקולוגית הרחבה של הכלים שניתן לבנות. מודול זה מדגים כלים למזג אוויר והמרת טמפרטורות, אך דפוס `@Tool` זהה פועל גם עבור כל שיטת Java — משאילתות לבסיסי נתונים ועד עיבוד תשלומים.
+התמונה להלן מראה את האקוסיסטם הרחב של כלים שאפשר לבנות. מודול זה מדגים כלים של מזג אוויר וטמפרטורה, אך אותה תבנית `@Tool` עובדת עם כל שיטת Java — משאילתות מסד נתונים לעיבוד תשלומים.
-
+
-*כל שיטת Java שמסומנת ב-@Tool זמינה ל-AI — הדפוס משתרע לבסיסי נתונים, APIs, דוא"ל, פעולות קבצים ועוד.*
+*כל שיטת Java המסומנת ב-@Tool הופכת לזמינה לסוכן AI — התבנית מתרחבת למסדי נתונים, APIים, דוא"ל, פעולות קבצים ועוד.*
-## מתי להשתמש בסוכני כלים
+## מתי להשתמש בסוכנים מבוססי כלים
-לא כל בקשה דורשת כלים. ההחלטה היא האם ה-AI צריך לתקשר עם מערכות חיצוניות או יכול לענות מתוך הידע שלו. המדריך הבא מסכם מתי הכלים מוסיפים ערך ומתי הם מיותרים:
+לא כל בקשה דורשת כלים. ההחלטה תלויה אם ה-AI צריך אינטראקציה עם מערכות חיצוניות או יכול לענות מהידע שלו בלבד. המדריך הבא מסכם מתי כלים מוסיפים ערך ומתי הם מיותרים:
-
+
-*מדריך החלטות קצר — כלים הם עבור נתונים בזמן אמת, חישובים ופעולות; ידע כללי ומשימות יצירתיות לא זקוקים להם.*
+*מדריך החלטה מהיר — כלים מיועדים לנתונים בזמן אמת, חישובים ופעולות; ידע כללי ומשימות יצירתיות לא דורשים אותם.*
## כלים לעומת RAG
-מודולים 03 ו-04 מרחיבים את היכולות של ה-AI, אך בדרכים שונות במהותן. RAG מעניק לדגם גישה ל**ידע** על ידי אחזור מסמכים. כלים מאפשרים לדגם לבצע **פעולות** על ידי קריאות לפונקציות. התרשים הבא משווה בין שתי הגישות - כיצד כל זרימת עבודה פועלת ועד הפשרות שביניהן:
+מודולים 03 ו-04 מגדילים את יכולות ה-AI, אך בדרכים שונות באופן יסודי. RAG נותן למודל גישה ל**ידע** על ידי אחזור מסמכים. כלים מאפשרים למודל לבצע **פעולות** באמצעות קריאות לפונקציות. התמונה הבאה משווה בין שתי הגישות זו לצד זו — מהאופן בו כל זרימת עבודה פועלת ועד לפשרות ביניהן:
-
+
-*RAG מושך מידע מתוך מסמכים סטטיים — כלים מבצעים פעולות ומגבשים נתונים דינמיים בזמן אמת. מערכות רבות בשימוש בייצור משלבות את שניהם.*
+*RAG מושך מידע ממסמכים סטטיים — כלים מבצעים פעולות ואוספים נתונים דינמיים בזמן אמת. רבים ממערכות הייצור משלבות את שניהם.*
-בפועל, מערכות רבות בשימוש בייצור משלבות את שתי הגישות: RAG לקרקע תשובות בתיעוד שלכם, וכלים לאחזור נתונים חיים או ביצוע פעולות.
+בהכרח, מערכות ייצור רבות משלבות בין שתי הגישות: RAG להנחלת תשובות בתיעוד שלך, וכלים לאיסוף נתונים חיים או ביצוע פעולות.
-## צעדים הבאים
+## השלבים הבאים
-**מודול הבא:** [05-mcp - Model Context Protocol (MCP)](../05-mcp/README.md)
+**מודול הבא:** [05-mcp - פרוטוקול הקשר למודל (MCP)](../05-mcp/README.md)
---
-**ניווט:** [← קודם: מודול 03 - RAG](../03-rag/README.md) | [חזרה לעמוד הראשי](../README.md) | [הבא: מודול 05 - MCP →](../05-mcp/README.md)
+**ניווט:** [← הקודם: מודול 03 - RAG](../03-rag/README.md) | [חזרה לעמוד הראשי](../README.md) | [הבא: מודול 05 - MCP →](../05-mcp/README.md)
---
**כתב ויתור**:
-מסמך זה תורגם באמצעות שירות תרגום בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עלולים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפה המקורית שלו הוא המקור הסמכותי. למידע קריטי מומלץ להיעזר בתרגום מקצועי אנושי. איננו אחראים לכל אי הבנה או פרשנות שגויה שיתקבלו כתוצאה משימוש בתרגום זה.
+מסמך זה תורגם באמצעות שירות תרגום אוטומטי [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. יש להחשיב את המסמך המקורי בשפתו הטבעית כמקור הסמכות. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי מתרגם אדם. אנו לא אחראים לכל אי-הבנה או פירוש שגוי הנובע מהשימוש בתרגום זה.
\ No newline at end of file
diff --git a/translations/he/README.md b/translations/he/README.md
index 0de3564b5..183827383 100644
--- a/translations/he/README.md
+++ b/translations/he/README.md
@@ -2,18 +2,18 @@
# LangChain4j למתחילים
-קורס לבניית יישומי בינה מלאכותית עם LangChain4j ו-Azure OpenAI GPT-5.2, מצ'אט בסיסי ועד סוכני AI.
+קורס לבניית יישומי בינה מלאכותית עם LangChain4j ו-Azure OpenAI GPT-5.2, משיחה בסיסית עד סוכני בינה מלאכותית.
-### 🌐 תמיכה ברב-שפות
+### 🌐 תמיכה בריבוי שפות
-#### נתמך באמצעות פעולה ב-GitHub (אוטומטי ותמיד מעודכן)
+#### נתמכת באמצעות GitHub Action (אוטומטית ותמיד מעודכנת)
-[ערבית](../ar/README.md) | [בנגלית](../bn/README.md) | [בולגרית](../bg/README.md) | [בורמזית (מיאנמר)](../my/README.md) | [סינית (מפושטת)](../zh-CN/README.md) | [סינית (מסורתית, הונג קונג)](../zh-HK/README.md) | [סינית (מסורתית, מקאו)](../zh-MO/README.md) | [סינית (מסורתית, טאיוואן)](../zh-TW/README.md) | [קרואטית](../hr/README.md) | [צ'כית](../cs/README.md) | [דנית](../da/README.md) | [הולנדית](../nl/README.md) | [אסטונית](../et/README.md) | [פינית](../fi/README.md) | [צרפתית](../fr/README.md) | [גרמנית](../de/README.md) | [יוונית](../el/README.md) | [עברית](./README.md) | [הינדי](../hi/README.md) | [הונגרית](../hu/README.md) | [אינדונזית](../id/README.md) | [איטלקית](../it/README.md) | [יפנית](../ja/README.md) | [קאנדה](../kn/README.md) | [חמרית](../km/README.md) | [קוריאנית](../ko/README.md) | [ליטאית](../lt/README.md) | [מלאית](../ms/README.md) | [מלאיאלאם](../ml/README.md) | [מראטי](../mr/README.md) | [נפאלית](../ne/README.md) | [ניגרית פידג'ין](../pcm/README.md) | [נורווגית](../no/README.md) | [פרסית (פרסי)](../fa/README.md) | [פולנית](../pl/README.md) | [פורטוגזית (ברזיל)](../pt-BR/README.md) | [פורטוגזית (פורטוגל)](../pt-PT/README.md) | [פנג'בית (גורמוכי)](../pa/README.md) | [רומנית](../ro/README.md) | [רוסית](../ru/README.md) | [סרבית (קירילית)](../sr/README.md) | [סלובקית](../sk/README.md) | [סלובנית](../sl/README.md) | [ספרדית](../es/README.md) | [סוואהילית](../sw/README.md) | [שוודית](../sv/README.md) | [טגאלוג (פיליפינית)](../tl/README.md) | [טמילית](../ta/README.md) | [טלוגו](../te/README.md) | [תאית](../th/README.md) | [טורקית](../tr/README.md) | [אוקראינית](../uk/README.md) | [אורדו](../ur/README.md) | [וייטנאמית](../vi/README.md)
+[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](./README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
-> **מעדיפים לשכפל מקומית?**
+> **מעדיף לשכפל מקומית?**
>
-> מאגר זה כולל יותר מ-50 תרגומים של שפות, אשר מגדילים משמעותית את גודל ההורדה. לשכפול ללא תרגומים, השתמשו ב-sparse checkout:
+> מאגר זה כולל יותר מ-50 תרגומים לשפות שונות שגדילים משמעותית את גודל ההורדה. כדי לשכפל ללא תרגומים, השתמש ב-sparse checkout:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -29,62 +29,59 @@
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> זה נותן לכם את כל מה שצריך כדי להשלים את הקורס עם הורדה מהירה הרבה יותר.
+> זה נותן לך את כל מה שאתה צריך כדי להשלים את הקורס במהירות הורדה גבוהה יותר.
## תוכן העניינים
-1. [התחלה מהירה](00-quick-start/README.md) - התחילו עם LangChain4j
-2. [מבוא](01-introduction/README.md) - למדו את יסודות LangChain4j
-3. [הנדסת פרומפטים](02-prompt-engineering/README.md) - שלטו בעיצוב פרומפט יעיל
-4. [RAG (יצירת תוכן משופרת בהבאה)](03-rag/README.md) - בניית מערכות מבוססות ידע חכמות
-5. [כלים](04-tools/README.md) - אינטגרציה של כלים חיצוניים ועוזרים פשוטים
-6. [MCP (פרוטוקול קונטקסט מודל)](05-mcp/README.md) - עבודה עם פרוטוקול קונטקסט מודל (MCP) ומודולים סוכנים
+1. [הקדמה](01-introduction/README.md) - ללמוד את היסודות של LangChain4j
+2. [הנדסת פרומפטים](02-prompt-engineering/README.md) - לשלוט בעיצוב פרומפטים אפקטיבי
+3. [RAG (ייצור מחוזק אחזור)](03-rag/README.md) - לבנות מערכות מבוססות ידע חכמות
+4. [כלים](04-tools/README.md) - לשלב כלים חיצוניים ועוזרים פשוטים
+5. [MCP (פרוטוקול הקשר מודל)](05-mcp/README.md) - לעבוד עם פרוטוקול הקשר מודל (MCP) ומודולי סוכנים
### סיורים בווידאו
-לכל מודול יש מושב חי בן שידור שבו עוברים שלב אחר שלב על הקונספטים והקוד.
+לכל מודול יש מפגש חי נלווה שבו אנו עוברים שלב אחר שלב על המושגים והקוד.
| מודול | וידאו |
|--------|-------|
-| 01 - מבוא | [התחלה עם LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
+| 01 - הקדמה | [התחלה עם LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
| 02 - הנדסת פרומפטים | [הנדסת פרומפטים עם LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
| 03 - RAG | [RAG עם LangChain4j](https://www.youtube.com/watch?v=_olq75ZH_eY) |
| 04 - כלים & 05 - MCP | [סוכני AI עם כלים ו-MCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
---
-## מסלול למידה
+## מסלול הלימוד
-**חדש ב-LangChain4j?** עיינו ב-[מילון מונחים](docs/GLOSSARY.md) להגדרות מונחים ומושגים מרכזיים.
+**חדש ב-LangChain4j?** עיין ב-[מילון המונחים](docs/GLOSSARY.md) להגדרות של מונחים ומושגים מרכזיים.
> **התחלה מהירה**
-1. פתחו ענף (Fork) למאגר זה לחשבון ה-GitHub שלכם
-2. לחצו על **Code** → לשונית **Codespaces** → **...** → **New with options...**
-3. השתמשו בהגדרות ברירת המחדל – זה יבחר את מיכל הפיתוח שיצרנו לקורס זה
-4. לחצו על **Create codespace**
-5. המתינו 5-10 דקות לסיום ההקמה של הסביבה
-6. עברו ישר ל-[התחלה מהירה](./00-quick-start/README.md) כדי להתחיל!
+1. פתח פורק של מאגר זה לחשבון ה-GitHub שלך
+2. לחץ על **Code** → לשונית **Codespaces** → **...** → **חדש עם אפשרויות...**
+3. השתמש כברירות המחדל – זה יבחר במכולת הפיתוח שנוצרה לקורס זה
+4. לחץ על **Create codespace**
+5. המתן 5-10 דקות לסיום הכנת הסביבה
+6. קפוץ ישירות ל-[הקדמה](./01-introduction/README.md) כדי להתחיל!
-לאחר השלמת המודולים, חקרו את [מדריך הבדיקות](docs/TESTING.md) כדי לראות את קונספטי הבדיקה של LangChain4j בפעולה.
-
-> **הערה:** ההדרכה הזו משתמשת גם בדגמי GitHub וגם ב-Azure OpenAI. מודול [התחלה מהירה](00-quick-start/README.md) משתמש בדגמי GitHub (אין צורך במנוי Azure), בעוד שהמודולים 1-5 משתמשים ב-Azure OpenAI. התחילו עם [חשבון Azure חינמי](https://aka.ms/azure-free-account) אם אין לכם כזה.
+לאחר סיום המודולים, חקור את [מדריך הבדיקות](docs/TESTING.md) כדי לראות מושגי בדיקות של LangChain4j בפעולה.
+> **הערה:** הדרכה זו משתמשת ב-Azure OpenAI. התחל עם [חשבון Azure חינמי](https://aka.ms/azure-free-account) אם אין לך אחד.
## למידה עם GitHub Copilot
-כדי להתחיל לתכנת במהירות, פתחו את הפרויקט הזה בקודספייס של GitHub או ב-IDE מקומי עם devcontainer שסופק. ה-devcontainer בו משתמשים בקורס זה מוגדר מראש עם GitHub Copilot לתכנות משולב בינה מלאכותית.
+כדי להתחיל לתכנת במהירות, פתח את הפרויקט הזה ב-GitHub Codespace או ב-IDE המקומי שלך עם devcontainer המסופק. ה-devcontainer שבו משתמשים בקורס זה מגיע מוגדר מראש עם GitHub Copilot לתכנות זוגי מבוסס AI.
-כל דוגמת קוד כוללת שאלות מוצעות שתוכלו לשאול את GitHub Copilot להעמקת ההבנה שלכם. חפשו את הסימנים 💡/🤖 ב-
+כל דוגמת קוד כוללת שאלות מוצעות שאתה יכול לשאול את GitHub Copilot כדי להעמיק את ההבנה שלך. חפש את הכותרות 💡/🤖 ב-
- **כותרות קבצי Java** - שאלות ספציפיות לכל דוגמה
-- **קבצי README של המודולים** - פיקודים לחקירה לאחר דוגמות הקוד
-
-**איך להשתמש:** פתחו כל קובץ קוד ושאלו את GitHub Copilot את השאלות המוצעות. יש לו הקשר מלא של מאגר הקוד ויכול להסביר, להרחיב ולהציע חלופות.
+- **README של מודולים** - הנחיות לחקירה לאחר דוגמות קוד
-רוצים ללמוד יותר? עיינו ב-[Copilot לתכנות משולב בינה מלאכותית](https://aka.ms/GitHubCopilotAI).
+**איך משתמשים:** פתח כל קובץ קוד ושאל את Copilot את השאלות המוצעות. יש לו הקשר מלא של בסיס הקוד ויכול להסביר, להרחיב ולהציע אלטרנטיבות.
+רוצה ללמוד עוד? עיין ב-[Copilot לתכנות זוגי מבוסס AI](https://aka.ms/GitHubCopilotAI).
## משאבים נוספים
@@ -103,48 +100,48 @@
---
-### סדרת בינה מלאכותית גנרטיבית
-[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
-[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
-[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
-[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
+### סדרת בינה מלאכותית יוצרת
+[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
+[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
+[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
+[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
---
-### ליבת הלמידה
+### לימוד בסיסי
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
-[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
+[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
### סדרת קופיילוט
-[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
-## קבלת עזרה
+## לקבלת סיוע
-אם אתה נתקל בבעיה או יש לך שאלות לגבי בניית אפליקציות AI, הצטרף ל:
+אם נתקעת או יש לך שאלות על בניית אפליקציות בינה מלאכותית, הצטרף ל:
[](https://aka.ms/foundry/discord)
-אם יש לך משוב או בעיות בעת הבנייה בקר באתר:
+אם יש לך משוב על המוצר או שגיאות בזמן בנייה בקרב:
[](https://aka.ms/foundry/forum)
## רישיון
-רישיון MIT - עיין בקובץ [LICENSE](../../LICENSE) לפרטים.
+רישיון MIT - ראה את קובץ [LICENSE](../../LICENSE) לפרטים.
---
-**כתב ויתור**:
-מסמך זה תורגם באמצעות שירות התרגום המלאכותי [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לשים לב כי תרגומים אוטומטיים עלולים להכיל טעויות או אי-דיוקים. המסמך המקורי בשפת המקור שלו נחשב למקור הסמכותי. למידע קריטי מומלץ להשתמש בתרגום מקצועי אנושי. איננו נושאים באחריות לכל אי-הבנות או פרשנויות שגויות הנובעות משימוש בתרגום זה.
+**כתב ויתור**:
+מסמך זה תורגם באמצעות שירות תרגום אוטומטי [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. יש להחשיב את המסמך המקורי בשפתו הטבעית כמקור הסמכות. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי מתרגם אדם. אנו לא אחראים לכל אי-הבנה או פירוש שגוי הנובע מהשימוש בתרגום זה.
\ No newline at end of file
diff --git a/translations/he/docs/GLOSSARY.md b/translations/he/docs/GLOSSARY.md
index 6607373df..8c95ab18a 100644
--- a/translations/he/docs/GLOSSARY.md
+++ b/translations/he/docs/GLOSSARY.md
@@ -2,71 +2,71 @@
## תוכן העניינים
-- [מושגים מרכזיים](../../../docs)
-- [רכיבי LangChain4j](../../../docs)
-- [מושגי AI/ML](../../../docs)
-- [מנגנוני הגנה](../../../docs)
-- [הנדסת פרומפטים](../../../docs)
-- [RAG (הפקה משודרגת על ידי אחזור)](../../../docs)
-- [סוכנים וכלים](../../../docs)
-- [מודול סוכני](../../../docs)
-- [פרוטוקול הקשר מודל (MCP)](../../../docs)
-- [שירותי Azure](../../../docs)
-- [בדיקות ופיתוח](../../../docs)
+- [מושגי ליבה](#מושגי-ליבה)
+- [רכיבי LangChain4j](#רכיבי-langchain4j)
+- [מושגי AI/ML](#מושגי-aiml)
+- [קווי הגנה](#קווי-הגנה)
+- [הנדסת פרומפט](#prompt-engineering---module-02)
+- [RAG (יצירת תוכן מועשרת באחזור)](#rag-retrieval-augmented-generation---module-03)
+- [סוכנים וכלים](#agents-and-tools---module-04)
+- [מודול סוכני](#agentic-module---module-05)
+- [פרוטוקול הקשר מודל (MCP)](#model-context-protocol-mcp---module-05)
+- [שירותי Azure](#azure-services---module-01)
+- [בדיקות ופיתוח](#testing-and-development---testing-guide)
-הפניה מהירה למונחים ולמושגים שמשמשים לאורך הקורס.
+התייחסות מהירה למונחים ומושגים בשימוש לאורך הקורס.
-## מושגים מרכזיים
+## מושגי ליבה
-**סוכן AI** - מערכת המשתמשת ב-AI כדי להסיק מסקנות ולפעול באופן עצמאי. [מודול 04](../04-tools/README.md)
+**סוכן AI** - מערכת המשתמשת בבינה מלאכותית כדי לחשוב ולפעול באופן אוטונומי. [מודול 04](../04-tools/README.md)
-**שרשור** - רצף של פעולות כאשר הפלט מוזן לשלב הבא.
+**שרשרת** - רצף של פעולות שבו הפלט מזין את השלב הבא.
-**חלוקה לחלקים** - פירוק מסמכים לחלקים קטנים יותר. טיפוסי: 300-500 טוקנים עם חפיפה. [מודול 03](../03-rag/README.md)
+**חיתוך** - פירוק מסמכים לחתיכות קטנות יותר. טיפוסי: 300-500 טוקנים עם חפיפה. [מודול 03](../03-rag/README.md)
-**חלון הקשר** - מספר הטוקנים המרביים שהמודל יכול לעבד. GPT-5.2: 400K טוקנים (עד 272K קלט, 128K פלט).
+**חלון הקשר** - מספר הטוקנים המקסימלי שמודל יכול לעבד. GPT-5.2: 400K טוקנים (עד 272K קלט, 128K פלט).
-**אימבדינגים** - וקטורים מספריים המייצגים משמעות טקסטואלית. [מודול 03](../03-rag/README.md)
+**הטמעות** - וקטורים נומריים המייצגים את משמעות הטקסט. [מודול 03](../03-rag/README.md)
-**קריאת פונקציה** - המודל יוצר בקשות מובנות לקריאה לפונקציות חיצוניות. [מודול 04](../04-tools/README.md)
+**קריאת פונקציה** - מודל שיוצר בקשות מובנות לקריאת פונקציות חיצוניות. [מודול 04](../04-tools/README.md)
-**הלוצינציה** - כאשר מודלים מייצרים מידע שגוי אך סביר למראה.
+**הלוצינציה** - כאשר מודלים מייצרים מידע שגוי אך סביר.
-**פרומפט** - קלט טקסטואלי למודל שפה. [מודול 02](../02-prompt-engineering/README.md)
+**פרומפט** - טקסט קלט למודל שפה. [מודול 02](../02-prompt-engineering/README.md)
-**חיפוש סמנטי** - חיפוש על פי משמעות באמצעות אימבדינגים, לא לפי מילות מפתח. [מודול 03](../03-rag/README.md)
+**חיפוש סמנטי** - חיפוש לפי משמעות באמצעות הטמעות, לא לפי מילות מפתח. [מודול 03](../03-rag/README.md)
-**סטייטפול לעומת סטייטלס** - סטייטלס: ללא זיכרון. סטייטפול: שומר היסטוריית שיחה. [מודול 01](../01-introduction/README.md)
+**מצבי זיכרון מול מצב ללא זיכרון** - ללא זיכרון: ללא היסטוריית שיחה. עם זיכרון: שומר היסטוריית שיחה. [מודול 01](../01-introduction/README.md)
-**טוקנים** - יחידות הטקסט הבסיסיות שהמודלים מעבדים. משפיע על עלויות ומגבלות. [מודול 01](../01-introduction/README.md)
+**טוקנים** - יחידות טקסט בסיסיות שהמודלים מעבדים. משפיע על עלויות ומגבלות. [מודול 01](../01-introduction/README.md)
-**שרשור כלים** - ביצוע רציף של כלים כאשר הפלט משפיע על הקריאה הבאה. [מודול 04](../04-tools/README.md)
+**שרשור כלים** - ביצוע כלי בסדר שבו הפלט משפיע על הקריאה הבאה. [מודול 04](../04-tools/README.md)
## רכיבי LangChain4j
-**AiServices** - יוצר ממשקי שירות AI בטוחים מסוג.
+**AiServices** - יוצר ממשקי שירותי AI בטיפוס בטוח.
**OpenAiOfficialChatModel** - לקוח מאוחד למודלים של OpenAI ו-Azure OpenAI.
-**OpenAiOfficialEmbeddingModel** - יוצר אימבדינגים באמצעות הלקוח הרשמי של OpenAI (תומך ב-OpenAI ו-Azure OpenAI).
+**OpenAiOfficialEmbeddingModel** - יוצר הטמעות באמצעות לקוח OpenAI רשמי (תומך גם ב-OpenAI וגם ב-Azure OpenAI).
**ChatModel** - ממשק ליבה למודלי שפה.
**ChatMemory** - שומר היסטוריית שיחה.
-**ContentRetriever** - מוצא חלקי מסמכים רלוונטיים ל-RAG.
+**ContentRetriever** - מוצא חתיכות מסמך רלוונטיות ל-RAG.
-**DocumentSplitter** - מפרק מסמכים לחלקים.
+**DocumentSplitter** - מפרק מסמכים לחתיכות.
-**EmbeddingModel** - ממיר טקסט לווקטורים מספריים.
+**EmbeddingModel** - ממיר טקסט לווקטורים נומריים.
-**EmbeddingStore** - מאחסן ומחזיר אימבדינגים.
+**EmbeddingStore** - מאחסן ומבקש הטמעויות.
-**MessageWindowChatMemory** - שומר חלון הזזה של הודעות אחרונות.
+**MessageWindowChatMemory** - שומר חלון מחליק של הודעות אחרונות.
-**PromptTemplate** - יוצר פרומפטים הניתנים לשימוש חוזר עם מקומות שמורים `{{variable}}`.
+**PromptTemplate** - יוצר פרומפטים לשימוש חוזר עם מצייני מקום `{{variable}}`.
-**TextSegment** - חלק טקסט עם מטה-נתונים. משמש ב-RAG.
+**TextSegment** - חתיכת טקסט עם מטא-נתונים. משמש ב-RAG.
**ToolExecutionRequest** - מייצג בקשת ביצוע כלי.
@@ -74,123 +74,123 @@
## מושגי AI/ML
-**למידת דוגמאות מועטות (Few-Shot Learning)** - מתן דוגמאות בפרומפטים. [מודול 02](../02-prompt-engineering/README.md)
+**למידה עם דוגמאות מועטות** - מתן דוגמאות בפרומפטים. [מודול 02](../02-prompt-engineering/README.md)
-**מודל שפה גדול (LLM)** - מודלי AI שנלמדו על כמויות טקסט גדולות.
+**מודל שפה גדול (LLM)** - מודלי AI המאומנים על כמויות טקסט גדולות.
-**מאמץ הסקה** - פרמטר של GPT-5.2 ששולט בעומק החשיבה. [מודול 02](../02-prompt-engineering/README.md)
+**מאמץ היסק** - פרמטר ב-GPT-5.2 השולט בעומק החשיבה. [מודול 02](../02-prompt-engineering/README.md)
-**טמפרטורה** - שולטת ברנדומליות הפלט. נמוכה=דטרמיניסטי, גבוהה=יצירתי.
+**טמפרטורה** - שולטת באקראיות הפלט. נמוכה=דטרמיניסטי, גבוהה=יצירתי.
-**מסד נתונים וקטורי** - מסד נתונים מיוחד לאימבדינגים. [מודול 03](../03-rag/README.md)
+**מסד וקטורים** - מסד נתונים ייעודי להטמעות. [מודול 03](../03-rag/README.md)
-**למידת דוגמאות אפס (Zero-Shot Learning)** - ביצוע משימות ללא דוגמאות. [מודול 02](../02-prompt-engineering/README.md)
+**למידה ללא דוגמאות** - ביצוע משימות ללא דוגמאות. [מודול 02](../02-prompt-engineering/README.md)
-## מנגנוני הגנה - [מודול 00](../00-quick-start/README.md)
+## קווי הגנה
-**הגנה בעומק** - גישת אבטחה רב-שכבתית המשלבת מנגנוני הגנה ברמת האפליקציה עם מסנני בטיחות של ספקים.
+**הגנה בעומק** - גישה רב-שכבתית לשמירה המשלבת קווי הגנה ברמת האפליקציה עם פילטרי בטיחות של ספק.
-**חסימה קשיחה** - הספק מחזיר שגיאת HTTP 400 עבור הפרת תוכן חמורה.
+**חסימה קשה** - ספק זורק שגיאת HTTP 400 עבור הפרות תוכן חמורות.
-**InputGuardrail** - ממשק LangChain4j לאימות קלט משתמש לפני שהוא מגיע ל-LLM. חוסך עלויות ועכבה על ידי חסימת פרומפטים מזיקים מוקדם.
+**InputGuardrail** - ממשק LangChain4j לאימות קלט משתמש לפני שהוא מגיע ל-LLM. חוסך עלויות ועיכובים על ידי חסימת פרומפטים מזיקים מוקדם.
-**InputGuardrailResult** - סוג החזרה לאימות דרך מגבלות: `success()` או `fatal("reason")`.
+**InputGuardrailResult** - סוג החזרה לאימות קווי הגנה: `success()` או `fatal("reason")`.
**OutputGuardrail** - ממשק לאימות תגובות AI לפני החזרתן למשתמשים.
-**מסנני בטיחות של ספקים** - מסנני תוכן מובנים מספקי AI (למשל, GitHub Models) שתופסים הפרות ברמת ה-API.
+**פילטרי בטיחות ספק** - פילטרי תוכן מובנים מספקי AI (כגון Azure OpenAI) שתופסים הפרות ברמת ה-API.
-**סרבנות רכה** - המודל מסרב בנימוס לענות מבלי להחזיר שגיאה.
+**סרוב רך** - מודל מתרץ בנימוס סירוב למענה ללא זריקת שגיאה.
-## הנדסת פרומפטים - [מודול 02](../02-prompt-engineering/README.md)
+## הנדסת פרומפט - [מודול 02](../02-prompt-engineering/README.md)
-**שרשרת מחשבה** - הסקה שלב-אחר-שלב לדיוק טוב יותר.
+**שרשרת מחשבה** - היגיון שלב-אחרי-שלב לדיוק טוב יותר.
**פלט מוגבל** - אכיפת פורמט או מבנה מסוים.
-**רצון גבוה** - תבנית GPT-5.2 להסקה מעמיקה.
+**רצון גבוה** - תבנית GPT-5.2 להיסק מעמיק.
**רצון נמוך** - תבנית GPT-5.2 לתשובות מהירות.
-**שיחה רב-סיבובית** - שימור הקשר לאורך החלפות שיחה.
+**שיחה מרובת סבבים** - שמירת הקשר לאורך החלפות.
-**פרומפט מבוסס תפקיד** - קביעת פרסונת מודל דרך הודעות מערכת.
+**פרומפט מבוסס תפקיד** - קביעת פרסונה של המודל באמצעות הודעות מערכת.
-**הרהור עצמי** - המודל מעריך ומשפר את הפלט שלו.
+**השתקפות עצמית** - המודל מעריך ומשפר את הפלט שלו.
-**אנליזה מובנית** - מסגרת הערכה קבועה.
+**ניתוח מובנה** - מסגרת הערכה קבועה.
-**תבנית ביצוע משימה** - תכנון → ביצוע → סיכום.
+**תבנית ביצוע משימה** - תכנן → בצע → סכם.
-## RAG (הפקה משודרגת על ידי אחזור) - [מודול 03](../03-rag/README.md)
+## RAG (יצירת תוכן מועשרת באחזור) - [מודול 03](../03-rag/README.md)
-**צינור עיבוד מסמכים** - טעינה → חלוקה → הטמעה → אחסון.
+**צינור עיבוד מסמכים** - טעינה → חיתוך → הטמעה → אחסון.
-**חנות אימבדינג בזיכרון** - אחסון בלתי-מתקיים לבדיקות.
+**מאגר הטמעות בזיכרון** - אחסון שאינו מתמיד לבדיקות.
-**RAG** - משלב אחזור עם הפקה כדי לעגן תגובות.
+**RAG** - משלב אחזור עם יצירה כדי לעגן תגובות.
**ציון דמיון** - מדד (0-1) של דמיון סמנטי.
-**התייחסות למקור** - מטה-נתונים על התוכן שהוחזר.
+**הפניה למקור** - מטא-נתונים אודות התוכן שנשלף.
## סוכנים וכלים - [מודול 04](../04-tools/README.md)
-**@Tool Annotation** - מסמן מתודות Java ככלים הקריאים על ידי AI.
+**@Tool Annotation** - מציין מתודות Java ככלים הניתנים לקריאה על ידי AI.
-**תבנית ReAct** - הסקה → פעולה → תצפית → חזרה.
+**תבנית ReAct** - חשיבה → פעולה → תצפית → חזרה.
**ניהול מושבים** - הקשרים נפרדים למשתמשים שונים.
-**כלי** - פונקציה שניתן להפעיל על ידי סוכן AI.
+**כלי** - פונקציה שסוכן AI יכול לקרוא לה.
-**תיאור כלי** - תיעוד מטרת הכלי ופרמטרים.
+**תיאור כלי** - תיעוד המטרה והפרמטרים של הכלי.
## מודול סוכני - [מודול 05](../05-mcp/README.md)
-**@Agent Annotation** - מסמן ממשקים כסוכני AI עם הגדרה הצהרתית של התנהגות.
+**@Agent Annotation** - מציין ממשקים כסוכני AI עם הגדרת התנהגות דקלרטיבית.
-**מאזין סוכן** - וו למעקב ביצוע סוכן דרך `beforeAgentInvocation()` ו-`afterAgentInvocation()`.
+**Agent Listener** - וו למעקב ביצוע סוכן דרך `beforeAgentInvocation()` ו-`afterAgentInvocation()`.
-**היקף סוכני** - זיכרון משותף בו סוכנים מאחסנים פלטים באמצעות `outputKey` לצריכה על ידי סוכנים אחרים.
+**Agentic Scope** - זיכרון משותף שבו סוכנים מאחסנים פלטים באמצעות `outputKey` לצריכה של סוכנים בהמשך.
-**AgenticServices** - בית חרושת ליצירת סוכנים באמצעות `agentBuilder()` ו-`supervisorBuilder()`.
+**AgenticServices** - מפעל ליצירת סוכנים באמצעות `agentBuilder()` ו-`supervisorBuilder()`.
-**זרימת עבודה מותנית** - ניתוב לפי תנאים לסוכנים מומחים שונים.
+**זרימת עבודה מותנית** - ניתוב מבוסס תנאים לסוכנים מומחים שונים.
-**אדם בלולאה** - תבנית עבודה שמוסיפה נקודות בדיקה אנושיות לאישור או סקירת תוכן.
+**אדם בלולאה** - תבנית עבודה הכוללת נקודות בדיקה אנושיות לאישור או סקירת תוכן.
-**langchain4j-agentic** - תלות Maven לבניית סוכנים הצהרתית (ניסיוני).
+**langchain4j-agentic** - תלות Maven לבניית סוכנים דקלרטיבית (נסיוני).
-**לולאת עבודה** - איטרציה של ביצוע סוכן עד שמתקיים תנאי (למשל, ציון איכות ≥ 0.8).
+**זרימת עבודה מחזורית** - איטרציה של ביצוע סוכן עד שהתקיים תנאי (למשל ציון איכות ≥ 0.8).
-**outputKey** - פרמטר אנוטציית סוכן המפרט היכן נשמרים התוצאות בהיקף הסוכני.
+**outputKey** - פרמטר אנוטציה של סוכן המגדיר היכן נשמרים התוצאות ב-Agentic Scope.
-**זרימת עבודה מקבילית** - הרצת מספר סוכנים במקביל למשימות עצמאיות.
+**זרימת עבודה מקבילית** - הרצת סוכנים רבים במקביל למשימות עצמאיות.
-**אסטרטגיית תגובה** - כיצד הממונה מנסח תשובה סופית: האחרון, סיכום, או מדורג.
+**אסטרטגיית תגובה** - כיצד המפקח מנסח תשובה סופית: אחרון, סיכום, או מדורג.
-**זרימת עבודה סדרתית** - ביצוע סוכנים בסדר שהפלט זורם לשלב הבא.
+**זרימת עבודה עוקבת** - ביצוע סוכנים בסדר שבו הפלט זורם לשלב הבא.
-**תבנית סוכן ממונה** - תבנית סוכני מתקדמת שבה LLM ממונה מחליט דינמית אילו סוכנים משניים להפעיל.
+**תבנית סוכן מפקח** - תבנית סוכנית מתקדמת שבה LLM מפקח מחליט דינמית אילו תת-סוכנים להפעיל.
## פרוטוקול הקשר מודל (MCP) - [מודול 05](../05-mcp/README.md)
**langchain4j-mcp** - תלות Maven לאינטגרציה של MCP ב-LangChain4j.
-**MCP** - פרוטוקול הקשר מודל: סטנדרט לחיבור אפליקציות AI לכלים חיצוניים. בנה פעם, השתמש בכל מקום.
+**MCP** - פרוטוקול הקשר מודל: תקן לחיבור אפליקציות AI לכלים חיצוניים. בנה פעם אחת, השתמש בכל מקום.
-**לקוח MCP** - אפליקציה שמתחברת לשרתי MCP לגילוי ושימוש בכלים.
+**לקוח MCP** - אפליקציה המחוברת לשרתים של MCP לגילוי ושימוש בכלים.
-**שרת MCP** - שירות המציע כלים דרך MCP עם תיאורים ברורים וסכימות פרמטרים.
+**שרת MCP** - שירות המביא את הכלים דרך MCP עם תיאורים ברורים וסכימות פרמטרים.
-**McpToolProvider** - רכיב LangChain4j העוטף כלים של MCP לשימוש בשירותי AI וסוכנים.
+**McpToolProvider** - רכיב של LangChain4j העוטף כלים של MCP לשימוש בשירותי AI וסוכנים.
**McpTransport** - ממשק לתקשורת MCP. מימושים כוללים Stdio ו-HTTP.
-**תחבורה Stdio** - תחבורה מקומית דרך stdin/stdout. שימושי לגישה לקבצים או כלים שורת פקודה.
+**שילוח Stdio** - התקשרות תהליכים מקומי דרך stdin/stdout. שימושי לגישה למערכת הקבצים או כלי שורת פקודה.
-**StdioMcpTransport** - מימוש LangChain4j המשיק שרת MCP כתת-תהליך.
+**StdioMcpTransport** - מימוש LangChain4j שיוצר תהליך משנה של שרת MCP.
**גילוי כלים** - הלקוח שואל את השרת על כלים זמינים עם תיאורים וסכימות.
@@ -198,35 +198,33 @@
**Azure AI Search** - חיפוש בענן עם יכולות וקטוריות. [מודול 03](../03-rag/README.md)
-**Azure Developer CLI (azd)** - לפריסה של משאבי Azure.
+**Azure Developer CLI (azd)** - פריסת משאבי Azure.
**Azure OpenAI** - שירות AI ארגוני של מיקרוסופט.
-**Bicep** - שפת תשתית כקוד של Azure. [מדריך תשתית](../01-introduction/infra/README.md)
+**Bicep** - שפת התשתית-כקוד של Azure. [מדריך תשתית](../01-introduction/infra/README.md)
**שם פריסה** - שם לפריסת מודל ב-Azure.
-**GPT-5.2** - מודל OpenAI העדכני עם בקרת הסקה. [מודול 02](../02-prompt-engineering/README.md)
+**GPT-5.2** - המודל העדכני ביותר של OpenAI עם בקרה על חשיבה. [מודול 02](../02-prompt-engineering/README.md)
## בדיקות ופיתוח - [מדריך בדיקות](TESTING.md)
-**מכל פיתוח** - סביבה מבודדת לפיתוח. [הגדרות](../../../.devcontainer/devcontainer.json)
+**Dev Container** - סביבת פיתוח מכולה. [קונפיגורציה](../../../.devcontainer/devcontainer.json)
-**GitHub Models** - מגרש משחקים חינמי למודלי AI. [מודול 00](../00-quick-start/README.md)
-
-**בדיקות בזיכרון** - בדיקות עם אחסון בזיכרון.
+**בדיקה בזיכרון** - בדיקות עם אחסון זיכרוני.
**בדיקות אינטגרציה** - בדיקות עם תשתית אמיתית.
**Maven** - כלי אוטומציה לבניית Java.
-**Mockito** - מסגרת לדימוי ב-Java.
+**Mockito** - מסגרת לעידוד מיזוג ב-Java.
-**Spring Boot** - מסגרת אפליקציות Java. [מודול 01](../01-introduction/README.md)
+**Spring Boot** - מסגרת אפליקציה ב-Java. [מודול 01](../01-introduction/README.md)
---
**כתב ויתור**:
-מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדייק, יש להביא בחשבון כי תרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. המסמך המקורי בשפתו הטבעית צריך להיחשב כמקור הסמכותי. למידע קריטי מומלץ להיעזר בתרגום מקצועי אנושי. איננו אחראים לכל אי-הבנה או פרשנות שגויה הנובעת מהשימוש בתרגום זה.
+מסמך זה תורגם באמצעות שירות תרגום אוטומטי [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. יש להחשיב את המסמך המקורי בשפתו הטבעית כמקור הסמכות. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי מתרגם אדם. אנו לא אחראים לכל אי-הבנה או פירוש שגוי הנובע מהשימוש בתרגום זה.
\ No newline at end of file
diff --git a/translations/he/docs/TESTING.md b/translations/he/docs/TESTING.md
index ff4beec73..ca4a175f2 100644
--- a/translations/he/docs/TESTING.md
+++ b/translations/he/docs/TESTING.md
@@ -2,19 +2,19 @@
## תוכן העניינים
-- [התחלה מהירה](../../../docs)
-- [מה הבדיקות מכסות](../../../docs)
-- [הרצת הבדיקות](../../../docs)
-- [הרצת בדיקות ב-VS Code](../../../docs)
-- [דפוסי בדיקה](../../../docs)
-- [פילוסופיית בדיקה](../../../docs)
-- [השלבים הבאים](../../../docs)
+- [התחלה מהירה](#התחלה-מהירה)
+- [מה מכסים הבדיקות](#מה-מכסים-הבדיקות)
+- [הרצת הבדיקות](#הרצת-הבדיקות)
+- [הרצת בדיקות ב-VS Code](#הרצת-בדיקות-ב-vs-code)
+- [תבניות בדיקה](#תבניות-בדיקה)
+- [פילוסופיית בדיקה](#פילוסופיית-בדיקה)
+- [שלבים הבאים](#שלבים-הבאים)
-מדריך זה מלמד כיצד לבדוק יישומי AI ללא צורך במפתחות API או שירותים חיצוניים.
+מדריך זה מלווה אותך דרך הבדיקות שמדגימות כיצד לבדוק יישומי בינה מלאכותית מבלי שידרשו מפתחות API או שירותים חיצוניים.
## התחלה מהירה
-הרץ את כל הבדיקות באמצעות פקודה אחת:
+הפעל את כל הבדיקות עם פקודה אחת:
**Bash:**
```bash
@@ -26,32 +26,31 @@ mvn test
mvn --% test
```
-כאשר כל הבדיקות עוברות, תראה פלט כמו בתמונה למטה — בדיקות רצות ללא כישלונות.
+כשהכל עובר, תראה פלט כמו הצילום מסך מטה — הבדיקות רצות ללא כישלונות.
-
+
-*הרצת בדיקות מוצלחת המציגה את מעבר כל הבדיקות ללא כישלונות*
+*ביצוע בדיקות מוצלחות המציג את כל הבדיקות שעוברות ללא כישלונות*
-## מה הבדיקות מכסות
+## מה מכסים הבדיקות
-קורס זה מתמקד ב**בדיקות יחידה** שרצות מקומית. כל בדיקה מדגימה רעיון ספציפי ב־LangChain4j באופן מבודד. פירמידת הבדיקות למטה מראה היכן מתמקמים בדיקות היחידה — הן היסוד המהיר והאמין שעליו נשענת שאר אסטרטגיית הבדיקה שלך.
+הקורס מתמקד ב**בדיקות יחידה** שמתבצעות מקומית. כל בדיקה מדגימה מושג ספציפי של LangChain4j בנפרד. פירמידת הבדיקות מטה מראה איפה בדיקות היחידה מתמקמות — הן הבסיס המהיר והאמין שעליו נשענת שאר אסטרטגיית הבדיקות שלך.
-
+
-*פירמידת בדיקה המציגה את האיזון בין בדיקות יחידה (מהירות, מבודדות), בדיקות אינטגרציה (רכיבים אמיתיים) ובדיקות מקצה לקצה. הכשרה זו מכסה בדיקות יחידה.*
+*פירמידת בדיקות המראה את האיזון בין בדיקות יחידה (מהירות, מבודדות), בדיקות אינטגרציה (רכיבים אמיתיים), ובדיקות מקצה לקצה. אימון זה מכסה בדיקות יחידה.*
-| מודול | בדיקות | מיקוד | קבצים עיקריים |
+| מודול | בדיקות | מיקוד | קבצים מרכזיים |
|--------|-------|-------|-----------|
-| **00 - התחלה מהירה** | 6 | תבניות פקודות והחלפת משתנים | `SimpleQuickStartTest.java` |
-| **01 - מבוא** | 8 | זיכרון שיחה וצ׳אט מדינתי | `SimpleConversationTest.java` |
-| **02 - הנדסת פקודות** | 12 | דפוסי GPT-5.2, דרגות נכונות, פלט מובנה | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | ספיגת מסמכים, הטמעות, חיפוש דמיון | `DocumentServiceTest.java` |
-| **04 - כלים** | 12 | קריאת פונקציות ורצף כלים | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | פרוטוקול הקשר לדגם עם תקשורת stdio | `SimpleMcpTest.java` |
+| **01 - מבוא** | 8 | זיכרון שיחות וצ'אט עם מצב | `SimpleConversationTest.java` |
+| **02 - הנדסת פרומפטים** | 12 | דפוסי GPT-5.2, רמות נימוס, פלט מובנה | `SimpleGpt5PromptTest.java` |
+| **03 - RAG** | 10 | קליטת מסמכים, הטמעות, חיפוש דמיון | `DocumentServiceTest.java` |
+| **04 - כלים** | 12 | קריאת פונקציות ושרשור כלים | `SimpleToolsTest.java` |
+| **05 - MCP** | 8 | פרוטוקול הקשר מודל עם הובלה stdio | `SimpleMcpTest.java` |
## הרצת הבדיקות
-**הפעל את כל הבדיקות מהספרייה הראשית:**
+**הרץ את כל הבדיקות מהספרייה הראשית:**
**Bash:**
```bash
@@ -63,12 +62,12 @@ mvn test
mvn --% test
```
-**הרץ בדיקות למודול ספציפי:**
+**הפעל בדיקות למודול מסוים:**
**Bash:**
```bash
cd 01-introduction && mvn test
-# או מהשורש
+# או משורש
mvn test -pl 01-introduction
```
@@ -79,7 +78,7 @@ cd 01-introduction; mvn --% test
mvn --% test -pl 01-introduction
```
-**הרץ מחלקת בדיקות אחת:**
+**הרץ מחלקת בדיקה יחידה:**
**Bash:**
```bash
@@ -105,31 +104,31 @@ mvn --% test -Dtest=SimpleConversationTest#יש לשמור על היסטוריי
## הרצת בדיקות ב-VS Code
-אם אתה משתמש ב-Visual Studio Code, חלון Test Explorer מספק ממשק גרפי להרצה ודיבוג של הבדיקות.
+אם אתה משתמש ב-Visual Studio Code, התוסף Test Explorer מספק ממשק גרפי להרצה ודיבוג של בדיקות.
-*חלון VS Code Test Explorer המציג עץ בדיקות עם כל מחלקות הבדיקה בג׳אווה ושיטות בדיקה בודדות*
+*Test Explorer ב-VS Code המציג את עץ הבדיקות עם כל מחלקות בדיקות Java ושיטות בדיקה פרטניות*
-**כיצד להפעיל בדיקות ב-VS Code:**
+**להריץ בדיקות ב-VS Code:**
-1. פתח את Test Explorer על ידי לחיצה על סמל הכור במערכת הפעילות
-2. פתח את עץ הבדיקות בכדי לראות את כל המודולים ומחלקות הבדיקה
-3. לחץ על כפתור ההפעלה ליד כל בדיקה להפעלה בודדת שלה
-4. לחץ על "הרץ את כל הבדיקות" כדי להריץ את כל הסט
-5. לחץ על הכפתור הימני בכל בדיקה ובחר "Debug Test" להגדרת נקודות עצירה ושלב דרך הקוד
+1. פתח את Test Explorer על ידי לחיצה על סמל המבחנה בסרגל הפעילות
+2. הרחב את עץ הבדיקות כדי לראות את כל המודולים ומחלקות הבדיקה
+3. לחץ על כפתור ההפעלה ליד כל בדיקה כדי להריץ אותה בנפרד
+4. לחץ על "Run All Tests" להריץ את כל המבחנים ביחד
+5. לחץ קליק ימני על בדיקה ובחר "Debug Test" כדי להגדיר נקודות עצירה ולנווט בקוד
-האקספלורר מציג סימני וי ירוקים לבדיקות שעוברות ומספק הודעות כשל מפורטות כשיש כישלון.
+Test Explorer מראה סימני ביקורת ירוקים עבור בדיקות שעוברות ומספק הודעות כשל מפורטות כשביצוע נכשל.
-## דפוסי בדיקה
+## תבניות בדיקה
-### דפוס 1: בדיקת תבניות פקודות
+### תבנית 1: בדיקת תבניות פרומפט
-הדפוס הפשוט ביותר בודק תבניות פקודות מבלי לקרוא למודל AI. אתה מוודא שהחלפת המשתנים עובדת כהלכה והפקודות מעוצבות כצפוי.
+התבנית הפשוטה ביותר בודקת תבניות פרומפט בלי לקרוא למודל AI. אתה מוודא שהחלפת המשתנים מתבצעת כראוי והפרומפטים מעוצבים כנדרש.
-
+
-*בדיקת תבניות פקודות המראה את זרימת החלפת המשתנים: תבנית עם מקומות מילוי → ערכים מוחלים → הפלט המעוצב נבדק*
+*בדיקת תבניות פרומפט המציגה את זרימת החלפת המשתנים: תבנית עם מחסני מקומות → ערכים מוחלים → פלט מעוצב מאומת*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-בדיקה זו נמצאת ב־`00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
-
-**הפעל אותה:**
-
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#בדיקת עיצוב תבנית ההנחיה
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#פורמט תבנית הבקשה למבחן
-```
+תבנית זו מאמתת שהחלפת משתנים עובדת כראוי והפרומפטים מעוצבים כנדרש — ללא צורך במפתח API או קריאת מודל.
-### דפוס 2: יצירת דגמים מדומים (Mocking)
+### תבנית 2: יצירת מודלים מדומים (Mocking)
-כשבודקים לוגיקת שיחה, השתמש ב-Mockito ליצירת דגמים מדומים שמחזירים תגובות קבועות מראש. זה מייעל את הבדיקות והופך אותן למהירות, חינמיות ודטרמיניסטיות.
+כשבודקים לוגיקת שיחה, משתמשים ב-Mockito ליצירת מודלים מדומים שמחזירים תגובות מוכנות מראש. זה הופך את הבדיקות למהירות, חינמיות ודטרמיניסטיות.
-
+
-*השוואה שמדגימה מדוע עדיף להשתמש בדגמי מוק עבור בדיקות: הם מהירים, חינמיים, ודטרמיניסטיים ובנוסף אינם דורשים מפתחות API*
+*השוואה המדגימה למה Mocks מועדפים בבדיקות: הם מהירים, חינמיים, דטרמיניסטיים, ולא דורשים מפתחות API*
```java
@ExtendWith(MockitoExtension.class)
@@ -218,15 +205,15 @@ class SimpleConversationTest {
}
```
-דפוס זה מופיע ב־`01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. המוק מבטיח התנהגות עקבית כך שניתן לוודא שזיכרון השיחה מנוהל כהלכה.
+תבנית זו מופיעה בקובץ `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. ה-Mock מקנה התנהגות עקבית כך שתוכל לבדוק ניהול זיכרון נכון.
-### דפוס 3: בדיקת בידוד שיחה
+### תבנית 3: בדיקת בידוד שיחות
-זיכרון השיחה חייב להפריד בין משתמשים שונים. בדיקה זו מוודאת ששיחות לא מתערבבות זו בזו.
+זיכרון השיחה חייב להפריד בין משתמשים שונים. בדיקה זו מאמתת ששיחות לא מערבלות הקשרים.
-
+
-*בדיקת בידוד שיחה שמראה ניתוב זיכרונות נפרדים למשתמשים שונים למניעת עירבוב הקשר*
+*בדיקת בידוד שיחות המראה חנויות זיכרון נפרדות למשתמשים שונים למניעת ערבוב הקשרים*
```java
@Test
@@ -250,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-כל שיחה שומרת היסטוריה עצמאית משלה. במערכות ייצור, הבידוד הזה הוא קריטי ליישומים מרובי משתמשים.
+כל שיחה שומרת היסטוריה נפרדת משלה. במערכות פרודקשן הבידוד הזה קריטי ליישומים עם משתמשים מרובים.
-### דפוס 4: בדיקת כלים באופן עצמאי
+### תבנית 4: בדיקת כלים בנפרד
-כלים הם פונקציות שה-AI יכול לקרוא להן. בדוק אותם ישירות כדי לוודא שהם עובדים נכון בלי תלות בהחלטות AI.
+כלים הם פונקציות שה-AI יכול לקרוא להן. בדוק אותם ישירות כדי לוודא שהם עובדים כראוי ללא תלות בהחלטות של ה-AI.
-
+
-*בדיקת כלים באופן עצמאי המראה הפעלת כלים מדומים ללא קריאות AI לאימות הלוגיקה העסקית*
+*בדיקת כלים בצורה עצמאית המציגה הרצת כלים מדומים ללא קריאות AI כדי לוודא לוגיקת עסקים*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-בדיקות אלו מ־`04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` מאמתות לוגיקת כלים ללא מעורבות AI. דוגמת הרצף מראה כיצד פלט של כלי אחד מוזן כקלט לאחר.
+בדיקות אלו מקובץ `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` מאמתות לוגיקת כלים בלי מעורבות AI. דוגמת השרשור מראה כיצד פלט של כלי אחד מוזן לקלט של כלי אחר.
-### דפוס 5: בדיקת RAG בזיכרון
+### תבנית 5: בדיקת RAG בזיכרון
-מערכות RAG במקור דורשות מסדי נתונים וקטוריים ושירותי הטמעות. דפוס הבדיקה בזיכרון מאפשר לבדוק את כל הצינור ללא תלות חיצונית.
+מערכות RAG בדרך כלל דורשות מאגרי וקטורים ושירותי הטמעות. תבנית בזיכרון מאפשרת לך לבדוק את כל הצינור בלי תלות חיצונית.
-
+
-*זרימת בדיקת RAG בזיכרון שמדגימה ניתוח מסמכים, אחסון הטמעות, וחיפוש דמיון ללא צורך במסד נתונים*
+*זרימת עבודה לבדיקה בזיכרון של RAG המציגה ניתוח מסמכים, אחסון הטמעות וחיפוש דמיון ללא צורך במסד נתונים*
```java
@Test
@@ -306,15 +293,15 @@ void testProcessTextDocument() {
}
```
-בדיקה זו מ־`03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` יוצרת מסמך בזיכרון ובודקת את פיצולו ואת ניהול המידע המטא.
+בדיקה זו מקובץ `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` יוצרת מסמך בזיכרון ומאמתת פרגמנטציה וניהול מטא-נתונים.
-### דפוס 6: בדיקת אינטגרציה של MCP
+### תבנית 6: בדיקת אינטגרציה MCP
-מודול MCP בודק את אינטגרציית פרוטוקול הקשר לדגם באמצעות תקשורת stdio. בדיקות אלו בודקות שהיישום שלך יכול ליצור ולתקשר עם שרתי MCP כתהליכים משניים.
+מודול MCP בודק אינטגרציה של פרוטוקול הקשר מודל עם העברת stdio. בדיקות אלו מאמתות שהאפליקציה שלך יכולה להפעיל ולתקשר עם שרתי MCP כתהליכים משניים.
-בדיקות ב־`05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` מאמתות את התנהגות לקוח MCP.
+הבדיקות ב-`05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` מאמתות התנהגות לקוח MCP.
-**הפעל אותן:**
+**הרץ אותן:**
**Bash:**
```bash
@@ -328,28 +315,27 @@ cd 05-mcp; mvn --% test
## פילוסופיית בדיקה
-בדוק את הקוד שלך, לא את ה-AI. הבדיקות שלך צריכות לאמת את הקוד שכתבת על ידי בדיקה כיצד נבנות הפקודות, כיצד מנוהל הזיכרון וכיצד הכלים מתבצעים. תגובות AI משתנות ואינן צריכות להיות חלק מההנחות בבדיקה. שאל את עצמך האם תבנית הפקודה שלך מחליפה משתנים כראוי, לא האם ה-AI נותן את התשובה הנכונה.
+בדוק את הקוד שלך, לא את ה-AI. הבדיקות שלך אמורות לוודא את הקוד שכתבת על ידי בדיקת אופן בניית הפרומפטים, ניהול הזיכרון והפעלת הכלים. תגובות ה-AI משתנות ואסור שיהיו חלק מהוספות הבדיקות. שאל את עצמך אם תבנית הפרומפט מחליפה משתנים כראוי, לא אם ה-AI נותן את התשובה הנכונה.
-השתמש במוקים לדגמי השפה. אלה תלות חיצונית שיכולה להיות איטית, יקרה ואינה דטרמיניסטית. מוקים מקצרים את זמן הבדיקה למילישניות במקום שניות, חינמיים ללא עלויות API, ודטרמיניסטיים עם תוצאה זהה בכל פעם.
+השתמש ב-Mocks עבור מודלי שפה. הם תלות חיצונית שאיטית, יקרה, ולא דטרמיניסטית. Mocking הופך את הבדיקות למהירות תוך מילישניות במקום שניות, חינמיות ללא עלויות API, ודטרמיניסטיות עם אותו תוצאה בכל פעם.
-שמור על בדיקות עצמאיות. כל בדיקה צריכה להגדיר את הנתונים שלה, לא להסתמך על בדיקות אחרות, ולנקות אחריה. בדיקות צריכות לעבור בכל סדר הרצה.
+שמור על בדיקות עצמאיות. כל בדיקה צריכה להגדיר את הנתונים שלה, לא להסתמך על בדיקות אחרות, ולנקות אחריה. בדיקות צריכות לעבור ללא תלות בסדר הריצה.
-בדוק מקרים קיצוניים מעבר לדרך הטבעית. נסה קלטים ריקים, גדולים מאוד, תווים מיוחדים, פרמטרים לא תקינים, ותנאי גבול. אלה לעיתים חושפים באגים שלא מופיעים בשימוש רגיל.
+בדוק מקרים קיצוניים מעבר לנתיב המאושר. נסה קלטים ריקים, קלטים מאוד גדולים, תווים מיוחדים, פרמטרים לא תקינים ותנאי גבול. אלו לעיתים חושפים באגים ששימוש רגיל לא מראה.
-השתמש בשמות תיאורים. השווה בין `shouldMaintainConversationHistoryAcrossMultipleMessages()` ל־`test1()`. הראשון אומר בדיוק מה נבדק, מה שמקל על איתור תקלות.
+השתמש בשמות תיאוריים. השווה בין `shouldMaintainConversationHistoryAcrossMultipleMessages()` ל- `test1()`. הראשון אומר במדויק מה נבדק, מה שמקל מאוד על איתור כשלונות ודיבוג.
-## השלבים הבאים
+## שלבים הבאים
-כעת כשאתה מבין את דפוסי הבדיקה, צלול עמוק יותר בכל מודול:
+כעת כאשר הבנת את תבניות הבדיקה, העמק בכל מודול:
-- **[00 - התחלה מהירה](../00-quick-start/README.md)** - התחיל מבסיס תבניות פקודות
-- **[01 - מבוא](../01-introduction/README.md)** - למד ניהול זיכרון שיחה
-- **[02 - הנדסת פקודות](../02/prompt-engineering/README.md)** - התמחה בדפוסי הנעת GPT-5.2
-- **[03 - RAG](../03-rag/README.md)** - בנה מערכות יצור-מגובה בדילוגים
-- **[04 - כלים](../04-tools/README.md)** - מימש קריאות לפונקציות ורצפי כלים
-- **[05 - MCP](../05-mcp/README.md)** - שלב פרוטוקול הקשר לדגם
+- **[01 - מבוא](../01-introduction/README.md)** - למד ניהול זיכרון שיחות
+- **[02 - הנדסת פרומפטים](../02-prompt-engineering/README.md)** - לשלוט בדפוסי פרומפט GPT-5.2
+- **[03 - RAG](../03-rag/README.md)** - בנה מערכות יצירה מוגברות בעזרת אחזור
+- **[04 - כלים](../04-tools/README.md)** - יישם קריאת פונקציות ושרשראות כלים
+- **[05 - MCP](../05-mcp/README.md)** - שלב את פרוטוקול הקשר מודל
-קובצי README של כל מודול מספקים הסברים מפורטים על המושגים הנבדקים כאן.
+קובץ README של כל מודול מספק הסברים מפורטים על המושגים שנבדקו כאן.
---
@@ -358,6 +344,6 @@ cd 05-mcp; mvn --% test
---
-**כתב ויתור**:
-מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדייק, יש להבחין כי תרגומים אוטומטיים עלולים לכלול שגיאות או אי דיוקים. המסמך המקורי בשפת המקור שלו הוא המקור הסמכותי. עבור מידע קריטי מומלץ להיעזר בתרגום מקצועי אנושי. אנו לא נושאים באחריות לכל אי הבנה או פרשנות שגויה הנובעת משימוש בתרגום זה.
+**כתב ויתור**:
+מסמך זה תורגם באמצעות שירות תרגום אוטומטי [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. יש להחשיב את המסמך המקורי בשפתו הטבעית כמקור הסמכות. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי מתרגם אדם. אנו לא אחראים לכל אי-הבנה או פירוש שגוי הנובע מהשימוש בתרגום זה.
\ No newline at end of file
diff --git a/translations/hi/.co-op-translator.json b/translations/hi/.co-op-translator.json
index dbf77c759..632753a94 100644
--- a/translations/hi/.co-op-translator.json
+++ b/translations/hi/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "hi"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-02T23:09:50+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T07:54:35+00:00",
"source_file": "01-introduction/README.md",
"language_code": "hi"
},
@@ -18,20 +18,20 @@
"language_code": "hi"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-02T23:12:14+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T07:49:34+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "hi"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-02T23:13:36+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T07:53:32+00:00",
"source_file": "03-rag/README.md",
"language_code": "hi"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T09:02:52+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T07:52:02+00:00",
"source_file": "04-tools/README.md",
"language_code": "hi"
},
@@ -54,8 +54,8 @@
"language_code": "hi"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T15:44:29+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T07:48:00+00:00",
"source_file": "README.md",
"language_code": "hi"
},
@@ -72,14 +72,14 @@
"language_code": "hi"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-02T23:17:02+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T07:50:01+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "hi"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-02T23:17:46+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T07:50:42+00:00",
"source_file": "docs/TESTING.md",
"language_code": "hi"
}
diff --git a/translations/hi/00-quick-start/README.md b/translations/hi/00-quick-start/README.md
deleted file mode 100644
index 20d683bab..000000000
--- a/translations/hi/00-quick-start/README.md
+++ /dev/null
@@ -1,386 +0,0 @@
-# Module 00: क्विक स्टार्ट
-
-## Table of Contents
-
-- [परिचय](../../../00-quick-start)
-- [LangChain4j क्या है?](../../../00-quick-start)
-- [LangChain4j निर्भरताएँ](../../../00-quick-start)
-- [पूर्वापेक्षाएँ](../../../00-quick-start)
-- [सेटअप](../../../00-quick-start)
- - [1. अपना GitHub टोकन प्राप्त करें](../../../00-quick-start)
- - [2. अपना टोकन सेट करें](../../../00-quick-start)
-- [उदाहरण चलाएँ](../../../00-quick-start)
- - [1. बेसिक चैट](../../../00-quick-start)
- - [2. प्रॉम्प्ट पैटर्न](../../../00-quick-start)
- - [3. फंक्शन कॉलिंग](../../../00-quick-start)
- - [4. दस्तावेज़ प्रश्नोत्तर (आसान RAG)](../../../00-quick-start)
- - [5. ज़िम्मेदार AI](../../../00-quick-start)
-- [प्रत्येक उदाहरण क्या दिखाता है](../../../00-quick-start)
-- [अगले कदम](../../../00-quick-start)
-- [समस्या निवारण](../../../00-quick-start)
-
-## परिचय
-
-यह क्विकस्टार्ट आपको LangChain4j के साथ यथाशीघ्र शुरूआत करने के लिए बनाया गया है। यह LangChain4j और GitHub मॉडल के साथ AI एप्लिकेशन बनाने के सबसे बुनियादी पहलुओं को कवर करता है। अगले मॉड्यूल में आप Azure OpenAI और GPT-5.2 पर स्विच करेंगे और प्रत्येक अवधारणा में गहराई से जाएँगे।
-
-## LangChain4j क्या है?
-
-LangChain4j एक Java लाइब्रेरी है जो AI-पावर्ड एप्लिकेशन बनाने को सरल बनाती है। HTTP क्लाइंट और JSON पार्सिंग से निपटने के बजाय, आप साफ़-सुथरे Java API के साथ काम करते हैं।
-
-LangChain में "चेन" का मतलब है कई घटकों को जोड़ना - आप प्रॉम्प्ट को मॉडल, फिर पार्सर से जोड़ सकते हैं, या कई AI कॉल्स को इस तरह जोड सकते हैं कि एक आउटपुट अगले इनपुट में जाए। यह क्विक स्टार्ट बुनियादी बातों पर केंद्रित है इससे पहले कि हम अधिक जटिल चेन पर जाएँ।
-
-
-
-*LangChain4j में घटकों का चेनिंग - शक्तिशाली AI वर्कफ़्लोज़ बनाने के लिए बिल्डिंग ब्लॉक्स जुड़ रहे हैं*
-
-हम तीन मुख्य घटकों का उपयोग करेंगे:
-
-**ChatModel** - AI मॉडल इंटरैक्शन का इंटरफ़ेस। `model.chat("prompt")` कॉल करें और प्रतिक्रिया प्राप्त करें। हम `OpenAiOfficialChatModel` का उपयोग करते हैं जो OpenAI-संगत एंडपॉइंट्स जैसे GitHub मॉडल के साथ काम करता है।
-
-**AiServices** - प्रकार-सुरक्षित AI सेवा इंटरफेस बनाता है। मेथड्स परिभाषित करें, उन्हें `@Tool` से एनोटेट करें, और LangChain4j ऑर्केस्ट्रेशन संभालता है। AI आवश्यकता होने पर आपके Java मेथड्स को स्वचालित रूप से कॉल करता है।
-
-**MessageWindowChatMemory** - बातचीत का इतिहास बनाए रखता है। इसके बिना, प्रत्येक अनुरोध स्वतंत्र होता है। इसके साथ, AI पहले के संदेश याद रखता है और कई टर्न्स में संदर्भ बनाए रखता है।
-
-
-
-*LangChain4j आर्किटेक्चर - मुख्य घटक एक साथ मिलकर आपके AI एप्लिकेशन को चलाते हैं*
-
-## LangChain4j निर्भरताएँ
-
-यह क्विकस्टार्ट तीन Maven निर्भरताओं का उपयोग करता है [`pom.xml`](../../../00-quick-start/pom.xml) में:
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-`langchain4j-open-ai-official` मॉड्यूल `OpenAiOfficialChatModel` क्लास प्रदान करता है जो OpenAI-संगत API से जुड़ता है। GitHub मॉडल्स इसी API फॉर्मेट का उपयोग करते हैं, इसलिए किसी विशेष अडैप्टर की आवश्यकता नहीं - बस बेस URL को `https://models.github.ai/inference` पर सेट करें।
-
-`langchain4j-easy-rag` मॉड्यूल दस्तावेज़ों को स्वचालित रूप से विभाजित, एम्बेड और पुनः प्राप्त करने की सुविधा देता है ताकि आप बिना मैनुअल कॉन्फ़िगरेशन के RAG एप्लिकेशन बना सकें।
-
-## पूर्वापेक्षाएँ
-
-**डेव कंटेनर का उपयोग कर रहे हैं?** Java और Maven पहले से इंस्टॉल हैं। आपको केवल GitHub पर्सनल एक्सेस टोकन चाहिए।
-
-**लोकल विकास:**
-- Java 21+, Maven 3.9+
-- GitHub पर्सनल एक्सेस टोकन (नीचे निर्देश)
-
-> **नोट:** इस मॉड्यूल में GitHub मॉडल से `gpt-4.1-nano` का उपयोग होता है। कोड में मॉडल नाम को संशोधित न करें - यह GitHub के उपलब्ध मॉडलों के साथ काम करने के लिए कॉन्फ़िगर किया गया है।
-
-## सेटअप
-
-### 1. अपना GitHub टोकन प्राप्त करें
-
-1. जाएँ [GitHub Settings → Personal Access Tokens](https://github.com/settings/personal-access-tokens)
-2. "Generate new token" पर क्लिक करें
-3. एक वर्णनात्मक नाम सेट करें (जैसे "LangChain4j Demo")
-4. समय समाप्ति सेट करें (7 दिन अनुशंसित)
-5. "Account permissions" में "Models" खोजें और इसे "Read-only" पर सेट करें
-6. "Generate token" क्लिक करें
-7. टोकन कॉपी करें और सुरक्षित रखें — आप इसे फिर नहीं देख पाएंगे
-
-### 2. अपना टोकन सेट करें
-
-**विकल्प 1: VS Code का उपयोग करके (अनुशंसित)**
-
-अगर आप VS Code उपयोग कर रहे हैं, तो अपनी टोकन प्रोजेक्ट रूट में `.env` फ़ाइल में जोड़ें:
-
-अगर `.env` फ़ाइल मौजूद नहीं है, तो `.env.example` को `.env` में कॉपी करें या प्रोजेक्ट रूट में नई `.env` फ़ाइल बनाएं।
-
-**`.env` फ़ाइल का उदाहरण:**
-```bash
-# /workspaces/LangChain4j-for-Beginners/.env में
-GITHUB_TOKEN=your_token_here
-```
-
-फिर आप आसानी से Explorer में किसी भी डेमो फ़ाइल (जैसे `BasicChatDemo.java`) पर राइट-क्लिक कर **"Run Java"** चुन सकते हैं या रन और डिबग पैनल से लॉन्च कॉन्फ़िगरेशन का उपयोग कर सकते हैं।
-
-**विकल्प 2: टर्मिनल का उपयोग करके**
-
-टोकन को पर्यावरण चर के रूप में सेट करें:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## उदाहरण चलाएँ
-
-**VS Code का उपयोग करते हुए:** Explorer में किसी भी डेमो फ़ाइल पर राइट-क्लिक करके **"Run Java"** चुनें, या रन और डिबग पैनल से लॉन्च कॉन्फ़िगरेशन का उपयोग करें (पहले सुनिश्चित करें कि आपने अपना टोकन `.env` फ़ाइल में जोड़ दिया है)।
-
-**Maven का उपयोग करते हुए:** वैकल्पिक रूप से, आप कमांड लाइन से चला सकते हैं:
-
-### 1. बेसिक चैट
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. प्रॉम्प्ट पैटर्न
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-यह ज़ीरो-शॉट, फ्यू-शॉट, चेन-ऑफ-थॉट और रोल-आधारित प्रॉम्प्टिंग दिखाता है।
-
-### 3. फंक्शन कॉलिंग
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-AI आपकी Java विधियों को आवश्यकतानुसार स्वचालित कॉल करता है।
-
-### 4. दस्तावेज़ प्रश्नोत्तर (आसान RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-आसानी से RAG के साथ अपने दस्तावेज़ों के बारे में प्रश्न पूछें जिसमें स्वचालित एम्बेडिंग और पुनः प्राप्ति होती है।
-
-### 5. ज़िम्मेदार AI
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-देखें कि AI सुरक्षा फ़िल्टर हानिकारक सामग्री को कैसे ब्लॉक करते हैं।
-
-## प्रत्येक उदाहरण क्या दिखाता है
-
-**बेसिक चैट** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-यहाँ से शुरू करें ताकि LangChain4j को सबसे सरल रूप में देखें। आप एक `OpenAiOfficialChatModel` बनाएंगे, `.chat()` के साथ एक प्रॉम्प्ट भेजेंगे, और प्रतिक्रिया प्राप्त करेंगे। यह आधार दिखाता है: कस्टम एंडपॉइंट और API कुंजी के साथ मॉडल को कैसे इनिशियलाइज़ करें। एक बार जब आप इस पैटर्न को समझ लेते हैं, तो बाकी सब कुछ इसी पर बनता है।
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ कोशिश करें:** [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) खोलें और पूछें:
-> - "मैं इस कोड में GitHub Models से Azure OpenAI पर कैसे स्विच करूं?"
-> - "OpenAiOfficialChatModel.builder() में मैं कौन से अन्य पैरामीटर कॉन्फ़िगर कर सकता हूँ?"
-> - "पूरी प्रतिक्रिया की प्रतीक्षा करने के बजाय स्ट्रीमिंग प्रतिक्रिया कैसे जोड़ूं?"
-
-**प्रॉम्प्ट इंजीनियरिंग** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-अब जब आप मॉडल से बात करना जानते हैं, चलिए देखते हैं कि आप उससे क्या कहते हैं। यह डेमो उसी मॉडल सेटअप का उपयोग करता है लेकिन पाँच अलग-अलग प्रॉम्प्टिंग पैटर्न दिखाता है। सीधे निर्देशों के लिए ज़ीरो-शॉट प्रॉम्प्ट, उदाहरणों से सीखने वाले फ्यू-शॉट प्रॉम्प्ट, तर्क के चरण दिखाने वाले चेन-ऑफ-थॉट प्रॉम्प्ट, और संदर्भ सेट करने वाले रोल-आधारित प्रॉम्प्ट ट्राई करें। आप देखेंगे कि आपकी फ्रेमिंग के आधार पर एक ही मॉडल कैसे काफी अलग परिणाम देता है।
-
-यह डेमो प्रॉम्प्ट टेम्प्लेट्स को भी दिखाता है, जो वेरिएबल्स के साथ पुन: प्रयोज्य प्रॉम्प्ट बनाने का एक शक्तिशाली तरीका है। नीचे का उदाहरण LangChain4j `PromptTemplate` का उपयोग कर वेरिएबल्स भरने वाला प्रॉम्प्ट दिखाता है। AI प्रदान किए गए गंतव्य और गतिविधि के आधार पर जवाब देगा।
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ कोशिश करें:** [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) खोलें और पूछें:
-> - "ज़ीरो-शॉट और फ्यू-शॉट प्रॉम्प्टिंग में क्या अंतर है, और मुझे कब कौन सा उपयोग करना चाहिए?"
-> - "तापमान पैरामीटर मॉडल की प्रतिक्रियाओं को कैसे प्रभावित करता है?"
-> - "प्रोडक्शन में प्रॉम्प्ट इंजेक्शन हमलों को रोकने के लिए कौन सी तकनीकें हैं?"
-> - "सामान्य पैटर्न के लिए पुन: प्रयोज्य PromptTemplate ऑब्जेक्ट कैसे बनाएं?"
-
-**टूल इंटीग्रेशन** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-यहाँ LangChain4j शक्तिशाली हो जाता है। आप `AiServices` का उपयोग करके एक AI सहायक बनाएंगे जो आपकी Java मेथड्स कॉल कर सके। बस मेथड्स को `@Tool("description")` से एनोटेट करें और LangChain4j बाकी संभालता है - AI उपयोगकर्ता के प्रश्नों के आधार पर स्वचालित रूप से प्रत्येक टूल का उपयोग करता है। यह फंक्शन कॉलिंग प्रदर्शित करता है, AI को कार्रवाई करने में सक्षम बनाने की एक प्रमुख तकनीक, केवल प्रश्नों के जवाब देने के बजाय।
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ कोशिश करें:** [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) खोलें और पूछें:
-> - "`@Tool` एनोटेशन कैसे काम करता है और LangChain4j इसके साथ पीछे क्या करता है?"
-> - "क्या AI जटिल समस्याओं को हल करने के लिए कई टूल्स को अनुक्रम में कॉल कर सकता है?"
-> - "अगर कोई टूल अपवाद फेंकता है तो क्या होता है - मुझे त्रुटियों को कैसे संभालना चाहिए?"
-> - "मैं इस कैलकुलेटर उदाहरण की जगह वास्तविक API कैसे जोड़ूँ?"
-
-**दस्तावेज़ प्रश्नोत्तर (आसान RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-यहाँ आप LangChain4j के "Easy RAG" दृष्टिकोण का उपयोग करते हुए RAG (रिट्रीवल-ऑगमेंटेड जनरेशन) देखेंगे। दस्तावेज़ लोड किए जाते हैं, स्वचालित रूप से विभाजित और एम्बेडेड होते हैं एक मेमोरी स्टोर में, फिर एक कंटेंट रिट्रीवर AI को क्वेरी के समय प्रासंगिक टुकड़े देता है। AI आपके दस्तावेज़ों के आधार पर उत्तर देता है, अपनी सामान्य जानकारी के नहीं।
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ कोशिश करें:** [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) खोलें और पूछें:
-> - "मॉडल के प्रशिक्षण डेटा की तुलना में RAG AI मतिभ्रम कैसे रोकता है?"
-> - "यह आसान तरीका और कस्टम RAG पाइपलाइन में क्या अंतर है?"
-> - "मैं इसे कई दस्तावेज़ों या बड़े ज्ञान भंडारों के लिए कैसे स्केल करूँ?"
-
-**ज़िम्मेदार AI** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-गतिरोध में रक्षा के साथ AI सुरक्षा बनाएं। यह डेमो दो सुरक्षा स्तर दिखाता है जो एक साथ काम करते हैं:
-
-**भाग 1: LangChain4j इनपुट गार्डरेल्स** - खतरनाक प्रॉम्प्ट्स को LLM तक पहुँचने से पहले ब्लॉक करें। कस्टम गार्डरेल्स बनाएं जो निषिद्ध कीवर्ड या पैटर्न की जांच करते हैं। ये आपके कोड में चलते हैं, इसलिए तेज़ और मुफ़्त होते हैं।
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**भाग 2: प्रदाता सुरक्षा फ़िल्टर** - GitHub मॉडल्स में अंतर्निहित फ़िल्टर हैं जो आपकी गार्डरेल्स से छूट गए मुद्दों को पकड़ते हैं। आप कड़े ब्लॉक्स (HTTP 400 त्रुटियां) गंभीर उल्लंघनों के लिए और सौम्य इनकार जहाँ AI विनम्रता से मना करता है, देखेंगे।
-
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ कोशिश करें:** [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) खोलें और पूछें:
-> - "InputGuardrail क्या है और मैं अपना खुद का कैसे बनाऊँ?"
-> - "कठोर ब्लॉक और सौम्य इनकार में क्या अंतर है?"
-> - "गार्डरेल्स और प्रदाता फ़िल्टर दोनों एक साथ क्यों उपयोग करें?"
-
-## अगले कदम
-
-**अगला मॉड्यूल:** [01-परेचय - LangChain4j के साथ शुरुआत](../01-introduction/README.md)
-
----
-
-**नेपालिकेशन:** [← मुख्य पृष्ठ पर वापस](../README.md) | [अगला: मॉड्यूल 01 - परिचय →](../01-introduction/README.md)
-
----
-
-## समस्या निवारण
-
-### पहली बार Maven बिल्ड
-
-**समस्या**: शुरुआत में `mvn clean compile` या `mvn package` में लंबा समय लगता है (10-15 मिनट)
-
-**कारण**: Maven को पहली बार सभी प्रोजेक्ट निर्भरताएँ (Spring Boot, LangChain4j लाइब्रेरीज़, Azure SDK, आदि) डाउनलोड करनी होती हैं।
-
-**समाधान**: यह सामान्य व्यवहार है। अगली बार बिल्ड बहुत तेज़ होंगे क्योंकि निर्भरताएँ स्थानीय रूप से कैश हो जाती हैं। डाउनलोड समय आपके नेटवर्क की गति पर निर्भर करता है।
-
-### PowerShell Maven कमांड सिंटैक्स
-
-**समस्या**: Maven कमांड विफल होती हैं और त्रुटि देती हैं `Unknown lifecycle phase ".mainClass=..."`
-**कारण**: PowerShell `=` को एक वैरिएबल असाइनमेंट ऑपरेटर के रूप में समझता है, जिससे Maven प्रॉपर्टी सिंटैक्स टूट जाता है
-
-**समाधान**: Maven कमांड से पहले स्टॉप-पार्सिंग ऑपरेटर `--%` का उपयोग करें:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-`--%` ऑपरेटर PowerShell को बताता है कि वह शेष सभी तर्कों को बिना किसी व्याख्या के सीधे Maven को भेज दे।
-
-### Windows PowerShell इमोजी डिस्प्ले
-
-**समस्या**: AI प्रतिक्रियाएं PowerShell में इमोजी के बजाय गड़बड़ अक्षर (जैसे `????` या `â??`) दिखाती हैं
-
-**कारण**: PowerShell की डिफ़ॉल्ट एन्कोडिंग UTF-8 इमोजी का समर्थन नहीं करती
-
-**समाधान**: Java एप्लिकेशन चलाने से पहले यह कमांड चलाएं:
-```cmd
-chcp 65001
-```
-
-यह टर्मिनल में UTF-8 एन्कोडिंग को मजबूर करता है। विकल्प के रूप में, Windows Terminal का उपयोग करें जिसमें बेहतर यूनिकोड समर्थन होता है।
-
-### API कॉल्स डिबगिंग
-
-**समस्या**: AI मॉडल से ऑथेंटिकेशन त्रुटियां, रेट लिमिट्स, या अप्रत्याशित प्रतिक्रियाएं
-
-**समाधान**: उदाहरणों में `.logRequests(true)` और `.logResponses(true)` शामिल हैं ताकि API कॉल्स कंसोल में दिखाई दें। यह ऑथेंटिकेशन त्रुटियों, रेट लिमिट्स, या अप्रत्याशित प्रतिक्रियाओं की जाँच में मदद करता है। प्रोडक्शन में यह फ्लैग हटा दें ताकि लॉग शोर कम हो।
-
----
-
-
-**अस्वीकरण**:
-इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्राधिकृत स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सलाह दी जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
-
\ No newline at end of file
diff --git a/translations/hi/01-introduction/README.md b/translations/hi/01-introduction/README.md
index e5383e512..8bad04af8 100644
--- a/translations/hi/01-introduction/README.md
+++ b/translations/hi/01-introduction/README.md
@@ -1,87 +1,87 @@
-# Module 01: LangChain4j के साथ शुरुआत करना
+# मॉड्यूल 01: LangChain4j के साथ शुरुआत करना
-## Table of Contents
+## सामग्री सूची
-- [Video Walkthrough](../../../01-introduction)
-- [What You'll Learn](../../../01-introduction)
-- [Prerequisites](../../../01-introduction)
-- [Understanding the Core Problem](../../../01-introduction)
-- [Understanding Tokens](../../../01-introduction)
-- [How Memory Works](../../../01-introduction)
-- [How This Uses LangChain4j](../../../01-introduction)
-- [Deploy Azure OpenAI Infrastructure](../../../01-introduction)
-- [Run the Application Locally](../../../01-introduction)
-- [Using the Application](../../../01-introduction)
- - [Stateless Chat (Left Panel)](../../../01-introduction)
- - [Stateful Chat (Right Panel)](../../../01-introduction)
-- [Next Steps](../../../01-introduction)
+- [वीडियो वाकथ्रू](#वीडियो-वाकथ्रू)
+- [आप क्या सीखेंगे](#आप-क्या-सीखेंगे)
+- [पूर्वापेक्षाएं](#पूर्वापेक्षाएं)
+- [मूल समस्या को समझना](#मूल-समस्या-को-समझना)
+- [टोकन को समझना](#टोकन-को-समझना)
+- [मेमोरी कैसे काम करती है](#मेमोरी-कैसे-काम-करती-है)
+- [यह LangChain4j का उपयोग कैसे करता है](#यह-langchain4j-का-उपयोग-कैसे-करता-है)
+- [Azure OpenAI इन्फ्रास्ट्रक्चर डिप्लॉय करें](#azure-openai-इन्फ्रास्ट्रक्चर-डिप्लॉय-करें)
+- [ऐप्लिकेशन को लोकली चलाएं](#ऐप्लिकेशन-को-लोकली-चलाएं)
+- [ऐप्लिकेशन का उपयोग](#ऐप्लिकेशन-का-उपयोग)
+ - [स्टेटलेस चैट (बायाँ पैनल)](#स्टेटलेस-चैट-बायाँ-पैनल)
+ - [स्टेटफुल चैट (दायाँ पैनल)](#स्टेटफुल-चैट-दायाँ-पैनल)
+- [अगले कदम](#अगले-कदम)
-## Video Walkthrough
+## वीडियो वाकथ्रू
-इस लाइव सत्र को देखें जो इस मॉड्यूल के साथ शुरुआत करने का तरीका समझाता है:
+इस लाइव सेशन को देखें जो इस मॉड्यूल के साथ शुरुआत करने के तरीके को समझाता है:
-
+
-## What You'll Learn
+## आप क्या सीखेंगे
-क्विक स्टार्ट में, आपने GitHub Models का उपयोग करके प्रॉम्प्ट भेजने, टूल कॉल करने, RAG पाइपलाइन बनाने और गार्डरिल्स टेस्ट करने के बारे में देखा। उन डेमो में संभावित कार्य दिखाई दिए — अब हम Azure OpenAI और GPT-5.2 पर स्विच करते हैं और उत्पादन-शैली के एप्लिकेशन बनाना शुरू करते हैं। यह मॉड्यूल संवादात्मक AI पर केंद्रित है जो संदर्भ याद रखता है और स्टेट बनाए रखता है — वे अवधारणाएँ जो क्विक स्टार्ट डेमो में उपयोग हुईं लेकिन स्पष्ट रूप से समझाई नहीं गईं।
+यह LangChain4j और Azure OpenAI के साथ आपकी शुरुआती बिंदु है। हम मूल बातों से शुरू करते हैं और उत्पादन-शैली के ऐप्लिकेशन बनाना शुरू करते हैं। यह मॉड्यूल वार्तालाप एआई पर केंद्रित है जो संदर्भ को याद रखता है और स्टेट को बनाए रखता है — जो प्रत्येक बाद के मॉड्यूल का आधार है।
-इस गाइड के दौरान हम Azure OpenAI के GPT-5.2 का उपयोग करेंगे क्योंकि इसकी उन्नत तर्क क्षमताएं विभिन्न पैटर्न के व्यवहार को अधिक स्पष्ट बनाती हैं। जब आप मेमोरी जोड़ते हैं, तो आप अंतर साफ़ देख पाएंगे। इससे यह समझना आसान हो जाता है कि प्रत्येक घटक आपके एप्लिकेशन में क्या लाता है।
+इस गाइड में हम Azure OpenAI का GPT-5.2 उपयोग करेंगे क्योंकि इसकी उन्नत तर्क क्षमताएँ विभिन्न पैटर्न के व्यवहार को अधिक स्पष्ट बनाती हैं। जब आप मेमोरी जोड़ेंगे, तो आप स्पष्ट रूप से अंतर देखेंगे। इससे यह समझना आसान हो जाता है कि प्रत्येक घटक आपके ऐप्लिकेशन में क्या लाता है।
-आप एक ऐसा एप्लिकेशन बनाएंगे जो दोनों पैटर्न प्रदर्शित करता है:
+आप एक ऐसा ऐप़ बनाएंगे जो दोनों पैटर्न प्रदर्शित करता है:
-**Stateless Chat** - प्रत्येक अनुरोध स्वतंत्र होता है। मॉडल को पिछली बातों की कोई जानकारी नहीं होती। यह वह पैटर्न है जो आपने क्विक स्टार्ट में उपयोग किया।
+**स्टेटलेस चैट** - प्रत्येक अनुरोध स्वतंत्र होता है। मॉडल को पिछले संदेशों की कोई याददाश्त नहीं होती। यह सबसे सरल शुरुआत है।
-**Stateful Conversation** - प्रत्येक अनुरोध में बातचीत का इतिहास शामिल होता है। मॉडल कई टर्न्स के बीच संदर्भ बनाए रखता है। यही वह आवश्यकताएँ होती हैं जो उत्पादन एप्लिकेशन के लिए होती हैं।
+**स्टेटफुल वार्तालाप** - प्रत्येक अनुरोध में वार्तालाप इतिहास शामिल होता है। मॉडल कई बार बातचीत के बीच संदर्भ बनाए रखता है। यही उत्पादन ऐप्लिकेशन के लिए आवश्यक है।
-## Prerequisites
+## पूर्वापेक्षाएं
-- Azure सदस्यता जिसमें Azure OpenAI एक्सेस हो
+- Azure सदस्यता जिसमें Azure OpenAI पहुंच हो
- Java 21, Maven 3.9+
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
-> **Note:** प्रदान किए गए devcontainer में Java, Maven, Azure CLI और Azure Developer CLI (azd) पहले से इंस्टॉल हैं।
+> **नोट:** Java, Maven, Azure CLI और Azure Developer CLI (azd) पहले से प्रदत्त devcontainer में इंस्टॉल हैं।
-> **Note:** यह मॉड्यूल Azure OpenAI पर GPT-5.2 का उपयोग करता है। डिप्लॉयमेंट `azd up` के माध्यम से स्वचालित रूप से कॉन्फ़िगर होता है - कोड में मॉडल नाम को परिवर्तन न करें।
+> **नोट:** यह मॉड्यूल Azure OpenAI पर GPT-5.2 का उपयोग करता है। डिप्लॉयमेंट `azd up` के माध्यम से स्वचालित रूप से कॉन्फ़िगर किया जाता है - कोड में मॉडल नाम को संशोधित न करें।
-## Understanding the Core Problem
+## मूल समस्या को समझना
-भाषा मॉडल स्वतंत्र होते हैं। प्रत्येक API कॉल स्वतंत्र होती है। यदि आप कहते हैं "मेरा नाम जॉन है" और फिर पूछते हैं "मेरा नाम क्या है?", तो मॉडल को पता नहीं होगा कि आपने अभी परिचय दिया है। यह हर अनुरोध को मानता है जैसे यह आपकी पहली बातचीत हो।
+भाषा मॉडल स्टेटलेस होते हैं। प्रत्येक API कॉल स्वतंत्र होती है। यदि आप "मेरा नाम जॉन है" भेजते हैं और फिर पूछते हैं "मेरा नाम क्या है?", तो मॉडल को इसका कोई ज्ञान नहीं होता कि आपने खुद को अभी पेश किया था। यह हर अनुरोध को ऐसा मानता है मानो यह आपकी पहली बातचीत हो।
-यह सरल प्रश्नोत्तर के लिए ठीक है लेकिन वास्तविक एप्लिकेशन के लिए नकारात्मक है। कस्टमर सर्विस बॉट को आपको कही गई बातें याद रखनी होती हैं। पर्सनल असिस्टेंट को संदर्भ की जरूरत होती है। कोई भी बहु-टर्न बातचीत मेमोरी की मांग करती है।
+यह साधारण प्रश्न-उत्तर के लिए ठीक है लेकिन वास्तविक ऐप्लिकेशन के लिए बेकार है। ग्राहक सेवा बॉट्स को यह याद रखना पड़ता है कि आपने उनसे क्या कहा था। व्यक्तिगत सहायक को संदर्भ चाहिए। कोई भी बहु-चरण वार्तालाप मेमोरी की मांग करता है।
-निम्नलिखित डायग्राम दोनों दृष्टिकोणों के बीच तुलना करता है — बाईं तरफ, एक स्वतंत्र कॉल जो आपका नाम भूल जाता है; दाईं तरफ, ChatMemory का सहारा लेकर एक Stateful कॉल जो नाम याद रखता है।
+निम्नलिखित चित्र दो दृष्टिकोणों को तुलना करता है — बाएं तरफ, स्टेटलेस कॉल जो आपका नाम भूल जाता है; दाएँ तरफ, ChatMemory द्वारा समर्थित स्टेटफुल कॉल जो नाम याद रखता है।
-
+
-*Stateless (स्वतंत्र कॉल) और Stateful (संदर्भ-संग्रहीत) बातचीत के बीच का अंतर*
+*स्टेटलेस (स्वतंत्र कॉल) और स्टेटफुल (संदर्भ-सचेत) वार्तालाप के बीच का अंतर*
-## Understanding Tokens
+## टोकन को समझना
-बातचीत में उतरने से पहले, टोकन को समझना महत्वपूर्ण है - ये मूलभूत इकाइयाँ हैं जो भाषा मॉडल टेक्स्ट को प्रोसेस करती हैं:
+वार्तालाप में डूबने से पहले, टोकन को समझना महत्वपूर्ण है - वह मूल यूनिट्स जिनका भाषा मॉडल द्वारा प्रसंस्करण किया जाता है:
-
+
-*कैसे टेक्स्ट को टोकनों में तोड़ा जाता है - "I love AI!" चार अलग-अलग प्रोसेसिंग यूनिट बन जाते हैं*
+*कैसे टेक्स्ट को टोकन में विभाजित किया जाता है - "I love AI!" 4 अलग-अलग प्रोसेसिंग यूनिट्स बन जाता है*
-टोकन AI मॉडल्स के लिए टेक्स्ट मापने और प्रोसेस करने का तरीका हैं। शब्द, विराम चिह्न, और यहां तक कि स्पेस भी टोकन हो सकते हैं। आपके मॉडल में यह सीमित होता है कि इसे एक बार में कितने टोकन प्रोसेस करने की अनुमति है (GPT-5.2 के लिए 400,000 कुल टोकन, जिसमें 272,000 तक इनपुट टोकन और 128,000 आउटपुट टोकन शामिल हैं)। टोकन को समझना बातचीत की लंबाई और लागत को नियंत्रित करने में मदद करता है।
+टोकन ही AI मॉडल टेक्स्ट को मापने और प्रोसेस करने का तरीका हैं। शब्द, विराम चिन्ह, और यहां तक कि स्थान भी टोकन हो सकते हैं। आपके मॉडल के पास एक सीमा होती है कि वह एक बार में कितने टोकन प्रोसेस कर सकता है (GPT-5.2 के लिए 400,000, जिसमें 272,000 इनपुट टोकन और 128,000 आउटपुट टोकन)। टोकन को समझना वार्तालाप की लंबाई और लागतों को प्रबंधित करने में मदद करता है।
-## How Memory Works
+## मेमोरी कैसे काम करती है
-चैट मेमोरी stateless समस्या को बातचीत के इतिहास को बनाए रखकर हल करता है। मॉडल को भेजने से पहले, फ्रेमवर्क प्रासंगिक पिछली संदेशों को जोड़ देता है। जब आप पूछते हैं "मेरा नाम क्या है?", सिस्टम पूरी बातचीत का इतिहास भेजता है ताकि मॉडल देख सके कि आपने पहले कहा था "मेरा नाम जॉन है।"
+चैट मेमोरी स्टेटलेस समस्या को वार्तालाप इतिहास को बनाए रखकर हल करती है। आपके अनुरोध को मॉडल को भेजने से पहले, फ्रेमवर्क प्रासंगिक पिछले संदेशों को जोड़ देता है। जब आप पूछते हैं "मेरा नाम क्या है?", तो सिस्टम वास्तव में पूरी वार्तालाप इतिहास भेजता है, जिससे मॉडल देख सकता है कि आपने पहले कहा था "मेरा नाम जॉन है।"
-LangChain4j मेमोरी इम्प्लीमेंटेशन प्रदान करता है जो यह सब स्वचालित रूप से संभालता है। आप चुनते हैं कि कितने संदेश रखे जाएं और फ्रेमवर्क संदर्भ विंडो प्रबंधित करता है। नीचे दिया गया डायग्राम दर्शाता है कि MessageWindowChatMemory हाल की संदेशों की एक स्लाइडिंग विंडो कैसे बनाए रखता है।
+LangChain4j मेमोरी कार्यान्वयन प्रदान करता है जो इसे स्वचालित रूप से संभालता है। आप यह चुनते हैं कि कितने संदेशों को रखना है और फ्रेमवर्क संदर्भ विंडो का प्रबंधन करता है। नीचे दिया गया चित्र दिखाता है कि MessageWindowChatMemory हाल के संदेशों की एक स्लाइडिंग विंडो कैसे बनाए रखता है।
-
+
-*MessageWindowChatMemory हाल की संदेशों की स्लाइडिंग विंडो बनाए रखता है, पुराने संदेश स्वतः हटा देता है*
+*MessageWindowChatMemory हाल के संदेशों की स्लाइडिंग विंडो बनाए रखता है, पुराने संदेशों को स्वचालित रूप से हटा देता है*
-## How This Uses LangChain4j
+## यह LangChain4j का उपयोग कैसे करता है
-यह मॉड्यूल क्विक स्टार्ट का विस्तार करता है, Spring Boot एकीकृत करता है और बातचीत की मेमोरी जोड़ता है। भाग इस तरह जुड़ते हैं:
+यह मॉड्यूल Spring Boot को इंटीग्रेट करता है और वार्तालाप मेमोरी जोड़ता है। यहाँ भाग कैसे जुड़े हैं:
-**Dependencies** - दो LangChain4j लाइब्रेरी जोड़ें:
+**डिपेंडेंसीज़** - दो LangChain4j लाइब्रेरीज़ जोड़ें:
```xml
@@ -94,7 +94,7 @@ LangChain4j मेमोरी इम्प्लीमेंटेशन प्
```
-**Chat Model** - Azure OpenAI को Spring bean के रूप में कॉन्फ़िगर करें ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+**चैट मॉडल** - Azure OpenAI को Spring bean के रूप में कॉन्फ़िगर करें ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -109,9 +109,9 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-बिल्डर `azd up` द्वारा सेट किए गए पर्यावरण चर से क्रेडेंशियल पढ़ता है। Azure OpenAI से जुड़ने के लिए `baseUrl` अपने Azure endpoint पर सेट करें।
+बिल्डर क्रेडेंशियल्स को `azd up` के द्वारा सेट किए गए पर्यावरण चर से पढ़ता है। `baseUrl` को आपके Azure endpoint पर सेट करने से OpenAI क्लाइंट Azure OpenAI के साथ काम करता है।
-**Conversation Memory** - MessageWindowChatMemory के साथ चैट इतिहास ट्रैक करें ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
+**वार्तालाप मेमोरी** - MessageWindowChatMemory के साथ चैट इतिहास को ट्रैक करें ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -124,39 +124,39 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-`withMaxMessages(10)` के साथ मेमोरी बनाएं ताकि आखिरी 10 संदेश रखें। उपयोगकर्ता और AI संदेश टाइप किए गए रैपर के साथ जोड़ें: `UserMessage.from(text)` और `AiMessage.from(text)`। इतिहास `memory.messages()` से प्राप्त करें और मॉडल को भेजें। सेवा प्रति बातचीत ID अलग मेमोरी उदाहरण संग्रहीत करती है, जिससे कई उपयोगकर्ता एक साथ चैट कर सकते हैं।
+`withMaxMessages(10)` के साथ मेमोरी बनाएं ताकि आखिरी 10 संदेश रखे जाएं। उपयोगकर्ता और AI संदेशों को टाइपेड रैपर से जोड़ें: `UserMessage.from(text)` और `AiMessage.from(text)`। इतिहास प्राप्त करें `memory.messages()` के साथ और इसे मॉडल को भेजें। सेवा हर वार्तालाप ID के लिए अलग मेमोरी इंस्टेंस संभालती है, जिससे कई उपयोगकर्ता एक साथ चैट कर सकते हैं।
-> **🤖 GitHub Copilot के साथ आज़माएं:** [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) खोलें और पूछें:
-> - "जब विंडो पूरी हो जाती है तो MessageWindowChatMemory कैसे निर्णय लेता है कि कौन से संदेश हटाने हैं?"
-> - "क्या मैं कस्टम मेमोरी स्टोरेज डेटाबेस के बजाय इन-मेमोरी के रूप में लागू कर सकता हूँ?"
-> - "पुराने बातचीत के इतिहास को संक्षेप करने के लिए मैं समरी कैसे जोड़ सकता हूँ?"
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ आज़माएं:** खोलें [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) और पूछें:
+> - "MessageWindowChatMemory कब किन संदेशों को छोड़ने का निर्णय करता है जब विंडो पूरी हो जाती है?"
+> - "क्या मैं इन-मेमोरी के बजाय डेटाबेस का उपयोग कर कस्टम मेमोरी स्टोरेज लागू कर सकता हूँ?"
+> - "पुराने वार्तालाप इतिहास को संक्षिप्त करने के लिए मैं सारांश जोड़ने का तरीका कैसे करूँ?"
-Stateless चैट endpoint मेमोरी पूरी तरह छोड़ देता है - केवल `chatModel.chat(prompt)` जैसा कि क्विक स्टार्ट में था। Stateful endpoint संदेश मेमोरी में जोड़ता है, इतिहास प्राप्त करता है, और उसे हर अनुरोध के साथ संदर्भ में शामिल करता है। मॉडल की कॉन्फ़िगरेशन समान, पैटर्न अलग।
+स्टेटलेस चैट एंडपॉइंट पूरी तरह मेमोरी को छोड़ देता है - बस `chatModel.chat(prompt)` जैसे त्वरित प्रारंभ। स्टेटफुल एंडपॉइंट मेमोरी में संदेश जोड़ता है, इतिहास पुनः प्राप्त करता है, और प्रत्येक अनुरोध के साथ संदर्भ शामिल करता है। मॉडल कॉन्फ़िगरेशन वही है, केवल पैटर्न अलग हैं।
-## Deploy Azure OpenAI Infrastructure
+## Azure OpenAI इन्फ्रास्ट्रक्चर डिप्लॉय करें
**Bash:**
```bash
cd 01-introduction
-azd up # सदस्यता और स्थान चुनें (eastus2 की सिफारिश की गई)
+azd up # सदस्यता और स्थान चुनें (eastus2 की सलाह दी जाती है)
```
**PowerShell:**
```powershell
cd 01-introduction
-azd up # सदस्यता और स्थान चुनें (eastus2 की सिफारिश की गई)
+azd up # सदस्यता और स्थान चुनें (eastus2 की सिफारिश की जाती है)
```
-> **Note:** यदि आपको timeout त्रुटि मिले (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), तो बस `azd up` फिर से चलाएं। Azure संसाधन पृष्ठभूमि में अभी भी प्राविज़निंग में हो सकते हैं, और पुनः प्रयास से डिप्लॉयमेंट तब पूरा होगा जब संसाधन टर्मिनल स्थिति तक पहुंचें।
+> **नोट:** यदि कोई टाइमआउट त्रुटि आती है (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), तो बस `azd up` फिर से चलाएँ। Azure संसाधन पृष्ठभूमि में अभी भी प्रावधान कर रहे हो सकते हैं, और पुनः प्रयास करने से डिप्लॉयमेंट पूरा हो जाएगा जब संसाधन टर्मिनल स्थिति में पहुंचेंगे।
यह करेगा:
-1. GPT-5.2 और text-embedding-3-small मॉडल के साथ Azure OpenAI संसाधन तैनात करेगा
-2. प्रोजेक्ट रूट पर स्वचालित `.env` फ़ाइल बनाएगा जिसमें क्रेडेंशियल होंगे
+1. GPT-5.2 और text-embedding-3-small मॉडलों के साथ Azure OpenAI संसाधन डिप्लॉय करेगा
+2. प्रोजेक्ट रूट में `.env` फ़ाइल स्वचालित रूप से उत्पन्न करेगा जिसमें क्रेडेंशियल्स होंगे
3. सभी आवश्यक पर्यावरण चर सेट करेगा
-**डिप्लॉयमेंट में समस्या?** विस्तृत समस्या समाधान के लिए [Infrastructure README](infra/README.md) देखें जिसमें सबडोमेन नाम संघर्ष, मैनुअल Azure पोर्टल डिप्लॉयमेंट चरण, और मॉडल कॉन्फ़िगरेशन गाइड शामिल हैं।
+**डिप्लॉयमेंट में समस्या आ रही है?** विस्तृत समस्या निवारण के लिए [इन्फ्रास्ट्रक्चर README](infra/README.md) देखें जिसमें सबडोमेन नाम संघर्ष, Azure पोर्टल पर मैनुअल डिप्लॉयमेंट और मॉडल कॉन्फ़िगरेशन मार्गदर्शन शामिल हैं।
-**डिप्लॉयमेंट सफल हुआ यह सत्यापित करें:**
+**डिप्लॉयमेंट सफल होने का सत्यापन करें:**
**Bash:**
```bash
@@ -168,7 +168,7 @@ cat ../.env # AZURE_OPENAI_ENDPOINT, API_KEY, आदि दिखाना च
Get-Content ..\.env # AZURE_OPENAI_ENDPOINT, API_KEY, आदि दिखाना चाहिए।
```
-> **Note:** `azd up` कमांड `.env` फ़ाइल स्वचालित रूप से बनाता है। यदि बाद में इसे अपडेट करने की आवश्यकता हो, तो आप `.env` फ़ाइल को मैन्युअल रूप से संपादित कर सकते हैं या इसे पुनः उत्पन्न कर सकते हैं:
+> **नोट:** `azd up` कमांड स्वचालित रूप से `.env` फ़ाइल उत्पन्न करता है। यदि आपको बाद में इसे अपडेट करना हो, तो आप या तो `.env` फ़ाइल को मैन्युअल रूप से संपादित करें या इसे पुनः उत्पन्न करें:
>
> **Bash:**
> ```bash
@@ -182,11 +182,11 @@ Get-Content ..\.env # AZURE_OPENAI_ENDPOINT, API_KEY, आदि दिखान
> .\.azd-env.ps1
> ```
-## Run the Application Locally
+## ऐप्लिकेशन को लोकली चलाएं
**डिप्लॉयमेंट सत्यापित करें:**
-सुनिश्चित करें कि रूट डायरेक्टरी में `.env` फ़ाइल मौजूद है जिसमें Azure क्रेडेंशियल्स हैं। इसे मॉड्यूल डायरेक्टरी (`01-introduction/`) से चलाएं:
+सुनिश्चित करें कि `.env` फ़ाइल रूट डायरेक्ट्री में Azure क्रेडेंशियल्स के साथ मौजूद है। इसे मॉड्यूल डायरेक्ट्री (`01-introduction/`) से चलाएं:
**Bash:**
```bash
@@ -198,41 +198,41 @@ cat ../.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT दिखाना च
Get-Content ..\.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT दिखाना चाहिए
```
-**एप्लिकेशन शुरू करें:**
+**ऐप्लिकेशन शुरू करें:**
-**विकल्प 1: Spring Boot Dashboard का उपयोग करें (VS Code उपयोगकर्ताओं के लिए अनुशंसित)**
+**विकल्प 1: Spring Boot डैशबोर्ड का उपयोग करना (VS Code उपयोगकर्ताओं के लिए अनुशंसित)**
-डेव कंटेनर में Spring Boot Dashboard एक्सटेंशन शामिल है, जो सभी Spring Boot एप्लिकेशन को प्रबंधित करने के लिए एक विज़ुअल इंटरफ़ेस प्रदान करता है। इसे VS Code के Activity Bar में बाईं ओर (Spring Boot आइकन देखें) पा सकते हैं।
+डेव कंटेनर में Spring Boot डैशबोर्ड एक्सटेंशन शामिल है, जो सभी Spring Boot ऐप्लिकेशन प्रबंधित करने के लिए एक दृश्य इंटरफ़ेस प्रदान करता है। यह VS Code के बाएँ ओर Activity Bar में पाया जा सकता है (Spring Boot आइकन देखें)।
-Spring Boot Dashboard से आप कर सकते हैं:
-- विषमता में उपलब्ध सभी Spring Boot एप्लिकेशन देखें
-- एक क्लिक से एप्लिकेशन शुरू/रोकें
-- एप्लिकेशन लॉग वास्तविक समय में देखें
-- एप्लिकेशन की स्थिति देखें
+Spring Boot डैशबोर्ड से आप:
+- कार्यक्षेत्र में सभी उपलब्ध Spring Boot ऐप्लिकेशन देख सकते हैं
+- एक क्लिक में ऐप्लिकेशन स्टार्ट/स्टॉप कर सकते हैं
+- असली समय में ऐप लॉग देख सकते हैं
+- ऐप्लिकेशन स्थिति की निगरानी कर सकते हैं
-केवल "introduction" के बगल में प्ले बटन क्लिक करें ताकि यह मॉड्यूल शुरू हो, या सभी मॉड्यूल को एक साथ शुरू करें।
+बस "introduction" के बाजू में प्ले बटन क्लिक करें इस मॉड्यूल को शुरू करने के लिए, या सभी मॉड्यूल एक साथ शुरू करें।
-
+
-*VS Code में Spring Boot Dashboard — सभी मॉड्यूल को एक जगह से शुरू, बंद और मॉनिटर करें*
+*VS Code में Spring Boot डैशबोर्ड — एक ही जगह से सभी मॉड्यूल स्टार्ट, स्टॉप और मॉनिटर करें*
-**विकल्प 2: शेल स्क्रिप्ट्स का उपयोग करें**
+**विकल्प 2: शेल स्क्रिप्ट्स का उपयोग करना**
-सभी वेब एप्लिकेशन (मॉड्यूल 01-04) शुरू करें:
+सभी वेब ऐप्लिकेशन (मॉड्यूल 01-04) शुरू करें:
**Bash:**
```bash
-cd .. # रूट निर्देशिका से
+cd .. # रूट डायरेक्टरी से
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # रूट डायरेक्टरी से
+cd .. # मूल निर्देशिका से
.\start-all.ps1
```
-या केवल यह मॉड्यूल शुरू करें:
+या केवल इस मॉड्यूल को शुरू करें:
**Bash:**
```bash
@@ -246,9 +246,9 @@ cd 01-introduction
.\start.ps1
```
-दोनों स्क्रिप्टें स्वचालित रूप से रूट `.env` फ़ाइल से पर्यावरण चर लोड करेंगी और यदि JARs मौजूद नहीं हैं तो उन्हें बनाएंगी।
+दोनों स्क्रिप्ट्स रूट `.env` फ़ाइल से पर्यावरण चर स्वचालित रूप से लोड करेंगी और यदि JARs मौजूद नहीं हैं तो उन्हें बिल्ड करेंगी।
-> **Note:** यदि आप शुरू करने से पहले सभी मॉड्यूल मैन्युअली बनाना पसंद करते हैं:
+> **नोट:** यदि आप शुरू करने से पहले सभी मॉड्यूल मैन्युअली बिल्ड करना पसंद करते हैं:
>
> **Bash:**
> ```bash
@@ -262,7 +262,7 @@ cd 01-introduction
> mvn clean package -DskipTests
> ```
-अपने ब्राउजर में http://localhost:8080 खोलें।
+ब्राउज़र में http://localhost:8080 खोलें।
**रोकने के लिए:**
@@ -275,48 +275,48 @@ cd .. && ./stop-all.sh # सभी मॉड्यूल
**PowerShell:**
```powershell
-.\stop.ps1 # केवल यह मॉड्यूल
+.\stop.ps1 # यह मॉड्यूल केवल
# या
-cd ..; .\stop-all.ps1 # सभी मॉड्यूल
+cd ..; .\stop-all.ps1 # सभी मॉड्यूल्स
```
-## Using the Application
+## ऐप्लिकेशन का उपयोग
-यह एप्लिकेशन दो चैट इम्प्लीमेंटेशन वाले वेब इंटरफ़ेस प्रदान करता है जो साथ-साथ हैं।
+ऐप्लिकेशन एक वेब इंटरफ़ेस प्रदान करता है जिसमें दो चैट इम्प्लीमेंटेशन साइड-बाय-साइड हैं।
-
+
-*डैशबोर्ड सरल चैट (stateless) और संवादात्मक चैट (stateful) विकल्प दोनों दिखाता है*
+*डैशबोर्ड जो Simple Chat (स्टेटलेस) और Conversational Chat (स्टेटफुल) विकल्पों को दिखाता है*
-### Stateless Chat (Left Panel)
+### स्टेटलेस चैट (बायाँ पैनल)
-पहले इसे आज़माएं। पूछें "मेरा नाम जॉन है" और तुरंत उसके बाद पूछें "मेरा नाम क्या है?" मॉडल याद नहीं रखेगा क्योंकि प्रत्येक संदेश स्वतंत्र है। यह भाषा मॉडल एकीकरण के साथ मूल समस्या दर्शाता है - कोई बातचीत का संदर्भ नहीं।
+यह पहले आजमाएं। पूछें "मेरा नाम जॉन है" और फिर तुरंत पूछें "मेरा नाम क्या है?" मॉडल याद नहीं रखेगा क्योंकि प्रत्येक संदेश स्वतंत्र है। यह मूल भाषा मॉडल इंटीग्रेशन की मूल समस्या दिखाता है - कोई वार्तालाप संदर्भ नहीं।
-
+
-*AI आपके पिछले संदेश से आपका नाम याद नहीं रखता*
+*एआई आपके पिछले संदेश से आपका नाम याद नहीं रखता*
-### Stateful Chat (Right Panel)
+### स्टेटफुल चैट (दायाँ पैनल)
-अब समान अनुक्रम यहां आज़माएं। पूछें "मेरा नाम जॉन है" और फिर "मेरा नाम क्या है?" इस बार यह याद रखता है। अंतर MessageWindowChatMemory है - यह बातचीत के इतिहास को बनाए रखता है और हर अनुरोध के साथ उस संदर्भ को शामिल करता है। यह उत्पादन संवादात्मक AI का तरीका है।
+अब यही क्रम यहाँ आजमाएं। पूछें "मेरा नाम जॉन है" और फिर "मेरा नाम क्या है?" यह याद रखता है। फर्क MessageWindowChatMemory का है - यह वार्तालाप इतिहास बनाए रखता है और इसे प्रत्येक अनुरोध के साथ शामिल करता है। यही कैसे उत्पादन conversational AI काम करता है।
-
+
-*AI बातचीत में पहले के आपके नाम को याद रखता है*
+*एआई बातचीत के दौरान आपके नाम को याद रखता है*
-दोनों पैनल एक ही GPT-5.2 मॉडल का उपयोग करते हैं। केवल अंतर मेमोरी है। यह स्पष्ट करता है कि मेमोरी आपके एप्लिकेशन में क्या लाती है और क्यों यह वास्तविक उपयोग मामलों के लिए आवश्यक है।
+दोनों पैनल एक ही GPT-5.2 मॉडल का उपयोग करते हैं। केवल फर्क मेमोरी है। यह स्पष्ट करता है कि मेमोरी आपके ऐप्लिकेशन में क्या लाती है और क्यों यह वास्तविक उपयोग के मामलों के लिए आवश्यक है।
-## Next Steps
+## अगले कदम
-**अगला मॉड्यूल:** [02-prompt-engineering - GPT-5.2 के साथ प्रॉम्प्ट इंजीनियरिंग](../02-prompt-engineering/README.md)
+**अगला मॉड्यूल:** [02-पrompt-engineering - GPT-5.2 के साथ प्रॉम्प्ट इंजीनियरिंग](../02-prompt-engineering/README.md)
---
-**नेविगेशन:** [← पिछला: Module 00 - क्विक स्टार्ट](../00-quick-start/README.md) | [मुख्य पृष्ठ पर वापस](../README.md) | [अगला: Module 02 - प्रॉम्प्ट इंजीनियरिंग →](../02-prompt-engineering/README.md)
+**नेविगेशन:** [← मुख्य पर वापस](../README.md) | [अगला: मॉड्यूल 02 - प्रॉम्प्ट इंजीनियरिंग →](../02-prompt-engineering/README.md)
---
**अस्वीकरण**:
-यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान रखें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपने मूल भाषा में ही अधिकृत स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए पेशेवर मानव अनुवाद की सलाह दी जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं।
+इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
\ No newline at end of file
diff --git a/translations/hi/02-prompt-engineering/README.md b/translations/hi/02-prompt-engineering/README.md
index dfc7367d0..dac846843 100644
--- a/translations/hi/02-prompt-engineering/README.md
+++ b/translations/hi/02-prompt-engineering/README.md
@@ -1,85 +1,85 @@
-# मॉड्यूल 02: GPT-5.2 के साथ प्रॉम्प्ट इंजिनीयरिंग
-
-## सामग्री सूची
-
-- [वीडियो वॉकथ्रू](../../../02-prompt-engineering)
-- [आप क्या सीखेंगे](../../../02-prompt-engineering)
-- [पूर्वापेक्षाएँ](../../../02-prompt-engineering)
-- [प्रॉम्प्ट इंजिनीयरिंग को समझना](../../../02-prompt-engineering)
-- [प्रॉम्प्ट इंजिनीयरिंग के मूल सिद्धांत](../../../02-prompt-engineering)
- - [जीरो-शॉट प्रॉम्प्टिंग](../../../02-prompt-engineering)
- - [फ्यू-शॉट प्रॉम्प्टिंग](../../../02-prompt-engineering)
- - [चेन ऑफ थॉट](../../../02-prompt-engineering)
- - [रोल-आधारित प्रॉम्प्टिंग](../../../02-prompt-engineering)
- - [प्रॉम्प्ट टेम्पलेट्स](../../../02-prompt-engineering)
-- [उन्नत पैटर्न](../../../02-prompt-engineering)
-- [एप्लिकेशन चलाएँ](../../../02-prompt-engineering)
-- [एप्लिकेशन के स्क्रीनशॉट](../../../02-prompt-engineering)
-- [पैटर्न्स का अन्वेषण](../../../02-prompt-engineering)
- - [कम बनाम अधिक उत्सुकता](../../../02-prompt-engineering)
- - [टास्क निष्पादन (टूल प्रीऐम्बल्स)](../../../02-prompt-engineering)
- - [स्वयं-प्रतिबिंबित कोड](../../../02-prompt-engineering)
- - [संरचित विश्लेषण](../../../02-prompt-engineering)
- - [मल्टी-टर्न चैट](../../../02-prompt-engineering)
- - [चरण-दर-चरण तर्क](../../../02-prompt-engineering)
- - [सीमित आउटपुट](../../../02-prompt-engineering)
-- [आप वास्तव में क्या सीख रहे हैं](../../../02-prompt-engineering)
-- [अगले कदम](../../../02-prompt-engineering)
+# मॉड्यूल 02: GPT-5.2 के साथ प्रॉम्प्ट इंजीनियरिंग
+
+## विषय सूची
+
+- [वीडियो वॉकथ्रू](#वीडियो-वॉकथ्रू)
+- [आप क्या सीखेंगे](#आप-क्या-सीखेंगे)
+- [पूर्व आवश्यकताएँ](#पूर्व-आवश्यकताएँ)
+- [प्रॉम्प्ट इंजीनियरिंग को समझना](#प्रॉम्प्ट-इंजीनियरिंग-को-समझना)
+- [प्रॉम्प्ट इंजीनियरिंग की मूलभूत बातें](#प्रॉम्प्ट-इंजीनियरिंग-की-मूलभूत-बातें)
+ - [ज़ीरो-शॉट प्रॉम्प्टिंग](#ज़ीरो-शॉट-प्रॉम्प्टिंग)
+ - [फ्यू-शॉट प्रॉम्प्टिंग](#फ्यू-शॉट-प्रॉम्प्टिंग)
+ - [चेन ऑफ़ थॉट](#चेन-ऑफ़-थॉट)
+ - [रोल-आधारित प्रॉम्प्टिंग](#रोल-आधारित-प्रॉम्प्टिंग)
+ - [प्रॉम्प्ट टेम्प्लेट्स](#प्रॉम्प्ट-टेम्प्लेट्स)
+- [उन्नत पैटर्न](#उन्नत-पैटर्न)
+- [एप्लिकेशन चलाएँ](#एप्लिकेशन-चलाएँ)
+- [एप्लिकेशन स्क्रीनशॉट](#एप्लिकेशन-स्क्रीनशॉट)
+- [पैटर्न्स का अन्वेषण](#पैटर्न-का-अन्वेषण)
+ - [कम बनाम अधिक उत्साह](#कम-बनाम-उच्च-उत्साह)
+ - [कार्य निष्पादन (टूल प्रीएंबल्स)](#कार्य-निष्पादन-टूल-प्रीएम्बल्स)
+ - [आत्म-परावर्तित कोड](#स्वयं-प्रतिबिंबित-कोड)
+ - [संरचित विश्लेषण](#संरचित-विश्लेषण)
+ - [मल्टी-टर्न चैट](#बहु-चरण-वार्तालाप)
+ - [कदम-दर-कदम तर्क](#चरण-दर-चरण-तर्क)
+ - [संयमित आउटपुट](#सीमित-आउटपुट)
+- [आप वास्तव में क्या सीख रहे हैं](#आप-वास्तव-में-क्या-सीख-रहे-हैं)
+- [अगले कदम](#अगले-कदम)
## वीडियो वॉकथ्रू
-इस लाइव सेशन को देखें जो इस मॉड्यूल के साथ शुरू करने का तरीका समझाता है:
+इस लाइव सत्र को देखें जो बताता है कि इस मॉड्यूल के साथ कैसे शुरू करें:
## आप क्या सीखेंगे
-निम्नलिखित चित्र इस मॉड्यूल में आप जिन मुख्य विषयों और कौशलों को विकसित करेंगे उनका अवलोकन प्रदान करता है — प्रॉम्प्ट परिष्करण तकनीकों से लेकर उस चरण-दर-चरण वर्कफ़्लो तक जिसे आप पालन करेंगे।
+निम्नलिखित चित्र आपके लिए इस मॉड्यूल में विकसित होने वाले मुख्य विषयों और कौशलों का अवलोकन प्रस्तुत करता है — प्रॉम्प्ट परिशोधन तकनीकों से लेकर आप जिन चरण-दर-चरण वर्कफ़्लो का पालन करेंगे।
-पिछले मॉड्यूल में, आपने GitHub Models के साथ LangChain4j के बुनियादी इंटरैक्शंस और देखा कि कैसे मेमोरी Azure OpenAI के साथ संवादात्मक AI को सक्षम बनाती है। अब हम ध्यान केंद्रित करेंगे कि आप प्रश्न कैसे पूछते हैं — यानि प्रॉम्प्ट्स स्वयं — Azure OpenAI के GPT-5.2 का उपयोग करते हुए। जिस तरह से आप अपने प्रॉम्प्ट्स को संरचित करते हैं, वह आपके प्राप्त उत्तरों की गुणवत्ता को नाटकीय रूप से प्रभावित करता है। हम मूलभूत प्रॉम्प्टिंग तकनीकों की समीक्षा से शुरू करेंगे, फिर आठ उन्नत पैटर्न की ओर बढ़ेंगे जो GPT-5.2 की क्षमताओं का पूरा लाभ उठाते हैं।
+पिछले मॉड्यूल में, आपने देखा कि कैसे मेमोरी Azure OpenAI के साथ बातचीत योग्य AI को सक्षम बनाती है। अब हम उस पर ध्यान केंद्रित करेंगे कि आप प्रश्न कैसे पूछते हैं — स्वयं प्रॉम्प्ट्स — Azure OpenAI के GPT-5.2 का उपयोग करते हुए। जिस तरह से आप अपने प्रॉम्प्ट संरचित करते हैं वह प्रतिक्रिया की गुणवत्ता को नाटकीय रूप से प्रभावित करता है। हम मूलभूत प्रॉम्प्टिंग तकनीकों की समीक्षा से शुरू करते हैं, फिर आठ उन्नत पैटर्न में जाते हैं जो GPT-5.2 की क्षमताओं का पूर्ण लाभ उठाते हैं।
-हम GPT-5.2 का उपयोग करेंगे क्योंकि यह तर्क नियंत्रण पेश करता है - आप मॉडल को बता सकते हैं कि जवाब देने से पहले कितना सोचना है। यह विभिन्न प्रॉम्प्टिंग रणनीतियों को अधिक स्पष्ट बनाता है और आपको समझने में मदद करता है कि किस स्थिति में कौन-सी विधि का उपयोग करना है। साथ ही, Azure की GPT-5.2 के लिए कम रेट लिमिट्स GitHub Models के मुकाबले हमें लाभ पहुंचाएंगी।
+हम GPT-5.2 का उपयोग करेंगे क्योंकि यह तर्क नियंत्रण (reasoning control) प्रस्तुत करता है - आप मॉडल को बता सकते हैं कि उत्तर देने से पहले कितना सोच-विचार करना है। यह विभिन्न प्रॉम्प्टिंग रणनीतियों को और स्पष्ट बनाता है और आपको समझने में मदद करता है कि कब किस दृष्टिकोण का उपयोग करना है।
-## पूर्वापेक्षाएँ
+## पूर्व आवश्यकताएँ
-- मॉड्यूल 01 पूरा किया हो (Azure OpenAI संसाधन तैनात किए गए हों)
-- `.env` फाइल रूट डायरेक्टरी में हो जिसमें Azure क्रेडेंशियल्स हों (`azd up` द्वारा मॉड्यूल 01 में बनाई गई)
+- मॉड्यूल 01 पूरा किया हुआ (Azure OpenAI संसाधन तैनात)
+- रूट डायरेक्ट्री में `.env` फ़ाइल जिसमें Azure प्रमाण-पत्र हैं (मॉड्यूल 01 में `azd up` द्वारा बनाई गई)
-> **नोट:** यदि आपने मॉड्यूल 01 पूरा नहीं किया है, तो पहले वहाँ के तैनाती निर्देशों का पालन करें।
+> **नोट:** यदि आपने मॉड्यूल 01 पूरा नहीं किया है, तो पहले वहां दिए तैनाती निर्देशों का पालन करें।
-## प्रॉम्प्ट इंजिनीयरिंग को समझना
+## प्रॉम्प्ट इंजीनियरिंग को समझना
-मूल रूप से, प्रॉम्प्ट इंजिनीयरिंग अस्पष्ट निर्देशों और सटीक निर्देशों के बीच का अंतर है, जैसा कि नीचे तुलना में दिखाया गया है।
+मूल रूप से, प्रॉम्प्ट इंजीनियरिंग अस्पष्ट निर्देशों और सटीक निर्देशों के बीच का अंतर है, जैसा कि नीचे के तुलना में दिखाया गया है।
-प्रॉम्प्ट इंजिनीयरिंग वह प्रक्रिया है जिसमें ऐसा इनपुट टेक्स्ट डिजाइन किया जाता है जो आपको लगातार आवश्यक परिणाम देता है। यह केवल प्रश्न पूछने के बारे में नहीं है — बल्कि यह अनुरोधों को इस प्रकार संरचित करने के बारे में है ताकि मॉडल बिल्कुल समझ सके कि आप क्या चाहते हैं और कैसे प्रदान करना है।
+प्रॉम्प्ट इंजीनियरिंग उस इनपुट टेक्स्ट को डिज़ाइन करने के बारे में है जो लगातार आपको आवश्यक परिणाम देता है। यह केवल प्रश्न पूछने के बारे में नहीं है - बल्कि ऐसे अनुरोध बनाने के बारे में है जिससे मॉडल ठीक वही समझे जो आप चाहते हैं और कैसे देना है।
-इसे एक सहकर्मी को निर्देश देने के रूप में सोचें। "बग ठीक करें" अस्पष्ट है। "UserService.java की लाइन 45 में नल चेक जोड़कर नल पॉइंटर एक्सेप्शन ठीक करें" विशिष्ट है। भाषा मॉडल भी इसी तरह काम करते हैं — विशिष्टता और संरचना महत्वपूर्ण होती है।
+इसे एक सहकर्मी को निर्देश देने के रूप में सोचें। "बग को ठीक करें" अस्पष्ट है। "UserService.java की लाइन 45 में null प्वाइंटर एक्सेप्शन को null चेक जोड़कर ठीक करें" विशिष्ट है। भाषा मॉडल भी इसी तरह काम करते हैं - विशिष्टता और संरचना महत्वपूर्ण है।
-नीचे का चित्र दिखाता है कि LangChain4j इस परिदृश्य में कैसे फिट बैठता है — आपके प्रॉम्प्ट पैटर्न को SystemMessage और UserMessage बिल्डिंग ब्लॉक्स के माध्यम से मॉडल से जोड़ता है।
+नीचे का चित्र दिखाता है कि LangChain4j इस तस्वीर में कैसे फिट बैठता है — SystemMessage और UserMessage बिल्डिंग ब्लॉक्स के माध्यम से आपके प्रॉम्प्ट पैटर्न को मॉडल से जोड़ता है।
-LangChain4j आधारभूत संरचना प्रदान करता है — मॉडल कनेक्शंस, मेमोरी, और मैसेज प्रकार — जबकि प्रॉम्प्ट पैटर्न वे सावधानीपूर्वक संरचित टेक्स्ट हैं जिन्हें आप उस आधारभूत संरचना के माध्यम से भेजते हैं। मुख्य बिल्डिंग ब्लॉक हैं `SystemMessage` (जो AI के व्यवहार और भूमिका को सेट करता है) और `UserMessage` (जो आपका वास्तविक अनुरोध लेकर आता है)।
+LangChain4j वह आधारभूत संरचना प्रदान करता है — मॉडल कनेक्शन, मेमोरी, और संदेश प्रकार — जबकि प्रॉम्प्ट पैटर्न महज सावधानीपूर्वक संरचित टेक्स्ट हैं जिन्हें आप उस आधारभूत संरचना से भेजते हैं। मुख्य निर्माण खंड हैं `SystemMessage` (जो AI के व्यवहार और भूमिका को सेट करता है) और `UserMessage` (जो आपका वास्तविक अनुरोध ले जाता है)।
-## प्रॉम्प्ट इंजिनीयरिंग के मूल सिद्धांत
+## प्रॉम्प्ट इंजीनियरिंग की मूलभूत बातें
-नीचे दिखाए गए पांच मुख्य तकनीकें प्रभावी प्रॉम्प्ट इंजिनीयरिंग की नींव हैं। प्रत्येक एक अलग पहलू को संबोधित करता है कि आप भाषा मॉडल के साथ कैसे संवाद करते हैं।
+नीचे दिखाए गए पाँच मुख्य तकनीकें प्रभावी प्रॉम्प्ट इंजीनियरिंग की नींव बनाती हैं। प्रत्येक तकनीक भाषा मॉडल के साथ संचार के एक अलग पहलू को संबोधित करती है।
-इस मॉड्यूल में उन्नत पैटर्न्स में जाने से पहले, आइए पांच मौलिक प्रॉम्प्टिंग तकनीकों की समीक्षा करें। ये वे बिल्डिंग ब्लॉक्स हैं जिन्हें हर प्रॉम्प्ट इंजीनियर को जानना चाहिए। यदि आपने पहले ही [क्विक स्टार्ट मॉड्यूल](../00-quick-start/README.md#2-prompt-patterns) पूरा किया है, तो आपने इन्हें क्रियान्वित होते देखा होगा — यहाँ इनके पीछे का सैद्धांतिक ढांचा है।
+इस मॉड्यूल में उन्नत पैटर्न में जाने से पहले, चलिए पाँच मौलिक प्रॉम्प्टिंग तकनीकों की समीक्षा करते हैं। ये वे बिल्डिंग ब्लॉक्स हैं जिन्हें हर प्रॉम्प्ट इंजीनियर को जानना चाहिए।
-### जीरो-शॉट प्रॉम्प्टिंग
+### ज़ीरो-शॉट प्रॉम्प्टिंग
-सबसे सरल तरीका: मॉडल को कोई उदाहरण दिए बिना सीधे निर्देश दें। मॉडल पूरी तरह से अपने प्रशिक्षण पर निर्भर करता है ताकि वह कार्य समझे और निष्पादित करे। यह सरल अनुरोधों के लिए अच्छा काम करता है जहाँ अपेक्षित व्यवहार स्पष्ट होता है।
+सबसे सरल तरीका: मॉडल को बिना किसी उदाहरण के सीधे निर्देश देना। मॉडल पूरी तरह से अपने प्रशिक्षण पर निर्भर करता है ताकि कार्य को समझे और क्रियान्वित करे। यह उन सरल अनुरोधों के लिए अच्छा काम करता है जहाँ अपेक्षित व्यवहार स्पष्ट होता है।
-*उदाहरण बिना सीधे निर्देश — मॉडल केवल निर्देश से कार्य का अनुमान लगाता है*
+*उदाहरणों के बिना सीधे निर्देश — मॉडल केवल निर्देश से कार्य का अनुमान लगाता है*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
@@ -87,15 +87,15 @@ String response = model.chat(prompt);
// प्रतिक्रिया: "सकारात्मक"
```
-**कब उपयोग करें:** सरल वर्गीकरण, सीधे प्रश्न, अनुवाद, या कोई भी कार्य जिसे मॉडल बिना अतिरिक्त मार्गदर्शन के संभाल सकता है।
+**कब उपयोग करें:** सरल वर्गीकरण, प्रत्यक्ष प्रश्न, अनुवाद, या कोई भी कार्य जिसे मॉडल बिना अतिरिक्त मार्गदर्शन के संभाल सकता है।
### फ्यू-शॉट प्रॉम्प्टिंग
-उदाहरण प्रदान करें जो उस पैटर्न को प्रदर्शित करते हैं जिसे आप मॉडल से लागू करना चाहते हैं। मॉडल आपके उदाहरणों से अपेक्षित इनपुट-आउटपुट प्रारूप सीखता है और इसे नए इनपुट्स पर लागू करता है। इसका उपयोग उन कार्यों के लिए करें जहाँ वांछित प्रारूप या व्यवहार स्पष्ट नहीं है और निरंतरता महत्वपूर्ण है।
+ऐसे उदाहरण प्रदान करें जो उस पैटर्न को प्रदर्शित करते हैं जिसे आप मॉडल से पालन करवाना चाहते हैं। मॉडल आपके उदाहरणों से अपेक्षित इनपुट-आउटपुट स्वरूप सीखता है और इसे नए इनपुट पर लागू करता है। इससे उन कार्यों के लिए लगातार जवाब मिलता है जहाँ अपेक्षित प्रारूप या व्यवहार स्पष्ट नहीं होता।
-*उदाहरणों से सीखना — मॉडल पैटर्न पहचानता है और नए इनपुट्स पर लागू करता है*
+*उदाहरणों से सीखना — मॉडल पैटर्न को पहचानता है और नए इनपुट पर लागू करता है*
```java
String prompt = """
@@ -112,15 +112,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**कब उपयोग करें:** कस्टम वर्गीकरण, सुसंगत प्रारूपण, डोमेन-विशिष्ट कार्य, या जब जीरो-शॉट परिणाम असंगत हों।
+**कब उपयोग करें:** कस्टम वर्गीकरण, स्थिर स्वरूपण, डोमेन-विशिष्ट कार्य, या जब ज़ीरो-शॉट परिणाम असंगत हों।
-### चेन ऑफ थॉट
+### चेन ऑफ़ थॉट
-मॉडल से कहें कि वह अपना तर्क चरण-दर-चरण दिखाए। सीधे उत्तर पर कूदने के बजाय, मॉडल समस्या को टुकड़ों में तोड़ता है और प्रत्येक भाग पर स्पष्ट रूप से काम करता है। इससे गणित, तर्क और बहु-चरण तर्क कार्यों में सटीकता बढ़ती है।
+मॉडल को चरण-दर-चरण तर्क दिखाने के लिए कहें। सीधे उत्तर पर न जाकर, मॉडल समस्या को तोड़ता है और प्रत्येक भाग को स्पष्ट रूप से समझाता है। यह गणित, तर्क और बहु-चरण तर्क देने वाले कार्यों में सटीकता बढ़ाता है।
-*चरण-दर-चरण तर्क — जटिल समस्याओं को स्पष्ट तार्किक चरणों में तोड़ना*
+*चरण-दर-चरण तर्क — जटिल समस्याओं को स्पष्ट तार्किक चरणों में विभाजित करना*
```java
String prompt = """
@@ -133,15 +133,15 @@ String response = model.chat(prompt);
// मॉडल दिखाता है: 15 - 8 = 7, फिर 7 + 12 = 19 सेब
```
-**कब उपयोग करें:** गणित की समस्याएँ, तर्क पहेलियाँ, डिबगिंग, या कोई भी कार्य जहाँ तर्क प्रक्रिया दिखाने से सटीकता और विश्वास बढ़ता है।
+**कब उपयोग करें:** गणित की समस्याएँ, तर्क पहेलियाँ, बग-फ़िक्सिंग, या कोई भी कार्य जहाँ तर्क प्रक्रिया दिखाने से सटीकता और भरोसा बढ़ता हो।
### रोल-आधारित प्रॉम्प्टिंग
-एआई के लिए प्रश्न पूछने से पहले कोई व्यक्ति या भूमिका निर्धारित करें। यह संदर्भ प्रदान करता है जो उत्तर के टोन, गहराई और फोकस को आकार देता है। "सॉफ्टवेयर आर्किटेक्ट" का सुझाव "जूनियर डेवलपर" या "सुरक्षा ऑडिटर" से अलग होगा।
+प्रश्न पूछने से पहले AI के लिए किसी भूमिका या व्यक्तित्व को सेट करें। यह ऐसा संदर्भ प्रदान करता है जो प्रतिक्रिया की टोन, गहराई और फोकस को आकार देता है। "सॉफ्टवेयर आर्किटेक्ट" अलग सलाह देता है, "जूनियर डेवलपर" अलग, और "सुरक्षा ऑडिटर" और अलग।
-*संदर्भ और व्यक्ति सेट करना — एक ही प्रश्न को सौंपे गए भूमिका के अनुसार अलग जवाब मिलता है*
+*संदर्भ और भूमिका सेट करना — वही प्रश्न अलग- अलग भूमिका के आधार पर अलग जवाब पाता है*
```java
String prompt = """
@@ -157,15 +157,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**कब उपयोग करें:** कोड समीक्षा, ट्यूटरिंग, डोमेन-विशिष्ट विश्लेषण, या जब अलग विशेषज्ञता स्तर या दृष्टिकोण के लिए उत्तर चाहिए।
+**कब उपयोग करें:** कोड समीक्षा, ट्यूटरिंग, डोमेन-विशिष्ट विश्लेषण, या जब आपको विशेष विशेषज्ञता स्तर या दृष्टिकोण के अनुसार प्रतिक्रिया चाहिए।
-### प्रॉम्प्ट टेम्पलेट्स
+### प्रॉम्प्ट टेम्प्लेट्स
-चर प्लेसहोल्डर्स के साथ पुन: उपयोग योग्य प्रॉम्प्ट बनाएं। हर बार नया प्रॉम्प्ट लिखने के बजाय, एक बार टेम्पलेट परिभाषित करें और अलग-अलग मान भरें। LangChain4j का `PromptTemplate` क्लास इसे `{{variable}}` सिंटैक्स के साथ आसान बनाता है।
+वेरिएबल प्लेसहोल्डर के साथ पुन: उपयोग योग्य प्रॉम्प्ट बनाएं। हर बार नया प्रॉम्प्ट लिखने के बजाय, एक टेम्प्लेट एक बार परिभाषित करें और अलग-अलग मान भरें। LangChain4j का `PromptTemplate` क्लास यह `{{variable}}` सिंटैक्स के साथ आसान बनाता है।
-*चर प्लेसहोल्डर्स के साथ पुन: उपयोग योग्य प्रॉम्प्ट — एक टेम्पलेट, कई उपयोग*
+*वेरिएबल प्लेसहोल्डर के साथ पुन: उपयोग योग्य प्रॉम्प्ट — एक टेम्प्लेट, कई उपयोग*
```java
PromptTemplate template = PromptTemplate.from(
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**कब उपयोग करें:** अलग इनपुट के साथ पुनरावृत्ति प्रश्न, बैच प्रोसेसिंग, पुन: उपयोग योग्य AI वर्कफ़्लोज़ बनाना, या कोई भी परिदृश्य जहाँ प्रॉम्प्ट संरचना समान रहती है पर डेटा बदलता है।
+**कब उपयोग करें:** अलग-अलग इनपुट के साथ बार-बार क्वेरी करना, बैच प्रोसेसिंग, पुन: उपयोग योग्य AI वर्कफ़्लो बनाना, या कोई भी परिदृश्य जहाँ प्रॉम्प्ट संरचना समान रहती है पर डेटा बदलता है।
---
-ये पाँच मूल बातें आपको अधिकांश प्रॉम्प्टिंग कार्यों के लिए एक मजबूत उपकरण प्रदान करती हैं। इस मॉड्यूल का बाकी हिस्सा इन पर आधारित आठ उन्नत पैटर्न प्रदान करता है जो GPT-5.2 के तर्क नियंत्रण, स्वयं-मূল्यांकन, और संरचित आउटपुट क्षमताओं का उपयोग करते हैं।
+ये पाँच मूलभूत चीजें आपको अधिकतर प्रॉम्प्टिंग कार्यों के लिए एक ठोस टूलकिट देती हैं। इस मॉड्यूल का बाकी हिस्सा इन पर आधारित है उन **आठ उन्नत पैटर्न्स** के साथ जो GPT-5.2 के reasoning control, self-evaluation, और structured output क्षमताओं का लाभ उठाते हैं।
## उन्नत पैटर्न
-मूलभूत बातें हो जाने के बाद, आइए उन आठ उन्नत पैटर्न्स की ओर बढ़ें जो इस मॉड्यूल को अनूठा बनाते हैं। सभी समस्याओं के लिए एक ही तरीका जरूरी नहीं होता। कुछ प्रश्न त्वरित उत्तर चाहते हैं, कुछ को गहरे सोच-विचार की जरूरत होती है। कुछ को दिखाई देने वाला तर्क चाहिए, और कुछ को केवल परिणाम चाहिए। नीचे प्रत्येक पैटर्न किसी विशिष्ट परिदृश्य के लिए अनुकूलित है — और GPT-5.2 का तर्क नियंत्रण इस भेद को और भी स्पष्ट बनाता है।
+मूल बातें कवर हो जाने के बाद, आइए उस आठ उन्नत पैटर्न पर जाएं जो इस मॉड्यूल को विशिष्ट बनाते हैं। सभी समस्याओं के लिए एक ही तरीका जरूरी नहीं। कुछ प्रश्नों को तेज़ जवाब चाहिए, तो कुछ को गहरे विचार की जरूरत। कुछ में दिखने वाला तर्क चाहिए, तो कुछ में केवल परिणाम चाहिए। नीचे प्रत्येक पैटर्न अलग परिदृश्य के लिए अनुकूलित है—और GPT-5.2 का reasoning control इस अंतर को और अधिक स्पष्ट बनाता है।
-*आठ प्रॉम्प्ट इंजिनीयरिंग पैटर्न्स और उनके उपयोग मामलों का अवलोकन*
+*आठ प्रॉम्प्ट इंजीनियरिंग पैटर्न्स और उनके उपयोग मामलों का अवलोकन*
-GPT-5.2 इन पैटर्न्स में एक और आयाम जोड़ता है: *तर्क नियंत्रण*। नीचे स्लाइडर दिखाता है कि आप मॉडल के सोचने के प्रयास को कैसे समायोजित कर सकते हैं — त्वरित, सीधे उत्तरों से लेकर गहरी, व्यापक विश्लेषण तक।
+GPT-5.2 इन पैटर्नों में एक और आयाम जोड़ता है: *tर्क नियंत्रण (reasoning control)*। नीचे स्लाइडर दिखाता है कि आप मॉडल के सोचने के प्रयास को कैसे समायोजित कर सकते हैं — तेज़, सीधे जवाब से गहरी, विस्तृत विश्लेषण तक।
-*GPT-5.2 का तर्क नियंत्रण आपको निर्दिष्ट करने देता है कि मॉडल कितना विचार करे — तेज़ सीधे उत्तर से लेकर गहरे अन्वेषण तक*
+*GPT-5.2 का reasoning control आपको यह बताने देता है कि मॉडल को कितना सोचना चाहिए — तेज सीधे जवाब से लेकर गहरे अन्वेषण तक*
-**कम उत्सुकता (त्वरित और केंद्रित)** - सरल प्रश्नों के लिए जहाँ आप तेज़, सीधे उत्तर चाहते हैं। मॉडल न्यूनतम तर्क करता है - अधिकतम 2 चरण। गणना, देखups, या सीधे प्रश्नों के लिए इसका उपयोग करें।
+**कम उत्साह (तेज़ और केंद्रित)** - सरल प्रश्नों के लिए जहाँ आपको तेज, सीधे जवाब चाहिए। मॉडल न्यूनतम तर्क करता है - अधिकतम 2 कदम। इसका उपयोग गणना, तालाश, या सीधे प्रश्नों के लिए करें।
```java
String prompt = """
@@ -219,12 +219,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> 💡 **GitHub Copilot के साथ एक्सप्लोर करें:** [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) खोलें और पूछें:
-> - "कम उत्सुकता और अधिक उत्सुकता प्रॉम्प्टिंग पैटर्न में क्या अंतर है?"
-> - "प्रॉम्प्ट्स में XML टैग AI के जवाब को संरचित करने में कैसे मदद करते हैं?"
-> - "मुझे स्वयं-प्रतिबिंबित पैटर्न्स कब और सीधे निर्देश कब उपयोग करने चाहिए?"
+> 💡 **GitHub Copilot के साथ खोजें:** [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) खोलें और पूछें:
+> - "कम उत्साह और अधिक उत्साह प्रॉम्प्टिंग पैटर्न में क्या अंतर है?"
+> - "प्रॉम्प्ट्स में XML टैग्स AI की प्रतिक्रिया की संरचना कैसे मदद करते हैं?"
+> - "जब मुझे आत्म-परावर्तन पैटर्न और सीधे निर्देश का उपयोग करना चाहिए?"
-**अधिक उत्सुकता (गहरा और व्यापक)** - जटिल समस्याओं के लिए जहाँ आप व्यापक विश्लेषण चाहते हैं। मॉडल पूरी तरह से खोज करता है और विस्तृत तर्क दिखाता है। सिस्टम डिज़ाइन, आर्किटेक्चर निर्णय, या जटिल शोध के लिए इसका उपयोग करें।
+**अधिक उत्साह (गहरा और व्यापक)** - जटिल समस्याओं के लिए जहाँ आप समग्र विश्लेषण चाहते हैं। मॉडल गहराई से खोज करता है और विस्तृत तर्क दिखाता है। इसका उपयोग सिस्टम डिज़ाइन, आर्किटेक्चर निर्णय, या जटिल शोध के लिए करें।
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**टास्क निष्पादन (चरण-दर-चरण प्रगति)** - बहु-चरण वर्कफ़्लो के लिए। मॉडल एक प्रारंभिक योजना प्रदान करता है, हर चरण का वर्णन करता है, फिर सारांश देता है। माइग्रेशन, कार्यान्वयन, या कोई भी बहु-चरण प्रक्रिया के लिए इसका उपयोग करें।
+**कार्य निष्पादन (चरण-दर-चरण प्रगति)** - बहु-चरण वर्कफ़्लो के लिए। मॉडल upfront योजना प्रदान करता है, हर कदम चलता हुआ बताता है, फिर सारांश देता है। इसका उपयोग माइग्रेशन, कार्यान्वयन, या कोई भी बहु-चरण प्रक्रिया के लिए करें।
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-चेन-ऑफ-थॉट प्रॉम्प्टिंग स्पष्ट रूप से मॉडल से तर्क प्रक्रिया दिखाने को कहता है, जटिल कार्यों की सटीकता बढ़ाता है। चरण-दर-चरण टूटना मानव और AI दोनों को तार्किक समझ देता है।
+चेन-ऑफ़-थॉट प्रॉम्प्टिंग स्पष्ट रूप से मॉडल से उसकी तर्क प्रक्रिया दिखाने के लिए कहता है, जो जटिल कार्यों में सटीकता बढ़ाता है। चरण-दर-चरण टूटना मानवों और AI दोनों के लिए तर्क को समझने में मदद करता है।
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ ट्राई करें:** इस पैटर्न के बारे में पूछें:
-> - "लंबे समय तक चलने वाले ऑपरेशन्स के लिए टास्क निष्पादन पैटर्न को कैसे अनुकूलित करें?"
-> - "प्रोडक्शन एप्लिकेशन में टूल प्रीऐम्बल्स को संरचित करने के श्रेष्ठ अभ्यास क्या हैं?"
-> - "UI में मध्यवर्ती प्रगति अपडेट कैसे कैप्चर और प्रदर्शित करें?"
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ प्रयास करें:** इस पैटर्न के बारे में पूछें:
+> - "मैं लंबी चलने वाली प्रक्रियाओं के लिए कार्य निष्पादन पैटर्न को कैसे अनुकूलित करूँ?"
+> - "उत्पादक एप्लिकेशन में टूल प्रीएंबल्स की संरचना के लिए सर्वोत्तम अभ्यास क्या हैं?"
+> - "UI में मध्यवर्ती प्रगति अपडेट कैसे कैप्चर और प्रदर्शित कर सकता हूँ?"
-नीचे की आकृति इस योजना → निष्पादन → सारांश वर्कफ़्लो को दर्शाती है।
+नीचे का चित्र इस योजना → निष्पादन → सारांश वर्कफ़्लो को दर्शाता है।
*बहु-चरण कार्यों के लिए योजना → निष्पादन → सारांश वर्कफ़्लो*
-**स्वयं-प्रतिबिंबित कोड** - प्रोडक्शन-गुणवत्ता कोड उत्पन्न करने के लिए। मॉडल प्रोडक्शन मानकों के अनुसार कोड जनरेट करता है जिसमें उचित त्रुटि नियंत्रण होता है। नए फीचर्स या सेवाएँ बनाने के लिए इसका उपयोग करें।
+**आत्म-परावर्तित कोड** - उत्पादन-गुणवत्ता वाले कोड का उत्पादन करने के लिए। मॉडल उत्पादन मानकों का पालन करते हुए कोड बनाता है जिसमें उचित त्रुटि प्रबंधन होता है। इसका उपयोग नई विशेषताएँ या सेवाएँ बनाने के लिए करें।
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-नीचे की आकृति इस पुनरावृत्त सुधार चक्र को दिखाती है — उत्पन्न करें, मूल्यांकन करें, कमजोरियाँ पहचानें, और सुधार करें जब तक कोड प्रोडक्शन मानकों को पूरा न कर ले।
+नीचे के चित्र में यह पुनरावर्ती सुधार चक्र दिखाया गया है — उत्पन्न करें, मूल्यांकन करें, कमजोरियां पहचानें, और कोड उत्पादन मानकों तक पहुँचने तक परिष्कृत करें।
-*पुनरावृत्त सुधार चक्र - उत्पन्न करें, मूल्यांकन करें, मुद्दे पहचानें, सुधार करें, दोहराएं*
+*पुनरावर्ती सुधार चक्र - बनाएं, मूल्यांकन करें, समस्या पहचानें, सुधार करें, दोहराएं*
-**संरचित विश्लेषण** - सुसंगत मूल्यांकन के लिए। मॉडल एक तय फ़्रेमवर्क (सहीपन, प्रथाएँ, प्रदर्शन, सुरक्षा, रखरखाव) का उपयोग करते हुए कोड की समीक्षा करता है। कोड समीक्षा या गुणवत्ता आकलन के लिए उपयोग करें।
+**संरचित विश्लेषण** - लगातार मूल्यांकन के लिए। मॉडल कोड को एक निश्चित फ्रेमवर्क (सहीपन, अभ्यास, प्रदर्शन, सुरक्षा, अनुरक्षणीयता) के तहत समीक्षा करता है। इसका उपयोग कोड समीक्षा या गुणवत्ता आकलनों के लिए करें।
```java
String prompt = """
@@ -354,18 +354,18 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ ट्राई करें:** संरचित विश्लेषण के बारे में पूछें:
-> - "विभिन्न प्रकार की कोड समीक्षाओं के लिए विश्लेषण फ़्रेमवर्क को कैसे अनुकूलित करें?"
-> - "संरचित आउटपुट को प्रोग्रामेटिक रूप से पार्स और क्रियान्वित करने का सर्वोत्तम तरीका क्या है?"
-> - "विभिन्न समीक्षा सत्रों में निरंतर गंभीरता स्तर कैसे सुनिश्चित करें?"
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ प्रयास करें:** संरचित विश्लेषण के बारे में पूछें:
+> - "अलग-अलग प्रकार की कोड समीक्षाओं के लिए विश्लेषण फ्रेमवर्क को कैसे कस्टमाइज करू?"
+> - "संरचित आउटपुट को प्रोग्रामेटिक रूप से पार्स और लागू करने का सबसे अच्छा तरीका क्या है?"
+> - "अलग-अलग समीक्षा सत्रों में लगातार गंभीरता स्तर कैसे सुनिश्चित करें?"
-नीचे की आकृति दिखाती है कि कैसे यह संरचित फ़्रेमवर्क कोड समीक्षा को निरंतर श्रेणियों में गंभीरता स्तर के साथ व्यवस्थित करता है।
+निम्न चित्र यह दिखाता है कि कैसे यह संरचित फ्रेमवर्क कोड समीक्षा को लगातार श्रेणियों में severity levels के साथ व्यवस्थित करता है।
-*गंभीरता स्तर के साथ सुसंगत कोड समीक्षा के लिए फ़्रेमवर्क*
+*गंभीरता स्तर के साथ लगातार कोड समीक्षाओं के लिए फ्रेमवर्क*
-**मल्टी-टर्न चैट** - वार्तालाप के लिए जिसमें संदर्भ की आवश्यकता हो। मॉडल पहले के संदेश याद रखता है और उन पर आधारित प्रतिक्रियाएँ बनाता है। इंटरैक्टिव सहायता सत्र या जटिल प्रश्नोत्तर के लिए उपयोग करें।
+**मल्टी-टर्न चैट** - ऐसी बातचीत के लिए जिसमें संदर्भ की जरूरत होती है। मॉडल पिछले संदेशों को याद रखता है और उन पर निर्माण करता है। इसका उपयोग इंटरेक्टिव हेल्प सेशंस या जटिल प्रश्नोत्तर के लिए करें।
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-नीचे की आकृति दिखाती है कि कैसे वार्तालाप संदर्भ कई टर्नों के दौरान जमा होता है और यह मॉडल के टोकन सीमा से कैसे संबंधित है।
+नीचे का चित्र दिखाता है कि कैसे बातचीत का संदर्भ कई टर्न्स में जमा होता है और यह मॉडल के टोकन सीमा से कैसे संबंधित है।
-*कैसे वार्तालाप संदर्भ कई टर्नों में जमा होता है जब तक कि टोकन सीमा पहुँच न जाए*
-**स्टेप-बाय-स्टेप तर्क** - ऐसे समस्याओं के लिए जहाँ स्पष्ट तर्क आवश्यक होता है। मॉडल प्रत्येक चरण के लिए स्पष्ट तर्क प्रस्तुत करता है। इसे गणित की समस्याओं, तर्क पहेलियों या तब उपयोग करें जब आपको सोचने की प्रक्रिया समझनी हो।
+*कैसे बातचीत का संदर्भ एकाधिक टर्न्स में जमा होता है जब तक कि टोकन सीमा तक न पहुँचे*
+
+**कदम-दर-कदम तर्क** - ऐसे समस्याओं के लिए जिनमें स्पष्ट लॉजिक की आवश्यकता होती है। मॉडल हर कदम के लिए स्पष्ट तर्क दर्शाता है। इसका उपयोग गणित की समस्या, तर्क पहेली या जब आप सोचने की प्रक्रिया को समझना चाहते हैं।
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-नीचे दिया गया चित्र दिखाता है कि कैसे मॉडल समस्याओं को स्पष्ट, क्रमांकित तर्कात्मक चरणों में विभाजित करता है।
+नीचे का चित्र दिखाता है कि कैसे मॉडल समस्याओं को स्पष्ट, क्रमांकित तार्किक चरणों में विभाजित करता है।
+*समस्याओं को स्पष्ट तार्किक चरणों में विभाजित करना*
-*समस्याओं को स्पष्ट तर्कात्मक चरणों में विभाजित करना*
-
-**बाध्य आउटपुट** - ऐसे उत्तरों के लिए जिनमें विशिष्ट स्वरूप आवश्यकताएँ होती हैं। मॉडल सख्ती से स्वरूप और लंबाई नियमों का पालन करता है। इसे सारांशों या जब आपको सटीक आउटपुट संरचना चाहिए तब उपयोग करें।
+**सीमित आउटपुट** - विशेष प्रारूप आवश्यकताओं वाले उत्तरों के लिए। मॉडल सख्ती से प्रारूप और लंबाई नियमों का पालन करता है। इसका उपयोग सारांशों के लिए या जब आपको सटीक आउटपुट संरचना की आवश्यकता हो।
```java
String prompt = """
@@ -420,21 +420,21 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-निम्नलिखित चित्र दिखाता है कि कैसे बाधाएं मॉडल को सख्ती से आपके स्वरूप और लंबाई आवश्यकताओं के अनुरूप आउटपुट उत्पन्न करने के लिए मार्गदर्शन करती हैं।
+निम्नलिखित आरेख दिखाता है कि कैसे प्रतिबंध मॉडल को आपके प्रारूप और लंबाई आवश्यकताओं के कड़ाई से पालन करने वाला आउटपुट उत्पन्न करने के लिए मार्गदर्शन करते हैं।
-*विशिष्ट स्वरूप, लंबाई और संरचना आवश्यकताओं को लागू करना*
+*विशिष्ट प्रारूप, लंबाई, और संरचना आवश्यकताओं को लागू करना*
## एप्लिकेशन चलाएँ
**डिप्लॉयमेंट सत्यापित करें:**
-सुनिश्चित करें कि `.env` फ़ाइल रूट डायरेक्टरी में मौजूद है जिसमें Azure क्रेडेंशियल्स हैं (Module 01 के दौरान बनाया गया)। इसे मॉड्यूल डायरेक्टरी (`02-prompt-engineering/`) से चलाएं:
+सुनिश्चित करें कि `.env` फ़ाइल रूट निर्देशिका में मौजूद है जिसमें Azure क्रेडेंशियल्स हैं (जो मॉड्यूल 01 के दौरान बनाई गई थी)। इसे मॉड्यूल निर्देशिका (`02-prompt-engineering/`) से चलाएँ:
**Bash:**
```bash
-cat ../.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT दिखाने चाहिए
+cat ../.env # इसे AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT दिखाना चाहिए
```
**PowerShell:**
@@ -444,25 +444,25 @@ Get-Content ..\.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT दिखा
**एप्लिकेशन शुरू करें:**
-> **नोट:** यदि आपने पहले ही रूट डायरेक्टरी से `./start-all.sh` का उपयोग करके सभी एप्लिकेशन शुरू कर दिए हैं (जैसा कि Module 01 में वर्णित है), तो यह मॉड्यूल पोर्ट 8083 पर पहले से चल रहा है। आप नीचे दिए गए स्टार्ट कमांड छोड़ सकते हैं और सीधे http://localhost:8083 पर जा सकते हैं।
+> **नोट:** यदि आपने पहले ही रूट निर्देशिका से `./start-all.sh` का उपयोग करते हुए सभी एप्लिकेशन शुरू कर दिए हैं (जैसा कि मॉड्यूल 01 में बताया गया है), तो यह मॉड्यूल पहले से पोर्ट 8083 पर चल रहा है। आप नीचे दिए गए स्टार्ट कमांड्स छोड़ सकते हैं और सीधे http://localhost:8083 पर जा सकते हैं।
-**ऑप्शन 1: Spring Boot डैशबोर्ड का उपयोग करना (VS Code उपयोगकर्ताओं के लिए अनुशंसित)**
+**विकल्प 1: स्प्रिंग बूट डैशबोर्ड का उपयोग करना (VS कोड उपयोगकर्ताओं के लिए अनुशंसित)**
-डेव कंटेनर में Spring Boot डैशबोर्ड एक्सटेंशन शामिल है, जो सभी Spring Boot एप्लिकेशन को प्रबंधित करने के लिए एक दृश्य इंटरफ़ेस प्रदान करता है। आप इसे VS Code के Activity Bar के बाईं ओर देख सकते हैं (Spring Boot आइकन देखें)।
+डेव कंटेनर में स्प्रिंग बूट डैशबोर्ड एक्सटेंशन शामिल है, जो सभी स्प्रिंग बूट एप्लिकेशन को प्रबंधित करने के लिए एक दृश्य इंटरफ़ेस प्रदान करता है। आप इसे VS कोड के बाईं तरफ एक्टिविटी बार में पा सकते हैं (स्प्रिंग बूट आइकन देखें)।
-Spring Boot डैशबोर्ड से आप:
-- वर्कस्पेस में सभी उपलब्ध Spring Boot एप्लिकेशन देख सकते हैं
-- एक क्लिक से एप्लिकेशन शुरू/रोक सकते हैं
-- वास्तविक समय में एप्लिकेशन के लॉग देख सकते हैं
-- एप्लिकेशन की स्थिति मॉनिटर कर सकते हैं
+स्प्रिंग बूट डैशबोर्ड से, आप:
+- वर्कस्पेस में सभी उपलब्ध स्प्रिंग बूट एप्लिकेशन देख सकते हैं
+- एप्लिकेशन को एक क्लिक में शुरू/रोक सकते हैं
+- वास्तविक समय में एप्लिकेशन लॉग देख सकते हैं
+- एप्लिकेशन की स्थिति की निगरानी कर सकते हैं
-"prompt-engineering" के बगल में प्ले बटन क्लिक करके इस मॉड्यूल को शुरू करें, या सभी मॉड्यूल एक साथ शुरू करें।
+सिर्फ "prompt-engineering" के पास प्ले बटन पर क्लिक करें इस मॉड्यूल को शुरू करने के लिए, या सभी मॉड्यूल को एक साथ शुरू करें।
-*VS Code में Spring Boot डैशबोर्ड—सभी मॉड्यूल एक ही जगह से शुरू, रोकें और मॉनिटर करें*
+*VS कोड में स्प्रिंग बूट डैशबोर्ड — सभी मॉड्यूल को एक स्थान से शुरू, रोकें, और मॉनिटर करें*
-**ऑप्शन 2: शेल स्क्रिप्ट का उपयोग करना**
+**विकल्प 2: शेल स्क्रिप्ट का उपयोग करना**
सभी वेब एप्लिकेशन शुरू करें (मॉड्यूल 01-04):
@@ -492,9 +492,9 @@ cd 02-prompt-engineering
.\start.ps1
```
-दोनों स्क्रिप्ट रूट `.env` फ़ाइल से पर्यावरण चर स्वचालित रूप से लोड करती हैं और यदि JAR फ़ाइलें मौजूद नहीं हैं तो उन्हें बनाएंगी।
+दोनों स्क्रिप्ट्स स्वतः रूट `.env` फ़ाइल से वातावरण वेरिएबल लोड करती हैं और यदि JAR फाइलें मौजूद नहीं हैं तो उन्हें बिल्ड भी करेंगी।
-> **नोट:** यदि आप शुरू करने से पहले सभी मॉड्यूल मैन्युअली बिल्ड करना पसंद करते हैं:
+> **नोट:** यदि आप शुरू करने से पहले मैन्युअली सभी मॉड्यूल बिल्ड करना चाहते हैं:
>
> **Bash:**
> ```bash
@@ -521,76 +521,76 @@ cd .. && ./stop-all.sh # सभी मॉड्यूल
**PowerShell:**
```powershell
-.\stop.ps1 # यह मॉड्यूल केवल
+.\stop.ps1 # केवल यह मॉड्यूल
# या
-cd ..; .\stop-all.ps1 # सभी मॉड्यूल्स
+cd ..; .\stop-all.ps1 # सभी मॉड्यूल
```
-## एप्लिकेशन स्क्रीनशॉट्स
+## एप्लिकेशन स्क्रीनशॉट
-यहां प्रॉम्प्ट इंजीनियरिंग मॉड्यूल का मुख्य इंटरफ़ेस है, जहाँ आप आठों पैटर्न एक साथ प्रयोग कर सकते हैं।
+यहां प्रॉम्प्ट इंजीनियरिंग मॉड्यूल का मुख्य इंटरफ़ेस है, जहां आप सभी आठ पैटर्न को एक साथ प्रयोग कर सकते हैं।
-*मुख्य डैशबोर्ड जो सभी 8 प्रॉम्प्ट इंजीनियरिंग पैटर्न उनके लक्षणों और उपयोग मामलों के साथ दिखाता है*
+*मुख्य डैशबोर्ड जो सभी 8 प्रॉम्प्ट इंजीनियरिंग पैटर्न को उनके लक्षणों और उपयोग मामलों के साथ दिखाता है*
-## पैटर्न्स की खोज
+## पैटर्न का अन्वेषण
-वेब इंटरफ़ेस आपको विभिन्न प्रॉम्प्टिंग रणनीतियों के साथ प्रयोग करने देता है। प्रत्येक पैटर्न अलग-अलग समस्याओं को हल करता है - देखें कि कौन सा पैटर्न कब कार्य करता है।
+वेब इंटरफ़ेस आपको विभिन्न प्रॉम्प्टिंग रणनीतियों का प्रयोग करने देता है। प्रत्येक पैटर्न विभिन्न समस्याओं को हल करता है - उन्हें आज़माएँ यह देखने के लिए कि हर दृष्टिकोण कब बेहतर काम करता है।
-> **नोट: स्ट्रीमिंग बनाम नॉन-स्ट्रीमिंग** — प्रत्येक पैटर्न पेज पर दो बटन हैं: **🔴 स्ट्रीम रिस्पांस (लाइव)** और एक **नॉन-स्ट्रीमिंग** विकल्प। स्ट्रीमिंग Server-Sent Events (SSE) का उपयोग करता है ताकि मॉडल द्वारा जेनरेट किए जा रहे टोकन वास्तविक समय में दिखाई दें, इसलिए आप तुरंत प्रगति देख सकते हैं। नॉन-स्ट्रीमिंग विकल्प पूरी प्रतिक्रिया आने तक प्रतीक्षा करता है। गहरे तर्क वाले प्रॉम्प्ट्स (जैसे High Eagerness, Self-Reflecting Code) के लिए नॉन-स्ट्रीमिंग कॉल बहुत लंबा समय ले सकता है — कभी-कभी मिनटों तक — बिना कोई दृश्य प्रतिक्रिया। **जटिल प्रॉम्प्ट्स के साथ प्रयोग करते समय स्ट्रीमिंग का उपयोग करें** ताकि आप मॉडल को काम करते देखें और ऐसा न लगे कि अनुरोध टाइम आउट हो गया हो।
+> **नोट: स्ट्रीमिंग बनाम नॉन-स्ट्रीमिंग** — प्रत्येक पैटर्न पेज पर दो बटन होते हैं: **🔴 Stream Response (Live)** और एक **नॉन-स्ट्रीमिंग** विकल्प। स्ट्रीमिंग सर्वर-सेन्ट इवेंट्स (SSE) का उपयोग करता है जो वास्तविक समय में टोकन दिखाता है जब मॉडल उन्हें उत्पन्न करता है, इसलिए आप तुरंत प्रगति देख सकते हैं। नॉन-स्ट्रीमिंग विकल्प पूरा उत्तर प्राप्त होने तक प्रतीक्षा करता है। गहरे तर्क वाले प्रॉम्प्ट्स (जैसे हाई ईगर्नेस, सेल्फ-रिफ्लेक्टिंग कोड) के लिए, नॉन-स्ट्रीमिंग कॉल बहुत लंबा समय ले सकता है — कभी-कभी मिनटों तक — बिना किसी दृश्य प्रतिक्रिया के। **जटिल प्रॉम्प्ट्स के साथ प्रयोग करते समय स्ट्रीमिंग का उपयोग करें** ताकि आप मॉडल के काम करते हुए देख सकें और यह न लगे कि अनुरोध अवधि समाप्त हो गई है।
>
-> **नोट: ब्राउज़र आवश्यकता** — स्ट्रीमिंग फीचर Fetch Streams API (`response.body.getReader()`) का उपयोग करता है, जो पूर्ण ब्राउज़र (Chrome, Edge, Firefox, Safari) में ही कार्य करता है। यह VS Code के इन-बिल्ट Simple Browser में काम नहीं करता क्योंकि उसका वेबव्यू ReadableStream API को सपोर्ट नहीं करता। यदि आप Simple Browser का उपयोग करते हैं, तो नॉन-स्ट्रीमिंग बटन सामान्य रूप से काम करेंगे — केवल स्ट्रीमिंग बटन प्रभावित होंगे। पूर्ण अनुभव के लिए बाहरी ब्राउज़र में `http://localhost:8083` खोलें।
+> **नोट: ब्राउज़र आवश्यकता** — स्ट्रीमिंग फीचर Fetch Streams API (`response.body.getReader()`) का उपयोग करता है जिसे एक फुल ब्राउज़र (Chrome, Edge, Firefox, Safari) की जरूरत होती है। यह VS कोड के बिल्ट-इन सिंपल ब्राउज़र में काम नहीं करता है क्योंकि उसका वेबव्यू ReadableStream API का समर्थन नहीं करता। यदि आप सिंपल ब्राउज़र का उपयोग करते हैं, तो नॉन-स्ट्रीमिंग बटन सामान्य रूप से कार्य करेंगे — केवल स्ट्रीमिंग बटन प्रभावित होंगे। पूर्ण अनुभव के लिए `http://localhost:8083` को बाहरी ब्राउज़र में खोलें।
-### कम बनाम अधिक उत्सुकता
+### कम बनाम उच्च उत्साह
-"15% of 200 क्या है?" जैसे सरल प्रश्न Low Eagerness के साथ पूछें। आपको तुरंत, सीधे उत्तर मिलेगा। अब "उच्च-ट्रैफ़िक API के लिए कैशिंग रणनीति डिज़ाइन करें" जैसा जटिल सवाल High Eagerness के साथ पूछें। **🔴 स्ट्रीम रिस्पांस (लाइव)** क्लिक करें और देखें कि मॉडल कैसे टोकन-दर-टोकन विस्तृत तर्क प्रस्तुत करता है। समान मॉडल, समान प्रश्न संरचना - लेकिन प्रॉम्प्ट बताता है कि कितना सोच-विचार करना है।
+"200 का 15% क्या है?" जैसे सरल प्रश्न को कम उत्साह के साथ पूछें। आपको एक त्वरित, सीधे उत्तर मिलेगा। अब कुछ जटिल पूछें जैसे "उच्च-ट्रैफ़िक API के लिए कैशिंग रणनीति डिज़ाइन करें" उच्च उत्साह के साथ। **🔴 Stream Response (Live)** पर क्लिक करें और मॉडल के विस्तृत तर्क को टोकन-दर-टोकन देखें। समान मॉडल, समान प्रश्न संरचना - लेकिन प्रॉम्प्ट उसे बताता है कि कितना विचार करना है।
### कार्य निष्पादन (टूल प्रीएम्बल्स)
-मल्टी-स्टेप वर्कफ़्लोज पहले से योजना और प्रगति narration से लाभ उठाते हैं। मॉडल बताता है कि वह क्या करेगा, हर चरण का वर्णन करता है, फिर परिणाम सारांशित करता है।
+मल्टी-स्टेप वर्कफ़्लो पहले से योजना बनाने और प्रगति का वर्णन करने से लाभ उठाते हैं। मॉडल बताता है कि वह क्या करेगा, प्रत्येक चरण का वर्णन करता है, फिर परिणामों का सारांश करता है।
-### स्व-प्रतिबिंबित कोड
+### स्वयं-प्रतिबिंबित कोड
-"एक ईमेल सत्यापन सेवा बनाएं" आज़माएं। केवल कोड जेनरेट करने और रुकने के बजाय, मॉडल जेनरेट करता है, गुणवत्ता मानदंडों के खिलाफ मूल्यांकन करता है, कमजोरियां पहचानता है, और सुधार करता है। आप देखेंगे कि यह तब तक पुनरावृत्ति करता है जब तक कोड उत्पादन मानकों को पूरा न कर ले।
+"एक ईमेल सत्यापन सेवा बनाएं" आज़माएँ। केवल कोड उत्पन्न करने और रुकने की बजाय, मॉडल कोड उत्पन्न करता है, गुणवत्ता मानदंडों के खिलाफ मूल्यांकन करता है, कमजोरियां पहचानता है, और सुधार करता है। आप देखेंगे कि यह तब तक पुनरावृत्ति करता है जब तक कोड उत्पादन मानकों को पूरा न कर लें।
### संरचित विश्लेषण
-कोड समीक्षा के लिए सुसंगत मूल्यांकन फ्रेमवर्क की आवश्यकता होती है। मॉडल कोड का विश्लेषण तय श्रेणियों (सहीपन, प्रथाएँ, प्रदर्शन, सुरक्षा) के साथ गंभीरता स्तरों के आधार पर करता है।
+कोड समीक्षाओं को लगातार मूल्यांकन फ्रेमवर्क की आवश्यकता होती है। मॉडल कोड का विश्लेषण स्थिर श्रेणियों (शुद्धता, प्रथाएँ, प्रदर्शन, सुरक्षा) के साथ करता है और तीव्रता स्तर दर्शाता है।
-### मल्टी-टर्न चैट
+### बहु-चरण वार्तालाप
-"Spring Boot क्या है?" पूछें, फिर तुरंत "मुझे एक उदाहरण दिखाओ" पूछें। मॉडल आपका पहला प्रश्न याद रखता है और आपको विशेष रूप से Spring Boot का उदाहरण देता है। बिना मेमोरी के, दूसरा प्रश्न बहुत अस्पष्ट होगा।
+"स्प्रिंग बूट क्या है?" पूछें और तुरंत "मुझे एक उदाहरण दिखाएं" का पालन करें। मॉडल आपके पहले प्रश्न को याद रखता है और आपको विशेष रूप से स्प्रिंग बूट का उदाहरण देता है। बिना स्मृति के, दूसरा प्रश्न बहुत अस्पष्ट होता।
-### स्टेप-बाय-स्टेप तर्क
+### चरण-दर-चरण तर्क
-कोई गणित की समस्या चुनें और इसे दोनों स्टेप-बाय-स्टेप तर्क और कम उत्सुकता के साथ आज़माएं। कम उत्सुकता सिर्फ उत्तर देता है — तेज लेकिन अस्पष्ट। स्टेप-बाय-स्टेप आपको हर गणना और निर्णय दिखाता है।
+कोई गणित की समस्या चुनें और इसे चरण-दर-चरण तर्क और कम उत्साह दोनों के साथ आज़माएँ। कम उत्साह सिर्फ जल्दी उत्तर देता है - तेज लेकिन अस्पष्ट। चरण-दर-चरण आपको हर गणना और निर्णय दिखाता है।
-### बाध्य आउटपुट
+### सीमित आउटपुट
-जब आपको विशिष्ट स्वरूप या शब्द संख्या की आवश्यकता हो, यह पैटर्न सख्ती से पालन करता है। ठीक 100 शब्दों के बुलेट पॉइंट फॉर्मेट में सारांश बनाएं।
+जब आपको विशिष्ट प्रारूप या शब्द संख्या की आवश्यकता होती है, तो यह पैटर्न कड़ाई से पालन करता है। बिल्कुल 100 शब्दों वाले बुलेट पॉइंट फॉर्मेट में सारांश उत्पन्न करने का प्रयास करें।
## आप वास्तव में क्या सीख रहे हैं
**तर्क प्रयास सब कुछ बदल देता है**
-GPT-5.2 आपको प्रॉम्प्ट के जरिए गणना प्रयास नियंत्रित करने देता है। कम प्रयास तेज उत्तर देता है जिसमें न्यूनतम खोज होती है। उच्च प्रयास का मतलब है कि मॉडल गहराई से सोचने के लिए समय लेता है। आप सीख रहे हैं कि कार्य की जटिलता के अनुसार प्रयास मिलाएं — सरल प्रश्नों पर समय बर्बाद न करें, लेकिन जटिल निर्णय जल्दी न करें।
+GPT-5.2 आपको अपने प्रॉम्प्ट्स के माध्यम से गणनात्मक प्रयास को नियंत्रित करने देता है। कम प्रयास का मतलब है तेज उत्तर जिसमें न्यूनतम खोज होती है। उच्च प्रयास का मतलब है मॉडल को गहराई से सोचने के लिए समय लेना। आप सीख रहे हैं कि प्रयास को कार्य की जटिलता के अनुसार मिलाएं - सरल प्रश्नों पर समय बर्बाद न करें, लेकिन जटिल निर्णयों में जल्दी न करें।
-**संरचना व्यवहार को मार्गदर्शित करती है**
+**संरचना व्यवहार का मार्गदर्शन करती है**
-प्रॉम्प्ट में XML टैग्स देखें? वे केवल सजावट नहीं हैं। मॉडल संरचित निर्देशों का पालन मुक्त रूप के मुकाबले अधिक भरोसेमंद तरीके से करता है। जब आपको मल्टी-स्टेप प्रक्रियाएं या जटिल तर्क चाहिए, संरचना मॉडल को यह ट्रैक करने में मदद करती है कि वह कहाँ है और अगला क्या है। नीचे दिया गया चित्र एक अच्छी तरह से संरचित प्रॉम्प्ट को तोड़ता है, दिखाता है कि ``, ``, ``, ``, और `` जैसे टैग आपके निर्देशों को स्पष्ट खंडों में कैसे व्यवस्थित करते हैं।
+प्रॉम्प्ट में XML टैग्स देखें? वे सजावट नहीं हैं। मॉडल संरचित निर्देशों का पालन स्वतंत्र पाठ की तुलना में अधिक विश्वसनीयता से करता है। जब आपको मल्टी-स्टेप प्रक्रियाएं या जटिल तर्क चाहिए, तो संरचना मॉडल की सहायता करती है यह ट्रैक करने में कि वह कहाँ है और अगला क्या है। नीचे दिया गया आरेख एक सुव्यवस्थित प्रॉम्प्ट को तोड़ता है, दिखाते हुए कि कैसे टैग्स जैसे ``, ``, ``, ``, और `` आपके निर्देशों को स्पष्ट अनुभागों में व्यवस्थित करते हैं।
-*एक अच्छी तरह से संरचित प्रॉम्प्ट की संरचना जिसमें स्पष्ट अनुभाग और XML-शैली संगठन है*
+*एक सुव्यवस्थित प्रॉम्प्ट का अवयव जिसमें स्पष्ट अनुभाग और XML-शैली संगठन है*
-**स्व-मूल्यांकन के जरिए गुणवत्ता**
+**स्व-मूल्यांकन के माध्यम से गुणवत्ता**
-स्व-प्रतिबिंबित पैटर्न गुणवत्ता मानदंडों को स्पष्ट बनाकर काम करते हैं। मॉडल पर "यह सही करेगा" की आशा करने के बजाय, आप उसे बताते हैं कि "सही" का क्या अर्थ है: सही तर्क, त्रुटि हैंडलिंग, प्रदर्शन, सुरक्षा। मॉडल तब अपनी आउटपुट का मूल्यांकन कर सकता है और सुधार कर सकता है। इससे कोड निर्माण लॉटरी नहीं बल्कि एक प्रक्रिया बन जाता है।
+स्वयं-प्रतिबिंबित पैटर्न गुणवत्ता मानदंडों को स्पष्ट बनाकर काम करते हैं। मॉडल के "सही करने" की आशा करने के बजाय, आप इसे बताते हैं कि "सही" का क्या मतलब है: सही तर्क, त्रुटि प्रबंधन, प्रदर्शन, सुरक्षा। फिर मॉडल अपने आउटपुट का मूल्यांकन कर सकता है और सुधार कर सकता है। यह कोड जनरेशन को लॉटरी से प्रक्रिया में बदल देता है।
**संदर्भ सीमित है**
-मल्टी-टर्न वार्तालाप प्रत्येक अनुरोध के साथ संदेश इतिहास शामिल करके काम करता है। लेकिन सीमा होती है — प्रत्येक मॉडल की अधिकतम टोकन संख्या होती है। संवाद बढ़ने पर आपको ऐसी रणनीतियां अपनानी होंगी जिससे प्रासंगिक संदर्भ बना रहे बिना उस सीमा को पार किए। यह मॉड्यूल आपको मेमोरी कैसे काम करती है दिखाता है; बाद में आप सीखेंगे कब सारांश बनाना है, कब भूलना है, और कब पुनः प्राप्त करना है।
+बहु-चरण वार्तालाप हर अनुरोध के साथ संदेश इतिहास शामिल कर काम करते हैं। लेकिन सीमा होती है - हर मॉडल की अधिकतम टोकन संख्या होती है। जैसे-जैसे बातचीत बढ़ती है, आपको प्रासंगिक संदर्भ बनाए रखने के लिए रणनीतियाँ अपनानी होंगी बिना उस सीमा को पार किए। यह मॉड्यूल आपको दिखाता है कि स्मृति कैसे काम करती है; बाद में आप सीखेंगे कि कब सारांश बनाना है, कब भूलना है, और कब पुनः प्राप्त करना है।
## अगले कदम
@@ -598,11 +598,11 @@ GPT-5.2 आपको प्रॉम्प्ट के जरिए गणन
---
-**नेविगेशन:** [← पिछला: Module 01 - परिचय](../01-introduction/README.md) | [मुख्य पृष्ठ पर वापस](../README.md) | [अगला: Module 03 - RAG →](../03-rag/README.md)
+**नेविगेशन:** [← पिछला: मॉड्यूल 01 - परिचय](../01-introduction/README.md) | [मुख्य पेज पर वापस](../README.md) | [अगला: मॉड्यूल 03 - RAG →](../03-rag/README.md)
---
**अस्वीकरण**:
-यह दस्तावेज़ एआई अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को अधिकृत स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
+इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
\ No newline at end of file
diff --git a/translations/hi/03-rag/README.md b/translations/hi/03-rag/README.md
index b283ddba4..0c07e23bd 100644
--- a/translations/hi/03-rag/README.md
+++ b/translations/hi/03-rag/README.md
@@ -1,144 +1,143 @@
-# Module 03: RAG (रिट्रीवल-ऑगमेंटेड जनरेशन)
-
-## Table of Contents
-
-- [Video Walkthrough](../../../03-rag)
-- [What You'll Learn](../../../03-rag)
-- [Prerequisites](../../../03-rag)
-- [Understanding RAG](../../../03-rag)
- - [Which RAG Approach Does This Tutorial Use?](../../../03-rag)
-- [How It Works](../../../03-rag)
- - [Document Processing](../../../03-rag)
- - [Creating Embeddings](../../../03-rag)
- - [Semantic Search](../../../03-rag)
- - [Answer Generation](../../../03-rag)
-- [Run the Application](../../../03-rag)
-- [Using the Application](../../../03-rag)
- - [Upload a Document](../../../03-rag)
- - [Ask Questions](../../../03-rag)
- - [Check Source References](../../../03-rag)
- - [Experiment with Questions](../../../03-rag)
-- [Key Concepts](../../../03-rag)
- - [Chunking Strategy](../../../03-rag)
- - [Similarity Scores](../../../03-rag)
- - [In-Memory Storage](../../../03-rag)
- - [Context Window Management](../../../03-rag)
-- [When RAG Matters](../../../03-rag)
-- [Next Steps](../../../03-rag)
-
-## Video Walkthrough
-
-देखें यह लाइव सेशन जो बताता है कि इस मॉड्यूल के साथ कैसे शुरुआत करें:
+# मॉड्यूल 03: RAG (रिट्रीवल-अगमेंटेड जनरेशन)
+
+## सामग्री-सूची
+
+- [वीडियो वॉकथ्रू](#वीडियो-वॉकथ्रू)
+- [आप क्या सीखेंगे](#आप-क्या-सीखेंगे)
+- [पूर्व आवश्यकताएँ](#पूर्व-आवश्यकताएँ)
+- [RAG को समझना](#rag-को-समझना)
+ - [इस ट्यूटोरियल में कौन सा RAG दृष्टिकोण उपयोग होता है?](#इस-ट्यूटोरियल-में-कौन-सा-rag-दृष्टिकोण-उपयोग-होता-है)
+- [यह कैसे काम करता है](#यह-कैसे-काम-करता-है)
+ - [दस्तावेज़ प्रसंस्करण](#दस्तावेज़-प्रसंस्करण)
+ - [एम्बेडिंग बनाना](#एम्बेडिंग-बनाना)
+ - [सिमेंटिक सर्च](#सिमेंटिक-सर्च)
+ - [उत्तर निर्माण](#उत्तर-उत्पन्न-करना)
+- [एप्लिकेशन चलाना](#एप्लिकेशन-चलाएँ)
+- [एप्लिकेशन का उपयोग](#एप्लिकेशन-का-उपयोग-करना)
+ - [दस्तावेज़ अपलोड करें](#एक-दस्तावेज़-अपलोड-करें)
+ - [प्रश्न पूछें](#प्रश्न-पूछें)
+ - [स्रोत संदर्भ जांचें](#स्रोत-संदर्भ-जांचें)
+ - [प्रश्नों के साथ प्रयोग करें](#प्रश्नों-के-साथ-प्रयोग-करें)
+- [प्रमुख अवधारणाएँ](#मुख्य-अवधारणाएँ)
+ - [चंकिंग रणनीति](#खंडन-रणनीति)
+ - [समानता स्कोर](#समानता-स्कोर)
+ - [इन-मेमोरी भंडारण](#इन-मेमोरी-स्टोरेज)
+ - [कॉन्टेक्स्ट विंडो प्रबंधन](#संदर्भ-विंडो-प्रबंधन)
+- [जब RAG महत्वपूर्ण होता है](#जब-rag-महत्वपूर्ण-होता-है)
+- [अगले कदम](#अगले-कदम)
+
+## वीडियो वॉकथ्रू
+
+इस लाइव सत्र को देखें जो इस मॉड्यूल के साथ आरंभ करने का तरीका समझाता है:
-## What You'll Learn
+## आप क्या सीखेंगे
-पिछले मॉड्यूल्स में, आपने सीखा कि AI से बातचीत कैसे करें और अपने प्रॉम्प्ट्स को प्रभावी ढंग से कैसे संरचित करें। लेकिन एक मूलभूत सीमा है: भाषा मॉडल केवल वही जानते हैं जो उन्होंने प्रशिक्षण के दौरान सीखा है। वे आपकी कंपनी की नीतियों, आपके प्रोजेक्ट दस्तावेज़ या उन जानकारियों पर उत्तर नहीं दे सकते जिन पर वे प्रशिक्षित नहीं हुए।
+पिछले मॉड्यूल में, आपने सीखा कि कैसे AI के साथ वार्तालाप करें और अपने प्रांप्ट्स को प्रभावी ढंग से संरचित करें। लेकिन एक मौलिक सीमा है: भाषा मॉडल केवल वही जानते हैं जो उन्होंने प्रशिक्षण के दौरान सीखा है। वे आपके कंपनी की नीतियों, आपके प्रोजेक्ट की डाक्यूमेंटेशन, या ऐसी किसी भी जानकारी पर सवाल का जवाब नहीं दे सकते जिन पर उन्हें प्रशिक्षित नहीं किया गया।
-RAG (रिट्रीवल-ऑगमेंटेड जनरेशन) इस समस्या को हल करता है। मॉडल को आपकी जानकारी सिखाने की कोशिश करने के बजाय (जो महंगा और व्यावहारिक नहीं है), आप इसे अपने दस्तावेज़ों के माध्यम से खोज करने की क्षमता देते हैं। जब कोई प्रश्न पूछता है, तो सिस्टम प्रासंगिक जानकारी ढूंढता है और उसे प्रॉम्प्ट में शामिल करता है। मॉडल फिर उस प्राप्त संदर्भ के आधार पर उत्तर देता है।
+RAG (रिट्रीवल-अगमेंटेड जनरेशन) इस समस्या का समाधान है। मॉडल को आपकी जानकारी सिखाने की बजाय (जो महंगा और अप्रैक्टिकल है), आप इसे आपके दस्तावेज़ों के माध्यम से खोजने की क्षमता देते हैं। जब कोई प्रश्न पूछता है, सिस्टम प्रासंगिक जानकारी खोजता है और उसे प्रांप्ट में शामिल करता है। मॉडल फिर उस पुनः प्राप्त संदर्भ के आधार पर उत्तर देता है।
-RAG को एक संदर्भ पुस्तकालय देने के रूप में सोचें। जब आप प्रश्न पूछते हैं, तो सिस्टम:
+RAG को आप मॉडल को एक संदर्भ पुस्तकालय देने के रूप में सोचिए। जब आप प्रश्न पूछते हैं, तंत्र:
-1. **यूज़र क्वेरी** - आप सवाल पूछते हैं
-2. **एम्बेडिंग** - आपके प्रश्न को एक वेक्टर में परिवर्तित करता है
-3. **वेक्टर खोज** - समान दस्तावेज़ के टुकड़े खोजता है
-4. **संदर्भ संयोजन** - प्रॉम्प्ट में प्रासंगिक टुकड़ों को जोड़ता है
+1. **उपयोगकर्ता क्वेरी** - आप प्रश्न पूछते हैं
+2. **एम्बेडिंग** - आपका प्रश्न वेक्टर में परिवर्तित होता है
+3. **वेक्टर सर्च** - समान दस्तावेज़ चंक्स खोजता है
+4. **संदर्भ संयोजन** - प्रासंगिक चंक्स को प्रांप्ट में जोड़ता है
5. **प्रतिक्रिया** - LLM संदर्भ के आधार पर उत्तर उत्पन्न करता है
-यह मॉडल के उत्तरों को आपके वास्तविक डेटा पर आधारित करता है बजाय इसके कि वह केवल अपने प्रशिक्षण ज्ञान पर निर्भर करे या उत्तर गढ़े।
+यह मॉडल के उत्तरों को आपके वास्तविक डेटा में आधार देता है बजाय इसके कि वह अपने प्रशिक्षण ज्ञान या अनुमान पर निर्भर हो।
-## Prerequisites
+## पूर्व आवश्यकताएँ
-- पूरा किया हुआ [Module 00 - Quick Start](../00-quick-start/README.md) (इस मॉड्यूल में बाद में संदर्भित Easy RAG उदाहरण के लिए)
-- पूरा किया हुआ [Module 01 - Introduction](../01-introduction/README.md) (Azure OpenAI संसाधन तैनात, जिसमें `text-embedding-3-small` एम्बेडिंग मॉडल शामिल है)
-- Azure क्रेडेंशियल्स के साथ रूट डायरेक्टरी में `.env` फ़ाइल (Module 01 में `azd up` द्वारा बनाई गई)
+- पूरा किया हुआ [मॉड्यूल 01 - परिचय](../01-introduction/README.md) (Azure OpenAI संसाधन तैनात, जिसमें `text-embedding-3-small` एम्बेडिंग मॉडल शामिल है)
+- रूट डायरेक्टरी में `.env` फ़ाइल जिसमें Azure क्रेडेंशियल्स हो (मॉड्यूल 01 में `azd up` द्वारा बनाया गया)
-> **Note:** यदि आपने Module 01 पूरा नहीं किया है, तो वहां तैनाती निर्देशों का पालन करें। `azd up` कमांड GPT चैट मॉडल और इस मॉड्यूल द्वारा उपयोग किए जाने वाले एम्बेडिंग मॉडल दोनों को तैनात करता है।
+> **ध्यान दें:** यदि आपने मॉड्यूल 01 पूरा नहीं किया है, तो पहले वहां तैनाती निर्देशों का पालन करें। `azd up` कमांड GPT चैट मॉडल और इस मॉड्यूल द्वारा उपयोग किए जाने वाले एम्बेडिंग मॉडल दोनों को तैनात करता है।
-## Understanding RAG
+## RAG को समझना
-नीचे चित्र में मूल अवधारणा दर्शाई गई है: मॉडल के प्रशिक्षण डेटा पर केवल निर्भर रहने के बजाय, RAG प्रत्येक उत्तर उत्पन्न करने से पहले इसे आपकी दस्तावेजों की एक संदर्भ पुस्तकालय देता है।
+नीचे दिया गया आरेख मुख्य अवधारणा को दर्शाता है: केवल मॉडल के प्रशिक्षण डेटा पर निर्भर रहने के बजाय, RAG इसे आपके दस्तावेज़ों की संदर्भ पुस्तकालय देता है ताकि वह प्रत्येक उत्तर बनाते समय उस पर सलाह कर सके।
-*यह चित्र एक मानक LLM (जो प्रशिक्षण डेटा से अनुमान लगाता है) और एक RAG-संवर्धित LLM (जो पहले आपकी दस्तावेजों से सलाह-मशविरा करता है) के बीच का अंतर दिखाता है।*
+*यह आरेख एक मानक LLM (जो प्रशिक्षण डेटा से अनुमान लगाता है) और एक RAG-संवर्धित LLM (जो पहले आपके दस्तावेज़ों से सलाह लेता है) के बीच का अंतर दिखाता है।*
-यहाँ टुकड़े अंत-से-अंत कैसे जुड़े हैं। उपयोगकर्ता का प्रश्न चार चरणों से होकर गुजरता है — एम्बेडिंग, वेक्टर खोज, संदर्भ संयोजन, और उत्तर जनरेशन — प्रत्येक पिछले पर आधारित:
+यहाँ यह टुकड़े अंत-से-अंत कैसे जुड़ते हैं, बताया गया है। एक उपयोगकर्ता का प्रश्न चार चरणों से गुजरता है — एम्बेडिंग, वेक्टर सर्च, संदर्भ संयोजन, और उत्तर निर्माण — प्रत्येक पिछले पर आधारित:
-*यह चित्र अंत-से-अंत RAG पाइपलाइन दिखाता है — एक उपयोगकर्ता क्वेरी एम्बेडिंग, वेक्टर खोज, संदर्भ संयोजन, और उत्तर उत्पादन प्रक्रिया से गुजरती है।*
+*यह आरेख अंत-से-अंत RAG पाइपलाइन दिखाता है — एक उपयोगकर्ता क्वेरी एम्बेडिंग, वेक्टर सर्च, संदर्भ संयोजन, और उत्तर निर्माण से गुजरती है।*
-इस मॉड्यूल के बाकी हिस्से में प्रत्येक चरण को विस्तार से दिखाया गया है, जिसमें कोड है जिसे आप चला और संशोधित कर सकते हैं।
+इस मॉड्यूल के बाकी हिस्से में हम प्रत्येक चरण को विस्तार से देखेंगे, जिनमें कोड भी शामिल है जिसे आप चला और संशोधित कर सकते हैं।
-### Which RAG Approach Does This Tutorial Use?
+### इस ट्यूटोरियल में कौन सा RAG दृष्टिकोण उपयोग होता है?
-LangChain4j RAG को लागू करने के तीन तरीके प्रदान करता है, प्रत्येक अलग स्तर की अमूर्तता के साथ। नीचे दिए गए चित्र में ये एक-दूसरे के साथ तुलना की गई हैं:
+LangChain4j तीन तरीके प्रदान करता है RAG को लागू करने के लिए, प्रत्येक अलग स्तर की अमूर्तता के साथ। नीचे दिया गया आरेख उन्हें एक साथ तुलना करता है:
-*यह चित्र तीन LangChain4j RAG दृष्टिकोणों — Easy, Native, और Advanced — को उनके मुख्य घटकों और उपयोग के समय के साथ तुलना करता है।*
+*यह आरेख तीन LangChain4j RAG दृष्टिकोणों — Easy, Native, और Advanced — को उनके मुख्य घटकों के साथ तुलना करता है और कब प्रत्येक का उपयोग करना है।*
-| Approach | What It Does | Trade-off |
+| दृष्टिकोण | यह क्या करता है | ट्रैड-ऑफ |
|---|---|---|
-| **Easy RAG** | `AiServices` और `ContentRetriever` के माध्यम से सब कुछ स्वचालित रूप से चलाता है। आप एक इंटरफ़ेस एनोटेट करते हैं, एक रिट्रीवर संलग्न करते हैं, और LangChain4j एम्बेडिंग, खोज, और प्रॉम्प्ट संयोजन को संभालता है। | न्यूनतम कोड, लेकिन आप हर चरण नहीं देख पाते। |
-| **Native RAG** | आप स्वयं एम्बेडिंग मॉडल कॉल करते हैं, स्टोर में खोज करते हैं, प्रॉम्प्ट बनाते हैं, और उत्तर उत्पन्न करते हैं — हर चरण स्पष्ट रूप से। | अधिक कोड, लेकिन हर चरण स्पष्ट और संशोधित करने योग्य है। |
-| **Advanced RAG** | प्लगनेबल क्वेरी ट्रांसफॉर्मर्स, राउटर्स, री-रैंकर्स और कंटेंट इंजेक्टर के साथ प्रोडक्शन-ग्रेड पाइपलाइनों के लिए `RetrievalAugmentor` फ्रेमवर्क का उपयोग करता है। | अधिकतम लचीलापन, लेकिन काफी अधिक जटिलता। |
+| **Easy RAG** | सब कुछ `AiServices` और `ContentRetriever` के माध्यम से अपने आप वायर करता है। आप एक इंटरफ़ेस एनोटेट करते हैं, एक रिट्रीवर लगाते हैं, और LangChain4j एम्बेडिंग, खोज और प्रांप्ट संयोजन को पर्दे के पीछे संभालता है। | कम कोड, लेकिन आप प्रत्येक चरण में क्या हो रहा है यह नहीं देख पाते। |
+| **Native RAG** | आप स्वयं एम्बेडिंग मॉडल कॉल करते हैं, स्टोर में खोज करते हैं, प्रांप्ट बनाते हैं, और उत्तर जनरेट करते हैं — एक स्पष्ट चरण के रूप में। | अधिक कोड, लेकिन हर चरण दिखाई देता है और संशोधित किया जा सकता है। |
+| **Advanced RAG** | `RetrievalAugmentor` फ्रेमवर्क का उपयोग करता है जिसमें प्लग-इन योग्य क्वेरी ट्रांसफॉर्मर्स, राउटर्स, री-रैंकर्स, और कंटेंट इंजेक्टर्स होते हैं, उत्पादन-ग्रेड पाइपलाइनों के लिए। | अत्यधिक लचीलापन, लेकिन काफी अधिक जटिलता। |
-**यह ट्यूटोरियल Native दृष्टिकोण का उपयोग करता है।** RAG पाइपलाइन के प्रत्येक चरण — क्वेरी का एम्बेडिंग, वेक्टर स्टोर में खोज, संदर्भ संयोजन, और उत्तर उत्पन्न करना — [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) में स्पष्ट रूप से लिखा गया है। यह जानबूझकर किया गया है: एक सीखने वाले संसाधन के रूप में, यह ज़्यादा महत्वपूर्ण है कि आप हर चरण देखें और समझें बजाय इसके कि कोड न्यूनतम हो। एक बार जब आप समझ जाएं कि टुकड़े कैसे फिट होते हैं, तो आप द्रुत प्रोटोटाइप के लिए Easy RAG या प्रोडक्शन सिस्टम के लिए Advanced RAG पर जा सकते हैं।
+**यह ट्यूटोरियल Native दृष्टिकोण का उपयोग करता है।** RAG पाइपलाइन का प्रत्येक चरण — क्वेरी का एम्बेडिंग, वेक्टर स्टोर में खोज, संदर्भ संयोजन, और उत्तर निर्माण — स्पष्ट रूप से [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) में लिखा गया है। यह इरादतन है: एक सीखने के संसाधन के रूप में, यह ज़रूरी है कि आप हर चरण देखें और समझें बजाय इस बात के कि कोड न्यूनतम हो। एक बार जब आप समझ जाएँ कि टुकड़े कैसे जुड़ते हैं, तो आप Easy RAG के लिए जल्दी प्रोटोटाइप बनाने या Advanced RAG के लिए उत्पादन प्रणाली बना सकते हैं।
-> **💡 Easy RAG पहले देख चुके हैं?** [Quick Start module](../00-quick-start/README.md) में एक Document Q&A उदाहरण ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)) शामिल है जो Easy RAG दृष्टिकोण का उपयोग करता है — LangChain4j स्वचालित रूप से एम्बेडिंग, खोज, और प्रॉम्प्ट संयोजन को संभालता है। यह मॉड्यूल उस पाइपलाइन को खोलता है ताकि आप देख सकें और हर चरण को नियंत्रित कर सकें।
+> **💡 Easy RAG के बारे में जिज्ञासु?** LangChain4j एक *Easy RAG* दृष्टिकोण भी प्रदान करता है जहाँ `AiServices` और `ContentRetriever` एम्बेडिंग, खोज, और प्रांप्ट संयोजन अपने आप संभालते हैं। यह मॉड्यूल अधिक स्पष्ट मार्ग अपनाता है — उस पाइपलाइन को खोलता है ताकि आप हर चरण खुद देख और नियंत्रण कर सकें।
-नीचे चित्र उस Quick Start उदाहरण की Easy RAG पाइपलाइन दिखाता है। ध्यान दें कि कैसे `AiServices` और `EmbeddingStoreContentRetriever` सारी जटिलता को छुपाते हैं — आप दस्तावेज़ लोड करते हैं, एक रिट्रीवर संलग्न करते हैं, और उत्तर प्राप्त करते हैं। इस मॉड्यूल में Native दृष्टिकोण उन छुपे हुए चरणों को खोलता है:
+नीचे दिया गया आरेख Easy RAG पाइपलाइन दिखाता है। गौर करें कि कैसे `AiServices` और `EmbeddingStoreContentRetriever` सारी जटिलता छुपाते हैं — आप एक दस्तावेज़ लोड करते हैं, रिट्रीवर लगाते हैं, और उत्तर प्राप्त करते हैं। इस मॉड्यूल में Native दृष्टिकोण उन छुपे चरणों को खोल देता है:
-*यह चित्र `SimpleReaderDemo.java` से Easy RAG पाइपलाइन दिखाता है। इसे इस मॉड्यूल के Native दृष्टिकोण से तुलना करें: Easy RAG एम्बेडिंग, रिट्रीवल, और प्रॉम्प्ट संयोजन को `AiServices` और `ContentRetriever` के पीछे छुपा देता है — आप एक दस्तावेज़ लोड करते हैं, रिट्रीवर संलग्न करते हैं, और उत्तर प्राप्त करते हैं। इस मॉड्यूल में Native दृष्टिकोण उस पाइपलाइन को खोलता है ताकि आप हर चरण (एम्बेड, खोजें, संदर्भ संयोजन करें, उत्तर उत्पन्न करें) स्वयं कॉल करें, जिससे पूरी दृश्यता और नियंत्रण मिलता है।*
+*यह आरेख Easy RAG पाइपलाइन दिखाता है। इसे इस मॉड्यूल के Native दृष्टिकोण के साथ तुलना करें: Easy RAG एम्बेडिंग, पुनः प्राप्ति, और प्रांप्ट संयोजन को `AiServices` और `ContentRetriever` के पीछे छुपाता है — आप एक दस्तावेज़ लोड करते हैं, रिट्रीवर लगाते हैं, और उत्तर प्राप्त करते हैं। इस मॉड्यूल का Native दृष्टिकोण वह पाइपलाइन खोलता है जिससे आप हर चरण (एम्बेड, सर्च, संदर्भ जोड़ना, जनरेट करना) स्वयं कॉल करते हैं, जिससे आपको पूर्ण दृश्यता और नियंत्रण मिलता है।*
-## How It Works
+## यह कैसे काम करता है
-इस मॉड्यूल की RAG पाइपलाइन में चार चरण होते हैं जो हर बार उपयोगकर्ता प्रश्न पूछने पर क्रमशः चलते हैं। सबसे पहले, अपलोड किया हुआ दस्तावेज़ **पार्स और चंक** किया जाता है ताकि प्रबंधनीय टुकड़े बन सकें। फिर उन टुकड़ों को **वेक्टर एम्बेडिंग** में बदला जाता है और संग्रहीत किया जाता है ताकि उनकी गणितीय तुलना की जा सके। जब कोई क्वेरी आती है, तो सिस्टम एक **सिमेंटिक खोज** करता है ताकि सबसे प्रासंगिक टुकड़े मिल सकें, और अंत में इन्हें संदर्भ के रूप में LLM को पास करता है ताकि **उत्तर उत्पन्न किया जाए**। नीचे के अनुभागों में वास्तविक कोड और आरेखों के साथ प्रत्येक चरण के बारे में बताया गया है। पहले चरण को देखें।
+इस मॉड्यूल में RAG पाइपलाइन चार चरणों में टूटती है जो उपयोगकर्ता के प्रश्न पूछने पर लगातार चलते हैं। पहले, अपलोड किया गया दस्तावेज़ **विश्लेषित और चंक्स में तोड़ा** जाता है। उन चंक्स को फिर **वेक्टर एम्बेडिंग्स** में बदला जाता है और संग्रहित किया जाता है ताकि उनकी गणितीय तुलना हो सके। जब क्वेरी आती है, सिस्टम एक **सैमेंटिक सर्च** करता है सबसे प्रासंगिक चंक्स खोजने के लिए, और अंततः उन्हें संदर्भ के रूप में LLM को **उत्तर निर्माण** के लिए पास करता है। नीचे के खंड प्रत्येक चरण को कोड और आरेखों के साथ समझाते हैं। पहला चरण देखते हैं।
-### Document Processing
+### दस्तावेज़ प्रसंस्करण
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-जब आप कोई दस्तावेज़ अपलोड करते हैं, तो सिस्टम उसे पार्स करता है (PDF या साधारण टेक्स्ट), फ़ाइलनाम जैसी मेटाडेटा संलग्न करता है, और फिर उसे टुकड़ों में तोड़ता है — छोटे भाग जो मॉडल के संदर्भ विंडो में आराम से फिट हो सकें। ये टुकड़े थोड़े ओवरलैप होते हैं ताकि सीमाओं पर संदर्भ खो न जाए।
+जब आप दस्तावेज़ अपलोड करते हैं, सिस्टम उसे पार्स करता है (PDF या सामान्य टेक्स्ट), फ़ाइलनाम जैसे मेटाडेटा संलग्न करता है, और फिर इसे चंक्स में तोड़ता है — छोटे टुकड़े जो मॉडल के संदर्भ विंडो में आराम से फिट हो सके। ये चंक्स थोड़े ओवरलैप करते हैं ताकि आप सीमाओं पर संदर्भ न खोएं।
```java
-// अपलोड की गई फ़ाइल को पार्स करें और इसे LangChain4j दस्तावेज़ में लपेटें
+// अपलोड की गई फाइल को पार्स करें और इसे LangChain4j डॉक्यूमेंट में लपेटें
Document document = Document.from(content, metadata);
-// 300-टोकन के टुकड़ों में विभाजित करें जिसमें 30-टोकन का ओवरलैप हो
+// 300-टोकन चंक्स में विभाजित करें जिसमें 30-टोकन ओवरलैप हो
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
-
-नीचे दिया गया चित्र इसे विज़ुअली दिखाता है। ध्यान दें कि हर टुकड़ा अपने पड़ोसियों के साथ कुछ टोकन साझा करता है — 30 टोकन का ओवरलैप सुनिश्चित करता है कि कोई महत्वपूर्ण संदर्भ बीच में न खो जाए:
+
+निचे दिया गया आरेख इसे दृश्य रूप में दिखाता है। ध्यान दें कि प्रत्येक चंक अपने पड़ोसियों के साथ कुछ टोकन्स साझा करता है — 30 टोकन ओवरलैप यह सुनिश्चित करता है कि कोई महत्वपूर्ण संदर्भ छूट न जाए:
-*यह चित्र दिखाता है कि कैसे 300-टोकन के टुकड़ों में 30-टोकन ओवरलैप के साथ दस्तावेज़ को विभाजित किया जाता है, जिससे टुकड़ों की सीमाओं पर संदर्भ संरक्षित रहता है।*
+*यह आरेख दिखाता है कि कैसे एक दस्तावेज़ को 300-टोकन के चंक्स में 30-टोकन ओवरलैप के साथ विभाजित किया जाता है, जो चंक सीमाओं पर संदर्भ को सुरक्षित रखता है।*
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ कोशिश करें:** Open [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) और पूछें:
-> - "LangChain4j दस्तावेज़ों को टुकड़ों में कैसे विभाजित करता है और ओवरलैप क्यों महत्वपूर्ण है?"
-> - "विभिन्न दस्तावेज़ प्रकारों के लिए आदर्श टुकड़ा आकार क्या है और क्यों?"
-> - "मैं कई भाषाओं या विशेष स्वरूपण वाले दस्तावेज़ों को कैसे संभाल सकता हूँ?"
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ प्रयास करें:** [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) खोलें और पूछें:
+> - "LangChain4j दस्तावेज़ों को कैसे चंक्स में बांटता है और ओवरलैप क्यों महत्वपूर्ण है?"
+> - "विभिन्न दस्तावेज़ प्रकारों के लिए आदर्श चंक आकार क्या है और क्यों?"
+> - "मैं कई भाषाओं में दस्तावेज़ों को या विशेष फॉर्मेटिंग के साथ कैसे संभालूं?"
-### Creating Embeddings
+### एम्बेडिंग बनाना
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-हर टुकड़े को एक संख्यात्मक प्रतिनिधित्व में बदला जाता है जिसे एम्बेडिंग कहा जाता है — मूल रूप से एक अर्थ-से-संख्या कनवर्टर। एम्बेडिंग मॉडल "बुद्धिमान" नहीं होता जैसे कि चैट मॉडल होता है; यह आदेशों का पालन नहीं कर सकता, तर्क नहीं कर सकता, या प्रश्नों का उत्तर नहीं दे सकता। जो यह कर सकता है वह टेक्स्ट को गणितीय स्थान में मैप करना है जहाँ समान अर्थ नज़दीक होते हैं — जैसे "कार" के पास "ऑटोमोबाइल", "रिफंड पॉलिसी" के पास "मेरे पैसे वापस" के वेक्टर होते हैं। चैट मॉडल को आप एक व्यक्ति समझें जिससे बात करें; एक एम्बेडिंग मॉडल एक अत्यंत अच्छा फाइलिंग सिस्टम है।
+प्रत्येक चंक को संख्यात्मक प्रतिनिधित्व में बदला जाता है जिसे एम्बेडिंग कहा जाता है — मूलतः अर्थ को संख्याओं में बदलने वाला कनवर्टर। एम्बेडिंग मॉडल "अक्लमंद" नहीं होता जैसे कि चैट मॉडल होता है; यह निर्देशों का पालन नहीं कर सकता, तर्क नहीं कर सकता, या प्रश्नों का जवाब नहीं दे सकता। यह केवल टेक्स्ट को गणितीय स्थान में मैप करता है जहाँ समान अर्थ वाले वेक्टर पास-पास होते हैं — "कार" के पास "ऑटोमोबाइल," "रिफंड पॉलिसी" के पास "मेरे पैसे वापस करें"। चैट मॉडल को एक ऐसे व्यक्ति की तरह सोचिए जिससे आप बात कर सकते हैं; एम्बेडिंग मॉडल एक अत्यंत अच्छा फाइलिंग सिस्टम है।
-नीचे चित्र इस अवधारणा को दिखाता है — टेक्स्ट इनपुट होता है, संख्यात्मक वेक्टर निकलते हैं, और समान अर्थ के वेक्टर पास-पास होते हैं:
+नीचे दिए गए आरेख में यह अवधारणा दृश्य रूप में है — टेक्स्ट अंदर जाता है, संख्यात्मक वेक्टर बाहर आते हैं, और समान अर्थ वाले वेक्टर पास-पास होते हैं:
-*यह चित्र दिखाता है कि कैसे एक एम्बेडिंग मॉडल टेक्स्ट को संख्यात्मक वेक्टर्स में परिवर्तित करता है, जिससे समान अर्थ जैसे "कार" और "ऑटोमोबाइल" वेक्टर स्पेस में एक-दूसरे के निकट स्थानित होते हैं।*
+*यह आरेख दिखाता है कि कैसे एम्बेडिंग मॉडल टेक्स्ट को संख्यात्मक वेक्टर में परिवर्तित करता है, समान अर्थों को — जैसे "कार" और "ऑटोमोबाइल" — वेक्टर स्पेस में पास-पास रखता है।*
```java
@Bean
@@ -153,30 +152,30 @@ public EmbeddingModel embeddingModel() {
EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-
-नीचे क्लास डायरैक्ट दिखाता है कि RAG पाइपलाइन में दो अलग प्रवाह होते हैं और LangChain4j की कौन-कौन सी क्लासेज़ उन्हें लागू करती हैं। **इंजेशन फ्लो** (जो अपलोड के समय एक बार चलता है) दस्तावेज़ को विभाजित करता है, टुकड़ों को एम्बेड करता है, और `.addAll()` के माध्यम से उन्हें स्टोर करता है। **क्वेरी फ्लो** (जो हर बार उपयोगकर्ता प्रश्न पूछे जाता है) क्वेरी को एम्बेड करता है, स्टोर में `.search()` करता है, और मेल खाए हुए संदर्भ को चैट मॉडल को भेजता है। दोनों फ्लो एक साझा `EmbeddingStore` इंटरफेस पर मिलते हैं:
+
+निम्न वर्ग आरेख RAG पाइपलाइन में दो अलग-अलग प्रवाह और उन्हें लागू करने वाले LangChain4j वर्गों को दर्शाता है। **इंगेशन फ्लो** (जो अपलोड समय पर चलता है) दस्तावेज़ का विभाजन करता है, चंक्स को एम्बेड करता है, और `.addAll()` के माध्यम से संग्रह करता है। **क्वेरी फ्लो** (प्रत्येक बार जब उपयोगकर्ता पूछता है) प्रश्न को एम्बेड करता है, `.search()` के माध्यम से संग्रह को खोजता है, और मेल खाने वाले संदर्भ को चैट मॉडल को देता है। दोनों फ्लो एक साझा `EmbeddingStore` इंटरफ़ेस पर मिलते हैं:
-*यह चित्र RAG पाइपलाइन में दो प्रवाह — इंजेशन और क्वेरी — दिखाता है और यह कि वे साझा EmbeddingStore के माध्यम से कैसे जुड़े हुए हैं।*
+*यह आरेख RAG पाइपलाइन के दो प्रवाह दिखाता है — इंगेशन और क्वेरी — और कैसे वे एक साझा EmbeddingStore के माध्यम से जुड़ते हैं।*
-एक बार एम्बेडिंग स्टोर हो जाने पर समान सामग्री स्वाभाविक रूप से वेक्टर स्पेस में क्लस्टर होती है। नीचे विज़ुअलाइज़ेशन दिखाता है कि संबंधित विषयों वाले दस्तावेज़ निकट बिंदुओं के रूप में समूहित होते हैं, जो सिमेंटिक खोज को संभव बनाता है:
+एक बार एम्बेडिंग संग्रहित हो जाने के बाद, समान सामग्री स्वाभाविक रूप से वेक्टर स्पेस में समूहित हो जाती है। नीचे का दृश्य दिखाता है कि संबंधित विषयों वाले दस्तावेज़ पास-पास बिंदुओं के रूप में समाप्त होते हैं, जो सिमेंटिक सर्च को संभव बनाता है:
-*यह विज़ुअलाइज़ेशन दिखाता है कि कैसे संबंधित दस्तावेज़ 3D वेक्टर स्पेस में समूहित होते हैं, जैसे टेक्निकल डॉक्स, बिजनेस रूल्स और FAQs अलग-अलग समूह बनाते हैं।*
+*यह दृश्य दिखाता है कि कैसे संबंधित दस्तावेज़ 3D वेक्टर स्पेस में समूहित होते हैं, तकनीकी डाक्यूमेंट्स, व्यावसायिक नियम, और एफएक्यू जैसे विषय स्पष्ट समूह बनाते हैं।*
-जब उपयोगकर्ता खोज करता है, तो सिस्टम चार चरणों का पालन करता है: दस्तावेजों को एक बार एम्बेड करता है, हर खोज पर क्वेरी को एम्बेड करता है, क्वेरी वेक्टर की तुलना कोसाइन सिमिलैरिटी के साथ सभी संग्रहीत वेक्टरों से करता है, और टॉप-के उच्चतम स्कोर वाले टुकड़े लौटाता है। नीचे चित्र हर चरण और LangChain4j क्लासेज़ को दिखाता है:
+जब उपयोगकर्ता खोज करता है, सिस्टम चार चरणों का अनुसरण करता है: दस्तावेज़ों को एक बार एम्बेड करना, प्रत्येक खोज में क्वेरी को एम्बेड करना, कोशाइन समानता का उपयोग करके क्वेरी वेक्टर की तुलना सभी संग्रहित वेक्टरों से करना, और शीर्ष-K उच्च स्कोर वाले चंक्स लौटाना। नीचे आरेख में प्रत्येक चरण और LangChain4j वर्गों को दिखाया गया है:
-*यह चित्र चार-चरण एम्बेडिंग खोज प्रक्रिया दिखाता है: दस्तावेज़ एम्बेड करें, क्वेरी एम्बेड करें, कोसाइन सिमिलैरिटी से वेक्टर तुलना करें, और टॉप-के परिणाम लौटाएं।*
+*यह आरेख चार-चरण एम्बेडिंग सर्च प्रक्रिया दिखाता है: दस्तावेज़ एम्बेड करें, क्वेरी एम्बेड करें, कोशाइन समानता से वेक्टरों की तुलना करें, और शीर्ष-K परिणाम लौटाएं।*
-### Semantic Search
+### सिमेंटिक सर्च
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-जब आप सवाल पूछते हैं, तो आपका सवाल भी एम्बेडिंग बन जाता है। सिस्टम आपके सवाल के एम्बेडिंग की तुलना दस्तावेज़ के सभी टुकड़ों के एम्बेडिंग से करता है। यह उन टुकड़ों को खोजता है जिनका अर्थ सबसे अधिक समान होता है - केवल मेल खाने वाले कीवर्ड नहीं, बल्कि वास्तविक सिमेंटिक समानता।
+जब आप प्रश्न पूछते हैं, आपका प्रश्न भी एक एम्बेडिंग बन जाता है। सिस्टम आपके प्रश्न की एम्बेडिंग की तुलना सभी दस्तावेज़ चंक्स की एम्बेडिंग से करता है। यह उन चंक्स को ढूंढता है जिनका अर्थ सबसे समान होता है — केवल मिलते-जुलते कीवर्ड नहीं, बल्कि वास्तविक सैमेंटिक समानता।
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -195,28 +194,28 @@ for (EmbeddingMatch match : matches) {
double score = match.score();
}
```
-
-नीचे चित्र सिमेंटिक खोज और पारंपरिक कीवर्ड खोज के बीच तुलना करता है। "vehicle" के लिए कीवर्ड खोज "cars and trucks" वाले टुकड़े को छोड़ देती है, लेकिन सिमेंटिक खोज समझती है कि उनका अर्थ समान है और उसे उच्च श्रेणी के मेल के रूप में लौटाती है:
+
+नीचे का आरेख पारंपरिक कीवर्ड खोज और सैमेंटिक खोज के बीच अंतर दिखाता है। "विकल्प" के लिए कीवर्ड खोज "कार और ट्रक" के बारे में एक चंक को मिस करती है, लेकिन सैमेंटिक खोज समझती है कि उनका अर्थ समान है और इसे उच्च स्कोर के साथ लौटाती है:
-*यह चित्र कीवर्ड-आधारित खोज की तुलना सिमेंटिक खोज से करता है, दिखाता है कि सिमेंटिक खोज कैसे तब भी सैद्धांतिक रूप से संबंधित सामग्री पुनः प्राप्त करती है जब सटीक कीवर्ड भिन्न हों।*
-Under the hood, similarity is measured using cosine similarity — essentially asking "are these two arrows pointing in the same direction?" Two chunks can use completely different words, but if they mean the same thing their vectors point the same way and score close to 1.0:
+*यह आरेख कीवर्ड-आधारित खोज की तुलना सैमेंटिक खोज से करता है, दिखाता है कि सैमेंटिक खोज कैसे सैद्धांतिक रूप से संबंधित सामग्री पुनः प्राप्त करती है जब ठीक शब्द अलग होते हैं।*
-
+पर्दे के पीछे, समानता कोशाइन समानता का उपयोग करके मापी जाती है — मूलतः यह पूछती है "क्या ये दो तीर समान दिशा में इंगित करते हैं?" दो चंक्स पूरी तरह से अलग शब्दों का उपयोग कर सकते हैं, लेकिन यदि उनका अर्थ समान है तो उनके वेक्टर समान दिशा में होंगे और स्कोर 1.0 के करीब होगा:
-*This diagram illustrates cosine similarity as the angle between embedding vectors — more aligned vectors score closer to 1.0, indicating higher semantic similarity.*
+
+*यह आरेख एम्बेडिंग वेक्टरों के बीच कोसाइन समानता को दर्शाता है — अधिक संरेखित वेक्टर 1.0 के करीब स्कोर करते हैं, जो उच्च सैमांतिक समानता सूचित करता है।*
-> **🤖 Try with [GitHub Copilot](https://github.com/features/copilot) Chat:** Open [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) and ask:
-> - "How does similarity search work with embeddings and what determines the score?"
-> - "What similarity threshold should I use and how does it affect results?"
-> - "How do I handle cases where no relevant documents are found?"
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ आज़माएँ:** खोलें [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) और पूछें:
+> - "एम्बेडिंग्स के साथ समानता खोज कैसे काम करती है और स्कोर क्या निर्धारित करता है?"
+> - "मुझे कौन सा समानता थ्रेशोल्ड उपयोग करना चाहिए और यह परिणामों को कैसे प्रभावित करता है?"
+> - "मैं उन मामलों को कैसे संभालूं जहाँ कोई प्रासंगिक दस्तावेज़ नहीं मिला?"
-### Answer Generation
+### उत्तर उत्पन्न करना
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-The most relevant chunks are assembled into a structured prompt that includes explicit instructions, the retrieved context, and the user's question. The model reads those specific chunks and answers based on that information — it can only use what's in front of it, which prevents hallucination.
+सबसे प्रासंगिक खंडों को एक संरचित प्रोम्प्ट में एकत्रित किया जाता है जिसमें स्पष्ट निर्देश, पुनः प्राप्त संदर्भ, और उपयोगकर्ता का प्रश्न शामिल होता है। मॉडल उन विशिष्ट खंडों को पढ़ता है और उस जानकारी के आधार पर उत्तर देता है — यह केवल वही उपयोग कर सकता है जो उसके सामने है, जो भ्रम को रोकता है।
```java
String context = matches.stream()
@@ -237,17 +236,17 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-The diagram below shows this assembly in action — the top-scoring chunks from the search step are injected into the prompt template, and the `OpenAiOfficialChatModel` generates a grounded answer:
+निचे दिया गया आरेख इस असेंबली को प्रदर्शित करता है — खोज चरण से शीर्ष स्कोर वाले खंडों को प्रोम्प्ट टेम्पलेट में इंजेक्ट किया जाता है, और `OpenAiOfficialChatModel` एक ठोस उत्तर उत्पन्न करता है:
-*This diagram shows how the top-scoring chunks are assembled into a structured prompt, allowing the model to generate a grounded answer from your data.*
+*यह आरेख दिखाता है कि कैसे शीर्ष स्कोर वाले खंडों को एक संरचित प्रोम्प्ट में जोड़ा जाता है, जिससे मॉडल आपके डेटा से आधारिक उत्तर उत्पन्न कर सकता है।*
-## Run the Application
+## एप्लिकेशन चलाएँ
-**Verify deployment:**
+**डिप्लॉयमेंट सत्यापित करें:**
-Ensure the `.env` file exists in the root directory with Azure credentials (created during Module 01). Run this from the module directory (`03-rag/`):
+सुनिश्चित करें कि रूट डायरेक्टरी में `.env` फ़ाइल मौजूद है जिसमें Azure प्रमाण-पत्र हैं (जो मॉड्यूल 01 के दौरान बनाई गई थी)। इसे मॉड्यूल डायरेक्टरी (`03-rag/`) से चलाएँ:
**Bash:**
```bash
@@ -259,43 +258,43 @@ cat ../.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT दिखाना च
Get-Content ..\.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT दिखाना चाहिए
```
-**Start the application:**
+**एप्लिकेशन शुरू करें:**
-> **Note:** If you already started all applications using `./start-all.sh` from the root directory (as described in Module 01), this module is already running on port 8081. You can skip the start commands below and go directly to http://localhost:8081.
+> **नोट:** यदि आपने पहले रूट डायरेक्टरी से `./start-all.sh` का उपयोग करके सभी एप्लिकेशन शुरू कर दिए हैं (जैसा कि मॉड्यूल 01 में बताया गया है), तो यह मॉड्यूल पहले से ही पोर्ट 8081 पर चल रहा है। आप नीचे दिए गए स्टार्ट कमांड छोड़ सकते हैं और सीधे http://localhost:8081 पर जा सकते हैं।
-**Option 1: Using Spring Boot Dashboard (Recommended for VS Code users)**
+**विकल्प 1: स्प्रिंग बूट डैशबोर्ड का उपयोग करें (VS कोड उपयोगकर्ताओं के लिए अनुशंसित)**
-The dev container includes the Spring Boot Dashboard extension, which provides a visual interface to manage all Spring Boot applications. You can find it in the Activity Bar on the left side of VS Code (look for the Spring Boot icon).
+डेव कंटेनर में स्प्रिंग बूट डैशबोर्ड एक्सटेंशन शामिल है, जो सभी स्प्रिंग बूट एप्लिकेशन को प्रबंधित करने के लिए एक दृश्य इंटरफेस प्रदान करता है। आप इसे VS कोड के बाएँ तरफ़ एक्टिविटी बार में पा सकते हैं (स्प्रिंग बूट आइकन देखें)।
-From the Spring Boot Dashboard, you can:
-- See all available Spring Boot applications in the workspace
-- Start/stop applications with a single click
-- View application logs in real-time
-- Monitor application status
+स्प्रिंग बूट डैशबोर्ड से आप:
+- कार्यक्षेत्र में सभी उपलब्ध स्प्रिंग बूट एप्लिकेशन देख सकते हैं
+- एक क्लिक में एप्लिकेशन शुरू/रोक सकते हैं
+- वास्तविक समय में एप्लिकेशन लॉग देख सकते हैं
+- एप्लिकेशन की स्थिति पर निगरानी रख सकते हैं
-Simply click the play button next to "rag" to start this module, or start all modules at once.
+बस "rag" के बगल में प्ले बटन पर क्लिक करें इस मॉड्यूल को शुरू करने के लिए, या सभी मॉड्यूल एक साथ शुरू करें।
-*This screenshot shows the Spring Boot Dashboard in VS Code, where you can start, stop, and monitor applications visually.*
+*यह स्क्रीनशॉट VS कोड में स्प्रिंग बूट डैशबोर्ड दिखाता है, जहाँ आप एप्लिकेशन को दृश्य रूप से शुरू, रोक और मॉनिटर कर सकते हैं।*
-**Option 2: Using shell scripts**
+**विकल्प 2: शेल स्क्रिप्ट्स का उपयोग करें**
-Start all web applications (modules 01-04):
+सभी वेब एप्लिकेशन (मॉड्यूल 01-04) शुरू करें:
**Bash:**
```bash
-cd .. # मूल निर्देशिका से
+cd .. # रूट डायरेक्टरी से
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # रूट निर्देशिका से
+cd .. # रूट डायरेक्टरी से
.\start-all.ps1
```
-Or start just this module:
+या सिर्फ़ इस मॉड्यूल को शुरू करें:
**Bash:**
```bash
@@ -309,9 +308,9 @@ cd 03-rag
.\start.ps1
```
-Both scripts automatically load environment variables from the root `.env` file and will build the JARs if they don't exist.
+दोनों स्क्रिप्ट्स स्वतः रूट `.env` फ़ाइल से पर्यावरण चर लोड करती हैं और यदि JARs मौजूद नहीं हैं तो उन्हें बनाएंगी।
-> **Note:** If you prefer to build all modules manually before starting:
+> **नोट:** यदि आप शुरू करने से पहले सभी मॉड्यूल्स को मैन्युअली बनाना पसंद करते हैं:
>
> **Bash:**
> ```bash
@@ -325,13 +324,13 @@ Both scripts automatically load environment variables from the root `.env` file
> mvn clean package -DskipTests
> ```
-Open http://localhost:8081 in your browser.
+अपने ब्राउज़र में http://localhost:8081 खोलें।
-**To stop:**
+**रोकने के लिए:**
**Bash:**
```bash
-./stop.sh # केवल यह मॉड्यूल
+./stop.sh # यह मॉड्यूल केवल
# या
cd .. && ./stop-all.sh # सभी मॉड्यूल्स
```
@@ -343,95 +342,95 @@ cd .. && ./stop-all.sh # सभी मॉड्यूल्स
cd ..; .\stop-all.ps1 # सभी मॉड्यूल
```
-## Using the Application
+## एप्लिकेशन का उपयोग करना
-The application provides a web interface for document upload and questioning.
+यह एप्लिकेशन दस्तावेज़ अपलोड और प्रश्न पूछने के लिए एक वेब इंटरफ़ेस प्रदान करता है।
-*This screenshot shows the RAG application interface where you upload documents and ask questions.*
+*यह स्क्रीनशॉट RAG एप्लिकेशन इंटरफ़ेस को दिखाता है जहाँ आप दस्तावेज़ अपलोड करते हैं और प्रश्न पूछते हैं।*
-### Upload a Document
+### एक दस्तावेज़ अपलोड करें
-Start by uploading a document - TXT files work best for testing. A `sample-document.txt` is provided in this directory that contains information about LangChain4j features, RAG implementation, and best practices - perfect for testing the system.
+एक दस्तावेज़ अपलोड करके शुरू करें - परीक्षण के लिए TXT फाइलें सबसे अच्छी हैं। इस डायरेक्टरी में `sample-document.txt` उपलब्ध है जिसमें LangChain4j फीचर्स, RAG इम्प्लिमेंटेशन, और सर्वोत्तम प्रथाओं की जानकारी है - सिस्टम परीक्षण के लिए उपयुक्त।
-The system processes your document, breaks it into chunks, and creates embeddings for each chunk. This happens automatically when you upload.
+सिस्टम आपके दस्तावेज़ को प्रोसेस करता है, उसे खंडों में तोड़ता है, और प्रत्येक खंड के लिए एम्बेडिंग बनाता है। यह सब आपके अपलोड करते ही स्वतः हो जाता है।
-### Ask Questions
+### प्रश्न पूछें
-Now ask specific questions about the document content. Try something factual that's clearly stated in the document. The system searches for relevant chunks, includes them in the prompt, and generates an answer.
+अब दस्तावेज़ सामग्री के बारे में विशिष्ट प्रश्न पूछें। कुछ तथ्यों के बारे में पूछें जो स्पष्ट रूप से दस्तावेज़ में बताए गए हों। सिस्टम प्रासंगिक खंड खोजता है, उन्हें प्रोम्प्ट में शामिल करता है, और उत्तर उत्पन्न करता है।
-### Check Source References
+### स्रोत संदर्भ जांचें
-Notice each answer includes source references with similarity scores. These scores (0 to 1) show how relevant each chunk was to your question. Higher scores mean better matches. This lets you verify the answer against the source material.
+ध्यान दें कि प्रत्येक उत्तर के साथ स्रोत संदर्भ और समानता स्कोर भी शामिल होते हैं। ये स्कोर (0 से 1 तक) दिखाते हैं कि आपका प्रश्न हर खंड के लिए कितना प्रासंगिक था। उच्च स्कोर बेहतर मेल के संकेत हैं। इससे आप स्रोत सामग्री के खिलाफ उत्तर की पुष्टि कर सकते हैं।
-*This screenshot shows query results with the generated answer, source references, and relevance scores for each retrieved chunk.*
+*यह स्क्रीनशॉट क्वेरी परिणाम दिखाता है जिसमें उत्पन्न उत्तर, स्रोत संदर्भ, और प्रत्येक पुनः प्राप्त खंड के लिए प्रासंगिकता स्कोर शामिल हैं।*
-### Experiment with Questions
+### प्रश्नों के साथ प्रयोग करें
-Try different types of questions:
-- Specific facts: "What is the main topic?"
-- Comparisons: "What's the difference between X and Y?"
-- Summaries: "Summarize the key points about Z"
+विभिन्न प्रकार के प्रश्न आजमाएं:
+- विशिष्ट तथ्य: "मुख्य विषय क्या है?"
+- तुलना: "X और Y में क्या अंतर है?"
+- सारांश: "Z के बारे में मुख्य बिंदु संक्षेप करें"
-Watch how the relevance scores change based on how well your question matches document content.
+देखें कि आपकी प्रश्न के अनुसार प्रासंगिकता स्कोर कैसे बदलते हैं।
-## Key Concepts
+## मुख्य अवधारणाएँ
-### Chunking Strategy
+### खंडन रणनीति
-Documents are split into 300-token chunks with 30 tokens of overlap. This balance ensures each chunk has enough context to be meaningful while staying small enough to include multiple chunks in a prompt.
+दस्तावेज़ों को 300-टोकन के खंडों में विभाजित किया जाता है जिसमें 30 टोकन का ओवरलैप होता है। यह संतुलन सुनिश्चित करता है कि प्रत्येक खंड में पर्याप्त संदर्भ हो ताकि वह सार्थक हो, लेकिन इतना बड़ा न हो कि एक प्रोम्प्ट में कई खंड शामिल न कर सकें।
-### Similarity Scores
+### समानता स्कोर
-Every retrieved chunk comes with a similarity score between 0 and 1 that indicates how closely it matches the user's question. The diagram below visualizes the score ranges and how the system uses them to filter results:
+प्रत्येक पुनः प्राप्त खंड का उपयोगकर्ता के प्रश्न के साथ मेल खाने का समानता स्कोर 0 से 1 के बीच होता है। निचे दिया गया आरेख स्कोर सीमा दर्शाता है और सिस्टम कैसे उन्हें परिणाम फ़िल्टर करने के लिए उपयोग करता है:
-*This diagram shows score ranges from 0 to 1, with a minimum threshold of 0.5 that filters out irrelevant chunks.*
+*यह आरेख 0 से 1 तक के स्कोर रेंज दिखाता है, जिसमें न्यूनतम थ्रेशोल्ड 0.5 है जो अप्रासंगिक खंडों को छानता है।*
-Scores range from 0 to 1:
-- 0.7-1.0: Highly relevant, exact match
-- 0.5-0.7: Relevant, good context
-- Below 0.5: Filtered out, too dissimilar
+स्कोर 0 से 1 तक होते हैं:
+- 0.7-1.0: अत्यंत प्रासंगिक, सटीक मेल
+- 0.5-0.7: प्रासंगिक, अच्छा संदर्भ
+- 0.5 से नीचे: फ़िल्टर आउट, बहुत असंबंधित
-The system only retrieves chunks above the minimum threshold to ensure quality.
+सिस्टम गुणवत्ता सुनिश्चित करने के लिए केवल न्यूनतम थ्रेशोल्ड से ऊपर के खंड पुनः प्राप्त करता है।
-Embeddings work well when meaning clusters cleanly, but they have blind spots. The diagram below shows the common failure modes — chunks that are too large produce muddy vectors, chunks that are too small lack context, ambiguous terms point to multiple clusters, and exact-match lookups (IDs, part numbers) don't work with embeddings at all:
+एम्बेडिंग्स तब अच्छा काम करती हैं जब अर्थ स्पष्ट रूप से विभाजित हो, लेकिन उनकी सीमाएँ होती हैं। नीचे दिया गया आरेख सामान्य विफलता मोड दिखाता है — बहुत बड़े खंड धुंधले वेक्टर बनाते हैं, बहुत छोटे खंडों में संदर्भ की कमी होती है, अस्पष्ट शब्द कई समूहों की ओर संकेत करते हैं, और सटीक मिलान खोज (आईडी, पार्ट नंबर) एम्बेडिंग्स के साथ काम नहीं करती:
-*This diagram shows common embedding failure modes: chunks too large, chunks too small, ambiguous terms that point to multiple clusters, and exact-match lookups like IDs.*
+*यह आरेख सामान्य एम्बेडिंग विफलता मोड दिखाता है: बहुत बड़े खंड, बहुत छोटे खंड, अस्पष्ट शब्द जो कई समूहों की ओर संकेत करते हैं, और आईडी जैसे सटीक मिलान खोज।*
-### In-Memory Storage
+### इन-मेमोरी स्टोरेज
-This module uses in-memory storage for simplicity. When you restart the application, uploaded documents are lost. Production systems use persistent vector databases like Qdrant or Azure AI Search.
+यह मॉड्यूल सरलता के लिए मेमोरी में संग्रहण का उपयोग करता है। जब आप एप्लिकेशन को पुनः प्रारंभ करते हैं, तो अपलोड किए गए दस्तावेज़ खो जाते हैं। प्रोडक्शन सिस्टम स्थायी वेक्टर डेटाबेस जैसे Qdrant या Azure AI Search का उपयोग करते हैं।
-### Context Window Management
+### संदर्भ विंडो प्रबंधन
-Each model has a maximum context window. You can't include every chunk from a large document. The system retrieves the top N most relevant chunks (default 5) to stay within limits while providing enough context for accurate answers.
+प्रत्येक मॉडल के पास अधिकतम संदर्भ विंडो होती है। आप बड़ी दस्तावेज़ से हर खंड शामिल नहीं कर सकते। सिस्टम शीर्ष N सबसे प्रासंगिक खंड (डिफ़ॉल्ट 5) पुनः प्राप्त करता है ताकि सीमा के भीतर रहकर पर्याप्त संदर्भ प्रदान कर सके और सटीक उत्तर दे सके।
-## When RAG Matters
+## जब RAG महत्वपूर्ण होता है
-RAG isn't always the right approach. The decision guide below helps you determine when RAG adds value versus when simpler approaches — like including content directly in the prompt or relying on the model's built-in knowledge — are sufficient:
+RAG हमेशा सही विकल्प नहीं होता। नीचे दिया गया निर्णय गाइड आपको यह निर्धारित करने में मदद करता है कि कब RAG मूल्य जोड़ता है और कब सरल दृष्टिकोण — जैसे सीधे प्रोम्प्ट में सामग्री शामिल करना या मॉडल के अंतर्निर्मित ज्ञान पर निर्भर रहना — पर्याप्त होता है:
-*This diagram shows a decision guide for when RAG adds value versus when simpler approaches are sufficient.*
+*यह आरेख निर्णय गाइड दिखाता है कि कब RAG मूल्य जोड़ता है और कब सरल दृष्टिकोण पर्याप्त हैं।*
-## Next Steps
+## अगले कदम
-**Next Module:** [04-tools - AI Agents with Tools](../04-tools/README.md)
+**अगला मॉड्यूल:** [04-tools - टूल्स के साथ AI एजेंट](../04-tools/README.md)
---
-**Navigation:** [← Previous: Module 02 - Prompt Engineering](../02-prompt-engineering/README.md) | [Back to Main](../README.md) | [Next: Module 04 - Tools →](../04-tools/README.md)
+**नेविगेशन:** [← पिछला: मॉड्यूल 02 - प्रॉम्प्ट इंजीनियरिंग](../02-prompt-engineering/README.md) | [मुख्य पृष्ठ पर वापस जाएं](../README.md) | [अगला: मॉड्यूल 04 - टूल्स →](../04-tools/README.md)
---
**अस्वीकरण**:
-इस दस्तावेज़ का अनुवाद एआई अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। हम सटीकता के लिए प्रयासरत हैं, लेकिन कृपया ध्यान रखें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मातृभाषा में ही अधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए पेशेवर मानव अनुवाद की सलाह दी जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या भ्रांतियों के लिए हम जिम्मेदार नहीं हैं।
+इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
\ No newline at end of file
diff --git a/translations/hi/04-tools/README.md b/translations/hi/04-tools/README.md
index 2d03d7652..cb322e8e6 100644
--- a/translations/hi/04-tools/README.md
+++ b/translations/hi/04-tools/README.md
@@ -1,84 +1,84 @@
-# माड्यूल 04: टूल्स के साथ AI एजेंट्स
+# Module 04: उपकरणों के साथ एआई एजेंट
## विषय सूची
-- [विडियो वॉकथ्रू](../../../04-tools)
-- [आप क्या सीखेंगे](../../../04-tools)
-- [पूर्वापेक्षाएँ](../../../04-tools)
-- [टूल्स के साथ AI एजेंट्स को समझना](../../../04-tools)
-- [टूल कॉलिंग कैसे काम करता है](../../../04-tools)
- - [टूल परिभाषाएं](../../../04-tools)
- - [निर्णय लेना](../../../04-tools)
- - [कार्यान्वयन](../../../04-tools)
- - [प्रतिक्रिया निर्माण](../../../04-tools)
- - [आर्किटेक्चर: स्प्रिंग बूट ऑटो-वायरिंग](../../../04-tools)
-- [टूल चेनिंग](../../../04-tools)
-- [एप्लिकेशन चलाएँ](../../../04-tools)
-- [एप्लिकेशन का उपयोग करना](../../../04-tools)
- - [सरल टूल उपयोग आज़माएँ](../../../04-tools)
- - [टेस्ट टूल चेनिंग](../../../04-tools)
- - [बातचीत प्रवाह देखें](../../../04-tools)
- - [विभिन्न अनुरोधों के साथ प्रयोग करें](../../../04-tools)
-- [प्रमुख अवधारणाएं](../../../04-tools)
- - [ReAct पैटर्न (तर्क और क्रिया)](../../../04-tools)
- - [टूल विवरण महत्वपूर्ण हैं](../../../04-tools)
- - [सत्र प्रबंधन](../../../04-tools)
- - [त्रुटि प्रबंधन](../../../04-tools)
-- [उपलब्ध टूल्स](../../../04-tools)
-- [टूल-आधारित एजेंट कब उपयोग करें](../../../04-tools)
-- [टूल्स बनाम RAG](../../../04-tools)
-- [अगले कदम](../../../04-tools)
+- [वीडियो वॉकथ्रू](#वीडियो-वॉकथ्रू)
+- [आप क्या सीखेंगे](#आप-क्या-सीखेंगे)
+- [पूर्व आवश्यकताएँ](#पूर्व-आवश्यकताएँ)
+- [उपकरणों के साथ एआई एजेंट को समझना](#उपकरणों-के-साथ-एआई-एजेंट-को-समझना)
+- [उपकरण कॉलिंग कैसे काम करती है](#उपकरण-कॉलिंग-कैसे-काम-करती-है)
+ - [उपकरण परिभाषाएँ](#उपकरण-परिभाषाएँ)
+ - [निर्णय लेना](#निर्णय-लेना)
+ - [कार्यान्वयन](#कार्यान्वयन)
+ - [प्रतिक्रिया उत्पादन](#प्रतिक्रिया-उत्पादन)
+ - [आर्किटेक्चर: स्प्रिंग बूट ऑटो-वायरिंग](#आर्किटेक्चर-स्प्रिंग-बूट-ऑटो-वायरिंग)
+- [उपकरण श्रृंखला](#उपकरण-श्रृंखला)
+- [एप्लिकेशन चलाएँ](#एप्लिकेशन-चलाएँ)
+- [एप्लिकेशन का उपयोग करना](#एप्लिकेशन-का-उपयोग-करना)
+ - [सरल उपकरण उपयोग प्रयास करें](#सरल-टूल-उपयोग-आज़माएं)
+ - [उपकरण श्रृंखला का परीक्षण करें](#टूल-चेनिंग-का-परीक्षण-करें)
+ - [संवाद प्रवाह देखें](#बातचीत-के-प्रवाह-को-देखें)
+ - [विभिन्न अनुरोधों के साथ प्रयोग करें](#विभिन्न-अनुरोधों-के-साथ-प्रयोग-करें)
+- [मुख्य अवधारणाएँ](#मुख्य-अवधारणाएँ)
+ - [ReAct पैटर्न (तर्क और क्रिया)](#react-पैटर्न-तर्क-और-क्रिया)
+ - [उपकरण विवरण महत्वपूर्ण हैं](#टूल-विवरण-महत्वपूर्ण-हैं)
+ - [सत्र प्रबंधन](#सत्र-प्रबंधन)
+ - [त्रुटि प्रबंधन](#त्रुटि-प्रबंधन)
+- [उपलब्ध उपकरण](#उपलब्ध-टूल्स)
+- [कब उपकरण-आधारित एजेंट का उपयोग करें](#कब-टूल-आधारित-एजेंट-का-उपयोग-करें)
+- [उपकरण बनाम RAG](#टूल्स-बनाम-rag)
+- [अगले चरण](#आगे-के-कदम)
## वीडियो वॉकथ्रू
-इस लाइव सेशन को देखें जो बताता है कि इस माड्यूल के साथ कैसे शुरू करें:
+इस लाइव सत्र को देखें जो बताता है कि इस मॉड्यूल की शुरुआत कैसे करें:
## आप क्या सीखेंगे
-अब तक, आपने सीखा है कि AI के साथ बातचीत कैसे करनी है, प्रभावी प्रम्प्ट कैसे बनाएं, और अपने दस्तावेज़ों में जवाबों को आधारभूत कैसे करें। लेकिन एक मौलिक सीमा अभी भी है: भाषा मॉडल केवल टेक्स्ट जनरेट कर सकते हैं। वे मौसम की जाँच नहीं कर सकते, गणना नहीं कर सकते, डेटाबेस क्वेरी नहीं कर सकते, या बाहरी सिस्टम के साथ इंटरैक्ट नहीं कर सकते।
+अब तक, आपने सीखा है कि AI के साथ बातचीत कैसे करनी है, प्रभावी रूप से प्रॉम्प्ट कैसे बनाना है, और अपने दस्तावेज़ों में प्रतिक्रियाओं का आधार कैसे रखना है। लेकिन एक मूलभूत सीमा अभी भी है: भाषा मॉडल केवल टेक्स्ट जनरेट कर सकते हैं। वे मौसम जांच नहीं सकते, गणना नहीं कर सकते, डेटाबेस क्वेरी नहीं कर सकते, या बाहरी सिस्टम से इंटरैक्ट नहीं कर सकते।
-टूल्स इसे बदल देते हैं। मॉडल को उन फंक्शन्स तक पहुँच देने से जिन्हें वह कॉल कर सकता है, आप इसे एक टेक्स्ट जनरेटर से उस एजेंट में बदल देते हैं जो क्रियाएं कर सकता है। मॉडल निर्णय लेता है कि उसे कब टूल की जरूरत है, कौन सा टूल उपयोग करना है, और कौन से पैरामीटर पास करने हैं। आपका कोड फंक्शन को निष्पादित करता है और परिणाम लौटाता है। मॉडल उस परिणाम को अपनी प्रतिक्रिया में समाहित करता है।
+उपकरण इस बात को बदल देते हैं। मॉडल को उन फंक्शंस तक पहुँच देकर जिन्हें वह कॉल कर सकता है, आप इसे एक टेक्स्ट जनरेटर से ऐसे एजेंट में बदल देते हैं जो कार्रवाई कर सकता है। मॉडल तय करता है कि इसे कब उपकरण चाहिए, किस उपकरण का उपयोग करना है, और कौन से पैरामीटर पास करने हैं। आपका कोड फंक्शन को निष्पादित करता है और परिणाम लौटाता है। मॉडल उस परिणाम को अपनी प्रतिक्रिया में सम्मिलित करता है।
-## पूर्वापेक्षाएँ
+## पूर्व आवश्यकताएँ
-- पूरा हुआ [माड्यूल 01 - परिचय](../01-introduction/README.md) (Azure OpenAI संसाधन तैनात)
-- पहले के माड्यूल्स पूरा करना सुझाया गया (यह माड्यूल [माड्यूल 03 के RAG कॉन्सेप्ट्स](../03-rag/README.md) का संदर्भ देता है टूल्स vs RAG तुलना में)
-- रूट डायरेक्टरी में `.env` फ़ाइल जिसमें Azure क्रेडेंशियल्स हैं (माड्यूल 01 में `azd up` से बनाई गई)
+- पूरा किया हुआ [Module 01 - परिचय](../01-introduction/README.md) (Azure OpenAI संसाधन तैनात किए गए)
+- पिछले मॉड्यूल्स को पूरा करना अनुशंसित (यह मॉड्यूल टूल्स बनाम RAG तुलना में [मॉड्यूल 03 के RAG अवधारणाओं](../03-rag/README.md) का संदर्भ देता है)
+- रूट डायरेक्टरी में `.env` फ़ाइल Azure क्रेडेंशियल के साथ (Module 01 में `azd up` द्वारा बनाई गई)
-> **नोट:** यदि आपने माड्यूल 01 पूरा नहीं किया है, तो पहले वहाँ तैनाती निर्देशों का पालन करें।
+> **नोट:** यदि आपने Module 01 पूरा नहीं किया है, तो पहले वहाँ तैनाती निर्देशों का पालन करें।
-## टूल्स के साथ AI एजेंट्स को समझना
+## उपकरणों के साथ एआई एजेंट को समझना
-> **📝 नोट:** इस माड्यूल में "एजेंट्स" शब्द से तात्पर्य AI असिस्टेंट्स से है जो टूल-कॉलिंग क्षमताओं से संवर्धित हैं। यह अलग है **Agentic AI** पैटर्न से (स्वायत्त एजेंट्स जिनमें योजना, मेमोरी, और मल्टी-स्टेप तर्क शामिल हैं) जिन्हें हम [माड्यूल 05: MCP](../05-mcp/README.md) में कवर करेंगे।
+> **📝 नोट:** इस मॉड्यूल में "एजेंट" शब्द उन एआई सहायक को संदर्भित करता है जो उपकरण कॉलिंग क्षमताओं के साथ बढ़ाए गए हैं। यह अलग है उन **Agentic AI** पैटर्न से (स्वायत्त एजेंट जिनके पास योजना, मेमोरी, और बहु-चरण तर्क होते हैं) जिन्हें हम [Module 05: MCP](../05-mcp/README.md) में कवर करेंगे।
-बिना टूल्स के, एक भाषा मॉडल केवल अपने प्रशिक्षण डेटा से टेक्स्ट जनरेट कर सकता है। यदि आप उससे वर्तमान मौसम पूछें, तो वह अनुमान लगाने को मजबूर है। टूल दें और वह मौसम API कॉल कर सकता है, गणना कर सकता है, या डेटाबेस से क्वेरी कर सकता है — फिर उन वास्तविक परिणामों को अपनी प्रतिक्रिया में शामिल करता है।
+बिना उपकरणों के, भाषा मॉडल केवल अपने प्रशिक्षण डेटा से टेक्स्ट जेनरेट कर सकता है। वर्तमान मौसम पूछिए, तो उसे अनुमान लगाना होता है। उपकरण दें, और वह मौसम API कॉल कर सकता है, गणना कर सकता है, या डेटाबेस क्वेरी कर सकता है — फिर उन असली परिणामों को अपनी प्रतिक्रिया में बुन सकता है।
-*बिना टूल्स मॉडल केवल अनुमान लगा सकता है — टूल्स के साथ वह API कॉल कर सकता है, गणना कर सकता है, और रियल-टाइम डेटा लौटाता है।*
+*बिना उपकरणों मॉडल केवल अनुमान लगाता है — उपकरणों के साथ यह APIs कॉल कर सकता है, गणना चला सकता है, और वास्तविक समय डेटा वापस कर सकता है।*
-टूल्स वाले AI एजेंट एक **Reasoning and Acting (ReAct)** पैटर्न का पालन करते हैं। मॉडल केवल जवाब नहीं देता — यह सोचता है कि उसे क्या चाहिए, एक टूल कॉल करता है, परिणाम देखता है, फिर फैसला करता है कि फिर से कार्य करना है या अंतिम उत्तर देना है:
+उपकरणों के साथ एक AI एजेंट एक **Reasoning and Acting (ReAct)** पैटर्न का पालन करता है। मॉडल केवल प्रतिक्रिया नहीं देता — यह सोचता है कि उसे क्या चाहिए, एक उपकरण को कॉल करके कार्य करता है, परिणाम देखता है, और फिर तय करता है कि फिर से कार्य करना है या अंतिम उत्तर देना है:
-1. **तर्क करें** — एजेंट उपयोगकर्ता के प्रश्न का विश्लेषण करता है और निर्धारित करता है कि उसे क्या जानकारी चाहिए
-2. **क्रिया करें** — एजेंट सही टूल चुनता है, सही पैरामीटर जनरेट करता है, और उसे कॉल करता है
-3. **निरीक्षण करें** — एजेंट टूल के आउटपुट को प्राप्त करता है और परिणाम का मूल्यांकन करता है
-4. **दोहराएँ या उत्तर दें** — यदि और डेटा की जरूरत है तो एजेंट पुनः लूप करता है; अन्यथा, वह प्राकृतिक भाषा में उत्तर तैयार करता है
+1. **तर्क करना** — एजेंट उपयोगकर्ता के प्रश्न का विश्लेषण करता है और यह निर्धारित करता है कि उसे क्या जानकारी चाहिए
+2. **कार्य करना** — एजेंट सही उपकरण चुनता है, सही पैरामीटर बनाता है, और उसे कॉल करता है
+3. **पर्यवेक्षण करना** — एजेंट उपकरण की आउटपुट प्राप्त करता है और परिणाम का मूल्यांकन करता है
+4. **दोहराना या उत्तर देना** — यदि और डेटा चाहिए, तो एजेंट लूप करता है; अन्यथा, संवादात्मक भाषा में उत्तर तैयार करता है
-*ReAct चक्र — एजेंट तय करता है कि क्या करना है, टूल कॉल करके क्रिया करता है, परिणाम देखता है, और तब तक लूप करता है जब तक अंतिम उत्तर दे न सके।*
+*ReAct चक्र — एजेंट सोचता है कि क्या करना है, उपकरण कॉल करके कार्य करता है, परिणाम देखता है, और तब तक लूप करता है जब तक अंतिम उत्तर नहीं दे सकता।*
-यह स्वचालित होता है। आप टूल्स और उनके विवरण परिभाषित करते हैं। मॉडल निर्णय लेता है कि उन्हें कब और कैसे उपयोग करना है।
+यह स्वचालित होता है। आप उपकरण और उनके विवरण परिभाषित करते हैं। मॉडल निर्णय लेता है कि इन्हें कब और कैसे उपयोग करना है।
-## टूल कॉलिंग कैसे काम करता है
+## उपकरण कॉलिंग कैसे काम करती है
-### टूल परिभाषाएं
+### उपकरण परिभाषाएँ
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-आप स्पष्ट विवरणों और पैरामीटर विनिर्देशों के साथ फंक्शन्स परिभाषित करते हैं। मॉडल अपने सिस्टम प्रम्प्ट में इन विवरणों को देखता है और समझता है कि हर टूल क्या करता है।
+आप स्पष्ट विवरण और पैरामीटर विनिर्देशों के साथ פונ्क्शंस परिभाषित करते हैं। मॉडल अपने सिस्टम प्रॉम्प्ट में इन विवरणों को देखता है और समझता है कि प्रत्येक उपकरण क्या करता है।
```java
@Component
@@ -86,7 +86,7 @@ public class WeatherTool {
@Tool("Get the current weather for a location")
public String getCurrentWeather(@P("Location name") String location) {
- // आपकी मौसम खोज तर्क
+ // आपका मौसम खोज तर्क
return "Weather in " + location + ": 22°C, cloudy";
}
}
@@ -96,104 +96,104 @@ public interface Assistant {
String chat(@MemoryId String sessionId, @UserMessage String message);
}
-// सहायक स्वचालित रूप से Spring Boot द्वारा कनेक्ट किया गया है:
-// - ChatModel बीन
-// - @Component वर्गों की सभी @Tool विधियाँ
+// सहायक स्वचालित रूप से स्प्रिंग बूट द्वारा वायर किया गया है:
+// - चैटमॉडल बीन
+// - @Component कक्षाओं से सभी @Tool मेथड
// - सत्र प्रबंधन के लिए ChatMemoryProvider
```
-नीचे दिया गया आरेख हर एनोटेशन को तोड़ता है और दिखाता है कि AI को कब टूल कॉल करना है और कौन से तर्क पास करने हैं, यह कैसे समझ आता है:
+नीचे वाला आरेख प्रत्येक एनोटेशन को तोड़ता है और दिखाता है कि कैसे हर हिस्सा AI को यह समझने में मदद करता है कि कब उपकरण कॉल करना है और कौन से तर्क पास करना हैं:
-*टूल परिभाषा की संरचना — @Tool AI को बताता है कि कब उपयोग करना है, @P प्रत्येक पैरामीटर का वर्णन करता है, और @AiService सब कुछ स्टार्टअप पर जोड़ता है।*
+*उपकरण परिभाषा की संरचना — @Tool AI को बताता है कि इसे कब उपयोग करना है, @P प्रत्येक पैरामीटर का वर्णन करता है, और @AiService शुरूआत में सब कुछ वायर करता है।*
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ आज़माएँ:** [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) खोलें और पूछें:
-> - "मॉक डेटा की जगह असली OpenWeatherMap API को कैसे जोड़ा जाए?"
-> - "एक अच्छा टूल विवरण क्या होता है जो AI को सही उपयोग में मदद करता है?"
-> - "टूल इम्प्लीमेंटेशन में API त्रुटियों और रेट लिमिट्स को कैसे संभालें?"
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chat के साथ प्रयास करें:** [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) खोलें और पूछें:
+> - "मैं नकली डेटा की बजाय OpenWeatherMap जैसा वास्तविक मौसम API कैसे इंटीग्रेट करूं?"
+> - "एक अच्छा उपकरण विवरण क्या है जो AI को इसे सही उपयोग करने में मदद करता है?"
+> - "API त्रुटियां और रेट लिमिट्स को उपकरण कार्यान्वयन में कैसे हैंडल करें?"
### निर्णय लेना
-जब कोई उपयोगकर्ता पूछता है "सीएटल में मौसम क्या है?", तो मॉडल यादृच्छिक टूल नहीं चुनता। यह उपयोगकर्ता की मंशा की तुलना उपलब्ध टूल विवरणों से करता है, प्रत्येक का प्रासंगिकता के लिए स्कोर बनाता है, और सबसे उपयुक्त चुनता है। फिर यह सही पैरामीटर के साथ एक संरचित फंक्शन कॉल बनाता है – इस केस में, `location` को `"Seattle"` सेट करता है।
+जब कोई उपयोगकर्ता पूछता है "Seattle में मौसम कैसा है?", तो मॉडल कोई उपकरण यादृच्छिक रूप से नहीं चुनता। यह उपयोगकर्ता के इरादे की तुलना अपने हर उपकरण विवरण से करता है, प्रासंगिकता के लिए स्कोर करता है, और सबसे उपयुक्त चयन करता है। फिर यह सही पैरामीटर के साथ संरचित फंक्शन कॉल बनाता है — इस मामले में, `location` को `"Seattle"` सेट करना।
-यदि कोई टूल उपयोगकर्ता के अनुरोध से मेल नहीं खाता, तो मॉडल अपने ज्ञान से जवाब देता है। यदि कई टूल मैच करते हैं, तो वह सबसे विशिष्ट चुनता है।
+अगर कोई उपकरण उपयोगकर्ता के अनुरोध से मेल नहीं खाता, तो मॉडल अपने ज्ञान से उत्तर देता है। यदि कई उपकरण मेल खाते हैं, तो यह सबसे विशिष्ट चुनता है।
-*मॉडल हर उपलब्ध टूल का उपयोगकर्ता की मंशा के खिलाफ मूल्यांकन करता है और सबसे उपयुक्त चुनता है — इसलिए स्पष्ट, विशिष्ट टूल विवरण लिखना महत्वपूर्ण है।*
+*मॉडल हर उपलब्ध उपकरण का उपयोगकर्ता के इरादे से मूल्यांकन करता है और सबसे उपयुक्त चुनता है — इसलिए स्पष्ट, विशिष्ट उपकरण विवरण लिखना महत्वपूर्ण है।*
### कार्यान्वयन
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-स्प्रिंग बूट डिक्लेरेटिव `@AiService` इंटरफेस के साथ सभी पंजीकृत टूल्स को ऑटो-वायर करता है, और LangChain4j स्वचालित रूप से टूल कॉल्स निष्पादित करता है। पर्दे के पीछे, एक टूल कॉल छह चरणों में प्रवाहित होती है — उपयोगकर्ता के प्राकृतिक भाषा प्रश्न से लेकर प्राकृतिक भाषा उत्तर तक:
+स्प्रिंग बूट डिक्लेरेटिव `@AiService` इंटरफेस को सभी पंजीकृत उपकरणों के साथ ऑटो-वायर करता है, और LangChain4j स्वचालित रूप से उपकरण कॉल निष्पादित करता है। पर्दे के पीछे, एक पूरा उपकरण कॉल छह चरणों से गुजरता है — उपयोगकर्ता के संवादात्मक प्रश्न से लेकर वापस संवादात्मक उत्तर तक:
-*अंत-से-अंत प्रवाह — उपयोगकर्ता प्रश्न पूछता है, मॉडल टूल चुनता है, LangChain4j इसे निष्पादित करता है, और मॉडल परिणाम को प्राकृतिक प्रतिक्रिया में पिरोता है।*
+*एंड-टू-एंड फ्लो — उपयोगकर्ता प्रश्न पूछता है, मॉडल उपकरण चुनता है, LangChain4j उसे निष्पादित करता है, और मॉडल परिणाम को प्राकृतिक प्रतिक्रिया में वेव करता है।*
-यदि आपने माड्यूल 00 में [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) चलाया, तो आपने यह पैटर्न देखा होगा — `Calculator` टूल्स भी इसी तरह कॉल होते थे। नीचे सिक्वेंस डायग्राम में दिखाया गया है कि उस डेमो के दौरान क्या हुआ:
+पर्दे के पीछे, `AiServices` किसी भी उपकरण के लिए वही उपकरण-कॉलिंग लूप चलाता है — यहाँ एक सरल `Calculator` से चित्रित किया गया है। नीचे अनुक्रम आरेख दिखाता है कि अंदर क्या होता है:
-*क्विक स्टार्ट डेमो से टूल-कॉलिंग लूप — `AiServices` आपका संदेश और टूल स्कीमास LLM को भेजता है, LLM `add(42, 58)` जैसे फंक्शन कॉल के साथ जवाब देता है, LangChain4j स्थानीय रूप से `Calculator` मेथड चलाता है, और परिणाम अंतिम उत्तर के लिए वापस भेजता है।*
+*उपकरण-कॉलिंग लूप — `AiServices` आपका संदेश और उपकरण स्कीमा LLM को भेजता है, LLM एक `add(42, 58)` जैसे फंक्शन कॉल के साथ जवाब देता है, LangChain4j स्थानीय रूप से `Calculator` मेथड को निष्पादित करता है, और अंतिम उत्तर के लिए परिणाम वापस देता है।*
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) चैट के साथ आज़माएँ:** [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) खोलें और पूछें:
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chat के साथ प्रयास करें:** [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) खोलें और पूछें:
> - "ReAct पैटर्न कैसे काम करता है और AI एजेंट्स के लिए यह क्यों प्रभावी है?"
-> - "एजेंट यह कैसे तय करता है कि कौन सा टूल कब उपयोग करना है?"
-> - "यदि टूल निष्पादन विफल हो जाए तो क्या होता है - त्रुटियों को मजबूत तरीके से कैसे संभालें?"
+> - "एजेंट कैसे तय करता है कि कौन सा उपकरण उपयोग करना है और किस क्रम में?"
+> - "अगर उपकरण निष्पादन विफल हो जाए तो क्या होता है - मैं त्रुटियों को मजबूती से कैसे संभालूं?"
-### प्रतिक्रिया निर्माण
+### प्रतिक्रिया उत्पादन
-मॉडल मौसम डेटा प्राप्त करता है और उसे उपयोगकर्ता के लिए प्राकृतिक भाषा प्रतिक्रिया में फॉर्मेट करता है।
+मॉडल मौसम डेटा प्राप्त करता है और उसे उपयोगकर्ता के लिए प्राकृतिक भाषा प्रतिक्रिया में रूपांतरित करता है।
### आर्किटेक्चर: स्प्रिंग बूट ऑटो-वायरिंग
-यह माड्यूल LangChain4j के स्प्रिंग बूट इंटीग्रेशन का उपयोग करता है जिसमें डिक्लेरेटिव `@AiService` इंटरफेस शामिल हैं। स्टार्टअप पर स्प्रिंग बूट हर `@Component` खोजता है जिसमें `@Tool` मेथड्स हों, आपका `ChatModel` बीन, और `ChatMemoryProvider` — फिर इन्हें एकल `Assistant` इंटरफेस में जोड़ देता है बिना बोइलरप्लेट के।
+यह मॉड्यूल LangChain4j के स्प्रिंग बूट इंटीग्रेशन का उपयोग करता है जिसमें डिक्लेरेटिव `@AiService` इंटरफेस होते हैं। शुरुआत में स्प्रिंग बूट हर `@Component` खोजता है जिसमें `@Tool` मेथड्स होते हैं, आपका `ChatModel` बीण, और `ChatMemoryProvider` — फिर इनके सबको एकल `Assistant` इंटरफेस में बिना बोयलप्लेट के जोड़ देता है।
-*@AiService इंटरफेस ChatModel, टूल कम्पोनेंट्स, और मेमोरी प्रोवाइडर को जोड़ता है — स्प्रिंग बूट सभी वायरिंग स्वचालित रूप से संभालता है।*
+*@AiService इंटरफेस ChatModel, उपकरण घटकों, और मेमोरी प्रोवाइडर को जोड़ता है — स्प्रिंग बूट स्वचालित रूप से सारी वायरिंग संभालता है।*
-यहाँ पूरा रिक्वेस्ट जीवनचक्र सिक्वेंस डायग्राम के रूप में है — HTTP रिक्वेस्ट से लेकर कंट्रोलर, सेवा, ऑटो-वायर प्रॉक्सी, टूल निष्पादन और वापस:
+यहाँ पूर्ण अनुरोध जीवनचक्र है एक अनुक्रम आरेख के रूप में — HTTP अनुरोध से लेकर कंट्रोलर, सेवा, और ऑटो-वायरड प्रॉक्सी तक, फिर उपकरण निष्पादन और वापस:
-*पूरा स्प्रिंग बूट रिक्वेस्ट जीवनचक्र — HTTP रिक्वेस्ट कंट्रोलर और सेवा से होकर ऑटो-वायरड असिस्टेंट प्रॉक्सी तक जाता है, जो LLM और टूल कॉल्स का स्वचालित समन्वय करता है।*
+*पूरा स्प्रिंग बूट अनुरोध जीवनचक्र — HTTP अनुरोध कंट्रोलर और सेवा के माध्यम से ऑटो-वायरड Assistant प्रॉक्सी तक प्रवाहित होता है, जो स्वयं LLM और उपकरण कॉलस का orchestration करता है।*
-इस दृष्टिकोण के प्रमुख लाभ:
+इस दृष्टिकोण के मुख्य लाभ:
-- **स्प्रिंग बूट ऑटो-वायरिंग** — ChatModel और टूल स्वतः इंजेक्ट होते हैं
+- **स्प्रिंग बूट ऑटो-वायरिंग** — ChatModel और उपकरण स्वचालित रूप से इंजेक्ट होते हैं
- **@MemoryId पैटर्न** — स्वचालित सत्र-आधारित मेमोरी प्रबंधन
-- **एकल इंस्टेंस** — बेहतर प्रदर्शन के लिए एक बार असिस्टेंट बनाया जाता है और पुनः उपयोग होता है
-- **टाइप-सुरक्षित कार्यान्वयन** — जावा मेथड्स सीधे टाइप कन्वर्शन के साथ कॉल होते हैं
-- **मल्टी-टर्न आर्केस्ट्रेशन** — टूल चेनिंग स्वचालित रूप से संभालता है
-- **जीरो बोइलरप्लेट** — कोई मैनुअल `AiServices.builder()` कॉल या मेमोरी हैशमैप नहीं
+- **एकल उदाहरण** — बेहतर प्रदर्शन के लिए Assistant एक बार बनाया जाता है और पुनः उपयोग किया जाता है
+- **टाइप-सुरक्षित निष्पादन** — Java मेथड सीधे कोल्ड किए जाते हैं टाइप कन्वर्शन के साथ
+- **मल्टी-टर्न संचालन** — उपकरण श्रृंखला स्वचालित रूप से संभालता है
+- **शून्य बोयलप्लेट** — मैनुअल `AiServices.builder()` कॉल या मेमोरी HashMap की जरूरत नहीं
-वैकल्पिक पद्धतियाँ (`AiServices.builder()` मैनुअल) अधिक कोड की मांग करती हैं और स्प्रिंग बूट के इंटीग्रेशन लाभों से वंचित रहती हैं।
+वैकल्पिक दृष्टिकोण (मैनुअल `AiServices.builder()`) में अधिक कोड की आवश्यकता होती है और स्प्रिंग बूट इंटीग्रेशन के लाभ होते नहीं हैं।
-## टूल चेनिंग
+## उपकरण श्रृंखला
-**टूल चेनिंग** — टूल-आधारित एजेंट्स की वास्तविक ताकत तब दिखती है जब एक प्रश्न के कई टूल्स की आवश्यकता होती है। पूछें "सीएटल में फ़ारेनहाइट में मौसम क्या है?" और एजेंट स्वचालित रूप से दो टूल्स चेन करता है: पहले `getCurrentWeather` को कॉल करता है जो सेल्सियस में तापमान देता है, फिर उसे `celsiusToFahrenheit` में पास करता है जो कन्वर्शन करता है — यह सब एक ही बातचीत टर्न में।
+**उपकरण श्रृंखला** — उपकरण-आधारित एजेंटों की असली शक्ति तब दिखती है जब एक ही प्रश्न के लिए कई उपकरणों की जरूरत होती है। पूछें "Seattle में फ़ारेनहाइट में मौसम कैसा है?" और एजेंट स्वचालित रूप से दो उपकरणों को जोड़ता है: पहले `getCurrentWeather` कॉल करता है जो तापमान सेल्सियस में देता है, फिर वह मान `celsiusToFahrenheit` में भेजता है रूपांतरण के लिए — यह सब एक ही संवाद टर्न में।
-*टूल चेनिंग क्रिया में — एजेंट पहले getCurrentWeather को कॉल करता है, फिर सेल्सियस परिणाम को celsiusToFahrenheit में देता है, और सम्मिलित उत्तर प्रदान करता है।*
+*उपकरण श्रृंखला क्रियान्वयन — एजेंट पहले getCurrentWeather कॉल करता है, फिर सेल्सियस परिणाम को celsiusToFahrenheit में पाइप करता है, और एक संयुक्त उत्तर प्रदान करता है।*
-**सुगम विफलताएँ** — मॉक डेटा में न हो ऐसे शहर का मौसम पूछें। टूल त्रुटि संदेश लौटाता है, और AI समझाता है कि वह मदद नहीं कर सकता बजाय क्रैश होने के। टूल्स सुरक्षित रूप से विफल होते हैं। नीचे आरेख दोनों दृष्टिकोणों की तुलना करता है — सही त्रुटि प्रबंधन के साथ, एजेंट अपवाद पकड़कर मददगार उत्तर देता है, जबकि बिना इसके पूरी एप्लिकेशन क्रैश हो जाती है:
+**सुगम विफलताएँ** — ऐसी किसी शहर का मौसम पूछें जो नकली डेटा में नहीं है। उपकरण त्रुटि संदेश लौटाता है, और AI बताता है कि वह मदद नहीं कर सकता बजाए क्रैश होने के। उपकरण सुरक्षित रूप से विफल होते हैं। नीचे वाला आरेख दो दृष्टिकोणों को दर्शाता है — उचित त्रुटि प्रबंधन के साथ, एजेंट अपवाद पकड़ता है और सहायक उत्तर देता है, जबकि बिना इसके पूरी एप्लीकेशन क्रैश हो जाती है:
-*जब टूल विफल होता है, एजेंट त्रुटि पकड़ता है और क्रैश की बजाय सहायक व्याख्या देता है।*
+*जब कोई उपकरण विफल होता है, तो एजेंट त्रुटि पकड़ता है और क्रैश होने के बजाय सहायक व्याख्या के साथ उत्तर देता है।*
-यह एक ही बातचीत टर्न में होता है। एजेंट कई टूल कॉल्स का स्वायत्त समन्वय करता है।
+यह एकल संवाद टर्न में होता है। एजेंट कई उपकरण कॉल का स्वायत्त संचालन करता है।
## एप्लिकेशन चलाएँ
-**तैनाती जांचें:**
+**तैनाती सत्यापित करें:**
-सुनिश्चित करें कि रूट डायरेक्टरी में `.env` फ़ाइल है जिसमें Azure क्रेडेंशियल्स मौजूद हैं (जो माड्यूल 01 के दौरान बनाई गई थी)। माड्यूल डायरेक्टरी (`04-tools/`) से यह चलाएँ:
+सुनिश्चित करें कि रूट डायरेक्टरी में `.env` फ़ाइल मौजूद है जिसमें Azure क्रेडेंशियल्स हैं (Module 01 के दौरान बनाई गई)। मॉड्यूल डायरेक्टरी (`04-tools/`) से इसे चलाएँ:
**Bash:**
```bash
@@ -207,38 +207,38 @@ Get-Content ..\.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT दिखा
**एप्लिकेशन शुरू करें:**
-> **नोट:** यदि आपने पहले से ही रुट डायरेक्टरी से `./start-all.sh` का उपयोग कर सभी एप्लिकेशन शुरू कर दिए हैं (जैसा माड्यूल 01 में वर्णित है), तो यह माड्यूल पहले से ही पोर्ट 8084 पर चल रहा है। आप नीचे दिए स्टार्ट कमांड को छोड़ सकते हैं और सीधे http://localhost:8084 पर जा सकते हैं।
+> **नोट:** यदि आपने पहले से रूट डायरेक्टरी से `./start-all.sh` का उपयोग करके सभी एप्लिकेशन शुरू कर दिए हैं (जैसा Module 01 में बताया गया है), तो यह मॉड्यूल पहले से पोर्ट 8084 पर चल रहा होगा। आप नीचे स्टार्ट कमांड छोड़ सकते हैं और सीधे http://localhost:8084 पर जा सकते हैं।
-**विकल्प 1: स्प्रिंग बूट डैशबोर्ड का उपयोग करना (VS कोड उपयोगकर्ताओं के लिए अनुशंसित)**
+**विकल्प 1: स्प्रिंग बूट डैशबोर्ड का उपयोग करना (VS Code उपयोगकर्ताओं के लिए अनुशंसित)**
-डेव कंटेनर में स्प्रिंग बूट डैशबोर्ड एक्सटेंशन शामिल है, जो सभी स्प्रिंग बूट एप्लिकेशन प्रबंधित करने के लिए एक दृश्य इंटरफेस प्रदान करता है। आप इसे VS कोड के बाएं तरफ की एक्टिविटी बार में देख सकते हैं (स्प्रिंग बूट आइकन देखें)।
+डेव कंटेनर में स्प्रिंग बूट डैशबोर्ड एक्सटेंशन शामिल है, जो सभी स्प्रिंग बूट एप्लिकेशन को प्रबंधित करने के लिए एक दृश्य इंटरफ़ेस प्रदान करता है। आप इसे VS Code के लेफ्ट साइड में गतिविधि बार में पा सकते हैं (स्प्रिंग बूट आइकन देखें)।
स्प्रिंग बूट डैशबोर्ड से, आप:
-- कार्यक्षेत्र में सभी उपलब्ध स्प्रिंग बूट एप्लिकेशन देख सकते हैं
-- एक क्लिक में एप्लिकेशन शुरू/रोक सकते हैं
-- एप्लिकेशन लॉग को रियल-टाइम में देख सकते हैं
-- एप्लिकेशन स्थिति मॉनिटर कर सकते हैं
-सिर्फ "tools" के बगल में प्ले बटन पर क्लिक करें ताकि यह मॉड्यूल शुरू हो सके, या सभी मॉड्यूल एक साथ शुरू करें।
+- वर्कस्पेस में उपलब्ध सभी स्प्रिंग बूट एप्लिकेशन देख सकते हैं
+- एक क्लिक में एप्लिकेशन स्टार्ट/स्टॉप कर सकते हैं
+- रियल-टाइम में एप्लिकेशन लॉग्स देख सकते हैं
+- एप्लिकेशन की स्थिति मॉनिटर कर सकते हैं
-VS Code में Spring Boot डैशबोर्ड कुछ इस प्रकार दिखता है:
+कृपया "tools" के बगल में प्ले बटन पर क्लिक करके इस मॉड्यूल को शुरू करें, या एक साथ सभी मॉड्यूल शुरू करें।
+VS Code में स्प्रिंग बूट डैशबोर्ड कुछ ऐसा दिखता है:
-*VS Code में Spring Boot डैशबोर्ड — एक ही जगह से सभी मॉड्यूल शुरू, रोकें और मॉनिटर करें*
+*VS कोड में Spring Boot डैशबोर्ड — सभी मॉड्यूल को एक ही जगह से शुरू, रोकें और मॉनिटर करें*
-**विकल्प 2: शेल स्क्रिप्ट्स का उपयोग करना**
+**ऑप्शन 2: शेल स्क्रिप्ट्स का उपयोग करना**
सभी वेब एप्लिकेशन (मॉड्यूल 01-04) शुरू करें:
**Bash:**
```bash
-cd .. # रूट निर्देशिका से
+cd .. # मूल निर्देशिका से
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # रूट डायरेक्टरी से
+cd .. # रूट निर्देशिका से
.\start-all.ps1
```
@@ -256,9 +256,9 @@ cd 04-tools
.\start.ps1
```
-दोनों स्क्रिप्ट्स स्वचालित रूप से रूट `.env` फाइल से वातावरण चर लोड करती हैं और यदि JAR मौजूद नहीं हैं तो उन्हें बनाएंगी।
+दोनों स्क्रिप्ट्स स्वचालित रूप से रूट `.env` फ़ाइल से पर्यावरण चर लोड करती हैं और यदि JAR मौजूद नहीं हैं तो उन्हें बनाएंगी।
-> **नोट:** यदि आप शुरू करने से पहले सभी मॉड्यूल मैन्युअली बनाना पसंद करते हैं:
+> **ध्यान दें:** यदि आप शुरू करने से पहले सभी मॉड्यूल को मैन्युअल रूप से बनाना पसंद करते हैं:
>
> **Bash:**
> ```bash
@@ -278,9 +278,9 @@ cd 04-tools
**Bash:**
```bash
-./stop.sh # केवल यह मॉड्यूल
+./stop.sh # यह मॉड्यूल केवल
# या
-cd .. && ./stop-all.sh # सभी मॉड्यूल्स
+cd .. && ./stop-all.sh # सभी मॉड्यूल
```
**PowerShell:**
@@ -290,90 +290,90 @@ cd .. && ./stop-all.sh # सभी मॉड्यूल्स
cd ..; .\stop-all.ps1 # सभी मॉड्यूल
```
-## एप्लिकेशन का उपयोग
+## एप्लिकेशन का उपयोग करना
-एप्लिकेशन एक वेब इंटरफ़ेस प्रदान करता है जहाँ आप एक AI एजेंट के साथ इंटरैक्ट कर सकते हैं जिसे मौसम और तापमान परिवर्तन उपकरणों तक पहुंच है। इंटरफ़ेस कुछ इस प्रकार दिखता है — इसमें त्वरित शुरुआत के उदाहरण और अनुरोध भेजने के लिए चैट पैनल शामिल हैं:
+यह एप्लिकेशन एक वेब इंटरफ़ेस प्रदान करता है जहां आप एक एआई एजेंट के साथ इंटरैक्ट कर सकते हैं जिसे मौसम और तापमान रूपांतरण उपकरणों की पहुंच है। यहाँ इंटरफ़ेस कैसा दिखता है — इसमें त्वरित प्रारंभ उदाहरण और अनुरोध भेजने के लिए चैट पैनल शामिल है:
-*AI एजेंट टूल्स इंटरफ़ेस — टूल्स के साथ बातचीत के लिए त्वरित उदाहरण और चैट इंटरफ़ेस*
+*AI एजेंट टूल्स इंटरफ़ेस - त्वरित उदाहरण और टूल्स के साथ बातचीत के लिए चैट इंटरफ़ेस*
-### सरल टूल उपयोग आज़माएँ
+### सरल टूल उपयोग आज़माएं
-एक सीधे-सादे अनुरोध से शुरू करें: "100 डिग्री फ़ारेनहाइट को सेल्सियस में बदलें"। एजेंट समझता है कि उसे तापमान परिवर्तन टूल की जरूरत है, सही पैरामीटर के साथ इसे कॉल करता है, और परिणाम वापस करता है। ध्यान दें कि यह कितना स्वाभाविक लगता है - आपने यह निर्दिष्ट नहीं किया कि किस टूल का उपयोग करना है या इसे कैसे कॉल करना है।
+एक सीधे-सादे अनुरोध से शुरू करें: "100 डिग्री फ़ारेनहाइट को सेल्सियस में कन्वर्ट करें"। एजेंट पहचानता है कि उसे तापमान रूपांतरण टूल की आवश्यकता है, सही मानकों के साथ उसे कॉल करता है, और परिणाम लौटाता है। ध्यान दें कि यह कितना स्वाभाविक महसूस होता है - आपने यह निर्दिष्ट नहीं किया कि कौन सा टूल उपयोग करना है या इसे कैसे कॉल करना है।
### टूल चेनिंग का परीक्षण करें
-अब कुछ अधिक जटिल कोशिश करें: "सीएटल का मौसम कैसा है और इसे फ़ारेनहाइट में बदलें?" देखें कि एजेंट इसे चरण दर चरण कैसे संभालता है। पहले यह मौसम प्राप्त करता है (जो सेल्सियस लौटाता है), फिर पहचानता है कि इसे फ़ारेनहाइट में बदलने की जरूरत है, परिवर्तन टूल को कॉल करता है, और दोनों परिणामों को एक प्रतिक्रिया में जोड़ता है।
+अब कुछ अधिक जटिल प्रयास करें: "सियैटल में मौसम कैसा है और इसे फ़ारेनहाइट में कन्वर्ट करें?" देखें कि एजेंट इसे चरणबद्ध तरीके से कैसे करता है। पहले वह मौसम प्राप्त करता है (जो सेल्सियस लौटाता है), पहचानता है कि फ़ारेनहाइट में कन्वर्ट करने की आवश्यकता है, रूपांतरण टूल को कॉल करता है, और दोनों परिणामों को एक उत्तर में संयोजित करता है।
-### वार्तालाप प्रवाह देखें
+### बातचीत के प्रवाह को देखें
-चैट इंटरफ़ेस वार्तालाप इतिहास को बनाए रखता है, जिससे आप मल्टी-टर्न संवाद कर सकते हैं। आप सभी पिछले प्रश्न और प्रतिक्रियाएं देख सकते हैं, जिससे वार्तालाप को ट्रैक करना और समझना आसान होता है कि एजेंट कई आदान-प्रदान में संदर्भ कैसे बनाता है।
+चैट इंटरफ़ेस बातचीत का इतिहास रखता है, जिससे आप बहु-चरण इंटरैक्शन कर सकते हैं। आप सभी पिछली पूछताछ और प्रतिक्रियाएँ देख सकते हैं, जिससे बातचीत का ट्रैक रखना और समझना आसान हो जाता है कि एजेंट कई विनिमयों के दौरान संदर्भ कैसे बनाता है।
-*मल्टी-टर्न वार्तालाप जिसमें सरल परिवर्तन, मौसम लुकअप, और टूल चेनिंग दिखाई दे रही है*
+*सरल रूपांतरण, मौसम जांच और टूल चेनिंग दिखाते हुए बहु-चरण बातचीत*
### विभिन्न अनुरोधों के साथ प्रयोग करें
-विभिन्न संयोजनों को आज़माएँ:
-- मौसम की जानकारी: "टोक्यो में मौसम कैसा है?"
-- तापमान परिवर्तन: "25°C कितना केल्विन में है?"
-- संयोजित प्रश्न: "पेरिस में मौसम जांचें और बताएं कि क्या यह 20°C से ऊपर है"
+विभिन्न संयोजन आजमाएं:
+- मौसम जांच: "टोक्यो में मौसम कैसा है?"
+- तापमान रूपांतरण: "25°C क्या केल्विन में है?"
+- संयुक्त प्रश्न: "पेरिस में मौसम जांचें और बताएं कि क्या यह 20°C से ऊपर है"
-ध्यान दें कि एजेंट कैसे प्राकृतिक भाषा को समझता है और इसे उपयुक्त टूल कॉल में मैप करता है।
+ध्यान दें कि एजेंट प्राकृतिक भाषा को कैसे समझता है और उपयुक्त टूल कॉल से मैप करता है।
## मुख्य अवधारणाएँ
-### ReAct पैटर्न (तर्क व क्रिया)
+### ReAct पैटर्न (तर्क और क्रिया)
-एजेंट तर्क (निर्णय लेना कि क्या करना है) और क्रिया (टूल्स का उपयोग करना) के बीच बारी-बारी से चलता है। यह पैटर्न केवल निर्देशों का पालन करने के बजाय स्वतंत्र समस्या-समाधान सक्षम बनाता है।
+एजेंट तर्क (क्या करना है तय करना) और क्रिया (टूल्स का उपयोग करना) के बीच बारी-बारी से काम करता है। यह पैटर्न स्वायत्त समस्या समाधान सक्षम करता है न कि केवल निर्देशों का जवाब देना।
### टूल विवरण महत्वपूर्ण हैं
-आपके टूल विवरण की गुणवत्ता सीधे प्रभावित करती है कि एजेंट उन्हें कैसे उपयोग करता है। स्पष्ट और विशिष्ट विवरण मॉडल को यह समझने में मदद करते हैं कि कब और कैसे प्रत्येक टूल को कॉल करना है।
+आपके टूल विवरण की गुणवत्ता सीधे प्रभावित करती है कि एजेंट उन्हें कितना प्रभावी ढंग से उपयोग करता है। स्पष्ट, विशिष्ट विवरण मॉडल को यह समझने में मदद करते हैं कि कब और कैसे प्रत्येक टूल को कॉल करना है।
-### सेशन प्रबंधन
+### सत्र प्रबंधन
-`@MemoryId` एनोटेशन स्वचालित सेशन-आधारित मेमोरी प्रबंधन सक्षम बनाता है। प्रत्येक सेशन ID को अपना `ChatMemory` उदाहरण मिलता है जो `ChatMemoryProvider` बीन द्वारा प्रबंधित होता है, इसलिए कई उपयोगकर्ता एक साथ एजेंट के साथ बातचीत कर सकते हैं बिना अपनी बातचीत के मेलजोल के। निम्न आरेख दिखाता है कि कैसे कई उपयोगकर्ताओं को उनके सेशन IDs के आधार पर पृथक मेमोरी स्टोर में राउट किया जाता है:
+`@MemoryId` एनोटेशन स्वचालित सत्र-आधारित मेमोरी प्रबंधन सक्षम करता है। प्रत्येक सेशन आईडी को उसका अपना `ChatMemory` उदाहरण मिलता है जिसे `ChatMemoryProvider` बीन प्रबंधित करता है, ताकि कई उपयोगकर्ता बिना एक-दूसरे की बातचीत में मिलावट के एजेंट के साथ इंटरैक्ट कर सकें। निम्नलिखित आरेख दिखाता है कि कैसे कई उपयोगकर्ताओं को उनके सेशन आईडी के आधार पर अलग-अलग मेमोरी स्टोर्स में रूट किया जाता है:
-*प्रत्येक सेशन ID एक पृथक बातचीत इतिहास से जुड़ा होता है — उपयोगकर्ताओं को कभी भी एक-दूसरे के संदेश दिखाई नहीं देते।*
+*प्रत्येक सेशन आईडी एक पृथक बातचीत इतिहास को मैप करती है — उपयोगकर्ता कभी भी एक-दूसरे के संदेश नहीं देखते।*
### त्रुटि प्रबंधन
-टूल्स विफल हो सकते हैं — APIs टाइमआउट हो सकते हैं, पैरामीटर अमान्य हो सकते हैं, बाहरी सेवाएं डाउन हो सकती हैं। उत्पादन एजेंटों को त्रुटि प्रबंधन की जरूरत होती है ताकि मॉडल समस्याओं को समझा सके या विकल्प आज़मा सके बजाय इसके कि पूरी एप्लिकेशन क्रैश हो जाए। जब कोई टूल अपवाद फेंकता है, तो LangChain4j उसे पकड़ता है और त्रुटि संदेश मॉडल को वापस फीड करता है, जो तब प्राकृतिक भाषा में समस्या समझा सकता है।
+टूल विफल हो सकते हैं — API टाइमआउट हो सकते हैं, पैरामीटर अवैध हो सकते हैं, बाहरी सेवाएँ बंद हो सकती हैं। प्रोडक्शन एजेंट को त्रुटि प्रबंधन की ज़रूरत होती है ताकि मॉडल समस्याओं की व्याख्या कर सके या विकल्प आज़मा सके बजाय इसके कि पूरी एप्लिकेशन क्रैश हो जाए। जब टूल कोई अपवाद फेंकता है, तो LangChain4j इसे पकड़ता है और त्रुटि संदेश मॉडल को वापस देता है, जो तब प्राकृतिक भाषा में समस्या समझा सकता है।
## उपलब्ध टूल्स
-नीचे दिया गया आरेख उन व्यापक टूल्स के इकोसिस्टम को दर्शाता है जिन्हें आप बना सकते हैं। यह मॉड्यूल मौसम और तापमान टूल्स दिखाता है, लेकिन वही `@Tool` पैटर्न किसी भी जावा मेथड के लिए काम करता है — डेटाबेस क्वेरी से लेकर भुगतान प्रक्रिया तक।
+निम्न आरेख उन व्यापक टूल्स का पारिस्थितिकी तंत्र दिखाता है जिन्हें आप बना सकते हैं। यह मॉड्यूल मौसम और तापमान टूल्स प्रदर्शित करता है, लेकिन वही `@Tool` पैटर्न किसी भी जावा मेथड के लिए काम करता है — डेटाबेस क्वेरीज से लेकर भुगतान प्रक्रियाएँ तक।
-*कोई भी जावा मेथड जो @Tool एनोटेशन के साथ है, AI के लिए उपलब्ध हो जाता है — यह पैटर्न डेटाबेस, API, ईमेल, फ़ाइल ऑपरेशन और अधिक तक फैलता है।*
+*कोई भी जावा मेथड जिसे @Tool से एनोटेट किया गया है AI के लिए उपलब्ध हो जाता है — पैटर्न डेटाबेस, API, ईमेल, फ़ाइल ऑपरेशंस और अधिक तक बढ़ता है।*
-## टूल-आधारित एजेंट कब उपयोग करें
+## कब टूल-आधारित एजेंट का उपयोग करें
-हर अनुरोध के लिए टूल्स की आवश्यकता नहीं होती। निर्णय इस पर निर्भर करता है कि AI को बाहरी सिस्टम के साथ इंटरैक्ट करना है या वह अपने ज्ञान से जवाब दे सकता है। निम्न मार्गदर्शिका संक्षेप में बताती है कि कब टूल्स मूल्य जोड़ते हैं और कब वे अनावश्यक होते हैं:
+हर अनुरोध में टूल्स की आवश्यकता नहीं होती। निर्णय इस बात पर निर्भर करता है कि AI को बाहरी सिस्टम के साथ इंटरैक्ट करना है या वे अपने ज्ञान से जवाब दे सकते हैं। निम्न गाइड सारांशित करता है कि कब टूल्स उपयोगी होते हैं और कब वे आवश्यक नहीं:
-*एक त्वरित निर्णय गाइड — रियल-टाइम डेटा, गणना, और क्रियाओं के लिए टूल्स; सामान्य ज्ञान और रचनात्मक कार्यों के लिए आवश्यक नहीं।*
+*एक त्वरित निर्णय मार्गदर्शिका — टूल्स रियल-टाइम डेटा, गणनाएँ, और क्रियाओं के लिए हैं; सामान्य ज्ञान और क्रिएटिव कार्यों के लिए आवश्यकता नहीं।*
## टूल्स बनाम RAG
-मॉड्यूल 03 और 04 दोनों AI की क्षमताओं को बढ़ाते हैं, लेकिन मूल रूप से अलग तरीकों से। RAG मॉडल को **ज्ञान** तक पहुंच देता है दस्तावेज़ पुनः प्राप्त करके। टूल्स मॉडल को **क्रियाएं** करने की क्षमता देते हैं फ़ंक्शन कॉल करके। नीचे दिया गया आरेख इन दोनों दृष्टिकोणों की तुलना पक्ष-पक्ष में करता है — प्रत्येक वर्कफ़्लो कैसे चलता है और इनके बीच व्यापार-बंदियाँ:
+मॉड्यूल 03 और 04 दोनों AI की क्षमताओं का विस्तार करते हैं, लेकिन मौलिक रूप से अलग तरीकों से। RAG मॉडल को **ज्ञान** तक पहुँच प्रदान करता है दस्तावेज़ पुनः प्राप्ति द्वारा। टूल्स मॉडल को **क्रियाएँ** करने की क्षमता देते हैं फ़ंक्शन कॉल करके। निम्न आरेख इन दोनों दृष्टिकोणों की तुलना एक साथ करता है — प्रत्येक वर्कफ़्लो कैसे काम करता है से लेकर उनके बीच ट्रेड-ऑफ तक:
-*RAG स्थैतिक दस्तावेज़ों से जानकारी पुनः प्राप्त करता है — टूल्स क्रियाएं निष्पादित करते हैं और गतिशील, वास्तविक समय डेटा लाते हैं। कई उत्पादन प्रणालियाँ दोनों को मिलाकर उपयोग करती हैं।*
+*RAG स्थैतिक दस्तावेज़ों से जानकारी पुनः प्राप्त करता है — टूल्स क्रियाएँ निष्पादित करते हैं और गतिशील, वास्तविक समय डेटा प्राप्त करते हैं। कई प्रोडक्शन सिस्टम दोनों को मिलाकर उपयोग करते हैं।*
-व्यवहार में, कई उत्पादन प्रणालियाँ दोनों दृष्टिकोणों को मिलाती हैं: RAG आपके दस्तावेज़ीकरण में उत्तरों के लिए आधार प्रदान करता है, और टूल्स लाइव डेटा प्राप्त करने या काम करने के लिए।
+वास्तव में, कई प्रोडक्शन सिस्टम दोनों दृष्टिकोणों को मिलाकर उपयोग करते हैं: RAG आपके दस्तावेज़ीकरण में उत्तरों को आधार देने के लिए, और टूल्स लाइव डेटा प्राप्त करने या संचालन करने के लिए।
-## अगले कदम
+## आगे के कदम
-**अगला मॉड्यूल:** [05-mcp - Model Context Protocol (MCP)](../05-mcp/README.md)
+**अगला मॉड्यूल:** [05-mcp - मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP)](../05-mcp/README.md)
---
@@ -382,6 +382,6 @@ cd ..; .\stop-all.ps1 # सभी मॉड्यूल
---
-**अस्वीकरण**:
-इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या असंगतियाँ हो सकती हैं। मौलिक दस्तावेज़ अपनी मूल भाषा में ही आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए पेशेवर मानव अनुवाद की सलाह दी जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
+**अस्वीकरण**:
+इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
\ No newline at end of file
diff --git a/translations/hi/README.md b/translations/hi/README.md
index 50fe7bc79..e2bb98f29 100644
--- a/translations/hi/README.md
+++ b/translations/hi/README.md
@@ -1,19 +1,19 @@
-# LangChain4j के लिए शुरुआती
+# शुरुआत के लिए LangChain4j
-LangChain4j और Azure OpenAI GPT-5.2 के साथ AI एप्लिकेशन बनाने के लिए एक कोर्स, बुनियादी चैट से लेकर AI एजेंट तक।
+LangChain4j और Azure OpenAI GPT-5.2 के साथ AI एप्लिकेशन बनाने के लिए एक कोर्स, बेसिक चैट से लेकर AI एजेंट्स तक।
### 🌐 बहुभाषी समर्थन
-#### GitHub Action के माध्यम से समर्थित (स्वचालित और हमेशा अद्यतन)
+#### GitHub Action के माध्यम से समर्थित (स्वचालित और हमेशा अपडेटेड)
[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](./README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
-> **स्थानीय रूप से क्लोन करना प्राथमिकता देते हैं?**
+> **स्थानीय क्लोन करना पसंद करते हैं?**
>
-> इस रिपॉजिटरी में 50+ भाषाओं के अनुवाद शामिल हैं जो डाउनलोड आकार को काफी बढ़ाते हैं। अनुवादों के बिना क्लोन करने के लिए, sparse checkout का उपयोग करें:
+> इस रिपॉजिटरी में 50+ भाषा अनुवाद शामिल हैं जो डाउनलोड साइज को काफी बढ़ा देते हैं। अनुवादों के बिना क्लोन करने के लिए, sparse checkout का उपयोग करें:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -29,61 +29,60 @@ LangChain4j और Azure OpenAI GPT-5.2 के साथ AI एप्लिक
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> यह आपको कोर्स पूरा करने के लिए आवश्यक सब कुछ देगा, वह भी बहुत तेज़ डाउनलोड के साथ।
+> इससे आपको कोर्स पूरा करने के लिए जरूरी हर चीज़ बहुत तेज़ डाउनलोड के साथ मिल जाएगी।
## सामग्री सूची
-1. [क्विक स्टार्ट](00-quick-start/README.md) - LangChain4j के साथ शुरुआत करें
-2. [परिचय](01-introduction/README.md) - LangChain4j के मूल सिद्धांत सीखें
-3. [प्रॉम्प्ट इंजीनियरिंग](02-prompt-engineering/README.md) - प्रभावी प्रॉम्प्ट डिज़ाइन में महारत हासिल करें
-4. [RAG (रेट्रीवल-ऑगमेंटेड जेनरेशन)](03-rag/README.md) - बुद्धिमान ज्ञान-आधारित सिस्टम बनाएं
-5. [उपकरण](04-tools/README.md) - बाहरी उपकरण और सरल सहायक एकीकृत करें
-6. [MCP (मॉडल कॉन्टेक्स्ट प्रोटोकॉल)](05-mcp/README.md) - मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP) और एजेन्टिक मॉड्यूल के साथ काम करें
+1. [परिचय](01-introduction/README.md) - LangChain4j के मूल सिद्धांत सीखें
+2. [प्रांप्ट इंजीनियरिंग](02-prompt-engineering/README.md) - प्रभावी प्रांप्ट डिज़ाइन में निपुण बनें
+3. [RAG (रिट्रीवल-ऑगमेंटेड जेनरेशन)](03-rag/README.md) - बुद्धिमान ज्ञान-आधारित सिस्टम बनाएं
+4. [उपकरण](04-tools/README.md) - बाहरी उपकरण और सरल सहायक जोड़े
+5. [MCP (मॉडल कॉन्टेक्सट प्रोटोकॉल)](05-mcp/README.md) - मॉडल कॉन्टेक्सट प्रोटोकॉल (MCP) और एजेंटिक मॉड्यूल्स के साथ काम करें
### वीडियो वॉकथ्रू
-प्रत्येक मॉड्यूल के साथ एक लाइव सत्र भी होता है जहाँ हम चरण-दर-चरण अवधारणाओं और कोड के माध्यम से चलते हैं।
+हर मॉड्यूल के साथ एक लाइव सत्र होता है जहाँ हम अवधारणाओं और कोड को कदम-दर-कदम समझाते हैं।
| मॉड्यूल | वीडियो |
|--------|-------|
| 01 - परिचय | [LangChain4j के साथ शुरुआत](https://www.youtube.com/live/nl_troDm8rQ) |
-| 02 - प्रॉम्प्ट इंजीनियरिंग | [LangChain4j के साथ प्रॉम्प्ट इंजीनियरिंग](https://www.youtube.com/live/PJ6aBaE6bog) |
+| 02 - प्रांप्ट इंजीनियरिंग | [LangChain4j के साथ प्रांप्ट इंजीनियरिंग](https://www.youtube.com/live/PJ6aBaE6bog) |
| 03 - RAG | [LangChain4j के साथ RAG](https://www.youtube.com/watch?v=_olq75ZH_eY) |
-| 04 - उपकरण और 05 - MCP | [उपकरण और MCP के साथ AI एजेंट्स](https://www.youtube.com/watch?v=O_J30kZc0rw) |
+| 04 - उपकरण और 05 - MCP | [उपकरणों और MCP के साथ AI एजेंट्स](https://www.youtube.com/watch?v=O_J30kZc0rw) |
---
## सीखने का मार्ग
-**LangChain4j में नए हैं?** प्रमुख शब्दों और अवधारणाओं के लिए [शब्दावली](docs/GLOSSARY.md) देखें।
+**LangChain4j में नए हैं?** प्रमुख शब्दों और अवधारणाओं की परिभाषाओं के लिए [शब्दावली](docs/GLOSSARY.md) देखें।
-> **त्वरित शुरुआत**
+> **शीघ्र आरंभ**
-1. इस रिपॉजिटरी को अपने GitHub अकाउंट पर Fork करें
-2. क्लिक करें **कोड** → **Codespaces** टैब → **...** → **नई विकल्पों के साथ...**
-3. डिफ़ॉल्ट सेटिंग्स का उपयोग करें – यह इस कोर्स के लिए बनाए गए डेवलपमेंट कंटेनर को चुनेगा
-4. क्लिक करें **कोडस्पेस बनाएँ**
-5. वातावरण के तैयार होने के लिए 5-10 मिनट प्रतीक्षा करें
-6. सीधे [क्विक स्टार्ट](./00-quick-start/README.md) पर जाएं और शुरुआत करें!
+1. इस रिपॉजिटरी को अपने GitHub खाते में Fork करें
+2. क्लिक करें **Code** → **Codespaces** टैब → **...** → **New with options...**
+3. डिफ़ॉल्ट विकल्प चुनें – यह इस कोर्स के लिए बनाए गए डेवेलपमेंट कंटेनर को सेलेक्ट करेगा
+4. क्लिक करें **Create codespace**
+5. पर्यावरण तैयार होने के लिए 5-10 मिनट प्रतीक्षा करें
+6. शुरू करने के लिए सीधे [परिचय](./01-introduction/README.md) पर जाएं!
-मॉड्यूल पूरा करने के बाद, LangChain4j के परीक्षण अवधारणाओं को देखने के लिए [टेस्टिंग गाइड](docs/TESTING.md) एक्सप्लोर करें।
+मॉड्यूल पूरा करने के बाद, LangChain4j के टेस्टिंग कॉन्सेप्ट्स को व्यावहारिक रूप में देखने के लिए [टेस्टिंग गाइड](docs/TESTING.md) देखें।
-> **नोट:** यह प्रशिक्षण GitHub Models और Azure OpenAI दोनों का उपयोग करता है। [क्विक स्टार्ट](00-quick-start/README.md) मॉड्यूल में GitHub Models का उपयोग होता है (कोई Azure सदस्यता आवश्यक नहीं), जबकि मॉड्यूल 1-5 में Azure OpenAI का उपयोग होता है। अगर आपके पास नहीं है, तो एक [मुफ्त Azure अकाउंट](https://aka.ms/azure-free-account) के साथ शुरुआत करें।
+> **नोट:** यह प्रशिक्षण Azure OpenAI का उपयोग करता है। यदि आपके पास एक नहीं है तो [FREE Azure अकाउंट](https://aka.ms/azure-free-account) के साथ शुरू करें।
## GitHub Copilot के साथ सीखना
-कोडिंग जल्दी शुरू करने के लिए, इस प्रोजेक्ट को GitHub Codespace या आपके स्थानीय IDE में प्रदान किए गए devcontainer के साथ खोलें। इस कोर्स में उपयोग किया गया devcontainer GitHub Copilot के साथ पूर्व-संरचित है, जो AI पेयर प्रोग्रामिंग के लिए है।
+जल्दी से कोडिंग शुरू करने के लिए, इस प्रोजेक्ट को GitHub Codespace या आपके स्थानीय IDE में दिए गए devcontainer के साथ खोलें। इस कोर्स में उपयोग किए गए devcontainer में पहले से GitHub Copilot AI पेयर्ड प्रोग्रामिंग के लिए कॉन्फ़िगर किया गया है।
-प्रत्येक कोड उदाहरण में GitHub Copilot से पूछने के लिए सुझावित प्रश्न शामिल हैं जो आपकी समझ को गहरा करेंगे। देखें 💡/🤖 संकेत:
+हर कोड उदाहरण में GitHub Copilot से पूछे जाने वाले सुझाए गए प्रश्न शामिल हैं ताकि आपकी समझ गहरी हो सके। 💡/🤖 संकेत खोजें:
- **Java फ़ाइल हेडर** - प्रत्येक उदाहरण के लिए विशिष्ट प्रश्न
-- **मॉड्यूल पढ़ें** - कोड उदाहरणों के बाद परीक्षण सुझाव
+- **मॉड्यूल README** - कोड उदाहरणों के बाद एक्सप्लोरेशन प्रॉम्प्ट
-**कैसे उपयोग करें:** कोई भी कोड फ़ाइल खोलें और Copilot से सुझावित प्रश्न पूछें। इसके पास कोडबेस का पूरा संदर्भ होता है और यह समझा सकता है, बढ़ा सकता है, और विकल्प सुझा सकता है।
+**कैसे उपयोग करें:** किसी भी कोड फ़ाइल को खोलें और Copilot से सुझाए गए प्रश्न पूछें। उसके पास कोडबेस का पूरा संदर्भ होता है और वह समझा सकता है, बढ़ा सकता है, और विकल्प सुझा सकता है।
-और जानना चाहते हैं? देखें [AI पेयर प्रोग्रामिंग के लिए Copilot](https://aka.ms/GitHubCopilotAI)।
+अधिक जानना चाहते हैं? देखें [AI पेयर्ड प्रोग्रामिंग के लिए Copilot](https://aka.ms/GitHubCopilotAI)।
## अतिरिक्त संसाधन
@@ -114,28 +113,28 @@ LangChain4j और Azure OpenAI GPT-5.2 के साथ AI एप्लिक
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
-[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
+[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
-
-### कोपिलट श्रृंखला
-[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
+
+### Copilot Series
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
## सहायता प्राप्त करना
-यदि आप फंस गए हैं या AI ऐप्स बनाने के बारे में कोई प्रश्न है, तो जुड़ें:
+यदि आप अटक जाते हैं या AI ऐप्स बनाने के बारे में कोई प्रश्न है, तो जुड़ें:
-[](https://aka.ms/foundry/discord)
+[](https://aka.ms/foundry/discord)
यदि आपके पास उत्पाद प्रतिक्रिया या निर्माण के दौरान त्रुटियां हैं, तो जाएँ:
-[](https://aka.ms/foundry/forum)
+[](https://aka.ms/foundry/forum)
## लाइसेंस
@@ -144,6 +143,6 @@ MIT लाइसेंस - विवरण के लिए [LICENSE](../../LIC
---
-**अस्वीकरण**:
-यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या अशुद्धियां हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में प्राधिकृत स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की अनुशंसा की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
+**अस्वीकरण**:
+इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
\ No newline at end of file
diff --git a/translations/hi/docs/GLOSSARY.md b/translations/hi/docs/GLOSSARY.md
index 550f149a9..b61ad22d8 100644
--- a/translations/hi/docs/GLOSSARY.md
+++ b/translations/hi/docs/GLOSSARY.md
@@ -2,231 +2,229 @@
## सामग्री तालिका
-- [मुख्य अवधारणाएँ](../../../docs)
-- [LangChain4j घटक](../../../docs)
-- [AI/ML अवधारणाएँ](../../../docs)
-- [गार्डरेल्स](../../../docs)
-- [प्रॉम्प्ट इंजीनियरिंग](../../../docs)
-- [RAG (रीट्रीवल-ऑगमेंटेड जनरेशन)](../../../docs)
-- [एजेंट और उपकरण](../../../docs)
-- [एजेंटिक मॉड्यूल](../../../docs)
-- [मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP)](../../../docs)
-- [Azure सेवाएँ](../../../docs)
-- [परीक्षण और विकास](../../../docs)
+- [मूल अवधारणाएँ](#मूल-अवधारणाएँ)
+- [LangChain4j घटक](#langchain4j-घटक)
+- [एआई/एमएल अवधारणाएँ](#aiml-अवधारणाएँ)
+- [गार्डरेल](#गार्डरेल)
+- [प्रॉम्प्ट इंजीनियरिंग](#prompt-engineering---module-02)
+- [RAG (रीट्रिवल-अग्मेंटेड जनरेशन)](#rag-retrieval-augmented-generation---module-03)
+- [एजेंट और टूल्स](#agents-and-tools---module-04)
+- [एजेंटिक मॉड्यूल](#agentic-module---module-05)
+- [मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP)](#model-context-protocol-mcp---module-05)
+- [एज़्योर सेवाएं](#azure-services---module-01)
+- [टेस्टिंग और विकास](#testing-and-development---testing-guide)
-पाठ्यक्रम में उपयोग किए जाने वाले शब्दों और अवधारणाओं के लिए त्वरित संदर्भ।
+कोर्स के दौरान उपयोग किए गए शब्दों और अवधारणाओं के लिए त्वरित संदर्भ।
-## मुख्य अवधारणाएँ
+## मूल अवधारणाएँ
-**AI एजेंट** - ऐसा सिस्टम जो AI का उपयोग करके स्वायत्त रूप से तर्क करता है और कार्रवाई करता है। [मॉड्यूल 04](../04-tools/README.md)
+**AI एजेंट** - ऐसी प्रणाली जो AI का उपयोग करके स्वतंत्र रूप से तर्क करती है और कार्य करती है। [मॉड्यूल 04](../04-tools/README.md)
-**चेन** - ऑपरेशनों का अनुक्रम जिसमें आउटपुट अगले चरण में जाता है।
+**चेन** - संचालन की एक श्रृंखला जहाँ आउटपुट अगले चरण में जाता है।
-**चंकिंग** - दस्तावेज़ों को छोटे टुकड़ों में तोड़ना। सामान्य: 300-500 टोकन ओवरलैप के साथ। [मॉड्यूल 03](../03-rag/README.md)
+**चंकिंग** - दस्तावेज़ों को छोटे हिस्सों में तोड़ना। सामान्य: 300-500 टोकन ओवरलैप के साथ। [मॉड्यूल 03](../03-rag/README.md)
-**संदर्भ विंडो** - अधिकतम टोकन जो कोई मॉडल संसाधित कर सकता है। GPT-5.2: 400K टोकन (272K इनपुट तक, 128K आउटपुट)।
+**संदर्भ विंडो** - अधिकतम टोकन जो एक मॉडल संसाधित कर सकता है। GPT-5.2: 400K टोकन (अधिकतम 272K इनपुट, 128K आउटपुट)।
**एम्बेडिंग्स** - टेक्स्ट के अर्थ को दर्शाने वाले संख्यात्मक वेक्टर। [मॉड्यूल 03](../03-rag/README.md)
-**फंक्शन कॉलिंग** - मॉडल बाहरी फंक्शन कॉल करने के लिए संरचित अनुरोध उत्पन्न करता है। [मॉड्यूल 04](../04-tools/README.md)
+**फंक्शन कॉलिंग** - मॉडल संरचित अनुरोध उत्पन्न करता है ताकि बाहरी फ़ंक्शंस कॉल किए जा सकें। [मॉड्यूल 04](../04-tools/README.md)
-**हैलुसिनेशन** - जब मॉडल गलत लेकिन संभव सूचना उत्पन्न करते हैं।
+**हलुसिनेशन** - जब मॉडल त्रुटिपूर्ण परंतु संभावित जानकारी उत्पन्न करते हैं।
-**प्रॉम्प्ट** - भाषा मॉडल को दिया गया टेक्स्ट इनपुट। [मॉड्यूल 02](../02-prompt-engineering/README.md)
+**प्रॉम्प्ट** - भाषा मॉडल को दिया गया पाठ इनपुट। [मॉड्यूल 02](../02-prompt-engineering/README.md)
-**सेमान्टिक सर्च** - कीवर्ड्स के बजाय एम्बेडिंग्स के उपयोग से अर्थ द्वारा खोज। [मॉड्यूल 03](../03-rag/README.md)
+**सेमांटिक खोज** - कीवर्ड के बजाय अर्थ के आधार पर खोज, एम्बेडिंग का उपयोग करके। [मॉड्यूल 03](../03-rag/README.md)
-**स्टेटफुल बनाम स्टेटलेस** - स्टेटलेस: कोई मेमोरी नहीं। स्टेटफुल: वार्तालाप इतिहास बनाए रखता है। [मॉड्यूल 01](../01-introduction/README.md)
+**स्टेटफुल बनाम स्टेटलेस** - स्टेटलेस: कोई मेमोरी नहीं। स्टेटफुल: बातचीत का इतिहास रखता है। [मॉड्यूल 01](../01-introduction/README.md)
-**टोकन** - मॉडल द्वारा संसाधित मूल टेक्स्ट इकाइयाँ। लागत और सीमाओं को प्रभावित करता है। [मॉड्यूल 01](../01-introduction/README.md)
+**टोकन** - मॉडल जो मूल टेक्स्ट इकाइयाँ संसाधित करते हैं। लागत और सीमाओं को प्रभावित करते हैं। [मॉड्यूल 01](../01-introduction/README.md)
-**टूल चेनिंग** - टूल का अनुक्रमिक निष्पादन जहां आउटपुट अगली कॉल का इनपुट होता है। [मॉड्यूल 04](../04-tools/README.md)
+**टूल चेनिंग** - टूल्स को क्रमिक रूप से चलाना जहाँ आउटपुट अगले कॉल के लिए जानकारी देता है। [मॉड्यूल 04](../04-tools/README.md)
## LangChain4j घटक
-**AiServices** - टाइप-सुरक्षित AI सेवा इंटरफेस बनाता है।
+**AiServices** - टाइप-सेफ AI सेवा इंटरफेस बनाता है।
**OpenAiOfficialChatModel** - OpenAI और Azure OpenAI मॉडलों के लिए एकीकृत क्लाइंट।
-**OpenAiOfficialEmbeddingModel** - OpenAI Official क्लाइंट के उपयोग से एम्बेडिंग्स बनाता है (दोनों OpenAI और Azure OpenAI समर्थित)।
+**OpenAiOfficialEmbeddingModel** - OpenAI Official क्लाइंट का उपयोग करते हुए एम्बेडिंग बनाता है (OpenAI और Azure OpenAI दोनों समर्थित)।
-**ChatModel** - भाषा मॉडलों के लिए मुख्य इंटरफेस।
+**ChatModel** - भाषा मॉडलों के लिए मुख्य इंटरफ़ेस।
-**ChatMemory** - वार्तालाप इतिहास बनाए रखता है।
+**ChatMemory** - बातचीत का इतिहास बनाए रखता है।
-**ContentRetriever** - RAG के लिए संबंधित दस्तावेज़ चंक खोजता है।
+**ContentRetriever** - RAG के लिए प्रासंगिक दस्तावेज़ चंक खोजता है।
-**DocumentSplitter** - दस्तावेज़ों को चंक में तोड़ता है।
+**DocumentSplitter** - दस्तावेज़ों को चंक में विभाजित करता है।
**EmbeddingModel** - टेक्स्ट को संख्यात्मक वेक्टर में परिवर्तित करता है।
-**EmbeddingStore** - एम्बेडिंग्स स्टोर और पुनः प्राप्त करता है।
+**EmbeddingStore** - एम्बेडिंग्स को संग्रहीत और पुनः प्राप्त करता है।
-**MessageWindowChatMemory** - हाल की संदेशों की स्लाइडिंग विंडो बनाए रखता है।
+**MessageWindowChatMemory** - हाल के संदेशों की स्लाइडिंग विंडो बनाए रखता है।
-**PromptTemplate** - `{{variable}}` प्लेसहोल्डर्स के साथ पुन: उपयोग किए जाने योग्य प्रॉम्प्ट बनाता है।
+**PromptTemplate** - पुन: प्रयोज्य प्रॉम्प्ट बनाता है जिसमें `{{variable}}` प्लेसहोल्डर होते हैं।
**TextSegment** - मेटाडेटा के साथ टेक्स्ट चंक। RAG में उपयोग किया जाता है।
-**ToolExecutionRequest** - टूल निष्पादन अनुरोध का प्रतिनिधित्व करता है।
+**ToolExecutionRequest** - टूल निष्पादन के अनुरोध का प्रतिनिधित्व करता है।
-**UserMessage / AiMessage / SystemMessage** - वार्तालाप संदेश प्रकार।
+**UserMessage / AiMessage / SystemMessage** - बातचीत के संदेश प्रकार।
## AI/ML अवधारणाएँ
**फ्यू-शॉट लर्निंग** - प्रॉम्प्ट में उदाहरण प्रदान करना। [मॉड्यूल 02](../02-prompt-engineering/README.md)
-**लार्ज लैंग्वेज मॉडल (LLM)** - विशाल टेक्स्ट डेटा पर प्रशिक्षित AI मॉडल।
+**लार्ज लैंग्वेज मॉडल (LLM)** - विशाल पाठ डेटा पर प्रशिक्षित AI मॉडल।
-**तर्क प्रयास** - GPT-5.2 पैरामीटर जो सोच की गहराई को नियंत्रित करता है। [मॉड्यूल 02](../02-prompt-engineering/README.md)
+**रीज़निंग एफर्ट** - GPT-5.2 पैरामीटर जो सोच की गहराई नियंत्रित करता है। [मॉड्यूल 02](../02-prompt-engineering/README.md)
-**टेम्परेचर** - आउटपुट की यादृच्छिकता को नियंत्रित करता है। कम=नियतात्मक, उच्च=रचनात्मक।
+**टेम्परेचर** - आउटपुट की यादृच्छिकता नियंत्रित करता है। निम्न=नियतात्मक, उच्च=सृजनात्मक।
-**वेक्टर डेटाबेस** - एम्बेडिंग्स के लिए विशेष डेटाबेस। [मॉड्यूल 03](../03-rag/README.md)
+**वेक्टर डाटाबेस** - एम्बेडिंग के लिए विशेष डेटाबेस। [मॉड्यूल 03](../03-rag/README.md)
**जीरो-शॉट लर्निंग** - बिना उदाहरण के कार्य करना। [मॉड्यूल 02](../02-prompt-engineering/README.md)
-## गार्डरेल्स - [मॉड्यूल 00](../00-quick-start/README.md)
+## गार्डरेल
-**गहराई में सुरक्षा** - एप्लिकेशन-स्तरीय गार्डरेल्स को प्रदाता सुरक्षा फ़िल्टरों के साथ जोड़ने वाला बहु-परत सुरक्षा दृष्टिकोण।
+**डेफेंस इन डेप्थ** - मल्टी-लेयर सुरक्षा दृष्टिकोण जिसमें एप्लिकेशन-स्तरीय गार्डरेल्स को प्रदाता सुरक्षा फ़िल्टर के साथ जोड़ा जाता है।
-**हार्ड ब्लॉक** - गंभीर सामग्री उल्लंघनों पर प्रदाता HTTP 400 त्रुटि फेंकता है।
+**हार्ड ब्लॉक** - गंभीर सामग्री उल्लंघनों पर प्रदाता HTTP 400 त्रुटि देता है।
-**InputGuardrail** - LangChain4j इंटरफेस जो LLM तक पहुँचने से पहले उपयोगकर्ता इनपुट को मान्य करता है। हानिकारक प्रॉम्प्ट को जल्दी रोककर लागत और विलंबता बचाता है।
+**InputGuardrail** - LangChain4j इंटरफ़ेस जो LLM तक पहुंचने से पहले उपयोगकर्ता इनपुट को सत्यापित करता है। हानिकारक प्रॉम्प्ट को जल्दी रोककर लागत और विलंबता बचाता है।
**InputGuardrailResult** - गार्डरेल सत्यापन के लिए रिटर्न टाइप: `success()` या `fatal("कारण")`।
-**OutputGuardrail** - AI प्रतिक्रियाओं को उपयोगकर्ताओं को लौटाने से पहले मान्य करने के लिए इंटरफेस।
+**OutputGuardrail** - AI प्रतिक्रियाओं को उपयोगकर्ताओं को लौटाने से पहले सत्यापित करने के लिए इंटरफ़ेस।
-**प्रदाता सुरक्षा फ़िल्टर** - AI प्रदाताओं (जैसे GitHub मॉडल) से अंतर्निर्मित सामग्री फ़िल्टर जो API स्तर पर उल्लंघनों को पकड़ते हैं।
+**प्रदाता सुरक्षा फ़िल्टर** - AI प्रदाताओं (जैसे Azure OpenAI) के अंतर्निर्मित सामग्री फ़िल्टर जो API स्तर पर उल्लंघनों को पकड़ते हैं।
-**सॉफ्ट अस्वीकार** - मॉडल शिष्टतापूर्वक उत्तर देने से मना करता है बिना त्रुटि फेंके।
+**सॉफ्ट रिफ़्यूजल** - मॉडल शिष्टतापूर्वक उत्तर देने से इनकार करता है बिना त्रुटि फेंके।
## प्रॉम्प्ट इंजीनियरिंग - [मॉड्यूल 02](../02-prompt-engineering/README.md)
-**चेन-ऑफ़-थॉट** - बेहतर सटीकता के लिए चरण-दर-चरण तर्क।
+**चेन-ऑफ-थॉट** - बेहतर सटीकता के लिए कदम-दर-कदम तर्क।
-**प्रतिबंधित आउटपुट** - विशिष्ट प्रारूप या संरचना लागू करना।
+**संसाधित आउटपुट** - विशिष्ट प्रारूप या संरचना लागू करना।
-**अत्यधिक उत्सुकता** - GPT-5.2 पैटर्न जो गहन तर्क के लिए है।
+**उच्च उत्साह** - GPT-5.2 पैटर्न जो गहन तर्क के लिए है।
-**कम उत्सुकता** - GPT-5.2 पैटर्न जो तेजी से उत्तर देने के लिए है।
+**निम्न उत्साह** - GPT-5.2 पैटर्न जो त्वरित उत्तरों के लिए है।
-**मल्टी-टर्न वार्तालाप** - आदान-प्रदान के बीच संदर्भ बनाए रखना।
+**मल्टी-टर्न बातचीत** - विनिमय के दौरान संदर्भ बनाए रखना।
-**भूमिका-आधारित प्रॉम्प्टिंग** - सिस्टम संदेशों द्वारा मॉडल व्यक्तित्व सेट करना।
+**भूमिका आधारित प्रॉम्प्टिंग** - सिस्टम संदेशों के माध्यम से मॉडल व्यक्तित्व सेट करना।
-**आत्म-परावर्तन** - मॉडल अपनी आउटपुट का मूल्यांकन और सुधार करता है।
+**स्व-परावर्तन** - मॉडल अपनी आउटपुट का मूल्यांकन करता है और सुधार करता है।
**संरचित विश्लेषण** - निश्चित मूल्यांकन फ्रेमवर्क।
-**कार्य निष्पादन पैटर्न** - योजना → क्रियान्वयन → सारांश।
+**टास्क निष्पादन पैटर्न** - योजना → निष्पादन → सारांश।
-## RAG (रीट्रीवल-ऑगमेंटेड जनरेशन) - [मॉड्यूल 03](../03-rag/README.md)
+## RAG (रीट्रिवल-अग्मेंटेड जनरेशन) - [मॉड्यूल 03](../03-rag/README.md)
-**दस्तावेज़ प्रसंस्करण पाइपलाइन** - लोड → चंक → एम्बेड → स्टोर।
+**दस्तावेज़ प्रोसेसिंग पाइपलाइन** - लोड → चंक → एम्बेड → स्टोर।
-**इन-मेमोरी एम्बेडिंग स्टोर** - परीक्षण के लिए गैर-स्थायी भंडारण।
+**इन-मेमोरी एम्बेडिंग स्टोर** - परीक्षण के लिए अस्थायी भंडारण।
-**RAG** - पुनः प्राप्ति के साथ जनरेशन को जोड़ता है ताकि प्रतिक्रियाएं आधारभूत बनें।
+**RAG** - पुनर्प्राप्ति और जनरेशन को मिलाकर प्रतिक्रियाओं को आधार देता है।
-**समानता स्कोर** - सेमान्टिक समानता का माप (0-1)।
+**समानता स्कोर** - अर्थ की समानता का मापक (0-1)।
-**स्रोत संदर्भ** - पुनः प्राप्त सामग्री के बारे में मेटाडेटा।
+**स्रोत संदर्भ** - पुनर्प्राप्त की गई सामग्री के बारे में मेटाडेटा।
-## एजेंट्स और टूल्स - [मॉड्यूल 04](../04-tools/README.md)
+## एजेंट और टूल्स - [मॉड्यूल 04](../04-tools/README.md)
-**@Tool एनोटेशन** - जावा विधियों को AI-काल करने योग्य उपकरण के रूप में चिह्नित करता है।
+**@Tool एनोटेशन** - Java विधियों को AI-कॉल करने योग्य टूल के रूप में चिह्नित करता है।
-**ReAct पैटर्न** - तर्क → कार्रवाई → अवलोकन → पुनरावृत्ति।
+**ReAct पैटर्न** - तर्क → कार्य → पर्यवेक्षण → पुनरावृत्ति।
-**सत्र प्रबंधन** - अलग-अलग उपयोगकर्ताओं के लिए संदर्भ अलग रखना।
+**सेशन प्रबंधन** - विभिन्न उपयोगकर्ताओं के लिए अलग संदर्भ।
-**टूल** - वह फंक्शन जिसे AI एजेंट कॉल कर सकता है।
+**टूल** - एक फ़ंक्शन जिसे AI एजेंट कॉल कर सकता है।
-**टूल विवरण** - उपकरण के उद्देश्य और पैरामीटर का दस्तावेजीकरण।
+**टूल विवरण** - टूल के उद्देश्य और पैरामीटर का दस्तावेज़ीकरण।
## एजेंटिक मॉड्यूल - [मॉड्यूल 05](../05-mcp/README.md)
-**@Agent एनोटेशन** - इंटरफेस को AI एजेंट्स के रूप में घोषित करता है जिसमें व्यवहारात्मक परिभाषा होती है।
+**@Agent एनोटेशन** - इंटरफेस को AI एजेंट के रूप में चिह्नित करता है जहाँ घोषित व्यवहार निर्दिष्ट होता है।
-**एजेंट लिसनर** - `beforeAgentInvocation()` और `afterAgentInvocation()` के माध्यम से एजेंट निष्पादन मॉनिटर करने के लिए हुक।
+**एजेंट लिस्नर** - `beforeAgentInvocation()` और `afterAgentInvocation()` के माध्यम से एजेंट निष्पादन की निगरानी के लिए हुक।
-**एजेंटिक स्कोप** - साझा मेमोरी जहाँ एजेंट आउटपुट संग्रहीत करते हैं, `outputKey` का उपयोग नीचे के एजेंट्स के लिए।
+**एजेंटिक स्कोप** - साझा मेमोरी जहाँ एजेंट आउटपुट को `outputKey` का उपयोग करते हुए संग्रहीत करते हैं ताकि डाउनस्ट्रीम एजेंट उसका उपयोग कर सकें।
-**AgenticServices** - `agentBuilder()` और `supervisorBuilder()` के द्वारा एजेंट बनाने का फैक्ट्री।
+**AgenticServices** - `agentBuilder()` और `supervisorBuilder()` का उपयोग करते हुए एजेंट बनाने के लिए फैक्टरी।
-**सशर्त कार्यप्रवाह** - स्थितियों के आधार पर विभिन्न विशेषज्ञ एजेंट्स को मार्गदर्शन।
+**सशर्त वर्कफ़्लो** - स्थितियों के आधार पर भिन्न विशेषज्ञ एजेंटों को मार्ग देना।
-**ह्यूमन-इन-द-लूप** - अनुमोदन या सामग्री समीक्षा के लिए मानव चेकपॉइंट जोड़ने वाला कार्यप्रवाह पैटर्न।
+**मानव-इन-द-लूप** - अनुमोदन या सामग्री समीक्षा के लिए मानवीय जांच बिंदु जोड़ने वाला वर्कफ़्लो पैटर्न।
-**langchain4j-agentic** - घोषणात्मक एजेंट निर्माण के लिए Maven निर्भरता (प्रयोगात्मक)।
+**langchain4j-agentic** - घोषणा आधारित एजेंट निर्माण के लिए Maven डिपेंडेंसी (प्रायोगिक)।
-**लूप कार्यप्रवाह** - एजेंट निष्पादन को तब तक दोहराएं जब तक कोई शर्त पूरी न हो (जैसे गुणवत्ता स्कोर ≥ 0.8)।
+**लूप वर्कफ़्लो** - जब तक कोई शर्त पूरी न हो (जैसे गुणवत्ता स्कोर ≥ 0.8) एजेंट निष्पादन को दोहराना।
-**outputKey** - एजेंट एनोटेशन पैरामीटर जो निर्दिष्ट करता है कि परिणाम एजेंटिक स्कोप में कहाँ संग्रहीत हैं।
+**outputKey** - एजेंट एनोटेशन पैरामीटर जो एजेंटिक स्कोप में परिणाम कहाँ संग्रहीत होंगे यह निर्दिष्ट करता है।
-**पैरालल कार्यप्रवाह** - स्वतंत्र कार्यों के लिए कई एजेंट्स को एक साथ चलाएं।
+**पैरलल वर्कफ़्लो** - स्वतंत्र कार्यों के लिए कई एजेंटों को एक साथ चलाना।
-**प्रतिक्रिया रणनीति** - पर्यवेक्षक अंतिम उत्तर कैसे बनाता है: LAST, SUMMARY, या SCORED।
+**प्रतिक्रिया रणनीति** - सुपरवाइज़र अंतिम उत्तर कैसे तैयार करता है: LAST, SUMMARY, या SCORED।
-**क्रमिक कार्यप्रवाह** - एजेंट्स को आदेश में निष्पादित करें जहाँ आउटपुट अगले चरण में जाता है।
+**क्रमिक वर्कफ़्लो** - एजेंटों को क्रम से निष्पादित करना जहाँ आउटपुट अगले चरण को जाता है।
-**सुपरवाइजर एजेंट पैटर्न** - उन्नत एजेंटिक पैटर्न जहाँ सुपरवाइजर LLM गतिशील रूप से निर्णय करता है कि कौन से उप-एजेंट्स को कॉल करना है।
+**सुपरवाइज़र एजेंट पैटर्न** - उन्नत एजेंटिक पैटर्न जहाँ सुपरवाइज़र LLM गतिशील रूप से निर्णय लेता है कि कौन से उप-एजेंट बुलाने हैं।
## मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP) - [मॉड्यूल 05](../05-mcp/README.md)
-**langchain4j-mcp** - LangChain4j में MCP एकीकरण के लिए Maven निर्भरता।
+**langchain4j-mcp** - LangChain4j में MCP एकीकरण के लिए Maven डिपेंडेंसी।
-**MCP** - मॉडल कॉन्टेक्स्ट प्रोटोकॉल: बाहरी उपकरणों से जुड़े AI ऐप्स के लिए मानक। एक बार बनाएँ, हर जगह इस्तेमाल करें।
+**MCP** - मॉडल कॉन्टेक्स्ट प्रोटोकॉल: AI एप्लिकेशन को बाहरी टूल से जोड़ने का मानक। एक बार बनाएं, हर जगह उपयोग करें।
-**MCP क्लाइंट** - MCP सर्वरों से जुड़ने वाला और टूल्स का उपयोग करने वाला एप्लिकेशन।
+**MCP क्लाइंट** - एप्लिकेशन जो MCP सर्वरों से जुड़ता है ताकि टूल खोजे और उपयोग किए जा सकें।
-**MCP सर्वर** - MCP के माध्यम से उपकरणों को स्पष्ट विवरण और पैरामीटर स्कीमाओं के साथ एक्सपोज़ करने वाली सेवा।
+**MCP सर्वर** - सेवा जो MCP के माध्यम से टूल प्रदान करती है, स्पष्ट विवरण और पैरामीटर स्कीमास के साथ।
-**McpToolProvider** - LangChain4j घटक जो MCP टूल्स को AI सेवाओं और एजेंट्स में उपयोग के लिए लपेटता है।
+**McpToolProvider** - LangChain4j घटक जो MCP टूल्स को AI सेवाओं और एजेंटों के उपयोग के लिए लपेटता है।
-**McpTransport** - MCP संचार के लिए इंटरफेस। कार्यान्वयन में Stdio और HTTP शामिल हैं।
+**McpTransport** - MCP संचार के लिए इंटरफ़ेस। लागू होने वाले प्रकारों में Stdio और HTTP शामिल हैं।
-**Stdio ट्रांसपोर्ट** - stdin/stdout के माध्यम से स्थानीय प्रक्रिया ट्रांसपोर्ट। फाइल सिस्टम एक्सेस या कमांड-लाइन टूल के लिए उपयोगी।
+**Stdio ट्रांसपोर्ट** - stdin/stdout के माध्यम से स्थानीय प्रक्रिया ट्रांसपोर्ट। फ़ाइल सिस्टम एक्सेस या कमांड-लाइन टूल के लिए उपयोगी।
-**StdioMcpTransport** - MCP सर्वर को subprocess के रूप में चलाने वाली LangChain4j कार्यान्वयन।
+**StdioMcpTransport** - LangChain4j कार्यान्वयन जो MCP सर्वर को सबप्रोसेस के रूप में चलाता है।
-**टूल डिस्कवरी** - क्लाइंट सर्वर से उपलब्ध टूल के विवरण और स्कीमाएँ पूछता है।
+**टूल खोज** - क्लाइंट उपलब्ध टूल्स के लिए सर्वर से विवरण और स्कीमास के साथ पूछताछ करता है।
-## Azure सेवाएँ - [मॉड्यूल 01](../01-introduction/README.md)
+## एज़्योर सेवाएं - [मॉड्यूल 01](../01-introduction/README.md)
**Azure AI Search** - वेक्टर क्षमताओं के साथ क्लाउड खोज। [मॉड्यूल 03](../03-rag/README.md)
-**Azure Developer CLI (azd)** - Azure संसाधनों को तैनात करता है।
+**Azure Developer CLI (azd)** - Azure संसाधनों को डिप्लॉय करता है।
-**Azure OpenAI** - Microsoft की एंटरप्राइज AI सेवा।
+**Azure OpenAI** - माइक्रोसॉफ्ट की एंटरप्राइज़ AI सेवा।
-**Bicep** - Azure इंफ्रास्ट्रक्चर-एज-कोड भाषा। [इन्फ्रास्ट्रक्चर गाइड](../01-introduction/infra/README.md)
+**Bicep** - Azure इन्फ्रास्ट्रक्चर-ऐज-कोड भाषा। [इन्फ्रास्ट्रक्चर गाइड](../01-introduction/infra/README.md)
**डिप्लॉयमेंट नाम** - Azure में मॉडल डिप्लॉयमेंट का नाम।
**GPT-5.2** - तर्क नियंत्रण के साथ नवीनतम OpenAI मॉडल। [मॉड्यूल 02](../02-prompt-engineering/README.md)
-## परीक्षण और विकास - [परीक्षण गाइड](TESTING.md)
+## टेस्टिंग और विकास - [टेस्टिंग गाइड](TESTING.md)
-**Dev Container** - कंटेनरीकृत विकास वातावरण। [कॉन्फ़िगरेशन](../../../.devcontainer/devcontainer.json)
+**डेव कंटेनर** - कंटेनरयुक्त विकास पर्यावरण। [कॉन्फ़िगरेशन](../../../.devcontainer/devcontainer.json)
-**GitHub मॉडल्स** - मुफ्त AI मॉडल प्लेग्राउंड। [मॉड्यूल 00](../00-quick-start/README.md)
+**इन-मेमोरी टेस्टिंग** - इन-मेमोरी स्टोरेज के साथ परीक्षण।
-**इन-मेमोरी परीक्षण** - इन-मेमोरी स्टोरेज के साथ परीक्षण।
+**इंटीग्रेशन टेस्टिंग** - वास्तविक इन्फ्रास्ट्रक्चर के साथ परीक्षण।
-**इंटीग्रेशन टेस्टिंग** - वास्तविक इंफ्रास्ट्रक्चर के साथ परीक्षण।
+**Maven** - Java बिल्ड ऑटोमेशन टूल।
-**Maven** - जावा बिल्ड ऑटोमेशन टूल।
+**Mockito** - Java मॉकिंग फ्रेमवर्क।
-**Mockito** - जावा मॉकिंग फ्रेमवर्क।
-
-**Spring Boot** - जावा एप्लिकेशन फ्रेमवर्क। [मॉड्यूल 01](../01-introduction/README.md)
+**Spring Boot** - Java एप्लिकेशन फ्रेमवर्क। [मॉड्यूल 01](../01-introduction/README.md)
---
**अस्वीकरण**:
-यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनूदित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या गलतियां हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही अधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए पेशेवर मानव अनुवाद की सलाह दी जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं।
+इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
\ No newline at end of file
diff --git a/translations/hi/docs/TESTING.md b/translations/hi/docs/TESTING.md
index 41ec41e9b..4d42167e2 100644
--- a/translations/hi/docs/TESTING.md
+++ b/translations/hi/docs/TESTING.md
@@ -1,20 +1,20 @@
-# LangChain4j अनुप्रयोगों का परीक्षण
+# LangChain4j एप्लिकेशन का परीक्षण
## विषय सूची
-- [त्वरित प्रारंभ](../../../docs)
-- [परीक्षण क्या कवर करते हैं](../../../docs)
-- [परीक्षण चलाना](../../../docs)
-- [VS Code में परीक्षण चलाना](../../../docs)
-- [परीक्षण पैटर्न](../../../docs)
-- [परीक्षण दर्शन](../../../docs)
-- [अगले कदम](../../../docs)
+- [त्वरित आरंभ](#त्वरित-आरंभ)
+- [परीक्षण में क्या शामिल है](#परीक्षण-में-क्या-शामिल-है)
+- [परीक्षण कैसे चलाएं](#परीक्षण-कैसे-चलाएं)
+- [VS कोड में परीक्षण चलाना](#vs-कोड-में-परीक्षण-चलाना)
+- [परीक्षण के पैटर्न](#परीक्षण-के-पैटर्न)
+- [परीक्षण के दर्शन](#परीक्षण-के-दर्शन)
+- [अगले कदम](#अगले-कदम)
-यह गाइड आपको उन परीक्षणों के माध्यम से ले जाता है जो दिखाते हैं कि API कुंजियों या बाहरी सेवाओं की आवश्यकता के बिना AI अनुप्रयोगों का परीक्षण कैसे किया जाए।
+यह मार्गदर्शिका आपको उन परीक्षणों से परिचित कराती है जो यह दिखाते हैं कि एआई एप्लिकेशन को बिना API कुंजी या बाहरी सेवाओं की आवश्यकता के कैसे परीक्षण किया जाए।
-## त्वरित प्रारंभ
+## त्वरित आरंभ
-सभी परीक्षण एक कमांड के साथ चलाएं:
+सभी परीक्षणों को केवल एक कमांड से चलाएं:
**Bash:**
```bash
@@ -26,30 +26,29 @@ mvn test
mvn --% test
```
-जब सभी परीक्षण सफल हो जाते हैं, तो आपको नीचे दिए गए स्क्रीनशॉट के समान आउटपुट दिखाई देगा — बिना गलती के परीक्षण चलते हैं।
+जब सभी परीक्षण सफल होते हैं, तो आपको नीचे दिए गए स्क्रीनशॉट जैसा आउटपुट दिखाई देगा — परीक्षण बिना किसी विफलता के चलते हैं।
-*सफल परीक्षण निष्पादन जो दिखाता है कि सभी परीक्षण बिना किसी असफलता के पास हो गए हैं*
+*सभी परीक्षण सफलतापूर्वक चले और कोई विफलता नहीं हुई*
-## परीक्षण क्या कवर करते हैं
+## परीक्षण में क्या शामिल है
-यह कोर्स **यूनिट टेस्ट** पर केंद्रित है जो स्थानीय रूप से चलते हैं। प्रत्येक परीक्षण एक विशिष्ट LangChain4j अवधारणा को अलग से प्रदर्शित करता है। नीचे दिया गया परीक्षण पिरामिड दिखाता है कि यूनिट टेस्ट कहाँ फिट होते हैं — वे तेज़, भरोसेमंद आधार बनाते हैं जिस पर आपकी बाकी परीक्षण रणनीति आधारित होती है।
+यह कोर्स मुख्य रूप से **यूनिट टेस्ट** पर केंद्रित है जो स्थानीय रूप से चलते हैं। प्रत्येक परीक्षण LangChain4j की एक विशिष्ट अवधारणा को अकेले दिखाता है। नीचे दिया गया परीक्षण पिरामिड बताता है कि यूनिट टेस्ट कहाँ आते हैं — वे तेज़, विश्वसनीय आधार बनाते हैं जिस पर आपकी बाकी परीक्षण रणनीति आधारित होती है।
-*परीक्षण पिरामिड जो यूनिट टेस्ट (तेज, अलग), इंटीग्रेशन टेस्ट (वास्तविक घटक), और एंड-टू-एंड टेस्ट के बीच संतुलन दिखाता है। यह प्रशिक्षण यूनिट परीक्षण को कवर करता है।*
+*टेस्टिंग पिरामिड जो यूनिट टेस्ट (तेज़, अलग) और इंटीग्रेशन टेस्ट (वास्तविक घटक) और एंड-टू-एंड टेस्ट के बीच संतुलन दिखाता है। यह प्रशिक्षण यूनिट परीक्षण को कवर करता है।*
-| मॉड्यूल | परीक्षण | ध्यान केंद्रित | मुख्य फाइलें |
+| मॉड्यूल | परीक्षण | फोकस | मुख्य फ़ाइलें |
|--------|-------|-------|-----------|
-| **00 - त्वरित प्रारंभ** | 6 | प्रॉम्प्ट टेम्पलेट और वेरिएबल प्रतिस्थापन | `SimpleQuickStartTest.java` |
-| **01 - परिचय** | 8 | संवाद स्मृति और Stateful चैट | `SimpleConversationTest.java` |
+| **01 - परिचय** | 8 | वार्तालाप स्मृति और स्टेटफुल चैट | `SimpleConversationTest.java` |
| **02 - प्रॉम्प्ट इंजीनियरिंग** | 12 | GPT-5.2 पैटर्न, उत्सुकता स्तर, संरचित आउटपुट | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | दस्तावेज़ इनटेक, एम्बेडिंग, समानता खोज | `DocumentServiceTest.java` |
-| **04 - टूल्स** | 12 | फ़ंक्शन कॉलिंग और टूल चेनिंग | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | मॉडल कंटेक्स्ट प्रोटोकॉल विद Stdio ट्रांसपोर्ट | `SimpleMcpTest.java` |
+| **03 - RAG** | 10 | दस्तावेज़ संग्रहण, एम्बेडिंग्स, समानता खोज | `DocumentServiceTest.java` |
+| **04 - टूल्स** | 12 | फंक्शन कॉलिंग और टूल चेनिंग | `SimpleToolsTest.java`` |
+| **05 - MCP** | 8 | मॉडल कंटेक्स्ट प्रोटोकॉल विथ स्टडियो ट्रांसपोर्ट | `SimpleMcpTest.java` |
-## परीक्षण चलाना
+## परीक्षण कैसे चलाएं
**रूट से सभी परीक्षण चलाएं:**
@@ -63,7 +62,7 @@ mvn test
mvn --% test
```
-**किसी विशेष मॉड्यूल के लिए परीक्षण चलाएं:**
+**किसी विशेष मॉड्यूल के परीक्षण चलाएं:**
**Bash:**
```bash
@@ -75,11 +74,11 @@ mvn test -pl 01-introduction
**PowerShell:**
```powershell
cd 01-introduction; mvn --% test
-# या root से
+# या रूट से
mvn --% test -pl 01-introduction
```
-**एकल परीक्षण क्लास चलाएं:**
+**एकल टेस्ट क्लास चलाएं:**
**Bash:**
```bash
@@ -91,45 +90,45 @@ mvn test -Dtest=SimpleConversationTest
mvn --% test -Dtest=SimpleConversationTest
```
-**विशिष्ट परीक्षण मेथड चलाएं:**
+**विशिष्ट टेस्ट मेथड चलाएं:**
**Bash:**
```bash
-mvn test -Dtest=SimpleConversationTest#वार्तालाप इतिहास को बनाए रखना चाहिए
+mvn test -Dtest=SimpleConversationTest#वार्तालाप इतिहास बनाए रखना चाहिए
```
**PowerShell:**
```powershell
-mvn --% test -Dtest=SimpleConversationTest#वार्तालाप इतिहास बनाए रखना चाहिए
+mvn --% test -Dtest=SimpleConversationTest#क्या बातचीत का इतिहास बनाए रखना चाहिए
```
-## VS Code में परीक्षण चलाना
+## VS कोड में परीक्षण चलाना
-यदि आप Visual Studio Code का उपयोग कर रहे हैं, तो टेस्ट एक्सप्लोरर परीक्षण चलाने और डीबग करने के लिए एक ग्राफिकल इंटरफ़ेस प्रदान करता है।
+यदि आप Visual Studio Code उपयोग कर रहे हैं, तो टेस्ट एक्सप्लोरर आपको परीक्षण चलाने और डीबग करने के लिए एक ग्राफिकल इंटरफेस प्रदान करता है।
-*VS Code टेस्ट एक्सप्लोरर जो सभी जावा परीक्षण क्लास और व्यक्तिगत परीक्षण विधियों के साथ परीक्षण ट्री को दिखाता है*
+*VS कोड टेस्ट एक्सप्लोरर सभी जावा टेस्ट क्लासेस और व्यक्तिगत टेस्ट मेथड्स के साथ टेस्ट ट्री दिखा रहा है*
-**VS Code में परीक्षण चलाने के लिए:**
+**VS कोड में परीक्षण चलाने के लिए:**
1. एक्टिविटी बार में बीकर आइकन पर क्लिक करके टेस्ट एक्सप्लोरर खोलें
-2. सभी मॉड्यूल और परीक्षण क्लास देखने के लिए परीक्षण ट्री का विस्तार करें
-3. किसी भी परीक्षण के बगल में प्ले बटन पर क्लिक करके उसे अकेले चलाएं
-4. पूरी सूट चलाने के लिए "Run All Tests" पर क्लिक करें
-5. किसी भी परीक्षण पर राइट-क्लिक करके "Debug Test" चुनें ताकि ब्रेकपॉइंट सेट कर सकें और कोड स्टेप थ्रू कर सकें
+2. सभी मॉड्यूल और टेस्ट क्लासेस देखने के लिए टेस्ट ट्री विस्तारित करें
+3. किसी भी टेस्ट के बगल में प्ले बटन पर क्लिक करके उसे व्यक्तिगत रूप से चलाएं
+4. पूरे टेस्ट सूट को चलाने के लिए "Run All Tests" पर क्लिक करें
+5. किसी भी टेस्ट पर राइट-क्लिक करें और "Debug Test" चुनें ताकि ब्रेकपॉइंट सेट करके कोड को चरण-दर-चरण चलाया जा सके
-परीक्षण पास होने पर टेस्ट एक्सप्लोरर हरे चेकमार्क दिखाता है और असफल होने पर विस्तृत त्रुटि संदेश प्रदान करता है।
+टेस्ट एक्सप्लोरर पास टेस्ट के लिए हरे चेकमार्क दिखाता है और विफल टेस्ट पर विस्तृत त्रुटि संदेश प्रदान करता है।
-## परीक्षण पैटर्न
+## परीक्षण के पैटर्न
-### पैटर्न 1: प्रॉम्प्ट टेम्पलेट का परीक्षण
+### पैटर्न 1: प्रॉम्प्ट टेम्प्लेट का परीक्षण
-सबसे सरल पैटर्न AI मॉडल को कॉल किए बिना प्रॉम्प्ट टेम्पलेट का परीक्षण करता है। आप जांचते हैं कि वेरिएबल प्रतिस्थापन सही तरीके से काम करता है और प्रॉम्प्ट अपेक्षित रूप में स्वरूपित है।
+सबसे सरल पैटर्न प्रॉम्प्ट टेम्प्लेट का परीक्षण करता है बिना किसी AI मॉडल को कॉल किए। आप सत्यापित करते हैं कि वेरिएबल प्रतिस्थापन सही ढंग से काम कर रहा है और प्रॉम्प्ट अपेक्षित फॉर्मेट में हैं।
-*प्रॉम्प्ट टेम्पलेट परीक्षण दिखाता है वेरिएबल प्रतिस्थापन फ्लो: प्लेसहोल्डर के साथ टेम्पलेट → मान लागू → स्वरूपित आउटपुट सत्यापित*
+*प्रॉम्प्ट टेम्प्लेट परीक्षण जो वेरिएबल प्रतिस्थापन फ्लो दिखाता है: प्लेसहोल्डर्स के साथ टेम्प्लेट → मान लागू किए गए → फॉर्मेटेड आउटपुट सत्यापित*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-यह परीक्षण `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java` में मौजूद है।
-
-**इसे चलाएं:**
-
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#परीक्षणप्रॉम्प्टटेम्पलेटफॉर्मैटिंग
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#परीक्षणप्रांप्टटेम्पलेटस्वरूपण
-```
+यह पैटर्न सत्यापित करता है कि वेरिएबल प्रतिस्थापन सही है और प्रॉम्प्ट अपेक्षित फॉर्मेट में हैं — किसी API कुंजी या मॉडल कॉल की आवश्यकता नहीं।
### पैटर्न 2: भाषा मॉडलों का मॉकिंग
-जब आप संवाद लॉजिक का परीक्षण करते हैं, तो Mockito का उपयोग करके नकली मॉडल बनाएं जो पूर्वनिर्धारित प्रतिक्रियाएं लौटाते हैं। इससे परीक्षण तेज़, मुफ्त और निर्धारक होते हैं।
+जब वार्तालाप लॉजिक का परीक्षण किया जाता है, तो Mockito का उपयोग करके फेक मॉडल बनाएं जो पूर्वनिर्धारित प्रतिक्रियाएं लौटाते हैं। इससे परीक्षण तेज़, मुफ्त और निर्णायक होते हैं।
-*तुलना दिखाती है कि परीक्षण के लिए मॉक क्यों बेहतर हैं: वे तेज़, मुफ्त, निर्धारक हैं और API कुंजी की आवश्यकता नहीं होती*
+*तुलना दिखाती है कि मॉक क्यों परीक्षण के लिए बेहतर हैं: वे तेज़, मुफ्त, निर्णायक होते हैं और API कुंजी की जरूरत नहीं होती*
```java
@ExtendWith(MockitoExtension.class)
@@ -218,15 +205,15 @@ class SimpleConversationTest {
}
```
-यह पैटर्न `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java` में मौजूद है। मॉक सुनिश्चित करता है कि व्यवहार सुसंगत रहे ताकि आप मेमोरी प्रबंधन सही ढंग से होता है यह सत्यापित कर सकें।
+यह पैटर्न `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java` में पाया जाता है। मॉक निश्चित व्यवहार सुनिश्चित करता है ताकि आप स्मृति प्रबंधन की जांच कर सकें।
-### पैटर्न 3: संवाद पृथक्करण का परीक्षण
+### पैटर्न 3: वार्तालाप अलगाव का परीक्षण
-संवाद स्मृति को कई उपयोगकर्ताओं को अलग रखना चाहिए। यह परीक्षण सत्यापित करता है कि संवाद संदर्भों को मिलाते नहीं हैं।
+वार्तालाप स्मृति को विभिन्न उपयोगकर्ताओं को अलग रखना चाहिए। यह परीक्षण सत्यापित करता है कि वार्तालाप संदर्भ नहीं मिलाते।
-*संवाद पृथक्करण परीक्षण जो अलग-अलग उपयोगकर्ताओं के लिए अलग-अलग मेमोरी स्टोर दिखाता है ताकि संदर्भ मिश्रण न हो*
+*वार्तालाप अलगाव परीक्षण जो दिखाता है कि अलग-अलग उपयोगकर्ताओं के लिए अलग स्मृति स्टोर होते हैं जिससे संदर्भ नहीं मिश्रित होता*
```java
@Test
@@ -250,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-प्रत्येक संवाद अपनी स्वतंत्र हिस्ट्री बनाए रखता है। उत्पादन प्रणालियों में, यह पृथक्करण मल्टी-यूजर अनुप्रयोगों के लिए महत्वपूर्ण है।
+प्रत्येक वार्तालाप अपनी स्वतंत्र इतिहास रखता है। उत्पादन सिस्टम में यह अलगाव मल्टी-यूजर एप्लिकेशन के लिए महत्वपूर्ण है।
-### पैटर्न 4: टूल्स को स्वतंत्र रूप से परीक्षण करना
+### पैटर्न 4: टूल्स का स्वतंत्र परीक्षण
-टूल वे फंक्शन हैं जिन्हें AI कॉल कर सकता है। उन्हें सीधे परीक्षण करें ताकि यह सुनिश्चित हो कि वे AI निर्णयों से स्वतंत्र रूप से सही काम करते हैं।
+टूल्स वे फंक्शन हैं जिन्हें AI कॉल कर सकता है। इन्हें सीधे परीक्षण करें ताकि यह सुनिश्चित हो सके कि वे AI निर्णयों से स्वतंत्र सही काम करते हैं।
-*टूल परीक्षण जो मॉक टूल के निष्पादन को बिना AI कॉल के दिखाता है ताकि बिजनेस लॉजिक सत्यापित किया जा सके*
+*टूल्स का स्वतंत्र परीक्षण जो दिखाता है कि मॉक टूल निष्पादन बिना AI कॉल के व्यावसायिक लॉजिक को सत्यापित करता है*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-ये परीक्षण `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` से हैं जो AI शामिल किए बिना टूल लॉजिक की पुष्टि करते हैं। चेनिंग उदाहरण दिखाता है कि कैसे एक टूल का आउटपुट दूसरे के इनपुट में जाता है।
+`04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` के ये परीक्षण टूल लॉजिक को AI भागीदारी के बिना सत्यापित करते हैं। चेनिंग उदाहरण दिखाता है कि कैसे एक टूल का आउटपुट दूसरे के इनपुट में जाता है।
### पैटर्न 5: इन-मेमोरी RAG परीक्षण
-RAG सिस्टम आमतौर पर वेक्टर डेटाबेस और एम्बेडिंग सेवाओं की आवश्यकता होते हैं। इन-मेमोरी पैटर्न आपको पूरी पाइपलाइन बाहरी आश्रयों के बिना परीक्षण करने देता है।
+RAG सिस्टम पारंपरिक रूप से वेक्टर डेटाबेस और एम्बेडिंग सेवाओं की आवश्यकता रखते हैं। इन-मेमोरी पैटर्न पूरी पाइपलाइन को बाहरी निर्भरताओं के बिना परीक्षण करने देता है।
-*इन-मेमोरी RAG परीक्षण वर्कफ़्लो जो दस्तावेज़ पार्सिंग, एम्बेडिंग संग्रहण, और समानता खोज दिखाता है बिना डेटाबेस की आवश्यकता के*
+*इन-मेमोरी RAG परीक्षण वर्कफ़्लो दिखाता है जो दस्तावेज़ पार्सिंग, एम्बेडिंग स्टोरेज, और समानता खोज बिना डेटाबेस की जरूरत के करता है*
```java
@Test
@@ -306,15 +293,15 @@ void testProcessTextDocument() {
}
```
-यह परीक्षण `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` में है जो मेमोरी में एक दस्तावेज़ बनाता है और चंकिन्ग तथा मेटाडेटा हैंडलिंग सत्यापित करता है।
+यह परीक्षण `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` से है जो मेमोरी में दस्तावेज़ बनाता है और चंकिनग तथा मेटाडेटा हैंडलिंग को सत्यापित करता है।
### पैटर्न 6: MCP इंटीग्रेशन परीक्षण
-MCP मॉड्यूल मॉडल कंटेक्स्ट प्रोटोकॉल एकीकरण को stdio ट्रांसपोर्ट के माध्यम से परीक्षण करता है। ये परीक्षण सत्यापित करते हैं कि आपका ऐप MCP सर्वर को सक्सप्रोसेस के रूप में लॉन्च और संचार कर सकता है।
+MCP मॉड्यूल मॉडल कंटेक्स्ट प्रोटोकॉल इंटीग्रेशन का परीक्षण stdio ट्रांसपोर्ट के साथ करता है। ये परीक्षण सत्यापित करते हैं कि आपका एप्लिकेशन MCP सर्वर्स को subprocess के रूप में स्पॉन कर सकता है और उनसे संवाद स्थापित कर सकता है।
-`05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` में परीक्षण MCP क्लाइंट व्यवहार की पुष्टि करते हैं।
+`05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` में ये परीक्षण MCP क्लाइंट व्यवहार को सत्यापित करते हैं।
-**इन्हें चलाएं:**
+**उन्हें चलाएं:**
**Bash:**
```bash
@@ -326,30 +313,29 @@ cd 05-mcp && mvn test
cd 05-mcp; mvn --% test
```
-## परीक्षण दर्शन
+## परीक्षण के दर्शन
-अपने कोड का परीक्षण करें, AI का नहीं। आपके परीक्षण कोड की जांच करनी चाहिए कि प्रॉम्प्ट कैसे बनाए गए हैं, मेमोरी कैसे प्रबंधित होती है, और टूल कैसे निष्पादित होते हैं। AI प्रतिक्रियाएँ भिन्न हो सकती हैं और उन्हें परीक्षण दावों में शामिल नहीं किया जाना चाहिए। खुद से पूछें कि क्या आपका प्रॉम्प्ट टेम्पलेट वेरिएबल सही ढंग से प्रतिस्थापित करता है, न कि AI सही उत्तर देता है या नहीं।
+अपने कोड का परीक्षण करें, AI का नहीं। आपके परीक्षण लिखे गए कोड का सत्यापन करना चाहिए यह जांचकर कि प्रॉम्प्ट कैसे बनाए गए, स्मृति का प्रबंधन कैसे हुआ, और टूल कैसे क्रियान्वित हुए। AI उत्तर बदलते रहते हैं और उन्हें टेस्ट असर्शन में नहीं शामिल किया जाना चाहिए। स्वयं से पूछें कि क्या आपका प्रॉम्प्ट टेम्प्लेट सही वेरिएबल्स डाल रहा है, न कि AI सही उत्तर देता है या नहीं।
-भाषा मॉडलों के लिए मॉक का उपयोग करें। वे बाहरी निर्भरता हैं जो धीमे, महंगे, और गैर-निर्धारक होते हैं। मॉकिंग परीक्षण को तेजी से बनाता है (मिलीसेकंड में बजाय सेकंड के), मुफ्त API लागत से मुक्त, और हर बार समान परिणाम के साथ निर्धारक।
+भाषा मॉडलों के लिए मॉक का उपयोग करें। वे बाहरी निर्भरताएं हैं जो धीमी, महँगी, और गैर-निर्णायक होती हैं। मॉकिंग से परीक्षण तेज़, मुफ्त, और हमेशा समान परिणाम के साथ होते हैं।
-परीक्षण स्वतंत्र रखें। प्रत्येक परीक्षण को अपने डेटा को सेटअप करना चाहिए, अन्य परीक्षणों पर निर्भर नहीं होना चाहिए, और खुद को साफ करना चाहिए। परीक्षण निष्पादन क्रम से स्वतंत्र रूप से पास होना चाहिए।
+परीक्षण स्वतंत्र रखें। प्रत्येक परीक्षण अपनी डेटा सेटअप करे, अन्य परीक्षणों पर निर्भर न रहे, और अपने बाद साफ-सफाई करे। परीक्षण निष्पादन क्रम से स्वतंत्र होने चाहिए।
-सुखद मार्ग से परे किनारे के मामले भी टेस्ट करें। खाली इनपुट, बहुत बड़े इनपुट, विशेष अक्षर, अवैध पैरामीटर, और सीमा स्थितियां आज़माएं। ये अक्सर बग उजागर करते हैं जिन्हें सामान्य उपयोग नहीं दिखाता।
+साधारण मार्ग के परे किनारे के मामलों का परीक्षण करें। खाली इनपुट, बहुत बड़े इनपुट, विशेष अक्षर, अमान्य पैरामीटर और सीमा शर्तें आजमाएं। ये अक्सर ऐसे बग्स उजागर करते हैं जो सामान्य उपयोग में नहीं दिखते।
-वर्णनात्मक नामों का उपयोग करें। `shouldMaintainConversationHistoryAcrossMultipleMessages()` की तुलना `test1()` से करें। पहला स्पष्ट रूप से बताता है कि क्या परीक्षण किया जा रहा है, जिससे डिबगिंग में आसानी होती है।
+वर्णनात्मक नामों का उपयोग करें। `shouldMaintainConversationHistoryAcrossMultipleMessages()` की तुलना `test1()` से करें। पहला नाम स्पष्ट करता है कि क्या परीक्षण हो रहा है, जिससे त्रुटि निवारण आसान होता है।
## अगले कदम
-अब जब आप परीक्षण पैटर्न समझ चुके हैं, तो प्रत्येक मॉड्यूल में गहराई से जाएं:
+अब जब आप परीक्षण पैटर्न समझ गए हैं, तो प्रत्येक मॉड्यूल में गहराई से जाएं:
-- **[00 - त्वरित प्रारंभ](../00-quick-start/README.md)** - प्रॉम्प्ट टेम्पलेट के मूल से शुरुआत करें
-- **[01 - परिचय](../01-introduction/README.md)** - संवाद स्मृति प्रबंधन सीखें
+- **[01 - परिचय](../01-introduction/README.md)** - वार्तालाप स्मृति प्रबंधन सीखें
- **[02 - प्रॉम्प्ट इंजीनियरिंग](../02-prompt-engineering/README.md)** - GPT-5.2 प्रॉम्प्टिंग पैटर्न मास्टर करें
-- **[03 - RAG](../03-rag/README.md)** - रिट्रीवल-ऑगमेंटेड जनरेशन सिस्टम बनाएं
-- **[04 - टूल्स](../04-tools/README.md)** - फ़ंक्शन कॉलिंग और टूल चेन लागू करें
-- **[05 - MCP](../05-mcp/README.md)** - मॉडल कंटेक्स्ट प्रोटोकॉल को एकीकृत करें
+- **[03 - RAG](../03-rag/README.md)** - पुनःप्राप्ति-संवर्धित जनरेशन सिस्टम बनाएं
+- **[04 - टूल्स](../04-tools/README.md)** - फंक्शन कॉलिंग और टूल चेन इम्प्लीमेंट करें
+- **[05 - MCP](../05-mcp/README.md)** - मॉडल कंटेक्स्ट प्रोटोकॉल इंटीग्रेट करें
-प्रत्येक मॉड्यूल की README यहाँ परीक्षण किए गए अवधारणाओं के विस्तृत स्पष्टीकरण प्रदान करती है।
+प्रत्येक मॉड्यूल का README यहां परीक्षण किए गए अवधारणाओं का विस्तृत विवरण प्रदान करता है।
---
@@ -358,6 +344,6 @@ cd 05-mcp; mvn --% test
---
-**अस्वीकरण**:
-इस दस्तावेज़ का अनुवाद एआई अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। हालांकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या असंगतियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सलाह दी जाती है। इस अनुवाद के उपयोग से होने वाली किसी भी गलतफहमी या गलत व्याख्या की जिम्मेदारी हम पर नहीं होगी।
+**अस्वीकरण**:
+इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
\ No newline at end of file
diff --git a/translations/hr/.co-op-translator.json b/translations/hr/.co-op-translator.json
index c598542e9..730b9f231 100644
--- a/translations/hr/.co-op-translator.json
+++ b/translations/hr/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "hr"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-03T03:41:22+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T11:20:14+00:00",
"source_file": "01-introduction/README.md",
"language_code": "hr"
},
@@ -18,20 +18,20 @@
"language_code": "hr"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-03T03:43:19+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T11:15:57+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "hr"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-03T03:44:32+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T11:19:25+00:00",
"source_file": "03-rag/README.md",
"language_code": "hr"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T08:43:47+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T11:18:09+00:00",
"source_file": "04-tools/README.md",
"language_code": "hr"
},
@@ -54,8 +54,8 @@
"language_code": "hr"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T17:03:28+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T11:14:41+00:00",
"source_file": "README.md",
"language_code": "hr"
},
@@ -72,14 +72,14 @@
"language_code": "hr"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-03T03:47:22+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T11:16:27+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "hr"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-03T03:48:06+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T11:17:04+00:00",
"source_file": "docs/TESTING.md",
"language_code": "hr"
}
diff --git a/translations/hr/00-quick-start/README.md b/translations/hr/00-quick-start/README.md
deleted file mode 100644
index 4f9837c65..000000000
--- a/translations/hr/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# Modul 00: Brzi početak
-
-## Sadržaj
-
-- [Uvod](../../../00-quick-start)
-- [Što je LangChain4j?](../../../00-quick-start)
-- [Ovisnosti LangChain4j](../../../00-quick-start)
-- [Preduvjeti](../../../00-quick-start)
-- [Postavljanje](../../../00-quick-start)
- - [1. Nabavite svoj GitHub token](../../../00-quick-start)
- - [2. Postavite svoj token](../../../00-quick-start)
-- [Pokrenite primjere](../../../00-quick-start)
- - [1. Osnovni chat](../../../00-quick-start)
- - [2. Uzorci prompta](../../../00-quick-start)
- - [3. Pozivanje funkcija](../../../00-quick-start)
- - [4. Pitanja i odgovori o dokumentima (Easy RAG)](../../../00-quick-start)
- - [5. Odgovorni AI](../../../00-quick-start)
-- [Što svaki primjer prikazuje](../../../00-quick-start)
-- [Sljedeći koraci](../../../00-quick-start)
-- [Rješavanje problema](../../../00-quick-start)
-
-## Uvod
-
-Ovaj brzi početak namijenjen je da vas što brže uvede u rad s LangChain4j. Obuhvaća apsolutne osnove izgradnje AI aplikacija s LangChain4j i GitHub modelima. U sljedećim modulima prelazite na Azure OpenAI i GPT-5.2 te dublje istražujete svaki koncept.
-
-## Što je LangChain4j?
-
-LangChain4j je Java biblioteka koja pojednostavljuje izradu aplikacija pokretanih umjetnom inteligencijom. Umjesto da se bavite HTTP klijentima i parsiranjem JSON-a, radite s čistim Java API-jima.
-
-"Chain" u LangChain odnosi se na povezivanje više komponenti – možete povezati prompt s modelom, zatim s parserom ili povezati više AI poziva gdje jedan izlaz služi kao sljedeći ulaz. Ovaj brzi početak fokusira se na osnove prije istraživanja složenijih lanaca.
-
-
-
-*Povezivanje komponenti u LangChain4j – gradivni blokovi koji se spajaju u moćne AI radne tijekove*
-
-Koristit ćemo tri glavne komponente:
-
-**ChatModel** - Sučelje za interakciju s AI modelima. Pozovite `model.chat("prompt")` i dobit ćete odgovor kao niz znakova. Koristimo `OpenAiOfficialChatModel` koji radi s OpenAI-kompatibilnim krajnjim točkama poput GitHub modela.
-
-**AiServices** - Stvara tip-sigurna AI sučelja za usluge. Definirajte metode, označite ih s `@Tool` i LangChain4j upravlja orkestracijom. AI automatski poziva vaše Java metode kad je potrebno.
-
-**MessageWindowChatMemory** - Održava povijest razgovora. Bez ovoga, svaki zahtjev je neovisan. S njim, AI pamti prethodne poruke i održava kontekst kroz više okreta.
-
-
-
-*Arhitektura LangChain4j – ključne komponente koje zajedno pokreću vaše AI aplikacije*
-
-## Ovisnosti LangChain4j
-
-Ovaj brzi početak koristi tri Maven ovisnosti u [`pom.xml`](../../../00-quick-start/pom.xml):
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-Modul `langchain4j-open-ai-official` pruža klasu `OpenAiOfficialChatModel` koja se povezuje s OpenAI-kompatibilnim API-jima. GitHub modeli koriste isti API format, stoga nije potreban poseban adapter - samo usmjerite osnovnu URL adresu na `https://models.github.ai/inference`.
-
-Modul `langchain4j-easy-rag` pruža automatsko dijeljenje dokumenata, ugradnju i dohvat, tako da možete izgraditi RAG aplikacije bez ručnog podešavanja svakog koraka.
-
-## Preduvjeti
-
-**Koristite li Dev Container?** Java i Maven su već instalirani. Trebate samo GitHub osobni token za pristup.
-
-**Lokalni razvoj:**
-- Java 21+, Maven 3.9+
-- GitHub osobni token za pristup (upute dolje)
-
-> **Napomena:** Ovaj modul koristi `gpt-4.1-nano` iz GitHub modela. Nemojte mijenjati ime modela u kodu – konfigurirano je za rad s dostupnim GitHub modelima.
-
-## Postavljanje
-
-### 1. Nabavite svoj GitHub token
-
-1. Idite na [GitHub postavke → Osobni tokeni za pristup](https://github.com/settings/personal-access-tokens)
-2. Kliknite "Generate new token"
-3. Postavite opisni naziv (npr. "LangChain4j Demo")
-4. Postavite rok trajanja (preporučeno 7 dana)
-5. U odjeljku "Account permissions" pronađite "Models" i postavite na "Read-only"
-6. Kliknite "Generate token"
-7. Kopirajte i spremite svoj token – više ga nećete vidjeti
-
-### 2. Postavite svoj token
-
-**Opcija 1: Korištenje VS Code (preporučeno)**
-
-Ako koristite VS Code, dodajte token u `.env` datoteku u korijenu projekta:
-
-Ako `.env` datoteka ne postoji, kopirajte `.env.example` u `.env` ili kreirajte novu `.env` datoteku u korijenu projekta.
-
-**Primjer `.env` datoteke:**
-```bash
-# U /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-Zatim jednostavno desnim klikom na bilo koju demo datoteku (npr. `BasicChatDemo.java`) u Exploreru odaberite **"Run Java"** ili koristite konfiguracije za pokretanje u Run and Debug panelu.
-
-**Opcija 2: Korištenje terminala**
-
-Postavite token kao varijablu okoline:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## Pokrenite primjere
-
-**Korištenje VS Code:** Jednostavno desni klik na bilo koju demo datoteku u Exploreru i odaberite **"Run Java"**, ili koristite konfiguracije za pokretanje iz Run and Debug panela (uvjerite se da ste prethodno dodali token u `.env` datoteku).
-
-**Korištenje Mavena:** Također možete pokrenuti iz naredbenog retka:
-
-### 1. Osnovni chat
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. Uzorci prompta
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-Prikazuje zero-shot, few-shot, chain-of-thought i promptanje temeljeno na ulozi.
-
-### 3. Pozivanje funkcija
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-AI automatski poziva vaše Java metode kad je potrebno.
-
-### 4. Pitanja i odgovori o dokumentima (Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-Postavite pitanja o svojim dokumentima koristeći Easy RAG s automatskom ugradnjom i dohvatom.
-
-### 5. Odgovorni AI
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-Pogledajte kako sigurnosni filtri AI blokiraju štetni sadržaj.
-
-## Što svaki primjer prikazuje
-
-**Osnovni chat** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-Započnite ovdje da vidite LangChain4j u najjednostavnijem obliku. Kreirat ćete `OpenAiOfficialChatModel`, poslati prompt s `.chat()` i dobiti povratni odgovor. Ovo pokazuje temelj: kako inicijalizirati modele s prilagođenim krajnjim točkama i API ključevima. Kad shvatite ovaj obrazac, sve ostalo se nadograđuje na njega.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 Isprobajte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otvorite [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) i pitajte:
-> - "Kako prelazim s GitHub modela na Azure OpenAI u ovom kodu?"
-> - "Koje druge parametre mogu konfigurirati u OpenAiOfficialChatModel.builder()?"
-> - "Kako dodati streaming odgovore umjesto čekanja cijelog odgovora?"
-
-**Prompt Engineering** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-Sad kad znate kako razgovarati s modelom, istražimo što mu govorite. Ovaj demo koristi istu konfiguraciju modela, ali pokazuje pet različitih obrazaca promptanja. Isprobajte zero-shot promptove za izravne upute, few-shot promptove koji uče iz primjera, chain-of-thought promptove koji otkrivaju korake razmišljanja i promptove temeljene na ulozi koji postavljaju kontekst. Vidjet ćete kako isti model daje dramatično različite rezultate ovisno o načinu postavljanja zahtjeva.
-
-Demo također pokazuje predloške prompta (`PromptTemplate`), moćan način za kreiranje ponovno upotrebljivih promptova s varijablama.
-Sljedeći primjer prikazuje prompt koji koristi LangChain4j `PromptTemplate` za popunjavanje varijabli. AI će odgovoriti na temelju danog odredišta i aktivnosti.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 Isprobajte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otvorite [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) i pitajte:
-> - "Koja je razlika između zero-shot i few-shot promptanja i kada koristiti svaki?"
-> - "Kako parametar temperature utječe na odgovore modela?"
-> - "Koje tehnike postoje za sprječavanje napada ubacivanjem promptova u produkciji?"
-> - "Kako mogu kreirati ponovo upotrebljive Predloške Promptova za uobičajene obrasce?"
-
-**Integracija alata** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-Ovdje LangChain4j postaje moćan. Koristit ćete `AiServices` da kreirate AI asistenta koji može pozivati vaše Java metode. Samo označite metode s `@Tool("opis")` i LangChain4j se brine za ostalo – AI automatski odlučuje kada koristiti koji alat na temelju korisničkih zahtjeva. Ovo pokazuje pozivanje funkcija, ključnu tehniku za izgradnju AI koja može poduzimati radnje, ne samo odgovarati na pitanja.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 Isprobajte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otvorite [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) i pitajte:
-> - "Kako radi @Tool anotacija i što LangChain4j radi s njom u pozadini?"
-> - "Može li AI pozvati više alata u nizu za rješavanje složenih problema?"
-> - "Što se događa ako alat baci iznimku – kako bih trebao rukovati greškama?"
-> - "Kako bih integrirao pravi API umjesto ovog primjera kalkulatora?"
-
-**Pitanja i odgovori o dokumentima (Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-Ovdje ćete vidjeti RAG (generiranje potpomognuto dohvaćanjem) koristeći LangChain4j pristup "Easy RAG". Dokumenti se učitavaju, automatski dijele i ugrađuju u memorijsko spremište, zatim pretraživač sadržaja isporučuje relevantne dijelove AI tijekom upita. AI odgovara na temelju vaših dokumenata, a ne svoje opće baze znanja.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 Isprobajte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otvorite [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) i pitajte:
-> - "Kako RAG sprječava AI halucinacije u usporedbi s korištenjem podataka o treningu modela?"
-> - "Koja je razlika između ovog jednostavnog pristupa i prilagođene RAG cijevi?"
-> - "Kako bih ovo skalirao za rad s više dokumenata ili većim bazama znanja?"
-
-**Odgovorni AI** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-Izgradite sigurnost AI s obrambenim slojevima. Ovaj demo prikazuje dva sloja zaštite koji rade zajedno:
-
-**Dio 1: LangChain4j Input Guardrails** - Blokiraju opasne promptove prije nego što dođu do LLM-a. Kreirajte prilagođene zaštitne mehanizme koji provjeravaju zabranjene ključne riječi ili obrasce. Oni se izvršavaju u vašem kodu, pa su brzi i besplatni.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**Dio 2: Provajderovi sigurnosni filtri** - GitHub modeli imaju ugrađene filtre koji hvataju ono što vaši guardrailsi mogu propustiti. Vidjet ćete stroge blokade (HTTP 400 greške) za teška kršenja i blage odbijanja gdje AI ljubazno odbija.
-
-> **🤖 Isprobajte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otvorite [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) i pitajte:
-> - "Što je InputGuardrail i kako napraviti vlastiti?"
-> - "Koja je razlika između stroge blokade i blagoga odbijanja?"
-> - "Zašto koristiti istovremeno guardrails i filtre provajdera?"
-
-## Sljedeći koraci
-
-**Sljedeći modul:** [01-introduction - Početak rada s LangChain4j](../01-introduction/README.md)
-
----
-
-**Navigacija:** [← Povratak na glavni](../README.md) | [Dalje: Modul 01 - Uvod →](../01-introduction/README.md)
-
----
-
-## Rješavanje problema
-
-### Prvo pokretanje Mavena
-
-**Problem**: Prvi `mvn clean compile` ili `mvn package` traje dugo (10-15 minuta)
-
-**Uzrok**: Maven treba preuzeti sve ovisnosti projekta (Spring Boot, LangChain4j biblioteke, Azure SDK-ove itd.) prilikom prvog builda.
-
-**Rješenje**: Ovo je normalno. Sljedeći buildovi bit će znatno brži jer se ovisnosti nalaze u lokalnoj predmemoriji. Vrijeme preuzimanja ovisi o brzini vaše mreže.
-
-### Sintaksa PowerShell Maven naredbe
-
-**Problem**: Maven naredbe ne uspijevaju s pogreškom `Unknown lifecycle phase ".mainClass=..."`
-**Uzrok**: PowerShell interpretira `=` kao operator dodjele varijabli, što prekida sintaksu Maven svojstava
-
-**Rješenje**: Koristite operator za zaustavljanje parsiranja `--%` prije Maven naredbe:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-Operator `--%` govori PowerShellu da sve preostale argumente proslijedi doslovno Maven-u bez interpretacije.
-
-### Prikaz emotikona u Windows PowerShellu
-
-**Problem**: AI odgovori pokazuju čudne znakove (npr. `????` ili `â??`) umjesto emotikona u PowerShellu
-
-**Uzrok**: Zadani kôd znakova PowerShella ne podržava UTF-8 emotikone
-
-**Rješenje**: Pokrenite ovu naredbu prije izvođenja Java aplikacija:
-```cmd
-chcp 65001
-```
-
-Ovo prisiljava UTF-8 kodiranje u terminalu. Alternativno, koristite Windows Terminal koji ima bolju podršku za Unicode.
-
-### Otklanjanje pogrešaka u API pozivima
-
-**Problem**: Greške pri autentikaciji, ograničenja brzine ili neočekivani odgovori s AI modela
-
-**Rješenje**: Primjeri uključuju `.logRequests(true)` i `.logResponses(true)` za prikaz API poziva u konzoli. Ovo pomaže u otklanjanju grešaka pri autentikaciji, ograničenjima brzine ili neočekivanim odgovorima. U proizvodnji uklonite ove oznake kako biste smanjili buku u zapisima.
-
----
-
-
-**Odricanje od odgovornosti**:
-Ovaj je dokument preveden korištenjem AI usluge prevođenja [Co-op Translator](https://github.com/Azure/co-op-translator). Iako težimo točnosti, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za važne informacije preporučuje se profesionalni ljudski prijevod. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogrešna tumačenja koja proizlaze iz korištenja ovog prijevoda.
-
\ No newline at end of file
diff --git a/translations/hr/01-introduction/README.md b/translations/hr/01-introduction/README.md
index 645bf8826..fa8afa525 100644
--- a/translations/hr/01-introduction/README.md
+++ b/translations/hr/01-introduction/README.md
@@ -2,37 +2,37 @@
## Sadržaj
-- [Video vodič](../../../01-introduction)
-- [Što ćete naučiti](../../../01-introduction)
-- [Preduvjeti](../../../01-introduction)
-- [Razumijevanje osnovnog problema](../../../01-introduction)
-- [Razumijevanje tokena](../../../01-introduction)
-- [Kako memorija funkcionira](../../../01-introduction)
-- [Kako se koristi LangChain4j](../../../01-introduction)
-- [Implementacija Azure OpenAI infrastrukture](../../../01-introduction)
-- [Pokretanje aplikacije lokalno](../../../01-introduction)
-- [Korištenje aplikacije](../../../01-introduction)
- - [Stateless chat (lijevi panel)](../../../01-introduction)
- - [Stateful chat (desni panel)](../../../01-introduction)
-- [Sljedeći koraci](../../../01-introduction)
+- [Video vodič](#video-vodič)
+- [Što ćete naučiti](#što-ćete-naučiti)
+- [Preduvjeti](#preduvjeti)
+- [Razumijevanje osnovnog problema](#razumijevanje-osnovnog-problema)
+- [Razumijevanje tokena](#razumijevanje-tokena)
+- [Kako radna memorija funkcionira](#kako-radna-memorija-funkcionira)
+- [Kako se koristi LangChain4j](#kako-se-koristi-langchain4j)
+- [Implementacija Azure OpenAI infrastrukture](#implementacija-azure-openai-infrastrukture)
+- [Pokretanje aplikacije lokalno](#pokretanje-aplikacije-lokalno)
+- [Korištenje aplikacije](#korištenje-aplikacije)
+ - [Statički razgovor (lijevi panel)](#statički-razgovor-lijevi-panel)
+ - [Dinamički razgovor (desni panel)](#dinamički-razgovor-desni-panel)
+- [Sljedeći koraci](#sljedeći-koraci)
## Video vodič
-Pogledajte ovu live sesiju koja objašnjava kako započeti s ovim modulom:
+Pogledajte ovu snimku uživo koja objašnjava kako započeti s ovim modulom:
## Što ćete naučiti
-U brzom početku koristili ste GitHub modele za slanje upita, pozivanje alata, izgradnju RAG pipelinea i testiranje zaštitnih ograda. Ti su demonstracijski primjeri pokazali što je moguće — sada prelazimo na Azure OpenAI i GPT-5.2 te započinjemo izgradnju aplikacija u produkcijskom stilu. Ovaj modul fokusira se na konverzacijski AI koji pamti kontekst i održava stanje — pojmove koje su ti primjeri u brzom početku koristili u pozadini ali nisu objasnili.
+Ovo je vaša polazna točka s LangChain4j i Azure OpenAI. Počinjemo s osnovama i krećemo izgraditi proizvodne aplikacije. Ovaj modul se fokusira na konverzacijski AI koji pamti kontekst i održava stanje — temeljne koncepte na kojima se grade svi kasniji moduli.
-Koristit ćemo Azure OpenAI GPT-5.2 kroz ovaj vodič jer njegove napredne sposobnosti rezoniranja čine ponašanje različitih šablona jasnijim. Kada dodate memoriju, jasno ćete vidjeti razliku. To olakšava razumijevanje što svaki komponent donosi vašoj aplikaciji.
+Koristit ćemo Azure OpenAI-jev GPT-5.2 kroz ovaj vodič jer njegove napredne sposobnosti rezoniranja jasno pokazuju ponašanje raznih obrazaca. Kada dodate memoriju, razlika postaje očita. To olakšava razumijevanje što svaki dio donosi vašoj aplikaciji.
-Izgradit ćete jednu aplikaciju koja demonstrira oba šablona:
+Izgradit ćete jednu aplikaciju koja demonstrira oba obrasca:
-**Stateless chat** - Svaki zahtjev je neovisan. Model nema memoriju prethodnih poruka. To je šablon koji ste koristili u brzom početku.
+**Stateless Chat** - Svaki zahtjev je samostalan. Model nema memoriju prethodnih poruka. Ovo je najsimpiljnija polazna točka.
-**Stateful conversation** - Svaki zahtjev uključuje povijest razgovora. Model održava kontekst kroz više okretaja. To je ono što produkcijske aplikacije zahtijevaju.
+**Stateful Conversation** - Svaki zahtjev uključuje povijest razgovora. Model održava kontekst kroz više okretaja. To je ono što proizvodne aplikacije zahtijevaju.
## Preduvjeti
@@ -41,37 +41,37 @@ Izgradit ćete jednu aplikaciju koja demonstrira oba šablona:
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
-> **Napomena:** Java, Maven, Azure CLI i Azure Developer CLI (azd) su predinstalirani u priloženom devcontaineru.
+> **Napomena:** Java, Maven, Azure CLI i Azure Developer CLI (azd) su unaprijed instalirani u priloženom razvojnom kontejneru.
-> **Napomena:** Ovaj modul koristi GPT-5.2 na Azure OpenAI. Implementacija se konfigurira automatski putem `azd up` — nemojte mijenjati naziv modela u kodu.
+> **Napomena:** Ovaj modul koristi GPT-5.2 na Azure OpenAI. Implementacija se automatski konfigurira putem `azd up` - nemojte mijenjati ime modela u kodu.
## Razumijevanje osnovnog problema
-Jezik modeli su bez stanja (stateless). Svaki API poziv je neovisan. Ako pošaljete "Moje ime je John" i zatim pitate "Kako se zovem?", model nema pojma da ste se upravo predstavili. On tretira svaki zahtjev kao da je prvi razgovor koji ste ikada imali.
+Jezični modeli su bezstanja. Svaki API poziv je nezavisan. Ako pošaljete "Moje ime je John" pa zatim pitate "Kako se zovem?", model nema pojma da ste se upravo predstavili. Svaki zahtjev tretira kao da je prvi razgovor koji ste ikada vodili.
-To je u redu za jednostavna pitanja i odgovore, ali beskorisno za prave aplikacije. Botovi za korisničku podršku trebaju pamtiti što ste im rekli. Osobni asistenti trebaju kontekst. Svaki višekratni razgovor zahtijeva memoriju.
+To je u redu za jednostavna pitanja i odgovore, ali beskorisno za stvarne aplikacije. Botovi za korisničku službu moraju pamtiti što ste im rekli. Osobni asistenti trebaju kontekst. Svaki višekratni razgovor zahtijeva memoriju.
-Sljedeći dijagram prikazuje kontrast dvaju pristupa — lijevo je stateless poziv koji zaboravlja vaše ime; desno je stateful poziv podržan ChatMemory koji ga pamti.
+Sljedeća dijagram prikazuje kontrast dvaju pristupa — lijevo je bezstanični poziv koji zaboravlja vaše ime; desno je sa stanjem, potpomognut ChatMemory, koji ga pamti.
-*Razlika između stateless (neovisnih poziva) i stateful (svjestan konteksta) razgovora*
+*Razlika između bezstanih (nezavisnih poziva) i stanju svjesnih (kontekstnih) razgovora*
## Razumijevanje tokena
-Prije nego što zaronite u razgovore, važno je razumjeti tokene - osnovne jedinice teksta koje jezični modeli obrađuju:
+Prije nego što zaronimo u razgovore, važno je razumjeti tokene - osnovne jedinice teksta koje jezični modeli obrađuju:
-*Primjer kako se tekst dijeli na tokene - "Volim AI!" postaje 4 zasebne jedinice za obradu*
+*Primjer kako se tekst dijeli na tokene - "I love AI!" postaje 4 zasebne jedinice za obradu*
-Tokeni su način na koji AI modeli mjere i obrađuju tekst. Riječi, interpunkcija pa čak i razmaci mogu biti tokene. Vaš model ima ograničenje koliko tokena može obraditi odjednom (400.000 za GPT-5.2, s do 272.000 ulaznih tokena i 128.000 izlaznih tokena). Razumijevanje tokena pomaže u upravljanju duljinom razgovora i troškovima.
+Tokeni su način na koji AI modeli mjere i obrađuju tekst. Riječi, interpunkcija pa čak i praznine mogu biti tokeni. Vaš model ima ograničenje koliko tokena može obraditi odjednom (400.000 za GPT-5.2, s do 272.000 ulaznih tokena i 128.000 izlaznih tokena). Razumijevanje tokena pomaže u upravljanju duljinom razgovora i troškovima.
-## Kako memorija funkcionira
+## Kako radna memorija funkcionira
-Chat memorija rješava problem stateless tako što održava povijest razgovora. Prije nego što pošaljete zahtjev modelu, okvir prethodno dodaje relevantne prethodne poruke. Kada pitate "Kako se zovem?", sustav zapravo šalje cijelu povijest razgovora, što modelu omogućuje da vidi da ste prije rekli "Moje ime je John."
+Chat memorija rješava problem bezstanja tako što održava povijest razgovora. Prije nego što pošaljete zahtjev modelu, okvir prethodno dodaje relevantne prethodne poruke. Kad pitate "Kako se zovem?", sustav zapravo šalje cijelu povijest razgovora, dopuštajući modelu da vidi da ste ranije rekli "Moje ime je John."
-LangChain4j pruža implementacije memorije koje to automatski upravljaju. Odaberete koliko poruka želite zadržati, a okvir upravlja kontekstualnim prozorom. Dijagram ispod pokazuje kako MessageWindowChatMemory održava klizni prozor nedavnih poruka.
+LangChain4j nudi implementacije memorije koje to automatski rješavaju. Vi birate koliko poruka želite sačuvati, a okvir upravlja kontekstnim prozorom. Dijagram ispod prikazuje kako MessageWindowChatMemory održava klizni prozor nedavnih poruka.
@@ -79,7 +79,7 @@ LangChain4j pruža implementacije memorije koje to automatski upravljaju. Odaber
## Kako se koristi LangChain4j
-Ovaj modul proširuje brzi početak integrirajući Spring Boot i dodajući memoriju razgovora. Evo kako se dijelovi slažu:
+Ovaj modul integrira Spring Boot i dodaje memoriju za razgovor. Evo kako se elementi slagaju:
**Ovisnosti** - Dodajte dvije LangChain4j biblioteke:
@@ -93,8 +93,8 @@ Ovaj modul proširuje brzi početak integrirajući Spring Boot i dodajući memor
langchain4j-open-ai-official
```
-
-**Chat model** - Konfigurirajte Azure OpenAI kao Spring bean ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+
+**Chat Model** - Konfigurirajte Azure OpenAI kao Spring bean ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -108,10 +108,10 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
.build();
}
```
+
+Builder čita vjerodajnice iz varijabli okoline postavljenih `azd up`. Postavljanje `baseUrl` na vašu Azure krajnju točku omogućuje OpenAI klijentu rad s Azure OpenAI.
-Builder čita vjerodajnice iz varijabli okoline postavljenih naredbom `azd up`. Postavljanje `baseUrl` na vaš Azure endpoint čini da OpenAI klijent radi s Azure OpenAI.
-
-**Memorija razgovora** - Pratite povijest chata s MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
+**Memorija razgovora** - Pratite povijest razgovora s MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -123,64 +123,67 @@ memory.add(UserMessage.from("What's my name?"));
AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-
-Kreirajte memoriju s `withMaxMessages(10)` da zadržite zadnjih 10 poruka. Dodajte korisničke i AI poruke s tipiziranim omotačima: `UserMessage.from(text)` i `AiMessage.from(text)`. Dohvatite povijest s `memory.messages()` i pošaljite je modelu. Servis pohranjuje odvojene instance memorije po ID-u razgovora, omogućujući istovremeni chat više korisnika.
+
+Kreirajte memoriju s `withMaxMessages(10)` za čuvanje posljednjih 10 poruka. Dodajte korisničke i AI poruke pomoću tipiziranih omotača: `UserMessage.from(text)` i `AiMessage.from(text)`. Dohvatite povijest s `memory.messages()` i pošaljite je modelu. Servis pohranjuje zasebne instance memorije po ID-u razgovora, dopuštajući višestrukim korisnicima istovremeni chat.
> **🤖 Isprobajte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otvorite [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) i pitajte:
> - "Kako MessageWindowChatMemory odlučuje koje poruke odbaciti kada je prozor pun?"
-> - "Mogu li implementirati prilagođeno spremište memorije koristeći bazu podataka umjesto memorije u RAM-u?"
-> - "Kako bih dodao sažimanje za kompresiju stare povijesti razgovora?"
+> - "Mogu li implementirati prilagođenu pohranu memorije koristeći bazu podataka umjesto memorije?"
+> - "Kako bih dodao sažimanje da komprimiram staru povijest razgovora?"
-Stateless chat endpoint u potpunosti preskače memoriju - samo `chatModel.chat(prompt)` kao u brzom početku. Stateful endpoint dodaje poruke u memoriju, dohvaća povijest i uključuje taj kontekst sa svakim zahtjevom. Ista konfiguracija modela, različiti šabloni.
+Endpoint za stateless chat u potpunosti preskače memoriju - samo `chatModel.chat(prompt)` kao u brzom početku. Stateful endpoint dodaje poruke u memoriju, dohvaća povijest i uključuje taj kontekst sa svakim zahtjevom. Ista konfiguracija modela, različiti obrasci.
## Implementacija Azure OpenAI infrastrukture
-**Bash:**
+**Bash:**
```bash
cd 01-introduction
azd up # Odaberite pretplatu i lokaciju (preporučeno eastus2)
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
cd 01-introduction
azd up # Odaberite pretplatu i lokaciju (preporučeno eastus2)
```
+
-> **Napomena:** Ako naiđete na timeout grešku (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), jednostavno pokrenite `azd up` ponovno. Azure resursi mogu još biti u procesu postavljanja u pozadini, a ponovni pokušaj omogućuje dovršetak implementacije kad resursi dođu u terminalno stanje.
+> **Napomena:** Ako naiđete na grešku timeouta (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), jednostavno ponovno pokrenite `azd up`. Azure resursi se mogu još postavljati u pozadini, a ponovni pokušaj omogućuje dovršetak implementacije kada resursi dođu u terminalno stanje.
Ovo će:
-1. Implementirati Azure OpenAI resurs s GPT-5.2 i modelima text-embedding-3-small
-2. Automatski generirati `.env` datoteku u korijenu projekta s vjerodajnicama
-3. Postaviti sve potrebne varijable okoline
+1. Implementirati Azure OpenAI resurs s GPT-5.2 i modelima text-embedding-3-small
+2. Automatski generirati `.env` datoteku u korijenu projekta s vjerodajnicama
+3. Postaviti sve potrebne varijable okoline
-**Imate problema s implementacijom?** Pogledajte [Infrastructure README](infra/README.md) za detaljne upute o rješavanju problema uključujući sukobe naziva poddomena, ručne korake implementacije kroz Azure Portal i savjete za konfiguraciju modela.
+**Imate problema s implementacijom?** Pogledajte [Infrastructure README](infra/README.md) za detaljno rješavanje problema uključujući sukobe naziva poddomena, korake za ručnu implementaciju putem Azure Portala i upute za konfiguraciju modela.
-**Provjerite je li implementacija uspješna:**
+**Provjerite je li implementacija uspjela:**
-**Bash:**
+**Bash:**
```bash
-cat ../.env # Trebao bi pokazati AZURE_OPENAI_ENDPOINT, API_KEY, itd.
+cat ../.env # Trebalo bi prikazati AZURE_OPENAI_ENDPOINT, API_KEY itd.
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
-Get-Content ..\.env # Trebalo bi prikazati AZURE_OPENAI_ENDPOINT, API_KEY, itd.
+Get-Content ..\.env # Trebao bi prikazati AZURE_OPENAI_ENDPOINT, API_KEY, itd.
```
-> **Napomena:** Naredba `azd up` automatski generira `.env` datoteku. Ako je kasnije trebate ažurirati, možete ili ručno uređivati `.env` ili je ponovno generirati pokretanjem:
->
-> **Bash:**
+
+> **Napomena:** `azd up` automatski generira `.env` datoteku. Ako je potrebno kasnije ažurirati, možete ju ili ručno urediti ili ponovno generirati pokretanjem:
+>
+> **Bash:**
> ```bash
> cd ..
> bash .azd-env.sh
> ```
->
-> **PowerShell:**
+>
+> **PowerShell:**
> ```powershell
> cd ..
> .\.azd-env.ps1
> ```
+
## Pokretanje aplikacije lokalno
@@ -188,135 +191,140 @@ Get-Content ..\.env # Trebalo bi prikazati AZURE_OPENAI_ENDPOINT, API_KEY, itd.
Provjerite postoji li `.env` datoteka u korijenskom direktoriju s Azure vjerodajnicama. Pokrenite ovo iz direktorija modula (`01-introduction/`):
-**Bash:**
+**Bash:**
```bash
cat ../.env # Trebalo bi prikazati AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
Get-Content ..\.env # Trebalo bi prikazati AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
+
**Pokrenite aplikacije:**
-**Opcija 1: Koristeći Spring Boot Dashboard (preporučeno za korisnike VS Code-a)**
+**Opcija 1: Korištenje Spring Boot Dashboarda (preporučeno za korisnike VS Code-a)**
-Dev container uključuje Spring Boot Dashboard ekstenziju, koja pruža vizualno sučelje za upravljanje svim Spring Boot aplikacijama. Možete ga pronaći na Activity Bar-u s lijeve strane VS Code-a (potražite ikonu Spring Boot).
+Razvojni kontejner uključuje ekstenziju Spring Boot Dashboard, koja pruža vizualno sučelje za upravljanje svim Spring Boot aplikacijama. Možete ju pronaći u traci aktivnosti na lijevoj strani VS Code-a (potražite ikonu Spring Boota).
-Iz Spring Boot Dashboard-a možete:
-- Vidjeti sve dostupne Spring Boot aplikacije u radnom prostoru
-- Pokrenuti/zaustaviti aplikacije jednim klikom
-- Pregledavati zapisnike aplikacija u realnom vremenu
-- Pratiti status aplikacija
+Iz Spring Boot Dashboarda možete:
+- Vidjeti sve dostupne Spring Boot aplikacije u prostoru za rad
+- Pokretati/zaustavljati aplikacije jednim klikom
+- Pratiti zapisnike aplikacije u stvarnom vremenu
+- Nadzirati stanje aplikacije
-Samo kliknite tipku za pokretanje pored "introduction" za pokretanje ovog modula, ili pokrenite sve module odjednom.
+Jednostavno kliknite tipku za pokretanje pored "introduction" za pokretanje ovog modula ili pokrenite sve module odjednom.
-*Spring Boot Dashboard u VS Code-u — pokrenite, zaustavite i pratite sve module s jednog mjesta*
+*Spring Boot Dashboard u VS Codeu — pokrenite, zaustavite i pratite sve module s jednog mjesta*
-**Opcija 2: Koristeći shell skripte**
+**Opcija 2: Korištenje shell skripti**
Pokrenite sve web aplikacije (moduli 01-04):
-**Bash:**
+**Bash:**
```bash
cd .. # Iz korijenskog direktorija
./start-all.sh
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
cd .. # Iz korijenskog direktorija
.\start-all.ps1
```
+
Ili pokrenite samo ovaj modul:
-**Bash:**
+**Bash:**
```bash
cd 01-introduction
./start.sh
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
cd 01-introduction
.\start.ps1
```
+
-Obje skripte automatski učitavaju varijable okoline iz `.env` datoteke u korijenu i gradit će JAR-ove ako ne postoje.
+Oba skripta automatski učitavaju varijable okoline iz korijenske `.env` datoteke i kompajlirat će JAR-ove ako ne postoje.
-> **Napomena:** Ako želite ručno izgraditi sve module prije pokretanja:
->
-> **Bash:**
+> **Napomena:** Ako želite ručno izgraditi sve module prije pokretanja:
+>
+> **Bash:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
->
-> **PowerShell:**
+>
+> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
+
Otvorite http://localhost:8080 u vašem pregledniku.
**Za zaustavljanje:**
-**Bash:**
+**Bash:**
```bash
./stop.sh # Samo ovaj modul
# Ili
cd .. && ./stop-all.sh # Svi moduli
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
.\stop.ps1 # Samo ovaj modul
# Ili
cd ..; .\stop-all.ps1 # Svi moduli
```
+
## Korištenje aplikacije
-Aplikacija pruža web sučelje s dvije implementacije chat-a jedna do druge.
+Aplikacija pruža web sučelje s dvije implementacije chata jedna do druge.
-*Nadzorna ploča prikazuje opcije za Simple Chat (stateless) i Conversational Chat (stateful)*
+*Prikaz nadzorne ploče s opcijama Simple Chat (bezstanje) i Conversational Chat (sa stanjem)*
-### Stateless chat (lijevi panel)
+### Statički razgovor (lijevi panel)
-Isprobajte ovo prvo. Recite "Moje ime je John" pa odmah zatim "Kako se zovem?" Model se neće sjetiti jer je svaka poruka neovisna. Ovo demonstrira osnovni problem s integracijom jezičnih modela — nema konteksta razgovora.
+Probajte najprije ovo. Recite "Moje ime je John" i zatim odmah pitajte "Kako se zovem?" Model neće zapamtiti jer je svaka poruka samostalna. Ovo ilustrira osnovni problem integracije jezičnih modela - nema kontekst razgovora.
-*AI se ne sjeća vašeg imena iz prethodne poruke*
+*AI ne pamti vaše ime iz prethodne poruke*
-### Stateful chat (desni panel)
+### Dinamički razgovor (desni panel)
-Sada isprobajte isti niz ovdje. Recite "Moje ime je John" pa zatim "Kako se zovem?" Ovaj put se pamti. Razlika je MessageWindowChatMemory — održava povijest razgovora i uključuje je sa svakim zahtjevom. Ovako funkcionira produkcijski konverzacijski AI.
+Sada isprobajte isti redoslijed ovdje. Recite "Moje ime je John" pa zatim "Kako se zovem?" Ovog puta model pamti. Razlika je u MessageWindowChatMemory - on održava povijest razgovora i uključuje je sa svakim zahtjevom. Ovo je način na koji produkcijski konverzacijski AI radi.
-*AI se sjeća vašeg imena s početka razgovora*
+*AI pamti vaše ime iz ranijeg dijela razgovora*
-Oba panela koriste isti GPT-5.2 model. Jedina razlika je memorija. To jasno pokazuje što memorija donosi vašoj aplikaciji i zašto je ključna za stvarne slučajeve korištenja.
+Oba panela koriste isti GPT-5.2 model. Jedina razlika je memorija. To jasno pokazuje što memorija donosi vašoj aplikaciji i zašto je bitna za stvarne slučajeve upotrebe.
## Sljedeći koraci
-**Sljedeći modul:** [02-prompt-engineering - Prompt Engineering s GPT-5.2](../02-prompt-engineering/README.md)
+**Sljedeći modul:** [02-prompt-engineering - Inženjering upita s GPT-5.2](../02-prompt-engineering/README.md)
---
-**Navigacija:** [← Prethodni: Modul 00 - Brzi početak](../00-quick-start/README.md) | [Natrag na početak](../README.md) | [Sljedeći: Modul 02 - Prompt Engineering →](../02-prompt-engineering/README.md)
+**Navigacija:** [← Nazad na početak](../README.md) | [Sljedeće: Modul 02 - Inženjering upita →](../02-prompt-engineering/README.md)
---
**Napomena**:
-Ovaj je dokument preveden pomoću AI usluge za prevođenje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo postići točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba se smatrati autoritativnim izvorom. Za važne informacije preporučuje se profesionalni ljudski prijevod. Nismo odgovorni za bilo kakva nesporazumevanja ili pogrešna tumačenja koja proizlaze iz korištenja ovog prijevoda.
+Ovaj dokument je preveden korištenjem AI prevoditeljskog servisa [Co-op Translator](https://github.com/Azure/co-op-translator). Iako težimo točnosti, imajte na umu da automatski prijevodi mogu sadržavati greške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za važne informacije preporuča se profesionalni ljudski prijevod. Nismo odgovorni za bilo kakva nesporazumevanja ili pogrešne interpretacije koje proizlaze iz korištenja ovog prijevoda.
\ No newline at end of file
diff --git a/translations/hr/02-prompt-engineering/README.md b/translations/hr/02-prompt-engineering/README.md
index 01e94095d..17c7e611c 100644
--- a/translations/hr/02-prompt-engineering/README.md
+++ b/translations/hr/02-prompt-engineering/README.md
@@ -1,85 +1,85 @@
-# Modul 02: Inženjering prompta s GPT-5.2
+# Modul 02: Izrada upita s GPT-5.2
## Sadržaj
-- [Video vodič](../../../02-prompt-engineering)
-- [Što ćete naučiti](../../../02-prompt-engineering)
-- [Preduvjeti](../../../02-prompt-engineering)
-- [Razumijevanje inženjeringa prompta](../../../02-prompt-engineering)
-- [Osnove inženjeringa prompta](../../../02-prompt-engineering)
- - [Zero-Shot promptiranje](../../../02-prompt-engineering)
- - [Few-Shot promptiranje](../../../02-prompt-engineering)
- - [Lanac misli](../../../02-prompt-engineering)
- - [Promptiranje temeljeno na ulozi](../../../02-prompt-engineering)
- - [Predlošci prompta](../../../02-prompt-engineering)
-- [Napredni obrasci](../../../02-prompt-engineering)
-- [Pokretanje aplikacije](../../../02-prompt-engineering)
-- [Snimke zaslona aplikacije](../../../02-prompt-engineering)
-- [Istraživanje obrazaca](../../../02-prompt-engineering)
- - [Niska nasuprot visokoj žustrini](../../../02-prompt-engineering)
- - [Izvršavanje zadatka (prolog za alate)](../../../02-prompt-engineering)
- - [Kod za samorefleksiju](../../../02-prompt-engineering)
- - [Strukturirana analiza](../../../02-prompt-engineering)
- - [Višekratni razgovor](../../../02-prompt-engineering)
- - [Korak po korak rezoniranje](../../../02-prompt-engineering)
- - [Ograničeni izlaz](../../../02-prompt-engineering)
-- [Što zapravo učite](../../../02-prompt-engineering)
-- [Sljedeći koraci](../../../02-prompt-engineering)
+- [Video vodič](#video-vodič)
+- [Što ćete naučiti](#što-ćete-naučiti)
+- [Preduvjeti](#preduvjeti)
+- [Razumijevanje izrade upita](#razumijevanje-izrade-upita)
+- [Osnove izrade upita](#osnove-izrade-upita)
+ - [Zero-Shot upiti](#zero-shot-upiti)
+ - [Few-Shot upiti](#few-shot-upiti)
+ - [Lanac razmišljanja](#lanac-razmišljanja)
+ - [Upiti temeljeni na ulozi](#upiti-temeljeni-na-ulozi)
+ - [Predlošci upita](#predlošci-upita)
+- [Napredni obrasci](#napredni-obrasci)
+- [Pokretanje aplikacije](#pokreni-aplikaciju)
+- [Screenshotovi aplikacije](#snimke-zaslona-aplikacije)
+- [Istraživanje obrazaca](#istraživanje-uzoraka)
+ - [Niska vs visoka volja](#niska-vs-visoka-željnost-eagerness)
+ - [Izvršenje zadatka (Predgovori alata)](#izvršenje-zadatka-unaprijed-definirani-alati)
+ - [Kod s vlastitim razmišljanjem](#samoreflektirajući-kod)
+ - [Strukturirana analiza](#strukturirana-analiza)
+ - [Višekratni razgovor](#višekratni-razgovor)
+ - [Razmišljanje korak po korak](#razmišljanje-korak-po-korak)
+ - [Ograničeni ishod](#ograničeni-izlaz)
+- [Što zaista učite](#što-zapravo-učite)
+- [Sljedeći koraci](#sljedeći-koraci)
## Video vodič
Pogledajte ovu live sesiju koja objašnjava kako započeti s ovim modulom:
-
+
## Što ćete naučiti
-Sljedeći dijagram pruža pregled ključnih tema i vještina koje ćete razviti u ovom modulu — od tehnika rafiniranja prompta do korak-po-korak tijeka rada koji ćete pratiti.
+Sljedeći dijagram prikazuje pregled ključnih tema i vještina koje ćete razviti u ovom modulu — od tehnika usavršavanja upita do korak-po-korak tijeka rada koji ćete slijediti.
-
+
-U prethodnim modulima istražili ste osnovne interakcije LangChain4j s GitHub modelima i vidjeli kako memorija omogućuje konverzacijski AI s Azure OpenAI. Sada ćemo se usredotočiti na način na koji postavljate pitanja — same promptove — koristeći Azure OpenAI GPT-5.2. Način na koji strukturirate svoje promptove drastično utječe na kvalitetu odgovora koje dobijete. Počinjemo pregledom osnovnih tehnika promptiranja, a zatim prelazimo na osam naprednih obrazaca koji u potpunosti koriste mogućnosti GPT-5.2.
+U prethodnom modulu vidjeli ste kako memorija omogućuje konverzacijski AI s Azure OpenAI. Sada ćemo se usredotočiti na način na koji postavljate pitanja — same upite — koristeći Azure OpenAI GPT-5.2. Način na koji strukturirate svoje upite dramatično utječe na kvalitetu dobivenih odgovora. Počinjemo pregledom osnovnih tehnika izrade upita, a zatim prelazimo na osam naprednih obrazaca koji u potpunosti koriste mogućnosti GPT-5.2.
-Koristit ćemo GPT-5.2 jer uvodi kontrolu rezoniranja - možete modelu reći koliko razmišljanja da obavi prije odgovora. Ovo čini različite strategije promptiranja jasnijima i pomaže vam razumjeti kada koristiti koji pristup. Također ćemo imati koristi od manjih ograničenja stope u Azure-u za GPT-5.2 u usporedbi s GitHub modelima.
+Koristit ćemo GPT-5.2 jer uvodi kontrolu razmišljanja – možete reći modelu koliko razmišljanja treba prije odgovora. To čini različite strategije upita jasnijima i pomaže vam razumjeti kada koristiti koji pristup.
## Preduvjeti
-- Završeni Modul 01 (Azure OpenAI resursi postavljeni)
-- `.env` datoteka u korijenskom direktoriju s Azure vjerodajnicama (kreirana pomoću `azd up` u Modulu 01)
+- Završeni Modul 01 (postavljeni Azure OpenAI resursi)
+- `.env` datoteka u korijenskom direktoriju s Azure vjerodajnicama (kreirana naredbom `azd up` u Modulu 01)
-> **Napomena:** Ako niste završili Modul 01, prvo slijedite upute za postavljanje tamo.
+> **Napomena:** Ako niste završili Modul 01, prvo slijedite upute za postavljanje iz tog modula.
-## Razumijevanje inženjeringa prompta
+## Razumijevanje izrade upita
-U svojoj srži, inženjering prompta je razlika između nejasnih uputa i preciznih, što donji primjer ilustrira.
+Izrada upita u svojoj suštini razlikuje nejasne upute od preciznih, kao što donja usporedba ilustrira.
-
+
-Inženjering prompta odnosi se na dizajniranje ulaznog teksta koji dosljedno daje rezultate koje trebate. Nije samo pitanje postavljanja pitanja - riječ je o strukturiranju zahtjeva tako da model točno razumije što želite i kako vam to dostaviti.
+Izrada upita znači oblikovanje ulaznog teksta koji konzistentno donosi potrebne rezultate. Nije riječ samo o postavljanju pitanja — radi se o strukturiranju zahtjeva da model točno razumije što želite i kako to isporučiti.
-Zamislite da dajete upute kolegi. "Popravi bug" je nejasno. "Popravi iznimku null pointer u UserService.java, red 45, dodajući provjeru na null" je specifično. Jezični modeli rade na isti način - specifičnost i struktura su bitni.
+Možete to usporediti s davanjem uputa kolegi. "Popravi grešku" je nejasno. "Popravi iznimku null pointer u UserService.java na liniji 45 dodavanjem provjere null vrijednosti" je specifično. Jezični modeli funkcioniraju isto — specifičnost i struktura su bitni.
-Dijagram ispod prikazuje kako se LangChain4j uklapa u ovu sliku — povezujući vaše obrasce prompta s modelom kroz gradivne blokove SystemMessage i UserMessage.
+Dijagram ispod prikazuje kako se LangChain4j uklapa u ovu sliku — povezujući vaše obrasce upita s modelom putem građevnih blokova SystemMessage i UserMessage.
-
+
-LangChain4j pruža infrastrukturu — veze modela, memoriju i vrste poruka — dok su obrasci prompta samo pažljivo strukturirani tekst koji šaljete kroz tu infrastrukturu. Ključni gradivni blokovi su `SystemMessage` (koji postavlja ponašanje i ulogu AI-a) i `UserMessage` (koja nosi vaš stvarni zahtjev).
+LangChain4j pruža infrastrukturu — veze s modelom, memoriju i vrste poruka — dok su obrasci upita samo pažljivo strukturirani tekst koji šaljete kroz tu infrastrukturu. Ključni građevni blokovi su `SystemMessage` (koji postavlja ponašanje i ulogu AI-a) i `UserMessage` (koji prenosi vaš stvarni zahtjev).
-## Osnove inženjeringa prompta
+## Osnove izrade upita
-Pet osnovnih tehnika prikazanih ispod čine temelj učinkovite izrade prompta. Svaka pokriva različit aspekt načina komunikacije s jezičnim modelima.
+Pet osnovnih tehnika prikazanih u nastavku čine temelj učinkovite izrade upita. Svaka se bavi različitim aspektom kako komunicirate s jezičnim modelima.
-
+
-Prije nego što u ovom modulu prijeđemo na napredne obrasce, pregledajmo pet temeljnih tehnika promptiranja. To su gradivni blokovi koje svaki inženjer prompta treba poznavati. Ako ste već radili kroz [modul brzog početka](../00-quick-start/README.md#2-prompt-patterns), već ste ih vidjeli u akciji — evo konceptualnog okvira iza njih.
+Prije nego što zaronimo u napredne obrasce ovog modula, pregledajmo pet osnovnih tehnika izrade upita. To su gradivni blokovi koje svaki inženjer upita treba znati.
-### Zero-Shot promptiranje
+### Zero-Shot upiti
Najjednostavniji pristup: dajte modelu izravnu uputu bez primjera. Model se u potpunosti oslanja na svoje treniranje da razumije i izvrši zadatak. Ovo dobro funkcionira za jednostavne zahtjeve gdje je očekivano ponašanje očito.
-
+
-*Izravna uputa bez primjera — model zaključuje zadatak samo iz upute*
+*Izravna uputa bez primjera — model zaključuje zadatak samo na temelju upute*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
@@ -89,13 +89,13 @@ String response = model.chat(prompt);
**Kada koristiti:** Jednostavne klasifikacije, izravna pitanja, prijevodi ili bilo koji zadatak koji model može obraditi bez dodatnih uputa.
-### Few-Shot promptiranje
+### Few-Shot upiti
-Pružite primjere koji demonstriraju obrazac koji želite da model slijedi. Model uči očekivani format ulaz-izlaz iz vaših primjera i primjenjuje ga na nove ulaze. Ovo dramatično poboljšava konzistentnost za zadatke gdje željeni format ili ponašanje nije očito.
+Dajte primjere koji demonstriraju obrazac kojeg želite da model slijedi. Model uči očekivani format ulaza i izlaza iz vaših primjera i primjenjuje ga na nove unose. Ovo dramatično poboljšava dosljednost za zadatke gdje željeni format ili ponašanje nije očito.
-
+
-*Učenje iz primjera — model identificira obrazac i primjenjuje ga na nove ulaze*
+*Učenje iz primjera — model prepoznaje obrazac i primjenjuje ga na nove unose*
```java
String prompt = """
@@ -112,15 +112,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Kada koristiti:** Prilagođene klasifikacije, dosljedno formatiranje, zadaci specifični za domenu ili kada su rezultati zero-shot promptiranja nekonzistentni.
+**Kada koristiti:** Prilagođene klasifikacije, dosljedno formatiranje, zadatke specifične za domen, ili kada su rezultati zero-shot upita nedosljedni.
-### Lanac misli
+### Lanac razmišljanja
-Zatražite od modela da pokaže svoje rezoniranje korak-po-korak. Umjesto da preskoči direktno na odgovor, model razlaže problem i razrađuje svaki dio eksplicitno. Ovo poboljšava točnost kod matematičkih, logičkih i višestepenih razmišljanja.
+Zatražite od modela da pokaže svoje razmišljanje korak po korak. Umjesto da skoči izravno na odgovor, model razlaže problem i prolazi kroz svaki dio u detalje. Ovo poboljšava točnost kod zadataka matematike, logike i višestupanjskog rezoniranja.
-
+
-*Rezoniranje korak po korak — razbijanje složenih problema u eksplicitne logičke korake*
+*Razmišljanje korak po korak — razbijanje složenih problema u jasne logičke korake*
```java
String prompt = """
@@ -130,18 +130,18 @@ String prompt = """
Let's solve this step-by-step:
""";
String response = model.chat(prompt);
-// Model prikazuje: 15 - 8 = 7, zatim 7 + 12 = 19 jabuka
+// Model pokazuje: 15 - 8 = 7, zatim 7 + 12 = 19 jabuka
```
-**Kada koristiti:** Matematički problemi, logičke zagonetke, debugiranje ili bilo koji zadatak gdje pokazivanje procesa rezoniranja povećava točnost i povjerenje.
+**Kada koristiti:** Matematiku, logičke zagonetke, otklanjanje pogrešaka ili bilo koji zadatak gdje prikaz procesa razmišljanja poboljšava točnost i povjerenje.
-### Promptiranje temeljeno na ulozi
+### Upiti temeljeni na ulozi
-Postavite personu ili ulogu AI-u prije nego što postavite pitanje. Ovo pruža kontekst koji oblikuje ton, dubinu i fokus odgovora. "Softverski arhitekt" daje drukčiji savjet od "mlađeg developera" ili "auditor sigurnosti".
+Postavite AI-u personu ili ulogu prije nego postavite pitanje. To osigurava kontekst koji oblikuje ton, dubinu i fokus odgovora. "Softverski arhitekt" daje drugačije savjete od "mlađeg programera" ili "sigurnosnog revizora".
-
+
-*Postavljanje konteksta i persone — isto pitanje daje različite odgovore ovisno o dodijeljenoj ulozi*
+*Postavljanje konteksta i persone — isto pitanje dobiva različite odgovore ovisno o dodijeljenoj ulozi*
```java
String prompt = """
@@ -157,15 +157,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Kada koristiti:** Pregledi koda, podučavanje, analiza specifična za domenu ili kada trebate odgovore prilagođene određenoj razini stručnosti ili perspektivi.
+**Kada koristiti:** Pregled koda, podučavanje, domen-specifične analize ili kada trebate odgovore prilagođene određenoj razini stručnosti ili perspektivi.
-### Predlošci prompta
+### Predlošci upita
-Napravite višekratno upotrebljive promtove s varijabilnim mjestima za unos. Umjesto da svaki put pišete novi prompt, definirajte predložak jednom i ispunjavajte različite vrijednosti. LangChain4j klasa `PromptTemplate` to olakšava s `{{variable}}` sintaksom.
+Kreirajte ponovno upotrebljive upite s varijabilnim mjestima za unos. Umjesto da svaki put pišete novi upit, definirajte predložak jednom i unutar njega ispunite različite vrijednosti. LangChain4j klasa `PromptTemplate` to olakšava s `{{variable}}` sintaksom.
-
+
-*Višekratno upotrebljivi promptovi s varijabilnim mjestima — jedan predložak, mnoge namjene*
+*Ponovno upotrebljivi upiti s varijabilnim mjestima — jedan predložak, mnogo upotreba*
```java
PromptTemplate template = PromptTemplate.from(
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**Kada koristiti:** Ponavljani upiti s različitim ulazima, paketna obrada, izgradnja višekratno upotrebljivih AI tijekova rada ili bilo koji scenarij gdje struktura prompta ostaje ista, ali se podaci mijenjaju.
+**Kada koristiti:** Ponavljani upiti s različitim unosima, obrada u grupi, izgradnja ponovno upotrebljivih AI tijekova rada ili bilo koji scenarij gdje struktura upita ostaje ista, ali se podaci mijenjaju.
---
-Ovih pet temelja daje vam solidan alat za većinu zadataka promptiranja. Ostatak ovog modula gradi na njima s **osam naprednih obrazaca** koji iskorištavaju GPT-5.2-ove sposobnosti kontrole rezoniranja, samoocjenjivanja i strukturiranog izlaza.
+Ovih pet osnovnih tehnika pružaju vam solidan alat za većinu zadataka izrade upita. Ostatak ovog modula nadograđuje na njih sa **osam naprednih obrazaca** koji koriste kontrolu razmišljanja GPT-5.2, samoprocjenu i mogućnosti strukturiranog izlaza.
## Napredni obrasci
-S osnovama pokrivenima, prijeđimo na osam naprednih obrazaca koji ovaj modul čine jedinstvenim. Nisu svi problemi jednaki. Neka pitanja zahtijevaju brze odgovore, druga duboko razmišljanje. Neka zahtijevaju vidljivo rezoniranje, a druga samo rezultate. Svaki obrazac niže je optimiziran za drugačiji scenarij — i GPT-5.2 kontrola rezoniranja čini razlike još izraženijima.
+Nakon što smo pokrili osnove, prelazimo na osam naprednih obrazaca koji ovaj modul čine jedinstvenim. Nisu svi problemi isti. Neka pitanja zahtijevaju brze odgovore, druga duboko razmišljanje. Neki zahtijevaju vidljivo razmišljanje, drugi samo rezultate. Svaki od niže navedenih obrazaca optimiziran je za drugačiji scenarij — a kontrola razmišljanja GPT-5.2 te razlike čini još izraženijima.
-
+
-*Pregled osam obrazaca inženjeringa prompta i njihovih primjena*
+*Pregled osam obrazaca izrade upita i njihovih slučajeva upotrebe*
-GPT-5.2 dodaje još jednu dimenziju ovim obrascima: *kontrolu rezoniranja*. Klizač ispod pokazuje kako možete prilagoditi količinu razmišljanja modela — od brzih, izravnih do dubokih, temeljitih analiza.
+GPT-5.2 dodaje novu dimenziju ovim obrascima: *kontrolu razmišljanja*. Kliznik ispod pokazuje kako možete prilagoditi trud razmišljanja modela — od brzih, izravnih odgovora do duboke, temeljite analize.
-
+
-*GPT-5.2 kontrola rezoniranja vam omogućuje da odredite koliko razmišljanja model treba napraviti — od brzih izravnih odgovora do dubokih istraživanja*
+*Kontrola razmišljanja GPT-5.2 omogućuje preciziranje koliko razmišljanja model treba izvesti — od brzih izravnih odgovora do dubokog istraživanja*
-**Niska žustrina (brzo i fokusirano)** - Za jednostavna pitanja gdje želite brze, izravne odgovore. Model minimalno rezonira - maksimalno 2 koraka. Koristite za izračune, pretrage ili jednostavna pitanja.
+**Niska volja (Brzo i fokusirano)** - Za jednostavna pitanja gdje želite brze, izravne odgovore. Model radi minimalno razmišljanja – najviše 2 koraka. Koristite ovo za izračune, pretraživanja ili jednostavna pitanja.
```java
String prompt = """
@@ -219,12 +219,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> 💡 **Istražite s GitHub Copilotom:** Otvorite [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) i pitajte:
-> - "Koja je razlika između obrazaca promptiranja niske i visoke žustrine?"
-> - "Kako XML oznake u promptovima pomažu strukturirati AI odgovor?"
-> - "Kada bih trebao koristiti obrasce samorefleksije, a kada direktne upute?"
+> 💡 **Istražite s GitHub Copilot:** Otvorite [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) i postavite pitanja:
+> - "Koja je razlika između obrazaca niske i visoke volje u upitima?"
+> - "Kako XML oznake u upitima pomažu u strukturiranju AI odgovora?"
+> - "Kada koristiti obrasce sa samoprocjenom umjesto izravnih uputa?"
-**Visoka žustrina (duboko i temeljito)** - Za složene probleme gdje želite podrobnu analizu. Model temeljito razmatra i prikazuje detaljno rezoniranje. Koristite za dizajn sustava, arhitektonske odluke ili kompleksna istraživanja.
+**Visoka volja (Duboko i temeljito)** - Za složene probleme gdje želite detaljnu analizu. Model dubinski istražuje i pokazuje detaljno razmišljanje. Koristite za dizajn sustava, arhitektonske odluke ili složena istraživanja.
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**Izvršavanje zadatka (napredak korak-po-korak)** - Za tijekove rada s više koraka. Model daje početni plan, pripovijeda svaki korak dok ih izvršava, zatim daje sažetak. Koristite za migracije, implementacije ili bilo koji višekoračni proces.
+**Izvršenje zadatka (Napredak korak po korak)** - Za višestepene tijekove rada. Model daje unaprijed plan, opisuje svaki korak dok radi i na kraju daje sažetak. Koristite za migracije, implementacije ili bilo koji višestepeni proces.
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Lanac misli promptiranje eksplicitno traži od modela da prikaže proces rezoniranja, što poboljšava preciznost za složene zadatke. Razbijanje korak-po-korak pomaže ljudima i AI-u da razumiju logiku.
+Lanac razmišljanja (Chain-of-Thought) eksplicitno traži model da pokaže proces razmišljanja, poboljšavajući točnost za složene zadatke. Razlaganje korak po korak pomaže i ljudima i AI-u razumjeti logiku.
-> **🤖 Isprobajte s [GitHub Copilot](https://github.com/features/copilot) chatom:** Pitajte o ovom obrascu:
-> - "Kako bih prilagodio obrazac izvršavanja zadatka za dugotrajne operacije?"
-> - "Koje su najbolje prakse za strukturiranje prologa alata u produkcijskim aplikacijama?"
-> - "Kako mogu snimiti i prikazati međukorake napretka u korisničkom sučelju?"
+> **🤖 Isprobajte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Pitajte o ovom obrascu:
+> - "Kako bih prilagodio obrazac izvršenja zadatka za dugotrajne operacije?"
+> - "Koje su najbolje prakse za strukturiranje predgovora alata u produkcijskim aplikacijama?"
+> - "Kako mogu uhvatiti i prikazati međurezultate napretka u korisničkom sučelju?"
Dijagram ispod ilustrira ovaj tijek rada Plan → Izvrši → Sažmi.
-
+
*Tijek rada Plan → Izvrši → Sažmi za višestepene zadatke*
-**Kod za samorefleksiju** - Za generiranje koda kvalitete pogodnog za produkciju. Model generira kod koji slijedi produkcijske standarde s odgovarajućim rukovanjem greškama. Koristite kada gradite nove značajke ili servise.
+**Kod s vlastitim razmišljanjem** - Za generiranje koda koji zadovoljava produkcijske standarde. Model generira kod slijedeći produkcijske standarde s odgovarajućim upravljanjem greškama. Koristite kada razvijate nove značajke ili usluge.
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Dijagram ispod prikazuje ovaj iterativni ciklus poboljšanja — generiraj, ocijeni, identificiraj slabosti, usavrši dok kod ne zadovolji produkcijske standarde.
+Dijagram ispod prikazuje ovu iterativnu petlju poboljšanja — generiraj, procijeni, identificiraj slabosti i usavrši dok kod ne zadovolji standarde.
-
+
-*Iterativni ciklus poboljšanja - generiraj, ocijeni, prepoznaj probleme, poboljšaj, ponovi*
+*Iterativna petlja poboljšanja - generiraj, procijeni, identificiraj probleme, poboljšaj, ponavljaj*
-**Strukturirana analiza** - Za dosljednu evaluaciju. Model pregledava kod koristeći fiksni okvir (ispravnost, prakse, izvedba, sigurnost, održivost). Koristite za preglede koda ili ocjenu kvalitete.
+**Strukturirana analiza** - Za konzistentnu evaluaciju. Model pregledava kod koristeći fiksni okvir (ispravnost, prakse, performanse, sigurnost, održivost). Koristite za preglede koda ili procjene kvalitete.
```java
String prompt = """
@@ -354,18 +354,18 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> **🤖 Isprobajte s [GitHub Copilot](https://github.com/features/copilot) chatom:** Pitajte o strukturiranoj analizi:
-> - "Kako mogu prilagoditi analitički okvir za različite vrste pregleda koda?"
-> - "Koji je najbolji način za parsiranje i programsku obradu strukturiranog izlaza?"
-> - "Kako osigurati dosljedne razine težine kroz različite revizijske sesije?"
+> **🤖 Isprobajte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Pitajte o strukturiranoj analizi:
+> - "Kako mogu prilagoditi okvir analize za različite vrste pregleda koda?"
+> - "Koji je najbolji način za parsiranje i programatsko postupanje sa strukturiranim izlazom?"
+> - "Kako osigurati dosljedne nivoe ozbiljnosti kroz različite sesije pregleda?"
-Dijagram u nastavku prikazuje kako ovaj strukturirani okvir organizira pregled koda u dosljedne kategorije s razinama težine.
+Sljedeći dijagram prikazuje kako ovaj strukturirani okvir organizira pregled koda u dosljedne kategorije s nivoima ozbiljnosti.
-
+
-*Okvir za dosljedne preglede koda s razinama težine*
+*Okvir za dosljedne preglede koda s nivoima ozbiljnosti*
-**Višekratni razgovor** - Za razgovore kojima treba kontekst. Model pamti prethodne poruke i gradi na njima. Koristite za interaktivne pomoći ili složena pitanja i odgovore.
+**Višekratni razgovor** - Za rasprave kojima treba kontekst. Model pamti prethodne poruke i gradi na njima. Koristite za interaktivne sesije pomoći ili složena pitanja i odgovore.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-Dijagram ispod vizualizira kako se kontekst razgovora nakuplja s svakim okretom i kako se to odnosi na ograničenje tokena modela.
+Dijagram ispod vizualizira kako se kontekst razgovora akumulira s svakim krugom i kako se odnosi prema ograničenju tokena modela.
-
+
-*Kako se kontekst razgovora nakuplja kroz više okreta dok ne dosegnu ograničenje tokena*
-**Korak-po-korak razmišljanje** - Za probleme koji zahtijevaju vidljivu logiku. Model prikazuje eksplicitno razmišljanje za svaki korak. Koristite ovo za matematičke zadatke, logičke zagonetke ili kada trebate razumjeti proces razmišljanja.
+*Kako se kontekst razgovora skuplja tijekom više krugova dok ne dostigne limit tokena*
+
+**Razmišljanje korak po korak** - Za probleme koji zahtijevaju vidljivu logiku. Model prikazuje eksplicitno razmišljanje za svaki korak. Koristite za matematičke probleme, logičke zagonetke ili kad trebate razumjeti proces razmišljanja.
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Dijagram u nastavku ilustrira kako model razlaže probleme u eksplicitne, numerirane logičke korake.
+Dijagram ispod ilustrira kako model razbija probleme u eksplicitne, numerirane logičke korake.
-
*Razlaganje problema u eksplicitne logičke korake*
-**Ograničeni izlaz** - Za odgovore sa specifičnim zahtjevima formata. Model strogo slijedi pravila formata i duljine. Koristite ovo za sažetke ili kada trebate preciznu strukturu izlaza.
+**Ograničeni izlaz** - Za odgovore sa zahtjevima za specifični format. Model strogo prati pravila formata i duljine. Koristite ovo za sažetke ili kad vam treba precizna struktura izlaza.
```java
String prompt = """
@@ -420,51 +420,51 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Sljedeći dijagram prikazuje kako ograničenja usmjeravaju model da proizvede izlaz koji strogo poštuje vaše zahtjeve za format i duljinu.
+Sljedeća dijagrama pokazuje kako ograničenja usmjeravaju model da proizvede izlaz koji strogo poštuje vaše zahtjeve za formatom i duljinom.
-
+
-*Provjera specifičnih zahtjeva za format, duljinu i strukturu*
+*Nametanje specifičnih zahtjeva za format, duljinu i strukturu*
-## Pokrenite aplikaciju
+## Pokreni aplikaciju
-**Provjerite implementaciju:**
+**Provjeri implementaciju:**
-Provjerite da `.env` datoteka postoji u korijenskom direktoriju s Azure vjerodajnicama (kreirano tijekom Modula 01). Pokrenite ovo iz direktorija modula (`02-prompt-engineering/`):
+Provjeri da datoteka `.env` postoji u korijenskom direktoriju s Azure vjerodajnicama (stvorena tijekom Modula 01). Pokreni ovo iz direktorija modula (`02-prompt-engineering/`):
**Bash:**
```bash
-cat ../.env # Trebao bi prikazati AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+cat ../.env # Trebalo bi prikazati AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**PowerShell:**
```powershell
-Get-Content ..\.env # Trebao bi prikazati AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+Get-Content ..\.env # Trebalo bi prikazati AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-**Pokrenite aplikaciju:**
+**Pokreni aplikaciju:**
-> **Napomena:** Ako ste već pokrenuli sve aplikacije koristeći `./start-all.sh` iz korijenskog direktorija (kako je opisano u Modulu 01), ovaj modul već radi na portu 8083. Možete preskočiti naredbe za start i direktno otvoriti http://localhost:8083.
+> **Napomena:** Ako ste već pokrenuli sve aplikacije koristeći `./start-all.sh` iz korijenskog direktorija (kako je opisano u Modulu 01), ovaj modul već radi na portu 8083. Možete preskočiti naredbe za pokretanje ispod i otići direktno na http://localhost:8083.
-**Opcija 1: Koristeći Spring Boot Dashboard (Preporučeno za korisnike VS Code-a)**
+**Opcija 1: Korištenje Spring Boot nadzorne ploče (Preporučeno za VS Code korisnike)**
-Dev container uključuje Spring Boot Dashboard ekstenziju, koja pruža vizualno sučelje za upravljanje svim Spring Boot aplikacijama. Možete je pronaći na Activity Baru na lijevoj strani VS Code-a (tražite ikonu Spring Boota).
+Dev container uključuje ekstenziju Spring Boot Dashboard, koja pruža vizualno sučelje za upravljanje svim Spring Boot aplikacijama. Možete je pronaći na traci aktivnosti na lijevoj strani VS Codea (potražite ikonu Spring Boot).
-Iz Spring Boot Dashboarda možete:
-- Vidjeti sve dostupne Spring Boot aplikacije u workspaceu
-- Pokrenuti/zaustaviti aplikacije jednim klikom
-- Pratiti logove aplikacija u stvarnom vremenu
-- Nadgledati status aplikacije
+Iz Spring Boot nadzorne ploče možete:
+- Vidjeti sve dostupne Spring Boot aplikacije u radnom prostoru
+- Pokretati/zaustavljati aplikacije jednim klikom
+- Pratiti dnevnike aplikacija u stvarnom vremenu
+- Nadzirati status aplikacija
-Jednostavno kliknite na gumb za pokretanje pokraj "prompt-engineering" da pokrenete ovaj modul, ili pokrenite sve module odjednom.
+Jednostavno kliknite gumb za pokretanje pokraj "prompt-engineering" da biste pokrenuli ovaj modul ili pokrenite sve module odjednom.
-
+
-*Spring Boot Dashboard u VS Code — pokrenite, zaustavite i pratite sve module s jednog mjesta*
+*Spring Boot nadzorna ploča u VS Code — pokrenite, zaustavite i nadzirite sve module s jednog mjesta*
-**Opcija 2: Koristeći shell skripte**
+**Opcija 2: Korištenje shell skripti**
-Pokrenite sve web aplikacije (moduli 01-04):
+Pokreni sve web aplikacije (moduli 01-04):
**Bash:**
```bash
@@ -478,7 +478,7 @@ cd .. # Iz korijenskog direktorija
.\start-all.ps1
```
-Ili pokrenite samo ovaj modul:
+Ili pokreni samo ovaj modul:
**Bash:**
```bash
@@ -492,7 +492,7 @@ cd 02-prompt-engineering
.\start.ps1
```
-Obje skripte automatski učitavaju varijable okoline iz `.env` datoteke u korijenu i izgradit će JAR-ove ako ne postoje.
+Obje skripte automatski učitavaju varijable okoline iz korijenske `.env` datoteke i izgradit će JAR datoteke ako ne postoje.
> **Napomena:** Ako želite ručno izgraditi sve module prije pokretanja:
>
@@ -508,7 +508,7 @@ Obje skripte automatski učitavaju varijable okoline iz `.env` datoteke u korije
> mvn clean package -DskipTests
> ```
-Otvorite http://localhost:8083 u vašem pregledniku.
+Otvori http://localhost:8083 u svom pregledniku.
**Zaustavljanje:**
@@ -528,73 +528,73 @@ cd ..; .\stop-all.ps1 # Svi moduli
## Snimke zaslona aplikacije
-Ovdje je glavno sučelje modula prompt engineering, gdje možete isprobavati svih osam uzoraka jedan pored drugoga.
+Ovo je glavno sučelje modula za prompt engineering, gdje možete eksperimentirati sa svih osam uzoraka jedan pored drugog.
-
+
-*Glavni dashboard koji prikazuje svih 8 uzoraka prompt engineeringa s njihovim karakteristikama i slučajevima upotrebe*
+*Glavna nadzorna ploča prikazuje svih 8 uzoraka prompt engineeringa s njihovim karakteristikama i slučajevima upotrebe*
## Istraživanje uzoraka
-Web sučelje vam omogućuje isprobavanje različitih strategija promptanja. Svaki uzorak rješava različite probleme - isprobajte ih da vidite kada koji pristup najbolje funkcionira.
+Web sučelje omogućava eksperimentiranje s različitim strategijama promptanja. Svaki uzorak rješava različite probleme – isprobajte ih da vidite kad koji pristup najbolje funkcionira.
-> **Napomena: Streaming vs. Non-Streaming** — Svaka stranica uzorka nudi dva gumba: **🔴 Stream Response (Live)** i **Ne-streaming** opciju. Streaming koristi Server-Sent Events (SSE) za prikaz tokena u stvarnom vremenu dok model generira odgovor, tako da odmah vidite napredak. Ne-streaming opcija čeka cijeli odgovor prije prikaza. Za promptove koji pokreću duboko razmišljanje (npr. High Eagerness, Self-Reflecting Code), ne-streaming poziv može trajati vrlo dugo – ponekad minute – bez vidljive povratne informacije. **Koristite streaming pri eksperimentiranju s kompleksnim promptovima** kako biste vidjeli rad modela i izbjegli dojam da je zahtjev istekao.
+> **Napomena: Streaming vs Nesreaming** — Svaka stranica uzorka nudi dva gumba: **🔴 Stream Response (uživo)** i opciju **Nesreaming**. Streaming koristi Server-Sent Events (SSE) za prikaz tokena u stvarnom vremenu dok model generira, tako da odmah vidite tijek. Nesreaming opcija čeka cijeli odgovor prije prikaza. Za upite koji zahtijevaju duboko razmišljanje (npr. High Eagerness, Self-Reflecting Code), nesreaming poziv može trajati dugo — ponekad minute — bez vidljivog povratnog signala. **Koristite streaming pri eksperimentiranju s kompleksnim upitima** kako biste vidjeli kako model radi i izbjegli dojam da je zahtjev istekao.
>
-> **Napomena: Zahtjev za preglednikom** — Streaming funkcija koristi Fetch Streams API (`response.body.getReader()`) koji zahtijeva pravi preglednik (Chrome, Edge, Firefox, Safari). Ne radi u VS Code ugrađenom Simple Browseru, jer njegov webview ne podržava ReadableStream API. Ako koristite Simple Browser, gumbi za ne-streaming će raditi normalno — samo streaming gumbi su pogođeni. Otvorite `http://localhost:8083` u vanjskom pregledniku za potpunu funkcionalnost.
+> **Napomena: Zahtjevi preglednika** — Streaming značajka koristi Fetch Streams API (`response.body.getReader()`) koji zahtijeva punu podršku preglednika (Chrome, Edge, Firefox, Safari). NE radi u VS Code ugrađenom Simple Browseru jer njegov webview ne podržava ReadableStream API. Ako koristite Simple Browser, nesreaming gumbi će raditi normalno — zahvaćeni su samo streaming gumbi. Otvorite `http://localhost:8083` u vanjskom pregledniku za punu funkcionalnost.
-### Nisko vs. visoko intenzivno razmišljanje (Low vs High Eagerness)
+### Niska vs visoka željnost (Eagerness)
-Postavite jednostavno pitanje poput "Koliko je 15% od 200?" koristeći Low Eagerness. Dobit ćete trenutni, izravan odgovor. Sada postavite nešto složenije poput "Dizajniraj strategiju cachinga za API s velikim prometom" koristeći High Eagerness. Kliknite **🔴 Stream Response (Live)** i promatrajte detaljno razmišljanje modela, token po token. Isti model, ista struktura pitanja – ali prompt mu govori koliko duboko da razmišlja.
+Postavite jednostavno pitanje poput "Koliko je 15% od 200?" koristeći Nisku željnost. Dobit ćete trenutni, direktan odgovor. Sada postavite nešto složenije poput "Dizajniraj strategiju keširanja za API s velikim prometom" koristeći Visoku željnost. Kliknite **🔴 Stream Response (uživo)** i gledajte kako se pojavljiva detaljna analiza modela token po token. Isti model, ista struktura pitanja – ali prompt određuje koliko razmišljanja treba biti.
-### Izvršavanje zadataka (Tool Preambles)
+### Izvršenje zadatka (Unaprijed definirani alati)
-Višekoraci tijekovi rada imaju koristi od unaprijed planiranja i praćenja napretka. Model izlaže što će napraviti, opisuje svaki korak, zatim sažima rezultate.
+Višestepeni tijek rada ima koristi od prethodnog planiranja i praćenja napretka. Model navodi što će raditi, objašnjava svaki korak, zatim sažima rezultate.
### Samoreflektirajući kod
-Isprobajte "Napravite servis za validaciju email adresa". Umjesto da samo generira kod i stane, model generira, evaluira prema kriterijima kvalitete, identificira slabosti i poboljšava. Vidjet ćete iteracije dok kod ne ispuni proizvodne standarde.
+Isprobajte "Napravite servis za validaciju e-pošte". Umjesto da samo generira kod i stane, model generira, evaluira prema kriterijima kvalitete, identificira slabosti i poboljšava. Vidjet ćete kako ponavlja dok kod ne zadovolji proizvodne standarde.
### Strukturirana analiza
-Pregledi koda zahtijevaju konzistentne okvire evaluacije. Model analizira kod koristeći fiksne kategorije (ispravnost, prakse, performanse, sigurnost) s razinama težine.
+Pregledi koda zahtijevaju dosljedne okvire evaluacije. Model analizira kod koristeći fiksne kategorije (ispravnost, praksa, izvedba, sigurnost) s razinama ozbiljnosti.
-### Višekratna konverzacija (Multi-Turn Chat)
+### Višekratni razgovor
-Postavite pitanje "Što je Spring Boot?" zatim odmah nastavite s "Pokaži mi primjer". Model pamti prvo pitanje i daje vam specifičan Spring Boot primjer. Bez memorije, drugo pitanje bilo bi previše neodređeno.
+Pitajte "Što je Spring Boot?" zatim odmah postavite "Pokaži mi primjer". Model pamti prvo pitanje i daje primjer specifičan za Spring Boot. Bez memorije, drugo pitanje bi bilo previše neodređeno.
-### Korak-po-korak razmišljanje
+### Razmišljanje korak-po-korak
-Odaberite matematički problem i isprobajte oba načina: Step-by-Step Reasoning i Low Eagerness. Low eagerness odmah daje odgovor – brzo, ali nejasno. Korak-po-korak prikazuje svaki izračun i odluku.
+Odaberite matematički problem i isprobajte ga s Razmišljanjem korak-po-korak i Niskom željnošću. Niska željnost samo daje odgovor – brzo ali nejasno. Razmišljanje korak-po-korak pokazuje svaki izračun i odluku.
### Ograničeni izlaz
-Kad trebate specifične formate ili broj riječi, ovaj uzorak strogo provodi te zahtjeve. Isprobajte generiranje sažetka s točno 100 riječi u obliku nabrajanja.
+Kad vam treba specifičan format ili točan broj riječi, ovaj uzorak nameće strogo pridržavanje. Pokušajte generirati sažetak s točno 100 riječi u obliku popisa.
-## Što stvarno učite
+## Što zapravo učite
-**Uloženi napor u razmišljanje mijenja sve**
+**Napori u razmišljanju mijenjaju sve**
-GPT-5.2 vam dopušta kontrolu računalnog napora kroz vaše promptove. Niska razina znači brze odgovore s minimalnim istraživanjem. Visoka razina znači da model uzima vremena za duboko razmišljanje. Učite kako prilagoditi trud složenosti zadatka – ne trošite vrijeme na jednostavna pitanja, ali nemojte ni žuriti s kompleksnim odlukama.
+GPT-5.2 vam omogućuje kontrolu računalnog napora kroz vaše upite. Nizak napor znači brze odgovore s minimalnim istraživanjem. Visok napor znači da model uzima vrijeme za duboko razmišljanje. Učite uskladiti napor s kompleksnošću zadatka – ne trošite vrijeme na jednostavna pitanja, ali nemojte ni požurivati složene odluke.
-**Struktura vodi ponašanje**
+**Struktura usmjerava ponašanje**
-Primjećujete XML oznake u promptovima? One nisu ukrasne. Modeli pouzdanije prate strukturirane upute nego slobodni tekst. Kad trebate višekorake procese ili složenu logiku, struktura pomaže modelu pratiti gdje je i što slijedi. Dijagram ispod razlaže dobro strukturiran prompt pokazujući kako oznake poput ``, ``, ``, ``, i `` organiziraju vaše upute u jasne sekcije.
+Primijetite XML oznake u promptima? Nisu samo ukras. Modeli pouzdanije slijede strukturirane upute nego slobodan tekst. Kad trebate višestepene procese ili složenu logiku, struktura pomaže modelu pratiti gdje je i što slijedi. Dijagram u nastavku razlaže dobro strukturirani prompt, pokazujući kako oznake poput ``, ``, ``, `` i `` organiziraju vaše upute u jasne sekcije.
-
+
-*Anatomija dobro strukturiranog prompta s jasnim sekcijama i XML-stil organizacijom*
+*Anatomija dobro strukturiranog prompta s jasnim sekcijama i organizacijom u XML stilu*
**Kvaliteta kroz samo-evaluaciju**
-Uzorke samoreflektirajućeg rada obilježava eksplicitno definiranje kriterija kvalitete. Umjesto da se nada da će model "ispravno" odraditi, vi mu točno kažete što znači "ispravno": točna logika, obrada pogrešaka, performanse, sigurnost. Model tada može evaluirati vlastiti izlaz i poboljšati ga. To proces generiranja koda pretvara iz lutrije u kontrolirani proces.
+Samoreflektirajući uzorci rade tako da eksplicitno definiraju kriterije kvalitete. Umjesto da se nadaju da će model "ispravno napraviti", kažete mu točno što "ispravno" znači: ispravna logika, rukovanje greškama, izvedba, sigurnost. Model tada može vrednovati vlastiti izlaz i poboljšati ga. Time se generiranje koda pretvara iz lutrije u proces.
**Kontekst je ograničen**
-Višekratne konverzacije funkcioniraju tako da uz svaki zahtjev uključuju povijest poruka. Ali postoji ograničenje - svaki model ima maksimalan broj tokena. Kako se konverzacije povećavaju, potrebno je koristiti strategije da se relevantan kontekst zadrži bez prekoračenja limita. Ovaj modul pokazuje kako memorija radi; kasnije ćete naučiti kada sažimati, zaboraviti i ponovno dohvatiti.
+Višekratni razgovori rade tako da uključuju povijest poruka u svaki zahtjev. No postoji granica – svaki model ima maksimalni broj tokena. Kako razgovori rastu, trebate strategije za održavanje relevantnog konteksta bez prekoračenja limita. Ovaj modul pokazuje kako radi memorija; kasnije ćete naučiti kad sažimati, kad zaboraviti i kad dohvatiti.
## Sljedeći koraci
-**Sljedeći modul:** [03-rag - RAG (Retrieval-Augmented Generation)](../03-rag/README.md)
+**Sljedeći modul:** [03-rag - RAG (generiranje potpomognuto dohvaćanjem)](../03-rag/README.md)
---
@@ -603,6 +603,6 @@ Višekratne konverzacije funkcioniraju tako da uz svaki zahtjev uključuju povij
---
-**Odricanje od odgovornosti**:
-Ovaj je dokument preveden pomoću AI usluge za prevođenje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo postići točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni ljudski prijevod. Ne odgovaramo za bilo kakve nesporazume ili pogrešna tumačenja koja proizlaze iz korištenja ovog prijevoda.
+**Napomena**:
+Ovaj dokument je preveden korištenjem AI prevoditeljskog servisa [Co-op Translator](https://github.com/Azure/co-op-translator). Iako težimo točnosti, imajte na umu da automatski prijevodi mogu sadržavati greške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za važne informacije preporuča se profesionalni ljudski prijevod. Nismo odgovorni za bilo kakva nesporazumevanja ili pogrešne interpretacije koje proizlaze iz korištenja ovog prijevoda.
\ No newline at end of file
diff --git a/translations/hr/03-rag/README.md b/translations/hr/03-rag/README.md
index 1078e422b..ffb694c66 100644
--- a/translations/hr/03-rag/README.md
+++ b/translations/hr/03-rag/README.md
@@ -1,144 +1,143 @@
-# Modul 03: RAG (Generiranje potpomognuto pretraživanjem)
+# Modul 03: RAG (Generacija potpomognuta dohvaćanjem)
## Sadržaj
-- [Video vodič](../../../03-rag)
-- [Što ćete naučiti](../../../03-rag)
-- [Preduvjeti](../../../03-rag)
-- [Razumijevanje RAG-a](../../../03-rag)
- - [Koji RAG pristup koristi ovaj vodič?](../../../03-rag)
-- [Kako to radi](../../../03-rag)
- - [Obrada dokumenata](../../../03-rag)
- - [Stvaranje embeddinga](../../../03-rag)
- - [Semantičko pretraživanje](../../../03-rag)
- - [Generiranje odgovora](../../../03-rag)
-- [Pokrenite aplikaciju](../../../03-rag)
-- [Korištenje aplikacije](../../../03-rag)
- - [Učitajte dokument](../../../03-rag)
- - [Postavite pitanja](../../../03-rag)
- - [Provjerite izvore referenci](../../../03-rag)
- - [Eksperimentirajte s pitanjima](../../../03-rag)
-- [Ključni pojmovi](../../../03-rag)
- - [Strategija dijeljenja na dijelove](../../../03-rag)
- - [Ocjene sličnosti](../../../03-rag)
- - [Pohrana u memoriji](../../../03-rag)
- - [Upravljanje kontekstnim prozorom](../../../03-rag)
-- [Kada je RAG važan](../../../03-rag)
-- [Sljedeći koraci](../../../03-rag)
+- [Video vodič](#video-vodič)
+- [Što ćete naučiti](#što-ćete-naučiti)
+- [Preduvjeti](#preduvjeti)
+- [Razumijevanje RAG-a](#razumijevanje-rag-a)
+ - [Koji RAG pristup koristi ovaj vodič?](#koji-rag-pristup-koristi-ovaj-vodič)
+- [Kako to radi](#kako-to-radi)
+ - [Obrada dokumenata](#obrada-dokumenata)
+ - [Stvaranje ugradnji (embeddinga)](#stvaranje-ugradnji-embeddinga)
+ - [Semantičko pretraživanje](#semantičko-pretraživanje)
+ - [Generiranje odgovora](#generiranje-odgovora)
+- [Pokretanje aplikacije](#pokretanje-aplikacije)
+- [Korištenje aplikacije](#korištenje-aplikacije)
+ - [Učitajte dokument](#prenesite-dokument)
+ - [Postavljajte pitanja](#postavljajte-pitanja)
+ - [Provjerite izvore](#provjerite-izvore)
+ - [Eksperimentirajte s pitanjima](#eksperimentirajte-s-pitanjima)
+- [Ključni pojmovi](#ključni-pojmovi)
+ - [Strategija dijeljenja na dijelove](#strategija-dijeljenja-chunkanja)
+ - [Ocjene sličnosti](#rezultati-sličnosti)
+ - [Spremište u memoriji](#pohrana-u-memoriji)
+ - [Upravljanje kontekstom](#upravljanje-kontekstnim-prozorom)
+- [Kada je RAG važan](#kada-je-rag-važan)
+- [Sljedeći koraci](#sljedeći-koraci)
## Video vodič
Pogledajte ovu uživo sesiju koja objašnjava kako započeti s ovim modulom:
-
+
## Što ćete naučiti
-U prethodnim modulima naučili ste kako voditi razgovore s AI-jem i kako učinkovitije strukturirati svoje upite. Ali postoji temeljno ograničenje: jezični modeli znaju samo ono što su naučili tijekom treninga. Oni ne mogu odgovoriti na pitanja o pravilnicima vaše tvrtke, vašoj projektnoj dokumentaciji ili bilo kojim informacijama na kojima nisu bili trenirani.
+U prethodnim modulima naučili ste kako voditi razgovore s AI-jem i kako učinkovito strukturirati upite (prompte). No postoji temeljno ograničenje: jezični modeli znaju samo ono što su naučili tijekom treniranja. Ne mogu odgovoriti na pitanja o pravilnicima vaše tvrtke, dokumentaciji vašeg projekta ili bilo kojim informacijama na kojima nisu bili trenirani.
-RAG (Generiranje potpomognuto pretraživanjem) rješava ovaj problem. Umjesto da pokušavate modelu "podučiti" vaše informacije (što je skupo i nepraktično), dajete mu mogućnost da pretražuje vaše dokumente. Kad netko postavi pitanje, sustav pronalazi relevantne informacije i uključuje ih u upit. Model tada odgovara na temelju tog dohvaćenog konteksta.
+RAG (Generacija potpomognuta dohvaćanjem) rješava ovaj problem. Umjesto da pokušavate podučiti model vašim informacijama (što je skupo i nepraktično), dajete mu mogućnost da pretražuje vaše dokumente. Kad netko postavi pitanje, sustav pronalazi relevantne informacije i uključuje ih u prompt. Model zatim daje odgovor temeljen na tom dohvaćenom kontekstu.
Zamislite RAG kao davanje modelu referentne knjižnice. Kad postavite pitanje, sustav:
-1. **Korisnički upit** - Vi postavite pitanje
-2. **Embedding** - Pretvara vaše pitanje u vektor
-3. **Pretraživanje vektora** - Pronalazi slične dijelove dokumenta
-4. **Sastavljanje konteksta** - Dodaje relevantne dijelove u upit
-5. **Odgovor** - LLM generira odgovor temeljen na kontekstu
+1. **Korisnički upit** - Postavite pitanje
+2. **Ugradnja (embedding)** - Pretvara vaše pitanje u vektor
+3. **Vektorska pretraga** - Pronalazi slične dijelove dokumenata
+4. **Sastavljanje konteksta** - Dodaje relevantne dijelove u prompt
+5. **Odgovor** - LLM generira odgovor temeljen na kontekstu
-Ovo utemeljuje odgovore modela u vašim stvarnim podacima, umjesto da se oslanja samo na znanje iz treninga ili smišlja odgovore.
+Ovo utemeljuje odgovore modela na vašim stvarnim podacima, a ne na njegovom znanju iz treninga ili izmišljenim odgovorima.
## Preduvjeti
-- Završeni [Modul 00 - Brzi početak](../00-quick-start/README.md) (za Easy RAG primjer spomenut kasnije u ovom modulu)
-- Završeni [Modul 01 - Uvod](../01-introduction/README.md) (Azure OpenAI resursi su postavljeni, uključujući embedding model `text-embedding-3-small`)
-- `.env` datoteka u glavnom direktoriju s Azure akreditivima (stvorena naredbom `azd up` u Modulu 01)
+- Završeni [Modul 01 - Uvod](../01-introduction/README.md) (Azure OpenAI resursi postavljeni, uključujući model ugradnje `text-embedding-3-small`)
+- `.env` datoteka u root direktoriju s Azure vjerodajnicama (kreirana komandom `azd up` u Modulu 01)
-> **Napomena:** Ako niste završili Modul 01, prvo pratite tamo upute za postavljanje. Naredba `azd up` postavlja i GPT chat model i embedding model koji koristi ovaj modul.
+> **Napomena:** Ako niste završili Modul 01, prvo slijedite upute za postavljanje tamo. Komanda `azd up` postavlja i GPT chat model i embedding model koji koristi ovaj modul.
## Razumijevanje RAG-a
-Dijagram ispod ilustrira osnovni koncept: umjesto oslanjanja samo na podatke modela iz treninga, RAG mu daje referentnu knjižnicu vaših dokumenata koje konzultira prije generiranja svakog odgovora.
+Slika ispod ilustrira osnovni koncept: umjesto da se oslanjamo samo na podatke dobivene tijekom treninga modela, RAG modelu daje referentnu knjižnicu vaših dokumenata za konzultaciju prije generiranja svakog odgovora.
-*Ovaj dijagram prikazuje razliku između standardnog LLM-a (koji nagađa iz trening podataka) i LLM-a s RAG poboljšanjem (koji prvo konzultira vaše dokumente).*
+*Ova dijagram prikazuje razliku između standardnog LLM-a (koji nagađa na temelju treninga) i LLM-a poboljšanog RAG-om (koji prvo konzultira vaše dokumente).*
-Evo kako se dijelovi povezuju od početka do kraja. Korisničko pitanje prolazi kroz četiri faze — embedding, pretraživanje vektora, sastavljanje konteksta i generiranje odgovora — gdje se svaka nadovezuje na prethodnu:
+Evo kako dijelovi međusobno povezuju end-to-end. Korisničko pitanje prolazi kroz četiri faze — ugradnju, vektorsku pretragu, sastavljanje konteksta i generiranje odgovora — pri čemu se svaka nadovezuje na prethodnu:
-*Ovaj dijagram prikazuje cjelokupni RAG pipeline — korisnički upit prolazi kroz embedding, pretraživanje vektora, sastavljanje konteksta i generiranje odgovora.*
+*Ovaj dijagram prikazuje end-to-end RAG pipeline — korisnički upit prolazi kroz ugradnju, vektorsku pretragu, sastavljanje konteksta i generiranju odgovora.*
-Ostatak ovog modula detaljno prolazi kroz svaku fazu, s kodom koji možete pokrenuti i mijenjati.
+Ostatak ovog modula detaljno obrađuje svaku fazu, s kodom koji možete pokrenuti i mijenjati.
### Koji RAG pristup koristi ovaj vodič?
-LangChain4j nudi tri načina za implementaciju RAG-a, svaki s različitom razinom apstrakcije. Dijagram ispod ih uspoređuje jedan uz drugog:
+LangChain4j nudi tri načina implementacije RAG-a, svaki sa različitim razinama apstrakcije. Dijagram ispod ih uspoređuje:
-*Ovaj dijagram uspoređuje tri LangChain4j RAG pristupa — Easy, Native i Advanced — pokazujući njihove ključne komponente i kada koristiti koji.*
+*Ovaj dijagram uspoređuje tri LangChain4j RAG pristupa — Easy, Native i Advanced — prikazujući njihove ključne komponente i kada koristiti koji.*
| Pristup | Što radi | Kompromis |
|---|---|---|
-| **Easy RAG** | Automatizira sve kroz `AiServices` i `ContentRetriever`. Vi označavate sučelje, dodajete retriever i LangChain4j upravlja embeddingom, pretraživanjem i sastavljanjem upita u pozadini. | Minimalni kod, ali ne vidite što se događa u svakoj fazi. |
-| **Native RAG** | Vi sami pozivate embedding model, pretražujete pohranu, gradite upit i generirate odgovor — jedan jasan korak po korak. | Više koda, ali svaka faza je vidljiva i može se mijenjati. |
-| **Advanced RAG** | Koristi `RetrievalAugmentor` framework s priključnim transformatorima upita, ruterima, re-rankerima i injektorima sadržaja za produkcijske pipelineove. | Maksimalna fleksibilnost, ali znatno veća složenost. |
+| **Easy RAG** | Automatski povezuje sve kroz `AiServices` i `ContentRetriever`. Označite sučelje, dodate retriever, a LangChain4j iza scene rukuje ugradnjom, pretragom i sastavljanjem prompta. | Minimalno koda, ali ne vidite što se događa u svakom koraku. |
+| **Native RAG** | Vi pozivate embedding model, pretražujete pohranu, gradite prompt i generirate odgovor — pojedinačno, jasno i korak po korak. | Više koda, ali svaki je korak vidljiv i možete ga mijenjati. |
+| **Advanced RAG** | Koristi `RetrievalAugmentor` okvir s pluggable transformatorima upita, routerima, re-rankerima i izvorima sadržaja za produkcijske pipeline. | Maksimalna fleksibilnost, ali znatno složenije. |
-**Ovaj vodič koristi Native pristup.** Svaki korak RAG pipelinea — embedded upita, pretraživanje vektorske pohrane, sastavljanje konteksta i generiranje odgovora — eksplicitno je napisan u [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). To je namjerno: kao edukativni materijal, važnije je da vidite i razumijete svaku fazu nego da kod bude čošćen. Kad savladate kako se dijelovi uklapaju, možete preći na Easy RAG za brze prototipe ili Advanced RAG za produkcijske sustave.
+**Ovaj vodič koristi Native pristup.** Svaki korak RAG pipelinea — ugradnja upita, pretraga vektorske pohrane, sastavljanje konteksta i generiranje odgovora — eksplicitno je napisan u [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). To je namjerno: kao resurs za učenje, važnije je da vidite i razumijete svaki korak negoli da je kod maksimalno skraćen. Kad ste upoznati s funkcioniranjem, možete prijeći na Easy RAG za brze prototipove ili Advanced RAG za produkcijske sustave.
-> **💡 Već ste vidjeli Easy RAG u akciji?** Modul [Brzi početak](../00-quick-start/README.md) uključuje primjer Pitanja i Odgovora s dokumentima ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)) koji koristi Easy RAG pristup — LangChain4j automatski upravlja embeddingom, pretraživanjem i sastavljanjem upita. Ovaj modul je sljedeći korak koji otvara pipeline da biste mogli vidjeti i kontrolirati svaku fazu sami.
+> **💡 Zanimate Easy RAG?** LangChain4j također nudi pristup *Easy RAG* gdje `AiServices` i `ContentRetriever` automatski rukuju ugradnjom, pretragom i sastavljanjem prompta. Ovaj modul ide eksplicitnijim putem — razbijajući pipeline tako da možete vidjeti i kontrolirati svaki korak sami.
-Dijagram ispod prikazuje Easy RAG pipeline iz spomenutog Brzog početka. Primijetite kako `AiServices` i `EmbeddingStoreContentRetriever` skrivaju svu kompleksnost — učitate dokument, dodate retriever i dobijete odgovore. Native pristup u ovom modulu otkriva svaku od tih skrivenih faza:
+Dijagram ispod prikazuje Easy RAG pipeline. Primijetite kako `AiServices` i `EmbeddingStoreContentRetriever` skrivaju svu složenost — učitate dokument, dodate retriever i dobijete odgovore. Native pristup u ovom modulu ruši te skrivene korake:
-*Ovaj dijagram prikazuje Easy RAG pipeline iz `SimpleReaderDemo.java`. Usporedite ga s Native pristupom korištenim u ovom modulu: Easy RAG skriva embedding, dohvaćanje i sastavljanje upita iza `AiServices` i `ContentRetriever` — vi učitate dokument, dodate retriever i dobivate odgovore. Native pristup u ovom modulu otkriva pipeline tako da sami pozivate svaku fazu (embedding, pretraživanje, sastavljanje konteksta, generiranje), što vam daje potpunu vidljivost i kontrolu.*
+*Ovaj dijagram prikazuje Easy RAG pipeline. Usporedite ovo s Native pristupom u ovom modulu: Easy RAG skriva ugradnju, pretraživanje i sastavljanje prompta iza `AiServices` i `ContentRetriever` — učitate dokument, dodate retriever i dobijete odgovore. Native pristup u ovom modulu razlaže pipeline tako da sami pozivate svaki korak (ugradnja, pretraga, sastavljanje konteksta, generiranje), dajući vam potpunu vidljivost i kontrolu.*
## Kako to radi
-RAG pipeline u ovom modulu razlaže se na četiri faze koje se izvršavaju redom svaki put kad korisnik postavi pitanje. Prvo se učitani dokument **parsira i dijeli na dijelove** koji su upravljive veličine. Ti se dijelovi zatim pretvaraju u **vektorske embeddinge** i pohranjuju tako da se mogu matematički uspoređivati. Kad stigne upit, sustav izvršava **semantičko pretraživanje** za pronalazak najrelevantnijih dijelova, a zatim ih daje kao kontekst LLM-u za **generiranje odgovora**. Sljedeći odjeljci vode vas kroz svaku fazu s konkretnim kodom i dijagramima. Pogledajmo prvi korak.
+RAG pipeline u ovom modulu sastoji se od četiri faze koje se izvode redom svaki put kad korisnik postavi pitanje. Prvo se učitani dokument **parsira i dijeli na dijelove** pogodne za korištenje. Ti se dijelovi potom pretvaraju u **vektorske ugradnje** i pohranjuju kako bi se mogli matematički uspoređivati. Kad dođe upit, sustav izvodi **semantičku pretragu** za pronalaženje najrelevantnijih dijelova i na kraju ih prosljeđuje kao kontekst LLM-u za **generiranje odgovora**. Sljedeći odjeljci detaljno objašnjavaju svaki korak s kodom i dijagramima. Pogledajmo prvi korak.
### Obrada dokumenata
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-Kad učitate dokument, sustav ga parsira (PDF ili plain text), dodaje metapodatke poput naziva datoteke, a zatim dijeli na dijelove — manje dijelove koji stanu u kontekstni prozor modela. Ti se dijelovi lagano preklapaju kako se ne bi izgubio kontekst na granicama.
+Kad učitate dokument, sustav ga parsira (PDF ili obični tekst), dodaje metapodatke poput naziva datoteke, a zatim ga dijeli na dijelove — manje cjeline koje stanu u kontekstni prozor modela. Ti se dijelovi djelomično preklapaju kako se ne bi izgubio kontekst na granicama.
```java
-// Parsirajte prenesenu datoteku i zamotajte je u LangChain4j Dokument
+// Parsiraj učitanu datoteku i umotaj je u LangChain4j dokument
Document document = Document.from(content, metadata);
-// Podijelite na dijelove od 300 tokena s preklapanjem od 30 tokena
+// Podijeli na dijelove od 300 tokena s preklapanjem od 30 tokena
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
-
-Dijagram ispod prikazuje kako to vizualno funkcionira. Primijetite kako svaki dio dijeli neke tokene s susjedima — preklapanje od 30 tokena osigurava da se nijedan važan kontekst ne izgubi u prijelazima:
-
+Slika ispod vizualno prikazuje kako to funkcionira. Primijetite da svaki dio dijeli neke tokene s susjednim dijelovima — preklapanje od 30 tokena osigurava da nijedan važan kontekst ne ostane izgubljen između dijelova:
-*Ovaj dijagram prikazuje dokument podijeljen u dijelove od 300 tokena s preklapanjem od 30 tokena, čime se čuva kontekst na granicama dijelova.*
+
-> **🤖 Isprobajte uz [GitHub Copilot](https://github.com/features/copilot) Chat:** Otvorite [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) i pitajte:
-> - "Kako LangChain4j dijeli dokumente na dijelove i zašto je preklapanje važno?"
-> - "Koja je optimalna veličina dijelova za različite vrste dokumenata i zašto?"
-> - "Kako postupiti s dokumentima na više jezika ili sa specialnim formatiranjem?"
+*Ovaj dijagram prikazuje dokument podijeljen u dijelove od 300 tokena s preklapanjem od 30 tokena, čuvajući kontekst na granicama dijelova.*
-### Stvaranje embeddinga
+> **🤖 Isprobajte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otvorite [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) i pitajte:
+> - "Kako LangChain4j dijeli dokumente na dijelove i zašto je preklapanje važno?"
+> - "Koja je optimalna veličina dijelova za različite vrste dokumenata i zašto?"
+> - "Kako rukovati dokumentima na više jezika ili sa specijalnim formatiranjem?"
+
+### Stvaranje ugradnji (embeddinga)
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-Svaki se dio pretvara u numeričku reprezentaciju zvanu embedding — u osnovi pretvarač značenja u brojeve. Embedding model nije "inteligentan" poput chat modela; ne može slijediti upute, rezonirati niti odgovarati na pitanja. Ono što može jest mapirati tekst u matematički prostor gdje slična značenja završavaju blizu jedno drugom — "auto" blizu "vozilo", "pravila povrata" blizu "vrati novac". Zamislite chat model kao osobu s kojom razgovarate, a embedding model kao iznimno dobar sustav arhiviranja.
+Svaki dio se pretvara u numerički prikaz nazvan embedding — u osnovi pretvarač značenja u brojeve. Embedding model nije "inteligentan" kao chat model; ne može slijediti upute, rezonirati ili odgovarati na pitanja. Ono što može jest preslikavati tekst u matematički prostor gdje slična značenja završavaju blizu jedno drugome — "auto" blizu "vozilo", "pravila povrata" blizu "vrati mi novac". Možete zamisliti chat model kao osobu s kojom razgovarate; embedding model je izuzetno dobar sustav za arhiviranje.
-Dijagram ispod vizualizira ovaj koncept — ulazi tekst, izlaze numerički vektori, a slična značenja proizvode vektore koji su blizu:
+Dijagram ispod vizualizira ovaj koncept — ulazi tekst, izlaze numerički vektori, a slična značenja proizvode vektore blizu jedan drugome:
-*Ovaj dijagram prikazuje kako embedding model pretvara tekst u numeričke vektore, stavljajući slična značenja — kao "auto" i "vozilo" — blizu jedno drugom u vektorskom prostoru.*
+*Ovaj dijagram pokazuje kako embedding model pretvara tekst u numeričke vektore, smještajući slična značenja — poput "automobil" i "vozilo" — blizu jedno drugome u vektorskom prostoru.*
```java
@Bean
@@ -153,30 +152,30 @@ public EmbeddingModel embeddingModel() {
EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-
-Dijagram klase ispod prikazuje dva odvojena tijeka u RAG pipelineu i LangChain4j klase koje ih implementiraju. **Tijek unosa** (izvršava se jednom prilikom učitavanja) dijeli dokument, stvara embedding dijelova i pohranjuje ih pomoću `.addAll()`. **Tijek upita** (izvršava se svaki put kad korisnik pita) embedira pitanje, pretražuje pohranu preko `.search()`, i prosljeđuje pronađeni kontekst chat modelu. Oba tijeka se spajaju na zajedničko sučelje `EmbeddingStore`:
+
+Dijagram klasa ispod prikazuje dva zasebna toka u RAG pipelineu i LangChain4j klase koje ih implementiraju. **Tok unosa** (izvodi se jednom pri učitavanju) dijeli dokument, ugrađuje dijelove i pohranjuje ih preko `.addAll()`. **Tok upita** (izvodi se svaki put kad korisnik pita) ugrađuje upit, pretražuje pohranu preko `.search()`, i prosljeđuje podudarajući kontekst chat modelu. Oboje se spajaju na zajedničko sučelje `EmbeddingStore`:
-*Ovaj dijagram prikazuje dva tijeka u RAG pipelineu — unos i upit — i kako se povezuju kroz zajedničko EmbeddingStore sučelje.*
+*Ovaj dijagram prikazuje dva toka u RAG pipelineu — unos i upit — i kako se povezuju preko zajedničkog EmbeddingStore sučelja.*
-Kad se embeddingi pohrane, sličan sadržaj prirodno se grupira u vektorskom prostoru. Vizualizacija ispod pokazuje kako dokumenti o srodnim temama završavaju kao bliski točke, što čini semantičko pretraživanje mogućim:
+Kad se embeddingi pohrane, sličan sadržaj prirodno klasterira u prostoru vektora. Vizualizacija ispod prikazuje kako dokumenti o srodnim temama završavaju kao susjedne točke, što omogućuje semantičku pretragu:
-*Ova vizualizacija prikazuje kako se povezani dokumenti grupiraju u 3D vektorskom prostoru, s temama poput Tehničke dokumentacije, Poslovnih pravila i Često postavljanih pitanja stvarajući odvojene skupine.*
+*Ova vizualizacija prikazuje kako se povezani dokumenti grupiraju u 3D vektorskom prostoru, s temama poput Tehničke dokumentacije, Poslovnih pravila i Često postavljanih pitanja formirajući odvojene skupine.*
-Kad korisnik pretražuje, sustav slijedi četiri koraka: embedira dokumente jednom, embedira upit za svako pretraživanje, uspoređuje vektor upita sa svim pohranjenim vektorima koristeći kosinusnu sličnost i vraća top-K dijelova s najvišim rezultatima. Dijagram ispod vodi kroz svaki korak i uključene LangChain4j klase:
+Kad korisnik pretražuje, sustav slijedi četiri koraka: jednom ugrađuje dokumente, kod svake pretrage ugrađuje upit, uspoređuje vektor upita sa svim pohranjenim vektorima koristeći kosinusnu sličnost i vraća top-K najviših rezultata. Dijagram ispod prikazuje svaki korak i LangChain4j klase uključene u proces:
-
+
-*Ovaj dijagram prikazuje proces pretraživanja embeddingom u četiri koraka: embediranje dokumenata, embediranje upita, usporedbu vektora kosinusnom sličnosti i vraćanje top-K rezultata.*
+*Ovaj dijagram pokazuje četverostepeni proces pretrage embeddinga: ugradnju dokumenata, ugradnju upita, usporedbu vektora kosinusnom sličnosti i vraćanje top-K rezultata.*
### Semantičko pretraživanje
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Kad postavite pitanje, i pitanje se pretvara u embedding. Sustav uspoređuje embedding vašeg pitanja sa embeddingima dijelova dokumenata. Pronalazi dijelove s najsličnijim značenjima — ne samo podudaranje ključnih riječi, već stvarnu semantičku sličnost.
+Kad postavite pitanje, to pitanje se također pretvara u embedding. Sustav uspoređuje embedding vašeg pitanja sa svim embeddingima dijelova dokumenata. Pronalazi dijelove s najviše sličnosti u značenju — ne samo podudaranje ključnih riječi, već stvarnu semantičku sličnost.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -195,28 +194,28 @@ for (EmbeddingMatch match : matches) {
double score = match.score();
}
```
-
-Dijagram ispod uspoređuje semantičko pretraživanje s tradicionalnim pretraživanjem po ključnim riječima. Pretraživanje po ključnim riječima za "vozilo" ne pronalazi dio o "automobilima i kamionima", ali semantičko pretraživanje razumije da znače isto i vraća ga kao visoko relevantan rezultat:
-
+Dijagram ispod uspoređuje semantičku pretragu s tradicionalnom pretragom po ključnim riječima. Pretraga po ključnoj riječi "vozilo" promašuje dio o "automobilima i kamionima", ali semantička pretraga razumije da znače isto i vraća ga kao visokorangiranu podudarnost:
+
+
-*Ovaj dijagram uspoređuje pretraživanje po ključnim riječima s semantičkim pretraživanjem, pokazujući kako semantičko pretraživanje dohvaća konceptualno povezani sadržaj čak i kad se ključne riječi ne podudaraju.*
-Ispod haube, sličnost se mjeri korištenjem kosinusne sličnosti — praktički pitajući "pokazuju li ove dvije strelice u istom smjeru?" Dva dijela mogu koristiti potpuno različite riječi, ali ako znače isto, njihovi vektori pokazuju u istom smjeru i rezultat je blizak 1.0:
+*Ovaj dijagram uspoređuje pretraživanje na temelju ključnih riječi s semantičkom pretragom, pokazujući kako semantička pretraga dohvaća konceptualno povezani sadržaj čak i kad se ne podudaraju točne ključne riječi.*
-
+Ispod haube, sličnost se mjeri korištenjem kosinusne sličnosti — u osnovi se pita "pokazuju li ove dvije strelice u istom smjeru?" Dva dijela mogu koristiti potpuno drukčije riječi, ali ako znače isto, njihovi vektori pokazuju u isti smjer i daju rezultat blizu 1.0:
-*Ovaj dijagram ilustrira kosinusnu sličnost kao kut između vektora ugradnje — bolje poravnati vektori postižu rezultat bliži 1.0, što ukazuje na veću semantičku sličnost.*
+
+*Ovaj dijagram ilustrira kosinusnu sličnost kao kut između vektora ugradnje — vektori koji su bliže usklađeni dobivaju rezultat bliži 1.0, što ukazuje na veću semantičku sličnost.*
> **🤖 Isprobajte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otvorite [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) i pitajte:
> - "Kako radi pretraživanje sličnosti s ugradnjama i što određuje rezultat?"
-> - "Koju granicu sličnosti trebam koristiti i kako to utječe na rezultate?"
-> - "Kako postupiti u slučajevima kada se ne pronađu relevantni dokumenti?"
+> - "Koju prag sličnosti bih trebao koristiti i kako to utječe na rezultate?"
+> - "Kako postupiti kada se ne pronađu relevantni dokumenti?"
### Generiranje odgovora
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Najrelevantniji dijelovi se slažu u strukturirani upit koji uključuje izričite upute, dohvaćeni kontekst i korisničko pitanje. Model čita ti specifični dijelovi i odgovara na temelju tih informacija — može koristiti samo ono što je pred njim, što sprječava halucinacije.
+Najrelevantniji dijelovi se sastavljaju u strukturirani upit koji uključuje eksplicitne upute, dohvaćeni kontekst i korisničko pitanje. Model čita te specifične dijelove i daje odgovor na temelju tih informacija — može koristiti samo ono što mu je predano, što sprječava halucinacije.
```java
String context = matches.stream()
@@ -237,17 +236,17 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-Dijagram ispod prikazuje ovaj proces sklapanja — najupečatljiviji dijelovi iz koraka pretraživanja ubacuju se u predložak upita, a `OpenAiOfficialChatModel` generira utemeljen odgovor:
+Dijagram u nastavku prikazuje taj proces sastavljanja — dijelovi s najboljim ocjenama iz koraka pretraživanja ugrađuju se u predložak upita, a `OpenAiOfficialChatModel` generira utemeljen odgovor:
-
+
-*Ovaj dijagram pokazuje kako se najužiji dijelovi slažu u strukturirani upit, što omogućava modelu da generira utemeljen odgovor iz vaših podataka.*
+*Ovaj dijagram prikazuje kako se dijelovi s najboljim ocjenama sastavljaju u strukturirani upit, omogućujući modelu generiranje utemeljenog odgovora iz vaših podataka.*
-## Pokrenite aplikaciju
+## Pokretanje aplikacije
**Provjerite implementaciju:**
-Provjerite postoji li `.env` datoteka u korijenskom direktoriju s Azure vjerodajnicama (kreirana tijekom Modula 01). Pokrenite ovo iz direktorija modula (`03-rag/`):
+Provjerite postoji li `.env` datoteka u glavnom direktoriju sa Azure vjerodajnicama (stvorena tijekom Modula 01). Pokrenite ovo iz direktorija modula (`03-rag/`):
**Bash:**
```bash
@@ -261,25 +260,25 @@ Get-Content ..\.env # Trebao bi prikazati AZURE_OPENAI_ENDPOINT, API_KEY, DEPLO
**Pokrenite aplikaciju:**
-> **Napomena:** Ako ste već pokrenuli sve aplikacije korištenjem `./start-all.sh` iz korijenskog direktorija (kako je opisano u Modulu 01), ovaj modul već radi na portu 8081. Možete preskočiti naredbe za pokretanje ispod i direktno otići na http://localhost:8081.
+> **Napomena:** Ako ste već pokrenuli sve aplikacije koristeći `./start-all.sh` iz glavnog direktorija (kako je opisano u Modulu 01), ovaj modul već radi na portu 8081. Možete preskočiti naredbe za pokretanje u nastavku i izravno otvoriti http://localhost:8081.
-**Opcija 1: Korištenje Spring Boot nadzorne ploče (Preporučeno za korisnike VS Codea)**
+**Opcija 1: Korištenje Spring Boot nadzorne ploče (preporučeno za korisnike VS Codea)**
-Razvojno okruženje uključuje ekstenziju Spring Boot Dashboards koja pruža vizualno sučelje za upravljanje svim Spring Boot aplikacijama. Možete je pronaći na traci aktivnosti lijevo u VS Codeu (potražite ikonu Spring Boot).
+Razvojno okruženje uključuje Spring Boot nadzornu ploču, koja pruža vizualno sučelje za upravljanje svim Spring Boot aplikacijama. Pronaći ćete je u Traci aktivnosti s lijeve strane VS Codea (potražite ikonu Spring Boota).
Iz Spring Boot nadzorne ploče možete:
- Vidjeti sve dostupne Spring Boot aplikacije u radnom prostoru
-- Pokretati i zaustavljati aplikacije jednim klikom
-- Pregledavati zapisnike aplikacije u stvarnom vremenu
+- Jednim klikom pokretati/zaustavljati aplikacije
+- Pratiti logove aplikacije u stvarnom vremenu
- Nadzirati status aplikacije
-Jednostavno kliknite gumb za pokretanje pored "rag" da pokrenete ovaj modul ili pokrenite sve module odjednom.
+Jednostavno kliknite gumb za reprodukciju pored "rag" za pokretanje ovog modula ili pokrenite sve module odjednom.
-
+
-*Ovaj snimak zaslona prikazuje Spring Boot nadzornu ploču u VS Codeu, gdje možete vizualno pokretati, zaustavljati i nadzirati aplikacije.*
+*Ovaj zaslon prikazuje Spring Boot nadzornu ploču u VS Codeu, gdje možete vizualno pokretati, zaustavljati i nadzirati aplikacije.*
-**Opcija 2: Korištenje shell skripti**
+**Opcija 2: Korištenje skripti u terminalu**
Pokrenite sve web aplikacije (moduli 01-04):
@@ -309,7 +308,7 @@ cd 03-rag
.\start.ps1
```
-Obje skripte automatski učitavaju varijable okoline iz `.env` datoteke u korijenu i izgradit će JAR datoteke ako ne postoje.
+Obje skripte automatski učitavaju varijable okoline iz glavne `.env` datoteke i izgradit će JAR datoteke ako ne postoje.
> **Napomena:** Ako želite ručno izgraditi sve module prije pokretanja:
>
@@ -318,7 +317,7 @@ Obje skripte automatski učitavaju varijable okoline iz `.env` datoteke u korije
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
->
+
> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
@@ -327,7 +326,7 @@ Obje skripte automatski učitavaju varijable okoline iz `.env` datoteke u korije
Otvorite http://localhost:8081 u vašem pregledniku.
-**Zaustavljanje:**
+**Za zaustavljanje:**
**Bash:**
```bash
@@ -347,27 +346,27 @@ cd ..; .\stop-all.ps1 # Svi moduli
Aplikacija pruža web sučelje za prijenos dokumenata i postavljanje pitanja.
-
+
-*Ovaj snimak zaslona prikazuje sučelje RAG aplikacije gdje prenosite dokumente i postavljate pitanja.*
+*Ovaj zaslon prikazuje sučelje RAG aplikacije gdje prenosite dokumente i postavljate pitanja.*
### Prenesite dokument
-Započnite prijenosom dokumenta - TXT datoteke najbolje funkcioniraju za testiranje. U ovom direktoriju nalazi se `sample-document.txt` koji sadrži informacije o značajkama LangChain4j, implementaciji RAG-a i najboljim praksama - savršeno za testiranje sustava.
+Počnite prijenosom dokumenta – TXT datoteke najbolje funkcioniraju za testiranje. U ovom direktoriju nalazi se `sample-document.txt` koji sadrži informacije o značajkama LangChain4j, implementaciji RAG-a i najboljim praksama – savršen za testiranje sustava.
-Sustav obrađuje vaš dokument, dijeli ga na dijelove i stvara ugradnje za svaki dio. To se događa automatski kada prenesete dokument.
+Sustav obrađuje vaš dokument, dijeli ga u dijelove i stvara ugradnje za svaki dio. To se događa automatski pri prijenosu.
### Postavljajte pitanja
-Sada postavite specifična pitanja o sadržaju dokumenta. Isprobajte nešto faktualno što je jasno istaknuto u dokumentu. Sustav traži relevantne dijelove, uključuje ih u upit i generira odgovor.
+Sada postavite specifična pitanja o sadržaju dokumenta. Isprobajte nešto faktualno što je jasno navedeno u dokumentu. Sustav traži relevantne dijelove, uključuje ih u upit i generira odgovor.
### Provjerite izvore
-Primijetite da svaki odgovor uključuje izvore s rezultatima sličnosti. Ti rezultati (od 0 do 1) pokazuju koliko je svaki dio bio relevantan za vaše pitanje. Viši rezultati znače bolje podudaranje. To vam omogućuje da provjerite točnost odgovora prema izvornom materijalu.
+Primijetite da svaki odgovor uključuje reference izvora sa sličnostnim rezultatima. Ti rezultati (od 0 do 1) pokazuju koliko je svaki dio bio relevantan za vaše pitanje. Viši rezultati znače bolje podudaranje. To vam omogućuje da provjerite točnost odgovora u odnosu na izvorni materijal.
-
+
-*Ovaj snimak zaslona prikazuje rezultate upita s generiranim odgovorom, referencama izvora i ocjenama relevantnosti za svaki dohvaćeni dio.*
+*Ovaj zaslon prikazuje rezultate upita s generiranim odgovorom, referencama izvora i rezultatima relevantnosti za svaki dohvaćeni dio.*
### Eksperimentirajte s pitanjima
@@ -376,50 +375,50 @@ Isprobajte različite vrste pitanja:
- Usporedbe: "Koja je razlika između X i Y?"
- Sažetke: "Sažmi ključne točke o Z"
-Promatrajte kako se ocjene relevantnosti mijenjaju ovisno o tome koliko dobro vaše pitanje odgovara sadržaju dokumenta.
+Promatrajte kako se rezultati relevantnosti mijenjaju ovisno o tome koliko vaše pitanje odgovara sadržaju dokumenta.
## Ključni pojmovi
-### Strategija dijeljenja na dijelove
+### Strategija dijeljenja (chunkanja)
-Dokumenti se dijele na dijelove od 300 tokena s preklapanjem od 30 tokena. Ovaj balans osigurava da svaki dio ima dovoljno konteksta da bude značajan, a istovremeno ostaje dovoljno mali da se u upit može uključiti više dijelova.
+Dokumenti se dijele na dijelove od 300 tokena s preklapanjem od 30 tokena. Ovaj omjer osigurava da svaki dio ima dovoljno konteksta da bude smislen, a istovremeno ostaje dovoljno malen da se može uključiti više dijelova u upit.
### Rezultati sličnosti
-Svaki dohvaćeni dio dolazi s ocjenom sličnosti između 0 i 1 koja pokazuje koliko je blisko povezan s pitanjem korisnika. Dijagram ispod vizualizira raspon rezultata i kako sustav koristi te vrijednosti za filtriranje rezultata:
+Svaki dohvaćeni dio dolazi s rezultatom sličnosti između 0 i 1 koji pokazuje koliko je blisko odgovarao korisničkom pitanju. Dijagram u nastavku vizualizira raspon rezultata i kako sustav koristi te vrijednosti za filtriranje rezultata:
-
+
-*Ovaj dijagram prikazuje raspon rezultata od 0 do 1, s minimalnom granicom od 0.5 koja filtrira irelevantne dijelove.*
+*Ovaj dijagram prikazuje raspon rezultata od 0 do 1, s minimalnim pragom od 0.5 koji filtrira nerelevantne dijelove.*
-Ocjene se kreću od 0 do 1:
-- 0,7-1,0: Vrlo relevantno, točno podudaranje
-- 0,5-0,7: Relevantno, dobar kontekst
-- Ispod 0,5: Filtrirano, previše različito
+Rezultati se kreću od 0 do 1:
+- 0.7-1.0: Vrlo relevantno, točno podudaranje
+- 0.5-0.7: Relevantno, dobar kontekst
+- Ispod 0.5: Filtrirano, previše različito
-Sustav dohvaća samo dijelove iznad minimalne granice kako bi osigurao kvalitetu.
+Sustav dohvaća samo dijelove koji prelaze minimalni prag kako bi osigurao kvalitetu.
-Ugradnje dobro funkcioniraju kada se značenje jasno grupira, ali imaju i slabosti. Dijagram ispod prikazuje česte uzroke neuspjeha — dijelovi preveliki daju nejasne vektore, dijelovi premali nemaju kontekst, dvosmisleni pojmovi upućuju na više grupa, a točno podudaranje pretraživanja (ID-ovi, brojevi dijelova) uopće ne funkcionira s ugradnjama:
+Ugradnje dobro funkcioniraju kad se značenje jasno grupira, ali imaju i slabosti. Dijagram u nastavku prikazuje uobičajene načine pada—preveliki dijelovi proizvode mutne vektore, premali dijelovi nemaju kontekst, dvosmisleni pojmovi upućuju na više klastera, a točna pretraživanja (ID-ovi, brojevi dijelova) uopće ne rade s ugradnjama:
-
+
-*Ovaj dijagram prikazuje česte načine neuspjeha ugradnji: dijelovi preveliki, dijelovi premali, dvosmisleni pojmovi koji upućuju na više grupa, te točno podudaranje pretraživanja poput ID-ova.*
+*Ovaj dijagram prikazuje uobičajene načine pada ugradnji: prevelike dijelove, premale dijelove, dvosmislene pojmove koji upućuju na više skupina, te točna pretraživanja poput ID-ova.*
### Pohrana u memoriji
-Ovaj modul koristi pohranu u memoriji radi jednostavnosti. Kada ponovno pokrenete aplikaciju, preneseni dokumenti se gube. Produkcijski sustavi koriste trajne vektorske baze podataka kao što su Qdrant ili Azure AI Search.
+Ovaj modul koristi pohranu u memoriji radi jednostavnosti. Kada ponovno pokrenete aplikaciju, preneseni dokumenti se izgube. Produkcijski sustavi koriste trajne vektorske baze podataka poput Qdranta ili Azure AI Search.
### Upravljanje kontekstnim prozorom
-Svaki model ima maksimalni kontekstni prozor. Ne možete uključiti svaki dio iz velikog dokumenta. Sustav dohvaća prvih N najrelevantnijih dijelova (zadano 5) kako bi ostao unutar ograničenja, a istovremeno pružio dovoljan kontekst za točne odgovore.
+Svaki model ima maksimalni kontekstni prozor. Ne možete uključiti svaki dio iz velikog dokumenta. Sustav dohvaća prvih N najrelevantnijih dijelova (zadano 5) kako bi ostao unutar granica, a istovremeno pružio dovoljno konteksta za točne odgovore.
## Kada je RAG važan
-RAG nije uvijek pravi pristup. Vodič za odluke ispod pomaže vam utvrditi kad RAG donosi dodatnu vrijednost u odnosu na jednostavnije pristupe — poput uključivanja sadržaja izravno u upit ili oslanjanja na ugrađeno znanje modela:
+RAG nije uvijek pravi pristup. Sljedeći vodič za odluku pomaže procijeniti kada RAG donosi dodatnu vrijednost, a kada su jednostavniji pristupi — poput direktnog uključivanja sadržaja u upit ili oslanjanja na ugrađeno znanje modela — dovoljni:
-
+
-*Ovaj dijagram prikazuje vodič za odluke kada RAG donosi vrijednost u odnosu na jednostavnije pristupe.*
+*Ovaj dijagram prikazuje vodič za odluku kada RAG dodaje vrijednost nasuprot kad su jednostavniji pristupi dovoljni.*
## Sljedeći koraci
@@ -427,11 +426,11 @@ RAG nije uvijek pravi pristup. Vodič za odluke ispod pomaže vam utvrditi kad R
---
-**Navigacija:** [← Prethodno: Modul 02 - Prompt inženjering](../02-prompt-engineering/README.md) | [Natrag na početak](../README.md) | [Sljedeće: Modul 04 - Alati →](../04-tools/README.md)
+**Navigacija:** [← Prethodno: Modul 02 - Inženjering prompta](../02-prompt-engineering/README.md) | [Natrag na početak](../README.md) | [Sljedeće: Modul 04 - Alati →](../04-tools/README.md)
---
-**Odricanje od odgovornosti**:
-Ovaj je dokument preveden korištenjem AI usluge za prevođenje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako težimo točnosti, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni ljudski prijevod. Ne snosimo odgovornost za bilo kakve nesporazume ili kriva tumačenja proizašla iz korištenja ovog prijevoda.
+**Napomena**:
+Ovaj dokument je preveden korištenjem AI prevoditeljskog servisa [Co-op Translator](https://github.com/Azure/co-op-translator). Iako težimo točnosti, imajte na umu da automatski prijevodi mogu sadržavati greške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za važne informacije preporuča se profesionalni ljudski prijevod. Nismo odgovorni za bilo kakva nesporazumevanja ili pogrešne interpretacije koje proizlaze iz korištenja ovog prijevoda.
\ No newline at end of file
diff --git a/translations/hr/04-tools/README.md b/translations/hr/04-tools/README.md
index c378b2bec..e6ce8b0b1 100644
--- a/translations/hr/04-tools/README.md
+++ b/translations/hr/04-tools/README.md
@@ -1,76 +1,76 @@
-# Modul 04: AI Agenti s Alatima
+# Modul 04: AI agenti s alatima
## Sadržaj
-- [Video vodič](../../../04-tools)
-- [Što ćete naučiti](../../../04-tools)
-- [Preduvjeti](../../../04-tools)
-- [Razumijevanje AI agenata s alatima](../../../04-tools)
-- [Kako funkcionira pozivanje alata](../../../04-tools)
- - [Definicije alata](../../../04-tools)
- - [Donosenje odluka](../../../04-tools)
- - [Izvršenje](../../../04-tools)
- - [Generiranje odgovora](../../../04-tools)
- - [Arhitektura: Spring Boot automatsko povezivanje](../../../04-tools)
-- [Lanca alata](../../../04-tools)
-- [Pokrenite aplikaciju](../../../04-tools)
-- [Korištenje aplikacije](../../../04-tools)
- - [Isprobajte jednostavnu uporabu alata](../../../04-tools)
- - [Testirajte povezivanje alata](../../../04-tools)
- - [Pogledajte tijek razgovora](../../../04-tools)
- - [Eksperimentirajte s različitim upitima](../../../04-tools)
-- [Ključni pojmovi](../../../04-tools)
- - [ReAct obrazac (Razmišljanje i djelovanje)](../../../04-tools)
- - [Opis alata je važan](../../../04-tools)
- - [Upravljanje sesijama](../../../04-tools)
- - [Rukovanje greškama](../../../04-tools)
-- [Dostupni alati](../../../04-tools)
-- [Kada koristiti agente temeljene na alatima](../../../04-tools)
-- [Alati vs RAG](../../../04-tools)
-- [Sljedeći koraci](../../../04-tools)
+- [Video vodič](#video-vodič)
+- [Što ćete naučiti](#što-ćete-naučiti)
+- [Preduvjeti](#preduvjeti)
+- [Razumijevanje AI agenata s alatima](#razumijevanje-ai-agenata-s-alatima)
+- [Kako funkcionira pozivanje alata](#kako-funkcionira-pozivanje-alata)
+ - [Definicije alata](#definicije-alata)
+ - [Donošenje odluka](#donošenje-odluka)
+ - [Izvršavanje](#izvršavanje)
+ - [Generiranje odgovora](#generiranje-odgovora)
+ - [Arhitektura: Spring Boot automatsko povezivanje](#arhitektura-spring-boot-automatsko-povezivanje)
+- [Povezivanje alata](#povezivanje-alata)
+- [Pokrenite aplikaciju](#pokrenite-aplikaciju)
+- [Korištenje aplikacije](#korištenje-aplikacije)
+ - [Isprobajte jednostavnu upotrebu alata](#isprobajte-jednostavnu-uporabu-alata)
+ - [Testirajte povezivanje alata](#testirajte-lančano-korištenje-alata)
+ - [Pogledajte tijek razgovora](#pogledajte-tijek-razgovora)
+ - [Eksperimentirajte s različitim zahtjevima](#eksperimentirajte-s-različitim-zahtjevima)
+- [Ključni pojmovi](#ključni-pojmovi)
+ - [ReAct obrazac (razmišljanje i djelovanje)](#react-obrazac-razmišljanje-i-djelovanje)
+ - [Opis alata je važan](#opisi-alata-su-važni)
+ - [Upravljanje sesijama](#upravljanje-sesijom)
+ - [Rukovanje pogreškama](#rukovanje-pogreškama)
+- [Dostupni alati](#dostupni-alati)
+- [Kada koristiti agente temeljene na alatima](#kada-koristiti-agente-koji-koriste-alate)
+- [Alati vs RAG](#alati-naspram-rag)
+- [Sljedeći koraci](#daljnji-koraci)
## Video vodič
-Pogledajte ovu sesiju uživo koja objašnjava kako započeti s ovim modulom:
+Pogledajte ovu live sesiju koja objašnjava kako započeti s ovim modulom:
## Što ćete naučiti
-Do sada ste naučili kako voditi razgovore s AI, učinkovito strukturirati upite i povezivati odgovore s vašim dokumentima. No postoji osnovno ograničenje: modeli jezika mogu generirati samo tekst. Ne mogu provjeriti vremensku prognozu, izvršavati izračune, pretraživati baze podataka ili komunicirati s vanjskim sustavima.
+Do sada ste naučili kako voditi razgovore s AI, učinkovito strukturirati upite i povezati odgovore s vašim dokumentima. No postoji temeljno ograničenje: jezični modeli mogu samo generirati tekst. Ne mogu provjeriti vremensku prognozu, izračunavati, upitavati baze podataka ili komunicirati s vanjskim sustavima.
-Alati to mijenjaju. Dajući modelu pristup funkcijama koje može pozvati, pretvarate ga iz generatora teksta u agenta koji može poduzimati akcije. Model odlučuje kada mu treba alat, koji alat koristiti i koje parametre proslijediti. Vaš kod izvršava funkciju i vraća rezultat. Model zatim uklapa taj rezultat u svoj odgovor.
+Alati to mijenjaju. Dajući modelu pristup funkcijama koje može pozivati, pretvarate ga iz generatora teksta u agenta koji može poduzimati radnje. Model odlučuje kad mu treba alat, koji alat koristiti i koje parametre poslati. Vaš kod izvršava funkciju i vraća rezultat. Model taj rezultat uključuje u svoj odgovor.
## Preduvjeti
-- Završili [Modul 01 - Uvod](../01-introduction/README.md) (postavljeni Azure OpenAI resursi)
-- Preporučeno završiti prethodne module (ovaj modul se poziva na [RAG koncepte iz Modula 03](../03-rag/README.md) u usporedbi Alati vs RAG)
-- `.env` datoteka u korijenskom direktoriju s Azure vjerodajnicama (kreirana pomoću `azd up` u Modulu 01)
+- Završeni [Modul 01 - Uvod](../01-introduction/README.md) (procure Azure OpenAI resursi)
+- Prethodni moduli preporučeni (ovaj modul se u usporedbi Alati vs RAG poziva na [RAG koncepte iz Modula 03](../03-rag/README.md))
+- `.env` datoteka u korijenskom direktoriju sa Azure vjerodajnicama (kreirana naredbom `azd up` u Modulu 01)
-> **Napomena:** Ako niste završili Modul 01, slijedite tamo upute za postavljanje prije nastavka.
+> **Napomena:** Ako niste završili Modul 01, prvo slijedite upute za postavljanje tamo.
## Razumijevanje AI agenata s alatima
-> **📝 Napomena:** Termin „agenti“ u ovom modulu odnosi se na AI asistente proširene mogućnošću pozivanja alata. Ovo je različito od **Agentic AI** obrazaca (autonomni agenti s planiranjem, memorijom i višekorak razmišljanjem) koje ćemo obraditi u [Modul 05: MCP](../05-mcp/README.md).
+> **📝 Napomena:** Termin "agenti" u ovom modulu odnosi se na AI asistente obogaćene sposobnostima pozivanja alata. To se razlikuje od **Agentic AI** obrazaca (autonomni agenti s planiranjem, memorijom i višestupanjskim zaključivanjem) koje ćemo obraditi u [Modulu 05: MCP](../05-mcp/README.md).
-Bez alata, model jezika može samo generirati tekst iz svojih podataka za treniranje. Pitajte ga za vremensku prognozu i on može samo nagađati. Dajte mu alate i može pozvati vremenski API, izvesti izračune ili pretražiti bazu podataka — zatim uklopiti te stvarne rezultate u svoj odgovor.
+Bez alata, jezični model može samo generirati tekst na temelju svojih podataka za učenje. Pitajte ga za trenutnu vremensku prognozu i on mora nagađati. Dajte mu alate i on može pozvati vremenski API, izračunavati ili upitavati bazu podataka — a zatim te stvarne rezultate utkati u svoj odgovor.
-
+
-*Bez alata model samo nagađa — s alatima može pozivati API-je, izvršavati izračune i vraćati podatke u stvarnom vremenu.*
+*Bez alata model može samo nagađati — s alatima može pozivati API-je, izvoditi izračune i vraćati podatke u stvarnom vremenu.*
-AI agent s alatima slijedi obrazac **Razmišljanje i djelovanje (ReAct)**. Model ne samo da odgovara — razmišlja što mu treba, djeluje pozivajući alat, promatra rezultat, a zatim odlučuje hoće li opet djelovati ili dati konačni odgovor:
+AI agent s alatima slijedi **ReAct** obrazac (razmišljanje i djelovanje). Model ne samo da odgovara — on razmišlja što mu treba, djeluje pozivajući alat, promatra rezultat, pa odlučuje hoće li ponovno djelovati ili dati konačni odgovor:
-1. **Razmišlja** — agent analizira korisnikovo pitanje i odlučuje koju informaciju treba
-2. **Djeluje** — agent odabire pravi alat, generira točne parametre i poziva ga
-3. **Promatra** — agent prima izlaz alata i evaluira rezultat
-4. **Ponavlja ili odgovara** — ako je potrebno više podataka, agent počinje ispočetka; inače sastavlja odgovor na prirodnom jeziku
+1. **Razmišljanje** — Agent analizira korisničko pitanje i određuje koje informacije su mu potrebne
+2. **Djelovanje** — Agent odabire pravi alat, generira ispravne parametre i poziva alat
+3. **Promatranje** — Agent prima izlaz alata i evaluira rezultat
+4. **Ponavljanje ili Odgovor** — Ako je potrebno više podataka, agent se vraća na početak; inače sastavlja odgovor u prirodnom jeziku
-
+
-*Ciklus ReAct — agent razmišlja što učiniti, djeluje pozivajući alat, promatra rezultat i ponavlja dok ne može dati konačni odgovor.*
+*ReAct ciklus — agent razmišlja što treba napraviti, djeluje pozivajući alat, promatra rezultat i ponavlja dok ne može dati konačni odgovor.*
-Ovo se odvija automatski. Definirate alate i njihove opise. Model donosi odluke o tome kada i kako ih koristiti.
+Ovo se događa automatski. Vi definirate alate i njihove opise. Model donosi odluke o tome kada i kako ih koristiti.
## Kako funkcionira pozivanje alata
@@ -86,7 +86,7 @@ public class WeatherTool {
@Tool("Get the current weather for a location")
public String getCurrentWeather(@P("Location name") String location) {
- // Vaša logika pretrage vremena
+ // Vaša logika za pretraživanje vremenske prognoze
return "Weather in " + location + ": 22°C, cloudy";
}
}
@@ -96,104 +96,104 @@ public interface Assistant {
String chat(@MemoryId String sessionId, @UserMessage String message);
}
-// Asistent je automatski povezan preko Spring Boot sa:
+// Asistent je automatski povezan putem Spring Boot-a sa:
// - ChatModel bean
// - Sve @Tool metode iz @Component klasa
-// - ChatMemoryProvider za upravljanje sesijama
+// - ChatMemoryProvider za upravljanje sesijom
```
-Dijagram ispod detaljno objašnjava svaku oznaku i pokazuje kako svaki dio pomaže AI-u razumjeti kada pozvati alat i koje argumente proslijediti:
+Sljedeća dijagram razlaže svaku oznaku i pokazuje kako svaki dio pomaže AI-u da razumije kada pozvati alat i koje argumente poslati:
-
+
-*Anatomija definicije alata — @Tool govori AI-u kada ga koristiti, @P opisuje svaki parametar, a @AiService povezuje sve zajedno pri pokretanju.*
+*Anatomija definicije alata — @Tool kaže AI-u kada ga koristiti, @P opisuje svaki parametar, a @AiService povezuje sve pri pokretanju.*
> **🤖 Isprobajte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otvorite [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) i pitajte:
-> - "Kako bih integrirao pravi vremenski API poput OpenWeatherMap umjesto lažnih podataka?"
-> - "Što čini dobar opis alata koji pomaže AI-u da ga ispravno koristi?"
-> - "Kako rukovati API greškama i ograničenjima učestalosti u implementacijama alata?"
+> - "Kako bih integrirao pravi vremenski API poput OpenWeatherMap umjesto testnih podataka?"
+> - "Što čini dobar opis alata koji pomaže AI-u da ga pravilno koristi?"
+> - "Kako se nositi s API pogreškama i ograničenjima u implementacijama alata?"
### Donošenje odluka
-Kad korisnik pita "Kakvo je vrijeme u Seattleu?", model nasumično ne bira alat. On uspoređuje korisnikovu namjeru sa svim opisima alata kojima ima pristup, ocjenjuje relevantnost svakog i odabire najbolju podudarnost. Zatim generira strukturirani poziv funkcije s pravim parametrima — u ovom slučaju postavljajući `location` na `"Seattle"`.
+Kad korisnik pita "Kakvo je vrijeme u Seattleu?", model ne bira alat nasumično. On uspoređuje korisničku namjeru s opisima svakog dostupnog alata, ocjenjuje relevantnost i odabire najbolju opciju. Zatim generira strukturirani poziv funkcije s pravim parametrima — u ovom slučaju, `location` postavlja na `"Seattle"`.
-Ako nijedan alat ne odgovara korisnikovom zahtjevu, model se vraća odgovoru iz vlastitog znanja. Ako ih više odgovara, bira najtočniji.
+Ako nijedan alat ne odgovara zahtjevu korisnika, model se vraća na odgovore iz vlastitog znanja. Ako više alata odgovara, odabire najprecizniji.
-
+
-*Model evaluira svaki dostupni alat u odnosu na namjeru korisnika i odabire najbolju opciju — zato je pisanje jasnih i specifičnih opisa alata važno.*
+*Model procjenjuje svaki dostupan alat u odnosu na korisničku namjeru i bira najbolju opciju — zbog toga je važno pisati jasne i specifične opise alata.*
-### Izvršenje
+### Izvršavanje
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-Spring Boot automatski povezuje deklarativni `@AiService` sučelje sa svim registriranim alatima, a LangChain4j automatski izvršava pozive alata. Iza scene, kompletan poziv alata prolazi kroz šest faza — od korisnikovog pitanja na prirodnom jeziku sve do odgovora na prirodnom jeziku:
+Spring Boot automatski povezuje deklarativno `@AiService` sučelje sa svim registriranim alatima, a LangChain4j automatski izvršava pozive alata. Iza kulisa, kompletan poziv alata prolazi kroz šest faza — od korisničkog pitanja u prirodnom jeziku do odgovora u istom obliku:
-
+
-*Cjelokupni tijek — korisnik postavi pitanje, model odabere alat, LangChain4j ga izvrši, a model uklopi rezultat u prirodni odgovor.*
+*Krajnji tijek — korisnik postavlja pitanje, model bira alat, LangChain4j ga izvršava, a model uklapa rezultat u prirodni odgovor.*
-Ako ste pokrenuli [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) u Modulu 00, već ste vidjeli ovaj obrazac u praksi — alati `Calculator` su pozivani na isti način. Sljedeći sekvencijski dijagram prikazuje što se točno dogodilo tijekom tog demo primjera:
+Iza scene, `AiServices` pokreće isti ciklus pozivanja alata za bilo koji alat — ovdje prikazan s jednostavnim `Calculator`. Sekvencijski dijagram prikazuje što se točno događa u pozadini:
-
+
-*Petlja poziva alata iz Quick Start demo primjera — `AiServices` šalje vašu poruku i šeme alata LLM-u, LLM odgovara pozivom funkcije poput `add(42, 58)`, LangChain4j lokalno izvršava metodu `Calculator`, i vraća rezultat za konačni odgovor.*
+*Ciklus pozivanja alata — `AiServices` šalje vašu poruku i sheme alata LLM-u, LLM vraća funkcijski poziv poput `add(42, 58)`, LangChain4j lokalno izvršava metodu `Calculator`, i rezultat vraća na sastavljanje konačnog odgovora.*
> **🤖 Isprobajte s [GitHub Copilot](https://github.com/features/copilot) Chat:** Otvorite [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) i pitajte:
-> - "Kako funkcionira ReAct obrazac i zašto je efikasan za AI agente?"
+> - "Kako funkcionira ReAct obrazac i zašto je učinkovit za AI agente?"
> - "Kako agent odlučuje koji alat koristiti i kojim redoslijedom?"
-> - "Što se događa ako izvršenje alata ne uspije - kako trebam robusno rukovati greškama?"
+> - "Što se događa ako izvršavanje alata ne uspije - kako robusno rukovati pogreškama?"
### Generiranje odgovora
-Model prima vremenske podatke i formatira ih u odgovor na prirodnom jeziku za korisnika.
+Model prima podatke o vremenu i oblikuje ih u prirodni odgovor za korisnika.
### Arhitektura: Spring Boot automatsko povezivanje
-Ovaj modul koristi LangChain4j integraciju za Spring Boot s deklarativnim `@AiService` sučeljima. Pri pokretanju Spring Boot otkriva svaki `@Component` koji sadrži `@Tool` metode, vaš `ChatModel` instancu i `ChatMemoryProvider` — te ih sve povezuje u jedno `Assistant` sučelje bez dodatnog koda.
+Ovaj modul koristi LangChain4j Spring Boot integraciju s deklarativnim `@AiService` sučeljima. Pri pokretanju, Spring Boot otkriva svaki `@Component` koji sadrži `@Tool` metode, vaš `ChatModel` bean i `ChatMemoryProvider` — te ih povezuje u jedinstveno `Assistant` sučelje bez dodatnog koda.
-
+
-*Sučelje @AiService povezuje ChatModel, komponente alata i davatelja memorije — Spring Boot automatski upravlja povezivanjem.*
+*@AiService sučelje povezuje ChatModel, komponente alata i memory provider — Spring Boot automatski upravlja povezivanjem.*
-Evo potpunog životnog ciklusa zahtjeva kao sekvencijskog dijagrama — od HTTP zahtjeva preko kontrolera, servisa i proxy-ja s automatskim povezivanjem, sve do izvršenja alata i natrag:
+Evo kompletnog životnog ciklusa zahtjeva u obliku sekvencijskog dijagrama — od HTTP zahtjeva kroz kontroler, servis i automatski povezan proxy, do izvršavanja alata i vraćanja:
-
+
-*Cjelokupan životni ciklus zahtjeva u Spring Bootu — HTTP zahtjev prolazi kroz kontroler i servis do automatski povezanog proxy-ja Assistant-a, koji orkestrira LLM i pozive alata.*
+*Kompletan Spring Boot životni ciklus zahtjeva — HTTP zahtjev prolazi kroz kontroler i servis do automatski povezanog Assistant proxy-ja koji orkestrira LLM i pozive alata automatski.*
Ključne prednosti ovog pristupa:
-- **Spring Boot automatsko povezivanje** — ChatModel i alati automatski injektirani
-- **@MemoryId obrazac** — Automatsko upravljanje memorijom temeljeno na sesiji
-- **Pojedinačna instanca** — Assistant kreiran jednom i ponovno korišten radi bolje izvedbe
-- **Izvršenje tipa sigurno za tipove** — Java metode pozvane izravno s konverzijom tipova
-- **Orkestracija više koraka** — Automatska podrška za povezivanje alata u lanac
-- **Nula dodatnog koda** — Nema ručnih `AiServices.builder()` poziva ili memorijskih HashMapa
+- **Spring Boot automatsko povezivanje** — ChatModel i alati injektirani automatski
+- **@MemoryId obrazac** — Automatsko upravljanje memorijom po sesiji
+- **Jedinstvena instanca** — Assistant kreiran jednom i ponovno korišten za bolju izvedbu
+- **Sigurno izvršavanje po tipu** — Java metode pozivane direktno s konverzijom tipova
+- **Višestupanjska orkestracija** — Automatski rukuje povezivanjem alata
+- **Nula suvišnog koda** — Nema ručnih poziva `AiServices.builder()` niti memorijskih HashMap-a
-Alternativni pristupi (ručni `AiServices.builder()`) zahtijevaju više koda i nemaju prednosti Spring Boot integracije.
+Alternativni pristupi (ručni `AiServices.builder()`) zahtijevaju više koda i ne iskorištavaju prednosti Spring Boot integracije.
## Povezivanje alata
-**Povezivanje alata** — Prava snaga agenata temeljena na alatima dolazi do izražaja kada jedno pitanje zahtijeva više alata. Pitajte: "Kakvo je vrijeme u Seattleu u Fahrenheitu?" i agent automatski povezuje dva alata: prvo poziva `getCurrentWeather` da dobije temperaturu u Celzijusima, zatim tu vrijednost prosljeđuje u `celsiusToFahrenheit` za konverziju — sve u jednom krugu razgovora.
+**Povezivanje alata** — prava snaga agenata temeljenih na alatima dolazi do izražaja kad jedno pitanje zahtijeva više alata. Pitajte "Kakvo je vrijeme u Seattleu u Fahrenheitima?" i agent automatski povezuje dva alata: prvo poziva `getCurrentWeather` za temperaturu u Celzijusima, zatim prosljeđuje tu vrijednost u `celsiusToFahrenheit` za konverziju — sve u jednom koraku razgovora.
-
+
*Povezivanje alata u praksi — agent prvo poziva getCurrentWeather, zatim šalje rezultat u Celzijusima u celsiusToFahrenheit i daje objedinjeni odgovor.*
-**Graceful Failures** — Pitajte za vremensku prognozu u gradu koji nije u lažnim podacima. Alat vraća poruku o grešci, a AI objašnjava da ne može pomoći umjesto da se sruši. Alati sigurnosno prijavljuju greške. Dijagram ispod uspoređuje oba pristupa — uz pravilno rukovanje greškama, agent uhvati iznimku i odgovori korisno, bez toga cijela aplikacija pada:
+**Lagana obrada pogrešaka** — Pitajte za vrijeme u gradu koji nije u testnim podacima. Alat vraća poruku o pogrešci, a AI objašnjava da ne može pomoći umjesto da se sruši. Alati se sigurno kvare. Sljedeći dijagram uspoređuje dva pristupa — uz pravilnu obradu pogrešaka, agent hvata iznimku i korisno odgovara, dok bez nje cijela aplikacija pada:
-
+
-*Kada alat zakaže, agent uhvati grešku i odgovara korisnim objašnjenjem umjesto rušenja.*
+*Kad alat zakaže, agent hvata pogrešku i korisno objašnjava umjesto da izazove pad aplikacije.*
-Ovo se događa u jednom krugu razgovora. Agent samostalno orkestrira višestruke pozive alata.
+Sve se događa u jednom koraku razgovora. Agent samostalno orkestrira višestruke pozive alata.
## Pokrenite aplikaciju
-**Provjerite implementaciju:**
+**Provjerite postavke:**
-Provjerite postoji li `.env` datoteka u korijenskom direktoriju s Azure vjerodajnicama (kreirana tijekom Modula 01). Pokrenite ovo iz direktorija modula (`04-tools/`):
+Provjerite postoji li `.env` datoteka u korijenskom direktoriju sa Azure vjerodajnicama (kreirana tijekom Modula 01). Pokrenite ovo iz direktorija ovog modula (`04-tools/`):
**Bash:**
```bash
@@ -207,24 +207,24 @@ Get-Content ..\.env # Trebalo bi prikazati AZURE_OPENAI_ENDPOINT, API_KEY, DEPL
**Pokrenite aplikaciju:**
-> **Napomena:** Ako ste već pokrenuli sve aplikacije koristeći `./start-all.sh` iz korijenskog direktorija (kako je opisano u Modulu 01), ovaj modul već radi na portu 8084. Možete preskočiti naredbe za pokretanje ispod i odmah otići na http://localhost:8084.
+> **Napomena:** Ako ste već pokrenuli sve aplikacije pomoću `./start-all.sh` iz korijena (kako je opisano u Modulu 01), ovaj modul već radi na portu 8084. Možete preskočiti naredbe za pokretanje i odmah otići na http://localhost:8084.
-**Opcija 1: Korištenje Spring Boot Dashboarda (Preporučeno za VS Code korisnike)**
+**Opcija 1: Korištenje Spring Boot nadzorne ploče (preporučeno za korisnike VS Code-a)**
-Dev kontejner uključuje ekstenziju Spring Boot Dashboard koja pruža vizualno sučelje za upravljanje svim Spring Boot aplikacijama. Možete je pronaći u Activity Baru na lijevoj strani VS Code-a (potražite Spring Boot ikonu).
+Razvojni kontejner uključuje ekstenziju Spring Boot Dashboard koja pruža vizualni sučelje za upravljanje svim Spring Boot aplikacijama. Možete je pronaći u traci aktivnosti na lijevoj strani VS Code-a (potražite ikonu Spring Boot).
-Iz Spring Boot Dashboarda možete:
-- Vidjeti sve dostupne Spring Boot aplikacije u radnom prostoru
+Iz Spring Boot nadzorne ploče možete:
+- Vidjeti sve dostupne Spring Boot aplikacije u prostoru za rad
- Pokrenuti/zaustaviti aplikacije jednim klikom
-- Prikazivati logove aplikacije u stvarnom vremenu
-- Pratiti status aplikacije
-Jednostavno kliknite gumb za reprodukciju pored "tools" za pokretanje ovog modula ili pokrenite sve module odjednom.
+- Pregledavati dnevnik aplikacija u stvarnom vremenu
+- Nadzirati status aplikacija
-Evo kako Spring Boot nadzorna ploča izgleda u VS Code-u:
+Jednostavno kliknite gumb za pokretanje pored "tools" da pokrenete ovaj modul, ili pokrenite sve module odjednom.
-
+Evo kako Spring Boot nadzorna ploča izgleda u VS Code-u:
+
-*Spring Boot nadzorna ploča u VS Code-u — pokrenite, zaustavite i pratite sve module s jednog mjesta*
+*Spring Boot nadzorna ploča u VS Code — pokrenite, zaustavite i nadgledajte sve module s jednog mjesta*
**Opcija 2: Korištenje shell skripti**
@@ -256,9 +256,9 @@ cd 04-tools
.\start.ps1
```
-Obje skripte automatski učitavaju varijable okoline iz glavne `.env` datoteke i izgrađuju JAR-ove ako ne postoje.
+Oba skripta automatski učitavaju varijable okoline iz glavne `.env` datoteke i izgradit će JAR-ove ako ne postoje.
-> **Napomena:** Ako želite ručno izgraditi sve module prije pokretanja:
+> **Napomena:** Ako radije želite ručno izgraditi sve module prije pokretanja:
>
> **Bash:**
> ```bash
@@ -272,7 +272,7 @@ Obje skripte automatski učitavaju varijable okoline iz glavne `.env` datoteke i
> mvn clean package -DskipTests
> ```
-Otvorite http://localhost:8084 u vašem pregledniku.
+Otvorite http://localhost:8084 u svom pregledniku.
**Za zaustavljanje:**
@@ -292,96 +292,96 @@ cd ..; .\stop-all.ps1 # Svi moduli
## Korištenje aplikacije
-Aplikacija pruža web sučelje gdje možete komunicirati s AI agentom koji ima pristup alatima za vremensku prognozu i pretvorbu temperature. Evo kako sučelje izgleda — uključuje primjere za brz početak i chat panel za slanje upita:
+Aplikacija pruža web sučelje gdje možete komunicirati s AI agentom koji ima pristup alatima za vremensku prognozu i pretvorbu temperature. Evo kako sučelje izgleda — uključuje primjere za brzi početak i chat panel za slanje zahtjeva:
-
+
*Sučelje AI Agent Tools - brzi primjeri i chat sučelje za interakciju s alatima*
-### Isprobajte jednostavno korištenje alata
+### Isprobajte jednostavnu uporabu alata
-Započnite s jednostavnim zahtjevom: "Pretvori 100 stupnjeva Fahrenheita u Celzijuse". Agent prepoznaje da mu treba alat za pretvorbu temperature, poziva ga s pravim parametrima i vraća rezultat. Primijetite koliko je prirodno — niste naveli koji alat koristiti niti kako ga pozvati.
+Započnite sa jednostavnim zahtjevom: "Pretvori 100 stupnjeva Fahrenheit u Celzij." Agent prepoznaje da treba alat za pretvorbu temperature, poziva ga s odgovarajućim parametrima i vraća rezultat. Primijetite koliko je to prirodno - niste specificirali koji alat koristiti ili kako ga pozvati.
-### Isprobajte povezivanje alata
+### Testirajte lančano korištenje alata
-Sada pokušajte složeniji zahtjev: "Kakvo je vrijeme u Seattleu i pretvori ga u Fahrenheite?" Promatrajte kako agent radi u koracima. Prvo dohvaća vremensku prognozu (koja vraća Celzijuse), prepoznaje da treba pretvoriti u Fahrenheite, poziva alat za pretvorbu i kombinira oba rezultata u jedan odgovor.
+Sada pokušajte nešto složenije: "Kakvo je vrijeme u Seattleu i pretvori ga u Fahrenheit?" Promatrajte kako agent to obrađuje u koracima. Prvo dobiva vremensku prognozu (koja vraća Celzij), prepoznaje da treba pretvoriti u Fahrenheit, poziva alat za pretvorbu i spaja oba rezultata u jedan odgovor.
### Pogledajte tijek razgovora
-Chat sučelje održava povijest razgovora, što vam omogućuje višekratne interakcije. Možete vidjeti sve prethodne upite i odgovore, olakšavajući praćenje razgovora i razumijevanje kako agent gradi kontekst kroz više izmjena.
+Chat sučelje održava povijest razgovora, što vam omogućuje višekratne interakcije. Možete vidjeti sve prethodne upite i odgovore, što olakšava praćenje razgovora i razumijevanje kako agent gradi kontekst kroz više izmjena.
-
+
-*Višekratni razgovor koji pokazuje jednostavne pretvorbe, provjere vremena i povezivanje alata*
+*Višekratni razgovor koji pokazuje jednostavne pretvorbe, preglede vremenske prognoze i lančano korištenje alata*
### Eksperimentirajte s različitim zahtjevima
Isprobajte razne kombinacije:
-- Provjere vremena: "Kakvo je vrijeme u Tokiju?"
-- Pretvorba temperatura: "Koliko je 25°C u Kelvinima?"
+- Pregledi vremenske prognoze: "Kakvo je vrijeme u Tokiju?"
+- Pretvorbe temperature: "Koliko je 25°C u Kelvinu?"
- Kombinirani upiti: "Provjeri vrijeme u Parizu i reci mi je li iznad 20°C"
-Primijetite kako agent interpretira prirodni jezik i preslikava ga na odgovarajuće pozive alata.
+Primijetite kako agent interpretira prirodni jezik i povezuje ga s odgovarajućim pozivima alata.
-## Ključni koncepti
+## Ključni pojmovi
-### ReAct obrazac (razmišljanje i djelovanje)
+### ReAct obrazac (Razmišljanje i djelovanje)
-Agent naizmjenično razmišlja (odlučuje što napraviti) i djeluje (koristi alate). Ovaj obrazac omogućava autonomno rješavanje problema umjesto da samo reagira na upute.
+Agent naizmjence razmišlja (odlučuje što učiniti) i djeluje (koristi alate). Ovaj obrazac omogućuje autonomno rješavanje problema umjesto samo odgovaranja na upute.
### Opisi alata su važni
-Kvaliteta opisa vaših alata izravno utječe na to koliko ih agent koristi. Jasni, specifični opisi pomažu modelu razumjeti kada i kako pozvati svaki alat.
+Kvaliteta opisa vaših alata izravno utječe na to koliko ih agent učinkovito koristi. Jasni, specifični opisi pomažu modelu da razumije kada i kako pozvati svaki alat.
-### Upravljanje sesijama
+### Upravljanje sesijom
-`@MemoryId` anotacija omogućava automatsko upravljanje memorijom na temelju sesija. Svaki ID sesije dobiva vlastitu `ChatMemory` instancu kojom upravlja `ChatMemoryProvider` bean, pa više korisnika može istovremeno komunicirati s agentom bez miješanja razgovora. Sljedeća dijagram ilustrira kako se više korisnika usmjerava u izolirane memorijske pohrane temeljene na njihovim ID-evima sesija:
+@MemoryId anotacija omogućava automatsko upravljanje memorijom baziranom na sesiji. Svakom ID-u sesije dodjeljuje se vlastita instanca `ChatMemory` kojom upravlja `ChatMemoryProvider` bean, tako da više korisnika može istovremeno komunicirati s agentom bez međusobnog miješanja razgovora. Sljedeća shema prikazuje kako su više korisnika usmjereni na izolirane memorijske spremnike prema njihovim ID-ovima sesije:
-
+
-*Svaki ID sesije preslikava se na izoliranu povijest razgovora — korisnici nikada ne vide poruke jedni drugih.*
+*Svaki ID sesije mapira se na izoliranu povijest razgovora — korisnici nikada ne vide poruke jedni drugih.*
-### Rukovanje greškama
+### Rukovanje pogreškama
-Alati mogu zakazati — API-ji mogu isteći, parametri mogu biti neispravni, vanjske usluge mogu pasti. Produkcijski agenti trebaju rukovanje greškama kako bi model mogao objasniti probleme ili pokušati alternative umjesto da se cijela aplikacija sruši. Kada alat baci iznimku, LangChain4j ju uhvati i prosljeđuje poruku o grešci natrag modelu, koji potom može objasniti problem prirodnim jezikom.
+Alati mogu zakašljati — API-ji mogu isteći, parametri mogu biti nevaljani, vanjske usluge mogu prestati raditi. Producenti agenata trebaju rukovanje pogreškama kako bi model mogao objasniti probleme ili pokušati alternative umjesto da cijela aplikacija padne. Kad alat baci iznimku, LangChain4j je uhvati i proslijedi poruku o pogrešci natrag modelu, koji tada može objasniti problem prirodnim jezikom.
## Dostupni alati
-Sljedeći dijagram prikazuje širok ekosustav alata koje možete izgraditi. Ovaj modul pokazuje alate za vremensku prognozu i temperaturu, ali isti `@Tool` obrazac djeluje za bilo koju Java metodu — od upita u bazu podataka do obrade plaćanja.
+Sljedeća ilustracija prikazuje široki ekosustav alata koje možete izgraditi. Ovaj modul demonstrira vremenske i temperaturne alate, ali isti `@Tool` obrazac radi za bilo koju Java metodu — od upita u bazu podataka do obrade plaćanja.
-
+
-*Svaka Java metoda označena s @Tool postaje dostupna AI-u — obrazac se proširuje na baze podataka, API-je, email, rad s datotekama i još mnogo toga.*
+*Svaka Java metoda označena s @Tool postaje dostupna AI-u — obrazac se širi na baze podataka, API-je, e-mail, rad s datotekama i još mnogo toga.*
-## Kada koristiti agente temeljene na alatima
+## Kada koristiti agente koji koriste alate
-Ne svaki zahtjev treba alate. Odluka ovisi o tome treba li AI-u interakcija s vanjskim sustavima ili može odgovoriti iz vlastitog znanja. Sljedeći vodič sažima kada alati donose vrijednost, a kada nisu potrebni:
+Ne treba svaki zahtjev koristiti alate. Odluka ovisi o tome treba li AI interakciju s vanjskim sustavima ili može odgovoriti iz vlastitog znanja. Sljedeći vodič sažima kada alati donose vrijednost, a kada nisu potrebni:
-
+
-*Brzi vodič za odluke — alati služe za podatke u stvarnom vremenu, izračune i akcije; opće znanje i kreativni zadaci ih ne trebaju.*
+*Brzi vodič za odluke — alati su za podatke u stvarnom vremenu, izračune i radnje; opće znanje i kreativni zadaci ih ne trebaju.*
-## Alati nasuprot RAG-u
+## Alati naspram RAG
-Moduli 03 i 04 proširuju mogućnosti AI-a, ali na sasvim različite načine. RAG omogućuje modelu pristup **znanju** dohvaćanjem dokumenata. Alati omogućuju modelu da poduzima **akcije** pozivanjem funkcija. Sljedeći dijagram uspoređuje ove dvije pristupe - od načina rada svakog tijeka rada do kompromisa između njih:
+Moduli 03 i 04 oboje proširuju što AI može učiniti, ali na temeljno različite načine. RAG omogućuje modelu pristup **znanju** dohvaćanjem dokumenata. Alati omogućuju modelu da poduzima **radnje** pozivajući funkcije. Sljedeća ilustracija uspoređuje ova dva pristupa jedan uz drugi — od načina rada svakog tijeka do kompromisa između njih:
-
+
-*RAG dohvaća informacije iz statičnih dokumenata — Alati izvršavaju akcije i dohvaćaju dinamičke, stvarne podatke. Mnogi produkcijski sustavi kombiniraju oboje.*
+*RAG dohvaća informacije iz statičnih dokumenata — alati izvršavaju radnje i dohvaćaju dinamične, podatke u stvarnom vremenu. Mnogi produkcijski sustavi kombiniraju oba.*
-U praksi mnogi produkcijski sustavi kombiniraju oba pristupa: RAG za utemeljenje odgovora u vašoj dokumentaciji, i Alate za dohvaćanje živih podataka ili izvođenje operacija.
+U praksi, mnogi produkcijski sustavi kombiniraju oba pristupa: RAG za osnivanje odgovora u dokumentaciji, i Alate za dohvat uživo podataka ili izvođenje operacija.
-## Sljedeći koraci
+## Daljnji koraci
**Sljedeći modul:** [05-mcp - Model Context Protocol (MCP)](../05-mcp/README.md)
---
-**Navigacija:** [← Prethodni: Modul 03 - RAG](../03-rag/README.md) | [Povratak na početak](../README.md) | [Sljedeći: Modul 05 - MCP →](../05-mcp/README.md)
+**Navigacija:** [← Prethodni: Modul 03 - RAG](../03-rag/README.md) | [Natrag na početak](../README.md) | [Sljedeći: Modul 05 - MCP →](../05-mcp/README.md)
---
-**Izjava o odricanju od odgovornosti**:
-Ovaj dokument preveden je korištenjem AI usluge za prijevod [Co-op Translator](https://github.com/Azure/co-op-translator). Iako težimo točnosti, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku smatra se službenim i autoritativnim. Za važne informacije preporučuje se profesionalni ljudski prijevod. Ne snosimo odgovornost za bilo kakva nesporazuma ili pogrešne interpretacije proizašle iz korištenja ovog prijevoda.
+**Napomena**:
+Ovaj dokument je preveden korištenjem AI prevoditeljskog servisa [Co-op Translator](https://github.com/Azure/co-op-translator). Iako težimo točnosti, imajte na umu da automatski prijevodi mogu sadržavati greške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za važne informacije preporuča se profesionalni ljudski prijevod. Nismo odgovorni za bilo kakva nesporazumevanja ili pogrešne interpretacije koje proizlaze iz korištenja ovog prijevoda.
\ No newline at end of file
diff --git a/translations/hr/README.md b/translations/hr/README.md
index bf817537a..032e06045 100644
--- a/translations/hr/README.md
+++ b/translations/hr/README.md
@@ -6,14 +6,14 @@ Tečaj za izgradnju AI aplikacija s LangChain4j i Azure OpenAI GPT-5.2, od osnov
### 🌐 Podrška za više jezika
-#### Podržano putem GitHub akcije (automatizirano i uvijek ažurirano)
+#### Podržano putem GitHub Akcije (Automatski i uvijek ažurno)
-[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](./README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
+[Arabski](../ar/README.md) | [Bengalski](../bn/README.md) | [Bugarski](../bg/README.md) | [Burmanski (Myanmar)](../my/README.md) | [Kineski (pojednostavljeni)](../zh-CN/README.md) | [Kineski (tradicionalni, Hong Kong)](../zh-HK/README.md) | [Kineski (tradicionalni, Makao)](../zh-MO/README.md) | [Kineski (tradicionalni, Tajvan)](../zh-TW/README.md) | [Hrvatski](./README.md) | [Češki](../cs/README.md) | [Danski](../da/README.md) | [Nizozemski](../nl/README.md) | [Estonski](../et/README.md) | [Finski](../fi/README.md) | [Francuski](../fr/README.md) | [Njemački](../de/README.md) | [Grčki](../el/README.md) | [Hebrejski](../he/README.md) | [Hindi](../hi/README.md) | [Mađarski](../hu/README.md) | [Indonezijski](../id/README.md) | [Talijanski](../it/README.md) | [Japanski](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korejski](../ko/README.md) | [Litavski](../lt/README.md) | [Malajski](../ms/README.md) | [Malajalamski](../ml/README.md) | [Marathi](../mr/README.md) | [Nepalski](../ne/README.md) | [Nigerijski pidžin](../pcm/README.md) | [Norveški](../no/README.md) | [Perzijski (Farsi)](../fa/README.md) | [Poljski](../pl/README.md) | [Portugalski (Brazil)](../pt-BR/README.md) | [Portugalski (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Rumunjski](../ro/README.md) | [Ruski](../ru/README.md) | [Srpski (ćirilica)](../sr/README.md) | [Slovački](../sk/README.md) | [Slovenski](../sl/README.md) | [Španjolski](../es/README.md) | [Svahili](../sw/README.md) | [Švedski](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Tajlandski](../th/README.md) | [Turski](../tr/README.md) | [Ukrajinski](../uk/README.md) | [Urdu](../ur/README.md) | [Vijetnamski](../vi/README.md)
-> **Radije klonirati lokalno?**
+> **Radije želite klonirati lokalno?**
>
-> Ovo spremište uključuje više od 50 prijevoda jezika što znatno povećava veličinu preuzimanja. Za kloniranje bez prijevoda, koristite sparse checkout:
+> Ovaj repozitorij uključuje više od 50 prijevoda jezika što znatno povećava veličinu preuzimanja. Za kloniranje bez prijevoda, upotrijebite sparse checkout:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -29,28 +29,27 @@ Tečaj za izgradnju AI aplikacija s LangChain4j i Azure OpenAI GPT-5.2, od osnov
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> To vam daje sve što vam treba za dovršetak tečaja s mnogo bržim preuzimanjem.
+> Ovo vam daje sve što trebate za dovršetak tečaja s mnogo bržim preuzimanjem.
## Sadržaj
-1. [Brzi početak](00-quick-start/README.md) - Počnite s LangChain4j
-2. [Uvod](01-introduction/README.md) - Naučite osnove LangChain4j
-3. [Izrada upita (Prompt Engineering)](02-prompt-engineering/README.md) - Ovladavanje učinkovitim dizajnom upita
-4. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Izgradite inteligentne sustave zasnovane na znanju
-5. [Alati](04-tools/README.md) - Integrirajte vanjske alate i jednostavne asistente
-6. [MCP (Model Context Protocol)](05-mcp/README.md) - Rad s Model Context Protocol (MCP) i Agent modulima
+1. [Uvod](01-introduction/README.md) - Naučite osnove LangChain4j
+2. [Dizajn upita (Prompt Engineering)](02-prompt-engineering/README.md) - Ovladavanje efektivnim dizajnom upita
+3. [RAG (poboljšana generacija)](03-rag/README.md) - Izgradite inteligentne sustave znanja
+4. [Alati](04-tools/README.md) - Integrirajte vanjske alate i jednostavne asistente
+5. [MCP (Model Context Protocol)](05-mcp/README.md) - Rad s Model Context Protocol (MCP) i agentnim modulima
### Video vodiči
-Svaki modul ima prateću sesiju uživo tijekom koje prolazimo kroz koncepte i kod korak po korak.
+Svaki modul ima prateću live sesiju gdje detaljno prolazimo koncepte i kod korak po korak.
| Modul | Video |
|--------|-------|
-| 01 - Uvod | [Početak rada s LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
-| 02 - Izrada upita | [Izrada upita s LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
+| 01 - Uvod | [Početak s LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
+| 02 - Dizajn upita | [Prompt Engineering s LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
| 03 - RAG | [RAG s LangChain4j](https://www.youtube.com/watch?v=_olq75ZH_eY) |
-| 04 - Alati i 05 - MCP | [AI agenti s alatima i MCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
+| 04 - Alati & 05 - MCP | [AI agenti s alatima i MCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
---
@@ -60,30 +59,30 @@ Svaki modul ima prateću sesiju uživo tijekom koje prolazimo kroz koncepte i ko
> **Brzi početak**
-1. Forkajte ovo spremište na svoj GitHub račun
+1. Napravite fork ovog repozitorija na svoj GitHub račun
2. Kliknite **Code** → karticu **Codespaces** → **...** → **New with options...**
-3. Koristite zadane postavke – odabrati će se razvojnokontejner kreiran za ovaj tečaj
+3. Koristite zadane vrijednosti – ovo će odabrati razvojni kontejner kreiran za ovaj tečaj
4. Kliknite **Create codespace**
5. Pričekajte 5-10 minuta da se okruženje pripremi
-6. Odmah krenite na [Brzi početak](./00-quick-start/README.md) da započnete!
+6. Odmah krenite na [Uvod](./01-introduction/README.md) i započnite!
Nakon dovršetka modula, istražite [Vodič za testiranje](docs/TESTING.md) da vidite koncepte testiranja LangChain4j u praksi.
-> **Napomena:** Ova obuka koristi i GitHub modele i Azure OpenAI. Modul [Brzi početak](00-quick-start/README.md) koristi GitHub modele (nije potrebna pretplata na Azure), dok moduli 1-5 koriste Azure OpenAI. Počnite s [BESPLATNIM Azure računom](https://aka.ms/azure-free-account) ako ga nemate.
+> **Napomena:** Ova obuka koristi Azure OpenAI. Započnite s [BESPLATNIM Azure računom](https://aka.ms/azure-free-account) ako ga još nemate.
## Učenje s GitHub Copilotom
-Za brz početak kodiranja otvorite ovaj projekt u GitHub Codespaceu ili svojem lokalnom IDE-u koristeći priloženi devcontainer. Devcontainer korišten u ovom tečaju dolazi unaprijed konfiguriran s GitHub Copilotom za AI u parnom programiranju.
+Da brzo započnete s kodiranjem, otvorite ovaj projekt u GitHub Codespace ili u svom lokalnom IDE-u s priloženim devcontainerom. Devcontainer korišten u ovom tečaju dolazi unaprijed konfiguriran s GitHub Copilotom za AI zajedničko programiranje.
Svaki primjer koda uključuje predložena pitanja koja možete postaviti GitHub Copilotu za dublje razumijevanje. Potražite 💡/🤖 oznake u:
-- **zaglavljima Java datoteka** - pitanja specifična za svaki primjer
-- **README datotekama modula** - istraživačke upute nakon primjera koda
+- **Zaglavlja Java datoteka** - Pitanja specifična za svaki primjer
+- **READMEs modula** - Poticaji za istraživanje nakon primjera koda
**Kako koristiti:** Otvorite bilo koju datoteku s kodom i postavite Copilotu predložena pitanja. Ima potpuni kontekst baze koda i može objasniti, proširiti i predložiti alternative.
-Želite li naučiti više? Pogledajte [Copilot za AI parno programiranje](https://aka.ms/GitHubCopilotAI).
+Želite li saznati više? Pogledajte [Copilot za AI zajedničko programiranje](https://aka.ms/GitHubCopilotAI).
## Dodatni resursi
@@ -103,7 +102,7 @@ Svaki primjer koda uključuje predložena pitanja koja možete postaviti GitHub
---
-### Generativni AI serijal
+### Serija Generativnog AI
[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
@@ -111,40 +110,40 @@ Svaki primjer koda uključuje predložena pitanja koja možete postaviti GitHub
---
-### Osnovno učenje
+### Temeljno učenje
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
-[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
+[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
-### Copilot serija
-[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
+### Serija Copilot
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
## Dobivanje pomoći
-Ako zapnete ili imate bilo kakvih pitanja o izradi AI aplikacija, pridružite se:
+Ako zapnete ili imate pitanja o izradi AI aplikacija, pridružite se:
[](https://aka.ms/foundry/discord)
-Ako imate povratne informacije o proizvodu ili greške tijekom izrade, posjetite:
+Ako imate povratne informacije o proizvodu ili se pojave greške tijekom izrade, posjetite:
[](https://aka.ms/foundry/forum)
## Licenca
-MIT licenca - Pogledajte datoteku [LICENSE](../../LICENSE) za detalje.
+MIT licenca - pogledajte datoteku [LICENSE](../../LICENSE) za detalje.
---
-**Odricanje od odgovornosti**:
-Ovaj dokument preveden je korištenjem AI prevoditeljskog servisa [Co-op Translator](https://github.com/Azure/co-op-translator). Iako težimo točnosti, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni ljudski prijevod. Ne odgovaramo za bilo kakve nesporazume ili kriva tumačenja koja proizlaze iz uporabe ovog prijevoda.
+**Napomena**:
+Ovaj dokument je preveden korištenjem AI prevoditeljskog servisa [Co-op Translator](https://github.com/Azure/co-op-translator). Iako težimo točnosti, imajte na umu da automatski prijevodi mogu sadržavati greške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za važne informacije preporuča se profesionalni ljudski prijevod. Nismo odgovorni za bilo kakva nesporazumevanja ili pogrešne interpretacije koje proizlaze iz korištenja ovog prijevoda.
\ No newline at end of file
diff --git a/translations/hr/docs/GLOSSARY.md b/translations/hr/docs/GLOSSARY.md
index 54eb6e08f..e8a388328 100644
--- a/translations/hr/docs/GLOSSARY.md
+++ b/translations/hr/docs/GLOSSARY.md
@@ -2,145 +2,145 @@
## Sadržaj
-- [Osnovni pojmovi](../../../docs)
-- [Komponente LangChain4j](../../../docs)
-- [Pojmovi AI/ML](../../../docs)
-- [Sigurnosne mjere](../../../docs)
-- [Inženjerstvo upita](../../../docs)
-- [RAG (Generiranje uz pomoć dohvaćanja)](../../../docs)
-- [Agent i alati](../../../docs)
-- [Agentni modul](../../../docs)
-- [Protokol konteksta modela (MCP)](../../../docs)
-- [Azure usluge](../../../docs)
-- [Testiranje i razvoj](../../../docs)
-
-Brzi pregled termina i pojmova korištenih tijekom tečaja.
+- [Osnovni pojmovi](#osnovni-pojmovi)
+- [Komponente LangChain4j](#komponente-langchain4j)
+- [Pojmovi iz AI/ML](#pojmovi-iz-aiml)
+- [Zaštitne mjere](#zaštitne-mjere)
+- [Inženjering promptova](#prompt-engineering---module-02)
+- [RAG (Retrieval-Augmented Generation)](#rag-retrieval-augmented-generation---module-03)
+- [Agent i alati](#agents-and-tools---module-04)
+- [Agentni modul](#agentic-module---module-05)
+- [Protokol konteksta modela (MCP)](#model-context-protocol-mcp---module-05)
+- [Azure usluge](#azure-services---module-01)
+- [Testiranje i razvoj](#testing-and-development---testing-guide)
+
+Brzi pregled termina i koncepata korištenih kroz cijeli tečaj.
## Osnovni pojmovi
-**AI Agent** - Sustav koji koristi AI za autonomno zaključivanje i djelovanje. [Modul 04](../04-tools/README.md)
+**AI agent** - Sustav koji koristi AI za zaključivanje i autonomno djelovanje. [Modul 04](../04-tools/README.md)
-**Lanac** - Sekvenca operacija gdje izlaz služi kao ulaz za sljedeći korak.
+**Lanac** - Niz operacija gdje izlaz služi kao ulaz u sljedeći korak.
-**Chunking** - Razbijanje dokumenata na manje dijelove. Tipično: 300-500 tokena s preklapanjem. [Modul 03](../03-rag/README.md)
+**Chunking** - Dijeljenje dokumenata na manje dijelove. Tipično: 300-500 tokena s preklapanjem. [Modul 03](../03-rag/README.md)
-**Prozor konteksta** - Maksimalan broj tokena koje model može obraditi. GPT-5.2: 400K tokena (do 272K ulaz, 128K izlaz).
+**Prozor konteksta** - Maksimalni broj tokena koje model može obraditi. GPT-5.2: 400K tokena (do 272K ulaz, 128K izlaz).
**Ugrađivanja (Embeddings)** - Numerički vektori koji predstavljaju značenje teksta. [Modul 03](../03-rag/README.md)
-**Pozivanje funkcije** - Model generira strukturirane zahtjeve za pozivanje vanjskih funkcija. [Modul 04](../04-tools/README.md)
+**Pozivanje funkcija** - Model generira strukturirane zahtjeve za pozivanje vanjskih funkcija. [Modul 04](../04-tools/README.md)
**Halucinacija** - Kada modeli generiraju netočne, ali uvjerljive informacije.
-**Upit (Prompt)** - Tekstualni ulaz za jezični model. [Modul 02](../02-prompt-engineering/README.md)
+**Prompt** - Tekstualni ulaz za jezični model. [Modul 02](../02-prompt-engineering/README.md)
-**Semantičko pretraživanje** - Pretraživanje prema značenju koristeći ugrađivanja, ne ključne riječi. [Modul 03](../03-rag/README.md)
+**Semantičko pretraživanje** - Pretraživanje po značenju pomoću embeddingsa, ne ključnih riječi. [Modul 03](../03-rag/README.md)
-**Stanje vs Bez stanja** - Bez stanja: bez memorije. Sa stanjem: čuva povijest razgovora. [Modul 01](../01-introduction/README.md)
+**Stanje s memorijom vs bez memorije** - Bez memorije: nema pamćenja. Sa memorijom: održava povijest razgovora. [Modul 01](../01-introduction/README.md)
-**Tokeni** - Osnovne tekstualne jedinice koje modeli obrađuju. Utječu na troškove i ograničenja. [Modul 01](../01-introduction/README.md)
+**Tokeni** - Osnovne jedinice teksta koje modeli obrađuju. Utječu na troškove i ograničenja. [Modul 01](../01-introduction/README.md)
**Lančano korištenje alata** - Sekvencijalno izvođenje alata gdje izlaz informira sljedeći poziv. [Modul 04](../04-tools/README.md)
## Komponente LangChain4j
-**AiServices** - Stvara tip-sigurne sučelja AI usluga.
+**AiServices** - Kreira tip-sigurne sučelje AI servisa.
-**OpenAiOfficialChatModel** - Ujedinjeni klijent za OpenAI i Azure OpenAI modele.
+**OpenAiOfficialChatModel** - Unificirani klijent za OpenAI i Azure OpenAI modele.
-**OpenAiOfficialEmbeddingModel** - Stvara ugrađivanja pomoću službenog OpenAI klijenta (podržava i OpenAI i Azure OpenAI).
+**OpenAiOfficialEmbeddingModel** - Kreira embeddings koristeći OpenAI Official klijent (podržava i OpenAI i Azure OpenAI).
**ChatModel** - Osnovno sučelje za jezične modele.
-**ChatMemory** - Čuva povijest razgovora.
+**ChatMemory** - Održava povijest razgovora.
**ContentRetriever** - Pronalazi relevantne dijelove dokumenata za RAG.
-**DocumentSplitter** - Razbija dokumente na dijelove.
+**DocumentSplitter** - Dijeli dokumente na dijelove.
**EmbeddingModel** - Pretvara tekst u numeričke vektore.
-**EmbeddingStore** - Pohranjuje i dohvaća ugrađivanja.
+**EmbeddingStore** - Sprema i dohvaća embeddings.
-**MessageWindowChatMemory** - Održava pomični prozor nedavnih poruka.
+**MessageWindowChatMemory** - Održava klizni prozor s nedavnim porukama.
-**PromptTemplate** - Stvara ponovno upotrebljive upite s oznakama `{{variable}}`.
+**PromptTemplate** - Kreira ponovo iskoristive promptove s `{{promjenjiva}}` rezerviranim mjestima.
-**TextSegment** - Tekstualni dio s metapodacima. Koristi se u RAG.
+**TextSegment** - Tekstualni dio s metapodacima. Koristi se u RAG-u.
-**ToolExecutionRequest** - Predstavlja zahtjev za izvršenje alata.
+**ToolExecutionRequest** - Predstavlja zahtjev za izvođenje alata.
-**UserMessage / AiMessage / SystemMessage** - Vrste poruka u razgovoru.
+**UserMessage / AiMessage / SystemMessage** - Tipovi poruka u razgovoru.
-## Pojmovi AI/ML
+## Pojmovi iz AI/ML
-**Few-Shot učenje** - Davanje primjera u upitima. [Modul 02](../02-prompt-engineering/README.md)
+**Few-Shot Learning** - Davanje primjera u promptovima. [Modul 02](../02-prompt-engineering/README.md)
-**Veliki jezični model (LLM)** - AI modeli trenirani na ogromnim količinama tekstualnih podataka.
+**Veliki jezični model (LLM)** - AI modeli trenirani na ogromnim tekstualnim podacima.
-**Napori zaključivanja** - Parametar GPT-5.2 koji kontrolira dubinu razmišljanja. [Modul 02](../02-prompt-engineering/README.md)
+**Poteškoća rezoniranja** - GPT-5.2 parametar koji kontrolira dubinu razmišljanja. [Modul 02](../02-prompt-engineering/README.md)
-**Temperatura** - Kontrolira nasumičnost izlaza. Niska=deterministički, visoka=kreativni.
+**Temperatura** - Kontrolira nasumičnost izlaza. Niska = deterministički, visoka = kreativno.
-**Vektorska baza podataka** - Specijalizirana baza za ugrađivanja. [Modul 03](../03-rag/README.md)
+**Vektorska baza podataka** - Specijalizirana baza za embeddings. [Modul 03](../03-rag/README.md)
-**Zero-Shot učenje** - Izvođenje zadataka bez primjera. [Modul 02](../02-prompt-engineering/README.md)
+**Zero-Shot Learning** - Izvođenje zadataka bez primjera. [Modul 02](../02-prompt-engineering/README.md)
-## Sigurnosne mjere - [Modul 00](../00-quick-start/README.md)
+## Zaštitne mjere
-**Defense in Depth** - Višeslojni sigurnosni pristup koji kombinira sigurnosne mjere na razini aplikacije s provjerama pružatelja usluga.
+**Defenziva u dubini** - Višeslojni sigurnosni pristup koji kombinira zaštitne mjere na razini aplikacije i sigurnosne filtre pružatelja.
-**Hard Block** - Pružatelj vraća HTTP 400 grešku za ozbiljne povrede sadržaja.
+**Hard Block** - Pružatelj daje HTTP 400 grešku za teška kršenja sadržaja.
-**InputGuardrail** - Sučelje LangChain4j za provjeru korisničkog unosa prije nego što dođe do LLM-a. Štedi troškove i kašnjenje blokiranjem štetnih upita rano.
+**InputGuardrail** - LangChain4j sučelje za validaciju korisničkog unosa prije nego dođe do LLM-a. Štedi troškove i latenciju blokirajući štetne unose na početku.
-**InputGuardrailResult** - Povratni tip za validaciju čuvara: `success()` ili `fatal("razlog")`.
+**InputGuardrailResult** - Povratni tip za validaciju pravilnika: `success()` ili `fatal("razlog")`.
-**OutputGuardrail** - Sučelje za provjeru AI odgovora prije vraćanja korisnicima.
+**OutputGuardrail** - Sučelje za validaciju AI odgovora prije vraćanja korisnicima.
-**Provider Safety Filters** - Ugrađeni filtri sadržaja pružatelja AI usluga (npr. GitHub Models) koji hvataju povrede na razini API-ja.
+**Provider Safety Filters** - Ug built-in filtri sadržaja od AI pružatelja usluga (npr. Azure OpenAI) koji sprečavaju kršenja na razini API-ja.
-**Soft Refusal** - Model pristojno odbija odgovoriti bez bacanja greške.
+**Soft Refusal** - Model uljudno odbija odgovoriti bez bacanja greške.
-## Inženjerstvo upita - [Modul 02](../02-prompt-engineering/README.md)
+## Inženjering promptova - [Modul 02](../02-prompt-engineering/README.md)
-**Lanac razmišljanja** - Zaključenje korak po korak za veću preciznost.
+**Lanac razmišljanja (Chain-of-Thought)** - Korak-po-korak razmišljanje za bolju točnost.
**Ograničeni izlaz** - Nametanje određenog formata ili strukture.
-**Visoka želja za odgovorom** - Uzorak GPT-5.2 za temeljito zaključivanje.
+**Visoka motivacija** - GPT-5.2 obrazac za temeljito rezoniranje.
-**Niska želja za odgovorom** - Uzorak GPT-5.2 za brze odgovore.
+**Niska motivacija** - GPT-5.2 obrazac za brze odgovore.
-**Višekratni razgovor** - Održavanje konteksta kroz razmjenu poruka.
+**Višekratni dijalog** - Održavanje konteksta kroz razmjene.
-**Uloge u upitu** - Postavljanje modela kroz sistemske poruke.
+**Prompt po ulozi** - Postavljanje modela na određenu osobu putem sistemskih poruka.
-**Samosvijest** - Model procjenjuje i poboljšava svoj izlaz.
+**Samo-refleksija** - Model evaluira i poboljšava vlastiti izlaz.
**Strukturirana analiza** - Fiksni okvir za evaluaciju.
-**Uzorkovanje izvršenja zadatka** - Planiraj → Izvrši → Sažmi.
+**Obrazac izvršavanja zadataka** - Planirati → Izvršiti → Sažeti.
-## RAG (Generiranje uz pomoć dohvaćanja) - [Modul 03](../03-rag/README.md)
+## RAG (Retrieval-Augmented Generation) - [Modul 03](../03-rag/README.md)
-**Cjevovod obrade dokumenata** - Učitavanje → dijeljenje → ugrađivanje → pohrana.
+**Procesiranje dokumenata** - Učitavanje → dijeljenje → ugrađivanje → pohrana.
-**Pohrana ugrađivanja u memoriji** - Nepostojana pohrana za testiranje.
+**Ugrađivanje u memoriji** - Nepostojana pohrana za testiranje.
-**RAG** - Kombinira dohvaćanje i generiranje za utemeljenje odgovora.
+**RAG** - Kombinira dohvaćanje podataka s generiranjem za utemeljene odgovore.
**Ocjena sličnosti** - Mjera (0-1) semantičke sličnosti.
-**Izvorni referent** - Metapodaci o dohvaćenom sadržaju.
+**Referenca izvora** - Metapodaci o dohvaćenom sadržaju.
## Agent i alati - [Modul 04](../04-tools/README.md)
-**@Tool anotacija** - Označava Java metode kao AI-pozive alata.
+**@Tool oznaka** - Označava Java metode kao alate dostupne za AI pozive.
-**ReAct uzorak** - Razmišljaj → Djeluj → Promatraj → Ponavljaj.
+**ReAct obrazac** - Razmišljaj → Djeluj → Promatraj → Ponavljaj.
-**Upravljanje sesijom** - Odvojeni konteksti za različite korisnike.
+**Upravljanje sesijama** - Odvojeni konteksti za različite korisnike.
**Alat** - Funkcija koju AI agent može pozvati.
@@ -148,85 +148,83 @@ Brzi pregled termina i pojmova korištenih tijekom tečaja.
## Agentni modul - [Modul 05](../05-mcp/README.md)
-**@Agent anotacija** - Označava sučelja kao AI agente s deklarativnim definiranje ponašanja.
+**@Agent oznaka** - Označava sučelja kao AI agente s deklarativnim definiranjem ponašanja.
-**Agentni slušatelj** - Kukica za praćenje izvršenja agenta preko `beforeAgentInvocation()` i `afterAgentInvocation()`.
+**Agent Listener** - Kuka za praćenje izvođenja agenta putem `beforeAgentInvocation()` i `afterAgentInvocation()`.
-**Agentni opseg** - Zajednička memorija gdje agenti pohranjuju rezultate koristeći `outputKey` za korištenje od strane drugih agenata.
+**Agentni opseg (Agentic Scope)** - Dijeljena memorija u koju agenti pohranjuju rezultate koristeći `outputKey` za konzumaciju od strane drugih agenata.
-**AgenticServices** - Tvornica za kreiranje agenata s `agentBuilder()` i `supervisorBuilder()`.
+**AgenticServices** - Tvornica za kreiranje agenata koristeći `agentBuilder()` i `supervisorBuilder()`.
-**Uvjetni tok rada** - Usmjeravanje prema uvjetima različitim specijalističkim agentima.
+**Uvjetni tijek rada** - Usmjeravanje prema uvjetima različitim specijaliziranim agentima.
-**Ljudski u petlji** - Uzorak toka rada koji dodaje ljudsku kontrolu za odobrenje ili pregled sadržaja.
+**Human-in-the-Loop** - Obrazac tijeka rada koji uključuje ljudske točke odobravanja ili pregleda sadržaja.
-**langchain4j-agentic** - Maven ovisnost za deklarativnu izgradnju agenata (eksperimentalno).
+**langchain4j-agentic** - Maven ovisnost za deklarativno građenje agenata (eksperimentalno).
-**Petlja toka rada** - Ponavljanje izvršenja agenta dok se ne zadovolji uvjet (npr. ocjena kvalitete ≥ 0.8).
+**Petlja u tijeku rada** - Iteracija izvođenja agenta dok se ne ispuni uvjet (npr. ocjena kvalitete ≥ 0.8).
-**outputKey** - Parametar anotacije agenta koji specificira gdje se rezultati pohranjuju u Agentni opseg.
+**outputKey** - Parametar oznake agenta koji specificira gdje se rezultati spremaju u Agentni opseg.
-**Paralelni tok rada** - Istovremeno pokretanje više agenata za neovisne zadatke.
+**Paralelni tijek rada** - Istovremeno pokretanje više agenata za nezavisne zadatke.
**Strategija odgovora** - Kako nadzornik formulira konačni odgovor: LAST, SUMMARY ili SCORED.
-**Sekvencijalni tok rada** - Izvršavanje agenata po redu gdje izlaz teče u sljedeći korak.
+**Sekvencijalni tijek rada** - Izvršavanje agenata redom gdje izlaz teče u sljedeći korak.
-**Uzorak nadzornog agenta** - Napredni agentni uzorak gdje nadzorni LLM dinamički odlučuje koje pod-agente pozvati.
+**Obrazac nadzornog agenta** - Napredni agentni obrazac gdje nadzorni LLM dinamički odlučuje koje pod-agente pozvati.
## Protokol konteksta modela (MCP) - [Modul 05](../05-mcp/README.md)
-**langchain4j-mcp** - Maven ovisnost za MCP integraciju u LangChain4j.
+**langchain4j-mcp** - Maven ovisnost za integraciju MCP-a u LangChain4j.
-**MCP** - Protokol konteksta modela: standard za povezivanje AI aplikacija s vanjskim alatima. Izradi jednom, koristi svugdje.
+**MCP** - Model Context Protocol: standard za povezivanje AI aplikacija s vanjskim alatima. Izradi jednom, koristi svugdje.
-**MCP klijent** - Aplikacija koja se povezuje s MCP serverima za otkrivanje i korištenje alata.
+**MCP klijent** - Aplikacija koja se povezuje na MCP servere radi otkrivanja i korištenja alata.
-**MCP server** - Usluga koja izlaže alate preko MCP s jasnim opisima i šemama parametara.
+**MCP server** - Usluga koja izlaže alate putem MCP-a s jasnim opisima i shemama parametara.
-**McpToolProvider** - Komponenta LangChain4j koja omotava MCP alate za korištenje u AI uslugama i agentima.
+**McpToolProvider** - Komponenta LangChain4j koja umotava MCP alate za korištenje u AI servisima i agentima.
**McpTransport** - Sučelje za MCP komunikaciju. Implementacije uključuju Stdio i HTTP.
-**Stdio transport** - Transport lokalnog procesa preko stdin/stdout. Korisno za pristup datotečnom sustavu ili komandnoj liniji.
+**Stdio transport** - Lokalni procesni transport putem stdin/stdout. Koristan za pristup datotečnom sustavu ili CLI alate.
-**StdioMcpTransport** - Implementacija LangChain4j koja pokreće MCP server kao podproces.
+**StdioMcpTransport** - LangChain4j implementacija koja pokreće MCP server kao podproces.
-**Otkriće alata** - Klijent pita server za dostupne alate s opisima i šemama.
+**Otkrivanje alata** - Klijent upituje server za dostupne alate s opisima i shemama.
## Azure usluge - [Modul 01](../01-introduction/README.md)
-**Azure AI Search** - Oblak pretraživanja s vektorskim mogućnostima. [Modul 03](../03-rag/README.md)
+**Azure AI Search** - Cloud pretraživanje s vektorskim mogućnostima. [Modul 03](../03-rag/README.md)
-**Azure Developer CLI (azd)** - Deploy Azure resursa.
+**Azure Developer CLI (azd)** - Alat za deploy Azure resursa.
-**Azure OpenAI** - Microsoftova AI servisna platforma za poduzeća.
+**Azure OpenAI** - Microsoftova enterprise AI usluga.
-**Bicep** - Azure jezik za infrastrukturu kao kod. [Vodič za infrastrukturu](../01-introduction/infra/README.md)
+**Bicep** - Jezik za infrastrukturu kao kod u Azure-u. [Vodič za infrastrukturu](../01-introduction/infra/README.md)
-**Naziv implementacije** - Ime za implementaciju modela u Azureu.
+**Ime deploymenta** - Naziv za postavljanje modela u Azure.
-**GPT-5.2** - Najnoviji OpenAI model s kontrolom zaključivanja. [Modul 02](../02-prompt-engineering/README.md)
+**GPT-5.2** - Najnoviji OpenAI model s kontrolom rezoniranja. [Modul 02](../02-prompt-engineering/README.md)
## Testiranje i razvoj - [Vodič za testiranje](TESTING.md)
**Dev Container** - Kontejnerizirano razvojno okruženje. [Konfiguracija](../../../.devcontainer/devcontainer.json)
-**GitHub modeli** - Besplatno AI igralište za modele. [Modul 00](../00-quick-start/README.md)
-
**Testiranje u memoriji** - Testiranje s pohranom u memoriji.
**Integracijsko testiranje** - Testiranje s pravom infrastrukturom.
**Maven** - Alat za automatizaciju gradnje za Javu.
-**Mockito** - Java okvir za izradu imitacija (mock).
+**Mockito** - Java framework za izradu lažnih objekata.
-**Spring Boot** - Java aplikacijski okvir. [Modul 01](../01-introduction/README.md)
+**Spring Boot** - Java aplikacijski framework. [Modul 01](../01-introduction/README.md)
---
-**Izjava o odricanju odgovornosti**:
-Ovaj dokument je preveden korištenjem AI prevoditeljskog servisa [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo biti točni, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati službenim i autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni ljudski prijevod. Ne snosimo odgovornost za bilo kakve nesporazume ili kriva tumačenja koja proizlaze iz korištenja ovog prijevoda.
+**Napomena**:
+Ovaj dokument je preveden korištenjem AI prevoditeljskog servisa [Co-op Translator](https://github.com/Azure/co-op-translator). Iako težimo točnosti, imajte na umu da automatski prijevodi mogu sadržavati greške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za važne informacije preporuča se profesionalni ljudski prijevod. Nismo odgovorni za bilo kakva nesporazumevanja ili pogrešne interpretacije koje proizlaze iz korištenja ovog prijevoda.
\ No newline at end of file
diff --git a/translations/hr/docs/TESTING.md b/translations/hr/docs/TESTING.md
index d6d4cb2d4..1812a31d9 100644
--- a/translations/hr/docs/TESTING.md
+++ b/translations/hr/docs/TESTING.md
@@ -2,19 +2,19 @@
## Sadržaj
-- [Brzi početak](../../../docs)
-- [Što testovi pokrivaju](../../../docs)
-- [Pokretanje testova](../../../docs)
-- [Pokretanje testova u VS Code](../../../docs)
-- [Obrasci testiranja](../../../docs)
-- [Filozofija testiranja](../../../docs)
-- [Daljnji koraci](../../../docs)
+- [Brzi početak](#brzi-početak)
+- [Što testovi pokrivaju](#što-testovi-pokrivaju)
+- [Pokretanje testova](#pokretanje-testova)
+- [Pokretanje testova u VS Codeu](#pokretanje-testova-u-vs-codeu)
+- [Obrasci testiranja](#obrasci-testiranja)
+- [Filozofija testiranja](#filozofija-testiranja)
+- [Sljedeći koraci](#sljedeći-koraci)
-Ovaj vodič vodi vas kroz testove koji pokazuju kako testirati AI aplikacije bez potrebe za API ključevima ili vanjskim servisima.
+Ovaj vodič vodi vas kroz testove koji pokazuju kako testirati AI aplikacije bez potrebe za API ključevima ili vanjskim uslugama.
## Brzi početak
-Pokrenite sve testove s jednom naredbom:
+Pokrenite sve testove jednom naredbom:
**Bash:**
```bash
@@ -26,32 +26,31 @@ mvn test
mvn --% test
```
-Kada svi testovi prođu, trebali biste vidjeti izlaz poput donje snimke zaslona — testovi se izvršavaju bez grešaka.
+Kada svi testovi prođu, trebali biste vidjeti izlaz poput zaslonske snimke ispod — testovi su pokrenuti bez pogrešaka.
-
+
-*Uspješno izvršavanje testova koje pokazuje da svi testovi prolaze bez grešaka*
+*Uspješno izvršavanje testova koje pokazuje da svi testovi prolaze bez pogrešaka*
## Što testovi pokrivaju
-Ovaj tečaj se fokusira na **jedinične testove** koji se izvode lokalno. Svaki test prikazuje određeni LangChain4j koncept u izolaciji. Testna piramida ispod prikazuje gdje se jedinični testovi uklapaju — oni čine brzu, pouzdanu osnovu na kojoj se gradi ostatak vaše test strategije.
+Ovaj tečaj fokusira se na **jedinične testove** koji se izvode lokalno. Svaki test prikazuje specifičan LangChain4j koncept u izolaciji. Prikazana je piramida testiranja koja pokazuje gdje se uklapaju jedinični testovi — oni čine brzu, pouzdanu osnovu na kojoj se gradi ostatak vaše test strategije.
-
+
-*Testna piramida koja prikazuje ravnotežu između jediničnih testova (brzi, izolirani), integracijskih testova (stvarne komponente) i end-to-end testova. Ova obuka pokriva jedinično testiranje.*
+*Piramida testiranja koja pokazuje ravnotežu između jediničnih testova (brzi, izolirani), integracijskih testova (stvarne komponente) i end-to-end testova. Ova obuka pokriva jedinično testiranje.*
-| Modul | Testovi | Fokus | Ključne datoteke |
-|--------|-------|-------|-----------|
-| **00 - Brzi početak** | 6 | Predlošci promptova i zamjena varijabli | `SimpleQuickStartTest.java` |
-| **01 - Uvod** | 8 | Memorija razgovora i chat s održavanjem stanja | `SimpleConversationTest.java` |
-| **02 - Inženjering promptova** | 12 | GPT-5.2 obrasci, razine spremnosti, strukturirani izlaz | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | Unos dokumenata, ugradnje, pretraživanje sličnosti | `DocumentServiceTest.java` |
-| **04 - Alati** | 12 | Pozivanje funkcija i povezivanje alata | `SimpleToolsTest.java` |
+| Modul | Testovi | Fokus | Ključne Datoteke |
+|--------|---------|-------|------------------|
+| **01 - Uvod** | 8 | Memorija razgovora i stanje chat-a | `SimpleConversationTest.java` |
+| **02 - Izrada prompta** | 12 | GPT-5.2 obrasci, razine spremnosti, strukturirani izlaz | `SimpleGpt5PromptTest.java` |
+| **03 - RAG** | 10 | Učitavanje dokumenata, embeddings, pretraživanje sličnosti | `DocumentServiceTest.java` |
+| **04 - Alati** | 12 | Pozivanje funkcija i lančanje alata | `SimpleToolsTest.java` |
| **05 - MCP** | 8 | Model Context Protocol sa stdio transportom | `SimpleMcpTest.java` |
## Pokretanje testova
-**Pokreni sve testove iz korijena:**
+**Pokrenite sve testove iz korijena:**
**Bash:**
```bash
@@ -63,7 +62,7 @@ mvn test
mvn --% test
```
-**Pokreni testove za određeni modul:**
+**Pokrenite testove za određeni modul:**
**Bash:**
```bash
@@ -75,11 +74,11 @@ mvn test -pl 01-introduction
**PowerShell:**
```powershell
cd 01-introduction; mvn --% test
-# Ili iz root-a
+# Ili iz korijena
mvn --% test -pl 01-introduction
```
-**Pokreni jednu test klasu:**
+**Pokrenite jednu test klasu:**
**Bash:**
```bash
@@ -91,7 +90,7 @@ mvn test -Dtest=SimpleConversationTest
mvn --% test -Dtest=SimpleConversationTest
```
-**Pokreni određenu test metodu:**
+**Pokrenite specifičnu test metodu:**
**Bash:**
```bash
@@ -103,33 +102,33 @@ mvn test -Dtest=SimpleConversationTest#trebaOdržavatiPovijestRazgovora
mvn --% test -Dtest=SimpleConversationTest#trebaOdržavatiPovijestRazgovora
```
-## Pokretanje testova u VS Code
+## Pokretanje testova u VS Codeu
-Ako koristite Visual Studio Code, Test Explorer pruža grafičko sučelje za pokretanje i otklanjanje pogrešaka u testovima.
+Ako koristite Visual Studio Code, Test Explorer pruža grafičko sučelje za pokretanje i ispravljanje testova.
-*VS Code Test Explorer prikazuje stablo testova sa svim Java test klasama i pojedinačnim test metodama*
+*VS Code Test Explorer koji prikazuje test stablo sa svim Java test klasama i pojedinačnim test metodama*
-**Za pokretanje testova u VS Code:**
+**Za pokretanje testova u VS Codeu:**
-1. Otvorite Test Explorer klikom na ikonu epruvete u Activity Bar-u
+1. Otvorite Test Explorer klikom na ikonu epruvete u trakci aktivnosti
2. Proširite stablo testova da vidite sve module i test klase
-3. Kliknite gumb za reprodukciju pored bilo kojeg testa za pojedinačno pokretanje
-4. Kliknite "Run All Tests" za pokretanje cijelog skupa
-5. Desni klik na bilo koji test i odaberite "Debug Test" za postavljanje breakpoints i korak po korak praćenje koda
+3. Kliknite gumb za pokretanje pokraj bilo kojeg testa da ga pojedinačno pokrenete
+4. Kliknite "Run All Tests" za izvršenje cijelog skupa
+5. Desni klik na bilo koji test i odaberite "Debug Test" za postavljanje točaka prekida i korak po korak praćenje koda
-Test Explorer prikazuje zelene kvačice za prolazne testove i pruža detaljne poruke o greškama kada testovi zakažu.
+Test Explorer prikazuje zelene kvačice za prolazne testove i pruža detaljne poruke o pogreškama kada testovi ne prođu.
## Obrasci testiranja
-### Obrasc 1: Testiranje predložaka promptova
+### Obrazac 1: Testiranje prompt predložaka
-Najjednostavniji obrazac testira predloške promptova bez poziva bilo kojeg AI modela. Provjeravate da li zamjena varijabli radi ispravno i da su promptovi formatirani kako se očekuje.
+Najjednostavniji obrazac testira prompt predloške bez pozivanja ikakvog AI modela. Provjeravate da li zamjena varijabli radi ispravno i da su promptovi formatirani kako se očekuje.
-
+
-*Testiranje predložaka promptova koje pokazuje tijek zamjene varijabli: predložak s rezerviranim mjestima → primjenjene vrijednosti → provjera formatiranog izlaza*
+*Testiranje prompt predložaka koje prikazuje tijek zamjene varijabli: predložak s rezerviranim mjestima → primijenjene vrijednosti → potvrđeni formatirani izlaz*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-Ovaj test se nalazi u `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
-
-**Pokrenite ga:**
-
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#testirajFormatiranjePredloškaUpita
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#testiranjeFormatiranjaPredloškaUpita
-```
+Ovaj obrazac potvrđuje da zamjena varijabli radi ispravno i da su promptovi formatirani kako se očekuje — nije potreban API ključ niti poziv modela.
-### Obrasc 2: Mockiranje jezičnih modela
+### Obrazac 2: Mockiranje jezičnih modela
-Pri testiranju logike razgovora, koristite Mockito za stvaranje lažnih modela koji vraćaju unaprijed određene odgovore. Time testovi postaju brzi, besplatni i deterministički.
+Prilikom testiranja logike razgovora, koristite Mockito za stvaranje lažnih modela koji vraćaju unaprijed određene odgovore. Ovo čini testove brzim, besplatnim i determinističkim.
-*Usporedba koja pokazuje zašto su mockovi preferirani za testiranje: brzi, besplatni, deterministički i ne zahtijevaju API ključeve*
+*Usporedba koja pokazuje zašto su mockovi poželjniji za testiranje: brzi su, besplatni, deterministički i ne zahtijevaju API ključeve*
```java
@ExtendWith(MockitoExtension.class)
@@ -218,15 +205,15 @@ class SimpleConversationTest {
}
```
-Ovaj obrazac se pojavljuje u `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Mock osigurava dosljedno ponašanje kako biste mogli provjeriti ispravno upravljanje memorijom.
+Ovaj obrazac nalazi se u `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Mock jamči dosljedno ponašanje kako bi se moglo potvrditi da upravljanje memorijom radi ispravno.
-### Obrasc 3: Testiranje izolacije razgovora
+### Obrazac 3: Testiranje izolacije razgovora
-Memorija razgovora mora držati korisnike odvojene. Ovaj test provjerava da se konteksti ne miješaju u razgovorima.
+Memorija razgovora mora držati različite korisnike odvojeno. Ovaj test potvrđuje da se razgovori ne miješaju.
-*Testiranje izolacije razgovora prikazuje odvojene memorijske jedinice za različite korisnike kako bi se spriječilo miješanje konteksta*
+*Testiranje izolacije razgovora koje prikazuje odvojene memorijske pohrane za različite korisnike kako bi se spriječilo miješanje konteksta*
```java
@Test
@@ -250,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-Svaki razgovor održava vlastitu neovisnu povijest. U produkcijskim sustavima ova izolacija je ključna za aplikacije s više korisnika.
+Svaki razgovor održava vlastitu neovisnu povijest. U produkcijskim sustavima ova izolacija je ključna za multi-korisničke aplikacije.
-### Obrasc 4: Testiranje alata neovisno
+### Obrazac 4: Testiranje alata neovisno
-Alati su funkcije koje AI može pozvati. Testirajte ih izravno kako biste osigurali da rade ispravno neovisno o AI odlukama.
+Alati su funkcije koje AI može pozivati. Testirajte ih izravno kako biste osigurali da rade ispravno bez obzira na AI odluke.
-*Testiranje alata neovisno prikazuje izvođenje mock alata bez poziva AI-ja radi provjere logike poslovanja*
+*Testiranje alata neovisno koje prikazuje izvršavanje mock alata bez AI poziva za potvrdu poslovne logike*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-Ovi testovi iz `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` potvrđuju logiku alata bez uključenja AI-ja. Primjer povezivanja pokazuje kako izlaz jednog alata ulazi u drugi.
+Ovi testovi iz `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` validiraju logiku alata bez sudjelovanja AI-ja. Primjer lančanja pokazuje kako izlaz jednog alata ulazi u ulaz drugog.
-### Obrasc 5: Testiranje RAG-a u memoriji
+### Obrazac 5: Testiranje RAG u memoriji
-RAG sustavi tradicionalno zahtijevaju vektorske baze podataka i servise za ugradnje. Uz obrazac u memoriji možete testirati cijeli proces bez vanjskih ovisnosti.
+RAG sustavi tradicionalno zahtijevaju vektorske baze podataka i usluge za embeddings. Obrazac u memoriji omogućuje testiranje cijelog procesa bez vanjskih ovisnosti.
-
+
-*Radni proces testiranja RAG-a u memoriji prikazuje parsiranje dokumenata, pohranu ugradnji i pretraživanje sličnosti bez potrebe za bazom podataka*
+*Radni tijek testiranja RAG u memoriji koji prikazuje parsiranje dokumenata, pohranu embeddings i pretraživanje sličnosti bez baze podataka*
```java
@Test
@@ -306,13 +293,13 @@ void testProcessTextDocument() {
}
```
-Ovaj test iz `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` stvara dokument u memoriji i provjerava segmentaciju i rukovanje metapodacima.
+Ovaj test iz `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` stvara dokument u memoriji i provjerava dijeljenje i rukovanje metapodacima.
-### Obrasc 6: Integracijsko testiranje MCP-a
+### Obrazac 6: MCP integracijsko testiranje
-MCP modul testira integraciju Model Context Protocola koristeći stdio transport. Ovi testovi potvrđuju da vaša aplikacija može pokretati i komunicirati s MCP serverima kao podprocesima.
+MCP modul testira Model Context Protocol integraciju koristeći stdio transport. Ovi testovi potvrđuju da vaša aplikacija može pokretati i komunicirati s MCP serverima kao podprocesima.
-Testovi u `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` potvrđuju ponašanje MCP klijenta.
+Testovi u `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` validiraju ponašanje MCP klijenta.
**Pokrenite ih:**
@@ -328,36 +315,35 @@ cd 05-mcp; mvn --% test
## Filozofija testiranja
-Testirajte svoj kod, ne AI. Vaši bi testovi trebali potvrditi kod koji pišete tako što provjeravaju kako se konstruiraju promptovi, kako se upravlja memorijom i kako se izvršavaju alati. Odgovori AI-ja variraju i ne bi trebali biti dio testnih tvrdnji. Pitajte se je li vaš predložak prompta ispravno zamijenio varijable, a ne daje li AI pravi odgovor.
+Testirajte svoj kod, ne AI. Vaši testovi trebaju potvrditi kod koji pišete provjeravajući kako se promptovi konstruiraju, kako se upravlja memorijom i kako alati izvršavaju. AI odgovori variraju i ne bi trebali biti dio testnih tvrdnji. Pitajte se je li vaš prompt predložak ispravno zamijenio varijable, a ne daje li AI točan odgovor.
-Koristite mockove za jezične modele. Oni su vanjske ovisnosti koje su spore, skupe i nedeterminističke. Mockiranje čini testove brzim, sa stotinama milisekundi umjesto sekundi, besplatnim bez troškova API-ja i determinističkim s istim rezultatom svaki put.
+Koristite mockove za jezične modele. Oni su vanjske ovisnosti koje su spore, skupe i nedeterminističke. Mockiranje testove čini brzim s milisekundama umjesto sekundi, besplatnim bez troškova API-ja i determinističkim s istim rezultatom svaki put.
-Držite testove neovisnima. Svaki test bi trebao sam postaviti svoje podatke, ne oslanjati se na druge testove i čisto ih očistiti. Testovi bi trebali prolaziti bez obzira na redoslijed izvršavanja.
+Održavajte testove neovisnima. Svaki test treba postaviti svoje podatke, ne oslanjati se na druge testove i očistiti nakon sebe. Testovi bi trebali prolaziti bez obzira na redoslijed izvođenja.
-Testirajte rubne slučajeve osim ugodnog toka. Isprobajte prazne ulaze, vrlo velike ulaze, posebne znakove, nevaljane parametre i granične uvjete. Oni često otkrivaju greške koje normalna upotreba ne pokazuje.
+Testirajte rubne slučajeve izvan sretnog puta. Isprobajte prazne ulaze, vrlo velike ulaze, posebne znakove, nevažeće parametre i granične uvjete. Oni često otkrivaju pogreške koje normalna upotreba ne pokazuje.
-Koristite deskriptivne nazive. Usporedite `shouldMaintainConversationHistoryAcrossMultipleMessages()` s `test1()`. Prvi vam točno govori što se testira, što olakšava otklanjanje pogrešaka.
+Koristite opisna imena. Usporedite `shouldMaintainConversationHistoryAcrossMultipleMessages()` sa `test1()`. Prvo vam točno govori što se testira, što olakšava otklanjanje pogrešaka.
-## Daljnji koraci
+## Sljedeći koraci
-Sada kada razumijete obrasce testiranja, dublje zaronite u svaki modul:
+Sada kada razumijete obrasce testiranja, detaljnije se upoznajte sa svakim modulom:
-- **[00 - Brzi početak](../00-quick-start/README.md)** - Počnite s osnovama predložaka promptova
- **[01 - Uvod](../01-introduction/README.md)** - Naučite upravljanje memorijom razgovora
-- **[02 - Inženjering promptova](../02/prompt-engineering/README.md)** - Ovladavanje GPT-5.2 obrascima promptova
-- **[03 - RAG](../03-rag/README.md)** - Izgradite sustave za generiranje uz pojačanu pretraživost
-- **[04 - Alati](../04-tools/README.md)** - Implementirajte pozivanje funkcija i lančane alate
+- **[02 - Izrada prompta](../02/prompt-engineering/README.md)** - Savladajte obrasce promptiranja GPT-5.2
+- **[03 - RAG](../03-rag/README.md)** - Izgradite sustave za generiranje potpomognuto pretraživanjem
+- **[04 - Alati](../04-tools/README.md)** - Implementirajte pozivanje funkcija i lančanje alata
- **[05 - MCP](../05-mcp/README.md)** - Integrirajte Model Context Protocol
-README svakog modula pruža detaljna objašnjenja koncepata prikazanih ovdje.
+README svakog modula pruža detaljna objašnjenja pojmova testiranih ovdje.
---
-**Navigacija:** [← Povratak na glavni](../README.md)
+**Navigacija:** [← Natrag na početnu](../README.md)
---
-**Izjava o odricanju od odgovornosti**:
-Ovaj dokument preveo je AI servis za prevođenje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba se smatrati službenim i autoritativnim izvorom. Za kritične informacije preporučujemo profesionalni ljudski prijevod. Ne snosimo odgovornost za bilo kakva nesporazuma ili pogrešna tumačenja koja proizlaze iz upotrebe ovog prijevoda.
+**Napomena**:
+Ovaj dokument je preveden korištenjem AI prevoditeljskog servisa [Co-op Translator](https://github.com/Azure/co-op-translator). Iako težimo točnosti, imajte na umu da automatski prijevodi mogu sadržavati greške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za važne informacije preporuča se profesionalni ljudski prijevod. Nismo odgovorni za bilo kakva nesporazumevanja ili pogrešne interpretacije koje proizlaze iz korištenja ovog prijevoda.
\ No newline at end of file
diff --git a/translations/hu/.co-op-translator.json b/translations/hu/.co-op-translator.json
index 11bc06f1b..4b3e549b9 100644
--- a/translations/hu/.co-op-translator.json
+++ b/translations/hu/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "hu"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-03T02:42:33+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T08:53:38+00:00",
"source_file": "01-introduction/README.md",
"language_code": "hu"
},
@@ -18,20 +18,20 @@
"language_code": "hu"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-03T02:45:44+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T08:49:17+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "hu"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-03T02:47:43+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T08:52:45+00:00",
"source_file": "03-rag/README.md",
"language_code": "hu"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T09:13:06+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T08:51:29+00:00",
"source_file": "04-tools/README.md",
"language_code": "hu"
},
@@ -54,8 +54,8 @@
"language_code": "hu"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T16:51:39+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T08:47:49+00:00",
"source_file": "README.md",
"language_code": "hu"
},
@@ -72,14 +72,14 @@
"language_code": "hu"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-03T02:54:06+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T08:49:44+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "hu"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-03T02:55:03+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T08:50:19+00:00",
"source_file": "docs/TESTING.md",
"language_code": "hu"
}
diff --git a/translations/hu/00-quick-start/README.md b/translations/hu/00-quick-start/README.md
deleted file mode 100644
index 4590cda62..000000000
--- a/translations/hu/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# Modul 00: Gyors áttekintés
-
-## Tartalomjegyzék
-
-- [Bevezető](../../../00-quick-start)
-- [Mi az a LangChain4j?](../../../00-quick-start)
-- [LangChain4j Függőségek](../../../00-quick-start)
-- [Előfeltételek](../../../00-quick-start)
-- [Beállítás](../../../00-quick-start)
- - [1. Szerezd meg a GitHub tokenedet](../../../00-quick-start)
- - [2. Állítsd be a tokenedet](../../../00-quick-start)
-- [Futtasd a példákat](../../../00-quick-start)
- - [1. Alap chat](../../../00-quick-start)
- - [2. Prompt minták](../../../00-quick-start)
- - [3. Függvényhívás](../../../00-quick-start)
- - [4. Dokumentum kérdések és válaszok (Easy RAG)](../../../00-quick-start)
- - [5. Felelős MI](../../../00-quick-start)
-- [Mit mutat be az egyes példa](../../../00-quick-start)
-- [Következő lépések](../../../00-quick-start)
-- [Hibaelhárítás](../../../00-quick-start)
-
-## Bevezető
-
-Ez a gyors indítás célja, hogy minél gyorsabban elindulj a LangChain4j használatával. Megismerteti az AI alkalmazások LangChain4j-vel és GitHub modellekkel történő alapvető építését. A következő modulokban Azure OpenAI és GPT-5.2-re váltasz, és mélyebben belemerülsz az egyes fogalmakba.
-
-## Mi az a LangChain4j?
-
-A LangChain4j egy Java könyvtár, amely leegyszerűsíti az MI-vezérelt alkalmazások készítését. HTTP kliensek és JSON feldolgozás helyett tiszta Java API-kkal dolgozol.
-
-A LangChain "lánc" arra utal, hogy több komponens láncolódik össze – például összekapcsolhatsz egy promptot egy modellel és egy elemzővel, vagy több MI hívás láncolódik, ahol az egyik kimenet a következő bemenete. Ez a gyorsstart az alapokra fókuszál, mielőtt bonyolultabb láncok felé lépne.
-
-
-
-*Komponensek láncolása LangChain4j-ben – építőkövek kapcsolódnak, hogy erős MI munkafolyamatokat hozzanak létre*
-
-Három alapvető komponenst használunk:
-
-**ChatModel** - Az MI modellel való interakciók felülete. Meghívod: `model.chat("prompt")` és kapsz válaszstringet. Az `OpenAiOfficialChatModel`-t használjuk, amely kompatibilis OpenAI végpontokkal, például GitHub modellekkel.
-
-**AiServices** - Típusbiztos MI szolgáltatási interfészek létrehozása. Metódusokat definiálsz, `@Tool` annotációval látod el őket, és a LangChain4j kezeli az összehangolást. Az MI automatikusan hívja Java metódusaidat, ha szükséges.
-
-**MessageWindowChatMemory** - A beszélgetés előzményeit tárolja. Enélkül minden kérés független. Ezzel az MI megjegyzi a korábbi üzeneteket és megőrzi a kontextust több fordulón át.
-
-
-
-*LangChain4j architektúra – alapvető komponensek, amelyek együtt működnek az MI alkalmazásaid hajtásához*
-
-## LangChain4j Függőségek
-
-Ez a gyorsindítás három Maven függőséget használ a [`pom.xml`](../../../00-quick-start/pom.xml) fájlban:
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-A `langchain4j-open-ai-official` modul biztosítja az `OpenAiOfficialChatModel` osztályt, amely OpenAI-kompatibilis API-khoz kapcsolódik. A GitHub Modellek ugyanazt az API formátumot használják, ezért nincs szükség külön adapterre – csak állítsd be az alap URL-t `https://models.github.ai/inference`-re.
-
-A `langchain4j-easy-rag` modul automatikus dokumentumfelosztást, beágyazást és visszakeresést biztosít, így RAG alkalmazásokat építhetsz anélkül, hogy manuálisan konfigurálnád az egyes lépéseket.
-
-## Előfeltételek
-
-**Fejlesztői konténer használata?** Java és Maven már telepítve van. Csak a GitHub Személyes Hozzáférési Tokent kell beszerezned.
-
-**Helyi fejlesztés:**
-- Java 21+, Maven 3.9+
-- GitHub Személyes Hozzáférési Token (utasítások lent)
-
-> **Megjegyzés:** Ez a modul a GitHub Modellek `gpt-4.1-nano` változatát használja. Ne módosítsd a modell nevét a kódban – ez a GitHub elérhető modelljeihez van konfigurálva.
-
-## Beállítás
-
-### 1. Szerezd meg a GitHub tokenedet
-
-1. Nyisd meg a [GitHub Beállítások → Személyes hozzáférési tokenek](https://github.com/settings/personal-access-tokens) oldalt
-2. Kattints a „Generate new token” gombra
-3. Adj meg egy leíró nevet (pl. „LangChain4j Demo”)
-4. Állíts be lejárati időt (7 nap javasolt)
-5. Az „Account permissions” alatt keresd meg a „Models” opciót, és állítsd „Read-only”-ra
-6. Kattints a „Generate token” gombra
-7. Másold ki és mentsd el a tokenedet – később nem fogod látni újra
-
-### 2. Állítsd be a tokenedet
-
-**1. lehetőség: VS Code használata (ajánlott)**
-
-Ha VS Code-ot használsz, add hozzá a tokened a projekt gyökérkönyvtárában lévő `.env` fájlhoz:
-
-Ha a `.env` fájl nem létezik, másold a `.env.example` fájlt `.env` néven, vagy hozz létre egy új `.env` fájlt a projekt gyökerében.
-
-**Példa `.env` fájl:**
-```bash
-# A /workspaces/LangChain4j-for-Beginners/.env fájlban
-GITHUB_TOKEN=your_token_here
-```
-
-Ezután egyszerűen kattints jobb gombbal egy bemutató fájlra (pl. `BasicChatDemo.java`) a Felfedezőben és válaszd a **„Run Java”** opciót, vagy használd a „Run and Debug” panel indítási konfigurációit.
-
-**2. lehetőség: Terminál használata**
-
-Állítsd be a token környezeti változóként:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## Futtasd a példákat
-
-**VS Code használatával:** Egyszerűen kattints jobb gombbal egy bemutató fájlra a Felfedezőben, és válaszd a **„Run Java”** lehetőséget, vagy a „Run and Debug” panel indítási konfigurációit használd (előtte természetesen adj hozzá egy tokent a `.env` fájlhoz).
-
-**Maven használatával:** Vagy a parancssorból futtathatod:
-
-### 1. Alap chat
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. Prompt minták
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-Mutatja a zero-shot, few-shot, chain-of-thought és szerepkör-alapú promptokat.
-
-### 3. Függvényhívás
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-Az MI automatikusan hívja a Java metódusaidat, amikor szükséges.
-
-### 4. Dokumentum kérdések és válaszok (Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-Kérdezz a dokumentumaidról az Easy RAG használatával, automatikus beágyazás és visszakeresés mellett.
-
-### 5. Felelős MI
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-Nézd meg, hogyan blokkolják az MI biztonsági szűrők a káros tartalmakat.
-
-## Mit mutat be az egyes példa
-
-**Alap chat** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-Kezdj itt, hogy meglásd a LangChain4j legegyszerűbb használatát. Létrehozol egy `OpenAiOfficialChatModel`-t, küldesz egy promptot `.chat()`-pel, és kapsz választ. Ez megmutatja az alapokat: hogyan inicializálj modelleket egyedi végpontokkal és API kulcsokkal. Ha megérted ezt a mintát, minden más erre épül.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Chattel:** Nyisd meg a [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) fájlt és kérdezd:
-> - „Hogyan válthatnék a GitHub Modellekről Azure OpenAI-ra ebben a kódban?”
-> - „Milyen egyéb paramétereket állíthatok az OpenAiOfficialChatModel.builder()-ben?”
-> - „Hogyan adhatok streaming válaszokat a teljes válaszra való várakozás helyett?”
-
-**Prompt mérnökség** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-Most, hogy tudod, hogyan beszélj a modellel, nézzük meg, hogy mit mondasz neki. Ez a demó ugyanazt a modell beállítást használja, de öt különböző prompt mintát mutat be. Próbáld ki a zero-shot promptokat közvetlen utasításokra, few-shot promptokat példák alapján való tanulásra, chain-of-thought promptokat az érvelési lépések felfedésére, és szerepalapú promptokat kontextus beállítására. Láthatod, hogyan ad ugyanaz a modell drámaian különböző eredményeket az igény keretezése alapján.
-
-A demó továbbá bemutat prompt sablonokat, amelyek hatékony módszert nyújtanak újrafelhasználható promptok létrehozására változókkal.
-Az alábbi példa egy promptot mutat be a LangChain4j `PromptTemplate` használatával változók kitöltésére. Az MI a megadott célállomás és tevékenység alapján válaszol.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Chattel:** Nyisd meg a [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) fájlt és kérdezd:
-> - „Mi a különbség a zero-shot és a few-shot prompt között, és mikor melyiket érdemes használni?”
-> - „Hogyan befolyásolja a hőmérséklet paraméter a modell válaszait?”
-> - „Milyen technikákkal lehet megelőzni a prompt injekciós támadásokat éles környezetben?”
-> - „Hogyan hozhatok létre újrafelhasználható PromptTemplate objektumokat gyakori mintákhoz?”
-
-**Eszköz integráció** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-Itt lesz igazán erős a LangChain4j. `AiServices` használatával létrehozhatsz egy MI asszisztenst, amely hívja a Java metódusaidat. Csak annotáld a metódusokat `@Tool("leírás")`-ral és a LangChain4j elintézi a többit – az MI automatikusan dönti el, mikor használja az egyes eszközöket a felhasználói kérés alapján. Ez bemutatja a függvényhívást mint kulcsfontosságú technikát az MI vezérelt akciók építéséhez, nem csak kérdések megválaszolásához.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Chattel:** Nyisd meg a [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) fájlt és kérdezd:
-> - „Hogyan működik az @Tool annotáció, és mit csinál vele a LangChain4j a háttérben?”
-> - „Lehet-e az MI több eszközt egymás után hívni összetett problémák megoldására?”
-> - „Mi történik, ha egy eszköz kivételt dob – hogyan kezeljem a hibákat?”
-> - „Hogyan integrálnék egy valódi API-t a kalkulátor példa helyett?”
-
-**Dokumentum kérdések és válaszok (Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-Itt láthatod a RAG (retrieval-augmented generation, tudás-kiegészítő generálás) működését a LangChain4j „Easy RAG” megközelítésével. A dokumentumokat betöltik, automatikusan felosztják és beágyazzák egy memóriában tárolt adatbázisba, majd egy tartalom visszakereső szolgáltatás szolgálat releváns részeket az MInek a lekérdezés idején. Az MI a dokumentumaid alapján válaszol, nem az általa általánosan ismert tudásra támaszkodik.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Chattel:** Nyisd meg a [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) fájlt és kérdezd:
-> - „Hogyan akadályozza meg a RAG az MI tévesztéseket a modell tanítási adataihoz képest?”
-> - „Miben különbözik ez az egyszerű megközelítés egy egyedi RAG csővezetéktől?”
-> - „Hogyan skáláznám ezt több dokumentumra vagy nagyobb tudásbázisokra?”
-
-**Felelős MI** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-Építs MI biztonságot több szintű védelemmel. Ez a demó két védelmi réteget mutat be, amelyek együtt működnek:
-
-**1. rész: LangChain4j bemeneti korlátok** – Megakadályozzák, hogy veszélyes promptok eljussanak a LLM-hez. Egyedi korlátokat hozhatsz létre, amelyek tiltott kulcsszavakat vagy mintákat ellenőriznek. Ezek a kódodban futnak, így gyorsak és ingyenesek.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**2. rész: Szolgáltató biztonsági szűrők** – A GitHub Modellek beépített szűrőket használnak, amelyek elkapják, amit a te korlátjaid esetleg nem. Látsz szigorú blokkokat (HTTP 400 hibákat) súlyos szabálysértéseknél, valamint finomabb visszautasításokat, amikor az MI udvariasan elutasít.
-
-> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Chattel:** Nyisd meg a [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) fájlt és kérdezd:
-> - „Mi az InputGuardrail és hogyan készíthetem el a sajátomat?”
-> - „Mi a különbség a szigorú blokkolás és a finom elutasítás között?”
-> - „Miért használjuk együtt a korlátokat és a szolgáltató szűrőket?”
-
-## Következő lépések
-
-**Következő modul:** [01-bevezető - Kezdés a LangChain4j-vel](../01-introduction/README.md)
-
----
-
-**Navigáció:** [← Vissza a főoldalra](../README.md) | [Következő: Modul 01 - Bevezető →](../01-introduction/README.md)
-
----
-
-## Hibaelhárítás
-
-### Első Maven build
-
-**Probléma:** Az első `mvn clean compile` vagy `mvn package` futtatás sokáig tart (10-15 perc)
-
-**Ok:** A Mavennek meg kell töltenie az összes projektfüggőséget (Spring Boot, LangChain4j könyvtárak, Azure SDK-k stb.) az első build során.
-
-**Megoldás:** Ez normális viselkedés. A további build-ek sokkal gyorsabbak lesznek, mert a függőségek lokálisan cache-lődnek. A letöltési idő a hálózati sebességtől függ.
-
-### PowerShell Maven parancs szintaxis hiba
-
-**Probléma:** A Maven parancsok hibára futnak `Unknown lifecycle phase ".mainClass=..."` üzenettel
-**Ok**: A PowerShell az `=` jelet változóértékadásként értelmezi, ami megszakítja a Maven tulajdonság szintaxisát
-
-**Megoldás**: Használja a stop-parsing `--%` operátort a Maven parancs előtt:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-A `--%` operátor megmondja a PowerShell-nek, hogy az összes fennmaradó argumentumot szó szerint továbbítsa a Mavennek értelmezés nélkül.
-
-### Windows PowerShell Emoji megjelenítés
-
-**Probléma**: Az AI válaszok helyett szemét karakterek jelennek meg (pl. `????` vagy `â??`) PowerShell-ben az emojik helyett
-
-**Ok**: A PowerShell alapértelmezett kódolása nem támogatja az UTF-8 emojikat
-
-**Megoldás**: Futtassa ezt a parancsot Java alkalmazások futtatása előtt:
-```cmd
-chcp 65001
-```
-
-Ez kényszeríti az UTF-8 kódolást a terminálban. Alternatív megoldásként használja a Windows Terminalt, amely jobb Unicode támogatással rendelkezik.
-
-### API hívások hibakeresése
-
-**Probléma**: Hitelesítési hibák, aránykorlátozások vagy váratlan válaszok az AI modelltől
-
-**Megoldás**: A példák tartalmazzák a `.logRequests(true)` és `.logResponses(true)` hívásokat, hogy az API hívások megjelenjenek a konzolon. Ez segít a hitelesítési hibák, aránykorlátozások vagy váratlan válaszok hibakeresésében. Ezeket a zászlókat távolítsa el az éles környezetben a naplózási zaj csökkentése érdekében.
-
----
-
-
-**Jogi Nyilatkozat**:
-Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum a saját nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén professzionális emberi fordítást javaslunk. Nem vállalunk felelősséget az ebből eredő félreértésekért vagy félreértelmezésekért.
-
\ No newline at end of file
diff --git a/translations/hu/01-introduction/README.md b/translations/hu/01-introduction/README.md
index 80bdb5c30..4f108e37e 100644
--- a/translations/hu/01-introduction/README.md
+++ b/translations/hu/01-introduction/README.md
@@ -2,86 +2,86 @@
## Tartalomjegyzék
-- [Videó bemutató](../../../01-introduction)
-- [Amit megtanulsz](../../../01-introduction)
-- [Előfeltételek](../../../01-introduction)
-- [A fő probléma megértése](../../../01-introduction)
-- [Tokenek megértése](../../../01-introduction)
-- [Hogyan működik a memória](../../../01-introduction)
-- [Hogyan használja ezt a LangChain4j](../../../01-introduction)
-- [Azure OpenAI infrastruktúra telepítése](../../../01-introduction)
-- [Alkalmazás futtatása helyileg](../../../01-introduction)
-- [Az alkalmazás használata](../../../01-introduction)
- - [Állapot nélküli csevegés (bal panel)](../../../01-introduction)
- - [Állapotfüggő csevegés (jobb panel)](../../../01-introduction)
-- [Következő lépések](../../../01-introduction)
-
-## Videó bemutató
-
-Nézd meg ezt az élő bemutatót, amely elmagyarázza, hogyan kezdj neki ennek a modulnak:
+- [Videós bemutató](#videós-bemutató)
+- [Mit fogsz megtanulni](#mit-fogsz-megtanulni)
+- [Előfeltételek](#előfeltételek)
+- [Az alapvető probléma megértése](#az-alapvető-probléma-megértése)
+- [Tokenek megértése](#tokenek-megértése)
+- [Hogyan működik a memória](#hogyan-működik-a-memória)
+- [Hogyan használja ezt a LangChain4j](#hogyan-használja-ezt-a-langchain4j)
+- [Azure OpenAI infrastruktúra telepítése](#azure-openai-infrastruktúra-telepítése)
+- [Alkalmazás helyi futtatása](#alkalmazás-helyi-futtatása)
+- [Az alkalmazás használata](#az-alkalmazás-használata)
+ - [Állapot nélküli chat (bal panel)](#állapot-nélküli-chat-bal-panel)
+ - [Állapotkövető chat (jobb panel)](#állapotkövető-chat-jobb-panel)
+- [Következő lépések](#következő-lépések)
+
+## Videós bemutató
+
+Nézd meg ezt az élő adást, amely elmagyarázza, hogyan kezdj neki ennek a modulnak:
-## Amit megtanulsz
+## Mit fogsz megtanulni
-A gyors start során GitHub modelleket használtál promptok küldésére, eszközök meghívására, RAG pipeline építésére és guardrail tesztelésére. Ezek a bemutatók megmutatták, mi lehetséges — most áttérünk az Azure OpenAI és a GPT-5.2 használatára, és elkezdjük produkciós stílusú alkalmazások építését. Ez a modul olyan beszélgető AI-ra fókuszál, amely emlékszik a kontextusra és fenntartja az állapotot — ezek azok a fogalmak, amelyeket a gyors start demók használtak a háttérben, de nem magyaráztak el.
+Ez a kiindulópontod a LangChain4j és Azure OpenAI használatában. Az alapoktól indulunk, és elkezdjük építeni a produkciós stílusú alkalmazásokat. Ez a modul a beszélgető AI-ra fókuszál, amely emlékszik a kontextusra és fenntartja az állapotot — ezek az alapvető fogalmak, amelyekre a későbbi modulok épülnek.
-Az egész útmutató során az Azure OpenAI GPT-5.2-jét használjuk, mert fejlett érvelési képességei miatt a különböző minták viselkedése egyértelműbb. Amikor memóriát adsz hozzá, tisztán látni fogod a különbséget. Ez megkönnyíti annak megértését, hogy az egyes komponensek mit hoznak az alkalmazásodba.
+Az útmutató során az Azure OpenAI GPT-5.2-jét használjuk, mivel fejlett érvelési képességei miatt jobban láthatóvá válik a különböző minták viselkedése. Ha memóriát adsz hozzá, világosan látni fogod a különbséget. Ez megkönnyíti megérteni, hogy melyik komponens mit ad az alkalmazásodhoz.
-Egy alkalmazást építesz, amely mindkét mintát bemutatja:
+Egy alkalmazást fogsz építeni, amely mindkét mintát bemutatja:
-**Állapot nélküli csevegés** - Minden kérés független. A modell nem emlékszik az előző üzenetekre. Ez az a minta, amit a gyors startban használtál.
+**Állapot nélküli chat** – Minden kérés független. A modell nem emlékszik a korábbi üzenetekre. Ez a legegyszerűbb kiindulási pont.
-**Állapotfüggő beszélgetés** - Minden kérés tartalmazza a beszélgetés előzményeit. A modell megőrzi a kontextust több fordulón át. Erre van szükség a produkciós alkalmazásokban.
+**Állapotkövető beszélgetés** – Minden kérés tartalmazza a beszélgetés előzményeit. A modell több fordulón keresztül fenntartja a kontextust. Ez kell a produkciós alkalmazásokhoz.
## Előfeltételek
-- Azure előfizetés Azure OpenAI hozzáféréssel
+- Azure előfizetés Azure OpenAI-hozzáféréssel
- Java 21, Maven 3.9+
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
> **Megjegyzés:** A Java, Maven, Azure CLI és Azure Developer CLI (azd) előre telepítve van a biztosított devcontainerben.
-> **Megjegyzés:** Ez a modul az Azure OpenAI GPT-5.2-jét használja. A telepítés automatikusan a `azd up` paranccsal történik — ne módosítsd a modell nevét a kódban.
+> **Megjegyzés:** Ez a modul az Azure OpenAI GPT-5.2 verzióját használja. A telepítés automatikusan konfigurálódik az `azd up` használatával – NE módosítsd a modell nevét a kódban.
-## A fő probléma megértése
+## Az alapvető probléma megértése
-A nyelvi modellek állapot nélküli működésűek. Minden API hívás független. Ha elküldöd, hogy „A nevem John”, majd megkérdezed, „Mi a nevem?”, a modell nem tudja, hogy épp most mutatkoztál be. Minden kérés úgy kezel, mintha az lenne az első beszélgetésed valaha.
+A nyelvi modellek állapot nélküli(ek). Minden API hívás független. Ha elküldöd, hogy "A nevem John", majd megkérdezed, hogy "Mi a nevem?", a modellnek fogalma sincs, hogy éppen bemutatkoztál. Minden kérést úgy kezel, mintha az lenne az első beszélgetésed valaha.
-Ez egyszerű kérdés-válasz esetén rendben van, de valódi alkalmazásokhoz haszontalan. Az ügyfélszolgálati botoknak emlékezniük kell arra, amit mondtál. A személyi asszisztenseknek szükségük van kontextusra. Bármilyen többfordulós beszélgetés memóriát igényel.
+Ez rendben van egyszerű kérdés-válasz esetén, de semmit sem ér valós alkalmazásokban. Az ügyfélszolgálati botoknak emlékezniük kell arra, amit mondtál nekik. A személyi asszisztenseknek kontextusra van szükségük. Bármilyen többfordulós beszélgetéshez memória kell.
-Az alábbi ábra összehasonlítja a két megközelítést — bal oldalon egy állapot nélküli hívás, amely elfelejti a neved; jobb oldalon egy állapotfüggő hívás, melyet a ChatMemory támogat, és emlékszik rá.
+A következő ábra bemutatja a két megközelítést – bal oldalon egy állapot nélküli hívás, amely elfelejti a neved; jobbra egy állapotkövető hívás a ChatMemory támogatásával, amely emlékszik rá.
-*A különbség az állapot nélküli (független hívások) és az állapotfüggő (kontextus-érzékeny) beszélgetések között*
+*Az állapot nélküli (független hívások) és az állapotkövető (kontextus-érzékeny) beszélgetések közötti különbség*
## Tokenek megértése
-Mielőtt belevágnánk a beszélgetésekbe, fontos megérteni a tokeneket — a szöveg alapvető egységeit, amelyeket a nyelvi modellek feldolgoznak:
+Mielőtt belemerülnénk a beszélgetésekbe, fontos megérteni a tokeneket - a nyelvi modellek által feldolgozott alapvető szövegegységeket:
-*Példa arra, hogyan bontja szét a szöveget tokenekre — az "I love AI!" 4 különálló feldolgozási egységgé válik*
+*Példa arra, hogyan törik fel a szöveg tokenekre – az "I love AI!" 4 külön feldolgozási egységgé válik*
-A tokenek azok, amivel az AI modellek mérik és dolgozzák fel a szöveget. Szavak, írásjelek és akár szóközök is lehetnek tokenek. A modellednek van egy limitje, hogy mennyi tokent tud egyszerre feldolgozni (GPT-5.2 esetén 400,000, ebből legfeljebb 272,000 bemeneti és 128,000 kimeneti token). A tokenek megértése segít a beszélgetések hosszának és költségeinek kezelésében.
+A tokenek azok az egységek, amikkel az AI modellek mérik és feldolgozzák a szöveget. Szavak, írásjelek és akár szóközök is lehetnek tokenek. A modellednek van egy határa, hogy egyszerre hány tokent képes feldolgozni (GPT-5.2 esetében 400,000 token, amiből legfeljebb 272,000 bemeneti és 128,000 kimeneti token lehet). A tokenek megértése segít szabályozni a beszélgetés hosszát és költségeit.
## Hogyan működik a memória
-A beszélgetési memória megoldja az állapot nélküli problémát azáltal, hogy megőrzi a beszélgetés előzményeit. Mielőtt elküldenéd a kérésed a modellnek, a keretrendszer hozzáfűzi a releváns korábbi üzeneteket. Amikor megkérdezed, hogy „Mi a nevem?”, a rendszer valójában az egész beszélgetési előzményt elküldi, lehetővé téve, hogy a modell lássa, hogy korábban azt mondtad, „A nevem John”.
+A chat memória megoldja az állapot nélküli problémát azáltal, hogy fenntartja a beszélgetés előzményeit. Mielőtt elküldenéd a kérést a modellnek, a keretrendszer hozzáfűzi a releváns korábbi üzeneteket. Amikor megkérdezed, hogy "Mi a nevem?", a rendszer valójában az egész beszélgetési előzményt továbbítja, így a modell látja, hogy korábban azt mondtad: "A nevem John."
-A LangChain4j memóriamegoldásokat kínál, amelyek ezt automatikusan kezelik. Meghatározod, hány üzenetet szeretnél megtartani, és a keretrendszer kezeli a kontextusablakot. Az alábbi ábra megmutatja, hogyan tartja karban a MessageWindowChatMemory az üzenetek csúszó ablakát.
+A LangChain4j memória implementációkat biztosít, amelyek ezt automatikusan kezelik. Te választod meg, hány üzenetet szeretnél megtartani, a keretrendszer pedig kezeli a kontextus ablakot. Az alábbi ábra azt mutatja, hogy a MessageWindowChatMemory hogyan tart fenn egy csúszóablakot a legfrissebb üzenetekből.
-*A MessageWindowChatMemory egy csúszó ablakban tartja a legutóbbi üzeneteket, automatikusan kidobva a régi üzeneteket*
+*MessageWindowChatMemory egy csúszóablakot tart fenn a legfrissebb üzenetekből, automatikusan törölve a régebbieket*
## Hogyan használja ezt a LangChain4j
-Ez a modul kiterjeszti a gyors startot a Spring Boot integrálásával és beszélgetési memória hozzáadásával. Így illeszkednek össze a részek:
+Ez a modul integrálja a Spring Boot-ot és hozzáadja a beszélgetési memóriát. Így kapcsolódnak össze az elemek:
-**Függőségek** — Adj hozzá két LangChain4j könyvtárat:
+**Függőségek** – Két LangChain4j könyvtár hozzáadása:
```xml
@@ -94,7 +94,7 @@ Ez a modul kiterjeszti a gyors startot a Spring Boot integrálásával és besz
```
-**Chat modell** — Konfiguráld az Azure OpenAI-t Spring bean-ként ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+**Chat modell** – Azure OpenAI configuração, Spring bean-ként ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -109,9 +109,9 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-A builder a `azd up` által beállított környezeti változókból olvassa a hitelesítő adatokat. A `baseUrl` beállítása az Azure végpontodra teszi az OpenAI klienst Azure OpenAI-kompatibilissé.
+A builder az `azd up` által beállított környezeti változókból olvassa a hitelesítést. A `baseUrl` beállítása az Azure végpontodra teszi az OpenAI klienst működővé Azure OpenAI-val.
-**Beszélgetési memória** — Kövesd a chat előzményeit a MessageWindowChatMemory-val ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
+**Beszélgetési memória** – Követi a chat előzményeket a MessageWindowChatMemory segítségével ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -124,39 +124,39 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-Hozz létre memóriát `withMaxMessages(10)` paraméterrel, hogy az utolsó 10 üzenetet megtartsa. Adj hozzá felhasználói és AI üzeneteket típusos csomagolókkal: `UserMessage.from(text)` és `AiMessage.from(text)`. A történetet a `memory.messages()` segítségével kérheted le, és elküldheted a modellnek. A szolgáltatás külön memória példányokat tárol beszélgetésazonosítónként, így egyszerre több felhasználó is cseveghet.
+A memóriát a `withMaxMessages(10)`-zel hozod létre, hogy az utolsó 10 üzenet maradjon meg. A felhasználói és AI üzeneteket típusos csomagolókkal adod hozzá: `UserMessage.from(text)` és `AiMessage.from(text)`. Az előzmények lekéréséhez `memory.messages()` hívható és küldhető a modellnek. A szolgáltatás minden beszélgetésazonosítóhoz külön memóriát tárol, így több felhasználó is egyszerre chatelhet.
-> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Chat segítségével:** Nyisd meg a [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) fájlt, és kérdezd meg:
-> - "Hogyan dönt a MessageWindowChatMemory arról, mely üzeneteket dobja el, amikor az ablak megtelik?"
-> - "Megvalósíthatok-e egyéni memóriatárolót adatbázis használatával in-memory helyett?"
-> - "Hogyan adhatnék hozzá összefoglalást, hogy tömörítsem a régi beszélgetési előzményeket?"
+> **🤖 Próbáld ki [GitHub Copilot](https://github.com/features/copilot) Chattel:** Nyisd meg a [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)-t és kérdezd meg:
+> - "Hogyan dönti el a MessageWindowChatMemory, hogy melyik üzeneteket dobja el, ha megtelik az ablak?"
+> - "Meg tudok valósítani egyedi memória tárolást adatbázis használatával a memóriában?"
+> - "Hogyan adnám hozzá az összefoglalást, hogy tömörítsem a régi beszélgetési előzményeket?"
-Az állapot nélküli csevegés végpont teljesen kihagyja a memóriát — csak `chatModel.chat(prompt)`, mint a gyors startban. Az állapotfüggő végpont hozzáadja az üzeneteket a memóriához, lekéri a történetet, és minden kéréshez csatolja azt. Ugyanaz a modell konfiguráció, de más minták.
+Az állapot nélküli chat végpont teljesen kihagyja a memóriát – csak `chatModel.chat(prompt)` mint a gyors kezdésnél. Az állapotkövető végpont hozzáadja az üzeneteket a memóriához, lekéri az előzményeket, és ezt a kontextust küldi minden kérésnél. Ugyanaz a modellkonfiguráció, más minták.
## Azure OpenAI infrastruktúra telepítése
**Bash:**
```bash
cd 01-introduction
-azd up # Válassza ki az előfizetést és a helyszínt (ajánlott: eastus2)
+azd up # Válassza ki az előfizetést és a helyszínt (az eastus2 javasolt)
```
**PowerShell:**
```powershell
cd 01-introduction
-azd up # Válassza ki az előfizetést és a helyet (az eastus2 ajánlott)
+azd up # Válassza ki az előfizetést és a helyszínt (eastus2 ajánlott)
```
-> **Megjegyzés:** Ha időtúllépési hibába futsz (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), egyszerűen futtasd újra az `azd up` parancsot. Az Azure erőforrások még háttérben települhetnek, az ismétlés lehetővé teszi, hogy a telepítés befejeződjön, amint az erőforrások végleges állapotba kerülnek.
+> **Megjegyzés:** Ha időtúllépési hibát kapsz (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), egyszerűen futtasd újra az `azd up` parancsot. Az Azure erőforrások még háttérben települhetnek, és az újrapróbálkozás engedélyezi, hogy a telepítés befejeződjön, amint az erőforrások elérnek egy végső állapotot.
-Ez a következőket teszi:
-1. Telepíti az Azure OpenAI erőforrást a GPT-5.2-vel és a text-embedding-3-small modellekkel
+A parancs:
+1. Telepíti az Azure OpenAI erőforrást a GPT-5.2 és text-embedding-3-small modellekkel
2. Automatikusan létrehozza a `.env` fájlt a projekt gyökérkönyvtárában a hitelesítő adatokkal
3. Beállít minden szükséges környezeti változót
-**Telepítési problémák esetén?** Lásd az [infrastruktúra README](infra/README.md) fájlt a részletes hibakereséshez, többek között aldomain névütközések, manuális Azure Portal telepítési lépések és modell konfigurációs útmutató.
+**Telepítési hibák esetén?** Lásd az [Infrastruktúra README](infra/README.md) fájlt részletes hibakereséssel, beleértve az aldoménnév konfliktusokat, kézi Azure Portal telepítési lépéseket és modellkonfigurációs útmutatót.
-**Ellenőrizd, hogy sikeres volt-e a telepítés:**
+**Ellenőrizd a telepítés sikerességét:**
**Bash:**
```bash
@@ -165,10 +165,10 @@ cat ../.env # Meg kell jelenítenie az AZURE_OPENAI_ENDPOINT, API_KEY stb. ért
**PowerShell:**
```powershell
-Get-Content ..\.env # Az AZURE_OPENAI_ENDPOINT, API_KEY stb. értékét kell megjeleníteni.
+Get-Content ..\.env # Meg kell jeleníteni az AZURE_OPENAI_ENDPOINT, API_KEY stb. értékeket.
```
-> **Megjegyzés:** Az `azd up` parancs automatikusan létrehozza a `.env` fájlt. Ha később frissíteni kell, kézzel szerkesztheted, vagy újragenerálhatod a következőkkel:
+> **Megjegyzés:** Az `azd up` parancs automatikusan generálja a `.env` fájlt. Ha később módosítani kell, vagy szerkesztheted kézzel, vagy újra generálhatod:
>
> **Bash:**
> ```bash
@@ -182,12 +182,11 @@ Get-Content ..\.env # Az AZURE_OPENAI_ENDPOINT, API_KEY stb. értékét kell me
> .\.azd-env.ps1
> ```
-
-## Alkalmazás futtatása helyileg
+## Alkalmazás helyi futtatása
**Ellenőrizd a telepítést:**
-Győződj meg arról, hogy a `.env` fájl létezik a gyökérkönyvtárban az Azure hitelesítő adatokkal. Futtasd ezt a modul könyvtárából (`01-introduction/`):
+Győződj meg róla, hogy a `.env` fájl létezik a gyökérkönyvtárban az Azure hitelesítő adatokkal. Futtasd ezt a modul könyvtárából (`01-introduction/`):
**Bash:**
```bash
@@ -196,44 +195,44 @@ cat ../.env # Meg kell jeleníteni az AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMEN
**PowerShell:**
```powershell
-Get-Content ..\.env # Meg kell jeleníteni AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT értékeket
+Get-Content ..\.env # Meg kell jeleníteni az AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT értékeket
```
**Indítsd el az alkalmazásokat:**
-**1. lehetőség: Spring Boot Dashboard használata (Ajánlott VS Code felhasználóknak)**
+**Opció 1: Spring Boot Dashboard használata (ajánlott VS Code felhasználóknak)**
-A fejlesztői konténer tartalmazza a Spring Boot Dashboard kiterjesztést, amely vizuális felületet nyújt az összes Spring Boot alkalmazás kezelésére. Megtalálod az Activity Bar bal oldalán VS Code-ban (keresd a Spring Boot ikont).
+A dev konténer tartalmazza a Spring Boot Dashboard kiterjesztést, amely vizuális felületet biztosít az összes Spring Boot alkalmazás kezeléséhez. Megtalálod a VS Code bal oldalán az Activity Barban (keresd a Spring Boot ikont).
A Spring Boot Dashboard segítségével:
-- Láthatod a munkaterületen elérhető összes Spring Boot alkalmazást
+- Láthatod az összes rendelkezésre álló Spring Boot alkalmazást a munkaterületen
- Egy kattintással indíthatod/leállíthatod az alkalmazásokat
-- Valós időben követheted az alkalmazás naplóit
-- Figyelemmel kísérheted az alkalmazások állapotát
+- Valós időben megtekintheted az alkalmazás naplóit
+- Figyelheted az alkalmazás állapotát
-Egyszerűen kattints a lejátszás gombra az "introduction" modul mellett ennek indításához, vagy indítsd el az összes modult egyszerre.
+Csak kattints a lejátszás gombra az "introduction" mellett, hogy elindítsd ezt a modult, vagy indítsd el egyszerre az összes modult.
-*Spring Boot Dashboard VS Code-ban — indítsd, állítsd le és figyeld az összes modult egy helyen*
+*A Spring Boot Dashboard a VS Code-ban – indíts, állíts le és felügyelj minden modult egy helyről*
-**2. lehetőség: Shell scriptek használata**
+**Opció 2: Shell scriptek használata**
-Indítsd el az összes webalkalmazást (01-04 modulok):
+Indítsd el az összes webalkalmazást (az 01-04 modulokat):
**Bash:**
```bash
-cd .. # A gyökérkönyvtárból
+cd .. # Gyökérkönyvtárból
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # Gyökérkönyvtárból
+cd .. # A gyökérkönyvtárból
.\start-all.ps1
```
-Vagy indítsd csak ezt a modult:
+Vagy csak ezt a modult:
**Bash:**
```bash
@@ -247,9 +246,9 @@ cd 01-introduction
.\start.ps1
```
-Mindkét script automatikusan betölti a környezeti változókat a gyökér `.env` fájlból és lefordítja a JAR fájlokat, ha még nem léteznek.
+Mindkét script automatikusan betölti a környezeti változókat a gyökér `.env` fájljából, és ha a JAR fájlok nem léteznek, lefordítja őket.
-> **Megjegyzés:** Ha előbb szeretnéd kézzel lefordítani az összes modult:
+> **Megjegyzés:** Ha inkább manuálisan építenéd meg az összes modult indulás előtt:
>
> **Bash:**
> ```bash
@@ -263,8 +262,7 @@ Mindkét script automatikusan betölti a környezeti változókat a gyökér `.e
> mvn clean package -DskipTests
> ```
-
-Nyisd meg a http://localhost:8080 címet a böngésződben.
+Nyisd meg böngészőben a http://localhost:8080 címet.
**Leállításhoz:**
@@ -282,44 +280,43 @@ cd .. && ./stop-all.sh # Minden modul
cd ..; .\stop-all.ps1 # Minden modul
```
-
## Az alkalmazás használata
-Az alkalmazás egy webes felületet biztosít két párhuzamosan megjelenített csevegés implementációval.
+Az alkalmazás egy webes felületet biztosít két chat implementációval egymás mellett.
-*Irányítópult, amely mind a Simple Chat (állapot nélküli), mind a Conversational Chat (állapotfüggő) opciókat mutatja*
+*Vezérlőpult, amely mind az Egyszerű Chat (állapot nélküli), mind a Beszélgető Chat (állapotkövető) lehetőségeket mutatja*
-### Állapot nélküli csevegés (bal panel)
+### Állapot nélküli chat (bal panel)
-Ezzel próbáld először. Írd be, hogy „A nevem John”, majd azonnal kérdezd meg: „Mi a nevem?” A modell nem fog emlékezni, mert minden üzenet független. Ez demonstrálja az alapvető nyelvi modell integráció fő problémáját — nincs beszélgetési kontextus.
+Ezt próbáld ki először. Írd be, hogy "A nevem John", majd azonnal kérdezd meg, hogy "Mi a nevem?" A modell nem fog emlékezni, mert minden üzenet független. Ez bemutatja az alapnyelvi modell integráció alapvető problémáját – nincs beszélgetési kontextus.
-*Az AI nem emlékszik az előző üzenetben mondott nevedre*
+*Az AI nem emlékszik a nevedre az előző üzenetből*
-### Állapotfüggő csevegés (jobb panel)
+### Állapotkövető chat (jobb panel)
-Most próbáld meg ugyanezt itt. Írd be, hogy „A nevem John”, majd „Mi a nevem?” Ezúttal emlékszik. A különbség a MessageWindowChatMemory — ez kezeli a beszélgetési előzményeket és minden kéréshez csatolja azt. Így működik a produkciós beszélgető AI.
+Most próbáld ugyanazt a sorrendet itt. Írd be, hogy "A nevem John", majd kérdezd meg, hogy "Mi a nevem?" Most emlékszik rá. A különbség a MessageWindowChatMemory – ez fenntartja a beszélgetési előzményeket, és minden kéréshez hozzáadja azokat. Így működik a produkciós beszélgető AI.
-*Az AI emlékszik a beszélgetés korábbi részében mondott nevedre*
+*Az AI emlékszik a nevedre a beszélgetés korábbi részéből*
-Mindkét panel ugyanazt a GPT-5.2 modellt használja. Az egyetlen különbség a memória. Ez világossá teszi, hogy a memória mit ad hozzá az alkalmazásodhoz, és miért alapvető a valódi használati esetekhez.
+Mindkét panel ugyanazt a GPT-5.2 modellt használja. Az egyetlen különbség a memória. Ez világossá teszi, hogy mit ad a memória az alkalmazásodhoz és miért elengedhetetlen a valós esetekhez.
## Következő lépések
-**Következő modul:** [02-prompt-engineering - Prompt Engineering GPT-5.2-vel](../02-prompt-engineering/README.md)
+**Következő modul:** [02-prompt-engineering - Prompt engineering GPT-5.2-vel](../02-prompt-engineering/README.md)
---
-**Navigáció:** [← Előző: Modul 00 - Gyors start](../00-quick-start/README.md) | [Vissza a főoldalra](../README.md) | [Következő: Modul 02 - Prompttervezés →](../02-prompt-engineering/README.md)
+**Navigáció:** [← Vissza a főoldalra](../README.md) | [Következő: Modul 02 - Prompt engineering →](../02-prompt-engineering/README.md)
---
**Jogi nyilatkozat**:
-Ezt a dokumentumot az AI fordító szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével fordítottuk. Bár pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum anyanyelvű változata tekintendő hivatalos forrásnak. Fontos információk esetén professzionális emberi fordítást javaslunk. Nem vállalunk felelősséget az ezen fordítás használatából eredő félreértésekért vagy helytelen értelmezésekért.
+Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.
\ No newline at end of file
diff --git a/translations/hu/02-prompt-engineering/README.md b/translations/hu/02-prompt-engineering/README.md
index 09fb25947..4907428fa 100644
--- a/translations/hu/02-prompt-engineering/README.md
+++ b/translations/hu/02-prompt-engineering/README.md
@@ -1,101 +1,101 @@
-# Modul 02: Prompt Műszaki Tervezés a GPT-5.2-vel
+# Modul 02: Prompt Mérés GPT-5.2-vel
## Tartalomjegyzék
-- [Videós Bemutató](../../../02-prompt-engineering)
-- [Amit Meg Fogsz Tanulni](../../../02-prompt-engineering)
-- [Előfeltételek](../../../02-prompt-engineering)
-- [A Prompt Műszaki Tervezés Megértése](../../../02-prompt-engineering)
-- [A Prompt Műszaki Tervezés Alapjai](../../../02-prompt-engineering)
- - [Zero-Shot Prompting](../../../02-prompt-engineering)
- - [Few-Shot Prompting](../../../02-prompt-engineering)
- - [Gondolatmenet Láncolata](../../../02-prompt-engineering)
- - [Szerepalapú Prompting](../../../02-prompt-engineering)
- - [Prompt Sablonok](../../../02-prompt-engineering)
-- [Fejlett Minták](../../../02-prompt-engineering)
-- [Az Alkalmazás Futtatása](../../../02-prompt-engineering)
-- [Alkalmazás Képernyőképek](../../../02-prompt-engineering)
-- [A Minták Felfedezése](../../../02-prompt-engineering)
- - [Alacsony vs Magas Lelkesedés](../../../02-prompt-engineering)
- - [Feladatvégrehajtás (Eszköz Előszövegek)](../../../02-prompt-engineering)
- - [Önreflektáló Kód](../../../02-prompt-engineering)
- - [Strukturált Elemzés](../../../02-prompt-engineering)
- - [Többkörös Csevegés](../../../02-prompt-engineering)
- - [Lépésről Lépésre Logika](../../../02-prompt-engineering)
- - [Korlátozott Kimenet](../../../02-prompt-engineering)
-- [Amit Valójában Meg Fogsz Tanulni](../../../02-prompt-engineering)
-- [Következő Lépések](../../../02-prompt-engineering)
-
-## Videós Bemutató
-
-Nézd meg ezt az élő bemutatót, amely megmutatja, hogyan kezdhetsz neki ennek a modulnak:
+- [Videós bemutató](#videós-bemutató)
+- [Amit megtanulsz](#amit-megtanulsz)
+- [Előfeltételek](#előfeltételek)
+- [A Prompt Mérés megértése](#a-prompt-mérés-megértése)
+- [A Prompt Mérés alapjai](#a-prompt-mérés-alapjai)
+ - [Zero-Shot Prompting](#zero-shot-prompting)
+ - [Few-Shot Prompting](#few-shot-prompting)
+ - [Gondolatmenet láncolata](#gondolatmenet-láncolata)
+ - [Szerepalapú Prompting](#szerepalapú-prompting)
+ - [Prompt sablonok](#prompt-sablonok)
+- [Fejlett minták](#fejlett-minták)
+- [Az alkalmazás futtatása](#az-alkalmazás-futtatása)
+- [Az alkalmazás képernyőképei](#alkalmazás-képernyőképek)
+- [A minták felfedezése](#a-minták-felfedezése)
+ - [Alacsony vs magas lelkesedés](#alacsony-vs-magas-lelkesedés)
+ - [Feladat-végrehajtás (Eszköz-előszavak)](#feladatteljesítés-eszköz-bevezetők)
+ - [Önreflektáló kód](#önszemléletű-kód)
+ - [Strukturált elemzés](#strukturált-elemzés)
+ - [Többfordulós csevegés](#többfordulós-chat)
+ - [Lépésről lépésre való érvelés](#lépésről-lépésre-történő-érvelés)
+ - [Korlátozott kimenet](#korlátozott-kimenet)
+- [Amit valóban megtanulsz](#amit-valójában-tanulsz)
+- [Következő lépések](#következő-lépések)
+
+## Videós bemutató
+
+Nézd meg ezt az élő adást, amely elmagyarázza, hogyan kezdj neki ennek a modulnak:
-## Amit Meg Fogsz Tanulni
+## Amit megtanulsz
-A következő ábra áttekintést ad a kulcsfontosságú témákról és készségekről, amelyeket ebben a modulban fejleszteni fogsz — a prompt finomítási technikáktól a lépésről lépésre követett munkafolyamatig.
+Az alábbi diagram áttekintést nyújt a modul kulcsfontosságú témáiról és készségeiről — a prompt finomítási technikáktól a lépésenkénti munkafolyamatig, amelyet követni fogsz.
-
+
-Az előző modulokban megismerted az alapvető LangChain4j interakciókat a GitHub modellekkel, és láthattad, hogyan teszi lehetővé a memória a beszélgető AI működését Azure OpenAI-val. Most arra koncentrálunk, hogyan teszel fel kérdéseket — vagyis magukra a promptokra — Azure OpenAI GPT-5.2 használatával. Az, hogy hogyan strukturálod a promptjaidat, drámaian befolyásolja a kapott válaszok minőségét. Kezdjük az alapvető prompting technikák áttekintésével, majd továbblépünk nyolc fejlett mintára, amelyek teljes mértékben kihasználják a GPT-5.2 képességeit.
+Az előző modulban láttad, hogyan teszi lehetővé a memória a konverzációs AI-t az Azure OpenAI-val. Most arra fókuszálunk, hogyan teszel fel kérdéseket — azaz magukra a promptokra — az Azure OpenAI GPT-5.2 segítségével. A promptok felépítése drámaian befolyásolja a kapott válaszok minőségét. Először áttekintjük az alapvető prompting technikákat, majd áttérünk nyolc fejlett mintára, amelyek teljes mértékben kihasználják a GPT-5.2 képességeit.
-A GPT-5.2-t azért használjuk, mert bevezeti az érvelés szabályozását — megmondhatod a modellnek, mennyi gondolkodást végezzen mielőtt válaszol. Ez világosabbá teszi a különböző prompting stratégiákat, és segít megérteni, mikor melyik megközelítést használd. Továbbá, az Azure kevesebb korlátozást tesz a GPT-5.2-re a GitHub modellekhez képest.
+A GPT-5.2-t azért használjuk, mert bevezeti az érvelés szabályozását - megmondhatod a modellnek, mennyi gondolkodást végezzen a válaszadás előtt. Ez tisztábban láttatja a különböző prompting stratégiákat és segít megérteni, mikor melyiket alkalmazd.
## Előfeltételek
- Az 01-es modul elvégzése (Azure OpenAI erőforrások telepítve)
-- `.env` fájl a gyökérkönyvtárban Azure hitelesítő adatokkal (az `azd up` parancs által létrehozva az 01-es modulban)
+- `.env` fájl a gyökérkönyvtárban Azure hitelesítő adatokkal (az `azd up` parancs hozta létre az 01-es modulban)
-> **Megjegyzés:** Ha még nem végezted el az 01-es modult, először kövesd ott a telepítési útmutatót.
+> **Megjegyzés:** Ha még nem végezted el az 01-es modult, először ott kövesd a telepítési utasításokat.
-## A Prompt Műszaki Tervezés Megértése
+## A Prompt Mérés megértése
-Lényegében a prompt műszaki tervezés a homályos és a pontos utasítások közti különbség, amint ezt az alábbi összehasonlítás is illusztrálja.
+Lényegében a prompt mérnökség a homályos utasítások és a pontosak közötti különbség, ahogy az alábbi összehasonlítás is mutatja.
-
+
-A prompt műszaki tervezés az olyan bemeneti szöveg megtervezéséről szól, amely következetesen eléri a kívánt eredményeket. Nemcsak kérdések feltevéséről van szó - arról is, hogy úgy struktúrálod a kéréseket, hogy a modell pontosan értse, mit akarsz és hogyan kell teljesíteni.
+A prompt mérnökség arról szól, hogy olyan bemenetet tervezz, amely következetesen a kívánt eredményeket hozza. Nem csak kérdések feltevése – hanem az igények olyan strukturálása, hogy a modell pontosan értse, mit szeretnél, és hogyan adja vissza.
-Gondolj rá úgy, mint egy kollégának adott utasításra. „Javítsd meg a hibát” homályos. „Javítsd meg a null pointer kivételt a UserService.java 45. sorában null ellenőrzéssel” specifikus. A nyelvi modellek ugyanígy működnek — a specifikusság és a struktúra számít.
+Gondolj rá úgy, mint amikor utasítást adsz egy kollégának. „Javítsd a hibát” homályos. „Javítsd a null pointer exception-t a UserService.java 45. sorában egy null ellenőrzés hozzáadásával” specifikus. A nyelvi modellek ugyanígy működnek – a konkrétság és az struktúra számít.
-Az alábbi ábra mutatja, hogyan illeszkedik ide a LangChain4j — összekapcsolva a prompt mintáidat a modellel a SystemMessage és UserMessage építőelemek segítségével.
+Az alábbi diagram azt mutatja, hogyan illeszkedik ebbe a képbe a LangChain4j — összekapcsolva a prompt mintáidat a modellel a SystemMessage és UserMessage építőelemek segítségével.
-
+
-A LangChain4j biztosítja az infrastruktúrát — modellkapcsolatok, memória és üzenettípusok — miközben a prompt minták egyszerűen gondosan strukturált szövegek, amelyeket ezen infrastruktúrán keresztül küldesz. A kulcsépítőelemek a `SystemMessage` (amely beállítja az MI viselkedését és szerepét) és a `UserMessage` (amely hordozza a tényleges kérésedet).
+A LangChain4j az infrastruktúrát biztosítja — modellkapcsolatokat, memóriát és üzenettípusokat — míg a prompt minták csupán gondosan strukturált szövegek, amelyeket ezen az infrastruktúrán keresztül küldesz. A kulcsfontosságú építőelemek a `SystemMessage` (ami beállítja az AI viselkedését és szerepét) és a `UserMessage` (ami az aktuális kérést hordozza).
-## A Prompt Műszaki Tervezés Alapjai
+## A Prompt Mérés alapjai
-Az alább bemutatott öt alapvető technika alkotja a hatékony prompt műszaki tervezés alapját. Mindegyik más aspektusát célozza meg annak, hogyan kommunikálsz a nyelvi modellekkel.
+Az alább látható öt alapvető technika képezi a hatékony prompt mérnökség alapját. Mindegyik más-más aspektusát célozza meg annak, ahogyan kommunikálsz a nyelvi modellekkel.
-
+
-Mielőtt belevágnánk a modul fejlett mintáiba, tekintsük át az öt alapvető prompting technikát. Ezek azok az építőelemek, amelyeket minden prompt mérnöknek ismernie kell. Ha már dolgoztál a [Gyors kezdő modulon](../00-quick-start/README.md#2-prompt-patterns), láthattad őket működés közben — itt a mögöttes fogalmi keret.
+Mielőtt belevágnánk a fejlett mintákba, nézzük át az öt alapvető prompting technikát. Ezek az építőelemei minden prompt mérnök eszköztárának.
### Zero-Shot Prompting
-A legegyszerűbb megközelítés: közvetlen utasítást adsz a modellnek példa nélkül. A modell teljes egészében a tréningjére hagyatkozik a feladat megértésében és végrehajtásában. Ez jól működik egyértelmű kéréseknél, ahol a várt viselkedés nyilvánvaló.
+A legegyszerűbb megközelítés: adj közvetlen utasítást a modellnek példák nélkül. A modell teljes mértékben a tanulására támaszkodik a feladat megértéséhez és végrehajtásához. Ez jól működik egyszerű kéréseknél, ahol az elvárt viselkedés nyilvánvaló.
-*Közvetlen utasítás példák nélkül — a modell csak az utasításból következteti a feladatot*
+*Közvetlen utasítás példák nélkül — a modell csak az utasításból következtet a feladatra*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
String response = model.chat(prompt);
// Válasz: "Pozitív"
```
-
-**Mikor használd:** Egyszerű osztályozásoknál, közvetlen kérdéseknél, fordításnál vagy bármilyen feladatnál, amelyet a modell további útmutatás nélkül képes kezelni.
+
+**Mikor használd:** Egyszerű osztályozások, közvetlen kérdések, fordítások vagy bármilyen feladat, amit a modell további iránymutatás nélkül kezelni tud.
### Few-Shot Prompting
-Adj példákat, amelyek megmutatják a modellt követendő mintát. A modell megtanulja az elvárt input-output formátumot a példáidból, majd alkalmazza azt új bemenetekre. Ez jelentősen javítja a konzisztenciát ott, ahol a kívánt formátum vagy viselkedés nem nyilvánvaló.
+Adj példákat, amelyek megmutatják, milyen mintát szeretnél, hogy a modell kövessen. A modell megtanulja az elvárt input-output formátumot a példáidból, és alkalmazza azt új bemenetekre. Ez drámaian javítja a következetességet azoknál a feladatoknál, ahol a kívánt formátum vagy viselkedés nem nyilvánvaló.
-*Példákból tanul — a modell felismeri a mintát és új bemenetekre alkalmazza*
+*Példákból tanulva — a modell felismeri a mintát, és alkalmazza új inputokra*
```java
String prompt = """
@@ -111,16 +111,16 @@ String prompt = """
""";
String response = model.chat(prompt);
```
-
-**Mikor használd:** Egyedi osztályozásokhoz, egységes formázáshoz, speciális szakterületi feladatokhoz, vagy ha a zero-shot eredmények következetlenek.
-### Gondolatmenet Láncolata
+**Mikor használd:** Egyedi osztályozások, következetes formázás, domain-specifikus feladatok, vagy amikor a zero-shot eredmények nem megbízhatóak.
+
+### Gondolatmenet láncolata
-Kérd meg a modellt, hogy lépésről lépésre mutassa be az érvelését. Ahelyett, hogy azonnal válaszolna, a modell bontsa le a problémát és részletezze a részeket. Ez javítja a pontosságot matekban, logikában és többlépéses érvelésben.
+Kérd meg a modellt, hogy mutassa meg érvelését lépésről lépésre. Ahelyett, hogy azonnal válaszolna, a modell lebontja a problémát, és expliciten végighalad minden részen. Ez javítja a pontosságot matek, logika és többlépéses érvelési feladatoknál.
-
+
-*Lépésről lépésre való érvelés — bonyolult problémák explicit logikai lépésekre bontása*
+*Lépésenkénti érvelés — a komplex problémák explicit logikai lépésekre bontása*
```java
String prompt = """
@@ -130,18 +130,18 @@ String prompt = """
Let's solve this step-by-step:
""";
String response = model.chat(prompt);
-// A modell így mutatja: 15 - 8 = 7, majd 7 + 12 = 19 alma
+// A modell azt mutatja: 15 - 8 = 7, majd 7 + 12 = 19 alma
```
-
-**Mikor használd:** Matekfeladatoknál, logikai rejtvényeknél, hibakeresésnél vagy bármilyen feladatnál, ahol az érvelési folyamat bemutatása javítja a pontosságot és a bizalmat.
+
+**Mikor használd:** Matematikai problémák, logikai rejtvények, hibakeresés vagy bármilyen feladat, ahol az érvelési folyamat láthatósága növeli a pontosságot és a bizalmat.
### Szerepalapú Prompting
-Állíts be egy személyiséget vagy szerepet az MI-nek a kérdésed előtt. Ez kontextust ad, amely alakítja a válasz hangvételét, mélységét és fókuszát. Egy „szoftverarchitekt” más tanácsot ad, mint egy „junior fejlesztő” vagy egy „biztonsági auditor”.
+Állíts be egy személyiséget vagy szerepet az AI-nak a kérdésed feltétele előtt. Ez kontextust ad, ami alakítja a válasz hangnemét, mélységét és fókuszát. Egy „szoftver architect” más tanácsot ad, mint egy „junior fejlesztő” vagy egy „biztonsági auditor”.
-
+
-*Kontextus és személyiség beállítása — ugyanaz a kérdés más választ kap a kijelölt szereptől függően*
+*Kontextus és személyiség beállítása — ugyanaz a kérdés más választ kap a megadott szerep függvényében*
```java
String prompt = """
@@ -156,16 +156,16 @@ String prompt = """
""";
String response = model.chat(prompt);
```
-
-**Mikor használd:** Kódáttekintéseknél, oktatásban, speciális szakterületi elemzéseknél vagy amikor a válaszokat egy adott szakértelmi szint vagy szemlélet szerint kell igazítani.
-### Prompt Sablonok
+**Mikor használd:** Kódellenőrzés, oktatás, domain-specifikus elemzések, vagy amikor a válaszokat egy adott szakértelmi szinthez vagy nézőponthoz kell szabni.
+
+### Prompt sablonok
-Hozz létre újrahasználható promptokat változó helyőrzőkkel. Ahelyett, hogy mindig új promptot írjál, egyszer definiálj egy sablont, majd töltsd ki különböző értékekkel. A LangChain4j `PromptTemplate` osztálya ezt megkönnyíti a `{{variable}}` szintaxissal.
+Készíts újrahasználható promptokat változó helyőrzőkkel. Új prompt írása helyett egyszer definiálsz egy sablont, majd különféle értékekkel töltöd fel. A LangChain4j `PromptTemplate` osztálya ezt `{{variable}}` szintaxissal egyszerűvé teszi.
-
+
-*Újrahasználható promptok változó helyőrzőkkel — egy sablon, sok felhasználás*
+*Újrahasználható prompt változó helyőrzőkkel — egy sablon, sok használat*
```java
PromptTemplate template = PromptTemplate.from(
@@ -179,28 +179,28 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-
-**Mikor használd:** Ismétlődő lekérdezéseknél, kötegelt feldolgozásnál, újrahasználható AI munkafolyamatok építésénél, vagy bármilyen helyzetben, ahol a prompt szerkezete ugyanaz marad, de az adatok változnak.
+
+**Mikor használd:** Ismétlődő lekérdezések különböző bemenetekkel, tömeges feldolgozás, újrahasználható AI munkafolyamatok építése, vagy bármilyen eset, ahol a prompt struktúrája azonos, de az adat változik.
---
-Ezek az öt alapvető technika szilárd eszköztárat adnak a legtöbb prompting feladathoz. A modul további részében **nyolc fejlett mintát** ismerhetsz meg, amelyek kihasználják a GPT-5.2 érvelés szabályozását, önértékelését és strukturált kimeneti képességeit.
+Ezek az öt alapelv egy szilárd eszköztárat ad a legtöbb prompting feladathoz. A modul további része erre épít **nyolc fejlett mintával**, amelyek kihasználják a GPT-5.2 érvelés-szabályozását, önértékelését és strukturált kimenet képességeit.
-## Fejlett Minták
+## Fejlett minták
-Miután áttekintettük az alapokat, lépjünk tovább a nyolc fejlett mintára, amelyek egyedivé teszik ezt a modult. Nem minden problémához ugyanaz a megközelítés kell. Egyes kérdések gyors válaszokat igényelnek, mások mély gondolkodást. Egyesek látható érvelést, mások csak eredményeket. Az alábbi minták mindegyike egy adott szituációra optimalizált — és a GPT-5.2 érvelés szabályozása még nyilvánvalóbbá teszi a különbségeket.
+Az alapok után térjünk át a nyolc fejlett mintára, amelyek egyedivé teszik ezt a modult. Nem minden probléma igényli ugyanazt a megközelítést. Egyes kérdések gyors válaszokat kívánnak, mások mély gondolkodást. Egyeseknél szükséges az érvelés láthatósága, másoknál csak az eredmény számít. Az alábbi minták mindegyike más helyzetre lett optimalizálva — és a GPT-5.2 érvelés-szabályozása még nyilvánvalóbbá teszi a különbségeket.
-
+
-*A nyolc prompt műszaki tervezési minták áttekintése és felhasználási eseteik*
+*A nyolc prompt mérnökségi minta áttekintése és felhasználási eseteik*
-A GPT-5.2 egy további dimenziót ad ezekhez a mintákhoz: *érvelés szabályozás*. Az alábbi csúszka mutatja, hogyan állíthatod be a modell gondolkodási erőfeszítését — a gyors, közvetlen válaszoktól a mély, alapos elemzésig.
+A GPT-5.2 egy új dimenziót ad ezekhez a mintákhoz: *érvelés szabályozása*. Az alábbi csúszka azt mutatja, hogyan állíthatod be a modell gondolkodási erőfeszítését — a gyors, közvetlen válaszoktól a mély, alapos elemzésig.
-
+
-*A GPT-5.2 érvelés szabályozásával megadhatod, mennyi gondolkodást végezzen a modell — gyors közvetlen válaszoktól a mély feltárásig*
+*A GPT-5.2 érvelés szabályozásával megadhatod, mennyi gondolkodást végezzen a modell — a gyors közvetlen válaszoktól a mély feltárásig*
-**Alacsony Lelkesedés (Gyors és Fókuszált)** - Egyszerű kérdésekhez, ahol gyors, közvetlen válaszokat szeretnél. A modell minimális érvelést végez - maximum 2 lépést. Használd számításokhoz, lekérdezésekhez vagy egyértelmű kérdésekhez.
+**Alacsony lelkesedés (gyors és fókuszált)** - Egyszerű kérdésekhez, ahol gyors, tömör válaszokat akarsz. A modell minimális érvelést végez - maximum 2 lépés. Használd számításokhoz, keresésekhez, vagy egyenes kérdésekhez.
```java
String prompt = """
@@ -218,13 +218,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-
-> 💡 **Fedezd fel GitHub Copilot-tal:** Nyisd meg a [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) fájlt, és kérdezd meg:
+
+> 💡 **Fedezd fel GitHub Copilot-tal:** Nyisd meg a [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) fájlt és kérdezd:
> - „Mi a különbség az alacsony és magas lelkesedésű prompting minták között?”
-> - „Hogyan segítenek az XML tagek a promptok AI válaszának strukturálásában?”
-> - „Mikor használjam az önreflektáló mintákat a közvetlen utasítással szemben?”
+> - „Hogyan segítenek az XML tagek a promptokban az AI válaszának strukturálásában?”
+> - „Mikor használjam az önreflexiós mintákat közvetlen utasítás helyett?”
-**Magas Lelkesedés (Mély és Alapos)** - Összetett problémákhoz, ahol átfogó elemzésre van szükség. A modell alaposan feltár, részletes érvelést mutat. Használd rendszertervezéshez, architektúra döntésekhez vagy komplex kutatáshoz.
+**Magas lelkesedés (mély és alapos)** - Komplex problémákhoz, ahol átfogó elemzést szeretnél. A modell alaposan vizsgálódik és részletes érvelést mutat. Használd rendszertervezéshez, architektúra döntésekhez vagy komplex kutatáshoz.
```java
String prompt = """
@@ -237,8 +237,8 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-
-**Feladatvégrehajtás (Lépésről lépésre haladás)** - Többlépéses munkafolyamatokhoz. A modell előre megtervezi a lépéseket, elmondja, mit csinál, majd összefoglal. Használd migrációkhoz, implementációkhoz vagy bármilyen többlépéses feladathoz.
+
+**Feladat-végrehajtás (lépésenkénti haladás)** - Többlépéses munkafolyamatokhoz. A modell előzetesen tervet ad, narrálja az egyes lépéseket, majd összefoglal. Használd migrációkhoz, implementációkhoz, vagy bármilyen többlépéses folyamathoz.
```java
String prompt = """
@@ -275,21 +275,21 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-
-A Chain-of-Thought prompting kifejezetten kéri a modellt, hogy mutassa meg az érvelési folyamatát, javítva a pontosságot összetett feladatoknál. A lépésenkénti bontás segíti az embert és az MI-t is az logika megértésében.
-> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Chat-ben:** Kérdezz erről a mintáról:
-> - „Hogyan adaptálnám a feladatvégrehajtás mintát hosszú futású műveletekhez?”
-> - „Mik a legjobb gyakorlatok az eszköz előszövegek strukturálásához éles alkalmazásokban?”
-> - „Hogyan tudok megjeleníteni köztes előrehaladási frissítéseket egy felhasználói felületen?”
+A Chain-of-Thought prompting kifejezetten kéri a modellt, hogy mutassa meg érvelési folyamatát, ami növeli a pontosságot összetett feladatoknál. A lépésenkénti bontás segíti az embereket és az AI-t is az értelem megértésében.
-Az alábbi ábra szemlélteti ezt a Tervezés → Végrehajtás → Összefoglalás munkafolyamatot.
+> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Csevegéssel:** Kérdezz erről a mintáról:
+> - „Hogyan alakítanám át a feladat-végrehajtási mintát hosszú ideig futó műveletekre?”
+> - „Mik a legjobb gyakorlatok eszköz-előszavak strukturálására éles alkalmazásokban?”
+> - „Hogyan tudok rögzíteni és megjeleníteni köztes előrehaladási állapotokat egy UI-ban?”
-
+Az alábbi diagram illusztrálja a Terv → Végrehajtás → Összefoglalás munkafolyamatot.
-*Tervezés → Végrehajtás → Összefoglalás munkafolyamat többlépéses feladatokhoz*
+
-**Önreflektáló Kód** - Termelési minőségű kódgeneráláshoz. A modell a gyártási szabványoknak megfelelő, hibakezeléssel ellátott kódot hoz létre. Használd új funkciók vagy szolgáltatások építésére.
+*Terv → Végrehajtás → Összefoglalás munkafolyamat többlépéses feladatokhoz*
+
+**Önreflektáló kód** - Termelési minőségű kód generálásához. A modell termelési szabványok szerint generál kódot megfelelő hibakezeléssel. Használd új funkciók vagy szolgáltatások fejlesztésénél.
```java
String prompt = """
@@ -299,14 +299,14 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-
-Az alábbi ábra mutatja ezt az iteratív fejlesztési ciklust — generálás, értékelés, gyengeségek felismerése, majd finomítás, amíg a kód megfelel a gyártási szabványoknak.
-
+Az alábbi diagram ezt az iteratív fejlesztési ciklust mutatja be — generálás, értékelés, gyengeségek azonosítása és finomítás, amíg a kód megfelel a termelési szabványoknak.
+
+
-*Iteratív fejlesztési ciklus - generálás, értékelés, problémák felismerése, javítás, ismétlés*
+*Iteratív fejlesztési ciklus - generálás, értékelés, problémák azonosítása, javítás, ismétlés*
-**Strukturált Elemzés** - Következetes értékeléshez. A modell előre meghatározott keretrendszer szerint vizsgálja a kódot (helyesség, gyakorlatok, teljesítmény, biztonság, karbantarthatóság). Használd kódáttekintésekhez vagy minőségértékelésekhez.
+**Strukturált elemzés** - Következetes értékeléshez. A modell egy rögzített keretrendszerrel vizsgálja a kódot (helyesség, gyakorlatok, teljesítmény, biztonság, fenntarthatóság). Használd kódellenőrzéshez vagy minőségellenőrzéshez.
```java
String prompt = """
@@ -353,19 +353,19 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-
-> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Chat-ben:** Kérdezz strukturált elemzésről:
-> - „Hogyan szabhatom testre az elemzési keretrendszert különféle kódáttekintésekhez?”
-> - „Mi a legjobb módja a strukturált kimenet feldolgozásának programozottan?”
-> - „Hogyan biztosítom a következetes súlyossági szinteket különböző áttekintési üléseken?”
-Az alábbi ábra mutatja, hogyan szervezi ez a strukturált keretrendszer a kódáttekintést következetes kategóriákba súlyossági szintekkel.
+> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Csevegéssel:** Kérdezz a strukturált elemzésről:
+> - „Hogyan testre szabhatom az elemzési keretrendszert különböző kódellenőrzési típusokra?”
+> - „Mi a legjobb módja a strukturált kimenet programozott feldolgozásának és feldolgozásának?”
+> - „Hogyan biztosíthatom a következetes súlyossági szinteket különböző ellenőrzési ülések között?”
-
+Az alábbi diagram bemutatja, hogyan szervezi ezt a strukturált keretrendszer egy kódellenőrzést következetes kategóriákba súlyossági szintekkel.
-*Következetes kódáttekintési keretrendszer súlyossági szintekkel*
+
-**Többkörös Csevegés** - Olyan beszélgetésekhez, amelyeknek kontextusra van szükségük. A modell emlékszik az előző üzenetekre és épít rájuk. Használd interaktív segítségnyújtó ülésekhez vagy komplex kérdés-válasz helyzetekhez.
+*Következetes kódellenőrzések keretrendszere súlyossági szintekkel*
+
+**Többfordulós csevegés** - Kontextust igénylő beszélgetésekhez. A modell emlékszik az előző üzenetekre és azokra épít. Használd interaktív segítségnyújtó vagy összetett kérdés-felelet alkalmakhoz.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -378,13 +378,14 @@ memory.add(UserMessage.from("Show me an example"));
AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-
-Az alábbi ábra szemlélteti, hogyan halmozódik fel a beszélgetési kontextus minden körrel, és hogyan viszonyul ez a modell token limitjéhez.
-
+Az alábbi diagram szemlélteti, hogyan halmozódik fel a beszélgetés kontextusa fordulóról fordulóra, és hogyan kapcsolódik a modell token-korlátjához.
+
+
-*Hogyan halmozódik fel a beszélgetési kontextus többszöri körök alatt, amíg eléri a token korlátot*
-**Lépésről-lépésre gondolkodás** – Látható logikát igénylő problémák esetén. A modell minden lépéshez expliciten bemutatja az okfejtést. Használd ezt matematikai problémákhoz, logikai rejtvényekhez, vagy amikor meg kell értened a gondolkodási folyamatot.
+*Hogyan gyűlik össze a beszélgetés kontextusa több fordulón át a token-korlátig*
+
+**Lépésről lépésre való érvelés** - Látható logikát igénylő problémákhoz. A modell minden lépésnél explicit érvelést mutat. Használd matek problémákhoz, logikai rejtvényekhez, vagy amikor meg kell értened a gondolkodási folyamatot.
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Az alábbi ábra bemutatja, hogyan bontja a modell a problémákat explicit, számozott logikai lépésekre.
-
-
+Az alábbi diagram bemutatja, hogyan bontja a modell a problémákat explicit, számozott logikai lépésekre.
-*Problémák explicit logikai lépésekre bontása*
+
+*Problémák lebontása kifejezett logikai lépésekre*
-**Korlátozott kimenet** – Specifikus formátumkövetelményekkel bíró válaszokhoz. A modell szigorúan követi a formátum- és hosszúságszabályokat. Használd összefoglalókhoz vagy precíz kimenetstruktúrát igénylő esetekben.
+**Korlátozott kimenet** – Olyan válaszokhoz, amelyeknek specifikus formátum- és hosszúságkövetelményük van. A modell szigorúan követi a formátum és hosszúság szabályait. Használd ezt összefoglalókhoz vagy ha pontos kimeneti szerkezetre van szükséged.
```java
String prompt = """
@@ -420,21 +420,21 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-A következő ábra bemutatja, hogyan irányítják a korlátok a modellt, hogy szigorúan az előírt formátum- és hosszúságszabályokat kövesse.
+Az alábbi diagram bemutatja, hogyan irányítják a korlátozások a modellt, hogy olyan kimenetet készítsen, amely szigorúan megfelel a formátum- és hosszúsági követelményeknek.
-
+
-*Specifikus formátum, hossz és struktúra követelményének érvényesítése*
+*Speciális formátum-, hosszúsági és szerkezeti követelmények érvényesítése*
-## A alkalmazás futtatása
+## Az alkalmazás futtatása
**Telepítés ellenőrzése:**
-Győződj meg róla, hogy a `.env` fájl létezik a gyökérkönyvtárban az Azure hitelesítő adatokkal (amely a 01-es modulban készült). Futtasd ezt a modul könyvtárából (`02-prompt-engineering/`):
+Győződj meg róla, hogy a `.env` fájl létezik a gyökérkönyvtárban az Azure hitelesítési adatokkal (amelyet az 01-es modul során hoztál létre). Futtasd ezt a modul könyvtárából (`02-prompt-engineering/`):
**Bash:**
```bash
-cat ../.env # Meg kell jelenítenie az AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT értékeket
+cat ../.env # Meg kell mutatnia az AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT értékeket
```
**PowerShell:**
@@ -442,27 +442,27 @@ cat ../.env # Meg kell jelenítenie az AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYME
Get-Content ..\.env # Meg kell jelenítenie az AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT értékeket
```
-**Indítsd el az alkalmazást:**
+**Az alkalmazás indítása:**
-> **Megjegyzés:** Ha már elindítottad az összes alkalmazást a gyökérkönyvtárból `./start-all.sh` segítségével (ahogy az 01-es modul leírja), ez a modul már fut a 8083-as porton. Ekkor kihagyhatod az alábbi indítási parancsokat, és közvetlenül a http://localhost:8083 oldalra léphetsz.
+> **Megjegyzés:** Ha már indítottad az összes alkalmazást a `./start-all.sh` használatával a gyökérkönyvtárból (ahogy az az 01-es modulban le van írva), akkor ez a modul már fut a 8083-as porton. Átugorhatod az alábbi indító parancsokat, és közvetlenül elmehetsz a http://localhost:8083 oldalra.
-**1. lehetőség: Spring Boot Dashboard használata (Ajánlott VS Code felhasználóknak)**
+**1. lehetőség: Spring Boot Dashboard használata (ajánlott VS Code felhasználóknak)**
-A fejlesztői környezet tartalmazza a Spring Boot Dashboard bővítményt, ami vizuális felületet nyújt az összes Spring Boot alkalmazás kezelésére. A VS Code bal oldali tevékenységsávjában találod meg (a Spring Boot ikon alapján).
+A fejlesztői konténer tartalmazza a Spring Boot Dashboard bővítményt, amely vizuális felületet biztosít az összes Spring Boot alkalmazás kezelésére. Megtalálod a VS Code bal oldali Művelet sávjában (keresd a Spring Boot ikont).
-A Spring Boot Dashboardból:
-- Megtekintheted az összes elérhető Spring Boot alkalmazást a munkaterületen
-- Egy kattintással indíthatsz vagy állíthatsz le alkalmazásokat
-- Valós időben nézheted az alkalmazás naplóit
-- Figyelemmel kísérheted az alkalmazás állapotát
+A Spring Boot Dashboard-ról:
+- Az összes elérhető Spring Boot alkalmazást látod a munkaterületen
+- Egy kattintással indíthatsz/leállíthatsz alkalmazásokat
+- Valós időben nézheted az alkalmazások naplóit
+- Figyelemmel kísérheted az alkalmazások állapotát
-Egyszerűen kattints a lejátszás gombra a "prompt-engineering" modul mellett a modul indításához, vagy indíts el egyszerre minden modult.
+Egyszerűen kattints a lejátszás gombra a "prompt-engineering" mellett az adott modul indításához, vagy indítsd el egyszerre az összes modult.
-*A Spring Boot Dashboard a VS Code-ban — indítsd, állítsd le és monitorozd az összes modult egy helyről*
+*A Spring Boot Dashboard a VS Code-ban — indítsd, állítsd le és figyeld az összes modult egy helyről*
-**2. lehetőség: Shell szkriptek használata**
+**2. lehetőség: Shell script-ek használata**
Indítsd el az összes webalkalmazást (01-04 modulok):
@@ -478,7 +478,7 @@ cd .. # A gyökérkönyvtárból
.\start-all.ps1
```
-Vagy indítsd csak ezt a modult:
+Vagy indítsd el csak ezt a modult:
**Bash:**
```bash
@@ -492,9 +492,9 @@ cd 02-prompt-engineering
.\start.ps1
```
-Mindkét szkript automatikusan betölti a környezeti változókat a gyökér `.env` fájlból, és ha nem léteznek, legyártja a JAR fájlokat.
+Mindkét script automatikusan betölti a root `.env` fájlban lévő környezeti változókat, és felépíti a JAR fájlokat, ha még nem léteznek.
-> **Megjegyzés:** Ha inkább manuálisan szeretnéd buildelni az összes modult indítás előtt:
+> **Megjegyzés:** Ha manuálisan szeretnéd buildelni az összes modult az indítás előtt:
>
> **Bash:**
> ```bash
@@ -508,7 +508,7 @@ Mindkét szkript automatikusan betölti a környezeti változókat a gyökér `.
> mvn clean package -DskipTests
> ```
-Nyisd meg böngészőben a http://localhost:8083 címet.
+Nyisd meg a böngésződben a http://localhost:8083 címet.
**Leállításhoz:**
@@ -523,74 +523,74 @@ cd .. && ./stop-all.sh # Minden modul
```powershell
.\stop.ps1 # Csak ez a modul
# Vagy
-cd ..; .\stop-all.ps1 # Az összes modul
+cd ..; .\stop-all.ps1 # Minden modul
```
## Alkalmazás képernyőképek
-Itt a prompt engineering modul fő felülete, ahol egyszerre próbálhatod ki mind a nyolc mintát.
+Íme a prompt engineering modul fő kezelőfelülete, ahol egyszerre kísérletezhetsz a nyolc minta mindegyikével.
-*A fő dashboard, amely az összes 8 prompt mérnöki mintát mutatja jellemzőikkel és használati eseteikkel*
+*A fő műszerfal, mely az összes 8 prompt engineering mintát mutatja jellemzőikkel és használati eseteikkel együtt*
-## Minták felfedezése
+## A minták felfedezése
-A webes felület lehetővé teszi a különböző promptolási stratégiák kipróbálását. Mindegyik minta más-más problémára ad választ – próbáld ki, hogy lásd, mikor működik jól melyik megközelítés.
+A webes felület lehetővé teszi, hogy különböző promptolási stratégiákkal kísérletezz. Minden minta más problémát old meg – próbáld ki őket, hogy lásd, mikor működik jól egy-egy megközelítés.
-> **Megjegyzés: Streaming és nem streaming** — Minden mintalapon két gombot találsz: **🔴 Stream Response (Live)** és egy **nem streaming** opciót. A streaming Server-Sent Events (SSE) használatával azonnal megjeleníti azokat a tokeneket, amelyeket a modell generál, így az előrehaladást közvetlenül láthatod. A nem streaming opció megvárja a teljes választ, mielőtt megjelenítené azt. Mély okfejtést igénylő promptoknál (például High Eagerness, Self-Reflecting Code) a nem streaming hívás nagyon hosszú ideig is eltarthat — akár percekig — látványos visszajelzés nélkül. **Használj streaminget, amikor összetett promptokkal kísérletezel**, így látod a modell működését és elkerülöd azt a benyomást, hogy a kérés időtúllépett.
->
-> **Megjegyzés: Böngészőkövetelmény** — A streaming funkció a Fetch Streams API-t (`response.body.getReader()`) használja, ami teljes böngészőt igényel (Chrome, Edge, Firefox, Safari). Ez **nem** működik a VS Code beépített Simple Browserében, mert annak webnézete nem támogatja a ReadableStream API-t. Ha Simple Brosert használsz, a nem streaming gombok továbbra is normálisan működnek — csak a streaming gombokat érinti ez a korlátozás. A teljes élményhez külső böngészőben nyisd meg a `http://localhost:8083` címet.
+> **Megjegyzés: Streaming vagy nem streaming** — Minden mintának van két gombja: **🔴 Stream Response (Live)** és egy **Nem streaming** opció. A streaming a Server-Sent Events (SSE) használatával valós időben mutatja a tokeneket, miközben a modell generálja őket, így azonnal látod a folyamatot. A nem streaming opció megvárja az egész választ, mielőtt megjeleníti. Mély gondolkodást igénylő promptoknál (pl. High Eagerness, Self-Reflecting Code) a nem streaming hívás nagyon hosszú ideig is eltarthat – néha percekig – látható visszajelzés nélkül. **Komplex promptok teszteléséhez használj streaminget**, hogy lásd a modell működését, és ne tűnjön úgy, mintha időtúllépés történt volna.
+>
+> **Megjegyzés: Böngésző követelmény** — A streaming funkció a Fetch Streams API-t használja (`response.body.getReader()`), ami teljes böngészőt igényel (Chrome, Edge, Firefox, Safari). Nem működik a VS Code beépített Simple Browser-ében, mivel annak webnézetében nem támogatott a ReadableStream API. Ha a Simple Browser-t használod, a nem streaming gombok továbbra is működnek rendesen – csak a streaming gombokat érinti. A teljes élményért nyisd meg `http://localhost:8083` külső böngészőben.
### Alacsony vs Magas lelkesedés
-Tegyél fel egy egyszerű kérdést, például "Mi a 15%-a 200-nak?" Alacsony lelkesedéssel. Azonnali, közvetlen választ kapsz. Most kérdezz valami bonyolultabbat, például "Tervezzen meg egy caching stratégiát egy nagy forgalmú API-hoz" Magas lelkesedéssel. Kattints a **🔴 Stream Response (Live)** gombra, és nézd, miként jelenik meg részletes gondolkodás lépésről lépésre tokenenként. Ugyanaz a modell, ugyanaz a kérdés felépítés – de a prompt megmondja, mennyi gondolkodást végezzen.
+Tegyél fel egy egyszerű kérdést, például „Mi a 15%-a 200-nak?” Alacsony lelkesedéssel azonnali, közvetlen választ kapsz. Most tegyél fel egy összetettebb kérdést, például „Tervezzen gyorsítótárazási stratégiát egy nagyforgalmú API-hoz” Magas lelkesedéssel. Kattints a **🔴 Stream Response (Live)**-re, és nézd, ahogy a modell részletes gondolkodása tokenenként megjelenik. Ugyanaz a modell, ugyanaz a kérdésfelépítés – csak a prompt határozza meg, mennyit gondolkodjon.
-### Feladatvégrehajtás (Eszköz bevezetések)
+### Feladatteljesítés (Eszköz bevezetők)
-Többlépcsős munkafolyamatoknál előnyös az előzetes tervezés és a folyamat narrálása. A modell ismerteti, mit fog csinálni, lépésről lépésre mesél, majd összegzi az eredményeket.
+A többlépéses munkafolyamatok előnyhöz jutnak az előzetes tervezés és az előrehaladás narrációja miatt. A modell vázolja, mit fog csinálni, narrálja az egyes lépéseket, majd összefoglalja az eredményeket.
-### Önreflektáló kód
+### Önszemléletű kód
-Próbáld ki a "Hozz létre egy email érvényesítő szolgáltatást" promptot. Ahelyett, hogy csak kódot generálna és megállna, a modell generál, értékel minőségi kritériumok alapján, azonosít gyengeségeket, majd javít. Láthatod, ahogy iterál, amíg a kód megfelel a termelési szabványoknak.
+Próbáld ki a „Hozz létre egy e-mail érvényesítő szolgáltatást” kérést. Ahelyett, hogy csak kódot generálna, és abbahagyná, a modell generál, értékel minőségi kritériumok alapján, azonosítja a gyengeségeket, majd javít. Látni fogod, hogy iterál addig, amíg a kód megfelel a termelési követelményeknek.
### Strukturált elemzés
-Kódáttekintésekhez következetes értékelési keretek kellenek. A modell a kódot fix kategóriák szerint elemzi (helyesség, gyakorlatok, teljesítmény, biztonság), súlyossági szintekkel.
+A kódáttekintésekhez konzisztens értékelési keretrendszerek szükségesek. A modell rögzített kategóriák (helyesség, gyakorlatok, teljesítmény, biztonság) és súlyossági szintek alapján elemzi a kódot.
-### Többkörös csevegés
+### Többfordulós chat
-Kérdezd meg: "Mi az a Spring Boot?" majd közvetlenül kövesd azzal: "Mutass példát." A modell emlékszik az első kérdésre, és egy Spring Boot példát ad. Memória nélkül a második kérdés túl homályos lenne.
+Kérdezd meg: „Mi az a Spring Boot?”, majd azonnal kérd meg: „Mutass egy példát”. A modell emlékszik az első kérdésedre és egy Spring Boot példát ad speciálisan. Memória nélkül a második kérdés túl általános lenne.
-### Lépésről-lépésre gondolkodás
+### Lépésről lépésre történő érvelés
-Válassz egy matekfeladatot, és próbáld ki egyszerre a Lépésről-lépésre gondolkodást és az Alacsony lelkesedést. Az alacsony lelkesedés gyorsan csak a választ adja meg – gyors, de átláthatatlan. A lépésről lépésre bemutatja minden számítást és döntést.
+Válassz egy matematikai problémát, és próbáld ki mind a Lépésről lépésre érvelést, mind az Alacsony lelkesedést. Az alacsony lelkesedés csak megadja a választ – gyors, de kevésbé átlátható. A lépésről lépésre megmutatja minden számítást és döntést.
### Korlátozott kimenet
-Amikor meghatározott formátumra vagy szóközszámra van szükség, ez a minta szigorúan érvényesíti az előírásokat. Próbálj meg egy pontosan 100 szóból álló összefoglalót generálni felsorolásos formában.
+Ha specifikus formátumra vagy szószámra van szükséged, ez a minta szigorúan betartatja ezeket. Próbálj meg egy pontosan 100 szóból álló listás összefoglalót generálni.
## Amit valójában tanulsz
-**Az okfejtés erőfeszítése mindent megváltoztat**
+**Az érvelési erőfeszítés mindent megváltoztat**
-A GPT-5.2 lehetővé teszi, hogy a promptok által szabályozd a számítási erőfeszítést. Az alacsony erőfeszítés gyors válaszokat eredményez minimális feltárással. A magas erőfeszítés azt jelenti, hogy a modell mélyen és alaposan gondolkodik. Megtanulod az erőfeszítést a feladat komplexitásához igazítani – ne pazarold az időt egyszerű kérdésekre, de ne siesd el a bonyolult döntéseket sem.
+A GPT-5.2 lehetővé teszi, hogy a promptjaidon keresztül szabályozd a számítási erőfeszítést. Az alacsony erőfeszítés gyors válaszokat jelent minimális feltárással. A magas erőfeszítés azt jelenti, hogy a modell időt szán a mély gondolkodásra. Megtanulod, hogyan igazítsd az erőfeszítést a feladat összetettségéhez – ne pazarold az időt egyszerű kérdésekre, de ne siess el összetett döntéseket se.
-**A struktúra irányítja a viselkedést**
+**A szerkezet szabályozza a viselkedést**
-Észrevetted az XML címkéket a promptokban? Nem dekoratívak. A modellek a strukturált utasításokat megbízhatóbban követik, mint az szabad szöveget. Többlépcsős folyamatokhoz vagy összetett logikához a struktúra segít a modellnek követni, hol tart és mi következik. Az alábbi ábra egy jól strukturált promptot bont le, bemutatva, hogyan rendezi az utasításokat XML-stílusú címkék, mint ``, ``, ``, ``, és ``.
+Észrevetted a promptokban szereplő XML címkéket? Nem csupán díszek. A modellek megbízhatóbban követik a strukturált utasításokat, mint a szabad szöveget. Amikor többlépéses folyamatokra vagy összetett logikára van szükség, a szerkezet segít a modellnek követni, hol tart, és mi következik. Az alábbi diagram lebontja egy jól strukturált prompt felépítését, és megmutatja, hogyan szervezik az utasításokat a ``, ``, ``, `` és `` címkék világos szakaszokra.
-
+
-*Egy jól strukturált prompt anatómiája tiszta szakaszokkal és XML-stílusú szervezéssel*
+*A jól strukturált prompt anatómiája világos szakaszokkal és XML-stílusú szervezéssel*
**Minőség önértékeléssel**
-Az önreflektáló minták úgy működnek, hogy a minőségi kritériumokat explicit módon megadják. Ahelyett, hogy remélnéd, hogy a modell "jól csinálja", pontosan megmondod neki, mit jelent a "helyes": logikai helyesség, hibakezelés, teljesítmény, biztonság. A modell így képes saját kimenetét értékelni és javítani. Ez előállításból folyamatot csinál.
+Az önreflektáló minták úgy működnek, hogy a minőségi kritériumokat explicit módon megadják. Ahelyett, hogy csak remélnéd, hogy a modell "jól csinálja", pontosan megmondod neki, mit jelent a "jól": helyes logika, hibakezelés, teljesítmény, biztonság. A modell így értékelni tudja saját kimenetét és javítani. Ez a kódgenerálást lotériából folyamatba alakítja.
**A kontextus véges**
-A többkörös beszélgetések úgy működnek, hogy a lekérdezéshez mellékelik az üzenet előzményeit. Viszont van korlát – minden modellhez van maximális token-szám. Ahogy nő a beszélgetés, stratégiák kellenek, hogy a releváns kontextust megtartsd anélkül, hogy túllépnéd a plafont. Ez a modul megmutatja, hogyan működik a memória; később megtanulod, mikor foglalj össze, mikor felejts, és mikor hívj elő.
+A többfordulós beszélgetések úgy működnek, hogy minden kéréshez tartalmazzák az üzenettörténetet. De van egy határ – minden modellnek maximális token száma van. Ahogy a beszélgetések nőnek, stratégiákra lesz szükséged, hogy a releváns kontextust megőrizd anélkül, hogy elérnéd a korlátot. Ez a modul megmutatja, hogyan működik a memória; később megtanulod, mikor foglalj össze, mikor felejts és mikor kérj vissza információt.
## Következő lépések
@@ -604,5 +604,5 @@ A többkörös beszélgetések úgy működnek, hogy a lekérdezéshez mellékel
**Jogi nyilatkozat**:
-Ez a dokumentum az [Co-op Translator](https://github.com/Azure/co-op-translator) AI fordító szolgáltatásával készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelven tekintendő hiteles forrásnak. Fontos információk esetén szakmai emberi fordítást javasolunk. Nem vállalunk felelősséget a fordítás használatából eredő félreértésekért vagy helytelen értelmezésekért.
+Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.
\ No newline at end of file
diff --git a/translations/hu/03-rag/README.md b/translations/hu/03-rag/README.md
index cb4c2e890..d4e9c2fbb 100644
--- a/translations/hu/03-rag/README.md
+++ b/translations/hu/03-rag/README.md
@@ -1,144 +1,143 @@
-# 03. modul: RAG (Retrieval-Augmented Generation)
+# Modul 03: RAG (Retrieval-Augmented Generation)
## Tartalomjegyzék
-- [Videós bemutató](../../../03-rag)
-- [Amit megtanulsz](../../../03-rag)
-- [Előfeltételek](../../../03-rag)
-- [A RAG megértése](../../../03-rag)
- - [Melyik RAG megközelítést használja ez az oktatóanyag?](../../../03-rag)
-- [Hogyan működik](../../../03-rag)
- - [Dokumentumfeldolgozás](../../../03-rag)
- - [Beágyazások létrehozása](../../../03-rag)
- - [Szemantikus keresés](../../../03-rag)
- - [Válaszgenerálás](../../../03-rag)
-- [Az alkalmazás futtatása](../../../03-rag)
-- [Az alkalmazás használata](../../../03-rag)
- - [Dokumentum feltöltése](../../../03-rag)
- - [Kérdések feltevése](../../../03-rag)
- - [Hivatkozások ellenőrzése](../../../03-rag)
- - [Kísérletezés kérdésekkel](../../../03-rag)
-- [Kulcsfogalmak](../../../03-rag)
- - [Darabolási stratégia](../../../03-rag)
- - [Hasonlósági pontszámok](../../../03-rag)
- - [Memóriában tárolás](../../../03-rag)
- - [Kontekstuális ablak kezelése](../../../03-rag)
-- [Mikor fontos a RAG](../../../03-rag)
-- [Következő lépések](../../../03-rag)
+- [Videós bemutató](#videós-bemutató)
+- [Mit fogsz megtanulni](#mit-fogsz-megtanulni)
+- [Előfeltételek](#előfeltételek)
+- [A RAG megértése](#a-rag-megértése)
+ - [Melyik RAG megközelítést használja ez a bemutató?](#melyik-rag-megközelítést-használja-ez-a-bemutató)
+- [Hogyan működik](#hogyan-működik)
+ - [Dokumentumfeldolgozás](#dokumentumfeldolgozás)
+ - [Beágyazások készítése](#beágyazások-készítése)
+ - [Szemantikus keresés](#szemantikus-keresés)
+ - [Válaszgenerálás](#válaszgenerálás)
+- [Az alkalmazás futtatása](#az-alkalmazás-futtatása)
+- [Az alkalmazás használata](#az-alkalmazás-használata)
+ - [Dokumentum feltöltése](#dokumentum-feltöltése)
+ - [Kérdések feltevése](#kérdések-feltevése)
+ - [Forrás hivatkozások ellenőrzése](#forráshivatkozások-ellenőrzése)
+ - [Kísérletezés a kérdésekkel](#kísérletezz-a-kérdésekkel)
+- [Kulcsfogalmak](#kulcsfogalmak)
+ - [Darabolási stratégia](#szeletelési-stratégia)
+ - [Hasonlósági pontszámok](#hasonlósági-pontszámok)
+ - [Memóriában tárolás](#memóriában-tárolás)
+ - [Kontextusablak kezelése](#kontextusablak-kezelése)
+- [Mikor fontos a RAG](#mikor-fontos-a-rag)
+- [Következő lépések](#következő-lépések)
## Videós bemutató
-Nézd meg ezt az élő előadást, amely elmagyarázza, hogyan kezdhetsz neki ennek a modulnak:
+Nézd meg ezt az élő adást, amely elmagyarázza, hogyan kezdhetsz neki ennek a modulnak:
-
+
-## Amit megtanulsz
+## Mit fogsz megtanulni
-Az előző modulokban megtanultad, hogyan folytass beszélgetést a mesterséges intelligenciával és hogyan építsd fel hatékonyan a promptokat. De van egy alapvető korlát: a nyelvi modellek csak azt tudják, amit a tanításuk során megtanultak. Nem tudnak válaszolni olyan kérdésekre, melyek céged szabályzataira, projekt dokumentációjára vagy olyan információkra vonatkoznak, amik nem szerepeltek a betanításukban.
+Az előző modulokban megtanultad, hogyan folytass beszélgetéseket az MI-vel, és hogyan strukturáld hatékonyan a parancsaidat. De van egy alapvető korlát: a nyelvi modellek csak azt tudják, amit a tanítási folyamat során megtanultak. Nem képesek válaszolni a céges szabályzataiddal, a projekt dokumentációddal vagy bármilyen olyan információval kapcsolatos kérdésekre, amit nem tanítottak nekik.
-A RAG (Retrieval-Augmented Generation) megoldja ezt a problémát. Ahelyett, hogy megpróbálnád megtanítani a modellnek a saját adataidat (ami drága és nem praktikus), lehetővé teszed számára, hogy átkutassa azokat a dokumentumaidat. Amikor valaki kérdez, a rendszer megtalálja a releváns információt, és beilleszti azt a promptba. A modell úgy válaszol, hogy figyelembe veszi a lekért kontextust.
+A RAG (Retrieval-Augmented Generation) megoldja ezt a problémát. Ahelyett, hogy megpróbálnád megtanítani a modellnek az információidat (ami költséges és nem praktikus), képessé teszed arra, hogy a dokumentumaid között keressen. Ha valaki kérdést tesz fel, a rendszer megtalálja a releváns információkat és beépíti azokat a promptba. A modell pedig ezen visszakeresett kontextus alapján válaszol.
-Gondolj a RAG-ra úgy, mint egy referencia könyvtárra a modell számára. Ha kérdezel valamit, a rendszer:
+Gondolj a RAG-re úgy, mint egy hivatkozási könyvtár biztosítására a modell számára. Ha kérdezel valamit, a rendszer:
-1. **Felhasználói kérdés** – felteszed a kérdést
-2. **Beágyazás** – a kérdés vektorrá alakul
-3. **Vektoros keresés** – hasonló dokumentumdarabokat talál
-4. **Kontextus összeszerelése** – a releváns darabokat hozzáadja a prompthoz
-5. **Válasz** – az LLM a kontextus alapján válaszol
+1. **Felhasználói kérdés** – Feltesszük a kérdést
+2. **Beágyazás** – A kérdés vektorosításra kerül
+3. **Vektorkeresés** – Megkeresi a hasonló dokumentumdarabokat
+4. **Kontextus összeállítása** – A releváns darabokat hozzáadja a prompthoz
+5. **Válasz** – Az LLM a kontextus alapján válaszol
-Ezáltal a modell válaszai a te valós adataidra alapozódnak, nem csak a betanítási tudásra vagy kitalált válaszokra.
+Ez alapozza meg a modell válaszait a tényleges adataidra, ahelyett hogy a tanítási tudására hagyatkozna vagy találgatna válaszokat.
## Előfeltételek
-- Befejezett [00. modul – Gyors kezdés](../00-quick-start/README.md) (a későbbiekben hivatkozott Easy RAG példa miatt)
-- Befejezett [01. modul – Bevezetés](../01-introduction/README.md) (Azure OpenAI erőforrások telepítve, beleértve a `text-embedding-3-small` beágyazási modellt)
-- `.env` fájl a gyökérkönyvtárban Azure-hitelesítő adatokkal (a Module 01-ben futtatott `azd up` által létrehozva)
+- Befejezett [01-es modul - Bevezetés](../01-introduction/README.md) (az Azure OpenAI erőforrások telepítve, beleértve a `text-embedding-3-small` beágyazási modellt)
+- `.env` fájl a gyökérkönyvtárban Azure hitelesítő adatokkal (a 01-es modulban a `azd up` parancs hozza létre)
-> **Megjegyzés:** Ha nem fejezted be az 01. modult, előbb kövesd ott a telepítési utasításokat. Az `azd up` parancs telepíti mind a GPT csevegő modellt, mind a beágyazó modellt, amelyet ez a modul használ.
+> **Megjegyzés:** Ha még nem végezted el az 01-es modult, először kövesd ott a telepítési útmutatót. Az `azd up` parancs telepíti mind a GPT chat modellt, mind a beágyazási modellt, amelyet ez a modul használ.
## A RAG megértése
-Az alábbi ábra szemlélteti az alapelvet: a modell tanítási adatára támaszkodás helyett a RAG egy referencia könyvtárat ad neki a dokumentumaidról, amit minden válaszgenerálás előtt felkereshet.
+Az alábbi ábra szemlélteti az alap koncepciót: ahelyett, hogy csak a modell tanítási adataira hagyatkozna, a RAG egy hivatkozási könyvtárt ad neki a dokumentumaidról, hogy minden válaszadás előtt konzultálhasson velük.
-
+
-*Ez az ábra megmutatja a különbséget egy hagyományos LLM (ami a tanítási adaton alapuló találgatást végez) és a RAG-alapú LLM között (ami először a dokumentumaidat nézi meg).*
+*Ez az ábra bemutatja a különbséget a hagyományos LLM (ami a tanítási adatból tippel) és a RAG-megerősített LLM között (ami először megkeresi a dokumentumaidat).*
-Íme, hogyan kapcsolódnak össze a részek az elejétől a végéig. Egy felhasználói kérdés négy lépésen megy keresztül — beágyazás, vektoros keresés, kontextus összeszerelés és válaszgenerálás — mindegyik az előzőre épít:
+Így kapcsolódnak össze az egyes részek végponttól végpontig. A felhasználói kérdés négy lépésen megy keresztül — beágyazás, vektorkeresés, kontextus összeállítás, válaszgenerálás — mindegyik az előzőre épül:
-
+
-*Ez az ábra megmutatja a teljes RAG folyamatot — a felhasználói kérdés beágyazáson, vektor keresésen, kontextus összeszerelésen, majd válaszgeneráláson megy keresztül.*
+*Ez az ábra a RAG végponttól végpontig terjedő folyamatát mutatja — a felhasználói kérdés a beágyazáson, vektorkeresésen, kontextus összeállításon és válaszgeneráláson megy keresztül.*
-A modul többi része részletesen végigvezeti az egyes lépéseket, futtatható és módosítható kóddal.
+A modul további része részletesen végigvezet az egyes szakaszokon, futtatható és módosítható kóddal.
-### Melyik RAG megközelítést használja ez az oktatóanyag?
+### Melyik RAG megközelítést használja ez a bemutató?
-A LangChain4j háromféleképpen kínálja a RAG megvalósítását, mindegyik más absztrakciós szinten. Az alábbi ábra összehasonlítja őket egymás mellett:
+A LangChain4j három módot kínál a RAG implementálására, mindegyik más szintű absztrakciót nyújt. Az alábbi ábra ezeket hasonlítja össze egymás mellett:
-
+
-*Ez az ábra összeveti a három LangChain4j RAG megközelítést — Egyszerű, Natív és Fejlett — megmutatva fő komponenseiket és az alkalmazásukhoz javasolt eseteket.*
+*Ez az ábra összehasonlítja a három LangChain4j RAG megközelítést – Easy, Native és Advanced – bemutatva kulcsfontosságú összetevőiket és az alkalmazási területüket.*
-| Megközelítés | Mit csinál | Hátrány |
+| Megközelítés | Mit csinál | Kompromisszum |
|---|---|---|
-| **Egyszerű RAG** | Minden mind automatikusan kapcsolódik az `AiServices` és a `ContentRetriever` segítségével. Egy interfészt annotálsz, retrievert csatolsz, és a LangChain4j kezeli a beágyazást, keresést és a prompt összeállítását a háttérben. | Minimális kód, de nem látod mi történik lépésről lépésre. |
-| **Natív RAG** | Te hívod a beágyazó modellt, keresed az áruházban, építed a promptot és generálod a válaszokat — minden egyes lépés explicit módon. | Több kód, de minden lépés látható és módosítható. |
-| **Fejlett RAG** | A `RetrievalAugmentor` keretrendszert használja, csatlakoztatható kérdés transzformerekkel, routerekkel, újrarangsorolók és tartalombeesztő elemekkel gyártási szintű munkafolyamatokhoz. | Maximális rugalmasság, de lényegesen nagyobb komplexitás. |
+| **Easy RAG** | Automatikusan beköti az egészet az `AiServices` és a `ContentRetriever` segítségével. Egy interfészt annotálsz, hozzácsatolsz egy retrievert, a LangChain4j pedig mögöttesen kezeli a beágyazást, keresést és prompt összeállítást. | Minimális kód, de nem látod az egyes lépéseket. |
+| **Native RAG** | Te magad hívod meg a beágyazási modellt, keresel az adattárban, építed össze a promptot és generálod a választ — lépésenként, expliciten. | Több kód, de minden lépés látható és módosítható. |
+| **Advanced RAG** | A `RetrievalAugmentor` keretrendszert használja csatlakoztatható lekérdező transzformerekkel, routerekkel, újrarendezőkkel és tartalom injektorokkal produkciós minőségű csővezetékekhez. | Maximális rugalmasság, de jelentősen bonyolultabb. |
-**Ez az oktatóanyag a Natív megközelítést használja.** A RAG folyamat minden lépése — a kérdés beágyazása, a vektoros tároló keresése, a kontextus összeszerelése és a válaszgenerálás — explicit módon ki van írva a [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) fájlban. Ez szándékos: tanulási forrásként fontosabb, hogy minden lépést lásd és megérts, mint hogy a kód minimális legyen. Ha már magabiztos vagy, hogyan illeszkednek össze az elemek, áttérhetsz az Egyszerű RAG-ra gyors prototípusokhoz vagy Fejlett RAG-ra gyártási rendszerekhez.
+**Ez a bemutató a Native megközelítést használja.** A RAG csővezeték minden lépése — a lekérdezés beágyazása, a vektortár keresése, a kontextus összeállítása és a válasz generálása — egyértelműen ki van írva a [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) fájlban. Ez szándékos: tanulási erőforrásként fontosabb, hogy lásd és megértsd az összes lépést, mint hogy a kód minimális legyen. Ha már kényelmesen érted az összefüggéseket, léphetsz tovább az Easy RAG-re gyors prototípusokhoz vagy az Advanced RAG-re produkciós rendszerekhez.
-> **💡 Már láttad az Egyszerű RAG működését?** A [Gyors kezdés modul](../00-quick-start/README.md) tartalmaz egy Dokumentum Kérdezz-Felelek példát ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)), amely az Egyszerű RAG megközelítést használja — a LangChain4j automatikusan kezeli a beágyazást, keresést és prompt összeállítást. Ez a modul egy lépéssel tovább megy, és lebontja ezt a folyamatot, így láthatod és vezérelheted az egyes lépéseket magad.
+> **💡 Kíváncsi vagy az Easy RAG-re?** A LangChain4j kínál egy *Easy RAG* megközelítést is, ahol az `AiServices` és a `ContentRetriever` automatikusan kezelik a beágyazást, keresést és prompt összeállítást. Ez a modul az explicitabb utat választja — a csővezetéket megnyitva, hogy te lásd és irányítsd az egyes lépéseket.
-Az alábbi ábra szemlélteti az Egyszerű RAG folyamatot abból a Gyors kezdés példából. Figyeld meg, hogyan rejti el az `AiServices` és az `EmbeddingStoreContentRetriever` az egész komplexitást — betöltesz egy dokumentumot, csatolsz egy retrievert, és kapsz válaszokat. A Natív megközelítés ennek a rejtett folyamatnak a felbontása:
+Az alábbi ábra az Easy RAG csővezetéket mutatja. Figyeld meg, hogy az `AiServices` és az `EmbeddingStoreContentRetriever` hogyan rejti el a teljes bonyolultságot — dokumentumot töltesz be, csatolsz retrievert és kapsz válaszokat. Ez a modul natív megközelítése azonban kinyitja a rejtett lépéseket:
-
+
-*Ez az ábra az Egyszerű RAG folyamatot mutatja a `SimpleReaderDemo.java`-ból. Hasonlítsd össze a Natív megközeléssel, amit ebben a modulban használsz: az Egyszerű RAG elrejti a beágyazást, a keresést és a prompt összeállítást az `AiServices` és `ContentRetriever` mögött — feltöltesz egy dokumentumot, csatolsz egy retrievert és kapsz válaszokat. Ebben a modulban a Natív megközelítés felbontja ezt a folyamatot, így te hívhatod meg a lépéseket (beágyazás, keresés, kontextus összeszerelés, válaszgenerálás) saját magad, teljes láthatóságot és irányítást kapva.*
+*Ez az ábra az Easy RAG csővezetéket ábrázolja. Hasonlítsd össze a natív megközeléssel, amit ebben a modulban használsz: az Easy RAG elrejti a beágyazást, visszakeresést és prompt összeállítást az `AiServices` és `ContentRetriever` mögött — dokumentumot töltesz be, hozzácsatolsz egy retrievert és kapsz válaszokat. A Natív megközelítés ezen modulban kinyitja a csővezetéket, így magad hívod az egyes lépéseket (beágyazás, keresés, kontextus összeállítás, generálás), teljes láthatóságot és kontrollt adva.*
## Hogyan működik
-Ebben a modulban a RAG folyamat négy, egymás után futó lépésből áll, melyeket a rendszer minden kérdésnél lefuttat. Először egy feltöltött dokumentumot **feldolgoz és darabol** kisebb, kezelhető darabokra. Ezeket a darabokat aztán **vektoros beágyazásokká** alakítja és elmenti, hogy matematikailag összehasonlíthatók legyenek. Amikor megérkezik egy kérdés, a rendszer **szemantikus keresést** végez, hogy megtalálja a legrelevánsabb darabokat, majd ezeket a darabokat adja át kontextusként az LLM-nek a **válaszgeneráláshoz**. Az alábbi részeket végigvesszük kóddal és ábrákkal. Nézzük az első lépést.
+Az ebben a modulban lévő RAG csővezeték négy egymást követő lépésből áll, amelyek lefutnak minden alkalommal, amikor egy felhasználó kérdést tesz fel. Először az feltöltött dokumentumot **feldolgozza és darabolja** kezelhető darabokra. Ezeket a darabokat aztán **vektor beágyazásokká** alakítja és eltárolja, hogy matematikailag össze lehessen hasonlítani őket. Amikor érkezik egy lekérdezés, a rendszer **szemantikus keresést** végez a legrelevánsabb darabok megtalálására, majd ezeket átadja kontextusként az LLM-nek a **válaszgenerálás**hez. Az alábbi szakaszok vezetik végig az egyes lépéseket valós kóddal és ábrákkal. Nézzük az első lépést.
### Dokumentumfeldolgozás
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-Amikor feltöltesz egy dokumentumot, a rendszer feldolgozza (PDF vagy sima szöveg), hozzáad metaadatokat, mint például a fájlnév, majd darabokra bontja — kisebb részekre, amelyek kényelmesen beférnek a modell kontextusablakába. Ezek a darabok kissé átfedik egymást, hogy a határokon ne vesszen el fontos kontextus.
+Amikor feltöltesz egy dokumentumot, a rendszer feldolgozza (PDF vagy sima szöveg), hozzácsatol metaadatokat, mint például a fájlnév, majd darabokra bontja — kisebb részekre, amelyek kényelmesen beleférnek a modell kontextusablakába. Ezek a darabok kicsit átfedik egymást, hogy ne vesszen el kontextus a határoknál.
```java
-// A feltöltött fájl elemzése és becsomagolása LangChain4j Dokumentumba
+// Elemezze a feltöltött fájlt, és csomagolja LangChain4j Dokumentumba
Document document = Document.from(content, metadata);
-// 300 tokenes darabokra bontás 30 tokenes átfedéssel
+// Ossza 300 tokenes darabokra, 30 token átfedéssel
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
-Az alábbi ábra vizuálisan mutatja, hogyan működik ez. Figyeld meg, hogy minden darab megoszt néhány token-t a szomszédjaival — a 30 tokenes átfedés biztosítja, hogy ne vesszen el fontos kontextus a darabhatároknál:
+Az alábbi ábra vizuálisan mutatja ennek működését. Figyeld meg, hogy minden darab egyes tokeneket megoszt a szomszédjaival — a 30 tokenes átfedés biztosítja, hogy ne vesszen el fontos kontextus a darabhatároknál:
-
+
-*Ez az ábra egy dokumentum 300 tokenes darabokra bontását mutatja 30 tokenes átfedéssel, megőrizve a kontextust a darabhatároknál.*
+*Ez az ábra egy dokumentum 300 tokenes darabokra bontását mutatja 30 token átfedéssel, megőrizve a darabhatárok kontextusát.*
-> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Csevegést:** Nyisd meg a [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) fájlt és kérdezd meg:
-> - "Hogyan darabolja fel a LangChain4j a dokumentumokat darabokra és miért fontos az átfedés?"
-> - "Mi az optimális darabméret különböző dokumentumtípusokhoz és miért?"
-> - "Hogyan kezelem a többnyelvű vagy speciális formázású dokumentumokat?"
+> **🤖 Próbáld ki [GitHub Copilot](https://github.com/features/copilot) Chattel:** Nyisd meg a [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) fájlt és kérdezd meg:
+> - "Hogyan darabolja a LangChain4j a dokumentumokat és miért fontos az átfedés?"
+> - "Mi az optimális darabméret különböző dokumentumtípusok esetén és miért?"
+> - "Hogyan kezeljem a többnyelvű vagy speciális formázású dokumentumokat?"
-### Beágyazások létrehozása
+### Beágyazások készítése
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-Minden darabot egy számszerűsített reprezentációvá alakítanak, amit embeddingnek nevezünk — lényegében jelentésből számokra konvertáló eszköz. A beágyazó modell nem „intelligens” úgy, mint egy csevegőmodell; nem tud utasításokat követni, érvelni vagy kérdésekre válaszolni. Amit tud, hogy a szöveget egy olyan matematikai térbe helyezi, ahol a hasonló jelentések egymáshoz közel kerülnek — például a „car” és az „automobile”, vagy a „refund policy” és a „return my money”. Gondolj egy csevegőmodellre, mint egy emberre, akivel beszélgetsz; egy embedding modell pedig egy szuperjó irattár.
+Minden darabot egy numerikus ábrázolássá alakítanak, amit beágyazásnak nevezünk — lényegében egy jelentés-számokra átalakító. A beágyazási modell nem "intelligens" úgy, mint egy chat modell; nem követ utasításokat, nem gondolkodik, nem válaszol kérdésekre. Amit viszont tud, hogy a szöveget egy matematikai térbe helyezi, ahol hasonló jelentések egymáshoz közel eső vektorok lesznek — például "autó" közel "járműhöz", "visszatérítési szabályzat" közel a "pénzem vissza" kifejezéshez. Gondolj a chat modellre, mint egy beszélgető partnerre; egy beágyazási modell egy kimagaslóan jó iratkezelő rendszer.
-Az alábbi ábra vizualizálja ezt a koncepciót — szöveg megy be, numerikus vektorok jönnek ki, és hasonló jelentések közeli vektorokat eredményeznek:
+Az alábbi ábra ezt a koncepciót szemlélteti — bejön a szöveg, kimennek numerikus vektorok, és a hasonló jelentések közeli vektorokat eredményeznek:
-
+
-*Ez az ábra szemlélteti, hogyan konvertál egy embedding modell szöveget számszerű vektorokká, ahol a hasonló jelentések — például „car” és „automobile” — egymáshoz közeli helyet foglalnak el a vektortérben.*
+*Ez az ábra megmutatja, hogyan alakít egy beágyazási modell szöveget numerikus vektorokká, ahol a hasonló jelentések egymáshoz közel helyezkednek el a vektortérben — például "autó" és "jármű".*
```java
@Bean
@@ -154,29 +153,29 @@ EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-Az osztálydiagram megmutatja a RAG folyamat két különálló áramlatát és a LangChain4j osztályokat, amelyek megvalósítják azokat. A **betöltő áramlat** (feltöltéskor egyszer lefut) darabolja a dokumentumot, beágyazza a darabokat és eltárolja őket `.addAll()` hívással. A **lekérdező áramlat** (minden egyes kérdésnél fut) beágyazza a kérdést, `.search()` segítségével keresi a tárolóban, majd a megtalált kontextust átadja a csevegőmodellnek. Mindkét áramlat az `EmbeddingStore` közös interfészen keresztül kapcsolódik:
+Az osztálydiagram az alábbi két folyamatról szól a RAG-csővezetékben, és a LangChain4j osztályokról, amelyek megvalósítják őket. Az **adatfeltöltési folyamat** (feltöltéskor fut egyszer) szétbontja a dokumentumot, beágyazza a darabokat, majd eltárolja őket `.addAll()` segítségével. A **lekérdezési folyamat** (minden kérdésnél fut) beágyazza a kérdést, megkeresi az adattárat `.search()`-al, és átadja a talált kontextust a chat modellnek. Mindkét folyamat találkozik a közös `EmbeddingStore` interfészen:
-
+
-*Ez az ábra megmutatja a RAG két áramlatát — betöltést és lekérdezést — és azok kapcsolódását a közös EmbeddingStore-on keresztül.*
+*Ez az ábra a RAG két folyamatát mutatja — adatfeltöltést és lekérdezést —, és azt, hogy ezek hogyan kapcsolódnak a közös EmbeddingStore-hoz.*
-Ha a beágyazásokat eltárolták, a hasonló tartalmak természetesen együtt csoportosulnak a vektortérben. Az alábbi vizualizáció mutatja, hogyan rendeződnek a kapcsolódó témájú dokumentumok szomszédos pontokká, ami lehetővé teszi a szemantikus keresést:
+Ha egyszer eltároltuk a beágyazásokat, a hasonló tartalmak természetesen együtt csoportosulnak a vektortérben. Az alábbi vizualizáció megmutatja, hogy a kapcsolódó témákhoz tartozó dokumentumok hogyan állnak össze közeli pontokká, ami lehetővé teszi a szemantikus keresést:
-
+
-*Ez a vizualizáció mutatja, hogyan csoportosulnak a kapcsolódó dokumentumok 3D vektortérben, olyan témák mellett, mint Műszaki dokumentáció, Üzleti szabályok és GYIK, amelyek elkülönült csoportokat alkotnak.*
+*Ez a vizualizáció mutatja, hogyan csoportosulnak a kapcsolódó dokumentumok 3D vektortérben, ahol a technikai dokumentumok, üzleti szabályok és GYIK témakörök elkülönülő csoportokat alkotnak.*
-Amikor egy felhasználó keres, a rendszer négy lépést követ: egyszer beágyazza a dokumentumokat, minden keresésnél beágyazza a kérdést, a kérdés vektorát összehasonlítja az összes eltárolt vektorral koszinusz hasonlóság alapján, és a legmagasabb pontszámú top-K darabot adja vissza. Az alábbi ábra végigviszi ezeket a lépéseket és a LangChain4j osztályokat:
+Amikor a felhasználó keres, a rendszer négy lépést követ: egyszer beágyazza a dokumentumokat, minden keresésnél beágyazza a lekérdezést, összehasonlítja a kérdés vektorát az összes eltárolt vektorral koszinusz hasonlósággal, majd visszaadja a legjobb K darabot. Az alábbi ábra végigvezet minden lépésen és a kapcsolódó LangChain4j osztályokon:
-
+
-*Ez az ábra a négy lépéses beágyazás-keresés folyamatot mutatja: dokumentumok beágyazása, kérdés beágyazása, vektorok összehasonlítása koszinusz hasonlósággal, és a top-K eredmények visszaadása.*
+*Ez az ábra a beágyazási keresés négy lépését mutatja: dokumentumok beágyazása, lekérdezés beágyazása, vektorok összehasonlítása koszinusz hasonlósággal és a legjobb K eredmény visszaadása.*
### Szemantikus keresés
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Amikor kérdést teszel fel, a kérdésed is beágyazásra kerül. A rendszer összehasonlítja a kérdés beágyazását az összes dokumentumdarab beágyazásával. Megtalálja a leginkább hasonló jelentésű darabokat — nem csak a kulcsszó egyezéseket, hanem a tényleges szemantikus hasonlóságot.
+Amikor kérdést teszel fel, a kérdésed is beágyazódik. A rendszer összehasonlítja a kérdés beágyazását az összes dokumentumdarab beágyazásával. Megtalálja a leginkább hasonló jelentésű darabokat — nem csak kulcsszó egyezést, hanem tényleges szemantikus hasonlóságot keres.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -196,27 +195,27 @@ for (EmbeddingMatch match : matches) {
}
```
-Az alábbi ábra összehasonlítja a szemantikus keresést a hagyományos kulcsszavas kereséssel. Egy kulcsszavas keresés a „vehicle” szóra nem talál meg egy „cars and trucks” darabot, míg a szemantikus keresés megérti, hogy ez ugyanazt jelenti, és magas pontszámmal adja vissza:
+Az alábbi ábra összehasonlítja a szemantikus keresést a hagyományos kulcsszavas kereséssel. Egy kulcsszavas keresés a "jármű" szóra nem talál meg egy "autókról és teherautókról" szóló darabot, de a szemantikus keresés megérti, hogy ezek ugyanazt jelentik, és magas pontszámmal visszaadja:
-
+
-*Ez az ábra bemutatja a kulcsszavas keresést és a szemantikus keresést, megmutatva, hogyan hoz vissza a szemantikus keresés fogalmilag kapcsolódó tartalmat még akkor is, ha a pontos kulcsszavak eltérnek.*
-A háttérben a hasonlóságot koszinusz hasonlóság méri — gyakorlatilag azt kérdezi, "ez a két nyíl ugyanabba az irányba mutat-e?" Két töredék teljesen eltérő szavakat használhat, de ha ugyanazt jelenti, a vektorjaik ugyanabba az irányba mutatnak és az értékük 1,0-hoz közeli:
+*Ez az ábra összehasonlítja a kulcsszó-alapú keresést a szemantikus kereséssel, megmutatva, hogy a szemantikus keresés konceptuálisan kapcsolódó tartalmakat is visszaad akkor is, ha a kulcsszavak eltérnek.*
-
+A háttérben a hasonlóságot koszinusz hasonlósággal mérik — lényegében azt kérdezik: "ez a két nyíl ugyanabba az irányba mutat?" Két darab teljesen eltérő szavakat használhat, de ha ugyanazt jelenti, a vektoraik ugyanabba az irányba mutatnak és közelítik az 1.0 értéket:
-*Ez az ábra a koszinusz hasonlóságot mutatja be, mint az embedding vektorok közötti szöget — a jobban összehangolt vektorok közelebb állnak az 1,0-hoz, ami magasabb szemantikai hasonlóságot jelez.*
+
+*Ez az ábra a koszinusz hasonlóságot szemlélteti, mint a beágyazási vektorok közötti szög – minél jobban illeszkednek a vektorok, annál közelebb kerül az érték 1.0-hoz, ami magasabb szemantikai hasonlóságot jelez.*
-> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Chattel:** Nyisd meg a [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) fájlt és kérdezd meg:
-> - "Hogyan működik a hasonlóság keresés embeddingekkel és mi határozza meg az értékelést?"
-> - "Milyen hasonlósági küszöböt használjak és ez hogyan befolyásolja az eredményeket?"
-> - "Hogyan kezelem, ha nem talál releváns dokumentumokat?"
+> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Chat segítségével:** Nyisd meg a [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) fájlt, és kérdezd meg:
+> - "Hogyan működik a hasonlóság alapú keresés a beágyazásokkal, és mi határozza meg a pontszámot?"
+> - "Milyen hasonlósági küszöböt használjak, és ez hogyan befolyásolja az eredményeket?"
+> - "Hogyan kezeljem azokat az eseteket, amikor nem található releváns dokumentum?"
### Válaszgenerálás
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-A legrelevánsabb töredékeket egy strukturált promptba szerkesztik, mely tartalmazza az explicit utasításokat, a lekért kontextust és a felhasználó kérdését. A modell ezeket a konkrét töredékeket olvassa be, és ezek alapján válaszol — csak a rendelkezésére álló információkat használhatja, ami megakadályozza a téves válaszokat.
+A legrelevánsabb szeletek egy strukturált promptba vannak összerakva, amely tartalmaz explicit utasításokat, a lekérdezett kontextust és a felhasználó kérdését. A modell ezeket a konkrét szeleteket olvassa el, és ezek alapján válaszol – csak a rendelkezésre álló információt használhatja, ami megakadályozza a kitalációt.
```java
String context = matches.stream()
@@ -237,65 +236,65 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-Az alábbi ábra ezt a szerkesztést mutatja — a keresési lépésből a legjobb pontszámú töredékeket a prompt sablonba illesztik, és az `OpenAiOfficialChatModel` egy megalapozott választ generál:
+Az alábbi ábra mutatja ezt az összerakást működés közben – a keresési lépésből a legjobb pontszámú szeletek beépülnek a prompt sablonba, majd az `OpenAiOfficialChatModel` generál egy megalapozott választ:
-
+
-*Ez az ábra azt mutatja, hogyan szervezik össze a legjobb pontszámú töredékeket egy strukturált promptba, amely a modell számára alapozott választ enged meg a saját adataidból.*
+*Ez az ábra megmutatja, hogyan épülnek be a legjobb pontszámú szeletek egy strukturált promptba, lehetővé téve, hogy a modell megalapozott választ generáljon az adataidból.*
-## Futtasd az alkalmazást
+## Az alkalmazás futtatása
-**Ellenőrizd az üzembe helyezést:**
+**Telepítés ellenőrzése:**
-Győződj meg arról, hogy a `.env` fájl létezik a gyökérkönyvtárban az Azure hitelesítő adatokkal (a 01-es modulban létrehozva). Futtasd ezt a modul könyvtárából (`03-rag/`):
+Győződj meg róla, hogy a gyökérkönyvtárban létezik a `.env` fájl Azure hitelesítő adatokkal (amely a 01-es modul során jön létre). Futtasd ezt a modul könyvtárából (`03-rag/`):
**Bash:**
```bash
-cat ../.env # Meg kell jelenítenie az AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT értékeket
+cat ../.env # Meg kell jeleníteni az AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT értékeket
```
**PowerShell:**
```powershell
-Get-Content ..\.env # Meg kell jelenítenie az AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT értékeket
+Get-Content ..\.env # Meg kell jeleníteni az AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT értékeket
```
-**Indítsd el az alkalmazást:**
+**Az alkalmazás indítása:**
-> **Megjegyzés:** Ha már elindítottad az összes alkalmazást az `./start-all.sh`-al a gyökérkönyvtárból (ahogy a 01-es modul leírja), akkor ez a modul már fut a 8081-es porton. Az alábbi indító parancsokat átugorhatod, és közvetlenül a http://localhost:8081 címre léphetsz.
+> **Megjegyzés:** Ha már elindítottad az összes alkalmazást az `./start-all.sh` segítségével a gyökérkönyvtárból (ahogy az 01-es modulban le van írva), ez a modul már fut a 8081-es porton. Megspórolhatod az alábbi indító parancsokat, és egyből megnyithatod a http://localhost:8081 címet.
-**1. Opció: Spring Boot Dashboard használata (javasolt VS Code felhasználóknak)**
+**1. lehetőség: Spring Boot Dashboard használata (ajánlott VS Code felhasználóknak)**
-A fejlesztői konténer tartalmazza a Spring Boot Dashboard kiterjesztést, amely vizuális kezelőfelületet biztosít az összes Spring Boot alkalmazáshoz. A VS Code bal oldalán az Activity Bar-ban találod (keresd a Spring Boot ikont).
+A fejlesztői konténer tartalmazza a Spring Boot Dashboard bővítményt, amely vizuális felületet biztosít az összes Spring Boot alkalmazás kezeléséhez. A VS Code bal oldali Activity Bar-ján találod (keresd a Spring Boot ikont).
-A Spring Boot Dashboardból:
-- Megtekintheted az összes rendelkezésre álló Spring Boot alkalmazást a munkaterületen
-- Egy kattintással indíthatsz/leállíthatsz alkalmazásokat
-- Valós idejű alkalmazásnaplókat nézhetsz
-- Nyomon követheted az alkalmazás állapotát
+A Spring Boot Dashboard-ból elvégezheted:
+- Az összes elérhető Spring Boot alkalmazás megtekintését a munkaterületen
+- Az alkalmazások egy kattintással való indítását/leállítását
+- Az alkalmazás naplóinak valós idejű megtekintését
+- Az alkalmazás állapotának monitorozását
-Egyszerűen kattints a "rag" melletti lejátszás gombra a modul elindításához, vagy indítsd el egyszerre az összes modult.
+Egyszerűen kattints a lejátszás gombra a "rag" modul mellett az indításhoz, vagy indítsd el az összes modult egyszerre.
-*Ez a képernyőkép a Spring Boot Dashboardot mutatja a VS Code-ban, ahol vizuálisan indíthatsz, állíthatsz le és figyelhetsz alkalmazásokat.*
+*Ez a képernyőkép a Spring Boot Dashboard-ot mutatja VS Code-ban, ahol vizuálisan indíthatsz, leállíthatsz és figyelhetsz alkalmazásokat.*
-**2. Opció: Shell szkriptek használata**
+**2. lehetőség: Shell scriptek használata**
-Indítsd el az összes webalkalmazást (01-04-es modulok):
+Indítsd el az összes webalkalmazást (01-04 modulok):
**Bash:**
```bash
-cd .. # A gyökér könyvtárból
+cd .. # A gyökérkönyvtárból
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # A gyökérkönyvtárból
+cd .. # A gyökér könyvtárból
.\start-all.ps1
```
-Vagy indítsd csak ezt a modult:
+Vagy indítsd el csak ezt a modult:
**Bash:**
```bash
@@ -309,16 +308,16 @@ cd 03-rag
.\start.ps1
```
-Mindkét szkript automatikusan betölti a környezeti változókat a gyökér `.env` fájlból, és ha nem léteznek, lefordítja a JAR fájlokat.
+Mindkét script automatikusan betölti a környezeti változókat a gyökér `.env` fájlból, és lefordítja a JAR fájlokat, ha még nem léteznek.
-> **Megjegyzés:** Ha inkább manuálisan fordítanád le az összes modult indítás előtt:
+> **Megjegyzés:** Ha inkább kézzel fordítanád le az összes modult az indítás előtt:
>
> **Bash:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-
+>
> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
@@ -345,81 +344,81 @@ cd ..; .\stop-all.ps1 # Minden modul
## Az alkalmazás használata
-Az alkalmazás webes felületet biztosít dokumentum feltöltéshez és kérdések feltevéséhez.
+Az alkalmazás egy webes felületet kínál dokumentum feltöltéshez és kérdések feltevéséhez.
-
+
*Ez a képernyőkép a RAG alkalmazás felületét mutatja, ahol dokumentumokat töltesz fel és kérdéseket teszel fel.*
### Dokumentum feltöltése
-Kezdd egy dokumentum feltöltésével — teszteléshez a TXT fájlok a legjobbak. Ebben a könyvtárban található egy `sample-document.txt`, amely információkat tartalmaz a LangChain4j jellemzőiről, RAG megvalósításról és bevált gyakorlatokról — tökéletes a rendszer kipróbálásához.
+Kezdd egy dokumentum feltöltésével – teszteléshez a TXT fájlok a legjobbak. Ehhez a könyvtárhoz tartozik egy `sample-document.txt`, amely a LangChain4j jellemzőiről, a RAG implementációról és legjobb gyakorlatokról tartalmaz információkat – tökéletes a rendszer teszteléséhez.
-A rendszer feldolgozza a dokumentumot, felbontja töredékekre, és embeddingeket készít mindegyikhez. Ez automatikusan megtörténik a feltöltéskor.
+A rendszer feldolgozza a dokumentumodat, felbontja szeletekre, és létrehozza minden szelethez a beágyazást. Ez automatikusan megtörténik a feltöltéskor.
### Kérdések feltevése
-Most tegyél fel konkrét kérdéseket a dokumentum tartalmáról. Próbálj meg valami tényszerűt kérdezni, ami egyértelműen szerepel a dokumentumban. A rendszer megkeresi a releváns töredékeket, beilleszti azokat a promptba, és választ generál.
+Most tegyél fel konkrét kérdéseket a dokumentum tartalmáról. Próbálj meg valami tényszerűt, ami egyértelműen benne van a dokumentumban. A rendszer megkeresi a releváns szeleteket, beilleszti azokat a promptba és generál egy választ.
### Forráshivatkozások ellenőrzése
-Figyeld meg, hogy minden válasz tartalmaz forráshivatkozásokat a hasonlósági pontszámokkal. Ezek a pontszámok (0 és 1 között) azt mutatják, milyen releváns volt az adott töredék a kérdésedhez. A magasabb pontszám jobb egyezést jelent. Ez lehetővé teszi, hogy ellenőrizd a választ az eredeti forrás alapján.
+Vegyük észre, hogy minden válasz tartalmaz forráshivatkozásokat a hasonlósági pontszámokkal együtt. Ezek a pontszámok (0-tól 1-ig) azt jelzik, milyen releváns volt az adott szelet a kérdésedre. A magasabb pontszám jobb találatot jelent. Így ellenőrizheted a választ az eredeti forrással szemben.
-
+
-*Ez a képernyőkép a lekérdezési eredményeket mutatja a generált válasszal, forráshivatkozásokkal és relevancia pontszámokkal minden lekért töredékhez.*
+*Ez a képernyőkép kérdező eredményeket mutat, a generált választ, forráshivatkozásokat és az egyes lekért szeletek relevancia pontszámait.*
### Kísérletezz a kérdésekkel
-Próbálj ki különféle kérdéstípusokat:
+Próbálj ki különböző típusú kérdéseket:
- Konkrét tények: "Mi a fő téma?"
- Összehasonlítások: "Mi a különbség X és Y között?"
-- Összefoglalók: "Foglald össze a Z-vel kapcsolatos kulcspontokat"
+- Összefoglalók: "Foglald össze a Z legfontosabb pontjait"
-Nézd meg, hogyan változnak a relevancia pontszámok az alapján, hogy mennyire egyezik a kérdés a dokumentumtartalommal.
+Figyeld meg, hogyan változnak a relevancia pontszámok attól függően, mennyire egyezik a kérdésed a dokumentum tartalmával.
-## Alapfogalmak
+## Kulcsfogalmak
-### Töredékezési stratégia
+### Szeletelési stratégia
-A dokumentumokat 300 tokenes töredékekre bontják 30 token átfedéssel. Ez a balansz biztosítja, hogy minden töredéknek legyen elég kontextusa az értelmes tartalomhoz, miközben elég kicsi marad ahhoz, hogy több töredéket is bele lehessen foglalni egy promptba.
+A dokumentumokat 300 tokenes szeletekre bontjuk, 30 token átfedéssel. Ez az egyensúly biztosítja, hogy minden szeletnek elegendő kontextusa legyen a jelentéshez, miközben elég kicsi ahhoz, hogy több szelet is bekerülhessen egy promptba.
### Hasonlósági pontszámok
-Minden lekért töredékhez tartozik egy 0 és 1 közötti hasonlósági pontszám, amely jelzi, mennyire egyezik a felhasználó kérdésével. Az alábbi ábra vizualizálja a pontszám tartományokat és azt, hogy a rendszer hogyan használja ezeket az eredmények szűrésére:
+Minden lekért szelethez tartozik egy 0 és 1 közötti hasonlósági pontszám, amely azt mutatja, mennyire egyezik a felhasználó kérdésével. Az alábbi ábra vizualizálja a pontszám tartományokat és azt, hogyan használja a rendszer ezeket az eredmények szűrésére:
-
+
-*Ez az ábra a pontszám tartományokat mutatja 0-tól 1-ig, egy 0,5-ös minimum küszöbbel, ami kiszűri az irreleváns töredékeket.*
+*Ez az ábra a 0-tól 1-ig tartó pontszámokat mutatja, egy 0,5-ös minimum küszöbbel, amely kiszűri a nem releváns szeleteket.*
-A pontszámok 0 és 1 között mozognak:
-- 0,7-1,0: Nagyon releváns, pontos egyezés
+A pontszámok tartománya:
+- 0,7-1,0: Nagyon releváns, pontos találat
- 0,5-0,7: Releváns, jó kontextus
-- 0,5 alatt: Kiszűrve, túl eltérő
+- 0,5 alatt: Kiszűrt, túl eltérő
-A rendszer csak a minimum küszöböt meghaladó töredékeket veszi figyelembe a minőség biztosításához.
+A rendszer csak a minimum küszöböt meghaladó szeleteket hozza vissza a minőség biztosítása érdekében.
-Az embeddingek jól működnek, ha a jelentések tisztán csoportosulnak, de vannak vakfoltjaik. Az alábbi ábra az általános hibamódokat mutatja — a túl nagy töredékek zavaros vektorokat eredményeznek, a túl kicsiknek nincs kontextusa, az ambivalens kifejezések több klaszterre mutathatnak, és a pontos egyezés keresések (azonosítók, cikkszámok) nem működnek embeddingekkel:
+A beágyazások jól működnek, ha a jelentés tisztán csoportosul, de vannak gyenge pontjaik. Az alábbi ábra bemutatja a gyakori hibamódokat – túl nagy szeletek zavaros vektorokat eredményeznek, túl kicsik kontextus hiányában szenvednek, kétértelmű kifejezések több klaszterre mutathatnak, és az azonosítás alapú keresések (azonosítók, cikkszámok) egyáltalán nem működnek beágyazásokkal:
-
+
-*Ez az ábra az embeddingek gyakori hibamódjait mutatja be: túl nagy, túl kicsi töredékek, több klaszterre mutató kifejezések és azonosító típusú keresések, amelyek nem működnek embeddinggel.*
+*Ez az ábra a beágyazások általános hibamódjait mutatja: túl nagy szeletek, túl kicsi szeletek, kétértelmű kifejezések, és pontos egyezésű keresések, mint az azonosítók.*
### Memóriában tárolás
-Ez a modul a egyszerűség kedvéért memóriában tárol. Ha újraindítod az alkalmazást, az feltöltött dokumentumok elvesznek. Éles rendszerek tartós vektor adatbázisokat használnak, mint a Qdrant vagy az Azure AI Search.
+Ez a modul egyszerűség kedvéért memóriában tárolja az adatokat. Az alkalmazás újraindításakor a feltöltött dokumentumok elvesznek. Éles rendszerek tartós vektordatabázisokat használnak, például Qdrant vagy Azure AI Search.
### Kontextusablak kezelése
-Minden modellnek van egy maximális kontextusablaka. Nem tudsz minden töredéket belefoglalni egy nagy dokumentumból. A rendszer a top N legrelevánsabb töredéket kéri le (alapértelmezett 5), hogy a határokat tartsa és elég kontextust adjon a pontos válaszokhoz.
+Minden modellnek van maximális kontextusablaka. Nem fér be minden szelet nagy dokumentumokból. A rendszer az N legrelevánsabb szeletet hozza vissza (alapértelmezett 5), hogy a határokon belül maradjon, miközben elég kontextust ad a pontos válaszokhoz.
-## Mikor számít a RAG
+## Mikor fontos a RAG
-A RAG nem mindig a megfelelő megközelítés. Az alábbi döntési segédlet segít eldönteni, mikor érdemes RAG-ot használni, és mikor elegendő az egyszerűbb megoldás — például a tartalom közvetlen promptba illesztése vagy a modell beépített tudásának használata:
+A RAG nem mindig a megfelelő megoldás. Az alábbi döntési útmutató segít eldönteni, mikor ad hozzáadott értéket a RAG, és mikor elegendőek egyszerűbb megoldások – például a tartalom közvetlen beillesztése a promptba vagy a modell beépített tudására támaszkodás:
-
+
-*Ez az ábra egy döntési segédletet mutat be, hogy mikor ad értéket a RAG, és mikor elegendőek az egyszerűbb megoldások.*
+*Ez az ábra döntési útmutatót mutat, hogy mikor érdemes használni a RAG-ot, és mikor elegendőek egyszerűbb megoldások.*
## Következő lépések
@@ -427,11 +426,11 @@ A RAG nem mindig a megfelelő megközelítés. Az alábbi döntési segédlet se
---
-**Navigáció:** [← Előző: 02-es modul - Prompt fejlesztés](../02-prompt-engineering/README.md) | [Vissza a főoldalra](../README.md) | [Következő: 04-es modul - Eszközök →](../04-tools/README.md)
+**Navigáció:** [← Előző: 02-es modul – Prompt mérnökség](../02-prompt-engineering/README.md) | [Vissza a főoldalra](../README.md) | [Következő: 04-es modul – Eszközök →](../04-tools/README.md)
---
-**Jogi nyilatkozat**:
-Ez a dokumentum az AI fordító szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) használatával készült. Bár igyekszünk pontos fordítást biztosítani, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Kritikus információk esetén szakmai, emberi fordítást javaslunk. Nem vállalunk felelősséget az ebből eredő félreértésekért vagy hibás értelmezésekért.
+**Jogi nyilatkozat**:
+Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.
\ No newline at end of file
diff --git a/translations/hu/04-tools/README.md b/translations/hu/04-tools/README.md
index 67aac03c6..add48cc1c 100644
--- a/translations/hu/04-tools/README.md
+++ b/translations/hu/04-tools/README.md
@@ -1,84 +1,84 @@
-# 04. modul: AI ügynökök eszközökkel
+# Modul 04: MI Ügynökök eszközökkel
## Tartalomjegyzék
-- [Videós bemutató](../../../04-tools)
-- [Mit tanulsz meg](../../../04-tools)
-- [Előfeltételek](../../../04-tools)
-- [AI ügynökök megértése eszközökkel](../../../04-tools)
-- [Hogyan működik az eszközhívás](../../../04-tools)
- - [Eszközdefiníciók](../../../04-tools)
- - [Döntéshozatal](../../../04-tools)
- - [Végrehajtás](../../../04-tools)
- - [Válaszgenerálás](../../../04-tools)
- - [Architektúra: Spring Boot automatikus bekötés](../../../04-tools)
-- [Eszközláncolás](../../../04-tools)
-- [Az alkalmazás futtatása](../../../04-tools)
-- [Az alkalmazás használata](../../../04-tools)
- - [Egyszerű eszközhasználat kipróbálása](../../../04-tools)
- - [Eszközláncolás tesztelése](../../../04-tools)
- - [Párbeszédfolyam megtekintése](../../../04-tools)
- - [Különböző kérdések kipróbálása](../../../04-tools)
-- [Kulcsfogalmak](../../../04-tools)
- - [ReAct minta (gondolkodás és cselekvés)](../../../04-tools)
- - [Az eszközleírások számítanak](../../../04-tools)
- - [Munkamenet-kezelés](../../../04-tools)
- - [Hibakezelés](../../../04-tools)
-- [Elérhető eszközök](../../../04-tools)
-- [Mikor használjunk eszközalapú ügynököket](../../../04-tools)
-- [Eszközök kontra RAG](../../../04-tools)
-- [Következő lépések](../../../04-tools)
-
-## Videós bemutató
-
-Nézd meg ezt az élő részvételű bemutatót, amely elmagyarázza, hogyan kezdj hozzá ehhez a modulhoz:
-
-
-
-## Mit tanulsz meg
-
-Eddig megtanultad, hogyan folytass párbeszédeket az AI-val, hogyan építsd fel hatékonyan a promptokat, és hogyan alapozd válaszaidat a dokumentumaidra. De van egy alapvető korlát: a nyelvi modellek csak szöveget képesek generálni. Nem tudnak időjárást ellenőrizni, számításokat végezni, adatbázisokat lekérdezni vagy külső rendszerekkel kommunikálni.
-
-Az eszközök ezt megváltoztatják. Azáltal, hogy a modell hozzáférhet olyan függvényekhez, amiket meghívhat, szöveggenerátorból olyan ügynökké alakul, amely képes műveleteket végrehajtani. A modell eldönti, mikor kell eszköz, melyik eszközt használja, és milyen paraméterekkel hívja meg. A te kódod végrehajtja a függvényt és visszaadja az eredményt. A modell beépíti ezt az eredményt a válaszába.
+- [Videó Bemutató](#videó-bemutató)
+- [Amit Megtanulsz](#amit-megtanulsz)
+- [Előfeltételek](#előfeltételek)
+- [Mesterséges Intelligencia Ügynökök Eszközökkel](#mesterséges-intelligencia-ügynökök-eszközökkel)
+- [Hogyan Működik az Eszköz Meghívás](#hogyan-működik-az-eszköz-meghívás)
+ - [Eszköz Definíciók](#eszköz-definíciók)
+ - [Döntéshozatal](#döntéshozatal)
+ - [Végrehajtás](#végrehajtás)
+ - [Válaszgenerálás](#válaszgenerálás)
+ - [Architektúra: Spring Boot Automatikus Bekötés](#architektúra-spring-boot-automatikus-bekötés)
+- [Eszközláncolás](#eszközláncolás)
+- [Az Alkalmazás Futattása](#az-alkalmazás-futattása)
+- [Az Alkalmazás Használata](#az-alkalmazás-használata)
+ - [Egyszerű Eszköz Használat Kipróbálása](#próbálj-ki-egyszerű-eszközhasználatot)
+ - [Eszközláncolás Tesztelése](#teszteld-az-eszköz-láncolást)
+ - [Beszélgetési Folyamat Megtekintése](#nézd-meg-a-beszélgetés-menetét)
+ - [Különböző Kérések Kipróbálása](#kísérletezz-különféle-kérésekkel)
+- [Kulcsfogalmak](#főbb-fogalmak)
+ - [ReAct Minta (Érvelés és Cselekvés)](#react-minta-gondolkodás-és-cselekvés)
+ - [Az Eszköz Leírások Fontossága](#az-eszközleírások-fontossága)
+ - [Munkamenet Kezelés](#munkamenet-kezelés)
+ - [Hibakezelés](#hibakezelés)
+- [Elérhető Eszközök](#elérhető-eszközök)
+- [Mikor Használjunk Eszköz-alapú Ügynököket](#mikor-használj-eszköz-alapú-ügynököket)
+- [Eszközök vs RAG](#eszközök-vs-rag)
+- [Következő Lépések](#következő-lépések)
+
+## Videó Bemutató
+
+Nézd meg ezt az élő munkamenetet, amely elmagyarázza, hogyan kezdj neki ennek a modulnak:
+
+
+
+## Amit Megtanulsz
+
+Eddig megtanultad, hogyan folytass beszélgetést a MI-vel, hogyan strukturáld hatékonyan a promptokat, és hogyan kötöd válaszaidat a dokumentumaidhoz. De van egy alapvető korlát: a nyelvi modellek csak szöveget generálnak. Nem tudják lekérdezni az időjárást, számításokat végezni, adatbázisokat lekérdezni vagy külső rendszerekkel kommunikálni.
+
+Az eszközök ezt megváltoztatják. Azáltal, hogy a modellhez hozzáférést adsz hívható funkciókhoz, alakítsd át szöveggenerátorból ügynökké, aki képes cselekedni. A modell eldönti, mikor van szüksége eszközre, melyik eszközt használja, és milyen paramétereket ad át. A kódod végrehajtja a funkciót és visszaadja az eredményt. A modell beépíti ezt az eredményt a válaszába.
## Előfeltételek
-- Elvégezted az [01. modul - Bevezetés](../01-introduction/README.md) anyagát (Azure OpenAI erőforrások telepítve)
-- Ajánlott a korábbi modulok elvégzése (ez a modul a [03. modul RAG fogalmaira](../03-rag/README.md) hivatkozik az Eszközök kontra RAG összehasonlításban)
-- `.env` fájl a gyökérkönyvtárban Azure hitelesítőkkel (amit az `azd up` létrehozott az 01. modulban)
+- Elkészült a [01. modul - Bevezetés](../01-introduction/README.md) (Azure OpenAI erőforrások telepítve)
+- Az előző modulok elvégzése ajánlott (ez a modul hivatkozik a [RAG koncepciókra a 03. modulból](../03-rag/README.md) az Eszközök vs RAG összehasonlításban)
+- `.env` fájl a gyökérkönyvtárban Azure hitelesítő adatokkal (az `azd up` létrehozza az 01. modulban)
-> **Megjegyzés:** Ha még nem végezted el az 01. modult, előbb kövesd ott a telepítési útmutatót.
+> **Megjegyzés:** Ha nem végezted el az 01. modul befejezését, előbb kövesd az ottani telepítési utasításokat.
-## AI ügynökök megértése eszközökkel
+## Mesterséges Intelligencia Ügynökök Eszközökkel
-> **📝 Megjegyzés:** Ebben a modulban az "ügynök" kifejezés olyan AI asszisztenseket jelöl, amelyek eszközhívó képességekkel vannak bővítve. Ez különbözik a **Agentic AI** mintáktól (önálló ügynökök tervezéssel, memóriával és többlépéses érveléssel), amelyeket majd a [05. modulban: MCP](../05-mcp/README.md) tárgyalunk.
+> **📝 Megjegyzés:** Ebben a modulban az „ügynökök” kifejezés olyan MI asszisztenseket jelöl, amelyek eszköz-hívási képességekkel bővültek. Ez eltér az **Agentic AI** mintáktól (önálló ügynökök tervezéssel, memóriával és többlépcsős érveléssel), amelyeket a [05. modulban: MCP](../05-mcp/README.md) fedünk le.
-Eszközök nélkül a nyelvi modell csak szöveget tud generálni a tanítási adataiból. Ha megkérdezed az aktuális időjárást, csupán találgatnia kell. Ha eszközöket adsz neki, akkor például egy időjárási API-t hívhat meg, számításokat végezhet, vagy lekérdezheti egy adatbázist – majd az így kapott valós eredményeket beépíti a válaszába.
+Eszközök nélkül a nyelvi modell csak szöveget generál a tanulási adataiból. Ha megkérdezed az aktuális időjárást, csak találgat. Ha eszközöket adsz neki, hívhat időjárás API-t, végezhet számításokat vagy adatbázis lekérdezést — majd a valós eredményeket beépíti a válaszába.
-
+
-*Eszközök nélkül a modell csak találgat — eszközökkel API-kat hívhat, számításokat végezhet és valós idejű adatokat adhat vissza.*
+*Eszközök nélkül a modell csak találgat — eszközökkel API-kat hívhat, számításokat végezhet, és valós idejű adatokat szolgáltathat.*
-Az AI ügynök eszközökkel egy **Reasoning and Acting (ReAct)** mintát követ. A modell nem csak válaszol — végiggondolja, mire van szüksége, eszközt hív meg, megfigyeli az eredményt, majd eldönti, hogy újra cselekszik, vagy leadja a végső választ:
+Az eszközökkel rendelkező MI ügynök egy **Reasoning and Acting (ReAct)** mintát követ. A modell nem csak válaszol — megfontolja, mire van szüksége, cselekszik eszközhívással, megfigyeli az eredményt, majd eldönti, hogy újra cselekszik-e vagy végső választ ad:
-1. **Érvelés** — Az ügynök elemzi a felhasználó kérdését, és megállapítja, milyen információra van szüksége
-2. **Cselekvés** — Az ügynök kiválasztja a megfelelő eszközt, generálja a helyes paramétereket, és meghívja azt
-3. **Megfigyelés** — Kézhez kapja az eszköz eredményét és értékeli azt
-4. **Ismétlés vagy válaszadás** — Ha több adat szükséges, visszatér az első ponthoz; ha nem, természetes nyelvű választ fogalmaz meg
+1. **Érvelés** — Az ügynök elemzi a felhasználó kérdését és meghatározza, milyen információ szükséges
+2. **Cselekvés** — Az ügynök kiválasztja a megfelelő eszközt, előállítja a helyes paramétereket, és hívja azt
+3. **Megfigyelés** — Az ügynök megkapja az eszköz kimenetét és értékeli az eredményt
+4. **Ismétlés vagy Válaszadás** — Ha további adatok kellettek, visszatér a ciklus elejére; másképp összefoglalja a választ természetes nyelven
-
+
-*A ReAct ciklus — az ügynök végiggondolja mit tegyen, cselekszik az eszköz meghívásával, megfigyeli az eredményt, és ismétel, amíg végső választ tud adni.*
+*A ReAct ciklus — az ügynök megfontolja, mit kell tennie, cselekszik eszközhívással, megfigyeli az eredményt, és addig ismétel, amíg végső választ nem adhat.*
-Ez automatikusan történik. Te definiálod az eszközöket és azok leírásait. A modell dönt az eszközhasználatról, hogy mikor és hogyan alkalmazza őket.
+Ez automatikusan történik. Te határozod meg az eszközöket és azok leírásait. A modell kezeli a döntéshozatalt arról, mikor és hogyan használja őket.
-## Hogyan működik az eszközhívás
+## Hogyan Működik az Eszköz Meghívás
-### Eszközdefiníciók
+### Eszköz Definíciók
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-Függvényeket határozol meg világos leírásokkal és paraméter specifikációkkal. A modell ezeket a leírásokat látja a rendszerüzenetben, és érti, mit csinál az adott eszköz.
+Egyértelmű leírással és paraméter specifikációkkal rendelkezel a funkciókat. A modell ezeknek a leírásoknak látja a tartalmát a rendszerpromptban, és megérti, mire való az egyes eszköz.
```java
@Component
@@ -86,7 +86,7 @@ public class WeatherTool {
@Tool("Get the current weather for a location")
public String getCurrentWeather(@P("Location name") String location) {
- // Az időjárás lekérdezési logikája
+ // Az időjárás lekérdezés logikája
return "Weather in " + location + ": 22°C, cloudy";
}
}
@@ -96,143 +96,143 @@ public interface Assistant {
String chat(@MemoryId String sessionId, @UserMessage String message);
}
-// Az asszisztens automatikusan a Spring Boot által van összekötve:
+// Az asszisztens automatikusan össze van kötve a Spring Boot által:
// - ChatModel bean
// - Minden @Tool metódus az @Component osztályokból
-// - ChatMemoryProvider a munkamenet kezeléséhez
+// - ChatMemoryProvider a munkamenet kezelésére
```
-Az alábbi ábra szétbont minden annotációt és megmutatja, hogyan segít mindegyik része az AI-nak megérteni, mikor kell az eszközt hívni és milyen argumentumokat kell átadni:
+Az alábbi diagram lebontja az összes annotációt, és megmutatja, hogyan segít minden elem az MI-nek megérteni, mikor kell meghívni az eszközt és milyen argumentumokat adjon át:
-
+
-*Egy eszközdefiníció felépítése — @Tool jelzi az AI-nak, mikor használja, @P írja le az egyes paramétereket, és az @AiService összeköti az egészet az induláskor.*
+*Az eszköz definíció anatómiája — az @Tool megmondja az MI-nek, mikor használja, az @P leírja az egyes paramétereket, és az @AiService mindent összeköt indításkor.*
> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Chattel:** Nyisd meg a [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) fájlt és kérdezd meg:
-> - "Hogyan integrálnék egy valós időjárási API-t, mint az OpenWeatherMap a teszt adatok helyett?"
-> - "Mi tesz ki egy jó eszközleírást, ami segíti az AI-t, hogy helyesen használja?"
-> - "Hogyan kezeljem az API hibákat és a hívási korlátokat az eszközmegvalósításokban?"
+> - "Hogyan integrálnék egy valós időjárás API-t, mint az OpenWeatherMap ahelyett, hogy teszt adatot használok?"
+> - "Mi tesz egy jó eszköz leírást, ami segíti az MI helyes használatát?"
+> - "Hogyan kezelem az API hibákat és korlátokat az eszköz implementációkban?"
### Döntéshozatal
-Ha a felhasználó megkérdezi: „Milyen az időjárás Seattle-ben?”, a modell nem véletlenszerűen választ eszközt. Összehasonlítja a felhasználó szándékát minden eszközleírással, értékeli mindegyik relevanciáját, és a legjobbat választja ki. Ezután generál egy strukturált függvényhívást a megfelelő paraméterekkel – ebben az esetben a `location` értéke `"Seattle"` lesz.
+Amikor a felhasználó megkérdezi: „Milyen az idő Seattle-ben?”, a modell nem véletlenszerűen választ eszközt. Összeveti a felhasználó szándékát az összes hozzáférhető eszköz leírásával, pontozza azok relevanciáját, és kiválasztja a legjobbat. Ezután előállít egy strukturált függvényhívást a megfelelő paraméterekkel — jelen esetben `location` értéke `"Seattle"`.
-Ha egyik eszköz sem illik, a modell a saját tudására támaszkodva válaszol. Több eszköz esetén a legspecifikusabbat választja.
+Ha egyik eszköz sem felel meg, a modell a saját tudásából válaszol. Ha több eszköz is megfelel, a legspecifikusabbat választja ki.
-
+
-*A modell minden elérhető eszközt értékel a felhasználói szándék szerint, és a legjobbat választja ki — ezért fontos, hogy világos, specifikus eszközleírásokat írj.*
+*A modell minden elérhető eszközt értékel a felhasználó szándékához képest és kiválasztja a legjobb találatot — ezért fontos a tiszta, pontos eszközleírás megírása.*
### Végrehajtás
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-A Spring Boot automatikusan beköti a deklaratív `@AiService` interfészt az összes regisztrált eszközzel, és a LangChain4j automatikusan végrehajtja az eszköz hívásokat. A háttérben egy teljes eszközhívás hat szakaszon keresztül halad – a felhasználó természetes nyelvű kérdésétől a természetes nyelvű válasz visszaadásáig:
+Spring Boot automatikusan beköti a deklaratív `@AiService` interfészt az összes regisztrált eszközhöz, és a LangChain4j automatikusan végrehajtja az eszközhívásokat. A háttérben egy komplett eszközhívási folyamat zajlik hat szakaszon át — a felhasználó természetes nyelvű kérdésétől a válasz természetes nyelvű megformálásáig:
-
+
-*Végponttól végpontig folyamat — a felhasználó kérdez, a modell eszközt választ, a LangChain4j végrehajtja, és a modell a kapott eredményt beépíti a választba.*
+*Az end-to-end folyamat — a felhasználó kérdez, a modell kiválaszt egy eszközt, a LangChain4j végrehajtja, és a modell beépíti az eredményt a válaszba.*
-Ha a [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) példát lefuttattad 00-ban, már láttad ezt a mintát működés közben – a `Calculator` eszközöket ugyanígy hívta meg. Az alábbi szekvencia diagram pontosan megmutatja, mi történt a háttérben a demó során:
+A háttérben az `AiServices` futtatja ugyanazt az eszközhívási ciklust bármely eszköz esetén — itt egy egyszerű `Calculator` példával illusztrálva. Az alábbi sorrendi diagram pontosan megmutatja a belső lépéseket:
-
+
-*Eszközhívási ciklus a Quick Start demóból — az `AiServices` elküldi az üzenetet és az eszköz sémákat az LLM-nek, az LLM egy függvényhívással válaszol, mint az `add(42, 58)`, a LangChain4j helyben végrehajtja a `Calculator` metódust, majd az eredményt visszacsatolja a végső válaszhoz.*
+*Az eszközhívási ciklus — az `AiServices` elküldi az üzenetedet és az eszköz sémákat az LLM-nek, az LLM válasza egy függvényhívás, például `add(42, 58)`, a LangChain4j helyben végrehajtja a `Calculator` metódust, majd az eredményt visszaküldi a végső válaszhoz.*
-> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Chattel:** Nyisd meg az [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) fájlt és kérdezd meg:
-> - "Hogyan működik a ReAct minta és miért hatékony az AI ügynökök számára?"
-> - "Hogyan dönt az ügynök, hogy melyik eszközt használja és milyen sorrendben?"
-> - "Mi történik, ha egy eszköz végrehajtása meghiúsul – hogyan kezeljem robosztusan a hibákat?"
+> **🤖 Próbáld ki a [GitHub Copilot](https://github.com/features/copilot) Chattel:** Nyisd meg a [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) fájlt és kérdezd meg:
+> - "Hogyan működik a ReAct minta és miért hatékony MI ügynökök számára?"
+> - "Hogyan dönt az ügynök, melyik eszközt használja és milyen sorrendben?"
+> - "Mi történik, ha egy eszközhívás sikertelen — hogyan kezeljem robusztusan a hibákat?"
### Válaszgenerálás
-A modell megkapja az időjárási adatokat, és természetes nyelvű választ formáz belőlük a felhasználónak.
+A modell megkapja az időjárási adatot és természetes nyelvű válaszra formázza a felhasználó számára.
-### Architektúra: Spring Boot automatikus bekötés
+### Architektúra: Spring Boot Automatikus Bekötés
-Ez a modul a LangChain4j Spring Boot integrációját használja deklaratív `@AiService` interfészekkel. Induláskor a Spring Boot felfedezi az összes `@Component`-et, melyek `@Tool` metódusokat tartalmaznak, a `ChatModel` bean-t és a `ChatMemoryProvider`-t — majd mindet egyetlen `Assistant` interfészbe kötve összerendezi, mindezt null boilerplate kóddal.
+Ez a modul használja a LangChain4j Spring Boot integrációját deklaratív `@AiService` interfészekkel. Indításkor a Spring Boot felfedezi az összes `@Component`-et, amelyek tartalmaznak `@Tool` metódusokat, a te `ChatModel` binnedet, és a `ChatMemoryProvider`-t — majd mindet egyetlen `Assistant` interfészbe köt összeszerelés nélkül.
-
+
-*Az @AiService interfész összekapcsolja a ChatModelt, az eszköz komponenseket és a memória szolgáltatót — a Spring Boot minden bekötést automatikusan elintéz.*
+*Az @AiService interfész összekapcsolja a ChatModelt, eszköz komponenseket és memória szolgáltatót — a Spring Boot automatikusan kezeli a bekötést.*
-Íme a teljes kérés életciklusa egy szekvencia diagramon – az HTTP kérésből az vezérlőn, szolgáltatáson és az automatikusan kötött proxy-n keresztül az eszköz végrehajtásig és vissza:
+Itt van a teljes kérés-életciklus egy sorrendi diagramon — a HTTP kérésből a kontrolleren át a szolgáltatásig, az automatikusan bekötött proxyig, majd az eszköz végrehajtásig és vissza:
-
+
-*A teljes Spring Boot kéréséletciklus — az HTTP kérés áthalad a vezérlőn és a szolgáltatáson az automatikusan kötött Assistant proxyig, amely automatikusan összehangolja az LLM-et és az eszközhívásokat.*
+*Teljes Spring Boot kérés életciklus — HTTP kérés a kontrolleren és szolgáltatáson áthalad az automatikusan bekötött Assistant proxyhoz, amely automatikusan koordinálja az LLM-et és az eszközhívásokat.*
-Az eljárás fő előnyei:
+E megközelítés fő előnyei:
-- **Spring Boot automatikus bekötés** — ChatModel és eszközök automatikusan injektálva
-- **@MemoryId minta** — Automatikus munkamenet-alapú memória kezelés
-- **Egyetlen példány** — Assistant egyszer létrejön és újrafelhasználható, jobb teljesítményért
+- **Spring Boot automatikus bekötés** — ChatModel és eszközök automatikusan be vannak injektálva
+- **@MemoryId minta** — Automatikus munkamenet alapú memória kezelés
+- **Egyetlen példány** — Assistant egyszer létrejön és újrahasználható a jobb teljesítményért
- **Típusbiztos végrehajtás** — Java metódusok közvetlen hívása típuskonverzióval
-- **Multi-turn koordináció** — Eszközláncolást automatikusan kezeli
-- **Null boilerplate** — Nincs manuális `AiServices.builder()` hívás vagy memória HashMap
+- **Több körös koordinálás** — Automatikusan kezeli az eszközláncolást
+- **Nulla alap kódolás** — Nem szükséges kézi `AiServices.builder()` hívás vagy memória HashMap
-Alternatív megközelítések (manuális `AiServices.builder()`) több kódot igényelnek és nem élvezhetik a Spring Boot integráció előnyeit.
+Alternatív megoldások (kézi `AiServices.builder()`) több kódot igényelnek és nem használják ki a Spring Boot előnyeit.
## Eszközláncolás
-**Eszközláncolás** — Az eszközalapú ügynökök valós ereje akkor mutatkozik meg, ha egyetlen kérdés több eszközt igényel. Például: „Milyen az időjárás Seattle-ben Fahrenheitben?” Az ügynök automatikusan láncol két eszközt: először meghívja a `getCurrentWeather`-t, hogy megszerezze a Celsius hőmérsékletet, majd ezt az értéket átadja a `celsiusToFahrenheit`-nek a konvertáláshoz — mindez egyetlen beszélgetési körben.
+**Eszközláncolás** — Az eszköz-alapú ügynökök valódi ereje akkor mutatkozik meg, amikor egyetlen kérdés több eszközt igényel. Kérdezd meg: „Milyen az idő Seattle-ben Fahrenheitben?”, és az ügynök automatikusan összefűz két eszközt: először meghívja a `getCurrentWeather`-t, hogy megszerezze a Celsius hőmérsékletet, majd átadja azt a `celsiusToFahrenheit`-nek átváltásra — mindezt egyetlen beszélgetési körben.
-
+
-*Eszközláncolás működés közben — az ügynök először hívja a getCurrentWeather-t, majd az így kapott Celsius eredményt átvezeti a celsiusToFahrenheit-nek, és közös választ ad.*
+*Eszközláncolás működés közben — az ügynök először hívja a getCurrentWeather-t, majd a Celsius eredményt átvezeti a celsiusToFahrenheit-nek, és összetett választ ad.*
-**Zökkenőmentes hibakezelés** — Kérdezz időjárást egy városról, amely nincs a teszt adatok között. Az eszköz hibaüzenetet ad vissza, és az AI elmagyarázza, hogy nem tud segíteni ahelyett, hogy összeomlana. Az eszközök biztonságosan hibáznak. Az alábbi ábra összehasonlítja a két megközelítést — megfelelő hibakezeléssel az ügynök elkapja a kivételt és segítőkész választ ad, hibakezelés nélkül az egész alkalmazás összeomlik:
+**Kulturált Hibakezelés** — Kérdezz rá egy város időjárására, ami nincs benne a teszt adatokban. Az eszköz hibát jelez, és az MI elmagyarázza, hogy nem tud segíteni ahelyett, hogy összeomlik. Az eszközök biztonságosan hibáznak. Az alábbi diagram összehasonlítja a két megközelítést — megfelelő hibakezeléssel az ügynök elkapja a kivételt és segítőkész választ ad, hibakezelés nélkül pedig az egész alkalmazás összeomlik:
-
+
-*Ha egy eszköz hibázik, az ügynök elkapja a hibát és segítőkész magyarázattal válaszol az összeomlás helyett.*
+*Ha egy eszköz hibát okoz, az ügynök elkapja és inkább hasznos magyarázattal válaszol, nem pedig összeomlik.*
-Ez egyetlen beszélgetési körben történik. Az ügynök önállóan koordinál több eszköz hívást.
+Ez egyetlen beszélgetési körben történik. Az ügynök önállóan koordinál több eszközhívást.
-## Az alkalmazás futtatása
+## Az Alkalmazás Futattása
**Telepítés ellenőrzése:**
-Győződj meg róla, hogy a `.env` fájl létezik a gyökérkönyvtárban az Azure hitelesítőkkel (az 01. modul során jött létre). Futtasd ezt a modul könyvtárából (`04-tools/`):
+Ellenőrizd, hogy a `.env` fájl létezik a gyökérkönyvtárban Azure hitelesítő adatokkal (az 01. modul során készült). Futtasd ezt a modul könyvtárában (`04-tools/`):
**Bash:**
```bash
-cat ../.env # Meg kell jeleníteni az AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT értékeket
+cat ../.env # Meg kell jelenítenie az AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT értékeket
```
**PowerShell:**
```powershell
-Get-Content ..\.env # Meg kell jeleníteni az AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT értékeket
+Get-Content ..\.env # Meg kell jelenítenie az AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT értékeket
```
-**Alkalmazás indítása:**
+**Indítsd el az alkalmazást:**
-> **Megjegyzés:** Ha már elindítottad az összes alkalmazást a gyökérkönyvtárból `./start-all.sh`-al (ahogy az 01. modulban le van írva), akkor ez a modul már fut a 8084-es porton. Az indítási parancsokat ilyenkor kihagyhatod, és közvetlenül a http://localhost:8084 címre mehetsz.
+> **Megjegyzés:** Ha már elindítottad az összes alkalmazást a gyökérkönyvtárból `./start-all.sh` használatával (amint az az 01. modulban szerepel), akkor ez a modul már fut a 8084-es porton. Átugorhatod a lentebb lévő indító parancsokat, és közvetlenül a http://localhost:8084 címre mehetsz.
-**1. lehetőség: Spring Boot Dashboard használata (VS Code felhasználóknak ajánlott)**
+**1. lehetőség: Spring Boot Dashboard használata (ajánlott VS Code felhasználóknak)**
-A fejlesztői konténer tartalmazza a Spring Boot Dashboard bővítményt, amely vizuális felületet biztosít az összes Spring Boot alkalmazás kezeléséhez. A VS Code bal oldali Tevékenység sávjában találod (keresd a Spring Boot ikont).
+A fejlesztői konténer tartalmazza a Spring Boot Dashboard bővítményt, amely vizuális felületet biztosít minden Spring Boot alkalmazás kezeléséhez. A bal oldali tevékenységsávban találod a Spring Boot ikont.
-A Spring Boot Dashboard segítségével:
-- Megnézheted az összes elérhető Spring Boot alkalmazást a munkaterületen
+A Spring Boot Dashboard-ból:
+- Láthatod az összes elérhető Spring Boot alkalmazást a munkaterületen
- Egy kattintással indíthatsz/leállíthatsz alkalmazásokat
-- Valós időben láthatod az alkalmazások naplóit
-- Figyelemmel kísérheted az alkalmazás állapotát
-Egyszerűen kattints a lejátszás gombra a "tools" mellett, hogy elindítsd ezt a modult, vagy indíts el egyszerre minden modult.
+- Valós időben megtekintheted az alkalmazás naplóit
+- Figyelheted az alkalmazás állapotát
-Így néz ki a Spring Boot Dashboard a VS Code-ban:
+Egyszerűen kattints a "tools" melletti lejátszás gombra ennek a modulnak az indításához, vagy indítsd el az összes modult egyszerre.
-
+Így néz ki a Spring Boot Dashboard a VS Code-ban:
+
-*A Spring Boot Dashboard a VS Code-ban — indítsd, állítsd le és figyeld az összes modult egy helyről*
+*A Spring Boot műszerfal a VS Code-ban — indítsd, állítsd le és figyeld az összes modult egy helyről*
-**2. lehetőség: Shell scriptek használata**
+**2. lehetőség: Shell szkriptek használata**
-Indítsd el az összes webalkalmazást (a 01-04 modulok):
+Indítsd el az összes webalkalmazást (01-04 modulok):
**Bash:**
```bash
-cd .. # Gyökérkönyvtárból
+cd .. # A gyökérkönyvtárból
./start-all.sh
```
@@ -242,7 +242,7 @@ cd .. # A gyökérkönyvtárból
.\start-all.ps1
```
-Vagy indítsd csak ezt a modult:
+Vagy indítsd el csak ezt a modult:
**Bash:**
```bash
@@ -256,16 +256,16 @@ cd 04-tools
.\start.ps1
```
-Mindkét script automatikusan betölti a környezeti változókat a gyökér `.env` állományból, és lefordítja a JAR-okat, ha még nem léteznek.
+Mindkét szkript automatikusan betölti a környezeti változókat a gyökér `.env` fájlból, és felépíti a JAR fájlokat, ha azok nem léteznek.
-> **Megjegyzés:** Ha inkább manuálisan akarod lefordítani az összes modult az indítás előtt:
+> **Megjegyzés:** Ha inkább kézzel akarod felépíteni az összes modult indulás előtt:
>
> **Bash:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-
+>
> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
@@ -292,84 +292,84 @@ cd ..; .\stop-all.ps1 # Minden modul
## Az alkalmazás használata
-Az alkalmazás egy webes felületet biztosít, ahol egy AI ügynökkel kommunikálhatsz, aki rendelkezik időjárás- és hőmérséklet-konvertáló eszközökkel. Íme, így néz ki a felület — tartalmaz gyorsindítási példákat és egy csevegőpanelt a kérések elküldéséhez:
+Az alkalmazás webes felületet biztosít, ahol egy AI ügynökkel léphetsz kapcsolatba, mely hozzáfér időjárás- és hőmérséklet-konvertáló eszközökhöz. Így néz ki a felület — tartalmaz gyorsindító példákat és egy chat panelt a kérések küldéséhez:
-
+
-*Az AI Agent Tools felület – gyors példák és csevegőfelület az eszközökkel való interakcióhoz*
+*Az AI Ügynök Eszközök felülete - gyors példák és chat felület az eszközökkel való interakcióhoz*
### Próbálj ki egyszerű eszközhasználatot
-Kezdj egy egyszerű kérdéssel: „Alakítsd át 100 Fahrenheit fokot Celsiusra.” Az ügynök felismeri, hogy szüksége van a hőmérséklet-konvertáló eszközre, megfelelő paraméterekkel meghívja, és visszaadja az eredményt. Figyeld meg, milyen természetes ez — nem kellett megadnod, hogy melyik eszközt használd vagy hogyan hívd meg.
+Kezdj egy egyszerű kéréssel: „Alakítsd át a 100 Fahrenheit fokot Celsiusra”. Az ügynök felismeri, hogy szüksége van a hőmérséklet-konvertáló eszközre, meghívja a megfelelő paraméterekkel, és visszaadja az eredményt. Figyeld meg, milyen természetes érzés — nem kellett megadnod, melyik eszközt használja vagy hogyan hívja meg.
-### Teszteld az eszközök láncolását
+### Teszteld az eszköz láncolást
-Most próbálj valami bonyolultabbat: „Milyen az időjárás Seattle-ben, és alakítsd át Fahrenheitbe?” Nézd meg, hogyan dolgozza fel ezt az ügynök lépésről lépésre. Először lekéri az időjárást (ami Celsiusban ad választ), felismeri, hogy át kell váltani Fahrenheitbe, meghívja a konverziós eszközt, majd egyesíti mindkét eredményt egy válaszba.
+Most próbálj valami bonyolultabbat: „Milyen az időjárás Seattle-ben és alakítsd át Fahrenheitre?” Nézd, ahogy az ügynök lépésenként dolgozik. Először lekéri az időjárást (ami Celsiusban ad választ), felismeri, hogy át kell konvertálni Fahrenheitre, meghívja a konverziós eszközt, majd összefűzi mindkét eredményt egy válaszba.
-### Nézd meg a beszélgetés folyamatát
+### Nézd meg a beszélgetés menetét
-A csevegőfelület megőrzi a beszélgetés előzményeit, így több lépésből álló interakciókat folytathatsz. Láthatod az összes korábbi kérdést és választ, így könnyű követni a párbeszédet és megérteni, hogyan építi fel az ügynök a kontextust több csere során.
+A chat felület megőrzi a beszélgetés előzményeit, lehetővé téve a többlépcsős interakciókat. Láthatod az összes korábbi kérdést és választ, így könnyű nyomon követni a párbeszédet és megérteni, hogyan építi fel az ügynök a kontextust több forduló alatt.
-
+
-*Többszörös lépéses beszélgetés egyszerű átváltásokról, időjárás-lekérdezésekről és eszközláncolásról*
+*Többlépcsős beszélgetés egyszerű átalakításokról, időjárás lekérdezésekről és eszköz láncolásról*
### Kísérletezz különféle kérésekkel
Próbálj ki különböző kombinációkat:
-- Időjárás lekérdezése: „Milyen az időjárás Tokióban?”
-- Hőmérséklet átváltások: „Mennyi 25°C Kelvinben?”
-- Összetett kérdések: „Nézd meg az időjárást Párizsban, és mondd meg, ha 20°C fölött van”
+- Időjárás lekérdezések: „Milyen az időjárás Tokióban?”
+- Hőmérséklet átváltások: „Mennyi 25 °C Kelvinben?”
+- Összetett kérdések: „Nézd meg az időjárást Párizsban, és mondd meg, hogy 20 °C felett van-e”
-Vedd észre, hogyan értelmezi az ügynök a természetes nyelvet, és hogyan kapcsolja össze a megfelelő eszközhívásokkal.
+Figyeld meg, ahogy az ügynök a természetes nyelvet értelmezi és hozzárendeli a megfelelő eszközhívásokat.
-## Kulcsfontosságú fogalmak
+## Főbb fogalmak
### ReAct minta (Gondolkodás és Cselekvés)
-Az ügynök váltogat a gondolkodás (döntés, mit tegyen) és a cselekvés (eszközök használata) között. Ez a minta lehetővé teszi az autonóm problémamegoldást az egyszerű utasításokra adott válasz helyett.
+Az ügynök váltogat a gondolkodás (döntés, mit tegyen) és a cselekvés (eszközök használata) között. Ez a minta lehetővé teszi az autonóm problémamegoldást, nem csak az utasításokra adott válaszokat.
-### Az eszközleírások jelentősége
+### Az eszközleírások fontossága
-Az eszközleírások minősége közvetlenül befolyásolja, hogy az ügynök mennyire jól használja őket. A világos, pontos leírások segítenek a modellnek megérteni, mikor és hogyan hívja meg az adott eszközt.
+Az eszközleírások minősége közvetlenül befolyásolja, hogy az ügynök mennyire jól használja őket. Egyértelmű, pontos leírások segítik a modellt megérteni, mikor és hogyan hívja meg az adott eszközt.
### Munkamenet-kezelés
-Az `@MemoryId` annotáció lehetővé teszi az automatikus munkamenetalapú memória kezelést. Minden munkamenetazonosítóhez saját `ChatMemory` példány tartozik, amit a `ChatMemoryProvider` bean kezel, így több felhasználó egyszerre is kommunikálhat az ügynökkel anélkül, hogy összekeverednének a beszélgetéseik. Az alábbi ábra bemutatja, hogyan irányítódnak a felhasználók elkülönített memóriatárolókhoz az azonosítóik alapján:
+Az `@MemoryId` annotáció lehetővé teszi az automatikus munkamenetalapú memória kezelését. Minden munkamenet ID saját `ChatMemory` példányt kap, melyet a `ChatMemoryProvider` bean kezel, így egyszerre több felhasználó is kommunikálhat az ügynökkel anélkül, hogy egymás beszélgetéseit látnák. Az alábbi ábra mutatja, hogyan irányítja a rendszer a felhasználókat különálló memória tárolókba az ID-jük alapján:
-
+
-*Minden munkamenetazonosítóhoz elkülönített beszélgetési előzmény tartozik — a felhasználók soha nem látják egymás üzeneteit.*
+*Minden munkamenet ID különálló beszélgetési előzményhez tartozik — a felhasználók sosem látják egymás üzeneteit.*
### Hibakezelés
-Az eszközök hibázhatnak — az API-k időtúlléphetnek, hibásak lehetnek a paraméterek, leállhatnak külső szolgáltatások. A termelési környezetben az ügynököknek kell hibakezelést biztosítani, hogy a modell meg tudja magyarázni a problémákat vagy alternatívákat próbáljon ahelyett, hogy az egész alkalmazás összeomlik. Ha egy eszköz kivételt dob, a LangChain4j elkapja, és a hibaüzenetet visszaküldi a modellnek, ami természetes nyelven magyarázhatja el a problémát.
+Az eszközök hibázhatnak — API-k időtúllépnek, hibás paraméterek lehetnek, külső szolgáltatások leállhatnak. A gyártásban használt ügynököknek szükségük van hibakezelésre, hogy a modell elmagyarázhassa a problémákat, vagy alternatívákat próbálhasson ahelyett, hogy az egész alkalmazás összeomlana. Ha egy eszköz kivételt dob, a LangChain4j elkapja azt, majd visszajuttatja a hibaüzenetet a modellnek, amely természetes nyelven képes elmagyarázni a problémát.
## Elérhető eszközök
-Az alábbi ábra a használható eszközök széles ökoszisztémáját mutatja be. Ez a modul az időjárás- és hőmérséklet-eszközöket demonstrálja, de ugyanaz az `@Tool` minta bármely Java metódusra alkalmazható — az adatbázis-lekérdezésektől a fizetési feldolgozásig.
+Az alábbi ábra bemutatja az eszközök széles ökoszisztémáját, amelyet építhetsz. Ez a modul időjárás- és hőmérséklet-eszközöket mutat be, de az `@Tool` minta bármilyen Java metódusra működik — az adatbázis-lekérdezésektől a fizetési feldolgozásig.
-
+
-*Minden Java metódus, amelyet az @Tool annotációval látsz el, elérhetővé válik az AI számára — a minta kiterjed adatbázisokra, API-kra, e-mailekre, fájlműveletekre és még sok másra.*
+*Bármely `@Tool` annotációval ellátott Java metódus elérhetővé válik az AI számára — a minta kiterjed adatbázisokra, API-kra, e-mailekre, fájlműveletekre és még sok másra.*
-## Mikor használjunk eszköz-alapú ügynököket
+## Mikor használj eszköz-alapú ügynököket
-Nem minden kérés igényli az eszközöket. A döntés azon múlik, hogy az AI-nak szüksége van-e külső rendszerekkel való interakcióra, vagy a saját tudásából válaszolhat-e. Az alábbi útmutató összefoglalja, mikor adnak értéket az eszközök és mikor nincs rájuk szükség:
+Nem minden kérés igényel eszközöket. A döntés azon múlik, hogy az AI-nak szüksége van-e külső rendszerekkel való interakcióra, vagy saját tudásából tud válaszolni. Az alábbi útmutató összefoglalja, mikor tesznek hozzá értéket az eszközök, és mikor feleslegesek:
-
+
-*Gyors döntési útmutató — az eszközök valós idejű adatokhoz, számításokhoz és műveletekhez valók; az általános tudás és kreatív feladatok nem igénylik őket.*
+*Egy gyors döntési útmutató — az eszközök valós idejű adatokra, számításokra és műveletekre valók; az általános tudás és kreatív feladatok nem igénylik őket.*
-## Eszközök vs RAG
+## Eszközök vs. RAG
-A 03 és 04 modulok mindegyike kibővíti, hogy az AI mit tud, de alapvetően eltérő módon. A RAG a modellnek ad **ismeretet** azáltal, hogy dokumentumokat keres elő. Az eszközök a modellnek képességet adnak **műveletek végrehajtására** függvényhívásokkal. Az alábbi ábra ezt a két megközelítést hasonlítja össze egymás mellett — a működési módoktól a közöttük lévő kompromisszumokig:
+A 03-as és 04-es modulok egyaránt bővítik az AI képességeit, ám alapvetően más módon. A RAG a modellt **tudással** látja el dokumentumok előhívásával. Az eszközök a modellnek cselekvési képességet adnak függvényhívások által. Az alábbi ábra összehasonlítja ezt a két megközelítést egymás mellett — hogyan működik mindkét munkafolyamat és milyen kompromisszumokat rejtenek:
-
+
-*A RAG statikus dokumentumokból szerez információt — az Eszközök műveleteket hajtanak végre és dinamikus, valós idejű adatokat kérnek le. Sok termelési rendszer mindkettőt kombinálja.*
+*A RAG statikus dokumentumokból gyűjt információt — az eszközök műveleteket hajtanak végre és dinamikus, valós idejű adatokat szereznek. Sok termelési rendszer mindkettőt használja.*
-Gyakorlatban számos termelési rendszer mindkét megközelítést alkalmazza: RAG-ot arra, hogy az válaszokat a dokumentációdban megalapozza, és Eszközöket a valós adatok lekérésére vagy műveletek végrehajtására.
+Gyakorlatban sok termelési rendszer kombinálja a két megoldást: RAG a dokumentációban való alátámasztáshoz, és eszközök az élő adatok lekéréséhez vagy műveletek végrehajtásához.
## Következő lépések
@@ -382,6 +382,6 @@ Gyakorlatban számos termelési rendszer mindkét megközelítést alkalmazza: R
---
-**Jóváhagyás**:
-Ez a dokumentum az AI fordítószolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár igyekszünk pontos fordítást biztosítani, kérjük, vegye figyelembe, hogy az automatikus fordítás hibákat vagy pontatlanságokat tartalmazhat. Az eredeti, anyanyelvi dokumentum tekinthető a hiteles forrásnak. Fontos információk esetén professzionális, emberi fordítást javaslunk. Nem vállalunk felelősséget a fordítás használatából eredő félreértésekért vagy téves értelmezésekért.
+**Jogi nyilatkozat**:
+Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.
\ No newline at end of file
diff --git a/translations/hu/README.md b/translations/hu/README.md
index f71c75763..9831a3772 100644
--- a/translations/hu/README.md
+++ b/translations/hu/README.md
@@ -2,18 +2,18 @@
# LangChain4j kezdőknek
-Egy tanfolyam AI alkalmazások építéséhez LangChain4j-vel és Azure OpenAI GPT-5.2-vel, az alapvető csevegéstől az AI ügynökökig.
+Tanfolyam AI alkalmazások építéséhez LangChain4j és Azure OpenAI GPT-5.2 használatával, az alapvető csevegéstől az AI ügynökökig.
### 🌐 Többnyelvű támogatás
-#### GitHub Action révén támogatott (Automatizált és Mindig naprakész)
+#### GitHub Action segítségével támogatott (Automatizált és mindig naprakész)
[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](./README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
-> **Inkább helyben klónoznál?**
+> **Inkább helyileg klónoznál?**
>
-> Ez a tároló 50+ nyelvi fordítást tartalmaz, ami jelentősen megnöveli a letöltési méretet. Fordítások nélküli klónozáshoz használd a sparse checkout-ot:
+> Ez a tároló több mint 50 nyelvi fordítást tartalmaz, ami jelentősen megnöveli a letöltési méretet. A fordítások nélküli klónozáshoz használd a sparse checkout-ot:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -29,61 +29,60 @@ Egy tanfolyam AI alkalmazások építéséhez LangChain4j-vel és Azure OpenAI G
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> Így minden rendelkezésedre áll a tanfolyam elvégzéséhez, sokkal gyorsabb letöltéssel.
+> Ezzel minden szükséges fájlt megkapsz a tanfolyam elvégzéséhez sokkal gyorsabb letöltéssel.
## Tartalomjegyzék
-1. [Gyors kezdés](00-quick-start/README.md) - Kezdj el dolgozni a LangChain4j-vel
-2. [Bevezetés](01-introduction/README.md) - Ismerd meg a LangChain4j alapjait
-3. [Prompt tervezés](02-prompt-engineering/README.md) - Tanuld meg a hatékony prompt tervezést
-4. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Építs intelligens tudásalapú rendszereket
-5. [Eszközök](04-tools/README.md) - Integrálj külső eszközöket és egyszerű asszisztenseket
-6. [MCP (Model Context Protocol)](05-mcp/README.md) - Dolgozz a Model Context Protocol-lal (MCP) és Agentikus modulokkal
+1. [Bevezetés](01-introduction/README.md) - Ismerkedj meg a LangChain4j alapjaival
+2. [Prompt tervezés](02-prompt-engineering/README.md) - Sajátítsd el a hatékony prompt tervezést
+3. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Építs intelligens tudásalapú rendszereket
+4. [Eszközök](04-tools/README.md) - Integrálj külső eszközöket és egyszerű asszisztenseket
+5. [MCP (Model Context Protocol)](05-mcp/README.md) - Dolgozz a Model Context Protocol (MCP) és az agenticus modulokkal
### Videós bemutatók
-Minden modulhoz élő közvetítés társul, ahol lépésről lépésre bemutatjuk a koncepciókat és a kódot.
+Minden modulhoz tartozik egy élő bemutató, ahol lépésről lépésre végigvezetünk a koncepciókon és a kódon.
| Modul | Videó |
|--------|-------|
-| 01 - Bevezetés | [Kezdés a LangChain4j-vel](https://www.youtube.com/live/nl_troDm8rQ) |
+| 01 - Bevezetés | [LangChain4j-vel való kezdés](https://www.youtube.com/live/nl_troDm8rQ) |
| 02 - Prompt tervezés | [Prompt tervezés LangChain4j-vel](https://www.youtube.com/live/PJ6aBaE6bog) |
| 03 - RAG | [RAG LangChain4j-vel](https://www.youtube.com/watch?v=_olq75ZH_eY) |
-| 04 - Eszközök & 05 - MCP | [AI ügynökök Eszközökkel és MCP-vel](https://www.youtube.com/watch?v=O_J30kZc0rw) |
+| 04 - Eszközök és 05 - MCP | [AI ügynökök eszközökkel és MCP-vel](https://www.youtube.com/watch?v=O_J30kZc0rw) |
---
## Tanulási útvonal
-**Új vagy a LangChain4j-ben?** Nézd meg a [Fogalomtárat](docs/GLOSSARY.md) a kulcsfogalmak és definíciók megértéséhez.
+**Új vagy a LangChain4j-ben?** Nézd meg a [Szójegyzéket](docs/GLOSSARY.md) a kulcsfogalmak és kifejezések magyarázatáért.
> **Gyors kezdés**
1. Forkold ezt a tárolót a GitHub fiókodba
2. Kattints a **Code** → **Codespaces** fülre → **...** → **Új opciókkal...**
-3. Használd az alapértelmezetteket – ez kiválasztja a tanfolyamhoz létrehozott Fejlesztési konténert
-4. Kattints a **Kódterület létrehozása** gombra
-5. Várj 5-10 percet, amíg a környezet készen áll
-6. Ugrás közvetlenül a [Gyors kezdés](./00-quick-start/README.md) szekcióhoz, hogy elkezdhesd!
+3. Használd az alapértelmezetteket – ez kiválasztja a tanfolyamhoz készült fejlesztői konténert
+4. Kattints a **Codespace létrehozása** gombra
+5. Várj 5-10 percet, amíg az környezet készen áll
+6. Ugorj közvetlenül a [Bevezetéshez](./01-introduction/README.md) és kezdj neki!
-A modulok elvégzése után fedezd fel a [Tesztelési útmutatót](docs/TESTING.md), hogy lásd a LangChain4j tesztelési koncepcióit gyakorlatban.
+A modulok teljesítése után fedezd fel a [Tesztelési útmutatót](docs/TESTING.md), hogy lásd a LangChain4j tesztelési koncepcióit működés közben.
-> **Megjegyzés:** Ez a képzés egyszerre használ GitHub Modelleket és Azure OpenAI-t. A [Gyors kezdés](00-quick-start/README.md) modul GitHub Modelleket használ (nem szükséges Azure előfizetés), míg az 1-5. modulok Azure OpenAI-t. Ha még nincs, kezdj egy [INGYENES Azure fiókkal](https://aka.ms/azure-free-account).
+> **Megjegyzés:** Ez a képzés Azure OpenAI-t használ. Ha még nincs, kezdj egy [INGYENES Azure fiókkal](https://aka.ms/azure-free-account).
-## Tanulás GitHub Copilot-tal
+## Tanulás GitHub Copilottal
-Gyorsan kezdj el kódolni, ha ezt a projektet megnyitod egy GitHub Codespace-ben vagy a helyi fejlesztői környezetedben a mellékelt devcontainer-rel. A tanfolyam során használt devcontainer előre konfigurált a GitHub Copilot AI páros programozáshoz.
+Gyors kódolásindításhoz nyisd meg ezt a projektet GitHub Codespace-ben vagy helyi fejlesztői környezetben az ehhez a tanfolyamhoz biztosított devcontainer segítségével. A tanfolyamban használt devcontainer előre konfigurálva tartalmazza a GitHub Copilot-ot AI társprogramozáshoz.
-Minden kód példában találsz javasolt kérdéseket, amiket GitHub Copilot-nak tehetsz fel a mélyebb megértés érdekében. Keresd a 💡/🤖 jelzéseket a következőkben:
+Minden kódpéldához tartoznak ajánlott kérdések, amelyeket feltehetsz a GitHub Copilot-nak, hogy mélyítsd a megértésed. Keress a 💡/🤖 jelöléseket:
- **Java fájlfejlécekben** - Példánként specifikus kérdések
-- **Modulok README fájljaiban** - Felfedező kérdések a kód példák után
+- **Modul README-kben** - Feltáró kérdések a kódrészletek után
-**Használat módja:** Nyisd meg bármely kód fájlt és tedd fel a javasolt kérdéseket Copilot-nak. Teljes kontextusa van a kódalapon, elmagyaráz, kiterjeszt, és alternatívákat javasol.
+**Használat:** Nyiss meg egy kódfájlt és tedd fel a javasolt kérdéseket a Copilot-nak. Teljes rálátása van a kódbázisra, így magyarázni, kiegészíteni és alternatívákat javasolni képes.
-Szeretnél többet tudni? Nézd meg a [Copilot AI Párprogramozáshoz](https://aka.ms/GitHubCopilotAI) témát.
+Szeretnél többet megtudni? Olvasd el a [Copilot AI társprogramozáshoz](https://aka.ms/GitHubCopilotAI) oldalt.
## További források
@@ -111,40 +110,41 @@ Szeretnél többet tudni? Nézd meg a [Copilot AI Párprogramozáshoz](https://a
---
-### Alapvető tanulás
-[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
+### Alapvető tananyag
+[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
-[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
+
+[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
### Copilot sorozat
-[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
## Segítségkérés
-Ha elakad vagy kérdése van az AI alkalmazásfejlesztéssel kapcsolatban, csatlakozz:
+Ha elakadnál vagy bármilyen kérdésed van az AI alkalmazások fejlesztésével kapcsolatban, csatlakozz:
[](https://aka.ms/foundry/discord)
-Ha termék-visszajelzése vagy hibája van fejlesztés közben, látogasson el ide:
+Ha visszajelzésed van a termékről vagy hibákat tapasztalsz fejlesztés közben, látogass el ide:
[](https://aka.ms/foundry/forum)
## Licenc
-MIT Licenc - Részletekért lásd a [LICENSE](../../LICENSE) fájlt.
+MIT Licenc - Részletek a [LICENSE](../../LICENSE) fájlban találhatók.
---
-**Jogi nyilatkozat**:
-Ez a dokumentum az AI fordítószolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár igyekszünk pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Kritikus információk esetén professzionális emberi fordítást javaslunk. Nem vállalunk felelősséget a fordítás használatából eredő félreértésekért vagy téves értelmezésekért.
+**Jogi nyilatkozat**:
+Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.
\ No newline at end of file
diff --git a/translations/hu/docs/GLOSSARY.md b/translations/hu/docs/GLOSSARY.md
index 9f68c48f7..91457a869 100644
--- a/translations/hu/docs/GLOSSARY.md
+++ b/translations/hu/docs/GLOSSARY.md
@@ -1,232 +1,230 @@
-# LangChain4j Szójegyzék
+# LangChain4j Szószedet
## Tartalomjegyzék
-- [Alapfogalmak](../../../docs)
-- [LangChain4j komponensek](../../../docs)
-- [AI/ML fogalmak](../../../docs)
-- [Guardrails](../../../docs)
-- [Prompt mérnökség](../../../docs)
-- [RAG (Retrieval-Augmented Generation)](../../../docs)
-- [Ügynökök és eszközök](../../../docs)
-- [Agentikus modul](../../../docs)
-- [Model Context Protocol (MCP)](../../../docs)
-- [Azure szolgáltatások](../../../docs)
-- [Tesztelés és fejlesztés](../../../docs)
+- [Alapfogalmak](#alapfogalmak)
+- [LangChain4j Összetevők](#langchain4j-összetevők)
+- [AI/ML Fogalmak](#aiml-fogalmak)
+- [Biztonsági Keretek](#biztonsági-keretek)
+- [Prompt Tervezés](#prompt-engineering---module-02)
+- [RAG (Retrieval-Augmented Generation)](#rag-retrieval-augmented-generation---module-03)
+- [Ügynökök és Eszközök](#agents-and-tools---module-04)
+- [Agentikus Modul](#agentic-module---module-05)
+- [Modell Kontextus Protokoll (MCP)](#model-context-protocol-mcp---module-05)
+- [Azure Szolgáltatások](#azure-services---module-01)
+- [Tesztelés és Fejlesztés](#testing-and-development---testing-guide)
Gyors hivatkozás a kurzus során használt kifejezésekhez és fogalmakhoz.
## Alapfogalmak
-**AI ügynök** - Olyan rendszer, amely AI-t használ önálló gondolkodásra és cselekvésre. [Module 04](../04-tools/README.md)
+**AI Ügynök** - Olyan rendszer, amely AI-t használ önálló érvelésre és cselekvésre. [Module 04](../04-tools/README.md)
-**Lánc** - Műveletsorozat, ahol az eredmény a következő lépés bemenete.
+**Lánc** - Műveletsorozat, ahol az eredmény a következő lépés bemenetévé válik.
-**Darabolás** - Dokumentumok kisebb részekre bontása. Tipikus: 300-500 token átfedéssel. [Module 03](../03-rag/README.md)
+**Darabolás (Chunking)** - Dokumentumok kisebb darabokra bontása. Általános: 300-500 token átfedéssel. [Module 03](../03-rag/README.md)
-**Kontextus ablak** - Maximális token szám, amelyet egy modell feldolgozni tud. GPT-5.2: 400K token (legfeljebb 272K bemenet, 128K kimenet).
+**Kontekstus Ablak** - Maximális tokenek száma, amit a modell képes feldolgozni. GPT-5.2: 400K token (legfeljebb 272K bemenet, 128K kimenet).
-**Beágyazások** - Numerikus vektorok, amelyek a szöveg jelentését reprezentálják. [Module 03](../03-rag/README.md)
+**Beágyazások (Embeddings)** - Numerikus vektorok, amelyek a szöveg jelentését reprezentálják. [Module 03](../03-rag/README.md)
-**Funkcióhívás** - A modell strukturált kéréseket generál külső funkciók meghívására. [Module 04](../04-tools/README.md)
+**Függvényhívás (Function Calling)** - A modell strukturált kéréseket generál külső függvények meghívására. [Module 04](../04-tools/README.md)
**Hallucináció** - Amikor a modellek helytelen, de hihető információt generálnak.
-**Prompt** - Szöveges bemenet a nyelvi modellnek. [Module 02](../02-prompt-engineering/README.md)
+**Prompt** - Szöveges bemenet egy nyelvi modellhez. [Module 02](../02-prompt-engineering/README.md)
-**Szemantikus keresés** - Keresés a jelentés alapján, beágyazásokat használva, nem kulcsszavakat. [Module 03](../03-rag/README.md)
+**Szemantikus Keresés** - A jelentés alapján keres, beágyazásokat használva, nem kulcsszavakat. [Module 03](../03-rag/README.md)
-**Állapotmentes vs állapotőr** - Állapotmentes: nincs memóriája. Állapotőr: megőrzi a beszélgetés előzményeit. [Module 01](../01-introduction/README.md)
+**Állapotkezelés nélküli vs Állapotkezelő** - Stateless: nincs memória. Stateful: megőrzi a beszélgetés történetét. [Module 01](../01-introduction/README.md)
-**Tokenek** - Alapvető szövegegységek, amelyeket a modellek feldolgoznak. Hatással vannak a költségekre és korlátokra. [Module 01](../01-introduction/README.md)
+**Tokenek** - Alapvető szövegegységek, amelyeket a modellek feldolgoznak. Befolyásolja a költségeket és korlátokat. [Module 01](../01-introduction/README.md)
-**Eszköz láncolás** - Eszközök egymás utáni végrehajtása, ahol az eredmény befolyásolja a következő hívást. [Module 04](../04-tools/README.md)
+**Eszközláncolás** - Eszközök egymás utáni végrehajtása, ahol az eredmény befolyásolja a következő hívást. [Module 04](../04-tools/README.md)
-## LangChain4j komponensek
+## LangChain4j Összetevők
**AiServices** - Típusbiztos AI szolgáltatás interfészek létrehozása.
**OpenAiOfficialChatModel** - Egyesített kliens az OpenAI és Azure OpenAI modellekhez.
-**OpenAiOfficialEmbeddingModel** - Beágyazások létrehozása az OpenAI hivatalos kliensével (támogatja mindkettőt: OpenAI és Azure OpenAI).
+**OpenAiOfficialEmbeddingModel** - Beágyazások létrehozása az OpenAI Official klienssel (támogatja az OpenAI-t és Azure OpenAI-t is).
-**ChatModel** - Nyelvi modellek fő interfésze.
+**ChatModel** - Alapvető interfész nyelvi modellekhez.
-**ChatMemory** - Megőrzi a beszélgetés előzményeit.
+**ChatMemory** - A beszélgetés előzményeinek tárolása.
-**ContentRetriever** - Megtalálja a releváns dokumentumdarabokat RAG-hez.
+**ContentRetriever** - Releváns dokumentumdarabokat keres RAG-hoz.
-**DocumentSplitter** - Dokumentumokat tördel darabokra.
+**DocumentSplitter** - Dokumentumokat darabol darabokra.
**EmbeddingModel** - Szöveget numerikus vektorokká alakít.
-**EmbeddingStore** - Beágyazások tárolása és lekérése.
+**EmbeddingStore** - Beágyazások tárolása és előhívása.
-**MessageWindowChatMemory** - Az utolsó üzenetek mozgóablakát kezeli.
+**MessageWindowChatMemory** - Az utóbbi üzenetek csúszó ablakának tárolása.
-**PromptTemplate** - Újrafelhasználható promtok létrehozása `{{variable}}` helyőrzőkkel.
+**PromptTemplate** - Újrahasználható promptok létrehozása `{{variable}}` helyőrzőkkel.
-**TextSegment** - Szöveg darab metaadatokkal. RAG-ben használatos.
+**TextSegment** - Metadatákkal ellátott szövegrész. Használt RAG-ban.
-**ToolExecutionRequest** - Az eszköz végrehajtási kérésének reprezentációja.
+**ToolExecutionRequest** - Eszközvégrehajtási kérés reprezentációja.
-**UserMessage / AiMessage / SystemMessage** - Beszélgetési üzenettípusok.
+**UserMessage / AiMessage / SystemMessage** - Beszélgetés üzenettípusai.
-## AI/ML fogalmak
+## AI/ML Fogalmak
-**Few-Shot Learning** - Példák biztosítása promptokban. [Module 02](../02-prompt-engineering/README.md)
+**Few-Shot Tanulás** - Példák megadása a promptokban. [Module 02](../02-prompt-engineering/README.md)
-**Nagy nyelvi modell (LLM)** - Nagy mennyiségű szöveg alapján tanított AI modellek.
+**Nagy Nyelvi Modell (LLM)** - Hatalmas szövegadatokon tanított AI modellek.
-**Gondolkodási erőfeszítés** - GPT-5.2 paraméter, ami befolyásolja a gondolkodás mélységét. [Module 02](../02-prompt-engineering/README.md)
+**Érvelési Erőfeszítés** - GPT-5.2 paraméter, amely az érvelés mélységét szabályozza. [Module 02](../02-prompt-engineering/README.md)
-**Hőmérséklet** - A kimenet véletlenszerűségét szabályozza. Alacsony=determinista, magas=kreatív.
+**Hőmérséklet** - A kimenet véletlenszerűségének szabályozása. Alacsony=detereminisztikus, magas=alkotó.
-**Vektoradatbázis** - Beágyazásokra specializált adatbázis. [Module 03](../03-rag/README.md)
+**Vektor Adatbázis** - Beágyazásokhoz specializált adatbázis. [Module 03](../03-rag/README.md)
-**Zero-Shot Learning** - Feladat végrehajtása példa nélkül. [Module 02](../02-prompt-engineering/README.md)
+**Zero-Shot Tanulás** - Feladatok elvégzése példák nélkül. [Module 02](../02-prompt-engineering/README.md)
-## Guardrails - [Module 00](../00-quick-start/README.md)
+## Biztonsági Keretek
-**Mélységi védelem** - Többrétegű biztonsági megközelítés, amely az alkalmazásszintű guardrail-eket kombinálja a szolgáltató biztonsági szűrőivel.
+**Mélységi Védelem** - Többrétegű biztonsági megközelítés, amely az alkalmazásszintű biztonsági kereteket szolgáltatói biztonsági szűrőkkel kombinálja.
-**Kemény blokkolás** - A szolgáltató HTTP 400 hibát dob súlyos tartalmi szabálysértés esetén.
+**Kemény Blokkolás** - A szolgáltató HTTP 400-as hibát dob súlyos tartalmi megsértések esetén.
-**InputGuardrail** - LangChain4j interfész a felhasználói bemenet ellenőrzésére, mielőtt az LLM-hez jutna. Költséget és késleltetést spórol, mert korán blokkolja a káros promptokat.
+**InputGuardrail** - LangChain4j interfész a felhasználói bemenet érvényesítésére, mielőtt az eléri az LLM-et. Költség- és késleltetés-megtakarítás az ártalmas promptok korai blokkolásával.
**InputGuardrailResult** - Guardrail ellenőrzés visszatérési típusa: `success()` vagy `fatal("ok")`.
-**OutputGuardrail** - Interfész AI válaszok ellenőrzésére, mielőtt visszajutnak a felhasználókhoz.
+**OutputGuardrail** - Interfész az AI válaszok érvényesítésére, mielőtt visszaküldik a felhasználónak.
-**Szolgáltató biztonsági szűrők** - AI szolgáltatók beépített tartalomszűrői (pl. GitHub modellek), amelyek API szinten észlelik a szabálysértéseket.
+**Szolgáltatói Biztonsági Szűrők** - Beépített tartalmi szűrők AI szolgáltatóktól (pl. Azure OpenAI), amelyek az API szinten fogják az áthágásokat.
-**Lágy elutasítás** - A modell udvariasan megtagadja a választ anélkül, hogy hibát dobna.
+**Lágy Elutasítás** - A modell udvariasan megtagadja a választ anélkül, hogy hibát dobna.
-## Prompt mérnökség - [Module 02](../02-prompt-engineering/README.md)
+## Prompt Tervezés - [Module 02](../02-prompt-engineering/README.md)
-**Gondolatmenet-lánc** - Lépésenkénti érvelés a jobb pontosságért.
+**Gondolatmenet Lánc** - Lépésenkénti érvelés a jobb pontosságért.
-**Korlátozott kimenet** - Meghatározott formátum vagy szerkezet kikényszerítése.
+**Korlátozott Kimenet** - Meghatározott formátum vagy struktúra érvényesítése.
-**Magas igyekezet** - GPT-5.2 minta a részletes érveléshez.
+**Magas Lelkesedés** - GPT-5.2 minta a mélyreható érveléshez.
-**Alacsony igyekezet** - GPT-5.2 minta a gyors válaszokhoz.
+**Alacsony Lelkesedés** - GPT-5.2 minta gyors válaszokhoz.
-**Többkörös beszélgetés** - Kontextus fenntartása az üzenetváltások között.
+**Többfordulós Beszélgetés** - Kontextus megőrzése az üzenetváltások között.
-**Szerepalapú promptolás** - Modell személyiség beállítása rendszerüzenetekkel.
+**Szerepalapú Promptolás** - Modell személyiségének beállítása rendszerüzeneteken keresztül.
-**Önreflexió** - A modell értékeli és fejleszti a saját kimenetét.
+**Önreflexió** - A modell értékeli és javítja a saját kimenetét.
-**Strukturált elemzés** - Rögzített értékelési keretrendszer.
+**Strukturált Elemzés** - Rögzített értékelési keretrendszer.
-**Feladatvégrehajtási minta** - Tervezés → Végrehajtás → Összefoglalás.
+**Feladatvégrehajtási Minta** - Terv → Végrehajtás → Összegzés.
## RAG (Retrieval-Augmented Generation) - [Module 03](../03-rag/README.md)
-**Dokumentumfeldolgozó csővezeték** - Betöltés → darabolás → beágyazás → tárolás.
+**Dokumentumfeldolgozó Folyamat** - Betöltés → darabolás → beágyazás → tárolás.
-**Memóriabeli beágyazás tároló** - Nem tartós tároló teszteléshez.
+**Memóriabeli Beágyazás Tároló** - Nem perzisztens tároló teszteléshez.
-**RAG** - Kombinálja a keresést és generálást a válaszok megalapozásához.
+**RAG** - Összekapcsolja a lekérdezést a generálással, hogy megalapozott válaszokat adjon.
-**Hasonlósági pontszám** - (0-1) számszerűsíti a szemantikus hasonlóságot.
+**Hasonlósági Pontszám** - A szemantikai hasonlóság mértéke (0-1 között).
-**Forrás referencia** - Lekért tartalom metaadatai.
+**Forrás Hivatkozás** - Metaadat a lekért tartalomról.
-## Ügynökök és eszközök - [Module 04](../04-tools/README.md)
+## Ügynökök és Eszközök - [Module 04](../04-tools/README.md)
-**@Tool annotáció** - Java metódusokat jelöl AI által hívható eszközökként.
+**@Tool Annotáció** - Java metódusokat jelöl AI-hívható eszközökként.
-**ReAct minta** - Érvelés → cselekvés → megfigyelés → ismétlés.
+**ReAct Minta** - Érvelés → Cselekvés → Megfigyelés → Ismétlés.
-**Munkamenet kezelés** - Különböző felhasználók külön kontextusai.
+**Munkamenet Kezelés** - Különálló kontextusok különböző felhasználók számára.
-**Eszköz** - Funkció, amit AI ügynök meghívhat.
+**Eszköz** - Olyan funkció, amelyet az AI ügynök meghívhat.
-**Eszköz leírás** - Dokumentáció az eszköz céljáról és paramétereiről.
+**Eszköz Leírás** - Dokumentáció az eszköz céljáról és paramétereiről.
-## Agentikus modul - [Module 05](../05-mcp/README.md)
+## Agentikus Modul - [Module 05](../05-mcp/README.md)
-**@Agent annotáció** - Interfészeket jelöl AI ügynökökként deklaratív viselkedésdefinícióval.
+**@Agent Annotáció** - Interfészeket jelöl AI ügynökökként deklaratív viselkedésdefinícióval.
-**Agent Listener** - Hook az ügynök végrehajtásának megfigyelésére `beforeAgentInvocation()` és `afterAgentInvocation()` segítségével.
+**Agent Listener** - Horog az ügynök végrehajtásának figyelésére `beforeAgentInvocation()` és `afterAgentInvocation()` segítségével.
-**Agentikus hatókör** - Megosztott memória, ahol az ügynökök az `outputKey` segítségével tárolják az eredményeket a következő ügynökök számára.
+**Agentikus Terület** - Megosztott memória, ahol az ügynökök az outputokat tárolják `outputKey` használatával, hogy a downstream ügynökök hozzáférjenek.
-**AgenticServices** - Ügynökök létrehozó gyára `agentBuilder()` és `supervisorBuilder()` használatával.
+**AgenticServices** - Ügynökök létrehozására szolgáló gyár `agentBuilder()` és `supervisorBuilder()` segítségével.
-**Feltételes munkafolyamat** - Feltételek alapján irányított út különböző szakértő ügynökökhöz.
+**Feltételes Munkafolyamat** - Feltételek alapján irányítás különböző szakértő ügynökökhöz.
-**Ember a hurokban** - Munkafolyamat minta, amely emberi ellenőrzőpontokat ad jóváhagyás vagy tartalmi ellenőrzés céljából.
+**Humán a Hurokban** - Munkafolyamat minta emberi ellenőrző pontokkal jóváhagyás vagy tartalmi átvizsgálás céljából.
**langchain4j-agentic** - Maven függőség deklaratív ügynöképítéshez (kísérleti).
-**Ciklus munkafolyamat** - Ügynök végrehajtás ismétlése, amíg a feltétel teljesül (pl. minőségi pontszám ≥ 0.8).
+**Ciklus Munkafolyamat** - Az ügynök végrehajtásának ismétlése, amíg a feltétel teljesül (pl. minőségi pontszám ≥ 0.8).
-**outputKey** - Ügynök annotáció paraméter, mely megadja, hol tárolódnak az eredmények az Agentikus hatókörben.
+**outputKey** - Ügynök annotációs paraméter, amely megadja, hová kerülnek az eredmények az Agentikus Területen.
-**Párhuzamos munkafolyamat** - Több ügynök párhuzamos futtatása független feladatokra.
+**Párhuzamos Munkafolyamat** - Több ügynök egyidejű futtatása független feladatokra.
-**Válaszstratégia** - Hogyan fogalmazza meg a felügyelő a végső választ: LEGUTOLSÓ, ÖSSZEFOGLALÓ vagy ÉRTÉKELT.
+**Válasz Stratégia** - Hogyan fogalmazza meg a felügyelő a végső választ: LAST, SUMMARY, vagy SCORED.
-**Szekvenciális munkafolyamat** - Ügynökök sorrendben végrehajtva, ahol az eredmény továbbáramlik a következő lépéshez.
+**Sorrendiségi Munkafolyamat** - Ügynökök végrehajtása sorrendben, ahol az eredmény továbbáramlik a következő lépésre.
-**Felügyelő ügynök minta** - Fejlett ügynökös minta, ahol a felügyelő LLM dinamikusan dönti el, mely al-ügynököket hívja meg.
+**Felügyelő Ügynök Minta** - Haladó agentikus minta, ahol egy felügyelő LLM dinamikusan dönt a részügynökök meghívásáról.
-## Model Context Protocol (MCP) - [Module 05](../05-mcp/README.md)
+## Modell Kontextus Protokoll (MCP) - [Module 05](../05-mcp/README.md)
-**langchain4j-mcp** - Maven függőség MCP integrációhoz LangChain4j-ben.
+**langchain4j-mcp** - Maven függőség az MCP integrációhoz LangChain4j-ben.
-**MCP** - Model Context Protocol: szabvány AI alkalmazások csatlakoztatására külső eszközökhöz. Egyszer építsd fel, bárhol használd.
+**MCP** - Modell Kontextus Protokoll: szabvány AI alkalmazások külső eszközökhöz való csatlakoztatására. Egyszer építed, mindenhol használod.
-**MCP kliens** - Alkalmazás, amely MCP szerverekhez csatlakozik, hogy eszközöket fedezzen fel és használjon.
+**MCP Kliens** - Alkalmazás, amely MCP szerverekhez csatlakozik eszközök felderítésére és használatára.
-**MCP szerver** - Szolgáltatás, amely MCP-n keresztül eszközöket tesz elérhetővé egyértelmű leírásokkal és paraméter sémákkal.
+**MCP Szerver** - Szolgáltatás, amely MCP-n keresztül elérhető eszközöket kínál világos leírásokkal és paraméter sémákkal.
-**McpToolProvider** - LangChain4j komponens, amely becsomagolja az MCP eszközöket AI szolgáltatások és ügynökök használatára.
+**McpToolProvider** - LangChain4j komponens, amely MCP eszközöket csomagol AI szolgáltatások és ügynökök számára.
-**McpTransport** - MCP kommunikációs interfész. Megvalósítások között van Stdio és HTTP.
+**McpTransport** - Interfész az MCP kommunikációhoz. Megvalósítások között szerepel a Stdio és HTTP.
-**Stdio transport** - Helyi folyamat szállítás stdin/stdout-on keresztül. Hasznos fájlrendszer eléréséhez vagy parancssori eszközökhöz.
+**Stdio Szállítás** - Helyi folyamat szállítás stdin/stdout-on keresztül. Hasznos fájlrendszer-hozzáféréshez vagy parancssori eszközökhöz.
-**StdioMcpTransport** - LangChain4j megvalósítás, amely MCP szervert indít alfolyamatként.
+**StdioMcpTransport** - LangChain4j megvalósítás, amely MCP szervert szubprocesszként indít.
-**Eszköz felfedezés** - A kliens lekérdezi a szervert az elérhető eszközök leírásaival és sémáival.
+**Eszköz Felderítés** - A kliens lekérdezi a szervert az elérhető eszközökről leírásokkal és sémákkal.
-## Azure szolgáltatások - [Module 01](../01-introduction/README.md)
+## Azure Szolgáltatások - [Module 01](../01-introduction/README.md)
-**Azure AI Search** - Felhő alapú keresés vektor támogatással. [Module 03](../03-rag/README.md)
+**Azure AI Search** - Felhőalapú keresés vektoros képességekkel. [Module 03](../03-rag/README.md)
-**Azure Developer CLI (azd)** - Azure erőforrások telepítése.
+**Azure Developer CLI (azd)** - Azure erőforrásokat telepít.
-**Azure OpenAI** - Microsoft vállalati AI szolgáltatása.
+**Azure OpenAI** - A Microsoft vállalati AI szolgáltatása.
-**Bicep** - Azure infrastruktúra-kód nyelv. [Infrastrukturális útmutató](../01-introduction/infra/README.md)
+**Bicep** - Azure infrastruktúra kódnyelve. [Infrastruktúra Útmutató](../01-introduction/infra/README.md)
-**Telepítés neve** - Modell telepítésének neve Azure-ban.
+**Telepítés Neve** - Modell telepítésének neve Azure-ban.
-**GPT-5.2** - Legújabb OpenAI modell érvelési vezérléssel. [Module 02](../02-prompt-engineering/README.md)
+**GPT-5.2** - Legújabb OpenAI modell az érvelés szabályozásával. [Module 02](../02-prompt-engineering/README.md)
-## Tesztelés és fejlesztés - [Tesztelési útmutató](TESTING.md)
+## Tesztelés és Fejlesztés - [Tesztelési Útmutató](TESTING.md)
-**Dev Container** - Konténerizált fejlesztői környezet. [Konfiguráció](../../../.devcontainer/devcontainer.json)
+**Fejlesztői Konténer** - Konténerizált fejlesztési környezet. [Konfiguráció](../../../.devcontainer/devcontainer.json)
-**GitHub modellek** - Ingyenes AI modell játszótér. [Module 00](../00-quick-start/README.md)
+**Memóriabeli Tesztelés** - Tesztelés memóriabeli tárolóval.
-**Memóriabeli tesztelés** - Tesztelés memóriabeli tárolóval.
-
-**Integrációs tesztelés** - Tesztelés valódi infrastruktúrával.
+**Integrációs Tesztelés** - Tesztelés valós infrastruktúrával.
**Maven** - Java build automatizációs eszköz.
-**Mockito** - Java mocking könyvtár.
+**Mockito** - Java mockolási keretrendszer.
-**Spring Boot** - Java alkalmazáskeretrendszer. [Module 01](../01-introduction/README.md)
+**Spring Boot** - Java alkalmazás keretrendszer. [Module 01](../01-introduction/README.md)
---
**Jogi nyilatkozat**:
-Ez a dokumentum az [Co-op Translator](https://github.com/Azure/co-op-translator) mesterséges intelligencia alapú fordító szolgáltatásával készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Kritikus információk esetén professzionális emberi fordítást javaslunk. Nem vállalunk felelősséget az e fordítás használatából eredő félreértésekért vagy félreértelmezésekért.
+Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.
\ No newline at end of file
diff --git a/translations/hu/docs/TESTING.md b/translations/hu/docs/TESTING.md
index 87c687380..18f17c1d6 100644
--- a/translations/hu/docs/TESTING.md
+++ b/translations/hu/docs/TESTING.md
@@ -2,19 +2,19 @@
## Tartalomjegyzék
-- [Gyors Kezdet](../../../docs)
-- [Mit Fednek Le a Tesztek](../../../docs)
-- [A Tesztek Futtatása](../../../docs)
-- [Tesztek Futtatása VS Code-ban](../../../docs)
-- [Tesztelési Minták](../../../docs)
-- [Tesztelési Filozófia](../../../docs)
-- [Következő Lépések](../../../docs)
+- [Gyors Kezdés](#gyors-kezdés)
+- [Mit Fednek Le a Tesztek](#mit-fednek-le-a-tesztek)
+- [Tesztek Futtatása](#tesztek-futtatása)
+- [Tesztek Futtatása VS Code-ban](#tesztek-futtatása-vs-code-ban)
+- [Tesztelési Minták](#tesztelési-minták)
+- [Tesztelési Filozófia](#tesztelési-filozófia)
+- [Következő Lépések](#következő-lépések)
-Ez az útmutató végigvezet a teszteken, amelyek bemutatják, hogyan lehet AI alkalmazásokat tesztelni API kulcsok vagy külső szolgáltatások használata nélkül.
+Ez az útmutató végigvezet a teszteken, amelyek bemutatják, hogyan lehet AI alkalmazásokat tesztelni API-kulcsok vagy külső szolgáltatások nélkül.
-## Gyors Kezdet
+## Gyors Kezdés
-Futtasd az összes tesztet egyetlen parancs segítségével:
+Futtass minden tesztet egyetlen parancssal:
**Bash:**
```bash
@@ -26,32 +26,31 @@ mvn test
mvn --% test
```
-Ha minden teszt sikeresen lefut, az alábbi képernyőképen láthatóhoz hasonló kimenetet kell látnod — tesztek nulla hibával futnak.
+Ha minden teszt sikeresen lefut, a következő képernyőképhez hasonló kimenetet látsz — a tesztek eredménye nulla hiba.
-*Sikeres tesztfuttatás, amely mutatja, hogy minden teszt átment, nulla hibával*
+*Sikeres tesztfuttatás, amelyen minden teszt hibamentesen átmegy*
## Mit Fednek Le a Tesztek
-Ez a kurzus **egységtesztekre** fókuszál, amelyek helyben futnak. Minden teszt egy egyedi LangChain4j koncepciót mutat be elszigetelten. Az alábbi tesztelési piramis megmutatja, hol helyezkednek el az egységtesztek — ők alkotják a gyors, megbízható alapot, amelyre a többi tesztelési stratégia épül.
+Ez a kurzus elsősorban **unit tesztekre** fókuszál, amelyeket helyben futtatunk. Minden teszt egy adott LangChain4j koncepciót mutat be izoláltan. Az alábbi tesztpiramis megmutatja, hova illeszkednek az unit tesztek — ezek alkotják a gyors, megbízható alapot, amelyre a további tesztstratégia épül.
-*Tesztelési piramis, amely mutatja az egységtesztek (gyors, elszigetelt), integrációs tesztek (valós komponensek) és end-to-end tesztek egyensúlyát. Ez a képzés az egységtesztelést fedi le.*
+*Tesztelési piramis, amely az unit tesztek (gyors, izolált), integrációs tesztek (valós komponensek) és end-to-end tesztek közötti egyensúlyt ábrázolja. Ez a képzés az unit tesztelést fedi.*
| Modul | Tesztek | Fókusz | Kulcsfájlok |
|--------|-------|-------|-----------|
-| **00 - Gyors Kezdet** | 6 | Parancssablonok és változó behelyettesítés | `SimpleQuickStartTest.java` |
-| **01 - Bevezetés** | 8 | Beszélgetés memória és állapot-alapú chat | `SimpleConversationTest.java` |
-| **02 - Prompt Mérnökség** | 12 | GPT-5.2 minták, buzgósági szintek, strukturált kimenet | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | Dokumentum-beolvasás, beágyazások, hasonlóság keresés | `DocumentServiceTest.java` |
-| **04 - Eszközök** | 12 | Függvényhívás és eszközláncolás | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | Model Context Protocol stdio átvitel használatával | `SimpleMcpTest.java` |
+| **01 - Bevezetés** | 8 | Beszélgetés memóriája és állapotfüggő chat | `SimpleConversationTest.java` |
+| **02 - Prompt Tervezés** | 12 | GPT-5.2 minták, lelkesedési szintek, strukturált kimenet | `SimpleGpt5PromptTest.java` |
+| **03 - RAG** | 10 | Dokumentum feldolgozás, beágyazások, hasonlóság keresés | `DocumentServiceTest.java` |
+| **04 - Eszközök** | 12 | Függvényhívás és eszköz láncolás | `SimpleToolsTest.java` |
+| **05 - MCP** | 8 | Model Context Protocol stdio transzporttal | `SimpleMcpTest.java` |
-## A Tesztek Futtatása
+## Tesztek Futtatása
-**Futtasd az összes tesztet a gyökérkönyvtárból:**
+**Minden teszt futtatása a gyökérből:**
**Bash:**
```bash
@@ -63,7 +62,7 @@ mvn test
mvn --% test
```
-**Futtass teszteket egy adott modulra:**
+**Egy adott modul tesztjeinek futtatása:**
**Bash:**
```bash
@@ -79,7 +78,7 @@ cd 01-introduction; mvn --% test
mvn --% test -pl 01-introduction
```
-**Futtass egyedi teszt osztályt:**
+**Egyetlen tesztosztály futtatása:**
**Bash:**
```bash
@@ -91,7 +90,7 @@ mvn test -Dtest=SimpleConversationTest
mvn --% test -Dtest=SimpleConversationTest
```
-**Futtass egy konkrét tesztmetódust:**
+**Egy adott tesztmetódus futtatása:**
**Bash:**
```bash
@@ -100,36 +99,36 @@ mvn test -Dtest=SimpleConversationTest#meg kell tartani a beszélgetés előzmé
**PowerShell:**
```powershell
-mvn --% test -Dtest=SimpleConversationTest#meg kell őrizni a beszélgetési előzményeket
+mvn --% test -Dtest=SimpleConversationTest#meg kell tartani a beszélgetés előzményeit
```
## Tesztek Futtatása VS Code-ban
-Ha Visual Studio Code-ot használsz, a Test Explorer grafikus felületet nyújt a tesztek futtatásához és hibakereséséhez.
+Ha Visual Studio Code-ot használsz, a Test Explorer grafikus felületet biztosít a tesztek futtatásához és hibakereséséhez.
-*VS Code Teszt Felfedező, amely mutatja a tesztfát az összes Java tesztosztállyal és egyedi tesztmetódussal*
+*VS Code Test Explorer, amely mutatja a tesztfát az összes Java tesztosztállyal és az egyéni tesztmetódusokkal*
**Tesztek futtatása VS Code-ban:**
-1. Nyisd meg a Test Explorer-t az Activity Bar-ban a lombik ikonra kattintva
-2. Bontsd ki a tesztfát, hogy lásd az összes modult és teszt osztályt
-3. Kattints a lejátszás gombra bármelyik teszt mellett az egyedüli futtatáshoz
-4. Kattints a "Run All Tests"-re az egész tesztcsomag futtatásához
-5. Jobb klikk bármely teszten és válaszd a "Debug Test" opciót a breakpointok beállításához és lépésekhez a kódban
+1. Nyisd meg a Test Explorert az Activity Bar-ban lévő lombik ikonra kattintva
+2. Bontsd ki a tesztfát, hogy lásd az összes modult és tesztosztályt
+3. Kattints bármelyik teszthez tartozó lejátszás gombra, hogy azt egyedileg futtasd
+4. Kattints a „Run All Tests” gombra az egész tesztcsomag futtatásához
+5. Jobb klikk bármely teszt fölött, majd válaszd a „Debug Test” menüpontot a töréspontok beállításához és lépésenkénti futtatáshoz
-A Test Explorer zöld pipákat mutat a sikeres teszteknél, illetve részletes hibajelentést, ha egy teszt megbukik.
+A Test Explorer zöld pipát mutat a sikeres tesztek mellett és részletes hibajelentést ad, ha egy teszt kudarcot vall.
## Tesztelési Minták
-### Minta 1: Parancssablonok Tesztelése
+### Minta 1: Prompt Sablonok Tesztelése
-A legegyszerűbb minta a parancssablonokat teszteli AI modell hívás nélkül. Ellenőrzöd, hogy a változó helyettesítés helyesen működik-e és a promptok az elvárt formátumban vannak-e.
+A legegyszerűbb minta a prompt sablonokat teszteli AI modell hívása nélkül. Ellenőrzöd, hogy a változó helyettesítés helyesen működik-e és a promptok a várt formában készülnek el.
-
+
-*Parancssablon tesztelés, amely mutatja a változó helyettesítés folyamatát: sablon helyőrzőkkel → értékekkel kiegészítve → formázott kimenet ellenőrizve*
+*Prompt sablon tesztelése változó helyettesítés folyamatával: sablon helyőrzőkkel → értékek alkalmazva → formázott kimenet ellenőrizve*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-Ez a teszt a `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java` fájlban található.
+Ez a minta ellenőrzi a változó helyettesítést és hogy a promptok a várakozásoknak megfelelően formázottak — nem szükséges API kulcs vagy modell hívás.
-**Futtasd:**
+### Minta 2: Nyelvi Modellek "Mock"-olása
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#tesztPromptSablonFormázás
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#tesztPromptSablonFormázás
-```
-
-### Minta 2: Nyelvi Modellek Mockolása
-
-Beszélgetési logika tesztelésekor használd a Mockito-t hogy hamis modelleket hozz létre, amelyek előre meghatározott válaszokat adnak. Ez gyorsabbá, ingyenessé és determinisztikussá teszi a teszteket.
+Beszélgetési logika teszteléskor használj Mockito-t hamis modellek létrehozására, amelyek előre meghatározott válaszokat adnak. Ezáltal a tesztek gyorsak, ingyenesek és determinisztikusak lesznek.
-
+
-*Összehasonlítás, hogy miért előnyösek a mock-ok a teszteléshez: gyorsak, ingyenesek, determinisztikusak, nincs szükség API kulcsokra*
+*Összehasonlítás, ami megmutatja, miért előnyösebb a mock az API teszteléshez: gyors, ingyenes, determinisztikus és nem igényel API kulcsokat*
```java
@ExtendWith(MockitoExtension.class)
@@ -213,20 +200,20 @@ class SimpleConversationTest {
conversationService.chat(conversationId, "Third message");
List history = conversationService.getHistory(conversationId);
- assertThat(history).hasSize(6); // 3 felhasználói + 3 MI üzenet
+ assertThat(history).hasSize(6); // 3 felhasználói + 3 mesterséges intelligencia üzenet
}
}
```
-Ez a minta megtalálható a `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java` fájlban. A mock biztosítja az állandó viselkedést, hogy az emlékezetkezelés helyes működését ellenőrizhesd.
+Ez a minta megtalálható az `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java` fájlban. A mock egységes viselkedést biztosít, így ellenőrizheted, hogy a memória kezelése helyes.
-### Minta 3: Beszélgetés Elszigeteltségének Tesztelése
+### Minta 3: Beszélgetés Izoláció Tesztelése
-A beszélgetés memóriának külön kell választania a több felhasználót. Ez a teszt ellenőrzi, hogy a beszélgetések nem keverik össze a kontextusokat.
+A beszélgetés memóriának meg kell tartania az egyes felhasználók szétválasztását. Ez a teszt igazolja, hogy a beszélgetések nem keverik a kontextusokat.
-
+
-*Beszélgetés elszigetelés tesztelése, amely bemutatja, hogy eltérő felhasználók számára külön memóriatárolók vannak, hogy megelőzze a kontextus összekeveredését*
+*Beszélgetés izolációjának tesztelése, amely különálló memória tárolókat mutat eltérő felhasználók számára a kontextus keveredés elkerüléséhez*
```java
@Test
@@ -250,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-Minden beszélgetés saját, független előzményeket tart fenn. Éles rendszerekben ez az elszigetelés kritikus a többfelhasználós alkalmazások esetében.
+Minden beszélgetés saját, független előzményt tart fenn. Termelési rendszerekben ez az izoláció elengedhetetlen a többfelhasználós alkalmazásokhoz.
### Minta 4: Eszközök Független Tesztelése
-Az eszközök olyan funkciók, amelyeket az AI hívhat meg. Teszteld őket közvetlenül, hogy biztos legyél benne, hogy jól működnek AI döntések nélkül is.
+Az eszközök olyan függvények, amelyeket az AI hívhat meg. Teszteld őket közvetlenül, hogy biztosan helyesen működnek az AI döntéseitől függetlenül.
-*Eszközök független tesztelése, amely mutatja a mock eszközök futtatását AI hívások nélkül, hogy ellenőrizze az üzleti logikát*
+*Eszközök független tesztelése mock eszköz futtatással AI hívások nélkül az üzleti logika ellenőrzéséhez*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-Ezek a tesztek a `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` fájlból valók, amelyek validálják az eszközlogikát AI részvétel nélkül. A láncolási példa azt mutatja, hogyan táplálja egy eszköz kimenete a másik bemenetét.
+Ezek a tesztek az `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` fájlból származnak és az eszközök logikáját validálják AI részvétel nélkül. A láncolás példa mutatja, hogyan táplálja egy eszköz kimenete a másikat bemenetként.
-### Minta 5: Memóriában Futó RAG Tesztelés
+### Minta 5: Memóriában Futtatott RAG Tesztelés
-A RAG rendszerek hagyományosan vektorigényes adatbázisokat és beágyazási szolgáltatásokat használnak. A memóriában futó minta lehetővé teszi az egész folyamat tesztelését külső függőségek nélkül.
+A RAG rendszerek hagyományosan vektoralapú adatbázisokat és embedding szolgáltatásokat igényelnek. A memóriában futtatott minta lehetővé teszi, hogy az egész folyamatot külső függőségek nélkül teszteld.
-
+
-*Memóriában futó RAG tesztelési munkafolyamat, amely bemutatja a dokumentum feldolgozását, beágyazás tárolást és hasonlóság keresést adatbázis nélkül*
+*Memóriában futtatott RAG tesztelési folyamat, amely dokumentum feldolgozást, beágyazott tárolást és hasonlóság keresést mutat be adatbázis nélkül*
```java
@Test
@@ -306,13 +293,13 @@ void testProcessTextDocument() {
}
```
-Ez a teszt a `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` fájlból kreál a memóriában dokumentumot és ellenőrzi a darabolást és metaadat kezelését.
+Ez a teszt az `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` fájlból létrehoz egy dokumentumot memóriában, és ellenőrzi a szeletelést és metaadat kezelést.
### Minta 6: MCP Integrációs Tesztelés
-Az MCP modul a Model Context Protocol integrációját teszteli stdio átvitel használatával. Ezek a tesztek igazolják, hogy az alkalmazás képes MCP szervereket folyamatként indítani és velük kommunikálni.
+Az MCP modul a Model Context Protocol integrációját teszteli stdio transzport használatával. Ezek a tesztek igazolják, hogy az alkalmazás képes MCP szervereket alfolyamatként indítani és kommunikálni velük.
-Az `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` fájlban lévő tesztek validálják az MCP kliens viselkedését.
+Az `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` tesztek validálják az MCP kliens viselkedését.
**Futtasd őket:**
@@ -328,36 +315,35 @@ cd 05-mcp; mvn --% test
## Tesztelési Filozófia
-A kódodat teszteld, ne az AI-t. A tesztjeidnek azt kell ellenőrizniük, hogy a te általad írt kód hogyan működik, például hogy a promptok hogyan épülnek fel, hogyan kezelődik a memória és hogyan működnek az eszközök. Az AI válaszai változóak lehetnek, és nem szabad, hogy a tesztelés tárgyát képezzék. Kérdezd meg inkább, hogy a prompt sablon helyesen helyettesíti-e a változókat, nem pedig azt, hogy az AI jól válaszol-e.
+A kódodat teszteld, ne az AI-t. A tesztjeidnek azt kell ellenőrizniük, hogy a kód, amit írsz, helyesen építi fel a promptokat, kezeli a memóriát és futtatja az eszközöket. Az AI válaszai változékonyak, és nem részei a teszt elvárásoknak. Inkább azt kérdezd meg magadtól, hogy a prompt sablonod helyesen helyettesíti-e a változókat, nem azt, hogy az AI ad-e helyes választ.
-Használj mock-okat a nyelvi modellekhez. Ezek külső függőségek, amelyek lassúak, drágák és nem determinisztikusak. A mockolás gyors, milliszekundumos, ingyenes és mindig azonos eredményt ad.
+Használj mockokat a nyelvi modellekhez. Ezek külső függőségek, lassúak, drágák és nem determinisztikusak. A mockolás gyorsítja a teszteket (milliszekundumok), ingyenessé teszi őket (nincs API költség) és determinisztikussá (ugyanaz az eredmény mindig).
-Tartsd a teszteket függetlennek. Minden teszt állítsa be a saját adatait, ne támaszkodjon más tesztekre, és takarítson maga után. A teszteknek bármilyen futási sorrendben át kell menniük.
+Tartsd függetlennek a teszteket. Minden teszt állítsa be saját adatait, ne függjön más tesztektől, és takarítsa el maga után. A teszteknek akkor is sikeresnek kell lenniük, ha a futtatási sorrendet megváltoztatod.
-Tesztelj szélsőséges eseteket a megszokott útvonalakon túl. Próbálj ki üres bemeneteket, nagyon nagy adatokat, speciális karaktereket, érvénytelen paramétereket és határfeltételeket. Ezek gyakran fednek fel olyan hibákat, amiket a normál használat nem.
+Tesztelj szélsőséges eseteket is a szokásos eseteken túl. Próbálj ki üres bemeneteket, nagyon nagyméretű bemeneteket, speciális karaktereket, érvénytelen paramétereket és határértékeket. Ezek gyakran fednek fel hibákat, amelyeket normál használat nem mutat ki.
-Használj leíró neveket. Összehasonlítva a `shouldMaintainConversationHistoryAcrossMultipleMessages()` és a `test1()` neveket: az első pontosan elmondja, hogy mit tesztel, könnyebbé téve a hibák keresését.
+Használj leíró neveket. Hasonlítsd össze a `shouldMaintainConversationHistoryAcrossMultipleMessages()` és a `test1()` nevű metódusokat. Az első pontosan elmondja, mit tesztel a kód, így a hibakeresés jóval egyszerűbb.
## Következő Lépések
-Most, hogy megérted a tesztelési mintákat, mélyedj el az egyes modulokban:
+Most, hogy érted a tesztelési mintákat, mélyedj el minden modulban:
-- **[00 - Gyors Kezdet](../00-quick-start/README.md)** - Kezdd a parancssablon alapokkal
-- **[01 - Bevezetés](../01-introduction/README.md)** - Tanuld meg a beszélgetés memória kezelését
-- **[02 - Prompt Mérnökség](../02/prompt-engineering/README.md)** - Sajátítsd el a GPT-5.2 promptolási mintákat
-- **[03 - RAG](../03-rag/README.md)** - Építs lekérdezés-kiterjesztett generálási rendszereket
-- **[04 - Eszközök](../04-tools/README.md)** - Valósítsd meg a függvényhívást és eszközláncokat
-- **[05 - MCP](../05-mcp/README.md)** - Integráld a Model Context Protocol-t
+- **[01 - Bevezetés](../01-introduction/README.md)** - Ismerd meg a beszélgetés memóriakezelését
+- **[02 - Prompt Tervezés](../02-prompt-engineering/README.md)** - Sajátítsd el a GPT-5.2 prompt mintákat
+- **[03 - RAG](../03-rag/README.md)** - Építs lekérdezés-alapú generáló rendszereket
+- **[04 - Eszközök](../04-tools/README.md)** - Valósíts meg függvényhívásokat és eszköz láncokat
+- **[05 - MCP](../05-mcp/README.md)** - Integráld a Model Context Protocolt
-Minden modul README-je részletes magyarázatokat ad a itt tesztelt koncepciókról.
+Minden modul README fájl részletesen magyarázza a itt tesztelt koncepciókat.
---
-**Navigáció:** [← Vissza a Főoldalra](../README.md)
+**Navigáció:** [← Vissza a főoldalra](../README.md)
---
-**Nyilatkozat**:
-Ezt a dokumentumot az AI fordító szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével fordítottuk le. Bár igyekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások tartalmazhatnak hibákat vagy pontatlanságokat. Az eredeti dokumentum a saját nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén professzionális, emberi fordítást javaslunk. Nem vállalunk felelősséget az ebből eredő félreértésekért vagy helytelen értelmezésekért.
+**Jogi nyilatkozat**:
+Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.
\ No newline at end of file
diff --git a/translations/id/.co-op-translator.json b/translations/id/.co-op-translator.json
index 973981455..3ce948560 100644
--- a/translations/id/.co-op-translator.json
+++ b/translations/id/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "id"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-02T20:24:39+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T10:10:12+00:00",
"source_file": "01-introduction/README.md",
"language_code": "id"
},
@@ -18,20 +18,20 @@
"language_code": "id"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-02T20:27:13+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T10:05:28+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "id"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-02T20:28:48+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T10:09:24+00:00",
"source_file": "03-rag/README.md",
"language_code": "id"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T12:33:48+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T10:08:01+00:00",
"source_file": "04-tools/README.md",
"language_code": "id"
},
@@ -54,8 +54,8 @@
"language_code": "id"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T16:11:34+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T10:03:59+00:00",
"source_file": "README.md",
"language_code": "id"
},
@@ -72,14 +72,14 @@
"language_code": "id"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-02T20:32:06+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T10:06:01+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "id"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-02T20:32:50+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T10:06:40+00:00",
"source_file": "docs/TESTING.md",
"language_code": "id"
}
diff --git a/translations/id/00-quick-start/README.md b/translations/id/00-quick-start/README.md
deleted file mode 100644
index b059b8662..000000000
--- a/translations/id/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# Module 00: Mulai Cepat
-
-## Daftar Isi
-
-- [Pendahuluan](../../../00-quick-start)
-- [Apa itu LangChain4j?](../../../00-quick-start)
-- [Dependensi LangChain4j](../../../00-quick-start)
-- [Prasyarat](../../../00-quick-start)
-- [Pengaturan](../../../00-quick-start)
- - [1. Dapatkan Token GitHub Anda](../../../00-quick-start)
- - [2. Atur Token Anda](../../../00-quick-start)
-- [Jalankan Contoh](../../../00-quick-start)
- - [1. Chat Dasar](../../../00-quick-start)
- - [2. Pola Prompt](../../../00-quick-start)
- - [3. Panggilan Fungsi](../../../00-quick-start)
- - [4. Tanya Jawab Dokumen (Easy RAG)](../../../00-quick-start)
- - [5. AI Bertanggung Jawab](../../../00-quick-start)
-- [Apa yang Ditunjukkan Setiap Contoh](../../../00-quick-start)
-- [Langkah Selanjutnya](../../../00-quick-start)
-- [Pemecahan Masalah](../../../00-quick-start)
-
-## Pendahuluan
-
-Mulai cepat ini dimaksudkan agar Anda bisa langsung menggunakan LangChain4j secepat mungkin. Ini mencakup dasar-dasar membangun aplikasi AI dengan LangChain4j dan Model GitHub. Pada modul-modul berikutnya Anda akan beralih ke Azure OpenAI dan GPT-5.2 dan menggali lebih dalam setiap konsep.
-
-## Apa itu LangChain4j?
-
-LangChain4j adalah perpustakaan Java yang mempermudah pembangunan aplikasi bertenaga AI. Alih-alih berurusan dengan klien HTTP dan parsing JSON, Anda bekerja dengan API Java yang bersih.
-
-"Chain" dalam LangChain mengacu pada menghubungkan beberapa komponen bersama-sama - Anda mungkin menghubungkan prompt ke model ke parser, atau menghubungkan beberapa panggilan AI di mana satu output menjadi input berikutnya. Mulai cepat ini fokus pada dasar-dasar sebelum mengeksplorasi rantai yang lebih kompleks.
-
-
-
-*Menggabungkan komponen dalam LangChain4j - blok bangunan menghubungkan untuk membuat alur kerja AI yang kuat*
-
-Kita akan menggunakan tiga komponen inti:
-
-**ChatModel** - Antarmuka untuk interaksi model AI. Panggil `model.chat("prompt")` dan dapatkan string respon. Kami menggunakan `OpenAiOfficialChatModel` yang bekerja dengan endpoint yang kompatibel dengan OpenAI seperti Model GitHub.
-
-**AiServices** - Membuat antarmuka layanan AI yang tipe-aman. Definisikan metode, anotasi dengan `@Tool`, dan LangChain4j menangani orkestrasi. AI secara otomatis memanggil metode Java Anda saat dibutuhkan.
-
-**MessageWindowChatMemory** - Mempertahankan riwayat percakapan. Tanpa ini, setiap permintaan bersifat independen. Dengan ini, AI ingat pesan sebelumnya dan mempertahankan konteks di beberapa gilirannya.
-
-
-
-*Arsitektur LangChain4j - komponen inti bekerja bersama untuk memberi tenaga pada aplikasi AI Anda*
-
-## Dependensi LangChain4j
-
-Mulai cepat ini menggunakan tiga dependensi Maven dalam [`pom.xml`](../../../00-quick-start/pom.xml):
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-Modul `langchain4j-open-ai-official` menyediakan kelas `OpenAiOfficialChatModel` yang terhubung ke API yang kompatibel dengan OpenAI. Model GitHub menggunakan format API yang sama, jadi tidak diperlukan adaptor khusus — cukup arahkan URL dasar ke `https://models.github.ai/inference`.
-
-Modul `langchain4j-easy-rag` menyediakan pemisahan dokumen otomatis, embedding, dan pengambilan sehingga Anda dapat membangun aplikasi RAG tanpa mengkonfigurasi setiap langkah secara manual.
-
-## Prasyarat
-
-**Menggunakan Dev Container?** Java dan Maven sudah terpasang. Anda hanya memerlukan Token Akses Pribadi GitHub.
-
-**Pengembangan Lokal:**
-- Java 21+, Maven 3.9+
-- Token Akses Pribadi GitHub (instruksi di bawah)
-
-> **Catatan:** Modul ini menggunakan `gpt-4.1-nano` dari Model GitHub. Jangan ubah nama model dalam kode — ini dikonfigurasi untuk bekerja dengan model yang tersedia di GitHub.
-
-## Pengaturan
-
-### 1. Dapatkan Token GitHub Anda
-
-1. Pergi ke [GitHub Settings → Personal Access Tokens](https://github.com/settings/personal-access-tokens)
-2. Klik "Generate new token"
-3. Beri nama yang deskriptif (misal, "LangChain4j Demo")
-4. Tentukan masa berlaku (7 hari direkomendasikan)
-5. Di bawah "Account permissions", cari "Models" dan atur ke "Read-only"
-6. Klik "Generate token"
-7. Salin dan simpan token Anda — Anda tidak akan melihatnya lagi
-
-### 2. Atur Token Anda
-
-**Pilihan 1: Menggunakan VS Code (Direkomendasikan)**
-
-Jika Anda menggunakan VS Code, tambahkan token Anda ke file `.env` di root proyek:
-
-Jika file `.env` tidak ada, salin `.env.example` ke `.env` atau buat file `.env` baru di root proyek.
-
-**Contoh file `.env`:**
-```bash
-# Di /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-Lalu Anda cukup klik kanan pada file demo apa saja (misal `BasicChatDemo.java`) di Explorer dan pilih **"Run Java"** atau gunakan konfigurasi peluncuran dari panel Run and Debug.
-
-**Pilihan 2: Menggunakan Terminal**
-
-Atur token sebagai variabel lingkungan:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## Jalankan Contoh
-
-**Menggunakan VS Code:** Cukup klik kanan pada file demo apa saja di Explorer dan pilih **"Run Java"**, atau gunakan konfigurasi peluncuran dari panel Run and Debug (pastikan token sudah ditambahkan ke file `.env` dulu).
-
-**Menggunakan Maven:** Alternatifnya, Anda dapat menjalankan dari baris perintah:
-
-### 1. Chat Dasar
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. Pola Prompt
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-Menampilkan zero-shot, few-shot, chain-of-thought, dan prompt berbasis peran.
-
-### 3. Panggilan Fungsi
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-AI secara otomatis memanggil metode Java Anda saat dibutuhkan.
-
-### 4. Tanya Jawab Dokumen (Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-Tanyakan pertanyaan tentang dokumen Anda menggunakan Easy RAG dengan embedding dan pengambilan otomatis.
-
-### 5. AI Bertanggung Jawab
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-Lihat bagaimana filter keamanan AI memblokir konten berbahaya.
-
-## Apa yang Ditunjukkan Setiap Contoh
-
-**Chat Dasar** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-Mulai di sini untuk melihat LangChain4j dalam bentuk paling sederhana. Anda akan membuat `OpenAiOfficialChatModel`, mengirim prompt dengan `.chat()`, dan mendapatkan respons kembali. Ini menunjukkan fondasi: bagaimana menginisialisasi model dengan endpoint dan kunci API khusus. Setelah memahami pola ini, semuanya dibangun di atasnya.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 Coba dengan [GitHub Copilot](https://github.com/features/copilot) Chat:** Buka [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) dan tanyakan:
-> - "Bagaimana saya beralih dari Model GitHub ke Azure OpenAI dalam kode ini?"
-> - "Parameter lain apa yang bisa saya konfigurasi di OpenAiOfficialChatModel.builder()?"
-> - "Bagaimana cara menambahkan streaming respons alih-alih menunggu respons lengkap?"
-
-**Rekayasa Prompt** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-Sekarang Anda tahu cara berkomunikasi dengan model, mari jelajahi apa yang Anda katakan padanya. Demo ini menggunakan setup model yang sama tapi menunjukkan lima pola prompting berbeda. Coba zero-shot untuk instruksi langsung, few-shot yang belajar dari contoh, chain-of-thought yang mengungkap langkah penalaran, dan prompt berbasis peran yang menetapkan konteks. Anda akan melihat bagaimana model yang sama memberikan hasil sangat berbeda tergantung cara Anda mengatur permintaan.
-
-Demo juga memperlihatkan template prompt, yang merupakan cara kuat untuk membuat prompt yang dapat digunakan ulang dengan variabel.
-Contoh berikut menunjukkan prompt menggunakan LangChain4j `PromptTemplate` untuk mengisi variabel. AI akan menjawab berdasarkan tujuan dan aktivitas yang diberikan.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 Coba dengan [GitHub Copilot](https://github.com/features/copilot) Chat:** Buka [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) dan tanyakan:
-> - "Apa perbedaan antara zero-shot dan few-shot prompting, dan kapan harus menggunakan masing-masing?"
-> - "Bagaimana parameter temperature memengaruhi respons model?"
-> - "Apa saja teknik untuk mencegah serangan injeksi prompt di produksi?"
-> - "Bagaimana cara membuat objek PromptTemplate yang dapat digunakan ulang untuk pola umum?"
-
-**Integrasi Alat** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-Di sinilah LangChain4j menjadi kuat. Anda akan menggunakan `AiServices` untuk membuat asisten AI yang dapat memanggil metode Java Anda. Cukup anotasi metode dengan `@Tool("deskripsi")` dan LangChain4j mengurus sisanya — AI secara otomatis memutuskan kapan menggunakan setiap alat berdasarkan permintaan pengguna. Ini menunjukkan panggilan fungsi, teknik utama untuk membangun AI yang bisa mengambil tindakan, bukan hanya menjawab pertanyaan.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 Coba dengan [GitHub Copilot](https://github.com/features/copilot) Chat:** Buka [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) dan tanyakan:
-> - "Bagaimana anotasi @Tool bekerja dan apa yang LangChain4j lakukan di balik layar?"
-> - "Apakah AI bisa memanggil beberapa alat secara berurutan untuk memecahkan masalah kompleks?"
-> - "Apa yang terjadi jika sebuah alat melemparkan pengecualian — bagaimana saya menangani kesalahan?"
-> - "Bagaimana cara mengintegrasikan API nyata bukan contoh kalkulator ini?"
-
-**Tanya Jawab Dokumen (Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-Di sini Anda akan melihat RAG (retrieval-augmented generation) menggunakan pendekatan "Easy RAG" LangChain4j. Dokumen dimuat, secara otomatis dipisah dan diembed ke dalam penyimpanan memori, kemudian pengambil konten memberikan potongan relevan ke AI saat waktu kueri. AI menjawab berdasarkan dokumen Anda, bukan pengetahuan umum model.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 Coba dengan [GitHub Copilot](https://github.com/features/copilot) Chat:** Buka [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) dan tanyakan:
-> - "Bagaimana RAG mencegah halusinasi AI dibandingkan menggunakan data pelatihan model?"
-> - "Apa perbedaan pendekatan mudah ini dengan pipeline RAG kustom?"
-> - "Bagaimana saya mengskalakan ini untuk menangani banyak dokumen atau basis pengetahuan yang lebih besar?"
-
-**AI Bertanggung Jawab** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-Bangun keamanan AI dengan pertahanan berlapis. Demo ini menunjukkan dua lapis perlindungan bekerja bersama:
-
-**Bagian 1: LangChain4j Input Guardrails** - Memblokir prompt berbahaya sebelum mencapai LLM. Buat guardrail kustom yang memeriksa kata kunci atau pola terlarang. Ini dijalankan di kode Anda, jadi cepat dan gratis.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**Bagian 2: Filter Keamanan Penyedia** - Model GitHub memiliki filter bawaan yang menangkap apa yang mungkin terlewat guardrails Anda. Anda akan melihat blok keras (error HTTP 400) untuk pelanggaran berat dan penolakan lunak di mana AI menolak dengan sopan.
-
-> **🤖 Coba dengan [GitHub Copilot](https://github.com/features/copilot) Chat:** Buka [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) dan tanyakan:
-> - "Apa itu InputGuardrail dan bagaimana cara membuatnya?"
-> - "Apa perbedaan antara blok keras dan penolakan lunak?"
-> - "Mengapa menggunakan keduanya, guardrails dan filter penyedia?"
-
-## Langkah Selanjutnya
-
-**Modul Berikutnya:** [01-introduction - Memulai dengan LangChain4j](../01-introduction/README.md)
-
----
-
-**Navigasi:** [← Kembali ke Utama](../README.md) | [Berikutnya: Module 01 - Pendahuluan →](../01-introduction/README.md)
-
----
-
-## Pemecahan Masalah
-
-### Build Maven Pertama Kali
-
-**Masalah**: `mvn clean compile` atau `mvn package` awal memakan waktu lama (10-15 menit)
-
-**Penyebab**: Maven perlu mengunduh semua dependensi proyek (Spring Boot, perpustakaan LangChain4j, SDK Azure, dll.) saat build pertama kali.
-
-**Solusi**: Ini perilaku normal. Build berikutnya akan jauh lebih cepat karena dependensi sudah disimpan lokal. Waktu unduh tergantung kecepatan jaringan Anda.
-
-### Sintaks Perintah Maven di PowerShell
-
-**Masalah**: Perintah Maven gagal dengan error `Unknown lifecycle phase ".mainClass=..."`
-**Penyebab**: PowerShell mengartikan `=` sebagai operator penugasan variabel, yang merusak sintaks properti Maven
-
-**Solusi**: Gunakan operator stop-parsing `--%` sebelum perintah Maven:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-Operator `--%` memberi tahu PowerShell untuk meneruskan semua argumen yang tersisa secara literal ke Maven tanpa interpretasi.
-
-### Tampilkan Emoji di Windows PowerShell
-
-**Masalah**: Respon AI menampilkan karakter sampah (misalnya, `????` atau `â??`) alih-alih emoji di PowerShell
-
-**Penyebab**: Encoding default PowerShell tidak mendukung emoji UTF-8
-
-**Solusi**: Jalankan perintah ini sebelum mengeksekusi aplikasi Java:
-```cmd
-chcp 65001
-```
-
-Ini memaksa encoding UTF-8 di terminal. Alternatifnya, gunakan Windows Terminal yang memiliki dukungan Unicode lebih baik.
-
-### Debugging Panggilan API
-
-**Masalah**: Kesalahan autentikasi, batasan rate, atau respon tak terduga dari model AI
-
-**Solusi**: Contoh termasuk `.logRequests(true)` dan `.logResponses(true)` untuk menampilkan panggilan API di konsol. Ini membantu memecahkan masalah kesalahan autentikasi, batasan rate, atau respon tak terduga. Hapus flag ini di produksi untuk mengurangi kebisingan log.
-
----
-
-
-**Penafian**:
-Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi yang kritis, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau salah tafsir yang timbul dari penggunaan terjemahan ini.
-
\ No newline at end of file
diff --git a/translations/id/01-introduction/README.md b/translations/id/01-introduction/README.md
index a3d96bb00..dbe6a7e33 100644
--- a/translations/id/01-introduction/README.md
+++ b/translations/id/01-introduction/README.md
@@ -2,37 +2,37 @@
## Daftar Isi
-- [Video Walkthrough](../../../01-introduction)
-- [Apa yang Akan Anda Pelajari](../../../01-introduction)
-- [Prasyarat](../../../01-introduction)
-- [Memahami Masalah Inti](../../../01-introduction)
-- [Memahami Token](../../../01-introduction)
-- [Cara Kerja Memori](../../../01-introduction)
-- [Cara Ini Menggunakan LangChain4j](../../../01-introduction)
-- [Menerapkan Infrastruktur Azure OpenAI](../../../01-introduction)
-- [Menjalankan Aplikasi Secara Lokal](../../../01-introduction)
-- [Menggunakan Aplikasi](../../../01-introduction)
- - [Obrolan Stateless (Panel Kiri)](../../../01-introduction)
- - [Obrolan Stateful (Panel Kanan)](../../../01-introduction)
-- [Langkah Selanjutnya](../../../01-introduction)
+- [Video Walkthrough](#video-walkthrough)
+- [Apa yang Akan Anda Pelajari](#apa-yang-akan-anda-pelajari)
+- [Prasyarat](#prasyarat)
+- [Memahami Masalah Inti](#memahami-masalah-inti)
+- [Memahami Token](#memahami-token)
+- [Cara Kerja Memori](#cara-kerja-memori)
+- [Bagaimana Ini Menggunakan LangChain4j](#bagaimana-ini-menggunakan-langchain4j)
+- [Menerapkan Infrastruktur Azure OpenAI](#menerapkan-infrastruktur-azure-openai)
+- [Menjalankan Aplikasi Secara Lokal](#menjalankan-aplikasi-secara-lokal)
+- [Menggunakan Aplikasi](#menggunakan-aplikasi)
+ - [Chat Tanpa Status (Panel Kiri)](#chat-tanpa-status-panel-kiri)
+ - [Chat Dengan Status (Panel Kanan)](#chat-dengan-status-panel-kanan)
+- [Langkah Selanjutnya](#langkah-selanjutnya)
## Video Walkthrough
Tonton sesi langsung ini yang menjelaskan cara memulai dengan modul ini:
-
+
## Apa yang Akan Anda Pelajari
-Dalam quick start, Anda menggunakan Model GitHub untuk mengirim prompt, memanggil alat, membangun pipeline RAG, dan menguji guardrails. Demo tersebut menunjukkan apa yang mungkin — sekarang kita beralih ke Azure OpenAI dan GPT-5.2 dan mulai membangun aplikasi bergaya produksi. Modul ini fokus pada AI percakapan yang mengingat konteks dan menjaga status — konsep yang digunakan oleh demo quick start di balik layar tapi tidak dijelaskan.
+Ini adalah titik awal Anda dengan LangChain4j dan Azure OpenAI. Kami mulai dengan dasar-dasar dan mulai membangun aplikasi gaya produksi. Modul ini berfokus pada AI percakapan yang mengingat konteks dan mempertahankan status — konsep dasar yang dibangun oleh setiap modul berikutnya.
-Kita akan menggunakan GPT-5.2 dari Azure OpenAI sepanjang panduan ini karena kemampuan penalarannya yang maju membuat perilaku pola yang berbeda lebih jelas. Saat Anda menambahkan memori, Anda akan melihat perbedaannya dengan jelas. Ini memudahkan Anda memahami apa yang dibawa setiap komponen ke aplikasi Anda.
+Kami akan menggunakan GPT-5.2 Azure OpenAI sepanjang panduan ini karena kemampuan penalarannya yang maju membuat perilaku pola yang berbeda lebih jelas. Ketika Anda menambahkan memori, Anda akan melihat perbedaannya dengan jelas. Ini membuat lebih mudah untuk memahami apa yang dibawa setiap komponen ke aplikasi Anda.
-Anda akan membangun satu aplikasi yang menunjukkan kedua pola:
+Anda akan membangun satu aplikasi yang menunjukkan kedua pola tersebut:
-**Obrolan Stateless** - Setiap permintaan bersifat independen. Model tidak mengingat pesan sebelumnya. Ini adalah pola yang Anda gunakan dalam quick start.
+**Chat Tanpa Status** - Setiap permintaan bersifat independen. Model tidak mengingat pesan sebelumnya. Ini adalah titik awal yang paling sederhana.
-**Percakapan Stateful** - Setiap permintaan menyertakan riwayat percakapan. Model menjaga konteks di beberapa giliran. Ini yang dibutuhkan oleh aplikasi produksi.
+**Percakapan Dengan Status** - Setiap permintaan mencakup riwayat percakapan. Model mempertahankan konteks di beberapa giliran. Ini yang dibutuhkan aplikasi produksi.
## Prasyarat
@@ -41,47 +41,47 @@ Anda akan membangun satu aplikasi yang menunjukkan kedua pola:
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
-> **Catatan:** Java, Maven, Azure CLI dan Azure Developer CLI (azd) sudah terpasang dalam devcontainer yang disediakan.
+> **Catatan:** Java, Maven, Azure CLI, dan Azure Developer CLI (azd) telah diinstal sebelumnya di devcontainer yang disediakan.
-> **Catatan:** Modul ini menggunakan GPT-5.2 di Azure OpenAI. Deployment dikonfigurasi otomatis melalui `azd up` - jangan ubah nama model di kode.
+> **Catatan:** Modul ini menggunakan GPT-5.2 di Azure OpenAI. Penyebaran dikonfigurasi secara otomatis melalui `azd up` - jangan ubah nama model di kode.
## Memahami Masalah Inti
-Model bahasa bersifat stateless. Setiap panggilan API independen. Jika Anda mengirim "Nama saya John" lalu tanya "Siapa nama saya?", model tidak tahu bahwa Anda baru saja memperkenalkan diri. Model memperlakukan setiap permintaan seolah-olah itu adalah percakapan pertama Anda.
+Model bahasa tidak memiliki status. Setiap panggilan API bersifat independen. Jika Anda mengirim "Nama saya John" dan kemudian bertanya "Siapa nama saya?", model tidak tahu Anda baru saja memperkenalkan diri. Model memperlakukan setiap permintaan seolah itu adalah percakapan pertama Anda.
-Ini cukup untuk Q&A sederhana tapi tidak berguna untuk aplikasi nyata. Bot layanan pelanggan perlu mengingat apa yang Anda katakan. Asisten pribadi perlu konteks. Setiap percakapan multi-giliran membutuhkan memori.
+Ini baik untuk tanya jawab sederhana tapi tidak berguna untuk aplikasi nyata. Bot layanan pelanggan perlu mengingat apa yang Anda bilang. Asisten pribadi perlu konteks. Percakapan multi-giliran memerlukan memori.
-Diagram berikut membandingkan dua pendekatan — di kiri, panggilan stateless yang lupa nama Anda; di kanan, panggilan stateful dengan ChatMemory yang mengingatnya.
+Diagram berikut membandingkan kedua pendekatan — di kiri, panggilan tanpa status yang melupakan nama Anda; di kanan, panggilan dengan status yang didukung oleh ChatMemory yang mengingatnya.
-
+
-*Perbedaan antara percakapan stateless (panggilan independen) dan stateful (memahami konteks)*
+*Perbedaan antara percakapan tanpa status (panggilan independen) dan dengan status (sadar konteks)*
## Memahami Token
-Sebelum masuk ke percakapan, penting untuk memahami token - unit teks dasar yang diproses model bahasa:
+Sebelum masuk ke percakapan, penting untuk memahami token - unit dasar teks yang diproses model bahasa:
-
+
-*Contoh bagaimana teks dipecah menjadi token - "I love AI!" menjadi 4 unit pemrosesan terpisah*
+*Contoh bagaimana teks dipecah menjadi token - "I love AI!" menjadi 4 unit proses terpisah*
-Token adalah cara model AI mengukur dan memproses teks. Kata, tanda baca, bahkan spasi bisa menjadi token. Model Anda memiliki batas berapa banyak token yang bisa diproses sekaligus (400.000 untuk GPT-5.2, dengan hingga 272.000 token input dan 128.000 token output). Memahami token membantu Anda mengatur panjang percakapan dan biaya.
+Token adalah cara model AI mengukur dan memproses teks. Kata, tanda baca, dan bahkan spasi bisa menjadi token. Model Anda memiliki batas berapa banyak token yang bisa diproses sekaligus (400.000 untuk GPT-5.2, dengan hingga 272.000 token input dan 128.000 token output). Memahami token membantu Anda mengelola panjang percakapan dan biaya.
## Cara Kerja Memori
-Chat memory menyelesaikan masalah stateless dengan menjaga riwayat percakapan. Sebelum mengirim permintaan ke model, framework menambahkan pesan sebelumnya yang relevan. Ketika Anda tanya "Siapa nama saya?", sistem sebenarnya mengirim seluruh riwayat percakapan, memungkinkan model melihat Anda sebelumnya berkata "Nama saya John."
+Memori chat memecahkan masalah tanpa status dengan mempertahankan riwayat percakapan. Sebelum mengirim permintaan ke model, kerangka kerja menyisipkan pesan relevan sebelumnya. Ketika Anda bertanya "Siapa nama saya?", sistem sebenarnya mengirim seluruh riwayat percakapan, memungkinkan model melihat bahwa Anda sebelumnya berkata "Nama saya John."
-LangChain4j menyediakan implementasi memori yang menangani ini secara otomatis. Anda memilih berapa banyak pesan yang disimpan dan framework mengelola jendela konteks. Diagram di bawah menunjukkan bagaimana MessageWindowChatMemory menjaga jendela geser pesan terbaru.
+LangChain4j menyediakan implementasi memori yang mengelola ini secara otomatis. Anda memilih berapa banyak pesan yang disimpan dan kerangka kerja mengatur jendela konteks. Diagram di bawah menunjukkan bagaimana MessageWindowChatMemory mempertahankan jendela geser dari pesan-pesan terbaru.
-
+
-*MessageWindowChatMemory menjaga jendela geser pesan terbaru, otomatis menghapus pesan lama*
+*MessageWindowChatMemory mempertahankan jendela geser dari pesan terbaru, secara otomatis menghapus pesan lama*
-## Cara Ini Menggunakan LangChain4j
+## Bagaimana Ini Menggunakan LangChain4j
-Modul ini memperluas quick start dengan mengintegrasikan Spring Boot dan menambahkan memori percakapan. Berikut cara komponennya bekerja sama:
+Modul ini mengintegrasikan Spring Boot dan menambahkan memori percakapan. Ini bagaimana komponennya saling melengkapi:
-**Dependencies** - Tambahkan dua pustaka LangChain4j:
+**Dependensi** - Tambahkan dua pustaka LangChain4j:
```xml
@@ -94,7 +94,7 @@ Modul ini memperluas quick start dengan mengintegrasikan Spring Boot dan menamba
```
-**Chat Model** - Konfigurasikan Azure OpenAI sebagai bean Spring ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+**Model Chat** - Konfigurasikan Azure OpenAI sebagai bean Spring ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -109,9 +109,9 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-Builder membaca kredensial dari variabel lingkungan yang diatur oleh `azd up`. Menetapkan `baseUrl` ke endpoint Azure Anda membuat klien OpenAI bekerja dengan Azure OpenAI.
+Builder membaca kredensial dari variabel lingkungan yang diatur oleh `azd up`. Mengatur `baseUrl` ke endpoint Azure Anda membuat klien OpenAI berfungsi dengan Azure OpenAI.
-**Memori Percakapan** - Melacak riwayat obrolan dengan MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
+**Memori Percakapan** - Melacak riwayat chat dengan MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -124,14 +124,14 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-Buat memori dengan `withMaxMessages(10)` untuk menyimpan 10 pesan terakhir. Tambahkan pesan pengguna dan AI dengan pembungkus tipe: `UserMessage.from(text)` dan `AiMessage.from(text)`. Ambil riwayat dengan `memory.messages()` dan kirimkan ke model. Service menyimpan instance memori terpisah per ID percakapan, memungkinkan banyak pengguna mengobrol secara bersamaan.
+Buat memori dengan `withMaxMessages(10)` untuk menyimpan 10 pesan terakhir. Tambahkan pesan pengguna dan AI dengan pembungkus bertipe: `UserMessage.from(text)` dan `AiMessage.from(text)`. Ambil riwayat dengan `memory.messages()` dan kirim ke model. Layanan menyimpan instansi memori terpisah per ID percakapan, memungkinkan banyak pengguna chat secara bersamaan.
-> **🤖 Coba dengan Chat [GitHub Copilot](https://github.com/features/copilot):** Buka [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) dan tanyakan:
-> - "Bagaimana MessageWindowChatMemory memutuskan pesan mana yang dihapus saat jendelanya penuh?"
-> - "Bisakah saya mengimplementasikan penyimpanan memori kustom menggunakan database daripada di memori?"
+> **🤖 Coba dengan [GitHub Copilot](https://github.com/features/copilot) Chat:** Buka [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) dan tanyakan:
+> - "Bagaimana MessageWindowChatMemory memutuskan pesan mana yang dihapus saat jendela penuh?"
+> - "Bisakah saya mengimplementasikan penyimpanan memori khusus menggunakan database daripada di memori?"
> - "Bagaimana saya menambahkan ringkasan untuk mengompres riwayat percakapan lama?"
-Endpoint obrolan stateless melewati memori sepenuhnya - hanya `chatModel.chat(prompt)` seperti quick start. Endpoint stateful menambahkan pesan ke memori, mengambil riwayat, dan menyertakan konteks itu di setiap permintaan. Konfigurasi model sama, pola berbeda.
+Endpoint chat tanpa status melewati memori sepenuhnya - hanya `chatModel.chat(prompt)` seperti pada awal cepat. Endpoint dengan status menambahkan pesan ke memori, mengambil riwayat, dan menyertakan konteks tersebut dengan setiap permintaan. Konfigurasi model sama, pola berbeda.
## Menerapkan Infrastruktur Azure OpenAI
@@ -144,23 +144,23 @@ azd up # Pilih langganan dan lokasi (eastus2 direkomendasikan)
**PowerShell:**
```powershell
cd 01-introduction
-azd up # Pilih langganan dan lokasi (disarankan eastus2)
+azd up # Pilih langganan dan lokasi (eastus2 direkomendasikan)
```
-> **Catatan:** Jika Anda menghadapi kesalahan timeout (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), cukup jalankan kembali `azd up`. Sumber daya Azure mungkin masih dalam proses penyediaan di latar belakang, dan mencoba lagi memungkinkan deployment selesai setelah sumber daya mencapai status terminal.
+> **Catatan:** Jika Anda mengalami kesalahan waktu habis (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), jalankan saja `azd up` lagi. Sumber daya Azure mungkin masih dalam proses penyediaan di latar belakang, dan mencoba ulang memungkinkan penyebaran selesai setelah sumber daya mencapai status terminal.
Ini akan:
1. Menerapkan sumber daya Azure OpenAI dengan model GPT-5.2 dan text-embedding-3-small
-2. Otomatis membuat file `.env` di root proyek dengan kredensial
+2. Secara otomatis menghasilkan file `.env` di root proyek dengan kredensial
3. Mengatur semua variabel lingkungan yang diperlukan
-**Mengalami masalah deployment?** Lihat [Infrastructure README](infra/README.md) untuk pemecahan masalah terperinci termasuk konflik nama subdomain, langkah manual deployment Azure Portal, dan panduan konfigurasi model.
+**Mengalami masalah penyebaran?** Lihat [README Infrastruktur](infra/README.md) untuk pemecahan masalah mendetail termasuk konflik nama subdomain, langkah penyebaran manual di Portal Azure, dan panduan konfigurasi model.
-**Verifikasi deployment berhasil:**
+**Verifikasi penyebaran berhasil:**
**Bash:**
```bash
-cat ../.env # Harus menampilkan AZURE_OPENAI_ENDPOINT, API_KEY, dll.
+cat ../.env # Harus menunjukkan AZURE_OPENAI_ENDPOINT, API_KEY, dll.
```
**PowerShell:**
@@ -168,7 +168,7 @@ cat ../.env # Harus menampilkan AZURE_OPENAI_ENDPOINT, API_KEY, dll.
Get-Content ..\.env # Harus menampilkan AZURE_OPENAI_ENDPOINT, API_KEY, dll.
```
-> **Catatan:** Perintah `azd up` otomatis menghasilkan file `.env`. Jika perlu memperbarui nanti, Anda dapat mengedit manual file `.env` atau membuat ulang dengan menjalankan:
+> **Catatan:** Perintah `azd up` secara otomatis menghasilkan file `.env`. Jika Anda perlu memperbaruinya nanti, Anda bisa mengedit file `.env` secara manual atau menghasilkannya ulang dengan menjalankan:
>
> **Bash:**
> ```bash
@@ -184,7 +184,7 @@ Get-Content ..\.env # Harus menampilkan AZURE_OPENAI_ENDPOINT, API_KEY, dll.
## Menjalankan Aplikasi Secara Lokal
-**Verifikasi deployment:**
+**Verifikasi penyebaran:**
Pastikan file `.env` ada di direktori root dengan kredensial Azure. Jalankan ini dari direktori modul (`01-introduction/`):
@@ -200,23 +200,23 @@ Get-Content ..\.env # Harus menunjukkan AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYM
**Mulai aplikasi:**
-**Pilihan 1: Menggunakan Spring Boot Dashboard (Direkomendasikan untuk pengguna VS Code)**
+**Opsi 1: Menggunakan Spring Boot Dashboard (Disarankan untuk pengguna VS Code)**
Dev container mencakup ekstensi Spring Boot Dashboard, yang menyediakan antarmuka visual untuk mengelola semua aplikasi Spring Boot. Anda dapat menemukannya di Bilah Aktivitas di sisi kiri VS Code (cari ikon Spring Boot).
Dari Spring Boot Dashboard, Anda dapat:
- Melihat semua aplikasi Spring Boot yang tersedia di workspace
-- Memulai/berhenti aplikasi dengan satu klik
+- Mulai/berhenti aplikasi dengan satu klik
- Melihat log aplikasi secara real-time
- Memantau status aplikasi
-Cukup klik tombol putar di samping "introduction" untuk memulai modul ini, atau mulai semua modul sekaligus.
+Cukup klik tombol main di sebelah "introduction" untuk memulai modul ini, atau mulai semua modul sekaligus.
*Spring Boot Dashboard di VS Code — mulai, hentikan, dan pantau semua modul dari satu tempat*
-**Pilihan 2: Menggunakan skrip shell**
+**Opsi 2: Menggunakan skrip shell**
Mulai semua aplikasi web (modul 01-04):
@@ -248,7 +248,7 @@ cd 01-introduction
Kedua skrip secara otomatis memuat variabel lingkungan dari file `.env` root dan akan membangun JAR jika belum ada.
-> **Catatan:** Jika Anda ingin membangun semua modul secara manual sebelum mulai:
+> **Catatan:** Jika Anda lebih suka membangun semua modul secara manual sebelum memulai:
>
> **Bash:**
> ```bash
@@ -262,49 +262,49 @@ Kedua skrip secara otomatis memuat variabel lingkungan dari file `.env` root dan
> mvn clean package -DskipTests
> ```
-Buka http://localhost:8080 di peramban Anda.
+Buka http://localhost:8080 di browser Anda.
-**Untuk berhenti:**
+**Untuk menghentikan:**
**Bash:**
```bash
-./stop.sh # Modul ini saja
+./stop.sh # Hanya modul ini
# Atau
cd .. && ./stop-all.sh # Semua modul
```
**PowerShell:**
```powershell
-.\stop.ps1 # Modul ini saja
+.\stop.ps1 # Hanya modul ini
# Atau
cd ..; .\stop-all.ps1 # Semua modul
```
## Menggunakan Aplikasi
-Aplikasi menyediakan antarmuka web dengan dua implementasi obrolan berdampingan.
+Aplikasi menyediakan antarmuka web dengan dua implementasi chat berdampingan.
-
+
-*Dashboard menampilkan opsi Simple Chat (stateless) dan Conversational Chat (stateful)*
+*Dashboard menunjukkan opsi Simple Chat (tanpa status) dan Conversational Chat (dengan status)*
-### Obrolan Stateless (Panel Kiri)
+### Chat Tanpa Status (Panel Kiri)
-Coba ini dulu. Tanyakan "Nama saya John" lalu langsung tanya "Siapa nama saya?" Model tidak akan mengingat karena setiap pesan bersifat independen. Ini menunjukkan masalah inti integrasi model bahasa dasar - tanpa konteks percakapan.
+Coba ini dulu. Tanyakan "Nama saya John" dan kemudian langsung tanya "Siapa nama saya?" Model tidak akan mengingat karena setiap pesan bersifat independen. Ini menunjukkan masalah inti dari integrasi model bahasa dasar - tidak ada konteks percakapan.
-
+
*AI tidak mengingat nama Anda dari pesan sebelumnya*
-### Obrolan Stateful (Panel Kanan)
+### Chat Dengan Status (Panel Kanan)
-Sekarang coba urutan yang sama di sini. Tanyakan "Nama saya John" lalu "Siapa nama saya?" Kali ini ia mengingatnya. Bedanya adalah MessageWindowChatMemory - ia menjaga riwayat percakapan dan menyertakannya dengan setiap permintaan. Inilah cara AI percakapan produksi bekerja.
+Sekarang coba urutan yang sama di sini. Tanyakan "Nama saya John" dan kemudian "Siapa nama saya?" Kali ini diingat. Bedanya adalah MessageWindowChatMemory - ini mempertahankan riwayat percakapan dan memasukkannya dengan setiap permintaan. Inilah cara kerja AI percakapan produksi.
-
+
-*AI mengingat nama Anda dari awal percakapan*
+*AI mengingat nama Anda dari percakapan sebelumnya*
-Kedua panel menggunakan model GPT-5.2 yang sama. Satu-satunya perbedaan adalah memori. Ini membuat jelas apa yang dibawa memori ke aplikasi Anda dan mengapa penting untuk kasus penggunaan nyata.
+Kedua panel menggunakan model GPT-5.2 yang sama. Satu-satunya perbedaan adalah memori. Ini membuat jelas apa yang dibawa memori ke aplikasi Anda dan mengapa itu penting untuk kasus penggunaan nyata.
## Langkah Selanjutnya
@@ -312,11 +312,11 @@ Kedua panel menggunakan model GPT-5.2 yang sama. Satu-satunya perbedaan adalah m
---
-**Navigasi:** [← Sebelumnya: Modul 00 - Quick Start](../00-quick-start/README.md) | [Kembali ke Utama](../README.md) | [Berikutnya: Modul 02 - Prompt Engineering →](../02-prompt-engineering/README.md)
+**Navigasi:** [← Kembali ke Utama](../README.md) | [Berikutnya: Modul 02 - Rekayasa Prompt →](../02-prompt-engineering/README.md)
---
-**Penafian**:
-Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai ketepatan, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sahih. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau tafsir yang timbul dari penggunaan terjemahan ini.
+**Penafian**:
+Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
\ No newline at end of file
diff --git a/translations/id/02-prompt-engineering/README.md b/translations/id/02-prompt-engineering/README.md
index 2845b85b2..919f922ad 100644
--- a/translations/id/02-prompt-engineering/README.md
+++ b/translations/id/02-prompt-engineering/README.md
@@ -2,80 +2,80 @@
## Daftar Isi
-- [Video Walkthrough](../../../02-prompt-engineering)
-- [Apa yang Akan Anda Pelajari](../../../02-prompt-engineering)
-- [Persyaratan Awal](../../../02-prompt-engineering)
-- [Memahami Rekayasa Prompt](../../../02-prompt-engineering)
-- [Dasar-Dasar Rekayasa Prompt](../../../02-prompt-engineering)
- - [Zero-Shot Prompting](../../../02-prompt-engineering)
- - [Few-Shot Prompting](../../../02-prompt-engineering)
- - [Chain of Thought](../../../02-prompt-engineering)
- - [Role-Based Prompting](../../../02-prompt-engineering)
- - [Template Prompt](../../../02-prompt-engineering)
-- [Pola Lanjutan](../../../02-prompt-engineering)
-- [Jalankan Aplikasi](../../../02-prompt-engineering)
-- [Cuplikan Aplikasi](../../../02-prompt-engineering)
-- [Menjelajah Pola](../../../02-prompt-engineering)
- - [Antusiasme Rendah vs Tinggi](../../../02-prompt-engineering)
- - [Eksekusi Tugas (Preambul Alat)](../../../02-prompt-engineering)
- - [Kode yang Merefleksikan Diri](../../../02-prompt-engineering)
- - [Analisis Terstruktur](../../../02-prompt-engineering)
- - [Chat Multi-Turn](../../../02-prompt-engineering)
- - [Penalaran Langkah-demi-Langkah](../../../02-prompt-engineering)
- - [Output Terbatas](../../../02-prompt-engineering)
-- [Apa yang Sebenarnya Anda Pelajari](../../../02-prompt-engineering)
-- [Langkah Selanjutnya](../../../02-prompt-engineering)
+- [Video Walkthrough](#video-walkthrough)
+- [Apa yang Akan Anda Pelajari](#apa-yang-akan-anda-pelajari)
+- [Prasyarat](#prasyarat)
+- [Memahami Rekayasa Prompt](#memahami-rekayasa-prompt)
+- [Dasar-dasar Rekayasa Prompt](#dasar-dasar-rekayasa-prompt)
+ - [Zero-Shot Prompting](#zero-shot-prompting)
+ - [Few-Shot Prompting](#few-shot-prompting)
+ - [Chain of Thought](#chain-of-thought)
+ - [Role-Based Prompting](#role-based-prompting)
+ - [Prompt Templates](#prompt-templates)
+- [Pola Lanjutan](#pola-lanjutan)
+- [Jalankan Aplikasi](#jalankan-aplikasi)
+- [Screenshot Aplikasi](#tangkapan-layar-aplikasi)
+- [Menjelajahi Pola-pola](#menjelajahi-pola)
+ - [Eagerness Rendah vs Tinggi](#low-vs-high-eagerness)
+ - [Eksekusi Tugas (Preambel Alat)](#task-execution-tool-preambles)
+ - [Kode Reflektif Diri](#self-reflecting-code)
+ - [Analisis Terstruktur](#structured-analysis)
+ - [Obrolan Multi-Turn](#multi-turn-chat)
+ - [Penalaran Langkah demi Langkah](#step-by-step-reasoning)
+ - [Output Terbatas](#constrained-output)
+- [Apa yang Sebenarnya Anda Pelajari](#apa-yang-sebenarnya-anda-pelajari)
+- [Langkah Berikutnya](#langkah-berikutnya)
## Video Walkthrough
-Tonton sesi langsung ini yang menjelaskan cara memulai dengan modul ini:
+Tonton sesi langsung ini yang menjelaskan bagaimana memulai dengan modul ini:
## Apa yang Akan Anda Pelajari
-Diagram berikut memberikan gambaran tentang topik utama dan keterampilan yang akan Anda kembangkan dalam modul ini — dari teknik penyempurnaan prompt hingga alur kerja langkah demi langkah yang akan Anda ikuti.
+Diagram berikut memberikan gambaran tentang topik dan keterampilan utama yang akan Anda kembangkan di modul ini — dari teknik penyempurnaan prompt hingga alur kerja langkah demi langkah yang akan Anda ikuti.
-
+
-Dalam modul sebelumnya, Anda menjelajahi interaksi dasar LangChain4j dengan Model GitHub dan melihat bagaimana memori memungkinkan AI percakapan dengan Azure OpenAI. Sekarang kita akan fokus pada bagaimana Anda mengajukan pertanyaan — prompt itu sendiri — menggunakan GPT-5.2 dari Azure OpenAI. Cara Anda menyusun prompt secara dramatis memengaruhi kualitas jawaban yang Anda dapatkan. Kami mulai dengan tinjauan teknik prompting dasar, lalu berlanjut ke delapan pola lanjutan yang memanfaatkan sepenuhnya kemampuan GPT-5.2.
+Di modul sebelumnya, Anda melihat bagaimana memori memungkinkan AI percakapan dengan Azure OpenAI. Sekarang kita akan fokus pada bagaimana Anda mengajukan pertanyaan — prompt itu sendiri — menggunakan GPT-5.2 dari Azure OpenAI. Cara Anda menyusun prompt sangat memengaruhi kualitas jawaban yang Anda dapatkan. Kita mulai dengan tinjauan teknik prompting dasar, lalu berlanjut ke delapan pola lanjutan yang memanfaatkan sepenuhnya kemampuan GPT-5.2.
-Kami menggunakan GPT-5.2 karena memperkenalkan kontrol penalaran - Anda dapat memberi tahu model seberapa banyak berpikir sebelum menjawab. Ini membuat berbagai strategi prompting menjadi lebih jelas dan membantu Anda memahami kapan menggunakan setiap pendekatan. Kami juga akan mendapat manfaat dari batasan rate lebih sedikit di Azure untuk GPT-5.2 dibandingkan Model GitHub.
+Kita akan menggunakan GPT-5.2 karena ia memperkenalkan kontrol penalaran - Anda dapat memberi tahu model seberapa banyak berpikir sebelum menjawab. Ini membuat berbagai strategi prompting lebih jelas dan membantu Anda memahami kapan menggunakan pendekatan yang mana.
-## Persyaratan Awal
+## Prasyarat
-- Menyelesaikan Modul 01 (sumber daya Azure OpenAI telah dideploy)
+- Telah menyelesaikan Modul 01 (sumber daya Azure OpenAI telah dideploy)
- File `.env` di direktori root dengan kredensial Azure (dibuat oleh `azd up` di Modul 01)
-> **Catatan:** Jika Anda belum menyelesaikan Modul 01, ikuti instruksi deployment di sana terlebih dahulu.
+> **Catatan:** Jika Anda belum menyelesaikan Modul 01, ikuti instruksi penyebaran di sana terlebih dahulu.
## Memahami Rekayasa Prompt
-Pada intinya, rekayasa prompt adalah perbedaan antara instruksi yang samar dan yang tepat, seperti yang ditunjukkan perbandingan di bawah ini.
+Pada dasarnya, rekayasa prompt adalah perbedaan antara instruksi yang samar dan yang spesifik, seperti yang diilustrasikan pada perbandingan di bawah ini.
-
+
-Rekayasa prompt adalah tentang merancang teks input yang secara konsisten memberikan hasil yang Anda butuhkan. Ini bukan hanya tentang mengajukan pertanyaan - ini tentang menyusun permintaan sehingga model memahami dengan tepat apa yang Anda inginkan dan bagaimana menyajikannya.
+Rekayasa prompt adalah tentang merancang teks input yang secara konsisten memberikan hasil yang Anda butuhkan. Ini bukan hanya tentang mengajukan pertanyaan - ini tentang menyusun permintaan agar model memahami dengan tepat apa yang Anda inginkan dan bagaimana cara menyampaikannya.
-Pikirkan seperti memberi instruksi kepada rekan kerja. "Perbaiki bug" itu samar. "Perbaiki null pointer exception di UserService.java baris 45 dengan menambahkan pengecekan null" itu spesifik. Model bahasa bekerja dengan cara yang sama — spesifikasi dan struktur sangat penting.
+Bayangkan seperti memberikan instruksi ke rekan kerja. "Perbaiki bug" itu samar. "Perbaiki null pointer exception di UserService.java baris 45 dengan menambahkan pengecekan null" itu spesifik. Model bahasa bekerja dengan cara yang sama - spesifik dan struktur sangat penting.
-Diagram di bawah menunjukkan bagaimana LangChain4j masuk ke dalam gambar ini — menghubungkan pola prompt Anda ke model melalui blok bangunan SystemMessage dan UserMessage.
+Diagram di bawah ini menunjukkan bagaimana LangChain4j masuk ke dalam gambar ini — menghubungkan pola prompt Anda ke model melalui blok bangunan SystemMessage dan UserMessage.
-
+
-LangChain4j menyediakan infrastruktur — koneksi model, memori, dan tipe pesan — sementara pola prompt hanyalah teks yang disusun dengan hati-hati yang Anda kirim melalui infrastruktur itu. Blok bangunan kunci adalah `SystemMessage` (yang mengatur perilaku dan peran AI) dan `UserMessage` (yang membawa permintaan Anda yang sebenarnya).
+LangChain4j menyediakan infrastruktur — koneksi model, memori, dan jenis pesan — sementara pola prompt hanyalah teks yang disusun dengan cermat yang Anda kirimkan melalui infrastruktur itu. Blok bangunan kunci adalah `SystemMessage` (yang mengatur perilaku dan peran AI) dan `UserMessage` (yang membawa permintaan Anda yang sebenarnya).
-## Dasar-Dasar Rekayasa Prompt
+## Dasar-dasar Rekayasa Prompt
-Lima teknik inti yang ditunjukkan di bawah ini membentuk fondasi rekayasa prompt yang efektif. Masing-masing menangani aspek berbeda dari bagaimana Anda berkomunikasi dengan model bahasa.
+Lima teknik inti yang ditunjukkan di bawah ini membentuk dasar rekayasa prompt yang efektif. Masing-masing menangani aspek berbeda dari cara Anda berkomunikasi dengan model bahasa.
-
+
-Sebelum menyelami pola-pola lanjutan dalam modul ini, mari tinjau kembali lima teknik prompting dasar. Ini adalah blok bangunan yang harus diketahui setiap insinyur prompt. Jika Anda sudah mengerjakan [modul Quick Start](../00-quick-start/README.md#2-prompt-patterns), Anda sudah melihat ini dalam praktik — di sini kerangka konseptual di baliknya.
+Sebelum menyelami pola-pola lanjutan di modul ini, mari kita tinjau lima teknik prompting dasar. Ini adalah blok bangunan yang harus diketahui setiap insinyur prompt.
### Zero-Shot Prompting
-Pendekatan paling sederhana: beri instruksi langsung ke model tanpa contoh. Model sepenuhnya mengandalkan pelatihannya untuk memahami dan menjalankan tugas. Ini bekerja baik untuk permintaan yang langsung di mana perilaku yang diharapkan jelas.
+Pendekatan paling sederhana: berikan model instruksi langsung tanpa contoh. Model sepenuhnya mengandalkan pelatihannya untuk memahami dan menjalankan tugas tersebut. Ini bekerja baik untuk permintaan yang langsung di mana perilaku yang diharapkan jelas.
@@ -84,18 +84,18 @@ Pendekatan paling sederhana: beri instruksi langsung ke model tanpa contoh. Mode
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
String response = model.chat(prompt);
-// Respon: "Positif"
+// Respons: "Positif"
```
**Kapan digunakan:** Klasifikasi sederhana, pertanyaan langsung, terjemahan, atau tugas apa pun yang dapat ditangani model tanpa panduan tambahan.
### Few-Shot Prompting
-Berikan contoh yang menunjukkan pola yang ingin Anda model ikuti. Model belajar format input-output yang diharapkan dari contoh Anda dan menerapkannya ke input baru. Ini secara dramatis meningkatkan konsistensi untuk tugas di mana format atau perilaku yang diinginkan tidak jelas.
+Berikan contoh-contoh yang menunjukkan pola yang Anda ingin model ikuti. Model belajar format input-output yang diharapkan dari contoh Anda dan menerapkannya ke input baru. Ini secara dramatis meningkatkan konsistensi untuk tugas yang format atau perilakunya tidak jelas.
-*Belajar dari contoh — model mengidentifikasi pola dan menerapkannya pada input baru*
+*Belajar dari contoh — model mengidentifikasi pola dan menerapkannya ke input baru*
```java
String prompt = """
@@ -112,15 +112,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Kapan digunakan:** Klasifikasi khusus, format yang konsisten, tugas domain-spesifik, atau ketika hasil zero-shot tidak konsisten.
+**Kapan digunakan:** Klasifikasi khusus, format konsisten, tugas spesifik domain, atau ketika hasil zero-shot tidak konsisten.
### Chain of Thought
-Minta model menunjukkan penalarannya langkah demi langkah. Alih-alih langsung menuju jawaban, model memecah masalah dan mengerjakan setiap bagian secara eksplisit. Ini meningkatkan akurasi pada tugas matematika, logika, dan penalaran bertahap.
+Minta model menunjukkan penalarannya langkah demi langkah. Alih-alih langsung memberikan jawaban, model memecah masalah dan mengerjakan setiap bagian secara eksplisit. Ini meningkatkan akurasi pada masalah matematika, logika, dan penalaran multi-langkah.
-*Penalaran langkah demi langkah — memecah masalah kompleks menjadi langkah logis eksplisit*
+*Penalaran langkah demi langkah — memecah masalah kompleks menjadi langkah logis yang eksplisit*
```java
String prompt = """
@@ -137,11 +137,11 @@ String response = model.chat(prompt);
### Role-Based Prompting
-Tetapkan persona atau peran untuk AI sebelum Anda mengajukan pertanyaan. Ini memberikan konteks yang membentuk nada, kedalaman, dan fokus respons. "Arsitek perangkat lunak" memberikan saran berbeda dari "pengembang junior" atau "auditor keamanan".
+Tetapkan persona atau peran untuk AI sebelum mengajukan pertanyaan Anda. Ini memberikan konteks yang membentuk nada, kedalaman, dan fokus jawaban. "Arsitek perangkat lunak" memberikan nasihat berbeda dari "pengembang junior" atau "auditor keamanan".
-*Menetapkan konteks dan persona — pertanyaan yang sama mendapat respons berbeda tergantung peran yang ditugaskan*
+*Menetapkan konteks dan persona — pertanyaan yang sama mendapat jawaban berbeda tergantung pada peran yang diberikan*
```java
String prompt = """
@@ -157,13 +157,13 @@ String prompt = """
String response = model.chat(prompt);
```
-**Kapan digunakan:** Review kode, pengajaran, analisis domain-spesifik, atau saat Anda membutuhkan respons yang disesuaikan dengan tingkat keahlian atau perspektif tertentu.
+**Kapan digunakan:** Review kode, pengajaran, analisis spesifik domain, atau saat Anda membutuhkan jawaban yang disesuaikan dengan tingkat keahlian atau perspektif tertentu.
### Prompt Templates
-Membuat prompt yang dapat digunakan ulang dengan placeholder variabel. Alih-alih menulis prompt baru setiap kali, definisikan template sekali dan isi dengan nilai berbeda. Kelas `PromptTemplate` di LangChain4j memudahkan ini dengan sintaks `{{variable}}`.
+Buat prompt yang dapat digunakan ulang dengan placeholder variabel. Alih-alih menulis prompt baru setiap kali, definisikan template sekali dan isi dengan nilai berbeda. Kelas `PromptTemplate` dari LangChain4j memudahkan ini dengan sintaks `{{variable}}`.
-
+
*Prompt yang dapat digunakan ulang dengan placeholder variabel — satu template, banyak penggunaan*
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**Kapan digunakan:** Query berulang dengan input yang berbeda, pemrosesan batch, membangun alur kerja AI yang dapat digunakan ulang, atau skenario apa pun di mana struktur prompt tetap sama tapi data berubah.
+**Kapan digunakan:** Pertanyaan berulang dengan input berbeda, pemrosesan batch, membangun workflow AI yang dapat digunakan ulang, atau skenario apa pun di mana struktur prompt tetap sama tetapi datanya berubah.
---
-Lima dasar ini memberi Anda toolkit solid untuk sebagian besar tugas prompting. Sisanya dari modul ini membangun di atasnya dengan **delapan pola lanjutan** yang memanfaatkan kontrol penalaran, evaluasi mandiri, dan kemampuan output terstruktur GPT-5.2.
+Lima dasar ini memberi Anda alat yang kuat untuk sebagian besar tugas prompting. Sisa modul ini membangun di atasnya dengan **delapan pola lanjutan** yang memanfaatkan kontrol penalaran, evaluasi diri, dan kemampuan output terstruktur GPT-5.2.
## Pola Lanjutan
-Dengan dasar-dasar telah dibahas, mari kita beralih ke delapan pola lanjutan yang menjadikan modul ini unik. Tidak semua masalah membutuhkan pendekatan yang sama. Beberapa pertanyaan membutuhkan jawaban cepat, lainnya butuh pemikiran mendalam. Ada yang butuh penalaran yang terlihat, ada juga yang hanya butuh hasil. Setiap pola di bawah dioptimalkan untuk skenario berbeda — dan kontrol penalaran GPT-5.2 membuat perbedaan ini semakin jelas.
+Setelah memahami dasar, mari beralih ke delapan pola lanjutan yang membuat modul ini unik. Tidak semua masalah memerlukan pendekatan yang sama. Beberapa pertanyaan perlu jawaban cepat, beberapa perlu pemikiran mendalam. Ada yang perlu penalaran yang terlihat, ada yang hanya perlu hasil. Setiap pola di bawah ini dioptimalkan untuk skenario berbeda — dan kontrol penalaran GPT-5.2 membuat perbedaan itu semakin nyata.
-
+
-*Ikhtisar delapan pola rekayasa prompt dan kasus penggunaannya*
+*Gambaran delapan pola rekayasa prompt dan kasus penggunaannya*
-GPT-5.2 menambahkan dimensi lain ke pola-pola ini: *kontrol penalaran*. Penggeser di bawah ini menunjukkan bagaimana Anda bisa mengatur tingkat berpikir model — dari jawaban cepat dan langsung sampai analisis yang mendalam dan menyeluruh.
+GPT-5.2 menambahkan dimensi lain ke pola-pola ini: *kontrol penalaran*. Slider di bawah ini menunjukkan bagaimana Anda dapat menyesuaikan usaha berpikir model — dari jawaban cepat dan langsung hingga analisis mendalam dan menyeluruh.
-
+
-*Kontrol penalaran GPT-5.2 memungkinkan Anda menentukan seberapa banyak model harus berpikir — dari jawaban cepat hingga eksplorasi mendalam*
+*Kontrol penalaran GPT-5.2 memungkinkan Anda menentukan seberapa banyak model harus berpikir — dari jawaban cepat langsung hingga eksplorasi yang mendalam*
-**Antusiasme Rendah (Cepat & Fokus)** - Untuk pertanyaan sederhana di mana Anda ingin jawaban yang cepat dan langsung. Model melakukan penalaran minimal - maksimum 2 langkah. Gunakan ini untuk perhitungan, pencarian, atau pertanyaan langsung.
+**Eagerness Rendah (Cepat & Fokus)** - Untuk pertanyaan sederhana di mana Anda menginginkan jawaban cepat dan langsung. Model melakukan penalaran minimal - maksimum 2 langkah. Gunakan ini untuk perhitungan, pencarian, atau pertanyaan yang langsung.
```java
String prompt = """
@@ -220,11 +220,11 @@ String response = chatModel.chat(prompt);
```
> 💡 **Jelajahi dengan GitHub Copilot:** Buka [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) dan tanyakan:
-> - "Apa perbedaan antara pola prompting antusiasme rendah dan tinggi?"
-> - "Bagaimana tag XML dalam prompt membantu menyusun respons AI?"
+> - "Apa perbedaan antara pola eagerness rendah dan eagerness tinggi?"
+> - "Bagaimana tag XML dalam prompt membantu menyusun jawaban AI?"
> - "Kapan saya harus menggunakan pola refleksi diri vs instruksi langsung?"
-**Antusiasme Tinggi (Mendalam & Menyeluruh)** - Untuk masalah kompleks di mana Anda ingin analisis yang komprehensif. Model menjelajah dengan menyeluruh dan menunjukkan penalaran rinci. Gunakan ini untuk desain sistem, keputusan arsitektur, atau riset kompleks.
+**Eagerness Tinggi (Mendalam & Menyeluruh)** - Untuk masalah kompleks di mana Anda menginginkan analisis komprehensif. Model mengeksplorasi secara menyeluruh dan menunjukkan penalaran terperinci. Gunakan ini untuk desain sistem, keputusan arsitektur, atau riset kompleks.
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**Eksekusi Tugas (Kemajuan Langkah-demi-Langkah)** - Untuk alur kerja multi-langkah. Model menyediakan rencana awal, menceritakan setiap langkah saat dikerjakan, lalu memberi ringkasan. Gunakan ini untuk migrasi, implementasi, atau proses multi-langkah apa pun.
+**Eksekusi Tugas (Kemajuan Langkah demi Langkah)** - Untuk alur kerja multi-langkah. Model memberikan rencana di awal, menjelaskan setiap langkah saat bekerja, lalu memberi ringkasan. Gunakan ini untuk migrasi, implementasi, atau proses multi-langkah apa pun.
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Prompting Chain-of-Thought secara eksplisit meminta model untuk menunjukkan proses penalarannya, meningkatkan akurasi untuk tugas kompleks. Pemecahan langkah demi langkah membantu manusia dan AI memahami logika.
+Chain-of-Thought prompting secara eksplisit meminta model menunjukkan proses penalarannya, meningkatkan akurasi untuk tugas kompleks. Pemecahan langkah demi langkah membantu manusia dan AI memahami logika.
-> **🤖 Coba dengan Chat [GitHub Copilot](https://github.com/features/copilot):** Tanyakan tentang pola ini:
-> - "Bagaimana saya mengadaptasi pola eksekusi tugas untuk operasi jangka panjang?"
-> - "Apa praktik terbaik untuk menyusun preambul alat di aplikasi produksi?"
-> - "Bagaimana cara menangkap dan menampilkan pembaruan kemajuan perantara di UI?"
+> **🤖 Coba dengan Obrolan [GitHub Copilot](https://github.com/features/copilot):** Tanyakan tentang pola ini:
+> - "Bagaimana saya menyesuaikan pola eksekusi tugas untuk operasi yang berjalan lama?"
+> - "Apa praktik terbaik untuk menyusun preambel alat dalam aplikasi produksi?"
+> - "Bagaimana cara menangkap dan menampilkan pembaruan kemajuan antara dalam UI?"
-Diagram berikut mengilustrasikan alur kerja Rencana → Eksekusi → Ringkasan ini.
+Diagram di bawah ini menggambarkan alur kerja Plan → Execute → Summarize ini.
-
+
-*Alur kerja Rencana → Eksekusi → Ringkasan untuk tugas multi-langkah*
+*Alur kerja Plan → Execute → Summarize untuk tugas multi-langkah*
-**Kode yang Merefleksikan Diri** - Untuk menghasilkan kode berkualitas produksi. Model menghasilkan kode mengikuti standar produksi dengan penanganan kesalahan yang tepat. Gunakan ini saat membangun fitur atau layanan baru.
+**Kode Reflektif Diri** - Untuk menghasilkan kode berkualitas produksi. Model menghasilkan kode sesuai standar produksi dengan penanganan kesalahan yang sesuai. Gunakan ini saat membangun fitur atau layanan baru.
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Diagram berikut menunjukkan siklus perbaikan iteratif ini — menghasilkan, mengevaluasi, mengidentifikasi kelemahan, dan menyempurnakan sampai kode memenuhi standar produksi.
+Diagram di bawah ini menunjukkan siklus perbaikan iteratif — menghasilkan, mengevaluasi, mengidentifikasi kelemahan, dan menyempurnakan sampai kode memenuhi standar produksi.
-
+
-*Siklus perbaikan iteratif - hasilkan, evaluasi, identifikasi masalah, perbaiki, ulangi*
+*Siklus perbaikan iteratif - menghasilkan, mengevaluasi, identifikasi masalah, perbaiki, ulangi*
-**Analisis Terstruktur** - Untuk evaluasi yang konsisten. Model meninjau kode menggunakan kerangka kerja tetap (kebenaran, praktik, kinerja, keamanan, pemeliharaan). Gunakan ini untuk review kode atau penilaian kualitas.
+**Analisis Terstruktur** - Untuk evaluasi yang konsisten. Model meninjau kode menggunakan kerangka kerja tetap (kebenaran, praktik, performa, keamanan, pemeliharaan). Gunakan ini untuk review kode atau penilaian kualitas.
```java
String prompt = """
@@ -354,18 +354,18 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> **🤖 Coba dengan Chat [GitHub Copilot](https://github.com/features/copilot):** Tanyakan tentang analisis terstruktur:
-> - "Bagaimana saya dapat menyesuaikan kerangka analisis untuk berbagai jenis review kode?"
-> - "Apa cara terbaik mengurai dan memproses output terstruktur secara programatik?"
-> - "Bagaimana memastikan tingkat keparahan yang konsisten di berbagai sesi review?"
+> **🤖 Coba dengan Obrolan [GitHub Copilot](https://github.com/features/copilot):** Tanyakan tentang analisis terstruktur:
+> - "Bagaimana saya dapat menyesuaikan kerangka analisis untuk jenis review kode yang berbeda?"
+> - "Apa cara terbaik untuk mengurai dan menangani output terstruktur secara programatik?"
+> - "Bagaimana saya memastikan tingkat keparahan konsisten di berbagai sesi review?"
-Diagram berikut menunjukkan bagaimana kerangka terstruktur ini mengorganisasi review kode ke dalam kategori konsisten dengan tingkat keparahan.
+Diagram berikut menunjukkan bagaimana kerangka kerja terstruktur ini mengorganisasikan review kode ke dalam kategori konsisten dengan tingkat keparahan.
-
+
-*Kerangka kerja untuk review kode konsisten dengan tingkat keparahan*
+*Kerangka kerja untuk review kode yang konsisten dengan tingkat keparahan*
-**Chat Multi-Turn** - Untuk percakapan yang membutuhkan konteks. Model mengingat pesan sebelumnya dan membangun dari sana. Gunakan ini untuk sesi bantuan interaktif atau tanya jawab kompleks.
+**Obrolan Multi-Turn** - Untuk percakapan yang membutuhkan konteks. Model mengingat pesan sebelumnya dan membangun dari situ. Gunakan ini untuk sesi bantuan interaktif atau tanya jawab kompleks.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-Diagram berikut memvisualisasikan bagaimana konteks percakapan terakumulasi dengan setiap giliran dan bagaimana itu terkait dengan batas token model.
+Diagram di bawah memvisualisasikan bagaimana konteks percakapan terkumpul dengan setiap giliran dan bagaimana hal itu terkait dengan batas token model.
-
+
-*Bagaimana konteks percakapan terkumpul selama beberapa giliran sampai mencapai batas token*
-**Penalaran Langkah demi Langkah** - Untuk masalah yang memerlukan logika yang terlihat. Model menunjukkan penalaran eksplisit untuk setiap langkah. Gunakan ini untuk masalah matematika, teka-teki logika, atau ketika Anda perlu memahami proses pemikiran.
+*Bagaimana konteks percakapan terkumpul selama beberapa giliran hingga mencapai batas token*
+
+**Penalaran Langkah demi Langkah** - Untuk masalah yang memerlukan logika yang terlihat. Model menunjukkan penalaran eksplisit untuk setiap langkah. Gunakan ini untuk masalah matematika, teka-teki logika, atau saat Anda perlu memahami proses pemikiran.
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Diagram di bawah ini menggambarkan bagaimana model memecah masalah menjadi langkah-langkah logis yang eksplisit dan bernomor.
+Diagram di bawah ini mengilustrasikan bagaimana model memecah masalah menjadi langkah logis bernomor yang eksplisit.
-
*Memecah masalah menjadi langkah-langkah logis yang eksplisit*
-**Output Terbatas** - Untuk respons dengan persyaratan format tertentu. Model mengikuti aturan format dan panjang secara ketat. Gunakan ini untuk ringkasan atau ketika Anda memerlukan struktur output yang tepat.
+**Output Terbatas** - Untuk respons dengan persyaratan format tertentu. Model secara ketat mengikuti aturan format dan panjang. Gunakan ini untuk ringkasan atau saat Anda membutuhkan struktur output yang tepat.
```java
String prompt = """
@@ -420,11 +420,11 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Diagram berikut menunjukkan bagaimana batasan membimbing model untuk menghasilkan output yang benar-benar mengikuti format dan persyaratan panjang Anda.
+Diagram berikut menunjukkan bagaimana batasan membimbing model untuk menghasilkan output yang secara ketat mematuhi persyaratan format dan panjang Anda.
-
+
-*Menegakkan persyaratan format, panjang, dan struktur tertentu*
+*Memaksakan persyaratan format, panjang, dan struktur tertentu*
## Jalankan Aplikasi
@@ -444,19 +444,19 @@ Get-Content ..\.env # Harus menampilkan AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYM
**Mulai aplikasi:**
-> **Catatan:** Jika Anda sudah memulai semua aplikasi menggunakan `./start-all.sh` dari direktori root (seperti yang dijelaskan di Modul 01), modul ini sudah berjalan di port 8083. Anda dapat melewati perintah mulai di bawah dan langsung buka http://localhost:8083.
+> **Catatan:** Jika Anda sudah memulai semua aplikasi menggunakan `./start-all.sh` dari direktori root (seperti yang dijelaskan di Modul 01), modul ini sudah berjalan di port 8083. Anda dapat melewati perintah mulai di bawah dan langsung menuju http://localhost:8083.
-**Opsi 1: Menggunakan Spring Boot Dashboard (Disarankan untuk pengguna VS Code)**
+**Opsi 1: Menggunakan Spring Boot Dashboard (Direkomendasikan untuk pengguna VS Code)**
-Dev container sudah termasuk ekstensi Spring Boot Dashboard, yang menyediakan antarmuka visual untuk mengelola semua aplikasi Spring Boot. Anda dapat menemukannya di Activity Bar di sisi kiri VS Code (cari ikon Spring Boot).
+Kontainer dev sudah menyertakan ekstensi Spring Boot Dashboard, yang menyediakan antarmuka visual untuk mengelola semua aplikasi Spring Boot. Anda dapat menemukannya di Activity Bar di sisi kiri VS Code (cari ikon Spring Boot).
Dari Spring Boot Dashboard, Anda dapat:
- Melihat semua aplikasi Spring Boot yang tersedia di workspace
-- Memulai/berhenti aplikasi dengan satu klik
+- Memulai/mengehentikan aplikasi dengan satu klik
- Melihat log aplikasi secara real-time
- Memantau status aplikasi
-Cukup klik tombol play di sebelah "prompt-engineering" untuk memulai modul ini, atau mulai semua modul sekaligus.
+Cukup klik tombol play di samping "prompt-engineering" untuk memulai modul ini, atau mulai semua modul sekaligus.
@@ -514,7 +514,7 @@ Buka http://localhost:8083 di browser Anda.
**Bash:**
```bash
-./stop.sh # Hanya modul ini
+./stop.sh # Modul ini saja
# Atau
cd .. && ./stop-all.sh # Semua modul
```
@@ -528,81 +528,81 @@ cd ..; .\stop-all.ps1 # Semua modul
## Tangkapan Layar Aplikasi
-Berikut adalah antarmuka utama modul rekayasa prompt, di mana Anda dapat bereksperimen dengan kedelapan pola secara berdampingan.
+Berikut adalah antarmuka utama modul rekayasa prompt, tempat Anda dapat bereksperimen dengan delapan pola secara berdampingan.
-
+
-*Dashboard utama yang menunjukkan semua 8 pola rekayasa prompt beserta karakteristik dan kasus penggunaannya*
+*Dashboard utama menampilkan semua 8 pola rekayasa prompt dengan karakteristik dan kasus penggunaannya*
## Menjelajahi Pola
-Antarmuka web memungkinkan Anda bereksperimen dengan berbagai strategi prompt. Setiap pola menyelesaikan masalah yang berbeda - coba untuk melihat kapan setiap pendekatan bersinar.
+Antarmuka web memungkinkan Anda bereksperimen dengan berbagai strategi prompt. Setiap pola memecahkan masalah berbeda - coba untuk melihat kapan tiap pendekatan efektif.
-> **Catatan: Streaming vs Non-Streaming** — Setiap halaman pola menawarkan dua tombol: **🔴 Stream Response (Live)** dan opsi **Non-streaming**. Streaming menggunakan Server-Sent Events (SSE) untuk menampilkan token secara real-time saat model menghasilkannya, sehingga Anda melihat progres langsung. Opsi non-streaming menunggu seluruh respons selesai baru menampilkannya. Untuk prompt yang memicu penalaran mendalam (misalnya, High Eagerness, Self-Reflecting Code), panggilan non-streaming dapat memakan waktu sangat lama — kadang menit — tanpa umpan balik yang terlihat. **Gunakan streaming saat bereksperimen dengan prompt kompleks** agar Anda dapat melihat model bekerja dan menghindari kesan bahwa permintaan kadaluwarsa.
+> **Catatan: Streaming vs Non-Streaming** — Setiap halaman pola menawarkan dua tombol: **🔴 Stream Response (Live)** dan opsi **Non-streaming**. Streaming menggunakan Server-Sent Events (SSE) untuk menampilkan token secara real-time saat model menghasilkan, sehingga Anda melihat kemajuan segera. Opsi non-streaming menunggu seluruh respons sebelum menampilkannya. Untuk prompt yang memicu penalaran mendalam (misal, High Eagerness, Self-Reflecting Code), panggilan non-streaming bisa memakan waktu lama — terkadang menit — tanpa umpan balik terlihat. **Gunakan streaming saat bereksperimen dengan prompt kompleks** agar Anda bisa melihat model bekerja dan menghindari kesan request timeout.
>
-> **Catatan: Persyaratan Browser** — Fitur streaming menggunakan Fetch Streams API (`response.body.getReader()`) yang memerlukan browser penuh (Chrome, Edge, Firefox, Safari). Ini **tidak** berfungsi di Simple Browser bawaan VS Code, karena webview-nya tidak mendukung API ReadableStream. Jika Anda menggunakan Simple Browser, tombol non-streaming tetap berfungsi normal — hanya tombol streaming yang terpengaruh. Buka `http://localhost:8083` di browser eksternal untuk pengalaman penuh.
+> **Catatan: Kebutuhan Browser** — Fitur streaming menggunakan Fetch Streams API (`response.body.getReader()`) yang membutuhkan browser penuh (Chrome, Edge, Firefox, Safari). Fitur ini **tidak** bekerja di Simple Browser bawaan VS Code, karena webview-nya tidak mendukung ReadableStream API. Jika menggunakan Simple Browser, tombol non-streaming tetap bekerja normal — hanya tombol streaming yang terpengaruh. Buka `http://localhost:8083` di browser eksternal untuk pengalaman lengkap.
### Low vs High Eagerness
-Tanyakan pertanyaan sederhana seperti "Berapa 15% dari 200?" menggunakan Low Eagerness. Anda akan mendapatkan jawaban langsung dan instan. Sekarang tanyakan sesuatu yang kompleks seperti "Rancang strategi caching untuk API dengan trafik tinggi" menggunakan High Eagerness. Klik **🔴 Stream Response (Live)** dan lihat penalaran rinci model muncul token demi token. Model sama, struktur pertanyaan sama - tetapi prompt memberi tahu seberapa banyak pemikiran yang harus dilakukan.
+Tanyakan pertanyaan sederhana seperti "What is 15% of 200?" menggunakan Low Eagerness. Anda akan mendapatkan jawaban langsung dan cepat. Sekarang tanyakan hal rumit seperti "Design a caching strategy for a high-traffic API" menggunakan High Eagerness. Klik **🔴 Stream Response (Live)** dan saksikan penalaran rinci model muncul token demi token. Model sama, struktur pertanyaan sama - tapi prompt memberi tahu seberapa banyak pemikiran yang harus dilakukan.
-### Pelaksanaan Tugas (Tool Preambles)
+### Task Execution (Tool Preambles)
-Workflow multi-langkah mendapat manfaat dari perencanaan awal dan narasi kemajuan. Model menguraikan apa yang akan dilakukan, menceritakan tiap langkah, lalu merangkum hasil.
+Alur kerja multi-langkah mendapat manfaat dari perencanaan awal dan penceritaan kemajuan. Model menguraikan apa yang akan dilakukan, menceritakan setiap langkah, lalu merangkum hasil.
### Self-Reflecting Code
-Coba "Buat layanan validasi email". Alih-alih hanya menghasilkan kode dan berhenti, model menghasilkan, mengevaluasi berdasarkan kriteria kualitas, mengidentifikasi kelemahan, dan memperbaiki. Anda akan melihat iterasi hingga kode memenuhi standar produksi.
+Coba "Create an email validation service". Alih-alih hanya menghasilkan kode dan berhenti, model menghasilkan, mengevaluasi berdasarkan kriteria kualitas, mengidentifikasi kelemahan, dan memperbaiki. Anda akan melihat iterasi hingga kode memenuhi standar produksi.
-### Analisis Terstruktur
+### Structured Analysis
Review kode membutuhkan kerangka evaluasi yang konsisten. Model menganalisis kode menggunakan kategori tetap (kebenaran, praktik, performa, keamanan) dengan tingkat keparahan.
### Multi-Turn Chat
-Tanyakan "Apa itu Spring Boot?" kemudian langsung lanjutkan dengan "Tunjukkan contoh". Model mengingat pertanyaan pertama Anda dan memberi contoh Spring Boot yang spesifik. Tanpa memori, pertanyaan kedua akan terlalu ambigu.
+Tanyakan "What is Spring Boot?" lalu segera tindak lanjuti dengan "Show me an example". Model mengingat pertanyaan pertama dan memberikan contoh Spring Boot khusus. Tanpa memori, pertanyaan kedua terlalu ambigu.
-### Penalaran Langkah demi Langkah
+### Step-by-Step Reasoning
-Pilih masalah matematika dan coba dengan Penalaran Langkah demi Langkah dan Low Eagerness. Low eagerness hanya memberi jawaban - cepat tapi buram. Penalaran langkah demi langkah menunjukkan setiap perhitungan dan keputusan.
+Pilih masalah matematika dan coba dengan Step-by-Step Reasoning dan Low Eagerness. Low eagerness hanya memberi jawaban - cepat tapi tidak transparan. Langkah demi langkah menunjukkan setiap perhitungan dan keputusan.
-### Output Terbatas
+### Constrained Output
-Saat Anda membutuhkan format atau jumlah kata tertentu, pola ini menegakkan kepatuhan ketat. Coba menghasilkan ringkasan dengan tepat 100 kata dalam format poin-poin.
+Saat Anda membutuhkan format atau jumlah kata tertentu, pola ini menegakkan kepatuhan ketat. Coba buat ringkasan dengan tepat 100 kata dalam format poin-poin.
## Apa yang Sebenarnya Anda Pelajari
-**Upaya Penalaran Mengubah Segalanya**
+**Usaha Penalaran Mengubah Segalanya**
-GPT-5.2 memungkinkan Anda mengontrol upaya komputasi lewat prompt Anda. Upaya rendah berarti respons cepat dengan eksplorasi minimal. Upaya tinggi berarti model mengambil waktu untuk berpikir mendalam. Anda belajar mencocokkan upaya dengan kompleksitas tugas - jangan membuang waktu untuk pertanyaan sederhana, tapi juga jangan terburu-buru pada keputusan kompleks.
+GPT-5.2 memungkinkan Anda mengontrol usaha komputasi lewat prompt. Usaha rendah berarti respons cepat dengan eksplorasi minimal. Usaha tinggi berarti model meluangkan waktu untuk berpikir mendalam. Anda belajar mencocokkan usaha dengan kompleksitas tugas - jangan buang waktu untuk pertanyaan sederhana, tapi jangan terburu-buru pada keputusan rumit.
**Struktur Membimbing Perilaku**
-Perhatikan tag XML di dalam prompt? Mereka bukan hiasan. Model mengikuti instruksi terstruktur lebih andal daripada teks bebas. Saat Anda membutuhkan proses multi-langkah atau logika kompleks, struktur membantu model melacak posisinya dan tahap selanjutnya. Diagram di bawah memecah prompt yang terstruktur dengan baik, menunjukkan bagaimana tag seperti ``, ``, ``, ``, dan `` mengatur instruksi Anda ke dalam bagian yang jelas.
+Perhatikan tag XML dalam prompt? Mereka bukan hiasan. Model mengikuti instruksi terstruktur lebih dapat diandalkan daripada teks bebas. Saat Anda butuh proses multi-langkah atau logika kompleks, struktur membantu model melacak posisi dan langkah selanjutnya. Diagram di bawah memecah prompt terstruktur dengan tag seperti ``, ``, ``, ``, dan `` yang mengorganisasi instruksi Anda menjadi bagian jelas.
-
+
-*Anatomi prompt yang terstruktur dengan bagian yang jelas dan organisasi bergaya XML*
+*Anatomi prompt terstruktur dengan bagian jelas dan organisasi gaya XML*
**Kualitas Melalui Evaluasi Diri**
-Pola self-reflecting bekerja dengan membuat kriteria kualitas eksplisit. Alih-alih berharap model "melakukannya dengan benar", Anda memberi tahu secara tepat apa arti "benar": logika benar, penanganan error, performa, keamanan. Model kemudian dapat mengevaluasi outputnya sendiri dan memperbaiki. Ini mengubah pembuatan kode dari lotere menjadi proses.
+Pola self-reflecting bekerja dengan membuat kriteria kualitas eksplisit. Alih-alih berharap model "melakukannya dengan benar", Anda memberitahu persis apa arti "benar": logika benar, penanganan error, performa, keamanan. Model kemudian bisa mengevaluasi output sendiri dan memperbaiki. Ini mengubah pembuatan kode dari keberuntungan menjadi proses.
**Konteks Itu Terbatas**
-Percakapan multi-putar bekerja dengan menyertakan riwayat pesan dalam tiap permintaan. Tapi ada batasnya - setiap model memiliki jumlah token maksimum. Saat percakapan bertambah, Anda memerlukan strategi untuk mempertahankan konteks relevan tanpa mencapai batas itu. Modul ini menunjukkan cara kerja memori; nanti Anda akan belajar kapan merangkum, kapan melupakan, dan kapan mengambil kembali.
+Percakapan multi-giliran bekerja dengan menyertakan riwayat pesan pada setiap permintaan. Tapi ada batas - setiap model punya maksimum token. Saat percakapan bertambah, Anda perlu strategi menjaga konteks relevan tanpa melewati batas itu. Modul ini menunjukkan cara kerja memori; nanti Anda akan belajar kapan merangkum, kapan melupakan, dan kapan mengambil kembali.
-## Langkah Selanjutnya
+## Langkah Berikutnya
**Modul Berikutnya:** [03-rag - RAG (Retrieval-Augmented Generation)](../03-rag/README.md)
---
-**Navigasi:** [← Sebelumnya: Modul 01 - Pengantar](../01-introduction/README.md) | [Kembali ke Utama](../README.md) | [Berikutnya: Modul 03 - RAG →](../03-rag/README.md)
+**Navigasi:** [← Sebelumnya: Modul 01 - Pendahuluan](../01-introduction/README.md) | [Kembali ke Utama](../README.md) | [Berikutnya: Modul 03 - RAG →](../03-rag/README.md)
---
-**Penafian**:
-Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk memberikan terjemahan yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang berwenang. Untuk informasi yang sangat penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang salah yang timbul dari penggunaan terjemahan ini.
+**Penafian**:
+Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
\ No newline at end of file
diff --git a/translations/id/03-rag/README.md b/translations/id/03-rag/README.md
index a314f918d..907c6263c 100644
--- a/translations/id/03-rag/README.md
+++ b/translations/id/03-rag/README.md
@@ -2,29 +2,29 @@
## Daftar Isi
-- [Video Walkthrough](../../../03-rag)
-- [Apa yang Akan Anda Pelajari](../../../03-rag)
-- [Prasyarat](../../../03-rag)
-- [Memahami RAG](../../../03-rag)
- - [Pendekatan RAG Mana yang Digunakan Tutorial Ini?](../../../03-rag)
-- [Cara Kerjanya](../../../03-rag)
- - [Pemrosesan Dokumen](../../../03-rag)
- - [Membuat Embedding](../../../03-rag)
- - [Pencarian Semantik](../../../03-rag)
- - [Pembuatan Jawaban](../../../03-rag)
-- [Menjalankan Aplikasi](../../../03-rag)
-- [Menggunakan Aplikasi](../../../03-rag)
- - [Mengunggah Dokumen](../../../03-rag)
- - [Mengajukan Pertanyaan](../../../03-rag)
- - [Memeriksa Referensi Sumber](../../../03-rag)
- - [Bereksperimen dengan Pertanyaan](../../../03-rag)
-- [Konsep Kunci](../../../03-rag)
- - [Strategi Chunking](../../../03-rag)
- - [Skor Kesamaan](../../../03-rag)
- - [Penyimpanan Dalam Memori](../../../03-rag)
- - [Manajemen Jendela Konteks](../../../03-rag)
-- [Kapan RAG Penting](../../../03-rag)
-- [Langkah Selanjutnya](../../../03-rag)
+- [Video Walkthrough](#video-walkthrough)
+- [Apa yang Akan Anda Pelajari](#apa-yang-akan-anda-pelajari)
+- [Prasyarat](#prasyarat)
+- [Memahami RAG](#memahami-rag)
+ - [Pendekatan RAG Mana yang Digunakan Tutorial Ini?](#pendekatan-rag-mana-yang-digunakan-tutorial-ini)
+- [Cara Kerjanya](#cara-kerjanya)
+ - [Pemrosesan Dokumen](#pemrosesan-dokumen)
+ - [Membuat Embedding](#membuat-embedding)
+ - [Pencarian Semantik](#pencarian-semantik)
+ - [Pembuatan Jawaban](#pembuatan-jawaban)
+- [Jalankan Aplikasi](#menjalankan-aplikasi)
+- [Menggunakan Aplikasi](#menggunakan-aplikasi)
+ - [Unggah Dokumen](#unggah-dokumen)
+ - [Ajukan Pertanyaan](#ajukan-pertanyaan)
+ - [Periksa Referensi Sumber](#periksa-referensi-sumber)
+ - [Bereksperimen dengan Pertanyaan](#bereksperimen-dengan-pertanyaan)
+- [Konsep Utama](#konsep-utama)
+ - [Strategi Pemotongan](#strategi-pemecahan-potongan)
+ - [Skor Kemiripan](#skor-kesamaan)
+ - [Penyimpanan dalam Memori](#penyimpanan-dalam-memori)
+ - [Manajemen Jendela Konteks](#manajemen-jendela-konteks)
+- [Kapan RAG Penting](#kapan-rag-penting)
+- [Langkah Berikutnya](#langkah-selanjutnya)
## Video Walkthrough
@@ -34,107 +34,106 @@ Tonton sesi langsung ini yang menjelaskan cara memulai dengan modul ini:
## Apa yang Akan Anda Pelajari
-Dalam modul sebelumnya, Anda belajar bagaimana melakukan percakapan dengan AI dan menyusun prompt secara efektif. Namun ada keterbatasan mendasar: model bahasa hanya tahu apa yang mereka pelajari selama pelatihan. Mereka tidak bisa menjawab pertanyaan tentang kebijakan perusahaan Anda, dokumentasi proyek Anda, atau informasi lain yang tidak mereka latih.
+Dalam modul sebelumnya, Anda belajar bagaimana melakukan percakapan dengan AI dan menyusun prompt Anda secara efektif. Namun ada keterbatasan mendasar: model bahasa hanya tahu apa yang mereka pelajari selama pelatihan. Mereka tidak bisa menjawab pertanyaan tentang kebijakan perusahaan Anda, dokumentasi proyek Anda, atau informasi apa pun yang tidak mereka latih.
-RAG (Retrieval-Augmented Generation) memecahkan masalah ini. Alih-alih mencoba mengajari model informasi Anda (yang mahal dan tidak praktis), Anda memberinya kemampuan untuk mencari dokumen Anda. Ketika seseorang mengajukan pertanyaan, sistem menemukan informasi relevan dan menyertakannya dalam prompt. Model kemudian menjawab berdasarkan konteks yang ditemukan tersebut.
+RAG (Retrieval-Augmented Generation) memecahkan masalah ini. Alih-alih mencoba mengajarkan model informasi Anda (yang mahal dan tidak praktis), Anda memberinya kemampuan untuk mencari melalui dokumen Anda. Ketika seseorang mengajukan pertanyaan, sistem menemukan informasi yang relevan dan memasukkannya ke dalam prompt. Model kemudian menjawab berdasarkan konteks yang diambil tersebut.
-Pikirkan RAG seperti memberikan pustaka referensi untuk model. Saat Anda bertanya, sistem melakukan:
+Pikirkan RAG sebagai memberikan model sebuah perpustakaan referensi. Ketika Anda mengajukan pertanyaan, sistem:
-1. **Kueri Pengguna** - Anda mengajukan pertanyaan
+1. **Query Pengguna** - Anda mengajukan pertanyaan
2. **Embedding** - Mengubah pertanyaan Anda menjadi vektor
-3. **Pencarian Vektor** - Menemukan potongan dokumen serupa
-4. **Perakitan Konteks** - Menambahkan potongan relevan ke prompt
-5. **Respons** - LLM menghasilkan jawaban berdasarkan konteks
+3. **Pencarian Vektor** - Menemukan potongan dokumen yang mirip
+4. **Perakitan Konteks** - Menambahkan potongan relevan ke dalam prompt
+5. **Respons** - LLM menghasilkan jawaban berdasarkan konteks tersebut
-Ini membuat tanggapan model berlandaskan data nyata Anda alih-alih hanya mengandalkan pengetahuan pelatihan atau mengarang jawaban.
+Ini membuat jawaban model berlandaskan data nyata Anda, bukan hanya mengandalkan pengetahuan pelatihannya atau mengarang jawaban.
## Prasyarat
-- Telah menyelesaikan [Modul 00 - Quick Start](../00-quick-start/README.md) (untuk contoh Easy RAG yang dirujuk di modul ini)
-- Telah menyelesaikan [Modul 01 - Introduction](../01-introduction/README.md) (sumber daya Azure OpenAI sudah diterapkan, termasuk model embedding `text-embedding-3-small`)
+- Telah menyelesaikan [Modul 01 - Pengantar](../01-introduction/README.md) (sumber daya Azure OpenAI telah dikerahkan, termasuk model embedding `text-embedding-3-small`)
- File `.env` di direktori root dengan kredensial Azure (dibuat oleh `azd up` di Modul 01)
-> **Catatan:** Jika Anda belum menyelesaikan Modul 01, ikuti dulu petunjuk penerapannya di sana. Perintah `azd up` menerapkan model chat GPT dan model embedding yang digunakan modul ini.
+> **Catatan:** Jika Anda belum menyelesaikan Modul 01, ikuti petunjuk penyebaran di sana terlebih dahulu. Perintah `azd up` mengerahkan model GPT chat dan model embedding yang digunakan modul ini.
## Memahami RAG
-Diagram di bawah menggambarkan konsep inti: alih-alih hanya mengandalkan data pelatihan model, RAG memberinya perpustakaan referensi dari dokumen Anda untuk dikonsultasikan sebelum menghasilkan setiap jawaban.
+Diagram di bawah ini menggambarkan konsep inti: alih-alih hanya mengandalkan data pelatihan model, RAG memberinya perpustakaan referensi dokumen Anda untuk dikonsultasikan sebelum membuat setiap jawaban.
-*Diagram ini menunjukkan perbedaan antara LLM standar (yang menebak dari data pelatihan) dan LLM yang ditingkatkan RAG (yang berkonsultasi dengan dokumen Anda terlebih dahulu).*
+*Diagram ini menunjukkan perbedaan antara LLM standar (yang menebak dari data pelatihan) dan LLM yang diperkuat RAG (yang berkonsultasi dengan dokumen Anda terlebih dahulu).*
-Berikut bagaimana bagian-bagian itu terhubung dari awal sampai akhir. Pertanyaan pengguna mengalir melalui empat tahap — embedding, pencarian vektor, perakitan konteks, dan pembuatan jawaban — yang masing-masing dibangun dari tahap sebelumnya:
+Berikut bagaimana bagian-bagian tersebut terhubung end-to-end. Pertanyaan pengguna mengalir melalui empat tahap — embedding, pencarian vektor, perakitan konteks, dan pembuatan jawaban — masing-masing membangun dari tahap sebelumnya:
-*Diagram ini menunjukkan alur lengkap pipeline RAG — pertanyaan pengguna mengalir melalui embedding, pencarian vektor, perakitan konteks, dan pembuatan jawaban.*
+*Diagram ini menunjukkan pipeline RAG end-to-end — query pengguna mengalir melalui embedding, pencarian vektor, perakitan konteks, dan pembuatan jawaban.*
-Sisanya dari modul ini memandu tahap demi tahap secara rinci, dengan kode yang dapat Anda jalankan dan modifikasi.
+Sisa modul ini menjelaskan setiap tahap secara detail, dengan kode yang dapat Anda jalankan dan modifikasi.
### Pendekatan RAG Mana yang Digunakan Tutorial Ini?
-LangChain4j menawarkan tiga cara untuk mengimplementasikan RAG, masing-masing dengan tingkat abstraksi berbeda. Diagram berikut membandingkannya berdampingan:
+LangChain4j menawarkan tiga cara mengimplementasikan RAG, masing-masing dengan tingkat abstraksi yang berbeda. Diagram di bawah membandingkan mereka berdampingan:
-*Diagram ini membandingkan tiga pendekatan RAG LangChain4j — Easy, Native, dan Advanced — menunjukkan komponen utamanya dan kapan digunakan.*
+*Diagram ini membandingkan tiga pendekatan LangChain4j RAG — Easy, Native, dan Advanced — menunjukkan komponen utama mereka dan kapan harus menggunakan masing-masing.*
-| Pendekatan | Apa yang Dilakukan | Trade-off |
+| Pendekatan | Fungsi | Perdagangan |
|---|---|---|
-| **Easy RAG** | Menghubungkan semuanya secara otomatis melalui `AiServices` dan `ContentRetriever`. Anda anotasi antarmuka, pasang retriever, dan LangChain4j mengatur embedding, pencarian, dan perakitan prompt secara tersembunyi. | Kode minimal, tapi Anda tidak melihat apa yang terjadi setiap tahap. |
-| **Native RAG** | Anda memanggil model embedding, mencari ke dalam penyimpanan, membangun prompt, dan membuat jawaban sendiri — satu langkah eksplisit dalam satu waktu. | Lebih banyak kode, tapi setiap tahap terlihat dan dapat dimodifikasi. |
-| **Advanced RAG** | Menggunakan framework `RetrievalAugmentor` dengan transformator kueri, router, re-ranker, dan injektor konten yang dapat dipasang untuk pipeline produksi. | Fleksibilitas maksimal, tapi jauh lebih kompleks. |
+| **Easy RAG** | Menghubungkan semuanya secara otomatis lewat `AiServices` dan `ContentRetriever`. Anda hanya memberi anotasi pada interface, memasang retriever, dan LangChain4j mengelola embedding, pencarian, dan perakitan prompt di balik layar. | Kode minim, tapi Anda tidak melihat apa yang terjadi di tiap langkah. |
+| **Native RAG** | Anda memanggil model embedding, mencari di penyimpanan, membangun prompt, dan menghasilkan jawaban sendiri — satu langkah eksplisit tiap waktu. | Lebih banyak kode, tapi setiap tahap terlihat dan bisa dimodifikasi. |
+| **Advanced RAG** | Menggunakan framework `RetrievalAugmentor` dengan transformer query yang bisa disambungkan, router, re-ranker, dan injector konten untuk pipeline produksi. | Fleksibilitas maksimum, tapi jauh lebih kompleks. |
-**Tutorial ini menggunakan pendekatan Native.** Setiap tahap pipeline RAG — embedding kueri, pencarian di vector store, penyusunan konteks, dan pembuatan jawaban — ditulis secara eksplisit dalam [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Ini disengaja: sebagai sumber belajar, lebih penting Anda melihat dan memahami setiap tahap dibandingkan kode yang dipersingkat. Setelah Anda nyaman dengan susunan bagian-bagiannya, Anda bisa beralih ke Easy RAG untuk prototipe cepat atau Advanced RAG untuk sistem produksi.
+**Tutorial ini menggunakan pendekatan Native.** Setiap langkah pipeline RAG — embedding query, mencari di penyimpanan vektor, merakit konteks, dan membuat jawaban — dituliskan secara eksplisit di [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Ini disengaja: sebagai sumber belajar, lebih penting Anda melihat dan memahami setiap tahap daripada kode dipersingkat. Setelah Anda nyaman dengan bagaimana bagian-bagian berfungsi bersama, Anda bisa pindah ke Easy RAG untuk prototipe cepat atau Advanced RAG untuk sistem produksi.
-> **💡 Sudah melihat Easy RAG berjalan?** Modul [Quick Start](../00-quick-start/README.md) mencakup contoh Document Q&A ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)) yang menggunakan pendekatan Easy RAG — LangChain4j menangani embedding, pencarian, dan perakitan prompt secara otomatis. Modul ini mengambil langkah berikutnya dengan membuka pipeline tersebut agar Anda bisa melihat dan mengontrol setiap tahap secara sendiri.
+> **💡 Ingin tahu tentang Easy RAG?** LangChain4j juga menyediakan pendekatan *Easy RAG* di mana `AiServices` dan `ContentRetriever` menangani embedding, pencarian, dan perakitan prompt otomatis. Modul ini mengambil jalur yang lebih eksplisit — membuka pipeline itu agar Anda bisa melihat dan mengontrol tiap tahap sendiri.
-Diagram berikut menunjukkan pipeline Easy RAG dari contoh Quick Start itu. Perhatikan bagaimana `AiServices` dan `EmbeddingStoreContentRetriever` menyembunyikan semua kompleksitas — Anda memuat dokumen, memasang retriever, dan mendapat jawaban. Pendekatan Native di modul ini membuka setiap langkah tersembunyi tersebut:
+Diagram di bawah mengilustrasikan pipeline Easy RAG. Perhatikan bagaimana `AiServices` dan `EmbeddingStoreContentRetriever` menyembunyikan seluruh kompleksitas — Anda memuat dokumen, memasang retriever, dan mendapatkan jawaban. Pendekatan Native dalam modul ini membuka tiap langkah tersembunyi tersebut:
-*Diagram ini menunjukkan pipeline Easy RAG dari `SimpleReaderDemo.java`. Bandingkan dengan pendekatan Native yang digunakan modul ini: Easy RAG menyembunyikan embedding, pencarian, dan perakitan prompt di balik `AiServices` dan `ContentRetriever` — Anda memuat dokumen, memasang retriever, dan mendapat jawaban. Pendekatan Native membuka pipeline itu sehingga Anda memanggil setiap tahap (embed, cari, susun konteks, buat jawaban) sendiri, memberikan visibilitas dan kontrol penuh.*
+*Diagram ini menunjukkan pipeline Easy RAG. Bandingkan dengan pendekatan Native yang digunakan modul ini: Easy RAG menyembunyikan embedding, pengambilan, dan perakitan prompt lewat `AiServices` dan `ContentRetriever` — Anda memuat dokumen, memasang retriever, dan mendapat jawaban. Pendekatan Native memecah pipeline itu sehingga Anda panggil tiap tahap (embed, search, assemble context, generate) sendiri, memberikan visibilitas dan kontrol penuh.*
## Cara Kerjanya
-Pipeline RAG dalam modul ini terbagi menjadi empat tahap yang berjalan berurutan setiap kali pengguna mengajukan pertanyaan. Pertama, dokumen yang diunggah **diparsing dan dipecah menjadi potongan** yang mudah ditangani. Potongan-potongan tersebut kemudian dikonversi menjadi **embedding vektor** dan disimpan agar bisa dibandingkan secara matematika. Saat kueri datang, sistem melakukan **pencarian semantik** untuk menemukan potongan paling relevan, dan akhirnya melewatkannya sebagai konteks kepada LLM untuk **pembuatan jawaban**. Bagian-bagian berikut menjelaskan setiap tahap dengan kode dan diagram nyata. Mari lihat tahap pertama.
+Pipeline RAG dalam modul ini terbagi menjadi empat tahap yang dijalankan berurutan setiap kali pengguna mengajukan pertanyaan. Pertama, dokumen yang diunggah **diparsing dan dipotong** menjadi bagian-bagian yang mudah dikelola. Potongan-potongan itu kemudian dikonversi menjadi **embedding vektor** dan disimpan agar bisa dibandingkan secara matematis. Ketika query datang, sistem melakukan **pencarian semantik** untuk menemukan potongan paling relevan, dan akhirnya melewatkannya sebagai konteks ke LLM untuk **pembuatan jawaban**. Bagian-bagian di bawah ini menjelaskan tiap tahap dengan kode dan diagram nyata. Mari kita lihat langkah pertama.
### Pemrosesan Dokumen
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-Saat Anda mengunggah dokumen, sistem memparsingnya (PDF atau teks biasa), menambahkan metadata seperti nama file, lalu memecahnya menjadi potongan — bagian lebih kecil yang muat dengan nyaman dalam jendela konteks model. Potongan ini sedikit tumpang tindih agar konteks pada batas-batas tidak hilang.
+Ketika Anda mengunggah dokumen, sistem memparsingnya (PDF atau teks biasa), menambahkan metadata seperti nama file, lalu memecahnya menjadi potongan—bagian kecil yang muat dengan nyaman di jendela konteks model. Potongan-potongan ini saling tumpang tindih sedikit sehingga konteks di batas potongan tidak hilang.
```java
-// Mengurai file yang diunggah dan membungkusnya dalam Dokumen LangChain4j
+// Parse file yang diunggah dan bungkus dalam Dokumen LangChain4j
Document document = Document.from(content, metadata);
-// Membagi menjadi potongan-potongan 300-token dengan tumpang tindih 30-token
+// Pisahkan menjadi potongan 300-token dengan tumpang tindih 30-token
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List segments = splitter.split(document);
```
-Diagram di bawah menunjukkan bagaimana ini bekerja secara visual. Perhatikan bagaimana setiap potongan berbagi beberapa token dengan tetangganya — tumpang tindih 30 token memastikan tidak ada konteks penting yang terlewatkan:
+Diagram di bawah menunjukkan cara kerjanya secara visual. Perhatikan bagaimana tiap potongan berbagi beberapa token dengan tetangganya — tumpang tindih 30 token menjamin tidak ada konteks penting yang hilang di antara celah-celah:
-
+
-*Diagram ini menunjukkan dokumen dipecah menjadi potongan 300-token dengan tumpang tindih 30-token, menjaga konteks di batas potongan.*
+*Diagram ini menunjukkan dokumen dipotong menjadi potongan 300 token dengan tumpang tindih 30 token, menjaga konteks di batas potongan.*
-> **🤖 Coba dengan [GitHub Copilot](https://github.com/features/copilot) Chat:** Buka [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) dan tanyakan:
-> - "Bagaimana LangChain4j memecah dokumen menjadi potongan dan mengapa tumpang tindih itu penting?"
-> - "Berapa ukuran potongan optimal untuk berbagai jenis dokumen dan mengapa?"
-> - "Bagaimana menangani dokumen dalam beberapa bahasa atau dengan format khusus?"
+> **🤖 Coba dengan [GitHub Copilot](https://github.com/features/copilot) Chat:** Buka [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) dan tanya:
+> - "Bagaimana LangChain4j memotong dokumen menjadi potongan dan mengapa tumpang tindih itu penting?"
+> - "Berapa ukuran potongan optimal untuk berbagai tipe dokumen dan mengapa?"
+> - "Bagaimana saya menangani dokumen berbahasa ganda atau dengan format khusus?"
### Membuat Embedding
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-Setiap potongan dikonversi menjadi representasi numerik yang disebut embedding — pada dasarnya pengubah makna ke angka. Model embedding tidak "cerdas" seperti model chat; ia tidak bisa mengikuti instruksi, bernalar, atau menjawab pertanyaan. Yang bisa dilakukan adalah memetakan teks ke ruang matematis di mana makna serupa berdekatan — "mobil" dekat "automobile", "kebijakan pengembalian" dekat "pengembalian uang saya." Pikirkan model chat sebagai orang yang bisa diajak bicara; model embedding adalah sistem pengarsipan ultra-efisien.
+Setiap potongan diubah menjadi representasi numerik yang disebut embedding—pada dasarnya pengubah makna menjadi angka. Model embedding tidak "cerdas" seperti model chat; ia tidak bisa mengikuti instruksi, bernalar, atau menjawab pertanyaan. Yang bisa ia lakukan adalah memetakan teks ke ruang matematis di mana makna serupa berdekatan — "mobil" dekat dengan "automobile," "kebijakan pengembalian dana" dekat dengan "kembalikan uang saya." Anggap model chat seperti seseorang yang bisa diajak bicara; model embedding adalah sistem pengarsipan yang sangat baik.
-Diagram di bawah memvisualisasikan konsep ini — teks masuk, vektor numerik keluar, dan makna serupa menghasilkan vektor berdekatan:
+Diagram di bawah memvisualisasikan konsep ini — teks masuk, vektor numerik keluar, dan makna serupa menghasilkan vektor yang berdekatan:
@@ -154,29 +153,29 @@ EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-Diagram kelas di bawah menunjukkan dua alur terpisah dalam pipeline RAG dan kelas LangChain4j yang mengimplementasikannya. **Alur ingestasi** (dijalankan sekali saat unggah) memecah dokumen, meng-embed potongan, dan menyimpannya lewat `.addAll()`. **Alur kueri** (dijalankan setiap kali pengguna bertanya) meng-embed pertanyaan, mencari di penyimpanan lewat `.search()`, dan melewatkan konteks yang cocok ke model chat. Kedua alur bertemu di interface `EmbeddingStore` bersama:
+Diagram kelas di bawah menunjukkan dua aliran terpisah dalam pipeline RAG dan kelas LangChain4j yang mengimplementasikannya. Aliran **ingest** (dijalankan sekali saat upload) memecah dokumen, membangun embedding potongan, dan menyimpannya lewat `.addAll()`. Aliran **query** (dijalankan setiap kali pengguna bertanya) membangun embedding pertanyaan, mencari di store lewat `.search()`, dan melewatkan konteks yang cocok ke model chat. Kedua aliran bertemu di interface bersama `EmbeddingStore`:
-
+
-*Diagram ini menunjukkan dua alur dalam pipeline RAG — ingestasi dan kueri — dan bagaimana mereka terhubung melalui EmbeddingStore bersama.*
+*Diagram ini menunjukkan dua aliran dalam pipeline RAG — ingest dan query — dan bagaimana mereka terhubung melalui EmbeddingStore bersama.*
-Setelah embedding disimpan, konten serupa secara alami mengelompok di ruang vektor. Visualisasi di bawah menunjukkan bagaimana dokumen terkait topik berakhir sebagai titik berdekatan, yang memungkinkan pencarian semantik:
+Setelah embedding tersimpan, konten serupa secara alami mengelompok bersama dalam ruang vektor. Visualisasi di bawah menunjukkan dokumen tentang topik terkait menjadi titik-titik yang berdekatan, yang membuat pencarian semantik menjadi mungkin:
-*Visualisasi ini menunjukkan bagaimana dokumen terkait mengelompok dalam ruang vektor 3D, dengan topik seperti Dokumen Teknis, Aturan Bisnis, dan FAQ membentuk kelompok berbeda.*
+*Visualisasi ini menunjukkan bagaimana dokumen terkait mengelompok bersama dalam ruang vektor 3D, dengan topik seperti Dokumen Teknis, Aturan Bisnis, dan FAQ membentuk kelompok terpisah.*
-Saat pengguna mencari, sistem mengikuti empat langkah: embedding dokumen sekali, embedding kueri setiap pencarian, membandingkan vektor kueri dengan semua vektor yang disimpan menggunakan kemiripan kosinus, dan mengembalikan potongan dengan skor teratas. Diagram berikut menjelaskan setiap langkah dan kelas LangChain4j yang terlibat:
+Ketika pengguna melakukan pencarian, sistem mengikuti empat langkah: buat embedding dokumen sekali, buat embedding query untuk tiap pencarian, bandingkan vektor query terhadap semua vektor yang tersimpan menggunakan cosine similarity, dan kembalikan top-K potongan dengan skor tertinggi. Diagram di bawah menjelaskan tiap langkah dan kelas LangChain4j terkait:
-
+
-*Diagram ini menunjukkan proses pencarian embedding empat langkah: embed dokumen, embed kueri, bandingkan vektor dengan kemiripan kosinus, dan kembalikan hasil top-K.*
+*Diagram ini menunjukkan proses pencarian embedding empat langkah: buat embedding dokumen, buat embedding query, bandingkan vektor dengan cosine similarity, dan kembalikan hasil top-K.*
### Pencarian Semantik
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Saat Anda mengajukan pertanyaan, pertanyaan Anda juga diubah menjadi embedding. Sistem membandingkan embedding pertanyaan Anda dengan embedding semua potongan dokumen. Ia menemukan potongan dengan makna paling mirip — bukan hanya kecocokan kata kunci, tapi kemiripan semantik aktual.
+Ketika Anda mengajukan pertanyaan, pertanyaan Anda juga diubah menjadi embedding. Sistem membandingkan embedding pertanyaan Anda dengan embedding semua potongan dokumen. Ia menemukan potongan dengan makna paling mirip — bukan hanya mencocokkan kata kunci, tetapi kesamaan semantik sesungguhnya.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -196,27 +195,27 @@ for (EmbeddingMatch match : matches) {
}
```
-Diagram di bawah membandingkan pencarian semantik dengan pencarian kata kunci tradisional. Pencarian kata kunci untuk "kendaraan" melewatkan potongan tentang "mobil dan truk," tapi pencarian semantik memahami mereka bermakna sama dan mengembalikannya sebagai hasil dengan skor tinggi:
+Diagram di bawah membandingkan pencarian semantik dengan pencarian kata kunci tradisional. Pencarian kata kunci untuk "kendaraan" melewatkan potongan tentang "mobil dan truk," tapi pencarian semantik memahami mereka berarti hal yang sama dan mengembalikannya sebagai kecocokan dengan skor tinggi:
-*Diagram ini membandingkan pencarian berbasis kata kunci dengan pencarian semantik, menunjukkan bagaimana pencarian semantik mengambil konten terkait konsep meskipun kata kunci tepat berbeda.*
-Di balik layar, kesamaan diukur menggunakan cosine similarity — pada dasarnya menanyakan "apakah dua panah ini menunjuk ke arah yang sama?" Dua potongan bisa menggunakan kata-kata yang benar-benar berbeda, tetapi jika mereka bermakna sama maka vektor mereka menunjuk ke arah yang sama dan skor mendekati 1.0:
+*Diagram ini membandingkan pencarian berbasis kata kunci dengan pencarian semantik, menunjukkan bagaimana pencarian semantik mengambil konten yang secara konseptual terkait walaupun kata kunci tepat berbeda.*
-
+Di belakang layar, kemiripan diukur menggunakan cosine similarity — pada dasarnya menanyakan "apakah dua panah ini menunjuk ke arah yang sama?" Dua potongan bisa menggunakan kata-kata yang sangat berbeda, tapi jika maknanya sama, vektor mereka menunjuk ke arah yang sama dan skornya mendekati 1.0:
-*Diagram ini menggambarkan cosine similarity sebagai sudut antara vektor embedding — vektor yang lebih sejajar mendapat skor mendekati 1.0, yang menunjukkan kesamaan semantik yang lebih tinggi.*
+
+*Diagram ini menggambarkan kesamaan kosinus sebagai sudut antara vektor embedding — vektor yang lebih sejajar mendapatkan skor mendekati 1.0, yang menunjukkan kesamaan semantik yang lebih tinggi.*
> **🤖 Coba dengan [GitHub Copilot](https://github.com/features/copilot) Chat:** Buka [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) dan tanyakan:
-> - "Bagaimana cara kerja pencarian kesamaan dengan embeddings dan apa yang menentukan skor?"
-> - "Ambang batas kesamaan apa yang harus saya gunakan dan bagaimana pengaruhnya terhadap hasil?"
-> - "Bagaimana saya menangani kasus di mana tidak ditemukan dokumen yang relevan?"
+> - "Bagaimana pencarian kesamaan bekerja dengan embeddings dan apa yang menentukan skornya?"
+> - "Ambang kesamaan berapa yang harus saya gunakan dan bagaimana pengaruhnya terhadap hasil?"
+> - "Bagaimana saya menangani kasus ketika tidak ada dokumen relevan yang ditemukan?"
-### Generasi Jawaban
+### Pembuatan Jawaban
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Potongan paling relevan dirangkai menjadi prompt terstruktur yang mencakup instruksi eksplisit, konteks yang diambil, dan pertanyaan pengguna. Model membaca potongan spesifik tersebut dan menjawab berdasarkan informasi itu — model hanya dapat menggunakan apa yang ada di depannya, yang mencegah halusinasi.
+Potongan paling relevan disusun menjadi sebuah prompt terstruktur yang mencakup instruksi eksplisit, konteks yang diambil, dan pertanyaan pengguna. Model membaca potongan-potongan tertentu tersebut dan menjawab berdasarkan informasi itu — model hanya dapat menggunakan apa yang ada di depannya, sehingga mencegah halusinasi.
```java
String context = matches.stream()
@@ -237,17 +236,17 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-Diagram di bawah menunjukkan perakitan ini dalam aksi — potongan dengan skor tertinggi dari langkah pencarian disisipkan ke dalam template prompt, dan `OpenAiOfficialChatModel` menghasilkan jawaban yang berdasar:
+Diagram di bawah menunjukkan proses penyusunan ini — potongan dengan skor tertinggi dari langkah pencarian disuntikkan ke dalam template prompt, dan `OpenAiOfficialChatModel` menghasilkan jawaban yang berlandaskan:
-
+
-*Diagram ini menunjukkan bagaimana potongan dengan skor tertinggi dirangkai menjadi prompt terstruktur, memungkinkan model menghasilkan jawaban yang berdasar dari data Anda.*
+*Diagram ini menunjukkan bagaimana potongan dengan skor tertinggi disusun menjadi prompt terstruktur, memungkinkan model menghasilkan jawaban yang berlandaskan data Anda.*
## Menjalankan Aplikasi
-**Verifikasi deployment:**
+**Verifikasi penerapan:**
-Pastikan file `.env` ada di direktori root dengan kredensial Azure (dibuat selama Modul 01). Jalankan ini dari direktori modul (`03-rag/`):
+Pastikan file `.env` ada di direktori root dengan kredensial Azure (dibuat saat Modul 01). Jalankan dari direktori modul (`03-rag/`):
**Bash:**
```bash
@@ -261,23 +260,23 @@ Get-Content ..\.env # Harus menampilkan AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYM
**Mulai aplikasi:**
-> **Catatan:** Jika Anda sudah menjalankan semua aplikasi menggunakan `./start-all.sh` dari direktori root (seperti yang dijelaskan di Modul 01), modul ini sudah berjalan di port 8081. Anda dapat melewati perintah mulai di bawah dan langsung ke http://localhost:8081.
+> **Catatan:** Jika Anda sudah memulai semua aplikasi menggunakan `./start-all.sh` dari direktori root (seperti dijelaskan di Modul 01), modul ini sudah berjalan di port 8081. Anda bisa melewati perintah mulai di bawah dan langsung ke http://localhost:8081.
**Opsi 1: Menggunakan Spring Boot Dashboard (Disarankan untuk pengguna VS Code)**
-Dev container menyertakan ekstensi Spring Boot Dashboard, yang menyediakan antarmuka visual untuk mengelola semua aplikasi Spring Boot. Anda dapat menemukannya di Activity Bar di sisi kiri VS Code (cari ikon Spring Boot).
+Container dev menyertakan ekstensi Spring Boot Dashboard, yang menyediakan antarmuka visual untuk mengelola semua aplikasi Spring Boot. Anda dapat menemukannya di Bilah Aktivitas di sebelah kiri VS Code (cari ikon Spring Boot).
Dari Spring Boot Dashboard, Anda dapat:
- Melihat semua aplikasi Spring Boot yang tersedia di workspace
-- Memulai/berhenti aplikasi dengan satu klik
-- Melihat log aplikasi secara real time
+- Memulai/menghentikan aplikasi dengan sekali klik
+- Melihat log aplikasi secara real-time
- Memantau status aplikasi
Cukup klik tombol play di samping "rag" untuk memulai modul ini, atau mulai semua modul sekaligus.
-*Tangkapan layar ini menunjukkan Spring Boot Dashboard di VS Code, tempat Anda dapat memulai, menghentikan, dan memantau aplikasi secara visual.*
+*Tangkapan layar ini menunjukkan Spring Boot Dashboard di VS Code, tempat Anda bisa memulai, menghentikan, dan memantau aplikasi secara visual.*
**Opsi 2: Menggunakan skrip shell**
@@ -295,7 +294,7 @@ cd .. # Dari direktori root
.\start-all.ps1
```
-Atau mulai hanya modul ini:
+Atau hanya mulai modul ini:
**Bash:**
```bash
@@ -309,7 +308,7 @@ cd 03-rag
.\start.ps1
```
-Kedua skrip secara otomatis memuat variabel lingkungan dari file `.env` root dan akan membangun file JAR jika belum ada.
+Kedua skrip secara otomatis memuat variabel lingkungan dari file `.env` root dan akan membangun JAR jika belum ada.
> **Catatan:** Jika Anda lebih suka membangun semua modul secara manual sebelum memulai:
>
@@ -318,20 +317,20 @@ Kedua skrip secara otomatis memuat variabel lingkungan dari file `.env` root dan
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-
+>
> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-Buka http://localhost:8081 di browser Anda.
+Buka http://localhost:8081 di peramban Anda.
**Untuk menghentikan:**
**Bash:**
```bash
-./stop.sh # Modul ini saja
+./stop.sh # Hanya modul ini
# Atau
cd .. && ./stop-all.sh # Semua modul
```
@@ -345,65 +344,65 @@ cd ..; .\stop-all.ps1 # Semua modul
## Menggunakan Aplikasi
-Aplikasi menyediakan antarmuka web untuk mengunggah dokumen dan mengajukan pertanyaan.
+Aplikasi menyediakan antarmuka web untuk unggah dokumen dan bertanya.
-
+
-*Tangkapan layar ini menunjukkan antarmuka aplikasi RAG di mana Anda mengunggah dokumen dan mengajukan pertanyaan.*
+*Tangkapan layar ini menunjukkan antarmuka aplikasi RAG tempat Anda mengunggah dokumen dan mengajukan pertanyaan.*
### Unggah Dokumen
-Mulailah dengan mengunggah dokumen — file TXT paling cocok untuk pengujian. `sample-document.txt` disediakan di direktori ini yang berisi informasi tentang fitur LangChain4j, implementasi RAG, dan praktik terbaik — sempurna untuk pengujian sistem.
+Mulailah dengan mengunggah dokumen — file TXT paling ideal untuk pengujian. Sebuah `sample-document.txt` disediakan di direktori ini yang memuat informasi tentang fitur LangChain4j, implementasi RAG, dan praktik terbaik — sangat cocok untuk menguji sistem.
-Sistem memproses dokumen Anda, memecahnya menjadi potongan-potongan, dan membuat embedding untuk setiap potongan. Ini terjadi secara otomatis saat Anda mengunggah.
+Sistem memproses dokumen Anda, memecahnya menjadi potongan-potongan, dan membuat embeddings untuk setiap potongan. Ini terjadi otomatis saat Anda unggah.
### Ajukan Pertanyaan
-Sekarang ajukan pertanyaan spesifik tentang isi dokumen. Cobalah sesuatu yang faktual dan jelas tercantum dalam dokumen. Sistem mencari potongan relevan, menyertakannya dalam prompt, dan menghasilkan jawaban.
+Sekarang ajukan pertanyaan spesifik tentang konten dokumen. Cobalah sesuatu yang faktual dan jelas disebutkan dalam dokumen. Sistem mencari potongan relevan, memasukkannya ke dalam prompt, dan menghasilkan jawaban.
### Periksa Referensi Sumber
-Perhatikan setiap jawaban menyertakan referensi sumber dengan skor kesamaan. Skor ini (0 sampai 1) menunjukkan seberapa relevan setiap potongan terhadap pertanyaan Anda. Skor lebih tinggi berarti kecocokan yang lebih baik. Ini memungkinkan Anda memverifikasi jawaban terhadap bahan sumber.
+Perhatikan setiap jawaban menyertakan referensi sumber dengan skor kesamaan. Skor ini (0 sampai 1) menunjukkan tingkat relevansi potongan terhadap pertanyaan Anda. Skor lebih tinggi berarti kecocokan lebih baik. Ini memungkinkan Anda memverifikasi jawaban sesuai sumber aslinya.
-
+
*Tangkapan layar ini menunjukkan hasil query dengan jawaban yang dihasilkan, referensi sumber, dan skor relevansi untuk setiap potongan yang diambil.*
### Bereksperimen dengan Pertanyaan
-Coba jenis pertanyaan berbeda:
+Coba berbagai jenis pertanyaan:
- Fakta spesifik: "Apa topik utama?"
-- Perbandingan: "Apa perbedaan antara X dan Y?"
-- Ringkasan: "Ringkas poin penting tentang Z"
+- Perbandingan: "Apa beda antara X dan Y?"
+- Ringkasan: "Ringkas poin-poin kunci tentang Z"
-Perhatikan bagaimana skor relevansi berubah berdasarkan seberapa baik pertanyaan Anda cocok dengan isi dokumen.
+Perhatikan bagaimana skor relevansi berubah berdasarkan seberapa baik pertanyaan Anda cocok dengan konten dokumen.
-## Konsep Kunci
+## Konsep Utama
-### Strategi Chunking
+### Strategi Pemecahan Potongan
-Dokumen dibagi menjadi potongan 300 token dengan tumpang tindih 30 token. Keseimbangan ini memastikan setiap potongan memiliki konteks cukup untuk bermakna sambil tetap kecil agar beberapa potongan bisa dimasukkan ke dalam prompt.
+Dokumen dibagi menjadi potongan 300 token dengan tumpang tindih 30 token. Keseimbangan ini memastikan setiap potongan memiliki cukup konteks untuk bermakna sambil tetap cukup kecil agar bisa menyertakan beberapa potongan dalam sebuah prompt.
### Skor Kesamaan
-Setiap potongan yang diambil disertai skor kesamaan antara 0 dan 1 yang menunjukkan seberapa dekat kecocokannya dengan pertanyaan pengguna. Diagram di bawah memvisualisasikan rentang skor dan bagaimana sistem menggunakannya untuk menyaring hasil:
+Setiap potongan yang diambil disertai dengan skor kesamaan antara 0 dan 1 yang menunjukkan seberapa dekat kecocokannya dengan pertanyaan pengguna. Diagram di bawah memvisualisasikan rentang skor dan bagaimana sistem menggunakannya untuk menyaring hasil:
-
+
-*Diagram ini menunjukkan rentang skor dari 0 sampai 1, dengan ambang minimum 0.5 yang menyaring potongan tidak relevan.*
+*Diagram ini menunjukkan rentang skor dari 0 sampai 1, dengan ambang minimum 0,5 yang menyaring potongan yang tidak relevan.*
-Skor berkisar dari 0 sampai 1:
-- 0.7-1.0: Sangat relevan, cocok persis
-- 0.5-0.7: Relevan, konteks baik
-- Di bawah 0.5: Disaring, terlalu tidak mirip
+Skor berkisar antara 0 sampai 1:
+- 0,7-1,0: Sangat relevan, cocok tepat
+- 0,5-0,7: Relevan, konteks baik
+- Di bawah 0,5: Disaring, terlalu tidak mirip
-Sistem hanya mengambil potongan di atas ambang minimum untuk memastikan kualitas.
+Sistem hanya mengambil potongan di atas ambang minimum untuk menjamin kualitas.
-Embedding bekerja baik saat makna mengelompok dengan jelas, tetapi memiliki titik buta. Diagram di bawah menggambarkan mode kegagalan umum — potongan terlalu besar menghasilkan vektor kabur, potongan terlalu kecil kurang konteks, istilah ambigu menunjuk ke beberapa klaster, dan pencocokan persis (ID, nomor bagian) sama sekali tidak bekerja dengan embedding:
+Embedding bekerja baik saat makna terklaster secara bersih, tetapi memiliki titik buta. Diagram di bawah menunjukkan mode kegagalan umum — potongan terlalu besar menghasilkan vektor yang kabur, potongan terlalu kecil kurang konteks, istilah ambigu menunjuk ke beberapa klaster, dan pencarian cocok tepat (ID, nomor bagian) sama sekali tidak berfungsi dengan embedding:
-
+
-*Diagram ini menunjukkan mode kegagalan embedding umum: potongan terlalu besar, potongan terlalu kecil, istilah ambigu yang menunjuk ke beberapa klaster, dan pencarian kecocokan persis seperti ID.*
+*Diagram ini menunjukkan mode kegagalan embedding yang umum: potongan terlalu besar, potongan terlalu kecil, istilah ambigu yang menunjuk ke beberapa klaster, dan pencarian cocok tepat seperti ID.*
### Penyimpanan Dalam Memori
@@ -411,19 +410,19 @@ Modul ini menggunakan penyimpanan dalam memori untuk kesederhanaan. Ketika Anda
### Manajemen Jendela Konteks
-Setiap model memiliki jendela konteks maksimum. Anda tidak bisa memasukkan semua potongan dari dokumen besar. Sistem mengambil N potongan paling relevan terbanyak (default 5) agar tetap dalam batas sambil menyediakan cukup konteks untuk jawaban akurat.
+Setiap model memiliki jendela konteks maksimum. Anda tidak bisa menyertakan semua potongan dari dokumen besar. Sistem mengambil N potongan paling relevan teratas (default 5) agar tetap dalam batas sambil menyediakan konteks cukup untuk jawaban akurat.
## Kapan RAG Penting
-RAG tidak selalu menjadi pendekatan yang tepat. Panduan keputusan di bawah membantu Anda menentukan kapan RAG menambah nilai dibandingkan kapan pendekatan lebih sederhana — seperti menyertakan konten langsung dalam prompt atau mengandalkan pengetahuan bawaan model — sudah cukup:
+RAG tidak selalu menjadi pendekatan yang tepat. Panduan keputusan di bawah membantu Anda menentukan kapan RAG memberikan nilai tambah dibandingkan pendekatan yang lebih sederhana — seperti memasukkan konten langsung ke prompt atau mengandalkan pengetahuan bawaan model:
-
+
-*Diagram ini menunjukkan panduan keputusan kapan RAG menambah nilai versus kapan pendekatan lebih sederhana sudah memadai.*
+*Diagram ini menunjukkan panduan keputusan kapan RAG memberikan nilai tambah dan kapan pendekatan sederhana sudah cukup.*
## Langkah Selanjutnya
-**Modul Berikutnya:** [04-tools - Agen AI dengan Tools](../04-tools/README.md)
+**Modul Berikutnya:** [04-tools - Agen AI dengan Alat](../04-tools/README.md)
---
@@ -432,6 +431,6 @@ RAG tidak selalu menjadi pendekatan yang tepat. Panduan keputusan di bawah memba
---
-**Penafian**:
-Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya mencapai ketepatan, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sahih. Untuk informasi penting, disarankan menggunakan terjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau salah interpretasi yang timbul dari penggunaan terjemahan ini.
+**Penafian**:
+Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
\ No newline at end of file
diff --git a/translations/id/04-tools/README.md b/translations/id/04-tools/README.md
index 93ec2dee9..67062321c 100644
--- a/translations/id/04-tools/README.md
+++ b/translations/id/04-tools/README.md
@@ -2,75 +2,75 @@
## Daftar Isi
-- [Video Walkthrough](../../../04-tools)
-- [Apa yang Akan Anda Pelajari](../../../04-tools)
-- [Prasyarat](../../../04-tools)
-- [Memahami Agen AI dengan Alat](../../../04-tools)
-- [Cara Kerja Pemanggilan Alat](../../../04-tools)
- - [Definisi Alat](../../../04-tools)
- - [Pengambilan Keputusan](../../../04-tools)
- - [Eksekusi](../../../04-tools)
- - [Pembuatan Respons](../../../04-tools)
- - [Arsitektur: Spring Boot Auto-Wiring](../../../04-tools)
-- [Merangkai Alat](../../../04-tools)
-- [Menjalankan Aplikasi](../../../04-tools)
-- [Menggunakan Aplikasi](../../../04-tools)
- - [Mencoba Penggunaan Alat Sederhana](../../../04-tools)
- - [Menguji Merangkai Alat](../../../04-tools)
- - [Melihat Alur Percakapan](../../../04-tools)
- - [Bereksperimen dengan Permintaan Berbeda](../../../04-tools)
-- [Konsep Kunci](../../../04-tools)
- - [Pola ReAct (Reasoning and Acting)](../../../04-tools)
- - [Deskripsi Alat itu Penting](../../../04-tools)
- - [Manajemen Sesi](../../../04-tools)
- - [Penanganan Kesalahan](../../../04-tools)
-- [Alat yang Tersedia](../../../04-tools)
-- [Kapan Menggunakan Agen Berbasis Alat](../../../04-tools)
-- [Alat vs RAG](../../../04-tools)
-- [Langkah Berikutnya](../../../04-tools)
-
-## Video Walkthrough
+- [Video Penjelasan](#video-penjelasan)
+- [Apa yang Akan Anda Pelajari](#apa-yang-akan-anda-pelajari)
+- [Prasyarat](#prasyarat)
+- [Memahami Agen AI dengan Alat](#memahami-agen-ai-dengan-alat)
+- [Cara Kerja Pemanggilan Alat](#cara-kerja-pemanggilan-alat)
+ - [Definisi Alat](#definisi-alat)
+ - [Pengambilan Keputusan](#pengambilan-keputusan)
+ - [Eksekusi](#eksekusi)
+ - [Pembuatan Respons](#pembuatan-respons)
+ - [Arsitektur: Spring Boot Auto-Wiring](#arsitektur-spring-boot-auto-wiring)
+- [Rangkaian Alat](#rangkaian-alat)
+- [Jalankan Aplikasi](#jalankan-aplikasi)
+- [Menggunakan Aplikasi](#menggunakan-aplikasi)
+ - [Coba Penggunaan Alat Sederhana](#coba-penggunaan-alat-sederhana)
+ - [Uji Rangkaian Alat](#uji-rangkaian-alat)
+ - [Lihat Alur Percakapan](#lihat-alur-percakapan)
+ - [Eksperimen dengan Permintaan Berbeda](#eksperimen-dengan-permintaan-berbeda)
+- [Konsep Kunci](#konsep-kunci)
+ - [Pola ReAct (Reasoning and Acting)](#pola-react-penalaran-dan-bertindak)
+ - [Deskripsi Alat itu Penting](#deskripsi-alat-penting)
+ - [Manajemen Sesi](#manajemen-sesi)
+ - [Penanganan Kesalahan](#penanganan-error)
+- [Alat yang Tersedia](#alat-yang-tersedia)
+- [Kapan Menggunakan Agen Berbasis Alat](#kapan-menggunakan-agen-berbasis-alat)
+- [Alat vs RAG](#alat-vs-rag)
+- [Langkah Berikutnya](#langkah-berikutnya)
+
+## Video Penjelasan
Tonton sesi langsung ini yang menjelaskan cara memulai dengan modul ini:
-
+
## Apa yang Akan Anda Pelajari
-Sejauh ini, Anda sudah belajar bagaimana berinteraksi dengan AI, menyusun prompt secara efektif, dan memberikan dasar jawaban dari dokumen Anda. Namun ada keterbatasan mendasar: model bahasa hanya dapat menghasilkan teks. Model tidak bisa memeriksa cuaca, melakukan perhitungan, mengakses database, atau berinteraksi dengan sistem eksternal.
+Sampai saat ini, Anda telah belajar cara berkomunikasi dengan AI, menyusun prompt secara efektif, dan menghubungkan respons dengan dokumen Anda. Namun masih ada keterbatasan mendasar: model bahasa hanya dapat menghasilkan teks. Mereka tidak dapat memeriksa cuaca, melakukan perhitungan, mengquery basis data, atau berinteraksi dengan sistem eksternal.
-Alat mengubah hal ini. Dengan memberi model akses ke fungsi yang dapat dipanggil, Anda mengubahnya dari generator teks menjadi agen yang dapat mengambil tindakan. Model memutuskan kapan membutuhkan alat, alat mana yang dipakai, dan parameter apa yang dikirim. Kode Anda mengeksekusi fungsi dan mengembalikan hasilnya. Model menggabungkan hasil tersebut ke dalam responsnya.
+Alat mengubah ini. Dengan memberikan model akses ke fungsi yang dapat dipanggilnya, Anda mengubahnya dari generator teks menjadi agen yang dapat melakukan tindakan. Model memutuskan kapan membutuhkan alat, alat mana yang digunakan, dan parameter apa yang diberikan. Kode Anda mengeksekusi fungsi tersebut dan mengembalikan hasilnya. Model menggabungkan hasil tersebut ke dalam responsnya.
## Prasyarat
-- Telah menyelesaikan [Modul 01 - Pengantar](../01-introduction/README.md) (sumber daya Azure OpenAI sudah dipasang)
-- Disarankan menyelesaikan modul sebelumnya (modul ini merujuk pada [konsep RAG dari Modul 03](../03-rag/README.md) dalam perbandingan Alat vs RAG)
-- File `.env` di direktori root berisi kredensial Azure (dibuat oleh `azd up` di Modul 01)
+- Menyelesaikan [Modul 01 - Pengenalan](../01-introduction/README.md) (sumber daya Azure OpenAI sudah diterapkan)
+- Disarankan telah menyelesaikan modul sebelumnya (modul ini mengacu pada [konsep RAG dari Modul 03](../03-rag/README.md) dalam perbandingan Alat vs RAG)
+- File `.env` di direktori root dengan kredensial Azure (dibuat oleh `azd up` di Modul 01)
-> **Catatan:** Jika Anda belum menyelesaikan Modul 01, ikuti instruksi pemasangan di sana terlebih dahulu.
+> **Catatan:** Jika Anda belum menyelesaikan Modul 01, ikuti instruksi penerapan di sana terlebih dahulu.
## Memahami Agen AI dengan Alat
-> **📝 Catatan:** Istilah "agen" di modul ini merujuk pada asisten AI yang diperkaya dengan kemampuan pemanggilan alat. Ini berbeda dengan pola **Agentic AI** (agen otonom dengan perencanaan, memori, dan penalaran bertahap) yang akan kita bahas di [Modul 05: MCP](../05-mcp/README.md).
+> **📝 Catatan:** Istilah "agen" dalam modul ini merujuk pada asisten AI yang ditingkatkan dengan kemampuan pemanggilan alat. Ini berbeda dengan pola **Agentic AI** (agen otonom dengan perencanaan, memori, dan penalaran multi-langkah) yang akan kami bahas di [Modul 05: MCP](../05-mcp/README.md).
-Tanpa alat, model bahasa hanya bisa menghasilkan teks berdasarkan data pelatihannya. Tanya cuaca saat ini, ia hanya menebak. Beri alat, model bisa memanggil API cuaca, melakukan perhitungan, atau mengakses database — lalu menggabungkan hasil nyata itu ke responsnya.
+Tanpa alat, model bahasa hanya dapat menghasilkan teks dari data pelatihannya. Tanyakan tentang cuaca terkini, dan dia harus menebak. Berikan alat, dan model dapat memanggil API cuaca, melakukan perhitungan, atau mengquery basis data — lalu memasukkan hasil nyata itu ke dalam responsnya.
-
+
-*Tanpa alat model hanya bisa menebak — dengan alat ia dapat memanggil API, melakukan perhitungan, dan mengembalikan data waktu nyata.*
+*Tanpa alat model hanya bisa menebak — dengan alat model dapat memanggil API, melakukan perhitungan, dan mengembalikan data waktu nyata.*
-Agen AI dengan alat mengikuti pola **Reasoning and Acting (ReAct)**. Model tidak hanya merespons — ia berpikir tentang apa yang dibutuhkan, bertindak dengan memanggil alat, mengamati hasil, lalu memutuskan apakah bertindak lagi atau memberikan jawaban akhir:
+Agen AI dengan alat mengikuti pola **Reasoning and Acting (ReAct)**. Model tidak hanya merespons — ia berpikir tentang apa yang dibutuhkannya, bertindak dengan memanggil alat, mengamati hasilnya, lalu memutuskan apakah perlu bertindak lagi atau memberikan jawaban akhir:
-1. **Reason** — Agen menganalisis pertanyaan pengguna dan menentukan informasi yang diperlukan
+1. **Reason** — Agen menganalisis pertanyaan pengguna dan menentukan informasi yang dibutuhkan
2. **Act** — Agen memilih alat yang tepat, menghasilkan parameter yang benar, dan memanggilnya
-3. **Observe** — Agen menerima output alat dan mengevaluasi hasilnya
-4. **Repeat or Respond** — Jika perlu data tambahan, agen mengulang; jika tidak, menyusun jawaban dalam bahasa alami
+3. **Observe** — Agen menerima keluaran alat dan mengevaluasi hasilnya
+4. **Repeat or Respond** — Jika data lebih dibutuhkan, agen mengulangi; jika tidak, menyusun jawaban dalam bahasa alami
-
+
-*Siklus ReAct — agen menganalisis aksi yang harus dilakukan, bertindak dengan memanggil alat, mengamati hasil, dan mengulangi hingga dapat memberikan jawaban akhir.*
+*Siklus ReAct — agen berpikir tentang apa yang harus dilakukan, bertindak dengan memanggil alat, mengamati hasilnya, dan mengulangi sampai dapat memberikan jawaban akhir.*
-Ini terjadi secara otomatis. Anda mendefinisikan alat dan deskripsinya. Model menangani pengambilan keputusan kapan dan bagaimana menggunakannya.
+Ini terjadi secara otomatis. Anda mendefinisikan alat dan deskripsinya. Model yang menangani pengambilan keputusan tentang kapan dan bagaimana menggunakannya.
## Cara Kerja Pemanggilan Alat
@@ -78,7 +78,7 @@ Ini terjadi secara otomatis. Anda mendefinisikan alat dan deskripsinya. Model me
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-Anda mendefinisikan fungsi dengan deskripsi yang jelas dan spesifikasi parameter. Model melihat deskripsi ini dalam prompt sistem dan memahami fungsi masing-masing alat.
+Anda mendefinisikan fungsi dengan deskripsi jelas dan spesifikasi parameter. Model melihat deskripsi ini dalam sistem prompt-nya dan mengerti apa fungsi tiap alat.
```java
@Component
@@ -96,135 +96,135 @@ public interface Assistant {
String chat(@MemoryId String sessionId, @UserMessage String message);
}
-// Asisten secara otomatis dihubungkan oleh Spring Boot dengan:
+// Asisten secara otomatis terhubung oleh Spring Boot dengan:
// - Bean ChatModel
// - Semua metode @Tool dari kelas @Component
// - ChatMemoryProvider untuk manajemen sesi
```
+
+Diagram di bawah ini memecah setiap anotasi dan menunjukkan bagaimana setiap bagian membantu AI memahami kapan memanggil alat dan argumen apa yang harus dikirim:
-Diagram berikut memecah setiap anotasi dan menunjukkan bagaimana setiap bagian membantu AI memahami kapan memanggil alat dan argumen apa yang diberikan:
+
-
+*Anatomi definisi alat — @Tool memberitahu AI kapan menggunakannya, @P mendeskripsikan tiap parameter, dan @AiService menghubungkan semuanya saat startup.*
-*Anatomi definisi alat — @Tool memberi tahu AI kapan menggunakannya, @P mendeskripsikan setiap parameter, dan @AiService menghubungkan semuanya saat startup.*
-
-> **🤖 Coba dengan [GitHub Copilot](https://github.com/features/copilot) Chat:** Buka [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) dan tanyakan:
-> - "Bagaimana saya mengintegrasikan API cuaca nyata seperti OpenWeatherMap menggantikan data tiruan?"
-> - "Apa yang membuat deskripsi alat bagus sehingga membantu AI menggunakannya dengan benar?"
-> - "Bagaimana menangani kesalahan API dan batasan rate dalam implementasi alat?"
+> **🤖 Coba dengan [GitHub Copilot](https://github.com/features/copilot) Chat:** Buka [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) dan tanyakan:
+> - "Bagaimana saya mengintegrasikan API cuaca nyata seperti OpenWeatherMap alih-alih data tiruan?"
+> - "Apa yang membuat deskripsi alat yang bagus agar AI menggunakannya dengan benar?"
+> - "Bagaimana menangani kesalahan API dan batas panggilan dalam implementasi alat?"
### Pengambilan Keputusan
-Saat pengguna bertanya "Bagaimana cuaca di Seattle?", model tidak memilih alat secara acak. Ia membandingkan maksud pengguna dengan setiap deskripsi alat yang tersedia, memberi nilai relevansi, dan memilih yang paling cocok. Kemudian ia menghasilkan panggilan fungsi terstruktur dengan parameter yang tepat — dalam contoh ini, mengatur `location` ke `"Seattle"`.
+Ketika pengguna bertanya "Bagaimana cuaca di Seattle?", model tidak memilih alat secara acak. Ia membandingkan niat pengguna dengan setiap deskripsi alat yang tersedia, memberikan skor relevansi, lalu memilih yang paling sesuai. Model kemudian membuat panggilan fungsi terstruktur dengan parameter yang benar — dalam kasus ini, mengatur `location` ke `"Seattle"`.
-Jika tidak ada alat yang cocok dengan permintaan pengguna, model kembali menjawab dari pengetahuannya sendiri. Jika ada beberapa alat cocok, model memilih yang paling spesifik.
+Jika tidak ada alat yang cocok dengan permintaan pengguna, model kembali menjawab berdasarkan pengetahuannya sendiri. Jika ada beberapa alat yang cocok, ia memilih yang paling spesifik.
-
+
-*Model mengevaluasi semua alat tersedia terhadap maksud pengguna dan memilih yang paling cocok — ini sebabnya menulis deskripsi alat yang jelas dan spesifik sangat penting.*
+*Model mengevaluasi setiap alat yang tersedia terhadap niat pengguna dan memilih yang paling tepat — ini sebabnya menulis deskripsi alat yang jelas dan spesifik penting.*
### Eksekusi
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-Spring Boot secara otomatis mengalirkan interface deklaratif `@AiService` dengan semua alat terdaftar, dan LangChain4j mengeksekusi panggilan alat secara otomatis. Di balik layar, panggilan alat lengkap berjalan melalui enam tahap — dari pertanyaan bahasa alami pengguna sampai jawaban bahasa alami kembali:
+Spring Boot secara otomatis menghubungkan interface deklaratif `@AiService` dengan semua alat yang terdaftar, dan LangChain4j mengeksekusi panggilan alat secara otomatis. Di balik layar, panggilan alat lengkap melalui enam tahap — dari pertanyaan bahasa alami pengguna hingga jawaban dalam bahasa alami kembali:
-
+
-*Alur lengkap — pengguna mengajukan pertanyaan, model memilih alat, LangChain4j mengeksekusi alat, dan model menggabungkan hasilnya ke respons alami.*
+*Alur ujung ke ujung — pengguna menanyakan pertanyaan, model memilih alat, LangChain4j mengeksekusi, dan model menggabungkan hasilnya menjadi respons alami.*
-Jika Anda menjalankan [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) di Modul 00, Anda sudah melihat pola ini beraksi — alat `Calculator` juga dipanggil dengan cara yang sama. Diagram urutan di bawah menunjukkan persis apa yang terjadi di balik layar selama demo:
+Di balik layar, `AiServices` menjalankan loop pemanggilan alat yang sama untuk alat apa pun — di sini digambarkan dengan kalkulator sederhana. Diagram urutan di bawah menunjukkan persis apa yang terjadi:
-
+
-*Loop pemanggilan alat dari demo Quick Start — `AiServices` mengirimkan pesan dan skema alat ke LLM, LLM membalas dengan panggilan fungsi seperti `add(42, 58)`, LangChain4j mengeksekusi metode `Calculator` secara lokal, dan mengembalikan hasil untuk jawaban akhir.*
+*Loop pemanggilan alat — `AiServices` mengirim pesan dan skema alat ke LLM, LLM membalas dengan panggilan fungsi seperti `add(42, 58)`, LangChain4j mengeksekusi metode `Calculator` secara lokal, dan memberikan hasil kembali untuk jawaban akhir.*
-> **🤖 Coba dengan [GitHub Copilot](https://github.com/features/copilot) Chat:** Buka [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) dan tanyakan:
-> - "Bagaimana pola ReAct bekerja dan mengapa efektif untuk agen AI?"
-> - "Bagaimana agen memutuskan alat mana yang digunakan dan dalam urutan apa?"
-> - "Apa yang terjadi jika eksekusi alat gagal - bagaimana menangani kesalahan dengan baik?"
+> **🤖 Coba dengan [GitHub Copilot](https://github.com/features/copilot) Chat:** Buka [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) dan tanyakan:
+> - "Bagaimana pola ReAct bekerja dan mengapa efektif untuk agen AI?"
+> - "Bagaimana agen memutuskan alat mana yang digunakan dan dalam urutan apa?"
+> - "Apa yang terjadi jika eksekusi alat gagal - bagaimana cara menangani kesalahan dengan kuat?"
### Pembuatan Respons
-Model menerima data cuaca dan memformatnya menjadi respons bahasa alami untuk pengguna.
+Model menerima data cuaca dan memformatnya menjadi jawaban bahasa alami untuk pengguna.
### Arsitektur: Spring Boot Auto-Wiring
-Modul ini menggunakan integrasi LangChain4j dengan Spring Boot melalui interface deklaratif `@AiService`. Saat startup, Spring Boot menemukan setiap `@Component` yang memiliki metode `@Tool`, bean `ChatModel`, dan `ChatMemoryProvider` — lalu mengalirkan semuanya ke satu interface `Assistant` tanpa kode boilerplate.
+Modul ini menggunakan integrasi Spring Boot LangChain4j dengan interface deklaratif `@AiService`. Saat startup, Spring Boot menemukan setiap `@Component` yang berisi metode `@Tool`, bean `ChatModel` Anda, dan `ChatMemoryProvider` — lalu menghubungkan semuanya menjadi interface `Assistant` tunggal tanpa kode boilerplate.
-
+
-*Interface @AiService menggabungkan ChatModel, komponen alat, dan penyedia memori — Spring Boot menangani pengaliran otomatis.*
+*Interface @AiService mengikat ChatModel, komponen alat, dan penyedia memori — Spring Boot menangani penghubungan semuanya secara otomatis.*
-Berikut siklus lengkap permintaan sebagai diagram urutan — dari permintaan HTTP lewat controller, service, proxy auto-wired, sampai eksekusi alat dan kembali:
+Berikut siklus hidup permintaan lengkap dalam diagram urutan — dari permintaan HTTP melalui controller, service, dan proxy auto-wired, sampai eksekusi alat dan kembali:
-
+
-*Siklus lengkap permintaan Spring Boot — permintaan HTTP mengalir melalui controller dan service ke proxy Assistant auto-wired, yang mengorkestrasi LLM dan pemanggilan alat secara otomatis.*
+*Siklus hidup permintaan Spring Boot lengkap — permintaan HTTP mengalir melalui controller dan service ke proxy Assistant auto-wired, yang mengorkestrasi LLM dan pemanggilan alat secara otomatis.*
Manfaat utama pendekatan ini:
-- **Spring Boot auto-wiring** — ChatModel dan alat otomatis dimasukkan
-- **Pola @MemoryId** — Manajemen memori berbasis sesi otomatis
-- **Satu instance** — Assistant dibuat sekali dan dipakai ulang untuk kinerja lebih baik
-- **Eksekusi tipe aman** — Metode Java dipanggil langsung dengan konversi tipe
-- **Orkestrasi multi-putaran** — Menangani perangkainan alat secara otomatis
-- **Tanpa boilerplate** — Tidak perlu panggilan manual `AiServices.builder()` atau HashMap memori
+- **Spring Boot auto-wiring** — ChatModel dan alat disuntikkan otomatis
+- **Pola @MemoryId** — Manajemen memori berbasis sesi otomatis
+- **Instansi tunggal** — Assistant dibuat sekali dan digunakan ulang untuk performa baik
+- **Eksekusi tipe-safenya** — Metode Java dipanggil langsung dengan konversi tipe
+- **Orkestrasi multi-langkah** — Menangani rangkaian alat secara otomatis
+- **Nol boilerplate** — Tanpa panggilan manual `AiServices.builder()` atau HashMap memori
-Pendekatan alternatif (manual `AiServices.builder()`) membutuhkan kode lebih banyak dan kehilangan manfaat integrasi Spring Boot.
+Pendekatan alternatif (manual `AiServices.builder()`) memerlukan kode lebih banyak dan kehilangan manfaat integrasi Spring Boot.
-## Merangkai Alat
+## Rangkaian Alat
-**Merangkai Alat** — Kekuatan sesungguhnya agen berbasis alat terlihat saat satu pertanyaan memerlukan beberapa alat. Tanya "Bagaimana cuaca di Seattle dalam Fahrenheit?" dan agen secara otomatis menggabungkan dua alat: pertama memanggil `getCurrentWeather` untuk suhu dalam Celsius, lalu meneruskan hasil itu ke `celsiusToFahrenheit` untuk konversi — semua dalam satu langkah percakapan.
+**Rangkaian Alat** — Kekuatan sebenarnya dari agen berbasis alat terlihat saat satu pertanyaan memerlukan banyak alat. Tanyakan "Bagaimana cuaca di Seattle dalam Fahrenheit?" dan agen secara otomatis menghubungkan dua alat: pertama memanggil `getCurrentWeather` untuk mendapatkan suhu dalam Celsius, kemudian meneruskan nilai itu ke `celsiusToFahrenheit` untuk konversi — semua dalam satu putaran percakapan.
-
+
-*Merangkai alat sedang berjalan — agen memanggil getCurrentWeather dulu, lalu mengalirkan hasil Celsius ke celsiusToFahrenheit, dan memberikan jawaban gabungan.*
+*Rangkaian alat dalam aksi — agen memanggil getCurrentWeather terlebih dahulu, lalu memasukkan hasil Celsius ke celsiusToFahrenheit, dan memberi jawaban gabungan.*
-**Penanganan Gagal dengan Anggun** — Tanya cuaca di kota yang tidak ada dalam data tiruan. Alat mengembalikan pesan kesalahan, dan AI menjelaskan bahwa ia tidak bisa membantu daripada mengalami crash. Alat gagal dengan aman. Diagram berikut membandingkan dua pendekatan — dengan penanganan kesalahan yang tepat, agen menangkap pengecualian dan merespon dengan penjelasan, sementara tanpa penanganan aplikasi keseluruhan crash:
+**Kegagalan yang Elegan** — Minta cuaca di kota yang tidak ada dalam data tiruan. Alat mengembalikan pesan kesalahan, dan AI menjelaskan bahwa ia tidak bisa membantu daripada aplikasi langsung crash. Alat gagal dengan aman. Diagram di bawah membandingkan dua pendekatan — dengan penanganan kesalahan yang tepat, agen menangkap pengecualian dan menjawab dengan penjelasan yang membantu, sedangkan tanpa itu aplikasi langsung crash:
-
+
-*Saat alat gagal, agen menangkap kesalahan dan merespon dengan penjelasan yang membantu daripada mengalami crash.*
+*Saat alat gagal, agen menangkap kesalahan dan merespons dengan penjelasan yang membantu daripada mengalami crash.*
-Ini terjadi dalam satu langkah percakapan. Agen mengorkestrasi banyak panggilan alat secara mandiri.
+Ini terjadi dalam satu putaran percakapan. Agen mengorkestrasi banyak panggilan alat secara mandiri.
-## Menjalankan Aplikasi
+## Jalankan Aplikasi
-**Verifikasi pemasangan:**
+**Verifikasi penerapan:**
-Pastikan file `.env` ada di direktori root berisi kredensial Azure (dibuat saat Modul 01). Jalankan ini dari direktori modul (`04-tools/`):
+Pastikan file `.env` ada di direktori root dengan kredensial Azure (dibuat selama Modul 01). Jalankan ini dari direktori modul (`04-tools/`):
-**Bash:**
+**Bash:**
```bash
cat ../.env # Harus menampilkan AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
-Get-Content ..\.env # Harus menunjukkan AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+Get-Content ..\.env # Harus menampilkan AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
+
**Mulai aplikasi:**
-> **Catatan:** Jika Anda sudah menjalankan semua aplikasi menggunakan `./start-all.sh` dari direktori root (seperti dijelaskan di Modul 01), modul ini sudah berjalan di port 8084. Anda bisa melewati perintah mulai di bawah dan langsung menuju http://localhost:8084.
+> **Catatan:** Jika Anda sudah memulai semua aplikasi menggunakan `./start-all.sh` dari direktori root (seperti dijelaskan di Modul 01), modul ini sudah berjalan pada port 8084. Anda dapat melewati perintah mulai di bawah dan langsung buka http://localhost:8084.
-**Opsi 1: Menggunakan Spring Boot Dashboard (Disarankan untuk pengguna VS Code)**
+**Opsi 1: Menggunakan Spring Boot Dashboard (Direkomendasikan untuk pengguna VS Code)**
-Dev container menyertakan ekstensi Spring Boot Dashboard, yang menyediakan antarmuka visual untuk mengelola semua aplikasi Spring Boot. Anda dapat menemukannya di Activity Bar di sisi kiri VS Code (cari ikon Spring Boot).
+Kontainer pengembangan mencakup ekstensi Spring Boot Dashboard, yang menyediakan antarmuka visual untuk mengelola semua aplikasi Spring Boot. Anda dapat menemukannya di Activity Bar di sisi kiri VS Code (cari ikon Spring Boot).
-Dari Spring Boot Dashboard, Anda dapat:
-- Melihat semua aplikasi Spring Boot yang tersedia di workspace
-- Memulai/menghentikan aplikasi dengan satu klik
-- Melihat log aplikasi secara real-time
+Dari Spring Boot Dashboard, Anda bisa:
+- Melihat semua aplikasi Spring Boot yang tersedia di workspace
+- Memulai/menyerahkan aplikasi dengan satu klik
+- Melihat log aplikasi secara real-time
- Memantau status aplikasi
-Cukup klik tombol putar di samping "tools" untuk memulai modul ini, atau mulai semua modul sekaligus.
-Ini tampilan Spring Boot Dashboard di VS Code:
+Cukup klik tombol putar di sebelah "tools" untuk memulai modul ini, atau mulai semua modul sekaligus.
+Berikut tampilan Spring Boot Dashboard di VS Code:
-*Spring Boot Dashboard di VS Code — mulai, hentikan, dan pantau semua modul dari satu tempat*
+*Spring Boot Dashboard di VS Code — mulai, berhenti, dan monitor semua modul dari satu tempat*
**Opsi 2: Menggunakan skrip shell**
@@ -272,13 +272,13 @@ Kedua skrip secara otomatis memuat variabel lingkungan dari file `.env` di root
> mvn clean package -DskipTests
> ```
-Buka http://localhost:8084 di peramban Anda.
+Buka http://localhost:8084 di browser Anda.
-**Untuk menghentikan:**
+**Untuk berhenti:**
**Bash:**
```bash
-./stop.sh # Hanya modul ini
+./stop.sh # Modul ini saja
# Atau
cd .. && ./stop-all.sh # Semua modul
```
@@ -292,42 +292,42 @@ cd ..; .\stop-all.ps1 # Semua modul
## Menggunakan Aplikasi
-Aplikasi menyediakan antarmuka web di mana Anda dapat berinteraksi dengan agen AI yang memiliki akses ke alat cuaca dan konversi suhu. Ini tampilan antarmukanya — termasuk contoh cepat mulai dan panel obrolan untuk mengirim permintaan:
+Aplikasi menyediakan antarmuka web di mana Anda dapat berinteraksi dengan agen AI yang memiliki akses ke alat cuaca dan konversi suhu. Berikut tampilan antarmukanya — termasuk contoh cepat dan panel obrolan untuk mengirim permintaan:
-*Antarmuka AI Agent Tools - contoh cepat dan antarmuka obrolan untuk berinteraksi dengan alat*
+*Antarmuka Alat Agen AI - contoh cepat dan antarmuka obrolan untuk berinteraksi dengan alat*
### Coba Penggunaan Alat Sederhana
-Mulai dengan permintaan sederhana: "Konversikan 100 derajat Fahrenheit ke Celsius". Agen mengenali bahwa ia membutuhkan alat konversi suhu, memanggilnya dengan parameter yang benar, dan mengembalikan hasilnya. Perhatikan betapa alami rasanya — Anda tidak menspesifikasikan alat mana yang harus digunakan atau bagaimana memanggilnya.
+Mulai dengan permintaan sederhana: "Konversi 100 derajat Fahrenheit ke Celsius". Agen mengenali bahwa ia memerlukan alat konversi suhu, memanggilnya dengan parameter yang tepat, dan mengembalikan hasilnya. Perhatikan betapa alami cara ini - Anda tidak perlu menentukan alat mana yang digunakan atau bagaimana memanggilnya.
### Uji Rangkaian Alat
-Sekarang coba yang lebih kompleks: "Bagaimana cuaca di Seattle dan konversikan ke Fahrenheit?" Saksikan agen bekerja melalui ini dalam beberapa langkah. Pertama ia mendapatkan cuaca (yang mengembalikan Celsius), mengenali ia perlu mengubah ke Fahrenheit, memanggil alat konversi, dan menggabungkan kedua hasil tersebut menjadi satu respons.
+Sekarang coba sesuatu yang lebih kompleks: "Bagaimana cuaca di Seattle dan konversikan ke Fahrenheit?" Saksikan bagaimana agen mengerjakan ini dalam beberapa langkah. Pertama mengambil cuaca (yang mengembalikan dalam Celsius), mengenali perlu mengonversi ke Fahrenheit, memanggil alat konversi, dan menggabungkan kedua hasil menjadi satu respons.
### Lihat Alur Percakapan
-Antarmuka obrolan menyimpan riwayat percakapan, memungkinkan Anda melakukan interaksi multi-langkah. Anda dapat melihat semua kueri dan respons sebelumnya, sehingga mudah melacak percakapan dan memahami bagaimana agen membangun konteks melalui beberapa pertukaran.
+Antarmuka obrolan menyimpan riwayat percakapan, memungkinkan Anda melakukan interaksi berputar-putar. Anda bisa melihat semua pertanyaan dan jawaban sebelumnya, membuatnya mudah melacak percakapan dan memahami bagaimana agen membangun konteks selama beberapa pertukaran.
-*Percakapan multi-langkah yang menunjukkan konversi sederhana, pencarian cuaca, dan rantai alat*
+*Percakapan multi-putar yang menunjukkan konversi sederhana, pencarian cuaca, dan rangkaian alat*
-### Eksperimen dengan Berbagai Permintaan
+### Eksperimen dengan Permintaan Berbeda
Coba berbagai kombinasi:
- Pencarian cuaca: "Bagaimana cuaca di Tokyo?"
- Konversi suhu: "Berapa 25°C dalam Kelvin?"
-- Kueri gabungan: "Periksa cuaca di Paris dan beri tahu jika suhunya di atas 20°C"
+- Pertanyaan gabungan: "Periksa cuaca di Paris dan beri tahu jika di atas 20°C"
-Perhatikan bagaimana agen menginterpretasikan bahasa alami dan memetakan ke panggilan alat yang sesuai.
+Perhatikan bagaimana agen mengartikan bahasa alami dan memetakan ke panggilan alat yang sesuai.
-## Konsep Utama
+## Konsep Kunci
-### Pola ReAct (Reasoning and Acting)
+### Pola ReAct (Penalaran dan Bertindak)
-Agen bergantian antara berpikir (memutuskan apa yang harus dilakukan) dan bertindak (menggunakan alat). Pola ini memungkinkan pemecahan masalah secara mandiri, bukan hanya merespon instruksi.
+Agen bergantian antara penalaran (memutuskan apa yang harus dilakukan) dan bertindak (menggunakan alat). Pola ini memungkinkan pemecahan masalah secara mandiri daripada hanya merespon instruksi.
### Deskripsi Alat Penting
@@ -335,53 +335,53 @@ Kualitas deskripsi alat Anda langsung memengaruhi seberapa baik agen menggunakan
### Manajemen Sesi
-Anotasi `@MemoryId` memungkinkan manajemen memori berbasis sesi secara otomatis. Setiap ID sesi mendapatkan instansi `ChatMemory` sendiri yang dikelola oleh bean `ChatMemoryProvider`, sehingga banyak pengguna dapat berinteraksi dengan agen sekaligus tanpa percakapan mereka bercampur. Diagram berikut menunjukkan bagaimana banyak pengguna diarahkan ke penyimpanan memori terisolasi berdasarkan ID sesi mereka:
+Anotasi `@MemoryId` memungkinkan manajemen memori berbasis sesi secara otomatis. Setiap ID sesi mendapatkan instansi `ChatMemory` yang dikelola oleh bean `ChatMemoryProvider`, sehingga banyak pengguna dapat berinteraksi dengan agen secara bersamaan tanpa percakapan tercampur. Diagram berikut menunjukkan bagaimana banyak pengguna diarahkan ke penyimpanan memori terisolasi berdasarkan ID sesi mereka:
*Setiap ID sesi memetakan ke riwayat percakapan yang terisolasi — pengguna tidak pernah melihat pesan satu sama lain.*
-### Penanganan Kesalahan
+### Penanganan Error
-Alat bisa gagal — API bisa timeout, parameter mungkin tidak valid, layanan eksternal bisa mati. Agen produksi membutuhkan penanganan kesalahan supaya model dapat menjelaskan masalah atau mencoba alternatif daripada membuat aplikasi macet. Saat alat melempar pengecualian, LangChain4j menangkapnya dan mengirimkan pesan kesalahan kembali ke model, yang kemudian dapat menjelaskan masalah dalam bahasa alami.
+Alat dapat gagal — API timeout, parameter mungkin tidak valid, layanan eksternal mati. Agen produksi memerlukan penanganan error agar model dapat menjelaskan masalah atau mencoba alternatif daripada aplikasi keseluruhan crash. Ketika alat melempar pengecualian, LangChain4j menangkapnya dan mengirim pesan error kembali ke model, yang kemudian dapat menjelaskan masalah dalam bahasa alami.
## Alat yang Tersedia
-Diagram di bawah menunjukkan ekosistem luas alat yang dapat Anda bangun. Modul ini mendemonstrasikan alat cuaca dan suhu, tapi pola `@Tool` yang sama berlaku untuk metode Java apa pun — dari kueri basis data hingga pemrosesan pembayaran.
+Diagram di bawah ini menunjukkan ekosistem luas alat yang dapat Anda bangun. Modul ini menampilkan alat cuaca dan suhu, tetapi pola `@Tool` yang sama berlaku untuk metode Java manapun — dari kueri database hingga pemrosesan pembayaran.
-*Metode Java apapun yang dianotasikan dengan @Tool menjadi tersedia untuk AI — pola ini meluas ke database, API, email, operasi file, dan lainnya.*
+*Metode Java manapun yang dianotasi dengan @Tool tersedia untuk AI — pola ini meluas ke database, API, email, operasi file, dan lainnya.*
## Kapan Menggunakan Agen Berbasis Alat
-Tidak setiap permintaan membutuhkan alat. Keputusan tergantung apakah AI perlu berinteraksi dengan sistem eksternal atau dapat menjawab dari pengetahuannya sendiri. Panduan berikut merangkum kapan alat memberikan nilai tambah dan kapan tidak diperlukan:
+Tidak semua permintaan membutuhkan alat. Keputusan tergantung apakah AI perlu berinteraksi dengan sistem eksternal atau dapat menjawab dari pengetahuannya sendiri. Panduan berikut merangkum kapan alat memberikan nilai dan kapan tidak diperlukan:
-*Panduan keputusan cepat — alat untuk data waktu nyata, perhitungan, dan aksi; pengetahuan umum dan tugas kreatif tidak memerlukannya.*
+*Panduan singkat — alat untuk data real-time, kalkulasi, dan aksi; pengetahuan umum dan tugas kreatif tidak membutuhkannya.*
## Alat vs RAG
-Modul 03 dan 04 keduanya memperluas kemampuan AI, tapi dengan cara yang sangat berbeda. RAG memberi model akses ke **pengetahuan** dengan mengambil dokumen. Alat memberi model kemampuan mengambil **aksi** dengan memanggil fungsi. Diagram di bawah membandingkan dua pendekatan ini secara berdampingan — dari cara kerja setiap alur hingga kelebihan dan kekurangannya:
+Modul 03 dan 04 sama-sama memperluas kemampuan AI, tetapi dengan cara fundamental yang berbeda. RAG memberi model akses ke **pengetahuan** dengan mengambil dokumen. Alat memberi model kemampuan untuk mengambil **aksi** dengan memanggil fungsi. Diagram berikut membandingkan kedua pendekatan — dari cara kerja setiap alur hingga trade-off di antara keduanya:
-*RAG mengambil informasi dari dokumen statis — Alat menjalankan aksi dan mengambil data dinamis waktu nyata. Banyak sistem produksi menggabungkan keduanya.*
+*RAG mengambil informasi dari dokumen statis — Alat menjalankan aksi dan mengambil data dinamis real-time. Banyak sistem produksi menggabungkan keduanya.*
-Dalam praktiknya, banyak sistem produksi menggabungkan kedua pendekatan: RAG untuk mendasarkan jawaban pada dokumentasi Anda, dan Alat untuk mengambil data langsung atau melakukan operasi.
+Dalam praktiknya, banyak sistem produksi menggabungkan kedua pendekatan: RAG untuk mendasari jawaban dalam dokumentasi Anda, dan Alat untuk mengambil data langsung atau melakukan operasi.
-## Langkah Selanjutnya
+## Langkah Berikutnya
**Modul Berikutnya:** [05-mcp - Model Context Protocol (MCP)](../05-mcp/README.md)
---
-**Navigasi:** [← Sebelumnya: Modul 03 - RAG](../03-rag/README.md) | [Kembali ke Utama](../README.md) | [Berikutnya: Modul 05 - MCP →](../05-mcp/README.md)
+**Navigasi:** [← Sebelumnya: Modul 03 - RAG](../03-rag/README.md) | [Kembali ke Beranda](../README.md) | [Selanjutnya: Modul 05 - MCP →](../05-mcp/README.md)
---
-**Penafian**:
-Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai akurasi, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sahih. Untuk informasi penting, disarankan untuk menggunakan terjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau kesalahan interpretasi yang timbul dari penggunaan terjemahan ini.
+**Penafian**:
+Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
\ No newline at end of file
diff --git a/translations/id/README.md b/translations/id/README.md
index cc14f116d..a3437b3e1 100644
--- a/translations/id/README.md
+++ b/translations/id/README.md
@@ -2,7 +2,7 @@
# LangChain4j untuk Pemula
-Sebuah kursus untuk membangun aplikasi AI dengan LangChain4j dan Azure OpenAI GPT-5.2, dari obrolan dasar hingga agen AI.
+Sebuah kursus untuk membangun aplikasi AI dengan LangChain4j dan Azure OpenAI GPT-5.2, dari chat dasar hingga agen AI.
### 🌐 Dukungan Multi-Bahasa
@@ -11,9 +11,9 @@ Sebuah kursus untuk membangun aplikasi AI dengan LangChain4j dan Azure OpenAI GP
[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](./README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
-> **Lebih Suka Mengkloning Secara Lokal?**
+> **Lebih suka Clone Secara Lokal?**
>
-> Repositori ini mencakup lebih dari 50 terjemahan bahasa yang secara signifikan meningkatkan ukuran unduhan. Untuk mengkloning tanpa terjemahan, gunakan sparse checkout:
+> Repositori ini mencakup 50+ terjemahan bahasa yang secara signifikan meningkatkan ukuran unduhan. Untuk meng-clone tanpa terjemahan, gunakan sparse checkout:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -34,56 +34,55 @@ Sebuah kursus untuk membangun aplikasi AI dengan LangChain4j dan Azure OpenAI GP
## Daftar Isi
-1. [Mulai Cepat](00-quick-start/README.md) - Mulai dengan LangChain4j
-2. [Pengantar](01-introduction/README.md) - Pelajari dasar-dasar LangChain4j
-3. [Rekayasa Prompt](02-prompt-engineering/README.md) - Kuasai desain prompt yang efektif
-4. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Bangun sistem berbasis pengetahuan yang cerdas
-5. [Alat](04-tools/README.md) - Integrasikan alat eksternal dan asisten sederhana
-6. [MCP (Model Context Protocol)](05-mcp/README.md) - Bekerja dengan Model Context Protocol (MCP) dan modul Agentic
+1. [Pengantar](01-introduction/README.md) - Pelajari dasar-dasar LangChain4j
+2. [Prompt Engineering](02-prompt-engineering/README.md) - Kuasai desain prompt yang efektif
+3. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Bangun sistem berbasis pengetahuan yang cerdas
+4. [Tools](04-tools/README.md) - Integrasikan alat eksternal dan asisten sederhana
+5. [MCP (Model Context Protocol)](05-mcp/README.md) - Bekerja dengan Model Context Protocol (MCP) dan modul Agentic
-### Video Tutorial
+### Video Panduan
-Setiap modul memiliki sesi langsung pendamping di mana kami berjalan melalui konsep dan kode langkah demi langkah.
+Setiap modul memiliki sesi live pendamping dimana kita membahas konsep dan kode langkah demi langkah.
| Modul | Video |
|--------|-------|
| 01 - Pengantar | [Memulai dengan LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
-| 02 - Rekayasa Prompt | [Rekayasa Prompt dengan LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
+| 02 - Prompt Engineering | [Prompt Engineering dengan LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
| 03 - RAG | [RAG dengan LangChain4j](https://www.youtube.com/watch?v=_olq75ZH_eY) |
-| 04 - Alat & 05 - MCP | [Agen AI dengan Alat dan MCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
+| 04 - Tools & 05 - MCP | [Agen AI dengan Tools dan MCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
---
## Jalur Pembelajaran
-**Baru di LangChain4j?** Lihat [Glosarium](docs/GLOSSARY.md) untuk definisi istilah dan konsep kunci.
+**Baru mengenal LangChain4j?** Lihat [Glosarium](docs/GLOSSARY.md) untuk definisi istilah dan konsep kunci.
> **Mulai Cepat**
1. Fork repositori ini ke akun GitHub Anda
2. Klik **Code** → tab **Codespaces** → **...** → **New with options...**
-3. Gunakan default – ini akan memilih container Pengembangan yang dibuat untuk kursus ini
+3. Gunakan pengaturan default – ini akan memilih kontainer Pengembangan yang dibuat untuk kursus ini
4. Klik **Create codespace**
-5. Tunggu 5-10 menit sampai lingkungan siap
-6. Langsung lompat ke [Mulai Cepat](./00-quick-start/README.md) untuk memulai!
+5. Tunggu 5-10 menit hingga lingkungan siap
+6. Langsung ke [Pengantar](./01-introduction/README.md) untuk memulai!
Setelah menyelesaikan modul-modul, jelajahi [Panduan Pengujian](docs/TESTING.md) untuk melihat konsep pengujian LangChain4j secara langsung.
-> **Catatan:** Pelatihan ini menggunakan baik GitHub Models maupun Azure OpenAI. Modul [Mulai Cepat](00-quick-start/README.md) menggunakan GitHub Models (tidak perlu langganan Azure), sementara modul 1-5 menggunakan Azure OpenAI. Mulailah dengan [akun Azure GRATIS](https://aka.ms/azure-free-account) jika Anda belum memilikinya.
+> **Catatan:** Pelatihan ini menggunakan Azure OpenAI. Mulailah dengan [akun Azure GRATIS](https://aka.ms/azure-free-account) jika Anda belum memilikinya.
## Belajar dengan GitHub Copilot
-Untuk cepat mulai coding, buka proyek ini di GitHub Codespace atau IDE lokal Anda dengan devcontainer yang disediakan. Devcontainer yang digunakan dalam kursus ini sudah dikonfigurasi sebelumnya dengan GitHub Copilot untuk pemrograman berpasangan AI.
+Untuk memulai pengkodean dengan cepat, buka proyek ini di GitHub Codespace atau IDE lokal Anda dengan devcontainer yang disediakan. Devcontainer yang digunakan dalam kursus ini sudah dikonfigurasi sebelumnya dengan GitHub Copilot untuk pemrograman berpasangan AI.
-Setiap contoh kode menyertakan pertanyaan yang disarankan yang dapat Anda tanyakan ke GitHub Copilot untuk memperdalam pemahaman Anda. Cari prompt 💡/🤖 di:
+Setiap contoh kode mencakup pertanyaan yang disarankan yang dapat Anda tanyakan ke GitHub Copilot untuk memperdalam pemahaman Anda. Cari prompt 💡/🤖 di:
-- **Header file Java** - Pertanyaan khusus untuk setiap contoh
+- **Header file Java** - Pertanyaan spesifik untuk setiap contoh
- **README modul** - Prompt eksplorasi setelah contoh kode
-**Cara menggunakan:** Buka file kode apa pun dan tanyakan pertanyaan yang disarankan ke Copilot. Ia memiliki konteks penuh dari basis kode dan dapat menjelaskan, memperluas, serta menyarankan alternatif.
+**Cara menggunakan:** Buka file kode apa saja dan tanyakan pertanyaan yang disarankan kepada Copilot. Ia memiliki konteks penuh dari basis kode dan bisa menjelaskan, memperluas, dan menyarankan alternatif.
-Ingin belajar lebih banyak? Lihat [Copilot untuk Pemrograman Berpasangan AI](https://aka.ms/GitHubCopilotAI).
+Ingin belajar lebih lanjut? Lihat [Copilot untuk Pemrograman Berpasangan AI](https://aka.ms/GitHubCopilotAI).
## Sumber Daya Tambahan
@@ -115,7 +114,7 @@ Ingin belajar lebih banyak? Lihat [Copilot untuk Pemrograman Berpasangan AI](htt
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
+[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
@@ -134,7 +133,7 @@ Jika Anda mengalami kesulitan atau memiliki pertanyaan tentang membangun aplikas
[](https://aka.ms/foundry/discord)
-Jika Anda memiliki umpan balik produk atau mengalami kesalahan saat membangun, kunjungi:
+Jika Anda memiliki masukan produk atau menemukan kesalahan saat membangun, kunjungi:
[](https://aka.ms/foundry/forum)
@@ -145,6 +144,6 @@ Lisensi MIT - Lihat file [LICENSE](../../LICENSE) untuk detail.
---
-**Penolakan**:
-Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk keakuratan, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang berwenang. Untuk informasi yang penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau salah tafsir yang timbul dari penggunaan terjemahan ini.
+**Penafian**:
+Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
\ No newline at end of file
diff --git a/translations/id/docs/GLOSSARY.md b/translations/id/docs/GLOSSARY.md
index 96d2e9fed..2e159013b 100644
--- a/translations/id/docs/GLOSSARY.md
+++ b/translations/id/docs/GLOSSARY.md
@@ -2,65 +2,65 @@
## Daftar Isi
-- [Konsep Inti](../../../docs)
-- [Komponen LangChain4j](../../../docs)
-- [Konsep AI/ML](../../../docs)
-- [Guardrails](../../../docs)
-- [Rekayasa Prompt](../../../docs)
-- [RAG (Retrieval-Augmented Generation)](../../../docs)
-- [Agen dan Alat](../../../docs)
-- [Modul Agenik](../../../docs)
-- [Protokol Konteks Model (MCP)](../../../docs)
-- [Layanan Azure](../../../docs)
-- [Pengujian dan Pengembangan](../../../docs)
+- [Konsep Inti](#konsep-inti)
+- [Komponen LangChain4j](#komponen-langchain4j)
+- [Konsep AI/ML](#konsep-aiml)
+- [Guardrails](#guardrails)
+- [Rekayasa Prompt](#prompt-engineering---module-02)
+- [RAG (Retrieval-Augmented Generation)](#rag-retrieval-augmented-generation---module-03)
+- [Agen dan Alat](#agents-and-tools---module-04)
+- [Modul Agentic](#agentic-module---module-05)
+- [Protokol Konteks Model (MCP)](#model-context-protocol-mcp---module-05)
+- [Layanan Azure](#azure-services---module-01)
+- [Pengujian dan Pengembangan](#testing-and-development---testing-guide)
Referensi cepat untuk istilah dan konsep yang digunakan sepanjang kursus.
## Konsep Inti
-**AI Agent** - Sistem yang menggunakan AI untuk bernalar dan bertindak secara mandiri. [Module 04](../04-tools/README.md)
+**Agen AI** - Sistem yang menggunakan AI untuk bernalar dan bertindak secara otonom. [Modul 04](../04-tools/README.md)
-**Chain** - Urutan operasi di mana keluaran menjadi masukan langkah berikutnya.
+**Rantai** - Urutan operasi di mana keluaran menjadi masukan langkah berikutnya.
-**Chunking** - Memecah dokumen menjadi bagian lebih kecil. Biasanya: 300-500 token dengan tumpang tindih. [Module 03](../03-rag/README.md)
+**Pengchunkan** - Memecah dokumen menjadi potongan-potongan lebih kecil. Umum: 300-500 token dengan tumpang tindih. [Modul 03](../03-rag/README.md)
-**Context Window** - Maksimum token yang dapat diproses model. GPT-5.2: 400K token (hingga 272K input, 128K output).
+**Jendela Konteks** - Jumlah token maksimum yang dapat diproses model. GPT-5.2: 400K token (hingga 272K masukan, 128K keluaran).
-**Embeddings** - Vektor numerik yang mewakili makna teks. [Module 03](../03-rag/README.md)
+**Embedding** - Vektor numerik yang merepresentasikan makna teks. [Modul 03](../03-rag/README.md)
-**Function Calling** - Model menghasilkan permintaan terstruktur untuk memanggil fungsi eksternal. [Module 04](../04-tools/README.md)
+**Pemanggilan Fungsi** - Model menghasilkan permintaan terstruktur untuk memanggil fungsi eksternal. [Modul 04](../04-tools/README.md)
-**Hallucination** - Saat model menghasilkan informasi yang salah tapi tampak masuk akal.
+**Halusinasi** - Ketika model menghasilkan informasi yang salah namun masuk akal.
-**Prompt** - Masukan teks untuk model bahasa. [Module 02](../02-prompt-engineering/README.md)
+**Prompt** - Input teks untuk model bahasa. [Modul 02](../02-prompt-engineering/README.md)
-**Semantic Search** - Pencarian berdasarkan makna dengan embeddings, bukan kata kunci. [Module 03](../03-rag/README.md)
+**Pencarian Semantik** - Pencarian berdasarkan makna menggunakan embedding, bukan kata kunci. [Modul 03](../03-rag/README.md)
-**Stateful vs Stateless** - Stateless: tanpa memori. Stateful: menyimpan riwayat percakapan. [Module 01](../01-introduction/README.md)
+**Stateful vs Stateless** - Stateless: tanpa memori. Stateful: mempertahankan riwayat percakapan. [Modul 01](../01-introduction/README.md)
-**Tokens** - Unit dasar teks yang diproses model. Mempengaruhi biaya dan batasan. [Module 01](../01-introduction/README.md)
+**Token** - Unit dasar teks yang diproses model. Mempengaruhi biaya dan batasan. [Modul 01](../01-introduction/README.md)
-**Tool Chaining** - Eksekusi alat berurutan di mana keluaran memberi informasi untuk panggilan berikutnya. [Module 04](../04-tools/README.md)
+**Rantai Alat** - Eksekusi alat secara berurutan di mana keluaran menjadi masukan berikutnya. [Modul 04](../04-tools/README.md)
## Komponen LangChain4j
-**AiServices** - Membuat antarmuka layanan AI yang tipe-safenya terjamin.
+**AiServices** - Membuat antarmuka layanan AI yang tipe-aman.
**OpenAiOfficialChatModel** - Klien terpadu untuk model OpenAI dan Azure OpenAI.
-**OpenAiOfficialEmbeddingModel** - Membuat embeddings menggunakan klien OpenAI Official (mendukung OpenAI dan Azure OpenAI).
+**OpenAiOfficialEmbeddingModel** - Membuat embedding menggunakan klien OpenAI Official (mendukung OpenAI dan Azure OpenAI).
**ChatModel** - Antarmuka inti untuk model bahasa.
-**ChatMemory** - Menyimpan riwayat percakapan.
+**ChatMemory** - Mempertahankan riwayat percakapan.
-**ContentRetriever** - Menemukan potongan dokumen yang relevan untuk RAG.
+**ContentRetriever** - Menemukan potongan dokumen relevan untuk RAG.
**DocumentSplitter** - Memecah dokumen menjadi potongan.
**EmbeddingModel** - Mengubah teks menjadi vektor numerik.
-**EmbeddingStore** - Menyimpan dan mengambil embeddings.
+**EmbeddingStore** - Menyimpan dan mengambil embedding.
**MessageWindowChatMemory** - Menjaga jendela geser pesan terbaru.
@@ -74,159 +74,157 @@ Referensi cepat untuk istilah dan konsep yang digunakan sepanjang kursus.
## Konsep AI/ML
-**Few-Shot Learning** - Memberikan contoh dalam prompt. [Module 02](../02-prompt-engineering/README.md)
+**Few-Shot Learning** - Memberikan contoh di dalam prompt. [Modul 02](../02-prompt-engineering/README.md)
**Large Language Model (LLM)** - Model AI yang dilatih pada data teks besar.
-**Reasoning Effort** - Parameter GPT-5.2 yang mengontrol kedalaman penalaran. [Module 02](../02-prompt-engineering/README.md)
+**Effort Penalaran** - Parameter GPT-5.2 yang mengatur kedalaman pemikiran. [Modul 02](../02-prompt-engineering/README.md)
-**Temperature** - Mengontrol keacakan keluaran. Rendah=deterministik, tinggi=kreatif.
+**Temperature** - Mengatur tingkat randomness keluaran. Rendah=deterministik, tinggi=kreatif.
-**Vector Database** - Basis data khusus untuk embeddings. [Module 03](../03-rag/README.md)
+**Database Vektor** - Database khusus untuk embedding. [Modul 03](../03-rag/README.md)
-**Zero-Shot Learning** - Melakukan tugas tanpa contoh. [Module 02](../02-prompt-engineering/README.md)
+**Zero-Shot Learning** - Melakukan tugas tanpa contoh. [Modul 02](../02-prompt-engineering/README.md)
-## Guardrails - [Module 00](../00-quick-start/README.md)
+## Guardrails
-**Defense in Depth** - Pendekatan keamanan berlapis yang menggabungkan guardrails tingkat aplikasi dengan filter keamanan penyedia.
+**Pertahanan Berlapis** - Pendekatan keamanan berlapis yang menggabungkan guardrails di tingkat aplikasi dengan filter keamanan penyedia.
-**Hard Block** - Penyedia memberikan error HTTP 400 untuk pelanggaran konten serius.
+**Blok Keras** - Penyedia mengeluarkan error HTTP 400 untuk pelanggaran konten berat.
-**InputGuardrail** - Antarmuka LangChain4j untuk memvalidasi masukan pengguna sebelum diterima LLM. Menghemat biaya dan latensi dengan memblokir prompt berbahaya lebih awal.
+**InputGuardrail** - Antarmuka LangChain4j untuk memvalidasi input pengguna sebelum mencapai LLM. Menghemat biaya dan latensi dengan memblokir prompt berbahaya sejak awal.
-**InputGuardrailResult** - Tipe pengembalian untuk validasi guardrail: `success()` atau `fatal("reason")`.
+**InputGuardrailResult** - Tipe kembalian untuk validasi guardrail: `success()` atau `fatal("reason")`.
**OutputGuardrail** - Antarmuka untuk memvalidasi respons AI sebelum dikembalikan ke pengguna.
-**Provider Safety Filters** - Filter konten bawaan dari penyedia AI (misal, GitHub Models) yang mendeteksi pelanggaran di tingkat API.
+**Filter Keamanan Penyedia** - Filter konten bawaan dari penyedia AI (misal: Azure OpenAI) yang menangkap pelanggaran di tingkat API.
-**Soft Refusal** - Model dengan sopan menolak menjawab tanpa mengeluarkan error.
+**Penolakan Lembut** - Model dengan sopan menolak menjawab tanpa menghasilkan error.
-## Rekayasa Prompt - [Module 02](../02-prompt-engineering/README.md)
+## Rekayasa Prompt - [Modul 02](../02-prompt-engineering/README.md)
**Chain-of-Thought** - Penalaran langkah demi langkah untuk akurasi lebih baik.
-**Constrained Output** - Memaksa format atau struktur tertentu.
+**Keluaran Terbatas** - Menerapkan format atau struktur tertentu.
-**High Eagerness** - Pola GPT-5.2 untuk penalaran mendalam.
+**Semangat Tinggi** - Pola GPT-5.2 untuk pemikiran mendalam.
-**Low Eagerness** - Pola GPT-5.2 untuk jawaban cepat.
+**Semangat Rendah** - Pola GPT-5.2 untuk jawaban cepat.
-**Multi-Turn Conversation** - Mempertahankan konteks antar pertukaran.
+**Percakapan Multi-Turn** - Mempertahankan konteks antar pertukaran.
-**Role-Based Prompting** - Menetapkan persona model melalui pesan sistem.
+**Prompt Berdasarkan Peran** - Menetapkan persona model via pesan sistem.
-**Self-Reflection** - Model mengevaluasi dan meningkatkan keluarannya.
+**Refleksi Diri** - Model mengevaluasi dan memperbaiki keluarannya.
-**Structured Analysis** - Kerangka evaluasi tetap.
+**Analisis Terstruktur** - Kerangka evaluasi tetap.
-**Task Execution Pattern** - Rencana → Eksekusi → Ringkasan.
+**Pola Eksekusi Tugas** - Rencana → Jalankan → Ringkas.
-## RAG (Retrieval-Augmented Generation) - [Module 03](../03-rag/README.md)
+## RAG (Retrieval-Augmented Generation) - [Modul 03](../03-rag/README.md)
-**Document Processing Pipeline** - Muat → potong → buat embedding → simpan.
+**Pipeline Pemrosesan Dokumen** - Muat → potong → embedding → simpan.
-**In-Memory Embedding Store** - Penyimpanan non-persisten untuk pengujian.
+**Penyimpanan Embedding In-Memory** - Penyimpanan non-persisten untuk pengujian.
-**RAG** - Menggabungkan pengambilan dengan generasi untuk menguatkan jawaban.
+**RAG** - Menggabungkan pengambilan dengan generasi untuk menguatkan respons.
-**Similarity Score** - Ukuran (0-1) kesamaan semantik.
+**Skor Kemiripan** - Ukuran (0-1) kemiripan semantik.
-**Source Reference** - Metadata tentang konten yang diambil.
+**Referensi Sumber** - Metadata tentang konten yang diambil.
-## Agen dan Alat - [Module 04](../04-tools/README.md)
+## Agen dan Alat - [Modul 04](../04-tools/README.md)
**@Tool Annotation** - Menandai metode Java sebagai alat yang dapat dipanggil AI.
-**ReAct Pattern** - Bernalar → Bertindak → Mengamati → Ulangi.
+**Pola ReAct** - Bernalar → Bertindak → Mengamati → Ulang.
-**Session Management** - Konteks terpisah untuk pengguna berbeda.
+**Manajemen Sesi** - Konteks terpisah untuk pengguna berbeda.
-**Tool** - Fungsi yang dapat dipanggil agen AI.
+**Alat** - Fungsi yang dapat dipanggil agen AI.
-**Tool Description** - Dokumentasi tujuan dan parameter alat.
+**Deskripsi Alat** - Dokumentasi tujuan dan parameter alat.
-## Modul Agenik - [Module 05](../05-mcp/README.md)
+## Modul Agentic - [Modul 05](../05-mcp/README.md)
**@Agent Annotation** - Menandai antarmuka sebagai agen AI dengan definisi perilaku deklaratif.
**Agent Listener** - Hook untuk memantau eksekusi agen melalui `beforeAgentInvocation()` dan `afterAgentInvocation()`.
-**Agentic Scope** - Memori bersama tempat agen menyimpan keluaran menggunakan `outputKey` yang dapat digunakan agen lain.
+**Agentic Scope** - Memori bersama tempat agen menyimpan keluaran menggunakan `outputKey` untuk dikonsumsi agen lain.
-**AgenticServices** - Pabrik untuk membuat agen menggunakan `agentBuilder()` dan `supervisorBuilder()`.
+**AgenticServices** - Pabrik pembuatan agen menggunakan `agentBuilder()` dan `supervisorBuilder()`.
-**Conditional Workflow** - Rute berbasis kondisi menuju agen spesialis berbeda.
+**Alur Kerja Bersyarat** - Pengarahan berdasarkan kondisi ke agen spesialis berbeda.
-**Human-in-the-Loop** - Pola alur kerja yang menambahkan titik pemeriksaan manusia untuk persetujuan atau tinjauan konten.
+**Manusia dalam Loop** - Pola alur kerja menambahkan titik pemeriksaan manusia untuk persetujuan atau peninjauan konten.
-**langchain4j-agentic** - Dependensi Maven untuk pembuatan agen deklaratif (eksperimental).
+**langchain4j-agentic** - Dependensi Maven untuk pembangunan agen deklaratif (eksperimental).
-**Loop Workflow** - Iterasi eksekusi agen sampai kondisi terpenuhi (misal, skor kualitas ≥ 0.8).
+**Alur Kerja Loop** - Iterasi eksekusi agen sampai kondisi terpenuhi (misal: skor kualitas ≥ 0.8).
-**outputKey** - Parameter anotasi agen yang menentukan tempat hasil disimpan di Agentic Scope.
+**outputKey** - Parameter anotasi agen yang menentukan tempat penyimpanan hasil di Agentic Scope.
-**Parallel Workflow** - Menjalankan beberapa agen secara simultan untuk tugas independen.
+**Alur Kerja Paralel** - Menjalankan beberapa agen secara bersamaan untuk tugas independen.
-**Response Strategy** - Cara supervisor merumuskan jawaban akhir: LAST, SUMMARY, atau SCORED.
+**Strategi Respons** - Cara supervisor merumuskan jawaban akhir: LAST, SUMMARY, atau SCORED.
-**Sequential Workflow** - Menjalankan agen berurutan di mana keluaran mengalir ke langkah berikutnya.
+**Alur Kerja Berurutan** - Menjalankan agen secara urut di mana keluaran mengalir ke langkah berikutnya.
-**Supervisor Agent Pattern** - Pola agenik tingkat lanjut di mana supervisor LLM secara dinamis memutuskan sub-agen mana yang dipanggil.
+**Pola Agen Supervisor** - Pola agentic lanjutan di mana LLM supervisor secara dinamis memutuskan sub-agen mana yang dipanggil.
-## Protokol Konteks Model (MCP) - [Module 05](../05-mcp/README.md)
+## Protokol Konteks Model (MCP) - [Modul 05](../05-mcp/README.md)
-**langchain4j-mcp** - Dependensi Maven untuk integrasi MCP di LangChain4j.
+**langchain4j-mcp** - Dependensi Maven untuk integrasi MCP dalam LangChain4j.
-**MCP** - Model Context Protocol: standar untuk menghubungkan aplikasi AI ke alat eksternal. Bangun sekali, gunakan di mana saja.
+**MCP** - Model Context Protocol: standar untuk menghubungkan aplikasi AI ke alat eksternal. Bangun sekali, gunakan di mana-mana.
-**MCP Client** - Aplikasi yang terhubung ke server MCP untuk menemukan dan menggunakan alat.
+**Klien MCP** - Aplikasi yang terhubung ke server MCP untuk menemukan dan menggunakan alat.
-**MCP Server** - Layanan yang mengekspos alat melalui MCP dengan deskripsi jelas dan skema parameter.
+**Server MCP** - Layanan yang mengekspos alat lewat MCP dengan deskripsi jelas dan skema parameter.
-**McpToolProvider** - Komponen LangChain4j yang membungkus alat MCP untuk digunakan di layanan AI dan agen.
+**McpToolProvider** - Komponen LangChain4j yang membungkus alat MCP untuk dipakai dalam layanan dan agen AI.
-**McpTransport** - Antarmuka untuk komunikasi MCP. Implementasi termasuk Stdio dan HTTP.
+**McpTransport** - Antarmuka untuk komunikasi MCP. Implementasi meliputi Stdio dan HTTP.
-**Stdio Transport** - Transport proses lokal melalui stdin/stdout. Berguna untuk akses sistem berkas atau alat command-line.
+**Transport Stdio** - Transport proses lokal lewat stdin/stdout. Berguna untuk akses sistem berkas atau alat baris perintah.
**StdioMcpTransport** - Implementasi LangChain4j yang menjalankan server MCP sebagai subprocess.
-**Tool Discovery** - Klien menanyakan server tentang alat yang tersedia dengan deskripsi dan skema.
+**Penemuan Alat** - Klien menanyakan server tentang alat tersedia berikut deskripsi dan skema.
-## Layanan Azure - [Module 01](../01-introduction/README.md)
+## Layanan Azure - [Modul 01](../01-introduction/README.md)
-**Azure AI Search** - Pencarian cloud dengan kemampuan vektor. [Module 03](../03-rag/README.md)
+**Azure AI Search** - Pencarian awan dengan kapabilitas vektor. [Modul 03](../03-rag/README.md)
-**Azure Developer CLI (azd)** - Men-deploy sumber daya Azure.
+**Azure Developer CLI (azd)** - Mendeploy sumber daya Azure.
**Azure OpenAI** - Layanan AI perusahaan Microsoft.
**Bicep** - Bahasa infrastruktur sebagai kode Azure. [Panduan Infrastruktur](../01-introduction/infra/README.md)
-**Deployment Name** - Nama untuk penyebaran model di Azure.
+**Nama Deployment** - Nama untuk deployment model di Azure.
-**GPT-5.2** - Model OpenAI terbaru dengan kontrol penalaran. [Module 02](../02-prompt-engineering/README.md)
+**GPT-5.2** - Model OpenAI terbaru dengan kontrol penalaran. [Modul 02](../02-prompt-engineering/README.md)
## Pengujian dan Pengembangan - [Panduan Pengujian](TESTING.md)
-**Dev Container** - Lingkungan pengembangan berbasis kontainer. [Konfigurasi](../../../.devcontainer/devcontainer.json)
+**Dev Container** - Lingkungan pengembangan containerized. [Konfigurasi](../../../.devcontainer/devcontainer.json)
-**GitHub Models** - Playground model AI gratis. [Module 00](../00-quick-start/README.md)
+**Pengujian In-Memory** - Pengujian dengan penyimpanan in-memory.
-**In-Memory Testing** - Pengujian dengan penyimpanan memori.
+**Pengujian Integrasi** - Pengujian dengan infrastruktur nyata.
-**Integration Testing** - Pengujian dengan infrastruktur nyata.
-
-**Maven** - Alat otomasi build Java.
+**Maven** - Alat otomatisasi build Java.
**Mockito** - Framework mocking Java.
-**Spring Boot** - Kerangka aplikasi Java. [Module 01](../01-introduction/README.md)
+**Spring Boot** - Framework aplikasi Java. [Modul 01](../01-introduction/README.md)
---
**Penafian**:
-Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya mencapai ketepatan, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
+Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
\ No newline at end of file
diff --git a/translations/id/docs/TESTING.md b/translations/id/docs/TESTING.md
index a25ed0c4e..1d020415d 100644
--- a/translations/id/docs/TESTING.md
+++ b/translations/id/docs/TESTING.md
@@ -2,15 +2,15 @@
## Daftar Isi
-- [Mulai Cepat](../../../docs)
-- [Apa yang Diuji](../../../docs)
-- [Menjalankan Tes](../../../docs)
-- [Menjalankan Tes di VS Code](../../../docs)
-- [Pola Pengujian](../../../docs)
-- [Filosofi Pengujian](../../../docs)
-- [Langkah Selanjutnya](../../../docs)
+- [Mulai Cepat](#mulai-cepat)
+- [Apa yang Diuji oleh Tes](#apa-yang-diuji-oleh-tes)
+- [Menjalankan Tes](#menjalankan-tes)
+- [Menjalankan Tes di VS Code](#menjalankan-tes-di-vs-code)
+- [Polapola Pengujian](#polapola-pengujian)
+- [Filosofi Pengujian](#filosofi-pengujian)
+- [Langkah Selanjutnya](#langkah-selanjutnya)
-Panduan ini memandu Anda melalui tes yang menunjukkan bagaimana menguji aplikasi AI tanpa memerlukan kunci API atau layanan eksternal.
+Panduan ini memandu Anda melalui tes yang menunjukkan cara menguji aplikasi AI tanpa membutuhkan kunci API atau layanan eksternal.
## Mulai Cepat
@@ -26,32 +26,31 @@ mvn test
mvn --% test
```
-Saat semua tes berhasil, Anda akan melihat output seperti pada tangkapan layar di bawah — tes berjalan tanpa kegagalan.
+Saat semua tes berhasil, Anda akan melihat keluaran seperti tangkapan layar di bawah — tes berjalan tanpa kegagalan.
*Eksekusi tes yang berhasil menunjukkan semua tes lulus tanpa kegagalan*
-## Apa yang Diuji
+## Apa yang Diuji oleh Tes
-Kursus ini berfokus pada **unit test** yang dijalankan secara lokal. Setiap tes menunjukkan konsep LangChain4j tertentu secara terpisah. Piramida pengujian di bawah menunjukkan posisi unit test — mereka membentuk fondasi yang cepat dan andal yang dibangun atas strategi pengujian Anda.
+Kursus ini fokus pada **unit test** yang dijalankan secara lokal. Setiap tes menunjukkan konsep LangChain4j tertentu secara terpisah. Piramida pengujian di bawah ini menunjukkan tempat unit test — mereka membentuk fondasi yang cepat dan dapat diandalkan yang membangun strategi pengujian Anda.
-*Piramida pengujian menunjukkan keseimbangan antara unit test (cepat, terisolasi), integration test (komponen asli), dan end-to-end test. Pelatihan ini membahas pengujian unit.*
+*Piramida pengujian menunjukkan keseimbangan antara unit test (cepat, terisolasi), integration test (komponen nyata), dan end-to-end test. Pelatihan ini mencakup pengujian unit.*
-| Modul | Tes | Fokus | Berkas Utama |
-|--------|-------|-------|-----------|
-| **00 - Mulai Cepat** | 6 | Template prompt dan substitusi variabel | `SimpleQuickStartTest.java` |
-| **01 - Pengantar** | 8 | Memori percakapan dan chat stateful | `SimpleConversationTest.java` |
-| **02 - Rekayasa Prompt** | 12 | Pola GPT-5.2, tingkat eagerness, output terstruktur | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | Pengolahan dokumen, embeddings, pencarian kemiripan | `DocumentServiceTest.java` |
-| **04 - Alat** | 12 | Pemanggilan fungsi dan pengurutan alat | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | Model Context Protocol dengan transportasi Stdio | `SimpleMcpTest.java` |
+| Modul | Tes | Fokus | Berkas Kunci |
+|--------|-------|-------|--------------|
+| **01 - Pengenalan** | 8 | Memori percakapan dan obrolan dengan status | `SimpleConversationTest.java` |
+| **02 - Rekayasa Prompt** | 12 | Polapola GPT-5.2, tingkat keinginan, output terstruktur | `SimpleGpt5PromptTest.java` |
+| **03 - RAG** | 10 | Pengambilan dokumen, embeddings, pencarian kemiripan | `DocumentServiceTest.java` |
+| **04 - Alat** | 12 | Pemanggilan fungsi dan rantai alat | `SimpleToolsTest.java` |
+| **05 - MCP** | 8 | Model Context Protocol dengan transport stdio | `SimpleMcpTest.java` |
## Menjalankan Tes
-**Jalankan semua tes dari direktori root:**
+**Jalankan semua tes dari root:**
**Bash:**
```bash
@@ -79,7 +78,7 @@ cd 01-introduction; mvn --% test
mvn --% test -pl 01-introduction
```
-**Jalankan kelas tes tunggal:**
+**Jalankan satu kelas tes:**
**Bash:**
```bash
@@ -91,7 +90,7 @@ mvn test -Dtest=SimpleConversationTest
mvn --% test -Dtest=SimpleConversationTest
```
-**Jalankan metode tes spesifik:**
+**Jalankan metode tes tertentu:**
**Bash:**
```bash
@@ -105,7 +104,7 @@ mvn --% test -Dtest=SimpleConversationTest#harusMempertahankanRiwayatPercakapan
## Menjalankan Tes di VS Code
-Jika Anda menggunakan Visual Studio Code, Test Explorer menyediakan antarmuka grafis untuk menjalankan dan men-debug tes.
+Jika Anda menggunakan Visual Studio Code, Test Explorer menyediakan antarmuka grafis untuk menjalankan dan debug tes.
@@ -113,23 +112,23 @@ Jika Anda menggunakan Visual Studio Code, Test Explorer menyediakan antarmuka gr
**Untuk menjalankan tes di VS Code:**
-1. Buka Test Explorer dengan mengklik ikon tabung kimia di Activity Bar
+1. Buka Test Explorer dengan mengklik ikon tabung di Bar Aktivitas
2. Perluas pohon tes untuk melihat semua modul dan kelas tes
-3. Klik tombol play di samping tes apa pun untuk menjalankannya secara individual
-4. Klik "Run All Tests" untuk menjalankan seluruh suite
-5. Klik kanan pada tes apa pun dan pilih "Debug Test" untuk menetapkan breakpoint dan menelusuri kode
+3. Klik tombol putar di samping tes apa pun untuk menjalankannya secara individual
+4. Klik "Run All Tests" untuk menjalankan seluruh rangkaian
+5. Klik kanan tes mana pun dan pilih "Debug Test" untuk menetapkan breakpoint dan menelusuri kode
-Test Explorer menampilkan tanda centang hijau untuk tes yang lulus dan menyediakan pesan kegagalan mendetail saat tes gagal.
+Test Explorer menunjukkan tanda centang hijau untuk tes yang berhasil dan memberikan pesan kegagalan rinci ketika tes gagal.
-## Pola Pengujian
+## Polapola Pengujian
-### Pola 1: Menguji Template Prompt
+### Polapola 1: Menguji Template Prompt
-Pola paling sederhana menguji template prompt tanpa memanggil model AI. Anda memverifikasi bahwa substitusi variabel bekerja dengan benar dan prompt diformat sesuai harapan.
+Polapola paling sederhana menguji template prompt tanpa memanggil model AI apapun. Anda memverifikasi bahwa penggantian variabel bekerja dengan benar dan prompt diformat sesuai yang diharapkan.
-*Pengujian template prompt menunjukkan alur substitusi variabel: template dengan placeholder → nilai diterapkan → output diformat diverifikasi*
+*Pengujian template prompt menunjukkan alur penggantian variabel: template dengan placeholder → nilai diterapkan → output yang diformat diverifikasi*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-Tes ini berada di `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
+Polapola ini memverifikasi bahwa penggantian variabel bekerja dengan benar dan prompt diformat sesuai harapan — tanpa kunci API atau pemanggilan model.
-**Jalankan:**
-
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#pengujianFormatTemplatPrompt
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#ujiFormatTemplatePrompt
-```
-
-### Pola 2: Mocking Model Bahasa
+### Polapola 2: Mocking Model Bahasa
-Saat menguji logika percakapan, gunakan Mockito untuk membuat model palsu yang mengembalikan respons yang sudah ditentukan. Ini membuat tes cepat, gratis, dan deterministik.
+Saat menguji logika percakapan, gunakan Mockito untuk membuat model palsu yang mengembalikan respons yang telah ditentukan. Ini membuat tes cepat, gratis, dan deterministik.
-*Perbandingan yang menunjukkan mengapa mock lebih disukai untuk pengujian: cepat, gratis, deterministik, dan tidak memerlukan kunci API*
+*Perbandingan yang menunjukkan alasan mock lebih disukai untuk pengujian: cepat, gratis, deterministik, dan tidak membutuhkan kunci API*
```java
@ExtendWith(MockitoExtension.class)
@@ -218,15 +205,15 @@ class SimpleConversationTest {
}
```
-Pola ini muncul di `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Mock memastikan perilaku konsisten sehingga Anda dapat memverifikasi pengelolaan memori berfungsi dengan benar.
+Polapola ini muncul di `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Mock memastikan perilaku konsisten sehingga Anda dapat memverifikasi pengelolaan memori bekerja dengan benar.
-### Pola 3: Menguji Isolasi Percakapan
+### Polapola 3: Menguji Isolasi Percakapan
-Memori percakapan harus menjaga beberapa pengguna tetap terpisah. Tes ini memverifikasi bahwa percakapan tidak mencampur konteks.
+Memori percakapan harus menjaga beberapa pengguna terpisah. Tes ini memverifikasi bahwa percakapan tidak mencampurkan konteks.
-*Pengujian isolasi percakapan menunjukkan penyimpanan memori terpisah untuk pengguna berbeda agar konteks tidak tercampur*
+*Pengujian isolasi percakapan menunjukkan penyimpanan memori terpisah untuk pengguna berbeda agar mencegah pencampuran konteks*
```java
@Test
@@ -250,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-Setiap percakapan mempertahankan riwayat independennya sendiri. Dalam sistem produksi, isolasi ini sangat penting untuk aplikasi multi-pengguna.
+Setiap percakapan mempertahankan riwayat independennya sendiri. Dalam sistem produksi, isolasi ini penting untuk aplikasi multi-pengguna.
-### Pola 4: Menguji Alat Secara Mandiri
+### Polapola 4: Menguji Alat Secara Mandiri
-Alat adalah fungsi yang dapat dipanggil AI. Uji langsung untuk memastikan alat berfungsi dengan benar tanpa bergantung pada keputusan AI.
+Alat adalah fungsi yang dapat dipanggil AI. Uji alat tersebut langsung untuk memastikan mereka bekerja dengan benar terlepas dari keputusan AI.
-*Pengujian alat secara mandiri memperlihatkan eksekusi alat mock tanpa panggilan AI untuk memverifikasi logika bisnis*
+*Pengujian alat secara mandiri menunjukkan eksekusi alat mock tanpa panggilan AI untuk memverifikasi logika bisnis*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-Tes ini dari `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` memvalidasi logika alat tanpa keterlibatan AI. Contoh chaining menunjukkan bagaimana output alat satu menjadi input alat lain.
+Tes ini dari `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` memvalidasi logika alat tanpa keterlibatan AI. Contoh chaining menunjukkan bagaimana output satu alat menjadi input alat lain.
-### Pola 5: Pengujian RAG In-Memory
+### Polapola 5: Pengujian RAG Dalam Memori
-Sistem RAG biasanya memerlukan basis data vektor dan layanan embedding. Pola in-memory memungkinkan pengujian alur lengkap tanpa ketergantungan eksternal.
+Sistem RAG secara tradisional memerlukan database vektor dan layanan embedding. Polapola dalam memori memungkinkan Anda menguji seluruh pipeline tanpa ketergantungan eksternal.
-
+
-*Alur kerja pengujian RAG in-memory menunjukkan parsing dokumen, penyimpanan embedding, dan pencarian kemiripan tanpa memerlukan database*
+*Alur kerja pengujian RAG dalam memori memperlihatkan parsing dokumen, penyimpanan embedding, dan pencarian kemiripan tanpa memerlukan database*
```java
@Test
@@ -306,11 +293,11 @@ void testProcessTextDocument() {
}
```
-Tes ini dari `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` membuat dokumen di memori dan memverifikasi pemisahan chunk dan penanganan metadata.
+Tes ini dari `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` membuat dokumen dalam memori dan memverifikasi teknik pemecahan dan penanganan metadata.
-### Pola 6: Pengujian Integrasi MCP
+### Polapola 6: Pengujian Integrasi MCP
-Modul MCP menguji integrasi Model Context Protocol menggunakan transportasi stdio. Tes ini memverifikasi aplikasi Anda dapat memunculkan dan berkomunikasi dengan server MCP sebagai subprocess.
+Modul MCP menguji integrasi Model Context Protocol menggunakan transport stdio. Tes ini memverifikasi aplikasi Anda dapat menjalankan dan berkomunikasi dengan server MCP sebagai subprocess.
Tes di `05-mcp/src/test/java/com/example/langchain4j/mcp/SimpleMcpTest.java` memvalidasi perilaku klien MCP.
@@ -328,28 +315,27 @@ cd 05-mcp; mvn --% test
## Filosofi Pengujian
-Uji kode Anda, bukan AI-nya. Tes Anda harus memvalidasi kode yang Anda tulis dengan memeriksa bagaimana prompt dibuat, bagaimana memori dikelola, dan bagaimana alat dieksekusi. Respons AI bervariasi dan tidak boleh menjadi bagian dari pernyataan tes. Tanyakan pada diri Anda apakah template prompt Anda menggantikan variabel dengan benar, bukan apakah AI memberikan jawaban yang benar.
+Uji kode Anda, bukan AI. Tes Anda harus memverifikasi kode yang Anda tulis dengan memeriksa bagaimana prompt dibangun, bagaimana memori dikelola, dan bagaimana alat dijalankan. Respons AI bervariasi dan tidak seharusnya menjadi bagian dari asersi tes. Tanyakan pada diri sendiri apakah template prompt Anda mengganti variabel dengan benar, bukan apakah AI memberikan jawaban yang tepat.
-Gunakan mock untuk model bahasa. Mereka adalah dependensi eksternal yang lambat, mahal, dan tidak deterministik. Mock membuat tes cepat dengan waktu mili-detik daripada detik, gratis tanpa biaya API, dan deterministik dengan hasil yang sama setiap kali.
+Gunakan mock untuk model bahasa. Mereka adalah dependensi eksternal yang lambat, mahal, dan tidak deterministik. Mock membuat tes cepat dengan millisecond bukan detik, gratis tanpa biaya API, dan deterministik dengan hasil yang sama setiap kali.
-Jaga tes agar tetap independen. Setiap tes harus menyiapkan datanya sendiri, tidak bergantung pada tes lain, dan membersihkan setelahnya. Tes harus lulus terlepas dari urutan eksekusi.
+Jaga tes agar mandiri. Setiap tes harus menyiapkan data sendiri, tidak bergantung pada tes lain, dan membersihkan dirinya sendiri. Tes harus berhasil terlepas dari urutan eksekusi.
-Uji kasus tepi di luar jalur bahagia. Coba input kosong, input sangat besar, karakter khusus, parameter tidak valid, dan kondisi batas. Ini sering mengungkap bug yang tidak tampak pada penggunaan biasa.
+Uji kasus tepi di luar jalur senang. Coba input kosong, input sangat besar, karakter khusus, parameter tidak valid, dan kondisi batas. Ini sering mengungkap bug yang tidak diketahui dalam penggunaan normal.
-Gunakan nama yang deskriptif. Bandingkan `shouldMaintainConversationHistoryAcrossMultipleMessages()` dengan `test1()`. Yang pertama memberi tahu Anda persis apa yang diuji, membuat debugging kegagalan jauh lebih mudah.
+Gunakan nama deskriptif. Bandingkan `shouldMaintainConversationHistoryAcrossMultipleMessages()` dengan `test1()`. Yang pertama memberi tahu Anda tepat apa yang diuji, membuat debugging kegagalan jauh lebih mudah.
## Langkah Selanjutnya
-Sekarang Anda memahami pola pengujian, gali lebih dalam setiap modul:
+Sekarang Anda memahami pola pengujian, dalami setiap modul:
-- **[00 - Mulai Cepat](../00-quick-start/README.md)** - Mulai dengan dasar template prompt
-- **[01 - Pengantar](../01-introduction/README.md)** - Pelajari pengelolaan memori percakapan
-- **[02 - Rekayasa Prompt](../02-prompt-engineering/README.md)** - Kuasai pola pemicu GPT-5.2
+- **[01 - Pengenalan](../01-introduction/README.md)** - Pelajari manajemen memori percakapan
+- **[02 - Rekayasa Prompt](../02/prompt-engineering/README.md)** - Kuasai polapola prompting GPT-5.2
- **[03 - RAG](../03-rag/README.md)** - Bangun sistem retrieval-augmented generation
-- **[04 - Alat](../04-tools/README.md)** - Implementasikan pemanggilan fungsi dan rangkaian alat
+- **[04 - Alat](../04-tools/README.md)** - Implementasikan pemanggilan fungsi dan rantai alat
- **[05 - MCP](../05-mcp/README.md)** - Integrasikan Model Context Protocol
-README setiap modul menyediakan penjelasan mendetail mengenai konsep yang diuji di sini.
+README setiap modul menyediakan penjelasan terperinci tentang konsep yang diuji di sini.
---
@@ -358,6 +344,6 @@ README setiap modul menyediakan penjelasan mendetail mengenai konsep yang diuji
---
-**Penafian**:
-Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau kekeliruan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah dan utama. Untuk informasi yang bersifat penting, disarankan menggunakan jasa penerjemah profesional manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau kesalahan interpretasi yang timbul dari penggunaan terjemahan ini.
+**Penafian**:
+Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
\ No newline at end of file
diff --git a/translations/it/.co-op-translator.json b/translations/it/.co-op-translator.json
index de388851e..d3d727300 100644
--- a/translations/it/.co-op-translator.json
+++ b/translations/it/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "it"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-02T21:29:46+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T10:32:55+00:00",
"source_file": "01-introduction/README.md",
"language_code": "it"
},
@@ -18,20 +18,20 @@
"language_code": "it"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-02T21:31:57+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T10:28:09+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "it"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-02T21:33:23+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T10:32:00+00:00",
"source_file": "03-rag/README.md",
"language_code": "it"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T11:48:56+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T10:30:32+00:00",
"source_file": "04-tools/README.md",
"language_code": "it"
},
@@ -54,8 +54,8 @@
"language_code": "it"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T16:03:18+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T10:25:08+00:00",
"source_file": "README.md",
"language_code": "it"
},
@@ -72,14 +72,14 @@
"language_code": "it"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-02T21:36:30+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T10:28:42+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "it"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-02T21:37:11+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T10:29:20+00:00",
"source_file": "docs/TESTING.md",
"language_code": "it"
}
diff --git a/translations/it/00-quick-start/README.md b/translations/it/00-quick-start/README.md
deleted file mode 100644
index b98b93e59..000000000
--- a/translations/it/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# Modulo 00: Avvio Rapido
-
-## Indice
-
-- [Introduzione](../../../00-quick-start)
-- [Cos'è LangChain4j?](../../../00-quick-start)
-- [Dipendenze LangChain4j](../../../00-quick-start)
-- [Prerequisiti](../../../00-quick-start)
-- [Configurazione](../../../00-quick-start)
- - [1. Ottieni il tuo token GitHub](../../../00-quick-start)
- - [2. Imposta il tuo token](../../../00-quick-start)
-- [Esegui gli esempi](../../../00-quick-start)
- - [1. Chat di base](../../../00-quick-start)
- - [2. Modelli di prompt](../../../00-quick-start)
- - [3. Chiamata di funzioni](../../../00-quick-start)
- - [4. Domande e risposte sui documenti (Easy RAG)](../../../00-quick-start)
- - [5. AI responsabile](../../../00-quick-start)
-- [Cosa mostra ogni esempio](../../../00-quick-start)
-- [Passi successivi](../../../00-quick-start)
-- [Risoluzione dei problemi](../../../00-quick-start)
-
-## Introduzione
-
-Questo avvio rapido è pensato per farti partire rapidamente con LangChain4j. Copre le basi assolute per costruire applicazioni AI con LangChain4j e GitHub Models. Nei moduli successivi passerai ad Azure OpenAI e GPT-5.2 e approfondirai ogni concetto.
-
-## Cos'è LangChain4j?
-
-LangChain4j è una libreria Java che semplifica la costruzione di applicazioni AI. Invece di gestire client HTTP e parsing JSON, si lavora con API Java pulite.
-
-La "catena" in LangChain si riferisce al concatenamento di più componenti - potresti concatenare un prompt a un modello a un parser, o concatenare più chiamate AI dove un output alimenta il successivo input. Questo avvio rapido si concentra sui fondamenti prima di esplorare catene più complesse.
-
-
-
-*Componenti concatenati in LangChain4j - blocchi costitutivi che si connettono per creare potenti flussi di lavoro AI*
-
-Utilizzeremo tre componenti principali:
-
-**ChatModel** - Interfaccia per interazioni con il modello AI. Chiamare `model.chat("prompt")` e ottenere una stringa di risposta. Usiamo `OpenAiOfficialChatModel` che funziona con endpoint compatibili OpenAI come GitHub Models.
-
-**AiServices** - Crea interfacce di servizi AI tipizzate. Definisci metodi, annotali con `@Tool` e LangChain4j gestisce l'orchestrazione. L'AI chiama automaticamente i tuoi metodi Java quando necessario.
-
-**MessageWindowChatMemory** - Mantiene la cronologia della conversazione. Senza di essa, ogni richiesta è indipendente. Con essa, l'AI ricorda i messaggi precedenti e mantiene il contesto attraverso più turni.
-
-
-
-*Architettura LangChain4j - componenti core che lavorano insieme per alimentare le tue applicazioni AI*
-
-## Dipendenze LangChain4j
-
-Questo avvio rapido utilizza tre dipendenze Maven nel [`pom.xml`](../../../00-quick-start/pom.xml):
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-Il modulo `langchain4j-open-ai-official` fornisce la classe `OpenAiOfficialChatModel` che si connette ad API compatibili OpenAI. GitHub Models usa lo stesso formato API, quindi non serve un adattatore speciale - basta puntare la URL base a `https://models.github.ai/inference`.
-
-Il modulo `langchain4j-easy-rag` offre divisione automatica dei documenti, embedding e retrieval così da poter costruire applicazioni RAG senza configurare manualmente ogni passaggio.
-
-## Prerequisiti
-
-**Usi il Dev Container?** Java e Maven sono già installati. Ti serve solo un Personal Access Token GitHub.
-
-**Sviluppo locale:**
-- Java 21+, Maven 3.9+
-- Personal Access Token GitHub (istruzioni sotto)
-
-> **Nota:** Questo modulo usa `gpt-4.1-nano` da GitHub Models. Non modificare il nome del modello nel codice - è configurato per funzionare con i modelli disponibili su GitHub.
-
-## Configurazione
-
-### 1. Ottieni il tuo token GitHub
-
-1. Vai su [Impostazioni GitHub → Personal Access Tokens](https://github.com/settings/personal-access-tokens)
-2. Clicca "Genera nuovo token"
-3. Dai un nome descrittivo (es. "Demo LangChain4j")
-4. Imposta scadenza (consigliato 7 giorni)
-5. Sotto "Permessi account", trova "Models" e imposta su "Sola lettura"
-6. Clicca "Genera token"
-7. Copia e salva il token - non sarà più visibile
-
-### 2. Imposta il tuo token
-
-**Opzione 1: Usare VS Code (Consigliato)**
-
-Se usi VS Code, aggiungi il token nel file `.env` nella radice del progetto:
-
-Se il file `.env` non esiste, copia `.env.example` in `.env` o crea un nuovo `.env` nella radice del progetto.
-
-**Esempio file `.env`:**
-```bash
-# In /workspaces/LangChain4j-for-Beginners/.env
-GITHUB_TOKEN=your_token_here
-```
-
-Poi basta cliccare col destro su un qualsiasi file demo (es. `BasicChatDemo.java`) nell'Explorer e scegliere **"Run Java"** oppure usare le configurazioni di avvio dal pannello Run and Debug.
-
-**Opzione 2: Usare il Terminale**
-
-Imposta il token come variabile d’ambiente:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## Esegui gli esempi
-
-**Usando VS Code:** Basta cliccare col tasto destro un file demo nell'Explorer e scegliere **"Run Java"**, oppure usare le configurazioni dal pannello Run and Debug (assicurati prima di avere aggiunto il token nel file `.env`).
-
-**Usando Maven:** In alternativa, esegui da linea di comando:
-
-### 1. Chat di base
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. Modelli di prompt
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-Mostra prompting zero-shot, few-shot, chain-of-thought e basato su ruoli.
-
-### 3. Chiamata di funzioni
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-L’AI chiama automaticamente i tuoi metodi Java quando necessario.
-
-### 4. Domande e risposte sui documenti (Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-Fai domande sui tuoi documenti usando Easy RAG con embedding e retrieval automatici.
-
-### 5. AI responsabile
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-Vedi come i filtri di sicurezza AI bloccano contenuti dannosi.
-
-## Cosa mostra ogni esempio
-
-**Chat di base** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-Inizia qui per vedere LangChain4j nel suo aspetto più semplice. Creerai un `OpenAiOfficialChatModel`, invierai un prompt con `.chat()`, e otterrai una risposta. Questo dimostra la base: come inizializzare modelli con endpoint e chiavi API personalizzate. Una volta compreso questo schema, tutto il resto si basa su di esso.
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 Prova con [GitHub Copilot](https://github.com/features/copilot) Chat:** Apri [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java) e chiedi:
-> - "Come passo da GitHub Models ad Azure OpenAI in questo codice?"
-> - "Quali altri parametri posso configurare in OpenAiOfficialChatModel.builder()?"
-> - "Come aggiungo risposte in streaming invece di aspettare la risposta completa?"
-
-**Prompt Engineering** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-Ora che sai come parlare con un modello, esploriamo cosa gli dici. Questa demo usa la stessa configurazione modello ma mostra cinque diversi modelli di prompt. Prova prompt zero-shot per istruzioni dirette, few-shot che imparano dagli esempi, chain-of-thought che mostrano i passaggi di ragionamento, e prompt basati su ruoli che impostano il contesto. Vedrai come lo stesso modello dà risultati molto diversi in base a come formuli la richiesta.
-
-La demo mostra anche template di prompt, un modo potente per creare prompt riutilizzabili con variabili.
-L’esempio sotto mostra un prompt che usa il LangChain4j `PromptTemplate` per riempire variabili. L’AI risponderà basandosi sulla destinazione e attività fornita.
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 Prova con [GitHub Copilot](https://github.com/features/copilot) Chat:** Apri [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java) e chiedi:
-> - "Qual è la differenza tra zero-shot e few-shot prompting, e quando dovrei usare ciascuno?"
-> - "Come influisce il parametro temperature sulle risposte del modello?"
-> - "Quali tecniche ci sono per prevenire attacchi di injection nei prompt in produzione?"
-> - "Come posso creare oggetti PromptTemplate riutilizzabili per modelli comuni?"
-
-**Integrazione di strumenti** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-Qui LangChain4j diventa potente. Userai `AiServices` per creare un assistente AI che chiama i tuoi metodi Java. Basta annotare metodi con `@Tool("descrizione")` e LangChain4j fa il resto - l’AI decide automaticamente quando usare ogni strumento in base a cosa chiede l’utente. Questo dimostra la chiamata di funzioni, una tecnica chiave per costruire AI che può agire, non solo rispondere a domande.
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 Prova con [GitHub Copilot](https://github.com/features/copilot) Chat:** Apri [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) e chiedi:
-> - "Come funziona l’annotazione @Tool e cosa fa LangChain4j dietro le quinte?"
-> - "L’AI può chiamare più strumenti in sequenza per risolvere problemi complessi?"
-> - "Cosa succede se uno strumento genera un’eccezione - come gestisco gli errori?"
-> - "Come integrazione una vera API invece di questo esempio calcolatrice?"
-
-**Domande e risposte sui documenti (Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-Qui vedrai RAG (retrieval-augmented generation) usando l’approccio "Easy RAG" di LangChain4j. I documenti sono caricati, automaticamente divisi e embedded in una memoria, poi un content retriever fornisce i pezzi rilevanti all’AI al momento della richiesta. L’AI risponde basandosi sui tuoi documenti, non sulla sua conoscenza generale.
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 Prova con [GitHub Copilot](https://github.com/features/copilot) Chat:** Apri [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java) e chiedi:
-> - "Come RAG previene le allucinazioni AI rispetto all’uso dei dati di training del modello?"
-> - "Qual è la differenza tra questo approccio facile e una pipeline RAG personalizzata?"
-> - "Come farei a scalare questo per gestire più documenti o basi di conoscenza più grandi?"
-
-**AI responsabile** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-Costruisci sicurezza AI con difesa in profondità. Questa demo mostra due livelli di protezione che lavorano insieme:
-
-**Parte 1: LangChain4j Input Guardrails** - Blocca prompt pericolosi prima che raggiungano il LLM. Crea guardrail personalizzati che cercano parole chiave o modelli vietati. Questi girano nel tuo codice, quindi sono veloci e gratuiti.
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**Parte 2: Filtri di sicurezza del provider** - GitHub Models ha filtri integrati che intercettano quello che potrebbero perdere i tuoi guardrail. Vedrai blocchi rigidi (errori HTTP 400) per violazioni gravi e rifiuti morbidi dove l’AI declina educatamente.
-
-> **🤖 Prova con [GitHub Copilot](https://github.com/features/copilot) Chat:** Apri [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java) e chiedi:
-> - "Cos’è InputGuardrail e come creane uno mio?"
-> - "Qual è la differenza tra blocco rigido e rifiuto morbido?"
-> - "Perché usare insieme guardrail e filtri provider?"
-
-## Passi successivi
-
-**Modulo Successivo:** [01-introduction - Introduzione a LangChain4j](../01-introduction/README.md)
-
----
-
-**Navigazione:** [← Indietro al Principale](../README.md) | [Prossimo: Modulo 01 - Introduzione →](../01-introduction/README.md)
-
----
-
-## Risoluzione dei problemi
-
-### Prima Compilazione Maven
-
-**Problema**: `mvn clean compile` o `mvn package` iniziali richiedono molto tempo (10-15 minuti)
-
-**Causa**: Maven deve scaricare tutte le dipendenze del progetto (Spring Boot, librerie LangChain4j, SDK Azure, ecc.) alla prima compilazione.
-
-**Soluzione**: Comportamento normale. Le compilazioni successive saranno molto più rapide perché le dipendenze sono memorizzate in cache localmente. Il tempo di download dipende dalla velocità della tua rete.
-
-### Sintassi comando Maven in PowerShell
-
-**Problema**: I comandi Maven falliscono con errore `Unknown lifecycle phase ".mainClass=..."`
-**Causa**: PowerShell interpreta `=` come operatore di assegnazione di variabile, interrompendo la sintassi delle proprietà Maven
-
-**Soluzione**: Usa l'operatore di stop-parsing `--%` prima del comando Maven:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-L'operatore `--%` indica a PowerShell di passare letteralmente tutti gli argomenti rimanenti a Maven senza interpretazione.
-
-### Visualizzazione Emoji in Windows PowerShell
-
-**Problema**: Le risposte AI mostrano caratteri strani (es. `????` o `â??`) invece delle emoji in PowerShell
-
-**Causa**: La codifica predefinita di PowerShell non supporta le emoji UTF-8
-
-**Soluzione**: Esegui questo comando prima di eseguire le applicazioni Java:
-```cmd
-chcp 65001
-```
-
-Questo forza la codifica UTF-8 nel terminale. In alternativa, usa Windows Terminal che ha un supporto Unicode migliore.
-
-### Debug delle chiamate API
-
-**Problema**: Errori di autenticazione, limiti di frequenza o risposte inaspettate dal modello AI
-
-**Soluzione**: Gli esempi includono `.logRequests(true)` e `.logResponses(true)` per mostrare le chiamate API nella console. Questo aiuta a risolvere errori di autenticazione, limiti di frequenza o risposte inaspettate. Rimuovi queste opzioni in produzione per ridurre il rumore nei log.
-
----
-
-
-**Avvertenza**:
-Questo documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Pur facendo del nostro meglio per garantire la precisione, si prega di notare che le traduzioni automatiche possono contenere errori o inesattezze. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non ci assumiamo alcuna responsabilità per fraintendimenti o interpretazioni errate derivanti dall’uso di questa traduzione.
-
\ No newline at end of file
diff --git a/translations/it/01-introduction/README.md b/translations/it/01-introduction/README.md
index 4eb8641ff..10eeb3c9e 100644
--- a/translations/it/01-introduction/README.md
+++ b/translations/it/01-introduction/README.md
@@ -2,19 +2,19 @@
## Indice
-- [Video Dimostrativo](../../../01-introduction)
-- [Cosa Imparerai](../../../01-introduction)
-- [Prerequisiti](../../../01-introduction)
-- [Comprendere il Problema Principale](../../../01-introduction)
-- [Comprendere i Token](../../../01-introduction)
-- [Come Funziona la Memoria](../../../01-introduction)
-- [Come Viene Usato LangChain4j](../../../01-introduction)
-- [Distribuire l'Infrastruttura Azure OpenAI](../../../01-introduction)
-- [Eseguire l'Applicazione Localmente](../../../01-introduction)
-- [Usare l'Applicazione](../../../01-introduction)
- - [Chat Senza Stato (Pannello Sinistro)](../../../01-introduction)
- - [Chat Con Stato (Pannello Destro)](../../../01-introduction)
-- [Prossimi Passi](../../../01-introduction)
+- [Video Dimostrativo](#video-dimostrativo)
+- [Cosa Imparerai](#cosa-imparerai)
+- [Prerequisiti](#prerequisiti)
+- [Comprendere il Problema Centrale](#comprendere-il-problema-centrale)
+- [Comprendere i Token](#comprendere-i-token)
+- [Come Funziona la Memoria](#come-funziona-la-memoria)
+- [Come Questo Usa LangChain4j](#come-questo-usa-langchain4j)
+- [Distribuire l'Infrastruttura Azure OpenAI](#distribuire-linfrastruttura-azure-openai)
+- [Eseguire l'Applicazione Localmente](#eseguire-lapplicazione-localmente)
+- [Usare l'Applicazione](#usare-lapplicazione)
+ - [Chat Stateless (Pannello Sinistro)](#chat-stateless-pannello-sinistro)
+ - [Chat Stateful (Pannello Destro)](#chat-stateful-pannello-destro)
+- [Passi Successivi](#passi-successivi)
## Video Dimostrativo
@@ -24,62 +24,62 @@ Guarda questa sessione live che spiega come iniziare con questo modulo:
## Cosa Imparerai
-Nel quick start, hai usato i Modelli GitHub per inviare prompt, chiamare strumenti, costruire una pipeline RAG e testare le protezioni. Quelle demo hanno mostrato cosa è possibile — ora passiamo ad Azure OpenAI e GPT-5.2 e iniziamo a costruire applicazioni in stile produzione. Questo modulo si concentra sull'AI conversazionale che ricorda il contesto e mantiene lo stato — i concetti che quelle demo del quick start usavano dietro le quinte ma non spiegavano.
+Questo è il tuo punto di partenza con LangChain4j e Azure OpenAI. Iniziamo con i fondamenti e cominciamo a costruire applicazioni in stile produzione. Questo modulo si concentra sull'intelligenza artificiale conversazionale che ricorda il contesto e mantiene lo stato — i concetti fondamentali su cui si basano tutti i moduli successivi.
-Useremo GPT-5.2 di Azure OpenAI in tutta la guida perché le sue capacità avanzate di ragionamento rendono il comportamento dei diversi pattern più evidente. Quando aggiungi la memoria, vedrai chiaramente la differenza. Questo rende più facile capire cosa ogni componente apporta alla tua applicazione.
+Useremo GPT-5.2 di Azure OpenAI per tutta la guida perché le sue capacità avanzate di ragionamento rendono più evidente il comportamento dei diversi pattern. Quando aggiungi la memoria, vedrai chiaramente la differenza. Questo rende più facile capire cosa ogni componente porta alla tua applicazione.
-Costruirai un'applicazione che dimostra entrambi i pattern:
+Costruirai un’applicazione che dimostra entrambi i pattern:
-**Chat Senza Stato** - Ogni richiesta è indipendente. Il modello non ha memoria dei messaggi precedenti. Questo è il pattern usato nel quick start.
+**Chat Stateless** - Ogni richiesta è indipendente. Il modello non ha memoria dei messaggi precedenti. Questo è il punto di partenza più semplice.
-**Conversazione Con Stato** - Ogni richiesta include la cronologia della conversazione. Il modello mantiene il contesto su più turni. Questo è ciò che le applicazioni di produzione richiedono.
+**Conversazione Stateful** - Ogni richiesta include la cronologia della conversazione. Il modello mantiene il contesto su più turni. Questo è ciò di cui hanno bisogno le applicazioni di produzione.
## Prerequisiti
-- Sottoscrizione Azure con accesso ad Azure OpenAI
+- Sottoscrizione Azure con accesso Azure OpenAI
- Java 21, Maven 3.9+
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
> **Nota:** Java, Maven, Azure CLI e Azure Developer CLI (azd) sono preinstallati nel devcontainer fornito.
-> **Nota:** Questo modulo usa GPT-5.2 su Azure OpenAI. La distribuzione è configurata automaticamente tramite `azd up` - non modificare il nome del modello nel codice.
+> **Nota:** Questo modulo usa GPT-5.2 su Azure OpenAI. Il deployment è configurato automaticamente tramite `azd up` - non modificare il nome del modello nel codice.
-## Comprendere il Problema Principale
+## Comprendere il Problema Centrale
-I modelli di linguaggio sono senza stato. Ogni chiamata API è indipendente. Se invii "Mi chiamo John" e poi chiedi "Come mi chiamo?", il modello non ha idea che tu ti sia appena presentato. Tratta ogni richiesta come se fosse la prima conversazione che hai mai avuto.
+I modelli di linguaggio sono stateless. Ogni chiamata API è indipendente. Se invii "Mi chiamo John" e poi chiedi "Come mi chiamo?", il modello non ha idea che ti sei appena presentato. Tratta ogni richiesta come se fosse la prima conversazione che hai mai avuto.
-Questo va bene per semplici Q&A ma è inutile per applicazioni reali. I bot del servizio clienti devono ricordare cosa hai detto loro. Gli assistenti personali hanno bisogno di contesto. Qualsiasi conversazione multi-turno richiede memoria.
+Questo va bene per semplici Q&A ma è inutile per applicazioni reali. I bot di assistenza clienti devono ricordare cosa hai detto. Gli assistenti personali hanno bisogno di contesto. Qualsiasi conversazione multi-turno richiede memoria.
-Il diagramma seguente mette a confronto i due approcci — a sinistra, una chiamata senza stato che dimentica il tuo nome; a destra, una chiamata con stato supportata da ChatMemory che lo ricorda.
+Il diagramma seguente contrappone i due approcci — a sinistra, una chiamata stateless che dimentica il tuo nome; a destra, una chiamata stateful supportata da ChatMemory che lo ricorda.
-*La differenza tra conversazioni senza stato (chiamate indipendenti) e con stato (consapevoli del contesto)*
+*La differenza tra conversazioni stateless (chiamate indipendenti) e stateful (consapevoli del contesto)*
## Comprendere i Token
-Prima di immergersi nelle conversazioni, è importante comprendere i token - le unità di base del testo che i modelli di linguaggio elaborano:
+Prima di immergerci nelle conversazioni, è importante capire i token - le unità base di testo che i modelli di linguaggio elaborano:
*Esempio di come il testo viene suddiviso in token - "I love AI!" diventa 4 unità di elaborazione separate*
-I token sono il modo in cui i modelli AI misurano ed elaborano il testo. Parole, punteggiatura e persino spazi possono essere token. Il tuo modello ha un limite sul numero di token che può elaborare in una volta (400.000 per GPT-5.2, con fino a 272.000 token in input e 128.000 in output). Comprendere i token ti aiuta a gestire la lunghezza della conversazione e i costi.
+I token sono come i modelli AI misurano ed elaborano il testo. Parole, punteggiatura e perfino spazi possono essere token. Il tuo modello ha un limite di quanti token può elaborare contemporaneamente (400.000 per GPT-5.2, con fino a 272.000 token in input e 128.000 in output). Capire i token ti aiuta a gestire la lunghezza della conversazione e i costi.
## Come Funziona la Memoria
-La memoria nella chat risolve il problema dello stato mantenendo la cronologia della conversazione. Prima di inviare la tua richiesta al modello, il framework antepone i messaggi precedenti rilevanti. Quando chiedi "Come mi chiamo?", il sistema in realtà invia l'intera cronologia della conversazione, permettendo al modello di vedere che hai detto "Mi chiamo John" in precedenza.
+La memoria chat risolve il problema stateless mantenendo la cronologia della conversazione. Prima di inviare la tua richiesta al modello, il framework antepone i messaggi precedenti rilevanti. Quando chiedi "Come mi chiamo?", il sistema invia in realtà tutta la cronologia della conversazione, permettendo al modello di vedere che prima hai detto "Mi chiamo John."
-LangChain4j fornisce implementazioni di memoria che gestiscono questo automaticamente. Scegli quanti messaggi conservare e il framework gestisce la finestra di contesto. Il diagramma sotto mostra come MessageWindowChatMemory mantiene una finestra scorrevole dei messaggi recenti.
+LangChain4j fornisce implementazioni di memoria che gestiscono questo automaticamente. Tu scegli quanti messaggi conservare e il framework gestisce la finestra di contesto. Il diagramma sotto mostra come MessageWindowChatMemory mantiene una finestra scorrevole dei messaggi recenti.
-*MessageWindowChatMemory mantiene una finestra scorrevole dei messaggi recenti, eliminandone automaticamente i più vecchi*
+*MessageWindowChatMemory mantiene una finestra scorrevole dei messaggi recenti, scartando automaticamente quelli più vecchi*
-## Come Viene Usato LangChain4j
+## Come Questo Usa LangChain4j
-Questo modulo estende il quick start integrando Spring Boot e aggiungendo la memoria nella conversazione. Ecco come si incastrano i pezzi:
+Questo modulo integra Spring Boot e aggiunge la memoria conversazionale. Ecco come si incastrano i componenti:
**Dipendenze** - Aggiungi due librerie LangChain4j:
@@ -109,9 +109,9 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-Il builder legge le credenziali dalle variabili d'ambiente impostate da `azd up`. Impostare `baseUrl` al tuo endpoint Azure fa funzionare il client OpenAI con Azure OpenAI.
+Il builder legge le credenziali dalle variabili d'ambiente impostate da `azd up`. Impostare `baseUrl` al tuo endpoint Azure permette al client OpenAI di funzionare con Azure OpenAI.
-**Memoria della Conversazione** - Traccia la cronologia chat con MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
+**Memoria Conversazione** - Traccia la cronologia chat con MessageWindowChatMemory ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -124,14 +124,14 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-Crea la memoria con `withMaxMessages(10)` per tenere gli ultimi 10 messaggi. Aggiungi messaggi utente e AI con wrapper tipizzati: `UserMessage.from(text)` e `AiMessage.from(text)`. Recupera la cronologia con `memory.messages()` e inviala al modello. Il servizio memorizza istanze di memoria separate per ID conversazione, consentendo a più utenti di chattare contemporaneamente.
+Crea la memoria con `withMaxMessages(10)` per conservare gli ultimi 10 messaggi. Aggiungi messaggi utente e AI con wrapper tipizzati: `UserMessage.from(text)` e `AiMessage.from(text)`. Recupera la cronologia con `memory.messages()` e inviala al modello. Il servizio conserva istanze di memoria separate per ogni ID conversazione, permettendo a più utenti di chattare contemporaneamente.
> **🤖 Prova con [GitHub Copilot](https://github.com/features/copilot) Chat:** Apri [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) e chiedi:
-> - "Come decide MessageWindowChatMemory quali messaggi eliminare quando la finestra è piena?"
-> - "Posso implementare una memoria personalizzata usando un database invece che in memoria?"
-> - "Come potrei aggiungere una sintesi per comprimere la vecchia cronologia della conversazione?"
+> - "Come decide MessageWindowChatMemory quali messaggi scartare quando la finestra è piena?"
+> - "Posso implementare uno storage di memoria personalizzato usando un database invece della memoria in RAM?"
+> - "Come potrei aggiungere il sommario per comprimere la vecchia cronologia della conversazione?"
-L'endpoint chat senza stato salta completamente la memoria - usa soltanto `chatModel.chat(prompt)` come nel quick start. L'endpoint con stato aggiunge messaggi alla memoria, recupera la cronologia e include quel contesto ad ogni richiesta. Stessa configurazione del modello, pattern differenti.
+L’endpoint chat stateless salta completamente la memoria — usa solo `chatModel.chat(prompt)` come nel quick start. L’endpoint stateful aggiunge messaggi alla memoria, recupera la cronologia e include quel contesto ad ogni richiesta. Stessa configurazione modello, pattern diversi.
## Distribuire l'Infrastruttura Azure OpenAI
@@ -144,19 +144,19 @@ azd up # Seleziona sottoscrizione e posizione (eastus2 consigliato)
**PowerShell:**
```powershell
cd 01-introduction
-azd up # Seleziona l'abbonamento e la posizione (consigliato eastus2)
+azd up # Seleziona sottoscrizione e posizione (consigliato eastus2)
```
-> **Nota:** Se riscontri un errore di timeout (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), esegui semplicemente di nuovo `azd up`. Le risorse Azure potrebbero essere ancora in provisioning in background, e riprovare consente alla distribuzione di completarsi una volta che le risorse raggiungono uno stato terminale.
+> **Nota:** Se incontri un errore di timeout (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`), esegui semplicemente di nuovo `azd up`. Le risorse Azure potrebbero ancora essere in fase di provisioning in background, e riprovare permette al deployment di completarsi una volta che le risorse raggiungono uno stato terminale.
Questo farà:
1. Distribuire la risorsa Azure OpenAI con modelli GPT-5.2 e text-embedding-3-small
-2. Generare automaticamente il file `.env` nella root del progetto con le credenziali
-3. Impostare tutte le variabili di ambiente necessarie
+2. Generare automaticamente il file `.env` nella radice del progetto con le credenziali
+3. Configurare tutte le variabili d’ambiente richieste
-**Problemi nella distribuzione?** Consulta il [README dell'Infrastruttura](infra/README.md) per una risoluzione dettagliata dei problemi inclusi conflitti di nomi di sottodomini, passaggi manuali di distribuzione tramite Azure Portal e linee guida sulla configurazione del modello.
+**Hai problemi con il deployment?** Consulta il [README Infrastruttura](infra/README.md) per la risoluzione dettagliata dei problemi, inclusi conflitti di nome del sottodominio, passaggi manuali di deployment da Azure Portal e consigli per la configurazione del modello.
-**Verifica che la distribuzione sia riuscita:**
+**Verifica che il deployment sia riuscito:**
**Bash:**
```bash
@@ -168,7 +168,7 @@ cat ../.env # Dovrebbe mostrare AZURE_OPENAI_ENDPOINT, API_KEY, ecc.
Get-Content ..\.env # Dovrebbe mostrare AZURE_OPENAI_ENDPOINT, API_KEY, ecc.
```
-> **Nota:** Il comando `azd up` genera automaticamente il file `.env`. Se devi aggiornarlo dopo, puoi modificare direttamente il file `.env` oppure rigenerarlo eseguendo:
+> **Nota:** Il comando `azd up` genera automaticamente il file `.env`. Se devi aggiornarlo in seguito, puoi modificare manualmente il file `.env` oppure rigenerarlo eseguendo:
>
> **Bash:**
> ```bash
@@ -184,9 +184,9 @@ Get-Content ..\.env # Dovrebbe mostrare AZURE_OPENAI_ENDPOINT, API_KEY, ecc.
## Eseguire l'Applicazione Localmente
-**Verifica la distribuzione:**
+**Verifica il deployment:**
-Assicurati che il file `.env` esista nella directory root con le credenziali Azure. Esegui questo dalla directory del modulo (`01-introduction/`):
+Assicurati che il file `.env` esista nella directory radice con le credenziali Azure. Esegui questo dal modulo (`01-introduction/`):
**Bash:**
```bash
@@ -200,21 +200,21 @@ Get-Content ..\.env # Dovrebbe mostrare AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYM
**Avvia le applicazioni:**
-**Opzione 1: Usare Spring Boot Dashboard (Consigliato per utenti VS Code)**
+**Opzione 1: Usare Spring Boot Dashboard (Raccomandato per utenti VS Code)**
-Il dev container include l'estensione Spring Boot Dashboard, che fornisce un'interfaccia visiva per gestire tutte le applicazioni Spring Boot. La trovi nella Activity Bar sul lato sinistro di VS Code (cerca l'icona di Spring Boot).
+Il dev container include l’estensione Spring Boot Dashboard, che offre un’interfaccia visiva per gestire tutte le applicazioni Spring Boot. La trovi nella Activity Bar a sinistra di VS Code (cerca l’icona Spring Boot).
Dal Spring Boot Dashboard puoi:
-- Vedere tutte le applicazioni Spring Boot disponibili nell'area di lavoro
-- Avviare/arrestare applicazioni con un clic
-- Visualizzare i log delle applicazioni in tempo reale
+- Vedere tutte le applicazioni Spring Boot disponibili nell’area di lavoro
+- Avviare/arrestare applicazioni con un solo click
+- Visualizzare i log in tempo reale
- Monitorare lo stato delle applicazioni
-Clicca semplicemente il pulsante play accanto a "introduction" per avviare questo modulo, oppure avvia tutti i moduli insieme.
+Basta cliccare sul pulsante play accanto a "introduction" per avviare questo modulo, o avviare tutti i moduli contemporaneamente.
-*Il Spring Boot Dashboard in VS Code — avvia, arresta e monitora tutti i moduli da un unico posto*
+*Spring Boot Dashboard in VS Code — avvia, ferma e monitora tutti i moduli da un unico posto*
**Opzione 2: Usare script shell**
@@ -222,13 +222,13 @@ Avvia tutte le applicazioni web (moduli 01-04):
**Bash:**
```bash
-cd .. # Dalla directory root
+cd .. # Dalla directory radice
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # Dalla directory root
+cd .. # Dalla directory radice
.\start-all.ps1
```
@@ -246,9 +246,9 @@ cd 01-introduction
.\start.ps1
```
-Entrambi gli script caricano automaticamente le variabili d'ambiente dal file `.env` della root e compileranno i JAR se non esistono.
+Entrambi gli script caricano automaticamente le variabili d’ambiente dal file `.env` radice e compileranno i JAR se non esistono.
-> **Nota:** Se preferisci compilare tutti i moduli manualmente prima di avviare:
+> **Nota:** Se preferisci compilare manualmente tutti i moduli prima di avviare:
>
> **Bash:**
> ```bash
@@ -282,41 +282,41 @@ cd ..; .\stop-all.ps1 # Tutti i moduli
## Usare l'Applicazione
-L'applicazione fornisce un'interfaccia web con due implementazioni di chat affiancate.
+L'applicazione fornisce un’interfaccia web con due implementazioni di chat affiancate.
-*Dashboard che mostra entrambe le opzioni Simple Chat (senza stato) e Conversational Chat (con stato)*
+*Dashboard che mostra le opzioni di Simple Chat (stateless) e Conversational Chat (stateful)*
-### Chat Senza Stato (Pannello Sinistro)
+### Chat Stateless (Pannello Sinistro)
-Prova prima questa. Chiedi "Mi chiamo John" e poi subito dopo chiedi "Come mi chiamo?" Il modello non ricorderà perché ogni messaggio è indipendente. Questo dimostra il problema principale con l'integrazione base dei modelli di linguaggio - nessun contesto di conversazione.
+Prova prima questa. Chiedi "Mi chiamo John" e poi subito dopo chiedi "Come mi chiamo?" Il modello non ricorderà perché ogni messaggio è indipendente. Questo dimostra il problema centrale dell’integrazione basica del modello di linguaggio - nessun contesto conversazionale.
*L'AI non ricorda il tuo nome dal messaggio precedente*
-### Chat Con Stato (Pannello Destro)
+### Chat Stateful (Pannello Destro)
-Ora prova la stessa sequenza qui. Chiedi "Mi chiamo John" e poi "Come mi chiamo?" Questa volta lo ricorda. La differenza è MessageWindowChatMemory - mantiene la cronologia della conversazione e la include ad ogni richiesta. Così funziona l'AI conversazionale in produzione.
+Ora prova la stessa sequenza qui. Chiedi "Mi chiamo John" e poi "Come mi chiamo?" Questa volta lo ricorda. La differenza è MessageWindowChatMemory - mantiene la cronologia della conversazione e la include in ogni richiesta. Così funziona l’intelligenza artificiale conversazionale in produzione.
-*L'AI ricorda il tuo nome da prima nella conversazione*
+*L'AI ricorda il tuo nome detto in precedenza nella conversazione*
-Entrambi i pannelli usano lo stesso modello GPT-5.2. L'unica differenza è la memoria. Questo rende chiaro cosa la memoria apporta alla tua applicazione e perché è essenziale per casi d'uso reali.
+Entrambi i pannelli usano lo stesso modello GPT-5.2. L’unica differenza è la memoria. Questo rende chiaro cosa la memoria porta alla tua applicazione e perché è fondamentale per casi d’uso reali.
-## Prossimi Passi
+## Passi Successivi
-**Modulo Successivo:** [02-prompt-engineering - Prompt Engineering con GPT-5.2](../02-prompt-engineering/README.md)
+**Modulo Successivo:** [02-prompt-engineering - Ingegneria del Prompt con GPT-5.2](../02-prompt-engineering/README.md)
---
-**Navigazione:** [← Precedente: Modulo 00 - Quick Start](../00-quick-start/README.md) | [Indietro al Principale](../README.md) | [Successivo: Modulo 02 - Prompt Engineering →](../02-prompt-engineering/README.md)
+**Navigazione:** [← Torna al Principale](../README.md) | [Avanti: Modulo 02 - Ingegneria del Prompt →](../02-prompt-engineering/README.md)
---
-**Avvertenza**:
-Questo documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Pur facendo del nostro meglio per garantire l’accuratezza, si prega di considerare che le traduzioni automatiche possono contenere errori o inesattezze. Il documento originale nella sua lingua natale deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un traduttore umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
+**Disclaimer**:
+Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire la precisione, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un essere umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
\ No newline at end of file
diff --git a/translations/it/02-prompt-engineering/README.md b/translations/it/02-prompt-engineering/README.md
index 35fb1495b..5936ed156 100644
--- a/translations/it/02-prompt-engineering/README.md
+++ b/translations/it/02-prompt-engineering/README.md
@@ -1,85 +1,85 @@
# Modulo 02: Ingegneria dei Prompt con GPT-5.2
-## Sommario
-
-- [Video Dimostrativo](../../../02-prompt-engineering)
-- [Cosa Imparerai](../../../02-prompt-engineering)
-- [Prerequisiti](../../../02-prompt-engineering)
-- [Comprendere l'Ingegneria dei Prompt](../../../02-prompt-engineering)
-- [Fondamenti di Ingegneria dei Prompt](../../../02-prompt-engineering)
- - [Prompt Zero-Shot](../../../02-prompt-engineering)
- - [Prompt Few-Shot](../../../02-prompt-engineering)
- - [Catena di Pensiero](../../../02-prompt-engineering)
- - [Prompt Basati sul Ruolo](../../../02-prompt-engineering)
- - [Template per Prompt](../../../02-prompt-engineering)
-- [Modelli Avanzati](../../../02-prompt-engineering)
-- [Esegui l'Applicazione](../../../02-prompt-engineering)
-- [Screenshot dell'Applicazione](../../../02-prompt-engineering)
-- [Esplorando i Modelli](../../../02-prompt-engineering)
- - [Bassa vs Alta Motivazione](../../../02-prompt-engineering)
- - [Esecuzione di Compiti (Introduzioni agli Strumenti)](../../../02-prompt-engineering)
- - [Codice Auto-Riflessivo](../../../02-prompt-engineering)
- - [Analisi Strutturata](../../../02-prompt-engineering)
- - [Chat Multi-Turno](../../../02-prompt-engineering)
- - [Ragionamento Passo-Passo](../../../02-prompt-engineering)
- - [Output Vincolato](../../../02-prompt-engineering)
-- [Cosa Stai Veramente Imparando](../../../02-prompt-engineering)
-- [Prossimi Passi](../../../02-prompt-engineering)
-
-## Video Dimostrativo
+## Indice
+
+- [Video Guida](#video-guida)
+- [Cosa Imparerai](#cosa-imparerai)
+- [Prerequisiti](#prerequisiti)
+- [Comprendere l'Ingegneria dei Prompt](#comprendere-lingegneria-dei-prompt)
+- [Fondamenti dell'Ingegneria dei Prompt](#fondamenti-dellingegneria-dei-prompt)
+ - [Zero-Shot Prompting](#zero-shot-prompting)
+ - [Few-Shot Prompting](#few-shot-prompting)
+ - [Chain of Thought](#chain-of-thought)
+ - [Role-Based Prompting](#role-based-prompting)
+ - [Prompt Templates](#prompt-templates)
+- [Pattern Avanzati](#pattern-avanzati)
+- [Esegui l'Applicazione](#esegui-lapplicazione)
+- [Screenshot dell'Applicazione](#screenshot-dellapplicazione)
+- [Esplorando i Pattern](#esplorare-i-pattern)
+ - [Bassa contro Alta Voglia](#bassa-vs-alta-propensione)
+ - [Esecuzione di Compiti (Preamboli degli Strumenti)](#esecuzione-di-attività-pre-amboli-per-gli-strumenti)
+ - [Codice Auto-Riflettente](#codice-auto-riflessivo)
+ - [Analisi Strutturata](#analisi-strutturata)
+ - [Chat Multi-Turno](#chat-multi-turno)
+ - [Ragionamento Passo-Passo](#ragionamento-passo-passo)
+ - [Output Vincolato](#output-vincolato)
+- [Cosa Stai Davvero Imparando](#cosa-impari-veramente)
+- [Prossimi Passi](#prossimi-passi)
+
+## Video Guida
Guarda questa sessione live che spiega come iniziare con questo modulo:
-
+
## Cosa Imparerai
-Il diagramma seguente offre una panoramica degli argomenti chiave e delle competenze che svilupperai in questo modulo — dalle tecniche di raffinamento dei prompt al workflow passo-passo che seguirai.
+Il diagramma seguente offre una panoramica degli argomenti chiave e delle competenze che svilupperai in questo modulo — dalle tecniche di raffinamento del prompt fino al flusso di lavoro passo-passo che seguirai.
-Nei moduli precedenti, hai esplorato interazioni base di LangChain4j con i modelli GitHub e visto come la memoria abilita l’IA conversazionale con Azure OpenAI. Ora ci concentreremo su come porre domande — i prompt stessi — utilizzando GPT-5.2 di Azure OpenAI. Il modo in cui strutturi i tuoi prompt influisce notevolmente sulla qualità delle risposte ottenute. Iniziamo con una revisione delle tecniche fondamentali di prompting, poi passeremo a otto modelli avanzati che sfruttano appieno le capacità di GPT-5.2.
+Nel modulo precedente hai visto come la memoria abilita l'AI conversazionale con Azure OpenAI. Ora ci concentreremo su come formulare le domande — i prompt stessi — usando GPT-5.2 di Azure OpenAI. Il modo in cui strutturi i prompt influisce dramaticamente sulla qualità delle risposte che ottieni. Iniziamo con una revisione delle tecniche fondamentali di prompting, per poi passare a otto pattern avanzati che sfruttano appieno le capacità di GPT-5.2.
-Useremo GPT-5.2 perché introduce il controllo del ragionamento - puoi indicare al modello quanto riflettere prima di rispondere. Questo rende più evidenti le diverse strategie di prompting e aiuta a capire quando usare ciascun approccio. Beneficeremo anche di limiti di frequenza meno restrittivi su GPT-5.2 rispetto ai modelli GitHub.
+Useremo GPT-5.2 perché introduce il controllo del ragionamento — puoi indicare al modello quanta riflessione fare prima di rispondere. Questo rende più evidenti le diverse strategie di prompting e ti aiuta a capire quando usare ciascun approccio.
## Prerequisiti
-- Modulo 01 completato (risorse Azure OpenAI distribuite)
-- File `.env` nella directory principale con credenziali Azure (creato da `azd up` nel Modulo 01)
+- Completato il Modulo 01 (risorse Azure OpenAI distribuite)
+- File `.env` nella directory root con credenziali Azure (creato da `azd up` nel Modulo 01)
-> **Nota:** Se non hai completato il Modulo 01, segui prima le istruzioni di distribuzione lì.
+> **Nota:** Se non hai completato il Modulo 01, segui prima le istruzioni di deployment lì.
## Comprendere l'Ingegneria dei Prompt
-Alla base, l’ingegneria dei prompt è la differenza tra istruzioni vaghe e precise, come illustra il confronto qui sotto.
+Alla base, l'ingegneria dei prompt è la differenza tra istruzioni vaghe e istruzioni precise, come illustra il confronto sottostante.
-L’ingegneria dei prompt consiste nel progettare un testo di input che ottenga costantemente i risultati desiderati. Non si tratta solo di fare domande - ma di strutturare le richieste affinché il modello capisca esattamente cosa vuoi e come fornire la risposta.
+L'ingegneria dei prompt consiste nel progettare testi di input che ottengano costantemente i risultati desiderati. Non si tratta solo di fare domande — ma di strutturare le richieste in modo che il modello capisca esattamente cosa vuoi e come fornirlo.
-Pensalo come dare istruzioni a un collega. "Correggi l’errore" è vago. "Correggi la eccezione null pointer in UserService.java alla linea 45 aggiungendo un controllo null" è specifico. I modelli linguistici funzionano allo stesso modo - specificità e struttura sono importanti.
+Pensa a quando dai istruzioni a un collega. "Sistema il bug" è vago. "Sistema l'eccezione null pointer in UserService.java alla riga 45 aggiungendo un controllo null" è specifico. I modelli linguistici funzionano allo stesso modo — la specificità e la struttura contano.
-Il diagramma seguente mostra come LangChain4j si inserisce in questo contesto — collegando i tuoi modelli di prompt al modello attraverso i costrutti SystemMessage e UserMessage.
+Il diagramma qui sotto mostra come LangChain4j si inserisce in questo contesto — collegando i tuoi pattern di prompt al modello tramite i blocchi costitutivi SystemMessage e UserMessage.
-
+
-LangChain4j fornisce l’infrastruttura — connessioni ai modelli, memoria e tipi di messaggi — mentre i modelli di prompt sono semplicemente testi accuratamente strutturati che invii attraverso questa infrastruttura. I principali costrutti sono `SystemMessage` (che imposta il comportamento e il ruolo dell’IA) e `UserMessage` (che contiene la tua richiesta vera e propria).
+LangChain4j fornisce l'infrastruttura — connessioni al modello, memoria e tipi di messaggi — mentre i pattern di prompt sono semplicemente testo strutturato inviato attraverso quell'infrastruttura. I blocchi chiave sono `SystemMessage` (che imposta il comportamento e il ruolo dell'AI) e `UserMessage` (che veicola la tua richiesta reale).
-## Fondamenti di Ingegneria dei Prompt
+## Fondamenti dell'Ingegneria dei Prompt
-Le cinque tecniche principali mostrate qui sotto costituiscono la base per un’ingegneria dei prompt efficace. Ognuna affronta un aspetto diverso della comunicazione con i modelli linguistici.
+Le cinque tecniche di base mostrate qui sotto costituiscono la base dell'ingegneria dei prompt efficace. Ognuna affronta un aspetto diverso di come comunichi con i modelli linguistici.
-
+
-Prima di immergerci nei modelli avanzati di questo modulo, rivediamo cinque tecniche fondamentali di prompting. Questi sono i mattoni che ogni ingegnere di prompt dovrebbe conoscere. Se hai già seguito il [modulo Quick Start](../00-quick-start/README.md#2-prompt-patterns), li hai già visti in azione — ecco il quadro concettuale alla base.
+Prima di immergerci nei pattern avanzati di questo modulo, diamo una revisione a cinque tecniche fondamentali di prompting. Questi sono i mattoni che ogni ingegnere di prompt dovrebbe conoscere.
-### Prompt Zero-Shot
+### Zero-Shot Prompting
-L’approccio più semplice: dare al modello un’istruzione diretta senza esempi. Il modello si affida interamente al proprio addestramento per comprendere ed eseguire il compito. Funziona bene per richieste semplici dove il comportamento atteso è chiaro.
+L'approccio più semplice: dare al modello un’istruzione diretta senza esempi. Il modello si basa interamente sul suo training per comprendere ed eseguire il compito. Funziona bene per richieste semplici dove il comportamento atteso è ovvio.
-
+
-*Istruzione diretta senza esempi — il modello deduce il compito dall’istruzione stessa*
+*Istruzione diretta senza esempi — il modello deduce il compito solo dall’istruzione*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
@@ -87,15 +87,15 @@ String response = model.chat(prompt);
// Risposta: "Positivo"
```
-**Quando usarlo:** Classificazioni semplici, domande dirette, traduzioni o qualsiasi compito che il modello può gestire senza ulteriori indicazioni.
+**Quando usarlo:** Classificazioni semplici, domande dirette, traduzioni o qualsiasi compito che il modello può gestire senza guida aggiuntiva.
-### Prompt Few-Shot
+### Few-Shot Prompting
-Fornisci esempi che dimostrano il modello da seguire. Il modello apprende il formato input-output atteso dai tuoi esempi e lo applica ai nuovi input. Questo migliora notevolmente la coerenza per compiti dove il formato o comportamento desiderato non è ovvio.
+Fornire esempi che mostrino il pattern che vuoi il modello segua. Il modello assimila il formato input-output atteso dagli esempi e lo applica a nuovi input. Questo migliora drasticamente la coerenza per compiti dove il formato o comportamento desiderato non è ovvio.
-
+
-*Apprendimento dagli esempi — il modello identifica il modello e lo applica a nuovi input*
+*Apprendimento dagli esempi — il modello identifica il pattern e lo applica a nuovi input*
```java
String prompt = """
@@ -112,15 +112,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Quando usarlo:** Classificazioni personalizzate, formattazioni coerenti, compiti specifici di dominio, o quando i risultati zero-shot sono incoerenti.
+**Quando usarlo:** Classificazioni personalizzate, formattazioni consistenti, compiti specifici di dominio, o quando i risultati zero-shot sono incoerenti.
-### Catena di Pensiero
+### Chain of Thought
-Chiedi al modello di mostrare il ragionamento passo-passo. Invece di saltare direttamente alla risposta, il modello scompone il problema e lavora esplicitamente su ogni parte. Questo migliora l’accuratezza in matematica, logica e ragionamenti multi-fase.
+Chiedi al modello di mostrare il suo ragionamento passo-passo. Invece di saltare direttamente alla risposta, il modello scompone il problema e lavora esplicitamente su ogni parte. Questo migliora l'accuratezza in matematica, logica e ragionamenti multi-step.
-
+
-*Ragionamento passo-passo — scomporre problemi complessi in passaggi logici espliciti*
+*Ragionamento passo-passo — scomporre problemi complessi in passi logici espliciti*
```java
String prompt = """
@@ -133,15 +133,15 @@ String response = model.chat(prompt);
// Il modello mostra: 15 - 8 = 7, poi 7 + 12 = 19 mele
```
-**Quando usarlo:** Problemi matematici, puzzle logici, debug o qualsiasi compito dove mostrare il processo di ragionamento migliora accuratezza e fiducia.
+**Quando usarlo:** Problemi di matematica, giochi di logica, debugging o qualsiasi compito dove mostrare il processo di ragionamento migliora accuratezza e fiducia.
-### Prompt Basati sul Ruolo
+### Role-Based Prompting
-Imposta una persona o ruolo per l’IA prima di porre la domanda. Questo fornisce un contesto che modella il tono, la profondità e il focus della risposta. Un "architetto software" dà consigli diversi rispetto a un "sviluppatore junior" o a un "auditor di sicurezza".
+Imposta una persona o un ruolo per l'AI prima di fare la domanda. Questo fornisce contesto che modella il tono, la profondità e il focus della risposta. Un "architetto software" dà consigli diversi rispetto a un "developer junior" o un "auditor di sicurezza".
-
+
-*Impostare contesto e persona — stessa domanda, risposte diverse a seconda del ruolo assegnato*
+*Impostare contesto e persona — la stessa domanda riceve risposte diverse in base al ruolo assegnato*
```java
String prompt = """
@@ -157,15 +157,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**Quando usarlo:** Revisioni di codice, tutoraggio, analisi specifiche di dominio, o quando servono risposte personalizzate a un livello di esperienza o prospettiva precisa.
+**Quando usarlo:** Code review, tutoring, analisi specifiche di dominio, o quando hai bisogno di risposte su misura per un livello di competenza o prospettiva particolari.
-### Template per Prompt
+### Prompt Templates
-Crea prompt riutilizzabili con segnaposto variabili. Invece di scrivere un nuovo prompt ogni volta, definisci un template una volta e inserisci valori diversi. La classe `PromptTemplate` di LangChain4j rende facile questo con la sintassi `{{variabile}}`.
+Crea prompt riutilizzabili con segnaposti variabili. Invece di scrivere un prompt nuovo ogni volta, definisci un template una volta sola e riempi con valori diversi. La classe `PromptTemplate` di LangChain4j rende facile questo con la sintassi `{{variable}}`.
-
+
-*Prompt riutilizzabili con segnaposto variabili — un template, molti usi*
+*Prompt riutilizzabili con segnaposti variabili — un template, molteplici usi*
```java
PromptTemplate template = PromptTemplate.from(
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**Quando usarlo:** Query ripetute con input diversi, elaborazioni batch, costruzione di workflow AI riutilizzabili, o qualsiasi scenario in cui la struttura del prompt resta la stessa ma cambiano i dati.
+**Quando usarlo:** Query ripetute con input diversi, elaborazioni batch, costruzione di workflow AI riutilizzabili, o ogni scenario dove la struttura del prompt resta la stessa ma cambiano i dati.
---
-Questi cinque fondamenti ti danno una solida cassetta degli attrezzi per la maggior parte dei compiti di prompting. Il resto di questo modulo si basa su di essi con **otto modelli avanzati** che sfruttano il controllo del ragionamento, l’auto-valutazione e le capacità di output strutturato di GPT-5.2.
+Questi cinque fondamenti ti danno un kit solido per la maggior parte dei compiti di prompting. Il resto di questo modulo si basa su di essi con **otto pattern avanzati** che sfruttano il controllo del ragionamento, l’auto-valutazione e le capacità di output strutturato di GPT-5.2.
-## Modelli Avanzati
+## Pattern Avanzati
-Con i fondamenti coperti, passiamo agli otto modelli avanzati che rendono questo modulo unico. Non tutti i problemi richiedono lo stesso approccio. Alcune domande richiedono risposte rapide, altre un ragionamento profondo. Alcuni hanno bisogno di ragionamenti visibili, altri solo dei risultati. Ciascun modello qui sotto è ottimizzato per uno scenario diverso — e il controllo del ragionamento di GPT-5.2 rende queste differenze ancora più marcate.
+Con i fondamenti coperti, passiamo agli otto pattern avanzati che rendono questo modulo unico. Non tutti i problemi necessitano dello stesso approccio. Alcune domande richiedono risposte rapide, altre pensiero profondo. Alcune vogliono ragionamenti visibili, altre solo i risultati. Ogni pattern qui sotto è ottimizzato per uno scenario diverso — e il controllo del ragionamento di GPT-5.2 rende le differenze ancora più marcate.
-
+
-*Panoramica degli otto modelli di ingegneria dei prompt e i loro casi d’uso*
+*Panoramica degli otto pattern di ingegneria dei prompt e i loro casi d’uso*
-GPT-5.2 aggiunge un’altra dimensione a questi modelli: *il controllo del ragionamento*. Il cursore qui sotto mostra come puoi regolare lo sforzo di pensiero del modello — da risposte rapide e dirette ad analisi profonde e dettagliate.
+GPT-5.2 aggiunge un’altra dimensione a questi pattern: *il controllo del ragionamento*. Il cursore qui sotto mostra come puoi regolare lo sforzo di pensiero del modello — da risposte rapide e dirette a analisi profonde e complete.
-*Il controllo del ragionamento di GPT-5.2 ti permette di specificare quanto il modello deve riflettere — da risposte veloci e dirette a esplorazioni approfondite*
+*Il controllo del ragionamento di GPT-5.2 ti permette di specificare quanta riflessione il modello deve fare — da risposte rapide a esplorazioni profonde*
-**Bassa Motivazione (Veloce & Mirato)** - Per domande semplici dove vuoi risposte rapide e dirette. Il modello fa un ragionamento minimo - massimo 2 passaggi. Usalo per calcoli, ricerche o domande dirette.
+**Bassa Voglia (Veloce & Focalizzato)** - Per domande semplici dove vuoi risposte veloci e dirette. Il modello esegue un ragionamento minimo - massimo 2 passi. Usa questo per calcoli, ricerche, o domande immediate.
```java
String prompt = """
@@ -220,11 +220,11 @@ String response = chatModel.chat(prompt);
```
> 💡 **Esplora con GitHub Copilot:** Apri [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) e chiedi:
-> - "Qual è la differenza tra modelli di prompting a bassa e alta motivazione?"
-> - "Come aiutano i tag XML nei prompt a strutturare la risposta dell’IA?"
-> - "Quando dovrei usare modelli di auto-riflessione rispetto a istruzioni dirette?"
+> - "Qual è la differenza tra pattern di bassa voglia e alta voglia nei prompting?"
+> - "Come aiutano i tag XML nei prompt a strutturare la risposta dell’AI?"
+> - "Quando dovrei usare pattern di auto-riflessione vs istruzioni dirette?"
-**Alta Motivazione (Profondo & Dettagliato)** - Per problemi complessi dove vuoi un’analisi completa. Il modello esplora a fondo e mostra un ragionamento dettagliato. Usalo per progettazioni di sistema, decisioni di architettura o ricerche complesse.
+**Alta Voglia (Profondo & Completo)** - Per problemi complessi dove vuoi un’analisi esaustiva. Il modello esplora a fondo e mostra un ragionamento dettagliato. Usa questo per progettazione di sistemi, decisioni architetturali, o ricerche complesse.
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**Esecuzione di Compiti (Progresso Passo-Passo)** - Per flussi di lavoro multi-step. Il modello fornisce un piano iniziale, narra ogni passaggio mentre lavora, poi fornisce un riepilogo. Usalo per migrazioni, implementazioni o qualsiasi processo multi-step.
+**Esecuzione di Compiti (Progresso Passo-Passo)** - Per workflow multi-step. Il modello fornisce un piano iniziale, narra ogni passo mentre lavora, poi dà un riepilogo. Usa questo per migrazioni, implementazioni o qualsiasi processo a più fasi.
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Il prompting Catena di Pensiero chiede esplicitamente al modello di mostrare il ragionamento, migliorando l’accuratezza per compiti complessi. La scomposizione passo-passo aiuta sia gli umani che l’IA a comprendere la logica.
+Il prompting Chain-of-Thought chiede esplicitamente al modello di mostrare il processo di ragionamento, migliorando l’accuratezza per compiti complessi. La scomposizione passo-passo aiuta sia gli umani che l’AI a capire la logica.
-> **🤖 Prova con la Chat di [GitHub Copilot](https://github.com/features/copilot):** Chiedi su questo modello:
-> - "Come adatterei il modello di esecuzione compiti per operazioni di lunga durata?"
-> - "Quali sono le best practice per strutturare le introduzioni degli strumenti nelle applicazioni di produzione?"
-> - "Come posso catturare e mostrare aggiornamenti di progresso intermedi in un’interfaccia utente?"
+> **🤖 Prova con la Chat di [GitHub Copilot](https://github.com/features/copilot):** Chiedi di questo pattern:
+> - "Come adattare il pattern di esecuzione di compiti per operazioni a lunga durata?"
+> - "Quali sono le best practice per strutturare i preamboli degli strumenti in applicazioni di produzione?"
+> - "Come catturare e mostrare aggiornamenti intermedi di progresso in un’interfaccia utente?"
Il diagramma qui sotto illustra questo flusso Plan → Execute → Summarize.
-
+
*Flusso Plan → Execute → Summarize per compiti multi-step*
-**Codice Auto-Riflessivo** - Per generare codice di qualità produttiva. Il modello genera codice seguendo standard di produzione con una gestione errori adeguata. Usalo per costruire nuove funzionalità o servizi.
+**Codice Auto-Riflettente** - Per generare codice di qualità produzione. Il modello genera codice secondo standard produttivi con gestione appropriata degli errori. Usa questo quando costruisci nuove funzionalità o servizi.
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Il diagramma seguente mostra questo ciclo di miglioramento iterativo — genera, valuta, identifica debolezze e affina fino a quando il codice soddisfa gli standard produttivi.
+Il diagramma qui sotto mostra questo ciclo iterativo di miglioramento — genera, valuta, individua punti deboli e affina finché il codice raggiunge gli standard produttivi.
-*Ciclo di miglioramento iterativo - genera, valuta, identifica problemi, migliora, ripeti*
+*Ciclo iterativo di miglioramento – genera, valuta, individua problemi, migliora, ripeti*
-**Analisi Strutturata** - Per valutazioni coerenti. Il modello revisiona il codice usando un quadro fisso (correttezza, pratiche, performance, sicurezza, manutenibilità). Usalo per review di codice o valutazioni di qualità.
+**Analisi Strutturata** - Per valutazioni consistenti. Il modello revisiona codice usando un framework fisso (correttezza, pratiche, performance, sicurezza, manutenibilità). Usa questo per code review o valutazioni di qualità.
```java
String prompt = """
@@ -354,18 +354,18 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> **🤖 Prova con la Chat di [GitHub Copilot](https://github.com/features/copilot):** Chiedi sull’analisi strutturata:
-> - "Come posso personalizzare il quadro di analisi per diversi tipi di revisioni di codice?"
-> - "Qual è il modo migliore per analizzare e agire su output strutturati programmaticamente?"
+> **🤖 Prova con la Chat di [GitHub Copilot](https://github.com/features/copilot):** Chiedi dell’analisi strutturata:
+> - "Come personalizzare il framework di analisi per diversi tipi di code review?"
+> - "Qual è il modo migliore per analizzare e agire su output strutturato programmaticamente?"
> - "Come garantire livelli di severità coerenti tra diverse sessioni di revisione?"
-Il diagramma seguente mostra come questo quadro strutturato organizza una revisione di codice in categorie coerenti con livelli di severità.
+Il diagramma seguente mostra come questo framework strutturato organizza una code review in categorie consistenti con livelli di severità.
-
+
-*Quadro per revisioni di codice coerenti con livelli di severità*
+*Framework per code review coerenti con livelli di severità*
-**Chat Multi-Turno** - Per conversazioni che necessitano contesto. Il modello ricorda i messaggi precedenti e costruisce su di essi. Usalo per sessioni di aiuto interattive o Q&A complessi.
+**Chat Multi-Turno** - Per conversazioni che necessitano di contesto. Il modello ricorda i messaggi precedenti e costruisce sopra di essi. Usa questo per sessioni di aiuto interattive o Q&A complessi.
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-Il diagramma seguente visualizza come il contesto della conversazione si accumula a ogni turno e come si relaziona al limite di token del modello.
+Il diagramma qui sotto visualizza come il contesto della conversazione si accumula ad ogni turno e come questo si rapporta al limite di token del modello.
-*Come il contesto di conversazione si accumula su più turni fino a raggiungere il limite di token*
-**Step-by-Step Reasoning** - Per problemi che richiedono una logica visibile. Il modello mostra un ragionamento esplicito per ogni passaggio. Usalo per problemi di matematica, puzzle logici o quando hai bisogno di comprendere il processo di pensiero.
+*Come il contesto della conversazione si accumula su più turni fino a raggiungere il limite di token*
+
+**Ragionamento Passo-Passo** - Per problemi che richiedono logica visibile. Il modello mostra ragionamenti espliciti per ciascun passo. Usa questo per problemi di matematica, rompicapi logici, o quando serve comprendere il processo di pensiero.
```java
String prompt = """
@@ -398,13 +399,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Il diagramma sottostante illustra come il modello suddivide i problemi in passaggi logici espliciti e numerati.
-
-
+Il diagramma qui sotto illustra come il modello suddivide i problemi in passi logici numerati ed espliciti.
-*Scomporre i problemi in passaggi logici espliciti*
+
+*Suddividere i problemi in passaggi logici espliciti*
-**Constrained Output** - Per risposte con requisiti di formato specifici. Il modello segue rigorosamente le regole di formato e lunghezza. Usalo per riassunti o quando hai bisogno di una struttura di output precisa.
+**Output vincolato** - Per risposte con requisiti di formato specifici. Il modello segue rigorosamente le regole di formato e lunghezza. Usalo per riepiloghi o quando hai bisogno di una struttura di output precisa.
```java
String prompt = """
@@ -420,9 +420,9 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-Il seguente diagramma mostra come i vincoli guidano il modello a produrre un output che aderisce rigorosamente al tuo formato e ai requisiti di lunghezza.
+Il diagramma seguente mostra come i vincoli guidano il modello a produrre un output che aderisce rigorosamente ai tuoi requisiti di formato e lunghezza.
-
+
*Applicare requisiti specifici di formato, lunghezza e struttura*
@@ -430,7 +430,7 @@ Il seguente diagramma mostra come i vincoli guidano il modello a produrre un out
**Verifica il deployment:**
-Assicurati che il file `.env` esista nella directory principale con le credenziali Azure (create durante il Modulo 01). Esegui questo dal modulo (`02-prompt-engineering/`):
+Assicurati che il file `.env` esista nella directory principale con le credenziali di Azure (create durante il Modulo 01). Esegui questo dalla directory del modulo (`02-prompt-engineering/`):
**Bash:**
```bash
@@ -444,37 +444,37 @@ Get-Content ..\.env # Dovrebbe mostrare AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYM
**Avvia l'applicazione:**
-> **Nota:** Se hai già avviato tutte le applicazioni usando `./start-all.sh` dalla directory principale (come descritto nel Modulo 01), questo modulo è già in esecuzione sulla porta 8083. Puoi saltare i comandi di avvio qui sotto e andare direttamente a http://localhost:8083.
+> **Nota:** Se hai già avviato tutte le applicazioni usando `./start-all.sh` dalla directory principale (come descritto nel Modulo 01), questo modulo è già in esecuzione sulla porta 8083. Puoi saltare i comandi di avvio seguenti e andare direttamente a http://localhost:8083.
-**Opzione 1: Uso del Spring Boot Dashboard (Consigliato per utenti VS Code)**
+**Opzione 1: Usare Spring Boot Dashboard (Consigliato per utenti VS Code)**
-Il contenitore di sviluppo include l'estensione Spring Boot Dashboard, che fornisce un'interfaccia visiva per gestire tutte le applicazioni Spring Boot. La trovi nella Activity Bar sul lato sinistro di VS Code (cerca l'icona di Spring Boot).
+Il container di sviluppo include l'estensione Spring Boot Dashboard, che fornisce un'interfaccia visuale per gestire tutte le applicazioni Spring Boot. Puoi trovarla nella Activity Bar sul lato sinistro di VS Code (cerca l'icona Spring Boot).
Dal Spring Boot Dashboard puoi:
-- Vedere tutte le applicazioni Spring Boot disponibili nel workspace
-- Avviare/fermare le applicazioni con un solo clic
-- Visualizzare i log delle applicazioni in tempo reale
-- Monitorare lo stato delle applicazioni
+- Vedere tutte le applicazioni Spring Boot disponibili nell'area di lavoro
+- Avviare/fermare applicazioni con un solo clic
+- Visualizzare i log dell'applicazione in tempo reale
+- Monitorare lo stato dell'applicazione
-Basta cliccare il pulsante play accanto a "prompt-engineering" per avviare questo modulo, o avviare tutti i moduli contemporaneamente.
+Clicca semplicemente il pulsante play accanto a "prompt-engineering" per avviare questo modulo, oppure avvia tutti i moduli insieme.
*Il Spring Boot Dashboard in VS Code — avvia, ferma e monitora tutti i moduli da un unico posto*
-**Opzione 2: Uso di script shell**
+**Opzione 2: Usare gli script shell**
Avvia tutte le applicazioni web (moduli 01-04):
**Bash:**
```bash
-cd .. # Dalla directory principale
+cd .. # Dalla directory radice
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # Dalla directory radice
+cd .. # Dalla directory principale
.\start-all.ps1
```
@@ -492,9 +492,9 @@ cd 02-prompt-engineering
.\start.ps1
```
-Entrambi gli script caricano automaticamente le variabili d'ambiente dal file `.env` nella directory principale e costruiranno i JAR se non esistono.
+Entrambi gli script caricano automaticamente le variabili d'ambiente dal file `.env` nella root e compileranno i JAR se non esistono.
-> **Nota:** Se preferisci compilare tutti i moduli manualmente prima di avviare:
+> **Nota:** Se preferisci compilare manualmente tutti i moduli prima di avviare:
>
> **Bash:**
> ```bash
@@ -508,7 +508,7 @@ Entrambi gli script caricano automaticamente le variabili d'ambiente dal file `.
> mvn clean package -DskipTests
> ```
-Apri http://localhost:8083 nel browser.
+Apri http://localhost:8083 nel tuo browser.
**Per fermare:**
@@ -528,81 +528,81 @@ cd ..; .\stop-all.ps1 # Tutti i moduli
## Screenshot dell'Applicazione
-Ecco l'interfaccia principale del modulo di prompt engineering, dove puoi sperimentare tutti e otto i pattern fianco a fianco.
+Ecco l'interfaccia principale del modulo di prompt engineering, dove puoi sperimentare con tutti e otto i pattern fianco a fianco.
-*La dashboard principale che mostra tutti gli 8 pattern di prompt engineering con le loro caratteristiche e casi d'uso*
+*La dashboard principale che mostra tutti e 8 i pattern di prompt engineering con le loro caratteristiche e casi d'uso*
-## Esplorazione dei Pattern
+## Esplorare i Pattern
-L'interfaccia web ti permette di sperimentare diverse strategie di prompting. Ogni pattern risolve diversi problemi — provali per capire quando ciascun approccio funziona meglio.
+L'interfaccia web ti permette di sperimentare diverse strategie di prompting. Ogni pattern risolve problemi differenti - prova a vedere quando ogni approccio dà il meglio.
-> **Nota: Streaming vs Non-Streaming** — Ogni pagina di pattern offre due pulsanti: **🔴 Stream Response (Live)** e una opzione **Non-streaming**. Lo streaming usa Server-Sent Events (SSE) per mostrare i token in tempo reale mentre il modello li genera, così vedi subito i progressi. L'opzione non-streaming aspetta l'intera risposta prima di visualizzarla. Per prompt che avviano ragionamenti complessi (es. High Eagerness, Self-Reflecting Code), la chiamata non-streaming può richiedere molto tempo — a volte minuti — senza alcun feedback visibile. **Usa lo streaming quando sperimenti prompt complessi** così puoi vedere il modello lavorare ed evitare l'impressione che la richiesta sia andata in timeout.
+> **Nota: Streaming vs Non-Streaming** — Ogni pagina di pattern offre due pulsanti: **🔴 Stream Response (Live)** e una opzione **Non-streaming**. Lo streaming utilizza Server-Sent Events (SSE) per mostrare i token in tempo reale mentre il modello li genera, così vedi il progresso immediatamente. L'opzione non-streaming aspetta l'intera risposta prima di mostrarla. Per prompt che richiedono ragionamenti profondi (es. High Eagerness, Self-Reflecting Code), la chiamata non-streaming può richiedere molto tempo — a volte minuti — senza feedback visibile. **Usa lo streaming quando sperimenti con prompt complessi** così puoi vedere il modello in azione ed evitare l'impressione che la richiesta sia scaduta.
>
-> **Nota: Requisito Browser** — La funzione streaming usa la Fetch Streams API (`response.body.getReader()`) che richiede un browser completo (Chrome, Edge, Firefox, Safari). Non funziona nel Simple Browser integrato in VS Code, poiché la sua webview non supporta la ReadableStream API. Se usi il Simple Browser, i pulsanti non-streaming funzioneranno normalmente — solo i pulsanti streaming sono interessati. Apri `http://localhost:8083` in un browser esterno per l'esperienza completa.
+> **Nota: Requisiti Browser** — La funzionalità di streaming usa Fetch Streams API (`response.body.getReader()`) che richiede un browser completo (Chrome, Edge, Firefox, Safari). Non funziona nel Simple Browser integrato di VS Code, poiché la sua webview non supporta ReadableStream API. Se usi Simple Browser, i pulsanti non-streaming funzionano normalmente — solo quelli streaming sono influenzati. Apri `http://localhost:8083` in un browser esterno per l'esperienza completa.
-### Low vs High Eagerness
+### Bassa vs Alta Propensione
-Fai una domanda semplice come "Qual è il 15% di 200?" usando Low Eagerness. Otterrai una risposta istantanea e diretta. Ora chiedi qualcosa di complesso come "Progetta una strategia di caching per una API ad alto traffico" usando High Eagerness. Clicca **🔴 Stream Response (Live)** e guarda apparire il ragionamento dettagliato del modello token per token. Stesso modello, stessa struttura di domanda — ma il prompt indica quanta riflessione deve fare.
+Fai una domanda semplice come "Qual è il 15% di 200?" usando Bassa Propensione. Otterrai una risposta istantanea e diretta. Ora chiedi qualcosa di complesso come "Progetta una strategia di caching per un'API ad alto traffico" usando Alta Propensione. Clicca **🔴 Stream Response (Live)** e guarda il ragionamento dettagliato del modello apparire token per token. Stesso modello, stessa struttura di domanda - ma il prompt indica quanto pensiero attivare.
-### Esecuzione di Compiti (Tool Preambles)
+### Esecuzione di Attività (Pre-amboli per gli Strumenti)
-I workflow multi-step beneficiano di pianificazione anticipata e narrazione dei progressi. Il modello delinea cosa farà, narra ogni passo e poi riassume i risultati.
+I workflow a più fasi beneficiano di una pianificazione anticipata e narrazione del progresso. Il modello descrive cosa farà, narra ogni passaggio, poi riassume i risultati.
-### Codice Auto-Riflettente
+### Codice Auto-Riflessivo
-Prova "Crea un servizio di validazione email". Invece di generare solo il codice e fermarsi, il modello genera, valuta secondo criteri di qualità, identifica debolezze e migliora. Lo vedrai iterare fino a quando il codice soddisfa gli standard di produzione.
+Prova "Crea un servizio di validazione email". Invece di generare solo codice e fermarsi, il modello genera, valuta secondo criteri di qualità, identifica debolezze e migliora. Vedrai iterare finché il codice non raggiunge standard di produzione.
### Analisi Strutturata
-Le revisioni di codice necessitano di framework di valutazione coerenti. Il modello analizza il codice usando categorie fisse (correttezza, pratiche, prestazioni, sicurezza) con livelli di gravità.
+Le revisioni del codice necessitano di framework di valutazione coerenti. Il modello analizza il codice usando categorie fisse (correttezza, pratiche, performance, sicurezza) con livelli di gravità.
-### Chat Multi-Turno
+### Chat Multi-turno
-Chiedi "Cos'è Spring Boot?" e subito dopo "Fammi vedere un esempio". Il modello ricorda la tua prima domanda e ti dà un esempio specifico di Spring Boot. Senza memoria, la seconda domanda sarebbe troppo vaga.
+Chiedi "Cos'è Spring Boot?" e subito dopo "Mostrami un esempio". Il modello ricorda la prima domanda e ti dà un esempio specifico di Spring Boot. Senza memoria, la seconda domanda sarebbe troppo vaga.
-### Step-by-Step Reasoning
+### Ragionamento Passo-Passo
-Scegli un problema di matematica e provalo sia con Step-by-Step Reasoning che con Low Eagerness. Low Eagerness ti dà solo la risposta — veloce ma opaca. Step-by-step ti mostra ogni calcolo e decisione.
+Scegli un problema matematico e prova sia il Ragionamento Passo-Passo che la Bassa Propensione. La bassa propensione dà solo la risposta - veloce ma opaca. Il passo-passo mostra ogni calcolo e decisione.
-### Constrained Output
+### Output Vincolato
-Quando hai bisogno di formati specifici o conteggi di parole, questo pattern impone un'adesione rigorosa. Prova a generare un riassunto con esattamente 100 parole in formato elenco puntato.
+Quando necessiti formati specifici o conti parole precisi, questo pattern fa rispettare questi limiti rigorosi. Prova a generare un riepilogo con esattamente 100 parole in formato elenco puntato.
-## Cosa Stai Davvero Imparando
+## Cosa Impari Veramente
**Lo Sforzo di Ragionamento Cambia Tutto**
-GPT-5.2 ti permette di controllare lo sforzo computazionale tramite i prompt. Poco sforzo significa risposte rapide con esplorazione minima. Molto sforzo significa che il modello impiega tempo per riflettere profondamente. Stai imparando ad abbinare lo sforzo alla complessità del compito — non perdere tempo con domande semplici, ma non affrettare decisioni complesse.
+GPT-5.2 ti permette di controllare lo sforzo computazionale tramite i prompt. Poco sforzo significa risposte rapide con esplorazione minima. Alto sforzo significa che il modello impiega tempo per riflettere in profondità. Stai imparando ad abbinare lo sforzo alla complessità del compito - non sprecare tempo con domande semplici, ma non affrettare nemmeno decisioni complesse.
**La Struttura Guida il Comportamento**
-Hai notato i tag XML nei prompt? Non sono decorativi. I modelli seguono istruzioni strutturate in modo più affidabile rispetto al testo libero. Quando hai bisogno di processi multi-step o logica complessa, la struttura aiuta il modello a tenere traccia di dove si trova e cosa viene dopo. Il diagramma sotto scompone un prompt ben strutturato, mostrando come tag come ``, ``, ``, ``, e `` organizzano le tue istruzioni in sezioni chiare.
+Hai notato i tag XML nei prompt? Non sono decorativi. I modelli seguono istruzioni strutturate in modo più affidabile rispetto al testo libero. Quando ti servono processi multi-step o logica complessa, la struttura aiuta il modello a sapere dove si trova e cosa viene dopo. Il diagramma qui sotto scompone un prompt ben strutturato, mostrando come tag come ``, ``, ``, ``, e `` organizzano le istruzioni in sezioni chiare.
-
+
*Anatomia di un prompt ben strutturato con sezioni chiare e organizzazione in stile XML*
-**Qualità tramite Auto-Valutazione**
+**Qualità Tramite Auto-Valutazione**
-I pattern che usano l'auto-riflessione funzionano rendendo espliciti i criteri di qualità. Invece di sperare che il modello "faccia bene", gli dici esattamente cosa significa "bene": logica corretta, gestione degli errori, prestazioni, sicurezza. Il modello può quindi valutare la propria uscita e migliorare. Questo trasforma la generazione di codice da una lotteria a un processo.
+I pattern auto-riflessivi funzionano rendendo espliciti i criteri di qualità. Invece di sperare che il modello "faccia bene", gli dici esattamente cosa significa "bene": logica corretta, gestione errori, performance, sicurezza. Il modello può quindi valutare il proprio output e migliorare. Questo trasforma la generazione di codice da una lotteria a un processo.
**Il Contesto è Finito**
-Le conversazioni multi-turno funzionano includendo la storia dei messaggi con ogni richiesta. Ma c'è un limite — ogni modello ha un conteggio massimo di token. Man mano che le conversazioni crescono, avrai bisogno di strategie per mantenere contesto rilevante senza superare quel limite. Questo modulo ti mostra come funziona la memoria; più avanti imparerai quando riassumere, quando dimenticare e quando recuperare.
+Le conversazioni multi-turno funzionano includendo la cronologia dei messaggi ad ogni richiesta. Ma c'è un limite - ogni modello ha un massimo di token. Man mano che le conversazioni crescono, ti serviranno strategie per mantenere il contesto rilevante senza superare quel limite. Questo modulo ti mostra come funziona la memoria; più avanti imparerai quando riassumere, quando dimenticare e quando recuperare.
-## Passi Successivi
+## Prossimi Passi
**Prossimo Modulo:** [03-rag - RAG (Retrieval-Augmented Generation)](../03-rag/README.md)
---
-**Navigazione:** [← Precedente: Modulo 01 - Introduzione](../01-introduction/README.md) | [Torna al Principale](../README.md) | [Avanti: Modulo 03 - RAG →](../03-rag/README.md)
+**Navigazione:** [← Precedente: Modulo 01 - Introduzione](../01-introduction/README.md) | [Torna al Principale](../README.md) | [Successivo: Modulo 03 - RAG →](../03-rag/README.md)
---
**Disclaimer**:
-Questo documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per l’accuratezza, si prega di considerare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua natìa deve essere considerato la fonte autorevole. Per informazioni critiche si raccomanda la traduzione professionale umana. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall’uso di questa traduzione.
+Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire la precisione, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un essere umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
\ No newline at end of file
diff --git a/translations/it/03-rag/README.md b/translations/it/03-rag/README.md
index 288420242..2b23d2391 100644
--- a/translations/it/03-rag/README.md
+++ b/translations/it/03-rag/README.md
@@ -1,113 +1,112 @@
-# Modulo 03: RAG (Generazione Integrata con Recupero)
+# Modulo 03: RAG (Generazione Potenziata da Recupero)
## Indice
-- [Video Guida](../../../03-rag)
-- [Cosa Imparerai](../../../03-rag)
-- [Prerequisiti](../../../03-rag)
-- [Comprendere RAG](../../../03-rag)
- - [Quale Approccio RAG Usa Questo Tutorial?](../../../03-rag)
-- [Come Funziona](../../../03-rag)
- - [Elaborazione del Documento](../../../03-rag)
- - [Creazione degli Embedding](../../../03-rag)
- - [Ricerca Semantica](../../../03-rag)
- - [Generazione della Risposta](../../../03-rag)
-- [Esegui l'Applicazione](../../../03-rag)
-- [Uso dell'Applicazione](../../../03-rag)
- - [Carica un Documento](../../../03-rag)
- - [Fai Domande](../../../03-rag)
- - [Controlla le Riferimenti alla Fonte](../../../03-rag)
- - [Sperimenta con le Domande](../../../03-rag)
-- [Concetti Chiave](../../../03-rag)
- - [Strategia di Scomposizione](../../../03-rag)
- - [Punteggi di Similarità](../../../03-rag)
- - [Memorizzazione in RAM](../../../03-rag)
- - [Gestione della Finestra di Contesto](../../../03-rag)
-- [Quando RAG è Importante](../../../03-rag)
-- [Prossimi Passi](../../../03-rag)
-
-## Video Guida
-
-Guarda questa sessione dal vivo che spiega come iniziare con questo modulo:
-
-
+- [Guida Video](#guida-video)
+- [Cosa Imparerai](#cosa-imparerai)
+- [Prerequisiti](#prerequisiti)
+- [Comprendere RAG](#comprendere-rag)
+ - [Quale approccio RAG utilizza questo tutorial?](#quale-approccio-rag-utilizza-questo-tutorial)
+- [Come Funziona](#come-funziona)
+ - [Elaborazione del Documento](#elaborazione-del-documento)
+ - [Creazione degli Embedding](#creazione-degli-embedding)
+ - [Ricerca Semantica](#ricerca-semantica)
+ - [Generazione della Risposta](#generazione-della-risposta)
+- [Esecuzione dell’Applicazione](#esegui-lapplicazione)
+- [Utilizzo dell’Applicazione](#usare-lapplicazione)
+ - [Caricare un Documento](#carica-un-documento)
+ - [Porre Domande](#fai-domande)
+ - [Verificare le Riferimenti alle Fonti](#controlla-i-riferimenti-delle-fonti)
+ - [Sperimentare con le Domande](#sperimenta-con-le-domande)
+- [Concetti Chiave](#concetti-chiave)
+ - [Strategia di Suddivisione in Chunk](#strategia-di-suddivisione-in-chunk)
+ - [Punteggi di Similarità](#punteggi-di-similarità)
+ - [Memorizzazione In-Memory](#storage-in-memoria)
+ - [Gestione della Finestra di Contesto](#gestione-della-finestra-di-contesto)
+- [Quando RAG è Importante](#quando-rag-conta)
+- [Passi Successivi](#passaggi-successivi)
+
+## Guida Video
+
+Guarda questa sessione live che spiega come iniziare con questo modulo:
+
+
## Cosa Imparerai
-Nei moduli precedenti, hai imparato come conversare con l'IA e strutturare efficacemente i tuoi prompt. Ma c'è una limitazione fondamentale: i modelli di linguaggio conoscono solo ciò che hanno appreso durante l'addestramento. Non possono rispondere a domande sulle politiche della tua azienda, sulla documentazione del tuo progetto o su qualsiasi informazione su cui non sono stati addestrati.
+Nei moduli precedenti, hai imparato come avere conversazioni con l’AI e strutturare efficacemente i tuoi prompt. Ma c’è una limitazione fondamentale: i modelli linguistici conoscono solo ciò che hanno appreso durante l’addestramento. Non possono rispondere a domande sulle politiche della tua azienda, sulla documentazione del tuo progetto o su qualsiasi informazione su cui non sono stati addestrati.
-RAG (Generazione Integrata con Recupero) risolve questo problema. Invece di cercare di insegnare al modello le tue informazioni (operazione costosa e poco pratica), gli dai la capacità di cercare nei tuoi documenti. Quando qualcuno fa una domanda, il sistema trova informazioni rilevanti e le include nel prompt. Il modello risponde quindi in base a quel contesto recuperato.
+RAG (Generazione Potenziata da Recupero) risolve questo problema. Invece di cercare di insegnare al modello le tue informazioni (cosa costosa e poco pratica), gli dai la capacità di cercare tra i tuoi documenti. Quando qualcuno fa una domanda, il sistema trova informazioni rilevanti e le include nel prompt. Il modello risponde quindi basandosi su quel contesto recuperato.
-Pensa a RAG come a fornire al modello una biblioteca di riferimento. Quando fai una domanda, il sistema:
+Pensa a RAG come a fornire al modello una biblioteca di riferimento. Quando chiedi una domanda, il sistema:
-1. **Query Utente** - Fai una domanda
-2. **Embedding** - Converte la tua domanda in un vettore
-3. **Ricerca Vettoriale** - Trova chunk di documenti simili
-4. **Assemblaggio del Contesto** - Aggiunge chunk rilevanti al prompt
-5. **Risposta** - LLM genera una risposta basata sul contesto
+1. **Query Utente** - Fai una domanda
+2. **Embedding** - Converte la tua domanda in un vettore
+3. **Ricerca Vettoriale** - Trova chunk di documento simili
+4. **Assemblaggio del Contesto** - Aggiunge chunk rilevanti al prompt
+5. **Risposta** - LLM genera una risposta basata sul contesto
-Questo fa sì che le risposte del modello siano radicate nei tuoi dati reali invece di basarsi solo sulla conoscenza dell'addestramento o inventare risposte.
+Questo radica le risposte del modello nei tuoi dati reali invece di affidarsi solo alla conoscenza dell'addestramento o di inventare risposte.
## Prerequisiti
-- Aver completato il [Modulo 00 - Quick Start](../00-quick-start/README.md) (per l'esempio Easy RAG citato successivamente in questo modulo)
-- Aver completato il [Modulo 01 - Introduzione](../01-introduction/README.md) (risorse Azure OpenAI distribuite, incluso il modello di embedding `text-embedding-3-small`)
-- File `.env` nella directory radice con credenziali Azure (creato con `azd up` nel Modulo 01)
+- Completato il [Modulo 01 - Introduzione](../01-introduction/README.md) (risorse Azure OpenAI distribuite, incluso il modello di embedding `text-embedding-3-small`)
+- File `.env` nella directory root con le credenziali Azure (creato da `azd up` nel Modulo 01)
-> **Nota:** Se non hai completato il Modulo 01, segui prima le istruzioni di distribuzione lì. Il comando `azd up` distribuisce sia il modello chat GPT sia il modello embedding usato da questo modulo.
+> **Nota:** Se non hai completato il Modulo 01, segui prima lì le istruzioni di distribuzione. Il comando `azd up` distribuisce sia il modello GPT chat sia il modello di embedding usato in questo modulo.
## Comprendere RAG
-Il diagramma qui sotto illustra il concetto fondamentale: invece di affidarsi solo ai dati di addestramento del modello, RAG gli fornisce una biblioteca di riferimento dei tuoi documenti da consultare prima di generare ogni risposta.
+Il diagramma qui sotto illustra il concetto principale: invece di affidarsi solo ai dati di addestramento del modello, RAG gli fornisce una biblioteca di riferimento dei tuoi documenti da consultare prima di generare ogni risposta.
-
+
*Questo diagramma mostra la differenza tra un LLM standard (che indovina dai dati di addestramento) e un LLM potenziato con RAG (che consulta prima i tuoi documenti).*
-Ecco come i pezzi si connettono end-to-end. La domanda di un utente passa attraverso quattro fasi — embedding, ricerca vettoriale, assemblaggio del contesto e generazione della risposta — ciascuna costruita sulla precedente:
+Ecco come si connettono i pezzi end-to-end. La domanda di un utente passa attraverso quattro fasi — embedding, ricerca vettoriale, assemblaggio del contesto, e generazione della risposta — ognuna si basa sulla precedente:
-*Questo diagramma mostra la pipeline RAG end-to-end — una query utente passa attraverso embedding, ricerca vettoriale, assemblaggio del contesto e generazione della risposta.*
+*Questo diagramma mostra il flusso completo RAG — una query utente attraversa embedding, ricerca vettoriale, assemblaggio del contesto, e generazione della risposta.*
-Il resto di questo modulo illustra ogni fase in dettaglio, con codice che puoi eseguire e modificare.
+Il resto di questo modulo percorre ogni fase in dettaglio, con codice che puoi eseguire e modificare.
-### Quale Approccio RAG Usa Questo Tutorial?
+### Quale approccio RAG utilizza questo tutorial?
-LangChain4j offre tre modi per implementare RAG, ciascuno con un diverso livello di astrazione. Il diagramma qui sotto li confronta affiancati:
+LangChain4j offre tre modi per implementare RAG, ognuno con un diverso livello di astrazione. Il diagramma seguente li confronta fianco a fianco:
-*Questo diagramma confronta i tre approcci RAG di LangChain4j — Easy, Native e Advanced — mostrando i loro componenti chiave e quando usarli.*
+*Questo diagramma confronta i tre approcci RAG di LangChain4j — Easy, Native, e Advanced — mostrando i loro componenti chiave e quando usarli.*
| Approccio | Cosa Fa | Compromesso |
|---|---|---|
-| **Easy RAG** | Collega tutto automaticamente tramite `AiServices` e `ContentRetriever`. Annoti un'interfaccia, colleghi un retriever, e LangChain4j gestisce embedding, ricerca e assemblaggio prompt dietro le quinte. | Codice minimo, ma non vedi cosa succede a ogni passo. |
-| **Native RAG** | Chiami il modello di embedding, cerchi nello store, costruisci il prompt e generi la risposta tu stesso — un passo esplicito per volta. | Più codice, ma ogni fase è visibile e modificabile. |
-| **Advanced RAG** | Usa il framework `RetrievalAugmentor` con trasformatori di query pluggabili, router, ri-ordinatori e iniettori di contenuto per pipeline di livello produttivo. | Massima flessibilità, ma complessità significativamente maggiore. |
+| **Easy RAG** | Collega tutto automaticamente tramite `AiServices` e `ContentRetriever`. Annoti un’interfaccia, alleghi un retriever, e LangChain4j gestisce embedding, ricerca e assemblaggio del prompt dietro le quinte. | Minimo codice, ma non vedi cosa succede in ogni passaggio. |
+| **Native RAG** | Chiami direttamente il modello di embedding, cerchi nel magazzino, costruisci il prompt e generi la risposta — un passo esplicito alla volta. | Più codice, ma ogni fase è visibile e modificabile. |
+| **Advanced RAG** | Usa il framework `RetrievalAugmentor` con trasformatori di query pluggabili, router, riordinatori e iniettori di contenuti per pipeline di livello produzione. | Massima flessibilità, ma complessità significativamente maggiore. |
-**Questo tutorial usa l'approccio Native.** Ogni fase della pipeline RAG — embedding della query, ricerca nel vettore store, assemblaggio del contesto e generazione della risposta — è scritta esplicitamente in [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Questo è intenzionale: come risorsa di apprendimento è più importante che tu veda e capisca ogni fase piuttosto che minimizzare il codice. Una volta che ti senti a tuo agio con il funzionamento dei pezzi, puoi passare a Easy RAG per prototipi rapidi o a Advanced RAG per sistemi di produzione.
+**Questo tutorial usa l’approccio Native.** Ogni fase della pipeline RAG — embedding della query, ricerca nel vector store, assemblaggio del contesto, e generazione della risposta — è esplicitamente scritta in [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java). Questo è intenzionale: come risorsa didattica, è più importante che tu veda e capisca ogni fase piuttosto che ridurre al minimo il codice. Quando sarai a tuo agio con come i pezzi si incastrano, potrai passare a Easy RAG per prototipi rapidi o Advanced RAG per sistemi di produzione.
-> **💡 Hai già visto Easy RAG in azione?** Il [modulo Quick Start](../00-quick-start/README.md) include un esempio di Document Q&A ([`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)) che usa l'approccio Easy RAG — LangChain4j gestisce automaticamente embedding, ricerca e assemblaggio prompt. Questo modulo fa il passo successivo rompendo quella pipeline per farti vedere e controllare ogni fase da solo.
+> **💡 Curioso su Easy RAG?** LangChain4j offre anche un approccio *Easy RAG* dove `AiServices` e un `ContentRetriever` gestiscono automaticamente embedding, ricerca e assemblaggio del prompt. Questo modulo prende la strada più esplicita — aprendo quella pipeline così puoi vedere e controllare ogni fase.
-Il diagramma qui sotto mostra la pipeline Easy RAG di quell'esempio Quick Start. Nota come `AiServices` e `EmbeddingStoreContentRetriever` nascondano tutta la complessità — carichi un documento, colleghi un retriever e ottieni risposte. L'approccio Native in questo modulo apre ognuno di quegli step nascosti:
+Il diagramma qui sotto mostra la pipeline Easy RAG. Nota come `AiServices` e `EmbeddingStoreContentRetriever` nascondono tutta la complessità — carichi un documento, alleghi un retriever, e ottieni risposte. L’approccio Native in questo modulo apre ognuno di quei passaggi nascosti:
-*Questo diagramma mostra la pipeline Easy RAG da `SimpleReaderDemo.java`. Confrontalo con l'approccio Native usato in questo modulo: Easy RAG nasconde embedding, recupero e assemblaggio prompt dietro `AiServices` e `ContentRetriever` — carichi un documento, colleghi un retriever e ottieni risposte. L'approccio Native in questo modulo rompe quella pipeline così chiami ogni fase (embed, ricerca, assemblaggio contesto, generazione) tu stesso, dandoti piena visibilità e controllo.*
+*Questo diagramma mostra la pipeline Easy RAG. Confrontala con l’approccio Native usato in questo modulo: Easy RAG nasconde embedding, recupero e assemblaggio del prompt dietro `AiServices` e `ContentRetriever` — carichi un documento, alleghi un retriever e ottieni risposte. L’approccio Native in questo modulo apre quella pipeline così chiami ogni fase (embed, ricerca, assemblaggio contesto, generazione) tu stesso, dandoti piena visibilità e controllo.*
## Come Funziona
-La pipeline RAG in questo modulo si suddivide in quattro fasi che si eseguono in sequenza ogni volta che un utente fa una domanda. Per prima cosa, un documento caricato viene **analizzato e suddiviso in chunk** gestibili. Quei chunk vengono poi convertiti in **embedding vettoriali** e memorizzati così da poter essere confrontati matematicamente. Quando arriva una query, il sistema esegue una **ricerca semantica** per trovare i chunk più rilevanti, e infine li passa come contesto all'LLM per la **generazione della risposta**. Le sezioni seguenti spiegano ogni fase con codice e diagrammi concreti. Vediamo il primo passo.
+La pipeline RAG in questo modulo si scompone in quattro fasi eseguite in sequenza ogni volta che un utente fa una domanda. Prima, un documento caricato viene **analizzato e suddiviso in chunk** in parti gestibili. Quei chunk vengono poi convertiti in **embedding vettoriali** e memorizzati così da poter essere confrontati matematicamente. Quando arriva una query, il sistema esegue una **ricerca semantica** per trovare i chunk più rilevanti, e infine li passa come contesto al LLM per la **generazione della risposta**. Le sezioni qui sotto illustrano ogni fase con il codice reale e diagrammi. Guardiamo il primo passo.
### Elaborazione del Documento
[DocumentService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java)
-Quando carichi un documento, il sistema lo analizza (PDF o testo semplice), aggiunge metadati come il nome del file, e poi lo divide in chunk — pezzi più piccoli che stanno comodamente nella finestra di contesto del modello. Questi chunk si sovrappongono leggermente così non perdi il contesto ai confini.
+Quando carichi un documento, il sistema lo analizza (PDF o testo semplice), allega i metadati come il nome file, e poi lo suddivide in chunk — parti più piccole che si adattano comodamente nella finestra di contesto del modello. Questi chunk si sovrappongono leggermente così non perdi contesto ai confini.
```java
-// Analizza il file caricato e incapsulalo in un Documento LangChain4j
+// Analizza il file caricato e incapsulalo in un Document di LangChain4j
Document document = Document.from(content, metadata);
// Dividi in blocchi di 300 token con una sovrapposizione di 30 token
@@ -117,26 +116,26 @@ DocumentSplitter splitter = DocumentSplitters
List segments = splitter.split(document);
```
-Il diagramma qui sotto mostra come funziona visivamente. Nota come ogni chunk condivide alcuni token con i suoi vicini — una sovrapposizione di 30 token assicura che nessun contesto importante venga perso:
+Il diagramma qui sotto mostra come funziona visivamente. Nota come ogni chunk condivide alcuni token con i vicini — la sovrapposizione di 30 token assicura che nessun contesto importante cada tra le crepe:
-*Questo diagramma mostra un documento suddiviso in chunk da 300 token con sovrapposizione di 30 token, preservando il contesto ai confini dei chunk.*
+*Questo diagramma mostra un documento suddiviso in chunk di 300 token con sovrapposizione di 30 token, preservando il contesto ai confini dei chunk.*
-> **🤖 Prova con [GitHub Copilot](https://github.com/features/copilot) Chat:** Apri [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) e chiedi:
-> - "Come divide LangChain4j i documenti in chunk e perché la sovrapposizione è importante?"
-> - "Qual è la dimensione ottimale dei chunk per diversi tipi di documento e perché?"
+> **🤖 Prova con [GitHub Copilot](https://github.com/features/copilot) Chat:** Apri [`DocumentService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/DocumentService.java) e chiedi:
+> - "Come divide LangChain4j i documenti in chunk e perché la sovrapposizione è importante?"
+> - "Qual è la dimensione ottimale dei chunk per diversi tipi di documento e perché?"
> - "Come gestisco documenti in più lingue o con formattazioni speciali?"
### Creazione degli Embedding
[LangChainRagConfig.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/config/LangChainRagConfig.java)
-Ogni chunk viene convertito in una rappresentazione numerica chiamata embedding — essenzialmente un convertitore da significato a numeri. Il modello di embedding non è "intelligente" come un modello chat; non può seguire istruzioni, ragionare o rispondere a domande. Quello che può fare è mappare il testo in uno spazio matematico dove significati simili si trovano vicini — "auto" vicino a "automobile," "politica di rimborso" vicino a "restituisci il mio denaro." Pensa a un modello chat come a una persona con cui puoi parlare; un modello di embedding è un sistema di archiviazione ultra-efficiente.
+Ogni chunk viene convertito in una rappresentazione numerica chiamata embedding — essenzialmente un convertitore da significato a numeri. Il modello di embedding non è "intelligente" come un modello chat; non può seguire istruzioni, ragionare o rispondere a domande. Quello che può fare è mappare il testo in uno spazio matematico dove significati simili si trovano vicini — “auto” vicino a “automobile,” “politica di rimborso” vicino a “restituisci i miei soldi.” Pensa a un modello chat come a una persona con cui puoi parlare; un modello di embedding è un sistema di archiviazione ultra efficiente.
Il diagramma qui sotto visualizza questo concetto — entra testo, escono vettori numerici, e significati simili producono vettori vicini:
-
+
*Questo diagramma mostra come un modello di embedding converte testo in vettori numerici, collocando significati simili — come "auto" e "automobile" — vicini nello spazio vettoriale.*
@@ -154,29 +153,29 @@ EmbeddingStore embeddingStore =
new InMemoryEmbeddingStore<>();
```
-Il diagramma delle classi qui sotto mostra i due flussi separati in una pipeline RAG e le classi LangChain4j che li implementano. Il **flusso di ingestione** (eseguito una volta al caricamento) divide il documento, crea gli embedding dei chunk e li memorizza via `.addAll()`. Il **flusso di query** (eseguito ogni volta che un utente fa una domanda) crea l'embedding della domanda, cerca nello store via `.search()`, e passa il contesto trovato al modello chat. Entrambi i flussi si incontrano all'interfaccia condivisa `EmbeddingStore`:
+Il diagramma delle classi qui sotto mostra i due flussi separati in una pipeline RAG e le classi di LangChain4j che li implementano. Il **flusso di ingestione** (eseguito una volta al caricamento) divide il documento, crea gli embedding dei chunk, e li memorizza tramite `.addAll()`. Il **flusso di query** (eseguito ogni volta che un utente fa una domanda) crea l’embedding della domanda, cerca nel magazzino con `.search()`, e passa il contesto corrispondente al modello chat. Entrambi i flussi si incontrano nell’interfaccia condivisa `EmbeddingStore`:
-
+
-*Questo diagramma mostra i due flussi in una pipeline RAG — ingestione e query — e come si connettono attraverso un EmbeddingStore condiviso.*
+*Questo diagramma mostra i due flussi in una pipeline RAG — ingestione e query — e come si connettono tramite un EmbeddingStore condiviso.*
-Una volta memorizzati gli embedding, contenuti simili si raggruppano naturalmente insieme nello spazio vettoriale. La visualizzazione qui sotto mostra come documenti su argomenti correlati finiscono come punti vicini, rendendo possibile la ricerca semantica:
+Una volta memorizzati gli embedding, contenuti simili naturalmente si raggruppano insieme nello spazio vettoriale. La visualizzazione qui sotto mostra come documenti su temi affini finiscono come punti vicini, il che rende possibile la ricerca semantica:
-
+
-*Questa visualizzazione mostra come documenti correlati si raggruppano nello spazio vettoriale 3D, con argomenti come Documenti Tecnici, Regole Aziendali e FAQ che formano gruppi distinti.*
+*Questa visualizzazione mostra come documenti correlati si raggruppano nello spazio vettoriale 3D, con temi come Documentazione Tecnica, Regole Aziendali e FAQ che formano gruppi distinti.*
-Quando un utente effettua una ricerca, il sistema segue quattro passi: embeddare i documenti una volta, embeddare la query a ogni ricerca, confrontare il vettore della query con tutti i vettori memorizzati usando la similarità coseno, e restituire i primi K chunk con punteggio più alto. Il diagramma qui sotto illustra ogni step e le classi LangChain4j coinvolte:
+Quando un utente cerca, il sistema segue quattro passaggi: crea embedding dei documenti una volta, crea embedding della query a ogni ricerca, confronta il vettore della query con tutti i vettori memorizzati usando la similarità del coseno, e restituisce i top-K chunk con punteggio più alto. Il diagramma qui sotto descrive ogni passaggio e le classi LangChain4j coinvolte:
-
+
-*Questo diagramma mostra il processo di ricerca per embedding in quattro passi: embeddare i documenti, embeddare la query, confrontare i vettori con similarità coseno, e restituire i risultati top-K.*
+*Questo diagramma mostra il processo in quattro fasi della ricerca con embedding: crea embedding dei documenti, crea embedding della query, confronta vettori con similarità del coseno, e restituisce i migliori risultati.*
### Ricerca Semantica
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-Quando fai una domanda, anche la tua domanda viene convertita in un embedding. Il sistema confronta l'embedding della tua domanda con quelli di tutti i chunk del documento. Trova i chunk con significati più simili — non solo con parole chiave corrispondenti, ma con reale similarità semantica.
+Quando fai una domanda, anche la tua domanda diventa un embedding. Il sistema confronta l’embedding della tua domanda con gli embedding di tutti i chunk di documento. Trova i chunk con i significati più simili - non solo parole chiave corrispondenti, ma vera somiglianza semantica.
```java
Embedding queryEmbedding = embeddingModel.embed(question).content();
@@ -196,27 +195,27 @@ for (EmbeddingMatch match : matches) {
}
```
-Il diagramma qui sotto mette a confronto la ricerca semantica con la ricerca tradizionale per parole chiave. Una ricerca keyword per "vehicle" perde un chunk su "car and trucks," ma la ricerca semantica capisce che significano la stessa cosa e lo restituisce come risultato di punteggio alto:
+Il diagramma qui sotto contrappone la ricerca semantica alla ricerca tradizionale basata su parole chiave. Una ricerca per parola chiave “veicolo” perde un chunk su “auto e camion,” ma la ricerca semantica capisce che significano la stessa cosa e lo restituisce come risultato con punteggio alto:
*Questo diagramma confronta la ricerca basata su parole chiave con la ricerca semantica, mostrando come la ricerca semantica recupera contenuti concettualmente correlati anche quando le parole chiave esatte differiscono.*
-Sotto il cofano, la similarità è misurata usando la similarità coseno — che in sostanza chiede "queste due frecce puntano nella stessa direzione?" Due chunk possono usare parole completamente diverse, ma se significano la stessa cosa i loro vettori puntano nella stessa direzione e ottengono un punteggio vicino a 1.0:
-
+Nel dettaglio, la similarità si misura usando la similarità del coseno — in pratica, si chiede “queste due frecce puntano nella stessa direzione?” Due chunk possono usare parole completamente diverse, ma se significano la stessa cosa i loro vettori puntano nella stessa direzione e hanno un punteggio vicino a 1.0:
-*Questo diagramma illustra la similarità coseno come l'angolo tra vettori di embedding — vettori più allineati ottengono un punteggio più vicino a 1.0, indicando una maggiore similarità semantica.*
+
+*Questo diagramma illustra la similarità del coseno come l'angolo tra vettori di embedding — vettori più allineati ottengono un punteggio più vicino a 1.0, indicando una maggiore similarità semantica.*
> **🤖 Prova con [GitHub Copilot](https://github.com/features/copilot) Chat:** Apri [`RagService.java`](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java) e chiedi:
> - "Come funziona la ricerca di similarità con gli embeddings e cosa determina il punteggio?"
-> - "Quale soglia di similarità dovrei usare e come influenza i risultati?"
-> - "Come gestisco i casi in cui non si trovano documenti rilevanti?"
+> - "Quale soglia di similarità dovrei usare e come influisce sui risultati?"
+> - "Come gestisco i casi in cui non vengono trovati documenti rilevanti?"
-### Generazione della Risposta
+### Generazione della risposta
[RagService.java](../../../03-rag/src/main/java/com/example/langchain4j/rag/service/RagService.java)
-I chunk più rilevanti sono assemblati in un prompt strutturato che include istruzioni esplicite, il contesto recuperato e la domanda dell'utente. Il modello legge quei chunk specifici e risponde basandosi su quelle informazioni — può usare solo ciò che ha davanti, il che previene allucinazioni.
+I chunk più rilevanti vengono assemblati in un prompt strutturato che include istruzioni esplicite, il contesto recuperato e la domanda dell'utente. Il modello legge quei chunk specifici e risponde basandosi su quelle informazioni — può usare solo ciò che ha davanti, il che previene allucinazioni.
```java
String context = matches.stream()
@@ -237,21 +236,21 @@ String prompt = String.format("""
String answer = chatModel.chat(prompt);
```
-Il diagramma sottostante mostra questa composizione in azione — i chunk con il punteggio più alto dalla fase di ricerca sono inseriti nel template del prompt, e il `OpenAiOfficialChatModel` genera una risposta fondata:
+Il diagramma seguente mostra questo assemblaggio in azione — i chunk con il punteggio più alto dalla fase di ricerca vengono inseriti nel modello di prompt, e `OpenAiOfficialChatModel` genera una risposta fondata:
-
+
-*Questo diagramma mostra come i chunk con il punteggio più alto sono assemblati in un prompt strutturato, permettendo al modello di generare una risposta basata sui tuoi dati.*
+*Questo diagramma mostra come i chunk con il punteggio più alto vengono assemblati in un prompt strutturato, permettendo al modello di generare una risposta fondata sui tuoi dati.*
-## Esegui l'Applicazione
+## Esegui l'applicazione
**Verifica il deployment:**
-Assicurati che il file `.env` esista nella directory root con le credenziali Azure (create durante il Modulo 01). Esegui questo dalla directory del modulo (`03-rag/`):
+Assicurati che il file `.env` esista nella directory principale con le credenziali Azure (creato durante il Modulo 01). Esegui questo dal modulo directory (`03-rag/`):
**Bash:**
```bash
-cat ../.env # Dovrebbe mostrare AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
+cat ../.env # Deve mostrare AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
**PowerShell:**
@@ -261,37 +260,37 @@ Get-Content ..\.env # Dovrebbe mostrare AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYM
**Avvia l'applicazione:**
-> **Nota:** Se hai già avviato tutte le applicazioni usando `./start-all.sh` dalla directory root (come descritto nel Modulo 01), questo modulo è già in esecuzione sulla porta 8081. Puoi saltare i comandi di avvio qui sotto e andare direttamente su http://localhost:8081.
+> **Nota:** Se hai già avviato tutte le applicazioni usando `./start-all.sh` dalla directory principale (come descritto nel Modulo 01), questo modulo è già in esecuzione sulla porta 8081. Puoi saltare i comandi di avvio qui sotto e andare direttamente a http://localhost:8081.
**Opzione 1: Usare Spring Boot Dashboard (Consigliato per utenti VS Code)**
-Il container di sviluppo include l’estensione Spring Boot Dashboard, che fornisce un'interfaccia visiva per gestire tutte le applicazioni Spring Boot. Puoi trovarla nella Activity Bar a sinistra in VS Code (cerca l’icona di Spring Boot).
+Il container di sviluppo include l'estensione Spring Boot Dashboard, che fornisce un'interfaccia visiva per gestire tutte le applicazioni Spring Boot. La trovi nella Activity Bar a sinistra di VS Code (cerca l'icona Spring Boot).
-Dal Spring Boot Dashboard, puoi:
-- Vedere tutte le applicazioni Spring Boot disponibili nello workspace
-- Avviare/fermare applicazioni con un solo clic
-- Visualizzare i log delle applicazioni in tempo reale
-- Monitorare lo stato delle applicazioni
+Dal Spring Boot Dashboard puoi:
+- Vedere tutte le applicazioni Spring Boot disponibili nell'area di lavoro
+- Avviare/fermare applicazioni con un click
+- Visualizzare i log applicazione in tempo reale
+- Monitorare lo stato dell'applicazione
-Basta cliccare il pulsante play accanto a "rag" per avviare questo modulo, oppure avviare tutti i moduli insieme.
+Clicca semplicemente il pulsante play accanto a "rag" per avviare questo modulo, oppure avvia tutti i moduli insieme.
-*Questa schermata mostra il Spring Boot Dashboard in VS Code, dove puoi avviare, fermare e monitorare visivamente le applicazioni.*
+*Questo screenshot mostra il Spring Boot Dashboard in VS Code, dove puoi avviare, fermare e monitorare le applicazioni visivamente.*
-**Opzione 2: Usare gli script shell**
+**Opzione 2: Usare script shell**
-Avvia tutte le applicazioni web (moduli 01-04):
+Avvia tutte le web app (moduli 01-04):
**Bash:**
```bash
-cd .. # Dalla directory principale
+cd .. # Dalla directory radice
./start-all.sh
```
**PowerShell:**
```powershell
-cd .. # Dalla directory root
+cd .. # Dalla directory principale
.\start-all.ps1
```
@@ -309,7 +308,7 @@ cd 03-rag
.\start.ps1
```
-Entrambi gli script caricano automaticamente le variabili d’ambiente dal file `.env` nella root e compileranno i JAR se non esistono.
+Entrambi gli script caricano automaticamente le variabili d'ambiente dal file `.env` nella root e compileranno i JAR se non esistono.
> **Nota:** Se preferisci compilare manualmente tutti i moduli prima di avviare:
>
@@ -325,113 +324,113 @@ Entrambi gli script caricano automaticamente le variabili d’ambiente dal file
> mvn clean package -DskipTests
> ```
-Apri http://localhost:8081 nel browser.
+Apri http://localhost:8081 nel tuo browser.
**Per fermare:**
**Bash:**
```bash
./stop.sh # Solo questo modulo
-# O
+# Oppure
cd .. && ./stop-all.sh # Tutti i moduli
```
**PowerShell:**
```powershell
.\stop.ps1 # Solo questo modulo
-# O
+# Oppure
cd ..; .\stop-all.ps1 # Tutti i moduli
```
-## Uso dell'Applicazione
+## Usare l'applicazione
-L'applicazione fornisce un'interfaccia web per il caricamento dei documenti e per porre domande.
+L'applicazione fornisce un'interfaccia web per caricare documenti e fare domande.
-
+
-*Questa schermata mostra l’interfaccia dell’applicazione RAG dove carichi documenti e poni domande.*
+*Questo screenshot mostra l'interfaccia dell'applicazione RAG dove carichi documenti e fai domande.*
-### Carica un Documento
+### Carica un documento
-Inizia caricando un documento - i file TXT sono i migliori per i test. Un `sample-document.txt` è fornito in questa directory e contiene informazioni sulle funzionalità di LangChain4j, implementazione RAG e best practices - perfetto per testare il sistema.
+Inizia caricando un documento - i file TXT sono ideali per i test. Un `sample-document.txt` è fornito in questa directory e contiene informazioni sulle funzionalità di LangChain4j, l'implementazione RAG e le best practice - perfetto per testare il sistema.
-Il sistema processa il tuo documento, lo suddivide in chunk e crea embeddings per ogni chunk. Questo avviene automaticamente al caricamento.
+Il sistema processa il tuo documento, lo suddivide in chunk e crea gli embedding per ogni chunk. Questo avviene automaticamente durante il caricamento.
-### Poni Domande
+### Fai domande
-Ora poni domande specifiche sul contenuto del documento. Prova qualcosa di fattuale che sia chiaramente indicato nel documento. Il sistema cerca chunk rilevanti, li include nel prompt e genera una risposta.
+Ora poni domande specifiche sul contenuto del documento. Prova qualcosa di fattuale e chiaramente espresso nel documento. Il sistema cerca i chunk rilevanti, li include nel prompt e genera una risposta.
-### Verifica le Fonti
+### Controlla i riferimenti delle fonti
-Nota che ogni risposta include riferimenti alle fonti con i punteggi di similarità. Questi punteggi (da 0 a 1) mostrano quanto ogni chunk era rilevante per la tua domanda. Punteggi più alti significano corrispondenze migliori. Questo ti permette di verificare la risposta confrontandola con il materiale sorgente.
+Nota che ogni risposta include riferimenti alle fonti con punteggi di similarità. Questi punteggi (da 0 a 1) mostrano quanto ogni chunk era rilevante per la tua domanda. Punteggi più alti indicano corrispondenze migliori. Questo ti permette di verificare la risposta rispetto al materiale di origine.
-
+
-*Questa schermata mostra i risultati della query con la risposta generata, i riferimenti alle fonti e i punteggi di rilevanza per ogni chunk recuperato.*
+*Questo screenshot mostra i risultati della query con la risposta generata, i riferimenti alle fonti e i punteggi di rilevanza per ogni chunk recuperato.*
-### Sperimenta con le Domande
+### Sperimenta con le domande
Prova diversi tipi di domande:
-- Fatti specifici: "Qual è l’argomento principale?"
+- Fatti specifici: "Qual è l'argomento principale?"
- Confronti: "Qual è la differenza tra X e Y?"
-- Sommari: "Riassumi i punti chiave riguardo a Z"
+- Sommari: "Riassumi i punti chiave su Z"
-Osserva come cambiano i punteggi di rilevanza in base a quanto la tua domanda corrisponde al contenuto del documento.
+Guarda come cambiano i punteggi di rilevanza in base a quanto la tua domanda corrisponde al contenuto del documento.
-## Concetti Chiave
+## Concetti chiave
-### Strategia di Suddivisione in Chunk
+### Strategia di suddivisione in chunk
-I documenti sono suddivisi in chunk da 300 token con 30 token di sovrapposizione. Questo equilibrio garantisce che ogni chunk abbia abbastanza contesto per essere significativo ma rimanga sufficientemente piccolo per includere più chunk in un prompt.
+I documenti vengono suddivisi in chunk da 300 token con 30 token di sovrapposizione. Questo equilibrio garantisce che ogni chunk abbia abbastanza contesto per essere significativo e allo stesso tempo rimanga abbastanza piccolo da includere più chunk in un prompt.
-### Punteggi di Similarità
+### Punteggi di similarità
-Ogni chunk recuperato ha un punteggio di similarità compreso tra 0 e 1 che indica quanto si avvicina alla domanda dell’utente. Il diagramma sottostante visualizza gli intervalli di punteggio e come il sistema li usa per filtrare i risultati:
+Ogni chunk recuperato ha un punteggio di similarità che va da 0 a 1 e indica quanto corrisponde alla domanda dell'utente. Il diagramma seguente visualizza gli intervalli dei punteggi e come il sistema li usa per filtrare i risultati:
-
+
-*Questo diagramma mostra gli intervalli di punteggio da 0 a 1, con una soglia minima di 0.5 che filtra i chunk irrilevanti.*
+*Questo diagramma mostra gli intervalli di punteggio da 0 a 1, con una soglia minima di 0.5 che filtra i chunk non rilevanti.*
-I punteggi variano da 0 a 1:
+I punteggi vanno da 0 a 1:
- 0.7-1.0: Altamente rilevante, corrispondenza esatta
- 0.5-0.7: Rilevante, buon contesto
- Sotto 0.5: Filtrato, troppo dissimile
-Il sistema recupera solo chunk sopra la soglia minima per garantire qualità.
+Il sistema recupera solo i chunk sopra la soglia minima per garantire qualità.
-Gli embeddings funzionano bene quando i significati si raggruppano chiaramente, ma hanno punti ciechi. Il diagramma sottostante mostra i modi comuni di fallimento — chunk troppo grandi producono vettori confusi, chunk troppo piccoli mancano di contesto, termini ambigui puntano a più cluster, e ricerche esatte (ID, numeri di parte) non funzionano affatto con gli embeddings:
+Gli embeddings funzionano bene quando il significato forma cluster chiari, ma hanno punti ciechi. Il diagramma sotto mostra i comuni modi di fallimento — chunk troppo grandi producono vettori confusi, chunk troppo piccoli mancano di contesto, termini ambigui puntano a più cluster, e ricerche di corrispondenza esatta (ID, numeri di parte) non funzionano affatto con gli embeddings:
-
+
-*Questo diagramma mostra i modi comuni di fallimento degli embeddings: chunk troppo grandi, chunk troppo piccoli, termini ambigui che puntano a cluster multipli, e ricerche esatte come ID.*
+*Questo diagramma mostra i comuni errori degli embedding: chunk troppo grandi, chunk troppo piccoli, termini ambigui che puntano a più cluster, e ricerche di corrispondenza esatta come ID.*
-### Memorizzazione in Memoria
+### Storage in memoria
-Questo modulo usa una memorizzazione in memoria per semplicità. Quando riavvii l’applicazione, i documenti caricati vanno persi. I sistemi di produzione usano database vettoriali persistenti come Qdrant o Azure AI Search.
+Questo modulo usa storage in memoria per semplicità. Quando riavvii l'applicazione, i documenti caricati vengono persi. I sistemi di produzione usano database vettoriali persistenti come Qdrant o Azure AI Search.
-### Gestione della Finestra di Contesto
+### Gestione della finestra di contesto
-Ogni modello ha una massima finestra di contesto. Non puoi includere ogni chunk da un documento lungo. Il sistema recupera i primi N chunk più rilevanti (default 5) per restare nei limiti fornendo abbastanza contesto per risposte accurate.
+Ogni modello ha una finestra di contesto massima. Non puoi includere ogni chunk di un documento grande. Il sistema recupera i primi N chunk più rilevanti (default 5) per rimanere entro i limiti pur fornendo abbastanza contesto per risposte accurate.
-## Quando RAG Conta
+## Quando RAG conta
-RAG non è sempre l’approccio giusto. La guida decisionale sottostante ti aiuta a capire quando RAG apporta valore rispetto a quando approcci più semplici — come includere direttamente il contenuto nel prompt o affidarsi alla conoscenza built-in del modello — sono sufficienti:
+RAG non è sempre l'approccio giusto. La guida alla decisione qui sotto ti aiuta a determinare quando RAG aggiunge valore rispetto a quando approcci più semplici — come includere il contenuto direttamente nel prompt o affidarsi alla conoscenza incorporata del modello — sono sufficienti:
-
+
-*Questo diagramma mostra una guida decisionale per quando RAG apporta valore rispetto a quando approcci più semplici sono sufficienti.*
+*Questo diagramma mostra una guida alla decisione per quando RAG aggiunge valore rispetto a quando approcci più semplici sono sufficienti.*
-## Prossimi Passi
+## Passaggi successivi
-**Modulo Successivo:** [04-tools - AI Agents with Tools](../04-tools/README.md)
+**Prossimo Modulo:** [04-tools - Agenti AI con Tool](../04-tools/README.md)
---
-**Navigazione:** [← Precedente: Modulo 02 - Prompt Engineering](../02-prompt-engineering/README.md) | [Torna al Principale](../README.md) | [Successivo: Modulo 04 - Tools →](../04-tools/README.md)
+**Navigazione:** [← Precedente: Modulo 02 - Ingegneria del Prompt](../02-prompt-engineering/README.md) | [Torna al Principale](../README.md) | [Successivo: Modulo 04 - Tools →](../04-tools/README.md)
---
**Disclaimer**:
-Questo documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Pur impegnandoci per garantire accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua originale deve essere considerato la fonte autorevole. Per informazioni critiche, si consiglia di utilizzare una traduzione professionale effettuata da un essere umano. Non ci assumiamo alcuna responsabilità per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
+Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire la precisione, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un essere umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
\ No newline at end of file
diff --git a/translations/it/04-tools/README.md b/translations/it/04-tools/README.md
index 7f922739d..01af8fba4 100644
--- a/translations/it/04-tools/README.md
+++ b/translations/it/04-tools/README.md
@@ -2,75 +2,75 @@
## Indice
-- [Video Walkthrough](../../../04-tools)
-- [Cosa Imparerai](../../../04-tools)
-- [Prerequisiti](../../../04-tools)
-- [Comprendere gli Agenti AI con Strumenti](../../../04-tools)
-- [Come Funziona la Chiamata agli Strumenti](../../../04-tools)
- - [Definizioni degli Strumenti](../../../04-tools)
- - [Processo Decisionale](../../../04-tools)
- - [Esecuzione](../../../04-tools)
- - [Generazione della Risposta](../../../04-tools)
- - [Architettura: Auto-Iniezione di Spring Boot](../../../04-tools)
-- [Catena di Strumenti](../../../04-tools)
-- [Avvia l'Applicazione](../../../04-tools)
-- [Uso dell'Applicazione](../../../04-tools)
- - [Prova l'Uso Semplice dello Strumento](../../../04-tools)
- - [Test della Catena di Strumenti](../../../04-tools)
- - [Guarda il Flusso della Conversazione](../../../04-tools)
- - [Sperimenta con Diverse Richieste](../../../04-tools)
-- [Concetti Chiave](../../../04-tools)
- - [Pattern ReAct (Ragionamento e Azione)](../../../04-tools)
- - [Le Descrizioni degli Strumenti Contano](../../../04-tools)
- - [Gestione della Sessione](../../../04-tools)
- - [Gestione degli Errori](../../../04-tools)
-- [Strumenti Disponibili](../../../04-tools)
-- [Quando Usare Agenti Basati su Strumenti](../../../04-tools)
-- [Strumenti vs RAG](../../../04-tools)
-- [Prossimi Passi](../../../04-tools)
-
-## Video Walkthrough
-
-Guarda questa sessione live che spiega come iniziare con questo modulo:
-
-
+- [Video Esplicativo](#video-esplicativo)
+- [Cosa Imparerai](#cosa-imparerai)
+- [Prerequisiti](#prerequisiti)
+- [Comprendere gli Agenti AI con Strumenti](#comprendere-gli-agenti-ai-con-strumenti)
+- [Come Funziona la Chiamata agli Strumenti](#come-funziona-la-chiamata-agli-strumenti)
+ - [Definizioni degli Strumenti](#definizioni-degli-strumenti)
+ - [Processo Decisionale](#processo-decisionale)
+ - [Esecuzione](#esecuzione)
+ - [Generazione della Risposta](#generazione-della-risposta)
+ - [Architettura: Auto-Wiring di Spring Boot](#architettura-auto-wiring-di-spring-boot)
+- [Concatenazione degli Strumenti](#concatenazione-degli-strumenti)
+- [Esegui l'Applicazione](#esegui-lapplicazione)
+- [Utilizzo dell'Applicazione](#uso-dellapplicazione)
+ - [Prova l'Uso Semplice di uno Strumento](#prova-un-uso-semplice-degli-strumenti)
+ - [Testa la Concatenazione degli Strumenti](#prova-la-catena-di-strumenti)
+ - [Visualizza il Flusso della Conversazione](#vedi-il-flusso-di-conversazione)
+ - [Sperimenta con Richieste Diverse](#sperimenta-con-diverse-richieste)
+- [Concetti Chiave](#concetti-chiave)
+ - [Pattern ReAct (Ragionamento e Azione)](#pattern-react-ragionare-e-agire)
+ - [Importanza delle Descrizioni degli Strumenti](#le-descrizioni-degli-strumenti-contano)
+ - [Gestione della Sessione](#gestione-della-sessione)
+ - [Gestione degli Errori](#gestione-degli-errori)
+- [Strumenti Disponibili](#strumenti-disponibili)
+- [Quando Usare Agenti Basati su Strumenti](#quando-usare-agenti-basati-su-strumenti)
+- [Strumenti vs RAG](#strumenti-vs-rag)
+- [Passi Successivi](#passi-successivi)
+
+## Video Esplicativo
+
+Guarda questa sessione dal vivo che spiega come iniziare con questo modulo:
+
+
## Cosa Imparerai
-Finora, hai imparato come conversare con l'AI, strutturare efficacemente i prompt e ancorare le risposte ai tuoi documenti. Ma esiste ancora un limite fondamentale: i modelli linguistici possono solo generare testo. Non possono controllare il meteo, effettuare calcoli, interrogare database o interagire con sistemi esterni.
+Finora, hai imparato come avere conversazioni con l'AI, strutturare efficacemente i prompt e basare le risposte sui tuoi documenti. Ma c'è ancora una limitazione fondamentale: i modelli linguistici possono solo generare testo. Non possono controllare il meteo, eseguire calcoli, interrogare database o interagire con sistemi esterni.
-Gli strumenti cambiano questo. Dando al modello accesso a funzioni che può chiamare, lo trasformi da generatore di testo a un agente che può compiere azioni. Il modello decide quando ha bisogno di uno strumento, quale strumento usare e quali parametri passare. Il tuo codice esegue la funzione e restituisce il risultato. Il modello incorpora quel risultato nella sua risposta.
+Gli strumenti cambiano questo. Fornendo al modello l'accesso a funzioni che può chiamare, lo trasformi da generatore di testo a un agente che può eseguire azioni. Il modello decide quando ha bisogno di uno strumento, quale usare e quali parametri passare. Il tuo codice esegue la funzione e restituisce il risultato. Il modello incorpora quel risultato nella sua risposta.
## Prerequisiti
-- Completato il [Modulo 01 - Introduzione](../01-introduction/README.md) (risorse Azure OpenAI distribuite)
+- Completato [Modulo 01 - Introduzione](../01-introduction/README.md) (risorse Azure OpenAI distribuite)
- Completati i moduli precedenti consigliati (questo modulo fa riferimento ai [concetti RAG del Modulo 03](../03-rag/README.md) nel confronto Strumenti vs RAG)
-- File `.env` nella directory radice con le credenziali Azure (creato con `azd up` nel Modulo 01)
+- File `.env` nella directory radice con credenziali Azure (creato da `azd up` nel Modulo 01)
> **Nota:** Se non hai completato il Modulo 01, segui prima le istruzioni di distribuzione lì.
## Comprendere gli Agenti AI con Strumenti
-> **📝 Nota:** Il termine "agenti" in questo modulo si riferisce ad assistenti AI potenziati con capacità di chiamata di strumenti. Questo è diverso dai pattern di **Agentic AI** (agenti autonomi con pianificazione, memoria e ragionamento multi-step) che tratteremo in [Modulo 05: MCP](../05-mcp/README.md).
+> **📝 Nota:** Il termine "agenti" in questo modulo si riferisce ad assistenti AI arricchiti con capacità di chiamata di strumenti. Questo è diverso dai pattern **Agentic AI** (agenti autonomi con pianificazione, memoria e ragionamento multi-step) che tratteremo in [Modulo 05: MCP](../05-mcp/README.md).
-Senza strumenti, un modello linguistico può solo generare testo dai dati di addestramento. Chiedigli il meteo attuale e deve indovinare. Dagli strumenti, può chiamare un'API meteo, effettuare calcoli o interrogare un database — poi inserire quei risultati reali nella risposta.
+Senza strumenti, un modello linguistico può solo generare testo dai suoi dati di addestramento. Chiedigli il meteo attuale e deve indovinare. Dagli strumenti, può chiamare un'API meteo, eseguire calcoli o interrogare un database — poi integra quei risultati reali nella risposta.
-*Senza strumenti il modello può solo indovinare — con gli strumenti può chiamare API, eseguire calcoli e restituire dati in tempo reale.*
+*Senza strumenti il modello può solo indovinare — con strumenti può chiamare API, eseguire calcoli e restituire dati in tempo reale.*
-Un agente AI con strumenti segue un pattern **Reasoning and Acting (ReAct)**. Il modello non si limita a rispondere — pensa a ciò di cui ha bisogno, agisce chiamando uno strumento, osserva il risultato e decide se agire ancora o fornire la risposta finale:
+Un agente AI con strumenti segue un pattern di **Ragionamento e Azione (ReAct)**. Il modello non si limita a rispondere — pensa a ciò di cui ha bisogno, agisce chiamando uno strumento, osserva il risultato, poi decide se agire nuovamente o fornire la risposta finale:
-1. **Ragiona** — L'agente analizza la domanda dell'utente e determina quali informazioni servono
-2. **Agisci** — L'agente seleziona lo strumento giusto, genera i parametri corretti e lo chiama
-3. **Osserva** — L'agente riceve l'output dello strumento e valuta il risultato
-4. **Ripeti o Rispondi** — Se servono altri dati, l'agente ripete; altrimenti compone una risposta in linguaggio naturale
+1. **Ragionare** — L'agente analizza la domanda dell'utente e determina quali informazioni servono
+2. **Agire** — L'agente seleziona lo strumento giusto, genera i parametri corretti e lo chiama
+3. **Osservare** — L'agente riceve l'output dello strumento e valuta il risultato
+4. **Ripetere o Rispondere** — Se servono più dati, l'agente ricomincia; altrimenti compone una risposta in linguaggio naturale
-*Il ciclo ReAct — l'agente ragiona su cosa fare, agisce chiamando uno strumento, osserva il risultato e ripete fino a fornire la risposta finale.*
+*Il ciclo ReAct — l'agente ragiona su cosa fare, agisce chiamando uno strumento, osserva il risultato e ripete finché può fornire la risposta finale.*
-Questo accade in modo automatico. Definisci gli strumenti e le loro descrizioni. Il modello gestisce le decisioni su quando e come usarli.
+Questo avviene automaticamente. Definisci tu gli strumenti e le loro descrizioni. Il modello si occupa di decidere quando e come usarli.
## Come Funziona la Chiamata agli Strumenti
@@ -78,7 +78,7 @@ Questo accade in modo automatico. Definisci gli strumenti e le loro descrizioni.
[WeatherTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) | [TemperatureTool.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/TemperatureTool.java)
-Definisci funzioni con descrizioni chiare e specifiche dei parametri. Il modello vede queste descrizioni nel prompt di sistema e capisce cosa fa ogni strumento.
+Definisci funzioni con descrizioni chiare e specifiche sui parametri. Il modello vede queste descrizioni nel prompt di sistema e capisce cosa fa ogni strumento.
```java
@Component
@@ -96,137 +96,137 @@ public interface Assistant {
String chat(@MemoryId String sessionId, @UserMessage String message);
}
-// Assistant è automaticamente collegato da Spring Boot con:
+// Assistant è automaticamente configurato da Spring Boot con:
// - Bean ChatModel
-// - Tutti i metodi @Tool delle classi @Component
+// - Tutti i metodi @Tool dalle classi @Component
// - ChatMemoryProvider per la gestione della sessione
```
-Il diagramma seguente analizza ogni annotazione e mostra come ogni pezzo aiuta l'AI a capire quando chiamare lo strumento e quali argomenti passare:
+Il diagramma sottostante scompone ogni annotazione e mostra come ciascun elemento aiuti l'AI a capire quando chiamare lo strumento e quali argomenti passare:
-*Anatomia di una definizione di strumento — @Tool indica all'AI quando usarlo, @P descrive ogni parametro, e @AiService collega tutto all'avvio.*
+*Anatomia di una definizione di strumento — @Tool dice all'AI quando usarlo, @P descrive ogni parametro, e @AiService connette tutto all'avvio.*
> **🤖 Prova con [GitHub Copilot](https://github.com/features/copilot) Chat:** Apri [`WeatherTool.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/tools/WeatherTool.java) e chiedi:
-> - "Come potrei integrare una vera API meteo come OpenWeatherMap invece dei dati di esempio?"
-> - "Cosa rende una buona descrizione dello strumento che aiuta l'AI ad usarlo correttamente?"
-> - "Come gestisco errori API e limiti di chiamate nelle implementazioni degli strumenti?"
+> - "Come integrerei una vera API meteo come OpenWeatherMap invece dei dati mock?"
+> - "Cosa rende una descrizione di uno strumento efficace per permettere all'AI di usarlo correttamente?"
+> - "Come gestisco errori API e limiti di chiamata nelle implementazioni degli strumenti?"
### Processo Decisionale
-Quando un utente chiede "Che tempo fa a Seattle?", il modello non sceglie uno strumento a caso. Confronta l'intento dell'utente con ogni descrizione degli strumenti a cui ha accesso, valuta la rilevanza di ciascuno e seleziona la corrispondenza migliore. Genera quindi una chiamata di funzione strutturata con i parametri corretti — in questo caso impostando `location` a `"Seattle"`.
+Quando un utente chiede "Com'è il meteo a Seattle?", il modello non sceglie uno strumento a caso. Confronta l'intento dell'utente con ogni descrizione strumento accessibile, assegna un punteggio di pertinenza e seleziona la corrispondenza migliore. Genera quindi una chiamata di funzione strutturata con i parametri corretti — in questo caso, impostando `location` su `"Seattle"`.
-Se nessuno strumento corrisponde alla richiesta dell'utente, il modello risponde con le sue conoscenze interne. Se più strumenti corrispondono, sceglie quello più specifico.
+Se nessuno strumento corrisponde alla richiesta, il modello risponde dalla sua conoscenza. Se più strumenti corrispondono, sceglie quello più specifico.
-*Il modello valuta ogni strumento disponibile rispetto all'intento dell'utente e seleziona la corrispondenza migliore — perciò scrivere descrizioni chiare e specifiche è importante.*
+*Il modello valuta ogni strumento disponibile rispetto all'intento dell'utente e seleziona la corrispondenza migliore — per questo scrivere descrizioni chiare e specifiche è importante.*
### Esecuzione
[AgentService.java](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java)
-Spring Boot collega automaticamente l'interfaccia dichiarativa `@AiService` con tutti gli strumenti registrati, e LangChain4j esegue le chiamate agli strumenti automaticamente. Dietro le quinte, una chiamata completa ad uno strumento scorre attraverso sei fasi — dalla domanda in linguaggio naturale dell'utente fino alla risposta in linguaggio naturale:
+Spring Boot auto-collega l'interfaccia dichiarativa `@AiService` con tutti gli strumenti registrati, e LangChain4j esegue automaticamente le chiamate agli strumenti. Dietro le quinte, una chiamata completa passa attraverso sei fasi — dalla domanda in linguaggio naturale dell'utente fino alla risposta in linguaggio naturale:
-
+
-*Il flusso end-to-end — l'utente fa una domanda, il modello seleziona uno strumento, LangChain4j lo esegue, e il modello intreccia il risultato in una risposta naturale.*
+*Il flusso end-to-end — l'utente chiede, il modello seleziona uno strumento, LangChain4j lo esegue, e il modello integra il risultato in una risposta naturale.*
-Se hai eseguito il [ToolIntegrationDemo](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java) nel Modulo 00, hai già visto questo pattern in azione — anche gli strumenti `Calculator` venivano chiamati nello stesso modo. Il diagramma di sequenza seguente mostra esattamente cosa è successo sotto il cofano durante quella demo:
+Dietro le quinte, `AiServices` esegue lo stesso ciclo di chiamata per qualsiasi strumento — qui illustrato con un semplice `Calculator`. Il diagramma di sequenza qui sotto mostra esattamente cosa succede internamente:
-
+
-*Il ciclo di chiamata agli strumenti dalla demo Quick Start — `AiServices` manda il tuo messaggio e gli schemi degli strumenti al LLM, il LLM risponde con una chiamata di funzione come `add(42, 58)`, LangChain4j esegue il metodo `Calculator` localmente, e restituisce il risultato per la risposta finale.*
+*Il ciclo di chiamata dello strumento — `AiServices` invia il tuo messaggio e gli schemi degli strumenti al LLM, il LLM risponde con una chiamata di funzione come `add(42, 58)`, LangChain4j esegue localmente il metodo `Calculator`, e restituisce il risultato per la risposta finale.*
> **🤖 Prova con [GitHub Copilot](https://github.com/features/copilot) Chat:** Apri [`AgentService.java`](../../../04-tools/src/main/java/com/example/langchain4j/agents/service/AgentService.java) e chiedi:
-> - "Come funziona il pattern ReAct e perché è efficace per gli agenti AI?"
+> - "Come funziona il pattern ReAct e perché è efficace per agenti AI?"
> - "Come decide l'agente quale strumento usare e in che ordine?"
-> - "Cosa succede se l'esecuzione di uno strumento fallisce - come gestire gli errori in modo robusto?"
+> - "Cosa succede se l'esecuzione di uno strumento fallisce - come gestire robustamente gli errori?"
### Generazione della Risposta
-Il modello riceve i dati meteorologici e li formatta in una risposta in linguaggio naturale per l'utente.
+Il modello riceve i dati meteo e li formatta in una risposta in linguaggio naturale per l'utente.
-### Architettura: Auto-Iniezione di Spring Boot
+### Architettura: Auto-Wiring di Spring Boot
-Questo modulo usa l'integrazione LangChain4j con Spring Boot tramite interfacce dichiarative `@AiService`. All'avvio Spring Boot scopre ogni `@Component` che contiene metodi annotati `@Tool`, il tuo bean `ChatModel` e il `ChatMemoryProvider` — quindi li collega tutti in una singola interfaccia `Assistant` senza necessità di codice boilerplate.
+Questo modulo usa l'integrazione Spring Boot di LangChain4j con interfacce dichiarative `@AiService`. All'avvio Spring Boot scopre ogni `@Component` che contiene metodi `@Tool`, il bean `ChatModel`, e il `ChatMemoryProvider` — poi li connette tutti in una singola interfaccia `Assistant` senza alcun boilerplate.
-
+
-*L'interfaccia @AiService unisce il ChatModel, i componenti degli strumenti e il provider di memoria — Spring Boot gestisce automaticamente tutta l'iniezione.*
+*L'interfaccia @AiService collega ChatModel, componenti degli strumenti e provider di memoria — Spring Boot gestisce automaticamente il wiring.*
-Ecco il ciclo di vita completo della richiesta come diagramma di sequenza — dalla richiesta HTTP attraverso controller, servizio e proxy auto-iniettato, fino all'esecuzione dello strumento e ritorno:
+Ecco il ciclo completo della richiesta come diagramma di sequenza — dalla richiesta HTTP passando per controller, servizio e proxy auto-collegato, fino all'esecuzione dello strumento e ritorno:
-
+
-*Il ciclo di vita completo di una richiesta in Spring Boot — la richiesta HTTP passa attraverso controller e servizio fino al proxy Assistant auto-iniettato, che orchestra automaticamente la chiamata al LLM e agli strumenti.*
+*Il ciclo completo della richiesta Spring Boot — la richiesta HTTP passa per controller e servizio fino al proxy Assistant auto-wired, che orchestra LLM e chiamate agli strumenti automaticamente.*
-Principali vantaggi di questo approccio:
+Vantaggi chiave di questo approccio:
-- **Auto-iniezione di Spring Boot** — ChatModel e strumenti iniettati automaticamente
+- **Auto-wiring di Spring Boot** — ChatModel e strumenti iniettati automaticamente
- **Pattern @MemoryId** — Gestione automatica della memoria basata sulla sessione
-- **Istanza singola** — Assistant creato una volta e riutilizzato per migliori prestazioni
+- **Singola istanza** — Assistant creato una volta e riutilizzato per migliori prestazioni
- **Esecuzione type-safe** — Metodi Java chiamati direttamente con conversione tipi
-- **Orchestrazione multi-turno** — Gestisce la catena di strumenti automaticamente
-- **Zero boilerplate** — Nessuna chiamata manuale `AiServices.builder()` o hashmap per la memoria
+- **Orchestrazione multi-turn** — Gestisce automaticamente concatenazione degli strumenti
+- **Zero boilerplate** — Nessuna chiamata manuale a `AiServices.builder()` o mappe di memoria
-Approcci alternativi (manuale `AiServices.builder()`) richiedono più codice e non beneficiano dell'integrazione con Spring Boot.
+Approcci alternativi (costruzione manuale con `AiServices.builder()`) richiedono più codice e perdono i vantaggi dell’integrazione con Spring Boot.
-## Catena di Strumenti
+## Concatenazione degli Strumenti
-**Catena di Strumenti** — La vera potenza degli agenti basati su strumenti emerge quando una singola domanda richiede più strumenti. Chiedi "Che tempo fa a Seattle in Fahrenheit?" e l'agente collega automaticamente due strumenti: prima chiama `getCurrentWeather` per ottenere la temperatura in Celsius, poi passa quel valore a `celsiusToFahrenheit` per la conversione — tutto in un unico turno di conversazione.
+**Tool Chaining** — La vera potenza degli agenti basati su strumenti si manifesta quando una singola domanda richiede più strumenti. Chiedi "Com'è il meteo a Seattle in Fahrenheit?" e l'agente concatena automaticamente due strumenti: prima chiama `getCurrentWeather` per ottenere la temperatura in Celsius, poi passa quel valore a `celsiusToFahrenheit` per la conversione — tutto in un solo turno di conversazione.
-
+
-*Catena di strumenti in azione — l'agente chiama prima getCurrentWeather, poi passa il risultato in Celsius a celsiusToFahrenheit e fornisce una risposta combinata.*
+*Concatenazione degli strumenti in azione — l'agente chiama prima getCurrentWeather, poi passa il risultato Celsius a celsiusToFahrenheit, e fornisce una risposta combinata.*
-**Gestione Elegante degli Errori** — Chiedi il meteo in una città che non è nei dati di esempio. Lo strumento restituisce un messaggio di errore, e l'AI spiega che non può aiutare invece di bloccarsi. Gli strumenti falliscono in modo sicuro. Il diagramma sotto confronta i due approcci — con una corretta gestione degli errori, l'agente cattura l'eccezione e risponde in maniera utile, mentre senza di essa l'intera applicazione va in crash:
+**Gestione Elegante degli Errori** — Chiedi il meteo in una città non presente nei dati mock. Lo strumento restituisce un messaggio di errore, e l'AI spiega che non può aiutare invece di andare in crash. Gli strumenti falliscono in modo sicuro. Il diagramma seguente confronta i due approcci — con una gestione corretta degli errori, l'agente intercetta l'eccezione e risponde utilmente, mentre senza di essa l'intera applicazione crasha:
-*Quando uno strumento fallisce, l'agente cattura l'errore e risponde con una spiegazione utile invece di andare in crash.*
+*Quando uno strumento fallisce, l'agente cattura l'errore e risponde con una spiegazione utile anziché crashare.*
-Questo accade in un singolo turno di conversazione. L'agente orchestra più chiamate agli strumenti autonomamente.
+Questo avviene in un singolo turno di conversazione. L'agente gestisce autonomamente più chiamate di strumenti.
-## Avvia l'Applicazione
+## Esegui l'Applicazione
**Verifica la distribuzione:**
-Assicurati che il file `.env` esista nella directory radice con le credenziali Azure (creato durante il Modulo 01). Esegui questo dal directory del modulo (`04-tools/`):
+Assicurati che il file `.env` esista nella directory radice con le credenziali Azure (creato durante il Modulo 01). Esegui questo dal direttorio del modulo (`04-tools/`):
-**Bash:**
+**Bash:**
```bash
cat ../.env # Dovrebbe mostrare AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
-**PowerShell:**
+
+**PowerShell:**
```powershell
Get-Content ..\.env # Dovrebbe mostrare AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT
```
-
+
**Avvia l'applicazione:**
-> **Nota:** Se hai già avviato tutte le applicazioni usando `./start-all.sh` dalla directory radice (come descritto nel Modulo 01), questo modulo è già in esecuzione sulla porta 8084. Puoi saltare i comandi di avvio qui sotto e andare direttamente su http://localhost:8084.
+> **Nota:** Se hai già avviato tutte le applicazioni usando `./start-all.sh` dalla directory radice (come descritto nel Modulo 01), questo modulo è già in esecuzione sulla porta 8084. Puoi saltare i comandi di avvio di seguito e andare direttamente a http://localhost:8084.
-**Opzione 1: Uso del Spring Boot Dashboard (Raccomandato per utenti VS Code)**
+**Opzione 1: Usare Spring Boot Dashboard (Consigliato per utenti VS Code)**
-Il container di sviluppo include l'estensione Spring Boot Dashboard, che fornisce un'interfaccia visiva per gestire tutte le applicazioni Spring Boot. Puoi trovarlo nella Activity Bar sulla sinistra di VS Code (cerca l'icona di Spring Boot).
+Il contenitore di sviluppo include l'estensione Spring Boot Dashboard, che fornisce un'interfaccia visiva per gestire tutte le applicazioni Spring Boot. Puoi trovarla nella Activity Bar a sinistra di VS Code (cerca l'icona Spring Boot).
-Dal Spring Boot Dashboard, puoi:
-- Vedere tutte le applicazioni Spring Boot disponibili nello spazio di lavoro
-- Avviare/fermare applicazioni con un solo clic
-- Visualizzare in tempo reale i log delle applicazioni
-- Monitorare lo stato dell'applicazione
-Basta cliccare sul pulsante play accanto a "tools" per avviare questo modulo, oppure avviare tutti i moduli insieme.
+Dal Spring Boot Dashboard puoi:
+- Vedere tutte le applicazioni Spring Boot disponibili nel workspace
+- Avviare/fermare applicazioni con un clic
+- Visualizzare i log in tempo reale
+- Monitorare lo stato delle applicazioni
-Ecco come appare la Spring Boot Dashboard in VS Code:
+Clicca semplicemente il pulsante play accanto a "tools" per avviare questo modulo, o avvia tutti i moduli insieme.
-
+Ecco come appare il Spring Boot Dashboard in VS Code:
+
-*La Spring Boot Dashboard in VS Code — avvia, ferma e monitora tutti i moduli da un unico posto*
+*Il Cruscotto Spring Boot in VS Code — avvia, ferma e monitora tutti i moduli da un unico posto*
-**Opzione 2: Utilizzo di script shell**
+**Opzione 2: Uso di script shell**
Avvia tutte le applicazioni web (moduli 01-04):
@@ -238,7 +238,7 @@ cd .. # Dalla directory radice
**PowerShell:**
```powershell
-cd .. # Dalla directory radice
+cd .. # Dalla directory root
.\start-all.ps1
```
@@ -256,9 +256,9 @@ cd 04-tools
.\start.ps1
```
-Entrambi gli script caricano automaticamente le variabili d’ambiente dal file `.env` nella radice e compileranno i JAR se non esistono.
+Entrambi gli script caricano automaticamente le variabili d'ambiente dal file `.env` nella root e compileranno i JAR se non esistono.
-> **Nota:** Se preferisci compilare tutti i moduli manualmente prima di avviare:
+> **Nota:** Se preferisci compilare manualmente tutti i moduli prima dell'avvio:
>
> **Bash:**
> ```bash
@@ -290,90 +290,90 @@ cd .. && ./stop-all.sh # Tutti i moduli
cd ..; .\stop-all.ps1 # Tutti i moduli
```
-## Uso dell’Applicazione
+## Uso dell'Applicazione
-L’applicazione fornisce un’interfaccia web dove puoi interagire con un agente AI che ha accesso a strumenti meteo e di conversione della temperatura. Ecco come appare l’interfaccia — include esempi rapidi e un pannello chat per inviare richieste:
+L'applicazione offre un'interfaccia web dove puoi interagire con un agente AI che ha accesso agli strumenti meteo e di conversione della temperatura. Ecco come appare l'interfaccia — include esempi rapidi e un pannello chat per inviare richieste:
-
+
-*L’interfaccia AI Agent Tools - esempi rapidi e interfaccia chat per interagire con gli strumenti*
+*L'interfaccia Strumenti Agente AI - esempi rapidi e interfaccia chat per interagire con gli strumenti*
### Prova un Uso Semplice degli Strumenti
-Inizia con una richiesta semplice: "Converti 100 gradi Fahrenheit in Celsius". L’agente riconosce che serve lo strumento di conversione della temperatura, lo richiama con i parametri corretti e restituisce il risultato. Nota quanto sembra naturale — non hai specificato quale strumento usare o come chiamarlo.
+Inizia con una richiesta semplice: "Converti 100 gradi Fahrenheit in Celsius". L'agente riconosce che deve utilizzare lo strumento di conversione della temperatura, lo chiama con i parametri corretti e restituisce il risultato. Nota quanto sia naturale — non hai specificato quale strumento usare né come chiamarlo.
### Prova la Catena di Strumenti
-Ora prova qualcosa di più complesso: "Com'è il meteo a Seattle e converti in Fahrenheit?" Guarda l’agente lavorare a questo per passi. Prima ottiene il meteo (che ritorna in Celsius), riconosce che deve convertire in Fahrenheit, chiama lo strumento di conversione, e combina entrambi i risultati in una singola risposta.
+Ora prova qualcosa di più complesso: "Com'è il tempo a Seattle e converti la temperatura in Fahrenheit?" Guarda l'agente lavorare a tappe. Prima ottiene le condizioni meteo (che ritorna in Celsius), riconosce che deve convertire in Fahrenheit, chiama lo strumento di conversione e combina entrambi i risultati in una risposta unica.
-### Vedi il Flusso della Conversazione
+### Vedi il Flusso di Conversazione
-L’interfaccia chat conserva la cronologia delle conversazioni, permettendoti di avere interazioni multi-turno. Puoi vedere tutte le query e risposte precedenti, rendendo facile tracciare la conversazione e capire come l’agente costruisce il contesto attraverso più scambi.
+L'interfaccia chat mantiene la cronologia della conversazione, permettendoti di avere interazioni multi-turno. Puoi vedere tutte le query e risposte precedenti, rendendo facile tracciare la conversazione e capire come l'agente costruisca il contesto nel corso degli scambi.
-
+
*Conversazione multi-turno che mostra conversioni semplici, ricerche meteo e concatenamento di strumenti*
-### Sperimenta con Richieste Diverse
+### Sperimenta con Diverse Richieste
Prova varie combinazioni:
-- Ricerche meteo: "Com'è il meteo a Tokyo?"
+- Ricerche meteo: "Che tempo fa a Tokyo?"
- Conversioni di temperatura: "Quanto sono 25°C in Kelvin?"
-- Query combinate: "Controlla il meteo a Parigi e dimmi se è sopra i 20°C"
+- Query combinate: "Controlla il tempo a Parigi e dimmi se è sopra i 20°C"
-Nota come l’agente interpreta il linguaggio naturale e lo mappa a chiamate appropriate agli strumenti.
+Nota come l'agente interpreta il linguaggio naturale e lo mappa alle chiamate appropriate degli strumenti.
## Concetti Chiave
-### Pattern ReAct (Reasoning and Acting)
+### Pattern ReAct (Ragionare e Agire)
-L’agente alterna tra ragionamento (decidere cosa fare) e azione (usare gli strumenti). Questo pattern permette la risoluzione autonoma dei problemi invece di rispondere solo a istruzioni.
+L'agente alterna ragionamento (decidere cosa fare) e azione (uso degli strumenti). Questo pattern permette una risoluzione autonoma dei problemi più che una semplice risposta a istruzioni.
### Le Descrizioni degli Strumenti Contano
-La qualità delle descrizioni degli strumenti influisce direttamente sull’efficacia dell’agente nell’utilizzarli. Descrizioni chiare e specifiche aiutano il modello a capire quando e come chiamare ciascuno strumento.
+La qualità delle descrizioni degli strumenti influisce direttamente su quanto bene l'agente li utilizzi. Descrizioni chiare e specifiche aiutano il modello a capire quando e come chiamare ogni strumento.
### Gestione della Sessione
-L’annotazione `@MemoryId` abilita la gestione automatica della memoria basata sulla sessione. Ogni ID di sessione ottiene la propria istanza di `ChatMemory` gestita dal bean `ChatMemoryProvider`, così più utenti possono interagire con l’agente simultaneamente senza che le conversazioni si mescolino. Il diagramma seguente mostra come più utenti vengono indirizzati a memorie isolate basate sui loro ID di sessione:
+L'annotazione `@MemoryId` abilita la gestione automatica della memoria basata sulla sessione. Ogni ID sessione ottiene una propria istanza di `ChatMemory` gestita dal bean `ChatMemoryProvider`, così più utenti possono interagire con l'agente simultaneamente senza mescolare le conversazioni. Il diagramma seguente mostra come diversi utenti vengano indirizzati a memorie isolate in base ai loro ID sessione:
-
+
-*Ogni ID di sessione mappa a una storia di conversazione isolata — gli utenti non vedono mai i messaggi degli altri.*
+*Ogni ID sessione mappa a una cronologia conversazionale isolata — gli utenti non vedono mai i messaggi degli altri.*
### Gestione degli Errori
-Gli strumenti possono fallire — le API scadono, i parametri potrebbero essere invalidi, i servizi esterni si interrompono. Gli agenti in produzione necessitano della gestione degli errori così il modello può spiegare i problemi o tentare alternative anziché far crashare l’intera applicazione. Quando uno strumento lancia un’eccezione, LangChain4j la cattura e restituisce il messaggio di errore al modello, che può quindi spiegare il problema in linguaggio naturale.
+Gli strumenti possono fallire — le API scadono, i parametri possono essere invalidi, i servizi esterni possono non rispondere. Gli agenti di produzione necessitano di gestione errori affinché il modello possa spiegare i problemi o provare alternative anziché far crashare l'intera applicazione. Quando uno strumento lancia un'eccezione, LangChain4j la cattura e passa il messaggio d'errore al modello, che può quindi spiegare il problema in linguaggio naturale.
## Strumenti Disponibili
-Il diagramma sottostante mostra il vasto ecosistema di strumenti che puoi costruire. Questo modulo dimostra strumenti per il meteo e la temperatura, ma lo stesso pattern `@Tool` funziona per qualsiasi metodo Java — dalle query al database all’elaborazione dei pagamenti.
+Il diagramma sotto mostra l'ecosistema ampio degli strumenti che puoi costruire. Questo modulo dimostra strumenti meteo e di temperatura, ma lo stesso pattern `@Tool` funziona per qualsiasi metodo Java — dalle query al database alle elaborazioni di pagamento.
-
+
-*Qualsiasi metodo Java annotato con @Tool diventa disponibile per l’AI — il pattern si estende a database, API, email, operazioni su file e altro.*
+*Qualsiasi metodo Java annotato con @Tool diventa disponibile all'AI — il pattern si estende a database, API, email, operazioni su file e altro.*
## Quando Usare Agenti Basati su Strumenti
-Non ogni richiesta necessita di strumenti. La decisione dipende dal fatto che l’AI debba interagire con sistemi esterni o possa rispondere dalla propria conoscenza. La guida seguente riassume quando gli strumenti aggiungono valore e quando non sono necessari:
+Non tutte le richieste necessitano strumenti. La decisione dipende dal fatto che l'AI debba interagire con sistemi esterni o possa rispondere dal proprio sapere. La guida seguente riepiloga quando gli strumenti aggiungono valore e quando sono superflui:
-
+
-*Una guida veloce per decidere — gli strumenti servono per dati in tempo reale, calcoli e azioni; conoscenza generale e compiti creativi non ne hanno bisogno.*
+*Una guida rapida — gli strumenti servono per dati in tempo reale, calcoli e azioni; conoscenza generale e compiti creativi non ne hanno bisogno.*
## Strumenti vs RAG
-I moduli 03 e 04 estendono entrambi le capacità dell’AI, ma in modi fondamentalmente diversi. RAG dà al modello accesso alla **conoscenza** recuperando documenti. Gli strumenti danno al modello la capacità di compiere **azioni** chiamando funzioni. Il diagramma sottostante confronta questi due approcci fianco a fianco — da come funziona ciascun flusso di lavoro ai compromessi tra di essi:
+I moduli 03 e 04 estendono entrambi le capacità dell'AI, ma in modi fondamentalmente diversi. RAG dà al modello accesso alla **conoscenza** recuperando documenti. Gli strumenti danno al modello la capacità di compiere **azioni** chiamando funzioni. Il diagramma sotto confronta queste due strategie fianco a fianco — dal modo in cui opera ciascun workflow fino ai compromessi tra loro:
-
+
-*RAG recupera informazioni da documenti statici — gli strumenti eseguono azioni e recuperano dati dinamici e in tempo reale. Molti sistemi di produzione combinano entrambi.*
+*RAG recupera informazioni da documenti statici — Strumenti eseguono azioni e ottengono dati dinamici e in tempo reale. Molti sistemi di produzione combinano entrambi.*
-In pratica, molti sistemi di produzione combinano entrambi gli approcci: RAG per ancorare le risposte nella documentazione, e Strumenti per recuperare dati live o eseguire operazioni.
+In pratica, molti sistemi di produzione combinano entrambi gli approcci: RAG per basare le risposte sulla documentazione, e Strumenti per recuperare dati vivi o eseguire operazioni.
## Passi Successivi
-**Prossimo Modulo:** [05-mcp - Model Context Protocol (MCP)](../05-mcp/README.md)
+**Modulo Successivo:** [05-mcp - Model Context Protocol (MCP)](../05-mcp/README.md)
---
@@ -382,6 +382,6 @@ In pratica, molti sistemi di produzione combinano entrambi gli approcci: RAG per
---
-**Disclaimer**:
-Questo documento è stato tradotto utilizzando il servizio di traduzione automatica AI [Co-op Translator](https://github.com/Azure/co-op-translator). Pur impegnandoci per garantire accuratezza, si prega di considerare che le traduzioni automatiche possono contenere errori o inesattezze. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si consiglia una traduzione professionale effettuata da un esperto umano. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall’uso di questa traduzione.
+**Disclaimer**:
+Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire la precisione, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un essere umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
\ No newline at end of file
diff --git a/translations/it/README.md b/translations/it/README.md
index 13c55ba14..ccdecfd97 100644
--- a/translations/it/README.md
+++ b/translations/it/README.md
@@ -6,14 +6,14 @@ Un corso per costruire applicazioni AI con LangChain4j e Azure OpenAI GPT-5.2, d
### 🌐 Supporto Multilingue
-#### Supportato tramite GitHub Action (Automatico & Sempre Aggiornato)
+#### Supportato tramite GitHub Action (Automatizzato & Sempre Aggiornato)
-[Arabo](../ar/README.md) | [Bengalese](../bn/README.md) | [Bulgaro](../bg/README.md) | [Birmano (Myanmar)](../my/README.md) | [Cinese (Semplificato)](../zh-CN/README.md) | [Cinese (Tradizionale, Hong Kong)](../zh-HK/README.md) | [Cinese (Tradizionale, Macao)](../zh-MO/README.md) | [Cinese (Tradizionale, Taiwan)](../zh-TW/README.md) | [Croato](../hr/README.md) | [Ceco](../cs/README.md) | [Danese](../da/README.md) | [Olandese](../nl/README.md) | [Estone](../et/README.md) | [Finlandese](../fi/README.md) | [Francese](../fr/README.md) | [Tedesco](../de/README.md) | [Greco](../el/README.md) | [Ebraico](../he/README.md) | [Hindi](../hi/README.md) | [Ungherese](../hu/README.md) | [Indonesiano](../id/README.md) | [Italiano](./README.md) | [Giapponese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Coreano](../ko/README.md) | [Lituano](../lt/README.md) | [Malese](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepalese](../ne/README.md) | [Pidgin Nigeriano](../pcm/README.md) | [Norvegese](../no/README.md) | [Persiano (Farsi)](../fa/README.md) | [Polacco](../pl/README.md) | [Portoghese (Brasile)](../pt-BR/README.md) | [Portoghese (Portogallo)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Rumeno](../ro/README.md) | [Russo](../ru/README.md) | [Serbo (Cirillico)](../sr/README.md) | [Slovacco](../sk/README.md) | [Sloveno](../sl/README.md) | [Spagnolo](../es/README.md) | [Swahili](../sw/README.md) | [Svedese](../sv/README.md) | [Tagalog (Filippino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Tailandese](../th/README.md) | [Turco](../tr/README.md) | [Ucraino](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamita](../vi/README.md)
+[Arabo](../ar/README.md) | [Bengalese](../bn/README.md) | [Bulgaro](../bg/README.md) | [Birmano (Myanmar)](../my/README.md) | [Cinese (Semplificato)](../zh-CN/README.md) | [Cinese (Tradizionale, Hong Kong)](../zh-HK/README.md) | [Cinese (Tradizionale, Macao)](../zh-MO/README.md) | [Cinese (Tradizionale, Taiwan)](../zh-TW/README.md) | [Croato](../hr/README.md) | [Ceco](../cs/README.md) | [Danese](../da/README.md) | [Olandese](../nl/README.md) | [Estone](../et/README.md) | [Finlandese](../fi/README.md) | [Francese](../fr/README.md) | [Tedesco](../de/README.md) | [Greco](../el/README.md) | [Ebraico](../he/README.md) | [Hindi](../hi/README.md) | [Ungherese](../hu/README.md) | [Indonesiano](../id/README.md) | [Italiano](./README.md) | [Giapponese](../ja/README.md) | [Kannada](../kn/README.md) | [Khmer](../km/README.md) | [Coreano](../ko/README.md) | [Lituano](../lt/README.md) | [Malese](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepalese](../ne/README.md) | [Pidgin Nigeriano](../pcm/README.md) | [Norvegese](../no/README.md) | [Persiano (Farsi)](../fa/README.md) | [Polacco](../pl/README.md) | [Portoghese (Brasile)](../pt-BR/README.md) | [Portoghese (Portogallo)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Rumeno](../ro/README.md) | [Russo](../ru/README.md) | [Serbo (Cirillico)](../sr/README.md) | [Slovacco](../sk/README.md) | [Sloveno](../sl/README.md) | [Spagnolo](../es/README.md) | [Swahili](../sw/README.md) | [Svedese](../sv/README.md) | [Tagalog (Filippino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thailandese](../th/README.md) | [Turco](../tr/README.md) | [Ucraino](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamita](../vi/README.md)
-> **Preferisci Clonare Localmente?**
+> **Preferisci clonare localmente?**
>
-> Questo repository include più di 50 traduzioni in lingue diverse che aumentano significativamente la dimensione del download. Per clonare senza le traduzioni, usa sparse checkout:
+> Questo repository include traduzioni in più di 50 lingue, il che aumenta significativamente la dimensione del download. Per clonare senza traduzioni, usa il sparse checkout:
>
> **Bash / macOS / Linux:**
> ```bash
@@ -29,26 +29,25 @@ Un corso per costruire applicazioni AI con LangChain4j e Azure OpenAI GPT-5.2, d
> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"
> ```
>
-> Questo ti fornisce tutto il necessario per completare il corso con un download molto più veloce.
+> Questo ti dà tutto il necessario per completare il corso con un download molto più veloce.
## Indice
-1. [Avvio Rapido](00-quick-start/README.md) - Inizia con LangChain4j
-2. [Introduzione](01-introduction/README.md) - Impara le basi di LangChain4j
-3. [Ingegneria del Prompt](02-prompt-engineering/README.md) - Padroneggia la progettazione efficace dei prompt
-4. [RAG (Generazione con Recupero)](03-rag/README.md) - Costruisci sistemi intelligenti basati sulla conoscenza
-5. [Strumenti](04-tools/README.md) - Integra strumenti esterni e assistenti semplici
-6. [MCP (Model Context Protocol)](05-mcp/README.md) - Lavora con il Model Context Protocol (MCP) e moduli agentici
+1. [Introduzione](01-introduction/README.md) - Impara le basi di LangChain4j
+2. [Prompt Engineering](02-prompt-engineering/README.md) - Diventa esperto nel design efficace dei prompt
+3. [RAG (Retrieval-Augmented Generation)](03-rag/README.md) - Costruisci sistemi intelligenti basati sulla conoscenza
+4. [Strumenti](04-tools/README.md) - Integra strumenti esterni e assistenti semplici
+5. [MCP (Model Context Protocol)](05-mcp/README.md) - Lavora con il Model Context Protocol (MCP) e i moduli Agentici
-### Tutorial Video
+### Video Tutorial
-Ogni modulo ha una sessione live di accompagnamento dove spieghiamo i concetti e il codice passo dopo passo.
+Ogni modulo ha una sessione live associata in cui esaminiamo i concetti e il codice passo dopo passo.
| Modulo | Video |
|--------|-------|
| 01 - Introduzione | [Iniziare con LangChain4j](https://www.youtube.com/live/nl_troDm8rQ) |
-| 02 - Ingegneria del Prompt | [Ingegneria del Prompt con LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
+| 02 - Prompt Engineering | [Prompt Engineering con LangChain4j](https://www.youtube.com/live/PJ6aBaE6bog) |
| 03 - RAG | [RAG con LangChain4j](https://www.youtube.com/watch?v=_olq75ZH_eY) |
| 04 - Strumenti & 05 - MCP | [Agenti AI con Strumenti e MCP](https://www.youtube.com/watch?v=O_J30kZc0rw) |
@@ -56,34 +55,34 @@ Ogni modulo ha una sessione live di accompagnamento dove spieghiamo i concetti e
## Percorso di Apprendimento
-**Nuovo a LangChain4j?** Dai un’occhiata al [Glossario](docs/GLOSSARY.md) per le definizioni dei termini e concetti chiave.
+**Sei nuovo in LangChain4j?** Dai un’occhiata al [Glossario](docs/GLOSSARY.md) per definizioni di termini chiave e concetti.
> **Avvio Rapido**
-1. Effettua il fork di questo repository nel tuo account GitHub
-2. Clicca **Code** → scheda **Codespaces** → **...** → **Nuovo con opzioni…**
-3. Usa le impostazioni predefinite – questo selezionerà il contenitore di sviluppo creato per questo corso
+1. Fai il fork di questo repository sul tuo account GitHub
+2. Clicca **Code** → scheda **Codespaces** → **...** → **Nuovo con opzioni...**
+3. Usa i valori predefiniti – questo selezionerà il contenitore di sviluppo creato per questo corso
4. Clicca **Crea codespace**
-5. Attendi 5-10 minuti che l’ambiente sia pronto
-6. Vai direttamente a [Avvio Rapido](./00-quick-start/README.md) per iniziare!
+5. Attendi 5-10 minuti per l’ambiente pronto
+6. Vai direttamente a [Introduzione](./01-introduction/README.md) per iniziare!
-Dopo aver completato i moduli, esplora la [Guida al Testing](docs/TESTING.md) per vedere in azione i concetti di testing di LangChain4j.
+Dopo aver completato i moduli, esplora la [Guida ai Test](docs/TESTING.md) per vedere in azione i concetti di testing di LangChain4j.
-> **Nota:** Questa formazione utilizza sia GitHub Models che Azure OpenAI. Il modulo [Avvio Rapido](00-quick-start/README.md) usa GitHub Models (non è necessaria un’abbonamento Azure), mentre i moduli da 1 a 5 utilizzano Azure OpenAI. Inizia con un [account Azure GRATUITO](https://aka.ms/azure-free-account) se non ne possiedi uno.
+> **Nota:** Questa formazione usa Azure OpenAI. Inizia con un [account Azure GRATUITO](https://aka.ms/azure-free-account) se non ne hai uno.
-## Imparare con GitHub Copilot
+## Apprendimento con GitHub Copilot
-Per iniziare rapidamente a programmare, apri questo progetto in un GitHub Codespace o nel tuo IDE locale con il devcontainer fornito. Il devcontainer usato in questo corso è preconfigurato con GitHub Copilot per la programmazione AI in coppia.
+Per iniziare rapidamente a programmare, apri questo progetto in un GitHub Codespace o nel tuo IDE locale con il devcontainer fornito. Il devcontainer usato in questo corso viene preconfigurato con GitHub Copilot per la programmazione in coppia AI.
-Ogni esempio di codice include domande suggerite che puoi fare a GitHub Copilot per approfondire la comprensione. Cerca i prompt 💡/🤖 in:
+Ogni esempio di codice include domande suggerite che puoi porre a GitHub Copilot per approfondire la tua comprensione. Cerca i prompt 💡/🤖 in:
-- **Intestazioni dei file Java** - Domande specifiche per ogni esempio
+- **Intestazioni di file Java** - Domande specifiche per ogni esempio
- **README dei moduli** - Prompt di esplorazione dopo gli esempi di codice
-**Come usarlo:** Apri qualsiasi file di codice e poni a Copilot le domande suggerite. Ha il contesto completo del codice e può spiegare, estendere e suggerire alternative.
+**Come usare:** Apri qualsiasi file di codice e poni a Copilot le domande suggerite. Ha il contesto completo del codice e può spiegare, estendere e suggerire alternative.
-Vuoi saperne di più? Guarda [Copilot per la Programmazione AI in Coppia](https://aka.ms/GitHubCopilotAI).
+Vuoi saperne di più? Dai un’occhiata a [Copilot per programmazione in coppia AI](https://aka.ms/GitHubCopilotAI).
## Risorse Aggiuntive
@@ -113,9 +112,9 @@ Vuoi saperne di più? Guarda [Copilot per la Programmazione AI in Coppia](https:
### Apprendimento Base
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
-[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
+[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
@@ -145,6 +144,6 @@ Licenza MIT - Vedi il file [LICENSE](../../LICENSE) per i dettagli.
---
-**Disclaimer**:
-Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Pur facendo del nostro meglio per garantire l’accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua natìa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali fraintendimenti o interpretazioni errate derivanti dall’uso di questa traduzione.
+**Disclaimer**:
+Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire la precisione, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un essere umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
\ No newline at end of file
diff --git a/translations/it/docs/GLOSSARY.md b/translations/it/docs/GLOSSARY.md
index b67470264..b4e1683a0 100644
--- a/translations/it/docs/GLOSSARY.md
+++ b/translations/it/docs/GLOSSARY.md
@@ -2,29 +2,29 @@
## Indice
-- [Concetti Fondamentali](../../../docs)
-- [Componenti LangChain4j](../../../docs)
-- [Concetti AI/ML](../../../docs)
-- [Guardrails](../../../docs)
-- [Prompt Engineering](../../../docs)
-- [RAG (Generazione Arricchita da Recupero)](../../../docs)
-- [Agenti e Strumenti](../../../docs)
-- [Modulo Agentico](../../../docs)
-- [Protocollo di Contesto Modello (MCP)](../../../docs)
-- [Servizi Azure](../../../docs)
-- [Testing e Sviluppo](../../../docs)
+- [Concetti Principali](#concetti-principali)
+- [Componenti LangChain4j](#componenti-langchain4j)
+- [Concetti AI/ML](#concetti-aiml)
+- [Guardrails](#guardrails)
+- [Prompt Engineering](#prompt-engineering---modulo-02)
+- [RAG (Retrieval-Augmented Generation)](#rag-retrieval-augmented-generation---modulo-03)
+- [Agenti e Strumenti](#agenti-e-strumenti---modulo-04)
+- [Modulo Agentic](#modulo-agentic---modulo-05)
+- [Model Context Protocol (MCP)](#model-context-protocol-mcp---modulo-05)
+- [Servizi Azure](#servizi-azure---modulo-01)
+- [Testing e Sviluppo](#testing-e-sviluppo---guida-al-testing)
-Riferimento rapido per termini e concetti usati durante il corso.
+Riferimento rapido per termini e concetti utilizzati durante il corso.
-## Concetti Fondamentali
+## Concetti Principali
-**Agente AI** - Sistema che utilizza AI per ragionare e agire autonomamente. [Modulo 04](../04-tools/README.md)
+**Agente AI** - Sistema che utilizza AI per ragionare e agire in autonomia. [Modulo 04](../04-tools/README.md)
**Catena** - Sequenza di operazioni in cui l'output alimenta il passo successivo.
-**Suddivisione (Chunking)** - Suddividere documenti in pezzi più piccoli. Tipico: 300-500 token con sovrapposizione. [Modulo 03](../03-rag/README.md)
+**Chunking** - Suddivisione di documenti in pezzi più piccoli. Tipico: 300-500 token con sovrapposizione. [Modulo 03](../03-rag/README.md)
-**Finestra di Contesto** - Massimo numero di token che un modello può processare. GPT-5.2: 400K token (fino a 272K input, 128K output).
+**Finestra di Contesto** - Numero massimo di token che un modello può processare. GPT-5.2: 400K token (fino a 272K input, 128K output).
**Embedding** - Vettori numerici che rappresentano il significato del testo. [Modulo 03](../03-rag/README.md)
@@ -32,155 +32,155 @@ Riferimento rapido per termini e concetti usati durante il corso.
**Allucinazione** - Quando i modelli generano informazioni errate ma plausibili.
-**Prompt** - Testo di input per un modello di linguaggio. [Modulo 02](../02-prompt-engineering/README.md)
+**Prompt** - Input testuale per un modello di linguaggio. [Modulo 02](../02-prompt-engineering/README.md)
**Ricerca Semantica** - Ricerca basata sul significato usando embedding, non parole chiave. [Modulo 03](../03-rag/README.md)
-**Stateful vs Stateless** - Stateless: nessuna memoria. Stateful: mantiene la cronologia della conversazione. [Modulo 01](../01-introduction/README.md)
+**Stateful vs Stateless** - Stateless: senza memoria. Stateful: mantiene la cronologia della conversazione. [Modulo 01](../01-introduction/README.md)
-**Token** - Unità base di testo che i modelli processano. Influisce su costi e limiti. [Modulo 01](../01-introduction/README.md)
+**Token** - Unità base di testo processata dai modelli. Incide su costi e limiti. [Modulo 01](../01-introduction/README.md)
-**Catena di Strumenti** - Esecuzione sequenziale di strumenti dove l'output informa la chiamata successiva. [Modulo 04](../04-tools/README.md)
+**Catena di Strumenti** - Esecuzione sequenziale di strumenti in cui l'output informa la chiamata successiva. [Modulo 04](../04-tools/README.md)
## Componenti LangChain4j
-**AiServices** - Crea interfacce di servizi AI type-safe.
+**AiServices** - Crea interfacce di servizio AI type-safe.
**OpenAiOfficialChatModel** - Client unificato per modelli OpenAI e Azure OpenAI.
-**OpenAiOfficialEmbeddingModel** - Crea embedding usando il client ufficiale OpenAI (supporta sia OpenAI che Azure OpenAI).
+**OpenAiOfficialEmbeddingModel** - Crea embedding usando il client OpenAI Official (supporta sia OpenAI che Azure OpenAI).
**ChatModel** - Interfaccia core per modelli di linguaggio.
**ChatMemory** - Mantiene la cronologia della conversazione.
-**ContentRetriever** - Trova i chunk di documento rilevanti per RAG.
+**ContentRetriever** - Trova chunk di documenti rilevanti per RAG.
**DocumentSplitter** - Suddivide documenti in chunk.
**EmbeddingModel** - Converte testo in vettori numerici.
-**EmbeddingStore** - Memorizza e recupera embedding.
+**EmbeddingStore** - Salva e recupera embedding.
**MessageWindowChatMemory** - Mantiene una finestra mobile dei messaggi recenti.
-**PromptTemplate** - Crea prompt riutilizzabili con segnaposti `{{variable}}`.
+**PromptTemplate** - Crea prompt riutilizzabili con segnaposto `{{variable}}`.
-**TextSegment** - Chunk di testo con metadati. Usato in RAG.
+**TextSegment** - Chunk di testo con metadata. Usato in RAG.
-**ToolExecutionRequest** - Rappresenta una richiesta di esecuzione di uno strumento.
+**ToolExecutionRequest** - Rappresenta la richiesta di esecuzione di uno strumento.
**UserMessage / AiMessage / SystemMessage** - Tipi di messaggi di conversazione.
## Concetti AI/ML
-**Few-Shot Learning** - Fornire esempi all'interno dei prompt. [Modulo 02](../02-prompt-engineering/README.md)
+**Few-Shot Learning** - Fornire esempi nei prompt. [Modulo 02](../02-prompt-engineering/README.md)
**Large Language Model (LLM)** - Modelli AI addestrati su grandi quantità di testo.
-**Sforzo di Ragionamento** - Parametro GPT-5.2 che controlla la profondità del pensiero. [Modulo 02](../02-prompt-engineering/README.md)
+**Sforzo di Ragionamento** - Parametro GPT-5.2 che controlla la profondità del ragionamento. [Modulo 02](../02-prompt-engineering/README.md)
-**Temperatura** - Controlla la casualità in output. Basso=deterministico, alto=creativo.
+**Temperatura** - Controlla la casualità dell'output. Bassa=deterministico, alta=creativo.
**Database Vettoriale** - Database specializzato per embedding. [Modulo 03](../03-rag/README.md)
**Zero-Shot Learning** - Eseguire compiti senza esempi. [Modulo 02](../02-prompt-engineering/README.md)
-## Guardrails - [Modulo 00](../00-quick-start/README.md)
+## Guardrails
-**Difesa in Profondità** - Approccio di sicurezza a più livelli che combina guardrails a livello applicativo con filtri di sicurezza del provider.
+**Difesa in Profondità** - Approccio di sicurezza multilivello che combina guardrails a livello applicativo con filtri di sicurezza del provider.
-**Blocco Rigido** - Il provider lancia un errore HTTP 400 per gravi violazioni di contenuto.
+**Blocco Duro** - Il provider restituisce errore HTTP 400 per violazioni gravi dei contenuti.
-**InputGuardrail** - Interfaccia LangChain4j per validare l'input dell'utente prima che raggiunga l'LLM. Risparmia costi e latenza bloccando prompt dannosi in anticipo.
+**InputGuardrail** - Interfaccia LangChain4j per convalidare l'input utente prima che raggiunga l'LLM. Riduce costi e latenza bloccando prompt dannosi in anticipo.
**InputGuardrailResult** - Tipo di ritorno per la validazione guardrail: `success()` o `fatal("reason")`.
-**OutputGuardrail** - Interfaccia per validare le risposte AI prima di restituirle agli utenti.
+**OutputGuardrail** - Interfaccia per convalidare le risposte AI prima di restituirle agli utenti.
-**Filtri di Sicurezza del Provider** - Filtri di contenuto integrati dai provider AI (es. GitHub Models) che intercettano violazioni a livello API.
+**Filtri di Sicurezza del Provider** - Filtri di contenuto integrati dai provider AI (es. Azure OpenAI) che intercettano violazioni a livello API.
-**Rifiuto Soft** - Il modello declina educatamente di rispondere senza generare errore.
+**Rifiuto Morbido** - Il modello declina educatamente di rispondere senza generare errore.
## Prompt Engineering - [Modulo 02](../02-prompt-engineering/README.md)
-**Catena di Pensiero (Chain-of-Thought)** - Ragionamento passo-passo per maggiore accuratezza.
+**Chain-of-Thought** - Ragionamento passo dopo passo per maggiore accuratezza.
-**Output Vincolato (Constrained Output)** - Applicare formato o struttura specifici.
+**Output Vincolato** - Forzare un formato o struttura specifica.
-**Alta Prontezza (High Eagerness)** - Pattern GPT-5.2 per ragionamento approfondito.
+**Alta Voglia** - Pattern GPT-5.2 per ragionamento approfondito.
-**Bassa Prontezza (Low Eagerness)** - Pattern GPT-5.2 per risposte rapide.
+**Bassa Voglia** - Pattern GPT-5.2 per risposte rapide.
-**Conversazione Multi-Turno** - Mantenere il contesto attraverso gli scambi.
+**Conversazione Multi-Turno** - Mantenere il contesto tra scambi.
-**Prompting Basato sul Ruolo** - Definire la persona del modello tramite messaggi di sistema.
+**Prompting Basato su Ruolo** - Impostare la persona del modello tramite messaggi di sistema.
**Auto-Riflessione** - Il modello valuta e migliora il proprio output.
-**Analisi Strutturata** - Quadro di valutazione fisso.
+**Analisi Strutturata** - Framework di valutazione fisso.
-**Pattern di Esecuzione del Compito** - Pianifica → Esegui → Riassumi.
+**Pattern di Esecuzione compiti** - Pianifica → Esegui → Riepiloga.
-## RAG (Generazione Arricchita da Recupero) - [Modulo 03](../03-rag/README.md)
+## RAG (Retrieval-Augmented Generation) - [Modulo 03](../03-rag/README.md)
-**Pipeline di Elaborazione Documento** - Carica → suddividi → incorpora → archivia.
+**Pipeline di Elaborazione Documenti** - Carica → spezza → embedd → archivia.
-**Archiviazione Embedding In-Memory** - Memorizzazione non persistente per test.
+**Embedding Store in Memoria** - Storage non persistente per test.
-**RAG** - Combina recupero con generazione per ancorare le risposte.
+**RAG** - Combina retrieval con generazione per ancorare le risposte.
-**Punteggio di Similarità** - Misura (0-1) di somiglianza semantica.
+**Punteggio di Similarità** - Misura (0-1) di similarità semantica.
-**Riferimento alla Fonte** - Metadati sul contenuto recuperato.
+**Riferimento alla Fonte** - Metadata sul contenuto recuperato.
## Agenti e Strumenti - [Modulo 04](../04-tools/README.md)
-**Annotazione @Tool** - Marca metodi Java come strumenti richiamabili dall'AI.
+**Annotazione @Tool** - Marca metodi Java come strumenti richiamabili dall’AI.
**Pattern ReAct** - Ragiona → Agisci → Osserva → Ripeti.
-**Gestione Sessione** - Contesti separati per utenti differenti.
+**Gestione Sessione** - Contesti separati per utenti diversi.
-**Strumento (Tool)** - Funzione che un agente AI può chiamare.
+**Strumento** - Funzione che un agente AI può chiamare.
-**Descrizione Strumento** - Documentazione dello scopo e dei parametri dello strumento.
+**Descrizione Strumento** - Documentazione dello scopo e parametri dello strumento.
-## Modulo Agentico - [Modulo 05](../05-mcp/README.md)
+## Modulo Agentic - [Modulo 05](../05-mcp/README.md)
**Annotazione @Agent** - Marca interfacce come agenti AI con definizione comportamentale dichiarativa.
-**Agent Listener** - Hook per monitorare l’esecuzione agente tramite `beforeAgentInvocation()` e `afterAgentInvocation()`.
+**Agent Listener** - Hook per monitorare esecuzione agente via `beforeAgentInvocation()` e `afterAgentInvocation()`.
-**Ambito Agentico (Agentic Scope)** - Memoria condivisa dove gli agenti memorizzano output utilizzando `outputKey` per agenti a valle.
+**Ambito Agentic** - Memoria condivisa dove agenti salvano output usando `outputKey` per agenti a valle.
**AgenticServices** - Factory per creare agenti usando `agentBuilder()` e `supervisorBuilder()`.
-**Workflow Condizionale** - Routing basato su condizioni verso agenti specialisti diversi.
+**Flusso Condizionale** - Routing basato su condizioni verso agenti specialisti differenti.
-**Human-in-the-Loop** - Pattern di workflow che aggiunge checkpoint umani per approvazione o revisione contenuti.
+**Human-in-the-Loop** - Pattern di flusso che aggiunge checkpoint umani per approvazione o revisione contenuti.
-**langchain4j-agentic** - Dipendenza Maven per costruzione agenti dichiarativa (sperimentale).
+**langchain4j-agentic** - Dipendenza Maven per costruzione dichiarativa agenti (sperimentale).
-**Workflow a Ciclo (Loop Workflow)** - Iterare l’esecuzione agente finché una condizione è soddisfatta (es. punteggio qualità ≥ 0.8).
+**Flusso a Ciclo** - Itera esecuzione agente fino a soddisfare una condizione (es. punteggio qualità ≥ 0.8).
-**outputKey** - Parametro annotazione agente che specifica dove vengono archiviati i risultati nell’Ambito Agentico.
+**outputKey** - Parametro annotazione agente che specifica dove salvare i risultati in Ambito Agentic.
-**Workflow Parallelo** - Esegue più agenti simultaneamente per compiti indipendenti.
+**Flusso Parallelo** - Esegue più agenti simultaneamente per compiti indipendenti.
**Strategia di Risposta** - Come il supervisore formula la risposta finale: LAST, SUMMARY, o SCORED.
-**Workflow Sequenziale** - Esegue agenti in ordine dove l’output fluisce al passo successivo.
+**Flusso Sequenziale** - Esecuzione agente in ordine in cui l'output fluisce al passo successivo.
-**Pattern Agent Supervisore** - Pattern avanzato agentico dove un LLM supervisore decide dinamicamente quali sub-agenti invocare.
+**Pattern Agente Supervisore** - Pattern agentic avanzato in cui un supervisore LLM decide dinamicamente quali sotto-agenti invocare.
-## Protocollo di Contesto Modello (MCP) - [Modulo 05](../05-mcp/README.md)
+## Model Context Protocol (MCP) - [Modulo 05](../05-mcp/README.md)
-**langchain4j-mcp** - Dipendenza Maven per l’integrazione MCP in LangChain4j.
+**langchain4j-mcp** - Dipendenza Maven per integrazione MCP in LangChain4j.
-**MCP** - Model Context Protocol: standard per collegare app AI a strumenti esterni. Scrivi una volta, usa ovunque.
+**MCP** - Model Context Protocol: standard per connettere app AI a strumenti esterni. Costruisci una volta, usa ovunque.
-**Client MCP** - Applicazione che si connette a server MCP per scoprire e usare strumenti.
+**Client MCP** - Applicazione che si connette a server MCP per scoprire e utilizzare strumenti.
**Server MCP** - Servizio che espone strumenti via MCP con descrizioni chiare e schemi parametri.
@@ -188,45 +188,43 @@ Riferimento rapido per termini e concetti usati durante il corso.
**McpTransport** - Interfaccia per comunicazione MCP. Implementazioni includono Stdio e HTTP.
-**Trasporto Stdio** - Trasporto processo locale tramite stdin/stdout. Utile per accesso filesystem o strumenti da riga di comando.
+**Trasporto Stdio** - Trasporto processo locale via stdin/stdout. Utile per accesso filesystem o strumenti CLI.
-**StdioMcpTransport** - Implementazione LangChain4j che avvia server MCP come processo secondario.
+**StdioMcpTransport** - Implementazione LangChain4j che avvia server MCP come subprocesso.
-**Scoperta Strumenti** - Client interroga server per strumenti disponibili con descrizioni e schemi.
+**Scoperta Strumenti** - Il client interroga il server per strumenti disponibili con descrizioni e schemi.
## Servizi Azure - [Modulo 01](../01-introduction/README.md)
-**Azure AI Search** - Ricerca cloud con funzionalità vettoriali. [Modulo 03](../03-rag/README.md)
+**Azure AI Search** - Ricerca cloud con capacità vettoriali. [Modulo 03](../03-rag/README.md)
-**Azure Developer CLI (azd)** - Deploy di risorse Azure.
+**Azure Developer CLI (azd)** - Distribuisce risorse Azure.
**Azure OpenAI** - Servizio AI enterprise di Microsoft.
**Bicep** - Linguaggio infrastructure-as-code per Azure. [Guida Infrastructure](../01-introduction/infra/README.md)
-**Nome di Deploy** - Nome per il deployment del modello in Azure.
+**Nome Distribuzione** - Nome per il deployment del modello in Azure.
**GPT-5.2** - Ultimo modello OpenAI con controllo del ragionamento. [Modulo 02](../02-prompt-engineering/README.md)
-## Testing e Sviluppo - [Guida Testing](TESTING.md)
+## Testing e Sviluppo - [Guida al Testing](TESTING.md)
**Dev Container** - Ambiente di sviluppo containerizzato. [Configurazione](../../../.devcontainer/devcontainer.json)
-**GitHub Models** - Playground AI gratuito. [Modulo 00](../00-quick-start/README.md)
+**Testing in Memoria** - Test con storage in memoria.
-**Testing In-Memory** - Testing con archiviazione in memoria.
+**Testing di Integrazione** - Test con infrastruttura reale.
-**Testing di Integrazione** - Testing con infrastruttura reale.
+**Maven** - Strumento di automazione build Java.
-**Maven** - Strumento Java per automazione build.
+**Mockito** - Framework mocking Java.
-**Mockito** - Framework Java per mocking.
-
-**Spring Boot** - Framework applicativo Java. [Modulo 01](../01-introduction/README.md)
+**Spring Boot** - Framework applicazioni Java. [Modulo 01](../01-introduction/README.md)
---
-**Avvertenza**:
-Questo documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Pur impegnandoci per garantire accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o inesattezze. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un umano. Non ci assumiamo alcuna responsabilità per malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
+**Disclaimer**:
+Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire la precisione, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un essere umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
\ No newline at end of file
diff --git a/translations/it/docs/TESTING.md b/translations/it/docs/TESTING.md
index 65dcef413..96c080b6c 100644
--- a/translations/it/docs/TESTING.md
+++ b/translations/it/docs/TESTING.md
@@ -1,20 +1,20 @@
-# Testing LangChain4j Applications
+# Testare le applicazioni LangChain4j
-## Table of Contents
+## Sommario
-- [Quick Start](../../../docs)
-- [What the Tests Cover](../../../docs)
-- [Running the Tests](../../../docs)
-- [Running Tests in VS Code](../../../docs)
-- [Testing Patterns](../../../docs)
-- [Testing Philosophy](../../../docs)
-- [Next Steps](../../../docs)
+- [Avvio rapido](#avvio-rapido)
+- [Cosa coprono i test](#cosa-coprono-i-test)
+- [Esecuzione dei test](#esecuzione-dei-test)
+- [Esecuzione dei test in VS Code](#esecuzione-dei-test-in-vs-code)
+- [Modelli di test](#modelli-di-test)
+- [Filosofia dei test](#filosofia-dei-test)
+- [Passi successivi](#passi-successivi)
-Questa guida ti accompagna attraverso i test che dimostrano come testare applicazioni AI senza richiedere chiavi API o servizi esterni.
+Questa guida ti guida attraverso i test che mostrano come testare applicazioni AI senza richiedere chiavi API o servizi esterni.
-## Quick Start
+## Avvio rapido
-Esegui tutti i test con un unico comando:
+Esegui tutti i test con un solo comando:
**Bash:**
```bash
@@ -26,30 +26,29 @@ mvn test
mvn --% test
```
-Quando tutti i test passano, dovresti vedere un output simile allo screenshot qui sotto — i test vengono eseguiti con zero errori.
+Quando tutti i test passano, dovresti vedere un output simile allo screenshot qui sotto — test eseguiti con zero fallimenti.
-
+
-*Esecuzione di test riuscita che mostra tutti i test superati senza errori*
+*Esecuzione riuscita dei test che mostra tutti i test superati con zero fallimenti*
-## What the Tests Cover
+## Cosa coprono i test
-Questo corso si concentra su **test unitari** che vengono eseguiti localmente. Ogni test dimostra un concetto specifico di LangChain4j in isolamento. La piramide dei test mostrata sotto indica dove si collocano i test unitari — formano la base veloce e affidabile su cui si costruisce il resto della strategia di testing.
+Questo corso si concentra sui **test unitari** che vengono eseguiti localmente. Ogni test dimostra un concetto specifico di LangChain4j in isolamento. La piramide dei test qui sotto mostra dove si collocano i test unitari — essi formano la base rapida e affidabile su cui costruisce il resto della tua strategia di test.
-
+
*Piramide dei test che mostra l’equilibrio tra test unitari (veloci, isolati), test di integrazione (componenti reali) e test end-to-end. Questa formazione copre il testing unitario.*
-| Modulo | Test | Focus | File Chiave |
-|--------|-------|-------|-------------|
-| **00 - Quick Start** | 6 | Template prompt e sostituzione variabili | `SimpleQuickStartTest.java` |
-| **01 - Introduction** | 8 | Memoria conversazionale e chat con stato | `SimpleConversationTest.java` |
-| **02 - Prompt Engineering** | 12 | Pattern GPT-5.2, livelli di eagerness, output strutturato | `SimpleGpt5PromptTest.java` |
-| **03 - RAG** | 10 | Ingestione documenti, embeddings, ricerca per similarità | `DocumentServiceTest.java` |
-| **04 - Tools** | 12 | Chiamata funzioni e concatenamento strumenti | `SimpleToolsTest.java` |
-| **05 - MCP** | 8 | Model Context Protocol con trasporto Stdio | `SimpleMcpTest.java` |
+| Modulo | Test | Focus | File chiave |
+|--------|-------|-------|-----------|
+| **01 - Introduzione** | 8 | Memoria della conversazione e chat con stato | `SimpleConversationTest.java` |
+| **02 - Prompt Engineering** | 12 | Pattern GPT-5.2, livelli di prontezza, output strutturato | `SimpleGpt5PromptTest.java` |
+| **03 - RAG** | 10 | Ingestione documenti, embeddings, ricerca di similarità | `DocumentServiceTest.java` |
+| **04 - Tools** | 12 | Chiamata di funzioni e concatenamento di tool | `SimpleToolsTest.java` |
+| **05 - MCP** | 8 | Model Context Protocol con trasporto stdio | `SimpleMcpTest.java` |
-## Running the Tests
+## Esecuzione dei test
**Esegui tutti i test dalla root:**
@@ -63,7 +62,7 @@ mvn test
mvn --% test
```
-**Esegui i test di un modulo specifico:**
+**Esegui i test per un modulo specifico:**
**Bash:**
```bash
@@ -103,9 +102,9 @@ mvn test -Dtest=SimpleConversationTest#dovrebbeMantenereLaCronologiaDellaConvers
mvn --% test -Dtest=SimpleConversationTest#dovrebbeMantenereLaCronologiaDellaConversazione
```
-## Running Tests in VS Code
+## Esecuzione dei test in VS Code
-Se usi Visual Studio Code, il Test Explorer offre un’interfaccia grafica per eseguire e fare il debug dei test.
+Se usi Visual Studio Code, il Test Explorer fornisce un’interfaccia grafica per eseguire e fare il debug dei test.
@@ -113,23 +112,23 @@ Se usi Visual Studio Code, il Test Explorer offre un’interfaccia grafica per e
**Per eseguire i test in VS Code:**
-1. Apri il Test Explorer cliccando sull’icona del becher nella Activity Bar
+1. Apri il Test Explorer cliccando l’icona del becher nella barra attività
2. Espandi l’albero dei test per vedere tutti i moduli e le classi di test
3. Clicca il pulsante play accanto a qualsiasi test per eseguirlo singolarmente
4. Clicca su "Run All Tests" per eseguire l’intera suite
-5. Clicca col tasto destro su un test e scegli "Debug Test" per impostare breakpoint e fare step attraverso il codice
+5. Clicca col tasto destro su un test e seleziona "Debug Test" per impostare breakpoint ed eseguire passo passo
-Il Test Explorer mostra spunte verdi per i test superati e fornisce messaggi dettagliati in caso di fallimento.
+Il Test Explorer mostra segni di spunta verdi per i test superati e fornisce messaggi dettagliati in caso di fallimento.
-## Testing Patterns
+## Modelli di test
-### Pattern 1: Testing Prompt Templates
+### Modello 1: Testare i template dei prompt
-Il pattern più semplice testa i template dei prompt senza chiamare alcun modello AI. Verifichi che la sostituzione delle variabili funzioni correttamente e che i prompt siano formattati come previsto.
+Il modello più semplice testa i template dei prompt senza chiamare alcun modello AI. Verifichi che la sostituzione delle variabili funzioni correttamente e che i prompt siano formattati come previsto.
-
+
-*Testing dei template di prompt che mostra il flusso di sostituzione variabili: template con segnaposto → applicazione dei valori → output formattato verificato*
+*Test dei template di prompt che mostra il flusso di sostituzione delle variabili: template con segnaposto → valori applicati → output formattato verificato*
```java
@Test
@@ -148,27 +147,15 @@ void testPromptTemplateFormatting() {
}
```
-Questo test si trova in `00-quick-start/src/test/java/com/example/langchain4j/quickstart/SimpleQuickStartTest.java`.
+Questo modello verifica che la sostituzione delle variabili funzioni correttamente e che i prompt siano formattati come previsto — non è richiesta alcuna chiave API o chiamata al modello.
-**Eseguilo:**
+### Modello 2: Mocking dei modelli linguistici
-**Bash:**
-```bash
-cd 00-quick-start && mvn test -Dtest=SimpleQuickStartTest#testareLaFormattazioneDelModelloDiPrompt
-```
-
-**PowerShell:**
-```powershell
-cd 00-quick-start; mvn --% test -Dtest=SimpleQuickStartTest#testPromptTemplateFormatting
-```
-
-### Pattern 2: Mocking Language Models
-
-Quando testi la logica di conversazione, usa Mockito per creare modelli finti che restituiscono risposte predeterminate. Questo rende i test veloci, gratuiti e deterministici.
+Quando testi la logica della conversazione, usa Mockito per creare modelli falsi che restituiscono risposte predeterminate. Questo rende i test veloci, gratuiti e deterministici.
-
+
-*Confronto che mostra perché si preferiscono i mock per il testing: sono veloci, gratuiti, deterministici e non richiedono chiavi API*
+*Confronto che mostra perché i mock sono preferiti per il testing: sono veloci, gratuiti, deterministici e non richiedono chiavi API*
```java
@ExtendWith(MockitoExtension.class)
@@ -218,15 +205,15 @@ class SimpleConversationTest {
}
```
-Questo pattern appare in `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Il mock garantisce un comportamento consistente così da poter verificare che la gestione della memoria funzioni correttamente.
+Questo modello appare in `01-introduction/src/test/java/com/example/langchain4j/service/SimpleConversationTest.java`. Il mock garantisce comportamento consistente così puoi verificare che la gestione della memoria funzioni correttamente.
-### Pattern 3: Testing Conversation Isolation
+### Modello 3: Testare l’isolamento della conversazione
-La memoria della conversazione deve mantenere separati più utenti. Questo test verifica che le conversazioni non mescolino i contesti.
+La memoria della conversazione deve mantenere gli utenti separati. Questo test verifica che le conversazioni non mescolino i contesti.
-
+
-*Testing dell’isolamento della conversazione che mostra archivi di memoria separati per utenti diversi per evitare mescolamento dei contesti*
+*Test dell’isolamento delle conversazioni che mostra archivi di memoria separati per diversi utenti per evitare mescolanze di contesto*
```java
@Test
@@ -250,15 +237,15 @@ void shouldIsolateConversationsByid() {
}
```
-Ogni conversazione mantiene la propria storia indipendente. Nei sistemi di produzione, questo isolamento è critico per applicazioni multiutente.
+Ogni conversazione mantiene la propria storia indipendente. Nei sistemi di produzione, questo isolamento è critico per applicazioni multi-utente.
-### Pattern 4: Testing Tools Independently
+### Modello 4: Testare i tool indipendentemente
-Gli strumenti sono funzioni che l’AI può chiamare. Testali direttamente per assicurarti che funzionino correttamente indipendentemente dalle decisioni dell’AI.
+I tool sono funzioni che l’AI può chiamare. Testali direttamente per assicurarti che funzionino correttamente indipendentemente dalle decisioni AI.
-
+
-*Testing degli strumenti indipendentemente che mostra esecuzione di tool mock senza chiamate AI per verificare la logica di business*
+*Testare i tool in modo indipendente mostrando l’esecuzione di tool mock senza chiamate AI per verificare la logica di business*
```java
@Test
@@ -281,15 +268,15 @@ void shouldDemonstrateToolChaining() {
}
```
-Questi test da `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` convalidano la logica degli strumenti senza coinvolgimento AI. L’esempio di concatenamento mostra come l’output di uno strumento alimenti l’input di un altro.
+Questi test da `04-tools/src/test/java/com/example/langchain4j/agents/tools/SimpleToolsTest.java` convalidano la logica dei tool senza coinvolgimento AI. L’esempio di concatenamento mostra come l’output di un tool alimenta l’input di un altro.
-### Pattern 5: In-Memory RAG Testing
+### Modello 5: Test RAG in memoria
-I sistemi RAG tradizionalmente richiedono database vettoriali e servizi di embedding. Il pattern in-memory ti permette di testare l’intera pipeline senza dipendenze esterne.
+I sistemi RAG richiedono tradizionalmente database vettoriali e servizi di embedding. Il modello in memoria ti permette di testare l’intera pipeline senza dipendenze esterne.
-
+
-*Flusso di lavoro RAG in-memory che mostra parsing documenti, memorizzazione embedding e ricerca per similarità senza richiedere un database*
+*Workflow di test RAG in memoria che mostra parsing documenti, memorizzazione embedding e ricerca di similarità senza richiedere un database*
```java
@Test
@@ -306,9 +293,9 @@ void testProcessTextDocument() {
}
```
-Questo test da `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` crea un documento in memoria e verifica chunking e gestione meta-dati.
+Questo test da `03-rag/src/test/java/com/example/langchain4j/rag/service/DocumentServiceTest.java` crea un documento in memoria e verifica il chunking e la gestione dei metadata.
-### Pattern 6: MCP Integration Testing
+### Modello 6: Test d’integrazione MCP
Il modulo MCP testa l’integrazione del Model Context Protocol usando il trasporto stdio. Questi test verificano che la tua applicazione possa avviare e comunicare con server MCP come sottoprocessi.
@@ -326,38 +313,37 @@ cd 05-mcp && mvn test
cd 05-mcp; mvn --% test
```
-## Testing Philosophy
+## Filosofia dei test
-Testa il tuo codice, non l’AI. I tuoi test dovrebbero validare il codice che scrivi controllando come i prompt vengono costruiti, come la memoria viene gestita e come gli strumenti vengono eseguiti. Le risposte AI variano e non dovrebbero far parte delle asserzioni di test. Chiediti se il tuo template di prompt sostituisce correttamente le variabili, non se l’AI dà la risposta giusta.
+Testa il tuo codice, non l’AI. I tuoi test dovrebbero convalidare il codice che scrivi controllando come i prompt sono costruiti, come la memoria è gestita e come i tool vengono eseguiti. Le risposte AI variano e non dovrebbero far parte delle asserzioni dei test. Chiediti se il tuo template di prompt sostituisce correttamente le variabili, non se l’AI fornisce la risposta giusta.
-Usa i mock per i modelli linguistici. Sono dipendenze esterne che sono lente, costose e non deterministiche. Il mocking rende i test veloci con millisecondi anziché secondi, gratuiti senza costi API, e deterministici con lo stesso risultato ogni volta.
+Usa i mock per i modelli linguistici. Sono dipendenze esterne che sono lente, costose e non deterministiche. Il mocking rende i test veloci con millisecondi invece di secondi, gratuiti senza costi API e deterministici con lo stesso risultato ogni volta.
-Mantieni i test indipendenti. Ogni test dovrebbe preparare i propri dati, non dipendere da altri test, e pulire dopo sé stesso. I test dovrebbero passare indipendentemente dall’ordine di esecuzione.
+Mantieni i test indipendenti. Ogni test dovrebbe preparare i propri dati, non dipendere da altri test e pulire dopo di sé. I test dovrebbero passare indipendentemente dall’ordine di esecuzione.
-Testa i casi limite oltre il percorso positivo. Prova input vuoti, input molto grandi, caratteri speciali, parametri non validi e condizioni al limite. Questi spesso fanno emergere bug che l’uso normale non rivela.
+Testa casi limite oltre il percorso ottimale. Prova input vuoti, input molto grandi, caratteri speciali, parametri non validi e condizioni di confine. Questi spesso rivelano bug che l’uso normale non espone.
-Usa nomi descrittivi. Confronta `shouldMaintainConversationHistoryAcrossMultipleMessages()` con `test1()`. Il primo ti dice esattamente cosa viene testato, rendendo il debug dei fallimenti molto più facile.
+Usa nomi descrittivi. Confronta `shouldMaintainConversationHistoryAcrossMultipleMessages()` con `test1()`. Il primo ti dice esattamente cosa viene testato, facilitando molto il debug in caso di fallimenti.
-## Next Steps
+## Passi successivi
-Ora che conosci i pattern di testing, approfondisci ogni modulo:
+Ora che conosci i modelli di test, approfondisci ogni modulo:
-- **[00 - Quick Start](../00-quick-start/README.md)** - Inizia con le basi dei template prompt
-- **[01 - Introduction](../01-introduction/README.md)** - Impara la gestione della memoria conversazionale
+- **[01 - Introduzione](../01-introduction/README.md)** - Impara la gestione della memoria della conversazione
- **[02 - Prompt Engineering](../02/prompt-engineering/README.md)** - Padroneggia i pattern di prompting GPT-5.2
-- **[03 - RAG](../03-rag/README.md)** - Costruisci sistemi di retrieval-augmented generation
-- **[04 - Tools](../04-tools/README.md)** - Implementa chiamate funzioni e catene di strumenti
-- **[05 - MCP](../05-mcp/README.md)** - Integra Model Context Protocol
+- **[03 - RAG](../03-rag/README.md)** - Costruisci sistemi di generazione arricchita da recupero
+- **[04 - Tools](../04-tools/README.md)** - Implementa chiamate di funzione e catene di strumenti
+- **[05 - MCP](../05-mcp/README.md)** - Integra il Model Context Protocol
-Il README di ogni modulo fornisce spiegazioni dettagliate dei concetti trattati qui.
+Il README di ogni modulo fornisce spiegazioni dettagliate dei concetti testati qui.
---
-**Navigazione:** [← Torna alla Home](../README.md)
+**Navigazione:** [← Torna al principale](../README.md)
---
**Disclaimer**:
-Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Pur impegnandoci per l’accuratezza, si prega di considerare che le traduzioni automatiche possono contenere errori o inesattezze. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda la traduzione professionale effettuata da un esperto umano. Non ci assumiamo alcuna responsabilità per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
+Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire la precisione, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un essere umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.
\ No newline at end of file
diff --git a/translations/ja/.co-op-translator.json b/translations/ja/.co-op-translator.json
index c51e6b623..4d3eb81f7 100644
--- a/translations/ja/.co-op-translator.json
+++ b/translations/ja/.co-op-translator.json
@@ -6,8 +6,8 @@
"language_code": "ja"
},
"01-introduction/README.md": {
- "original_hash": "9973acb599099b6ebad23063fcfc5739",
- "translation_date": "2026-03-02T22:53:02+00:00",
+ "original_hash": "693678a589b4c81f3441a13ae1dcaf47",
+ "translation_date": "2026-07-03T07:40:13+00:00",
"source_file": "01-introduction/README.md",
"language_code": "ja"
},
@@ -18,20 +18,20 @@
"language_code": "ja"
},
"02-prompt-engineering/README.md": {
- "original_hash": "7dc83a7a5b158f7e34adcc04042d370d",
- "translation_date": "2026-03-02T22:55:27+00:00",
+ "original_hash": "0f0dc6973a544dc44279aeecbb2a0ae6",
+ "translation_date": "2026-07-03T07:34:48+00:00",
"source_file": "02-prompt-engineering/README.md",
"language_code": "ja"
},
"03-rag/README.md": {
- "original_hash": "a965d4e6009b5bbce2033e9618b6a896",
- "translation_date": "2026-03-02T22:56:54+00:00",
+ "original_hash": "68de4eff7477b1a18165d07baefc89b8",
+ "translation_date": "2026-07-03T07:39:12+00:00",
"source_file": "03-rag/README.md",
"language_code": "ja"
},
"04-tools/README.md": {
- "original_hash": "2f3bcf70da63b0b57951b4928df23b4a",
- "translation_date": "2026-03-10T08:54:33+00:00",
+ "original_hash": "7bfea11bf2e891d2347bc92495f73550",
+ "translation_date": "2026-07-03T07:37:40+00:00",
"source_file": "04-tools/README.md",
"language_code": "ja"
},
@@ -54,8 +54,8 @@
"language_code": "ja"
},
"README.md": {
- "original_hash": "017a029136d87b82b4f9b9d821dad1f3",
- "translation_date": "2026-04-06T15:42:39+00:00",
+ "original_hash": "bdb3cb8ff72e607754f65b3e6bb7ba23",
+ "translation_date": "2026-07-03T07:33:15+00:00",
"source_file": "README.md",
"language_code": "ja"
},
@@ -72,14 +72,14 @@
"language_code": "ja"
},
"docs/GLOSSARY.md": {
- "original_hash": "f8fbe9fb0f3adc92eb3cd3835d140a4a",
- "translation_date": "2026-03-02T23:00:19+00:00",
+ "original_hash": "d7b72d50668bfc542725e8fa4053eb58",
+ "translation_date": "2026-07-03T07:35:31+00:00",
"source_file": "docs/GLOSSARY.md",
"language_code": "ja"
},
"docs/TESTING.md": {
- "original_hash": "608e564906adcffddb1033c48d76934e",
- "translation_date": "2026-03-02T23:01:11+00:00",
+ "original_hash": "e1b03b752e8570c3d21edf76c9384527",
+ "translation_date": "2026-07-03T07:36:12+00:00",
"source_file": "docs/TESTING.md",
"language_code": "ja"
}
diff --git a/translations/ja/00-quick-start/README.md b/translations/ja/00-quick-start/README.md
deleted file mode 100644
index b8aa89c57..000000000
--- a/translations/ja/00-quick-start/README.md
+++ /dev/null
@@ -1,387 +0,0 @@
-# モジュール 00: クイックスタート
-
-## 目次
-
-- [はじめに](../../../00-quick-start)
-- [LangChain4jとは?](../../../00-quick-start)
-- [LangChain4jの依存関係](../../../00-quick-start)
-- [前提条件](../../../00-quick-start)
-- [セットアップ](../../../00-quick-start)
- - [1. GitHubトークンを取得する](../../../00-quick-start)
- - [2. トークンを設定する](../../../00-quick-start)
-- [例を実行する](../../../00-quick-start)
- - [1. 基本的なチャット](../../../00-quick-start)
- - [2. プロンプトパターン](../../../00-quick-start)
- - [3. 関数呼び出し](../../../00-quick-start)
- - [4. ドキュメントQ&A(Easy RAG)](../../../00-quick-start)
- - [5. 責任あるAI](../../../00-quick-start)
-- [各例で何を学べるか](../../../00-quick-start)
-- [次のステップ](../../../00-quick-start)
-- [トラブルシューティング](../../../00-quick-start)
-
-## はじめに
-
-このクイックスタートは、LangChain4jをできるだけ早く始められるように設計されています。LangChain4jとGitHubモデルを使ったAIアプリケーション構築の基本をカバーします。次のモジュールではAzure OpenAIとGPT-5.2に切り替え、それぞれの概念をより深く掘り下げます。
-
-## LangChain4jとは?
-
-LangChain4jはJavaライブラリで、AI搭載アプリケーションの構築を簡素化します。HTTPクライアントやJSON解析を扱う代わりに、クリーンなJava APIを使って作業します。
-
-LangChainの「チェーン」は複数のコンポーネントを連結することを指します。プロンプトからモデル、モデルからパーサーへ、または複数のAI呼び出しを連結して、一つの出力が次の入力に繋がるようにします。このクイックスタートでは、より複雑なチェーンを探索する前に基本に焦点を当てます。
-
-
-
-*LangChain4jのチェーンコンポーネント – ブロックを組み合わせて強力なAIワークフローを構築*
-
-主に以下の三つのコアコンポーネントを使用します:
-
-**ChatModel** - AIモデルとの対話用インターフェース。`model.chat("prompt")`を呼び出して応答文字列を得ます。OpenAI互換のエンドポイントで動作する`OpenAiOfficialChatModel`を使用します。
-
-**AiServices** - 型安全なAIサービスインターフェースを作成します。メソッドを定義し、`@Tool`で注釈を付けると、LangChain4jが全体のオーケストレーションを処理します。AIは必要に応じて自動的にJavaメソッドを呼び出します。
-
-**MessageWindowChatMemory** - 会話履歴を維持します。これがないと各リクエストは独立していますが、これがあるとAIは前のメッセージを記憶し、複数のターンにわたるコンテキストを保ちます。
-
-
-
-*LangChain4jアーキテクチャ – コアコンポーネントが協働しAIアプリケーションに力を与える*
-
-## LangChain4jの依存関係
-
-このクイックスタートでは、[`pom.xml`](../../../00-quick-start/pom.xml)の3つのMaven依存を利用します。
-
-```xml
-
-
- dev.langchain4j
- langchain4j
-
-
-
-
- dev.langchain4j
- langchain4j-open-ai-official
-
-
-
-
- dev.langchain4j
- langchain4j-easy-rag
-
-```
-
-`langchain4j-open-ai-official`モジュールは、OpenAI互換APIに接続する`OpenAiOfficialChatModel`クラスを提供します。GitHub Modelsは同じAPI形式を使っているため、特別なアダプターは不要で、ベースURLを`https://models.github.ai/inference`に指定するだけです。
-
-`langchain4j-easy-rag`モジュールは自動的なドキュメント分割、埋め込み、および検索機能を提供し、手動設定なしでRAGアプリケーションを構築できます。
-
-## 前提条件
-
-**Dev Containerを使う場合?** JavaとMavenはすでにインストールされています。必要なのはGitHubパーソナルアクセストークンのみです。
-
-**ローカル開発:**
-- Java 21以上、Maven 3.9以上
-- GitHubパーソナルアクセストークン(下記手順参照)
-
-> **注意:** このモジュールはGitHub Modelsの`gpt-4.1-nano`を使用します。コード内のモデル名は変更しないでください。GitHubの利用可能モデルに合わせて設定されています。
-
-## セットアップ
-
-### 1. GitHubトークンを取得する
-
-1. [GitHub設定 → パーソナルアクセストークン](https://github.com/settings/personal-access-tokens)に移動
-2. 「新しいトークンを生成」をクリック
-3. 説明的な名前を設定(例:「LangChain4j Demo」)
-4. 有効期限を設定(7日推奨)
-5. 「アカウント権限」から「Models」を見つけて「読み取り専用」に設定
-6. 「トークンを生成」をクリック
-7. トークンをコピーし保存してください—再表示されません
-
-### 2. トークンを設定する
-
-**オプション1: VS Codeを使用(推奨)**
-
-VS Codeを使う場合、プロジェクトルートの`.env`ファイルにトークンを追加します:
-
-`.env`ファイルが存在しない場合は、`.env.example`をコピーして`.env`として保存するか、新規作成してください。
-
-**例 `.env` ファイル:**
-```bash
-# /workspaces/LangChain4j-for-Beginners/.env にて
-GITHUB_TOKEN=your_token_here
-```
-
-それから、エクスプローラーで任意のデモファイル(例: `BasicChatDemo.java`)を右クリックして**「Run Java」**を選択するか、実行とデバッグパネルの起動構成を使います。
-
-**オプション2: ターミナルを使用**
-
-環境変数としてトークンを設定します:
-
-**Bash:**
-```bash
-export GITHUB_TOKEN=your_token_here
-```
-
-**PowerShell:**
-```powershell
-$env:GITHUB_TOKEN=your_token_here
-```
-
-## 例を実行する
-
-**VS Codeを使う場合:** エクスプローラーで任意のデモファイルを右クリックし、**「Run Java」**を選択するか、実行とデバッグパネルの起動構成を使ってください(事前にトークンを`.env`ファイルに設定していることを確認してください)。
-
-**Mavenを使う場合:** コマンドラインから次のように実行できます:
-
-### 1. 基本的なチャット
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-### 2. プロンプトパターン
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.PromptEngineeringDemo
-```
-
-ゼロショット、数ショット、連鎖思考、ロールベースのプロンプトを示します。
-
-### 3. 関数呼び出し
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ToolIntegrationDemo
-```
-
-AIは必要に応じて自動的にあなたのJavaメソッドを呼び出します。
-
-### 4. ドキュメントQ&A(Easy RAG)
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.SimpleReaderDemo
-```
-
-自動埋め込みと検索を用いたEasy RAGでドキュメントへの質問が可能です。
-
-### 5. 責任あるAI
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.ResponsibleAIDemo
-```
-
-AIセーフティフィルターが有害な内容をブロックする様子を確認できます。
-
-## 各例で何を学べるか
-
-**基本的なチャット** - [BasicChatDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)
-
-ここから始めて、LangChain4jの最も基本的な部分を見てみましょう。`OpenAiOfficialChatModel`を作成し、`.chat()`でプロンプトを送り、応答を得る方法を示します。これはモデル初期化の基礎を示し、エンドポイントやAPIキーのカスタム設定方法を学べます。このパターンを理解すれば他のすべての学習に応用できます。
-
-```java
-OpenAiOfficialChatModel model = OpenAiOfficialChatModel.builder()
- .baseUrl("https://models.github.ai/inference")
- .apiKey(System.getenv("GITHUB_TOKEN"))
- .modelName("gpt-4.1-nano")
- .build();
-
-String response = model.chat("What is LangChain4j?");
-System.out.println(response);
-```
-
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chatで試す:** [`BasicChatDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/BasicChatDemo.java)を開いて質問してください:
-> - 「このコードでGitHub ModelsからAzure OpenAIに切り替えるにはどうすれば良いですか?」
-> - 「OpenAiOfficialChatModel.builder()で設定できる他のパラメータは何ですか?」
-> - 「応答完了を待たずにストリーミングレスポンスを追加するにはどうしますか?」
-
-**プロンプトエンジニアリング** - [PromptEngineeringDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)
-
-モデルとの会話方法が分かったら、次は何を話すかを探ります。このデモでは同じモデル設定で5つの異なるプロンプトパターンを示します。ゼロショットプロンプト(直接指示)、少数ショットプロンプト(例から学習)、連鎖思考プロンプト(推論過程の開示)、ロールベースプロンプト(文脈設定)などです。リクエストの枠組み次第で同じモデルが劇的に異なる結果を返すことが分かります。
-
-また、変数付きで再利用可能なプロンプトを作成する強力な方法としてプロンプトテンプレートも示します。
-下記例ではLangChain4jの`PromptTemplate`を使って変数を埋めています。AIは指定された目的地とアクティビティに基づいて答えます。
-
-```java
-PromptTemplate template = PromptTemplate.from(
- "What's the best time to visit {{destination}} for {{activity}}?"
-);
-
-Prompt prompt = template.apply(Map.of(
- "destination", "Paris",
- "activity", "sightseeing"
-));
-
-String response = model.chat(prompt.text());
-```
-
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chatで試す:** [`PromptEngineeringDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/PromptEngineeringDemo.java)を開いて質問してください:
-> - 「ゼロショットと少数ショットプロンプトの違いと、それぞれを使うべき場面は?」
-> - 「temperatureパラメータはモデルの応答にどう影響しますか?」
-> - 「本番環境でのプロンプトインジェクション攻撃を防ぐ技術は何ですか?」
-> - 「共通パターン用の再利用可能なPromptTemplateオブジェクトをどう作成しますか?」
-
-**ツール統合** - [ToolIntegrationDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)
-
-ここでLangChain4jの力を実感できます。`AiServices`を使い、Javaメソッドを呼び出せるAIアシスタントを作成します。メソッドに`@Tool("説明")`を付けるだけで、LangChain4jがすべて処理し、AIはユーザーの要望に応じて適切なツールを呼び出します。これは関数呼び出しの技術で、質問に答えるだけでなくアクションを実行するAI構築の重要技法です。
-
-```java
-@Tool("Performs addition of two numeric values")
-public double add(double a, double b) {
- return a + b;
-}
-
-MathAssistant assistant = AiServices.builder(MathAssistant.class)
- .chatModel(model)
- .tools(new Calculator())
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .build();
-String response = assistant.chat("What is 25 plus 17?");
-```
-
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chatで試す:** [`ToolIntegrationDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ToolIntegrationDemo.java)を開いて質問してください:
-> - 「@Tool 注釈はどう機能し、LangChain4jはそれを内部でどう扱いますか?」
-> - 「AIは複数のツールを順番に呼び出して複雑な問題を解決できますか?」
-> - 「ツールが例外を投げた時はどうすれば良いですか?」
-> - 「この計算機例の代わりに実際のAPIを統合するにはどうしますか?」
-
-**ドキュメントQ&A(Easy RAG)** - [SimpleReaderDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)
-
-ここではLangChain4jの「Easy RAG」アプローチを使ったRAG(検索強化生成)を紹介します。ドキュメントを読み込み、自動分割・埋め込みしてメモリ内ストアに保存し、検索時に関連チャンクをAIに供給します。AIは一般知識ではなくあなたのドキュメントに基づいて回答します。
-
-```java
-Document document = loadDocument(Paths.get("document.txt"));
-
-InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
-EmbeddingStoreIngestor.ingest(List.of(document), embeddingStore);
-
-Assistant assistant = AiServices.builder(Assistant.class)
- .chatModel(chatModel)
- .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
- .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
- .build();
-
-String answer = assistant.chat("What is the main topic?");
-```
-
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chatで試す:** [`SimpleReaderDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/SimpleReaderDemo.java)を開いて質問してください:
-> - 「RAGはモデルの訓練データを使うのと比べてAIの幻覚をどう防ぎますか?」
-> - 「この簡単な方法とカスタムRAGパイプラインの違いは何ですか?」
-> - 「複数ドキュメントや大規模ナレッジベースでのスケールアップはどうしますか?」
-
-**責任あるAI** - [ResponsibleAIDemo.java](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)
-
-多層防御でAIの安全性を構築します。このデモでは二段階の保護を示します:
-
-**パート1: LangChain4jの入力ガードレール** - LLMに到達する前に危険なプロンプトをブロックします。禁止キーワードやパターンをチェックする独自ガードレールを作成可能。コード内で動作するため、高速かつ無料です。
-
-```java
-class DangerousContentGuardrail implements InputGuardrail {
- @Override
- public InputGuardrailResult validate(UserMessage userMessage) {
- String text = userMessage.singleText().toLowerCase();
- if (text.contains("explosives")) {
- return fatal("Blocked: contains prohibited keyword");
- }
- return success();
- }
-}
-```
-
-**パート2: プロバイダーの安全フィルター** - GitHub Modelsに組み込まれたフィルターで、ガードレールをすり抜ける内容も検出します。重大な違反にはハードブロック(HTTP 400エラー)、軽度のものはAIが丁寧に拒否します。
-
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chatで試す:** [`ResponsibleAIDemo.java`](../../../00-quick-start/src/main/java/com/example/langchain4j/quickstart/ResponsibleAIDemo.java)を開いて質問してください:
-> - 「InputGuardrailとは何ですか?どうやって自分で作るのですか?」
-> - 「ハードブロックとソフト拒否の違いは何ですか?」
-> - 「なぜガードレールとプロバイダーフィルターの両方を使うのですか?」
-
-## 次のステップ
-
-**次のモジュール:** [01-introduction - LangChain4jを始める](../01-introduction/README.md)
-
----
-
-**ナビゲーション:** [← メインに戻る](../README.md) | [次へ: モジュール 01 - はじめに →](../01-introduction/README.md)
-
----
-
-## トラブルシューティング
-
-### 初回のMavenビルド
-
-**問題:** 初めての`mvn clean compile`や`mvn package`が非常に時間がかかる(10-15分)
-
-**原因:** Mavenが初回ビルド時にすべての依存関係(Spring Boot、LangChain4jライブラリ、Azure SDKなど)をダウンロードするため
-
-**解決策:** 正常な挙動です。次回以降は依存関係がローカルにキャッシュされるため高速になります。ダウンロード時間はネットワーク速度に依存します。
-
-### PowerShellでのMavenコマンド構文
-
-**問題:** Mavenコマンドが`Unknown lifecycle phase ".mainClass=..."`エラーで失敗する
-**原因**: PowerShell は `=` を変数代入演算子として解釈し、Maven のプロパティ構文を壊してしまう
-
-**解決策**: Maven コマンドの前に停止解析演算子 `--%` を使う:
-
-**PowerShell:**
-```powershell
-mvn --% compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-**Bash:**
-```bash
-mvn compile exec:java -Dexec.mainClass=com.example.langchain4j.quickstart.BasicChatDemo
-```
-
-`--%` 演算子は PowerShell に対して、残りのすべての引数を解釈せずに文字通り Maven に渡すよう指示する。
-
-### Windows PowerShell の絵文字表示
-
-**問題**: PowerShell で AI の応答が絵文字の代わりに文字化け(例:`????` や `â??`)として表示される
-
-**原因**: PowerShell の既定のエンコーディングは UTF-8 絵文字に対応していない
-
-**解決策**: Java アプリケーションの実行前に次のコマンドを実行する:
-```cmd
-chcp 65001
-```
-
-これによりターミナルで UTF-8 エンコーディングが強制される。あるいは、Unicode のサポートが優れている Windows Terminal を使用する方法もある。
-
-### API コールのデバッグ
-
-**問題**: 認証エラー、レート制限、または AI モデルからの予期しない応答
-
-**解決策**: サンプルコードには `.logRequests(true)` と `.logResponses(true)` が含まれており、API コールをコンソールに表示する。これにより認証エラーやレート制限、予期しない応答のトラブルシューティングがしやすくなる。本番環境ではログのノイズを減らすためにこれらのフラグを外すこと。
-
----
-
-
-**免責事項**:
-本書類はAI翻訳サービス[Co-op Translator](https://github.com/Azure/co-op-translator)を使用して翻訳されました。正確性の確保に努めておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。原文(原言語)の書類が正式かつ権威ある情報源とみなされます。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用により生じた誤解や誤訳について、当方は一切責任を負いません。
-
\ No newline at end of file
diff --git a/translations/ja/01-introduction/README.md b/translations/ja/01-introduction/README.md
index 5890171fa..5de5c51c8 100644
--- a/translations/ja/01-introduction/README.md
+++ b/translations/ja/01-introduction/README.md
@@ -1,87 +1,87 @@
-# Module 01: LangChain4j 入門
+# Module 01: LangChain4j のはじめ方
## 目次
-- [動画ウォークスルー](../../../01-introduction)
-- [学べること](../../../01-introduction)
-- [前提条件](../../../01-introduction)
-- [コア問題の理解](../../../01-introduction)
-- [トークンの理解](../../../01-introduction)
-- [メモリの仕組み](../../../01-introduction)
-- [LangChain4j の利用方法](../../../01-introduction)
-- [Azure OpenAI インフラの展開](../../../01-introduction)
-- [アプリケーションのローカル実行](../../../01-introduction)
-- [アプリケーションの使用方法](../../../01-introduction)
- - [ステートレスチャット(左パネル)](../../../01-introduction)
- - [ステートフルチャット(右パネル)](../../../01-introduction)
-- [次のステップ](../../../01-introduction)
+- [動画ウォークスルー](#動画ウォークスルー)
+- [学習内容](#学習内容)
+- [前提条件](#前提条件)
+- [コア問題の理解](#コア問題の理解)
+- [トークンの理解](#トークンの理解)
+- [メモリの仕組み](#メモリの仕組み)
+- [LangChain4j の使用方法](#langchain4j-の使用方法)
+- [Azure OpenAI インフラの展開](#azure-openai-インフラの展開)
+- [ローカルでアプリケーションを実行する](#ローカルでアプリケーションを実行する)
+- [アプリケーションの使用方法](#アプリケーションの使用方法)
+ - [ステートレスチャット(左パネル)](#ステートレスチャット(左パネル))
+ - [ステートフルチャット(右パネル)](#ステートフルチャット(右パネル))
+- [次のステップ](#次のステップ)
## 動画ウォークスルー
-このモジュールの始め方を説明するライブセッションをご覧ください:
+このモジュールの始め方を説明するライブセッションを見る:
-## 学べること
+## 学習内容
-クイックスタートでは、GitHub Models を使ってプロンプト送信、ツール呼び出し、RAG パイプラインの構築、ガードレールのテストを行いました。これらのデモは可能なことを示しました — 今回は Azure OpenAI と GPT-5.2 に切り替え、本格的なプロダクションアプリケーションの構築を始めます。このモジュールは、会話のコンテキストを記憶し状態を維持する会話型AIにフォーカスします — クイックスタートデモで使われていたが説明されていなかった概念です。
+これは LangChain4j と Azure OpenAI の出発点です。基本から始めて、本格的なアプリケーションを構築していきます。このモジュールは、会話の文脈を覚え状態を維持する対話型AIに焦点を当てており、後のすべてのモジュールで基盤となる概念です。
-本ガイドでは Azure OpenAI の GPT-5.2 を通して利用します。高度な推論機能により、異なるパターンの挙動がより明確に分かります。メモリを追加すると、その違いがはっきり見えます。これにより、各コンポーネントがアプリケーションに何をもたらすか理解しやすくなります。
+このガイド全体で Azure OpenAI の GPT-5.2 を使用します。高度な推論機能により、異なるパターンの挙動の違いが明確になるためです。メモリを追加すると、その違いがはっきり分かります。これにより、それぞれのコンポーネントがアプリケーションにもたらす効果を理解しやすくなります。
-以下の2つのパターンを示すアプリケーションを構築します:
+両方のパターンを示すアプリケーションを1つ作成します:
-**ステートレスチャット** - 各リクエストは独立しています。モデルは前回のメッセージを記憶しません。クイックスタートで使ったのはこのパターンです。
+ステートレスチャット - 各リクエストは独立しています。モデルは前のメッセージを覚えていません。最もシンプルな出発点です。
-**ステートフル会話** - 各リクエストに会話履歴を含みます。モデルは複数ターンの文脈を維持します。これがプロダクションアプリケーションで必要なパターンです。
+ステートフル会話 - 各リクエストに会話履歴が含まれます。モデルは複数ターンにわたって文脈を維持します。これは本番アプリケーションで必須です。
## 前提条件
-- Azure OpenAI へのアクセスがある Azure サブスクリプション
+- Azure OpenAI アクセスがある Azure サブスクリプション
- Java 21、Maven 3.9+
- Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
- Azure Developer CLI (azd) (https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd)
-> **注意:** Java、Maven、Azure CLI、Azure Developer CLI (azd) は提供された devcontainer に事前インストールされています。
+> **Note:** Java、Maven、Azure CLI、Azure Developer CLI (azd) は提供される devcontainer に事前にインストールされています。
-> **注意:** 本モジュールは Azure OpenAI の GPT-5.2 を使用します。`azd up` で自動的に展開されるため、コード内のモデル名は変更しないでください。
+> **Note:** 本モジュールは Azure OpenAI の GPT-5.2 を使用します。展開は `azd up` により自動設定されます。コード内のモデル名を変更しないでください。
## コア問題の理解
-言語モデルはステートレスです。各 API コールは独立しています。「私の名前はジョンです」と送っても、次に「私の名前は何?」と聞いても、モデルは直前に自己紹介を受けたことを知りません。すべてのリクエストをその会話が初めてであるかのように扱います。
+言語モデルはステートレス(状態を持たない)です。各API呼び出しは独立しています。「私の名前はジョンです」と送ってから「私の名前は何ですか?」と尋ねても、モデルは自己紹介した直後だとは認識しません。すべてのリクエストを、今までで初めての会話だと扱います。
-これは単純な Q&A には問題ありませんが、本物のアプリケーションには役に立ちません。カスタマーサービスボットはユーザーからの情報を記憶している必要があります。パーソナルアシスタントは文脈を必要とします。マルチターン会話はメモリを要求します。
+これは簡単なQ&Aには使えますが、本格的なアプリケーションには役に立ちません。カスタマーサポートのボットはあなたが何を言ったか覚える必要があります。パーソナルアシスタントは文脈を必要とします。複数ターンの対話にはメモリが不可欠です。
-以下の図は2つのアプローチを対比しています — 左は名前を忘れるステートレス呼び出し、右は ChatMemory が背後にあるステートフル呼び出しです。
+下図は両者の対比です — 左は名前を忘れるステートレス呼び出し、右はChatMemoryで名前を覚えているステートフル呼び出しです。
-*ステートレス(独立した呼び出し)とステートフル(コンテキスト認識)会話の違い*
+*ステートレス(独立呼び出し)とステートフル(文脈認識)会話の違い*
## トークンの理解
-会話に入る前に、トークンの理解が重要です — 言語モデルが処理するテキストの基本単位:
+会話に入る前に、トークンを理解することが重要です。トークンは言語モデルが処理するテキストの基本単位です:
-*テキストがどのようにトークンに分割されるかの例 — 「I love AI!」は4つの別々の処理単位になる*
+*テキストがトークンに分解される例 — 「I love AI!」は4つの別々の処理単位になる*
-トークンは AI モデルがテキストを計測・処理する単位です。単語、句読点、スペースもトークンになり得ます。モデルには同時に処理できるトークン数の制限があります(GPT-5.2 は最大400,000トークン、入力最大272,000、出力最大128,000)。トークンの理解は会話の長さやコスト管理に役立ちます。
+トークンはAIモデルがテキストを計測・処理する単位です。単語、句読点、スペースもトークンになり得ます。モデルには一度に処理できるトークン数の上限があり(GPT-5.2では40万トークン、入力最大27.2万トークン+出力最大12.8万トークン)、トークンを理解することは会話の長さとコスト管理に役立ちます。
## メモリの仕組み
-チャットメモリはステートレス問題を解決するため、会話履歴を保ちます。リクエストをモデルに送る前に、関連する過去のメッセージを前置きします。「私の名前は何?」と聞くと、実際にはこれまでの会話履歴全体を送り、モデルは「私の名前はジョンです」と言われていたことを参照できます。
+チャットメモリは、ステートレス問題を解決し会話履歴を保持します。リクエストをモデルに送る前に、フレームワークは関連する過去のメッセージを先頭に付け加えます。「私の名前は何ですか?」と聞くと、実際には全会話履歴が送られ、モデルは「私の名前はジョンです」と以前に言ったことを見られます。
-LangChain4j はこの処理を自動化するメモリの実装を提供します。保持するメッセージ数を指定すれば、フレームワークがコンテキストウィンドウを管理します。下図は MessageWindowChatMemory が最新メッセージのスライディングウィンドウを維持する様子です。
+LangChain4j は、この処理を自動化するメモリ実装を提供します。保持するメッセージ数を選択でき、フレームワークがコンテキストウィンドウを管理します。下図は MessageWindowChatMemory が最近のメッセージのスライディングウィンドウを維持する様子です。
-*MessageWindowChatMemory は最近のメッセージのスライディングウィンドウを維持し、古いものを自動削除*
+*MessageWindowChatMemory は最近のメッセージのスライドウィンドウを管理し、古いメッセージを自動的に破棄する*
-## LangChain4j の利用方法
+## LangChain4j の使用方法
-このモジュールはクイックスタートを拡張し、Spring Boot と会話メモリを統合します。構成は以下の通り:
+このモジュールは Spring Boot と会話メモリを統合しています。構成は以下の通りです:
-**依存関係** — 2つの LangChain4j ライブラリを追加:
+依存関係 — 2つの LangChain4j ライブラリを追加:
```xml
@@ -94,7 +94,7 @@ LangChain4j はこの処理を自動化するメモリの実装を提供しま
```
-**チャットモデル** — Azure OpenAI を Spring Bean として設定 ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
+チャットモデル — Azure OpenAI を Spring Bean として設定 ([LangChainConfig.java](../../../01-introduction/src/main/java/com/example/langchain4j/config/LangChainConfig.java)):
```java
@Bean
@@ -109,9 +109,9 @@ public OpenAiOfficialChatModel openAiOfficialChatModel() {
}
```
-ビルダーは `azd up` で設定された環境変数から認証情報を読み込みます。`baseUrl` を Azure エンドポイントに設定することで、OpenAI クライアントは Azure OpenAI と連携します。
+ビルダーは `azd up` によって設定された環境変数から認証情報を読み取ります。`baseUrl` に Azure エンドポイントを設定することで、OpenAI クライアントが Azure OpenAI に対応します。
-**会話メモリ** — MessageWindowChatMemory でチャット履歴をトラック ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
+会話メモリ — MessageWindowChatMemory でチャット履歴を追跡 ([ConversationService.java](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java)):
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -124,39 +124,39 @@ AiMessage aiMessage = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage);
```
-`withMaxMessages(10)` で直近10メッセージを保持します。ユーザーとAIのメッセージは型付きラッパーで追加:`UserMessage.from(text)` と `AiMessage.from(text)`。履歴は `memory.messages()` で取得しモデルへ送信。サービスは会話IDごとに別々のメモリインスタンスを保持し、複数ユーザーの同時チャットに対応します。
+`withMaxMessages(10)` で直近10メッセージを保持するメモリを作成。ユーザー・AIメッセージは型付きラッパーで追加:`UserMessage.from(text)` と `AiMessage.from(text)`。`memory.messages()` で履歴を取得しモデルに渡します。サービスは会話IDごとにメモリを分けて保持するため、複数ユーザーの同時会話が可能です。
-> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chat で試すには:** [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) を開いて、以下を質問:
-> - "MessageWindowChatMemory はウィンドウがいっぱいの時どのメッセージをドロップするかどう決めているの?"
-> - "インメモリの代わりにデータベースを使ったカスタムメモリストレージは実装可能?"
-> - "古い会話履歴を圧縮するために要約機能を追加するには?"
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chat も活用してみましょう:** [`ConversationService.java`](../../../01-introduction/src/main/java/com/example/langchain4j/service/ConversationService.java) を開き、以下を質問:
+> - 「MessageWindowChatMemory はウィンドウが満杯の時にどのメッセージを破棄するかどう決めているの?」
+> - 「インメモリではなくデータベースを使ったカスタムメモリストレージを実装できる?」
+> - 「古い会話履歴を圧縮するために要約を追加するにはどうする?」
-ステートレスチャットエンドポイントはメモリを完全にスキップし、クイックスタートと同じく `chatModel.chat(prompt)` のみ。ステートフルエンドポイントはメモリにメッセージを追加、履歴を取得し、そのコンテキストを含めてリクエストします。同じモデル設定ですが異なるパターンです。
+ステートレスチャットのエンドポイントはメモリを使わず、`chatModel.chat(prompt)` のみでクイックスタートと同様です。ステートフルはメモリにメッセージを追加し履歴を取得、毎回その文脈をリクエストに含めます。同じモデル設定で異なるパターンを体験できます。
## Azure OpenAI インフラの展開
**Bash:**
```bash
cd 01-introduction
-azd up # サブスクリプションと場所を選択します(eastus2 推奨)
+azd up # サブスクリプションと場所を選択します(eastus2推奨)
```
**PowerShell:**
```powershell
cd 01-introduction
-azd up # サブスクリプションと場所を選択してください(eastus2がおすすめ)
+azd up # サブスクリプションと場所を選択してください(eastus2推奨)
```
-> **注意:** タイムアウトエラー (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`) が出た場合は、単純に `azd up` を再実行してください。Azure リソースはまだプロビジョニング中の可能性があり、再試行でリソースが確定状態になると展開が完了します。
+> **Note:** タイムアウトエラー (`RequestConflict: Cannot modify resource ... provisioning state is not terminal`) が起きても、`azd up` を再度実行してください。Azure リソースはまだ展開中かもしれず、再試行でリソースが最終状態に到達すれば展開が完了します。
-これで以下が行われます:
-1. GPT-5.2 と text-embedding-3-small モデルを備えた Azure OpenAI リソースを展開
-2. プロジェクトルートに `.env` ファイルを自動生成(認証情報入り)
-3. 必要な環境変数をすべて設定
+これにより:
+1. GPT-5.2 と text-embedding-3-small モデルを持つ Azure OpenAI リソースを展開
+2. プロジェクトルートに資格情報入りの `.env` ファイルが自動生成
+3. 必要な環境変数がすべて設定される
-**展開に問題がある場合**は [Infrastructure README](infra/README.md) を参照してください。サブドメイン名の衝突、Azure ポータルでの手動デプロイ手順、モデル構成の案内を含みます。
+**展開に問題がありますか?** サブドメイン名の競合、Azure ポータル手動展開手順、モデル構成ガイダンスなど詳しいトラブルシューティングは [Infrastructure README](infra/README.md) を参照してください。
-**展開成功の確認:**
+**展開が成功したか確認:**
**Bash:**
```bash
@@ -165,10 +165,10 @@ cat ../.env # AZURE_OPENAI_ENDPOINT、API_KEYなどを表示する必要があ
**PowerShell:**
```powershell
-Get-Content ..\.env # AZURE_OPENAI_ENDPOINT、API_KEYなどを表示する必要があります。
+Get-Content ..\.env # AZURE_OPENAI_ENDPOINT、API_KEY などを表示する必要があります。
```
-> **注意:** `azd up` コマンドは自動で `.env` ファイルを生成します。後で更新が必要な場合は `.env` を直接編集するか、以下のコマンドで再生成可能です:
+> **Note:** `azd up` コマンドは `.env` ファイルを自動生成します。後から更新する必要があれば、手動で編集するか以下のコマンドで再生成できます:
>
> **Bash:**
> ```bash
@@ -182,12 +182,11 @@ Get-Content ..\.env # AZURE_OPENAI_ENDPOINT、API_KEYなどを表示する必
> .\.azd-env.ps1
> ```
+## ローカルでアプリケーションを実行する
-## アプリケーションのローカル実行
+**展開の検証:**
-**展開の確認:**
-
-Azure 認証情報を含む `.env` ファイルがルートディレクトリに存在していることを確認し、モジュールディレクトリ (`01-introduction/`) で以下を実行:
+Azure資格情報が入った `.env` ファイルがルートにあることを確認し、モジュールディレクトリ(`01-introduction/`)から以下を実行:
**Bash:**
```bash
@@ -199,27 +198,27 @@ cat ../.env # AZURE_OPENAI_ENDPOINT、API_KEY、DEPLOYMENTを表示する必要
Get-Content ..\.env # AZURE_OPENAI_ENDPOINT、API_KEY、DEPLOYMENT を表示する必要があります
```
-**アプリケーションの起動:**
+**アプリケーションを起動:**
-**オプション1: Spring Boot Dashboard の利用(VS Code ユーザーに推奨)**
+**オプション1:Spring Boot ダッシュボードを使用(VS Codeユーザー推奨)**
-devcontainer には Spring Boot Dashboard 拡張機能が含まれており、Spring Boot アプリを視覚的に管理できます。VS Code 左側のアクティビティバーにある Spring Boot アイコンでアクセス可能です。
+開発コンテナには Spring Boot ダッシュボード拡張機能が含まれており、VS Code 左のアクティビティバーの Spring Boot アイコンから全Spring Bootアプリケーションを視覚的に管理できます。
-Spring Boot Dashboard から:
-- ワークスペース内のすべての Spring Boot アプリを確認
-- ワンクリックで起動/停止
-- リアルタイムでログ表示
-- アプリの状態監視
+ダッシュボードからは:
+- ワークスペース内のすべてのSpring Bootアプリケーションを一覧表示
+- ワンクリックでアプリの起動/停止
+- リアルタイムでアプリケーションログを閲覧
+- アプリの状態を監視
-"introduction" の横の再生ボタンをクリックするだけでこのモジュールを起動、またはすべてのモジュールを一括起動できます。
+「introduction」の横の再生ボタンを押せばこのモジュールが起動、またはすべてのモジュールを同時に起動できます。
-*VS Code の Spring Boot Dashboard — すべてのモジュールをまとめて起動、停止、監視可能*
+*VS Code の Spring Boot ダッシュボード — 一箇所から全モジュールを起動・停止・監視*
-**オプション2: シェルスクリプト利用**
+**オプション2:シェルスクリプトを使う方法**
-すべてのウェブアプリ(モジュール01-04)を起動:
+すべてのウェブアプリ(モジュール01-04)を起動:
**Bash:**
```bash
@@ -233,7 +232,7 @@ cd .. # ルートディレクトリから
.\start-all.ps1
```
-このモジュールだけ起動:
+または、このモジュールだけを起動:
**Bash:**
```bash
@@ -247,9 +246,9 @@ cd 01-introduction
.\start.ps1
```
-両スクリプトはルートの `.env` ファイルから環境変数を自動読み込みし、JAR がなければビルドも行います。
+いずれのスクリプトもルートの `.env` ファイルから環境変数を自動で読み込み、JARが無ければビルドします。
-> **注意:** 起動前にすべてのモジュールを手動ビルドしたい場合:
+> **Note:** もし、起動前にすべてのモジュールを手動でビルドしたい場合:
>
> **Bash:**
> ```bash
@@ -281,44 +280,43 @@ cd .. && ./stop-all.sh # すべてのモジュール
cd ..; .\stop-all.ps1 # すべてのモジュール
```
-
## アプリケーションの使用方法
-アプリケーションは2つのチャット実装を並べて Web インターフェイスで提供します。
+このアプリには2種類のチャット実装が並んで表示されるウェブインターフェイスがあります。
-*シンプルチャット(ステートレス)と会話チャット(ステートフル)の両オプションを表示するダッシュボード*
+*シンプルチャット(ステートレス)と会話チャット(ステートフル)を両方表示するダッシュボード*
### ステートレスチャット(左パネル)
-まずはこちらを試してください。「私の名前はジョンです」と伝え、直後に「私の名前は何ですか?」と聞いてみましょう。モデルは覚えていません。各メッセージが独立しているためです。これは基本的な言語モデル統合のコア問題 — 会話の文脈がないことを示します。
+まずはこちらを試してください。「私の名前はジョンです」と言い、すぐに「私の名前は何ですか?」と尋ねると、モデルは記憶していません。メッセージは独立しているためです。これは基本的な言語モデル統合におけるコア問題を示しています — 会話文脈が無いこと。
-*AIは前のメッセージからあなたの名前を覚えていません*
+*AIは前のメッセージから名前を覚えません*
### ステートフルチャット(右パネル)
-同じ流れをこちらでも試します。「私の名前はジョンです」と伝え、「私の名前は何ですか?」と聞くと、今回は覚えています。違いは MessageWindowChatMemory です — 会話履歴を維持し、それをリクエストに含めます。これが本番の会話 AI の動作方法です。
+同じ順番をこちらで試してください。「私の名前はジョンです」と言い、そのあと「私の名前は何ですか?」と言うと、今回は覚えています。違いは MessageWindowChatMemory で、会話履歴を保持し、毎回のリクエストに含めています。これが本番用の会話型AIの仕組みです。
-*AIは会話の初めにあなたの名前を覚えています*
+*AIは以前の会話から名前を覚えています*
-両パネルとも同じ GPT-5.2 モデルを使います。違うのはメモリだけです。これによりメモリがアプリに何をもたらし、実利用でなぜ不可欠かが明瞭になります。
+両パネルは同じ GPT-5.2 モデルを使用し、違いはメモリだけです。これによりメモリがアプリケーションに何をもたらすかが明確になり、実際のユースケースで不可欠な理由が理解できます。
## 次のステップ
-**次のモジュール:** [02-prompt-engineering - GPT-5.2 によるプロンプトエンジニアリング](../02-prompt-engineering/README.md)
+**次のモジュール:** [02-prompt-engineering - GPT-5.2によるプロンプトエンジニアリング](../02-prompt-engineering/README.md)
---
-**ナビゲーション:** [← 前:Module 00 - クイックスタート](../00-quick-start/README.md) | [メインに戻る](../README.md) | [次:Module 02 - プロンプトエンジニアリング →](../02-prompt-engineering/README.md)
+**ナビゲーション:** [← メインへ戻る](../README.md) | [次へ: Module 02 - Prompt Engineering →](../02-prompt-engineering/README.md)
---
-**免責事項**:
-本書類はAI翻訳サービス[Co-op Translator](https://github.com/Azure/co-op-translator)を使用して翻訳されました。正確性を期していますが、自動翻訳には誤りや不正確な箇所が含まれる場合があります。原文の母国語版が正式な情報源とみなされます。重要な情報については、専門の人間による翻訳をお勧めします。本翻訳の利用により生じた誤解や誤訳について、当方は一切の責任を負いかねます。
+**免責事項**:
+本書類は AI 翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。原文の原語版が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用により生じたいかなる誤解や解釈違いについても、当方は責任を負いかねます。
\ No newline at end of file
diff --git a/translations/ja/02-prompt-engineering/README.md b/translations/ja/02-prompt-engineering/README.md
index a68344c06..393cc025c 100644
--- a/translations/ja/02-prompt-engineering/README.md
+++ b/translations/ja/02-prompt-engineering/README.md
@@ -1,101 +1,101 @@
-# モジュール 02: GPT-5.2 を使ったプロンプトエンジニアリング
+# Module 02: GPT-5.2によるプロンプトエンジニアリング
## 目次
-- [ビデオウォークスルー](../../../02-prompt-engineering)
-- [学習内容](../../../02-prompt-engineering)
-- [前提条件](../../../02-prompt-engineering)
-- [プロンプトエンジニアリングの理解](../../../02-prompt-engineering)
-- [プロンプトエンジニアリングの基本](../../../02-prompt-engineering)
- - [ゼロショットプロンプティング](../../../02-prompt-engineering)
- - [フューショットプロンプティング](../../../02-prompt-engineering)
- - [チェーン・オブ・ソート](../../../02-prompt-engineering)
- - [ロールベースプロンプティング](../../../02-prompt-engineering)
- - [プロンプトテンプレート](../../../02-prompt-engineering)
-- [高度なパターン](../../../02-prompt-engineering)
-- [アプリケーションの実行](../../../02-prompt-engineering)
-- [アプリケーションのスクリーンショット](../../../02-prompt-engineering)
-- [パターンの探求](../../../02-prompt-engineering)
- - [低い意欲 vs 高い意欲](../../../02-prompt-engineering)
- - [タスク実行(ツールのプレアンブル)](../../../02-prompt-engineering)
- - [自己反省コード](../../../02-prompt-engineering)
- - [構造化分析](../../../02-prompt-engineering)
- - [マルチターンチャット](../../../02-prompt-engineering)
- - [ステップバイステップ推論](../../../02-prompt-engineering)
- - [制約付き出力](../../../02-prompt-engineering)
-- [本当に学んでいること](../../../02-prompt-engineering)
-- [次のステップ](../../../02-prompt-engineering)
-
-## ビデオウォークスルー
-
-このモジュールの始め方を説明したライブセッションをご覧ください:
-
-
+- [動画ウォークスルー](#動画ウォークスルー)
+- [学習内容](#学習内容)
+- [前提条件](#前提条件)
+- [プロンプトエンジニアリングの理解](#プロンプトエンジニアリングの理解)
+- [プロンプトエンジニアリングの基本](#プロンプトエンジニアリングの基本)
+ - [ゼロショットプロンプト](#ゼロショットプロンプト)
+ - [フューショットプロンプト](#フューショットプロンプト)
+ - [チェーン・オブ・ソート](#チェーン・オブ・ソート)
+ - [ロールベースプロンプト](#ロールベースプロンプト)
+ - [プロンプトテンプレート](#プロンプトテンプレート)
+- [高度なパターン](#高度なパターン)
+- [アプリケーションの実行](#アプリケーションを実行する)
+- [アプリケーションのスクリーンショット](#アプリケーションのスクリーンショット)
+- [パターンの探求](#パターンを探る)
+ - [低い熱意 vs 高い熱意](#low-vs-high-eagerness)
+ - [タスク実行(ツールプレアンブル)](#タスク実行(ツールのプレアンブル))
+ - [自己反省コード](#自己反省コード)
+ - [構造化分析](#構造化分析)
+ - [マルチターンチャット](#マルチターンチャット)
+ - [ステップバイステップ推論](#ステップバイステップ推論)
+ - [制約付き出力](#制約付き出力)
+- [本当に学んでいること](#本当に学んでいること)
+- [次のステップ](#次のステップ)
+
+## 動画ウォークスルー
+
+このモジュールの始め方を解説するライブセッションをご覧ください:
+
+
## 学習内容
-以下の図は、このモジュールで開発する主要なトピックとスキルの概要を示しています — プロンプトの洗練手法から、あなたが辿るステップバイステップのワークフローまで。
+以下の図は、このモジュールで習得する主要なトピックとスキルの概要を示しています — プロンプト精緻化技術から、順を追ったワークフローまで。
-
+
-前のモジュールでは、GitHubモデルとの基本的なLangChain4jのやり取りを探り、Azure OpenAIによる会話型AIがメモリでどのように動作するかを見ました。今回はAzure OpenAIのGPT-5.2を使い、質問の仕方—つまりプロンプトそのものに焦点を当てます。プロンプトの構造は、得られる応答の質に劇的な影響を与えます。基本的なプロンプト技術の復習から始め、次にGPT-5.2の能力を最大限に活かす8つの高度なパターンに進みます。
+前のモジュールでは、Azure OpenAIと会話型AIのメモリ機能について見ました。今回は質問の投げ方、つまりAzure OpenAIのGPT-5.2を使った「プロンプトそのもの」に焦点を当てます。プロンプトの構造が回答の質に大きく影響します。基本的なプロンプティング技術の復習から始め、次にGPT-5.2の能力をフル活用した8つの高度なパターンへ進みます。
-GPT-5.2は推論制御を導入しているので、モデルに回答前にどれだけ考えるかを指示できます。これにより異なるプロンプト戦略がより明確になり、どのアプローチをいつ使うべきか理解が深まります。また、GPT-5.2はGitHubモデルよりAzureのレート制限が緩いため、その恩恵も受けられます。
+GPT-5.2を使う理由は、推論制御機能が導入されたためです — モデルにどれだけ考えさせるか指示できます。これにより異なるプロンプト戦略が明確になり、どの方法を使うべきか理解しやすくなります。
## 前提条件
-- モジュール 01 を完了していること(Azure OpenAIリソースがデプロイされている)
-- ルートディレクトリに Azure 資格情報が入った `.env` ファイルがあること(モジュール 01 で `azd up` により作成されたもの)
+- モジュール01を完了していること(Azure OpenAIリソースが展開済み)
+- ルートディレクトリにAzure認証情報を含む`.env`ファイルがあること(モジュール01の`azd up`で作成)
-> **注意:** モジュール 01 を完了していない場合は、まずそこでのデプロイ手順に従ってください。
+> **注意:** モジュール01を完了していない場合は、そちらの展開手順を最初に行ってください。
## プロンプトエンジニアリングの理解
-プロンプトエンジニアリングの本質は、あいまいな指示と正確な指示の違いにあります。以下の比較がそれを示しています。
+本質的に、プロンプトエンジニアリングは「曖昧な指示」と「正確な指示」の違いです。以下の比較図がそれを示しています。
-
+
-プロンプトエンジニアリングは、必要な結果を一貫して引き出す入力テキストを設計することです。単に質問を投げるだけでなく、モデルに欲しい内容とその提供方法を正確に理解させるためのリクエスト構造を作ることです。
+プロンプトエンジニアリングとは、一貫して必要な結果を得るための入力テキストを設計することです。単に質問するだけではなく、モデルが何をどう届けるべきか正確に理解させるためのリクエストの構造化です。
-言い換えれば同僚に指示を出すようなものです。「バグを修正して」はあいまいです。「UserService.javaの45行目でヌルポインター例外が起きているのでヌルチェックを追加して修正して」は具体的です。言語モデルも同様に、具体性と構造が重要です。
+これは同僚に指示を出すようなものです。「バグを直して」のような曖昧な指示より、「UserService.javaの45行目のNullPointerExceptionを防ぐためにnullチェックを追加して」のように具体的です。言語モデルも同様で、具体性と構造が重要です。
-下図はLangChain4jがどのようにこの概念にフィットするかを示しています — あなたのプロンプトパターンを `SystemMessage` と `UserMessage` という構築ブロックを通じてモデルにつなげています。
+下図はLangChain4jがこの仕組みにどう関わるかを示しています — プロンプトパターンをSystemMessageやUserMessageの構成要素を通じてモデルに接続します。
-
+
-LangChain4jはインフラを提供します — モデルの接続、メモリ、メッセージタイプ — 一方でプロンプトパターンはそのインフラを通す、よく構造化されたテキストです。主要な構成要素は `SystemMessage`(AIの挙動・役割を設定)と `UserMessage`(実際のリクエストを運ぶもの)です。
+LangChain4jはインフラを提供します — モデル接続、メモリ、メッセージ種別 — プロンプトパターンはそのインフラを通じて送る注意深く構造化されたテキストです。重要な構成要素は`SystemMessage`(AIの振る舞い・役割を設定)と`UserMessage`(実際のリクエストを伝達)です。
## プロンプトエンジニアリングの基本
-以下に示す5つのコア技術が、有効なプロンプトエンジニアリングの基礎をなします。各技術は言語モデルとのコミュニケーションの異なる側面に応えます。
+以下の5つのコアテクニックが効果的なプロンプトエンジニアリングの基盤を形成します。各技術は言語モデルとのコミュニケーションの異なる側面に対応しています。
-
+
-このモジュールの高度なパターンに入る前に、5つの基礎的なプロンプト技術を復習しましょう。これらは全てのプロンプトエンジニアが知っておくべきビルディングブロックです。もし既に[クイックスタートモジュール](../00-quick-start/README.md#2-prompt-patterns)を経験していれば、これらは実践で見たことがあるでしょう — ここではその概念的な枠組みを示します。
+このモジュールの高度なパターンに入る前に、5つの基本的なプロンプティング技術を振り返りましょう。これはすべてのプロンプトエンジニアが知るべき基礎です。
-### ゼロショットプロンプティング
+### ゼロショットプロンプト
-もっとも単純な方法:例を一切示さずにモデルに直接指示を与えます。モデルはトレーニングだけを頼りにタスクを理解し実行します。予想される挙動が明白な単純な依頼に適しています。
+最もシンプルなアプローチ:例なしでモデルに直接指示を与えます。モデルはトレーニングのみを頼りにタスクを理解し実行します。この方法は期待される動作が明白な単純なリクエストに適しています。
-
+
-*例なしの直接指示 — モデルは指示からタスクを推測する*
+*例なしの直接指示 — モデルは指示だけからタスクを推測*
```java
String prompt = "Classify this sentiment: 'I absolutely loved the movie!'";
String response = model.chat(prompt);
-// 返信:「ポジティブ」
+// 反応:「ポジティブ」
```
-**利用時:** 単純な分類、直接的な質問、翻訳、あるいは追加の指導が不要なタスク。
+**使用タイミング:** 単純な分類、直接の質問、翻訳、または追加指示なしでモデルが処理可能なタスク。
-### フューショットプロンプティング
+### フューショットプロンプト
-モデルに従って欲しいパターンの例を示します。モデルは例から期待される入出力フォーマットを学び、新しい入力にも適用します。これにより形式や挙動が明確でないタスクの一貫性が大幅に向上します。
+モデルに従ってほしいパターンを示す例を提供します。モデルは例から期待される入出力形式を学び、新しい入力に適用します。望ましいフォーマットや振る舞いが明白でないタスクにおける一貫性が大幅に向上します。
-
+
-*例から学ぶ — モデルはパターンを特定し新しい入力に適用*
+*例から学習 — モデルはパターンを認識し新しい入力に適用*
```java
String prompt = """
@@ -112,15 +112,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**利用時:** カスタム分類、一貫したフォーマット、ドメイン固有のタスク、またはゼロショットの結果が不安定な場合。
+**使用タイミング:** カスタム分類、一貫したフォーマット、ドメイン特化タスク、またはゼロショットの結果が不安定な場合。
### チェーン・オブ・ソート
-モデルに推論を段階的に示すように頼みます。答えに飛びつくのではなく、問題を分解し各部分を明示的に考えるので、数学、論理、多段階の推論タスクの精度が向上します。
+モデルに推論プロセスを段階的に示させます。直接答えを出すのではなく、問題を分解し明示的に各部分を検証します。数学、論理、多段階推論における正確性を向上します。
-
+
-*ステップごとの推論 — 複雑な問題を明確な論理ステップへ分解*
+*段階的推論 — 複雑な問題を論理的な段階に細分化*
```java
String prompt = """
@@ -130,18 +130,18 @@ String prompt = """
Let's solve this step-by-step:
""";
String response = model.chat(prompt);
-// モデルは示しています:15 - 8 = 7、次に7 + 12 = 19個のリンゴ
+// このモデルは示しています:15 - 8 = 7、次に7 + 12 = 19個のりんご
```
-**利用時:** 数学の問題、論理パズル、デバッグ、または推論過程の提示が精度と信頼性を高めるタスク。
+**使用タイミング:** 数学問題、論理パズル、デバッグ、または推論プロセスを示すことで精度と信頼性が向上するタスク。
-### ロールベースプロンプティング
+### ロールベースプロンプト
-AIに質問する前にペルソナや役割を設定します。これにより回答のトーン、深さ、重点が形作られます。「ソフトウェアアーキテクト」と「ジュニア開発者」や「セキュリティ監査官」では異なる助言になります。
+質問の前にAIに役割やペルソナを設定します。これが応答のトーンや深さ、焦点を形成します。「ソフトウェアアーキテクト」と「ジュニア開発者」や「セキュリティ監査人」では異なるアドバイスが得られます。
-
+
-*コンテキストとペルソナの設定 — 同じ質問でも役割に応じて別の回答になる*
+*文脈とペルソナの設定 — 同じ質問でも割り当てた役割によって応答が変わる*
```java
String prompt = """
@@ -157,15 +157,15 @@ String prompt = """
String response = model.chat(prompt);
```
-**利用時:** コードレビュー、チュータリング、ドメイン固有の分析、または特定の専門性や視点に合わせた応答が必要な場合。
+**使用タイミング:** コードレビュー、指導、ドメイン特化分析、または特定の専門レベルや視点に合わせた応答が必要な場合。
### プロンプトテンプレート
-変数プレースホルダーを使った再利用可能なプロンプトを作成します。毎回新しいプロンプトを書くのではなく、一度テンプレートを定義し異なる値を埋めます。LangChain4jの `PromptTemplate` クラスは `{{variable}}` 構文でこれを簡単にします。
+変数プレースホルダーを使った再利用可能なプロンプトを作成します。毎回新しいプロンプトを作る代わりに、一度テンプレート定義し異なる値を埋め込みます。LangChain4jの`PromptTemplate`クラスは`{{variable}}`構文でこれを簡単にします。
-
+
-*変数プレースホルダーを使った再利用可能なプロンプト — 一つのテンプレートで多用途*
+*変数プレースホルダー付き再利用プロンプト — 1つのテンプレートで多数の使い方*
```java
PromptTemplate template = PromptTemplate.from(
@@ -180,27 +180,27 @@ Prompt prompt = template.apply(Map.of(
String response = model.chat(prompt.text());
```
-**利用時:** 入力が変わる繰り返しの問い合わせ、バッチ処理、再利用可能なAIワークフロー構築、構造は同じでデータだけ変わるシナリオ。
+**使用タイミング:** 異なる入力を使う繰り返しクエリ、バッチ処理、再利用可能なAIワークフロー構築、またはプロンプト構造は変わらずデータのみ変わる場合。
---
-これら5つの基本でほとんどのプロンプトタスクに対応可能な堅固なツールキットが得られます。このモジュールの残りは、GPT-5.2の推論制御、自己評価、構造化出力能力を活用する**8つの高度なパターン**に基づいて構築されます。
+これら5つの基本技術はほとんどのプロンプト作業に対して堅実なツールキットを提供します。このモジュールの残りは、GPT-5.2の推論制御、自己評価、構造化出力機能を活用した8つの高度なパターンに発展します。
## 高度なパターン
-基本が理解できたところで、このモジュール独自の8つの高度なパターンに進みましょう。すべての問題が同じアプローチを必要としません。いくつかの質問は即座の答えを必要とし、他はじっくり考えることが必要です。推論を明示的に示すものもあれば結果だけを求めるものもあります。以下の各パターンは異なるシナリオに最適化されており、GPT-5.2の推論制御により違いがよりはっきりします。
+基本技術を押さえたら、このモジュール特有の8つの高度なパターンに進みます。すべての問題に同じアプローチは不要です。質問によってはすばやい回答が必要なものから、深い考察が求められるものまであります。見える推論が必要な場合もあれば、結果だけが重要な場合も。以下の各パターンは異なるシナリオに最適化されており、GPT-5.2の推論制御によって違いがさらに際立ちます。
-
+
-*8つのプロンプトエンジニアリングパターンとその使用例の概要*
+八つのプロンプトエンジニアリングパターンとそのユースケースの概要
-GPT-5.2はこれらパターンにもう一つの次元を加えます:*推論制御*。以下のスライダーはモデルの思考量を調整できる様子を示します — 速く直接的な答えから、深く徹底的な分析まで。
+GPT-5.2はこれらのパターンにもう一つの次元を追加します:推論制御。下のスライダーはモデルの思考の深さを調整する様子を示しています — 素早い直接回答から深く徹底した分析まで。
-
+
-*GPT-5.2の推論制御により、モデルがどれだけ考えるかを指定可能 — 高速な直答から深い探求まで*
+*GPT-5.2の推論制御により、モデルがどれだけ考えるか指定可能 — 速く直接的な回答から深い探求まで*
-**低い意欲(速く・集中)** - 単純な質問に速く直接的な答えが欲しい場合。モデルは最少の推論(最大2ステップ)で済ませます。計算やルックアップ、単純質問に最適。
+**低い熱意(素早く・集中)** - 速く直接回答が欲しい単純な質問向け。モデルは最小限の推論のみ — 最大2ステップ。計算、検索、または簡単な質問に最適。
```java
String prompt = """
@@ -219,12 +219,12 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> 💡 **GitHub Copilotで探る:** [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java)を開き、以下を聞いてみましょう:
-> - 「低い意欲と高い意欲のプロンプトパターンの違いは何ですか?」
-> - 「プロンプト内のXMLタグはAIの応答構造にどう役立っていますか?」
-> - 「自己反省パターンと直接指示はいつ使い分けるべき?」
+> 💡 **GitHub Copilotで探る:** [`Gpt5PromptService.java`](../../../02-prompt-engineering/src/main/java/com/example/langchain4j/prompts/service/Gpt5PromptService.java) を開き、以下の質問をしてみましょう:
+> - 「低い熱意と高い熱意のプロンプトパターンの違いは何ですか?」
+> - 「プロンプト内のXMLタグはAIの応答構造化にどう役立っていますか?」
+> - 「自己反省パターンと直接指示はいつ使い分けるべきですか?」
-**高い意欲(深く・徹底)** - 複雑な問題に包括的な分析が必要な場合。モデルは詳細な推論を示し徹底的に探ります。システム設計やアーキテクチャ決定、複雑な調査に適用。
+**高い熱意(深く・徹底的)** - より複雑な問題で包括的な分析が必要なとき。モデルは徹底的に探求し詳細な推論を示します。システム設計、アーキテクチャの意思決定、複雑な調査に適します。
```java
String prompt = """
@@ -238,7 +238,7 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-**タスク実行(ステップごとの進行)** - 複数段階のワークフローの場合。モデルは先に計画を示し、処理中に各ステップをナレーションし、最後に要約を出します。移行作業、実装、マルチステップ処理に活用。
+**タスク実行(ステップバイステップ進行)** - 多段階ワークフローで使用。モデルは最初に計画を示し、作業の各ステップを説明し、最後に要約します。移行作業や実装など複雑なプロセスに最適。
```java
String prompt = """
@@ -276,20 +276,20 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-チェーン・オブ・ソートプロンプティングはモデルに推論過程を明示的に示すよう頼み、複雑タスクの正確性を高めます。ステップバイステップの分解は人とAI双方の理解を促進します。
+チェーン・オブ・ソートプロンプトは明示的に推論プロセスを示すことで精度を上げます。ステップごとの分解により人間とAIの双方が論理を理解しやすくなります。
-> **🤖 [GitHub Copilot](https://github.com/features/copilot)チャットで試す:** このパターンについて質問してください:
-> - 「長時間実行のオペレーションにタスク実行パターンをどう適応しますか?」
-> - 「本番アプリケーションでのツールプレアンブルの構成ベストプラクティスは?」
-> - 「UIで中間進捗をどうキャプチャし表示すれば良いですか?」
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chatで試そう:** このパターンについて質問してみてください:
+> - 「長時間実行する操作にタスク実行パターンをどう適用しますか?」
+> - 「本番環境アプリでのツールプレアンブル構造のベストプラクティスは?」
+> - 「UIで途中進捗のキャプチャと表示をどう行いますか?」
以下の図はこの計画 → 実行 → 要約のワークフローを示します。
-
+
-*マルチステップタスクのための計画 → 実行 → 要約のワークフロー*
+*多段階タスクの計画 → 実行 → 要約ワークフロー*
-**自己反省コード** - 本番品質コードを生成するため。モデルは本番基準を守り、適切なエラー処理付きのコードを生成します。新機能やサービス構築の際に利用。
+自己反省コード - 本番品質のコード生成に向けて。モデルは本番標準に従ったコードを適切なエラーハンドリング付きで生成します。新機能やサービス構築に最適。
```java
String prompt = """
@@ -300,13 +300,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-下図はこの反復改善ループを示しています — 生成、評価、弱点の特定、改良を繰り返し本番基準まで高める。
+以下の図は、この反復改善ループ — 生成、評価、弱点の特定、改善を繰り返しながら本番基準に達するまでの過程です。
-
+
-*反復的改善ループ - 生成 → 評価 → 問題識別 → 改良 → 繰り返し*
+*反復的改善ループ — 生成、評価、課題検出、改善、繰り返し*
-**構造化分析** - 一貫した評価のため。モデルは固定の枠組み(正確さ、プラクティス、パフォーマンス、セキュリティ、保守性)でコードをレビューします。コードレビューや品質評価に最適。
+構造化分析 - 一貫した評価のため。モデルは固定フレームワーク(正確性、プラクティス、パフォーマンス、セキュリティ、保守性)を用いてコードをレビューします。コードレビューや品質評価に適用。
```java
String prompt = """
@@ -354,18 +354,18 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-> **🤖 [GitHub Copilot](https://github.com/features/copilot)チャットで試す:** 構造化分析について質問してください:
-> - 「コードレビューの種類に合わせて分析フレームワークをカスタマイズするには?」
-> - 「構造化出力をプログラムで解析し活用するベスト方法は?」
-> - 「レビュー間で一貫した重大度レベルを確保するには?」
+> **🤖 [GitHub Copilot](https://github.com/features/copilot) Chatで試そう:** 構造化分析について質問してください:
+> - 「異なる種類のコードレビューに合わせフレームワークをカスタマイズするには?」
+> - 「構造化出力をプログラム的に解析し活用するベストな方法は?」
+> - 「異なるレビューセッション間で一貫した重大度レベルをどう保つか?」
-以下の図は、一貫性あるコードレビューを重大度レベル別のカテゴリーに分類するフレームワークを示しています。
+以下の図は、この構造化フレームワークがコードレビューを一貫したカテゴリと重大度レベルに整理する様子を示します。
-
+
-*一貫したコードレビューのための重大度レベルによるフレームワーク*
+一貫した重大度レベル付きコードレビューのためのフレームワーク
-**マルチターンチャット** - 文脈を要する対話に。モデルは過去のメッセージを記憶し積み重ねて応答します。対話型ヘルプや複雑なQ&Aに適用。
+マルチターンチャット - コンテキストが必要な会話用。モデルは過去のメッセージを記憶し積み重ねます。インタラクティブなヘルプや複雑なQ&Aに利用。
```java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);
@@ -379,12 +379,13 @@ AiMessage aiMessage2 = chatModel.chat(memory.messages()).aiMessage();
memory.add(aiMessage2);
```
-以下の図は会話文脈がターンを重ねるごとにどう積み上がり、モデルのトークン制限にどう関係するかを示します。
+以下の図は、会話コンテキストが複数ターンにわたって蓄積し、モデルのトークン制限にどう関係するかを視覚化しています。
-
+
-*複数ターンで会話コンテキストがどのように積み重なりトークン制限に到達するか*
-**ステップバイステップの推論** - 論理が明示的に必要な問題に対して。モデルは各ステップの明示的な推論を示します。数学の問題、論理パズル、または思考過程を理解したい場合に利用してください。
+複数ターンの会話でコンテキストが蓄積されトークン制限に達する仕組み
+
+ステップバイステップ推論 - 見える論理が必要な問題向け。モデルは各ステップの明示的な推論を示します。数学問題、論理パズル、思考プロセスを理解したい場合に適用。
```java
String prompt = """
@@ -398,13 +399,13 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-以下の図は、モデルが問題を明示的で番号付きの論理的ステップに分解する方法を示しています。
+以下の図は、モデルが問題を明示的で番号付きの論理的ステップに分解する様子を示します。
-*問題を明示的な論理的ステップに分解する*
+問題を明確な論理ステップに分解する
-**制約付き出力** - 特定のフォーマット要件がある回答の場合。モデルはフォーマットと長さのルールを厳格に守ります。要約や正確な出力構造が必要な場合に利用してください。
+制約付き出力 - 特定のフォーマット要件がある応答向け。モデルはフォーマットおよび長さのルールを厳密に遵守します。要約や正確な出力構造が必要な場合に使用してください。
```java
String prompt = """
@@ -420,21 +421,21 @@ String prompt = """
String response = chatModel.chat(prompt);
```
-以下の図は、制約がモデルをどのように案内して厳密にフォーマットと長さの要件に従った出力を生成するかを示しています。
+以下の図は、制約がどのようにモデルを導いてフォーマットと長さの要件を厳守した出力を生成するかを示しています。
-*特定のフォーマット、長さ、構造の要件を強制*
+*特定のフォーマット、長さ、構造要件の強制*
-## アプリケーションの起動
+## アプリケーションを実行する
-**展開の確認:**
+**デプロイの確認:**
-ルートディレクトリに`.env`ファイルがAzureの認証情報と共に存在することを確認してください(Module 01で作成済み)。モジュールのディレクトリ(`02-prompt-engineering/`)から以下を実行します。
+ルートディレクトリにAzure認証情報が含まれる `.env` ファイルが存在することを確認してください(モジュール01で作成済み)。モジュールディレクトリ(`02-prompt-engineering/`)から次を実行します:
**Bash:**
```bash
-cat ../.env # AZURE_OPENAI_ENDPOINT、API_KEY、DEPLOYMENTを表示する必要があります
+cat ../.env # AZURE_OPENAI_ENDPOINT、API_KEY、DEPLOYMENT を表示する必要があります
```
**PowerShell:**
@@ -442,29 +443,29 @@ cat ../.env # AZURE_OPENAI_ENDPOINT、API_KEY、DEPLOYMENTを表示する必要
Get-Content ..\.env # AZURE_OPENAI_ENDPOINT、API_KEY、DEPLOYMENT を表示する必要があります
```
-**アプリケーションの開始:**
+**アプリケーションを起動する:**
-> **注意:** すでにルートディレクトリから`./start-all.sh`を用いて全アプリケーションを起動している場合(Module 01の説明参照)、このモジュールはすでにポート8083で起動しています。以下の起動コマンドはスキップして http://localhost:8083 に直接アクセスできます。
+> **注意:** すでにルートディレクトリから `./start-all.sh` を使ってすべてのアプリケーションを起動している場合(モジュール01の説明参照)、このモジュールはすでにポート8083で動作しています。以下の起動コマンドはスキップし、直接 http://localhost:8083 にアクセスしてください。
-**オプション 1:Spring Boot Dashboardの使用(VS Codeユーザーに推奨)**
+**オプション1: Spring Boot Dashboardの使用(VS Codeユーザーに推奨)**
-devコンテナにはSpring Boot Dashboard拡張機能が含まれており、すべてのSpring Bootアプリケーションを視覚的に管理できます。VS Codeの左側のアクティビティバーにあるSpring Bootアイコンを探してください。
+開発コンテナにはSpring Boot Dashboard拡張機能が含まれており、すべてのSpring Bootアプリケーションを管理するビジュアルインターフェイスを提供します。VS Codeの左側のアクティビティバーにあるSpring Bootアイコンからアクセスできます。
-Spring Boot Dashboardからは以下が可能です:
-- ワークスペース内のすべてのSpring Bootアプリケーションを見る
-- クリックひとつでアプリケーションの起動・停止
-- リアルタイムでログを確認
-- アプリケーションの状態を監視
+Spring Boot Dashboardからは:
+- ワークスペース内のすべてのSpring Bootアプリケーションを確認できます
+- アプリケーションの起動/停止をワンクリックで行えます
+- アプリケーションのログをリアルタイムで表示できます
+- アプリケーションの状態を監視できます
-「prompt-engineering」の横の再生ボタンをクリックするとこのモジュールが起動します。全モジュールを一括で起動することも可能です。
+「prompt-engineering」横の再生ボタンをクリックするだけでこのモジュールを開始するか、すべてのモジュールを一度に起動できます。
-*VS CodeのSpring Boot Dashboard — 1箇所で全モジュールを開始、停止、監視可能*
+*VS CodeのSpring Boot Dashboard — 一か所から全モジュールの起動、停止、監視が可能*
-**オプション 2:シェルスクリプトの利用**
+**オプション2: シェルスクリプトの使用**
-すべてのウェブアプリケーション(モジュール 01-04)を起動:
+すべてのWebアプリケーション(モジュール01~04)を起動:
**Bash:**
```bash
@@ -478,7 +479,7 @@ cd .. # ルートディレクトリから
.\start-all.ps1
```
-または、このモジュールだけを起動:
+またはこのモジュールだけを起動:
**Bash:**
```bash
@@ -492,25 +493,25 @@ cd 02-prompt-engineering
.\start.ps1
```
-これらのスクリプトはどちらもルートの`.env`ファイルから環境変数を自動で読み込み、JARファイルが存在しない場合はビルドを行います。
+両方のスクリプトはルートの `.env` ファイルから環境変数を自動読み込みし、JARファイルがなければビルドします。
-> **注意:** 事前に全モジュールを手動でビルドしたい場合:
+> **注意:** 起動前にすべてのモジュールを手動でビルドしたい場合:
>
> **Bash:**
> ```bash
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-
+>
> **PowerShell:**
> ```powershell
> cd .. # Go to root directory
> mvn clean package -DskipTests
> ```
-ブラウザで http://localhost:8083 を開きます。
+ブラウザで http://localhost:8083 を開いてください。
-**停止方法:**
+**停止するには:**
**Bash:**
```bash
@@ -528,69 +529,69 @@ cd ..; .\stop-all.ps1 # すべてのモジュール
## アプリケーションのスクリーンショット
-こちらはPrompt Engineeringモジュールのメインインターフェイスです。8つのパターンすべてを並べて試せます。
+こちらがプロンプトエンジニアリングモジュールのメインインターフェイスで、8つのパターンを並べて試せます。
-*8つのPrompt Engineeringパターンの特徴と使用例を示すメインダッシュボード*
+*8つのプロンプトエンジニアリングパターンとその特長、ユースケースを示すメインダッシュボード*
-## パターンの探索
+## パターンを探る
-Webインターフェイスでは異なるプロンプト戦略を試せます。各パターンは異なる問題を解決します。試してみて、どのアプローチがどの場面で有効かを体感してください。
+Webインターフェイスでは異なるプロンプト戦略を試せます。各パターンは異なる課題を解決します—それぞれのアプローチがどんな場面で効果的か試してください。
-> **注意:ストリーミングと非ストリーミング** — 各パターンページには「🔴 Stream Response (Live)」と「非ストリーミング」ボタンの2つがあります。ストリーミングはServer-Sent Events(SSE)を使い、モデルが生成するトークンをリアルタイムで表示します。進捗が即座に見えるのが特徴です。非ストリーミングはレスポンス全体が完成するまで待って表示します。深い推論を必要とするプロンプト(例:High Eagerness、Self-Reflecting Code)では非ストリーミングの呼び出しが非常に長時間かかり、数分に及ぶこともあります。複雑なプロンプトを試す際はストリーミングを使うのがおすすめです。モデルが動作している様子が見え、リクエストがタイムアウトした印象を避けられます。
+> **注意: ストリーミング vs 非ストリーミング** — すべてのパターンページには2つのボタンがあります:**🔴 ストリームレスポンス(ライブ)** と 非ストリーミング オプション。ストリーミングはServer-Sent Events(SSE)を使い、モデルが生成するトークンをリアルタイムで表示するので進捗がすぐ見えます。非ストリーミングは応答全体を待ってから表示します。高い思考を要するプロンプト(例:High Eagerness、Self-Reflecting Code)では非ストリーミング呼び出しは長時間かかり、数分におよぶこともあり、進捗が見えません。**複雑なプロンプトを試す際はストリーミングを使い、モデルが動いている様子を見て、タイムアウトと誤解されるのを防いでください。**
>
-> **注意:ブラウザ要件** — ストリーミング機能はFetch Streams API(`response.body.getReader()`)を使用しており、完全なブラウザ(Chrome、Edge、Firefox、Safari)が必要です。VS Code内蔵のSimple Browserでは動作しません。これはSimple BrowserのwebviewがReadableStream APIに対応していないためです。Simple Browser使用時でも非ストリーミングボタンは正常に動作します。ストリーミングボタンのみ影響を受けます。ストリーミングを完全に体験したい場合は外部ブラウザで `http://localhost:8083` を開いてください。
+> **注意: ブラウザ要件** — ストリーミング機能はFetch Streams API(`response.body.getReader()`)を使用し、完全なブラウザ(Chrome、Edge、Firefox、Safari)が必要です。VS Code内蔵のSimple Browserでは機能しません。Simple BrowserはReadableStream APIをサポートしないためです。Simple Browser利用時は非ストリーミングボタンは通常通り動作し、影響があるのはストリーミングボタンだけです。フル機能を使うには外部ブラウザで http://localhost:8083 を開いてください。
### Low vs High Eagerness
-「200の15%はいくつ?」のような簡単な質問をLow Eagernessで訊くと、即座に直接的な答えが得られます。次に「高トラフィックAPIのキャッシュ戦略を設計してください」といった複雑な問題をHigh Eagernessで試し、**🔴 Stream Response (Live)** をクリックしてモデルの詳細な推論をトークン単位で見てみてください。同じモデル、同じ質問構造でも、プロンプトがどれだけ考えるかを指示しています。
+「200の15%は?」のような単純な質問はLow Eagernessで尋ねてください。即座に直球の回答が返ってきます。次に「高トラフィックAPIのキャッシュ戦略を設計してください」と複雑な質問をHigh Eagernessで試してください。**🔴 ストリームレスポンス(ライブ)** をクリックすると、モデルの詳細な推論がトークン単位で表示されます。同じモデル、同じ質問構造ですが、プロンプトが思考の深さを指示します。
-### タスク実行(ツールプレアンブル)
+### タスク実行(ツールのプレアンブル)
-複数ステップのワークフローでは事前計画と進捗報告が役立ちます。モデルは何をするかをアウトライン化し、各ステップを説明し、最後に結果をまとめます。
+複数ステップのワークフローは事前計画と進行状況のナレーションが有効です。モデルは実行することを示し、各ステップを説明し、結果を要約します。
-### 自己反省型コード
+### 自己反省コード
-「メール検証サービスを作成してください」を試してください。単にコードを生成して終了するのではなく、モデルは生成したコードを評価基準に照らして評価し、弱点を特定し、改善します。コードが本番品質に達するまで繰り返す様子が見られます。
+「メール検証サービスを作成してください」を試してみてください。単にコードを生成して止まるのではなく、モデルが生成、品質基準による評価、弱点の特定、改善を行います。コードが本番基準に達するまで繰り返し改善する過程が見えます。
### 構造化分析
-コードレビューには一貫した評価フレームワークが必要です。モデルは(正確さ、慣習、パフォーマンス、セキュリティ)という固定カテゴリごとに、重大度レベルも含めてコードを評価します。
+コードレビューには一貫した評価フレームワークが必要です。モデルは正確性、プラクティス、パフォーマンス、セキュリティの固定カテゴリでコードを分析し、重要度を付けます。
### マルチターンチャット
-「Spring Bootとは何ですか?」と尋ねた後すぐに「例を見せてください」と続けてみてください。モデルは最初の質問を記憶し、具体的なSpring Bootの例を返します。メモリが無いと、2つ目の質問はあいまいすぎて適切に答えられません。
+「Spring Bootとは?」と尋ねてから、「例を見せて」と続けてください。モデルは最初の質問を覚えており、具体的なSpring Bootの例を返します。記憶がなければ2つ目の質問は曖昧すぎます。
-### ステップバイステップの推論
+### ステップバイステップ推論
-数学の問題を選び、Step-by-Step ReasoningとLow Eagernessの両方で試してください。Low eagernessは答えのみを高速に返しますが、過程が不透明です。Step-by-Stepではすべての計算と判断プロセスを示します。
+数学の問題を選び、Step-by-Step ReasoningとLow Eagernessの両方で試してください。Low Eagernessは答えだけをすばやく返しますが過程は見えません。Step-by-stepはすべての計算と判断を詳細に示します。
### 制約付き出力
-特定のフォーマットや語数が必要な場合、このパターンは厳密な遵守を強制します。ちょうど100語の箇条書き要約を生成してみてください。
+特定のフォーマットや語数を必要とする場合、このパターンは厳密な遵守を強制します。100語の要約を箇条書き形式で生成してみてください。
-## 真に学んでいること
+## 本当に学んでいること
-**推論努力がすべてを変える**
+推論努力がすべてを変える
-GPT-5.2はプロンプトを通じて計算努力の度合いを制御できます。努力が少ないほど簡潔に素早い応答が得られ、探索は最小限です。努力が多いほどモデルは深い思考に時間をかけます。タスクの複雑さに合わせて努力を調整する方法を学びましょう。簡単な質問に無駄な時間をかけず、複雑な判断を急がないように。
+GPT-5.2はプロンプトを通じて計算努力を制御できます。努力が少ないと素早い応答で探求は最小限。努力が大きいと深くじっくり考えます。課題の複雑さに応じて努力を調整することを学びます—単純な質問に時間を無駄にせず、複雑な判断は急がない。
-**構造が動作を導く**
+構造が振る舞いを導く
-プロンプト内のXMLタグに注目してください。単なる装飾ではありません。モデルは自由形式のテキストよりも構造化された指示に従いやすいです。複数ステップの処理や複雑な論理が必要な場合、構造はモデルが現在地と次の処理を追跡する助けとなります。以下の図はよく構造化されたプロンプトの分解で、``、``、``、``、``といったタグがどのように指示を明確なセクションに整理するかを示しています。
+プロンプトにXMLタグがあるのに気づきましたか?装飾ではありません。モデルは自由文より構造化された指示により確実に従います。複数ステップや複雑な論理が必要な場合、構造がモデルの現在位置と次の処理を追跡する助けになります。下図はよく構造化されたプロンプトを分解し、``, ``, `