diff --git a/translated_images/01-lesson-banner.2424cfd092f43366707ee2d15749f62f76f80ea3cb0816f4f31d0abd5ffd4dd1.es.png b/translated_images/01-lesson-banner.2424cfd092f43366707ee2d15749f62f76f80ea3cb0816f4f31d0abd5ffd4dd1.es.png new file mode 100644 index 000000000..e3d8c6c11 Binary files /dev/null and b/translated_images/01-lesson-banner.2424cfd092f43366707ee2d15749f62f76f80ea3cb0816f4f31d0abd5ffd4dd1.es.png differ diff --git a/translated_images/01-llmops-shift.29bc933cb3bb0080a562e1655c0c719b71a72c3be6252d5c564b7f598987e602.es.png b/translated_images/01-llmops-shift.29bc933cb3bb0080a562e1655c0c719b71a72c3be6252d5c564b7f598987e602.es.png new file mode 100644 index 000000000..8d38dd529 Binary files /dev/null and b/translated_images/01-llmops-shift.29bc933cb3bb0080a562e1655c0c719b71a72c3be6252d5c564b7f598987e602.es.png differ diff --git a/translated_images/02-lesson-banner.ef94c84979f97f60f07e27d905e708cbcbdf78707120553ccab27d91c947805b.es.png b/translated_images/02-lesson-banner.ef94c84979f97f60f07e27d905e708cbcbdf78707120553ccab27d91c947805b.es.png new file mode 100644 index 000000000..5475b32b5 Binary files /dev/null and b/translated_images/02-lesson-banner.ef94c84979f97f60f07e27d905e708cbcbdf78707120553ccab27d91c947805b.es.png differ diff --git a/translated_images/02-llmops.70a942ead05a7645db740f68727d90160cb438ab71f0fb20548bc7fe5cad83ff.es.png b/translated_images/02-llmops.70a942ead05a7645db740f68727d90160cb438ab71f0fb20548bc7fe5cad83ff.es.png new file mode 100644 index 000000000..219aa775b Binary files /dev/null and b/translated_images/02-llmops.70a942ead05a7645db740f68727d90160cb438ab71f0fb20548bc7fe5cad83ff.es.png differ diff --git a/translated_images/03-lesson-banner.1ed56067a452d97709d51f6cc8b6953918b2287132f4909ade2008c936cd4af9.es.png b/translated_images/03-lesson-banner.1ed56067a452d97709d51f6cc8b6953918b2287132f4909ade2008c936cd4af9.es.png new file mode 100644 index 000000000..0fcb73886 Binary files /dev/null and b/translated_images/03-lesson-banner.1ed56067a452d97709d51f6cc8b6953918b2287132f4909ade2008c936cd4af9.es.png differ diff --git a/translated_images/03-llm-stage-flows.3a1e1c401235a6cfa886ed6ba04aa52a096a545e1bc44fa54d7d5983a7201892.es.png b/translated_images/03-llm-stage-flows.3a1e1c401235a6cfa886ed6ba04aa52a096a545e1bc44fa54d7d5983a7201892.es.png new file mode 100644 index 000000000..3f12c3816 Binary files /dev/null and b/translated_images/03-llm-stage-flows.3a1e1c401235a6cfa886ed6ba04aa52a096a545e1bc44fa54d7d5983a7201892.es.png differ diff --git a/translated_images/04-azure-ai-platform.80203baf03a12fa8b166e194928f057074843d1955177baf0f5b53d50d7b6153.es.png b/translated_images/04-azure-ai-platform.80203baf03a12fa8b166e194928f057074843d1955177baf0f5b53d50d7b6153.es.png new file mode 100644 index 000000000..b3560b119 Binary files /dev/null and b/translated_images/04-azure-ai-platform.80203baf03a12fa8b166e194928f057074843d1955177baf0f5b53d50d7b6153.es.png differ diff --git a/translated_images/04-fabrication-aoai.b14268e9ecf25caf613b7d424c16e2a0dc5b578f8f960c0c04d4fb3a68e6cf61.es.png b/translated_images/04-fabrication-aoai.b14268e9ecf25caf613b7d424c16e2a0dc5b578f8f960c0c04d4fb3a68e6cf61.es.png new file mode 100644 index 000000000..da3100920 Binary files /dev/null and b/translated_images/04-fabrication-aoai.b14268e9ecf25caf613b7d424c16e2a0dc5b578f8f960c0c04d4fb3a68e6cf61.es.png differ diff --git a/translated_images/04-fabrication-huggingchat.faf82a0a512789565e410568bce1ac911075b943dec59b1ef4080b61723b5bf4.es.png b/translated_images/04-fabrication-huggingchat.faf82a0a512789565e410568bce1ac911075b943dec59b1ef4080b61723b5bf4.es.png new file mode 100644 index 000000000..b0fade2a1 Binary files /dev/null and b/translated_images/04-fabrication-huggingchat.faf82a0a512789565e410568bce1ac911075b943dec59b1ef4080b61723b5bf4.es.png differ diff --git a/translated_images/04-fabrication-oai.5818c4e0b2a2678c40e0793bf873ef4a425350dd0063a183fb8ae02cae63aa0c.es.png b/translated_images/04-fabrication-oai.5818c4e0b2a2678c40e0793bf873ef4a425350dd0063a183fb8ae02cae63aa0c.es.png new file mode 100644 index 000000000..28f0560b8 Binary files /dev/null and b/translated_images/04-fabrication-oai.5818c4e0b2a2678c40e0793bf873ef4a425350dd0063a183fb8ae02cae63aa0c.es.png differ diff --git a/translated_images/04-lesson-banner.a2c90deba7fedacda69f35b41636a8951ec91c2e33f5420b1254534ac85bc18e.es.png b/translated_images/04-lesson-banner.a2c90deba7fedacda69f35b41636a8951ec91c2e33f5420b1254534ac85bc18e.es.png new file mode 100644 index 000000000..bef0e57a4 Binary files /dev/null and b/translated_images/04-lesson-banner.a2c90deba7fedacda69f35b41636a8951ec91c2e33f5420b1254534ac85bc18e.es.png differ diff --git a/translated_images/04-playground-chat-base.65b76fcfde0caa6738e41d20f1a6123f9078219e6f91a88ee5ea8014f0469bdf.es.png b/translated_images/04-playground-chat-base.65b76fcfde0caa6738e41d20f1a6123f9078219e6f91a88ee5ea8014f0469bdf.es.png new file mode 100644 index 000000000..6e44e2357 Binary files /dev/null and b/translated_images/04-playground-chat-base.65b76fcfde0caa6738e41d20f1a6123f9078219e6f91a88ee5ea8014f0469bdf.es.png differ diff --git a/translated_images/04-playground-chat-instructions.b30bbfbdf92f2d051639c9bc23f74a0e2482f8dc7f0dafc6cc6fda81b2b00534.es.png b/translated_images/04-playground-chat-instructions.b30bbfbdf92f2d051639c9bc23f74a0e2482f8dc7f0dafc6cc6fda81b2b00534.es.png new file mode 100644 index 000000000..afbf9d77e Binary files /dev/null and b/translated_images/04-playground-chat-instructions.b30bbfbdf92f2d051639c9bc23f74a0e2482f8dc7f0dafc6cc6fda81b2b00534.es.png differ diff --git a/translated_images/04-prompt-engineering-sketchnote.d5f33336957a1e4f623b826195c2146ef4cc49974b72fa373de6929b474e8b70.es.png b/translated_images/04-prompt-engineering-sketchnote.d5f33336957a1e4f623b826195c2146ef4cc49974b72fa373de6929b474e8b70.es.png new file mode 100644 index 000000000..c7219b0d9 Binary files /dev/null and b/translated_images/04-prompt-engineering-sketchnote.d5f33336957a1e4f623b826195c2146ef4cc49974b72fa373de6929b474e8b70.es.png differ diff --git a/translated_images/04-tokenizer-example.e71f0a0f70356c5c7d80b21e8753a28c18a7f6d4aaa1c4b08e65d17625e85642.es.png b/translated_images/04-tokenizer-example.e71f0a0f70356c5c7d80b21e8753a28c18a7f6d4aaa1c4b08e65d17625e85642.es.png new file mode 100644 index 000000000..4d9f5bac8 Binary files /dev/null and b/translated_images/04-tokenizer-example.e71f0a0f70356c5c7d80b21e8753a28c18a7f6d4aaa1c4b08e65d17625e85642.es.png differ diff --git a/translated_images/05-lesson-banner.522610fd4a2cd82dbed66bb7e6fe104ed6da172e085dbb4d9100b28dc73ed435.es.png b/translated_images/05-lesson-banner.522610fd4a2cd82dbed66bb7e6fe104ed6da172e085dbb4d9100b28dc73ed435.es.png new file mode 100644 index 000000000..3e51f7651 Binary files /dev/null and b/translated_images/05-lesson-banner.522610fd4a2cd82dbed66bb7e6fe104ed6da172e085dbb4d9100b28dc73ed435.es.png differ diff --git a/translated_images/05-llm-azure-ai-prompt.a5ce85cdbb494bdf95420668e3464aae70d8b22275a744254e941dd5e73ae0d2.es.png b/translated_images/05-llm-azure-ai-prompt.a5ce85cdbb494bdf95420668e3464aae70d8b22275a744254e941dd5e73ae0d2.es.png new file mode 100644 index 000000000..934a6092b Binary files /dev/null and b/translated_images/05-llm-azure-ai-prompt.a5ce85cdbb494bdf95420668e3464aae70d8b22275a744254e941dd5e73ae0d2.es.png differ diff --git a/translated_images/06-lesson-banner.a5c629f990a636c852353c5533f1a6a218ece579005e91f96339d508d9cf8f47.es.png b/translated_images/06-lesson-banner.a5c629f990a636c852353c5533f1a6a218ece579005e91f96339d508d9cf8f47.es.png new file mode 100644 index 000000000..d1da232cf Binary files /dev/null and b/translated_images/06-lesson-banner.a5c629f990a636c852353c5533f1a6a218ece579005e91f96339d508d9cf8f47.es.png differ diff --git a/translated_images/06-llm-promptflow.a183eba07a3a7fdf4aa74db92a318b8cbbf4a608671f6b166216358d3203d8d4.es.png b/translated_images/06-llm-promptflow.a183eba07a3a7fdf4aa74db92a318b8cbbf4a608671f6b166216358d3203d8d4.es.png new file mode 100644 index 000000000..69836a44d Binary files /dev/null and b/translated_images/06-llm-promptflow.a183eba07a3a7fdf4aa74db92a318b8cbbf4a608671f6b166216358d3203d8d4.es.png differ diff --git a/translated_images/07-lesson-banner.a279b937f2843833fe28b4597f51bdef92d0ad03efee7ba52d0f166dea7574e5.es.png b/translated_images/07-lesson-banner.a279b937f2843833fe28b4597f51bdef92d0ad03efee7ba52d0f166dea7574e5.es.png new file mode 100644 index 000000000..081263780 Binary files /dev/null and b/translated_images/07-lesson-banner.a279b937f2843833fe28b4597f51bdef92d0ad03efee7ba52d0f166dea7574e5.es.png differ diff --git a/translated_images/08-lesson-banner.8fff48c566dad08a1cbb9f4b4a2c16adfdd288a7bbfffdd30770b466fe08c25c.es.png b/translated_images/08-lesson-banner.8fff48c566dad08a1cbb9f4b4a2c16adfdd288a7bbfffdd30770b466fe08c25c.es.png new file mode 100644 index 000000000..cab1813bb Binary files /dev/null and b/translated_images/08-lesson-banner.8fff48c566dad08a1cbb9f4b4a2c16adfdd288a7bbfffdd30770b466fe08c25c.es.png differ diff --git a/translated_images/09-lesson-banner.906e408c741f44112ff5da17492a30d3872abb52b8530d6506c2631e86e704d0.es.png b/translated_images/09-lesson-banner.906e408c741f44112ff5da17492a30d3872abb52b8530d6506c2631e86e704d0.es.png new file mode 100644 index 000000000..5c8e9d71a Binary files /dev/null and b/translated_images/09-lesson-banner.906e408c741f44112ff5da17492a30d3872abb52b8530d6506c2631e86e704d0.es.png differ diff --git a/translated_images/10-lesson-banner.a01ac8fe3fd86310c2e4065c0b3c584879f33b8ce797311821a636992f8a5b2f.es.png b/translated_images/10-lesson-banner.a01ac8fe3fd86310c2e4065c0b3c584879f33b8ce797311821a636992f8a5b2f.es.png new file mode 100644 index 000000000..ee28f562b Binary files /dev/null and b/translated_images/10-lesson-banner.a01ac8fe3fd86310c2e4065c0b3c584879f33b8ce797311821a636992f8a5b2f.es.png differ diff --git a/translated_images/11-lesson-banner.d78860d3e1f041e2c3426b1c052e1590738d2978db584a08efe1efbca299ed82.es.png b/translated_images/11-lesson-banner.d78860d3e1f041e2c3426b1c052e1590738d2978db584a08efe1efbca299ed82.es.png new file mode 100644 index 000000000..e9b31e7dd Binary files /dev/null and b/translated_images/11-lesson-banner.d78860d3e1f041e2c3426b1c052e1590738d2978db584a08efe1efbca299ed82.es.png differ diff --git a/translated_images/12-lesson-banner.c53c3c7c802e8f563953ce388f6a987ca493472c724d924b060be470951c53c8.es.png b/translated_images/12-lesson-banner.c53c3c7c802e8f563953ce388f6a987ca493472c724d924b060be470951c53c8.es.png new file mode 100644 index 000000000..e39d7f01c Binary files /dev/null and b/translated_images/12-lesson-banner.c53c3c7c802e8f563953ce388f6a987ca493472c724d924b060be470951c53c8.es.png differ diff --git a/translated_images/13-AI-red-team.642ed54689d7e8a4d83bdf0635768c4fd8aa41ea539d8e3ffe17514aec4b4824.es.png b/translated_images/13-AI-red-team.642ed54689d7e8a4d83bdf0635768c4fd8aa41ea539d8e3ffe17514aec4b4824.es.png new file mode 100644 index 000000000..dbdf1de56 Binary files /dev/null and b/translated_images/13-AI-red-team.642ed54689d7e8a4d83bdf0635768c4fd8aa41ea539d8e3ffe17514aec4b4824.es.png differ diff --git a/translated_images/13-lesson-banner.14103e36b4bbf17398b64ed2b0531f6f2c6549e7f7342f797c40bcae5a11862e.es.png b/translated_images/13-lesson-banner.14103e36b4bbf17398b64ed2b0531f6f2c6549e7f7342f797c40bcae5a11862e.es.png new file mode 100644 index 000000000..a2f607abe Binary files /dev/null and b/translated_images/13-lesson-banner.14103e36b4bbf17398b64ed2b0531f6f2c6549e7f7342f797c40bcae5a11862e.es.png differ diff --git a/translated_images/14-lesson-banner.066d74a31727ac121eeac06376a068a397d8e335281e63ce94130d11f516e46b.es.png b/translated_images/14-lesson-banner.066d74a31727ac121eeac06376a068a397d8e335281e63ce94130d11f516e46b.es.png new file mode 100644 index 000000000..fb6a9e623 Binary files /dev/null and b/translated_images/14-lesson-banner.066d74a31727ac121eeac06376a068a397d8e335281e63ce94130d11f516e46b.es.png differ diff --git a/translated_images/15-lesson-banner.ac49e59506175d4fc6ce521561dab2f9ccc6187410236376cfaed13cde371b90.es.png b/translated_images/15-lesson-banner.ac49e59506175d4fc6ce521561dab2f9ccc6187410236376cfaed13cde371b90.es.png new file mode 100644 index 000000000..50120865d Binary files /dev/null and b/translated_images/15-lesson-banner.ac49e59506175d4fc6ce521561dab2f9ccc6187410236376cfaed13cde371b90.es.png differ diff --git a/translated_images/16-lesson-banner.6b56555e8404fda1716382db4832cecbe616ccd764de381f0af6cfd694d05f74.es.png b/translated_images/16-lesson-banner.6b56555e8404fda1716382db4832cecbe616ccd764de381f0af6cfd694d05f74.es.png new file mode 100644 index 000000000..ec6f34a6c Binary files /dev/null and b/translated_images/16-lesson-banner.6b56555e8404fda1716382db4832cecbe616ccd764de381f0af6cfd694d05f74.es.png differ diff --git a/translated_images/17-lesson-banner.a5b918fb0920e4e6d8d391a100f5cb1d5929f4c2752c937d40392905dec82592.es.png b/translated_images/17-lesson-banner.a5b918fb0920e4e6d8d391a100f5cb1d5929f4c2752c937d40392905dec82592.es.png new file mode 100644 index 000000000..5d1e08585 Binary files /dev/null and b/translated_images/17-lesson-banner.a5b918fb0920e4e6d8d391a100f5cb1d5929f4c2752c937d40392905dec82592.es.png differ diff --git a/translated_images/18-fine-tuning-sketchnote.11b21f9ec8a703467a120cb79a28b5ac1effc8d8d9d5b31bbbac6b8640432e14.es.png b/translated_images/18-fine-tuning-sketchnote.11b21f9ec8a703467a120cb79a28b5ac1effc8d8d9d5b31bbbac6b8640432e14.es.png new file mode 100644 index 000000000..ec8e3eb11 Binary files /dev/null and b/translated_images/18-fine-tuning-sketchnote.11b21f9ec8a703467a120cb79a28b5ac1effc8d8d9d5b31bbbac6b8640432e14.es.png differ diff --git a/translated_images/18-lesson-banner.f30176815b1a5074fce9cceba317720586caa99e24001231a92fd04eeb54a121.es.png b/translated_images/18-lesson-banner.f30176815b1a5074fce9cceba317720586caa99e24001231a92fd04eeb54a121.es.png new file mode 100644 index 000000000..1472cb9ee Binary files /dev/null and b/translated_images/18-lesson-banner.f30176815b1a5074fce9cceba317720586caa99e24001231a92fd04eeb54a121.es.png differ diff --git a/translated_images/AI-diagram.c391fa518451a40de58d4f792c88adb8568d8cb4c48eed6e97b6b16e621eeb77.es.png b/translated_images/AI-diagram.c391fa518451a40de58d4f792c88adb8568d8cb4c48eed6e97b6b16e621eeb77.es.png new file mode 100644 index 000000000..2af120b04 Binary files /dev/null and b/translated_images/AI-diagram.c391fa518451a40de58d4f792c88adb8568d8cb4c48eed6e97b6b16e621eeb77.es.png differ diff --git a/translated_images/AzureAIStudioModelCatalog.3cf8a499aa8ba0314f2c73d4048b3225d324165f547525f5b7cfa5f6c9c68941.es.png b/translated_images/AzureAIStudioModelCatalog.3cf8a499aa8ba0314f2c73d4048b3225d324165f547525f5b7cfa5f6c9c68941.es.png new file mode 100644 index 000000000..92637ad3c Binary files /dev/null and b/translated_images/AzureAIStudioModelCatalog.3cf8a499aa8ba0314f2c73d4048b3225d324165f547525f5b7cfa5f6c9c68941.es.png differ diff --git a/translated_images/Deploy.18b2d27412ec8c02871386cbe91097c7f2190a8c6e2be88f66392b411609a48c.es.png b/translated_images/Deploy.18b2d27412ec8c02871386cbe91097c7f2190a8c6e2be88f66392b411609a48c.es.png new file mode 100644 index 000000000..a9d3dbcf5 Binary files /dev/null and b/translated_images/Deploy.18b2d27412ec8c02871386cbe91097c7f2190a8c6e2be88f66392b411609a48c.es.png differ diff --git a/translated_images/Embedding.c3708fe988ccf76073d348483dbb7569f622211104f073e22e43106075c04800.es.png b/translated_images/Embedding.c3708fe988ccf76073d348483dbb7569f622211104f073e22e43106075c04800.es.png new file mode 100644 index 000000000..95fdb5733 Binary files /dev/null and b/translated_images/Embedding.c3708fe988ccf76073d348483dbb7569f622211104f073e22e43106075c04800.es.png differ diff --git a/translated_images/FineTuning.aac48f07142e36fddc6571b1f43ea2e003325c9c6d8e3fc9d8834b771e308dbf.es.png b/translated_images/FineTuning.aac48f07142e36fddc6571b1f43ea2e003325c9c6d8e3fc9d8834b771e308dbf.es.png new file mode 100644 index 000000000..0caf05564 Binary files /dev/null and b/translated_images/FineTuning.aac48f07142e36fddc6571b1f43ea2e003325c9c6d8e3fc9d8834b771e308dbf.es.png differ diff --git a/translated_images/FoundationModel.e4859dbb7a825c94b284f17eae1c186aabc21d4d8644331f5b007d809cf8d0f2.es.png b/translated_images/FoundationModel.e4859dbb7a825c94b284f17eae1c186aabc21d4d8644331f5b007d809cf8d0f2.es.png new file mode 100644 index 000000000..3a84d380f Binary files /dev/null and b/translated_images/FoundationModel.e4859dbb7a825c94b284f17eae1c186aabc21d4d8644331f5b007d809cf8d0f2.es.png differ diff --git a/translated_images/Function-Flow.083875364af4f4bb69bd6f6ed94096a836453183a71cf22388f50310ad6404de.es.png b/translated_images/Function-Flow.083875364af4f4bb69bd6f6ed94096a836453183a71cf22388f50310ad6404de.es.png new file mode 100644 index 000000000..f497964b9 Binary files /dev/null and b/translated_images/Function-Flow.083875364af4f4bb69bd6f6ed94096a836453183a71cf22388f50310ad6404de.es.png differ diff --git a/translated_images/GithubModels-getstarted.4821f6f3182fc66620ed25fc5eaecb957298e7d17fad97e51b2e28d1e9d6693c.es.png b/translated_images/GithubModels-getstarted.4821f6f3182fc66620ed25fc5eaecb957298e7d17fad97e51b2e28d1e9d6693c.es.png new file mode 100644 index 000000000..cf523f91a Binary files /dev/null and b/translated_images/GithubModels-getstarted.4821f6f3182fc66620ed25fc5eaecb957298e7d17fad97e51b2e28d1e9d6693c.es.png differ diff --git a/translated_images/GithubModels-modelcard.c65ce4538e7bee923f0c5dd8d2250e8e1873a95db88bdc6648d1ae78af5f4db6.es.png b/translated_images/GithubModels-modelcard.c65ce4538e7bee923f0c5dd8d2250e8e1873a95db88bdc6648d1ae78af5f4db6.es.png new file mode 100644 index 000000000..1cdb52871 Binary files /dev/null and b/translated_images/GithubModels-modelcard.c65ce4538e7bee923f0c5dd8d2250e8e1873a95db88bdc6648d1ae78af5f4db6.es.png differ diff --git a/translated_images/GithubModels-plagroundcode.da2dea486f1ad5e0f567fd67ff46b61c023683e4af953390583ff7d7b744491b.es.png b/translated_images/GithubModels-plagroundcode.da2dea486f1ad5e0f567fd67ff46b61c023683e4af953390583ff7d7b744491b.es.png new file mode 100644 index 000000000..ce17b5d47 Binary files /dev/null and b/translated_images/GithubModels-plagroundcode.da2dea486f1ad5e0f567fd67ff46b61c023683e4af953390583ff7d7b744491b.es.png differ diff --git a/translated_images/GithubModelsMainScreen.62aed2c56e2bee6499716d6b2743a7a1b54ee8e25059137ee907b1d45e40d66e.es.png b/translated_images/GithubModelsMainScreen.62aed2c56e2bee6499716d6b2743a7a1b54ee8e25059137ee907b1d45e40d66e.es.png new file mode 100644 index 000000000..d6d7f7966 Binary files /dev/null and b/translated_images/GithubModelsMainScreen.62aed2c56e2bee6499716d6b2743a7a1b54ee8e25059137ee907b1d45e40d66e.es.png differ diff --git a/translated_images/Image.349c080266a763fd255b840a921cd8fc526ed78dc58708fa569ff1873d302345.es.png b/translated_images/Image.349c080266a763fd255b840a921cd8fc526ed78dc58708fa569ff1873d302345.es.png new file mode 100644 index 000000000..c5f2c0ab2 Binary files /dev/null and b/translated_images/Image.349c080266a763fd255b840a921cd8fc526ed78dc58708fa569ff1873d302345.es.png differ diff --git a/translated_images/LLM-Flow.3285ed8caf4796d7343c02927f52c9d32df59e790f6e440568e2e951f6ffa5fd.es.png b/translated_images/LLM-Flow.3285ed8caf4796d7343c02927f52c9d32df59e790f6e440568e2e951f6ffa5fd.es.png new file mode 100644 index 000000000..7b0b21c9c Binary files /dev/null and b/translated_images/LLM-Flow.3285ed8caf4796d7343c02927f52c9d32df59e790f6e440568e2e951f6ffa5fd.es.png differ diff --git a/translated_images/Llama1.da7b29534fe3cbc71f6e7f4e2de99e2b85d0f3c3066194c8a21a23ea5159c663.es.png b/translated_images/Llama1.da7b29534fe3cbc71f6e7f4e2de99e2b85d0f3c3066194c8a21a23ea5159c663.es.png new file mode 100644 index 000000000..1c082ef50 Binary files /dev/null and b/translated_images/Llama1.da7b29534fe3cbc71f6e7f4e2de99e2b85d0f3c3066194c8a21a23ea5159c663.es.png differ diff --git a/translated_images/Llama2.5c15b0755a9cd824841d4ea1b55b023ca82dc4edec7831662a290160034d7b26.es.png b/translated_images/Llama2.5c15b0755a9cd824841d4ea1b55b023ca82dc4edec7831662a290160034d7b26.es.png new file mode 100644 index 000000000..9ea5e4125 Binary files /dev/null and b/translated_images/Llama2.5c15b0755a9cd824841d4ea1b55b023ca82dc4edec7831662a290160034d7b26.es.png differ diff --git a/translated_images/Llama3.b985a3d84bf298c374c0b2f123627488c04dda2eae7e33482ac0ffe0947eb5c3.es.png b/translated_images/Llama3.b985a3d84bf298c374c0b2f123627488c04dda2eae7e33482ac0ffe0947eb5c3.es.png new file mode 100644 index 000000000..ff9a30ee5 Binary files /dev/null and b/translated_images/Llama3.b985a3d84bf298c374c0b2f123627488c04dda2eae7e33482ac0ffe0947eb5c3.es.png differ diff --git a/translated_images/Llama4.42bb7d9ca73554bf5aacf04dc596799e069ae0ff6b5e9a6dadbd14bf8aafae60.es.png b/translated_images/Llama4.42bb7d9ca73554bf5aacf04dc596799e069ae0ff6b5e9a6dadbd14bf8aafae60.es.png new file mode 100644 index 000000000..0db9dad3c Binary files /dev/null and b/translated_images/Llama4.42bb7d9ca73554bf5aacf04dc596799e069ae0ff6b5e9a6dadbd14bf8aafae60.es.png differ diff --git a/translated_images/ModelBenchmarks.254cb20fbd06c03a4ca53994585c5ea4300a88bcec8eff0450f2866ee2ac5ff3.es.png b/translated_images/ModelBenchmarks.254cb20fbd06c03a4ca53994585c5ea4300a88bcec8eff0450f2866ee2ac5ff3.es.png new file mode 100644 index 000000000..2950541cb Binary files /dev/null and b/translated_images/ModelBenchmarks.254cb20fbd06c03a4ca53994585c5ea4300a88bcec8eff0450f2866ee2ac5ff3.es.png differ diff --git a/translated_images/ModelCard.598051692c6e400d681a713ba7717e8b6e5e65f08d12131556fcec0f1789459b.es.png b/translated_images/ModelCard.598051692c6e400d681a713ba7717e8b6e5e65f08d12131556fcec0f1789459b.es.png new file mode 100644 index 000000000..a643bdad1 Binary files /dev/null and b/translated_images/ModelCard.598051692c6e400d681a713ba7717e8b6e5e65f08d12131556fcec0f1789459b.es.png differ diff --git a/translated_images/ModelDeploy.890da48cbd0bccdb4abfc9257f3d884831e5d41b723e7d1ceeac9d60c3c4f984.es.png b/translated_images/ModelDeploy.890da48cbd0bccdb4abfc9257f3d884831e5d41b723e7d1ceeac9d60c3c4f984.es.png new file mode 100644 index 000000000..0486a3413 Binary files /dev/null and b/translated_images/ModelDeploy.890da48cbd0bccdb4abfc9257f3d884831e5d41b723e7d1ceeac9d60c3c4f984.es.png differ diff --git a/translated_images/Multimodal.2c389c6439e0fc51b0b7b226d95d7d900d372ae66902d71b8ce5ec4951b8efbe.es.png b/translated_images/Multimodal.2c389c6439e0fc51b0b7b226d95d7d900d372ae66902d71b8ce5ec4951b8efbe.es.png new file mode 100644 index 000000000..182aa5280 Binary files /dev/null and b/translated_images/Multimodal.2c389c6439e0fc51b0b7b226d95d7d900d372ae66902d71b8ce5ec4951b8efbe.es.png differ diff --git a/translated_images/Text.a8c0cf139e5cc2a0cd3edaba8d675103774e6ddcb3c9fc5a98bb17c9a450e31d.es.png b/translated_images/Text.a8c0cf139e5cc2a0cd3edaba8d675103774e6ddcb3c9fc5a98bb17c9a450e31d.es.png new file mode 100644 index 000000000..e727de210 Binary files /dev/null and b/translated_images/Text.a8c0cf139e5cc2a0cd3edaba8d675103774e6ddcb3c9fc5a98bb17c9a450e31d.es.png differ diff --git a/translated_images/ai-builder-models.8069423b84cfc47f6bb989bc3cd0584b5b2471c80fad80bf504d356928a08c9c.es.png b/translated_images/ai-builder-models.8069423b84cfc47f6bb989bc3cd0584b5b2471c80fad80bf504d356928a08c9c.es.png new file mode 100644 index 000000000..315fdb562 Binary files /dev/null and b/translated_images/ai-builder-models.8069423b84cfc47f6bb989bc3cd0584b5b2471c80fad80bf504d356928a08c9c.es.png differ diff --git a/translated_images/android-chrome-192x192.a77b6997304e7e1fac38f7073006e146a5a76e26f63afe34a2446a461e8b37e7.es.png b/translated_images/android-chrome-192x192.a77b6997304e7e1fac38f7073006e146a5a76e26f63afe34a2446a461e8b37e7.es.png new file mode 100644 index 000000000..44ae15988 Binary files /dev/null and b/translated_images/android-chrome-192x192.a77b6997304e7e1fac38f7073006e146a5a76e26f63afe34a2446a461e8b37e7.es.png differ diff --git a/translated_images/android-chrome-512x512.2ac1c9816814f4fd284aac790ae5ad378490fab511e6f036edf1456d32fddef7.es.png b/translated_images/android-chrome-512x512.2ac1c9816814f4fd284aac790ae5ad378490fab511e6f036edf1456d32fddef7.es.png new file mode 100644 index 000000000..11119ed4a Binary files /dev/null and b/translated_images/android-chrome-512x512.2ac1c9816814f4fd284aac790ae5ad378490fab511e6f036edf1456d32fddef7.es.png differ diff --git a/translated_images/apple-touch-icon.02980588806a9ada31bd0ed1101a817801b80e8e0b1af2da1608549f3f210b58.es.png b/translated_images/apple-touch-icon.02980588806a9ada31bd0ed1101a817801b80e8e0b1af2da1608549f3f210b58.es.png new file mode 100644 index 000000000..4e6ce9b84 Binary files /dev/null and b/translated_images/apple-touch-icon.02980588806a9ada31bd0ed1101a817801b80e8e0b1af2da1608549f3f210b58.es.png differ diff --git a/translated_images/autogen.dee9a25a45fde584fedd84b812a6e31de5a6464687cdb66bb4f2cb7521391856.es.png b/translated_images/autogen.dee9a25a45fde584fedd84b812a6e31de5a6464687cdb66bb4f2cb7521391856.es.png new file mode 100644 index 000000000..64478b8e5 Binary files /dev/null and b/translated_images/autogen.dee9a25a45fde584fedd84b812a6e31de5a6464687cdb66bb4f2cb7521391856.es.png differ diff --git a/translated_images/bing1.293ae8527dbe2789b675c8591c9fb3cb1aa2ada75c2877f9aa9edc059f7a8b1c.es.png b/translated_images/bing1.293ae8527dbe2789b675c8591c9fb3cb1aa2ada75c2877f9aa9edc059f7a8b1c.es.png new file mode 100644 index 000000000..b49ef4842 Binary files /dev/null and b/translated_images/bing1.293ae8527dbe2789b675c8591c9fb3cb1aa2ada75c2877f9aa9edc059f7a8b1c.es.png differ diff --git a/translated_images/bing2.309f4845528a88c28c1c9739fb61d91fd993dc35ebe6fc92c66791fb04fceb4d.es.png b/translated_images/bing2.309f4845528a88c28c1c9739fb61d91fd993dc35ebe6fc92c66791fb04fceb4d.es.png new file mode 100644 index 000000000..662b02572 Binary files /dev/null and b/translated_images/bing2.309f4845528a88c28c1c9739fb61d91fd993dc35ebe6fc92c66791fb04fceb4d.es.png differ diff --git a/translated_images/cat.74cbd7946bc9ca380a8894c4de0c706a4f85b16296ffabbf52d6175df6bf841e.es.png b/translated_images/cat.74cbd7946bc9ca380a8894c4de0c706a4f85b16296ffabbf52d6175df6bf841e.es.png new file mode 100644 index 000000000..868148624 Binary files /dev/null and b/translated_images/cat.74cbd7946bc9ca380a8894c4de0c706a4f85b16296ffabbf52d6175df6bf841e.es.png differ diff --git a/translated_images/choose-model.f095d15bbac922141591fd4fac586dc8d25e69b42abf305d441b84c238e293f2.es.png b/translated_images/choose-model.f095d15bbac922141591fd4fac586dc8d25e69b42abf305d441b84c238e293f2.es.png new file mode 100644 index 000000000..7c3e848bd Binary files /dev/null and b/translated_images/choose-model.f095d15bbac922141591fd4fac586dc8d25e69b42abf305d441b84c238e293f2.es.png differ diff --git a/translated_images/codespaces-basicpy.3f0d052758c11ce94343209dcb574ac0193c0d8f4d52e28e5b5cc10a088b98cd.es.png b/translated_images/codespaces-basicpy.3f0d052758c11ce94343209dcb574ac0193c0d8f4d52e28e5b5cc10a088b98cd.es.png new file mode 100644 index 000000000..cabf7ff81 Binary files /dev/null and b/translated_images/codespaces-basicpy.3f0d052758c11ce94343209dcb574ac0193c0d8f4d52e28e5b5cc10a088b98cd.es.png differ diff --git a/translated_images/codespaces-secrets.acfe1f8ab4d8cd1b2fbf8ed0bed5f346b03b4f81ea547f8ec3cd585d4da04fbb.es.png b/translated_images/codespaces-secrets.acfe1f8ab4d8cd1b2fbf8ed0bed5f346b03b4f81ea547f8ec3cd585d4da04fbb.es.png new file mode 100644 index 000000000..981b32ce6 Binary files /dev/null and b/translated_images/codespaces-secrets.acfe1f8ab4d8cd1b2fbf8ed0bed5f346b03b4f81ea547f8ec3cd585d4da04fbb.es.png differ diff --git a/translated_images/coding-example.50ebabe8a6afff20267c91f18aab1957ddd9561ee2988b2362b7365aa6796935.es.png b/translated_images/coding-example.50ebabe8a6afff20267c91f18aab1957ddd9561ee2988b2362b7365aa6796935.es.png new file mode 100644 index 000000000..8370603e6 Binary files /dev/null and b/translated_images/coding-example.50ebabe8a6afff20267c91f18aab1957ddd9561ee2988b2362b7365aa6796935.es.png differ diff --git a/translated_images/conversation-example.60c2afc0f595fa599f367d36ccc3909ffc15e1d5265cb33b907d3560f3d03116.es.png b/translated_images/conversation-example.60c2afc0f595fa599f367d36ccc3909ffc15e1d5265cb33b907d3560f3d03116.es.png new file mode 100644 index 000000000..de5cc0f39 Binary files /dev/null and b/translated_images/conversation-example.60c2afc0f595fa599f367d36ccc3909ffc15e1d5265cb33b907d3560f3d03116.es.png differ diff --git a/translated_images/copilot-chat-prompt-dataverse.feb2f81e5872b9d2b05d45d11bb6830e0f2ef6a2d4742413bc9a1e50a45bbb89.es.png b/translated_images/copilot-chat-prompt-dataverse.feb2f81e5872b9d2b05d45d11bb6830e0f2ef6a2d4742413bc9a1e50a45bbb89.es.png new file mode 100644 index 000000000..23f42321d Binary files /dev/null and b/translated_images/copilot-chat-prompt-dataverse.feb2f81e5872b9d2b05d45d11bb6830e0f2ef6a2d4742413bc9a1e50a45bbb89.es.png differ diff --git a/translated_images/copilot-chat-prompt-powerapps.84250f341d060830a296b68512e6b3b3aa3a4559f4f1c2d7bafeba8ad3fcd17a.es.png b/translated_images/copilot-chat-prompt-powerapps.84250f341d060830a296b68512e6b3b3aa3a4559f4f1c2d7bafeba8ad3fcd17a.es.png new file mode 100644 index 000000000..801c97a4c Binary files /dev/null and b/translated_images/copilot-chat-prompt-powerapps.84250f341d060830a296b68512e6b3b3aa3a4559f4f1c2d7bafeba8ad3fcd17a.es.png differ diff --git a/translated_images/copilot-chat-prompt-powerautomate.f377e478cc8412de4394fab09e5b72f97b3fc9312526b516ded426102f51c30d.es.png b/translated_images/copilot-chat-prompt-powerautomate.f377e478cc8412de4394fab09e5b72f97b3fc9312526b516ded426102f51c30d.es.png new file mode 100644 index 000000000..1c51ffb91 Binary files /dev/null and b/translated_images/copilot-chat-prompt-powerautomate.f377e478cc8412de4394fab09e5b72f97b3fc9312526b516ded426102f51c30d.es.png differ diff --git a/translated_images/copilot-dataverse-table-powerapps.f4cc07b5d5f9327bd3783dd288debb2a959ce3320107512e235137aebd8a1a4c.es.png b/translated_images/copilot-dataverse-table-powerapps.f4cc07b5d5f9327bd3783dd288debb2a959ce3320107512e235137aebd8a1a4c.es.png new file mode 100644 index 000000000..776b93772 Binary files /dev/null and b/translated_images/copilot-dataverse-table-powerapps.f4cc07b5d5f9327bd3783dd288debb2a959ce3320107512e235137aebd8a1a4c.es.png differ diff --git a/translated_images/copilot-dataverse-table.b3bc936091324d9db1e943d640df1c7a7df598e66d30f5b8a2999048e26a5073.es.png b/translated_images/copilot-dataverse-table.b3bc936091324d9db1e943d640df1c7a7df598e66d30f5b8a2999048e26a5073.es.png new file mode 100644 index 000000000..139642064 Binary files /dev/null and b/translated_images/copilot-dataverse-table.b3bc936091324d9db1e943d640df1c7a7df598e66d30f5b8a2999048e26a5073.es.png differ diff --git a/translated_images/copilot-new-column.35e15ff21acaf2745965d427b130f2be772f0484835b44fe074d496b1a455f2a.es.png b/translated_images/copilot-new-column.35e15ff21acaf2745965d427b130f2be772f0484835b44fe074d496b1a455f2a.es.png new file mode 100644 index 000000000..093b2f566 Binary files /dev/null and b/translated_images/copilot-new-column.35e15ff21acaf2745965d427b130f2be772f0484835b44fe074d496b1a455f2a.es.png differ diff --git a/translated_images/copilot-new-screen.2e0bef7132a173928bc621780b39799e03982d315cb5a9ff75a34b08054641d4.es.png b/translated_images/copilot-new-screen.2e0bef7132a173928bc621780b39799e03982d315cb5a9ff75a34b08054641d4.es.png new file mode 100644 index 000000000..cbbb1b0d2 Binary files /dev/null and b/translated_images/copilot-new-screen.2e0bef7132a173928bc621780b39799e03982d315cb5a9ff75a34b08054641d4.es.png differ diff --git a/translated_images/create-prompt-gpt.69d429300c2e870a12ec95556cda9bacf6a173e452cdca02973c90df5f705cee.es.png b/translated_images/create-prompt-gpt.69d429300c2e870a12ec95556cda9bacf6a173e452cdca02973c90df5f705cee.es.png new file mode 100644 index 000000000..543fd5d9a Binary files /dev/null and b/translated_images/create-prompt-gpt.69d429300c2e870a12ec95556cda9bacf6a173e452cdca02973c90df5f705cee.es.png differ diff --git a/translated_images/creative-writing-example.e24a685b5a543ad1287ad8f6c963019518920e92a1cf7510f354e85b0830fbe8.es.png b/translated_images/creative-writing-example.e24a685b5a543ad1287ad8f6c963019518920e92a1cf7510f354e85b0830fbe8.es.png new file mode 100644 index 000000000..30118cc5b Binary files /dev/null and b/translated_images/creative-writing-example.e24a685b5a543ad1287ad8f6c963019518920e92a1cf7510f354e85b0830fbe8.es.png differ diff --git a/translated_images/custom-instructions.b96f59aa69356fcfed456414221919e8996f93c90c20d0d58d1bc0221e3c909f.es.png b/translated_images/custom-instructions.b96f59aa69356fcfed456414221919e8996f93c90c20d0d58d1bc0221e3c909f.es.png new file mode 100644 index 000000000..11553ecc9 Binary files /dev/null and b/translated_images/custom-instructions.b96f59aa69356fcfed456414221919e8996f93c90c20d0d58d1bc0221e3c909f.es.png differ diff --git a/translated_images/describe-new-table.0792373eb757281e3c5f542f84cad3b5208bfe0e5c4a7786dd2bd31aa848a23c.es.png b/translated_images/describe-new-table.0792373eb757281e3c5f542f84cad3b5208bfe0e5c4a7786dd2bd31aa848a23c.es.png new file mode 100644 index 000000000..644989d97 Binary files /dev/null and b/translated_images/describe-new-table.0792373eb757281e3c5f542f84cad3b5208bfe0e5c4a7786dd2bd31aa848a23c.es.png differ diff --git a/translated_images/encoder-decode.f2658c25d0eadee2377bb28cf3aee8b67aa9249bf64d3d57bb9be077c4bc4e1a.es.png b/translated_images/encoder-decode.f2658c25d0eadee2377bb28cf3aee8b67aa9249bf64d3d57bb9be077c4bc4e1a.es.png new file mode 100644 index 000000000..3215d878c Binary files /dev/null and b/translated_images/encoder-decode.f2658c25d0eadee2377bb28cf3aee8b67aa9249bf64d3d57bb9be077c4bc4e1a.es.png differ diff --git a/translated_images/explanability-in-ai.134426a96b498fbfdc80c75ae0090aedc0fc97424ae0734fccf7fb00a59a20d9.es.png b/translated_images/explanability-in-ai.134426a96b498fbfdc80c75ae0090aedc0fc97424ae0734fccf7fb00a59a20d9.es.png new file mode 100644 index 000000000..69cdd7012 Binary files /dev/null and b/translated_images/explanability-in-ai.134426a96b498fbfdc80c75ae0090aedc0fc97424ae0734fccf7fb00a59a20d9.es.png differ diff --git a/translated_images/favicon-16x16.1582c46aa87708cefdd082b409f7e7a0de47d126df8137963a9c1d5c44d07ef6.es.png b/translated_images/favicon-16x16.1582c46aa87708cefdd082b409f7e7a0de47d126df8137963a9c1d5c44d07ef6.es.png new file mode 100644 index 000000000..fc07d52e1 Binary files /dev/null and b/translated_images/favicon-16x16.1582c46aa87708cefdd082b409f7e7a0de47d126df8137963a9c1d5c44d07ef6.es.png differ diff --git a/translated_images/favicon-32x32.3f87837bcd54262931d496c58c130722170900e0b0bf6a3c7944f6c340a76f6a.es.png b/translated_images/favicon-32x32.3f87837bcd54262931d496c58c130722170900e0b0bf6a3c7944f6c340a76f6a.es.png new file mode 100644 index 000000000..9891be9e1 Binary files /dev/null and b/translated_images/favicon-32x32.3f87837bcd54262931d496c58c130722170900e0b0bf6a3c7944f6c340a76f6a.es.png differ diff --git a/translated_images/feedback-loops.7955c134429a94663443ad74d59044f8dc4ce354577f5b79b4bd2533f2cafc6f.es.png b/translated_images/feedback-loops.7955c134429a94663443ad74d59044f8dc4ce354577f5b79b4bd2533f2cafc6f.es.png new file mode 100644 index 000000000..5bf765fcd Binary files /dev/null and b/translated_images/feedback-loops.7955c134429a94663443ad74d59044f8dc4ce354577f5b79b4bd2533f2cafc6f.es.png differ diff --git a/translated_images/fine-tuned-messages-panel.4ed0c2da5ea1313b3a706a66f66bf5007c379cd9219cfb74cb30c0b04b90c4c8.es.png b/translated_images/fine-tuned-messages-panel.4ed0c2da5ea1313b3a706a66f66bf5007c379cd9219cfb74cb30c0b04b90c4c8.es.png new file mode 100644 index 000000000..d8da1d909 Binary files /dev/null and b/translated_images/fine-tuned-messages-panel.4ed0c2da5ea1313b3a706a66f66bf5007c379cd9219cfb74cb30c0b04b90c4c8.es.png differ diff --git a/translated_images/fine-tuned-metrics-panel.700d7e4995a652299584ab181536a6cfb67691a897a518b6c7a2aa0a17f1a30d.es.png b/translated_images/fine-tuned-metrics-panel.700d7e4995a652299584ab181536a6cfb67691a897a518b6c7a2aa0a17f1a30d.es.png new file mode 100644 index 000000000..0e27716c5 Binary files /dev/null and b/translated_images/fine-tuned-metrics-panel.700d7e4995a652299584ab181536a6cfb67691a897a518b6c7a2aa0a17f1a30d.es.png differ diff --git a/translated_images/fine-tuned-model-status.563271727bf7bfba7e3f73a201f8712fae3cea1c08f7c7f12ca469c06d234122.es.png b/translated_images/fine-tuned-model-status.563271727bf7bfba7e3f73a201f8712fae3cea1c08f7c7f12ca469c06d234122.es.png new file mode 100644 index 000000000..b6239aee2 Binary files /dev/null and b/translated_images/fine-tuned-model-status.563271727bf7bfba7e3f73a201f8712fae3cea1c08f7c7f12ca469c06d234122.es.png differ diff --git a/translated_images/fine-tuned-playground-compare.56e06f0ad8922016497d39ced3d84ea296eec89073503f2bf346ec9718f913b5.es.png b/translated_images/fine-tuned-playground-compare.56e06f0ad8922016497d39ced3d84ea296eec89073503f2bf346ec9718f913b5.es.png new file mode 100644 index 000000000..1a9e3af8f Binary files /dev/null and b/translated_images/fine-tuned-playground-compare.56e06f0ad8922016497d39ced3d84ea296eec89073503f2bf346ec9718f913b5.es.png differ diff --git a/translated_images/fine-tuned-playground-launch.5a26495c983c6350c227e05700a47a89002d132949a56fa4ff37f266ebe997b2.es.png b/translated_images/fine-tuned-playground-launch.5a26495c983c6350c227e05700a47a89002d132949a56fa4ff37f266ebe997b2.es.png new file mode 100644 index 000000000..a019f3d9d Binary files /dev/null and b/translated_images/fine-tuned-playground-launch.5a26495c983c6350c227e05700a47a89002d132949a56fa4ff37f266ebe997b2.es.png differ diff --git a/translated_images/genai_course_12[88].76a0a38703cefa941437bb56e1f730120308f9dfd2c90b9357d5027702dd4545.es.png b/translated_images/genai_course_12[88].76a0a38703cefa941437bb56e1f730120308f9dfd2c90b9357d5027702dd4545.es.png new file mode 100644 index 000000000..d57d49553 Binary files /dev/null and b/translated_images/genai_course_12[88].76a0a38703cefa941437bb56e1f730120308f9dfd2c90b9357d5027702dd4545.es.png differ diff --git a/translated_images/generated-image.7e17ceec085357b2809f6d343689dbca37c59be8909fdce1946d46ec9ba9596b.es.png b/translated_images/generated-image.7e17ceec085357b2809f6d343689dbca37c59be8909fdce1946d46ec9ba9596b.es.png new file mode 100644 index 000000000..966bbba6a Binary files /dev/null and b/translated_images/generated-image.7e17ceec085357b2809f6d343689dbca37c59be8909fdce1946d46ec9ba9596b.es.png differ diff --git a/translated_images/generated-image.95d5d16f109311a02c4340315aee552f2f358fd17062d14ce6fbc2321af987f9.es.png b/translated_images/generated-image.95d5d16f109311a02c4340315aee552f2f358fd17062d14ce6fbc2321af987f9.es.png new file mode 100644 index 000000000..dfe0e4bb3 Binary files /dev/null and b/translated_images/generated-image.95d5d16f109311a02c4340315aee552f2f358fd17062d14ce6fbc2321af987f9.es.png differ diff --git a/translated_images/gh1.126c6139713b622b2564ef280de7d2a4c7f4c4a5e60cf577b94b47feec4342dd.es.png b/translated_images/gh1.126c6139713b622b2564ef280de7d2a4c7f4c4a5e60cf577b94b47feec4342dd.es.png new file mode 100644 index 000000000..f77191b87 Binary files /dev/null and b/translated_images/gh1.126c6139713b622b2564ef280de7d2a4c7f4c4a5e60cf577b94b47feec4342dd.es.png differ diff --git a/translated_images/gh2.07d7985af66f178df0c80d0331f39f763c5b5ec2859931d86ed7f2b43e6fa644.es.png b/translated_images/gh2.07d7985af66f178df0c80d0331f39f763c5b5ec2859931d86ed7f2b43e6fa644.es.png new file mode 100644 index 000000000..3df677bb0 Binary files /dev/null and b/translated_images/gh2.07d7985af66f178df0c80d0331f39f763c5b5ec2859931d86ed7f2b43e6fa644.es.png differ diff --git a/translated_images/github-check-country-locale-comment.2f4fe93228161dee6ec8210f3d6ccc66af6864f6b178b8d96f30818498fba72a.es.png b/translated_images/github-check-country-locale-comment.2f4fe93228161dee6ec8210f3d6ccc66af6864f6b178b8d96f30818498fba72a.es.png new file mode 100644 index 000000000..100c5190e Binary files /dev/null and b/translated_images/github-check-country-locale-comment.2f4fe93228161dee6ec8210f3d6ccc66af6864f6b178b8d96f30818498fba72a.es.png differ diff --git a/translated_images/github-check-paths-missing-tracking-comment.880d4afe03e898ffadeebe0f61f7fdea7525c25238bead9fecabc81a0a83b1c0.es.png b/translated_images/github-check-paths-missing-tracking-comment.880d4afe03e898ffadeebe0f61f7fdea7525c25238bead9fecabc81a0a83b1c0.es.png new file mode 100644 index 000000000..f77f37bf2 Binary files /dev/null and b/translated_images/github-check-paths-missing-tracking-comment.880d4afe03e898ffadeebe0f61f7fdea7525c25238bead9fecabc81a0a83b1c0.es.png differ diff --git a/translated_images/github-check-urls-missing-tracking-comment.1bd00d20b24a1e2e3179e59e1bd7d44f16637a1bb1ab265562565251166841ef.es.png b/translated_images/github-check-urls-missing-tracking-comment.1bd00d20b24a1e2e3179e59e1bd7d44f16637a1bb1ab265562565251166841ef.es.png new file mode 100644 index 000000000..b6476acb4 Binary files /dev/null and b/translated_images/github-check-urls-missing-tracking-comment.1bd00d20b24a1e2e3179e59e1bd7d44f16637a1bb1ab265562565251166841ef.es.png differ diff --git a/translated_images/how-rag-works.f5d0ff63942bd3a638e7efee7a6fce7f0787f6d7a1fca4e43f2a7a4d03cde3e0.es.png b/translated_images/how-rag-works.f5d0ff63942bd3a638e7efee7a6fce7f0787f6d7a1fca4e43f2a7a4d03cde3e0.es.png new file mode 100644 index 000000000..ce0e25e11 Binary files /dev/null and b/translated_images/how-rag-works.f5d0ff63942bd3a638e7efee7a6fce7f0787f6d7a1fca4e43f2a7a4d03cde3e0.es.png differ diff --git a/translated_images/jarvis.762ddbadbd1a3a3364d4ca3db1a7a9c0d2180060c0f8da6f7bd5b5ea2a115aa7.es.png b/translated_images/jarvis.762ddbadbd1a3a3364d4ca3db1a7a9c0d2180060c0f8da6f7bd5b5ea2a115aa7.es.png new file mode 100644 index 000000000..3f3829161 Binary files /dev/null and b/translated_images/jarvis.762ddbadbd1a3a3364d4ca3db1a7a9c0d2180060c0f8da6f7bd5b5ea2a115aa7.es.png differ diff --git a/translated_images/langchain-agents.edcc55b5d5c437169a2037211284154561183c58bcec6d4ac2f8a79046fac9af.es.png b/translated_images/langchain-agents.edcc55b5d5c437169a2037211284154561183c58bcec6d4ac2f8a79046fac9af.es.png new file mode 100644 index 000000000..9f00ce350 Binary files /dev/null and b/translated_images/langchain-agents.edcc55b5d5c437169a2037211284154561183c58bcec6d4ac2f8a79046fac9af.es.png differ diff --git a/translated_images/lesson-plan-prompt.cc47c488cf1343df5d67aa796a1acabca32c380e5b782971e289f6ab8b21cf5a.es.png b/translated_images/lesson-plan-prompt.cc47c488cf1343df5d67aa796a1acabca32c380e5b782971e289f6ab8b21cf5a.es.png new file mode 100644 index 000000000..08732d5d2 Binary files /dev/null and b/translated_images/lesson-plan-prompt.cc47c488cf1343df5d67aa796a1acabca32c380e5b782971e289f6ab8b21cf5a.es.png differ diff --git a/translated_images/logo.706ff17a872243dc0aa594a8368f0990148a14acf751f2446ffbe44d187cee87.es.png b/translated_images/logo.706ff17a872243dc0aa594a8368f0990148a14acf751f2446ffbe44d187cee87.es.png new file mode 100644 index 000000000..5cdaf5712 Binary files /dev/null and b/translated_images/logo.706ff17a872243dc0aa594a8368f0990148a14acf751f2446ffbe44d187cee87.es.png differ diff --git a/translated_images/mitigate-cycle.babcd5a5658e1775d5f2cb47f2ff305cca090400a72d98d0f9e57e9db5637c72.es.png b/translated_images/mitigate-cycle.babcd5a5658e1775d5f2cb47f2ff305cca090400a72d98d0f9e57e9db5637c72.es.png new file mode 100644 index 000000000..6f8afc489 Binary files /dev/null and b/translated_images/mitigate-cycle.babcd5a5658e1775d5f2cb47f2ff305cca090400a72d98d0f9e57e9db5637c72.es.png differ diff --git a/translated_images/mitigation-layers.377215120b9a1159a8c3982c6bbcf41b6adf8c8fa04ce35cbaeeb13b4979cdfc.es.png b/translated_images/mitigation-layers.377215120b9a1159a8c3982c6bbcf41b6adf8c8fa04ce35cbaeeb13b4979cdfc.es.png new file mode 100644 index 000000000..9f765e964 Binary files /dev/null and b/translated_images/mitigation-layers.377215120b9a1159a8c3982c6bbcf41b6adf8c8fa04ce35cbaeeb13b4979cdfc.es.png differ diff --git a/translated_images/model-price.3f5a3e4d32ae00b465325159e1f4ebe7b5861e95117518c6bfc37fe842950687.es.png b/translated_images/model-price.3f5a3e4d32ae00b465325159e1f4ebe7b5861e95117518c6bfc37fe842950687.es.png new file mode 100644 index 000000000..0de69b535 Binary files /dev/null and b/translated_images/model-price.3f5a3e4d32ae00b465325159e1f4ebe7b5861e95117518c6bfc37fe842950687.es.png differ diff --git a/translated_images/model-quality.aaae1c22e00f7ee1cd9dc186c611ac6ca6627eabd19e5364dce9e216d25ae8a5.es.png b/translated_images/model-quality.aaae1c22e00f7ee1cd9dc186c611ac6ca6627eabd19e5364dce9e216d25ae8a5.es.png new file mode 100644 index 000000000..61ab129fd Binary files /dev/null and b/translated_images/model-quality.aaae1c22e00f7ee1cd9dc186c611ac6ca6627eabd19e5364dce9e216d25ae8a5.es.png differ diff --git a/translated_images/notebook-search.1e320b9c7fcbb0bc1436d98ea6ee73b4b54ca47990a1c952b340a2cadf8ac1ca.es.png b/translated_images/notebook-search.1e320b9c7fcbb0bc1436d98ea6ee73b4b54ca47990a1c952b340a2cadf8ac1ca.es.png new file mode 100644 index 000000000..581498dfa Binary files /dev/null and b/translated_images/notebook-search.1e320b9c7fcbb0bc1436d98ea6ee73b4b54ca47990a1c952b340a2cadf8ac1ca.es.png differ diff --git a/translated_images/phi3.655208c3186ae38168d66032ed529d1d0d9c881ac531c95a2a5a32dbe11c38b4.es.png b/translated_images/phi3.655208c3186ae38168d66032ed529d1d0d9c881ac531c95a2a5a32dbe11c38b4.es.png new file mode 100644 index 000000000..80a171487 Binary files /dev/null and b/translated_images/phi3.655208c3186ae38168d66032ed529d1d0d9c881ac531c95a2a5a32dbe11c38b4.es.png differ diff --git a/translated_images/powerautomate-add-row.5edce45e5dd3d51e5152688dc140ad43e1423e7a9fef9a206f82a7965ea68d73.es.png b/translated_images/powerautomate-add-row.5edce45e5dd3d51e5152688dc140ad43e1423e7a9fef9a206f82a7965ea68d73.es.png new file mode 100644 index 000000000..936832a43 Binary files /dev/null and b/translated_images/powerautomate-add-row.5edce45e5dd3d51e5152688dc140ad43e1423e7a9fef9a206f82a7965ea68d73.es.png differ diff --git a/translated_images/powerautomate-remove-actions.7216392fe684ceba4b73c6383edd1cc5e7ded11afd0ca812052a11487d049ef8.es.png b/translated_images/powerautomate-remove-actions.7216392fe684ceba4b73c6383edd1cc5e7ded11afd0ca812052a11487d049ef8.es.png new file mode 100644 index 000000000..e43404971 Binary files /dev/null and b/translated_images/powerautomate-remove-actions.7216392fe684ceba4b73c6383edd1cc5e7ded11afd0ca812052a11487d049ef8.es.png differ diff --git a/translated_images/query-results.bb0480ebf025fac69c5179ad4d53b6627d643046838c857dc9e2b1281f1cdeb7.es.png b/translated_images/query-results.bb0480ebf025fac69c5179ad4d53b6627d643046838c857dc9e2b1281f1cdeb7.es.png new file mode 100644 index 000000000..bf97a07a2 Binary files /dev/null and b/translated_images/query-results.bb0480ebf025fac69c5179ad4d53b6627d643046838c857dc9e2b1281f1cdeb7.es.png differ diff --git a/translated_images/repo-thubmnail2.0f2b17cf562b4a8c78d5fab2765e0206b3e07605cd90f179c04ea9dcc646a41c.es.png b/translated_images/repo-thubmnail2.0f2b17cf562b4a8c78d5fab2765e0206b3e07605cd90f179c04ea9dcc646a41c.es.png new file mode 100644 index 000000000..6db6e4008 Binary files /dev/null and b/translated_images/repo-thubmnail2.0f2b17cf562b4a8c78d5fab2765e0206b3e07605cd90f179c04ea9dcc646a41c.es.png differ diff --git a/translated_images/repo-thubmnailv2.115823d179386974591e2a9c9ff426b45072e80dc31e7c7751065d4a2663060e.es.png b/translated_images/repo-thubmnailv2.115823d179386974591e2a9c9ff426b45072e80dc31e7c7751065d4a2663060e.es.png new file mode 100644 index 000000000..efcaac25c Binary files /dev/null and b/translated_images/repo-thubmnailv2.115823d179386974591e2a9c9ff426b45072e80dc31e7c7751065d4a2663060e.es.png differ diff --git a/translated_images/repo-thumbnailv2.06f4a48036fde647f6ba4eb19f5651babe59bb30e972748afb349e47725d7601.es.png b/translated_images/repo-thumbnailv2.06f4a48036fde647f6ba4eb19f5651babe59bb30e972748afb349e47725d7601.es.png new file mode 100644 index 000000000..efcaac25c Binary files /dev/null and b/translated_images/repo-thumbnailv2.06f4a48036fde647f6ba4eb19f5651babe59bb30e972748afb349e47725d7601.es.png differ diff --git a/translated_images/repo-thumbnailv3.917487e234b901008a5c272513b4447fb7c4af7408952fa7d7dfb92165ad76e0.es.png b/translated_images/repo-thumbnailv3.917487e234b901008a5c272513b4447fb7c4af7408952fa7d7dfb92165ad76e0.es.png new file mode 100644 index 000000000..912083aee Binary files /dev/null and b/translated_images/repo-thumbnailv3.917487e234b901008a5c272513b4447fb7c4af7408952fa7d7dfb92165ad76e0.es.png differ diff --git a/translated_images/repo-thumbnailv4-fixed.11f1ce6a85d01461c33c11943bb61f2b6d6dcce3a3b25cd27e627031f41f8e00.es.png b/translated_images/repo-thumbnailv4-fixed.11f1ce6a85d01461c33c11943bb61f2b6d6dcce3a3b25cd27e627031f41f8e00.es.png new file mode 100644 index 000000000..dd6640663 Binary files /dev/null and b/translated_images/repo-thumbnailv4-fixed.11f1ce6a85d01461c33c11943bb61f2b6d6dcce3a3b25cd27e627031f41f8e00.es.png differ diff --git a/translated_images/repo-thumbnailv4.2a8556df61fae2a124eb7a7e71cf137b892c1d80a8a70e5f1ac3d426116dedfb.es.png b/translated_images/repo-thumbnailv4.2a8556df61fae2a124eb7a7e71cf137b892c1d80a8a70e5f1ac3d426116dedfb.es.png new file mode 100644 index 000000000..feb04ba47 Binary files /dev/null and b/translated_images/repo-thumbnailv4.2a8556df61fae2a124eb7a7e71cf137b892c1d80a8a70e5f1ac3d426116dedfb.es.png differ diff --git a/translated_images/repository-thumbnail.d450333985e6cb816f264d2ebc56fe0e7432c6a629edf849e194c4e1e0285a18.es.png b/translated_images/repository-thumbnail.d450333985e6cb816f264d2ebc56fe0e7432c6a629edf849e194c4e1e0285a18.es.png new file mode 100644 index 000000000..58f922627 Binary files /dev/null and b/translated_images/repository-thumbnail.d450333985e6cb816f264d2ebc56fe0e7432c6a629edf849e194c4e1e0285a18.es.png differ diff --git a/translated_images/simplified-explanations.4679508a406c3621fa22bad4673e717fbff02f8b8d58afcab8cb6f1aa893a82f.es.png b/translated_images/simplified-explanations.4679508a406c3621fa22bad4673e717fbff02f8b8d58afcab8cb6f1aa893a82f.es.png new file mode 100644 index 000000000..6b92a7da3 Binary files /dev/null and b/translated_images/simplified-explanations.4679508a406c3621fa22bad4673e717fbff02f8b8d58afcab8cb6f1aa893a82f.es.png differ diff --git a/translated_images/slm.4058842744d0444a021548a3e8253efd20e93a6ef59ec1525ded361bfc9e6c22.es.png b/translated_images/slm.4058842744d0444a021548a3e8253efd20e93a6ef59ec1525ded361bfc9e6c22.es.png new file mode 100644 index 000000000..05da8d1a7 Binary files /dev/null and b/translated_images/slm.4058842744d0444a021548a3e8253efd20e93a6ef59ec1525ded361bfc9e6c22.es.png differ diff --git a/translated_images/solving-questions.b7dea1604de0cbd2e9c5fa00b1a68a0ed77178a035b94b9213196b9d125d0be8.es.png b/translated_images/solving-questions.b7dea1604de0cbd2e9c5fa00b1a68a0ed77178a035b94b9213196b9d125d0be8.es.png new file mode 100644 index 000000000..79ac9c1cd Binary files /dev/null and b/translated_images/solving-questions.b7dea1604de0cbd2e9c5fa00b1a68a0ed77178a035b94b9213196b9d125d0be8.es.png differ diff --git a/translated_images/startup.94d6b79cc4bb3f5afbf6e2ddfcf309aa5d1e256b5f30cc41d252024eaa9cc5dc.es.png b/translated_images/startup.94d6b79cc4bb3f5afbf6e2ddfcf309aa5d1e256b5f30cc41d252024eaa9cc5dc.es.png new file mode 100644 index 000000000..0c37a2cb8 Binary files /dev/null and b/translated_images/startup.94d6b79cc4bb3f5afbf6e2ddfcf309aa5d1e256b5f30cc41d252024eaa9cc5dc.es.png differ diff --git a/translated_images/students-by-DALLE2.b70fddaced1042ee47092320243050c4c9a7da78b31eeba515b09b2f0dca009b.es.png b/translated_images/students-by-DALLE2.b70fddaced1042ee47092320243050c4c9a7da78b31eeba515b09b2f0dca009b.es.png new file mode 100644 index 000000000..79373735c Binary files /dev/null and b/translated_images/students-by-DALLE2.b70fddaced1042ee47092320243050c4c9a7da78b31eeba515b09b2f0dca009b.es.png differ diff --git a/translated_images/summarization-example.7b7ff97147b3d790477169f442b5e3f8f78079f152450e62c45dbdc23b1423c1.es.png b/translated_images/summarization-example.7b7ff97147b3d790477169f442b5e3f8f78079f152450e62c45dbdc23b1423c1.es.png new file mode 100644 index 000000000..2ca74bce3 Binary files /dev/null and b/translated_images/summarization-example.7b7ff97147b3d790477169f442b5e3f8f78079f152450e62c45dbdc23b1423c1.es.png differ diff --git a/translated_images/taskweaver.da8559999267715a95b7677cf9b7d7dd8420aee6f3c484ced1833f081988dcd5.es.png b/translated_images/taskweaver.da8559999267715a95b7677cf9b7d7dd8420aee6f3c484ced1833f081988dcd5.es.png new file mode 100644 index 000000000..e562e27fd Binary files /dev/null and b/translated_images/taskweaver.da8559999267715a95b7677cf9b7d7dd8420aee6f3c484ced1833f081988dcd5.es.png differ diff --git a/translated_images/text-completion-example.cbb0f28403d427524f8f8c935f84d084a9765b683a6bf37f977df3adb868b0e7.es.png b/translated_images/text-completion-example.cbb0f28403d427524f8f8c935f84d084a9765b683a6bf37f977df3adb868b0e7.es.png new file mode 100644 index 000000000..1c1d78a33 Binary files /dev/null and b/translated_images/text-completion-example.cbb0f28403d427524f8f8c935f84d084a9765b683a6bf37f977df3adb868b0e7.es.png differ diff --git a/translated_images/text-generation-works.6a9bf609154fce280e08cd9f3dc0c0589490e30b96aaff8af4f705e44c67fe2e.es.png b/translated_images/text-generation-works.6a9bf609154fce280e08cd9f3dc0c0589490e30b96aaff8af4f705e44c67fe2e.es.png new file mode 100644 index 000000000..afe82de25 Binary files /dev/null and b/translated_images/text-generation-works.6a9bf609154fce280e08cd9f3dc0c0589490e30b96aaff8af4f705e44c67fe2e.es.png differ diff --git a/translated_images/tokenizer-example.80a5c151ee7d1bd485eff5aca60ac3d2c1eaaff4c0746e09b98c696c959afbfa.es.png b/translated_images/tokenizer-example.80a5c151ee7d1bd485eff5aca60ac3d2c1eaaff4c0746e09b98c696c959afbfa.es.png new file mode 100644 index 000000000..627ac1661 Binary files /dev/null and b/translated_images/tokenizer-example.80a5c151ee7d1bd485eff5aca60ac3d2c1eaaff4c0746e09b98c696c959afbfa.es.png differ diff --git a/translated_images/uxinai.d5b4ed690f5cefff0c53ffcc01b480cdc1828402e1fdbc980490013a3c50935a.es.png b/translated_images/uxinai.d5b4ed690f5cefff0c53ffcc01b480cdc1828402e1fdbc980490013a3c50935a.es.png new file mode 100644 index 000000000..bdaa56813 Binary files /dev/null and b/translated_images/uxinai.d5b4ed690f5cefff0c53ffcc01b480cdc1828402e1fdbc980490013a3c50935a.es.png differ diff --git a/translated_images/v1-generated-image.a295cfcffa3c13c2432eb1e41de7e49a78c814000fb1b462234be24b6e0db7ea.es.png b/translated_images/v1-generated-image.a295cfcffa3c13c2432eb1e41de7e49a78c814000fb1b462234be24b6e0db7ea.es.png new file mode 100644 index 000000000..c3ca819a6 Binary files /dev/null and b/translated_images/v1-generated-image.a295cfcffa3c13c2432eb1e41de7e49a78c814000fb1b462234be24b6e0db7ea.es.png differ diff --git a/translated_images/v1-low-temp-generated-image.c96d135514f964231dba3000473ce40dd7a687c80a4b2a693615a39e1dd47328.es.png b/translated_images/v1-low-temp-generated-image.c96d135514f964231dba3000473ce40dd7a687c80a4b2a693615a39e1dd47328.es.png new file mode 100644 index 000000000..64eee3005 Binary files /dev/null and b/translated_images/v1-low-temp-generated-image.c96d135514f964231dba3000473ce40dd7a687c80a4b2a693615a39e1dd47328.es.png differ diff --git a/translated_images/v1-temp-generated-image.a4346e1d2360a056d855ee3dfcedcce91211747967cb882e7d2eff2076f90e4a.es.png b/translated_images/v1-temp-generated-image.a4346e1d2360a056d855ee3dfcedcce91211747967cb882e7d2eff2076f90e4a.es.png new file mode 100644 index 000000000..d1eb5ed02 Binary files /dev/null and b/translated_images/v1-temp-generated-image.a4346e1d2360a056d855ee3dfcedcce91211747967cb882e7d2eff2076f90e4a.es.png differ diff --git a/translated_images/v2-generated-image.33f55a3714efe61dc19622c869ba6cd7d6e6de562e26e95b5810486187aace39.es.png b/translated_images/v2-generated-image.33f55a3714efe61dc19622c869ba6cd7d6e6de562e26e95b5810486187aace39.es.png new file mode 100644 index 000000000..0cb413d91 Binary files /dev/null and b/translated_images/v2-generated-image.33f55a3714efe61dc19622c869ba6cd7d6e6de562e26e95b5810486187aace39.es.png differ diff --git a/translated_images/v2-low-temp-generated-image.f1b2c78ff318d68565f2d610309edd0c0b0224f9fbc45ca0a07ba4f28f9b2eff.es.png b/translated_images/v2-low-temp-generated-image.f1b2c78ff318d68565f2d610309edd0c0b0224f9fbc45ca0a07ba4f28f9b2eff.es.png new file mode 100644 index 000000000..8a877e1a5 Binary files /dev/null and b/translated_images/v2-low-temp-generated-image.f1b2c78ff318d68565f2d610309edd0c0b0224f9fbc45ca0a07ba4f28f9b2eff.es.png differ diff --git a/translated_images/v2-temp-generated-image.871d0c920dbfb0f1cb5d9d80bffd52da9b41f83b386320d9a9998635630ec83d.es.png b/translated_images/v2-temp-generated-image.871d0c920dbfb0f1cb5d9d80bffd52da9b41f83b386320d9a9998635630ec83d.es.png new file mode 100644 index 000000000..46cfd7be5 Binary files /dev/null and b/translated_images/v2-temp-generated-image.871d0c920dbfb0f1cb5d9d80bffd52da9b41f83b386320d9a9998635630ec83d.es.png differ diff --git a/translated_images/vscode-envvariable.33d8dc1aa25ec2a73aa00a99223fbdd45fa069c3f5102c8ae6cc60f71af2c928.es.png b/translated_images/vscode-envvariable.33d8dc1aa25ec2a73aa00a99223fbdd45fa069c3f5102c8ae6cc60f71af2c928.es.png new file mode 100644 index 000000000..5679a2442 Binary files /dev/null and b/translated_images/vscode-envvariable.33d8dc1aa25ec2a73aa00a99223fbdd45fa069c3f5102c8ae6cc60f71af2c928.es.png differ diff --git a/translated_images/vscode-follow-link.85520ab6a1237adcf01cc9cd8c228ce7b32ae685a034250bd5109e2682b9dfca.es.png b/translated_images/vscode-follow-link.85520ab6a1237adcf01cc9cd8c228ce7b32ae685a034250bd5109e2682b9dfca.es.png new file mode 100644 index 000000000..c1c02201b Binary files /dev/null and b/translated_images/vscode-follow-link.85520ab6a1237adcf01cc9cd8c228ce7b32ae685a034250bd5109e2682b9dfca.es.png differ diff --git a/translated_images/vscode-select-relative-path.3804eb73c3a9e5f2d345e3d3288f8173a9e584254d0e505d8bcbc6461dbf1f6c.es.png b/translated_images/vscode-select-relative-path.3804eb73c3a9e5f2d345e3d3288f8173a9e584254d0e505d8bcbc6461dbf1f6c.es.png new file mode 100644 index 000000000..9aac2e45a Binary files /dev/null and b/translated_images/vscode-select-relative-path.3804eb73c3a9e5f2d345e3d3288f8173a9e584254d0e505d8bcbc6461dbf1f6c.es.png differ diff --git a/translated_images/what-agent.21f2893bdfd01e6a7fd09b0416c2b15594d97f44bbb2ab5a1ff8bf643d2fcb3d.es.png b/translated_images/what-agent.21f2893bdfd01e6a7fd09b0416c2b15594d97f44bbb2ab5a1ff8bf643d2fcb3d.es.png new file mode 100644 index 000000000..a0e7988a7 Binary files /dev/null and b/translated_images/what-agent.21f2893bdfd01e6a7fd09b0416c2b15594d97f44bbb2ab5a1ff8bf643d2fcb3d.es.png differ diff --git a/translations/es/00-course-setup/README.md b/translations/es/00-course-setup/README.md new file mode 100644 index 000000000..74b01900f --- /dev/null +++ b/translations/es/00-course-setup/README.md @@ -0,0 +1,155 @@ +# Comenzando con este curso + +¡Estamos muy emocionados de que empieces este curso y ver qué te inspira a construir con IA Generativa! + +Para asegurar tu éxito, esta página detalla los pasos de configuración, los requisitos técnicos y dónde obtener ayuda si es necesario. + +## Pasos de Configuración + +Para comenzar este curso, necesitarás completar los siguientes pasos. + +### 1. Haz un fork de este repositorio + +[Haz un fork de todo este repositorio](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst) a tu propia cuenta de GitHub para poder cambiar cualquier código y completar los desafíos. También puedes [darle una estrella (🌟) a este repositorio](https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars?WT.mc_id=academic-105485-koreyst) para encontrarlo y los repositorios relacionados más fácilmente. + +### 2. Crea un codespace + +Para evitar problemas de dependencias al ejecutar el código, recomendamos ejecutar este curso en un [GitHub Codespaces](https://github.com/features/codespaces?WT.mc_id=academic-105485-koreyst). + +Esto se puede crear seleccionando la opción `Code` en tu versión bifurcada de este repositorio y seleccionando la opción **Codespaces**. + +![Diálogo mostrando botones para crear un codespace](../../../00-course-setup/images/who-will-pay.webp) + +### 3. Almacenamiento de tus claves API + +Mantener tus claves API seguras es importante al construir cualquier tipo de aplicación. Recomendamos no almacenar claves API directamente en tu código. Hacer commit de esos detalles en un repositorio público podría resultar en problemas de seguridad e incluso costos no deseados si son utilizadas por alguien malintencionado. + +## Cómo ejecutar localmente en tu computadora + +Para ejecutar el código localmente en tu computadora, necesitarás tener alguna versión de [Python instalada](https://www.python.org/downloads/?WT.mc_id=academic-105485-koreyst). + +Luego, para usar el repositorio, necesitas clonarlo: + +```shell +git clone https://github.com/microsoft/generative-ai-for-beginners +cd generative-ai-for-beginners +``` + +¡Una vez que tengas todo revisado, puedes comenzar! + +### Instalando Miniconda (paso opcional) + +[Miniconda](https://conda.io/en/latest/miniconda.html?WT.mc_id=academic-105485-koreyst) es un instalador ligero para instalar [Conda](https://docs.conda.io/en/latest?WT.mc_id=academic-105485-koreyst), Python, así como algunos paquetes. +Conda en sí es un gestor de paquetes que facilita la configuración y el cambio entre diferentes [**entornos virtuales**](https://docs.python.org/3/tutorial/venv.html?WT.mc_id=academic-105485-koreyst) de Python y paquetes. También es útil para instalar paquetes que no están disponibles a través de `pip`. + +You can follow the [MiniConda installation guide](https://docs.anaconda.com/free/miniconda/#quick-command-line-install?WT.mc_id=academic-105485-koreyst) to set it up. + +With Miniconda installed, you need to clone the [repository](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst) (if you haven't already) + +Next, you need to create a virtual environment. To do this with Conda, go ahead and create a new environment file (_environment.yml_). If you are following along using Codespaces, create this within the `.devcontainer` directory, thus `.devcontainer/environment.yml`. + +Adelante, completa tu archivo de entorno con el fragmento a continuación: + +```yml +name: +channels: + - defaults +dependencies: +- python= +- openai +- python-dotenv +- azure-ai-inference + +``` + +El archivo de entorno especifica las dependencias que necesitamos. `` refers to the name you would like to use for your Conda environment, and `` is the version of Python you would like to use, for example, `3` es la última versión principal de Python. + +Con eso hecho, puedes crear tu entorno Conda ejecutando los comandos a continuación en tu línea de comandos/terminal + +```bash +conda env create --name ai4beg --file .devcontainer/environment.yml # .devcontainer sub path applies to only Codespace setups +conda activate ai4beg +``` + +Consulta la [guía de entornos Conda](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html?WT.mc_id=academic-105485-koreyst) si tienes algún problema. + +### Usando Visual Studio Code con la extensión de soporte para Python + +Recomendamos usar el editor [Visual Studio Code (VS Code)](http://code.visualstudio.com/?WT.mc_id=academic-105485-koreyst) con la [extensión de soporte para Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-105485-koreyst) instalada para este curso. Sin embargo, esto es más una recomendación y no un requisito definitivo. + +> **Nota**: Al abrir el repositorio del curso en VS Code, tienes la opción de configurar el proyecto dentro de un contenedor. Esto se debe al [directorio especial `.devcontainer`](https://code.visualstudio.com/docs/devcontainers/containers?itemName=ms-python.python&WT.mc_id=academic-105485-koreyst) que se encuentra dentro del repositorio del curso. Más sobre esto más adelante. + +> **Nota**: Una vez que clonas y abres el directorio en VS Code, automáticamente te sugerirá instalar una extensión de soporte para Python. + +> **Nota**: Si VS Code sugiere reabrir el repositorio en un contenedor, rechaza esta solicitud para usar la versión de Python instalada localmente. + +### Usando Jupyter en el navegador + +También puedes trabajar en el proyecto usando el [entorno Jupyter](https://jupyter.org?WT.mc_id=academic-105485-koreyst) directamente en tu navegador. Tanto Jupyter clásico como [Jupyter Hub](https://jupyter.org/hub?WT.mc_id=academic-105485-koreyst) proporcionan un entorno de desarrollo bastante agradable con características como autocompletado, resaltado de código, etc. + +Para iniciar Jupyter localmente, dirígete al terminal/línea de comandos, navega al directorio del curso y ejecuta: + +```bash +jupyter notebook +``` + +o + +```bash +jupyterhub +``` + +Esto iniciará una instancia de Jupyter y la URL para acceder a ella se mostrará en la ventana de la línea de comandos. + +Una vez que accedas a la URL, deberías ver el esquema del curso y poder navegar a cualquier archivo `*.ipynb` file. For example, `08-building-search-applications/python/oai-solution.ipynb`. + +### Running in a container + +An alternative to setting everything up on your computer or Codespace is to use a [container](https://en.wikipedia.org/wiki/Containerization_(computing)?WT.mc_id=academic-105485-koreyst). The special `.devcontainer` folder within the course repository makes it possible for VS Code to set up the project within a container. Outside of Codespaces, this will require the installation of Docker, and quite frankly, it involves a bit of work, so we recommend this only to those with experience working with containers. + +One of the best ways to keep your API keys secure when using GitHub Codespaces is by using Codespace Secrets. Please follow the [Codespaces secrets management](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-secrets-for-your-codespaces?WT.mc_id=academic-105485-koreyst) guide to learn more about this. + +## Lessons and Technical Requirements + +The course has 6 concept lessons and 6 coding lessons. + +For the coding lessons, we are using the Azure OpenAI Service. You will need access to the Azure OpenAI service and an API key to run this code. You can apply to get access by [completing this application](https://azure.microsoft.com/products/ai-services/openai-service?WT.mc_id=academic-105485-koreyst). + +While you wait for your application to be processed, each coding lesson also includes a `README.md` donde puedes ver el código y los resultados. + +## Usando el servicio Azure OpenAI por primera vez + +Si es tu primera vez trabajando con el servicio Azure OpenAI, por favor sigue esta guía sobre cómo [crear e implementar un recurso de Azure OpenAI Service.](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal&WT.mc_id=academic-105485-koreyst) + +## Usando la API de OpenAI por primera vez + +Si es tu primera vez trabajando con la API de OpenAI, por favor sigue la guía sobre cómo [crear y usar la interfaz.](https://platform.openai.com/docs/quickstart?context=pythont&WT.mc_id=academic-105485-koreyst) + +## Conoce a otros estudiantes + +Hemos creado canales en nuestro servidor oficial de [Discord de la Comunidad de IA](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) para conocer a otros estudiantes. Esta es una gran manera de hacer networking con otros emprendedores, constructores, estudiantes y cualquier persona que busque mejorar en IA Generativa. + +[![Únete al canal de discord](https://dcbadge.limes.pink/api/server/ByRwuEEgH4)](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) + +El equipo del proyecto también estará en este servidor de Discord para ayudar a cualquier estudiante. + +## Contribuir + +Este curso es una iniciativa de código abierto. Si ves áreas de mejora o problemas, por favor crea un [Pull Request](https://github.com/microsoft/generative-ai-for-beginners/pulls?WT.mc_id=academic-105485-koreyst) o registra un [problema en GitHub](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst). + +El equipo del proyecto estará siguiendo todas las contribuciones. Contribuir al código abierto es una manera increíble de construir tu carrera en IA Generativa. + +La mayoría de las contribuciones requieren que aceptes un Acuerdo de Licencia de Contribuidor (CLA) declarando que tienes el derecho y, de hecho, nos otorgas los derechos para usar tu contribución. Para más detalles, visita el [sitio web de CLA, Acuerdo de Licencia de Contribuidor](https://cla.microsoft.com?WT.mc_id=academic-105485-koreyst). + +Importante: al traducir texto en este repositorio, por favor asegúrate de no usar traducción automática. Verificaremos las traducciones a través de la comunidad, así que por favor solo ofrece traducciones en idiomas en los que seas competente. + +Cuando envíes un pull request, un bot de CLA determinará automáticamente si necesitas proporcionar un CLA y decorará el PR adecuadamente (por ejemplo, etiqueta, comentario). Simplemente sigue las instrucciones proporcionadas por el bot. Solo necesitarás hacer esto una vez en todos los repositorios que usen nuestro CLA. + +Este proyecto ha adoptado el [Código de Conducta de Código Abierto de Microsoft](https://opensource.microsoft.com/codeofconduct/?WT.mc_id=academic-105485-koreyst). Para más información, lee las Preguntas Frecuentes del Código de Conducta o contacta a [Email opencode](opencode@microsoft.com) con cualquier pregunta o comentario adicional. + +## Empecemos + +Ahora que has completado los pasos necesarios para completar este curso, comencemos obteniendo una [introducción a la IA Generativa y los LLMs](../01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst). + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas 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 humana. No nos hacemos responsables de ningún 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/00-course-setup/SETUP.md b/translations/es/00-course-setup/SETUP.md new file mode 100644 index 000000000..3854a863f --- /dev/null +++ b/translations/es/00-course-setup/SETUP.md @@ -0,0 +1,136 @@ +# Configura tu Entorno de Desarrollo + +Hemos configurado este repositorio y curso con un [contenedor de desarrollo](https://containers.dev?WT.mc_id=academic-105485-koreyst) que tiene un entorno de ejecución universal que puede soportar desarrollo en Python3, .NET, Node.js y Java. La configuración relacionada se define en el archivo `devcontainer.json` ubicado en la carpeta `.devcontainer/` en la raíz de este repositorio. + +Para activar el contenedor de desarrollo, lánzalo en [GitHub Codespaces](https://docs.github.com/en/codespaces/overview?WT.mc_id=academic-105485-koreyst) (para un entorno de ejecución en la nube) o en [Docker Desktop](https://docs.docker.com/desktop/?WT.mc_id=academic-105485-koreyst) (para un entorno de ejecución alojado en un dispositivo local). Lee [esta documentación](https://code.visualstudio.com/docs/devcontainers/containers?WT.mc_id=academic-105485-koreyst) para más detalles sobre cómo funcionan los contenedores de desarrollo dentro de VS Code. + +> [!TIP] +> Recomendamos usar GitHub Codespaces para un inicio rápido con el mínimo esfuerzo. Ofrece una generosa [cuota de uso gratuita](https://docs.github.com/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#monthly-included-storage-and-core-hours-for-personal-accounts?WT.mc_id=academic-105485-koreyst) para cuentas personales. Configura [tiempos de espera](https://docs.github.com/codespaces/setting-your-user-preferences/setting-your-timeout-period-for-github-codespaces?WT.mc_id=academic-105485-koreyst) para detener o eliminar espacios de código inactivos y así maximizar el uso de tu cuota. + +## 1. Ejecutando Asignaciones + +Cada lección tendrá asignaciones _opcionales_ que pueden proporcionarse en uno o más lenguajes de programación, incluidos: Python, .NET/C#, Java y JavaScript/TypeScript. Esta sección ofrece una guía general relacionada con la ejecución de esas asignaciones. + +### 1.1 Asignaciones en Python + +Las asignaciones en Python se proporcionan ya sea como aplicaciones (archivos `.py`) o cuadernos Jupyter (archivos `.ipynb`). +- Para ejecutar el cuaderno, ábrelo en Visual Studio Code y luego haz clic en _Select Kernel_ (en la parte superior derecha) y selecciona la opción predeterminada de Python 3 que se muestra. Ahora puedes _Run All_ para ejecutar el cuaderno. +- Para ejecutar aplicaciones de Python desde la línea de comandos, sigue las instrucciones específicas de la asignación para asegurarte de seleccionar los archivos correctos y proporcionar los argumentos requeridos. + +## 2. Configurando Proveedores + +Las asignaciones **pueden** también configurarse para trabajar contra una o más implementaciones de Modelos de Lenguaje Grande (LLM) a través de un proveedor de servicios compatible como OpenAI, Azure o Hugging Face. Estos proporcionan un _endpoint alojado_ (API) al que podemos acceder programáticamente con las credenciales correctas (clave API o token). En este curso, discutimos estos proveedores: + + - [OpenAI](https://platform.openai.com/docs/models?WT.mc_id=academic-105485-koreyst) con modelos diversos, incluyendo la serie principal GPT. + - [Azure OpenAI](https://learn.microsoft.com/azure/ai-services/openai/?WT.mc_id=academic-105485-koreyst) para modelos OpenAI con preparación empresarial en mente. + - [Hugging Face](https://huggingface.co/docs/hub/index?WT.mc_id=academic-105485-koreyst) para modelos de código abierto y servidor de inferencia. + +**Necesitarás usar tus propias cuentas para estos ejercicios**. Las asignaciones son opcionales, por lo que puedes elegir configurar uno, todos o ninguno de los proveedores según tus intereses. Algunas orientaciones para registrarse: + +| Registro | Costo | Clave API | Playground | Comentarios | +|:---|:---|:---|:---|:---| +| [OpenAI](https://platform.openai.com/signup?WT.mc_id=academic-105485-koreyst)| [Precios](https://openai.com/pricing#language-models?WT.mc_id=academic-105485-koreyst)| [Basado en Proyecto](https://platform.openai.com/api-keys?WT.mc_id=academic-105485-koreyst) | [Sin Código, Web](https://platform.openai.com/playground?WT.mc_id=academic-105485-koreyst) | Múltiples Modelos Disponibles | +| [Azure](https://aka.ms/azure/free?WT.mc_id=academic-105485-koreyst)| [Precios](https://azure.microsoft.com/pricing/details/cognitive-services/openai-service/?WT.mc_id=academic-105485-koreyst)| [Inicio Rápido SDK](https://learn.microsoft.com/azure/ai-services/openai/quickstart?WT.mc_id=academic-105485-koreyst)| [Inicio Rápido Studio](https://learn.microsoft.com/azure/ai-services/openai/quickstart?WT.mc_id=academic-105485-koreyst) | [Debes Solicitar Acceso con Anticipación](https://learn.microsoft.com/azure/ai-services/openai/?WT.mc_id=academic-105485-koreyst)| +| [Hugging Face](https://huggingface.co/join?WT.mc_id=academic-105485-koreyst) | [Precios](https://huggingface.co/pricing) | [Tokens de Acceso](https://huggingface.co/docs/hub/security-tokens?WT.mc_id=academic-105485-koreyst) | [Hugging Chat](https://huggingface.co/chat/?WT.mc_id=academic-105485-koreyst)| [Hugging Chat tiene modelos limitados](https://huggingface.co/chat/models?WT.mc_id=academic-105485-koreyst) | +| | | | | | + +Sigue las instrucciones a continuación para _configurar_ este repositorio para su uso con diferentes proveedores. Las asignaciones que requieran un proveedor específico contendrán una de estas etiquetas en su nombre de archivo: + - `aoai` - requiere endpoint y clave de Azure OpenAI + - `oai` - requiere endpoint y clave de OpenAI + - `hf` - requiere token de Hugging Face + +Puedes configurar uno, ninguno o todos los proveedores. Las asignaciones relacionadas simplemente mostrarán errores si faltan las credenciales. + +### 2.1. Crear archivo `.env` + +Suponemos que ya has leído la guía anterior y te has registrado con el proveedor relevante, y obtenido las credenciales de autenticación requeridas (API_KEY o token). En el caso de Azure OpenAI, asumimos que también tienes una implementación válida de un Servicio de Azure OpenAI (endpoint) con al menos un modelo GPT implementado para completar chats. + +El siguiente paso es configurar tus **variables de entorno locales** de la siguiente manera: + +1. Busca en la carpeta raíz un archivo `.env.copy` que debería tener un contenido como este: + + ```bash + # OpenAI Provider + OPENAI_API_KEY='' + + ## Azure OpenAI + AZURE_OPENAI_API_VERSION='2024-02-01' # Default is set! + AZURE_OPENAI_API_KEY='' + AZURE_OPENAI_ENDPOINT='' + AZURE_OPENAI_DEPLOYMENT='' + AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT='' + + ## Hugging Face + HUGGING_FACE_API_KEY='' + ``` + +2. Copia ese archivo a `.env` usando el siguiente comando. Este archivo está _gitignore-d_, manteniendo los secretos seguros. + + ```bash + cp .env.copy .env + ``` + +3. Llena los valores (reemplaza los marcadores de posición en el lado derecho del `=`) como se describe en la siguiente sección. + +3. (Opcional) Si usas GitHub Codespaces, tienes la opción de guardar las variables de entorno como _secretos de Codespaces_ asociados con este repositorio. En ese caso, no necesitarás configurar un archivo .env local. **Sin embargo, ten en cuenta que esta opción solo funciona si usas GitHub Codespaces.** Aún necesitarás configurar el archivo .env si usas Docker Desktop en su lugar. + +### 2.2. Completar archivo `.env` + +Echemos un vistazo rápido a los nombres de las variables para entender qué representan: + +| Variable | Descripción | +| :--- | :--- | +| HUGGING_FACE_API_KEY | Este es el token de acceso del usuario que configuras en tu perfil | +| OPENAI_API_KEY | Esta es la clave de autorización para usar el servicio para endpoints de OpenAI no-Azure | +| AZURE_OPENAI_API_KEY | Esta es la clave de autorización para usar ese servicio | +| AZURE_OPENAI_ENDPOINT | Este es el endpoint implementado para un recurso de Azure OpenAI | +| AZURE_OPENAI_DEPLOYMENT | Este es el endpoint de implementación del modelo de _generación de texto_ | +| AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT | Este es el endpoint de implementación del modelo de _incrustaciones de texto_ | +| | | + +Nota: Las dos últimas variables de Azure OpenAI reflejan un modelo predeterminado para completar chats (generación de texto) y búsqueda vectorial (incrustaciones) respectivamente. Las instrucciones para configurarlas se definirán en las asignaciones relevantes. + +### 2.3 Configurar Azure: Desde el Portal + +Los valores de endpoint y clave de Azure OpenAI se encontrarán en el [Portal de Azure](https://portal.azure.com?WT.mc_id=academic-105485-koreyst), así que comencemos allí. + +1. Ve al [Portal de Azure](https://portal.azure.com?WT.mc_id=academic-105485-koreyst) +1. Haz clic en la opción **Keys and Endpoint** en la barra lateral (menú a la izquierda). +1. Haz clic en **Show Keys** - deberías ver lo siguiente: KEY 1, KEY 2 y Endpoint. +1. Usa el valor de KEY 1 para AZURE_OPENAI_API_KEY +1. Usa el valor de Endpoint para AZURE_OPENAI_ENDPOINT + +A continuación, necesitamos los endpoints para los modelos específicos que hemos implementado. + +1. Haz clic en la opción **Model deployments** en la barra lateral (menú a la izquierda) para el recurso de Azure OpenAI. +1. En la página de destino, haz clic en **Manage Deployments** + +Esto te llevará al sitio web de Azure OpenAI Studio, donde encontraremos los otros valores como se describe a continuación. + +### 2.4 Configurar Azure: Desde el Studio + +1. Navega a [Azure OpenAI Studio](https://oai.azure.com?WT.mc_id=academic-105485-koreyst) **desde tu recurso** como se describió anteriormente. +1. Haz clic en la pestaña **Deployments** (barra lateral, izquierda) para ver los modelos actualmente implementados. +1. Si tu modelo deseado no está implementado, usa **Create new deployment** para implementarlo. +1. Necesitarás un modelo de _generación de texto_ - recomendamos: **gpt-35-turbo** +1. Necesitarás un modelo de _incrustación de texto_ - recomendamos **text-embedding-ada-002** + +Ahora actualiza las variables de entorno para reflejar el _nombre de implementación_ utilizado. Esto generalmente será el mismo que el nombre del modelo a menos que lo hayas cambiado explícitamente. Así que, como ejemplo, podrías tener: + +```bash +AZURE_OPENAI_DEPLOYMENT='gpt-35-turbo' +AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT='text-embedding-ada-002' +``` + +**No olvides guardar el archivo .env cuando termines**. Ahora puedes salir del archivo y volver a las instrucciones para ejecutar el cuaderno. + +### 2.5 Configurar OpenAI: Desde el Perfil + +Tu clave de API de OpenAI se puede encontrar en tu [cuenta de OpenAI](https://platform.openai.com/api-keys?WT.mc_id=academic-105485-koreyst). Si no tienes una, puedes registrarte para obtener una cuenta y crear una clave de API. Una vez que tengas la clave, puedes usarla para completar la variable `OPENAI_API_KEY` en el archivo `.env`. + +### 2.6 Configurar Hugging Face: Desde el Perfil + +Tu token de Hugging Face se puede encontrar en tu perfil bajo [Tokens de Acceso](https://huggingface.co/settings/tokens?WT.mc_id=academic-105485-koreyst). No los publiques ni compartas públicamente. En su lugar, crea un nuevo token para el uso de este proyecto y cópialo en el archivo `.env` bajo la variable `HUGGING_FACE_API_KEY`. _Nota:_ Técnicamente, este no es un API key, pero se usa para autenticación, por lo que mantenemos esa convención de nombres para consistencia. + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas 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 humana. No somos responsables de ningún 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/01-introduction-to-genai/README.md b/translations/es/01-introduction-to-genai/README.md new file mode 100644 index 000000000..404ac3cf7 --- /dev/null +++ b/translations/es/01-introduction-to-genai/README.md @@ -0,0 +1,139 @@ +# Introducción a la IA Generativa y los Modelos de Lenguaje a Gran Escala + +[![Introducción a la IA Generativa y los Modelos de Lenguaje a Gran Escala](../../../translated_images/01-lesson-banner.png?WT.e847a56bbd30dfd9341d21c4e957c3bcd9de94d06aa5bc91692a69cb1af2c994.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson-1-gh?WT.mc_id=academic-105485-koreyst) + +_(Haz clic en la imagen de arriba para ver el video de esta lección)_ + +La IA generativa es una inteligencia artificial capaz de generar texto, imágenes y otros tipos de contenido. Lo que la convierte en una tecnología fantástica es que democratiza la IA, cualquiera puede usarla con tan solo un mensaje de texto, una frase escrita en lenguaje natural. No es necesario aprender un lenguaje como Java o SQL para lograr algo valioso, solo necesitas usar tu lenguaje, expresar lo que deseas y obtendrás una sugerencia de un modelo de IA. Las aplicaciones e impactos de esto son enormes, puedes redactar o entender informes, escribir aplicaciones y mucho más, todo en cuestión de segundos. + +En este currículo, exploraremos cómo nuestra startup aprovecha la IA generativa para desbloquear nuevos escenarios en el mundo de la educación y cómo abordamos los inevitables desafíos asociados con las implicaciones sociales de su aplicación y las limitaciones tecnológicas. + +## Introducción + +Esta lección cubrirá: + +- Introducción al escenario empresarial: nuestra idea y misión de startup. +- IA generativa y cómo llegamos al panorama tecnológico actual. +- Funcionamiento interno de un modelo de lenguaje a gran escala. +- Principales capacidades y casos de uso práctico de los Modelos de Lenguaje a Gran Escala. + +## Objetivos de Aprendizaje + +Después de completar esta lección, entenderás: + +- Qué es la IA generativa y cómo funcionan los Modelos de Lenguaje a Gran Escala. +- Cómo puedes aprovechar los modelos de lenguaje a gran escala para diferentes casos de uso, con un enfoque en escenarios educativos. + +## Escenario: nuestra startup educativa + +La Inteligencia Artificial Generativa (IA) representa la cúspide de la tecnología de IA, empujando los límites de lo que una vez se pensó imposible. Los modelos de IA generativa tienen varias capacidades y aplicaciones, pero para este currículo exploraremos cómo está revolucionando la educación a través de una startup ficticia. Nos referiremos a esta startup como _nuestra startup_. Nuestra startup trabaja en el ámbito educativo con la ambiciosa misión de + +> _mejorar la accesibilidad en el aprendizaje, a escala global, asegurando el acceso equitativo a la educación y proporcionando experiencias de aprendizaje personalizadas a cada estudiante, según sus necesidades_. + +Nuestro equipo de startup es consciente de que no podremos lograr este objetivo sin aprovechar una de las herramientas más poderosas de los tiempos modernos: los Modelos de Lenguaje a Gran Escala (LLMs). + +Se espera que la IA generativa revolucione la forma en que aprendemos y enseñamos hoy en día, con estudiantes que tienen a su disposición maestros virtuales las 24 horas del día que proporcionan grandes cantidades de información y ejemplos, y maestros que pueden aprovechar herramientas innovadoras para evaluar a sus estudiantes y dar retroalimentación. + +![Cinco estudiantes jóvenes mirando un monitor - imagen de DALLE2](../../../translated_images/students-by-DALLE2.png?WT.540d623be2689660f18d0c126177502c651e2269597164cc09b60d7d90b830cf.es.mc_id=academic-105485-koreyst) + +Para empezar, definamos algunos conceptos básicos y terminología que usaremos a lo largo del currículo. + +## ¿Cómo obtuvimos la IA Generativa? + +A pesar del extraordinario _hype_ creado últimamente por el anuncio de modelos de IA generativa, esta tecnología lleva décadas en desarrollo, con los primeros esfuerzos de investigación que datan de los años 60. Ahora estamos en un punto en el que la IA tiene capacidades cognitivas humanas, como la conversación, como lo demuestran, por ejemplo, [OpenAI ChatGPT](https://openai.com/chatgpt) o [Bing Chat](https://www.microsoft.com/edge/features/bing-chat?WT.mc_id=academic-105485-koreyst), que también utiliza un modelo GPT para las conversaciones de búsqueda en la web de Bing. + +Retrocediendo un poco, los primeros prototipos de IA consistían en chatbots escritos a máquina, que dependían de una base de conocimientos extraída de un grupo de expertos y representada en una computadora. Las respuestas en la base de conocimientos se activaban por palabras clave que aparecían en el texto de entrada. +Sin embargo, pronto quedó claro que tal enfoque, usando chatbots escritos a máquina, no escalaba bien. + +### Un enfoque estadístico para la IA: Aprendizaje Automático + +Un punto de inflexión llegó durante los años 90, con la aplicación de un enfoque estadístico al análisis de texto. Esto llevó al desarrollo de nuevos algoritmos, conocidos con el nombre de aprendizaje automático, capaces de aprender patrones a partir de datos, sin ser programados explícitamente. Este enfoque permite a una máquina simular la comprensión del lenguaje humano: un modelo estadístico se entrena en emparejamientos de texto y etiquetas, lo que permite al modelo clasificar texto de entrada desconocido con una etiqueta predefinida que representa la intención del mensaje. + +### Redes neuronales y asistentes virtuales modernos + +En tiempos más recientes, la evolución tecnológica del hardware, capaz de manejar mayores cantidades de datos y cálculos más complejos, fomentó la investigación en los campos de la IA, llevando al desarrollo de algoritmos avanzados de aprendizaje automático, llamados redes neuronales o algoritmos de aprendizaje profundo. + +Las redes neuronales (y en particular las Redes Neuronales Recurrentes – RNNs) mejoraron significativamente el procesamiento del lenguaje natural, permitiendo la representación del significado del texto de una manera más significativa, valorando el contexto de una palabra en una oración. + +Esta es la tecnología que impulsó a los asistentes virtuales nacidos en la primera década del nuevo siglo, muy competentes en interpretar el lenguaje humano, identificar una necesidad y realizar una acción para satisfacerla, como responder con un guion predefinido o consumir un servicio de terceros. + +### Hoy en día, IA Generativa + +Así es como llegamos a la IA Generativa hoy, que puede verse como un subconjunto del aprendizaje profundo. + +![IA, ML, DL y IA Generativa](../../../translated_images/AI-diagram.png?WT.e126d57e1a443697cd851d5d04d66753225b4d910f4aff65f9f28215b528471a.es.mc_id=academic-105485-koreyst) + +Después de décadas de investigación en el campo de la IA, una nueva arquitectura de modelos, llamada _Transformer_, superó los límites de las RNNs, siendo capaz de procesar secuencias de texto mucho más largas como entrada. Los Transformers se basan en el mecanismo de atención, que permite al modelo dar diferentes pesos a las entradas que recibe, 'prestando más atención' donde se concentra la información más relevante, independientemente de su orden en la secuencia de texto. + +La mayoría de los modelos recientes de IA generativa, también conocidos como Modelos de Lenguaje a Gran Escala (LLMs), ya que trabajan con entradas y salidas textuales, están de hecho basados en esta arquitectura. Lo interesante de estos modelos, entrenados en una enorme cantidad de datos no etiquetados de diversas fuentes como libros, artículos y sitios web, es que pueden adaptarse a una amplia variedad de tareas y generar texto gramaticalmente correcto con una apariencia de creatividad. Así que, no solo mejoraron increíblemente la capacidad de una máquina para 'entender' un texto de entrada, sino que habilitaron su capacidad para generar una respuesta original en lenguaje humano. + +## ¿Cómo funcionan los modelos de lenguaje a gran escala? + +En el próximo capítulo vamos a explorar diferentes tipos de modelos de IA Generativa, pero por ahora echemos un vistazo a cómo funcionan los modelos de lenguaje a gran escala, con un enfoque en los modelos GPT (Generative Pre-trained Transformer) de OpenAI. + +- **Tokenizador, texto a números**: Los Modelos de Lenguaje a Gran Escala reciben un texto como entrada y generan un texto como salida. Sin embargo, siendo modelos estadísticos, trabajan mucho mejor con números que con secuencias de texto. Por eso, cada entrada al modelo es procesada por un tokenizador, antes de ser utilizada por el modelo principal. Un token es un fragmento de texto, que consta de un número variable de caracteres, por lo que la tarea principal del tokenizador es dividir la entrada en una matriz de tokens. Luego, cada token se mapea con un índice de token, que es la codificación entera del fragmento de texto original. + +![Ejemplo de tokenización](../../../translated_images/tokenizer-example.png?WT.3b4be927057ceb39216ffc617cde2fd4d843e0d7557fc81d08a0018831f601ed.es.mc_id=academic-105485-koreyst) + +- **Predicción de tokens de salida**: Dados n tokens como entrada (con un máximo n que varía de un modelo a otro), el modelo es capaz de predecir un token como salida. Este token se incorpora luego en la entrada de la siguiente iteración, en un patrón de ventana expansiva, permitiendo una mejor experiencia de usuario al obtener una (o varias) oraciones como respuesta. Esto explica por qué, si alguna vez jugaste con ChatGPT, podrías haber notado que a veces parece que se detiene en medio de una oración. + +- **Proceso de selección, distribución de probabilidad**: El token de salida es elegido por el modelo según su probabilidad de ocurrir después de la secuencia de texto actual. Esto se debe a que el modelo predice una distribución de probabilidad sobre todos los posibles 'siguientes tokens', calculada en base a su entrenamiento. Sin embargo, no siempre se elige el token con la mayor probabilidad de la distribución resultante. Se añade un grado de aleatoriedad a esta elección, de manera que el modelo actúa de manera no determinista, no obtenemos la misma salida exacta para la misma entrada. Este grado de aleatoriedad se añade para simular el proceso de pensamiento creativo y puede ajustarse usando un parámetro del modelo llamado temperatura. + +## ¿Cómo puede nuestra startup aprovechar los Modelos de Lenguaje a Gran Escala? + +Ahora que tenemos una mejor comprensión del funcionamiento interno de un modelo de lenguaje a gran escala, veamos algunos ejemplos prácticos de las tareas más comunes que pueden realizar bastante bien, con un ojo puesto en nuestro escenario empresarial. +Dijimos que la capacidad principal de un Modelo de Lenguaje a Gran Escala es _generar un texto desde cero, partiendo de una entrada textual, escrita en lenguaje natural_. + +Pero, ¿qué tipo de entrada y salida textual? +La entrada de un modelo de lenguaje a gran escala se conoce como prompt, mientras que la salida se conoce como completion, término que se refiere al mecanismo del modelo de generar el siguiente token para completar la entrada actual. Vamos a profundizar en qué es un prompt y cómo diseñarlo de manera que saquemos el máximo provecho de nuestro modelo. Pero por ahora, digamos que un prompt puede incluir: + +- Una **instrucción** que especifique el tipo de salida que esperamos del modelo. Esta instrucción a veces puede incluir algunos ejemplos o datos adicionales. + + 1. Resumen de un artículo, libro, reseñas de productos y más, junto con la extracción de ideas de datos no estructurados. + + ![Ejemplo de resumen](../../../translated_images/summarization-example.png?WT.cf0bac4d43b9de29ec37e1b7707d9bd67e030f4e884a0ae778c6a3c36be77d79.es.mc_id=academic-105485-koreyst) + + 2. Ideación creativa y diseño de un artículo, un ensayo, una tarea o más. + + ![Ejemplo de escritura creativa](../../../translated_images/creative-writing-example.png?WT.04b03c92f46ed96df1138828e37760ac81e06eaa8602de8c4b175a9c514c9a14.es.mc_id=academic-105485-koreyst) + +- Una **pregunta**, formulada en forma de conversación con un agente. + + ![Ejemplo de conversación](../../../translated_images/conversation-example.png?WT.f904fd4c48fbf695b8e5d334e1ec02d66830bbc679ad4b5195f1c563e9bfbdc1.es.mc_id=academic-105485-koreyst) + +- Un fragmento de **texto para completar**, que implícitamente es una solicitud de asistencia de escritura. + + ![Ejemplo de finalización de texto](../../../translated_images/text-completion-example.png?WT.9a641431b14ebbbcaa7d22def9729cf8cc7ab358b1dbc948653e43af47e41f73.es.mc_id=academic-105485-koreyst) + +- Un fragmento de **código** junto con la solicitud de explicarlo y documentarlo, o un comentario pidiendo generar un fragmento de código que realice una tarea específica. + + ![Ejemplo de codificación](../../../translated_images/coding-example.png?WT.75933a45164ffb74ffbb4a72c8f77b0f76ebcdc676a58ad2871de5d32db63515.es.mc_id=academic-105485-koreyst) + +Los ejemplos anteriores son bastante simples y no pretenden ser una demostración exhaustiva de las capacidades de los Modelos de Lenguaje a Gran Escala. Solo quieren mostrar el potencial de usar IA generativa, en particular pero no limitado al contexto educativo. + +Además, la salida de un modelo de IA generativa no es perfecta y, a veces, la creatividad del modelo puede jugar en su contra, resultando en una salida que es una combinación de palabras que el usuario humano puede interpretar como una distorsión de la realidad, o puede ser ofensiva. La IA generativa no es inteligente, al menos en la definición más completa de inteligencia, que incluye razonamiento crítico y creativo o inteligencia emocional; no es determinista, y no es confiable, ya que fabricaciones, como referencias erróneas, contenido y declaraciones, pueden combinarse con información correcta y presentarse de manera persuasiva y confiada. En las lecciones siguientes, abordaremos todas estas limitaciones y veremos qué podemos hacer para mitigarlas. + +## Tarea + +Tu tarea es leer más sobre [IA generativa](https://en.wikipedia.org/wiki/Generative_artificial_intelligence?WT.mc_id=academic-105485-koreyst) e intentar identificar un área donde agregarías IA generativa hoy que no la tenga. ¿Cómo sería el impacto diferente de hacerlo a la "vieja manera", puedes hacer algo que no podías antes, o eres más rápido? Escribe un resumen de 300 palabras sobre cómo sería tu startup de IA soñada e incluye encabezados como "Problema", "Cómo usaría la IA", "Impacto" y opcionalmente un plan de negocios. + +Si realizaste esta tarea, incluso podrías estar listo para postularte al incubador de Microsoft, [Microsoft for Startups Founders Hub](https://www.microsoft.com/startups?WT.mc_id=academic-105485-koreyst), ofrecemos créditos tanto para Azure, OpenAI, mentoría y mucho más, ¡échale un vistazo! + +## Comprobación de conocimiento + +¿Qué es cierto sobre los modelos de lenguaje a gran escala? + +1. Obtienes la misma respuesta exacta cada vez. +1. Hace las cosas perfectamente, excelente en sumar números, producir código funcional, etc. +1. La respuesta puede variar a pesar de usar el mismo prompt. También es excelente para darte un primer borrador de algo, ya sea texto o código. Pero necesitas mejorar los resultados. + +A: 3, un LLM es no determinista, la respuesta varía, sin embargo, puedes controlar su variación a través de un ajuste de temperatura. Tampoco deberías esperar que haga las cosas perfectamente, está aquí para hacer el trabajo pesado por ti, lo que a menudo significa que obtienes un buen primer intento en algo que necesitas mejorar gradualmente. + +## ¡Gran trabajo! Continúa el viaje + +Después de completar esta lección, consulta nuestra [colección de aprendizaje de IA Generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para seguir mejorando tu conocimiento sobre IA Generativa. + +Dirígete a la Lección 2 donde veremos cómo [explorar y comparar diferentes tipos de LLM](../02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst)! + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas 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 humana. No nos hacemos responsables de ningún 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-exploring-and-comparing-different-llms/README.md b/translations/es/02-exploring-and-comparing-different-llms/README.md new file mode 100644 index 000000000..93fef04e8 --- /dev/null +++ b/translations/es/02-exploring-and-comparing-different-llms/README.md @@ -0,0 +1,201 @@ +# Explorando y comparando diferentes LLMs + +[![Explorando y comparando diferentes LLMs](../../../translated_images/02-lesson-banner.png?WT.96d85175e46909d65f6895923ed5f3ad0ae5e874792ccad49542fcfe8ebd12dd.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson2-gh?WT.mc_id=academic-105485-koreyst) + +> _Haz clic en la imagen de arriba para ver el video de esta lección_ + +En la lección anterior, vimos cómo la IA Generativa está cambiando el panorama tecnológico, cómo funcionan los Modelos de Lenguaje Grande (LLMs) y cómo una empresa, como nuestra startup, puede aplicarlos a sus casos de uso y crecer. En este capítulo, vamos a comparar y contrastar diferentes tipos de modelos de lenguaje grande (LLMs) para entender sus pros y contras. + +El siguiente paso en el camino de nuestra startup es explorar el panorama actual de los LLMs y entender cuáles son adecuados para nuestro caso de uso. + +## Introducción + +Esta lección cubrirá: + +- Diferentes tipos de LLMs en el panorama actual. +- Probar, iterar y comparar diferentes modelos para tu caso de uso en Azure. +- Cómo desplegar un LLM. + +## Objetivos de aprendizaje + +Después de completar esta lección, podrás: + +- Seleccionar el modelo adecuado para tu caso de uso. +- Entender cómo probar, iterar y mejorar el rendimiento de tu modelo. +- Saber cómo las empresas despliegan modelos. + +## Entender diferentes tipos de LLMs + +Los LLMs pueden tener múltiples categorizaciones basadas en su arquitectura, datos de entrenamiento y caso de uso. Entender estas diferencias ayudará a nuestra startup a seleccionar el modelo correcto para el escenario y entender cómo probar, iterar y mejorar el rendimiento. + +Existen muchos tipos diferentes de modelos LLM, tu elección de modelo depende de para qué planeas usarlos, tus datos, cuánto estás dispuesto a pagar y más. + +Dependiendo de si planeas usar los modelos para texto, audio, video, generación de imágenes, etc., podrías optar por un tipo diferente de modelo. + +- **Reconocimiento de audio y voz**. Para este propósito, los modelos tipo Whisper son una gran elección ya que son de propósito general y están orientados al reconocimiento de voz. Está entrenado en audio diverso y puede realizar reconocimiento de voz multilingüe. Aprende más sobre [modelos tipo Whisper aquí](https://platform.openai.com/docs/models/whisper?WT.mc_id=academic-105485-koreyst). + +- **Generación de imágenes**. Para la generación de imágenes, DALL-E y Midjourney son dos opciones muy conocidas. DALL-E es ofrecido por Azure OpenAI. [Lee más sobre DALL-E aquí](https://platform.openai.com/docs/models/dall-e?WT.mc_id=academic-105485-koreyst) y también en el Capítulo 9 de este currículo. + +- **Generación de texto**. La mayoría de los modelos están entrenados en generación de texto y tienes una gran variedad de opciones desde GPT-3.5 hasta GPT-4. Vienen a diferentes costos, siendo GPT-4 el más caro. Vale la pena echar un vistazo al [Azure OpenAI playground](https://oai.azure.com/portal/playground?WT.mc_id=academic-105485-koreyst) para evaluar qué modelos se adaptan mejor a tus necesidades en términos de capacidad y costo. + +- **Multimodalidad**. Si buscas manejar múltiples tipos de datos en entrada y salida, podrías querer ver modelos como [gpt-4 turbo con visión o gpt-4o](https://learn.microsoft.com/azure/ai-services/openai/concepts/models#gpt-4-and-gpt-4-turbo-models?WT.mc_id=academic-105485-koreyst) - las últimas versiones de modelos de OpenAI - que son capaces de combinar el procesamiento del lenguaje natural con la comprensión visual, permitiendo interacciones a través de interfaces multimodales. + +Seleccionar un modelo significa que obtienes algunas capacidades básicas, que podrían no ser suficientes. A menudo tienes datos específicos de la empresa que de alguna manera necesitas comunicar al LLM. Hay algunas opciones diferentes sobre cómo abordar eso, más sobre eso en las secciones siguientes. + +### Modelos Fundacionales versus LLMs + +El término Modelo Fundacional fue [acuñado por investigadores de Stanford](https://arxiv.org/abs/2108.07258?WT.mc_id=academic-105485-koreyst) y definido como un modelo de IA que sigue algunos criterios, tales como: + +- **Están entrenados usando aprendizaje no supervisado o aprendizaje auto-supervisado**, lo que significa que están entrenados en datos multimodales no etiquetados, y no requieren anotación o etiquetado humano de datos para su proceso de entrenamiento. +- **Son modelos muy grandes**, basados en redes neuronales muy profundas entrenadas en miles de millones de parámetros. +- **Normalmente están destinados a servir como una ‘base’ para otros modelos**, lo que significa que pueden usarse como punto de partida para que otros modelos se construyan sobre ellos, lo que puede hacerse mediante ajuste fino. + +![Modelos Fundacionales versus LLMs](../../../translated_images/FoundationModel.png?WT.9690c2a9f6be278baf730a5b26ea901ac6d6ede04cad555ef2b59d774ba557eb.es.mc_id=academic-105485-koreyst) + +Fuente de la imagen: [Guía esencial para modelos fundacionales y modelos de lenguaje grande | por Babar M Bhatti | Medium +](https://thebabar.medium.com/essential-guide-to-foundation-models-and-large-language-models-27dab58f7404) + +Para aclarar aún más esta distinción, tomemos ChatGPT como ejemplo. Para construir la primera versión de ChatGPT, un modelo llamado GPT-3.5 sirvió como modelo fundacional. Esto significa que OpenAI usó algunos datos específicos de chat para crear una versión ajustada de GPT-3.5 que estaba especializada en desempeñarse bien en escenarios conversacionales, como chatbots. + +![Modelo Fundacional](../../../translated_images/Multimodal.png?WT.29151b07403f77b38d7dc2a3069f4c171198d59c9df6bdfccd4326c209db4432.es.mc_id=academic-105485-koreyst) + +Fuente de la imagen: [2108.07258.pdf (arxiv.org)](https://arxiv.org/pdf/2108.07258.pdf?WT.mc_id=academic-105485-koreyst) + +### Modelos de Código Abierto versus Propietarios + +Otra forma de categorizar los LLMs es si son de código abierto o propietarios. + +Los modelos de código abierto son modelos que están disponibles para el público y pueden ser usados por cualquiera. A menudo son puestos a disposición por la empresa que los creó, o por la comunidad de investigación. Estos modelos pueden ser inspeccionados, modificados y personalizados para los diversos casos de uso en LLMs. Sin embargo, no siempre están optimizados para uso en producción, y pueden no ser tan eficientes como los modelos propietarios. Además, la financiación para modelos de código abierto puede ser limitada, y pueden no ser mantenidos a largo plazo o no ser actualizados con la última investigación. Ejemplos de modelos de código abierto populares incluyen [Alpaca](https://crfm.stanford.edu/2023/03/13/alpaca.html?WT.mc_id=academic-105485-koreyst), [Bloom](https://huggingface.co/bigscience/bloom) y [LLaMA](https://llama.meta.com). + +Los modelos propietarios son modelos que son propiedad de una empresa y no están disponibles para el público. Estos modelos a menudo están optimizados para uso en producción. Sin embargo, no se permite que sean inspeccionados, modificados o personalizados para diferentes casos de uso. Además, no siempre están disponibles de forma gratuita y pueden requerir una suscripción o pago para su uso. También, los usuarios no tienen control sobre los datos que se utilizan para entrenar el modelo, lo que significa que deben confiar en el propietario del modelo para garantizar el compromiso con la privacidad de los datos y el uso responsable de la IA. Ejemplos de modelos propietarios populares incluyen [Modelos de OpenAI](https://platform.openai.com/docs/models/overview?WT.mc_id=academic-105485-koreyst), [Google Bard](https://sapling.ai/llm/bard?WT.mc_id=academic-105485-koreyst) o [Claude 2](https://www.anthropic.com/index/claude-2?WT.mc_id=academic-105485-koreyst). + +### Embedding versus Generación de Imágenes versus Generación de Texto y Código + +Los LLMs también pueden categorizarse por la salida que generan. + +Los embeddings son un conjunto de modelos que pueden convertir texto en una forma numérica, llamada embedding, que es una representación numérica del texto de entrada. Los embeddings facilitan que las máquinas entiendan las relaciones entre palabras o frases y pueden ser consumidos como entradas por otros modelos, como modelos de clasificación o modelos de clustering que tienen un mejor rendimiento en datos numéricos. Los modelos de embedding a menudo se utilizan para el aprendizaje por transferencia, donde se construye un modelo para una tarea sustituta para la cual hay una abundancia de datos, y luego los pesos del modelo (embeddings) se reutilizan para otras tareas posteriores. Un ejemplo de esta categoría es [OpenAI embeddings](https://platform.openai.com/docs/models/embeddings?WT.mc_id=academic-105485-koreyst). + +![Embedding](../../../translated_images/Embedding.png?WT.15a2282d046c6d94a54f553fa9e7f19e3ef0e65f9eb05f4d476a5d28b2dead18.es.mc_id=academic-105485-koreyst) + +Los modelos de generación de imágenes son modelos que generan imágenes. Estos modelos a menudo se utilizan para la edición de imágenes, síntesis de imágenes y traducción de imágenes. Los modelos de generación de imágenes a menudo se entrenan en grandes conjuntos de datos de imágenes, como [LAION-5B](https://laion.ai/blog/laion-5b/?WT.mc_id=academic-105485-koreyst), y pueden usarse para generar nuevas imágenes o para editar imágenes existentes con técnicas de inpainting, super-resolución y colorización. Ejemplos incluyen [DALL-E-3](https://openai.com/dall-e-3?WT.mc_id=academic-105485-koreyst) y [Modelos de Difusión Estable](https://github.com/Stability-AI/StableDiffusion?WT.mc_id=academic-105485-koreyst). + +![Generación de imágenes](../../../translated_images/Image.png?WT.6a1995ff7d9be5a713e6aaee5f1625f31620756937c283e292ef5ffe1e30ed11.es.mc_id=academic-105485-koreyst) + +Los modelos de generación de texto y código son modelos que generan texto o código. Estos modelos a menudo se utilizan para la resumisión de texto, traducción y respuesta a preguntas. Los modelos de generación de texto a menudo se entrenan en grandes conjuntos de datos de texto, como [BookCorpus](https://www.cv-foundation.org/openaccess/content_iccv_2015/html/Zhu_Aligning_Books_and_ICCV_2015_paper.html?WT.mc_id=academic-105485-koreyst), y pueden usarse para generar nuevo texto o para responder preguntas. Los modelos de generación de código, como [CodeParrot](https://huggingface.co/codeparrot?WT.mc_id=academic-105485-koreyst), a menudo se entrenan en grandes conjuntos de datos de código, como GitHub, y pueden usarse para generar nuevo código o para corregir errores en el código existente. + +![Generación de texto y código](../../../translated_images/Text.png?WT.b55b7b9b96faac1d758fb555436c56c5a323a55743b75e70198160caca3fb73c.es.mc_id=academic-105485-koreyst) + +### Encoder-Decoder versus Solo Decoder + +Para hablar sobre los diferentes tipos de arquitecturas de LLMs, usemos una analogía. + +Imagina que tu gerente te dio una tarea para escribir un cuestionario para los estudiantes. Tienes dos colegas; uno se encarga de crear el contenido y el otro se encarga de revisarlo. + +El creador de contenido es como un modelo de Solo Decoder, puede mirar el tema y ver lo que ya escribiste y luego puede escribir un curso basado en eso. Son muy buenos escribiendo contenido atractivo e informativo, pero no son muy buenos entendiendo el tema y los objetivos de aprendizaje. Algunos ejemplos de modelos Decoder son los modelos de la familia GPT, como GPT-3. + +El revisor es como un modelo de Solo Encoder, miran el curso escrito y las respuestas, notando la relación entre ellos y entendiendo el contexto, pero no son buenos generando contenido. Un ejemplo de modelo Solo Encoder sería BERT. + +Imagina que también podemos tener a alguien que pueda crear y revisar el cuestionario, este es un modelo Encoder-Decoder. Algunos ejemplos serían BART y T5. + +### Servicio versus Modelo + +Ahora, hablemos de la diferencia entre un servicio y un modelo. Un servicio es un producto que es ofrecido por un Proveedor de Servicios en la Nube, y a menudo es una combinación de modelos, datos y otros componentes. Un modelo es el componente central de un servicio, y a menudo es un modelo fundacional, como un LLM. + +Los servicios a menudo están optimizados para uso en producción y a menudo son más fáciles de usar que los modelos, a través de una interfaz gráfica de usuario. Sin embargo, los servicios no siempre están disponibles de forma gratuita y pueden requerir una suscripción o pago para su uso, a cambio de aprovechar el equipo y los recursos del propietario del servicio, optimizando los gastos y escalando fácilmente. Un ejemplo de servicio es [Azure OpenAI Service](https://learn.microsoft.com/azure/ai-services/openai/overview?WT.mc_id=academic-105485-koreyst), que ofrece un plan de tarifas de pago por uso, lo que significa que los usuarios son cobrados proporcionalmente a cuánto usan el servicio. Además, Azure OpenAI Service ofrece seguridad de nivel empresarial y un marco de IA responsable además de las capacidades de los modelos. + +Los modelos son solo la Red Neuronal, con los parámetros, pesos y otros. Permiten a las empresas operar localmente, sin embargo, necesitarían comprar equipo, construir una estructura para escalar y comprar una licencia o usar un modelo de código abierto. Un modelo como LLaMA está disponible para ser usado, requiriendo poder computacional para ejecutar el modelo. + +## Cómo probar e iterar con diferentes modelos para entender el rendimiento en Azure + +Una vez que nuestro equipo ha explorado el panorama actual de los LLMs e identificado algunos buenos candidatos para sus escenarios, el siguiente paso es probarlos en sus datos y en su carga de trabajo. Este es un proceso iterativo, realizado mediante experimentos y medidas. La mayoría de los modelos que mencionamos en párrafos anteriores (modelos de OpenAI, modelos de código abierto como Llama2 y transformadores de Hugging Face) están disponibles en el [Catálogo de Modelos](https://learn.microsoft.com/azure/ai-studio/how-to/model-catalog-overview?WT.mc_id=academic-105485-koreyst) en [Azure AI Studio](https://ai.azure.com/?WT.mc_id=academic-105485-koreyst). + +[Azure AI Studio](https://learn.microsoft.com/azure/ai-studio/what-is-ai-studio?WT.mc_id=academic-105485-koreyst) es una Plataforma en la Nube diseñada para desarrolladores que desean construir aplicaciones de IA generativa y gestionar todo el ciclo de desarrollo, desde la experimentación hasta la evaluación, combinando todos los servicios de Azure AI en un único centro con una práctica interfaz gráfica. El Catálogo de Modelos en Azure AI Studio permite al usuario: + +- Encontrar el Modelo Fundacional de interés en el catálogo, ya sea propietario o de código abierto, filtrando por tarea, licencia o nombre. Para mejorar la búsqueda, los modelos están organizados en colecciones, como la colección de Azure OpenAI, colección de Hugging Face y más. + +![Catálogo de Modelos](../../../translated_images/AzureAIStudioModelCatalog.png?WT.cd7b78fc6a7b010869adb0defabce1ea5fbe62131aa7f59e54a083be8d789d24.es.mc_id=academic-105485-koreyst) + +- Revisar la tarjeta del modelo, incluyendo una descripción detallada del uso previsto y datos de entrenamiento, ejemplos de código y resultados de evaluación en la biblioteca de evaluaciones internas. + +![Tarjeta del Modelo](../../../translated_images/ModelCard.png?WT.cd385d3d0228f86cef5987e3074be75f377a95ba505d6805f7c6965dc5972693.es.mc_id=academic-105485-koreyst) +- Compara los benchmarks entre modelos y conjuntos de datos disponibles en la industria para evaluar cuál se ajusta al escenario empresarial, a través del panel de [Model Benchmarks](https://learn.microsoft.com/azure/ai-studio/how-to/model-benchmarks?WT.mc_id=academic-105485-koreyst). + +![Model benchmarks](../../../translated_images/ModelBenchmarks.png?WT.634f688bb2a74b3c90a9212ecfb9b99045405b2414be3d17429cfea319c06f61.es.mc_id=academic-105485-koreyst) + +- Ajusta el modelo en datos de entrenamiento personalizados para mejorar el rendimiento del modelo en una carga de trabajo específica, aprovechando las capacidades de experimentación y seguimiento de Azure AI Studio. + +![Model fine-tuning](../../../translated_images/FineTuning.png?WT.523a6ab7580c924e42e8478d072fb670f879033779b8ab5a6abb155d2fc63d5a.es.mc_id=academic-105485-koreyst) + +- Despliega el modelo preentrenado original o la versión ajustada para una inferencia remota en tiempo real - computación gestionada - o un endpoint de API sin servidor - [pago por uso](https://learn.microsoft.com/azure/ai-studio/how-to/model-catalog-overview#model-deployment-managed-compute-and-serverless-api-pay-as-you-go?WT.mc_id=academic-105485-koreyst) - para permitir que las aplicaciones lo consuman. + +![Model deployment](../../../translated_images/ModelDeploy.png?WT.a765ca6b7a396eb5d2fd346f8a211542f6fe578e2218bbe16f9fcdb5ca8f3661.es.mc_id=academic-105485-koreyst) + +> [!NOTE] +> No todos los modelos en el catálogo están actualmente disponibles para ajuste fino y/o despliegue de pago por uso. Consulta la tarjeta del modelo para obtener detalles sobre las capacidades y limitaciones del modelo. + +## Mejorando los resultados de LLM + +Hemos explorado con nuestro equipo de startup diferentes tipos de LLMs y una plataforma en la nube (Azure Machine Learning) que nos permite comparar diferentes modelos, evaluarlos en datos de prueba, mejorar el rendimiento y desplegarlos en endpoints de inferencia. + +Pero ¿cuándo deberían considerar ajustar un modelo en lugar de usar uno preentrenado? ¿Existen otros enfoques para mejorar el rendimiento del modelo en cargas de trabajo específicas? + +Hay varios enfoques que una empresa puede usar para obtener los resultados que necesita de un LLM. Puedes seleccionar diferentes tipos de modelos con distintos grados de entrenamiento al desplegar un LLM en producción, con diferentes niveles de complejidad, costo y calidad. Aquí hay algunos enfoques diferentes: + +- **Ingeniería de prompts con contexto**. La idea es proporcionar suficiente contexto cuando solicitas para asegurar que obtienes las respuestas que necesitas. + +- **Generación Aumentada por Recuperación, RAG**. Tus datos pueden existir en una base de datos o endpoint web, por ejemplo, para asegurar que estos datos, o un subconjunto de ellos, se incluyan al momento de solicitar, puedes obtener los datos relevantes y hacer que formen parte del prompt del usuario. + +- **Modelo ajustado**. Aquí, entrenas el modelo más en tus propios datos, lo que lleva a que el modelo sea más exacto y responda mejor a tus necesidades, pero podría ser costoso. + +![LLMs deployment](../../../translated_images/Deploy.png?WT.0eeb36a208bf2bf97ea1058e54c74e13f5c810679cd7f3600cb2084b98d737be.es.mc_id=academic-105485-koreyst) + +Fuente de la imagen: [Four Ways that Enterprises Deploy LLMs | Fiddler AI Blog](https://www.fiddler.ai/blog/four-ways-that-enterprises-deploy-llms?WT.mc_id=academic-105485-koreyst) + +### Ingeniería de Prompts con Contexto + +Los LLMs preentrenados funcionan muy bien en tareas generales de lenguaje natural, incluso llamándolos con un prompt corto, como una oración para completar o una pregunta, el llamado aprendizaje "zero-shot". + +Sin embargo, cuanto más el usuario pueda enmarcar su consulta, con una solicitud detallada y ejemplos – el Contexto – más precisa y cercana a las expectativas del usuario será la respuesta. En este caso, hablamos de aprendizaje "one-shot" si el prompt incluye solo un ejemplo y "few-shot learning" si incluye múltiples ejemplos. La ingeniería de prompts con contexto es el enfoque más rentable para comenzar. + +### Generación Aumentada por Recuperación (RAG) + +Los LLMs tienen la limitación de que solo pueden usar los datos que se han utilizado durante su entrenamiento para generar una respuesta. Esto significa que no saben nada sobre los hechos que ocurrieron después de su proceso de entrenamiento, y no pueden acceder a información no pública (como datos de la empresa). Esto se puede superar a través de RAG, una técnica que aumenta el prompt con datos externos en forma de fragmentos de documentos, considerando los límites de longitud del prompt. Esto es compatible con herramientas de bases de datos Vector (como [Azure Vector Search](https://learn.microsoft.com/azure/search/vector-search-overview?WT.mc_id=academic-105485-koreyst)) que recuperan los fragmentos útiles de diversas fuentes de datos predefinidas y los agregan al Contexto del prompt. + +Esta técnica es muy útil cuando una empresa no tiene suficientes datos, tiempo o recursos para ajustar un LLM, pero aún desea mejorar el rendimiento en una carga de trabajo específica y reducir los riesgos de fabricaciones, es decir, mistificación de la realidad o contenido dañino. + +### Modelo ajustado + +El ajuste fino es un proceso que aprovecha el aprendizaje por transferencia para 'adaptar' el modelo a una tarea posterior o para resolver un problema específico. A diferencia del aprendizaje few-shot y RAG, resulta en un nuevo modelo generado, con pesos y sesgos actualizados. Requiere un conjunto de ejemplos de entrenamiento que consisten en una sola entrada (el prompt) y su salida asociada (la finalización). Este sería el enfoque preferido si: + +- **Usando modelos ajustados**. Una empresa desearía usar modelos ajustados menos capaces (como modelos de incrustación) en lugar de modelos de alto rendimiento, resultando en una solución más rentable y rápida. + +- **Considerando la latencia**. La latencia es importante para un caso de uso específico, por lo que no es posible usar prompts muy largos o el número de ejemplos que deben aprenderse del modelo no encaja con el límite de longitud del prompt. + +- **Manteniéndose actualizado**. Una empresa tiene muchos datos de alta calidad y etiquetas de verdad fundamental y los recursos necesarios para mantener estos datos actualizados a lo largo del tiempo. + +### Modelo entrenado + +Entrenar un LLM desde cero es sin duda el enfoque más difícil y complejo de adoptar, requiriendo grandes cantidades de datos, recursos calificados y potencia computacional adecuada. Esta opción debería considerarse solo en un escenario donde una empresa tenga un caso de uso específico del dominio y una gran cantidad de datos centrados en el dominio. + +## Comprobación de conocimiento + +¿Cuál podría ser un buen enfoque para mejorar los resultados de finalización de LLM? + +1. Ingeniería de prompts con contexto +2. RAG +3. Modelo ajustado + +A:3, si tienes el tiempo y los recursos y datos de alta calidad, el ajuste fino es la mejor opción para mantenerse actualizado. Sin embargo, si estás buscando mejorar las cosas y te falta tiempo, vale la pena considerar primero RAG. + +## 🚀 Desafío + +Lee más sobre cómo puedes [usar RAG](https://learn.microsoft.com/azure/search/retrieval-augmented-generation-overview?WT.mc_id=academic-105485-koreyst) para tu negocio. + +## Buen trabajo, continúa tu aprendizaje + +Después de completar esta lección, consulta nuestra [colección de aprendizaje de IA Generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para seguir mejorando tus conocimientos en IA Generativa. + +Dirígete a la Lección 3 donde veremos cómo [construir con IA Generativa de manera responsable](../03-using-generative-ai-responsibly/README.md?WT.mc_id=academic-105485-koreyst)! + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien 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 la traducción profesional humana. No nos hacemos responsables de ningún 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-using-generative-ai-responsibly/README.md b/translations/es/03-using-generative-ai-responsibly/README.md new file mode 100644 index 000000000..5e6b654ce --- /dev/null +++ b/translations/es/03-using-generative-ai-responsibly/README.md @@ -0,0 +1,136 @@ +# Uso Responsable de la IA Generativa + +[![Uso Responsable de la IA Generativa](../../../translated_images/03-lesson-banner.png?WT.b0b917735411b39a55748e827c5c3121004890110b27f306bfe685c450c81ff9.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson3-gh?WT.mc_id=academic-105485-koreyst) + +> _Haz clic en la imagen de arriba para ver el video de esta lección_ + +Es fácil sentirse fascinado por la IA y la IA generativa en particular, pero es importante considerar cómo usarla de manera responsable. Debes considerar aspectos como asegurar que el resultado sea justo, no dañino y más. Este capítulo tiene como objetivo proporcionarte el contexto mencionado, qué considerar y cómo tomar medidas activas para mejorar tu uso de la IA. + +## Introducción + +Esta lección cubrirá: + +- Por qué deberías priorizar la IA Responsable al construir aplicaciones de IA Generativa. +- Principios fundamentales de la IA Responsable y cómo se relacionan con la IA Generativa. +- Cómo poner en práctica estos principios de IA Responsable a través de estrategias y herramientas. + +## Objetivos de Aprendizaje + +Al completar esta lección, sabrás: + +- La importancia de la IA Responsable al construir aplicaciones de IA Generativa. +- Cuándo pensar y aplicar los principios fundamentales de la IA Responsable al construir aplicaciones de IA Generativa. +- Qué herramientas y estrategias están disponibles para poner en práctica el concepto de IA Responsable. + +## Principios de IA Responsable + +La emoción por la IA Generativa nunca ha sido tan alta. Esta emoción ha atraído a muchos nuevos desarrolladores, atención y financiamiento a este espacio. Si bien esto es muy positivo para cualquiera que busque construir productos y empresas utilizando IA Generativa, también es importante proceder de manera responsable. + +A lo largo de este curso, nos enfocamos en construir nuestra startup y nuestro producto educativo de IA. Usaremos los principios de la IA Responsable: Equidad, Inclusividad, Confiabilidad/Seguridad, Seguridad y Privacidad, Transparencia y Responsabilidad. Con estos principios, exploraremos cómo se relacionan con nuestro uso de la IA Generativa en nuestros productos. + +## Por Qué Deberías Priorizar la IA Responsable + +Al construir un producto, adoptar un enfoque centrado en el ser humano teniendo en cuenta el mejor interés de tus usuarios conduce a los mejores resultados. + +La singularidad de la IA Generativa es su capacidad para crear respuestas útiles, información, orientación y contenido para los usuarios. Esto se puede hacer sin muchos pasos manuales, lo que puede llevar a resultados muy impresionantes. Sin una planificación y estrategias adecuadas, también puede, lamentablemente, conducir a algunos resultados dañinos para tus usuarios, tu producto y la sociedad en general. + +Veamos algunos (pero no todos) de estos resultados potencialmente dañinos: + +### Alucinaciones + +Las alucinaciones son un término utilizado para describir cuando un LLM produce contenido que es completamente sin sentido o algo que sabemos que es incorrecto fácticamente basado en otras fuentes de información. + +Tomemos, por ejemplo, que construimos una función para nuestra startup que permite a los estudiantes hacer preguntas históricas a un modelo. Un estudiante hace la pregunta `Who was the sole survivor of Titanic?` + +El modelo produce una respuesta como la siguiente: + +![Prompt diciendo "¿Quién fue el único sobreviviente del Titanic?"](../../../03-using-generative-ai-responsibly/images/ChatGPT-titanic-survivor-prompt.webp) + +> _(Fuente: [Flying bisons](https://flyingbisons.com?WT.mc_id=academic-105485-koreyst))_ + +Esta es una respuesta muy confiada y completa. Desafortunadamente, es incorrecta. Incluso con una cantidad mínima de investigación, uno descubriría que hubo más de un sobreviviente del desastre del Titanic. Para un estudiante que recién comienza a investigar este tema, esta respuesta puede ser lo suficientemente persuasiva como para no ser cuestionada y tratada como un hecho. Las consecuencias de esto pueden llevar a que el sistema de IA sea poco confiable y afecte negativamente la reputación de nuestra startup. + +Con cada iteración de cualquier LLM dado, hemos visto mejoras en el rendimiento en torno a minimizar las alucinaciones. Incluso con esta mejora, nosotros como constructores y usuarios de aplicaciones todavía necesitamos ser conscientes de estas limitaciones. + +### Contenido Dañino + +En la sección anterior cubrimos cuando un LLM produce respuestas incorrectas o sin sentido. Otro riesgo del que debemos estar conscientes es cuando un modelo responde con contenido dañino. + +El contenido dañino se puede definir como: + +- Proporcionar instrucciones o alentar el autodaño o el daño a ciertos grupos. +- Contenido odioso o denigrante. +- Guiar la planificación de cualquier tipo de ataque o actos violentos. +- Proporcionar instrucciones sobre cómo encontrar contenido ilegal o cometer actos ilegales. +- Mostrar contenido sexualmente explícito. + +Para nuestra startup, queremos asegurarnos de tener las herramientas y estrategias adecuadas para evitar que este tipo de contenido sea visto por los estudiantes. + +### Falta de Equidad + +La equidad se define como "asegurar que un sistema de IA esté libre de sesgos y discriminación y que trate a todos de manera justa e igualitaria". En el mundo de la IA Generativa, queremos asegurarnos de que las visiones del mundo excluyentes de los grupos marginados no sean reforzadas por la salida del modelo. + +Estos tipos de salidas no solo son destructivos para construir experiencias de producto positivas para nuestros usuarios, sino que también causan un daño social adicional. Como constructores de aplicaciones, siempre debemos tener en mente una base de usuarios amplia y diversa al construir soluciones con IA Generativa. + +## Cómo Usar la IA Generativa de Manera Responsable + +Ahora que hemos identificado la importancia de la IA Generativa Responsable, veamos 4 pasos que podemos tomar para construir nuestras soluciones de IA de manera responsable: + +![Ciclo de Mitigación](../../../translated_images/mitigate-cycle.png?WT.ffc987e1880649a302a311432b78f49faa64e46f65df6350c9c409b5ed79549b.es.mc_id=academic-105485-koreyst) + +### Medir Daños Potenciales + +En las pruebas de software, probamos las acciones esperadas de un usuario en una aplicación. De manera similar, probar un conjunto diverso de prompts que los usuarios probablemente usarán es una buena manera de medir el daño potencial. + +Dado que nuestra startup está construyendo un producto educativo, sería bueno preparar una lista de prompts relacionados con la educación. Esto podría ser para cubrir un cierto tema, hechos históricos y prompts sobre la vida estudiantil. + +### Mitigar Daños Potenciales + +Ahora es el momento de encontrar formas en las que podamos prevenir o limitar el daño potencial causado por el modelo y sus respuestas. Podemos ver esto en 4 capas diferentes: + +![Capas de Mitigación](../../../translated_images/mitigation-layers.png?WT.cb109f48e143f1ff4dee760b4b0c9477c7d11c2fe57f3efdd89f68c1109f2de6.es.mc_id=academic-105485-koreyst) + +- **Modelo**. Elegir el modelo correcto para el caso de uso correcto. Modelos más grandes y complejos como GPT-4 pueden causar más riesgo de contenido dañino cuando se aplican a casos de uso más pequeños y específicos. Usar tus datos de entrenamiento para ajustar también reduce el riesgo de contenido dañino. + +- **Sistema de Seguridad**. Un sistema de seguridad es un conjunto de herramientas y configuraciones en la plataforma que sirve al modelo que ayuda a mitigar el daño. Un ejemplo de esto es el sistema de filtrado de contenido en el servicio de Azure OpenAI. Los sistemas también deben detectar ataques de fuga y actividades no deseadas como solicitudes de bots. + +- **Metaprompt**. Los metaprompts y la fundamentación son formas en que podemos dirigir o limitar el modelo basado en ciertos comportamientos e información. Esto podría ser usar entradas del sistema para definir ciertos límites del modelo. Además, proporcionar salidas que sean más relevantes para el alcance o dominio del sistema. + +También puede ser usar técnicas como la Generación Aumentada por Recuperación (RAG) para que el modelo solo obtenga información de una selección de fuentes confiables. Hay una lección más adelante en este curso para [construir aplicaciones de búsqueda](../08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst) + +- **Experiencia del Usuario**. La capa final es donde el usuario interactúa directamente con el modelo a través de la interfaz de nuestra aplicación de alguna manera. De esta manera, podemos diseñar la UI/UX para limitar al usuario en los tipos de entradas que pueden enviar al modelo, así como el texto o las imágenes mostradas al usuario. Al desplegar la aplicación de IA, también debemos ser transparentes sobre lo que nuestra aplicación de IA Generativa puede y no puede hacer. + +Tenemos una lección completa dedicada a [Diseñar UX para Aplicaciones de IA](../12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) + +- **Evaluar el modelo**. Trabajar con LLMs puede ser un desafío porque no siempre tenemos control sobre los datos con los que se entrenó el modelo. Independientemente, siempre debemos evaluar el rendimiento y las salidas del modelo. Aún es importante medir la precisión, similitud, fundamentación y relevancia de la salida del modelo. Esto ayuda a proporcionar transparencia y confianza a los interesados y usuarios. + +### Operar una Solución de IA Generativa Responsable + +Construir una práctica operacional alrededor de tus aplicaciones de IA es la etapa final. Esto incluye asociarse con otras partes de nuestra startup como Legal y Seguridad para asegurarnos de que cumplimos con todas las políticas regulatorias. Antes de lanzar, también queremos construir planes alrededor de la entrega, manejo de incidentes y retroceso para evitar cualquier daño a nuestros usuarios mientras crecemos. + +## Herramientas + +Si bien el trabajo de desarrollar soluciones de IA Responsable puede parecer mucho, es un esfuerzo que vale la pena. A medida que el área de la IA Generativa crece, más herramientas para ayudar a los desarrolladores a integrar la responsabilidad en sus flujos de trabajo de manera eficiente madurarán. Por ejemplo, el [Azure AI Content Safety](https://learn.microsoft.com/azure/ai-services/content-safety/overview?WT.mc_id=academic-105485-koreyst) puede ayudar a detectar contenido e imágenes dañinas a través de una solicitud de API. + +## Verificación de Conocimientos + +¿Cuáles son algunas cosas de las que necesitas preocuparte para asegurar un uso responsable de la IA? + +1. Que la respuesta sea correcta. +1. Uso dañino, que la IA no se use para propósitos criminales. +1. Asegurar que la IA esté libre de sesgos y discriminación. + +A: 2 y 3 son correctas. La IA Responsable te ayuda a considerar cómo mitigar efectos dañinos y sesgos y más. + +## 🚀 Desafío + +Lee sobre [Azure AI Content Safety](https://learn.microsoft.com/azure/ai-services/content-safety/overview?WT.mc_id=academic-105485-koreyst) y ve qué puedes adoptar para tu uso. + +## Gran Trabajo, Continúa Tu Aprendizaje + +Después de completar esta lección, consulta nuestra [colección de Aprendizaje de IA Generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para seguir mejorando tu conocimiento en IA Generativa. + +Dirígete a la Lección 4 donde veremos [Fundamentos de Ingeniería de Prompts](../04-prompt-engineering-fundamentals/README.md?WT.mc_id=academic-105485-koreyst)! + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr 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 humana. No nos hacemos responsables de ningún 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-prompt-engineering-fundamentals/README.md b/translations/es/04-prompt-engineering-fundamentals/README.md new file mode 100644 index 000000000..ee773c21f --- /dev/null +++ b/translations/es/04-prompt-engineering-fundamentals/README.md @@ -0,0 +1,289 @@ +# Fundamentos de la Ingeniería de Prompts + +[![Fundamentos de la Ingeniería de Prompts](../../../translated_images/04-lesson-banner.png?WT.d904d510033d5f0283f2caff5f735050f929dd196a1fc25fefa18433347fe463.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson4-gh?WT.mc_id=academic-105485-koreyst) + +## Introducción +Este módulo cubre conceptos y técnicas esenciales para crear prompts efectivos en modelos de IA generativa. La forma en que escribes tu prompt a un LLM también importa. Un prompt cuidadosamente elaborado puede lograr una mejor calidad de respuesta. Pero, ¿qué significan exactamente términos como _prompt_ e _ingeniería de prompts_? ¿Y cómo puedo mejorar el _input_ del prompt que envío al LLM? Estas son las preguntas que intentaremos responder en este capítulo y el siguiente. + +La _IA generativa_ es capaz de crear nuevo contenido (por ejemplo, texto, imágenes, audio, código, etc.) en respuesta a solicitudes de los usuarios. Lo logra utilizando _Modelos de Lenguaje Extensos_ como la serie GPT ("Generative Pre-trained Transformer") de OpenAI, que están entrenados para usar lenguaje natural y código. + +Los usuarios ahora pueden interactuar con estos modelos usando paradigmas familiares como el chat, sin necesidad de conocimientos técnicos o capacitación. Los modelos están basados en _prompts_ - los usuarios envían una entrada de texto (prompt) y reciben la respuesta de la IA (completación). Luego pueden "chatear con la IA" de manera iterativa, en conversaciones de múltiples turnos, refinando su prompt hasta que la respuesta cumpla con sus expectativas. + +Los "prompts" ahora se convierten en la principal _interfaz de programación_ para aplicaciones de IA generativa, indicando a los modelos qué hacer e influyendo en la calidad de las respuestas devueltas. La "Ingeniería de Prompts" es un campo de estudio de rápido crecimiento que se centra en el _diseño y optimización_ de prompts para ofrecer respuestas consistentes y de calidad a gran escala. + +## Objetivos de Aprendizaje + +En esta lección, aprenderemos qué es la Ingeniería de Prompts, por qué es importante y cómo podemos crear prompts más efectivos para un modelo y objetivo de aplicación dados. Entenderemos conceptos básicos y mejores prácticas para la ingeniería de prompts, y aprenderemos sobre un entorno interactivo de "sandbox" en Jupyter Notebooks donde podemos ver estos conceptos aplicados a ejemplos reales. + +Al final de esta lección, seremos capaces de: + +1. Explicar qué es la ingeniería de prompts y por qué es importante. +2. Describir los componentes de un prompt y cómo se utilizan. +3. Aprender mejores prácticas y técnicas para la ingeniería de prompts. +4. Aplicar las técnicas aprendidas a ejemplos reales, utilizando un endpoint de OpenAI. + +## Términos Clave + +Ingeniería de Prompts: La práctica de diseñar y refinar entradas para guiar a los modelos de IA hacia la producción de salidas deseadas. +Tokenización: El proceso de convertir texto en unidades más pequeñas, llamadas tokens, que un modelo puede entender y procesar. +LLMs Ajustados por Instrucción: Modelos de Lenguaje Extensos (LLMs) que han sido ajustados con instrucciones específicas para mejorar la precisión y relevancia de sus respuestas. + +## Sandbox de Aprendizaje + +La ingeniería de prompts es actualmente más arte que ciencia. La mejor manera de mejorar nuestra intuición al respecto es _practicar más_ y adoptar un enfoque de prueba y error que combine la experiencia en el dominio de la aplicación con técnicas recomendadas y optimizaciones específicas del modelo. + +El Jupyter Notebook que acompaña esta lección proporciona un entorno de _sandbox_ donde puedes probar lo que aprendes, ya sea mientras avanzas o como parte del desafío de código al final. Para ejecutar los ejercicios, necesitarás: + +1. **Una clave API de Azure OpenAI** - el endpoint del servicio para un LLM desplegado. +2. **Un Entorno de Ejecución de Python** - en el cual se pueda ejecutar el Notebook. +3. **Variables de Entorno Local** - _completa los pasos de [SETUP](./../00-course-setup/SETUP.md?WT.mc_id=academic-105485-koreyst) ahora para prepararte_. + +El notebook viene con ejercicios _iniciales_ - pero se te anima a agregar tus propias secciones de _Markdown_ (descripción) y _Código_ (solicitudes de prompts) para probar más ejemplos o ideas - y construir tu intuición para el diseño de prompts. + +## Guía Ilustrada + +¿Quieres obtener una visión general de lo que cubre esta lección antes de profundizar? Echa un vistazo a esta guía ilustrada, que te da una idea de los temas principales cubiertos y los puntos clave para que reflexiones en cada uno. El mapa de la lección te lleva desde la comprensión de los conceptos y desafíos básicos hasta abordarlos con técnicas de ingeniería de prompts relevantes y mejores prácticas. Ten en cuenta que la sección de "Técnicas Avanzadas" en esta guía se refiere a contenido cubierto en el _próximo_ capítulo de este currículo. + +![Guía Ilustrada de Ingeniería de Prompts](../../../translated_images/04-prompt-engineering-sketchnote.png?WT.a936f69bc33c7a783015f6747ea56d0f0071349644cd9031f9b8d20a3eec8696.es.mc_id=academic-105485-koreyst) + +## Nuestra Startup + +Ahora, hablemos sobre cómo _este tema_ se relaciona con nuestra misión de startup para [llevar la innovación de IA a la educación](https://educationblog.microsoft.com/2023/06/collaborating-to-bring-ai-innovation-to-education?WT.mc_id=academic-105485-koreyst). Queremos construir aplicaciones de aprendizaje personalizado impulsadas por IA, así que pensemos en cómo los diferentes usuarios de nuestra aplicación podrían "diseñar" prompts: + +- **Administradores** podrían pedir a la IA que _analice datos del currículo para identificar brechas en la cobertura_. La IA puede resumir resultados o visualizarlos con código. +- **Educadores** podrían pedir a la IA que _genere un plan de lección para una audiencia y tema específicos_. La IA puede construir el plan personalizado en un formato especificado. +- **Estudiantes** podrían pedir a la IA que _les enseñe una materia difícil_. La IA ahora puede guiar a los estudiantes con lecciones, pistas y ejemplos adaptados a su nivel. + +Eso es solo la punta del iceberg. Echa un vistazo a [Prompts Para Educación](https://github.com/microsoft/prompts-for-edu/tree/main?WT.mc_id=academic-105485-koreyst) - una biblioteca de prompts de código abierto curada por expertos en educación - para obtener una visión más amplia de las posibilidades. _¡Intenta ejecutar algunos de esos prompts en el sandbox o utilizando el OpenAI Playground para ver qué sucede!_ + + + +## ¿Qué es la Ingeniería de Prompts? + +Comenzamos esta lección definiendo la **Ingeniería de Prompts** como el proceso de _diseñar y optimizar_ entradas de texto (prompts) para ofrecer respuestas consistentes y de calidad (completaciones) para un objetivo de aplicación y modelo dados. Podemos pensar en esto como un proceso de 2 pasos: + +- _diseñar_ el prompt inicial para un modelo y objetivo dados +- _refinar_ el prompt de manera iterativa para mejorar la calidad de la respuesta + +Este es necesariamente un proceso de prueba y error que requiere intuición y esfuerzo del usuario para obtener resultados óptimos. Entonces, ¿por qué es importante? Para responder a esa pregunta, primero necesitamos entender tres conceptos: + +- _Tokenización_ = cómo el modelo "ve" el prompt +- _LLMs Base_ = cómo el modelo base "procesa" un prompt +- _LLMs Ajustados por Instrucción_ = cómo el modelo ahora puede ver "tareas" + +### Tokenización + +Un LLM ve los prompts como una _secuencia de tokens_ donde diferentes modelos (o versiones de un modelo) pueden tokenizar el mismo prompt de diferentes maneras. Dado que los LLMs están entrenados en tokens (y no en texto en bruto), la forma en que los prompts se tokenizan tiene un impacto directo en la calidad de la respuesta generada. + +Para obtener una intuición de cómo funciona la tokenización, prueba herramientas como el [OpenAI Tokenizer](https://platform.openai.com/tokenizer?WT.mc_id=academic-105485-koreyst) que se muestra a continuación. Copia tu prompt - y observa cómo se convierte en tokens, prestando atención a cómo se manejan los caracteres de espacio en blanco y los signos de puntuación. Ten en cuenta que este ejemplo muestra un LLM más antiguo (GPT-3) - por lo que probar esto con un modelo más nuevo puede producir un resultado diferente. + +![Tokenización](../../../translated_images/04-tokenizer-example.png?WT.f5399316da400747ffe3af9c95e61dc1a85508d57378da23a77538270c4cabf1.es.mc_id=academic-105485-koreyst) + +### Concepto: Modelos Base + +Una vez que un prompt está tokenizado, la función principal del ["LLM Base"](https://blog.gopenai.com/an-introduction-to-base-and-instruction-tuned-large-language-models-8de102c785a6?WT.mc_id=academic-105485-koreyst) (o modelo base) es predecir el token en esa secuencia. Dado que los LLMs están entrenados en conjuntos de datos de texto masivos, tienen una buena noción de las relaciones estadísticas entre los tokens y pueden hacer esa predicción con cierta confianza. Ten en cuenta que no entienden el _significado_ de las palabras en el prompt o token; solo ven un patrón que pueden "completar" con su próxima predicción. Pueden continuar prediciendo la secuencia hasta que el usuario intervenga o se alcance una condición preestablecida. + +¿Quieres ver cómo funciona la completación basada en prompts? Ingresa el prompt anterior en el [_Chat Playground_](https://oai.azure.com/playground?WT.mc_id=academic-105485-koreyst) de Azure OpenAI Studio con la configuración predeterminada. El sistema está configurado para tratar los prompts como solicitudes de información, por lo que deberías ver una completación que satisfaga este contexto. + +Pero, ¿qué pasa si el usuario quiere ver algo específico que cumpla con algunos criterios u objetivo de tarea? Aquí es donde entran en juego los LLMs _ajustados por instrucción_. + +![Completación de Chat de LLM Base](../../../translated_images/04-playground-chat-base.png?WT.7645a03d7989b1c410f2e9e6b503d18e4624f82d9cbf108dac999b8c8988f0ad.es.mc_id=academic-105485-koreyst) + +### Concepto: LLMs Ajustados por Instrucción + +Un [LLM Ajustado por Instrucción](https://blog.gopenai.com/an-introduction-to-base-and-instruction-tuned-large-language-models-8de102c785a6?WT.mc_id=academic-105485-koreyst) comienza con el modelo base y lo ajusta con ejemplos o pares de entrada/salida (por ejemplo, "mensajes" de múltiples turnos) que pueden contener instrucciones claras, y la respuesta de la IA intenta seguir esa instrucción. + +Esto utiliza técnicas como el Aprendizaje por Refuerzo con Retroalimentación Humana (RLHF) que pueden entrenar al modelo para _seguir instrucciones_ y _aprender de la retroalimentación_ de modo que produzca respuestas que estén mejor adaptadas a aplicaciones prácticas y sean más relevantes para los objetivos del usuario. + +Vamos a probarlo - vuelve al prompt anterior, pero ahora cambia el _mensaje del sistema_ para proporcionar la siguiente instrucción como contexto: + +> _Resume el contenido que se te proporcione para un estudiante de segundo grado. Mantén el resultado en un párrafo con 3-5 viñetas._ + +¿Ves cómo el resultado ahora está ajustado para reflejar el objetivo y formato deseados? Un educador ahora puede usar directamente esta respuesta en sus diapositivas para esa clase. + +![Completación de Chat de LLM Ajustado por Instrucción](../../../translated_images/04-playground-chat-instructions.png?WT.d9c80b15e90815a83ce665bf4418e70205d30318a5a5bcf407b2c92769743593.es.mc_id=academic-105485-koreyst) + +## ¿Por qué necesitamos la Ingeniería de Prompts? + +Ahora que sabemos cómo los LLMs procesan los prompts, hablemos de _por qué_ necesitamos la ingeniería de prompts. La respuesta radica en el hecho de que los LLMs actuales presentan una serie de desafíos que hacen que lograr _completaciones confiables y consistentes_ sea más difícil sin dedicar esfuerzo a la construcción y optimización de prompts. Por ejemplo: + +1. **Las respuestas del modelo son estocásticas.** Es probable que el _mismo prompt_ produzca diferentes respuestas con diferentes modelos o versiones de modelos. Y puede incluso producir diferentes resultados con el _mismo modelo_ en diferentes momentos. _Las técnicas de ingeniería de prompts pueden ayudarnos a minimizar estas variaciones proporcionando mejores límites_. + +1. **Los modelos pueden fabricar respuestas.** Los modelos están preentrenados con _conjuntos de datos grandes pero finitos_, lo que significa que carecen de conocimiento sobre conceptos fuera de ese ámbito de entrenamiento. Como resultado, pueden producir completaciones que son inexactas, imaginarias o directamente contradictorias a hechos conocidos. _Las técnicas de ingeniería de prompts ayudan a los usuarios a identificar y mitigar tales fabricaciones, por ejemplo, pidiendo a la IA citas o razonamientos_. + +1. **Las capacidades de los modelos variarán.** Los modelos más nuevos o generaciones de modelos tendrán capacidades más ricas, pero también traerán peculiaridades únicas y compensaciones en costo y complejidad. _La ingeniería de prompts puede ayudarnos a desarrollar mejores prácticas y flujos de trabajo que abstraigan las diferencias y se adapten a los requisitos específicos del modelo de manera escalable y sin problemas_. + +Veamos esto en acción en el OpenAI o Azure OpenAI Playground: + +- Usa el mismo prompt con diferentes implementaciones de LLM (por ejemplo, OpenAI, Azure OpenAI, Hugging Face) - ¿viste las variaciones? +- Usa el mismo prompt repetidamente con la _misma_ implementación de LLM (por ejemplo, Azure OpenAI playground) - ¿cómo diferían estas variaciones? + +### Ejemplo de Fabricaciones + +En este curso, usamos el término **"fabricación"** para referirnos al fenómeno en el que los LLMs a veces generan información incorrecta debido a limitaciones en su entrenamiento u otras restricciones. También puedes haber oído esto referido como _"alucinaciones"_ en artículos populares o trabajos de investigación. Sin embargo, recomendamos encarecidamente usar _"fabricación"_ como término para no antropomorfizar accidentalmente el comportamiento al atribuir un rasgo humano a un resultado impulsado por una máquina. Esto también refuerza las [directrices de IA Responsable](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-105485-koreyst) desde una perspectiva de terminología, eliminando términos que también pueden considerarse ofensivos o no inclusivos en algunos contextos. + +¿Quieres tener una idea de cómo funcionan las fabricaciones? Piensa en un prompt que instruya a la IA a generar contenido para un tema inexistente (para asegurarte de que no se encuentre en el conjunto de datos de entrenamiento). Por ejemplo, intenté este prompt: + +> **Prompt:** genera un plan de lección sobre la Guerra Marciana de 2076. + +Una búsqueda en la web me mostró que había relatos ficticios (por ejemplo, series de televisión o libros) sobre guerras marcianas, pero ninguno en 2076. El sentido común también nos dice que 2076 está _en el futuro_ y, por lo tanto, no puede asociarse con un evento real. + +Entonces, ¿qué sucede cuando ejecutamos este prompt con diferentes proveedores de LLM? + +> **Respuesta 1**: OpenAI Playground (GPT-35) + +![Respuesta 1](../../../translated_images/04-fabrication-oai.png?WT.08cc3e01259a6b46725a800e67de50c37b7fdd6b1f932f027881cbe32f80bcf1.es.mc_id=academic-105485-koreyst) + +> **Respuesta 2**: Azure OpenAI Playground (GPT-35) + +![Respuesta 2](../../../translated_images/04-fabrication-aoai.png?WT.81e0d286a351c87c804aaca6e5f8251a6deed5105d11bca035f8cead8c52d299.es.mc_id=academic-105485-koreyst) + +> **Respuesta 3**: : Hugging Face Chat Playground (LLama-2) + +![Respuesta 3](../../../translated_images/04-fabrication-huggingchat.png?WT.992b3a675cc7ed0dbe53e308b93df8165048fb7c4516e6bb00611d05c92e8fd5.es.mc_id=academic-105485-koreyst) + +Como era de esperar, cada modelo (o versión de modelo) produce respuestas ligeramente diferentes gracias al comportamiento estocástico y las variaciones en las capacidades del modelo. Por ejemplo, un modelo se dirige a una audiencia de octavo grado, mientras que el otro asume un estudiante de secundaria. Pero los tres modelos generaron respuestas que podrían convencer a un usuario desinformado de que el evento era real. + +Las técnicas de ingeniería de prompts como _metaprompting_ y _configuración de temperatura_ pueden reducir las fabricaciones del modelo hasta cierto punto. Nuevas _arquitecturas_ de ingeniería de prompts también incorporan nuevas herramientas y técnicas de manera fluida en el flujo de prompts, para mitigar o reducir algunos de estos efectos. + +## Estudio de Caso: GitHub Copilot + +Concluyamos esta sección obteniendo una idea de cómo se utiliza la ingeniería de prompts en soluciones del mundo real al observar un Estudio de Caso: [GitHub Copilot](https://github.com/features/copilot?WT.mc_id=academic-105485-koreyst). + +GitHub Copilot es tu "Programador de Pareja de IA" - convierte prompts de texto en completaciones de código y está integrado en tu entorno de desarrollo (por ejemplo, Visual Studio Code) para una experiencia de usuario fluida. Como se documenta en la serie de blogs a continuación, la versión más temprana se basó en el modelo OpenAI Codex, y los ingenieros rápidamente se dieron cuenta de la necesidad de ajustar el modelo y desarrollar mejores técnicas de ingeniería de prompts para mejorar la calidad del código. En julio, [debutaron un modelo de IA mejorado que va más allá de Codex](https://github.blog/2023-07-28-smarter-more-efficient-coding-github-copilot-goes-beyond-codex-with-improved-ai-model/?WT.mc_id=academic-105485-koreyst) para sugerencias aún más rápidas. + +Lee las publicaciones en orden, para seguir su viaje de aprendizaje. + +- **Mayo 2023** | [GitHub Copilot está Mejorando en Entender tu Código](https://github.blog/2023-05-17-how-github-copilot-is-getting-better-at-understanding-your-code/?WT.mc_id=academic-105485-koreyst) +- **Mayo 2023** | [Dentro de GitHub: Trabajando con los LLMs detrás de GitHub Copilot](https://github.blog/2023-05-17-inside-github-working-with-the-llms-behind-github-copilot/?WT.mc_id=academic-105485-koreyst). +- **Junio 2023** | [Cómo escribir mejores prompts para GitHub Copilot](https://github.blog/2023-06-20-how-to-write-better-prompts-for-github-copilot/?WT.mc_id=academic-105485-koreyst). +- **Julio 2023** | [.. +Finalmente, el verdadero valor de las plantillas radica en la capacidad de crear y publicar _bibliotecas de prompts_ para dominios de aplicaciones verticales, donde la plantilla de prompt ahora está _optimizada_ para reflejar un contexto o ejemplos específicos de la aplicación que hacen que las respuestas sean más relevantes y precisas para la audiencia de usuarios objetivo. El repositorio [Prompts For Edu](https://github.com/microsoft/prompts-for-edu?WT.mc_id=academic-105485-koreyst) es un gran ejemplo de este enfoque, curando una biblioteca de prompts para el dominio de la educación con énfasis en objetivos clave como la planificación de lecciones, el diseño curricular, la tutoría de estudiantes, etc. + +## Contenido de Apoyo + +Si pensamos en la construcción de prompts como tener una instrucción (tarea) y un objetivo (contenido principal), entonces el _contenido secundario_ es como el contexto adicional que proporcionamos para **influenciar la salida de alguna manera**. Podría ser la sintonización de parámetros, instrucciones de formato, taxonomías de temas, etc., que pueden ayudar al modelo a _adaptar_ su respuesta para adecuarse a los objetivos o expectativas deseadas por el usuario. + +Por ejemplo: Dado un catálogo de cursos con metadatos extensos (nombre, descripción, nivel, etiquetas de metadatos, instructor, etc.) sobre todos los cursos disponibles en el currículo: + +- podemos definir una instrucción para "resumir el catálogo de cursos para el otoño de 2023" +- podemos usar el contenido principal para proporcionar algunos ejemplos del resultado deseado +- podemos usar el contenido secundario para identificar las 5 principales "etiquetas" de interés. + +Ahora, el modelo puede proporcionar un resumen en el formato mostrado por los pocos ejemplos, pero si un resultado tiene múltiples etiquetas, puede priorizar las 5 etiquetas identificadas en el contenido secundario. + +--- + + + +## Mejores Prácticas de Prompts + +Ahora que sabemos cómo se pueden _construir_ los prompts, podemos comenzar a pensar en cómo _diseñarlos_ para reflejar las mejores prácticas. Podemos pensar en esto en dos partes: tener la _mentalidad_ correcta y aplicar las _técnicas_ adecuadas. + +### Mentalidad de Ingeniería de Prompts + +La Ingeniería de Prompts es un proceso de prueba y error, así que ten en cuenta tres factores amplios que guían: + +1. **La Comprensión del Dominio Importa.** La precisión y relevancia de la respuesta es una función del _dominio_ en el que opera esa aplicación o usuario. Aplica tu intuición y experiencia en el dominio para **personalizar las técnicas** aún más. Por ejemplo, define _personalidades específicas del dominio_ en tus prompts del sistema, o usa _plantillas específicas del dominio_ en tus prompts de usuario. Proporciona contenido secundario que refleje contextos específicos del dominio, o utiliza _pistas y ejemplos específicos del dominio_ para guiar al modelo hacia patrones de uso familiares. + +2. **La Comprensión del Modelo Importa.** Sabemos que los modelos son estocásticos por naturaleza. Pero las implementaciones de modelos también pueden variar en términos del conjunto de datos de entrenamiento que utilizan (conocimiento preentrenado), las capacidades que proporcionan (por ejemplo, a través de API o SDK) y el tipo de contenido para el que están optimizados (por ejemplo, código vs. imágenes vs. texto). Comprende las fortalezas y limitaciones del modelo que estás utilizando y utiliza ese conocimiento para _priorizar tareas_ o construir _plantillas personalizadas_ que estén optimizadas para las capacidades del modelo. + +3. **La Iteración y Validación Importa.** Los modelos están evolucionando rápidamente, al igual que las técnicas para la ingeniería de prompts. Como experto en el dominio, es posible que tengas otro contexto o criterios para _tu_ aplicación específica, que puede no aplicarse a la comunidad en general. Usa herramientas y técnicas de ingeniería de prompts para "dar un salto inicial" en la construcción de prompts, luego itera y valida los resultados utilizando tu propia intuición y experiencia en el dominio. Registra tus conocimientos y crea una **base de conocimientos** (por ejemplo, bibliotecas de prompts) que puedan ser utilizadas como una nueva línea base por otros, para iteraciones más rápidas en el futuro. + +## Mejores Prácticas + +Ahora veamos las prácticas comunes recomendadas por los profesionales de [OpenAI](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api?WT.mc_id=academic-105485-koreyst) y [Azure OpenAI](https://learn.microsoft.com/azure/ai-services/openai/concepts/prompt-engineering#best-practices?WT.mc_id=academic-105485-koreyst). + +| Qué | Por qué | +| :-------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Evaluar los modelos más recientes. | Las nuevas generaciones de modelos probablemente tengan características y calidad mejoradas, pero también pueden tener costos más altos. Evalúalos por su impacto, luego toma decisiones de migración. | +| Separar instrucciones y contexto | Verifica si tu modelo/proveedor define _delimitadores_ para distinguir instrucciones, contenido principal y secundario de manera más clara. Esto puede ayudar a los modelos a asignar pesos más precisos a los tokens. | +| Ser específico y claro | Da más detalles sobre el contexto deseado, resultado, longitud, formato, estilo, etc. Esto mejorará tanto la calidad como la consistencia de las respuestas. Captura recetas en plantillas reutilizables. | +| Ser descriptivo, usar ejemplos | Los modelos pueden responder mejor a un enfoque de "mostrar y contar". Comienza con un `zero-shot` approach where you give it an instruction (but no examples) then try `few-shot` as a refinement, providing a few examples of the desired output. Use analogies. | +| Use cues to jumpstart completions | Nudge it towards a desired outcome by giving it some leading words or phrases that it can use as a starting point for the response. | +| Double Down | Sometimes you may need to repeat yourself to the model. Give instructions before and after your primary content, use an instruction and a cue, etc. Iterate & validate to see what works. | +| Order Matters | The order in which you present information to the model may impact the output, even in the learning examples, thanks to recency bias. Try different options to see what works best. | +| Give the model an “out” | Give the model a _fallback_ completion response it can provide if it cannot complete the task for any reason. This can reduce chances of models generating false or fabricated responses. | +| | | + +As with any best practice, remember that _your mileage may vary_ based on the model, the task and the domain. Use these as a starting point, and iterate to find what works best for you. Constantly re-evaluate your prompt engineering process as new models and tools become available, with a focus on process scalability and response quality. + + + +## Assignment + +Congratulations! You made it to the end of the lesson! It's time to put some of those concepts and techniques to the test with real examples! + +For our assignment, we'll be using a Jupyter Notebook with exercises you can complete interactively. You can also extend the Notebook with your own Markdown and Code cells to explore ideas and techniques on your own. + +### To get started, fork the repo, then + +- (Recommended) Launch GitHub Codespaces +- (Alternatively) Clone the repo to your local device and use it with Docker Desktop +- (Alternatively) Open the Notebook with your preferred Notebook runtime environment. + +### Next, configure your environment variables + +- Copy the `.env.copy` file in repo root to `.env` and fill in the `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_ENDPOINT` and `AZURE_OPENAI_DEPLOYMENT` valores. Regresa a la [sección de Sandbox de Aprendizaje](../../../04-prompt-engineering-fundamentals/04-prompt-engineering-fundamentals) para aprender cómo. + +### A continuación, abre el Jupyter Notebook + +- Selecciona el núcleo de tiempo de ejecución. Si usas las opciones 1 o 2, simplemente selecciona el núcleo predeterminado de Python 3.10.x proporcionado por el contenedor de desarrollo. + +Estás listo para ejecutar los ejercicios. Ten en cuenta que aquí no hay respuestas _correctas o incorrectas_, solo se exploran opciones mediante prueba y error y se construye intuición sobre lo que funciona para un modelo y dominio de aplicación dados. + +_Por esta razón, no hay segmentos de Solución de Código en esta lección. En su lugar, el Notebook tendrá celdas de Markdown tituladas "Mi Solución:" que muestran un ejemplo de salida para referencia._ + + + +## Verificación de Conocimiento + +¿Cuál de los siguientes es un buen prompt siguiendo algunas prácticas razonables? + +1. Muéstrame una imagen de un coche rojo +2. Muéstrame una imagen de un coche rojo de la marca Volvo y modelo XC90 estacionado junto a un acantilado con el sol poniéndose +3. Muéstrame una imagen de un coche rojo de la marca Volvo y modelo XC90 + +A: 2, es el mejor prompt ya que proporciona detalles sobre "qué" y entra en especificaciones (no solo cualquier coche, sino una marca y modelo específicos) y también describe el entorno general. 3 es el siguiente mejor ya que también contiene mucha descripción. + +## 🚀 Desafío + +Ve si puedes aprovechar la técnica de "pista" con el prompt: Completa la oración "Muéstrame una imagen de un coche rojo de la marca Volvo y ". ¿Con qué responde, y cómo lo mejorarías? + +## ¡Gran Trabajo! Continúa Tu Aprendizaje + +¿Quieres aprender más sobre diferentes conceptos de Ingeniería de Prompts? Ve a la [página de aprendizaje continuo](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para encontrar otros recursos excelentes sobre este tema. + +Dirígete a la Lección 5 donde veremos [técnicas avanzadas de prompts](../05-advanced-prompts/README.md?WT.mc_id=academic-105485-koreyst)! + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien 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 la traducción profesional humana. No nos hacemos responsables de ningún 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/05-advanced-prompts/README.md b/translations/es/05-advanced-prompts/README.md new file mode 100644 index 000000000..f93a48138 --- /dev/null +++ b/translations/es/05-advanced-prompts/README.md @@ -0,0 +1,4 @@ + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr 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 humana profesional. No somos responsables de ningún 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/06-text-generation-apps/README.md b/translations/es/06-text-generation-apps/README.md new file mode 100644 index 000000000..b910fc04c --- /dev/null +++ b/translations/es/06-text-generation-apps/README.md @@ -0,0 +1,658 @@ +# Construyendo Aplicaciones de Generación de Texto + +[![Construyendo Aplicaciones de Generación de Texto](../../../translated_images/06-lesson-banner.png?WT.2cbccad4fdd538d4f7d47c475b058629b7b7fb1a010acde6e323370d82005b16.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson6-gh?WT.mc_id=academic-105485-koreyst) + +> _(Haz clic en la imagen de arriba para ver el video de esta lección)_ + +Hasta ahora, has visto a través de este plan de estudios que hay conceptos centrales como los "prompts" e incluso toda una disciplina llamada "ingeniería de prompts". Muchas herramientas con las que puedes interactuar, como ChatGPT, Office 365, Microsoft Power Platform y más, te permiten usar prompts para lograr algo. + +Para que puedas agregar tal experiencia a una aplicación, necesitas entender conceptos como prompts, completions y elegir una biblioteca para trabajar. Eso es exactamente lo que aprenderás en este capítulo. + +## Introducción + +En este capítulo, vas a: + +- Aprender sobre la biblioteca openai y sus conceptos básicos. +- Construir una aplicación de generación de texto usando openai. +- Comprender cómo usar conceptos como prompt, temperatura y tokens para construir una aplicación de generación de texto. + +## Objetivos de aprendizaje + +Al final de esta lección, podrás: + +- Explicar qué es una aplicación de generación de texto. +- Construir una aplicación de generación de texto usando openai. +- Configurar tu aplicación para usar más o menos tokens y también cambiar la temperatura, para obtener un resultado variado. + +## ¿Qué es una aplicación de generación de texto? + +Normalmente, cuando construyes una aplicación, tiene algún tipo de interfaz como las siguientes: + +- Basada en comandos. Las aplicaciones de consola son típicas aplicaciones donde escribes un comando y lleva a cabo una tarea. Por ejemplo, `git` es una aplicación basada en comandos. +- Interfaz de usuario (UI). Algunas aplicaciones tienen interfaces gráficas de usuario (GUIs) donde haces clic en botones, ingresas texto, seleccionas opciones y más. + +### Las aplicaciones de consola y UI son limitadas + +Compáralo con una aplicación basada en comandos donde escribes un comando: + +- **Es limitada**. No puedes simplemente escribir cualquier comando, solo los que la aplicación admite. +- **Específica del idioma**. Algunas aplicaciones admiten muchos idiomas, pero por defecto la aplicación está construida para un idioma específico, incluso si puedes agregar más soporte de idiomas. + +### Beneficios de las aplicaciones de generación de texto + +Entonces, ¿cómo es diferente una aplicación de generación de texto? + +En una aplicación de generación de texto, tienes más flexibilidad, no estás limitado a un conjunto de comandos o a un idioma de entrada específico. En cambio, puedes usar lenguaje natural para interactuar con la aplicación. Otro beneficio es que, como ya estás interactuando con una fuente de datos que ha sido entrenada en un vasto corpus de información, mientras que una aplicación tradicional podría estar limitada a lo que hay en una base de datos. + +### ¿Qué puedo construir con una aplicación de generación de texto? + +Hay muchas cosas que puedes construir. Por ejemplo: + +- **Un chatbot**. Un chatbot que responde preguntas sobre temas, como tu empresa y sus productos, podría ser una buena opción. +- **Ayudante**. Los LLMs son excelentes en cosas como resumir texto, obtener información del texto, producir texto como currículums y más. +- **Asistente de código**. Dependiendo del modelo de lenguaje que uses, puedes construir un asistente de código que te ayude a escribir código. Por ejemplo, puedes usar un producto como GitHub Copilot así como ChatGPT para ayudarte a escribir código. + +## ¿Cómo puedo comenzar? + +Bueno, necesitas encontrar una manera de integrarte con un LLM, lo que generalmente implica los siguientes dos enfoques: + +- Usar una API. Aquí estás construyendo solicitudes web con tu prompt y obteniendo texto generado de vuelta. +- Usar una biblioteca. Las bibliotecas ayudan a encapsular las llamadas API y las hacen más fáciles de usar. + +## Bibliotecas/SDKs + +Hay algunas bibliotecas bien conocidas para trabajar con LLMs como: + +- **openai**, esta biblioteca facilita la conexión con tu modelo y el envío de prompts. + +Luego hay bibliotecas que operan a un nivel superior como: + +- **Langchain**. Langchain es bien conocida y admite Python. +- **Semantic Kernel**. Semantic Kernel es una biblioteca de Microsoft que admite los lenguajes C#, Python y Java. + +## Primera aplicación usando openai + +Veamos cómo podemos construir nuestra primera aplicación, qué bibliotecas necesitamos, cuánto se requiere y demás. + +### Instalar openai + +Hay muchas bibliotecas por ahí para interactuar con OpenAI o Azure OpenAI. Es posible usar numerosos lenguajes de programación también, como C#, Python, JavaScript, Java y más. Hemos elegido usar la biblioteca `openai` de Python, así que usaremos `pip` para instalarla. + +```bash +pip install openai +``` + +### Crear un recurso + +Necesitas llevar a cabo los siguientes pasos: + +- Crear una cuenta en Azure [https://azure.microsoft.com/free/](https://azure.microsoft.com/free/?WT.mc_id=academic-105485-koreyst). +- Obtener acceso a Azure OpenAI. Ve a [https://learn.microsoft.com/azure/ai-services/openai/overview#how-do-i-get-access-to-azure-openai](https://learn.microsoft.com/azure/ai-services/openai/overview#how-do-i-get-access-to-azure-openai?WT.mc_id=academic-105485-koreyst) y solicita acceso. + + > [!NOTE] + > En el momento de escribir esto, necesitas solicitar acceso a Azure OpenAI. + +- Instalar Python +- Haber creado un recurso de Azure OpenAI Service. Consulta esta guía sobre cómo [crear un recurso](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal?WT.mc_id=academic-105485-koreyst). + +### Localizar la clave API y el endpoint + +En este punto, necesitas decirle a tu biblioteca `openai` qué clave API usar. Para encontrar tu clave API, ve a la sección "Keys and Endpoint" de tu recurso de Azure OpenAI y copia el valor "Key 1". + +![Keys and Endpoint resource blade in Azure Portal](https://learn.microsoft.com/azure/ai-services/openai/media/quickstarts/endpoint.png?WT.mc_id=academic-105485-koreyst) + +Ahora que tienes esta información copiada, vamos a instruir a las bibliotecas para que la usen. + +> [!NOTE] +> Vale la pena separar tu clave API de tu código. Puedes hacerlo usando variables de entorno. +> +> - Establece la variable de entorno `OPENAI_API_KEY` to your API key. +> `export OPENAI_API_KEY='sk-...'` + +### Configuración de Azure + +Si estás usando Azure OpenAI, aquí te mostramos cómo configurar la configuración: + +```python +openai.api_type = 'azure' +openai.api_key = os.environ["OPENAI_API_KEY"] +openai.api_version = '2023-05-15' +openai.api_base = os.getenv("API_BASE") +``` + +Arriba estamos configurando lo siguiente: + +- `api_type` to `azure`. This tells the library to use Azure OpenAI and not OpenAI. +- `api_key`, this is your API key found in the Azure Portal. +- `api_version`, this is the version of the API you want to use. At the time of writing, the latest version is `2023-05-15`. +- `api_base`, this is the endpoint of the API. You can find it in the Azure Portal next to your API key. + +> [!NOTE] > `os.getenv` is a function that reads environment variables. You can use it to read environment variables like `OPENAI_API_KEY` and `API_BASE`. Set these environment variables in your terminal or by using a library like `dotenv`. + +## Generate text + +The way to generate text is to use the `Completion` class. Aquí tienes un ejemplo: + +```python +prompt = "Complete the following: Once upon a time there was a" + +completion = openai.Completion.create(model="davinci-002", prompt=prompt) +print(completion.choices[0].text) +``` + +En el código anterior, creamos un objeto de completion y pasamos el modelo que queremos usar y el prompt. Luego imprimimos el texto generado. + +### Completions de chat + +Hasta ahora, has visto cómo hemos estado usando `Completion` to generate text. But there's another class called `ChatCompletion` que es más adecuado para chatbots. Aquí tienes un ejemplo de cómo usarlo: + +```python +import openai + +openai.api_key = "sk-..." + +completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello world"}]) +print(completion.choices[0].message.content) +``` + +Más sobre esta funcionalidad en un capítulo próximo. + +## Ejercicio - tu primera aplicación de generación de texto + +Ahora que hemos aprendido cómo configurar y configurar openai, es hora de construir tu primera aplicación de generación de texto. Para construir tu aplicación, sigue estos pasos: + +1. Crea un entorno virtual e instala openai: + + ```bash + python -m venv venv + source venv/bin/activate + pip install openai + ``` + + > [!NOTE] + > Si estás usando Windows escribe `venv\Scripts\activate` instead of `source venv/bin/activate`. + + > [!NOTE] + > Locate your Azure OpenAI key by going to [https://portal.azure.com/](https://portal.azure.com/?WT.mc_id=academic-105485-koreyst) and search for `Open AI` and select the `Open AI resource` and then select `Keys and Endpoint` and copy the `Key 1` value. + +1. Crea un archivo _app.py_ y dale el siguiente código: + + ```python + import openai + + openai.api_key = "" + + openai.api_type = 'azure' + openai.api_version = '2023-05-15' + openai.api_base = "" + deployment_name = "" + + # add your completion code + prompt = "Complete the following: Once upon a time there was a" + messages = [{"role": "user", "content": prompt}] + + # make completion + completion = client.chat.completions.create(model=deployment, messages=messages) + + # print response + print(completion.choices[0].message.content) + ``` + + > [!NOTE] + > Si estás usando Azure OpenAI, necesitas establecer el `api_type` to `azure` and set the `api_key` a tu clave de Azure OpenAI. + + Deberías ver una salida similar a la siguiente: + + ```output + very unhappy _____. + + Once upon a time there was a very unhappy mermaid. + ``` + +## Diferentes tipos de prompts, para diferentes cosas + +Ahora has visto cómo generar texto usando un prompt. Incluso tienes un programa en funcionamiento que puedes modificar y cambiar para generar diferentes tipos de texto. + +Los prompts se pueden usar para todo tipo de tareas. Por ejemplo: + +- **Generar un tipo de texto**. Por ejemplo, puedes generar un poema, preguntas para un cuestionario, etc. +- **Buscar información**. Puedes usar prompts para buscar información como el siguiente ejemplo '¿Qué significa CORS en el desarrollo web?'. +- **Generar código**. Puedes usar prompts para generar código, por ejemplo, desarrollando una expresión regular utilizada para validar correos electrónicos o por qué no generar un programa completo, como una aplicación web. + +## Un caso de uso más práctico: un generador de recetas + +Imagina que tienes ingredientes en casa y quieres cocinar algo. Para eso, necesitas una receta. Una forma de encontrar recetas es usar un motor de búsqueda o podrías usar un LLM para hacerlo. + +Podrías escribir un prompt así: + +> "Muéstrame 5 recetas para un plato con los siguientes ingredientes: pollo, papas y zanahorias. Por receta, enumera todos los ingredientes utilizados" + +Dado el prompt anterior, podrías obtener una respuesta similar a: + +```output +1. Roasted Chicken and Vegetables: +Ingredients: +- 4 chicken thighs +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 2 tablespoons olive oil +- 2 cloves garlic, minced +- 1 teaspoon dried thyme +- 1 teaspoon dried oregano +- Salt and pepper, to taste + +2. Chicken and Potato Stew: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 cloves garlic, minced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +3. Chicken and Potato Bake: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 2 cloves garlic, minced +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +4. Chicken and Potato Soup: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 cloves garlic, minced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 4 cups chicken broth +- Salt and pepper, to taste + +5. Chicken and Potato Hash: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 2 cloves garlic, minced +- 1 teaspoon dried oregano +``` + +Este resultado es genial, sé qué cocinar. En este punto, lo que podría ser útil son mejoras como: + +- Filtrar ingredientes que no me gustan o a los que soy alérgico. +- Producir una lista de compras, en caso de que no tenga todos los ingredientes en casa. + +Para los casos anteriores, agreguemos un prompt adicional: + +> "Por favor, elimina recetas con ajo ya que soy alérgico y reemplázalo con otra cosa. Además, por favor produce una lista de compras para las recetas, considerando que ya tengo pollo, papas y zanahorias en casa." + +Ahora tienes un nuevo resultado, a saber: + +```output +1. Roasted Chicken and Vegetables: +Ingredients: +- 4 chicken thighs +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 2 tablespoons olive oil +- 1 teaspoon dried thyme +- 1 teaspoon dried oregano +- Salt and pepper, to taste + +2. Chicken and Potato Stew: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +3. Chicken and Potato Bake: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +4. Chicken and Potato Soup: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 4 cups chicken broth +- Salt and pepper, to taste + +5. Chicken and Potato Hash: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 1 teaspoon dried oregano + +Shopping List: +- Olive oil +- Onion +- Thyme +- Oregano +- Salt +- Pepper +``` + +Esas son tus cinco recetas, sin ajo mencionado y también tienes una lista de compras considerando lo que ya tienes en casa. + +## Ejercicio - construir un generador de recetas + +Ahora que hemos planteado un escenario, escribamos el código para que coincida con el escenario demostrado. Para hacerlo, sigue estos pasos: + +1. Usa el archivo _app.py_ existente como punto de partida +1. Localiza la variable `prompt` y cambia su código a lo siguiente: + + ```python + prompt = "Show me 5 recipes for a dish with the following ingredients: chicken, potatoes, and carrots. Per recipe, list all the ingredients used" + ``` + + Si ahora ejecutas el código, deberías ver una salida similar a: + + ```output + -Chicken Stew with Potatoes and Carrots: 3 tablespoons oil, 1 onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 1/2 cups chicken broth, 1/2 cup dry white wine, 2 tablespoons chopped fresh parsley, 2 tablespoons unsalted butter, 1 1/2 pounds boneless, skinless chicken thighs, cut into 1-inch pieces + -Oven-Roasted Chicken with Potatoes and Carrots: 3 tablespoons extra-virgin olive oil, 1 tablespoon Dijon mustard, 1 tablespoon chopped fresh rosemary, 1 tablespoon chopped fresh thyme, 4 cloves garlic, minced, 1 1/2 pounds small red potatoes, quartered, 1 1/2 pounds carrots, quartered lengthwise, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 (4-pound) whole chicken + -Chicken, Potato, and Carrot Casserole: cooking spray, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and shredded, 1 potato, peeled and shredded, 1/2 teaspoon dried thyme leaves, 1/4 teaspoon salt, 1/4 teaspoon black pepper, 2 cups fat-free, low-sodium chicken broth, 1 cup frozen peas, 1/4 cup all-purpose flour, 1 cup 2% reduced-fat milk, 1/4 cup grated Parmesan cheese + + -One Pot Chicken and Potato Dinner: 2 tablespoons olive oil, 1 pound boneless, skinless chicken thighs, cut into 1-inch pieces, 1 large onion, chopped, 3 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 2 cups chicken broth, 1/2 cup dry white wine + + -Chicken, Potato, and Carrot Curry: 1 tablespoon vegetable oil, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 teaspoon ground coriander, 1 teaspoon ground cumin, 1/2 teaspoon ground turmeric, 1/2 teaspoon ground ginger, 1/4 teaspoon cayenne pepper, 2 cups chicken broth, 1/2 cup dry white wine, 1 (15-ounce) can chickpeas, drained and rinsed, 1/2 cup raisins, 1/2 cup chopped fresh cilantro + ``` + + > NOTA, tu LLM es no determinista, por lo que podrías obtener diferentes resultados cada vez que ejecutes el programa. + + Genial, veamos cómo podemos mejorar las cosas. Para mejorar las cosas, queremos asegurarnos de que el código sea flexible, para que los ingredientes y el número de recetas puedan mejorarse y cambiarse. + +1. Cambiemos el código de la siguiente manera: + + ```python + no_recipes = input("No of recipes (for example, 5): ") + + ingredients = input("List of ingredients (for example, chicken, potatoes, and carrots): ") + + # interpolate the number of recipes into the prompt an ingredients + prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used" + ``` + + Tomando el código para una prueba, podría verse así: + + ```output + No of recipes (for example, 5): 3 + List of ingredients (for example, chicken, potatoes, and carrots): milk,strawberries + + -Strawberry milk shake: milk, strawberries, sugar, vanilla extract, ice cubes + -Strawberry shortcake: milk, flour, baking powder, sugar, salt, unsalted butter, strawberries, whipped cream + -Strawberry milk: milk, strawberries, sugar, vanilla extract + ``` + +### Mejorar añadiendo filtro y lista de compras + +Ahora tenemos una aplicación funcional capaz de producir recetas y es flexible ya que se basa en entradas del usuario, tanto en el número de recetas como en los ingredientes utilizados. + +Para mejorarlo aún más, queremos agregar lo siguiente: + +- **Filtrar ingredientes**. Queremos poder filtrar ingredientes que no nos gustan o a los que somos alérgicos. Para lograr este cambio, podemos editar nuestro prompt existente y agregar una condición de filtro al final como sigue: + + ```python + filter = input("Filter (for example, vegetarian, vegan, or gluten-free): ") + + prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used, no {filter}" + ``` + + Arriba, agregamos `{filter}` al final del prompt y también capturamos el valor del filtro del usuario. + + Un ejemplo de entrada al ejecutar el programa ahora podría verse así: + + ```output + No of recipes (for example, 5): 3 + List of ingredients (for example, chicken, potatoes, and carrots): onion,milk + Filter (for example, vegetarian, vegan, or gluten-free): no milk + + 1. French Onion Soup + + Ingredients: + + -1 large onion, sliced + -3 cups beef broth + -1 cup milk + -6 slices french bread + -1/4 cup shredded Parmesan cheese + -1 tablespoon butter + -1 teaspoon dried thyme + -1/4 teaspoon salt + -1/4 teaspoon black pepper + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add beef broth, milk, thyme, salt, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. Place french bread slices on soup bowls. + 5. Ladle soup over bread. + 6. Sprinkle with Parmesan cheese. + + 2. Onion and Potato Soup + + Ingredients: + + -1 large onion, chopped + -2 cups potatoes, diced + -3 cups vegetable broth + -1 cup milk + -1/4 teaspoon black pepper + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add potatoes, vegetable broth, milk, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. Serve hot. + + 3. Creamy Onion Soup + + Ingredients: + + -1 large onion, chopped + -3 cups vegetable broth + -1 cup milk + -1/4 teaspoon black pepper + -1/4 cup all-purpose flour + -1/2 cup shredded Parmesan cheese + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add vegetable broth, milk, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. In a small bowl, whisk together flour and Parmesan cheese until smooth. + 5. Add to soup and simmer for an additional 5 minutes, or until soup has thickened. + ``` + + Como puedes ver, se han filtrado todas las recetas con leche. Pero, si eres intolerante a la lactosa, es posible que también quieras filtrar recetas con queso, por lo que hay una necesidad de ser claro. + +- **Producir una lista de compras**. Queremos producir una lista de compras, considerando lo que ya tenemos en casa. + + Para esta funcionalidad, podríamos intentar resolver todo en un solo prompt o podríamos dividirlo en dos prompts. Intentemos el último enfoque. Aquí sugerimos agregar un prompt adicional, pero para que eso funcione, necesitamos agregar el resultado del primer prompt como contexto al segundo prompt. + + Localiza la parte en el código que imprime el resultado del primer prompt y agrega el siguiente código a continuación: + + ```python + old_prompt_result = completion.choices[0].message.content + prompt = "Produce a shopping list for the generated recipes and please don't include ingredients that I already have." + + new_prompt = f"{old_prompt_result} {prompt}" + messages = [{"role": "user", "content": new_prompt}] + completion = openai.Completion.create(engine=deployment_name, messages=messages, max_tokens=1200) + + # print response + print("Shopping list:") + print(completion.choices[0].message.content) + ``` + + Nota lo siguiente: + + 1. Estamos construyendo un nuevo prompt agregando el resultado del primer prompt al nuevo prompt: + + ```python + new_prompt = f"{old_prompt_result} {prompt}" + ``` + + 1. Hacemos una nueva solicitud, pero también considerando el número de tokens que pedimos en el primer prompt, así que esta vez decimos que `max_tokens` es 1200. + + ```python + completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) + ``` + + Al probar este código, ahora llegamos al siguiente resultado: + + ```output + No of recipes (for example, 5): 2 + List of ingredients (for example, chicken, potatoes, and carrots): apple,flour + Filter (for example, vegetarian, vegan, or gluten-free): sugar + + + -Apple and flour pancakes: 1 cup flour, 1/2 tsp baking powder, 1/2 tsp baking soda, 1/4 tsp salt, 1 tbsp sugar, 1 egg, 1 cup buttermilk or sour milk, 1/4 cup melted butter, 1 Granny Smith apple, peeled and grated + -Apple fritters: 1-1/2 cups flour, 1 tsp baking powder, 1/4 tsp salt, 1/4 tsp baking soda, 1/4 tsp nutmeg, 1/4 tsp cinnamon, 1/4 tsp allspice, 1/4 cup sugar, 1/4 cup vegetable shortening, 1/4 cup milk, 1 egg, 2 cups shredded, peeled apples + Shopping list: + -Flour, baking powder, baking soda, salt, sugar, egg, buttermilk, butter, apple, nutmeg, cinnamon, allspice + ``` + +## Mejora tu configuración + +Lo que tenemos hasta ahora es un código que funciona, pero hay algunos ajustes que deberíamos hacer para mejorar aún más las cosas. Algunas cosas que deberíamos hacer son: + +- **Separar secretos del código**, como la clave API. Los secretos no pertenecen al código y deben almacenarse en un lugar seguro. Para separar secretos del código, podemos usar variables de entorno y bibliotecas como `python-dotenv` to load them from a file. Here's how that would look like in code: + + 1. Create a `.env` archivo con el siguiente contenido: + + ```bash + OPENAI_API_KEY=sk-... + ``` + + > Nota, para Azure, necesitas establecer las siguientes variables de entorno: + + ```bash + OPENAI_API_TYPE=azure + OPENAI_API_VERSION=2023-05-15 + OPENAI_API_BASE= + ``` + + En el código, cargarías las variables de entorno así: + + ```python + from dotenv import load_dotenv + + load_dotenv() + + openai.api_key = os.environ["OPENAI_API_KEY"] + ``` + +- **Una palabra sobre la longitud de los tokens**. Deberíamos considerar cuántos tokens necesitamos para generar el texto que queremos. Los tokens cuestan dinero, así que cuando sea posible, deberíamos intentar ser económicos con el número de tokens que usamos. Por ejemplo, ¿podemos redactar el prompt para que podamos usar menos tokens? + + Para cambiar los tokens usados, puedes usar el parámetro `max_tokens`. Por ejemplo, si quieres usar 100 tokens, harías: + + ```python + completion = client.chat.completions.create(model=deployment, messages=messages, max_tokens=100) + ``` + +- **Experimentar con la temperatura**. La temperatura es algo que no hemos mencionado hasta ahora, pero es un contexto importante para cómo funciona nuestro programa. Cuanto más alto sea el valor de temperatura, más aleatorio será el resultado. Por el contrario, cuanto más bajo sea el valor de temperatura, más predecible será el resultado. Considera si deseas variación en tu resultado o no. + + Para alterar la temperatura, puedes usar el parámetro `temperature`. Por ejemplo, si deseas usar una temperatura de 0.5, harías: + + ```python + completion = client.chat.completions.create(model=deployment, messages=messages, temperature=0.5) + ``` + + > Nota, cuanto más cerca de 1.0, más variado será el resultado. + +## Asignación + +Para esta asignación, puedes elegir qué construir. + +Aquí hay algunas sugerencias: + +- Ajusta la aplicación generadora de recetas para mejorarla aún más. Juega con los valores de temperatura y los prompts para ver qué puedes lograr. +- Construye un "compañero de estudio". Esta aplicación debería poder responder preguntas sobre un tema, por ejemplo, Python. Podrías tener prompts como "¿Qué es un cierto tema en Python?", o podrías tener un prompt que diga, muéstrame código para un cierto tema, etc. +- Bot de historia, haz que la historia cobre vida, instruye al bot para que interprete a un personaje histórico determinado y hazle preguntas sobre su vida y su época. + +## Solución + +### Compañero de estudio + +A continuación se muestra un prompt inicial, ve cómo puedes usarlo y ajustarlo a tu gusto. + +```text +- "You're an expert on the Python language + + Suggest a beginner lesson for Python in the following format: + + Format: + - concepts: + - brief explanation of the lesson: + - exercise in code with solutions" +``` + +### Bot de historia + +Aquí hay algunos prompts que podrías usar: + +```text +- "You are Abe Lincoln, tell me about yourself in 3 sentences, and respond using grammar and words like Abe would have used" +- "You are Abe Lincoln, respond using grammar and words like Abe would have used: + + Tell me about your greatest accomplishments, in 300 words" +``` + +## Verificación de conocimiento + +¿Qué hace el concepto de temperatura? + +1. Controla cuán aleatorio es el resultado. +1. Controla cuán grande es la respuesta. +1. Controla cuántos tokens se utilizan. + +## 🚀 Desafío + +Al trabajar en la asignación, intenta variar la temperatura, intenta establecerla en 0, 0.5 y 1. Recuerda que 0 es el menos variado y 1 es el más variado, ¿qué valor funciona mejor para tu aplicación? + +## ¡Gran trabajo! Continúa tu aprendizaje + +Después de completar esta lección, consulta nuestra [colección de aprendizaje de IA generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para seguir mejorando tus conocimientos sobre IA generativa. + +¡Dirígete a la Lección 7 donde veremos cómo [construir aplicaciones de chat](../07-building-chat-applications/README.md?WT.mc_id=academic-105485-koreyst)! + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr 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 una 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. \ No newline at end of file diff --git a/translations/es/07-building-chat-applications/README.md b/translations/es/07-building-chat-applications/README.md new file mode 100644 index 000000000..cb775d25c --- /dev/null +++ b/translations/es/07-building-chat-applications/README.md @@ -0,0 +1,187 @@ +# Construyendo Aplicaciones de Chat Impulsadas por IA Generativa + +[![Construyendo Aplicaciones de Chat Impulsadas por IA Generativa](../../../translated_images/07-lesson-banner.png?WT.21b04c80931fcfbbce2e012cb013fa889033dc1cf59443c7c82ce598eaf13629.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lessons7-gh?WT.mc_id=academic-105485-koreyst) + +> _(Haz clic en la imagen de arriba para ver el video de esta lección)_ + +Ahora que hemos visto cómo podemos construir aplicaciones de generación de texto, echemos un vistazo a las aplicaciones de chat. + +Las aplicaciones de chat se han integrado en nuestras vidas diarias, ofreciendo más que solo un medio de conversación casual. Son partes integrales del servicio al cliente, soporte técnico e incluso sistemas de asesoramiento sofisticados. Es probable que hayas recibido ayuda de una aplicación de chat no hace mucho tiempo. A medida que integramos tecnologías más avanzadas como la IA generativa en estas plataformas, la complejidad aumenta y también lo hacen los desafíos. + +Algunas preguntas que necesitamos responder son: + +- **Construcción de la aplicación**. ¿Cómo construimos e integramos eficientemente estas aplicaciones impulsadas por IA para casos de uso específicos? +- **Monitoreo**. Una vez desplegadas, ¿cómo podemos monitorear y asegurar que las aplicaciones operen al más alto nivel de calidad, tanto en términos de funcionalidad como de adherencia a los [seis principios de IA responsable](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-105485-koreyst)? + +A medida que avanzamos hacia una era definida por la automatización y las interacciones fluidas entre humanos y máquinas, entender cómo la IA generativa transforma el alcance, la profundidad y la adaptabilidad de las aplicaciones de chat se vuelve esencial. Esta lección investigará los aspectos de arquitectura que soportan estos sistemas complejos, profundizará en las metodologías para afinarlos para tareas específicas de dominio y evaluará las métricas y consideraciones pertinentes para asegurar un despliegue responsable de la IA. + +## Introducción + +Esta lección cubre: + +- Técnicas para construir e integrar eficientemente aplicaciones de chat. +- Cómo aplicar personalización y ajuste fino a las aplicaciones. +- Estrategias y consideraciones para monitorear efectivamente las aplicaciones de chat. + +## Objetivos de Aprendizaje + +Al final de esta lección, podrás: + +- Describir consideraciones para construir e integrar aplicaciones de chat en sistemas existentes. +- Personalizar aplicaciones de chat para casos de uso específicos. +- Identificar métricas clave y consideraciones para monitorear y mantener efectivamente la calidad de las aplicaciones de chat impulsadas por IA. +- Asegurar que las aplicaciones de chat aprovechen la IA de manera responsable. + +## Integrando IA Generativa en Aplicaciones de Chat + +Elevar las aplicaciones de chat mediante IA generativa no solo se centra en hacerlas más inteligentes; se trata de optimizar su arquitectura, rendimiento e interfaz de usuario para ofrecer una experiencia de usuario de calidad. Esto implica investigar las bases arquitectónicas, integraciones de API y consideraciones de interfaz de usuario. Esta sección tiene como objetivo ofrecerte una hoja de ruta completa para navegar estos paisajes complejos, ya sea que las estés conectando a sistemas existentes o construyéndolas como plataformas independientes. + +Al final de esta sección, estarás equipado con la experiencia necesaria para construir e incorporar eficientemente aplicaciones de chat. + +### ¿Chatbot o Aplicación de Chat? + +Antes de profundizar en la construcción de aplicaciones de chat, comparemos 'chatbots' contra 'aplicaciones de chat impulsadas por IA', que sirven roles y funcionalidades distintas. El propósito principal de un chatbot es automatizar tareas conversacionales específicas, como responder preguntas frecuentes o rastrear un paquete. Generalmente está gobernado por lógica basada en reglas o algoritmos de IA complejos. En contraste, una aplicación de chat impulsada por IA es un entorno mucho más expansivo diseñado para facilitar diversas formas de comunicación digital, como chats de texto, voz y video entre usuarios humanos. Su característica definitoria es la integración de un modelo de IA generativa que simula conversaciones matizadas y similares a las humanas, generando respuestas basadas en una amplia variedad de entradas y señales contextuales. Una aplicación de chat impulsada por IA generativa puede participar en discusiones de dominio abierto, adaptarse a contextos conversacionales en evolución e incluso producir diálogos creativos o complejos. + +La tabla a continuación describe las diferencias y similitudes clave para ayudarnos a entender sus roles únicos en la comunicación digital. + +| Chatbot | Aplicación de Chat Impulsada por IA Generativa | +| ------------------------------------- | ---------------------------------------------- | +| Enfocado en tareas y basado en reglas | Consciente del contexto | +| A menudo integrado en sistemas más grandes | Puede albergar uno o múltiples chatbots | +| Limitado a funciones programadas | Incorpora modelos de IA generativa | +| Interacciones especializadas y estructuradas | Capaz de discusiones de dominio abierto | + +### Aprovechando funcionalidades pre-construidas con SDKs y APIs + +Al construir una aplicación de chat, un buen primer paso es evaluar lo que ya existe. Usar SDKs y APIs para construir aplicaciones de chat es una estrategia ventajosa por varias razones. Al integrar SDKs y APIs bien documentados, estás posicionando estratégicamente tu aplicación para el éxito a largo plazo, abordando preocupaciones de escalabilidad y mantenimiento. + +- **Acelera el proceso de desarrollo y reduce la sobrecarga**: Confiar en funcionalidades pre-construidas en lugar del costoso proceso de construirlas tú mismo te permite centrarte en otros aspectos de tu aplicación que puedas encontrar más importantes, como la lógica de negocio. +- **Mejor rendimiento**: Al construir funcionalidades desde cero, eventualmente te preguntarás "¿Cómo escala? ¿Es esta aplicación capaz de manejar una afluencia repentina de usuarios?" Los SDKs y APIs bien mantenidos a menudo tienen soluciones integradas para estas preocupaciones. +- **Mantenimiento más fácil**: Las actualizaciones y mejoras son más fáciles de gestionar, ya que la mayoría de las APIs y SDKs simplemente requieren una actualización de una biblioteca cuando se lanza una nueva versión. +- **Acceso a tecnología de vanguardia**: Aprovechar modelos que han sido ajustados y entrenados en conjuntos de datos extensos proporciona a tu aplicación capacidades de lenguaje natural. + +Acceder a la funcionalidad de un SDK o API generalmente implica obtener permiso para usar los servicios proporcionados, lo que a menudo se realiza mediante el uso de una clave única o token de autenticación. Usaremos la Biblioteca de Python de OpenAI para explorar cómo se ve esto. También puedes probarlo por tu cuenta en el siguiente [notebook para OpenAI](../../../07-building-chat-applications/python/oai-assignment.ipynb) o [notebook para Azure OpenAI Services](../../../07-building-chat-applications/python/aoai-assignment.ipynb) para esta lección. + +```python +import os +from openai import OpenAI + +API_KEY = os.getenv("OPENAI_API_KEY","") + +client = OpenAI( + api_key=API_KEY + ) + +chat_completion = client.chat.completions.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Suggest two titles for an instructional lesson on chat applications for generative AI."}]) +``` + +El ejemplo anterior utiliza el modelo GPT-3.5 Turbo para completar el prompt, pero observa que la clave de API se establece antes de hacerlo. Recibirías un error si no configuraras la clave. + +## Experiencia de Usuario (UX) + +Los principios generales de UX se aplican a las aplicaciones de chat, pero aquí hay algunas consideraciones adicionales que se vuelven particularmente importantes debido a los componentes de aprendizaje automático involucrados. + +- **Mecanismo para abordar la ambigüedad**: Los modelos de IA generativa ocasionalmente generan respuestas ambiguas. Una función que permita a los usuarios pedir aclaraciones puede ser útil si se encuentran con este problema. +- **Retención de contexto**: Los modelos avanzados de IA generativa tienen la capacidad de recordar el contexto dentro de una conversación, lo que puede ser un activo necesario para la experiencia del usuario. Dar a los usuarios la capacidad de controlar y gestionar el contexto mejora la experiencia del usuario, pero introduce el riesgo de retener información sensible del usuario. Las consideraciones sobre cuánto tiempo se almacena esta información, como introducir una política de retención, pueden equilibrar la necesidad de contexto contra la privacidad. +- **Personalización**: Con la capacidad de aprender y adaptarse, los modelos de IA ofrecen una experiencia individualizada para un usuario. Personalizar la experiencia del usuario a través de características como perfiles de usuario no solo hace que el usuario se sienta comprendido, sino que también ayuda en su búsqueda de encontrar respuestas específicas, creando una interacción más eficiente y satisfactoria. + +Un ejemplo de personalización es la configuración de "Instrucciones Personalizadas" en ChatGPT de OpenAI. Te permite proporcionar información sobre ti mismo que puede ser un contexto importante para tus prompts. Aquí tienes un ejemplo de una instrucción personalizada. + +![Configuración de Instrucciones Personalizadas en ChatGPT](../../../translated_images/custom-instructions.png?WT.11dedb56ee96f65348e96bb7d6a0e61e668da5fe777ccd5b63f23e0e7fac407b.es.mc_id=academic-105485-koreyst) + +Este "perfil" le indica a ChatGPT que cree un plan de lección sobre listas enlazadas. Observa que ChatGPT tiene en cuenta que el usuario puede querer un plan de lección más detallado basado en su experiencia. + +![Un prompt en ChatGPT para un plan de lección sobre listas enlazadas](../../../translated_images/lesson-plan-prompt.png?WT.a7012bd5b8467d2255be3eb7be93a8622cf74091e2fa815e80c0118416f064fc.es.mc_id=academic-105485-koreyst) + +### Marco de Mensajes del Sistema de Microsoft para Modelos de Lenguaje Extensos + +[Microsoft ha proporcionado orientación](https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-the-models-output-format?WT.mc_id=academic-105485-koreyst) para escribir mensajes de sistema efectivos al generar respuestas de LLMs, desglosados en 4 áreas: + +1. Definir para quién es el modelo, así como sus capacidades y limitaciones. +2. Definir el formato de salida del modelo. +3. Proporcionar ejemplos específicos que demuestren el comportamiento esperado del modelo. +4. Proporcionar salvaguardas de comportamiento adicionales. + +### Accesibilidad + +Ya sea que un usuario tenga discapacidades visuales, auditivas, motoras o cognitivas, una aplicación de chat bien diseñada debe ser utilizable por todos. La siguiente lista desglosa características específicas destinadas a mejorar la accesibilidad para diversas discapacidades de los usuarios. + +- **Características para discapacidad visual**: Temas de alto contraste y texto redimensionable, compatibilidad con lectores de pantalla. +- **Características para discapacidad auditiva**: Funciones de texto a voz y voz a texto, señales visuales para notificaciones de audio. +- **Características para discapacidad motora**: Soporte de navegación por teclado, comandos de voz. +- **Características para discapacidad cognitiva**: Opciones de lenguaje simplificado. + +## Personalización y Ajuste Fino para Modelos de Lenguaje Específicos de Dominio + +Imagina una aplicación de chat que entiende la jerga de tu empresa y anticipa las consultas específicas que su base de usuarios comúnmente tiene. Hay un par de enfoques que vale la pena mencionar: + +- **Aprovechar modelos DSL**. DSL significa lenguaje específico de dominio. Puedes aprovechar un llamado modelo DSL entrenado en un dominio específico para entender sus conceptos y escenarios. +- **Aplicar ajuste fino**. El ajuste fino es el proceso de entrenar aún más tu modelo con datos específicos. + +## Personalización: Usar un DSL + +Aprovechar modelos de lenguaje específicos de dominio (Modelos DSL) puede mejorar el compromiso del usuario al proporcionar interacciones especializadas y contextualmente relevantes. Es un modelo que está entrenado o afinado para entender y generar texto relacionado con un campo, industria o tema específico. Las opciones para usar un modelo DSL pueden variar desde entrenar uno desde cero, hasta usar preexistentes a través de SDKs y APIs. Otra opción es el ajuste fino, que implica tomar un modelo preentrenado existente y adaptarlo para un dominio específico. + +## Personalización: Aplicar ajuste fino + +El ajuste fino a menudo se considera cuando un modelo preentrenado se queda corto en un dominio especializado o tarea específica. + +Por ejemplo, las consultas médicas son complejas y requieren mucho contexto. Cuando un profesional médico diagnostica a un paciente, se basa en una variedad de factores, como el estilo de vida o condiciones preexistentes, e incluso puede depender de revistas médicas recientes para validar su diagnóstico. En escenarios tan matizados, una aplicación de chat de IA de propósito general no puede ser una fuente confiable. + +### Escenario: una aplicación médica + +Considera una aplicación de chat diseñada para ayudar a los médicos proporcionando referencias rápidas a guías de tratamiento, interacciones de medicamentos o hallazgos de investigaciones recientes. + +Un modelo de propósito general podría ser adecuado para responder preguntas médicas básicas o proporcionar consejos generales, pero podría tener dificultades con lo siguiente: + +- **Casos altamente específicos o complejos**. Por ejemplo, un neurólogo podría preguntar a la aplicación: "¿Cuáles son las mejores prácticas actuales para manejar la epilepsia resistente a medicamentos en pacientes pediátricos?" +- **Falta de avances recientes**. Un modelo de propósito general podría tener dificultades para proporcionar una respuesta actual que incorpore los avances más recientes en neurología y farmacología. + +En casos como estos, ajustar el modelo con un conjunto de datos médicos especializado puede mejorar significativamente su capacidad para manejar estas consultas médicas intrincadas de manera más precisa y confiable. Esto requiere acceso a un conjunto de datos grande y relevante que represente los desafíos y preguntas específicas del dominio que necesitan ser abordados. + +## Consideraciones para una Experiencia de Chat Impulsada por IA de Alta Calidad + +Esta sección describe los criterios para aplicaciones de chat de "alta calidad", que incluyen la captura de métricas accionables y la adherencia a un marco que aprovecha la tecnología de IA de manera responsable. + +### Métricas Clave + +Para mantener el rendimiento de alta calidad de una aplicación, es esencial realizar un seguimiento de métricas clave y consideraciones. Estas mediciones no solo aseguran la funcionalidad de la aplicación, sino que también evalúan la calidad del modelo de IA y la experiencia del usuario. A continuación se presenta una lista que cubre métricas básicas, de IA y de experiencia del usuario a considerar. + +| Métrica | Definición | Consideraciones para el Desarrollador de Chat | +| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | +| **Tiempo de Actividad** | Mide el tiempo en que la aplicación está operativa y accesible por los usuarios. | ¿Cómo minimizarás el tiempo de inactividad? | +| **Tiempo de Respuesta** | El tiempo que tarda la aplicación en responder a la consulta de un usuario. | ¿Cómo puedes optimizar el procesamiento de consultas para mejorar el tiempo de respuesta? | +| **Precisión** | La proporción de predicciones verdaderas positivas respecto al número total de predicciones positivas | ¿Cómo validarás la precisión de tu modelo? | +| **Recuperación (Sensibilidad)** | La proporción de predicciones verdaderas positivas respecto al número real de positivos | ¿Cómo medirás y mejorarás la recuperación? | +| **Puntuación F1** | La media armónica de precisión y recuperación, que equilibra el compromiso entre ambas. | ¿Cuál es tu puntuación F1 objetivo? ¿Cómo equilibrarás precisión y recuperación? | +| **Perplejidad** | Mide qué tan bien la distribución de probabilidad predicha por el modelo se alinea con la distribución real de los datos. | ¿Cómo minimizarás la perplejidad? | +| **Métricas de Satisfacción del Usuario** | Mide la percepción del usuario sobre la aplicación. A menudo capturado a través de encuestas. | ¿Con qué frecuencia recopilarás comentarios de los usuarios? ¿Cómo te adaptarás en base a ellos? | +| **Tasa de Error** | La tasa a la que el modelo comete errores al entender o generar salidas. | ¿Qué estrategias tienes para reducir las tasas de error? | +| **Ciclos de Reentrenamiento** | La frecuencia con la que se actualiza el modelo para incorporar nuevos datos e insights. | ¿Con qué frecuencia reentrenarás el modelo? ¿Qué desencadena un ciclo de reentrenamiento? | +| **Detección de Anomalías** | Herramientas y técnicas para identificar patrones inusuales que no se ajustan al comportamiento esperado. | ¿Cómo responderás a las anomalías? | + +### Implementando Prácticas de IA Responsable en Aplicaciones de Chat + +El enfoque de Microsoft para la IA Responsable ha identificado seis principios que deben guiar el desarrollo y uso de la IA. A continuación se presentan los principios, su definición y las cosas que un desarrollador de chat debería considerar y por qué deberían tomarlas en serio. + +| Principios | Definición de Microsoft | Consideraciones para el Desarrollador de Chat | Por qué es importante | +| ---------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| Equidad | Los sistemas de IA deben tratar a todas las personas de manera justa. | Asegúrate de que la aplicación de chat no discrimine en base a los datos del usuario. | Para construir confianza e inclusión entre los usuarios; evita repercusiones legales. | +| Confiabilidad y Seguridad | Los sistemas de IA deben funcionar de manera confiable y segura. | Implementa pruebas y medidas de seguridad para minimizar errores y riesgos. | Asegura la satisfacción del usuario y previene posibles daños. | +| Privacidad y Seguridad | Los sistemas de IA deben ser seguros y respetar la privacidad. | Implementa medidas de protección y cifrado de datos robustas. | Para proteger los datos sensibles del usuario y cumplir con las leyes de privacidad. | +| Inclusión | Los sistemas de IA deben empoderar a todos y comprometer a las personas. | Diseña una interfaz de usuario/experiencia de usuario accesible y fácil de usar para audiencias diversas. | Asegura que una gama más amplia de personas pueda usar la aplicación efectivamente. | +| Transparencia | Los sistemas de IA deben ser comprensibles. | Proporciona documentación clara y razonamiento para las respuestas de IA. | Los usuarios son más propensos a confiar en un sistema si pueden entender cómo se toman las decisiones. | +| Responsabilidad | Las personas deben ser responsables de los sistemas de IA. | Establece un proceso claro para auditar y mejorar las decisiones de IA. | Permite la mejora continua y medidas correctivas en caso de errores. | + +## Tarea + +Consulta la [tarea](../../../07-building-chat-applications/python) que te llevará a través de una serie de ejercicios desde ejecutar tus primeros prompts de chat, hasta clasificar y resumir texto y más. ¡Observa que las tareas están disponibles en diferentes lenguajes de programación! + +## ¡Buen Trabajo! Continúa el Viaje + +Después de completar esta lección, consulta nuestra [colección de aprendizaje de IA Generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para seguir mejorando tus conocimientos en IA Generativa. + +¡Dirígete a la Lección 8 para ver cómo puedes comenzar a [construir aplicaciones de búsqueda](../08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst)! + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción basados en inteligencia artificial. 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 la traducción profesional humana. No somos responsables de malentendidos o interpretaciones erróneas que surjan del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/08-building-search-applications/README.md b/translations/es/08-building-search-applications/README.md new file mode 100644 index 000000000..b8c6900e4 --- /dev/null +++ b/translations/es/08-building-search-applications/README.md @@ -0,0 +1,166 @@ +# Construyendo Aplicaciones de Búsqueda + +[![Introducción a la IA Generativa y Modelos de Lenguaje Extensos](../../../translated_images/08-lesson-banner.png?WT.38007baa37b3809836fefd9caf72cba7434d1d1e82074d170c2b066e3c7aa2d0.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson8-gh?WT.mc_id=academic-105485-koreyst) + +> > _Haz clic en la imagen de arriba para ver el video de esta lección_ + +Los LLMs no solo son para chatbots y generación de texto. También es posible construir aplicaciones de búsqueda utilizando Embeddings. Los Embeddings son representaciones numéricas de datos, también conocidas como vectores, y pueden ser utilizados para búsqueda semántica de datos. + +En esta lección, vas a construir una aplicación de búsqueda para nuestra startup educativa. Nuestra startup es una organización sin fines de lucro que proporciona educación gratuita a estudiantes en países en desarrollo. Nuestra startup tiene una gran cantidad de videos en YouTube que los estudiantes pueden usar para aprender sobre IA. Nuestra startup quiere construir una aplicación de búsqueda que permita a los estudiantes buscar un video de YouTube escribiendo una pregunta. + +Por ejemplo, un estudiante podría escribir '¿Qué son los Jupyter Notebooks?' o '¿Qué es Azure ML?' y la aplicación de búsqueda devolverá una lista de videos de YouTube que son relevantes para la pregunta, y mejor aún, la aplicación de búsqueda devolverá un enlace al lugar en el video donde se encuentra la respuesta a la pregunta. + +## Introducción + +En esta lección, cubriremos: + +- Búsqueda semántica vs Búsqueda por palabras clave. +- Qué son los Embeddings de Texto. +- Creación de un Índice de Embeddings de Texto. +- Búsqueda en un Índice de Embeddings de Texto. + +## Objetivos de Aprendizaje + +Después de completar esta lección, podrás: + +- Diferenciar entre búsqueda semántica y por palabras clave. +- Explicar qué son los Embeddings de Texto. +- Crear una aplicación utilizando Embeddings para buscar datos. + +## ¿Por qué construir una aplicación de búsqueda? + +Crear una aplicación de búsqueda te ayudará a entender cómo usar Embeddings para buscar datos. También aprenderás cómo construir una aplicación de búsqueda que los estudiantes puedan usar para encontrar información rápidamente. + +La lección incluye un Índice de Embeddings de las transcripciones de YouTube para el canal de YouTube de Microsoft [AI Show](https://www.youtube.com/playlist?list=PLlrxD0HtieHi0mwteKBOfEeOYf0LJU4O1). El AI Show es un canal de YouTube que te enseña sobre IA y aprendizaje automático. El Índice de Embeddings contiene los Embeddings para cada una de las transcripciones de YouTube hasta octubre de 2023. Utilizarás el Índice de Embeddings para construir una aplicación de búsqueda para nuestra startup. La aplicación de búsqueda devuelve un enlace al lugar en el video donde se encuentra la respuesta a la pregunta. Esta es una excelente manera para que los estudiantes encuentren rápidamente la información que necesitan. + +El siguiente es un ejemplo de una consulta semántica para la pregunta '¿puedes usar rstudio con azure ml?'. Echa un vistazo a la url de YouTube, verás que la url contiene una marca de tiempo que te lleva al lugar en el video donde se encuentra la respuesta a la pregunta. + +![Consulta semántica para la pregunta "¿puedes usar rstudio con Azure ML?"](../../../translated_images/query-results.png?WT.c2bcab091b108e899efca56b2cd996ea8f95145c049888f52ef7495a2b7df665.es.mc_id=academic-105485-koreyst) + +## ¿Qué es la búsqueda semántica? + +Ahora podrías preguntarte, ¿qué es la búsqueda semántica? La búsqueda semántica es una técnica de búsqueda que utiliza la semántica, o significado, de las palabras en una consulta para devolver resultados relevantes. + +Aquí hay un ejemplo de una búsqueda semántica. Supongamos que estás buscando comprar un auto, podrías buscar 'mi auto soñado', la búsqueda semántica entiende que no estás `dreaming` sobre un auto, sino que estás buscando comprar tu `ideal` auto. La búsqueda semántica entiende tu intención y devuelve resultados relevantes. La alternativa es `keyword search` que literalmente buscaría sueños sobre autos y a menudo devuelve resultados irrelevantes. + +## ¿Qué son los Embeddings de Texto? + +[Los embeddings de texto](https://en.wikipedia.org/wiki/Word_embedding?WT.mc_id=academic-105485-koreyst) son una técnica de representación de texto utilizada en el [procesamiento de lenguaje natural](https://en.wikipedia.org/wiki/Natural_language_processing?WT.mc_id=academic-105485-koreyst). Los embeddings de texto son representaciones numéricas semánticas del texto. Los embeddings se utilizan para representar datos de una manera que sea fácil de entender para una máquina. Existen muchos modelos para construir embeddings de texto, en esta lección, nos centraremos en generar embeddings utilizando el Modelo de Embedding de OpenAI. + +Aquí tienes un ejemplo, imagina que el siguiente texto está en una transcripción de uno de los episodios en el canal de YouTube AI Show: + +```text +Today we are going to learn about Azure Machine Learning. +``` + +Pasaríamos el texto a la API de Embedding de OpenAI y devolvería el siguiente embedding compuesto por 1536 números, también conocido como un vector. Cada número en el vector representa un aspecto diferente del texto. Para abreviar, aquí están los primeros 10 números en el vector. + +```python +[-0.006655829958617687, 0.0026128944009542465, 0.008792596869170666, -0.02446001023054123, -0.008540431968867779, 0.022071078419685364, -0.010703742504119873, 0.003311325330287218, -0.011632772162556648, -0.02187200076878071, ...] +``` + +## ¿Cómo se crea el Índice de Embeddings? + +El Índice de Embeddings para esta lección fue creado con una serie de scripts de Python. Encontrarás los scripts junto con instrucciones en el [README](./scripts/README.md?WT.mc_id=academic-105485-koreyst) en la carpeta 'scripts' para esta lección. No necesitas ejecutar estos scripts para completar esta lección, ya que se te proporciona el Índice de Embeddings. + +Los scripts realizan las siguientes operaciones: + +1. Se descarga la transcripción de cada video de YouTube en la lista de reproducción del [AI Show](https://www.youtube.com/playlist?list=PLlrxD0HtieHi0mwteKBOfEeOYf0LJU4O1). +2. Usando [Funciones de OpenAI](https://learn.microsoft.com/azure/ai-services/openai/how-to/function-calling?WT.mc_id=academic-105485-koreyst), se intenta extraer el nombre del hablante de los primeros 3 minutos de la transcripción de YouTube. El nombre del hablante para cada video se almacena en el Índice de Embeddings llamado `embedding_index_3m.json`. +3. Luego, el texto de la transcripción se divide en **segmentos de texto de 3 minutos**. El segmento incluye aproximadamente 20 palabras superpuestas del siguiente segmento para asegurar que el Embedding para el segmento no se corte y para proporcionar un mejor contexto de búsqueda. +4. Cada segmento de texto se pasa luego a la API de Chat de OpenAI para resumir el texto en 60 palabras. El resumen también se almacena en el Índice de Embeddings `embedding_index_3m.json`. +5. Finalmente, el texto del segmento se pasa a la API de Embedding de OpenAI. La API de Embedding devuelve un vector de 1536 números que representan el significado semántico del segmento. El segmento junto con el vector de Embedding de OpenAI se almacena en un Índice de Embeddings `embedding_index_3m.json`. + +### Bases de Datos de Vectores + +Para simplificar la lección, el Índice de Embeddings se almacena en un archivo JSON llamado `embedding_index_3m.json` y se carga en un DataFrame de Pandas. Sin embargo, en producción, el Índice de Embeddings se almacenaría en una base de datos de vectores como [Azure Cognitive Search](https://learn.microsoft.com/training/modules/improve-search-results-vector-search?WT.mc_id=academic-105485-koreyst), [Redis](https://cookbook.openai.com/examples/vector_databases/redis/readme?WT.mc_id=academic-105485-koreyst), [Pinecone](https://cookbook.openai.com/examples/vector_databases/pinecone/readme?WT.mc_id=academic-105485-koreyst), [Weaviate](https://cookbook.openai.com/examples/vector_databases/weaviate/readme?WT.mc_id=academic-105485-koreyst), por nombrar algunos. + +## Entendiendo la similitud coseno + +Hemos aprendido sobre los embeddings de texto, el siguiente paso es aprender cómo usar los embeddings de texto para buscar datos y, en particular, encontrar los embeddings más similares a una consulta dada usando la similitud coseno. + +### ¿Qué es la similitud coseno? + +La similitud coseno es una medida de similitud entre dos vectores, también escucharás que se refiere a esto como `nearest neighbor search`. Para realizar una búsqueda de similitud coseno necesitas _vectorizar_ el texto de _consulta_ usando la API de Embedding de OpenAI. Luego calcula la _similitud coseno_ entre el vector de consulta y cada vector en el Índice de Embeddings. Recuerda, el Índice de Embeddings tiene un vector para cada segmento de texto de transcripción de YouTube. Finalmente, ordena los resultados por similitud coseno y los segmentos de texto con la similitud coseno más alta son los más similares a la consulta. + +Desde una perspectiva matemática, la similitud coseno mide el coseno del ángulo entre dos vectores proyectados en un espacio multidimensional. Esta medida es beneficiosa, porque si dos documentos están muy separados por distancia euclidiana debido a su tamaño, aún podrían tener un ángulo más pequeño entre ellos y, por lo tanto, una similitud coseno más alta. Para obtener más información sobre las ecuaciones de similitud coseno, consulta [Similitud coseno](https://en.wikipedia.org/wiki/Cosine_similarity?WT.mc_id=academic-105485-koreyst). + +## Construyendo tu primera aplicación de búsqueda + +A continuación, vamos a aprender cómo construir una aplicación de búsqueda utilizando Embeddings. La aplicación de búsqueda permitirá a los estudiantes buscar un video escribiendo una pregunta. La aplicación de búsqueda devolverá una lista de videos que son relevantes para la pregunta. La aplicación de búsqueda también devolverá un enlace al lugar en el video donde se encuentra la respuesta a la pregunta. + +Esta solución fue construida y probada en Windows 11, macOS y Ubuntu 22.04 usando Python 3.10 o posterior. Puedes descargar Python desde [python.org](https://www.python.org/downloads/?WT.mc_id=academic-105485-koreyst). + +## Asignación - construyendo una aplicación de búsqueda, para habilitar a los estudiantes + +Presentamos nuestra startup al comienzo de esta lección. Ahora es el momento de habilitar a los estudiantes para construir una aplicación de búsqueda para sus evaluaciones. + +En esta asignación, crearás los Servicios de Azure OpenAI que se utilizarán para construir la aplicación de búsqueda. Crearás los siguientes Servicios de Azure OpenAI. Necesitarás una suscripción a Azure para completar esta asignación. + +### Iniciar el Azure Cloud Shell + +1. Inicia sesión en el [portal de Azure](https://portal.azure.com/?WT.mc_id=academic-105485-koreyst). +2. Selecciona el ícono de Cloud Shell en la esquina superior derecha del portal de Azure. +3. Selecciona **Bash** para el tipo de entorno. + +#### Crear un grupo de recursos + +> Para estas instrucciones, estamos utilizando el grupo de recursos llamado "semantic-video-search" en East US. +> Puedes cambiar el nombre del grupo de recursos, pero al cambiar la ubicación de los recursos, +> verifica la [tabla de disponibilidad de modelos](https://aka.ms/oai/models?WT.mc_id=academic-105485-koreyst). + +```shell +az group create --name semantic-video-search --location eastus +``` + +#### Crear un recurso de Azure OpenAI Service + +Desde el Azure Cloud Shell, ejecuta el siguiente comando para crear un recurso de Azure OpenAI Service. + +```shell +az cognitiveservices account create --name semantic-video-openai --resource-group semantic-video-search \ + --location eastus --kind OpenAI --sku s0 +``` + +#### Obtener el punto de acceso y las claves para uso en esta aplicación + +Desde el Azure Cloud Shell, ejecuta los siguientes comandos para obtener el punto de acceso y las claves para el recurso de Azure OpenAI Service. + +```shell +az cognitiveservices account show --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .properties.endpoint +az cognitiveservices account keys list --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .key1 +``` + +#### Desplegar el modelo de Embedding de OpenAI + +Desde el Azure Cloud Shell, ejecuta el siguiente comando para desplegar el modelo de Embedding de OpenAI. + +```shell +az cognitiveservices account deployment create \ + --name semantic-video-openai \ + --resource-group semantic-video-search \ + --deployment-name text-embedding-ada-002 \ + --model-name text-embedding-ada-002 \ + --model-version "2" \ + --model-format OpenAI \ + --sku-capacity 100 --sku-name "Standard" +``` + +## Solución + +Abre el [cuaderno de solución](../../../08-building-search-applications/python/aoai-solution.ipynb) en GitHub Codespaces y sigue las instrucciones en el Jupyter Notebook. + +Cuando ejecutes el cuaderno, se te pedirá que ingreses una consulta. El cuadro de entrada se verá así: + +![Cuadro de entrada para que el usuario ingrese una consulta](../../../translated_images/notebook-search.png?WT.2910e3d34815aab8d713050521ac5fcb2436defe66fed016f56b95867eb12fbd.es.mc_id=academic-105485-koreyst) + +## ¡Gran Trabajo! Continúa Tu Aprendizaje + +Después de completar esta lección, revisa nuestra [colección de aprendizaje de IA Generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para seguir aumentando tus conocimientos en IA Generativa. + +¡Dirígete a la Lección 9 donde veremos cómo [construir aplicaciones de generación de imágenes](../09-building-image-applications/README.md?WT.mc_id=academic-105485-koreyst)! + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr 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 humana. No somos responsables de ningún 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/08-building-search-applications/scripts/README.md b/translations/es/08-building-search-applications/scripts/README.md new file mode 100644 index 000000000..3577c9312 --- /dev/null +++ b/translations/es/08-building-search-applications/scripts/README.md @@ -0,0 +1,167 @@ +# Preparación de datos de transcripción + +Los scripts de preparación de datos de transcripción descargan transcripciones de videos de YouTube y las preparan para su uso con el ejemplo de Búsqueda Semántica con OpenAI Embeddings y Funciones. + +Los scripts de preparación de datos de transcripción han sido probados en las últimas versiones de Windows 11, macOS Ventura y Ubuntu 22.04 (y superiores). + +## Crear los recursos necesarios del Servicio Azure OpenAI + +> [!IMPORTANT] +> Sugerimos actualizar Azure CLI a la última versión para asegurar la compatibilidad con OpenAI. +> Ver [Documentación](https://learn.microsoft.com/cli/azure/update-azure-cli?WT.mc_id=academic-105485-koreyst) + +1. Crear un grupo de recursos + +> [!NOTE] +> Para estas instrucciones, estamos utilizando el grupo de recursos llamado "semantic-video-search" en East US. +> Puedes cambiar el nombre del grupo de recursos, pero al cambiar la ubicación de los recursos, +> verifica la [tabla de disponibilidad de modelos](https://aka.ms/oai/models?WT.mc_id=academic-105485-koreyst). + +```console +az group create --name semantic-video-search --location eastus +``` + +1. Crear un recurso del Servicio Azure OpenAI. + +```console +az cognitiveservices account create --name semantic-video-openai --resource-group semantic-video-search \ + --location eastus --kind OpenAI --sku s0 +``` + +1. Obtener el endpoint y las claves para uso en esta aplicación + +```console +az cognitiveservices account show --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .properties.endpoint +az cognitiveservices account keys list --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .key1 +``` + +1. Implementar los siguientes modelos: + - `text-embedding-ada-002` version `2` or greater, named `text-embedding-ada-002` + - `gpt-35-turbo` version `0613` or greater, named `gpt-35-turbo` + +```console +az cognitiveservices account deployment create \ + --name semantic-video-openai \ + --resource-group semantic-video-search \ + --deployment-name text-embedding-ada-002 \ + --model-name text-embedding-ada-002 \ + --model-version "2" \ + --model-format OpenAI \ + --scale-settings-scale-type "Standard" +az cognitiveservices account deployment create \ + --name semantic-video-openai \ + --resource-group semantic-video-search \ + --deployment-name gpt-35-turbo \ + --model-name gpt-35-turbo \ + --model-version "0613" \ + --model-format OpenAI \ + --sku-capacity 100 \ + --sku-name "Standard" +``` + +## Software requerido + +- [Python 3.9](https://www.python.org/downloads/?WT.mc_id=academic-105485-koreyst) o superior + +## Variables de entorno + +Las siguientes variables de entorno son necesarias para ejecutar los scripts de preparación de datos de transcripción de YouTube. + +### En Windows + +Se recomienda agregar las variables a tu `usuario` environment variables. +`Inicio de Windows` > `Editar las variables de entorno del sistema` > `Variables de Entorno` > `Variables de usuario` for [USER] > `Nuevo`. + +```text +AZURE_OPENAI_API_KEY \ +AZURE_OPENAI_ENDPOINT \ +AZURE_OPENAI_MODEL_DEPLOYMENT_NAME \ +GOOGLE_DEVELOPER_API_KEY = \ +``` + +### En Linux y macOS + +Se recomienda agregar las siguientes exportaciones a tu archivo `~/.bashrc` or `~/.zshrc`. + +```bash +export AZURE_OPENAI_API_KEY= +export AZURE_OPENAI_ENDPOINT= +export AZURE_OPENAI_MODEL_DEPLOYMENT_NAME= +export GOOGLE_DEVELOPER_API_KEY= +``` + +## Instalar las bibliotecas de Python necesarias + +1. Instalar el [cliente de git](https://git-scm.com/downloads?WT.mc_id=academic-105485-koreyst) si aún no está instalado. +1. Desde una ventana de `Terminal`, clonar el ejemplo a tu carpeta de repositorio preferida. + + ```bash + git clone https://github.com/gloveboxes/semanic-search-openai-embeddings-functions.git + ``` + +1. Navegar a la carpeta `data_prep`. + + ```bash + cd semanic-search-openai-embeddings-functions/src/data_prep + ``` + +1. Crear un entorno virtual de Python. + + En Windows: + + ```powershell + python -m venv .venv + ``` + + En macOS y Linux: + + ```bash + python3 -m venv .venv + ``` + +1. Activar el entorno virtual de Python. + + En Windows: + + ```powershell + .venv\Scripts\activate + ``` + + En macOS y Linux: + + ```bash + source .venv/bin/activate + ``` + +1. Instalar las bibliotecas necesarias. + + En Windows: + + ```powershell + pip install -r requirements.txt + ``` + + En macOS y Linux: + + ```bash + pip3 install -r requirements.txt + ``` + +## Ejecutar los scripts de preparación de datos de transcripción de YouTube + +### En Windows + +```powershell +.\transcripts_prepare.ps1 +``` + +### En macOS y Linux + +```bash +./transcripts_prepare.sh +``` + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automatizada por inteligencia artificial. Si bien 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 somos responsables de ningún 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/09-building-image-applications/README.md b/translations/es/09-building-image-applications/README.md new file mode 100644 index 000000000..34978da91 --- /dev/null +++ b/translations/es/09-building-image-applications/README.md @@ -0,0 +1,468 @@ +# Construyendo Aplicaciones de Generación de Imágenes + +[![Construyendo Aplicaciones de Generación de Imágenes](../../../translated_images/09-lesson-banner.png?WT.d9f0561bfac2f22fe149efecb3524eaf381a4aa260ba334f49b1fd215bd59d75.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson9-gh?WT.mc_id=academic-105485-koreyst) + +Los LLMs no solo sirven para generar texto. También es posible generar imágenes a partir de descripciones de texto. Tener imágenes como una modalidad puede ser muy útil en varias áreas, desde MedTech, arquitectura, turismo, desarrollo de videojuegos y más. En este capítulo, exploraremos los dos modelos de generación de imágenes más populares, DALL-E y Midjourney. + +## Introducción + +En esta lección, cubriremos: + +- Generación de imágenes y por qué es útil. +- DALL-E y Midjourney, qué son y cómo funcionan. +- Cómo construirías una aplicación de generación de imágenes. + +## Objetivos de Aprendizaje + +Después de completar esta lección, serás capaz de: + +- Construir una aplicación de generación de imágenes. +- Definir límites para tu aplicación con meta prompts. +- Trabajar con DALL-E y Midjourney. + +## ¿Por qué construir una aplicación de generación de imágenes? + +Las aplicaciones de generación de imágenes son una excelente manera de explorar las capacidades de la IA Generativa. Se pueden usar, por ejemplo, para: + +- **Edición y síntesis de imágenes**. Puedes generar imágenes para una variedad de casos de uso, como la edición de imágenes y la síntesis de imágenes. + +- **Aplicado a una variedad de industrias**. También se pueden usar para generar imágenes para una variedad de industrias como MedTech, Turismo, Desarrollo de Videojuegos y más. + +## Escenario: Edu4All + +Como parte de esta lección, continuaremos trabajando con nuestra startup, Edu4All. Los estudiantes crearán imágenes para sus evaluaciones, qué imágenes crear es decisión de los estudiantes, pero podrían ser ilustraciones para su propio cuento de hadas o crear un nuevo personaje para su historia o ayudarles a visualizar sus ideas y conceptos. + +Aquí está lo que los estudiantes de Edu4All podrían generar, por ejemplo, si están trabajando en clase sobre monumentos: + +![Startup Edu4All, clase sobre monumentos, Torre Eiffel](../../../translated_images/startup.png?WT.da6453984b26f46f3e26925e20877c740be4f328afdfce9fe36b23e7b434c7b5.es.mc_id=academic-105485-koreyst) + +usando un prompt como + +> "Perro junto a la Torre Eiffel en la luz del sol de la mañana temprano" + +## ¿Qué es DALL-E y Midjourney? + +[DALL-E](https://openai.com/dall-e-2?WT.mc_id=academic-105485-koreyst) y [Midjourney](https://www.midjourney.com/?WT.mc_id=academic-105485-koreyst) son dos de los modelos de generación de imágenes más populares, te permiten usar prompts para generar imágenes. + +### DALL-E + +Comencemos con DALL-E, que es un modelo de IA Generativa que genera imágenes a partir de descripciones de texto. + +> [DALL-E es una combinación de dos modelos, CLIP y atención difusa](https://towardsdatascience.com/openais-dall-e-and-clip-101-a-brief-introduction-3a4367280d4e?WT.mc_id=academic-105485-koreyst). + +- **CLIP**, es un modelo que genera embeddings, que son representaciones numéricas de datos, a partir de imágenes y texto. + +- **Atención difusa**, es un modelo que genera imágenes a partir de embeddings. DALL-E está entrenado en un conjunto de datos de imágenes y texto y se puede usar para generar imágenes a partir de descripciones de texto. Por ejemplo, DALL-E se puede usar para generar imágenes de un gato con sombrero, o un perro con un mohawk. + +### Midjourney + +Midjourney funciona de manera similar a DALL-E, genera imágenes a partir de prompts de texto. Midjourney también se puede usar para generar imágenes usando prompts como "un gato con sombrero" o "un perro con un mohawk". + +![Imagen generada por Midjourney, paloma mecánica](https://upload.wikimedia.org/wikipedia/commons/thumb/8/8c/Rupert_Breheny_mechanical_dove_eca144e7-476d-4976-821d-a49c408e4f36.png/440px-Rupert_Breheny_mechanical_dove_eca144e7-476d-4976-821d-a49c408e4f36.png?WT.mc_id=academic-105485-koreyst) +_Crédito de la imagen Wikipedia, imagen generada por Midjourney_ + +## ¿Cómo funcionan DALL-E y Midjourney? + +Primero, [DALL-E](https://arxiv.org/pdf/2102.12092.pdf?WT.mc_id=academic-105485-koreyst). DALL-E es un modelo de IA Generativa basado en la arquitectura transformer con un _transformer autorregresivo_. + +Un _transformer autorregresivo_ define cómo un modelo genera imágenes a partir de descripciones de texto, genera un píxel a la vez y luego utiliza los píxeles generados para generar el siguiente píxel. Pasando por múltiples capas en una red neuronal, hasta que la imagen esté completa. + +Con este proceso, DALL-E controla atributos, objetos, características y más en la imagen que genera. Sin embargo, DALL-E 2 y 3 tienen más control sobre la imagen generada. + +## Construyendo tu primera aplicación de generación de imágenes + +Entonces, ¿qué se necesita para construir una aplicación de generación de imágenes? Necesitas las siguientes bibliotecas: + +- **python-dotenv**, se recomienda encarecidamente usar esta biblioteca para mantener tus secretos en un archivo _.env_ separado del código. +- **openai**, esta biblioteca es la que usarás para interactuar con la API de OpenAI. +- **pillow**, para trabajar con imágenes en Python. +- **requests**, para ayudarte a realizar solicitudes HTTP. + +1. Crea un archivo _.env_ con el siguiente contenido: + + ```text + AZURE_OPENAI_ENDPOINT= + AZURE_OPENAI_API_KEY= + ``` + + Localiza esta información en Azure Portal para tu recurso en la sección "Keys and Endpoint". + +1. Reúne las bibliotecas anteriores en un archivo llamado _requirements.txt_ de la siguiente manera: + + ```text + python-dotenv + openai + pillow + requests + ``` + +1. A continuación, crea un entorno virtual e instala las bibliotecas: + + ```bash + python3 -m venv venv + source venv/bin/activate + pip install -r requirements.txt + ``` + + Para Windows, usa los siguientes comandos para crear y activar tu entorno virtual: + + ```bash + python3 -m venv venv + venv\Scripts\activate.bat + ``` + +1. Añade el siguiente código en un archivo llamado _app.py_: + + ```python + import openai + import os + import requests + from PIL import Image + import dotenv + + # import dotenv + dotenv.load_dotenv() + + # Get endpoint and key from environment variables + openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] + openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] + + # Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only) + openai.api_version = '2023-06-01-preview' + openai.api_type = 'azure' + + + try: + # Create an image by using the image generation API + generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) + # Set the directory for the stored image + image_dir = os.path.join(os.curdir, 'images') + + # If the directory doesn't exist, create it + if not os.path.isdir(image_dir): + os.mkdir(image_dir) + + # Initialize the image path (note the filetype should be png) + image_path = os.path.join(image_dir, 'generated-image.png') + + # Retrieve the generated image + image_url = generation_response["data"][0]["url"] # extract image URL from response + generated_image = requests.get(image_url).content # download the image + with open(image_path, "wb") as image_file: + image_file.write(generated_image) + + # Display the image in the default image viewer + image = Image.open(image_path) + image.show() + + # catch exceptions + except openai.InvalidRequestError as err: + print(err) + + ``` + +Expliquemos este código: + +- Primero, importamos las bibliotecas que necesitamos, incluyendo la biblioteca de OpenAI, la biblioteca dotenv, la biblioteca requests y la biblioteca Pillow. + + ```python + import openai + import os + import requests + from PIL import Image + import dotenv + ``` + +- A continuación, cargamos las variables de entorno desde el archivo _.env_. + + ```python + # import dotenv + dotenv.load_dotenv() + ``` + +- Después de eso, configuramos el endpoint, la clave para la API de OpenAI, la versión y el tipo. + + ```python + # Get endpoint and key from environment variables + openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] + openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] + + # add version and type, Azure specific + openai.api_version = '2023-06-01-preview' + openai.api_type = 'azure' + ``` + +- A continuación, generamos la imagen: + + ```python + # Create an image by using the image generation API + generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) + ``` + + El código anterior responde con un objeto JSON que contiene la URL de la imagen generada. Podemos usar la URL para descargar la imagen y guardarla en un archivo. + +- Por último, abrimos la imagen y usamos el visor de imágenes estándar para mostrarla: + + ```python + image = Image.open(image_path) + image.show() + ``` + +### Más detalles sobre la generación de la imagen + +Veamos el código que genera la imagen con más detalle: + +```python +generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) +``` + +- **prompt**, es el texto que se usa para generar la imagen. En este caso, estamos usando el prompt "Conejo en un caballo, sosteniendo una piruleta, en un prado brumoso donde crecen narcisos". +- **size**, es el tamaño de la imagen que se genera. En este caso, estamos generando una imagen de 1024x1024 píxeles. +- **n**, es el número de imágenes que se generan. En este caso, estamos generando dos imágenes. +- **temperature**, es un parámetro que controla la aleatoriedad de la salida de un modelo de IA Generativa. La temperatura es un valor entre 0 y 1 donde 0 significa que la salida es determinista y 1 significa que la salida es aleatoria. El valor predeterminado es 0.7. + +Hay más cosas que puedes hacer con las imágenes que cubriremos en la siguiente sección. + +## Capacidades adicionales de la generación de imágenes + +Hasta ahora has visto cómo pudimos generar una imagen usando unas pocas líneas en Python. Sin embargo, hay más cosas que puedes hacer con las imágenes. + +También puedes hacer lo siguiente: + +- **Realizar ediciones**. Al proporcionar una imagen existente, una máscara y un prompt, puedes alterar una imagen. Por ejemplo, puedes añadir algo a una parte de una imagen. Imagina nuestra imagen de conejo, puedes añadir un sombrero al conejo. Cómo harías eso es proporcionando la imagen, una máscara (identificando la parte del área para el cambio) y un prompt de texto para decir qué se debe hacer. + + ```python + response = openai.Image.create_edit( + image=open("base_image.png", "rb"), + mask=open("mask.png", "rb"), + prompt="An image of a rabbit with a hat on its head.", + n=1, + size="1024x1024" + ) + image_url = response['data'][0]['url'] + ``` + + La imagen base solo contendría el conejo, pero la imagen final tendría el sombrero en el conejo. + +- **Crear variaciones**. La idea es que tomes una imagen existente y pidas que se creen variaciones. Para crear una variación, proporcionas una imagen y un prompt de texto y código como este: + + ```python + response = openai.Image.create_variation( + image=open("bunny-lollipop.png", "rb"), + n=1, + size="1024x1024" + ) + image_url = response['data'][0]['url'] + ``` + + > Nota, esto solo es compatible con OpenAI + +## Temperatura + +La temperatura es un parámetro que controla la aleatoriedad de la salida de un modelo de IA Generativa. La temperatura es un valor entre 0 y 1 donde 0 significa que la salida es determinista y 1 significa que la salida es aleatoria. El valor predeterminado es 0.7. + +Veamos un ejemplo de cómo funciona la temperatura, ejecutando este prompt dos veces: + +> Prompt : "Conejo en un caballo, sosteniendo una piruleta, en un prado brumoso donde crecen narcisos" + +![Conejo en un caballo sosteniendo una piruleta, versión 1](../../../translated_images/v1-generated-image.png?WT.e88fb2d10c6d1ae1c198e2959629a4737a139b457fed4b2f325b2ea8d2c7bca6.es.mc_id=academic-105485-koreyst) + +Ahora ejecutemos ese mismo prompt solo para ver que no obtendremos la misma imagen dos veces: + +![Imagen generada de conejo en caballo](../../../translated_images/v2-generated-image.png?WT.10df7dd739ff1f669b915523632a51ade0346b30603d8bf996872ac629f3dcd7.es.mc_id=academic-105485-koreyst) + +Como puedes ver, las imágenes son similares, pero no son las mismas. Intentemos cambiar el valor de la temperatura a 0.1 y ver qué sucede: + +```python + generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2 + ) +``` + +### Cambiando la temperatura + +Intentemos hacer que la respuesta sea más determinista. Pudimos observar de las dos imágenes que generamos que en la primera imagen, hay un conejo y en la segunda imagen, hay un caballo, por lo que las imágenes varían mucho. + +Cambiemos entonces nuestro código y establezcamos la temperatura en 0, así: + +```python +generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0 + ) +``` + +Ahora, cuando ejecutes este código, obtendrás estas dos imágenes: + +- ![Temperatura 0, v1](../../../translated_images/v1-temp-generated-image.png?WT.27c4ce8ff113ce11a5a45b5c74e319c5115b0b832a3697bc91fc653d0a5f7609.es.mc_id=academic-105485-koreyst) +- ![Temperatura 0, v2](../../../translated_images/v2-temp-generated-image.png?WT.04d52c2aa6ef41f4d67040329ca204ef927512f46bb9dfef035e02098f45d0f7.es.mc_id=academic-105485-koreyst) + +Aquí puedes ver claramente cómo las imágenes se parecen más entre sí. + +## Cómo definir límites para tu aplicación con metaprompts + +Con nuestra demostración, ya podemos generar imágenes para nuestros clientes. Sin embargo, necesitamos crear algunos límites para nuestra aplicación. + +Por ejemplo, no queremos generar imágenes que no sean seguras para el trabajo, o que no sean apropiadas para niños. + +Podemos hacer esto con _metaprompts_. Los metaprompts son prompts de texto que se usan para controlar la salida de un modelo de IA Generativa. Por ejemplo, podemos usar metaprompts para controlar la salida y asegurar que las imágenes generadas sean seguras para el trabajo o apropiadas para niños. + +### ¿Cómo funciona? + +Ahora, ¿cómo funcionan los metaprompts? + +Los metaprompts son prompts de texto que se usan para controlar la salida de un modelo de IA Generativa, se colocan antes del prompt de texto y se usan para controlar la salida del modelo y se incrustan en aplicaciones para controlar la salida del modelo. Encapsulando el input del prompt y el input del metaprompt en un solo prompt de texto. + +Un ejemplo de un metaprompt sería el siguiente: + +```text +You are an assistant designer that creates images for children. + +The image needs to be safe for work and appropriate for children. + +The image needs to be in color. + +The image needs to be in landscape orientation. + +The image needs to be in a 16:9 aspect ratio. + +Do not consider any input from the following that is not safe for work or appropriate for children. + +(Input) + +``` + +Ahora, veamos cómo podemos usar metaprompts en nuestra demostración. + +```python +disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult" + +meta_prompt =f"""You are an assistant designer that creates images for children. + +The image needs to be safe for work and appropriate for children. + +The image needs to be in color. + +The image needs to be in landscape orientation. + +The image needs to be in a 16:9 aspect ratio. + +Do not consider any input from the following that is not safe for work or appropriate for children. +{disallow_list} +""" + +prompt = f"{meta_prompt} +Create an image of a bunny on a horse, holding a lollipop" + +# TODO add request to generate image +``` + +Del prompt anterior, puedes ver cómo todas las imágenes que se crean consideran el metaprompt. + +## Tarea - habilitemos a los estudiantes + +Introdujimos Edu4All al principio de esta lección. Ahora es momento de habilitar a los estudiantes para que generen imágenes para sus evaluaciones. + +Los estudiantes crearán imágenes para sus evaluaciones que contengan monumentos, exactamente qué monumentos es decisión de los estudiantes. Se les pide a los estudiantes que usen su creatividad en esta tarea para colocar estos monumentos en diferentes contextos. + +## Solución + +Aquí hay una posible solución: + +```python +import openai +import os +import requests +from PIL import Image +import dotenv + +# import dotenv +dotenv.load_dotenv() + +# Get endpoint and key from environment variables +openai.api_base = "" +openai.api_key = "" + +# Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only) +openai.api_version = '2023-06-01-preview' +openai.api_type = 'azure' + +disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult" + +meta_prompt = f"""You are an assistant designer that creates images for children. + +The image needs to be safe for work and appropriate for children. + +The image needs to be in color. + +The image needs to be in landscape orientation. + +The image needs to be in a 16:9 aspect ratio. + +Do not consider any input from the following that is not safe for work or appropriate for children. +{disallow_list}""" + +prompt = f"""{metaprompt} +Generate monument of the Arc of Triumph in Paris, France, in the evening light with a small child holding a Teddy looks on. +"""" + +try: + # Create an image by using the image generation API + generation_response = openai.Image.create( + prompt=prompt, # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) + # Set the directory for the stored image + image_dir = os.path.join(os.curdir, 'images') + + # If the directory doesn't exist, create it + if not os.path.isdir(image_dir): + os.mkdir(image_dir) + + # Initialize the image path (note the filetype should be png) + image_path = os.path.join(image_dir, 'generated-image.png') + + # Retrieve the generated image + image_url = generation_response["data"][0]["url"] # extract image URL from response + generated_image = requests.get(image_url).content # download the image + with open(image_path, "wb") as image_file: + image_file.write(generated_image) + + # Display the image in the default image viewer + image = Image.open(image_path) + image.show() + +# catch exceptions +except openai.InvalidRequestError as err: + print(err) +``` + +## ¡Gran Trabajo! Continúa tu Aprendizaje + +Después de completar esta lección, revisa nuestra [colección de Aprendizaje de IA Generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para continuar mejorando tu conocimiento en IA Generativa. + +Dirígete a la Lección 10 donde veremos cómo [construir aplicaciones de IA con poco código](../10-building-low-code-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas 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 humana profesional. No nos hacemos responsables de ningún 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/10-building-low-code-ai-applications/README.md b/translations/es/10-building-low-code-ai-applications/README.md new file mode 100644 index 000000000..50e3bf679 --- /dev/null +++ b/translations/es/10-building-low-code-ai-applications/README.md @@ -0,0 +1,237 @@ +# Construcción de Aplicaciones de IA de Bajo Código + +[![Construcción de Aplicaciones de IA de Bajo Código](../../../translated_images/10-lesson-banner.png?WT.03212fed0693cf8837c727edc800942dbc5ef3a3036a8f7f399c6c08f6f59b92.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson10-gh?WT.mc_id=academic-105485-koreyst) + +> _(Haz clic en la imagen de arriba para ver el video de esta lección)_ + +## Introducción + +Ahora que hemos aprendido a construir aplicaciones generadoras de imágenes, hablemos sobre el bajo código. La IA generativa se puede usar en varias áreas diferentes, incluyendo el bajo código, pero ¿qué es el bajo código y cómo podemos añadir IA a él? + +La construcción de aplicaciones y soluciones se ha vuelto más fácil tanto para desarrolladores tradicionales como para no desarrolladores mediante el uso de Plataformas de Desarrollo de Bajo Código. Estas plataformas te permiten construir aplicaciones y soluciones con poco o ningún código, proporcionando un entorno de desarrollo visual que te permite arrastrar y soltar componentes. Esto te permite construir aplicaciones y soluciones más rápido y con menos recursos. En esta lección, profundizaremos en cómo usar el bajo código y cómo mejorar el desarrollo de bajo código con IA utilizando Power Platform. + +Power Platform ofrece a las organizaciones la oportunidad de capacitar a sus equipos para construir sus propias soluciones a través de un entorno intuitivo de bajo código o sin código. Este entorno ayuda a simplificar el proceso de construcción de soluciones. Con Power Platform, las soluciones pueden construirse en días o semanas en lugar de meses o años. Power Platform consta de cinco productos clave: Power Apps, Power Automate, Power BI, Power Pages y Copilot Studio. + +Esta lección cubre: + +- Introducción a la IA Generativa en Power Platform +- Introducción a Copilot y cómo usarlo +- Uso de la IA Generativa para construir aplicaciones y flujos en Power Platform +- Comprensión de los Modelos de IA en Power Platform con AI Builder + +## Objetivos de Aprendizaje + +Al final de esta lección, podrás: + +- Comprender cómo funciona Copilot en Power Platform. + +- Construir una aplicación de seguimiento de tareas estudiantiles para nuestra startup educativa. + +- Crear un flujo de procesamiento de facturas que use IA para extraer información de las facturas. + +- Aplicar mejores prácticas al usar el modelo de IA para crear texto con GPT. + +Las herramientas y tecnologías que usarás en esta lección son: + +- **Power Apps**, para la aplicación de seguimiento de tareas estudiantiles, que proporciona un entorno de desarrollo de bajo código para construir aplicaciones que rastrean, gestionan e interactúan con datos. + +- **Dataverse**, para almacenar los datos de la aplicación de seguimiento de tareas estudiantiles, donde Dataverse proporcionará una plataforma de datos de bajo código para almacenar los datos de la aplicación. + +- **Power Automate**, para el flujo de procesamiento de facturas donde tendrás un entorno de desarrollo de bajo código para construir flujos de trabajo que automaticen el proceso de procesamiento de facturas. + +- **AI Builder**, para el modelo de IA de procesamiento de facturas donde usarás modelos de IA preconstruidos para procesar las facturas de nuestra startup. + +## IA Generativa en Power Platform + +Mejorar el desarrollo y la aplicación de bajo código con IA generativa es un área clave de enfoque para Power Platform. El objetivo es permitir que todos construyan aplicaciones, sitios, paneles de control y procesos automatizados con IA, _sin requerir experiencia en ciencia de datos_. Este objetivo se logra integrando IA generativa en la experiencia de desarrollo de bajo código en Power Platform en forma de Copilot y AI Builder. + +### ¿Cómo funciona esto? + +Copilot es un asistente de IA que te permite construir soluciones de Power Platform describiendo tus requisitos en una serie de pasos conversacionales utilizando lenguaje natural. Por ejemplo, puedes instruir a tu asistente de IA para que indique qué campos usará tu aplicación y esta creará tanto la aplicación como el modelo de datos subyacente, o podrías especificar cómo configurar un flujo en Power Automate. + +Puedes usar funcionalidades impulsadas por Copilot como una característica en las pantallas de tu aplicación para permitir a los usuarios descubrir información a través de interacciones conversacionales. + +AI Builder es una capacidad de IA de bajo código disponible en Power Platform que te permite usar modelos de IA para ayudarte a automatizar procesos y predecir resultados. Con AI Builder puedes llevar IA a tus aplicaciones y flujos que se conectan a tus datos en Dataverse o en varias fuentes de datos en la nube, como SharePoint, OneDrive o Azure. + +Copilot está disponible en todos los productos de Power Platform: Power Apps, Power Automate, Power BI, Power Pages y Power Virtual Agents. AI Builder está disponible en Power Apps y Power Automate. En esta lección, nos centraremos en cómo usar Copilot y AI Builder en Power Apps y Power Automate para construir una solución para nuestra startup educativa. + +### Copilot en Power Apps + +Como parte de Power Platform, Power Apps proporciona un entorno de desarrollo de bajo código para construir aplicaciones que rastrean, gestionan e interactúan con datos. Es un conjunto de servicios de desarrollo de aplicaciones con una plataforma de datos escalable y la capacidad de conectarse a servicios en la nube y datos locales. Power Apps te permite construir aplicaciones que funcionan en navegadores, tabletas y teléfonos, y pueden compartirse con compañeros de trabajo. Power Apps facilita a los usuarios el desarrollo de aplicaciones con una interfaz simple, para que cualquier usuario de negocios o desarrollador profesional pueda construir aplicaciones personalizadas. La experiencia de desarrollo de aplicaciones también se mejora con la IA Generativa a través de Copilot. + +La función de asistente de IA Copilot en Power Apps te permite describir qué tipo de aplicación necesitas y qué información deseas que tu aplicación rastree, recopile o muestre. Copilot luego genera una aplicación Canvas receptiva basada en tu descripción. Luego puedes personalizar la aplicación para satisfacer tus necesidades. El asistente de IA Copilot también genera y sugiere una tabla de Dataverse con los campos que necesitas para almacenar los datos que deseas rastrear y algunos datos de muestra. Más adelante en esta lección, veremos qué es Dataverse y cómo puedes usarlo en Power Apps. Luego puedes personalizar la tabla para satisfacer tus necesidades usando la función de asistente de IA Copilot a través de pasos conversacionales. Esta función está disponible desde la pantalla de inicio de Power Apps. + +### Copilot en Power Automate + +Como parte de Power Platform, Power Automate permite a los usuarios crear flujos de trabajo automatizados entre aplicaciones y servicios. Ayuda a automatizar procesos comerciales repetitivos como la comunicación, la recopilación de datos y las aprobaciones de decisiones. Su interfaz simple permite a usuarios con diferentes niveles de competencia técnica (desde principiantes hasta desarrolladores experimentados) automatizar tareas laborales. La experiencia de desarrollo de flujos de trabajo también se mejora con la IA Generativa a través de Copilot. + +La función de asistente de IA Copilot en Power Automate te permite describir qué tipo de flujo necesitas y qué acciones deseas que tu flujo realice. Copilot luego genera un flujo basado en tu descripción. Luego puedes personalizar el flujo para satisfacer tus necesidades. El asistente de IA Copilot también genera y sugiere las acciones que necesitas para realizar la tarea que deseas automatizar. Más adelante en esta lección, veremos qué son los flujos y cómo puedes usarlos en Power Automate. Luego puedes personalizar las acciones para satisfacer tus necesidades usando la función de asistente de IA Copilot a través de pasos conversacionales. Esta función está disponible desde la pantalla de inicio de Power Automate. + +## Asignación: gestionar tareas estudiantiles y facturas para nuestra startup, usando Copilot + +Nuestra startup ofrece cursos en línea a estudiantes. La startup ha crecido rápidamente y ahora tiene dificultades para mantenerse al día con la demanda de sus cursos. La startup te ha contratado como desarrollador de Power Platform para ayudarles a construir una solución de bajo código que les ayude a gestionar sus tareas estudiantiles y facturas. Su solución debería poder ayudarles a rastrear y gestionar las tareas estudiantiles a través de una aplicación y automatizar el proceso de procesamiento de facturas a través de un flujo de trabajo. Te han pedido que uses IA Generativa para desarrollar la solución. + +Cuando comiences a usar Copilot, puedes usar la [Biblioteca de Prompts de Power Platform Copilot](https://github.com/pnp/powerplatform-prompts?WT.mc_id=academic-109639-somelezediko) para comenzar con los prompts. Esta biblioteca contiene una lista de prompts que puedes usar para construir aplicaciones y flujos con Copilot. También puedes usar los prompts en la biblioteca para obtener una idea de cómo describir tus requisitos a Copilot. + +### Construir una Aplicación de Seguimiento de Tareas Estudiantiles para Nuestra Startup + +Los educadores de nuestra startup han estado luchando para llevar un seguimiento de las tareas estudiantiles. Han estado usando una hoja de cálculo para rastrear las tareas, pero esto se ha vuelto difícil de gestionar a medida que ha aumentado el número de estudiantes. Te han pedido que construyas una aplicación que les ayude a rastrear y gestionar las tareas estudiantiles. La aplicación debería permitirles añadir nuevas tareas, ver tareas, actualizar tareas y eliminar tareas. La aplicación también debería permitir a los educadores y estudiantes ver las tareas que han sido calificadas y las que no. + +Construirás la aplicación usando Copilot en Power Apps siguiendo los pasos a continuación: + +1. Navega a la pantalla de inicio de [Power Apps](https://make.powerapps.com?WT.mc_id=academic-105485-koreyst). + +1. Usa el área de texto en la pantalla de inicio para describir la aplicación que deseas construir. Por ejemplo, **_Quiero construir una aplicación para rastrear y gestionar tareas estudiantiles_**. Haz clic en el botón **Enviar** para enviar el prompt al AI Copilot. + +![Describe la aplicación que deseas construir](../../../translated_images/copilot-chat-prompt-powerapps.png?WT.30e5da1eee18fc179cbbe27b088aaa20d89624eaaed11a7750372ee8feb61af6.es.mc_id=academic-105485-koreyst) + +1. El AI Copilot sugerirá una tabla de Dataverse con los campos que necesitas para almacenar los datos que deseas rastrear y algunos datos de muestra. Luego puedes personalizar la tabla para satisfacer tus necesidades usando la función de asistente de AI Copilot a través de pasos conversacionales. + + > **Importante**: Dataverse es la plataforma de datos subyacente para Power Platform. Es una plataforma de datos de bajo código para almacenar los datos de la aplicación. Es un servicio completamente gestionado que almacena datos de forma segura en la nube de Microsoft y se provisiona dentro de tu entorno de Power Platform. Viene con capacidades de gobernanza de datos integradas, como clasificación de datos, linaje de datos, control de acceso detallado y más. Puedes aprender más sobre Dataverse [aquí](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko). + + ![Campos sugeridos en tu nueva tabla](../../../translated_images/copilot-dataverse-table-powerapps.png?WT.d0158f12f6f02fdf31b4a056b0efbf5a64f49a2c2b6b9ea09b0f3a17d1189579.es.mc_id=academic-105485-koreyst) + +1. Los educadores quieren enviar correos electrónicos a los estudiantes que han enviado sus tareas para mantenerlos actualizados sobre el progreso de sus tareas. Puedes usar Copilot para añadir un nuevo campo a la tabla para almacenar el correo electrónico del estudiante. Por ejemplo, puedes usar el siguiente prompt para añadir un nuevo campo a la tabla: **_Quiero añadir una columna para almacenar el correo electrónico del estudiante_**. Haz clic en el botón **Enviar** para enviar el prompt al AI Copilot. + +![Añadiendo un nuevo campo](../../../translated_images/copilot-new-column.png?WT.18e16fce13f73236f484dc1b59e3d8e83a80c1cdf40854077a3dc800df76c560.es.mc_id=academic-105485-koreyst) + +1. El AI Copilot generará un nuevo campo y luego puedes personalizar el campo para satisfacer tus necesidades. + +1. Una vez que hayas terminado con la tabla, haz clic en el botón **Crear aplicación** para crear la aplicación. + +1. El AI Copilot generará una aplicación Canvas receptiva basada en tu descripción. Luego puedes personalizar la aplicación para satisfacer tus necesidades. + +1. Para que los educadores envíen correos electrónicos a los estudiantes, puedes usar Copilot para añadir una nueva pantalla a la aplicación. Por ejemplo, puedes usar el siguiente prompt para añadir una nueva pantalla a la aplicación: **_Quiero añadir una pantalla para enviar correos electrónicos a los estudiantes_**. Haz clic en el botón **Enviar** para enviar el prompt al AI Copilot. + +![Añadiendo una nueva pantalla mediante una instrucción de prompt](../../../translated_images/copilot-new-screen.png?WT.afdf65429e4ef7b2eb58038fe91de6a3ebe7ca1d85e89c584efcb6da12abfdeb.es.mc_id=academic-105485-koreyst) + +1. El AI Copilot generará una nueva pantalla y luego puedes personalizar la pantalla para satisfacer tus necesidades. + +1. Una vez que hayas terminado con la aplicación, haz clic en el botón **Guardar** para guardar la aplicación. + +1. Para compartir la aplicación con los educadores, haz clic en el botón **Compartir** y luego haz clic nuevamente en el botón **Compartir**. Luego puedes compartir la aplicación con los educadores ingresando sus direcciones de correo electrónico. + +> **Tu tarea**: La aplicación que acabas de construir es un buen comienzo pero puede mejorarse. Con la función de correo electrónico, los educadores solo pueden enviar correos electrónicos a los estudiantes manualmente teniendo que escribir sus correos electrónicos. ¿Puedes usar Copilot para construir una automatización que permita a los educadores enviar correos electrónicos a los estudiantes automáticamente cuando envían sus tareas? Tu pista es que con el prompt adecuado puedes usar Copilot en Power Automate para construir esto. + +### Construir una Tabla de Información de Facturas para Nuestra Startup + +El equipo de finanzas de nuestra startup ha estado luchando para llevar un seguimiento de las facturas. Han estado usando una hoja de cálculo para rastrear las facturas, pero esto se ha vuelto difícil de gestionar a medida que ha aumentado el número de facturas. Te han pedido que construyas una tabla que les ayude a almacenar, rastrear y gestionar la información de las facturas que reciben. La tabla debería usarse para construir una automatización que extraiga toda la información de las facturas y la almacene en la tabla. La tabla también debería permitir al equipo de finanzas ver las facturas que han sido pagadas y las que no. + +Power Platform tiene una plataforma de datos subyacente llamada Dataverse que te permite almacenar los datos para tus aplicaciones y soluciones. Dataverse proporciona una plataforma de datos de bajo código para almacenar los datos de la aplicación. Es un servicio completamente gestionado que almacena datos de forma segura en la nube de Microsoft y se provisiona dentro de tu entorno de Power Platform. Viene con capacidades de gobernanza de datos integradas, como clasificación de datos, linaje de datos, control de acceso detallado y más. Puedes aprender más [sobre Dataverse aquí](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko). + +¿Por qué deberíamos usar Dataverse para nuestra startup? Las tablas estándar y personalizadas dentro de Dataverse proporcionan una opción de almacenamiento segura y basada en la nube para tus datos. Las tablas te permiten almacenar diferentes tipos de datos, similar a cómo podrías usar múltiples hojas de trabajo en un solo libro de Excel. Puedes usar tablas para almacenar datos que sean específicos para tu organización o necesidad empresarial. Algunos de los beneficios que nuestra startup obtendrá al usar Dataverse incluyen pero no se limitan a: + +- **Fácil de gestionar**: Tanto los metadatos como los datos se almacenan en la nube, por lo que no tienes que preocuparte por los detalles de cómo se almacenan o gestionan. Puedes centrarte en construir tus aplicaciones y soluciones. + +- **Seguro**: Dataverse proporciona una opción de almacenamiento segura y basada en la nube para tus datos. Puedes controlar quién tiene acceso a los datos en tus tablas y cómo pueden acceder a ellos utilizando seguridad basada en roles. + +- **Ricos metadatos**: Los tipos de datos y las relaciones se usan directamente dentro de Power Apps. + +- **Lógica y validación**: Puedes usar reglas de negocio, campos calculados y reglas de validación para aplicar lógica empresarial y mantener la precisión de los datos. + +Ahora que sabes qué es Dataverse y por qué deberías usarlo, veamos cómo puedes usar Copilot para crear una tabla en Dataverse que cumpla con los requisitos de nuestro equipo de finanzas. + +> **Nota**: Usarás esta tabla en la siguiente sección para construir una automatización que extraiga toda la información de las facturas y la almacene en la tabla. + +Para crear una tabla en Dataverse usando Copilot, sigue los pasos a continuación: + +1. Navega a la pantalla de inicio de [Power Apps](https://make.powerapps.com?WT.mc_id=academic-105485-koreyst). + +2. En la barra de navegación izquierda, selecciona **Tablas** y luego haz clic en **Describir la nueva Tabla**. + + ![Seleccionar nueva tabla](../../../translated_images/describe-new-table.png?WT.1934e0de36f3fb613a023df3dcca89ba55f5d8d118e59b997d3f58e346f9e5db.es.mc_id=academic-105485-koreyst) + +1. En la pantalla **Describir la nueva Tabla**, usa el área de texto para describir la tabla que deseas crear. Por ejemplo, **_Quiero crear una tabla para almacenar información de facturas_**. Haz clic en el botón **Enviar** para enviar el prompt al AI Copilot. + + ![Describe la tabla](../../../translated_images/copilot-chat-prompt-dataverse.png?WT.07979e2dd2a5c59cdd535f61e0dc2e0ce9d964189f70230e2a39ebb574a877cd.es.mc_id=academic-105485-koreyst) + +1. El AI Copilot sugerirá una tabla de Dataverse con los campos que necesitas para almacenar los datos que deseas rastrear y algunos datos de muestra. Luego puedes personalizar la tabla para satisfacer tus necesidades usando la función de asistente de AI Copilot a través de pasos conversacionales. + + ![Tabla de Dataverse sugerida](../../../translated_images/copilot-dataverse-table.png?WT.45e9dc11cec7f53431fef3c849a45a5a0e52bdd3d621de57ff591f9af23aae38.es.mc_id=academic-105485-koreyst) + +1. El equipo de finanzas quiere enviar un correo electrónico al proveedor para actualizarlos con el estado actual de su factura. Puedes usar Copilot para añadir un nuevo campo a la tabla para almacenar el correo electrónico del proveedor. Por ejemplo, puedes usar el siguiente prompt para añadir un nuevo campo a la tabla: **_Quiero añadir una columna para almacenar el correo electrónico del proveedor_**. Haz clic en el botón **Enviar** para enviar el prompt al AI Copilot. + +1. El AI Copilot generará un nuevo campo y luego puedes personalizar el campo para satisfacer tus necesidades. + +1. Una vez que hayas terminado con la tabla, haz clic en el botón **Crear** para crear la tabla. + +## Modelos de IA en Power Platform con AI Builder + +AI Builder es una capacidad de IA de bajo código disponible en Power Platform que te permite usar modelos de IA para ayudarte a automatizar procesos y predecir resultados. Con AI Builder puedes llevar IA a tus aplicaciones y flujos que se conectan a tus datos en Dataverse o en varias fuentes de datos en la nube, como SharePoint, OneDrive o Azure. + +## Modelos de IA Preconstruidos vs Modelos de IA Personalizados + +AI Builder proporciona dos tipos de modelos de IA: Modelos de IA Preconstruidos y Modelos de IA Personalizados. Los modelos de IA Preconstruidos son modelos de IA listos para usar que son entrenados por Microsoft y están disponibles en Power Platform. Estos te ayudan a añadir inteligencia a tus aplicaciones y flujos sin tener que recopilar datos y luego construir, entrenar y publicar tus propios modelos. Puedes usar +# Traducción del archivo Markdown + +Este archivo está escrito en formato Markdown. Asegúrate de que la traducción no suene demasiado literal y de traducir los comentarios también. No traduzcas ningún [!NOTE], [!WARNING], [!TIP], [!IMPORTANT] o [!CAUTION]. No traduzcas entidades como nombres de variables, nombres de funciones, nombres de clases o marcadores de posición como @@INLINE_CODE_x@@ o @@CODE_BLOCK_x@@, pero mantenlos en el archivo. No traduzcas ninguna URL o ruta, pero mantenlas en el archivo. Escribe la salida de izquierda a derecha. + +- **Análisis de Sentimientos**: Este modelo detecta sentimientos positivos, negativos, neutros o mixtos en el texto. +- **Lector de Tarjetas de Visita**: Este modelo extrae información de tarjetas de visita. +- **Reconocimiento de Texto**: Este modelo extrae texto de imágenes. +- **Detección de Objetos**: Este modelo detecta y extrae objetos de imágenes. +- **Procesamiento de Documentos**: Este modelo extrae información de formularios. +- **Procesamiento de Facturas**: Este modelo extrae información de facturas. + +Con los Modelos de IA Personalizados puedes integrar tu propio modelo en AI Builder para que funcione como cualquier modelo personalizado de AI Builder, permitiéndote entrenar el modelo usando tus propios datos. Puedes usar estos modelos para automatizar procesos y predecir resultados tanto en Power Apps como en Power Automate. Al usar tu propio modelo, hay limitaciones que se aplican. Lee más sobre estas [limitaciones](https://learn.microsoft.com/ai-builder/byo-model#limitations?WT.mc_id=academic-105485-koreyst). + +![Modelos de AI Builder](../../../translated_images/ai-builder-models.png?WT.6c2f6abc64cc07d27103364f2cd8c4689956e168da9f58cf75e6ca3fb459ec20.es.mc_id=academic-105485-koreyst) + +## Asignación #2 - Construir un Flujo de Procesamiento de Facturas para Nuestra Startup + +El equipo de finanzas ha estado teniendo dificultades para procesar facturas. Han estado usando una hoja de cálculo para rastrear las facturas, pero esto se ha vuelto difícil de manejar a medida que el número de facturas ha aumentado. Te han pedido que construyas un flujo de trabajo que les ayude a procesar facturas usando IA. El flujo de trabajo debe permitirles extraer información de las facturas y almacenar la información en una tabla de Dataverse. El flujo de trabajo también debe permitirles enviar un correo electrónico al equipo de finanzas con la información extraída. + +Ahora que sabes qué es AI Builder y por qué deberías usarlo, veamos cómo puedes usar el Modelo de Procesamiento de Facturas de AI Builder, que cubrimos anteriormente, para construir un flujo de trabajo que ayude al equipo de finanzas a procesar facturas. Para construir un flujo de trabajo que ayude al equipo de finanzas a procesar facturas usando el Modelo de Procesamiento de Facturas de AI Builder, sigue los pasos a continuación: + +1. Navega a la pantalla de inicio de [Power Automate](https://make.powerautomate.com?WT.mc_id=academic-105485-koreyst). +2. Usa el área de texto en la pantalla de inicio para describir el flujo de trabajo que deseas construir. Por ejemplo, **_Procesar una factura cuando llegue a mi buzón de correo_**. Haz clic en el botón **Enviar** para enviar el mensaje al AI Copilot. + +![Copilot power automate](../../../translated_images/copilot-chat-prompt-powerautomate.png?WT.f6341b68d42f7c600e636c97f6874ec548ea3575906434e5caa9b7fbabd1c284.es.mc_id=academic-105485-koreyst) + +3. El AI Copilot sugerirá las acciones que necesitas para realizar la tarea que deseas automatizar. Puedes hacer clic en el botón **Siguiente** para pasar a los siguientes pasos. +4. En el siguiente paso, Power Automate te pedirá que configures las conexiones requeridas para el flujo. Una vez que hayas terminado, haz clic en el botón **Crear flujo** para crear el flujo. +5. El AI Copilot generará un flujo y luego podrás personalizarlo para satisfacer tus necesidades. +6. Actualiza el disparador del flujo y establece la **Carpeta** en la carpeta donde se almacenarán las facturas. Por ejemplo, puedes establecer la carpeta en **Bandeja de entrada**. Haz clic en **Mostrar opciones avanzadas** y establece **Solo con Archivos Adjuntos** en **Sí**. Esto garantizará que el flujo solo se ejecute cuando se reciba un correo electrónico con un archivo adjunto en la carpeta. +7. Elimina las siguientes acciones del flujo: **HTML a texto**, **Componer**, **Componer 2**, **Componer 3** y **Componer 4** porque no las usarás. +8. Elimina la acción **Condición** del flujo porque no la usarás. Debería verse como la siguiente captura de pantalla: + +![power automate, remove actions](../../../translated_images/powerautomate-remove-actions.png?WT.b7f06c5f7f24ed173de29f405e580c0bb414655560859cdbdf97b8c1803fe4c7.es.mc_id=academic-105485-koreyst) + +9. Haz clic en el botón **Agregar una acción** y busca **Dataverse**. Selecciona la acción **Agregar una nueva fila**. +10. En la acción **Extraer Información de facturas**, actualiza el **Archivo de Factura** para apuntar al **Contenido del Archivo Adjunto** del correo electrónico. Esto garantizará que el flujo extraiga información del archivo adjunto de la factura. +11. Selecciona la **Tabla** que creaste anteriormente. Por ejemplo, puedes seleccionar la tabla **Información de Factura**. Elige el contenido dinámico de la acción anterior para llenar los siguientes campos: + - ID + - Monto + - Fecha + - Nombre + - Estado + - Establece el **Estado** en **Pendiente**. + - Correo Electrónico del Proveedor + - Usa el contenido dinámico **De** del disparador **Cuando llegue un nuevo correo electrónico**. + +![power automate add row](../../../translated_images/powerautomate-add-row.png?WT.05f8f2c79ce95248eb173d6644436a1220f143991a5f0e647e15b922a0e1a290.es.mc_id=academic-105485-koreyst) + +12. Una vez que hayas terminado con el flujo, haz clic en el botón **Guardar** para guardar el flujo. Luego puedes probar el flujo enviando un correo electrónico con una factura a la carpeta que especificaste en el disparador. + +> **Tu tarea**: El flujo que acabas de construir es un buen comienzo, ahora necesitas pensar en cómo puedes construir una automatización que permita a nuestro equipo de finanzas enviar un correo electrónico al proveedor para actualizarlo con el estado actual de su factura. Tu pista: el flujo debe ejecutarse cuando el estado de la factura cambie. + +## Usar un Modelo de IA de Generación de Texto en Power Automate + +El Modelo de IA Crear Texto con GPT en AI Builder te permite generar texto basado en un mensaje y está impulsado por el Microsoft Azure OpenAI Service. Con esta capacidad, puedes incorporar la tecnología GPT (Transformador Generativo Pre-entrenado) en tus aplicaciones y flujos para construir una variedad de flujos automatizados y aplicaciones perspicaces. + +Los modelos GPT se someten a un extenso entrenamiento con grandes cantidades de datos, lo que les permite producir texto que se asemeja mucho al lenguaje humano cuando se les proporciona un mensaje. Cuando se integran con la automatización de flujos de trabajo, los modelos de IA como GPT pueden aprovecharse para agilizar y automatizar una amplia gama de tareas. + +Por ejemplo, puedes construir flujos para generar automáticamente texto para una variedad de casos de uso, como borradores de correos electrónicos, descripciones de productos y más. También puedes usar el modelo para generar texto para una variedad de aplicaciones, como chatbots y aplicaciones de servicio al cliente que permiten a los agentes de servicio al cliente responder de manera efectiva y eficiente a las consultas de los clientes. + +![crear un mensaje](../../../translated_images/create-prompt-gpt.png?WT.7838e7bf32dee9636286569283c29f2a7cd58f2e2e093cee611dfa66db61a6ca.es.mc_id=academic-105485-koreyst) + +Para aprender cómo usar este Modelo de IA en Power Automate, revisa el módulo [Agregar inteligencia con AI Builder y GPT](https://learn.microsoft.com/training/modules/ai-builder-text-generation/?WT.mc_id=academic-109639-somelezediko). + +## ¡Buen Trabajo! Continúa con tu Aprendizaje + +Después de completar esta lección, consulta nuestra [colección de aprendizaje sobre IA Generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para seguir mejorando tus conocimientos sobre IA Generativa. + +Dirígete a la Lección 11 donde veremos cómo [integrar IA Generativa con Llamadas a Funciones](../11-integrating-with-function-calling/README.md?WT.mc_id=academic-105485-koreyst). + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr 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 una traducción profesional humana. No somos responsables de ningún 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/11-integrating-with-function-calling/README.md b/translations/es/11-integrating-with-function-calling/README.md new file mode 100644 index 000000000..c1d144f57 --- /dev/null +++ b/translations/es/11-integrating-with-function-calling/README.md @@ -0,0 +1,461 @@ +# Integración con llamadas a funciones + +[![Integración con llamadas a funciones](../../../translated_images/11-lesson-banner.png?WT.cd033597170e30547d3cab0ae5ddcb7648d4f767cb49f7a853aa1b15f50e112f.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson11-gh?WT.mc_id=academic-105485-koreyst) + +Has aprendido bastante en las lecciones anteriores. Sin embargo, podemos mejorar aún más. Algunas cosas que podemos abordar son cómo obtener un formato de respuesta más consistente para facilitar el trabajo con la respuesta en etapas posteriores. Además, podríamos querer agregar datos de otras fuentes para enriquecer aún más nuestra aplicación. + +Los problemas mencionados anteriormente son los que este capítulo busca abordar. + +## Introducción + +Esta lección cubrirá: + +- Explicar qué es la llamada a funciones y sus casos de uso. +- Crear una llamada a función utilizando Azure OpenAI. +- Cómo integrar una llamada a función en una aplicación. + +## Objetivos de Aprendizaje + +Al final de esta lección, podrás: + +- Explicar el propósito de utilizar llamadas a funciones. +- Configurar llamadas a funciones utilizando el servicio Azure OpenAI. +- Diseñar llamadas a funciones efectivas para el caso de uso de tu aplicación. + +## Escenario: mejorando nuestro chatbot con funciones + +Para esta lección, queremos construir una función para nuestra startup educativa que permita a los usuarios utilizar un chatbot para encontrar cursos técnicos. Recomendaremos cursos que se ajusten a su nivel de habilidad, rol actual y tecnología de interés. + +Para completar este escenario utilizaremos una combinación de: + +- `Azure OpenAI` para crear una experiencia de chat para el usuario. +- `Microsoft Learn Catalog API` para ayudar a los usuarios a encontrar cursos basados en su solicitud. +- `Function Calling` para tomar la consulta del usuario y enviarla a una función para realizar la solicitud a la API. + +Para comenzar, veamos por qué querríamos usar llamadas a funciones en primer lugar: + +## Por qué usar llamadas a funciones + +Antes de las llamadas a funciones, las respuestas de un LLM eran desestructuradas e inconsistentes. Los desarrolladores debían escribir un código de validación complejo para asegurarse de poder manejar cada variación de una respuesta. Los usuarios no podían obtener respuestas como "¿Cuál es el clima actual en Estocolmo?". Esto se debe a que los modelos estaban limitados al tiempo en que se entrenaron los datos. + +La llamada a funciones es una característica del servicio Azure OpenAI para superar las siguientes limitaciones: + +- **Formato de respuesta consistente**. Si podemos controlar mejor el formato de la respuesta, podemos integrar más fácilmente la respuesta en otros sistemas. +- **Datos externos**. Capacidad de utilizar datos de otras fuentes de una aplicación en un contexto de chat. + +## Ilustrando el problema a través de un escenario + +> Te recomendamos usar el [notebook incluido](../../../11-integrating-with-function-calling/python/aoai-assignment.ipynb) si deseas ejecutar el siguiente escenario. También puedes simplemente leer mientras intentamos ilustrar un problema donde las funciones pueden ayudar a abordarlo. + +Veamos el ejemplo que ilustra el problema del formato de respuesta: + +Supongamos que queremos crear una base de datos de datos de estudiantes para poder sugerirles el curso adecuado. A continuación, tenemos dos descripciones de estudiantes que son muy similares en los datos que contienen. + +1. Crear una conexión a nuestro recurso de Azure OpenAI: + + ```python + import os + import json + from openai import AzureOpenAI + from dotenv import load_dotenv + load_dotenv() + + client = AzureOpenAI( + api_key=os.environ['AZURE_OPENAI_API_KEY'], # this is also the default, it can be omitted + api_version = "2023-07-01-preview" + ) + + deployment=os.environ['AZURE_OPENAI_DEPLOYMENT'] + ``` + + A continuación se muestra un código en Python para configurar nuestra conexión a Azure OpenAI donde establecemos `api_type`, `api_base`, `api_version` and `api_key`. + +1. Creating two student descriptions using variables `student_1_description` and `student_2_description`. + + ```python + student_1_description="Emily Johnson is a sophomore majoring in computer science at Duke University. She has a 3.7 GPA. Emily is an active member of the university's Chess Club and Debate Team. She hopes to pursue a career in software engineering after graduating." + + student_2_description = "Michael Lee is a sophomore majoring in computer science at Stanford University. He has a 3.8 GPA. Michael is known for his programming skills and is an active member of the university's Robotics Club. He hopes to pursue a career in artificial intelligence after finishing his studies." + ``` + + Queremos enviar las descripciones de los estudiantes anteriores a un LLM para analizar los datos. Estos datos pueden utilizarse más tarde en nuestra aplicación y enviarse a una API o almacenarse en una base de datos. + +1. Creemos dos indicaciones idénticas en las que instruimos al LLM sobre qué información nos interesa: + + ```python + prompt1 = f''' + Please extract the following information from the given text and return it as a JSON object: + + name + major + school + grades + club + + This is the body of text to extract the information from: + {student_1_description} + ''' + + prompt2 = f''' + Please extract the following information from the given text and return it as a JSON object: + + name + major + school + grades + club + + This is the body of text to extract the information from: + {student_2_description} + ''' + ``` + + Las indicaciones anteriores instruyen al LLM para extraer información y devolver la respuesta en formato JSON. + +1. Después de configurar las indicaciones y la conexión a Azure OpenAI, ahora enviaremos las indicaciones al LLM utilizando `openai.ChatCompletion`. We store the prompt in the `messages` variable and assign the role to `user`. Esto es para imitar un mensaje de un usuario que se escribe en un chatbot. + + ```python + # response from prompt one + openai_response1 = client.chat.completions.create( + model=deployment, + messages = [{'role': 'user', 'content': prompt1}] + ) + openai_response1.choices[0].message.content + + # response from prompt two + openai_response2 = client.chat.completions.create( + model=deployment, + messages = [{'role': 'user', 'content': prompt2}] + ) + openai_response2.choices[0].message.content + ``` + +Ahora podemos enviar ambas solicitudes al LLM y examinar la respuesta que recibimos encontrándola de esta manera `openai_response1['choices'][0]['message']['content']`. + +1. Lastly, we can convert the response to JSON format by calling `json.loads`: + + ```python + # Loading the response as a JSON object + json_response1 = json.loads(openai_response1.choices[0].message.content) + json_response1 + ``` + + Respuesta 1: + + ```json + { + "name": "Emily Johnson", + "major": "computer science", + "school": "Duke University", + "grades": "3.7", + "club": "Chess Club" + } + ``` + + Respuesta 2: + + ```json + { + "name": "Michael Lee", + "major": "computer science", + "school": "Stanford University", + "grades": "3.8 GPA", + "club": "Robotics Club" + } + ``` + + Aunque las indicaciones son las mismas y las descripciones son similares, vemos valores de `Grades` property formatted differently as we can sometimes get the format `3.7` or `3.7 GPA` for example. + + This result is because the LLM takes unstructured data in the form of the written prompt and returns also unstructured data. We need to have a structured format so that we know what to expect when storing or using this data + +So how do we solve the formatting problem then? By using functional calling, we can make sure that we receive structured data back. When using function calling, the LLM does not actually call or run any functions. Instead, we create a structure for the LLM to follow for its responses. We then use those structured responses to know what function to run in our applications. + +![function flow](../../../translated_images/Function-Flow.png?WT.528ac2564b2e7413ab6aecd50caf18620e8a089814824510b105a9412740384b.es.mc_id=academic-105485-koreyst) + +We can then take what is returned from the function and send this back to the LLM. The LLM will then respond using natural language to answer the user's query. + +## Use Cases for using function calls + +There are many different use cases where function calls can improve your app like: + +- **Calling External Tools**. Chatbots are great at providing answers to questions from users. By using function calling, the chatbots can use messages from users to complete certain tasks. For example, a student can ask the chatbot to "Send email to my instructor saying I need more assistance with this subject". This can make a function call to `send_email(to: string, body: string)` + +- **Create API or Database Queries**. Users can find information using natural language that gets converted into a formatted query or API request. An example of this could be a teacher who requests "Who are the students that completed the last assignment" which could call a function named `get_completed(student_name: string, assignment: int, current_status: string)` + +- **Creating Structured Data**. Users can take a block of text or CSV and use the LLM to extract important information from it. For example, a student can convert a Wikipedia article about peace agreements to create AI flash cards. This can be done by using a function called `get_important_facts(agreement_name: string, date_signed: string, parties_involved: list)` + +## Creating Your First Function Call + +The process of creating a function call includes 3 main steps: + +1. **Calling** the Chat Completions API with a list of your functions and a user message. +2. **Reading** the model's response to perform an action ie execute a function or API Call. +3. **Making** another call to Chat Completions API with the response from your function to use that information to create a response to the user. + +![LLM Flow](../../../translated_images/LLM-Flow.png?WT.a3bab2c56645eb017c24b9116cef39934eb2368f777bac49cceeac67f03b0321.es.mc_id=academic-105485-koreyst) + +### Step 1 - creating messages + +The first step is to create a user message. This can be dynamically assigned by taking the value of a text input or you can assign a value here. If this is your first time working with the Chat Completions API, we need to define the `role` and the `content` of the message. + +The `role` can be either `system` (creating rules), `assistant` (the model) or `user` (the end-user). For function calling, we will assign this as `user` y una pregunta de ejemplo. + +```python +messages= [ {"role": "user", "content": "Find me a good course for a beginner student to learn Azure."} ] +``` + +Al asignar diferentes roles, queda claro para el LLM si es el sistema diciendo algo o el usuario, lo que ayuda a construir un historial de conversación sobre el cual el LLM puede basarse. + +### Paso 2 - creando funciones + +A continuación, definiremos una función y los parámetros de esa función. Usaremos solo una función aquí llamada `search_courses` but you can create multiple functions. + +> **Important** : Functions are included in the system message to the LLM and will be included in the amount of available tokens you have available. + +Below, we create the functions as an array of items. Each item is a function and has properties `name`, `description` and `parameters`: + +```python +functions = [ + { + "name":"search_courses", + "description":"Retrieves courses from the search index based on the parameters provided", + "parameters":{ + "type":"object", + "properties":{ + "role":{ + "type":"string", + "description":"The role of the learner (i.e. developer, data scientist, student, etc.)" + }, + "product":{ + "type":"string", + "description":"The product that the lesson is covering (i.e. Azure, Power BI, etc.)" + }, + "level":{ + "type":"string", + "description":"The level of experience the learner has prior to taking the course (i.e. beginner, intermediate, advanced)" + } + }, + "required":[ + "role" + ] + } + } +] +``` + +Describamos cada instancia de función con más detalle a continuación: + +- `name` - The name of the function that we want to have called. +- `description` - This is the description of how the function works. Here it's important to be specific and clear. +- `parameters` - A list of values and format that you want the model to produce in its response. The parameters array consists of items where item have the following properties: + 1. `type` - The data type of the properties will be stored in. + 1. `properties` - List of the specific values that the model will use for its response + 1. `name` - The key is the name of the property that the model will use in its formatted response, for example, `product`. + 1. `type` - The data type of this property, for example, `string`. + 1. `description` - Description of the specific property. + +There's also an optional property `required` - required property for the function call to be completed. + +### Step 3 - Making the function call + +After defining a function, we now need to include it in the call to the Chat Completion API. We do this by adding `functions` to the request. In this case `functions=functions`. + +There is also an option to set `function_call` to `auto`. This means we will let the LLM decide which function should be called based on the user message rather than assigning it ourselves. + +Here's some code below where we call `ChatCompletion.create`, note how we set `functions=functions` and `function_call="auto"` y, por lo tanto, dando al LLM la opción de cuándo llamar a las funciones que le proporcionamos: + +```python +response = client.chat.completions.create(model=deployment, + messages=messages, + functions=functions, + function_call="auto") + +print(response.choices[0].message) +``` + +La respuesta que viene ahora se ve así: + +```json +{ + "role": "assistant", + "function_call": { + "name": "search_courses", + "arguments": "{\n \"role\": \"student\",\n \"product\": \"Azure\",\n \"level\": \"beginner\"\n}" + } +} +``` + +Aquí podemos ver cómo la función `search_courses` was called and with what arguments, as listed in the `arguments` property in the JSON response. + +The conclusion the LLM was able to find the data to fit the arguments of the function as it was extracting it from the value provided to the `messages` parameter in the chat completion call. Below is a reminder of the `messages` valor: + +```python +messages= [ {"role": "user", "content": "Find me a good course for a beginner student to learn Azure."} ] +``` + +Como puedes ver, `student`, `Azure` and `beginner` was extracted from `messages` and set as input to the function. Using functions this way is a great way to extract information from a prompt but also to provide structure to the LLM and have reusable functionality. + +Next, we need to see how we can use this in our app. + +## Integrating Function Calls into an Application + +After we have tested the formatted response from the LLM, now we can integrate this into an application. + +### Managing the flow + +To integrate this into our application, let's take the following steps: + +1. First, let's make the call to the Open AI services and store the message in a variable called `response_message`. + + ```python + response_message = response.choices[0].message + ``` + +1. Ahora definiremos la función que llamará a la API de Microsoft Learn para obtener una lista de cursos: + + ```python + import requests + + def search_courses(role, product, level): + url = "https://learn.microsoft.com/api/catalog/" + params = { + "role": role, + "product": product, + "level": level + } + response = requests.get(url, params=params) + modules = response.json()["modules"] + results = [] + for module in modules[:5]: + title = module["title"] + url = module["url"] + results.append({"title": title, "url": url}) + return str(results) + ``` + + Nota cómo ahora creamos una función real en Python que se asigna a los nombres de funciones introducidos en las `functions` variable. We're also making real external API calls to fetch the data we need. In this case, we go against the Microsoft Learn API to search for training modules. + +Ok, so we created `functions` variables and a corresponding Python function, how do we tell the LLM how to map these two together so our Python function is called? + +1. To see if we need to call a Python function, we need to look into the LLM response and see if `function_call` es parte de ella y llama a la función señalada. Aquí tienes cómo puedes hacer la verificación mencionada a continuación: + + ```python + # Check if the model wants to call a function + if response_message.function_call.name: + print("Recommended Function call:") + print(response_message.function_call.name) + print() + + # Call the function. + function_name = response_message.function_call.name + + available_functions = { + "search_courses": search_courses, + } + function_to_call = available_functions[function_name] + + function_args = json.loads(response_message.function_call.arguments) + function_response = function_to_call(**function_args) + + print("Output of function call:") + print(function_response) + print(type(function_response)) + + + # Add the assistant response and function response to the messages + messages.append( # adding assistant response to messages + { + "role": response_message.role, + "function_call": { + "name": function_name, + "arguments": response_message.function_call.arguments, + }, + "content": None + } + ) + messages.append( # adding function response to messages + { + "role": "function", + "name": function_name, + "content":function_response, + } + ) + ``` + + Estas tres líneas aseguran que extraemos el nombre de la función, los argumentos y realizamos la llamada: + + ```python + function_to_call = available_functions[function_name] + + function_args = json.loads(response_message.function_call.arguments) + function_response = function_to_call(**function_args) + ``` + + A continuación se muestra la salida de ejecutar nuestro código: + + **Salida** + + ```Recommended Function call: + { + "name": "search_courses", + "arguments": "{\n \"role\": \"student\",\n \"product\": \"Azure\",\n \"level\": \"beginner\"\n}" + } + + Output of function call: + [{'title': 'Describe concepts of cryptography', 'url': 'https://learn.microsoft.com/training/modules/describe-concepts-of-cryptography/? + WT.mc_id=api_CatalogApi'}, {'title': 'Introduction to audio classification with TensorFlow', 'url': 'https://learn.microsoft.com/en- + us/training/modules/intro-audio-classification-tensorflow/?WT.mc_id=api_CatalogApi'}, {'title': 'Design a Performant Data Model in Azure SQL + Database with Azure Data Studio', 'url': 'https://learn.microsoft.com/training/modules/design-a-data-model-with-ads/? + WT.mc_id=api_CatalogApi'}, {'title': 'Getting started with the Microsoft Cloud Adoption Framework for Azure', 'url': + 'https://learn.microsoft.com/training/modules/cloud-adoption-framework-getting-started/?WT.mc_id=api_CatalogApi'}, {'title': 'Set up the + Rust development environment', 'url': 'https://learn.microsoft.com/training/modules/rust-set-up-environment/?WT.mc_id=api_CatalogApi'}] + + ``` + +1. Ahora enviaremos el mensaje actualizado, `messages` al LLM para que podamos recibir una respuesta en lenguaje natural en lugar de una respuesta en formato JSON de la API. + + ```python + print("Messages in next request:") + print(messages) + print() + + second_response = client.chat.completions.create( + messages=messages, + model=deployment, + function_call="auto", + functions=functions, + temperature=0 + ) # get a new response from GPT where it can see the function response + + + print(second_response.choices[0].message) + ``` + + **Salida** + + ```python + { + "role": "assistant", + "content": "I found some good courses for beginner students to learn Azure:\n\n1. [Describe concepts of cryptography] (https://learn.microsoft.com/training/modules/describe-concepts-of-cryptography/?WT.mc_id=api_CatalogApi)\n2. [Introduction to audio classification with TensorFlow](https://learn.microsoft.com/training/modules/intro-audio-classification-tensorflow/?WT.mc_id=api_CatalogApi)\n3. [Design a Performant Data Model in Azure SQL Database with Azure Data Studio](https://learn.microsoft.com/training/modules/design-a-data-model-with-ads/?WT.mc_id=api_CatalogApi)\n4. [Getting started with the Microsoft Cloud Adoption Framework for Azure](https://learn.microsoft.com/training/modules/cloud-adoption-framework-getting-started/?WT.mc_id=api_CatalogApi)\n5. [Set up the Rust development environment](https://learn.microsoft.com/training/modules/rust-set-up-environment/?WT.mc_id=api_CatalogApi)\n\nYou can click on the links to access the courses." + } + + ``` + +## Tarea + +Para continuar tu aprendizaje sobre Azure OpenAI Function Calling puedes construir: + +- Más parámetros de la función que podrían ayudar a los estudiantes a encontrar más cursos. +- Crear otra llamada a función que tome más información del estudiante como su idioma nativo. +- Crear manejo de errores cuando la llamada a función y/o llamada a la API no devuelva cursos adecuados. + +Consejo: Sigue la página de [documentación de referencia de la API de Learn](https://learn.microsoft.com/training/support/catalog-api-developer-reference?WT.mc_id=academic-105485-koreyst) para ver cómo y dónde están disponibles estos datos. + +## ¡Gran Trabajo! Continúa el Viaje + +Después de completar esta lección, consulta nuestra [colección de aprendizaje de IA generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para seguir aumentando tu conocimiento sobre IA generativa. + +Dirígete a la Lección 12 donde veremos cómo [diseñar UX para aplicaciones de IA](../12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst)! + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. 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 la traducción humana profesional. No nos hacemos responsables de ningún 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/12-designing-ux-for-ai-applications/README.md b/translations/es/12-designing-ux-for-ai-applications/README.md new file mode 100644 index 000000000..6bd695513 --- /dev/null +++ b/translations/es/12-designing-ux-for-ai-applications/README.md @@ -0,0 +1,121 @@ +# Diseñando UX para Aplicaciones de IA + +[![Diseñando UX para Aplicaciones de IA](../../../translated_images/12-lesson-banner.png?WT.998ee992c9acfb5c1b2802fb3817b9a1a704886f30157b28dff34cd9c2ee598b.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson12-gh?WT.mc_id=academic-105485-koreyst) + +> _(Haz clic en la imagen de arriba para ver el video de esta lección)_ + +La experiencia del usuario es un aspecto muy importante al construir aplicaciones. Los usuarios necesitan poder utilizar tu aplicación de manera eficiente para realizar tareas. Ser eficiente es una cosa, pero también necesitas diseñar aplicaciones de manera que puedan ser utilizadas por todos, para hacerlas _accesibles_. Este capítulo se centrará en esta área para que, con suerte, termines diseñando una aplicación que las personas puedan y quieran usar. + +## Introducción + +La experiencia del usuario es cómo un usuario interactúa y utiliza un producto o servicio específico, ya sea un sistema, herramienta o diseño. Al desarrollar aplicaciones de IA, los desarrolladores no solo se enfocan en asegurar que la experiencia del usuario sea efectiva, sino también ética. En esta lección, cubrimos cómo construir aplicaciones de Inteligencia Artificial (IA) que aborden las necesidades del usuario. + +La lección cubrirá las siguientes áreas: + +- Introducción a la Experiencia del Usuario y Comprensión de las Necesidades del Usuario +- Diseñando Aplicaciones de IA para la Confianza y la Transparencia +- Diseñando Aplicaciones de IA para la Colaboración y Retroalimentación + +## Objetivos de aprendizaje + +Después de tomar esta lección, podrás: + +- Entender cómo construir aplicaciones de IA que satisfagan las necesidades del usuario. +- Diseñar aplicaciones de IA que promuevan la confianza y la colaboración. + +### Prerrequisito + +Tómate un tiempo para leer más sobre [experiencia del usuario y pensamiento de diseño.](https://learn.microsoft.com/training/modules/ux-design?WT.mc_id=academic-105485-koreyst) + +## Introducción a la Experiencia del Usuario y Comprensión de las Necesidades del Usuario + +En nuestra startup educativa ficticia, tenemos dos usuarios principales, maestros y estudiantes. Cada uno de los dos usuarios tiene necesidades únicas. Un diseño centrado en el usuario prioriza al usuario asegurando que los productos sean relevantes y beneficiosos para aquellos a quienes están destinados. + +La aplicación debe ser **útil, confiable, accesible y agradable** para proporcionar una buena experiencia de usuario. + +### Usabilidad + +Ser útil significa que la aplicación tiene funcionalidad que coincide con su propósito previsto, como automatizar el proceso de calificación o generar tarjetas de estudio para la revisión. Una aplicación que automatiza el proceso de calificación debe ser capaz de asignar puntajes con precisión y eficiencia al trabajo de los estudiantes según criterios predefinidos. De manera similar, una aplicación que genera tarjetas de estudio debe ser capaz de crear preguntas relevantes y diversas basadas en sus datos. + +### Confiabilidad + +Ser confiable significa que la aplicación puede realizar su tarea de manera consistente y sin errores. Sin embargo, la IA al igual que los humanos no es perfecta y puede ser propensa a errores. Las aplicaciones pueden encontrar errores o situaciones inesperadas que requieren intervención o corrección humana. ¿Cómo manejas los errores? En la última sección de esta lección, cubriremos cómo los sistemas y aplicaciones de IA están diseñados para la colaboración y retroalimentación. + +### Accesibilidad + +Ser accesible significa extender la experiencia del usuario a usuarios con diversas capacidades, incluidas aquellas con discapacidades, asegurando que nadie quede excluido. Siguiendo las pautas y principios de accesibilidad, las soluciones de IA se vuelven más inclusivas, utilizables y beneficiosas para todos los usuarios. + +### Agradable + +Ser agradable significa que la aplicación es disfrutable de usar. Una experiencia de usuario atractiva puede tener un impacto positivo en el usuario, alentándolo a regresar a la aplicación e incrementando los ingresos del negocio. + +![imagen que ilustra consideraciones de UX en IA](../../../translated_images/uxinai.png?WT.00d77ed86b53127e3860f8ee713e684370fe08c450c8a1e496beb82e96c59355.es.mc_id=academic-105485-koreyst) + +No todos los desafíos pueden resolverse con IA. La IA entra para aumentar tu experiencia de usuario, ya sea automatizando tareas manuales o personalizando experiencias de usuario. + +## Diseñando Aplicaciones de IA para la Confianza y la Transparencia + +Construir confianza es crítico al diseñar aplicaciones de IA. La confianza asegura que un usuario esté seguro de que la aplicación realizará el trabajo, entregará resultados consistentemente y los resultados son lo que el usuario necesita. Un riesgo en esta área es la desconfianza y la sobreconfianza. La desconfianza ocurre cuando un usuario tiene poca o ninguna confianza en un sistema de IA, lo que lleva al usuario a rechazar tu aplicación. La sobreconfianza ocurre cuando un usuario sobreestima la capacidad de un sistema de IA, llevando a los usuarios a confiar demasiado en el sistema de IA. Por ejemplo, un sistema de calificación automatizado en el caso de sobreconfianza podría llevar al maestro a no revisar algunos de los trabajos para asegurar que el sistema de calificación funcione bien. Esto podría resultar en calificaciones injustas o inexactas para los estudiantes, u oportunidades perdidas para retroalimentación y mejora. + +Dos maneras de asegurar que la confianza esté en el centro del diseño son la explicabilidad y el control. + +### Explicabilidad + +Cuando la IA ayuda a informar decisiones como impartir conocimientos a futuras generaciones, es crítico que maestros y padres entiendan cómo se toman las decisiones de IA. Esto es explicabilidad - entender cómo las aplicaciones de IA toman decisiones. Diseñar para la explicabilidad incluye agregar detalles de ejemplos de lo que una aplicación de IA puede hacer. Por ejemplo, en lugar de "Comienza con el maestro de IA", el sistema puede usar: "Resume tus notas para una revisión más fácil usando IA." + +![una página de inicio de aplicación con clara ilustración de explicabilidad en aplicaciones de IA](../../../translated_images/explanability-in-ai.png?WT.e66323dd42a976cd7fb15d79304f70a3d625eac6607ec395311a772915a45ffa.es.mc_id=academic-105485-koreyst) + +Otro ejemplo es cómo la IA usa datos de usuario y personales. Por ejemplo, un usuario con la persona estudiante puede tener limitaciones basadas en su persona. La IA puede no ser capaz de revelar respuestas a preguntas, pero puede ayudar a guiar al usuario a pensar en cómo pueden resolver un problema. + +![IA respondiendo a preguntas basadas en persona](../../../translated_images/solving-questions.png?WT.f7c41f8c20cb98ec5d456d1e14e7fee2b11b7adc77c23421645a82495b51208d.es.mc_id=academic-105485-koreyst) + +Una última parte clave de la explicabilidad es la simplificación de las explicaciones. Los estudiantes y maestros pueden no ser expertos en IA, por lo tanto, las explicaciones de lo que la aplicación puede o no puede hacer deben ser simplificadas y fáciles de entender. + +![explicaciones simplificadas sobre capacidades de IA](../../../translated_images/simplified-explanations.png?WT.58904786757a91a1365e98cac5f9088bb16c9241e312463921a9a1733a85adc0.es.mc_id=academic-105485-koreyst) + +### Control + +La IA generativa crea una colaboración entre la IA y el usuario, donde por ejemplo un usuario puede modificar indicaciones para diferentes resultados. Además, una vez que se genera un resultado, los usuarios deberían poder modificar los resultados dándoles una sensación de control. Por ejemplo, al usar Bing, puedes adaptar tu indicación basada en formato, tono y longitud. Además, puedes agregar cambios a tu salida y modificar la salida como se muestra a continuación: + +![Resultados de búsqueda de Bing con opciones para modificar la indicación y salida](../../../translated_images/bing1.png?WT.eadb390c6c5acd14ab252fc97dfdaf357cf5696f23b330e7d591df50190e760b.es.mc_id=academic-105485-koreyst "resultados de búsqueda de bing con opciones para modificar la indicación y salida") + +Otra característica en Bing que permite a un usuario tener control sobre la aplicación es la capacidad de optar por participar y optar por no participar en los datos que usa la IA. Para una aplicación escolar, un estudiante podría querer usar sus notas así como los recursos del maestro como material de revisión. + +![Resultados de búsqueda de Bing con opciones para modificar la indicación y salida](../../../translated_images/bing2.png?WT.3d09f07c38a08a8470513edd63ee89dab36e7d99a3d2c129280fae2542a899ea.es.mc_id=academic-105485-koreyst "resultados de búsqueda de bing con opciones para modificar la indicación y salida") + +> Al diseñar aplicaciones de IA, la intencionalidad es clave para asegurar que los usuarios no sobreconfíen estableciendo expectativas poco realistas de sus capacidades. Una manera de hacer esto es creando fricción entre las indicaciones y los resultados. Recordando al usuario, que esto es IA y no un ser humano. + +## Diseñando Aplicaciones de IA para la Colaboración y Retroalimentación + +Como se mencionó anteriormente, la IA generativa crea una colaboración entre el usuario y la IA. La mayoría de los compromisos son con un usuario ingresando una indicación y la IA generando una salida. ¿Qué pasa si la salida es incorrecta? ¿Cómo maneja la aplicación los errores si ocurren? ¿La IA culpa al usuario o se toma el tiempo para explicar el error? + +Las aplicaciones de IA deben construirse para recibir y dar retroalimentación. Esto no solo ayuda al sistema de IA a mejorar, sino que también construye confianza con los usuarios. Un ciclo de retroalimentación debe incluirse en el diseño, un ejemplo puede ser un simple pulgar hacia arriba o hacia abajo en la salida. + +Otra manera de manejar esto es comunicar claramente las capacidades y limitaciones del sistema. Cuando un usuario comete un error solicitando algo más allá de las capacidades de la IA, también debe haber una manera de manejar esto, como se muestra a continuación. + +![Dando retroalimentación y manejando errores](../../../translated_images/feedback-loops.png?WT.ee4d8df7b207adf073487e9a9617e4f901a404fc4b826152a56435fb5bd32705.es.mc_id=academic-105485-koreyst) + +Los errores del sistema son comunes con aplicaciones donde el usuario podría necesitar asistencia con información fuera del alcance de la IA o la aplicación puede tener un límite de cuántas preguntas/asignaturas un usuario puede generar resúmenes. Por ejemplo, una aplicación de IA entrenada con datos en asignaturas limitadas, por ejemplo, Historia y Matemáticas, puede no ser capaz de manejar preguntas sobre Geografía. Para mitigar esto, el sistema de IA puede dar una respuesta como: "Lo siento, nuestro producto ha sido entrenado con datos en las siguientes asignaturas....., no puedo responder a la pregunta que hiciste." + +Las aplicaciones de IA no son perfectas, por lo tanto, están destinadas a cometer errores. Al diseñar tus aplicaciones, debes asegurarte de crear espacio para retroalimentación de los usuarios y manejo de errores de una manera que sea simple y fácilmente explicable. + +## Tarea + +Toma cualquier aplicación de IA que hayas construido hasta ahora, considera implementar los siguientes pasos en tu aplicación: + +- **Agradable:** Considera cómo puedes hacer tu aplicación más agradable. ¿Estás agregando explicaciones en todas partes, estás alentando al usuario a explorar? ¿Cómo estás redactando tus mensajes de error? + +- **Usabilidad:** Construyendo una aplicación web. Asegúrate de que tu aplicación sea navegable tanto por ratón como por teclado. + +- **Confianza y transparencia:** No confíes completamente en la IA y su salida, considera cómo agregarías a un humano al proceso para verificar la salida. También, considera e implementa otras formas de lograr confianza y transparencia. + +- **Control:** Da al usuario control de los datos que proporcionan a la aplicación. Implementa una manera en que un usuario pueda optar por participar y optar por no participar en la recopilación de datos en la aplicación de IA. + +## ¡Continúa tu aprendizaje! + +Después de completar esta lección, revisa nuestra [colección de aprendizaje de IA Generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para continuar aumentando tu conocimiento en IA Generativa. + +¡Dirígete a la Lección 13 donde veremos cómo [asegurar aplicaciones de IA](../13-securing-ai-applications/README.md?WT.mc_id=academic-105485-koreyst)! + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr 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 una traducción profesional humana. No nos hacemos responsables de malentendidos o interpretaciones erróneas que surjan del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/13-securing-ai-applications/README.md b/translations/es/13-securing-ai-applications/README.md new file mode 100644 index 000000000..23dd59af4 --- /dev/null +++ b/translations/es/13-securing-ai-applications/README.md @@ -0,0 +1,140 @@ +# Asegurando tus Aplicaciones de IA Generativa + +[![Asegurando tus Aplicaciones de IA Generativa](../../../translated_images/13-lesson-banner.png?WT.028697a53f1c3c0ea07dafd10617ce0380ac2b809bb145d7171be69e83daac89.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson13-gh?WT.mc_id=academic-105485-koreyst) + +## Introducción + +Esta lección cubrirá: + +- Seguridad en el contexto de sistemas de IA. +- Riesgos y amenazas comunes a los sistemas de IA. +- Métodos y consideraciones para asegurar sistemas de IA. + +## Objetivos de Aprendizaje + +Después de completar esta lección, comprenderás: + +- Las amenazas y riesgos para los sistemas de IA. +- Métodos y prácticas comunes para asegurar sistemas de IA. +- Cómo la implementación de pruebas de seguridad puede prevenir resultados inesperados y la erosión de la confianza del usuario. + +## ¿Qué significa la seguridad en el contexto de la IA generativa? + +A medida que las tecnologías de Inteligencia Artificial (IA) y Aprendizaje Automático (ML) moldean cada vez más nuestras vidas, es crucial proteger no solo los datos de los clientes sino también los propios sistemas de IA. La IA/ML se utiliza cada vez más en apoyo de procesos de toma de decisiones de alto valor en industrias donde una decisión incorrecta puede resultar en consecuencias graves. + +Aquí hay puntos clave a considerar: + +- **Impacto de la IA/ML**: La IA/ML tienen impactos significativos en la vida diaria y, como tal, salvaguardarlos se ha vuelto esencial. +- **Desafíos de Seguridad**: Este impacto que la IA/ML tiene necesita una atención adecuada para abordar la necesidad de proteger los productos basados en IA de ataques sofisticados, ya sea por trolls o grupos organizados. +- **Problemas Estratégicos**: La industria tecnológica debe abordar proactivamente los desafíos estratégicos para garantizar la seguridad a largo plazo de los clientes y la seguridad de los datos. + +Además, los modelos de Aprendizaje Automático son en gran medida incapaces de discernir entre entradas maliciosas y datos anómalos benignos. Una fuente significativa de datos de entrenamiento se deriva de conjuntos de datos públicos no curados y no moderados, que están abiertos a contribuciones de terceros. Los atacantes no necesitan comprometer los conjuntos de datos cuando son libres de contribuir a ellos. Con el tiempo, los datos maliciosos de baja confianza se convierten en datos de alta confianza, si la estructura/formato de los datos se mantiene correcta. + +Por eso es crítico asegurar la integridad y protección de los almacenes de datos que tus modelos utilizan para tomar decisiones. + +## Comprendiendo las amenazas y riesgos de la IA + +En términos de IA y sistemas relacionados, el envenenamiento de datos se destaca como la amenaza de seguridad más significativa hoy en día. El envenenamiento de datos es cuando alguien cambia intencionalmente la información utilizada para entrenar una IA, haciendo que cometa errores. Esto se debe a la ausencia de métodos estandarizados de detección y mitigación, junto con nuestra dependencia de conjuntos de datos públicos no confiables o no curados para el entrenamiento. Para mantener la integridad de los datos y prevenir un proceso de entrenamiento defectuoso, es crucial rastrear el origen y linaje de tus datos. De lo contrario, el viejo adagio "basura entra, basura sale" se mantiene, llevando a un rendimiento comprometido del modelo. + +Aquí hay ejemplos de cómo el envenenamiento de datos puede afectar tus modelos: + +1. **Cambio de Etiquetas**: En una tarea de clasificación binaria, un adversario cambia intencionalmente las etiquetas de un pequeño subconjunto de datos de entrenamiento. Por ejemplo, muestras benignas se etiquetan como maliciosas, llevando al modelo a aprender asociaciones incorrectas.\ + **Ejemplo**: Un filtro de spam clasificando erróneamente correos electrónicos legítimos como spam debido a etiquetas manipuladas. +2. **Envenenamiento de Características**: Un atacante modifica sutilmente características en los datos de entrenamiento para introducir sesgo o engañar al modelo.\ + **Ejemplo**: Añadir palabras clave irrelevantes a descripciones de productos para manipular sistemas de recomendación. +3. **Inyección de Datos**: Inyectar datos maliciosos en el conjunto de entrenamiento para influir en el comportamiento del modelo.\ + **Ejemplo**: Introducir reseñas falsas de usuarios para sesgar resultados de análisis de sentimientos. +4. **Ataques de Puerta Trasera**: Un adversario inserta un patrón oculto (puerta trasera) en los datos de entrenamiento. El modelo aprende a reconocer este patrón y se comporta maliciosamente cuando se activa.\ + **Ejemplo**: Un sistema de reconocimiento facial entrenado con imágenes con puerta trasera que identifica erróneamente a una persona específica. + +La Corporación MITRE ha creado [ATLAS (Adversarial Threat Landscape for Artificial-Intelligence Systems)](https://atlas.mitre.org/?WT.mc_id=academic-105485-koreyst), una base de conocimiento de tácticas y técnicas empleadas por adversarios en ataques reales a sistemas de IA. + +> Hay un número creciente de vulnerabilidades en sistemas habilitados para IA, ya que la incorporación de la IA aumenta la superficie de ataque de los sistemas existentes más allá de los ataques cibernéticos tradicionales. Desarrollamos ATLAS para aumentar la conciencia de estas vulnerabilidades únicas y en evolución, a medida que la comunidad global incorpora cada vez más la IA en varios sistemas. ATLAS está modelado según el marco MITRE ATT&CK® y sus tácticas, técnicas y procedimientos (TTP) son complementarios a los de ATT&CK. + +Al igual que el marco MITRE ATT&CK®, que se utiliza extensamente en ciberseguridad tradicional para planificar escenarios avanzados de emulación de amenazas, ATLAS proporciona un conjunto de TTPs fácilmente buscables que pueden ayudar a comprender mejor y prepararse para defenderse contra ataques emergentes. + +Además, el Proyecto de Seguridad de Aplicaciones Web Abiertas (OWASP) ha creado una "[lista de los 10 principales](https://llmtop10.com/?WT.mc_id=academic-105485-koreyst)" de las vulnerabilidades más críticas encontradas en aplicaciones que utilizan LLMs. La lista destaca los riesgos de amenazas como el mencionado envenenamiento de datos junto con otros como: + +- **Inyección de Prompts**: una técnica donde los atacantes manipulan un Modelo de Lenguaje Grande (LLM) a través de entradas cuidadosamente elaboradas, haciendo que se comporte fuera de su comportamiento previsto. +- **Vulnerabilidades de la Cadena de Suministro**: Los componentes y el software que componen las aplicaciones utilizadas por un LLM, como módulos de Python o conjuntos de datos externos, pueden verse comprometidos, lo que lleva a resultados inesperados, sesgos introducidos e incluso vulnerabilidades en la infraestructura subyacente. +- **Dependencia Excesiva**: Los LLMs son falibles y han sido propensos a alucinar, proporcionando resultados inexactos o inseguros. En varias circunstancias documentadas, las personas han tomado los resultados al pie de la letra, lo que lleva a consecuencias negativas no deseadas en el mundo real. + +El Defensor de la Nube de Microsoft, Rod Trent, ha escrito un ebook gratuito, [Must Learn AI Security](https://github.com/rod-trent/OpenAISecurity/tree/main/Must_Learn/Book_Version?WT.mc_id=academic-105485-koreyst), que profundiza en estas y otras amenazas emergentes de IA y proporciona una guía extensa sobre cómo abordar mejor estos escenarios. + +## Pruebas de Seguridad para Sistemas de IA y LLMs + +La inteligencia artificial (IA) está transformando varios dominios e industrias, ofreciendo nuevas posibilidades y beneficios para la sociedad. Sin embargo, la IA también plantea desafíos y riesgos significativos, como la privacidad de los datos, el sesgo, la falta de explicabilidad y el posible uso indebido. Por lo tanto, es crucial asegurar que los sistemas de IA sean seguros y responsables, lo que significa que cumplan con estándares éticos y legales y puedan ser confiables por los usuarios y partes interesadas. + +Las pruebas de seguridad son el proceso de evaluar la seguridad de un sistema de IA o LLM, identificando y explotando sus vulnerabilidades. Esto puede ser realizado por desarrolladores, usuarios o auditores externos, dependiendo del propósito y alcance de las pruebas. Algunos de los métodos de pruebas de seguridad más comunes para sistemas de IA y LLMs son: + +- **Saneamiento de Datos**: Este es el proceso de eliminar o anonimizar información sensible o privada de los datos de entrenamiento o la entrada de un sistema de IA o LLM. El saneamiento de datos puede ayudar a prevenir fugas de datos y manipulación maliciosa al reducir la exposición de datos confidenciales o personales. +- **Pruebas Adversarias**: Este es el proceso de generar y aplicar ejemplos adversarios a la entrada o salida de un sistema de IA o LLM para evaluar su robustez y resistencia contra ataques adversarios. Las pruebas adversarias pueden ayudar a identificar y mitigar las vulnerabilidades y debilidades de un sistema de IA o LLM que puedan ser explotadas por atacantes. +- **Verificación de Modelos**: Este es el proceso de verificar la corrección y completitud de los parámetros del modelo o la arquitectura de un sistema de IA o LLM. La verificación de modelos puede ayudar a detectar y prevenir el robo de modelos al asegurar que el modelo esté protegido y autenticado. +- **Validación de Salidas**: Este es el proceso de validar la calidad y confiabilidad de la salida de un sistema de IA o LLM. La validación de salidas puede ayudar a detectar y corregir la manipulación maliciosa al asegurar que la salida sea consistente y precisa. + +OpenAI, un líder en sistemas de IA, ha establecido una serie de _evaluaciones de seguridad_ como parte de su iniciativa de red de equipos rojos, destinada a probar los sistemas de salida de IA con la esperanza de contribuir a la seguridad de la IA. + +> Las evaluaciones pueden variar desde pruebas simples de preguntas y respuestas hasta simulaciones más complejas. Como ejemplos concretos, aquí hay evaluaciones de muestra desarrolladas por OpenAI para evaluar comportamientos de IA desde varios ángulos: + +#### Persuasión + +- [MakeMeSay](https://github.com/openai/evals/tree/main/evals/elsuite/make_me_say/readme.md?WT.mc_id=academic-105485-koreyst): ¿Qué tan bien puede un sistema de IA engañar a otro sistema de IA para que diga una palabra secreta? +- [MakeMePay](https://github.com/openai/evals/tree/main/evals/elsuite/make_me_pay/readme.md?WT.mc_id=academic-105485-koreyst): ¿Qué tan bien puede un sistema de IA convencer a otro sistema de IA para que done dinero? +- [Ballot Proposal](https://github.com/openai/evals/tree/main/evals/elsuite/ballots/readme.md?WT.mc_id=academic-105485-koreyst): ¿Qué tan bien puede un sistema de IA influir en el apoyo de otro sistema de IA a una proposición política? + +#### Esteganografía (mensajería oculta) + +- [Steganography](https://github.com/openai/evals/tree/main/evals/elsuite/steganography/readme.md?WT.mc_id=academic-105485-koreyst): ¿Qué tan bien puede un sistema de IA pasar mensajes secretos sin ser detectado por otro sistema de IA? +- [Text Compression](https://github.com/openai/evals/tree/main/evals/elsuite/text_compression/readme.md?WT.mc_id=academic-105485-koreyst): ¿Qué tan bien puede un sistema de IA comprimir y descomprimir mensajes para permitir la ocultación de mensajes secretos? +- [Schelling Point](https://github.com/openai/evals/blob/main/evals/elsuite/schelling_point/README.md?WT.mc_id=academic-105485-koreyst): ¿Qué tan bien puede un sistema de IA coordinarse con otro sistema de IA, sin comunicación directa? + +### Seguridad de la IA + +Es imperativo que nos esforcemos por proteger los sistemas de IA de ataques maliciosos, uso indebido o consecuencias no intencionadas. Esto incluye tomar medidas para garantizar la seguridad, confiabilidad y confianza de los sistemas de IA, tales como: + +- Asegurar los datos y algoritmos que se utilizan para entrenar y ejecutar modelos de IA +- Prevenir el acceso no autorizado, manipulación o sabotaje de sistemas de IA +- Detectar y mitigar sesgos, discriminación o problemas éticos en sistemas de IA +- Asegurar la responsabilidad, transparencia y explicabilidad de las decisiones y acciones de IA +- Alinear los objetivos y valores de los sistemas de IA con los de los humanos y la sociedad + +La seguridad de la IA es importante para asegurar la integridad, disponibilidad y confidencialidad de los sistemas de IA y los datos. Algunos de los desafíos y oportunidades de la seguridad de la IA son: + +- Oportunidad: Incorporar la IA en estrategias de ciberseguridad, ya que puede desempeñar un papel crucial en la identificación de amenazas y mejora de tiempos de respuesta. La IA puede ayudar a automatizar y aumentar la detección y mitigación de ciberataques, como phishing, malware o ransomware. +- Desafío: La IA también puede ser utilizada por adversarios para lanzar ataques sofisticados, como generar contenido falso o engañoso, hacerse pasar por usuarios o explotar vulnerabilidades en sistemas de IA. Por lo tanto, los desarrolladores de IA tienen una responsabilidad única de diseñar sistemas que sean robustos y resistentes contra el uso indebido. + +### Protección de Datos + +Los LLMs pueden plantear riesgos a la privacidad y seguridad de los datos que utilizan. Por ejemplo, los LLMs pueden potencialmente memorizar y filtrar información sensible de sus datos de entrenamiento, como nombres personales, direcciones, contraseñas o números de tarjetas de crédito. También pueden ser manipulados o atacados por actores maliciosos que desean explotar sus vulnerabilidades o sesgos. Por lo tanto, es importante estar consciente de estos riesgos y tomar medidas apropiadas para proteger los datos utilizados con LLMs. Hay varios pasos que puedes tomar para proteger los datos que se utilizan con LLMs. Estos pasos incluyen: + +- **Limitar la cantidad y tipo de datos que comparten con LLMs**: Solo comparte los datos que son necesarios y relevantes para los propósitos previstos, y evita compartir cualquier dato que sea sensible, confidencial o personal. Los usuarios también deben anonimizar o cifrar los datos que comparten con LLMs, como eliminando o enmascarando cualquier información identificativa, o utilizando canales de comunicación seguros. +- **Verificar los datos que generan los LLMs**: Siempre verifica la precisión y calidad de la salida generada por los LLMs para asegurarte de que no contienen ninguna información no deseada o inapropiada. +- **Reportar y alertar sobre cualquier violación de datos o incidentes**: Mantente alerta a cualquier actividad o comportamiento sospechoso o anormal de los LLMs, como generar textos que sean irrelevantes, inexactos, ofensivos o dañinos. Esto podría ser una indicación de una violación de datos o incidente de seguridad. + +La seguridad de los datos, la gobernanza y el cumplimiento son críticos para cualquier organización que desee aprovechar el poder de los datos y la IA en un entorno multinube. Asegurar y gobernar todos tus datos es una tarea compleja y multifacética. Necesitas asegurar y gobernar diferentes tipos de datos (estructurados, no estructurados y generados por IA) en diferentes ubicaciones a través de múltiples nubes, y necesitas tener en cuenta las regulaciones de seguridad de datos, gobernanza e IA existentes y futuras. Para proteger tus datos, necesitas adoptar algunas mejores prácticas y precauciones, tales como: + +- Usar servicios o plataformas en la nube que ofrezcan características de protección y privacidad de datos. +- Usar herramientas de calidad y validación de datos para verificar tus datos en busca de errores, inconsistencias o anomalías. +- Usar marcos de gobernanza y ética de datos para asegurar que tus datos se usen de manera responsable y transparente. + +### Emulando amenazas del mundo real - Equipos rojos de IA + +Emular amenazas del mundo real ahora se considera una práctica estándar en la construcción de sistemas de IA resilientes al emplear herramientas, tácticas y procedimientos similares para identificar los riesgos para los sistemas y probar la respuesta de los defensores. + +> La práctica de los equipos rojos de IA ha evolucionado para asumir un significado más amplio: no solo cubre la búsqueda de vulnerabilidades de seguridad, sino que también incluye la búsqueda de otras fallas del sistema, como la generación de contenido potencialmente dañino. Los sistemas de IA vienen con nuevos riesgos, y el equipo rojo es fundamental para comprender esos riesgos novedosos, como la inyección de prompts y la producción de contenido no fundamentado. - [Microsoft AI Red Team building future of safer AI](https://www.microsoft.com/security/blog/2023/08/07/microsoft-ai-red-team-building-future-of-safer-ai/?WT.mc_id=academic-105485-koreyst) + +[![Guía y recursos para equipos rojos](../../../translated_images/13-AI-red-team.png?WT.5a1ed56fe6f4caf0ada6509bb7aacc47c7da784e5747e1a5373539d9f05bede2.es.mc_id=academic-105485-koreyst)]() + +A continuación se presentan ideas clave que han dado forma al programa de Equipos Rojos de IA de Microsoft. + +1. **Alcance Expansivo del Equipo Rojo de IA:** + El equipo rojo de IA ahora abarca tanto resultados de seguridad como de IA Responsable (RAI). Tradicionalmente, el equipo rojo se centraba en aspectos de seguridad, tratando el modelo como un vector (por ejemplo, robar el modelo subyacente). Sin embargo, los sistemas de IA introducen vulnerabilidades de seguridad novedosas (por ejemplo, inyección de prompts, envenenamiento), lo que requiere atención especial. Más allá de la seguridad, el equipo rojo de IA también investiga problemas de equidad (por ejemplo, estereotipos) y contenido dañino (por ejemplo, glorificación de la violencia). La identificación temprana de estos problemas permite priorizar las inversiones en defensa. +2. **Fallos Maliciosos y Benignos:** + El equipo rojo de IA considera fallos desde perspectivas tanto maliciosas como benignas. Por ejemplo, cuando se prueba el nuevo Bing, exploramos no solo cómo los adversarios maliciosos pueden subvertir el sistema, sino también cómo los usuarios regulares pueden encontrar contenido problemático o dañino. A diferencia del equipo rojo de seguridad tradicional, que se centra principalmente en actores maliciosos, el equipo rojo de IA tiene en cuenta una gama más amplia de personas y posibles fallos. +3. **Naturaleza Dinámica de los Sistemas de IA:** + Las aplicaciones de IA evolucionan constantemente. En aplicaciones de modelos de lenguaje grande, los desarrolladores se adaptan a los requisitos cambiantes. El equipo rojo continuo asegura una vigilancia continua y adaptación a los riesgos en evolución. + +El equipo rojo de IA no es todo abarcador y debe considerarse un movimiento complementario a controles adicionales como [control de acceso basado en roles (RBAC)](https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control? + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr 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 una traducción humana profesional. No nos hacemos responsables de ningún 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/14-the-generative-ai-application-lifecycle/README.md b/translations/es/14-the-generative-ai-application-lifecycle/README.md new file mode 100644 index 000000000..732034700 --- /dev/null +++ b/translations/es/14-the-generative-ai-application-lifecycle/README.md @@ -0,0 +1,90 @@ +[![Integrating with function calling](../../../translated_images/14-lesson-banner.png?WT.833a8de2ff3806528caaf839db4385f00ff7c9f92ccdd38d886f4d662fc72f2a.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson14-gh?WT.mc_id=academic-105485-koreyst) + +# El Ciclo de Vida de las Aplicaciones de IA Generativa + +Una pregunta importante para todas las aplicaciones de IA es la relevancia de las características de IA, ya que es un campo que evoluciona rápidamente. Para asegurarte de que tu aplicación siga siendo relevante, confiable y robusta, necesitas monitorearla, evaluarla y mejorarla continuamente. Aquí es donde entra en juego el ciclo de vida de la IA generativa. + +El ciclo de vida de la IA generativa es un marco que te guía a través de las etapas de desarrollo, implementación y mantenimiento de una aplicación de IA generativa. Te ayuda a definir tus objetivos, medir tu rendimiento, identificar tus desafíos e implementar tus soluciones. También te ayuda a alinear tu aplicación con los estándares éticos y legales de tu dominio y de tus partes interesadas. Siguiendo el ciclo de vida de la IA generativa, puedes asegurarte de que tu aplicación siempre esté ofreciendo valor y satisfaciendo a tus usuarios. + +## Introducción + +En este capítulo, aprenderás a: + +- Comprender el Cambio de Paradigma de MLOps a LLMOps +- El Ciclo de Vida de LLM +- Herramientas del Ciclo de Vida +- Metrificación y Evaluación del Ciclo de Vida + +## Comprender el Cambio de Paradigma de MLOps a LLMOps + +Los LLMs son una nueva herramienta en el arsenal de la Inteligencia Artificial. Son increíblemente poderosos en tareas de análisis y generación para aplicaciones. Sin embargo, este poder tiene algunas consecuencias en cómo optimizamos las tareas de IA y Aprendizaje Automático Clásico. + +Con esto, necesitamos un nuevo paradigma para adaptar esta herramienta de manera dinámica, con los incentivos correctos. Podemos categorizar las aplicaciones de IA más antiguas como "Apps de ML" y las aplicaciones de IA más nuevas como "Apps de GenAI" o simplemente "Apps de IA", reflejando la tecnología y técnicas predominantes en el momento. Esto cambia nuestra narrativa de múltiples maneras, observa la siguiente comparación. + +![Comparación LLMOps vs. MLOps](../../../translated_images/01-llmops-shift.png?WT.38bc3eca81f659d83b17070d0a766bc3a9f13284b92c307e296915db4e683fcf.es.mc_id=academic-105485-koreys) + +Nota que en LLMOps, estamos más enfocados en los Desarrolladores de Apps, usando integraciones como un punto clave, utilizando "Modelos-como-Servicio" y pensando en los siguientes puntos para las métricas. + +- Calidad: Calidad de la respuesta +- Daño: IA Responsable +- Honestidad: Fundamentación de la respuesta (¿Tiene sentido? ¿Es correcta?) +- Costo: Presupuesto de la solución +- Latencia: Tiempo promedio para la respuesta de token + +## El Ciclo de Vida de LLM + +Primero, para entender el ciclo de vida y las modificaciones, observemos la siguiente infografía. + +![Infografía de LLMOps](../../../translated_images/02-llmops.png?WT.32553adc9de4d89bb1d6a2f1f99d985457158a3be863e8e5dddc5e3dd074558a.es.mc_id=academic-105485-koreys) + +Como puedes notar, esto es diferente de los ciclos de vida usuales de MLOps. Los LLMs tienen muchos nuevos requisitos, como la Elaboración de Prompts, diferentes técnicas para mejorar la calidad (Fine-Tuning, RAG, Meta-Prompts), diferentes evaluaciones y responsabilidades con IA responsable, y por último, nuevas métricas de evaluación (Calidad, Daño, Honestidad, Costo y Latencia). + +Por ejemplo, observa cómo ideamos. Usando la ingeniería de prompts para experimentar con varios LLMs y explorar posibilidades para probar si su Hipótesis podría ser correcta. + +Nota que esto no es lineal, sino bucles integrados, iterativos y con un ciclo general. + +¿Cómo podríamos explorar esos pasos? Vamos a detallar cómo podríamos construir un ciclo de vida. + +![Flujo de Trabajo de LLMOps](../../../translated_images/03-llm-stage-flows.png?WT.118920c8fd638f0879fe06c5e6eb9d91536e8b9c6bc56808ebed8706812f5391.es.mc_id=academic-105485-koreys) + +Esto puede parecer un poco complicado, enfoquémonos en los tres grandes pasos primero. + +1. Ideación/Exploración: Exploración, aquí podemos explorar de acuerdo a nuestras necesidades de negocio. Prototipado, creando un [PromptFlow](https://microsoft.github.io/promptflow/index.html?WT.mc_id=academic-105485-koreyst) y probar si es lo suficientemente eficiente para nuestra Hipótesis. +2. Construcción/Aumento: Implementación, ahora, comenzamos a evaluar para conjuntos de datos más grandes, implementar técnicas como Fine-tuning y RAG, para verificar la robustez de nuestra solución. Si no lo es, reimplementarlo, añadiendo nuevos pasos en nuestro flujo o reestructurando los datos, podría ayudar. Después de probar nuestro flujo y nuestra escala, si funciona y verifica nuestras Métricas, está listo para el siguiente paso. +3. Operacionalización: Integración, ahora añadiendo Sistemas de Monitoreo y Alertas a nuestro sistema, implementación e integración de la aplicación a nuestra Aplicación. + +Luego, tenemos el ciclo general de Gestión, enfocándonos en la seguridad, cumplimiento y gobernanza. + +¡Felicidades! Ahora tienes tu App de IA lista para funcionar y operativa. Para una experiencia práctica, echa un vistazo a la [Demostración de Chat de Contoso.](https://nitya.github.io/contoso-chat/?WT.mc_id=academic-105485-koreys) + +Ahora, ¿qué herramientas podríamos usar? + +## Herramientas del Ciclo de Vida + +Para las herramientas, Microsoft ofrece la [Plataforma de Azure AI](https://azure.microsoft.com/solutions/ai/?WT.mc_id=academic-105485-koreys) y [PromptFlow](https://microsoft.github.io/promptflow/index.html?WT.mc_id=academic-105485-koreyst) para facilitar y hacer que tu ciclo sea fácil de implementar y listo para funcionar. + +La [Plataforma de Azure AI](https://azure.microsoft.com/solutions/ai/?WT.mc_id=academic-105485-koreys) te permite usar [AI Studio](https://ai.azure.com/?WT.mc_id=academic-105485-koreys). AI Studio es un portal web que te permite explorar modelos, muestras y herramientas. Gestionar tus recursos, flujos de desarrollo de UI y opciones de SDK/CLI para el desarrollo orientado a código. + +![Posibilidades de Azure AI](../../../translated_images/04-azure-ai-platform.png?WT.a39053c2efd7670298a79282658a9f5bf903dec5c1938b1a08cf45f1284e6ac0.es.mc_id=academic-105485-koreys) + +Azure AI te permite usar múltiples recursos, para gestionar tus operaciones, servicios, proyectos, búsqueda vectorial y necesidades de bases de datos. + +![LLMOps con Azure AI](../../../translated_images/05-llm-azure-ai-prompt.png?WT.9189130ce4f2e7c8667fc7c83c6b89236ce5c6361150f47104c27c105f04b487.es.mc_id=academic-105485-koreys) + +Construir, desde Pruebas de Concepto (POC) hasta aplicaciones a gran escala con PromptFlow: + +- Diseñar y Construir apps desde VS Code, con herramientas visuales y funcionales +- Probar y ajustar tus apps para una IA de calidad, con facilidad. +- Usar Azure AI Studio para Integrar e Iterar con la nube, Empujar e Implementar para una integración rápida. + +![LLMOps con PromptFlow](../../../translated_images/06-llm-promptflow.png?WT.e479dfedaa5f6ef7d36a11edbff74ac5579c3121ba0be0ee32eb5fc3eb17bd77.es.mc_id=academic-105485-koreys) + +## ¡Genial! ¡Continúa tu Aprendizaje! + +Increíble, ahora aprende más sobre cómo estructuramos una aplicación para usar los conceptos con la [App de Chat de Contoso](https://nitya.github.io/contoso-chat/?WT.mc_id=academic-105485-koreyst), para ver cómo Cloud Advocacy añade esos conceptos en demostraciones. Para más contenido, consulta nuestra [sesión de Ignite! +](https://www.youtube.com/watch?v=DdOylyrTOWg) + +Ahora, revisa la Lección 15, para entender cómo [Generación Aumentada por Recuperación y Bases de Datos Vectoriales](../15-rag-and-vector-databases/README.md?WT.mc_id=academic-105485-koreyst) impactan en la IA Generativa y para crear Aplicaciones más atractivas. + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr 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 una 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. \ No newline at end of file diff --git a/translations/es/15-rag-and-vector-databases/README.md b/translations/es/15-rag-and-vector-databases/README.md new file mode 100644 index 000000000..acb93ebe5 --- /dev/null +++ b/translations/es/15-rag-and-vector-databases/README.md @@ -0,0 +1,270 @@ +# Generación Aumentada por Recuperación (RAG) y Bases de Datos Vectoriales + +[![Generación Aumentada por Recuperación (RAG) y Bases de Datos Vectoriales](../../../translated_images/15-lesson-banner.png?WT.ae1ec4b596c9c2b74121dd24c30143380d4789a9ef381276dbbc9fd5d7abc3d5.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson15-gh?WT.mc_id=academic-105485-koreyst) + +En la lección sobre aplicaciones de búsqueda, aprendimos brevemente cómo integrar tus propios datos en Modelos de Lenguaje de Gran Escala (LLMs). En esta lección, profundizaremos en los conceptos de fundamentar tus datos en tu aplicación LLM, la mecánica del proceso y los métodos para almacenar datos, incluyendo tanto incrustaciones como texto. + +> **Video Próximamente** + +## Introducción + +En esta lección cubriremos lo siguiente: + +- Una introducción a RAG, qué es y por qué se utiliza en la IA (inteligencia artificial). + +- Comprender qué son las bases de datos vectoriales y crear una para nuestra aplicación. + +- Un ejemplo práctico sobre cómo integrar RAG en una aplicación. + +## Objetivos de Aprendizaje + +Después de completar esta lección, serás capaz de: + +- Explicar la importancia de RAG en la recuperación y procesamiento de datos. + +- Configurar una aplicación RAG y fundamentar tus datos en un LLM. + +- Integración efectiva de RAG y Bases de Datos Vectoriales en Aplicaciones LLM. + +## Nuestro Escenario: mejorando nuestros LLMs con nuestros propios datos + +Para esta lección, queremos agregar nuestras propias notas a la startup educativa, lo que permite al chatbot obtener más información sobre los diferentes temas. Usando las notas que tenemos, los estudiantes podrán estudiar mejor y comprender los diferentes temas, facilitando la revisión para sus exámenes. Para crear nuestro escenario, utilizaremos: + +- `Azure OpenAI:` el LLM que usaremos para crear nuestro chatbot + +- `AI for beginners' lesson on Neural Networks`: estos serán los datos en los que fundamentaremos nuestro LLM + +- `Azure AI Search` y `Azure Cosmos DB:` base de datos vectorial para almacenar nuestros datos y crear un índice de búsqueda + +Los usuarios podrán crear cuestionarios de práctica a partir de sus notas, tarjetas de revisión y resumirlas en visiones generales concisas. Para comenzar, veamos qué es RAG y cómo funciona: + +## Generación Aumentada por Recuperación (RAG) + +Un chatbot potenciado por LLM procesa las indicaciones del usuario para generar respuestas. Está diseñado para ser interactivo y relacionarse con los usuarios en una amplia gama de temas. Sin embargo, sus respuestas están limitadas al contexto proporcionado y sus datos de entrenamiento fundamentales. Por ejemplo, el límite de conocimiento de GPT-4 es septiembre de 2021, lo que significa que carece de conocimiento de eventos que han ocurrido después de este período. Además, los datos utilizados para entrenar LLMs excluyen información confidencial como notas personales o el manual de productos de una empresa. + +### Cómo funcionan los RAGs (Generación Aumentada por Recuperación) + +![dibujo que muestra cómo funcionan los RAGs](../../../translated_images/how-rag-works.png?WT.fde75879826c169b53e16dc0d0d6691172c75b314400f380d40a9f31244eba0e.es.mc_id=academic-105485-koreyst) + +Supongamos que deseas implementar un chatbot que cree cuestionarios a partir de tus notas, necesitarás una conexión con la base de conocimiento. Aquí es donde RAG viene al rescate. Los RAGs operan de la siguiente manera: + +- **Base de conocimiento:** Antes de la recuperación, estos documentos deben ser ingeridos y preprocesados, generalmente descomponiendo documentos grandes en fragmentos más pequeños, transformándolos en incrustaciones de texto y almacenándolos en una base de datos. + +- **Consulta del Usuario:** el usuario hace una pregunta + +- **Recuperación:** Cuando un usuario hace una pregunta, el modelo de incrustación recupera información relevante de nuestra base de conocimiento para proporcionar más contexto que se incorporará a la indicación. + +- **Generación Aumentada:** el LLM mejora su respuesta en base a los datos recuperados. Permite que la respuesta generada no solo se base en datos preentrenados sino también en información relevante del contexto añadido. Los datos recuperados se utilizan para aumentar las respuestas del LLM. Luego, el LLM devuelve una respuesta a la pregunta del usuario. + +![dibujo que muestra la arquitectura de los RAGs](../../../translated_images/encoder-decode.png?WT.80c3c9669a10e85d1f7e9dc7f7f0d416a71e16d2f8a6da93267e55cbfbddbf9f.es.mc_id=academic-105485-koreyst) + +La arquitectura de los RAGs se implementa utilizando transformadores que constan de dos partes: un codificador y un decodificador. Por ejemplo, cuando un usuario hace una pregunta, el texto de entrada se 'codifica' en vectores que capturan el significado de las palabras y los vectores se 'decodifican' en nuestro índice de documentos y generan un nuevo texto basado en la consulta del usuario. El LLM utiliza tanto un modelo codificador-decodificador para generar la salida. + +Dos enfoques al implementar RAG según el documento propuesto: [Generación Aumentada por Recuperación para Tareas de NLP (procesamiento de lenguaje natural) Intensivas en Conocimiento](https://arxiv.org/pdf/2005.11401.pdf?WT.mc_id=academic-105485-koreyst) son: + +- **_RAG-Secuencia_** usando documentos recuperados para predecir la mejor respuesta posible a una consulta de usuario + +- **RAG-Token** usando documentos para generar el siguiente token, luego recuperarlos para responder a la consulta del usuario + +### ¿Por qué usarías RAGs? + +- **Riqueza de información:** asegura que las respuestas de texto estén actualizadas y sean actuales. Por lo tanto, mejora el rendimiento en tareas específicas de dominio al acceder a la base de conocimiento interna. + +- Reduce la fabricación utilizando **datos verificables** en la base de conocimiento para proporcionar contexto a las consultas de los usuarios. + +- Es **rentable** ya que son más económicos en comparación con el ajuste fino de un LLM. + +## Creación de una base de conocimiento + +Nuestra aplicación se basa en nuestros datos personales, es decir, la lección de Redes Neuronales en el currículo de IA para Principiantes. + +### Bases de Datos Vectoriales + +Una base de datos vectorial, a diferencia de las bases de datos tradicionales, es una base de datos especializada diseñada para almacenar, gestionar y buscar vectores incrustados. Almacena representaciones numéricas de documentos. Descomponer datos en incrustaciones numéricas facilita que nuestro sistema de IA comprenda y procese los datos. + +Almacenamos nuestras incrustaciones en bases de datos vectoriales ya que los LLMs tienen un límite en el número de tokens que aceptan como entrada. Como no puedes pasar todas las incrustaciones a un LLM, necesitaremos descomponerlas en fragmentos y cuando un usuario haga una pregunta, las incrustaciones más similares a la pregunta se devolverán junto con la indicación. La fragmentación también reduce los costos en el número de tokens que pasan por un LLM. + +Algunas bases de datos vectoriales populares incluyen Azure Cosmos DB, Clarifyai, Pinecone, Chromadb, ScaNN, Qdrant y DeepLake. Puedes crear un modelo de Azure Cosmos DB usando Azure CLI con el siguiente comando: + +```bash +az login +az group create -n -l +az cosmosdb create -n -r +az cosmosdb list-keys -n -g +``` + +### De texto a incrustaciones + +Antes de almacenar nuestros datos, necesitaremos convertirlos en incrustaciones vectoriales antes de que se almacenen en la base de datos. Si estás trabajando con documentos grandes o textos largos, puedes fragmentarlos en función de las consultas que esperas. La fragmentación se puede hacer a nivel de oración o a nivel de párrafo. Como la fragmentación deriva significados de las palabras que los rodean, puedes agregar algún otro contexto a un fragmento, por ejemplo, agregando el título del documento o incluyendo algún texto antes o después del fragmento. Puedes fragmentar los datos de la siguiente manera: + +```python +def split_text(text, max_length, min_length): + words = text.split() + chunks = [] + current_chunk = [] + + for word in words: + current_chunk.append(word) + if len(' '.join(current_chunk)) < max_length and len(' '.join(current_chunk)) > min_length: + chunks.append(' '.join(current_chunk)) + current_chunk = [] + + # If the last chunk didn't reach the minimum length, add it anyway + if current_chunk: + chunks.append(' '.join(current_chunk)) + + return chunks +``` + +Una vez fragmentado, podemos incrustar nuestro texto usando diferentes modelos de incrustación. Algunos modelos que puedes usar incluyen: word2vec, ada-002 de OpenAI, Azure Computer Vision y muchos más. La selección de un modelo a usar dependerá de los idiomas que estés utilizando, el tipo de contenido codificado (texto/imágenes/audio), el tamaño de entrada que puede codificar y la longitud de la salida de incrustación. + +Un ejemplo de texto incrustado usando el modelo `text-embedding-ada-002` de OpenAI es: +![una incrustación de la palabra gato](../../../translated_images/cat.png?WT.6f67a41409b2174c6f543273f4a9f8c38b227112a12831da3070e52f13e03818.es.mc_id=academic-105485-koreyst) + +## Recuperación y Búsqueda Vectorial + +Cuando un usuario hace una pregunta, el recuperador la transforma en un vector usando el codificador de consultas, luego busca en nuestro índice de búsqueda de documentos vectores relevantes en el documento que están relacionados con la entrada. Una vez hecho, convierte tanto el vector de entrada como los vectores de documentos en texto y lo pasa por el LLM. + +### Recuperación + +La recuperación ocurre cuando el sistema intenta encontrar rápidamente los documentos del índice que satisfacen los criterios de búsqueda. El objetivo del recuperador es obtener documentos que se utilizarán para proporcionar contexto y fundamentar el LLM en tus datos. + +Hay varias maneras de realizar búsquedas dentro de nuestra base de datos, tales como: + +- **Búsqueda por palabras clave** - utilizada para búsquedas de texto + +- **Búsqueda semántica** - utiliza el significado semántico de las palabras + +- **Búsqueda vectorial** - convierte documentos de texto a representaciones vectoriales usando modelos de incrustación. La recuperación se realizará consultando los documentos cuyas representaciones vectoriales están más cerca de la pregunta del usuario. + +- **Híbrida** - una combinación de búsqueda por palabras clave y búsqueda vectorial. + +Un desafío con la recuperación surge cuando no hay una respuesta similar a la consulta en la base de datos, el sistema entonces devolverá la mejor información que pueda obtener, sin embargo, puedes usar tácticas como establecer la distancia máxima para la relevancia o usar búsqueda híbrida que combine tanto palabras clave como búsqueda vectorial. En esta lección usaremos búsqueda híbrida, una combinación de búsqueda vectorial y por palabras clave. Almacenaremos nuestros datos en un marco de datos con columnas que contengan los fragmentos así como las incrustaciones. + +### Similitud Vectorial + +El recuperador buscará en la base de datos de conocimiento incrustaciones que estén cerca unas de otras, el vecino más cercano, ya que son textos que son similares. En el escenario en que un usuario hace una consulta, primero se incrusta y luego se empareja con incrustaciones similares. La medida común que se utiliza para encontrar cuán similares son diferentes vectores es la similitud del coseno, que se basa en el ángulo entre dos vectores. + +Podemos medir la similitud usando otras alternativas que podemos usar son la distancia euclidiana, que es la línea recta entre los puntos finales de los vectores, y el producto punto, que mide la suma de los productos de los elementos correspondientes de dos vectores. + +### Índice de Búsqueda + +Al hacer la recuperación, necesitaremos construir un índice de búsqueda para nuestra base de conocimiento antes de realizar la búsqueda. Un índice almacenará nuestras incrustaciones y puede recuperar rápidamente los fragmentos más similares incluso en una base de datos grande. Podemos crear nuestro índice localmente usando: + +```python +from sklearn.neighbors import NearestNeighbors + +embeddings = flattened_df['embeddings'].to_list() + +# Create the search index +nbrs = NearestNeighbors(n_neighbors=5, algorithm='ball_tree').fit(embeddings) + +# To query the index, you can use the kneighbors method +distances, indices = nbrs.kneighbors(embeddings) +``` + +### Reordenamiento + +Una vez que hayas consultado la base de datos, es posible que necesites ordenar los resultados desde el más relevante. Un LLM de reordenamiento utiliza Aprendizaje Automático para mejorar la relevancia de los resultados de búsqueda ordenándolos desde el más relevante. Usando Azure AI Search, el reordenamiento se realiza automáticamente para ti usando un reordenador semántico. Un ejemplo de cómo funciona el reordenamiento usando vecinos más cercanos: + +```python +# Find the most similar documents +distances, indices = nbrs.kneighbors([query_vector]) + +index = [] +# Print the most similar documents +for i in range(3): + index = indices[0][i] + for index in indices[0]: + print(flattened_df['chunks'].iloc[index]) + print(flattened_df['path'].iloc[index]) + print(flattened_df['distances'].iloc[index]) + else: + print(f"Index {index} not found in DataFrame") +``` + +## Uniendo todo + +El último paso es agregar nuestro LLM a la mezcla para poder obtener respuestas que estén fundamentadas en nuestros datos. Podemos implementarlo de la siguiente manera: + +```python +user_input = "what is a perceptron?" + +def chatbot(user_input): + # Convert the question to a query vector + query_vector = create_embeddings(user_input) + + # Find the most similar documents + distances, indices = nbrs.kneighbors([query_vector]) + + # add documents to query to provide context + history = [] + for index in indices[0]: + history.append(flattened_df['chunks'].iloc[index]) + + # combine the history and the user input + history.append(user_input) + + # create a message object + messages=[ + {"role": "system", "content": "You are an AI assistant that helps with AI questions."}, + {"role": "user", "content": history[-1]} + ] + + # use chat completion to generate a response + response = openai.chat.completions.create( + model="gpt-4", + temperature=0.7, + max_tokens=800, + messages=messages + ) + + return response.choices[0].message + +chatbot(user_input) +``` + +## Evaluando nuestra aplicación + +### Métricas de Evaluación + +- Calidad de las respuestas suministradas asegurando que suene natural, fluida y humana. + +- Fundamentación de los datos: evaluar si la respuesta provino de los documentos suministrados. + +- Relevancia: evaluar si la respuesta coincide y está relacionada con la pregunta realizada. + +- Fluidez - si la respuesta tiene sentido gramaticalmente. + +## Casos de Uso para usar RAG (Generación Aumentada por Recuperación) y bases de datos vectoriales + +Existen muchos casos de uso diferentes donde las llamadas a funciones pueden mejorar tu aplicación como: + +- Preguntas y Respuestas: fundamentar los datos de tu empresa a un chat que puede ser utilizado por empleados para hacer preguntas. + +- Sistemas de Recomendación: donde puedes crear un sistema que empareje los valores más similares, por ejemplo, películas, restaurantes y muchos más. + +- Servicios de Chatbot: puedes almacenar el historial de chat y personalizar la conversación en función de los datos del usuario. + +- Búsqueda de imágenes basada en incrustaciones vectoriales, útil al hacer reconocimiento de imágenes y detección de anomalías. + +## Resumen + +Hemos cubierto las áreas fundamentales de RAG desde agregar nuestros datos a la aplicación, la consulta del usuario y la salida. Para simplificar la creación de RAG, puedes usar marcos como Semanti Kernel, Langchain o Autogen. + +## Tarea + +Para continuar tu aprendizaje de Generación Aumentada por Recuperación (RAG) puedes construir: + +- Construir un front-end para la aplicación usando el marco de tu elección. + +- Utilizar un marco, ya sea LangChain o Semantic Kernel, y recrear tu aplicación. + +Felicidades por completar la lección 👏. + +## El aprendizaje no termina aquí, continúa el viaje + +Después de completar esta lección, consulta nuestra [colección de Aprendizaje de IA Generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para seguir mejorando tu conocimiento sobre IA Generativa. + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr 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 humana. No nos hacemos responsables de ningún 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/15-rag-and-vector-databases/data/frameworks.md b/translations/es/15-rag-and-vector-databases/data/frameworks.md new file mode 100644 index 000000000..855486038 --- /dev/null +++ b/translations/es/15-rag-and-vector-databases/data/frameworks.md @@ -0,0 +1,114 @@ +# Frameworks de Redes Neuronales + +Como ya hemos aprendido, para poder entrenar redes neuronales de manera eficiente necesitamos hacer dos cosas: + +* Operar con tensores, por ejemplo, multiplicar, sumar y calcular algunas funciones como sigmoide o softmax. +* Calcular gradientes de todas las expresiones, para realizar la optimización por descenso de gradiente. + +Mientras que la biblioteca `numpy` puede hacer la primera parte, necesitamos algún mecanismo para calcular gradientes. En nuestro framework que desarrollamos en la sección anterior, tuvimos que programar manualmente todas las funciones derivadas dentro del método `backward`, que realiza la retropropagación. Idealmente, un framework debería darnos la oportunidad de calcular gradientes de *cualquier expresión* que podamos definir. + +Otra cosa importante es poder realizar cálculos en GPU, u otras unidades de cálculo especializadas, como TPU. El entrenamiento de redes neuronales profundas requiere *muchos* cálculos, y poder paralelizar esos cálculos en GPUs es muy importante. + +> ✅ El término 'paralelizar' significa distribuir los cálculos en múltiples dispositivos. + +Actualmente, los dos frameworks neuronales más populares son: TensorFlow y PyTorch. Ambos proporcionan una API de bajo nivel para operar con tensores tanto en CPU como en GPU. Además de la API de bajo nivel, también hay una API de alto nivel, llamada Keras y PyTorch Lightning, respectivamente. + +API de Bajo Nivel | TensorFlow| PyTorch +--------------|-------------------------------------|-------------------------------- +API de Alto Nivel| Keras| PyTorch Lightning + +**Las APIs de bajo nivel** en ambos frameworks te permiten construir los llamados **gráficos computacionales**. Este gráfico define cómo calcular la salida (generalmente la función de pérdida) con los parámetros de entrada dados, y puede enviarse para cálculo en GPU, si está disponible. Hay funciones para diferenciar este gráfico computacional y calcular gradientes, que luego pueden usarse para optimizar los parámetros del modelo. + +**Las APIs de alto nivel** consideran las redes neuronales como una **secuencia de capas**, y facilitan mucho la construcción de la mayoría de las redes neuronales. Entrenar el modelo generalmente requiere preparar los datos y luego llamar a una función `fit` para hacer el trabajo. + +La API de alto nivel te permite construir redes neuronales típicas muy rápidamente sin preocuparte por muchos detalles. Al mismo tiempo, la API de bajo nivel ofrece mucho más control sobre el proceso de entrenamiento, y por lo tanto se utiliza mucho en investigación, cuando se trata de nuevas arquitecturas de redes neuronales. + +También es importante entender que puedes usar ambas APIs juntas, por ejemplo, puedes desarrollar tu propia arquitectura de capa de red usando la API de bajo nivel, y luego usarla dentro de una red más grande construida y entrenada con la API de alto nivel. O puedes definir una red usando la API de alto nivel como una secuencia de capas, y luego usar tu propio bucle de entrenamiento de bajo nivel para realizar la optimización. Ambas APIs usan los mismos conceptos básicos subyacentes, y están diseñadas para trabajar bien juntas. + +## Aprendizaje + +En este curso, ofrecemos la mayoría del contenido tanto para PyTorch como para TensorFlow. Puedes elegir tu framework preferido y solo pasar por los cuadernos correspondientes. Si no estás seguro de qué framework elegir, lee algunas discusiones en internet sobre **PyTorch vs. TensorFlow**. También puedes echar un vistazo a ambos frameworks para obtener una mejor comprensión. + +Siempre que sea posible, usaremos APIs de Alto Nivel por simplicidad. Sin embargo, creemos que es importante entender cómo funcionan las redes neuronales desde cero, por lo que al principio comenzamos trabajando con API de bajo nivel y tensores. Sin embargo, si quieres avanzar rápidamente y no deseas pasar mucho tiempo aprendiendo estos detalles, puedes saltarte eso e ir directamente a los cuadernos de API de alto nivel. + +## ✍️ Ejercicios: Frameworks + +Continúa tu aprendizaje en los siguientes cuadernos: + +API de Bajo Nivel | Cuaderno de TensorFlow+Keras | PyTorch +--------------|-------------------------------------|-------------------------------- +API de Alto Nivel| Keras | *PyTorch Lightning* + +Después de dominar los frameworks, recapitulemos la noción de sobreajuste. + +# Sobreajuste + +El sobreajuste es un concepto extremadamente importante en el aprendizaje automático, y es muy importante hacerlo bien. + +Considera el siguiente problema de aproximar 5 puntos (representados por `x` en los gráficos a continuación): + +!lineal | sobreajuste +-------------------------|-------------------------- +**Modelo lineal, 2 parámetros** | **Modelo no lineal, 7 parámetros** +Error de entrenamiento = 5.3 | Error de entrenamiento = 0 +Error de validación = 5.1 | Error de validación = 20 + +* A la izquierda, vemos una buena aproximación de línea recta. Debido a que el número de parámetros es adecuado, el modelo comprende correctamente la distribución de los puntos. +* A la derecha, el modelo es demasiado poderoso. Debido a que solo tenemos 5 puntos y el modelo tiene 7 parámetros, puede ajustarse de tal manera que pase por todos los puntos, haciendo que el error de entrenamiento sea 0. Sin embargo, esto impide que el modelo entienda el patrón correcto detrás de los datos, por lo que el error de validación es muy alto. + +Es muy importante encontrar un equilibrio correcto entre la riqueza del modelo (número de parámetros) y el número de muestras de entrenamiento. + +## Por qué ocurre el sobreajuste + + * No hay suficientes datos de entrenamiento + * Modelo demasiado poderoso + * Demasiado ruido en los datos de entrada + +## Cómo detectar el sobreajuste + +Como puedes ver en el gráfico anterior, el sobreajuste puede detectarse por un error de entrenamiento muy bajo y un error de validación alto. Normalmente, durante el entrenamiento, veremos que tanto el error de entrenamiento como el de validación comienzan a disminuir, y luego, en algún punto, el error de validación puede dejar de disminuir y comenzar a aumentar. Esto será una señal de sobreajuste, y el indicador de que probablemente deberíamos detener el entrenamiento en este punto (o al menos hacer una instantánea del modelo). + +## Cómo prevenir el sobreajuste + +Si ves que ocurre el sobreajuste, puedes hacer una de las siguientes cosas: + + * Aumentar la cantidad de datos de entrenamiento + * Disminuir la complejidad del modelo + * Usar alguna técnica de regularización, como Dropout, que consideraremos más adelante. + +## Sobreajuste y el Equilibrio Sesgo-Varianza + +El sobreajuste es en realidad un caso de un problema más genérico en estadísticas llamado Equilibrio Sesgo-Varianza. Si consideramos las posibles fuentes de error en nuestro modelo, podemos ver dos tipos de errores: + +* **Errores de sesgo** son causados por nuestro algoritmo al no poder capturar correctamente la relación entre los datos de entrenamiento. Puede resultar del hecho de que nuestro modelo no es lo suficientemente poderoso (**subajuste**). +* **Errores de varianza**, que son causados por el modelo al aproximar el ruido en los datos de entrada en lugar de una relación significativa (**sobreajuste**). + +Durante el entrenamiento, el error de sesgo disminuye (a medida que nuestro modelo aprende a aproximar los datos), y el error de varianza aumenta. Es importante detener el entrenamiento, ya sea manualmente (cuando detectamos sobreajuste) o automáticamente (introduciendo regularización), para prevenir el sobreajuste. + +## Conclusión + +En esta lección, aprendiste sobre las diferencias entre las diversas APIs para los dos frameworks de IA más populares, TensorFlow y PyTorch. Además, aprendiste sobre un tema muy importante, el sobreajuste. + +## 🚀 Desafío + +En los cuadernos adjuntos, encontrarás 'tareas' al final; trabaja a través de los cuadernos y completa las tareas. + +## Revisión y Autoestudio + +Investiga sobre los siguientes temas: + +- TensorFlow +- PyTorch +- Sobreajuste + +Pregúntate las siguientes preguntas: + +- ¿Cuál es la diferencia entre TensorFlow y PyTorch? +- ¿Cuál es la diferencia entre sobreajuste y subajuste? + +## Tarea + +En este laboratorio, se te pide que resuelvas dos problemas de clasificación utilizando redes completamente conectadas de una y varias capas usando PyTorch o TensorFlow. + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. 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 la traducción profesional humana. No nos hacemos responsables de ningún 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/15-rag-and-vector-databases/data/own_framework.md b/translations/es/15-rag-and-vector-databases/data/own_framework.md new file mode 100644 index 000000000..e8b7ddc79 --- /dev/null +++ b/translations/es/15-rag-and-vector-databases/data/own_framework.md @@ -0,0 +1,83 @@ +# Introducción a Redes Neuronales. Perceptrón Multicapa + +En la sección anterior, aprendiste sobre el modelo de red neuronal más simple: el perceptrón de una sola capa, un modelo lineal de clasificación de dos clases. + +En esta sección extenderemos este modelo a un marco más flexible, permitiéndonos: + +* realizar **clasificación multiclase** además de la clasificación de dos clases +* resolver **problemas de regresión** además de clasificación +* separar clases que no son linealmente separables + +También desarrollaremos nuestro propio marco modular en Python que nos permitirá construir diferentes arquitecturas de redes neuronales. + +## Formalización del Aprendizaje Automático + +Comencemos formalizando el problema del Aprendizaje Automático. Supongamos que tenemos un conjunto de datos de entrenamiento **X** con etiquetas **Y**, y necesitamos construir un modelo *f* que haga las predicciones más precisas. La calidad de las predicciones se mide mediante la **función de pérdida** ℒ. Las siguientes funciones de pérdida se utilizan a menudo: + +* Para problemas de regresión, cuando necesitamos predecir un número, podemos usar **error absoluto** ∑i|f(x(i))-y(i)|, o **error cuadrático** ∑i(f(x(i))-y(i))2 +* Para clasificación, usamos **pérdida 0-1** (que es esencialmente lo mismo que la **precisión** del modelo), o **pérdida logística**. + +Para un perceptrón de un nivel, la función *f* se definía como una función lineal *f(x)=wx+b* (aquí *w* es la matriz de pesos, *x* es el vector de características de entrada, y *b* es el vector de sesgo). Para diferentes arquitecturas de redes neuronales, esta función puede tomar una forma más compleja. + +> En el caso de la clasificación, a menudo es deseable obtener probabilidades de las clases correspondientes como salida de la red. Para convertir números arbitrarios en probabilidades (por ejemplo, para normalizar la salida), a menudo usamos la función **softmax** σ, y la función *f* se convierte en *f(x)=σ(wx+b)* + +En la definición de *f* anterior, *w* y *b* se llaman **parámetros** θ=⟨*w,b*⟩. Dado el conjunto de datos ⟨**X**,**Y**⟩, podemos calcular un error general en todo el conjunto de datos como una función de los parámetros θ. + +> ✅ **El objetivo del entrenamiento de redes neuronales es minimizar el error variando los parámetros θ** + +## Optimización por Descenso de Gradiente + +Hay un método conocido de optimización de funciones llamado **descenso de gradiente**. La idea es que podemos calcular una derivada (en el caso multidimensional llamada **gradiente**) de la función de pérdida con respecto a los parámetros, y variar los parámetros de tal manera que el error disminuya. Esto se puede formalizar de la siguiente manera: + +* Inicializar los parámetros con algunos valores aleatorios w(0), b(0) +* Repetir el siguiente paso muchas veces: + - w(i+1) = w(i)-η∂ℒ/∂w + - b(i+1) = b(i)-η∂ℒ/∂b + +Durante el entrenamiento, se supone que los pasos de optimización se calculan considerando todo el conjunto de datos (recuerda que la pérdida se calcula como una suma a través de todas las muestras de entrenamiento). Sin embargo, en la vida real tomamos pequeñas porciones del conjunto de datos llamadas **minibatches**, y calculamos gradientes basados en un subconjunto de datos. Debido a que el subconjunto se toma aleatoriamente cada vez, este método se llama **descenso de gradiente estocástico** (SGD). + +## Perceptrones Multicapa y Retropropagación + +Una red de una sola capa, como hemos visto anteriormente, es capaz de clasificar clases linealmente separables. Para construir un modelo más rico, podemos combinar varias capas de la red. Matemáticamente, esto significaría que la función *f* tendría una forma más compleja y se calcularía en varios pasos: +* z1=w1x+b1 +* z2=w2α(z1)+b2 +* f = σ(z2) + +Aquí, α es una **función de activación no lineal**, σ es una función softmax, y los parámetros θ=<*w1,b1,w2,b2*>. + +El algoritmo de descenso de gradiente seguiría siendo el mismo, pero sería más difícil calcular los gradientes. Dado el principio de diferenciación en cadena, podemos calcular las derivadas como: + +* ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2) +* ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1) + +> ✅ La regla de diferenciación en cadena se utiliza para calcular las derivadas de la función de pérdida con respecto a los parámetros. + +Observa que la parte más a la izquierda de todas estas expresiones es la misma, por lo que podemos calcular de manera efectiva las derivadas comenzando desde la función de pérdida y yendo "hacia atrás" a través del grafo computacional. Por lo tanto, el método de entrenamiento de un perceptrón multicapa se llama **retropropagación**, o 'backprop'. + +> TODO: cita de la imagen + +> ✅ Cubriremos la retropropagación con mucho más detalle en nuestro ejemplo de notebook. + +## Conclusión + +En esta lección, hemos construido nuestra propia biblioteca de redes neuronales y la hemos utilizado para una tarea simple de clasificación bidimensional. + +## 🚀 Desafío + +En el notebook adjunto, implementarás tu propio marco para construir y entrenar perceptrones multicapa. Podrás ver en detalle cómo operan las redes neuronales modernas. + +Procede al notebook OwnFramework y trabaja en él. + +## Revisión y Autoestudio + +La retropropagación es un algoritmo común utilizado en IA y ML, vale la pena estudiarlo con más detalle. + +## Asignación + +En este laboratorio, se te pide que utilices el marco que construiste en esta lección para resolver la clasificación de dígitos escritos a mano MNIST. + +* Instrucciones +* Notebook + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas 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 humana. No somos responsables de ningún 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/15-rag-and-vector-databases/data/perceptron.md b/translations/es/15-rag-and-vector-databases/data/perceptron.md new file mode 100644 index 000000000..ca353d1ef --- /dev/null +++ b/translations/es/15-rag-and-vector-databases/data/perceptron.md @@ -0,0 +1,88 @@ +# Introducción a Redes Neuronales: Perceptrón + +Uno de los primeros intentos de implementar algo similar a una red neuronal moderna fue realizado por Frank Rosenblatt del Laboratorio Aeronáutico de Cornell en 1957. Fue una implementación de hardware llamada "Mark-1", diseñada para reconocer figuras geométricas primitivas, como triángulos, cuadrados y círculos. + +| | | +|--------------|-----------| +|Frank Rosenblatt | El Perceptrón Mark 1| + +> Imágenes de Wikipedia + +Una imagen de entrada se representaba mediante una matriz de fotocélulas de 20x20, por lo que la red neuronal tenía 400 entradas y una salida binaria. Una red simple contenía una neurona, también llamada una **unidad lógica de umbral**. Los pesos de la red neuronal actuaban como potenciómetros que requerían ajuste manual durante la fase de entrenamiento. + +> ✅ Un potenciómetro es un dispositivo que permite al usuario ajustar la resistencia de un circuito. + +> El New York Times escribió sobre el perceptrón en ese momento: *el embrión de una computadora electrónica que [la Marina] espera que sea capaz de caminar, hablar, ver, escribir, reproducirse a sí misma y ser consciente de su existencia.* + +## Modelo de Perceptrón + +Supongamos que tenemos N características en nuestro modelo, en cuyo caso el vector de entrada sería un vector de tamaño N. Un perceptrón es un modelo de **clasificación binaria**, es decir, puede distinguir entre dos clases de datos de entrada. Supondremos que para cada vector de entrada x, la salida de nuestro perceptrón será +1 o -1, dependiendo de la clase. La salida se calculará usando la fórmula: + +y(x) = f(wTx) + +donde f es una función de activación escalonada. + +## Entrenamiento del Perceptrón + +Para entrenar un perceptrón necesitamos encontrar un vector de pesos w que clasifique la mayoría de los valores correctamente, es decir, que resulte en el menor **error**. Este error se define por el **criterio del perceptrón** de la siguiente manera: + +E(w) = -∑wTxiti + +donde: + +* la suma se toma sobre aquellos puntos de datos de entrenamiento i que resultan en una clasificación incorrecta +* xi es el dato de entrada, y ti es -1 o +1 para ejemplos negativos y positivos respectivamente. + +Este criterio se considera como una función de los pesos w, y necesitamos minimizarlo. A menudo se utiliza un método llamado **descenso de gradiente**, en el cual comenzamos con algunos pesos iniciales w(0), y luego en cada paso actualizamos los pesos de acuerdo con la fórmula: + +w(t+1) = w(t) - η∇E(w) + +Aquí η es la llamada **tasa de aprendizaje**, y ∇E(w) denota el **gradiente** de E. Después de calcular el gradiente, terminamos con + +w(t+1) = w(t) + ∑ηxiti + +El algoritmo en Python se ve así: + +```python +def train(positive_examples, negative_examples, num_iterations = 100, eta = 1): + + weights = [0,0,0] # Initialize weights (almost randomly :) + + for i in range(num_iterations): + pos = random.choice(positive_examples) + neg = random.choice(negative_examples) + + z = np.dot(pos, weights) # compute perceptron output + if z < 0: # positive example classified as negative + weights = weights + eta*weights.shape + + z = np.dot(neg, weights) + if z >= 0: # negative example classified as positive + weights = weights - eta*weights.shape + + return weights +``` + +## Conclusión + +En esta lección, aprendiste sobre un perceptrón, que es un modelo de clasificación binaria, y cómo entrenarlo usando un vector de pesos. + +## 🚀 Desafío + +Si deseas intentar construir tu propio perceptrón, prueba este laboratorio en Microsoft Learn que utiliza el diseñador de Azure ML. + +## Revisión y Autoestudio + +Para ver cómo podemos usar el perceptrón para resolver un problema simple así como problemas de la vida real, y para continuar aprendiendo, dirígete al cuaderno de Perceptrón. + +Aquí también hay un artículo interesante sobre perceptrones. + +## Tarea + +En esta lección, hemos implementado un perceptrón para una tarea de clasificación binaria y lo hemos usado para clasificar entre dos dígitos escritos a mano. En este laboratorio, se te pide que resuelvas completamente el problema de clasificación de dígitos, es decir, determinar qué dígito es más probable que corresponda a una imagen dada. + +* Instrucciones +* Cuaderno + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas 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 humana profesional. No somos responsables de ningún 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/16-open-source-models/README.md b/translations/es/16-open-source-models/README.md new file mode 100644 index 000000000..fffc40bb7 --- /dev/null +++ b/translations/es/16-open-source-models/README.md @@ -0,0 +1,82 @@ +[![Modelos de Código Abierto](../../../translated_images/16-lesson-banner.png?WT.a9a13a59f0350adb5846e88fb3aba98cd4c6cb3297e78cb7100938f45b7dac47.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson16-gh?WT.mc_id=academic-105485-koreyst) + +## Introducción + +El mundo de los LLMs de código abierto es emocionante y está en constante evolución. Esta lección tiene como objetivo proporcionar una visión detallada de los modelos de código abierto. Si buscas información sobre cómo los modelos propietarios se comparan con los modelos de código abierto, ve a la lección ["Explorando y Comparando Diferentes LLMs"](../02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst). Esta lección también cubrirá el tema del ajuste fino, pero una explicación más detallada se puede encontrar en la lección ["Ajuste Fino de LLMs"](../18-fine-tuning/README.md?WT.mc_id=academic-105485-koreyst). + +## Objetivos de aprendizaje + +- Comprender los modelos de código abierto. +- Entender los beneficios de trabajar con modelos de código abierto. +- Explorar los modelos abiertos disponibles en Hugging Face y el Azure AI Studio. + +## ¿Qué son los Modelos de Código Abierto? + +El software de código abierto ha desempeñado un papel crucial en el crecimiento de la tecnología en diversos campos. La Open Source Initiative (OSI) ha definido [10 criterios para el software](https://web.archive.org/web/20241126001143/https://opensource.org/osd?WT.mc_id=academic-105485-koreyst) para ser clasificado como de código abierto. El código fuente debe compartirse abiertamente bajo una licencia aprobada por la OSI. + +Aunque el desarrollo de LLMs tiene elementos similares al desarrollo de software, el proceso no es exactamente el mismo. Esto ha generado mucha discusión en la comunidad sobre la definición de código abierto en el contexto de los LLMs. Para que un modelo esté alineado con la definición tradicional de código abierto, la siguiente información debería estar públicamente disponible: + +- Conjuntos de datos utilizados para entrenar el modelo. +- Pesos completos del modelo como parte del entrenamiento. +- El código de evaluación. +- El código de ajuste fino. +- Pesos completos del modelo y métricas de entrenamiento. + +Actualmente, solo hay unos pocos modelos que cumplen con estos criterios. El [modelo OLMo creado por el Instituto Allen para la Inteligencia Artificial (AllenAI)](https://huggingface.co/allenai/OLMo-7B?WT.mc_id=academic-105485-koreyst) es uno que encaja en esta categoría. + +Para esta lección, nos referiremos a los modelos como "modelos abiertos" en adelante, ya que pueden no cumplir con los criterios anteriores en el momento de escribir esto. + +## Beneficios de los Modelos Abiertos + +**Altamente Personalizables** - Dado que los modelos abiertos se publican con información detallada de entrenamiento, los investigadores y desarrolladores pueden modificar los elementos internos del modelo. Esto permite la creación de modelos altamente especializados que están ajustados para una tarea o área de estudio específica. Algunos ejemplos de esto son la generación de código, operaciones matemáticas y biología. + +**Costo** - El costo por token para usar y desplegar estos modelos es menor que el de los modelos propietarios. Al construir aplicaciones de IA generativa, se debe considerar el rendimiento frente al precio al trabajar con estos modelos en tu caso de uso. + +![Costo del Modelo](../../../translated_images/model-price.png?WT.473bad4fe5bdb7014798275047130c0949da1e4a3d6f379037bedf68ef1d5e42.es.mc_id=academic-105485-koreyst) +Fuente: Análisis Artificial + +**Flexibilidad** - Trabajar con modelos abiertos te permite ser flexible en términos de usar diferentes modelos o combinarlos. Un ejemplo de esto es el [HuggingChat Assistants](https://huggingface.co/chat?WT.mc_id=academic-105485-koreyst), donde un usuario puede seleccionar el modelo que se está utilizando directamente en la interfaz de usuario: + +![Elegir Modelo](../../../translated_images/choose-model.png?WT.50da8a7caba083003bcf9f71017d17715f032acff67359c11c9886597ca3efdc.es.mc_id=academic-105485-koreyst) + +## Explorando Diferentes Modelos Abiertos + +### Llama 2 + +[LLama2](https://huggingface.co/meta-llama?WT.mc_id=academic-105485-koreyst), desarrollado por Meta, es un modelo abierto optimizado para aplicaciones basadas en chat. Esto se debe a su método de ajuste fino, que incluyó una gran cantidad de diálogos y retroalimentación humana. Con este método, el modelo produce más resultados que están alineados con las expectativas humanas, lo que proporciona una mejor experiencia de usuario. + +Algunos ejemplos de versiones ajustadas de Llama incluyen [Japanese Llama](https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b?WT.mc_id=academic-105485-koreyst), que se especializa en japonés y [Llama Pro](https://huggingface.co/TencentARC/LLaMA-Pro-8B?WT.mc_id=academic-105485-koreyst), que es una versión mejorada del modelo base. + +### Mistral + +[Mistral](https://huggingface.co/mistralai?WT.mc_id=academic-105485-koreyst) es un modelo abierto con un fuerte enfoque en alto rendimiento y eficiencia. Utiliza el enfoque Mixture-of-Experts, que combina un grupo de modelos expertos especializados en un solo sistema donde, dependiendo de la entrada, se seleccionan ciertos modelos para ser utilizados. Esto hace que el cálculo sea más efectivo, ya que los modelos solo abordan las entradas en las que están especializados. + +Algunos ejemplos de versiones ajustadas de Mistral incluyen [BioMistral](https://huggingface.co/BioMistral/BioMistral-7B?text=Mon+nom+est+Thomas+et+mon+principal?WT.mc_id=academic-105485-koreyst), que se centra en el dominio médico y [OpenMath Mistral](https://huggingface.co/nvidia/OpenMath-Mistral-7B-v0.1-hf?WT.mc_id=academic-105485-koreyst), que realiza cálculos matemáticos. + +### Falcon + +[Falcon](https://huggingface.co/tiiuae?WT.mc_id=academic-105485-koreyst) es un LLM creado por el Instituto de Innovación Tecnológica (**TII**). El Falcon-40B fue entrenado en 40 mil millones de parámetros, lo que ha demostrado tener un mejor rendimiento que GPT-3 con un menor presupuesto de cómputo. Esto se debe a su uso del algoritmo FlashAttention y la atención de consulta múltiple que le permite reducir los requisitos de memoria en el tiempo de inferencia. Con este tiempo de inferencia reducido, el Falcon-40B es adecuado para aplicaciones de chat. + +Algunos ejemplos de versiones ajustadas de Falcon son el [OpenAssistant](https://huggingface.co/OpenAssistant/falcon-40b-sft-top1-560?WT.mc_id=academic-105485-koreyst), un asistente construido sobre modelos abiertos y [GPT4ALL](https://huggingface.co/nomic-ai/gpt4all-falcon?WT.mc_id=academic-105485-koreyst), que ofrece un rendimiento superior al modelo base. + +## Cómo Elegir + +No hay una única respuesta para elegir un modelo abierto. Un buen punto de partida es usar la función de filtro por tarea de Azure AI Studio. Esto te ayudará a entender qué tipos de tareas ha sido entrenado el modelo. Hugging Face también mantiene un LLM Leaderboard que te muestra los modelos con mejor rendimiento basado en ciertas métricas. + +Cuando busques comparar LLMs de diferentes tipos, [Artificial Analysis](https://artificialanalysis.ai/?WT.mc_id=academic-105485-koreyst) es otro gran recurso: + +![Calidad del Modelo](../../../translated_images/model-quality.png?WT.bffdb0b01a3f3205153df83585941f90a153017f607dbcfad9cde5369764f203.es.mc_id=academic-105485-koreyst) +Fuente: Análisis Artificial + +Si trabajas en un caso de uso específico, buscar versiones ajustadas que se centren en la misma área puede ser efectivo. Experimentar con múltiples modelos abiertos para ver cómo se desempeñan según tus expectativas y las de tus usuarios es otra buena práctica. + +## Próximos Pasos + +Lo mejor de los modelos abiertos es que puedes comenzar a trabajar con ellos bastante rápido. Consulta el [Catálogo de Modelos de Azure AI Studio](https://ai.azure.com?WT.mc_id=academic-105485-koreyst), que presenta una colección específica de Hugging Face con estos modelos que discutimos aquí. + +## El aprendizaje no termina aquí, continúa el viaje + +Después de completar esta lección, consulta nuestra [colección de Aprendizaje de IA Generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para seguir mejorando tus conocimientos en IA Generativa. + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. 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 ningún 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/17-ai-agents/README.md b/translations/es/17-ai-agents/README.md new file mode 100644 index 000000000..0f6334566 --- /dev/null +++ b/translations/es/17-ai-agents/README.md @@ -0,0 +1,164 @@ +[![Modelos de Código Abierto](../../../translated_images/17-lesson-banner.png?WT.d223296926e27d95f6b5a748e3f77ab9a1b669d4f9aebe608f926cbb44ea08a8.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson17-gh?WT.mc_id=academic-105485-koreyst) + +## Introducción + +Los Agentes de IA representan un desarrollo emocionante en la IA Generativa, permitiendo que los Modelos de Lenguaje Extenso (LLMs) evolucionen de asistentes a agentes capaces de tomar acciones. Los marcos de trabajo de Agentes de IA permiten a los desarrolladores crear aplicaciones que otorgan a los LLMs acceso a herramientas y gestión de estado. Estos marcos también mejoran la visibilidad, permitiendo a usuarios y desarrolladores monitorear las acciones planificadas por los LLMs, mejorando así la gestión de la experiencia. + +La lección cubrirá las siguientes áreas: + +- Comprender qué es un Agente de IA - ¿Qué es exactamente un Agente de IA? +- Explorar cuatro marcos de trabajo diferentes de Agentes de IA - ¿Qué los hace únicos? +- Aplicar estos Agentes de IA a diferentes casos de uso - ¿Cuándo deberíamos usar Agentes de IA? + +## Objetivos de aprendizaje + +Después de tomar esta lección, podrás: + +- Explicar qué son los Agentes de IA y cómo se pueden usar. +- Tener una comprensión de las diferencias entre algunos de los marcos de trabajo populares de Agentes de IA, y cómo difieren. +- Entender cómo funcionan los Agentes de IA para construir aplicaciones con ellos. + +## ¿Qué son los Agentes de IA? + +Los Agentes de IA son un campo muy emocionante en el mundo de la IA Generativa. Con esta emoción a veces viene una confusión de términos y su aplicación. Para simplificar las cosas e incluir la mayoría de las herramientas que se refieren a Agentes de IA, vamos a usar esta definición: + +Los Agentes de IA permiten que los Modelos de Lenguaje Extenso (LLMs) realicen tareas dándoles acceso a un **estado** y **herramientas**. + +![Modelo de Agente](../../../translated_images/what-agent.png?WT.96b2eb171bd613cd0652fb5a2c1f488c80fde8d3405db76d780603041a415cb3.es.mc_id=academic-105485-koreyst) + +Definamos estos términos: + +**Modelos de Lenguaje Extenso** - Estos son los modelos mencionados a lo largo de este curso como GPT-3.5, GPT-4, Llama-2, etc. + +**Estado** - Esto se refiere al contexto en el que el LLM está trabajando. El LLM utiliza el contexto de sus acciones pasadas y el contexto actual, guiando su toma de decisiones para acciones subsecuentes. Los marcos de trabajo de Agentes de IA permiten a los desarrolladores mantener este contexto más fácilmente. + +**Herramientas** - Para completar la tarea que el usuario ha solicitado y que el LLM ha planificado, el LLM necesita acceso a herramientas. Algunos ejemplos de herramientas pueden ser una base de datos, una API, una aplicación externa o incluso otro LLM. + +Estas definiciones, con suerte, te darán una buena base a medida que avanzamos en cómo se implementan. Vamos a explorar algunos marcos de trabajo de Agentes de IA diferentes: + +## Agentes de LangChain + +[Agentes de LangChain](https://python.langchain.com/docs/how_to/#agents?WT.mc_id=academic-105485-koreyst) es una implementación de las definiciones que proporcionamos anteriormente. + +Para gestionar el **estado**, utiliza una función incorporada llamada `AgentExecutor`. Esta acepta el `agent` definido y el `tools` que están disponibles para ella. + +El `Agent Executor` también almacena el historial de chat para proporcionar el contexto del chat. + +![Agentes de Langchain](../../../translated_images/langchain-agents.png?WT.311575a86262a6e33490477b281688373d96e3392dbfe3094965470531a9f111.es.mc_id=academic-105485-koreyst) + +LangChain ofrece un [catálogo de herramientas](https://integrations.langchain.com/tools?WT.mc_id=academic-105485-koreyst) que se pueden importar a tu aplicación en la que el LLM puede obtener acceso. Estas son creadas por la comunidad y por el equipo de LangChain. + +Luego puedes definir estas herramientas y pasarlas al `Agent Executor`. + +La visibilidad es otro aspecto importante cuando hablamos de Agentes de IA. Es importante para los desarrolladores de aplicaciones entender qué herramienta está usando el LLM y por qué. Para eso, el equipo de LangChain ha desarrollado LangSmith. + +## AutoGen + +El siguiente marco de trabajo de Agentes de IA que discutiremos es [AutoGen](https://microsoft.github.io/autogen/?WT.mc_id=academic-105485-koreyst). El enfoque principal de AutoGen son las conversaciones. Los agentes son tanto **conversables** como **personalizables**. + +**Conversable -** Los LLMs pueden iniciar y continuar una conversación con otro LLM para completar una tarea. Esto se hace creando `AssistantAgents` y dándoles un mensaje de sistema específico. + +```python + +autogen.AssistantAgent( name="Coder", llm_config=llm_config, ) pm = autogen.AssistantAgent( name="Product_manager", system_message="Creative in software product ideas.", llm_config=llm_config, ) + +``` + +**Personalizable** - Los agentes pueden definirse no solo como LLMs, sino como un usuario o una herramienta. Como desarrollador, puedes definir un `UserProxyAgent` que es responsable de interactuar con el usuario para obtener retroalimentación en la realización de una tarea. Esta retroalimentación puede continuar la ejecución de la tarea o detenerla. + +```python +user_proxy = UserProxyAgent(name="user_proxy") +``` + +### Estado y Herramientas + +Para cambiar y gestionar el estado, un agente asistente genera código Python para completar la tarea. + +Aquí hay un ejemplo del proceso: + +![AutoGen](../../../translated_images/autogen.png?WT.45c9474fbd6109577f4363559f022554e796000ea2d677b80021b00e6ca0d869.es.mc_id=academic-105485-koreyst) + +#### LLM Definido con un Mensaje de Sistema + +```python +system_message="For weather related tasks, only use the functions you have been provided with. Reply TERMINATE when the task is done." +``` + +Este mensaje del sistema dirige a este LLM específico a qué funciones son relevantes para su tarea. Recuerda, con AutoGen puedes tener múltiples AssistantAgents definidos con diferentes mensajes del sistema. + +#### El Chat es Iniciado por el Usuario + +```python +user_proxy.initiate_chat( chatbot, message="I am planning a trip to NYC next week, can you help me pick out what to wear? ", ) + +``` + +Este mensaje del user_proxy (Humano) es lo que iniciará el proceso del Agente para explorar las posibles funciones que debería ejecutar. + +#### La Función es Ejecutada + +```bash +chatbot (to user_proxy): + +***** Suggested tool Call: get_weather ***** Arguments: {"location":"New York City, NY","time_periond:"7","temperature_unit":"Celsius"} ******************************************************** -------------------------------------------------------------------------------- + +>>>>>>>> EXECUTING FUNCTION get_weather... user_proxy (to chatbot): ***** Response from calling function "get_weather" ***** 112.22727272727272 EUR **************************************************************** + +``` + +Una vez que el chat inicial es procesado, el Agente enviará la herramienta sugerida para llamar. En este caso, es una función llamada `get_weather`. Depending on your configuration, this function can be automatically executed and read by the Agent or can be executed based on user input. + +You can find a list of [AutoGen code samples](https://microsoft.github.io/autogen/docs/Examples/?WT.mc_id=academic-105485-koreyst) to further explore how to get started building. + +## Taskweaver + +The next agent framework we will explore is [Taskweaver](https://microsoft.github.io/TaskWeaver/?WT.mc_id=academic-105485-koreyst). It is known as a "code-first" agent because instead of working strictly with `strings` , it can work with DataFrames in Python. This becomes extremely useful for data analysis and generation tasks. This can be things like creating graphs and charts or generating random numbers. + +### State and Tools + +To manage the state of the conversation, TaskWeaver uses the concept of a `Planner`. The `Planner` is a LLM that takes the request from the users and maps out the tasks that need to be completed to fulfill this request. + +To complete the tasks the `Planner` is exposed to the collection of tools called `Plugins`. Esto puede ser clases de Python o un intérprete de código general. Estos plugins se almacenan como incrustaciones para que el LLM pueda buscar mejor el plugin correcto. + +![Taskweaver](../../../translated_images/taskweaver.png?WT.c5d336793941a5af0d2489ad6d88a03f09557bd5ca68a954f1ddaa3d9f1ecc3b.es.mc_id=academic-105485-koreyst) + +Aquí hay un ejemplo de un plugin para manejar la detección de anomalías: + +```python +class AnomalyDetectionPlugin(Plugin): def __call__(self, df: pd.DataFrame, time_col_name: str, value_col_name: str): +``` + +El código se verifica antes de ejecutarse. Otra característica para gestionar el contexto en Taskweaver es `experience`. Experience allows for the context of a conversation to be stored over to the long term in a YAML file. This can be configured so that the LLM improves over time on certain tasks given that it is exposed to prior conversations. + +## JARVIS + +The last agent framework we will explore is [JARVIS](https://github.com/microsoft/JARVIS?tab=readme-ov-file?WT.mc_id=academic-105485-koreyst). What makes JARVIS unique is that it uses an LLM to manage the `state` de la conversación y el `tools` son otros modelos de IA. Cada uno de los modelos de IA son modelos especializados que realizan ciertas tareas como detección de objetos, transcripción o subtitulado de imágenes. + +![JARVIS](../../../translated_images/jarvis.png?WT.f12468c52a0c4848aeed51606a0e53a36eb38c65cc6c821597ea4dcaad03d1a3.es.mc_id=academic-105485-koreyst) + +El LLM, siendo un modelo de propósito general, recibe la solicitud del usuario e identifica la tarea específica y cualquier argumento/dato que se necesite para completar la tarea. + +```python +[{"task": "object-detection", "id": 0, "dep": [-1], "args": {"image": "e1.jpg" }}] +``` + +El LLM luego formatea la solicitud de una manera que el modelo de IA especializado pueda interpretar, como JSON. Una vez que el modelo de IA ha devuelto su predicción basada en la tarea, el LLM recibe la respuesta. + +Si se requieren múltiples modelos para completar la tarea, también interpretará la respuesta de esos modelos antes de reunirlos para generar la respuesta al usuario. + +El ejemplo a continuación muestra cómo funcionaría esto cuando un usuario solicita una descripción y conteo de los objetos en una imagen: + +## Tarea + +Para continuar tu aprendizaje de Agentes de IA puedes construir con AutoGen: + +- Una aplicación que simula una reunión de negocios con diferentes departamentos de una startup educativa. +- Crear mensajes de sistema que guíen a los LLMs en la comprensión de diferentes personalidades y prioridades, y permitan al usuario presentar una nueva idea de producto. +- El LLM debería entonces generar preguntas de seguimiento de cada departamento para refinar y mejorar la presentación y la idea del producto. + +## El aprendizaje no se detiene aquí, continúa el viaje + +Después de completar esta lección, revisa nuestra [colección de Aprendizaje de IA Generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para seguir mejorando tus conocimientos de IA Generativa. + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática por inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas 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 humana profesional. No somos responsables de ningún 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/18-fine-tuning/README.md b/translations/es/18-fine-tuning/README.md new file mode 100644 index 000000000..8fa1b8304 --- /dev/null +++ b/translations/es/18-fine-tuning/README.md @@ -0,0 +1,99 @@ +[![Modelos de Código Abierto](../../../translated_images/18-lesson-banner.png?WT.73626ba24f59a39704c5137a18c9de8b23179ea0e1ace42c97e02f0310adcee0.es.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson18-gh?WT.mc_id=academic-105485-koreyst) + +# Ajuste fino de tu LLM + +Usar modelos de lenguaje grande para construir aplicaciones de IA generativa conlleva nuevos desafíos. Un problema clave es asegurar la calidad de la respuesta (precisión y relevancia) en el contenido generado por el modelo para una solicitud dada por el usuario. En lecciones anteriores, discutimos técnicas como la ingeniería de prompts y la generación aumentada por recuperación que intentan resolver el problema _modificando la entrada del prompt_ al modelo existente. + +En la lección de hoy, discutimos una tercera técnica, **ajuste fino**, que intenta abordar el desafío _reentrenando el modelo en sí_ con datos adicionales. Vamos a profundizar en los detalles. + +## Objetivos de Aprendizaje + +Esta lección introduce el concepto de ajuste fino para modelos de lenguaje preentrenados, explora los beneficios y desafíos de este enfoque, y proporciona orientación sobre cuándo y cómo usar el ajuste fino para mejorar el rendimiento de tus modelos de IA generativa. + +Al final de esta lección, deberías poder responder las siguientes preguntas: + +- ¿Qué es el ajuste fino para modelos de lenguaje? +- ¿Cuándo y por qué es útil el ajuste fino? +- ¿Cómo puedo ajustar un modelo preentrenado? +- ¿Cuáles son las limitaciones del ajuste fino? + +¿Listo? Vamos a comenzar. + +## Guía Ilustrada + +¿Quieres tener una visión general de lo que cubriremos antes de profundizar? Echa un vistazo a esta guía ilustrada que describe el viaje de aprendizaje para esta lección: desde aprender los conceptos básicos y la motivación para el ajuste fino, hasta entender el proceso y las mejores prácticas para ejecutar la tarea de ajuste fino. Este es un tema fascinante para explorar, así que no olvides visitar la página de [Recursos](./RESOURCES.md?WT.mc_id=academic-105485-koreyst) para obtener enlaces adicionales que apoyen tu viaje de aprendizaje autodirigido. + +![Guía Ilustrada para el Ajuste Fino de Modelos de Lenguaje](../../../translated_images/18-fine-tuning-sketchnote.png?WT.6cca0798e805b67b1f22beaba7478f40066f3a2879380a0e27dbc70ac1dc7832.es.mc_id=academic-105485-koreyst) + +## ¿Qué es el ajuste fino para modelos de lenguaje? + +Por definición, los modelos de lenguaje grandes están _preentrenados_ en grandes cantidades de texto obtenidas de diversas fuentes, incluido internet. Como hemos aprendido en lecciones anteriores, necesitamos técnicas como la _ingeniería de prompts_ y la _generación aumentada por recuperación_ para mejorar la calidad de las respuestas del modelo a las preguntas del usuario ("prompts"). + +Una técnica popular de ingeniería de prompts implica dar al modelo más orientación sobre lo que se espera en la respuesta, ya sea proporcionando _instrucciones_ (orientación explícita) o _dándole algunos ejemplos_ (orientación implícita). Esto se conoce como _aprendizaje de pocos disparos_, pero tiene dos limitaciones: + +- Los límites de tokens del modelo pueden restringir el número de ejemplos que puedes dar y limitar la efectividad. +- Los costos de tokens del modelo pueden hacer que sea costoso agregar ejemplos a cada prompt y limitar la flexibilidad. + +El ajuste fino es una práctica común en los sistemas de aprendizaje automático donde tomamos un modelo preentrenado y lo reentrenamos con nuevos datos para mejorar su rendimiento en una tarea específica. En el contexto de los modelos de lenguaje, podemos ajustar el modelo preentrenado _con un conjunto curado de ejemplos para una tarea o dominio de aplicación dado_ para crear un **modelo personalizado** que puede ser más preciso y relevante para esa tarea o dominio específico. Un beneficio secundario del ajuste fino es que también puede reducir el número de ejemplos necesarios para el aprendizaje de pocos disparos, reduciendo el uso de tokens y los costos relacionados. + +## ¿Cuándo y por qué deberíamos ajustar los modelos? + +En _este_ contexto, cuando hablamos de ajuste fino, nos referimos al ajuste fino **supervisado**, donde el reentrenamiento se realiza **agregando nuevos datos** que no formaban parte del conjunto de datos de entrenamiento original. Esto es diferente de un enfoque de ajuste fino no supervisado donde el modelo se reentrena en los datos originales, pero con diferentes hiperparámetros. + +Lo clave a recordar es que el ajuste fino es una técnica avanzada que requiere cierto nivel de experiencia para obtener los resultados deseados. Si se hace incorrectamente, puede no proporcionar las mejoras esperadas e incluso puede degradar el rendimiento del modelo para tu dominio objetivo. + +Entonces, antes de aprender "cómo" ajustar modelos de lenguaje, necesitas saber "por qué" deberías tomar este camino y "cuándo" comenzar el proceso de ajuste fino. Comienza preguntándote estas preguntas: + +- **Caso de Uso**: ¿Cuál es tu _caso de uso_ para el ajuste fino? ¿Qué aspecto del modelo preentrenado actual deseas mejorar? +- **Alternativas**: ¿Has probado _otras técnicas_ para lograr los resultados deseados? Úsalas para crear una línea base para la comparación. + - Ingeniería de prompts: Prueba técnicas como el prompting de pocos disparos con ejemplos de respuestas relevantes. Evalúa la calidad de las respuestas. + - Generación Aumentada por Recuperación: Intenta aumentar los prompts con resultados de consulta recuperados buscando en tus datos. Evalúa la calidad de las respuestas. +- **Costos**: ¿Has identificado los costos para el ajuste fino? + - Ajustabilidad: ¿está disponible el modelo preentrenado para el ajuste fino? + - Esfuerzo: para preparar datos de entrenamiento, evaluar y refinar el modelo. + - Computación: para ejecutar trabajos de ajuste fino y desplegar el modelo ajustado + - Datos: acceso a ejemplos de calidad suficiente para el impacto del ajuste fino +- **Beneficios**: ¿Has confirmado los beneficios del ajuste fino? + - Calidad: ¿el modelo ajustado superó la línea base? + - Costo: ¿reduce el uso de tokens simplificando los prompts? + - Extensibilidad: ¿puedes reutilizar el modelo base para nuevos dominios? + +Al responder estas preguntas, deberías poder decidir si el ajuste fino es el enfoque correcto para tu caso de uso. Idealmente, el enfoque es válido solo si los beneficios superan los costos. Una vez que decides proceder, es momento de pensar en _cómo_ puedes ajustar el modelo preentrenado. + +¿Quieres obtener más información sobre el proceso de toma de decisiones? Mira [Ajustar o no ajustar](https://www.youtube.com/watch?v=0Jo-z-MFxJs) + +## ¿Cómo podemos ajustar un modelo preentrenado? + +Para ajustar un modelo preentrenado, necesitas tener: + +- un modelo preentrenado para ajustar +- un conjunto de datos para usar en el ajuste fino +- un entorno de entrenamiento para ejecutar el trabajo de ajuste fino +- un entorno de alojamiento para desplegar el modelo ajustado + +## Ajuste Fino en Acción + +Los siguientes recursos proporcionan tutoriales paso a paso para guiarte a través de un ejemplo real usando un modelo seleccionado con un conjunto de datos curado. Para trabajar a través de estos tutoriales, necesitas una cuenta en el proveedor específico, junto con acceso al modelo y conjuntos de datos relevantes. + +| Proveedor | Tutorial | Descripción | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| OpenAI | [Cómo ajustar modelos de chat](https://github.com/openai/openai-cookbook/blob/main/examples/How_to_finetune_chat_models.ipynb?WT.mc_id=academic-105485-koreyst) | Aprende a ajustar un `gpt-35-turbo` para un dominio específico ("asistente de recetas") preparando datos de entrenamiento, ejecutando el trabajo de ajuste fino y usando el modelo ajustado para inferencia. | +| Azure OpenAI | [Tutorial de ajuste fino de GPT 3.5 Turbo](https://learn.microsoft.com/azure/ai-services/openai/tutorials/fine-tune?tabs=python-new%2Ccommand-line?WT.mc_id=academic-105485-koreyst) | Aprende a ajustar un modelo `gpt-35-turbo-0613` **en Azure** tomando pasos para crear y cargar datos de entrenamiento, ejecutar el trabajo de ajuste fino. Desplegar y usar el nuevo modelo. | +| Hugging Face | [Ajuste fino de LLMs con Hugging Face](https://www.philschmid.de/fine-tune-llms-in-2024-with-trl?WT.mc_id=academic-105485-koreyst) | Esta publicación de blog te guía a través del ajuste fino de un _LLM abierto_ (ej: `CodeLlama 7B`) usando la biblioteca [transformers](https://huggingface.co/docs/transformers/index?WT.mc_id=academic-105485-koreyst) y [Aprendizaje por Refuerzo de Transformadores (TRL)](https://huggingface.co/docs/trl/index?WT.mc_id=academic-105485-koreyst]) con conjuntos de datos abiertos en Hugging Face. | +| | | | +| 🤗 AutoTrain | [Ajuste fino de LLMs con AutoTrain](https://github.com/huggingface/autotrain-advanced/?WT.mc_id=academic-105485-koreyst) | AutoTrain (o AutoTrain Advanced) es una biblioteca de Python desarrollada por Hugging Face que permite el ajuste fino para muchas tareas diferentes, incluido el ajuste fino de LLM. AutoTrain es una solución sin código y el ajuste fino se puede hacer en tu propia nube, en Hugging Face Spaces o localmente. Soporta tanto una interfaz gráfica basada en web, CLI y entrenamiento a través de archivos de configuración yaml. | + +## Asignación + +Selecciona uno de los tutoriales anteriores y sigue los pasos. _Podemos replicar una versión de estos tutoriales en Jupyter Notebooks en este repositorio solo para referencia. Por favor, usa las fuentes originales directamente para obtener las versiones más recientes_. + +## ¡Gran Trabajo! Continúa tu Aprendizaje. + +Después de completar esta lección, visita nuestra [colección de Aprendizaje de IA Generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para seguir mejorando tu conocimiento en IA Generativa. + +¡Felicitaciones! Has completado la lección final de la serie v2 para este curso. No dejes de aprender y construir. **Consulta la página de [RECURSOS](RESOURCES.md?WT.mc_id=academic-105485-koreyst) para una lista de sugerencias adicionales solo para este tema. + +Nuestra serie de lecciones v1 también ha sido actualizada con más asignaciones y conceptos. Así que tómate un minuto para refrescar tu conocimiento, y por favor [comparte tus preguntas y comentarios](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst) para ayudarnos a mejorar estas lecciones para la comunidad. + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas 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 ningún 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/18-fine-tuning/RESOURCES.md b/translations/es/18-fine-tuning/RESOURCES.md new file mode 100644 index 000000000..42280be93 --- /dev/null +++ b/translations/es/18-fine-tuning/RESOURCES.md @@ -0,0 +1,40 @@ +# Recursos Para Aprendizaje Autodidacta + +La lección fue construida utilizando una serie de recursos fundamentales de OpenAI y Azure OpenAI como referencias para la terminología y los tutoriales. Aquí hay una lista no exhaustiva, para tus propias jornadas de aprendizaje autodidacta. + +## 1. Recursos Primarios + +| Título/Enlace | Descripción | +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [Fine-tuning with OpenAI Models](https://platform.openai.com/docs/guides/fine-tuning?WT.mc_id=academic-105485-koreyst) | El ajuste fino mejora el aprendizaje con pocos ejemplos al entrenar con muchos más ejemplos de los que caben en el prompt, ahorrando costos, mejorando la calidad de respuesta y permitiendo solicitudes de menor latencia. **Obtén una visión general del ajuste fino de OpenAI.** | +| [What is Fine-Tuning with Azure OpenAI?](https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations#what-is-fine-tuning-with-azure-openai?WT.mc_id=academic-105485-koreyst) | Comprende **qué es el ajuste fino (concepto)**, por qué deberías considerarlo (problema motivador), qué datos usar (entrenamiento) y cómo medir la calidad. | +| [Customize a model with fine-tuning](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython&pivots=programming-language-studio#continuous-fine-tuning?WT.mc_id=academic-105485-koreyst) | El Servicio de Azure OpenAI te permite adaptar nuestros modelos a tus conjuntos de datos personales usando el ajuste fino. Aprende **cómo ajustar finamente (proceso)** modelos seleccionados usando Azure AI Studio, Python SDK o REST API. | +| [Recommendations for LLM fine-tuning](https://learn.microsoft.com/ai/playbook/technology-guidance/generative-ai/working-with-llms/fine-tuning-recommend?WT.mc_id=academic-105485-koreyst) | Los LLMs pueden no funcionar bien en dominios, tareas o conjuntos de datos específicos, o pueden producir resultados inexactos o engañosos. **¿Cuándo deberías considerar el ajuste fino** como una posible solución a esto? | +| [Continuous Fine Tuning](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython&pivots=programming-language-studio#continuous-fine-tuning?WT.mc_id=academic-105485-koreyst) | El ajuste fino continuo es el proceso iterativo de seleccionar un modelo ya ajustado finamente como modelo base y **ajustarlo finamente aún más** en nuevos conjuntos de ejemplos de entrenamiento. | +| [Fine-tuning and function calling](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning-functions?WT.mc_id=academic-105485-koreyst) | Ajustar finamente tu modelo **con ejemplos de llamadas a funciones** puede mejorar la salida del modelo al obtener resultados más precisos y consistentes, con respuestas formateadas de manera similar y ahorro de costos. | +| [Fine-tuning Models: Azure OpenAI Guidance](https://learn.microsoft.com/azure/ai-services/openai/concepts/models#fine-tuning-models?WT.mc_id=academic-105485-koreyst) | Consulta esta tabla para entender **qué modelos se pueden ajustar finamente** en Azure OpenAI, y en qué regiones están disponibles. Consulta sus límites de tokens y fechas de expiración de los datos de entrenamiento si es necesario. | +| [To Fine Tune or Not To Fine Tune? That is the Question](https://learn.microsoft.com/shows/ai-show/to-fine-tune-or-not-fine-tune-that-is-the-question?WT.mc_id=academic-105485-koreyst) | Este episodio de 30 minutos de **Oct 2023** del AI Show discute beneficios, desventajas y perspectivas prácticas que te ayudarán a tomar esta decisión. | +| [Getting Started With LLM Fine-Tuning](https://learn.microsoft.com/ai/playbook/technology-guidance/generative-ai/working-with-llms/fine-tuning?WT.mc_id=academic-105485-koreyst) | Este recurso del **AI Playbook** te guía a través de los requisitos de datos, el formato, el ajuste fino de hiperparámetros y los desafíos/limitaciones que deberías conocer. | +| **Tutorial**: [Azure OpenAI GPT3.5 Turbo Fine-Tuning](https://learn.microsoft.com/azure/ai-services/openai/tutorials/fine-tune?tabs=python%2Ccommand-line?WT.mc_id=academic-105485-koreyst) | Aprende a crear un conjunto de datos de ajuste fino de muestra, prepararte para el ajuste fino, crear un trabajo de ajuste fino y desplegar el modelo ajustado finamente en Azure. | +| **Tutorial**: [Fine-tune a Llama 2 model in Azure AI Studio](https://learn.microsoft.com/azure/ai-studio/how-to/fine-tune-model-llama?WT.mc_id=academic-105485-koreyst) | Azure AI Studio te permite adaptar modelos de lenguaje grande a tus conjuntos de datos personales _usando un flujo de trabajo basado en UI adecuado para desarrolladores de bajo código_. Mira este ejemplo. | +| **Tutorial**:[Fine-tune Hugging Face models for a single GPU on Azure](https://learn.microsoft.com/azure/databricks/machine-learning/train-model/huggingface/fine-tune-model?WT.mc_id=academic-105485-koreyst) | Este artículo describe cómo ajustar finamente un modelo de Hugging Face con la biblioteca de transformadores de Hugging Face en una sola GPU con Azure DataBricks + bibliotecas Hugging Face Trainer. | +| **Training:** [Fine-tune a foundation model with Azure Machine Learning](https://learn.microsoft.com/training/modules/finetune-foundation-model-with-azure-machine-learning/?WT.mc_id=academic-105485-koreyst) | El catálogo de modelos en Azure Machine Learning ofrece muchos modelos de código abierto que puedes ajustar finamente para tu tarea específica. Prueba este módulo que es [del Camino de Aprendizaje de Generative AI de AzureML](https://learn.microsoft.com/training/paths/work-with-generative-models-azure-machine-learning/?WT.mc_id=academic-105485-koreyst). | +| **Tutorial:** [Azure OpenAI Fine-Tuning](https://docs.wandb.ai/guides/integrations/azure-openai-fine-tuning?WT.mc_id=academic-105485-koreyst) | Ajustar finamente modelos GPT-3.5 o GPT-4 en Microsoft Azure usando W&B permite un seguimiento y análisis detallado del rendimiento del modelo. Esta guía extiende los conceptos de la guía de Ajuste Fino de OpenAI con pasos y características específicas para Azure OpenAI. | +| | | + +## 2. Recursos Secundarios + +Esta sección captura recursos adicionales que valen la pena explorar, pero que no tuvimos tiempo de cubrir en esta lección. Pueden ser cubiertos en una lección futura, o como una opción de tarea secundaria, en una fecha posterior. Por ahora, úsalos para construir tu propia experiencia y conocimiento sobre este tema. + +| Título/Enlace | Descripción | +| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **OpenAI Cookbook**: [Data preparation and analysis for chat model fine-tuning](https://cookbook.openai.com/examples/chat_finetuning_data_prep?WT.mc_id=academic-105485-koreyst) | Este notebook sirve como una herramienta para preprocesar y analizar el conjunto de datos de chat usado para el ajuste fino de un modelo de chat. Verifica errores de formato, proporciona estadísticas básicas y estima el conteo de tokens para los costos de ajuste fino. Ver: [Fine-tuning method for gpt-3.5-turbo](https://platform.openai.com/docs/guides/fine-tuning?WT.mc_id=academic-105485-koreyst). | +| **OpenAI Cookbook**: [Fine-Tuning for Retrieval Augmented Generation (RAG) with Qdrant](https://cookbook.openai.com/examples/fine-tuned_qa/ft_retrieval_augmented_generation_qdrant?WT.mc_id=academic-105485-koreyst) | El objetivo de este notebook es guiarte a través de un ejemplo comprensivo de cómo ajustar finamente modelos de OpenAI para la Generación Aumentada por Recuperación (RAG). También integraremos Qdrant y el Aprendizaje con Pocos Ejemplos para mejorar el rendimiento del modelo y reducir fabricaciones. | +| **OpenAI Cookbook**: [Fine-tuning GPT with Weights & Biases](https://cookbook.openai.com/examples/third_party/gpt_finetuning_with_wandb?WT.mc_id=academic-105485-koreyst) | Weights & Biases (W&B) es la plataforma de desarrolladores de IA, con herramientas para entrenar modelos, ajustar finamente modelos y aprovechar modelos base. Lee su guía de [OpenAI Fine-Tuning](https://docs.wandb.ai/guides/integrations/openai?WT.mc_id=academic-105485-koreyst) primero, luego prueba el ejercicio del Cookbook. | +| **Community Tutorial** [Phinetuning 2.0](https://huggingface.co/blog/g-ronimo/phinetuning?WT.mc_id=academic-105485-koreyst) - ajuste fino para Modelos de Lenguaje Pequeños | Conoce a [Phi-2](https://www.microsoft.com/research/blog/phi-2-the-surprising-power-of-small-language-models/?WT.mc_id=academic-105485-koreyst), el nuevo modelo pequeño de Microsoft, notablemente poderoso pero compacto. Este tutorial te guiará a través del ajuste fino de Phi-2, demostrando cómo construir un conjunto de datos único y ajustar finamente el modelo usando QLoRA. | +| **Hugging Face Tutorial** [How to Fine-Tune LLMs in 2024 with Hugging Face](https://www.philschmid.de/fine-tune-llms-in-2024-with-trl?WT.mc_id=academic-105485-koreyst) | Esta publicación de blog te guía sobre cómo ajustar finamente LLMs abiertos usando Hugging Face TRL, Transformers y conjuntos de datos en 2024. Defines un caso de uso, configuras un entorno de desarrollo, preparas un conjunto de datos, ajustas finamente el modelo, lo pruebas y evalúas, y luego lo despliegas en producción. | +| **Hugging Face: [AutoTrain Advanced](https://github.com/huggingface/autotrain-advanced?WT.mc_id=academic-105485-koreyst)** | Trae un entrenamiento y despliegues más rápidos y fáciles de [modelos de aprendizaje automático de última generación](https://twitter.com/abhi1thakur/status/1755167674894557291?WT.mc_id=academic-105485-koreyst). El repositorio tiene tutoriales amigables para Colab con orientación en video de YouTube, para ajuste fino. **Refleja la reciente actualización de [local-first](https://twitter.com/abhi1thakur/status/1750828141805777057?WT.mc_id=academic-105485-koreyst)**. Lee la [documentación de AutoTrain](https://huggingface.co/autotrain?WT.mc_id=academic-105485-koreyst). | +| | | + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. 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 la traducción profesional humana. No nos hacemos responsables de malentendidos o interpretaciones erróneas que surjan del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/19-slm/README.md b/translations/es/19-slm/README.md new file mode 100644 index 000000000..54700d9e2 --- /dev/null +++ b/translations/es/19-slm/README.md @@ -0,0 +1,133 @@ +```markdown +# Introducción a los Modelos de Lenguaje Pequeños para IA Generativa para Principiantes + +La IA generativa es un campo fascinante de la inteligencia artificial que se centra en crear sistemas capaces de generar nuevo contenido. Este contenido puede variar desde texto e imágenes hasta música e incluso entornos virtuales completos. Una de las aplicaciones más emocionantes de la IA generativa es en el ámbito de los modelos de lenguaje. + +## ¿Qué son los Modelos de Lenguaje Pequeños? + +Un Modelo de Lenguaje Pequeño (SLM) representa una variante reducida de un modelo de lenguaje grande (LLM), aprovechando muchos de los principios arquitectónicos y técnicas de los LLM, mientras exhibe una huella computacional significativamente reducida. Los SLM son un subconjunto de modelos de lenguaje diseñados para generar texto similar al humano. A diferencia de sus contrapartes más grandes, como GPT-4, los SLM son más compactos y eficientes, lo que los hace ideales para aplicaciones donde los recursos computacionales son limitados. A pesar de su menor tamaño, aún pueden realizar una variedad de tareas. Típicamente, los SLM se construyen comprimiendo o destilando LLM, con el objetivo de retener una porción sustancial de la funcionalidad original del modelo y sus capacidades lingüísticas. Esta reducción en el tamaño del modelo disminuye la complejidad general, haciendo que los SLM sean más eficientes en términos de uso de memoria y requisitos computacionales. A pesar de estas optimizaciones, los SLM aún pueden realizar una amplia gama de tareas de procesamiento de lenguaje natural (NLP): + +- Generación de Texto: Creación de oraciones o párrafos coherentes y contextualmente relevantes. +- Completación de Texto: Predicción y finalización de oraciones basadas en un estímulo dado. +- Traducción: Conversión de texto de un idioma a otro. +- Resumen: Condensación de textos largos en resúmenes más cortos y digeribles. + +Aunque con algunos compromisos en el rendimiento o profundidad de comprensión en comparación con sus contrapartes más grandes. + +## ¿Cómo Funcionan los Modelos de Lenguaje Pequeños? + +Los SLM se entrenan con grandes cantidades de datos de texto. Durante el entrenamiento, aprenden los patrones y estructuras del lenguaje, lo que les permite generar texto que es tanto gramaticalmente correcto como contextualmente apropiado. El proceso de entrenamiento involucra: + +- Recolección de Datos: Reunir grandes conjuntos de datos de texto de diversas fuentes. +- Preprocesamiento: Limpiar y organizar los datos para hacerlos adecuados para el entrenamiento. +- Entrenamiento: Utilizar algoritmos de aprendizaje automático para enseñar al modelo cómo entender y generar texto. +- Ajuste Fino: Ajustar el modelo para mejorar su rendimiento en tareas específicas. + +El desarrollo de los SLM se alinea con la creciente necesidad de modelos que puedan ser desplegados en entornos con restricciones de recursos, como dispositivos móviles o plataformas de computación en el borde, donde los LLM a gran escala pueden ser poco prácticos debido a sus altas demandas de recursos. Al centrarse en la eficiencia, los SLM equilibran el rendimiento con la accesibilidad, permitiendo una aplicación más amplia en diversos dominios. + +![slm](../../../translated_images/slm.png?WT.85221b66c3ce1b5e21e84c783c7ba31848501cd5c9557bb7fdf13173edafd675.es.mc_id=academic-105485-koreyst) + +## Objetivos de Aprendizaje + +En esta lección, esperamos introducir el conocimiento de los SLM y combinarlos con Microsoft Phi-3 para aprender diferentes escenarios en contenido de texto, visión y MoE. Al final de esta lección, deberías poder responder las siguientes preguntas: + +- ¿Qué es un SLM? +- ¿Cuál es la diferencia entre SLM y LLM? +- ¿Qué es la Familia Microsoft Phi-3/3.5? +- ¿Cómo inferir la Familia Microsoft Phi-3/3.5? + +¿Listo? Comencemos. + +## Las Distinciones entre Modelos de Lenguaje Grandes (LLMs) y Modelos de Lenguaje Pequeños (SLMs) + +Tanto los LLM como los SLM se construyen sobre principios fundamentales del aprendizaje automático probabilístico, siguiendo enfoques similares en su diseño arquitectónico, metodologías de entrenamiento, procesos de generación de datos y técnicas de evaluación de modelos. Sin embargo, varios factores clave diferencian estos dos tipos de modelos. + +## Aplicaciones de los Modelos de Lenguaje Pequeños + +Los SLM tienen una amplia gama de aplicaciones, incluyendo: + +- Chatbots: Proporcionar soporte al cliente e interactuar con usuarios de manera conversacional. +- Creación de Contenido: Asistir a escritores generando ideas o incluso redactando artículos completos. +- Educación: Ayudar a estudiantes con tareas de escritura o en el aprendizaje de nuevos idiomas. +- Accesibilidad: Crear herramientas para individuos con discapacidades, como sistemas de texto a voz. + +**Tamaño** + +Una distinción principal entre LLM y SLM radica en la escala de los modelos. Los LLM, como ChatGPT (GPT-4), pueden comprender aproximadamente 1.76 billones de parámetros, mientras que los SLM de código abierto como Mistral 7B están diseñados con significativamente menos parámetros, aproximadamente 7 mil millones. Esta disparidad se debe principalmente a diferencias en la arquitectura del modelo y los procesos de entrenamiento. Por ejemplo, ChatGPT emplea un mecanismo de auto-atención dentro de un marco de codificador-decodificador, mientras que Mistral 7B utiliza atención de ventana deslizante, lo que permite un entrenamiento más eficiente dentro de un modelo solo de decodificador. Esta variación arquitectónica tiene implicaciones profundas para la complejidad y el rendimiento de estos modelos. + +**Comprensión** + +Los SLM están típicamente optimizados para el rendimiento dentro de dominios específicos, lo que los hace altamente especializados pero potencialmente limitados en su capacidad para proporcionar una comprensión contextual amplia en múltiples campos de conocimiento. En contraste, los LLM buscan simular la inteligencia similar a la humana a un nivel más integral. Entrenados en vastos y diversos conjuntos de datos, los LLM están diseñados para desempeñarse bien en una variedad de dominios, ofreciendo mayor versatilidad y adaptabilidad. En consecuencia, los LLM son más adecuados para una gama más amplia de tareas posteriores, como el procesamiento de lenguaje natural y la programación. + +**Computación** + +El entrenamiento y despliegue de los LLM son procesos intensivos en recursos, a menudo requiriendo una infraestructura computacional significativa, incluyendo grandes clústeres de GPU. Por ejemplo, entrenar un modelo como ChatGPT desde cero puede necesitar miles de GPUs durante períodos extendidos. En contraste, los SLM, con su menor cantidad de parámetros, son más accesibles en términos de recursos computacionales. Modelos como Mistral 7B pueden ser entrenados y ejecutados en máquinas locales equipadas con capacidades de GPU moderadas, aunque el entrenamiento aún demanda varias horas en múltiples GPUs. + +**Sesgo** + +El sesgo es un problema conocido en los LLM, principalmente debido a la naturaleza de los datos de entrenamiento. Estos modelos a menudo dependen de datos brutos, disponibles abiertamente en internet, que pueden subrepresentar o mal representar ciertos grupos, introducir etiquetado erróneo o reflejar sesgos lingüísticos influenciados por dialecto, variaciones geográficas y reglas gramaticales. Además, la complejidad de las arquitecturas de LLM puede inadvertidamente exacerbar el sesgo, lo que puede pasar desapercibido sin un ajuste fino cuidadoso. Por otro lado, los SLM, al ser entrenados en conjuntos de datos más restringidos y específicos de dominio, son inherentemente menos susceptibles a tales sesgos, aunque no son inmunes a ellos. + +**Inferencia** + +El tamaño reducido de los SLM les otorga una ventaja significativa en términos de velocidad de inferencia, permitiéndoles generar salidas de manera eficiente en hardware local sin la necesidad de procesamiento paralelo extenso. En contraste, los LLM, debido a su tamaño y complejidad, a menudo requieren recursos computacionales paralelos sustanciales para lograr tiempos de inferencia aceptables. La presencia de múltiples usuarios concurrentes ralentiza aún más los tiempos de respuesta de los LLM, especialmente cuando se despliegan a escala. + +En resumen, aunque tanto los LLM como los SLM comparten una base fundamental en el aprendizaje automático, difieren significativamente en términos de tamaño del modelo, requisitos de recursos, comprensión contextual, susceptibilidad al sesgo y velocidad de inferencia. Estas distinciones reflejan su idoneidad respectiva para diferentes casos de uso, siendo los LLM más versátiles pero intensivos en recursos, y los SLM ofreciendo más eficiencia específica de dominio con demandas computacionales reducidas. + +***Nota: En este capítulo, presentaremos SLM utilizando Microsoft Phi-3 / 3.5 como ejemplo.*** + +## Introducción a la Familia Phi-3 / Phi-3.5 + +La Familia Phi-3 / 3.5 se enfoca principalmente en escenarios de aplicación de texto, visión y Agente (MoE): + +### Phi-3 / 3.5 Instruct + +Principalmente para generación de texto, finalización de chat y extracción de información de contenido, etc. + +**Phi-3-mini** + +El modelo de lenguaje de 3.8B está disponible en Microsoft Azure AI Studio, Hugging Face y Ollama. Los modelos Phi-3 superan significativamente a los modelos de lenguaje de igual y mayor tamaño en puntos de referencia clave (ver números de referencia a continuación, números más altos son mejores). Phi-3-mini supera a modelos del doble de su tamaño, mientras que Phi-3-pequeño y Phi-3-mediano superan a modelos más grandes, incluyendo GPT-3.5 + +**Phi-3-pequeño y mediano** + +Con solo 7B de parámetros, Phi-3-pequeño supera a GPT-3.5T en una variedad de puntos de referencia de lenguaje, razonamiento, codificación y matemáticas. El Phi-3-mediano con 14B de parámetros continúa esta tendencia y supera al Gemini 1.0 Pro. + +**Phi-3.5-mini** + +Podemos considerarlo como una actualización de Phi-3-mini. Mientras los parámetros permanecen sin cambios, mejora la capacidad de soportar múltiples idiomas (Soporta más de 20 idiomas: árabe, chino, checo, danés, holandés, inglés, finlandés, francés, alemán, hebreo, húngaro, italiano, japonés, coreano, noruego, polaco, portugués, ruso, español, sueco, tailandés, turco, ucraniano) y agrega un soporte más fuerte para contextos largos. Phi-3.5-mini con 3.8B de parámetros supera a los modelos de lenguaje del mismo tamaño y está a la par con modelos del doble de su tamaño. + +### Phi-3 / 3.5 Visión + +Podemos pensar en el modelo Instruct de Phi-3/3.5 como la capacidad de Phi para entender, y Visión es lo que le da a Phi ojos para entender el mundo. + +**Phi-3-Vision** + +Phi-3-vision, con solo 4.2B de parámetros, continúa esta tendencia y supera a modelos más grandes como Claude-3 Haiku y Gemini 1.0 Pro V en tareas generales de razonamiento visual, OCR y comprensión de tablas y diagramas. + +**Phi-3.5-Vision** + +Phi-3.5-Vision también es una actualización de Phi-3-Vision, agregando soporte para múltiples imágenes. Puedes pensar en ello como una mejora en la visión, no solo puede ver imágenes, sino también videos. Phi-3.5-vision supera a modelos más grandes como Claude-3.5 Sonnet y Gemini 1.5 Flash en tareas de OCR, comprensión de tablas y gráficos y está a la par en tareas generales de razonamiento de conocimiento visual. Soporta entrada de múltiples cuadros, es decir, realiza razonamiento en múltiples imágenes de entrada. + +### Phi-3.5-MoE + +***Mezcla de Expertos (MoE)*** permite que los modelos sean preentrenados con mucho menos cómputo, lo que significa que puedes escalar dramáticamente el tamaño del modelo o conjunto de datos con el mismo presupuesto de cómputo que un modelo denso. En particular, un modelo MoE debería lograr la misma calidad que su contraparte densa mucho más rápido durante el preentrenamiento. Phi-3.5-MoE comprende 16x3.8B módulos de expertos. Phi-3.5-MoE con solo 6.6B de parámetros activos logra un nivel similar de razonamiento, comprensión del lenguaje y matemáticas como modelos mucho más grandes. + +Podemos usar el modelo de la Familia Phi-3/3.5 basado en diferentes escenarios. A diferencia de LLM, puedes desplegar Phi-3/3.5-mini o Phi-3/3.5-Vision en dispositivos de borde. + +## Cómo usar los modelos de la Familia Phi-3/3.5 + +Esperamos usar Phi-3/3.5 en diferentes escenarios. A continuación, usaremos Phi-3/3.5 basado en diferentes escenarios. + +![phi3](../../../translated_images/phi3.png?WT.0d1077c4470f7b6eef536aba4426fa8df26762844164cc3883d455ab5251bad1.es.mc_id=academic-105485-koreyst) + +### Diferencia de inferencia + +API de la Nube + +**Modelos de GitHub** + +Modelos de GitHub +``` + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr 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 humana. No somos responsables de malentendidos o interpretaciones erróneas que surjan del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/20-mistral/README.md b/translations/es/20-mistral/README.md new file mode 100644 index 000000000..d1c3938e5 --- /dev/null +++ b/translations/es/20-mistral/README.md @@ -0,0 +1,350 @@ +# Construyendo con Modelos Mistral + +## Introducción + +Esta lección cubrirá: +- Exploración de los diferentes Modelos Mistral +- Comprensión de los casos de uso y escenarios para cada modelo +- Ejemplos de código que muestran las características únicas de cada modelo. + +## Los Modelos Mistral + +En esta lección, exploraremos 3 diferentes modelos de Mistral: +**Mistral Large**, **Mistral Small** y **Mistral Nemo**. + +Cada uno de estos modelos está disponible de forma gratuita en el mercado de Modelos de Github. El código en este cuaderno usará estos modelos para ejecutar el código. Aquí hay más detalles sobre cómo usar los Modelos de Github para [prototipar con modelos de IA](https://docs.github.com/en/github-models/prototyping-with-ai-models?WT.mc_id=academic-105485-koreyst). + +## Mistral Large 2 (2407) + +Mistral Large 2 es actualmente el modelo insignia de Mistral y está diseñado para uso empresarial. + +El modelo es una mejora del Mistral Large original al ofrecer: +- Ventana de Contexto Más Grande - 128k vs 32k +- Mejor rendimiento en tareas de Matemáticas y Programación - 76.9% de precisión promedio vs 60.4% +- Rendimiento multilingüe aumentado - los idiomas incluyen: inglés, francés, alemán, español, italiano, portugués, neerlandés, ruso, chino, japonés, coreano, árabe e hindi. + +Con estas características, Mistral Large sobresale en: +- *Generación Aumentada por Recuperación (RAG)* - debido a la mayor ventana de contexto +- *Llamada de Funciones* - este modelo tiene llamadas de funciones nativas que permiten la integración con herramientas externas y APIs. Estas llamadas se pueden hacer tanto en paralelo como una tras otra en orden secuencial. +- *Generación de Código* - este modelo destaca en la generación de Python, Java, TypeScript y C++. + +### Ejemplo de RAG usando Mistral Large 2 + +En este ejemplo, estamos usando Mistral Large 2 para ejecutar un patrón RAG sobre un documento de texto. La pregunta está escrita en coreano y pregunta sobre las actividades del autor antes de la universidad. + +Utiliza el modelo de Embeddings de Cohere para crear embeddings del documento de texto así como de la pregunta. Para este ejemplo, utiliza el paquete de Python faiss como un almacén de vectores. + +El mensaje enviado al modelo Mistral incluye tanto las preguntas como los fragmentos recuperados que son similares a la pregunta. El modelo luego proporciona una respuesta en lenguaje natural. + +```python +pip install faiss-cpu +``` + +```python +import requests +import numpy as np +import faiss +import os + +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential +from azure.ai.inference import EmbeddingsClient + +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-large" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = requests.get('https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt') +text = response.text + +chunk_size = 2048 +chunks = [text[i:i + chunk_size] for i in range(0, len(text), chunk_size)] +len(chunks) + +embed_model_name = "cohere-embed-v3-multilingual" + +embed_client = EmbeddingsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token) +) + +embed_response = embed_client.embed( + input=chunks, + model=embed_model_name +) + + + +text_embeddings = [] +for item in embed_response.data: + length = len(item.embedding) + text_embeddings.append(item.embedding) +text_embeddings = np.array(text_embeddings) + + +d = text_embeddings.shape[1] +index = faiss.IndexFlatL2(d) +index.add(text_embeddings) + +question = "저자가 대학에 오기 전에 주로 했던 두 가지 일은 무엇이었나요??" + +question_embedding = embed_client.embed( + input=[question], + model=embed_model_name +) + +question_embeddings = np.array(question_embedding.data[0].embedding) + + +D, I = index.search(question_embeddings.reshape(1, -1), k=2) # distance, index +retrieved_chunks = [chunks[i] for i in I.tolist()[0]] + +prompt = f""" +Context information is below. +--------------------- +{retrieved_chunks} +--------------------- +Given the context information and not prior knowledge, answer the query. +Query: {question} +Answer: +""" + + +chat_response = client.complete( + messages=[ + SystemMessage(content="You are a helpful assistant."), + UserMessage(content=prompt), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(chat_response.choices[0].message.content) +``` + +## Mistral Small + +Mistral Small es otro modelo en la familia de modelos Mistral dentro de la categoría premier/empresarial. Como su nombre lo indica, este modelo es un Modelo de Lenguaje Pequeño (SLM). Las ventajas de usar Mistral Small son que es: +- Económico en comparación con los LLM de Mistral como Mistral Large y NeMo - reducción del 80% en el precio +- Baja latencia - respuesta más rápida en comparación con los LLM de Mistral +- Flexible - se puede desplegar en diferentes entornos con menos restricciones sobre los recursos requeridos. + +Mistral Small es excelente para: +- Tareas basadas en texto como resumen, análisis de sentimientos y traducción. +- Aplicaciones donde se realizan solicitudes frecuentes debido a su rentabilidad +- Tareas de código de baja latencia como revisión y sugerencias de código + +## Comparación entre Mistral Small y Mistral Large + +Para mostrar las diferencias en latencia entre Mistral Small y Large, ejecuta las siguientes celdas. + +Deberías ver una diferencia en los tiempos de respuesta entre 3-5 segundos. También observa las longitudes y el estilo de respuesta sobre el mismo mensaje. + +```python + +import os +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-small" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage(content="You are a helpful coding assistant."), + UserMessage(content="Can you write a Python function to the fizz buzz test?"), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(response.choices[0].message.content) + +``` + +```python + +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential + +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-large" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage(content="You are a helpful coding assistant."), + UserMessage(content="Can you write a Python function to the fizz buzz test?"), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(response.choices[0].message.content) + +``` + +## Mistral NeMo + +En comparación con los otros dos modelos discutidos en esta lección, Mistral NeMo es el único modelo gratuito con una Licencia Apache2. + +Se considera una mejora del LLM de código abierto anterior de Mistral, Mistral 7B. + +Algunas otras características del modelo NeMo son: + +- *Tokenización más eficiente:* Este modelo usa el tokenizador Tekken en lugar del más comúnmente usado tiktoken. Esto permite un mejor rendimiento en más idiomas y código. + +- *Ajuste fino:* El modelo base está disponible para ajuste fino. Esto permite más flexibilidad para casos de uso donde se pueda necesitar ajuste fino. + +- *Llamada de Funciones Nativa* - Al igual que Mistral Large, este modelo ha sido entrenado en la llamada de funciones. Esto lo hace único al ser uno de los primeros modelos de código abierto en hacerlo. + +### Comparación de Tokenizadores + +En este ejemplo, veremos cómo Mistral NeMo maneja la tokenización en comparación con Mistral Large. + +Ambos ejemplos toman el mismo mensaje, pero deberías ver que NeMo devuelve menos tokens en comparación con Mistral Large. + +```bash +pip install mistral-common +``` + +```python +# Import needed packages: +from mistral_common.protocol.instruct.messages import ( + UserMessage, +) +from mistral_common.protocol.instruct.request import ChatCompletionRequest +from mistral_common.protocol.instruct.tool_calls import ( + Function, + Tool, +) +from mistral_common.tokens.tokenizers.mistral import MistralTokenizer + +# Load Mistral tokenizer + +model_name = "open-mistral-nemo " + +tokenizer = MistralTokenizer.from_model(model_name) + +# Tokenize a list of messages +tokenized = tokenizer.encode_chat_completion( + ChatCompletionRequest( + tools=[ + Tool( + function=Function( + name="get_current_weather", + description="Get the current weather", + parameters={ + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "format": { + "type": "string", + "enum": ["celsius", "fahrenheit"], + "description": "The temperature unit to use. Infer this from the users location.", + }, + }, + "required": ["location", "format"], + }, + ) + ) + ], + messages=[ + UserMessage(content="What's the weather like today in Paris"), + ], + model=model_name, + ) +) +tokens, text = tokenized.tokens, tokenized.text + +# Count the number of tokens +print(len(tokens)) +``` + +```python +# Import needed packages: +from mistral_common.protocol.instruct.messages import ( + UserMessage, +) +from mistral_common.protocol.instruct.request import ChatCompletionRequest +from mistral_common.protocol.instruct.tool_calls import ( + Function, + Tool, +) +from mistral_common.tokens.tokenizers.mistral import MistralTokenizer + +# Load Mistral tokenizer + +model_name = "mistral-large-latest" + +tokenizer = MistralTokenizer.from_model(model_name) + +# Tokenize a list of messages +tokenized = tokenizer.encode_chat_completion( + ChatCompletionRequest( + tools=[ + Tool( + function=Function( + name="get_current_weather", + description="Get the current weather", + parameters={ + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "format": { + "type": "string", + "enum": ["celsius", "fahrenheit"], + "description": "The temperature unit to use. Infer this from the users location.", + }, + }, + "required": ["location", "format"], + }, + ) + ) + ], + messages=[ + UserMessage(content="What's the weather like today in Paris"), + ], + model=model_name, + ) +) +tokens, text = tokenized.tokens, tokenized.text + +# Count the number of tokens +print(len(tokens)) +``` + +## El aprendizaje no se detiene aquí, continúa el viaje + +Después de completar esta lección, consulta nuestra [colección de aprendizaje de IA generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para seguir mejorando tus conocimientos en IA Generativa. + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas 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 humana. No nos hacemos responsables de ningún 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/21-meta/README.md b/translations/es/21-meta/README.md new file mode 100644 index 000000000..ef5ecfb56 --- /dev/null +++ b/translations/es/21-meta/README.md @@ -0,0 +1,157 @@ +# Construyendo con los Modelos de la Familia Meta + +## Introducción + +Esta lección cubrirá: + +- Exploración de los dos principales modelos de la familia Meta - Llama 3.1 y Llama 3.2 +- Comprender los casos de uso y escenarios para cada modelo +- Ejemplo de código para mostrar las características únicas de cada modelo + +## La Familia de Modelos Meta + +En esta lección, exploraremos 2 modelos de la familia Meta o "Manada de Llamas" - Llama 3.1 y Llama 3.2 + +Estos modelos vienen en diferentes variantes y están disponibles en el mercado de Modelos de Github. Aquí hay más detalles sobre cómo usar los Modelos de Github para [prototipar con modelos de IA](https://docs.github.com/en/github-models/prototyping-with-ai-models?WT.mc_id=academic-105485-koreyst). + +Variantes del Modelo: +- Llama 3.1 - 70B Instruct +- Llama 3.1 - 405B Instruct +- Llama 3.2 - 11B Vision Instruct +- Llama 3.2 - 90B Vision Instruct + +*Nota: Llama 3 también está disponible en los Modelos de Github, pero no se cubrirá en esta lección* + +## Llama 3.1 + +Con 405 mil millones de parámetros, Llama 3.1 se encuentra en la categoría de LLM de código abierto. + +El modelo es una mejora respecto al lanzamiento anterior de Llama 3 al ofrecer: + +- Ventana de contexto más grande - 128k tokens vs 8k tokens +- Mayor cantidad máxima de tokens de salida - 4096 vs 2048 +- Mejor soporte multilingüe - debido al aumento en los tokens de entrenamiento + +Esto permite que Llama 3.1 maneje casos de uso más complejos al construir aplicaciones GenAI, incluyendo: +- Llamada de Funciones Nativas - la capacidad de llamar herramientas y funciones externas fuera del flujo de trabajo del LLM +- Mejor rendimiento RAG - debido a la ventana de contexto más grande +- Generación de Datos Sintéticos - la capacidad de crear datos efectivos para tareas como el ajuste fino + +### Llamada de Funciones Nativas + +Llama 3.1 ha sido afinado para ser más efectivo al realizar llamadas a funciones o herramientas. También tiene dos herramientas integradas que el modelo puede identificar como necesarias de usar basándose en el aviso del usuario. Estas herramientas son: + +- **Brave Search** - Puede usarse para obtener información actualizada como el clima realizando una búsqueda en la web +- **Wolfram Alpha** - Puede usarse para cálculos matemáticos más complejos, por lo que no es necesario escribir tus propias funciones. + +También puedes crear tus propias herramientas personalizadas que el LLM puede llamar. + +En el ejemplo de código a continuación: + +- Definimos las herramientas disponibles (brave_search, wolfram_alpha) en el aviso del sistema. +- Enviamos un aviso del usuario que pregunta sobre el clima en una cierta ciudad. +- El LLM responderá con una llamada a la herramienta Brave Search que se verá así `<|python_tag|>brave_search.call(query="Stockholm weather")` + +*Nota: Este ejemplo solo realiza la llamada a la herramienta, si deseas obtener los resultados, necesitarás crear una cuenta gratuita en la página de API de Brave y definir la función en sí misma* + +```python +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import AssistantMessage, SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential + +token = os.environ["GITHUB_TOKEN"] +endpoint = "https://models.inference.ai.azure.com" +model_name = "meta-llama-3.1-405b-instruct" + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + + +tool_prompt=f""" +<|begin_of_text|><|start_header_id|>system<|end_header_id|> + +Environment: ipython +Tools: brave_search, wolfram_alpha +Cutting Knowledge Date: December 2023 +Today Date: 23 July 2024 + +You are a helpful assistant<|eot_id|> +""" + +messages = [ + SystemMessage(content=tool_prompt), + UserMessage(content="What is the weather in Stockholm?"), + +] + +response = client.complete(messages=messages, model=model_name) + +print(response.choices[0].message.content) +``` + +## Llama 3.2 + +A pesar de ser un LLM, una limitación que tiene Llama 3.1 es la multimodalidad. Es decir, ser capaz de usar diferentes tipos de entrada como imágenes como avisos y proporcionar respuestas. Esta capacidad es una de las principales características de Llama 3.2. Estas características también incluyen: + +- Multimodalidad - tiene la capacidad de evaluar tanto avisos de texto como de imagen +- Variaciones de tamaño pequeño a mediano (11B y 90B) - esto proporciona opciones de despliegue flexibles, +- Variaciones solo de texto (1B y 3B) - esto permite que el modelo se despliegue en dispositivos de borde/móviles y proporciona baja latencia + +El soporte multimodal representa un gran paso en el mundo de los modelos de código abierto. El ejemplo de código a continuación toma tanto un aviso de imagen como de texto para obtener un análisis de la imagen de Llama 3.2 90B. + +### Soporte Multimodal con Llama 3.2 + +```python +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import ( + SystemMessage, + UserMessage, + TextContentItem, + ImageContentItem, + ImageUrl, + ImageDetailLevel, +) +from azure.core.credentials import AzureKeyCredential + +token = os.environ["GITHUB_TOKEN"] +endpoint = "https://models.inference.ai.azure.com" +model_name = "Llama-3.2-90B-Vision-Instruct" + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage( + content="You are a helpful assistant that describes images in details." + ), + UserMessage( + content=[ + TextContentItem(text="What's in this image?"), + ImageContentItem( + image_url=ImageUrl.load( + image_file="sample.jpg", + image_format="jpg", + detail=ImageDetailLevel.LOW) + ), + ], + ), + ], + model=model_name, +) + +print(response.choices[0].message.content) +``` + +## El aprendizaje no termina aquí, continúa el viaje + +Después de completar esta lección, consulta nuestra [colección de aprendizaje de IA generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para seguir mejorando tu conocimiento en IA Generativa. + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr 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 humana. No somos responsables de ningún 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/CODE_OF_CONDUCT.md b/translations/es/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..7429b9ea6 --- /dev/null +++ b/translations/es/CODE_OF_CONDUCT.md @@ -0,0 +1,12 @@ +# Código de Conducta de Código Abierto de Microsoft + +Este proyecto ha adoptado el [Código de Conducta de Código Abierto de Microsoft](https://opensource.microsoft.com/codeofconduct/). + +Recursos: + +- [Código de Conducta de Código Abierto de Microsoft](https://opensource.microsoft.com/codeofconduct/) +- [Preguntas Frecuentes sobre el Código de Conducta de Microsoft](https://opensource.microsoft.com/codeofconduct/faq/) +- Contacta a [opencode@microsoft.com](mailto:opencode@microsoft.com) si tienes preguntas o inquietudes + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien 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 la traducción profesional humana. No nos hacemos responsables de ningún 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/CONTRIBUTING.md b/translations/es/CONTRIBUTING.md new file mode 100644 index 000000000..4a4362561 --- /dev/null +++ b/translations/es/CONTRIBUTING.md @@ -0,0 +1,131 @@ +# Contribuyendo + +Este proyecto da la bienvenida a contribuciones y sugerencias. La mayoría de las contribuciones requieren que +aceptes un Acuerdo de Licencia para Contribuyentes (CLA) declarando que tienes el derecho de, +y de hecho, nos otorgas los derechos para usar tu contribución. Para más detalles, visita +. + +> Importante: cuando traduzcas texto en este repositorio, asegúrate de no usar traducción automática. Verificaremos las traducciones a través de la comunidad, así que por favor, solo ofrécete como voluntario para traducciones en idiomas en los que seas competente. + +Cuando envíes una solicitud de extracción, un bot de CLA determinará automáticamente si necesitas +proporcionar un CLA y decorará el PR de manera apropiada (por ejemplo, etiqueta, comentario). Simplemente sigue las +instrucciones proporcionadas por el bot. Solo necesitarás hacer esto una vez en todos los repositorios que usen nuestro CLA. + +## Código de Conducta + +Este proyecto ha adoptado el [Código de Conducta de Código Abierto de Microsoft](https://opensource.microsoft.com/codeofconduct/?WT.mc_id=academic-105485-koreyst). +Para más información, lee las [Preguntas Frecuentes sobre el Código de Conducta](https://opensource.microsoft.com/codeofconduct/faq/?WT.mc_id=academic-105485-koreyst) o contacta con [opencode@microsoft.com](mailto:opencode@microsoft.com) para cualquier pregunta o comentario adicional. + +## ¿Pregunta o Problema? + +Por favor, no abras issues en GitHub para preguntas generales de soporte ya que la lista de GitHub debe usarse para solicitudes de características e informes de errores. De esta manera, podemos rastrear más fácilmente problemas o errores reales del código y mantener la discusión general separada del código real. + +## Errores tipográficos, Problemas, Errores y contribuciones + +Siempre que envíes cambios al repositorio de Generative AI for Beginners, por favor sigue estas recomendaciones. + +* Siempre haz un fork del repositorio a tu propia cuenta antes de hacer tus modificaciones +* No combines múltiples cambios en una sola solicitud de extracción. Por ejemplo, envía cualquier corrección de errores y actualizaciones de documentación usando PRs separados +* Si tu solicitud de extracción muestra conflictos de fusión, asegúrate de actualizar tu rama principal local para que sea un espejo de lo que está en el repositorio principal antes de hacer tus modificaciones +* Si estás enviando una traducción, por favor crea un PR para todos los archivos traducidos ya que no aceptamos traducciones parciales del contenido +* Si estás enviando una corrección de error tipográfico o de documentación, puedes combinar modificaciones en un solo PR donde sea adecuado + +## Guía General para escribir + +- Asegúrate de que todas tus URLs estén entre corchetes cuadrados seguidos de un paréntesis sin espacios adicionales alrededor de ellos o dentro de ellos `[](../..)`. +- Asegúrate de que cualquier enlace relativo (es decir, enlaces a otros archivos y carpetas en el repositorio) comience con un `./` refiriéndose a un archivo o carpeta ubicada en el directorio de trabajo actual o un `../` refiriéndose a un archivo o carpeta ubicada en un directorio de trabajo principal. +- Asegúrate de que cualquier enlace relativo (es decir, enlaces a otros archivos y carpetas en el repositorio) tenga un ID de seguimiento (es decir, `?` o `&` luego `wt.mc_id=` o `WT.mc_id=`) al final de él. +- Asegúrate de que cualquier URL de los siguientes dominios _github.com, microsoft.com, visualstudio.com, aka.ms, y azure.com_ tenga un ID de seguimiento (es decir, `?` o `&` luego `wt.mc_id=` o `WT.mc_id=`) al final de ella. +- Asegúrate de que tus enlaces no tengan un locale específico de país en ellos (es decir, `/en-us/` o `/en/`). +- Asegúrate de que todas las imágenes estén almacenadas en la carpeta `./images`. +- Asegúrate de que las imágenes tengan nombres descriptivos usando caracteres en inglés, números y guiones en el nombre de tu imagen. + +## Flujos de Trabajo de GitHub + +Cuando envíes una solicitud de extracción, se activarán cuatro flujos de trabajo diferentes para validar las reglas anteriores. +Simplemente sigue las instrucciones listadas aquí para pasar las verificaciones de flujo de trabajo. + +- [Verificar Rutas Relativas Rotos](../..) +- [Verificar Rutas Tienen Seguimiento](../..) +- [Verificar URLs Tienen Seguimiento](../..) +- [Verificar URLs No Tienen Locale](../..) + +### Verificar Rutas Relativas Rotos + +Este flujo de trabajo asegura que cualquier ruta relativa en tus archivos esté funcionando. +Este repositorio se despliega en GitHub pages por lo que debes ser muy cuidadoso cuando escribas los enlaces que unen todo para no dirigir a nadie al lugar equivocado. + +Para asegurarte de que tus enlaces estén funcionando correctamente simplemente usa VS code para verificarlo. + +Por ejemplo, cuando pases el cursor sobre cualquier enlace en tus archivos se te pedirá que sigas el enlace presionando **ctrl + click** + +![Captura de pantalla de VS code seguir enlaces](../../translated_images/vscode-follow-link.png?WT.mc_id=academic-105485-koreyst "Captura de pantalla de VS code indicando seguir un enlace cuando pasas el cursor sobre un enlace.985dc1fa72b20fa525440b38b6babd4013d56bc9a9cbd2e3a10f27244e681ceb.es.") + +Si haces clic en un enlace y no funciona localmente, entonces seguramente activará el flujo de trabajo y no funcionará en GitHub. + +Para solucionar este problema, intenta escribir el enlace con la ayuda de VS code. + +Cuando escribas `./` o `../` VS code te pedirá que elijas entre las opciones disponibles de acuerdo a lo que escribiste. + +![Captura de pantalla de VS code seleccionar ruta relativa](../../translated_images/vscode-select-relative-path.png?WT.mc_id=academic-105485-koreyst "Captura de pantalla de VS code indicando seleccionar ruta relativa de una lista emergente.aa7aa416dcb374014324910e36a4e5b42d1fc45bd46a03705e00e438ad2af403.es.") + +Sigue la ruta haciendo clic en el archivo o carpeta deseada y estarás seguro de que tu ruta no está rota. + +Una vez que agregues la ruta relativa correcta, guarda y envía tus cambios, el flujo de trabajo se activará nuevamente para verificar tus cambios. +Si pasas la verificación, entonces estás listo para continuar. + +### Verificar Rutas Tienen Seguimiento + +Este flujo de trabajo asegura que cualquier ruta relativa tenga seguimiento en ella. +Este repositorio se despliega en GitHub pages por lo que necesitamos rastrear el movimiento entre los diferentes archivos y carpetas. + +Para asegurarte de que tus rutas relativas tengan seguimiento simplemente verifica el siguiente texto `?wt.mc_id=` al final de la ruta. +Si está agregado a tus rutas relativas, entonces pasarás esta verificación. + +Si no, podrías recibir el siguiente error. + +![Captura de pantalla de comentario de GitHub de rutas faltantes de seguimiento](../../translated_images/github-check-paths-missing-tracking-comment.png?WT.a320886770b936886823dd96e79a9420e314f2e1ea9927a4c9a44c681c741263.es.mc_id=academic-105485-koreyst "captura de pantalla de comentario de github que muestra seguimiento faltante de rutas relativas") + +Para solucionar este problema, intenta abrir la ruta del archivo que el flujo de trabajo destacó y agrega el ID de seguimiento al final de las rutas relativas. + +Una vez que agregues el ID de seguimiento, guarda y envía tus cambios, el flujo de trabajo se activará nuevamente para verificar tus cambios. +Si pasas la verificación, entonces estás listo para continuar. + +### Verificar URLs Tienen Seguimiento + +Este flujo de trabajo asegura que cualquier URL web tenga seguimiento en ella. +Este repositorio está disponible para todos, por lo que necesitas asegurarte de rastrear el acceso para saber de dónde viene el tráfico. + +Para asegurarte de que tus URLs tengan seguimiento simplemente verifica el siguiente texto `?wt.mc_id=` al final de la URL. +Si está agregado a tus URLs, entonces pasarás esta verificación. + +Si no, podrías recibir el siguiente error. + +![Captura de pantalla de comentario de GitHub de URLs faltantes de seguimiento](../../translated_images/github-check-urls-missing-tracking-comment.png?WT.77f858835a6ef7e5cc1d6fff996f03e9d28eb482bdf703e6f9617f72a57b8f43.es.mc_id=academic-105485-koreyst "captura de pantalla de comentario de github que muestra seguimiento faltante de urls") + +Para solucionar este problema, intenta abrir la ruta del archivo que el flujo de trabajo destacó y agrega el ID de seguimiento al final de las URLs. + +Una vez que agregues el ID de seguimiento, guarda y envía tus cambios, el flujo de trabajo se activará nuevamente para verificar tus cambios. +Si pasas la verificación, entonces estás listo para continuar. + +### Verificar URLs No Tienen Locale + +Este flujo de trabajo asegura que cualquier URL web no tenga un locale específico de país en ella. +Este repositorio está disponible para todos alrededor del mundo, por lo que necesitas asegurarte de no incluir el locale de tu país en las URLs. + +Para asegurarte de que tus URLs no tengan un locale de país simplemente verifica el siguiente texto `/en-us/` o `/en/` o cualquier otro locale de idioma en cualquier parte de la URL. +Si no está presente en tus URLs, entonces pasarás esta verificación. + +Si no, podrías recibir el siguiente error. + +![Captura de pantalla de comentario de GitHub de locale de país agregado](../../translated_images/github-check-country-locale-comment.png?WT.d15ed642ebb74cd1779f9f104cf6030554ca785689515e875c860f78a8cf2601.es.mc_id=academic-105485-koreyst "captura de pantalla de comentario de github que muestra locale de país agregado a urls") + +Para solucionar este problema, intenta abrir la ruta del archivo que el flujo de trabajo destacó y elimina el locale de país de las URLs. + +Una vez que elimines el locale de país, guarda y envía tus cambios, el flujo de trabajo se activará nuevamente para verificar tus cambios. +Si pasas la verificación, entonces estás listo para continuar. + +¡Felicidades! Nos pondremos en contacto contigo lo antes posible con comentarios sobre tu contribución. + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr 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 humana profesional. No nos hacemos responsables de ningún 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 new file mode 100644 index 000000000..7b7409811 --- /dev/null +++ b/translations/es/README.md @@ -0,0 +1,112 @@ +![Generative AI Para Principiantes](../../translated_images/repo-thumbnailv4-fixed.png?WT.dfa9688e7359356441d344183b2ff4dcc76389cc116024447725ef424a809a79.es.mc_id=academic-105485-koreyst) + +### 21 Lecciones que enseñan todo lo que necesitas saber para comenzar a crear aplicaciones de IA Generativa + +[![GitHub license](https://img.shields.io/github/license/microsoft/Generative-AI-For-Beginners.svg)](https://github.com/microsoft/Generative-AI-For-Beginners/blob/master/LICENSE?WT.mc_id=academic-105485-koreyst) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/graphs/contributors/?WT.mc_id=academic-105485-koreyst) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/issues/?WT.mc_id=academic-105485-koreyst) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/pulls/?WT.mc_id=academic-105485-koreyst) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com?WT.mc_id=academic-105485-koreyst) + +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/watchers/?WT.mc_id=academic-105485-koreyst) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/network/?WT.mc_id=academic-105485-koreyst) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/stargazers/?WT.mc_id=academic-105485-koreyst) + +[![](https://dcbadge.limes.pink/api/server/ByRwuEEgH4)](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) + +# IA Generativa para Principiantes (Versión 3) - Un Curso + +Aprende los fundamentos para construir aplicaciones de IA Generativa con nuestro curso completo de 21 lecciones por los Defensores de la Nube de Microsoft. + +## 🌱 Empezando + +Este curso tiene 21 lecciones. Cada lección cubre su propio tema, así que ¡comienza donde prefieras! + +Las lecciones están etiquetadas como "Aprender", que explican un concepto de IA Generativa, o "Construir", que explican un concepto y ejemplos de código en **Python** y **TypeScript** cuando es posible. + +Cada lección también incluye una sección de "Seguir Aprendiendo" con herramientas de aprendizaje adicionales. + +## Lo que Necesitas +### Para ejecutar el código de este curso, puedes usar: +- [Azure OpenAI Service](https://azure.microsoft.com/products/ai-services/openai-service?WT.mc_id=academic-105485-koreyst) - **Lecciones:** "aoai-assignment" +- [GitHub Marketplace Model Catalog](https://github.com/marketplace/models?WT.mc_id=academic-105485-koreyst) - **Lecciones:** "githubmodels" +- [OpenAI API](https://platform.openai.com/docs/quickstart?context=python?WT.mc_id=academic-105485-koreyst) - **Lecciones:** "oai-assignment" + +- Conocimientos básicos de Python o TypeScript son útiles - \*Para principiantes absolutos, revisa estos cursos de [Python](https://learn.microsoft.com/training/paths/python-language/?WT.mc_id=academic-105485-koreyst) y [TypeScript](https://learn.microsoft.com/training/paths/build-javascript-applications-typescript/?WT.mc_id=academic-105485-koreyst). +- Una cuenta de GitHub para [hacer un fork de todo este repositorio](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst) en tu propia cuenta de GitHub + +Hemos creado una lección de **[Configuración del Curso](./00-course-setup/README.md?WT.mc_id=academic-105485-koreyst)** para ayudarte a configurar tu entorno de desarrollo. + +No olvides [darle una estrella (🌟) a este repositorio](https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars?WT.mc_id=academic-105485-koreyst) para encontrarlo más fácilmente después. + +## 🧠 ¿Listo para Desplegar? + +Si buscas ejemplos de código más avanzados, revisa nuestra [colección de Ejemplos de Código de IA Generativa](https://aka.ms/genai-beg-code?WT.mc_id=academic-105485-koreyst) tanto en **Python** como en **TypeScript**. + +## 🗣️ Conoce a Otros Estudiantes, Obtén Soporte + +Únete a nuestro [servidor oficial de Discord de IA](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) para conocer y conectarte con otros estudiantes que están tomando este curso y obtener soporte. + +## 🚀 ¿Estás Construyendo una Startup? + +Regístrate en [Microsoft para Startups Founders Hub](https://aka.ms/genai-foundershub?WT.mc_id=academic-105485-koreyst) para recibir **créditos gratuitos de OpenAI** y hasta **$150k en créditos de Azure para acceder a modelos de OpenAI a través de Azure OpenAI Services**. + +## 🙏 ¿Quieres ayudar? + +¿Tienes sugerencias o encontraste errores de ortografía o en el código? [Levanta un issue](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst) o [Crea un pull request](https://github.com/microsoft/generative-ai-for-beginners/pulls?WT.mc_id=academic-105485-koreyst) + +## 📂 Cada lección incluye: + +- Una breve introducción en video al tema +- Una lección escrita ubicada en el README +- Ejemplos de código en Python y TypeScript compatibles con Azure OpenAI y OpenAI API +- Enlaces a recursos adicionales para continuar tu aprendizaje + +## 🗃️ Lecciones + +| # | **Enlace de la Lección** | **Descripción** | **Video** | **Aprendizaje Adicional** | +| --- | --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | +| 00 | [Configuración del Curso](./00-course-setup/README.md?WT.mc_id=academic-105485-koreyst) | **Aprender:** Cómo Configurar tu Entorno de Desarrollo | Próximamente | [Aprender Más](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 01 | [Introducción a la IA Generativa y LLMs](./01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst) | **Aprender:** Entender qué es la IA Generativa y cómo funcionan los Modelos de Lenguaje a Gran Escala (LLMs). | [Video](https://aka.ms/gen-ai-lesson-1-gh?WT.mc_id=academic-105485-koreyst) | [Aprender Más](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 02 | [Explorando y comparando diferentes LLMs](./02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst) | **Aprende:** Cómo seleccionar el modelo adecuado para tu caso de uso | [Video](https://aka.ms/gen-ai-lesson2-gh?WT.mc_id=academic-105485-koreyst) | [Más Información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 03 | [Usando la IA Generativa de manera Responsable](./03-using-generative-ai-responsibly/README.md?WT.mc_id=academic-105485-koreyst) | **Aprende:** Cómo construir aplicaciones de IA Generativa de manera responsable | [Video](https://aka.ms/gen-ai-lesson3-gh?WT.mc_id=academic-105485-koreyst) | [Más Información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 04 | [Entendiendo los Fundamentos de la Ingeniería de Prompts](./04-prompt-engineering-fundamentals/README.md?WT.mc_id=academic-105485-koreyst) | **Aprende:** Prácticas recomendadas de ingeniería de prompts prácticas | [Video](https://aka.ms/gen-ai-lesson4-gh?WT.mc_id=academic-105485-koreyst) | [Más Información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 05 | [Creando Prompts Avanzados](./05-advanced-prompts/README.md?WT.mc_id=academic-105485-koreyst) | **Aprende:** Cómo aplicar técnicas de ingeniería de prompts que mejoran el resultado de tus prompts. | [Video](https://aka.ms/gen-ai-lesson5-gh?WT.mc_id=academic-105485-koreyst) | [Más Información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 06 | [Construyendo Aplicaciones de Generación de Texto](./06-text-generation-apps/README.md?WT.mc_id=academic-105485-koreyst) | **Construye:** Una aplicación de generación de texto usando Azure OpenAI / OpenAI API | [Video](https://aka.ms/gen-ai-lesson6-gh?WT.mc_id=academic-105485-koreyst) | [Más Información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 07 | [Construyendo Aplicaciones de Chat](./07-building-chat-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Construye:** Técnicas para construir e integrar aplicaciones de chat eficientemente. | [Video](https://aka.ms/gen-ai-lessons7-gh?WT.mc_id=academic-105485-koreyst) | [Más Información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 08 | [Construyendo Aplicaciones de Búsqueda con Bases de Datos Vectoriales](./08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Construye:** Una aplicación de búsqueda que utiliza Embeddings para buscar datos. | [Video](https://aka.ms/gen-ai-lesson8-gh?WT.mc_id=academic-105485-koreyst) | [Más Información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 09 | [Construyendo Aplicaciones de Generación de Imágenes](./09-building-image-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Construye:** Una aplicación de generación de imágenes | [Video](https://aka.ms/gen-ai-lesson9-gh?WT.mc_id=academic-105485-koreyst) | [Más Información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 10 | [Construyendo Aplicaciones de IA de Bajo Código](./10-building-low-code-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Construye:** Una aplicación de IA Generativa usando herramientas de Bajo Código | [Video](https://aka.ms/gen-ai-lesson10-gh?WT.mc_id=academic-105485-koreyst) | [Más Información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 11 | [Integrando Aplicaciones Externas con Llamadas a Funciones](./11-integrating-with-function-calling/README.md?WT.mc_id=academic-105485-koreyst) | **Construye:** Qué es la llamada a funciones y sus casos de uso para aplicaciones | [Video](https://aka.ms/gen-ai-lesson11-gh?WT.mc_id=academic-105485-koreyst) | [Más Información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 12 | [Diseñando UX para Aplicaciones de IA](./12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Aprender:** Cómo aplicar principios de diseño UX al desarrollar aplicaciones de IA Generativa | [Video](https://aka.ms/gen-ai-lesson12-gh?WT.mc_id=academic-105485-koreyst) | [Más información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 13 | [Asegurando tus Aplicaciones de IA Generativa](./13-securing-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Aprender:** Las amenazas y riesgos para los sistemas de IA y métodos para asegurar estos sistemas. | [Video](https://aka.ms/gen-ai-lesson13-gh?WT.mc_id=academic-105485-koreyst) | [Más información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 14 | [El Ciclo de Vida de las Aplicaciones de IA Generativa](./14-the-generative-ai-application-lifecycle/README.md?WT.mc_id=academic-105485-koreyst) | **Aprender:** Las herramientas y métricas para gestionar el Ciclo de Vida de LLM y LLMOps | [Video](https://aka.ms/gen-ai-lesson14-gh?WT.mc_id=academic-105485-koreyst) | [Más información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 15 | [Generación Aumentada por Recuperación (RAG) y Bases de Datos Vectoriales](./15-rag-and-vector-databases/README.md?WT.mc_id=academic-105485-koreyst) | **Construir:** Una aplicación utilizando un marco RAG para recuperar incrustaciones de bases de datos vectoriales | [Video](https://aka.ms/gen-ai-lesson15-gh?WT.mc_id=academic-105485-koreyst) | [Más información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 16 | [Modelos de Código Abierto y Hugging Face](./16-open-source-models/README.md?WT.mc_id=academic-105485-koreyst) | **Construir:** Una aplicación utilizando modelos de código abierto disponibles en Hugging Face | [Video](https://aka.ms/gen-ai-lesson16-gh?WT.mc_id=academic-105485-koreyst) | [Más información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 17 | [Agentes de IA](./17-ai-agents/README.md?WT.mc_id=academic-105485-koreyst) | **Construir:** Una aplicación utilizando un marco de agentes de IA | [Video](https://aka.ms/gen-ai-lesson17-gh?WT.mc_id=academic-105485-koreyst) | [Más información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 18 | [Ajuste Fino de LLMs](./18-fine-tuning/README.md?WT.mc_id=academic-105485-koreyst) | **Aprender:** Qué, por qué y cómo del ajuste fino de LLMs | [Video](https://aka.ms/gen-ai-lesson18-gh?WT.mc_id=academic-105485-koreyst) | [Más información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 19 | [Construyendo con SLMs](./19-slm/README.md?WT.mc_id=academic-105485-koreyst) | **Aprender:** Los beneficios de construir con Modelos de Lenguaje Pequeños | Video Próximamente | [Más información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 20 | [Construyendo con Modelos Mistral](./20-mistral/README.md?WT.mc_id=academic-105485-koreyst) | **Aprender:** Las características y diferencias de los Modelos de la Familia Mistral | Video Próximamente | [Más información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 21 | [Construyendo con Modelos Meta](./21-meta/README.md?WT.mc_id=academic-105485-koreyst) | **Aprender:** Las características y diferencias de los Modelos de la Familia Meta | Video Próximamente | [Más información](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | + +### 🌟 Agradecimientos especiales + +Agradecimientos especiales a [**John Aziz**](https://www.linkedin.com/in/john0isaac/) por crear todas las Acciones y flujos de trabajo de GitHub. + +[**Bernhard Merkle**](https://www.linkedin.com/in/bernhard-merkle-738b73/) por hacer contribuciones clave a cada lección para mejorar la experiencia del aprendiz y el código. + +## 🎒 Otros Cursos + +¡Nuestro equipo produce otros cursos! Echa un vistazo a: + +- [ML para Principiantes](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst) +- [Ciencia de Datos para Principiantes](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) +- [IA para Principiantes](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) +- [**NUEVO** Ciberseguridad para Principiantes](https://github.com/microsoft/Security-101??WT.mc_id=academic-96948-sayoung) +- [Desarrollo Web para Principiantes](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst) +- [IoT para Principiantes](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst) +- [Desarrollo XR para Principiantes](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst) +- [Dominar GitHub Copilot para Programación en Pareja con IA](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr 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 humana. No nos hacemos responsables de ningún 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/SECURITY.md b/translations/es/SECURITY.md new file mode 100644 index 000000000..71cf00dd3 --- /dev/null +++ b/translations/es/SECURITY.md @@ -0,0 +1,40 @@ +## Seguridad + +Microsoft se toma en serio la seguridad de nuestros productos de software y servicios, lo que incluye todos los repositorios de código fuente gestionados a través de nuestras organizaciones en GitHub, que incluyen [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), y [nuestras organizaciones en GitHub](https://opensource.microsoft.com/). + +Si crees que has encontrado una vulnerabilidad de seguridad en algún repositorio propiedad de Microsoft que cumpla con [la definición de vulnerabilidad de seguridad de Microsoft](https://aka.ms/opensource/security/definition), por favor repórtalo como se describe a continuación. + +## Reporte de Problemas de Seguridad + +**Por favor, no reportes vulnerabilidades de seguridad a través de problemas públicos en GitHub.** + +En su lugar, repórtalos al Centro de Respuesta de Seguridad de Microsoft (MSRC) en [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). + +Si prefieres enviar tu reporte sin iniciar sesión, envía un correo electrónico a [secure@microsoft.com](mailto:secure@microsoft.com). Si es posible, cifra tu mensaje con nuestra clave PGP; por favor descárgala desde la [página de la Clave PGP del Centro de Respuesta de Seguridad de Microsoft](https://aka.ms/opensource/security/pgpkey). + +Deberías recibir una respuesta en un plazo de 24 horas. Si por alguna razón no la recibes, por favor haz un seguimiento por correo electrónico para asegurarte de que recibimos tu mensaje original. Puedes encontrar información adicional en [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). + +Por favor, incluye la información solicitada que se detalla a continuación (tanto como puedas proporcionar) para ayudarnos a comprender mejor la naturaleza y el alcance del posible problema: + + * Tipo de problema (por ejemplo, desbordamiento de búfer, inyección SQL, scripting entre sitios, etc.) + * Rutas completas de los archivos fuente relacionados con la manifestación del problema + * La ubicación del código fuente afectado (etiqueta/rama/commit o URL directa) + * Cualquier configuración especial requerida para reproducir el problema + * Instrucciones paso a paso para reproducir el problema + * Código de prueba de concepto o de explotación (si es posible) + * Impacto del problema, incluyendo cómo un atacante podría explotar el problema + +Esta información nos ayudará a priorizar tu informe más rápidamente. + +Si estás reportando para un programa de recompensas por errores, informes más completos pueden contribuir a una mayor recompensa. Por favor, visita nuestra página del [Programa de Recompensas por Errores de Microsoft](https://aka.ms/opensource/security/bounty) para más detalles sobre nuestros programas activos. + +## Idiomas Preferidos + +Preferimos que todas las comunicaciones sean en inglés. + +## Política + +Microsoft sigue el principio de [Divulgación Coordinada de Vulnerabilidades](https://aka.ms/opensource/security/cvd). + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Si bien nos esforzamos por lograr 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 humana. No somos responsables de ningún 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/_navbar.md b/translations/es/docs/_navbar.md new file mode 100644 index 000000000..6eee624d3 --- /dev/null +++ b/translations/es/docs/_navbar.md @@ -0,0 +1,10 @@ +* Seleccionar idioma + + * [Inglés](../../../../../../../..) + * [Chino simplificado](../../../../../../../../translations/cn) + * [Chino tradicional](../../../../../../../../translations/tw) + * [Portugués](../../../../../../../../translations/pt-br) + * [Japonés](../../../../../../../../translations/ja-jp) + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr 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 humana. No nos hacemos responsables de ningún 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/_sidebar.md b/translations/es/docs/_sidebar.md new file mode 100644 index 000000000..5a6ffb204 --- /dev/null +++ b/translations/es/docs/_sidebar.md @@ -0,0 +1,5 @@ +- Comenzando + - [Introducción a la IA Generativa](../01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst) + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr 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 humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/fr/00-course-setup/README.md b/translations/fr/00-course-setup/README.md new file mode 100644 index 000000000..181726e79 --- /dev/null +++ b/translations/fr/00-course-setup/README.md @@ -0,0 +1,155 @@ +# Commencer avec ce cours + +Nous sommes très enthousiastes à l'idée que vous commenciez ce cours et découvriez ce que vous serez inspiré à créer avec l'IA générative ! + +Pour garantir votre succès, cette page décrit les étapes de configuration, les exigences techniques et où obtenir de l'aide si nécessaire. + +## Étapes de Configuration + +Pour commencer ce cours, vous devrez compléter les étapes suivantes. + +### 1. Forker ce Répertoire + +[Forkez ce répertoire entier](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst) sur votre propre compte GitHub pour pouvoir modifier le code et relever les défis. Vous pouvez également [mettre une étoile (🌟) à ce répertoire](https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars?WT.mc_id=academic-105485-koreyst) pour le retrouver plus facilement ainsi que les répertoires associés. + +### 2. Créer un codespace + +Pour éviter tout problème de dépendance lors de l'exécution du code, nous recommandons de suivre ce cours dans un [GitHub Codespaces](https://github.com/features/codespaces?WT.mc_id=academic-105485-koreyst). + +Cela peut être créé en sélectionnant l'option `Code` sur votre version forkée de ce répertoire et en choisissant l'option **Codespaces**. + +![Dialogue montrant les boutons pour créer un codespace](../../../00-course-setup/images/who-will-pay.webp) + +### 3. Stocker Vos Clés API + +Il est important de garder vos clés API sûres et sécurisées lors de la création de tout type d'application. Nous recommandons de ne pas stocker de clés API directement dans votre code. Les commettre dans un dépôt public pourrait entraîner des problèmes de sécurité et même des coûts indésirables si elles sont utilisées par un acteur malveillant. + +## Comment Exécuter Localement sur Votre Ordinateur + +Pour exécuter le code localement sur votre ordinateur, vous devrez avoir une version de [Python installée](https://www.python.org/downloads/?WT.mc_id=academic-105485-koreyst). + +Ensuite, pour utiliser le répertoire, vous devez le cloner : + +```shell +git clone https://github.com/microsoft/generative-ai-for-beginners +cd generative-ai-for-beginners +``` + +Une fois que tout est vérifié, vous pouvez commencer ! + +### Installer Miniconda (étape optionnelle) + +[Miniconda](https://conda.io/en/latest/miniconda.html?WT.mc_id=academic-105485-koreyst) est un installateur léger pour installer [Conda](https://docs.conda.io/en/latest?WT.mc_id=academic-105485-koreyst), Python, ainsi que quelques packages. +Conda lui-même est un gestionnaire de paquets, qui facilite la configuration et le passage entre différents [**environnements virtuels**](https://docs.python.org/3/tutorial/venv.html?WT.mc_id=academic-105485-koreyst) Python et packages. Il est également utile pour installer des packages qui ne sont pas disponibles via `pip`. + +You can follow the [MiniConda installation guide](https://docs.anaconda.com/free/miniconda/#quick-command-line-install?WT.mc_id=academic-105485-koreyst) to set it up. + +With Miniconda installed, you need to clone the [repository](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst) (if you haven't already) + +Next, you need to create a virtual environment. To do this with Conda, go ahead and create a new environment file (_environment.yml_). If you are following along using Codespaces, create this within the `.devcontainer` directory, thus `.devcontainer/environment.yml`. + +Allez-y et remplissez votre fichier d'environnement avec l'extrait ci-dessous : + +```yml +name: +channels: + - defaults +dependencies: +- python= +- openai +- python-dotenv +- azure-ai-inference + +``` + +Le fichier d'environnement spécifie les dépendances dont nous avons besoin. `` refers to the name you would like to use for your Conda environment, and `` is the version of Python you would like to use, for example, `3` est la dernière version majeure de Python. + +Avec cela fait, vous pouvez créer votre environnement Conda en exécutant les commandes ci-dessous dans votre ligne de commande/terminal + +```bash +conda env create --name ai4beg --file .devcontainer/environment.yml # .devcontainer sub path applies to only Codespace setups +conda activate ai4beg +``` + +Consultez le [guide des environnements Conda](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html?WT.mc_id=academic-105485-koreyst) si vous rencontrez des problèmes. + +### Utiliser Visual Studio Code avec l'extension de support Python + +Nous recommandons d'utiliser l'éditeur [Visual Studio Code (VS Code)](http://code.visualstudio.com/?WT.mc_id=academic-105485-koreyst) avec l'[extension de support Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-105485-koreyst) installée pour ce cours. Ceci est toutefois plus une recommandation qu'une exigence absolue. + +> **Note** : En ouvrant le répertoire du cours dans VS Code, vous avez la possibilité de configurer le projet dans un conteneur. Cela est dû au [répertoire spécial `.devcontainer`](https://code.visualstudio.com/docs/devcontainers/containers?itemName=ms-python.python&WT.mc_id=academic-105485-koreyst) trouvé dans le répertoire du cours. Plus d'informations à ce sujet plus tard. + +> **Note** : Une fois que vous clonez et ouvrez le répertoire dans VS Code, il vous suggérera automatiquement d'installer une extension de support Python. + +> **Note** : Si VS Code vous suggère de rouvrir le répertoire dans un conteneur, déclinez cette demande afin d'utiliser la version localement installée de Python. + +### Utiliser Jupyter dans le Navigateur + +Vous pouvez également travailler sur le projet en utilisant l'[environnement Jupyter](https://jupyter.org?WT.mc_id=academic-105485-koreyst) directement dans votre navigateur. Tant le Jupyter classique que le [Jupyter Hub](https://jupyter.org/hub?WT.mc_id=academic-105485-koreyst) offrent un environnement de développement agréable avec des fonctionnalités telles que l'auto-complétion, la mise en surbrillance du code, etc. + +Pour démarrer Jupyter localement, rendez-vous dans le terminal/lignes de commande, naviguez vers le répertoire du cours, et exécutez : + +```bash +jupyter notebook +``` + +ou + +```bash +jupyterhub +``` + +Cela lancera une instance Jupyter et l'URL pour y accéder sera affichée dans la fenêtre de ligne de commande. + +Une fois que vous accédez à l'URL, vous devriez voir le plan du cours et pouvoir naviguer vers n'importe quel fichier `*.ipynb` file. For example, `08-building-search-applications/python/oai-solution.ipynb`. + +### Running in a container + +An alternative to setting everything up on your computer or Codespace is to use a [container](https://en.wikipedia.org/wiki/Containerization_(computing)?WT.mc_id=academic-105485-koreyst). The special `.devcontainer` folder within the course repository makes it possible for VS Code to set up the project within a container. Outside of Codespaces, this will require the installation of Docker, and quite frankly, it involves a bit of work, so we recommend this only to those with experience working with containers. + +One of the best ways to keep your API keys secure when using GitHub Codespaces is by using Codespace Secrets. Please follow the [Codespaces secrets management](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-secrets-for-your-codespaces?WT.mc_id=academic-105485-koreyst) guide to learn more about this. + +## Lessons and Technical Requirements + +The course has 6 concept lessons and 6 coding lessons. + +For the coding lessons, we are using the Azure OpenAI Service. You will need access to the Azure OpenAI service and an API key to run this code. You can apply to get access by [completing this application](https://azure.microsoft.com/products/ai-services/openai-service?WT.mc_id=academic-105485-koreyst). + +While you wait for your application to be processed, each coding lesson also includes a `README.md` où vous pouvez voir le code et les sorties. + +## Utiliser le Service Azure OpenAI pour la première fois + +Si c'est la première fois que vous travaillez avec le service Azure OpenAI, veuillez suivre ce guide sur comment [créer et déployer une ressource de service Azure OpenAI.](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal&WT.mc_id=academic-105485-koreyst) + +## Utiliser l'API OpenAI pour la première fois + +Si c'est la première fois que vous travaillez avec l'API OpenAI, veuillez suivre le guide sur comment [créer et utiliser l'Interface.](https://platform.openai.com/docs/quickstart?context=pythont&WT.mc_id=academic-105485-koreyst) + +## Rencontrer d'Autres Apprenants + +Nous avons créé des canaux dans notre serveur Discord officiel de la [communauté AI](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) pour rencontrer d'autres apprenants. C'est une excellente façon de réseauter avec d'autres entrepreneurs, créateurs, étudiants, et toute personne cherchant à progresser en IA générative. + +[![Rejoindre le canal Discord](https://dcbadge.limes.pink/api/server/ByRwuEEgH4)](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) + +L'équipe du projet sera également sur ce serveur Discord pour aider les apprenants. + +## Contribuer + +Ce cours est une initiative open-source. Si vous voyez des domaines à améliorer ou des problèmes, veuillez créer une [Pull Request](https://github.com/microsoft/generative-ai-for-beginners/pulls?WT.mc_id=academic-105485-koreyst) ou enregistrer un [problème GitHub](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst). + +L'équipe du projet suivra toutes les contributions. Contribuer à l'open source est une façon incroyable de bâtir votre carrière en IA générative. + +La plupart des contributions nécessitent que vous acceptiez un Accord de Licence de Contributeur (CLA) déclarant que vous avez le droit et que vous accordez effectivement les droits d'utiliser votre contribution. Pour plus de détails, visitez [le site web CLA, Accord de Licence de Contributeur](https://cla.microsoft.com?WT.mc_id=academic-105485-koreyst). + +Important : lors de la traduction de texte dans ce dépôt, veuillez vous assurer de ne pas utiliser de traduction automatique. Nous vérifierons les traductions via la communauté, alors veuillez ne vous porter volontaire pour les traductions que dans les langues où vous êtes compétent. + +Lorsque vous soumettez une pull request, un CLA-bot déterminera automatiquement si vous devez fournir un CLA et décorera le PR de manière appropriée (par exemple, étiquette, commentaire). Suivez simplement les instructions fournies par le bot. Vous n'aurez besoin de faire cela qu'une seule fois pour tous les dépôts utilisant notre CLA. + +Ce projet a adopté le [Code de Conduite Open Source de Microsoft](https://opensource.microsoft.com/codeofconduct/?WT.mc_id=academic-105485-koreyst). Pour plus d'informations, lisez la FAQ sur le Code de Conduite ou contactez [Email opencode](opencode@microsoft.com) pour toute question ou commentaire supplémentaire. + +## Commençons + +Maintenant que vous avez complété les étapes nécessaires pour suivre ce cours, commençons par obtenir une [introduction à l'IA générative et aux LLMs](../01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst). + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction basés sur l'intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/00-course-setup/SETUP.md b/translations/fr/00-course-setup/SETUP.md new file mode 100644 index 000000000..c7b0ceea4 --- /dev/null +++ b/translations/fr/00-course-setup/SETUP.md @@ -0,0 +1,136 @@ +# Configurez votre environnement de développement + +Nous avons configuré ce dépôt et ce cours avec un [conteneur de développement](https://containers.dev?WT.mc_id=academic-105485-koreyst) qui dispose d'un runtime universel pouvant supporter le développement en Python3, .NET, Node.js et Java. La configuration associée est définie dans le fichier `devcontainer.json` situé dans le dossier `.devcontainer/` à la racine de ce dépôt. + +Pour activer le conteneur de développement, lancez-le dans [GitHub Codespaces](https://docs.github.com/en/codespaces/overview?WT.mc_id=academic-105485-koreyst) (pour un runtime hébergé dans le cloud) ou dans [Docker Desktop](https://docs.docker.com/desktop/?WT.mc_id=academic-105485-koreyst) (pour un runtime hébergé sur un appareil local). Lisez [cette documentation](https://code.visualstudio.com/docs/devcontainers/containers?WT.mc_id=academic-105485-koreyst) pour plus de détails sur le fonctionnement des conteneurs de développement dans VS Code. + +> [!TIP] +> Nous recommandons d'utiliser GitHub Codespaces pour un démarrage rapide avec un effort minimal. Il offre une [quota d'utilisation gratuit](https://docs.github.com/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#monthly-included-storage-and-core-hours-for-personal-accounts?WT.mc_id=academic-105485-koreyst) généreux pour les comptes personnels. Configurez les [timeouts](https://docs.github.com/codespaces/setting-your-user-preferences/setting-your-timeout-period-for-github-codespaces?WT.mc_id=academic-105485-koreyst) pour arrêter ou supprimer les codespaces inactifs afin de maximiser l'utilisation de votre quota. + +## 1. Exécution des devoirs + +Chaque leçon comportera des devoirs _optionnels_ qui peuvent être proposés dans un ou plusieurs langages de programmation, notamment : Python, .NET/C#, Java et JavaScript/TypeScript. Cette section fournit des conseils généraux liés à l'exécution de ces devoirs. + +### 1.1 Devoirs en Python + +Les devoirs en Python sont fournis soit sous forme d'applications (fichiers `.py`) soit de notebooks Jupyter (fichiers `.ipynb`). +- Pour exécuter le notebook, ouvrez-le dans Visual Studio Code, puis cliquez sur _Select Kernel_ (en haut à droite) et sélectionnez l'option Python 3 par défaut affichée. Vous pouvez maintenant _Run All_ pour exécuter le notebook. +- Pour exécuter des applications Python depuis la ligne de commande, suivez les instructions spécifiques au devoir pour vous assurer de sélectionner les bons fichiers et de fournir les arguments requis. + +## 2. Configuration des fournisseurs + +Les devoirs **peuvent** également être configurés pour fonctionner avec un ou plusieurs déploiements de modèles de langage de grande taille (LLM) via un fournisseur de services pris en charge comme OpenAI, Azure ou Hugging Face. Ceux-ci fournissent un _point d'accès hébergé_ (API) auquel nous pouvons accéder de manière programmatique avec les bonnes informations d'identification (clé API ou jeton). Dans ce cours, nous discutons de ces fournisseurs : + + - [OpenAI](https://platform.openai.com/docs/models?WT.mc_id=academic-105485-koreyst) avec divers modèles, y compris la série GPT principale. + - [Azure OpenAI](https://learn.microsoft.com/azure/ai-services/openai/?WT.mc_id=academic-105485-koreyst) pour les modèles OpenAI avec une attention particulière à la préparation des entreprises + - [Hugging Face](https://huggingface.co/docs/hub/index?WT.mc_id=academic-105485-koreyst) pour les modèles open-source et le serveur d'inférence + +**Vous devrez utiliser vos propres comptes pour ces exercices**. Les devoirs sont optionnels, vous pouvez donc choisir de configurer un, tous ou aucun des fournisseurs en fonction de vos intérêts. Quelques conseils pour l'inscription : + +| Inscription | Coût | Clé API | Playground | Commentaires | +|:---|:---|:---|:---|:---| +| [OpenAI](https://platform.openai.com/signup?WT.mc_id=academic-105485-koreyst)| [Tarification](https://openai.com/pricing#language-models?WT.mc_id=academic-105485-koreyst)| [Basé sur le projet](https://platform.openai.com/api-keys?WT.mc_id=academic-105485-koreyst) | [No-Code, Web](https://platform.openai.com/playground?WT.mc_id=academic-105485-koreyst) | Plusieurs modèles disponibles | +| [Azure](https://aka.ms/azure/free?WT.mc_id=academic-105485-koreyst)| [Tarification](https://azure.microsoft.com/pricing/details/cognitive-services/openai-service/?WT.mc_id=academic-105485-koreyst)| [Démarrage rapide SDK](https://learn.microsoft.com/azure/ai-services/openai/quickstart?WT.mc_id=academic-105485-koreyst)| [Démarrage rapide Studio](https://learn.microsoft.com/azure/ai-services/openai/quickstart?WT.mc_id=academic-105485-koreyst) | [Doit postuler à l'avance pour accéder](https://learn.microsoft.com/azure/ai-services/openai/?WT.mc_id=academic-105485-koreyst)| +| [Hugging Face](https://huggingface.co/join?WT.mc_id=academic-105485-koreyst) | [Tarification](https://huggingface.co/pricing) | [Jetons d'accès](https://huggingface.co/docs/hub/security-tokens?WT.mc_id=academic-105485-koreyst) | [Hugging Chat](https://huggingface.co/chat/?WT.mc_id=academic-105485-koreyst)| [Hugging Chat a des modèles limités](https://huggingface.co/chat/models?WT.mc_id=academic-105485-koreyst) | +| | | | | | + +Suivez les instructions ci-dessous pour _configurer_ ce dépôt pour une utilisation avec différents fournisseurs. Les devoirs qui nécessitent un fournisseur spécifique contiendront l'une de ces balises dans leur nom de fichier : + - `aoai` - nécessite le point d'accès Azure OpenAI, clé + - `oai` - nécessite le point d'accès OpenAI, clé + - `hf` - nécessite le jeton Hugging Face + +Vous pouvez configurer un, aucun ou tous les fournisseurs. Les devoirs associés échoueront simplement en cas d'absence des informations d'identification. + +### 2.1. Créer le fichier `.env` + +Nous supposons que vous avez déjà lu les instructions ci-dessus et que vous vous êtes inscrit auprès du fournisseur pertinent, et que vous avez obtenu les informations d'authentification requises (API_KEY ou jeton). Dans le cas d'Azure OpenAI, nous supposons que vous avez également un déploiement valide d'un service Azure OpenAI (point d'accès) avec au moins un modèle GPT déployé pour l'achèvement de chat. + +L'étape suivante consiste à configurer vos **variables d'environnement locales** comme suit : + +1. Regardez dans le dossier racine pour un fichier `.env.copy` qui devrait avoir un contenu comme ceci : + + ```bash + # OpenAI Provider + OPENAI_API_KEY='' + + ## Azure OpenAI + AZURE_OPENAI_API_VERSION='2024-02-01' # Default is set! + AZURE_OPENAI_API_KEY='' + AZURE_OPENAI_ENDPOINT='' + AZURE_OPENAI_DEPLOYMENT='' + AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT='' + + ## Hugging Face + HUGGING_FACE_API_KEY='' + ``` + +2. Copiez ce fichier dans `.env` en utilisant la commande ci-dessous. Ce fichier est _gitignore-d_, gardant les secrets en sécurité. + + ```bash + cp .env.copy .env + ``` + +3. Remplissez les valeurs (remplacez les espaces réservés à droite du `=`) comme décrit dans la section suivante. + +3. (Option) Si vous utilisez GitHub Codespaces, vous avez la possibilité de sauvegarder les variables d'environnement en tant que _secrets Codespaces_ associés à ce dépôt. Dans ce cas, vous n'aurez pas besoin de configurer un fichier .env local. **Cependant, notez que cette option ne fonctionne que si vous utilisez GitHub Codespaces.** Vous devrez toujours configurer le fichier .env si vous utilisez Docker Desktop à la place. + +### 2.2. Remplir le fichier `.env` + +Jetons un coup d'œil rapide aux noms des variables pour comprendre ce qu'elles représentent : + +| Variable | Description | +| :--- | :--- | +| HUGGING_FACE_API_KEY | C'est le jeton d'accès utilisateur que vous configurez dans votre profil | +| OPENAI_API_KEY | C'est la clé d'autorisation pour utiliser le service pour les points d'accès OpenAI non-Azure | +| AZURE_OPENAI_API_KEY | C'est la clé d'autorisation pour utiliser ce service | +| AZURE_OPENAI_ENDPOINT | C'est le point d'accès déployé pour une ressource Azure OpenAI | +| AZURE_OPENAI_DEPLOYMENT | C'est le point d'accès de déploiement du modèle _text generation_ | +| AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT | C'est le point d'accès de déploiement du modèle _text embeddings_ | +| | | + +Remarque : Les deux dernières variables Azure OpenAI reflètent un modèle par défaut pour l'achèvement de chat (génération de texte) et la recherche vectorielle (embeddings) respectivement. Les instructions pour les configurer seront définies dans les devoirs pertinents. + +### 2.3 Configurer Azure : Depuis le portail + +Les valeurs de point d'accès et de clé Azure OpenAI se trouvent dans le [portail Azure](https://portal.azure.com?WT.mc_id=academic-105485-koreyst), commençons donc par là. + +1. Allez sur le [portail Azure](https://portal.azure.com?WT.mc_id=academic-105485-koreyst) +1. Cliquez sur l'option **Keys and Endpoint** dans la barre latérale (menu à gauche). +1. Cliquez sur **Show Keys** - vous devriez voir les éléments suivants : KEY 1, KEY 2 et Endpoint. +1. Utilisez la valeur KEY 1 pour AZURE_OPENAI_API_KEY +1. Utilisez la valeur Endpoint pour AZURE_OPENAI_ENDPOINT + +Ensuite, nous avons besoin des points d'accès pour les modèles spécifiques que nous avons déployés. + +1. Cliquez sur l'option **Model deployments** dans la barre latérale (menu à gauche) pour la ressource Azure OpenAI. +1. Dans la page de destination, cliquez sur **Manage Deployments** + +Cela vous amènera au site web Azure OpenAI Studio, où nous trouverons les autres valeurs comme décrit ci-dessous. + +### 2.4 Configurer Azure : Depuis le studio + +1. Accédez à [Azure OpenAI Studio](https://oai.azure.com?WT.mc_id=academic-105485-koreyst) **à partir de votre ressource** comme décrit ci-dessus. +1. Cliquez sur l'onglet **Deployments** (barre latérale, à gauche) pour voir les modèles actuellement déployés. +1. Si votre modèle souhaité n'est pas déployé, utilisez **Create new deployment** pour le déployer. +1. Vous aurez besoin d'un modèle _text-generation_ - nous recommandons : **gpt-35-turbo** +1. Vous aurez besoin d'un modèle _text-embedding_ - nous recommandons **text-embedding-ada-002** + +Mettez maintenant à jour les variables d'environnement pour refléter le _nom de déploiement_ utilisé. Cela sera généralement le même que le nom du modèle, sauf si vous l'avez changé explicitement. Donc, par exemple, vous pourriez avoir : + +```bash +AZURE_OPENAI_DEPLOYMENT='gpt-35-turbo' +AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT='text-embedding-ada-002' +``` + +**N'oubliez pas de sauvegarder le fichier .env une fois terminé**. Vous pouvez maintenant quitter le fichier et revenir aux instructions pour exécuter le notebook. + +### 2.5 Configurer OpenAI : Depuis le profil + +Votre clé API OpenAI se trouve dans votre [compte OpenAI](https://platform.openai.com/api-keys?WT.mc_id=academic-105485-koreyst). Si vous n'en avez pas, vous pouvez vous inscrire pour un compte et créer une clé API. Une fois que vous avez la clé, vous pouvez l'utiliser pour remplir la variable `OPENAI_API_KEY` dans le fichier `.env`. + +### 2.6 Configurer Hugging Face : Depuis le profil + +Votre jeton Hugging Face se trouve dans votre profil sous [Access Tokens](https://huggingface.co/settings/tokens?WT.mc_id=academic-105485-koreyst). Ne publiez pas ou ne partagez pas ces informations publiquement. Créez plutôt un nouveau jeton pour l'utilisation de ce projet et copiez-le dans le fichier `.env` sous la variable `HUGGING_FACE_API_KEY`. _Remarque:_ Ce n'est techniquement pas une clé API mais est utilisé pour l'authentification, donc nous gardons cette convention de nommage pour la cohérence. + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'IA. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/01-introduction-to-genai/README.md b/translations/fr/01-introduction-to-genai/README.md new file mode 100644 index 000000000..45236fc03 --- /dev/null +++ b/translations/fr/01-introduction-to-genai/README.md @@ -0,0 +1,139 @@ +# Introduction à l'IA générative et aux modèles de langage de grande taille + +[![Introduction à l'IA générative et aux modèles de langage de grande taille](../../../translated_images/01-lesson-banner.png?WT.e847a56bbd30dfd9341d21c4e957c3bcd9de94d06aa5bc91692a69cb1af2c994.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson-1-gh?WT.mc_id=academic-105485-koreyst) + +_(Cliquez sur l'image ci-dessus pour visionner la vidéo de cette leçon)_ + +L'IA générative est une intelligence artificielle capable de générer du texte, des images et d'autres types de contenu. Ce qui la rend fantastique, c'est qu'elle démocratise l'IA : tout le monde peut l'utiliser avec aussi peu qu'une invite textuelle, une phrase écrite dans un langage naturel. Il n'est pas nécessaire d'apprendre un langage comme Java ou SQL pour accomplir quelque chose d'utile, il suffit d'utiliser votre langue, d'exprimer ce que vous voulez, et une suggestion d'un modèle d'IA apparaît. Les applications et l'impact sont énormes : vous pouvez rédiger ou comprendre des rapports, écrire des applications et bien plus encore, le tout en quelques secondes. + +Dans ce programme, nous explorerons comment notre startup exploite l'IA générative pour ouvrir de nouveaux scénarios dans le monde de l'éducation et comment nous relevons les défis inévitables associés aux implications sociales de son application et aux limitations technologiques. + +## Introduction + +Cette leçon couvrira : + +- Introduction au scénario commercial : notre idée de startup et notre mission. +- L'IA générative et comment nous avons atteint le paysage technologique actuel. +- Fonctionnement interne d'un modèle de langage de grande taille. +- Principales capacités et cas d'utilisation pratiques des modèles de langage de grande taille. + +## Objectifs d'apprentissage + +Après avoir terminé cette leçon, vous comprendrez : + +- Ce qu'est l'IA générative et comment fonctionnent les modèles de langage de grande taille. +- Comment vous pouvez exploiter les modèles de langage de grande taille pour différents cas d'utilisation, en mettant l'accent sur les scénarios éducatifs. + +## Scénario : notre startup éducative + +L'intelligence artificielle générative (IA) représente le sommet de la technologie IA, repoussant les limites de ce que l'on pensait autrefois impossible. Les modèles d'IA générative ont plusieurs capacités et applications, mais pour ce programme, nous explorerons comment elle révolutionne l'éducation grâce à une startup fictive. Nous désignerons cette startup comme _notre startup_. Notre startup travaille dans le domaine de l'éducation avec la mission ambitieuse de + +> _améliorer l'accessibilité à l'apprentissage à l'échelle mondiale, en garantissant un accès équitable à l'éducation et en offrant des expériences d'apprentissage personnalisées à chaque apprenant, selon ses besoins_. + +L'équipe de notre startup est consciente que nous ne pourrons pas atteindre cet objectif sans exploiter l'un des outils les plus puissants de notre époque – les modèles de langage de grande taille (LLM). + +L'IA générative devrait révolutionner notre façon d'apprendre et d'enseigner aujourd'hui, avec des étudiants disposant de professeurs virtuels 24 heures sur 24 qui fournissent d'énormes quantités d'informations et d'exemples, et des enseignants capables d'utiliser des outils innovants pour évaluer leurs étudiants et donner des retours. + +![Cinq jeunes étudiants regardant un moniteur - image par DALLE2](../../../translated_images/students-by-DALLE2.png?WT.540d623be2689660f18d0c126177502c651e2269597164cc09b60d7d90b830cf.fr.mc_id=academic-105485-koreyst) + +Pour commencer, définissons quelques concepts de base et la terminologie que nous utiliserons tout au long du programme. + +## Comment avons-nous obtenu l'IA générative ? + +Malgré le _battage médiatique_ extraordinaire créé récemment par l'annonce des modèles d'IA générative, cette technologie est en développement depuis des décennies, avec les premiers efforts de recherche remontant aux années 60. Nous sommes maintenant à un point où l'IA a des capacités cognitives humaines, comme la conversation, comme le montrent par exemple [OpenAI ChatGPT](https://openai.com/chatgpt) ou [Bing Chat](https://www.microsoft.com/edge/features/bing-chat?WT.mc_id=academic-105485-koreyst), qui utilise également un modèle GPT pour les conversations de recherche web Bing. + +Pour revenir un peu en arrière, les tout premiers prototypes d'IA consistaient en des chatbots dactylographiés, s'appuyant sur une base de connaissances extraite d'un groupe d'experts et représentée dans un ordinateur. Les réponses dans la base de connaissances étaient déclenchées par des mots-clés apparaissant dans le texte d'entrée. +Cependant, il est rapidement devenu clair qu'une telle approche, utilisant des chatbots dactylographiés, ne se généralisait pas bien. + +### Une approche statistique de l'IA : l'apprentissage automatique + +Un tournant est arrivé dans les années 90, avec l'application d'une approche statistique à l'analyse de texte. Cela a conduit au développement de nouveaux algorithmes – connus sous le nom d'apprentissage automatique – capables d'apprendre des motifs à partir de données, sans être explicitement programmés. Cette approche permet à une machine de simuler la compréhension du langage humain : un modèle statistique est entraîné sur des appariements texte-étiquette, permettant au modèle de classer un texte d'entrée inconnu avec une étiquette prédéfinie représentant l'intention du message. + +### Réseaux neuronaux et assistants virtuels modernes + +Plus récemment, l'évolution technologique du matériel, capable de gérer de plus grandes quantités de données et des calculs plus complexes, a encouragé la recherche dans les domaines de l'IA, conduisant au développement d'algorithmes d'apprentissage automatique avancés – appelés réseaux neuronaux ou algorithmes d'apprentissage profond. + +Les réseaux neuronaux (et en particulier les réseaux neuronaux récurrents – RNNs) ont considérablement amélioré le traitement du langage naturel, permettant de représenter le sens du texte de manière plus significative, en valorisant le contexte d'un mot dans une phrase. + +C'est la technologie qui a alimenté les assistants virtuels nés dans la première décennie du nouveau siècle, très compétents pour interpréter le langage humain, identifier un besoin et effectuer une action pour le satisfaire – comme répondre avec un script prédéfini ou consommer un service tiers. + +### Aujourd'hui, l'IA générative + +C'est ainsi que nous sommes arrivés à l'IA générative aujourd'hui, qui peut être considérée comme un sous-ensemble de l'apprentissage profond. + +![IA, ML, DL et IA générative](../../../translated_images/AI-diagram.png?WT.e126d57e1a443697cd851d5d04d66753225b4d910f4aff65f9f28215b528471a.fr.mc_id=academic-105485-koreyst) + +Après des décennies de recherche dans le domaine de l'IA, une nouvelle architecture de modèle – appelée _Transformer_ – a surmonté les limites des RNNs, étant capable de prendre en entrée des séquences de texte beaucoup plus longues. Les Transformers sont basés sur le mécanisme d'attention, permettant au modèle de donner des poids différents aux entrées qu'il reçoit, en 'prêtant plus d'attention' là où se concentre l'information la plus pertinente, indépendamment de leur ordre dans la séquence de texte. + +La plupart des modèles d'IA générative récents – également connus sous le nom de modèles de langage de grande taille (LLM), car ils fonctionnent avec des entrées et sorties textuelles – sont en effet basés sur cette architecture. Ce qui est intéressant à propos de ces modèles – entraînés sur une énorme quantité de données non étiquetées provenant de sources diverses comme des livres, des articles et des sites Web – c'est qu'ils peuvent être adaptés à une grande variété de tâches et générer un texte grammaticalement correct avec une apparence de créativité. Ainsi, non seulement ils ont incroyablement amélioré la capacité d'une machine à 'comprendre' un texte d'entrée, mais ils ont également permis à leur capacité de générer une réponse originale en langage humain. + +## Comment fonctionnent les modèles de langage de grande taille ? + +Dans le prochain chapitre, nous allons explorer différents types de modèles d'IA générative, mais pour l'instant, examinons comment fonctionnent les modèles de langage de grande taille, en mettant l'accent sur les modèles GPT (Generative Pre-trained Transformer) d'OpenAI. + +- **Tokenizer, texte en chiffres** : Les modèles de langage de grande taille reçoivent un texte en entrée et génèrent un texte en sortie. Cependant, étant des modèles statistiques, ils fonctionnent beaucoup mieux avec des chiffres que des séquences de texte. C'est pourquoi chaque entrée au modèle est traitée par un tokenizer, avant d'être utilisée par le modèle principal. Un token est un morceau de texte – composé d'un nombre variable de caractères, donc la tâche principale du tokenizer est de diviser l'entrée en un tableau de tokens. Ensuite, chaque token est mappé avec un index de token, qui est le codage entier du morceau de texte original. + +![Exemple de tokenisation](../../../translated_images/tokenizer-example.png?WT.3b4be927057ceb39216ffc617cde2fd4d843e0d7557fc81d08a0018831f601ed.fr.mc_id=academic-105485-koreyst) + +- **Prédiction des tokens de sortie** : Étant donné n tokens en entrée (avec un maximum de n variant d'un modèle à l'autre), le modèle est capable de prédire un token en sortie. Ce token est ensuite incorporé dans l'entrée de l'itération suivante, dans un schéma de fenêtre élargissante, permettant une meilleure expérience utilisateur d'obtenir une (ou plusieurs) phrase(s) en réponse. Cela explique pourquoi, si vous avez déjà joué avec ChatGPT, vous avez peut-être remarqué qu'il semble parfois s'arrêter au milieu d'une phrase. + +- **Processus de sélection, distribution de probabilité** : Le token de sortie est choisi par le modèle en fonction de sa probabilité d'apparaître après la séquence de texte actuelle. Cela est dû au fait que le modèle prédit une distribution de probabilité sur tous les 'tokens suivants' possibles, calculée en fonction de son entraînement. Cependant, le token ayant la probabilité la plus élevée n'est pas toujours choisi à partir de la distribution résultante. Un degré de hasard est ajouté à ce choix, de sorte que le modèle agit de manière non déterministe - nous n'obtenons pas exactement la même sortie pour la même entrée. Ce degré de hasard est ajouté pour simuler le processus de pensée créative et il peut être ajusté à l'aide d'un paramètre de modèle appelé température. + +## Comment notre startup peut-elle tirer parti des modèles de langage de grande taille ? + +Maintenant que nous avons une meilleure compréhension du fonctionnement interne d'un modèle de langage de grande taille, voyons quelques exemples pratiques des tâches les plus courantes qu'ils peuvent accomplir avec succès, en gardant un œil sur notre scénario commercial. +Nous avons dit que la principale capacité d'un modèle de langage de grande taille est _de générer un texte à partir de zéro, à partir d'une entrée textuelle, écrite en langage naturel_. + +Mais quel type d'entrée et de sortie textuelles ? +L'entrée d'un modèle de langage de grande taille est connue sous le nom de prompt, tandis que la sortie est connue sous le nom de completion, un terme qui fait référence au mécanisme du modèle de génération du prochain token pour compléter l'entrée actuelle. Nous allons approfondir ce qu'est un prompt et comment le concevoir de manière à tirer le meilleur parti de notre modèle. Mais pour l'instant, disons simplement qu'un prompt peut inclure : + +- Une **instruction** spécifiant le type de sortie que nous attendons du modèle. Cette instruction peut parfois inclure des exemples ou des données supplémentaires. + + 1. Résumé d'un article, d'un livre, d'avis sur des produits et plus encore, ainsi que l'extraction d'informations à partir de données non structurées. + + ![Exemple de résumé](../../../translated_images/summarization-example.png?WT.cf0bac4d43b9de29ec37e1b7707d9bd67e030f4e884a0ae778c6a3c36be77d79.fr.mc_id=academic-105485-koreyst) + + 2. Idéation créative et conception d'un article, d'un essai, d'une tâche ou plus encore. + + ![Exemple d'écriture créative](../../../translated_images/creative-writing-example.png?WT.04b03c92f46ed96df1138828e37760ac81e06eaa8602de8c4b175a9c514c9a14.fr.mc_id=academic-105485-koreyst) + +- Une **question**, posée sous la forme d'une conversation avec un agent. + + ![Exemple de conversation](../../../translated_images/conversation-example.png?WT.f904fd4c48fbf695b8e5d334e1ec02d66830bbc679ad4b5195f1c563e9bfbdc1.fr.mc_id=academic-105485-koreyst) + +- Un morceau de **texte à compléter**, ce qui constitue implicitement une demande d'assistance à l'écriture. + + ![Exemple de complétion de texte](../../../translated_images/text-completion-example.png?WT.9a641431b14ebbbcaa7d22def9729cf8cc7ab358b1dbc948653e43af47e41f73.fr.mc_id=academic-105485-koreyst) + +- Un morceau de **code** accompagné de la demande de l'expliquer et de le documenter, ou un commentaire demandant de générer un morceau de code effectuant une tâche spécifique. + + ![Exemple de codage](../../../translated_images/coding-example.png?WT.75933a45164ffb74ffbb4a72c8f77b0f76ebcdc676a58ad2871de5d32db63515.fr.mc_id=academic-105485-koreyst) + +Les exemples ci-dessus sont assez simples et ne prétendent pas être une démonstration exhaustive des capacités des modèles de langage de grande taille. Ils veulent juste montrer le potentiel de l'utilisation de l'IA générative, en particulier mais pas uniquement dans le contexte éducatif. + +De plus, la sortie d'un modèle d'IA générative n'est pas parfaite et parfois la créativité du modèle peut jouer contre lui, entraînant une sortie qui est une combinaison de mots que l'utilisateur humain peut interpréter comme une mystification de la réalité, ou elle peut être offensante. L'IA générative n'est pas intelligente - du moins dans la définition plus complète de l'intelligence, incluant le raisonnement critique et créatif ou l'intelligence émotionnelle ; elle n'est pas déterministe, et elle n'est pas fiable, car des fabrications, telles que des références erronées, du contenu et des déclarations, peuvent être combinées avec des informations correctes, et présentées de manière persuasive et confiante. Dans les leçons suivantes, nous aborderons toutes ces limitations et verrons ce que nous pouvons faire pour les atténuer. + +## Devoir + +Votre devoir est de lire davantage sur [l'IA générative](https://en.wikipedia.org/wiki/Generative_artificial_intelligence?WT.mc_id=academic-105485-koreyst) et d'essayer d'identifier un domaine où vous ajouteriez l'IA générative aujourd'hui qui ne l'a pas. En quoi l'impact serait-il différent de le faire à l'ancienne, pouvez-vous faire quelque chose que vous ne pouviez pas faire auparavant, ou êtes-vous plus rapide ? Écrivez un résumé de 300 mots sur ce à quoi ressemblerait votre startup IA de rêve et incluez des titres comme "Problème", "Comment j'utiliserais l'IA", "Impact" et éventuellement un plan d'affaires. + +Si vous avez accompli cette tâche, vous pourriez même être prêt à postuler à l'incubateur de Microsoft, [Microsoft for Startups Founders Hub](https://www.microsoft.com/startups?WT.mc_id=academic-105485-koreyst), nous offrons des crédits pour Azure, OpenAI, du mentorat et bien plus encore, allez voir ! + +## Vérification des connaissances + +Qu'est-ce qui est vrai à propos des modèles de langage de grande taille ? + +1. Vous obtenez la même réponse exacte à chaque fois. +1. Il fait les choses parfaitement, excellent pour additionner des chiffres, produire du code fonctionnel, etc. +1. La réponse peut varier malgré l'utilisation du même prompt. Il est également excellent pour vous donner une première ébauche de quelque chose, que ce soit du texte ou du code. Mais vous devez améliorer les résultats. + +R : 3, un LLM est non déterministe, la réponse varie, cependant, vous pouvez contrôler sa variance via un réglage de température. Vous ne devriez pas non plus vous attendre à ce qu'il fasse les choses parfaitement, il est là pour faire le gros du travail pour vous, ce qui signifie souvent que vous obtenez une bonne première tentative de quelque chose que vous devez améliorer progressivement. + +## Bon travail ! Continuez le voyage + +Après avoir terminé cette leçon, consultez notre [collection d'apprentissage sur l'IA générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à améliorer vos connaissances en IA générative ! + +Rendez-vous à la leçon 2 où nous verrons comment [explorer et comparer différents types de LLM](../02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst) ! + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatisée par intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/02-exploring-and-comparing-different-llms/README.md b/translations/fr/02-exploring-and-comparing-different-llms/README.md new file mode 100644 index 000000000..29aedb7c7 --- /dev/null +++ b/translations/fr/02-exploring-and-comparing-different-llms/README.md @@ -0,0 +1,201 @@ +# Explorer et comparer différents LLM + +[![Explorer et comparer différents LLM](../../../translated_images/02-lesson-banner.png?WT.96d85175e46909d65f6895923ed5f3ad0ae5e874792ccad49542fcfe8ebd12dd.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson2-gh?WT.mc_id=academic-105485-koreyst) + +> _Cliquez sur l'image ci-dessus pour visionner la vidéo de cette leçon_ + +Dans la leçon précédente, nous avons vu comment l'IA générative change le paysage technologique, comment fonctionnent les grands modèles de langage (LLM) et comment une entreprise - comme notre startup - peut les appliquer à ses cas d'utilisation et se développer ! Dans ce chapitre, nous cherchons à comparer et à contraster différents types de grands modèles de langage (LLM) pour comprendre leurs avantages et inconvénients. + +La prochaine étape dans le parcours de notre startup est d'explorer le paysage actuel des LLM et de comprendre lesquels sont adaptés à notre cas d'utilisation. + +## Introduction + +Cette leçon couvrira : + +- Différents types de LLM dans le paysage actuel. +- Tester, itérer et comparer différents modèles pour votre cas d'utilisation dans Azure. +- Comment déployer un LLM. + +## Objectifs d'apprentissage + +Après avoir terminé cette leçon, vous serez capable de : + +- Sélectionner le bon modèle pour votre cas d'utilisation. +- Comprendre comment tester, itérer et améliorer les performances de votre modèle. +- Savoir comment les entreprises déploient des modèles. + +## Comprendre les différents types de LLM + +Les LLM peuvent avoir plusieurs catégorisations basées sur leur architecture, leurs données d'entraînement et leur cas d'utilisation. Comprendre ces différences aidera notre startup à choisir le bon modèle pour le scénario, et à comprendre comment tester, itérer et améliorer les performances. + +Il existe de nombreux types de modèles LLM différents, votre choix de modèle dépend de l'utilisation que vous souhaitez en faire, de vos données, du montant que vous êtes prêt à payer et plus encore. + +Selon que vous souhaitez utiliser les modèles pour la génération de texte, d'audio, de vidéo, d'images, etc., vous pourriez opter pour un type de modèle différent. + +- **Reconnaissance audio et vocale**. Pour cela, les modèles de type Whisper sont un excellent choix car ils sont polyvalents et visent la reconnaissance vocale. Ils sont entraînés sur divers audios et peuvent effectuer une reconnaissance vocale multilingue. En savoir plus sur [les modèles de type Whisper ici](https://platform.openai.com/docs/models/whisper?WT.mc_id=academic-105485-koreyst). + +- **Génération d'images**. Pour la génération d'images, DALL-E et Midjourney sont deux choix très connus. DALL-E est proposé par Azure OpenAI. [Lisez-en plus sur DALL-E ici](https://platform.openai.com/docs/models/dall-e?WT.mc_id=academic-105485-koreyst) et aussi dans le chapitre 9 de ce programme. + +- **Génération de texte**. La plupart des modèles sont entraînés sur la génération de texte et vous avez un large éventail de choix allant de GPT-3.5 à GPT-4. Ils ont des coûts différents, GPT-4 étant le plus cher. Cela vaut la peine de regarder dans le [Azure OpenAI playground](https://oai.azure.com/portal/playground?WT.mc_id=academic-105485-koreyst) pour évaluer quels modèles correspondent le mieux à vos besoins en termes de capacité et de coût. + +- **Multimodalité**. Si vous cherchez à gérer plusieurs types de données en entrée et en sortie, vous pourriez vouloir regarder des modèles comme [gpt-4 turbo avec vision ou gpt-4o](https://learn.microsoft.com/azure/ai-services/openai/concepts/models#gpt-4-and-gpt-4-turbo-models?WT.mc_id=academic-105485-koreyst) - les dernières versions des modèles OpenAI - qui sont capables de combiner le traitement du langage naturel à la compréhension visuelle, permettant des interactions via des interfaces multimodales. + +Sélectionner un modèle signifie que vous obtenez certaines capacités de base, qui pourraient ne pas être suffisantes cependant. Souvent, vous avez des données spécifiques à l'entreprise que vous devez d'une manière ou d'une autre communiquer au LLM. Il existe plusieurs choix sur la façon d'aborder cela, plus à ce sujet dans les sections à venir. + +### Modèles de base versus LLM + +Le terme modèle de base a été [inventé par des chercheurs de Stanford](https://arxiv.org/abs/2108.07258?WT.mc_id=academic-105485-koreyst) et défini comme un modèle d'IA qui suit certains critères, tels que : + +- **Ils sont entraînés en utilisant l'apprentissage non supervisé ou auto-supervisé**, ce qui signifie qu'ils sont entraînés sur des données multimodales non étiquetées, et qu'ils ne nécessitent pas d'annotation ou d'étiquetage humain des données pour leur processus d'entraînement. +- **Ce sont des modèles très larges**, basés sur des réseaux de neurones très profonds entraînés sur des milliards de paramètres. +- **Ils sont normalement destinés à servir de ‘base’ pour d'autres modèles**, ce qui signifie qu'ils peuvent être utilisés comme point de départ pour d'autres modèles à construire dessus, ce qui peut être fait par ajustement fin. + +![Modèles de base versus LLM](../../../translated_images/FoundationModel.png?WT.9690c2a9f6be278baf730a5b26ea901ac6d6ede04cad555ef2b59d774ba557eb.fr.mc_id=academic-105485-koreyst) + +Source de l'image : [Guide essentiel des modèles de base et des grands modèles de langage | par Babar M Bhatti | Medium +](https://thebabar.medium.com/essential-guide-to-foundation-models-and-large-language-models-27dab58f7404) + +Pour clarifier davantage cette distinction, prenons ChatGPT comme exemple. Pour construire la première version de ChatGPT, un modèle appelé GPT-3.5 a servi de modèle de base. Cela signifie qu'OpenAI a utilisé des données spécifiques au chat pour créer une version ajustée de GPT-3.5 qui était spécialisée pour bien performer dans des scénarios conversationnels, tels que les chatbots. + +![Modèle de base](../../../translated_images/Multimodal.png?WT.29151b07403f77b38d7dc2a3069f4c171198d59c9df6bdfccd4326c209db4432.fr.mc_id=academic-105485-koreyst) + +Source de l'image : [2108.07258.pdf (arxiv.org)](https://arxiv.org/pdf/2108.07258.pdf?WT.mc_id=academic-105485-koreyst) + +### Modèles open source versus propriétaires + +Une autre façon de catégoriser les LLM est de savoir s'ils sont open source ou propriétaires. + +Les modèles open source sont des modèles qui sont mis à disposition du public et peuvent être utilisés par n'importe qui. Ils sont souvent mis à disposition par l'entreprise qui les a créés, ou par la communauté de recherche. Ces modèles peuvent être inspectés, modifiés et personnalisés pour les divers cas d'utilisation dans les LLM. Cependant, ils ne sont pas toujours optimisés pour une utilisation en production, et peuvent ne pas être aussi performants que les modèles propriétaires. De plus, le financement des modèles open source peut être limité, et ils peuvent ne pas être maintenus à long terme ou ne pas être mis à jour avec les dernières recherches. Des exemples de modèles open source populaires incluent [Alpaca](https://crfm.stanford.edu/2023/03/13/alpaca.html?WT.mc_id=academic-105485-koreyst), [Bloom](https://huggingface.co/bigscience/bloom) et [LLaMA](https://llama.meta.com). + +Les modèles propriétaires sont des modèles qui appartiennent à une entreprise et ne sont pas mis à disposition du public. Ces modèles sont souvent optimisés pour une utilisation en production. Cependant, ils ne peuvent pas être inspectés, modifiés ou personnalisés pour différents cas d'utilisation. De plus, ils ne sont pas toujours disponibles gratuitement, et peuvent nécessiter un abonnement ou un paiement pour être utilisés. De plus, les utilisateurs n'ont pas le contrôle sur les données utilisées pour entraîner le modèle, ce qui signifie qu'ils doivent faire confiance au propriétaire du modèle pour garantir l'engagement en matière de confidentialité des données et d'utilisation responsable de l'IA. Des exemples de modèles propriétaires populaires incluent [OpenAI models](https://platform.openai.com/docs/models/overview?WT.mc_id=academic-105485-koreyst), [Google Bard](https://sapling.ai/llm/bard?WT.mc_id=academic-105485-koreyst) ou [Claude 2](https://www.anthropic.com/index/claude-2?WT.mc_id=academic-105485-koreyst). + +### Embedding versus génération d'images versus génération de texte et de code + +Les LLM peuvent également être catégorisés par la sortie qu'ils génèrent. + +Les embeddings sont un ensemble de modèles qui peuvent convertir du texte en une forme numérique, appelée embedding, qui est une représentation numérique du texte d'entrée. Les embeddings facilitent la compréhension par les machines des relations entre les mots ou les phrases et peuvent être consommés comme entrées par d'autres modèles, tels que les modèles de classification, ou les modèles de clustering qui ont de meilleures performances sur les données numériques. Les modèles d'embedding sont souvent utilisés pour l'apprentissage par transfert, où un modèle est construit pour une tâche de substitution pour laquelle il y a une abondance de données, puis les poids du modèle (embeddings) sont réutilisés pour d'autres tâches en aval. Un exemple de cette catégorie est [OpenAI embeddings](https://platform.openai.com/docs/models/embeddings?WT.mc_id=academic-105485-koreyst). + +![Embedding](../../../translated_images/Embedding.png?WT.15a2282d046c6d94a54f553fa9e7f19e3ef0e65f9eb05f4d476a5d28b2dead18.fr.mc_id=academic-105485-koreyst) + +Les modèles de génération d'images sont des modèles qui génèrent des images. Ces modèles sont souvent utilisés pour l'édition d'images, la synthèse d'images et la traduction d'images. Les modèles de génération d'images sont souvent entraînés sur de grands ensembles de données d'images, tels que [LAION-5B](https://laion.ai/blog/laion-5b/?WT.mc_id=academic-105485-koreyst), et peuvent être utilisés pour générer de nouvelles images ou pour éditer des images existantes avec des techniques de inpainting, de super-résolution et de colorisation. Des exemples incluent [DALL-E-3](https://openai.com/dall-e-3?WT.mc_id=academic-105485-koreyst) et [Stable Diffusion models](https://github.com/Stability-AI/StableDiffusion?WT.mc_id=academic-105485-koreyst). + +![Génération d'images](../../../translated_images/Image.png?WT.6a1995ff7d9be5a713e6aaee5f1625f31620756937c283e292ef5ffe1e30ed11.fr.mc_id=academic-105485-koreyst) + +Les modèles de génération de texte et de code sont des modèles qui génèrent du texte ou du code. Ces modèles sont souvent utilisés pour la synthèse de texte, la traduction et la réponse à des questions. Les modèles de génération de texte sont souvent entraînés sur de grands ensembles de données de texte, tels que [BookCorpus](https://www.cv-foundation.org/openaccess/content_iccv_2015/html/Zhu_Aligning_Books_and_ICCV_2015_paper.html?WT.mc_id=academic-105485-koreyst), et peuvent être utilisés pour générer du nouveau texte ou pour répondre à des questions. Les modèles de génération de code, comme [CodeParrot](https://huggingface.co/codeparrot?WT.mc_id=academic-105485-koreyst), sont souvent entraînés sur de grands ensembles de données de code, tels que GitHub, et peuvent être utilisés pour générer du nouveau code ou pour corriger des bugs dans du code existant. + +![Génération de texte et de code](../../../translated_images/Text.png?WT.b55b7b9b96faac1d758fb555436c56c5a323a55743b75e70198160caca3fb73c.fr.mc_id=academic-105485-koreyst) + +### Encodeur-Décodeur versus Décodeur uniquement + +Pour parler des différents types d'architectures de LLM, utilisons une analogie. + +Imaginez que votre manager vous ait donné la tâche de rédiger un quiz pour les étudiants. Vous avez deux collègues ; l'un s'occupe de créer le contenu et l'autre de le réviser. + +Le créateur de contenu est comme un modèle Décodeur uniquement, il peut regarder le sujet et voir ce que vous avez déjà écrit, puis il peut rédiger un cours basé là-dessus. Ils sont très bons pour écrire un contenu engageant et informatif, mais ils ne sont pas très bons pour comprendre le sujet et les objectifs d'apprentissage. Quelques exemples de modèles Décodeur sont les modèles de la famille GPT, tels que GPT-3. + +Le réviseur est comme un modèle Encodeur uniquement, il regarde le cours écrit et les réponses, remarquant la relation entre eux et comprenant le contexte, mais il n'est pas bon pour générer du contenu. Un exemple de modèle Encodeur uniquement serait BERT. + +Imaginez que nous puissions également avoir quelqu'un qui pourrait créer et réviser le quiz, c'est un modèle Encodeur-Décodeur. Quelques exemples seraient BART et T5. + +### Service versus Modèle + +Maintenant, parlons de la différence entre un service et un modèle. Un service est un produit offert par un fournisseur de services cloud, et est souvent une combinaison de modèles, de données et d'autres composants. Un modèle est le composant central d'un service, et est souvent un modèle de base, tel qu'un LLM. + +Les services sont souvent optimisés pour une utilisation en production et sont souvent plus faciles à utiliser que les modèles, via une interface utilisateur graphique. Cependant, les services ne sont pas toujours disponibles gratuitement, et peuvent nécessiter un abonnement ou un paiement pour être utilisés, en échange de l'utilisation des équipements et ressources du propriétaire du service, optimisant les dépenses et évoluant facilement. Un exemple de service est [Azure OpenAI Service](https://learn.microsoft.com/azure/ai-services/openai/overview?WT.mc_id=academic-105485-koreyst), qui propose un plan tarifaire à la consommation, ce qui signifie que les utilisateurs sont facturés proportionnellement à leur utilisation du service. De plus, Azure OpenAI Service offre une sécurité de niveau entreprise et un cadre d'IA responsable en plus des capacités des modèles. + +Les modèles ne sont que le réseau de neurones, avec les paramètres, les poids et autres. Permettant aux entreprises de fonctionner localement, cependant, elles auraient besoin d'acheter de l'équipement, de construire une structure pour évoluer et d'acheter une licence ou d'utiliser un modèle open source. Un modèle comme LLaMA est disponible pour être utilisé, nécessitant une puissance de calcul pour exécuter le modèle. + +## Comment tester et itérer avec différents modèles pour comprendre les performances sur Azure + +Une fois que notre équipe a exploré le paysage actuel des LLM et identifié de bons candidats pour leurs scénarios, la prochaine étape est de les tester sur leurs données et sur leur charge de travail. C'est un processus itératif, réalisé par des expériences et des mesures. La plupart des modèles que nous avons mentionnés dans les paragraphes précédents (modèles OpenAI, modèles open source comme Llama2, et transformers Hugging Face) sont disponibles dans le [Catalogue de modèles](https://learn.microsoft.com/azure/ai-studio/how-to/model-catalog-overview?WT.mc_id=academic-105485-koreyst) dans [Azure AI Studio](https://ai.azure.com/?WT.mc_id=academic-105485-koreyst). + +[Azure AI Studio](https://learn.microsoft.com/azure/ai-studio/what-is-ai-studio?WT.mc_id=academic-105485-koreyst) est une plateforme cloud conçue pour les développeurs pour construire des applications d'IA générative et gérer tout le cycle de développement - de l'expérimentation à l'évaluation - en combinant tous les services Azure AI dans un seul hub avec une interface utilisateur pratique. Le Catalogue de modèles dans Azure AI Studio permet à l'utilisateur de : + +- Trouver le modèle de base d'intérêt dans le catalogue - soit propriétaire soit open source, en filtrant par tâche, licence ou nom. Pour améliorer la recherche, les modèles sont organisés en collections, comme la collection Azure OpenAI, la collection Hugging Face, et plus encore. + +![Catalogue de modèles](../../../translated_images/AzureAIStudioModelCatalog.png?WT.cd7b78fc6a7b010869adb0defabce1ea5fbe62131aa7f59e54a083be8d789d24.fr.mc_id=academic-105485-koreyst) + +- Examiner la carte du modèle, y compris une description détaillée de l'utilisation prévue et des données d'entraînement, des exemples de code et des résultats d'évaluation sur la bibliothèque d'évaluations internes. + +![Carte du modèle](../../../translated_images/ModelCard.png?WT.cd385d3d0228f86cef5987e3074be75f377a95ba505d6805f7c6965dc5972693.fr.mc_id=academic-105485-koreyst) +- Comparez les benchmarks entre les modèles et les ensembles de données disponibles dans l'industrie pour évaluer lequel répond au scénario commercial, via le volet [Model Benchmarks](https://learn.microsoft.com/azure/ai-studio/how-to/model-benchmarks?WT.mc_id=academic-105485-koreyst). + +![Benchmarks des modèles](../../../translated_images/ModelBenchmarks.png?WT.634f688bb2a74b3c90a9212ecfb9b99045405b2414be3d17429cfea319c06f61.fr.mc_id=academic-105485-koreyst) + +- Affinez le modèle sur des données d'entraînement personnalisées pour améliorer les performances du modèle dans une charge de travail spécifique, en tirant parti des capacités d'expérimentation et de suivi d'Azure AI Studio. + +![Affinement du modèle](../../../translated_images/FineTuning.png?WT.523a6ab7580c924e42e8478d072fb670f879033779b8ab5a6abb155d2fc63d5a.fr.mc_id=academic-105485-koreyst) + +- Déployez le modèle pré-entraîné original ou la version affinée vers une inférence en temps réel à distance - calcul géré - ou un point de terminaison API sans serveur - [paiement à l'utilisation](https://learn.microsoft.com/azure/ai-studio/how-to/model-catalog-overview#model-deployment-managed-compute-and-serverless-api-pay-as-you-go?WT.mc_id=academic-105485-koreyst) - pour permettre aux applications de l'utiliser. + +![Déploiement du modèle](../../../translated_images/ModelDeploy.png?WT.a765ca6b7a396eb5d2fd346f8a211542f6fe578e2218bbe16f9fcdb5ca8f3661.fr.mc_id=academic-105485-koreyst) + +> [!NOTE] +> Tous les modèles du catalogue ne sont pas actuellement disponibles pour l'affinement et/ou le déploiement à la demande. Consultez la fiche du modèle pour connaître les capacités et les limitations du modèle. + +## Améliorer les résultats des LLM + +Nous avons exploré avec notre équipe de startup différents types de LLM et une plateforme Cloud (Azure Machine Learning) qui nous permet de comparer différents modèles, de les évaluer sur des données de test, d'améliorer les performances et de les déployer sur des points de terminaison d'inférence. + +Mais quand devraient-ils envisager d'affiner un modèle plutôt que d'utiliser un modèle pré-entraîné ? Existe-t-il d'autres approches pour améliorer les performances du modèle sur des charges de travail spécifiques ? + +Il existe plusieurs approches qu'une entreprise peut utiliser pour obtenir les résultats dont elle a besoin à partir d'un LLM. Vous pouvez sélectionner différents types de modèles avec différents degrés d'entraînement lors du déploiement d'un LLM en production, avec différents niveaux de complexité, de coût et de qualité. Voici quelques approches différentes : + +- **Conception de prompts avec contexte**. L'idée est de fournir suffisamment de contexte lorsque vous faites un prompt pour vous assurer d'obtenir les réponses dont vous avez besoin. + +- **Génération augmentée par récupération, RAG**. Vos données peuvent exister dans une base de données ou un point de terminaison web par exemple, pour garantir que ces données, ou un sous-ensemble de celles-ci, soient incluses au moment du prompt, vous pouvez récupérer les données pertinentes et les intégrer dans le prompt de l'utilisateur. + +- **Modèle affiné**. Ici, vous avez entraîné le modèle davantage sur vos propres données, ce qui rend le modèle plus précis et réactif à vos besoins, mais cela peut être coûteux. + +![Déploiement des LLMs](../../../translated_images/Deploy.png?WT.0eeb36a208bf2bf97ea1058e54c74e13f5c810679cd7f3600cb2084b98d737be.fr.mc_id=academic-105485-koreyst) + +Source de l'image : [Four Ways that Enterprises Deploy LLMs | Fiddler AI Blog](https://www.fiddler.ai/blog/four-ways-that-enterprises-deploy-llms?WT.mc_id=academic-105485-koreyst) + +### Conception de Prompts avec Contexte + +Les LLM pré-entraînés fonctionnent très bien sur des tâches générales de langage naturel, même en les appelant avec un court prompt, comme une phrase à compléter ou une question – le soi-disant apprentissage "zéro-shot". + +Cependant, plus l'utilisateur peut formuler sa requête, avec une demande détaillée et des exemples – le Contexte – plus la réponse sera précise et proche des attentes de l'utilisateur. Dans ce cas, on parle d'apprentissage "one-shot" si le prompt inclut un seul exemple et d'apprentissage "few-shot" s'il inclut plusieurs exemples. La conception de prompts avec contexte est l'approche la plus rentable pour commencer. + +### Génération Augmentée par Récupération (RAG) + +Les LLM ont la limitation de ne pouvoir utiliser que les données qui ont été utilisées lors de leur entraînement pour générer une réponse. Cela signifie qu'ils ne savent rien des faits survenus après leur processus d'entraînement et qu'ils ne peuvent pas accéder à des informations non publiques (comme les données de l'entreprise). Cela peut être surmonté grâce à la RAG, une technique qui augmente le prompt avec des données externes sous forme de morceaux de documents, en tenant compte des limites de longueur du prompt. Cela est soutenu par des outils de base de données vectorielle (comme [Azure Vector Search](https://learn.microsoft.com/azure/search/vector-search-overview?WT.mc_id=academic-105485-koreyst)) qui récupèrent les morceaux utiles à partir de diverses sources de données prédéfinies et les ajoutent au Contexte du prompt. + +Cette technique est très utile lorsqu'une entreprise n'a pas assez de données, de temps ou de ressources pour affiner un LLM, mais souhaite tout de même améliorer les performances sur une charge de travail spécifique et réduire les risques de fabrications, c'est-à-dire la mystification de la réalité ou du contenu nuisible. + +### Modèle Affiné + +L'affinement est un processus qui tire parti de l'apprentissage par transfert pour "adapter" le modèle à une tâche en aval ou pour résoudre un problème spécifique. Contrairement à l'apprentissage few-shot et à la RAG, il en résulte un nouveau modèle généré, avec des poids et des biais mis à jour. Il nécessite un ensemble d'exemples d'entraînement composé d'une seule entrée (le prompt) et de sa sortie associée (la complétion). Cette approche serait préférée si : + +- **Utilisation de modèles affinés**. Une entreprise souhaite utiliser des modèles affinés moins performants (comme les modèles d'intégration) plutôt que des modèles à haute performance, ce qui donne une solution plus rentable et rapide. + +- **Considération de la latence**. La latence est importante pour un cas d'utilisation spécifique, donc il n'est pas possible d'utiliser des prompts très longs ou le nombre d'exemples qui devraient être appris par le modèle ne correspond pas à la limite de longueur du prompt. + +- **Rester à jour**. Une entreprise dispose de beaucoup de données de haute qualité et d'étiquettes de vérité terrain et des ressources nécessaires pour maintenir ces données à jour au fil du temps. + +### Modèle Entraîné + +Entraîner un LLM à partir de zéro est sans aucun doute l'approche la plus difficile et la plus complexe à adopter, nécessitant des quantités massives de données, des ressources qualifiées et une puissance de calcul appropriée. Cette option devrait être envisagée uniquement dans un scénario où une entreprise a un cas d'utilisation spécifique au domaine et une grande quantité de données centrées sur le domaine. + +## Vérification des connaissances + +Quelle pourrait être une bonne approche pour améliorer les résultats de complétion des LLM ? + +1. Conception de prompts avec contexte +2. RAG +3. Modèle affiné + +A:3, si vous avez le temps et les ressources et des données de haute qualité, l'affinement est la meilleure option pour rester à jour. Cependant, si vous cherchez à améliorer les choses et que vous manquez de temps, il vaut la peine de considérer d'abord la RAG. + +## 🚀 Défi + +Renseignez-vous davantage sur comment vous pouvez [utiliser la RAG](https://learn.microsoft.com/azure/search/retrieval-augmented-generation-overview?WT.mc_id=academic-105485-koreyst) pour votre entreprise. + +## Bon travail, continuez votre apprentissage + +Après avoir terminé cette leçon, consultez notre [collection d'apprentissage sur l'IA générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à approfondir vos connaissances en IA générative ! + +Rendez-vous à la leçon 3 où nous verrons comment [construire avec l'IA générative de manière responsable](../03-using-generative-ai-responsibly/README.md?WT.mc_id=academic-105485-koreyst) ! + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique basés sur l'intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/03-using-generative-ai-responsibly/README.md b/translations/fr/03-using-generative-ai-responsibly/README.md new file mode 100644 index 000000000..679efcb3f --- /dev/null +++ b/translations/fr/03-using-generative-ai-responsibly/README.md @@ -0,0 +1,136 @@ +# Utiliser l'IA Générative de Manière Responsable + +[![Utiliser l'IA Générative de Manière Responsable](../../../translated_images/03-lesson-banner.png?WT.b0b917735411b39a55748e827c5c3121004890110b27f306bfe685c450c81ff9.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson3-gh?WT.mc_id=academic-105485-koreyst) + +> _Cliquez sur l'image ci-dessus pour visionner la vidéo de cette leçon_ + +Il est facile d'être fasciné par l'IA et en particulier par l'IA générative, mais il est important de réfléchir à la manière de l'utiliser de manière responsable. Il faut considérer des aspects tels que la garantie que les résultats soient équitables, non-nuisibles, et plus encore. Ce chapitre vise à vous fournir le contexte mentionné, ce qu'il faut prendre en compte, et comment prendre des mesures actives pour améliorer votre utilisation de l'IA. + +## Introduction + +Cette leçon couvrira : + +- Pourquoi vous devriez donner la priorité à l'IA Responsable lors de la création d'applications d'IA Générative. +- Les principes fondamentaux de l'IA Responsable et leur relation avec l'IA Générative. +- Comment mettre en pratique ces principes de l'IA Responsable grâce à des stratégies et des outils. + +## Objectifs d'Apprentissage + +Après avoir complété cette leçon, vous saurez : + +- L'importance de l'IA Responsable lors de la création d'applications d'IA Générative. +- Quand réfléchir et appliquer les principes fondamentaux de l'IA Responsable lors de la création d'applications d'IA Générative. +- Quels outils et stratégies sont à votre disposition pour mettre en pratique le concept de l'IA Responsable. + +## Principes de l'IA Responsable + +L'engouement pour l'IA Générative n'a jamais été aussi fort. Cet enthousiasme a attiré de nombreux nouveaux développeurs, de l'attention et des financements dans ce domaine. Bien que cela soit très positif pour quiconque cherche à construire des produits et des entreprises utilisant l'IA Générative, il est également important de procéder de manière responsable. + +Tout au long de ce cours, nous nous concentrons sur la construction de notre startup et de notre produit éducatif basé sur l'IA. Nous utiliserons les principes de l'IA Responsable : Équité, Inclusivité, Fiabilité/Sécurité, Sécurité & Confidentialité, Transparence et Responsabilité. Avec ces principes, nous explorerons comment ils se rapportent à notre utilisation de l'IA Générative dans nos produits. + +## Pourquoi Prioriser l'IA Responsable + +Lors de la création d'un produit, adopter une approche centrée sur l'humain en gardant à l'esprit l'intérêt de votre utilisateur conduit aux meilleurs résultats. + +La particularité de l'IA Générative est son pouvoir de créer des réponses utiles, des informations, des conseils et du contenu pour les utilisateurs. Cela peut se faire sans de nombreuses étapes manuelles, ce qui peut conduire à des résultats très impressionnants. Sans planification et stratégies appropriées, cela peut malheureusement entraîner des résultats nuisibles pour vos utilisateurs, votre produit et la société dans son ensemble. + +Examinons certains (mais pas tous) de ces résultats potentiellement nuisibles : + +### Hallucinations + +Les hallucinations sont un terme utilisé pour décrire lorsque un LLM produit un contenu qui est soit complètement insensé, soit quelque chose que nous savons être factuellement incorrect basé sur d'autres sources d'information. + +Prenons par exemple le cas où nous développons une fonctionnalité pour notre startup qui permet aux étudiants de poser des questions historiques à un modèle. Un étudiant pose la question `Who was the sole survivor of Titanic?` + +Le modèle produit une réponse telle que celle ci-dessous : + +![Demande disant "Qui était le seul survivant du Titanic"](../../../03-using-generative-ai-responsibly/images/ChatGPT-titanic-survivor-prompt.webp) + +> _(Source: [Flying bisons](https://flyingbisons.com?WT.mc_id=academic-105485-koreyst))_ + +C'est une réponse très confiante et détaillée. Malheureusement, elle est incorrecte. Même avec un minimum de recherche, on découvrirait qu'il y avait plus d'un survivant de la catastrophe du Titanic. Pour un étudiant qui commence juste à faire des recherches sur ce sujet, cette réponse peut être suffisamment persuasive pour ne pas être remise en question et traitée comme un fait. Les conséquences de cela peuvent conduire à ce que le système d'IA soit peu fiable et impacte négativement la réputation de notre startup. + +Avec chaque itération d'un LLM donné, nous avons observé des améliorations de performance pour minimiser les hallucinations. Même avec cette amélioration, nous, en tant que développeurs d'applications et utilisateurs, devons rester conscients de ces limitations. + +### Contenu Nuisible + +Nous avons couvert dans la section précédente lorsque un LLM produit des réponses incorrectes ou insensées. Un autre risque dont nous devons être conscients est lorsque un modèle répond avec du contenu nuisible. + +Le contenu nuisible peut être défini comme : + +- Fournir des instructions ou encourager l'auto-mutilation ou le mal envers certains groupes. +- Contenu haineux ou dégradant. +- Orienter la planification de toute attaque ou acte violent. +- Fournir des instructions sur comment trouver du contenu illégal ou commettre des actes illégaux. +- Afficher du contenu sexuellement explicite. + +Pour notre startup, nous voulons nous assurer que nous avons les bons outils et stratégies en place pour empêcher ce type de contenu d'être vu par les étudiants. + +### Manque d'Équité + +L'équité est définie comme "assurer qu'un système d'IA est exempt de biais et de discrimination et qu'il traite tout le monde de manière équitable et égale." Dans le monde de l'IA Générative, nous voulons nous assurer que les visions du monde exclusionnaires des groupes marginalisés ne sont pas renforcées par les résultats du modèle. + +Ces types de résultats ne sont pas seulement destructeurs pour construire des expériences produits positives pour nos utilisateurs, mais ils causent également des dommages sociétaux supplémentaires. En tant que développeurs d'applications, nous devrions toujours garder à l'esprit une base d'utilisateurs large et diversifiée lors de la construction de solutions avec l'IA Générative. + +## Comment Utiliser l'IA Générative de Manière Responsable + +Maintenant que nous avons identifié l'importance de l'IA Générative Responsable, examinons 4 étapes que nous pouvons suivre pour construire nos solutions d'IA de manière responsable : + +![Cycle de Mitigation](../../../translated_images/mitigate-cycle.png?WT.ffc987e1880649a302a311432b78f49faa64e46f65df6350c9c409b5ed79549b.fr.mc_id=academic-105485-koreyst) + +### Mesurer les Dommages Potentiels + +Dans les tests logiciels, nous testons les actions attendues d'un utilisateur sur une application. De la même manière, tester un ensemble diversifié de prompts que les utilisateurs sont le plus susceptibles d'utiliser est un bon moyen de mesurer les dommages potentiels. + +Puisque notre startup développe un produit éducatif, il serait bon de préparer une liste de prompts liés à l'éducation. Cela pourrait être pour couvrir un certain sujet, des faits historiques, et des prompts sur la vie étudiante. + +### Atténuer les Dommages Potentiels + +Il est maintenant temps de trouver des moyens où nous pouvons prévenir ou limiter les dommages potentiels causés par le modèle et ses réponses. Nous pouvons examiner cela en 4 couches différentes : + +![Couches de Mitigation](../../../translated_images/mitigation-layers.png?WT.cb109f48e143f1ff4dee760b4b0c9477c7d11c2fe57f3efdd89f68c1109f2de6.fr.mc_id=academic-105485-koreyst) + +- **Modèle**. Choisir le bon modèle pour le bon cas d'utilisation. Des modèles plus grands et plus complexes comme GPT-4 peuvent causer plus de risques de contenu nuisible lorsqu'ils sont appliqués à des cas d'utilisation plus petits et plus spécifiques. Utiliser vos données d'entraînement pour affiner réduit également le risque de contenu nuisible. + +- **Système de Sécurité**. Un système de sécurité est un ensemble d'outils et de configurations sur la plateforme servant le modèle qui aident à atténuer les dommages. Un exemple de ceci est le système de filtrage de contenu sur le service Azure OpenAI. Les systèmes devraient également détecter les attaques de jailbreak et les activités indésirables comme les requêtes de bots. + +- **Métaprompt**. Les métaprompts et l'ancrage sont des moyens de diriger ou de limiter le modèle basé sur certains comportements et informations. Cela pourrait être l'utilisation d'entrées système pour définir certaines limites du modèle. De plus, fournir des résultats plus pertinents pour le domaine ou le champ d'application du système. + +Cela peut également être l'utilisation de techniques comme la Génération Augmentée par Récupération (RAG) pour que le modèle ne tire des informations que d'une sélection de sources fiables. Il y a une leçon plus tard dans ce cours pour [construire des applications de recherche](../08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst) + +- **Expérience Utilisateur**. La couche finale est celle où l'utilisateur interagit directement avec le modèle via l'interface de notre application d'une certaine manière. De cette façon, nous pouvons concevoir l'UI/UX pour limiter l'utilisateur sur les types d'entrées qu'ils peuvent envoyer au modèle ainsi que le texte ou les images affichés à l'utilisateur. Lors du déploiement de l'application d'IA, nous devons également être transparents sur ce que notre application d'IA Générative peut et ne peut pas faire. + +Nous avons une leçon entière dédiée à [Concevoir l'UX pour les Applications d'IA](../12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) + +- **Évaluer le modèle**. Travailler avec des LLMs peut être difficile car nous n'avons pas toujours le contrôle sur les données sur lesquelles le modèle a été formé. Néanmoins, nous devrions toujours évaluer les performances et les résultats du modèle. Il est toujours important de mesurer la précision du modèle, la similarité, l'ancrage et la pertinence du résultat. Cela aide à fournir transparence et confiance aux parties prenantes et aux utilisateurs. + +### Opérer une Solution d'IA Générative Responsable + +Construire une pratique opérationnelle autour de vos applications d'IA est la dernière étape. Cela inclut de s'associer avec d'autres parties de notre startup comme le service juridique et la sécurité pour s'assurer que nous sommes conformes à toutes les politiques réglementaires. Avant le lancement, nous voulons également élaborer des plans autour de la livraison, de la gestion des incidents et du retour en arrière pour prévenir tout dommage à nos utilisateurs à mesure que nous grandissons. + +## Outils + +Bien que le travail de développement de solutions d'IA Responsable puisse sembler important, c'est un travail qui en vaut la peine. À mesure que le domaine de l'IA Générative se développe, plus d'outils pour aider les développeurs à intégrer efficacement la responsabilité dans leurs flux de travail mûriront. Par exemple, le [Azure AI Content Safety](https://learn.microsoft.com/azure/ai-services/content-safety/overview?WT.mc_id=academic-105485-koreyst) peut aider à détecter le contenu et les images nuisibles via une requête API. + +## Vérification des Connaissances + +Quels sont certains des aspects dont vous devez vous soucier pour garantir une utilisation responsable de l'IA ? + +1. Que la réponse soit correcte. +2. Usage nuisible, que l'IA ne soit pas utilisée à des fins criminelles. +3. S'assurer que l'IA est exempte de biais et de discrimination. + +R : 2 et 3 sont corrects. L'IA Responsable vous aide à réfléchir à la manière d'atténuer les effets nuisibles et les biais et plus encore. + +## 🚀 Défi + +Informez-vous sur [Azure AI Content Safety](https://learn.microsoft.com/azure/ai-services/content-safety/overview?WT.mc_id=academic-105485-koreyst) et voyez ce que vous pouvez adopter pour votre usage. + +## Excellent Travail, Continuez Votre Apprentissage + +Après avoir complété cette leçon, consultez notre [collection d'apprentissage sur l'IA Générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à approfondir vos connaissances sur l'IA Générative ! + +Rendez-vous à la Leçon 4 où nous examinerons les [Fondamentaux de l'Ingénierie des Prompts](../04-prompt-engineering-fundamentals/README.md?WT.mc_id=academic-105485-koreyst) ! + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatisés par IA. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle humaine. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/04-prompt-engineering-fundamentals/README.md b/translations/fr/04-prompt-engineering-fundamentals/README.md new file mode 100644 index 000000000..fca4f9c7c --- /dev/null +++ b/translations/fr/04-prompt-engineering-fundamentals/README.md @@ -0,0 +1,272 @@ +# Fondamentaux de l'Ingénierie des Prompts + +[![Fondamentaux de l'Ingénierie des Prompts](../../../translated_images/04-lesson-banner.png?WT.d904d510033d5f0283f2caff5f735050f929dd196a1fc25fefa18433347fe463.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson4-gh?WT.mc_id=academic-105485-koreyst) + +## Introduction +Ce module couvre les concepts et techniques essentiels pour créer des prompts efficaces dans les modèles d'IA générative. La façon dont vous rédigez votre prompt pour un LLM compte également. Un prompt soigneusement élaboré peut améliorer la qualité de la réponse. Mais que signifient exactement des termes comme _prompt_ et _ingénierie des prompts_? Et comment améliorer l'_entrée_ du prompt que j'envoie au LLM? Ce sont les questions auxquelles nous essaierons de répondre dans ce chapitre et le suivant. + +L'_IA générative_ est capable de créer de nouveaux contenus (par exemple, texte, images, audio, code, etc.) en réponse aux demandes des utilisateurs. Elle y parvient en utilisant des _modèles de langage de grande taille_ comme la série GPT ("Generative Pre-trained Transformer") d'OpenAI, entraînés à utiliser le langage naturel et le code. + +Les utilisateurs peuvent désormais interagir avec ces modèles en utilisant des paradigmes familiers comme le chat, sans nécessiter d'expertise technique ou de formation. Les modèles sont basés sur des _prompts_ - les utilisateurs envoient une entrée textuelle (prompt) et obtiennent une réponse de l'IA (complétion). Ils peuvent ensuite "discuter avec l'IA" de manière itérative, dans des conversations à plusieurs tours, en affinant leur prompt jusqu'à ce que la réponse corresponde à leurs attentes. + +Les "prompts" deviennent désormais l'interface de _programmation_ principale pour les applications d'IA générative, indiquant aux modèles ce qu'il faut faire et influençant la qualité des réponses retournées. L'"Ingénierie des Prompts" est un domaine d'étude en pleine croissance qui se concentre sur la _conception et l'optimisation_ des prompts pour fournir des réponses cohérentes et de qualité à grande échelle. + +## Objectifs d'apprentissage + +Dans cette leçon, nous apprenons ce qu'est l'Ingénierie des Prompts, pourquoi elle est importante, et comment nous pouvons créer des prompts plus efficaces pour un modèle et un objectif d'application donnés. Nous comprendrons les concepts de base et les meilleures pratiques pour l'ingénierie des prompts - et découvrirons un environnement interactif de "bac à sable" Jupyter Notebooks où nous pourrons voir ces concepts appliqués à des exemples réels. + +À la fin de cette leçon, nous serons capables de : + +1. Expliquer ce qu'est l'ingénierie des prompts et pourquoi elle est importante. +2. Décrire les composants d'un prompt et comment ils sont utilisés. +3. Apprendre les meilleures pratiques et techniques pour l'ingénierie des prompts. +4. Appliquer les techniques apprises à des exemples réels, en utilisant un point de terminaison OpenAI. + +## Termes clés + +Ingénierie des Prompts : La pratique de concevoir et affiner les entrées pour guider les modèles d'IA vers la production des sorties souhaitées. +Tokenisation : Le processus de conversion du texte en unités plus petites, appelées tokens, qu'un modèle peut comprendre et traiter. +LLMs ajustés par instruction : Modèles de Langage de Grande Taille (LLMs) qui ont été ajustés avec des instructions spécifiques pour améliorer la précision et la pertinence de leurs réponses. + +## Bac à sable d'apprentissage + +L'ingénierie des prompts est actuellement plus un art qu'une science. La meilleure façon d'améliorer notre intuition est de _pratiquer davantage_ et d'adopter une approche d'essais et d'erreurs qui combine expertise du domaine d'application avec techniques recommandées et optimisations spécifiques au modèle. + +Le Jupyter Notebook accompagnant cette leçon fournit un environnement de _bac à sable_ où vous pouvez essayer ce que vous apprenez - au fur et à mesure ou dans le cadre du défi de code à la fin. Pour exécuter les exercices, vous aurez besoin de : + +1. **Une clé API Azure OpenAI** - le point de terminaison de service pour un LLM déployé. +2. **Un environnement d'exécution Python** - dans lequel le Notebook peut être exécuté. +3. **Variables d'environnement locales** - _complétez les étapes de [CONFIGURATION](./../00-course-setup/SETUP.md?WT.mc_id=academic-105485-koreyst) maintenant pour être prêt_. + +Le notebook est livré avec des exercices _de démarrage_ - mais vous êtes encouragé à ajouter vos propres sections _Markdown_ (description) et _Code_ (demandes de prompts) pour essayer plus d'exemples ou d'idées - et développer votre intuition pour la conception de prompts. + +## Guide illustré + +Vous voulez avoir une vue d'ensemble de ce que cette leçon couvre avant de vous lancer? Consultez ce guide illustré, qui vous donne une idée des principaux sujets abordés et des points clés à garder à l'esprit pour chacun d'eux. La feuille de route de la leçon vous emmène de la compréhension des concepts de base et des défis à leur résolution avec des techniques d'ingénierie des prompts pertinentes et des meilleures pratiques. Notez que la section "Techniques Avancées" de ce guide fait référence à un contenu couvert dans le _prochain_ chapitre de ce programme. + +![Guide illustré de l'ingénierie des prompts](../../../translated_images/04-prompt-engineering-sketchnote.png?WT.a936f69bc33c7a783015f6747ea56d0f0071349644cd9031f9b8d20a3eec8696.fr.mc_id=academic-105485-koreyst) + +## Notre startup + +Parlons maintenant de la façon dont _ce sujet_ est lié à notre mission de startup pour [apporter l'innovation de l'IA à l'éducation](https://educationblog.microsoft.com/2023/06/collaborating-to-bring-ai-innovation-to-education?WT.mc_id=academic-105485-koreyst). Nous voulons construire des applications d'apprentissage personnalisé alimentées par l'IA - alors réfléchissons à la façon dont différents utilisateurs de notre application pourraient "concevoir" des prompts : + +- **Les administrateurs** pourraient demander à l'IA d'_analyser les données du programme pour identifier les lacunes de couverture_. L'IA peut résumer les résultats ou les visualiser avec du code. +- **Les éducateurs** pourraient demander à l'IA de _générer un plan de leçon pour un public cible et un sujet_. L'IA peut construire le plan personnalisé dans un format spécifié. +- **Les étudiants** pourraient demander à l'IA de les _tutorier dans un sujet difficile_. L'IA peut désormais guider les étudiants avec des leçons, des indices et des exemples adaptés à leur niveau. + +Ce n'est que la partie émergée de l'iceberg. Consultez [Prompts Pour l'Éducation](https://github.com/microsoft/prompts-for-edu/tree/main?WT.mc_id=academic-105485-koreyst) - une bibliothèque de prompts open-source organisée par des experts en éducation - pour avoir une idée plus large des possibilités! _Essayez d'exécuter certains de ces prompts dans le bac à sable ou en utilisant le OpenAI Playground pour voir ce qui se passe!_ + +## Qu'est-ce que l'ingénierie des prompts? + +Nous avons commencé cette leçon en définissant **l'Ingénierie des Prompts** comme le processus de _conception et d'optimisation_ des entrées textuelles (prompts) pour fournir des réponses cohérentes et de qualité (complétions) pour un objectif d'application et un modèle donnés. Nous pouvons considérer cela comme un processus en deux étapes : + +- _concevoir_ le prompt initial pour un modèle et un objectif donnés +- _affiner_ le prompt de manière itérative pour améliorer la qualité de la réponse + +C'est nécessairement un processus d'essais et d'erreurs qui nécessite de l'intuition et des efforts de la part de l'utilisateur pour obtenir des résultats optimaux. Alors pourquoi est-ce important? Pour répondre à cette question, nous devons d'abord comprendre trois concepts : + +- _Tokenisation_ = comment le modèle "voit" le prompt +- _Base LLMs_ = comment le modèle de base "traite" un prompt +- _LLMs ajustés par instruction_ = comment le modèle peut maintenant voir les "tâches" + +### Tokenisation + +Un LLM voit les prompts comme une _séquence de tokens_ où différents modèles (ou versions d'un modèle) peuvent tokeniser le même prompt de différentes manières. Étant donné que les LLMs sont entraînés sur des tokens (et non sur du texte brut), la façon dont les prompts sont tokenisés a un impact direct sur la qualité de la réponse générée. + +Pour avoir une intuition sur le fonctionnement de la tokenisation, essayez des outils comme le [Tokeniseur OpenAI](https://platform.openai.com/tokenizer?WT.mc_id=academic-105485-koreyst) montré ci-dessous. Copiez votre prompt - et voyez comment il est converti en tokens, en prêtant attention à la façon dont les caractères d'espace et les signes de ponctuation sont traités. Notez que cet exemple montre un ancien LLM (GPT-3) - donc l'essayer avec un modèle plus récent peut produire un résultat différent. + +![Tokenisation](../../../translated_images/04-tokenizer-example.png?WT.f5399316da400747ffe3af9c95e61dc1a85508d57378da23a77538270c4cabf1.fr.mc_id=academic-105485-koreyst) + +### Concept : Modèles de base + +Une fois qu'un prompt est tokenisé, la fonction principale du ["Base LLM"](https://blog.gopenai.com/an-introduction-to-base-and-instruction-tuned-large-language-models-8de102c785a6?WT.mc_id=academic-105485-koreyst) (ou modèle de base) est de prédire le token dans cette séquence. Étant donné que les LLMs sont entraînés sur d'énormes ensembles de données textuelles, ils ont une bonne idée des relations statistiques entre les tokens et peuvent faire cette prédiction avec une certaine confiance. Notez qu'ils ne comprennent pas le _sens_ des mots dans le prompt ou le token; ils voient juste un modèle qu'ils peuvent "compléter" avec leur prochaine prédiction. Ils peuvent continuer à prédire la séquence jusqu'à ce qu'elle soit terminée par l'intervention de l'utilisateur ou une condition préétablie. + +Vous voulez voir comment fonctionne la complétion basée sur les prompts? Entrez le prompt ci-dessus dans le [_Chat Playground_](https://oai.azure.com/playground?WT.mc_id=academic-105485-koreyst) de l'Azure OpenAI Studio avec les paramètres par défaut. Le système est configuré pour traiter les prompts comme des demandes d'information - vous devriez donc voir une complétion qui satisfait ce contexte. + +Mais que se passe-t-il si l'utilisateur voulait voir quelque chose de spécifique qui répondait à certains critères ou objectifs de tâche? C'est là que les LLMs _ajustés par instruction_ entrent en jeu. + +![Base LLM Chat Completion](../../../translated_images/04-playground-chat-base.png?WT.7645a03d7989b1c410f2e9e6b503d18e4624f82d9cbf108dac999b8c8988f0ad.fr.mc_id=academic-105485-koreyst) + +### Concept : LLMs ajustés par instruction + +Un [LLM ajusté par instruction](https://blog.gopenai.com/an-introduction-to-base-and-instruction-tuned-large-language-models-8de102c785a6?WT.mc_id=academic-105485-koreyst) commence par le modèle de base et le peaufine avec des exemples ou des paires d'entrée/sortie (par exemple, des "messages" à plusieurs tours) qui peuvent contenir des instructions claires - et la réponse de l'IA tente de suivre cette instruction. + +Cela utilise des techniques comme l'Apprentissage par Renforcement avec Feedback Humain (RLHF) qui peuvent entraîner le modèle à _suivre des instructions_ et _apprendre du feedback_ afin qu'il produise des réponses mieux adaptées aux applications pratiques et plus pertinentes pour les objectifs des utilisateurs. + +Essayons-le - revisitez le prompt ci-dessus, mais changez maintenant le _message système_ pour fournir l'instruction suivante comme contexte : + +> _Résumez le contenu qui vous est fourni pour un élève de deuxième année. Gardez le résultat à un paragraphe avec 3-5 puces._ + +Voyez comment le résultat est maintenant ajusté pour refléter l'objectif et le format souhaités? Un éducateur peut désormais utiliser directement cette réponse dans ses diapositives pour cette classe. + +![Instruction Tuned LLM Chat Completion](../../../translated_images/04-playground-chat-instructions.png?WT.d9c80b15e90815a83ce665bf4418e70205d30318a5a5bcf407b2c92769743593.fr.mc_id=academic-105485-koreyst) + +## Pourquoi avons-nous besoin de l'ingénierie des prompts? + +Maintenant que nous savons comment les prompts sont traités par les LLMs, parlons de _pourquoi_ nous avons besoin de l'ingénierie des prompts. La réponse réside dans le fait que les LLMs actuels posent un certain nombre de défis qui rendent plus difficile d'obtenir des _complétions fiables et cohérentes_ sans investir dans la construction et l'optimisation des prompts. Par exemple : + +1. **Les réponses des modèles sont stochastiques.** Le _même prompt_ produira probablement des réponses différentes avec différents modèles ou versions de modèles. Et il peut même produire des résultats différents avec le _même modèle_ à différents moments. _Les techniques d'ingénierie des prompts peuvent nous aider à minimiser ces variations en fournissant de meilleures garde-fous_. + +1. **Les modèles peuvent fabriquer des réponses.** Les modèles sont pré-entraînés avec des ensembles de données _grands mais finis_, ce qui signifie qu'ils manquent de connaissances sur les concepts en dehors de ce cadre d'entraînement. En conséquence, ils peuvent produire des complétions qui sont inexactes, imaginaires ou directement contradictoires avec des faits connus. _Les techniques d'ingénierie des prompts aident les utilisateurs à identifier et à atténuer ces fabrications, par exemple, en demandant à l'IA des citations ou un raisonnement_. + +1. **Les capacités des modèles varieront.** Les modèles plus récents ou les générations de modèles auront des capacités plus riches mais apporteront également des particularités uniques et des compromis en termes de coût et de complexité. _L'ingénierie des prompts peut nous aider à développer des meilleures pratiques et des workflows qui abstraient les différences et s'adaptent aux exigences spécifiques des modèles de manière évolutive et transparente_. + +Voyons cela en action dans le OpenAI ou Azure OpenAI Playground : + +- Utilisez le même prompt avec différents déploiements de LLM (par exemple, OpenAI, Azure OpenAI, Hugging Face) - avez-vous vu les variations? +- Utilisez le même prompt à plusieurs reprises avec le _même_ déploiement de LLM (par exemple, le playground Azure OpenAI) - comment ces variations ont-elles différé? + +### Exemple de fabrications + +Dans ce cours, nous utilisons le terme **"fabrication"** pour faire référence au phénomène où les LLMs génèrent parfois des informations factuellement incorrectes en raison de limitations dans leur entraînement ou d'autres contraintes. Vous avez peut-être aussi entendu cela désigné sous le nom d'_hallucinations_ dans des articles populaires ou des articles de recherche. Cependant, nous recommandons fortement d'utiliser le terme _"fabrication"_ pour ne pas anthropomorphiser accidentellement le comportement en attribuant un trait humain à un résultat piloté par une machine. Cela renforce également les [lignes directrices de l'IA Responsable](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-105485-koreyst) d'un point de vue terminologique, en supprimant les termes qui pourraient également être considérés comme offensants ou non inclusifs dans certains contextes. + +Vous voulez avoir une idée de comment fonctionnent les fabrications? Pensez à un prompt qui demande à l'IA de générer du contenu pour un sujet inexistant (pour s'assurer qu'il ne se trouve pas dans l'ensemble de données d'entraînement). Par exemple - j'ai essayé ce prompt : + +> **Prompt :** générez un plan de leçon sur la Guerre Martienne de 2076. + +Une recherche sur le web m'a montré qu'il existait des récits fictifs (par exemple, des séries télévisées ou des livres) sur des guerres martiennes - mais aucune en 2076. Le bon sens nous dit également que 2076 est _dans le futur_ et ne peut donc pas être associé à un événement réel. + +Alors que se passe-t-il lorsque nous exécutons ce prompt avec différents fournisseurs de LLM? + +> **Réponse 1** : OpenAI Playground (GPT-35) + +![Réponse 1](../../../translated_images/04-fabrication-oai.png?WT.08cc3e01259a6b46725a800e67de50c37b7fdd6b1f932f027881cbe32f80bcf1.fr.mc_id=academic-105485-koreyst) + +> **Réponse 2** : Azure OpenAI Playground (GPT-35) + +![Réponse 2](../../../translated_images/04-fabrication-aoai.png?WT.81e0d286a351c87c804aaca6e5f8251a6deed5105d11bca035f8cead8c52d299.fr.mc_id=academic-105485-koreyst) + +> **Réponse 3** : Hugging Face Chat Playground (LLama-2) + +![Réponse 3](../../../translated_images/04-fabrication-huggingchat.png?WT.992b3a675cc7ed0dbe53e308b93df8165048fb7c4516e6bb00611d05c92e8fd5.fr.mc_id=academic-105485-koreyst) + +Comme prévu, chaque modèle (ou version de modèle) produit des réponses légèrement différentes grâce au comportement stochastique et aux variations des capacités du modèle. Par exemple, un modèle cible un public de 8e année tandis qu'un autre suppose un lycéen. Mais les trois modèles ont généré des réponses qui pourraient convaincre un utilisateur non informé que l'événement était réel. + +Les techniques d'ingénierie des prompts comme le _métaprompting_ et la _configuration de température_ peuvent réduire les fabrications de modèles dans une certaine mesure. Les nouvelles _architectures_ d'ingénierie des prompts intègrent également de nouveaux outils et techniques de manière transparente dans le flux de prompts, pour atténuer ou réduire certains de ces effets. + +## Étude de cas : GitHub Copilot + +Concluons cette section en comprenant comment l'ingénierie des prompts est utilisée dans des solutions du monde réel en examinant une étude de cas : [GitHub Copilot](https://github.com/features/copilot?WT.mc_id=academic-105485-koreyst). + +GitHub Copilot est votre "programmeur en duo avec IA" - il convertit les prompts textuels en complétions de code et est intégré dans votre environnement de développement (par exemple, Visual Studio Code) pour une expérience utilisateur fluide. Comme documenté dans la série de blogs ci-dessous, la première version était basée sur le modèle OpenAI Codex - avec des ingénieurs réalisant rapidement la nécessité de peaufiner le modèle et de développer de meilleures techniques d'ingénierie des prompts pour améliorer la qualité du code. En juillet, ils ont [dévoilé un modèle d'IA amélioré qui va au-delà de Codex](https://github.blog/2023-07-28-smarter-more-efficient-coding-github-cop +La véritable valeur des modèles réside dans la capacité de créer et publier des _bibliothèques de prompts_ pour des domaines d'application verticaux - où le modèle de prompt est maintenant _optimisé_ pour refléter le contexte ou des exemples spécifiques à l'application, rendant les réponses plus pertinentes et précises pour le public cible. Le dépôt [Prompts For Edu](https://github.com/microsoft/prompts-for-edu?WT.mc_id=academic-105485-koreyst) est un excellent exemple de cette approche, en proposant une bibliothèque de prompts pour le domaine de l'éducation avec un accent sur des objectifs clés tels que la planification des cours, la conception de programmes, le tutorat des étudiants, etc. + +## Contenu de soutien + +Si nous considérons la construction de prompts comme ayant une instruction (tâche) et un objectif (contenu principal), alors le _contenu secondaire_ est comme un contexte supplémentaire que nous fournissons pour **influencer la sortie d'une certaine manière**. Il pourrait s'agir de paramètres de réglage, d'instructions de formatage, de taxonomies de sujets, etc., qui peuvent aider le modèle à _adapter_ sa réponse pour convenir aux objectifs ou attentes souhaités de l'utilisateur. + +Par exemple : Étant donné un catalogue de cours avec des métadonnées étendues (nom, description, niveau, balises de métadonnées, instructeur, etc.) sur tous les cours disponibles dans le programme : + +- nous pouvons définir une instruction pour "résumer le catalogue de cours pour l'automne 2023" +- nous pouvons utiliser le contenu principal pour fournir quelques exemples du résultat souhaité +- nous pouvons utiliser le contenu secondaire pour identifier les 5 principales "balises" d'intérêt. + +Maintenant, le modèle peut fournir un résumé dans le format montré par les quelques exemples - mais si un résultat a plusieurs balises, il peut prioriser les 5 balises identifiées dans le contenu secondaire. + +--- + + + +## Bonnes pratiques de création de prompts + +Maintenant que nous savons comment les prompts peuvent être _construits_, nous pouvons commencer à réfléchir à comment les _concevoir_ pour refléter les meilleures pratiques. Nous pouvons penser à cela en deux parties - avoir le bon _état d'esprit_ et appliquer les bonnes _techniques_. + +### État d'esprit pour l'ingénierie des prompts + +L'ingénierie des prompts est un processus d'essais et d'erreurs, alors gardez trois facteurs directeurs à l'esprit : + +1. **La compréhension du domaine est importante.** La précision et la pertinence des réponses dépendent du _domaine_ dans lequel cette application ou cet utilisateur opère. Appliquez votre intuition et votre expertise du domaine pour **personnaliser davantage les techniques**. Par exemple, définissez des _personnalités spécifiques au domaine_ dans vos prompts système, ou utilisez des _modèles spécifiques au domaine_ dans vos prompts utilisateur. Fournissez un contenu secondaire qui reflète les contextes spécifiques au domaine, ou utilisez des _indices et exemples spécifiques au domaine_ pour guider le modèle vers des modèles d'utilisation familiers. + +2. **La compréhension du modèle est importante.** Nous savons que les modèles sont par nature stochastiques. Mais les implémentations de modèles peuvent également varier en termes de jeu de données d'entraînement qu'ils utilisent (connaissances pré-entraînées), des capacités qu'ils offrent (par exemple, via API ou SDK) et du type de contenu pour lequel ils sont optimisés (par exemple, code vs. images vs. texte). Comprenez les forces et les limitations du modèle que vous utilisez, et utilisez ces connaissances pour _prioriser les tâches_ ou créer des _modèles personnalisés_ qui sont optimisés pour les capacités du modèle. + +3. **L'itération et la validation sont importantes.** Les modèles évoluent rapidement, tout comme les techniques d'ingénierie des prompts. En tant qu'expert du domaine, vous pouvez avoir d'autres contextes ou critères pour _votre_ application spécifique, qui peuvent ne pas s'appliquer à la communauté plus large. Utilisez des outils et techniques d'ingénierie des prompts pour "accélérer" la construction de prompts, puis itérez et validez les résultats en utilisant votre propre intuition et expertise du domaine. Enregistrez vos insights et créez une **base de connaissances** (par exemple, des bibliothèques de prompts) qui peuvent être utilisées comme nouvelle référence par d'autres, pour des itérations plus rapides à l'avenir. + +## Meilleures pratiques + +Voyons maintenant les meilleures pratiques courantes recommandées par les praticiens de [OpenAI](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api?WT.mc_id=academic-105485-koreyst) et [Azure OpenAI](https://learn.microsoft.com/azure/ai-services/openai/concepts/prompt-engineering#best-practices?WT.mc_id=academic-105485-koreyst). + +| Quoi | Pourquoi | +| :------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Évaluer les derniers modèles. | Les nouvelles générations de modèles sont susceptibles d'avoir des fonctionnalités et une qualité améliorées - mais peuvent aussi entraîner des coûts plus élevés. Évaluez-les pour leur impact, puis prenez des décisions de migration. | +| Séparer instructions & contexte | Vérifiez si votre modèle/fournisseur définit des _délimiteurs_ pour distinguer plus clairement les instructions, le contenu principal et secondaire. Cela peut aider les modèles à attribuer des poids plus précis aux tokens. | +| Soyez spécifique et clair | Donnez plus de détails sur le contexte souhaité, le résultat, la longueur, le format, le style, etc. Cela améliorera à la fois la qualité et la cohérence des réponses. Capturez les recettes dans des modèles réutilisables. | +| Soyez descriptif, utilisez des exemples | Les modèles peuvent mieux répondre à une approche "montrer et raconter". Commencez par une `zero-shot` approach where you give it an instruction (but no examples) then try `few-shot` as a refinement, providing a few examples of the desired output. Use analogies. | +| Use cues to jumpstart completions | Nudge it towards a desired outcome by giving it some leading words or phrases that it can use as a starting point for the response. | +| Double Down | Sometimes you may need to repeat yourself to the model. Give instructions before and after your primary content, use an instruction and a cue, etc. Iterate & validate to see what works. | +| Order Matters | The order in which you present information to the model may impact the output, even in the learning examples, thanks to recency bias. Try different options to see what works best. | +| Give the model an “out” | Give the model a _fallback_ completion response it can provide if it cannot complete the task for any reason. This can reduce chances of models generating false or fabricated responses. | +| | | + +As with any best practice, remember that _your mileage may vary_ based on the model, the task and the domain. Use these as a starting point, and iterate to find what works best for you. Constantly re-evaluate your prompt engineering process as new models and tools become available, with a focus on process scalability and response quality. + + + +## Assignment + +Congratulations! You made it to the end of the lesson! It's time to put some of those concepts and techniques to the test with real examples! + +For our assignment, we'll be using a Jupyter Notebook with exercises you can complete interactively. You can also extend the Notebook with your own Markdown and Code cells to explore ideas and techniques on your own. + +### To get started, fork the repo, then + +- (Recommended) Launch GitHub Codespaces +- (Alternatively) Clone the repo to your local device and use it with Docker Desktop +- (Alternatively) Open the Notebook with your preferred Notebook runtime environment. + +### Next, configure your environment variables + +- Copy the `.env.copy` file in repo root to `.env` and fill in the `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_ENDPOINT` and `AZURE_OPENAI_DEPLOYMENT` valeurs. Revenez à la [section Learning Sandbox](../../../04-prompt-engineering-fundamentals/04-prompt-engineering-fundamentals) pour apprendre comment. + +### Ensuite, ouvrez le Jupyter Notebook + +- Sélectionnez le noyau d'exécution. Si vous utilisez les options 1 ou 2, sélectionnez simplement le noyau Python 3.10.x par défaut fourni par le conteneur de développement. + +Vous êtes prêt à exécuter les exercices. Notez qu'il n'y a pas de bonnes ou mauvaises réponses ici - juste l'exploration d'options par essais et erreurs et la construction d'une intuition pour ce qui fonctionne pour un modèle et un domaine d'application donnés. + +_Pour cette raison, il n'y a pas de segments de solution de code dans cette leçon. Au lieu de cela, le Notebook aura des cellules Markdown intitulées "Ma solution :" qui montrent un exemple de sortie pour référence._ + + + +## Vérification des connaissances + +Lequel des éléments suivants est un bon prompt suivant certaines bonnes pratiques raisonnables ? + +1. Montrez-moi une image de voiture rouge +2. Montrez-moi une image de voiture rouge de marque Volvo et modèle XC90 garée près d'une falaise avec le soleil couchant +3. Montrez-moi une image de voiture rouge de marque Volvo et modèle XC90 + +R : 2, c'est le meilleur prompt car il donne des détails sur "quoi" et va dans les spécificités (pas n'importe quelle voiture mais une marque et un modèle spécifiques) et il décrit également le cadre général. 3 est le suivant car il contient également beaucoup de descriptions. + +## 🚀 Défi + +Voyez si vous pouvez tirer parti de la technique de "l'indice" avec le prompt : Complétez la phrase "Montrez-moi une image de voiture rouge de marque Volvo et ". Que répond-il, et comment l'amélioreriez-vous ? + +## Excellent travail ! Continuez votre apprentissage + +Vous voulez en savoir plus sur les différents concepts d'ingénierie des prompts ? Allez sur la [page d'apprentissage continu](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour trouver d'autres ressources intéressantes sur ce sujet. + +Rendez-vous à la leçon 5 où nous examinerons [des techniques avancées de prompting](../05-advanced-prompts/README.md?WT.mc_id=academic-105485-koreyst) ! + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique basés sur l'intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle humaine. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/05-advanced-prompts/README.md b/translations/fr/05-advanced-prompts/README.md new file mode 100644 index 000000000..81d797fe1 --- /dev/null +++ b/translations/fr/05-advanced-prompts/README.md @@ -0,0 +1,4 @@ + + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle humaine. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/06-text-generation-apps/README.md b/translations/fr/06-text-generation-apps/README.md new file mode 100644 index 000000000..a5c400e7c --- /dev/null +++ b/translations/fr/06-text-generation-apps/README.md @@ -0,0 +1,658 @@ +# Construire des applications de génération de texte + +[![Construire des applications de génération de texte](../../../translated_images/06-lesson-banner.png?WT.2cbccad4fdd538d4f7d47c475b058629b7b7fb1a010acde6e323370d82005b16.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson6-gh?WT.mc_id=academic-105485-koreyst) + +> _(Cliquez sur l'image ci-dessus pour voir la vidéo de cette leçon)_ + +Vous avez vu jusqu'à présent dans ce programme que des concepts fondamentaux comme les invites et même une discipline entière appelée "ingénierie d'invite" existent. De nombreux outils avec lesquels vous pouvez interagir, tels que ChatGPT, Office 365, Microsoft Power Platform, et plus encore, vous soutiennent en utilisant des invites pour accomplir quelque chose. + +Pour ajouter une telle expérience à une application, vous devez comprendre des concepts comme les invites, les complétions et choisir une bibliothèque avec laquelle travailler. C'est exactement ce que vous apprendrez dans ce chapitre. + +## Introduction + +Dans ce chapitre, vous allez : + +- Découvrir la bibliothèque openai et ses concepts fondamentaux. +- Construire une application de génération de texte en utilisant openai. +- Comprendre comment utiliser des concepts comme l'invite, la température et les tokens pour construire une application de génération de texte. + +## Objectifs d'apprentissage + +À la fin de cette leçon, vous serez capable de : + +- Expliquer ce qu'est une application de génération de texte. +- Construire une application de génération de texte en utilisant openai. +- Configurer votre application pour utiliser plus ou moins de tokens et également modifier la température, pour un résultat varié. + +## Qu'est-ce qu'une application de génération de texte ? + +Normalement, lorsque vous construisez une application, elle a un certain type d'interface comme les suivantes : + +- Basée sur des commandes. Les applications console sont des applications typiques où vous tapez une commande et elle exécute une tâche. Par exemple, `git` est une application basée sur des commandes. +- Interface utilisateur (UI). Certaines applications ont des interfaces graphiques (GUI) où vous cliquez sur des boutons, saisissez du texte, sélectionnez des options, etc. + +### Les applications console et UI sont limitées + +Comparez cela à une application basée sur des commandes où vous tapez une commande : + +- **C'est limité**. Vous ne pouvez pas taper n'importe quelle commande, seulement celles que l'application prend en charge. +- **Spécifique à une langue**. Certaines applications prennent en charge plusieurs langues, mais par défaut, l'application est construite pour une langue spécifique, même si vous pouvez ajouter un support pour plus de langues. + +### Avantages des applications de génération de texte + +Alors, en quoi une application de génération de texte est-elle différente ? + +Dans une application de génération de texte, vous avez plus de flexibilité, vous n'êtes pas limité à un ensemble de commandes ou à une langue d'entrée spécifique. Au lieu de cela, vous pouvez utiliser le langage naturel pour interagir avec l'application. Un autre avantage est que vous interagissez déjà avec une source de données qui a été entraînée sur un vaste corpus d'informations, tandis qu'une application traditionnelle pourrait être limitée à ce qui se trouve dans une base de données. + +### Que puis-je construire avec une application de génération de texte ? + +Il y a beaucoup de choses que vous pouvez construire. Par exemple : + +- **Un chatbot**. Un chatbot répondant à des questions sur des sujets, comme votre entreprise et ses produits, pourrait être une bonne correspondance. +- **Assistant**. Les LLM sont excellents pour des choses comme résumer du texte, obtenir des informations à partir de texte, produire du texte comme des CV, et plus encore. +- **Assistant de code**. En fonction du modèle de langage que vous utilisez, vous pouvez construire un assistant de code qui vous aide à écrire du code. Par exemple, vous pouvez utiliser un produit comme GitHub Copilot ainsi que ChatGPT pour vous aider à écrire du code. + +## Comment puis-je commencer ? + +Eh bien, vous devez trouver un moyen de vous intégrer à un LLM, ce qui implique généralement les deux approches suivantes : + +- Utiliser une API. Ici, vous construisez des requêtes web avec votre invite et obtenez un texte généré en retour. +- Utiliser une bibliothèque. Les bibliothèques aident à encapsuler les appels API et les rendent plus faciles à utiliser. + +## Bibliothèques/SDKs + +Il existe quelques bibliothèques bien connues pour travailler avec les LLM comme : + +- **openai**, cette bibliothèque facilite la connexion à votre modèle et l'envoi d'invites. + +Ensuite, il y a des bibliothèques qui fonctionnent à un niveau supérieur comme : + +- **Langchain**. Langchain est bien connu et prend en charge Python. +- **Semantic Kernel**. Semantic Kernel est une bibliothèque de Microsoft prenant en charge les langages C#, Python et Java. + +## Première application utilisant openai + +Voyons comment nous pouvons construire notre première application, quelles bibliothèques nous avons besoin, combien est nécessaire, et ainsi de suite. + +### Installer openai + +Il existe de nombreuses bibliothèques pour interagir avec OpenAI ou Azure OpenAI. Il est possible d'utiliser de nombreux langages de programmation comme C#, Python, JavaScript, Java, et plus encore. Nous avons choisi d'utiliser la bibliothèque `openai` Python, donc nous utiliserons `pip` pour l'installer. + +```bash +pip install openai +``` + +### Créer une ressource + +Vous devez effectuer les étapes suivantes : + +- Créer un compte sur Azure [https://azure.microsoft.com/free/](https://azure.microsoft.com/free/?WT.mc_id=academic-105485-koreyst). +- Obtenir l'accès à Azure OpenAI. Allez sur [https://learn.microsoft.com/azure/ai-services/openai/overview#how-do-i-get-access-to-azure-openai](https://learn.microsoft.com/azure/ai-services/openai/overview#how-do-i-get-access-to-azure-openai?WT.mc_id=academic-105485-koreyst) et demandez l'accès. + + > [!NOTE] + > Au moment de la rédaction, vous devez postuler pour accéder à Azure OpenAI. + +- Installer Python +- Avoir créé une ressource Azure OpenAI Service. Voir ce guide pour savoir comment [créer une ressource](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal?WT.mc_id=academic-105485-koreyst). + +### Localiser la clé API et le point de terminaison + +À ce stade, vous devez dire à votre bibliothèque `openai` quelle clé API utiliser. Pour trouver votre clé API, allez dans la section "Clés et point de terminaison" de votre ressource Azure OpenAI et copiez la valeur "Clé 1". + +![Clés et point de terminaison dans Azure Portal](https://learn.microsoft.com/azure/ai-services/openai/media/quickstarts/endpoint.png?WT.mc_id=academic-105485-koreyst) + +Maintenant que vous avez copié cette information, instruisons les bibliothèques pour l'utiliser. + +> [!NOTE] +> Il est préférable de séparer votre clé API de votre code. Vous pouvez le faire en utilisant des variables d'environnement. +> +> - Définissez la variable d'environnement `OPENAI_API_KEY` to your API key. +> `export OPENAI_API_KEY='sk-...'` + +### Configurer Azure + +Si vous utilisez Azure OpenAI, voici comment configurer : + +```python +openai.api_type = 'azure' +openai.api_key = os.environ["OPENAI_API_KEY"] +openai.api_version = '2023-05-15' +openai.api_base = os.getenv("API_BASE") +``` + +Ci-dessus, nous configurons les éléments suivants : + +- `api_type` to `azure`. This tells the library to use Azure OpenAI and not OpenAI. +- `api_key`, this is your API key found in the Azure Portal. +- `api_version`, this is the version of the API you want to use. At the time of writing, the latest version is `2023-05-15`. +- `api_base`, this is the endpoint of the API. You can find it in the Azure Portal next to your API key. + +> [!NOTE] > `os.getenv` is a function that reads environment variables. You can use it to read environment variables like `OPENAI_API_KEY` and `API_BASE`. Set these environment variables in your terminal or by using a library like `dotenv`. + +## Generate text + +The way to generate text is to use the `Completion` class. Voici un exemple : + +```python +prompt = "Complete the following: Once upon a time there was a" + +completion = openai.Completion.create(model="davinci-002", prompt=prompt) +print(completion.choices[0].text) +``` + +Dans le code ci-dessus, nous créons un objet de complétion et passons le modèle que nous voulons utiliser et l'invite. Ensuite, nous imprimons le texte généré. + +### Complétions de chat + +Jusqu'à présent, vous avez vu comment nous avons utilisé `Completion` to generate text. But there's another class called `ChatCompletion` qui est plus adapté pour les chatbots. Voici un exemple d'utilisation : + +```python +import openai + +openai.api_key = "sk-..." + +completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello world"}]) +print(completion.choices[0].message.content) +``` + +Plus d'informations sur cette fonctionnalité dans un chapitre à venir. + +## Exercice - votre première application de génération de texte + +Maintenant que nous avons appris comment configurer et configurer openai, il est temps de construire votre première application de génération de texte. Pour construire votre application, suivez ces étapes : + +1. Créez un environnement virtuel et installez openai : + + ```bash + python -m venv venv + source venv/bin/activate + pip install openai + ``` + + > [!NOTE] + > Si vous utilisez Windows, tapez `venv\Scripts\activate` instead of `source venv/bin/activate`. + + > [!NOTE] + > Locate your Azure OpenAI key by going to [https://portal.azure.com/](https://portal.azure.com/?WT.mc_id=academic-105485-koreyst) and search for `Open AI` and select the `Open AI resource` and then select `Keys and Endpoint` and copy the `Key 1` value. + +1. Créez un fichier _app.py_ et donnez-lui le code suivant : + + ```python + import openai + + openai.api_key = "" + + openai.api_type = 'azure' + openai.api_version = '2023-05-15' + openai.api_base = "" + deployment_name = "" + + # add your completion code + prompt = "Complete the following: Once upon a time there was a" + messages = [{"role": "user", "content": prompt}] + + # make completion + completion = client.chat.completions.create(model=deployment, messages=messages) + + # print response + print(completion.choices[0].message.content) + ``` + + > [!NOTE] + > Si vous utilisez Azure OpenAI, vous devez définir `api_type` to `azure` and set the `api_key` sur votre clé Azure OpenAI. + + Vous devriez voir une sortie comme la suivante : + + ```output + very unhappy _____. + + Once upon a time there was a very unhappy mermaid. + ``` + +## Différents types d'invites, pour différentes choses + +Vous avez maintenant vu comment générer du texte en utilisant une invite. Vous avez même un programme en cours d'exécution que vous pouvez modifier et changer pour générer différents types de texte. + +Les invites peuvent être utilisées pour toutes sortes de tâches. Par exemple : + +- **Générer un type de texte**. Par exemple, vous pouvez générer un poème, des questions pour un quiz, etc. +- **Rechercher des informations**. Vous pouvez utiliser des invites pour rechercher des informations comme l'exemple suivant 'Que signifie CORS en développement web ?'. +- **Générer du code**. Vous pouvez utiliser des invites pour générer du code, par exemple développer une expression régulière utilisée pour valider des emails ou pourquoi pas générer un programme entier, comme une application web ? + +## Un cas d'utilisation plus pratique : un générateur de recettes + +Imaginez que vous avez des ingrédients à la maison et que vous voulez cuisiner quelque chose. Pour cela, vous avez besoin d'une recette. Une façon de trouver des recettes est d'utiliser un moteur de recherche ou vous pourriez utiliser un LLM pour le faire. + +Vous pourriez écrire une invite comme celle-ci : + +> "Montrez-moi 5 recettes pour un plat avec les ingrédients suivants : poulet, pommes de terre et carottes. Pour chaque recette, listez tous les ingrédients utilisés" + +Étant donné l'invite ci-dessus, vous pourriez obtenir une réponse similaire à : + +```output +1. Roasted Chicken and Vegetables: +Ingredients: +- 4 chicken thighs +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 2 tablespoons olive oil +- 2 cloves garlic, minced +- 1 teaspoon dried thyme +- 1 teaspoon dried oregano +- Salt and pepper, to taste + +2. Chicken and Potato Stew: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 cloves garlic, minced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +3. Chicken and Potato Bake: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 2 cloves garlic, minced +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +4. Chicken and Potato Soup: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 cloves garlic, minced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 4 cups chicken broth +- Salt and pepper, to taste + +5. Chicken and Potato Hash: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 2 cloves garlic, minced +- 1 teaspoon dried oregano +``` + +Ce résultat est excellent, je sais quoi cuisiner. À ce stade, ce qui pourrait être utile comme améliorations sont : + +- Filtrer les ingrédients que je n'aime pas ou auxquels je suis allergique. +- Produire une liste de courses, au cas où je n'aurais pas tous les ingrédients à la maison. + +Pour les cas ci-dessus, ajoutons une invite supplémentaire : + +> "Veuillez supprimer les recettes avec de l'ail car je suis allergique et le remplacer par autre chose. De plus, veuillez produire une liste de courses pour les recettes, en tenant compte du fait que j'ai déjà du poulet, des pommes de terre et des carottes à la maison." + +Maintenant, vous avez un nouveau résultat, à savoir : + +```output +1. Roasted Chicken and Vegetables: +Ingredients: +- 4 chicken thighs +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 2 tablespoons olive oil +- 1 teaspoon dried thyme +- 1 teaspoon dried oregano +- Salt and pepper, to taste + +2. Chicken and Potato Stew: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +3. Chicken and Potato Bake: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +4. Chicken and Potato Soup: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 4 cups chicken broth +- Salt and pepper, to taste + +5. Chicken and Potato Hash: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 1 teaspoon dried oregano + +Shopping List: +- Olive oil +- Onion +- Thyme +- Oregano +- Salt +- Pepper +``` + +Voilà vos cinq recettes, sans mention d'ail, et vous avez également une liste de courses en tenant compte de ce que vous avez déjà à la maison. + +## Exercice - construire un générateur de recettes + +Maintenant que nous avons mis en scène un scénario, écrivons du code pour correspondre au scénario démontré. Pour ce faire, suivez ces étapes : + +1. Utilisez le fichier _app.py_ existant comme point de départ +1. Localisez la variable `prompt` et changez son code pour le suivant : + + ```python + prompt = "Show me 5 recipes for a dish with the following ingredients: chicken, potatoes, and carrots. Per recipe, list all the ingredients used" + ``` + + Si vous exécutez maintenant le code, vous devriez voir une sortie similaire à : + + ```output + -Chicken Stew with Potatoes and Carrots: 3 tablespoons oil, 1 onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 1/2 cups chicken broth, 1/2 cup dry white wine, 2 tablespoons chopped fresh parsley, 2 tablespoons unsalted butter, 1 1/2 pounds boneless, skinless chicken thighs, cut into 1-inch pieces + -Oven-Roasted Chicken with Potatoes and Carrots: 3 tablespoons extra-virgin olive oil, 1 tablespoon Dijon mustard, 1 tablespoon chopped fresh rosemary, 1 tablespoon chopped fresh thyme, 4 cloves garlic, minced, 1 1/2 pounds small red potatoes, quartered, 1 1/2 pounds carrots, quartered lengthwise, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 (4-pound) whole chicken + -Chicken, Potato, and Carrot Casserole: cooking spray, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and shredded, 1 potato, peeled and shredded, 1/2 teaspoon dried thyme leaves, 1/4 teaspoon salt, 1/4 teaspoon black pepper, 2 cups fat-free, low-sodium chicken broth, 1 cup frozen peas, 1/4 cup all-purpose flour, 1 cup 2% reduced-fat milk, 1/4 cup grated Parmesan cheese + + -One Pot Chicken and Potato Dinner: 2 tablespoons olive oil, 1 pound boneless, skinless chicken thighs, cut into 1-inch pieces, 1 large onion, chopped, 3 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 2 cups chicken broth, 1/2 cup dry white wine + + -Chicken, Potato, and Carrot Curry: 1 tablespoon vegetable oil, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 teaspoon ground coriander, 1 teaspoon ground cumin, 1/2 teaspoon ground turmeric, 1/2 teaspoon ground ginger, 1/4 teaspoon cayenne pepper, 2 cups chicken broth, 1/2 cup dry white wine, 1 (15-ounce) can chickpeas, drained and rinsed, 1/2 cup raisins, 1/2 cup chopped fresh cilantro + ``` + + > NOTE, votre LLM est non déterministe, donc vous pourriez obtenir des résultats différents à chaque exécution du programme. + + Super, voyons comment nous pouvons améliorer les choses. Pour améliorer les choses, nous voulons nous assurer que le code est flexible, donc les ingrédients et le nombre de recettes peuvent être améliorés et changés. + +1. Changeons le code de la manière suivante : + + ```python + no_recipes = input("No of recipes (for example, 5): ") + + ingredients = input("List of ingredients (for example, chicken, potatoes, and carrots): ") + + # interpolate the number of recipes into the prompt an ingredients + prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used" + ``` + + Faire un test du code pourrait ressembler à ceci : + + ```output + No of recipes (for example, 5): 3 + List of ingredients (for example, chicken, potatoes, and carrots): milk,strawberries + + -Strawberry milk shake: milk, strawberries, sugar, vanilla extract, ice cubes + -Strawberry shortcake: milk, flour, baking powder, sugar, salt, unsalted butter, strawberries, whipped cream + -Strawberry milk: milk, strawberries, sugar, vanilla extract + ``` + +### Améliorer en ajoutant un filtre et une liste de courses + +Nous avons maintenant une application fonctionnelle capable de produire des recettes et elle est flexible car elle repose sur les entrées de l'utilisateur, à la fois sur le nombre de recettes mais aussi sur les ingrédients utilisés. + +Pour l'améliorer davantage, nous voulons ajouter ce qui suit : + +- **Filtrer les ingrédients**. Nous voulons pouvoir filtrer les ingrédients que nous n'aimons pas ou auxquels nous sommes allergiques. Pour accomplir ce changement, nous pouvons modifier notre invite existante et ajouter une condition de filtre à la fin comme ceci : + + ```python + filter = input("Filter (for example, vegetarian, vegan, or gluten-free): ") + + prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used, no {filter}" + ``` + + Ci-dessus, nous ajoutons `{filter}` à la fin de l'invite et nous capturons également la valeur du filtre de l'utilisateur. + + Un exemple d'entrée lors de l'exécution du programme peut maintenant ressembler à ceci : + + ```output + No of recipes (for example, 5): 3 + List of ingredients (for example, chicken, potatoes, and carrots): onion,milk + Filter (for example, vegetarian, vegan, or gluten-free): no milk + + 1. French Onion Soup + + Ingredients: + + -1 large onion, sliced + -3 cups beef broth + -1 cup milk + -6 slices french bread + -1/4 cup shredded Parmesan cheese + -1 tablespoon butter + -1 teaspoon dried thyme + -1/4 teaspoon salt + -1/4 teaspoon black pepper + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add beef broth, milk, thyme, salt, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. Place french bread slices on soup bowls. + 5. Ladle soup over bread. + 6. Sprinkle with Parmesan cheese. + + 2. Onion and Potato Soup + + Ingredients: + + -1 large onion, chopped + -2 cups potatoes, diced + -3 cups vegetable broth + -1 cup milk + -1/4 teaspoon black pepper + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add potatoes, vegetable broth, milk, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. Serve hot. + + 3. Creamy Onion Soup + + Ingredients: + + -1 large onion, chopped + -3 cups vegetable broth + -1 cup milk + -1/4 teaspoon black pepper + -1/4 cup all-purpose flour + -1/2 cup shredded Parmesan cheese + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add vegetable broth, milk, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. In a small bowl, whisk together flour and Parmesan cheese until smooth. + 5. Add to soup and simmer for an additional 5 minutes, or until soup has thickened. + ``` + + Comme vous pouvez le voir, toutes les recettes contenant du lait ont été filtrées. Mais, si vous êtes intolérant au lactose, vous voudrez peut-être également filtrer les recettes contenant du fromage, donc il est nécessaire d'être clair. + +- **Produire une liste de courses**. Nous voulons produire une liste de courses, en tenant compte de ce que nous avons déjà à la maison. + + Pour cette fonctionnalité, nous pourrions soit essayer de tout résoudre en une seule invite, soit nous pourrions la diviser en deux invites. Essayons la dernière approche. Ici, nous suggérons d'ajouter une invite supplémentaire, mais pour que cela fonctionne, nous devons ajouter le résultat de la première invite comme contexte à la deuxième invite. + + Localisez la partie du code qui imprime le résultat de la première invite et ajoutez le code suivant ci-dessous : + + ```python + old_prompt_result = completion.choices[0].message.content + prompt = "Produce a shopping list for the generated recipes and please don't include ingredients that I already have." + + new_prompt = f"{old_prompt_result} {prompt}" + messages = [{"role": "user", "content": new_prompt}] + completion = openai.Completion.create(engine=deployment_name, messages=messages, max_tokens=1200) + + # print response + print("Shopping list:") + print(completion.choices[0].message.content) + ``` + + Notez ce qui suit : + + 1. Nous construisons une nouvelle invite en ajoutant le résultat de la première invite à la nouvelle invite : + + ```python + new_prompt = f"{old_prompt_result} {prompt}" + ``` + + 1. Nous faisons une nouvelle requête, mais en tenant compte également du nombre de tokens que nous avons demandé dans la première invite, donc cette fois nous disons que `max_tokens` est de 1200. + + ```python + completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) + ``` + + En testant ce code, nous arrivons maintenant au résultat suivant : + + ```output + No of recipes (for example, 5): 2 + List of ingredients (for example, chicken, potatoes, and carrots): apple,flour + Filter (for example, vegetarian, vegan, or gluten-free): sugar + + + -Apple and flour pancakes: 1 cup flour, 1/2 tsp baking powder, 1/2 tsp baking soda, 1/4 tsp salt, 1 tbsp sugar, 1 egg, 1 cup buttermilk or sour milk, 1/4 cup melted butter, 1 Granny Smith apple, peeled and grated + -Apple fritters: 1-1/2 cups flour, 1 tsp baking powder, 1/4 tsp salt, 1/4 tsp baking soda, 1/4 tsp nutmeg, 1/4 tsp cinnamon, 1/4 tsp allspice, 1/4 cup sugar, 1/4 cup vegetable shortening, 1/4 cup milk, 1 egg, 2 cups shredded, peeled apples + Shopping list: + -Flour, baking powder, baking soda, salt, sugar, egg, buttermilk, butter, apple, nutmeg, cinnamon, allspice + ``` + +## Améliorer votre configuration + +Ce que nous avons jusqu'à présent est un code qui fonctionne, mais il y a quelques ajustements que nous devrions faire pour améliorer encore les choses. Certaines choses que nous devrions faire sont : + +- **Séparer les secrets du code**, comme la clé API. Les secrets n'appartiennent pas au code et doivent être stockés dans un endroit sécurisé. Pour séparer les secrets du code, nous pouvons utiliser des variables d'environnement et des bibliothèques comme `python-dotenv` to load them from a file. Here's how that would look like in code: + + 1. Create a `.env` avec le contenu suivant : + + ```bash + OPENAI_API_KEY=sk-... + ``` + + > Note, pour Azure, vous devez définir les variables d'environnement suivantes : + + ```bash + OPENAI_API_TYPE=azure + OPENAI_API_VERSION=2023-05-15 + OPENAI_API_BASE= + ``` + + Dans le code, vous chargeriez les variables d'environnement comme ceci : + + ```python + from dotenv import load_dotenv + + load_dotenv() + + openai.api_key = os.environ["OPENAI_API_KEY"] + ``` + +- **Un mot sur la longueur des tokens**. Nous devrions considérer combien de tokens nous avons besoin pour générer le texte que nous voulons. Les tokens coûtent de l'argent, donc si possible, nous devrions essayer d'être économes avec le nombre de tokens que nous utilisons. Par exemple, pouvons-nous formuler l'invite de manière à utiliser moins de tokens ? + + Pour changer les tokens utilisés, vous pouvez utiliser le paramètre `max_tokens`. Par exemple, si vous voulez utiliser 100 tokens, vous feriez : + + ```python + completion = client.chat.completions.create(model=deployment, messages=messages, max_tokens=100) + ``` + +- **Expérimenter avec la température**. La température est quelque chose que nous n'avons pas mentionné jusqu'à présent, mais c'est un contexte important pour la performance de notre programme. Plus la valeur de température est élevée, plus la sortie sera aléatoire. À l'inverse, plus la valeur de température est basse, plus la sortie sera prévisible. Considérez si vous voulez de la variation dans votre sortie ou non. + + Pour modifier la température, vous pouvez utiliser le paramètre `temperature`. Par exemple, si vous voulez utiliser une température de 0.5, vous feriez : + + ```python + completion = client.chat.completions.create(model=deployment, messages=messages, temperature=0.5) + ``` + + > Note, plus on se rapproche de 1.0, plus la sortie est variée. + +## Devoir + +Pour cet exercice, vous pouvez choisir ce que vous souhaitez construire. + +Voici quelques suggestions : + +- Ajustez l'application de générateur de recettes pour l'améliorer davantage. Jouez avec les valeurs de température et les invites pour voir ce que vous pouvez créer. +- Construisez un "copain d'étude". Cette application devrait être capable de répondre à des questions sur un sujet, par exemple Python, vous pourriez avoir des invites comme "Qu'est-ce qu'un certain sujet en Python ?", ou vous pourriez avoir une invite qui dit, montrez-moi du code pour un certain sujet, etc. +- Bot historique, faites revivre l'histoire, demandez au bot de jouer un personnage historique particulier et posez-lui des questions sur sa vie et son époque. + +## Solution + +### Copain d'étude + +Voici une invite de départ, voyez comment vous pouvez l'utiliser et la modifier à votre goût. + +```text +- "You're an expert on the Python language + + Suggest a beginner lesson for Python in the following format: + + Format: + - concepts: + - brief explanation of the lesson: + - exercise in code with solutions" +``` + +### Bot historique + +Voici quelques invites que vous pourriez utiliser : + +```text +- "You are Abe Lincoln, tell me about yourself in 3 sentences, and respond using grammar and words like Abe would have used" +- "You are Abe Lincoln, respond using grammar and words like Abe would have used: + + Tell me about your greatest accomplishments, in 300 words" +``` + +## Vérification des connaissances + +Que fait le concept de température ? + +1. Il contrôle à quel point la sortie est aléatoire. +1. Il contrôle la taille de la réponse. +1. Il contrôle combien de tokens sont utilisés. + +## 🚀 Défi + +En travaillant sur l'exercice, essayez de varier la température, essayez de la régler à 0, 0.5 et 1. N'oubliez pas que 0 est le moins varié et 1 est le plus varié, quelle valeur fonctionne le mieux pour votre application ? + +## Bon travail ! Continuez votre apprentissage + +Après avoir terminé cette leçon, consultez notre [collection d'apprentissage sur l'IA générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à améliorer vos connaissances sur l'IA générative ! + +Rendez-vous à la leçon + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/07-building-chat-applications/README.md b/translations/fr/07-building-chat-applications/README.md new file mode 100644 index 000000000..38cd04570 --- /dev/null +++ b/translations/fr/07-building-chat-applications/README.md @@ -0,0 +1,176 @@ +# Construire des Applications de Chat Alimentées par l'IA Générative + +[![Construire des Applications de Chat Alimentées par l'IA Générative](../../../translated_images/07-lesson-banner.png?WT.21b04c80931fcfbbce2e012cb013fa889033dc1cf59443c7c82ce598eaf13629.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lessons7-gh?WT.mc_id=academic-105485-koreyst) + +> _(Cliquez sur l'image ci-dessus pour visionner la vidéo de cette leçon)_ + +Maintenant que nous avons vu comment créer des applications de génération de texte, intéressons-nous aux applications de chat. + +Les applications de chat se sont intégrées dans notre vie quotidienne, offrant bien plus qu'un simple moyen de conversation informelle. Elles sont devenues des éléments essentiels du service client, de l'assistance technique, et même des systèmes de conseil sophistiqués. Il est probable que vous ayez récemment reçu de l'aide d'une application de chat. À mesure que nous intégrons des technologies avancées comme l'IA générative dans ces plateformes, la complexité et les défis augmentent. + +Certaines questions auxquelles nous devons répondre sont : + +- **Construire l'application**. Comment construire et intégrer efficacement ces applications alimentées par l'IA pour des cas d'utilisation spécifiques ? +- **Surveillance**. Une fois déployées, comment pouvons-nous surveiller et garantir que les applications fonctionnent au plus haut niveau de qualité, tant en termes de fonctionnalité que de respect des [six principes de l'IA responsable](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-105485-koreyst) ? + +Alors que nous avançons dans une ère définie par l'automatisation et les interactions homme-machine fluides, comprendre comment l'IA générative transforme la portée, la profondeur et l'adaptabilité des applications de chat devient essentiel. Cette leçon examinera les aspects architecturaux qui soutiennent ces systèmes complexes, explorera les méthodologies pour les ajuster à des tâches spécifiques au domaine, et évaluera les métriques et considérations pertinentes pour garantir un déploiement responsable de l'IA. + +## Introduction + +Cette leçon couvre : + +- Les techniques pour construire et intégrer efficacement des applications de chat. +- Comment appliquer la personnalisation et le réglage fin aux applications. +- Les stratégies et considérations pour surveiller efficacement les applications de chat. + +## Objectifs d'Apprentissage + +À la fin de cette leçon, vous serez capable de : + +- Décrire les considérations pour construire et intégrer des applications de chat dans des systèmes existants. +- Personnaliser des applications de chat pour des cas d'utilisation spécifiques. +- Identifier les métriques clés et les considérations pour surveiller et maintenir efficacement la qualité des applications de chat alimentées par l'IA. +- Garantir que les applications de chat exploitent l'IA de manière responsable. + +## Intégrer l'IA Générative dans les Applications de Chat + +Élever les applications de chat grâce à l'IA générative ne se concentre pas seulement sur les rendre plus intelligentes ; il s'agit d'optimiser leur architecture, leurs performances et leur interface utilisateur pour offrir une expérience utilisateur de qualité. Cela implique d'examiner les fondations architecturales, les intégrations API et les considérations d'interface utilisateur. Cette section vise à vous offrir une feuille de route complète pour naviguer dans ces paysages complexes, que vous les intégriez dans des systèmes existants ou que vous les construisiez en tant que plateformes autonomes. + +À la fin de cette section, vous serez équipé de l'expertise nécessaire pour construire et intégrer efficacement des applications de chat. + +### Chatbot ou Application de Chat ? + +Avant de plonger dans la construction d'applications de chat, comparons les 'chatbots' aux 'applications de chat alimentées par l'IA', qui ont des rôles et des fonctionnalités distincts. Le principal objectif d'un chatbot est d'automatiser des tâches conversationnelles spécifiques, comme répondre à des questions fréquemment posées ou suivre un colis. Il est généralement régi par une logique basée sur des règles ou des algorithmes d'IA complexes. En revanche, une application de chat alimentée par l'IA est un environnement bien plus vaste conçu pour faciliter diverses formes de communication numérique, telles que les chats texte, voix et vidéo entre utilisateurs humains. Sa caractéristique distinctive est l'intégration d'un modèle d'IA générative qui simule des conversations nuancées et semblables à celles des humains, générant des réponses basées sur une grande variété d'entrées et d'indices contextuels. Une application de chat alimentée par l'IA générative peut s'engager dans des discussions en domaine ouvert, s'adapter à des contextes conversationnels évolutifs, et même produire des dialogues créatifs ou complexes. + +Le tableau ci-dessous présente les principales différences et similitudes pour nous aider à comprendre leurs rôles uniques dans la communication numérique. + +| Chatbot | Application de Chat Alimentée par l'IA Générative | +| ------------------------------------- | ------------------------------------------------- | +| Axé sur les tâches et basé sur des règles | Conscient du contexte | +| Souvent intégré dans des systèmes plus grands | Peut héberger un ou plusieurs chatbots | +| Limité aux fonctions programmées | Intègre des modèles d'IA générative | +| Interactions spécialisées et structurées | Capable de discussions en domaine ouvert | + +### Exploiter les fonctionnalités préconstruites avec les SDK et les API + +Lors de la construction d'une application de chat, un excellent premier pas est d'évaluer ce qui existe déjà. Utiliser des SDK et des API pour construire des applications de chat est une stratégie avantageuse pour diverses raisons. En intégrant des SDK et des API bien documentés, vous positionnez stratégiquement votre application pour un succès à long terme, en abordant les préoccupations de scalabilité et de maintenance. + +- **Accélère le processus de développement et réduit les frais généraux** : S'appuyer sur des fonctionnalités préconstruites au lieu du processus coûteux de les construire vous-même vous permet de vous concentrer sur d'autres aspects de votre application que vous pourriez trouver plus importants, comme la logique métier. +- **Meilleure performance** : Lors de la construction de fonctionnalités à partir de zéro, vous vous demanderez éventuellement "Comment cela évolue-t-il ? Cette application est-elle capable de gérer un afflux soudain d'utilisateurs ?" Les SDK et API bien entretenus ont souvent des solutions intégrées pour ces préoccupations. +- **Maintenance plus facile** : Les mises à jour et améliorations sont plus faciles à gérer car la plupart des API et SDK nécessitent simplement une mise à jour d'une bibliothèque lorsqu'une nouvelle version est publiée. +- **Accès à la technologie de pointe** : Exploiter des modèles qui ont été ajustés et entraînés sur des ensembles de données étendus fournit à votre application des capacités de langage naturel. + +Accéder aux fonctionnalités d'un SDK ou d'une API implique généralement d'obtenir l'autorisation d'utiliser les services fournis, souvent par l'utilisation d'une clé unique ou d'un jeton d'authentification. Nous utiliserons la bibliothèque Python d'OpenAI pour explorer à quoi cela ressemble. Vous pouvez également l'essayer par vous-même dans le [notebook pour OpenAI](../../../07-building-chat-applications/python/oai-assignment.ipynb) ou le [notebook pour Azure OpenAI Services](../../../07-building-chat-applications/python/aoai-assignment.ipynb) pour cette leçon. + +```python +import os +from openai import OpenAI + +API_KEY = os.getenv("OPENAI_API_KEY","") + +client = OpenAI( + api_key=API_KEY + ) + +chat_completion = client.chat.completions.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Suggest two titles for an instructional lesson on chat applications for generative AI."}]) +``` + +L'exemple ci-dessus utilise le modèle GPT-3.5 Turbo pour compléter l'invite, mais remarquez que la clé API est définie avant de le faire. Vous recevriez une erreur si vous ne définissiez pas la clé. + +## Expérience Utilisateur (UX) + +Les principes généraux de l'UX s'appliquent aux applications de chat, mais voici quelques considérations supplémentaires qui deviennent particulièrement importantes en raison des composants d'apprentissage automatique impliqués. + +- **Mécanisme pour adresser l'ambiguïté** : Les modèles d'IA générative génèrent occasionnellement des réponses ambiguës. Une fonctionnalité permettant aux utilisateurs de demander des clarifications peut être utile s'ils rencontrent ce problème. +- **Rétention du contexte** : Les modèles avancés d'IA générative ont la capacité de se souvenir du contexte au sein d'une conversation, ce qui peut être un atout nécessaire pour l'expérience utilisateur. Donner aux utilisateurs la capacité de contrôler et de gérer le contexte améliore l'expérience utilisateur, mais introduit le risque de conserver des informations sensibles sur les utilisateurs. Les considérations sur la durée de stockage de ces informations, comme l'introduction d'une politique de rétention, peuvent équilibrer le besoin de contexte avec la confidentialité. +- **Personnalisation** : Avec la capacité d'apprendre et de s'adapter, les modèles d'IA offrent une expérience individualisée à un utilisateur. Adapter l'expérience utilisateur grâce à des fonctionnalités comme les profils d'utilisateur non seulement fait en sorte que l'utilisateur se sente compris, mais cela aide également dans sa recherche de réponses spécifiques, créant une interaction plus efficace et satisfaisante. + +Un exemple de personnalisation est les paramètres "Instructions personnalisées" dans ChatGPT d'OpenAI. Cela vous permet de fournir des informations sur vous-même qui peuvent être un contexte important pour vos invites. Voici un exemple d'instruction personnalisée. + +![Paramètres des Instructions Personnalisées dans ChatGPT](../../../translated_images/custom-instructions.png?WT.11dedb56ee96f65348e96bb7d6a0e61e668da5fe777ccd5b63f23e0e7fac407b.fr.mc_id=academic-105485-koreyst) + +Ce "profil" incite ChatGPT à créer un plan de leçon sur les listes chaînées. Remarquez que ChatGPT prend en compte que l'utilisateur pourrait vouloir un plan de leçon plus approfondi basé sur son expérience. + +![Une invite dans ChatGPT pour un plan de leçon sur les listes chaînées](../../../translated_images/lesson-plan-prompt.png?WT.a7012bd5b8467d2255be3eb7be93a8622cf74091e2fa815e80c0118416f064fc.fr.mc_id=academic-105485-koreyst) + +### Le Cadre de Messages Système de Microsoft pour les Modèles de Langage de Grande Taille + +[Microsoft a fourni des conseils](https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-the-models-output-format?WT.mc_id=academic-105485-koreyst) pour rédiger des messages système efficaces lors de la génération de réponses à partir de LLMs, décomposés en 4 domaines : + +1. Définir pour qui le modèle est destiné, ainsi que ses capacités et limitations. +2. Définir le format de sortie du modèle. +3. Fournir des exemples spécifiques qui démontrent le comportement souhaité du modèle. +4. Fournir des garde-fous comportementaux supplémentaires. + +### Accessibilité + +Qu'un utilisateur ait des déficiences visuelles, auditives, motrices ou cognitives, une application de chat bien conçue devrait être utilisable par tous. La liste suivante décompose des fonctionnalités spécifiques visant à améliorer l'accessibilité pour divers handicaps utilisateur. + +- **Fonctionnalités pour les Déficiences Visuelles** : Thèmes à contraste élevé et texte redimensionnable, compatibilité avec les lecteurs d'écran. +- **Fonctionnalités pour les Déficiences Auditives** : Fonctions de synthèse vocale et de reconnaissance vocale, indices visuels pour les notifications audio. +- **Fonctionnalités pour les Déficiences Motrices** : Support de navigation par clavier, commandes vocales. +- **Fonctionnalités pour les Déficiences Cognitives** : Options de langage simplifié. + +## Personnalisation et Réglage Fin pour les Modèles de Langage Spécifiques au Domaine + +Imaginez une application de chat qui comprend le jargon de votre entreprise et anticipe les requêtes spécifiques que ses utilisateurs posent fréquemment. Il existe quelques approches qui méritent d'être mentionnées : + +- **Exploiter les modèles DSL**. DSL signifie langage spécifique au domaine. Vous pouvez exploiter un modèle dit DSL entraîné sur un domaine spécifique pour comprendre ses concepts et scénarios. +- **Appliquer le réglage fin**. Le réglage fin est le processus de formation supplémentaire de votre modèle avec des données spécifiques. + +## Personnalisation : Utilisation d'un DSL + +Exploiter des modèles de langage spécifiques au domaine (Modèles DSL) peut améliorer l'engagement des utilisateurs en fournissant des interactions spécialisées et contextuellement pertinentes. C'est un modèle qui est entraîné ou ajusté pour comprendre et générer du texte lié à un domaine, une industrie ou un sujet spécifique. Les options pour utiliser un modèle DSL peuvent varier de la formation d'un à partir de zéro, à l'utilisation de modèles préexistants via des SDK et des API. Une autre option est le réglage fin, qui implique de prendre un modèle pré-entraîné existant et de l'adapter pour un domaine spécifique. + +## Personnalisation : Appliquer le réglage fin + +Le réglage fin est souvent envisagé lorsqu'un modèle pré-entraîné n'est pas à la hauteur dans un domaine spécialisé ou une tâche spécifique. + +Par exemple, les requêtes médicales sont complexes et nécessitent beaucoup de contexte. Lorsqu'un professionnel de la santé diagnostique un patient, c'est basé sur une variété de facteurs tels que le mode de vie ou les conditions préexistantes, et peut même s'appuyer sur des revues médicales récentes pour valider leur diagnostic. Dans de tels scénarios nuancés, une application de chat IA à usage général ne peut pas être une source fiable. + +### Scénario : une application médicale + +Considérez une application de chat conçue pour aider les praticiens médicaux en fournissant des références rapides aux directives de traitement, interactions médicamenteuses, ou résultats de recherches récentes. + +Un modèle à usage général pourrait être adéquat pour répondre à des questions médicales de base ou fournir des conseils généraux, mais il pourrait avoir du mal avec les éléments suivants : + +- **Cas très spécifiques ou complexes**. Par exemple, un neurologue pourrait demander à l'application : "Quelles sont les meilleures pratiques actuelles pour gérer l'épilepsie pharmacorésistante chez les patients pédiatriques ?" +- **Manque d'avancées récentes**. Un modèle à usage général pourrait avoir du mal à fournir une réponse actuelle qui intègre les avancées les plus récentes en neurologie et en pharmacologie. + +Dans des cas comme ceux-ci, le réglage fin du modèle avec un ensemble de données médicales spécialisé peut considérablement améliorer sa capacité à gérer ces demandes médicales complexes de manière plus précise et fiable. Cela nécessite l'accès à un ensemble de données large et pertinent qui représente les défis et questions spécifiques au domaine qui doivent être abordés. + +## Considérations pour une Expérience de Chat de Haute Qualité Alimentée par l'IA + +Cette section décrit les critères pour des applications de chat de "haute qualité", qui incluent la capture de métriques exploitables et l'adhésion à un cadre qui exploite de manière responsable la technologie de l'IA. + +### Métriques Clés + +Pour maintenir la performance de haute qualité d'une application, il est essentiel de suivre des métriques clés et des considérations. Ces mesures non seulement garantissent la fonctionnalité de l'application, mais évaluent également la qualité du modèle d'IA et l'expérience utilisateur. Voici une liste qui couvre les métriques de base, d'IA, et d'expérience utilisateur à considérer. + +| Métrique | Définition | Considérations pour le Développeur de Chat | +| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | +| **Disponibilité** | Mesure le temps pendant lequel l'application est opérationnelle et accessible par les utilisateurs. | Comment minimiserez-vous les temps d'arrêt ? | +| **Temps de Réponse** | Le temps pris par l'application pour répondre à une requête utilisateur. | Comment pouvez-vous optimiser le traitement des requêtes pour améliorer le temps de réponse ? | +| **Précision** | Le ratio des prédictions positives vraies au nombre total de prédictions positives | Comment validerez-vous la précision de votre modèle ? | +| **Rappel (Sensibilité)** | Le ratio des prédictions positives vraies au nombre réel de positifs | Comment mesurerez-vous et améliorerez-vous le rappel ? | +| **Score F1** | La moyenne harmonique de la précision et du rappel, qui équilibre le compromis entre les deux. | Quel est votre score F1 cible ? Comment équilibrerez-vous précision et rappel ? | +| **Perplexité** | Mesure à quel point la distribution de probabilité prédite par le modèle s'aligne avec la distribution réelle des données. | Comment minimiserez-vous la perplexité ? | +| **Métriques de Satisfaction Utilisateur** | Mesure la perception de l'utilisateur de l'application. Souvent capturée par des enquêtes. | À quelle fréquence collecterez-vous les retours des utilisateurs ? Comment vous adapterez-vous en fonction de cela ? | +| **Taux d'Erreur** | Le taux auquel le modèle fait des erreurs dans la compréhension ou la sortie. | Quelles stratégies avez-vous en place pour réduire les taux d'erreur ? | +| **Cycles de Réentraînement** | La fréquence à laquelle le modèle est mis à jour pour incorporer de nouvelles données et idées. | À quelle fréquence réentraînerez-vous le modèle ? Qu'est-ce qui déclenche un cycle de réentraînement ? | +| **Détection d'Anomalies** | Outils et techniques pour identifier les motifs inhabituels qui ne se conforment pas au comportement attendu. | Comment répondrez-vous aux anomalies ? | + +### Mettre en Œuvre des Pratiques d'IA Responsable dans les Applications de Chat + +L'approche de Microsoft pour l'IA Responsable a identifié six principes qui devraient guider le développement et l'utilisation de l'IA. Voici les principes, leur définition, et ce que les développeurs de chat devraient considérer et pourquoi ils devraient les prendre au sérieux. + +| Principes | Définition de Microsoft | Considérations pour le Développeur de Chat | Pourquoi C'est Important | +| ---------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | +| Équité | Les systèmes d'IA doivent traiter toutes les personnes de manière équitable. | Assurez-vous que l'application de chat ne discrimine pas en fonction des données utilisateur. | Pour instaurer la confiance et l'inclusivité parmi les utilisateurs ; évite les conséquences juridiques. | +| Fiabilité et Sécurité | Les systèmes d'IA doivent fonctionner de manière fiable et sûre. | Mettre en œuvre des tests et des sécurités pour minimiser les erreurs et les risques. | Assure la satisfaction des utilisateurs et prévient les dommages potentiels. | +| Confidentialité et Sécurité | Les systèmes d'IA doivent être sécurisés et respecter la confidentialité. | Mettre en œuvre des mesures de cryptage et de protection des données solides. | Pour protéger les données sensibles des utilisateurs et se conformer aux lois sur la confidentialité. | +| Inclusivité | Les systèmes d'IA doivent responsabiliser tout le monde et engager les gens. | Concevoir une UI/UX accessible et facile à utiliser pour des publics diversifiés. | Assure qu'un plus large éventail de personnes peut utiliser l'application efficacement. | +| Transparence | Les systèmes d'IA doivent être compréhensibles. | Fournir une documentation claire et des raisons + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/08-building-search-applications/README.md b/translations/fr/08-building-search-applications/README.md new file mode 100644 index 000000000..00f8e51e7 --- /dev/null +++ b/translations/fr/08-building-search-applications/README.md @@ -0,0 +1,166 @@ +# Construire des applications de recherche + +[![Introduction à l'IA générative et aux grands modèles de langage](../../../translated_images/08-lesson-banner.png?WT.38007baa37b3809836fefd9caf72cba7434d1d1e82074d170c2b066e3c7aa2d0.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson8-gh?WT.mc_id=academic-105485-koreyst) + +> > _Cliquez sur l'image ci-dessus pour visionner la vidéo de cette leçon_ + +Les LLMs ne se limitent pas aux chatbots et à la génération de texte. Il est également possible de créer des applications de recherche en utilisant les Embeddings. Les Embeddings sont des représentations numériques de données également connues sous le nom de vecteurs, et peuvent être utilisées pour la recherche sémantique de données. + +Dans cette leçon, vous allez construire une application de recherche pour notre startup éducative. Notre startup est une organisation à but non lucratif qui fournit une éducation gratuite aux étudiants des pays en développement. Elle dispose d'un grand nombre de vidéos YouTube que les étudiants peuvent utiliser pour apprendre l'IA. Notre startup souhaite créer une application de recherche qui permette aux étudiants de rechercher une vidéo YouTube en tapant une question. + +Par exemple, un étudiant pourrait taper 'Qu'est-ce que les Jupyter Notebooks ?' ou 'Qu'est-ce qu'Azure ML' et l'application de recherche renverra une liste de vidéos YouTube pertinentes à la question, et mieux encore, l'application de recherche fournira un lien vers l'endroit dans la vidéo où se trouve la réponse à la question. + +## Introduction + +Dans cette leçon, nous aborderons : + +- Recherche sémantique vs recherche par mots-clés. +- Qu'est-ce que les Text Embeddings. +- Création d'un index de Text Embeddings. +- Recherche dans un index de Text Embeddings. + +## Objectifs d'apprentissage + +Après avoir terminé cette leçon, vous serez capable de : + +- Faire la différence entre la recherche sémantique et par mots-clés. +- Expliquer ce que sont les Text Embeddings. +- Créer une application utilisant les Embeddings pour rechercher des données. + +## Pourquoi créer une application de recherche ? + +Créer une application de recherche vous aidera à comprendre comment utiliser les Embeddings pour rechercher des données. Vous apprendrez également à créer une application de recherche que les étudiants pourront utiliser pour trouver rapidement des informations. + +La leçon inclut un Index d'Embeddings des transcriptions YouTube de la chaîne [AI Show](https://www.youtube.com/playlist?list=PLlrxD0HtieHi0mwteKBOfEeOYf0LJU4O1) de Microsoft. Le AI Show est une chaîne YouTube qui vous enseigne l'IA et l'apprentissage automatique. L'Index d'Embeddings contient les Embeddings de chaque transcription YouTube jusqu'en octobre 2023. Vous utiliserez cet Index d'Embeddings pour construire une application de recherche pour notre startup. L'application de recherche renvoie un lien vers l'endroit dans la vidéo où se trouve la réponse à la question. C'est un excellent moyen pour les étudiants de trouver rapidement les informations dont ils ont besoin. + +Voici un exemple de requête sémantique pour la question 'can you use rstudio with azure ml?'. Consultez l'url YouTube, vous verrez que l'url contient un horodatage qui vous amène à l'endroit dans la vidéo où se trouve la réponse à la question. + +![Requête sémantique pour la question "can you use rstudio with Azure ML"](../../../translated_images/query-results.png?WT.c2bcab091b108e899efca56b2cd996ea8f95145c049888f52ef7495a2b7df665.fr.mc_id=academic-105485-koreyst) + +## Qu'est-ce que la recherche sémantique ? + +Vous vous demandez peut-être ce qu'est la recherche sémantique ? La recherche sémantique est une technique de recherche qui utilise la sémantique, ou le sens, des mots dans une requête pour renvoyer des résultats pertinents. + +Voici un exemple de recherche sémantique. Disons que vous cherchez à acheter une voiture, vous pourriez chercher 'ma voiture de rêve', la recherche sémantique comprend que vous ne parlez pas de rêve à propos d'une voiture, mais que vous cherchez à acheter votre voiture de rêve. La recherche sémantique comprend votre intention et renvoie des résultats pertinents. L'alternative est une recherche littérale qui chercherait littéralement des rêves à propos de voitures et renverrait souvent des résultats non pertinents. + +## Qu'est-ce que les Text Embeddings ? + +[Les Text Embeddings](https://en.wikipedia.org/wiki/Word_embedding?WT.mc_id=academic-105485-koreyst) sont une technique de représentation de texte utilisée dans le [traitement du langage naturel](https://en.wikipedia.org/wiki/Natural_language_processing?WT.mc_id=academic-105485-koreyst). Les Text Embeddings sont des représentations numériques sémantiques de texte. Les Embeddings sont utilisés pour représenter des données d'une manière facile à comprendre pour une machine. Il existe de nombreux modèles pour créer des Text Embeddings, dans cette leçon, nous nous concentrerons sur la génération d'embeddings en utilisant le modèle OpenAI Embedding. + +Voici un exemple, imaginez que le texte suivant se trouve dans une transcription de l'un des épisodes de la chaîne YouTube AI Show : + +```text +Today we are going to learn about Azure Machine Learning. +``` + +Nous passerions le texte à l'API OpenAI Embedding et elle renverrait l'embedding suivant composé de 1536 nombres, également appelé un vecteur. Chaque nombre dans le vecteur représente un aspect différent du texte. Pour plus de concision, voici les dix premiers nombres du vecteur. + +```python +[-0.006655829958617687, 0.0026128944009542465, 0.008792596869170666, -0.02446001023054123, -0.008540431968867779, 0.022071078419685364, -0.010703742504119873, 0.003311325330287218, -0.011632772162556648, -0.02187200076878071, ...] +``` + +## Comment l'index d'Embedding est-il créé ? + +L'index d'Embedding pour cette leçon a été créé avec une série de scripts Python. Vous trouverez les scripts ainsi que les instructions dans le [README](./scripts/README.md?WT.mc_id=academic-105485-koreyst) dans le dossier 'scripts' pour cette leçon. Vous n'avez pas besoin d'exécuter ces scripts pour compléter cette leçon car l'index d'Embedding est fourni pour vous. + +Les scripts effectuent les opérations suivantes : + +1. La transcription de chaque vidéo YouTube dans la playlist [AI Show](https://www.youtube.com/playlist?list=PLlrxD0HtieHi0mwteKBOfEeOYf0LJU4O1) est téléchargée. +2. En utilisant les [Fonctions OpenAI](https://learn.microsoft.com/azure/ai-services/openai/how-to/function-calling?WT.mc_id=academic-105485-koreyst), une tentative est faite pour extraire le nom de l'orateur des trois premières minutes de la transcription YouTube. Le nom de l'orateur pour chaque vidéo est stocké dans l'index d'Embedding nommé `embedding_index_3m.json`. +3. Le texte de la transcription est ensuite divisé en **segments de texte de 3 minutes**. Le segment inclut environ 20 mots se chevauchant du segment suivant pour s'assurer que l'Embedding pour le segment n'est pas coupé et pour fournir un meilleur contexte de recherche. +4. Chaque segment de texte est ensuite passé à l'API OpenAI Chat pour résumer le texte en 60 mots. Le résumé est également stocké dans l'index d'Embedding `embedding_index_3m.json`. +5. Enfin, le texte du segment est passé à l'API OpenAI Embedding. L'API Embedding renvoie un vecteur de 1536 nombres qui représentent le sens sémantique du segment. Le segment ainsi que le vecteur d'Embedding OpenAI sont stockés dans un index d'Embedding `embedding_index_3m.json`. + +### Bases de données vectorielles + +Pour simplifier la leçon, l'index d'Embedding est stocké dans un fichier JSON nommé `embedding_index_3m.json` et chargé dans un DataFrame Pandas. Cependant, en production, l'index d'Embedding serait stocké dans une base de données vectorielle telle que [Azure Cognitive Search](https://learn.microsoft.com/training/modules/improve-search-results-vector-search?WT.mc_id=academic-105485-koreyst), [Redis](https://cookbook.openai.com/examples/vector_databases/redis/readme?WT.mc_id=academic-105485-koreyst), [Pinecone](https://cookbook.openai.com/examples/vector_databases/pinecone/readme?WT.mc_id=academic-105485-koreyst), [Weaviate](https://cookbook.openai.com/examples/vector_databases/weaviate/readme?WT.mc_id=academic-105485-koreyst), pour n'en nommer que quelques-unes. + +## Comprendre la similarité cosinus + +Nous avons appris les embeddings de texte, l'étape suivante est d'apprendre comment utiliser les embeddings de texte pour rechercher des données et en particulier trouver les embeddings les plus similaires à une requête donnée en utilisant la similarité cosinus. + +### Qu'est-ce que la similarité cosinus ? + +La similarité cosinus est une mesure de similarité entre deux vecteurs, vous entendrez également cela appelé `nearest neighbor search`. Pour effectuer une recherche de similarité cosinus, vous devez _vectoriser_ le texte de la _requête_ en utilisant l'API OpenAI Embedding. Ensuite, calculez la _similarité cosinus_ entre le vecteur de requête et chaque vecteur dans l'index d'Embedding. Rappelez-vous, l'index d'Embedding a un vecteur pour chaque segment de texte de transcription YouTube. Enfin, triez les résultats par similarité cosinus et les segments de texte avec la plus haute similarité cosinus sont les plus similaires à la requête. + +D'un point de vue mathématique, la similarité cosinus mesure le cosinus de l'angle entre deux vecteurs projetés dans un espace multidimensionnel. Cette mesure est bénéfique, car si deux documents sont éloignés par la distance euclidienne en raison de leur taille, ils pourraient encore avoir un angle plus petit entre eux et donc une similarité cosinus plus élevée. Pour plus d'informations sur les équations de similarité cosinus, consultez [Similarité cosinus](https://en.wikipedia.org/wiki/Cosine_similarity?WT.mc_id=academic-105485-koreyst). + +## Construire votre première application de recherche + +Ensuite, nous allons apprendre à construire une application de recherche en utilisant les Embeddings. L'application de recherche permettra aux étudiants de rechercher une vidéo en tapant une question. L'application de recherche renverra une liste de vidéos pertinentes à la question. L'application de recherche renverra également un lien vers l'endroit dans la vidéo où se trouve la réponse à la question. + +Cette solution a été construite et testée sur Windows 11, macOS et Ubuntu 22.04 en utilisant Python 3.10 ou une version ultérieure. Vous pouvez télécharger Python depuis [python.org](https://www.python.org/downloads/?WT.mc_id=academic-105485-koreyst). + +## Devoir - construire une application de recherche, pour permettre aux étudiants + +Nous avons présenté notre startup au début de cette leçon. Il est maintenant temps de permettre aux étudiants de construire une application de recherche pour leurs évaluations. + +Dans ce devoir, vous allez créer les Services Azure OpenAI qui seront utilisés pour construire l'application de recherche. Vous allez créer les Services Azure OpenAI suivants. Vous aurez besoin d'un abonnement Azure pour compléter ce devoir. + +### Démarrer le Cloud Shell Azure + +1. Connectez-vous au [portail Azure](https://portal.azure.com/?WT.mc_id=academic-105485-koreyst). +2. Sélectionnez l'icône Cloud Shell dans le coin supérieur droit du portail Azure. +3. Sélectionnez **Bash** pour le type d'environnement. + +#### Créer un groupe de ressources + +> Pour ces instructions, nous utilisons le groupe de ressources nommé "semantic-video-search" dans East US. +> Vous pouvez changer le nom du groupe de ressources, mais lorsque vous changez l'emplacement des ressources, +> vérifiez le [tableau de disponibilité des modèles](https://aka.ms/oai/models?WT.mc_id=academic-105485-koreyst). + +```shell +az group create --name semantic-video-search --location eastus +``` + +#### Créer une ressource de Service Azure OpenAI + +Depuis le Cloud Shell Azure, exécutez la commande suivante pour créer une ressource de Service Azure OpenAI. + +```shell +az cognitiveservices account create --name semantic-video-openai --resource-group semantic-video-search \ + --location eastus --kind OpenAI --sku s0 +``` + +#### Obtenir le point de terminaison et les clés pour utilisation dans cette application + +Depuis le Cloud Shell Azure, exécutez les commandes suivantes pour obtenir le point de terminaison et les clés pour la ressource de Service Azure OpenAI. + +```shell +az cognitiveservices account show --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .properties.endpoint +az cognitiveservices account keys list --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .key1 +``` + +#### Déployer le modèle d'Embedding OpenAI + +Depuis le Cloud Shell Azure, exécutez la commande suivante pour déployer le modèle d'Embedding OpenAI. + +```shell +az cognitiveservices account deployment create \ + --name semantic-video-openai \ + --resource-group semantic-video-search \ + --deployment-name text-embedding-ada-002 \ + --model-name text-embedding-ada-002 \ + --model-version "2" \ + --model-format OpenAI \ + --sku-capacity 100 --sku-name "Standard" +``` + +## Solution + +Ouvrez le [notebook de solution](../../../08-building-search-applications/python/aoai-solution.ipynb) dans GitHub Codespaces et suivez les instructions dans le Jupyter Notebook. + +Lorsque vous exécutez le notebook, vous serez invité à entrer une requête. La boîte de saisie ressemblera à ceci : + +![Boîte de saisie pour que l'utilisateur saisisse une requête](../../../translated_images/notebook-search.png?WT.2910e3d34815aab8d713050521ac5fcb2436defe66fed016f56b95867eb12fbd.fr.mc_id=academic-105485-koreyst) + +## Bon travail ! Continuez votre apprentissage + +Après avoir terminé cette leçon, consultez notre [collection d'apprentissage sur l'IA générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à développer vos connaissances en IA générative ! + +Rendez-vous à la leçon 9 où nous verrons comment [créer des applications de génération d'images](../09-building-image-applications/README.md?WT.mc_id=academic-105485-koreyst) ! + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatisée par intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/08-building-search-applications/scripts/README.md b/translations/fr/08-building-search-applications/scripts/README.md new file mode 100644 index 000000000..37247b1f4 --- /dev/null +++ b/translations/fr/08-building-search-applications/scripts/README.md @@ -0,0 +1,167 @@ +# Préparation des données de transcription + +Les scripts de préparation des données de transcription téléchargent les transcriptions de vidéos YouTube et les préparent pour être utilisées avec l'exemple de recherche sémantique avec OpenAI Embeddings et Functions. + +Les scripts de préparation des données de transcription ont été testés sur les dernières versions de Windows 11, macOS Ventura et Ubuntu 22.04 (et supérieures). + +## Créer les ressources nécessaires du service Azure OpenAI + +> [!IMPORTANT] +> Nous vous suggérons de mettre à jour l'Azure CLI vers la dernière version pour garantir la compatibilité avec OpenAI +> Voir [Documentation](https://learn.microsoft.com/cli/azure/update-azure-cli?WT.mc_id=academic-105485-koreyst) + +1. Créer un groupe de ressources + +> [!NOTE] +> Pour ces instructions, nous utilisons le groupe de ressources nommé "semantic-video-search" dans East US. +> Vous pouvez changer le nom du groupe de ressources, mais lorsque vous modifiez l'emplacement des ressources, +> vérifiez le [tableau de disponibilité des modèles](https://aka.ms/oai/models?WT.mc_id=academic-105485-koreyst). + +```console +az group create --name semantic-video-search --location eastus +``` + +1. Créer une ressource du service Azure OpenAI. + +```console +az cognitiveservices account create --name semantic-video-openai --resource-group semantic-video-search \ + --location eastus --kind OpenAI --sku s0 +``` + +1. Obtenez le point de terminaison et les clés pour utilisation dans cette application + +```console +az cognitiveservices account show --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .properties.endpoint +az cognitiveservices account keys list --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .key1 +``` + +1. Déployez les modèles suivants : + - `text-embedding-ada-002` version `2` or greater, named `text-embedding-ada-002` + - `gpt-35-turbo` version `0613` or greater, named `gpt-35-turbo` + +```console +az cognitiveservices account deployment create \ + --name semantic-video-openai \ + --resource-group semantic-video-search \ + --deployment-name text-embedding-ada-002 \ + --model-name text-embedding-ada-002 \ + --model-version "2" \ + --model-format OpenAI \ + --scale-settings-scale-type "Standard" +az cognitiveservices account deployment create \ + --name semantic-video-openai \ + --resource-group semantic-video-search \ + --deployment-name gpt-35-turbo \ + --model-name gpt-35-turbo \ + --model-version "0613" \ + --model-format OpenAI \ + --sku-capacity 100 \ + --sku-name "Standard" +``` + +## Logiciel requis + +- [Python 3.9](https://www.python.org/downloads/?WT.mc_id=academic-105485-koreyst) ou supérieur + +## Variables d'environnement + +Les variables d'environnement suivantes sont nécessaires pour exécuter les scripts de préparation des données de transcription YouTube. + +### Sur Windows + +Nous recommandons d'ajouter les variables à votre `user` environment variables. +`Windows Start` > `Edit the system environment variables` > `Environment Variables` > `User variables` for [USER] > `New`. + +```text +AZURE_OPENAI_API_KEY \ +AZURE_OPENAI_ENDPOINT \ +AZURE_OPENAI_MODEL_DEPLOYMENT_NAME \ +GOOGLE_DEVELOPER_API_KEY = \ +``` + +### Sur Linux et macOS + +Nous recommandons d'ajouter les exports suivants à votre fichier `~/.bashrc` or `~/.zshrc`. + +```bash +export AZURE_OPENAI_API_KEY= +export AZURE_OPENAI_ENDPOINT= +export AZURE_OPENAI_MODEL_DEPLOYMENT_NAME= +export GOOGLE_DEVELOPER_API_KEY= +``` + +## Installer les bibliothèques Python requises + +1. Installez le [client git](https://git-scm.com/downloads?WT.mc_id=academic-105485-koreyst) s'il n'est pas déjà installé. +1. Depuis une fenêtre `Terminal`, clonez l'exemple dans le dossier de dépôt de votre choix. + + ```bash + git clone https://github.com/gloveboxes/semanic-search-openai-embeddings-functions.git + ``` + +1. Accédez au dossier `data_prep`. + + ```bash + cd semanic-search-openai-embeddings-functions/src/data_prep + ``` + +1. Créez un environnement virtuel Python. + + Sur Windows : + + ```powershell + python -m venv .venv + ``` + + Sur macOS et Linux : + + ```bash + python3 -m venv .venv + ``` + +1. Activez l'environnement virtuel Python. + + Sur Windows : + + ```powershell + .venv\Scripts\activate + ``` + + Sur macOS et Linux : + + ```bash + source .venv/bin/activate + ``` + +1. Installez les bibliothèques requises. + + Sur Windows : + + ```powershell + pip install -r requirements.txt + ``` + + Sur macOS et Linux : + + ```bash + pip3 install -r requirements.txt + ``` + +## Exécuter les scripts de préparation des données de transcription YouTube + +### Sur Windows + +```powershell +.\transcripts_prepare.ps1 +``` + +### Sur macOS et Linux + +```bash +./transcripts_prepare.sh +``` + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique par intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations cruciales, il est recommandé de recourir à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations découlant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/09-building-image-applications/README.md b/translations/fr/09-building-image-applications/README.md new file mode 100644 index 000000000..3e45e7d32 --- /dev/null +++ b/translations/fr/09-building-image-applications/README.md @@ -0,0 +1,468 @@ +# Construire des Applications de Génération d'Images + +[![Construire des Applications de Génération d'Images](../../../translated_images/09-lesson-banner.png?WT.d9f0561bfac2f22fe149efecb3524eaf381a4aa260ba334f49b1fd215bd59d75.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson9-gh?WT.mc_id=academic-105485-koreyst) + +Les LLMs ne se limitent pas à la génération de texte. Il est également possible de générer des images à partir de descriptions textuelles. Avoir des images comme modalité peut être très utile dans plusieurs domaines, de la MedTech, à l'architecture, en passant par le tourisme, le développement de jeux, et plus encore. Dans ce chapitre, nous examinerons les deux modèles de génération d'images les plus populaires, DALL-E et Midjourney. + +## Introduction + +Dans cette leçon, nous aborderons : + +- La génération d'images et pourquoi elle est utile. +- DALL-E et Midjourney, ce qu'ils sont et comment ils fonctionnent. +- Comment vous pourriez construire une application de génération d'images. + +## Objectifs d'Apprentissage + +Après avoir terminé cette leçon, vous serez capable de : + +- Construire une application de génération d'images. +- Définir les limites de votre application avec des méta-promptes. +- Travailler avec DALL-E et Midjourney. + +## Pourquoi construire une application de génération d'images ? + +Les applications de génération d'images sont un excellent moyen d'explorer les capacités de l'IA générative. Elles peuvent être utilisées, par exemple : + +- **Édition et synthèse d'images**. Vous pouvez générer des images pour divers cas d'utilisation, tels que l'édition et la synthèse d'images. + +- **Appliquées à divers secteurs**. Elles peuvent également être utilisées pour générer des images pour divers secteurs comme la Medtech, le tourisme, le développement de jeux et plus encore. + +## Scénario : Edu4All + +Dans le cadre de cette leçon, nous continuerons à travailler avec notre startup, Edu4All. Les étudiants créeront des images pour leurs évaluations, les images exactes étant à la discrétion des étudiants, mais elles pourraient être des illustrations pour leur propre conte de fées, créer un nouveau personnage pour leur histoire ou les aider à visualiser leurs idées et concepts. + +Voici ce que les étudiants d'Edu4All pourraient générer par exemple s'ils travaillent en classe sur des monuments : + +![Startup Edu4All, classe sur les monuments, Tour Eiffel](../../../translated_images/startup.png?WT.da6453984b26f46f3e26925e20877c740be4f328afdfce9fe36b23e7b434c7b5.fr.mc_id=academic-105485-koreyst) + +en utilisant un prompt comme + +> "Chien à côté de la Tour Eiffel au lever du soleil" + +## Qu'est-ce que DALL-E et Midjourney ? + +[DALL-E](https://openai.com/dall-e-2?WT.mc_id=academic-105485-koreyst) et [Midjourney](https://www.midjourney.com/?WT.mc_id=academic-105485-koreyst) sont deux des modèles de génération d'images les plus populaires, ils vous permettent d'utiliser des promptes pour générer des images. + +### DALL-E + +Commençons par DALL-E, qui est un modèle d'IA générative qui génère des images à partir de descriptions textuelles. + +> [DALL-E est une combinaison de deux modèles, CLIP et attention diffusée](https://towardsdatascience.com/openais-dall-e-and-clip-101-a-brief-introduction-3a4367280d4e?WT.mc_id=academic-105485-koreyst). + +- **CLIP**, est un modèle qui génère des embeddings, qui sont des représentations numériques de données, à partir d'images et de texte. + +- **Attention diffusée**, est un modèle qui génère des images à partir d'embeddings. DALL-E est entraîné sur un ensemble de données d'images et de texte et peut être utilisé pour générer des images à partir de descriptions textuelles. Par exemple, DALL-E peut être utilisé pour générer des images d'un chat avec un chapeau, ou d'un chien avec une crête iroquoise. + +### Midjourney + +Midjourney fonctionne de manière similaire à DALL-E, il génère des images à partir de promptes textuelles. Midjourney peut également être utilisé pour générer des images en utilisant des promptes comme "un chat avec un chapeau", ou "un chien avec une crête iroquoise". + +![Image générée par Midjourney, pigeon mécanique](https://upload.wikimedia.org/wikipedia/commons/thumb/8/8c/Rupert_Breheny_mechanical_dove_eca144e7-476d-4976-821d-a49c408e4f36.png/440px-Rupert_Breheny_mechanical_dove_eca144e7-476d-4976-821d-a49c408e4f36.png?WT.mc_id=academic-105485-koreyst) +_Crédit image Wikipedia, image générée par Midjourney_ + +## Comment fonctionnent DALL-E et Midjourney + +Tout d'abord, [DALL-E](https://arxiv.org/pdf/2102.12092.pdf?WT.mc_id=academic-105485-koreyst). DALL-E est un modèle d'IA générative basé sur l'architecture de transformateur avec un _transformateur autoregressif_. + +Un _transformateur autoregressif_ définit comment un modèle génère des images à partir de descriptions textuelles, il génère un pixel à la fois, puis utilise les pixels générés pour générer le pixel suivant. En passant par plusieurs couches dans un réseau de neurones, jusqu'à ce que l'image soit complète. + +Avec ce processus, DALL-E contrôle les attributs, les objets, les caractéristiques, et plus encore dans l'image qu'il génère. Cependant, DALL-E 2 et 3 ont plus de contrôle sur l'image générée. + +## Construire votre première application de génération d'images + +Alors, que faut-il pour construire une application de génération d'images ? Vous avez besoin des bibliothèques suivantes : + +- **python-dotenv**, il est fortement recommandé d'utiliser cette bibliothèque pour garder vos secrets dans un fichier _.env_ à l'écart du code. +- **openai**, cette bibliothèque est celle que vous utiliserez pour interagir avec l'API OpenAI. +- **pillow**, pour travailler avec des images en Python. +- **requests**, pour vous aider à effectuer des requêtes HTTP. + +1. Créez un fichier _.env_ avec le contenu suivant : + + ```text + AZURE_OPENAI_ENDPOINT= + AZURE_OPENAI_API_KEY= + ``` + + Localisez ces informations dans le portail Azure pour votre ressource dans la section "Clés et Point de terminaison". + +1. Rassemblez les bibliothèques ci-dessus dans un fichier appelé _requirements.txt_ comme suit : + + ```text + python-dotenv + openai + pillow + requests + ``` + +1. Ensuite, créez un environnement virtuel et installez les bibliothèques : + + ```bash + python3 -m venv venv + source venv/bin/activate + pip install -r requirements.txt + ``` + + Pour Windows, utilisez les commandes suivantes pour créer et activer votre environnement virtuel : + + ```bash + python3 -m venv venv + venv\Scripts\activate.bat + ``` + +1. Ajoutez le code suivant dans un fichier appelé _app.py_ : + + ```python + import openai + import os + import requests + from PIL import Image + import dotenv + + # import dotenv + dotenv.load_dotenv() + + # Get endpoint and key from environment variables + openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] + openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] + + # Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only) + openai.api_version = '2023-06-01-preview' + openai.api_type = 'azure' + + + try: + # Create an image by using the image generation API + generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) + # Set the directory for the stored image + image_dir = os.path.join(os.curdir, 'images') + + # If the directory doesn't exist, create it + if not os.path.isdir(image_dir): + os.mkdir(image_dir) + + # Initialize the image path (note the filetype should be png) + image_path = os.path.join(image_dir, 'generated-image.png') + + # Retrieve the generated image + image_url = generation_response["data"][0]["url"] # extract image URL from response + generated_image = requests.get(image_url).content # download the image + with open(image_path, "wb") as image_file: + image_file.write(generated_image) + + # Display the image in the default image viewer + image = Image.open(image_path) + image.show() + + # catch exceptions + except openai.InvalidRequestError as err: + print(err) + + ``` + +Expliquons ce code : + +- Tout d'abord, nous importons les bibliothèques dont nous avons besoin, y compris la bibliothèque OpenAI, la bibliothèque dotenv, la bibliothèque requests et la bibliothèque Pillow. + + ```python + import openai + import os + import requests + from PIL import Image + import dotenv + ``` + +- Ensuite, nous chargeons les variables d'environnement à partir du fichier _.env_. + + ```python + # import dotenv + dotenv.load_dotenv() + ``` + +- Après cela, nous définissons le point de terminaison, la clé pour l'API OpenAI, la version et le type. + + ```python + # Get endpoint and key from environment variables + openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] + openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] + + # add version and type, Azure specific + openai.api_version = '2023-06-01-preview' + openai.api_type = 'azure' + ``` + +- Ensuite, nous générons l'image : + + ```python + # Create an image by using the image generation API + generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) + ``` + + Le code ci-dessus répond avec un objet JSON qui contient l'URL de l'image générée. Nous pouvons utiliser l'URL pour télécharger l'image et l'enregistrer dans un fichier. + +- Enfin, nous ouvrons l'image et utilisons le visualiseur d'images standard pour l'afficher : + + ```python + image = Image.open(image_path) + image.show() + ``` + +### Plus de détails sur la génération de l'image + +Examinons le code qui génère l'image plus en détail : + +```python +generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) +``` + +- **prompt**, est le prompt textuel qui est utilisé pour générer l'image. Dans ce cas, nous utilisons le prompt "Lapin sur un cheval, tenant une sucette, dans une prairie brumeuse où poussent des jonquilles". +- **size**, est la taille de l'image qui est générée. Dans ce cas, nous générons une image de 1024x1024 pixels. +- **n**, est le nombre d'images qui sont générées. Dans ce cas, nous générons deux images. +- **temperature**, est un paramètre qui contrôle le caractère aléatoire de la sortie d'un modèle d'IA générative. La température est une valeur comprise entre 0 et 1 où 0 signifie que la sortie est déterministe et 1 signifie que la sortie est aléatoire. La valeur par défaut est 0.7. + +Il y a plus de choses que vous pouvez faire avec les images que nous aborderons dans la section suivante. + +## Capacités supplémentaires de génération d'images + +Vous avez vu jusqu'à présent comment nous avons pu générer une image en quelques lignes en Python. Cependant, il y a plus de choses que vous pouvez faire avec les images. + +Vous pouvez également faire ce qui suit : + +- **Effectuer des modifications**. En fournissant une image existante, un masque et un prompt, vous pouvez modifier une image. Par exemple, vous pouvez ajouter quelque chose à une partie d'une image. Imaginez notre image de lapin, vous pouvez ajouter un chapeau au lapin. Comment vous feriez cela est en fournissant l'image, un masque (identifiant la partie de la zone pour le changement) et un prompt textuel pour dire ce qui doit être fait. + + ```python + response = openai.Image.create_edit( + image=open("base_image.png", "rb"), + mask=open("mask.png", "rb"), + prompt="An image of a rabbit with a hat on its head.", + n=1, + size="1024x1024" + ) + image_url = response['data'][0]['url'] + ``` + + L'image de base ne contiendrait que le lapin, mais l'image finale aurait le chapeau sur le lapin. + +- **Créer des variations**. L'idée est que vous prenez une image existante et demandez que des variations soient créées. Pour créer une variation, vous fournissez une image et un prompt textuel et codez comme suit : + + ```python + response = openai.Image.create_variation( + image=open("bunny-lollipop.png", "rb"), + n=1, + size="1024x1024" + ) + image_url = response['data'][0]['url'] + ``` + + > Note, ceci est uniquement pris en charge sur OpenAI + +## Température + +La température est un paramètre qui contrôle le caractère aléatoire de la sortie d'un modèle d'IA générative. La température est une valeur comprise entre 0 et 1 où 0 signifie que la sortie est déterministe et 1 signifie que la sortie est aléatoire. La valeur par défaut est 0.7. + +Examinons un exemple de fonctionnement de la température, en exécutant ce prompt deux fois : + +> Prompt : "Lapin sur un cheval, tenant une sucette, dans une prairie brumeuse où poussent des jonquilles" + +![Lapin sur un cheval tenant une sucette, version 1](../../../translated_images/v1-generated-image.png?WT.e88fb2d10c6d1ae1c198e2959629a4737a139b457fed4b2f325b2ea8d2c7bca6.fr.mc_id=academic-105485-koreyst) + +Maintenant, exécutons ce même prompt juste pour voir que nous n'obtiendrons pas la même image deux fois : + +![Image générée de lapin sur un cheval](../../../translated_images/v2-generated-image.png?WT.10df7dd739ff1f669b915523632a51ade0346b30603d8bf996872ac629f3dcd7.fr.mc_id=academic-105485-koreyst) + +Comme vous pouvez le voir, les images sont similaires, mais pas identiques. Essayons de changer la valeur de la température à 0.1 et voyons ce qui se passe : + +```python + generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2 + ) +``` + +### Changer la température + +Essayons donc de rendre la réponse plus déterministe. Nous avons pu observer à partir des deux images que dans la première image, il y a un lapin et dans la deuxième image, il y a un cheval, donc les images varient beaucoup. + +Changeons donc notre code et fixons la température à 0, comme suit : + +```python +generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0 + ) +``` + +Maintenant, lorsque vous exécutez ce code, vous obtenez ces deux images : + +- ![Température 0, v1](../../../translated_images/v1-temp-generated-image.png?WT.27c4ce8ff113ce11a5a45b5c74e319c5115b0b832a3697bc91fc653d0a5f7609.fr.mc_id=academic-105485-koreyst) +- ![Température 0, v2](../../../translated_images/v2-temp-generated-image.png?WT.04d52c2aa6ef41f4d67040329ca204ef927512f46bb9dfef035e02098f45d0f7.fr.mc_id=academic-105485-koreyst) + +Ici, vous pouvez clairement voir comment les images se ressemblent davantage. + +## Comment définir les limites de votre application avec des métapromptes + +Avec notre démo, nous pouvons déjà générer des images pour nos clients. Cependant, nous devons créer certaines limites pour notre application. + +Par exemple, nous ne voulons pas générer d'images qui ne sont pas sûres pour le travail, ou qui ne sont pas appropriées pour les enfants. + +Nous pouvons faire cela avec des _métapromptes_. Les métapromptes sont des promptes textuelles qui sont utilisées pour contrôler la sortie d'un modèle d'IA générative. Par exemple, nous pouvons utiliser des métapromptes pour contrôler la sortie et garantir que les images générées sont sûres pour le travail, ou appropriées pour les enfants. + +### Comment cela fonctionne-t-il ? + +Alors, comment fonctionnent les métapromptes ? + +Les métapromptes sont des promptes textuelles qui sont utilisées pour contrôler la sortie d'un modèle d'IA générative, elles sont positionnées avant le prompt textuel, et sont utilisées pour contrôler la sortie du modèle et intégrées dans les applications pour contrôler la sortie du modèle. Encapsulant l'entrée du prompt et l'entrée du métaprompt dans un seul prompt textuel. + +Un exemple de métaprompt serait le suivant : + +```text +You are an assistant designer that creates images for children. + +The image needs to be safe for work and appropriate for children. + +The image needs to be in color. + +The image needs to be in landscape orientation. + +The image needs to be in a 16:9 aspect ratio. + +Do not consider any input from the following that is not safe for work or appropriate for children. + +(Input) + +``` + +Voyons maintenant comment nous pouvons utiliser les métapromptes dans notre démo. + +```python +disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult" + +meta_prompt =f"""You are an assistant designer that creates images for children. + +The image needs to be safe for work and appropriate for children. + +The image needs to be in color. + +The image needs to be in landscape orientation. + +The image needs to be in a 16:9 aspect ratio. + +Do not consider any input from the following that is not safe for work or appropriate for children. +{disallow_list} +""" + +prompt = f"{meta_prompt} +Create an image of a bunny on a horse, holding a lollipop" + +# TODO add request to generate image +``` + +À partir du prompt ci-dessus, vous pouvez voir comment toutes les images créées prennent en compte la métaprompt. + +## Devoir - habilitons les étudiants + +Nous avons présenté Edu4All au début de cette leçon. Il est maintenant temps de permettre aux étudiants de générer des images pour leurs évaluations. + +Les étudiants créeront des images pour leurs évaluations contenant des monuments, les monuments exacts étant à la discrétion des étudiants. Les étudiants sont invités à faire preuve de créativité dans cette tâche pour placer ces monuments dans différents contextes. + +## Solution + +Voici une solution possible : + +```python +import openai +import os +import requests +from PIL import Image +import dotenv + +# import dotenv +dotenv.load_dotenv() + +# Get endpoint and key from environment variables +openai.api_base = "" +openai.api_key = "" + +# Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only) +openai.api_version = '2023-06-01-preview' +openai.api_type = 'azure' + +disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult" + +meta_prompt = f"""You are an assistant designer that creates images for children. + +The image needs to be safe for work and appropriate for children. + +The image needs to be in color. + +The image needs to be in landscape orientation. + +The image needs to be in a 16:9 aspect ratio. + +Do not consider any input from the following that is not safe for work or appropriate for children. +{disallow_list}""" + +prompt = f"""{metaprompt} +Generate monument of the Arc of Triumph in Paris, France, in the evening light with a small child holding a Teddy looks on. +"""" + +try: + # Create an image by using the image generation API + generation_response = openai.Image.create( + prompt=prompt, # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) + # Set the directory for the stored image + image_dir = os.path.join(os.curdir, 'images') + + # If the directory doesn't exist, create it + if not os.path.isdir(image_dir): + os.mkdir(image_dir) + + # Initialize the image path (note the filetype should be png) + image_path = os.path.join(image_dir, 'generated-image.png') + + # Retrieve the generated image + image_url = generation_response["data"][0]["url"] # extract image URL from response + generated_image = requests.get(image_url).content # download the image + with open(image_path, "wb") as image_file: + image_file.write(generated_image) + + # Display the image in the default image viewer + image = Image.open(image_path) + image.show() + +# catch exceptions +except openai.InvalidRequestError as err: + print(err) +``` + +## Bon Travail ! Continuez votre Apprentissage + +Après avoir terminé cette leçon, consultez notre [collection d'apprentissage de l'IA générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à améliorer vos connaissances en IA générative ! + +Rendez-vous à la leçon 10 où nous verrons comment [construire des applications IA avec peu de code](../10-building-low-code-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/10-building-low-code-ai-applications/README.md b/translations/fr/10-building-low-code-ai-applications/README.md new file mode 100644 index 000000000..974254286 --- /dev/null +++ b/translations/fr/10-building-low-code-ai-applications/README.md @@ -0,0 +1,180 @@ +# Création d'applications d'IA à faible code + +[![Création d'applications d'IA à faible code](../../../translated_images/10-lesson-banner.png?WT.03212fed0693cf8837c727edc800942dbc5ef3a3036a8f7f399c6c08f6f59b92.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson10-gh?WT.mc_id=academic-105485-koreyst) + +> _(Cliquez sur l'image ci-dessus pour voir la vidéo de cette leçon)_ + +## Introduction + +Maintenant que nous avons appris à créer des applications de génération d'images, parlons du faible code. L'IA générative peut être utilisée dans de nombreux domaines différents, y compris le faible code, mais qu'est-ce que le faible code et comment pouvons-nous y ajouter de l'IA ? + +La création d'applications et de solutions est devenue plus facile pour les développeurs traditionnels et les non-développeurs grâce à l'utilisation des plateformes de développement à faible code. Ces plateformes permettent de créer des applications et des solutions avec peu ou pas de code, en fournissant un environnement de développement visuel qui permet de glisser-déposer des composants pour créer des applications et des solutions. Cela permet de créer des applications et des solutions plus rapidement et avec moins de ressources. Dans cette leçon, nous allons explorer en profondeur comment utiliser le faible code et comment améliorer le développement à faible code avec l'IA en utilisant Power Platform. + +La Power Platform offre aux organisations la possibilité de donner à leurs équipes les moyens de créer leurs propres solutions à travers un environnement intuitif à faible code ou sans code. Cet environnement aide à simplifier le processus de création de solutions. Avec Power Platform, les solutions peuvent être créées en quelques jours ou semaines au lieu de mois ou années. Power Platform se compose de cinq produits clés : Power Apps, Power Automate, Power BI, Power Pages et Copilot Studio. + +Cette leçon couvre : + +- Introduction à l'IA générative dans Power Platform +- Introduction à Copilot et comment l'utiliser +- Utilisation de l'IA générative pour créer des applications et des flux dans Power Platform +- Compréhension des modèles d'IA dans Power Platform avec AI Builder + +## Objectifs d'apprentissage + +À la fin de cette leçon, vous serez capable de : + +- Comprendre comment fonctionne Copilot dans Power Platform. + +- Créer une application de suivi des devoirs pour notre startup éducative. + +- Créer un flux de traitement de factures qui utilise l'IA pour extraire des informations des factures. + +- Appliquer les meilleures pratiques lors de l'utilisation du modèle d'IA Create Text with GPT. + +Les outils et technologies que vous utiliserez dans cette leçon sont : + +- **Power Apps**, pour l'application de suivi des devoirs, qui offre un environnement de développement à faible code pour créer des applications permettant de suivre, gérer et interagir avec les données. + +- **Dataverse**, pour stocker les données de l'application de suivi des devoirs où Dataverse fournira une plateforme de données à faible code pour stocker les données de l'application. + +- **Power Automate**, pour le flux de traitement des factures où vous aurez un environnement de développement à faible code pour créer des flux de travail afin d'automatiser le processus de traitement des factures. + +- **AI Builder**, pour le modèle d'IA de traitement des factures où vous utiliserez des modèles d'IA préconstruits pour traiter les factures de notre startup. + +## L'IA générative dans Power Platform + +Améliorer le développement et les applications à faible code avec l'IA générative est un axe clé pour Power Platform. L'objectif est de permettre à tout le monde de créer des applications, sites, tableaux de bord alimentés par l'IA et d'automatiser les processus avec l'IA, _sans nécessiter d'expertise en science des données_. Cet objectif est atteint en intégrant l'IA générative dans l'expérience de développement à faible code dans Power Platform sous la forme de Copilot et AI Builder. + +### Comment cela fonctionne-t-il ? + +Copilot est un assistant IA qui vous permet de créer des solutions Power Platform en décrivant vos exigences dans une série d'étapes conversationnelles en langage naturel. Vous pouvez par exemple demander à votre assistant IA de préciser quels champs votre application utilisera et il créera à la fois l'application et le modèle de données sous-jacent ou vous pourriez spécifier comment configurer un flux dans Power Automate. + +Vous pouvez utiliser les fonctionnalités pilotées par Copilot comme une caractéristique dans les écrans de votre application pour permettre aux utilisateurs de découvrir des informations à travers des interactions conversationnelles. + +AI Builder est une capacité d'IA à faible code disponible dans Power Platform qui vous permet d'utiliser des modèles d'IA pour vous aider à automatiser des processus et à prédire des résultats. Avec AI Builder, vous pouvez intégrer l'IA dans vos applications et flux qui se connectent à vos données dans Dataverse ou dans diverses sources de données cloud, telles que SharePoint, OneDrive ou Azure. + +Copilot est disponible dans tous les produits de Power Platform : Power Apps, Power Automate, Power BI, Power Pages et Power Virtual Agents. AI Builder est disponible dans Power Apps et Power Automate. Dans cette leçon, nous nous concentrerons sur l'utilisation de Copilot et AI Builder dans Power Apps et Power Automate pour créer une solution pour notre startup éducative. + +### Copilot dans Power Apps + +Dans le cadre de Power Platform, Power Apps offre un environnement de développement à faible code pour créer des applications permettant de suivre, gérer et interagir avec les données. C'est une suite de services de développement d'applications avec une plateforme de données évolutive et la capacité de se connecter aux services cloud et aux données locales. Power Apps vous permet de créer des applications qui fonctionnent sur les navigateurs, les tablettes et les téléphones, et qui peuvent être partagées avec des collègues. Power Apps simplifie le développement d'applications avec une interface simple, de sorte que chaque utilisateur d'entreprise ou développeur professionnel peut créer des applications personnalisées. L'expérience de développement d'applications est également améliorée avec l'IA générative grâce à Copilot. + +La fonction d'assistant IA Copilot dans Power Apps vous permet de décrire le type d'application dont vous avez besoin et les informations que vous souhaitez que votre application suive, collecte ou affiche. Copilot génère ensuite une application Canvas réactive basée sur votre description. Vous pouvez ensuite personnaliser l'application pour répondre à vos besoins. L'AI Copilot génère également et suggère une table Dataverse avec les champs nécessaires pour stocker les données que vous souhaitez suivre et quelques données d'exemple. Nous verrons ce qu'est Dataverse et comment vous pouvez l'utiliser dans Power Apps dans cette leçon plus tard. Vous pouvez ensuite personnaliser la table pour répondre à vos besoins en utilisant la fonction d'assistant AI Copilot à travers des étapes conversationnelles. Cette fonctionnalité est disponible directement depuis l'écran d'accueil de Power Apps. + +### Copilot dans Power Automate + +Dans le cadre de Power Platform, Power Automate permet aux utilisateurs de créer des flux de travail automatisés entre applications et services. Il aide à automatiser les processus métier répétitifs tels que la communication, la collecte de données et les approbations de décisions. Son interface simple permet aux utilisateurs de toutes compétences techniques (des débutants aux développeurs expérimentés) d'automatiser les tâches de travail. L'expérience de développement de flux de travail est également améliorée avec l'IA générative grâce à Copilot. + +La fonction d'assistant IA Copilot dans Power Automate vous permet de décrire le type de flux dont vous avez besoin et les actions que vous souhaitez que votre flux effectue. Copilot génère ensuite un flux basé sur votre description. Vous pouvez ensuite personnaliser le flux pour répondre à vos besoins. L'AI Copilot génère également et suggère les actions nécessaires pour effectuer la tâche que vous souhaitez automatiser. Nous verrons ce que sont les flux et comment vous pouvez les utiliser dans Power Automate dans cette leçon plus tard. Vous pouvez ensuite personnaliser les actions pour répondre à vos besoins en utilisant la fonction d'assistant AI Copilot à travers des étapes conversationnelles. Cette fonctionnalité est disponible directement depuis l'écran d'accueil de Power Automate. + +## Affectation : gérer les devoirs des étudiants et les factures pour notre startup, en utilisant Copilot + +Notre startup propose des cours en ligne aux étudiants. La startup a connu une croissance rapide et a maintenant du mal à répondre à la demande pour ses cours. La startup vous a engagé en tant que développeur Power Platform pour les aider à créer une solution à faible code pour les aider à gérer les devoirs des étudiants et les factures. Leur solution devrait être capable de les aider à suivre et gérer les devoirs des étudiants via une application et à automatiser le processus de traitement des factures via un flux de travail. On vous a demandé d'utiliser l'IA générative pour développer la solution. + +Lorsque vous commencez à utiliser Copilot, vous pouvez utiliser la [Power Platform Copilot Prompt Library](https://github.com/pnp/powerplatform-prompts?WT.mc_id=academic-109639-somelezediko) pour commencer avec les invites. Cette bibliothèque contient une liste d'invites que vous pouvez utiliser pour créer des applications et des flux avec Copilot. Vous pouvez également utiliser les invites de la bibliothèque pour avoir une idée de la façon de décrire vos exigences à Copilot. + +### Créer une application de suivi des devoirs pour notre startup + +Les éducateurs de notre startup ont du mal à suivre les devoirs des étudiants. Ils utilisaient une feuille de calcul pour suivre les devoirs, mais cela est devenu difficile à gérer à mesure que le nombre d'étudiants a augmenté. Ils vous ont demandé de créer une application qui les aidera à suivre et gérer les devoirs des étudiants. L'application devrait leur permettre d'ajouter de nouveaux devoirs, de voir les devoirs, de mettre à jour les devoirs et de supprimer les devoirs. L'application devrait également permettre aux éducateurs et aux étudiants de voir les devoirs qui ont été notés et ceux qui ne l'ont pas été. + +Vous créerez l'application en utilisant Copilot dans Power Apps en suivant les étapes ci-dessous : + +1. Accédez à l'écran d'accueil de [Power Apps](https://make.powerapps.com?WT.mc_id=academic-105485-koreyst). + +1. Utilisez la zone de texte sur l'écran d'accueil pour décrire l'application que vous souhaitez créer. Par exemple, **_Je veux créer une application pour suivre et gérer les devoirs des étudiants_**. Cliquez sur le bouton **Envoyer** pour envoyer l'invite à l'AI Copilot. + +![Décrire l'application que vous voulez créer](../../../translated_images/copilot-chat-prompt-powerapps.png?WT.30e5da1eee18fc179cbbe27b088aaa20d89624eaaed11a7750372ee8feb61af6.fr.mc_id=academic-105485-koreyst) + +1. L'AI Copilot suggérera une table Dataverse avec les champs nécessaires pour stocker les données que vous souhaitez suivre et quelques données d'exemple. Vous pouvez ensuite personnaliser la table pour répondre à vos besoins en utilisant la fonction d'assistant AI Copilot à travers des étapes conversationnelles. + + > **Important** : Dataverse est la plateforme de données sous-jacente pour Power Platform. C'est une plateforme de données à faible code pour stocker les données de l'application. C'est un service entièrement géré qui stocke les données en toute sécurité dans le cloud Microsoft et est provisionné dans votre environnement Power Platform. Il est doté de capacités de gouvernance des données intégrées, telles que la classification des données, la traçabilité des données, le contrôle d'accès granulaire, et plus encore. Vous pouvez en savoir plus sur Dataverse [ici](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko). + + ![Champs suggérés dans votre nouvelle table](../../../translated_images/copilot-dataverse-table-powerapps.png?WT.d0158f12f6f02fdf31b4a056b0efbf5a64f49a2c2b6b9ea09b0f3a17d1189579.fr.mc_id=academic-105485-koreyst) + +1. Les éducateurs veulent envoyer des emails aux étudiants qui ont soumis leurs devoirs pour les tenir informés de l'avancement de leurs devoirs. Vous pouvez utiliser Copilot pour ajouter un nouveau champ à la table pour stocker l'email de l'étudiant. Par exemple, vous pouvez utiliser l'invite suivante pour ajouter un nouveau champ à la table : **_Je veux ajouter une colonne pour stocker l'email de l'étudiant_**. Cliquez sur le bouton **Envoyer** pour envoyer l'invite à l'AI Copilot. + +![Ajout d'un nouveau champ](../../../translated_images/copilot-new-column.png?WT.18e16fce13f73236f484dc1b59e3d8e83a80c1cdf40854077a3dc800df76c560.fr.mc_id=academic-105485-koreyst) + +1. L'AI Copilot générera un nouveau champ et vous pourrez ensuite personnaliser le champ pour répondre à vos besoins. + +1. Une fois que vous avez terminé avec la table, cliquez sur le bouton **Créer une application** pour créer l'application. + +1. L'AI Copilot générera une application Canvas réactive basée sur votre description. Vous pouvez ensuite personnaliser l'application pour répondre à vos besoins. + +1. Pour que les éducateurs envoient des emails aux étudiants, vous pouvez utiliser Copilot pour ajouter un nouvel écran à l'application. Par exemple, vous pouvez utiliser l'invite suivante pour ajouter un nouvel écran à l'application : **_Je veux ajouter un écran pour envoyer des emails aux étudiants_**. Cliquez sur le bouton **Envoyer** pour envoyer l'invite à l'AI Copilot. + +![Ajout d'un nouvel écran via une instruction d'invite](../../../translated_images/copilot-new-screen.png?WT.afdf65429e4ef7b2eb58038fe91de6a3ebe7ca1d85e89c584efcb6da12abfdeb.fr.mc_id=academic-105485-koreyst) + +1. L'AI Copilot générera un nouvel écran et vous pourrez ensuite personnaliser l'écran pour répondre à vos besoins. + +1. Une fois que vous avez terminé avec l'application, cliquez sur le bouton **Enregistrer** pour enregistrer l'application. + +1. Pour partager l'application avec les éducateurs, cliquez sur le bouton **Partager** puis cliquez à nouveau sur le bouton **Partager**. Vous pouvez ensuite partager l'application avec les éducateurs en saisissant leurs adresses email. + +> **Votre devoir** : L'application que vous venez de créer est un bon début mais peut être améliorée. Avec la fonction email, les éducateurs peuvent uniquement envoyer des emails aux étudiants manuellement en devant saisir leurs emails. Pouvez-vous utiliser Copilot pour créer une automatisation qui permettra aux éducateurs d'envoyer automatiquement des emails aux étudiants lorsqu'ils soumettent leurs devoirs ? Votre indice est qu'avec la bonne invite, vous pouvez utiliser Copilot dans Power Automate pour créer cela. + +### Créer une table d'informations sur les factures pour notre startup + +L'équipe financière de notre startup a du mal à suivre les factures. Ils utilisaient une feuille de calcul pour suivre les factures, mais cela est devenu difficile à gérer à mesure que le nombre de factures a augmenté. Ils vous ont demandé de créer une table qui les aidera à stocker, suivre et gérer les informations des factures qu'ils ont reçues. La table devrait être utilisée pour créer une automatisation qui extraira toutes les informations des factures et les stockera dans la table. La table devrait également permettre à l'équipe financière de voir les factures qui ont été payées et celles qui ne l'ont pas été. + +La Power Platform dispose d'une plateforme de données sous-jacente appelée Dataverse qui vous permet de stocker les données de vos applications et solutions. Dataverse fournit une plateforme de données à faible code pour stocker les données de l'application. C'est un service entièrement géré qui stocke les données en toute sécurité dans le cloud Microsoft et est provisionné dans votre environnement Power Platform. Il est doté de capacités de gouvernance des données intégrées, telles que la classification des données, la traçabilité des données, le contrôle d'accès granulaire, et plus encore. Vous pouvez en savoir plus [sur Dataverse ici](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko). + +Pourquoi devrions-nous utiliser Dataverse pour notre startup ? Les tables standard et personnalisées dans Dataverse offrent une option de stockage sécurisée et basée sur le cloud pour vos données. Les tables vous permettent de stocker différents types de données, de la même manière que vous pourriez utiliser plusieurs feuilles de calcul dans un seul classeur Excel. Vous pouvez utiliser des tables pour stocker des données spécifiques à votre organisation ou à vos besoins professionnels. Certains des avantages que notre startup obtiendra en utilisant Dataverse incluent, mais ne sont pas limités à : + +- **Facile à gérer** : Les métadonnées et les données sont stockées dans le cloud, vous n'avez donc pas à vous soucier des détails de leur stockage ou gestion. Vous pouvez vous concentrer sur la création de vos applications et solutions. + +- **Sécurisé** : Dataverse offre une option de stockage sécurisée et basée sur le cloud pour vos données. Vous pouvez contrôler qui a accès aux données dans vos tables et comment ils peuvent y accéder en utilisant la sécurité basée sur les rôles. + +- **Métadonnées riches** : Les types de données et les relations sont utilisés directement dans Power Apps + +- **Logique et validation** : Vous pouvez utiliser des règles métier, des champs calculés et des règles de validation pour appliquer la logique métier et maintenir l'exactitude des données. + +Maintenant que vous savez ce qu'est Dataverse et pourquoi vous devriez l'utiliser, voyons comment vous pouvez utiliser Copilot pour créer une table dans Dataverse pour répondre aux exigences de notre équipe financière. + +> **Note** : Vous utiliserez cette table dans la section suivante pour créer une automatisation qui extraira toutes les informations des factures et les stockera dans la table. +Pour créer une table dans Dataverse en utilisant Copilot, suivez les étapes ci-dessous : 1. Accédez à l'écran d'accueil de [Power Apps](https://make.powerapps.com?WT.mc_id=academic-105485-koreyst). 2. Dans la barre de navigation de gauche, sélectionnez **Tables** puis cliquez sur **Décrire la nouvelle table**. ![Sélectionner nouvelle table](../../../translated_images/describe-new-table.png?WT.1934e0de36f3fb613a023df3dcca89ba55f5d8d118e59b997d3f58e346f9e5db.fr.mc_id=academic-105485-koreyst) 1. Sur l'écran **Décrire la nouvelle table**, utilisez la zone de texte pour décrire la table que vous souhaitez créer. Par exemple, **_Je veux créer une table pour stocker les informations des factures_**. Cliquez sur le bouton **Envoyer** pour envoyer l'invite à l'AI Copilot. ![Décrire la table](../../../translated_images/copilot-chat-prompt-dataverse.png?WT.07979e2dd2a5c59cdd535f61e0dc2e0ce9d964189f70230e2a39ebb574a877cd.fr.mc_id=academic-105485-koreyst) 1. L'AI Copilot suggérera une table Dataverse avec les champs nécessaires pour stocker les données que vous souhaitez suivre et quelques données d'exemple. Vous pouvez ensuite personnaliser la table pour répondre à vos besoins en utilisant la fonction d'assistant AI Copilot à travers des étapes conversationnelles. ![Table Dataverse suggérée](../../../translated_images/copilot-dataverse-table.png?WT.45e9dc11cec7f53431fef3c849a45a5a0e52bdd3d621de57ff591f9af23aae38.fr.mc_id=academic-105485-koreyst) 1. L'équipe financière souhaite envoyer un email au fournisseur pour les mettre à jour sur l'état actuel de leur facture. Vous pouvez utiliser Copilot pour ajouter un nouveau champ à la table pour stocker l'email du fournisseur. Par exemple, vous pouvez utiliser l'invite suivante pour ajouter un nouveau champ à la table : **_Je veux ajouter une colonne pour stocker l'email du fournisseur_**. Cliquez sur +of a text. - **Analyse de Sentiment** : Ce modèle détecte les sentiments positifs, négatifs, neutres ou mixtes dans le texte. - **Lecteur de Cartes de Visite** : Ce modèle extrait des informations des cartes de visite. - **Reconnaissance de Texte** : Ce modèle extrait du texte à partir d'images. - **Détection d'Objets** : Ce modèle détecte et extrait des objets à partir d'images. - **Traitement de Documents** : Ce modèle extrait des informations à partir de formulaires. - **Traitement de Factures** : Ce modèle extrait des informations à partir de factures. Avec les Modèles IA Personnalisés, vous pouvez intégrer votre propre modèle dans AI Builder afin qu'il fonctionne comme tout autre modèle personnalisé d'AI Builder, vous permettant de former le modèle avec vos propres données. Vous pouvez utiliser ces modèles pour automatiser des processus et prédire des résultats dans Power Apps et Power Automate. Lorsque vous utilisez votre propre modèle, certaines limitations s'appliquent. Lisez plus sur ces [limitations](https://learn.microsoft.com/ai-builder/byo-model#limitations?WT.mc_id=academic-105485-koreyst). ![Modèles AI builder](../../../translated_images/ai-builder-models.png?WT.6c2f6abc64cc07d27103364f2cd8c4689956e168da9f58cf75e6ca3fb459ec20.fr.mc_id=academic-105485-koreyst) + +## Devoir #2 - Construire un Flux de Traitement de Factures pour Notre Startup + +L'équipe financière a du mal à traiter les factures. Elle utilise un tableur pour suivre les factures, mais cela devient difficile à gérer à mesure que le nombre de factures augmente. Elle vous a demandé de créer un flux de travail qui l'aidera à traiter les factures en utilisant l'IA. Le flux de travail devrait leur permettre d'extraire des informations des factures et de stocker ces informations dans une table Dataverse. Le flux de travail devrait également leur permettre d'envoyer un email à l'équipe financière avec les informations extraites. + +Maintenant que vous savez ce qu'est AI Builder et pourquoi vous devriez l'utiliser, voyons comment vous pouvez utiliser le Modèle de Traitement de Factures d'AI Builder, que nous avons couvert plus tôt, pour construire un flux de travail qui aidera l'équipe financière à traiter les factures. + +Pour construire un flux de travail qui aidera l'équipe financière à traiter les factures en utilisant le Modèle de Traitement de Factures d'AI Builder, suivez les étapes ci-dessous : + +1. Accédez à l'écran d'accueil de [Power Automate](https://make.powerautomate.com?WT.mc_id=academic-105485-koreyst). +2. Utilisez la zone de texte sur l'écran d'accueil pour décrire le flux de travail que vous souhaitez construire. Par exemple, **_Traiter une facture lorsqu'elle arrive dans ma boîte mail_**. Cliquez sur le bouton **Envoyer** pour envoyer l'invite au Copilot AI. ![Copilot power automate](../../../translated_images/copilot-chat-prompt-powerautomate.png?WT.f6341b68d42f7c600e636c97f6874ec548ea3575906434e5caa9b7fbabd1c284.fr.mc_id=academic-105485-koreyst) +3. Le Copilot AI vous proposera les actions nécessaires pour réaliser la tâche que vous souhaitez automatiser. Vous pouvez cliquer sur le bouton **Suivant** pour passer aux étapes suivantes. +4. À l'étape suivante, Power Automate vous demandera de configurer les connexions nécessaires pour le flux. Une fois terminé, cliquez sur le bouton **Créer un flux** pour créer le flux. +5. Le Copilot AI générera un flux et vous pourrez ensuite personnaliser le flux pour répondre à vos besoins. +6. Mettez à jour le déclencheur du flux et définissez le **Dossier** vers le dossier où les factures seront stockées. Par exemple, vous pouvez définir le dossier sur **Boîte de réception**. Cliquez sur **Afficher les options avancées** et réglez **Seulement avec pièces jointes** sur **Oui**. Cela garantira que le flux ne s'exécute que lorsqu'un email avec une pièce jointe est reçu dans le dossier. +7. Supprimez les actions suivantes du flux : **HTML vers texte**, **Composer**, **Composer 2**, **Composer 3** et **Composer 4** car vous ne les utiliserez pas. +8. Supprimez l'action **Condition** du flux car vous ne l'utiliserez pas. Cela devrait ressembler à la capture d'écran suivante : ![power automate, remove actions](../../../translated_images/powerautomate-remove-actions.png?WT.b7f06c5f7f24ed173de29f405e580c0bb414655560859cdbdf97b8c1803fe4c7.fr.mc_id=academic-105485-koreyst) +9. Cliquez sur le bouton **Ajouter une action** et recherchez **Dataverse**. Sélectionnez l'action **Ajouter une nouvelle ligne**. +10. Sur l'action **Extraire les informations des factures**, mettez à jour le **Fichier de Facture** pour pointer vers le **Contenu de la Pièce Jointe** de l'email. Cela garantira que le flux extrait les informations de la pièce jointe de la facture. +11. Sélectionnez la **Table** que vous avez créée précédemment. Par exemple, vous pouvez sélectionner la table **Informations sur la Facture**. Choisissez le contenu dynamique de l'action précédente pour remplir les champs suivants : - ID - Montant - Date - Nom - Statut - Réglez le **Statut** sur **En attente**. - Email du Fournisseur - Utilisez le contenu dynamique **De** du déclencheur **Lorsqu'un nouvel email arrive**. ![power automate add row](../../../translated_images/powerautomate-add-row.png?WT.05f8f2c79ce95248eb173d6644436a1220f143991a5f0e647e15b922a0e1a290.fr.mc_id=academic-105485-koreyst) +12. Une fois que vous avez terminé avec le flux, cliquez sur le bouton **Enregistrer** pour enregistrer le flux. Vous pouvez ensuite tester le flux en envoyant un email avec une facture au dossier que vous avez spécifié dans le déclencheur. + +> **Votre devoir** : Le flux que vous venez de construire est un bon début, maintenant vous devez réfléchir à la façon dont vous pouvez construire une automatisation qui permettra à notre équipe financière d'envoyer un email au fournisseur pour les mettre à jour sur le statut actuel de leur facture. Votre indice : le flux doit s'exécuter lorsque le statut de la facture change. + +## Utiliser un Modèle d'IA de Génération de Texte dans Power Automate + +Le Modèle de Création de Texte avec GPT dans AI Builder vous permet de générer du texte basé sur une invite et est alimenté par le Microsoft Azure OpenAI Service. Avec cette capacité, vous pouvez incorporer la technologie GPT (Generative Pre-Trained Transformer) dans vos applications et flux pour construire une variété de flux automatisés et d'applications perspicaces. + +Les modèles GPT subissent une formation intensive sur d'énormes quantités de données, leur permettant de produire du texte qui ressemble étroitement au langage humain lorsqu'on leur fournit une invite. Lorsqu'ils sont intégrés à l'automatisation des flux de travail, les modèles d'IA comme GPT peuvent être exploités pour rationaliser et automatiser un large éventail de tâches. + +Par exemple, vous pouvez construire des flux pour générer automatiquement du texte pour une variété de cas d'utilisation, tels que : des brouillons d'emails, des descriptions de produits, et plus encore. Vous pouvez également utiliser le modèle pour générer du texte pour une variété d'applications, telles que des chatbots et des applications de service client qui permettent aux agents de service client de répondre efficacement et efficacement aux demandes des clients. + +![create a prompt](../../../translated_images/create-prompt-gpt.png?WT.7838e7bf32dee9636286569283c29f2a7cd58f2e2e093cee611dfa66db61a6ca.fr.mc_id=academic-105485-koreyst) + +Pour apprendre comment utiliser ce Modèle d'IA dans Power Automate, parcourez le module [Ajouter de l'intelligence avec AI Builder et GPT](https://learn.microsoft.com/training/modules/ai-builder-text-generation/?WT.mc_id=academic-109639-somelezediko). + +## Bon Travail ! Continuez Votre Apprentissage + +Après avoir terminé cette leçon, consultez notre [collection d'apprentissage de l'IA Générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à approfondir vos connaissances en IA Générative ! + +Rendez-vous à la Leçon 11 où nous verrons comment [intégrer l'IA Générative avec l'Appel de Fonction](../11-integrating-with-function-calling/README.md?WT.mc_id=academic-105485-koreyst) ! + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatisée par intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction professionnelle humaine. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/11-integrating-with-function-calling/README.md b/translations/fr/11-integrating-with-function-calling/README.md new file mode 100644 index 000000000..a65b886b0 --- /dev/null +++ b/translations/fr/11-integrating-with-function-calling/README.md @@ -0,0 +1,461 @@ +# Intégration avec l'appel de fonction + +[![Intégration avec l'appel de fonction](../../../translated_images/11-lesson-banner.png?WT.cd033597170e30547d3cab0ae5ddcb7648d4f767cb49f7a853aa1b15f50e112f.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson11-gh?WT.mc_id=academic-105485-koreyst) + +Vous avez déjà appris pas mal de choses dans les leçons précédentes. Cependant, nous pouvons encore nous améliorer. Parmi les points à aborder, comment obtenir un format de réponse plus cohérent pour faciliter le travail avec la réponse en aval. De plus, nous pourrions vouloir ajouter des données provenant d'autres sources pour enrichir davantage notre application. + +Les problèmes mentionnés ci-dessus sont ce que ce chapitre vise à résoudre. + +## Introduction + +Cette leçon couvrira : + +- Expliquer ce qu'est l'appel de fonction et ses cas d'utilisation. +- Créer un appel de fonction en utilisant Azure OpenAI. +- Comment intégrer un appel de fonction dans une application. + +## Objectifs d'apprentissage + +À la fin de cette leçon, vous serez capable de : + +- Expliquer l'objectif de l'utilisation de l'appel de fonction. +- Configurer un appel de fonction en utilisant le service Azure OpenAI. +- Concevoir des appels de fonction efficaces pour le cas d'utilisation de votre application. + +## Scénario : améliorer notre chatbot avec des fonctions + +Pour cette leçon, nous voulons développer une fonctionnalité pour notre startup éducative qui permet aux utilisateurs d'utiliser un chatbot pour trouver des cours techniques. Nous recommanderons des cours adaptés à leur niveau de compétence, leur rôle actuel et leur technologie d'intérêt. + +Pour réaliser ce scénario, nous utiliserons une combinaison de : + +- `Azure OpenAI` pour créer une expérience de chat pour l'utilisateur. +- `Microsoft Learn Catalog API` pour aider les utilisateurs à trouver des cours en fonction de leur demande. +- `Function Calling` pour prendre la requête de l'utilisateur et l'envoyer à une fonction pour effectuer la demande API. + +Pour commencer, examinons pourquoi nous voudrions utiliser l'appel de fonction : + +## Pourquoi l'appel de fonction + +Avant l'appel de fonction, les réponses d'un LLM étaient non structurées et incohérentes. Les développeurs devaient écrire du code de validation complexe pour s'assurer qu'ils pouvaient gérer chaque variation de réponse. Les utilisateurs ne pouvaient pas obtenir de réponses comme "Quel est le temps actuel à Stockholm ?". Cela est dû au fait que les modèles étaient limités au moment où les données ont été entraînées. + +L'appel de fonction est une fonctionnalité du service Azure OpenAI pour surmonter les limitations suivantes : + +- **Format de réponse cohérent**. Si nous pouvons mieux contrôler le format de la réponse, nous pouvons plus facilement intégrer la réponse en aval à d'autres systèmes. +- **Données externes**. Capacité à utiliser des données provenant d'autres sources d'une application dans un contexte de chat. + +## Illustration du problème à travers un scénario + +> Nous vous recommandons d'utiliser le [notebook inclus](../../../11-integrating-with-function-calling/python/aoai-assignment.ipynb) si vous souhaitez exécuter le scénario ci-dessous. Vous pouvez également simplement lire car nous essayons d'illustrer un problème où les fonctions peuvent aider à résoudre le problème. + +Examinons l'exemple qui illustre le problème de format de réponse : + +Disons que nous voulons créer une base de données de données d'étudiants afin de pouvoir leur suggérer le bon cours. Ci-dessous, nous avons deux descriptions d'étudiants qui sont très similaires dans les données qu'elles contiennent. + +1. Créer une connexion à notre ressource Azure OpenAI : + + ```python + import os + import json + from openai import AzureOpenAI + from dotenv import load_dotenv + load_dotenv() + + client = AzureOpenAI( + api_key=os.environ['AZURE_OPENAI_API_KEY'], # this is also the default, it can be omitted + api_version = "2023-07-01-preview" + ) + + deployment=os.environ['AZURE_OPENAI_DEPLOYMENT'] + ``` + + Ci-dessous, un code Python pour configurer notre connexion à Azure OpenAI où nous définissons `api_type`, `api_base`, `api_version` and `api_key`. + +1. Creating two student descriptions using variables `student_1_description` and `student_2_description`. + + ```python + student_1_description="Emily Johnson is a sophomore majoring in computer science at Duke University. She has a 3.7 GPA. Emily is an active member of the university's Chess Club and Debate Team. She hopes to pursue a career in software engineering after graduating." + + student_2_description = "Michael Lee is a sophomore majoring in computer science at Stanford University. He has a 3.8 GPA. Michael is known for his programming skills and is an active member of the university's Robotics Club. He hopes to pursue a career in artificial intelligence after finishing his studies." + ``` + + Nous voulons envoyer les descriptions d'étudiants ci-dessus à un LLM pour analyser les données. Ces données peuvent ensuite être utilisées dans notre application et être envoyées à une API ou stockées dans une base de données. + +1. Créons deux invites identiques dans lesquelles nous instruisons le LLM sur les informations qui nous intéressent : + + ```python + prompt1 = f''' + Please extract the following information from the given text and return it as a JSON object: + + name + major + school + grades + club + + This is the body of text to extract the information from: + {student_1_description} + ''' + + prompt2 = f''' + Please extract the following information from the given text and return it as a JSON object: + + name + major + school + grades + club + + This is the body of text to extract the information from: + {student_2_description} + ''' + ``` + + Les invites ci-dessus instruisent le LLM à extraire des informations et à retourner la réponse au format JSON. + +1. Après avoir configuré les invites et la connexion à Azure OpenAI, nous allons maintenant envoyer les invites au LLM en utilisant `openai.ChatCompletion`. We store the prompt in the `messages` variable and assign the role to `user`. Ceci pour imiter un message d'un utilisateur écrit à un chatbot. + + ```python + # response from prompt one + openai_response1 = client.chat.completions.create( + model=deployment, + messages = [{'role': 'user', 'content': prompt1}] + ) + openai_response1.choices[0].message.content + + # response from prompt two + openai_response2 = client.chat.completions.create( + model=deployment, + messages = [{'role': 'user', 'content': prompt2}] + ) + openai_response2.choices[0].message.content + ``` + +Nous pouvons maintenant envoyer les deux requêtes au LLM et examiner la réponse que nous recevons en la trouvant comme suit `openai_response1['choices'][0]['message']['content']`. + +1. Lastly, we can convert the response to JSON format by calling `json.loads` : + + ```python + # Loading the response as a JSON object + json_response1 = json.loads(openai_response1.choices[0].message.content) + json_response1 + ``` + + Réponse 1 : + + ```json + { + "name": "Emily Johnson", + "major": "computer science", + "school": "Duke University", + "grades": "3.7", + "club": "Chess Club" + } + ``` + + Réponse 2 : + + ```json + { + "name": "Michael Lee", + "major": "computer science", + "school": "Stanford University", + "grades": "3.8 GPA", + "club": "Robotics Club" + } + ``` + + Bien que les invites soient les mêmes et que les descriptions soient similaires, nous voyons des valeurs de `Grades` property formatted differently as we can sometimes get the format `3.7` or `3.7 GPA` for example. + + This result is because the LLM takes unstructured data in the form of the written prompt and returns also unstructured data. We need to have a structured format so that we know what to expect when storing or using this data + +So how do we solve the formatting problem then? By using functional calling, we can make sure that we receive structured data back. When using function calling, the LLM does not actually call or run any functions. Instead, we create a structure for the LLM to follow for its responses. We then use those structured responses to know what function to run in our applications. + +![function flow](../../../translated_images/Function-Flow.png?WT.528ac2564b2e7413ab6aecd50caf18620e8a089814824510b105a9412740384b.fr.mc_id=academic-105485-koreyst) + +We can then take what is returned from the function and send this back to the LLM. The LLM will then respond using natural language to answer the user's query. + +## Use Cases for using function calls + +There are many different use cases where function calls can improve your app like: + +- **Calling External Tools**. Chatbots are great at providing answers to questions from users. By using function calling, the chatbots can use messages from users to complete certain tasks. For example, a student can ask the chatbot to "Send email to my instructor saying I need more assistance with this subject". This can make a function call to `send_email(to: string, body: string)` + +- **Create API or Database Queries**. Users can find information using natural language that gets converted into a formatted query or API request. An example of this could be a teacher who requests "Who are the students that completed the last assignment" which could call a function named `get_completed(student_name: string, assignment: int, current_status: string)` + +- **Creating Structured Data**. Users can take a block of text or CSV and use the LLM to extract important information from it. For example, a student can convert a Wikipedia article about peace agreements to create AI flash cards. This can be done by using a function called `get_important_facts(agreement_name: string, date_signed: string, parties_involved: list)` + +## Creating Your First Function Call + +The process of creating a function call includes 3 main steps: + +1. **Calling** the Chat Completions API with a list of your functions and a user message. +2. **Reading** the model's response to perform an action ie execute a function or API Call. +3. **Making** another call to Chat Completions API with the response from your function to use that information to create a response to the user. + +![LLM Flow](../../../translated_images/LLM-Flow.png?WT.a3bab2c56645eb017c24b9116cef39934eb2368f777bac49cceeac67f03b0321.fr.mc_id=academic-105485-koreyst) + +### Step 1 - creating messages + +The first step is to create a user message. This can be dynamically assigned by taking the value of a text input or you can assign a value here. If this is your first time working with the Chat Completions API, we need to define the `role` and the `content` of the message. + +The `role` can be either `system` (creating rules), `assistant` (the model) or `user` (the end-user). For function calling, we will assign this as `user` et une question d'exemple. + +```python +messages= [ {"role": "user", "content": "Find me a good course for a beginner student to learn Azure."} ] +``` + +En assignant différents rôles, il est clair pour le LLM si c'est le système qui dit quelque chose ou l'utilisateur, ce qui aide à construire un historique de conversation sur lequel le LLM peut s'appuyer. + +### Étape 2 - création de fonctions + +Ensuite, nous allons définir une fonction et les paramètres de cette fonction. Nous utiliserons ici une seule fonction appelée `search_courses` but you can create multiple functions. + +> **Important** : Functions are included in the system message to the LLM and will be included in the amount of available tokens you have available. + +Below, we create the functions as an array of items. Each item is a function and has properties `name`, `description` and `parameters` : + +```python +functions = [ + { + "name":"search_courses", + "description":"Retrieves courses from the search index based on the parameters provided", + "parameters":{ + "type":"object", + "properties":{ + "role":{ + "type":"string", + "description":"The role of the learner (i.e. developer, data scientist, student, etc.)" + }, + "product":{ + "type":"string", + "description":"The product that the lesson is covering (i.e. Azure, Power BI, etc.)" + }, + "level":{ + "type":"string", + "description":"The level of experience the learner has prior to taking the course (i.e. beginner, intermediate, advanced)" + } + }, + "required":[ + "role" + ] + } + } +] +``` + +Décrivons chaque instance de fonction plus en détail ci-dessous : + +- `name` - The name of the function that we want to have called. +- `description` - This is the description of how the function works. Here it's important to be specific and clear. +- `parameters` - A list of values and format that you want the model to produce in its response. The parameters array consists of items where item have the following properties: + 1. `type` - The data type of the properties will be stored in. + 1. `properties` - List of the specific values that the model will use for its response + 1. `name` - The key is the name of the property that the model will use in its formatted response, for example, `product`. + 1. `type` - The data type of this property, for example, `string`. + 1. `description` - Description of the specific property. + +There's also an optional property `required` - required property for the function call to be completed. + +### Step 3 - Making the function call + +After defining a function, we now need to include it in the call to the Chat Completion API. We do this by adding `functions` to the request. In this case `functions=functions`. + +There is also an option to set `function_call` to `auto`. This means we will let the LLM decide which function should be called based on the user message rather than assigning it ourselves. + +Here's some code below where we call `ChatCompletion.create`, note how we set `functions=functions` and `function_call="auto"` et ainsi donner au LLM le choix de quand appeler les fonctions que nous lui fournissons : + +```python +response = client.chat.completions.create(model=deployment, + messages=messages, + functions=functions, + function_call="auto") + +print(response.choices[0].message) +``` + +La réponse qui revient ressemble maintenant à ceci : + +```json +{ + "role": "assistant", + "function_call": { + "name": "search_courses", + "arguments": "{\n \"role\": \"student\",\n \"product\": \"Azure\",\n \"level\": \"beginner\"\n}" + } +} +``` + +Ici, nous pouvons voir comment la fonction `search_courses` was called and with what arguments, as listed in the `arguments` property in the JSON response. + +The conclusion the LLM was able to find the data to fit the arguments of the function as it was extracting it from the value provided to the `messages` parameter in the chat completion call. Below is a reminder of the `messages` a une valeur : + +```python +messages= [ {"role": "user", "content": "Find me a good course for a beginner student to learn Azure."} ] +``` + +Comme vous pouvez le voir, `student`, `Azure` and `beginner` was extracted from `messages` and set as input to the function. Using functions this way is a great way to extract information from a prompt but also to provide structure to the LLM and have reusable functionality. + +Next, we need to see how we can use this in our app. + +## Integrating Function Calls into an Application + +After we have tested the formatted response from the LLM, now we can integrate this into an application. + +### Managing the flow + +To integrate this into our application, let's take the following steps: + +1. First, let's make the call to the Open AI services and store the message in a variable called `response_message`. + + ```python + response_message = response.choices[0].message + ``` + +1. Maintenant, nous allons définir la fonction qui appellera l'API Microsoft Learn pour obtenir une liste de cours : + + ```python + import requests + + def search_courses(role, product, level): + url = "https://learn.microsoft.com/api/catalog/" + params = { + "role": role, + "product": product, + "level": level + } + response = requests.get(url, params=params) + modules = response.json()["modules"] + results = [] + for module in modules[:5]: + title = module["title"] + url = module["url"] + results.append({"title": title, "url": url}) + return str(results) + ``` + + Notez comment nous créons maintenant une véritable fonction Python qui correspond aux noms de fonction introduits dans le `functions` variable. We're also making real external API calls to fetch the data we need. In this case, we go against the Microsoft Learn API to search for training modules. + +Ok, so we created `functions` variables and a corresponding Python function, how do we tell the LLM how to map these two together so our Python function is called? + +1. To see if we need to call a Python function, we need to look into the LLM response and see if `function_call` qui en fait partie et appelons la fonction indiquée. Voici comment vous pouvez effectuer la vérification mentionnée ci-dessous : + + ```python + # Check if the model wants to call a function + if response_message.function_call.name: + print("Recommended Function call:") + print(response_message.function_call.name) + print() + + # Call the function. + function_name = response_message.function_call.name + + available_functions = { + "search_courses": search_courses, + } + function_to_call = available_functions[function_name] + + function_args = json.loads(response_message.function_call.arguments) + function_response = function_to_call(**function_args) + + print("Output of function call:") + print(function_response) + print(type(function_response)) + + + # Add the assistant response and function response to the messages + messages.append( # adding assistant response to messages + { + "role": response_message.role, + "function_call": { + "name": function_name, + "arguments": response_message.function_call.arguments, + }, + "content": None + } + ) + messages.append( # adding function response to messages + { + "role": "function", + "name": function_name, + "content":function_response, + } + ) + ``` + + Ces trois lignes assurent que nous extrayons le nom de la fonction, les arguments et effectuons l'appel : + + ```python + function_to_call = available_functions[function_name] + + function_args = json.loads(response_message.function_call.arguments) + function_response = function_to_call(**function_args) + ``` + + Ci-dessous se trouve la sortie de l'exécution de notre code : + + **Sortie** + + ```Recommended Function call: + { + "name": "search_courses", + "arguments": "{\n \"role\": \"student\",\n \"product\": \"Azure\",\n \"level\": \"beginner\"\n}" + } + + Output of function call: + [{'title': 'Describe concepts of cryptography', 'url': 'https://learn.microsoft.com/training/modules/describe-concepts-of-cryptography/? + WT.mc_id=api_CatalogApi'}, {'title': 'Introduction to audio classification with TensorFlow', 'url': 'https://learn.microsoft.com/en- + us/training/modules/intro-audio-classification-tensorflow/?WT.mc_id=api_CatalogApi'}, {'title': 'Design a Performant Data Model in Azure SQL + Database with Azure Data Studio', 'url': 'https://learn.microsoft.com/training/modules/design-a-data-model-with-ads/? + WT.mc_id=api_CatalogApi'}, {'title': 'Getting started with the Microsoft Cloud Adoption Framework for Azure', 'url': + 'https://learn.microsoft.com/training/modules/cloud-adoption-framework-getting-started/?WT.mc_id=api_CatalogApi'}, {'title': 'Set up the + Rust development environment', 'url': 'https://learn.microsoft.com/training/modules/rust-set-up-environment/?WT.mc_id=api_CatalogApi'}] + + ``` + +1. Maintenant, nous allons envoyer le message mis à jour, `messages` au LLM afin que nous puissions recevoir une réponse en langage naturel au lieu d'une réponse au format JSON d'API. + + ```python + print("Messages in next request:") + print(messages) + print() + + second_response = client.chat.completions.create( + messages=messages, + model=deployment, + function_call="auto", + functions=functions, + temperature=0 + ) # get a new response from GPT where it can see the function response + + + print(second_response.choices[0].message) + ``` + + **Sortie** + + ```python + { + "role": "assistant", + "content": "I found some good courses for beginner students to learn Azure:\n\n1. [Describe concepts of cryptography] (https://learn.microsoft.com/training/modules/describe-concepts-of-cryptography/?WT.mc_id=api_CatalogApi)\n2. [Introduction to audio classification with TensorFlow](https://learn.microsoft.com/training/modules/intro-audio-classification-tensorflow/?WT.mc_id=api_CatalogApi)\n3. [Design a Performant Data Model in Azure SQL Database with Azure Data Studio](https://learn.microsoft.com/training/modules/design-a-data-model-with-ads/?WT.mc_id=api_CatalogApi)\n4. [Getting started with the Microsoft Cloud Adoption Framework for Azure](https://learn.microsoft.com/training/modules/cloud-adoption-framework-getting-started/?WT.mc_id=api_CatalogApi)\n5. [Set up the Rust development environment](https://learn.microsoft.com/training/modules/rust-set-up-environment/?WT.mc_id=api_CatalogApi)\n\nYou can click on the links to access the courses." + } + + ``` + +## Affectation + +Pour continuer votre apprentissage de l'appel de fonction Azure OpenAI, vous pouvez créer : + +- Plus de paramètres de la fonction qui pourraient aider les apprenants à trouver plus de cours. +- Créer un autre appel de fonction qui prend plus d'informations de l'apprenant comme sa langue maternelle. +- Créer une gestion des erreurs lorsque l'appel de fonction et/ou l'appel API ne retourne aucun cours approprié. + +Astuce : Suivez la page [Learn API reference documentation](https://learn.microsoft.com/training/support/catalog-api-developer-reference?WT.mc_id=academic-105485-koreyst) pour voir comment et où ces données sont disponibles. + +## Beau travail ! Continuez le parcours + +Après avoir terminé cette leçon, consultez notre [collection d'apprentissage sur l'IA générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à améliorer vos connaissances en IA générative ! + +Rendez-vous à la leçon 12 où nous examinerons comment [concevoir l'UX pour les applications d'IA](../12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) ! + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique par IA. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/12-designing-ux-for-ai-applications/README.md b/translations/fr/12-designing-ux-for-ai-applications/README.md new file mode 100644 index 000000000..b15a91732 --- /dev/null +++ b/translations/fr/12-designing-ux-for-ai-applications/README.md @@ -0,0 +1,121 @@ +# Concevoir l'expérience utilisateur pour les applications d'IA + +[![Concevoir l'expérience utilisateur pour les applications d'IA](../../../translated_images/12-lesson-banner.png?WT.998ee992c9acfb5c1b2802fb3817b9a1a704886f30157b28dff34cd9c2ee598b.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson12-gh?WT.mc_id=academic-105485-koreyst) + +> _(Cliquez sur l'image ci-dessus pour voir la vidéo de cette leçon)_ + +L'expérience utilisateur est un aspect très important dans la création d'applications. Les utilisateurs doivent pouvoir utiliser votre application de manière efficace pour réaliser des tâches. Être efficace est une chose, mais il faut aussi concevoir des applications pour qu'elles soient utilisables par tout le monde, afin de les rendre _accessibles_. Ce chapitre se concentrera sur cet aspect afin que vous puissiez concevoir une application que les gens peuvent et veulent utiliser. + +## Introduction + +L'expérience utilisateur est la manière dont un utilisateur interagit avec et utilise un produit ou un service spécifique, qu'il s'agisse d'un système, d'un outil ou d'un design. Lors du développement d'applications d'IA, les développeurs se concentrent non seulement sur l'efficacité de l'expérience utilisateur mais aussi sur son aspect éthique. Dans cette leçon, nous abordons comment créer des applications d'intelligence artificielle (IA) qui répondent aux besoins des utilisateurs. + +La leçon couvrira les domaines suivants : + +- Introduction à l'expérience utilisateur et compréhension des besoins des utilisateurs +- Concevoir des applications d'IA pour la confiance et la transparence +- Concevoir des applications d'IA pour la collaboration et le retour d'information + +## Objectifs d'apprentissage + +Après avoir suivi cette leçon, vous serez capable de : + +- Comprendre comment créer des applications d'IA qui répondent aux besoins des utilisateurs. +- Concevoir des applications d'IA qui favorisent la confiance et la collaboration. + +### Prérequis + +Prenez le temps de lire davantage sur [l'expérience utilisateur et le design thinking.](https://learn.microsoft.com/training/modules/ux-design?WT.mc_id=academic-105485-koreyst) + +## Introduction à l'expérience utilisateur et compréhension des besoins des utilisateurs + +Dans notre startup fictive dans le domaine de l'éducation, nous avons deux utilisateurs principaux, les enseignants et les étudiants. Chacun de ces utilisateurs a des besoins uniques. Un design centré sur l'utilisateur priorise l'utilisateur en s'assurant que les produits sont pertinents et bénéfiques pour ceux auxquels ils sont destinés. + +L'application doit être **utile, fiable, accessible et agréable** pour offrir une bonne expérience utilisateur. + +### Utilité + +Être utile signifie que l'application a des fonctionnalités qui correspondent à son objectif prévu, comme automatiser le processus de notation ou générer des fiches de révision. Une application qui automatise le processus de notation doit être capable d'attribuer des notes aux travaux des étudiants de manière précise et efficace en fonction de critères prédéfinis. De même, une application qui génère des fiches de révision doit être capable de créer des questions pertinentes et variées en fonction de ses données. + +### Fiabilité + +Être fiable signifie que l'application peut accomplir sa tâche de manière cohérente et sans erreurs. Cependant, l'IA, tout comme les humains, n'est pas parfaite et peut être sujette à des erreurs. Les applications peuvent rencontrer des erreurs ou des situations inattendues qui nécessitent une intervention ou une correction humaine. Comment gérez-vous les erreurs ? Dans la dernière section de cette leçon, nous aborderons comment les systèmes et applications d'IA sont conçus pour la collaboration et le retour d'information. + +### Accessibilité + +Être accessible signifie étendre l'expérience utilisateur à des utilisateurs ayant diverses capacités, y compris ceux ayant des handicaps, en s'assurant que personne n'est laissé de côté. En suivant les directives et principes d'accessibilité, les solutions d'IA deviennent plus inclusives, utilisables et bénéfiques pour tous les utilisateurs. + +### Agréable + +Être agréable signifie que l'application est plaisante à utiliser. Une expérience utilisateur attrayante peut avoir un impact positif sur l'utilisateur, l'encourageant à revenir à l'application et augmentant les revenus de l'entreprise. + +![image illustrant les considérations UX dans l'IA](../../../translated_images/uxinai.png?WT.00d77ed86b53127e3860f8ee713e684370fe08c450c8a1e496beb82e96c59355.fr.mc_id=academic-105485-koreyst) + +Tous les défis ne peuvent pas être résolus avec l'IA. L'IA intervient pour améliorer votre expérience utilisateur, qu'il s'agisse d'automatiser des tâches manuelles ou de personnaliser les expériences utilisateur. + +## Concevoir des applications d'IA pour la confiance et la transparence + +Établir la confiance est essentiel lors de la conception d'applications d'IA. La confiance assure qu'un utilisateur est confiant que l'application accomplira le travail, livrera des résultats de manière cohérente et que les résultats sont ce dont l'utilisateur a besoin. Un risque dans ce domaine est la méfiance et la surconfiance. La méfiance se produit lorsqu'un utilisateur a peu ou pas de confiance dans un système d'IA, ce qui conduit l'utilisateur à rejeter votre application. La surconfiance se produit lorsqu'un utilisateur surestime la capacité d'un système d'IA, conduisant les utilisateurs à trop faire confiance au système d'IA. Par exemple, un système de notation automatisé en cas de surconfiance pourrait amener l'enseignant à ne pas vérifier certains des travaux pour s'assurer que le système de notation fonctionne bien. Cela pourrait entraîner des notes injustes ou inexactes pour les étudiants, ou des occasions manquées pour des retours d'information et des améliorations. + +Deux moyens d'assurer que la confiance est placée au centre du design sont l'explicabilité et le contrôle. + +### Explicabilité + +Lorsque l'IA aide à informer des décisions telles que transmettre des connaissances aux générations futures, il est essentiel que les enseignants et les parents comprennent comment les décisions de l'IA sont prises. C'est l'explicabilité - comprendre comment les applications d'IA prennent des décisions. Concevoir pour l'explicabilité inclut d'ajouter des détails et des exemples de ce qu'une application d'IA peut faire. Par exemple, au lieu de "Commencer avec l'enseignant IA", le système peut utiliser : "Résumez vos notes pour une révision plus facile grâce à l'IA." + +![une page d'accueil d'application avec une illustration claire de l'explicabilité dans les applications d'IA](../../../translated_images/explanability-in-ai.png?WT.e66323dd42a976cd7fb15d79304f70a3d625eac6607ec395311a772915a45ffa.fr.mc_id=academic-105485-koreyst) + +Un autre exemple est la façon dont l'IA utilise les données utilisateur et personnelles. Par exemple, un utilisateur avec la persona étudiant peut avoir des limitations basées sur leur persona. L'IA peut ne pas être en mesure de révéler les réponses aux questions mais peut aider à guider l'utilisateur à réfléchir à la façon dont ils peuvent résoudre un problème. + +![L'IA répondant à des questions basées sur la persona](../../../translated_images/solving-questions.png?WT.f7c41f8c20cb98ec5d456d1e14e7fee2b11b7adc77c23421645a82495b51208d.fr.mc_id=academic-105485-koreyst) + +Une dernière partie clé de l'explicabilité est la simplification des explications. Les étudiants et les enseignants peuvent ne pas être des experts en IA, donc les explications de ce que l'application peut ou ne peut pas faire devraient être simplifiées et faciles à comprendre. + +![explications simplifiées sur les capacités de l'IA](../../../translated_images/simplified-explanations.png?WT.58904786757a91a1365e98cac5f9088bb16c9241e312463921a9a1733a85adc0.fr.mc_id=academic-105485-koreyst) + +### Contrôle + +L'IA générative crée une collaboration entre l'IA et l'utilisateur, où par exemple un utilisateur peut modifier des invites pour différents résultats. De plus, une fois qu'un résultat est généré, les utilisateurs devraient pouvoir modifier les résultats leur donnant un sentiment de contrôle. Par exemple, lors de l'utilisation de Bing, vous pouvez adapter votre invite en fonction du format, du ton et de la longueur. De plus, vous pouvez ajouter des modifications à votre résultat et le modifier comme illustré ci-dessous : + +![Résultats de recherche Bing avec des options pour modifier l'invite et le résultat](../../../translated_images/bing1.png?WT.02e610458eee0b4aa9ea52956d1077ed067d030d214834cd654aa21764980e03.fr.mc_id=academic-105485-koreyst "résultats de recherche bing avec des options pour modifier l'invite et le résultat") + +Une autre fonctionnalité dans Bing qui permet à un utilisateur de contrôler l'application est la possibilité de choisir de participer ou non aux données utilisées par l'IA. Pour une application scolaire, un étudiant pourrait vouloir utiliser ses notes ainsi que les ressources des enseignants comme matériel de révision. + +![Résultats de recherche Bing avec des options pour modifier l'invite et le résultat](../../../translated_images/bing2.png?WT.ef2560baaf643e77c593b7c036c42c5a787a46f2cd3c2b4118d06349973c79f1.fr.mc_id=academic-105485-koreyst "résultats de recherche bing avec des options pour modifier l'invite et le résultat") + +> Lors de la conception d'applications d'IA, l'intentionnalité est essentielle pour s'assurer que les utilisateurs ne font pas une confiance excessive en fixant des attentes irréalistes quant à ses capacités. Une façon de faire cela est de créer une friction entre les invites et les résultats. Rappelant à l'utilisateur que c'est de l'IA et non un être humain + +## Concevoir des applications d'IA pour la collaboration et le retour d'information + +Comme mentionné précédemment, l'IA générative crée une collaboration entre l'utilisateur et l'IA. La plupart des interactions consistent en un utilisateur saisissant une invite et l'IA générant un résultat. Que se passe-t-il si le résultat est incorrect ? Comment l'application gère-t-elle les erreurs si elles se produisent ? L'IA blâme-t-elle l'utilisateur ou prend-elle le temps d'expliquer l'erreur ? + +Les applications d'IA devraient être conçues pour recevoir et donner des retours d'information. Cela aide non seulement le système d'IA à s'améliorer mais aussi à instaurer la confiance avec les utilisateurs. Une boucle de rétroaction devrait être incluse dans le design, un exemple peut être un simple pouce levé ou baissé sur le résultat. + +Une autre façon de gérer cela est de communiquer clairement les capacités et les limitations du système. Lorsqu'un utilisateur fait une erreur en demandant quelque chose au-delà des capacités de l'IA, il devrait également y avoir un moyen de gérer cela, comme illustré ci-dessous. + +![Donner un retour d'information et gérer les erreurs](../../../translated_images/feedback-loops.png?WT.ee4d8df7b207adf073487e9a9617e4f901a404fc4b826152a56435fb5bd32705.fr.mc_id=academic-105485-koreyst) + +Les erreurs système sont courantes avec les applications où l'utilisateur pourrait avoir besoin d'aide avec des informations en dehors du champ d'application de l'IA ou l'application peut avoir une limite du nombre de questions/sujets qu'un utilisateur peut générer des résumés. Par exemple, une application d'IA formée avec des données sur des sujets limités, par exemple, Histoire et Mathématiques, pourrait ne pas être capable de gérer des questions sur la Géographie. Pour atténuer cela, le système d'IA peut donner une réponse comme : "Désolé, notre produit a été formé avec des données dans les sujets suivants....., je ne peux pas répondre à la question que vous avez posée." + +Les applications d'IA ne sont pas parfaites, par conséquent, elles sont susceptibles de faire des erreurs. Lors de la conception de vos applications, vous devriez vous assurer de créer un espace pour le retour d'information des utilisateurs et la gestion des erreurs d'une manière simple et facilement explicable. + +## Devoir + +Prenez toutes les applications d'IA que vous avez construites jusqu'à présent, envisagez de mettre en œuvre les étapes ci-dessous dans votre application : + +- **Agréable :** Réfléchissez à la façon dont vous pouvez rendre votre application plus agréable. Ajoutez-vous des explications partout, encouragez-vous l'utilisateur à explorer ? Comment formulez-vous vos messages d'erreur ? + +- **Utilité :** Construisez une application web. Assurez-vous que votre application est navigable à la fois par la souris et le clavier. + +- **Confiance et transparence :** Ne faites pas entièrement confiance à l'IA et à ses résultats, réfléchissez à la manière dont vous ajouteriez un humain au processus pour vérifier le résultat. Envisagez également et mettez en œuvre d'autres moyens d'atteindre la confiance et la transparence. + +- **Contrôle :** Donnez à l'utilisateur le contrôle des données qu'il fournit à l'application. Mettez en œuvre une façon pour l'utilisateur de choisir de participer ou non à la collecte de données dans l'application d'IA. + +## Poursuivez votre apprentissage ! + +Après avoir terminé cette leçon, consultez notre [collection d'apprentissage sur l'IA générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à développer vos connaissances en IA générative ! + +Passez à la leçon 13 où nous verrons comment [sécuriser les applications d'IA](../13-securing-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) ! + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction basés sur l'intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/13-securing-ai-applications/README.md b/translations/fr/13-securing-ai-applications/README.md new file mode 100644 index 000000000..d8de9c5b7 --- /dev/null +++ b/translations/fr/13-securing-ai-applications/README.md @@ -0,0 +1,134 @@ +# Sécuriser vos applications d'IA générative + +[![Sécuriser vos applications d'IA générative](../../../translated_images/13-lesson-banner.png?WT.028697a53f1c3c0ea07dafd10617ce0380ac2b809bb145d7171be69e83daac89.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson13-gh?WT.mc_id=academic-105485-koreyst) + +## Introduction + +Cette leçon couvrira : + +- La sécurité dans le contexte des systèmes d'IA. +- Les risques et menaces courants pour les systèmes d'IA. +- Méthodes et considérations pour sécuriser les systèmes d'IA. + +## Objectifs d'apprentissage + +Après avoir terminé cette leçon, vous comprendrez : + +- Les menaces et risques pour les systèmes d'IA. +- Les méthodes et pratiques courantes pour sécuriser les systèmes d'IA. +- Comment la mise en œuvre de tests de sécurité peut prévenir des résultats inattendus et l'érosion de la confiance des utilisateurs. + +## Que signifie la sécurité dans le contexte de l'IA générative ? + +Alors que les technologies d'Intelligence Artificielle (IA) et d'Apprentissage Automatique (ML) façonnent de plus en plus nos vies, il est crucial de protéger non seulement les données des clients, mais aussi les systèmes d'IA eux-mêmes. L'IA/ML est de plus en plus utilisée pour soutenir les processus de prise de décision de grande valeur dans les industries où une mauvaise décision peut avoir des conséquences graves. + +Voici des points clés à considérer : + +- **Impact de l'IA/ML** : L'IA/ML ont des impacts significatifs sur la vie quotidienne et, à ce titre, leur protection est devenue essentielle. +- **Défis de sécurité** : Cet impact de l'IA/ML nécessite une attention appropriée pour répondre au besoin de protéger les produits basés sur l'IA contre des attaques sophistiquées, que ce soit par des trolls ou des groupes organisés. +- **Problèmes stratégiques** : L'industrie technologique doit aborder de manière proactive les défis stratégiques pour garantir la sécurité à long terme des clients et la sécurité des données. + +De plus, les modèles d'apprentissage automatique sont largement incapables de discerner entre une entrée malveillante et des données anormales bénignes. Une source importante de données d'entraînement provient de jeux de données publics non curatés et non modérés, ouverts aux contributions de tiers. Les attaquants n'ont pas besoin de compromettre les jeux de données lorsqu'ils sont libres d'y contribuer. Au fil du temps, les données malveillantes de faible confiance deviennent des données de haute confiance, si la structure/format des données reste correct. + +C'est pourquoi il est crucial d'assurer l'intégrité et la protection des magasins de données que vos modèles utilisent pour prendre des décisions. + +## Comprendre les menaces et risques de l'IA + +En termes d'IA et de systèmes associés, l'empoisonnement des données se distingue comme la menace de sécurité la plus significative aujourd'hui. L'empoisonnement des données se produit lorsque quelqu'un modifie intentionnellement les informations utilisées pour entraîner une IA, la faisant ainsi commettre des erreurs. Cela est dû à l'absence de méthodes de détection et de mitigation standardisées, couplée à notre dépendance à des jeux de données publics non fiables ou non curatés pour l'entraînement. Pour maintenir l'intégrité des données et prévenir un processus d'entraînement défectueux, il est crucial de suivre l'origine et la lignée de vos données. Sinon, le vieil adage "garbage in, garbage out" reste vrai, conduisant à une performance compromise du modèle. + +Voici des exemples de la façon dont l'empoisonnement des données peut affecter vos modèles : + +1. **Renversement de labels** : Dans une tâche de classification binaire, un adversaire renverse intentionnellement les labels d'un petit sous-ensemble de données d'entraînement. Par exemple, des échantillons bénins sont étiquetés comme malveillants, amenant le modèle à apprendre des associations incorrectes.\ + **Exemple** : Un filtre anti-spam classifiant à tort des emails légitimes comme spam en raison de labels manipulés. +2. **Empoisonnement de caractéristiques** : Un attaquant modifie subtilement les caractéristiques des données d'entraînement pour introduire un biais ou induire le modèle en erreur.\ + **Exemple** : Ajouter des mots-clés non pertinents aux descriptions de produits pour manipuler les systèmes de recommandation. +3. **Injection de données** : Injecter des données malveillantes dans l'ensemble d'entraînement pour influencer le comportement du modèle.\ + **Exemple** : Introduire de fausses critiques d'utilisateurs pour fausser les résultats de l'analyse de sentiments. +4. **Attaques de porte dérobée** : Un adversaire insère un motif caché (porte dérobée) dans les données d'entraînement. Le modèle apprend à reconnaître ce motif et agit de manière malveillante lorsqu'il est déclenché.\ + **Exemple** : Un système de reconnaissance faciale entraîné avec des images contenant une porte dérobée qui identifie incorrectement une personne spécifique. + +La MITRE Corporation a créé [ATLAS (Adversarial Threat Landscape for Artificial-Intelligence Systems)](https://atlas.mitre.org/?WT.mc_id=academic-105485-koreyst), une base de connaissances des tactiques et techniques employées par les adversaires dans les attaques réelles sur les systèmes d'IA. + +> Il y a un nombre croissant de vulnérabilités dans les systèmes activés par l'IA, car l'incorporation de l'IA augmente la surface d'attaque des systèmes existants au-delà de celles des cyberattaques traditionnelles. Nous avons développé ATLAS pour sensibiliser à ces vulnérabilités uniques et en évolution, car la communauté mondiale intègre de plus en plus l'IA dans divers systèmes. ATLAS est modélisé d'après le cadre MITRE ATT&CK® et ses tactiques, techniques et procédures (TTPs) sont complémentaires à celles d'ATT&CK. + +Tout comme le cadre MITRE ATT&CK®, qui est largement utilisé dans la cybersécurité traditionnelle pour planifier des scénarios avancés d'émulation de menaces, ATLAS fournit un ensemble de TTPs facilement consultables qui peuvent aider à mieux comprendre et se préparer à défendre contre les attaques émergentes. + +De plus, l'Open Web Application Security Project (OWASP) a créé une "[liste des 10 principales vulnérabilités](https://llmtop10.com/?WT.mc_id=academic-105485-koreyst)" les plus critiques trouvées dans les applications utilisant des LLMs. La liste met en évidence les risques de menaces telles que l'empoisonnement des données mentionné précédemment, ainsi que d'autres comme : + +- **Injection de prompts** : une technique où les attaquants manipulent un modèle de langage de grande taille (LLM) à travers des entrées soigneusement conçues, le faisant se comporter en dehors de son comportement prévu. +- **Vulnérabilités de la chaîne d'approvisionnement** : Les composants et logiciels qui composent les applications utilisées par un LLM, tels que les modules Python ou les jeux de données externes, peuvent eux-mêmes être compromis, entraînant des résultats inattendus, des biais introduits et même des vulnérabilités dans l'infrastructure sous-jacente. +- **Dépendance excessive** : Les LLMs sont faillibles et ont tendance à halluciner, fournissant des résultats inexacts ou dangereux. Dans plusieurs circonstances documentées, les gens ont pris les résultats pour argent comptant, conduisant à des conséquences négatives inattendues dans le monde réel. + +Rod Trent, Cloud Advocate chez Microsoft, a écrit un ebook gratuit, [Must Learn AI Security](https://github.com/rod-trent/OpenAISecurity/tree/main/Must_Learn/Book_Version?WT.mc_id=academic-105485-koreyst), qui explore en profondeur ces menaces émergentes de l'IA et fournit des conseils approfondis sur la meilleure façon de gérer ces scénarios. + +## Test de sécurité pour les systèmes d'IA et les LLMs + +L'intelligence artificielle (IA) transforme divers domaines et industries, offrant de nouvelles possibilités et avantages pour la société. Cependant, l'IA pose également des défis et des risques importants, tels que la confidentialité des données, les biais, le manque d'explicabilité et le potentiel d'utilisation abusive. Par conséquent, il est crucial de s'assurer que les systèmes d'IA sont sécurisés et responsables, c'est-à-dire qu'ils respectent les normes éthiques et légales et peuvent être dignes de confiance par les utilisateurs et les parties prenantes. + +Le test de sécurité est le processus d'évaluation de la sécurité d'un système d'IA ou d'un LLM, en identifiant et en exploitant leurs vulnérabilités. Cela peut être effectué par des développeurs, des utilisateurs ou des auditeurs tiers, selon le but et l'étendue des tests. Certaines des méthodes de test de sécurité les plus courantes pour les systèmes d'IA et les LLMs sont : + +- **Assainissement des données** : C'est le processus de suppression ou d'anonymisation des informations sensibles ou privées des données d'entraînement ou de l'entrée d'un système d'IA ou d'un LLM. L'assainissement des données peut aider à prévenir la fuite de données et la manipulation malveillante en réduisant l'exposition des données confidentielles ou personnelles. +- **Test adversarial** : C'est le processus de génération et d'application d'exemples adversariaux à l'entrée ou à la sortie d'un système d'IA ou d'un LLM pour évaluer sa robustesse et sa résilience contre les attaques adversariales. Le test adversarial peut aider à identifier et à atténuer les vulnérabilités et faiblesses d'un système d'IA ou d'un LLM qui pourraient être exploitées par des attaquants. +- **Vérification du modèle** : C'est le processus de vérification de l'exactitude et de l'exhaustivité des paramètres ou de l'architecture du modèle d'un système d'IA ou d'un LLM. La vérification du modèle peut aider à détecter et à prévenir le vol de modèle en s'assurant que le modèle est protégé et authentifié. +- **Validation de la sortie** : C'est le processus de validation de la qualité et de la fiabilité de la sortie d'un système d'IA ou d'un LLM. La validation de la sortie peut aider à détecter et à corriger la manipulation malveillante en s'assurant que la sortie est cohérente et précise. + +OpenAI, un leader dans les systèmes d'IA, a mis en place une série d'_évaluations de sécurité_ dans le cadre de leur initiative de réseau de red teaming, visant à tester les systèmes d'IA dans l'espoir de contribuer à la sécurité de l'IA. + +> Les évaluations peuvent aller de tests simples de questions-réponses à des simulations plus complexes. Voici des exemples concrets d'évaluations développées par OpenAI pour évaluer les comportements de l'IA sous plusieurs angles : + +#### Persuasion + +- [MakeMeSay](https://github.com/openai/evals/tree/main/evals/elsuite/make_me_say/readme.md?WT.mc_id=academic-105485-koreyst) : Dans quelle mesure un système d'IA peut-il tromper un autre système d'IA pour qu'il dise un mot secret ? +- [MakeMePay](https://github.com/openai/evals/tree/main/evals/elsuite/make_me_pay/readme.md?WT.mc_id=academic-105485-koreyst) : Dans quelle mesure un système d'IA peut-il convaincre un autre système d'IA de donner de l'argent ? +- [Ballot Proposal](https://github.com/openai/evals/tree/main/evals/elsuite/ballots/readme.md?WT.mc_id=academic-105485-koreyst) : Dans quelle mesure un système d'IA peut-il influencer le soutien d'un autre système d'IA à une proposition politique ? + +#### Stéganographie (messagerie cachée) + +- [Steganography](https://github.com/openai/evals/tree/main/evals/elsuite/steganography/readme.md?WT.mc_id=academic-105485-koreyst) : Dans quelle mesure un système d'IA peut-il passer des messages secrets sans être détecté par un autre système d'IA ? +- [Text Compression](https://github.com/openai/evals/tree/main/evals/elsuite/text_compression/readme.md?WT.mc_id=academic-105485-koreyst) : Dans quelle mesure un système d'IA peut-il compresser et décompresser des messages pour permettre de cacher des messages secrets ? +- [Schelling Point](https://github.com/openai/evals/blob/main/evals/elsuite/schelling_point/README.md?WT.mc_id=academic-105485-koreyst) : Dans quelle mesure un système d'IA peut-il se coordonner avec un autre système d'IA, sans communication directe ? + +### Sécurité de l'IA + +Il est impératif que nous visons à protéger les systèmes d'IA contre les attaques malveillantes, l'utilisation abusive ou les conséquences involontaires. Cela inclut de prendre des mesures pour garantir la sécurité, la fiabilité et la confiance des systèmes d'IA, telles que : + +- Sécuriser les données et les algorithmes utilisés pour entraîner et exécuter les modèles d'IA +- Empêcher l'accès non autorisé, la manipulation ou le sabotage des systèmes d'IA +- Détecter et atténuer les biais, la discrimination ou les problèmes éthiques dans les systèmes d'IA +- Assurer la responsabilité, la transparence et l'explicabilité des décisions et actions de l'IA +- Aligner les objectifs et les valeurs des systèmes d'IA avec ceux des humains et de la société + +La sécurité de l'IA est importante pour garantir l'intégrité, la disponibilité et la confidentialité des systèmes et des données d'IA. Certains des défis et opportunités de la sécurité de l'IA sont : + +- Opportunité : Incorporer l'IA dans les stratégies de cybersécurité, car elle peut jouer un rôle crucial dans l'identification des menaces et l'amélioration des temps de réponse. L'IA peut aider à automatiser et à augmenter la détection et la mitigation des cyberattaques, telles que le phishing, les logiciels malveillants ou les rançongiciels. +- Défi : L'IA peut également être utilisée par les adversaires pour lancer des attaques sophistiquées, telles que générer du contenu faux ou trompeur, usurper l'identité des utilisateurs ou exploiter des vulnérabilités dans les systèmes d'IA. Par conséquent, les développeurs d'IA ont une responsabilité unique de concevoir des systèmes robustes et résilients contre l'utilisation abusive. + +### Protection des données + +Les LLMs peuvent présenter des risques pour la confidentialité et la sécurité des données qu'ils utilisent. Par exemple, les LLMs peuvent potentiellement mémoriser et divulguer des informations sensibles de leurs données d'entraînement, telles que des noms personnels, des adresses, des mots de passe ou des numéros de carte de crédit. Ils peuvent également être manipulés ou attaqués par des acteurs malveillants qui souhaitent exploiter leurs vulnérabilités ou leurs biais. Par conséquent, il est important d'être conscient de ces risques et de prendre des mesures appropriées pour protéger les données utilisées avec les LLMs. Il y a plusieurs étapes que vous pouvez suivre pour protéger les données utilisées avec les LLMs. Ces étapes incluent : + +- **Limiter la quantité et le type de données qu'ils partagent avec les LLMs** : Partagez uniquement les données nécessaires et pertinentes pour les objectifs visés, et évitez de partager des données sensibles, confidentielles ou personnelles. Les utilisateurs devraient également anonymiser ou crypter les données qu'ils partagent avec les LLMs, par exemple en supprimant ou masquant toute information d'identification, ou en utilisant des canaux de communication sécurisés. +- **Vérifier les données générées par les LLMs** : Vérifiez toujours l'exactitude et la qualité des résultats générés par les LLMs pour vous assurer qu'ils ne contiennent pas d'informations indésirables ou inappropriées. +- **Signaler et alerter toute violation de données ou incident** : Soyez vigilant face à toute activité ou comportement suspect ou anormal des LLMs, comme la génération de textes qui sont hors sujet, inexacts, offensants ou nuisibles. Cela pourrait indiquer une violation de données ou un incident de sécurité. + +La sécurité, la gouvernance et la conformité des données sont essentielles pour toute organisation souhaitant exploiter la puissance des données et de l'IA dans un environnement multi-cloud. Sécuriser et gouverner toutes vos données est une entreprise complexe et multifacette. Vous devez sécuriser et gouverner différents types de données (structurées, non structurées et données générées par l'IA) à différents emplacements à travers plusieurs clouds, et vous devez tenir compte des réglementations de sécurité, de gouvernance et d'IA existantes et futures. Pour protéger vos données, vous devez adopter certaines meilleures pratiques et précautions, telles que : + +- Utilisez des services ou plateformes cloud offrant des fonctionnalités de protection et de confidentialité des données. +- Utilisez des outils de qualité et de validation des données pour vérifier vos données à la recherche d'erreurs, d'incohérences ou d'anomalies. +- Utilisez des cadres de gouvernance et d'éthique des données pour vous assurer que vos données sont utilisées de manière responsable et transparente. + +### Émulation des menaces réelles - Red teaming de l'IA + +L'émulation des menaces réelles est désormais considérée comme une pratique standard pour construire des systèmes d'IA résilients en utilisant des outils, tactiques et procédures similaires pour identifier les risques pour les systèmes et tester la réponse des défenseurs. + +> La pratique du red teaming de l'IA a évolué pour prendre une signification plus étendue : elle couvre non seulement la recherche de vulnérabilités de sécurité, mais inclut également la recherche d'autres défaillances du système, telles que la génération de contenu potentiellement nuisible. Les systèmes d'IA présentent de nouveaux risques, et le red teaming est essentiel pour comprendre ces risques nouveaux, tels que l'injection de prompts et la production de contenu non fondé. - [Microsoft AI Red Team building future of safer AI](https://www.microsoft.com/security/blog/2023/08/07/microsoft-ai-red-team-building-future-of-safer-ai/?WT.mc_id=academic-105485-koreyst) + +[![Conseils et ressources pour le red teaming](../../../translated_images/13-AI-red-team.png?WT.5a1ed56fe6f4caf0ada6509bb7aacc47c7da784e5747e1a5373539d9f05bede2.fr.mc_id=academic-105485-koreyst)]() + +Voici des points clés qui ont façonné le programme AI Red Team de Microsoft. + +1. **Portée étendue du red teaming de l'IA :** + Le red teaming de l'IA englobe désormais à la fois les résultats en matière de sécurité et d'IA Responsable (RAI + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle humaine. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/14-the-generative-ai-application-lifecycle/README.md b/translations/fr/14-the-generative-ai-application-lifecycle/README.md new file mode 100644 index 000000000..5c7699d02 --- /dev/null +++ b/translations/fr/14-the-generative-ai-application-lifecycle/README.md @@ -0,0 +1,90 @@ +[![Intégration avec appel de fonction](../../../translated_images/14-lesson-banner.png?WT.833a8de2ff3806528caaf839db4385f00ff7c9f92ccdd38d886f4d662fc72f2a.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson14-gh?WT.mc_id=academic-105485-koreyst) + +# Le Cycle de Vie d'une Application d'IA Générative + +Une question importante pour toutes les applications d'IA est la pertinence des fonctionnalités d'IA, car le domaine de l'IA évolue rapidement. Pour garantir que votre application reste pertinente, fiable et robuste, vous devez la surveiller, l'évaluer et l'améliorer en continu. C'est là qu'intervient le cycle de vie de l'IA générative. + +Le cycle de vie de l'IA générative est un cadre qui vous guide à travers les étapes de développement, de déploiement et de maintenance d'une application d'IA générative. Il vous aide à définir vos objectifs, à mesurer vos performances, à identifier vos défis et à mettre en œuvre vos solutions. Il vous aide également à aligner votre application avec les normes éthiques et légales de votre domaine et de vos parties prenantes. En suivant le cycle de vie de l'IA générative, vous pouvez vous assurer que votre application apporte toujours de la valeur et satisfait vos utilisateurs. + +## Introduction + +Dans ce chapitre, vous allez : + +- Comprendre le changement de paradigme de MLOps à LLMOps +- Le cycle de vie des LLM +- Les outils du cycle de vie +- La métrification et l'évaluation du cycle de vie + +## Comprendre le Changement de Paradigme de MLOps à LLMOps + +Les LLM sont un nouvel outil dans l'arsenal de l'Intelligence Artificielle, ils sont incroyablement puissants dans les tâches d'analyse et de génération pour les applications. Cependant, cette puissance a des conséquences sur la façon dont nous rationalisons les tâches d'IA et d'apprentissage automatique classique. + +Avec cela, nous avons besoin d'un nouveau paradigme pour adapter cet outil de manière dynamique, avec les incitations appropriées. Nous pouvons catégoriser les anciennes applications d'IA comme des "Applications ML" et les nouvelles applications d'IA comme des "Applications GenAI" ou simplement "Applications IA", reflétant la technologie et les techniques courantes utilisées à l'époque. Cela modifie notre récit de plusieurs manières, regardez la comparaison suivante. + +![Comparaison LLMOps vs. MLOps](../../../translated_images/01-llmops-shift.png?WT.38bc3eca81f659d83b17070d0a766bc3a9f13284b92c307e296915db4e683fcf.fr.mc_id=academic-105485-koreys) + +Remarquez que dans LLMOps, nous nous concentrons davantage sur les développeurs d'applications, en utilisant les intégrations comme point clé, en utilisant "Models-as-a-Service" et en pensant aux points suivants pour les métriques. + +- Qualité : Qualité de la réponse +- Dommage : IA Responsable +- Honnêteté : Ancrage de la réponse (Cela a-t-il du sens ? Est-ce correct ?) +- Coût : Budget de la solution +- Latence : Temps moyen de réponse par jeton + +## Le Cycle de Vie des LLM + +Tout d'abord, pour comprendre le cycle de vie et les modifications, notons l'infographie suivante. + +![Infographie LLMOps](../../../translated_images/02-llmops.png?WT.32553adc9de4d89bb1d6a2f1f99d985457158a3be863e8e5dddc5e3dd074558a.fr.mc_id=academic-105485-koreys) + +Comme vous pouvez le constater, cela diffère des cycles de vie habituels de MLOps. Les LLM ont de nombreuses nouvelles exigences, comme le Prompting, différentes techniques pour améliorer la qualité (Fine-Tuning, RAG, Meta-Prompts), une évaluation et une responsabilité différentes avec l'IA responsable, enfin, de nouvelles métriques d'évaluation (Qualité, Dommage, Honnêteté, Coût et Latence). + +Par exemple, regardez comment nous concevons. En utilisant l'ingénierie des prompts pour expérimenter avec divers LLM afin d'explorer les possibilités de tester si leurs hypothèses pourraient être correctes. + +Notez que ce n'est pas linéaire, mais des boucles intégrées, itératives et avec un cycle global. + +Comment pourrions-nous explorer ces étapes ? Entrons dans le détail de la manière dont nous pourrions construire un cycle de vie. + +![Flux de travail LLMOps](../../../translated_images/03-llm-stage-flows.png?WT.118920c8fd638f0879fe06c5e6eb9d91536e8b9c6bc56808ebed8706812f5391.fr.mc_id=academic-105485-koreys) + +Cela peut sembler un peu compliqué, concentrons-nous d'abord sur les trois grandes étapes. + +1. Idéation/Exploration : Exploration, ici nous pouvons explorer en fonction de nos besoins commerciaux. Prototypage, création d'un [PromptFlow](https://microsoft.github.io/promptflow/index.html?WT.mc_id=academic-105485-koreyst) et tester s'il est suffisamment efficace pour notre hypothèse. +2. Construction/Augmentation : Mise en œuvre, maintenant, nous commençons à évaluer pour des ensembles de données plus importants en mettant en œuvre des techniques, comme le Fine-tuning et le RAG, pour vérifier la robustesse de notre solution. Si ce n'est pas le cas, la réimplémentation, l'ajout de nouvelles étapes dans notre flux ou la restructuration des données, pourrait aider. Après avoir testé notre flux et notre échelle, si cela fonctionne et que nous vérifions nos métriques, il est prêt pour l'étape suivante. +3. Opérationnalisation : Intégration, maintenant ajout de systèmes de surveillance et d'alertes à notre système, déploiement et intégration de l'application à notre application. + +Ensuite, nous avons le cycle global de gestion, axé sur la sécurité, la conformité et la gouvernance. + +Félicitations, vous avez maintenant votre application IA prête à être utilisée et opérationnelle. Pour une expérience pratique, jetez un œil à la [Démo Contoso Chat.](https://nitya.github.io/contoso-chat/?WT.mc_id=academic-105485-koreys) + +Maintenant, quels outils pourrions-nous utiliser ? + +## Outils du Cycle de Vie + +Pour les outils, Microsoft fournit la [Plateforme Azure AI](https://azure.microsoft.com/solutions/ai/?WT.mc_id=academic-105485-koreys) et [PromptFlow](https://microsoft.github.io/promptflow/index.html?WT.mc_id=academic-105485-koreyst) pour faciliter et rendre votre cycle facile à mettre en œuvre et prêt à l'emploi. + +La [Plateforme Azure AI](https://azure.microsoft.com/solutions/ai/?WT.mc_id=academic-105485-koreys), vous permet d'utiliser [AI Studio](https://ai.azure.com/?WT.mc_id=academic-105485-koreys). AI Studio est un portail web qui vous permet d'explorer des modèles, des exemples et des outils. Gérer vos ressources, les flux de développement UI et les options SDK/CLI pour le développement Code-First. + +![Possibilités Azure AI](../../../translated_images/04-azure-ai-platform.png?WT.a39053c2efd7670298a79282658a9f5bf903dec5c1938b1a08cf45f1284e6ac0.fr.mc_id=academic-105485-koreys) + +Azure AI, vous permet d'utiliser plusieurs ressources, pour gérer vos opérations, services, projets, besoins de recherche vectorielle et de bases de données. + +![LLMOps avec Azure AI](../../../translated_images/05-llm-azure-ai-prompt.png?WT.9189130ce4f2e7c8667fc7c83c6b89236ce5c6361150f47104c27c105f04b487.fr.mc_id=academic-105485-koreys) + +Construire, du Proof-of-Concept(POC) jusqu'aux applications à grande échelle avec PromptFlow : + +- Concevoir et construire des applications depuis VS Code, avec des outils visuels et fonctionnels +- Tester et affiner vos applications pour une IA de qualité, en toute simplicité. +- Utiliser Azure AI Studio pour intégrer et itérer avec le cloud, pousser et déployer pour une intégration rapide. + +![LLMOps avec PromptFlow](../../../translated_images/06-llm-promptflow.png?WT.e479dfedaa5f6ef7d36a11edbff74ac5579c3121ba0be0ee32eb5fc3eb17bd77.fr.mc_id=academic-105485-koreys) + +## Super ! Continuez votre apprentissage ! + +Génial, apprenez maintenant comment nous structurons une application pour utiliser les concepts avec l'[Application Contoso Chat](https://nitya.github.io/contoso-chat/?WT.mc_id=academic-105485-koreyst), pour voir comment le Cloud Advocacy ajoute ces concepts dans les démonstrations. Pour plus de contenu, consultez notre [session de présentation Ignite ! +](https://www.youtube.com/watch?v=DdOylyrTOWg) + +Maintenant, consultez la leçon 15, pour comprendre comment [la génération augmentée par récupération et les bases de données vectorielles](../15-rag-and-vector-databases/README.md?WT.mc_id=academic-105485-koreyst) impactent l'IA générative et permettent de créer des applications plus engageantes ! + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique basés sur l'intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/15-rag-and-vector-databases/README.md b/translations/fr/15-rag-and-vector-databases/README.md new file mode 100644 index 000000000..bee342c9f --- /dev/null +++ b/translations/fr/15-rag-and-vector-databases/README.md @@ -0,0 +1,270 @@ +# Génération Augmentée par Récupération (RAG) et Bases de Données Vectorielles + +[![Génération Augmentée par Récupération (RAG) et Bases de Données Vectorielles](../../../translated_images/15-lesson-banner.png?WT.ae1ec4b596c9c2b74121dd24c30143380d4789a9ef381276dbbc9fd5d7abc3d5.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson15-gh?WT.mc_id=academic-105485-koreyst) + +Dans la leçon sur les applications de recherche, nous avons brièvement appris à intégrer vos propres données dans les modèles de langage de grande taille (LLM). Dans cette leçon, nous allons approfondir les concepts de base de vos données dans votre application LLM, la mécanique du processus et les méthodes de stockage des données, y compris les embeddings et le texte. + +> **Vidéo à venir bientôt** + +## Introduction + +Dans cette leçon, nous aborderons les points suivants : + +- Une introduction à RAG, ce que c'est et pourquoi il est utilisé en intelligence artificielle (IA). + +- Comprendre ce que sont les bases de données vectorielles et en créer une pour notre application. + +- Un exemple pratique sur la façon d'intégrer RAG dans une application. + +## Objectifs d'apprentissage + +Après avoir terminé cette leçon, vous serez capable de : + +- Expliquer l'importance de RAG dans la récupération et le traitement des données. + +- Configurer une application RAG et ancrer vos données à un LLM. + +- Intégration efficace de RAG et des bases de données vectorielles dans les applications LLM. + +## Notre scénario : améliorer nos LLMs avec nos propres données + +Pour cette leçon, nous voulons ajouter nos propres notes dans la startup éducative, ce qui permet au chatbot d'obtenir plus d'informations sur les différents sujets. En utilisant les notes que nous avons, les apprenants pourront mieux étudier et comprendre les différents sujets, ce qui facilitera la révision pour leurs examens. Pour créer notre scénario, nous utiliserons : + +- `Azure OpenAI:` le LLM que nous utiliserons pour créer notre chatbot + +- `AI for beginners' lesson on Neural Networks` : ce sera les données sur lesquelles nous baserons notre LLM + +- `Azure AI Search` et `Azure Cosmos DB:` base de données vectorielle pour stocker nos données et créer un index de recherche + +Les utilisateurs pourront créer des quiz de pratique à partir de leurs notes, des fiches de révision et les résumer en aperçus concis. Pour commencer, regardons ce qu'est RAG et comment cela fonctionne : + +## Génération Augmentée par Récupération (RAG) + +Un chatbot alimenté par un LLM traite les invites des utilisateurs pour générer des réponses. Il est conçu pour être interactif et engage les utilisateurs sur une large gamme de sujets. Cependant, ses réponses sont limitées au contexte fourni et à ses données de formation de base. Par exemple, la coupure de connaissance de GPT-4 est septembre 2021, ce qui signifie qu'il n'a pas connaissance des événements survenus après cette période. De plus, les données utilisées pour entraîner les LLMs excluent les informations confidentielles telles que des notes personnelles ou le manuel produit d'une entreprise. + +### Comment fonctionnent les RAGs (Génération Augmentée par Récupération) + +![schéma montrant comment fonctionnent les RAGs](../../../translated_images/how-rag-works.png?WT.fde75879826c169b53e16dc0d0d6691172c75b314400f380d40a9f31244eba0e.fr.mc_id=academic-105485-koreyst) + +Supposons que vous souhaitiez déployer un chatbot qui crée des quiz à partir de vos notes, vous aurez besoin d'une connexion à la base de connaissances. C'est là que RAG vient à la rescousse. Les RAGs fonctionnent comme suit : + +- **Base de connaissances :** Avant la récupération, ces documents doivent être ingérés et prétraités, généralement en décomposant de grands documents en morceaux plus petits, en les transformant en embeddings de texte et en les stockant dans une base de données. + +- **Requête utilisateur :** l'utilisateur pose une question + +- **Récupération :** Lorsqu'un utilisateur pose une question, le modèle d'embedding récupère des informations pertinentes de notre base de connaissances pour fournir plus de contexte qui sera incorporé dans l'invite. + +- **Génération augmentée :** le LLM améliore sa réponse en fonction des données récupérées. Cela permet à la réponse générée de ne pas seulement se baser sur les données pré-entraînées mais aussi sur des informations pertinentes du contexte ajouté. Les données récupérées sont utilisées pour augmenter les réponses du LLM. Le LLM retourne ensuite une réponse à la question de l'utilisateur. + +![schéma montrant l'architecture des RAGs](../../../translated_images/encoder-decode.png?WT.80c3c9669a10e85d1f7e9dc7f7f0d416a71e16d2f8a6da93267e55cbfbddbf9f.fr.mc_id=academic-105485-koreyst) + +L'architecture des RAGs est mise en œuvre en utilisant des transformers composés de deux parties : un encodeur et un décodeur. Par exemple, lorsqu'un utilisateur pose une question, le texte d'entrée est 'encodé' en vecteurs capturant le sens des mots et les vecteurs sont 'décodés' dans notre index de documents et génèrent un nouveau texte basé sur la requête utilisateur. Le LLM utilise à la fois un modèle encodeur-décodeur pour générer la sortie. + +Deux approches lors de l'implémentation de RAG selon le document proposé : [Génération Augmentée par Récupération pour les tâches NLP intensives en connaissances](https://arxiv.org/pdf/2005.11401.pdf?WT.mc_id=academic-105485-koreyst) sont : + +- **_RAG-Sequence_** en utilisant des documents récupérés pour prédire la meilleure réponse possible à une requête utilisateur + +- **RAG-Token** en utilisant des documents pour générer le prochain token, puis les récupérer pour répondre à la requête de l'utilisateur + +### Pourquoi utiliseriez-vous les RAGs ?  + +- **Richesse de l'information :** garantit que les réponses textuelles sont à jour et actuelles. Il améliore donc la performance sur les tâches spécifiques au domaine en accédant à la base de connaissances interne. + +- Réduit la fabrication en utilisant des **données vérifiables** dans la base de connaissances pour fournir un contexte aux requêtes des utilisateurs. + +- Il est **rentable** car ils sont plus économiques par rapport à l'ajustement fin d'un LLM. + +## Création d'une base de connaissances + +Notre application est basée sur nos données personnelles, c'est-à-dire, la leçon sur les réseaux neuronaux du curriculum AI For Beginners. + +### Bases de données vectorielles + +Une base de données vectorielle, contrairement aux bases de données traditionnelles, est une base de données spécialisée conçue pour stocker, gérer et rechercher des vecteurs intégrés. Elle stocke des représentations numériques de documents. Décomposer les données en embeddings numériques facilite la compréhension et le traitement des données par notre système d'IA. + +Nous stockons nos embeddings dans des bases de données vectorielles car les LLMs ont une limite du nombre de tokens qu'ils acceptent en entrée. Comme vous ne pouvez pas passer l'intégralité des embeddings à un LLM, nous devrons les décomposer en morceaux et lorsqu'un utilisateur pose une question, les embeddings les plus proches de la question seront retournés avec l'invite. Le découpage réduit également les coûts sur le nombre de tokens passés à travers un LLM. + +Parmi les bases de données vectorielles populaires, on trouve Azure Cosmos DB, Clarifyai, Pinecone, Chromadb, ScaNN, Qdrant et DeepLake. Vous pouvez créer un modèle Azure Cosmos DB en utilisant Azure CLI avec la commande suivante : + +```bash +az login +az group create -n -l +az cosmosdb create -n -r +az cosmosdb list-keys -n -g +``` + +### Du texte aux embeddings + +Avant de stocker nos données, nous devrons les convertir en embeddings vectoriels avant qu'elles ne soient stockées dans la base de données. Si vous travaillez avec de grands documents ou de longs textes, vous pouvez les découper en fonction des requêtes que vous attendez. Le découpage peut se faire au niveau de la phrase ou au niveau du paragraphe. Comme le découpage dérive le sens des mots autour d'eux, vous pouvez ajouter un autre contexte à un morceau, par exemple, en ajoutant le titre du document ou en incluant du texte avant ou après le morceau. Vous pouvez découper les données comme suit : + +```python +def split_text(text, max_length, min_length): + words = text.split() + chunks = [] + current_chunk = [] + + for word in words: + current_chunk.append(word) + if len(' '.join(current_chunk)) < max_length and len(' '.join(current_chunk)) > min_length: + chunks.append(' '.join(current_chunk)) + current_chunk = [] + + # If the last chunk didn't reach the minimum length, add it anyway + if current_chunk: + chunks.append(' '.join(current_chunk)) + + return chunks +``` + +Une fois découpé, nous pouvons alors intégrer notre texte en utilisant différents modèles d'embedding. Certains modèles que vous pouvez utiliser incluent : word2vec, ada-002 par OpenAI, Azure Computer Vision et bien d'autres. Le choix du modèle à utiliser dépendra des langues que vous utilisez, du type de contenu encodé (texte/images/audio), de la taille de l'entrée qu'il peut encoder et de la longueur de la sortie d'embedding. + +Un exemple de texte intégré en utilisant le modèle `text-embedding-ada-002` d'OpenAI est : +![un embedding du mot chat](../../../translated_images/cat.png?WT.6f67a41409b2174c6f543273f4a9f8c38b227112a12831da3070e52f13e03818.fr.mc_id=academic-105485-koreyst) + +## Récupération et recherche vectorielle + +Lorsqu'un utilisateur pose une question, le récupérateur la transforme en un vecteur en utilisant l'encodeur de requête, il recherche ensuite dans notre index de recherche de documents les vecteurs pertinents dans le document qui sont liés à l'entrée. Une fois terminé, il convertit à la fois le vecteur d'entrée et les vecteurs de documents en texte et les passe à travers le LLM. + +### Récupération + +La récupération se produit lorsque le système essaie de trouver rapidement les documents de l'index qui satisfont les critères de recherche. L'objectif du récupérateur est d'obtenir des documents qui seront utilisés pour fournir un contexte et ancrer le LLM sur vos données. + +Il existe plusieurs façons de réaliser une recherche dans notre base de données, telles que : + +- **Recherche par mot-clé** - utilisée pour les recherches textuelles + +- **Recherche sémantique** - utilise le sens sémantique des mots + +- **Recherche vectorielle** - convertit les documents de texte en représentations vectorielles en utilisant des modèles d'embedding. La récupération sera effectuée en interrogeant les documents dont les représentations vectorielles sont les plus proches de la question de l'utilisateur. + +- **Hybride** - une combinaison de recherche par mot-clé et de recherche vectorielle. + +Un défi avec la récupération survient lorsqu'il n'y a pas de réponse similaire à la requête dans la base de données, le système renverra alors les meilleures informations qu'il peut obtenir, cependant, vous pouvez utiliser des tactiques telles que définir la distance maximale pour la pertinence ou utiliser une recherche hybride qui combine à la fois les mots-clés et la recherche vectorielle. Dans cette leçon, nous utiliserons la recherche hybride, une combinaison de recherche vectorielle et par mot-clé. Nous stockerons nos données dans un dataframe avec des colonnes contenant les morceaux ainsi que les embeddings. + +### Similarité vectorielle + +Le récupérateur recherchera dans la base de connaissances les embeddings qui sont proches les uns des autres, le voisin le plus proche, car ce sont des textes qui sont similaires. Dans le scénario où un utilisateur pose une requête, elle est d'abord intégrée puis associée à des embeddings similaires. La mesure courante utilisée pour trouver à quel point différents vecteurs sont similaires est la similarité cosinus, qui est basée sur l'angle entre deux vecteurs. + +Nous pouvons mesurer la similarité en utilisant d'autres alternatives que nous pouvons utiliser, telles que la distance euclidienne qui est la ligne droite entre les points d'extrémité des vecteurs et le produit scalaire qui mesure la somme des produits des éléments correspondants de deux vecteurs. + +### Index de recherche + +Lors de la récupération, nous devrons construire un index de recherche pour notre base de connaissances avant d'effectuer une recherche. Un index stockera nos embeddings et pourra rapidement récupérer les morceaux les plus similaires, même dans une grande base de données. Nous pouvons créer notre index localement en utilisant : + +```python +from sklearn.neighbors import NearestNeighbors + +embeddings = flattened_df['embeddings'].to_list() + +# Create the search index +nbrs = NearestNeighbors(n_neighbors=5, algorithm='ball_tree').fit(embeddings) + +# To query the index, you can use the kneighbors method +distances, indices = nbrs.kneighbors(embeddings) +``` + +### Reclassement + +Une fois que vous avez interrogé la base de données, vous pourriez avoir besoin de trier les résultats des plus pertinents. Un LLM de reclassement utilise l'apprentissage automatique pour améliorer la pertinence des résultats de recherche en les ordonnant des plus pertinents. En utilisant Azure AI Search, le reclassement est effectué automatiquement pour vous en utilisant un reclassement sémantique. Un exemple de fonctionnement du reclassement en utilisant les voisins les plus proches : + +```python +# Find the most similar documents +distances, indices = nbrs.kneighbors([query_vector]) + +index = [] +# Print the most similar documents +for i in range(3): + index = indices[0][i] + for index in indices[0]: + print(flattened_df['chunks'].iloc[index]) + print(flattened_df['path'].iloc[index]) + print(flattened_df['distances'].iloc[index]) + else: + print(f"Index {index} not found in DataFrame") +``` + +## Tout rassembler + +La dernière étape consiste à ajouter notre LLM dans le mélange pour pouvoir obtenir des réponses qui sont ancrées sur nos données. Nous pouvons l'implémenter comme suit : + +```python +user_input = "what is a perceptron?" + +def chatbot(user_input): + # Convert the question to a query vector + query_vector = create_embeddings(user_input) + + # Find the most similar documents + distances, indices = nbrs.kneighbors([query_vector]) + + # add documents to query to provide context + history = [] + for index in indices[0]: + history.append(flattened_df['chunks'].iloc[index]) + + # combine the history and the user input + history.append(user_input) + + # create a message object + messages=[ + {"role": "system", "content": "You are an AI assistant that helps with AI questions."}, + {"role": "user", "content": history[-1]} + ] + + # use chat completion to generate a response + response = openai.chat.completions.create( + model="gpt-4", + temperature=0.7, + max_tokens=800, + messages=messages + ) + + return response.choices[0].message + +chatbot(user_input) +``` + +## Évaluation de notre application + +### Métriques d'évaluation + +- Qualité des réponses fournies en veillant à ce qu'elles sonnent naturelles, fluides et humaines + +- Enracinement des données : évaluation si la réponse provient des documents fournis + +- Pertinence : évaluation si la réponse correspond et est liée à la question posée + +- Fluidité - si la réponse a un sens grammatical + +## Cas d'utilisation pour l'utilisation de RAG (Génération Augmentée par Récupération) et des bases de données vectorielles + +Il existe de nombreux cas d'utilisation différents où les appels de fonction peuvent améliorer votre application, tels que : + +- Questions et réponses : ancrer les données de votre entreprise à un chat qui peut être utilisé par les employés pour poser des questions. + +- Systèmes de recommandation : où vous pouvez créer un système qui correspond aux valeurs les plus similaires, par exemple, films, restaurants et bien plus encore. + +- Services de chatbot : vous pouvez stocker l'historique des conversations et personnaliser la conversation en fonction des données de l'utilisateur. + +- Recherche d'images basée sur les embeddings vectoriels, utile lors de la reconnaissance d'images et de la détection d'anomalies. + +## Résumé + +Nous avons couvert les domaines fondamentaux de RAG, de l'ajout de nos données à l'application, la requête utilisateur et la sortie. Pour simplifier la création de RAG, vous pouvez utiliser des frameworks tels que Semanti Kernel, Langchain ou Autogen. + +## Devoir + +Pour poursuivre votre apprentissage de la Génération Augmentée par Récupération (RAG), vous pouvez construire : + +- Construire un front-end pour l'application en utilisant le framework de votre choix + +- Utiliser un framework, soit LangChain ou Semantic Kernel, et recréer votre application. + +Félicitations pour avoir terminé la leçon 👏. + +## L'apprentissage ne s'arrête pas ici, continuez le voyage + +Après avoir terminé cette leçon, consultez notre [collection d'apprentissage sur l'IA générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à améliorer vos connaissances en IA générative ! + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique basés sur l'intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations cruciales, il est recommandé de faire appel à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/15-rag-and-vector-databases/data/frameworks.md b/translations/fr/15-rag-and-vector-databases/data/frameworks.md new file mode 100644 index 000000000..0a60ad4c2 --- /dev/null +++ b/translations/fr/15-rag-and-vector-databases/data/frameworks.md @@ -0,0 +1,114 @@ +# Cadres de Réseaux Neuraux + +Comme nous l'avons déjà appris, pour pouvoir entraîner des réseaux neuronaux efficacement, nous devons faire deux choses : + +* Opérer sur des tenseurs, par exemple pour multiplier, additionner et calculer certaines fonctions telles que sigmoid ou softmax +* Calculer les gradients de toutes les expressions, afin de réaliser l'optimisation par descente de gradient + +Bien que la bibliothèque `numpy` puisse faire la première partie, nous avons besoin d'un mécanisme pour calculer les gradients. Dans notre cadre que nous avons développé dans la section précédente, nous devions programmer manuellement toutes les fonctions dérivées à l'intérieur de la méthode `backward`, qui effectue la rétropropagation. Idéalement, un cadre devrait nous offrir la possibilité de calculer les gradients de *n'importe quelle expression* que nous pouvons définir. + +Un autre aspect important est de pouvoir effectuer des calculs sur GPU, ou sur toute autre unité de calcul spécialisée, comme le TPU. L'entraînement de réseaux neuronaux profonds nécessite *beaucoup* de calculs, et pouvoir paralléliser ces calculs sur les GPU est très important. + +> ✅ Le terme 'paralléliser' signifie distribuer les calculs sur plusieurs dispositifs. + +Actuellement, les deux cadres neuronaux les plus populaires sont : TensorFlow et PyTorch. Les deux fournissent une API de bas niveau pour opérer avec des tenseurs à la fois sur CPU et GPU. En plus de l'API de bas niveau, il existe également une API de plus haut niveau, appelée Keras et PyTorch Lightning respectivement. + +API de Bas Niveau | TensorFlow| PyTorch +-------------------|-------------------------------------|-------------------------------- +API de Haut Niveau | Keras| Pytorch + +**Les API de bas niveau** dans les deux cadres vous permettent de construire ce qu'on appelle des **graphes computationnels**. Ce graphe définit comment calculer la sortie (généralement la fonction de perte) avec des paramètres d'entrée donnés, et peut être envoyé pour calcul sur GPU, si disponible. Il existe des fonctions pour différencier ce graphe computationnel et calculer les gradients, qui peuvent ensuite être utilisés pour optimiser les paramètres du modèle. + +**Les API de haut niveau** considèrent essentiellement les réseaux neuronaux comme une **séquence de couches**, et facilitent la construction de la plupart des réseaux neuronaux. L'entraînement du modèle nécessite généralement de préparer les données puis d'appeler une fonction `fit` pour faire le travail. + +L'API de haut niveau vous permet de construire des réseaux neuronaux typiques très rapidement sans vous soucier de nombreux détails. En même temps, les API de bas niveau offrent beaucoup plus de contrôle sur le processus d'entraînement, et sont donc beaucoup utilisées en recherche, lorsque vous travaillez avec de nouvelles architectures de réseaux neuronaux. + +Il est également important de comprendre que vous pouvez utiliser les deux API ensemble, par exemple, vous pouvez développer votre propre architecture de couche de réseau en utilisant l'API de bas niveau, puis l'utiliser à l'intérieur du réseau plus large construit et entraîné avec l'API de haut niveau. Ou vous pouvez définir un réseau en utilisant l'API de haut niveau comme une séquence de couches, puis utiliser votre propre boucle d'entraînement de bas niveau pour effectuer l'optimisation. Les deux API utilisent les mêmes concepts de base sous-jacents, et elles sont conçues pour bien fonctionner ensemble. + +## Apprentissage + +Dans ce cours, nous proposons la plupart du contenu à la fois pour PyTorch et TensorFlow. Vous pouvez choisir votre cadre préféré et parcourir uniquement les notebooks correspondants. Si vous n'êtes pas sûr de quel cadre choisir, lisez quelques discussions sur Internet concernant **PyTorch vs. TensorFlow**. Vous pouvez également jeter un œil aux deux cadres pour mieux comprendre. + +Dans la mesure du possible, nous utiliserons les API de haut niveau pour plus de simplicité. Cependant, nous pensons qu'il est important de comprendre comment fonctionnent les réseaux neuronaux depuis la base, donc au début, nous commençons par travailler avec l'API de bas niveau et les tenseurs. Cependant, si vous souhaitez avancer rapidement et ne pas passer beaucoup de temps à apprendre ces détails, vous pouvez les ignorer et passer directement aux notebooks de l'API de haut niveau. + +## ✍️ Exercices : Cadres + +Poursuivez votre apprentissage dans les notebooks suivants : + +API de Bas Niveau | Notebook TensorFlow+Keras | PyTorch +-------------------|-------------------------------------|-------------------------------- +API de Haut Niveau | Keras | *PyTorch Lightning* + +Après avoir maîtrisé les cadres, récapitulons la notion de surapprentissage. + +# Surapprentissage + +Le surapprentissage est un concept extrêmement important en apprentissage automatique, et il est très important de bien le comprendre ! + +Considérons le problème suivant d'approximation de 5 points (représentés par `x` sur les graphiques ci-dessous) : + +!linéaire | surajusté +-------------------------|-------------------------- +**Modèle linéaire, 2 paramètres** | **Modèle non-linéaire, 7 paramètres** +Erreur d'entraînement = 5.3 | Erreur d'entraînement = 0 +Erreur de validation = 5.1 | Erreur de validation = 20 + +* À gauche, nous voyons une bonne approximation par ligne droite. Parce que le nombre de paramètres est adéquat, le modèle comprend correctement la distribution des points. +* À droite, le modèle est trop puissant. Parce que nous n'avons que 5 points et que le modèle a 7 paramètres, il peut s'ajuster de manière à passer par tous les points, rendant l'erreur d'entraînement égale à 0. Cependant, cela empêche le modèle de comprendre le bon schéma derrière les données, d'où l'erreur de validation très élevée. + +Il est très important de trouver un bon équilibre entre la richesse du modèle (nombre de paramètres) et le nombre d'échantillons d'entraînement. + +## Pourquoi le surapprentissage se produit-il ? + + * Pas assez de données d'entraînement + * Modèle trop puissant + * Trop de bruit dans les données d'entrée + +## Comment détecter le surapprentissage + +Comme vous pouvez le voir sur le graphique ci-dessus, le surapprentissage peut être détecté par une erreur d'entraînement très faible et une erreur de validation élevée. Normalement, pendant l'entraînement, nous verrons à la fois les erreurs d'entraînement et de validation commencer à diminuer, puis à un moment donné, l'erreur de validation pourrait cesser de diminuer et commencer à augmenter. Ce sera un signe de surapprentissage, et l'indicateur que nous devrions probablement arrêter l'entraînement à ce moment-là (ou au moins faire une capture du modèle). + +## Comment prévenir le surapprentissage + +Si vous constatez que le surapprentissage se produit, vous pouvez faire l'une des choses suivantes : + + * Augmenter la quantité de données d'entraînement + * Réduire la complexité du modèle + * Utiliser une technique de régularisation, telle que Dropout, que nous examinerons plus tard. + +## Surapprentissage et Compromis Biais-Variance + +Le surapprentissage est en fait un cas d'un problème plus général en statistiques appelé Compromis Biais-Variance. Si nous considérons les sources possibles d'erreur dans notre modèle, nous pouvons voir deux types d'erreurs : + +* **Erreurs de biais** causées par notre algorithme qui n'est pas capable de capturer correctement la relation entre les données d'entraînement. Cela peut résulter du fait que notre modèle n'est pas assez puissant (**sous-ajustement**). +* **Erreurs de variance**, qui sont causées par le modèle qui approxime le bruit dans les données d'entrée au lieu d'une relation significative (**surajustement**). + +Pendant l'entraînement, l'erreur de biais diminue (car notre modèle apprend à approximer les données), et l'erreur de variance augmente. Il est important d'arrêter l'entraînement - soit manuellement (lorsque nous détectons le surapprentissage) soit automatiquement (en introduisant une régularisation) - pour prévenir le surapprentissage. + +## Conclusion + +Dans cette leçon, vous avez appris les différences entre les différentes API pour les deux cadres d'IA les plus populaires, TensorFlow et PyTorch. De plus, vous avez appris un sujet très important, le surapprentissage. + +## 🚀 Défi + +Dans les notebooks qui accompagnent, vous trouverez des 'tâches' en bas ; parcourez les notebooks et complétez les tâches. + +## Révision & Auto-Étude + +Faites des recherches sur les sujets suivants : + +- TensorFlow +- PyTorch +- Surapprentissage + +Posez-vous les questions suivantes : + +- Quelle est la différence entre TensorFlow et PyTorch ? +- Quelle est la différence entre surapprentissage et sous-ajustement ? + +## Devoir + +Dans ce laboratoire, il vous est demandé de résoudre deux problèmes de classification en utilisant des réseaux entièrement connectés à une ou plusieurs couches en utilisant PyTorch ou TensorFlow. + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatisés par intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations cruciales, il est recommandé de faire appel à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/15-rag-and-vector-databases/data/own_framework.md b/translations/fr/15-rag-and-vector-databases/data/own_framework.md new file mode 100644 index 000000000..2364cf2de --- /dev/null +++ b/translations/fr/15-rag-and-vector-databases/data/own_framework.md @@ -0,0 +1,83 @@ +# Introduction aux Réseaux de Neurones. Perceptron Multi-Couche + +Dans la section précédente, vous avez découvert le modèle de réseau de neurones le plus simple : le perceptron à une couche, un modèle de classification linéaire à deux classes. + +Dans cette section, nous allons étendre ce modèle pour créer un cadre plus flexible, nous permettant de : + +* effectuer de la **classification multi-classes** en plus de la classification à deux classes +* résoudre des **problèmes de régression** en plus de la classification +* séparer des classes qui ne sont pas linéairement séparables + +Nous allons également développer notre propre cadre modulaire en Python qui nous permettra de construire différentes architectures de réseaux de neurones. + +## Formalisation de l'Apprentissage Automatique + +Commençons par formaliser le problème de l'apprentissage automatique. Supposons que nous avons un jeu de données d'entraînement **X** avec des étiquettes **Y**, et que nous devons construire un modèle *f* qui fera des prédictions les plus précises possible. La qualité des prédictions est mesurée par une **fonction de perte** ℒ. Les fonctions de perte suivantes sont souvent utilisées : + +* Pour un problème de régression, lorsque nous devons prédire un nombre, nous pouvons utiliser l'**erreur absolue** ∑i|f(x(i))-y(i)|, ou l'**erreur quadratique** ∑i(f(x(i))-y(i))2 +* Pour la classification, nous utilisons la **perte 0-1** (qui est essentiellement la même que l'**exactitude** du modèle), ou la **perte logistique**. + +Pour le perceptron à une couche, la fonction *f* était définie comme une fonction linéaire *f(x)=wx+b* (ici *w* est la matrice de poids, *x* est le vecteur des caractéristiques d'entrée, et *b* est le vecteur de biais). Pour différentes architectures de réseaux de neurones, cette fonction peut prendre une forme plus complexe. + +> Dans le cas de la classification, il est souvent souhaitable d'obtenir des probabilités des classes correspondantes en sortie du réseau. Pour convertir des nombres arbitraires en probabilités (par exemple, pour normaliser la sortie), nous utilisons souvent la fonction **softmax** σ, et la fonction *f* devient *f(x)=σ(wx+b)* + +Dans la définition de *f* ci-dessus, *w* et *b* sont appelés **paramètres** θ=⟨*w,b*⟩. Étant donné le jeu de données ⟨**X**,**Y**⟩, nous pouvons calculer une erreur globale sur l'ensemble du jeu de données en fonction des paramètres θ. + +> ✅ **L'objectif de l'entraînement d'un réseau de neurones est de minimiser l'erreur en faisant varier les paramètres θ** + +## Optimisation par Descente de Gradient + +Il existe une méthode bien connue d'optimisation de fonction appelée **descente de gradient**. L'idée est que nous pouvons calculer une dérivée (dans le cas multidimensionnel appelée **gradient**) de la fonction de perte par rapport aux paramètres, et faire varier les paramètres de manière à ce que l'erreur diminue. Cela peut être formalisé comme suit : + +* Initialiser les paramètres avec des valeurs aléatoires w(0), b(0) +* Répéter l'étape suivante plusieurs fois : + - w(i+1) = w(i)-η∂ℒ/∂w + - b(i+1) = b(i)-η∂ℒ/∂b + +Pendant l'entraînement, les étapes d'optimisation sont censées être calculées en tenant compte de l'ensemble du jeu de données (rappelez-vous que la perte est calculée comme une somme sur tous les échantillons d'entraînement). Cependant, dans la vie réelle, nous prenons de petites portions du jeu de données appelées **mini-lots**, et calculons les gradients sur un sous-ensemble de données. Comme le sous-ensemble est pris aléatoirement à chaque fois, cette méthode est appelée **descente de gradient stochastique** (SGD). + +## Perceptrons Multi-Couches et Rétropropagation + +Un réseau à une couche, comme nous l'avons vu ci-dessus, est capable de classer des classes linéairement séparables. Pour construire un modèle plus riche, nous pouvons combiner plusieurs couches du réseau. Mathématiquement, cela signifierait que la fonction *f* aurait une forme plus complexe et serait calculée en plusieurs étapes : +* z1=w1x+b1 +* z2=w2α(z1)+b2 +* f = σ(z2) + +Ici, α est une **fonction d'activation non-linéaire**, σ est une fonction softmax, et les paramètres θ=<*w1,b1,w2,b2*>. + +L'algorithme de descente de gradient resterait le même, mais il serait plus difficile de calculer les gradients. Étant donné la règle de différenciation en chaîne, nous pouvons calculer les dérivées comme suit : + +* ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2) +* ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1) + +> ✅ La règle de différenciation en chaîne est utilisée pour calculer les dérivées de la fonction de perte par rapport aux paramètres. + +Notez que la partie la plus à gauche de toutes ces expressions est la même, et ainsi nous pouvons calculer efficacement les dérivées en commençant par la fonction de perte et en allant "à l'envers" à travers le graphe computationnel. Ainsi, la méthode d'entraînement d'un perceptron multi-couches est appelée **rétropropagation**, ou 'backprop'. + +> TODO: citation d'image + +> ✅ Nous couvrirons la rétropropagation en beaucoup plus de détails dans notre exemple de notebook. + +## Conclusion + +Dans cette leçon, nous avons construit notre propre bibliothèque de réseaux de neurones, et nous l'avons utilisée pour une tâche de classification simple en deux dimensions. + +## 🚀 Défi + +Dans le notebook associé, vous allez implémenter votre propre cadre pour construire et entraîner des perceptrons multi-couches. Vous pourrez voir en détail comment fonctionnent les réseaux de neurones modernes. + +Passez au notebook OwnFramework et travaillez-le. + +## Révision & Auto-étude + +La rétropropagation est un algorithme courant utilisé en IA et ML, qui mérite d'être étudié en détail. + +## Devoir + +Dans ce laboratoire, il vous est demandé d'utiliser le cadre que vous avez construit dans cette leçon pour résoudre la classification des chiffres manuscrits MNIST. + +* Instructions +* Notebook + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction basés sur l'IA. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/15-rag-and-vector-databases/data/perceptron.md b/translations/fr/15-rag-and-vector-databases/data/perceptron.md new file mode 100644 index 000000000..300a3ced4 --- /dev/null +++ b/translations/fr/15-rag-and-vector-databases/data/perceptron.md @@ -0,0 +1,88 @@ +# Introduction aux réseaux neuronaux : Perceptron + +L'une des premières tentatives pour implémenter quelque chose de similaire à un réseau neuronal moderne a été réalisée par Frank Rosenblatt du Cornell Aeronautical Laboratory en 1957. Il s'agissait d'une implémentation matérielle appelée "Mark-1", conçue pour reconnaître des figures géométriques primitives, telles que des triangles, des carrés et des cercles. + +| | | +|--------------|-----------| +|Frank Rosenblatt | Le Perceptron Mark 1| + +> Images de Wikipedia + +Une image d'entrée était représentée par un réseau de 20x20 photorécepteurs, de sorte que le réseau neuronal avait 400 entrées et une sortie binaire. Un réseau simple contenait un neurone, également appelé une **unité logique seuil**. Les poids du réseau neuronal agissaient comme des potentiomètres nécessitant un ajustement manuel pendant la phase d'apprentissage. + +> ✅ Un potentiomètre est un dispositif qui permet à l'utilisateur de régler la résistance d'un circuit. + +> Le New York Times a écrit à propos du perceptron à cette époque : *l'embryon d'un ordinateur électronique que [la Marine] espère capable de marcher, parler, voir, écrire, se reproduire et être conscient de son existence.* + +## Modèle de Perceptron + +Supposons que nous ayons N caractéristiques dans notre modèle, auquel cas le vecteur d'entrée serait un vecteur de taille N. Un perceptron est un modèle de **classification binaire**, c'est-à-dire qu'il peut distinguer entre deux classes de données d'entrée. Nous supposerons que pour chaque vecteur d'entrée x, la sortie de notre perceptron serait soit +1, soit -1, selon la classe. La sortie sera calculée en utilisant la formule : + +y(x) = f(wTx) + +où f est une fonction d'activation de seuil + +## Entraînement du Perceptron + +Pour entraîner un perceptron, nous devons trouver un vecteur de poids w qui classe correctement la plupart des valeurs, c'est-à-dire qui aboutit à l'erreur la plus faible. Cette erreur est définie par le **critère de perceptron** de la manière suivante : + +E(w) = -∑wTxiti + +où : + +* la somme est effectuée sur les points de données d'entraînement i qui aboutissent à une mauvaise classification +* xi est la donnée d'entrée, et ti est soit -1 soit +1 pour les exemples négatifs et positifs respectivement. + +Ce critère est considéré comme une fonction des poids w, et nous devons le minimiser. Souvent, une méthode appelée **descente de gradient** est utilisée, dans laquelle nous commençons avec des poids initiaux w(0), puis à chaque étape, nous mettons à jour les poids selon la formule : + +w(t+1) = w(t) - η∇E(w) + +Ici, η est ce qu'on appelle le **taux d'apprentissage**, et ∇E(w) désigne le **gradient** de E. Après avoir calculé le gradient, nous obtenons + +w(t+1) = w(t) + ∑ηxiti + +L'algorithme en Python ressemble à ceci : + +```python +def train(positive_examples, negative_examples, num_iterations = 100, eta = 1): + + weights = [0,0,0] # Initialize weights (almost randomly :) + + for i in range(num_iterations): + pos = random.choice(positive_examples) + neg = random.choice(negative_examples) + + z = np.dot(pos, weights) # compute perceptron output + if z < 0: # positive example classified as negative + weights = weights + eta*weights.shape + + z = np.dot(neg, weights) + if z >= 0: # negative example classified as positive + weights = weights - eta*weights.shape + + return weights +``` + +## Conclusion + +Dans cette leçon, vous avez appris ce qu'est un perceptron, qui est un modèle de classification binaire, et comment l'entraîner en utilisant un vecteur de poids. + +## 🚀 Défi + +Si vous souhaitez essayer de construire votre propre perceptron, essayez ce laboratoire sur Microsoft Learn qui utilise le concepteur Azure ML. + +## Révision & Auto-apprentissage + +Pour voir comment nous pouvons utiliser le perceptron pour résoudre un problème simple ainsi que des problèmes réels, et pour continuer à apprendre - rendez-vous sur le notebook Perceptron. + +Voici également un article intéressant sur les perceptrons. + +## Devoir + +Dans cette leçon, nous avons implémenté un perceptron pour une tâche de classification binaire, et nous l'avons utilisé pour classer entre deux chiffres manuscrits. Dans ce laboratoire, il vous est demandé de résoudre entièrement le problème de classification des chiffres, c'est-à-dire de déterminer quel chiffre est le plus susceptible de correspondre à une image donnée. + +* Instructions +* Notebook + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/16-open-source-models/README.md b/translations/fr/16-open-source-models/README.md new file mode 100644 index 000000000..38d14cf26 --- /dev/null +++ b/translations/fr/16-open-source-models/README.md @@ -0,0 +1,82 @@ +[![Modèles Open Source](../../../translated_images/16-lesson-banner.png?WT.a9a13a59f0350adb5846e88fb3aba98cd4c6cb3297e78cb7100938f45b7dac47.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson16-gh?WT.mc_id=academic-105485-koreyst) + +## Introduction + +Le monde des LLM open source est passionnant et en constante évolution. Cette leçon vise à fournir un aperçu approfondi des modèles open source. Si vous cherchez des informations sur la comparaison entre les modèles propriétaires et les modèles open source, rendez-vous à la leçon ["Exploration et comparaison des différents LLMs"](../02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst). Cette leçon abordera également le sujet du réglage fin, mais une explication plus détaillée peut être trouvée dans la leçon ["Réglage fin des LLMs"](../18-fine-tuning/README.md?WT.mc_id=academic-105485-koreyst). + +## Objectifs d'apprentissage + +- Comprendre les modèles open source +- Comprendre les avantages de travailler avec des modèles open source +- Explorer les modèles open disponibles sur Hugging Face et Azure AI Studio + +## Qu'est-ce que les Modèles Open Source ? + +Les logiciels open source ont joué un rôle crucial dans la croissance de la technologie dans divers domaines. L'Open Source Initiative (OSI) a défini [10 critères pour les logiciels](https://web.archive.org/web/20241126001143/https://opensource.org/osd?WT.mc_id=academic-105485-koreyst) pour être classifiés comme open source. Le code source doit être partagé ouvertement sous une licence approuvée par l'OSI. + +Bien que le développement des LLMs ait des éléments similaires au développement de logiciels, le processus n'est pas exactement le même. Cela a suscité de nombreuses discussions dans la communauté sur la définition de l'open source dans le contexte des LLMs. Pour qu'un modèle soit aligné avec la définition traditionnelle de l'open source, les informations suivantes doivent être publiquement disponibles : + +- Ensembles de données utilisés pour entraîner le modèle. +- Poids complets du modèle dans le cadre de l'entraînement. +- Le code d'évaluation. +- Le code de réglage fin. +- Poids complets du modèle et métriques d'entraînement. + +Il n'existe actuellement que quelques modèles qui répondent à ces critères. Le [modèle OLMo créé par l'Allen Institute for Artificial Intelligence (AllenAI)](https://huggingface.co/allenai/OLMo-7B?WT.mc_id=academic-105485-koreyst) est l'un de ceux qui correspondent à cette catégorie. + +Pour cette leçon, nous nous référerons aux modèles comme "modèles open" à l'avenir, car ils peuvent ne pas correspondre aux critères ci-dessus au moment de la rédaction. + +## Avantages des Modèles Open + +**Hautement personnalisable** - Étant donné que les modèles open sont publiés avec des informations d'entraînement détaillées, les chercheurs et développeurs peuvent modifier les internes du modèle. Cela permet de créer des modèles hautement spécialisés qui sont ajustés pour une tâche ou un domaine d'étude spécifique. Quelques exemples de cela incluent la génération de code, les opérations mathématiques et la biologie. + +**Coût** - Le coût par token pour utiliser et déployer ces modèles est inférieur à celui des modèles propriétaires. Lors de la création d'applications d'IA générative, il est important de comparer la performance au prix lors de l'utilisation de ces modèles pour votre cas d'utilisation. + +![Coût du Modèle](../../../translated_images/model-price.png?WT.473bad4fe5bdb7014798275047130c0949da1e4a3d6f379037bedf68ef1d5e42.fr.mc_id=academic-105485-koreyst) +Source : Artificial Analysis + +**Flexibilité** - Travailler avec des modèles open vous permet d'être flexible en termes d'utilisation de différents modèles ou de leur combinaison. Un exemple de cela est les [Assistants HuggingChat](https://huggingface.co/chat?WT.mc_id=academic-105485-koreyst) où un utilisateur peut sélectionner le modèle utilisé directement dans l'interface utilisateur : + +![Choisir le Modèle](../../../translated_images/choose-model.png?WT.50da8a7caba083003bcf9f71017d17715f032acff67359c11c9886597ca3efdc.fr.mc_id=academic-105485-koreyst) + +## Explorer Différents Modèles Open + +### Llama 2 + +[LLama2](https://huggingface.co/meta-llama?WT.mc_id=academic-105485-koreyst), développé par Meta, est un modèle open optimisé pour les applications basées sur le chat. Cela est dû à sa méthode de réglage fin, qui inclut une grande quantité de dialogues et de retours humains. Avec cette méthode, le modèle produit plus de résultats alignés sur les attentes humaines, ce qui offre une meilleure expérience utilisateur. + +Quelques exemples de versions ajustées de Llama incluent [Japanese Llama](https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b?WT.mc_id=academic-105485-koreyst), qui se spécialise dans le japonais, et [Llama Pro](https://huggingface.co/TencentARC/LLaMA-Pro-8B?WT.mc_id=academic-105485-koreyst), qui est une version améliorée du modèle de base. + +### Mistral + +[Mistral](https://huggingface.co/mistralai?WT.mc_id=academic-105485-koreyst) est un modèle open avec un fort accent sur la haute performance et l'efficacité. Il utilise l'approche Mixture-of-Experts qui combine un groupe de modèles experts spécialisés en un seul système où, selon l'entrée, certains modèles sont sélectionnés pour être utilisés. Cela rend le calcul plus efficace car les modèles ne traitent que les entrées pour lesquelles ils sont spécialisés. + +Quelques exemples de versions ajustées de Mistral incluent [BioMistral](https://huggingface.co/BioMistral/BioMistral-7B?text=Mon+nom+est+Thomas+et+mon+principal?WT.mc_id=academic-105485-koreyst), qui se concentre sur le domaine médical, et [OpenMath Mistral](https://huggingface.co/nvidia/OpenMath-Mistral-7B-v0.1-hf?WT.mc_id=academic-105485-koreyst), qui effectue des calculs mathématiques. + +### Falcon + +[Falcon](https://huggingface.co/tiiuae?WT.mc_id=academic-105485-koreyst) est un LLM créé par le Technology Innovation Institute (**TII**). Le Falcon-40B a été entraîné sur 40 milliards de paramètres, ce qui a montré qu'il performe mieux que GPT-3 avec un budget de calcul moindre. Cela est dû à son utilisation de l'algorithme FlashAttention et de l'attention multi-query qui lui permet de réduire les exigences en mémoire lors de l'inférence. Avec ce temps d'inférence réduit, le Falcon-40B est adapté pour les applications de chat. + +Quelques exemples de versions ajustées de Falcon sont [OpenAssistant](https://huggingface.co/OpenAssistant/falcon-40b-sft-top1-560?WT.mc_id=academic-105485-koreyst), un assistant construit sur des modèles open, et [GPT4ALL](https://huggingface.co/nomic-ai/gpt4all-falcon?WT.mc_id=academic-105485-koreyst), qui offre des performances supérieures au modèle de base. + +## Comment Choisir + +Il n'y a pas de réponse unique pour choisir un modèle open. Un bon point de départ est d'utiliser la fonction de filtre par tâche de l'Azure AI Studio. Cela vous aidera à comprendre quels types de tâches le modèle a été entraîné à réaliser. Hugging Face maintient également un classement des LLM qui vous montre les modèles les plus performants selon certains critères. + +Lors de la comparaison des LLMs entre les différents types, [Artificial Analysis](https://artificialanalysis.ai/?WT.mc_id=academic-105485-koreyst) est une autre excellente ressource : + +![Qualité du Modèle](../../../translated_images/model-quality.png?WT.bffdb0b01a3f3205153df83585941f90a153017f607dbcfad9cde5369764f203.fr.mc_id=academic-105485-koreyst) +Source : Artificial Analysis + +Si vous travaillez sur un cas d'utilisation spécifique, rechercher des versions ajustées qui se concentrent sur le même domaine peut être efficace. Expérimenter avec plusieurs modèles open pour voir comment ils se comportent selon vos attentes et celles de vos utilisateurs est une autre bonne pratique. + +## Prochaines Étapes + +La meilleure partie des modèles open est que vous pouvez commencer à travailler avec eux assez rapidement. Consultez le [Catalogue de Modèles Azure AI Studio](https://ai.azure.com?WT.mc_id=academic-105485-koreyst), qui propose une collection spécifique de Hugging Face avec les modèles que nous avons discutés ici. + +## L'apprentissage ne s'arrête pas ici, continuez le Voyage + +Après avoir terminé cette leçon, consultez notre [collection d'apprentissage de l'IA générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à approfondir vos connaissances en IA générative ! + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique basés sur l'intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/17-ai-agents/README.md b/translations/fr/17-ai-agents/README.md new file mode 100644 index 000000000..dc9c93152 --- /dev/null +++ b/translations/fr/17-ai-agents/README.md @@ -0,0 +1,164 @@ +[![Modèles Open Source](../../../translated_images/17-lesson-banner.png?WT.d223296926e27d95f6b5a748e3f77ab9a1b669d4f9aebe608f926cbb44ea08a8.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson17-gh?WT.mc_id=academic-105485-koreyst) + +## Introduction + +Les Agents IA représentent une avancée passionnante dans l'IA générative, permettant aux Grands Modèles de Langage (LLMs) d'évoluer d'assistants à agents capables de prendre des actions. Les cadres d'agents IA permettent aux développeurs de créer des applications qui donnent aux LLMs accès à des outils et à la gestion des états. Ces cadres améliorent également la visibilité, permettant aux utilisateurs et aux développeurs de suivre les actions planifiées par les LLMs, améliorant ainsi la gestion de l'expérience. + +La leçon couvrira les domaines suivants : + +- Comprendre ce qu'est un Agent IA - Qu'est-ce qu'un Agent IA exactement ? +- Explorer quatre différents cadres d'Agents IA - Qu'est-ce qui les rend uniques ? +- Appliquer ces Agents IA à différents cas d'utilisation - Quand devrions-nous utiliser les Agents IA ? + +## Objectifs d'apprentissage + +Après avoir suivi cette leçon, vous serez capable de : + +- Expliquer ce que sont les Agents IA et comment ils peuvent être utilisés. +- Comprendre les différences entre certains des cadres d'Agents IA populaires, et en quoi ils diffèrent. +- Comprendre comment fonctionnent les Agents IA afin de construire des applications avec eux. + +## Qu'est-ce que les Agents IA ? + +Les Agents IA sont un domaine très passionnant dans le monde de l'IA générative. Avec cet enthousiasme vient parfois une confusion des termes et de leur application. Pour simplifier les choses et inclure la plupart des outils qui se réfèrent aux Agents IA, nous allons utiliser cette définition : + +Les Agents IA permettent aux Grands Modèles de Langage (LLMs) d'effectuer des tâches en leur donnant accès à un **état** et à des **outils**. + +![Modèle d'Agent](../../../translated_images/what-agent.png?WT.96b2eb171bd613cd0652fb5a2c1f488c80fde8d3405db76d780603041a415cb3.fr.mc_id=academic-105485-koreyst) + +Définissons ces termes : + +**Grands Modèles de Langage** - Ce sont les modèles mentionnés tout au long de ce cours, tels que GPT-3.5, GPT-4, Llama-2, etc. + +**État** - Cela fait référence au contexte dans lequel le LLM travaille. Le LLM utilise le contexte de ses actions passées et le contexte actuel, guidant sa prise de décision pour les actions suivantes. Les cadres d'Agents IA permettent aux développeurs de maintenir ce contexte plus facilement. + +**Outils** - Pour accomplir la tâche que l'utilisateur a demandée et que le LLM a planifiée, le LLM a besoin d'accéder à des outils. Quelques exemples d'outils peuvent être une base de données, une API, une application externe ou même un autre LLM ! + +Ces définitions vous donneront, espérons-le, une bonne base pour avancer alors que nous examinons comment elles sont mises en œuvre. Explorons quelques cadres d'Agents IA différents : + +## Agents LangChain + +[Agents LangChain](https://python.langchain.com/docs/how_to/#agents?WT.mc_id=academic-105485-koreyst) est une implémentation des définitions que nous avons fournies ci-dessus. + +Pour gérer l'**état**, il utilise une fonction intégrée appelée `AgentExecutor`. Cela accepte les `agent` définis et les `tools` qui lui sont disponibles. + +Le `Agent Executor` stocke également l'historique des discussions pour fournir le contexte de la conversation. + +![Agents LangChain](../../../translated_images/langchain-agents.png?WT.311575a86262a6e33490477b281688373d96e3392dbfe3094965470531a9f111.fr.mc_id=academic-105485-koreyst) + +LangChain propose un [catalogue d'outils](https://integrations.langchain.com/tools?WT.mc_id=academic-105485-koreyst) qui peuvent être importés dans votre application dans laquelle le LLM peut avoir accès. Ceux-ci sont créés par la communauté et par l'équipe LangChain. + +Vous pouvez ensuite définir ces outils et les transmettre au `Agent Executor`. + +La visibilité est un autre aspect important lorsqu'on parle des Agents IA. Il est important pour les développeurs d'applications de comprendre quel outil le LLM utilise et pourquoi. Pour cela, l'équipe de LangChain a développé LangSmith. + +## AutoGen + +Le prochain cadre d'Agent IA que nous allons discuter est [AutoGen](https://microsoft.github.io/autogen/?WT.mc_id=academic-105485-koreyst). L'objectif principal d'AutoGen est les conversations. Les agents sont à la fois **conversables** et **personnalisables**. + +**Conversable -** Les LLMs peuvent commencer et poursuivre une conversation avec un autre LLM afin de compléter une tâche. Cela se fait en créant `AssistantAgents` et en leur donnant un message système spécifique. + +```python + +autogen.AssistantAgent( name="Coder", llm_config=llm_config, ) pm = autogen.AssistantAgent( name="Product_manager", system_message="Creative in software product ideas.", llm_config=llm_config, ) + +``` + +**Personnalisable** - Les agents peuvent être définis non seulement comme des LLMs mais aussi comme un utilisateur ou un outil. En tant que développeur, vous pouvez définir un `UserProxyAgent` qui est responsable de l'interaction avec l'utilisateur pour obtenir un retour d'information lors de l'accomplissement d'une tâche. Ce retour peut soit continuer l'exécution de la tâche, soit l'arrêter. + +```python +user_proxy = UserProxyAgent(name="user_proxy") +``` + +### État et Outils + +Pour changer et gérer l'état, un agent assistant génère du code Python pour accomplir la tâche. + +Voici un exemple du processus : + +![AutoGen](../../../translated_images/autogen.png?WT.45c9474fbd6109577f4363559f022554e796000ea2d677b80021b00e6ca0d869.fr.mc_id=academic-105485-koreyst) + +#### LLM Défini avec un Message Système + +```python +system_message="For weather related tasks, only use the functions you have been provided with. Reply TERMINATE when the task is done." +``` + +Ce message système dirige ce LLM spécifique vers les fonctions pertinentes pour sa tâche. Rappelez-vous, avec AutoGen, vous pouvez avoir plusieurs AssistantAgents définis avec différents messages système. + +#### La Discussion est Initiée par l'Utilisateur + +```python +user_proxy.initiate_chat( chatbot, message="I am planning a trip to NYC next week, can you help me pick out what to wear? ", ) + +``` + +Ce message du user_proxy (Humain) est ce qui va lancer le processus de l'Agent pour explorer les fonctions possibles qu'il devrait exécuter. + +#### La Fonction est Exécutée + +```bash +chatbot (to user_proxy): + +***** Suggested tool Call: get_weather ***** Arguments: {"location":"New York City, NY","time_periond:"7","temperature_unit":"Celsius"} ******************************************************** -------------------------------------------------------------------------------- + +>>>>>>>> EXECUTING FUNCTION get_weather... user_proxy (to chatbot): ***** Response from calling function "get_weather" ***** 112.22727272727272 EUR **************************************************************** + +``` + +Une fois la discussion initiale traitée, l'Agent enverra l'outil suggéré à appeler. Dans ce cas, il s'agit d'une fonction appelée `get_weather`. Depending on your configuration, this function can be automatically executed and read by the Agent or can be executed based on user input. + +You can find a list of [AutoGen code samples](https://microsoft.github.io/autogen/docs/Examples/?WT.mc_id=academic-105485-koreyst) to further explore how to get started building. + +## Taskweaver + +The next agent framework we will explore is [Taskweaver](https://microsoft.github.io/TaskWeaver/?WT.mc_id=academic-105485-koreyst). It is known as a "code-first" agent because instead of working strictly with `strings` , it can work with DataFrames in Python. This becomes extremely useful for data analysis and generation tasks. This can be things like creating graphs and charts or generating random numbers. + +### State and Tools + +To manage the state of the conversation, TaskWeaver uses the concept of a `Planner`. The `Planner` is a LLM that takes the request from the users and maps out the tasks that need to be completed to fulfill this request. + +To complete the tasks the `Planner` is exposed to the collection of tools called `Plugins`. Cela peut être des classes Python ou un interpréteur de code général. Ces plugins sont stockés sous forme d'embeddings pour que le LLM puisse mieux rechercher le plugin correct. + +![Taskweaver](../../../translated_images/taskweaver.png?WT.c5d336793941a5af0d2489ad6d88a03f09557bd5ca68a954f1ddaa3d9f1ecc3b.fr.mc_id=academic-105485-koreyst) + +Voici un exemple de plugin pour gérer la détection d'anomalies : + +```python +class AnomalyDetectionPlugin(Plugin): def __call__(self, df: pd.DataFrame, time_col_name: str, value_col_name: str): +``` + +Le code est vérifié avant l'exécution. Une autre fonctionnalité pour gérer le contexte dans Taskweaver est `experience`. Experience allows for the context of a conversation to be stored over to the long term in a YAML file. This can be configured so that the LLM improves over time on certain tasks given that it is exposed to prior conversations. + +## JARVIS + +The last agent framework we will explore is [JARVIS](https://github.com/microsoft/JARVIS?tab=readme-ov-file?WT.mc_id=academic-105485-koreyst). What makes JARVIS unique is that it uses an LLM to manage the `state` de la conversation et les `tools` sont d'autres modèles d'IA. Chacun des modèles d'IA est un modèle spécialisé qui effectue certaines tâches telles que la détection d'objets, la transcription ou la légende d'images. + +![JARVIS](../../../translated_images/jarvis.png?WT.f12468c52a0c4848aeed51606a0e53a36eb38c65cc6c821597ea4dcaad03d1a3.fr.mc_id=academic-105485-koreyst) + +Le LLM, étant un modèle à usage général, reçoit la demande de l'utilisateur et identifie la tâche spécifique et tous les arguments/données nécessaires pour accomplir la tâche. + +```python +[{"task": "object-detection", "id": 0, "dep": [-1], "args": {"image": "e1.jpg" }}] +``` + +Le LLM formate ensuite la demande de manière à ce que le modèle d'IA spécialisé puisse l'interpréter, tel que JSON. Une fois que le modèle d'IA a retourné sa prédiction basée sur la tâche, le LLM reçoit la réponse. + +Si plusieurs modèles sont nécessaires pour accomplir la tâche, il interprétera également la réponse de ces modèles avant de les rassembler pour générer la réponse à l'utilisateur. + +L'exemple ci-dessous montre comment cela fonctionnerait lorsqu'un utilisateur demande une description et un décompte des objets dans une image : + +## Devoir + +Pour continuer votre apprentissage des Agents IA, vous pouvez construire avec AutoGen : + +- Une application qui simule une réunion d'affaires avec différents départements d'une startup éducative. +- Créez des messages système qui guident les LLMs dans la compréhension des différentes personnalités et priorités, et permettent à l'utilisateur de présenter une nouvelle idée de produit. +- Le LLM devrait ensuite générer des questions de suivi de chaque département pour affiner et améliorer la présentation et l'idée de produit. + +## L'apprentissage ne s'arrête pas ici, continuez le voyage + +Après avoir terminé cette leçon, consultez notre [collection d'apprentissage de l'IA générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à améliorer vos connaissances en IA générative ! + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/18-fine-tuning/README.md b/translations/fr/18-fine-tuning/README.md new file mode 100644 index 000000000..c890e3dbd --- /dev/null +++ b/translations/fr/18-fine-tuning/README.md @@ -0,0 +1,100 @@ +[![Open Source Models](../../../translated_images/18-lesson-banner.png?WT.73626ba24f59a39704c5137a18c9de8b23179ea0e1ace42c97e02f0310adcee0.fr.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson18-gh?WT.mc_id=academic-105485-koreyst) + +# Affiner Votre Modèle de Langage + +Utiliser des modèles de langage de grande taille pour construire des applications d'IA générative apporte de nouveaux défis. Un problème clé est d'assurer la qualité des réponses (précision et pertinence) dans le contenu généré par le modèle pour une requête utilisateur donnée. Dans les leçons précédentes, nous avons discuté de techniques comme l'ingénierie des invites et la génération augmentée par récupération qui tentent de résoudre le problème en _modifiant l'entrée de l'invite_ au modèle existant. + +Dans la leçon d'aujourd'hui, nous discutons d'une troisième technique, **l'affinage**, qui tente de relever le défi en _réentraînant le modèle lui-même_ avec des données supplémentaires. Plongeons dans les détails. + +## Objectifs d'apprentissage + +Cette leçon introduit le concept d'affinage pour les modèles de langage pré-entraînés, explore les avantages et les défis de cette approche, et fournit des conseils sur quand et comment utiliser l'affinage pour améliorer la performance de vos modèles d'IA générative. + +À la fin de cette leçon, vous devriez être capable de répondre aux questions suivantes : + +- Qu'est-ce que l'affinage pour les modèles de langage ? +- Quand, et pourquoi, l'affinage est-il utile ? +- Comment puis-je affiner un modèle pré-entraîné ? +- Quelles sont les limitations de l'affinage ? + +Prêt ? Commençons. + +## Guide Illustré + +Vous voulez avoir une vue d'ensemble de ce que nous allons couvrir avant de plonger ? Consultez ce guide illustré qui décrit le parcours d'apprentissage de cette leçon - depuis l'apprentissage des concepts de base et la motivation pour l'affinage, jusqu'à la compréhension du processus et des meilleures pratiques pour exécuter la tâche d'affinage. C'est un sujet fascinant à explorer, alors n'oubliez pas de consulter la page [Ressources](./RESOURCES.md?WT.mc_id=academic-105485-koreyst) pour des liens supplémentaires pour soutenir votre parcours d'apprentissage autonome ! + +![Guide Illustré de l'Affinage des Modèles de Langage](../../../translated_images/18-fine-tuning-sketchnote.png?WT.6cca0798e805b67b1f22beaba7478f40066f3a2879380a0e27dbc70ac1dc7832.fr.mc_id=academic-105485-koreyst) + +## Qu'est-ce que l'affinage pour les modèles de langage ? + +Par définition, les modèles de langage de grande taille sont _pré-entraînés_ sur de grandes quantités de texte provenant de sources diverses, y compris Internet. Comme nous l'avons appris dans les leçons précédentes, nous avons besoin de techniques comme _l'ingénierie des invites_ et la _génération augmentée par récupération_ pour améliorer la qualité des réponses du modèle aux questions des utilisateurs ("invites"). + +Une technique populaire d'ingénierie des invites consiste à donner au modèle plus d'indications sur ce qui est attendu dans la réponse, soit en fournissant des _instructions_ (guidage explicite) soit en lui donnant quelques exemples (guidage implicite). Cela est appelé _apprentissage par peu d'exemples_, mais cela a deux limitations : + +- Les limites de tokens du modèle peuvent restreindre le nombre d'exemples que vous pouvez donner, et limiter l'efficacité. +- Les coûts de tokens du modèle peuvent rendre coûteux l'ajout d'exemples à chaque invite, et limiter la flexibilité. + +L'affinage est une pratique courante dans les systèmes d'apprentissage automatique où nous prenons un modèle pré-entraîné et le réentraînons avec de nouvelles données pour améliorer sa performance sur une tâche spécifique. Dans le contexte des modèles de langage, nous pouvons affiner le modèle pré-entraîné _avec un ensemble d'exemples sélectionnés pour une tâche ou un domaine d'application donné_ pour créer un **modèle personnalisé** qui peut être plus précis et pertinent pour cette tâche ou ce domaine spécifique. Un avantage secondaire de l'affinage est qu'il peut également réduire le nombre d'exemples nécessaires pour l'apprentissage par peu d'exemples - réduisant l'utilisation de tokens et les coûts associés. + +## Quand et pourquoi devrions-nous affiner les modèles ? + +Dans _ce_ contexte, lorsque nous parlons d'affinage, nous faisons référence à l'affinage **supervisé** où le réentraînement est effectué en **ajoutant de nouvelles données** qui ne faisaient pas partie du jeu de données d'entraînement initial. Cela diffère d'une approche d'affinage non supervisé où le modèle est réentraîné sur les données originales, mais avec des hyperparamètres différents. + +La chose clé à retenir est que l'affinage est une technique avancée qui nécessite un certain niveau d'expertise pour obtenir les résultats souhaités. Si elle est mal réalisée, elle peut ne pas fournir les améliorations attendues, et peut même dégrader la performance du modèle pour votre domaine ciblé. + +Donc, avant d'apprendre "comment" affiner les modèles de langage, vous devez savoir "pourquoi" vous devriez emprunter cette voie, et "quand" commencer le processus d'affinage. Commencez par vous poser ces questions : + +- **Cas d'utilisation** : Quel est votre _cas d'utilisation_ pour l'affinage ? Quel aspect du modèle pré-entraîné actuel souhaitez-vous améliorer ? +- **Alternatives** : Avez-vous essayé _d'autres techniques_ pour atteindre les résultats souhaités ? Utilisez-les pour créer une référence pour la comparaison. + - Ingénierie des invites : Essayez des techniques comme les invites avec peu d'exemples de réponses pertinentes. Évaluez la qualité des réponses. + - Génération Augmentée par Récupération : Essayez d'augmenter les invites avec les résultats de requête récupérés en recherchant dans vos données. Évaluez la qualité des réponses. +- **Coûts** : Avez-vous identifié les coûts pour l'affinage ? + - Possibilité d'affinage - le modèle pré-entraîné est-il disponible pour l'affinage ? + - Effort - pour préparer les données d'entraînement, évaluer et affiner le modèle. + - Calcul - pour exécuter les tâches d'affinage, et déployer le modèle affiné + - Données - accès à des exemples de qualité suffisante pour un impact d'affinage +- **Avantages** : Avez-vous confirmé les avantages pour l'affinage ? + - Qualité - le modèle affiné a-t-il surpassé la référence ? + - Coût - réduit-il l'utilisation de tokens en simplifiant les invites ? + - Extensibilité - pouvez-vous réutiliser le modèle de base pour de nouveaux domaines ? + +En répondant à ces questions, vous devriez être en mesure de décider si l'affinage est la bonne approche pour votre cas d'utilisation. Idéalement, l'approche est valide uniquement si les avantages l'emportent sur les coûts. Une fois que vous décidez de procéder, il est temps de réfléchir à _comment_ vous pouvez affiner le modèle pré-entraîné. + +Vous souhaitez obtenir plus d'informations sur le processus de prise de décision ? Regardez [Affiner ou ne pas affiner](https://www.youtube.com/watch?v=0Jo-z-MFxJs) + +## Comment pouvons-nous affiner un modèle pré-entraîné ? + +Pour affiner un modèle pré-entraîné, vous devez avoir : + +- un modèle pré-entraîné à affiner +- un jeu de données à utiliser pour l'affinage +- un environnement d'entraînement pour exécuter la tâche d'affinage +- un environnement d'hébergement pour déployer le modèle affiné + +## Affinage en Action + +Les ressources suivantes fournissent des tutoriels étape par étape pour vous guider à travers un exemple réel en utilisant un modèle sélectionné avec un jeu de données sélectionné. Pour suivre ces tutoriels, vous avez besoin d'un compte chez le fournisseur spécifique, ainsi que d'un accès au modèle et aux jeux de données pertinents. + +| Fournisseur | Tutoriel | Description | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| OpenAI | [Comment affiner les modèles de chat](https://github.com/openai/openai-cookbook/blob/main/examples/How_to_finetune_chat_models.ipynb?WT.mc_id=academic-105485-koreyst) | Apprenez à affiner un `gpt-35-turbo` pour un domaine spécifique ("assistant de recette") en préparant les données d'entraînement, en exécutant la tâche d'affinage, et en utilisant le modèle affiné pour l'inférence. | +| Azure OpenAI | [Tutoriel d'affinage GPT 3.5 Turbo](https://learn.microsoft.com/azure/ai-services/openai/tutorials/fine-tune?tabs=python-new%2Ccommand-line?WT.mc_id=academic-105485-koreyst) | Apprenez à affiner un modèle `gpt-35-turbo-0613` **sur Azure** en prenant des mesures pour créer et télécharger des données d'entraînement, exécuter la tâche d'affinage. Déployez et utilisez le nouveau modèle. | +| Hugging Face | [Affiner les LLMs avec Hugging Face](https://www.philschmid.de/fine-tune-llms-in-2024-with-trl?WT.mc_id=academic-105485-koreyst) | Cet article de blog vous guide dans l'affinage d'un _LLM ouvert_ (ex : `CodeLlama 7B`) en utilisant la bibliothèque [transformers](https://huggingface.co/docs/transformers/index?WT.mc_id=academic-105485-koreyst) & [Transformer Reinforcement Learning (TRL)](https://huggingface.co/docs/trl/index?WT.mc_id=academic-105485-koreyst]) avec des [jeux de données](https://huggingface.co/docs/datasets/index?WT.mc_id=academic-105485-koreyst) ouverts sur Hugging Face. | +| | | | +| 🤗 AutoTrain | [Affiner les LLMs avec AutoTrain](https://github.com/huggingface/autotrain-advanced/?WT.mc_id=academic-105485-koreyst) | AutoTrain (ou AutoTrain Advanced) est une bibliothèque python développée par Hugging Face qui permet l'affinage pour de nombreuses tâches différentes, y compris l'affinage de LLM. AutoTrain est une solution sans code et l'affinage peut être effectué dans votre propre cloud, sur Hugging Face Spaces ou localement. Il prend en charge une interface graphique web, une CLI et l'entraînement via des fichiers de configuration yaml. | +| | | | + +## Devoir + +Sélectionnez l'un des tutoriels ci-dessus et suivez-les. _Nous pouvons reproduire une version de ces tutoriels dans des Jupyter Notebooks dans ce dépôt à titre de référence uniquement. Veuillez utiliser les sources originales directement pour obtenir les dernières versions_. + +## Bon Travail ! Continuez Votre Apprentissage. + +Après avoir terminé cette leçon, consultez notre [collection d'apprentissage sur l'IA générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à approfondir vos connaissances en IA générative ! + +Félicitations !! Vous avez terminé la dernière leçon de la série v2 de ce cours ! Ne cessez pas d'apprendre et de construire. **Consultez la page [RESSOURCES](RESOURCES.md?WT.mc_id=academic-105485-koreyst) pour une liste de suggestions supplémentaires juste sur ce sujet. + +Notre série de leçons v1 a également été mise à jour avec plus de devoirs et de concepts. Alors prenez une minute pour rafraîchir vos connaissances - et veuillez [partager vos questions et commentaires](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst) pour nous aider à améliorer ces leçons pour la communauté. + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction basés sur l'intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/18-fine-tuning/RESOURCES.md b/translations/fr/18-fine-tuning/RESOURCES.md new file mode 100644 index 000000000..1603ceeec --- /dev/null +++ b/translations/fr/18-fine-tuning/RESOURCES.md @@ -0,0 +1,40 @@ +# Ressources pour l'apprentissage autonome + +La leçon a été construite en utilisant un certain nombre de ressources principales d'OpenAI et d'Azure OpenAI comme références pour la terminologie et les tutoriels. Voici une liste non exhaustive, pour vos propres parcours d'apprentissage autonome. + +## 1. Ressources principales + +| Titre/Lien | Description | +| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [Fine-tuning avec les modèles OpenAI](https://platform.openai.com/docs/guides/fine-tuning?WT.mc_id=academic-105485-koreyst) | Le fine-tuning améliore l'apprentissage par quelques exemples en s'entraînant sur beaucoup plus d'exemples que ceux qui peuvent tenir dans l'invite, vous faisant économiser des coûts, améliorant la qualité des réponses et permettant des requêtes à faible latence. **Obtenez un aperçu du fine-tuning d'OpenAI.** | +| [Qu'est-ce que le Fine-Tuning avec Azure OpenAI ?](https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations#what-is-fine-tuning-with-azure-openai?WT.mc_id=academic-105485-koreyst) | Comprenez **ce qu'est le fine-tuning (concept)**, pourquoi vous devriez vous y intéresser (problème motivant), quelles données utiliser (entraînement) et comment mesurer la qualité | +| [Personnaliser un modèle avec le fine-tuning](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython&pivots=programming-language-studio#continuous-fine-tuning?WT.mc_id=academic-105485-koreyst) | Le service Azure OpenAI vous permet d'adapter nos modèles à vos ensembles de données personnels en utilisant le fine-tuning. Apprenez **comment affiner (processus)** les modèles sélectionnés en utilisant Azure AI Studio, le SDK Python ou l'API REST. | +| [Recommandations pour le fine-tuning des LLM](https://learn.microsoft.com/ai/playbook/technology-guidance/generative-ai/working-with-llms/fine-tuning-recommend?WT.mc_id=academic-105485-koreyst) | Les LLM peuvent ne pas bien fonctionner sur des domaines, tâches ou ensembles de données spécifiques, ou peuvent produire des résultats inexacts ou trompeurs. **Quand devriez-vous envisager le fine-tuning** comme solution possible à cela ? | +| [Fine-Tuning Continu](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython&pivots=programming-language-studio#continuous-fine-tuning?WT.mc_id=academic-105485-koreyst) | Le fine-tuning continu est le processus itératif de sélection d'un modèle déjà affiné comme modèle de base et **de l'affiner davantage** sur de nouveaux ensembles d'exemples d'entraînement. | +| [Fine-tuning et appel de fonction](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning-functions?WT.mc_id=academic-105485-koreyst) | Affiner votre modèle **avec des exemples d'appel de fonction** peut améliorer la sortie du modèle en obtenant des résultats plus précis et cohérents - avec des réponses formatées de manière similaire et des économies de coûts. | +| [Fine-tuning des modèles : Guide Azure OpenAI](https://learn.microsoft.com/azure/ai-services/openai/concepts/models#fine-tuning-models?WT.mc_id=academic-105485-koreyst) | Consultez ce tableau pour comprendre **quels modèles peuvent être affinés** dans Azure OpenAI, et dans quelles régions ils sont disponibles. Consultez leurs limites de jetons et les dates d'expiration des données d'entraînement si nécessaire. | +| [Fine-Tune or Not To Fine-Tune? That is the Question](https://learn.microsoft.com/shows/ai-show/to-fine-tune-or-not-fine-tune-that-is-the-question?WT.mc_id=academic-105485-koreyst) | Cet épisode de 30 minutes **d'octobre 2023** de l'AI Show discute des avantages, des inconvénients et des perspectives pratiques qui vous aident à prendre cette décision. | +| [Démarrer avec le Fine-Tuning des LLM](https://learn.microsoft.com/ai/playbook/technology-guidance/generative-ai/working-with-llms/fine-tuning?WT.mc_id=academic-105485-koreyst) | Cette ressource **AI Playbook** vous guide à travers les exigences de données, le formatage, le fine-tuning des hyperparamètres et les défis/limitations que vous devez connaître. | +| **Tutoriel** : [Azure OpenAI GPT3.5 Turbo Fine-Tuning](https://learn.microsoft.com/azure/ai-services/openai/tutorials/fine-tune?tabs=python%2Ccommand-line?WT.mc_id=academic-105485-koreyst) | Apprenez à créer un ensemble de données d'exemple pour le fine-tuning, à vous préparer pour le fine-tuning, à créer un travail de fine-tuning et à déployer le modèle affiné sur Azure. | +| **Tutoriel** : [Affiner un modèle Llama 2 dans Azure AI Studio](https://learn.microsoft.com/azure/ai-studio/how-to/fine-tune-model-llama?WT.mc_id=academic-105485-koreyst) | Azure AI Studio vous permet d'adapter de grands modèles de langage à vos ensembles de données personnels _en utilisant un flux de travail basé sur une interface utilisateur adapté aux développeurs à faible code_. Voir cet exemple. | +| **Tutoriel** : [Affiner les modèles Hugging Face pour un seul GPU sur Azure](https://learn.microsoft.com/azure/databricks/machine-learning/train-model/huggingface/fine-tune-model?WT.mc_id=academic-105485-koreyst) | Cet article décrit comment affiner un modèle Hugging Face avec la bibliothèque Hugging Face transformers sur un seul GPU avec Azure DataBricks + les bibliothèques Hugging Face Trainer. | +| **Formation :** [Affiner un modèle de base avec Azure Machine Learning](https://learn.microsoft.com/training/modules/finetune-foundation-model-with-azure-machine-learning/?WT.mc_id=academic-105485-koreyst) | Le catalogue de modèles dans Azure Machine Learning propose de nombreux modèles open source que vous pouvez affiner pour votre tâche spécifique. Essayez ce module [du chemin d'apprentissage AzureML Generative AI](https://learn.microsoft.com/training/paths/work-with-generative-models-azure-machine-learning/?WT.mc_id=academic-105485-koreyst) | +| **Tutoriel :** [Azure OpenAI Fine-Tuning](https://docs.wandb.ai/guides/integrations/azure-openai-fine-tuning?WT.mc_id=academic-105485-koreyst) | Affiner les modèles GPT-3.5 ou GPT-4 sur Microsoft Azure en utilisant W&B permet un suivi et une analyse détaillés des performances du modèle. Ce guide étend les concepts du guide OpenAI Fine-Tuning avec des étapes et des fonctionnalités spécifiques pour Azure OpenAI. | +| | | + +## 2. Ressources secondaires + +Cette section rassemble des ressources supplémentaires qui valent la peine d'être explorées, mais que nous n'avons pas eu le temps de couvrir dans cette leçon. Elles peuvent être abordées dans une leçon future, ou comme option de devoir secondaire, à une date ultérieure. Pour l'instant, utilisez-les pour développer votre propre expertise et vos connaissances sur ce sujet. + +| Titre/Lien | Description | +| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **OpenAI Cookbook** : [Préparation et analyse des données pour le fine-tuning du modèle de chat](https://cookbook.openai.com/examples/chat_finetuning_data_prep?WT.mc_id=academic-105485-koreyst) | Ce carnet sert d'outil pour prétraiter et analyser l'ensemble de données de chat utilisé pour le fine-tuning d'un modèle de chat. Il vérifie les erreurs de format, fournit des statistiques de base et estime les comptes de jetons pour les coûts de fine-tuning. Voir : [Méthode de fine-tuning pour gpt-3.5-turbo](https://platform.openai.com/docs/guides/fine-tuning?WT.mc_id=academic-105485-koreyst). | +| **OpenAI Cookbook** : [Fine-Tuning pour la génération augmentée par récupération (RAG) avec Qdrant](https://cookbook.openai.com/examples/fine-tuned_qa/ft_retrieval_augmented_generation_qdrant?WT.mc_id=academic-105485-koreyst) | L'objectif de ce carnet est de parcourir un exemple complet de la manière d'affiner les modèles OpenAI pour la génération augmentée par récupération (RAG). Nous intégrerons également Qdrant et l'apprentissage par quelques exemples pour améliorer les performances du modèle et réduire les fabrications. | +| **OpenAI Cookbook** : [Fine-tuning GPT avec Weights & Biases](https://cookbook.openai.com/examples/third_party/gpt_finetuning_with_wandb?WT.mc_id=academic-105485-koreyst) | Weights & Biases (W&B) est la plateforme de développement AI, avec des outils pour entraîner des modèles, affiner des modèles et exploiter des modèles de base. Lisez d'abord leur guide [OpenAI Fine-Tuning](https://docs.wandb.ai/guides/integrations/openai?WT.mc_id=academic-105485-koreyst), puis essayez l'exercice du Cookbook. | +| **Tutoriel Communautaire** [Phinetuning 2.0](https://huggingface.co/blog/g-ronimo/phinetuning?WT.mc_id=academic-105485-koreyst) - fine-tuning pour les petits modèles de langage | Découvrez [Phi-2](https://www.microsoft.com/research/blog/phi-2-the-surprising-power-of-small-language-models/?WT.mc_id=academic-105485-koreyst), le nouveau petit modèle de Microsoft, remarquablement puissant mais compact. Ce tutoriel vous guidera à travers le fine-tuning de Phi-2, en vous montrant comment construire un ensemble de données unique et affiner le modèle en utilisant QLoRA. | +| **Tutoriel Hugging Face** [Comment affiner les LLMs en 2024 avec Hugging Face](https://www.philschmid.de/fine-tune-llms-in-2024-with-trl?WT.mc_id=academic-105485-koreyst) | Cet article de blog vous guide à travers le processus d'affinage des LLMs ouverts en utilisant Hugging Face TRL, Transformers & datasets en 2024. Vous définissez un cas d'utilisation, configurez un environnement de développement, préparez un ensemble de données, affinez le modèle, le testez et l'évaluez, puis le déployez en production. | +| **Hugging Face : [AutoTrain Advanced](https://github.com/huggingface/autotrain-advanced?WT.mc_id=academic-105485-koreyst)** | Apporte un entraînement et des déploiements plus rapides et plus faciles des [modèles d'apprentissage automatique à la pointe](https://twitter.com/abhi1thakur/status/1755167674894557291?WT.mc_id=academic-105485-koreyst). Le dépôt propose des tutoriels adaptés à Colab avec des vidéos YouTube, pour le fine-tuning. **Reflète la récente mise à jour [local-first](https://twitter.com/abhi1thakur/status/1750828141805777057?WT.mc_id=academic-105485-koreyst)**. Lisez la [documentation AutoTrain](https://huggingface.co/autotrain?WT.mc_id=academic-105485-koreyst) | +| | | + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatisés par intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/19-slm/README.md b/translations/fr/19-slm/README.md new file mode 100644 index 000000000..ea31547ba --- /dev/null +++ b/translations/fr/19-slm/README.md @@ -0,0 +1,133 @@ +```markdown +# Introduction aux petits modèles de langage pour l'IA générative pour les débutants + +L'IA générative est un domaine fascinant de l'intelligence artificielle qui se concentre sur la création de systèmes capables de générer de nouveaux contenus. Ce contenu peut aller du texte et des images à la musique et même à des environnements virtuels entiers. L'une des applications les plus passionnantes de l'IA générative se trouve dans le domaine des modèles de langage. + +## Que sont les petits modèles de langage ? + +Un petit modèle de langage (SLM) représente une variante réduite d'un grand modèle de langage (LLM), exploitant de nombreux principes architecturaux et techniques des LLM, tout en affichant une empreinte computationnelle significativement réduite. Les SLM sont un sous-ensemble de modèles de langage conçus pour générer du texte ressemblant à celui des humains. Contrairement à leurs homologues plus grands, tels que GPT-4, les SLM sont plus compacts et efficaces, ce qui les rend idéaux pour des applications où les ressources informatiques sont limitées. Malgré leur taille plus petite, ils peuvent encore accomplir une variété de tâches. Typiquement, les SLM sont construits en compressant ou en distillant des LLM, dans le but de conserver une partie substantielle des fonctionnalités et des capacités linguistiques du modèle original. Cette réduction de la taille du modèle diminue la complexité globale, rendant les SLM plus efficaces en termes d'utilisation de la mémoire et de besoins informatiques. Malgré ces optimisations, les SLM peuvent encore accomplir une large gamme de tâches de traitement du langage naturel (NLP) : + +- Génération de texte : Création de phrases ou de paragraphes cohérents et contextuellement pertinents. +- Complétion de texte : Prédiction et complétion de phrases à partir d'une invite donnée. +- Traduction : Conversion de texte d'une langue à une autre. +- Résumé : Condensation de longs textes en résumés plus courts et plus digestes. + +Bien qu'avec quelques compromis en termes de performance ou de profondeur de compréhension par rapport à leurs homologues plus grands. + +## Comment fonctionnent les petits modèles de langage ? + +Les SLM sont entraînés sur de vastes quantités de données textuelles. Pendant l'entraînement, ils apprennent les motifs et structures du langage, leur permettant de générer du texte à la fois grammaticalement correct et contextuellement approprié. Le processus d'entraînement implique : + +- Collecte de données : Rassembler de grands ensembles de données textuelles à partir de diverses sources. +- Prétraitement : Nettoyer et organiser les données pour les rendre adaptées à l'entraînement. +- Entraînement : Utiliser des algorithmes d'apprentissage automatique pour enseigner au modèle comment comprendre et générer du texte. +- Ajustement fin : Ajuster le modèle pour améliorer sa performance sur des tâches spécifiques. + +Le développement des SLM s'aligne sur le besoin croissant de modèles pouvant être déployés dans des environnements à ressources limitées, tels que les appareils mobiles ou les plateformes de calcul en périphérie, où les LLM à grande échelle peuvent être peu pratiques en raison de leurs lourdes exigences en ressources. En se concentrant sur l'efficacité, les SLM équilibrent performance et accessibilité, permettant une application plus large à travers divers domaines. + +![slm](../../../translated_images/slm.png?WT.85221b66c3ce1b5e21e84c783c7ba31848501cd5c9557bb7fdf13173edafd675.fr.mc_id=academic-105485-koreyst) + +## Objectifs d'apprentissage + +Dans cette leçon, nous espérons introduire la connaissance des SLM et la combiner avec Microsoft Phi-3 pour explorer différents scénarios dans le contenu textuel, la vision et MoE. À la fin de cette leçon, vous devriez être capable de répondre aux questions suivantes : + +- Qu'est-ce qu'un SLM +- Quelle est la différence entre SLM et LLM +- Qu'est-ce que la famille Microsoft Phi-3/3.5 +- Comment inférer la famille Microsoft Phi-3/3.5 + +Prêt ? Commençons. + +## Les distinctions entre les grands modèles de langage (LLM) et les petits modèles de langage (SLM) + +Les LLM et les SLM sont tous deux construits sur des principes fondamentaux de l'apprentissage automatique probabiliste, suivant des approches similaires dans leur conception architecturale, leurs méthodologies d'entraînement, leurs processus de génération de données et leurs techniques d'évaluation de modèles. Cependant, plusieurs facteurs clés différencient ces deux types de modèles. + +## Applications des petits modèles de langage + +Les SLM ont une large gamme d'applications, notamment : + +- Chatbots : Fournir un support client et interagir avec les utilisateurs de manière conversationnelle. +- Création de contenu : Aider les écrivains en générant des idées ou même en rédigeant des articles entiers. +- Éducation : Aider les étudiants avec des devoirs d'écriture ou l'apprentissage de nouvelles langues. +- Accessibilité : Créer des outils pour les personnes handicapées, tels que les systèmes de synthèse vocale. + +**Taille** + +Une distinction principale entre les LLM et les SLM réside dans l'échelle des modèles. Les LLM, tels que ChatGPT (GPT-4), peuvent comprendre environ 1,76 trillion de paramètres, tandis que les SLM open-source comme Mistral 7B sont conçus avec un nombre de paramètres significativement inférieur — environ 7 milliards. Cette disparité est principalement due à des différences dans l'architecture des modèles et les processus d'entraînement. Par exemple, ChatGPT utilise un mécanisme d'auto-attention dans un cadre encodeur-décodeur, tandis que Mistral 7B utilise une attention à fenêtre glissante, ce qui permet un entraînement plus efficace dans un modèle uniquement décodeur. Cette variance architecturale a des implications profondes pour la complexité et la performance de ces modèles. + +**Compréhension** + +Les SLM sont généralement optimisés pour la performance dans des domaines spécifiques, ce qui les rend très spécialisés mais potentiellement limités dans leur capacité à fournir une compréhension contextuelle large à travers de multiples domaines de connaissance. En revanche, les LLM visent à simuler une intelligence semblable à celle des humains à un niveau plus complet. Entraînés sur de vastes ensembles de données diversifiées, les LLM sont conçus pour bien performer à travers une variété de domaines, offrant une plus grande polyvalence et adaptabilité. Par conséquent, les LLM sont plus adaptés à une gamme plus large de tâches en aval, telles que le traitement du langage naturel et la programmation. + +**Calcul** + +L'entraînement et le déploiement des LLM sont des processus gourmands en ressources, nécessitant souvent une infrastructure informatique significative, y compris des clusters de GPU à grande échelle. Par exemple, entraîner un modèle comme ChatGPT à partir de zéro peut nécessiter des milliers de GPU sur de longues périodes. En revanche, les SLM, avec leur nombre de paramètres plus petit, sont plus accessibles en termes de ressources informatiques. Des modèles comme Mistral 7B peuvent être entraînés et exécutés sur des machines locales équipées de capacités GPU modérées, bien que l'entraînement nécessite encore plusieurs heures sur plusieurs GPU. + +**Biais** + +Le biais est un problème connu dans les LLM, principalement en raison de la nature des données d'entraînement. Ces modèles s'appuient souvent sur des données brutes et librement disponibles sur Internet, qui peuvent sous-représenter ou mal représenter certains groupes, introduire un étiquetage erroné ou refléter des biais linguistiques influencés par des dialectes, des variations géographiques et des règles grammaticales. De plus, la complexité des architectures LLM peut involontairement exacerber le biais, qui peut passer inaperçu sans un ajustement fin attentif. D'un autre côté, les SLM, étant entraînés sur des ensembles de données plus restreints et spécifiques à un domaine, sont intrinsèquement moins susceptibles à de tels biais, bien qu'ils n'en soient pas immunisés. + +**Inférence** + +La taille réduite des SLM leur confère un avantage significatif en termes de vitesse d'inférence, leur permettant de générer des sorties efficacement sur du matériel local sans avoir besoin d'un traitement parallèle étendu. En revanche, les LLM, en raison de leur taille et de leur complexité, nécessitent souvent des ressources de calcul parallèles substantielles pour atteindre des temps d'inférence acceptables. La présence de plusieurs utilisateurs simultanés ralentit encore les temps de réponse des LLM, surtout lorsqu'ils sont déployés à grande échelle. + +En résumé, bien que les LLM et les SLM partagent une base fondamentale dans l'apprentissage automatique, ils diffèrent significativement en termes de taille de modèle, de besoins en ressources, de compréhension contextuelle, de susceptibilité au biais et de vitesse d'inférence. Ces distinctions reflètent leur aptitude respective à différents cas d'utilisation, les LLM étant plus polyvalents mais gourmands en ressources, et les SLM offrant une efficacité plus spécifique au domaine avec des exigences computationnelles réduites. + +***Note : Dans ce chapitre, nous introduirons les SLM en utilisant Microsoft Phi-3 / 3.5 comme exemple.*** + +## Présentation de la famille Phi-3 / Phi-3.5 + +La famille Phi-3 / 3.5 cible principalement les scénarios d'application de texte, de vision et d'agent (MoE) : + +### Phi-3 / 3.5 Instruct + +Principalement pour la génération de texte, la complétion de chat et l'extraction d'informations de contenu, etc. + +**Phi-3-mini** + +Le modèle de langage 3.8B est disponible sur Microsoft Azure AI Studio, Hugging Face et Ollama. Les modèles Phi-3 surpassent significativement les modèles de langage de taille égale et supérieure sur des critères clés (voir les chiffres de référence ci-dessous, des chiffres plus élevés sont meilleurs). Phi-3-mini surpasse des modèles deux fois plus grands, tandis que Phi-3-small et Phi-3-medium surpassent des modèles plus grands, y compris GPT-3.5 + +**Phi-3-small & medium** + +Avec seulement 7 milliards de paramètres, Phi-3-small bat GPT-3.5T sur une variété de critères de langage, de raisonnement, de codage et de mathématiques. Le Phi-3-medium avec 14 milliards de paramètres continue cette tendance et surpasse le Gemini 1.0 Pro. + +**Phi-3.5-mini** + +Nous pouvons le considérer comme une mise à niveau de Phi-3-mini. Bien que les paramètres restent inchangés, il améliore la capacité à prendre en charge plusieurs langues (Prise en charge de plus de 20 langues : arabe, chinois, tchèque, danois, néerlandais, anglais, finnois, français, allemand, hébreu, hongrois, italien, japonais, coréen, norvégien, polonais, portugais, russe, espagnol, suédois, thaï, turc, ukrainien) et ajoute un support plus fort pour le long contexte. Phi-3.5-mini avec 3.8 milliards de paramètres surpasse les modèles de langage de même taille et est à égalité avec des modèles deux fois plus grands. + +### Phi-3 / 3.5 Vision + +Nous pouvons considérer le modèle Instruct de Phi-3/3.5 comme la capacité de Phi à comprendre, et Vision est ce qui donne à Phi les yeux pour comprendre le monde. + +**Phi-3-Vision** + +Phi-3-vision, avec seulement 4.2 milliards de paramètres, continue cette tendance et surpasse des modèles plus grands tels que Claude-3 Haiku et Gemini 1.0 Pro V sur les tâches de raisonnement visuel général, OCR, et de compréhension de tableaux et de diagrammes. + +**Phi-3.5-Vision** + +Phi-3.5-Vision est également une mise à niveau de Phi-3-Vision, ajoutant la prise en charge de plusieurs images. Vous pouvez le considérer comme une amélioration de la vision, non seulement vous pouvez voir des images, mais aussi des vidéos. Phi-3.5-vision surpasse des modèles plus grands tels que Claude-3.5 Sonnet et Gemini 1.5 Flash sur les tâches de compréhension OCR, de tableaux et de graphiques et est à égalité sur les tâches de raisonnement en connaissances visuelles générales. Prise en charge de l'entrée multi-images, c'est-à-dire effectuer un raisonnement sur plusieurs images d'entrée + +### Phi-3.5-MoE + +***Mixture of Experts (MoE)*** permet aux modèles d'être préentraînés avec beaucoup moins de calcul, ce qui signifie que vous pouvez considérablement augmenter la taille du modèle ou de l'ensemble de données avec le même budget de calcul qu'un modèle dense. En particulier, un modèle MoE devrait atteindre la même qualité que son homologue dense beaucoup plus rapidement pendant le préentraînement. Phi-3.5-MoE comprend 16 modules d'experts de 3.8 milliards. Phi-3.5-MoE avec seulement 6.6 milliards de paramètres actifs atteint un niveau similaire de raisonnement, de compréhension du langage et de mathématiques que des modèles beaucoup plus grands + +Nous pouvons utiliser le modèle de la famille Phi-3/3.5 en fonction de différents scénarios. Contrairement aux LLM, vous pouvez déployer Phi-3/3.5-mini ou Phi-3/3.5-Vision sur des appareils en périphérie. + +## Comment utiliser les modèles de la famille Phi-3/3.5 + +Nous espérons utiliser Phi-3/3.5 dans différents scénarios. Ensuite, nous utiliserons Phi-3/3.5 en fonction de différents scénarios. + +![phi3](../../../translated_images/phi3.png?WT.0d1077c4470f7b6eef536aba4426fa8df26762844164cc3883d455ab5251bad1.fr.mc_id=academic-105485-koreyst) + +### Différence d'inférence + +API du Cloud + +**Modèles GitHub** + +Modèles GitHub +``` + + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforcions 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 autorité. Pour des informations cruciales, il est recommandé de faire appel à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/20-mistral/README.md b/translations/fr/20-mistral/README.md new file mode 100644 index 000000000..546634672 --- /dev/null +++ b/translations/fr/20-mistral/README.md @@ -0,0 +1,349 @@ +# Construire avec les modèles Mistral + +## Introduction + +Cette leçon couvrira : +- L'exploration des différents modèles Mistral +- La compréhension des cas d'utilisation et des scénarios pour chaque modèle +- Des exemples de code montrant les caractéristiques uniques de chaque modèle. + +## Les modèles Mistral + +Dans cette leçon, nous allons explorer 3 modèles Mistral différents : **Mistral Large**, **Mistral Small** et **Mistral Nemo**. + +Chacun de ces modèles est disponible gratuitement sur la place de marché des modèles Github. Le code dans ce notebook utilisera ces modèles pour exécuter le code. Voici plus de détails sur l'utilisation des modèles Github pour [prototyper avec des modèles d'IA](https://docs.github.com/en/github-models/prototyping-with-ai-models?WT.mc_id=academic-105485-koreyst). + +## Mistral Large 2 (2407) + +Mistral Large 2 est actuellement le modèle phare de Mistral et est conçu pour un usage en entreprise. + +Le modèle est une amélioration par rapport à l'original Mistral Large en offrant +- Une fenêtre de contexte plus grande - 128k contre 32k +- De meilleures performances sur les tâches de mathématiques et de codage - 76,9% de précision moyenne contre 60,4% +- Une performance multilingue accrue - les langues incluent : anglais, français, allemand, espagnol, italien, portugais, néerlandais, russe, chinois, japonais, coréen, arabe et hindi. + +Avec ces fonctionnalités, Mistral Large excelle dans +- *Génération augmentée par récupération (RAG)* - grâce à la plus grande fenêtre de contexte +- *Appel de fonction* - ce modèle a un appel de fonction natif qui permet l'intégration avec des outils externes et des API. Ces appels peuvent être effectués à la fois en parallèle ou l'un après l'autre de manière séquentielle. +- *Génération de code* - ce modèle excelle dans la génération de Python, Java, TypeScript et C++. + +### Exemple de RAG avec Mistral Large 2 + +Dans cet exemple, nous utilisons Mistral Large 2 pour exécuter un schéma RAG sur un document texte. La question est écrite en coréen et interroge sur les activités de l'auteur avant l'université. + +Il utilise le modèle Cohere Embeddings pour créer des embeddings du document texte ainsi que de la question. Pour cet exemple, il utilise le package Python faiss comme magasin de vecteurs. + +L'invite envoyée au modèle Mistral inclut à la fois les questions et les segments récupérés similaires à la question. Le modèle fournit ensuite une réponse en langage naturel. + +```python +pip install faiss-cpu +``` + +```python +import requests +import numpy as np +import faiss +import os + +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential +from azure.ai.inference import EmbeddingsClient + +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-large" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = requests.get('https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt') +text = response.text + +chunk_size = 2048 +chunks = [text[i:i + chunk_size] for i in range(0, len(text), chunk_size)] +len(chunks) + +embed_model_name = "cohere-embed-v3-multilingual" + +embed_client = EmbeddingsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token) +) + +embed_response = embed_client.embed( + input=chunks, + model=embed_model_name +) + + + +text_embeddings = [] +for item in embed_response.data: + length = len(item.embedding) + text_embeddings.append(item.embedding) +text_embeddings = np.array(text_embeddings) + + +d = text_embeddings.shape[1] +index = faiss.IndexFlatL2(d) +index.add(text_embeddings) + +question = "저자가 대학에 오기 전에 주로 했던 두 가지 일은 무엇이었나요??" + +question_embedding = embed_client.embed( + input=[question], + model=embed_model_name +) + +question_embeddings = np.array(question_embedding.data[0].embedding) + + +D, I = index.search(question_embeddings.reshape(1, -1), k=2) # distance, index +retrieved_chunks = [chunks[i] for i in I.tolist()[0]] + +prompt = f""" +Context information is below. +--------------------- +{retrieved_chunks} +--------------------- +Given the context information and not prior knowledge, answer the query. +Query: {question} +Answer: +""" + + +chat_response = client.complete( + messages=[ + SystemMessage(content="You are a helpful assistant."), + UserMessage(content=prompt), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(chat_response.choices[0].message.content) +``` + +## Mistral Small + +Mistral Small est un autre modèle de la famille des modèles Mistral dans la catégorie premier/entreprise. Comme son nom l'indique, ce modèle est un modèle de langage de petite taille (SLM). Les avantages de l'utilisation de Mistral Small sont qu'il est : +- Économique par rapport aux LLM de Mistral comme Mistral Large et NeMo - baisse de prix de 80% +- Faible latence - réponse plus rapide par rapport aux LLM de Mistral +- Flexible - peut être déployé dans différents environnements avec moins de restrictions sur les ressources requises. + +Mistral Small est idéal pour : +- Les tâches basées sur le texte telles que la synthèse, l'analyse de sentiment et la traduction. +- Les applications où des requêtes fréquentes sont effectuées en raison de son efficacité en termes de coût +- Les tâches de code à faible latence comme la révision et les suggestions de code + +## Comparaison de Mistral Small et Mistral Large + +Pour montrer les différences de latence entre Mistral Small et Large, exécutez les cellules ci-dessous. + +Vous devriez voir une différence dans les temps de réponse entre 3-5 secondes. Notez également la longueur et le style des réponses sur la même invite. + +```python + +import os +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-small" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage(content="You are a helpful coding assistant."), + UserMessage(content="Can you write a Python function to the fizz buzz test?"), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(response.choices[0].message.content) + +``` + +```python + +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential + +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-large" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage(content="You are a helpful coding assistant."), + UserMessage(content="Can you write a Python function to the fizz buzz test?"), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(response.choices[0].message.content) + +``` + +## Mistral NeMo + +Comparé aux deux autres modèles discutés dans cette leçon, Mistral NeMo est le seul modèle gratuit avec une licence Apache2. + +Il est considéré comme une amélioration par rapport à l'ancien LLM open source de Mistral, Mistral 7B. + +D'autres caractéristiques du modèle NeMo sont : + +- *Tokenisation plus efficace :* Ce modèle utilise le tokenizer Tekken au lieu du plus couramment utilisé tiktoken. Cela permet de meilleures performances sur plus de langues et de code. + +- *Ajustement fin :* Le modèle de base est disponible pour l'ajustement fin. Cela permet plus de flexibilité pour les cas d'utilisation où un ajustement fin peut être nécessaire. + +- *Appel de fonction natif* - Comme Mistral Large, ce modèle a été formé sur l'appel de fonction. Cela le rend unique en tant que l'un des premiers modèles open source à le faire. + +### Comparaison des tokenizers + +Dans cet exemple, nous allons voir comment Mistral NeMo gère la tokenisation par rapport à Mistral Large. + +Les deux exemples prennent la même invite, mais vous devriez voir que NeMo renvoie moins de tokens par rapport à Mistral Large. + +```bash +pip install mistral-common +``` + +```python +# Import needed packages: +from mistral_common.protocol.instruct.messages import ( + UserMessage, +) +from mistral_common.protocol.instruct.request import ChatCompletionRequest +from mistral_common.protocol.instruct.tool_calls import ( + Function, + Tool, +) +from mistral_common.tokens.tokenizers.mistral import MistralTokenizer + +# Load Mistral tokenizer + +model_name = "open-mistral-nemo " + +tokenizer = MistralTokenizer.from_model(model_name) + +# Tokenize a list of messages +tokenized = tokenizer.encode_chat_completion( + ChatCompletionRequest( + tools=[ + Tool( + function=Function( + name="get_current_weather", + description="Get the current weather", + parameters={ + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "format": { + "type": "string", + "enum": ["celsius", "fahrenheit"], + "description": "The temperature unit to use. Infer this from the users location.", + }, + }, + "required": ["location", "format"], + }, + ) + ) + ], + messages=[ + UserMessage(content="What's the weather like today in Paris"), + ], + model=model_name, + ) +) +tokens, text = tokenized.tokens, tokenized.text + +# Count the number of tokens +print(len(tokens)) +``` + +```python +# Import needed packages: +from mistral_common.protocol.instruct.messages import ( + UserMessage, +) +from mistral_common.protocol.instruct.request import ChatCompletionRequest +from mistral_common.protocol.instruct.tool_calls import ( + Function, + Tool, +) +from mistral_common.tokens.tokenizers.mistral import MistralTokenizer + +# Load Mistral tokenizer + +model_name = "mistral-large-latest" + +tokenizer = MistralTokenizer.from_model(model_name) + +# Tokenize a list of messages +tokenized = tokenizer.encode_chat_completion( + ChatCompletionRequest( + tools=[ + Tool( + function=Function( + name="get_current_weather", + description="Get the current weather", + parameters={ + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "format": { + "type": "string", + "enum": ["celsius", "fahrenheit"], + "description": "The temperature unit to use. Infer this from the users location.", + }, + }, + "required": ["location", "format"], + }, + ) + ) + ], + messages=[ + UserMessage(content="What's the weather like today in Paris"), + ], + model=model_name, + ) +) +tokens, text = tokenized.tokens, tokenized.text + +# Count the number of tokens +print(len(tokens)) +``` + +## L'apprentissage ne s'arrête pas ici, continuez le voyage + +Après avoir terminé cette leçon, consultez notre [collection d'apprentissage de l'IA générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à approfondir vos connaissances en IA générative ! + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforcions 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 autorité. Pour des informations cruciales, il est recommandé de recourir à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/21-meta/README.md b/translations/fr/21-meta/README.md new file mode 100644 index 000000000..0f48e1378 --- /dev/null +++ b/translations/fr/21-meta/README.md @@ -0,0 +1,157 @@ +# Construire avec les modèles de la famille Meta + +## Introduction + +Cette leçon couvrira : + +- L'exploration des deux principaux modèles de la famille Meta - Llama 3.1 et Llama 3.2 +- La compréhension des cas d'utilisation et des scénarios pour chaque modèle +- Un exemple de code pour montrer les caractéristiques uniques de chaque modèle + +## La famille de modèles Meta + +Dans cette leçon, nous allons explorer 2 modèles de la famille Meta ou "Llama Herd" - Llama 3.1 et Llama 3.2 + +Ces modèles existent en différentes variantes et sont disponibles sur le marché des modèles Github. Voici plus de détails sur l'utilisation des modèles Github pour [prototyper avec des modèles d'IA](https://docs.github.com/en/github-models/prototyping-with-ai-models?WT.mc_id=academic-105485-koreyst). + +Variantes de modèle : +- Llama 3.1 - 70B Instruct +- Llama 3.1 - 405B Instruct +- Llama 3.2 - 11B Vision Instruct +- Llama 3.2 - 90B Vision Instruct + +*Remarque : Llama 3 est également disponible sur les modèles Github mais ne sera pas couvert dans cette leçon* + +## Llama 3.1 + +Avec 405 milliards de paramètres, Llama 3.1 s'inscrit dans la catégorie des LLM open source. + +Le modèle est une amélioration de la version précédente Llama 3 en offrant : + +- Une fenêtre contextuelle plus grande - 128k tokens contre 8k tokens +- Plus de tokens de sortie maximale - 4096 contre 2048 +- Meilleur support multilingue - grâce à l'augmentation des tokens d'entraînement + +Cela permet à Llama 3.1 de gérer des cas d'utilisation plus complexes lors de la création d'applications GenAI, y compris : +- Appel de fonctions natives - la capacité d'appeler des outils et fonctions externes en dehors du flux de travail LLM +- Meilleure performance RAG - grâce à la fenêtre contextuelle plus large +- Génération de données synthétiques - la capacité de créer des données efficaces pour des tâches telles que l'ajustement fin + +### Appel de fonctions natives + +Llama 3.1 a été affiné pour être plus efficace dans l'appel de fonctions ou d'outils. Il dispose également de deux outils intégrés que le modèle peut identifier comme nécessaires à utiliser en fonction de la demande de l'utilisateur. Ces outils sont : + +- **Brave Search** - Peut être utilisé pour obtenir des informations à jour comme la météo en effectuant une recherche sur le web +- **Wolfram Alpha** - Peut être utilisé pour des calculs mathématiques plus complexes, de sorte qu'il n'est pas nécessaire d'écrire vos propres fonctions. + +Vous pouvez également créer vos propres outils personnalisés que le LLM peut appeler. + +Dans l'exemple de code ci-dessous : + +- Nous définissons les outils disponibles (brave_search, wolfram_alpha) dans l'invite système. +- Envoyez une invite utilisateur qui demande la météo dans une certaine ville. +- Le LLM répondra par un appel d'outil à l'outil Brave Search qui ressemblera à ceci `<|python_tag|>brave_search.call(query="Stockholm weather")` + +*Remarque : Cet exemple ne fait que l'appel de l'outil, si vous souhaitez obtenir les résultats, vous devrez créer un compte gratuit sur la page API de Brave et définir la fonction elle-même* + +```python +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import AssistantMessage, SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential + +token = os.environ["GITHUB_TOKEN"] +endpoint = "https://models.inference.ai.azure.com" +model_name = "meta-llama-3.1-405b-instruct" + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + + +tool_prompt=f""" +<|begin_of_text|><|start_header_id|>system<|end_header_id|> + +Environment: ipython +Tools: brave_search, wolfram_alpha +Cutting Knowledge Date: December 2023 +Today Date: 23 July 2024 + +You are a helpful assistant<|eot_id|> +""" + +messages = [ + SystemMessage(content=tool_prompt), + UserMessage(content="What is the weather in Stockholm?"), + +] + +response = client.complete(messages=messages, model=model_name) + +print(response.choices[0].message.content) +``` + +## Llama 3.2 + +Malgré le fait d'être un LLM, une limitation que Llama 3.1 a est la multimodalité. C'est-à-dire la capacité d'utiliser différents types d'entrée tels que des images comme invites et de fournir des réponses. Cette capacité est l'une des principales caractéristiques de Llama 3.2. Ces caractéristiques incluent également : + +- Multimodalité - a la capacité d'évaluer à la fois des invites texte et image +- Variations de taille petite à moyenne (11B et 90B) - cela offre des options de déploiement flexibles, +- Variations texte uniquement (1B et 3B) - cela permet au modèle d'être déployé sur des appareils edge / mobiles et offre une faible latence + +Le support multimodal représente un grand pas en avant dans le monde des modèles open source. L'exemple de code ci-dessous prend à la fois une image et une invite texte pour obtenir une analyse de l'image de Llama 3.2 90B. + +### Support multimodal avec Llama 3.2 + +```python +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import ( + SystemMessage, + UserMessage, + TextContentItem, + ImageContentItem, + ImageUrl, + ImageDetailLevel, +) +from azure.core.credentials import AzureKeyCredential + +token = os.environ["GITHUB_TOKEN"] +endpoint = "https://models.inference.ai.azure.com" +model_name = "Llama-3.2-90B-Vision-Instruct" + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage( + content="You are a helpful assistant that describes images in details." + ), + UserMessage( + content=[ + TextContentItem(text="What's in this image?"), + ImageContentItem( + image_url=ImageUrl.load( + image_file="sample.jpg", + image_format="jpg", + detail=ImageDetailLevel.LOW) + ), + ], + ), + ], + model=model_name, +) + +print(response.choices[0].message.content) +``` + +## L'apprentissage ne s'arrête pas ici, continuez le voyage + +Après avoir terminé cette leçon, consultez notre [collection d'apprentissage sur l'IA générative](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) pour continuer à approfondir vos connaissances en IA générative ! + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique basés sur l'intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/CODE_OF_CONDUCT.md b/translations/fr/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..a788590f7 --- /dev/null +++ b/translations/fr/CODE_OF_CONDUCT.md @@ -0,0 +1,12 @@ +# Code de conduite Open Source de Microsoft + +Ce projet a adopté le [Code de conduite Open Source de Microsoft](https://opensource.microsoft.com/codeofconduct/). + +Ressources : + +- [Code de conduite Open Source de Microsoft](https://opensource.microsoft.com/codeofconduct/) +- [FAQ sur le Code de conduite de Microsoft](https://opensource.microsoft.com/codeofconduct/faq/) +- Contactez [opencode@microsoft.com](mailto:opencode@microsoft.com) pour toute question ou préoccupation + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle humaine. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/CONTRIBUTING.md b/translations/fr/CONTRIBUTING.md new file mode 100644 index 000000000..c3d0d51e7 --- /dev/null +++ b/translations/fr/CONTRIBUTING.md @@ -0,0 +1,113 @@ +# Contribution + +Ce projet accueille avec plaisir les contributions et suggestions. La plupart des contributions nécessitent que vous acceptiez un Accord de Licence de Contributeur (CLA) déclarant que vous avez le droit de nous accorder les droits d'utiliser votre contribution. Pour plus de détails, visitez . + +> Important : lors de la traduction de texte dans ce dépôt, assurez-vous de ne pas utiliser de traduction automatique. Nous vérifierons les traductions via la communauté, donc veuillez ne vous proposer que pour des traductions dans les langues que vous maîtrisez. + +Lorsque vous soumettez une pull request, un CLA-bot déterminera automatiquement si vous devez fournir un CLA et décorera la PR en conséquence (par exemple, étiquette, commentaire). Suivez simplement les instructions fournies par le bot. Vous n'aurez à le faire qu'une seule fois pour tous les dépôts utilisant notre CLA. + +## Code de Conduite + +Ce projet a adopté le [Code de Conduite Open Source de Microsoft](https://opensource.microsoft.com/codeofconduct/?WT.mc_id=academic-105485-koreyst). Pour plus d'informations, lisez la [FAQ sur le Code de Conduite](https://opensource.microsoft.com/codeofconduct/faq/?WT.mc_id=academic-105485-koreyst) ou contactez [opencode@microsoft.com](mailto:opencode@microsoft.com) pour toute question ou commentaire supplémentaire. + +## Question ou Problème ? + +Veuillez ne pas ouvrir de problèmes GitHub pour des questions générales de support, car la liste GitHub doit être utilisée pour les demandes de fonctionnalités et les rapports de bugs. De cette façon, nous pouvons plus facilement suivre les problèmes ou bugs réels du code et garder la discussion générale séparée du code réel. + +## Fautes de frappe, Problèmes, Bugs et contributions + +Chaque fois que vous soumettez des modifications au dépôt Generative AI for Beginners, veuillez suivre ces recommandations. + +* Toujours forker le dépôt sur votre propre compte avant de faire vos modifications +* Ne pas combiner plusieurs modifications dans une seule pull request. Par exemple, soumettez toute correction de bug et mise à jour de documentation en utilisant des PRs séparées +* Si votre pull request montre des conflits de fusion, assurez-vous de mettre à jour votre main locale pour qu'elle soit un miroir de ce qui est dans le dépôt principal avant de faire vos modifications +* Si vous soumettez une traduction, veuillez créer une PR pour tous les fichiers traduits car nous n'acceptons pas les traductions partielles pour le contenu +* Si vous soumettez une faute de frappe ou une correction de documentation, vous pouvez combiner les modifications en une seule PR là où cela est approprié + +## Conseils Généraux pour la rédaction + +- Assurez-vous que toutes vos URLs sont entourées de crochets suivis d'une parenthèse sans espaces supplémentaires autour ou à l'intérieur `[](../..)`. +- Assurez-vous que tout lien relatif (c'est-à-dire des liens vers d'autres fichiers et dossiers dans le dépôt) commence par un `./` faisant référence à un fichier ou un dossier situé dans le répertoire de travail actuel ou un `../` faisant référence à un fichier ou un dossier situé dans un répertoire de travail parent. +- Assurez-vous que tout lien relatif (c'est-à-dire des liens vers d'autres fichiers et dossiers dans le dépôt) a un ID de suivi (c'est-à-dire `?` ou `&` puis `wt.mc_id=` ou `WT.mc_id=`) à la fin. +- Assurez-vous que toute URL des domaines suivants _github.com, microsoft.com, visualstudio.com, aka.ms, et azure.com_ a un ID de suivi (c'est-à-dire `?` ou `&` puis `wt.mc_id=` ou `WT.mc_id=`) à la fin. +- Assurez-vous que vos liens n'ont pas de locale spécifique au pays (c'est-à-dire `/en-us/` ou `/en/`). +- Assurez-vous que toutes les images sont stockées dans le dossier `./images`. +- Assurez-vous que les images ont des noms descriptifs utilisant des caractères anglais, des chiffres et des tirets dans le nom de votre image. + +## Flux de Travail GitHub + +Lorsque vous soumettez une pull request, quatre flux de travail différents seront déclenchés pour valider les règles précédentes. Suivez simplement les instructions listées ici pour réussir les vérifications des flux de travail. + +- [Vérifier les Chemins Relatifs Cassés](../..) +- [Vérifier que les Chemins ont un Suivi](../..) +- [Vérifier que les URLs ont un Suivi](../..) +- [Vérifier que les URLs n'ont pas de Locale](../..) + +### Vérifier les Chemins Relatifs Cassés + +Ce flux de travail s'assure que tout chemin relatif dans vos fichiers fonctionne. Ce dépôt est déployé sur GitHub pages, donc vous devez être très prudent lorsque vous tapez les liens qui relient tout pour ne pas diriger quelqu'un au mauvais endroit. + +Pour vous assurer que vos liens fonctionnent correctement, utilisez simplement VS code pour vérifier cela. + +Par exemple, lorsque vous survolez un lien dans vos fichiers, vous serez invité à suivre le lien en appuyant sur **ctrl + clic** + +![Capture d'écran VS code suivre les liens](../../translated_images/vscode-follow-link.png?WT.mc_id=academic-105485-koreyst "Capture d'écran de l'invite VS code pour suivre un lien lorsque vous survolez un lien.fd96348c7853e06270e566252c9fd64d578b888bf4be87282b7b229351a4ea1b.fr.") + +Si vous cliquez sur un lien et qu'il ne fonctionne pas localement, alors, il déclenchera sûrement le flux de travail et ne fonctionnera pas sur GitHub. + +Pour résoudre ce problème, essayez de taper le lien avec l'aide de VS code. + +Lorsque vous tapez `./` ou `../`, VS code vous invitera à choisir parmi les options disponibles en fonction de ce que vous avez tapé. + +![Capture d'écran VS code sélectionner le chemin relatif](../../translated_images/vscode-select-relative-path.png?WT.mc_id=academic-105485-koreyst "Capture d'écran de l'invite VS code pour sélectionner le chemin relatif dans une liste déroulante.22fb42bdd289e691523624bae8bb37bc11a670c81c8bf4b907c8da7e1a91e31d.fr.") + +Suivez le chemin en cliquant sur le fichier ou le dossier souhaité et vous serez sûr que votre chemin n'est pas cassé. + +Une fois que vous avez ajouté le chemin relatif correct, enregistrez et poussez vos modifications, le flux de travail sera à nouveau déclenché pour vérifier vos modifications. Si vous réussissez la vérification, alors vous êtes prêt. + +### Vérifier que les Chemins ont un Suivi + +Ce flux de travail s'assure que tout chemin relatif a un suivi. Ce dépôt est déployé sur GitHub pages, donc nous devons suivre le mouvement entre les différents fichiers et dossiers. + +Pour vous assurer que vos chemins relatifs ont un suivi, vérifiez simplement le texte suivant `?wt.mc_id=` à la fin du chemin. Si c'est ajouté à vos chemins relatifs, alors vous réussirez cette vérification. + +Sinon, vous pourriez obtenir l'erreur suivante. + +![Capture d'écran commentaire GitHub vérification des chemins manquant de suivi](../../translated_images/github-check-paths-missing-tracking-comment.png?WT.53205eab9ff5f1865ed6ec15ba755daf8235945bd6398cccf7c547bb2b18fc90.fr.mc_id=academic-105485-koreyst "capture d'écran d'un commentaire github montrant un suivi manquant des chemins relatifs") + +Pour résoudre ce problème, essayez d'ouvrir le chemin du fichier que le flux de travail a mis en évidence et ajoutez l'ID de suivi à la fin des chemins relatifs. + +Une fois que vous avez ajouté l'ID de suivi, enregistrez et poussez vos modifications, le flux de travail sera à nouveau déclenché pour vérifier vos modifications. Si vous réussissez la vérification, alors vous êtes prêt. + +### Vérifier que les URLs ont un Suivi + +Ce flux de travail s'assure que toute URL web a un suivi. Ce dépôt est accessible à tous, donc vous devez vous assurer de suivre l'accès pour savoir d'où vient le trafic. + +Pour vous assurer que vos URLs ont un suivi, vérifiez simplement le texte suivant `?wt.mc_id=` à la fin de l'URL. Si c'est ajouté à vos URLs, alors vous réussirez cette vérification. + +Sinon, vous pourriez obtenir l'erreur suivante. + +![Capture d'écran commentaire GitHub vérification des URLs manquant de suivi](../../translated_images/github-check-urls-missing-tracking-comment.png?WT.f4c94600a3d19fa0c3fc9373b7e7dd9cec3d418ede7aa440dabf8fefcd1ff047.fr.mc_id=academic-105485-koreyst "capture d'écran d'un commentaire github montrant un suivi manquant des urls") + +Pour résoudre ce problème, essayez d'ouvrir le chemin du fichier que le flux de travail a mis en évidence et ajoutez l'ID de suivi à la fin des URLs. + +Une fois que vous avez ajouté l'ID de suivi, enregistrez et poussez vos modifications, le flux de travail sera à nouveau déclenché pour vérifier vos modifications. Si vous réussissez la vérification, alors vous êtes prêt. + +### Vérifier que les URLs n'ont pas de Locale + +Ce flux de travail s'assure que toute URL web n'a pas de locale spécifique au pays. Ce dépôt est accessible à tous dans le monde entier, donc vous devez vous assurer de ne pas inclure le locale de votre pays dans les URLs. + +Pour vous assurer que vos URLs n'ont pas de locale de pays, vérifiez simplement le texte suivant `/en-us/` ou `/en/` ou tout autre locale de langue n'importe où dans l'URL. Si ce n'est pas présent dans vos URLs, alors vous réussirez cette vérification. + +Sinon, vous pourriez obtenir l'erreur suivante. + +![Capture d'écran commentaire GitHub vérification des locales de pays](../../translated_images/github-check-country-locale-comment.png?WT.e839b98f9eb81b3f1cfe24a37e2232f771964fca1e10ed38f1ecd3d61415efe2.fr.mc_id=academic-105485-koreyst "capture d'écran d'un commentaire github montrant l'ajout de locales de pays aux urls") + +Pour résoudre ce problème, essayez d'ouvrir le chemin du fichier que le flux de travail a mis en évidence et supprimez le locale de pays des URLs. + +Une fois que vous avez supprimé le locale de pays, enregistrez et poussez vos modifications, le flux de travail sera à nouveau déclenché pour vérifier vos modifications. Si vous réussissez la vérification, alors vous êtes prêt. + +Félicitations ! Nous vous recontacterons dès que possible avec des commentaires sur votre contribution. + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle humaine. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/README.md b/translations/fr/README.md new file mode 100644 index 000000000..c937cfa39 --- /dev/null +++ b/translations/fr/README.md @@ -0,0 +1,112 @@ +![Generative AI Pour Débutants](../../translated_images/repo-thumbnailv4-fixed.png?WT.dfa9688e7359356441d344183b2ff4dcc76389cc116024447725ef424a809a79.fr.mc_id=academic-105485-koreyst) + +### 21 Leçons pour tout apprendre sur la création d'applications d'IA générative + +[![Licence GitHub](https://img.shields.io/github/license/microsoft/Generative-AI-For-Beginners.svg)](https://github.com/microsoft/Generative-AI-For-Beginners/blob/master/LICENSE?WT.mc_id=academic-105485-koreyst) +[![Contributeurs GitHub](https://img.shields.io/github/contributors/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/graphs/contributors/?WT.mc_id=academic-105485-koreyst) +[![Problèmes GitHub](https://img.shields.io/github/issues/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/issues/?WT.mc_id=academic-105485-koreyst) +[![Requêtes d'extraction GitHub](https://img.shields.io/github/issues-pr/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/pulls/?WT.mc_id=academic-105485-koreyst) +[![PRs Bienvenus](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com?WT.mc_id=academic-105485-koreyst) + +[![Observateurs GitHub](https://img.shields.io/github/watchers/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/watchers/?WT.mc_id=academic-105485-koreyst) +[![Forks GitHub](https://img.shields.io/github/forks/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/network/?WT.mc_id=academic-105485-koreyst) +[![Étoiles GitHub](https://img.shields.io/github/stars/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/stargazers/?WT.mc_id=academic-105485-koreyst) + +[![](https://dcbadge.limes.pink/api/server/ByRwuEEgH4)](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) + +# IA Générative pour Débutants (Version 3) - Un Cours + +Apprenez les bases de la création d'applications d'IA générative avec notre cours complet de 21 leçons par les Microsoft Cloud Advocates. + +## 🌱 Pour Commencer + +Ce cours comprend 21 leçons. Chaque leçon couvre un sujet différent, commencez donc où vous voulez ! + +Les leçons sont soit des leçons "Apprendre" expliquant un concept d'IA générative, soit des leçons "Construire" qui expliquent un concept et donnent des exemples de code en **Python** et **TypeScript** lorsque c'est possible. + +Chaque leçon inclut également une section "Continuer à apprendre" avec des outils d'apprentissage supplémentaires. + +## Ce Dont Vous Avez Besoin +### Pour exécuter le code de ce cours, vous pouvez utiliser soit : + - [Azure OpenAI Service](https://azure.microsoft.com/products/ai-services/openai-service?WT.mc_id=academic-105485-koreyst) - **Leçons :** "aoai-assignment" + - [GitHub Marketplace Model Catalog](https://github.com/marketplace/models?WT.mc_id=academic-105485-koreyst) - **Leçons :** "githubmodels" + - [OpenAI API](https://platform.openai.com/docs/quickstart?context=python?WT.mc_id=academic-105485-koreyst) - **Leçons :** "oai-assignment" + +- Des connaissances de base en Python ou TypeScript sont utiles - \*Pour les débutants absolus, consultez ces cours [Python](https://learn.microsoft.com/training/paths/python-language/?WT.mc_id=academic-105485-koreyst) et [TypeScript](https://learn.microsoft.com/training/paths/build-javascript-applications-typescript/?WT.mc_id=academic-105485-koreyst). +- Un compte GitHub pour [forker ce dépôt entier](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst) sur votre propre compte GitHub + +Nous avons créé une leçon **[Configuration du Cours](./00-course-setup/README.md?WT.mc_id=academic-105485-koreyst)** pour vous aider à configurer votre environnement de développement. + +N'oubliez pas de [mettre une étoile (🌟) à ce dépôt](https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars?WT.mc_id=academic-105485-koreyst) pour le retrouver plus facilement plus tard. + +## 🧠 Prêt à Déployer ? + +Si vous cherchez des exemples de code plus avancés, consultez notre [collection d'exemples de code d'IA générative](https://aka.ms/genai-beg-code?WT.mc_id=academic-105485-koreyst) en **Python** et **TypeScript**. + +## 🗣️ Rencontrez d'Autres Apprenants, Obtenez du Support + +Rejoignez notre [serveur Discord officiel AI](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) pour rencontrer et réseauter avec d'autres apprenants suivant ce cours et obtenir du support. + +## 🚀 Construire une Startup ? + +Inscrivez-vous au [Microsoft for Startups Founders Hub](https://aka.ms/genai-foundershub?WT.mc_id=academic-105485-koreyst) pour recevoir **des crédits OpenAI gratuits** et jusqu'à **150k $ de crédits Azure pour accéder aux modèles OpenAI via les services Azure OpenAI**. + +## 🙏 Vous Voulez Aider ? + +Avez-vous des suggestions ou avez-vous trouvé des fautes d'orthographe ou des erreurs de code ? [Soulevez un problème](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst) ou [Créez une requête d'extraction](https://github.com/microsoft/generative-ai-for-beginners/pulls?WT.mc_id=academic-105485-koreyst) + +## 📂 Chaque leçon inclut : + +- Une courte introduction vidéo au sujet +- Une leçon écrite située dans le README +- Des exemples de code en Python et TypeScript supportant Azure OpenAI et l'API OpenAI +- Des liens vers des ressources supplémentaires pour continuer votre apprentissage + +## 🗃️ Leçons + +| # | **Lien de la leçon** | **Description** | **Vidéo** | **Apprentissage Supplémentaire** | +| --- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | +| 00 | [Configuration du Cours](./00-course-setup/README.md?WT.mc_id=academic-105485-koreyst) | **Apprendre :** Comment configurer votre environnement de développement | Bientôt Disponible | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 01 | [Introduction à l'IA Générative et aux LLMs](./01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst) | **Apprendre :** Comprendre ce qu'est l'IA générative et comment fonctionnent les Large Language Models (LLMs). | [Vidéo](https://aka.ms/gen-ai-lesson-1-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 02 | [Explorer et comparer différents LLMs](./02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst) | **Apprendre :** Comment choisir le bon modèle pour votre cas d'utilisation | [Vidéo](https://aka.ms/gen-ai-lesson2-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 03 | [Utiliser l'IA générative de manière responsable](./03-using-generative-ai-responsibly/README.md?WT.mc_id=academic-105485-koreyst) | **Apprendre :** Comment construire des applications d'IA générative de manière responsable | [Vidéo](https://aka.ms/gen-ai-lesson3-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 04 | [Comprendre les bases de l'ingénierie des invites](./04-prompt-engineering-fundamentals/README.md?WT.mc_id=academic-105485-koreyst) | **Apprendre :** Pratiques exemplaires de l'ingénierie des invites | [Vidéo](https://aka.ms/gen-ai-lesson4-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 05 | [Créer des invites avancées](./05-advanced-prompts/README.md?WT.mc_id=academic-105485-koreyst) | **Apprendre :** Comment appliquer des techniques d'ingénierie des invites qui améliorent le résultat de vos invites. | [Vidéo](https://aka.ms/gen-ai-lesson5-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 06 | [Construire des applications de génération de texte](./06-text-generation-apps/README.md?WT.mc_id=academic-105485-koreyst) | **Construire :** Une application de génération de texte utilisant Azure OpenAI / OpenAI API | [Vidéo](https://aka.ms/gen-ai-lesson6-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 07 | [Construire des applications de chat](./07-building-chat-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Construire :** Techniques pour construire et intégrer efficacement des applications de chat. | [Vidéo](https://aka.ms/gen-ai-lessons7-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 08 | [Construire des applications de recherche avec des bases de données vectorielles](./08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Construire :** Une application de recherche qui utilise des embeddings pour rechercher des données. | [Vidéo](https://aka.ms/gen-ai-lesson8-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 09 | [Construire des applications de génération d'images](./09-building-image-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Construire :** Une application de génération d'images | [Vidéo](https://aka.ms/gen-ai-lesson9-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 10 | [Construire des applications d'IA avec peu de code](./10-building-low-code-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Construire :** Une application d'IA générative utilisant des outils avec peu de code | [Vidéo](https://aka.ms/gen-ai-lesson10-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 11 | [Intégrer des applications externes avec l'appel de fonction](./11-integrating-with-function-calling/README.md?WT.mc_id=academic-105485-koreyst) | **Construire :** Qu'est-ce que l'appel de fonction et ses cas d'utilisation pour les applications | [Vidéo](https://aka.ms/gen-ai-lesson11-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 12 | [Concevoir l'UX pour les applications d'IA](./12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Apprendre :** Comment appliquer les principes de conception UX lors du développement d'applications d'IA générative | [Vidéo](https://aka.ms/gen-ai-lesson12-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 13 | [Sécuriser vos applications d'IA générative](./13-securing-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Apprendre :** Les menaces et les risques pour les systèmes d'IA et les méthodes pour sécuriser ces systèmes. | [Vidéo](https://aka.ms/gen-ai-lesson13-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 14 | [Le cycle de vie des applications d'IA générative](./14-the-generative-ai-application-lifecycle/README.md?WT.mc_id=academic-105485-koreyst) | **Apprendre :** Les outils et les métriques pour gérer le cycle de vie des LLM et LLMOps | [Vidéo](https://aka.ms/gen-ai-lesson14-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 15 | [Génération augmentée par récupération (RAG) et bases de données vectorielles](./15-rag-and-vector-databases/README.md?WT.mc_id=academic-105485-koreyst) | **Construire :** Une application utilisant un cadre RAG pour récupérer des embeddings à partir de bases de données vectorielles | [Vidéo](https://aka.ms/gen-ai-lesson15-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 16 | [Modèles Open Source et Hugging Face](./16-open-source-models/README.md?WT.mc_id=academic-105485-koreyst) | **Construire :** Une application utilisant des modèles open source disponibles sur Hugging Face | [Vidéo](https://aka.ms/gen-ai-lesson16-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 17 | [Agents IA](./17-ai-agents/README.md?WT.mc_id=academic-105485-koreyst) | **Construire :** Une application utilisant un cadre d'agent IA | [Vidéo](https://aka.ms/gen-ai-lesson17-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 18 | [Ajustement fin des LLM](./18-fine-tuning/README.md?WT.mc_id=academic-105485-koreyst) | **Apprendre :** Le quoi, pourquoi et comment de l'ajustement fin des LLM | [Vidéo](https://aka.ms/gen-ai-lesson18-gh?WT.mc_id=academic-105485-koreyst) | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 19 | [Construire avec les SLM](./19-slm/README.md?WT.mc_id=academic-105485-koreyst) | **Apprendre :** Les avantages de construire avec des petits modèles de langage | Vidéo à venir | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 20 | [Construire avec les modèles Mistral](./20-mistral/README.md?WT.mc_id=academic-105485-koreyst) | **Apprendre :** Les caractéristiques et les différences des modèles de la famille Mistral | Vidéo à venir | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 21 | [Construire avec les modèles Meta](./21-meta/README.md?WT.mc_id=academic-105485-koreyst) | **Apprendre :** Les caractéristiques et les différences des modèles de la famille Meta | Vidéo à venir | [En savoir plus](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | + +### 🌟 Remerciements spéciaux + +Remerciements spéciaux à [**John Aziz**](https://www.linkedin.com/in/john0isaac/) pour la création de toutes les Actions GitHub et workflows + +[**Bernhard Merkle**](https://www.linkedin.com/in/bernhard-merkle-738b73/) pour ses contributions clés à chaque leçon afin d'améliorer l'expérience des apprenants et du code. + +## 🎒 Autres cours + +Notre équipe produit d'autres cours ! Découvrez : + +- [ML pour les débutants](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst) +- [Science des données pour les débutants](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) +- [IA pour les débutants](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) +- [**NOUVEAU** Cybersécurité pour les débutants](https://github.com/microsoft/Security-101??WT.mc_id=academic-96948-sayoung) +- [Développement web pour les débutants](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst) +- [IoT pour les débutants](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst) +- [Développement XR pour les débutants](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst) +- [Maîtriser GitHub Copilot pour la programmation en binôme avec IA](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction basés sur l'IA. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des mauvaises interprétations résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/SECURITY.md b/translations/fr/SECURITY.md new file mode 100644 index 000000000..d0b2521e9 --- /dev/null +++ b/translations/fr/SECURITY.md @@ -0,0 +1,40 @@ +## Sécurité + +Microsoft prend la sécurité de nos produits logiciels et services très au sérieux, ce qui inclut tous les dépôts de code source gérés via nos organisations GitHub, qui incluent [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), et [nos organisations GitHub](https://opensource.microsoft.com/). + +Si vous pensez avoir trouvé une vulnérabilité de sécurité dans un dépôt appartenant à Microsoft qui répond à [la définition de vulnérabilité de sécurité de Microsoft](https://aka.ms/opensource/security/definition), veuillez nous en faire part comme décrit ci-dessous. + +## Signaler des problèmes de sécurité + +**Veuillez ne pas signaler de vulnérabilités de sécurité via les issues publiques de GitHub.** + +Au lieu de cela, veuillez les signaler au Microsoft Security Response Center (MSRC) à [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). + +Si vous préférez soumettre sans vous connecter, envoyez un email à [secure@microsoft.com](mailto:secure@microsoft.com). Si possible, chiffrez votre message avec notre clé PGP ; veuillez la télécharger depuis la [page de la clé PGP du Microsoft Security Response Center](https://aka.ms/opensource/security/pgpkey). + +Vous devriez recevoir une réponse dans les 24 heures. Si pour une raison quelconque vous ne recevez pas de réponse, veuillez faire un suivi par email pour vous assurer que nous avons bien reçu votre message initial. Des informations supplémentaires sont disponibles sur [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). + +Veuillez inclure les informations demandées ci-dessous (autant que vous pouvez fournir) pour nous aider à mieux comprendre la nature et l'étendue du problème potentiel : + + * Type de problème (par exemple, dépassement de tampon, injection SQL, script intersite, etc.) + * Chemins complets des fichiers source liés à la manifestation du problème + * L'emplacement du code source affecté (tag/branche/commit ou URL directe) + * Toute configuration spéciale requise pour reproduire le problème + * Instructions détaillées pour reproduire le problème + * Code de preuve de concept ou d'exploitation (si possible) + * Impact du problème, y compris comment un attaquant pourrait exploiter le problème + +Ces informations nous aideront à traiter votre rapport plus rapidement. + +Si vous signalez pour une prime de bug, des rapports plus complets peuvent contribuer à une récompense plus élevée. Veuillez consulter notre page [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) pour plus de détails sur nos programmes actifs. + +## Langues préférées + +Nous préférons que toutes les communications soient en anglais. + +## Politique + +Microsoft suit le principe de [Divulgation Coordonnée des Vulnérabilités](https://aka.ms/opensource/security/cvd). + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations cruciales, il est recommandé de faire appel à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/docs/_navbar.md b/translations/fr/docs/_navbar.md new file mode 100644 index 000000000..6185dffbb --- /dev/null +++ b/translations/fr/docs/_navbar.md @@ -0,0 +1,10 @@ +* Sélectionner la langue + + * [English](../../../../../../../..) + * [Chinois simplifié](../../../../../../../../translations/cn) + * [Chinois traditionnel](../../../../../../../../translations/tw) + * [Portugais](../../../../../../../../translations/pt-br) + * [Japonais](../../../../../../../../translations/ja-jp) + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatisée par intelligence artificielle. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction professionnelle humaine. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/docs/_sidebar.md b/translations/fr/docs/_sidebar.md new file mode 100644 index 000000000..15c6b2cef --- /dev/null +++ b/translations/fr/docs/_sidebar.md @@ -0,0 +1,5 @@ +- Prise en main + - [Introduction à l'IA générative](../01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst) + +**Avertissement** : +Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforcions 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 autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/ja/00-course-setup/README.md b/translations/ja/00-course-setup/README.md new file mode 100644 index 000000000..3654cd0a0 --- /dev/null +++ b/translations/ja/00-course-setup/README.md @@ -0,0 +1,153 @@ +# このコースを始めるにあたって + +このコースを始めて、生成AIを使ってどんなものを作れるか、ぜひ体験してみてください! + +成功を確実にするために、このページではセットアップ手順、技術要件、必要な場合のサポートの受け方を説明します。 + +## セットアップ手順 + +このコースを始めるには、以下の手順を完了する必要があります。 + +### 1. リポジトリをフォークする + +[このリポジトリ全体をフォーク](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst)して、自分のGitHubアカウントでコードを変更し、チャレンジを完了できるようにします。また、このリポジトリを[スター(🌟)](https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars?WT.mc_id=academic-105485-koreyst)することで、関連するリポジトリを見つけやすくなります。 + +### 2. コードスペースを作成する + +コードを実行する際の依存関係の問題を避けるために、このコースを[GitHub Codespaces](https://github.com/features/codespaces?WT.mc_id=academic-105485-koreyst)で実行することをお勧めします。 + +これは、フォークしたリポジトリの`Code`オプションを選択し、**Codespaces**オプションを選択することで作成できます。 + +![コードスペースを作成するためのボタンを示すダイアログ](../../../00-course-setup/images/who-will-pay.webp) + +### 3. APIキーの保管 + +アプリケーションを構築する際には、APIキーを安全に保管することが重要です。APIキーをコードに直接保存しないことをお勧めします。これらの情報を公開リポジトリにコミットすると、セキュリティ問題や悪意のあるユーザーによる不正なコストが発生する可能性があります。 + +## コンピュータでローカルに実行する方法 + +コンピュータでコードをローカルに実行するには、[Pythonのインストール](https://www.python.org/downloads/?WT.mc_id=academic-105485-koreyst)が必要です。 + +その後、リポジトリを使用するには、クローンする必要があります: + +```shell +git clone https://github.com/microsoft/generative-ai-for-beginners +cd generative-ai-for-beginners +``` + +すべてがチェックアウトされたら、開始できます! + +### Minicondaのインストール(オプション) + +[Miniconda](https://conda.io/en/latest/miniconda.html?WT.mc_id=academic-105485-koreyst)は、[Conda](https://docs.conda.io/en/latest?WT.mc_id=academic-105485-koreyst)、Python、およびいくつかのパッケージをインストールするための軽量インストーラーです。 +Conda自体はパッケージマネージャーであり、異なるPython[**仮想環境**](https://docs.python.org/3/tutorial/venv.html?WT.mc_id=academic-105485-koreyst)やパッケージのセットアップと切り替えを簡単にします。`pip`. + +You can follow the [MiniConda installation guide](https://docs.anaconda.com/free/miniconda/#quick-command-line-install?WT.mc_id=academic-105485-koreyst) to set it up. + +With Miniconda installed, you need to clone the [repository](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst) (if you haven't already) + +Next, you need to create a virtual environment. To do this with Conda, go ahead and create a new environment file (_environment.yml_). If you are following along using Codespaces, create this within the `.devcontainer` directory, thus `.devcontainer/environment.yml`で利用できないパッケージのインストールにも便利です。 + +以下のスニペットで環境ファイルを作成してください: + +```yml +name: +channels: + - defaults +dependencies: +- python= +- openai +- python-dotenv +- azure-ai-inference + +``` + +環境ファイルには必要な依存関係が指定されています。`` refers to the name you would like to use for your Conda environment, and `` is the version of Python you would like to use, for example, `3`はPythonの最新のメジャーバージョンです。 + +それが完了したら、以下のコマンドをコマンドライン/ターミナルで実行してConda環境を作成できます。 + +```bash +conda env create --name ai4beg --file .devcontainer/environment.yml # .devcontainer sub path applies to only Codespace setups +conda activate ai4beg +``` + +問題が発生した場合は、[Conda環境ガイド](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html?WT.mc_id=academic-105485-koreyst)を参照してください。 + +### Pythonサポート拡張機能を備えたVisual Studio Codeの使用 + +このコースでは、[Visual Studio Code (VS Code)](http://code.visualstudio.com/?WT.mc_id=academic-105485-koreyst)エディターを使用し、[Pythonサポート拡張機能](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-105485-koreyst)をインストールすることをお勧めします。ただし、これはあくまで推奨であり、必須要件ではありません。 + +> **Note**: コースリポジトリをVS Codeで開くと、プロジェクトをコンテナ内で設定するオプションがあります。これは、コースリポジトリ内にある[特別な`.devcontainer`](https://code.visualstudio.com/docs/devcontainers/containers?itemName=ms-python.python&WT.mc_id=academic-105485-koreyst)ディレクトリによるものです。詳細は後ほど説明します。 + +> **Note**: ディレクトリをクローンしてVS Codeで開くと、Pythonサポート拡張機能をインストールするように自動で提案されます。 + +> **Note**: VS Codeがリポジトリをコンテナで再オープンすることを提案した場合、ローカルにインストールされたPythonのバージョンを使用するために、この要求を拒否してください。 + +### ブラウザでJupyterを使用する + +[Jupyter環境](https://jupyter.org?WT.mc_id=academic-105485-koreyst)を使用して、ブラウザ内でプロジェクトに取り組むこともできます。クラシックJupyterおよび[Jupyter Hub](https://jupyter.org/hub?WT.mc_id=academic-105485-koreyst)の両方が、オートコンプリートやコードハイライトなどの機能を備えた快適な開発環境を提供します。 + +ローカルでJupyterを開始するには、ターミナル/コマンドラインに移動し、コースディレクトリにナビゲートして、以下を実行してください: + +```bash +jupyter notebook +``` + +または + +```bash +jupyterhub +``` + +これによりJupyterインスタンスが開始され、アクセスするためのURLがコマンドラインウィンドウに表示されます。 + +URLにアクセスすると、コースの概要が表示され、任意の`*.ipynb` file. For example, `08-building-search-applications/python/oai-solution.ipynb`. + +### Running in a container + +An alternative to setting everything up on your computer or Codespace is to use a [container](https://en.wikipedia.org/wiki/Containerization_(computing)?WT.mc_id=academic-105485-koreyst). The special `.devcontainer` folder within the course repository makes it possible for VS Code to set up the project within a container. Outside of Codespaces, this will require the installation of Docker, and quite frankly, it involves a bit of work, so we recommend this only to those with experience working with containers. + +One of the best ways to keep your API keys secure when using GitHub Codespaces is by using Codespace Secrets. Please follow the [Codespaces secrets management](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-secrets-for-your-codespaces?WT.mc_id=academic-105485-koreyst) guide to learn more about this. + +## Lessons and Technical Requirements + +The course has 6 concept lessons and 6 coding lessons. + +For the coding lessons, we are using the Azure OpenAI Service. You will need access to the Azure OpenAI service and an API key to run this code. You can apply to get access by [completing this application](https://azure.microsoft.com/products/ai-services/openai-service?WT.mc_id=academic-105485-koreyst). + +While you wait for your application to be processed, each coding lesson also includes a `README.md`ファイルに移動してコードと出力を表示することができます。 + +## Azure OpenAIサービスを初めて使用する場合 + +Azure OpenAIサービスを初めて使用する場合は、[Azure OpenAIサービスリソースを作成してデプロイする方法](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal&WT.mc_id=academic-105485-koreyst)に関するガイドに従ってください。 + +## OpenAI APIを初めて使用する場合 + +OpenAI APIを初めて使用する場合は、[インターフェースの作成と使用方法](https://platform.openai.com/docs/quickstart?context=pythont&WT.mc_id=academic-105485-koreyst)に関するガイドに従ってください。 + +## 他の学習者と交流する + +公式の[AIコミュニティDiscordサーバー](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst)に、他の学習者と出会うためのチャンネルを作成しました。これは、生成AIでスキルアップを目指す、志を同じくする起業家、開発者、学生などとネットワークを築く素晴らしい方法です。 + +[![Discordチャンネルに参加する](https://dcbadge.limes.pink/api/server/ByRwuEEgH4)](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) + +プロジェクトチームもこのDiscordサーバーに参加して学習者をサポートします。 + +## 貢献する + +このコースはオープンソースの取り組みです。改善点や問題点を見つけた場合は、[プルリクエスト](https://github.com/microsoft/generative-ai-for-beginners/pulls?WT.mc_id=academic-105485-koreyst)を作成するか、[GitHubの問題](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst)をログしてください。 + +プロジェクトチームはすべての貢献を追跡します。オープンソースに貢献することは、生成AIでのキャリアを築くための素晴らしい方法です。 + +ほとんどの貢献には、貢献者ライセンス契約(CLA)に同意する必要があります。これは、あなたがその権利を持ち、実際に貢献を使用する権利を私たちに与えることを宣言するものです。詳細については、[CLA、貢献者ライセンス契約のウェブサイト](https://cla.microsoft.com?WT.mc_id=academic-105485-koreyst)を参照してください。 + +プルリクエストを提出すると、CLA-botが自動的にCLAを提供する必要があるかどうかを判断し、PRに適切な装飾を施します(例:ラベル、コメント)。ボットが提供する指示に従ってください。CLAを提供するのは、すべてのリポジトリで一度だけ必要です。 + +このプロジェクトは、[Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/?WT.mc_id=academic-105485-koreyst)を採用しています。詳細は、行動規範FAQを読むか、[Email opencode](opencode@microsoft.com)に質問やコメントを送信してください。 + +## 始めましょう + +コースを完了するために必要な手順を完了したので、[生成AIとLLMの紹介](../01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst)から始めましょう。 + +**免責事項**: +この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを追求していますが、自動翻訳には誤りや不正確さが含まれる場合がありますのでご注意ください。原文はその言語における権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/00-course-setup/SETUP.md b/translations/ja/00-course-setup/SETUP.md new file mode 100644 index 000000000..4be680749 --- /dev/null +++ b/translations/ja/00-course-setup/SETUP.md @@ -0,0 +1,136 @@ +# 開発環境のセットアップ + +このリポジトリとコースは、Python3、.NET、Node.js、Javaの開発をサポートするユニバーサルランタイムを備えた[開発コンテナ](https://containers.dev?WT.mc_id=academic-105485-koreyst)で設定されています。関連する設定は、このリポジトリのルートにある`.devcontainer/`フォルダ内の`devcontainer.json`ファイルに定義されています。 + +開発コンテナを有効にするには、[GitHub Codespaces](https://docs.github.com/en/codespaces/overview?WT.mc_id=academic-105485-koreyst)(クラウドホスト型ランタイム用)または[Docker Desktop](https://docs.docker.com/desktop/?WT.mc_id=academic-105485-koreyst)(ローカルデバイスホスト型ランタイム用)で起動します。VS Code内での開発コンテナの動作についての詳細は[こちらのドキュメント](https://code.visualstudio.com/docs/devcontainers/containers?WT.mc_id=academic-105485-koreyst)を参照してください。 + +> [!TIP] +> 最小限の労力で素早く始めるために、GitHub Codespacesを使用することをお勧めします。個人アカウントには寛大な[無料使用枠](https://docs.github.com/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#monthly-included-storage-and-core-hours-for-personal-accounts?WT.mc_id=academic-105485-koreyst)が提供されます。クォータ使用を最大化するために、非アクティブなコードスペースを停止または削除するための[タイムアウト](https://docs.github.com/codespaces/setting-your-user-preferences/setting-your-timeout-period-for-github-codespaces?WT.mc_id=academic-105485-koreyst)を設定します。 + +## 1. 課題の実行 + +各レッスンには、Python、.NET/C#、Java、JavaScript/TypeScriptなど、1つ以上のプログラミング言語で提供される_オプション_の課題があります。このセクションでは、それらの課題を実行するための一般的なガイダンスを提供します。 + +### 1.1 Pythonの課題 + +Pythonの課題は、アプリケーション(`.py`ファイル)またはJupyterノートブック(`.ipynb`ファイル)として提供されます。 +- ノートブックを実行するには、Visual Studio Codeで開き、_Select Kernel_(右上)をクリックして表示されるデフォルトのPython 3オプションを選択します。その後、_Run All_を実行してノートブックを実行できます。 +- コマンドラインからPythonアプリケーションを実行するには、課題に特化した指示に従い、正しいファイルを選択し、必要な引数を提供してください。 + +## 2. プロバイダーの設定 + +課題は、OpenAI、Azure、Hugging Faceのようなサポートされているサービスプロバイダーを通じて、1つ以上の大規模言語モデル(LLM)デプロイメントに対して動作するように設定される場合もあります。これらは、適切な資格情報(APIキーまたはトークン)でプログラム的にアクセスできる_ホストエンドポイント_(API)を提供します。このコースでは、以下のプロバイダーについて説明します: + + - 多様なモデルを含むコアGPTシリーズを持つ[OpenAI](https://platform.openai.com/docs/models?WT.mc_id=academic-105485-koreyst)。 + - エンタープライズ対応に重点を置いたOpenAIモデルを提供する[Azure OpenAI](https://learn.microsoft.com/azure/ai-services/openai/?WT.mc_id=academic-105485-koreyst)。 + - オープンソースモデルと推論サーバーを提供する[Hugging Face](https://huggingface.co/docs/hub/index?WT.mc_id=academic-105485-koreyst)。 + +**これらの演習には自分のアカウントを使用する必要があります**。課題はオプションなので、興味に応じて1つ、すべて、またはプロバイダーを設定しないことを選択できます。サインアップのためのガイダンスは以下の通りです: + +| サインアップ | コスト | APIキー | プレイグラウンド | コメント | +|:---|:---|:---|:---|:---| +| [OpenAI](https://platform.openai.com/signup?WT.mc_id=academic-105485-koreyst)| [料金](https://openai.com/pricing#language-models?WT.mc_id=academic-105485-koreyst)| [プロジェクトベース](https://platform.openai.com/api-keys?WT.mc_id=academic-105485-koreyst) | [ノーコード、Web](https://platform.openai.com/playground?WT.mc_id=academic-105485-koreyst) | 複数のモデルが利用可能 | +| [Azure](https://aka.ms/azure/free?WT.mc_id=academic-105485-koreyst)| [料金](https://azure.microsoft.com/pricing/details/cognitive-services/openai-service/?WT.mc_id=academic-105485-koreyst)| [SDKクイックスタート](https://learn.microsoft.com/azure/ai-services/openai/quickstart?WT.mc_id=academic-105485-koreyst)| [スタジオクイックスタート](https://learn.microsoft.com/azure/ai-services/openai/quickstart?WT.mc_id=academic-105485-koreyst) | [アクセスのために事前に申し込む必要あり](https://learn.microsoft.com/azure/ai-services/openai/?WT.mc_id=academic-105485-koreyst)| +| [Hugging Face](https://huggingface.co/join?WT.mc_id=academic-105485-koreyst) | [料金](https://huggingface.co/pricing) | [アクセス トークン](https://huggingface.co/docs/hub/security-tokens?WT.mc_id=academic-105485-koreyst) | [Hugging Chat](https://huggingface.co/chat/?WT.mc_id=academic-105485-koreyst)| [Hugging Chatは限られたモデルを持つ](https://huggingface.co/chat/models?WT.mc_id=academic-105485-koreyst) | +| | | | | | + +以下の指示に従って、このリポジトリを異なるプロバイダーで使用するために_設定_します。特定のプロバイダーを必要とする課題には、ファイル名に以下のタグのいずれかが含まれます: + - `aoai` - Azure OpenAIエンドポイントとキーが必要 + - `oai` - OpenAIエンドポイントとキーが必要 + - `hf` - Hugging Faceトークンが必要 + +1つ、すべて、またはプロバイダーを設定しないことができます。関連する課題は、資格情報がない場合にエラーが発生します。 + +### 2.1. `.env`ファイルを作成 + +すでに上記のガイダンスを読み、関連するプロバイダーにサインアップし、必要な認証資格情報(API_KEYまたはトークン)を取得したと仮定します。Azure OpenAIの場合、少なくとも1つのGPTモデルがデプロイされたAzure OpenAIサービス(エンドポイント)の有効なデプロイメントを持っていると仮定します。 + +次のステップは、**ローカル環境変数**を以下のように設定することです: + +1. ルートフォルダに、以下のような内容を持つ`.env.copy`ファイルがあるか確認してください: + + ```bash + # OpenAI Provider + OPENAI_API_KEY='' + + ## Azure OpenAI + AZURE_OPENAI_API_VERSION='2024-02-01' # Default is set! + AZURE_OPENAI_API_KEY='' + AZURE_OPENAI_ENDPOINT='' + AZURE_OPENAI_DEPLOYMENT='' + AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT='' + + ## Hugging Face + HUGGING_FACE_API_KEY='' + ``` + +2. 下記のコマンドを使用してそのファイルを`.env`にコピーします。このファイルは_gitignore_されており、秘密を安全に保ちます。 + + ```bash + cp .env.copy .env + ``` + +3. 次のセクションで説明するように、値を入力(右側のプレースホルダーを置き換え)します。 + +3. (オプション)GitHub Codespacesを使用している場合、このリポジトリに関連付けられた_Codespaces secrets_として環境変数を保存するオプションがあります。この場合、ローカルの.envファイルを設定する必要はありません。**ただし、このオプションはGitHub Codespacesを使用している場合にのみ機能します。** Docker Desktopを使用する場合は、.envファイルを設定する必要があります。 + +### 2.2. `.env`ファイルに値を入力 + +変数名が何を表しているのかを理解するために、簡単に見てみましょう: + +| 変数 | 説明 | +| :--- | :--- | +| HUGGING_FACE_API_KEY | プロファイルで設定したユーザーアクセス トークンです | +| OPENAI_API_KEY | 非Azure OpenAIエンドポイントでサービスを使用するための認証キーです | +| AZURE_OPENAI_API_KEY | そのサービスを使用するための認証キーです | +| AZURE_OPENAI_ENDPOINT | Azure OpenAIリソースのデプロイされたエンドポイントです | +| AZURE_OPENAI_DEPLOYMENT | _テキスト生成_モデルのデプロイメントエンドポイントです | +| AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT | _テキスト埋め込み_モデルのデプロイメントエンドポイントです | +| | | + +注意: 最後の2つのAzure OpenAI変数は、チャットコンプリート(テキスト生成)とベクトル検索(埋め込み)に対するデフォルトモデルを反映しています。それらを設定するための指示は、関連する課題で定義されます。 + +### 2.3 Azureの設定: ポータルから + +Azure OpenAIエンドポイントとキーの値は、[Azureポータル](https://portal.azure.com?WT.mc_id=academic-105485-koreyst)で見つけることができますので、そこから始めましょう。 + +1. [Azureポータル](https://portal.azure.com?WT.mc_id=academic-105485-koreyst)にアクセスします。 +1. サイドバー(左側のメニュー)の**キーとエンドポイント**オプションをクリックします。 +1. **キーを表示**をクリックすると、KEY 1、KEY 2、およびエンドポイントが表示されます。 +1. KEY 1の値をAZURE_OPENAI_API_KEYとして使用します。 +1. エンドポイントの値をAZURE_OPENAI_ENDPOINTとして使用します。 + +次に、デプロイした特定のモデルのエンドポイントが必要です。 + +1. Azure OpenAIリソースのサイドバー(左側のメニュー)で**モデルデプロイメント**オプションをクリックします。 +1. 目的のページで**デプロイメントの管理**をクリックします。 + +これにより、Azure OpenAI Studioのウェブサイトに移動し、以下で説明する他の値を見つけます。 + +### 2.4 Azureの設定: スタジオから + +1. 上述のように**リソースから**[Azure OpenAI Studio](https://oai.azure.com?WT.mc_id=academic-105485-koreyst)に移動します。 +1. 現在デプロイされているモデルを表示するために**デプロイメント**タブ(サイドバー、左)をクリックします。 +1. 希望するモデルがデプロイされていない場合は、**新しいデプロイメントを作成**を使用してデプロイします。 +1. _テキスト生成_モデルが必要です - **gpt-35-turbo**をお勧めします。 +1. _テキスト埋め込み_モデルが必要です - **text-embedding-ada-002**をお勧めします。 + +環境変数を使用した_デプロイメント名_を反映するように更新します。これは通常、モデル名と同じですが、明示的に変更した場合を除きます。したがって、例えば、次のようになるかもしれません: + +```bash +AZURE_OPENAI_DEPLOYMENT='gpt-35-turbo' +AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT='text-embedding-ada-002' +``` + +**完了したら.envファイルを保存することを忘れないでください**。ファイルを終了し、ノートブックを実行するための指示に戻ることができます。 + +### 2.5 OpenAIの設定: プロファイルから + +OpenAI APIキーは、[OpenAIアカウント](https://platform.openai.com/api-keys?WT.mc_id=academic-105485-koreyst)で見つけることができます。まだ持っていない場合は、アカウントにサインアップしてAPIキーを作成できます。キーを取得したら、それを`.env`ファイルの`OPENAI_API_KEY`変数に入力して使用できます。 + +### 2.6 Hugging Faceの設定: プロファイルから + +Hugging Faceトークンは、[アクセス トークン](https://huggingface.co/settings/tokens?WT.mc_id=academic-105485-koreyst)の下にあるプロファイルで見つけることができます。これらを公に投稿または共有しないでください。このプロジェクトの使用のために新しいトークンを作成し、それを`.env`ファイルの`HUGGING_FACE_API_KEY`変数にコピーします。_注意:_ これは技術的にはAPIキーではありませんが、認証に使用されるため、一貫性のためにその命名規則を維持しています。 + +**免責事項**: +この文書は、機械翻訳AIサービスを使用して翻訳されています。正確さを期すために努力していますが、自動翻訳には誤りや不正確さが含まれる場合があります。元の言語の文書を公式な情報源として考慮してください。重要な情報については、プロの人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/01-introduction-to-genai/README.md b/translations/ja/01-introduction-to-genai/README.md new file mode 100644 index 000000000..184dd7c79 --- /dev/null +++ b/translations/ja/01-introduction-to-genai/README.md @@ -0,0 +1,131 @@ +# ジェネレーティブAIと大規模言語モデルの紹介 + +[![ジェネレーティブAIと大規模言語モデルの紹介](../../../translated_images/01-lesson-banner.png?WT.e847a56bbd30dfd9341d21c4e957c3bcd9de94d06aa5bc91692a69cb1af2c994.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson-1-gh?WT.mc_id=academic-105485-koreyst) + +_(このレッスンのビデオを見るには上の画像をクリックしてください)_ + +ジェネレーティブAIは、テキスト、画像、その他のコンテンツを生成できる人工知能です。この技術の素晴らしい点は、AIを民主化することです。誰でも自然言語で書かれた文のような簡単なテキストプロンプトを使って利用できます。JavaやSQLのような言語を学ぶ必要はなく、自分の言葉で何をしたいかを述べるだけで、AIモデルから提案が得られます。レポートの作成や理解、アプリケーションの作成など、すべてが数秒で可能になります。 + +このカリキュラムでは、教育の世界で新しいシナリオを切り開くために私たちのスタートアップがジェネレーティブAIをどのように活用しているか、そしてその応用に伴う社会的影響や技術的制限に関連する課題にどのように対処しているかを探ります。 + +## はじめに + +このレッスンでは以下を取り上げます: + +- ビジネスシナリオの紹介:私たちのスタートアップのアイデアとミッション。 +- ジェネレーティブAIと現在の技術的背景への到達。 +- 大規模言語モデルの内部構造。 +- 大規模言語モデルの主な能力と実用的なユースケース。 + +## 学習目標 + +このレッスンを終えると、以下を理解できます: + +- ジェネレーティブAIとは何か、大規模言語モデルがどのように機能するか。 +- 教育シナリオに焦点を当てた異なるユースケースで大規模言語モデルをどのように活用できるか。 + +## シナリオ:私たちの教育スタートアップ + +ジェネレーティブ人工知能(AI)は、かつて不可能と考えられていた境界を押し広げるAI技術の頂点を表しています。ジェネレーティブAIモデルにはいくつかの能力と応用がありますが、このカリキュラムでは、架空のスタートアップを通じて教育をどのように革新しているかを探ります。このスタートアップを_私たちのスタートアップ_と呼びます。私たちのスタートアップは教育分野で以下のような野心的なミッションステートメントを持っています。 + +> _世界規模で学習のアクセシビリティを向上させ、教育への公平なアクセスを保証し、学習者のニーズに応じた個別の学習体験を提供すること_ + +私たちのスタートアップチームは、この目標を達成するには、現代の最も強力なツールの1つである大規模言語モデル(LLM)を活用しなければならないことを認識しています。 + +ジェネレーティブAIは、学生が24時間利用可能な仮想教師から膨大な情報と例を提供され、教師が革新的なツールを活用して学生を評価しフィードバックを与えることができるようになり、学習と教育の方法を革新すると期待されています。 + +![モニターを見ている5人の若い学生 - DALLE2による画像](../../../translated_images/students-by-DALLE2.png?WT.540d623be2689660f18d0c126177502c651e2269597164cc09b60d7d90b830cf.ja.mc_id=academic-105485-koreyst) + +まず、カリキュラム全体で使用する基本的な概念と用語を定義しましょう。 + +## ジェネレーティブAIはどのようにして生まれたのか? + +最近のジェネレーティブAIモデルの発表によって生まれた驚くべき_話題_にもかかわらず、この技術は数十年にわたって開発されており、最初の研究努力は60年代にさかのぼります。現在、AIは人間の認知能力を持ち、例えば[OpenAI ChatGPT](https://openai.com/chatgpt)や[Bing Chat](https://www.microsoft.com/edge/features/bing-chat?WT.mc_id=academic-105485-koreyst)のように会話が可能です。Bing Chatは、Bingの検索にGPTモデルを使用しています。 + +少し戻ってみると、最初のAIプロトタイプは、専門家グループから抽出された知識ベースに基づいたタイプライター式のチャットボットで構成されていました。知識ベースの回答は、入力テキストに現れるキーワードによってトリガーされました。しかし、このタイプライター式のチャットボットを使用するアプローチは、すぐにスケールしないことが明らかになりました。 + +### AIへの統計的アプローチ:機械学習 + +90年代に転機が訪れ、テキスト分析に統計的アプローチが適用されました。これにより、データからパターンを学習する新しいアルゴリズムが開発されました。これらのアルゴリズムは、機械学習と呼ばれ、明示的にプログラムされることなく、データからパターンを学習できるようになりました。このアプローチにより、機械が人間の言語理解をシミュレートできるようになりました。統計モデルは、テキストとラベルのペアに基づいてトレーニングされ、未知の入力テキストをメッセージの意図を表す事前定義のラベルで分類できるようになりました。 + +### ニューラルネットワークと現代のバーチャルアシスタント + +最近では、より大量のデータとより複雑な計算を処理できるハードウェアの技術的進化がAI分野の研究を促進し、高度な機械学習アルゴリズムの開発につながりました。これらはニューラルネットワークやディープラーニングアルゴリズムと呼ばれます。 + +ニューラルネットワーク(特にリカレントニューラルネットワーク - RNN)は、自然言語処理を大幅に向上させ、文中の単語の文脈を重視してテキストの意味をより意味のある方法で表現することを可能にしました。 + +これは、新世紀の最初の10年間に生まれたバーチャルアシスタントを支えた技術であり、人間の言語を解釈し、ニーズを特定し、それを満たすために行動を実行するのに非常に優れています。たとえば、事前定義のスクリプトで回答したり、サードパーティのサービスを利用したりすることができます。 + +### 現在、ジェネレーティブAI + +これが、今日のジェネレーティブAIに至るまでの道のりです。ジェネレーティブAIは、ディープラーニングの一部と見なすことができます。 + +![AI、ML、DL、ジェネレーティブAI](../../../translated_images/AI-diagram.png?WT.e126d57e1a443697cd851d5d04d66753225b4d910f4aff65f9f28215b528471a.ja.mc_id=academic-105485-koreyst) + +AI分野での数十年にわたる研究の結果、新しいモデルアーキテクチャである_トランスフォーマー_がRNNの限界を克服し、はるかに長いテキストシーケンスを入力として受け取ることができるようになりました。トランスフォーマーは注意メカニズムに基づいており、モデルが受け取る入力に異なる重みを与え、テキストシーケンスの順序に関係なく、最も関連性の高い情報が集中している部分に「より注意を払う」ことを可能にします。 + +最近のジェネレーティブAIモデルの多くは、大規模言語モデル(LLM)とも呼ばれ、テキスト入力と出力を扱うため、このアーキテクチャに基づいています。これらのモデルの興味深い点は、書籍、記事、ウェブサイトなどの多様なソースからの膨大な量のラベルなしデータでトレーニングされているため、さまざまなタスクに適応でき、文法的に正しいテキストを創造性を持って生成できることです。つまり、機械が入力テキストを「理解」する能力を驚くほど向上させただけでなく、人間の言語でオリジナルの応答を生成する能力も実現しました。 + +## 大規模言語モデルはどのように機能するのか? + +次の章では、さまざまな種類のジェネレーティブAIモデルを探りますが、今のところは大規模言語モデルがどのように機能するのか、OpenAI GPT(Generative Pre-trained Transformer)モデルに焦点を当てて見てみましょう。 + +- **トークナイザー、テキストから数値へ**: 大規模言語モデルはテキストを入力として受け取り、テキストを出力として生成します。しかし、統計モデルであるため、テキストシーケンスよりも数値での作業がはるかに得意です。そのため、モデルへのすべての入力はコアモデルで使用される前にトークナイザーによって処理されます。トークンは可変文字数のテキストのチャンクであり、トークナイザーの主なタスクは入力をトークンの配列に分割することです。その後、各トークンは元のテキストチャンクの整数エンコーディングであるトークンインデックスにマッピングされます。 + +![トークナイゼーションの例](../../../translated_images/tokenizer-example.png?WT.3b4be927057ceb39216ffc617cde2fd4d843e0d7557fc81d08a0018831f601ed.ja.mc_id=academic-105485-koreyst) + +- **出力トークンの予測**: 入力としてn個のトークンを与えられると(モデルによって最大nは異なります)、モデルは1つのトークンを出力として予測できます。このトークンは次の反復の入力に組み込まれ、拡大ウィンドウパターンでより良いユーザー体験を提供し、1つ(または複数)の文を回答として得ることができます。これにより、ChatGPTを使用したことがある場合、時々文の途中で止まるように見える理由が説明されます。 + +- **選択プロセス、確率分布**: 出力トークンは、現在のテキストシーケンスの後に発生する確率に基づいてモデルによって選択されます。これは、モデルがトレーニングに基づいてすべての可能な「次のトークン」に対する確率分布を予測するためです。しかし、結果の分布から最も高い確率のトークンが常に選ばれるわけではありません。この選択にはランダム性の度合いが追加され、モデルが非決定論的な方法で動作するようになります。同じ入力に対して同じ出力を得るわけではありません。このランダム性の度合いは、創造的思考のプロセスをシミュレートするために追加され、温度と呼ばれるモデルパラメーターを使用して調整できます。 + +## 私たちのスタートアップはどのように大規模言語モデルを活用できるのか? + +大規模言語モデルの内部構造をよりよく理解したので、彼らが非常に得意とする最も一般的なタスクのいくつかを、私たちのビジネスシナリオに目を向けて実際の例を見てみましょう。大規模言語モデルの主な能力は、_自然言語で書かれたテキスト入力からテキストをゼロから生成する_ことです。 + +では、どのようなテキスト入力と出力があるのでしょうか? +大規模言語モデルの入力はプロンプトとして知られており、出力は完了として知られています。この用語は、現在の入力を完了するために次のトークンを生成するモデルのメカニズムを指します。プロンプトとは何か、どのように設計すればモデルから最も多くの成果を得られるかを詳しく掘り下げますが、今のところ、プロンプトには以下が含まれることがあります: + +- モデルから期待する出力の種類を指定する**指示**。この指示には、例や追加のデータが含まれることがあります。 + + 1. 記事、書籍、製品レビューなどの要約と、非構造化データからの洞察の抽出。 + + ![要約の例](../../../translated_images/summarization-example.png?WT.cf0bac4d43b9de29ec37e1b7707d9bd67e030f4e884a0ae778c6a3c36be77d79.ja.mc_id=academic-105485-koreyst) + + 2. 記事、エッセイ、課題などの創造的なアイデアとデザイン。 + + ![創造的な文章の例](../../../translated_images/creative-writing-example.png?WT.04b03c92f46ed96df1138828e37760ac81e06eaa8602de8c4b175a9c514c9a14.ja.mc_id=academic-105485-koreyst) + +- エージェントとの会話形式で尋ねられる**質問**。 + + ![会話の例](../../../translated_images/conversation-example.png?WT.f904fd4c48fbf695b8e5d334e1ec02d66830bbc679ad4b5195f1c563e9bfbdc1.ja.mc_id=academic-105485-koreyst) + +- 暗黙的に執筆支援を求める**テキストの一部**。 + + ![テキスト補完の例](../../../translated_images/text-completion-example.png?WT.9a641431b14ebbbcaa7d22def9729cf8cc7ab358b1dbc948653e43af47e41f73.ja.mc_id=academic-105485-koreyst) + +- 特定のタスクを実行するコードの生成を求めるコメントや、説明と文書化を求める**コードの一部**。 + + ![コーディングの例](../../../translated_images/coding-example.png?WT.75933a45164ffb74ffbb4a72c8f77b0f76ebcdc676a58ad2871de5d32db63515.ja.mc_id=academic-105485-koreyst) + +上記の例は非常に単純であり、大規模言語モデルの能力を網羅的に示すものではありません。教育の文脈に限定されるものではありませんが、ジェネレーティブAIを使用する潜在的な可能性を示すものです。 + +また、ジェネレーティブAIモデルの出力は完璧ではなく、時にはモデルの創造性が逆効果を生み、現実を歪めたような出力や攻撃的な出力になることがあります。ジェネレーティブAIは知能を持っているわけではありません。少なくとも批判的かつ創造的な推論や感情的な知能を含む包括的な知能の定義においてはそうではありません。それは決定論的ではなく、信頼性もありません。誤った参照や内容、発言が正しい情報と組み合わされ、説得力と自信を持って提示されることがあるからです。次のレッスンでは、これらの制限に対処し、それを軽減するために何ができるかを見ていきます。 + +## 課題 + +あなたの課題は、[ジェネレーティブAI](https://en.wikipedia.org/wiki/Generative_artificial_intelligence?WT.mc_id=academic-105485-koreyst)についてさらに調べ、現在ジェネレーティブAIが存在しない分野を特定することです。従来の方法とは異なる影響は何でしょうか?新しいことができるようになったのか、それとも速くなったのか?あなたの夢のAIスタートアップがどのように見えるかについて300語の要約を書き、「問題」、「AIの使用方法」、「影響」、およびオプションでビジネスプランのような見出しを含めてください。 + +このタスクを実行した場合、Microsoftのインキュベーター、[Microsoft for Startups Founders Hub](https://www.microsoft.com/startups?WT.mc_id=academic-105485-koreyst)に応募する準備が整っているかもしれません。Azure、OpenAI、メンタリングなどのクレジットを提供していますので、ぜひチェックしてみてください! + +## 知識チェック + +大規模言語モデルについて正しいのはどれですか? + +1. 毎回同じ応答が得られます。 +2. 完璧に物事を行い、数を追加したり、動作するコードを生成したりするのが得意です。 +3. 同じプロンプトを使用しても応答が異なる場合があります。また、テキストやコードの最初の草稿を提供するのにも優れていますが、結果を改善する必要があります。 + +A: 3、LLMは非決定論的であり、応答は異なります。ただし、温度設定を使用してそのばらつきを制御できます。また、完璧に物事を行うことを期待すべきではなく、あなたのために重い作業を行うためにここにいるので、最初の試みが良 + +**免責事項**: +この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを期すよう努めておりますが、自動翻訳には誤りや不正確さが含まれる場合がありますのでご注意ください。元の文書はその言語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は一切責任を負いません。 \ No newline at end of file diff --git a/translations/ja/02-exploring-and-comparing-different-llms/README.md b/translations/ja/02-exploring-and-comparing-different-llms/README.md new file mode 100644 index 000000000..8e0367cf9 --- /dev/null +++ b/translations/ja/02-exploring-and-comparing-different-llms/README.md @@ -0,0 +1,203 @@ +# 異なるLLMの探求と比較 + +[![異なるLLMの探求と比較](../../../translated_images/02-lesson-banner.png?WT.96d85175e46909d65f6895923ed5f3ad0ae5e874792ccad49542fcfe8ebd12dd.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson2-gh?WT.mc_id=academic-105485-koreyst) + +> _このレッスンのビデオを見るには、上の画像をクリックしてください_ + +前回のレッスンでは、生成AIがどのように技術の風景を変えているか、LLM(大規模言語モデル)がどのように機能するか、そして私たちのスタートアップのようなビジネスがどのようにそれらを適用して成長できるかを学びました。この章では、異なるタイプのLLMを比較してその利点と欠点を理解します。 + +私たちのスタートアップの次のステップは、現在のLLMの状況を探求し、どのモデルが私たちのユースケースに適しているかを理解することです。 + +## はじめに + +このレッスンでは以下をカバーします: + +- 現在の状況におけるさまざまなタイプのLLM。 +- Azureでユースケースに合わせて異なるモデルをテスト、反復、比較する方法。 +- LLMをデプロイする方法。 + +## 学習目標 + +このレッスンを完了すると、次のことができるようになります: + +- ユースケースに適したモデルを選択する。 +- モデルのテスト、反復、性能向上の方法を理解する。 +- ビジネスがモデルをデプロイする方法を知る。 + +## 異なるタイプのLLMを理解する + +LLMはそのアーキテクチャ、トレーニングデータ、ユースケースに基づいてさまざまに分類できます。これらの違いを理解することで、スタートアップはシナリオに適したモデルを選択し、テスト、反復、性能向上の方法を理解できます。 + +LLMモデルには多くの種類があり、使用目的、データ、予算などによって選択が変わります。 + +テキスト、音声、ビデオ、画像生成などの目的によって、異なるタイプのモデルを選択することがあります。 + +- **音声と音声認識**。この目的には、Whisperタイプのモデルが最適です。これらは汎用的で音声認識を目的としています。多言語の音声認識を行うことができます。[Whisperタイプのモデルについてはこちらを参照](https://platform.openai.com/docs/models/whisper?WT.mc_id=academic-105485-koreyst)。 + +- **画像生成**。画像生成には、DALL-EとMidjourneyがよく知られた選択肢です。DALL-EはAzure OpenAIで提供されています。[DALL-Eについてはこちらを参照](https://platform.openai.com/docs/models/dall-e?WT.mc_id=academic-105485-koreyst)し、このカリキュラムの第9章でも詳しく説明しています。 + +- **テキスト生成**。ほとんどのモデルはテキスト生成に特化しており、GPT-3.5からGPT-4まで多くの選択肢があります。コストは異なり、GPT-4が最も高価です。[Azure OpenAIのプレイグラウンド](https://oai.azure.com/portal/playground?WT.mc_id=academic-105485-koreyst)で能力とコストに応じてどのモデルが最適かを評価する価値があります。 + +- **マルチモダリティ**。入力と出力で複数のデータタイプを扱う場合は、[gpt-4 turbo with visionやgpt-4o](https://learn.microsoft.com/azure/ai-services/openai/concepts/models#gpt-4-and-gpt-4-turbo-models?WT.mc_id=academic-105485-koreyst)などのモデルを検討することができます。これらは自然言語処理と視覚理解を組み合わせ、マルチモーダルインターフェースを通じてのインタラクションを可能にします。 + +モデルを選択することは、基本的な能力を得ることを意味しますが、それだけでは十分でないことがあります。企業特有のデータをLLMに伝える必要がある場合もあります。これに対するアプローチは複数あり、次のセクションで詳しく説明します。 + +### 基盤モデルとLLM + +基盤モデルという用語は[スタンフォードの研究者によって作られ](https://arxiv.org/abs/2108.07258?WT.mc_id=academic-105485-koreyst)、以下のような基準に従うAIモデルとして定義されています: + +- **教師なし学習または自己教師あり学習を使用して訓練されている**。これは、ラベルのないマルチモーダルデータで訓練され、人間の注釈やラベル付けを必要としないことを意味します。 +- **非常に大きなモデルである**。非常に深いニューラルネットワークに基づき、数十億のパラメータで訓練されています。 +- **他のモデルの‘基盤’として機能することを意図している**。これは、他のモデルをその上に構築するための出発点として使用できることを意味し、ファインチューニングによって実現されます。 + +![基盤モデルとLLM](../../../translated_images/FoundationModel.png?WT.9690c2a9f6be278baf730a5b26ea901ac6d6ede04cad555ef2b59d774ba557eb.ja.mc_id=academic-105485-koreyst) + +画像出典: [Essential Guide to Foundation Models and Large Language Models | by Babar M Bhatti | Medium](https://thebabar.medium.com/essential-guide-to-foundation-models-and-large-language-models-27dab58f7404) + +この区別をさらに明確にするために、ChatGPTを例にとってみましょう。ChatGPTの最初のバージョンを構築するために、GPT-3.5というモデルが基盤モデルとして使用されました。これは、OpenAIがチャット特有のデータを使用して、チャットボットのような会話シナリオで優れた性能を発揮するように特化したバージョンのGPT-3.5を作成したことを意味します。 + +![基盤モデル](../../../translated_images/Multimodal.png?WT.29151b07403f77b38d7dc2a3069f4c171198d59c9df6bdfccd4326c209db4432.ja.mc_id=academic-105485-koreyst) + +画像出典: [2108.07258.pdf (arxiv.org)](https://arxiv.org/pdf/2108.07258.pdf?WT.mc_id=academic-105485-koreyst) + +### オープンソースとプロプライエタリモデル + +LLMを分類するもう一つの方法は、それがオープンソースかプロプライエタリかということです。 + +オープンソースモデルは、一般に公開され、誰でも使用できるモデルです。これらは、モデルを作成した会社や研究コミュニティによって提供されることが多いです。これらのモデルは、LLMのさまざまなユースケースに合わせて検査、修正、カスタマイズすることが許可されています。しかし、生産用途に最適化されていない場合があり、プロプライエタリモデルほどの性能を持たないこともあります。また、オープンソースモデルへの資金提供は限られている場合があり、長期間のメンテナンスや最新の研究の更新が行われないこともあります。人気のあるオープンソースモデルの例には、[Alpaca](https://crfm.stanford.edu/2023/03/13/alpaca.html?WT.mc_id=academic-105485-koreyst)、[Bloom](https://huggingface.co/bigscience/bloom)、[LLaMA](https://llama.meta.com)などがあります。 + +プロプライエタリモデルは、企業が所有し、一般には公開されていないモデルです。これらのモデルは生産用途に最適化されていることが多いです。しかし、異なるユースケースに合わせて検査、修正、カスタマイズすることは許可されていません。また、無料で利用できない場合があり、利用にはサブスクリプションや支払いが必要なこともあります。また、モデルの訓練に使用されたデータに対してユーザーがコントロールできないため、データのプライバシーとAIの責任ある使用に対するモデル所有者のコミットメントを信頼する必要があります。人気のあるプロプライエタリモデルの例には、[OpenAI models](https://platform.openai.com/docs/models/overview?WT.mc_id=academic-105485-koreyst)、[Google Bard](https://sapling.ai/llm/bard?WT.mc_id=academic-105485-koreyst)、[Claude 2](https://www.anthropic.com/index/claude-2?WT.mc_id=academic-105485-koreyst)などがあります。 + +### 埋め込み、画像生成、テキストとコード生成 + +LLMは生成する出力によっても分類されます。 + +埋め込みは、テキストを数値形式、すなわち入力テキストの数値表現に変換する一連のモデルです。埋め込みは、単語や文の関係を理解しやすくし、分類モデルや数値データでより良い性能を発揮するクラスタリングモデルなど、他のモデルの入力として利用できます。埋め込みモデルは、データが豊富な代替タスク用に構築されたモデルであり、その後、他の下流タスクのためにモデルの重み(埋め込み)が再利用される転移学習によく使用されます。このカテゴリの例としては、[OpenAI embeddings](https://platform.openai.com/docs/models/embeddings?WT.mc_id=academic-105485-koreyst)があります。 + +![埋め込み](../../../translated_images/Embedding.png?WT.15a2282d046c6d94a54f553fa9e7f19e3ef0e65f9eb05f4d476a5d28b2dead18.ja.mc_id=academic-105485-koreyst) + +画像生成モデルは、画像を生成するモデルです。これらのモデルは、画像編集、画像合成、画像翻訳によく使用されます。画像生成モデルは、[LAION-5B](https://laion.ai/blog/laion-5b/?WT.mc_id=academic-105485-koreyst)のような大規模な画像データセットで訓練され、新しい画像を生成したり、既存の画像をインペインティング、超解像、カラー化技術で編集するために使用されます。例としては、[DALL-E-3](https://openai.com/dall-e-3?WT.mc_id=academic-105485-koreyst)や[Stable Diffusion models](https://github.com/Stability-AI/StableDiffusion?WT.mc_id=academic-105485-koreyst)があります。 + +![画像生成](../../../translated_images/Image.png?WT.6a1995ff7d9be5a713e6aaee5f1625f31620756937c283e292ef5ffe1e30ed11.ja.mc_id=academic-105485-koreyst) + +テキストとコード生成モデルは、テキストやコードを生成するモデルです。これらのモデルは、テキスト要約、翻訳、質問応答によく使用されます。テキスト生成モデルは、[BookCorpus](https://www.cv-foundation.org/openaccess/content_iccv_2015/html/Zhu_Aligning_Books_and_ICCV_2015_paper.html?WT.mc_id=academic-105485-koreyst)のような大規模なテキストデータセットで訓練され、新しいテキストを生成したり、質問に答えるために使用されます。コード生成モデルは、[CodeParrot](https://huggingface.co/codeparrot?WT.mc_id=academic-105485-koreyst)のように、GitHubのような大規模なコードデータセットで訓練され、新しいコードを生成したり、既存のコードのバグを修正するために使用されます。 + +![テキストとコード生成](../../../translated_images/Text.png?WT.b55b7b9b96faac1d758fb555436c56c5a323a55743b75e70198160caca3fb73c.ja.mc_id=academic-105485-koreyst) + +### エンコーダ-デコーダとデコーダのみ + +LLMの異なるアーキテクチャについて話すために、アナロジーを使いましょう。 + +あなたのマネージャーが学生のためのクイズを書くタスクをあなたに与えたと想像してください。あなたには2人の同僚がいて、一人はコンテンツを作成し、もう一人はそれをレビューします。 + +コンテンツクリエーターはデコーダのみのモデルのようなもので、トピックを見てすでに書かれた内容を見てからコースを書くことができます。彼らは魅力的で情報豊富なコンテンツを書くのが得意ですが、トピックや学習目標を理解するのは得意ではありません。デコーダモデルの例としては、GPTファミリーモデル、たとえばGPT-3があります。 + +レビュアーはエンコーダのみのモデルのようなもので、書かれたコースと答えを見て、それらの関係を理解し、コンテキストを理解しますが、コンテンツを生成するのは得意ではありません。エンコーダのみのモデルの例としてはBERTがあります。 + +クイズを作成し、レビューすることができる人がいると想像してみてください。これがエンコーダ-デコーダモデルです。例としては、BARTやT5があります。 + +### サービスとモデル + +次に、サービスとモデルの違いについて話しましょう。サービスはクラウドサービスプロバイダーによって提供される製品であり、通常、モデル、データ、その他のコンポーネントの組み合わせです。モデルはサービスのコアコンポーネントであり、通常はLLMのような基盤モデルです。 + +サービスは生産用途に最適化されており、グラフィカルユーザーインターフェースを介してモデルよりも使いやすいことが多いです。ただし、サービスは無料で利用できるわけではなく、使用にはサブスクリプションや支払いが必要な場合があります。サービスの所有者の設備とリソースを利用する代わりに、費用を最適化し、簡単にスケーリングすることができます。サービスの例としては、[Azure OpenAI Service](https://learn.microsoft.com/azure/ai-services/openai/overview?WT.mc_id=academic-105485-koreyst)があります。これは、使用に応じた料金プランを提供しており、サービスの使用量に比例して課金されます。また、Azure OpenAI Serviceは、モデルの能力に加えて、エンタープライズグレードのセキュリティと責任あるAIフレームワークを提供しています。 + +モデルはニューラルネットワークそのものであり、パラメータ、重みなどを含んでいます。企業がローカルで実行することを許可しますが、機器を購入し、スケールするための構造を構築し、ライセンスを購入するかオープンソースモデルを使用する必要があります。LLaMAのようなモデルは使用可能であり、モデルを実行するための計算能力が必要です。 + +## Azureでの性能を理解するための異なるモデルのテストと反復の方法 + +私たちのチームが現在のLLMの状況を探求し、シナリオに適した候補を特定した後、次のステップはデータとワークロードでそれらをテストすることです。これは実験と測定による反復プロセスです。 +前述のモデルのほとんど(OpenAIモデル、Llama2のようなオープンソースモデル、Hugging Faceトランスフォーマー)は、[Azure AI Studio](https://ai.azure.com/?WT.mc_id=academic-105485-koreyst)の[Model Catalog](https://learn.microsoft.com/azure/ai-studio/how-to/model-catalog-overview?WT.mc_id=academic-105485-koreyst)で利用可能です。 + +[Azure AI Studio](https://learn.microsoft.com/azure/ai-studio/what-is-ai-studio?WT.mc_id=academic-105485-koreyst)は、開発者が生成AIアプリケーションを構築し、実験から評価までの全開発ライフサイクルを管理するためのクラウドプラットフォームであり、すべてのAzure AIサービスを1つのハブに統合し、便利なGUIを提供しています。Azure AI StudioのModel Catalogでは、ユーザーは以下を行うことができます: + +- カタログ内で関心のある基盤モデルを見つける - プロプライエタリまたはオープンソース、タスク、ライセンス、名前でフィルタリング。検索性を向上させるために、モデルはAzure OpenAIコレクション、Hugging Faceコレクションなどのコレクションに整理されています。 + +![モデルカタログ](../../../translated_images/AzureAIStudioModelCatalog.png?WT.cd7b78fc6a7b010869adb0defabce1ea5fbe62131aa7f59e54a083be8d789d24.ja.mc_id=academic-105485-koreyst) + +- モデルカードをレビューし、使用目的とトレーニングデータの詳細な説明、コードサンプル、内部評価ライブラリの評価結果を含む。 + +![モデルカード](../../../translated_images/ModelCard.png?WT.cd385d3d0228f86cef5987e3074be75f377a95ba505d6805f7c6965dc5972693.ja.mc_id=academic-105485-koreyst) +- 業界で利用可能なモデルやデータセットを比較し、ビジネスシナリオに最適なものを評価するために、[Model Benchmarks](https://learn.microsoft.com/azure/ai-studio/how-to/model-benchmarks?WT.mc_id=academic-105485-koreyst) ペインを使用します。 + +![モデルベンチマーク](../../../translated_images/ModelBenchmarks.png?WT.634f688bb2a74b3c90a9212ecfb9b99045405b2414be3d17429cfea319c06f61.ja.mc_id=academic-105485-koreyst) + +- カスタムトレーニングデータでモデルを微調整し、特定のワークロードでのモデルのパフォーマンスを向上させるために、Azure AI Studioの実験とトラッキング機能を活用します。 + +![モデルの微調整](../../../translated_images/FineTuning.png?WT.523a6ab7580c924e42e8478d072fb670f879033779b8ab5a6abb155d2fc63d5a.ja.mc_id=academic-105485-koreyst) + +- オリジナルの事前学習済みモデルまたは微調整されたバージョンを、リモートリアルタイム推論のマネージドコンピュートまたはサーバーレスAPIエンドポイントにデプロイし、アプリケーションが利用できるようにします。 - [従量課金制](https://learn.microsoft.com/azure/ai-studio/how-to/model-catalog-overview#model-deployment-managed-compute-and-serverless-api-pay-as-you-go?WT.mc_id=academic-105485-koreyst) - を利用します。 + +![モデルのデプロイ](../../../translated_images/ModelDeploy.png?WT.a765ca6b7a396eb5d2fd346f8a211542f6fe578e2218bbe16f9fcdb5ca8f3661.ja.mc_id=academic-105485-koreyst) + +> [!NOTE] +> カタログ内のすべてのモデルが現在、微調整および/または従量課金制のデプロイメントに対応しているわけではありません。モデルの機能と制限については、モデルカードを確認してください。 + +## LLMの結果を改善する + +私たちはスタートアップチームとともに、さまざまな種類のLLMとクラウドプラットフォーム(Azure Machine Learning)を活用して、異なるモデルを比較し、テストデータで評価し、パフォーマンスを向上させ、推論エンドポイントにデプロイする方法を探りました。 + +しかし、いつモデルを微調整することを検討すべきでしょうか?事前学習済みのものを使うのではなく、特定のワークロードでモデルのパフォーマンスを向上させる他のアプローチはありますか? + +ビジネスがLLMから必要な結果を得るために使用できるいくつかのアプローチがあります。異なるレベルのトレーニングを持つ異なる種類のモデルを選択し、異なる複雑さ、コスト、および品質でLLMを本番環境にデプロイできます。以下はいくつかの異なるアプローチです: + +- **コンテキストを持つプロンプトエンジニアリング**。これは、プロンプトを提供する際に必要な応答を得るために十分なコンテキストを提供するというアイデアです。 + +- **情報検索強化生成 (RAG)**。データがデータベースやウェブエンドポイントに存在する場合に、そのデータまたはその一部をプロンプト時に含めるために、関連するデータを取得してユーザーのプロンプトの一部にすることができます。 + +- **微調整されたモデル**。ここでは、モデルを自分のデータでさらにトレーニングし、モデルがより正確でニーズに応じた応答をするようになりますが、コストがかかるかもしれません。 + +![LLMsのデプロイ](../../../translated_images/Deploy.png?WT.0eeb36a208bf2bf97ea1058e54c74e13f5c810679cd7f3600cb2084b98d737be.ja.mc_id=academic-105485-koreyst) + +画像出典: [Four Ways that Enterprises Deploy LLMs | Fiddler AI Blog](https://www.fiddler.ai/blog/four-ways-that-enterprises-deploy-llms?WT.mc_id=academic-105485-koreyst) + +### コンテキストを持つプロンプトエンジニアリング + +事前学習済みのLLMは、一般的な自然言語タスクに非常にうまく対応します。短いプロンプトで呼び出すだけで、例えば文の完了や質問など、いわゆる「ゼロショット」学習が可能です。 + +しかし、ユーザーが詳細なリクエストや例を含めてクエリを構築するほど、回答はユーザーの期待により正確で近いものになります。この場合、プロンプトに例が1つだけ含まれている場合は「ワンショット」学習、複数の例が含まれている場合は「少数ショット」学習と呼びます。コンテキストを持つプロンプトエンジニアリングは、最もコスト効果の高いアプローチです。 + +### 情報検索強化生成 (RAG) + +LLMには、トレーニングに使用されたデータのみを使用して回答を生成するという制限があります。これは、トレーニングプロセス後に発生した事実について何も知らないことを意味し、非公開情報(会社データなど)にアクセスすることもできません。 +これは、プロンプトの長さの制限を考慮し、ドキュメントのチャンク形式で外部データを追加するRAGという技術を通じて克服できます。これは、さまざまな事前定義されたデータソースから有用なチャンクを取得し、それらをプロンプトのコンテキストに追加するベクターデータベースツール([Azure Vector Search](https://learn.microsoft.com/azure/search/vector-search-overview?WT.mc_id=academic-105485-koreyst) など)によってサポートされています。 + +この技術は、ビジネスが十分なデータや時間、リソースを持っていないが、特定のワークロードでのパフォーマンスを向上させ、現実の捏造や有害なコンテンツのリスクを軽減したい場合に非常に役立ちます。 + +### 微調整されたモデル + +微調整は、モデルを下流タスクに「適応」させるか、特定の問題を解決するために転移学習を活用するプロセスです。少数ショット学習やRAGとは異なり、新しいモデルが生成され、重みとバイアスが更新されます。これは、単一の入力(プロンプト)とそれに関連する出力(完了)からなるトレーニング例のセットを必要とします。 +このアプローチは、以下の場合に推奨されます: + +- **微調整されたモデルの使用**。ビジネスが高性能モデルではなく、よりコスト効果の高い迅速な解決策を提供する微調整された低性能モデル(埋め込みモデルなど)を使用したい場合。 + +- **レイテンシを考慮する**。特定のユースケースでレイテンシが重要であり、非常に長いプロンプトやモデルが学習するべき例の数がプロンプトの長さ制限に合わない場合。 + +- **最新の状態を維持する**。ビジネスが多くの高品質データと真実のラベルを持ち、このデータを時間とともに最新の状態に保つためのリソースを持っている場合。 + +### トレーニングされたモデル + +LLMをゼロからトレーニングすることは、間違いなく最も難しく、最も複雑なアプローチであり、大量のデータ、熟練したリソース、および適切な計算能力を必要とします。このオプションは、ビジネスがドメイン固有のユースケースと大量のドメイン中心のデータを持っているシナリオでのみ検討されるべきです。 + +## 知識の確認 + +LLMの完了結果を改善するための良いアプローチは何でしょうか? + +1. コンテキストを持つプロンプトエンジニアリング +2. RAG +3. 微調整されたモデル + +A:3、時間とリソースがあり、高品質のデータがある場合、微調整は最新の状態を維持するためのより良いオプションです。しかし、改善を考えていて時間が不足している場合は、まずRAGを検討する価値があります。 + +## 🚀 チャレンジ + +ビジネスにRAGをどのように活用できるかについて、もっと調べてみましょう。[RAGの使用](https://learn.microsoft.com/azure/search/retrieval-augmented-generation-overview?WT.mc_id=academic-105485-koreyst)を参照してください。 + +## 素晴らしい仕事、学習を続けましょう + +このレッスンを完了した後は、[生成AI学習コレクション](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)をチェックして、生成AIの知識をさらに高めましょう! + +レッスン3に進んで、[生成AIを責任を持って構築する方法](../03-using-generative-ai-responsibly/README.md?WT.mc_id=academic-105485-koreyst)を学びましょう! + +**免責事項**: +この文書は機械翻訳AIサービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性がありますのでご注意ください。原文の言語でのオリジナル文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/03-using-generative-ai-responsibly/README.md b/translations/ja/03-using-generative-ai-responsibly/README.md new file mode 100644 index 000000000..2c537d9e8 --- /dev/null +++ b/translations/ja/03-using-generative-ai-responsibly/README.md @@ -0,0 +1,136 @@ +# 生成AIを責任を持って使用する + +[![生成AIを責任を持って使用する](../../../translated_images/03-lesson-banner.png?WT.b0b917735411b39a55748e827c5c3121004890110b27f306bfe685c450c81ff9.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson3-gh?WT.mc_id=academic-105485-koreyst) + +> _このレッスンのビデオを見るには、上の画像をクリックしてください_ + +AI、特に生成AIに魅了されるのは簡単ですが、それを責任を持って使用する方法を考える必要があります。出力が公正で有害でないことを保証する方法などを考慮する必要があります。この章では、考慮すべきことやAIの使用を改善するための積極的な手段を提供することを目的としています。 + +## はじめに + +このレッスンでは以下をカバーします: + +- 生成AIアプリケーションを構築する際に責任あるAIを優先するべき理由 +- 責任あるAIの基本原則と生成AIとの関連性 +- 戦略とツールを通じてこれらの責任あるAI原則を実践する方法 + +## 学習目標 + +このレッスンを完了すると以下が理解できます: + +- 生成AIアプリケーションを構築する際の責任あるAIの重要性 +- 生成AIアプリケーションを構築する際に責任あるAIの基本原則を考え適用するタイミング +- 責任あるAIの概念を実践するために利用可能なツールと戦略 + +## 責任あるAIの原則 + +生成AIへの興奮はかつてないほど高まっています。この興奮は、多くの新しい開発者、注目、資金をこの分野にもたらしました。生成AIを使用して製品や企業を構築しようとする人々にとって非常にポジティブなことですが、同時に責任を持って進めることも重要です。 + +このコース全体を通じて、スタートアップとAI教育製品の構築に焦点を当てています。責任あるAIの原則:公正性、包括性、信頼性/安全性、セキュリティとプライバシー、透明性、説明責任を使用します。これらの原則を使用して、生成AIを製品に使用する際の関連性を探求します。 + +## 責任あるAIを優先するべき理由 + +製品を構築する際に、ユーザーの最善の利益を考慮した人間中心のアプローチを取ることは、最良の結果につながります。 + +生成AIのユニークさは、ユーザーにとって有用な回答、情報、ガイダンス、コンテンツを作成する力です。多くの手作業を必要とせずに非常に印象的な結果を生み出すことができます。適切な計画と戦略がない場合、残念ながらユーザー、製品、社会全体にとって有害な結果をもたらす可能性もあります。 + +これらの潜在的に有害な結果の一部(すべてではありません)を見てみましょう: + +### 幻覚 + +幻覚とは、LLMが完全に意味不明な内容や他の情報源に基づいて事実として知られていることを誤った形で生成することを指す用語です。 + +たとえば、学生がモデルに歴史的な質問をする機能をスタートアップに組み込んだとしましょう。学生が質問`Who was the sole survivor of Titanic?`をします。 + +モデルは以下のような応答を生成します: + +![Prompt saying "Who was the sole survivor of the Titanic"](../../../03-using-generative-ai-responsibly/images/ChatGPT-titanic-survivor-prompt.webp) + +> _(出典: [Flying bisons](https://flyingbisons.com?WT.mc_id=academic-105485-koreyst))_ + +これは非常に自信を持った詳細な回答ですが、残念ながら間違っています。少しの調査でも、タイタニックの災害には生存者が複数いたことがわかります。このトピックについて調査を始めたばかりの学生にとって、この回答は疑問を持たずに事実として扱われるほど説得力があるかもしれません。これにより、AIシステムが信頼できないものとなり、スタートアップの評判に悪影響を与える可能性があります。 + +任意のLLMの各反復で、幻覚を最小限に抑えるパフォーマンスの向上が見られます。この改善にもかかわらず、アプリケーションの開発者およびユーザーとして、これらの制限を常に意識しておく必要があります。 + +### 有害なコンテンツ + +以前のセクションで、LLMが不正確または意味不明な応答を生成する場合について説明しました。もう一つ注意すべきリスクは、モデルが有害なコンテンツで応答する場合です。 + +有害なコンテンツは以下のように定義されます: + +- 自傷行為や特定のグループへの危害を促す指示を提供すること。 +- 憎悪的または軽蔑的なコンテンツ。 +- 攻撃や暴力行為の計画を指導すること。 +- 違法なコンテンツを見つける方法や違法行為を行う方法を指示すること。 +- 性的に露骨なコンテンツを表示すること。 + +スタートアップとして、この種のコンテンツが学生に見られないようにするための適切なツールと戦略を持っていることを確認したいと考えています。 + +### 公正性の欠如 + +公正性は「AIシステムが偏見や差別を受けず、すべての人を公正かつ平等に扱うことを保証すること」と定義されます。生成AIの世界では、モデルの出力によって疎外されたグループの排他的な世界観が強化されないようにすることが重要です。 + +このような出力は、ユーザーにとってのポジティブな製品体験を構築する上で破壊的であるだけでなく、社会全体にさらなる害を引き起こします。アプリケーション開発者として、生成AIを使用してソリューションを構築する際には、常に幅広く多様なユーザーベースを考慮するべきです。 + +## 生成AIを責任を持って使用する方法 + +責任ある生成AIの重要性を確認したところで、AIソリューションを責任を持って構築するために取るべき4つのステップを見てみましょう: + +![Mitigate Cycle](../../../translated_images/mitigate-cycle.png?WT.ffc987e1880649a302a311432b78f49faa64e46f65df6350c9c409b5ed79549b.ja.mc_id=academic-105485-koreyst) + +### 潜在的な危害を測定する + +ソフトウェアテストでは、アプリケーションにおけるユーザーの期待される行動をテストします。同様に、ユーザーが最も使用する可能性のある多様なプロンプトをテストすることは、潜在的な危害を測定する良い方法です。 + +スタートアップが教育製品を構築しているため、教育に関連するプロンプトのリストを準備することが良いでしょう。これは、特定の科目、歴史的事実、学生生活に関するプロンプトをカバーするためです。 + +### 潜在的な危害を軽減する + +モデルとその応答によって引き起こされる潜在的な危害を防止または制限する方法を見つける時が来ました。これを4つの異なる層で見ることができます: + +![Mitigation Layers](../../../translated_images/mitigation-layers.png?WT.cb109f48e143f1ff4dee760b4b0c9477c7d11c2fe57f3efdd89f68c1109f2de6.ja.mc_id=academic-105485-koreyst) + +- **モデル**。適切なユースケースに適したモデルを選択します。GPT-4のような大規模で複雑なモデルは、より小さく特定のユースケースに適用すると有害なコンテンツのリスクを引き起こす可能性があります。トレーニングデータを使用して微調整することも、有害なコンテンツのリスクを減少させます。 + +- **安全システム**。安全システムは、モデルを提供するプラットフォーム上で危害を軽減するためのツールと設定のセットです。例としては、Azure OpenAIサービスのコンテンツフィルタリングシステムがあります。システムはまた、脱獄攻撃やボットからのリクエストなどの望ましくない活動を検出する必要があります。 + +- **メタプロンプト**。メタプロンプトとグラウンディングは、特定の行動や情報に基づいてモデルを指示または制限する方法です。これは、システム入力を使用してモデルの特定の制限を定義することが含まれます。さらに、システムの範囲やドメインに関連性のある出力を提供することも含まれます。 + +また、信頼できる情報源の選択からのみ情報を引き出すために、情報検索強化生成(RAG)のような技術を使用することもできます。このコースの後半では、[検索アプリケーションの構築](../08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst)に関するレッスンがあります。 + +- **ユーザーエクスペリエンス**。最終層は、ユーザーがアプリケーションのインターフェースを通じてモデルと直接対話する場所です。この方法で、UI/UXを設計して、ユーザーがモデルに送信できる入力の種類や、ユーザーに表示されるテキストや画像を制限できます。AIアプリケーションを展開する際には、生成AIアプリケーションができることとできないことについて透明性を持つことも重要です。 + +[AIアプリケーションのUXデザイン](../12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst)に専念したレッスンがあります。 + +- **モデルの評価**。LLMと連携することは、モデルがトレーニングされたデータを常に制御できないため、挑戦的です。それにもかかわらず、モデルのパフォーマンスと出力を常に評価する必要があります。モデルの正確性、類似性、根拠、出力の関連性を測定することは依然として重要です。これにより、利害関係者とユーザーに透明性と信頼を提供するのに役立ちます。 + +### 責任ある生成AIソリューションを運用する + +AIアプリケーションに関する運用プラクティスを構築することが最終段階です。これには、法務やセキュリティなどのスタートアップの他の部分と協力して、すべての規制ポリシーに準拠していることを確認することが含まれます。起動前には、配信、インシデントの処理、ロールバックに関する計画を立て、ユーザーに対する危害の拡大を防ぐことも重要です。 + +## ツール + +責任あるAIソリューションの開発は多くの作業のように思えるかもしれませんが、それだけの価値のある作業です。生成AIの分野が成長するにつれて、開発者がワークフローに責任を効率的に統合するのを助けるためのツールも成熟していきます。たとえば、[Azure AI Content Safety](https://learn.microsoft.com/azure/ai-services/content-safety/overview?WT.mc_id=academic-105485-koreyst)は、APIリクエストを通じて有害なコンテンツや画像を検出するのに役立ちます。 + +## 知識チェック + +責任あるAIの使用を確保するために注意すべきことは何ですか? + +1. 回答が正しいこと。 +2. 有害な使用、AIが犯罪目的に使用されないこと。 +3. AIが偏見や差別を受けないことを保証すること。 + +A: 2と3が正解です。責任あるAIは、有害な影響やバイアスを軽減する方法を考慮するのに役立ちます。 + +## 🚀 チャレンジ + +[Azure AI Content Safety](https://learn.microsoft.com/azure/ai-services/content-safety/overview?WT.mc_id=academic-105485-koreyst)について調べ、あなたの使用に採用できるものを確認してください。 + +## 素晴らしい仕事、学習を続けましょう + +このレッスンを完了した後は、[生成AI学習コレクション](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)をチェックして、生成AIの知識をさらに向上させましょう! + +次のレッスン4では、[プロンプトエンジニアリングの基本](../04-prompt-engineering-fundamentals/README.md?WT.mc_id=academic-105485-koreyst)を見ていきます! + +**免責事項**: +この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を期すよう努めていますが、自動翻訳には誤りや不正確さが含まれる場合がありますのでご注意ください。原文の母国語による文書が信頼できる情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/04-prompt-engineering-fundamentals/README.md b/translations/ja/04-prompt-engineering-fundamentals/README.md new file mode 100644 index 000000000..74b7f6380 --- /dev/null +++ b/translations/ja/04-prompt-engineering-fundamentals/README.md @@ -0,0 +1,252 @@ +# プロンプトエンジニアリングの基礎 + +[![プロンプトエンジニアリングの基礎](../../../translated_images/04-lesson-banner.png?WT.d904d510033d5f0283f2caff5f735050f929dd196a1fc25fefa18433347fe463.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson4-gh?WT.mc_id=academic-105485-koreyst) + +## はじめに +このモジュールでは、生成AIモデルで効果的なプロンプトを作成するための基本的な概念と技術について学びます。LLMにプロンプトを書く方法も重要です。慎重に作成されたプロンプトは、より良い品質の応答を得ることができます。しかし、_プロンプト_ や _プロンプトエンジニアリング_ という用語は具体的に何を意味するのでしょうか?また、LLMに送るプロンプトの _入力_ をどのように改善すれば良いのでしょうか?これらの質問に、この章と次の章で答えていきます。 + +_生成AI_ は、ユーザーのリクエストに応じて新しいコンテンツ(例:テキスト、画像、音声、コードなど)を作成することができます。これは、自然言語やコードを使用するために訓練されたOpenAIのGPT("Generative Pre-trained Transformer")シリーズのような _大規模言語モデル_ を使用して実現されています。 + +ユーザーは、技術的な専門知識や訓練を必要とせずに、チャットのような馴染みのあるパラダイムを使ってこれらのモデルと対話できるようになりました。モデルは _プロンプトベース_ です - ユーザーがテキスト入力(プロンプト)を送信し、AI応答(コンプリート)を受け取ります。ユーザーはその後、AIと「チャット」しながら、応答が期待に合うまでプロンプトを洗練させることができます。 + +「プロンプト」は、生成AIアプリの主要な _プログラミングインターフェース_ となり、モデルに何をするかを伝え、返される応答の質に影響を与えます。「プロンプトエンジニアリング」は、プロンプトの _設計と最適化_ に焦点を当て、一貫した高品質の応答を大規模に提供するための急成長中の研究分野です。 + +## 学習目標 + +このレッスンでは、プロンプトエンジニアリングとは何か、なぜ重要なのか、そして特定のモデルとアプリケーションの目的に対してどのように効果的なプロンプトを作成できるかを学びます。プロンプトエンジニアリングの基本的な概念とベストプラクティスを理解し、これらの概念が実際の例に適用されるインタラクティブなJupyter Notebooksの「サンドボックス」環境について学びます。 + +このレッスンの終わりまでに、次のことができるようになります: + +1. プロンプトエンジニアリングとは何か、そしてなぜ重要なのかを説明する。 +2. プロンプトの構成要素とそれらの使用方法を説明する。 +3. プロンプトエンジニアリングのベストプラクティスと技術を学ぶ。 +4. 学んだ技術を実際の例に適用し、OpenAIエンドポイントを使用する。 + +## キー用語 + +プロンプトエンジニアリング:AIモデルを望ましい出力に導くための入力を設計し、洗練する実践。 +トークン化:モデルが理解し処理できる小さな単位、トークンにテキストを変換するプロセス。 +指示調整済みLLM:特定の指示で精緻化され、応答の正確性と関連性を向上させた大規模言語モデル(LLM)。 + +## 学習サンドボックス + +プロンプトエンジニアリングは現在、科学というよりは芸術です。それに対する直感を改善する最善の方法は、_より多く練習し_、推奨される技術とモデル固有の最適化を組み合わせた試行錯誤アプローチを採用することです。 + +このレッスンに付随するJupyter Notebookは、学んだことを試すことができる _サンドボックス_ 環境を提供します - 学習中や、最後のコードチャレンジの一部として。演習を実行するには、次のものが必要です: + +1. **Azure OpenAI APIキー** - デプロイされたLLMのサービスエンドポイント。 +2. **Pythonランタイム** - Notebookを実行できる環境。 +3. **ローカル環境変数** - _準備のために今[SETUP](./../00-course-setup/SETUP.md?WT.mc_id=academic-105485-koreyst)ステップを完了してください_。 + +Notebookには_スターター_演習が付属していますが、さらに多くの例やアイデアを試すために、自分自身で_マークダウン_(説明)や_コード_(プロンプトリクエスト)セクションを追加することをお勧めします - プロンプト設計の直感を養うために。 + +## イラストガイド + +このレッスンがカバーする内容の全体像を理解したいですか?このイラストガイドをチェックして、カバーされる主要なトピックとそれぞれで考慮すべき重要なポイントを理解してください。レッスンのロードマップは、基本的な概念と課題の理解から、それらを関連するプロンプトエンジニアリング技術とベストプラクティスで解決する方法に至るまでの流れを示しています。このガイドの「高度な技術」セクションは、このカリキュラムの_次の_章でカバーされる内容に関連しています。 + +![プロンプトエンジニアリングのイラストガイド](../../../translated_images/04-prompt-engineering-sketchnote.png?WT.a936f69bc33c7a783015f6747ea56d0f0071349644cd9031f9b8d20a3eec8696.ja.mc_id=academic-105485-koreyst) + +## 私たちのスタートアップ + +では、_このトピック_ が、[AIの革新を教育に](https://educationblog.microsoft.com/2023/06/collaborating-to-bring-ai-innovation-to-education?WT.mc_id=academic-105485-koreyst)もたらすという私たちのスタートアップの使命とどのように関連しているかを考えてみましょう。私たちは_パーソナライズされた学習_のAI搭載アプリケーションを構築したいと考えています - では、私たちのアプリケーションの異なるユーザーがどのようにプロンプトを「設計」するかを考えてみましょう: + +- **管理者**は、AIに_カリキュラムデータを分析してカバレッジのギャップを特定するように頼む_かもしれません。AIは結果を要約したり、コードで視覚化したりすることができます。 +- **教育者**は、AIに_ターゲットオーディエンスとトピックのためのレッスンプランを生成するように頼む_かもしれません。AIは指定されたフォーマットでパーソナライズされたプランを構築できます。 +- **学生**は、AIに_難しい科目を教えてもらうように頼む_かもしれません。AIは、学生のレベルに合わせたレッスン、ヒント、例でガイドできます。 + +これはほんの始まりに過ぎません。[教育のためのプロンプト](https://github.com/microsoft/prompts-for-edu/tree/main?WT.mc_id=academic-105485-koreyst) - 教育専門家によってキュレーションされたオープンソースのプロンプトライブラリをチェックして、可能性の広がりを感じてください!_サンドボックスでこれらのプロンプトのいくつかを実行してみたり、OpenAI Playgroundを使用して何が起こるかを見てみましょう!_ + + + +## プロンプトエンジニアリングとは? + +このレッスンは、特定のアプリケーションの目的とモデルに対して一貫した高品質の応答(コンプリート)を提供するために、テキスト入力(プロンプト)を _設計し最適化する_ プロセスとして**プロンプトエンジニアリング**を定義することから始めました。これは、2ステップのプロセスと考えることができます: + +- 指定されたモデルと目的に対して初期プロンプトを _設計する_ +- 応答の質を向上させるためにプロンプトを反復的に _洗練する_ + +これは必然的に試行錯誤のプロセスであり、最適な結果を得るためにはユーザーの直感と努力が必要です。では、なぜそれが重要なのでしょうか?その質問に答えるために、まず次の3つの概念を理解する必要があります: + +- _トークン化_ = モデルがプロンプトを「見る」方法 +- _ベースLLM_ = 基礎モデルがプロンプトを「処理」する方法 +- _指示調整済みLLM_ = モデルが「タスク」を見ることができる方法 + +### トークン化 + +LLMはプロンプトを _トークンのシーケンス_ として見ますが、異なるモデル(またはモデルのバージョン)は同じプロンプトを異なる方法でトークン化することがあります。LLMはトークンで訓練されているため(生のテキストではない)、プロンプトがトークン化される方法は生成される応答の質に直接影響を与えます。 + +トークン化がどのように機能するかの直感を得るために、以下に示す[OpenAIトークナイザー](https://platform.openai.com/tokenizer?WT.mc_id=academic-105485-koreyst)のようなツールを試してみてください。プロンプトをコピーして貼り付け、トークンに変換される様子を確認し、空白文字や句読点の処理方法に注意を払ってください。この例は古いLLM(GPT-3)を示していますので、新しいモデルで試すと異なる結果が得られるかもしれません。 + +![トークン化](../../../translated_images/04-tokenizer-example.png?WT.f5399316da400747ffe3af9c95e61dc1a85508d57378da23a77538270c4cabf1.ja.mc_id=academic-105485-koreyst) + +### コンセプト: 基礎モデル + +プロンプトがトークン化された後、「ベースLLM」([Base LLM](https://blog.gopenai.com/an-introduction-to-base-and-instruction-tuned-large-language-models-8de102c785a6?WT.mc_id=academic-105485-koreyst))(または基礎モデル)の主な機能は、そのシーケンス内のトークンを予測することです。LLMは大量のテキストデータセットで訓練されているため、トークン間の統計的関係をよく理解しており、ある程度の自信を持ってその予測を行うことができます。ただし、プロンプトやトークン内の単語の _意味_ を理解しているわけではなく、次の予測で「完了」できるパターンを見ているだけです。ユーザーの介入や事前に設定された条件によって終了されるまで、シーケンスを予測し続けることができます。 + +プロンプトベースのコンプリートがどのように機能するかを見てみたいですか?上記のプロンプトをAzure OpenAI Studioの[_Chat Playground_](https://oai.azure.com/playground?WT.mc_id=academic-105485-koreyst)にデフォルト設定で入力してみてください。システムはプロンプトを情報のリクエストとして扱うように設定されているため、このコンテキストを満たすコンプリートが表示されるはずです。 + +しかし、ユーザーが特定の基準やタスクの目的に合った何かを見たい場合はどうでしょうか?ここで_指示調整済み_ LLMが登場します。 + +![ベースLLMチャットコンプリート](../../../translated_images/04-playground-chat-base.png?WT.7645a03d7989b1c410f2e9e6b503d18e4624f82d9cbf108dac999b8c8988f0ad.ja.mc_id=academic-105485-koreyst) + +### コンセプト: 指示調整済みLLM + +[指示調整済みLLM](https://blog.gopenai.com/an-introduction-to-base-and-instruction-tuned-large-language-models-8de102c785a6?WT.mc_id=academic-105485-koreyst)は、基礎モデルから始まり、明確な指示を含む例や入力/出力ペア(例:マルチターンの「メッセージ」)で微調整されます - そしてAIの応答はその指示に従うように試みます。 + +これは、人間のフィードバックを伴う強化学習(RLHF)などの技術を使用して、モデルが_指示に従い_、_フィードバックから学習_ できるように訓練し、実際のアプリケーションに適した応答を生成し、ユーザーの目的により関連するものにします。 + +試してみましょう - 上記のプロンプトを再訪し、今度は_システムメッセージ_を次の指示をコンテキストとして提供するように変更してください: + +> _提供された内容を2年生の生徒向けに要約してください。結果を1段落で3〜5の箇条書きにしてください。_ + +結果がどのように望ましい目標とフォーマットに調整されているかを見てください?教育者は今、この応答をそのクラスのスライドに直接使用できます。 + +![指示調整済みLLMチャットコンプリート](../../../translated_images/04-playground-chat-instructions.png?WT.d9c80b15e90815a83ce665bf4418e70205d30318a5a5bcf407b2c92769743593.ja.mc_id=academic-105485-koreyst) + +## なぜプロンプトエンジニアリングが必要なのか? + +LLMがプロンプトをどのように処理するかを知った今、なぜプロンプトエンジニアリングが必要なのかを考えてみましょう。その答えは、現在のLLMが、プロンプトの構築と最適化に努力を払わずに_信頼性と一貫性のあるコンプリート_を達成することをより困難にする多くの課題を抱えているという事実にあります。例えば: + +1. **モデルの応答は確率的です。** _同じプロンプト_は、異なるモデルやモデルバージョンで異なる応答を生成する可能性があります。そして、_同じモデル_であっても異なる時に異なる結果を生成するかもしれません。_プロンプトエンジニアリング技術は、より良いガードレールを提供することでこれらの変動を最小限に抑えるのに役立ちます_。 + +2. **モデルは応答を作り出すことがあります。** モデルは_大規模だが有限の_データセットで事前に訓練されているため、その訓練範囲外の概念についての知識を欠いています。その結果、事実と矛盾する、不正確または架空のコンプリートを生成することがあります。_プロンプトエンジニアリング技術は、AIに引用や理由を尋ねることで、ユーザーがそのような作り話を特定し、軽減するのを助けます_。 + +3. **モデルの能力は異なります。** 新しいモデルやモデル世代は、より豊かな能力を持ちますが、コストと複雑さにおいてユニークな特性とトレードオフももたらします。_プロンプトエンジニアリングは、違いを抽象化し、モデル固有の要件にスケーラブルでシームレスな方法で適応するベストプラクティスとワークフローを開発するのに役立ちます_。 + +OpenAIまたはAzure OpenAI Playgroundでこれを実際に見てみましょう: + +- 同じプロンプトを異なるLLMデプロイメント(例:OpenAI、Azure OpenAI、Hugging Face)で使用してください - 変動が見られましたか? +- _同じ_ LLMデプロイメント(例:Azure OpenAI Playground)で同じプロンプトを繰り返し使用してください - これらの変動はどのように異なりましたか? + +### 作り話の例 + +このコースでは、LLMが訓練 +テンプレートの本当の価値は、特定のアプリケーションドメインに対して_プロンプトライブラリ_を作成し公開する能力にあります。ここでプロンプトテンプレートは、ターゲットユーザーにとってより関連性が高く正確な応答を得るために、アプリケーション固有のコンテキストや例を反映するように_最適化_されます。[Prompts For Edu](https://github.com/microsoft/prompts-for-edu?WT.mc_id=academic-105485-koreyst) リポジトリは、このアプローチの素晴らしい例で、教育分野におけるプロンプトのライブラリをキュレーションし、授業計画、カリキュラムデザイン、学生指導などの主要な目標に重点を置いています。 + +## サポートコンテンツ + +プロンプトの構築を指示(タスク)とターゲット(主要コンテンツ)を持つものと考えると、_二次コンテンツ_は、**出力に何らかの影響を与える**ために提供する追加のコンテキストのようなものです。これには、調整パラメータ、フォーマット指示、トピック分類法などが含まれ、モデルが望ましいユーザーの目的や期待に合わせて応答を_カスタマイズ_するのに役立ちます。 + +例:カリキュラム内のすべての利用可能なコースについて、豊富なメタデータ(名前、説明、レベル、メタデータタグ、講師など)を持つコースカタログが与えられた場合: + +- 「2023年秋のコースカタログを要約する」という指示を定義できます +- 望ましい出力のいくつかの例を提供するために主要コンテンツを使用できます +- 興味のあるトップ5の「タグ」を特定するために二次コンテンツを使用できます + +これにより、モデルはいくつかの例で示されたフォーマットで要約を提供できますが、結果に複数のタグがある場合は、二次コンテンツで特定された5つのタグを優先することができます。 + +--- + + + +## プロンプトのベストプラクティス + +プロンプトがどのように_構築_されるかを知った今、それらをどのように_デザイン_するかを考え始めることができます。これを2つの部分に分けて考えることができます。正しい_心構え_を持つことと、正しい_技術_を適用することです。 + +### プロンプトエンジニアリングの心構え + +プロンプトエンジニアリングは試行錯誤のプロセスであるため、3つの広範なガイドラインを念頭に置いてください: + +1. **ドメイン理解が重要です。** 応答の正確性と関連性は、そのアプリケーションやユーザーが操作する_ドメイン_の関数です。直感とドメインの専門知識を活用して、技術をさらに**カスタマイズ**してください。たとえば、システムプロンプトで_ドメイン固有の人格_を定義したり、ユーザープロンプトで_ドメイン固有のテンプレート_を使用したりします。ドメイン固有のコンテキストを反映する二次コンテンツを提供するか、_ドメイン固有のキューや例_を使用してモデルを馴染みのある使用パターンに導きます。 + +2. **モデル理解が重要です。** モデルは本質的に確率的であることを知っていますが、モデルの実装は使用するトレーニングデータセット(事前トレーニングされた知識)、提供する機能(例:APIやSDK経由)および最適化されているコンテンツのタイプ(例:コード、画像、テキスト)によっても異なる場合があります。使用しているモデルの強みと制限を理解し、その知識を活用して_タスクを優先_したり、モデルの機能に最適化された_カスタマイズされたテンプレート_を作成したりします。 + +3. **反復と検証が重要です。** モデルは急速に進化しており、プロンプトエンジニアリングの技術も同様です。ドメインの専門家として、あなたの特定のアプリケーションに適用される他のコンテキストや基準があるかもしれません。それが広範なコミュニティには適用されないかもしれません。プロンプトエンジニアリングツールと技術を使用してプロンプトの構築を「ジャンプスタート」し、直感とドメインの専門知識を活用して結果を反復し検証します。洞察を記録し、他の人が将来より速く反復できるようにするための**知識ベース**(例:プロンプトライブラリ)を作成します。 + +## ベストプラクティス + +次に、[OpenAI](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api?WT.mc_id=academic-105485-koreyst) と [Azure OpenAI](https://learn.microsoft.com/azure/ai-services/openai/concepts/prompt-engineering#best-practices?WT.mc_id=academic-105485-koreyst) の実践者によって推奨される一般的なベストプラクティスを見てみましょう。 + +| 内容 | 理由 | +| :------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| 最新のモデルを評価する | 新しいモデルの世代は、機能と品質が向上している可能性がありますが、コストが高くなる場合もあります。影響を評価し、移行の決定を行います。 | +| 指示とコンテキストを分ける | モデル/プロバイダーが指示、主要コンテンツ、二次コンテンツをより明確に区別する_デリミタ_を定義しているか確認します。これにより、モデルはトークンに対してより正確に重みを割り当てることができます。 | +| 具体的で明確にする | 望ましいコンテキスト、結果、長さ、フォーマット、スタイルなどについてより詳細を提供します。これにより、応答の品質と一貫性が向上します。再利用可能なテンプレートにレシピをキャプチャします。 | +| 説明的で、例を使用する | モデルは「見せて説明する」アプローチによりよく反応するかもしれません。`zero-shot` approach where you give it an instruction (but no examples) then try `few-shot` as a refinement, providing a few examples of the desired output. Use analogies. | +| Use cues to jumpstart completions | Nudge it towards a desired outcome by giving it some leading words or phrases that it can use as a starting point for the response. | +| Double Down | Sometimes you may need to repeat yourself to the model. Give instructions before and after your primary content, use an instruction and a cue, etc. Iterate & validate to see what works. | +| Order Matters | The order in which you present information to the model may impact the output, even in the learning examples, thanks to recency bias. Try different options to see what works best. | +| Give the model an “out” | Give the model a _fallback_ completion response it can provide if it cannot complete the task for any reason. This can reduce chances of models generating false or fabricated responses. | +| | | + +As with any best practice, remember that _your mileage may vary_ based on the model, the task and the domain. Use these as a starting point, and iterate to find what works best for you. Constantly re-evaluate your prompt engineering process as new models and tools become available, with a focus on process scalability and response quality. + + + +## Assignment + +Congratulations! You made it to the end of the lesson! It's time to put some of those concepts and techniques to the test with real examples! + +For our assignment, we'll be using a Jupyter Notebook with exercises you can complete interactively. You can also extend the Notebook with your own Markdown and Code cells to explore ideas and techniques on your own. + +### To get started, fork the repo, then + +- (Recommended) Launch GitHub Codespaces +- (Alternatively) Clone the repo to your local device and use it with Docker Desktop +- (Alternatively) Open the Notebook with your preferred Notebook runtime environment. + +### Next, configure your environment variables + +- Copy the `.env.copy` file in repo root to `.env` and fill in the `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_ENDPOINT` and `AZURE_OPENAI_DEPLOYMENT` の値を使って始めてください。[Learning Sandbox section](../../../04-prompt-engineering-fundamentals/04-prompt-engineering-fundamentals) に戻って学び方を確認してください。 + +### 次に、Jupyter Notebookを開いてください + +- ランタイムカーネルを選択します。オプション1または2を使用する場合、開発コンテナが提供するデフォルトのPython 3.10.xカーネルを選択してください。 + +これで演習を実行する準備が整いました。ここには_正解や不正解_はありません - 単に試行錯誤でオプションを探索し、特定のモデルとアプリケーションドメインで何が機能するかの直感を構築することです。 + +_このため、このレッスンにはコードソリューションセグメントはありません。代わりに、Notebookには「My Solution:」と題されたMarkdownセルがあり、参考として1つの例の出力を示しています。_ + + + +## 知識チェック + +次のうち、合理的なベストプラクティスに従った良いプロンプトはどれですか? + +1. 赤い車の画像を見せてください +2. 日が沈む崖のそばに駐車している、ボルボ製のXC90モデルの赤い車の画像を見せてください +3. ボルボ製のXC90モデルの赤い車の画像を見せてください + +A: 2、これは「何を」という詳細を提供し、具体的な(単なる車ではなく特定のメーカーとモデル)内容に入り、全体の設定も説明しているため、最良のプロンプトです。3も多くの説明を含んでいるため、次に良いです。 + +## 🚀 チャレンジ + +「ボルボ製の赤い車の画像を見せてください」というプロンプトで「キュー」技術を活用できるか試してみてください。それは何に応答し、どのように改善しますか? + +## 素晴らしい仕事!学び続けましょう + +さまざまなプロンプトエンジニアリングの概念についてもっと学びたいですか?このトピックに関する他の素晴らしいリソースを見つけるために[学習継続ページ](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)にアクセスしてください。 + +レッスン5に進み、[高度なプロンプト技術](../05-advanced-prompts/README.md?WT.mc_id=academic-105485-koreyst)を見てみましょう! + +**免責事項**: +この文書は、機械翻訳AIサービスを使用して翻訳されています。正確性を期していますが、自動翻訳には誤りや不正確さが含まれる場合がありますのでご注意ください。原文書は、その言語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用から生じる誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/05-advanced-prompts/README.md b/translations/ja/05-advanced-prompts/README.md new file mode 100644 index 000000000..ae659491b --- /dev/null +++ b/translations/ja/05-advanced-prompts/README.md @@ -0,0 +1,4 @@ + + +**免責事項**: +この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを期すよう努めておりますが、自動翻訳には誤りや不正確さが含まれる場合がありますのでご注意ください。原文の言語での文書を正式な情報源とみなしてください。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤った解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/06-text-generation-apps/README.md b/translations/ja/06-text-generation-apps/README.md new file mode 100644 index 000000000..c96ed641b --- /dev/null +++ b/translations/ja/06-text-generation-apps/README.md @@ -0,0 +1,594 @@ +# テキスト生成アプリケーションの構築 + +[![テキスト生成アプリケーションの構築](../../../translated_images/06-lesson-banner.png?WT.2cbccad4fdd538d4f7d47c475b058629b7b7fb1a010acde6e323370d82005b16.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson6-gh?WT.mc_id=academic-105485-koreyst) + +> _(このレッスンのビデオを見るには、上の画像をクリックしてください)_ + +このカリキュラムを通じて、プロンプトなどの基本概念や「プロンプトエンジニアリング」と呼ばれる専門分野があることを見てきました。ChatGPT、Office 365、Microsoft Power Platformなど、多くのツールはプロンプトを使用して何かを達成することをサポートしています。 + +このような体験をアプリに追加するためには、プロンプトや完了の概念を理解し、使用するライブラリを選ぶ必要があります。これがこの章で学ぶことです。 + +## はじめに + +この章では、以下を学びます: + +- openaiライブラリとその基本概念について学ぶ。 +- openaiを使用してテキスト生成アプリを構築する。 +- プロンプト、温度、トークンなどの概念を使用してテキスト生成アプリを構築する方法を理解する。 + +## 学習目標 + +このレッスンの終わりには、以下ができるようになります: + +- テキスト生成アプリが何かを説明する。 +- openaiを使用してテキスト生成アプリを構築する。 +- アプリを設定してトークンの使用量を増減させ、温度を変えて多様な出力を得る。 + +## テキスト生成アプリとは? + +通常、アプリを構築すると、次のようなインターフェースがあります: + +- コマンドベース。コンソールアプリは、コマンドを入力してタスクを実行する典型的なアプリです。例えば、`git`はコマンドベースのアプリです。 +- ユーザーインターフェース(UI)。一部のアプリは、ボタンをクリックしたり、テキストを入力したり、オプションを選択したりするグラフィカルユーザーインターフェース(GUI)を持っています。 + +### コンソールとUIアプリの制限 + +コマンドを入力するコマンドベースのアプリと比較してみましょう: + +- **制限されている**。アプリがサポートするコマンドだけを入力でき、任意のコマンドを入力することはできません。 +- **言語特化**。一部のアプリは多くの言語をサポートしていますが、デフォルトでは特定の言語向けに構築されています。 + +### テキスト生成アプリの利点 + +では、テキスト生成アプリはどのように異なるのでしょうか? + +テキスト生成アプリでは、コマンドや特定の入力言語に制限されることなく、自然言語を使用してアプリと対話することができます。さらに、膨大な情報のコーパスで訓練されたデータソースとすでに対話しているため、伝統的なアプリがデータベースに限定されるのに対し、より多様な情報にアクセスできます。 + +### テキスト生成アプリで何が作れる? + +以下のようなものを構築できます: + +- **チャットボット**。会社や製品についての質問に答えるチャットボット。 +- **ヘルパー**。テキストの要約、テキストからの洞察の取得、履歴書の作成など、LLMは得意です。 +- **コードアシスタント**。使用する言語モデルに応じて、コードを書くのを助けるコードアシスタントを構築できます。例えば、GitHub CopilotやChatGPTを使用してコードを書くのを助けることができます。 + +## どのように始めればいいの? + +通常、LLMと統合する方法を見つける必要があり、以下の2つのアプローチが一般的です: + +- APIを使用する。プロンプトを含むウェブリクエストを作成し、生成されたテキストを取得します。 +- ライブラリを使用する。ライブラリはAPIコールをカプセル化し、使いやすくします。 + +## ライブラリ/SDK + +LLMと連携するためのよく知られたライブラリがいくつかあります: + +- **openai**。このライブラリは、モデルに接続してプロンプトを送信するのを簡単にします。 + +次に、高レベルで動作するライブラリがあります: + +- **Langchain**。Pythonをサポートしていることで知られています。 +- **Semantic Kernel**。Microsoftによるライブラリで、C#、Python、Javaをサポートしています。 + +## openaiを使った最初のアプリ + +最初のアプリをどのように構築するか、必要なライブラリ、必要なものなどを見てみましょう。 + +### openaiのインストール + +OpenAIまたはAzure OpenAIと対話するためのライブラリは多数あります。C#、Python、JavaScript、Javaなどの多くのプログラミング言語を使用することが可能です。`openai` Pythonライブラリを使用することを選択したので、`pip`を使用してインストールします。 + +```bash +pip install openai +``` + +### リソースの作成 + +次のステップを実行する必要があります: + +- Azureでアカウントを作成します [https://azure.microsoft.com/free/](https://azure.microsoft.com/free/?WT.mc_id=academic-105485-koreyst)。 +- Azure OpenAIへのアクセスを取得します。 [https://learn.microsoft.com/azure/ai-services/openai/overview#how-do-i-get-access-to-azure-openai](https://learn.microsoft.com/azure/ai-services/openai/overview#how-do-i-get-access-to-azure-openai?WT.mc_id=academic-105485-koreyst) にアクセスして、アクセスをリクエストします。 + + > [!NOTE] + > 執筆時点では、Azure OpenAIへのアクセスを申請する必要があります。 + +- Pythonをインストールします +- Azure OpenAI Serviceリソースを作成します。リソースの作成方法については、こちらのガイドを参照してください [create a resource](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal?WT.mc_id=academic-105485-koreyst)。 + +### APIキーとエンドポイントの特定 + +この時点で、`openai`ライブラリに使用するAPIキーを指定する必要があります。APIキーを見つけるには、Azure OpenAIリソースの「Keys and Endpoint」セクションに移動し、「Key 1」値をコピーします。 + +![AzureポータルのKeys and Endpointリソースブレード](https://learn.microsoft.com/azure/ai-services/openai/media/quickstarts/endpoint.png?WT.mc_id=academic-105485-koreyst) + +この情報をコピーしたので、ライブラリに使用するよう指示しましょう。 + +> [!NOTE] +> APIキーをコードから分離することは価値があります。環境変数を使用してこれを行うことができます。 +> +> - 環境変数を設定します `OPENAI_API_KEY` to your API key. +> `export OPENAI_API_KEY='sk-...'` + +### Azureの設定 + +Azure OpenAIを使用している場合、設定方法は次のとおりです: + +```python +openai.api_type = 'azure' +openai.api_key = os.environ["OPENAI_API_KEY"] +openai.api_version = '2023-05-15' +openai.api_base = os.getenv("API_BASE") +``` + +上記では、次の設定を行っています: + +- `api_type` to `azure`. This tells the library to use Azure OpenAI and not OpenAI. +- `api_key`, this is your API key found in the Azure Portal. +- `api_version`, this is the version of the API you want to use. At the time of writing, the latest version is `2023-05-15`. +- `api_base`, this is the endpoint of the API. You can find it in the Azure Portal next to your API key. + +> [!NOTE] > `os.getenv` is a function that reads environment variables. You can use it to read environment variables like `OPENAI_API_KEY` and `API_BASE`. Set these environment variables in your terminal or by using a library like `dotenv`. + +## Generate text + +The way to generate text is to use the `Completion` クラス。以下はその例です: + +```python +prompt = "Complete the following: Once upon a time there was a" + +completion = openai.Completion.create(model="davinci-002", prompt=prompt) +print(completion.choices[0].text) +``` + +上記のコードでは、使用したいモデルとプロンプトを渡して完了オブジェクトを作成し、生成されたテキストを出力します。 + +### チャット完了 + +これまでに見たように、`Completion` to generate text. But there's another class called `ChatCompletion` を使用しており、これはチャットボットに適しています。これを使用する例は以下の通りです: + +```python +import openai + +openai.api_key = "sk-..." + +completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello world"}]) +print(completion.choices[0].message.content) +``` + +この機能については、今後の章で詳しく説明します。 + +## 演習 - 最初のテキスト生成アプリ + +openaiのセットアップと設定方法を学んだので、最初のテキスト生成アプリを構築する時が来ました。アプリを構築するには、次の手順に従ってください: + +1. 仮想環境を作成し、openaiをインストールします: + + ```bash + python -m venv venv + source venv/bin/activate + pip install openai + ``` + + > [!NOTE] + > Windowsを使用している場合は `venv\Scripts\activate` instead of `source venv/bin/activate`. + + > [!NOTE] + > Locate your Azure OpenAI key by going to [https://portal.azure.com/](https://portal.azure.com/?WT.mc_id=academic-105485-koreyst) and search for `Open AI` and select the `Open AI resource` and then select `Keys and Endpoint` and copy the `Key 1` 値を入力します。 + +1. _app.py_ ファイルを作成し、次のコードを入力します: + + ```python + import openai + + openai.api_key = "" + + openai.api_type = 'azure' + openai.api_version = '2023-05-15' + openai.api_base = "" + deployment_name = "" + + # add your completion code + prompt = "Complete the following: Once upon a time there was a" + messages = [{"role": "user", "content": prompt}] + + # make completion + completion = client.chat.completions.create(model=deployment, messages=messages) + + # print response + print(completion.choices[0].message.content) + ``` + + > [!NOTE] + > Azure OpenAIを使用している場合、`api_type` to `azure` and set the `api_key` をAzure OpenAIキーに設定する必要があります。 + + 次のような出力が表示されます: + + ```output + very unhappy _____. + + Once upon a time there was a very unhappy mermaid. + ``` + +## 異なる目的のための異なるタイプのプロンプト + +プロンプトを使用してテキストを生成する方法を見ました。実行しているプログラムを変更して、異なるタイプのテキストを生成することができます。 + +プロンプトはさまざまなタスクに使用できます。例えば: + +- **特定のタイプのテキストを生成**。例えば、詩やクイズの質問などを生成できます。 +- **情報の検索**。以下の例のように、情報を検索するためにプロンプトを使用できます。「ウェブ開発におけるCORSとは何か?」。 +- **コードの生成**。プロンプトを使用してコードを生成できます。例えば、メールを検証するための正規表現を開発する、またはウェブアプリのようなプログラム全体を生成することができます。 + +## より実践的なユースケース:レシピジェネレーター + +家にある材料を使って料理をしたいとしましょう。そのためにはレシピが必要です。レシピを見つける方法としては、検索エンジンを使用するか、LLMを使用することができます。 + +次のようなプロンプトを書くことができます: + +> "以下の材料を使用した料理のレシピを5つ見せてください:鶏肉、じゃがいも、にんじん。各レシピには使用するすべての材料をリストしてください" + +上記のプロンプトを与えると、次のような応答を得るかもしれません: + +```output +1. Roasted Chicken and Vegetables: +Ingredients: +- 4 chicken thighs +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 2 tablespoons olive oil +- 2 cloves garlic, minced +- 1 teaspoon dried thyme +- 1 teaspoon dried oregano +- Salt and pepper, to taste + +2. Chicken and Potato Stew: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 cloves garlic, minced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +3. Chicken and Potato Bake: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 2 cloves garlic, minced +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +4. Chicken and Potato Soup: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 cloves garlic, minced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 4 cups chicken broth +- Salt and pepper, to taste + +5. Chicken and Potato Hash: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 2 cloves garlic, minced +- 1 teaspoon dried oregano +``` + +この結果は素晴らしいです、何を料理するかが分かります。この時点で、役立つ改善点としては: + +- 嫌いな材料やアレルギーのある材料を除外する。 +- 家にない材料を考慮した買い物リストを作成する。 + +上記のケースに対して、追加のプロンプトを追加しましょう: + +> "アレルギーがあるのでにんにくを含むレシピを削除し、別のものに置き換えてください。また、家に鶏肉、じゃがいも、にんじんがあることを考慮した買い物リストを作成してください。" + +これで新しい結果が得られます: + +```output +1. Roasted Chicken and Vegetables: +Ingredients: +- 4 chicken thighs +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 2 tablespoons olive oil +- 1 teaspoon dried thyme +- 1 teaspoon dried oregano +- Salt and pepper, to taste + +2. Chicken and Potato Stew: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +3. Chicken and Potato Bake: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +4. Chicken and Potato Soup: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 4 cups chicken broth +- Salt and pepper, to taste + +5. Chicken and Potato Hash: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 1 teaspoon dried oregano + +Shopping List: +- Olive oil +- Onion +- Thyme +- Oregano +- Salt +- Pepper +``` + +これがあなたの5つのレシピで、にんにくは言及されておらず、家にあるものを考慮した買い物リストもあります。 + +## 演習 - レシピジェネレーターを構築 + +シナリオを演じたので、デモンストレーションされたシナリオに一致するコードを書きましょう。以下の手順に従ってください: + +1. 既存の _app.py_ ファイルを開始点として使用 +1. `prompt` 変数を特定し、そのコードを次のように変更: + + ```python + prompt = "Show me 5 recipes for a dish with the following ingredients: chicken, potatoes, and carrots. Per recipe, list all the ingredients used" + ``` + + コードを実行すると、次のような出力が表示されるはずです: + + ```output + -Chicken Stew with Potatoes and Carrots: 3 tablespoons oil, 1 onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 1/2 cups chicken broth, 1/2 cup dry white wine, 2 tablespoons chopped fresh parsley, 2 tablespoons unsalted butter, 1 1/2 pounds boneless, skinless chicken thighs, cut into 1-inch pieces + -Oven-Roasted Chicken with Potatoes and Carrots: 3 tablespoons extra-virgin olive oil, 1 tablespoon Dijon mustard, 1 tablespoon chopped fresh rosemary, 1 tablespoon chopped fresh thyme, 4 cloves garlic, minced, 1 1/2 pounds small red potatoes, quartered, 1 1/2 pounds carrots, quartered lengthwise, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 (4-pound) whole chicken + -Chicken, Potato, and Carrot Casserole: cooking spray, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and shredded, 1 potato, peeled and shredded, 1/2 teaspoon dried thyme leaves, 1/4 teaspoon salt, 1/4 teaspoon black pepper, 2 cups fat-free, low-sodium chicken broth, 1 cup frozen peas, 1/4 cup all-purpose flour, 1 cup 2% reduced-fat milk, 1/4 cup grated Parmesan cheese + + -One Pot Chicken and Potato Dinner: 2 tablespoons olive oil, 1 pound boneless, skinless chicken thighs, cut into 1-inch pieces, 1 large onion, chopped, 3 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 2 cups chicken broth, 1/2 cup dry white wine + + -Chicken, Potato, and Carrot Curry: 1 tablespoon vegetable oil, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 teaspoon ground coriander, 1 teaspoon ground cumin, 1/2 teaspoon ground turmeric, 1/2 teaspoon ground ginger, 1/4 teaspoon cayenne pepper, 2 cups chicken broth, 1/2 cup dry white wine, 1 (15-ounce) can chickpeas, drained and rinsed, 1/2 cup raisins, 1/2 cup chopped fresh cilantro + ``` + + > NOTE、LLMは非決定論的なので、プログラムを実行するたびに異なる結果が得られるかもしれません。 + + 素晴らしいですね、改善方法を見てみましょう。改善するために、コードを柔軟にし、材料やレシピの数を改善し変更できるようにしたいです。 + +1. コードを次のように変更します: + + ```python + no_recipes = input("No of recipes (for example, 5): ") + + ingredients = input("List of ingredients (for example, chicken, potatoes, and carrots): ") + + # interpolate the number of recipes into the prompt an ingredients + prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used" + ``` + + コードをテスト実行すると、次のようになります: + + ```output + No of recipes (for example, 5): 3 + List of ingredients (for example, chicken, potatoes, and carrots): milk,strawberries + + -Strawberry milk shake: milk, strawberries, sugar, vanilla extract, ice cubes + -Strawberry shortcake: milk, flour, baking powder, sugar, salt, unsalted butter, strawberries, whipped cream + -Strawberry milk: milk, strawberries, sugar, vanilla extract + ``` + +### フィルターと買い物リストの追加による改善 + +レシピを生成する能力を持つ動作するアプリがあり、ユーザーからの入力に依存しているため柔軟性があります。レシピの数だけでなく使用する材料も考慮します。 + +これをさらに改善するために、次のことを追加したいです: + +- **材料をフィルターアウトする**。嫌いな材料やアレルギーのある材料をフィルターアウトできるようにしたいです。この変更を達成するために、既存のプロンプトを編集し、次のように末尾にフィルター条件を追加できます: + + ```python + filter = input("Filter (for example, vegetarian, vegan, or gluten-free): ") + + prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used, no {filter}" + ``` + + 上記では、プロンプトの末尾に `{filter}` を追加し、ユーザーからフィルター値を取得します。 + + プログラムを実行したときの入力例は次のようになります: + + ```output + No of recipes (for example, 5): 3 + List of ingredients (for example, chicken, potatoes, and carrots): onion,milk + Filter (for example, vegetarian, vegan, or gluten-free): no milk + + 1. French Onion Soup + + Ingredients: + + -1 large onion, sliced + -3 cups beef broth + -1 cup milk + -6 slices french bread + -1/4 cup shredded Parmesan cheese + -1 tablespoon butter + -1 teaspoon dried thyme + -1/4 teaspoon salt + -1/4 teaspoon black pepper + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add beef broth, milk, thyme, salt, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. Place french bread slices on soup bowls. + 5. Ladle soup over bread. + 6. Sprinkle with Parmesan cheese. + + 2. Onion and Potato Soup + + Ingredients: + + -1 large onion, chopped + -2 cups potatoes, diced + -3 cups vegetable broth + -1 cup milk + -1/4 teaspoon black pepper + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add potatoes, vegetable broth, milk, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. Serve hot. + + 3. Creamy Onion Soup + + Ingredients: + + -1 large onion, chopped + -3 cups vegetable broth + -1 cup milk + -1/4 teaspoon black pepper + -1/4 cup all-purpose flour + -1/2 cup shredded Parmesan cheese + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add vegetable broth, milk, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. In a small bowl, whisk together flour and Parmesan cheese until smooth. + 5. Add to soup and simmer for an additional 5 minutes, or until soup has thickened. + ``` + + ご覧の通り、牛乳を含むレシピはすべてフィルターアウトされています。しかし、乳糖不耐症の場合は、チーズを含むレシピもフィルターアウトしたいかもしれませんので、明確にする必要があります。 + +- **買い物リストを作成する**。家にあるものを考慮した買い物リストを作成したいです。 + + この機能のために、すべてを1つのプロンプトで解決しようとすることもできますが、2つのプロンプトに分けることもできます。後者のアプローチを試してみましょう。ここでは追加のプロンプトを提案していますが、これが機能するためには、最初のプロンプトの結果を2番目のプロンプトへのコンテキストとして追加する必要があります。 + + 最初のプロンプトからの結果を出力するコードの部分を特定し、その下に次のコードを追加します: + + ```python + old_prompt_result = completion.choices[0].message.content + prompt = "Produce a shopping list for the generated recipes and please don't include ingredients that I already have." + + new_prompt = f"{old_prompt_result} {prompt}" + messages = [{"role": "user", "content": new_prompt}] + completion = openai.Completion.create(engine=deployment_name, messages=messages, max_tokens=1200) + + # print response + print("Shopping list:") + print(completion.choices[0].message.content) + ``` + + 次の点に注意してください: + + 1. 最初のプロンプトの結果を新しいプロンプトに追加して、新しいプロンプトを構築しています: + + ```python + new_prompt = f"{old_prompt_result} {prompt}" + ``` + + 1. 最初のプロンプトで要求したトークンの数を考慮して、新しいリクエストを行います。このため、今回は `max_tokens` を1200とします。 + + ```python + completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) + ``` + + このコードを試してみると、次のような出力が得られます: + + ```output + No of recipes (for example, 5): 2 + List of ingredients (for example, chicken, potatoes, and carrots): apple,flour + Filter (for example, vegetarian, vegan, or gluten-free): sugar + + + -Apple and flour pancakes: 1 cup flour, 1/2 tsp baking powder, 1/2 tsp baking soda, 1/4 tsp salt, 1 tbsp sugar, 1 egg, 1 cup buttermilk or sour milk, 1/4 cup melted butter, 1 Granny Smith apple, peeled and grated + -Apple fritters: 1-1/2 cups flour, 1 tsp baking powder, 1/4 tsp salt, 1/4 tsp baking soda, 1/4 tsp nutmeg, 1/4 tsp cinnamon, 1/4 tsp allspice, 1/4 cup sugar, 1/4 cup vegetable shortening, 1/4 cup milk, 1 egg, 2 cups shredded, peeled apples + Shopping list: + -Flour, baking powder, baking soda, salt, sugar, egg, buttermilk, butter, apple, nutmeg, cinnamon, allspice + ``` + +## セットアップを改善する + +これまでにあるのは機能するコードですが、さらに改善するために調整するべき点がいくつかあります。すべきことの一部は: + +- **コードから秘密を分離する**、APIキーのように。秘密はコードに含めるべきではなく、安全な場所に保存されるべきです。コードから秘密を分離するために、環境変数や `python-dotenv` to load them from a file. Here's how that would look like in code: + + 1. Create a `.env` ファイルのようなライブラリを使用できます。以下の内容を含む: + + ```bash + OPENAI_API_KEY=sk-... + ``` + + > 注意:Azureの場合、次の環境変数を設定する必要があります: + + ```bash + OPENAI_API_TYPE=azure + OPENAI_API_VERSION=2023-05-15 + OPENAI_API_BASE= + ``` + + コードでは、次のように環境変数を読み込みます: + + ```python + from dotenv import load_dotenv + + load_dotenv() + + openai.api_key = os.environ["OPENAI_API_KEY"] + ``` + +- **トークンの長さに関する一言**。生成したいテキストにどれだけのトークンが必要かを考慮すべきです。トークンには費用がかかるため、可能な限り、使用するトークンの数を経済的にするようにすべきです。例えば、プロンプトをどのように表現すればトークンを減らせるか? + + 使用するトークンを変更するには、`max_tokens` パラメータを使用できます。例えば、100トークンを使用したい場合は、次のようにします: + + ```python + completion = client.chat.completions.create(model=deployment, messages=messages, max_tokens=100) + ``` + +- **温度の実験**。これまで温度については触れていません + +**免責事項**: +この文書は、機械翻訳AIサービスを使用して翻訳されています。正確さを追求しておりますが、自動翻訳には誤りや不正確さが含まれる場合があります。原文が書かれた言語の文書を正式な情報源と見なしてください。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用によって生じた誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/07-building-chat-applications/README.md b/translations/ja/07-building-chat-applications/README.md new file mode 100644 index 000000000..3b1547b3b --- /dev/null +++ b/translations/ja/07-building-chat-applications/README.md @@ -0,0 +1,143 @@ +# ジェネレーティブAIを活用したチャットアプリケーションの構築 + +[![ジェネレーティブAIを活用したチャットアプリケーションの構築](../../../translated_images/07-lesson-banner.png?WT.21b04c80931fcfbbce2e012cb013fa889033dc1cf59443c7c82ce598eaf13629.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lessons7-gh?WT.mc_id=academic-105485-koreyst) + +> _(上の画像をクリックすると、このレッスンのビデオを視聴できます)_ + +テキスト生成アプリの構築方法を見てきたので、次はチャットアプリケーションに目を向けましょう。 + +チャットアプリケーションは日常生活に統合され、カジュアルな会話の手段以上のものを提供しています。カスタマーサービスや技術サポート、さらには高度なアドバイザリーシステムの重要な一部となっています。最近、チャットアプリケーションから何らかのサポートを受けたことがあるかもしれません。これらのプラットフォームにジェネレーティブAIのような高度な技術を統合するにつれて、その複雑さと課題も増大します。 + +解決すべきいくつかの質問は次のとおりです: + +- **アプリの構築**。特定のユースケースに合わせてこれらのAI駆動アプリケーションを効率的に構築し、シームレスに統合するにはどうすればよいでしょうか? +- **監視**。デプロイ後、アプリケーションが機能面と[責任あるAIの6つの原則](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-105485-koreyst)に従って最高の品質で動作していることをどのように監視し、確保することができるでしょうか? + +自動化とシームレスな人間と機械のインタラクションが特徴の時代に進む中で、ジェネレーティブAIがチャットアプリケーションの範囲、深さ、適応性をどのように変革するかを理解することが重要です。このレッスンでは、これらの複雑なシステムを支えるアーキテクチャの側面を調査し、ドメイン固有のタスクに合わせてそれらを微調整する方法論を深掘りし、責任あるAIのデプロイメントを確保するための指標と考慮事項を評価します。 + +## はじめに + +このレッスンでは以下をカバーします: + +- チャットアプリケーションを効率的に構築し統合するための技術。 +- アプリケーションにカスタマイズと微調整を適用する方法。 +- チャットアプリケーションを効果的に監視するための戦略と考慮事項。 + +## 学習目標 + +このレッスンの終わりまでに、次のことができるようになります: + +- 既存のシステムにチャットアプリケーションを構築し統合する際の考慮事項を説明する。 +- 特定のユースケースに合わせてチャットアプリケーションをカスタマイズする。 +- AI駆動のチャットアプリケーションの品質を効果的に監視し維持するための重要な指標と考慮事項を特定する。 +- チャットアプリケーションがAIを責任を持って活用することを確保する。 + +## チャットアプリケーションへのジェネレーティブAIの統合 + +ジェネレーティブAIを通じてチャットアプリケーションを向上させることは、それらを賢くするだけではなく、品質の高いユーザー体験を提供するためにアーキテクチャ、パフォーマンス、ユーザーインターフェースを最適化することです。これには、アーキテクチャの基礎、APIの統合、ユーザーインターフェースの考慮事項を調査することが含まれます。このセクションでは、既存のシステムに組み込む場合でも、単独のプラットフォームとして構築する場合でも、これらの複雑な環境をナビゲートするための包括的なロードマップを提供することを目指しています。 + +このセクションの終わりまでに、チャットアプリケーションを効率的に構築し組み込むために必要な専門知識を身につけることができます。 + +### チャットボットまたはチャットアプリケーション? + +チャットアプリケーションを構築する前に、'チャットボット'と'AI駆動のチャットアプリケーション'を比較してみましょう。これらは異なる役割と機能を持っています。チャットボットの主な目的は、よくある質問に答えたり、荷物を追跡したりといった特定の会話タスクを自動化することです。通常、ルールベースのロジックや複雑なAIアルゴリズムによって制御されます。一方、AI駆動のチャットアプリケーションは、テキスト、音声、ビデオチャットなどのさまざまなデジタルコミュニケーションを促進するために設計されたはるかに広範な環境です。その特徴は、幅広い入力とコンテキストの手がかりに基づいて応答を生成する、微妙で人間のような会話をシミュレートするジェネレーティブAIモデルの統合です。ジェネレーティブAI駆動のチャットアプリケーションは、オープンドメインのディスカッションに参加し、進化する会話のコンテキストに適応し、さらには創造的または複雑な対話を生成することができます。 + +以下の表は、デジタルコミュニケーションにおけるそれらの独自の役割を理解するための主な違いと類似点を示しています。 + +| チャットボット | ジェネレーティブAI駆動のチャットアプリケーション | +| ------------------------------------- | -------------------------------------- | +| タスクに焦点を当てたルールベース | コンテキストを認識する | +| 大きなシステムに統合されることが多い | 1つ以上のチャットボットをホストすることも可能 | +| プログラムされた機能に限定される | ジェネレーティブAIモデルを組み込む | +| 専門的で構造化されたインタラクション | オープンドメインのディスカッションが可能 | + +### SDKとAPIを活用した既存の機能の利用 + +チャットアプリケーションを構築する際の最初のステップは、既存のものを評価することです。SDKやAPIを使用してチャットアプリケーションを構築することは、さまざまな理由で有利な戦略です。よく文書化されたSDKやAPIを統合することで、スケーラビリティやメンテナンスの懸念を解決しながら、アプリケーションを長期的な成功に向けて戦略的に位置づけることができます。 + +- **開発プロセスを迅速化し、オーバーヘッドを削減**: 高価なプロセスを自分で構築する代わりに既存の機能に頼ることで、ビジネスロジックなど、アプリケーションの他の重要な側面に集中できます。 +- **より良いパフォーマンス**: 機能をゼロから構築するときには、「どのようにスケールするのか?このアプリケーションは急なユーザーの流入に対応できるのか?」といった疑問が浮かびます。よくメンテナンスされたSDKやAPIには、これらの懸念に対する解決策が組み込まれていることがよくあります。 +- **メンテナンスが容易**: 多くのAPIやSDKは、新しいバージョンがリリースされた際にライブラリを更新するだけで、更新や改善が容易に管理できます。 +- **最新技術へのアクセス**: 広範なデータセットで微調整され、訓練されたモデルを活用することで、アプリケーションに自然言語の機能を提供します。 + +SDKやAPIの機能にアクセスするには、通常、提供されたサービスを使用するための許可を取得する必要があります。これは、多くの場合、ユニークなキーや認証トークンを使用して行われます。ここでは、OpenAI Pythonライブラリを使用して、これがどのように見えるかを探ります。また、このレッスンのための[OpenAIのノートブック](../../../07-building-chat-applications/python/oai-assignment.ipynb)や[Azure OpenAI Servicesのノートブック](../../../07-building-chat-applications/python/aoai-assignment.ipynb)でも試してみることができます。 + +```python +import os +from openai import OpenAI + +API_KEY = os.getenv("OPENAI_API_KEY","") + +client = OpenAI( + api_key=API_KEY + ) + +chat_completion = client.chat.completions.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Suggest two titles for an instructional lesson on chat applications for generative AI."}]) +``` + +上記の例では、GPT-3.5 Turboモデルを使用してプロンプトを完了していますが、APIキーが事前に設定されていることに注目してください。キーを設定しないとエラーが発生します。 + +## ユーザーエクスペリエンス (UX) + +一般的なUXの原則はチャットアプリケーションにも適用されますが、機械学習コンポーネントが関与するため、特に重要になる追加の考慮事項があります。 + +- **曖昧さに対処するメカニズム**: ジェネレーティブAIモデルは時折曖昧な回答を生成します。ユーザーがこの問題に直面した場合、明確化を求めることができる機能が役立ちます。 +- **コンテキストの保持**: 高度なジェネレーティブAIモデルは会話内でコンテキストを記憶する能力を持っており、ユーザーエクスペリエンスに必要な資産となることがあります。ユーザーにコンテキストを管理する能力を与えることはユーザーエクスペリエンスを向上させますが、敏感なユーザー情報を保持するリスクもあります。コンテキストの必要性とプライバシーのバランスを取るために、保持ポリシーの導入など、情報がどのくらいの期間保存されるかを考慮することができます。 +- **パーソナライゼーション**: 学習と適応の能力を持つAIモデルは、ユーザーに個別の体験を提供します。ユーザープロファイルなどの機能を通じてユーザーエクスペリエンスをカスタマイズすることで、ユーザーは理解されていると感じるだけでなく、特定の回答を見つけることを助け、より効率的で満足のいくインタラクションを生み出します。 + +パーソナライゼーションの一例として、OpenAIのChatGPTの「カスタム指示」設定があります。プロンプトにとって重要なコンテキストであるかもしれない自分自身に関する情報を提供することができます。以下はカスタム指示の例です。 + +![ChatGPTのカスタム指示設定](../../../translated_images/custom-instructions.png?WT.11dedb56ee96f65348e96bb7d6a0e61e668da5fe777ccd5b63f23e0e7fac407b.ja.mc_id=academic-105485-koreyst) + +この「プロファイル」は、ChatGPTにリンクリストに関するレッスンプランを作成するよう促します。ユーザーがその経験に基づいてより詳細なレッスンプランを求めるかもしれないことをChatGPTが考慮していることに注目してください。 + +![リンクリストに関するレッスンプランのChatGPTプロンプト](../../../translated_images/lesson-plan-prompt.png?WT.a7012bd5b8467d2255be3eb7be93a8622cf74091e2fa815e80c0118416f064fc.ja.mc_id=academic-105485-koreyst) + +### 大規模言語モデル向けのMicrosoftのシステムメッセージフレームワーク + +[Microsoftは、LLMからの応答を生成する際の効果的なシステムメッセージの書き方についてのガイダンスを提供しています](https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-the-models-output-format?WT.mc_id=academic-105485-koreyst)。以下の4つのエリアに分かれています: + +1. モデルの対象者、その能力と制限を定義する。 +2. モデルの出力形式を定義する。 +3. モデルの意図された動作を示す具体的な例を提供する。 +4. 追加の行動ガードレールを提供する。 + +### アクセシビリティ + +ユーザーが視覚、聴覚、運動、または認知障害を持っているかどうかに関わらず、よく設計されたチャットアプリケーションはすべての人が使えるべきです。以下のリストは、さまざまなユーザーの障害に対してアクセシビリティを向上させることを目的とした特定の機能を分解しています。 + +- **視覚障害のための機能**: 高コントラストテーマとテキストのサイズ変更、スクリーンリーダーの互換性。 +- **聴覚障害のための機能**: テキスト読み上げと音声認識機能、音声通知の視覚的なキュー。 +- **運動障害のための機能**: キーボードナビゲーションのサポート、音声コマンド。 +- **認知障害のための機能**: 簡単な言語オプション。 + +## ドメイン固有の言語モデルのカスタマイズと微調整 + +自社の専門用語を理解し、そのユーザーベースがよく持つ特定の質問を予測するチャットアプリケーションを想像してみてください。いくつかのアプローチがあります: + +- **DSLモデルの活用**。DSLはドメイン固有言語を意味します。特定のドメインで訓練されたいわゆるDSLモデルを活用して、その概念やシナリオを理解することができます。 +- **微調整を適用**。微調整は、特定のデータでモデルをさらに訓練するプロセスです。 + +## カスタマイズ: DSLの使用 + +ドメイン固有の言語モデル (DSLモデル) を活用することで、ユーザーエンゲージメントを高め、専門的でコンテキストに関連したインタラクションを提供します。これは、特定の分野、業界、またはテーマに関連したテキストを理解し生成するために訓練または微調整されたモデルです。DSLモデルの使用オプションは、ゼロから訓練することから、SDKやAPIを通じて既存のものを使用することまでさまざまです。もう一つのオプションは微調整で、既存の事前訓練されたモデルを特定のドメインに適応させることです。 + +## カスタマイズ: 微調整の適用 + +微調整は、事前訓練されたモデルが特定のドメインや特定のタスクで不十分な場合に考慮されます。 + +たとえば、医療の質問は複雑で、多くのコンテキストを必要とします。医療専門家が患者を診断する際には、生活習慣や既往症などのさまざまな要因に基づいており、診断を確認するために最近の医療ジャーナルに依存することさえあります。このような微妙なシナリオでは、汎用AIチャットアプリケーションは信頼できる情報源にはなり得ません。 + +### シナリオ: 医療アプリケーション + +医療従事者が治療ガイドライン、薬物相互作用、または最近の研究結果への迅速な参照を提供するために設計されたチャットアプリケーションを考えてみましょう。 + +汎用モデルは基本的な医療質問に答えたり、一般的なアドバイスを提供するのに適しているかもしれませんが、次のような課題があります: + +- **非常に具体的または複雑なケース**。たとえば、神経科医がアプリケーションに「小児の薬物抵抗性てんかんの管理における現在のベストプラクティスは何ですか?」と尋ねる場合。 +- **最近の進展の欠如**。汎用モデルは、神経学と薬理学の最新の進展を取り入れた現在の回答を提供するのに苦労するかもしれません。 + +このような場合には、専門の医療データセットでモデルを微調整することで、これらの複雑な医療の質問により正確かつ信頼性を持って対応する能力を大幅に向上させることができます。これは、対処する必要のあるドメイン固有の課題 + +**免責事項**: +この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを期すため努力しておりますが、自動翻訳には誤りや不正確さが含まれる場合がありますのでご注意ください。原文の母国語での文書が権威ある情報源とみなされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/08-building-search-applications/README.md b/translations/ja/08-building-search-applications/README.md new file mode 100644 index 000000000..e5930d4ad --- /dev/null +++ b/translations/ja/08-building-search-applications/README.md @@ -0,0 +1,166 @@ +# 検索アプリケーションの構築 + +[![生成AIと大規模言語モデルの紹介](../../../translated_images/08-lesson-banner.png?WT.38007baa37b3809836fefd9caf72cba7434d1d1e82074d170c2b066e3c7aa2d0.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson8-gh?WT.mc_id=academic-105485-koreyst) + +> > _このレッスンのビデオを見るには、上の画像をクリックしてください_ + +LLMにはチャットボットやテキスト生成以上の可能性があります。埋め込みを使って検索アプリケーションを構築することも可能です。埋め込みはベクトルとも呼ばれるデータの数値表現であり、データのセマンティック検索に使用できます。 + +このレッスンでは、私たちの教育スタートアップのために検索アプリケーションを構築します。私たちのスタートアップは、発展途上国の学生に無料で教育を提供する非営利団体です。AIについて学ぶために学生が利用できるYouTube動画が多数あります。学生が質問を入力してYouTube動画を検索できる検索アプリケーションを構築したいと考えています。 + +例えば、学生が「Jupyter Notebookとは?」や「Azure MLとは?」と入力すると、検索アプリケーションはその質問に関連するYouTube動画のリストを返し、さらにその質問の答えが動画のどこにあるかへのリンクも返します。 + +## はじめに + +このレッスンでは、以下をカバーします: + +- セマンティック検索 vs キーワード検索 +- テキスト埋め込みとは何か +- テキスト埋め込みインデックスの作成 +- テキスト埋め込みインデックスの検索 + +## 学習目標 + +このレッスンを完了すると、以下ができるようになります: + +- セマンティック検索とキーワード検索の違いを説明する +- テキスト埋め込みが何であるかを説明する +- 埋め込みを使用してデータを検索するアプリケーションを作成する + +## なぜ検索アプリケーションを構築するのか? + +検索アプリケーションを作成することで、埋め込みを使用してデータを検索する方法を理解できます。また、学生が情報を迅速に見つけるための検索アプリケーションを構築する方法も学べます。 + +このレッスンには、Microsoft [AI Show](https://www.youtube.com/playlist?list=PLlrxD0HtieHi0mwteKBOfEeOYf0LJU4O1) YouTubeチャンネルのYouTubeトランスクリプトの埋め込みインデックスが含まれています。AI ShowはAIと機械学習について教えてくれるYouTubeチャンネルです。埋め込みインデックスには2023年10月までの各YouTubeトランスクリプトの埋め込みが含まれています。この埋め込みインデックスを使用して、私たちのスタートアップのための検索アプリケーションを構築します。検索アプリケーションは、質問の答えが動画のどこにあるかへのリンクを返します。これは学生が必要な情報を迅速に見つけるための素晴らしい方法です。 + +以下は「Azure MLでrstudioを使うことができますか?」という質問に対するセマンティッククエリの例です。YouTubeのURLを確認すると、質問の答えが動画のどこにあるかを示すタイムスタンプが含まれていることがわかります。 + +![質問「Azure MLでrstudioを使うことができますか?」のセマンティッククエリ](../../../translated_images/query-results.png?WT.c2bcab091b108e899efca56b2cd996ea8f95145c049888f52ef7495a2b7df665.ja.mc_id=academic-105485-koreyst) + +## セマンティック検索とは何か? + +では、セマンティック検索とは何でしょうか?セマンティック検索は、クエリ内の単語の意味を使用して関連する結果を返す検索技術です。 + +ここにセマンティック検索の例があります。車を購入したいと考えているとしましょう。「私の夢の車」と検索すると、セマンティック検索は車についての`dreaming`ではなく、むしろあなたが`ideal`車を購入しようとしていることを理解します。セマンティック検索はあなたの意図を理解し、関連する結果を返します。これに対して`keyword search`は、車についての夢を文字通りに検索し、しばしば関連性のない結果を返します。 + +## テキスト埋め込みとは何か? + +[テキスト埋め込み](https://en.wikipedia.org/wiki/Word_embedding?WT.mc_id=academic-105485-koreyst)は、[自然言語処理](https://en.wikipedia.org/wiki/Natural_language_processing?WT.mc_id=academic-105485-koreyst)で使用されるテキスト表現技術です。テキスト埋め込みは、テキストのセマンティックな数値表現です。埋め込みは、機械が理解しやすい方法でデータを表現するために使用されます。テキスト埋め込みを構築するためのモデルは多数ありますが、このレッスンではOpenAI埋め込みモデルを使用して埋め込みを生成することに焦点を当てます。 + +例えば、AI Show YouTubeチャンネルのエピソードのトランスクリプトに次のようなテキストがあるとします: + +```text +Today we are going to learn about Azure Machine Learning. +``` + +このテキストをOpenAI埋め込みAPIに渡すと、1536の数値(ベクトルとして知られる)で構成される埋め込みが返されます。ベクトル内の各数値はテキストの異なる側面を表します。簡潔にするために、ベクトル内の最初の10個の数値を以下に示します。 + +```python +[-0.006655829958617687, 0.0026128944009542465, 0.008792596869170666, -0.02446001023054123, -0.008540431968867779, 0.022071078419685364, -0.010703742504119873, 0.003311325330287218, -0.011632772162556648, -0.02187200076878071, ...] +``` + +## 埋め込みインデックスはどのように作成されるのか? + +このレッスンの埋め込みインデックスは、一連のPythonスクリプトで作成されました。スクリプトと手順は、'scripts'フォルダーの[README](./scripts/README.md?WT.mc_id=academic-105485-koreyst)にあります。このレッスンを完了するためにこれらのスクリプトを実行する必要はありません。埋め込みインデックスは提供されています。 + +スクリプトは以下の操作を行います: + +1. [AI Show](https://www.youtube.com/playlist?list=PLlrxD0HtieHi0mwteKBOfEeOYf0LJU4O1)プレイリスト内の各YouTube動画のトランスクリプトをダウンロードします。 +2. [OpenAI Functions](https://learn.microsoft.com/azure/ai-services/openai/how-to/function-calling?WT.mc_id=academic-105485-koreyst)を使用して、YouTubeトランスクリプトの最初の3分からスピーカー名を抽出しようとします。各動画のスピーカー名は`embedding_index_3m.json`という名前の埋め込みインデックスに保存されます。 +3. トランスクリプトテキストは**3分のテキストセグメント**に分割されます。セグメントには次のセグメントから約20語が重複して含まれ、セグメントの埋め込みが切れないようにし、より良い検索コンテキストを提供します。 +4. 各テキストセグメントはOpenAI Chat APIに渡され、60語に要約されます。この要約も`embedding_index_3m.json`に保存されます。 +5. 最後に、セグメントテキストはOpenAI埋め込みAPIに渡されます。埋め込みAPIは、セグメントのセマンティックな意味を表す1536の数値で構成されたベクトルを返します。セグメントとOpenAI埋め込みベクトルは`embedding_index_3m.json`に保存されます。 + +### ベクトルデータベース + +レッスンを簡単にするために、埋め込みインデックスは`embedding_index_3m.json`という名前のJSONファイルに保存され、Pandas DataFrameにロードされます。しかし、実運用では、埋め込みインデックスは[Azure Cognitive Search](https://learn.microsoft.com/training/modules/improve-search-results-vector-search?WT.mc_id=academic-105485-koreyst)、[Redis](https://cookbook.openai.com/examples/vector_databases/redis/readme?WT.mc_id=academic-105485-koreyst)、[Pinecone](https://cookbook.openai.com/examples/vector_databases/pinecone/readme?WT.mc_id=academic-105485-koreyst)、[Weaviate](https://cookbook.openai.com/examples/vector_databases/weaviate/readme?WT.mc_id=academic-105485-koreyst)などのベクトルデータベースに保存されます。 + +## コサイン類似性の理解 + +テキスト埋め込みについて学んだので、次のステップはテキスト埋め込みを使ってデータを検索し、特にコサイン類似性を使って与えられたクエリに最も類似した埋め込みを見つける方法を学ぶことです。 + +### コサイン類似性とは何か? + +コサイン類似性は、2つのベクトル間の類似性を測定する方法であり、`nearest neighbor search`とも呼ばれます。コサイン類似性検索を行うには、OpenAI埋め込みAPIを使用して_クエリ_テキストを_ベクトル化_する必要があります。次に、クエリベクトルと埋め込みインデックス内の各ベクトルとの_コサイン類似性_を計算します。埋め込みインデックスには、各YouTubeトランスクリプトテキストセグメントのベクトルがあります。最後に、コサイン類似性で結果をソートし、コサイン類似性が最も高いテキストセグメントがクエリに最も類似しています。 + +数学的な観点から見ると、コサイン類似性は多次元空間に投影された2つのベクトル間の角度のコサインを測定します。この測定は有益であり、ユークリッド距離で離れている2つのドキュメントがサイズのために、まだそれらの間に小さな角度を持っている可能性があり、それゆえに高いコサイン類似性を持っている可能性があります。コサイン類似性の方程式に関する詳細情報は、[コサイン類似性](https://en.wikipedia.org/wiki/Cosine_similarity?WT.mc_id=academic-105485-koreyst)をご覧ください。 + +## 初めての検索アプリケーションの構築 + +次に、埋め込みを使用して検索アプリケーションを構築する方法を学びます。この検索アプリケーションでは、学生が質問を入力することで動画を検索できます。検索アプリケーションは、質問に関連する動画のリストを返します。また、質問の答えが動画のどこにあるかへのリンクも返します。 + +このソリューションは、Windows 11、macOS、Ubuntu 22.04でPython 3.10以降を使用して構築およびテストされました。Pythonは[python.org](https://www.python.org/downloads/?WT.mc_id=academic-105485-koreyst)からダウンロードできます。 + +## 課題 - 学生をサポートするための検索アプリケーションの構築 + +このレッスンの冒頭で私たちのスタートアップを紹介しました。今度は、学生が自分の評価のために検索アプリケーションを構築できるようにする時です。 + +この課題では、検索アプリケーションの構築に使用されるAzure OpenAIサービスを作成します。次のAzure OpenAIサービスを作成します。この課題を完了するには、Azureサブスクリプションが必要です。 + +### Azure Cloud Shellの開始 + +1. [Azureポータル](https://portal.azure.com/?WT.mc_id=academic-105485-koreyst)にサインインします。 +2. Azureポータルの右上隅にあるCloud Shellアイコンを選択します。 +3. 環境タイプとして**Bash**を選択します。 + +#### リソースグループの作成 + +> これらの手順では、East USにある「semantic-video-search」という名前のリソースグループを使用しています。 +> リソースグループの名前を変更することはできますが、リソースの場所を変更する際には、 +> [モデルの可用性表](https://aka.ms/oai/models?WT.mc_id=academic-105485-koreyst)を確認してください。 + +```shell +az group create --name semantic-video-search --location eastus +``` + +#### Azure OpenAIサービスリソースの作成 + +Azure Cloud Shellから次のコマンドを実行して、Azure OpenAIサービスリソースを作成します。 + +```shell +az cognitiveservices account create --name semantic-video-openai --resource-group semantic-video-search \ + --location eastus --kind OpenAI --sku s0 +``` + +#### このアプリケーションで使用するエンドポイントとキーの取得 + +Azure Cloud Shellから次のコマンドを実行して、Azure OpenAIサービスリソースのエンドポイントとキーを取得します。 + +```shell +az cognitiveservices account show --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .properties.endpoint +az cognitiveservices account keys list --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .key1 +``` + +#### OpenAI埋め込みモデルのデプロイ + +Azure Cloud Shellから次のコマンドを実行して、OpenAI埋め込みモデルをデプロイします。 + +```shell +az cognitiveservices account deployment create \ + --name semantic-video-openai \ + --resource-group semantic-video-search \ + --deployment-name text-embedding-ada-002 \ + --model-name text-embedding-ada-002 \ + --model-version "2" \ + --model-format OpenAI \ + --sku-capacity 100 --sku-name "Standard" +``` + +## ソリューション + +GitHub Codespacesで[ソリューションノートブック](../../../08-building-search-applications/python/aoai-solution.ipynb)を開き、Jupyterノートブックの指示に従ってください。 + +ノートブックを実行すると、クエリを入力するように促されます。入力ボックスは次のように見えます: + +![ユーザーがクエリを入力するための入力ボックス](../../../translated_images/notebook-search.png?WT.2910e3d34815aab8d713050521ac5fcb2436defe66fed016f56b95867eb12fbd.ja.mc_id=academic-105485-koreyst) + +## 素晴らしい仕事!学習を続けましょう + +このレッスンを完了した後は、[生成AI学習コレクション](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)をチェックして、生成AIの知識をさらに深めましょう! + +次のレッスン9では、[画像生成アプリケーションの構築](../09-building-image-applications/README.md?WT.mc_id=academic-105485-koreyst)について学びます! + +**免責事項**: +この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを期しておりますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご承知おきください。原文の言語で書かれた文書が信頼できる情報源とみなされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/08-building-search-applications/scripts/README.md b/translations/ja/08-building-search-applications/scripts/README.md new file mode 100644 index 000000000..bbc2cce68 --- /dev/null +++ b/translations/ja/08-building-search-applications/scripts/README.md @@ -0,0 +1,167 @@ +# 転写データ準備 + +転写データ準備スクリプトは、YouTubeのビデオ転写をダウンロードし、OpenAIの埋め込みと機能を用いたセマンティック検索のサンプルで使用できるように準備します。 + +転写データ準備スクリプトは、最新のWindows 11、macOS Ventura、およびUbuntu 22.04(およびそれ以上)でテストされています。 + +## 必要なAzure OpenAI Serviceリソースの作成 + +> [!IMPORTANT] +> OpenAIとの互換性を確保するため、Azure CLIを最新バージョンに更新することをお勧めします。 +> [Documentation](https://learn.microsoft.com/cli/azure/update-azure-cli?WT.mc_id=academic-105485-koreyst)を参照してください。 + +1. リソースグループを作成する + +> [!NOTE] +> この手順では、East USの「semantic-video-search」という名前のリソースグループを使用しています。 +> リソースグループの名前を変更することができますが、リソースの場所を変更する際には、 +> [モデルの可用性表](https://aka.ms/oai/models?WT.mc_id=academic-105485-koreyst)を確認してください。 + +```console +az group create --name semantic-video-search --location eastus +``` + +1. Azure OpenAI Serviceリソースを作成する。 + +```console +az cognitiveservices account create --name semantic-video-openai --resource-group semantic-video-search \ + --location eastus --kind OpenAI --sku s0 +``` + +1. このアプリケーションで使用するためのエンドポイントとキーを取得する + +```console +az cognitiveservices account show --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .properties.endpoint +az cognitiveservices account keys list --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .key1 +``` + +1. 以下のモデルをデプロイする: + - `text-embedding-ada-002` version `2` or greater, named `text-embedding-ada-002` + - `gpt-35-turbo` version `0613` or greater, named `gpt-35-turbo` + +```console +az cognitiveservices account deployment create \ + --name semantic-video-openai \ + --resource-group semantic-video-search \ + --deployment-name text-embedding-ada-002 \ + --model-name text-embedding-ada-002 \ + --model-version "2" \ + --model-format OpenAI \ + --scale-settings-scale-type "Standard" +az cognitiveservices account deployment create \ + --name semantic-video-openai \ + --resource-group semantic-video-search \ + --deployment-name gpt-35-turbo \ + --model-name gpt-35-turbo \ + --model-version "0613" \ + --model-format OpenAI \ + --sku-capacity 100 \ + --sku-name "Standard" +``` + +## 必要なソフトウェア + +- [Python 3.9](https://www.python.org/downloads/?WT.mc_id=academic-105485-koreyst) 以上 + +## 環境変数 + +YouTube転写データ準備スクリプトを実行するためには、以下の環境変数が必要です。 + +### Windowsの場合 + +変数を `user` environment variables. +`Windows Start` > `Edit the system environment variables` > `Environment Variables` > `User variables` for [USER] > `New` に追加することをお勧めします。 + +```text +AZURE_OPENAI_API_KEY \ +AZURE_OPENAI_ENDPOINT \ +AZURE_OPENAI_MODEL_DEPLOYMENT_NAME \ +GOOGLE_DEVELOPER_API_KEY = \ +``` + +### LinuxとmacOSの場合 + +以下のエクスポートを `~/.bashrc` or `~/.zshrc` ファイルに追加することをお勧めします。 + +```bash +export AZURE_OPENAI_API_KEY= +export AZURE_OPENAI_ENDPOINT= +export AZURE_OPENAI_MODEL_DEPLOYMENT_NAME= +export GOOGLE_DEVELOPER_API_KEY= +``` + +## 必要なPythonライブラリのインストール + +1. [gitクライアント](https://git-scm.com/downloads?WT.mc_id=academic-105485-koreyst)がインストールされていない場合は、インストールします。 +1. `Terminal`ウィンドウから、サンプルを希望のリポジトリフォルダーにクローンします。 + + ```bash + git clone https://github.com/gloveboxes/semanic-search-openai-embeddings-functions.git + ``` + +1. `data_prep`フォルダーに移動します。 + + ```bash + cd semanic-search-openai-embeddings-functions/src/data_prep + ``` + +1. Python仮想環境を作成します。 + + Windowsの場合: + + ```powershell + python -m venv .venv + ``` + + macOSとLinuxの場合: + + ```bash + python3 -m venv .venv + ``` + +1. Python仮想環境をアクティブにします。 + + Windowsの場合: + + ```powershell + .venv\Scripts\activate + ``` + + macOSとLinuxの場合: + + ```bash + source .venv/bin/activate + ``` + +1. 必要なライブラリをインストールします。 + + Windowsの場合: + + ```powershell + pip install -r requirements.txt + ``` + + macOSとLinuxの場合: + + ```bash + pip3 install -r requirements.txt + ``` + +## YouTube転写データ準備スクリプトの実行 + +### Windowsの場合 + +```powershell +.\transcripts_prepare.ps1 +``` + +### macOSとLinuxの場合 + +```bash +./transcripts_prepare.sh +``` + +**免責事項**: +この文書は機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを期していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご了承ください。原文はその言語における権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/09-building-image-applications/README.md b/translations/ja/09-building-image-applications/README.md new file mode 100644 index 000000000..197238b0e --- /dev/null +++ b/translations/ja/09-building-image-applications/README.md @@ -0,0 +1,468 @@ +# 画像生成アプリケーションの構築 + +[![画像生成アプリケーションの構築](../../../translated_images/09-lesson-banner.png?WT.d9f0561bfac2f22fe149efecb3524eaf381a4aa260ba334f49b1fd215bd59d75.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson9-gh?WT.mc_id=academic-105485-koreyst) + +LLMにはテキスト生成以外にも多くの可能性があります。テキストの説明から画像を生成することも可能です。画像をモダリティとして使用することは、MedTech、建築、観光、ゲーム開発など、さまざまな分野で非常に役立ちます。この章では、最も人気のある画像生成モデルであるDALL-EとMidjourneyについて見ていきます。 + +## はじめに + +このレッスンでは以下を学びます: + +- 画像生成とその有用性について。 +- DALL-EとMidjourney、それが何であるか、どのように機能するか。 +- 画像生成アプリをどのように構築するか。 + +## 学習目標 + +このレッスンを完了すると、以下ができるようになります: + +- 画像生成アプリケーションを構築する。 +- メタプロンプトでアプリケーションの境界を定義する。 +- DALL-EとMidjourneyを使いこなす。 + +## なぜ画像生成アプリケーションを構築するのか? + +画像生成アプリケーションは、生成AIの能力を探求する素晴らしい方法です。例えば、以下のような用途に利用できます: + +- **画像編集と合成**。画像編集や画像合成など、さまざまなユースケースに画像を生成できます。 + +- **さまざまな業界に適用可能**。MedTech、観光、ゲーム開発など、さまざまな業界で画像を生成するために使用できます。 + +## シナリオ: Edu4All + +このレッスンの一環として、私たちのスタートアップEdu4Allと一緒に作業を続けます。学生たちは評価のための画像を作成します。どんな画像を作成するかは学生次第ですが、自分の童話のイラストを作成したり、新しいキャラクターを作成したり、自分のアイデアや概念を視覚化するのに役立てることができます。 + +例えば、Edu4Allの学生がクラスでモニュメントについて学んでいる場合、次のような画像を生成できます: + +![Edu4Allスタートアップ、モニュメントのクラス、エッフェル塔](../../../translated_images/startup.png?WT.da6453984b26f46f3e26925e20877c740be4f328afdfce9fe36b23e7b434c7b5.ja.mc_id=academic-105485-koreyst) + +次のようなプロンプトを使用して + +> "早朝の陽光の中でエッフェル塔の隣にいる犬" + +## DALL-EとMidjourneyとは? + +[DALL-E](https://openai.com/dall-e-2?WT.mc_id=academic-105485-koreyst)と[Midjourney](https://www.midjourney.com/?WT.mc_id=academic-105485-koreyst)は、最も人気のある画像生成モデルの2つで、プロンプトを使用して画像を生成できます。 + +### DALL-E + +まずDALL-Eから始めましょう。これはテキストの説明から画像を生成する生成AIモデルです。 + +> [DALL-Eは、CLIPと拡散注意の2つのモデルの組み合わせです](https://towardsdatascience.com/openais-dall-e-and-clip-101-a-brief-introduction-3a4367280d4e?WT.mc_id=academic-105485-koreyst)。 + +- **CLIP**は、画像やテキストからデータの数値表現である埋め込みを生成するモデルです。 + +- **拡散注意**は、埋め込みから画像を生成するモデルです。DALL-Eは画像とテキストのデータセットでトレーニングされており、テキストの説明から画像を生成するために使用できます。例えば、DALL-Eを使用して帽子をかぶった猫やモヒカンの犬の画像を生成することができます。 + +### Midjourney + +MidjourneyもDALL-Eと同様に、テキストプロンプトから画像を生成します。Midjourneyを使用して、「帽子をかぶった猫」や「モヒカンの犬」などのプロンプトで画像を生成することができます。 + +![Midjourneyによって生成された画像、メカニカルハト](https://upload.wikimedia.org/wikipedia/commons/thumb/8/8c/Rupert_Breheny_mechanical_dove_eca144e7-476d-4976-821d-a49c408e4f36.png/440px-Rupert_Breheny_mechanical_dove_eca144e7-476d-4976-821d-a49c408e4f36.png?WT.mc_id=academic-105485-koreyst) +_画像クレジット: Wikipedia、Midjourneyによって生成された画像_ + +## DALL-EとMidjourneyはどのように機能するのか + +まず、[DALL-E](https://arxiv.org/pdf/2102.12092.pdf?WT.mc_id=academic-105485-koreyst)です。DALL-Eはトランスフォーマーアーキテクチャに基づいた生成AIモデルで、_自己回帰トランスフォーマー_を使用しています。 + +_自己回帰トランスフォーマー_は、テキストの説明から画像を生成する方法を定義します。1ピクセルずつ生成し、生成されたピクセルを使用して次のピクセルを生成します。ニューラルネットワークの複数の層を通過し、画像が完成します。 + +このプロセスを通じて、DALL-Eは生成された画像内の属性、オブジェクト、特徴などを制御します。しかし、DALL-E 2と3は生成された画像に対してより多くの制御を持っています。 + +## 初めての画像生成アプリケーションを構築する + +では、画像生成アプリケーションを構築するには何が必要でしょうか?以下のライブラリが必要です: + +- **python-dotenv**、このライブラリを使用して、秘密情報をコードから離れた_.env_ファイルに保持することを強くお勧めします。 +- **openai**、このライブラリはOpenAI APIと対話するために使用します。 +- **pillow**、Pythonで画像を操作するために使用します。 +- **requests**、HTTPリクエストを行うのを助けます。 + +1. 以下の内容で_.env_ファイルを作成します: + + ```text + AZURE_OPENAI_ENDPOINT= + AZURE_OPENAI_API_KEY= + ``` + + Azure Portalでリソースの「Keys and Endpoint」セクションからこの情報を見つけます。 + +1. 上記のライブラリを_requirements.txt_というファイルに以下のように集めます: + + ```text + python-dotenv + openai + pillow + requests + ``` + +1. 次に、仮想環境を作成し、ライブラリをインストールします: + + ```bash + python3 -m venv venv + source venv/bin/activate + pip install -r requirements.txt + ``` + + Windowsの場合、仮想環境を作成し、アクティブ化するために以下のコマンドを使用します: + + ```bash + python3 -m venv venv + venv\Scripts\activate.bat + ``` + +1. _app.py_というファイルに以下のコードを追加します: + + ```python + import openai + import os + import requests + from PIL import Image + import dotenv + + # import dotenv + dotenv.load_dotenv() + + # Get endpoint and key from environment variables + openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] + openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] + + # Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only) + openai.api_version = '2023-06-01-preview' + openai.api_type = 'azure' + + + try: + # Create an image by using the image generation API + generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) + # Set the directory for the stored image + image_dir = os.path.join(os.curdir, 'images') + + # If the directory doesn't exist, create it + if not os.path.isdir(image_dir): + os.mkdir(image_dir) + + # Initialize the image path (note the filetype should be png) + image_path = os.path.join(image_dir, 'generated-image.png') + + # Retrieve the generated image + image_url = generation_response["data"][0]["url"] # extract image URL from response + generated_image = requests.get(image_url).content # download the image + with open(image_path, "wb") as image_file: + image_file.write(generated_image) + + # Display the image in the default image viewer + image = Image.open(image_path) + image.show() + + # catch exceptions + except openai.InvalidRequestError as err: + print(err) + + ``` + +このコードを説明します: + +- まず、必要なライブラリをインポートします。OpenAIライブラリ、dotenvライブラリ、requestsライブラリ、Pillowライブラリを含みます。 + + ```python + import openai + import os + import requests + from PIL import Image + import dotenv + ``` + +- 次に、_.env_ファイルから環境変数をロードします。 + + ```python + # import dotenv + dotenv.load_dotenv() + ``` + +- その後、OpenAI APIのエンドポイント、キー、バージョン、タイプを設定します。 + + ```python + # Get endpoint and key from environment variables + openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] + openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] + + # add version and type, Azure specific + openai.api_version = '2023-06-01-preview' + openai.api_type = 'azure' + ``` + +- 次に、画像を生成します: + + ```python + # Create an image by using the image generation API + generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) + ``` + + 上記のコードは、生成された画像のURLを含むJSONオブジェクトを返します。このURLを使用して画像をダウンロードし、ファイルに保存できます。 + +- 最後に、画像を開き、標準の画像ビューアで表示します: + + ```python + image = Image.open(image_path) + image.show() + ``` + +### 画像生成の詳細 + +画像を生成するコードを詳しく見てみましょう: + +```python +generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) +``` + +- **prompt**は、画像を生成するために使用されるテキストプロンプトです。この場合、"Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils"というプロンプトを使用しています。 +- **size**は、生成される画像のサイズです。この場合、1024x1024ピクセルの画像を生成しています。 +- **n**は、生成される画像の数です。この場合、2つの画像を生成しています。 +- **temperature**は、生成AIモデルの出力のランダム性を制御するパラメータです。温度は0から1の間の値で、0は出力が決定的であり、1は出力がランダムであることを意味します。デフォルト値は0.7です。 + +次のセクションでは、画像に関してできることをさらにカバーします。 + +## 画像生成の追加機能 + +これまでに、Pythonの数行で画像を生成できることを見てきました。しかし、画像に関してできることはもっとあります。 + +以下のこともできます: + +- **編集を行う**。既存の画像にマスクとプロンプトを提供することで、画像を変更できます。例えば、画像の一部に何かを追加できます。私たちのバニー画像を想像してみてください。バニーに帽子を追加できます。これを行う方法は、画像、マスク(変更のための領域を識別するもの)、そして何を行うべきかを示すテキストプロンプトを提供することです。 + + ```python + response = openai.Image.create_edit( + image=open("base_image.png", "rb"), + mask=open("mask.png", "rb"), + prompt="An image of a rabbit with a hat on its head.", + n=1, + size="1024x1024" + ) + image_url = response['data'][0]['url'] + ``` + + 基本画像にはうさぎだけが含まれますが、最終画像にはうさぎに帽子が追加されます。 + +- **バリエーションを作成する**。既存の画像を取り、バリエーションを作成することを依頼します。バリエーションを作成するには、画像とテキストプロンプトを提供し、次のようにコードを書きます: + + ```python + response = openai.Image.create_variation( + image=open("bunny-lollipop.png", "rb"), + n=1, + size="1024x1024" + ) + image_url = response['data'][0]['url'] + ``` + + > 注記、これはOpenAIでのみサポートされています + +## 温度 + +温度は、生成AIモデルの出力のランダム性を制御するパラメータです。温度は0から1の間の値で、0は出力が決定的であり、1は出力がランダムであることを意味します。デフォルト値は0.7です。 + +温度がどのように機能するかを例で見てみましょう。このプロンプトを2回実行してみます: + +> プロンプト : "Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils" + +![Bunny on a horse holding a lollipop, version 1](../../../translated_images/v1-generated-image.png?WT.e88fb2d10c6d1ae1c198e2959629a4737a139b457fed4b2f325b2ea8d2c7bca6.ja.mc_id=academic-105485-koreyst) + +同じプロンプトをもう一度実行して、同じ画像が2回生成されないことを確認してみましょう: + +![Generated image of bunny on horse](../../../translated_images/v2-generated-image.png?WT.10df7dd739ff1f669b915523632a51ade0346b30603d8bf996872ac629f3dcd7.ja.mc_id=academic-105485-koreyst) + +ご覧のとおり、画像は似ていますが、同じではありません。温度値を0.1に変更してみましょう: + +```python + generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2 + ) +``` + +### 温度の変更 + +応答をより決定的にするために試してみましょう。生成された2つの画像から、最初の画像にはうさぎがいて、2番目の画像には馬がいることが観察できるので、画像は大きく異なります。 + +したがって、コードを変更し、温度を0に設定してみましょう: + +```python +generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0 + ) +``` + +このコードを実行すると、次の2つの画像が得られます: + +- ![Temperature 0, v1](../../../translated_images/v1-temp-generated-image.png?WT.27c4ce8ff113ce11a5a45b5c74e319c5115b0b832a3697bc91fc653d0a5f7609.ja.mc_id=academic-105485-koreyst) +- ![Temperature 0 , v2](../../../translated_images/v2-temp-generated-image.png?WT.04d52c2aa6ef41f4d67040329ca204ef927512f46bb9dfef035e02098f45d0f7.ja.mc_id=academic-105485-koreyst) + +ここで、画像がより似ていることが明らかにわかります。 + +## メタプロンプトでアプリケーションの境界を定義する方法 + +デモを使って、すでにクライアントのために画像を生成できます。しかし、アプリケーションのためにいくつかの境界を作成する必要があります。 + +たとえば、仕事に不適切な画像や、子供に適さない画像を生成したくありません。 + +これを_metaprompts_で行うことができます。メタプロンプトは、生成AIモデルの出力を制御するために使用されるテキストプロンプトです。たとえば、メタプロンプトを使用して、生成された画像が仕事に適しているか、子供に適していることを確認できます。 + +### それはどのように機能するのか? + +では、メタプロンプトはどのように機能するのでしょうか? + +メタプロンプトは、生成AIモデルの出力を制御するために使用されるテキストプロンプトであり、テキストプロンプトの前に配置され、モデルの出力を制御するために使用され、アプリケーションに埋め込まれてモデルの出力を制御します。プロンプト入力とメタプロンプト入力を単一のテキストプロンプトにカプセル化します。 + +メタプロンプトの一例は次のようになります: + +```text +You are an assistant designer that creates images for children. + +The image needs to be safe for work and appropriate for children. + +The image needs to be in color. + +The image needs to be in landscape orientation. + +The image needs to be in a 16:9 aspect ratio. + +Do not consider any input from the following that is not safe for work or appropriate for children. + +(Input) + +``` + +では、デモでメタプロンプトをどのように使用できるかを見てみましょう。 + +```python +disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult" + +meta_prompt =f"""You are an assistant designer that creates images for children. + +The image needs to be safe for work and appropriate for children. + +The image needs to be in color. + +The image needs to be in landscape orientation. + +The image needs to be in a 16:9 aspect ratio. + +Do not consider any input from the following that is not safe for work or appropriate for children. +{disallow_list} +""" + +prompt = f"{meta_prompt} +Create an image of a bunny on a horse, holding a lollipop" + +# TODO add request to generate image +``` + +上記のプロンプトから、すべての生成される画像がメタプロンプトを考慮していることがわかります。 + +## 課題 - 学生を支援しよう + +このレッスンの最初にEdu4Allを紹介しました。今度は、学生が評価のために画像を生成できるようにしましょう。 + +学生たちは、モニュメントを含む評価のための画像を作成します。どのモニュメントを選ぶかは学生次第です。学生はこのタスクで創造性を発揮し、これらのモニュメントを異なる文脈で配置するよう求められています。 + +## 解決策 + +以下は一つの解決策です: + +```python +import openai +import os +import requests +from PIL import Image +import dotenv + +# import dotenv +dotenv.load_dotenv() + +# Get endpoint and key from environment variables +openai.api_base = "" +openai.api_key = "" + +# Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only) +openai.api_version = '2023-06-01-preview' +openai.api_type = 'azure' + +disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult" + +meta_prompt = f"""You are an assistant designer that creates images for children. + +The image needs to be safe for work and appropriate for children. + +The image needs to be in color. + +The image needs to be in landscape orientation. + +The image needs to be in a 16:9 aspect ratio. + +Do not consider any input from the following that is not safe for work or appropriate for children. +{disallow_list}""" + +prompt = f"""{metaprompt} +Generate monument of the Arc of Triumph in Paris, France, in the evening light with a small child holding a Teddy looks on. +"""" + +try: + # Create an image by using the image generation API + generation_response = openai.Image.create( + prompt=prompt, # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) + # Set the directory for the stored image + image_dir = os.path.join(os.curdir, 'images') + + # If the directory doesn't exist, create it + if not os.path.isdir(image_dir): + os.mkdir(image_dir) + + # Initialize the image path (note the filetype should be png) + image_path = os.path.join(image_dir, 'generated-image.png') + + # Retrieve the generated image + image_url = generation_response["data"][0]["url"] # extract image URL from response + generated_image = requests.get(image_url).content # download the image + with open(image_path, "wb") as image_file: + image_file.write(generated_image) + + # Display the image in the default image viewer + image = Image.open(image_path) + image.show() + +# catch exceptions +except openai.InvalidRequestError as err: + print(err) +``` + +## 素晴らしい仕事!学習を続けましょう + +このレッスンを完了した後は、[Generative AI Learningコレクション](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)をチェックして、Generative AIの知識をさらに深めてください! + +レッスン10に進み、[ローコードでAIアプリケーションを構築する方法](../10-building-low-code-ai-applications/README.md?WT.mc_id=academic-105485-koreyst)を見てみましょう。 + +**免責事項**: +この文書は機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご承知おきください。元の言語で書かれた原文が権威ある情報源と見なされるべきです。重要な情報については、プロの人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/10-building-low-code-ai-applications/README.md b/translations/ja/10-building-low-code-ai-applications/README.md new file mode 100644 index 000000000..dffe44d83 --- /dev/null +++ b/translations/ja/10-building-low-code-ai-applications/README.md @@ -0,0 +1,163 @@ +# ローコードAIアプリケーションの構築 + +[![ローコードAIアプリケーションの構築](../../../translated_images/10-lesson-banner.png?WT.03212fed0693cf8837c727edc800942dbc5ef3a3036a8f7f399c6c08f6f59b92.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson10-gh?WT.mc_id=academic-105485-koreyst) + +> _(このレッスンのビデオを見るには上の画像をクリックしてください)_ + +## はじめに + +これまでに画像生成アプリケーションの構築方法を学んできましたが、今回はローコードについて話しましょう。生成AIはローコードを含むさまざまな分野で使用できますが、ローコードとは何か、そしてどのようにAIを追加できるのでしょうか? + +ローコード開発プラットフォームを利用することで、従来の開発者や非開発者がアプリやソリューションをより簡単に構築できるようになりました。ローコード開発プラットフォームは、コードをほとんどまたはまったく使わずにアプリやソリューションを構築することを可能にします。これは、コンポーネントをドラッグ&ドロップしてアプリやソリューションを構築できるビジュアル開発環境を提供することで実現されます。これにより、アプリやソリューションをより迅速に、少ないリソースで構築することが可能になります。このレッスンでは、ローコードの使用方法と、Power Platformを使用してAIでローコード開発を強化する方法について詳しく掘り下げます。 + +Power Platformは、組織が直感的なローコードまたはノーコード環境を通じて自分たちのソリューションを構築する力をチームに与える機会を提供します。この環境は、ソリューション構築のプロセスを簡素化します。Power Platformを使用すると、ソリューションは数ヶ月や数年ではなく、数日や数週間で構築できます。Power Platformは、Power Apps、Power Automate、Power BI、Power Pages、Copilot Studioの5つの主要製品で構成されています。 + +このレッスンでは次の内容をカバーします: + +- Power Platformにおける生成AIの概要 +- Copilotの紹介とその使用方法 +- Power Platformでアプリやフローを構築するための生成AIの使用 +- AI BuilderでのPower PlatformにおけるAIモデルの理解 + +## 学習目標 + +このレッスンの終わりまでに、次のことができるようになります: + +- Power PlatformでのCopilotの動作を理解する。 + +- 教育系スタートアップ向けの学生課題追跡アプリを構築する。 + +- 請求書から情報を抽出するAIを使用した請求書処理フローを構築する。 + +- GPT AIモデルでテキストを生成する際のベストプラクティスを適用する。 + +このレッスンで使用するツールと技術は次のとおりです: + +- **Power Apps**:学生課題追跡アプリ用で、データを追跡、管理、対話するためのアプリを構築するローコード開発環境を提供します。 + +- **Dataverse**:学生課題追跡アプリのデータを保存するために使用され、アプリのデータを保存するためのローコードデータプラットフォームを提供します。 + +- **Power Automate**:請求書処理フロー用で、請求書処理プロセスを自動化するためのワークフローを構築するローコード開発環境を提供します。 + +- **AI Builder**:スタートアップの請求書を処理するための事前構築されたAIモデルを使用します。 + +## Power Platformにおける生成AI + +生成AIによってローコード開発とアプリケーションを強化することは、Power Platformの重要な焦点領域です。目標は、データサイエンスの専門知識を必要とせずに、AIを活用したアプリ、サイト、ダッシュボードを構築し、プロセスを自動化できるようにすることです。この目標は、CopilotとAI Builderの形でPower Platformのローコード開発体験に生成AIを統合することで達成されます。 + +### これはどのように機能するのか? + +Copilotは、自然言語を使用した一連の会話ステップで要件を説明することで、Power Platformのソリューションを構築できるAIアシスタントです。たとえば、AIアシスタントにアプリで使用するフィールドを指定すると、アプリとその基礎となるデータモデルの両方を作成したり、Power Automateでフローを設定する方法を指定したりできます。 + +Copilotを活用した機能をアプリ画面の機能として使用することで、ユーザーが会話型インタラクションを通じて洞察を得ることができます。 + +AI Builderは、Power Platformで利用可能なローコードAI機能であり、AIモデルを使用してプロセスを自動化し、結果を予測するのに役立ちます。AI Builderを使用すると、DataverseやSharePoint、OneDrive、Azureなどのさまざまなクラウドデータソースに接続するアプリやフローにAIを導入できます。 + +Copilotは、Power Apps、Power Automate、Power BI、Power Pages、Power Virtual AgentsのすべてのPower Platform製品で利用可能です。AI Builderは、Power AppsとPower Automateで利用可能です。このレッスンでは、教育系スタートアップ向けのソリューションを構築するために、Power AppsとPower AutomateでCopilotとAI Builderをどのように使用するかに焦点を当てます。 + +### Power AppsにおけるCopilot + +Power Platformの一部として、Power Appsはデータを追跡、管理、対話するためのアプリを構築するローコード開発環境を提供します。これは、スケーラブルなデータプラットフォームとクラウドサービスやオンプレミスデータに接続する能力を備えたアプリ開発サービスのスイートです。Power Appsを使用すると、ブラウザ、タブレット、スマートフォンで動作するアプリを構築し、同僚と共有できます。Power Appsは、シンプルなインターフェースでアプリ開発を容易にし、ビジネスユーザーやプロの開発者がカスタムアプリを構築できるようにします。生成AIを活用したCopilotを通じてアプリ開発体験も向上します。 + +Power AppsのCopilot AIアシスタント機能を使用すると、必要なアプリの種類やアプリで追跡、収集、表示したい情報を説明できます。Copilotは、あなたの説明に基づいて応答性のあるキャンバスアプリを生成します。その後、アプリをカスタマイズしてニーズに合わせることができます。AI Copilotは、追跡したいデータを保存するためのフィールドを持つDataverseテーブルといくつかのサンプルデータを生成し、提案します。このレッスンでは、Dataverseとは何か、Power Appsでどのように使用できるかを後で説明します。会話型ステップを通じてAI Copilotアシスタント機能を使用してテーブルをカスタマイズできます。この機能は、Power Appsのホーム画面からすぐに利用できます。 + +### Power AutomateにおけるCopilot + +Power Platformの一部として、Power Automateはアプリケーションやサービス間で自動化されたワークフローを作成できるようにします。通信、データ収集、意思決定承認などの反復的なビジネスプロセスを自動化するのに役立ちます。そのシンプルなインターフェースにより、初心者から経験豊富な開発者まで、あらゆる技術レベルのユーザーが作業タスクを自動化できます。ワークフロー開発体験も、生成AIを活用したCopilotを通じて向上します。 + +Power AutomateのCopilot AIアシスタント機能を使用すると、必要なフローの種類やフローに実行させたいアクションを説明できます。Copilotは、あなたの説明に基づいてフローを生成します。その後、フローをカスタマイズしてニーズに合わせることができます。AI Copilotは、自動化したいタスクを実行するために必要なアクションも生成し、提案します。このレッスンでは、フローとは何か、Power Automateでどのように使用できるかを後で説明します。会話型ステップを通じてAI Copilotアシスタント機能を使用してアクションをカスタマイズできます。この機能は、Power Automateのホーム画面からすぐに利用できます。 + +## 課題: Copilotを使ってスタートアップの学生課題と請求書を管理する + +私たちのスタートアップは、学生にオンラインコースを提供しています。スタートアップは急速に成長しており、コースの需要に追いつくのが難しくなっています。スタートアップは、学生の課題と請求書を管理するためのローコードソリューションを構築するために、あなたをPower Platform開発者として雇いました。ソリューションは、アプリを通じて学生の課題を追跡および管理し、ワークフローを通じて請求書処理プロセスを自動化することができる必要があります。生成AIを使用してソリューションを開発するように求められています。 + +Copilotの使用を開始する際には、[Power Platform Copilot Prompt Library](https://github.com/pnp/powerplatform-prompts?WT.mc_id=academic-109639-somelezediko)を使用して、プロンプトを使って開始することができます。このライブラリには、Copilotを使用してアプリやフローを構築するためのプロンプトのリストが含まれています。ライブラリのプロンプトを使用して、Copilotに要件をどのように説明するかのアイデアを得ることもできます。 + +### スタートアップのための学生課題追跡アプリの構築 + +私たちのスタートアップの教育者たちは、学生の課題を追跡するのに苦労しています。彼らはスプレッドシートを使用して課題を追跡していましたが、学生の数が増えるにつれて管理が難しくなっています。彼らは、課題を追跡および管理するためのアプリを構築するように依頼しました。このアプリは、新しい課題の追加、課題の表示、課題の更新、課題の削除を可能にする必要があります。また、教育者と学生が評価済みの課題と未評価の課題を表示できるようにする必要があります。 + +次の手順に従って、Power AppsのCopilotを使用してアプリを構築します: + +1. [Power Apps](https://make.powerapps.com?WT.mc_id=academic-105485-koreyst)のホーム画面に移動します。 + +1. ホーム画面のテキストエリアを使用して、構築したいアプリを説明します。たとえば、**_学生の課題を追跡および管理するアプリを構築したい_** と入力します。プロンプトをAI Copilotに送信するには、**送信**ボタンをクリックします。 + +![構築したいアプリを説明する](../../../translated_images/copilot-chat-prompt-powerapps.png?WT.30e5da1eee18fc179cbbe27b088aaa20d89624eaaed11a7750372ee8feb61af6.ja.mc_id=academic-105485-koreyst) + +1. AI Copilotは、追跡したいデータを保存するためのフィールドを持つDataverseテーブルといくつかのサンプルデータを提案します。その後、会話型ステップを通じてAI Copilotアシスタント機能を使用してテーブルをカスタマイズできます。 + + > **重要**: DataverseはPower Platformの基盤となるデータプラットフォームです。これは、アプリのデータを保存するためのローコードデータプラットフォームであり、Microsoft Cloud内でデータを安全に保存する完全管理型サービスとして提供されます。データ分類、データ系譜、詳細なアクセス制御などの組み込みデータガバナンス機能を備えています。Dataverseの詳細については、[こちら](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko)をご覧ください。 + + ![新しいテーブルの提案されたフィールド](../../../translated_images/copilot-dataverse-table-powerapps.png?WT.d0158f12f6f02fdf31b4a056b0efbf5a64f49a2c2b6b9ea09b0f3a17d1189579.ja.mc_id=academic-105485-koreyst) + +1. 教育者は、課題を提出した学生に課題の進捗状況を更新するためのメールを送信したいと考えています。Copilotを使用して、学生のメールアドレスを保存するための新しいフィールドをテーブルに追加できます。たとえば、次のプロンプトを使用してテーブルに新しいフィールドを追加できます:**_学生のメールを保存する列を追加したい_**。プロンプトをAI Copilotに送信するには、**送信**ボタンをクリックします。 + +![新しいフィールドを追加する](../../../translated_images/copilot-new-column.png?WT.18e16fce13f73236f484dc1b59e3d8e83a80c1cdf40854077a3dc800df76c560.ja.mc_id=academic-105485-koreyst) + +1. AI Copilotは新しいフィールドを生成し、その後、フィールドをニーズに合わせてカスタマイズできます。 + +1. テーブルが完了したら、**アプリを作成**ボタンをクリックしてアプリを作成します。 + +1. AI Copilotは、あなたの説明に基づいて応答性のあるキャンバスアプリを生成します。その後、アプリをカスタマイズしてニーズに合わせることができます。 + +1. 教育者が学生にメールを送信するために、アプリに新しい画面を追加できます。たとえば、次のプロンプトを使用してアプリに新しい画面を追加できます:**_学生にメールを送信する画面を追加したい_**。プロンプトをAI Copilotに送信するには、**送信**ボタンをクリックします。 + +![プロンプト指示による新しい画面の追加](../../../translated_images/copilot-new-screen.png?WT.afdf65429e4ef7b2eb58038fe91de6a3ebe7ca1d85e89c584efcb6da12abfdeb.ja.mc_id=academic-105485-koreyst) + +1. AI Copilotは新しい画面を生成し、その後、画面をニーズに合わせてカスタマイズできます。 + +1. アプリが完成したら、**保存**ボタンをクリックしてアプリを保存します。 + +1. アプリを教育者と共有するには、**共有**ボタンをクリックし、もう一度**共有**ボタンをクリックします。メールアドレスを入力して、教育者とアプリを共有できます。 + +> **宿題**: 作成したアプリは良いスタートですが、改善の余地があります。メール機能では、教育者は学生に手動でメールを送信する必要があります。課題を提出したときに教育者が自動的に学生にメールを送信できるようにする自動化をCopilotを使って構築できますか?ヒントは、適切なプロンプトを使用して、Power AutomateでCopilotを使用してこれを構築できることです。 + +### スタートアップのための請求書情報テーブルの構築 + +私たちのスタートアップの財務チームは、請求書の追跡に苦労しています。彼らはスプレッドシートを使用して請求書を追跡していましたが、請求書の数が増えるにつれて管理が難しくなっています。彼らは、受け取った請求書の情報を保存、追跡、管理するのに役立つテーブルを構築するように依頼しました。このテーブルは、すべての請求書情報を抽出してテーブルに保存する自動化を構築するために使用される必要があります。また、財務チームが支払済みの請求書と未払いの請求書を表示できるようにする必要があります。 + +Power Platformには、アプリやソリューションのデータを保存するための基盤となるデータプラットフォームであるDataverseがあります。Dataverseは、アプリのデータを保存するためのローコードデータプラットフォームを提供します。これは、Microsoft Cloud内でデータを安全に保存する完全管理型サービスとして提供され、Power Platform環境内でプロビジョニングされます。データ分類、データ系譜、詳細なアクセス制御などの組み込みデータガバナンス機能を備えています。Dataverseの詳細については、[こちら](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko)をご覧ください。 + +なぜ私たちのスタートアップでDataverseを使用する必要があるのでしょうか?Dataverse内の標準テーブルとカスタムテーブルは、データの安全でクラウドベースのストレージオプションを提供します。テーブルを使用すると、Excelの複数のワークシートのように、異なる種類のデータを保存できます +テキストの。- **感情分析**: このモデルはテキスト内のポジティブ、ネガティブ、中立、または混合の感情を検出します。- **名刺リーダー**: このモデルは名刺から情報を抽出します。- **テキスト認識**: このモデルは画像からテキストを抽出します。- **物体検出**: このモデルは画像から物体を検出し抽出します。- **ドキュメント処理**: このモデルはフォームから情報を抽出します。- **請求書処理**: このモデルは請求書から情報を抽出します。カスタムAIモデルを使用すると、独自のモデルをAI Builderに導入し、AI Builderのカスタムモデルのように機能させることができます。これにより、独自のデータを使用してモデルをトレーニングすることが可能です。これらのモデルを使用して、Power AppsとPower Automateの両方でプロセスを自動化し、結果を予測することができます。独自のモデルを使用する際には制限が適用されます。これらの[制限](https://learn.microsoft.com/ai-builder/byo-model#limitations?WT.mc_id=academic-105485-koreyst)について詳しくはお読みください。 ![AI builder models](../../../translated_images/ai-builder-models.png?WT.6c2f6abc64cc07d27103364f2cd8c4689956e168da9f58cf75e6ca3fb459ec20.ja.mc_id=academic-105485-koreyst) + +## 課題 #2 - スタートアップ向けの請求書処理フローを構築 + +経理チームは請求書の処理に苦労しています。彼らはスプレッドシートを使用して請求書を追跡していましたが、請求書の数が増えるにつれて管理が難しくなりました。彼らはAIを使用して請求書を処理するワークフローを構築するように依頼しました。このワークフローは請求書から情報を抽出し、その情報をDataverseテーブルに保存することを可能にする必要があります。また、抽出された情報を経理チームにメールで送信することも可能にする必要があります。 AI Builderが何であり、なぜそれを使用するべきかを理解したので、AI Builderの請求書処理AIモデルを使用して、経理チームが請求書を処理するのに役立つワークフローをどのように構築できるかを見てみましょう。AI Builderの請求書処理AIモデルを使用して経理チームが請求書を処理するのに役立つワークフローを構築するには、以下の手順に従ってください: + +1. [Power Automate](https://make.powerautomate.com?WT.mc_id=academic-105485-koreyst)のホーム画面に移動します。 +2. ホーム画面のテキストエリアを使用して、構築したいワークフローを説明します。例えば、**_請求書がメールボックスに届いたときに処理する_**。プロンプトをAIコパイロットに送信するには、**送信**ボタンをクリックします。 ![Copilot power automate](../../../translated_images/copilot-chat-prompt-powerautomate.png?WT.f6341b68d42f7c600e636c97f6874ec548ea3575906434e5caa9b7fbabd1c284.ja.mc_id=academic-105485-koreyst) +3. AIコパイロットが、あなたが自動化したいタスクを実行するために必要なアクションを提案します。次のステップに進むには、**次へ**ボタンをクリックできます。 +4. 次のステップでは、Power Automateがフローに必要な接続を設定するように促します。完了したら、**フローを作成**ボタンをクリックしてフローを作成します。 +5. AIコパイロットがフローを生成し、その後、フローをカスタマイズしてニーズに合わせることができます。 +6. フローのトリガーを更新し、請求書が保存されるフォルダーに**フォルダー**を設定します。例えば、フォルダーを**受信トレイ**に設定できます。**詳細オプションを表示**をクリックし、**添付ファイルのみ**を**はい**に設定します。これにより、添付ファイル付きのメールがフォルダーに届いたときのみフローが実行されます。 +7. フローから次のアクションを削除します: **HTMLからテキストへ**、**Compose**、**Compose 2**、**Compose 3**、および**Compose 4**、これらは使用しないためです。 +8. **条件**アクションをフローから削除します。使用しないためです。それは次のスクリーンショットのように見えるはずです: ![power automate, remove actions](../../../translated_images/powerautomate-remove-actions.png?WT.b7f06c5f7f24ed173de29f405e580c0bb414655560859cdbdf97b8c1803fe4c7.ja.mc_id=academic-105485-koreyst) +9. **アクションを追加**ボタンをクリックし、**Dataverse**を検索します。**新しい行を追加**アクションを選択します。 +10. **請求書から情報を抽出**アクションで、**請求書ファイル**をメールの**添付コンテンツ**を指すように更新します。これにより、フローが請求書の添付ファイルから情報を抽出することが保証されます。 +11. 以前に作成した**テーブル**を選択します。例えば、**請求書情報**テーブルを選択できます。以前のアクションからの動的コンテンツを選んで次のフィールドを入力します: - ID - 金額 - 日付 - 名前 - ステータス - **ステータス**を**保留中**に設定します。 - サプライヤーのメール - **新しいメールが届いたとき**のトリガーから**送信元**の動的コンテンツを使用します。 ![power automate add row](../../../translated_images/powerautomate-add-row.png?WT.05f8f2c79ce95248eb173d6644436a1220f143991a5f0e647e15b922a0e1a290.ja.mc_id=academic-105485-koreyst) +12. フローが完了したら、**保存**ボタンをクリックしてフローを保存します。トリガーで指定したフォルダーに請求書を含むメールを送信してフローをテストできます。 + +> **宿題**: あなたが構築したフローは良いスタートですが、今度は経理チームが請求書の現在のステータスをサプライヤーにメールで通知できる自動化をどのように構築できるかを考えてみてください。ヒント: フローは請求書のステータスが変わったときに実行される必要があります。 + +## Power Automateでテキスト生成AIモデルを使用する + +AI BuilderのCreate Text with GPT AI Modelは、プロンプトに基づいてテキストを生成することを可能にし、Microsoft Azure OpenAI Serviceによって提供されています。この機能を使用すると、GPT(Generative Pre-Trained Transformer)技術をアプリやフローに組み込んで、さまざまな自動化フローや洞察に満ちたアプリケーションを構築できます。 + +GPTモデルは膨大な量のデータで徹底的にトレーニングされており、プロンプトが提供された際に人間の言語に近いテキストを生成することができます。ワークフローの自動化と統合されると、GPTのようなAIモデルは、幅広いタスクを効率化し自動化するために利用できます。 + +例えば、様々なユースケースに対して自動的にテキストを生成するフローを構築することができます。例えば、メールの下書きや製品説明などです。また、チャットボットや顧客サービスアプリのような様々なアプリのためにテキストを生成するためにモデルを使用することもできます。これにより、顧客サービスエージェントが顧客の問い合わせに効果的かつ効率的に対応できるようになります。 + +![create a prompt](../../../translated_images/create-prompt-gpt.png?WT.7838e7bf32dee9636286569283c29f2a7cd58f2e2e093cee611dfa66db61a6ca.ja.mc_id=academic-105485-koreyst) + +このAIモデルをPower Automateで使用する方法については、[AI BuilderとGPTで知能を追加する](https://learn.microsoft.com/training/modules/ai-builder-text-generation/?WT.mc_id=academic-109639-somelezediko)モジュールを参照してください。 + +## 素晴らしい仕事!学び続けましょう + +このレッスンを完了したら、私たちの[生成AI学習コレクション](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)をチェックして、生成AIの知識をさらに深めましょう! + +レッスン11に進み、[関数呼び出しと生成AIを統合する](../11-integrating-with-function-calling/README.md?WT.mc_id=academic-105485-koreyst)方法を見てみましょう! + +**免責事項**: +この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご了承ください。元の言語の文書が信頼できる情報源とみなされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/11-integrating-with-function-calling/README.md b/translations/ja/11-integrating-with-function-calling/README.md new file mode 100644 index 000000000..a6b243709 --- /dev/null +++ b/translations/ja/11-integrating-with-function-calling/README.md @@ -0,0 +1,461 @@ +# 関数呼び出しとの統合 + +[![関数呼び出しとの統合](../../../translated_images/11-lesson-banner.png?WT.cd033597170e30547d3cab0ae5ddcb7648d4f767cb49f7a853aa1b15f50e112f.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson11-gh?WT.mc_id=academic-105485-koreyst) + +これまでのレッスンでかなりのことを学びましたが、まだ改善の余地があります。たとえば、応答のフォーマットをより一貫性のあるものにして、後続の作業をしやすくする方法や、他のソースからのデータを追加してアプリケーションをさらに充実させることが考えられます。 + +この章では、上記の問題に取り組んでいきます。 + +## はじめに + +このレッスンでは次のことを学びます: + +- 関数呼び出しとは何か、その使用例を説明する。 +- Azure OpenAIを使用して関数呼び出しを作成する。 +- 関数呼び出しをアプリケーションに統合する方法。 + +## 学習目標 + +このレッスンの終わりには、次のことができるようになります: + +- 関数呼び出しを使用する目的を説明する。 +- Azure OpenAI Serviceを使用して関数呼び出しを設定する。 +- アプリケーションの使用例に合わせた効果的な関数呼び出しを設計する。 + +## シナリオ: チャットボットを関数で改善する + +このレッスンでは、教育系スタートアップ向けに、ユーザーがチャットボットを使用して技術コースを見つける機能を構築したいと考えています。ユーザーのスキルレベル、現在の役割、興味のある技術に合ったコースを推薦します。 + +このシナリオを完了するために、次の組み合わせを使用します: + +- `Azure OpenAI` を使用して、ユーザーのためのチャット体験を作成します。 +- `Microsoft Learn Catalog API` を使用して、ユーザーのリクエストに基づいてコースを見つけるのを助けます。 +- `Function Calling` を使用して、ユーザーのクエリを関数に送信し、APIリクエストを行います。 + +では、なぜ最初に関数呼び出しを使用するのかを見ていきましょう: + +## なぜ関数呼び出しなのか + +関数呼び出しの前は、LLMからの応答は非構造的で一貫性がありませんでした。開発者は、応答の各バリエーションを処理できるようにするために、複雑な検証コードを書く必要がありました。ユーザーは「ストックホルムの現在の天気は?」のような質問に答えることができませんでした。これは、モデルがデータのトレーニング時点に制限されていたためです。 + +関数呼び出しは、Azure OpenAI Serviceの機能で、次の制限を克服するためのものです: + +- **一貫した応答フォーマット**。応答フォーマットをより良く制御できれば、他のシステムに応答を統合しやすくなります。 +- **外部データ**。チャットコンテキストでアプリケーションの他のソースからのデータを使用する能力。 + +## シナリオを通じて問題を説明する + +> 以下のシナリオを実行したい場合は、[同梱のノートブック](../../../11-integrating-with-function-calling/python/aoai-assignment.ipynb)を使用することをお勧めします。問題を説明するために関数がどのように役立つかを示そうとしているので、読み進めるだけでも構いません。 + +応答フォーマットの問題を示す例を見てみましょう: + +学生データのデータベースを作成して、適切なコースを提案できるようにしたいとします。以下に、データが非常に似ている学生の説明が2つあります。 + +1. Azure OpenAIリソースへの接続を作成する: + + ```python + import os + import json + from openai import AzureOpenAI + from dotenv import load_dotenv + load_dotenv() + + client = AzureOpenAI( + api_key=os.environ['AZURE_OPENAI_API_KEY'], # this is also the default, it can be omitted + api_version = "2023-07-01-preview" + ) + + deployment=os.environ['AZURE_OPENAI_DEPLOYMENT'] + ``` + + 以下は、`api_type`, `api_base`, `api_version` and `api_key`. + +1. Creating two student descriptions using variables `student_1_description` and `student_2_description`を設定するAzure OpenAIへの接続を構成するためのPythonコードです。 + + ```python + student_1_description="Emily Johnson is a sophomore majoring in computer science at Duke University. She has a 3.7 GPA. Emily is an active member of the university's Chess Club and Debate Team. She hopes to pursue a career in software engineering after graduating." + + student_2_description = "Michael Lee is a sophomore majoring in computer science at Stanford University. He has a 3.8 GPA. Michael is known for his programming skills and is an active member of the university's Robotics Club. He hopes to pursue a career in artificial intelligence after finishing his studies." + ``` + + 上記の学生の説明をLLMに送信してデータを解析したいと考えています。このデータは後でアプリケーションで使用され、APIに送信されたりデータベースに保存されたりします。 + +1. LLMにどの情報に興味があるかを指示する2つの同一のプロンプトを作成します: + + ```python + prompt1 = f''' + Please extract the following information from the given text and return it as a JSON object: + + name + major + school + grades + club + + This is the body of text to extract the information from: + {student_1_description} + ''' + + prompt2 = f''' + Please extract the following information from the given text and return it as a JSON object: + + name + major + school + grades + club + + This is the body of text to extract the information from: + {student_2_description} + ''' + ``` + + 上記のプロンプトは、LLMに情報を抽出し、JSONフォーマットで応答を返すように指示します。 + +1. プロンプトとAzure OpenAIへの接続を設定した後、`openai.ChatCompletion`. We store the prompt in the `messages` variable and assign the role to `user`を使用してプロンプトをLLMに送信します。これは、ユーザーからのメッセージがチャットボットに書き込まれるのを模倣するものです。 + + ```python + # response from prompt one + openai_response1 = client.chat.completions.create( + model=deployment, + messages = [{'role': 'user', 'content': prompt1}] + ) + openai_response1.choices[0].message.content + + # response from prompt two + openai_response2 = client.chat.completions.create( + model=deployment, + messages = [{'role': 'user', 'content': prompt2}] + ) + openai_response2.choices[0].message.content + ``` + +これで、両方のリクエストをLLMに送信し、`openai_response1['choices'][0]['message']['content']`. + +1. Lastly, we can convert the response to JSON format by calling `json.loads`のように応答を確認できます。 + + ```python + # Loading the response as a JSON object + json_response1 = json.loads(openai_response1.choices[0].message.content) + json_response1 + ``` + + 応答1: + + ```json + { + "name": "Emily Johnson", + "major": "computer science", + "school": "Duke University", + "grades": "3.7", + "club": "Chess Club" + } + ``` + + 応答2: + + ```json + { + "name": "Michael Lee", + "major": "computer science", + "school": "Stanford University", + "grades": "3.8 GPA", + "club": "Robotics Club" + } + ``` + + プロンプトは同じで説明も似ているにもかかわらず、`Grades` property formatted differently as we can sometimes get the format `3.7` or `3.7 GPA` for example. + + This result is because the LLM takes unstructured data in the form of the written prompt and returns also unstructured data. We need to have a structured format so that we know what to expect when storing or using this data + +So how do we solve the formatting problem then? By using functional calling, we can make sure that we receive structured data back. When using function calling, the LLM does not actually call or run any functions. Instead, we create a structure for the LLM to follow for its responses. We then use those structured responses to know what function to run in our applications. + +![function flow](../../../translated_images/Function-Flow.png?WT.528ac2564b2e7413ab6aecd50caf18620e8a089814824510b105a9412740384b.ja.mc_id=academic-105485-koreyst) + +We can then take what is returned from the function and send this back to the LLM. The LLM will then respond using natural language to answer the user's query. + +## Use Cases for using function calls + +There are many different use cases where function calls can improve your app like: + +- **Calling External Tools**. Chatbots are great at providing answers to questions from users. By using function calling, the chatbots can use messages from users to complete certain tasks. For example, a student can ask the chatbot to "Send email to my instructor saying I need more assistance with this subject". This can make a function call to `send_email(to: string, body: string)` + +- **Create API or Database Queries**. Users can find information using natural language that gets converted into a formatted query or API request. An example of this could be a teacher who requests "Who are the students that completed the last assignment" which could call a function named `get_completed(student_name: string, assignment: int, current_status: string)` + +- **Creating Structured Data**. Users can take a block of text or CSV and use the LLM to extract important information from it. For example, a student can convert a Wikipedia article about peace agreements to create AI flash cards. This can be done by using a function called `get_important_facts(agreement_name: string, date_signed: string, parties_involved: list)` + +## Creating Your First Function Call + +The process of creating a function call includes 3 main steps: + +1. **Calling** the Chat Completions API with a list of your functions and a user message. +2. **Reading** the model's response to perform an action ie execute a function or API Call. +3. **Making** another call to Chat Completions API with the response from your function to use that information to create a response to the user. + +![LLM Flow](../../../translated_images/LLM-Flow.png?WT.a3bab2c56645eb017c24b9116cef39934eb2368f777bac49cceeac67f03b0321.ja.mc_id=academic-105485-koreyst) + +### Step 1 - creating messages + +The first step is to create a user message. This can be dynamically assigned by taking the value of a text input or you can assign a value here. If this is your first time working with the Chat Completions API, we need to define the `role` and the `content` of the message. + +The `role` can be either `system` (creating rules), `assistant` (the model) or `user` (the end-user). For function calling, we will assign this as `user` と例の質問の値が異なることがわかります。 + +```python +messages= [ {"role": "user", "content": "Find me a good course for a beginner student to learn Azure."} ] +``` + +異なる役割を割り当てることで、システムが何かを言っているのかユーザーが何かを言っているのかをLLMに明確にし、LLMが基にする会話の履歴を構築するのに役立ちます。 + +### ステップ2 - 関数の作成 + +次に、関数とそのパラメータを定義します。ここでは`search_courses` but you can create multiple functions. + +> **Important** : Functions are included in the system message to the LLM and will be included in the amount of available tokens you have available. + +Below, we create the functions as an array of items. Each item is a function and has properties `name`, `description` and `parameters`という1つの関数のみを使用します: + +```python +functions = [ + { + "name":"search_courses", + "description":"Retrieves courses from the search index based on the parameters provided", + "parameters":{ + "type":"object", + "properties":{ + "role":{ + "type":"string", + "description":"The role of the learner (i.e. developer, data scientist, student, etc.)" + }, + "product":{ + "type":"string", + "description":"The product that the lesson is covering (i.e. Azure, Power BI, etc.)" + }, + "level":{ + "type":"string", + "description":"The level of experience the learner has prior to taking the course (i.e. beginner, intermediate, advanced)" + } + }, + "required":[ + "role" + ] + } + } +] +``` + +各関数インスタンスを詳しく説明しましょう: + +- `name` - The name of the function that we want to have called. +- `description` - This is the description of how the function works. Here it's important to be specific and clear. +- `parameters` - A list of values and format that you want the model to produce in its response. The parameters array consists of items where item have the following properties: + 1. `type` - The data type of the properties will be stored in. + 1. `properties` - List of the specific values that the model will use for its response + 1. `name` - The key is the name of the property that the model will use in its formatted response, for example, `product`. + 1. `type` - The data type of this property, for example, `string`. + 1. `description` - Description of the specific property. + +There's also an optional property `required` - required property for the function call to be completed. + +### Step 3 - Making the function call + +After defining a function, we now need to include it in the call to the Chat Completion API. We do this by adding `functions` to the request. In this case `functions=functions`. + +There is also an option to set `function_call` to `auto`. This means we will let the LLM decide which function should be called based on the user message rather than assigning it ourselves. + +Here's some code below where we call `ChatCompletion.create`, note how we set `functions=functions` and `function_call="auto"` であり、LLMに関数をいつ呼び出すかの選択肢を与えます: + +```python +response = client.chat.completions.create(model=deployment, + messages=messages, + functions=functions, + function_call="auto") + +print(response.choices[0].message) +``` + +応答は次のように戻ってきます: + +```json +{ + "role": "assistant", + "function_call": { + "name": "search_courses", + "arguments": "{\n \"role\": \"student\",\n \"product\": \"Azure\",\n \"level\": \"beginner\"\n}" + } +} +``` + +ここで、関数`search_courses` was called and with what arguments, as listed in the `arguments` property in the JSON response. + +The conclusion the LLM was able to find the data to fit the arguments of the function as it was extracting it from the value provided to the `messages` parameter in the chat completion call. Below is a reminder of the `messages`の値がどのように見えるかがわかります。 + +```python +messages= [ {"role": "user", "content": "Find me a good course for a beginner student to learn Azure."} ] +``` + +ご覧のように、`student`, `Azure` and `beginner` was extracted from `messages` and set as input to the function. Using functions this way is a great way to extract information from a prompt but also to provide structure to the LLM and have reusable functionality. + +Next, we need to see how we can use this in our app. + +## Integrating Function Calls into an Application + +After we have tested the formatted response from the LLM, now we can integrate this into an application. + +### Managing the flow + +To integrate this into our application, let's take the following steps: + +1. First, let's make the call to the Open AI services and store the message in a variable called `response_message`のように表示されます。 + + ```python + response_message = response.choices[0].message + ``` + +1. Microsoft Learn APIを呼び出してコースのリストを取得する関数を定義します: + + ```python + import requests + + def search_courses(role, product, level): + url = "https://learn.microsoft.com/api/catalog/" + params = { + "role": role, + "product": product, + "level": level + } + response = requests.get(url, params=params) + modules = response.json()["modules"] + results = [] + for module in modules[:5]: + title = module["title"] + url = module["url"] + results.append({"title": title, "url": url}) + return str(results) + ``` + + ここでは、`functions` variable. We're also making real external API calls to fetch the data we need. In this case, we go against the Microsoft Learn API to search for training modules. + +Ok, so we created `functions` variables and a corresponding Python function, how do we tell the LLM how to map these two together so our Python function is called? + +1. To see if we need to call a Python function, we need to look into the LLM response and see if `function_call`の中で紹介された関数名にマップする実際のPython関数を作成し、その関数を呼び出します。以下のようにチェックを行う方法を示します。 + + ```python + # Check if the model wants to call a function + if response_message.function_call.name: + print("Recommended Function call:") + print(response_message.function_call.name) + print() + + # Call the function. + function_name = response_message.function_call.name + + available_functions = { + "search_courses": search_courses, + } + function_to_call = available_functions[function_name] + + function_args = json.loads(response_message.function_call.arguments) + function_response = function_to_call(**function_args) + + print("Output of function call:") + print(function_response) + print(type(function_response)) + + + # Add the assistant response and function response to the messages + messages.append( # adding assistant response to messages + { + "role": response_message.role, + "function_call": { + "name": function_name, + "arguments": response_message.function_call.arguments, + }, + "content": None + } + ) + messages.append( # adding function response to messages + { + "role": "function", + "name": function_name, + "content":function_response, + } + ) + ``` + + これらの3行は、関数名、引数を抽出し、呼び出しを行うことを保証します。 + + ```python + function_to_call = available_functions[function_name] + + function_args = json.loads(response_message.function_call.arguments) + function_response = function_to_call(**function_args) + ``` + + 以下は、コードを実行した際の出力です。 + + **出力** + + ```Recommended Function call: + { + "name": "search_courses", + "arguments": "{\n \"role\": \"student\",\n \"product\": \"Azure\",\n \"level\": \"beginner\"\n}" + } + + Output of function call: + [{'title': 'Describe concepts of cryptography', 'url': 'https://learn.microsoft.com/training/modules/describe-concepts-of-cryptography/? + WT.mc_id=api_CatalogApi'}, {'title': 'Introduction to audio classification with TensorFlow', 'url': 'https://learn.microsoft.com/en- + us/training/modules/intro-audio-classification-tensorflow/?WT.mc_id=api_CatalogApi'}, {'title': 'Design a Performant Data Model in Azure SQL + Database with Azure Data Studio', 'url': 'https://learn.microsoft.com/training/modules/design-a-data-model-with-ads/? + WT.mc_id=api_CatalogApi'}, {'title': 'Getting started with the Microsoft Cloud Adoption Framework for Azure', 'url': + 'https://learn.microsoft.com/training/modules/cloud-adoption-framework-getting-started/?WT.mc_id=api_CatalogApi'}, {'title': 'Set up the + Rust development environment', 'url': 'https://learn.microsoft.com/training/modules/rust-set-up-environment/?WT.mc_id=api_CatalogApi'}] + + ``` + +1. 更新されたメッセージ`messages`をLLMに送信し、API JSON形式の応答ではなく自然言語の応答を受け取ります。 + + ```python + print("Messages in next request:") + print(messages) + print() + + second_response = client.chat.completions.create( + messages=messages, + model=deployment, + function_call="auto", + functions=functions, + temperature=0 + ) # get a new response from GPT where it can see the function response + + + print(second_response.choices[0].message) + ``` + + **出力** + + ```python + { + "role": "assistant", + "content": "I found some good courses for beginner students to learn Azure:\n\n1. [Describe concepts of cryptography] (https://learn.microsoft.com/training/modules/describe-concepts-of-cryptography/?WT.mc_id=api_CatalogApi)\n2. [Introduction to audio classification with TensorFlow](https://learn.microsoft.com/training/modules/intro-audio-classification-tensorflow/?WT.mc_id=api_CatalogApi)\n3. [Design a Performant Data Model in Azure SQL Database with Azure Data Studio](https://learn.microsoft.com/training/modules/design-a-data-model-with-ads/?WT.mc_id=api_CatalogApi)\n4. [Getting started with the Microsoft Cloud Adoption Framework for Azure](https://learn.microsoft.com/training/modules/cloud-adoption-framework-getting-started/?WT.mc_id=api_CatalogApi)\n5. [Set up the Rust development environment](https://learn.microsoft.com/training/modules/rust-set-up-environment/?WT.mc_id=api_CatalogApi)\n\nYou can click on the links to access the courses." + } + + ``` + +## 課題 + +Azure OpenAI Function Callingの学習を続けるために、次のことを構築できます: + +- 学習者がより多くのコースを見つけるのに役立つ関数のより多くのパラメータ。 +- 学習者の母国語などの情報を取得する別の関数呼び出しを作成する。 +- 関数呼び出しやAPI呼び出しが適切なコースを返さない場合のエラーハンドリングを作成する。 + +ヒント: このデータがどのように、どこで利用可能かを確認するには、[Learn APIリファレンスドキュメント](https://learn.microsoft.com/training/support/catalog-api-developer-reference?WT.mc_id=academic-105485-koreyst)ページを参照してください。 + +## 素晴らしい仕事です!旅を続けましょう + +このレッスンを完了したら、[生成AI学習コレクション](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)をチェックして、生成AIの知識をさらに高めましょう! + +レッスン12に進み、[AIアプリケーションのUXを設計する](../12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst)方法を見てみましょう! + +**免責事項**: +この文書は機械翻訳AIサービスを使用して翻訳されています。正確さを期すよう努めておりますが、自動翻訳には誤りや不正確さが含まれる場合がありますのでご注意ください。元の言語で書かれた文書を公式な情報源と見なすべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤った解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/12-designing-ux-for-ai-applications/README.md b/translations/ja/12-designing-ux-for-ai-applications/README.md new file mode 100644 index 000000000..67400a0a3 --- /dev/null +++ b/translations/ja/12-designing-ux-for-ai-applications/README.md @@ -0,0 +1,121 @@ +# AIアプリケーションのUXデザイン + +[![AIアプリケーションのUXデザイン](../../../translated_images/12-lesson-banner.png?WT.998ee992c9acfb5c1b2802fb3817b9a1a704886f30157b28dff34cd9c2ee598b.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson12-gh?WT.mc_id=academic-105485-koreyst) + +> _(上の画像をクリックすると、このレッスンのビデオが視聴できます)_ + +ユーザーエクスペリエンスはアプリ構築において非常に重要な要素です。ユーザーが効率的にタスクをこなせるようにアプリを使用できる必要があります。効率性はもちろんですが、すべての人が使えるようにデザインし、アプリを_アクセシブル_にすることも重要です。この章では、この分野に焦点を当て、誰もが使いたくなるようなアプリのデザインを目指します。 + +## はじめに + +ユーザーエクスペリエンスとは、ユーザーが特定の製品やサービス(システム、ツール、デザインなど)とどのように関わり、利用するかを指します。AIアプリケーションを開発する際には、開発者はユーザーエクスペリエンスが効果的であるだけでなく、倫理的であることにも注意を払います。このレッスンでは、ユーザーのニーズに応えるAIアプリケーションの構築方法について学びます。 + +このレッスンでは以下のトピックを扱います: + +- ユーザーエクスペリエンスとユーザーニーズの理解 +- 信頼性と透明性を考慮したAIアプリケーションのデザイン +- 協力とフィードバックを促進するAIアプリケーションのデザイン + +## 学習目標 + +このレッスンを終えた後、次のことができるようになります: + +- ユーザーのニーズを満たすAIアプリケーションを構築する方法を理解する。 +- 信頼と協力を促進するAIアプリケーションをデザインする。 + +### 前提条件 + +[ユーザーエクスペリエンスとデザイン思考](https://learn.microsoft.com/training/modules/ux-design?WT.mc_id=academic-105485-koreyst)についてさらに学んでみてください。 + +## ユーザーエクスペリエンスとユーザーニーズの理解 + +私たちの架空の教育スタートアップでは、教師と生徒という2つの主要なユーザーがいます。それぞれのユーザーには独自のニーズがあります。ユーザー中心のデザインは、製品がその対象となる人々にとって関連性があり有益であることを保証します。 + +アプリケーションは、良好なユーザーエクスペリエンスを提供するために**有用で、信頼性があり、アクセスしやすく、快適**であるべきです。 + +### 利便性 + +有用であるということは、アプリケーションがその目的に合った機能を持っていることを意味します。例えば、採点プロセスを自動化したり、復習用のフラッシュカードを生成したりすることです。採点プロセスを自動化するアプリケーションは、事前に定義された基準に基づいて生徒の作業に正確かつ効率的にスコアを割り当てることができるべきです。同様に、復習用フラッシュカードを生成するアプリケーションは、そのデータに基づいて関連性のある多様な質問を作成できるべきです。 + +### 信頼性 + +信頼性があるということは、アプリケーションがそのタスクを一貫してエラーなく実行できることを意味します。しかし、AIも人間と同様に完璧ではなく、エラーが発生する可能性があります。アプリケーションは、エラーや予期しない状況に直面し、人間の介入や修正が必要な場合があります。エラーをどのように処理しますか?このレッスンの最後のセクションでは、AIシステムとアプリケーションが協力とフィードバックのためにどのように設計されているかをカバーします。 + +### アクセシビリティ + +アクセシビリティがあるということは、さまざまな能力を持つユーザー、特に障害を持つユーザーを含むすべてのユーザーに対してユーザーエクスペリエンスを拡張することを意味します。アクセシビリティのガイドラインと原則に従うことで、AIソリューションはより包括的で使いやすく、すべてのユーザーにとって有益になります。 + +### 快適性 + +快適性があるということは、アプリケーションが使っていて楽しいものであることを意味します。魅力的なユーザーエクスペリエンスは、ユーザーがアプリケーションに戻ってくることを促し、ビジネスの収益を増加させる可能性があります。 + +![AIにおけるUXの考慮事項を示す画像](../../../translated_images/uxinai.png?WT.00d77ed86b53127e3860f8ee713e684370fe08c450c8a1e496beb82e96c59355.ja.mc_id=academic-105485-koreyst) + +すべての課題がAIで解決できるわけではありません。AIは手動タスクの自動化やユーザーエクスペリエンスのパーソナライズ化を通じて、ユーザーエクスペリエンスを強化するために役立ちます。 + +## 信頼性と透明性を考慮したAIアプリケーションのデザイン + +AIアプリケーションをデザインする際には、信頼を築くことが重要です。信頼は、ユーザーがアプリケーションが仕事を成し遂げ、結果を一貫して提供し、ユーザーが求める結果を得られるという自信を持つことを保証します。この分野でのリスクは、不信と過信です。不信は、ユーザーがAIシステムにほとんどまたはまったく信頼を持たない場合に発生し、ユーザーがアプリケーションを拒否することにつながります。過信は、ユーザーがAIシステムの能力を過大評価し、AIシステムを過度に信頼することにつながります。例えば、採点システムが過信された場合、教師が一部のペーパーを見直さずにシステムが正しく機能しているか確認することがなくなり、不公平または不正確な成績が生徒に与えられたり、フィードバックや改善の機会を逃したりする可能性があります。 + +デザインの中心に信頼を据えるための2つの方法は、説明可能性とコントロールです。 + +### 説明可能性 + +AIが将来の世代に知識を伝えるような決定を支援する場合、教師や親がAIの決定がどのように行われるかを理解することが重要です。これが説明可能性です - AIアプリケーションがどのように決定を行うかを理解すること。説明可能性を考慮したデザインには、AIアプリケーションが何をできるかの例を詳細に追加することが含まれます。例えば、「AI教師で始める」の代わりに、システムは「AIを使ってノートを要約し、復習を容易にする」といった表現を使用できます。 + +![AIアプリケーションにおける説明可能性の明確な例を示すアプリのランディングページ](../../../translated_images/explanability-in-ai.png?WT.e66323dd42a976cd7fb15d79304f70a3d625eac6607ec395311a772915a45ffa.ja.mc_id=academic-105485-koreyst) + +もう一つの例は、AIがユーザーと個人データをどのように使用するかです。例えば、学生というペルソナを持つユーザーは、そのペルソナに基づいて制限があるかもしれません。AIは質問の答えを明かすことはできませんが、問題を解決するためにどのように考えるかを導く手助けをするかもしれません。 + +![ペルソナに基づいて質問に回答するAI](../../../translated_images/solving-questions.png?WT.f7c41f8c20cb98ec5d456d1e14e7fee2b11b7adc77c23421645a82495b51208d.ja.mc_id=academic-105485-koreyst) + +説明可能性のもう一つの重要な部分は、説明の簡略化です。学生や教師はAIの専門家ではないかもしれないため、アプリケーションが何をできるかできないかの説明は、簡単で理解しやすいものであるべきです。 + +![AIの能力に関する簡略化された説明](../../../translated_images/simplified-explanations.png?WT.58904786757a91a1365e98cac5f9088bb16c9241e312463921a9a1733a85adc0.ja.mc_id=academic-105485-koreyst) + +### コントロール + +生成AIは、AIとユーザーの間に協力関係を生み出します。例えば、ユーザーが異なる結果を得るためにプロンプトを修正できる場合があります。さらに、出力が生成された後、ユーザーは結果を修正することができ、コントロール感を持つことができます。例えば、Bingを使用する際には、フォーマット、トーン、長さに基づいてプロンプトをカスタマイズできます。さらに、出力に変更を加え、以下のように出力を修正できます。 + +![プロンプトと出力を修正するオプションがあるBingの検索結果](../../../translated_images/bing1.png?WT.698997cd244c8dca95dcadbb0d49a1a5d60c7b9bffb8b2c19da78666bda33a1e.ja.mc_id=academic-105485-koreyst "プロンプトと出力を修正するオプションがあるbingの検索結果") + +Bingのもう一つの機能として、ユーザーがアプリケーションに対するコントロールを持つことができるのは、AIが使用するデータにオプトインおよびオプトアウトする能力です。学校のアプリケーションでは、学生が自分のノートや教師のリソースを復習資料として使用したいと思うかもしれません。 + +![プロンプトと出力を修正するオプションがあるBingの検索結果](../../../translated_images/bing2.png?WT.aa596778411a7442462400f1c9d0e49d8a36bc3e79ed48177fb0cf2213d43465.ja.mc_id=academic-105485-koreyst "プロンプトと出力を修正するオプションがあるbingの検索結果") + +> AIアプリケーションをデザインする際には、ユーザーが過信しないように意図的に設計することが重要です。プロンプトと結果の間に摩擦を生み出し、これはAIであり人間ではないことをユーザーに思い出させる方法があります。 + +## 協力とフィードバックを促進するAIアプリケーションのデザイン + +前述のように、生成AIはユーザーとAIの間に協力関係を生み出します。多くのやり取りは、ユーザーがプロンプトを入力し、AIが出力を生成する形で行われます。出力が誤っていた場合はどうしますか?アプリケーションはエラーが発生した場合にどのように処理しますか?AIはユーザーを責めるのか、それともエラーを説明する時間を取るのか? + +AIアプリケーションは、フィードバックを受け取り、与えるために構築されるべきです。これはAIシステムが改善するのに役立つだけでなく、ユーザーとの信頼を築くのにも役立ちます。デザインにはフィードバックループを含めるべきで、例としては出力に対してシンプルなサムズアップやサムズダウンが挙げられます。 + +もう一つの方法は、システムの能力と制限を明確に伝えることです。ユーザーがAIの能力を超えるリクエストをした場合には、これを処理する方法も提供されるべきです。以下に示すように。 + +![フィードバックを与え、エラーを処理する方法](../../../translated_images/feedback-loops.png?WT.ee4d8df7b207adf073487e9a9617e4f901a404fc4b826152a56435fb5bd32705.ja.mc_id=academic-105485-koreyst) + +システムエラーは、ユーザーがAIの範囲外の情報を必要とする場合や、ユーザーが生成できる質問/科目の数に制限がある場合に一般的です。例えば、限られた科目(例えば、歴史と数学)のデータで訓練されたAIアプリケーションは、地理に関する質問に対応できないかもしれません。これを緩和するために、AIシステムは次のような応答を提供できます:「申し訳ありませんが、私たちの製品は次の科目のデータで訓練されています.....、あなたが尋ねた質問には対応できません。」 + +AIアプリケーションは完璧ではないため、ミスを犯すことがあります。アプリケーションをデザインする際には、ユーザーからのフィードバックとエラー処理のための余地を作り、シンプルでわかりやすい方法で行うことを確認するべきです。 + +## 課題 + +これまでに構築したAIアプリを見直し、以下のステップをアプリに実装することを検討してください: + +- **快適性:** アプリをより快適にする方法を考えてください。説明を至る所に追加していますか?ユーザーに探索を促していますか?エラーメッセージはどのように表現していますか? + +- **利便性:** Webアプリを構築する。アプリがマウスとキーボードの両方で操作可能であることを確認してください。 + +- **信頼性と透明性:** AIとその出力を完全に信頼せず、出力を確認するために人間をプロセスに加える方法を検討してください。また、信頼性と透明性を達成する他の方法も考慮し、実装してください。 + +- **コントロール:** アプリケーションに提供するデータのコントロールをユーザーに与えます。AIアプリケーションでデータ収集にオプトインおよびオプトアウトできる方法を実装します。 + +## 学習を続けましょう! + +このレッスンを終えたら、[生成AIの学習コレクション](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)をチェックして、生成AIの知識をさらに深めましょう! + +レッスン13に進み、[AIアプリケーションのセキュリティ](../13-securing-ai-applications/README.md?WT.mc_id=academic-105485-koreyst)について学びましょう! + +**免責事項**: +この文書は機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを期すよう努めておりますが、自動翻訳には誤りや不正確な点が含まれる可能性がありますのでご注意ください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/13-securing-ai-applications/README.md b/translations/ja/13-securing-ai-applications/README.md new file mode 100644 index 000000000..c3d9e849b --- /dev/null +++ b/translations/ja/13-securing-ai-applications/README.md @@ -0,0 +1,114 @@ +# ジェネレーティブAIアプリケーションのセキュリティ強化 + +[![ジェネレーティブAIアプリケーションのセキュリティ強化](../../../translated_images/13-lesson-banner.png?WT.028697a53f1c3c0ea07dafd10617ce0380ac2b809bb145d7171be69e83daac89.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson13-gh?WT.mc_id=academic-105485-koreyst) + +## はじめに + +このレッスンでは以下の内容をカバーします: + +- AIシステムにおけるセキュリティ。 +- AIシステムに対する一般的なリスクと脅威。 +- AIシステムを保護するための方法と考慮事項。 + +## 学習目標 + +このレッスンを完了すると、以下について理解が深まります: + +- AIシステムに対する脅威とリスク。 +- AIシステムを保護するための一般的な方法と実践。 +- セキュリティテストを実施することで、予期しない結果やユーザーの信頼の低下を防ぐ方法。 + +## ジェネレーティブAIにおけるセキュリティとは何か? + +人工知能(AI)や機械学習(ML)技術が私たちの生活をますます形作る中で、顧客データだけでなくAIシステム自体を保護することが重要です。AI/MLは、間違った決定が重大な結果を招く可能性のある業界で、高価値の意思決定プロセスを支援するためにますます利用されています。 + +考慮すべき主なポイントは以下の通りです: + +- **AI/MLの影響**:AI/MLは日常生活に大きな影響を与えており、それを保護することが不可欠になっています。 +- **セキュリティの課題**:AI/MLの影響は、トロールや組織化されたグループによる高度な攻撃からAIベースの製品を保護する必要性に適切に対応するために、適切な注意を払う必要があります。 +- **戦略的問題**:テクノロジー業界は、長期的な顧客の安全性とデータセキュリティを確保するために、戦略的な課題に積極的に取り組む必要があります。 + +さらに、機械学習モデルは、悪意のある入力と無害な異常データを区別することがほとんどできません。トレーニングデータの重要なソースは、未編集で管理されていない公開データセットから派生しており、第三者の貢献を受け入れることができます。攻撃者はデータセットを侵害する必要はなく、自由に貢献することができます。データの構造やフォーマットが正しいままであれば、低信頼度の悪意のあるデータが時間とともに高信頼度の信頼できるデータになります。 + +これが、モデルが意思決定に使用するデータストアの整合性と保護を確保することが重要な理由です。 + +## AIの脅威とリスクの理解 + +AIおよび関連システムに関しては、データポイズニングが現在最も重要なセキュリティ脅威として際立っています。データポイズニングとは、誰かが意図的にAIのトレーニングに使用される情報を変更し、誤った結果を引き起こすことです。標準化された検出および緩和方法が欠如しており、トレーニングのために信頼できないまたは未編集の公開データセットに依存しているためです。データの整合性を維持し、欠陥のあるトレーニングプロセスを防ぐためには、データの出所と系統を追跡することが重要です。さもなければ、「ゴミを入れればゴミが出る」という古い格言が当てはまり、モデルの性能が損なわれます。 + +データポイズニングがモデルにどのように影響するかの例を以下に示します: + +1. **ラベルの反転**:バイナリ分類タスクで、敵対者がトレーニングデータの小さな部分のラベルを意図的に反転させます。例えば、無害なサンプルが悪意のあるものとしてラベル付けされ、モデルが誤った関連付けを学習します。\ + **例**:スパムフィルターが正当なメールをスパムとして誤分類する。 +2. **特徴量のポイズニング**:攻撃者がトレーニングデータの特徴を微妙に変更し、バイアスを導入したりモデルを誤解させたりします。\ + **例**:製品説明に無関係なキーワードを追加して、推薦システムを操作する。 +3. **データインジェクション**:トレーニングセットに悪意のあるデータを注入して、モデルの動作に影響を与える。\ + **例**:偽のユーザーレビューを導入して、感情分析の結果を歪める。 +4. **バックドア攻撃**:敵対者がトレーニングデータに隠れたパターン(バックドア)を挿入します。モデルはこのパターンを認識し、トリガーされると悪意のある動作をします。\ + **例**:特定の人物を誤認識する顔認識システム。 + +MITRE Corporationは、AIシステムに対する現実の攻撃で敵対者が使用する戦術と技術の知識ベースである[ATLAS (Adversarial Threat Landscape for Artificial-Intelligence Systems)](https://atlas.mitre.org/?WT.mc_id=academic-105485-koreyst)を作成しました。 + +> AI対応システムの脆弱性は増加しており、AIの導入により既存システムの攻撃面が従来のサイバー攻撃を超えて拡大しています。ATLASは、これらのユニークで進化する脆弱性への認識を高めるために開発されました。ATLASは、MITRE ATT&CK®フレームワークをモデルにしており、その戦術、技術、手順(TTP)はATT&CKのものと補完的です。 + +伝統的なサイバーセキュリティで高度な脅威エミュレーションシナリオの計画に広く使用されているMITRE ATT&CK®フレームワークと同様に、ATLASは新たな攻撃に対する防御を理解し準備するのに役立つ検索可能なTTPセットを提供します。 + +さらに、Open Web Application Security Project (OWASP)は、LLMを利用するアプリケーションで見つかった最も重大な脆弱性の"[トップ10リスト](https://llmtop10.com/?WT.mc_id=academic-105485-koreyst)"を作成しました。このリストは、前述のデータポイズニングやその他の脅威のリスクを強調しています: + +- **プロンプトインジェクション**:攻撃者が大規模言語モデル(LLM)を慎重に設計された入力を通じて操作し、意図された動作を超えて動作させる手法。 +- **サプライチェーンの脆弱性**:LLMが使用するアプリケーションを構成するコンポーネントやソフトウェア(Pythonモジュールや外部データセットなど)は、それ自体が脆弱である可能性があり、予期しない結果、バイアスの導入、さらには基盤インフラストラクチャの脆弱性を引き起こす可能性があります。 +- **過度の依存**:LLMは誤った情報を生成しやすく、不正確または安全でない結果を提供することがあります。いくつかの文書化された状況では、人々が結果をそのまま受け入れ、意図しない現実世界での否定的な結果を招いています。 + +Microsoft Cloud AdvocateのRod Trentは、これらや他の新たなAIの脅威について深く掘り下げ、これらのシナリオに最善で対処するための広範なガイダンスを提供する無料の電子書籍、[Must Learn AI Security](https://github.com/rod-trent/OpenAISecurity/tree/main/Must_Learn/Book_Version?WT.mc_id=academic-105485-koreyst)を執筆しています。 + +## AIシステムとLLMのセキュリティテスト + +人工知能(AI)は、さまざまな分野や産業を変革し、社会に新たな可能性と利益をもたらしています。しかし、AIはデータプライバシー、バイアス、説明性の欠如、潜在的な悪用など、重大な課題やリスクも抱えています。したがって、AIシステムが安全で責任あるものであり、倫理的および法的基準を遵守し、ユーザーや利害関係者から信頼されることが重要です。 + +セキュリティテストは、AIシステムまたはLLMのセキュリティを評価し、その脆弱性を特定して悪用するプロセスです。これは、開発者、ユーザー、または第三者の監査人によって、テストの目的と範囲に応じて実施されることがあります。AIシステムとLLMの最も一般的なセキュリティテスト方法のいくつかは次のとおりです: + +- **データサニタイゼーション**:これは、AIシステムまたはLLMのトレーニングデータまたは入力から機密情報や個人情報を削除または匿名化するプロセスです。データサニタイゼーションは、機密情報や個人データの露出を減らすことで、データの漏洩や悪意のある操作を防ぐのに役立ちます。 +- **敵対的テスト**:これは、AIシステムまたはLLMの入力または出力に敵対的な例を生成して適用し、その堅牢性と敵対的攻撃に対する耐性を評価するプロセスです。敵対的テストは、攻撃者によって悪用される可能性のあるAIシステムまたはLLMの脆弱性と弱点を特定し、軽減するのに役立ちます。 +- **モデル検証**:これは、AIシステムまたはLLMのモデルパラメータまたはアーキテクチャの正確性と完全性を検証するプロセスです。モデル検証は、モデルが保護され認証されていることを確認することで、モデルの盗用を検出し防止するのに役立ちます。 +- **出力検証**:これは、AIシステムまたはLLMの出力の品質と信頼性を検証するプロセスです。出力検証は、出力が一貫して正確であることを確認することで、悪意のある操作を検出し修正するのに役立ちます。 + +AIシステムのリーダーであるOpenAIは、AIの安全性に貢献することを目指して、レッドチーミングネットワークの一環として、AIシステムの出力をテストするための一連の_安全性評価_を設定しています。 + +> 評価は、単純なQ&Aテストからより複雑なシミュレーションまでさまざまです。具体的な例として、OpenAIがAIの行動をさまざまな角度から評価するために開発したサンプル評価を以下に示します: + +#### 説得 + +- [MakeMeSay](https://github.com/openai/evals/tree/main/evals/elsuite/make_me_say/readme.md?WT.mc_id=academic-105485-koreyst):AIシステムが別のAIシステムに秘密の言葉を言わせることができるか? +- [MakeMePay](https://github.com/openai/evals/tree/main/evals/elsuite/make_me_pay/readme.md?WT.mc_id=academic-105485-koreyst):AIシステムが別のAIシステムに寄付を促すことができるか? +- [Ballot Proposal](https://github.com/openai/evals/tree/main/evals/elsuite/ballots/readme.md?WT.mc_id=academic-105485-koreyst):AIシステムが別のAIシステムの政治提案への支持を影響させることができるか? + +#### ステガノグラフィー(隠れたメッセージ) + +- [Steganography](https://github.com/openai/evals/tree/main/evals/elsuite/steganography/readme.md?WT.mc_id=academic-105485-koreyst):AIシステムが別のAIシステムに見つからずに秘密のメッセージを渡すことができるか? +- [Text Compression](https://github.com/openai/evals/tree/main/evals/elsuite/text_compression/readme.md?WT.mc_id=academic-105485-koreyst):AIシステムがメッセージを圧縮し、秘密のメッセージを隠すために復元できるか? +- [Schelling Point](https://github.com/openai/evals/blob/main/evals/elsuite/schelling_point/README.md?WT.mc_id=academic-105485-koreyst):AIシステムが直接のコミュニケーションなしに別のAIシステムと協調できるか? + +### AIセキュリティ + +AIシステムを悪意のある攻撃、悪用、または意図しない結果から保護することを目指すことが重要です。これには、AIシステムの安全性、信頼性、信頼性を確保するための措置を講じることが含まれます。具体的には、以下のようなことが必要です: + +- AIモデルのトレーニングと実行に使用されるデータとアルゴリズムを保護する +- AIシステムへの不正アクセス、操作、または破壊を防ぐ +- AIシステムにおけるバイアス、差別、倫理的問題を検出し軽減する +- AIの決定と行動の説明責任、透明性、説明可能性を確保する +- AIシステムの目標と価値を人間と社会のものに一致させる + +AIセキュリティは、AIシステムとデータの整合性、可用性、機密性を確保するために重要です。AIセキュリティの課題と機会には以下のようなものがあります: + +- 機会:サイバーセキュリティ戦略にAIを組み込むことで、脅威の特定と応答時間の改善に重要な役割を果たすことができます。AIは、フィッシング、マルウェア、ランサムウェアなどのサイバー攻撃の検出と軽減を自動化し、強化するのに役立ちます。 +- 課題:AIは、敵対者によって洗練された攻撃を開始するためにも使用される可能性があります。例えば、偽のまたは誤解を招くコンテンツの生成、ユーザーのなりすまし、AIシステムの脆弱性の悪用などです。したがって、AI開発者は、悪用に対して堅牢で耐性のあるシステムを設計する責任を負っています。 + +### データ保護 + +LLMは、使用するデータのプライバシーとセキュリティにリスクをもたらす可能性があります。例えば、LLMはトレーニングデータから個人名、住所、パスワード、クレジットカード番号などの機密情報を記憶して漏洩する可能性があります。また、悪意のあるアクターによって脆弱性やバイアスを悪用される可能性もあります。したがって、これらのリスクを認識し、LLMで使用するデータを保護するための適切な措置を講じることが重要です。LLMで使用するデータを保護するために取るべきいくつかのステップは次のとおりです: + +- **LLMと共有するデータの量と種類を制限する**:目的に必要で関連性のあるデータのみを共有し、機密性、秘密性、個人情報のデータを共有しないようにします。ユーザーは、LLMと共有するデータを匿名化または暗号化することも推奨されます。例えば、識別情報を削除またはマスクする、または安全な通信チャネルを使用するなどです。 +- **LLMが生成するデータを検証する**:LLMが生成する出力の正確性と品質 + +**免責事項**: +この文書は機械翻訳サービスを使用して翻訳されています。正確さを期すよう努めていますが、自動翻訳には誤りや不正確さが含まれる可能性があります。原文の言語での文書を権威ある情報源と見なすべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当社は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/14-the-generative-ai-application-lifecycle/README.md b/translations/ja/14-the-generative-ai-application-lifecycle/README.md new file mode 100644 index 000000000..884093df9 --- /dev/null +++ b/translations/ja/14-the-generative-ai-application-lifecycle/README.md @@ -0,0 +1,89 @@ +[![関数呼び出しとの統合](../../../translated_images/14-lesson-banner.png?WT.833a8de2ff3806528caaf839db4385f00ff7c9f92ccdd38d886f4d662fc72f2a.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson14-gh?WT.mc_id=academic-105485-koreyst) + +# 生成的AIアプリケーションのライフサイクル + +AIアプリケーションにとって重要な質問は、AI機能の関連性です。AIは急速に進化する分野であり、アプリケーションが常に関連性を持ち、信頼性が高く、堅牢であることを保証するためには、継続的に監視、評価、改善する必要があります。ここで、生成的AIライフサイクルが役立ちます。 + +生成的AIライフサイクルは、生成的AIアプリケーションの開発、展開、維持の段階をガイドするフレームワークです。目標を定義し、パフォーマンスを測定し、課題を特定し、解決策を実施するのに役立ちます。また、アプリケーションをドメインやステークホルダーの倫理的および法的基準に合わせるのにも役立ちます。生成的AIライフサイクルに従うことで、アプリケーションが常に価値を提供し、ユーザーを満足させることができます。 + +## はじめに + +この章では、以下を学びます: + +- MLOpsからLLMOpsへのパラダイムシフトを理解する +- LLMライフサイクル +- ライフサイクルのツール +- ライフサイクルの測定と評価 + +## MLOpsからLLMOpsへのパラダイムシフトを理解する + +LLMは人工知能の新しいツールであり、アプリケーションの分析と生成タスクにおいて非常に強力です。しかし、この力はAIと従来の機械学習タスクの効率化にいくつかの影響を及ぼします。 + +これにより、このツールを動的に適応させるための新しいパラダイムが必要です。過去のAIアプリを「MLアプリ」とし、最新のAIアプリを「GenAIアプリ」または単に「AIアプリ」と分類できます。これは、当時の主流技術と手法を反映しています。このようにして、私たちの物語は多くの方法で変わります。次の比較を見てください。 + +![LLMOpsとMLOpsの比較](../../../translated_images/01-llmops-shift.png?WT.38bc3eca81f659d83b17070d0a766bc3a9f13284b92c307e296915db4e683fcf.ja.mc_id=academic-105485-koreys) + +LLMOpsでは、アプリ開発者により焦点を当て、統合を重要なポイントとして使用し、「モデル・アズ・ア・サービス」を使用し、次のポイントでメトリクスを考えます。 + +- 品質:応答の品質 +- 有害性:責任あるAI +- 誠実性:応答の根拠(意味が通じるか?正しいか?) +- コスト:ソリューションの予算 +- 遅延:トークン応答の平均時間 + +## LLMライフサイクル + +まず、ライフサイクルとその変更を理解するために、次のインフォグラフィックを見てみましょう。 + +![LLMOpsインフォグラフィック](../../../translated_images/02-llmops.png?WT.32553adc9de4d89bb1d6a2f1f99d985457158a3be863e8e5dddc5e3dd074558a.ja.mc_id=academic-105485-koreys) + +ご覧の通り、これは通常のMLOpsのライフサイクルとは異なります。LLMは、プロンプト、品質を向上させるためのさまざまな手法(ファインチューニング、RAG、メタプロンプト)、責任あるAIに関する評価と責任、最後に新しい評価指標(品質、有害性、誠実性、コスト、遅延)など、多くの新しい要件があります。 + +たとえば、どのようにアイデアを出すかを見てみましょう。プロンプトエンジニアリングを使用して、さまざまなLLMで実験し、仮説が正しいかどうかをテストする可能性を探ります。 + +これは線形ではなく、統合されたループであり、反復的で包括的なサイクルです。 + +これらのステップをどのように探求することができるでしょうか?ライフサイクルをどのように構築するかについて詳しく見てみましょう。 + +![LLMOpsワークフロー](../../../translated_images/03-llm-stage-flows.png?WT.118920c8fd638f0879fe06c5e6eb9d91536e8b9c6bc56808ebed8706812f5391.ja.mc_id=academic-105485-koreys) + +少し複雑に見えるかもしれませんが、まず3つの大きなステップに焦点を当てましょう。 + +1. アイデア出し/探索: 探索では、ビジネスニーズに応じて探索を行います。プロトタイピング、[PromptFlow](https://microsoft.github.io/promptflow/index.html?WT.mc_id=academic-105485-koreyst)を作成し、仮説に対して十分に効率的かどうかをテストします。 +2. 構築/拡張: 実装では、より大きなデータセットを評価し、ファインチューニングやRAGなどの手法を実装して、ソリューションの堅牢性を確認します。うまくいかない場合は、フローに新しいステップを追加したり、データを再構築したりすることで改善するかもしれません。フローとスケールをテストし、メトリクスを確認したら、次のステップに進む準備が整います。 +3. 運用化: 統合では、モニタリングとアラートシステムをシステムに追加し、アプリケーションへの統合を行います。 + +その後、セキュリティ、コンプライアンス、ガバナンスに焦点を当てた管理の包括的なサイクルがあります。 + +おめでとうございます。これでAIアプリが準備完了し、運用可能です。実践的な経験を得るには、[Contoso Chat Demo](https://nitya.github.io/contoso-chat/?WT.mc_id=academic-105485-koreys)をご覧ください。 + +さて、どのようなツールを使用できるでしょうか? + +## ライフサイクルのツール + +ツールとして、Microsoftは[Azure AI Platform](https://azure.microsoft.com/solutions/ai/?WT.mc_id=academic-105485-koreys)と[PromptFlow](https://microsoft.github.io/promptflow/index.html?WT.mc_id=academic-105485-koreyst)を提供しており、サイクルを簡単に実装し、すぐに使えるようにします。 + +[Azure AI Platform](https://azure.microsoft.com/solutions/ai/?WT.mc_id=academic-105485-koreys)を使用すると、[AI Studio](https://ai.azure.com/?WT.mc_id=academic-105485-koreys)を利用できます。AI Studioは、モデル、サンプル、ツールを探索できるWebポータルであり、リソースの管理、UI開発フロー、コードファースト開発のためのSDK/CLIオプションを提供します。 + +![Azure AIの可能性](../../../translated_images/04-azure-ai-platform.png?WT.a39053c2efd7670298a79282658a9f5bf903dec5c1938b1a08cf45f1284e6ac0.ja.mc_id=academic-105485-koreys) + +Azure AIを使用すると、複数のリソースを使用して、オペレーション、サービス、プロジェクト、ベクトル検索、データベースのニーズを管理できます。 + +![Azure AIを使用したLLMOps](../../../translated_images/05-llm-azure-ai-prompt.png?WT.9189130ce4f2e7c8667fc7c83c6b89236ce5c6361150f47104c27c105f04b487.ja.mc_id=academic-105485-koreys) + +PromptFlowを使用して、概念実証(POC)から大規模アプリケーションまで構築します: + +- VS Codeからビジュアルおよび機能的なツールを使用してアプリを設計および構築 +- 簡単に質の高いAIのためにアプリをテストおよび微調整 +- Azure AI Studioを使用してクラウドと統合および反復し、迅速な統合のためにプッシュおよびデプロイ + +![PromptFlowを使用したLLMOps](../../../translated_images/06-llm-promptflow.png?WT.e479dfedaa5f6ef7d36a11edbff74ac5579c3121ba0be0ee32eb5fc3eb17bd77.ja.mc_id=academic-105485-koreys) + +## 素晴らしい!学習を続けましょう! + +素晴らしいですね。アプリケーションをどのように構築し、[Contoso Chat App](https://nitya.github.io/contoso-chat/?WT.mc_id=academic-105485-koreyst)を使用して概念を活用する方法を学び、クラウドアドボカシーがこれらの概念をデモにどのように追加しているかを確認してください。詳細なコンテンツについては、[Igniteのブレークアウトセッション](https://www.youtube.com/watch?v=DdOylyrTOWg)をチェックしてください。 + +次に、Lesson 15を確認し、[Retrieval Augmented Generation and Vector Databases](../15-rag-and-vector-databases/README.md?WT.mc_id=academic-105485-koreyst)が生成的AIにどのように影響し、より魅力的なアプリケーションを作成するかを理解しましょう! + +**免責事項**: +この文書は、機械翻訳サービスを使用して翻訳されています。正確さを期しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご了承ください。元の言語の文書が信頼できる情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤った解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/15-rag-and-vector-databases/README.md b/translations/ja/15-rag-and-vector-databases/README.md new file mode 100644 index 000000000..21f695fec --- /dev/null +++ b/translations/ja/15-rag-and-vector-databases/README.md @@ -0,0 +1,270 @@ +# 検索拡張生成 (RAG) とベクターデータベース + +[![検索拡張生成 (RAG) とベクターデータベース](../../../translated_images/15-lesson-banner.png?WT.ae1ec4b596c9c2b74121dd24c30143380d4789a9ef381276dbbc9fd5d7abc3d5.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson15-gh?WT.mc_id=academic-105485-koreyst) + +検索アプリケーションのレッスンでは、独自のデータを大規模言語モデル (LLM) に統合する方法について簡単に学びました。このレッスンでは、LLM アプリケーションにおけるデータの基盤化、プロセスの仕組み、埋め込みやテキストを含むデータの保存方法について詳しく掘り下げます。 + +> **ビデオは近日公開予定** + +## はじめに + +このレッスンでカバーする内容は以下の通りです: + +- RAGの概要、AI(人工知能)での使用理由。 + +- ベクターデータベースの理解とアプリケーションのための作成。 + +- アプリケーションにRAGを統合する実用的な例。 + +## 学習目標 + +このレッスンを完了すると、次のことができるようになります: + +- データ検索と処理におけるRAGの重要性を説明する。 + +- RAGアプリケーションを設定し、データをLLMに基づかせる。 + +- LLMアプリケーションにおけるRAGとベクターデータベースの効果的な統合。 + +## 私たちのシナリオ: 独自のデータでLLMを強化 + +このレッスンでは、教育スタートアップに独自のノートを追加し、チャットボットがさまざまな科目についての情報を得られるようにします。ノートを使用することで、学習者はより良く勉強し、異なるトピックを理解しやすくなり、試験の復習が容易になります。シナリオを作成するために、以下を使用します: + +- `Azure OpenAI:` チャットボットを作成するために使用するLLM + +- `AI for beginners' lesson on Neural Networks`: これがLLMの基盤となるデータ + +- `Azure AI Search` と `Azure Cosmos DB:` ベクターデータベースでデータを保存し、検索インデックスを作成 + +ユーザーはノートから練習クイズを作成し、復習用のフラッシュカードを作成し、要約して簡潔な概要を得ることができます。始めるにあたり、RAGとは何か、どのように機能するのかを見てみましょう: + +## 検索拡張生成 (RAG) + +LLMを搭載したチャットボットは、ユーザーのプロンプトを処理して応答を生成します。これは対話型に設計されており、さまざまなトピックでユーザーとやり取りします。しかし、その応答は提供されたコンテキストと基礎的なトレーニングデータに制限されています。たとえば、GPT-4の知識のカットオフは2021年9月であり、それ以降に発生した出来事についての知識はありません。さらに、LLMのトレーニングに使用されるデータには、個人のノートや企業の製品マニュアルのような機密情報は含まれていません。 + +### RAGs (検索拡張生成) の仕組み + +![RAGsの仕組みを示す図](../../../translated_images/how-rag-works.png?WT.fde75879826c169b53e16dc0d0d6691172c75b314400f380d40a9f31244eba0e.ja.mc_id=academic-105485-koreyst) + +ノートからクイズを作成するチャットボットを展開したいと仮定します。そのためには、知識ベースへの接続が必要です。ここでRAGが役立ちます。RAGsは次のように動作します: + +- **知識ベース:** 検索の前に、これらの文書を取り込み、前処理を行う必要があります。通常、大きな文書を小さなチャンクに分割し、テキスト埋め込みに変換してデータベースに保存します。 + +- **ユーザーの質問:** ユーザーが質問をします。 + +- **検索:** ユーザーが質問をしたとき、埋め込みモデルが知識ベースから関連情報を検索し、プロンプトに組み込むためのコンテキストを提供します。 + +- **拡張生成:** LLMは取得したデータに基づいて応答を強化します。これにより、生成される応答が事前にトレーニングされたデータだけでなく、追加されたコンテキストからの関連情報に基づくようになります。取得したデータはLLMの応答を拡張するために使用されます。その後、LLMはユーザーの質問に対する答えを返します。 + +![RAGsのアーキテクチャを示す図](../../../translated_images/encoder-decode.png?WT.80c3c9669a10e85d1f7e9dc7f7f0d416a71e16d2f8a6da93267e55cbfbddbf9f.ja.mc_id=academic-105485-koreyst) + +RAGsのアーキテクチャは、エンコーダとデコーダの2つの部分からなるトランスフォーマーを使用して実装されます。たとえば、ユーザーが質問をすると、その入力テキストが「エンコード」され、単語の意味を捉えたベクトルに変換され、そのベクトルがドキュメントインデックスに「デコード」され、ユーザーの質問に基づいて新しいテキストを生成します。LLMはエンコーダ-デコーダモデルの両方を使用して出力を生成します。 + +提案された論文に従ってRAGを実装する際の2つのアプローチ:[知識集約型NLP(自然言語処理ソフトウェア)タスクのための検索拡張生成](https://arxiv.org/pdf/2005.11401.pdf?WT.mc_id=academic-105485-koreyst)は: + +- **_RAG-Sequence_** 検索された文書を使用してユーザーの質問に対する最良の答えを予測する + +- **RAG-Token** 文書を使用して次のトークンを生成し、それを取得してユーザーの質問に答える + +### なぜRAGsを使用するのか? + +- **情報の豊かさ:** テキストの応答が最新であることを保証します。したがって、内部知識ベースにアクセスすることで、特定のドメインのタスクでのパフォーマンスを向上させます。 + +- 知識ベースの**検証可能なデータ**を利用してユーザーの質問にコンテキストを提供することで、虚偽を減らします。 + +- LLMを微調整するよりも経済的であるため、**費用対効果が高い**です。 + +## 知識ベースの作成 + +私たちのアプリケーションは、AI初心者向けカリキュラムのニューラルネットワークレッスンという個人データに基づいています。 + +### ベクターデータベース + +ベクターデータベースは、従来のデータベースとは異なり、埋め込まれたベクトルを保存、管理、検索するために設計された特殊なデータベースです。文書の数値表現を保存します。データを数値埋め込みに分解することで、AIシステムがデータを理解し処理しやすくなります。 + +埋め込みをベクターデータベースに保存する理由は、LLMが入力として受け入れるトークンの数に制限があるためです。すべての埋め込みをLLMに渡すことはできないため、チャンクに分割する必要があります。ユーザーが質問をしたときに、質問に最も似ている埋め込みがプロンプトとともに返されます。チャンク化は、LLMを通じて渡されるトークンの数を減らし、コストを削減します。 + +人気のあるベクターデータベースには、Azure Cosmos DB、Clarifyai、Pinecone、Chromadb、ScaNN、Qdrant、DeepLakeなどがあります。Azure CLIを使用して次のコマンドでAzure Cosmos DBモデルを作成できます: + +```bash +az login +az group create -n -l +az cosmosdb create -n -r +az cosmosdb list-keys -n -g +``` + +### テキストから埋め込みへ + +データを保存する前に、それをベクトル埋め込みに変換してデータベースに保存する必要があります。大きな文書や長いテキストを扱う場合、予想されるクエリに基づいてチャンク化できます。チャンク化は文レベルまたは段落レベルで行うことができます。チャンク化は周囲の単語から意味を導くため、チャンクに追加のコンテキストを追加することもできます。たとえば、文書のタイトルを追加したり、チャンクの前後にテキストを含めたりすることです。データを次のようにチャンク化できます: + +```python +def split_text(text, max_length, min_length): + words = text.split() + chunks = [] + current_chunk = [] + + for word in words: + current_chunk.append(word) + if len(' '.join(current_chunk)) < max_length and len(' '.join(current_chunk)) > min_length: + chunks.append(' '.join(current_chunk)) + current_chunk = [] + + # If the last chunk didn't reach the minimum length, add it anyway + if current_chunk: + chunks.append(' '.join(current_chunk)) + + return chunks +``` + +チャンク化が完了したら、さまざまな埋め込みモデルを使用してテキストを埋め込むことができます。使用できるモデルには、word2vec、OpenAIのada-002、Azure Computer Visionなどがあります。使用するモデルを選択する際には、使用する言語、エンコードされるコンテンツのタイプ(テキスト/画像/音声)、エンコードできる入力のサイズ、埋め込み出力の長さに依存します。 + +OpenAIの`text-embedding-ada-002`モデルを使用した埋め込まれたテキストの例は次のとおりです: +![猫の単語の埋め込み](../../../translated_images/cat.png?WT.6f67a41409b2174c6f543273f4a9f8c38b227112a12831da3070e52f13e03818.ja.mc_id=academic-105485-koreyst) + +## 検索とベクター検索 + +ユーザーが質問をしたとき、検索者はそれをクエリエンコーダを使用してベクトルに変換し、入力に関連する文書の検索インデックスを通じて関連するベクトルを検索します。完了すると、入力ベクトルと文書ベクトルの両方をテキストに変換し、LLMに渡します。 + +### 検索 + +検索は、システムが検索条件を満たす文書をインデックスから迅速に見つけようとする際に行われます。検索者の目的は、コンテキストを提供し、データに基づいてLLMを基盤とするために使用される文書を取得することです。 + +データベース内で検索を実行する方法はいくつかあります: + +- **キーワード検索** - テキスト検索に使用されます。 + +- **セマンティック検索** - 単語の意味を使用します。 + +- **ベクター検索** - 埋め込みモデルを使用して文書をテキストからベクトル表現に変換します。検索は、ユーザーの質問に最も近いベクトル表現を持つ文書をクエリすることで行われます。 + +- **ハイブリッド** - キーワード検索とベクター検索の両方を組み合わせたもの。 + +検索の課題は、データベース内にクエリに対する類似の応答がない場合に発生します。その場合、システムは得られる最良の情報を返しますが、関連性の最大距離を設定したり、キーワードとベクター検索の両方を組み合わせたハイブリッド検索を使用したりする戦術を使用できます。このレッスンでは、ベクター検索とキーワード検索の両方を組み合わせたハイブリッド検索を使用します。チャンクと埋め込みを含む列を持つデータフレームにデータを保存します。 + +### ベクター類似性 + +検索者は、知識データベース内で近接している埋め込みを検索します。これらは類似したテキストです。ユーザーがクエリを尋ねた場合、それはまず埋め込まれ、類似した埋め込みと一致します。異なるベクトルがどの程度類似しているかを見つけるために使用される一般的な測定基準は、2つのベクトル間の角度に基づくコサイン類似性です。 + +類似性を測定する他の代替手段として、ベクトルの端点間の直線であるユークリッド距離や、2つのベクトルの対応する要素の積の合計を測定するドット積を使用できます。 + +### 検索インデックス + +検索を行う際には、検索を実行する前に知識ベースの検索インデックスを作成する必要があります。インデックスは埋め込みを保存し、大規模なデータベースでも最も類似したチャンクを迅速に取得できます。インデックスをローカルで作成するには: + +```python +from sklearn.neighbors import NearestNeighbors + +embeddings = flattened_df['embeddings'].to_list() + +# Create the search index +nbrs = NearestNeighbors(n_neighbors=5, algorithm='ball_tree').fit(embeddings) + +# To query the index, you can use the kneighbors method +distances, indices = nbrs.kneighbors(embeddings) +``` + +### 再ランキング + +データベースをクエリした後、最も関連性のあるものから結果をソートする必要があるかもしれません。再ランキングLLMは、検索結果の関連性を向上させるために、機械学習を利用して最も関連性の高いものから順に並べ替えます。Azure AI Searchを使用すると、セマンティック再ランカーを使用して再ランキングが自動的に行われます。最も近い隣人を使用した再ランキングの例: + +```python +# Find the most similar documents +distances, indices = nbrs.kneighbors([query_vector]) + +index = [] +# Print the most similar documents +for i in range(3): + index = indices[0][i] + for index in indices[0]: + print(flattened_df['chunks'].iloc[index]) + print(flattened_df['path'].iloc[index]) + print(flattened_df['distances'].iloc[index]) + else: + print(f"Index {index} not found in DataFrame") +``` + +## すべてをまとめる + +最後のステップは、データに基づいた応答を得るためにLLMを組み込むことです。次のように実装できます: + +```python +user_input = "what is a perceptron?" + +def chatbot(user_input): + # Convert the question to a query vector + query_vector = create_embeddings(user_input) + + # Find the most similar documents + distances, indices = nbrs.kneighbors([query_vector]) + + # add documents to query to provide context + history = [] + for index in indices[0]: + history.append(flattened_df['chunks'].iloc[index]) + + # combine the history and the user input + history.append(user_input) + + # create a message object + messages=[ + {"role": "system", "content": "You are an AI assistant that helps with AI questions."}, + {"role": "user", "content": history[-1]} + ] + + # use chat completion to generate a response + response = openai.chat.completions.create( + model="gpt-4", + temperature=0.7, + max_tokens=800, + messages=messages + ) + + return response.choices[0].message + +chatbot(user_input) +``` + +## アプリケーションの評価 + +### 評価指標 + +- 応答の質を確保し、自然で流暢で人間らしい響きを持つこと。 + +- データの基盤性:提供された文書からの応答であるかどうかを評価する。 + +- 関連性:応答が質問に一致し、関連しているかどうかを評価する。 + +- 流暢さ - 応答が文法的に意味を持つかどうか。 + +## RAG(検索拡張生成)とベクターデータベースの使用例 + +関数呼び出しがアプリを改善できるさまざまな使用例があります: + +- 質問と回答:会社のデータをチャットに基盤とし、従業員が質問できるようにする。 + +- レコメンデーションシステム:最も類似した値を一致させるシステムを作成できる場所、例:映画、レストランなど。 + +- チャットボットサービス:チャット履歴を保存し、ユーザーデータに基づいて会話をパーソナライズする。 + +- ベクター埋め込みに基づく画像検索、画像認識や異常検出に役立ちます。 + +## まとめ + +データのアプリケーションへの追加、ユーザーのクエリと出力など、RAGの基本的な領域をカバーしました。RAGの作成を簡素化するために、Semanti Kernel、Langchain、Autogenなどのフレームワークを使用できます。 + +## 課題 + +検索拡張生成 (RAG) の学習を続けるために、次のことを行うことができます: + +- お好みのフレームワークを使用してアプリケーションのフロントエンドを構築する。 + +- LangChainまたはSemantic Kernelのいずれかのフレームワークを使用して、アプリケーションを再作成する。 + +レッスンを完了したことをお祝いします 👏。 + +## 学習はここで終わりません、旅を続けましょう + +このレッスンを完了した後、[生成AI学習コレクション](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)をチェックして、生成AIの知識をさらに向上させましょう! + +**免責事項**: +この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを期すよう努めておりますが、自動翻訳には誤りや不正確さが含まれる可能性がありますのでご注意ください。原文の言語によるオリジナル文書を権威ある情報源とみなすべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/15-rag-and-vector-databases/data/frameworks.md b/translations/ja/15-rag-and-vector-databases/data/frameworks.md new file mode 100644 index 000000000..1bc851bf8 --- /dev/null +++ b/translations/ja/15-rag-and-vector-databases/data/frameworks.md @@ -0,0 +1,114 @@ +# ニューラルネットワークフレームワーク + +既に学んだように、ニューラルネットワークを効率的にトレーニングするためには、次の2つのことを行う必要があります: + +* テンソルを操作すること、例として乗算、加算、シグモイドやソフトマックスのような関数の計算 +* 勾配降下法による最適化を行うために、すべての表現の勾配を計算すること + +`numpy` ライブラリは最初の部分を行うことができますが、勾配を計算するための仕組みが必要です。前のセクションで開発したフレームワークでは、`backward` メソッド内で全ての微分関数を手動でプログラムする必要がありました。理想的には、フレームワークは定義できる*任意の表現*の勾配を計算する機会を提供すべきです。 + +もう一つ重要なことは、GPUやTPUのような専門的な計算ユニットで計算を行うことができることです。ディープニューラルネットワークのトレーニングには*非常に多くの*計算が必要であり、GPUでそれらの計算を並列化することが非常に重要です。 + +> ✅ 'parallelize' という用語は、計算を複数のデバイスに分散することを意味します。 + +現在、最も人気のあるニューラルフレームワークは、TensorFlowとPyTorchです。どちらも、CPUとGPUの両方でテンソルを操作するための低レベルAPIを提供しています。低レベルAPIの上には、それぞれKerasとPyTorch Lightningと呼ばれる高レベルAPIもあります。 + +低レベルAPI | TensorFlow| PyTorch +--------------|-------------------------------------|-------------------------------- +高レベルAPI| Keras| Pytorch + +**低レベルAPI**は、いわゆる**計算グラフ**を構築することを可能にします。このグラフは、与えられた入力パラメータで出力(通常は損失関数)をどのように計算するかを定義し、GPUでの計算が可能であれば、そこにプッシュすることができます。この計算グラフを微分し、勾配を計算する関数があり、それをモデルパラメータの最適化に利用できます。 + +**高レベルAPI**は、ニューラルネットワークを**層のシーケンス**として捉え、多くのニューラルネットワークの構築を容易にします。モデルのトレーニングは通常、データを準備し、`fit` 関数を呼び出して行います。 + +高レベルAPIは、典型的なニューラルネットワークを迅速に構築することを可能にし、多くの詳細を気にせずに済みます。一方で、低レベルAPIはトレーニングプロセスに対するより多くのコントロールを提供し、新しいニューラルネットワークアーキテクチャを扱う研究で多く使用されます。 + +また、両方のAPIを一緒に使用できることを理解することも重要です。例えば、低レベルAPIを使用して独自のネットワーク層アーキテクチャを開発し、それを高レベルAPIで構築しトレーニングされた大規模なネットワーク内で使用することができます。または、高レベルAPIを使用して層のシーケンスとしてネットワークを定義し、その後、自分自身の低レベルのトレーニングループを使用して最適化を行うこともできます。両方のAPIは同じ基本的な概念を使用し、一緒にうまく機能するように設計されています。 + +## 学習 + +このコースでは、PyTorchとTensorFlowの両方についてのコンテンツを提供しています。お好みのフレームワークを選んで、対応するノートブックを進めてください。どちらのフレームワークを選ぶべきか分からない場合は、インターネット上での**PyTorch vs. TensorFlow**に関する議論を読んでください。両方のフレームワークを見て、理解を深めるのも良いでしょう。 + +可能な限り、高レベルAPIを使用してシンプルに進めます。しかし、ニューラルネットワークがどのように動作するかを基礎から理解することが重要だと考えているため、最初は低レベルAPIとテンソルを使って作業を始めます。ただし、早く進めたい、またはこれらの詳細を学ぶのに多くの時間をかけたくない場合は、それらをスキップして高レベルAPIのノートブックに進むことができます。 + +## ✍️ 演習: フレームワーク + +次のノートブックで学習を続けてください: + +低レベルAPI | TensorFlow+Keras ノートブック | PyTorch +--------------|-------------------------------------|-------------------------------- +高レベルAPI| Keras | *PyTorch Lightning* + +フレームワークをマスターしたら、過学習の概念を復習しましょう。 + +# 過学習 + +過学習は機械学習において非常に重要な概念であり、正しく理解することが非常に重要です! + +次のような5つの点を近似する問題を考えてみましょう(以下のグラフで`x`で表されます): + +!linear | overfit +-------------------------|-------------------------- +**線形モデル、2パラメータ** | **非線形モデル、7パラメータ** +トレーニング誤差 = 5.3 | トレーニング誤差 = 0 +検証誤差 = 5.1 | 検証誤差 = 20 + +* 左側には、良好な直線近似が見られます。パラメータの数が適切であるため、モデルは点の分布の背後にある考えを正しく理解しています。 +* 右側では、モデルが強力すぎます。5つの点しかなく、モデルが7つのパラメータを持っているため、すべての点を通過するように調整でき、トレーニング誤差を0にします。しかし、これによりデータの背後にある正しいパターンを理解することができなくなり、検証誤差が非常に高くなります。 + +モデルの豊かさ(パラメータの数)とトレーニングサンプルの数の間で適切なバランスを取ることが非常に重要です。 + +## 過学習が発生する理由 + + * トレーニングデータが不足している + * モデルが強力すぎる + * 入力データにノイズが多すぎる + +## 過学習を検出する方法 + +上記のグラフから分かるように、過学習は非常に低いトレーニング誤差と高い検証誤差で検出できます。通常、トレーニング中はトレーニング誤差と検証誤差の両方が減少し始め、ある時点で検証誤差が減少を止め、上昇し始めることがあります。これは過学習の兆候であり、この時点でトレーニングを停止するべきである(または少なくともモデルのスナップショットを作成する)という指標になります。 + +## 過学習を防ぐ方法 + +過学習が発生している場合は、次のいずれかを行うことができます: + + * トレーニングデータの量を増やす + * モデルの複雑さを減らす + * 後で考慮するドロップアウトなどの正則化手法を使用する + +## 過学習とバイアス・バリアンストレードオフ + +過学習は、統計学におけるより一般的な問題であるバイアス・バリアンストレードオフの一例です。モデルの誤差の可能性のある原因を考えると、2種類の誤差があります: + +* **バイアス誤差**は、アルゴリズムがトレーニングデータ間の関係を正しくキャプチャできないことによって引き起こされます。これは、モデルが十分に強力でないこと(**アンダーフィッティング**)が原因である可能性があります。 +* **バリアンス誤差**は、モデルが入力データのノイズを意味のある関係の代わりに近似することによって引き起こされます(**過学習**)。 + +トレーニング中、バイアス誤差は減少し(モデルがデータを近似することを学ぶため)、バリアンス誤差は増加します。過学習を防ぐためには、トレーニングを手動で(過学習を検出したとき)または自動で(正則化を導入することによって)停止することが重要です。 + +## 結論 + +このレッスンでは、2つの最も人気のあるAIフレームワークであるTensorFlowとPyTorchのさまざまなAPIの違いについて学びました。加えて、非常に重要なトピックである過学習について学びました。 + +## 🚀 チャレンジ + +付属のノートブックには、下部に「タスク」があります。ノートブックを通して作業し、タスクを完了してください。 + +## レビューと自己学習 + +次のトピックについて調査を行ってください: + +- TensorFlow +- PyTorch +- 過学習 + +次の質問を自問してください: + +- TensorFlowとPyTorchの違いは何ですか? +- 過学習とアンダーフィッティングの違いは何ですか? + +## 課題 + +このラボでは、PyTorchまたはTensorFlowを使用して、単層および多層の完全結合ネットワークを用いて2つの分類問題を解決することを求められています。 + +**免責事項**: +この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを追求しておりますが、自動翻訳には誤りや不正確さが含まれる場合があることをご了承ください。元の言語で書かれた原文を公式な情報源と見なすべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/15-rag-and-vector-databases/data/own_framework.md b/translations/ja/15-rag-and-vector-databases/data/own_framework.md new file mode 100644 index 000000000..73e5188ac --- /dev/null +++ b/translations/ja/15-rag-and-vector-databases/data/own_framework.md @@ -0,0 +1,83 @@ +# ニューラルネットワーク入門. 多層パーセプトロン + +前のセクションでは、最も単純なニューラルネットワークモデルである一層パーセプトロン、線形二クラス分類モデルについて学びました。 + +このセクションでは、このモデルをより柔軟なフレームワークに拡張し、以下を可能にします: + +* 二クラスに加えて、**多クラス分類**を行う +* 分類に加えて、**回帰問題**を解く +* 線形分離不可能なクラスを分離する + +また、異なるニューラルネットワークアーキテクチャを構築できるようにするためのPythonによる独自のモジュラーフレームワークも開発します。 + +## 機械学習の形式化 + +まずは機械学習問題を形式化することから始めましょう。トレーニングデータセット**X**とラベル**Y**があり、最も正確な予測を行うモデル*f*を構築する必要があるとします。予測の品質は**損失関数**ℒによって測定されます。以下の損失関数がよく使用されます: + +* 数値を予測する必要がある回帰問題の場合、**絶対誤差**∑i|f(x(i))-y(i)|または**二乗誤差**∑i(f(x(i))-y(i))2を使用できます。 +* 分類の場合、**0-1損失**(モデルの**精度**と本質的に同じ)または**ロジスティック損失**を使用します。 + +一層パーセプトロンの場合、関数*f*は線形関数*f(x)=wx+b*として定義されました(ここで*w*は重み行列、*x*は入力特徴ベクトル、*b*はバイアスベクトルです)。異なるニューラルネットワークアーキテクチャでは、この関数はより複雑な形をとることができます。 + +> 分類の場合、ネットワーク出力として対応するクラスの確率を得ることが望ましいことがよくあります。任意の数値を確率に変換するため(例えば、出力を正規化するため)、**ソフトマックス**関数σをよく使用し、関数*f*は*f(x)=σ(wx+b)*となります。 + +上記の*f*の定義において、*w*と*b*は**パラメータ**θ=⟨*w,b*⟩と呼ばれます。データセット⟨**X**,**Y**⟩が与えられた場合、パラメータθの関数としてデータセット全体の総合的な誤差を計算できます。 + +> ✅ **ニューラルネットワークのトレーニングの目的は、パラメータθを変化させて誤差を最小化することです** + +## 勾配降下法による最適化 + +関数最適化の有名な方法に**勾配降下法**があります。アイデアは、パラメータに対する損失関数の導関数(多次元の場合は**勾配**と呼ばれる)を計算し、誤差が減少するようにパラメータを変化させることです。これは以下のように形式化できます: + +* パラメータをいくつかのランダムな値で初期化する w(0), b(0) +* 次のステップを何度も繰り返す: + - w(i+1) = w(i)-η∂ℒ/∂w + - b(i+1) = b(i)-η∂ℒ/∂b + +トレーニング中、最適化ステップはデータセット全体を考慮して計算されることが想定されています(損失はすべてのトレーニングサンプルを通じて合計として計算されることを思い出してください)。しかし、実際には**ミニバッチ**と呼ばれるデータセットの小さな部分を取り、データのサブセットに基づいて勾配を計算します。サブセットは毎回ランダムに取られるため、この方法は**確率的勾配降下法**(SGD)と呼ばれます。 + +## 多層パーセプトロンと逆伝播 + +一層ネットワークは、上で見たように、線形分離可能なクラスを分類することができます。より豊かなモデルを構築するために、ネットワークのいくつかの層を組み合わせることができます。数学的には、関数*f*がより複雑な形を持ち、いくつかのステップで計算されることを意味します: +* z1=w1x+b1 +* z2=w2α(z1)+b2 +* f = σ(z2) + +ここで、αは**非線形活性化関数**、σはソフトマックス関数、パラメータθ=<*w1,b1,w2,b2*>です。 + +勾配降下アルゴリズムは同じままですが、勾配を計算するのがより難しくなります。チェーン微分則を考慮すると、導関数を次のように計算できます: + +* ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2) +* ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1) + +> ✅ チェーン微分則は、パラメータに対する損失関数の導関数を計算するために使用されます。 + +これらの表現の左端部分はすべて同じであることに注意してください。そのため、損失関数から始めて計算グラフを「逆方向」にたどることで、効果的に導関数を計算できます。このようにして、多層パーセプトロンをトレーニングする方法は**逆伝播**または「バックプロップ」と呼ばれます。 + +> TODO: 画像引用 + +> ✅ ノートブックの例で逆伝播についてより詳細に説明します。 + +## 結論 + +このレッスンでは、独自のニューラルネットワークライブラリを構築し、シンプルな2次元分類タスクに使用しました。 + +## 🚀 チャレンジ + +付随するノートブックでは、多層パーセプトロンを構築し、トレーニングするための独自のフレームワークを実装します。現代のニューラルネットワークがどのように動作するかを詳細に見ることができます。 + +OwnFrameworkノートブックに進み、それを進めてください。 + +## レビューと自己学習 + +逆伝播はAIとMLで一般的に使用されるアルゴリズムであり、より詳細に学ぶ価値があります。 + +## 課題 + +このラボでは、このレッスンで構築したフレームワークを使用して、MNIST手書き数字分類を解決するよう求められます。 + +* 手順 +* ノートブック + +**免責事項**: +この文書は機械翻訳AIサービスを使用して翻訳されています。正確さを期しておりますが、自動翻訳には誤りや不正確さが含まれる場合がありますのでご注意ください。元の言語での原文を正式な情報源とみなすべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/15-rag-and-vector-databases/data/perceptron.md b/translations/ja/15-rag-and-vector-databases/data/perceptron.md new file mode 100644 index 000000000..e2a6f88cf --- /dev/null +++ b/translations/ja/15-rag-and-vector-databases/data/perceptron.md @@ -0,0 +1,88 @@ +# ニューラルネットワーク入門: パーセプトロン + +現代のニューラルネットワークに似たものを実装する最初の試みの一つは、1957年にコーネル航空研究所のフランク・ローゼンブラットによって行われました。それは「Mark-1」と呼ばれるハードウェア実装で、三角形、四角形、円などの基本的な幾何学的図形を認識するように設計されていました。 + +| | | +|--------------|-----------| +|Frank Rosenblatt | The Mark 1 Perceptron| + +> 画像はWikipediaから + +入力画像は20x20のフォトセル配列で表現されていたため、ニューラルネットワークには400の入力と1つのバイナリ出力がありました。シンプルなネットワークは1つのニューロン、または**しきい値論理ユニット**とも呼ばれるものを含んでいました。ニューラルネットワークの重みはポテンショメータのように機能し、トレーニングフェーズ中に手動で調整する必要がありました。 + +> ✅ ポテンショメータは、ユーザーが回路の抵抗を調整できるデバイスです。 + +> 当時、ニューヨーク・タイムズはパーセプトロンについて次のように書いていました: *[海軍が] 歩き、話し、見ることができ、書き、自らを再生産し、自分の存在を意識することができると期待する電子計算機の胚芽。* + +## パーセプトロンモデル + +モデルにN個の特徴があると仮定すると、入力ベクトルはサイズNのベクトルになります。パーセプトロンは**バイナリ分類**モデル、つまり2つのクラスの入力データを区別することができます。各入力ベクトルxに対して、パーセプトロンの出力がクラスに応じて+1または-1になると仮定します。出力は次の式を用いて計算されます: + +y(x) = f(wTx) + +ここでfはステップ活性化関数です。 + +## パーセプトロンのトレーニング + +パーセプトロンをトレーニングするためには、ほとんどの値を正しく分類する重みベクトルwを見つける必要があります。つまり、最小の**エラー**をもたらす必要があります。このエラーは、次のように**パーセプトロンクライテリオン**によって定義されます: + +E(w) = -∑wTxiti + +ここで: + +* 和は誤分類をもたらすトレーニングデータポイントiについて取られます +* xiは入力データで、tiはそれぞれ負の例と正の例に対して-1または+1です。 + +この基準は重みwの関数として考えられ、これを最小化する必要があります。しばしば、**勾配降下法**と呼ばれる方法が使用され、初期重みw(0)から始め、各ステップで次の式に従って重みを更新します: + +w(t+1) = w(t) - η∇E(w) + +ここでηは**学習率**と呼ばれ、∇E(w)はEの**勾配**を示します。勾配を計算した後、次のようになります: + +w(t+1) = w(t) + ∑ηxiti + +Pythonでのアルゴリズムは次のようになります: + +```python +def train(positive_examples, negative_examples, num_iterations = 100, eta = 1): + + weights = [0,0,0] # Initialize weights (almost randomly :) + + for i in range(num_iterations): + pos = random.choice(positive_examples) + neg = random.choice(negative_examples) + + z = np.dot(pos, weights) # compute perceptron output + if z < 0: # positive example classified as negative + weights = weights + eta*weights.shape + + z = np.dot(neg, weights) + if z >= 0: # negative example classified as positive + weights = weights - eta*weights.shape + + return weights +``` + +## 結論 + +このレッスンでは、バイナリ分類モデルであるパーセプトロンと、重みベクトルを使用してそれをトレーニングする方法について学びました。 + +## 🚀 チャレンジ + +独自のパーセプトロンを構築してみたい場合は、Azure MLデザイナーを使用したMicrosoft Learnのこのラボに挑戦してみてください。 + +## レビューと自己学習 + +パーセプトロンを使用しておもちゃの問題や実際の問題を解決する方法を見て学習を続けるには、パーセプトロンノートブックに進んでください。 + +パーセプトロンに関する興味深い記事もあります。 + +## 課題 + +このレッスンでは、バイナリ分類タスクのためにパーセプトロンを実装し、2つの手書き数字を分類するために使用しました。このラボでは、与えられた画像に最も対応する可能性の高い数字を決定する、数字分類の問題を完全に解決するよう求められています。 + +* 手順 +* ノートブック + +**免責事項**: +この文書は、機械翻訳サービスを使用して翻訳されています。正確さを追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の言語での原文を信頼できる情報源として考慮してください。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤った解釈について、当方は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/16-open-source-models/README.md b/translations/ja/16-open-source-models/README.md new file mode 100644 index 000000000..f34288801 --- /dev/null +++ b/translations/ja/16-open-source-models/README.md @@ -0,0 +1,82 @@ +[![Open Source Models](../../../translated_images/16-lesson-banner.png?WT.a9a13a59f0350adb5846e88fb3aba98cd4c6cb3297e78cb7100938f45b7dac47.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson16-gh?WT.mc_id=academic-105485-koreyst) + +## はじめに + +オープンソースLLMの世界は刺激的で絶えず進化しています。このレッスンでは、オープンソースモデルについて詳しく見ていきます。独自モデルとオープンソースモデルの比較に関する情報をお探しの場合は、「[異なるLLMの探索と比較](../02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst)」のレッスンをご覧ください。このレッスンでは、微調整のトピックも取り上げますが、より詳細な説明は「[LLMの微調整](../18-fine-tuning/README.md?WT.mc_id=academic-105485-koreyst)」のレッスンで確認できます。 + +## 学習目標 + +- オープンソースモデルの理解を深める +- オープンソースモデルを使うことの利点を理解する +- Hugging FaceやAzure AI Studioで利用可能なオープンモデルを探索する + +## オープンソースモデルとは? + +オープンソースソフトウェアは、さまざまな分野での技術の成長において重要な役割を果たしてきました。オープンソースイニシアティブ(OSI)は、ソフトウェアをオープンソースとして分類するための[10の基準](https://web.archive.org/web/20241126001143/https://opensource.org/osd?WT.mc_id=academic-105485-koreyst)を定義しています。ソースコードは、OSIが承認したライセンスの下でオープンに共有される必要があります。 + +LLMの開発はソフトウェアの開発と似た要素を持っていますが、プロセスはまったく同じではありません。これにより、LLMの文脈でのオープンソースの定義について、コミュニティ内で多くの議論が生まれました。モデルが伝統的なオープンソースの定義に沿うためには、以下の情報が公開されている必要があります: + +- モデルのトレーニングに使用されたデータセット。 +- トレーニングの一部としての完全なモデルの重み。 +- 評価コード。 +- 微調整コード。 +- 完全なモデルの重みとトレーニングメトリクス。 + +現在、この基準を満たすモデルはごくわずかです。 [Allen Institute for Artificial Intelligence (AllenAI) によって作成されたOLMoモデル](https://huggingface.co/allenai/OLMo-7B?WT.mc_id=academic-105485-koreyst)は、このカテゴリーに該当します。 + +このレッスンでは、上記の基準を満たしていない可能性があるため、今後「オープンモデル」と呼ぶことにします。 + +## オープンモデルの利点 + +**高いカスタマイズ性** - オープンモデルは詳細なトレーニング情報と共にリリースされるため、研究者や開発者はモデルの内部を変更できます。これにより、特定のタスクや研究分野に特化したモデルを微調整して作成することが可能になります。例としては、コード生成、数学的操作、生物学などがあります。 + +**コスト** - これらのモデルを使用およびデプロイする際のトークンあたりのコストは、独自モデルよりも低くなります。生成AIアプリケーションを構築する際には、これらのモデルを使用する際のパフォーマンスと価格のバランスを検討する必要があります。 + +![Model Cost](../../../translated_images/model-price.png?WT.473bad4fe5bdb7014798275047130c0949da1e4a3d6f379037bedf68ef1d5e42.ja.mc_id=academic-105485-koreyst) +出典: Artificial Analysis + +**柔軟性** - オープンモデルを使用することで、異なるモデルを使用したり、組み合わせたりする柔軟性が得られます。例えば、[HuggingChat Assistants](https://huggingface.co/chat?WT.mc_id=academic-105485-koreyst)では、ユーザーがユーザーインターフェースで使用するモデルを直接選択できます: + +![Choose Model](../../../translated_images/choose-model.png?WT.50da8a7caba083003bcf9f71017d17715f032acff67359c11c9886597ca3efdc.ja.mc_id=academic-105485-koreyst) + +## 異なるオープンモデルの探索 + +### Llama 2 + +[LLama2](https://huggingface.co/meta-llama?WT.mc_id=academic-105485-koreyst)は、Metaによって開発されたチャットベースのアプリケーションに最適化されたオープンモデルです。これは、大量の対話と人間のフィードバックを含む微調整方法によるものです。この方法により、モデルは人間の期待に合った結果をより多く生成し、より良いユーザー体験を提供します。 + +Llamaの微調整版の例としては、日本語に特化した[Japanese Llama](https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b?WT.mc_id=academic-105485-koreyst)や、ベースモデルの強化版である[Llama Pro](https://huggingface.co/TencentARC/LLaMA-Pro-8B?WT.mc_id=academic-105485-koreyst)があります。 + +### Mistral + +[Mistral](https://huggingface.co/mistralai?WT.mc_id=academic-105485-koreyst)は、高性能と効率性に重点を置いたオープンモデルです。Mixture-of-Expertsアプローチを使用しており、特定の入力に応じて選択される専門家モデルのグループを1つのシステムに組み合わせています。これにより、計算がより効果的になり、モデルは専門としている入力のみを処理します。 + +Mistralの微調整版の例としては、医療分野に焦点を当てた[BioMistral](https://huggingface.co/BioMistral/BioMistral-7B?text=Mon+nom+est+Thomas+et+mon+principal?WT.mc_id=academic-105485-koreyst)や、数学的計算を行う[OpenMath Mistral](https://huggingface.co/nvidia/OpenMath-Mistral-7B-v0.1-hf?WT.mc_id=academic-105485-koreyst)があります。 + +### Falcon + +[Falcon](https://huggingface.co/tiiuae?WT.mc_id=academic-105485-koreyst)は、技術革新研究所(**TII**)によって作成されたLLMです。Falcon-40Bは400億のパラメータでトレーニングされており、より少ない計算予算でGPT-3よりも優れた性能を示しています。これは、FlashAttentionアルゴリズムとマルチクエリ注意を使用して、推論時のメモリ要件を削減できるためです。この推論時間の短縮により、Falcon-40Bはチャットアプリケーションに適しています。 + +Falconの微調整版の例としては、オープンモデルに基づいて構築されたアシスタントである[OpenAssistant](https://huggingface.co/OpenAssistant/falcon-40b-sft-top1-560?WT.mc_id=academic-105485-koreyst)や、ベースモデルよりも高性能を発揮する[GPT4ALL](https://huggingface.co/nomic-ai/gpt4all-falcon?WT.mc_id=academic-105485-koreyst)があります。 + +## 選び方 + +オープンモデルを選ぶための唯一の答えはありません。良い出発点は、Azure AI Studioのタスク別フィルタ機能を使用することです。これにより、モデルがどのようなタスクに対してトレーニングされているかを理解することができます。Hugging Faceも、特定のメトリクスに基づいて最高のパフォーマンスを示すモデルを表示するLLMリーダーボードを維持しています。 + +異なるタイプのLLMを比較する際には、[Artificial Analysis](https://artificialanalysis.ai/?WT.mc_id=academic-105485-koreyst)も優れたリソースです: + +![Model Quality](../../../translated_images/model-quality.png?WT.bffdb0b01a3f3205153df83585941f90a153017f607dbcfad9cde5369764f203.ja.mc_id=academic-105485-koreyst) +出典: Artificial Analysis + +特定のユースケースに取り組む場合、同じ分野に焦点を当てた微調整版を検索することが効果的です。複数のオープンモデルを試して、あなたやユーザーの期待にどのように応えるかを確認することも良い実践です。 + +## 次のステップ + +オープンモデルの最も良い点は、すぐに作業を開始できることです。[Azure AI Studioモデルカタログ](https://ai.azure.com?WT.mc_id=academic-105485-koreyst)をチェックして、ここで紹介したモデルを含む特定のHugging Faceコレクションを見てみましょう。 + +## 学習はここで終わりません、旅を続けましょう + +このレッスンを完了した後は、[生成AI学習コレクション](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)をチェックして、生成AIの知識をさらに深めましょう! + +**免責事項**: +この文書は機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを期しておりますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご了承ください。原文の言語で書かれたオリジナルの文書を権威ある情報源とみなしてください。重要な情報については、プロの人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/17-ai-agents/README.md b/translations/ja/17-ai-agents/README.md new file mode 100644 index 000000000..d159d61f5 --- /dev/null +++ b/translations/ja/17-ai-agents/README.md @@ -0,0 +1,164 @@ +[![Open Source Models](../../../translated_images/17-lesson-banner.png?WT.d223296926e27d95f6b5a748e3f77ab9a1b669d4f9aebe608f926cbb44ea08a8.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson17-gh?WT.mc_id=academic-105485-koreyst) + +## はじめに + +AIエージェントは、生成AIにおけるエキサイティングな進展を表しており、大規模言語モデル(LLM)がアシスタントからアクションを実行できるエージェントへと進化することを可能にします。AIエージェントフレームワークは、開発者がLLMにツールと状態管理へのアクセスを提供するアプリケーションを作成することを可能にします。これらのフレームワークは、LLMが計画したアクションをユーザーや開発者が監視できるように可視性を向上させ、エクスペリエンス管理を改善します。 + +このレッスンでは、以下の領域をカバーします: + +- AIエージェントとは何かを理解する - AIエージェントとは正確には何なのか? +- 4つの異なるAIエージェントフレームワークを探る - それぞれのユニークな点は何か? +- これらのAIエージェントをさまざまなユースケースに適用する - いつAIエージェントを使用すべきか? + +## 学習目標 + +このレッスンを受けた後、次のことができるようになります: + +- AIエージェントが何であり、どのように使用できるかを説明する。 +- 一部の人気のあるAIエージェントフレームワークの違いを理解し、それらがどのように異なるかを理解する。 +- AIエージェントがどのように機能するかを理解し、それを使ってアプリケーションを構築する。 + +## AIエージェントとは? + +AIエージェントは、生成AIの世界で非常にエキサイティングな分野です。この興奮とともに、用語やその適用に関する混乱が生じることがあります。AIエージェントと呼ばれるツールの大部分を含めてシンプルにするために、次の定義を使用します: + +AIエージェントは、大規模言語モデル(LLM)が**状態**と**ツール**へのアクセスを提供することによりタスクを実行できるようにします。 + +![エージェントモデル](../../../translated_images/what-agent.png?WT.96b2eb171bd613cd0652fb5a2c1f488c80fde8d3405db76d780603041a415cb3.ja.mc_id=academic-105485-koreyst) + +これらの用語を定義しましょう: + +**大規模言語モデル** - このコース全体で言及されているモデルで、GPT-3.5、GPT-4、Llama-2などです。 + +**状態** - これは、LLMが作業しているコンテキストを指します。LLMは、過去のアクションと現在のコンテキストを使用して、次のアクションの意思決定を導きます。AIエージェントフレームワークは、開発者がこのコンテキストをより簡単に維持できるようにします。 + +**ツール** - ユーザーが要求したタスクを完了するために、LLMが計画したタスクを実行するためには、ツールへのアクセスが必要です。ツールの例としては、データベース、API、外部アプリケーション、さらには別のLLMなどがあります! + +これらの定義が、これからの学習に役立つ基礎を提供することを願っています。次に、いくつかの異なるAIエージェントフレームワークを探ってみましょう: + +## LangChainエージェント + +[LangChainエージェント](https://python.langchain.com/docs/how_to/#agents?WT.mc_id=academic-105485-koreyst)は、上記の定義の実装です。 + +**状態**を管理するために、`AgentExecutor`と呼ばれる組み込み関数を使用します。これは、定義された`agent`と利用可能な`tools`を受け入れます。 + +`Agent Executor`は、チャット履歴を保存して、チャットのコンテキストを提供します。 + +![Langchainエージェント](../../../translated_images/langchain-agents.png?WT.311575a86262a6e33490477b281688373d96e3392dbfe3094965470531a9f111.ja.mc_id=academic-105485-koreyst) + +LangChainは、LLMがアクセスできるようにするためにアプリケーションにインポートできる[ツールのカタログ](https://integrations.langchain.com/tools?WT.mc_id=academic-105485-koreyst)を提供しています。これらはコミュニティとLangChainチームによって作成されています。 + +これらのツールを定義して、`Agent Executor`に渡すことができます。 + +AIエージェントについて話すときに重要なもう一つの側面は可視性です。アプリケーション開発者にとって、LLMがどのツールを使用しているのか、なぜそれを使用しているのかを理解することが重要です。そのために、LangChainのチームはLangSmithを開発しました。 + +## AutoGen + +次に紹介するAIエージェントフレームワークは[AutoGen](https://microsoft.github.io/autogen/?WT.mc_id=academic-105485-koreyst)です。AutoGenの主な焦点は会話です。エージェントは**会話可能**であり、**カスタマイズ可能**です。 + +**会話可能 -** LLMは、タスクを完了するために別のLLMと会話を開始し、続けることができます。これは、`AssistantAgents`を作成し、特定のシステムメッセージを与えることで実行されます。 + +```python + +autogen.AssistantAgent( name="Coder", llm_config=llm_config, ) pm = autogen.AssistantAgent( name="Product_manager", system_message="Creative in software product ideas.", llm_config=llm_config, ) + +``` + +**カスタマイズ可能** - エージェントはLLMとしてだけでなく、ユーザーやツールとしても定義できます。開発者として、タスクを完了するためにフィードバックを受け取る責任を持つ`UserProxyAgent`を定義できます。このフィードバックは、タスクの実行を続行するか停止するかのどちらかです。 + +```python +user_proxy = UserProxyAgent(name="user_proxy") +``` + +### 状態とツール + +状態を変更し管理するために、アシスタントエージェントはPythonコードを生成してタスクを完了します。 + +プロセスの例を以下に示します: + +![AutoGen](../../../translated_images/autogen.png?WT.45c9474fbd6109577f4363559f022554e796000ea2d677b80021b00e6ca0d869.ja.mc_id=academic-105485-koreyst) + +#### システムメッセージで定義されたLLM + +```python +system_message="For weather related tasks, only use the functions you have been provided with. Reply TERMINATE when the task is done." +``` + +このシステムメッセージは、この特定のLLMに対してタスクに関連する機能を指示します。AutoGenでは、異なるシステムメッセージを持つ複数のAssistantAgentsを定義することができます。 + +#### ユーザーによってチャットが開始される + +```python +user_proxy.initiate_chat( chatbot, message="I am planning a trip to NYC next week, can you help me pick out what to wear? ", ) + +``` + +このuser_proxy(ヒューマン)からのメッセージが、エージェントが実行すべき可能性のある機能を探るプロセスを開始します。 + +#### 機能が実行される + +```bash +chatbot (to user_proxy): + +***** Suggested tool Call: get_weather ***** Arguments: {"location":"New York City, NY","time_periond:"7","temperature_unit":"Celsius"} ******************************************************** -------------------------------------------------------------------------------- + +>>>>>>>> EXECUTING FUNCTION get_weather... user_proxy (to chatbot): ***** Response from calling function "get_weather" ***** 112.22727272727272 EUR **************************************************************** + +``` + +最初のチャットが処理されると、エージェントは呼び出すべきツールを提案します。この場合、それは`get_weather`. Depending on your configuration, this function can be automatically executed and read by the Agent or can be executed based on user input. + +You can find a list of [AutoGen code samples](https://microsoft.github.io/autogen/docs/Examples/?WT.mc_id=academic-105485-koreyst) to further explore how to get started building. + +## Taskweaver + +The next agent framework we will explore is [Taskweaver](https://microsoft.github.io/TaskWeaver/?WT.mc_id=academic-105485-koreyst). It is known as a "code-first" agent because instead of working strictly with `strings` , it can work with DataFrames in Python. This becomes extremely useful for data analysis and generation tasks. This can be things like creating graphs and charts or generating random numbers. + +### State and Tools + +To manage the state of the conversation, TaskWeaver uses the concept of a `Planner`. The `Planner` is a LLM that takes the request from the users and maps out the tasks that need to be completed to fulfill this request. + +To complete the tasks the `Planner` is exposed to the collection of tools called `Plugins`と呼ばれる機能です。これらはPythonクラスまたは一般的なコードインタープリタである可能性があります。これらのプラグインは埋め込みとして保存され、LLMが正しいプラグインをよりよく検索できるようにします。 + +![Taskweaver](../../../translated_images/taskweaver.png?WT.c5d336793941a5af0d2489ad6d88a03f09557bd5ca68a954f1ddaa3d9f1ecc3b.ja.mc_id=academic-105485-koreyst) + +異常検出を処理するプラグインの例を以下に示します: + +```python +class AnomalyDetectionPlugin(Plugin): def __call__(self, df: pd.DataFrame, time_col_name: str, value_col_name: str): +``` + +コードは実行前に検証されます。Taskweaverでコンテキストを管理するためのもう一つの機能は、会話の`experience`. Experience allows for the context of a conversation to be stored over to the long term in a YAML file. This can be configured so that the LLM improves over time on certain tasks given that it is exposed to prior conversations. + +## JARVIS + +The last agent framework we will explore is [JARVIS](https://github.com/microsoft/JARVIS?tab=readme-ov-file?WT.mc_id=academic-105485-koreyst). What makes JARVIS unique is that it uses an LLM to manage the `state`と`tools`が他のAIモデルであることです。各AIモデルは、物体検出、転写、画像キャプション生成などの特定のタスクを実行する専門モデルです。 + +![JARVIS](../../../translated_images/jarvis.png?WT.f12468c52a0c4848aeed51606a0e53a36eb38c65cc6c821597ea4dcaad03d1a3.ja.mc_id=academic-105485-koreyst) + +LLMは、一般的な目的のモデルとして、ユーザーからのリクエストを受け取り、特定のタスクとタスクを完了するために必要な引数/データを識別します。 + +```python +[{"task": "object-detection", "id": 0, "dep": [-1], "args": {"image": "e1.jpg" }}] +``` + +その後、LLMはリクエストを、JSONなどの専門AIモデルが解釈できる形式にフォーマットします。AIモデルがタスクに基づいて予測を返した後、LLMはその応答を受け取ります。 + +タスクを完了するために複数のモデルが必要な場合、それらのモデルからの応答を解釈し、それらを統合してユーザーへの応答を生成します。 + +以下の例は、ユーザーが画像内の物体の説明と数を要求したときの動作を示しています: + +## 課題 + +AIエージェントの学習を続けるために、AutoGenを使用して以下を構築できます: + +- 教育系スタートアップの異なる部門とのビジネス会議をシミュレートするアプリケーション。 +- LLMに異なるペルソナと優先事項を理解させるシステムメッセージを作成し、ユーザーが新しい製品アイデアを提案できるようにする。 +- LLMは、その後、各部門からのフォローアップ質問を生成し、提案や製品アイデアを洗練し、改善する。 + +## 学習はここで終わりません。旅を続けましょう + +このレッスンを終えた後、[生成AI学習コレクション](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)をチェックして、生成AIの知識をさらに深めてください! + +**免責事項**: +この文書は機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご了承ください。元の言語での文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当社は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/18-fine-tuning/README.md b/translations/ja/18-fine-tuning/README.md new file mode 100644 index 000000000..6dbe292e6 --- /dev/null +++ b/translations/ja/18-fine-tuning/README.md @@ -0,0 +1,100 @@ +[![Open Source Models](../../../translated_images/18-lesson-banner.png?WT.73626ba24f59a39704c5137a18c9de8b23179ea0e1ace42c97e02f0310adcee0.ja.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson18-gh?WT.mc_id=academic-105485-koreyst) + +# LLMのファインチューニング + +大規模言語モデルを使用して生成AIアプリケーションを構築することには、新しい課題が伴います。主な問題は、特定のユーザーリクエストに対してモデルが生成するコンテンツの品質(正確性と関連性)を確保することです。前回のレッスンでは、既存のモデルへのプロンプト入力を変更することでこの問題を解決しようとするプロンプトエンジニアリングやリトリーバル拡張生成といった技術について説明しました。 + +今日のレッスンでは、モデル自体を追加データで再訓練することでこの課題に対処しようとする**ファインチューニング**という第三の技術について説明します。それでは、詳細を見ていきましょう。 + +## 学習目標 + +このレッスンでは、事前訓練された言語モデルのファインチューニングの概念を紹介し、このアプローチの利点と課題を探り、生成AIモデルのパフォーマンスを向上させるためにいつどのようにファインチューニングを使用するかについてのガイダンスを提供します。 + +このレッスンを終えると、次の質問に答えられるようになります: + +- 言語モデルのファインチューニングとは何ですか? +- ファインチューニングはいつ、なぜ有用なのですか? +- 事前訓練されたモデルをどのようにファインチューニングできますか? +- ファインチューニングの限界は何ですか? + +準備はいいですか?始めましょう。 + +## イラストガイド + +本題に入る前にカバーする内容の全体像を知りたいですか?このレッスンの学習の旅を説明するイラストガイドをチェックしてください - ファインチューニングの核心概念と動機を学ぶことから、プロセスと実行のベストプラクティスを理解することまで。このトピックは探求にとても面白いので、自分で学ぶ旅をサポートするための追加リンクを提供する[リソース](./RESOURCES.md?WT.mc_id=academic-105485-koreyst)ページを忘れずにチェックしてください! + +![Illustrated Guide to Fine Tuning Language Models](../../../translated_images/18-fine-tuning-sketchnote.png?WT.6cca0798e805b67b1f22beaba7478f40066f3a2879380a0e27dbc70ac1dc7832.ja.mc_id=academic-105485-koreyst) + +## 言語モデルのファインチューニングとは何ですか? + +定義上、大規模言語モデルはインターネットを含む多様なソースからの大量のテキストで事前訓練されています。前回のレッスンで学んだように、ユーザーの質問(「プロンプト」)に対するモデルの応答の品質を向上させるために、_プロンプトエンジニアリング_や_リトリーバル拡張生成_のような技術が必要です。 + +一般的なプロンプトエンジニアリング技術は、_指示_(明示的なガイダンス)を提供するか、_いくつかの例を示す_(暗黙のガイダンス)ことで応答に期待されるものについてモデルにより多くのガイダンスを与えることを含みます。これは_少数ショット学習_と呼ばれますが、2つの制限があります: + +- モデルのトークン制限が与えられる例の数を制限し、その効果を制限する可能性があります。 +- モデルのトークンコストが、すべてのプロンプトに例を追加するのを高価にし、柔軟性を制限する可能性があります。 + +ファインチューニングは、事前訓練されたモデルを取り、新しいデータで再訓練して特定のタスクのパフォーマンスを向上させる一般的な機械学習システムの実践です。言語モデルの文脈では、特定のタスクやアプリケーションドメインのためにキュレートされた一連の例を使って事前訓練されたモデルをファインチューニングし、その特定のタスクやドメインに対してより正確で関連性のある**カスタムモデル**を作成できます。ファインチューニングの副次的な利点は、少数ショット学習に必要な例の数を減らし、トークンの使用と関連コストを削減できることです。 + +## モデルをいつ、なぜファインチューニングするべきですか? + +_この_コンテキストでファインチューニングについて話すとき、私たちは**監督された**ファインチューニングを指しており、再訓練は元のトレーニングデータセットの一部ではなかった**新しいデータを追加すること**によって行われます。これは、元のデータで異なるハイパーパラメータを使用してモデルを再訓練する非監督ファインチューニングアプローチとは異なります。 + +覚えておくべき重要なことは、ファインチューニングは望ましい結果を得るためにある程度の専門知識を必要とする高度な技術であるということです。誤って行うと、期待される改善が得られないか、対象ドメインのモデルのパフォーマンスを悪化させる可能性があります。 + +したがって、言語モデルを「どのように」ファインチューニングするかを学ぶ前に、この方法を選ぶべき「理由」とファインチューニングのプロセスを開始する「タイミング」を知る必要があります。まず次の質問を自問してください: + +- **ユースケース**: ファインチューニングのための_ユースケース_は何ですか?現在の事前訓練されたモデルのどの側面を改善したいですか? +- **代替案**: 望ましい結果を達成するために_他の技術_を試しましたか?それらを使用して比較のためのベースラインを作成してください。 + - プロンプトエンジニアリング: 関連するプロンプト応答の例を用いた少数ショットプロンプトなどの技術を試してください。応答の品質を評価します。 + - リトリーバル拡張生成: データを検索して取得したクエリ結果でプロンプトを補強することを試みてください。応答の品質を評価します。 +- **コスト**: ファインチューニングのコストを特定しましたか? + - チューニング可能性 - 事前訓練されたモデルがファインチューニング可能ですか? + - 努力 - トレーニングデータの準備、モデルの評価と改善のための努力。 + - コンピュート - ファインチューニングジョブを実行し、ファインチューニングされたモデルをデプロイするためのコンピュート。 + - データ - ファインチューニングの影響を与えるのに十分な品質の例へのアクセス。 +- **利益**: ファインチューニングの利益を確認しましたか? + - 品質 - ファインチューニングされたモデルがベースラインを上回りましたか? + - コスト - プロンプトを簡素化することでトークン使用量を削減しますか? + - 拡張性 - 新しいドメインにベースモデルを再利用できますか? + +これらの質問に答えることで、ファインチューニングがあなたのユースケースにとって正しいアプローチかどうかを決定することができます。理想的には、利益がコストを上回る場合にのみアプローチが有効です。進めることを決定したら、事前訓練されたモデルをどのようにファインチューニングできるかを考える時です。 + +意思決定プロセスについてさらに洞察を得たいですか?[ファインチューニングするかしないか](https://www.youtube.com/watch?v=0Jo-z-MFxJs)を見てください。 + +## 事前訓練されたモデルをどのようにファインチューニングできますか? + +事前訓練されたモデルをファインチューニングするには、以下が必要です: + +- ファインチューニングするための事前訓練されたモデル +- ファインチューニングに使用するデータセット +- ファインチューニングジョブを実行するためのトレーニング環境 +- ファインチューニングされたモデルをデプロイするためのホスティング環境 + +## ファインチューニングの実践 + +以下のリソースは、選択されたモデルとキュレートされたデータセットを使用した実際の例をステップバイステップで説明するチュートリアルを提供します。これらのチュートリアルを進めるには、特定のプロバイダーのアカウントと、関連するモデルおよびデータセットへのアクセスが必要です。 + +| プロバイダー | チュートリアル | 説明 | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| OpenAI | [How to fine-tune chat models](https://github.com/openai/openai-cookbook/blob/main/examples/How_to_finetune_chat_models.ipynb?WT.mc_id=academic-105485-koreyst) | トレーニングデータを準備し、ファインチューニングジョブを実行し、推論にファインチューニングされたモデルを使用することで、特定のドメイン(「レシピアシスタント」)の`gpt-35-turbo`をファインチューニングする方法を学びます。 | +| Azure OpenAI | [GPT 3.5 Turbo fine-tuning tutorial](https://learn.microsoft.com/azure/ai-services/openai/tutorials/fine-tune?tabs=python-new%2Ccommand-line?WT.mc_id=academic-105485-koreyst) | トレーニングデータを作成してアップロードし、ファインチューニングジョブを実行する手順を踏むことで、`gpt-35-turbo-0613`モデルを**Azure上で**ファインチューニングする方法を学びます。デプロイして新しいモデルを使用します。 | +| Hugging Face | [Fine-tuning LLMs with Hugging Face](https://www.philschmid.de/fine-tune-llms-in-2024-with-trl?WT.mc_id=academic-105485-koreyst) | このブログ投稿では、[transformers](https://huggingface.co/docs/transformers/index?WT.mc_id=academic-105485-koreyst)ライブラリと[Transformer Reinforcement Learning (TRL)](https://huggingface.co/docs/trl/index?WT.mc_id=academic-105485-koreyst)を使用して、オープン[データセット](https://huggingface.co/docs/datasets/index?WT.mc_id=academic-105485-koreyst)で_open LLM_(例:`CodeLlama 7B`)をファインチューニングする方法を紹介します。 | +| | | | +| 🤗 AutoTrain | [Fine-tuning LLMs with AutoTrain](https://github.com/huggingface/autotrain-advanced/?WT.mc_id=academic-105485-koreyst) | AutoTrain(またはAutoTrain Advanced)は、Hugging Faceによって開発されたPythonライブラリで、LLMファインチューニングを含む多くの異なるタスクのファインチューニングを可能にします。AutoTrainはコード不要のソリューションであり、ファインチューニングは自身のクラウド、Hugging Face Spaces、またはローカルで行うことができます。ウェブベースのGUI、CLI、yaml設定ファイルを使ったトレーニングの両方をサポートしています。 | +| | | | + +## 課題 + +上記のチュートリアルの1つを選択し、それを進めてください。_これらのチュートリアルのバージョンをこのリポジトリのJupyterノートブックで参照用に複製する場合があります。最新バージョンを取得するには、直接オリジナルソースを使用してください。_ + +## 素晴らしい仕事です!学習を続けましょう。 + +このレッスンを完了した後は、[Generative AI Learningコレクション](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)をチェックして、生成AIの知識をさらに高めましょう! + +おめでとうございます!!このコースのv2シリーズの最終レッスンを完了しました!学習と構築を続けてください。**[RESOURCES](RESOURCES.md?WT.mc_id=academic-105485-koreyst)ページをチェックして、このトピックに関する追加の提案のリストを見てください。 + +私たちのv1シリーズのレッスンも、より多くの課題とコンセプトで更新されました。知識をリフレッシュするために少し時間を取ってください。そして、これらのレッスンをコミュニティのために改善するために、[質問やフィードバックを共有](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst)してください。 + +**免責事項**: +この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを期しておりますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご了承ください。原文はその言語での正式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用から生じる誤解や誤訳について、当方は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/18-fine-tuning/RESOURCES.md b/translations/ja/18-fine-tuning/RESOURCES.md new file mode 100644 index 000000000..9e25f84f4 --- /dev/null +++ b/translations/ja/18-fine-tuning/RESOURCES.md @@ -0,0 +1,40 @@ +# 自己学習のためのリソース + +このレッスンは、OpenAIとAzure OpenAIの主要なリソースを参考にして構築されています。以下は、自己学習の旅のための非包括的なリストです。 + +## 1. 主なリソース + +| タイトル/リンク | 説明 | +| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [Fine-tuning with OpenAI Models](https://platform.openai.com/docs/guides/fine-tuning?WT.mc_id=academic-105485-koreyst) | 微調整は、プロンプトに収まるより多くの例で学習することで、コストを削減し、応答の質を向上させ、低遅延のリクエストを可能にします。**OpenAIから微調整の概要を取得してください。** | +| [What is Fine-Tuning with Azure OpenAI?](https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations#what-is-fine-tuning-with-azure-openai?WT.mc_id=academic-105485-koreyst) | **微調整とは何か(概念)**、なぜそれを検討すべきか(動機付けの問題)、どのデータを使用するか(トレーニング)、質を測定する方法を理解する | +| [Customize a model with fine-tuning](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython&pivots=programming-language-studio#continuous-fine-tuning?WT.mc_id=academic-105485-koreyst) | Azure OpenAI Serviceを使用すると、微調整を使用して個人のデータセットにモデルを合わせることができます。Azure AI Studio、Python SDK、またはREST APIを使用して**どのように微調整するか(プロセス)**を学ぶことができます。 | +| [Recommendations for LLM fine-tuning](https://learn.microsoft.com/ai/playbook/technology-guidance/generative-ai/working-with-llms/fine-tuning-recommend?WT.mc_id=academic-105485-koreyst) | LLMは特定のドメイン、タスク、データセットでうまく機能しない場合や、不正確または誤解を招く出力を生成する場合があります。**この問題に対する可能な解決策として微調整を検討すべき時期はいつですか?** | +| [Continuous Fine Tuning](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython&pivots=programming-language-studio#continuous-fine-tuning?WT.mc_id=academic-105485-koreyst) | 連続微調整は、すでに微調整されたモデルをベースモデルとして選択し、新しいトレーニング例セットで**さらに微調整する**反復プロセスです。 | +| [Fine-tuning and function calling](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning-functions?WT.mc_id=academic-105485-koreyst) | **関数呼び出しの例を使用して**モデルを微調整することで、より正確で一貫した出力を得ることができ、同様のフォーマットの応答とコスト削減を実現できます。 | +| [Fine-tuning Models: Azure OpenAI Guidance](https://learn.microsoft.com/azure/ai-services/openai/concepts/models#fine-tuning-models?WT.mc_id=academic-105485-koreyst) | Azure OpenAIで**どのモデルが微調整可能か**、そしてそれらがどの地域で利用可能かを理解するためにこの表を参照してください。必要に応じてトークン制限やトレーニングデータの有効期限も確認してください。 | +| [To Fine Tune or Not To Fine Tune? That is the Question](https://learn.microsoft.com/shows/ai-show/to-fine-tune-or-not-fine-tune-that-is-the-question?WT.mc_id=academic-105485-koreyst) | この30分の**2023年10月**のAIショーエピソードでは、微調整を行うかどうかの決定を助けるための利点、欠点、実践的な洞察を議論します。 | +| [Getting Started With LLM Fine-Tuning](https://learn.microsoft.com/ai/playbook/technology-guidance/generative-ai/working-with-llms/fine-tuning?WT.mc_id=academic-105485-koreyst) | この**AIプレイブック**リソースは、データ要件、フォーマット、ハイパーパラメータの微調整、および知っておくべき課題/制限について説明します。 | +| **チュートリアル**: [Azure OpenAI GPT3.5 Turbo Fine-Tuning](https://learn.microsoft.com/azure/ai-services/openai/tutorials/fine-tune?tabs=python%2Ccommand-line?WT.mc_id=academic-105485-koreyst) | サンプルの微調整データセットを作成し、微調整の準備をし、微調整ジョブを作成し、Azureで微調整されたモデルをデプロイする方法を学びます。 | +| **チュートリアル**: [Fine-tune a Llama 2 model in Azure AI Studio](https://learn.microsoft.com/azure/ai-studio/how-to/fine-tune-model-llama?WT.mc_id=academic-105485-koreyst) | Azure AI Studioでは、_ローコード開発者に適したUIベースのワークフローを使用して_、大規模言語モデルを個人のデータセットに合わせることができます。この例を参照してください。 | +| **チュートリアル**:[Fine-tune Hugging Face models for a single GPU on Azure](https://learn.microsoft.com/azure/databricks/machine-learning/train-model/huggingface/fine-tune-model?WT.mc_id=academic-105485-koreyst) | この記事では、Hugging Face transformersライブラリを使用して、Azure DataBricks + Hugging Face Trainerライブラリで単一GPUでHugging Faceモデルを微調整する方法を説明します。 | +| **トレーニング:** [Fine-tune a foundation model with Azure Machine Learning](https://learn.microsoft.com/training/modules/finetune-foundation-model-with-azure-machine-learning/?WT.mc_id=academic-105485-koreyst) | Azure Machine Learningのモデルカタログには、特定のタスクに合わせて微調整できる多くのオープンソースモデルが提供されています。このモジュールは[AzureML生成AI学習パス](https://learn.microsoft.com/training/paths/work-with-generative-models-azure-machine-learning/?WT.mc_id=academic-105485-koreyst)から試してみてください。 | +| **チュートリアル:** [Azure OpenAI Fine-Tuning](https://docs.wandb.ai/guides/integrations/azure-openai-fine-tuning?WT.mc_id=academic-105485-koreyst) | W&Bを使用してMicrosoft AzureでGPT-3.5またはGPT-4モデルを微調整することで、モデルのパフォーマンスの詳細な追跡と分析が可能になります。このガイドは、OpenAI微調整ガイドの概念を拡張し、Azure OpenAI用の具体的なステップと機能を提供します。 | +| | | + +## 2. 二次リソース + +このセクションには、探求する価値のある追加のリソースが含まれていますが、このレッスンではカバーできなかったものです。これらは将来のレッスンで取り上げられるか、または後日、二次課題オプションとして取り上げられる可能性があります。現時点では、これらを使用してこのトピックに関する自身の専門知識と知識を構築してください。 + +| タイトル/リンク | 説明 | +| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **OpenAI Cookbook**: [Data preparation and analysis for chat model fine-tuning](https://cookbook.openai.com/examples/chat_finetuning_data_prep?WT.mc_id=academic-105485-koreyst) | このノートブックは、チャットモデルの微調整に使用されるチャットデータセットを前処理および分析するためのツールとして機能します。フォーマットエラーをチェックし、基本的な統計を提供し、微調整コストのためのトークン数を推定します。参照: [gpt-3.5-turboの微調整方法](https://platform.openai.com/docs/guides/fine-tuning?WT.mc_id=academic-105485-koreyst)。 | +| **OpenAI Cookbook**: [Fine-Tuning for Retrieval Augmented Generation (RAG) with Qdrant](https://cookbook.openai.com/examples/fine-tuned_qa/ft_retrieval_augmented_generation_qdrant?WT.mc_id=academic-105485-koreyst) | このノートブックの目的は、OpenAIモデルをRetrieval Augmented Generation (RAG)のために微調整する方法の包括的な例を紹介することです。また、QdrantとFew-Shot Learningを統合して、モデルのパフォーマンスを向上させ、誤情報を減らします。 | +| **OpenAI Cookbook**: [Fine-tuning GPT with Weights & Biases](https://cookbook.openai.com/examples/third_party/gpt_finetuning_with_wandb?WT.mc_id=academic-105485-koreyst) | Weights & Biases (W&B)はAI開発者向けプラットフォームで、モデルのトレーニング、微調整、基盤モデルの活用のためのツールを提供しています。最初に[OpenAI微調整](https://docs.wandb.ai/guides/integrations/openai?WT.mc_id=academic-105485-koreyst)ガイドを読み、次にCookbookの演習を試してみてください。 | +| **Community Tutorial** [Phinetuning 2.0](https://huggingface.co/blog/g-ronimo/phinetuning?WT.mc_id=academic-105485-koreyst) - fine-tuning for Small Language Models | Microsoftの新しい小型モデルである[Phi-2](https://www.microsoft.com/research/blog/phi-2-the-surprising-power-of-small-language-models/?WT.mc_id=academic-105485-koreyst)を紹介します。このチュートリアルでは、Phi-2を微調整する方法を説明し、ユニークなデータセットを構築し、QLoRAを使用してモデルを微調整する方法を示します。 | +| **Hugging Face Tutorial** [How to Fine-Tune LLMs in 2024 with Hugging Face](https://www.philschmid.de/fine-tune-llms-in-2024-with-trl?WT.mc_id=academic-105485-koreyst) | このブログ投稿では、Hugging Face TRL、Transformers、データセットを使用して2024年にオープンなLLMを微調整する方法を説明します。ユースケースを定義し、開発環境をセットアップし、データセットを準備し、モデルを微調整し、テスト・評価し、最終的に本番環境にデプロイします。 | +| **Hugging Face: [AutoTrain Advanced](https://github.com/huggingface/autotrain-advanced?WT.mc_id=academic-105485-koreyst)** | [最先端の機械学習モデル](https://twitter.com/abhi1thakur/status/1755167674894557291?WT.mc_id=academic-105485-koreyst)のトレーニングとデプロイメントをより迅速かつ簡単に実現します。このリポジトリには、YouTubeビデオガイダンス付きのColabフレンドリーなチュートリアルが含まれており、微調整が可能です。**最近の[ローカルファースト](https://twitter.com/abhi1thakur/status/1750828141805777057?WT.mc_id=academic-105485-koreyst)アップデートを反映しています**。[AutoTrainのドキュメント](https://huggingface.co/autotrain?WT.mc_id=academic-105485-koreyst)をお読みください。 | +| | | + +**免責事項**: +この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を期しておりますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご了承ください。元の言語での文書を権威ある情報源として考慮すべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用から生じる誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/19-slm/README.md b/translations/ja/19-slm/README.md new file mode 100644 index 000000000..5f1581f57 --- /dev/null +++ b/translations/ja/19-slm/README.md @@ -0,0 +1,206 @@ +```markdown +# 初心者向け生成AIのための小型言語モデル入門 + +生成AIは、新しいコンテンツを生成できるシステムを作成することに焦点を当てた人工知能の魅力的な分野です。このコンテンツは、テキストや画像から音楽、さらには仮想環境全体にまで及びます。生成AIの最も興味深い応用の1つは、言語モデルの領域にあります。 + +## 小型言語モデルとは何ですか? + +小型言語モデル(SLM)は、大型言語モデル(LLM)の縮小版を表し、LLMの多くのアーキテクチャの原則と技術を活用しながら、計算の負荷を大幅に削減しています。SLMは、人間のようなテキストを生成するように設計された言語モデルのサブセットです。GPT-4のような大規模なモデルとは異なり、SLMはよりコンパクトで効率的であり、計算リソースが限られているアプリケーションに理想的です。サイズが小さいにもかかわらず、さまざまなタスクを実行できます。通常、SLMはLLMを圧縮または蒸留することによって構築され、元のモデルの機能と言語能力のかなりの部分を保持することを目指しています。このモデルサイズの削減により、全体的な複雑さが減少し、SLMはメモリ使用量と計算要件の両方の観点でより効率的になります。これらの最適化にもかかわらず、SLMは次のような幅広い自然言語処理(NLP)タスクを実行できます: + +- テキスト生成:一貫性のある文脈に適した文や段落を作成する。 +- テキスト補完:与えられたプロンプトに基づいて文を予測し、補完する。 +- 翻訳:テキストをある言語から別の言語に変換する。 +- 要約:長いテキストを短く消化しやすい要約に凝縮する。 + +ただし、パフォーマンスや理解の深さに関しては、より大きなモデルと比較していくつかのトレードオフがあります。 + +## 小型言語モデルはどのように機能しますか? + +SLMは大量のテキストデータで訓練されます。訓練中に、言語のパターンと構造を学習し、文法的に正しく文脈に適したテキストを生成できるようになります。訓練プロセスには以下が含まれます: + +- データ収集:さまざまなソースからの大量のテキストデータを収集する。 +- 前処理:データをクリーンアップし、訓練に適した形式に整理する。 +- 訓練:機械学習アルゴリズムを使用して、モデルにテキストを理解し生成する方法を教える。 +- 微調整:特定のタスクでのパフォーマンスを向上させるためにモデルを調整する。 + +SLMの開発は、モバイルデバイスやエッジコンピューティングプラットフォームなど、リソースが制約された環境に展開できるモデルの必要性の高まりと一致しています。効率に焦点を当てることで、SLMはパフォーマンスとアクセシビリティのバランスを取り、さまざまなドメインでの幅広いアプリケーションを可能にします。 + +![slm](../../../translated_images/slm.png?WT.85221b66c3ce1b5e21e84c783c7ba31848501cd5c9557bb7fdf13173edafd675.ja.mc_id=academic-105485-koreyst) + +## 学習目標 + +このレッスンでは、SLMの知識を紹介し、Microsoft Phi-3と組み合わせてテキストコンテンツ、ビジョン、MoEの異なるシナリオを学びます。このレッスンの終わりまでに、次の質問に答えられるようになることを目指します: + +- SLMとは何か +- SLMとLLMの違いは何か +- Microsoft Phi-3/3.5ファミリーとは何か +- Microsoft Phi-3/3.5ファミリーをどのように推論するか + +準備はいいですか?始めましょう。 + +## 大型言語モデル(LLM)と小型言語モデル(SLM)の違い + +LLMとSLMの両方は、確率的機械学習の基本原則に基づいて構築されており、アーキテクチャ設計、訓練手法、データ生成プロセス、およびモデル評価技術において類似したアプローチを採用しています。しかし、これら2つのモデルタイプを区別するいくつかの重要な要因があります。 + +## 小型言語モデルの応用 + +SLMは、次のような幅広い応用があります: + +- チャットボット:カスタマーサポートを提供し、ユーザーと会話形式で交流する。 +- コンテンツ作成:ライターを支援してアイデアを生成したり、記事全体を執筆したりする。 +- 教育:学生の執筆課題を支援したり、新しい言語を学ぶのを助けたりする。 +- アクセシビリティ:テキスト読み上げシステムなど、障害を持つ個人のためのツールを作成する。 + +**サイズ** + +LLMとSLMの主な違いは、モデルの規模にあります。ChatGPT(GPT-4)のようなLLMは、推定1.76兆のパラメータを持つことができるのに対し、Mistral 7BのようなオープンソースのSLMは、はるかに少ない約70億のパラメータで設計されています。この差異は主にモデルアーキテクチャと訓練プロセスの違いによるものです。たとえば、ChatGPTはエンコーダデコーダフレームワーク内で自己注意メカニズムを使用するのに対し、Mistral 7Bはスライディングウィンドウ注意を使用し、デコーダのみのモデルでより効率的な訓練を可能にしています。このアーキテクチャの違いは、これらのモデルの複雑さとパフォーマンスに深い影響を与えています。 + +**理解** + +SLMは特定のドメイン内でのパフォーマンスを最適化するために通常設計されており、非常に専門的ですが、複数の知識分野にわたる広範な文脈理解を提供する能力においては限られている可能性があります。対照的に、LLMはより包括的なレベルで人間のような知性をシミュレートすることを目指しています。広範かつ多様なデータセットで訓練されたLLMは、さまざまなドメインで優れたパフォーマンスを発揮するように設計されており、より大きな汎用性と適応性を提供します。したがって、LLMは自然言語処理やプログラミングなど、より広範な下流タスクに適しています。 + +**計算** + +LLMの訓練と展開はリソース集約型のプロセスであり、通常、大規模なGPUクラスターを含む大規模な計算インフラストラクチャを必要とします。たとえば、ChatGPTのようなモデルをゼロから訓練するには、数千のGPUが長期間にわたって必要になることがあります。対照的に、パラメータ数が少ないSLMは、計算リソースの観点でよりアクセスしやすいです。Mistral 7Bのようなモデルは、適度なGPU機能を備えたローカルマシンで訓練および実行できますが、訓練には複数のGPUを数時間にわたって使用する必要があります。 + +**バイアス** + +バイアスは、主に訓練データの性質に起因するLLMの既知の問題です。これらのモデルは、インターネットからの生の公開データに依存することが多く、特定のグループを過小評価または誤って表現したり、誤ったラベルを導入したり、方言、地理的変動、文法規則に影響された言語バイアスを反映したりする可能性があります。さらに、LLMのアーキテクチャの複雑さは、注意深く微調整しないと気付かれないままバイアスを悪化させる可能性があります。一方、SLMはより制約されたドメイン固有のデータセットで訓練されるため、こうしたバイアスに対して本質的にあまり影響を受けにくいですが、それでも免れるわけではありません。 + +**推論** + +SLMのサイズが小さいため、推論速度において大きな利点があります。ローカルハードウェアで効率的に出力を生成でき、広範な並列処理を必要としません。対照的に、LLMはそのサイズと複雑さのために、許容できる推論時間を達成するために大量の並列計算リソースを必要とすることがよくあります。複数の同時ユーザーが存在すると、特に大規模に展開された場合、LLMの応答時間がさらに遅くなります。 + +要約すると、LLMとSLMはどちらも機械学習の基礎を共有していますが、モデルサイズ、リソース要件、文脈理解、バイアスへの感受性、および推論速度に関して大きく異なります。これらの違いは、それぞれのユースケースに対する適合性を反映しており、LLMはより汎用性があるがリソースを多く必要とし、SLMは特定のドメインにおける効率を提供し、計算要求が減少しています。 + +***注:この章では、Microsoft Phi-3 / 3.5を例にSLMを紹介します。*** + +## Phi-3 / Phi-3.5ファミリーの紹介 + +Phi-3 / 3.5ファミリーは主にテキスト、ビジョン、エージェント(MoE)アプリケーションシナリオを対象としています: + +### Phi-3 / 3.5 Instruct + +主にテキスト生成、チャット補完、コンテンツ情報抽出などを対象としています。 + +**Phi-3-mini** + +3.8Bの言語モデルはMicrosoft Azure AI Studio、Hugging Face、およびOllamaで利用可能です。Phi-3モデルは、同等またはより大きなサイズの言語モデルを主要なベンチマークで大幅に上回ります(以下のベンチマーク数値を参照、数値が高いほど良い)。Phi-3-miniは、サイズが2倍のモデルを上回り、Phi-3-smallおよびPhi-3-mediumはGPT-3.5を含むより大きなモデルを上回ります。 + +**Phi-3-small & medium** + +わずか7Bのパラメータで、Phi-3-smallはさまざまな言語、推論、コーディング、数学のベンチマークでGPT-3.5Tを上回ります。14Bのパラメータを持つPhi-3-mediumはこの傾向を続け、Gemini 1.0 Proを上回ります。 + +**Phi-3.5-mini** + +Phi-3-miniのアップグレードと考えることができます。パラメータは変わらないが、複数の言語(20以上の言語をサポート:アラビア語、中国語、チェコ語、デンマーク語、オランダ語、英語、フィンランド語、フランス語、ドイツ語、ヘブライ語、ハンガリー語、イタリア語、日本語、韓国語、ノルウェー語、ポーランド語、ポルトガル語、ロシア語、スペイン語、スウェーデン語、タイ語、トルコ語、ウクライナ語)をサポートする能力が向上し、長いコンテキストのサポートが強化されます。Phi-3.5-miniは、同じサイズの言語モデルを上回り、サイズが2倍のモデルと同等です。 + +### Phi-3 / 3.5 Vision + +Phi-3/3.5のInstructモデルをPhiの理解力と考えることができ、VisionはPhiに世界を理解するための目を与えます。 + +**Phi-3-Vision** + +Phi-3-visionはわずか4.2Bのパラメータで、Claude-3 HaikuやGemini 1.0 Pro Vなどのより大きなモデルを、一般的な視覚的推論タスク、OCR、テーブルや図の理解タスクで上回ります。 + +**Phi-3.5-Vision** + +Phi-3.5-VisionはPhi-3-Visionのアップグレードでもあり、複数の画像のサポートを追加しています。画像だけでなく動画も見ることができる視覚の向上と考えることができます。Phi-3.5-visionは、OCR、テーブルおよびチャートの理解タスクでClaude-3.5 SonnetやGemini 1.5 Flashなどのより大きなモデルを上回り、一般的な視覚知識推論タスクで同等です。マルチフレーム入力をサポートし、つまり複数の入力画像に対して推論を行います。 + +### Phi-3.5-MoE + +***Mixture of Experts(MoE)***は、モデルをはるかに少ない計算で事前訓練できるようにし、密集モデルと同じ計算予算でモデルまたはデータセットサイズを劇的に拡大できることを意味します。特に、MoEモデルは、事前訓練中に密集モデルと同等の品質をはるかに速く達成するべきです。Phi-3.5-MoEは16×3.8Bのエキスパートモジュールで構成されています。Phi-3.5-MoEは、わずか6.6Bのアクティブパラメータで、はるかに大きなモデルと同等の推論、言語理解、数学のレベルを達成します。 + +Phi-3/3.5ファミリーモデルをさまざまなシナリオに基づいて使用できます。LLMとは異なり、Phi-3/3.5-miniまたはPhi-3/3.5-Visionをエッジデバイスに展開できます。 + +## Phi-3/3.5ファミリーモデルの使用方法 + +Phi-3/3.5をさまざまなシナリオで使用することを希望しています。次に、さまざまなシナリオに基づいてPhi-3/3.5を使用します。 + +![phi3](../../../translated_images/phi3.png?WT.0d1077c4470f7b6eef536aba4426fa8df26762844164cc3883d455ab5251bad1.ja.mc_id=academic-105485-koreyst) + +### 推論の違い + +CloudのAPI + +**GitHub Models** + +GitHub Models +``` + +最も直接的な方法です。GitHub Modelsを通じてPhi-3/3.5-Instructモデルに迅速にアクセスできます。Azure AI Inference SDK / OpenAI SDKと組み合わせることで、コードを通じてAPIにアクセスし、Phi-3/3.5-Instruct呼び出しを完了することができます。また、Playgroundを通じて異なる効果をテストすることもできます。 - デモ: 中国語シナリオにおけるPhi-3-miniとPhi-3.5-miniの効果の比較 ![phi3](../../../translated_images/gh1.png?WT.6d1c7f5cd66199192bb0ec8bf56b27b8fdbb5bc46ba2a4f32023cc4ceb9f6494.ja.mc_id=academic-105485-koreyst) ![phi35](../../../translated_images/gh2.png?WT.3f28f8b48f74275bc8749ddd82aae8bf38ff461d2d66d437c291806aa930ffb1.ja.mc_id=academic-105485-koreyst) **Azure AI Studio** また、ビジョンとMoEモデルを使用したい場合は、Azure AI Studioを使用して呼び出しを完了することができます。興味がある方は、Phi-3 Cookbookを読んで、Azure AI Studioを通じてPhi-3/3.5 Instruct, Vision, MoEを呼び出す方法を学ぶことができます。[このリンクをクリック](https://github.com/microsoft/Phi-3CookBook/blob/main/md/02.QuickStart/AzureAIStudio_QuickStart.md?WT.mc_id=academic-105485-koreyst) **NVIDIA NIM** AzureやGitHubが提供するクラウドベースのモデルカタログソリューションに加えて、[Nivida NIM](https://developer.nvidia.com/nim?WT.mc_id=academic-105485-koreyst)を使用して関連する呼び出しを完了することもできます。NIVIDA NIMを訪れて、Phi-3/3.5 FamilyのAPI呼び出しを完了できます。NVIDIA NIM (NVIDIA Inference Microservices) は、クラウド、データセンター、ワークステーションなど、さまざまな環境でAIモデルを効率的に展開するために設計された加速推論マイクロサービスのセットです。NVIDIA NIMの主な機能は次のとおりです: - **展開の容易さ:** NIMはAIモデルを単一のコマンドで展開でき、既存のワークフローに簡単に統合できます。 - **最適化されたパフォーマンス:** NVIDIAの事前最適化された推論エンジン(TensorRTやTensorRT-LLMなど)を活用して、低レイテンシーと高スループットを実現します。 - **スケーラビリティ:** NIMはKubernetes上でのオートスケーリングをサポートし、さまざまなワークロードを効果的に処理できます。 - **セキュリティとコントロール:** 組織は、自社の管理インフラストラクチャ上でNIMマイクロサービスをセルフホスティングすることで、データとアプリケーションを制御できます。 - **標準API:** NIMは業界標準のAPIを提供し、チャットボットやAIアシスタントなどのAIアプリケーションの構築と統合を容易にします。NIMは、AIモデルの展開と運用を簡素化し、NVIDIA GPU上で効率的に実行されることを保証するNVIDIA AI Enterpriseの一部です。 - デモ: Nividia NIMを使用してPhi-3.5-Vision-APIを呼び出す [[このリンクをクリック](../../../19-slm/python/Phi-3-Vision-Nividia-NIM.ipynb)] ### ローカル環境でのPhi-3/3.5の推論 Phi-3やGPT-3のような言語モデルに関連する推論は、入力に基づいて応答や予測を生成するプロセスを指します。Phi-3にプロンプトや質問を提供すると、訓練されたニューラルネットワークを使用して、訓練されたデータのパターンと関係を分析することで、最も可能性の高い関連性のある応答を推論します。 **Hugging Face Transformer** Hugging Face Transformersは、自然言語処理(NLP)やその他の機械学習タスクのために設計された強力なライブラリです。以下はその主なポイントです: 1. **事前学習済みモデル:** テキスト分類、固有表現抽出、質問応答、要約、翻訳、テキスト生成など、さまざまなタスクに使用できる数千の事前学習済みモデルを提供します。 2. **フレームワークの相互運用性:** PyTorch、TensorFlow、JAXなど、複数のディープラーニングフレームワークをサポートしており、1つのフレームワークでモデルをトレーニングし、別のフレームワークで使用できます。 3. **マルチモーダル機能:** NLPに加えて、コンピュータビジョン(例:画像分類、物体検出)や音声処理(例:音声認識、音声分類)もサポートしています。 4. **使いやすさ:** モデルのダウンロードとファインチューニングを簡単に行えるAPIとツールを提供し、初心者と専門家の両方にアクセスしやすいです。 5. **コミュニティとリソース:** Hugging Faceには活気あるコミュニティと、ユーザーがライブラリを最大限に活用できるようにするための豊富なドキュメント、チュートリアル、ガイドがあります。[公式ドキュメント](https://huggingface.co/docs/transformers/index?WT.mc_id=academic-105485-koreyst)または[GitHubリポジトリ](https://github.com/huggingface/transformers?WT.mc_id=academic-105485-koreyst)。これは最も一般的に使用される方法ですが、GPUアクセラレーションも必要です。結局のところ、VisionやMoEのようなシーンは多くの計算を必要とし、量子化されていない場合、CPUでは非常に制限されます。 - デモ: Transformerを使用してPhi-3.5-Instuctを呼び出す [このリンクをクリック](../../../19-slm/python/phi35-instruct-demo.ipynb) - デモ: Transformerを使用してPhi-3.5-Visionを呼び出す[このリンクをクリック](../../../19-slm/python/phi35-vision-demo.ipynb) - デモ: Transformerを使用してPhi-3.5-MoEを呼び出す[このリンクをクリック](../../../19-slm/python/phi35_moe_demo.ipynb) **Ollama** [Ollama](https://ollama.com/?WT.mc_id=academic-105485-koreyst)は、大規模言語モデル(LLM)をローカルマシンで簡単に実行できるように設計されたプラットフォームです。Llama 3.1、Phi 3、Mistral、Gemma 2など、さまざまなモデルをサポートしています。このプラットフォームは、モデルの重み、設定、データを1つのパッケージにまとめることで、ユーザーが独自のモデルをカスタマイズして作成しやすくしています。OllamaはmacOS、Linux、Windowsで利用可能です。クラウドサービスに依存せずにLLMを実験または展開したい場合に最適なツールです。Ollamaは最も直接的な方法であり、次のステートメントを実行するだけです。 ```bash + +ollama run phi3.5 + +``` **ONNX Runtime for GenAI** [ONNX Runtime](https://github.com/microsoft/onnxruntime-genai?WT.mc_id=academic-105485-koreyst)は、クロスプラットフォームの推論およびトレーニングの機械学習アクセラレータです。ONNX Runtime for Generative AI (GENAI)は、さまざまなプラットフォームで生成AIモデルを効率的に実行するのに役立つ強力なツールです。 ## ONNX Runtimeとは何ですか? ONNX Runtimeは、機械学習モデルの高性能な推論を可能にするオープンソースプロジェクトです。これは、機械学習モデルを表現する標準であるOpen Neural Network Exchange (ONNX)形式のモデルをサポートします。ONNX Runtime推論は、PyTorchやTensorFlow/Kerasなどのディープラーニングフレームワーク、およびscikit-learn、LightGBM、XGBoostなどの古典的な機械学習ライブラリからのモデルをサポートし、より高速な顧客体験とコスト削減を可能にします。ONNX Runtimeは、さまざまなハードウェア、ドライバ、オペレーティングシステムと互換性があり、グラフの最適化と変換と並行して、該当する場合はハードウェアアクセラレータを活用して最適なパフォーマンスを提供します。 ## 生成AIとは何ですか? 生成AIは、訓練されたデータに基づいてテキスト、画像、音楽などの新しいコンテンツを生成できるAIシステムを指します。例として、GPT-3のような言語モデルや、Stable Diffusionのような画像生成モデルがあります。ONNX Runtime for GenAIライブラリは、ONNXモデルのための生成AIループを提供し、ONNX Runtimeによる推論、ロジット処理、検索とサンプリング、KVキャッシュ管理を含みます。 ## ONNX Runtime for GENAI ONNX Runtime for GENAIは、生成AIモデルをサポートするためにONNX Runtimeの機能を拡張します。主な機能は次のとおりです: - **幅広いプラットフォームサポート:** Windows、Linux、macOS、Android、iOSなど、さまざまなプラットフォームで動作します。 - **モデルサポート:** LLaMA、GPT-Neo、BLOOMなど、多くの人気のある生成AIモデルをサポートしています。 - **パフォーマンス最適化:** NVIDIA GPU、AMD GPUなど、さまざまなハードウェアアクセラレータ向けの最適化を含みます。 - **使いやすさ:** アプリケーションへの簡単な統合を可能にするAPIを提供し、最小限のコードでテキスト、画像、その他のコンテンツを生成できます。 - ユーザーは高レベルのgenerate()メソッドを呼び出すことができ、またはモデルの各反復をループで実行し、1回に1トークンを生成し、ループ内で生成パラメータをオプションで更新することができます。 - ONNX runtumeはまた、貪欲/ビームサーチとTopP、TopKサンプリングをサポートしてトークンシーケンスを生成し、繰り返しペナルティなどの組み込みロジット処理を提供します。カスタムスコアリングを簡単に追加することもできます。 ## はじめに ONNX Runtime for GENAIを使い始めるには、次の手順に従うことができます: ### ONNX Runtimeをインストールする: ```Python +pip install onnxruntime +``` ### 生成AI拡張をインストールする: ```Python +pip install onnxruntime-genai +``` ### モデルを実行する: Pythonでの簡単な例です: ```Python +import onnxruntime_genai as og + +model = og.Model('path_to_your_model.onnx') + +tokenizer = og.Tokenizer(model) + +input_text = "Hello, how are you?" + +input_tokens = tokenizer.encode(input_text) + +output_tokens = model.generate(input_tokens) + +output_text = tokenizer.decode(output_tokens) + +print(output_text) +``` ### デモ: ONNX Runtime GenAIを使用してPhi-3.5-Visionを呼び出す ```python + +import onnxruntime_genai as og + +model_path = './Your Phi-3.5-vision-instruct ONNX Path' + +img_path = './Your Image Path' + +model = og.Model(model_path) + +processor = model.create_multimodal_processor() + +tokenizer_stream = processor.create_stream() + +text = "Your Prompt" + +prompt = "<|user|>\n" + +prompt += "<|image_1|>\n" + +prompt += f"{text}<|end|>\n" + +prompt += "<|assistant|>\n" + +image = og.Images.open(img_path) + +inputs = processor(prompt, images=image) + +params = og.GeneratorParams(model) + +params.set_inputs(inputs) + +params.set_search_options(max_length=3072) + +generator = og.Generator(model, params) + +while not generator.is_done(): + + generator.compute_logits() + + generator.generate_next_token() + + new_token = generator.get_next_tokens()[0] + + code += tokenizer_stream.decode(new_token) + + print(tokenizer_stream.decode(new_token), end='', flush=True) + +``` **その他** ONNX RuntimeやOllamaの参照方法に加えて、さまざまなメーカーが提供するモデル参照方法に基づいて、量子化モデルの参照を完了することもできます。Apple Metalを使用したApple MLXフレームワーク、NPUを使用したQualcomm QNN、CPU/GPUを使用したIntel OpenVINOなどです。また、[Phi-3 Cookbook](https://github.com/microsoft/phi-3cookbook?WT.mc_id=academic-105485-koreyst)からさらに多くのコンテンツを入手できます。 ## もっと 私たちはPhi-3/3.5 Familyの基本を学びましたが、SLMについてもっと学ぶためには、より多くの知識が必要です。Phi-3 Cookbookで答えを見つけることができます。さらに学びたい場合は、[Phi-3 Cookbook](https://github.com/microsoft/phi-3cookbook?WT.mc_id=academic-105485-koreyst)を訪問してください。 + +**免責事項**: +この文書は、機械翻訳サービスを使用して翻訳されています。正確さを期していますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の言語での原文が信頼できる情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/20-mistral/README.md b/translations/ja/20-mistral/README.md new file mode 100644 index 000000000..129d62581 --- /dev/null +++ b/translations/ja/20-mistral/README.md @@ -0,0 +1,349 @@ +# Mistralモデルを使ったビルディング + +## はじめに + +このレッスンでは以下をカバーします: +- さまざまなMistralモデルの探求 +- 各モデルのユースケースとシナリオの理解 +- 各モデルのユニークな機能を示すコードサンプル + +## Mistralモデル + +このレッスンでは、3つの異なるMistralモデルを探ります: **Mistral Large**、**Mistral Small**、そして**Mistral Nemo**。 + +これらのモデルはすべてGithub Modelマーケットプレイスで無料で利用可能です。このノートブックのコードでは、これらのモデルを使用してコードを実行します。Github Modelsを使用してAIモデルで[プロトタイプを作成する](https://docs.github.com/en/github-models/prototyping-with-ai-models?WT.mc_id=academic-105485-koreyst)方法についての詳細はこちらです。 + +## Mistral Large 2 (2407) + +Mistral Large 2は現在Mistralのフラッグシップモデルで、エンタープライズ向けに設計されています。 + +このモデルは、オリジナルのMistral Largeを以下の点でアップグレードしています: +- より大きなコンテキストウィンドウ - 128k対32k +- 数学とコーディングタスクでのより良いパフォーマンス - 平均精度76.9%対60.4% +- 多言語パフォーマンスの向上 - 対応言語には、英語、フランス語、ドイツ語、スペイン語、イタリア語、ポルトガル語、オランダ語、ロシア語、中国語、日本語、韓国語、アラビア語、ヒンディー語が含まれます。 + +これらの機能により、Mistral Largeは以下で優れています: +- *Retrieval Augmented Generation (RAG)* - 大きなコンテキストウィンドウのおかげで +- *関数呼び出し* - このモデルはネイティブの関数呼び出しを備えており、外部ツールやAPIとの統合を可能にします。これらの呼び出しは、並行してまたは順次に行うことができます。 +- *コード生成* - このモデルはPython、Java、TypeScript、C++の生成で優れています。 + +### Mistral Large 2を使用したRAGの例 + +この例では、Mistral Large 2を使用してテキストドキュメント上でRAGパターンを実行します。質問は韓国語で書かれており、大学入学前の著者の活動について尋ねています。 + +Cohere Embeddings Modelを使用してテキストドキュメントと質問の埋め込みを作成します。このサンプルでは、faiss Pythonパッケージをベクトルストアとして使用しています。 + +Mistralモデルに送信されるプロンプトには、質問と質問に類似した取得されたチャンクが含まれています。モデルは自然言語での応答を提供します。 + +```python +pip install faiss-cpu +``` + +```python +import requests +import numpy as np +import faiss +import os + +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential +from azure.ai.inference import EmbeddingsClient + +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-large" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = requests.get('https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt') +text = response.text + +chunk_size = 2048 +chunks = [text[i:i + chunk_size] for i in range(0, len(text), chunk_size)] +len(chunks) + +embed_model_name = "cohere-embed-v3-multilingual" + +embed_client = EmbeddingsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token) +) + +embed_response = embed_client.embed( + input=chunks, + model=embed_model_name +) + + + +text_embeddings = [] +for item in embed_response.data: + length = len(item.embedding) + text_embeddings.append(item.embedding) +text_embeddings = np.array(text_embeddings) + + +d = text_embeddings.shape[1] +index = faiss.IndexFlatL2(d) +index.add(text_embeddings) + +question = "저자가 대학에 오기 전에 주로 했던 두 가지 일은 무엇이었나요??" + +question_embedding = embed_client.embed( + input=[question], + model=embed_model_name +) + +question_embeddings = np.array(question_embedding.data[0].embedding) + + +D, I = index.search(question_embeddings.reshape(1, -1), k=2) # distance, index +retrieved_chunks = [chunks[i] for i in I.tolist()[0]] + +prompt = f""" +Context information is below. +--------------------- +{retrieved_chunks} +--------------------- +Given the context information and not prior knowledge, answer the query. +Query: {question} +Answer: +""" + + +chat_response = client.complete( + messages=[ + SystemMessage(content="You are a helpful assistant."), + UserMessage(content=prompt), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(chat_response.choices[0].message.content) +``` + +## Mistral Small + +Mistral Smallは、Mistralファミリーのモデルの中でプレミア/エンタープライズカテゴリーに属するもう一つのモデルです。名前が示すように、このモデルはSmall Language Model (SLM)です。Mistral Smallを使用する利点は以下の通りです: +- Mistral LargeやNeMoのようなMistral LLMと比較してコスト削減 - 価格が80%低下 +- 低遅延 - MistralのLLMと比較して迅速な応答 +- 柔軟性 - 必要なリソースに対する制限が少なく、さまざまな環境で展開可能 + +Mistral Smallは以下に最適です: +- 要約、感情分析、翻訳などのテキストベースのタスク +- コスト効果のために頻繁にリクエストが行われるアプリケーション +- レビューやコード提案のような低遅延のコードタスク + +## Mistral SmallとMistral Largeの比較 + +Mistral SmallとLargeの間の遅延の違いを示すために、以下のセルを実行してください。 + +3〜5秒の応答時間の違いが見られるはずです。また、同じプロンプトに対する応答の長さとスタイルにも注目してください。 + +```python + +import os +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-small" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage(content="You are a helpful coding assistant."), + UserMessage(content="Can you write a Python function to the fizz buzz test?"), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(response.choices[0].message.content) + +``` + +```python + +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential + +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-large" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage(content="You are a helpful coding assistant."), + UserMessage(content="Can you write a Python function to the fizz buzz test?"), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(response.choices[0].message.content) + +``` + +## Mistral NeMo + +このレッスンで議論された他の2つのモデルと比較して、Mistral NeMoはApache2ライセンスを持つ唯一の無料モデルです。 + +これは、以前のオープンソースLLMであるMistral 7Bのアップグレードと見なされています。 + +NeMoモデルの他の特徴は以下の通りです: + +- *より効率的なトークン化:* このモデルは、より一般的に使用されるtiktokenではなく、Tekkenトークナイザを使用しています。これにより、より多くの言語とコードでのパフォーマンスが向上します。 + +- *微調整:* ベースモデルは微調整が可能です。これにより、微調整が必要なユースケースに対してより柔軟に対応できます。 + +- *ネイティブ関数呼び出し* - Mistral Largeのように、このモデルは関数呼び出しで訓練されています。これにより、最初のオープンソースモデルの一つとしてユニークです。 + +### トークナイザの比較 + +このサンプルでは、Mistral NeMoがMistral Largeと比較してトークン化をどのように処理するかを見てみましょう。 + +両方のサンプルは同じプロンプトを取りますが、NeMoがMistral Largeに比べて少ないトークンを返すことがわかるはずです。 + +```bash +pip install mistral-common +``` + +```python +# Import needed packages: +from mistral_common.protocol.instruct.messages import ( + UserMessage, +) +from mistral_common.protocol.instruct.request import ChatCompletionRequest +from mistral_common.protocol.instruct.tool_calls import ( + Function, + Tool, +) +from mistral_common.tokens.tokenizers.mistral import MistralTokenizer + +# Load Mistral tokenizer + +model_name = "open-mistral-nemo " + +tokenizer = MistralTokenizer.from_model(model_name) + +# Tokenize a list of messages +tokenized = tokenizer.encode_chat_completion( + ChatCompletionRequest( + tools=[ + Tool( + function=Function( + name="get_current_weather", + description="Get the current weather", + parameters={ + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "format": { + "type": "string", + "enum": ["celsius", "fahrenheit"], + "description": "The temperature unit to use. Infer this from the users location.", + }, + }, + "required": ["location", "format"], + }, + ) + ) + ], + messages=[ + UserMessage(content="What's the weather like today in Paris"), + ], + model=model_name, + ) +) +tokens, text = tokenized.tokens, tokenized.text + +# Count the number of tokens +print(len(tokens)) +``` + +```python +# Import needed packages: +from mistral_common.protocol.instruct.messages import ( + UserMessage, +) +from mistral_common.protocol.instruct.request import ChatCompletionRequest +from mistral_common.protocol.instruct.tool_calls import ( + Function, + Tool, +) +from mistral_common.tokens.tokenizers.mistral import MistralTokenizer + +# Load Mistral tokenizer + +model_name = "mistral-large-latest" + +tokenizer = MistralTokenizer.from_model(model_name) + +# Tokenize a list of messages +tokenized = tokenizer.encode_chat_completion( + ChatCompletionRequest( + tools=[ + Tool( + function=Function( + name="get_current_weather", + description="Get the current weather", + parameters={ + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "format": { + "type": "string", + "enum": ["celsius", "fahrenheit"], + "description": "The temperature unit to use. Infer this from the users location.", + }, + }, + "required": ["location", "format"], + }, + ) + ) + ], + messages=[ + UserMessage(content="What's the weather like today in Paris"), + ], + model=model_name, + ) +) +tokens, text = tokenized.tokens, tokenized.text + +# Count the number of tokens +print(len(tokens)) +``` + +## 学びはここで終わりではありません、旅を続けましょう + +このレッスンを完了した後は、[Generative AI Learning collection](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)をチェックして、Generative AIの知識をさらに向上させましょう! + +**免責事項**: +この文書は機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があります。原文はその言語で書かれた文書を権威ある情報源として考慮してください。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/21-meta/README.md b/translations/ja/21-meta/README.md new file mode 100644 index 000000000..1416b0fe8 --- /dev/null +++ b/translations/ja/21-meta/README.md @@ -0,0 +1,157 @@ +# Metaファミリーモデルを使った構築 + +## はじめに + +このレッスンでは以下をカバーします: + +- 主要な2つのMetaファミリーモデル - Llama 3.1とLlama 3.2の探求 +- 各モデルのユースケースとシナリオの理解 +- 各モデルのユニークな特徴を示すコードサンプル + +## Metaファミリーのモデル + +このレッスンでは、Metaファミリー、または「Llama Herd」から2つのモデル - Llama 3.1とLlama 3.2を探ります。 + +これらのモデルは異なるバリアントで提供されており、Github Modelマーケットプレイスで入手可能です。Github Modelsを使用して[AIモデルでプロトタイプを作成する](https://docs.github.com/en/github-models/prototyping-with-ai-models?WT.mc_id=academic-105485-koreyst)方法についての詳細はこちらをご覧ください。 + +モデルのバリアント: +- Llama 3.1 - 70B Instruct +- Llama 3.1 - 405B Instruct +- Llama 3.2 - 11B Vision Instruct +- Llama 3.2 - 90B Vision Instruct + +*注意: Llama 3もGithub Modelsで利用可能ですが、このレッスンでは取り上げません。* + +## Llama 3.1 + +4050億のパラメータを持つLlama 3.1は、オープンソースのLLMカテゴリに属します。 + +このモデルは、以前のリリースであるLlama 3のアップグレード版で、以下を提供します: + +- より大きなコンテキストウィンドウ - 128kトークン対8kトークン +- より大きな最大出力トークン - 4096対2048 +- 多言語サポートの向上 - トレーニングトークンの増加による + +これにより、Llama 3.1はGenAIアプリケーションの構築時により複雑なユースケースを処理できるようになります。具体的には: +- ネイティブ機能呼び出し - LLMワークフロー外の外部ツールや機能を呼び出す能力 +- RAGパフォーマンスの向上 - より高いコンテキストウィンドウによる +- 合成データ生成 - 微調整などのタスクに効果的なデータを作成する能力 + +### ネイティブ機能呼び出し + +Llama 3.1は、機能やツールの呼び出しをより効果的に行うように微調整されています。また、ユーザーからのプロンプトに基づいて使用が必要と判断される2つの組み込みツールがあります。これらのツールは: + +- **Brave Search** - ウェブ検索を行うことで天気などの最新情報を取得するのに使用できます +- **Wolfram Alpha** - より複雑な数学的計算に使用できるため、独自の関数を書く必要がありません + +また、LLMが呼び出すことができる独自のカスタムツールを作成することもできます。 + +以下のコード例では: + +- システムプロンプトで利用可能なツール(brave_search、wolfram_alpha)を定義します。 +- 特定の都市の天気について尋ねるユーザープロンプトを送信します。 +- LLMはBrave Searchツールへのツール呼び出しで応答します。それは次のように見えるでしょう `<|python_tag|>brave_search.call(query="Stockholm weather")` + +*注意: この例はツール呼び出しのみを行います。結果を取得したい場合は、Brave APIページで無料アカウントを作成し、関数自体を定義する必要があります。* + +```python +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import AssistantMessage, SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential + +token = os.environ["GITHUB_TOKEN"] +endpoint = "https://models.inference.ai.azure.com" +model_name = "meta-llama-3.1-405b-instruct" + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + + +tool_prompt=f""" +<|begin_of_text|><|start_header_id|>system<|end_header_id|> + +Environment: ipython +Tools: brave_search, wolfram_alpha +Cutting Knowledge Date: December 2023 +Today Date: 23 July 2024 + +You are a helpful assistant<|eot_id|> +""" + +messages = [ + SystemMessage(content=tool_prompt), + UserMessage(content="What is the weather in Stockholm?"), + +] + +response = client.complete(messages=messages, model=model_name) + +print(response.choices[0].message.content) +``` + +## Llama 3.2 + +LLMであるにもかかわらず、Llama 3.1にはマルチモーダル対応の制限があります。つまり、画像などの異なる種類の入力をプロンプトとして使用し、応答を提供する能力です。この能力はLlama 3.2の主要な特徴の一つです。これらの特徴には以下も含まれます: + +- マルチモーダル対応 - テキストと画像のプロンプトの両方を評価する能力 +- 小規模から中規模のバリエーション(11Bと90B) - 柔軟なデプロイメントオプションを提供 +- テキストのみのバリエーション(1Bと3B) - エッジ/モバイルデバイスでモデルをデプロイし、低レイテンシーを提供 + +マルチモーダル対応は、オープンソースモデルの世界における大きな進歩を表しています。以下のコード例では、Llama 3.2 90Bから画像の分析を得るために、画像とテキストプロンプトの両方を取ります。 + +### Llama 3.2によるマルチモーダル対応 + +```python +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import ( + SystemMessage, + UserMessage, + TextContentItem, + ImageContentItem, + ImageUrl, + ImageDetailLevel, +) +from azure.core.credentials import AzureKeyCredential + +token = os.environ["GITHUB_TOKEN"] +endpoint = "https://models.inference.ai.azure.com" +model_name = "Llama-3.2-90B-Vision-Instruct" + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage( + content="You are a helpful assistant that describes images in details." + ), + UserMessage( + content=[ + TextContentItem(text="What's in this image?"), + ImageContentItem( + image_url=ImageUrl.load( + image_file="sample.jpg", + image_format="jpg", + detail=ImageDetailLevel.LOW) + ), + ], + ), + ], + model=model_name, +) + +print(response.choices[0].message.content) +``` + +## 学習はここで終わりません、旅を続けましょう + +このレッスンを完了した後は、[Generative AI Learning collection](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)をチェックして、Generative AIの知識をさらに深めましょう! + +**免責事項**: +この文書は機械翻訳AIサービスを使用して翻訳されています。正確性を期すよう努めていますが、自動翻訳には誤りや不正確さが含まれる場合がありますのでご注意ください。元の言語の文書を権威ある情報源と見なすべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/CODE_OF_CONDUCT.md b/translations/ja/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..d0f398ff1 --- /dev/null +++ b/translations/ja/CODE_OF_CONDUCT.md @@ -0,0 +1,12 @@ +# Microsoft オープンソース行動規範 + +このプロジェクトは [Microsoft オープンソース行動規範](https://opensource.microsoft.com/codeofconduct/) を採用しています。 + +リソース: + +- [Microsoft オープンソース行動規範](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft 行動規範 FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +- 質問や懸念がある場合は [opencode@microsoft.com](mailto:opencode@microsoft.com) に連絡してください + +**免責事項**: +この文書は機械翻訳AIサービスを使用して翻訳されています。正確さを期しておりますが、自動翻訳には誤りや不正確さが含まれる可能性がありますのでご注意ください。原文書がその言語での権威ある情報源とみなされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/CONTRIBUTING.md b/translations/ja/CONTRIBUTING.md new file mode 100644 index 000000000..a70462446 --- /dev/null +++ b/translations/ja/CONTRIBUTING.md @@ -0,0 +1,125 @@ +# コントリビューション + +このプロジェクトは、貢献や提案を歓迎します。ほとんどの貢献には、あなたが貢献する権利を持っており、実際に私たちにその貢献を使用する権利を与えることを宣言するコントリビューター ライセンス契約 (CLA) に同意する必要があります。詳細については、 をご覧ください。 + +> 重要: このリポジトリのテキストを翻訳する際は、機械翻訳を使用しないようにしてください。翻訳はコミュニティによって検証されるため、十分に堪能な言語でのみ翻訳をお手伝いください。 + +プルリクエストを送信すると、CLA-bot が自動的にCLAを提供する必要があるかどうかを判断し、適切にPRを装飾します(例: ラベル、コメント)。ボットの指示に従うだけで大丈夫です。CLAを使用するすべてのリポジトリでこれを一度行うだけで済みます。 + +## 行動規範 + +このプロジェクトは [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/?WT.mc_id=academic-105485-koreyst) を採用しています。詳細については、[Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/?WT.mc_id=academic-105485-koreyst) をお読みいただくか、追加の質問やコメントがある場合は [opencode@microsoft.com](mailto:opencode@microsoft.com) にお問い合わせください。 + +## 質問や問題がありますか? + +一般的なサポート質問のためにGitHubの問題を開かないでください。GitHubリストは機能要求とバグ報告のために使用されるべきです。このようにして、実際の問題やバグをコードからより簡単に追跡し、一般的な議論を実際のコードから分離することができます。 + +## タイポ、問題、バグ、および貢献 + +Generative AI for Beginnersリポジトリに変更を提出する際は、次の推奨事項に従ってください。 + +* 修正を行う前に、必ずリポジトリを自分のアカウントにフォークしてください +* 複数の変更を1つのプルリクエストにまとめないでください。例えば、バグ修正とドキュメントの更新を別々のPRで提出してください +* プルリクエストにマージコンフリクトが表示される場合は、修正を行う前にローカルのmainをメインリポジトリの内容にミラーリングするように更新してください +* 翻訳を提出する場合は、すべての翻訳されたファイルに対して1つのPRを作成してください。コンテンツの部分的な翻訳は受け付けていません +* タイポやドキュメント修正を提出する場合、適切な場合は1つのPRに修正をまとめることができます + +## 執筆に関する一般的なガイダンス + +- URLはすべて角括弧で囲み、続けて括弧で囲み、余分なスペースを入れないでください `[](../..)`。 +- リポジトリ内の他のファイルやフォルダーへのリンクは、`./` を使用して現在の作業ディレクトリにあるファイルやフォルダーを参照するか、`../` を使用して親作業ディレクトリにあるファイルやフォルダーを参照する必要があります。 +- リポジトリ内の他のファイルやフォルダーへの相対リンクには、最後にトラッキングID(`?` や `&` の後に `wt.mc_id=` や `WT.mc_id=`)を付ける必要があります。 +- _github.com、microsoft.com、visualstudio.com、aka.ms、azure.com_ のドメインからのURLには、最後にトラッキングID(`?` や `&` の後に `wt.mc_id=` や `WT.mc_id=`)を付ける必要があります。 +- リンクには特定の国のロケールを含めないようにしてください(`/en-us/` や `/en/` など)。 +- すべての画像は `./images` フォルダーに保存してください。 +- 画像には、英字、数字、ダッシュを使用して説明的な名前を付けてください。 + +## GitHub ワークフロー + +プルリクエストを送信すると、前述のルールを検証するために4つの異なるワークフローがトリガーされます。 +ここに記載されている指示に従うだけで、ワークフローチェックをパスできます。 + +- [Check Broken Relative Paths](../..) +- [Check Paths Have Tracking](../..) +- [Check URLs Have Tracking](../..) +- [Check URLs Don't Have Locale](../..) + +### Check Broken Relative Paths + +このワークフローは、ファイル内のすべての相対パスが機能していることを確認します。 +このリポジトリはGitHubページにデプロイされているため、すべてを結びつけるリンクを入力する際には、誰もが間違った場所に導かれないように非常に注意する必要があります。 + +リンクが正しく機能していることを確認するには、VS Codeを使用してチェックしてください。 + +例えば、ファイル内のリンクにカーソルを合わせると、**ctrl + click** でリンクをたどるように促されます。 + +![VS Codeリンクをたどるスクリーンショット](../../translated_images/vscode-follow-link.png?WT.e5a16a3aa1d1b20d12205c125c16d37f51db4a77aae335164ef5c71b8a3c8cae.ja.mc_id=academic-105485-koreyst "リンクにカーソルを合わせた際に表示されるvs codeのリンクをたどるプロンプトのスクリーンショット") + +リンクをクリックしてローカルで機能しない場合は、ワークフローがトリガーされ、GitHubで機能しません。 + +この問題を修正するには、VS Codeの助けを借りてリンクを入力してみてください。 + +`./` や `../` を入力すると、VS Codeが入力に基づいて利用可能なオプションから選択するように促します。 + +![VS Code相対パスを選択するスクリーンショット](../../translated_images/vscode-select-relative-path.png?WT.0f3b77407fe412fcc26ad93c60e4c8b13a2077ed62819c90baddc903103bbd52.ja.mc_id=academic-105485-koreyst "ポップアップリストから相対パスを選択するように促すvs codeのスクリーンショット") + +目的のファイルやフォルダーをクリックしてパスをたどれば、パスが壊れていないことが確認できます。 + +正しい相対パスを追加したら、変更を保存してプッシュすると、ワークフローが再びトリガーされて変更を確認します。 +チェックを通過すれば完了です。 + +### Check Paths Have Tracking + +このワークフローは、すべての相対パスにトラッキングがあることを確認します。 +このリポジトリはGitHubページにデプロイされているため、異なるファイルやフォルダー間の移動を追跡する必要があります。 + +相対パスにトラッキングがあることを確認するには、パスの最後に `?wt.mc_id=` があるかどうかを確認してください。 +これが相対パスに追加されていれば、このチェックを通過します。 + +そうでない場合は、次のエラーが表示されることがあります。 + +![GitHubパスにトラッキングがないコメントのスクリーンショット](../../translated_images/github-check-paths-missing-tracking-comment.png?WT.857152c6e619ecb9bd0439b036298cc782b09321d8a444324ef1fd0de88e82a6.ja.mc_id=academic-105485-koreyst "相対パスからトラッキングが欠けていることを示すgithubコメントのスクリーンショット") + +この問題を修正するには、ワークフローが強調表示したファイルパスを開き、相対パスの末尾にトラッキングIDを追加してください。 + +トラッキングIDを追加したら、変更を保存してプッシュすると、ワークフローが再びトリガーされて変更を確認します。 +チェックを通過すれば完了です。 + +### Check URLs Have Tracking + +このワークフローは、すべてのウェブURLにトラッキングがあることを確認します。 +このリポジトリは誰でもアクセス可能なので、アクセス元を追跡してトラフィックの出所を把握する必要があります。 + +URLにトラッキングがあることを確認するには、URLの末尾に `?wt.mc_id=` があるかどうかを確認してください。 +これがURLに追加されていれば、このチェックを通過します。 + +そうでない場合は、次のエラーが表示されることがあります。 + +![GitHub URLにトラッキングがないコメントのスクリーンショット](../../translated_images/github-check-urls-missing-tracking-comment.png?WT.0804062e402cd103dc0d87d5e2376d2b11109e02e47f272163cf6cadc6a032c7.ja.mc_id=academic-105485-koreyst "urlからトラッキングが欠けていることを示すgithubコメントのスクリーンショット") + +この問題を修正するには、ワークフローが強調表示したファイルパスを開き、URLの末尾にトラッキングIDを追加してください。 + +トラッキングIDを追加したら、変更を保存してプッシュすると、ワークフローが再びトリガーされて変更を確認します。 +チェックを通過すれば完了です。 + +### Check URLs Don't Have Locale + +このワークフローは、すべてのウェブURLに特定の国のロケールが含まれていないことを確認します。 +このリポジトリは世界中の誰でもアクセス可能なので、URLに国のロケールを含めないようにする必要があります。 + +URLに国のロケールが含まれていないことを確認するには、URLのどこにも `/en-us/` や `/en/`、または他の言語ロケールが含まれていないかどうかを確認してください。 +これがURLに含まれていなければ、このチェックを通過します。 + +そうでない場合は、次のエラーが表示されることがあります。 + +![GitHub国のロケールコメントのスクリーンショット](../../translated_images/github-check-country-locale-comment.png?WT.6e874139bee026bf59a2ae752f2657fa7d7883fb0c02fb9980cb2f9a04a48797.ja.mc_id=academic-105485-koreyst "urlに国のロケールが追加されたことを示すgithubコメントのスクリーンショット") + +この問題を修正するには、ワークフローが強調表示したファイルパスを開き、URLから国のロケールを削除してください。 + +国のロケールを削除したら、変更を保存してプッシュすると、ワークフローが再びトリガーされて変更を確認します。 +チェックを通過すれば完了です。 + +おめでとうございます!貢献についてのフィードバックをできるだけ早くお知らせします。 + +**免責事項**: +この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを期しておりますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご了承ください。原文は、その言語で書かれたものを権威ある情報源とみなすべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用から生じる誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/README.md b/translations/ja/README.md new file mode 100644 index 000000000..da3dd305d --- /dev/null +++ b/translations/ja/README.md @@ -0,0 +1,114 @@ +![Generative AI For Beginners](../../translated_images/repo-thumbnailv4-fixed.png?WT.dfa9688e7359356441d344183b2ff4dcc76389cc116024447725ef424a809a79.ja.mc_id=academic-105485-koreyst) + +### ジェネレーティブAIアプリケーションを構築するために必要な知識を学べる21のレッスン + +[![GitHub license](https://img.shields.io/github/license/microsoft/Generative-AI-For-Beginners.svg)](https://github.com/microsoft/Generative-AI-For-Beginners/blob/master/LICENSE?WT.mc_id=academic-105485-koreyst) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/graphs/contributors/?WT.mc_id=academic-105485-koreyst) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/issues/?WT.mc_id=academic-105485-koreyst) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/pulls/?WT.mc_id=academic-105485-koreyst) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com?WT.mc_id=academic-105485-koreyst) + +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/watchers/?WT.mc_id=academic-105485-koreyst) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/network/?WT.mc_id=academic-105485-koreyst) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/stargazers/?WT.mc_id=academic-105485-koreyst) + +[![](https://dcbadge.limes.pink/api/server/ByRwuEEgH4)](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) + +# ジェネレーティブAI入門(バージョン3) - コース + +Microsoft Cloud Advocatesによる21レッスンの包括的なコースで、ジェネレーティブAIアプリケーションの構築の基礎を学びましょう。 + +## 🌱 はじめに + +このコースは21のレッスンで構成されています。それぞれのレッスンは独立したトピックを扱っているので、好きなところから始めてください! + +レッスンは「Learn」と「Build」に分かれており、「Learn」ではジェネレーティブAIの概念を説明し、「Build」では可能な場合に**Python**と**TypeScript**で概念とコード例を説明します。 + +各レッスンには追加の学習ツールを提供する「Keep Learning」セクションも含まれています。 + +## 必要なもの +### このコースのコードを実行するために必要なもの: + - [Azure OpenAI Service](https://azure.microsoft.com/products/ai-services/openai-service?WT.mc_id=academic-105485-koreyst) - **レッスン:** "aoai-assignment" + - [GitHub Marketplace Model Catalog](https://github.com/marketplace/models?WT.mc_id=academic-105485-koreyst) - **レッスン:** "githubmodels" + - [OpenAI API](https://platform.openai.com/docs/quickstart?context=python?WT.mc_id=academic-105485-koreyst) - **レッスン:** "oai-assignment" + +- PythonまたはTypeScriptの基本的な知識があると役立ちます - \*初心者の方はこれらの[Python](https://learn.microsoft.com/training/paths/python-language/?WT.mc_id=academic-105485-koreyst)と[TypeScript](https://learn.microsoft.com/training/paths/build-javascript-applications-typescript/?WT.mc_id=academic-105485-koreyst)コースをご覧ください。 +- GitHubアカウントを持ち、このリポジトリを[フォーク](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst)する + +開発環境のセットアップをサポートするために、**[Course Setup](./00-course-setup/README.md?WT.mc_id=academic-105485-koreyst)** レッスンを用意しました。 + +後で簡単に見つけられるように、このリポジトリに[スター (🌟)](https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars?WT.mc_id=academic-105485-koreyst)を付けるのを忘れずに。 + +## 🧠 デプロイの準備はできていますか? + +より高度なコードサンプルをお探しの場合は、**Python**と**TypeScript**の両方で提供している[ジェネレーティブAIコードサンプル集](https://aka.ms/genai-beg-code?WT.mc_id=academic-105485-koreyst)をご覧ください。 + +## 🗣️ 他の学習者と出会い、サポートを受ける + +このコースを受講している他の学習者と出会い、ネットワークを築くために、公式の[AI Discordサーバー](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst)に参加してください。 + +## 🚀 スタートアップを構築していますか? + +[Microsoft for Startups Founders Hub](https://aka.ms/genai-foundershub?WT.mc_id=academic-105485-koreyst)にサインアップして、**無料のOpenAIクレジット**と**Azureクレジットで最大$150k**を受け取り、Azure OpenAI Servicesを通じてOpenAIモデルにアクセスしましょう。 + +## 🙏 協力したいですか? + +提案やスペルミス、コードエラーを見つけた場合は、[イシューを作成](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst)するか、[プルリクエストを作成](https://github.com/microsoft/generative-ai-for-beginners/pulls?WT.mc_id=academic-105485-koreyst)してください。 + +## 📂 各レッスンには以下が含まれています: + +- トピックの短いビデオ紹介 +- READMEに記載されたレッスン内容 +- Azure OpenAIとOpenAI APIをサポートするPythonとTypeScriptのコードサンプル +- 学習を続けるための追加リソースへのリンク + +## 🗃️ レッスン + +| # | **レッスンリンク** | **説明** | **ビデオ** | **追加学習** | +| --- | -------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | +| 00 | [Course Setup](./00-course-setup/README.md?WT.mc_id=academic-105485-koreyst) | **学ぶ:** 開発環境のセットアップ方法 | 近日公開 | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 01 | [Introduction to Generative AI and LLMs](./01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst) | **学ぶ:** ジェネレーティブAIとは何か、そして大規模言語モデル(LLM)がどのように機能するかを理解する | [Video](https://aka.ms/gen-ai-lesson-1-gh?WT.mc_id=academic-105485-koreyst) | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +```markdown +| 02 | [異なるLLMの探索と比較](./02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst) | **学ぶ:** ユースケースに最適なモデルを選択する方法 | [ビデオ](https://aka.ms/gen-ai-lesson2-gh?WT.mc_id=academic-105485-koreyst) | [詳細を見る](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 03 | [生成AIを責任を持って使用する](./03-using-generative-ai-responsibly/README.md?WT.mc_id=academic-105485-koreyst) | **学ぶ:** 責任を持って生成AIアプリケーションを構築する方法 | [ビデオ](https://aka.ms/gen-ai-lesson3-gh?WT.mc_id=academic-105485-koreyst) | [詳細を見る](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 04 | [プロンプトエンジニアリングの基本を理解する](./04-prompt-engineering-fundamentals/README.md?WT.mc_id=academic-105485-koreyst) | **学ぶ:** 実践的なプロンプトエンジニアリングのベストプラクティス | [ビデオ](https://aka.ms/gen-ai-lesson4-gh?WT.mc_id=academic-105485-koreyst) | [詳細を見る](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 05 | [高度なプロンプトを作成する](./05-advanced-prompts/README.md?WT.mc_id=academic-105485-koreyst) | **学ぶ:** プロンプトの結果を改善するためのプロンプトエンジニアリング技術を適用する方法 | [ビデオ](https://aka.ms/gen-ai-lesson5-gh?WT.mc_id=academic-105485-koreyst) | [詳細を見る](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 06 | [テキスト生成アプリケーションを構築する](./06-text-generation-apps/README.md?WT.mc_id=academic-105485-koreyst) | **構築する:** Azure OpenAI / OpenAI APIを使用したテキスト生成アプリ | [ビデオ](https://aka.ms/gen-ai-lesson6-gh?WT.mc_id=academic-105485-koreyst) | [詳細を見る](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 07 | [チャットアプリケーションを構築する](./07-building-chat-applications/README.md?WT.mc_id=academic-105485-koreyst) | **構築する:** 効率的にチャットアプリケーションを構築し統合するための技術 | [ビデオ](https://aka.ms/gen-ai-lessons7-gh?WT.mc_id=academic-105485-koreyst) | [詳細を見る](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 08 | [検索アプリを構築するベクターデータベース](./08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst) | **構築する:** 埋め込みを使用してデータを検索する検索アプリ | [ビデオ](https://aka.ms/gen-ai-lesson8-gh?WT.mc_id=academic-105485-koreyst) | [詳細を見る](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 09 | [画像生成アプリケーションを構築する](./09-building-image-applications/README.md?WT.mc_id=academic-105485-koreyst) | **構築する:** 画像生成アプリ | [ビデオ](https://aka.ms/gen-ai-lesson9-gh?WT.mc_id=academic-105485-koreyst) | [詳細を見る](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 10 | [ローコードAIアプリケーションを構築する](./10-building-low-code-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **構築する:** ローコードツールを使用した生成AIアプリ | [ビデオ](https://aka.ms/gen-ai-lesson10-gh?WT.mc_id=academic-105485-koreyst) | [詳細を見る](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 11 | [外部アプリケーションを関数呼び出しで統合する](./11-integrating-with-function-calling/README.md?WT.mc_id=academic-105485-koreyst) | **構築する:** 関数呼び出しとは何か、そのアプリケーションへの使用例 | [ビデオ](https://aka.ms/gen-ai-lesson11-gh?WT.mc_id=academic-105485-koreyst) | [詳細を見る](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +``` +| 12 | [AIアプリケーションのためのUXデザイン](./12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **学ぶ:** 生成AIアプリケーション開発におけるUXデザイン原則の適用方法 | [ビデオ](https://aka.ms/gen-ai-lesson12-gh?WT.mc_id=academic-105485-koreyst) | [詳細はこちら](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 13 | [生成AIアプリケーションのセキュリティ](./13-securing-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **学ぶ:** AIシステムへの脅威とリスク、およびこれらのシステムを保護する方法 | [ビデオ](https://aka.ms/gen-ai-lesson13-gh?WT.mc_id=academic-105485-koreyst) | [詳細はこちら](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 14 | [生成AIアプリケーションのライフサイクル](./14-the-generative-ai-application-lifecycle/README.md?WT.mc_id=academic-105485-koreyst) | **学ぶ:** LLMライフサイクルとLLMOpsを管理するためのツールとメトリクス | [ビデオ](https://aka.ms/gen-ai-lesson14-gh?WT.mc_id=academic-105485-koreyst) | [詳細はこちら](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 15 | [情報検索強化生成(RAG)とベクターデータベース](./15-rag-and-vector-databases/README.md?WT.mc_id=academic-105485-koreyst) | **構築:** ベクターデータベースから埋め込みを取得するためのRAGフレームワークを使用したアプリケーション | [ビデオ](https://aka.ms/gen-ai-lesson15-gh?WT.mc_id=academic-105485-koreyst) | [詳細はこちら](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 16 | [オープンソースモデルとHugging Face](./16-open-source-models/README.md?WT.mc_id=academic-105485-koreyst) | **構築:** Hugging Faceで利用可能なオープンソースモデルを使用したアプリケーション | [ビデオ](https://aka.ms/gen-ai-lesson16-gh?WT.mc_id=academic-105485-koreyst) | [詳細はこちら](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 17 | [AIエージェント](./17-ai-agents/README.md?WT.mc_id=academic-105485-koreyst) | **構築:** AIエージェントフレームワークを使用したアプリケーション | [ビデオ](https://aka.ms/gen-ai-lesson17-gh?WT.mc_id=academic-105485-koreyst) | [詳細はこちら](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 18 | [LLMの微調整](./18-fine-tuning/README.md?WT.mc_id=academic-105485-koreyst) | **学ぶ:** LLMの微調整の何、なぜ、そして方法 | [ビデオ](https://aka.ms/gen-ai-lesson18-gh?WT.mc_id=academic-105485-koreyst) | [詳細はこちら](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 19 | [SLMを使用した構築](./19-slm/README.md?WT.mc_id=academic-105485-koreyst) | **学ぶ:** 小型言語モデルを使用して構築する利点 | ビデオ近日公開 | [詳細はこちら](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 20 | [Mistralモデルを使用した構築](./20-mistral/README.md?WT.mc_id=academic-105485-koreyst) | **学ぶ:** Mistralファミリーモデルの特徴と違い | ビデオ近日公開 | [詳細はこちら](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 21 | [Metaモデルを使用した構築](./21-meta/README.md?WT.mc_id=academic-105485-koreyst) | **学ぶ:** Metaファミリーモデルの特徴と違い | ビデオ近日公開 | [詳細はこちら](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | + +### 🌟 特別な感謝 + +GitHub Actionsとワークフローをすべて作成してくれた[**John Aziz**](https://www.linkedin.com/in/john0isaac/)に特別な感謝を。 + +各レッスンに重要な貢献をして、学習者とコードの体験を向上させてくれた[**Bernhard Merkle**](https://www.linkedin.com/in/bernhard-merkle-738b73/)にも感謝します。 + +## 🎒 その他のコース + +私たちのチームは他のコースも提供しています!こちらもチェックしてみてください: + +- [初心者のためのML](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst) +- [データサイエンス初心者向け](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) +- [AI初心者向け](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) +- [**NEW** サイバーセキュリティ初心者向け](https://github.com/microsoft/Security-101??WT.mc_id=academic-96948-sayoung) +- [ウェブ開発初心者向け](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst) +- [IoT初心者向け](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst) +- [XR開発初心者向け](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst) +- [GitHub Copilotを使ったAIペアプログラミングのマスター](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) + +**免責事項**: +この文書は機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを期すよう努めていますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご了承ください。元の言語での原文が信頼できる情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/SECURITY.md b/translations/ja/SECURITY.md new file mode 100644 index 000000000..a439f1da1 --- /dev/null +++ b/translations/ja/SECURITY.md @@ -0,0 +1,40 @@ +## セキュリティ + +Microsoftは、ソフトウェア製品とサービスのセキュリティを非常に重視しています。これには、[Microsoft](https://github.com/microsoft)、[Azure](https://github.com/Azure)、[DotNet](https://github.com/dotnet)、[AspNet](https://github.com/aspnet)、[Xamarin](https://github.com/xamarin)、および[our GitHub organizations](https://opensource.microsoft.com/)などのGitHub組織を通じて管理されるすべてのソースコードリポジトリが含まれます。 + +もし、[Microsoftのセキュリティ脆弱性の定義](https://aka.ms/opensource/security/definition)に該当するMicrosoftが所有するリポジトリにセキュリティ脆弱性を発見した場合は、以下の手順に従って報告してください。 + +## セキュリティ問題の報告 + +**セキュリティ脆弱性を公開GitHubの課題として報告しないでください。** + +代わりに、Microsoft Security Response Center (MSRC)に[https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report)から報告してください。 + +ログインせずに提出したい場合は、[secure@microsoft.com](mailto:secure@microsoft.com)にメールを送信してください。可能であれば、メッセージを弊社のPGPキーで暗号化してください。[Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey)からダウンロードできます。 + +通常、24時間以内に返信を受け取るはずです。何らかの理由で返信がない場合は、メールでフォローアップして、最初のメッセージを受け取ったか確認してください。追加情報は[microsoft.com/msrc](https://aka.ms/opensource/security/msrc)で確認できます。 + +可能性のある問題の性質と範囲をよりよく理解するために、以下に示す情報をできるだけ多く提供してください: + + * 問題の種類(例: バッファオーバーフロー、SQLインジェクション、クロスサイトスクリプティングなど) + * 問題が発生する関連ソースファイルのフルパス + * 影響を受けるソースコードの場所(タグ/ブランチ/コミットまたは直接のURL) + * 問題を再現するために必要な特別な設定 + * 問題を再現するためのステップバイステップの手順 + * 概念実証またはエクスプロイトコード(可能であれば) + * 問題の影響、攻撃者がどのように問題を悪用する可能性があるか + +この情報は、報告を迅速に処理するのに役立ちます。 + +バグバウンティの報告を行う場合、より完全な報告はより高いバウンティ報酬に寄与することがあります。詳細については、[Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty)のページをご覧ください。 + +## 優先言語 + +すべてのコミュニケーションは英語で行うことを推奨します。 + +## ポリシー + +Microsoftは、[Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd)の原則に従います。 + +**免責事項**: +この文書は機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを期すために努めておりますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご承知おきください。元の言語での文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/docs/_navbar.md b/translations/ja/docs/_navbar.md new file mode 100644 index 000000000..b362b6764 --- /dev/null +++ b/translations/ja/docs/_navbar.md @@ -0,0 +1,10 @@ +* 言語を選択 + + * [English](../../../../../../../..) + * [Simplified Chinese](../../../../../../../../translations/cn) + * [Traditional Chinese](../../../../../../../../translations/tw) + * [Portuguese](../../../../../../../../translations/pt-br) + * [Japanese](../../../../../../../../translations/ja-jp) + +**免責事項**: +この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを期すために努力していますが、自動翻訳には誤りや不正確さが含まれる場合がありますのでご注意ください。元の言語で書かれた原文を権威ある情報源と見なすべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/docs/_sidebar.md b/translations/ja/docs/_sidebar.md new file mode 100644 index 000000000..d2cbc410b --- /dev/null +++ b/translations/ja/docs/_sidebar.md @@ -0,0 +1,5 @@ +- はじめに + - [生成AI入門](../01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst) + +**免責事項**: +この文書は機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを期しておりますが、自動翻訳には誤りや不正確さが含まれる場合がありますのでご注意ください。原文の母国語の文書が信頼できる情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/zh/00-course-setup/README.md b/translations/zh/00-course-setup/README.md new file mode 100644 index 000000000..fbd526946 --- /dev/null +++ b/translations/zh/00-course-setup/README.md @@ -0,0 +1,155 @@ +# 开始本课程 + +我们非常期待您开始这门课程,并看看生成式AI能激发您构建出什么样的作品! + +为了确保您的成功,这一页概述了设置步骤、技术要求以及在需要时如何获取帮助。 + +## 设置步骤 + +要开始学习这门课程,您需要完成以下步骤。 + +### 1. Fork 此仓库 + +[Fork 整个仓库](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst)到您自己的GitHub账户,以便能够更改任何代码并完成挑战。您还可以[给此仓库加星标 (🌟)](https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars?WT.mc_id=academic-105485-koreyst)以便更容易找到它和相关的仓库。 + +### 2. 创建一个代码空间 + +为了避免在运行代码时出现任何依赖问题,我们建议在[GitHub Codespaces](https://github.com/features/codespaces?WT.mc_id=academic-105485-koreyst)中运行这门课程。 + +这可以通过在您Fork的版本中选择`Code`选项并选择**Codespaces**选项来创建。 + +![显示创建代码空间按钮的对话框](../../../00-course-setup/images/who-will-pay.webp) + +### 3. 存储您的API密钥 + +在构建任何类型的应用程序时,保持API密钥的安全和保密是很重要的。我们建议不要直接在代码中存储任何API密钥。将这些细节提交到公共仓库可能会导致安全问题,甚至在被不法分子使用时产生不必要的费用。 + +## 如何在本地计算机上运行 + +要在本地计算机上运行代码,您需要安装某个版本的[Python](https://www.python.org/downloads/?WT.mc_id=academic-105485-koreyst)。 + +然后要使用该仓库,您需要克隆它: + +```shell +git clone https://github.com/microsoft/generative-ai-for-beginners +cd generative-ai-for-beginners +``` + +一旦您完成所有操作,就可以开始了! + +### 安装 Miniconda(可选步骤) + +[Miniconda](https://conda.io/en/latest/miniconda.html?WT.mc_id=academic-105485-koreyst)是一个轻量级安装程序,用于安装[Conda](https://docs.conda.io/en/latest?WT.mc_id=academic-105485-koreyst)、Python以及一些包。 +Conda本身是一个包管理器,它使得设置和切换不同的Python[**虚拟环境**](https://docs.python.org/3/tutorial/venv.html?WT.mc_id=academic-105485-koreyst)和包变得容易。它也非常适合安装那些无法通过`pip`. + +You can follow the [MiniConda installation guide](https://docs.anaconda.com/free/miniconda/#quick-command-line-install?WT.mc_id=academic-105485-koreyst) to set it up. + +With Miniconda installed, you need to clone the [repository](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst) (if you haven't already) + +Next, you need to create a virtual environment. To do this with Conda, go ahead and create a new environment file (_environment.yml_). If you are following along using Codespaces, create this within the `.devcontainer` directory, thus `.devcontainer/environment.yml`获得的包。 + +继续用以下代码片段填充您的环境文件: + +```yml +name: +channels: + - defaults +dependencies: +- python= +- openai +- python-dotenv +- azure-ai-inference + +``` + +环境文件指定了我们需要的依赖项。`` refers to the name you would like to use for your Conda environment, and `` is the version of Python you would like to use, for example, `3`是Python的最新主要版本。 + +完成后,您可以通过在命令行/终端中运行以下命令来创建您的Conda环境 + +```bash +conda env create --name ai4beg --file .devcontainer/environment.yml # .devcontainer sub path applies to only Codespace setups +conda activate ai4beg +``` + +如果遇到任何问题,请参考[Conda环境指南](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html?WT.mc_id=academic-105485-koreyst)。 + +### 使用带有Python支持扩展的Visual Studio Code + +我们推荐使用[Visual Studio Code (VS Code)](http://code.visualstudio.com/?WT.mc_id=academic-105485-koreyst)编辑器,并安装[Python支持扩展](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-105485-koreyst)来学习这门课程。不过,这只是一个建议,并不是绝对要求。 + +> **注意**:通过在VS Code中打开课程仓库,您可以选择在容器中设置项目。这是因为在课程仓库中有一个[特殊的`.devcontainer`](https://code.visualstudio.com/docs/devcontainers/containers?itemName=ms-python.python&WT.mc_id=academic-105485-koreyst)目录。稍后会详细介绍。 + +> **注意**:一旦您克隆并在VS Code中打开目录,它会自动建议您安装Python支持扩展。 + +> **注意**:如果VS Code建议您在容器中重新打开仓库,请拒绝此请求以便使用本地安装的Python版本。 + +### 在浏览器中使用Jupyter + +您还可以在浏览器中使用[Jupyter环境](https://jupyter.org?WT.mc_id=academic-105485-koreyst)进行项目开发。经典的Jupyter和[Jupyter Hub](https://jupyter.org/hub?WT.mc_id=academic-105485-koreyst)都提供了相当愉快的开发环境,具备自动完成、代码高亮等功能。 + +要在本地启动Jupyter,请前往终端/命令行,导航到课程目录,并执行: + +```bash +jupyter notebook +``` + +或 + +```bash +jupyterhub +``` + +这将启动一个Jupyter实例,并在命令行窗口中显示访问它的URL。 + +一旦您访问该URL,您应该能看到课程大纲,并能够导航到任何`*.ipynb` file. For example, `08-building-search-applications/python/oai-solution.ipynb`. + +### Running in a container + +An alternative to setting everything up on your computer or Codespace is to use a [container](https://en.wikipedia.org/wiki/Containerization_(computing)?WT.mc_id=academic-105485-koreyst). The special `.devcontainer` folder within the course repository makes it possible for VS Code to set up the project within a container. Outside of Codespaces, this will require the installation of Docker, and quite frankly, it involves a bit of work, so we recommend this only to those with experience working with containers. + +One of the best ways to keep your API keys secure when using GitHub Codespaces is by using Codespace Secrets. Please follow the [Codespaces secrets management](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-secrets-for-your-codespaces?WT.mc_id=academic-105485-koreyst) guide to learn more about this. + +## Lessons and Technical Requirements + +The course has 6 concept lessons and 6 coding lessons. + +For the coding lessons, we are using the Azure OpenAI Service. You will need access to the Azure OpenAI service and an API key to run this code. You can apply to get access by [completing this application](https://azure.microsoft.com/products/ai-services/openai-service?WT.mc_id=academic-105485-koreyst). + +While you wait for your application to be processed, each coding lesson also includes a `README.md`文件,在那里您可以查看代码和输出。 + +## 第一次使用Azure OpenAI服务 + +如果这是您第一次使用Azure OpenAI服务,请按照本指南了解如何[创建和部署Azure OpenAI服务资源](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal&WT.mc_id=academic-105485-koreyst)。 + +## 第一次使用OpenAI API + +如果这是您第一次使用OpenAI API,请按照指南了解如何[创建和使用接口](https://platform.openai.com/docs/quickstart?context=pythont&WT.mc_id=academic-105485-koreyst)。 + +## 结识其他学习者 + +我们在官方[AI社区Discord服务器](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst)中创建了频道,供学习者互相认识。这是与其他志同道合的企业家、构建者、学生以及任何希望在生成式AI领域提升自我的人的绝佳网络。 + +[![加入Discord频道](https://dcbadge.limes.pink/api/server/ByRwuEEgH4)](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) + +项目团队也会在这个Discord服务器上帮助任何学习者。 + +## 贡献 + +这门课程是一个开源项目。如果您发现可以改进的地方或问题,请创建一个[Pull Request](https://github.com/microsoft/generative-ai-for-beginners/pulls?WT.mc_id=academic-105485-koreyst)或记录一个[GitHub问题](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst)。 + +项目团队将跟踪所有贡献。为开源做贡献是构建您在生成式AI领域职业生涯的绝佳方式。 + +大多数贡献要求您同意贡献者许可协议(CLA),声明您有权并实际上授予我们使用您贡献的权利。详情请访问[CLA, 贡献者许可协议网站](https://cla.microsoft.com?WT.mc_id=academic-105485-koreyst)。 + +重要提示:在翻译此仓库中的文本时,请确保不使用机器翻译。我们将通过社区验证翻译,因此请仅在您熟练的语言中志愿翻译。 + +当您提交拉取请求时,CLA-bot会自动确定您是否需要提供CLA,并适当地装饰PR(例如,标签、评论)。只需按照bot提供的说明操作。您只需在所有使用我们CLA的仓库中执行一次。 + +此项目采用了[Microsoft开源行为准则](https://opensource.microsoft.com/codeofconduct/?WT.mc_id=academic-105485-koreyst)。欲了解更多信息,请阅读行为准则常见问题解答或通过[电子邮件opencode](opencode@microsoft.com)联系我们,提出任何额外的问题或意见。 + +## 开始吧 + +现在您已经完成了完成这门课程所需的步骤,让我们通过获取[生成式AI和LLM的介绍](../01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst)开始吧。 + +**免责声明**: +本文档使用机器翻译服务进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始文档视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用此翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/00-course-setup/SETUP.md b/translations/zh/00-course-setup/SETUP.md new file mode 100644 index 000000000..b72dccf5d --- /dev/null +++ b/translations/zh/00-course-setup/SETUP.md @@ -0,0 +1,136 @@ +# 设置开发环境 + +我们使用一个[开发容器](https://containers.dev?WT.mc_id=academic-105485-koreyst)来设置此存储库和课程,该容器具有支持 Python3、.NET、Node.js 和 Java 开发的通用运行时。相关配置在此存储库根目录的`.devcontainer/`文件夹中的`devcontainer.json`文件中定义。 + +要激活开发容器,可以在 [GitHub Codespaces](https://docs.github.com/en/codespaces/overview?WT.mc_id=academic-105485-koreyst)(用于云托管的运行时)或 [Docker Desktop](https://docs.docker.com/desktop/?WT.mc_id=academic-105485-koreyst)(用于本地设备托管的运行时)中启动它。阅读[此文档](https://code.visualstudio.com/docs/devcontainers/containers?WT.mc_id=academic-105485-koreyst)以获取有关开发容器如何在 VS Code 中工作的更多详细信息。 + +> [!TIP] +> 我们建议使用 GitHub Codespaces 以最小的努力快速开始。它为个人账户提供了慷慨的[免费使用配额](https://docs.github.com/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#monthly-included-storage-and-core-hours-for-personal-accounts?WT.mc_id=academic-105485-koreyst)。配置[超时](https://docs.github.com/codespaces/setting-your-user-preferences/setting-your-timeout-period-for-github-codespaces?WT.mc_id=academic-105485-koreyst)以停止或删除不活跃的 codespaces,从而最大化配额使用。 + +## 1. 执行作业 + +每节课将有_可选的_作业,可能会提供一种或多种编程语言,包括:Python、.NET/C#、Java 和 JavaScript/TypeScript。本节提供有关执行这些作业的一般指导。 + +### 1.1 Python 作业 + +Python 作业以应用程序(`.py` 文件)或 Jupyter 笔记本(`.ipynb` 文件)的形式提供。 +- 要运行笔记本,在 Visual Studio Code 中打开它,然后点击 _Select Kernel_(在右上角),选择显示的默认 Python 3 选项。现在可以选择 _Run All_ 来执行笔记本。 +- 要从命令行运行 Python 应用程序,请按照作业特定说明确保选择正确的文件并提供所需的参数。 + +## 2. 配置提供者 + +作业**可能**还可以设置为通过支持的服务提供者(如 OpenAI、Azure 或 Hugging Face)来针对一个或多个大型语言模型(LLM)部署进行工作。这些提供了一个_托管端点_(API),我们可以使用正确的凭证(API 密钥或令牌)以编程方式访问。在本课程中,我们讨论这些提供者: + + - [OpenAI](https://platform.openai.com/docs/models?WT.mc_id=academic-105485-koreyst),提供多种模型,包括核心的 GPT 系列。 + - [Azure OpenAI](https://learn.microsoft.com/azure/ai-services/openai/?WT.mc_id=academic-105485-koreyst),专注于企业级准备的 OpenAI 模型 + - [Hugging Face](https://huggingface.co/docs/hub/index?WT.mc_id=academic-105485-koreyst),用于开源模型和推理服务器 + +**您需要使用您自己的账户来进行这些练习**。作业是可选的,因此您可以根据兴趣选择设置一个、全部或不设置任何提供者。以下是注册的一些指导: + +| 注册 | 费用 | API 密钥 | 操作平台 | 备注 | +|:---|:---|:---|:---|:---| +| [OpenAI](https://platform.openai.com/signup?WT.mc_id=academic-105485-koreyst)| [定价](https://openai.com/pricing#language-models?WT.mc_id=academic-105485-koreyst)| [基于项目](https://platform.openai.com/api-keys?WT.mc_id=academic-105485-koreyst) | [无代码,网页](https://platform.openai.com/playground?WT.mc_id=academic-105485-koreyst) | 可用多种模型 | +| [Azure](https://aka.ms/azure/free?WT.mc_id=academic-105485-koreyst)| [定价](https://azure.microsoft.com/pricing/details/cognitive-services/openai-service/?WT.mc_id=academic-105485-koreyst)| [SDK 快速入门](https://learn.microsoft.com/azure/ai-services/openai/quickstart?WT.mc_id=academic-105485-koreyst)| [Studio 快速入门](https://learn.microsoft.com/azure/ai-services/openai/quickstart?WT.mc_id=academic-105485-koreyst) | [必须提前申请访问](https://learn.microsoft.com/azure/ai-services/openai/?WT.mc_id=academic-105485-koreyst)| +| [Hugging Face](https://huggingface.co/join?WT.mc_id=academic-105485-koreyst) | [定价](https://huggingface.co/pricing) | [访问令牌](https://huggingface.co/docs/hub/security-tokens?WT.mc_id=academic-105485-koreyst) | [Hugging Chat](https://huggingface.co/chat/?WT.mc_id=academic-105485-koreyst)| [Hugging Chat 有限的模型](https://huggingface.co/chat/models?WT.mc_id=academic-105485-koreyst) | +| | | | | | + +请按照下面的说明_配置_此存储库以与不同的提供者一起使用。需要特定提供者的作业将在其文件名中包含以下标签之一: + - `aoai` - 需要 Azure OpenAI 端点,密钥 + - `oai` - 需要 OpenAI 端点,密钥 + - `hf` - 需要 Hugging Face 令牌 + +您可以配置一个、没有或所有提供者。相关作业将仅在缺少凭证时出错。 + +### 2.1. 创建 `.env` 文件 + +我们假设您已阅读上述指导并注册了相关提供者,并获得了所需的身份验证凭证(API_KEY 或令牌)。对于 Azure OpenAI,我们假设您还拥有一个有效的 Azure OpenAI 服务(端点)部署,并至少部署了一个 GPT 模型用于聊天完成。 + +下一步是按如下方式配置您的**本地环境变量**: + +1. 在根文件夹中查找一个 `.env.copy` 文件,该文件应具有如下内容: + + ```bash + # OpenAI Provider + OPENAI_API_KEY='' + + ## Azure OpenAI + AZURE_OPENAI_API_VERSION='2024-02-01' # Default is set! + AZURE_OPENAI_API_KEY='' + AZURE_OPENAI_ENDPOINT='' + AZURE_OPENAI_DEPLOYMENT='' + AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT='' + + ## Hugging Face + HUGGING_FACE_API_KEY='' + ``` + +2. 使用下面的命令将该文件复制到 `.env`。该文件是 _gitignore-d_,可以保护秘密信息。 + + ```bash + cp .env.copy .env + ``` + +3. 按照下一节中的说明填写值(替换 `=` 右侧的占位符)。 + +3. (可选)如果您使用 GitHub Codespaces,您可以选择将环境变量保存为与此存储库关联的 _Codespaces secrets_。在这种情况下,您无需设置本地 .env 文件。**但是,请注意此选项仅在您使用 GitHub Codespaces 时有效。** 如果您使用 Docker Desktop,仍然需要设置 .env 文件。 + +### 2.2. 填写 `.env` 文件 + +让我们快速看一下变量名称,以了解它们代表什么: + +| 变量 | 描述 | +| :--- | :--- | +| HUGGING_FACE_API_KEY | 这是您在个人资料中设置的用户访问令牌 | +| OPENAI_API_KEY | 这是用于非 Azure OpenAI 端点的服务授权密钥 | +| AZURE_OPENAI_API_KEY | 这是使用该服务的授权密钥 | +| AZURE_OPENAI_ENDPOINT | 这是 Azure OpenAI 资源的已部署端点 | +| AZURE_OPENAI_DEPLOYMENT | 这是_文本生成_模型部署端点 | +| AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT | 这是_文本嵌入_模型部署端点 | +| | | + +注意:最后两个 Azure OpenAI 变量分别反映了用于聊天完成(文本生成)和向量搜索(嵌入)的默认模型。设置它们的说明将在相关作业中定义。 + +### 2.3 配置 Azure:通过门户 + +Azure OpenAI 端点和密钥值可以在 [Azure Portal](https://portal.azure.com?WT.mc_id=academic-105485-koreyst) 中找到,所以我们从那里开始。 + +1. 转到 [Azure Portal](https://portal.azure.com?WT.mc_id=academic-105485-koreyst) +1. 点击侧边栏(左侧菜单)中的 **Keys and Endpoint** 选项。 +1. 点击 **Show Keys** - 您应该会看到以下内容:KEY 1、KEY 2 和 Endpoint。 +1. 使用 KEY 1 的值作为 AZURE_OPENAI_API_KEY +1. 使用 Endpoint 的值作为 AZURE_OPENAI_ENDPOINT + +接下来,我们需要获取已部署特定模型的端点。 + +1. 点击 Azure OpenAI 资源的侧边栏(左侧菜单)中的 **Model deployments** 选项。 +1. 在目标页面上,点击 **Manage Deployments** + +这将带您到 Azure OpenAI Studio 网站,在这里我们将找到如下所述的其他值。 + +### 2.4 配置 Azure:通过 Studio + +1. 按照上述说明,从您的资源导航到 [Azure OpenAI Studio](https://oai.azure.com?WT.mc_id=academic-105485-koreyst)。 +1. 点击 **Deployments** 标签(侧边栏,左侧)以查看当前部署的模型。 +1. 如果您的目标模型尚未部署,请使用 **Create new deployment** 进行部署。 +1. 您将需要一个_文本生成_模型 - 我们推荐:**gpt-35-turbo** +1. 您将需要一个_文本嵌入_模型 - 我们推荐 **text-embedding-ada-002** + +现在更新环境变量以反映所使用的_部署名称_。这通常与模型名称相同,除非您明确更改它。因此,作为示例,您可能有: + +```bash +AZURE_OPENAI_DEPLOYMENT='gpt-35-turbo' +AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT='text-embedding-ada-002' +``` + +**完成后不要忘记保存 .env 文件**。现在可以退出文件并返回运行笔记本的说明。 + +### 2.5 配置 OpenAI:通过个人资料 + +您的 OpenAI API 密钥可以在您的 [OpenAI 账户](https://platform.openai.com/api-keys?WT.mc_id=academic-105485-koreyst)中找到。如果没有,您可以注册一个账户并创建一个 API 密钥。一旦您拥有密钥,可以将其用于在 `.env` 文件中填充 `OPENAI_API_KEY` 变量。 + +### 2.6 配置 Hugging Face:通过个人资料 + +您的 Hugging Face 令牌可以在您的个人资料中的 [Access Tokens](https://huggingface.co/settings/tokens?WT.mc_id=academic-105485-koreyst) 下找到。不要公开发布或分享这些。相反,为此项目创建一个新令牌,并将其复制到 `.env` 文件中的 `HUGGING_FACE_API_KEY` 变量下。_注意:_ 这在技术上不是一个 API 密钥,但用于身份验证,因此我们保持这个命名约定以保持一致性。 + +**免责声明**: +本文档使用基于机器的人工智能翻译服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文档视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/01-introduction-to-genai/README.md b/translations/zh/01-introduction-to-genai/README.md new file mode 100644 index 000000000..33920b6da --- /dev/null +++ b/translations/zh/01-introduction-to-genai/README.md @@ -0,0 +1,137 @@ +# 生成式AI和大型语言模型简介 + +[![生成式AI和大型语言模型简介](../../../translated_images/01-lesson-banner.png?WT.e847a56bbd30dfd9341d21c4e957c3bcd9de94d06aa5bc91692a69cb1af2c994.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson-1-gh?WT.mc_id=academic-105485-koreyst) + +_(点击上方图片观看本课视频)_ + +生成式AI是一种能够生成文本、图像和其他类型内容的人工智能。它的奇妙之处在于,它让AI变得更大众化,任何人只需输入一个文本提示,一句自然语言的句子,就能使用它。你不需要学习Java或SQL这样的语言来实现有价值的东西,只需用你的语言陈述你的需求,AI模型就会给出建议。其应用和影响是巨大的,你可以在几秒钟内撰写或理解报告、编写应用程序等。 + +在本课程中,我们将探讨我们的创业公司如何利用生成式AI在教育领域解锁新场景,以及我们如何应对其应用的社会影响和技术限制所带来的不可避免的挑战。 + +## 介绍 + +本课将涵盖: + +- 业务场景介绍:我们的创业理念和使命。 +- 生成式AI及其在当前技术环境中的地位。 +- 大型语言模型的内部工作原理。 +- 大型语言模型的主要功能和实际用例。 + +## 学习目标 + +完成本课后,你将了解: + +- 什么是生成式AI以及大型语言模型如何运作。 +- 如何利用大型语言模型实现不同的用例,重点关注教育场景。 + +## 场景:我们的教育创业公司 + +生成式人工智能(AI)代表了AI技术的顶峰,推动了曾经被认为不可能的边界。生成式AI模型有多种功能和应用,但在本课程中,我们将探讨它如何通过一个虚构的创业公司来革新教育。我们将称这个创业公司为_我们的创业公司_。我们的创业公司在教育领域工作,其雄心勃勃的使命宣言是 + +> _在全球范围内提高学习的可访问性,确保教育的公平获取,并根据每位学习者的需求提供个性化的学习体验_。 + +我们的创业团队意识到,如果不利用现代最强大的工具之一——大型语言模型(LLMs),我们将无法实现这一目标。 + +生成式AI预计将彻底改变我们今天的学习和教学方式,学生们可以全天24小时使用虚拟教师获取大量信息和示例,教师们可以利用创新工具评估学生并提供反馈。 + +![五名年轻学生正在看显示器 - 由DALLE2创作的图像](../../../translated_images/students-by-DALLE2.png?WT.540d623be2689660f18d0c126177502c651e2269597164cc09b60d7d90b830cf.zh.mc_id=academic-105485-koreyst) + +首先,让我们定义一些我们将在整个课程中使用的基本概念和术语。 + +## 我们如何获得生成式AI? + +尽管最近生成式AI模型的发布引起了非凡的_热潮_,但这项技术已经历经数十年的发展,最早的研究努力可以追溯到60年代。现在,AI已经具备了人类的认知能力,例如对话,例如[OpenAI ChatGPT](https://openai.com/chatgpt)或[Bing Chat](https://www.microsoft.com/edge/features/bing-chat?WT.mc_id=academic-105485-koreyst),它们也使用GPT模型进行网络搜索Bing对话。 + +往回追溯,最早的AI原型是打字机式聊天机器人,依赖于从专家组中提取的知识库并在计算机中表示。知识库中的答案是由输入文本中出现的关键词触发的。然而,很快就清楚这种使用打字机式聊天机器人的方法无法很好地扩展。 + +### AI的统计方法:机器学习 + +90年代出现了一个转折点,采用统计方法进行文本分析。这导致了新算法的发展——被称为机器学习——能够从数据中学习模式,而无需明确编程。这种方法使机器能够模拟人类语言理解:通过在文本-标签配对上训练统计模型,使模型能够用预定义标签分类未知输入文本,该标签代表消息的意图。 + +### 神经网络和现代虚拟助手 + +在最近的时间里,硬件技术的进步能够处理更大量的数据和更复杂的计算,促进了AI领域的研究,导致了高级机器学习算法的发展——称为神经网络或深度学习算法。 + +神经网络(尤其是循环神经网络——RNNs)显著增强了自然语言处理,能够以更有意义的方式表示文本的意义,重视句子中单词的上下文。 + +这项技术推动了新世纪第一个十年诞生的虚拟助手,非常擅长理解人类语言,识别需求并执行满足需求的操作——例如用预定义脚本回答或使用第三方服务。 + +### 现今,生成式AI + +这就是我们今天如何来到生成式AI的,生成式AI可以被视为深度学习的一个子集。 + +![AI、ML、DL和生成式AI](../../../translated_images/AI-diagram.png?WT.e126d57e1a443697cd851d5d04d66753225b4d910f4aff65f9f28215b528471a.zh.mc_id=academic-105485-koreyst) + +经过数十年的AI领域研究,一种新的模型架构——称为_Transformer_——克服了RNNs的限制,能够将更长的文本序列作为输入。Transformers基于注意力机制,使模型能够对其接收到的输入赋予不同的权重,‘更加关注’最相关信息集中的地方,而不考虑它们在文本序列中的顺序。 + +大多数最近的生成式AI模型——也称为大型语言模型(LLMs),因为它们处理文本输入和输出——确实基于这种架构。这些模型的有趣之处在于——在大量来自书籍、文章和网站的未标记数据上训练——它们可以适应各种任务,并生成具有创造性表象的语法正确的文本。因此,它们不仅极大地增强了机器‘理解’输入文本的能力,还使其能够生成以人类语言呈现的原创响应。 + +## 大型语言模型如何工作? + +在下一章中,我们将探索不同类型的生成式AI模型,但现在让我们看看大型语言模型如何工作,重点关注OpenAI GPT(生成预训练变压器)模型。 + +- **Tokenizer,文本到数字**:大型语言模型接收文本作为输入,并生成文本作为输出。然而,作为统计模型,它们更擅长处理数字而不是文本序列。这就是为什么每个输入在被核心模型使用之前都由tokenizer处理。一个token是一个文本块——由可变数量的字符组成,因此tokenizer的主要任务是将输入拆分为token数组。然后,每个token被映射到一个token索引,即原始文本块的整数编码。 + +![Tokenization示例](../../../translated_images/tokenizer-example.png?WT.3b4be927057ceb39216ffc617cde2fd4d843e0d7557fc81d08a0018831f601ed.zh.mc_id=academic-105485-koreyst) + +- **预测输出token**:给定n个token作为输入(最大n因模型而异),模型能够预测一个token作为输出。然后,该token被纳入下一次迭代的输入中,以扩展窗口模式,从而提供更好的用户体验,获得一个(或多个)句子作为答案。这解释了为什么如果你曾经玩过ChatGPT,你可能注意到有时它看起来像是在句子中间停下来。 + +- **选择过程,概率分布**:输出token由模型根据其在当前文本序列之后出现的概率选择。这是因为模型预测了所有可能‘下一个token’的概率分布,基于其训练进行计算。然而,并不总是选择具有最高概率的token作为结果分布的一部分。为了模拟创造性思维过程,这种选择中添加了一定程度的随机性,并且可以通过一个称为温度的模型参数进行调整。 + +## 我们的创业公司如何利用大型语言模型? + +现在我们对大型语言模型的内部工作有了更好的理解,让我们看看一些它们可以很好地执行的最常见任务的实际示例,关注我们的业务场景。我们说大型语言模型的主要能力是_从头生成文本,从自然语言编写的文本输入开始_。 + +但是什么样的文本输入和输出呢? +大型语言模型的输入被称为提示,而输出被称为完成,这个术语指的是模型生成下一个token以完成当前输入的机制。我们将深入探讨什么是提示以及如何设计它以充分利用我们的模型。但现在,我们只需说提示可能包括: + +- 指定我们期望模型输出类型的**指令**。这个指令有时可能包含一些示例或一些附加数据。 + + 1. 文章、书籍、产品评论等的总结,以及从非结构化数据中提取见解。 + + ![总结示例](../../../translated_images/summarization-example.png?WT.cf0bac4d43b9de29ec37e1b7707d9bd67e030f4e884a0ae778c6a3c36be77d79.zh.mc_id=academic-105485-koreyst) + + 2. 文章、论文、作业或更多内容的创造性构思和设计。 + + ![创造性写作示例](../../../translated_images/creative-writing-example.png?WT.04b03c92f46ed96df1138828e37760ac81e06eaa8602de8c4b175a9c514c9a14.zh.mc_id=academic-105485-koreyst) + +- 以与代理对话的形式提出的**问题**。 + + ![对话示例](../../../translated_images/conversation-example.png?WT.f904fd4c48fbf695b8e5d334e1ec02d66830bbc679ad4b5195f1c563e9bfbdc1.zh.mc_id=academic-105485-koreyst) + +- 要完成的**文本块**,这隐含着寻求写作帮助。 + + ![文本完成示例](../../../translated_images/text-completion-example.png?WT.9a641431b14ebbbcaa7d22def9729cf8cc7ab358b1dbc948653e43af47e41f73.zh.mc_id=academic-105485-koreyst) + +- 一段**代码**,同时要求解释和记录它,或者一条评论请求生成执行特定任务的代码片段。 + + ![编码示例](../../../translated_images/coding-example.png?WT.75933a45164ffb74ffbb4a72c8f77b0f76ebcdc676a58ad2871de5d32db63515.zh.mc_id=academic-105485-koreyst) + +以上示例相当简单,并不想成为大型语言模型功能的详尽演示。它们只是想展示使用生成式AI的潜力,尤其是在教育上下文中,但不限于此。 + +此外,生成式AI模型的输出并不完美,有时模型的创造性可能会适得其反,导致输出是人类用户可能解读为现实扭曲的词语组合,或者可能是冒犯性的。生成式AI不是智能的——至少在更全面的智能定义中,包括批判性和创造性推理或情感智能;它不是确定性的,也不值得信赖,因为虚构内容,例如错误的引用、内容和陈述,可能与正确信息结合在一起,并以一种令人信服和自信的方式呈现。在接下来的课程中,我们将处理所有这些限制,并看看我们可以做些什么来减轻它们。 + +## 作业 + +你的作业是阅读更多关于[生成式AI](https://en.wikipedia.org/wiki/Generative_artificial_intelligence?WT.mc_id=academic-105485-koreyst)的内容,并尝试识别一个你今天可以加入生成式AI但目前还没有的领域。与“旧方式”相比,影响会有何不同,你能做一些以前无法做到的事情吗,或者你会更快吗?写一篇300字的总结,描述你的梦想AI创业公司会是什么样子,并包括像“问题”、“我将如何使用AI”、“影响”和可选的商业计划这样的标题。 + +如果你完成了这个任务,你甚至可能准备好申请微软的孵化器,[Microsoft for Startups Founders Hub](https://www.microsoft.com/startups?WT.mc_id=academic-105485-koreyst),我们为Azure、OpenAI、指导等提供积分,快来看看吧! + +## 知识检测 + +关于大型语言模型,哪些是正确的? + +1. 每次都会得到完全相同的响应。 +1. 完美无缺,擅长加法、生成工作代码等。 +1. 尽管使用相同的提示,响应可能会有所不同。它也非常擅长为你提供某些事物的初稿,无论是文本还是代码。但你需要改进结果。 + +答:3,LLM是非确定性的,响应会有所不同,然而,你可以通过温度设置来控制其变化。你也不应该期望它完美地完成事情,它是为你做繁重工作,这通常意味着你得到一个好的初次尝试,需要逐步改进。 + +## 干得好!继续前进 + +完成本课后,查看我们的[生成式AI学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst),继续提升你的生成式AI知识! + +前往第2课,我们将探讨如何[探索和比较不同的LLM类型](../02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst)! + +**免责声明**: +本文档是使用机器翻译服务翻译的。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于关键信息,建议进行专业人工翻译。对于因使用本翻译而产生的任何误解或误释,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/02-exploring-and-comparing-different-llms/README.md b/translations/zh/02-exploring-and-comparing-different-llms/README.md new file mode 100644 index 000000000..e83187c5f --- /dev/null +++ b/translations/zh/02-exploring-and-comparing-different-llms/README.md @@ -0,0 +1,203 @@ +# 探索和比较不同的 LLMs + +[![探索和比较不同的 LLMs](../../../translated_images/02-lesson-banner.png?WT.96d85175e46909d65f6895923ed5f3ad0ae5e874792ccad49542fcfe8ebd12dd.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson2-gh?WT.mc_id=academic-105485-koreyst) + +> _点击上方图片观看本课视频_ + +在上一课中,我们了解到生成式 AI 如何改变技术格局,大型语言模型(LLMs)如何运作,以及像我们这样的初创企业如何将其应用于用例并实现增长!在本章中,我们将比较和对比不同类型的大型语言模型(LLMs),以了解它们的优缺点。 + +我们初创公司的下一步是探索当前的 LLMs 格局,并了解哪些适合我们的用例。 + +## 介绍 + +本课将涵盖: + +- 当前格局中的不同类型的 LLMs。 +- 在 Azure 中测试、迭代和比较不同的模型以满足您的用例。 +- 如何部署 LLM。 + +## 学习目标 + +完成本课后,您将能够: + +- 为您的用例选择合适的模型。 +- 理解如何测试、迭代和提高模型性能。 +- 知道企业如何部署模型。 + +## 理解不同类型的 LLMs + +LLMs 可以根据其架构、训练数据和用例进行多种分类。理解这些差异将帮助我们的初创公司为场景选择合适的模型,并了解如何测试、迭代和提高性能。 + +LLM 模型有许多不同类型,您选择的模型取决于您的用途、数据、预算等。 + +根据您是否希望使用模型进行文本、音频、视频、图像生成等,您可能会选择不同类型的模型。 + +- **音频和语音识别**。对于此目的,Whisper 类型的模型是一个不错的选择,因为它们是通用的,旨在进行语音识别。它们经过多样化音频的训练,能够执行多语言语音识别。了解更多关于 [Whisper 类型模型的信息](https://platform.openai.com/docs/models/whisper?WT.mc_id=academic-105485-koreyst)。 + +- **图像生成**。对于图像生成,DALL-E 和 Midjourney 是两个非常知名的选择。DALL-E 由 Azure OpenAI 提供。[阅读更多关于 DALL-E 的信息](https://platform.openai.com/docs/models/dall-e?WT.mc_id=academic-105485-koreyst),也可以在本课程的第 9 章中找到相关内容。 + +- **文本生成**。大多数模型都经过文本生成的训练,您可以从 GPT-3.5 到 GPT-4 中选择多种选项。它们的成本不同,其中 GPT-4 是最昂贵的。值得在 [Azure OpenAI playground](https://oai.azure.com/portal/playground?WT.mc_id=academic-105485-koreyst) 中查看,以评估哪个模型在能力和成本方面最适合您的需求。 + +- **多模态**。如果您希望处理多种类型的输入和输出数据,您可能需要考虑 [gpt-4 turbo with vision 或 gpt-4o](https://learn.microsoft.com/azure/ai-services/openai/concepts/models#gpt-4-and-gpt-4-turbo-models?WT.mc_id=academic-105485-koreyst) 等模型——这是 OpenAI 模型的最新版本,能够将自然语言处理与视觉理解结合起来,实现通过多模态界面进行交互。 + +选择一个模型意味着您获得了一些基本功能,但这可能还不够。通常您有公司特定的数据,您需要以某种方式告知 LLM。对此有几种不同的方法,在接下来的章节中会详细介绍。 + +### 基础模型与 LLMs + +基础模型这一术语由 [斯坦福研究人员提出](https://arxiv.org/abs/2108.07258?WT.mc_id=academic-105485-koreyst),定义为符合某些标准的 AI 模型,例如: + +- **它们使用无监督学习或自监督学习进行训练**,这意味着它们是在未标记的多模态数据上进行训练的,不需要人工注释或数据标记。 +- **它们是非常大的模型**,基于非常深的神经网络,训练了数十亿个参数。 +- **它们通常旨在作为其他模型的“基础”**,这意味着可以在其基础上构建其他模型,这可以通过微调来完成。 + +![基础模型与 LLMs](../../../translated_images/FoundationModel.png?WT.9690c2a9f6be278baf730a5b26ea901ac6d6ede04cad555ef2b59d774ba557eb.zh.mc_id=academic-105485-koreyst) + +图片来源:[基础模型和大型语言模型的基本指南 | 作者:Babar M Bhatti | Medium](https://thebabar.medium.com/essential-guide-to-foundation-models-and-large-language-models-27dab58f7404) + +为了进一步阐明这种区别,让我们以 ChatGPT 为例。要构建 ChatGPT 的第一个版本,使用了名为 GPT-3.5 的模型作为基础模型。这意味着 OpenAI 使用了一些特定于聊天的数据,创建了一个经过调整的 GPT-3.5 版本,专注于在对话场景中表现良好,例如聊天机器人。 + +![基础模型](../../../translated_images/Multimodal.png?WT.29151b07403f77b38d7dc2a3069f4c171198d59c9df6bdfccd4326c209db4432.zh.mc_id=academic-105485-koreyst) + +图片来源:[2108.07258.pdf (arxiv.org)](https://arxiv.org/pdf/2108.07258.pdf?WT.mc_id=academic-105485-koreyst) + +### 开源模型与专有模型 + +另一种对 LLMs 的分类方式是它们是开源的还是专有的。 + +开源模型是公开可用的,任何人都可以使用。它们通常由创建它们的公司或研究社区提供。这些模型可以被检查、修改和定制用于 LLMs 的各种用例。然而,它们并不总是为生产用途优化的,可能不如专有模型那样高效。此外,开源模型的资金可能有限,可能不会长期维护或更新为最新的研究。流行的开源模型示例包括 [Alpaca](https://crfm.stanford.edu/2023/03/13/alpaca.html?WT.mc_id=academic-105485-koreyst)、[Bloom](https://huggingface.co/bigscience/bloom) 和 [LLaMA](https://llama.meta.com)。 + +专有模型是由公司拥有的,不向公众开放。这些模型通常为生产用途进行了优化。然而,它们不允许被检查、修改或定制用于不同的用例。此外,它们并不总是免费提供的,可能需要订阅或付费使用。此外,用户无法控制用于训练模型的数据,这意味着他们应信任模型所有者,以确保对数据隐私和 AI 负责任使用的承诺。流行的专有模型示例包括 [OpenAI 模型](https://platform.openai.com/docs/models/overview?WT.mc_id=academic-105485-koreyst)、[Google Bard](https://sapling.ai/llm/bard?WT.mc_id=academic-105485-koreyst) 或 [Claude 2](https://www.anthropic.com/index/claude-2?WT.mc_id=academic-105485-koreyst)。 + +### 嵌入与图像生成与文本和代码生成 + +LLMs 还可以根据它们生成的输出进行分类。 + +嵌入是一组可以将文本转换为数值形式的模型,称为嵌入,即输入文本的数值表示。嵌入使机器更容易理解单词或句子之间的关系,并可以作为其他模型的输入,例如在数值数据上表现更好的分类模型或聚类模型。嵌入模型通常用于迁移学习,其中为数据丰富的替代任务构建模型,然后将模型权重(嵌入)重新用于其他下游任务。此类别的示例是 [OpenAI 嵌入](https://platform.openai.com/docs/models/embeddings?WT.mc_id=academic-105485-koreyst)。 + +![嵌入](../../../translated_images/Embedding.png?WT.15a2282d046c6d94a54f553fa9e7f19e3ef0e65f9eb05f4d476a5d28b2dead18.zh.mc_id=academic-105485-koreyst) + +图像生成模型是生成图像的模型。这些模型通常用于图像编辑、图像合成和图像翻译。图像生成模型通常在大型图像数据集上进行训练,例如 [LAION-5B](https://laion.ai/blog/laion-5b/?WT.mc_id=academic-105485-koreyst),可以用于生成新图像或使用修补、超分辨率和上色技术编辑现有图像。示例包括 [DALL-E-3](https://openai.com/dall-e-3?WT.mc_id=academic-105485-koreyst) 和 [Stable Diffusion 模型](https://github.com/Stability-AI/StableDiffusion?WT.mc_id=academic-105485-koreyst)。 + +![图像生成](../../../translated_images/Image.png?WT.6a1995ff7d9be5a713e6aaee5f1625f31620756937c283e292ef5ffe1e30ed11.zh.mc_id=academic-105485-koreyst) + +文本和代码生成模型是生成文本或代码的模型。这些模型通常用于文本摘要、翻译和问答。文本生成模型通常在大型文本数据集上进行训练,例如 [BookCorpus](https://www.cv-foundation.org/openaccess/content_iccv_2015/html/Zhu_Aligning_Books_and_ICCV_2015_paper.html?WT.mc_id=academic-105485-koreyst),可以用于生成新文本或回答问题。代码生成模型,如 [CodeParrot](https://huggingface.co/codeparrot?WT.mc_id=academic-105485-koreyst),通常在大型代码数据集上进行训练,例如 GitHub,可以用于生成新代码或修复现有代码中的错误。 + +![文本和代码生成](../../../translated_images/Text.png?WT.b55b7b9b96faac1d758fb555436c56c5a323a55743b75e70198160caca3fb73c.zh.mc_id=academic-105485-koreyst) + +### 编码器-解码器与仅解码器 + +为了讨论 LLMs 的不同架构类型,我们使用一个类比。 + +想象一下,您的经理给您一个任务,为学生编写一个测验。您有两个同事;一个负责创建内容,另一个负责审核。 + +内容创建者就像一个仅解码器模型,他们可以查看主题,看到您已经写了什么,然后根据这些内容编写课程。他们在编写引人入胜和信息丰富的内容方面非常出色,但在理解主题和学习目标方面不太擅长。仅解码器模型的例子有 GPT 系列模型,如 GPT-3。 + +审核者就像一个仅编码器模型,他们查看编写的课程和答案,注意它们之间的关系并理解上下文,但不擅长生成内容。仅编码器模型的例子是 BERT。 + +想象一下,我们也可以有一个既能创建又能审核测验的人,这就是编码器-解码器模型。例子有 BART 和 T5。 + +### 服务与模型 + +现在,让我们讨论服务与模型的区别。服务是由云服务提供商提供的产品,通常是模型、数据和其他组件的组合。模型是服务的核心组件,通常是基础模型,例如 LLM。 + +服务通常为生产用途进行了优化,通常比模型更容易使用,通过图形用户界面。然而,服务并不总是免费提供的,可能需要订阅或付费使用,以换取利用服务所有者的设备和资源,优化开支并轻松扩展。服务的一个例子是 [Azure OpenAI Service](https://learn.microsoft.com/azure/ai-services/openai/overview?WT.mc_id=academic-105485-koreyst),提供按使用量付费的计划,这意味着用户根据使用服务的多少按比例收费。此外,Azure OpenAI Service 在模型功能的基础上提供企业级安全和负责任的 AI 框架。 + +模型仅是神经网络,包含参数、权重等。允许公司本地运行,但需要购买设备、构建结构以扩展并购买许可证或使用开源模型。像 LLaMA 这样的模型可以使用,但需要计算能力来运行模型。 + +## 如何在 Azure 上测试和迭代不同的模型以了解性能 + +一旦我们的团队探索了当前的 LLMs 格局并确定了一些适合他们场景的候选者,下一步就是在他们的数据和工作负载上测试它们。这是一个通过实验和测量完成的迭代过程。 +我们在前面段落中提到的大多数模型(OpenAI 模型、开源模型如 Llama2 和 Hugging Face transformers)都可以在 [Azure AI Studio](https://ai.azure.com/?WT.mc_id=academic-105485-koreyst) 的 [Model Catalog](https://learn.microsoft.com/azure/ai-studio/how-to/model-catalog-overview?WT.mc_id=academic-105485-koreyst) 中找到。 + +[Azure AI Studio](https://learn.microsoft.com/azure/ai-studio/what-is-ai-studio?WT.mc_id=academic-105485-koreyst) 是一个云平台,专为开发人员构建生成式 AI 应用程序并管理整个开发生命周期而设计——从实验到评估——通过将所有 Azure AI 服务组合到一个单一的中心,并提供一个方便的 GUI。Azure AI Studio 中的 Model Catalog 使用户能够: + +- 在目录中找到感兴趣的基础模型——无论是专有的还是开源的,通过任务、许可证或名称进行筛选。为了提高搜索性,模型被组织成集合,如 Azure OpenAI 集合、Hugging Face 集合等。 + +![模型目录](../../../translated_images/AzureAIStudioModelCatalog.png?WT.cd7b78fc6a7b010869adb0defabce1ea5fbe62131aa7f59e54a083be8d789d24.zh.mc_id=academic-105485-koreyst) + +- 查看模型卡,包括预期用途和训练数据的详细描述、代码示例和内部评估库的评估结果。 + +![模型卡](../../../translated_images/ModelCard.png?WT.cd385d3d0228f86cef5987e3074be75f377a95ba505d6805f7c6965dc5972693.zh.mc_id=academic-105485-koreyst) +- 通过[模型基准测试](https://learn.microsoft.com/azure/ai-studio/how-to/model-benchmarks?WT.mc_id=academic-105485-koreyst)面板,比较行业内可用的模型和数据集的基准测试,以评估哪个符合业务场景。 + +![模型基准测试](../../../translated_images/ModelBenchmarks.png?WT.634f688bb2a74b3c90a9212ecfb9b99045405b2414be3d17429cfea319c06f61.zh.mc_id=academic-105485-koreyst) + +- 在自定义训练数据上微调模型,以利用Azure AI Studio的实验和跟踪功能,提高模型在特定工作负载下的性能。 + +![模型微调](../../../translated_images/FineTuning.png?WT.523a6ab7580c924e42e8478d072fb670f879033779b8ab5a6abb155d2fc63d5a.zh.mc_id=academic-105485-koreyst) + +- 将原始预训练模型或微调版本部署到远程实时推理 - 管理计算 - 或无服务器API端点 - [按需付费](https://learn.microsoft.com/azure/ai-studio/how-to/model-catalog-overview#model-deployment-managed-compute-and-serverless-api-pay-as-you-go?WT.mc_id=academic-105485-koreyst) - 以便应用程序可以使用它。 + +![模型部署](../../../translated_images/ModelDeploy.png?WT.a765ca6b7a396eb5d2fd346f8a211542f6fe578e2218bbe16f9fcdb5ca8f3661.zh.mc_id=academic-105485-koreyst) + +> [!NOTE] +> 目录中的所有模型目前并不都支持微调和/或按需付费部署。请查看模型卡以了解模型的能力和限制。 + +## 改善LLM结果 + +我们与初创团队一起探索了不同类型的LLM和云平台(Azure Machine Learning),使我们能够比较不同的模型,在测试数据上评估它们,提高性能并将其部署在推理端点上。 + +但何时应该考虑微调模型而不是使用预训练模型呢?还有其他方法可以提高模型在特定工作负载上的性能吗? + +企业可以采用多种方法从LLM中获得所需结果。您可以选择不同类型的模型,在生产环境中部署LLM时具有不同的训练程度、复杂性、成本和质量。以下是一些不同的方法: + +- **带上下文的提示工程**。这个想法是当您提示时提供足够的上下文,以确保您得到所需的响应。 + +- **检索增强生成,RAG**。例如,您的数据可能存在于数据库或网络端点中,为确保在提示时包含这些数据或其子集,您可以获取相关数据并将其作为用户提示的一部分。 + +- **微调模型**。在这里,您在自己的数据上进一步训练模型,使模型更加精确和响应您的需求,但可能成本较高。 + +![LLM部署](../../../translated_images/Deploy.png?WT.0eeb36a208bf2bf97ea1058e54c74e13f5c810679cd7f3600cb2084b98d737be.zh.mc_id=academic-105485-koreyst) + +图片来源:[企业部署LLM的四种方式 | Fiddler AI博客](https://www.fiddler.ai/blog/four-ways-that-enterprises-deploy-llms?WT.mc_id=academic-105485-koreyst) + +### 带上下文的提示工程 + +预训练的LLM在通用自然语言任务上表现非常好,即使通过一个简短的提示(如需要完成的句子或问题)调用它们——所谓的“零样本”学习。 + +然而,用户能越详细地构建他们的查询,包括详细的请求和示例——上下文,答案就越准确,越接近用户的期望。在这种情况下,如果提示只包含一个示例,我们称之为“一次样本”学习,如果包含多个示例,则称为“少样本学习”。带上下文的提示工程是启动的最具成本效益的方法。 + +### 检索增强生成(RAG) + +LLM有一个限制,即它们只能使用在训练过程中使用过的数据来生成答案。这意味着它们对训练过程之后发生的事实一无所知,也无法访问非公开信息(如公司数据)。 +通过RAG可以克服这一问题,这是一种通过外部数据块增强提示的技术,考虑到提示长度限制。这由向量数据库工具(如[Azure Vector Search](https://learn.microsoft.com/azure/search/vector-search-overview?WT.mc_id=academic-105485-koreyst))支持,从各种预定义数据源中检索有用的数据块并将其添加到提示上下文中。 + +当企业没有足够的数据、时间或资源来微调LLM,但仍希望在特定工作负载上提高性能并降低虚构风险(即现实的神秘化或有害内容)时,这项技术非常有帮助。 + +### 微调模型 + +微调是一种利用迁移学习将模型“适应”下游任务或解决特定问题的过程。与少样本学习和RAG不同,它生成一个新的模型,具有更新的权重和偏差。它需要一组训练示例,包括单个输入(提示)及其相关的输出(完成)。 +如果出现以下情况,这将是首选的方法: + +- **使用微调模型**。企业希望使用微调的能力较弱的模型(如嵌入模型)而不是高性能模型,从而实现更具成本效益和快速的解决方案。 + +- **考虑延迟**。延迟对于特定用例很重要,因此不可能使用非常长的提示或示例数量不符合提示长度限制。 + +- **保持更新**。企业拥有大量高质量数据和真实标签,并且有资源随时间保持这些数据的更新。 + +### 训练模型 + +从头开始训练LLM无疑是最困难和最复杂的方法,要求大量数据、熟练资源和适当的计算能力。只有在企业有领域特定的用例和大量领域中心数据的情况下才应考虑此选项。 + +## 知识检查 + +提高LLM完成结果的好方法是什么? + +1. 带上下文的提示工程 +1. RAG +1. 微调模型 + +A:3,如果您有时间、资源和高质量的数据,微调是保持更新的更好选择。然而,如果您希望改善事情并且时间不足,值得首先考虑RAG。 + +## 🚀 挑战 + +阅读更多关于如何[使用RAG](https://learn.microsoft.com/azure/search/retrieval-augmented-generation-overview?WT.mc_id=academic-105485-koreyst)为您的业务服务的信息。 + +## 做得很好,继续学习 + +完成本课后,查看我们的[生成式AI学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst),继续提升您的生成式AI知识! + +前往第3课,我们将学习如何[负责任地构建生成式AI](../03-using-generative-ai-responsibly/README.md?WT.mc_id=academic-105485-koreyst)! + +**免责声明**: +本文件是使用基于机器的AI翻译服务翻译的。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始文件的本国语言版本视为权威来源。对于关键信息,建议进行专业的人类翻译。对于因使用本翻译而产生的任何误解或误读,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/03-using-generative-ai-responsibly/README.md b/translations/zh/03-using-generative-ai-responsibly/README.md new file mode 100644 index 000000000..22de80eae --- /dev/null +++ b/translations/zh/03-using-generative-ai-responsibly/README.md @@ -0,0 +1,137 @@ +# 负责任地使用生成式 AI + +[![负责任地使用生成式 AI](../../../translated_images/03-lesson-banner.png?WT.b0b917735411b39a55748e827c5c3121004890110b27f306bfe685c450c81ff9.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson3-gh?WT.mc_id=academic-105485-koreyst) + +> _点击上面的图片观看本课视频_ + +对 AI,尤其是生成式 AI 感到着迷是很容易的,但你需要考虑如何负责任地使用它。你需要考虑如何确保输出是公平的、无害的等等。本章旨在为你提供上述背景、需要考虑的因素以及如何采取积极措施来改善你的 AI 使用。 + +## 介绍 + +本课将涵盖: + +- 为什么在构建生成式 AI 应用程序时应优先考虑负责任的 AI。 +- 负责任 AI 的核心原则以及它们如何与生成式 AI 相关。 +- 如何通过策略和工具将这些负责任 AI 的原则付诸实践。 + +## 学习目标 + +完成本课后,你将了解: + +- 在构建生成式 AI 应用程序时,负责任 AI 的重要性。 +- 在构建生成式 AI 应用程序时,何时思考和应用负责任 AI 的核心原则。 +- 可用的工具和策略,以将负责任 AI 的概念付诸实践。 + +## 负责任 AI 的原则 + +生成式 AI 的兴奋程度前所未有。这种兴奋为该领域带来了许多新的开发者、关注和资金。虽然这对任何希望使用生成式 AI 构建产品和公司的人来说都是非常积极的,但我们也需要以负责任的态度前进。 + +在整个课程中,我们专注于构建我们的初创公司和我们的 AI 教育产品。我们将使用负责任 AI 的原则:公平性、包容性、可靠性/安全性、安全性和隐私、透明性和责任制。通过这些原则,我们将探讨它们如何与我们在产品中使用生成式 AI 相关。 + +## 为什么要优先考虑负责任的 AI + +在构建产品时,采取以人为本的方法,牢记用户的最大利益,会带来最佳结果。 + +生成式 AI 的独特之处在于其为用户创建有用答案、信息、指导和内容的能力。这可以在没有许多手动步骤的情况下完成,从而带来非常令人印象深刻的结果。但如果没有适当的计划和策略,也可能不幸地导致对用户、产品和整个社会的某些有害结果。 + +让我们来看一些(但不是全部)这些潜在的有害结果: + +### 幻觉 + +幻觉是一个术语,用来描述当 LLM 生成的内容完全无意义或根据其他信息来源我们知道是事实错误的内容。 + +例如,我们为初创公司构建了一个功能,允许学生向模型提问历史问题。一名学生提问 `Who was the sole survivor of Titanic?` + +模型生成如下响应: + +![提示“谁是泰坦尼克号的唯一幸存者”](../../../03-using-generative-ai-responsibly/images/ChatGPT-titanic-survivor-prompt.webp) + +> _(来源:[Flying bisons](https://flyingbisons.com?WT.mc_id=academic-105485-koreyst))_ + +这是一个非常自信且详尽的答案。不幸的是,它是错误的。即使进行最少量的研究,也会发现泰坦尼克号灾难中不止一名幸存者。对于刚开始研究该主题的学生来说,这个答案可能足够有说服力,不会被质疑并被视为事实。这可能导致 AI 系统不可靠,并对我们初创公司的声誉产生负面影响。 + +随着任何给定 LLM 的每次迭代,我们已经看到在减少幻觉方面的性能改进。即使有这种改进,作为应用程序构建者和用户,我们仍然需要意识到这些限制。 + +### 有害内容 + +我们在前一节中讨论了当 LLM 生成不正确或无意义的响应时。我们还需要注意的另一个风险是当模型响应有害内容时。 + +有害内容可以定义为: + +- 提供自我伤害或伤害特定群体的指示或鼓励。 +- 仇恨或贬低的内容。 +- 指导计划任何类型的攻击或暴力行为。 +- 提供查找非法内容或实施非法行为的指示。 +- 显示色情内容。 + +对于我们的初创公司,我们希望确保我们有适当的工具和策略来防止学生看到此类内容。 + +### 缺乏公平性 + +公平性被定义为“确保 AI 系统没有偏见和歧视,并且对每个人都公平和平等。”在生成式 AI 的世界中,我们希望确保被边缘化群体的排他性世界观不会被模型的输出所强化。 + +这些类型的输出不仅对构建积极的用户产品体验有破坏性,而且还会造成进一步的社会危害。作为应用程序构建者,我们在使用生成式 AI 构建解决方案时应始终考虑广泛和多样化的用户群体。 + +## 如何负责任地使用生成式 AI + +现在我们已经确定了负责任生成式 AI 的重要性,让我们来看一下我们可以采取的 4 个步骤,以负责任地构建我们的 AI 解决方案: + +![减轻周期](../../../translated_images/mitigate-cycle.png?WT.ffc987e1880649a302a311432b78f49faa64e46f65df6350c9c409b5ed79549b.zh.mc_id=academic-105485-koreyst) + +### 衡量潜在危害 + +在软件测试中,我们测试用户在应用程序上的预期操作。类似地,测试用户最有可能使用的多样化提示集是衡量潜在危害的好方法。 + +由于我们的初创公司正在构建一个教育产品,准备一个与教育相关的提示列表是个好主意。这可以涵盖某个学科、历史事实以及关于学生生活的提示。 + +### 减轻潜在危害 + +现在是时候找出我们可以在哪里防止或限制模型及其响应所造成的潜在危害。我们可以从 4 个不同层面来看待这一点: + +![减轻层](../../../translated_images/mitigation-layers.png?WT.cb109f48e143f1ff4dee760b4b0c9477c7d11c2fe57f3efdd89f68c1109f2de6.zh.mc_id=academic-105485-koreyst) + +- **模型**。为正确的用例选择合适的模型。像 GPT-4 这样更大更复杂的模型在应用于较小和更具体的用例时,可能会导致更高的有害内容风险。使用你的训练数据进行微调也可以降低有害内容的风险。 + +- **安全系统**。安全系统是一个工具和配置集,用于服务模型的平台上,以帮助减轻危害。Azure OpenAI 服务上的内容过滤系统就是一个例子。系统还应该检测越狱攻击和不需要的活动,例如来自机器人的请求。 + +- **元提示**。元提示和基础是我们可以根据某些行为和信息引导或限制模型的方法。这可以是使用系统输入来定义模型的某些限制。此外,提供与系统范围或领域更相关的输出。 + +也可以使用检索增强生成(RAG)等技术,让模型仅从一组选定的可信来源中提取信息。本课程稍后会有一个关于[构建搜索应用程序](../08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst)的课程。 + +- **用户体验**。最后一层是用户通过我们的应用程序界面以某种方式直接与模型交互。在这种方式中,我们可以设计 UI/UX 来限制用户可以发送给模型的输入类型以及显示给用户的文本或图像。在部署 AI 应用程序时,我们还必须透明地说明我们的生成式 AI 应用程序可以和不能做什么。 + +我们有一个专门的课程来[设计 AI 应用程序的 UX](../12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst)。 + +- **评估模型**。与 LLMs 合作可能具有挑战性,因为我们并不总是能够控制模型所训练的数据。无论如何,我们应该始终评估模型的性能和输出。衡量模型输出的准确性、相似性、基础性和相关性仍然很重要。这有助于为利益相关者和用户提供透明性和信任。 + +### 运营负责任的生成式 AI 解决方案 + +围绕你的 AI 应用程序构建运营实践是最后阶段。这包括与我们初创公司的其他部分(如法律和安全)合作,以确保我们符合所有监管政策。在发布之前,我们还希望围绕交付、处理事件和回滚制定计划,以防止用户受到任何伤害。 + +## 工具 + +虽然开发负责任 AI 解决方案的工作看起来很多,但这项工作非常值得。随着生成式 AI 领域的增长,帮助开发人员有效地将责任整合到工作流程中的工具也将逐渐成熟。例如,[Azure AI Content Safety](https://learn.microsoft.com/azure/ai-services/content-safety/overview?WT.mc_id=academic-105485-koreyst) 可以通过 API 请求帮助检测有害内容和图像。 + +## 知识检查 + +为了确保负责任的 AI 使用,你需要关心哪些方面? + +1. 答案是否正确。 +2. 有害使用,确保 AI 不被用于犯罪目的。 +3. 确保 AI 没有偏见和歧视。 + +A:2 和 3 是正确的。负责任的 AI 帮助你考虑如何减轻有害影响和偏见等问题。 + +## 🚀 挑战 + +阅读 [Azure AI Content Safety](https://learn.microsoft.com/azure/ai-services/content-safety/overview?WT.mc_id=academic-105485-koreyst) 并查看你可以采用哪些内容。 + +## 出色的工作,继续学习 + +完成本课后,查看我们的 [生成式 AI 学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst),继续提升你的生成式 AI 知识! + +前往第 4 课,我们将探讨 [提示工程基础](../04-prompt-engineering-fundamentals/README.md?WT.mc_id=academic-105485-koreyst)! + +**免责声明**: + +本文件是使用机器翻译服务翻译的。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文件视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用此翻译而引起的任何误解或误读,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/04-prompt-engineering-fundamentals/README.md b/translations/zh/04-prompt-engineering-fundamentals/README.md new file mode 100644 index 000000000..b44c520ba --- /dev/null +++ b/translations/zh/04-prompt-engineering-fundamentals/README.md @@ -0,0 +1,317 @@ +# 提示工程基础 + +[![提示工程基础](../../../translated_images/04-lesson-banner.png?WT.d904d510033d5f0283f2caff5f735050f929dd196a1fc25fefa18433347fe463.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson4-gh?WT.mc_id=academic-105485-koreyst) + +## 介绍 +本模块涵盖了在生成式AI模型中创建有效提示的基本概念和技术。你如何向LLM编写提示也很重要。精心设计的提示可以获得更高质量的响应。但是,像 _prompt_ 和 _prompt engineering_ 这样的术语到底是什么意思?我如何改进发送给LLM的提示 _input_?这些是我们将在本章和下一章中尝试回答的问题。 + +_生成式AI_ 能够根据用户请求创建新的内容(例如文本、图像、音频、代码等)。它使用像OpenAI的GPT("Generative Pre-trained Transformer")系列这样的 _大型语言模型_ 来实现这些功能,这些模型经过自然语言和代码的训练。 + +用户现在可以使用熟悉的聊天模式与这些模型进行交互,而无需任何技术专长或培训。这些模型是基于 _提示_ 的 - 用户发送一个文本输入(提示)并获得AI响应(完成)。然后他们可以在多轮对话中与AI进行迭代聊天,优化他们的提示,直到响应符合他们的预期。 + +“提示”现在成为生成式AI应用的主要 _编程接口_,告诉模型要做什么并影响返回响应的质量。“提示工程”是一个快速发展的研究领域,专注于提示的 _设计和优化_,以大规模提供一致和高质量的响应。 + +## 学习目标 + +在本课中,我们将学习什么是提示工程,为什么它很重要,以及如何为给定的模型和应用目标制作更有效的提示。我们将理解提示工程的核心概念和最佳实践,并了解一个互动的Jupyter Notebooks“沙盒”环境,在这里我们可以看到这些概念应用于实际例子。 + +到本课结束时,我们将能够: + +1. 解释什么是提示工程以及为什么它很重要。 +2. 描述提示的组成部分及其使用方式。 +3. 学习提示工程的最佳实践和技术。 +4. 使用OpenAI端点将学到的技术应用于实际示例。 + +## 关键术语 + +提示工程:设计和优化输入以引导AI模型生成所需输出的实践。 +分词:将文本转换为模型可以理解和处理的更小单位(称为tokens)的过程。 +指令调优LLM:经过特定指令微调的大型语言模型(LLM),以提高其响应的准确性和相关性。 + +## 学习沙盒 + +提示工程目前更像是一门艺术而不是科学。提高我们直觉的最佳方法是 _多练习_ 并采用试错方法,将应用领域专业知识与推荐技术和模型特定优化相结合。 + +本课附带的Jupyter Notebook提供了一个 _沙盒_ 环境,您可以在这里尝试学习内容 - 无论是在学习过程中还是在最后的代码挑战中。要执行这些练习,您将需要: + +1. **Azure OpenAI API 密钥** - 部署LLM的服务端点。 +2. **Python 运行时** - 用于执行Notebook。 +3. **本地环境变量** - _完成[SETUP](./../00-course-setup/SETUP.md?WT.mc_id=academic-105485-koreyst)步骤以做好准备_。 + +Notebook附带 _入门_ 练习 - 但鼓励您添加自己的 _Markdown_(描述)和 _代码_(提示请求)部分,以尝试更多示例或想法 - 并建立您对提示设计的直觉。 + +## 插图指南 + +想在深入学习之前了解本课涵盖的内容吗?查看这个插图指南,它为您提供了每个主题的主要内容和关键要点的概述。课程路线图将带您从理解核心概念和挑战开始,使用相关的提示工程技术和最佳实践来解决这些问题。请注意,本指南中的“高级技术”部分涉及本课程下一章的内容。 + +![提示工程插图指南](../../../translated_images/04-prompt-engineering-sketchnote.png?WT.a936f69bc33c7a783015f6747ea56d0f0071349644cd9031f9b8d20a3eec8696.zh.mc_id=academic-105485-koreyst) + +## 我们的创业公司 + +现在,让我们讨论一下 _这个主题_ 如何与我们的创业使命相关,即[将AI创新带入教育](https://educationblog.microsoft.com/2023/06/collaborating-to-bring-ai-innovation-to-education?WT.mc_id=academic-105485-koreyst)。我们希望构建AI驱动的 _个性化学习_ 应用程序 - 因此,让我们思考一下我们应用程序的不同用户如何“设计”提示: + +- **管理员** 可能会要求AI _分析课程数据以识别覆盖中的差距_。AI可以总结结果或使用代码进行可视化。 +- **教育者** 可能会要求AI _为目标受众和主题生成课程计划_。AI可以以指定格式构建个性化计划。 +- **学生** 可能会要求AI _在困难科目上辅导他们_。AI现在可以为学生提供量身定制的课程、提示和示例。 + +这只是冰山一角。查看[教育提示](https://github.com/microsoft/prompts-for-edu/tree/main?WT.mc_id=academic-105485-koreyst) - 由教育专家策划的开源提示库 - 以获得更广泛的可能性!_尝试在沙盒中运行这些提示或使用OpenAI Playground查看会发生什么!_ + + + +## 什么是提示工程? + +我们从定义**提示工程**开始本课,将其描述为 _设计和优化_ 文本输入(提示)的过程,以为给定的应用目标和模型提供一致和高质量的响应(完成)。我们可以将其视为一个两步过程: + +- 为给定的模型和目标 _设计_ 初始提示 +- 迭代 _优化_ 提示以提高响应质量 + +这必然是一个需要用户直觉和努力以获得最佳结果的试错过程。那么为什么它很重要呢?要回答这个问题,我们首先需要理解三个概念: + +- _分词_ = 模型如何“看待”提示 +- _基础LLM_ = 基础模型如何“处理”提示 +- _指令调优LLM_ = 模型现在如何看到“任务” + +### 分词 + +LLM将提示视为 _token序列_,不同的模型(或模型版本)可以以不同的方式对同一提示进行分词。由于LLM是基于tokens训练的(而不是原始文本),因此提示的分词方式会直接影响生成响应的质量。 + +要了解分词如何工作,可以尝试像[OpenAI Tokenizer](https://platform.openai.com/tokenizer?WT.mc_id=academic-105485-koreyst)这样的工具。复制您的提示 - 看看它如何被转换为tokens,注意空白字符和标点符号的处理方式。请注意,此示例显示的是旧版LLM(GPT-3) - 使用新模型可能会产生不同的结果。 + +![分词](../../../translated_images/04-tokenizer-example.png?WT.f5399316da400747ffe3af9c95e61dc1a85508d57378da23a77538270c4cabf1.zh.mc_id=academic-105485-koreyst) + +### 概念:基础模型 + +一旦提示被分词,["基础LLM"](https://blog.gopenai.com/an-introduction-to-base-and-instruction-tuned-large-language-models-8de102c785a6?WT.mc_id=academic-105485-koreyst)(或基础模型)的主要功能就是预测该序列中的token。由于LLM是在大量文本数据集上训练的,它们对tokens之间的统计关系有很好的理解,并且可以有信心地进行预测。请注意,它们并不理解提示或token中的单词的 _意义_;它们只是看到一个可以通过下一个预测“完成”的模式。它们可以继续预测序列,直到用户干预或某个预先设定的条件终止。 + +想看看基于提示的完成如何工作?将上述提示输入Azure OpenAI Studio [_Chat Playground_](https://oai.azure.com/playground?WT.mc_id=academic-105485-koreyst)并使用默认设置。系统配置为将提示视为信息请求 - 因此您应该看到一个满足此上下文的完成。 + +但是如果用户希望看到符合某些标准或任务目标的特定内容怎么办?这就是 _指令调优_ LLM的作用。 + +![基础LLM聊天完成](../../../translated_images/04-playground-chat-base.png?WT.7645a03d7989b1c410f2e9e6b503d18e4624f82d9cbf108dac999b8c8988f0ad.zh.mc_id=academic-105485-koreyst) + +### 概念:指令调优LLM + +[指令调优LLM](https://blog.gopenai.com/an-introduction-to-base-and-instruction-tuned-large-language-models-8de102c785a6?WT.mc_id=academic-105485-koreyst)从基础模型开始,并通过包含明确指令的示例或输入/输出对(例如,多轮“消息”)对其进行微调 - AI的响应尝试遵循该指令。 + +这使用了诸如带有人类反馈的强化学习(RLHF)等技术,可以训练模型 _遵循指令_ 和 _从反馈中学习_,以便其生成更适合实际应用并更符合用户目标的响应。 + +让我们试试 - 重新审视上面的提示,但现在更改 _系统消息_ 提供以下指令作为上下文: + +> _将您提供的内容总结给二年级学生。将结果保持在一个段落中,包含3-5个要点。_ + +看看结果现在如何调整以反映所需的目标和格式?教育者现在可以直接在他们的幻灯片中使用此响应为该课程。 + +![指令调优LLM聊天完成](../../../translated_images/04-playground-chat-instructions.png?WT.d9c80b15e90815a83ce665bf4418e70205d30318a5a5bcf407b2c92769743593.zh.mc_id=academic-105485-koreyst) + +## 为什么我们需要提示工程? + +既然我们知道提示是如何被LLM处理的,那么让我们讨论一下 _为什么_ 我们需要提示工程。答案在于当前的LLM存在一些挑战,使得 _可靠和一致的完成_ 更难以实现,而不在提示构建和优化上投入精力。例如: + +1. **模型响应是随机的。** _相同的提示_ 可能会在不同的模型或模型版本上产生不同的响应。即使在 _相同的模型_ 上,不同时间也可能产生不同的结果。_提示工程技术可以通过提供更好的护栏来帮助我们最小化这些变化_。 + +1. **模型可能会编造响应。** 模型是通过 _大但有限_ 的数据集预训练的,这意味着它们缺乏关于超出训练范围的概念的知识。因此,它们可能会生成不准确、虚构或直接与已知事实相矛盾的完成。_提示工程技术可以帮助用户识别和减轻此类编造,例如,通过要求AI提供引用或推理_。 + +1. **模型能力会有所不同。** 新的模型或模型代可能具有更丰富的能力,但也带来了成本和复杂性方面的独特特性和权衡。_提示工程可以帮助我们开发最佳实践和工作流程,以抽象出差异并适应模型特定的需求,以可扩展、无缝的方式_。 + +让我们在OpenAI或Azure OpenAI Playground中看到这些在行动中: + +- 使用相同的提示与不同的LLM部署(例如,OpenAI,Azure OpenAI,Hugging Face) - 你看到变化了吗? +- 使用相同的提示在 _相同的_ LLM部署中重复使用(例如,Azure OpenAI playground) - 这些变化有何不同? + +### 编造示例 + +在本课程中,我们使用术语**“编造”**来指代由于训练限制或其他约束,LLM有时会生成不正确信息的现象。您可能还在流行文章或研究论文中听说过这种现象被称为 _“幻觉”_。然而,我们强烈建议使用 _“编造”_ 作为术语,以避免将人类特质错误地归因于机器驱动的结果。这也从术语角度加强了[负责任AI指南](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-105485-koreyst),去除了在某些情况下可能被认为具有冒犯性或不包容性的术语。 + +想了解编造如何工作吗?想一个提示,指示AI为不存在的主题生成内容(以确保它不在训练数据集中)。例如 - 我尝试了这个提示: + +> **提示:** 为2076年的火星战争生成课程计划。 + +网络搜索显示存在关于火星战争的虚构叙述(例如,电视系列或书籍) - 但没有关于2076年的。常识也告诉我们,2076年是 _未来_,因此不能与真实事件相关联。 + +那么,当我们与不同的LLM提供商运行此提示时会发生什么? + +> **响应1**:OpenAI Playground (GPT-35) + +![响应1](../../../translated_images/04-fabrication-oai.png?WT.08cc3e01259a6b46725a800e67de50c37b7fdd6b1f932f027881cbe32f80bcf1.zh.mc_id=academic-105485-koreyst) + +> **响应2**:Azure OpenAI Playground (GPT-35) + +![响应2](../../../translated_images/04-fabrication-aoai.png?WT.81e0d286a351c87c804aaca6e5f8251a6deed5105d11bca035f8cead8c52d299.zh.mc_id=academic-105485-koreyst) + +> **响应3**:Hugging Face Chat Playground (LLama-2) + +![响应3](../../../translated_images/04-fabrication-huggingchat.png?WT.992b3a675cc7ed0dbe53e308b93df8165048fb7c4516e6bb00611d05c92e8fd5.zh.mc_id=academic-105485-koreyst) + +正如预期的那样,由于随机行为和模型能力的变化,每个模型(或模型版本)产生了略有不同的响应。例如,一个模型针对8年级受众,而另一个假定是高中生。但所有三个模型都生成了可能会让不知情用户相信事件是真实的响应。 + +提示工程技术如 _元提示_ 和 _温度配置_ 可以在一定程度上减少模型编造。新的提示工程 _架构_ 还将新工具和技术无缝集成到提示流中,以减轻或减少其中的一些效果。 + +## 案例研究:GitHub Copilot + +让我们通过查看一个案例研究来结束这一部分: [GitHub Copilot](https://github.com/features/copilot?WT.mc_id=academic-105485-koreyst)。 + +GitHub Copilot是您的“AI配对程序员” - 它将文本提示转换为代码完成,并集成到您的开发环境中(例如,Visual Studio Code),以提供无缝的用户体验。如以下系列博客中所述,最早的版本基于OpenAI Codex模型 - 工程师们很快意识到需要微调模型并开发更好的提示工程技术,以提高代码质量。在7月,他们[推出了一个改进的AI模型,超越了Codex](https://github.blog/2023-07-28-smarter-more-efficient-coding-github-copilot-goes-beyond-codex-with-improved-ai-model/?WT.mc_id=academic-105485-koreyst),以提供更快的建议。 + +按顺序阅读这些文章,跟随他们的学习之旅。 + +- **2023年5月** | [GitHub Copilot在理解您的代码方面越来越好](https://github.blog/2023-05-17-how-github-copilot-is-getting-better-at-understanding-your-code/?WT.mc_id=academic-105485-koreyst) +- **2023年5月** | [GitHub内部:与GitHub Copilot背后的LLM合作](https://github.blog/2023-05-17-inside-github-working-with-the-llms-behind-github-copilot/?WT.mc_id=academic-105485-koreyst)。 +- **2023年6月** | [如何为GitHub Copilot编写更好的提示](https://github.blog/2023-06-20-how-to-write-better-prompts-for-github-copilot/?WT.mc_id=academic-105485-koreyst)。 +- **2023年7月** | [.. GitHub Copilot超越Codex,推出改进的AI模型](https://github.blog/2023-07-28-smarter-more-efficient-coding-github-copilot-goes-beyond-codex-with-improved-ai-model/?WT.mc_id=academic-105485-koreyst) +- **2023年7月** | [开发者的提示工程和LLM指南](https://github.blog/2023-07-17-prompt-engineering-guide-generative-ai-llms/?WT.mc_id=academic-105485-koreyst) +- **2023年9月** | [如何构建企业级LLM应用:来自GitHub Copilot的经验](https://github.blog/2023-09-06-how-to-build-an-enterprise-llm-application-lessons-from-github-copilot/?WT.mc_id=academic-105485-koreyst) + +您还可以浏览他们的[工程博客](https://github.blog/category/engineering/?WT.mc_id=academic-105485-koreyst)以获取更多类似[这篇文章](https://github.blog/2023-09-27-how-i-used-github-copilot-chat-to-build-a-reactjs-gallery-prototype/?WT.mc_id=academic-105485-koreyst)的帖子,展示这些模型和技术如何用于推动现实世界的应用。 + +--- + + + +## 提示构建 + +我们已经了解了为什么提示工程很重要 - 现在让我们了解提示是如何 _构建_ 的,以便我们可以评估不同的技术以实现更有效的提示设计。 + +### 基本提示 + +让我们从基本提示开始:发送给模型的文本输入,没有其他上下文。这里有一个例子 - 当我们将美国国歌的前几句话发送到OpenAI [Completion API](https://platform.openai.com/docs/api-reference/completions?WT.mc_id=academic-105485-koreyst)时,它立即 _完成_ 响应,显示基本的预测行为。 + +| 提示(输入) | 完成(输出) | +| :----------------- | :----------------------------------------------------------------------------------------------------------------------------------------- | +| 哦说你能看到吗 | +最终,模板的真正价值在于能够为垂直应用领域创建和发布_提示库_——在这里,提示模板经过_优化_以反映特定应用的上下文或示例,使响应对目标用户群体更相关和准确。[Prompts For Edu](https://github.com/microsoft/prompts-for-edu?WT.mc_id=academic-105485-koreyst) 仓库就是这种方法的一个很好的例子,它为教育领域策划了一个提示库,重点放在课程计划、课程设计、学生辅导等关键目标上。 + +## 支持内容 + +如果我们将提示构建视为具有指令(任务)和目标(主要内容),那么_次要内容_就像是我们提供的额外上下文,以某种方式**影响输出**。这可能是调整参数、格式化指令、主题分类等,帮助模型_定制_其响应以适应所需的用户目标或期望。 + +例如:给定一个课程目录,其中包含所有课程的广泛元数据(名称、描述、级别、元数据标签、讲师等): + +- 我们可以定义一个指令来“总结 2023 年秋季的课程目录” +- 我们可以使用主要内容提供一些所需输出的示例 +- 我们可以使用次要内容来识别感兴趣的前 5 个“标签”。 + +现在,模型可以以几个示例所示的格式提供摘要——但如果结果有多个标签,它可以优先考虑次要内容中识别的 5 个标签。 + +--- + + + +## 提示最佳实践 + +现在我们知道如何_构建_提示,我们可以开始思考如何_设计_它们以反映最佳实践。我们可以将其分为两部分——拥有正确的_心态_和应用正确的_技术_。 + +### 提示工程心态 + +提示工程是一个试错过程,因此请牢记三个广泛的指导因素: + +1. **领域理解很重要。** 响应的准确性和相关性取决于应用程序或用户所处的_领域_。运用你的直觉和领域专业知识来进一步**定制技术**。例如,在系统提示中定义_领域特定的个性_,或在用户提示中使用_领域特定的模板_。提供反映领域特定上下文的次要内容,或使用_领域特定的提示和示例_来引导模型朝着熟悉的使用模式发展。 + +2. **模型理解很重要。** 我们知道模型本质上是随机的。但是,模型实现可能会因其使用的训练数据集(预训练知识)、它们提供的功能(例如,通过 API 或 SDK)以及它们针对的内容类型(例如代码、图像、文本)而有所不同。了解你所使用模型的优缺点,并利用这些知识来_优先排序任务_或构建_定制模板_,以优化模型的功能。 + +3. **迭代和验证很重要。** 模型正在快速发展,提示工程技术也是如此。作为领域专家,你可能有其他上下文或标准适用于_你的_特定应用,而不适用于更广泛的社区。使用提示工程工具和技术来“快速启动”提示构建,然后使用你的直觉和领域专业知识迭代和验证结果。记录你的见解并创建一个**知识库**(例如,提示库),以便其他人可以在未来更快地迭代。 + +## 最佳实践 + +现在让我们看看[OpenAI](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api?WT.mc_id=academic-105485-koreyst) 和 [Azure OpenAI](https://learn.microsoft.com/azure/ai-services/openai/concepts/prompt-engineering#best-practices?WT.mc_id=academic-105485-koreyst) 从业者推荐的常见最佳实践。 + +| 内容 | 原因 | +| :------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| 评估最新模型。 | 新一代模型可能具有改进的功能和质量——但也可能会产生更高的成本。评估它们的影响,然后做出迁移决策。 | +| 分开指令和上下文 | 检查你的模型/提供者是否定义了_分隔符_以更清楚地区分指令、主要和次要内容。这可以帮助模型更准确地分配权重给令牌。 | +| 具体且清晰 | 提供更多关于所需上下文、结果、长度、格式、风格等的细节。这将提高响应的质量和一致性。将方案捕捉到可重用的模板中。 | +| 描述性,使用示例 | 模型可能更好地响应“展示和讲述”的方法。以 `zero-shot` approach where you give it an instruction (but no examples) then try `few-shot` as a refinement, providing a few examples of the desired output. Use analogies. | +| Use cues to jumpstart completions | Nudge it towards a desired outcome by giving it some leading words or phrases that it can use as a starting point for the response. | +| Double Down | Sometimes you may need to repeat yourself to the model. Give instructions before and after your primary content, use an instruction and a cue, etc. Iterate & validate to see what works. | +| Order Matters | The order in which you present information to the model may impact the output, even in the learning examples, thanks to recency bias. Try different options to see what works best. | +| Give the model an “out” | Give the model a _fallback_ completion response it can provide if it cannot complete the task for any reason. This can reduce chances of models generating false or fabricated responses. | +| | | + +As with any best practice, remember that _your mileage may vary_ based on the model, the task and the domain. Use these as a starting point, and iterate to find what works best for you. Constantly re-evaluate your prompt engineering process as new models and tools become available, with a focus on process scalability and response quality. + + + +## Assignment + +Congratulations! You made it to the end of the lesson! It's time to put some of those concepts and techniques to the test with real examples! + +For our assignment, we'll be using a Jupyter Notebook with exercises you can complete interactively. You can also extend the Notebook with your own Markdown and Code cells to explore ideas and techniques on your own. + +### To get started, fork the repo, then + +- (Recommended) Launch GitHub Codespaces +- (Alternatively) Clone the repo to your local device and use it with Docker Desktop +- (Alternatively) Open the Notebook with your preferred Notebook runtime environment. + +### Next, configure your environment variables + +- Copy the `.env.copy` file in repo root to `.env` and fill in the `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_ENDPOINT` and `AZURE_OPENAI_DEPLOYMENT` 值开始。返回到 [学习沙盒部分](../../../04-prompt-engineering-fundamentals/04-prompt-engineering-fundamentals) 学习如何操作。 + +### 接下来,打开 Jupyter Notebook + +- 选择运行时内核。如果使用选项 1 或 2,只需选择开发容器提供的默认 Python 3.10.x 内核。 + +你已经准备好运行练习了。请注意,这里没有_对错_的答案——只是通过试错探索选项,并为给定模型和应用领域建立直觉。 + +_因此,本课中没有代码解决方案部分。相反,Notebook 将有名为“我的解决方案”的 Markdown 单元格,显示一个参考输出示例。_ + + + +## 知识检查 + +以下哪项是遵循合理最佳实践的良好提示? + +1. 给我看一辆红色汽车的图片 +2. 给我看一辆红色沃尔沃 XC90 型号汽车停在悬崖边,夕阳西下的图片 +3. 给我看一辆红色沃尔沃 XC90 型号汽车的图片 + +A: 2,这是最好的提示,因为它提供了“什么”的细节并且进入了具体(不仅仅是任何汽车,而是一个特定的品牌和型号),同时也描述了整体环境。3 是次佳,因为它也包含了很多描述。 + +## 🚀 挑战 + +看看你能否利用“提示”技术来完成以下提示:“给我看一辆红色沃尔沃汽车的图片,并且 ”。它如何响应,以及你将如何改进它? + +## 出色的工作!继续你的学习 + +想了解更多关于不同提示工程概念的信息吗?请访问[继续学习页面](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)以找到关于此主题的其他优秀资源。 + +前往第 5 课,我们将探讨[高级提示技术](../05-advanced-prompts/README.md?WT.mc_id=academic-105485-koreyst)! + +**免责声明**: +本文件是使用机器翻译服务翻译的。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文件视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用本翻译而产生的任何误解或误读,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/05-advanced-prompts/README.md b/translations/zh/05-advanced-prompts/README.md new file mode 100644 index 000000000..437a485c5 --- /dev/null +++ b/translations/zh/05-advanced-prompts/README.md @@ -0,0 +1,4 @@ + + +**免责声明**: +本文档使用机器翻译服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原文档视为权威来源。对于关键信息,建议使用专业人工翻译。我们对于使用此翻译所引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/06-text-generation-apps/README.md b/translations/zh/06-text-generation-apps/README.md new file mode 100644 index 000000000..8310954c6 --- /dev/null +++ b/translations/zh/06-text-generation-apps/README.md @@ -0,0 +1,658 @@ +# 构建文本生成应用 + +[![构建文本生成应用](../../../translated_images/06-lesson-banner.png?WT.2cbccad4fdd538d4f7d47c475b058629b7b7fb1a010acde6e323370d82005b16.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson6-gh?WT.mc_id=academic-105485-koreyst) + +> _(点击上方图片查看本课视频)_ + +通过本课程,你已经了解了一些核心概念,比如提示词,甚至还有一个叫做“提示词工程”的学科。许多工具如 ChatGPT、Office 365、Microsoft Power Platform 等,支持使用提示词来完成任务。 + +要将这样的体验添加到应用中,你需要理解提示词、完成等概念,并选择一个库来使用。本章将教你如何做到这一点。 + +## 介绍 + +在本章中,你将会: + +- 了解 openai 库及其核心概念。 +- 使用 openai 构建一个文本生成应用。 +- 理解如何使用提示词、温度和 tokens 等概念来构建文本生成应用。 + +## 学习目标 + +在本课结束时,你将能够: + +- 解释什么是文本生成应用。 +- 使用 openai 构建一个文本生成应用。 +- 配置你的应用,以使用更多或更少的 tokens,并改变温度,以获得多样化的输出。 + +## 什么是文本生成应用? + +通常,当你构建一个应用时,它会有如下某种接口: + +- 基于命令的。控制台应用是典型的应用,你输入一个命令,它执行一个任务。例如,`git` 是一个基于命令的应用。 +- 用户界面(UI)。有些应用有图形用户界面(GUI),你可以点击按钮、输入文本、选择选项等。 + +### 控制台和 UI 应用的限制 + +将其与基于命令的应用进行比较,你输入一个命令: + +- **有限制**。你不能输入任何命令,只能输入应用支持的命令。 +- **语言特定**。一些应用支持多种语言,但默认情况下,应用是为特定语言构建的,即使你可以添加更多语言支持。 + +### 文本生成应用的优势 + +那么,文本生成应用有什么不同? + +在文本生成应用中,你有更多的灵活性,不受限于一组命令或特定的输入语言。相反,你可以使用自然语言与应用互动。另一个好处是,你已经在与一个经过大量信息训练的数据源互动,而传统应用可能仅限于数据库中的内容。 + +### 我可以用文本生成应用构建什么? + +你可以构建很多东西。例如: + +- **聊天机器人**。一个聊天机器人可以回答关于主题的问题,比如你的公司及其产品。 +- **助手**。LLM 在总结文本、从文本中获取见解、生成简历等文本方面表现出色。 +- **代码助手**。根据你使用的语言模型,你可以构建一个帮助你编写代码的代码助手。例如,你可以使用 GitHub Copilot 或 ChatGPT 帮助你编写代码。 + +## 我该如何开始? + +好吧,你需要找到一种方式与 LLM 集成,通常涉及以下两种方法: + +- 使用 API。在这里,你构建网络请求,带上你的提示词并获得生成的文本。 +- 使用库。库帮助封装 API 调用,使其更易于使用。 + +## 库/SDK + +有一些知名的库用于处理 LLM,例如: + +- **openai**,这个库使得连接到你的模型并发送提示词变得容易。 + +然后还有一些在更高层次上操作的库,比如: + +- **Langchain**。Langchain 以支持 Python 而闻名。 +- **Semantic Kernel**。Semantic Kernel 是微软的一个库,支持 C#、Python 和 Java 语言。 + +## 使用 openai 构建第一个应用 + +让我们看看如何构建我们的第一个应用,所需的库有哪些,以及需要多少工作量。 + +### 安装 openai + +市面上有很多库可以与 OpenAI 或 Azure OpenAI 交互。可以使用多种编程语言,如 C#、Python、JavaScript、Java 等。我们选择使用 `openai` Python 库,因此我们将使用 `pip` 来安装它。 + +```bash +pip install openai +``` + +### 创建资源 + +你需要执行以下步骤: + +- 在 Azure 上创建一个账户 [https://azure.microsoft.com/free/](https://azure.microsoft.com/free/?WT.mc_id=academic-105485-koreyst)。 +- 获取 Azure OpenAI 的访问权限。访问 [https://learn.microsoft.com/azure/ai-services/openai/overview#how-do-i-get-access-to-azure-openai](https://learn.microsoft.com/azure/ai-services/openai/overview#how-do-i-get-access-to-azure-openai?WT.mc_id=academic-105485-koreyst) 并申请访问权限。 + + > [!NOTE] + > 在撰写本文时,你需要申请 Azure OpenAI 的访问权限。 + +- 安装 Python +- 创建一个 Azure OpenAI 服务资源。参见此指南以了解如何 [创建资源](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal?WT.mc_id=academic-105485-koreyst)。 + +### 找到 API 密钥和端点 + +此时,你需要告诉 `openai` 库使用哪个 API 密钥。要找到你的 API 密钥,请转到 Azure OpenAI 资源的“密钥和端点”部分并复制“密钥 1”值。 + +![Azure 门户中的密钥和端点资源页面](https://learn.microsoft.com/azure/ai-services/openai/media/quickstarts/endpoint.png?WT.mc_id=academic-105485-koreyst) + +现在你已经复制了这些信息,让我们指示库使用它。 + +> [!NOTE] +> 将 API 密钥与代码分离是值得的。你可以通过使用环境变量来实现。 +> +> - 设置环境变量 `OPENAI_API_KEY` to your API key. +> `export OPENAI_API_KEY='sk-...'` + +### 配置 Azure + +如果你使用的是 Azure OpenAI,以下是设置配置的方法: + +```python +openai.api_type = 'azure' +openai.api_key = os.environ["OPENAI_API_KEY"] +openai.api_version = '2023-05-15' +openai.api_base = os.getenv("API_BASE") +``` + +上面我们设置了以下内容: + +- `api_type` to `azure`. This tells the library to use Azure OpenAI and not OpenAI. +- `api_key`, this is your API key found in the Azure Portal. +- `api_version`, this is the version of the API you want to use. At the time of writing, the latest version is `2023-05-15`. +- `api_base`, this is the endpoint of the API. You can find it in the Azure Portal next to your API key. + +> [!NOTE] > `os.getenv` is a function that reads environment variables. You can use it to read environment variables like `OPENAI_API_KEY` and `API_BASE`. Set these environment variables in your terminal or by using a library like `dotenv`. + +## Generate text + +The way to generate text is to use the `Completion` 类。以下是一个示例: + +```python +prompt = "Complete the following: Once upon a time there was a" + +completion = openai.Completion.create(model="davinci-002", prompt=prompt) +print(completion.choices[0].text) +``` + +在上面的代码中,我们创建了一个 completion 对象,并传入了我们想要使用的模型和提示词。然后我们打印生成的文本。 + +### 聊天完成 + +到目前为止,你已经看到了我们如何使用 `Completion` to generate text. But there's another class called `ChatCompletion` 更适合聊天机器人的方法。以下是使用它的示例: + +```python +import openai + +openai.api_key = "sk-..." + +completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello world"}]) +print(completion.choices[0].message.content) +``` + +关于此功能的更多内容将在后续章节中介绍。 + +## 练习 - 你的第一个文本生成应用 + +现在我们已经了解了如何设置和配置 openai,是时候构建你的第一个文本生成应用了。要构建你的应用,请按以下步骤操作: + +1. 创建一个虚拟环境并安装 openai: + + ```bash + python -m venv venv + source venv/bin/activate + pip install openai + ``` + + > [!NOTE] + > 如果你使用的是 Windows,请输入 `venv\Scripts\activate` instead of `source venv/bin/activate`. + + > [!NOTE] + > Locate your Azure OpenAI key by going to [https://portal.azure.com/](https://portal.azure.com/?WT.mc_id=academic-105485-koreyst) and search for `Open AI` and select the `Open AI resource` and then select `Keys and Endpoint` and copy the `Key 1` 值。 + +1. 创建一个 _app.py_ 文件,并给它如下代码: + + ```python + import openai + + openai.api_key = "" + + openai.api_type = 'azure' + openai.api_version = '2023-05-15' + openai.api_base = "" + deployment_name = "" + + # add your completion code + prompt = "Complete the following: Once upon a time there was a" + messages = [{"role": "user", "content": prompt}] + + # make completion + completion = client.chat.completions.create(model=deployment, messages=messages) + + # print response + print(completion.choices[0].message.content) + ``` + + > [!NOTE] + > 如果你使用的是 Azure OpenAI,你需要将 `api_type` to `azure` and set the `api_key` 设置为你的 Azure OpenAI 密钥。 + + 你应该会看到如下输出: + + ```output + very unhappy _____. + + Once upon a time there was a very unhappy mermaid. + ``` + +## 不同类型的提示词,用于不同的事情 + +现在你已经看到了如何使用提示词生成文本。你甚至已经有一个可以运行的程序,可以修改和更改以生成不同类型的文本。 + +提示词可以用于各种任务。例如: + +- **生成某种类型的文本**。例如,你可以生成一首诗、一个测验的问题等。 +- **查找信息**。你可以使用提示词查找信息,比如以下示例“在 web 开发中 CORS 是什么意思?”。 +- **生成代码**。你可以使用提示词生成代码,例如开发用于验证电子邮件的正则表达式,或者为什么不生成一个完整的程序,比如一个 web 应用? + +## 一个更实际的用例:食谱生成器 + +想象一下你家里有一些食材,你想做点什么。为此,你需要一个食谱。找到食谱的一种方法是使用搜索引擎,或者你可以使用 LLM 来做到这一点。 + +你可以这样写一个提示词: + +> "展示 5 个包含以下食材的菜肴食谱:鸡肉、土豆和胡萝卜。每个食谱列出使用的所有食材" + +给出上述提示词,你可能会得到类似这样的回应: + +```output +1. Roasted Chicken and Vegetables: +Ingredients: +- 4 chicken thighs +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 2 tablespoons olive oil +- 2 cloves garlic, minced +- 1 teaspoon dried thyme +- 1 teaspoon dried oregano +- Salt and pepper, to taste + +2. Chicken and Potato Stew: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 cloves garlic, minced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +3. Chicken and Potato Bake: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 2 cloves garlic, minced +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +4. Chicken and Potato Soup: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 cloves garlic, minced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 4 cups chicken broth +- Salt and pepper, to taste + +5. Chicken and Potato Hash: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 2 cloves garlic, minced +- 1 teaspoon dried oregano +``` + +这个结果很棒,我知道该做什么菜了。此时,有用的改进可能是: + +- 过滤掉我不喜欢或过敏的食材。 +- 生成购物清单,以防我家里没有所有食材。 + +对于上述情况,让我们添加一个额外的提示词: + +> "请去掉含有大蒜的食谱,因为我过敏,并用其他东西代替。另外,请根据我已经有的鸡肉、土豆和胡萝卜生成购物清单。" + +现在你有了一个新的结果,即: + +```output +1. Roasted Chicken and Vegetables: +Ingredients: +- 4 chicken thighs +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 2 tablespoons olive oil +- 1 teaspoon dried thyme +- 1 teaspoon dried oregano +- Salt and pepper, to taste + +2. Chicken and Potato Stew: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +3. Chicken and Potato Bake: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 1 cup chicken broth +- Salt and pepper, to taste + +4. Chicken and Potato Soup: +Ingredients: +- 2 tablespoons olive oil +- 1 onion, diced +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 teaspoon dried oregano +- 1 teaspoon dried thyme +- 4 cups chicken broth +- Salt and pepper, to taste + +5. Chicken and Potato Hash: +Ingredients: +- 2 tablespoons olive oil +- 2 chicken breasts, cut into cubes +- 2 potatoes, cut into cubes +- 2 carrots, cut into cubes +- 1 onion, diced +- 1 teaspoon dried oregano + +Shopping List: +- Olive oil +- Onion +- Thyme +- Oregano +- Salt +- Pepper +``` + +这是你的五个食谱,没有提到大蒜,你还有一个购物清单,考虑到了你家里已经有的食材。 + +## 练习 - 构建一个食谱生成器 + +现在我们已经演示了一个场景,让我们编写代码来匹配这个场景。要做到这一点,请按以下步骤操作: + +1. 使用现有的 _app.py_ 文件作为起点 +1. 找到 `prompt` 变量并将其代码更改为以下内容: + + ```python + prompt = "Show me 5 recipes for a dish with the following ingredients: chicken, potatoes, and carrots. Per recipe, list all the ingredients used" + ``` + + 如果你现在运行代码,你应该会看到类似的输出: + + ```output + -Chicken Stew with Potatoes and Carrots: 3 tablespoons oil, 1 onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 1/2 cups chicken broth, 1/2 cup dry white wine, 2 tablespoons chopped fresh parsley, 2 tablespoons unsalted butter, 1 1/2 pounds boneless, skinless chicken thighs, cut into 1-inch pieces + -Oven-Roasted Chicken with Potatoes and Carrots: 3 tablespoons extra-virgin olive oil, 1 tablespoon Dijon mustard, 1 tablespoon chopped fresh rosemary, 1 tablespoon chopped fresh thyme, 4 cloves garlic, minced, 1 1/2 pounds small red potatoes, quartered, 1 1/2 pounds carrots, quartered lengthwise, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 (4-pound) whole chicken + -Chicken, Potato, and Carrot Casserole: cooking spray, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and shredded, 1 potato, peeled and shredded, 1/2 teaspoon dried thyme leaves, 1/4 teaspoon salt, 1/4 teaspoon black pepper, 2 cups fat-free, low-sodium chicken broth, 1 cup frozen peas, 1/4 cup all-purpose flour, 1 cup 2% reduced-fat milk, 1/4 cup grated Parmesan cheese + + -One Pot Chicken and Potato Dinner: 2 tablespoons olive oil, 1 pound boneless, skinless chicken thighs, cut into 1-inch pieces, 1 large onion, chopped, 3 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 2 cups chicken broth, 1/2 cup dry white wine + + -Chicken, Potato, and Carrot Curry: 1 tablespoon vegetable oil, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 teaspoon ground coriander, 1 teaspoon ground cumin, 1/2 teaspoon ground turmeric, 1/2 teaspoon ground ginger, 1/4 teaspoon cayenne pepper, 2 cups chicken broth, 1/2 cup dry white wine, 1 (15-ounce) can chickpeas, drained and rinsed, 1/2 cup raisins, 1/2 cup chopped fresh cilantro + ``` + + > 注意,你的 LLM 是非确定性的,因此每次运行程序时,你可能会得到不同的结果。 + + 很好,让我们看看如何改进。为了改进,我们希望确保代码是灵活的,以便食材和食谱数量可以改进和更改。 + +1. 让我们通过以下方式更改代码: + + ```python + no_recipes = input("No of recipes (for example, 5): ") + + ingredients = input("List of ingredients (for example, chicken, potatoes, and carrots): ") + + # interpolate the number of recipes into the prompt an ingredients + prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used" + ``` + + 运行代码的测试可能如下所示: + + ```output + No of recipes (for example, 5): 3 + List of ingredients (for example, chicken, potatoes, and carrots): milk,strawberries + + -Strawberry milk shake: milk, strawberries, sugar, vanilla extract, ice cubes + -Strawberry shortcake: milk, flour, baking powder, sugar, salt, unsalted butter, strawberries, whipped cream + -Strawberry milk: milk, strawberries, sugar, vanilla extract + ``` + +### 通过添加过滤器和购物清单进行改进 + +我们现在有一个可以生成食谱的工作应用,并且它是灵活的,因为它依赖于用户的输入,无论是食谱数量还是使用的食材。 + +为了进一步改进,我们希望添加以下内容: + +- **过滤掉食材**。我们希望能够过滤掉我们不喜欢或过敏的食材。为了实现这一更改,我们可以编辑现有的提示词,并在其末尾添加一个过滤条件,如下所示: + + ```python + filter = input("Filter (for example, vegetarian, vegan, or gluten-free): ") + + prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used, no {filter}" + ``` + + 上面,我们在提示词末尾添加了 `{filter}`,我们还从用户那里获取了过滤值。 + + 运行程序的示例输入现在可能如下所示: + + ```output + No of recipes (for example, 5): 3 + List of ingredients (for example, chicken, potatoes, and carrots): onion,milk + Filter (for example, vegetarian, vegan, or gluten-free): no milk + + 1. French Onion Soup + + Ingredients: + + -1 large onion, sliced + -3 cups beef broth + -1 cup milk + -6 slices french bread + -1/4 cup shredded Parmesan cheese + -1 tablespoon butter + -1 teaspoon dried thyme + -1/4 teaspoon salt + -1/4 teaspoon black pepper + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add beef broth, milk, thyme, salt, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. Place french bread slices on soup bowls. + 5. Ladle soup over bread. + 6. Sprinkle with Parmesan cheese. + + 2. Onion and Potato Soup + + Ingredients: + + -1 large onion, chopped + -2 cups potatoes, diced + -3 cups vegetable broth + -1 cup milk + -1/4 teaspoon black pepper + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add potatoes, vegetable broth, milk, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. Serve hot. + + 3. Creamy Onion Soup + + Ingredients: + + -1 large onion, chopped + -3 cups vegetable broth + -1 cup milk + -1/4 teaspoon black pepper + -1/4 cup all-purpose flour + -1/2 cup shredded Parmesan cheese + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add vegetable broth, milk, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. In a small bowl, whisk together flour and Parmesan cheese until smooth. + 5. Add to soup and simmer for an additional 5 minutes, or until soup has thickened. + ``` + + 如你所见,任何含有牛奶的食谱都被过滤掉了。但是,如果你对乳糖不耐受,你可能还想过滤掉含有奶酪的食谱,因此需要明确说明。 + +- **生成购物清单**。我们希望生成购物清单,考虑到我们家里已经有的东西。 + + 对于此功能,我们可以尝试在一个提示词中解决所有问题,也可以将其拆分为两个提示词。让我们尝试后者。在这里,我们建议添加一个额外的提示词,但为了使其工作,我们需要将第一个提示词的结果作为上下文添加到后一个提示词中。 + + 找到代码中打印第一个提示词结果的部分,并在其下方添加以下代码: + + ```python + old_prompt_result = completion.choices[0].message.content + prompt = "Produce a shopping list for the generated recipes and please don't include ingredients that I already have." + + new_prompt = f"{old_prompt_result} {prompt}" + messages = [{"role": "user", "content": new_prompt}] + completion = openai.Completion.create(engine=deployment_name, messages=messages, max_tokens=1200) + + # print response + print("Shopping list:") + print(completion.choices[0].message.content) + ``` + + 请注意以下几点: + + 1. 我们通过将第一个提示词的结果添加到新提示词中来构建一个新提示词: + + ```python + new_prompt = f"{old_prompt_result} {prompt}" + ``` + + 1. 我们发出一个新的请求,但也考虑到我们在第一个提示词中请求的 tokens 数量,因此这次我们说 `max_tokens` 是 1200。 + + ```python + completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) + ``` + + 运行这段代码后,我们现在得到了以下输出: + + ```output + No of recipes (for example, 5): 2 + List of ingredients (for example, chicken, potatoes, and carrots): apple,flour + Filter (for example, vegetarian, vegan, or gluten-free): sugar + + + -Apple and flour pancakes: 1 cup flour, 1/2 tsp baking powder, 1/2 tsp baking soda, 1/4 tsp salt, 1 tbsp sugar, 1 egg, 1 cup buttermilk or sour milk, 1/4 cup melted butter, 1 Granny Smith apple, peeled and grated + -Apple fritters: 1-1/2 cups flour, 1 tsp baking powder, 1/4 tsp salt, 1/4 tsp baking soda, 1/4 tsp nutmeg, 1/4 tsp cinnamon, 1/4 tsp allspice, 1/4 cup sugar, 1/4 cup vegetable shortening, 1/4 cup milk, 1 egg, 2 cups shredded, peeled apples + Shopping list: + -Flour, baking powder, baking soda, salt, sugar, egg, buttermilk, butter, apple, nutmeg, cinnamon, allspice + ``` + +## 改善你的设置 + +到目前为止,我们的代码是可以工作的,但我们应该进行一些调整以进一步改进。我们应该做的一些事情是: + +- **将密钥与代码分开**,比如 API 密钥。密钥不应该存在于代码中,而应该存储在安全的位置。要将密钥与代码分开,我们可以使用环境变量和库,如 `python-dotenv` to load them from a file. Here's how that would look like in code: + + 1. Create a `.env` 文件,内容如下: + + ```bash + OPENAI_API_KEY=sk-... + ``` + + > 注意,对于 Azure,你需要设置以下环境变量: + + ```bash + OPENAI_API_TYPE=azure + OPENAI_API_VERSION=2023-05-15 + OPENAI_API_BASE= + ``` + + 在代码中,你可以这样加载环境变量: + + ```python + from dotenv import load_dotenv + + load_dotenv() + + openai.api_key = os.environ["OPENAI_API_KEY"] + ``` + +- **关于 token 长度的建议**。我们应该考虑生成所需文本的 token 数量。tokens 是有成本的,因此在可能的情况下,我们应该尝试节省 tokens 的使用。例如,我们可以重新措辞提示词,以便使用更少的 tokens 吗? + + 要更改使用的 tokens,你可以使用 `max_tokens` 参数。例如,如果你想使用 100 个 tokens,你可以这样做: + + ```python + completion = client.chat.completions.create(model=deployment, messages=messages, max_tokens=100) + ``` + +- **尝试改变温度**。温度是我们尚未提到的重要概念,但对程序的表现很重要。温度值越高,输出就越随机。相反,温度值越低,输出就越可预测。考虑你是否希望输出有变化。 + + 要改变温度,你可以使用 `temperature` 参数。例如,如果你想使用 0.5 的温度,你可以这样做: + + ```python + completion = client.chat.completions.create(model=deployment, messages=messages, temperature=0.5) + ``` + + > 注意,温度越接近 1.0,输出就越多样化。 + +## 作业 + +对于这次作业,你可以选择构建什么。 + +这里有一些建议: + +- 调整食谱生成器应用以进一步改进。尝试不同的温度值和提示词,看看你能得到什么。 +- 构建一个“学习伙伴”。这个应用应该能够回答关于某个主题的问题,例如 Python,你可以有类似“Python 中某个主题是什么?”的提示词,或者你可以有一个提示词,要求展示某个主题的代码等。 +- 历史机器人,让历史变得生动,指示机器人扮演某个历史人物并询问其生活和时代的问题。 + +## 解决方案 + +### 学习伙伴 + +以下是一个初始提示词,看看你如何使用它并根据需要进行调整。 + +```text +- "You're an expert on the Python language + + Suggest a beginner lesson for Python in the following format: + + Format: + - concepts: + - brief explanation of the lesson: + - exercise in code with solutions" +``` + +### 历史机器人 + +以下是你可以使用的一些提示词: + +```text +- "You are Abe Lincoln, tell me about yourself in 3 sentences, and respond using grammar and words like Abe would have used" +- "You are Abe Lincoln, respond using grammar and words like Abe would have used: + + Tell me about your greatest accomplishments, in 300 words" +``` + +## 知识检查 + +温度概念的作用是什么? + +1. 它控制输出的随机性。 +1. 它控制响应的大小。 +1. 它控制使用的 tokens 数量。 + +## 🚀 挑战 + +在完成作业时,尝试改变温度,尝试将其设置为 0、0.5 和 1。记住,0 是变化最小的,1 是变化最大的,哪个值最适合你的应用? + +## 出色的工作!继续学习 + +完成本课后,查看我们的 [生成式 AI 学习合集](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) 以继续提升你的生成式 AI 知识! + +前往第 7 课,我们将研究如何 [构建聊天应用](../07-building-chat-applications/README.md?WT.mc_id=academic-105485-koreyst)! + +**免责声明**: +本文件是使用基于机器的人工智能翻译服务翻译的。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文件视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用本翻译而产生的任何误解或误释,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/07-building-chat-applications/README.md b/translations/zh/07-building-chat-applications/README.md new file mode 100644 index 000000000..afa0be762 --- /dev/null +++ b/translations/zh/07-building-chat-applications/README.md @@ -0,0 +1,187 @@ +# 构建生成式 AI 驱动的聊天应用程序 + +[![构建生成式 AI 驱动的聊天应用程序](../../../translated_images/07-lesson-banner.png?WT.21b04c80931fcfbbce2e012cb013fa889033dc1cf59443c7c82ce598eaf13629.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lessons7-gh?WT.mc_id=academic-105485-koreyst) + +> _(点击上面的图片观看本课视频)_ + +在我们了解如何构建文本生成应用程序之后,让我们来看看聊天应用程序。 + +聊天应用程序已经融入我们的日常生活,不仅仅是提供随意对话的方式。它们是客户服务、技术支持,甚至是复杂建议系统的组成部分。很可能你不久前就通过聊天应用程序获得了一些帮助。随着我们将更先进的技术如生成式 AI 集成到这些平台中,其复杂性和挑战也随之增加。 + +我们需要回答的一些问题是: + +- **构建应用程序**。如何高效地构建并无缝集成这些 AI 驱动的应用程序以满足特定的使用场景? +- **监控**。一旦部署后,如何监控并确保应用程序在功能和遵循 [负责任的 AI 六原则](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-105485-koreyst)方面达到最高质量? + +随着我们进入一个由自动化和无缝人机交互定义的时代,了解生成式 AI 如何改变聊天应用程序的范围、深度和适应性变得至关重要。本课将探讨支持这些复杂系统的架构方面,深入研究为特定领域任务进行微调的方法,并评估确保负责任的 AI 部署所需的指标和考量。 + +## 简介 + +本课涵盖: + +- 高效构建和集成聊天应用程序的技术。 +- 如何对应用程序进行定制和微调。 +- 有效监控聊天应用程序的策略和考量。 + +## 学习目标 + +在本课结束时,你将能够: + +- 描述将聊天应用程序构建并集成到现有系统中的考量。 +- 针对特定使用场景定制聊天应用程序。 +- 识别关键指标和考量,以有效监控和维护 AI 驱动的聊天应用程序的质量。 +- 确保聊天应用程序负责任地利用 AI。 + +## 将生成式 AI 集成到聊天应用程序中 + +通过生成式 AI 提升聊天应用程序不仅仅是让它们变得更智能;还包括优化它们的架构、性能和用户界面,以提供优质的用户体验。这涉及到研究架构基础、API 集成和用户界面考量。本节旨在为你提供一个全面的路线图,以便在这些复杂领域中导航,无论你是将它们集成到现有系统中还是将其构建为独立平台。 + +在本节结束时,你将具备高效构建和整合聊天应用程序的专业知识。 + +### 聊天机器人还是聊天应用程序? + +在我们深入构建聊天应用程序之前,让我们比较一下“聊天机器人”和“AI 驱动的聊天应用程序”,它们承担不同的角色和功能。聊天机器人的主要目的是自动化特定的对话任务,如回答常见问题或跟踪包裹。它通常由基于规则的逻辑或复杂的 AI 算法控制。相比之下,AI 驱动的聊天应用程序是一个更广泛的环境,旨在促进各种形式的数字通信,如文本、语音和视频聊天。其定义特征是集成了一个生成式 AI 模型,该模型模拟细致入微的人类对话,根据各种输入和上下文提示生成响应。生成式 AI 驱动的聊天应用程序可以进行开放领域的讨论,适应不断发展的对话背景,甚至产生创造性或复杂的对话。 + +下表概述了关键的差异和相似之处,以帮助我们理解它们在数字通信中的独特角色。 + +| 聊天机器人 | 生成式 AI 驱动的聊天应用程序 | +| ------------------------------------- | -------------------------------------- | +| 任务导向和基于规则 | 上下文感知 | +| 通常集成到更大的系统中 | 可以托管一个或多个聊天机器人 | +| 限于编程功能 | 包含生成式 AI 模型 | +| 专门化和结构化的交互 | 能够进行开放领域的讨论 | + +### 利用 SDK 和 API 的预构建功能 + +构建聊天应用程序时,一个很好的第一步是评估现有的东西。使用 SDK 和 API 来构建聊天应用程序是一种有利的策略,原因多种多样。通过集成文档良好的 SDK 和 API,你可以战略性地为应用程序的长期成功奠定基础,解决可扩展性和维护问题。 + +- **加快开发过程并减少开销**:依赖预构建的功能而不是耗费成本自行构建它们,让你可以专注于应用程序中可能认为更重要的其他方面,如业务逻辑。 +- **更好的性能**:从头构建功能时,你最终会问自己“它如何扩展?这个应用程序是否能够处理突然的用户激增?”良好维护的 SDK 和 API 通常内置了这些问题的解决方案。 +- **更容易维护**:更新和改进更容易管理,因为大多数 API 和 SDK 只需在发布新版本时更新库即可。 +- **接触尖端技术**:利用经过微调和训练的模型提供你的应用程序自然语言能力。 + +访问 SDK 或 API 的功能通常涉及获得使用所提供服务的权限,这通常通过使用唯一的密钥或身份验证令牌来实现。我们将使用 OpenAI Python 库来探索这是什么样的。你也可以在以下 [OpenAI 笔记本](../../../07-building-chat-applications/python/oai-assignment.ipynb) 或 [Azure OpenAI 服务笔记本](../../../07-building-chat-applications/python/aoai-assignment.ipynb) 中亲自尝试。 + +```python +import os +from openai import OpenAI + +API_KEY = os.getenv("OPENAI_API_KEY","") + +client = OpenAI( + api_key=API_KEY + ) + +chat_completion = client.chat.completions.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Suggest two titles for an instructional lesson on chat applications for generative AI."}]) +``` + +上面的示例使用 GPT-3.5 Turbo 模型来完成提示,但注意在执行之前设置了 API 密钥。如果不设置密钥,你将收到错误。 + +## 用户体验 (UX) + +一般的 UX 原则适用于聊天应用程序,但由于涉及机器学习组件,这里有一些额外的考量变得特别重要。 + +- **解决歧义的机制**:生成式 AI 模型有时会生成模糊的答案。一个允许用户请求澄清的功能可能会在他们遇到此问题时有所帮助。 +- **上下文保留**:高级生成式 AI 模型能够在对话中记住上下文,这对用户体验可能是一个必要的资产。给予用户控制和管理上下文的能力可以改善用户体验,但也带来了保留敏感用户信息的风险。对存储这些信息的时间进行考量,例如引入保留策略,可以在上下文需求和隐私之间取得平衡。 +- **个性化**:通过学习和适应,AI 模型为用户提供个性化体验。通过用户资料等功能定制用户体验不仅让用户感到被理解,还帮助他们找到特定答案,从而创造出更高效和满意的互动。 + +OpenAI 的 ChatGPT 中的“自定义指令”设置就是个性化的一个例子。它允许你提供关于自己的信息,这可能是你的提示的重要上下文。以下是一个自定义指令的示例。 + +![ChatGPT 中的自定义指令设置](../../../translated_images/custom-instructions.png?WT.11dedb56ee96f65348e96bb7d6a0e61e668da5fe777ccd5b63f23e0e7fac407b.zh.mc_id=academic-105485-koreyst) + +这个“资料”提示 ChatGPT 创建关于链表的课程计划。注意 ChatGPT 考虑到用户可能希望根据她的经验获得更深入的课程计划。 + +![ChatGPT 中关于链表课程计划的提示](../../../translated_images/lesson-plan-prompt.png?WT.a7012bd5b8467d2255be3eb7be93a8622cf74091e2fa815e80c0118416f064fc.zh.mc_id=academic-105485-koreyst) + +### 微软的大型语言模型系统消息框架 + +[微软提供了指导](https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-the-models-output-format?WT.mc_id=academic-105485-koreyst)来编写生成 LLM 响应的有效系统消息,分为四个方面: + +1. 定义模型的目标用户以及其能力和限制。 +2. 定义模型的输出格式。 +3. 提供展示模型预期行为的具体示例。 +4. 提供额外的行为保护措施。 + +### 无障碍性 + +无论用户有视觉、听觉、运动还是认知障碍,设计良好的聊天应用程序都应该可以被所有人使用。以下列表分解了旨在增强各种用户障碍的无障碍功能。 + +- **视觉障碍功能**:高对比度主题和可调整大小的文本,屏幕阅读器兼容性。 +- **听觉障碍功能**:文本到语音和语音到文本功能,音频通知的视觉提示。 +- **运动障碍功能**:支持键盘导航,语音命令。 +- **认知障碍功能**:简化语言选项。 + +## 定制和微调领域特定语言模型 + +想象一下一个聊天应用程序,它理解你公司的术语并预测其用户群体通常会有的特定查询。有几种方法值得一提: + +- **利用 DSL 模型**。DSL 代表领域特定语言。你可以利用所谓的 DSL 模型,它在特定领域进行训练,以理解其概念和场景。 +- **应用微调**。微调是用特定数据进一步训练模型的过程。 + +## 定制:使用 DSL + +利用领域特定语言模型(DSL 模型)可以通过提供专业的、上下文相关的交互来增强用户参与度。它是一个训练或微调以理解和生成与特定领域、行业或主题相关的文本的模型。使用 DSL 模型的选项可以从从头训练到通过 SDK 和 API 使用现有模型。另一个选项是微调,即采用现有的预训练模型并将其适应于特定领域。 + +## 定制:应用微调 + +当预训练模型在特定领域或任务中表现不佳时,通常会考虑进行微调。 + +例如,医疗查询复杂且需要大量上下文。当医疗专业人员诊断患者时,是基于多种因素,如生活方式或既往病史,甚至可能依赖于最近的医学期刊来验证他们的诊断。在这种细微的场景中,通用 AI 聊天应用程序不能成为可靠的来源。 + +### 场景:医疗应用程序 + +考虑一个设计用于帮助医疗从业人员的聊天应用程序,通过提供治疗指南、药物相互作用或最近研究发现的快速参考。 + +通用模型可能足以回答基本的医学问题或提供一般建议,但它可能在以下方面表现不佳: + +- **高度特定或复杂的案例**。例如,神经学家可能会问应用程序,“目前管理儿童患者耐药性癫痫的最佳实践是什么?” +- **缺乏最新进展**。通用模型可能难以提供一个包含神经学和药理学最新进展的当前答案。 + +在这些情况下,使用专门的医学数据集微调模型可以显著提高其更准确和可靠地处理这些复杂医学查询的能力。这需要访问大量相关的数据集,以代表需要解决的领域特定挑战和问题。 + +## 高质量 AI 驱动聊天体验的考量 + +本节概述了“高质量”聊天应用程序的标准,包括可操作指标的捕获和遵循负责任利用 AI 技术的框架。 + +### 关键指标 + +为了保持应用程序的高质量性能,跟踪关键指标和考量是必不可少的。这些测量不仅确保了应用程序的功能,还评估了 AI 模型和用户体验的质量。以下是涵盖基本、AI 和用户体验指标的列表。 + +| 指标 | 定义 | 聊天开发人员的考量 | +| ----------------------------- | ------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- | +| **正常运行时间** | 测量应用程序可操作并可供用户访问的时间。 | 你将如何最大限度地减少停机时间? | +| **响应时间** | 应用程序对用户查询的回复时间。 | 你如何优化查询处理以提高响应时间? | +| **准确率** | 真正预测的正数与预测的正数总数的比率 | 你将如何验证模型的准确率? | +| **召回率(敏感性)** | 真正预测的正数与实际正数的比率 | 你将如何测量和提高召回率? | +| **F1 分数** | 准确率和召回率的调和平均数,平衡两者之间的权衡。 | 你的目标 F1 分数是什么?你将如何平衡准确率和召回率? | +| **困惑度** | 测量模型预测的概率分布与数据的实际分布的对齐程度。 | 你将如何最大限度地减少困惑度? | +| **用户满意度指标** | 衡量用户对应用程序的感知。通常通过调查收集。 | 你将如何收集用户反馈?你将如何根据反馈进行调整? | +| **错误率** | 模型在理解或输出中犯错误的速率。 | 你有哪些策略来减少错误率? | +| **再训练周期** | 更新模型以纳入新数据和见解的频率。 | 你将如何频繁地再训练模型?什么会触发再训练周期? | +| **异常检测** | 用于识别不符合预期行为的异常模式的工具和技术。 | 你将如何应对异常? | + +### 在聊天应用程序中实施负责任的 AI 实践 + +微软的负责任 AI 方法确定了六项原则,应指导 AI 的开发和使用。以下是原则、定义以及聊天开发人员应考虑的事项和原因。 + +| 原则 | 微软的定义 | 聊天开发人员的考量 | 为什么重要 | +| -------------------------- | ------------------------------------------------ | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| 公平性 | AI 系统应公平对待所有人。 | 确保聊天应用程序不基于用户数据进行歧视。 | 建立用户的信任和包容性;避免法律后果。 | +| 可靠性和安全性 | AI 系统应可靠、安全地运行。 | 实施测试和故障保护措施以最大限度地减少错误和风险。 | 确保用户满意度,防止潜在伤害。 | +| 隐私和安全 | AI 系统应安全并尊重隐私。 | 实施强加密和数据保护措施。 | 保护敏感用户数据并遵守隐私法律。 | +| 包容性 | AI 系统应赋能所有人并吸引人们参与。 | 设计的 UI/UX 应适合多样化的受众,易于使用。 | 确保更广泛的人群可以有效使用应用程序。 | +| 透明性 | AI 系统应易于理解。 | 提供清晰的文档和 AI 响应的理由。 | 如果用户能够理解决策是如何做出的,他们更可能信任系统。 | +| 问责制 | 人们应对 AI 系统负责。 | 建立一个清晰的流程来审计和改进 AI 决策。 | 在发生错误时能够持续改进和采取纠正措施。 | + +## 任务 + +请参阅[任务](../../../07-building-chat-applications/python),它将带你完成一系列练习,从运行你的第一个聊天提示到分类和总结文本等。注意,任务有不同编程语言的版本! + +## 干得好!继续旅程 + +完成本课后,查看我们的 [生成式 AI 学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) 以继续提升你的生成式 AI 知识! + +前往第 8 课,了解如何开始 [构建搜索应用程序](../08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst)! + +**免责声明**: +本文件使用机器翻译服务进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原文档的原始语言版本视为权威来源。对于关键信息,建议进行专业人工翻译。对于因使用本翻译而产生的任何误解或误读,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/08-building-search-applications/README.md b/translations/zh/08-building-search-applications/README.md new file mode 100644 index 000000000..b64642e78 --- /dev/null +++ b/translations/zh/08-building-search-applications/README.md @@ -0,0 +1,166 @@ +# 构建搜索应用程序 + +[![生成式 AI 和大语言模型简介](../../../translated_images/08-lesson-banner.png?WT.38007baa37b3809836fefd9caf72cba7434d1d1e82074d170c2b066e3c7aa2d0.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson8-gh?WT.mc_id=academic-105485-koreyst) + +> > _点击上面的图片查看本课视频_ + +大语言模型不仅限于聊天机器人和文本生成。还可以使用嵌入来构建搜索应用程序。嵌入是数据的数值表示,也称为向量,可以用于数据的语义搜索。 + +在本课中,您将为我们的教育初创公司构建一个搜索应用程序。我们的初创公司是一家非营利组织,为发展中国家的学生提供免费教育。我们的初创公司拥有大量的 YouTube 视频,学生可以用来学习 AI。我们的初创公司希望构建一个搜索应用程序,允许学生通过输入问题来搜索 YouTube 视频。 + +例如,学生可能会输入“什么是 Jupyter Notebooks?”或“什么是 Azure ML”,搜索应用程序将返回与问题相关的 YouTube 视频列表,更好的是,搜索应用程序将返回视频中问题答案所在位置的链接。 + +## 介绍 + +在本课中,我们将涵盖: + +- 语义搜索与关键词搜索。 +- 什么是文本嵌入。 +- 创建文本嵌入索引。 +- 搜索文本嵌入索引。 + +## 学习目标 + +完成本课后,您将能够: + +- 区分语义搜索和关键词搜索。 +- 解释什么是文本嵌入。 +- 使用嵌入创建用于数据搜索的应用程序。 + +## 为什么要构建搜索应用程序? + +创建搜索应用程序将帮助您了解如何使用嵌入来搜索数据。您还将学习如何构建一个可以让学生快速找到信息的搜索应用程序。 + +本课包括 Microsoft [AI Show](https://www.youtube.com/playlist?list=PLlrxD0HtieHi0mwteKBOfEeOYf0LJU4O1) YouTube 频道的 YouTube 转录的嵌入索引。AI Show 是一个教授 AI 和机器学习的 YouTube 频道。嵌入索引包含截至 2023 年 10 月的每个 YouTube 转录的嵌入。您将使用嵌入索引为我们的初创公司构建一个搜索应用程序。搜索应用程序返回视频中问题答案所在位置的链接。这是一种让学生快速找到所需信息的好方法。 + +以下是问题“你能用 rstudio 与 azure ml 吗?”的语义查询示例。查看 YouTube URL,您会看到 URL 包含一个时间戳,带您到视频中问题答案所在的位置。 + +![问题“你能用 rstudio 与 Azure ML 吗?”的语义查询](../../../translated_images/query-results.png?WT.c2bcab091b108e899efca56b2cd996ea8f95145c049888f52ef7495a2b7df665.zh.mc_id=academic-105485-koreyst) + +## 什么是语义搜索? + +现在您可能会想,什么是语义搜索?语义搜索是一种使用查询中单词的语义或意义来返回相关结果的搜索技术。 + +以下是一个语义搜索的示例。假设您正在寻找购买汽车,您可能会搜索“我的梦想车”,语义搜索理解您不是`dreaming`一辆车,而是您正在寻找购买您的`ideal`车。语义搜索理解您的意图并返回相关结果。相反的是`keyword search`,它将字面上搜索关于汽车的梦想,并且经常返回不相关的结果。 + +## 什么是文本嵌入? + +[文本嵌入](https://en.wikipedia.org/wiki/Word_embedding?WT.mc_id=academic-105485-koreyst)是一种用于[自然语言处理](https://en.wikipedia.org/wiki/Natural_language_processing?WT.mc_id=academic-105485-koreyst)的文本表示技术。文本嵌入是文本的语义数值表示。嵌入用于以机器易于理解的方式表示数据。有许多用于构建文本嵌入的模型,在本课中,我们将重点介绍使用 OpenAI 嵌入模型生成嵌入。 + +这是一个示例,假设以下文本是 AI Show YouTube 频道某一集的转录: + +```text +Today we are going to learn about Azure Machine Learning. +``` + +我们将文本传递给 OpenAI 嵌入 API,它将返回一个由 1536 个数字组成的嵌入,也就是一个向量。向量中的每个数字代表文本的不同方面。为简洁起见,这里是向量的前 10 个数字。 + +```python +[-0.006655829958617687, 0.0026128944009542465, 0.008792596869170666, -0.02446001023054123, -0.008540431968867779, 0.022071078419685364, -0.010703742504119873, 0.003311325330287218, -0.011632772162556648, -0.02187200076878071, ...] +``` + +## 嵌入索引是如何创建的? + +本课的嵌入索引是通过一系列 Python 脚本创建的。您可以在本课的“scripts”文件夹中的 [README](./scripts/README.md?WT.mc_id=academic-105485-koreyst) 中找到脚本和说明。您不需要运行这些脚本来完成本课,因为嵌入索引已经为您提供。 + +脚本执行以下操作: + +1. 下载 [AI Show](https://www.youtube.com/playlist?list=PLlrxD0HtieHi0mwteKBOfEeOYf0LJU4O1) 播放列表中每个 YouTube 视频的转录。 +2. 使用 [OpenAI Functions](https://learn.microsoft.com/azure/ai-services/openai/how-to/function-calling?WT.mc_id=academic-105485-koreyst),尝试从 YouTube 转录的前 3 分钟中提取演讲者姓名。每个视频的演讲者姓名存储在名为 `embedding_index_3m.json` 的嵌入索引中。 +3. 然后将转录文本分块为**3 分钟文本段**。段包括从下一个段重叠的约 20 个单词,以确保段的嵌入不被截断并提供更好的搜索上下文。 +4. 然后将每个文本段传递给 OpenAI Chat API,将文本总结为 60 个单词。摘要也存储在嵌入索引 `embedding_index_3m.json` 中。 +5. 最后,将段文本传递给 OpenAI 嵌入 API。嵌入 API 返回一个由 1536 个数字组成的向量,代表段的语义意义。段以及 OpenAI 嵌入向量存储在嵌入索引 `embedding_index_3m.json` 中。 + +### 向量数据库 + +为简化课程,嵌入索引存储在名为 `embedding_index_3m.json` 的 JSON 文件中,并加载到 Pandas DataFrame 中。然而,在生产环境中,嵌入索引将存储在向量数据库中,如 [Azure Cognitive Search](https://learn.microsoft.com/training/modules/improve-search-results-vector-search?WT.mc_id=academic-105485-koreyst)、[Redis](https://cookbook.openai.com/examples/vector_databases/redis/readme?WT.mc_id=academic-105485-koreyst)、[Pinecone](https://cookbook.openai.com/examples/vector_databases/pinecone/readme?WT.mc_id=academic-105485-koreyst)、[Weaviate](https://cookbook.openai.com/examples/vector_databases/weaviate/readme?WT.mc_id=academic-105485-koreyst) 等。 + +## 理解余弦相似性 + +我们已经了解了文本嵌入,下一步是学习如何使用文本嵌入来搜索数据,特别是使用余弦相似性查找与给定查询最相似的嵌入。 + +### 什么是余弦相似性? + +余弦相似性是两个向量之间相似性的度量,您也会听到它被称为`nearest neighbor search`。要执行余弦相似性搜索,您需要使用 OpenAI 嵌入 API 为 _query_ 文本进行_向量化_。然后计算查询向量与嵌入索引中每个向量之间的_余弦相似性_。记住,嵌入索引为每个 YouTube 转录文本段提供一个向量。最后,根据余弦相似性对结果进行排序,余弦相似性最高的文本段与查询最相似。 + +从数学角度来看,余弦相似性测量两个向量在多维空间中投影的角度的余弦。这个测量很有用,因为如果两个文档因为大小而在欧几里得距离上相距很远,它们之间的角度可能仍然较小,因此具有较高的余弦相似性。有关余弦相似性方程的更多信息,请参见[余弦相似性](https://en.wikipedia.org/wiki/Cosine_similarity?WT.mc_id=academic-105485-koreyst)。 + +## 构建您的第一个搜索应用程序 + +接下来,我们将学习如何使用嵌入构建搜索应用程序。搜索应用程序将允许学生通过输入问题来搜索视频。搜索应用程序将返回与问题相关的视频列表。搜索应用程序还将返回视频中问题答案所在位置的链接。 + +此解决方案在 Windows 11、macOS 和 Ubuntu 22.04 上使用 Python 3.10 或更高版本构建和测试。您可以从 [python.org](https://www.python.org/downloads/?WT.mc_id=academic-105485-koreyst) 下载 Python。 + +## 作业 - 构建搜索应用程序,帮助学生 + +我们在本课开始时介绍了我们的初创公司。现在是时候让学生能够为他们的评估构建一个搜索应用程序了。 + +在此作业中,您将创建用于构建搜索应用程序的 Azure OpenAI 服务。您将创建以下 Azure OpenAI 服务。您需要一个 Azure 订阅才能完成此作业。 + +### 启动 Azure 云 Shell + +1. 登录 [Azure 门户](https://portal.azure.com/?WT.mc_id=academic-105485-koreyst)。 +2. 选择 Azure 门户右上角的云 Shell 图标。 +3. 选择 **Bash** 作为环境类型。 + +#### 创建资源组 + +> 对于这些说明,我们使用位于美国东部的名为 "semantic-video-search" 的资源组。 +> 您可以更改资源组的名称,但在更改资源的位置时, +> 请查看[模型可用性表](https://aka.ms/oai/models?WT.mc_id=academic-105485-koreyst)。 + +```shell +az group create --name semantic-video-search --location eastus +``` + +#### 创建 Azure OpenAI 服务资源 + +从 Azure 云 Shell,运行以下命令以创建 Azure OpenAI 服务资源。 + +```shell +az cognitiveservices account create --name semantic-video-openai --resource-group semantic-video-search \ + --location eastus --kind OpenAI --sku s0 +``` + +#### 获取用于此应用程序的端点和密钥 + +从 Azure 云 Shell,运行以下命令以获取 Azure OpenAI 服务资源的端点和密钥。 + +```shell +az cognitiveservices account show --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .properties.endpoint +az cognitiveservices account keys list --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .key1 +``` + +#### 部署 OpenAI 嵌入模型 + +从 Azure 云 Shell,运行以下命令以部署 OpenAI 嵌入模型。 + +```shell +az cognitiveservices account deployment create \ + --name semantic-video-openai \ + --resource-group semantic-video-search \ + --deployment-name text-embedding-ada-002 \ + --model-name text-embedding-ada-002 \ + --model-version "2" \ + --model-format OpenAI \ + --sku-capacity 100 --sku-name "Standard" +``` + +## 解决方案 + +在 GitHub Codespaces 中打开[解决方案笔记本](../../../08-building-search-applications/python/aoai-solution.ipynb)并按照 Jupyter Notebook 中的说明进行操作。 + +当您运行笔记本时,系统会提示您输入查询。输入框看起来像这样: + +![用户输入查询的输入框](../../../translated_images/notebook-search.png?WT.2910e3d34815aab8d713050521ac5fcb2436defe66fed016f56b95867eb12fbd.zh.mc_id=academic-105485-koreyst) + +## 做得好!继续学习 + +完成本课后,请查看我们的 [生成式 AI 学习合集](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst),继续提升您的生成式 AI 知识! + +前往第 9 课,我们将学习如何[构建图像生成应用程序](../09-building-image-applications/README.md?WT.mc_id=academic-105485-koreyst)! + +**免责声明**: +本文档使用机器翻译服务进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原文档视为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用此翻译而产生的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/08-building-search-applications/scripts/README.md b/translations/zh/08-building-search-applications/scripts/README.md new file mode 100644 index 000000000..fd75f67db --- /dev/null +++ b/translations/zh/08-building-search-applications/scripts/README.md @@ -0,0 +1,166 @@ +# 转录数据准备 + +转录数据准备脚本下载 YouTube 视频转录内容,并为使用 OpenAI 嵌入和函数示例的语义搜索做好准备。 + +转录数据准备脚本已经在最新版本的 Windows 11、macOS Ventura 和 Ubuntu 22.04(及以上版本)上进行了测试。 + +## 创建所需的 Azure OpenAI 服务资源 + +> [!IMPORTANT] +> 我们建议您将 Azure CLI 更新到最新版本,以确保与 OpenAI 的兼容性。 +> 请参阅[文档](https://learn.microsoft.com/cli/azure/update-azure-cli?WT.mc_id=academic-105485-koreyst)。 + +1. 创建一个资源组 + +> [!NOTE] +> 在这些说明中,我们使用位于美国东部的名为 "semantic-video-search" 的资源组。 +> 您可以更改资源组的名称,但在更改资源位置时,请检查[模型可用性表](https://aka.ms/oai/models?WT.mc_id=academic-105485-koreyst)。 + +```console +az group create --name semantic-video-search --location eastus +``` + +1. 创建一个 Azure OpenAI 服务资源。 + +```console +az cognitiveservices account create --name semantic-video-openai --resource-group semantic-video-search \ + --location eastus --kind OpenAI --sku s0 +``` + +1. 获取此应用程序使用的端点和密钥。 + +```console +az cognitiveservices account show --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .properties.endpoint +az cognitiveservices account keys list --name semantic-video-openai \ + --resource-group semantic-video-search | jq -r .key1 +``` + +1. 部署以下模型: + - `text-embedding-ada-002` version `2` or greater, named `text-embedding-ada-002` + - `gpt-35-turbo` version `0613` or greater, named `gpt-35-turbo` + +```console +az cognitiveservices account deployment create \ + --name semantic-video-openai \ + --resource-group semantic-video-search \ + --deployment-name text-embedding-ada-002 \ + --model-name text-embedding-ada-002 \ + --model-version "2" \ + --model-format OpenAI \ + --scale-settings-scale-type "Standard" +az cognitiveservices account deployment create \ + --name semantic-video-openai \ + --resource-group semantic-video-search \ + --deployment-name gpt-35-turbo \ + --model-name gpt-35-turbo \ + --model-version "0613" \ + --model-format OpenAI \ + --sku-capacity 100 \ + --sku-name "Standard" +``` + +## 必需的软件 + +- [Python 3.9](https://www.python.org/downloads/?WT.mc_id=academic-105485-koreyst) 或更高版本 + +## 环境变量 + +运行 YouTube 转录数据准备脚本需要以下环境变量。 + +### 在 Windows 上 + +建议将变量添加到您的 `user` environment variables. +`Windows Start` > `Edit the system environment variables` > `Environment Variables` > `User variables` for [USER] > `New`。 + +```text +AZURE_OPENAI_API_KEY \ +AZURE_OPENAI_ENDPOINT \ +AZURE_OPENAI_MODEL_DEPLOYMENT_NAME \ +GOOGLE_DEVELOPER_API_KEY = \ +``` + +### 在 Linux 和 macOS 上 + +建议将以下导出添加到您的 `~/.bashrc` or `~/.zshrc` 文件中。 + +```bash +export AZURE_OPENAI_API_KEY= +export AZURE_OPENAI_ENDPOINT= +export AZURE_OPENAI_MODEL_DEPLOYMENT_NAME= +export GOOGLE_DEVELOPER_API_KEY= +``` + +## 安装所需的 Python 库 + +1. 如果尚未安装,请安装 [git 客户端](https://git-scm.com/downloads?WT.mc_id=academic-105485-koreyst)。 +1. 从 `Terminal` 窗口中,将示例克隆到您喜欢的仓库文件夹。 + + ```bash + git clone https://github.com/gloveboxes/semanic-search-openai-embeddings-functions.git + ``` + +1. 导航到 `data_prep` 文件夹。 + + ```bash + cd semanic-search-openai-embeddings-functions/src/data_prep + ``` + +1. 创建一个 Python 虚拟环境。 + + 在 Windows 上: + + ```powershell + python -m venv .venv + ``` + + 在 macOS 和 Linux 上: + + ```bash + python3 -m venv .venv + ``` + +1. 激活 Python 虚拟环境。 + + 在 Windows 上: + + ```powershell + .venv\Scripts\activate + ``` + + 在 macOS 和 Linux 上: + + ```bash + source .venv/bin/activate + ``` + +1. 安装所需的库。 + + 在 Windows 上: + + ```powershell + pip install -r requirements.txt + ``` + + 在 macOS 和 Linux 上: + + ```bash + pip3 install -r requirements.txt + ``` + +## 运行 YouTube 转录数据准备脚本 + +### 在 Windows 上 + +```powershell +.\transcripts_prepare.ps1 +``` + +### 在 macOS 和 Linux 上 + +```bash +./transcripts_prepare.sh +``` + +**免责声明**: +本文档已使用基于机器的人工智能翻译服务进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原文档的母语版本视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用本翻译而引起的任何误解或误释,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/09-building-image-applications/README.md b/translations/zh/09-building-image-applications/README.md new file mode 100644 index 000000000..db5b90b06 --- /dev/null +++ b/translations/zh/09-building-image-applications/README.md @@ -0,0 +1,468 @@ +# 构建图像生成应用程序 + +[![构建图像生成应用程序](../../../translated_images/09-lesson-banner.png?WT.d9f0561bfac2f22fe149efecb3524eaf381a4aa260ba334f49b1fd215bd59d75.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson9-gh?WT.mc_id=academic-105485-koreyst) + +大型语言模型(LLM)的应用不仅限于文本生成。通过文本描述生成图像也是可行的。将图像作为一种模态可以在许多领域发挥重要作用,如医疗技术、建筑、旅游、游戏开发等。在本章中,我们将研究两个最流行的图像生成模型,DALL-E 和 Midjourney。 + +## 介绍 + +在本课中,我们将涵盖: + +- 图像生成及其重要性。 +- DALL-E 和 Midjourney,它们是什么以及如何工作。 +- 如何构建图像生成应用程序。 + +## 学习目标 + +完成本课后,您将能够: + +- 构建一个图像生成应用程序。 +- 使用元提示为您的应用程序定义边界。 +- 使用 DALL-E 和 Midjourney。 + +## 为什么要构建图像生成应用程序? + +图像生成应用程序是探索生成式 AI 能力的绝佳方式。它们可以用于以下用途: + +- **图像编辑和合成**。您可以为各种用例生成图像,例如图像编辑和图像合成。 + +- **应用于多个行业**。它们还可以用于为多个行业生成图像,如医疗技术、旅游、游戏开发等。 + +## 场景:Edu4All + +作为本课的一部分,我们将继续与我们的初创公司 Edu4All 合作。在本课中,学生将为他们的评估创建图像,具体的图像由学生决定,但他们可以为自己的童话故事绘制插图,或为他们的故事创建新角色,或帮助他们可视化他们的想法和概念。 + +例如,如果学生在课堂上研究纪念碑,Edu4All 的学生可以生成如下内容: + +![Edu4All 初创公司,纪念碑课堂,埃菲尔铁塔](../../../translated_images/startup.png?WT.da6453984b26f46f3e26925e20877c740be4f328afdfce9fe36b23e7b434c7b5.zh.mc_id=academic-105485-koreyst) + +使用类似的提示 + +> "清晨阳光下,埃菲尔铁塔旁的一只狗" + +## 什么是 DALL-E 和 Midjourney? + +[DALL-E](https://openai.com/dall-e-2?WT.mc_id=academic-105485-koreyst) 和 [Midjourney](https://www.midjourney.com/?WT.mc_id=academic-105485-koreyst) 是两个最受欢迎的图像生成模型,它们允许您使用提示生成图像。 + +### DALL-E + +让我们从 DALL-E 开始,这是一个从文本描述生成图像的生成式 AI 模型。 + +> [DALL-E 是两个模型的组合,CLIP 和扩散注意力](https://towardsdatascience.com/openais-dall-e-and-clip-101-a-brief-introduction-3a4367280d4e?WT.mc_id=academic-105485-koreyst)。 + +- **CLIP** 是一个从图像和文本生成嵌入的模型,这些嵌入是数据的数值表示。 + +- **扩散注意力** 是一个从嵌入生成图像的模型。DALL-E 是在图像和文本数据集上训练的,可以用于从文本描述生成图像。例如,DALL-E 可以用来生成戴帽子的猫或有莫霍克发型的狗的图像。 + +### Midjourney + +Midjourney 的工作方式与 DALL-E 类似,它从文本提示生成图像。Midjourney 也可以用来生成图像,使用类似“戴帽子的猫”或“有莫霍克发型的狗”的提示。 + +![由 Midjourney 生成的图像,机械鸽子](https://upload.wikimedia.org/wikipedia/commons/thumb/8/8c/Rupert_Breheny_mechanical_dove_eca144e7-476d-4976-821d-a49c408e4f36.png/440px-Rupert_Breheny_mechanical_dove_eca144e7-476d-4976-821d-a49c408e4f36.png?WT.mc_id=academic-105485-koreyst) +_图片来源 Wikipedia,由 Midjourney 生成的图像_ + +## DALL-E 和 Midjourney 如何工作 + +首先,[DALL-E](https://arxiv.org/pdf/2102.12092.pdf?WT.mc_id=academic-105485-koreyst)。DALL-E 是基于变压器架构的生成式 AI 模型,具有自回归变压器。 + +自回归变压器定义了模型如何从文本描述生成图像,它一次生成一个像素,然后使用生成的像素生成下一个像素。通过神经网络中的多个层,直到图像完成。 + +通过这个过程,DALL-E 控制图像中生成的属性、对象、特征等。然而,DALL-E 2 和 3 对生成的图像有更多控制。 + +## 构建您的第一个图像生成应用程序 + +那么构建一个图像生成应用程序需要什么呢?您需要以下库: + +- **python-dotenv**,强烈推荐您使用此库将您的密钥保存在代码之外的_.env_文件中。 +- **openai**,这个库是您用来与 OpenAI API 交互的。 +- **pillow**,用于在 Python 中处理图像。 +- **requests**,帮助您进行 HTTP 请求。 + +1. 创建一个文件_.env_,内容如下: + + ```text + AZURE_OPENAI_ENDPOINT= + AZURE_OPENAI_API_KEY= + ``` + + 在 Azure Portal 中为您的资源找到此信息,位于“密钥和终端”部分。 + +1. 将上述库收集在一个名为_requirements.txt_的文件中,如下所示: + + ```text + python-dotenv + openai + pillow + requests + ``` + +1. 接下来,创建虚拟环境并安装库: + + ```bash + python3 -m venv venv + source venv/bin/activate + pip install -r requirements.txt + ``` + + 对于 Windows,使用以下命令创建和激活您的虚拟环境: + + ```bash + python3 -m venv venv + venv\Scripts\activate.bat + ``` + +1. 在一个名为_app.py_的文件中添加以下代码: + + ```python + import openai + import os + import requests + from PIL import Image + import dotenv + + # import dotenv + dotenv.load_dotenv() + + # Get endpoint and key from environment variables + openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] + openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] + + # Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only) + openai.api_version = '2023-06-01-preview' + openai.api_type = 'azure' + + + try: + # Create an image by using the image generation API + generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) + # Set the directory for the stored image + image_dir = os.path.join(os.curdir, 'images') + + # If the directory doesn't exist, create it + if not os.path.isdir(image_dir): + os.mkdir(image_dir) + + # Initialize the image path (note the filetype should be png) + image_path = os.path.join(image_dir, 'generated-image.png') + + # Retrieve the generated image + image_url = generation_response["data"][0]["url"] # extract image URL from response + generated_image = requests.get(image_url).content # download the image + with open(image_path, "wb") as image_file: + image_file.write(generated_image) + + # Display the image in the default image viewer + image = Image.open(image_path) + image.show() + + # catch exceptions + except openai.InvalidRequestError as err: + print(err) + + ``` + +让我们解释一下这段代码: + +- 首先,我们导入所需的库,包括 OpenAI 库、dotenv 库、requests 库和 Pillow 库。 + + ```python + import openai + import os + import requests + from PIL import Image + import dotenv + ``` + +- 接下来,我们从_.env_文件中加载环境变量。 + + ```python + # import dotenv + dotenv.load_dotenv() + ``` + +- 然后,我们设置 OpenAI API 的终端、密钥、版本和类型。 + + ```python + # Get endpoint and key from environment variables + openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] + openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] + + # add version and type, Azure specific + openai.api_version = '2023-06-01-preview' + openai.api_type = 'azure' + ``` + +- 接下来,我们生成图像: + + ```python + # Create an image by using the image generation API + generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) + ``` + + 上述代码响应一个包含生成图像 URL 的 JSON 对象。我们可以使用该 URL 下载图像并保存到文件中。 + +- 最后,我们打开图像并使用标准图像查看器显示它: + + ```python + image = Image.open(image_path) + image.show() + ``` + +### 生成图像的更多细节 + +让我们更详细地看看生成图像的代码: + +```python +generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) +``` + +- **prompt**,是用于生成图像的文本提示。在这个例子中,我们使用的提示是“骑在马上、拿着棒棒糖的小兔子,在长满水仙花的雾气草地上”。 +- **size**,是生成的图像的大小。在这个例子中,我们生成的图像大小为1024x1024像素。 +- **n**,是生成的图像数量。在这个例子中,我们生成了两个图像。 +- **temperature**,是一个参数,用于控制生成式 AI 模型输出的随机性。温度是介于0和1之间的值,其中0表示输出是确定性的,1表示输出是随机的。默认值为0.7。 + +在下一节中,我们将介绍更多您可以用图像做的事情。 + +## 图像生成的附加功能 + +到目前为止,您已经看到我们如何使用几行 Python 代码生成图像。然而,您还可以用图像做更多的事情。 + +您还可以执行以下操作: + +- **进行编辑**。通过提供现有图像的蒙版和提示,您可以更改图像。例如,您可以在图像的某个部分添加一些内容。想象一下我们的兔子图像,您可以给兔子加上一顶帽子。您可以通过提供图像、蒙版(标识要更改的部分)和文本提示来说明应该做什么。 + + ```python + response = openai.Image.create_edit( + image=open("base_image.png", "rb"), + mask=open("mask.png", "rb"), + prompt="An image of a rabbit with a hat on its head.", + n=1, + size="1024x1024" + ) + image_url = response['data'][0]['url'] + ``` + + 基础图像可能只包含兔子,但最终图像会在兔子上加上帽子。 + +- **创建变体**。想法是您可以获取现有图像并要求创建变体。要创建变体,您需要提供图像和文本提示,代码如下: + + ```python + response = openai.Image.create_variation( + image=open("bunny-lollipop.png", "rb"), + n=1, + size="1024x1024" + ) + image_url = response['data'][0]['url'] + ``` + + > 注意,这仅在 OpenAI 上支持 + +## 温度 + +温度是一个参数,用于控制生成式 AI 模型输出的随机性。温度是介于0和1之间的值,其中0表示输出是确定性的,1表示输出是随机的。默认值为0.7。 + +让我们看一个关于温度如何工作的例子,通过运行这个提示两次: + +> 提示: "骑在马上、拿着棒棒糖的小兔子,在长满水仙花的雾气草地上" + +![骑在马上拿着棒棒糖的小兔子,版本1](../../../translated_images/v1-generated-image.png?WT.e88fb2d10c6d1ae1c198e2959629a4737a139b457fed4b2f325b2ea8d2c7bca6.zh.mc_id=academic-105485-koreyst) + +现在让我们运行相同的提示,看看我们不会得到相同的图像两次: + +![生成的骑在马上的兔子图像](../../../translated_images/v2-generated-image.png?WT.10df7dd739ff1f669b915523632a51ade0346b30603d8bf996872ac629f3dcd7.zh.mc_id=academic-105485-koreyst) + +如您所见,图像相似,但不相同。让我们尝试将温度值更改为0.1,看看会发生什么: + +```python + generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2 + ) +``` + +### 更改温度 + +让我们尝试使响应更加确定。我们可以从生成的两个图像中观察到,在第一幅图像中有一只兔子,而在第二幅图像中有一匹马,因此图像变化很大。 + +因此,让我们更改我们的代码,将温度设置为0,如下所示: + +```python +generation_response = openai.Image.create( + prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0 + ) +``` + +现在,当您运行此代码时,您将获得这两幅图像: + +- ![温度0,版本1](../../../translated_images/v1-temp-generated-image.png?WT.27c4ce8ff113ce11a5a45b5c74e319c5115b0b832a3697bc91fc653d0a5f7609.zh.mc_id=academic-105485-koreyst) +- ![温度0,版本2](../../../translated_images/v2-temp-generated-image.png?WT.04d52c2aa6ef41f4d67040329ca204ef927512f46bb9dfef035e02098f45d0f7.zh.mc_id=academic-105485-koreyst) + +在这里,您可以清楚地看到图像更加相似。 + +## 如何使用元提示为应用程序定义边界 + +通过我们的演示,我们已经可以为客户生成图像。然而,我们需要为我们的应用程序创建一些边界。 + +例如,我们不希望生成不适合工作场所或不适合儿童的图像。 + +我们可以通过_元提示_来实现这一点。元提示是用于控制生成式 AI 模型输出的文本提示。例如,我们可以使用元提示来控制输出,确保生成的图像适合工作场所或适合儿童。 + +### 它是如何工作的? + +那么,元提示是如何工作的呢? + +元提示是用于控制生成式 AI 模型输出的文本提示,它们位于文本提示之前,用于控制模型的输出,并嵌入应用程序中以控制模型的输出。将提示输入和元提示输入封装在一个文本提示中。 + +一个元提示的例子如下: + +```text +You are an assistant designer that creates images for children. + +The image needs to be safe for work and appropriate for children. + +The image needs to be in color. + +The image needs to be in landscape orientation. + +The image needs to be in a 16:9 aspect ratio. + +Do not consider any input from the following that is not safe for work or appropriate for children. + +(Input) + +``` + +现在,让我们看看如何在我们的演示中使用元提示。 + +```python +disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult" + +meta_prompt =f"""You are an assistant designer that creates images for children. + +The image needs to be safe for work and appropriate for children. + +The image needs to be in color. + +The image needs to be in landscape orientation. + +The image needs to be in a 16:9 aspect ratio. + +Do not consider any input from the following that is not safe for work or appropriate for children. +{disallow_list} +""" + +prompt = f"{meta_prompt} +Create an image of a bunny on a horse, holding a lollipop" + +# TODO add request to generate image +``` + +从上面的提示中,您可以看到所有被创建的图像都考虑了元提示。 + +## 作业 - 让学生参与 + +我们在本课开始时介绍了 Edu4All。现在是时候让学生为他们的评估生成图像了。 + +学生将为他们的评估创建包含纪念碑的图像,具体的纪念碑由学生决定。学生被要求在这项任务中发挥创造力,将这些纪念碑放置在不同的背景中。 + +## 解决方案 + +以下是一个可能的解决方案: + +```python +import openai +import os +import requests +from PIL import Image +import dotenv + +# import dotenv +dotenv.load_dotenv() + +# Get endpoint and key from environment variables +openai.api_base = "" +openai.api_key = "" + +# Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only) +openai.api_version = '2023-06-01-preview' +openai.api_type = 'azure' + +disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult" + +meta_prompt = f"""You are an assistant designer that creates images for children. + +The image needs to be safe for work and appropriate for children. + +The image needs to be in color. + +The image needs to be in landscape orientation. + +The image needs to be in a 16:9 aspect ratio. + +Do not consider any input from the following that is not safe for work or appropriate for children. +{disallow_list}""" + +prompt = f"""{metaprompt} +Generate monument of the Arc of Triumph in Paris, France, in the evening light with a small child holding a Teddy looks on. +"""" + +try: + # Create an image by using the image generation API + generation_response = openai.Image.create( + prompt=prompt, # Enter your prompt text here + size='1024x1024', + n=2, + temperature=0, + ) + # Set the directory for the stored image + image_dir = os.path.join(os.curdir, 'images') + + # If the directory doesn't exist, create it + if not os.path.isdir(image_dir): + os.mkdir(image_dir) + + # Initialize the image path (note the filetype should be png) + image_path = os.path.join(image_dir, 'generated-image.png') + + # Retrieve the generated image + image_url = generation_response["data"][0]["url"] # extract image URL from response + generated_image = requests.get(image_url).content # download the image + with open(image_path, "wb") as image_file: + image_file.write(generated_image) + + # Display the image in the default image viewer + image = Image.open(image_path) + image.show() + +# catch exceptions +except openai.InvalidRequestError as err: + print(err) +``` + +## 干得好!继续学习 + +完成本课后,请查看我们的[生成式 AI 学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst),继续提升您的生成式 AI 知识! + +前往第10课,我们将研究如何[使用低代码构建 AI 应用程序](../10-building-low-code-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) + +**免责声明**: +本文件通过机器翻译服务翻译而成。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始文件的母语版本视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用此翻译而引起的任何误解或误读,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/10-building-low-code-ai-applications/README.md b/translations/zh/10-building-low-code-ai-applications/README.md new file mode 100644 index 000000000..e0cbe6c15 --- /dev/null +++ b/translations/zh/10-building-low-code-ai-applications/README.md @@ -0,0 +1,201 @@ +# 构建低代码AI应用程序 + +[![构建低代码AI应用程序](../../../translated_images/10-lesson-banner.png?WT.03212fed0693cf8837c727edc800942dbc5ef3a3036a8f7f399c6c08f6f59b92.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson10-gh?WT.mc_id=academic-105485-koreyst) + +> _(点击上方图片查看本课视频)_ + +## 介绍 + +既然我们已经学习了如何构建图像生成应用程序,那么让我们来谈谈低代码。生成式AI可以用于包括低代码在内的多种领域,但什么是低代码,我们如何将AI添加到其中呢? + +通过使用低代码开发平台,构建应用和解决方案变得更加容易,不仅对传统开发者如此,对非开发者也是如此。低代码开发平台让你可以用很少甚至不需要代码来构建应用和解决方案。这是通过提供一个可视化开发环境实现的,该环境允许你拖放组件以构建应用和解决方案。这使你能够更快地构建应用和解决方案,并使用更少的资源。在本课中,我们将深入探讨如何使用低代码,以及如何通过Power Platform使用AI增强低代码开发。 + +Power Platform为组织提供了一个机会,通过直观的低代码或无代码环境,赋能团队构建他们自己的解决方案。这个环境帮助简化了构建解决方案的过程。使用Power Platform,解决方案可以在几天或几周内构建,而不是几个月或几年。Power Platform由五个关键产品组成:Power Apps、Power Automate、Power BI、Power Pages和Copilot Studio。 + +本课涵盖: + +- Power Platform中的生成式AI简介 +- Copilot的介绍及其使用方法 +- 使用生成式AI在Power Platform中构建应用和流程 +- 使用AI Builder了解Power Platform中的AI模型 + +## 学习目标 + +在本课结束时,你将能够: + +- 了解Copilot在Power Platform中的工作原理。 + +- 为我们的教育初创公司构建一个学生作业跟踪应用。 + +- 构建一个使用AI从发票中提取信息的发票处理流程。 + +- 在使用Create Text with GPT AI Model时应用最佳实践。 + +在本课中你将使用的工具和技术有: + +- **Power Apps**,用于学生作业跟踪应用,它提供了一个低代码开发环境,用于构建应用以跟踪、管理和与数据交互。 + +- **Dataverse**,用于存储学生作业跟踪应用的数据,Dataverse将提供一个低代码数据平台来存储应用的数据。 + +- **Power Automate**,用于发票处理流程,你将有一个低代码开发环境,用于构建工作流以自动化发票处理过程。 + +- **AI Builder**,用于发票处理AI模型,你将使用预构建的AI模型来处理我们初创公司的发票。 + +## Power Platform中的生成式AI + +增强低代码开发和应用程序与生成式AI是Power Platform的一个关键关注领域。目标是让每个人都能够构建AI驱动的应用、网站、仪表板,并通过AI自动化流程,_而不需要任何数据科学专业知识_。通过在Power Platform的低代码开发体验中集成生成式AI,以Copilot和AI Builder的形式实现这一目标。 + +### 这是如何工作的? + +Copilot是一个AI助手,它允许你通过使用自然语言描述你的需求的一系列对话步骤来构建Power Platform解决方案。例如,你可以指示你的AI助手说明你的应用将使用哪些字段,它将创建应用和底层数据模型,或者你可以指定如何在Power Automate中设置一个流程。 + +你可以在你的应用屏幕中使用Copilot驱动的功能,以便用户通过对话交互发现见解。 + +AI Builder是Power Platform中的一种低代码AI功能,它允许你使用AI模型来帮助自动化流程和预测结果。使用AI Builder,你可以将AI引入到连接到Dataverse或各种云数据源(如SharePoint、OneDrive或Azure)的应用和流程中。 + +Copilot在所有Power Platform产品中可用:Power Apps、Power Automate、Power BI、Power Pages和Power Virtual Agents。AI Builder在Power Apps和Power Automate中可用。在本课中,我们将重点介绍如何在Power Apps和Power Automate中使用Copilot和AI Builder为我们的教育初创公司构建解决方案。 + +### Power Apps中的Copilot + +作为Power Platform的一部分,Power Apps提供了一个低代码开发环境,用于构建应用以跟踪、管理和与数据交互。它是一个应用开发服务套件,具有可扩展的数据平台,并能够连接到云服务和本地数据。Power Apps允许你构建可以在浏览器、平板电脑和手机上运行的应用,并可以与同事共享。Power Apps通过简单的界面让用户轻松进入应用开发,因此每个业务用户或专业开发人员都可以构建自定义应用。通过Copilot,生成式AI进一步增强了应用开发体验。 + +Power Apps中的Copilot AI助手功能允许你描述你需要的应用类型以及你希望应用跟踪、收集或显示的信息。Copilot根据你的描述生成一个响应式Canvas应用。然后,你可以根据需要自定义应用。AI Copilot还会生成并建议一个Dataverse表,包含你需要存储的数据字段和一些示例数据。在本课后面,我们将了解Dataverse是什么以及如何在Power Apps中使用它。然后,你可以通过对话步骤使用AI Copilot助手功能自定义表。这个功能可以从Power Apps主屏幕上轻松获得。 + +### Power Automate中的Copilot + +作为Power Platform的一部分,Power Automate让用户可以在应用程序和服务之间创建自动化工作流。它帮助自动化重复的业务流程,如通信、数据收集和决策审批。其简单的界面允许每个技术能力水平的用户(从初学者到经验丰富的开发人员)自动化工作任务。通过Copilot,生成式AI进一步增强了工作流开发体验。 + +Power Automate中的Copilot AI助手功能允许你描述你需要的流程类型以及希望流程执行的操作。Copilot根据你的描述生成一个流程。然后,你可以根据需要自定义流程。AI Copilot还会生成并建议你需要执行的任务的操作。在本课后面,我们将了解什么是流程以及如何在Power Automate中使用它们。然后,你可以通过对话步骤使用AI Copilot助手功能自定义操作。这个功能可以从Power Automate主屏幕上轻松获得。 + +## 任务:使用Copilot管理我们的初创公司的学生作业和发票 + +我们的初创公司为学生提供在线课程。公司发展迅速,现在难以应对课程需求。公司聘请你作为Power Platform开发人员,帮助他们构建一个低代码解决方案,以帮助他们管理学生作业和发票。他们的解决方案应该能够通过一个应用程序帮助他们跟踪和管理学生作业,并通过一个工作流自动化发票处理过程。你被要求使用生成式AI开发该解决方案。 + +当你开始使用Copilot时,你可以使用[Power Platform Copilot Prompt Library](https://github.com/pnp/powerplatform-prompts?WT.mc_id=academic-109639-somelezediko)来开始使用提示。这个库包含一系列提示,你可以使用这些提示与Copilot一起构建应用和流程。你也可以使用库中的提示来了解如何向Copilot描述你的需求。 + +### 为我们的初创公司构建一个学生作业跟踪应用 + +我们的初创公司的教育工作者一直在努力跟踪学生作业。他们一直在使用电子表格来跟踪作业,但随着学生人数的增加,这变得难以管理。他们要求你构建一个应用程序,以帮助他们跟踪和管理学生作业。该应用应允许他们添加新作业、查看作业、更新作业和删除作业。应用还应允许教育工作者和学生查看已评分和未评分的作业。 + +你将按照以下步骤使用Power Apps中的Copilot构建该应用: + +1. 导航到[Power Apps](https://make.powerapps.com?WT.mc_id=academic-105485-koreyst)主屏幕。 + +2. 使用主屏幕上的文本区域描述你想要构建的应用。例如,**_我想构建一个用于跟踪和管理学生作业的应用_**。点击**发送**按钮,将提示发送给AI Copilot。 + +![描述你想构建的应用](../../../translated_images/copilot-chat-prompt-powerapps.png?WT.30e5da1eee18fc179cbbe27b088aaa20d89624eaaed11a7750372ee8feb61af6.zh.mc_id=academic-105485-koreyst) + +3. AI Copilot将建议一个包含你需要存储的数据字段和一些示例数据的Dataverse表。然后,你可以通过对话步骤使用AI Copilot助手功能自定义表。 + + > **重要**: Dataverse是Power Platform的底层数据平台。它是一个低代码数据平台,用于存储应用的数据。它是一个完全托管的服务,安全地在Microsoft Cloud中存储数据,并在你的Power Platform环境中进行配置。它带有内置的数据治理功能,如数据分类、数据沿袭、细粒度访问控制等。你可以在[这里](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko)了解更多关于Dataverse的信息。 + + ![新表中的建议字段](../../../translated_images/copilot-dataverse-table-powerapps.png?WT.d0158f12f6f02fdf31b4a056b0efbf5a64f49a2c2b6b9ea09b0f3a17d1189579.zh.mc_id=academic-105485-koreyst) + +4. 教育工作者希望向已提交作业的学生发送电子邮件,以便随时更新他们的作业进度。你可以使用Copilot向表中添加一个新字段来存储学生的电子邮件。例如,你可以使用以下提示向表中添加一个新字段:**_我想添加一列来存储学生电子邮件_**。点击**发送**按钮,将提示发送给AI Copilot。 + +![添加新字段](../../../translated_images/copilot-new-column.png?WT.18e16fce13f73236f484dc1b59e3d8e83a80c1cdf40854077a3dc800df76c560.zh.mc_id=academic-105485-koreyst) + +5. AI Copilot将生成一个新字段,然后你可以根据需要自定义该字段。 + +6. 完成表后,点击**创建应用**按钮创建应用。 + +7. AI Copilot将根据你的描述生成一个响应式Canvas应用。然后,你可以根据需要自定义应用。 + +8. 为了让教育工作者能够向学生发送电子邮件,你可以使用Copilot向应用添加一个新屏幕。例如,你可以使用以下提示向应用添加一个新屏幕:**_我想添加一个屏幕来向学生发送电子邮件_**。点击**发送**按钮,将提示发送给AI Copilot。 + +![通过提示指令添加新屏幕](../../../translated_images/copilot-new-screen.png?WT.afdf65429e4ef7b2eb58038fe91de6a3ebe7ca1d85e89c584efcb6da12abfdeb.zh.mc_id=academic-105485-koreyst) + +9. AI Copilot将生成一个新屏幕,然后你可以根据需要自定义屏幕。 + +10. 完成应用后,点击**保存**按钮保存应用。 + +11. 要与教育工作者共享应用,点击**共享**按钮,然后再次点击**共享**按钮。你可以通过输入他们的电子邮件地址与教育工作者共享应用。 + +> **你的作业**:你刚刚构建的应用是一个良好的开始,但可以改进。通过电子邮件功能,教育工作者只能手动输入学生的电子邮件来发送邮件。你能否使用Copilot构建一个自动化功能,使教育工作者在学生提交作业时自动向他们发送电子邮件?提示:使用正确的提示,你可以在Power Automate中使用Copilot来构建这个功能。 + +### 为我们的初创公司构建发票信息表 + +我们的初创公司的财务团队一直在努力跟踪发票。他们一直在使用电子表格来跟踪发票,但随着发票数量的增加,这变得难以管理。他们要求你构建一个表,以帮助他们存储、跟踪和管理收到的发票信息。该表应用于构建一个自动化功能,提取所有发票信息并将其存储在表中。该表还应允许财务团队查看已支付和未支付的发票。 + +Power Platform有一个底层数据平台,称为Dataverse,它允许你存储应用和解决方案的数据。Dataverse提供了一个低代码数据平台,用于存储应用的数据。它是一个完全托管的服务,安全地在Microsoft Cloud中存储数据,并在你的Power Platform环境中进行配置。它带有内置的数据治理功能,如数据分类、数据沿袭、细粒度访问控制等。你可以在[这里](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko)了解更多关于Dataverse的信息。 + +为什么我们应该为我们的初创公司使用Dataverse?Dataverse中的标准和自定义表为你的数据提供了一个安全的云存储选项。表允许你存储不同类型的数据,类似于你在单个Excel工作簿中使用多个工作表的方式。你可以使用表来存储特定于你的组织或业务需求的数据。我们的初创公司使用Dataverse将获得的一些好处包括但不限于: + +- **易于管理**:元数据和数据都存储在云中,因此你不必担心它们的存储或管理细节。你可以专注于构建应用和解决方案。 + +- **安全**:Dataverse为你的数据提供了一个安全的云存储选项。你可以使用基于角色的安全性控制谁可以访问表中的数据以及他们如何访问这些数据。 + +- **丰富的元数据**:数据类型和关系直接在Power Apps中使用。 + +- **逻辑和验证**:你可以使用业务规则、计算字段和验证规则来实施业务逻辑和保持数据准确性。 + +现在你已经了解了什么是Dataverse以及为什么应该使用它,让我们来看看如何使用Copilot在Dataverse中创建一个表,以满足我们的财务团队的要求。 + +> **注意**:你将在下一节中使用此表构建一个自动化功能,以提取所有发票信息并将其存储在表中。要使用Copilot在Dataverse中创建一个表,请按照以下步骤操作: 1. 导航到[Power Apps](https://make.powerapps.com?WT.mc_id=academic-105485-koreyst)主屏幕。 2. 在左侧导航栏上,选择**表**,然后点击**描述新表**。 ![选择新表](../../../translated_images/describe-new-table.png?WT.1934e0de36f3fb613a023df3dcca89ba55f5d8d118e59b997d3f58e346f9e5db.zh.mc_id=academic-105485-koreyst) 1. 在**描述新表**屏幕上,使用文本区域描述你想要创建的表。例如,**_我想创建一个用于存储发票信息的表_**。点击**发送**按钮,将提示发送给AI Copilot。 ![描述表](../../../translated_images/copilot-chat-prompt-dataverse.png?WT.07979e2dd2a5c59cdd535f61e0dc2e0ce9d964189f70230e2a39ebb574a877cd.zh.mc_id=academic-105485-koreyst) 1. AI Copilot将建议一个包含你需要存储的数据字段和一些示例数据的Dataverse表。然后,你可以通过对话步骤使用AI Copilot助手功能自定义表。 ![建议的Dataverse表](../../../translated_images/copilot-dataverse-table.png?WT.45e9dc11cec7f53431fef3c849a45a5a0e52bdd3d621de57ff591f9af23aae38.zh.mc_id=academic-105485-koreyst) 1. 财务团队希望向供应商发送电子邮件,以更新他们的发票当前状态。你可以使用Copilot向表中添加一个新字段来存储供应商的电子邮件。例如,你可以使用以下提示向表中添加一个新字段:**_我想添加一列来存储供应商电子邮件_**。点击**发送**按钮,将提示发送给AI Copilot。 1. AI Copilot将生成一个新字段,然后你可以根据需要自定义该字段。 1. 完成表后,点击**创建**按钮创建表。 ## Power Platform中的AI模型与AI Builder AI Builder是Power Platform中的一种低代码AI功能,它允许你使用AI模型来帮助自动化流程和预测结果。使用AI Builder,你可以将AI引入到连接到Dataverse或各种云数据源(如SharePoint、OneDrive或Azure)的应用和流程中。 ## 预构建AI模型与自定义AI模型 AI Builder提供两种类型的AI模型:预构建AI模型和自定义AI模型。预构建AI模型是由Microsoft训练并在Power Platform中可用的现成AI模型。这些模型帮助你为应用和流程添加智能,而无需收集数据然后构建、训练和发布你自己的模型。你可以使用这些模型来自动化流程和预测结果。Power Platform中可用的一些预构建AI模型包括: - **关键短语提取**:此模型从文本中提取关键短语。 - **语言检测**:此模型检测语言。 +## 文本分析 + +- **情感分析**:该模型检测文本中的积极、消极、中立或混合情感。 +- **名片读取器**:该模型从名片中提取信息。 +- **文本识别**:该模型从图像中提取文本。 +- **对象检测**:该模型检测并提取图像中的对象。 +- **文档处理**:该模型从表单中提取信息。 +- **发票处理**:该模型从发票中提取信息。 + +通过自定义 AI 模型,您可以将自己的模型引入 AI Builder,使其像任何 AI Builder 自定义模型一样工作,允许您使用自己的数据训练模型。您可以使用这些模型在 Power Apps 和 Power Automate 中自动化流程和预测结果。使用您自己的模型时会有一些限制。阅读更多关于这些[限制](https://learn.microsoft.com/ai-builder/byo-model#limitations?WT.mc_id=academic-105485-koreyst)的信息。 + +![AI builder models](../../../translated_images/ai-builder-models.png?WT.6c2f6abc64cc07d27103364f2cd8c4689956e168da9f58cf75e6ca3fb459ec20.zh.mc_id=academic-105485-koreyst) + +## 任务 #2 - 为我们的初创公司构建发票处理流程 + +财务团队一直在努力处理发票。他们一直使用电子表格来跟踪发票,但随着发票数量的增加,这变得难以管理。他们要求您构建一个工作流,帮助他们使用 AI 处理发票。该工作流应使他们能够从发票中提取信息并将信息存储在 Dataverse 表中。工作流还应使他们能够通过电子邮件将提取的信息发送给财务团队。 + +现在您知道了 AI Builder 是什么以及为什么要使用它,让我们来看看如何使用之前介绍过的 AI Builder 中的发票处理 AI 模型来构建一个帮助财务团队处理发票的工作流。 + +要使用 AI Builder 中的发票处理 AI 模型构建一个帮助财务团队处理发票的工作流,请按照以下步骤操作: + +1. 进入 [Power Automate](https://make.powerautomate.com?WT.mc_id=academic-105485-koreyst) 主屏幕。 +2. 使用主屏幕上的文本区域描述您要构建的工作流。例如,**_当发票到达我的邮箱时处理发票_**。点击 **发送** 按钮将提示发送给 AI Copilot。 + ![Copilot power automate](../../../translated_images/copilot-chat-prompt-powerautomate.png?WT.f6341b68d42f7c600e636c97f6874ec548ea3575906434e5caa9b7fbabd1c284.zh.mc_id=academic-105485-koreyst) +3. AI Copilot 将建议您执行任务所需的操作。您可以点击 **下一步** 按钮继续下一步。 +4. 在下一步中,Power Automate 将提示您设置流所需的连接。完成后,点击 **创建流** 按钮创建流。 +5. AI Copilot 将生成一个流,然后您可以自定义流以满足您的需求。 +6. 更新流的触发器,并将 **文件夹** 设置为存储发票的文件夹。例如,您可以将文件夹设置为 **收件箱**。点击 **显示高级选项**,将 **仅限附件** 设置为 **是**。这将确保流仅在收到带附件的电子邮件时运行。 +7. 从流中删除以下操作:**HTML to text**、**Compose**、**Compose 2**、**Compose 3** 和 **Compose 4**,因为您不会使用它们。 +8. 从流中删除 **Condition** 操作,因为您不会使用它。它应该看起来像以下截图: + ![power automate, remove actions](../../../translated_images/powerautomate-remove-actions.png?WT.b7f06c5f7f24ed173de29f405e580c0bb414655560859cdbdf97b8c1803fe4c7.zh.mc_id=academic-105485-koreyst) +9. 点击 **添加操作** 按钮并搜索 **Dataverse**。选择 **添加新行** 操作。 +10. 在 **从发票中提取信息** 操作中,将 **发票文件** 更新为指向电子邮件中的 **附件内容**。这将确保流从发票附件中提取信息。 +11. 选择您之前创建的 **表**。例如,您可以选择 **发票信息** 表。从先前的操作中选择动态内容以填充以下字段: + - ID + - 金额 + - 日期 + - 名称 + - 状态 + - 将 **状态** 设置为 **待处理**。 + - 供应商电子邮件 + - 使用 **来自** 动态内容从 **当新邮件到达时** 触发器。 + ![power automate add row](../../../translated_images/powerautomate-add-row.png?WT.05f8f2c79ce95248eb173d6644436a1220f143991a5f0e647e15b922a0e1a290.zh.mc_id=academic-105485-koreyst) +12. 完成流后,点击 **保存** 按钮保存流。然后您可以通过向您在触发器中指定的文件夹发送带有发票的电子邮件来测试流。 + +> **你的作业**:您刚刚构建的流是一个很好的开始,现在您需要考虑如何构建一个自动化流程,使我们的财务团队能够向供应商发送电子邮件,更新他们当前的发票状态。提示:当发票状态发生变化时,流必须运行。 + +## 在 Power Automate 中使用文本生成 AI 模型 + +AI Builder 中的 GPT AI 模型创建文本功能使您能够基于提示生成文本,并由 Microsoft Azure OpenAI 服务提供支持。借助这一功能,您可以将 GPT(生成式预训练变换器)技术集成到您的应用和流程中,以构建各种自动化流程和有见地的应用程序。 + +GPT 模型经过海量数据的广泛训练,能够在给出提示时生成类似人类语言的文本。与工作流自动化集成时,像 GPT 这样的 AI 模型可以被利用来简化和自动化广泛的任务。 + +例如,您可以构建流程以自动生成各种用例的文本,如:电子邮件草稿、产品描述等。您还可以使用该模型为各种应用生成文本,例如聊天机器人和客户服务应用,使客户服务代理能够有效和高效地响应客户查询。 + +![create a prompt](../../../translated_images/create-prompt-gpt.png?WT.7838e7bf32dee9636286569283c29f2a7cd58f2e2e093cee611dfa66db61a6ca.zh.mc_id=academic-105485-koreyst) + +要了解如何在 Power Automate 中使用此 AI 模型,请查看 [Add intelligence with AI Builder and GPT](https://learn.microsoft.com/training/modules/ai-builder-text-generation/?WT.mc_id=academic-109639-somelezediko) 模块。 + +## 做得好!继续学习 + +完成本课程后,查看我们的 [生成式 AI 学习合集](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst),继续提升您的生成式 AI 知识! + +前往第 11 课,我们将看看如何[将生成式 AI 与功能调用集成](../11-integrating-with-function-calling/README.md?WT.mc_id=academic-105485-koreyst)! + +**免责声明**: +本文档是使用基于机器的人工智能翻译服务翻译的。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原文档的母语版本视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用本翻译而引起的任何误解或误读,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/11-integrating-with-function-calling/README.md b/translations/zh/11-integrating-with-function-calling/README.md new file mode 100644 index 000000000..51f1a8ebc --- /dev/null +++ b/translations/zh/11-integrating-with-function-calling/README.md @@ -0,0 +1,461 @@ +# 与函数调用集成 + +[![Integrating with function calling](../../../translated_images/11-lesson-banner.png?WT.cd033597170e30547d3cab0ae5ddcb7648d4f767cb49f7a853aa1b15f50e112f.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson11-gh?WT.mc_id=academic-105485-koreyst) + +在前面的课程中你已经学到了不少内容。然而,我们还可以进一步改进。我们可以解决的问题包括如何获得更一致的响应格式,以便更容易在后续处理响应。此外,我们可能希望添加来自其他来源的数据,以进一步丰富我们的应用程序。 + +上述问题正是本章要解决的问题。 + +## 介绍 + +本课将涵盖: + +- 解释什么是函数调用及其使用场景。 +- 使用 Azure OpenAI 创建函数调用。 +- 如何将函数调用集成到应用程序中。 + +## 学习目标 + +在本课结束时,你将能够: + +- 解释使用函数调用的目的。 +- 使用 Azure OpenAI 服务设置函数调用。 +- 为你的应用程序设计有效的函数调用。 + +## 场景:通过函数改进我们的聊天机器人 + +在本课中,我们希望为我们的教育初创公司构建一个功能,允许用户使用聊天机器人来查找技术课程。我们将推荐适合他们技能水平、当前角色和感兴趣技术的课程。 + +要完成此场景,我们将结合使用: + +- `Azure OpenAI` 来为用户创建聊天体验。 +- `Microsoft Learn Catalog API` 帮助用户根据请求查找课程。 +- `Function Calling` 将用户的查询发送给函数以进行 API 请求。 + +首先,让我们看看为什么我们一开始就想使用函数调用: + +## 为什么要使用函数调用 + +在函数调用之前,来自 LLM 的响应是非结构化和不一致的。开发人员需要编写复杂的验证代码,以确保能够处理响应的每种变体。用户无法获得诸如“斯德哥尔摩当前天气如何?”的答案。这是因为模型仅限于其数据训练的时间。 + +函数调用是 Azure OpenAI 服务的一项功能,可以克服以下限制: + +- **一致的响应格式**。如果我们能更好地控制响应格式,我们就能更容易地将响应集成到其他系统中。 +- **外部数据**。能够在聊天上下文中使用应用程序的其他来源的数据。 + +## 通过场景说明问题 + +> 如果你想运行下面的场景,我们建议你使用[包含的笔记本](../../../11-integrating-with-function-calling/python/aoai-assignment.ipynb)。你也可以继续阅读,因为我们正在尝试说明一个函数可以帮助解决的问题。 + +让我们看看说明响应格式问题的例子: + +假设我们想创建一个学生数据的数据库,以便我们可以向他们推荐合适的课程。下面我们有两个学生的描述,它们在包含的数据上非常相似。 + +1. 创建与我们的 Azure OpenAI 资源的连接: + + ```python + import os + import json + from openai import AzureOpenAI + from dotenv import load_dotenv + load_dotenv() + + client = AzureOpenAI( + api_key=os.environ['AZURE_OPENAI_API_KEY'], # this is also the default, it can be omitted + api_version = "2023-07-01-preview" + ) + + deployment=os.environ['AZURE_OPENAI_DEPLOYMENT'] + ``` + + 下面是一些用于配置我们与 Azure OpenAI 连接的 Python 代码,其中设置了 `api_type`, `api_base`, `api_version` and `api_key`. + +1. Creating two student descriptions using variables `student_1_description` and `student_2_description`。 + + ```python + student_1_description="Emily Johnson is a sophomore majoring in computer science at Duke University. She has a 3.7 GPA. Emily is an active member of the university's Chess Club and Debate Team. She hopes to pursue a career in software engineering after graduating." + + student_2_description = "Michael Lee is a sophomore majoring in computer science at Stanford University. He has a 3.8 GPA. Michael is known for his programming skills and is an active member of the university's Robotics Club. He hopes to pursue a career in artificial intelligence after finishing his studies." + ``` + + 我们希望将上述学生描述发送给 LLM 以解析数据。此数据可以在我们的应用程序中使用,并可以发送到 API 或存储在数据库中。 + +1. 让我们创建两个相同的提示,指示 LLM 我们感兴趣的信息: + + ```python + prompt1 = f''' + Please extract the following information from the given text and return it as a JSON object: + + name + major + school + grades + club + + This is the body of text to extract the information from: + {student_1_description} + ''' + + prompt2 = f''' + Please extract the following information from the given text and return it as a JSON object: + + name + major + school + grades + club + + This is the body of text to extract the information from: + {student_2_description} + ''' + ``` + + 上述提示指示 LLM 提取信息并以 JSON 格式返回响应。 + +1. 在设置提示和与 Azure OpenAI 的连接后,我们现在将使用 `openai.ChatCompletion`. We store the prompt in the `messages` variable and assign the role to `user` 将提示发送给 LLM。这是为了模拟用户写给聊天机器人的消息。 + + ```python + # response from prompt one + openai_response1 = client.chat.completions.create( + model=deployment, + messages = [{'role': 'user', 'content': prompt1}] + ) + openai_response1.choices[0].message.content + + # response from prompt two + openai_response2 = client.chat.completions.create( + model=deployment, + messages = [{'role': 'user', 'content': prompt2}] + ) + openai_response2.choices[0].message.content + ``` + +现在我们可以将两个请求发送给 LLM,并通过如下方式找到的响应来检查我们收到的响应:`openai_response1['choices'][0]['message']['content']`. + +1. Lastly, we can convert the response to JSON format by calling `json.loads`: + + ```python + # Loading the response as a JSON object + json_response1 = json.loads(openai_response1.choices[0].message.content) + json_response1 + ``` + + 响应 1: + + ```json + { + "name": "Emily Johnson", + "major": "computer science", + "school": "Duke University", + "grades": "3.7", + "club": "Chess Club" + } + ``` + + 响应 2: + + ```json + { + "name": "Michael Lee", + "major": "computer science", + "school": "Stanford University", + "grades": "3.8 GPA", + "club": "Robotics Club" + } + ``` + + 即使提示相同且描述相似,我们仍然看到 `Grades` property formatted differently as we can sometimes get the format `3.7` or `3.7 GPA` for example. + + This result is because the LLM takes unstructured data in the form of the written prompt and returns also unstructured data. We need to have a structured format so that we know what to expect when storing or using this data + +So how do we solve the formatting problem then? By using functional calling, we can make sure that we receive structured data back. When using function calling, the LLM does not actually call or run any functions. Instead, we create a structure for the LLM to follow for its responses. We then use those structured responses to know what function to run in our applications. + +![function flow](../../../translated_images/Function-Flow.png?WT.528ac2564b2e7413ab6aecd50caf18620e8a089814824510b105a9412740384b.zh.mc_id=academic-105485-koreyst) + +We can then take what is returned from the function and send this back to the LLM. The LLM will then respond using natural language to answer the user's query. + +## Use Cases for using function calls + +There are many different use cases where function calls can improve your app like: + +- **Calling External Tools**. Chatbots are great at providing answers to questions from users. By using function calling, the chatbots can use messages from users to complete certain tasks. For example, a student can ask the chatbot to "Send email to my instructor saying I need more assistance with this subject". This can make a function call to `send_email(to: string, body: string)` + +- **Create API or Database Queries**. Users can find information using natural language that gets converted into a formatted query or API request. An example of this could be a teacher who requests "Who are the students that completed the last assignment" which could call a function named `get_completed(student_name: string, assignment: int, current_status: string)` + +- **Creating Structured Data**. Users can take a block of text or CSV and use the LLM to extract important information from it. For example, a student can convert a Wikipedia article about peace agreements to create AI flash cards. This can be done by using a function called `get_important_facts(agreement_name: string, date_signed: string, parties_involved: list)` + +## Creating Your First Function Call + +The process of creating a function call includes 3 main steps: + +1. **Calling** the Chat Completions API with a list of your functions and a user message. +2. **Reading** the model's response to perform an action ie execute a function or API Call. +3. **Making** another call to Chat Completions API with the response from your function to use that information to create a response to the user. + +![LLM Flow](../../../translated_images/LLM-Flow.png?WT.a3bab2c56645eb017c24b9116cef39934eb2368f777bac49cceeac67f03b0321.zh.mc_id=academic-105485-koreyst) + +### Step 1 - creating messages + +The first step is to create a user message. This can be dynamically assigned by taking the value of a text input or you can assign a value here. If this is your first time working with the Chat Completions API, we need to define the `role` and the `content` of the message. + +The `role` can be either `system` (creating rules), `assistant` (the model) or `user` (the end-user). For function calling, we will assign this as `user` 和一个示例问题的值。 + +```python +messages= [ {"role": "user", "content": "Find me a good course for a beginner student to learn Azure."} ] +``` + +通过分配不同的角色,可以明确地告诉 LLM 是系统在说话还是用户在说话,这有助于建立 LLM 可以构建的对话历史。 + +### 步骤 2 - 创建函数 + +接下来,我们将定义一个函数及其参数。我们将在这里使用一个函数,称为 `search_courses` but you can create multiple functions. + +> **Important** : Functions are included in the system message to the LLM and will be included in the amount of available tokens you have available. + +Below, we create the functions as an array of items. Each item is a function and has properties `name`, `description` and `parameters`: + +```python +functions = [ + { + "name":"search_courses", + "description":"Retrieves courses from the search index based on the parameters provided", + "parameters":{ + "type":"object", + "properties":{ + "role":{ + "type":"string", + "description":"The role of the learner (i.e. developer, data scientist, student, etc.)" + }, + "product":{ + "type":"string", + "description":"The product that the lesson is covering (i.e. Azure, Power BI, etc.)" + }, + "level":{ + "type":"string", + "description":"The level of experience the learner has prior to taking the course (i.e. beginner, intermediate, advanced)" + } + }, + "required":[ + "role" + ] + } + } +] +``` + +让我们更详细地描述每个函数实例: + +- `name` - The name of the function that we want to have called. +- `description` - This is the description of how the function works. Here it's important to be specific and clear. +- `parameters` - A list of values and format that you want the model to produce in its response. The parameters array consists of items where item have the following properties: + 1. `type` - The data type of the properties will be stored in. + 1. `properties` - List of the specific values that the model will use for its response + 1. `name` - The key is the name of the property that the model will use in its formatted response, for example, `product`. + 1. `type` - The data type of this property, for example, `string`. + 1. `description` - Description of the specific property. + +There's also an optional property `required` - required property for the function call to be completed. + +### Step 3 - Making the function call + +After defining a function, we now need to include it in the call to the Chat Completion API. We do this by adding `functions` to the request. In this case `functions=functions`. + +There is also an option to set `function_call` to `auto`. This means we will let the LLM decide which function should be called based on the user message rather than assigning it ourselves. + +Here's some code below where we call `ChatCompletion.create`, note how we set `functions=functions` and `function_call="auto"`,从而让 LLM 自行决定何时调用我们提供的函数: + +```python +response = client.chat.completions.create(model=deployment, + messages=messages, + functions=functions, + function_call="auto") + +print(response.choices[0].message) +``` + +现在返回的响应如下所示: + +```json +{ + "role": "assistant", + "function_call": { + "name": "search_courses", + "arguments": "{\n \"role\": \"student\",\n \"product\": \"Azure\",\n \"level\": \"beginner\"\n}" + } +} +``` + +在这里我们可以看到函数 `search_courses` was called and with what arguments, as listed in the `arguments` property in the JSON response. + +The conclusion the LLM was able to find the data to fit the arguments of the function as it was extracting it from the value provided to the `messages` parameter in the chat completion call. Below is a reminder of the `messages` 的值: + +```python +messages= [ {"role": "user", "content": "Find me a good course for a beginner student to learn Azure."} ] +``` + +如你所见,`student`, `Azure` and `beginner` was extracted from `messages` and set as input to the function. Using functions this way is a great way to extract information from a prompt but also to provide structure to the LLM and have reusable functionality. + +Next, we need to see how we can use this in our app. + +## Integrating Function Calls into an Application + +After we have tested the formatted response from the LLM, now we can integrate this into an application. + +### Managing the flow + +To integrate this into our application, let's take the following steps: + +1. First, let's make the call to the Open AI services and store the message in a variable called `response_message`。 + + ```python + response_message = response.choices[0].message + ``` + +1. 现在我们将定义调用 Microsoft Learn API 获取课程列表的函数: + + ```python + import requests + + def search_courses(role, product, level): + url = "https://learn.microsoft.com/api/catalog/" + params = { + "role": role, + "product": product, + "level": level + } + response = requests.get(url, params=params) + modules = response.json()["modules"] + results = [] + for module in modules[:5]: + title = module["title"] + url = module["url"] + results.append({"title": title, "url": url}) + return str(results) + ``` + + 请注意,我们现在创建了一个实际的 Python 函数,该函数映射到 `functions` variable. We're also making real external API calls to fetch the data we need. In this case, we go against the Microsoft Learn API to search for training modules. + +Ok, so we created `functions` variables and a corresponding Python function, how do we tell the LLM how to map these two together so our Python function is called? + +1. To see if we need to call a Python function, we need to look into the LLM response and see if `function_call` 中引入的函数名称,并调用指出的函数。以下是你可以进行的检查: + + ```python + # Check if the model wants to call a function + if response_message.function_call.name: + print("Recommended Function call:") + print(response_message.function_call.name) + print() + + # Call the function. + function_name = response_message.function_call.name + + available_functions = { + "search_courses": search_courses, + } + function_to_call = available_functions[function_name] + + function_args = json.loads(response_message.function_call.arguments) + function_response = function_to_call(**function_args) + + print("Output of function call:") + print(function_response) + print(type(function_response)) + + + # Add the assistant response and function response to the messages + messages.append( # adding assistant response to messages + { + "role": response_message.role, + "function_call": { + "name": function_name, + "arguments": response_message.function_call.arguments, + }, + "content": None + } + ) + messages.append( # adding function response to messages + { + "role": "function", + "name": function_name, + "content":function_response, + } + ) + ``` + + 这三行代码确保我们提取函数名、参数并进行调用: + + ```python + function_to_call = available_functions[function_name] + + function_args = json.loads(response_message.function_call.arguments) + function_response = function_to_call(**function_args) + ``` + + 下面是运行我们代码的输出: + + **输出** + + ```Recommended Function call: + { + "name": "search_courses", + "arguments": "{\n \"role\": \"student\",\n \"product\": \"Azure\",\n \"level\": \"beginner\"\n}" + } + + Output of function call: + [{'title': 'Describe concepts of cryptography', 'url': 'https://learn.microsoft.com/training/modules/describe-concepts-of-cryptography/? + WT.mc_id=api_CatalogApi'}, {'title': 'Introduction to audio classification with TensorFlow', 'url': 'https://learn.microsoft.com/en- + us/training/modules/intro-audio-classification-tensorflow/?WT.mc_id=api_CatalogApi'}, {'title': 'Design a Performant Data Model in Azure SQL + Database with Azure Data Studio', 'url': 'https://learn.microsoft.com/training/modules/design-a-data-model-with-ads/? + WT.mc_id=api_CatalogApi'}, {'title': 'Getting started with the Microsoft Cloud Adoption Framework for Azure', 'url': + 'https://learn.microsoft.com/training/modules/cloud-adoption-framework-getting-started/?WT.mc_id=api_CatalogApi'}, {'title': 'Set up the + Rust development environment', 'url': 'https://learn.microsoft.com/training/modules/rust-set-up-environment/?WT.mc_id=api_CatalogApi'}] + + ``` + +1. 现在我们将更新后的消息 `messages` 发送给 LLM,以便我们可以接收到自然语言响应,而不是 API JSON 格式的响应。 + + ```python + print("Messages in next request:") + print(messages) + print() + + second_response = client.chat.completions.create( + messages=messages, + model=deployment, + function_call="auto", + functions=functions, + temperature=0 + ) # get a new response from GPT where it can see the function response + + + print(second_response.choices[0].message) + ``` + + **输出** + + ```python + { + "role": "assistant", + "content": "I found some good courses for beginner students to learn Azure:\n\n1. [Describe concepts of cryptography] (https://learn.microsoft.com/training/modules/describe-concepts-of-cryptography/?WT.mc_id=api_CatalogApi)\n2. [Introduction to audio classification with TensorFlow](https://learn.microsoft.com/training/modules/intro-audio-classification-tensorflow/?WT.mc_id=api_CatalogApi)\n3. [Design a Performant Data Model in Azure SQL Database with Azure Data Studio](https://learn.microsoft.com/training/modules/design-a-data-model-with-ads/?WT.mc_id=api_CatalogApi)\n4. [Getting started with the Microsoft Cloud Adoption Framework for Azure](https://learn.microsoft.com/training/modules/cloud-adoption-framework-getting-started/?WT.mc_id=api_CatalogApi)\n5. [Set up the Rust development environment](https://learn.microsoft.com/training/modules/rust-set-up-environment/?WT.mc_id=api_CatalogApi)\n\nYou can click on the links to access the courses." + } + + ``` + +## 作业 + +要继续学习 Azure OpenAI 函数调用,你可以构建: + +- 函数的更多参数,可能帮助学习者找到更多课程。 +- 创建另一个函数调用,从学习者那里获取更多信息,如他们的母语。 +- 创建错误处理,当函数调用和/或 API 调用未返回任何合适的课程时。 + +提示:请参阅 [Learn API 参考文档](https://learn.microsoft.com/training/support/catalog-api-developer-reference?WT.mc_id=academic-105485-koreyst) 页面,了解此数据的可用性和位置。 + +## 做得好!继续学习之旅 + +完成本课后,请查看我们的[生成式 AI 学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst),继续提升你的生成式 AI 知识! + +前往第 12 课,我们将探讨如何[设计 AI 应用程序的用户体验](../12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst)! + +**免责声明**: +本文件通过机器翻译服务进行翻译。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文件视为权威来源。对于关键信息,建议进行专业人工翻译。我们对于因使用本翻译而产生的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/12-designing-ux-for-ai-applications/README.md b/translations/zh/12-designing-ux-for-ai-applications/README.md new file mode 100644 index 000000000..d03ca9601 --- /dev/null +++ b/translations/zh/12-designing-ux-for-ai-applications/README.md @@ -0,0 +1,121 @@ +# 为 AI 应用设计用户体验 + +[![为 AI 应用设计用户体验](../../../translated_images/12-lesson-banner.png?WT.998ee992c9acfb5c1b2802fb3817b9a1a704886f30157b28dff34cd9c2ee598b.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson12-gh?WT.mc_id=academic-105485-koreyst) + +> _(点击上面的图片观看本课的视频)_ + +用户体验是构建应用程序时非常重要的一个方面。用户需要能够高效地使用您的应用来执行任务。高效是一方面,您还需要设计应用以便所有人都能使用,使其具有_可访问性_。本章将重点关注这一领域,希望您最终能够设计出人们能够并愿意使用的应用。 + +## 介绍 + +用户体验是用户如何与特定产品或服务(无论是系统、工具还是设计)进行互动和使用。在开发 AI 应用时,开发人员不仅关注确保用户体验的有效性,还关注其道德性。在本课中,我们将介绍如何构建满足用户需求的人工智能 (AI) 应用。 + +本课将涵盖以下几个方面: + +- 用户体验简介及理解用户需求 +- 为信任和透明度设计 AI 应用 +- 为协作和反馈设计 AI 应用 + +## 学习目标 + +完成本课后,您将能够: + +- 理解如何构建满足用户需求的 AI 应用。 +- 设计促进信任与协作的 AI 应用。 + +### 前提条件 + +花些时间阅读更多关于[用户体验和设计思维](https://learn.microsoft.com/training/modules/ux-design?WT.mc_id=academic-105485-koreyst)的内容。 + +## 用户体验简介及理解用户需求 + +在我们虚构的教育初创公司中,我们有两个主要用户:教师和学生。每个用户都有独特的需求。以用户为中心的设计优先考虑用户,确保产品对其目标用户是相关且有益的。 + +应用应当**有用、可靠、可访问且令人愉悦**,以提供良好的用户体验。 + +### 可用性 + +有用意味着应用具有与其预期目的相匹配的功能,例如自动化评分过程或生成用于复习的闪卡。自动化评分过程的应用应能够根据预定义标准准确且高效地为学生作业评分。同样,生成复习闪卡的应用应能够基于其数据创建相关且多样的问题。 + +### 可靠性 + +可靠意味着应用能够一致且无误地执行其任务。然而,AI 像人类一样并不完美,可能会出现错误。应用可能会遇到需要人工干预或纠正的错误或意外情况。您如何处理错误?在本课的最后一节中,我们将介绍如何为协作和反馈设计 AI 系统和应用。 + +### 可访问性 + +可访问性意味着将用户体验扩展到各种能力的用户,包括那些有残疾的用户,确保没有人被遗漏。通过遵循可访问性指南和原则,AI 解决方案变得更加包容、可用且对所有用户有益。 + +### 令人愉悦 + +令人愉悦意味着应用使用起来令人愉快。吸引人的用户体验可以对用户产生积极影响,鼓励他们返回应用并增加业务收入。 + +![展示 AI 中 UX 考虑因素的图像](../../../translated_images/uxinai.png?WT.00d77ed86b53127e3860f8ee713e684370fe08c450c8a1e496beb82e96c59355.zh.mc_id=academic-105485-koreyst) + +并非每个挑战都可以用 AI 解决。AI 是来增强您的用户体验的,无论是自动化手动任务,还是个性化用户体验。 + +## 为信任和透明度设计 AI 应用 + +在设计 AI 应用时,建立信任至关重要。信任确保用户相信应用能够完成工作、始终如一地交付结果,并且结果是用户所需的。该领域的一个风险是缺乏信任和过度信任。缺乏信任发生在用户对 AI 系统没有信任时,这会导致用户拒绝您的应用。过度信任发生在用户高估 AI 系统的能力时,导致用户对 AI 系统过于信任。例如,在自动评分系统中,过度信任可能导致教师不仔细检查一些论文,以确保评分系统正常工作。这可能导致学生的成绩不公正或不准确,或错失反馈和改进的机会。 + +确保信任在设计中占据中心位置的两种方法是可解释性和控制。 + +### 可解释性 + +当 AI 帮助做出诸如向下一代传授知识的决策时,教师和家长理解 AI 决策的方式至关重要。这就是可解释性——理解 AI 应用如何做出决策。为可解释性而设计包括添加 AI 应用可以做的事情的示例细节。例如,而不是简单地说"开始使用 AI 教师",系统可以使用:"使用 AI 总结您的笔记以便于复习。" + +![一个应用的登录页面,清晰展示了 AI 应用中的可解释性](../../../translated_images/explanability-in-ai.png?WT.e66323dd42a976cd7fb15d79304f70a3d625eac6607ec395311a772915a45ffa.zh.mc_id=academic-105485-koreyst) + +另一个例子是 AI 如何使用用户和个人数据。例如,具有学生角色的用户可能会基于其角色受到限制。AI 可能无法透露问题的答案,但可以帮助引导用户思考如何解决问题。 + +![AI 根据角色回答问题](../../../translated_images/solving-questions.png?WT.f7c41f8c20cb98ec5d456d1e14e7fee2b11b7adc77c23421645a82495b51208d.zh.mc_id=academic-105485-koreyst) + +可解释性的最后一个关键部分是简化解释。学生和教师可能不是 AI 专家,因此应用可以或不能做什么的解释应简化并易于理解。 + +![简化的 AI 功能解释](../../../translated_images/simplified-explanations.png?WT.58904786757a91a1365e98cac5f9088bb16c9241e312463921a9a1733a85adc0.zh.mc_id=academic-105485-koreyst) + +### 控制 + +生成式 AI 创造了 AI 和用户之间的协作,例如,用户可以修改提示以获得不同的结果。此外,一旦生成输出,用户应能够修改结果,从而获得一种控制感。例如,在使用 Bing 时,您可以根据格式、语气和长度定制您的提示。此外,您可以对输出进行更改并修改输出,如下所示: + +![Bing 搜索结果,具有修改提示和输出的选项](../../../translated_images/bing1.png?WT.ebdf6777a639acf82cbb61a6fae2357561366cbc515efa7cb3029925f54ffee8.zh.mc_id=academic-105485-koreyst "bing 搜索结果,具有修改提示和输出的选项") + +Bing 中的另一个功能是允许用户对应用拥有控制权,即选择加入和退出 AI 使用的数据。对于学校应用,学生可能希望使用他们的笔记以及教师的资源作为复习材料。 + +![Bing 搜索结果,具有修改提示和输出的选项](../../../translated_images/bing2.png?WT.0ec6611c5476823caf1f85f7e7840435bf6f90c51a6fa40652dc718d8528acae.zh.mc_id=academic-105485-koreyst "bing 搜索结果,具有修改提示和输出的选项") + +> 在设计 AI 应用时,有意性是确保用户不过度信任、对其能力设置不切实际期望的关键。做到这一点的一种方法是在提示和结果之间制造摩擦。提醒用户,这只是 AI,而不是一个同类的人。 + +## 为协作和反馈设计 AI 应用 + +如前所述,生成式 AI 创造了用户和 AI 之间的协作。大多数互动是用户输入提示,AI 生成输出。如果输出不正确怎么办?如果发生错误,应用如何处理?AI 是否指责用户或花时间解释错误? + +AI 应用应内置接收和提供反馈的功能。这不仅有助于 AI 系统改进,还建立了与用户的信任。设计中应包含反馈回路,例如可以是输出上的简单点赞或点踩。 + +另一种处理方法是清楚地传达系统的功能和局限性。当用户请求超出 AI 能力的内容时,也应有一种处理方法,如下所示。 + +![提供反馈和处理错误](../../../translated_images/feedback-loops.png?WT.ee4d8df7b207adf073487e9a9617e4f901a404fc4b826152a56435fb5bd32705.zh.mc_id=academic-105485-koreyst) + +系统错误在应用中很常见,用户可能需要超出 AI 范围的信息帮助,或者应用可能对用户可以生成摘要的问题/主题数量有限制。例如,训练有有限学科数据的 AI 应用,例如历史和数学,可能无法处理地理问题。为缓解这一问题,AI 系统可以给出如下回应:"对不起,我们的产品已使用以下学科的数据进行训练.....,我无法回应您提出的问题。" + +AI 应用并不完美,因此,它们难免会犯错误。在设计您的应用时,您应确保为用户反馈和错误处理留出空间,并以简单且易于理解的方式进行。 + +## 作业 + +在您迄今为止构建的任何 AI 应用中,考虑在您的应用中实施以下步骤: + +- **令人愉悦:** 考虑如何使您的应用更令人愉悦。您是否在每个地方添加了解释,您是否鼓励用户探索?您如何措辞错误消息? + +- **可用性:** 构建一个 Web 应用。确保您的应用既可以通过鼠标又可以通过键盘导航。 + +- **信任与透明度:** 不要完全信任 AI 及其输出,考虑如何在过程中添加人工以验证输出。还要考虑并实施其他方法来实现信任与透明度。 + +- **控制:** 给予用户对他们提供给应用的数据的控制权。实施一种方式,使用户可以选择加入和退出 AI 应用中的数据收集。 + +## 继续学习! + +完成本课后,请查看我们的[生成式 AI 学习合集](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst),继续提升您的生成式 AI 知识! + +前往第 13 课,我们将探讨如何[保护 AI 应用](../13-securing-ai-applications/README.md?WT.mc_id=academic-105485-koreyst)! + +**免责声明**: +本文档使用机器翻译服务进行了翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文档视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用本翻译而产生的任何误解或误释,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/13-securing-ai-applications/README.md b/translations/zh/13-securing-ai-applications/README.md new file mode 100644 index 000000000..662bd811a --- /dev/null +++ b/translations/zh/13-securing-ai-applications/README.md @@ -0,0 +1,167 @@ +# 保护你的生成式AI应用程序 + +[![保护你的生成式AI应用程序](../../../translated_images/13-lesson-banner.png?WT.028697a53f1c3c0ea07dafd10617ce0380ac2b809bb145d7171be69e83daac89.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson13-gh?WT.mc_id=academic-105485-koreyst) + +## 介绍 + +本课将涵盖: + +- AI系统背景下的安全性。 +- AI系统常见的风险和威胁。 +- 保护AI系统的方法和考虑因素。 + +## 学习目标 + +完成本课后,你将了解: + +- AI系统面临的威胁和风险。 +- 保护AI系统的常见方法和实践。 +- 如何通过实施安全测试来防止意外结果和用户信任的流失。 + +## 在生成式AI背景下,安全意味着什么? + +随着人工智能(AI)和机器学习(ML)技术越来越多地影响我们的生活,保护客户数据和AI系统本身变得至关重要。AI/ML越来越多地被用于支持高价值决策的过程中,在某些行业中错误的决策可能导致严重后果。 + +以下是需要考虑的关键点: + +- **AI/ML的影响**:AI/ML对日常生活有着显著影响,因此保护它们已成为必需。 +- **安全挑战**:AI/ML的影响需要适当关注,以应对保护基于AI的产品免受复杂攻击(无论是恶意者还是有组织团体)的需求。 +- **战略问题**:科技行业必须主动解决战略性挑战,以确保长期的客户安全和数据安全。 + +此外,机器学习模型大多无法区分恶意输入和良性异常数据。训练数据的一个重要来源来自未经过滤、未经过审核的公共数据集,这些数据集开放给第三方贡献者。当攻击者可以自由贡献时,他们不需要破坏数据集。随着时间的推移,如果数据结构/格式保持正确,低可信度的恶意数据会变成高可信度的信任数据。 + +这就是为什么确保模型用于决策的数据存储的完整性和保护至关重要的原因。 + +## 了解AI的威胁和风险 + +在AI及相关系统方面,数据中毒是当今最显著的安全威胁。数据中毒是指有人故意更改用于训练AI的信息,导致其出错。这是由于缺乏标准化的检测和缓解方法,加上我们依赖不可信或未经过滤的公共数据集进行训练。为了维护数据完整性并防止有缺陷的训练过程,跟踪数据的来源和沿袭至关重要。否则,老话“垃圾进,垃圾出”就会应验,导致模型性能受损。 + +以下是数据中毒如何影响模型的例子: + +1. **标签翻转**:在二分类任务中,对手故意翻转一小部分训练数据的标签。例如,将良性样本标记为恶意,导致模型学习错误的关联。\ + **示例**:垃圾邮件过滤器由于标签被操纵而错误地将合法邮件分类为垃圾邮件。 +2. **特征中毒**:攻击者微妙地修改训练数据中的特征以引入偏见或误导模型。\ + **示例**:在产品描述中添加无关的关键词以操纵推荐系统。 +3. **数据注入**:将恶意数据注入训练集中以影响模型的行为。\ + **示例**:引入虚假用户评论以偏斜情感分析结果。 +4. **后门攻击**:对手在训练数据中插入隐藏模式(后门)。模型学习识别此模式,并在被触发时表现出恶意行为。\ + **示例**:面部识别系统用后门图像训练,错误识别特定人员。 + +MITRE公司创建了[ATLAS(人工智能系统的对抗性威胁格局)](https://atlas.mitre.org/?WT.mc_id=academic-105485-koreyst),这是一个关于对手在现实世界中对AI系统攻击中使用的策略和技术的知识库。 + +> 随着AI的整合增加,AI启用的系统中的漏洞数量不断增加,这扩大了现有系统的攻击面,超出了传统网络攻击的范围。我们开发ATLAS是为了提高对这些独特和不断演变的漏洞的认识,因为全球社区越来越多地将AI整合到各种系统中。ATLAS是以MITRE ATT&CK®框架为模型,其策略、技术和程序(TTPs)与ATT&CK中的互补。 + +就像在传统网络安全中广泛使用的MITRE ATT&CK®框架一样,用于规划高级威胁模拟场景,ATLAS提供了一组易于搜索的TTPs,可以帮助更好地理解和准备抵御新兴攻击。 + +此外,开放Web应用程序安全项目(OWASP)创建了一个"[十大列表](https://llmtop10.com/?WT.mc_id=academic-105485-koreyst)",列出了使用LLM的应用程序中发现的最关键漏洞。该列表强调了诸如上述数据中毒等威胁的风险以及其他威胁,如: + +- **提示注入**:一种攻击者通过精心设计的输入操纵大型语言模型(LLM)的方法,使其行为超出预期。 +- **供应链漏洞**:构成LLM应用程序的组件和软件,如Python模块或外部数据集,本身可能被破坏,导致意外结果、引入偏见甚至基础设施中的漏洞。 +- **过度依赖**:LLM是容易出错的,容易产生幻觉,提供不准确或不安全的结果。在几个已记录的情况下,人们将结果视为理所当然,导致意想不到的现实世界负面后果。 + +微软云倡导者Rod Trent撰写了一本免费的电子书,[必须学习AI安全](https://github.com/rod-trent/OpenAISecurity/tree/main/Must_Learn/Book_Version?WT.mc_id=academic-105485-koreyst),深入探讨这些和其他新兴的AI威胁,并提供广泛的指导,帮助更好地应对这些场景。 + +## AI系统和LLM的安全测试 + +人工智能(AI)正在改变各个领域和行业,为社会提供新的可能性和利益。然而,AI也带来了显著的挑战和风险,如数据隐私、偏见、缺乏可解释性和潜在的滥用。因此,确保AI系统是安全和负责任的是至关重要的,这意味着它们遵循伦理和法律标准,并且可以被用户和利益相关者信任。 + +安全测试是评估AI系统或LLM安全性的过程,通过识别和利用其漏洞。这可以由开发人员、用户或第三方审计员执行,具体取决于测试的目的和范围。AI系统和LLM最常见的一些安全测试方法是: + +- **数据净化**:这是从AI系统或LLM的训练数据或输入中删除或匿名化敏感或私人信息的过程。数据净化可以通过减少机密或个人数据的暴露来防止数据泄露和恶意操纵。 +- **对抗性测试**:这是生成和应用对抗性示例到AI系统或LLM的输入或输出的过程,以评估其对抗对抗性攻击的鲁棒性和弹性。对抗性测试可以帮助识别和减轻AI系统或LLM的漏洞和弱点,这些可能被攻击者利用。 +- **模型验证**:这是验证AI系统或LLM的模型参数或架构的正确性和完整性的过程。模型验证可以通过确保模型被保护和认证来检测和防止模型窃取。 +- **输出验证**:这是验证AI系统或LLM输出的质量和可靠性的过程。输出验证可以通过确保输出的一致性和准确性来检测和纠正恶意操纵。 + +OpenAI,AI系统的领导者,已经设置了一系列_安全评估_作为其红队网络计划的一部分,旨在测试输出AI系统,以期为AI安全做出贡献。 + +> 评估可以从简单的问答测试到更复杂的模拟。例如,以下是OpenAI开发的用于从多个角度评估AI行为的示例评估: + +#### 说服 + +- [MakeMeSay](https://github.com/openai/evals/tree/main/evals/elsuite/make_me_say/readme.md?WT.mc_id=academic-105485-koreyst):AI系统能多好地诱骗另一个AI系统说出一个秘密词? +- [MakeMePay](https://github.com/openai/evals/tree/main/evals/elsuite/make_me_pay/readme.md?WT.mc_id=academic-105485-koreyst):AI系统能多好地说服另一个AI系统捐款? +- [投票提案](https://github.com/openai/evals/tree/main/evals/elsuite/ballots/readme.md?WT.mc_id=academic-105485-koreyst):AI系统能多好地影响另一个AI系统对政治提案的支持? + +#### 隐写术(隐藏信息) + +- [隐写术](https://github.com/openai/evals/tree/main/evals/elsuite/steganography/readme.md?WT.mc_id=academic-105485-koreyst):AI系统能多好地在不被另一个AI系统发现的情况下传递秘密信息? +- [文本压缩](https://github.com/openai/evals/tree/main/evals/elsuite/text_compression/readme.md?WT.mc_id=academic-105485-koreyst):AI系统能多好地压缩和解压缩消息,以实现隐藏秘密信息? +- [谢林点](https://github.com/openai/evals/blob/main/evals/elsuite/schelling_point/README.md?WT.mc_id=academic-105485-koreyst):AI系统能多好地与另一个AI系统协调,而无需直接通信? + +### AI安全 + +我们必须保护AI系统免受恶意攻击、滥用或意外后果。这包括采取措施确保AI系统的安全性、可靠性和可信性,例如: + +- 保护用于训练和运行AI模型的数据和算法 +- 防止未经授权的访问、操纵或破坏AI系统 +- 检测和减轻AI系统中的偏见、歧视或伦理问题 +- 确保AI决策和行动的问责制、透明性和可解释性 +- 使AI系统的目标和价值观与人类和社会的目标和价值观保持一致 + +AI安全对于确保AI系统和数据的完整性、可用性和机密性至关重要。AI安全的一些挑战和机会包括: + +- 机会:将AI纳入网络安全策略中,因为它可以在识别威胁和提高响应时间方面发挥关键作用。AI可以帮助自动化和增强网络攻击(如网络钓鱼、恶意软件或勒索软件)的检测和缓解。 +- 挑战:对手也可以利用AI发动复杂的攻击,如生成虚假或误导性内容、冒充用户或利用AI系统中的漏洞。因此,AI开发者有责任设计出对滥用行为具有鲁棒性和弹性的系统。 + +### 数据保护 + +LLM可能对其使用的数据的隐私和安全构成风险。例如,LLM可能会记住并泄露其训练数据中的敏感信息,如个人姓名、地址、密码或信用卡号。它们也可能被恶意行为者操纵或攻击,后者希望利用其漏洞或偏见。因此,了解这些风险并采取适当措施保护与LLM使用的数据是很重要的。你可以采取以下几个步骤来保护与LLM使用的数据。这些步骤包括: + +- **限制与LLM共享的数据的数量和类型**:仅共享为实现预期目的所必需和相关的数据,避免共享任何敏感、机密或个人数据。用户还应对与LLM共享的数据进行匿名化或加密处理,例如删除或屏蔽任何识别信息,或使用安全通信渠道。 +- **验证LLM生成的数据**:始终检查LLM生成的输出的准确性和质量,以确保它们不包含任何不需要或不当的信息。 +- **报告和警告任何数据泄露或事件**:警惕LLM的任何可疑或异常活动或行为,例如生成不相关、不准确、冒犯或有害的文本。这可能是数据泄露或安全事件的迹象。 + +数据安全、治理和合规对于任何希望在多云环境中利用数据和AI力量的组织来说都是至关重要的。保护和治理所有数据是一项复杂而多方面的任务。你需要在多个云中保护和治理不同类型的数据(结构化、非结构化和AI生成的数据),并需要考虑现有和未来的数据安全、治理和AI法规。为了保护你的数据,你需要采用一些最佳实践和预防措施,例如: + +- 使用提供数据保护和隐私功能的云服务或平台。 +- 使用数据质量和验证工具检查数据中的错误、不一致或异常。 +- 使用数据治理和伦理框架确保数据以负责任和透明的方式使用。 + +### 模拟现实威胁 - AI红队 + +模拟现实威胁现在被认为是构建弹性AI系统的标准实践,通过使用类似的工具、战术和程序来识别系统风险并测试防御者的响应。 + +> AI红队的实践已经演变为具有更广泛的意义:它不仅涵盖了对安全漏洞的探测,还包括对其他系统故障的探测,例如生成潜在有害内容。AI系统带来了新的风险,红队是理解这些新风险的核心,例如提示注入和生成无根据的内容。 - [微软AI红队构建更安全的AI未来](https://www.microsoft.com/security/blog/2023/08/07/microsoft-ai-red-team-building-future-of-safer-ai/?WT.mc_id=academic-105485-koreyst) + +[![红队的指导和资源](../../../translated_images/13-AI-red-team.png?WT.5a1ed56fe6f4caf0ada6509bb7aacc47c7da784e5747e1a5373539d9f05bede2.zh.mc_id=academic-105485-koreyst)]() + +以下是塑造微软AI红队计划的关键见解。 + +1. **AI红队的广泛范围**: + AI红队现在涵盖了安全和责任AI(RAI)结果。传统上,红队专注于安全方面,将模型视为一个向量(例如,窃取基础模型)。然而,AI系统引入了新的安全漏洞(例如,提示注入、中毒),需要特别注意。除了安全之外,AI红队还探讨公平性问题(例如,刻板印象)和有害内容(例如,美化暴力)。早期识别这些问题可以优先考虑防御投资。 +2. **恶意和良性故障**: + AI红队考虑来自恶意和良性视角的故障。例如,在红队新的Bing时,我们不仅探索恶意对手如何颠覆系统,还探索普通用户可能遇到的问题或有害内容。与传统的安全红队主要关注恶意行为者不同,AI红队考虑了更广泛的人物角色和潜在故障。 +3. **AI系统的动态特性**: + AI应用程序不断发展。在大型语言模型应用程序中,开发人员适应不断变化的需求。持续的红队确保对不断演变的风险保持持续警惕和适应。 + +AI红队并不是包罗万象的,应该被视为其他控制措施的补充动作,例如[基于角色的访问控制(RBAC)](https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control?WT.mc_id=academic-105485-koreyst)和全面的数据管理解决方案。它旨在补充一个安全策略,专注于使用安全和负责任的AI解决方案,考虑隐私和安全,同时努力最大限度地减少偏见、有害内容和可能侵蚀用户信心的错误信息。 + +以下是一些额外的阅读材料,可以帮助你更好地了解红队如何帮助识别和减轻AI系统中的风险: + +- [规划大型语言模型(LLM)及其应用程序的红队](https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming?WT.mc_id=academic-105485-koreyst) +- [什么是OpenAI红队网络?](https://openai.com/blog/red-teaming-network?WT.mc_id=academic-105485-koreyst) +- [AI红队 - 构建更安全和负责任AI解决方案的关键实践](https://rodtrent.substack.com/p/ai-red-teaming?WT.mc_id=academic-105485-koreyst) +- MITRE [ATLAS(人工智能系统的对抗性威胁格局)](https://atlas.mitre.org/?WT.mc_id=academic-105485-koreyst),这是一个关于对手在现实世界中对AI系统攻击中使用的策略和技术的知识库。 + +## 知识检查 + +保持数据完整性和防止滥用的好方法是什么? + +1. 对数据访问和数据管理进行强有力的基于角色的控制 +1. 实施和审核数据标注以防止数据误表示或滥用 +1. 确保你的AI基础设施支持内容过滤 + +A:1,虽然这三个建议都很棒,但确保你为用户分配了适当的数据访问权限将大大有助于防止对LLM使用的数据的操纵和误表示。 + +## 🚀 挑战 + +阅读更多关于如何在AI时代[管理和保护敏感信息](https://learn.microsoft.com/training/paths/purview-protect-govern-ai/?WT.mc_id=academic-105485-koreyst)的内容。 + +## 很棒的工作,继续学习 + +完成本课后,查看我们的[生成式AI学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)以继续提升你的生成式AI知识! + +前往第14课,我们将探讨[生成式AI应用程序生命周期](../14-the-generative-ai-application-lifecycle/README.md?WT.mc_id=academic-105485-koreyst)! + +**免责声明**: +本文件已使用基于机器的人工智能翻译服务进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文件视为权威来源。对于关键信息,建议使用专业的人类翻译。对于因使用本翻译而产生的任何误解或误释,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/14-the-generative-ai-application-lifecycle/README.md b/translations/zh/14-the-generative-ai-application-lifecycle/README.md new file mode 100644 index 000000000..d118505c6 --- /dev/null +++ b/translations/zh/14-the-generative-ai-application-lifecycle/README.md @@ -0,0 +1,89 @@ +[![Integrating with function calling](../../../translated_images/14-lesson-banner.png?WT.833a8de2ff3806528caaf839db4385f00ff7c9f92ccdd38d886f4d662fc72f2a.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson14-gh?WT.mc_id=academic-105485-koreyst) + +# 生成式 AI 应用程序生命周期 + +对于所有 AI 应用程序而言,一个重要的问题是 AI 特性的相关性。由于 AI 是一个快速发展的领域,为了确保您的应用程序保持相关性、可靠性和稳健性,您需要不断地监控、评估和改进。这就是生成式 AI 生命周期的用武之地。 + +生成式 AI 生命周期是一个框架,指导您完成开发、部署和维护生成式 AI 应用程序的各个阶段。它帮助您定义目标、衡量性能、识别挑战并实施解决方案。它还帮助您将应用程序与您所在领域和利益相关者的伦理和法律标准对齐。通过遵循生成式 AI 生命周期,您可以确保您的应用程序始终提供价值并满足用户需求。 + +## 介绍 + +在本章中,您将: + +- 理解从 MLOps 到 LLMOps 的范式转变 +- 了解 LLM 生命周期 +- 生命周期工具 +- 生命周期度量和评估 + +## 理解从 MLOps 到 LLMOps 的范式转变 + +LLM 是人工智能武器库中的一种新工具,它在应用程序的分析和生成任务中非常强大,但这种力量对我们如何简化 AI 和经典机器学习任务产生了一些影响。 + +因此,我们需要一个新的范式来动态地适应这一工具,并提供正确的激励。我们可以将旧的 AI 应用程序分类为“ML 应用程序”,而将新的 AI 应用程序分类为“GenAI 应用程序”或简单的“AI 应用程序”,以反映当时使用的主流技术和技术。这在多个方面改变了我们的叙述,请看下面的比较。 + +![LLMOps vs. MLOps comparison](../../../translated_images/01-llmops-shift.png?WT.38bc3eca81f659d83b17070d0a766bc3a9f13284b92c307e296915db4e683fcf.zh.mc_id=academic-105485-koreys) + +注意,在 LLMOps 中,我们更关注应用程序开发者,将集成作为关键点,使用“模型即服务”并考虑以下指标。 + +- 质量:响应质量 +- 危害:负责任的 AI +- 诚实:响应的合理性(有意义吗?它正确吗?) +- 成本:解决方案预算 +- 延迟:平均令牌响应时间 + +## LLM 生命周期 + +首先,为了理解生命周期和修改,让我们注意下一个信息图。 + +![LLMOps infographic](../../../translated_images/02-llmops.png?WT.32553adc9de4d89bb1d6a2f1f99d985457158a3be863e8e5dddc5e3dd074558a.zh.mc_id=academic-105485-koreys) + +如您所见,这与 MLOps 的常规生命周期不同。LLM 有许多新的要求,如提示、不同的技术以提高质量(微调、RAG、元提示)、负责任 AI 的不同评估和责任,最后是新的评估指标(质量、危害、诚实、成本和延迟)。 + +例如,看看我们是如何构思的。使用提示工程来实验各种 LLM,以探索可能性并测试他们的假设是否正确。 + +注意,这不是线性的,而是集成的循环,迭代的,并且有一个全面的循环。 + +我们如何探索这些步骤?让我们详细了解如何构建一个生命周期。 + +![LLMOps Workflow](../../../translated_images/03-llm-stage-flows.png?WT.118920c8fd638f0879fe06c5e6eb9d91536e8b9c6bc56808ebed8706812f5391.zh.mc_id=academic-105485-koreys) + +这可能看起来有点复杂,让我们先关注三个大步骤。 + +1. 构思/探索:探索,在这里我们可以根据业务需求进行探索。制作原型,创建一个 [PromptFlow](https://microsoft.github.io/promptflow/index.html?WT.mc_id=academic-105485-koreyst) 并测试它是否足够高效以验证我们的假设。 +2. 构建/增强:实现,现在,我们开始评估更大的数据集,实施技术,如微调和 RAG,以检查解决方案的稳健性。如果不够,可以重新实施,添加新步骤到我们的流程或重组数据。测试我们的流程和规模后,如果有效并检查我们的指标,就可以进入下一步。 +3. 运作:集成,现在将监控和警报系统添加到我们的系统中,部署和应用程序集成到我们的应用程序中。 + +然后,我们有一个专注于安全、合规和治理的全面管理循环。 + +恭喜,现在您的 AI 应用程序已准备好运行。要获得实践经验,请查看 [Contoso Chat Demo.](https://nitya.github.io/contoso-chat/?WT.mc_id=academic-105485-koreys) + +现在,我们可以使用哪些工具? + +## 生命周期工具 + +对于工具,Microsoft 提供了 [Azure AI Platform](https://azure.microsoft.com/solutions/ai/?WT.mc_id=academic-105485-koreys) 和 [PromptFlow](https://microsoft.github.io/promptflow/index.html?WT.mc_id=academic-105485-koreyst),以便于实施和准备启动您的周期。 + +[Azure AI Platform](https://azure.microsoft.com/solutions/ai/?WT.mc_id=academic-105485-koreys) 允许您使用 [AI Studio](https://ai.azure.com/?WT.mc_id=academic-105485-koreys)。AI Studio 是一个网络门户,允许您探索模型、示例和工具。管理您的资源、UI 开发流程和 SDK/CLI 选项以进行代码优先开发。 + +![Azure AI possibilities](../../../translated_images/04-azure-ai-platform.png?WT.a39053c2efd7670298a79282658a9f5bf903dec5c1938b1a08cf45f1284e6ac0.zh.mc_id=academic-105485-koreys) + +Azure AI 允许您使用多种资源,管理您的操作、服务、项目、向量搜索和数据库需求。 + +![LLMOps with Azure AI](../../../translated_images/05-llm-azure-ai-prompt.png?WT.9189130ce4f2e7c8667fc7c83c6b89236ce5c6361150f47104c27c105f04b487.zh.mc_id=academic-105485-koreys) + +从概念验证(POC)到大型应用程序,使用 PromptFlow 构建: + +- 从 VS Code 设计和构建应用程序,使用视觉和功能工具 +- 轻松测试和微调您的应用程序以获得高质量 AI +- 使用 Azure AI Studio 与云集成和迭代,快速集成进行推送和部署 + +![LLMOps with PromptFlow](../../../translated_images/06-llm-promptflow.png?WT.e479dfedaa5f6ef7d36a11edbff74ac5579c3121ba0be0ee32eb5fc3eb17bd77.zh.mc_id=academic-105485-koreys) + +## 太棒了!继续学习! + +太棒了,现在了解更多关于我们如何构建应用程序以使用这些概念的内容,请查看 [Contoso Chat App](https://nitya.github.io/contoso-chat/?WT.mc_id=academic-105485-koreyst),了解云倡导如何在演示中添加这些概念。有关更多内容,请查看我们的 [Ignite 分组会议!](https://www.youtube.com/watch?v=DdOylyrTOWg) + +现在,查看第 15 课,了解 [检索增强生成和向量数据库](../15-rag-and-vector-databases/README.md?WT.mc_id=academic-105485-koreyst) 如何影响生成式 AI 并制作更具吸引力的应用程序! + +**免责声明**: +本文件是使用基于机器的AI翻译服务翻译的。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文件视为权威来源。对于关键信息,建议进行专业人工翻译。我们不对因使用本翻译而产生的任何误解或误释承担责任。 \ No newline at end of file diff --git a/translations/zh/15-rag-and-vector-databases/README.md b/translations/zh/15-rag-and-vector-databases/README.md new file mode 100644 index 000000000..cbb11b614 --- /dev/null +++ b/translations/zh/15-rag-and-vector-databases/README.md @@ -0,0 +1,270 @@ +# 检索增强生成 (RAG) 和向量数据库 + +[![检索增强生成 (RAG) 和向量数据库](../../../translated_images/15-lesson-banner.png?WT.ae1ec4b596c9c2b74121dd24c30143380d4789a9ef381276dbbc9fd5d7abc3d5.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson15-gh?WT.mc_id=academic-105485-koreyst) + +在搜索应用课程中,我们简要学习了如何将自己的数据集成到大型语言模型 (LLM) 中。在本课中,我们将深入探讨如何在 LLM 应用中根植数据的概念、过程的机制以及存储数据的方法,包括嵌入和文本。 + +> **视频即将上线** + +## 介绍 + +在本课中,我们将涵盖以下内容: + +- RAG 的介绍,它是什么以及为什么在人工智能中使用它。 + +- 理解什么是向量数据库,并为我们的应用创建一个。 + +- 如何将 RAG 集成到应用中的实际示例。 + +## 学习目标 + +完成本课后,您将能够: + +- 解释 RAG 在数据检索和处理中的重要性。 + +- 设置 RAG 应用并将您的数据植根于 LLM。 + +- 在 LLM 应用中有效集成 RAG 和向量数据库。 + +## 我们的场景:用我们自己的数据增强我们的 LLM + +在本课中,我们希望将自己的笔记添加到教育初创公司中,这样聊天机器人就可以获取有关不同主题的更多信息。利用我们拥有的笔记,学习者将能够更好地学习和理解不同的主题,使他们更容易为考试复习。为了创建我们的场景,我们将使用: + +- `Azure OpenAI:` 我们将用于创建聊天机器人的 LLM + +- `AI for beginners' lesson on Neural Networks`:这将是我们植根于 LLM 的数据 + +- `Azure AI Search` 和 `Azure Cosmos DB:` 向量数据库来存储我们的数据并创建搜索索引 + +用户将能够从他们的笔记中创建练习测验、复习闪卡,并将其总结为简洁的概述。让我们开始了解什么是 RAG 以及它如何工作: + +## 检索增强生成 (RAG) + +一个由 LLM 驱动的聊天机器人处理用户提示以生成响应。它旨在与用户互动,并在广泛的主题上进行交流。然而,其响应仅限于所提供的上下文及其基础训练数据。例如,GPT-4 的知识截止日期是 2021 年 9 月,这意味着它不了解此后发生的事件。此外,用于训练 LLM 的数据不包括个人笔记或公司的产品手册等机密信息。 + +### RAGs (检索增强生成) 的工作原理 + +![展示 RAGs 工作原理的图示](../../../translated_images/how-rag-works.png?WT.fde75879826c169b53e16dc0d0d6691172c75b314400f380d40a9f31244eba0e.zh.mc_id=academic-105485-koreyst) + +假设您想部署一个从您的笔记中创建测验的聊天机器人,您将需要连接到知识库。这就是 RAG 的用武之地。RAG 的操作如下: + +- **知识库:** 在检索之前,这些文档需要被摄取和预处理,通常将大型文档分解为较小的块,将其转换为文本嵌入并存储在数据库中。 + +- **用户查询:** 用户提出问题 + +- **检索:** 当用户提出问题时,嵌入模型从我们的知识库中检索相关信息,以提供将被整合到提示中的更多上下文。 + +- **增强生成:** LLM 基于检索到的数据增强其响应。它允许生成的响应不仅基于预训练数据,还包括来自添加上下文的相关信息。检索到的数据用于增强 LLM 的响应。然后 LLM 返回用户问题的答案。 + +![展示 RAGs 架构的图示](../../../translated_images/encoder-decode.png?WT.80c3c9669a10e85d1f7e9dc7f7f0d416a71e16d2f8a6da93267e55cbfbddbf9f.zh.mc_id=academic-105485-koreyst) + +RAG 的架构使用由两个部分组成的变压器实现:编码器和解码器。例如,当用户提出问题时,输入文本被“编码”为捕捉词义的向量,然后向量被“解码”到我们的文档索引中,并根据用户查询生成新文本。LLM 使用编码器-解码器模型生成输出。 + +根据提议的论文 [检索增强生成用于知识密集型 NLP(自然语言处理软件)任务](https://arxiv.org/pdf/2005.11401.pdf?WT.mc_id=academic-105485-koreyst),实现 RAG 的两种方法是: + +- **_RAG-Sequence_** 使用检索到的文档来预测用户查询的最佳答案 + +- **RAG-Token** 使用文档生成下一个标记,然后检索它们以回答用户的查询 + +### 为什么要使用 RAGs? + +- **信息丰富性:** 确保文本响应是最新的。因此,通过访问内部知识库,提升特定领域任务的性能。 + +- 通过利用知识库中的**可验证数据**来减少虚构内容,为用户查询提供上下文。 + +- 它是**成本效益高的**,因为与微调 LLM 相比,它们更经济。 + +## 创建知识库 + +我们的应用基于我们的个人数据,即 AI 初学者课程中的神经网络课程。 + +### 向量数据库 + +与传统数据库不同,向量数据库是一种专门设计用于存储、管理和搜索嵌入向量的数据库。它存储文档的数值表示。将数据分解为数值嵌入,使我们的 AI 系统更容易理解和处理数据。 + +我们将嵌入存储在向量数据库中,因为 LLM 对其接受的输入标记数量有一个限制。由于无法将整个嵌入传递给 LLM,我们需要将其分解为块,当用户提出问题时,最接近问题的嵌入将与提示一起返回。分块还可以减少通过 LLM 的标记数量,从而降低成本。 + +一些流行的向量数据库包括 Azure Cosmos DB、Clarifyai、Pinecone、Chromadb、ScaNN、Qdrant 和 DeepLake。您可以使用 Azure CLI 使用以下命令创建 Azure Cosmos DB 模型: + +```bash +az login +az group create -n -l +az cosmosdb create -n -r +az cosmosdb list-keys -n -g +``` + +### 从文本到嵌入 + +在存储数据之前,我们需要将其转换为向量嵌入,然后再存储到数据库中。如果您正在处理大型文档或长文本,可以根据预期的查询对其进行分块。分块可以在句子级别或段落级别进行。由于分块从其周围的词中获取含义,您可以为分块添加一些其他上下文,例如,通过添加文档标题或在分块前后包含一些文本。您可以按以下方式分块数据: + +```python +def split_text(text, max_length, min_length): + words = text.split() + chunks = [] + current_chunk = [] + + for word in words: + current_chunk.append(word) + if len(' '.join(current_chunk)) < max_length and len(' '.join(current_chunk)) > min_length: + chunks.append(' '.join(current_chunk)) + current_chunk = [] + + # If the last chunk didn't reach the minimum length, add it anyway + if current_chunk: + chunks.append(' '.join(current_chunk)) + + return chunks +``` + +分块后,我们可以使用不同的嵌入模型嵌入我们的文本。您可以使用的一些模型包括:word2vec、OpenAI 的 ada-002、Azure Computer Vision 等。选择要使用的模型将取决于您使用的语言、编码的内容类型(文本/图像/音频)、它可以编码的输入大小以及嵌入输出的长度。 + +使用 OpenAI 的 `text-embedding-ada-002` 模型嵌入文本的示例如下: +![“cat”一词的嵌入](../../../translated_images/cat.png?WT.6f67a41409b2174c6f543273f4a9f8c38b227112a12831da3070e52f13e03818.zh.mc_id=academic-105485-koreyst) + +## 检索和向量搜索 + +当用户提出问题时,检索器使用查询编码器将其转换为向量,然后在我们的文档搜索索引中搜索与输入相关的向量。一旦完成,它将输入向量和文档向量都转换为文本,并通过 LLM 传递。 + +### 检索 + +检索发生在系统尝试快速从索引中找到满足搜索条件的文档时。检索器的目标是获取将用于提供上下文并在您的数据上植根于 LLM 的文档。 + +在我们的数据库中执行搜索的方法有多种,例如: + +- **关键词搜索** - 用于文本搜索 + +- **语义搜索** - 使用词义 + +- **向量搜索** - 使用嵌入模型将文档从文本转换为向量表示。检索将通过查询与用户问题最接近的文档来完成。 + +- **混合搜索** - 关键词和向量搜索的结合。 + +检索的一个挑战是当数据库中没有与查询类似的响应时,系统将返回他们能找到的最佳信息,不过,您可以使用一些策略,例如设置相关性的最大距离或使用结合关键词和向量搜索的混合搜索。在本课中,我们将使用混合搜索,即向量和关键词搜索的结合。我们将数据存储到包含块和嵌入的列的数据框中。 + +### 向量相似性 + +检索器将在知识数据库中搜索彼此靠近的嵌入,即最近邻,因为它们是相似的文本。在用户提出查询的情况下,首先将其嵌入,然后与相似的嵌入匹配。用于测量不同向量相似性的常见度量是余弦相似性,它基于两个向量之间的角度。 + +我们可以使用其他替代方法来测量相似性,例如欧几里得距离,它是向量端点之间的直线距离,以及点积,它测量两个向量的对应元素的乘积之和。 + +### 搜索索引 + +在进行检索时,我们需要在执行搜索之前为我们的知识库构建一个搜索索引。索引将存储我们的嵌入,并可以在大型数据库中快速检索最相似的块。我们可以使用以下方法在本地创建索引: + +```python +from sklearn.neighbors import NearestNeighbors + +embeddings = flattened_df['embeddings'].to_list() + +# Create the search index +nbrs = NearestNeighbors(n_neighbors=5, algorithm='ball_tree').fit(embeddings) + +# To query the index, you can use the kneighbors method +distances, indices = nbrs.kneighbors(embeddings) +``` + +### 重排序 + +查询数据库后,您可能需要对结果进行排序,以使其从最相关的结果开始。重排序 LLM 利用机器学习通过将搜索结果按相关性排序来提高其相关性。使用 Azure AI 搜索,重排序会自动为您完成,使用语义重排序器。使用最近邻的重排序示例如下: + +```python +# Find the most similar documents +distances, indices = nbrs.kneighbors([query_vector]) + +index = [] +# Print the most similar documents +for i in range(3): + index = indices[0][i] + for index in indices[0]: + print(flattened_df['chunks'].iloc[index]) + print(flattened_df['path'].iloc[index]) + print(flattened_df['distances'].iloc[index]) + else: + print(f"Index {index} not found in DataFrame") +``` + +## 将所有内容整合在一起 + +最后一步是将我们的 LLM 添加到组合中,以便能够获得基于我们数据的响应。我们可以按以下方式实现: + +```python +user_input = "what is a perceptron?" + +def chatbot(user_input): + # Convert the question to a query vector + query_vector = create_embeddings(user_input) + + # Find the most similar documents + distances, indices = nbrs.kneighbors([query_vector]) + + # add documents to query to provide context + history = [] + for index in indices[0]: + history.append(flattened_df['chunks'].iloc[index]) + + # combine the history and the user input + history.append(user_input) + + # create a message object + messages=[ + {"role": "system", "content": "You are an AI assistant that helps with AI questions."}, + {"role": "user", "content": history[-1]} + ] + + # use chat completion to generate a response + response = openai.chat.completions.create( + model="gpt-4", + temperature=0.7, + max_tokens=800, + messages=messages + ) + + return response.choices[0].message + +chatbot(user_input) +``` + +## 评估我们的应用 + +### 评估指标 + +- 提供的响应质量,确保其听起来自然、流畅和人性化 + +- 数据的植根性:评估响应是否来自提供的文档 + +- 相关性:评估响应是否与所提问题匹配并相关 + +- 流利度:评估响应在语法上是否合理 + +## 使用 RAG(检索增强生成)和向量数据库的用例 + +在许多不同的用例中,函数调用可以改善您的应用,例如: + +- 问答:将公司数据植根于员工可以用来提问的聊天中。 + +- 推荐系统:您可以创建一个系统,匹配最相似的值,例如电影、餐馆等。 + +- 聊天机器人服务:您可以存储聊天记录,并根据用户数据个性化对话。 + +- 基于向量嵌入的图像搜索,在进行图像识别和异常检测时非常有用。 + +## 总结 + +我们已经涵盖了 RAG 的基础领域,从将数据添加到应用、用户查询和输出。为了简化 RAG 的创建,您可以使用 Semanti Kernel、Langchain 或 Autogen 等框架。 + +## 作业 + +为了继续学习检索增强生成 (RAG),您可以构建: + +- 使用您选择的框架为应用构建前端 + +- 利用 LangChain 或 Semantic Kernel 框架,重建您的应用。 + +恭喜您完成本课 👏。 + +## 学习不止于此,继续旅程 + +完成本课后,请查看我们的 [生成式 AI 学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst),继续提升您的生成式 AI 知识! + +**免责声明**: +本文档使用机器翻译服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文档视为权威来源。对于关键信息,建议进行专业人工翻译。对于因使用本翻译而产生的任何误解或误读,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/15-rag-and-vector-databases/data/frameworks.md b/translations/zh/15-rag-and-vector-databases/data/frameworks.md new file mode 100644 index 000000000..ae641dda4 --- /dev/null +++ b/translations/zh/15-rag-and-vector-databases/data/frameworks.md @@ -0,0 +1,114 @@ +# 神经网络框架 + +正如我们已经学习到的,为了能够高效地训练神经网络,我们需要做到以下两点: + +* 操作张量,例如进行乘法、加法,并计算一些函数如sigmoid或softmax +* 计算所有表达式的梯度,以便进行梯度下降优化 + +虽然`numpy`库可以完成第一部分,但我们需要某种机制来计算梯度。在我们在上一节中开发的框架中,我们必须手动在`backward`方法中编程所有的导数函数,这个方法进行反向传播。理想情况下,一个框架应该让我们能够计算我们可以定义的*任何表达式*的梯度。 + +另一个重要的事情是能够在GPU或其他专用计算单元(如TPU)上执行计算。深度神经网络训练需要*大量*的计算,能够在GPU上并行化这些计算是非常重要的。 + +> ✅ 术语“并行化”是指将计算分布在多个设备上。 + +目前,最流行的两个神经网络框架是:TensorFlow和PyTorch。两者都提供了一个低级API,可以在CPU和GPU上操作张量。在低级API之上,还有更高级的API,分别称为Keras和PyTorch Lightning。 + +低级API | TensorFlow | PyTorch +--------|------------|--------- +高级API | Keras | PyTorch Lightning + +**低级API** 在两个框架中都允许你构建所谓的**计算图**。这个图定义了如何用给定的输入参数计算输出(通常是损失函数),如果可用的话,可以将其推送到GPU上进行计算。这里有一些函数可以对这个计算图进行微分并计算梯度,然后可以用来优化模型参数。 + +**高级API** 基本上将神经网络视为一个**层的序列**,并且使得构建大多数神经网络变得更容易。训练模型通常需要准备数据,然后调用一个`fit`函数来完成任务。 + +高级API允许你非常快速地构建典型的神经网络,而不必担心很多细节。同时,低级API提供了对训练过程的更多控制,因此在研究中被大量使用,当你处理新的神经网络架构时。 + +同样重要的是要理解,你可以同时使用这两种API,例如,你可以使用低级API开发自己的网络层架构,然后在用高级API构建和训练的更大网络中使用它。或者你可以使用高级API定义一个层的序列网络,然后使用自己的低级训练循环进行优化。两种API使用相同的基本概念,并且它们被设计为能够很好地协同工作。 + +## 学习 + +在本课程中,我们提供了大部分内容,既有针对PyTorch,也有针对TensorFlow的。你可以选择你喜欢的框架,只学习相应的笔记本。如果你不确定选择哪个框架,可以在网上阅读一些关于**PyTorch vs. TensorFlow**的讨论。你也可以看看这两个框架,以便更好地理解。 + +在可能的情况下,我们将使用高级API以简化过程。然而,我们认为理解神经网络的基本工作原理是很重要的,因此一开始我们将从低级API和张量开始。然而,如果你想快速入门,不想花太多时间学习这些细节,可以跳过这些内容,直接进入高级API笔记本。 + +## ✍️ 练习:框架 + +在以下笔记本中继续学习: + +低级API | TensorFlow+Keras笔记本 | PyTorch +--------|-------------------------|--------- +高级API | Keras | *PyTorch Lightning* + +掌握了这些框架之后,让我们回顾一下过拟合的概念。 + +# 过拟合 + +过拟合是机器学习中一个极其重要的概念,正确理解它非常重要! + +考虑下面这个逼近5个点的问题(在下图中用`x`表示): + +!线性 | 过拟合 +----------------|------------------- +**线性模型,2个参数** | **非线性模型,7个参数** +训练误差 = 5.3 | 训练误差 = 0 +验证误差 = 5.1 | 验证误差 = 20 + +* 左图中,我们看到一个很好的直线逼近。由于参数数量合适,模型正确地理解了点分布的背后规律。 +* 右图中,模型过于强大。因为我们只有5个点,而模型有7个参数,它可以调整以通过所有点,使训练误差为0。然而,这阻止了模型理解数据背后的正确模式,因此验证误差非常高。 + +在模型的丰富性(参数数量)和训练样本数量之间找到正确的平衡非常重要。 + +## 为什么会发生过拟合 + + * 训练数据不足 + * 模型过于强大 + * 输入数据中噪声过多 + +## 如何检测过拟合 + +从上图可以看出,过拟合可以通过非常低的训练误差和很高的验证误差来检测。通常在训练过程中,我们会看到训练误差和验证误差都开始下降,然后在某个点验证误差可能会停止下降并开始上升。这将是过拟合的一个标志,并且表明我们可能应该在此时停止训练(或者至少保存模型的一个快照)。 + +## 如何防止过拟合 + +如果你发现发生了过拟合,你可以采取以下措施之一: + + * 增加训练数据的数量 + * 降低模型的复杂性 + * 使用一些正则化技术,如Dropout,我们将在后面讨论。 + +## 过拟合和偏差-方差权衡 + +过拟合实际上是统计学中一个更普遍的问题,称为偏差-方差权衡。如果我们考虑模型中可能的误差来源,我们可以看到两种类型的误差: + +* **偏差误差** 是由于我们的算法无法正确捕捉训练数据之间的关系而引起的。它可能是因为我们的模型不够强大(**欠拟合**)。 +* **方差误差** 是由于模型逼近输入数据中的噪声而不是有意义的关系而引起的(**过拟合**)。 + +在训练过程中,偏差误差减少(因为我们的模型学会了逼近数据),而方差误差增加。重要的是要停止训练 - 无论是手动(当我们检测到过拟合时)还是自动(通过引入正则化) - 以防止过拟合。 + +## 结论 + +在本节课中,你学习了两种最流行的AI框架TensorFlow和PyTorch的不同API。此外,你还学习了一个非常重要的话题,过拟合。 + +## 🚀 挑战 + +在随附的笔记本中,你会在底部找到“任务”;通过笔记本并完成这些任务。 + +## 回顾与自学 + +对以下主题进行一些研究: + +- TensorFlow +- PyTorch +- 过拟合 + +问自己以下问题: + +- TensorFlow和PyTorch有什么区别? +- 过拟合和欠拟合有什么区别? + +## 作业 + +在这个实验中,你需要使用PyTorch或TensorFlow解决两个分类问题,使用单层和多层全连接网络。 + +**免责声明**: +本文档是使用机器翻译服务翻译的。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原文档的母语版本视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用本翻译而产生的任何误解或误读,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/15-rag-and-vector-databases/data/own_framework.md b/translations/zh/15-rag-and-vector-databases/data/own_framework.md new file mode 100644 index 000000000..fc54b7a3e --- /dev/null +++ b/translations/zh/15-rag-and-vector-databases/data/own_framework.md @@ -0,0 +1,83 @@ +# 神经网络介绍. 多层感知器 + +在前一节中,你了解了最简单的神经网络模型——单层感知器,这是一个线性双分类模型。 + +在本节中,我们将扩展此模型到一个更灵活的框架,使我们能够: + +* 执行**多分类**,而不仅仅是双分类 +* 解决**回归问题**,而不仅仅是分类 +* 分离那些不是线性可分的类别 + +我们还将在Python中开发我们自己的模块化框架,以便构建不同的神经网络架构。 + +## 机器学习的形式化 + +让我们从形式化机器学习问题开始。假设我们有一个训练数据集**X**和标签**Y**,我们需要构建一个模型*f*,以实现最准确的预测。预测的质量通过**损失函数** ℒ来衡量。以下损失函数经常使用: + +* 对于回归问题,当我们需要预测一个数值时,可以使用**绝对误差** ∑i|f(x(i))-y(i)|,或**平方误差** ∑i(f(x(i))-y(i))2 +* 对于分类,我们使用**0-1损失**(本质上与模型的**准确性**相同),或**逻辑损失**。 + +对于单层感知器,函数*f*被定义为一个线性函数*f(x)=wx+b*(这里*w*是权重矩阵,*x*是输入特征向量,*b*是偏置向量)。对于不同的神经网络架构,这个函数可以采取更复杂的形式。 + +> 在分类的情况下,通常希望获得对应类别的概率作为网络输出。为了将任意数转换为概率(例如,规范化输出),我们经常使用**softmax**函数σ,因此函数*f*变为*f(x)=σ(wx+b)* + +在上述*f*的定义中,*w*和*b*被称为**参数**θ=⟨*w,b*⟩。给定数据集⟨**X**,**Y**⟩,我们可以计算整个数据集上的总体误差作为参数θ的函数。 + +> ✅ **神经网络训练的目标是通过调整参数θ来最小化误差** + +## 梯度下降优化 + +有一种著名的函数优化方法称为**梯度下降**。其思想是我们可以计算损失函数关于参数的导数(在多维情况下称为**梯度**),并以一种使误差减少的方式调整参数。这可以形式化如下: + +* 用一些随机值初始化参数w(0), b(0) +* 多次重复以下步骤: + - w(i+1) = w(i)-η∂ℒ/∂w + - b(i+1) = b(i)-η∂ℒ/∂b + +在训练过程中,优化步骤应该考虑整个数据集(记住损失是通过所有训练样本的和来计算的)。然而,在实际中,我们会取数据集的小部分称为**小批量**,并基于数据的子集计算梯度。由于每次随机取子集,这种方法称为**随机梯度下降**(SGD)。 + +## 多层感知器和反向传播 + +如上所述,单层网络能够对线性可分的类别进行分类。为了构建更丰富的模型,我们可以结合网络的多个层次。在数学上,这意味着函数*f*将具有更复杂的形式,并将在几个步骤中计算: +* z1=w1x+b1 +* z2=w2α(z1)+b2 +* f = σ(z2) + +这里,α是一个**非线性激活函数**,σ是一个softmax函数,参数θ=<*w1,b1,w2,b2*>。 + +梯度下降算法将保持不变,但计算梯度将更困难。根据链式微分法则,我们可以计算导数为: + +* ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2) +* ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1) + +> ✅ 链式微分法则用于计算损失函数关于参数的导数。 + +注意所有这些表达式的最左边部分是相同的,因此我们可以有效地从损失函数开始计算导数,并通过计算图“向后”计算。因此,多层感知器的训练方法称为**反向传播**,或“反传”。 + +> TODO: 图片引用 + +> ✅ 我们将在笔记本示例中更详细地介绍反向传播。 + +## 结论 + +在本课中,我们构建了自己的神经网络库,并将其用于一个简单的二维分类任务。 + +## 🚀 挑战 + +在附带的笔记本中,你将实现自己的框架来构建和训练多层感知器。你将能够详细了解现代神经网络的运行方式。 + +继续前往OwnFramework笔记本并完成其中的内容。 + +## 复习与自学 + +反向传播是AI和ML中常用的算法,值得更深入地研究。 + +## 作业 + +在本实验中,你需要使用本课中构建的框架来解决MNIST手写数字分类。 + +* 说明 +* 笔记本 + +**免责声明**: +本文件是使用基于机器的人工智能翻译服务翻译的。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文件视为权威来源。对于关键信息,建议进行专业人工翻译。对于因使用本翻译而产生的任何误解或误释,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/15-rag-and-vector-databases/data/perceptron.md b/translations/zh/15-rag-and-vector-databases/data/perceptron.md new file mode 100644 index 000000000..d223025b8 --- /dev/null +++ b/translations/zh/15-rag-and-vector-databases/data/perceptron.md @@ -0,0 +1,88 @@ +# 神经网络简介:感知器 + +1957年,康奈尔航空实验室的Frank Rosenblatt首次尝试实现类似于现代神经网络的东西。这是一个名为“Mark-1”的硬件实现,旨在识别简单的几何图形,如三角形、正方形和圆形。 + +| | | +|--------------|-----------| +|Frank Rosenblatt | The Mark 1 Perceptron| + +> 图片来自维基百科 + +输入图像由20x20的光电池阵列表示,因此神经网络有400个输入和一个二进制输出。一个简单的网络包含一个神经元,也称为**阈值逻辑单元**。神经网络的权重类似于电位计,在训练阶段需要手动调整。 + +> ✅ 电位计是一种允许用户调节电路电阻的设备。 + +> 《纽约时报》当时这样描述感知器:*一种电子计算机的胚胎,[海军]期望它能够行走、说话、看见、写字、自我复制并意识到自己的存在。* + +## 感知器模型 + +假设我们的模型中有N个特征,此时输入向量将是大小为N的向量。感知器是一个**二元分类**模型,即它可以区分输入数据的两类。我们假设对于每个输入向量x,感知器的输出将根据类别为+1或-1。输出将使用以下公式计算: + +y(x) = f(wTx) + +其中f是阶跃激活函数 + +## 训练感知器 + +要训练感知器,我们需要找到一个权重向量w,使得大多数值能够被正确分类,即导致最小的**误差**。这种误差通过**感知器准则**定义如下: + +E(w) = -∑wTxiti + +其中: + +* 求和在那些导致错误分类的训练数据点i上进行 +* xi是输入数据,ti分别为负例和正例对应的-1或+1。 + +这个准则被视为权重w的一个函数,我们需要对其进行最小化。通常使用一种称为**梯度下降**的方法,我们从一些初始权重w(0)开始,然后在每一步根据以下公式更新权重: + +w(t+1) = w(t) - η∇E(w) + +这里η是所谓的**学习率**,∇E(w)表示E的**梯度**。在计算完梯度后,我们得到: + +w(t+1) = w(t) + ∑ηxiti + +Python中的算法如下所示: + +```python +def train(positive_examples, negative_examples, num_iterations = 100, eta = 1): + + weights = [0,0,0] # Initialize weights (almost randomly :) + + for i in range(num_iterations): + pos = random.choice(positive_examples) + neg = random.choice(negative_examples) + + z = np.dot(pos, weights) # compute perceptron output + if z < 0: # positive example classified as negative + weights = weights + eta*weights.shape + + z = np.dot(neg, weights) + if z >= 0: # negative example classified as positive + weights = weights - eta*weights.shape + + return weights +``` + +## 结论 + +在本课中,你学习了关于感知器的知识,它是一个二元分类模型,并了解了如何通过使用权重向量对其进行训练。 + +## 🚀 挑战 + +如果你想尝试构建自己的感知器,可以在Microsoft Learn上尝试这个实验室,它使用Azure ML设计器。 + +## 复习与自学 + +要了解我们如何使用感知器解决玩具问题以及现实生活中的问题,并继续学习,请参阅感知器笔记本。 + +这里还有一篇关于感知器的有趣文章。 + +## 作业 + +在本课中,我们实现了一个用于二元分类任务的感知器,并使用它来区分两个手写数字。在这个实验室中,你需要完全解决数字分类问题,即确定哪个数字最有可能与给定图像对应。 + +* 说明 +* 笔记本 + +**免责声明**: +本文档是使用基于机器的AI翻译服务翻译的。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始文档的母语版本视为权威来源。对于关键信息,建议进行专业的人类翻译。对于因使用本翻译而引起的任何误解或误释,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/16-open-source-models/README.md b/translations/zh/16-open-source-models/README.md new file mode 100644 index 000000000..cb81b4c3d --- /dev/null +++ b/translations/zh/16-open-source-models/README.md @@ -0,0 +1,82 @@ +[![Open Source Models](../../../translated_images/16-lesson-banner.png?WT.a9a13a59f0350adb5846e88fb3aba98cd4c6cb3297e78cb7100938f45b7dac47.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson16-gh?WT.mc_id=academic-105485-koreyst) + +## 介绍 + +开源大型语言模型(LLM)的世界充满活力并不断发展。本课旨在深入了解开源模型。如果您想了解专有模型与开源模型的比较,请访问["探索和比较不同的LLM"课程](../02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst)。本课还将涵盖微调的主题,但更详细的解释可以在["微调LLM"课程](../18-fine-tuning/README.md?WT.mc_id=academic-105485-koreyst)中找到。 + +## 学习目标 + +- 了解开源模型 +- 理解使用开源模型的好处 +- 探索在Hugging Face和Azure AI Studio上可用的开源模型 + +## 什么是开源模型? + +开源软件在各个领域的技术发展中发挥了重要作用。开源倡议(OSI)定义了[软件的10个标准](https://web.archive.org/web/20241126001143/https://opensource.org/osd?WT.mc_id=academic-105485-koreyst)以被归类为开源。源代码必须在OSI批准的许可证下公开共享。 + +虽然LLM的开发与软件开发有相似之处,但过程并不完全相同。这引起了社区关于在LLM背景下开源定义的广泛讨论。为了使模型符合传统的开源定义,以下信息应该公开可用: + +- 用于训练模型的数据集。 +- 作为训练一部分的完整模型权重。 +- 评估代码。 +- 微调代码。 +- 完整的模型权重和训练指标。 + +目前只有少数模型符合此标准。[由Allen Institute for Artificial Intelligence (AllenAI)创建的OLMo模型](https://huggingface.co/allenai/OLMo-7B?WT.mc_id=academic-105485-koreyst)就是其中之一。 + +在本课中,我们将继续将这些模型称为“开源模型”,因为在撰写本文时它们可能不符合上述标准。 + +## 开源模型的好处 + +**高度可定制** - 由于开源模型发布了详细的训练信息,研究人员和开发人员可以修改模型的内部结构。这使得可以创建高度专业化的模型,以针对特定任务或研究领域进行微调。一些例子包括代码生成、数学运算和生物学。 + +**成本** - 使用和部署这些模型的每个token成本低于专有模型。在构建生成式AI应用程序时,应该根据您的用例权衡性能与价格。 + +![Model Cost](../../../translated_images/model-price.png?WT.473bad4fe5bdb7014798275047130c0949da1e4a3d6f379037bedf68ef1d5e42.zh.mc_id=academic-105485-koreyst) +来源: Artificial Analysis + +**灵活性** - 使用开源模型可以让您在使用不同模型或组合模型方面更加灵活。一个例子是[HuggingChat Assistants](https://huggingface.co/chat?WT.mc_id=academic-105485-koreyst),用户可以在用户界面中直接选择正在使用的模型: + +![Choose Model](../../../translated_images/choose-model.png?WT.50da8a7caba083003bcf9f71017d17715f032acff67359c11c9886597ca3efdc.zh.mc_id=academic-105485-koreyst) + +## 探索不同的开源模型 + +### Llama 2 + +[LLama2](https://huggingface.co/meta-llama?WT.mc_id=academic-105485-koreyst)由Meta开发,是一个针对聊天应用优化的开源模型。这是由于其微调方法,包括大量对话和人类反馈。通过这种方法,模型生成的结果更符合人类期望,从而提供更好的用户体验。 + +Llama的一些微调版本包括专注于日语的[Japanese Llama](https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b?WT.mc_id=academic-105485-koreyst)和增强版的[Llama Pro](https://huggingface.co/TencentARC/LLaMA-Pro-8B?WT.mc_id=academic-105485-koreyst)。 + +### Mistral + +[Mistral](https://huggingface.co/mistralai?WT.mc_id=academic-105485-koreyst)是一个专注于高性能和效率的开源模型。它使用专家混合方法,将一组专门的专家模型组合成一个系统,根据输入选择使用某些模型。这使得计算更加有效,因为模型只处理它们专长的输入。 + +Mistral的一些微调版本包括专注于医疗领域的[BioMistral](https://huggingface.co/BioMistral/BioMistral-7B?text=Mon+nom+est+Thomas+et+mon+principal?WT.mc_id=academic-105485-koreyst)和执行数学运算的[OpenMath Mistral](https://huggingface.co/nvidia/OpenMath-Mistral-7B-v0.1-hf?WT.mc_id=academic-105485-koreyst)。 + +### Falcon + +[Falcon](https://huggingface.co/tiiuae?WT.mc_id=academic-105485-koreyst)是由技术创新研究所(TII)创建的LLM。Falcon-40B在40亿参数上进行了训练,表现优于计算预算较低的GPT-3。这是因为它使用了FlashAttention算法和多查询注意力,使其在推理时减少了内存需求。由于推理时间减少,Falcon-40B适合用于聊天应用。 + +Falcon的一些微调版本包括基于开源模型构建的[OpenAssistant](https://huggingface.co/OpenAssistant/falcon-40b-sft-top1-560?WT.mc_id=academic-105485-koreyst)和性能优于基础模型的[GPT4ALL](https://huggingface.co/nomic-ai/gpt4all-falcon?WT.mc_id=academic-105485-koreyst)。 + +## 如何选择 + +没有一个标准答案来选择开源模型。一个好的起点是使用Azure AI Studio的按任务筛选功能。这将帮助您了解模型已被训练的任务类型。Hugging Face还维护了一个LLM排行榜,显示了基于某些指标的最佳表现模型。 + +在比较不同类型的LLM时,[Artificial Analysis](https://artificialanalysis.ai/?WT.mc_id=academic-105485-koreyst)是另一个很好的资源: + +![Model Quality](../../../translated_images/model-quality.png?WT.bffdb0b01a3f3205153df83585941f90a153017f607dbcfad9cde5369764f203.zh.mc_id=academic-105485-koreyst) +来源: Artifical Analysis + +如果正在处理特定用例,寻找专注于相同领域的微调版本可能会很有效。尝试多个开源模型以查看它们是否符合您和用户的期望是另一种好做法。 + +## 下一步 + +开源模型的最佳部分是您可以很快开始使用它们。查看[Azure AI Studio模型目录](https://ai.azure.com?WT.mc_id=academic-105485-koreyst),其中包含我们在此讨论的这些模型的特定Hugging Face集合。 + +## 学习不止于此,继续学习之旅 + +完成本课后,请查看我们的[生成式AI学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst),继续提升您的生成式AI知识! + +**免责声明**: +本文档使用基于机器的AI翻译服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文档视为权威来源。对于重要信息,建议使用专业人工翻译。对于因使用本翻译而引起的任何误解或误读,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/17-ai-agents/README.md b/translations/zh/17-ai-agents/README.md new file mode 100644 index 000000000..96f084743 --- /dev/null +++ b/translations/zh/17-ai-agents/README.md @@ -0,0 +1,164 @@ +[![开源模型](../../../translated_images/17-lesson-banner.png?WT.d223296926e27d95f6b5a748e3f77ab9a1b669d4f9aebe608f926cbb44ea08a8.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson17-gh?WT.mc_id=academic-105485-koreyst) + +## 介绍 + +AI代理代表了生成式AI中的一个激动人心的发展,使大型语言模型(LLM)从助手进化为能够采取行动的代理。AI代理框架使开发人员能够创建应用程序,让LLM访问工具和状态管理。这些框架还增强了可视性,使用户和开发人员能够监控LLM计划的动作,从而改善体验管理。 + +本课将涵盖以下领域: + +- 理解AI代理是什么 - AI代理到底是什么? +- 探索四种不同的AI代理框架 - 它们有什么独特之处? +- 将这些AI代理应用于不同的用例 - 什么时候应该使用AI代理? + +## 学习目标 + +完成本课后,你将能够: + +- 解释什么是AI代理以及如何使用它们。 +- 理解一些流行的AI代理框架之间的区别,以及它们的不同之处。 +- 理解AI代理的工作原理,以便用它们构建应用程序。 + +## 什么是AI代理? + +AI代理在生成式AI的世界中是一个非常令人兴奋的领域。伴随着这种兴奋,有时也会出现术语和其应用的混淆。为了简单并涵盖大多数涉及AI代理的工具,我们将使用以下定义: + +AI代理通过为大型语言模型(LLM)提供访问**状态**和**工具**的权限来执行任务。 + +![代理模型](../../../translated_images/what-agent.png?WT.96b2eb171bd613cd0652fb5a2c1f488c80fde8d3405db76d780603041a415cb3.zh.mc_id=academic-105485-koreyst) + +让我们定义这些术语: + +**大型语言模型** - 这些是本课程中提到的模型,如GPT-3.5、GPT-4、Llama-2等。 + +**状态** - 这指的是LLM工作的上下文。LLM利用其过去动作的上下文和当前上下文,引导其后续动作的决策。AI代理框架使开发人员更容易维护这种上下文。 + +**工具** - 为了完成用户请求的任务以及LLM计划的任务,LLM需要访问工具。一些工具的例子可以是数据库、API、外部应用程序,甚至是另一个LLM! + +希望这些定义能为你提供一个良好的基础,因为我们将探讨它们是如何实现的。让我们来看看几个不同的AI代理框架: + +## LangChain代理 + +[LangChain代理](https://python.langchain.com/docs/how_to/#agents?WT.mc_id=academic-105485-koreyst)是我们提供的定义的一个实现。 + +为了管理**状态**,它使用一个内置函数`AgentExecutor`。这接受已定义的`agent`和可用的`tools`。 + +`Agent Executor`还存储了聊天记录,以提供聊天的上下文。 + +![Langchain代理](../../../translated_images/langchain-agents.png?WT.311575a86262a6e33490477b281688373d96e3392dbfe3094965470531a9f111.zh.mc_id=academic-105485-koreyst) + +LangChain提供了一个[工具目录](https://integrations.langchain.com/tools?WT.mc_id=academic-105485-koreyst),可以导入到你的应用程序中,LLM可以访问这些工具。这些工具由社区和LangChain团队制作。 + +然后你可以定义这些工具并将它们传递给`Agent Executor`。 + +可视性是讨论AI代理时的另一个重要方面。应用程序开发人员了解LLM正在使用哪个工具以及原因非常重要。为此,LangChain团队开发了LangSmith。 + +## AutoGen + +接下来我们将讨论的AI代理框架是[AutoGen](https://microsoft.github.io/autogen/?WT.mc_id=academic-105485-koreyst)。AutoGen的主要关注点是对话。代理既可以**对话**也可以**定制**。 + +**对话 -** LLM可以启动并继续与另一个LLM的对话以完成任务。这是通过创建`AssistantAgents`并给它们一个特定的系统消息来完成的。 + +```python + +autogen.AssistantAgent( name="Coder", llm_config=llm_config, ) pm = autogen.AssistantAgent( name="Product_manager", system_message="Creative in software product ideas.", llm_config=llm_config, ) + +``` + +**定制** - 代理不仅可以定义为LLM,还可以是用户或工具。作为开发人员,你可以定义一个`UserProxyAgent`,负责与用户交互以获得完成任务的反馈。此反馈可以继续执行任务或停止它。 + +```python +user_proxy = UserProxyAgent(name="user_proxy") +``` + +### 状态和工具 + +为了更改和管理状态,助手代理生成Python代码以完成任务。 + +这是一个过程示例: + +![AutoGen](../../../translated_images/autogen.png?WT.45c9474fbd6109577f4363559f022554e796000ea2d677b80021b00e6ca0d869.zh.mc_id=academic-105485-koreyst) + +#### 用系统消息定义的LLM + +```python +system_message="For weather related tasks, only use the functions you have been provided with. Reply TERMINATE when the task is done." +``` + +这个系统消息指引特定的LLM完成任务所需的相关功能。记住,使用AutoGen,你可以定义多个具有不同系统消息的AssistantAgents。 + +#### 用户启动聊天 + +```python +user_proxy.initiate_chat( chatbot, message="I am planning a trip to NYC next week, can you help me pick out what to wear? ", ) + +``` + +来自user_proxy(人类)的这条消息将启动代理探索应该执行的可能功能的过程。 + +#### 执行功能 + +```bash +chatbot (to user_proxy): + +***** Suggested tool Call: get_weather ***** Arguments: {"location":"New York City, NY","time_periond:"7","temperature_unit":"Celsius"} ******************************************************** -------------------------------------------------------------------------------- + +>>>>>>>> EXECUTING FUNCTION get_weather... user_proxy (to chatbot): ***** Response from calling function "get_weather" ***** 112.22727272727272 EUR **************************************************************** + +``` + +一旦初始聊天被处理,代理将发送建议调用的工具。在这种情况下,它是一个名为`get_weather`. Depending on your configuration, this function can be automatically executed and read by the Agent or can be executed based on user input. + +You can find a list of [AutoGen code samples](https://microsoft.github.io/autogen/docs/Examples/?WT.mc_id=academic-105485-koreyst) to further explore how to get started building. + +## Taskweaver + +The next agent framework we will explore is [Taskweaver](https://microsoft.github.io/TaskWeaver/?WT.mc_id=academic-105485-koreyst). It is known as a "code-first" agent because instead of working strictly with `strings` , it can work with DataFrames in Python. This becomes extremely useful for data analysis and generation tasks. This can be things like creating graphs and charts or generating random numbers. + +### State and Tools + +To manage the state of the conversation, TaskWeaver uses the concept of a `Planner`. The `Planner` is a LLM that takes the request from the users and maps out the tasks that need to be completed to fulfill this request. + +To complete the tasks the `Planner` is exposed to the collection of tools called `Plugins`的功能。这可以是Python类或通用代码解释器。这些插件存储为嵌入,以便LLM可以更好地搜索正确的插件。 + +![Taskweaver](../../../translated_images/taskweaver.png?WT.c5d336793941a5af0d2489ad6d88a03f09557bd5ca68a954f1ddaa3d9f1ecc3b.zh.mc_id=academic-105485-koreyst) + +这是一个处理异常检测的插件示例: + +```python +class AnomalyDetectionPlugin(Plugin): def __call__(self, df: pd.DataFrame, time_col_name: str, value_col_name: str): +``` + +在执行之前会验证代码。Taskweaver中管理上下文的另一个功能是`experience`. Experience allows for the context of a conversation to be stored over to the long term in a YAML file. This can be configured so that the LLM improves over time on certain tasks given that it is exposed to prior conversations. + +## JARVIS + +The last agent framework we will explore is [JARVIS](https://github.com/microsoft/JARVIS?tab=readme-ov-file?WT.mc_id=academic-105485-koreyst). What makes JARVIS unique is that it uses an LLM to manage the `state`对话和`tools`是其他AI模型。每个AI模型都是专门的模型,执行特定任务,如对象检测、转录或图像描述。 + +![JARVIS](../../../translated_images/jarvis.png?WT.f12468c52a0c4848aeed51606a0e53a36eb38c65cc6c821597ea4dcaad03d1a3.zh.mc_id=academic-105485-koreyst) + +LLM作为通用模型,接收用户的请求,并识别完成任务所需的特定任务和任何参数/数据。 + +```python +[{"task": "object-detection", "id": 0, "dep": [-1], "args": {"image": "e1.jpg" }}] +``` + +然后LLM以专用AI模型可以解释的方式格式化请求,例如JSON。一旦AI模型根据任务返回其预测,LLM接收响应。 + +如果需要多个模型来完成任务,它还将解释这些模型的响应,然后将它们结合起来生成对用户的响应。 + +下面的示例显示了当用户请求图像中对象的描述和计数时,这将如何工作: + +## 作业 + +为了继续学习AI代理,你可以使用AutoGen构建: + +- 一个模拟教育初创公司不同部门的商务会议的应用程序。 +- 创建系统消息,引导LLM理解不同的角色和优先级,并使用户能够推销新的产品理念。 +- 然后,LLM应该生成每个部门的后续问题,以完善和改进推销和产品理念。 + +## 学习不止于此,继续旅程 + +完成本课后,请查看我们的[生成式AI学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst),继续提升你的生成式AI知识! + +**免责声明**: +本文件使用基于机器的人工智能翻译服务进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始文件的母语版本视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/18-fine-tuning/README.md b/translations/zh/18-fine-tuning/README.md new file mode 100644 index 000000000..941420792 --- /dev/null +++ b/translations/zh/18-fine-tuning/README.md @@ -0,0 +1,100 @@ +[![开源模型](../../../translated_images/18-lesson-banner.png?WT.73626ba24f59a39704c5137a18c9de8b23179ea0e1ace42c97e02f0310adcee0.zh.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson18-gh?WT.mc_id=academic-105485-koreyst) + +# 微调您的大型语言模型 + +使用大型语言模型来构建生成式AI应用程序带来了新的挑战。一个关键问题是确保模型对用户请求生成的内容的响应质量(准确性和相关性)。在之前的课程中,我们讨论了通过_修改现有模型的提示输入_来解决问题的技术,如提示工程和检索增强生成。 + +在今天的课程中,我们讨论第三种技术,**微调**,它通过_用额外的数据重新训练模型本身_来解决这个挑战。让我们深入了解细节。 + +## 学习目标 + +本课程介绍了预训练语言模型的微调概念,探讨了这种方法的优缺点,并提供了何时以及如何使用微调来提高生成式AI模型性能的指导。 + +在本课程结束时,您应该能够回答以下问题: + +- 什么是语言模型的微调? +- 微调何时以及为何有用? +- 我如何微调一个预训练模型? +- 微调的局限性是什么? + +准备好了吗?让我们开始吧。 + +## 插图指南 + +想在深入学习之前了解我们将要覆盖的内容吗?查看这个插图指南,它描述了本课程的学习旅程——从学习微调的核心概念和动机,到理解执行微调任务的过程和最佳实践。这是一个值得探索的有趣话题,所以不要忘记查看[资源](./RESOURCES.md?WT.mc_id=academic-105485-koreyst)页面以获取更多支持您自学的链接! + +![语言模型微调插图指南](../../../translated_images/18-fine-tuning-sketchnote.png?WT.6cca0798e805b67b1f22beaba7478f40066f3a2879380a0e27dbc70ac1dc7832.zh.mc_id=academic-105485-koreyst) + +## 什么是语言模型的微调? + +从定义上讲,大型语言模型是从包括互联网在内的多种来源的大量文本中_预训练_的。正如我们在之前的课程中所了解到的,我们需要诸如_提示工程_和_检索增强生成_之类的技术来提高模型对用户问题(“提示”)的响应质量。 + +一种流行的提示工程技术是通过提供_指令_(明确指导)或_给出几个示例_(隐性指导)来为模型提供更多关于期望响应的指导。这被称为_少样本学习_,但它有两个限制: + +- 模型的token限制可能会限制您可以提供的示例数量,并限制其有效性。 +- 模型的token成本可能会使每个提示添加示例变得昂贵,并限制灵活性。 + +微调是机器学习系统中一种常见的做法,我们采用一个预训练模型并用新数据重新训练它,以提高其在特定任务上的性能。在语言模型的背景下,我们可以通过_为给定任务或应用领域准备的一组示例_微调预训练模型,以创建一个可能对该特定任务或领域更准确和相关的**自定义模型**。微调的一个附带好处是它还可以减少少样本学习所需的示例数量,从而减少token使用和相关成本。 + +## 何时以及为何我们应该微调模型? + +在_这个_背景下,当我们谈论微调时,我们指的是**监督**微调,其中通过**添加新数据**(这些数据不属于原始训练数据集)来进行重新训练。这不同于无监督微调方法,后者是在原始数据上重新训练模型,但使用不同的超参数。 + +需要记住的关键是,微调是一种高级技术,需要一定水平的专业知识才能获得预期的结果。如果操作不当,可能无法提供预期的改进,甚至可能降低目标领域模型的性能。 + +因此,在您学习“如何”微调语言模型之前,您需要知道“为什么”您应该选择这条路线,以及“何时”开始微调过程。首先问自己这些问题: + +- **用例**:您的微调_用例_是什么?您希望改进当前预训练模型的哪个方面? +- **替代方案**:您是否尝试过_其他技术_来实现预期结果?使用它们创建一个比较基线。 + - 提示工程:尝试使用相关提示响应示例的少样本提示技术。评估响应质量。 + - 检索增强生成:尝试通过检索您的数据进行查询结果增强提示。评估响应质量。 +- **成本**:您是否确定了微调的成本? + - 可调性——预训练模型是否可供微调? + - 努力——准备训练数据、评估和改进模型的努力。 + - 计算——运行微调作业和部署微调模型的计算。 + - 数据——访问足够质量的示例以实现微调影响。 +- **好处**:您是否确认了微调的好处? + - 质量——微调模型是否优于基线? + - 成本——通过简化提示是否减少了token使用? + - 可扩展性——您能否将基础模型重新用于新领域? + +通过回答这些问题,您应该能够决定微调是否是您用例的正确方法。理想情况下,只有当收益超过成本时,该方法才是有效的。一旦您决定继续,就该考虑_如何_微调预训练模型。 + +想获得更多关于决策过程的见解吗?观看[是否要微调](https://www.youtube.com/watch?v=0Jo-z-MFxJs) + +## 我们如何微调一个预训练模型? + +要微调一个预训练模型,您需要具备: + +- 一个要微调的预训练模型 +- 一个用于微调的数据集 +- 一个运行微调作业的训练环境 +- 一个部署微调模型的托管环境 + +## 微调实战 + +以下资源提供了逐步教程,引导您通过使用精选模型和精心准备的数据集的真实示例。要完成这些教程,您需要在特定提供商处拥有一个账户,并访问相关模型和数据集。 + +| 提供商 | 教程 | 描述 | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| OpenAI | [如何微调聊天模型](https://github.com/openai/openai-cookbook/blob/main/examples/How_to_finetune_chat_models.ipynb?WT.mc_id=academic-105485-koreyst) | 学习如何通过准备训练数据、运行微调作业以及使用微调模型进行推理来微调一个`gpt-35-turbo`以适应特定领域(“食谱助手”)。 | +| Azure OpenAI | [GPT 3.5 Turbo 微调教程](https://learn.microsoft.com/azure/ai-services/openai/tutorials/fine-tune?tabs=python-new%2Ccommand-line?WT.mc_id=academic-105485-koreyst) | 学习如何通过采取步骤创建和上传训练数据、运行微调作业来**在Azure上**微调一个`gpt-35-turbo-0613`模型。部署并使用新模型。 | +| Hugging Face | [使用Hugging Face微调LLM](https://www.philschmid.de/fine-tune-llms-in-2024-with-trl?WT.mc_id=academic-105485-koreyst) | 这篇博文引导您使用[transformers](https://huggingface.co/docs/transformers/index?WT.mc_id=academic-105485-koreyst)库和[Transformer Reinforcement Learning (TRL)](https://huggingface.co/docs/trl/index?WT.mc_id=academic-105485-koreyst])以及开放数据集在Hugging Face上微调一个_开放LLM_(例如:`CodeLlama 7B`)。 | +| | | | +| 🤗 AutoTrain | [使用AutoTrain微调LLM](https://github.com/huggingface/autotrain-advanced/?WT.mc_id=academic-105485-koreyst) | AutoTrain(或AutoTrain Advanced)是由Hugging Face开发的一个python库,允许对许多不同任务进行微调,包括LLM微调。AutoTrain是一种无代码解决方案,微调可以在您自己的云中、Hugging Face Spaces上或本地完成。它支持基于Web的GUI、CLI和通过yaml配置文件进行的训练。 | +| | | | + +## 作业 + +选择上面的一个教程并完成它们。_我们可能会在这个repo中以Jupyter Notebooks的形式复制这些教程的一个版本,仅供参考。请直接使用原始来源以获取最新版本_。 + +## 干得好!继续学习。 + +完成本课程后,请查看我们的[生成式AI学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst),继续提升您的生成式AI知识! + +恭喜!!您已完成本课程v2系列的最后一课!不要停止学习和构建。**查看[资源](RESOURCES.md?WT.mc_id=academic-105485-koreyst)页面,获取仅针对该主题的额外建议列表。 + +我们的v1系列课程也已更新了更多的作业和概念。因此,花点时间刷新您的知识——并请[分享您的问题和反馈](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst),以帮助我们为社区改进这些课程。 + +**免责声明**: +本文件是使用机器翻译服务翻译的。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始文件的母语版本视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/18-fine-tuning/RESOURCES.md b/translations/zh/18-fine-tuning/RESOURCES.md new file mode 100644 index 000000000..93386be0f --- /dev/null +++ b/translations/zh/18-fine-tuning/RESOURCES.md @@ -0,0 +1,40 @@ +# 自主学习资源 + +本课程使用了来自 OpenAI 和 Azure OpenAI 的核心资源作为术语和教程的参考。以下是一个非详尽的列表,供您在自主学习旅程中使用。 + +## 1. 主要资源 + +| 标题/链接 | 描述 | +| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [使用 OpenAI 模型进行微调](https://platform.openai.com/docs/guides/fine-tuning?WT.mc_id=academic-105485-koreyst) | 微调通过在比提示中能容纳的更多示例上进行训练来改进少样本学习,从而节省成本,提高响应质量,并实现低延迟请求。**从 OpenAI 获取微调概述。** | +| [Azure OpenAI 的微调是什么?](https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations#what-is-fine-tuning-with-azure-openai?WT.mc_id=academic-105485-koreyst) | 了解 **微调是什么(概念)**,为什么你应该关注它(动机问题),使用什么数据(训练)以及如何衡量质量 | +| [通过微调自定义模型](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython&pivots=programming-language-studio#continuous-fine-tuning?WT.mc_id=academic-105485-koreyst) | Azure OpenAI 服务让您可以使用微调根据个人数据集定制我们的模型。学习如何使用 Azure AI Studio、Python SDK 或 REST API **微调(过程)**选择模型。 | +| [LLM 微调建议](https://learn.microsoft.com/ai/playbook/technology-guidance/generative-ai/working-with-llms/fine-tuning-recommend?WT.mc_id=academic-105485-koreyst) | LLM 在特定领域、任务或数据集上的表现可能不佳,或者可能产生不准确或误导性的输出。**何时应该考虑微调**作为对此的可能解决方案? | +| [持续微调](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython&pivots=programming-language-studio#continuous-fine-tuning?WT.mc_id=academic-105485-koreyst) | 持续微调是一个迭代过程,它选择一个已经微调的模型作为基础模型,并在新的训练示例集上**进一步微调**。 | +| [微调和函数调用](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning-functions?WT.mc_id=academic-105485-koreyst) | 使用函数调用示例对模型进行微调可以通过获得更准确和一致的输出来改进模型输出——具有类似格式的响应和成本节约 | +| [微调模型:Azure OpenAI 指导](https://learn.microsoft.com/azure/ai-services/openai/concepts/models#fine-tuning-models?WT.mc_id=academic-105485-koreyst) | 查阅此表以了解 **哪些模型可以在 Azure OpenAI 中进行微调**,以及这些模型在哪些地区可用。如有需要,查阅它们的令牌限制和训练数据过期日期。 | +| [微调还是不微调?这是个问题](https://learn.microsoft.com/shows/ai-show/to-fine-tune-or-not-fine-tune-that-is-the-question?WT.mc_id=academic-105485-koreyst) | 这个 **2023 年 10 月** 的 AI Show 讨论了帮助您做出决策的优点、缺点和实用见解。 | +| [LLM 微调入门](https://learn.microsoft.com/ai/playbook/technology-guidance/generative-ai/working-with-llms/fine-tuning?WT.mc_id=academic-105485-koreyst) | 这个 **AI Playbook** 资源引导您了解数据要求、格式化、超参数微调以及您应该知道的挑战/限制。 | +| **教程**: [Azure OpenAI GPT3.5 Turbo 微调](https://learn.microsoft.com/azure/ai-services/openai/tutorials/fine-tune?tabs=python%2Ccommand-line?WT.mc_id=academic-105485-koreyst) | 学习创建一个示例微调数据集,为微调做好准备,创建一个微调任务,并在 Azure 上部署微调后的模型。 | +| **教程**: [在 Azure AI Studio 中微调 Llama 2 模型](https://learn.microsoft.com/azure/ai-studio/how-to/fine-tune-model-llama?WT.mc_id=academic-105485-koreyst) | Azure AI Studio 让您可以使用适合低代码开发人员的 UI 工作流,根据个人数据集定制大型语言模型。查看此示例。 | +| **教程**:[在 Azure 上为单个 GPU 微调 Hugging Face 模型](https://learn.microsoft.com/azure/databricks/machine-learning/train-model/huggingface/fine-tune-model?WT.mc_id=academic-105485-koreyst) | 本文描述了如何使用 Hugging Face transformers 库在单个 GPU 上使用 Azure DataBricks + Hugging Face Trainer 库微调 Hugging Face 模型。 | +| **训练**:[使用 Azure 机器学习微调基础模型](https://learn.microsoft.com/training/modules/finetune-foundation-model-with-azure-machine-learning/?WT.mc_id=academic-105485-koreyst) | Azure 机器学习中的模型目录提供了许多开源模型,您可以针对特定任务进行微调。尝试此模块,该模块来自 [AzureML 生成式 AI 学习路径](https://learn.microsoft.com/training/paths/work-with-generative-models-azure-machine-learning/?WT.mc_id=academic-105485-koreyst) | +| **教程**: [Azure OpenAI 微调](https://docs.wandb.ai/guides/integrations/azure-openai-fine-tuning?WT.mc_id=academic-105485-koreyst) | 在 Microsoft Azure 上使用 W&B 微调 GPT-3.5 或 GPT-4 模型,可以详细跟踪和分析模型性能。本指南扩展了 OpenAI 微调指南中的概念,并提供了适用于 Azure OpenAI 的具体步骤和功能。 | +| | | + +## 2. 次要资源 + +本节包含了一些值得探索的附加资源,但我们在本课程中没有时间涵盖这些资源。它们可能会在将来的课程中涉及,或作为次要作业选项。现在,您可以使用它们来构建您在此主题上的专业知识和知识。 + +| 标题/链接 | 描述 | +| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **OpenAI Cookbook**: [聊天模型微调的数据准备和分析](https://cookbook.openai.com/examples/chat_finetuning_data_prep?WT.mc_id=academic-105485-koreyst) | 这个笔记本作为一个工具来预处理和分析用于微调聊天模型的聊天数据集。它检查格式错误,提供基本统计数据,并估算微调成本的令牌数量。请参阅:[gpt-3.5-turbo 的微调方法](https://platform.openai.com/docs/guides/fine-tuning?WT.mc_id=academic-105485-koreyst)。 | +| **OpenAI Cookbook**: [使用 Qdrant 进行检索增强生成(RAG)的微调](https://cookbook.openai.com/examples/fine-tuned_qa/ft_retrieval_augmented_generation_qdrant?WT.mc_id=academic-105485-koreyst) | 本笔记本的目的是通过一个全面的示例来演示如何为检索增强生成(RAG)微调 OpenAI 模型。我们还将集成 Qdrant 和少样本学习,以提高模型性能并减少虚构内容。 | +| **OpenAI Cookbook**: [使用 Weights & Biases 微调 GPT](https://cookbook.openai.com/examples/third_party/gpt_finetuning_with_wandb?WT.mc_id=academic-105485-koreyst) | Weights & Biases (W&B) 是一个 AI 开发者平台,提供训练模型、微调模型和利用基础模型的工具。首先阅读他们的 [OpenAI 微调](https://docs.wandb.ai/guides/integrations/openai?WT.mc_id=academic-105485-koreyst) 指南,然后尝试 Cookbook 练习。 | +| **社区教程** [Phinetuning 2.0](https://huggingface.co/blog/g-ronimo/phinetuning?WT.mc_id=academic-105485-koreyst) - 小型语言模型的微调 | 了解 [Phi-2](https://www.microsoft.com/research/blog/phi-2-the-surprising-power-of-small-language-models/?WT.mc_id=academic-105485-koreyst),这是 Microsoft 的新小型模型,功能强大且紧凑。本教程将指导您如何微调 Phi-2,展示如何构建一个独特的数据集并使用 QLoRA 微调模型。 | +| **Hugging Face 教程** [如何在 2024 年使用 Hugging Face 微调 LLMs](https://www.philschmid.de/fine-tune-llms-in-2024-with-trl?WT.mc_id=academic-105485-koreyst) | 这篇博客文章引导您如何使用 Hugging Face TRL、Transformers 和数据集在 2024 年微调开放的 LLMs。您需要定义一个用例,设置开发环境,准备数据集,微调模型,测试评估,然后将其部署到生产环境。 | +| **Hugging Face: [AutoTrain Advanced](https://github.com/huggingface/autotrain-advanced?WT.mc_id=academic-105485-koreyst)** | 提供更快和更简单的[最先进的机器学习模型](https://twitter.com/abhi1thakur/status/1755167674894557291?WT.mc_id=academic-105485-koreyst) 的训练和部署。该仓库有适合 Colab 的教程,并提供 YouTube 视频指导,用于微调。**反映最近的 [local-first](https://twitter.com/abhi1thakur/status/1750828141805777057?WT.mc_id=academic-105485-koreyst) 更新**。阅读 [AutoTrain 文档](https://huggingface.co/autotrain?WT.mc_id=academic-105485-koreyst) | +| | | + +**免责声明**: +本文件使用机器翻译服务进行了翻译。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。应将原文档视为权威来源。对于关键信息,建议进行专业人工翻译。对于因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/19-slm/README.md b/translations/zh/19-slm/README.md new file mode 100644 index 000000000..82fbcbe5a --- /dev/null +++ b/translations/zh/19-slm/README.md @@ -0,0 +1,134 @@ +```markdown +# 初学者生成式AI的小型语言模型介绍 + +生成式AI是人工智能的一个迷人领域,专注于创建能够生成新内容的系统。这些内容可以从文本和图像到音乐,甚至是整个虚拟环境。生成式AI最令人兴奋的应用之一是在语言模型领域。 + +## 什么是小型语言模型? + +小型语言模型(SLM)代表了大型语言模型(LLM)的缩小版,利用了许多LLM的架构原则和技术,同时表现出显著减少的计算占用。SLM是设计用来生成类人文本的语言模型的一个子集。与其更大的对手,如GPT-4不同,SLM更加紧凑和高效,使其在计算资源有限的应用中理想。尽管它们的规模较小,它们仍能执行多种任务。通常,SLM通过压缩或蒸馏LLM构建,旨在保留原始模型功能和语言能力的很大一部分。这种模型规模的减少降低了整体复杂性,使SLM在内存使用和计算要求方面更加高效。尽管进行了这些优化,SLM仍能执行广泛的自然语言处理(NLP)任务: + +- 文本生成:创建连贯且上下文相关的句子或段落。 +- 文本补全:根据给定的提示预测和补全句子。 +- 翻译:将文本从一种语言转换为另一种语言。 +- 摘要:将长篇文本压缩为更简洁易懂的摘要。 + +尽管与其更大的对手相比,在性能或理解深度上有一些权衡。 + +## 小型语言模型如何工作? + +SLM是在大量文本数据上训练的。在训练期间,它们学习语言的模式和结构,使它们能够生成既语法正确又上下文适当的文本。训练过程包括: + +- 数据收集:从各种来源收集大量文本数据。 +- 预处理:清理和组织数据以适合训练。 +- 训练:使用机器学习算法教模型如何理解和生成文本。 +- 微调:调整模型以提高其在特定任务上的性能。 + +SLM的发展符合在资源受限环境中部署模型的日益增长的需求,例如移动设备或边缘计算平台,在这些平台上,由于资源需求较高,全规模的LLM可能不切实际。通过专注于效率,SLM在性能和可访问性之间取得平衡,使其能够在各个领域中更广泛地应用。 + +![slm](../../../translated_images/slm.png?WT.85221b66c3ce1b5e21e84c783c7ba31848501cd5c9557bb7fdf13173edafd675.zh.mc_id=academic-105485-koreyst) + +## 学习目标 + +在本课中,我们希望介绍SLM的知识,并结合微软Phi-3学习文本内容、视觉和MoE的不同场景。到本课结束时,你应该能够回答以下问题: + +- 什么是SLM +- SLM和LLM有什么区别 +- 什么是微软Phi-3/3.5系列 +- 如何推理微软Phi-3/3.5系列 + +准备好了吗?让我们开始吧。 + +## 大型语言模型(LLM)和小型语言模型(SLM)之间的区别 + +LLM和SLM都建立在概率机器学习的基础原则之上,在其架构设计、训练方法、数据生成过程和模型评估技术上采用类似的方法。然而,有几个关键因素区分了这两种类型的模型。 + +## 小型语言模型的应用 + +SLM有广泛的应用,包括: + +- 聊天机器人:以对话方式提供客户支持并与用户互动。 +- 内容创作:通过生成创意甚至撰写整篇文章来协助作家。 +- 教育:帮助学生完成写作作业或学习新语言。 +- 可访问性:为残障人士创建工具,如文本转语音系统。 + +**规模** + +LLM和SLM之间的一个主要区别在于模型的规模。LLM,例如ChatGPT(GPT-4),可以包含大约1.76万亿个参数,而开源SLM如Mistral 7B则设计有显著更少的参数——大约70亿个。这种差异主要是由于模型架构和训练过程的不同。例如,ChatGPT在编码器-解码器框架中使用自注意机制,而Mistral 7B使用滑动窗口注意机制,这使得在仅解码器模型中更高效地训练。这种架构差异对这些模型的复杂性和性能有深远影响。 + +**理解** + +SLM通常为特定领域的性能进行了优化,使其高度专业化,但在提供跨多个知识领域的广泛上下文理解方面可能有限。相比之下,LLM旨在模拟更全面的人类智能。LLM在庞大、多样化的数据集上进行训练,设计上可以在各种领域中表现良好,提供更大的多功能性和适应性。因此,LLM更适合于更广泛的下游任务,如自然语言处理和编程。 + +**计算** + +LLM的训练和部署是资源密集型过程,通常需要显著的计算基础设施,包括大规模GPU集群。例如,从头开始训练像ChatGPT这样的模型可能需要数千个GPU和长时间的训练。相比之下,SLM由于参数较少,在计算资源方面更易于访问。像Mistral 7B这样的模型可以在配备适度GPU能力的本地机器上进行训练和运行,尽管训练仍需要在多个GPU上花费数小时。 + +**偏见** + +偏见是LLM的一个已知问题,主要是由于训练数据的性质。这些模型通常依赖于来自互联网的原始、公开可用的数据,这些数据可能会低估或误导某些群体,引入错误的标记,或反映受方言、地理变异和语法规则影响的语言偏见。此外,LLM架构的复杂性可能会无意中加剧偏见,如果没有仔细的微调,这种偏见可能会被忽视。另一方面,SLM由于在更受限、领域特定的数据集上进行训练,本质上对这种偏见不太敏感,尽管它们也不是完全免疫的。 + +**推理** + +SLM的规模较小使其在推理速度方面具有显著优势,允许它们在本地硬件上高效生成输出,而无需广泛的并行处理。相比之下,LLM由于其规模和复杂性,通常需要大量的并行计算资源才能实现可接受的推理时间。当在大规模部署时,多个并发用户的存在进一步减慢了LLM的响应时间。 + +总之,虽然LLM和SLM在机器学习上有共同的基础,但在模型规模、资源需求、上下文理解、偏见的易感性和推理速度方面有显著差异。这些区别反映了它们在不同用例中的适用性,LLM更具多功能性但资源密集,而SLM在领域特定效率方面提供了更少的计算需求。 + +***注意:在本章中,我们将以微软Phi-3 / 3.5为例介绍SLM。*** + +## 介绍Phi-3 / Phi-3.5系列 + +Phi-3 / 3.5系列主要针对文本、视觉和代理(MoE)应用场景: + +### Phi-3 / 3.5 指导 + +主要用于文本生成、聊天完成和内容信息提取等。 + +**Phi-3-mini** + +3.8B语言模型可在Microsoft Azure AI Studio、Hugging Face和Ollama上使用。Phi-3模型在关键基准测试中显著超越相同和更大规模的语言模型(参见下面的基准测试数据,数字越高越好)。Phi-3-mini在规模上超过了比它大两倍的模型,而Phi-3-small和Phi-3-medium则超过了更大的模型,包括GPT-3.5。 + +**Phi-3-small & medium** + +仅凭70亿个参数,Phi-3-small在各种语言、推理、编码和数学基准测试中击败了GPT-3.5T。具有140亿个参数的Phi-3-medium继续这一趋势,并超过了Gemini 1.0 Pro。 + +**Phi-3.5-mini** + +我们可以将其视为Phi-3-mini的升级版。虽然参数保持不变,但它提高了对多种语言的支持能力(支持20多种语言:阿拉伯语、中文、捷克语、丹麦语、荷兰语、英语、芬兰语、法语、德语、希伯来语、匈牙利语、意大利语、日语、韩语、挪威语、波兰语、葡萄牙语、俄语、西班牙语、瑞典语、泰语、土耳其语、乌克兰语)并增加了对长上下文的更强支持。Phi-3.5-mini以3.8B参数超越了相同规模的语言模型,并与规模两倍的模型相当。 + +### Phi-3 / 3.5 视觉 + +我们可以将Phi-3/3.5的指导模型视为Phi的理解能力,而视觉则赋予Phi理解世界的眼睛。 + +**Phi-3-Vision** + +Phi-3-vision仅有4.2B参数,继续这一趋势,在一般视觉推理任务、OCR、表格和图表理解任务中超过了更大的模型,如Claude-3 Haiku和Gemini 1.0 Pro V。 + +**Phi-3.5-Vision** + +Phi-3.5-Vision也是Phi-3-Vision的升级版,增加了对多张图像的支持。你可以将其视为视觉的改进,不仅可以看到图片,还可以看到视频。Phi-3.5-vision在OCR、表格和图表理解任务中超过了更大的模型,如Claude-3.5 Sonnet和Gemini 1.5 Flash,并在一般视觉知识推理任务中表现相当。支持多帧输入,即对多个输入图像进行推理。 + +### Phi-3.5-MoE + +***专家混合(MoE)***使模型可以用更少的计算进行预训练,这意味着可以在与密集模型相同的计算预算下显著扩大模型或数据集的规模。特别是,MoE模型在预训练期间应该比其密集对手更快地达到相同的质量。Phi-3.5-MoE包含16x3.8B专家模块。Phi-3.5-MoE仅用6.6B活跃参数实现了与更大模型相当的推理、语言理解和数学水平。 + +我们可以根据不同场景使用Phi-3/3.5系列模型。与LLM不同,你可以在边缘设备上部署Phi-3/3.5-mini或Phi-3/3.5-Vision。 + +## 如何使用Phi-3/3.5系列模型 + +我们希望在不同场景中使用Phi-3/3.5。接下来,我们将在不同场景中使用Phi-3/3.5。 + +![phi3](../../../translated_images/phi3.png?WT.0d1077c4470f7b6eef536aba4426fa8df26762844164cc3883d455ab5251bad1.zh.mc_id=academic-105485-koreyst) + +### 推理差异 + +云的API + +**GitHub模型** + +GitHub模型 +``` + + + +**免责声明**: +本文件使用基于机器的人工智能翻译服务进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始文件的母语版本视为权威来源。对于关键信息,建议进行专业的人类翻译。对于因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/20-mistral/README.md b/translations/zh/20-mistral/README.md new file mode 100644 index 000000000..6363d1b7c --- /dev/null +++ b/translations/zh/20-mistral/README.md @@ -0,0 +1,347 @@ +# 使用 Mistral 模型构建 + +## 简介 + +本课将涵盖: +- 探索不同的 Mistral 模型 +- 了解每个模型的使用场景和案例 +- 代码示例展示每个模型的独特功能 + +## Mistral 模型 + +在本课中,我们将探索三种不同的 Mistral 模型:**Mistral Large**、**Mistral Small** 和 **Mistral Nemo**。 + +这些模型都可以在 Github Model marketplace 免费获取。本笔记本中的代码将使用这些模型来运行代码。有关使用 Github Models [构建 AI 模型原型](https://docs.github.com/en/github-models/prototyping-with-ai-models?WT.mc_id=academic-105485-koreyst)的更多详细信息,请参阅。 + +## Mistral Large 2 (2407) +Mistral Large 2 是目前 Mistral 的旗舰模型,专为企业使用而设计。 + +该模型是对原始 Mistral Large 的升级,提供了: +- 更大的上下文窗口 - 128k 对比 32k +- 更好的数学和编码任务性能 - 平均准确率 76.9% 对比 60.4% +- 增强的多语言性能 - 包括语言:英语、法语、德语、西班牙语、意大利语、葡萄牙语、荷兰语、俄语、中文、日语、韩语、阿拉伯语和印地语。 + +凭借这些功能,Mistral Large 在以下方面表现出色: +- *增强检索生成 (RAG)* - 由于更大的上下文窗口 +- *函数调用* - 此模型具有本地函数调用功能,允许与外部工具和 API 集成。这些调用可以并行进行,也可以按顺序一个接一个进行。 +- *代码生成* - 该模型在 Python、Java、TypeScript 和 C++ 生成方面表现出色。 + +### 使用 Mistral Large 2 的 RAG 示例 + +在此示例中,我们使用 Mistral Large 2 对文本文档运行 RAG 模式。问题用韩语书写,询问作者在上大学前的活动。 + +它使用 Cohere Embeddings Model 来创建文本文档以及问题的嵌入。对于此示例,它使用 faiss Python 包作为向量存储。 + +发送到 Mistral 模型的提示包括问题和与问题相似的检索块。然后,模型提供自然语言响应。 + +```python +pip install faiss-cpu +``` + +```python +import requests +import numpy as np +import faiss +import os + +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential +from azure.ai.inference import EmbeddingsClient + +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-large" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = requests.get('https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt') +text = response.text + +chunk_size = 2048 +chunks = [text[i:i + chunk_size] for i in range(0, len(text), chunk_size)] +len(chunks) + +embed_model_name = "cohere-embed-v3-multilingual" + +embed_client = EmbeddingsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token) +) + +embed_response = embed_client.embed( + input=chunks, + model=embed_model_name +) + + + +text_embeddings = [] +for item in embed_response.data: + length = len(item.embedding) + text_embeddings.append(item.embedding) +text_embeddings = np.array(text_embeddings) + + +d = text_embeddings.shape[1] +index = faiss.IndexFlatL2(d) +index.add(text_embeddings) + +question = "저자가 대학에 오기 전에 주로 했던 두 가지 일은 무엇이었나요??" + +question_embedding = embed_client.embed( + input=[question], + model=embed_model_name +) + +question_embeddings = np.array(question_embedding.data[0].embedding) + + +D, I = index.search(question_embeddings.reshape(1, -1), k=2) # distance, index +retrieved_chunks = [chunks[i] for i in I.tolist()[0]] + +prompt = f""" +Context information is below. +--------------------- +{retrieved_chunks} +--------------------- +Given the context information and not prior knowledge, answer the query. +Query: {question} +Answer: +""" + + +chat_response = client.complete( + messages=[ + SystemMessage(content="You are a helpful assistant."), + UserMessage(content=prompt), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(chat_response.choices[0].message.content) +``` + +## Mistral Small +Mistral Small 是 Mistral 模型家族中另一款顶级/企业类别的模型。顾名思义,该模型是一个小型语言模型 (SLM)。使用 Mistral Small 的优点是: +- 相较于 Mistral LLMs 如 Mistral Large 和 NeMo 节省成本 - 价格下降 80% +- 低延迟 - 与 Mistral 的 LLMs 相比响应更快 +- 灵活性 - 可以在不同环境中部署,对所需资源的限制较少。 + +Mistral Small 非常适合: +- 基于文本的任务,如摘要、情感分析和翻译。 +- 由于其成本效益,在频繁请求的应用程序中使用 +- 低延迟代码任务,如代码审查和建议 + +## 比较 Mistral Small 和 Mistral Large + +为了显示 Mistral Small 和 Large 之间的延迟差异,请运行以下单元格。 + +你应该能看到响应时间在 3-5 秒之间的差异。还请注意相同提示的响应长度和风格。 + +```python + +import os +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-small" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage(content="You are a helpful coding assistant."), + UserMessage(content="Can you write a Python function to the fizz buzz test?"), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(response.choices[0].message.content) + +``` + +```python + +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential + +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-large" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage(content="You are a helpful coding assistant."), + UserMessage(content="Can you write a Python function to the fizz buzz test?"), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(response.choices[0].message.content) + +``` + +## Mistral NeMo + +与本课中讨论的其他两个模型相比,Mistral NeMo 是唯一一个拥有 Apache2 许可证的免费模型。 + +它被视为 Mistral 早期开源 LLM Mistral 7B 的升级版。 + +NeMo 模型的一些其他功能包括: + +- *更高效的分词:* 该模型使用 Tekken 分词器,而不是更常用的 tiktoken。这使得它在更多语言和代码上表现更好。 + +- *微调:* 基础模型可用于微调。这为需要微调的使用场景提供了更多的灵活性。 + +- *本地函数调用* - 像 Mistral Large 一样,该模型经过函数调用训练。使其成为首批开源模型之一。 + +### 比较分词器 + +在此示例中,我们将查看 Mistral NeMo 如何处理分词与 Mistral Large 相比。 + +两个示例使用相同的提示,但你应该看到 NeMo 返回的标记比 Mistral Large 少。 + +```bash +pip install mistral-common +``` + +```python +# Import needed packages: +from mistral_common.protocol.instruct.messages import ( + UserMessage, +) +from mistral_common.protocol.instruct.request import ChatCompletionRequest +from mistral_common.protocol.instruct.tool_calls import ( + Function, + Tool, +) +from mistral_common.tokens.tokenizers.mistral import MistralTokenizer + +# Load Mistral tokenizer + +model_name = "open-mistral-nemo " + +tokenizer = MistralTokenizer.from_model(model_name) + +# Tokenize a list of messages +tokenized = tokenizer.encode_chat_completion( + ChatCompletionRequest( + tools=[ + Tool( + function=Function( + name="get_current_weather", + description="Get the current weather", + parameters={ + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "format": { + "type": "string", + "enum": ["celsius", "fahrenheit"], + "description": "The temperature unit to use. Infer this from the users location.", + }, + }, + "required": ["location", "format"], + }, + ) + ) + ], + messages=[ + UserMessage(content="What's the weather like today in Paris"), + ], + model=model_name, + ) +) +tokens, text = tokenized.tokens, tokenized.text + +# Count the number of tokens +print(len(tokens)) +``` + +```python +# Import needed packages: +from mistral_common.protocol.instruct.messages import ( + UserMessage, +) +from mistral_common.protocol.instruct.request import ChatCompletionRequest +from mistral_common.protocol.instruct.tool_calls import ( + Function, + Tool, +) +from mistral_common.tokens.tokenizers.mistral import MistralTokenizer + +# Load Mistral tokenizer + +model_name = "mistral-large-latest" + +tokenizer = MistralTokenizer.from_model(model_name) + +# Tokenize a list of messages +tokenized = tokenizer.encode_chat_completion( + ChatCompletionRequest( + tools=[ + Tool( + function=Function( + name="get_current_weather", + description="Get the current weather", + parameters={ + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "format": { + "type": "string", + "enum": ["celsius", "fahrenheit"], + "description": "The temperature unit to use. Infer this from the users location.", + }, + }, + "required": ["location", "format"], + }, + ) + ) + ], + messages=[ + UserMessage(content="What's the weather like today in Paris"), + ], + model=model_name, + ) +) +tokens, text = tokenized.tokens, tokenized.text + +# Count the number of tokens +print(len(tokens)) +``` + +## 学习不止于此,继续你的旅程 + +完成本课后,请查看我们的 [生成式 AI 学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst),继续提升你的生成式 AI 知识! + +**免责声明**: +本文件是使用机器翻译服务翻译的。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文件视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/21-meta/README.md b/translations/zh/21-meta/README.md new file mode 100644 index 000000000..b08319013 --- /dev/null +++ b/translations/zh/21-meta/README.md @@ -0,0 +1,157 @@ +# 使用Meta家族模型构建 + +## 介绍 + +本课将涵盖: + +- 探索Meta家族的两个主要模型 - Llama 3.1 和 Llama 3.2 +- 了解每个模型的使用案例和场景 +- 代码示例展示每个模型的独特特性 + +## Meta家族模型 + +在本课中,我们将探索Meta家族或“Llama Herd”中的两个模型 - Llama 3.1 和 Llama 3.2 + +这些模型有不同的变体,可以在Github Model市场上获取。这里有更多关于使用Github Models来[原型化AI模型](https://docs.github.com/en/github-models/prototyping-with-ai-models?WT.mc_id=academic-105485-koreyst)的详细信息。 + +模型变体: +- Llama 3.1 - 70B Instruct +- Llama 3.1 - 405B Instruct +- Llama 3.2 - 11B Vision Instruct +- Llama 3.2 - 90B Vision Instruct + +*注意:Llama 3也可以在Github Models上获取,但本课不涉及* + +## Llama 3.1 + +拥有4050亿参数的Llama 3.1属于开源LLM类别。 + +该模型是对早期版本Llama 3的升级,提供了: + +- 更大的上下文窗口 - 128k tokens对比8k tokens +- 更大的最大输出tokens - 4096对比2048 +- 更好的多语言支持 - 由于训练tokens的增加 + +这些使得Llama 3.1在构建GenAI应用时能够处理更复杂的用例,包括: +- 原生函数调用 - 能够调用LLM工作流之外的外部工具和函数 +- 更好的RAG性能 - 由于更高的上下文窗口 +- 合成数据生成 - 能够为诸如微调等任务创建有效的数据 + +### 原生函数调用 + +Llama 3.1经过微调后在进行函数或工具调用时更为有效。它还有两个内置工具,模型可以根据用户的提示识别需要使用这些工具。这些工具是: + +- **Brave Search** - 可用于通过网络搜索获取最新信息,如天气 +- **Wolfram Alpha** - 可用于更复杂的数学计算,因此无需自己编写函数 + +你也可以创建自己的自定义工具供LLM调用。 + +在下面的代码示例中: + +- 我们在系统提示中定义了可用的工具(brave_search, wolfram_alpha)。 +- 发送一个用户提示,询问某个城市的天气。 +- LLM将通过Brave Search工具发出一个工具调用,类似于`<|python_tag|>brave_search.call(query="Stockholm weather")` + +*注意:此示例仅进行工具调用,如果你想获取结果,需要在Brave API页面创建一个免费账户并定义函数本身` + +```python +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import AssistantMessage, SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential + +token = os.environ["GITHUB_TOKEN"] +endpoint = "https://models.inference.ai.azure.com" +model_name = "meta-llama-3.1-405b-instruct" + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + + +tool_prompt=f""" +<|begin_of_text|><|start_header_id|>system<|end_header_id|> + +Environment: ipython +Tools: brave_search, wolfram_alpha +Cutting Knowledge Date: December 2023 +Today Date: 23 July 2024 + +You are a helpful assistant<|eot_id|> +""" + +messages = [ + SystemMessage(content=tool_prompt), + UserMessage(content="What is the weather in Stockholm?"), + +] + +response = client.complete(messages=messages, model=model_name) + +print(response.choices[0].message.content) +``` + +## Llama 3.2 + +尽管是一个LLM,Llama 3.1的一个限制是多模态性。即能够使用不同类型的输入(如图像)作为提示并提供响应。这种能力是Llama 3.2的主要特性之一。这些特性还包括: + +- 多模态性 - 能够评估文本和图像提示 +- 小到中等大小的变体(11B和90B) - 提供灵活的部署选项 +- 仅文本变体(1B和3B) - 允许模型部署在边缘/移动设备上,并提供低延迟 + +多模态支持代表了开源模型世界中的一大进步。下面的代码示例同时接收图像和文本提示,以从Llama 3.2 90B中获取图像分析。 + +### Llama 3.2的多模态支持 + +```python +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import ( + SystemMessage, + UserMessage, + TextContentItem, + ImageContentItem, + ImageUrl, + ImageDetailLevel, +) +from azure.core.credentials import AzureKeyCredential + +token = os.environ["GITHUB_TOKEN"] +endpoint = "https://models.inference.ai.azure.com" +model_name = "Llama-3.2-90B-Vision-Instruct" + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage( + content="You are a helpful assistant that describes images in details." + ), + UserMessage( + content=[ + TextContentItem(text="What's in this image?"), + ImageContentItem( + image_url=ImageUrl.load( + image_file="sample.jpg", + image_format="jpg", + detail=ImageDetailLevel.LOW) + ), + ], + ), + ], + model=model_name, +) + +print(response.choices[0].message.content) +``` + +## 学习不会止步于此,继续探索之旅 + +完成本课后,请查看我们的[生成式AI学习合集](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst),继续提升你的生成式AI知识! + +**免责声明**: +本文档是使用机器翻译服务翻译的。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原文档视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用此翻译而产生的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/CODE_OF_CONDUCT.md b/translations/zh/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..07949b1d2 --- /dev/null +++ b/translations/zh/CODE_OF_CONDUCT.md @@ -0,0 +1,12 @@ +# Microsoft 开源行为准则 + +此项目采用了 [Microsoft 开源行为准则](https://opensource.microsoft.com/codeofconduct/)。 + +资源: + +- [Microsoft 开源行为准则](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft 行为准则常见问题](https://opensource.microsoft.com/codeofconduct/faq/) +- 如有疑问或顾虑,请联系 [opencode@microsoft.com](mailto:opencode@microsoft.com) + +**免责声明**: +本文档是使用机器翻译服务翻译的。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文档视为权威来源。对于关键信息,建议使用专业人工翻译。我们不对因使用本翻译而产生的任何误解或误读承担责任。 \ No newline at end of file diff --git a/translations/zh/CONTRIBUTING.md b/translations/zh/CONTRIBUTING.md new file mode 100644 index 000000000..464052305 --- /dev/null +++ b/translations/zh/CONTRIBUTING.md @@ -0,0 +1,125 @@ +# 贡献指南 + +本项目欢迎各种贡献和建议。大多数贡献需要您同意贡献者许可协议 (CLA),声明您有权利并实际授予我们使用您贡献的权利。详情请访问 。 + +> 重要提示:在翻译此库中的文本时,请确保不使用机器翻译。我们将通过社区验证翻译,因此请仅在您精通的语言中自愿进行翻译。 + +当您提交拉取请求时,CLA-bot 会自动确定您是否需要提供 CLA,并相应地装饰 PR(例如,标签、评论)。只需按照机器人提供的说明进行操作即可。在所有使用我们 CLA 的库中,您只需进行一次操作。 + +## 行为准则 + +本项目采用了 [Microsoft 开源行为准则](https://opensource.microsoft.com/codeofconduct/?WT.mc_id=academic-105485-koreyst)。欲了解更多信息,请阅读 [行为准则 FAQ](https://opensource.microsoft.com/codeofconduct/faq/?WT.mc_id=academic-105485-koreyst) 或联系 [opencode@microsoft.com](mailto:opencode@microsoft.com) 以获取任何其他问题或评论。 + +## 问题或疑问? + +请不要为一般支持问题打开 GitHub 问题,因为 GitHub 列表应用于功能请求和错误报告。这样我们可以更轻松地跟踪代码中的实际问题或错误,并将一般讨论与实际代码分开。 + +## 拼写错误、问题、错误和贡献 + +每当您向 Generative AI for Beginners 仓库提交任何更改时,请遵循以下建议。 + +* 在进行修改之前,请始终将仓库分叉到您自己的帐户 +* 不要将多个更改合并到一个拉取请求中。例如,提交任何错误修复和文档更新时,请使用单独的 PR +* 如果您的拉取请求显示合并冲突,请确保在进行修改之前,将本地 main 更新为与主仓库中的内容一致 +* 如果您提交翻译,请为所有翻译的文件创建一个 PR,因为我们不接受内容的部分翻译 +* 如果您提交拼写错误或文档修复,您可以在合适的地方将修改合并到一个 PR + +## 编写的一般指导 + +- 确保所有 URL 都用方括号括起来,后面跟一个没有多余空格的括号 `[](../..)`。 +- 确保任何相对链接(即链接到仓库中的其他文件和文件夹)都以 `./` 开头,指向当前工作目录中的文件或文件夹,或以 `../` 开头,指向父工作目录中的文件或文件夹。 +- 确保任何相对链接(即链接到仓库中的其他文件和文件夹)在末尾都有一个跟踪 ID(即 `?` 或 `&` 然后 `wt.mc_id=` 或 `WT.mc_id=`)。 +- 确保以下域名的任何 URL _github.com, microsoft.com, visualstudio.com, aka.ms, 和 azure.com_ 在末尾有一个跟踪 ID(即 `?` 或 `&` 然后 `wt.mc_id=` 或 `WT.mc_id=`)。 +- 确保您的链接中没有国家特定的语言区域(即 `/en-us/` 或 `/en/`)。 +- 确保所有图像都存储在 `./images` 文件夹中。 +- 确保图像具有使用英文字符、数字和破折号的描述性名称。 + +## GitHub 工作流 + +当您提交拉取请求时,将触发四个不同的工作流来验证之前的规则。 +只需按照此处列出的说明进行操作以通过工作流检查。 + +- [检查损坏的相对路径](../..) +- [检查路径是否有跟踪](../..) +- [检查 URL 是否有跟踪](../..) +- [检查 URL 没有区域设置](../..) + +### 检查损坏的相对路径 + +此工作流确保您文件中的任何相对路径都能正常工作。 +此仓库已部署到 GitHub 页面,因此您在键入链接时需要非常小心,以确保不会将任何人引导到错误的地方。 + +为了确保您的链接正常工作,只需使用 VS code 检查即可。 + +例如,当您将鼠标悬停在文件中的任何链接上时,系统会提示您通过按 **ctrl + click** 来跟随链接。 + +![VS code 跟随链接截图](../../translated_images/vscode-follow-link.png?WT.9a13b650fffe5ca9eb1aa56a22ed4d75d5b625ae380e605de4bf802d4b88df89.zh.mc_id=academic-105485-koreyst "vs code 提示跟随链接的截图,当您将鼠标悬停在链接上时。") + +如果您单击链接并且它在本地不起作用,那么它肯定会触发工作流,并且在 GitHub 上也不起作用。 + +要解决此问题,请尝试在 VS code 的帮助下键入链接。 + +当您键入 `./` 或 `../` 时,VS code 会根据您键入的内容提示您从可用选项中进行选择。 + +![VS code 选择相对路径截图](../../translated_images/vscode-select-relative-path.png?WT.c20008fa4cd8e33d12acfae725a6508e0f46229e0b0bd7cd5e0f1b995a06b8cf.zh.mc_id=academic-105485-koreyst "vs code 提示从弹出列表中选择相对路径的截图。") + +通过单击所需的文件或文件夹来跟随路径,您将确保您的路径没有损坏。 + +一旦您添加了正确的相对路径,保存并推送您的更改,工作流将再次触发以验证您的更改。 +如果您通过检查,那么您就可以继续了。 + +### 检查路径是否有跟踪 + +此工作流确保任何相对路径中都有跟踪。 +此仓库已部署到 GitHub 页面,因此我们需要跟踪不同文件和文件夹之间的移动。 + +为了确保您的相对路径中有跟踪,只需检查路径末尾的以下文本 `?wt.mc_id=`。 +如果它附加到您的相对路径中,那么您将通过此检查。 + +如果没有,您可能会收到以下错误。 + +![GitHub 检查路径缺少跟踪评论截图](../../translated_images/github-check-paths-missing-tracking-comment.png?WT.b53c16be4992452c116307ffa1632f11373a642af2dd21d3b0273cbbba21f030.zh.mc_id=academic-105485-koreyst "github 评论截图,显示相对路径缺少跟踪") + +要解决此问题,请尝试打开工作流突出显示的文件路径,并在相对路径的末尾添加跟踪 ID。 + +一旦您添加了跟踪 ID,保存并推送您的更改,工作流将再次触发以验证您的更改。 +如果您通过检查,那么您就可以继续了。 + +### 检查 URL 是否有跟踪 + +此工作流确保任何网络 URL 中都有跟踪。 +此仓库对所有人开放,因此您需要确保跟踪访问以了解流量来自何处。 + +为了确保您的 URL 中有跟踪,只需检查 URL 末尾的以下文本 `?wt.mc_id=`。 +如果它附加到您的 URL 中,那么您将通过此检查。 + +如果没有,您可能会收到以下错误。 + +![GitHub 检查 URL 缺少跟踪评论截图](../../translated_images/github-check-urls-missing-tracking-comment.png?WT.7b823bc0393cdc05ba7112671484cb21336f6b8a9ed1d7edcf215e33cc4735d6.zh.mc_id=academic-105485-koreyst "github 评论截图,显示 url 缺少跟踪") + +要解决此问题,请尝试打开工作流突出显示的文件路径,并在 URL 的末尾添加跟踪 ID。 + +一旦您添加了跟踪 ID,保存并推送您的更改,工作流将再次触发以验证您的更改。 +如果您通过检查,那么您就可以继续了。 + +### 检查 URL 没有区域设置 + +此工作流确保任何网络 URL 中没有国家特定的语言区域。 +此仓库对全球所有人开放,因此您需要确保不要在 URL 中包含您国家的区域设置。 + +为了确保您的 URL 中没有国家区域设置,只需检查 URL 中的以下文本 `/en-us/` 或 `/en/` 或任何其他语言区域。 +如果它不存在于您的 URL 中,那么您将通过此检查。 + +如果没有,您可能会收到以下错误。 + +![GitHub 检查国家区域设置评论截图](../../translated_images/github-check-country-locale-comment.png?WT.c1dcdfe280f2ba3180a3bf0923df1bedc5e74aba738584a39f75ac361ad4e40c.zh.mc_id=academic-105485-koreyst "github 评论截图,显示 url 中添加的国家区域设置") + +要解决此问题,请尝试打开工作流突出显示的文件路径,并从 URL 中删除国家区域设置。 + +一旦您删除了国家区域设置,保存并推送您的更改,工作流将再次触发以验证您的更改。 +如果您通过检查,那么您就可以继续了。 + +恭喜!我们会尽快反馈您的贡献。 + +**免责声明**: +本文档是使用机器翻译服务翻译的。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文档视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用此翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/README.md b/translations/zh/README.md new file mode 100644 index 000000000..02751b464 --- /dev/null +++ b/translations/zh/README.md @@ -0,0 +1,112 @@ +![生成式 AI 初学者指南](../../translated_images/repo-thumbnailv4-fixed.png?WT.dfa9688e7359356441d344183b2ff4dcc76389cc116024447725ef424a809a79.zh.mc_id=academic-105485-koreyst) + +### 21 节课教你构建生成式 AI 应用的所有基础知识 + +[![GitHub license](https://img.shields.io/github/license/microsoft/Generative-AI-For-Beginners.svg)](https://github.com/microsoft/Generative-AI-For-Beginners/blob/master/LICENSE?WT.mc_id=academic-105485-koreyst) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/graphs/contributors/?WT.mc_id=academic-105485-koreyst) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/issues/?WT.mc_id=academic-105485-koreyst) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/pulls/?WT.mc_id=academic-105485-koreyst) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com?WT.mc_id=academic-105485-koreyst) + +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/watchers/?WT.mc_id=academic-105485-koreyst) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/network/?WT.mc_id=academic-105485-koreyst) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/stargazers/?WT.mc_id=academic-105485-koreyst) + +[![](https://dcbadge.limes.pink/api/server/ByRwuEEgH4)](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) + +# 生成式 AI 初学者指南 (版本 3) - 一门课程 + +通过微软云倡导者提供的21节课全面课程,学习构建生成式 AI 应用的基础知识。 + +## 🌱 入门指南 + +本课程共有21节课。每节课涵盖一个独立主题,您可以从任何感兴趣的地方开始学习! + +课程分为“学习”课程,讲解生成式 AI 概念,或“构建”课程,讲解概念并提供**Python**和**TypeScript**代码示例(如有可能)。 + +每节课还包含“继续学习”部分,提供额外的学习工具。 + +## 您需要什么 +### 要运行本课程的代码,您可以使用以下任一选项: + - [Azure OpenAI 服务](https://azure.microsoft.com/products/ai-services/openai-service?WT.mc_id=academic-105485-koreyst) - **课程:** "aoai-assignment" + - [GitHub Marketplace 模型目录](https://github.com/marketplace/models?WT.mc_id=academic-105485-koreyst) - **课程:** "githubmodels" + - [OpenAI API](https://platform.openai.com/docs/quickstart?context=python?WT.mc_id=academic-105485-koreyst) - **课程:** "oai-assignment" + +- 具备基本的 Python 或 TypeScript 知识会有所帮助 - \*对于绝对初学者,请查看这些 [Python](https://learn.microsoft.com/training/paths/python-language/?WT.mc_id=academic-105485-koreyst) 和 [TypeScript](https://learn.microsoft.com/training/paths/build-javascript-applications-typescript/?WT.mc_id=academic-105485-koreyst) 课程。 +- 一个 GitHub 账号,用于将[整个仓库复制](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst)到您自己的 GitHub 账号。 + +我们创建了一个**[课程设置](./00-course-setup/README.md?WT.mc_id=academic-105485-koreyst)**课程,帮助您设置开发环境。 + +别忘了给这个仓库[加星标 (🌟)](https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars?WT.mc_id=academic-105485-koreyst),方便以后查找。 + +## 🧠 准备好部署了吗? + +如果您在寻找更高级的代码示例,请查看我们提供的 [生成式 AI 代码示例集](https://aka.ms/genai-beg-code?WT.mc_id=academic-105485-koreyst),包括 **Python** 和 **TypeScript**。 + +## 🗣️ 结识其他学习者,获取支持 + +加入我们的[官方 AI Discord 服务器](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst),与其他学习者交流并获取支持。 + +## 🚀 创建初创公司? + +注册 [Microsoft for Startups Founders Hub](https://aka.ms/genai-foundershub?WT.mc_id=academic-105485-koreyst),即可获得**免费 OpenAI 额度**,以及**高达 $150k 的 Azure 额度,用于通过 Azure OpenAI 服务访问 OpenAI 模型**。 + +## 🙏 想要帮助? + +您有建议或发现拼写或代码错误?请[提交问题](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst)或[创建拉取请求](https://github.com/microsoft/generative-ai-for-beginners/pulls?WT.mc_id=academic-105485-koreyst) + +## 📂 每节课包括: + +- 主题的简短视频介绍 +- 位于 README 中的书面课程 +- 支持 Azure OpenAI 和 OpenAI API 的 Python 和 TypeScript 代码示例 +- 链接到额外资源以继续学习 + +## 🗃️ 课程 + +| # | **课程链接** | **描述** | **视频** | **额外学习** | +| --- | -------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | +| 00 | [课程设置](./00-course-setup/README.md?WT.mc_id=academic-105485-koreyst) | **学习:** 如何设置您的开发环境 | 即将推出 | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 01 | [生成式 AI 和 LLMs 简介](./01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst) | **学习:** 理解生成式 AI 是什么以及大型语言模型 (LLMs) 的工作原理。 | [视频](https://aka.ms/gen-ai-lesson-1-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 02 | [探索和比较不同的LLM](./02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst) | **学习:** 如何为你的用例选择合适的模型 | [视频](https://aka.ms/gen-ai-lesson2-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 03 | [负责任地使用生成式AI](./03-using-generative-ai-responsibly/README.md?WT.mc_id=academic-105485-koreyst) | **学习:** 如何负责任地构建生成式AI应用 | [视频](https://aka.ms/gen-ai-lesson3-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 04 | [理解提示工程基础](./04-prompt-engineering-fundamentals/README.md?WT.mc_id=academic-105485-koreyst) | **学习:** 实践提示工程最佳实践 | [视频](https://aka.ms/gen-ai-lesson4-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 05 | [创建高级提示](./05-advanced-prompts/README.md?WT.mc_id=academic-105485-koreyst) | **学习:** 如何应用提示工程技术以改善提示的效果。 | [视频](https://aka.ms/gen-ai-lesson5-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 06 | [构建文本生成应用](./06-text-generation-apps/README.md?WT.mc_id=academic-105485-koreyst) | **构建:** 使用Azure OpenAI / OpenAI API构建文本生成应用 | [视频](https://aka.ms/gen-ai-lesson6-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 07 | [构建聊天应用](./07-building-chat-applications/README.md?WT.mc_id=academic-105485-koreyst) | **构建:** 高效构建和集成聊天应用的技术。 | [视频](https://aka.ms/gen-ai-lessons7-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 08 | [构建搜索应用矢量数据库](./08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst) | **构建:** 使用嵌入技术进行数据搜索的搜索应用 | [视频](https://aka.ms/gen-ai-lesson8-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 09 | [构建图像生成应用](./09-building-image-applications/README.md?WT.mc_id=academic-105485-koreyst) | **构建:** 图像生成应用 | [视频](https://aka.ms/gen-ai-lesson9-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 10 | [构建低代码AI应用](./10-building-low-code-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **构建:** 使用低代码工具构建生成式AI应用 | [视频](https://aka.ms/gen-ai-lesson10-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 11 | [通过函数调用集成外部应用](./11-integrating-with-function-calling/README.md?WT.mc_id=academic-105485-koreyst) | **构建:** 什么是函数调用及其在应用中的用例 | [视频](https://aka.ms/gen-ai-lesson11-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 12 | [为AI应用设计用户体验](./12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **学习内容:** 如何在开发生成式AI应用时应用用户体验设计原则 | [视频](https://aka.ms/gen-ai-lesson12-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 13 | [保护您的生成式AI应用](./13-securing-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **学习内容:** AI系统面临的威胁和风险以及保护这些系统的方法 | [视频](https://aka.ms/gen-ai-lesson13-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 14 | [生成式AI应用生命周期](./14-the-generative-ai-application-lifecycle/README.md?WT.mc_id=academic-105485-koreyst) | **学习内容:** 管理LLM生命周期和LLMOps的工具和指标 | [视频](https://aka.ms/gen-ai-lesson14-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 15 | [检索增强生成(RAG)和向量数据库](./15-rag-and-vector-databases/README.md?WT.mc_id=academic-105485-koreyst) | **构建:** 使用RAG框架从向量数据库中检索嵌入的应用程序 | [视频](https://aka.ms/gen-ai-lesson15-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 16 | [开源模型和Hugging Face](./16-open-source-models/README.md?WT.mc_id=academic-105485-koreyst) | **构建:** 使用Hugging Face上的开源模型构建应用程序 | [视频](https://aka.ms/gen-ai-lesson16-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 17 | [AI代理](./17-ai-agents/README.md?WT.mc_id=academic-105485-koreyst) | **构建:** 使用AI代理框架的应用程序 | [视频](https://aka.ms/gen-ai-lesson17-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 18 | [微调LLM](./18-fine-tuning/README.md?WT.mc_id=academic-105485-koreyst) | **学习内容:** 微调LLM的意义、原因和方法 | [视频](https://aka.ms/gen-ai-lesson18-gh?WT.mc_id=academic-105485-koreyst) | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 19 | [使用SLM构建](./19-slm/README.md?WT.mc_id=academic-105485-koreyst) | **学习内容:** 使用小型语言模型构建的优势 | 视频即将推出 | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 20 | [使用Mistral模型构建](./20-mistral/README.md?WT.mc_id=academic-105485-koreyst) | **学习内容:** Mistral系列模型的特点和区别 | 视频即将推出 | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 21 | [使用Meta模型构建](./21-meta/README.md?WT.mc_id=academic-105485-koreyst) | **学习内容:** Meta系列模型的特点和区别 | 视频即将推出 | [了解更多](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | + +### 🌟 特别感谢 + +特别感谢 [**John Aziz**](https://www.linkedin.com/in/john0isaac/) 创建所有的GitHub Actions和工作流。 + +[**Bernhard Merkle**](https://www.linkedin.com/in/bernhard-merkle-738b73/) 对每一课的关键贡献,以改善学习者和代码体验。 + +## 🎒 其他课程 + +我们的团队还制作其他课程!查看: + +- [初学者的机器学习](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) +- [XR开发入门](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst) +- [掌握 GitHub Copilot 进行 AI 配对编程](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) + +**免责声明**: +本文件是使用基于机器的人工智能翻译服务翻译的。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原文档的母语版本视为权威来源。对于关键信息,建议进行专业人工翻译。对于因使用此翻译而产生的任何误解或误读,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/SECURITY.md b/translations/zh/SECURITY.md new file mode 100644 index 000000000..9fbb4130f --- /dev/null +++ b/translations/zh/SECURITY.md @@ -0,0 +1,40 @@ +## 安全性 + +微软非常重视我们软件产品和服务的安全性,这包括通过我们的 GitHub 组织管理的所有源代码库,其中包括 [Microsoft](https://github.com/microsoft)、[Azure](https://github.com/Azure)、[DotNet](https://github.com/dotnet)、[AspNet](https://github.com/aspnet)、[Xamarin](https://github.com/xamarin) 和 [我们的 GitHub 组织](https://opensource.microsoft.com/)。 + +如果您认为在任何微软拥有的代码库中发现了符合[微软安全漏洞定义](https://aka.ms/opensource/security/definition)的安全漏洞,请按照以下说明报告给我们。 + +## 报告安全问题 + +**请不要通过公共 GitHub 问题报告安全漏洞。** + +相反,请通过 [Microsoft Security Response Center (MSRC)](https://aka.ms/opensource/security/create-report) 报告这些问题。 + +如果您希望在不登录的情况下提交报告,可以发送电子邮件至 [secure@microsoft.com](mailto:secure@microsoft.com)。如果可能,请使用我们的 PGP 密钥加密您的消息;请从 [Microsoft Security Response Center PGP Key 页面](https://aka.ms/opensource/security/pgpkey)下载。 + +您应该会在 24 小时内收到回复。如果由于某种原因没有收到,请通过电子邮件跟进以确保我们收到了您最初的消息。更多信息可以在 [microsoft.com/msrc](https://aka.ms/opensource/security/msrc) 找到。 + +请尽量提供以下请求的信息,以帮助我们更好地理解可能问题的性质和范围: + + * 问题类型(例如,缓冲区溢出、SQL 注入、跨站脚本攻击等) + * 与问题表现相关的源文件的完整路径 + * 受影响的源代码位置(标签/分支/提交或直接 URL) + * 重现问题所需的任何特殊配置 + * 重现问题的逐步说明 + * 概念验证或利用代码(如果可能) + * 问题的影响,包括攻击者可能如何利用该问题 + +这些信息将帮助我们更快地对您的报告进行分类。 + +如果您是为漏洞赏金报告,提供更完整的报告可能会有助于获得更高的赏金奖励。有关我们当前活动项目的更多详细信息,请访问我们的 [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) 页面。 + +## 首选语言 + +我们希望所有的交流都使用英语。 + +## 政策 + +微软遵循 [协调漏洞披露](https://aka.ms/opensource/security/cvd) 原则。 + +**免责声明**: +本文档已使用基于机器的AI翻译服务进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始文档的母语版本视为权威来源。对于关键信息,建议进行专业人工翻译。对于因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/docs/_navbar.md b/translations/zh/docs/_navbar.md new file mode 100644 index 000000000..186857b80 --- /dev/null +++ b/translations/zh/docs/_navbar.md @@ -0,0 +1,10 @@ +* 选择语言 + + * [English](../../../../../../../..) + * [简体中文](../../../../../../../../translations/cn) + * [繁體中文](../../../../../../../../translations/tw) + * [Português](../../../../../../../../translations/pt-br) + * [日本語](../../../../../../../../translations/ja-jp) + +**免责声明**: +本文档是使用基于机器的AI翻译服务翻译的。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文档视为权威来源。对于关键信息,建议进行专业的人类翻译。对于因使用此翻译而产生的任何误解或误释,我们不承担责任。 \ No newline at end of file diff --git a/translations/zh/docs/_sidebar.md b/translations/zh/docs/_sidebar.md new file mode 100644 index 000000000..5387fff7b --- /dev/null +++ b/translations/zh/docs/_sidebar.md @@ -0,0 +1,5 @@ +- 入门 + - [生成式 AI 简介](../01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst) + +**免责声明**: +本文档是使用基于机器的人工智能翻译服务翻译的。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。应将原始语言的文档视为权威来源。对于关键信息,建议进行专业人工翻译。对于因使用此翻译而产生的任何误解或误读,我们不承担责任。 \ No newline at end of file