diff --git a/jp/.gitbook/assets/0a670b55-c420-4967-ba28-0175b3e70ef1.png b/jp/.gitbook/assets/0a670b55-c420-4967-ba28-0175b3e70ef1.png new file mode 100644 index 00000000..a4146302 Binary files /dev/null and b/jp/.gitbook/assets/0a670b55-c420-4967-ba28-0175b3e70ef1.png differ diff --git a/jp/.gitbook/assets/1 (1).png b/jp/.gitbook/assets/1 (1).png new file mode 100644 index 00000000..fe48404c Binary files /dev/null and b/jp/.gitbook/assets/1 (1).png differ diff --git a/jp/.gitbook/assets/1.png b/jp/.gitbook/assets/1.png new file mode 100644 index 00000000..fe48404c Binary files /dev/null and b/jp/.gitbook/assets/1.png differ diff --git a/jp/.gitbook/assets/10.png b/jp/.gitbook/assets/10.png new file mode 100644 index 00000000..9a048369 Binary files /dev/null and b/jp/.gitbook/assets/10.png differ diff --git a/jp/.gitbook/assets/11.png b/jp/.gitbook/assets/11.png new file mode 100644 index 00000000..5e287408 Binary files /dev/null and b/jp/.gitbook/assets/11.png differ diff --git a/jp/.gitbook/assets/12.png b/jp/.gitbook/assets/12.png new file mode 100644 index 00000000..f961812a Binary files /dev/null and b/jp/.gitbook/assets/12.png differ diff --git a/jp/.gitbook/assets/1280X1280 (1).PNG b/jp/.gitbook/assets/1280X1280 (1).PNG new file mode 100644 index 00000000..8250b049 Binary files /dev/null and b/jp/.gitbook/assets/1280X1280 (1).PNG differ diff --git a/jp/.gitbook/assets/1280X1280.PNG b/jp/.gitbook/assets/1280X1280.PNG new file mode 100644 index 00000000..23e2a770 Binary files /dev/null and b/jp/.gitbook/assets/1280X1280.PNG differ diff --git a/jp/.gitbook/assets/13.png b/jp/.gitbook/assets/13.png new file mode 100644 index 00000000..240b5c97 Binary files /dev/null and b/jp/.gitbook/assets/13.png differ diff --git a/jp/.gitbook/assets/2.png b/jp/.gitbook/assets/2.png new file mode 100644 index 00000000..240b5c97 Binary files /dev/null and b/jp/.gitbook/assets/2.png differ diff --git a/jp/.gitbook/assets/3.png b/jp/.gitbook/assets/3.png new file mode 100644 index 00000000..35d98ffc Binary files /dev/null and b/jp/.gitbook/assets/3.png differ diff --git a/jp/.gitbook/assets/345e68b5-dd62-4132-9727-c961a2f60ff5.png b/jp/.gitbook/assets/345e68b5-dd62-4132-9727-c961a2f60ff5.png new file mode 100644 index 00000000..ee441c14 Binary files /dev/null and b/jp/.gitbook/assets/345e68b5-dd62-4132-9727-c961a2f60ff5.png differ diff --git a/jp/.gitbook/assets/4.png b/jp/.gitbook/assets/4.png new file mode 100644 index 00000000..23adb4c8 Binary files /dev/null and b/jp/.gitbook/assets/4.png differ diff --git a/jp/.gitbook/assets/4b4f1fb4-daa6-4fad-a9e8-e49ccdac7e42.png b/jp/.gitbook/assets/4b4f1fb4-daa6-4fad-a9e8-e49ccdac7e42.png new file mode 100644 index 00000000..5196de59 Binary files /dev/null and b/jp/.gitbook/assets/4b4f1fb4-daa6-4fad-a9e8-e49ccdac7e42.png differ diff --git a/jp/.gitbook/assets/5.png b/jp/.gitbook/assets/5.png new file mode 100644 index 00000000..53053e73 Binary files /dev/null and b/jp/.gitbook/assets/5.png differ diff --git a/jp/.gitbook/assets/6.png b/jp/.gitbook/assets/6.png new file mode 100644 index 00000000..b9b20b7a Binary files /dev/null and b/jp/.gitbook/assets/6.png differ diff --git a/jp/.gitbook/assets/640-1.jpg b/jp/.gitbook/assets/640-1.jpg new file mode 100644 index 00000000..1042d3c8 Binary files /dev/null and b/jp/.gitbook/assets/640-1.jpg differ diff --git a/jp/.gitbook/assets/640-10.jpg b/jp/.gitbook/assets/640-10.jpg new file mode 100644 index 00000000..befb777d Binary files /dev/null and b/jp/.gitbook/assets/640-10.jpg differ diff --git a/jp/.gitbook/assets/640-10.png b/jp/.gitbook/assets/640-10.png new file mode 100644 index 00000000..e490cda6 Binary files /dev/null and b/jp/.gitbook/assets/640-10.png differ diff --git a/jp/.gitbook/assets/640-11.jpg b/jp/.gitbook/assets/640-11.jpg new file mode 100644 index 00000000..e3505434 Binary files /dev/null and b/jp/.gitbook/assets/640-11.jpg differ diff --git a/jp/.gitbook/assets/640-11.png b/jp/.gitbook/assets/640-11.png new file mode 100644 index 00000000..76b380d7 Binary files /dev/null and b/jp/.gitbook/assets/640-11.png differ diff --git a/jp/.gitbook/assets/640-12.jpg b/jp/.gitbook/assets/640-12.jpg new file mode 100644 index 00000000..0f37af70 Binary files /dev/null and b/jp/.gitbook/assets/640-12.jpg differ diff --git a/jp/.gitbook/assets/640-12.png b/jp/.gitbook/assets/640-12.png new file mode 100644 index 00000000..ca14ace7 Binary files /dev/null and b/jp/.gitbook/assets/640-12.png differ diff --git a/jp/.gitbook/assets/640-13.png b/jp/.gitbook/assets/640-13.png new file mode 100644 index 00000000..a6f074c4 Binary files /dev/null and b/jp/.gitbook/assets/640-13.png differ diff --git a/jp/.gitbook/assets/640-14.png b/jp/.gitbook/assets/640-14.png new file mode 100644 index 00000000..9d519ff0 Binary files /dev/null and b/jp/.gitbook/assets/640-14.png differ diff --git a/jp/.gitbook/assets/640-2.jpg b/jp/.gitbook/assets/640-2.jpg new file mode 100644 index 00000000..a131126e Binary files /dev/null and b/jp/.gitbook/assets/640-2.jpg differ diff --git a/jp/.gitbook/assets/640-2.png b/jp/.gitbook/assets/640-2.png new file mode 100644 index 00000000..712c2dad Binary files /dev/null and b/jp/.gitbook/assets/640-2.png differ diff --git a/jp/.gitbook/assets/640-3.jpg b/jp/.gitbook/assets/640-3.jpg new file mode 100644 index 00000000..741a60cd Binary files /dev/null and b/jp/.gitbook/assets/640-3.jpg differ diff --git a/jp/.gitbook/assets/640-3.png b/jp/.gitbook/assets/640-3.png new file mode 100644 index 00000000..00e0295c Binary files /dev/null and b/jp/.gitbook/assets/640-3.png differ diff --git a/jp/.gitbook/assets/640-4.jpg b/jp/.gitbook/assets/640-4.jpg new file mode 100644 index 00000000..f186ae42 Binary files /dev/null and b/jp/.gitbook/assets/640-4.jpg differ diff --git a/jp/.gitbook/assets/640-4.png b/jp/.gitbook/assets/640-4.png new file mode 100644 index 00000000..5be378b3 Binary files /dev/null and b/jp/.gitbook/assets/640-4.png differ diff --git a/jp/.gitbook/assets/640-5.jpg b/jp/.gitbook/assets/640-5.jpg new file mode 100644 index 00000000..f349a086 Binary files /dev/null and b/jp/.gitbook/assets/640-5.jpg differ diff --git a/jp/.gitbook/assets/640-5.png b/jp/.gitbook/assets/640-5.png new file mode 100644 index 00000000..0853125f Binary files /dev/null and b/jp/.gitbook/assets/640-5.png differ diff --git a/jp/.gitbook/assets/640-6.jpg b/jp/.gitbook/assets/640-6.jpg new file mode 100644 index 00000000..afb849a7 Binary files /dev/null and b/jp/.gitbook/assets/640-6.jpg differ diff --git a/jp/.gitbook/assets/640-6.png b/jp/.gitbook/assets/640-6.png new file mode 100644 index 00000000..2dbb7d6b Binary files /dev/null and b/jp/.gitbook/assets/640-6.png differ diff --git a/jp/.gitbook/assets/640-7.jpg b/jp/.gitbook/assets/640-7.jpg new file mode 100644 index 00000000..9074985b Binary files /dev/null and b/jp/.gitbook/assets/640-7.jpg differ diff --git a/jp/.gitbook/assets/640-7.png b/jp/.gitbook/assets/640-7.png new file mode 100644 index 00000000..04592229 Binary files /dev/null and b/jp/.gitbook/assets/640-7.png differ diff --git a/jp/.gitbook/assets/640-8.jpg b/jp/.gitbook/assets/640-8.jpg new file mode 100644 index 00000000..dcf1f93b Binary files /dev/null and b/jp/.gitbook/assets/640-8.jpg differ diff --git a/jp/.gitbook/assets/640-8.png b/jp/.gitbook/assets/640-8.png new file mode 100644 index 00000000..4ab0a5b1 Binary files /dev/null and b/jp/.gitbook/assets/640-8.png differ diff --git a/jp/.gitbook/assets/640-9.jpg b/jp/.gitbook/assets/640-9.jpg new file mode 100644 index 00000000..911923bf Binary files /dev/null and b/jp/.gitbook/assets/640-9.jpg differ diff --git a/jp/.gitbook/assets/640-9.png b/jp/.gitbook/assets/640-9.png new file mode 100644 index 00000000..304a64f0 Binary files /dev/null and b/jp/.gitbook/assets/640-9.png differ diff --git a/jp/.gitbook/assets/640.jpg b/jp/.gitbook/assets/640.jpg new file mode 100644 index 00000000..010f6511 Binary files /dev/null and b/jp/.gitbook/assets/640.jpg differ diff --git a/jp/.gitbook/assets/640.png b/jp/.gitbook/assets/640.png new file mode 100644 index 00000000..50c35db0 Binary files /dev/null and b/jp/.gitbook/assets/640.png differ diff --git a/jp/.gitbook/assets/6bc9e55c-c835-4431-b234-2b6ecffd6ad8.png b/jp/.gitbook/assets/6bc9e55c-c835-4431-b234-2b6ecffd6ad8.png new file mode 100644 index 00000000..79783de7 Binary files /dev/null and b/jp/.gitbook/assets/6bc9e55c-c835-4431-b234-2b6ecffd6ad8.png differ diff --git a/jp/.gitbook/assets/7.png b/jp/.gitbook/assets/7.png new file mode 100644 index 00000000..37bbd0a9 Binary files /dev/null and b/jp/.gitbook/assets/7.png differ diff --git a/jp/.gitbook/assets/77ff6895-cfbe-4bfa-bddf-f8fedbbf2016.png b/jp/.gitbook/assets/77ff6895-cfbe-4bfa-bddf-f8fedbbf2016.png new file mode 100644 index 00000000..39bfdab6 Binary files /dev/null and b/jp/.gitbook/assets/77ff6895-cfbe-4bfa-bddf-f8fedbbf2016.png differ diff --git a/jp/.gitbook/assets/8.png b/jp/.gitbook/assets/8.png new file mode 100644 index 00000000..c1d11b7c Binary files /dev/null and b/jp/.gitbook/assets/8.png differ diff --git a/jp/.gitbook/assets/8000.png b/jp/.gitbook/assets/8000.png new file mode 100644 index 00000000..aa780902 Binary files /dev/null and b/jp/.gitbook/assets/8000.png differ diff --git a/jp/.gitbook/assets/9.png b/jp/.gitbook/assets/9.png new file mode 100644 index 00000000..61f982d1 Binary files /dev/null and b/jp/.gitbook/assets/9.png differ diff --git a/jp/.gitbook/assets/967a8235-ed7d-42a8-82d7-28d7b84e03ed.png b/jp/.gitbook/assets/967a8235-ed7d-42a8-82d7-28d7b84e03ed.png new file mode 100644 index 00000000..30f6649e Binary files /dev/null and b/jp/.gitbook/assets/967a8235-ed7d-42a8-82d7-28d7b84e03ed.png differ diff --git a/jp/.gitbook/assets/Feb 4, 2024.png b/jp/.gitbook/assets/Feb 4, 2024.png new file mode 100644 index 00000000..6a4446b4 Binary files /dev/null and b/jp/.gitbook/assets/Feb 4, 2024.png differ diff --git a/jp/.gitbook/assets/Feb 4,2.png b/jp/.gitbook/assets/Feb 4,2.png new file mode 100644 index 00000000..d2bd2dbe Binary files /dev/null and b/jp/.gitbook/assets/Feb 4,2.png differ diff --git a/jp/.gitbook/assets/Weather_search_tool (1).jpeg b/jp/.gitbook/assets/Weather_search_tool (1).jpeg new file mode 100644 index 00000000..dea5d9af Binary files /dev/null and b/jp/.gitbook/assets/Weather_search_tool (1).jpeg differ diff --git a/jp/.gitbook/assets/Weather_search_tool (2).jpeg b/jp/.gitbook/assets/Weather_search_tool (2).jpeg new file mode 100644 index 00000000..dea5d9af Binary files /dev/null and b/jp/.gitbook/assets/Weather_search_tool (2).jpeg differ diff --git a/jp/.gitbook/assets/Weather_search_tool (3).jpeg b/jp/.gitbook/assets/Weather_search_tool (3).jpeg new file mode 100644 index 00000000..dea5d9af Binary files /dev/null and b/jp/.gitbook/assets/Weather_search_tool (3).jpeg differ diff --git a/jp/.gitbook/assets/Weather_search_tool.jpeg b/jp/.gitbook/assets/Weather_search_tool.jpeg new file mode 100644 index 00000000..dea5d9af Binary files /dev/null and b/jp/.gitbook/assets/Weather_search_tool.jpeg differ diff --git a/jp/.gitbook/assets/a.png b/jp/.gitbook/assets/a.png new file mode 100644 index 00000000..955d9372 Binary files /dev/null and b/jp/.gitbook/assets/a.png differ diff --git a/jp/.gitbook/assets/add-new-segment.png b/jp/.gitbook/assets/add-new-segment.png new file mode 100644 index 00000000..5bf6e003 Binary files /dev/null and b/jp/.gitbook/assets/add-new-segment.png differ diff --git a/jp/.gitbook/assets/ade62760-4758-44fb-b866-534a90b2b4ab.png b/jp/.gitbook/assets/ade62760-4758-44fb-b866-534a90b2b4ab.png new file mode 100644 index 00000000..d5554975 Binary files /dev/null and b/jp/.gitbook/assets/ade62760-4758-44fb-b866-534a90b2b4ab.png differ diff --git a/jp/.gitbook/assets/api_based (1).png b/jp/.gitbook/assets/api_based (1).png new file mode 100644 index 00000000..18f23579 Binary files /dev/null and b/jp/.gitbook/assets/api_based (1).png differ diff --git a/jp/.gitbook/assets/api_based.png b/jp/.gitbook/assets/api_based.png new file mode 100644 index 00000000..18f23579 Binary files /dev/null and b/jp/.gitbook/assets/api_based.png differ diff --git a/jp/.gitbook/assets/api_based_01.png b/jp/.gitbook/assets/api_based_01.png new file mode 100644 index 00000000..e21f08b4 Binary files /dev/null and b/jp/.gitbook/assets/api_based_01.png differ diff --git a/jp/.gitbook/assets/api_based_02.png b/jp/.gitbook/assets/api_based_02.png new file mode 100644 index 00000000..b483fdb4 Binary files /dev/null and b/jp/.gitbook/assets/api_based_02.png differ diff --git a/jp/.gitbook/assets/api_based_extension1.png b/jp/.gitbook/assets/api_based_extension1.png new file mode 100644 index 00000000..62eb0760 Binary files /dev/null and b/jp/.gitbook/assets/api_based_extension1.png differ diff --git a/jp/.gitbook/assets/api_extension_edit.png b/jp/.gitbook/assets/api_extension_edit.png new file mode 100644 index 00000000..f030cb5e Binary files /dev/null and b/jp/.gitbook/assets/api_extension_edit.png differ diff --git a/jp/.gitbook/assets/app-log.png b/jp/.gitbook/assets/app-log.png new file mode 100644 index 00000000..c066d219 Binary files /dev/null and b/jp/.gitbook/assets/app-log.png differ diff --git a/jp/.gitbook/assets/app-share.png b/jp/.gitbook/assets/app-share.png new file mode 100644 index 00000000..95bfb8c6 Binary files /dev/null and b/jp/.gitbook/assets/app-share.png differ diff --git a/jp/.gitbook/assets/app_tools_edit.png b/jp/.gitbook/assets/app_tools_edit.png new file mode 100644 index 00000000..ecc056ed Binary files /dev/null and b/jp/.gitbook/assets/app_tools_edit.png differ diff --git a/jp/.gitbook/assets/b2.png b/jp/.gitbook/assets/b2.png new file mode 100644 index 00000000..1114f848 Binary files /dev/null and b/jp/.gitbook/assets/b2.png differ diff --git a/jp/.gitbook/assets/choice-model-in-app.png b/jp/.gitbook/assets/choice-model-in-app.png new file mode 100644 index 00000000..02b7704f Binary files /dev/null and b/jp/.gitbook/assets/choice-model-in-app.png differ diff --git a/jp/.gitbook/assets/create-app.png b/jp/.gitbook/assets/create-app.png new file mode 100644 index 00000000..8f5c28ce Binary files /dev/null and b/jp/.gitbook/assets/create-app.png differ diff --git a/jp/.gitbook/assets/d7b4a87f-2038-41e7-a1ae-17774cb818e4.png b/jp/.gitbook/assets/d7b4a87f-2038-41e7-a1ae-17774cb818e4.png new file mode 100644 index 00000000..ae38f2ff Binary files /dev/null and b/jp/.gitbook/assets/d7b4a87f-2038-41e7-a1ae-17774cb818e4.png differ diff --git a/jp/.gitbook/assets/dataset-api-token.png b/jp/.gitbook/assets/dataset-api-token.png new file mode 100644 index 00000000..5aa2274a Binary files /dev/null and b/jp/.gitbook/assets/dataset-api-token.png differ diff --git a/jp/.gitbook/assets/dify-on-wechat/agent-on-wechat.jpg b/jp/.gitbook/assets/dify-on-wechat/agent-on-wechat.jpg new file mode 100644 index 00000000..2f5f9998 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/agent-on-wechat.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/agent-on-wework.jpg b/jp/.gitbook/assets/dify-on-wechat/agent-on-wework.jpg new file mode 100644 index 00000000..97d2cc03 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/agent-on-wework.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/basic-chatbot-on-wechat.jpg b/jp/.gitbook/assets/dify-on-wechat/basic-chatbot-on-wechat.jpg new file mode 100644 index 00000000..e1659803 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/basic-chatbot-on-wechat.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/config-agent-add-dalle.jpg b/jp/.gitbook/assets/dify-on-wechat/config-agent-add-dalle.jpg new file mode 100644 index 00000000..9d9ad418 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/config-agent-add-dalle.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/config-agent-add-duck-calc.jpg b/jp/.gitbook/assets/dify-on-wechat/config-agent-add-duck-calc.jpg new file mode 100644 index 00000000..bed7e96f Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/config-agent-add-duck-calc.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/config-agent-auth-dalle.jpg b/jp/.gitbook/assets/dify-on-wechat/config-agent-auth-dalle.jpg new file mode 100644 index 00000000..fc854324 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/config-agent-auth-dalle.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/config-basic-chatbot.jpg b/jp/.gitbook/assets/dify-on-wechat/config-basic-chatbot.jpg new file mode 100644 index 00000000..d022d062 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/config-basic-chatbot.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-agent.jpg b/jp/.gitbook/assets/dify-on-wechat/create-agent.jpg new file mode 100644 index 00000000..57c62cbd Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-agent.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-basic-chatbot-apikey.jpg b/jp/.gitbook/assets/dify-on-wechat/create-basic-chatbot-apikey.jpg new file mode 100644 index 00000000..bd0d09dd Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-basic-chatbot-apikey.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-basic-chatbot.jpg b/jp/.gitbook/assets/dify-on-wechat/create-basic-chatbot.jpg new file mode 100644 index 00000000..a191212e Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-basic-chatbot.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-knowledge-1.jpg b/jp/.gitbook/assets/dify-on-wechat/create-knowledge-1.jpg new file mode 100644 index 00000000..2eb27ac0 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-knowledge-1.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-knowledge-2.jpg b/jp/.gitbook/assets/dify-on-wechat/create-knowledge-2.jpg new file mode 100644 index 00000000..b344c4e5 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-knowledge-2.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-knowledge-3.jpg b/jp/.gitbook/assets/dify-on-wechat/create-knowledge-3.jpg new file mode 100644 index 00000000..7fd904e3 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-knowledge-3.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-knowledge-4.jpg b/jp/.gitbook/assets/dify-on-wechat/create-knowledge-4.jpg new file mode 100644 index 00000000..a501d213 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-knowledge-4.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-knowledge-5.jpg b/jp/.gitbook/assets/dify-on-wechat/create-knowledge-5.jpg new file mode 100644 index 00000000..819e24e4 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-knowledge-5.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-1.jpg b/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-1.jpg new file mode 100644 index 00000000..7d0b27da Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-1.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-2.jpg b/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-2.jpg new file mode 100644 index 00000000..65e9a8ce Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-2.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-3.jpg b/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-3.jpg new file mode 100644 index 00000000..7f068204 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-3.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-4.jpg b/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-4.jpg new file mode 100644 index 00000000..197e17e6 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-4.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-5.jpg b/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-5.jpg new file mode 100644 index 00000000..88270f32 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-5.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-6.jpg b/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-6.jpg new file mode 100644 index 00000000..6573734a Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-workflow-chatbot-6.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/create-workflow.jpg b/jp/.gitbook/assets/dify-on-wechat/create-workflow.jpg new file mode 100644 index 00000000..6edce3e4 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/create-workflow.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/download-dify-workflow-knowledge.jpg b/jp/.gitbook/assets/dify-on-wechat/download-dify-workflow-knowledge.jpg new file mode 100644 index 00000000..90f46cc5 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/download-dify-workflow-knowledge.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/login.jpg b/jp/.gitbook/assets/dify-on-wechat/login.jpg new file mode 100644 index 00000000..40314cc5 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/login.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/publish-agent.jpg b/jp/.gitbook/assets/dify-on-wechat/publish-agent.jpg new file mode 100644 index 00000000..5d6727da Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/publish-agent.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/publish-basic-chatbot.jpg b/jp/.gitbook/assets/dify-on-wechat/publish-basic-chatbot.jpg new file mode 100644 index 00000000..608315bf Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/publish-basic-chatbot.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/publish-workflow.jpg b/jp/.gitbook/assets/dify-on-wechat/publish-workflow.jpg new file mode 100644 index 00000000..192d3aed Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/publish-workflow.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/test-workflow.jpg b/jp/.gitbook/assets/dify-on-wechat/test-workflow.jpg new file mode 100644 index 00000000..d6c36857 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/test-workflow.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/wechat-login.jpg b/jp/.gitbook/assets/dify-on-wechat/wechat-login.jpg new file mode 100644 index 00000000..ca989425 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/wechat-login.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/workflow-chatbot-on-wechat.jpg b/jp/.gitbook/assets/dify-on-wechat/workflow-chatbot-on-wechat.jpg new file mode 100644 index 00000000..5920d781 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/workflow-chatbot-on-wechat.jpg differ diff --git a/jp/.gitbook/assets/dify-on-wechat/workflow-on-wechat.jpg b/jp/.gitbook/assets/dify-on-wechat/workflow-on-wechat.jpg new file mode 100644 index 00000000..c173784b Binary files /dev/null and b/jp/.gitbook/assets/dify-on-wechat/workflow-on-wechat.jpg differ diff --git a/jp/.gitbook/assets/dify-on-whatsapp/lt1.png b/jp/.gitbook/assets/dify-on-whatsapp/lt1.png new file mode 100644 index 00000000..dad6bd24 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-whatsapp/lt1.png differ diff --git a/jp/.gitbook/assets/dify-on-whatsapp/twilio1.png b/jp/.gitbook/assets/dify-on-whatsapp/twilio1.png new file mode 100644 index 00000000..359541ad Binary files /dev/null and b/jp/.gitbook/assets/dify-on-whatsapp/twilio1.png differ diff --git a/jp/.gitbook/assets/dify-on-whatsapp/twilio2.png b/jp/.gitbook/assets/dify-on-whatsapp/twilio2.png new file mode 100644 index 00000000..83e77395 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-whatsapp/twilio2.png differ diff --git a/jp/.gitbook/assets/dify-on-whatsapp/twilio3.png b/jp/.gitbook/assets/dify-on-whatsapp/twilio3.png new file mode 100644 index 00000000..e4b8ee4a Binary files /dev/null and b/jp/.gitbook/assets/dify-on-whatsapp/twilio3.png differ diff --git a/jp/.gitbook/assets/dify-on-whatsapp/whatsapp1.jpg b/jp/.gitbook/assets/dify-on-whatsapp/whatsapp1.jpg new file mode 100644 index 00000000..27dd7e73 Binary files /dev/null and b/jp/.gitbook/assets/dify-on-whatsapp/whatsapp1.jpg differ diff --git a/jp/.gitbook/assets/download.png b/jp/.gitbook/assets/download.png new file mode 100644 index 00000000..9eede159 Binary files /dev/null and b/jp/.gitbook/assets/download.png differ diff --git a/jp/.gitbook/assets/how-to-configure-azure-openai.png b/jp/.gitbook/assets/how-to-configure-azure-openai.png new file mode 100644 index 00000000..a0d3dd13 Binary files /dev/null and b/jp/.gitbook/assets/how-to-configure-azure-openai.png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..c1d47449 Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..bdecbd14 Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..4874bedd Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..c8088e9b Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..9ebf1015 Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..7255a2bb Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..74855c9b Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..83e5b26b Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..a2986bd3 Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..ef716f9f Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..847ca13d Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..7314bb17 Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..6d0ee5a3 Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..1fb04ec0 Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..cd231dfe Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..b98d4eea Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..c98dd862 Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..30357361 Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..c0228e31 Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..6e846cec Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1) (1).png new file mode 100644 index 00000000..b10f2b77 Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1) (1).png b/jp/.gitbook/assets/image (1) (1) (1).png new file mode 100644 index 00000000..8d93ac57 Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1) (1).png b/jp/.gitbook/assets/image (1) (1).png new file mode 100644 index 00000000..e87f63f4 Binary files /dev/null and b/jp/.gitbook/assets/image (1) (1).png differ diff --git a/jp/.gitbook/assets/image (1).png b/jp/.gitbook/assets/image (1).png new file mode 100644 index 00000000..0bde3189 Binary files /dev/null and b/jp/.gitbook/assets/image (1).png differ diff --git a/jp/.gitbook/assets/image (10) (1) (1).png b/jp/.gitbook/assets/image (10) (1) (1).png new file mode 100644 index 00000000..d30d2abf Binary files /dev/null and b/jp/.gitbook/assets/image (10) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (10) (1).png b/jp/.gitbook/assets/image (10) (1).png new file mode 100644 index 00000000..f9ca100f Binary files /dev/null and b/jp/.gitbook/assets/image (10) (1).png differ diff --git a/jp/.gitbook/assets/image (10).png b/jp/.gitbook/assets/image (10).png new file mode 100644 index 00000000..c422797f Binary files /dev/null and b/jp/.gitbook/assets/image (10).png differ diff --git a/jp/.gitbook/assets/image (100).png b/jp/.gitbook/assets/image (100).png new file mode 100644 index 00000000..15b5f3cf Binary files /dev/null and b/jp/.gitbook/assets/image (100).png differ diff --git a/jp/.gitbook/assets/image (101).png b/jp/.gitbook/assets/image (101).png new file mode 100644 index 00000000..dcd40ac1 Binary files /dev/null and b/jp/.gitbook/assets/image (101).png differ diff --git a/jp/.gitbook/assets/image (102).png b/jp/.gitbook/assets/image (102).png new file mode 100644 index 00000000..7092eeec Binary files /dev/null and b/jp/.gitbook/assets/image (102).png differ diff --git a/jp/.gitbook/assets/image (103).png b/jp/.gitbook/assets/image (103).png new file mode 100644 index 00000000..1017b0d0 Binary files /dev/null and b/jp/.gitbook/assets/image (103).png differ diff --git a/jp/.gitbook/assets/image (104).png b/jp/.gitbook/assets/image (104).png new file mode 100644 index 00000000..49fd5c1a Binary files /dev/null and b/jp/.gitbook/assets/image (104).png differ diff --git a/jp/.gitbook/assets/image (105).png b/jp/.gitbook/assets/image (105).png new file mode 100644 index 00000000..1252c399 Binary files /dev/null and b/jp/.gitbook/assets/image (105).png differ diff --git a/jp/.gitbook/assets/image (106).png b/jp/.gitbook/assets/image (106).png new file mode 100644 index 00000000..d451097a Binary files /dev/null and b/jp/.gitbook/assets/image (106).png differ diff --git a/jp/.gitbook/assets/image (107).png b/jp/.gitbook/assets/image (107).png new file mode 100644 index 00000000..1d045ece Binary files /dev/null and b/jp/.gitbook/assets/image (107).png differ diff --git a/jp/.gitbook/assets/image (108).png b/jp/.gitbook/assets/image (108).png new file mode 100644 index 00000000..27452ba0 Binary files /dev/null and b/jp/.gitbook/assets/image (108).png differ diff --git a/jp/.gitbook/assets/image (109).png b/jp/.gitbook/assets/image (109).png new file mode 100644 index 00000000..c9815408 Binary files /dev/null and b/jp/.gitbook/assets/image (109).png differ diff --git a/jp/.gitbook/assets/image (11) (1) (1).png b/jp/.gitbook/assets/image (11) (1) (1).png new file mode 100644 index 00000000..043610dd Binary files /dev/null and b/jp/.gitbook/assets/image (11) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (11) (1).png b/jp/.gitbook/assets/image (11) (1).png new file mode 100644 index 00000000..f9ca100f Binary files /dev/null and b/jp/.gitbook/assets/image (11) (1).png differ diff --git a/jp/.gitbook/assets/image (11).png b/jp/.gitbook/assets/image (11).png new file mode 100644 index 00000000..52054e83 Binary files /dev/null and b/jp/.gitbook/assets/image (11).png differ diff --git a/jp/.gitbook/assets/image (110).png b/jp/.gitbook/assets/image (110).png new file mode 100644 index 00000000..2004039f Binary files /dev/null and b/jp/.gitbook/assets/image (110).png differ diff --git a/jp/.gitbook/assets/image (111).png b/jp/.gitbook/assets/image (111).png new file mode 100644 index 00000000..37fb6bc1 Binary files /dev/null and b/jp/.gitbook/assets/image (111).png differ diff --git a/jp/.gitbook/assets/image (112).png b/jp/.gitbook/assets/image (112).png new file mode 100644 index 00000000..f948b4db Binary files /dev/null and b/jp/.gitbook/assets/image (112).png differ diff --git a/jp/.gitbook/assets/image (113).png b/jp/.gitbook/assets/image (113).png new file mode 100644 index 00000000..31431f79 Binary files /dev/null and b/jp/.gitbook/assets/image (113).png differ diff --git a/jp/.gitbook/assets/image (114).png b/jp/.gitbook/assets/image (114).png new file mode 100644 index 00000000..03ded40b Binary files /dev/null and b/jp/.gitbook/assets/image (114).png differ diff --git a/jp/.gitbook/assets/image (115).png b/jp/.gitbook/assets/image (115).png new file mode 100644 index 00000000..03ded40b Binary files /dev/null and b/jp/.gitbook/assets/image (115).png differ diff --git a/jp/.gitbook/assets/image (116).png b/jp/.gitbook/assets/image (116).png new file mode 100644 index 00000000..931081ab Binary files /dev/null and b/jp/.gitbook/assets/image (116).png differ diff --git a/jp/.gitbook/assets/image (117).png b/jp/.gitbook/assets/image (117).png new file mode 100644 index 00000000..67f22d41 Binary files /dev/null and b/jp/.gitbook/assets/image (117).png differ diff --git a/jp/.gitbook/assets/image (118).png b/jp/.gitbook/assets/image (118).png new file mode 100644 index 00000000..fa26086d Binary files /dev/null and b/jp/.gitbook/assets/image (118).png differ diff --git a/jp/.gitbook/assets/image (119).png b/jp/.gitbook/assets/image (119).png new file mode 100644 index 00000000..aedb3eef Binary files /dev/null and b/jp/.gitbook/assets/image (119).png differ diff --git a/jp/.gitbook/assets/image (12) (1) (1).png b/jp/.gitbook/assets/image (12) (1) (1).png new file mode 100644 index 00000000..b48dea68 Binary files /dev/null and b/jp/.gitbook/assets/image (12) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (12) (1).png b/jp/.gitbook/assets/image (12) (1).png new file mode 100644 index 00000000..266b5ed2 Binary files /dev/null and b/jp/.gitbook/assets/image (12) (1).png differ diff --git a/jp/.gitbook/assets/image (12).png b/jp/.gitbook/assets/image (12).png new file mode 100644 index 00000000..ec8005f3 Binary files /dev/null and b/jp/.gitbook/assets/image (12).png differ diff --git a/jp/.gitbook/assets/image (120).png b/jp/.gitbook/assets/image (120).png new file mode 100644 index 00000000..b9adb913 Binary files /dev/null and b/jp/.gitbook/assets/image (120).png differ diff --git a/jp/.gitbook/assets/image (121).png b/jp/.gitbook/assets/image (121).png new file mode 100644 index 00000000..463b6e52 Binary files /dev/null and b/jp/.gitbook/assets/image (121).png differ diff --git a/jp/.gitbook/assets/image (122).png b/jp/.gitbook/assets/image (122).png new file mode 100644 index 00000000..e6b588e0 Binary files /dev/null and b/jp/.gitbook/assets/image (122).png differ diff --git a/jp/.gitbook/assets/image (123).png b/jp/.gitbook/assets/image (123).png new file mode 100644 index 00000000..5d5f93d8 Binary files /dev/null and b/jp/.gitbook/assets/image (123).png differ diff --git a/jp/.gitbook/assets/image (124).png b/jp/.gitbook/assets/image (124).png new file mode 100644 index 00000000..41d3b0d0 Binary files /dev/null and b/jp/.gitbook/assets/image (124).png differ diff --git a/jp/.gitbook/assets/image (125).png b/jp/.gitbook/assets/image (125).png new file mode 100644 index 00000000..6357ab31 Binary files /dev/null and b/jp/.gitbook/assets/image (125).png differ diff --git a/jp/.gitbook/assets/image (126).png b/jp/.gitbook/assets/image (126).png new file mode 100644 index 00000000..afb7257e Binary files /dev/null and b/jp/.gitbook/assets/image (126).png differ diff --git a/jp/.gitbook/assets/image (127).png b/jp/.gitbook/assets/image (127).png new file mode 100644 index 00000000..eddf580e Binary files /dev/null and b/jp/.gitbook/assets/image (127).png differ diff --git a/jp/.gitbook/assets/image (128).png b/jp/.gitbook/assets/image (128).png new file mode 100644 index 00000000..48612bb8 Binary files /dev/null and b/jp/.gitbook/assets/image (128).png differ diff --git a/jp/.gitbook/assets/image (129).png b/jp/.gitbook/assets/image (129).png new file mode 100644 index 00000000..abbd9316 Binary files /dev/null and b/jp/.gitbook/assets/image (129).png differ diff --git a/jp/.gitbook/assets/image (13) (1) (1).png b/jp/.gitbook/assets/image (13) (1) (1).png new file mode 100644 index 00000000..12f51f4e Binary files /dev/null and b/jp/.gitbook/assets/image (13) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (13) (1).png b/jp/.gitbook/assets/image (13) (1).png new file mode 100644 index 00000000..266b5ed2 Binary files /dev/null and b/jp/.gitbook/assets/image (13) (1).png differ diff --git a/jp/.gitbook/assets/image (13).png b/jp/.gitbook/assets/image (13).png new file mode 100644 index 00000000..1137fd83 Binary files /dev/null and b/jp/.gitbook/assets/image (13).png differ diff --git a/jp/.gitbook/assets/image (130).png b/jp/.gitbook/assets/image (130).png new file mode 100644 index 00000000..090c7766 Binary files /dev/null and b/jp/.gitbook/assets/image (130).png differ diff --git a/jp/.gitbook/assets/image (131).png b/jp/.gitbook/assets/image (131).png new file mode 100644 index 00000000..37759572 Binary files /dev/null and b/jp/.gitbook/assets/image (131).png differ diff --git a/jp/.gitbook/assets/image (132).png b/jp/.gitbook/assets/image (132).png new file mode 100644 index 00000000..a86d001a Binary files /dev/null and b/jp/.gitbook/assets/image (132).png differ diff --git a/jp/.gitbook/assets/image (133).png b/jp/.gitbook/assets/image (133).png new file mode 100644 index 00000000..e00ead30 Binary files /dev/null and b/jp/.gitbook/assets/image (133).png differ diff --git a/jp/.gitbook/assets/image (134).png b/jp/.gitbook/assets/image (134).png new file mode 100644 index 00000000..5aa2aa31 Binary files /dev/null and b/jp/.gitbook/assets/image (134).png differ diff --git a/jp/.gitbook/assets/image (135).png b/jp/.gitbook/assets/image (135).png new file mode 100644 index 00000000..582fac7a Binary files /dev/null and b/jp/.gitbook/assets/image (135).png differ diff --git a/jp/.gitbook/assets/image (136).png b/jp/.gitbook/assets/image (136).png new file mode 100644 index 00000000..5d52df7a Binary files /dev/null and b/jp/.gitbook/assets/image (136).png differ diff --git a/jp/.gitbook/assets/image (137).png b/jp/.gitbook/assets/image (137).png new file mode 100644 index 00000000..d00a5ef7 Binary files /dev/null and b/jp/.gitbook/assets/image (137).png differ diff --git a/jp/.gitbook/assets/image (138).png b/jp/.gitbook/assets/image (138).png new file mode 100644 index 00000000..cf2bda02 Binary files /dev/null and b/jp/.gitbook/assets/image (138).png differ diff --git a/jp/.gitbook/assets/image (139).png b/jp/.gitbook/assets/image (139).png new file mode 100644 index 00000000..282972af Binary files /dev/null and b/jp/.gitbook/assets/image (139).png differ diff --git a/jp/.gitbook/assets/image (14) (1) (1).png b/jp/.gitbook/assets/image (14) (1) (1).png new file mode 100644 index 00000000..ca4cc0b4 Binary files /dev/null and b/jp/.gitbook/assets/image (14) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (14) (1).png b/jp/.gitbook/assets/image (14) (1).png new file mode 100644 index 00000000..407fcbe6 Binary files /dev/null and b/jp/.gitbook/assets/image (14) (1).png differ diff --git a/jp/.gitbook/assets/image (14).png b/jp/.gitbook/assets/image (14).png new file mode 100644 index 00000000..7255a2bb Binary files /dev/null and b/jp/.gitbook/assets/image (14).png differ diff --git a/jp/.gitbook/assets/image (140).png b/jp/.gitbook/assets/image (140).png new file mode 100644 index 00000000..c15b0e37 Binary files /dev/null and b/jp/.gitbook/assets/image (140).png differ diff --git a/jp/.gitbook/assets/image (141).png b/jp/.gitbook/assets/image (141).png new file mode 100644 index 00000000..c15b0e37 Binary files /dev/null and b/jp/.gitbook/assets/image (141).png differ diff --git a/jp/.gitbook/assets/image (142).png b/jp/.gitbook/assets/image (142).png new file mode 100644 index 00000000..c15b0e37 Binary files /dev/null and b/jp/.gitbook/assets/image (142).png differ diff --git a/jp/.gitbook/assets/image (143).png b/jp/.gitbook/assets/image (143).png new file mode 100644 index 00000000..c15b0e37 Binary files /dev/null and b/jp/.gitbook/assets/image (143).png differ diff --git a/jp/.gitbook/assets/image (144).png b/jp/.gitbook/assets/image (144).png new file mode 100644 index 00000000..9b474675 Binary files /dev/null and b/jp/.gitbook/assets/image (144).png differ diff --git a/jp/.gitbook/assets/image (145).png b/jp/.gitbook/assets/image (145).png new file mode 100644 index 00000000..b667c52c Binary files /dev/null and b/jp/.gitbook/assets/image (145).png differ diff --git a/jp/.gitbook/assets/image (146).png b/jp/.gitbook/assets/image (146).png new file mode 100644 index 00000000..0acb0ad6 Binary files /dev/null and b/jp/.gitbook/assets/image (146).png differ diff --git a/jp/.gitbook/assets/image (147).png b/jp/.gitbook/assets/image (147).png new file mode 100644 index 00000000..44e66309 Binary files /dev/null and b/jp/.gitbook/assets/image (147).png differ diff --git a/jp/.gitbook/assets/image (148).png b/jp/.gitbook/assets/image (148).png new file mode 100644 index 00000000..b5b56478 Binary files /dev/null and b/jp/.gitbook/assets/image (148).png differ diff --git a/jp/.gitbook/assets/image (149).png b/jp/.gitbook/assets/image (149).png new file mode 100644 index 00000000..b5b56478 Binary files /dev/null and b/jp/.gitbook/assets/image (149).png differ diff --git a/jp/.gitbook/assets/image (15) (1).png b/jp/.gitbook/assets/image (15) (1).png new file mode 100644 index 00000000..db1690fa Binary files /dev/null and b/jp/.gitbook/assets/image (15) (1).png differ diff --git a/jp/.gitbook/assets/image (15).png b/jp/.gitbook/assets/image (15).png new file mode 100644 index 00000000..64e26f7d Binary files /dev/null and b/jp/.gitbook/assets/image (15).png differ diff --git a/jp/.gitbook/assets/image (150).png b/jp/.gitbook/assets/image (150).png new file mode 100644 index 00000000..9a0e697d Binary files /dev/null and b/jp/.gitbook/assets/image (150).png differ diff --git a/jp/.gitbook/assets/image (151).png b/jp/.gitbook/assets/image (151).png new file mode 100644 index 00000000..537b8d30 Binary files /dev/null and b/jp/.gitbook/assets/image (151).png differ diff --git a/jp/.gitbook/assets/image (152).png b/jp/.gitbook/assets/image (152).png new file mode 100644 index 00000000..6a3c26b7 Binary files /dev/null and b/jp/.gitbook/assets/image (152).png differ diff --git a/jp/.gitbook/assets/image (153).png b/jp/.gitbook/assets/image (153).png new file mode 100644 index 00000000..6a3c26b7 Binary files /dev/null and b/jp/.gitbook/assets/image (153).png differ diff --git a/jp/.gitbook/assets/image (154).png b/jp/.gitbook/assets/image (154).png new file mode 100644 index 00000000..6a3c26b7 Binary files /dev/null and b/jp/.gitbook/assets/image (154).png differ diff --git a/jp/.gitbook/assets/image (155).png b/jp/.gitbook/assets/image (155).png new file mode 100644 index 00000000..6a3c26b7 Binary files /dev/null and b/jp/.gitbook/assets/image (155).png differ diff --git a/jp/.gitbook/assets/image (156).png b/jp/.gitbook/assets/image (156).png new file mode 100644 index 00000000..4f2d7dda Binary files /dev/null and b/jp/.gitbook/assets/image (156).png differ diff --git a/jp/.gitbook/assets/image (157).png b/jp/.gitbook/assets/image (157).png new file mode 100644 index 00000000..582917a3 Binary files /dev/null and b/jp/.gitbook/assets/image (157).png differ diff --git a/jp/.gitbook/assets/image (158).png b/jp/.gitbook/assets/image (158).png new file mode 100644 index 00000000..82b11756 Binary files /dev/null and b/jp/.gitbook/assets/image (158).png differ diff --git a/jp/.gitbook/assets/image (159).png b/jp/.gitbook/assets/image (159).png new file mode 100644 index 00000000..b744beee Binary files /dev/null and b/jp/.gitbook/assets/image (159).png differ diff --git a/jp/.gitbook/assets/image (16) (1).png b/jp/.gitbook/assets/image (16) (1).png new file mode 100644 index 00000000..97bdd290 Binary files /dev/null and b/jp/.gitbook/assets/image (16) (1).png differ diff --git a/jp/.gitbook/assets/image (16).png b/jp/.gitbook/assets/image (16).png new file mode 100644 index 00000000..1da79199 Binary files /dev/null and b/jp/.gitbook/assets/image (16).png differ diff --git a/jp/.gitbook/assets/image (160).png b/jp/.gitbook/assets/image (160).png new file mode 100644 index 00000000..1775718f Binary files /dev/null and b/jp/.gitbook/assets/image (160).png differ diff --git a/jp/.gitbook/assets/image (161).png b/jp/.gitbook/assets/image (161).png new file mode 100644 index 00000000..a38848cb Binary files /dev/null and b/jp/.gitbook/assets/image (161).png differ diff --git a/jp/.gitbook/assets/image (162).png b/jp/.gitbook/assets/image (162).png new file mode 100644 index 00000000..47e8ab19 Binary files /dev/null and b/jp/.gitbook/assets/image (162).png differ diff --git a/jp/.gitbook/assets/image (163).png b/jp/.gitbook/assets/image (163).png new file mode 100644 index 00000000..191f796b Binary files /dev/null and b/jp/.gitbook/assets/image (163).png differ diff --git a/jp/.gitbook/assets/image (164).png b/jp/.gitbook/assets/image (164).png new file mode 100644 index 00000000..e9a82a68 Binary files /dev/null and b/jp/.gitbook/assets/image (164).png differ diff --git a/jp/.gitbook/assets/image (165).png b/jp/.gitbook/assets/image (165).png new file mode 100644 index 00000000..4c76b455 Binary files /dev/null and b/jp/.gitbook/assets/image (165).png differ diff --git a/jp/.gitbook/assets/image (166).png b/jp/.gitbook/assets/image (166).png new file mode 100644 index 00000000..ab6ad1bf Binary files /dev/null and b/jp/.gitbook/assets/image (166).png differ diff --git a/jp/.gitbook/assets/image (167).png b/jp/.gitbook/assets/image (167).png new file mode 100644 index 00000000..b925ce6f Binary files /dev/null and b/jp/.gitbook/assets/image (167).png differ diff --git a/jp/.gitbook/assets/image (168).png b/jp/.gitbook/assets/image (168).png new file mode 100644 index 00000000..7e67a52e Binary files /dev/null and b/jp/.gitbook/assets/image (168).png differ diff --git a/jp/.gitbook/assets/image (169).png b/jp/.gitbook/assets/image (169).png new file mode 100644 index 00000000..af6b807f Binary files /dev/null and b/jp/.gitbook/assets/image (169).png differ diff --git a/jp/.gitbook/assets/image (17).png b/jp/.gitbook/assets/image (17).png new file mode 100644 index 00000000..24035bba Binary files /dev/null and b/jp/.gitbook/assets/image (17).png differ diff --git a/jp/.gitbook/assets/image (170).png b/jp/.gitbook/assets/image (170).png new file mode 100644 index 00000000..6fafec52 Binary files /dev/null and b/jp/.gitbook/assets/image (170).png differ diff --git a/jp/.gitbook/assets/image (171).png b/jp/.gitbook/assets/image (171).png new file mode 100644 index 00000000..ab2440ce Binary files /dev/null and b/jp/.gitbook/assets/image (171).png differ diff --git a/jp/.gitbook/assets/image (172).png b/jp/.gitbook/assets/image (172).png new file mode 100644 index 00000000..ab2440ce Binary files /dev/null and b/jp/.gitbook/assets/image (172).png differ diff --git a/jp/.gitbook/assets/image (173).png b/jp/.gitbook/assets/image (173).png new file mode 100644 index 00000000..87b772c7 Binary files /dev/null and b/jp/.gitbook/assets/image (173).png differ diff --git a/jp/.gitbook/assets/image (174).png b/jp/.gitbook/assets/image (174).png new file mode 100644 index 00000000..c8337a34 Binary files /dev/null and b/jp/.gitbook/assets/image (174).png differ diff --git a/jp/.gitbook/assets/image (175).png b/jp/.gitbook/assets/image (175).png new file mode 100644 index 00000000..e2475e35 Binary files /dev/null and b/jp/.gitbook/assets/image (175).png differ diff --git a/jp/.gitbook/assets/image (176).png b/jp/.gitbook/assets/image (176).png new file mode 100644 index 00000000..afbb8d11 Binary files /dev/null and b/jp/.gitbook/assets/image (176).png differ diff --git a/jp/.gitbook/assets/image (177).png b/jp/.gitbook/assets/image (177).png new file mode 100644 index 00000000..afbb8d11 Binary files /dev/null and b/jp/.gitbook/assets/image (177).png differ diff --git a/jp/.gitbook/assets/image (178).png b/jp/.gitbook/assets/image (178).png new file mode 100644 index 00000000..afbb8d11 Binary files /dev/null and b/jp/.gitbook/assets/image (178).png differ diff --git a/jp/.gitbook/assets/image (179).png b/jp/.gitbook/assets/image (179).png new file mode 100644 index 00000000..2a4f6dd9 Binary files /dev/null and b/jp/.gitbook/assets/image (179).png differ diff --git a/jp/.gitbook/assets/image (18).png b/jp/.gitbook/assets/image (18).png new file mode 100644 index 00000000..67c23dc9 Binary files /dev/null and b/jp/.gitbook/assets/image (18).png differ diff --git a/jp/.gitbook/assets/image (180).png b/jp/.gitbook/assets/image (180).png new file mode 100644 index 00000000..ab0267a3 Binary files /dev/null and b/jp/.gitbook/assets/image (180).png differ diff --git a/jp/.gitbook/assets/image (181).png b/jp/.gitbook/assets/image (181).png new file mode 100644 index 00000000..00accf57 Binary files /dev/null and b/jp/.gitbook/assets/image (181).png differ diff --git a/jp/.gitbook/assets/image (182).png b/jp/.gitbook/assets/image (182).png new file mode 100644 index 00000000..087d0a55 Binary files /dev/null and b/jp/.gitbook/assets/image (182).png differ diff --git a/jp/.gitbook/assets/image (183).png b/jp/.gitbook/assets/image (183).png new file mode 100644 index 00000000..339b248a Binary files /dev/null and b/jp/.gitbook/assets/image (183).png differ diff --git a/jp/.gitbook/assets/image (184).png b/jp/.gitbook/assets/image (184).png new file mode 100644 index 00000000..bdaff3e5 Binary files /dev/null and b/jp/.gitbook/assets/image (184).png differ diff --git a/jp/.gitbook/assets/image (185).png b/jp/.gitbook/assets/image (185).png new file mode 100644 index 00000000..bf813e1d Binary files /dev/null and b/jp/.gitbook/assets/image (185).png differ diff --git a/jp/.gitbook/assets/image (186).png b/jp/.gitbook/assets/image (186).png new file mode 100644 index 00000000..7ad3f05c Binary files /dev/null and b/jp/.gitbook/assets/image (186).png differ diff --git a/jp/.gitbook/assets/image (187).png b/jp/.gitbook/assets/image (187).png new file mode 100644 index 00000000..a8997ebb Binary files /dev/null and b/jp/.gitbook/assets/image (187).png differ diff --git a/jp/.gitbook/assets/image (188).png b/jp/.gitbook/assets/image (188).png new file mode 100644 index 00000000..e37de98b Binary files /dev/null and b/jp/.gitbook/assets/image (188).png differ diff --git a/jp/.gitbook/assets/image (189).png b/jp/.gitbook/assets/image (189).png new file mode 100644 index 00000000..30e3fef5 Binary files /dev/null and b/jp/.gitbook/assets/image (189).png differ diff --git a/jp/.gitbook/assets/image (19).png b/jp/.gitbook/assets/image (19).png new file mode 100644 index 00000000..a7215f53 Binary files /dev/null and b/jp/.gitbook/assets/image (19).png differ diff --git a/jp/.gitbook/assets/image (190).png b/jp/.gitbook/assets/image (190).png new file mode 100644 index 00000000..cdb681ea Binary files /dev/null and b/jp/.gitbook/assets/image (190).png differ diff --git a/jp/.gitbook/assets/image (191).png b/jp/.gitbook/assets/image (191).png new file mode 100644 index 00000000..575c375e Binary files /dev/null and b/jp/.gitbook/assets/image (191).png differ diff --git a/jp/.gitbook/assets/image (192).png b/jp/.gitbook/assets/image (192).png new file mode 100644 index 00000000..8a595454 Binary files /dev/null and b/jp/.gitbook/assets/image (192).png differ diff --git a/jp/.gitbook/assets/image (193).png b/jp/.gitbook/assets/image (193).png new file mode 100644 index 00000000..b0dcef49 Binary files /dev/null and b/jp/.gitbook/assets/image (193).png differ diff --git a/jp/.gitbook/assets/image (194).png b/jp/.gitbook/assets/image (194).png new file mode 100644 index 00000000..a69f0552 Binary files /dev/null and b/jp/.gitbook/assets/image (194).png differ diff --git a/jp/.gitbook/assets/image (195).png b/jp/.gitbook/assets/image (195).png new file mode 100644 index 00000000..ef3cfeb4 Binary files /dev/null and b/jp/.gitbook/assets/image (195).png differ diff --git a/jp/.gitbook/assets/image (196).png b/jp/.gitbook/assets/image (196).png new file mode 100644 index 00000000..7a93cf1b Binary files /dev/null and b/jp/.gitbook/assets/image (196).png differ diff --git a/jp/.gitbook/assets/image (197).png b/jp/.gitbook/assets/image (197).png new file mode 100644 index 00000000..fbb913a4 Binary files /dev/null and b/jp/.gitbook/assets/image (197).png differ diff --git a/jp/.gitbook/assets/image (198).png b/jp/.gitbook/assets/image (198).png new file mode 100644 index 00000000..fbb913a4 Binary files /dev/null and b/jp/.gitbook/assets/image (198).png differ diff --git a/jp/.gitbook/assets/image (199).png b/jp/.gitbook/assets/image (199).png new file mode 100644 index 00000000..db3146ac Binary files /dev/null and b/jp/.gitbook/assets/image (199).png differ diff --git a/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..534d1e62 Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..9bb237ea Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..f53e8c4c Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..9440bce8 Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..d8440429 Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..3b4032e4 Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..53c1ecc4 Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..74e23a48 Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..8abf4323 Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..1b7b6c61 Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..1fb04ec0 Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (2) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (2) (1) (1) (1) (1).png new file mode 100644 index 00000000..d60d0845 Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (2) (1) (1) (1).png b/jp/.gitbook/assets/image (2) (1) (1) (1).png new file mode 100644 index 00000000..969a0df7 Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (2) (1) (1).png b/jp/.gitbook/assets/image (2) (1) (1).png new file mode 100644 index 00000000..2e07e318 Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (2) (1).png b/jp/.gitbook/assets/image (2) (1).png new file mode 100644 index 00000000..df5452b2 Binary files /dev/null and b/jp/.gitbook/assets/image (2) (1).png differ diff --git a/jp/.gitbook/assets/image (2).png b/jp/.gitbook/assets/image (2).png new file mode 100644 index 00000000..375a9d00 Binary files /dev/null and b/jp/.gitbook/assets/image (2).png differ diff --git a/jp/.gitbook/assets/image (20).png b/jp/.gitbook/assets/image (20).png new file mode 100644 index 00000000..d7310033 Binary files /dev/null and b/jp/.gitbook/assets/image (20).png differ diff --git a/jp/.gitbook/assets/image (200).png b/jp/.gitbook/assets/image (200).png new file mode 100644 index 00000000..7bfedc18 Binary files /dev/null and b/jp/.gitbook/assets/image (200).png differ diff --git a/jp/.gitbook/assets/image (201).png b/jp/.gitbook/assets/image (201).png new file mode 100644 index 00000000..132b4573 Binary files /dev/null and b/jp/.gitbook/assets/image (201).png differ diff --git a/jp/.gitbook/assets/image (202).png b/jp/.gitbook/assets/image (202).png new file mode 100644 index 00000000..05ba16e3 Binary files /dev/null and b/jp/.gitbook/assets/image (202).png differ diff --git a/jp/.gitbook/assets/image (203).png b/jp/.gitbook/assets/image (203).png new file mode 100644 index 00000000..1b49eda8 Binary files /dev/null and b/jp/.gitbook/assets/image (203).png differ diff --git a/jp/.gitbook/assets/image (204).png b/jp/.gitbook/assets/image (204).png new file mode 100644 index 00000000..35d5a52d Binary files /dev/null and b/jp/.gitbook/assets/image (204).png differ diff --git a/jp/.gitbook/assets/image (205).png b/jp/.gitbook/assets/image (205).png new file mode 100644 index 00000000..38080669 Binary files /dev/null and b/jp/.gitbook/assets/image (205).png differ diff --git a/jp/.gitbook/assets/image (206).png b/jp/.gitbook/assets/image (206).png new file mode 100644 index 00000000..77c2a305 Binary files /dev/null and b/jp/.gitbook/assets/image (206).png differ diff --git a/jp/.gitbook/assets/image (207).png b/jp/.gitbook/assets/image (207).png new file mode 100644 index 00000000..e27de94b Binary files /dev/null and b/jp/.gitbook/assets/image (207).png differ diff --git a/jp/.gitbook/assets/image (208).png b/jp/.gitbook/assets/image (208).png new file mode 100644 index 00000000..110f4ab8 Binary files /dev/null and b/jp/.gitbook/assets/image (208).png differ diff --git a/jp/.gitbook/assets/image (209).png b/jp/.gitbook/assets/image (209).png new file mode 100644 index 00000000..01263d67 Binary files /dev/null and b/jp/.gitbook/assets/image (209).png differ diff --git a/jp/.gitbook/assets/image (21).png b/jp/.gitbook/assets/image (21).png new file mode 100644 index 00000000..aca0d206 Binary files /dev/null and b/jp/.gitbook/assets/image (21).png differ diff --git a/jp/.gitbook/assets/image (210).png b/jp/.gitbook/assets/image (210).png new file mode 100644 index 00000000..99d9805b Binary files /dev/null and b/jp/.gitbook/assets/image (210).png differ diff --git a/jp/.gitbook/assets/image (211).png b/jp/.gitbook/assets/image (211).png new file mode 100644 index 00000000..f5ec6353 Binary files /dev/null and b/jp/.gitbook/assets/image (211).png differ diff --git a/jp/.gitbook/assets/image (212).png b/jp/.gitbook/assets/image (212).png new file mode 100644 index 00000000..ce2b7fa2 Binary files /dev/null and b/jp/.gitbook/assets/image (212).png differ diff --git a/jp/.gitbook/assets/image (213).png b/jp/.gitbook/assets/image (213).png new file mode 100644 index 00000000..5e95c80d Binary files /dev/null and b/jp/.gitbook/assets/image (213).png differ diff --git a/jp/.gitbook/assets/image (214).png b/jp/.gitbook/assets/image (214).png new file mode 100644 index 00000000..beff0e92 Binary files /dev/null and b/jp/.gitbook/assets/image (214).png differ diff --git a/jp/.gitbook/assets/image (215).png b/jp/.gitbook/assets/image (215).png new file mode 100644 index 00000000..beff0e92 Binary files /dev/null and b/jp/.gitbook/assets/image (215).png differ diff --git a/jp/.gitbook/assets/image (216).png b/jp/.gitbook/assets/image (216).png new file mode 100644 index 00000000..66cd4368 Binary files /dev/null and b/jp/.gitbook/assets/image (216).png differ diff --git a/jp/.gitbook/assets/image (217).png b/jp/.gitbook/assets/image (217).png new file mode 100644 index 00000000..9c8d8ef6 Binary files /dev/null and b/jp/.gitbook/assets/image (217).png differ diff --git a/jp/.gitbook/assets/image (218).png b/jp/.gitbook/assets/image (218).png new file mode 100644 index 00000000..9c8d8ef6 Binary files /dev/null and b/jp/.gitbook/assets/image (218).png differ diff --git a/jp/.gitbook/assets/image (219).png b/jp/.gitbook/assets/image (219).png new file mode 100644 index 00000000..ab201b5a Binary files /dev/null and b/jp/.gitbook/assets/image (219).png differ diff --git a/jp/.gitbook/assets/image (22).png b/jp/.gitbook/assets/image (22).png new file mode 100644 index 00000000..30795cc5 Binary files /dev/null and b/jp/.gitbook/assets/image (22).png differ diff --git a/jp/.gitbook/assets/image (220).png b/jp/.gitbook/assets/image (220).png new file mode 100644 index 00000000..ab201b5a Binary files /dev/null and b/jp/.gitbook/assets/image (220).png differ diff --git a/jp/.gitbook/assets/image (221).png b/jp/.gitbook/assets/image (221).png new file mode 100644 index 00000000..2465d073 Binary files /dev/null and b/jp/.gitbook/assets/image (221).png differ diff --git a/jp/.gitbook/assets/image (222).png b/jp/.gitbook/assets/image (222).png new file mode 100644 index 00000000..b0cae168 Binary files /dev/null and b/jp/.gitbook/assets/image (222).png differ diff --git a/jp/.gitbook/assets/image (223).png b/jp/.gitbook/assets/image (223).png new file mode 100644 index 00000000..e9e96860 Binary files /dev/null and b/jp/.gitbook/assets/image (223).png differ diff --git a/jp/.gitbook/assets/image (224).png b/jp/.gitbook/assets/image (224).png new file mode 100644 index 00000000..89fa48e5 Binary files /dev/null and b/jp/.gitbook/assets/image (224).png differ diff --git a/jp/.gitbook/assets/image (225).png b/jp/.gitbook/assets/image (225).png new file mode 100644 index 00000000..98c90724 Binary files /dev/null and b/jp/.gitbook/assets/image (225).png differ diff --git a/jp/.gitbook/assets/image (226).png b/jp/.gitbook/assets/image (226).png new file mode 100644 index 00000000..fc473640 Binary files /dev/null and b/jp/.gitbook/assets/image (226).png differ diff --git a/jp/.gitbook/assets/image (227).png b/jp/.gitbook/assets/image (227).png new file mode 100644 index 00000000..11d4ca10 Binary files /dev/null and b/jp/.gitbook/assets/image (227).png differ diff --git a/jp/.gitbook/assets/image (228).png b/jp/.gitbook/assets/image (228).png new file mode 100644 index 00000000..4a3c3684 Binary files /dev/null and b/jp/.gitbook/assets/image (228).png differ diff --git a/jp/.gitbook/assets/image (229).png b/jp/.gitbook/assets/image (229).png new file mode 100644 index 00000000..5e818d25 Binary files /dev/null and b/jp/.gitbook/assets/image (229).png differ diff --git a/jp/.gitbook/assets/image (23).png b/jp/.gitbook/assets/image (23).png new file mode 100644 index 00000000..a2a9fe4d Binary files /dev/null and b/jp/.gitbook/assets/image (23).png differ diff --git a/jp/.gitbook/assets/image (230).png b/jp/.gitbook/assets/image (230).png new file mode 100644 index 00000000..e44073d2 Binary files /dev/null and b/jp/.gitbook/assets/image (230).png differ diff --git a/jp/.gitbook/assets/image (231).png b/jp/.gitbook/assets/image (231).png new file mode 100644 index 00000000..522ece12 Binary files /dev/null and b/jp/.gitbook/assets/image (231).png differ diff --git a/jp/.gitbook/assets/image (232).png b/jp/.gitbook/assets/image (232).png new file mode 100644 index 00000000..42dd1b6b Binary files /dev/null and b/jp/.gitbook/assets/image (232).png differ diff --git a/jp/.gitbook/assets/image (233).png b/jp/.gitbook/assets/image (233).png new file mode 100644 index 00000000..3620ab32 Binary files /dev/null and b/jp/.gitbook/assets/image (233).png differ diff --git a/jp/.gitbook/assets/image (234).png b/jp/.gitbook/assets/image (234).png new file mode 100644 index 00000000..f8680143 Binary files /dev/null and b/jp/.gitbook/assets/image (234).png differ diff --git a/jp/.gitbook/assets/image (235).png b/jp/.gitbook/assets/image (235).png new file mode 100644 index 00000000..5c0cab30 Binary files /dev/null and b/jp/.gitbook/assets/image (235).png differ diff --git a/jp/.gitbook/assets/image (236).png b/jp/.gitbook/assets/image (236).png new file mode 100644 index 00000000..944f750d Binary files /dev/null and b/jp/.gitbook/assets/image (236).png differ diff --git a/jp/.gitbook/assets/image (237).png b/jp/.gitbook/assets/image (237).png new file mode 100644 index 00000000..762cd662 Binary files /dev/null and b/jp/.gitbook/assets/image (237).png differ diff --git a/jp/.gitbook/assets/image (238).png b/jp/.gitbook/assets/image (238).png new file mode 100644 index 00000000..893a2ff3 Binary files /dev/null and b/jp/.gitbook/assets/image (238).png differ diff --git a/jp/.gitbook/assets/image (239).png b/jp/.gitbook/assets/image (239).png new file mode 100644 index 00000000..74456f29 Binary files /dev/null and b/jp/.gitbook/assets/image (239).png differ diff --git a/jp/.gitbook/assets/image (24).png b/jp/.gitbook/assets/image (24).png new file mode 100644 index 00000000..66e9ab0b Binary files /dev/null and b/jp/.gitbook/assets/image (24).png differ diff --git a/jp/.gitbook/assets/image (240).png b/jp/.gitbook/assets/image (240).png new file mode 100644 index 00000000..bac134aa Binary files /dev/null and b/jp/.gitbook/assets/image (240).png differ diff --git a/jp/.gitbook/assets/image (241).png b/jp/.gitbook/assets/image (241).png new file mode 100644 index 00000000..81e13457 Binary files /dev/null and b/jp/.gitbook/assets/image (241).png differ diff --git a/jp/.gitbook/assets/image (242).png b/jp/.gitbook/assets/image (242).png new file mode 100644 index 00000000..5168b005 Binary files /dev/null and b/jp/.gitbook/assets/image (242).png differ diff --git a/jp/.gitbook/assets/image (243).png b/jp/.gitbook/assets/image (243).png new file mode 100644 index 00000000..c267e84c Binary files /dev/null and b/jp/.gitbook/assets/image (243).png differ diff --git a/jp/.gitbook/assets/image (244).png b/jp/.gitbook/assets/image (244).png new file mode 100644 index 00000000..d6fc2f6f Binary files /dev/null and b/jp/.gitbook/assets/image (244).png differ diff --git a/jp/.gitbook/assets/image (245).png b/jp/.gitbook/assets/image (245).png new file mode 100644 index 00000000..de96ae06 Binary files /dev/null and b/jp/.gitbook/assets/image (245).png differ diff --git a/jp/.gitbook/assets/image (246).png b/jp/.gitbook/assets/image (246).png new file mode 100644 index 00000000..215f10ef Binary files /dev/null and b/jp/.gitbook/assets/image (246).png differ diff --git a/jp/.gitbook/assets/image (247).png b/jp/.gitbook/assets/image (247).png new file mode 100644 index 00000000..0fee7ffa Binary files /dev/null and b/jp/.gitbook/assets/image (247).png differ diff --git a/jp/.gitbook/assets/image (248).png b/jp/.gitbook/assets/image (248).png new file mode 100644 index 00000000..0fee7ffa Binary files /dev/null and b/jp/.gitbook/assets/image (248).png differ diff --git a/jp/.gitbook/assets/image (25).png b/jp/.gitbook/assets/image (25).png new file mode 100644 index 00000000..a8c856ec Binary files /dev/null and b/jp/.gitbook/assets/image (25).png differ diff --git a/jp/.gitbook/assets/image (26).png b/jp/.gitbook/assets/image (26).png new file mode 100644 index 00000000..b06128fd Binary files /dev/null and b/jp/.gitbook/assets/image (26).png differ diff --git a/jp/.gitbook/assets/image (27).png b/jp/.gitbook/assets/image (27).png new file mode 100644 index 00000000..bfde71fa Binary files /dev/null and b/jp/.gitbook/assets/image (27).png differ diff --git a/jp/.gitbook/assets/image (28).png b/jp/.gitbook/assets/image (28).png new file mode 100644 index 00000000..165d029b Binary files /dev/null and b/jp/.gitbook/assets/image (28).png differ diff --git a/jp/.gitbook/assets/image (29).png b/jp/.gitbook/assets/image (29).png new file mode 100644 index 00000000..cd6f0272 Binary files /dev/null and b/jp/.gitbook/assets/image (29).png differ diff --git a/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..8c20eca3 Binary files /dev/null and b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..f53e8c4c Binary files /dev/null and b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..97b7ec86 Binary files /dev/null and b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..2c85a03c Binary files /dev/null and b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..53c1ecc4 Binary files /dev/null and b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..fd470a30 Binary files /dev/null and b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..847ca13d Binary files /dev/null and b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..a23ad8f9 Binary files /dev/null and b/jp/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (3) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (3) (1) (1) (1) (1).png new file mode 100644 index 00000000..cfc2125c Binary files /dev/null and b/jp/.gitbook/assets/image (3) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (3) (1) (1) (1).png b/jp/.gitbook/assets/image (3) (1) (1) (1).png new file mode 100644 index 00000000..f03320e4 Binary files /dev/null and b/jp/.gitbook/assets/image (3) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (3) (1) (1).png b/jp/.gitbook/assets/image (3) (1) (1).png new file mode 100644 index 00000000..a8bb8361 Binary files /dev/null and b/jp/.gitbook/assets/image (3) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (3) (1).png b/jp/.gitbook/assets/image (3) (1).png new file mode 100644 index 00000000..0129d8cc Binary files /dev/null and b/jp/.gitbook/assets/image (3) (1).png differ diff --git a/jp/.gitbook/assets/image (3).png b/jp/.gitbook/assets/image (3).png new file mode 100644 index 00000000..863e3b18 Binary files /dev/null and b/jp/.gitbook/assets/image (3).png differ diff --git a/jp/.gitbook/assets/image (30).png b/jp/.gitbook/assets/image (30).png new file mode 100644 index 00000000..13fa8776 Binary files /dev/null and b/jp/.gitbook/assets/image (30).png differ diff --git a/jp/.gitbook/assets/image (31).png b/jp/.gitbook/assets/image (31).png new file mode 100644 index 00000000..f85301d9 Binary files /dev/null and b/jp/.gitbook/assets/image (31).png differ diff --git a/jp/.gitbook/assets/image (32).png b/jp/.gitbook/assets/image (32).png new file mode 100644 index 00000000..edb14686 Binary files /dev/null and b/jp/.gitbook/assets/image (32).png differ diff --git a/jp/.gitbook/assets/image (33).png b/jp/.gitbook/assets/image (33).png new file mode 100644 index 00000000..1bf35a93 Binary files /dev/null and b/jp/.gitbook/assets/image (33).png differ diff --git a/jp/.gitbook/assets/image (34).png b/jp/.gitbook/assets/image (34).png new file mode 100644 index 00000000..63dc5b27 Binary files /dev/null and b/jp/.gitbook/assets/image (34).png differ diff --git a/jp/.gitbook/assets/image (35).png b/jp/.gitbook/assets/image (35).png new file mode 100644 index 00000000..d23c1e39 Binary files /dev/null and b/jp/.gitbook/assets/image (35).png differ diff --git a/jp/.gitbook/assets/image (36).png b/jp/.gitbook/assets/image (36).png new file mode 100644 index 00000000..c24e33de Binary files /dev/null and b/jp/.gitbook/assets/image (36).png differ diff --git a/jp/.gitbook/assets/image (37).png b/jp/.gitbook/assets/image (37).png new file mode 100644 index 00000000..3d098055 Binary files /dev/null and b/jp/.gitbook/assets/image (37).png differ diff --git a/jp/.gitbook/assets/image (38).png b/jp/.gitbook/assets/image (38).png new file mode 100644 index 00000000..98835603 Binary files /dev/null and b/jp/.gitbook/assets/image (38).png differ diff --git a/jp/.gitbook/assets/image (39).png b/jp/.gitbook/assets/image (39).png new file mode 100644 index 00000000..b4e0be6f Binary files /dev/null and b/jp/.gitbook/assets/image (39).png differ diff --git a/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..0ef5f751 Binary files /dev/null and b/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..7260f11e Binary files /dev/null and b/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..5857b506 Binary files /dev/null and b/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..1bc85be0 Binary files /dev/null and b/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1).png new file mode 100644 index 00000000..e3648c1d Binary files /dev/null and b/jp/.gitbook/assets/image (4) (1) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (4) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (4) (1) (1) (1) (1).png new file mode 100644 index 00000000..1592de41 Binary files /dev/null and b/jp/.gitbook/assets/image (4) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (4) (1) (1) (1).png b/jp/.gitbook/assets/image (4) (1) (1) (1).png new file mode 100644 index 00000000..c2fb7452 Binary files /dev/null and b/jp/.gitbook/assets/image (4) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (4) (1) (1).png b/jp/.gitbook/assets/image (4) (1) (1).png new file mode 100644 index 00000000..aab0a241 Binary files /dev/null and b/jp/.gitbook/assets/image (4) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (4) (1).png b/jp/.gitbook/assets/image (4) (1).png new file mode 100644 index 00000000..96ee571c Binary files /dev/null and b/jp/.gitbook/assets/image (4) (1).png differ diff --git a/jp/.gitbook/assets/image (4).png b/jp/.gitbook/assets/image (4).png new file mode 100644 index 00000000..4716396f Binary files /dev/null and b/jp/.gitbook/assets/image (4).png differ diff --git a/jp/.gitbook/assets/image (40).png b/jp/.gitbook/assets/image (40).png new file mode 100644 index 00000000..472d6e85 Binary files /dev/null and b/jp/.gitbook/assets/image (40).png differ diff --git a/jp/.gitbook/assets/image (41).png b/jp/.gitbook/assets/image (41).png new file mode 100644 index 00000000..1b285bca Binary files /dev/null and b/jp/.gitbook/assets/image (41).png differ diff --git a/jp/.gitbook/assets/image (42).png b/jp/.gitbook/assets/image (42).png new file mode 100644 index 00000000..46e504d2 Binary files /dev/null and b/jp/.gitbook/assets/image (42).png differ diff --git a/jp/.gitbook/assets/image (43).png b/jp/.gitbook/assets/image (43).png new file mode 100644 index 00000000..ece9b013 Binary files /dev/null and b/jp/.gitbook/assets/image (43).png differ diff --git a/jp/.gitbook/assets/image (44).png b/jp/.gitbook/assets/image (44).png new file mode 100644 index 00000000..c6c01ed0 Binary files /dev/null and b/jp/.gitbook/assets/image (44).png differ diff --git a/jp/.gitbook/assets/image (45).png b/jp/.gitbook/assets/image (45).png new file mode 100644 index 00000000..41304c49 Binary files /dev/null and b/jp/.gitbook/assets/image (45).png differ diff --git a/jp/.gitbook/assets/image (46).png b/jp/.gitbook/assets/image (46).png new file mode 100644 index 00000000..63cd1e76 Binary files /dev/null and b/jp/.gitbook/assets/image (46).png differ diff --git a/jp/.gitbook/assets/image (47).png b/jp/.gitbook/assets/image (47).png new file mode 100644 index 00000000..c0c72136 Binary files /dev/null and b/jp/.gitbook/assets/image (47).png differ diff --git a/jp/.gitbook/assets/image (48).png b/jp/.gitbook/assets/image (48).png new file mode 100644 index 00000000..421496ab Binary files /dev/null and b/jp/.gitbook/assets/image (48).png differ diff --git a/jp/.gitbook/assets/image (49).png b/jp/.gitbook/assets/image (49).png new file mode 100644 index 00000000..6fa220cf Binary files /dev/null and b/jp/.gitbook/assets/image (49).png differ diff --git a/jp/.gitbook/assets/image (5) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (5) (1) (1) (1) (1).png new file mode 100644 index 00000000..47df9c32 Binary files /dev/null and b/jp/.gitbook/assets/image (5) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (5) (1) (1) (1).png b/jp/.gitbook/assets/image (5) (1) (1) (1).png new file mode 100644 index 00000000..bbeaaa87 Binary files /dev/null and b/jp/.gitbook/assets/image (5) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (5) (1) (1).png b/jp/.gitbook/assets/image (5) (1) (1).png new file mode 100644 index 00000000..ddfe5a6e Binary files /dev/null and b/jp/.gitbook/assets/image (5) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (5) (1).png b/jp/.gitbook/assets/image (5) (1).png new file mode 100644 index 00000000..96e141f5 Binary files /dev/null and b/jp/.gitbook/assets/image (5) (1).png differ diff --git a/jp/.gitbook/assets/image (5).png b/jp/.gitbook/assets/image (5).png new file mode 100644 index 00000000..9fea23f6 Binary files /dev/null and b/jp/.gitbook/assets/image (5).png differ diff --git a/jp/.gitbook/assets/image (50).png b/jp/.gitbook/assets/image (50).png new file mode 100644 index 00000000..cfc68f54 Binary files /dev/null and b/jp/.gitbook/assets/image (50).png differ diff --git a/jp/.gitbook/assets/image (51).png b/jp/.gitbook/assets/image (51).png new file mode 100644 index 00000000..c16201b5 Binary files /dev/null and b/jp/.gitbook/assets/image (51).png differ diff --git a/jp/.gitbook/assets/image (52).png b/jp/.gitbook/assets/image (52).png new file mode 100644 index 00000000..4d91b1a3 Binary files /dev/null and b/jp/.gitbook/assets/image (52).png differ diff --git a/jp/.gitbook/assets/image (53).png b/jp/.gitbook/assets/image (53).png new file mode 100644 index 00000000..dbcb27db Binary files /dev/null and b/jp/.gitbook/assets/image (53).png differ diff --git a/jp/.gitbook/assets/image (54).png b/jp/.gitbook/assets/image (54).png new file mode 100644 index 00000000..a945f99a Binary files /dev/null and b/jp/.gitbook/assets/image (54).png differ diff --git a/jp/.gitbook/assets/image (55).png b/jp/.gitbook/assets/image (55).png new file mode 100644 index 00000000..cad82e8f Binary files /dev/null and b/jp/.gitbook/assets/image (55).png differ diff --git a/jp/.gitbook/assets/image (56).png b/jp/.gitbook/assets/image (56).png new file mode 100644 index 00000000..75ef2703 Binary files /dev/null and b/jp/.gitbook/assets/image (56).png differ diff --git a/jp/.gitbook/assets/image (57).png b/jp/.gitbook/assets/image (57).png new file mode 100644 index 00000000..43831ce8 Binary files /dev/null and b/jp/.gitbook/assets/image (57).png differ diff --git a/jp/.gitbook/assets/image (58).png b/jp/.gitbook/assets/image (58).png new file mode 100644 index 00000000..57664b77 Binary files /dev/null and b/jp/.gitbook/assets/image (58).png differ diff --git a/jp/.gitbook/assets/image (59).png b/jp/.gitbook/assets/image (59).png new file mode 100644 index 00000000..f3e176f4 Binary files /dev/null and b/jp/.gitbook/assets/image (59).png differ diff --git a/jp/.gitbook/assets/image (6) (1) (1) (1) (1).png b/jp/.gitbook/assets/image (6) (1) (1) (1) (1).png new file mode 100644 index 00000000..6ea5c614 Binary files /dev/null and b/jp/.gitbook/assets/image (6) (1) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (6) (1) (1) (1).png b/jp/.gitbook/assets/image (6) (1) (1) (1).png new file mode 100644 index 00000000..78e015bb Binary files /dev/null and b/jp/.gitbook/assets/image (6) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (6) (1) (1).png b/jp/.gitbook/assets/image (6) (1) (1).png new file mode 100644 index 00000000..cc5d1574 Binary files /dev/null and b/jp/.gitbook/assets/image (6) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (6) (1).png b/jp/.gitbook/assets/image (6) (1).png new file mode 100644 index 00000000..2de12b04 Binary files /dev/null and b/jp/.gitbook/assets/image (6) (1).png differ diff --git a/jp/.gitbook/assets/image (6).png b/jp/.gitbook/assets/image (6).png new file mode 100644 index 00000000..5f5ac874 Binary files /dev/null and b/jp/.gitbook/assets/image (6).png differ diff --git a/jp/.gitbook/assets/image (60).png b/jp/.gitbook/assets/image (60).png new file mode 100644 index 00000000..55087c7f Binary files /dev/null and b/jp/.gitbook/assets/image (60).png differ diff --git a/jp/.gitbook/assets/image (61).png b/jp/.gitbook/assets/image (61).png new file mode 100644 index 00000000..9355e1db Binary files /dev/null and b/jp/.gitbook/assets/image (61).png differ diff --git a/jp/.gitbook/assets/image (62).png b/jp/.gitbook/assets/image (62).png new file mode 100644 index 00000000..cd55d005 Binary files /dev/null and b/jp/.gitbook/assets/image (62).png differ diff --git a/jp/.gitbook/assets/image (63).png b/jp/.gitbook/assets/image (63).png new file mode 100644 index 00000000..640e5aa1 Binary files /dev/null and b/jp/.gitbook/assets/image (63).png differ diff --git a/jp/.gitbook/assets/image (64).png b/jp/.gitbook/assets/image (64).png new file mode 100644 index 00000000..74f46ef7 Binary files /dev/null and b/jp/.gitbook/assets/image (64).png differ diff --git a/jp/.gitbook/assets/image (65).png b/jp/.gitbook/assets/image (65).png new file mode 100644 index 00000000..fa3b6539 Binary files /dev/null and b/jp/.gitbook/assets/image (65).png differ diff --git a/jp/.gitbook/assets/image (66).png b/jp/.gitbook/assets/image (66).png new file mode 100644 index 00000000..4d6b3678 Binary files /dev/null and b/jp/.gitbook/assets/image (66).png differ diff --git a/jp/.gitbook/assets/image (67).png b/jp/.gitbook/assets/image (67).png new file mode 100644 index 00000000..7630887e Binary files /dev/null and b/jp/.gitbook/assets/image (67).png differ diff --git a/jp/.gitbook/assets/image (68).png b/jp/.gitbook/assets/image (68).png new file mode 100644 index 00000000..bb008175 Binary files /dev/null and b/jp/.gitbook/assets/image (68).png differ diff --git a/jp/.gitbook/assets/image (69).png b/jp/.gitbook/assets/image (69).png new file mode 100644 index 00000000..bf08a9a0 Binary files /dev/null and b/jp/.gitbook/assets/image (69).png differ diff --git a/jp/.gitbook/assets/image (7) (1) (1) (1).png b/jp/.gitbook/assets/image (7) (1) (1) (1).png new file mode 100644 index 00000000..2f6c180b Binary files /dev/null and b/jp/.gitbook/assets/image (7) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (7) (1) (1).png b/jp/.gitbook/assets/image (7) (1) (1).png new file mode 100644 index 00000000..77f751d5 Binary files /dev/null and b/jp/.gitbook/assets/image (7) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (7) (1).png b/jp/.gitbook/assets/image (7) (1).png new file mode 100644 index 00000000..cc5d1574 Binary files /dev/null and b/jp/.gitbook/assets/image (7) (1).png differ diff --git a/jp/.gitbook/assets/image (7).png b/jp/.gitbook/assets/image (7).png new file mode 100644 index 00000000..711c6d43 Binary files /dev/null and b/jp/.gitbook/assets/image (7).png differ diff --git a/jp/.gitbook/assets/image (70).png b/jp/.gitbook/assets/image (70).png new file mode 100644 index 00000000..0e078790 Binary files /dev/null and b/jp/.gitbook/assets/image (70).png differ diff --git a/jp/.gitbook/assets/image (71).png b/jp/.gitbook/assets/image (71).png new file mode 100644 index 00000000..66e9ab0b Binary files /dev/null and b/jp/.gitbook/assets/image (71).png differ diff --git a/jp/.gitbook/assets/image (72).png b/jp/.gitbook/assets/image (72).png new file mode 100644 index 00000000..37629876 Binary files /dev/null and b/jp/.gitbook/assets/image (72).png differ diff --git a/jp/.gitbook/assets/image (73).png b/jp/.gitbook/assets/image (73).png new file mode 100644 index 00000000..0e46b7bb Binary files /dev/null and b/jp/.gitbook/assets/image (73).png differ diff --git a/jp/.gitbook/assets/image (74).png b/jp/.gitbook/assets/image (74).png new file mode 100644 index 00000000..1fba4980 Binary files /dev/null and b/jp/.gitbook/assets/image (74).png differ diff --git a/jp/.gitbook/assets/image (75).png b/jp/.gitbook/assets/image (75).png new file mode 100644 index 00000000..357513b3 Binary files /dev/null and b/jp/.gitbook/assets/image (75).png differ diff --git a/jp/.gitbook/assets/image (76).png b/jp/.gitbook/assets/image (76).png new file mode 100644 index 00000000..87d1a9ff Binary files /dev/null and b/jp/.gitbook/assets/image (76).png differ diff --git a/jp/.gitbook/assets/image (77).png b/jp/.gitbook/assets/image (77).png new file mode 100644 index 00000000..0ca666db Binary files /dev/null and b/jp/.gitbook/assets/image (77).png differ diff --git a/jp/.gitbook/assets/image (78).png b/jp/.gitbook/assets/image (78).png new file mode 100644 index 00000000..95702f39 Binary files /dev/null and b/jp/.gitbook/assets/image (78).png differ diff --git a/jp/.gitbook/assets/image (79).png b/jp/.gitbook/assets/image (79).png new file mode 100644 index 00000000..a06e6bc8 Binary files /dev/null and b/jp/.gitbook/assets/image (79).png differ diff --git a/jp/.gitbook/assets/image (8) (1) (1) (1).png b/jp/.gitbook/assets/image (8) (1) (1) (1).png new file mode 100644 index 00000000..da33fb3d Binary files /dev/null and b/jp/.gitbook/assets/image (8) (1) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (8) (1) (1).png b/jp/.gitbook/assets/image (8) (1) (1).png new file mode 100644 index 00000000..b6aeea57 Binary files /dev/null and b/jp/.gitbook/assets/image (8) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (8) (1).png b/jp/.gitbook/assets/image (8) (1).png new file mode 100644 index 00000000..362f260c Binary files /dev/null and b/jp/.gitbook/assets/image (8) (1).png differ diff --git a/jp/.gitbook/assets/image (8).png b/jp/.gitbook/assets/image (8).png new file mode 100644 index 00000000..fecf1d75 Binary files /dev/null and b/jp/.gitbook/assets/image (8).png differ diff --git a/jp/.gitbook/assets/image (80).png b/jp/.gitbook/assets/image (80).png new file mode 100644 index 00000000..69f815c4 Binary files /dev/null and b/jp/.gitbook/assets/image (80).png differ diff --git a/jp/.gitbook/assets/image (81).png b/jp/.gitbook/assets/image (81).png new file mode 100644 index 00000000..1fba4980 Binary files /dev/null and b/jp/.gitbook/assets/image (81).png differ diff --git a/jp/.gitbook/assets/image (82).png b/jp/.gitbook/assets/image (82).png new file mode 100644 index 00000000..dd1b1334 Binary files /dev/null and b/jp/.gitbook/assets/image (82).png differ diff --git a/jp/.gitbook/assets/image (83).png b/jp/.gitbook/assets/image (83).png new file mode 100644 index 00000000..4bfe23de Binary files /dev/null and b/jp/.gitbook/assets/image (83).png differ diff --git a/jp/.gitbook/assets/image (84).png b/jp/.gitbook/assets/image (84).png new file mode 100644 index 00000000..99d8e0f4 Binary files /dev/null and b/jp/.gitbook/assets/image (84).png differ diff --git a/jp/.gitbook/assets/image (85).png b/jp/.gitbook/assets/image (85).png new file mode 100644 index 00000000..71c56375 Binary files /dev/null and b/jp/.gitbook/assets/image (85).png differ diff --git a/jp/.gitbook/assets/image (86).png b/jp/.gitbook/assets/image (86).png new file mode 100644 index 00000000..52b6cebd Binary files /dev/null and b/jp/.gitbook/assets/image (86).png differ diff --git a/jp/.gitbook/assets/image (87).png b/jp/.gitbook/assets/image (87).png new file mode 100644 index 00000000..f9380eb7 Binary files /dev/null and b/jp/.gitbook/assets/image (87).png differ diff --git a/jp/.gitbook/assets/image (88).png b/jp/.gitbook/assets/image (88).png new file mode 100644 index 00000000..d9a84009 Binary files /dev/null and b/jp/.gitbook/assets/image (88).png differ diff --git a/jp/.gitbook/assets/image (89).png b/jp/.gitbook/assets/image (89).png new file mode 100644 index 00000000..654a8b60 Binary files /dev/null and b/jp/.gitbook/assets/image (89).png differ diff --git a/jp/.gitbook/assets/image (9) (1) (1).png b/jp/.gitbook/assets/image (9) (1) (1).png new file mode 100644 index 00000000..16115b07 Binary files /dev/null and b/jp/.gitbook/assets/image (9) (1) (1).png differ diff --git a/jp/.gitbook/assets/image (9) (1).png b/jp/.gitbook/assets/image (9) (1).png new file mode 100644 index 00000000..0fa44bbd Binary files /dev/null and b/jp/.gitbook/assets/image (9) (1).png differ diff --git a/jp/.gitbook/assets/image (9).png b/jp/.gitbook/assets/image (9).png new file mode 100644 index 00000000..7b3e9f47 Binary files /dev/null and b/jp/.gitbook/assets/image (9).png differ diff --git a/jp/.gitbook/assets/image (90).png b/jp/.gitbook/assets/image (90).png new file mode 100644 index 00000000..66e9ab0b Binary files /dev/null and b/jp/.gitbook/assets/image (90).png differ diff --git a/jp/.gitbook/assets/image (91).png b/jp/.gitbook/assets/image (91).png new file mode 100644 index 00000000..1fba4980 Binary files /dev/null and b/jp/.gitbook/assets/image (91).png differ diff --git a/jp/.gitbook/assets/image (92).png b/jp/.gitbook/assets/image (92).png new file mode 100644 index 00000000..626b4e63 Binary files /dev/null and b/jp/.gitbook/assets/image (92).png differ diff --git a/jp/.gitbook/assets/image (93).png b/jp/.gitbook/assets/image (93).png new file mode 100644 index 00000000..4bcf7790 Binary files /dev/null and b/jp/.gitbook/assets/image (93).png differ diff --git a/jp/.gitbook/assets/image (94).png b/jp/.gitbook/assets/image (94).png new file mode 100644 index 00000000..c78be695 Binary files /dev/null and b/jp/.gitbook/assets/image (94).png differ diff --git a/jp/.gitbook/assets/image (95).png b/jp/.gitbook/assets/image (95).png new file mode 100644 index 00000000..93526bc5 Binary files /dev/null and b/jp/.gitbook/assets/image (95).png differ diff --git a/jp/.gitbook/assets/image (96).png b/jp/.gitbook/assets/image (96).png new file mode 100644 index 00000000..d3699630 Binary files /dev/null and b/jp/.gitbook/assets/image (96).png differ diff --git a/jp/.gitbook/assets/image (97).png b/jp/.gitbook/assets/image (97).png new file mode 100644 index 00000000..fd97348a Binary files /dev/null and b/jp/.gitbook/assets/image (97).png differ diff --git a/jp/.gitbook/assets/image (98).png b/jp/.gitbook/assets/image (98).png new file mode 100644 index 00000000..21af97cb Binary files /dev/null and b/jp/.gitbook/assets/image (98).png differ diff --git a/jp/.gitbook/assets/image (99).png b/jp/.gitbook/assets/image (99).png new file mode 100644 index 00000000..9a25a205 Binary files /dev/null and b/jp/.gitbook/assets/image (99).png differ diff --git a/jp/.gitbook/assets/image-10.png b/jp/.gitbook/assets/image-10.png new file mode 100644 index 00000000..9043d529 Binary files /dev/null and b/jp/.gitbook/assets/image-10.png differ diff --git a/jp/.gitbook/assets/image-11.png b/jp/.gitbook/assets/image-11.png new file mode 100644 index 00000000..ba22b08f Binary files /dev/null and b/jp/.gitbook/assets/image-11.png differ diff --git a/jp/.gitbook/assets/image-13.png b/jp/.gitbook/assets/image-13.png new file mode 100644 index 00000000..90761dd3 Binary files /dev/null and b/jp/.gitbook/assets/image-13.png differ diff --git a/jp/.gitbook/assets/image-14.png b/jp/.gitbook/assets/image-14.png new file mode 100644 index 00000000..21f2fcf6 Binary files /dev/null and b/jp/.gitbook/assets/image-14.png differ diff --git a/jp/.gitbook/assets/image-15.png b/jp/.gitbook/assets/image-15.png new file mode 100644 index 00000000..74ef5180 Binary files /dev/null and b/jp/.gitbook/assets/image-15.png differ diff --git a/jp/.gitbook/assets/image-16.png b/jp/.gitbook/assets/image-16.png new file mode 100644 index 00000000..7c5d7b35 Binary files /dev/null and b/jp/.gitbook/assets/image-16.png differ diff --git a/jp/.gitbook/assets/image-17.png b/jp/.gitbook/assets/image-17.png new file mode 100644 index 00000000..e72af9e5 Binary files /dev/null and b/jp/.gitbook/assets/image-17.png differ diff --git a/jp/.gitbook/assets/image-18.png b/jp/.gitbook/assets/image-18.png new file mode 100644 index 00000000..82105867 Binary files /dev/null and b/jp/.gitbook/assets/image-18.png differ diff --git a/jp/.gitbook/assets/image-19.png b/jp/.gitbook/assets/image-19.png new file mode 100644 index 00000000..a4af82de Binary files /dev/null and b/jp/.gitbook/assets/image-19.png differ diff --git a/jp/.gitbook/assets/image-2.png b/jp/.gitbook/assets/image-2.png new file mode 100644 index 00000000..824cac97 Binary files /dev/null and b/jp/.gitbook/assets/image-2.png differ diff --git a/jp/.gitbook/assets/image-20.png b/jp/.gitbook/assets/image-20.png new file mode 100644 index 00000000..ad1e0f94 Binary files /dev/null and b/jp/.gitbook/assets/image-20.png differ diff --git a/jp/.gitbook/assets/image-20231210143654461 (1).png b/jp/.gitbook/assets/image-20231210143654461 (1).png new file mode 100644 index 00000000..2e234f6c Binary files /dev/null and b/jp/.gitbook/assets/image-20231210143654461 (1).png differ diff --git a/jp/.gitbook/assets/image-20231210143654461.png b/jp/.gitbook/assets/image-20231210143654461.png new file mode 100644 index 00000000..f1c30158 Binary files /dev/null and b/jp/.gitbook/assets/image-20231210143654461.png differ diff --git a/jp/.gitbook/assets/image-3.png b/jp/.gitbook/assets/image-3.png new file mode 100644 index 00000000..1e571664 Binary files /dev/null and b/jp/.gitbook/assets/image-3.png differ diff --git a/jp/.gitbook/assets/image-4.png b/jp/.gitbook/assets/image-4.png new file mode 100644 index 00000000..ea6193ac Binary files /dev/null and b/jp/.gitbook/assets/image-4.png differ diff --git a/jp/.gitbook/assets/image-5.png b/jp/.gitbook/assets/image-5.png new file mode 100644 index 00000000..08850d3a Binary files /dev/null and b/jp/.gitbook/assets/image-5.png differ diff --git a/jp/.gitbook/assets/image-6.png b/jp/.gitbook/assets/image-6.png new file mode 100644 index 00000000..2dfdddda Binary files /dev/null and b/jp/.gitbook/assets/image-6.png differ diff --git a/jp/.gitbook/assets/image-7.png b/jp/.gitbook/assets/image-7.png new file mode 100644 index 00000000..11fefe0c Binary files /dev/null and b/jp/.gitbook/assets/image-7.png differ diff --git a/jp/.gitbook/assets/image-8.png b/jp/.gitbook/assets/image-8.png new file mode 100644 index 00000000..86e2f98d Binary files /dev/null and b/jp/.gitbook/assets/image-8.png differ diff --git a/jp/.gitbook/assets/image-9.png b/jp/.gitbook/assets/image-9.png new file mode 100644 index 00000000..9043d529 Binary files /dev/null and b/jp/.gitbook/assets/image-9.png differ diff --git a/jp/.gitbook/assets/image.png b/jp/.gitbook/assets/image.png new file mode 100644 index 00000000..147eeff5 Binary files /dev/null and b/jp/.gitbook/assets/image.png differ diff --git a/jp/.gitbook/assets/log.jpeg b/jp/.gitbook/assets/log.jpeg new file mode 100644 index 00000000..290c6c06 Binary files /dev/null and b/jp/.gitbook/assets/log.jpeg differ diff --git a/jp/.gitbook/assets/moderation1.png b/jp/.gitbook/assets/moderation1.png new file mode 100644 index 00000000..116b610a Binary files /dev/null and b/jp/.gitbook/assets/moderation1.png differ diff --git a/jp/.gitbook/assets/moderation2.png b/jp/.gitbook/assets/moderation2.png new file mode 100644 index 00000000..26819fdd Binary files /dev/null and b/jp/.gitbook/assets/moderation2.png differ diff --git a/jp/.gitbook/assets/moderation3.png b/jp/.gitbook/assets/moderation3.png new file mode 100644 index 00000000..82092ad5 Binary files /dev/null and b/jp/.gitbook/assets/moderation3.png differ diff --git a/jp/.gitbook/assets/moderation4.png b/jp/.gitbook/assets/moderation4.png new file mode 100644 index 00000000..5c997a66 Binary files /dev/null and b/jp/.gitbook/assets/moderation4.png differ diff --git a/jp/.gitbook/assets/moderation_settings.png b/jp/.gitbook/assets/moderation_settings.png new file mode 100644 index 00000000..4d7d9b91 Binary files /dev/null and b/jp/.gitbook/assets/moderation_settings.png differ diff --git a/jp/.gitbook/assets/moderation_tet.png b/jp/.gitbook/assets/moderation_tet.png new file mode 100644 index 00000000..dccc45af Binary files /dev/null and b/jp/.gitbook/assets/moderation_tet.png differ diff --git a/jp/.gitbook/assets/ngrock.png b/jp/.gitbook/assets/ngrock.png new file mode 100644 index 00000000..379d712f Binary files /dev/null and b/jp/.gitbook/assets/ngrock.png differ diff --git a/jp/.gitbook/assets/notion.png b/jp/.gitbook/assets/notion.png new file mode 100644 index 00000000..8948c674 Binary files /dev/null and b/jp/.gitbook/assets/notion.png differ diff --git a/jp/.gitbook/assets/ollama-config-zh.png b/jp/.gitbook/assets/ollama-config-zh.png new file mode 100644 index 00000000..d7b9e34b Binary files /dev/null and b/jp/.gitbook/assets/ollama-config-zh.png differ diff --git a/jp/.gitbook/assets/ollama-use-model.png b/jp/.gitbook/assets/ollama-use-model.png new file mode 100644 index 00000000..8ee0e898 Binary files /dev/null and b/jp/.gitbook/assets/ollama-use-model.png differ diff --git a/jp/.gitbook/assets/ollama.png b/jp/.gitbook/assets/ollama.png new file mode 100644 index 00000000..8cd2cf1e Binary files /dev/null and b/jp/.gitbook/assets/ollama.png differ diff --git a/jp/.gitbook/assets/openaiKey.png b/jp/.gitbook/assets/openaiKey.png new file mode 100644 index 00000000..f0e0605d Binary files /dev/null and b/jp/.gitbook/assets/openaiKey.png differ diff --git a/jp/.gitbook/assets/output (1) (1).png b/jp/.gitbook/assets/output (1) (1).png new file mode 100644 index 00000000..f30d93e0 Binary files /dev/null and b/jp/.gitbook/assets/output (1) (1).png differ diff --git a/jp/.gitbook/assets/output (1) (2).png b/jp/.gitbook/assets/output (1) (2).png new file mode 100644 index 00000000..6ffaef25 Binary files /dev/null and b/jp/.gitbook/assets/output (1) (2).png differ diff --git a/jp/.gitbook/assets/output (1) (3).png b/jp/.gitbook/assets/output (1) (3).png new file mode 100644 index 00000000..c178f7b3 Binary files /dev/null and b/jp/.gitbook/assets/output (1) (3).png differ diff --git a/jp/.gitbook/assets/output (1) (4).png b/jp/.gitbook/assets/output (1) (4).png new file mode 100644 index 00000000..b9b47d2f Binary files /dev/null and b/jp/.gitbook/assets/output (1) (4).png differ diff --git a/jp/.gitbook/assets/output (1) (5).png b/jp/.gitbook/assets/output (1) (5).png new file mode 100644 index 00000000..88b9958f Binary files /dev/null and b/jp/.gitbook/assets/output (1) (5).png differ diff --git a/jp/.gitbook/assets/output (1) (6).png b/jp/.gitbook/assets/output (1) (6).png new file mode 100644 index 00000000..e64fb027 Binary files /dev/null and b/jp/.gitbook/assets/output (1) (6).png differ diff --git a/jp/.gitbook/assets/output (1).png b/jp/.gitbook/assets/output (1).png new file mode 100644 index 00000000..18186459 Binary files /dev/null and b/jp/.gitbook/assets/output (1).png differ diff --git a/jp/.gitbook/assets/output (2) (1).png b/jp/.gitbook/assets/output (2) (1).png new file mode 100644 index 00000000..b408c8a4 Binary files /dev/null and b/jp/.gitbook/assets/output (2) (1).png differ diff --git a/jp/.gitbook/assets/output (2) (2).png b/jp/.gitbook/assets/output (2) (2).png new file mode 100644 index 00000000..07294e06 Binary files /dev/null and b/jp/.gitbook/assets/output (2) (2).png differ diff --git a/jp/.gitbook/assets/output (2) (3).png b/jp/.gitbook/assets/output (2) (3).png new file mode 100644 index 00000000..cd4e6615 Binary files /dev/null and b/jp/.gitbook/assets/output (2) (3).png differ diff --git a/jp/.gitbook/assets/output (2) (4).png b/jp/.gitbook/assets/output (2) (4).png new file mode 100644 index 00000000..7755a722 Binary files /dev/null and b/jp/.gitbook/assets/output (2) (4).png differ diff --git a/jp/.gitbook/assets/output (2).png b/jp/.gitbook/assets/output (2).png new file mode 100644 index 00000000..6034f000 Binary files /dev/null and b/jp/.gitbook/assets/output (2).png differ diff --git a/jp/.gitbook/assets/output (3) (1).png b/jp/.gitbook/assets/output (3) (1).png new file mode 100644 index 00000000..27d243d6 Binary files /dev/null and b/jp/.gitbook/assets/output (3) (1).png differ diff --git a/jp/.gitbook/assets/output (3) (2).png b/jp/.gitbook/assets/output (3) (2).png new file mode 100644 index 00000000..672576a5 Binary files /dev/null and b/jp/.gitbook/assets/output (3) (2).png differ diff --git a/jp/.gitbook/assets/output (3) (3).png b/jp/.gitbook/assets/output (3) (3).png new file mode 100644 index 00000000..b32d4ceb Binary files /dev/null and b/jp/.gitbook/assets/output (3) (3).png differ diff --git a/jp/.gitbook/assets/output (3) (4).png b/jp/.gitbook/assets/output (3) (4).png new file mode 100644 index 00000000..e1e9c7f3 Binary files /dev/null and b/jp/.gitbook/assets/output (3) (4).png differ diff --git a/jp/.gitbook/assets/output (3).png b/jp/.gitbook/assets/output (3).png new file mode 100644 index 00000000..41f63519 Binary files /dev/null and b/jp/.gitbook/assets/output (3).png differ diff --git a/jp/.gitbook/assets/output (4) (1).png b/jp/.gitbook/assets/output (4) (1).png new file mode 100644 index 00000000..9b28d172 Binary files /dev/null and b/jp/.gitbook/assets/output (4) (1).png differ diff --git a/jp/.gitbook/assets/output (4) (2).png b/jp/.gitbook/assets/output (4) (2).png new file mode 100644 index 00000000..bf6b384e Binary files /dev/null and b/jp/.gitbook/assets/output (4) (2).png differ diff --git a/jp/.gitbook/assets/output (4) (3).png b/jp/.gitbook/assets/output (4) (3).png new file mode 100644 index 00000000..ac78f47b Binary files /dev/null and b/jp/.gitbook/assets/output (4) (3).png differ diff --git a/jp/.gitbook/assets/output (4).png b/jp/.gitbook/assets/output (4).png new file mode 100644 index 00000000..0d295d93 Binary files /dev/null and b/jp/.gitbook/assets/output (4).png differ diff --git a/jp/.gitbook/assets/output (5) (1).png b/jp/.gitbook/assets/output (5) (1).png new file mode 100644 index 00000000..048f95e8 Binary files /dev/null and b/jp/.gitbook/assets/output (5) (1).png differ diff --git a/jp/.gitbook/assets/output (5) (2).png b/jp/.gitbook/assets/output (5) (2).png new file mode 100644 index 00000000..bea18469 Binary files /dev/null and b/jp/.gitbook/assets/output (5) (2).png differ diff --git a/jp/.gitbook/assets/output (5).png b/jp/.gitbook/assets/output (5).png new file mode 100644 index 00000000..ee08880e Binary files /dev/null and b/jp/.gitbook/assets/output (5).png differ diff --git a/jp/.gitbook/assets/output (6) (1).png b/jp/.gitbook/assets/output (6) (1).png new file mode 100644 index 00000000..a744a29d Binary files /dev/null and b/jp/.gitbook/assets/output (6) (1).png differ diff --git a/jp/.gitbook/assets/output (6).png b/jp/.gitbook/assets/output (6).png new file mode 100644 index 00000000..19eddbf1 Binary files /dev/null and b/jp/.gitbook/assets/output (6).png differ diff --git a/jp/.gitbook/assets/output (7) (1).png b/jp/.gitbook/assets/output (7) (1).png new file mode 100644 index 00000000..70a47ee7 Binary files /dev/null and b/jp/.gitbook/assets/output (7) (1).png differ diff --git a/jp/.gitbook/assets/output (7).png b/jp/.gitbook/assets/output (7).png new file mode 100644 index 00000000..fffbac3b Binary files /dev/null and b/jp/.gitbook/assets/output (7).png differ diff --git a/jp/.gitbook/assets/output (8).png b/jp/.gitbook/assets/output (8).png new file mode 100644 index 00000000..f48cff1b Binary files /dev/null and b/jp/.gitbook/assets/output (8).png differ diff --git a/jp/.gitbook/assets/output.png b/jp/.gitbook/assets/output.png new file mode 100644 index 00000000..3938faa1 Binary files /dev/null and b/jp/.gitbook/assets/output.png differ diff --git a/jp/.gitbook/assets/screenshot-20231017-092613.png b/jp/.gitbook/assets/screenshot-20231017-092613.png new file mode 100644 index 00000000..43bd4f7f Binary files /dev/null and b/jp/.gitbook/assets/screenshot-20231017-092613.png differ diff --git a/jp/.gitbook/assets/screenshot-20231017-092957.png b/jp/.gitbook/assets/screenshot-20231017-092957.png new file mode 100644 index 00000000..454a22bf Binary files /dev/null and b/jp/.gitbook/assets/screenshot-20231017-092957.png differ diff --git a/jp/.gitbook/assets/screenshot-20231017-111526 (1).png b/jp/.gitbook/assets/screenshot-20231017-111526 (1).png new file mode 100644 index 00000000..e639b4a8 Binary files /dev/null and b/jp/.gitbook/assets/screenshot-20231017-111526 (1).png differ diff --git a/jp/.gitbook/assets/screenshot-20231017-111526.png b/jp/.gitbook/assets/screenshot-20231017-111526.png new file mode 100644 index 00000000..e639b4a8 Binary files /dev/null and b/jp/.gitbook/assets/screenshot-20231017-111526.png differ diff --git a/jp/.gitbook/assets/screenshot-20231017-173613 (1).png b/jp/.gitbook/assets/screenshot-20231017-173613 (1).png new file mode 100644 index 00000000..fae0c480 Binary files /dev/null and b/jp/.gitbook/assets/screenshot-20231017-173613 (1).png differ diff --git a/jp/.gitbook/assets/screenshot-20231017-173613 (2).png b/jp/.gitbook/assets/screenshot-20231017-173613 (2).png new file mode 100644 index 00000000..fae0c480 Binary files /dev/null and b/jp/.gitbook/assets/screenshot-20231017-173613 (2).png differ diff --git a/jp/.gitbook/assets/screenshot-20231017-173613 (3).png b/jp/.gitbook/assets/screenshot-20231017-173613 (3).png new file mode 100644 index 00000000..fae0c480 Binary files /dev/null and b/jp/.gitbook/assets/screenshot-20231017-173613 (3).png differ diff --git a/jp/.gitbook/assets/screenshot-20231017-173613.png b/jp/.gitbook/assets/screenshot-20231017-173613.png new file mode 100644 index 00000000..fae0c480 Binary files /dev/null and b/jp/.gitbook/assets/screenshot-20231017-173613.png differ diff --git a/jp/.gitbook/assets/service-api-page.png b/jp/.gitbook/assets/service-api-page.png new file mode 100644 index 00000000..01d53bd0 Binary files /dev/null and b/jp/.gitbook/assets/service-api-page.png differ diff --git a/jp/.gitbook/assets/sync-notion.png b/jp/.gitbook/assets/sync-notion.png new file mode 100644 index 00000000..fdb788ea Binary files /dev/null and b/jp/.gitbook/assets/sync-notion.png differ diff --git a/jp/.gitbook/assets/weather inquiry.png b/jp/.gitbook/assets/weather inquiry.png new file mode 100644 index 00000000..6852b6b2 Binary files /dev/null and b/jp/.gitbook/assets/weather inquiry.png differ diff --git a/jp/.gitbook/assets/xinference-webpage.png b/jp/.gitbook/assets/xinference-webpage.png new file mode 100644 index 00000000..f45e6e7d Binary files /dev/null and b/jp/.gitbook/assets/xinference-webpage.png differ diff --git a/jp/.gitbook/assets/zeabur-project.png b/jp/.gitbook/assets/zeabur-project.png new file mode 100644 index 00000000..4c6a52b3 Binary files /dev/null and b/jp/.gitbook/assets/zeabur-project.png differ diff --git a/jp/.gitbook/assets/zeabur-region-select.png b/jp/.gitbook/assets/zeabur-region-select.png new file mode 100644 index 00000000..2668649f Binary files /dev/null and b/jp/.gitbook/assets/zeabur-region-select.png differ diff --git a/jp/.gitbook/assets/zeabur-template-overview.jpeg b/jp/.gitbook/assets/zeabur-template-overview.jpeg new file mode 100644 index 00000000..c30cf063 Binary files /dev/null and b/jp/.gitbook/assets/zeabur-template-overview.jpeg differ diff --git a/jp/.gitbook/assets/上下文参数.png b/jp/.gitbook/assets/上下文参数.png new file mode 100644 index 00000000..a6a7172c Binary files /dev/null and b/jp/.gitbook/assets/上下文参数.png differ diff --git a/jp/.gitbook/assets/专家模式.png b/jp/.gitbook/assets/专家模式.png new file mode 100644 index 00000000..68ab3f01 Binary files /dev/null and b/jp/.gitbook/assets/专家模式.png differ diff --git a/jp/.gitbook/assets/参数设置.png b/jp/.gitbook/assets/参数设置.png new file mode 100644 index 00000000..2ac1caee Binary files /dev/null and b/jp/.gitbook/assets/参数设置.png differ diff --git a/jp/.gitbook/assets/快捷键.png b/jp/.gitbook/assets/快捷键.png new file mode 100644 index 00000000..f17ad8f2 Binary files /dev/null and b/jp/.gitbook/assets/快捷键.png differ diff --git a/jp/.gitbook/assets/日志.png b/jp/.gitbook/assets/日志.png new file mode 100644 index 00000000..c76be240 Binary files /dev/null and b/jp/.gitbook/assets/日志.png differ diff --git a/jp/.gitbook/assets/红框.png b/jp/.gitbook/assets/红框.png new file mode 100644 index 00000000..dffe7d1d Binary files /dev/null and b/jp/.gitbook/assets/红框.png differ diff --git a/jp/README.md b/jp/README.md new file mode 100644 index 00000000..fc8082fb --- /dev/null +++ b/jp/README.md @@ -0,0 +1,34 @@ +# Difyへようこそ + +**Dify**は、オープンソースの大規模言語モデル(LLM)アプリケーション開発プラットフォームです。Backend as Serviceと[LLMOps](learn-more/extended-reading/what-is-llmops.md)の理念を融合し、開発者が迅速に生成AIアプリケーションを構築できるようにします。技術者でなくても、AIアプリケーションの定義やデータ運用に参加することができます。 + +Difyには、LLMアプリケーションの構築に必要な主要なテクノロジースタックが組み込まれており、数百のモデルのサポート、直感的なプロンプトの編成インターフェース、高品質のRAGエンジン、堅牢なエージェントフレームワーク、柔軟なフロー編成が含まれています。また、使いやすいインターフェースとAPIも提供されています。これにより、開発者は重複する作業を省き、イノベーションやビジネスニーズに集中することができます。 + +### なぜDifyを使うのか? + +LangChainのようなライブラリを、ハンマーや釘を含むツールボックスと想像してください。それに対し、Difyは生産に近い完全なソリューションを提供します。Difyはスキャフォルドのようなもので、精密なエンジニアリングデザインとソフトウェアテストを経ています。 + +重要なのは、Difyは**オープンソース**であり、専門のフルタイムチームとコミュニティによって構築されています。どのモデルでも、Assistants APIやGPTsの能力を自分でデプロイすることができ、柔軟性と安全性を保ちながらデータの完全なコントロールを維持できます。 + +> 私たちのコミュニティユーザーは、Difyの製品を「シンプルで控えめ、迅速に進化する」と評価しています。\ +> ——路宇、Dify.AI CEO + +以上の情報とこのガイドが、あなたがこの製品を理解する助けになることを願っています。私たちは、Difyがあなたのために作られたものと信じています(Do It For You)。 + +### Difyで何ができるか? + +{% hint style="info" %} +Difyという言葉は、Define + Modifyから来ており、あなたのAIアプリケーションを定義し、継続的に改良することを指します。それはあなたのために作られたものです(Do it for you)。 +{% endhint %} + +* **スタートアップ**、あなたのAIアプリケーションのアイデアを迅速に現実にする。成功も失敗も加速が必要。すでに数十のチームがDifyを使ってMVP(最小実用製品)を構築し、投資を受けたり、POC(概念実証)を通じて顧客の注文を獲得しています。 +* **既存のビジネスにLLMを統合**、LLMを導入して既存のアプリケーションの能力を強化。DifyのRESTful APIを使ってプロンプトとビジネスコードのデカップリングを実現し、Difyの管理画面でデータ、コスト、使用量を追跡し、アプリケーションの効果を継続的に改善。 +* **企業向けLLMインフラとして**、いくつかの銀行や大手インターネット企業がDifyを企業内のLLMゲートウェイとしてデプロイし、生成AI技術の社内普及を加速し、集中管理を実現。 +* **LLMの能力の限界を探る**、技術愛好者でも、Difyを使ってプロンプトエンジニアリングやエージェント技術を簡単に実践。GPTsの導入前に、すでに60,000以上の開発者がDify上で自分の最初のアプリケーションを作成しています。 + +### 次のステップ + +* [**クイックスタート**](guides/application\_orchestrate/creating-an-application.md)を読んで、Difyのアプリケーション構築プロセスを速覧 +* [**Difyをサーバーに自分でデプロイ**](getting-started/install-self-hosted/)する方法と[**オープンソースモデルを接続**](guides/model-configuration/)する方法を学ぶ +* Difyの[**特性仕様**](getting-started/readme/features-and-specifications.md)と**ロードマップ**を理解 +* [**GitHub**](https://github.com/langgenius/dify)で私たちにスターを付け、**コントリビューションガイド**を読む \ No newline at end of file diff --git a/jp/SUMMARY.md b/jp/SUMMARY.md new file mode 100644 index 00000000..3524f2e0 --- /dev/null +++ b/jp/SUMMARY.md @@ -0,0 +1,132 @@ +# 目次 + +## 入門 + +* [欢迎使用 Dify](README.md) + * [特性与技术规格](getting-started/readme/features-and-specifications.md) + * [モデルプロバイダーリスト](getting-started/readme/model-providers.md) +* [クラウドサービス](getting-started/cloud.md) +* [コミュニティ版](getting-started/install-self-hosted/README.md) + * [Docker Compose 部署](getting-started/install-self-hosted/docker-compose.md) + * [ローカルソースコード起動](getting-started/install-self-hosted/local-source-code.md) + * [フロントエンドDockerコンテナを単独起動](getting-started/install-self-hosted/start-the-frontend-docker-container.md) + * [環境変数説明](getting-started/install-self-hosted/environments.md) + +## 手冊 + +* [モデル](guides/model-configuration/README.md) + * [增加新供应商](guides/model-configuration/new-provider.md) + * [预定义模型接入](guides/model-configuration/predefined-model.md) + * [自定义模型接入](guides/model-configuration/customizable-model.md) + * [接入 Hugging Face 上的开源模型](guides/model-configuration/hugging-face.md) + * [接入 Replicate 上的开源模型](guides/model-configuration/replicate.md) + * [接入 Xinference 部署的本地模型](guides/model-configuration/xinference.md) + * [接入 OpenLLM 部署的本地模型](guides/model-configuration/openllm.md) + * [接入 LocalAI 部署的本地模型](guides/model-configuration/localai.md) + * [接入 Ollama 部署的本地模型](guides/model-configuration/ollama.md) + * [負荷分散](guides/model-configuration/load\_balancing.md) +* [构建](guides/application\_orchestrate/README.md) + * [アプリ作成](guides/application\_orchestrate/creating-an-application.md) + * [チャットアシスタント](guides/application\_orchestrate/conversation-application.md) + * [エージェント](guides/application\_orchestrate/agent.md) + * [应用工具箱](guides/application\_orchestrate/app\_toolkits/README.md) + * [コンテンツモデレーション](guides/application\_orchestrate/app\_toolkits/moderation-tool.md) +* [ワークフロー](guides/workflow/README.md) + * [キーコンセプト](guides/workflow/key\_concept.md) + * [ノード説明](guides/workflow/node/README.md) + * [开始](guides/workflow/node/start.md) + * [结束](guides/workflow/node/end.md) + * [直接返信](guides/workflow/node/answer.md) + * [LLM](guides/workflow/node/llm.md) + * [知識検索](guides/workflow/node/knowledge\_retrieval.md) + * [質問分類](guides/workflow/node/question\_classifier.md) + * [条件分岐](guides/workflow/node/ifelse.md) + * [コード実行](guides/workflow/node/code.md) + * [テンプレート変換](guides/workflow/node/template.md) + * [変数集約](guides/workflow/node/variable\_assigner.md) + * [イテレーション](guides/workflow/node/iteration.md) + * [パラメータ抽出](guides/workflow/node/parameter\_extractor.md) + * [HTTPリクエスト](guides/workflow/node/http\_request.md) + * [工具](guides/workflow/node/tools.md) + * [プレビューとデバッグ](guides/workflow/debug\_and\_preview/README.md) + * [预览与运行](guides/workflow/debug\_and\_preview/yu-lan-yu-yun-hang.md) + * [ステップデバッグ](guides/workflow/debug\_and\_preview/step\_run.md) + * [対話/実行ログ](guides/workflow/debug\_and\_preview/log.md) + * [チェックリスト](guides/workflow/debug\_and\_preview/checklist.md) + * [実行履歴](guides/workflow/debug\_and\_preview/history.md) + * [アプリ公開](guides/workflow/publish.md) +* [ナレッジベース](guides/knowledge-base/README.md) + * [ナレッジベース作成&ドキュメントアップロード](guides/knowledge-base/create\_knowledge\_and\_upload\_documents.md) + * [ナレッジベースおよびドキュメントのメンテナンス](guides/knowledge-base/knowledge\_and\_documents\_maintenance.md) + * [アプリ内でのナレッジベース統合](guides/knowledge-base/integrate\_knowledge\_within\_application.md) + * [リコールテスト/引用帰属](guides/knowledge-base/retrieval\_test\_and\_citation.md) + * [Notion からデータをインポート](guides/knowledge-base/sync-from-notion.md) + * [ウェブサイトからデータをインポート](guides/knowledge-base/sync\_from\_website.md) + * [API 経由でナレッジベースをメンテナンス](guides/knowledge-base/maintain-dataset-via-api.md) + * [外部データツール](guides/knowledge-base/external\_data\_tool.md) +* [工具](guides/gong-ju.md) + * [クイック統合ツール](guides/tools/quick-tool-integration.md) + * [高度統合ツール](guides/tools/advanced-tool-integration.md) + * [工具配置](guides/tools/tool-configuration/README.md) + * [StableDiffusion](guides/tools/tool-configuration/stable-diffusion.md) + * [SearXNG](guides/tools/tool-configuration/searxng.md) +* [アプリ公開](guides/application-publishing/README.md) + * [公開 Web サイトとして公開](guides/application-publishing/launch-your-webapp-quickly/README.md) + * [Web アプリの設定](guides/application-publishing/launch-your-webapp-quickly/web-app-settings.md) + * [テキスト生成アプリ](guides/application-publishing/launch-your-webapp-quickly/text-generator.md) + * [対話型アプリ](guides/application-publishing/launch-your-webapp-quickly/conversation-application.md) + * [API ベースの開発](guides/application-publishing/developing-with-apis.md) + * [フロントエンドコンポーネントベースの再開発](guides/application-publishing/based-on-frontend-templates.md) +* [アノテーション](guides/biao-zhu/README.md) + * [ログとアノテーション](guides/biao-zhu/logs.md) + * [アノテーション返信](guides/biao-zhu/annotation-reply.md) +* [モニタリング](guides/monitoring/README.md) + * [データ分析](guides/monitoring/analysis.md) + * [外部Opsツール統合](guides/monitoring/integrate\_external\_ops\_tools/README.md) + * [集成 LangSmith](guides/monitoring/integrate\_external\_ops\_tools/integrate\_langsmith.md) + * [集成 LangFuse](guides/monitoring/integrate\_external\_ops\_tools/integrate\_langfuse.md) +* [拡張](guides/extension/README.md) + * [API 拡張](guides/extension/api\_based\_extension/README.md) + * [外部データツール](guides/extension/api\_based\_extension/external\_data\_tool.md) + * [Cloudflare Workers を使用した API ツールのデプロイ](guides/extension/api\_based\_extension/cloudflare\_workers.md) + * [コンテンツモデレーション](guides/extension/api\_based\_extension/moderation.md) + * [コード拡張](guides/extension/code\_based\_extension/README.md) + * [外部データツール](guides/extension/code\_based\_extension/external\_data\_tool.md) + * [コンテンツモデレーション](guides/extension/code\_based\_extension/moderation.md) +* [コラボレーション](guides/workspace/README.md) + * [发现](guides/workspace/app/README.md) + * [メンバーの招待と管理](guides/workspace/invite-and-manage-members.md) + +## コミュニティ + +* [サポートの求め](community/support.md) +* [コントリビューターになる](community/contribution.md) + +## もっと読む + +* [アプリケーションケース](learn-more/use-cases/README.md) + * [あなた専用のQAチャットボットのトレーニング方法](learn-more/use-cases/train-a-qa-chatbot-that-belongs-to-you.md) + * [コードなしでMidjourney プロンプトボットを作成する方法](learn-more/use-cases/create-a-midjoureny-prompt-word-robot-with-zero-code.md) + * [Notion AI アシスタントを構築する](learn-more/use-cases/build-an-notion-ai-assistant.md) + * [数分で業務データを持つ公式サイトのAIチャットボットを作成する方法](learn-more/use-cases/create-an-ai-chatbot-with-business-data-in-minutes.md) + * [フルセットのオープンソースツールを使用したLLMアプリケーションの実践:DifyでBaichuanオープンソースモデル機能を呼び出す](learn-more/use-cases/practical-implementation-of-building-llm-applications-using-a-full-set-of-open-source-tools.md) + * [DifyをWeChatエコシステムに統合する方法](learn-more/use-cases/dify-on-wechat.md) +* [拡張読書](learn-more/extended-reading/README.md) + * [LLMOpsとは何ですか?](learn-more/extended-reading/what-is-llmops.md) + * [検索強化生成(RAG)](learn-more/extended-reading/retrieval-augment/README.md) + * [ハイブリッド検索](learn-more/extended-reading/retrieval-augment/hybrid-search.md) + * [リランク](learn-more/extended-reading/retrieval-augment/rerank.md) + * [リトリーバルモード](learn-more/extended-reading/retrieval-augment/retrieval.md) + * [プロンプトエンジニアリング](learn-more/extended-reading/prompt-engineering/README.md) + * [プロンプトエンジニアリングエキスパートモード(廃止)](learn-more/extended-reading/prompt-engineering/prompt-engineering-1/README.md) + * [プロンプト初期テンプレート参考](learn-more/extended-reading/prompt-engineering/prompt-engineering-1/prompt-engineering-template.md) +* [FAQ](learn-more/faq/README.md) + * [ローカルデプロイに関するFAQ](learn-more/faq/install-faq.md) + * [LLM設定と使用に関するFAQ](learn-more/faq/llms-use-faq.md) + +## ポリシー + +* [オープンソースライセンス](policies/open-source.md) +* [ユーザー契約](policies/agreement/README.md) + * [利用規約](https://dify.ai/terms) + * [プライバシーポリシー](https://dify.ai/privacy) \ No newline at end of file diff --git a/jp/community/contribution.md b/jp/community/contribution.md new file mode 100644 index 00000000..5d0c9b42 --- /dev/null +++ b/jp/community/contribution.md @@ -0,0 +1,157 @@ +# 貢献者になる + +Difyに貢献したいと思っているなら、それは素晴らしいことです。私たちはあなたの貢献を心待ちにしています。資金や人員が限られているスタートアップとして、私たちはLLMアプリケーションの構築と管理のための最も直感的なワークフローを設計するという野心的な目標を持っています。コミュニティのあらゆる助けは貴重です。 + +私たちの現状を考えると、柔軟かつ迅速にデリバリーする必要がありますが、貢献者がスムーズに貢献できるようにしたいとも考えています。そのために、この貢献ガイドを作成しました。このガイドは、あなたがコードベースに慣れ、貢献者としての活動を迅速に開始できるようにすることを目的としています。 + +このガイドは、Dify自体と同様に、常に改善されています。時折プロジェクトの実態よりも遅れることがあるかもしれませんが、ご理解と改善のためのフィードバックを心から歓迎します。 + +ライセンスに関しては、時間を取って短い[ライセンスと貢献者協定](./license)を読んでください。また、コミュニティは[行動規範](https://github.com/langgenius/.github/blob/main/CODE_OF_CONDUCT.md)にも従います。 + +## 始める前に + +[既存のイシューを探す](https://github.com/langgenius/dify/issues?q=is:issue+is:closed)か、新しいイシューを[作成する](https://github.com/langgenius/dify/issues/new/choose)ことができます。イシューは次の2つのカテゴリに分かれます: + +### 機能リクエスト: + +* 新しい機能リクエストを行う場合は、提案する機能の目的を説明し、できるだけ詳細なコンテキストを提供してください。[@perzeusss](https://github.com/perzeuss)が作成した優れた[機能リクエスト助手](https://udify.app/chat/MK2kVSnw1gakVwMX)を使ってドラフトを作成することもできます。ぜひ試してみてください。 + +* 既存のイシューから選びたい場合は、その下にコメントを残して意思を示してください。 + +関連するチームメンバーが関与します。うまくいけば、彼らがコーディングを開始することを承認します。それまでは、変更が提案される可能性があるため、作業を開始しないでください。 + +提案された機能が属する領域に応じて、異なるチームメンバーと連携する必要があります。以下は、各チームメンバーが現在取り組んでいる分野の概要です: + + | メンバー | 分野 | + | -------------------------------------------------------- | ------------------------------------------------- | + | [@yeuoly](https://github.com/Yeuoly) | エージェントの設計 | + | [@jyong](https://github.com/JohnJyong) | RAGパイプライン設計 | + | [@GarfieldDai](https://github.com/GarfieldDai) | ワークフローオーケストレーションの構築 | + | [@iamjoel](https://github.com/iamjoel) & [@zxhlyh](https://github.com/zxhlyh) | フロントエンドの使いやすさ向上 | + | [@guchenhe](https://github.com/guchenhe) & [@crazywoola](https://github.com/crazywoola) | 開発者体験、何でも相談窓口 | + | [@takatost](https://github.com/takatost) | 全体的なプロダクト方向性とアーキテクチャ | + + 優先順位の付け方: + +| 機能タイプ | 優先度 | +| --------------------------------------------------------- | --------------- | +| チームメンバーが高優先度としてラベル付けした機能 | 高優先度 | +| [コミュニティフィードバックボード](https://github.com/langgenius/dify/discussions/categories/ideas)からの人気のある機能リクエスト | 中優先度 | +| コア機能でないものや小さな改善 | 低優先度 | +| 価値はあるが即時でないもの | 将来の機能 | + +### その他(例えばバグ報告、パフォーマンス向上、タイポ修正): +* すぐにコーディングを開始してください。 + + 優先順位の付け方: + + | イシュータイプ | 優先度 | + | --------------------------------------------------------- | --------------- | + | コア機能のバグ(ログインできない、アプリケーションが動作しない、セキュリティホール) | クリティカル | + | 非クリティカルなバグ、パフォーマンス向上 | 中優先度 | + | 小さな修正(タイポ、混乱するが動作するUI) | 低優先度 | + + +## インストール + +以下はDifyを開発用に設定する手順です: + +### 1. リポジトリをフォークする + +### 2. リポジトリをクローンする + +ターミナルからフォークしたリポジトリをクローンします: + +``` +git clone git@github.com:/dify.git +``` + +### 3. 依存関係を確認する + +Difyは以下のツールとライブラリに依存しています: + +- [Docker](https://www.docker.com/) +- [Docker Compose](https://docs.docker.com/compose/install/) +- [Node.js v18.x (LTS)](http://nodejs.org) +- [npm](https://www.npmjs.com/) バージョン 8.x.x もしくは [Yarn](https://yarnpkg.com/) +- [Python](https://www.python.org/) バージョン 3.10.x + +### 4. インストール + +Difyはバックエンドとフロントエンドで構成されています。`cd api/`を使ってバックエンドディレクトリに移動し、[バックエンドREADME](api/README.md)に従ってインストールします。別のターミナルで`cd web/`を使ってフロントエンドディレクトリに移動し、[フロントエンドREADME](web/README.md)に従ってインストールします。 + +よくある質問とトラブルシューティングの手順については[インストールFAQ](https://docs.dify.ai/getting-started/faq/install-faq)を参照してください。 + +### 5. ブラウザでDifyにアクセスする + +設定を確認するため、ブラウザを開き[http://localhost:3000](http://localhost:3000)(デフォルトまたはカスタムURLとポート)にアクセスします。これでDifyが動作しているはずです。 + +## 開発 + +モデル提供者を追加する場合は、[このガイド](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/README.md)を参照してください。 + +エージェントやワークフローにツール提供者を追加する場合は、[このガイド](./api/core/tools/README.md)を参照してください。 + +貢献する部分を迅速に理解できるように、以下にDifyのバックエンドとフロントエンドの簡単な注釈付きアウトラインを示します: + +### バックエンド + +DifyのバックエンドはPythonで書かれており、[Flask](https://flask.palletsprojects.com/en/3.0.x/)フレームワークを使用しています。[SQLAlchemy](https://www.sqlalchemy.org/)をORMとして使用し、[Celery](https://docs.celeryq.dev/en/stable/getting-started/introduction.html)をタスクキューとして使用しています。認証ロジックはFlask-loginで処理されます。 + +``` +[api/] +├── constants // コードベース全体で使用される定数設定。 +├── controllers // APIルート定義とリクエスト処理ロジック。 +├── core // コアアプリケーションオーケストレーション、モデル統合、ツール。 +├── docker // Dockerおよびコンテナ化関連の設定。 +├── events // イベント処理と処理 +├── extensions // サードパーティフレームワーク/プラットフォームとの拡張機能。 +├── fields // シリアライズ/マーシャリングのためのフィールド定義。 +├── libs // 再利用可能なライブラリとヘルパー。 +├── migrations // データベース移行のためのスクリプト。 +├── models // データベースモデルとスキーマ定義。 +├── services // ビジネスロジックを指定。 +├── storage // 秘密鍵保管。 +├── tasks // 非同期タスクとバックグラウンドジョブの処理。 +└── tests +``` + +### フロントエンド + +このウェブサイトは[Next.js](https://nextjs.org/)テンプレートを使用しており、スタイリングには[Tailwind CSS](https://tailwindcss.com/)を使用しています。[React-i18next](https://react.i18next.com/)を国際化に使用しています。 + +``` +[web/] +├── app // レイアウト、ページ、およびコンポーネント +│ ├── (commonLayout) // アプリ全体で使用される共通レイアウト +│ ├── (shareLayout) // トークン固有のセッション間で共有されるレイアウト +│ ├── activate // アクティベートページ +│ ├── components // ページとレイアウトで共有されるコンポーネント +│ ├── install // インストールページ +│ ├── signin // サインインページ +│ └── styles // グローバルに共有されるスタイル +├── assets // 静的アセット +├── bin // ビルドステップで実行されるスクリプト +├── config // 調整可能な設定とオプション +├── context // アプリの異なる部分で使用される共有コンテキスト +├── dictionaries // 言語固有の翻訳ファイル +├── docker // コンテナ設定 +├── hooks // 再利用可能なフック +├── i18n // 国際化設定 +├── models // データモデルとAPIレスポンスの形状を記述 +├── public // ファビコンなどのメタアセット +├── service // APIアクションの形状を指定 +├── test +├── types // 関数パラメータと戻り値の記述 +└── utils // 共有ユーティリティ関数 +``` + +## PRを提出する + +最後に、私たちのリポジトリにプルリクエスト(PR)を提出する時が来ました。重要な機能の場合、最初に `deploy/dev` ブランチにマージしてテストを行い、その後 `main` ブランチにマージします。マージコンフリクトが発生した場合や、プルリクエストの提出方法が分からない場合は、[GitHubのプルリクエストチュートリアル](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests)を参照してください。 + +これで完了です!あなたのPRがマージされると、あなたは私たちの[README](https://github.com/langgenius/dify/blob/main/README.md)に貢献者として掲載されます。 + +## ヘルプを求める + +貢献の過程で困難に直面したり質問がある場合は、関連するGitHubのイシューで質問を提出するか、私たちの[Discord](https://discord.gg/AhzKf7dNgk)に参加して迅速なコミュニケーションを行ってください。 \ No newline at end of file diff --git a/jp/community/support.md b/jp/community/support.md new file mode 100644 index 00000000..a3104baa --- /dev/null +++ b/jp/community/support.md @@ -0,0 +1,19 @@ +# 支援を求める + +このドキュメントを読んでも製品の使用に関して疑問や提案がある場合は、以下の方法で支援を求めることができます。私たちのチームとコミュニティは、できる限りのサポートを提供いたします。 + +### コミュニティサポート + +{% hint style="info" %} +Difyのアカウント情報やその他のキー情報をコミュニティに投稿しないでください。また、サポートスタッフもアカウント情報を要求することはありません。 +{% endhint %} + +* [Github](https://github.com/langgenius/dify) 上でイシューを提出 +* [Discord](https://discord.gg/8Tpq4AcN9c)コミュニティに参加 +* [support@dify.ai](mailto:support@dify.ai) へメールを送信 + +### お問い合わせ + +製品サポート以外のその他の事柄に適用されます。 + +* [hello@dify.ai](mailto:hello@dify.ai) へメールを送信 \ No newline at end of file diff --git a/jp/explore/images/creat-customize-app.jpg b/jp/explore/images/creat-customize-app.jpg new file mode 100644 index 00000000..aa6db329 Binary files /dev/null and b/jp/explore/images/creat-customize-app.jpg differ diff --git a/jp/explore/images/explore-app.jpg b/jp/explore/images/explore-app.jpg new file mode 100644 index 00000000..c41022fd Binary files /dev/null and b/jp/explore/images/explore-app.jpg differ diff --git a/jp/explore/images/workspace.jpg b/jp/explore/images/workspace.jpg new file mode 100644 index 00000000..76472514 Binary files /dev/null and b/jp/explore/images/workspace.jpg differ diff --git a/jp/features/ai-plugins/based-on-frontend-templates.md b/jp/features/ai-plugins/based-on-frontend-templates.md new file mode 100644 index 00000000..1060e368 --- /dev/null +++ b/jp/features/ai-plugins/based-on-frontend-templates.md @@ -0,0 +1,39 @@ +# Webアプリテンプレートに基づく + +もし開発者がゼロから新しい製品を開発する場合や、製品のプロトタイプ設計段階にある場合、Difyを使用して人工知能サイトを迅速に立ち上げることができます。同時に、Difyは開発者がさまざまな形式のフロントエンドアプリケーションを自由に作成できることを望んでいます。そのため、以下のものを提供しています: + +* **SDK** 各種言語のDify APIに迅速にアクセスするためのもの +* **Webアプリテンプレート** さまざまなタイプのアプリケーションのためのWebアプリ開発フレームワーク + +マサチューセッツ工科大学のライセンスに基づき、Webアプリテンプレートはオープンソースです。これらを自由に修正・デプロイしてDifyの全機能を実現することができ、またはあなた自身のアプリケーションの参考コードとして利用することもできます。 + +これらのテンプレートはGitHubで見つけることができます: + +* [会話型アプリ](https://github.com/langgenius/webapp-conversation) +* [テキスト生成アプリ](https://github.com/langgenius/webapp-text-generator) + +Webアプリテンプレートを使用する最も迅速な方法は、GitHubで "**Use this template**" をクリックすることです。これにより、新しいリポジトリが派生されます。その後、DifyアプリケーションIDとAPIキーを設定する必要があります。例として: + +```javascript +export const APP_ID = '' +export const API_KEY = '' +``` + +`config/index.ts`の中でさらに設定を行います: + +``` +export const APP_INFO: AppInfo = { + "title": 'Chat APP', + "description": '', + "copyright": '', + "privacy_policy": '', + "default_language": 'zh-Hans' +} + +export const isShowPrompt = true +export const promptTemplate = '' +``` + +各Webアプリテンプレートにはデプロイ手順を含むリードミーが提供されています。通常、Webアプリテンプレートには軽量なバックエンドサービスが含まれており、開発者のAPIキーがユーザーに直接露出しないようにします。 + +これらのWebアプリテンプレートは、AIアプリケーションのプロトタイプを迅速に構築し、Difyのすべての機能を使用するのに役立ちます。もしこれを基に自分自身のアプリケーションや新しいテンプレートを開発した場合、ぜひ私たちと共有してください。 \ No newline at end of file diff --git a/jp/features/datasets/maintain-dataset-via-api.md b/jp/features/datasets/maintain-dataset-via-api.md new file mode 100644 index 00000000..5119af2e --- /dev/null +++ b/jp/features/datasets/maintain-dataset-via-api.md @@ -0,0 +1,136 @@ +# ナレッジAPIの維持 + +> 認証、メソッド呼び出し、アプリケーションサービスAPIは一貫性を保ちます。ナレッジAPIトークンの違いは、すべてのナレッジベースで操作できることです。 + +### ナレッジAPIを使用する利点 +* データシステムを同期してナレッジを分散し、強力なワークフローを作成します。 +* ナレッジリストとドキュメントリストAPIおよび詳細クエリインターフェイスを提供し、自分のデータ管理ページを生成しやすくします。 +* 同期プロセスを簡素化するため、プレーンテキストやファイルのアップロード/更新ドキュメント、バッチ追加および変更をサポートします。 +* Difyソフトウェアおよびサービスの可視性を向上させ、手動でのドキュメント処理や同期の時間を短縮します。 + +### 使用方法 + +ナレッジページに移動し、左側のナビゲーションでAPIページに切り替えます。このページでは、difyが提供するAPIドキュメントを表示し、ナレッジAPIにアクセスするための認証情報を管理できます。 + +

ナレッジAPIドキュメント

+ +## **空のナレッジを作成する** + +**`POST /datasets`** + +{% hint style="warning" %} +空のデータセットを作成するためだけに使用します +{% endhint %} + +``` +curl --location --request POST 'https://api.dify.ai/v1/datasets' \ +--header '認証: Bearer {api_key}' \ +--header 'コンテンツタイプ: application/json' \ +--data-raw '{"name": "name"}' +``` + +#### **ナレッジリスト** + +``` +curl --location --request GET 'https://api.dify.ai/v1/datasets?page=1&limit=20' \ +--header '認証: Bearer {api_key}' +``` + +#### **テキストでドキュメントを作成** + +``` +curl --location --request POST '/document/create_by_text>' \\ +--header '認証: Bearer {api_key}' \\ +--header 'コンテンツタイプ: application/json' \\ +--data-raw '{ + "name": "Dify", + "text": "Dify means Do it for you...", + "indexing_technique": "高品質", + "process_rule": { + "rules": { + "pre_processing_rules": [{ + "id": "余分なスペースを削除", + "enabled": true + }, { + "id": "URLとメールを削除", + "enabled": true + }], + "segmentation": { + "separator": "###", + "max_tokens": 500 + } + }, + "mode": "カスタム" + } +}' +``` + +#### **ファイルでドキュメントを作成** + +``` +curl --location POST 'https://api.dify.ai/v1/datasets/{データセットID}/document/create_by_file' \ +--header '認証: Bearer {api_key}' \ +--form 'data="{ + "name": "Dify", + "indexing_technique": "高品質", + "process_rule": { + "rules": { + "pre_processing_rules": [{ + "id": "余分なスペースを削除", + "enabled": true + }, { + "id": "URLとメールを削除", + "enabled": true + }], + "segmentation": { + "separator": "###", + "max_tokens": 500 + } + }, + "mode": "カスタム" + } + }"; + タイプ=テキスト/プレーン' \ +--form 'file=@"/パス/ファイル"' +``` + +#### **ドキュメントのインデックスステータスを取得** + +``` +curl --location --request GET 'https://api.dify.ai/v1/datasets/{データセットID}/documents/{batch}/indexing-status' \ +--header '認証: Bearer {api_key}' +``` + +#### **ドキュメントを削除** + +``` +curl --location --request GET 'https://api.dify.ai/v1/datasets/{データセットID}/documents' \ +--header '認証: Bearer {api_key}' +``` + +#### **新しいセグメントを追加** + +``` +curl 'https://api.dify.ai/v1/datasets/aac47674-31a8-4f12-aab2-9603964c4789/documents/2034e0c1-1b75-4532-849e-24e72666595b/segment' \ + --header '認証: Bearer {api_key}' \ + --header 'コンテンツタイプ: application/json' \ + --data-raw $'"segments":[ + {"コンテンツ":"Dify means Do it for you", + "キーワード":["Dify","Do"] + } + ]' + --compressed +``` + +### エラーメッセージ + +- `document_indexing`、ドキュメントがインデックス化中であることを示します +- `provider_not_initialize`、埋め込みモデルが設定されていないことを示します +- `not_found`、ドキュメントが見つからないことを示します +- `dataset_name_duplicate`、重複した名前が付けられていることを示します +- `provider_quota_exceeded`、プロバイダーのクォータが最大制限を超えたことを示します +- `dataset_not_initialized`、データセットが初期化されていないことを示します +- `unsupported_file_type`、サポートされていないファイルタイプであることを示します + - 現在サポートされているファイルタイプは次のとおりです:txt、markdown、md、pdf、html、htm、xlsx、docx、csv +- `too_many_files`、ファイルの数が多すぎることを示します。現在は単一ファイルのアップロードのみサポートします +- `file_too_large`、ファイルが大きすぎることを示します。15M以下のファイルのみサポートします \ No newline at end of file diff --git a/jp/features/datasets/sync-from-notion.md b/jp/features/datasets/sync-from-notion.md new file mode 100644 index 00000000..a2c9480f --- /dev/null +++ b/jp/features/datasets/sync-from-notion.md @@ -0,0 +1,74 @@ +# コンセプト同期 + +Difyのコンセプトは、コンセプトからデータをインポートして **同期** を設定し、コンセプトが更新された後に自動的にデータを同期して更新することをサポートしています。 + +### 認証 + +1. ナレッジベースを作成する際に、データソースを選択し、**コンセプト同期--接続へ移動** をクリックし、指示に従って認証検証を完了してください。 +2. また、**設定--データソース--データソースの追加** をクリックし、コンセプトソースの **接続** をクリックして認証を完了することもできます。 + +

コンセプトリンク

+ +### データインポート + +認証操作が完了したら、ナレッジベースの構築ページに移動し、**コンセプト同期** をクリックして、インポートする必要な認証ページを選択します。 + +### セグメンテーションクレンジング + +次に、**セグメンテーション設定** と **インデックス方法** を選択し、**保存して処理** をクリックします。Difyがデータを処理するのを待ちます。このステップでは通常、LLMプロバイダーでトークンを使用する必要があります。一般的なページタイプのインポートだけでなく、データベースタイプのページ属性も集計して保存できます。 + +_**注: 現在、画像やファイルのインポートはサポートしていません。表データはテキストに変換されます。**_ + +### コンセプトデータの同期 + +コンセプト内容が変更された場合、Difyのナレッジドキュメントリストページで[同期]ボタンをクリックしてデータを一括で同期できます(注意: 各クリックで現在の内容が同期されます)。このステップでもトークンの使用が必要です。 + +

コンセプトデータの同期

+ +### (コミュニティ版) コンセプト統合設定ガイド + +統合は **内部統合** と **公共統合** の2つの方法があります。これらは必要に応じてDifyで設定できます。 + +これら2つの統合方法の具体的な違いについては、[コンセプト公式説明](https://developers.notion.com/docs/authorization) を参照してください。 + +#### 1. **内部統合を使用** + +あなたの統合ページを [統合設定](https://www.notion.so/my-integrations) で作成します。デフォルトでは、すべての統合は内部統合から始まります。内部統合は選択したワークスペースに関連付けられるため、ワークスペースの所有者である必要があります。 + +**具体的な操作手順:** + +" **New integration** " ボタンをクリックすると、デフォルトで内部(変更不可)となります。関連するスペースを選択し、名前を入力してロゴをアップロードし、"**提出**" をクリックして統合を成功させます。 + +
+ +統合が作成されると、必要に応じて設定を更新できます。 **性能** タブを選択し、 **シークレットキー** を表示するために "**表示**" ボタンをクリックしてシークレットキーをコピーします。 + +
+ +それをコピーしてDifyのソースコードに戻り、関連する環境変数を **.env** ファイルに設定します。環境変数は以下の通りです: + +**NOTION\_INTEGRATION\_TYPE** = 内部 または **NOTION\_INTEGRATION\_TYPE** = 公共 + +**NOTION\_INTERNAL\_SECRET**= あなたの内部シークレットキー + +#### 2. **公共統合を使用** + +**内部統合を公共統合にアップグレードする必要があります**。統合配布ページに移動し、統合を表示するためにスイッチを切り替えます。 + +スイッチを公共設定に切り替えるには、**組織情報に追加情報を入力** する必要があります。会社名、ウェブサイト、およびリダイレクト目標パスを含む追加情報を入力してから、 "提出" ボタンをクリックします。 + +
+ +公共統合が成功した後、[統合設定ページ](https://www.notion.so/my-integrations) で、[シークレットキー] タブにアクセスして統合のシークレットキーを確認できます。 + +
+ +Difyのソースコードに戻り、関連する環境変数を **.env** ファイルに設定します。環境変数は以下の通りです: + +**NOTION\_INTEGRATION\_TYPE**=公共 + +**NOTION\_CLIENT\_SECRET**=あなたのクライアントシークレットキー + +**NOTION\_CLIENT\_ID**=あなたのクライアントID + +設定が完了すると、ナレッジセクション内のコンセプトデータのインポートおよび同期機能を使用できるようになります。 \ No newline at end of file diff --git a/jp/getting-started/cloud.md b/jp/getting-started/cloud.md new file mode 100644 index 00000000..87c4a52c --- /dev/null +++ b/jp/getting-started/cloud.md @@ -0,0 +1,22 @@ +# クラウドサービス + +{% hint style="info" %} +**ヒント:** Difyは現在ベータテストフェーズにあります。ドキュメントと製品に不一致がある場合は、製品の実際の体験を優先してください。 +{% endhint %} + +Difyはすべてのユーザーに[クラウドサービス](http://cloud.dify.ai)を提供しており、自分でデプロイすることなくDifyの完全な機能を利用できます。Difyのクラウドサービスを利用するには、GitHubまたはGoogleアカウントが必要です。 + +1. [Difyクラウドサービス](https://cloud.dify.ai)にログインし、新しいワークスペースを作成するか、既存のワークスペースに参加します。 +2. モデルプロバイダーを設定するか、提供されているホスト型モデルプロバイダーを使用します。 +3. [アプリケーションを作成](../guides/application_orchestrate/creating-an-application.md)しましょう! + +### サブスクリプションプラン + +クラウドサービスには複数のサブスクリプションプランが用意されており、チームの状況に応じて選択できます。 + +* サンドボックス(無料版) +* プロフェッショナル版 +* チーム版 +* エンタープライズ版 + +各バージョンの価格設定については、[https://dify.ai/pricing](https://dify.ai/pricing)をご参照ください。 \ No newline at end of file diff --git a/jp/getting-started/install-self-hosted/README.md b/jp/getting-started/install-self-hosted/README.md new file mode 100644 index 00000000..468e4148 --- /dev/null +++ b/jp/getting-started/install-self-hosted/README.md @@ -0,0 +1,14 @@ +# コミュニティ版のデプロイ + +Dify コミュニティ版はオープンソース版で、以下の2つの方法のいずれかでデプロイできます: + +* [Docker Compose デプロイ](https://docs.dify.ai/v/zh-hans/getting-started/install-self-hosted/docker-compose) +* [ローカルソースコードで起動](https://docs.dify.ai/v/zh-hans/getting-started/install-self-hosted/local-source-code) + +GitHub で [Dify コミュニティ版](https://github.com/langgenius/dify) をご覧ください。 + +### コードの寄稿 + +正確な審査を確保するため、直接変更をコミットする権限を持つ寄稿者を含むすべてのコードの寄稿は、PR(プルリクエスト)を提出し、マージされる前にコア開発者の承認を得る必要があります。 + +私たちはすべての人のPRを歓迎します!ご協力いただける場合は、[寄稿ガイド](https://github.com/langgenius/dify/blob/main/CONTRIBUTING_CN.md) でプロジェクトに貢献する方法についての詳細を確認できます。 \ No newline at end of file diff --git a/jp/getting-started/install-self-hosted/docker-compose.md b/jp/getting-started/install-self-hosted/docker-compose.md new file mode 100644 index 00000000..78ace13e --- /dev/null +++ b/jp/getting-started/install-self-hosted/docker-compose.md @@ -0,0 +1,75 @@ +# Docker Compose デプロイメント + +### 前提条件 + +| オペレーティングシステム | ソフトウェア | 説明 | +| -------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| macOS 10.14以降 | Docker Desktop | Docker仮想マシン (VM) を少なくとも2つの仮想CPU (vCPU) と8 GBの初期メモリを使用するように設定してください。そうしないと、インストールが失敗する可能性があります。詳細については[MacにDocker Desktopをインストール](https://docs.docker.com/desktop/mac/install/)を参照してください。 | +| Linuxプラットフォーム |

Docker 19.03以降
Docker Compose 1.25.1以降

| 詳細については[Dockerのインストール](https://docs.docker.com/engine/install/)および[Docker Composeのインストール](https://docs.docker.com/compose/install/)を参照してください。 | +| WSL 2を有効にしたWindows |

Docker Desktop

| ソースコードやその他のデータをLinuxコンテナにバインドする際には、それらをWindowsファイルシステムではなくLinuxファイルシステムに保存することをお勧めします。詳細については[WSL 2バックエンドを使用してWindowsにDocker Desktopをインストール](https://docs.docker.com/desktop/windows/install/#wsl-2-backend)を参照してください。 | + +### Clone Dify + +Difyのソースコードをローカルにクローン + +```bash +git clone https://github.com/langgenius/dify.git +``` + +### Difyを開始 + +difyソースコードのdockerディレクトリに入り、一括起動コマンドを実行: + +```Shell +cd dify/docker +docker compose up -d +``` + +> システムにDocker Compose V1ではなくV2がインストールされている場合は、`docker-compose`ではなく`docker compose`を使用してください。このことは`$ docker compose version`で確認できます。詳細については[こちら](https://docs.docker.com/compose/#compose-v2-and-the-new-docker-compose-command)を参照してください。 + +デプロイメント結果: + +```Shell +[+] Running 7/7 + ✔ Container docker-web-1 Started 1.0s + ✔ Container docker-redis-1 Started 1.1s + ✔ Container docker-weaviate-1 Started 0.9s + ✔ Container docker-db-1 Started 0.0s + ✔ Container docker-worker-1 Started 0.7s + ✔ Container docker-api-1 Started 0.8s + ✔ Container docker-nginx-1 Started +``` + +最後に、すべてのコンテナが正常に稼働しているか確認: + +```bash +docker compose ps +``` + +3つのビジネスサービス `api / worker / web` と4つの基礎コンポーネント `weaviate / db / redis / nginx` が含まれます。 + +```bash +NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS +docker-api-1 langgenius/dify-api:0.3.2 "/entrypoint.sh" api 4 seconds ago Up 2 seconds 80/tcp, 5001/tcp +docker-db-1 postgres:15-alpine "docker-entrypoint.s…" db 4 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp +docker-nginx-1 nginx:latest "/docker-entrypoint.…" nginx 4 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp +docker-redis-1 redis:6-alpine "docker-entrypoint.s…" redis 4 seconds ago Up 3 seconds 6379/tcp +docker-weaviate-1 semitechnologies/weaviate:1.18.4 "/bin/weaviate --hos…" weaviate 4 seconds ago Up 3 seconds +docker-web-1 langgenius/dify-web:0.3.2 "/entrypoint.sh" web 4 seconds ago Up 3 seconds 80/tcp, 3000/tcp +docker-worker-1 langgenius/dify-api:0.3.2 "/entrypoint.sh" worker 4 seconds ago Up 2 seconds 80/tcp, 5001/tcp +``` + +### Difyをアップグレード + +difyソースコードのdockerディレクトリに入り、以下のコマンドを順に実行: + +```bash +cd dify/docker +git pull origin main +docker compose down +docker compose pull +docker compose up -d +``` +### Difyにアクセス + +ブラウザで `http://localhost` を入力してDifyにアクセス。 \ No newline at end of file diff --git a/jp/getting-started/install-self-hosted/environments.md b/jp/getting-started/install-self-hosted/environments.md new file mode 100644 index 00000000..654b98a0 --- /dev/null +++ b/jp/getting-started/install-self-hosted/environments.md @@ -0,0 +1,359 @@ +# 環境変数説明 + +### 公共変数 + +#### CONSOLE_API_URL + +コンソールAPIバックエンドのURL。認証コールバックを組み合わせるために使用され、空の場合は同じドメインになります。例:`https://api.console.dify.ai`。 + +#### CONSOLE_WEB_URL + +コンソールのウェブ**フロントエンド**URL。フロントエンドアドレスの一部を組み合わせたり、CORS設定に使用されます。空の場合は同じドメインになります。例:`https://console.dify.ai` + +#### SERVICE_API_URL + +サービスAPIのURL。**フロントエンド**にサービスAPIのベースURLを表示するために使用されます。空の場合は同じドメインになります。例:`https://api.dify.ai` + +#### APP_API_URL + +WebアプリAPIのバックエンドURL。**フロントエンド**APIのバックエンドアドレスを宣言するために使用されます。空の場合は同じドメインになります。例:`https://app.dify.ai` + +#### APP_WEB_URL + +WebアプリのURL。**フロントエンド**にWebアプリAPIのベースURLを表示するために使用されます。空の場合は同じドメインになります。例:`https://api.app.dify.ai` + +#### FILES_URL + +ファイルプレビューまたはダウンロード用のURLプレフィックス。ファイルプレビューやダウンロードURLをフロントエンドに表示したり、マルチモーダルモデルの入力として使用します。他人による偽造を防ぐため、画像プレビューURLは署名付きで、5分の有効期限があります。 + +*** + +### サーバー側 + +#### MODE + +起動モード。dockerによる起動時にのみ有効で、ソースコード起動では無効です。 + +* api + + APIサーバーを起動します。 +* worker + + 非同期キューのワーカーを起動します。 + +#### DEBUG + +デバッグモード。デフォルトはfalse。ローカル開発時にはこの設定をオンにすることをお勧めします。これにより、モンキーパッチによって発生する問題を防ぐことができます。 + +#### FLASK_DEBUG + +Flaskのデバッグモード。オンにすると、インターフェースでトレース情報が出力され、デバッグが容易になります。 + +#### SECRET_KEY + +セッションクッキーを安全に署名し、データベース上の機密情報を暗号化するためのキー。初回起動時にこの変数を設定する必要があります。`openssl rand -base64 42`を使用して強力なキーを生成できます。 + +#### DEPLOY_ENV + +デプロイ環境。 + +* PRODUCTION(デフォルト) + + プロダクション環境。 +* TESTING + + テスト環境。フロントエンドページにはテスト環境を示す明確な色の識別が表示されます。 + +#### LOG_LEVEL + +ログ出力レベル。デフォルトはINFO。プロダクション環境ではERRORに設定することをお勧めします。 + +#### MIGRATION_ENABLED + +trueに設定した場合、コンテナ起動時に自動的にデータベースのマイグレーションが実行されます。dockerによる起動時にのみ有効で、ソースコード起動では無効です。ソースコード起動の場合、apiディレクトリで手動で`flask db upgrade`を実行する必要があります。 + +#### CHECK_UPDATE_URL + +バージョンチェックポリシーを有効にするかどうか。falseに設定した場合、`https://updates.dify.ai`を呼び出してバージョンチェックを行いません。現在、国内から直接CloudFlare Workerのバージョンインターフェースにアクセスできないため、この変数を空に設定すると、このインターフェースの呼び出しをブロックできます。 + +#### コンテナ起動関連設定 + +dockerイメージまたはdocker-composeによる起動時にのみ有効です。 + +* DIFY_BIND_ADDRESS + + APIサービスのバインドアドレス。デフォルト:0.0.0.0、すべてのアドレスからアクセス可能にします。 +* DIFY_PORT + + APIサービスのバインドポート番号。デフォルト5001。 +* SERVER_WORKER_AMOUNT + + APIサービスのServer worker数。すなわちgevent workerの数。公式:`CPUのコア数 x 2 + 1`。詳細はこちら:https://docs.gunicorn.org/en/stable/design.html#how-many-workers +* SERVER_WORKER_CLASS + + デフォルトはgevent。Windowsの場合、syncまたはsoloに切り替えることができます。 +* GUNICORN_TIMEOUT + + リクエスト処理のタイムアウト時間。デフォルト200。360に設定することをお勧めします。これにより、長時間のSSE接続をサポートできます。 +* CELERY_WORKER_CLASS + + `SERVER_WORKER_CLASS`と同様に、デフォルトはgevent。Windowsの場合、syncまたはsoloに切り替えることができます。 +* CELERY_WORKER_AMOUNT + + Celery workerの数。デフォルトは1。必要に応じて設定します。 +* HTTP_PROXY + + HTTPプロキシのアドレス。国内からOpenAIやHuggingFaceにアクセスできない問題を解決するために使用されます。注意:プロキシがホストマシンにデプロイされている場合(例:`http://127.0.0.1:7890`)、このプロキシアドレスはローカルモデルに接続する場合と同様に、dockerコンテナ内のホストマシンアドレスを使用する必要があります(例:`http://192.168.1.100:7890`または`http://172.17.0.1:7890`)。 +* HTTPS_PROXY + + HTTPSプロキシのアドレス。国内からOpenAIやHuggingFaceにアクセスできない問題を解決するために使用されます。HTTPプロキシと同様に設定します。 + +#### データベース設定 + +データベースにはPostgreSQLを使用します。public schemaを使用してください。 + +* DB_USERNAME:ユーザー名 +* DB_PASSWORD:パスワード +* DB_HOST:データベースホスト +* DB_PORT:データベースポート番号。デフォルト5432 +* DB_DATABASE:データベース名 +* SQLALCHEMY_POOL_SIZE:データベース接続プールのサイズ。デフォルトは30接続。必要に応じて増やせます。 +* SQLALCHEMY_POOL_RECYCLE:データベース接続プールのリサイクル時間。デフォルト3600秒。 +* SQLALCHEMY_ECHO:SQLを出力するかどうか。デフォルトはfalse。 + +#### Redis 設定 + +このRedis設定はキャッシュおよび対話時のpub/subに使用されます。 + +* REDIS_HOST:Redisホスト +* REDIS_PORT:Redisポート。デフォルト6379 +* REDIS_DB:Redisデータベース。デフォルトは0。セッションRedisおよびCeleryブローカーとは異なるデータベースを使用してください。 +* REDIS_USERNAME:Redisユーザー名。デフォルトは空 +* REDIS_PASSWORD:Redisパスワード。デフォルトは空。パスワードを設定することを強くお勧めします。 +* REDIS_USE_SSL:SSLプロトコルを使用して接続するかどうか。デフォルトはfalse + +#### Celery 設定 + +* CELERY_BROKER_URL + + フォーマットは以下の通りです。 + +
redis://<redis_username>:<redis_password>@<redis_host>:<redis_port>/<redis_database>
+      
+    
+ + 例:`redis://:difyai123456@redis:6379/1` +* BROKER_USE_SSL + + trueに設定した場合、SSLプロトコルを使用して接続します。デフォルトはfalse。 + +#### CORS 設定 + +フロントエンドのクロスオリジンアクセスポリシーを設定するために使用します。 + +* CONSOLE_CORS_ALLOW_ORIGINS + + コンソールのCORSクロスオリジンポリシー。デフォルトは`*`、すべてのドメインがアクセス可能です。 +* WEB_API_CORS_ALLOW_ORIGINS + + WebアプリのCORSクロスオリジンポリシー。デフォルトは`*`、すべてのドメインがアクセス可能です。 + +詳細な設定については、次のガイドを参照してください:[クロスオリジン/認証関連ガイド](https://avytux375gg.feishu.cn/wiki/HyX3wdF1YiejX3k3U2CcTcmQnjg) + +#### ファイルストレージ設定 + +データセットのアップロードファイル、チーム/テナントの暗号化キーなどのファイルを保存するために使用します。 + +* STORAGE_TYPE + + ストレージ施設のタイプ + + * local(デフォルト) + + ローカルファイルストレージ。この場合、以下の`STORAGE_LOCAL_PATH`設定を設定する必要があります。 + * s3 + + S3オブジェクトストレージ。この場合、以下のS3_プレフィックスの設定を設定する必要があります。 + * azure-blob + + Azure Blobストレージ。この場合、以下のAZURE_BLOB_プレフィックスの設定を設定する必要があります。 +* STORAGE_LOCAL_PATH + + デフォルトはstorage、すなわち現在のディレクトリのstorageディレクトリに保存します。dockerまたはdocker-composeでデプロイする場合、2つのコンテナにある`/app/api/storage`ディレクトリを同じローカルディレクトリにマウントする必要があります。そうしないと、ファイルが見つからないエラーが発生する可能性があります。 +* S3_ENDPOINT:S3エンドポイントアドレス +* S3_BUCKET_NAME:S3バケット名 +* S3_ACCESS_KEY:S3アクセスキー +* S3_SECRET_KEY:S3シークレットキー +* S3_REGION:S3リージョン情報(例:us-east-1) +* AZURE_BLOB_ACCOUNT_NAME: アカウント名(例:'difyai') +* AZURE_BLOB_ACCOUNT_KEY: アカウントキー(例:'difyai') +* AZURE_BLOB_CONTAINER_NAME: コンテナ名(例:'difyai-container') +* AZURE_BLOB_ACCOUNT_URL: 'https://\\.blob.core.windows.net' + +#### ベクトルデータベース設定 + +* VECTOR_STORE + + **使用可能な列挙型は以下を含みます:** + + * `weaviate` + * `qdrant` + * `milvus` + * `zilliz`(`milvus`と同じ) + * `pinecone`(現在未公開) + * `tidb_vector` +* WEAVIATE_ENDPOINT + + Weaviateエンドポイントアドレス(例:`http://weaviate:8080`)。 +* WEAVIATE_API_KEY + + Weaviateに接続するために使用するapi-keyの資格情報。 +* WEAVIATE_BATCH_SIZE + + Weaviateでオブジェクトのバッチ作成数。デフォルトは100。詳細はこちらのドキュメントを参照してください:https://weaviate.io/developers/weaviate/manage-data/import#how-to-set-batch-parameters +* WEAVIATE_GRPC_ENABLED + + Weaviateとの通信にgRPC方式を使用するかどうか。オンにすると性能が大幅に向上しますが、ローカルでは使用できない可能性があります。デフォルトはtrueです。 +* QDRANT_URL + + Qdrantエンドポイントアドレス(例:`https://your-qdrant-cluster-url.qdrant.tech/`)。 +* QDRANT_API_KEY + + Qdrantに接続するために使用するapi-keyの資格情報。 +* PINECONE_API_KEY + + Pineconeに接続するために使用するapi-keyの資格情報。 +* PINECONE_ENVIRONMENT + + Pineconeの環境(例:`us-east4-gcp`)。 +* MILVUS_HOST + + Milvusホストの設定。 +* MILVUS_PORT + + Milvusポートの設定。 +* MILVUS_USER + + Milvusユーザーの設定。デフォルトは空。 +* MILVUS_PASSWORD + + Milvusパスワードの設定。デフォルトは空。 +* MILVUS_SECURE + + MilvusがSSL接続を使用するかどうか。デフォルトはfalse。 + +* TIDB_VECTOR_HOST + + TiDB Vectorホスト設定(例:`xxx.eu-central-1.xxx.tidbcloud.com`) +* TIDB_VECTOR_PORT + + TiDB Vectorポート番号設定(例:`4000`) +* TIDB_VECTOR_USER + + TiDB Vectorユーザー設定(例:`xxxxxx.root`) +* TIDB_VECTOR_PASSWORD + + TiDB Vectorパスワード設定 +* TIDB_VECTOR_DATABASE + + TiDB Vectorデータベース設定(例:`dify`) + +#### ナレッジベース設定 + +* UPLOAD_FILE_SIZE_LIMIT + + アップロードファイルのサイズ制限。デフォルトは15M。 +* UPLOAD_FILE_BATCH_LIMIT + + 一度にアップロードできるファイル数の上限。デフォルトは5個。 +* ETL_TYPE + + **使用可能な列挙型は以下を含みます:** + + * dify + + Dify独自のファイル抽出ソリューション + * Unstructured + + Unstructured.ioのファイル抽出ソリューション +* UNSTRUCTURED_API_URL + + ETL_TYPEがUnstructuredの場合、Unstructured APIパスの設定が必要です。 + + 例:`http://unstructured:8000/general/v0/general` + +#### マルチモーダルモデル設定 + +* MULTIMODAL_SEND_IMAGE_FORMAT + + マルチモーダルモデルの入力時に画像を送信する形式。デフォルトは`base64`、オプションで`url`。`url`モードでは呼び出しの遅延が`base64`モードよりも少なく、一般的には互換性が高い`base64`モードをお勧めします。`url`に設定する場合、`FILES_URL`を外部からアクセス可能なアドレスに設定する必要があります。これにより、マルチモーダルモデルが画像にアクセスできるようになります。 +* UPLOAD_IMAGE_FILE_SIZE_LIMIT + + アップロード画像ファイルのサイズ制限。デフォルトは10M。 + +#### Sentry 設定 + +アプリケーションの監視およびエラーログトラッキングに使用されます。 + +* SENTRY_DSN + + Sentry DSNアドレス。デフォルトは空。空の場合、すべての監視情報はSentryに報告されません。 +* SENTRY_TRACES_SAMPLE_RATE + + Sentryイベントの報告割合。例えば、0.01に設定すると1%となります。 +* SENTRY_PROFILES_SAMPLE_RATE + + Sentryプロファイルの報告割合。例えば、0.01に設定すると1%となります。 + +#### Notion 統合設定 + +Notion統合設定。変数はNotion integrationを申請することで取得できます:[https://www.notion.so/my-integrations](https://www.notion.so/my-integrations) + +* NOTION_CLIENT_ID +* NOTION_CLIENT_SECRET + +#### メール関連設定 + +* MAIL_TYPE + * resend + * MAIL_DEFAULT_SEND_FROM\\ + 送信者のメール名(例:no-reply [no-reply@dify.ai](mailto:no-reply@dify.ai))、必須ではありません。 + * RESEND_API_KEY\\ + ResendメールプロバイダーのAPIキー。APIキーから取得できます。 + * smtp + * SMTP_SERVER\\ + SMTPサーバーアドレス + * SMTP_PORT\\ + SMTPサーバ ,用于验证接口身份。 + +* SESSION_タイプ: セッションコンポーネントのタイプ + * redis(デフォルト) + + これを選択した場合、下記の SESSION_REDIS_ で始まる環境変数を設定する必要があります。 + * sqlalchemy + + これを選択した場合、現在のデータベース接続を使用し、sessions テーブルを使用してセッションレコードを読み書きします。 +* SESSION_REDIS_HOST:Redis ホスト +* SESSION_REDIS_PORT:Redis ポート、デフォルトは 6379 +* SESSION_REDIS_DB:Redis データベース、デフォルトは 0、Redis および Celery ブローカーとは異なるデータベースを使用してください。 +* SESSION_REDIS_ユーザー名:Redis ユーザー名、デフォルトは空 +* SESSION_REDIS_パスワード:Redis パスワード、デフォルトは空、パスワードの設定を強く推奨します。 +* SESSION_REDIS_USE_SSL:SSL プロトコルを使用して接続するかどうか、デフォルトは false + +#### クッキー戦略の設定 + +> ⚠️ この設定はバージョン 0.3.24 から廃止されました。 + +セッションクッキーのブラウザ戦略を設定するために使用されます。 + +* COOKIE_HTTPONLY + + クッキーの HttpOnly 設定、デフォルトは true。 +* COOKIE_SAMESITE + + クッキーの SameSite 設定、デフォルトは Lax。 +* COOKIE_SECURE + + クッキーの Secure 設定、デフォルトは false。 + + diff --git a/jp/getting-started/install-self-hosted/local-source-code.md b/jp/getting-started/install-self-hosted/local-source-code.md new file mode 100644 index 00000000..dd0f0244 --- /dev/null +++ b/jp/getting-started/install-self-hosted/local-source-code.md @@ -0,0 +1,223 @@ +# 本地源码启动 + +### 前置条件 + +| 操作系统 | ソフトウェア | 説明 | +| -------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| macOS 10.14以降 | Docker Desktop | Docker 仮想マシン(VM)を少なくとも2つの仮想CPU(vCPU)と8GBの初期メモリを使用するように設定してください。そうでないと、インストールが失敗する可能性があります。詳細は[MacにDocker Desktopをインストールする](https://docs.docker.com/desktop/mac/install/)を参照してください。 | +| Linux プラットフォーム |

Docker 19.03以降
Docker Compose 1.25.1以降

| 詳細は[Dockerをインストールする](https://docs.docker.com/engine/install/)および[Docker Composeをインストールする](https://docs.docker.com/compose/install/)を参照してください。 | +| WSL 2が有効なWindows | Docker Desktop | ソースコードや他のデータをLinuxコンテナにバインドする際、WindowsファイルシステムではなくLinuxファイルシステムに保存することをお勧めします。詳細は[WSL 2バックエンドを使用してWindowsにDocker Desktopをインストールする](https://docs.docker.com/desktop/windows/install/#wsl-2-backend)を参照してください。 | + +> OpenAI TTSを使用する場合、システムにFFmpegをインストールする必要があります。詳細は[リンク](https://docs.dify.ai/v/zh-hans/learn-more/faq/install-faq#id-15.-wen-ben-zhuan-yu-yin-yu-dao-zhe-ge-cuo-wu-zen-me-ban)を参照してください。 + +Dify コードをクローン: + +```Bash +git clone https://github.com/langgenius/dify.git +``` + +ビジネスサービスを有効にする前に、PostgresSQL / Redis / Weaviate(ローカルにない場合)をデプロイする必要があります。以下のコマンドで起動できます: + +```Bash +cd docker +docker compose -f docker-compose.middleware.yaml up -d +``` + +*** + +### サービスデプロイ + +* API インターフェースサービス +* Worker 非同期キュー消費サービス + +#### 基本環境インストール + +サービスを起動するにはPython 3.10.xが必要です。Python環境を迅速にインストールするには[Anaconda](https://docs.anaconda.com/free/anaconda/install/)を使用することをお勧めします。これはpipパッケージ管理ツールも含んでいます。 + +```Bash +# difyと名付けたPython 3.10環境を作成 +conda create --name dify python=3.10 +# dify Python環境に切り替え +conda activate dify +``` + +#### 起動手順 + +1. apiディレクトリに移動 + + ``` + cd api + ``` +2. 環境変数構成ファイルをコピー + + ``` + cp .env.example .env + ``` +3. ランダムキーを生成し、`.env`の`SECRET_KEY`の値を置き換え + + ``` + openssl rand -base64 42 + sed -i 's/SECRET_KEY=.*/SECRET_KEY=/' .env + ``` +4. 依存関係をインストール + + ``` + pip install -r requirements.txt + ``` +5. データベース移行を実行 + + データベーススキーマを最新バージョンに更新します。 + + ``` + flask db upgrade + ``` +6. APIサービスを開始 + + ``` + flask run --host 0.0.0.0 --port=5001 --debug + ``` + + 正常な出力: + + ``` + * Debug mode: on + INFO:werkzeug:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5001 + INFO:werkzeug:Press CTRL+C to quit + INFO:werkzeug: * Restarting with stat + WARNING:werkzeug: * Debugger is active! + INFO:werkzeug: * Debugger PIN: 695-801-919 + ``` +7. Workerサービスを開始 + + データセットファイルのインポートやデータセットドキュメントの更新などの非同期操作を消費するためのサービスです。Linux / MacOSでの起動: + + ``` + celery -A app.celery worker -P gevent -c 1 -Q dataset,generation,mail --loglevel INFO + ``` + + Windowsシステムでの起動の場合、以下のコマンドを使用してください: + + ``` + celery -A app.celery worker -P solo --without-gossip --without-mingle -Q dataset,generation,mail --loglevel INFO + ``` + + 正常な出力: + + ``` + -------------- celery@TAKATOST.lan v5.2.7 (dawn-chorus) + --- ***** ----- + -- ******* ---- macOS-10.16-x86_64-i386-64bit 2023-07-31 12:58:08 + - *** --- * --- + - ** ---------- [config] + - ** ---------- .> app: app:0x7fb568572a10 + - ** ---------- .> transport: redis://:**@localhost:6379/1 + - ** ---------- .> results: postgresql://postgres:**@localhost:5432/dify + - *** --- * --- .> concurrency: 1 (gevent) + -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) + --- ***** ----- + -------------- [queues] + .> dataset exchange=dataset(direct) key=dataset + .> generation exchange=generation(direct) key=generation + .> mail exchange=mail(direct) key=mail + + [tasks] + . tasks.add_document_to_index_task.add_document_to_index_task + . tasks.clean_dataset_task.clean_dataset_task + . tasks.clean_document_task.clean_document_task + . tasks.clean_notion_document_task.clean_notion_document_task + . tasks.create_segment_to_index_task.create_segment_to_index_task + . tasks.deal_dataset_vector_index_task.deal_dataset_vector_index_task + . tasks.document_indexing_sync_task.document_indexing_sync_task + . tasks.document_indexing_task.document_indexing_task + . tasks.document_indexing_update_task.document_indexing_update_task + . tasks.enable_segment_to_index_task.enable_segment_to_index_task + . tasks.generate_conversation_summary_task.generate_conversation_summary_task + . tasks.mail_invite_member_task.send_invite_member_mail_task + . tasks.remove_document_from_index_task.remove_document_from_index_task + . tasks.remove_segment_from_index_task.remove_segment_from_index_task + . tasks.update_segment_index_task.update_segment_index_task + . tasks.update_segment_keyword_index_task.update_segment_keyword_index_task + + [2023-07-31 12:58:08,831: INFO/MainProcess] Connected to redis://:**@localhost:6379/1 + [2023-07-31 12:58:08,840: INFO/MainProcess] mingle: searching for neighbors + [2023-07-31 12:58:09,873: INFO/MainProcess] mingle: all alone + [2023-07-31 12:58:09,886: INFO/MainProcess] pidbox: Connected to redis://:**@localhost:6379/1. + [2023-07-31 12:58:09,890: INFO/MainProcess] celery@TAKATOST.lan ready. + ``` + +*** + +### フロントエンドページデプロイ + +Web フロントエンドクライアントページサービス + +#### 基本環境インストール + +Web フロントエンドサービスを起動するには[Node.js v18.x (LTS)](http://nodejs.org)、[NPMバージョン8.x.x](https://www.npmjs.com/)または[Yarn](https://yarnpkg.com/)が必要です。 + +* NodeJS + NPMをインストール + +https://nodejs.org/en/download から対応するOSのv18.x以上のインストーラーをダウンロードしてインストールしてください。stableバージョンをお勧めします。NPMも同梱されています。 + +#### 起動手順 + +1. webディレクトリに移動 + + ``` + cd web + ``` +2. 依存関係をインストール + + ``` + npm install + ``` +3. 環境変数を構成。現在のディレクトリに `.env.local` ファイルを作成し、`.env.example` の内容をコピーします。必要に応じてこれらの環境変数の値を変更します。 + + ``` + # For production release, change this to PRODUCTION + NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT + # The deployment edition, SELF_HOSTED + NEXT_PUBLIC_EDITION=SELF_HOSTED + # The base URL of console application, refers to the Console base URL of WEB service if console domain is + # different from api or web app domain. + # example: http://cloud.dify.ai/console/api + NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api + # The URL for Web APP, refers to the Web App base URL of WEB service if web app domain is different from + # console or api domain. + # example: http://udify.app/api + NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5001/api + + # SENTRY + NEXT_PUBLIC_SENTRY_DSN= + NEXT_PUBLIC_SENTRY_ORG= + NEXT_PUBLIC_SENTRY_PROJECT= + ``` +4. コードをビルド + + ``` + npm run build + ``` +5. webサービスを開始 + + ``` + npm run start + # または + yarn start + # または + pnpm start + ``` + +正常に起動すると、ターミナルに以下の情報が出力されます: + +``` +ready - started server on 0.0.0.0:3000, url: http://localhost:3000 +warn - You have enabled experimental feature (appDir) in next.config.js. +warn - Experimental features are not covered by semver, and may cause unexpected or broken application behavior. Use at your own risk. +info - Thank you for testing `appDir` please leave your feedback at https://nextjs.link/app-feedback +``` + +### Difyを訪問 + +最後に、http://127.0.0.1:3000 にアクセスすると、ローカルデプロイメントされたDifyを使用できます。 \ No newline at end of file diff --git a/jp/getting-started/install-self-hosted/start-the-frontend-docker-container.md b/jp/getting-started/install-self-hosted/start-the-frontend-docker-container.md new file mode 100644 index 00000000..4d54482f --- /dev/null +++ b/jp/getting-started/install-self-hosted/start-the-frontend-docker-container.md @@ -0,0 +1,24 @@ +# 単独でフロントエンドのドッカーコンテナを起動する + +バックエンドを単独で開発する際、ソースコードからバックエンドサービスを起動するだけで十分で、フロントエンドのコードをローカルでビルドして起動する必要はないかもしれません。そのため、ドッカーイメージをプルしてコンテナを起動する方法でフロントエンドサービスを起動することができます。以下は具体的な手順です: + +#### DockerHubのイメージを直接使用する + +```Bash +docker run -it -p 3000:3000 -e CONSOLE_URL=http://127.0.0.1:5001 -e APP_URL=http://127.0.0.1:5001 langgenius/dify-web:latest +``` + +#### ソースコードからドッカーイメージをビルドする + +1. フロントエンドイメージをビルドする + + ``` + cd web && docker build . -t dify-web + ``` +2. フロントエンドイメージを起動する + + ``` + docker run -it -p 3000:3000 -e CONSOLE_URL=http://127.0.0.1:5001 -e APP_URL=http://127.0.0.1:5001 dify-web + ``` +3. コンソールのドメイン名とWeb APPのドメイン名が一致しない場合、`CONSOLE_URL`と`APP_URL`を個別に設定できます。 +4. ローカルで [http://127.0.0.1:3000](http://127.0.0.1:3000) にアクセスします。 \ No newline at end of file diff --git a/jp/getting-started/install-self-hosted/zeabur.md b/jp/getting-started/install-self-hosted/zeabur.md new file mode 100644 index 00000000..64947e81 --- /dev/null +++ b/jp/getting-started/install-self-hosted/zeabur.md @@ -0,0 +1,31 @@ +# Zeabur に Dify をデプロイする + +[Zeabur](https://zeabur.com) は、ワンクリックデプロイで Dify をデプロイできるサービスデプロイプラットフォームです。本ガイドは、Zeabur に Dify をデプロイする方法を説明します。 + +## 前提条件 + +開始する前に、以下の事項が必要です: + +- Zeabur のアカウント。アカウントをお持ちでない場合は、[Zeabur](https://zeabur.com/) で無料のアカウントを登録できます。 +- Zeabur のアカウントを開発者プラン(月額 5 ドル)にアップグレードする必要があります。詳細は [Zeabur 定价](https://zeabur.com/pricing) をご覧ください。 + +## Dify を Zeabur にデプロイする + +Zeabur チームはワンクリックデプロイテンプレートを用意しています。以下のボタンをクリックするだけで開始できます: + +[![Deploy to Zeabur](https://zeabur.com/button.svg)](https://zeabur.com/1D4DOW) + +ボタンをクリックすると、Zeabur 上のテンプレートページに移動し、デプロイの詳細情報と説明を確認できます。 + +
Zeabur テンプレート概要
+ +デプロイボタンをクリックした後、生成されたドメイン名を入力し、そのドメイン名を Dify インスタンスにバインドし、他のサービスに環境変数として注入します。 +次に、お好みのリージョンを選択し、デプロイボタンをクリックすると、数分以内に Dify インスタンスがデプロイされます。 + +
リージョンを選択
+ +デプロイが完了すると、Zeabur コンソール上にプロジェクトページが表示されます。以下の図のように、デプロイ中に入力したドメイン名が自動的に NGINX サービスにバインドされ、そのドメイン名を使用して Dify インスタンスにアクセスできます。 + +
Zeabur プロジェクト概要
+ +また、NGINX サービスページのネットワーキングタブでドメイン名を変更することもできます。詳細については [Zeabur ドキュメント](https://zeabur.com/docs/deploy/domain-binding) を参照してください。 \ No newline at end of file diff --git a/jp/getting-started/readme/features-and-specifications.md b/jp/getting-started/readme/features-and-specifications.md new file mode 100644 index 00000000..09d33978 --- /dev/null +++ b/jp/getting-started/readme/features-and-specifications.md @@ -0,0 +1,17 @@ +--- +description: 大規模言語モデル(LLM)の応用技術スタックに精通している技術者にとって、このドキュメントはDifyのユニークな利点を理解するための近道となります。賢明な比較と選択ができ、さらには同僚や友人にも推薦することができるでしょう。 +--- + +# 特性と技術仕様 + +{% hint style="info" %} +Difyでは、透明な製品特性と技術仕様ポリシーを採用しており、私たちの製品を全面的に理解した上で意思決定できるようにしています。この透明性は、技術選定に有益であるだけでなく、コミュニティメンバーが製品を深く理解し、積極的に貢献することを促進します。 +{% endhint %} + +### プロジェクトの基本情報 + +
プロジェクト設立2023年3月
オープンソースライセンスApache License 2.0 に基づく商業ライセンス
公式開発チーム10名以上のフルタイム社員
コミュニティ貢献者120人以上
バックエンド技術Python/Flask/PostgreSQL
フロントエンド技術Next.js
コード行数13万行以上
リリースサイクル平均して週に1回
+ +### 技術特性 + +
大規模言語モデル推理エンジンDify Runtime (v0.4以降はLangChainを除去)
商業モデルサポート

10社以上、OpenAIとAnthropicを含む

新しい主流モデルは通常48時間以内に接続完了

MaaSサプライヤーサポート7社、Hugging Face、Replicate、AWS Bedrock、NVIDIA、GroqCloud、together.ai、OpenRouter
ローカルモデル推理Runtimeサポート6、Xoribits(推奨)、OpenLLM、LocalAI、ChatGLM、Ollama、NVIDIA TIS
OpenAIインターフェース標準モデル接続サポート∞社
多モーダル技術

自動音声認識(ASR)モデル

GPT-4V規格のリッチテキストモデル

プリセットアプリケーションタイプ

対話型アプリケーション

テキスト生成アプリケーション(近日終了予定)
エージェント
ワークフロー
グループ(Q2でリリース予定)

プロンプト即サービス編成

高評価のビジュアル化されたプロンプト編成インターフェース、同じインターフェースでプロンプトを編集し、効果をプレビュー可能

編成モード

  • 簡単編成モード
  • アシスタントモード編成
  • フローモード編成
  • マルチエージェントモード(Q2でリリース予定)

プロンプト変数タイプ

  • 文字列
  • 単一選択列挙
  • 外部API
  • ファイル(Q2でリリース予定)
エージェントワークフロー特性

業界をリードするビジュアル化されたフローチャート編成インターフェース、見たまま編集できるノードデバッグ、プラグイン可能なDSL、ネイティブなコードランタイムにより、より複雑で信頼性が高く安定したLLMアプリケーションを構築可能。

サポートノード

  • LLM
  • 知識ベース検索
  • 問題分類
  • 条件分岐
  • コード実行
  • テンプレート変換
  • HTTPリクエスト
  • ツール
RAG特性

画期的なビジュアル化された知識ベース管理インターフェース、セグメントプレビューとリコール効果テストをサポート。

インデックス方式

  • キーワード
  • テキストベクトル
  • LLM支援の問題-セグメント方式

検索方式

  • キーワード
  • テキスト類似度マッチング
  • ハイブリッド検索
  • N選1方式
  • マルチリコール

リコール最適化技術

  • ReRankモデルを使用
ETL技術

TXT、Markdown、PDF、HTML、DOC、CSVなどの形式のファイルを自動的にクリーニングすることをサポート。組み込みのUnstructuredサービスを有効にすると最大限のサポートが得られます。

Notionからのドキュメントを知識ベースとして同期することをサポート。

ベクトルデータベースサポートQdrant(推奨)、Weaviate、Zilliz
エージェント技術

ReAct、ファンクションコール

ツールサポート

  • OpenAIプラグイン標準のツールを呼び出し可能
  • OpenAPI SpecificationのAPIを直接ロードしてツールとして使用可能

内蔵ツール

  • 30種類以上(2024年Q1時点)
ログサポート、ログに基づいてアノテーション可能
アノテーション返信人間がアノテートしたQ&Aペアに基づき、類似度比較応答を作成可能
モデルの微調整段階で使用するデータ形式としてエクスポート可能
コンテンツ審査メカニズムOpenAI Moderationまたは外部API
チーム協働ワークスペースおよび複数メンバー管理サポート
API仕様RESTful、ほとんどの機能をカバー
デプロイ方法Docker、Helm
\ No newline at end of file diff --git a/jp/getting-started/readme/model-providers.md b/jp/getting-started/readme/model-providers.md new file mode 100644 index 00000000..b0bf2ef7 --- /dev/null +++ b/jp/getting-started/readme/model-providers.md @@ -0,0 +1,9 @@ +# モデル供給者リスト + +Difyは以下のモデル供給者に対してネイティブサポートを提供しています: + +
供給者大規模言語モデル埋め込み再ランク付け
オープンAI✔️(🛠️)(👓)✔️
アンスロピック✔️
アジュールオープンAI✔️(🛠️)(👓)✔️
Google✔️(👓)
コヒア✔️✔️✔️
ベドロック✔️
トゥゲザー.ai✔️
オラマ✔️✔️
レプリケート✔️✔️
ハギングフェイス✔️✔️
智譜✔️(🛠️)(👓)✔️
百川✔️✔️
星火✔️
ミニマックス✔️(🛠️)✔️
通義千問✔️
文心一言✔️
月の暗面✔️(🛠️)
ディープシーク✔️(🛠️)
Jina✔️✔️
チャットGLM✔️(🛠️)
シンフェレンス✔️(🛠️)(👓)✔️✔️
オープンLLM✔️✔️
ローカルAI✔️✔️
オープンAI API互換✔️✔️
+ +その中で (🛠️) は関数呼び出しをサポートすることを、(👓) は視覚能力を持つことを示します。 + +この表は常に更新されています。また、コミュニティメンバーからのモデル供給者に関する様々な[リクエスト](https://github.com/langgenius/dify/discussions/categories/ideas)も注視しています。必要なモデル供給者がこのリストにない場合は、プルリクエストを提出して貢献することができます。詳しくは、[contribution.md](../../community/contribution.md "mention")ガイドをご覧ください。 \ No newline at end of file diff --git a/jp/guides/application-publishing/README.md b/jp/guides/application-publishing/README.md new file mode 100644 index 00000000..3acf1bfc --- /dev/null +++ b/jp/guides/application-publishing/README.md @@ -0,0 +1,13 @@ +# ウェブアプリの発表 + +{% content-ref url="launch-your-webapp-quickly/" %} +[迅速にウェブアプリを発表する](launch-your-webapp-quickly/) +{% endcontent-ref %} + +{% content-ref url="developing-with-apis.md" %} +[APIを使用した開発](developing-with-apis.md) +{% endcontent-ref %} + +{% content-ref url="based-on-frontend-templates.md" %} +[フロントエンドテンプレートに基づく](based-on-frontend-templates.md) +{% endcontent-ref %} \ No newline at end of file diff --git a/jp/guides/application-publishing/based-on-frontend-templates.md b/jp/guides/application-publishing/based-on-frontend-templates.md new file mode 100644 index 00000000..3dab9200 --- /dev/null +++ b/jp/guides/application-publishing/based-on-frontend-templates.md @@ -0,0 +1,38 @@ +# フロントエンドテンプレートに基づいた再開発 + +もし開発者が新製品をゼロから開発する場合や製品プロトタイプ設計の段階にある場合、Difyを使用して迅速にAIサイトをリリースすることができます。同時に、Difyは開発者がさまざまな形式のフロントエンドアプリを自由に創造できることを望んでおり、そのため以下を提供しています: + +* **SDK**:さまざまな言語でDify APIに迅速に接続するためのもの +* **WebAppテンプレート**:各種アプリケーションのためのWebApp開発用スキャフォルディング + +WebAppテンプレートはMITライセンスに基づいてオープンソース化されていますので、自由に変更してデプロイすることができ、Difyのすべての機能を実現することができます。また、自分のアプリを実現するための参考コードとしても使用できます。 + +これらのテンプレートはGitHubで見つけることができます: + +* [対話型アプリケーション](https://github.com/langgenius/webapp-conversation) +* [テキスト生成型アプリケーション](https://github.com/langgenius/webapp-text-generator) + +WebAppテンプレートを使用する最も簡単な方法は、GitHubで「このテンプレートを使用」をクリックすることです。これにより、新しいリポジトリがフォークされます。その後、DifyのアプリIDとAPIキーを以下のように設定する必要があります: + +````javascript +export const APP_ID = '' +export const API_KEY = '' +``` + +`config/index.ts`での詳細な設定: +```js +export const APP_INFO: AppInfo = { + "title": 'Chat APP', + "description": '', + "copyright": '', + "privacy_policy": '', + "default_language": 'zh-Hans' +} + +export const isShowPrompt = true +export const promptTemplate = '' +```` + +各WebAppテンプレートにはREADMEファイルが含まれており、デプロイ方法の説明が記載されています。通常、WebAppテンプレートには軽量バックエンドサービスが含まれており、これは開発者のAPIキーがユーザーに直接露出しないようにするためのものです。 + +これらのWebAppテンプレートは、AIアプリプロトタイプを迅速に構築し、Difyのすべての機能を使用するのに役立ちます。もしこれらを基に自分のアプリや新しいテンプレートを開発した場合、ぜひ私たちと共有してください。 \ No newline at end of file diff --git a/jp/guides/application-publishing/developing-with-apis.md b/jp/guides/application-publishing/developing-with-apis.md new file mode 100644 index 00000000..bdc4894b --- /dev/null +++ b/jp/guides/application-publishing/developing-with-apis.md @@ -0,0 +1,123 @@ +# API 基づく開発 + +Difyは、「**後端即サービス**」の理念に基づいて、すべてのアプリケーションにAPIを提供し、AIアプリケーション開発者に多くの利便性をもたらしています。この理念を通じて、開発者は複雑なバックエンドアーキテクチャやデプロイプロセスを気にすることなく、フロントエンドアプリケーションで大型言語モデル(LLM)の強力な能力を直接利用できます。 + +### Dify API を使用する利点 + +* フロントエンドアプリケーションが直接安全にLLMの能力を呼び出すことができ、バックエンドサービスの開発プロセスを省略 +* 視覚的なインターフェースでアプリケーションを設計し、すべてのクライアントにリアルタイムで反映 +* LLMプロバイダーの基本能力を良好にパッケージ化 +* LLMプロバイダーをいつでも切り替え、LLMのAPIキーを集中管理 +* 視覚的なインターフェースでアプリケーションを運営、例えばログの分析、ラベリング、ユーザーの活性度の観察 +* アプリケーションに対して継続的により多くのツール能力、プラグイン能力、データセットを提供 + +### 利用方法 + +アプリケーションを選択し、アプリケーション(Apps)の左側ナビゲーションで**APIアクセス(API Access)**を見つけます。このページでDifyが提供するAPIドキュメントを確認し、APIにアクセスするための認証情報を管理できます。 + +

APIアクセス

+ +例えば、あなたがコンサルティング会社の開発部門であれば、会社のプライベートデータベースに基づいてAI能力をエンドユーザーや開発者に提供できますが、開発者はあなたのデータやAIロジック設計を把握することはできません。これにより、サービスは安全かつ持続可能に提供され、商業目的を満たすことができます。 + +{% hint style="warning" %} +ベストプラクティスとして、APIキーはバックエンドで呼び出されるべきで、フロントエンドコードやリクエストに平文で直接露出しないようにしてください。これにより、アプリケーションの悪用や攻撃を防ぐことができます。 +{% endhint %} + +アプリケーションに対して**複数のアクセス認証情報**を作成し、異なるユーザーや開発者に提供することができます。これにより、APIの利用者はアプリケーション開発者が提供するAI能力を使用できますが、その背後のプロンプトエンジニアリング、データセット、ツール能力はパッケージ化されています。 + +### テキスト生成型アプリケーション + +高品質なテキスト生成に使用できるアプリケーション、例えば記事生成、要約、翻訳などが含まれます。completion-messagesエンドポイントを呼び出し、ユーザー入力を送信して生成されたテキスト結果を取得します。テキスト生成に使用されるモデルパラメータとプロンプトテンプレートは、Difyのプロンプト編成ページで開発者が設定したものに依存します。 + +**アプリケーション -> APIアクセス**でそのアプリケーションのAPIドキュメントとサンプルリクエストを見つけることができます。 + +例えば、テキスト補完情報のAPIの呼び出し例: + +{% tabs %} +{% tab title="cURL" %} +``` +curl --location --request POST 'https://api.dify.ai/v1/completion-messages' \ +--header 'Authorization: Bearer ENTER-YOUR-SECRET-KEY' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "inputs": {}, + "response_mode": "streaming", + "user": "abc-123" +}' +``` +{% endtab %} + +{% tab title="Python" %} +```python +import requests +import json + +url = "https://api.dify.ai/v1/completion-messages" + +headers = { + 'Authorization': 'Bearer ENTER-YOUR-SECRET-KEY', + 'Content-Type': 'application/json', +} + +data = { + "inputs": {"text": 'Hello, how are you?'}, + "response_mode": "streaming", + "user": "abc-123" +} + +response = requests.post(url, headers=headers, data=json.dumps(data)) + +print(response.text) +``` +{% endtab %} +{% endtabs %} + +### 対話型アプリケーション + +大部分のシーンで使用できる対話型アプリケーションは、一問一答形式でユーザーと継続的に対話します。対話を開始するにはchat-messagesエンドポイントを呼び出し、返されたconversation\_idを引き続き提供することで会話を継続することができます。 + +**アプリケーション -> APIアクセス**でそのアプリケーションのAPIドキュメントとサンプルリクエストを見つけることができます。 + +例えば、対話情報のAPIの呼び出し例: + +{% tabs %} +{% tab title="cURL" %} +``` +curl --location --request POST 'https://api.dify.ai/v1/chat-messages' \ +--header 'Authorization: Bearer ENTER-YOUR-SECRET-KEY' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "inputs": {}, + "query": "eh", + "response_mode": "streaming", + "conversation_id": "1c7e55fb-1ba2-4e10-81b5-30addcea2276" + "user": "abc-123" +}' + +``` +{% endtab %} + +{% tab title="Python" %} +```python +import requests +import json + +url = 'https://api.dify.ai/v1/chat-messages' +headers = { + 'Authorization': 'Bearer ENTER-YOUR-SECRET-KEY', + 'Content-Type': 'application/json', +} +data = { + "inputs": {}, + "query": "eh", + "response_mode": "streaming", + "conversation_id": "1c7e55fb-1ba2-4e10-81b5-30addcea2276", + "user": "abc-123" +} + +response = requests.post(url, headers=headers, data=json.dumps(data)) + +print(response.json()) +``` +{% endtab %} +{% endtabs %} \ No newline at end of file diff --git a/jp/guides/application-publishing/launch-your-webapp-quickly/README.md b/jp/guides/application-publishing/launch-your-webapp-quickly/README.md new file mode 100644 index 00000000..7499554c --- /dev/null +++ b/jp/guides/application-publishing/launch-your-webapp-quickly/README.md @@ -0,0 +1,56 @@ +# 公開用Webサイトの作成 + +Difyを使ってAIアプリを作成するメリットの一つは、数分でユーザー向けのWebアプリを公開できることです。このアプリはあなたのプロンプトに基づいて機能します。 + +* 自己ホストのオープンソース版を使用する場合、そのアプリはあなたのサーバー上で動作します +* クラウドサービスを使用する場合、そのアプリはUdify.appにホストされます + +*** + +### AIサイトの公開 + +アプリ概要ページで、AIサイト(Webアプリ)に関するカードを見つけることができます。Webアプリのアクセスをオンにするだけで、ユーザーと共有できるリンクが得られます。 + +
+ +以下の2種類のアプリには、きれいなWebアプリのインターフェースを提供しています: + +* テキスト生成型([前往预览](text-generator.md)) +* 会話型([前往预览](conversation-application.md)) + +*** + +### AIサイトの設定 + +Webアプリのカード上の**設定**ボタンをクリックすると、AIサイトのオプションをいくつか設定できます。これらは最終ユーザーに表示されます: + +* アイコン +* 名前 +* アプリの説明 +* インターフェース言語 +* 著作権情報 +* プライバシーポリシーリンク +* カスタム免責事項 + +{% hint style="info" %} +現在サポートされているインターフェース言語:英語、中国語(簡体字)、中国語(繁体字)、ポルトガル語、ドイツ語、日本語、韓国語、ウクライナ語、ベトナム語。追加の言語が必要な場合は、GitHubでイシューを提出するか、プルリクエストを提出してコードを提供してください。[サポートを求める](../../../community/support.md)。 +{% endhint %} + +*** + +### AIサイトの埋め込み + +Difyは、あなたのAIアプリをビジネスウェブサイトに埋め込むことをサポートしています。この機能を使えば、数分でビジネスデータを持つ公式サイトのAIカスタマーサポートやビジネス知識Q&Aなどのアプリを作成できます。Webアプリのカード上の埋め込みボタンをクリックし、埋め込みコードをコピーして、ウェブサイトの目標位置に貼り付けます。 + +* iframeタグの方法 + + iframeコードを、AIアプリを表示するあなたのウェブサイトのタグ(例:`
`、`
`)にコピーします。 +* scriptタグの方法 + + scriptコードを、あなたのウェブサイトの``または``タグにコピーします。 + +
+ +例えば、scriptコードを公式サイトの``に貼り付けると、公式サイトのAIロボットが得られます: + +
\ No newline at end of file diff --git a/jp/guides/application-publishing/launch-your-webapp-quickly/conversation-application.md b/jp/guides/application-publishing/launch-your-webapp-quickly/conversation-application.md new file mode 100644 index 00000000..049fe512 --- /dev/null +++ b/jp/guides/application-publishing/launch-your-webapp-quickly/conversation-application.md @@ -0,0 +1,50 @@ +# 対話型アプリケーション + +対話型アプリケーションは、一問一答の形式でユーザーと継続的に対話を行います。対話型アプリケーションは以下の機能をサポートします(アプリケーションの設定時にこれらの機能が有効になっていることを確認してください): + +* 対話前に入力する変数。 +* 対話の作成、ピン留め、削除。 +* 対話の冒頭。 +* 次のステップの質問の提案。 +* 音声認識。 +* 引用と帰属。 + +### 対話前に入力する変数 + +アプリケーションの設定時に変数入力を求める設定をしている場合、対話を始める前に指示に従って情報を入力する必要があります: + +
+ +必要な内容を入力し、「対話を開始」ボタンをクリックしてチャットを始めます。 + +
+ +AIの回答に移動すると、会話の内容をコピーしたり、回答に対して「いいね」や「悪いね」を付けることができます。 + +
+ +### 対話の作成、ピン留めと削除 + +「新しい対話」ボタンをクリックして新しい対話を開始します。会話上に移動すると、会話を「ピン留め」または「削除」する操作が可能です。 + +
+ +### 対話の冒頭 + +アプリケーションの設定時に「対話の冒頭」機能が有効になっている場合、新しい対話を作成するとAIアプリケーションが自動的に最初の対話を開始します: + +
+ +### 次のステップの質問の提案 + +アプリケーションの設定時に「次のステップの質問の提案」機能が有効になっている場合、対話後にシステムが自動的に3つの関連する質問を提案します: + +
+ +### 音声認識 + +アプリケーションの設定時に「音声認識」機能が有効になっている場合、Webアプリケーション端の入力欄に音声入力のアイコンが表示され、アイコンをクリックすることで音声入力が文字に変換されます: + +_使用するデバイス環境がマイクロフォンの使用を許可していることを確認してください。_ + +
\ No newline at end of file diff --git a/jp/guides/application-publishing/launch-your-webapp-quickly/text-generator.md b/jp/guides/application-publishing/launch-your-webapp-quickly/text-generator.md new file mode 100644 index 00000000..e44a1e21 --- /dev/null +++ b/jp/guides/application-publishing/launch-your-webapp-quickly/text-generator.md @@ -0,0 +1,58 @@ +# テキスト生成型アプリケーション + +テキスト生成型アプリケーションは、ユーザーが提供するプロンプトに基づいて高品質のテキストを自動生成するアプリケーションです。記事の要約や翻訳など、さまざまなタイプのテキストを生成することができます。 + +テキスト生成型アプリケーションは以下の機能をサポートしています: + +1. 一回実行。 +2. バッチ実行。 +3. 実行結果の保存。 +4. より類似した結果の生成。 + +以下にそれぞれの機能を紹介します。 + +### 一回実行 + +クエリ内容を入力し、実行ボタンをクリックすると、右側に結果が生成されます。以下の図の通りです: + +
+ +生成された結果部分では、「コピー」ボタンをクリックすると内容をクリップボードにコピーできます。「保存」ボタンをクリックすると内容を保存できます。「保存済み」タブで保存した内容を見ることができます。また、生成された内容には「いいね」や「バッド」をつけることもできます。 + +### バッチ実行 + +時には、アプリケーションを何度も実行する必要があります。例えば、テーマに基づいて記事を生成するWebアプリケーションがあるとします。今、100種類のテーマに基づいて記事を生成する必要があるとします。この場合、このタスクを100回も行うのは非常に面倒です。また、1つのタスクが完了するのを待たなければ次のタスクを開始できません。 + +上記のシナリオでは、バッチ実行機能を使うと操作が便利になり(テーマを `csv` ファイルに入力し、一度だけ実行する)、生成時間も節約できます(複数のタスクが同時に実行される)。使用方法は以下の通りです: + +#### 第1歩 バッチ実行ページに入る + +「バッチ実行」タブをクリックすると、バッチ実行ページに入ります。 + +
+ +#### 第2歩 テンプレートをダウンロードして内容を入力する + +「テンプレートダウンロード」ボタンをクリックし、テンプレートをダウンロードします。テンプレートを編集し、内容を入力して `.csv` 形式のファイルとして保存します。 + +
+ +#### 第3歩 ファイルをアップロードして実行 + +
+ +生成された内容をエクスポートする必要がある場合は、右上の「ダウンロードボタン」をクリックして `csv` ファイルとしてエクスポートできます。 + +**注意:** アップロードする `csv` ファイルのエンコードは `ユニコード` でなければなりません。そうでないと、実行結果が失敗する可能性があります。解決策:ExcelやWPSなどで `csv` ファイルをエクスポートする際に、エンコードを `ユニコード` に選択します。 + +### 保存結果 + +生成結果の下にある「保存」ボタンをクリックすると、実行結果を保存できます。「保存済み」タブで、すべての保存された内容を見ることができます。 + +
+ +### より類似した結果の生成 + +アプリケーションのオーケストレーションで「より類似した」機能を有効にしている場合、Webアプリケーションで「より類似した」ボタンをクリックすると、現在の結果と似た内容を生成できます。以下の図の通りです: + +
\ No newline at end of file diff --git a/jp/guides/application-publishing/launch-your-webapp-quickly/web-app-settings.md b/jp/guides/application-publishing/launch-your-webapp-quickly/web-app-settings.md new file mode 100644 index 00000000..06707334 --- /dev/null +++ b/jp/guides/application-publishing/launch-your-webapp-quickly/web-app-settings.md @@ -0,0 +1,29 @@ +# 概覧 + +ウェブアプリケーションはアプリケーションユーザーのためのものです。アプリケーション開発者がDifyでアプリケーションを作成すると、対応するウェブアプリケーションが提供されます。ウェブアプリケーションの使用者はログインせずに利用できます。ウェブアプリケーションは、PC、タブレット、スマートフォンなど、さまざまなサイズのデバイスに対応しています。 + +ウェブアプリケーションの内容は、アプリケーションの設定と一致しています。設定を変更し、アプリケーションの提示詞編成ページで「配信」ボタンを押して配信すると、ウェブアプリケーションの内容も現在のアプリケーションの設定に基づいて更新されます。 + +アプリケーション概覧ページでウェブアプリケーションへのアクセスを開閉したり、ウェブアプリケーションのサイト情報を変更したりできます: + +* アイコン +* 名前 +* アプリケーションの説明 +* インターフェース言語 +* 著作権情報 +* プライバシーポリシーリンク + +ウェブアプリケーションの機能は、開発者がアプリケーションを編成する際にその機能を有効にするかどうかによって決まります。例えば: + +* 会話のイントロ +* 会話前に入力する変数 +* 次の質問の提案 +* 音声からテキストへ変換 +* 引用と帰属 +* もっと似たような回答(テキスト型) +* ...... + +次の章では、ウェブアプリケーションの2種類のタイプについて紹介します: + +* テキスト生成型 +* 会話型 \ No newline at end of file diff --git a/jp/guides/application_orchestrate/README.md b/jp/guides/application_orchestrate/README.md new file mode 100644 index 00000000..5b6c6ab5 --- /dev/null +++ b/jp/guides/application_orchestrate/README.md @@ -0,0 +1,26 @@ +# 構築 + +Difyにおいて、「アプリケーション」とは、GPTなどの大規模言語モデルを基に構築された実際のシナリオアプリケーションを指します。アプリケーションを作成することで、特定のニーズに応じたスマートAI技術を適用することができます。これは、AIアプリケーションの開発のためのエンジニアリングパラダイムと具体的なデリバラブルの両方を含んでいます。 + +要するに、アプリケーションは開発者に以下を提供します: + +* トークン認証を通じて、バックエンドまたはフロントエンドアプリケーションから直接呼び出せる、使いやすいAPI +* すぐに使える、美しくホスティングされたWebApp。WebAppのテンプレートを使用して二次開発が可能 +* 提示詞エンジニアリング、コンテキスト管理、ログ分析、および注釈を含む使いやすいインターフェースのセット + +これらの**いずれか一つ**または**すべて**を選んで、あなたのAIアプリケーション開発をサポートできます。 + +### アプリケーションタイプ + +Difyには、四つのアプリケーションタイプが提供されています: + +* **チャットアシスタント**:LLMを基にした対話型インタラクションアシスタント +* **テキスト生成**:ストーリーの執筆、テキスト分類、翻訳などのテキスト生成タスク向けのアシスタント +* **エージェント**:タスクを分解し、推論し、ツールを呼び出す対話型インテリジェントアシスタント +* **ワークフロー**:プロセスオーケストレーションに基づいて、より柔軟なLLMワークフローを定義 + +テキスト生成とチャットアシスタントの違いは以下の表をご覧ください: + +
テキスト生成チャットアシスタント
WebApp 界面フォーム+結果式チャット式
WebAPIエンドポイントcompletion-messageschat-messages
インタラクション方式一問一答多輪対話
ストリーミング結果返却支持支持
コンテキスト保存当次持続
ユーザー入力フォーム支持支持
データセットとプラグイン支持支持
AIオープニング不支持支持
シナリオ例翻訳、判断、インデックス付けチャット
+ +### \ No newline at end of file diff --git a/jp/guides/application_orchestrate/agent.md b/jp/guides/application_orchestrate/agent.md new file mode 100644 index 00000000..7c4a7d55 --- /dev/null +++ b/jp/guides/application_orchestrate/agent.md @@ -0,0 +1,61 @@ +# エージェント + +### 定義 + +エージェントアシスタントは、大規模言語モデルの推論能力を活用し、複雑な人間のタスクを自律的に目標設定、タスク分解、ツールの呼び出し、プロセスの反復を行い、人間の介入なしでタスクを完了することができます。 + +### エージェントアシスタントの使い方 + +迅速に使い始めるために、「探索」でエージェントアシスタントのアプリケーションテンプレートを見つけて自分のワークスペースに追加するか、それを基にカスタマイズすることができます。新しいDifyスタジオでは、ゼロから自分専用のエージェントアシスタントを編成し、財務報告書の分析、レポートの作成、ロゴデザイン、旅行計画などのタスクを完了する手助けをすることができます。 + +

探索 - エージェントアシスタントアプリケーションテンプレート

+ +「スタジオ - アシスタント型アプリケーション」でエージェントアシスタントを選択すると編成を開始できます。 + +

スタジオ - エージェントアシスタントの構築

+ +エージェントアシスタントの推論モデルを選択します。エージェントアシスタントのタスク完了能力はモデルの推論能力に依存しますので、より強力な推論能力を持つモデルシリーズ、例えばgpt-4を選択することをお勧めします。これにより、より安定したタスク完了効果が得られます。 + +

エージェントアシスタントの推論モデルを選択

+ +「プロンプト」でエージェントアシスタントの指示を作成できます。より良い結果を得るために、指示の中でタスクの目標、ワークフロー、リソース、制約などを明確にすることが重要です。 + +

エージェントアシスタントの指示プロンプトを編成

+ +### アシスタントに必要なツールを追加 + +「コンテキスト」では、エージェントアシスタントが参照できるナレッジベースツールを追加できます。これにより、外部の背景知識を取得することができます。 + +「ツール」では、使用する必要があるツールを追加できます。ツールはLLMの能力を拡張し、例えばネット検索、科学計算、画像の作成などが可能になります。これにより、LLMは外部世界と接続する能力を持つようになります。Difyは2種類のツールタイプを提供しています:**ファーストパーティツール**と**カスタムツール**です。 + +Difyエコシステムが提供するファーストパーティ内蔵ツールを直接使用するか、カスタムAPIツール(現在はOpenAPI / SwaggerおよびOpenAIプラグイン規格をサポート)を簡単にインポートすることができます。 + +

アシスタントに必要なツールを追加

+ +ツールを使用すると、Dify上でより強力なAIアプリケーションを作成できます。例えば、エージェントアシスタント型アプリケーションに適したツールを編成することで、タスクの推論、ステップの分解、ツールの呼び出しを通じて複雑なタスクを完了できます。さらに、ツールを使用して他のシステムやサービスと接続し、外部環境と対話することも容易です。例えば、コードの実行や特定の情報源へのアクセスなどです。 + +### エージェントの設定 + +DifyではエージェントアシスタントにFunction Calling(関数呼び出し)とReActの2つの推論モードを提供しています。関数呼び出しをサポートするモデルシリーズ(例:gpt-3.5/gpt-4)はより良い、安定したパフォーマンスを持っています。関数呼び出しをサポートしていないモデルシリーズには、ReAct推論フレームワークで類似の効果を実現しています。 + +エージェント設定では、アシスタントのイテレーション制限を変更できます。 + +

Function Calling モード

+ +

ReAct モード

+ +### 会話のオープニング設定 + +エージェントアシスタントの会話オープニングとオープニング質問を設定できます。設定された会話オープニングは、ユーザーが初めて対話を開始する際に、アシスタントが完了できるタスクや提案される質問の例を表示します。 + +

会話のオープニングとオープニング質問を設定

+ +### デバッグとプレビュー + +エージェントアシスタントの編成が完了したら、アプリとして公開する前にデバッグとプレビューを行い、アシスタントのタスク完了効果を確認できます。 + +

デバッグとプレビュー

+ +### アプリの公開 + +

アプリをWebアプリとして公開

\ No newline at end of file diff --git a/jp/guides/application_orchestrate/app_toolkits/README.md b/jp/guides/application_orchestrate/app_toolkits/README.md new file mode 100644 index 00000000..5778144c --- /dev/null +++ b/jp/guides/application_orchestrate/app_toolkits/README.md @@ -0,0 +1,49 @@ +# アプリケーションツールボックス + +**スタジオ -- アプリケーションオーケストレーション**内で**機能を追加する**をクリックし、アプリケーションツールボックスを開きます。 + +アプリケーションツールボックスは、Difyの[アプリケーション](../#application\_type)に対して様々な付加機能を提供します。 + +
+ +### 会話のオープニング + +会話型アプリケーションでは、AIが最初の発言や質問を行います。開場のメッセージや質問を編集することで、ユーザーに質問を促し、アプリの背景を説明し、対話のハードルを下げることができます。 + +

会話のオープニング

+ +### 次の質問の提案 + +次の質問の提案を設定すると、AIが前回の対話内容に基づいて3つの質問を生成し、次の対話を誘導します。 + +
+ +### テキストから音声への変換 + +この機能をオンにすると、AIの返信内容を自然な音声に変換できます。 + +
+ +### 音声からテキストへの変換 + +この機能をオンにすると、アプリ内で録音し、その音声を自動的にテキストに変換できます。 + +
+ +### 引用と帰属 + +この機能をオンにすると、大規模言語モデルがナレッジベースからの内容を引用して回答する際に、返信内容の下に具体的な引用段落情報(元の段落テキスト、段落番号、マッチ度など)を表示できます。 + +詳しい説明は[引用と帰属](../../knowledge-base/retrieval\_test\_and\_citation.md#id-2-yin-yong-yu-gui-shu)をご覧ください。 + +### コンテンツレビュー + +AIアプリと対話する際には、内容の安全性、ユーザー体験、法律規制など、さまざまな厳しい要求があります。このような場合には「センシティブコンテンツレビュー」機能が必要で、エンドユーザーにより良い対話環境を提供します。 + +詳しい説明は[センシティブコンテンツレビュー](moderation-tool.md)をご覧ください。 + +### 注釈付き返信 + +注釈付き返信機能は、人工的に編集された注釈によって、アプリにカスタマイズされた高品質な質問応答能力を提供します。 + +詳しい説明は[注釈付き返信](../../biao-zhu/annotation-reply.md)をご覧ください。 \ No newline at end of file diff --git a/jp/guides/application_orchestrate/app_toolkits/moderation-tool.md b/jp/guides/application_orchestrate/app_toolkits/moderation-tool.md new file mode 100644 index 00000000..8c0f2cc7 --- /dev/null +++ b/jp/guides/application_orchestrate/app_toolkits/moderation-tool.md @@ -0,0 +1,27 @@ +# 敏感語審査 + +私たちがAIアプリケーションと対話する際、コンテンツの安全性、ユーザーエクスペリエンス、法律と規制など多方面で厳しい要件が求められます。このような場合、エンドユーザーにより良いインタラクティブ環境を提供するために「敏感語審査」機能が必要です。プロンプト編成ページで「機能を追加」をクリックし、下部のツールボックス「コンテンツ監査」を見つけます: + +

コンテンツ監査

+ +### 機能一:OpenAI モデレーション API の呼び出し + +OpenAI やほとんどの大規模言語モデル (LLM) 会社が提供するモデルには、暴力、性、違法行為などの議論を含むコンテンツを出力しないようにするためのコンテンツ審査機能が備わっています。OpenAI はこのコンテンツ審査機能を公開しており、詳細は [platform.openai.com](https://platform.openai.com/docs/guides/moderation/overview) を参照してください。今では Dify でも直接 OpenAI モデレーション API を呼び出すことができます。入力内容や出力内容を監査するには、対応する「プリセット応答」を入力するだけです。 + +

OpenAI モデレーション API

+ +### 機能二:カスタムキーワード + +開発者は監査が必要な敏感語をカスタムキーワードとして設定できます。例えば「kill」をキーワードとして設定し、ユーザーが入力した際に監査動作を行い、プリセット応答内容として「The content is violating usage policies.」と設定します。予測される結果として、ユーザーが「kill」を含むテキストを入力すると、敏感語審査ツールが作動し、プリセット応答内容が返されます。 + +

キーワード

+ +### 機能三:敏感語審査 モデレーション拡張 + +企業内部では異なる敏感語審査のメカニズムが存在することが多いです。企業が企業内ナレッジベースチャットボットなどのAIアプリケーションを開発する際、社員が入力したクエリ内容を敏感語審査する必要があります。このため、開発者は自社の敏感語審査メカニズムに基づいて API 拡張を作成することができます。詳細は [moderation.md](../../extension/api\_based\_extension/moderation.md "mention") を参照してください。これにより、Dify 上で呼び出し、高度なカスタマイズとプライバシー保護を実現することができます。 + +

モデレーション設定

+ +例えば、私たちのローカルサービスで、アメリカ大統領の名前に関する質問を禁止する敏感語審査ルールをカスタマイズします。ユーザーが`query`変数に「Trump」と入力すると、対話時に "Your content violates our usage policy." という応答が返されます。テスト結果は以下の通りです: + +

モデレーションテスト

\ No newline at end of file diff --git a/jp/guides/application_orchestrate/conversation-application.md b/jp/guides/application_orchestrate/conversation-application.md new file mode 100644 index 00000000..298d4f20 --- /dev/null +++ b/jp/guides/application_orchestrate/conversation-application.md @@ -0,0 +1,75 @@ +# チャットアシスタント + +会話型アプリケーションは一問一答形式でユーザーと継続的に対話します。 + +### 適用シーン + +会話型アプリケーションは、カスタマーサービス、オンライン教育、医療、金融サービスなどの分野で使用できます。これらのアプリケーションは、組織の効率を向上させ、人工コストを削減し、より良いユーザー体験を提供するのに役立ちます。 + +### 編成方法 + +会話型アプリケーションの編成には、会話前の提示詞、変数、上下文、開場白、および次の質問の提案が含まれます。 + +ここでは、**面接官** アプリケーションの例を使って、会話型アプリケーションの編成方法を紹介します。 + +#### アプリケーションの作成 + +ホームページで「作成アプリケーション」ボタンをクリックしてアプリケーションを作成します。アプリケーション名を入力し、アプリケーションタイプとして**チャットアシスタント**を選択します。 + +

チャットアシスタントの作成

+ +#### アプリケーションの編成 + +アプリケーションが成功すると、自動的にアプリケーション概要ページに移動します。左側のメニューの **編成** をクリックしてアプリケーションを編成します。 + +

アプリケーションの編成

+ +**提示詞の記入** + +提示詞は、AIの応答に対する一連の指示と制約を提供するために使用されます。例えば、`{input}` のような変数を挿入することができます。提示詞の中の変数の値は、ユーザーが入力した値に置き換えられます。 + +ここで記入する提示詞は次のとおりです: + +> 私はあなたに\{{jobName\}}の面接官を担当してほしいです。私は候補者となり、あなたは\{{jobName\}}開発エンジニアの面接質問を私にします。あなたは面接官としてのみ回答してください。すべての質問を一度に書かないでください。私に質問をし、私の答えを待ってください。説明を書かないでください。面接官のように一つずつ質問し、私の回答を待ってください。 +> +> 私が準備ができたと伝えたら、質問を始めてください。 + +![](<../../.gitbook/assets/image (80).png>) + +より良い体験のために、次のような会話の開場白を追加します:`こんにちは、{name}。私はあなたの面接官のボブです。準備はできましたか?` + +開場白を追加する方法は、左上の「機能を追加」ボタンをクリックして、「会話開場白」機能を開きます: + +
+ +開場白を編集します: + +![](<../../.gitbook/assets/image (28).png>) + +#### 上下文の追加 + +アプリケーションが私有の上下文に基づいて会話を生成したい場合は、[データセット](../knowledge-base/)機能を使用できます。上下文で「追加」ボタンをクリックしてデータセットを追加します。 + +![](<../../.gitbook/assets/image (108).png>) + +#### **調整** + +右側でユーザー入力を記入し、入力内容を調整します。 + +![](<../../.gitbook/assets/image (67).png>) + +結果が期待通りでない場合は、提示詞とモデルパラメータを調整できます。右上のモデル名をクリックしてモデルのパラメータを設定します: + +![](<../../.gitbook/assets/image (76).png>) + +**公開** + +アプリケーションを調整した後、右上の **「公開」** ボタンをクリックして現在の設定を保存します。 + +#### アプリケーションの共有 + +概要ページでアプリケーションの共有アドレスを見つけることができます。「プレビューボタン」をクリックして共有するアプリケーションをプレビューします。「共有」ボタンをクリックして共有リンクアドレスを取得します。「設定」ボタンをクリックして共有するアプリケーション情報を設定します。 + +
+ +共有するアプリケーションをカスタマイズしたい場合は、オープンソースの [WebApp のテンプレート](https://github.com/langgenius/webapp-conversation) をフォークできます。テンプレートに基づいて、あなたのシナリオとスタイルのニーズに合ったアプリケーションに変更します。 \ No newline at end of file diff --git a/jp/guides/application_orchestrate/creating-an-application.md b/jp/guides/application_orchestrate/creating-an-application.md new file mode 100644 index 00000000..322286db --- /dev/null +++ b/jp/guides/application_orchestrate/creating-an-application.md @@ -0,0 +1,37 @@ +# アプリケーションの作成 + +Dify のスタジオ内でアプリケーションを作成する方法は3つあります: + +* アプリケーションテンプレートを基に作成(初心者におすすめ) +* 空白アプリケーションを作成 +* DSLファイルをインポートして作成 + +### テンプレートからアプリケーションを作成 + +初めてDifyを使用する際には、提供されているアプリケーションテンプレートから始めて迅速にアプリケーションを作成することをお勧めします。ナビゲーションから「スタジオ」を選択し、アプリケーションリスト内で「テンプレートから作成」を選びます。 + +

テンプレートからアプリケーションを作成

+ +新しいユーザーがDify上でどのようなタイプのアプリケーションを構築できるかを迅速に理解できるよう、Difyチームのプロンプトエンジニアが多シナリオかつ高品質のアプリケーションテンプレートを作成しました。 + +

Difyアプリケーションテンプレート

+ +### 新しいアプリケーションを作成 + +Difyで空白アプリケーションを作成する場合は、ナビゲーションから「スタジオ」を選択し、アプリケーションリスト内で「空白から作成」を選びます。 + +
+ +初めてアプリケーションを作成する際には、Dify上の4つの異なるアプリケーションタイプの[基本概念](./#application\_type)を理解しておく必要があります。アプリケーションを作成する際には、名前を付け、概要を使ってこのアプリケーションの用途を明確に記載し、チーム内での使用を容易にします。 + +

空白アプリケーションを作成

+ +### DSLファイルから作成 + +コミュニティや他の人からテンプレート(DSLファイル)を受け取った場合は、スタジオから「DSLファイルをインポート」を選択し、インポート後に元のアプリケーションのすべての設定情報を直接読み込みます。 + +

DSLファイルをインポートしてアプリケーションを作成

+ +{% hint style="info" %} +Dify DSL は Dify.AI が v0.6バージョン以降で定義したAIアプリケーションエンジニアリングファイル標準であり、ファイル形式はYMLです。この標準は、アプリケーションの基本記述、モデルパラメータ、オーケストレーション設定などの情報をカバーしています。 +{% endhint %} \ No newline at end of file diff --git a/jp/guides/biao-zhu/README.md b/jp/guides/biao-zhu/README.md new file mode 100644 index 00000000..9329d178 --- /dev/null +++ b/jp/guides/biao-zhu/README.md @@ -0,0 +1,5 @@ +生成AIの急速な進化は、私たちの生活や仕事の仕方を大きく変える可能性がありますが、その進歩についていくのはますます難しくなっています。arXivに掲載されるAI論文の数は指数関数的に増加しており、Stable Diffusionは史上最も急成長したオープンソースプロジェクトの一つとなりました。また、AIアートツールのMidjourneyのDiscordサーバーには数千万人のメンバーが参加しており、最大のゲームコミュニティさえも上回っています。最も注目を集めたのはOpenAIがリリースしたChatGPTで、2ヶ月で1億ユーザーに達し、史上最も急成長した消費者向けアプリとなりました。AIを使いこなすことは、すぐに最も需要のあるスキルの一つになりました。 + +AIを専門的に利用する人々は、AIの出力品質が入力によって大きく左右されることをすぐに学びます。プロンプトエンジニアリングという分野が生まれ、AIモデルの信頼性、効率性、正確性を向上させるためのベストプラクティスが確立されました。中国のテック大手Baiduの共同創設者兼CEOであるRobin Liは、「10年後には世界の仕事の半分がプロンプトエンジニアリングに関わるだろう」と述べています。しかし、プロンプトエンジニアリングは、Microsoft Excelの熟練度のように多くの仕事で必要とされるスキルになると考えられ、人気の職業タイトルそのものになるわけではないでしょう。この新しい変革の波は、私たちがコンピューターについて知っていることをすべて変えています。私たちは、毎回同じ結果を返すアルゴリズムを書くことに慣れていますが、AIの場合はそうではなく、出力は非決定論的です。数十年にわたるムーアの法則により、実質的に無視できるコストでのリアルタイム計算を期待することに慣れてしまいましたが、コストと遅延は再び重要な要素となっています。最大の難関は、これらのモデルが自信満々に架空の情報を生成する「幻覚」と呼ばれる現象であり、私たちは仕事の正確性を評価する方法を再考する必要があります。 + +私たちは2020年のGPT-3ベータ版以来、生成AIとともに働いてきました。モデルが進化するにつれて、多くの初期のプロンプト技術はもはや必要なくなりました。時間が経つにつれて、新しいモデルでも有用な一貫した原則が現れ、テキスト生成と画像生成の両方に機能しました。この本はこれらの普遍的な原則に基づいて書かれており、今後5年間でAIがどう進化しようとも役立つスキルを学ぶのに役立ちます。OpenAIの共同創設者Sam Altmanが述べるように、AIと協力する鍵は「すべてを変える魔法の言葉を見つけること」ではなく、「アイデアの質と自分が求めるものの理解」が重要です。5年後に「プロンプトエンジニアリング」と呼ばれるかどうかはわかりませんが、生成AIと効果的に協力することはますます重要になるでしょう。 \ No newline at end of file diff --git a/jp/guides/biao-zhu/annotation-reply.md b/jp/guides/biao-zhu/annotation-reply.md new file mode 100644 index 00000000..2f333948 --- /dev/null +++ b/jp/guides/biao-zhu/annotation-reply.md @@ -0,0 +1,84 @@ +# アノテーションリプライ + +アノテーションリプライ機能は、手動編集されたアノテーションを通じて、アプリケーションにカスタマイズされた高品質なQ&Aリプライ能力を提供します。 + +適用シーン: + +* **特定分野のカスタマイズ回答:** 企業や政府などのカスタマーサービスやナレッジベースQ&Aのシーンで、特定の問題に対してシステムが明確な結果を提供することを望む場合、特定の問題についてカスタマイズされた出力結果が必要です。例えば、特定の問題に対する「標準回答」や、特定の問題に対する「回答不可」の設定などが挙げられます。 +* **POCやデモ製品の迅速なチューニング:** プロトタイプ製品を迅速に構築する際に、アノテーションリプライを通じて実現されたカスタマイズ回答は、Q&Aの生成結果の予期を効率的に向上させ、顧客満足度を高めることができます。 + +アノテーションリプライ機能は、LLM (大規模言語モデル) の生成プロセスをスキップし、RAG (Retrieval-Augmented Generation) の生成幻覚問題を回避するための別の検索強化システムを提供するものです。 + +### 使用プロセス + +1. アノテーションリプライ機能を有効にすると、LLMの対話リプライ内容に対してアノテーションを行うことができます。LLMがリプライした高品質な回答を直接アノテーションとして追加することもできますし、必要に応じて高品質な回答を手動で編集することもできます。これらの編集されたアノテーション内容は永続化保存されます。 +2. ユーザーが再度類似の質問をした場合、その質問をベクトル化し、類似するアノテーションをクエリします。 +3. マッチング項目が見つかった場合、そのアノテーションに対応する回答を直接返し、LLMやRAGのプロセスを経由せずにリプライします。 +4. マッチング項目が見つからなかった場合、質問は通常プロセスを継続します(LLMやRAGに渡されます)。 +5. アノテーションリプライ機能をオフにすると、システムはアノテーションからのマッチングリプライを継続して行いません。 + +

アノテーションリプライの流れ

+ +### 提示詞編成でアノテーションリプライを有効にする + +「アプリケーション構築->機能追加」からアノテーションリプライのスイッチを有効にします: + +

提示詞編成でアノテーションリプライを有効にする

+ +有効にする際には、まずアノテーションリプライのパラメータを設定する必要があります。設定可能なパラメータには次のものがあります:スコア閾値と埋め込みモデル + +**スコア閾値**:アノテーションリプライのマッチング類似度閾値を設定するために使用されます。閾値スコアを超えるアノテーションのみがリコールされます。 + +**埋め込みモデル**:アノテーションテキストをベクトル化するために使用され、モデルの切り替え時には再度埋め込みが生成されます。 + +保存して有効にすると、この設定は直ちに有効となり、システムはすべての保存されたアノテーションに対して埋め込みモデルを利用して埋め込みを生成し保存します。 + +

アノテーションリプライのパラメータ設定

+ +### 対話デバッグページでアノテーションを追加する + +デバッグおよびプレビューページでモデルのリプライ情報に直接アノテーションを追加または編集できます。 + +

アノテーションリプライを追加する

+ +必要な高品質リプライに編集して保存します。 + +

アノテーションリプライを編集する

+ +同じユーザー質問を再度入力すると、システムは既に保存されたアノテーションを使用してユーザー質問に直接リプライします。 + +

保存されたアノテーションを通じてユーザー質問にリプライする

+ +### ログとアノテーションでアノテーションリプライを有効にする + +「アプリケーション構築->ログとアノテーション->アノテーション」からアノテーションリプライのスイッチを有効にします: + +

ログとアノテーションでアノテーションリプライを有効にする

+ +### アノテーションバックエンドでアノテーションリプライのパラメータを設定する + +アノテーションリプライで設定可能なパラメータには次のものがあります:スコア閾値と埋め込みモデル + +**スコア閾値**:アノテーションリプライのマッチング類似度閾値を設定するために使用されます。閾値スコアを超えるアノテーションのみがリコールされます。 + +**埋め込みモデル**:アノテーションテキストをベクトル化するために使用され、モデルの切り替え時には再度埋め込みが生成されます。 + +

アノテーションリプライのパラメータを設定する

+ +### アノテーションQ&Aペアを一括インポートする + +一括インポート機能内で、アノテーションインポートテンプレートをダウンロードし、テンプレート形式に従ってアノテーションQ&Aペアを編集します。編集が完了したら、一括インポートします。 + +

アノテーションQ&Aペアを一括インポートする

+ +### アノテーションQ&Aペアを一括エクスポートする + +アノテーション一括エクスポート機能を通じて、システム内に保存されたすべてのアノテーションQ&Aペアを一度にエクスポートできます。 + +

アノテーションQ&Aペアを一括エクスポートする

+ +### アノテーションリプライのヒット履歴を確認する + +アノテーションヒット履歴機能内で、すべてのヒットしたアノテーションの編集履歴、ヒットしたユーザー質問、リプライ回答、ヒットソース、マッチング類似度スコア、ヒット時間などの情報を確認できます。これらのシステム情報に基づいて、アノテーション内容を継続的に改善することができます。 + +

アノテーションリプライのヒット履歴を確認する

\ No newline at end of file diff --git a/jp/guides/biao-zhu/logs.md b/jp/guides/biao-zhu/logs.md new file mode 100644 index 00000000..07809ab2 --- /dev/null +++ b/jp/guides/biao-zhu/logs.md @@ -0,0 +1,33 @@ +# ログと標注 + +{% hint style="warning" %} +アプリがユーザーデータを収集する際には、必ず現地の法規を遵守してください。一般的な方法としては、プライバシーポリシーを公開し、ユーザーの同意を得ることです。 +{% endhint %} + +ログ(Logs)機能は、Dify アプリの動作を観察およびマークするためのものです。Dify はアプリのすべてのインタラクションプロセスを記録し、ウェブアプリ(WebApp)や API を通じて呼び出される場合でも、プロンプトエンジニアや LLM 運用担当者に視覚的な LLM アプリ運営体験を提供します。 + +### ログコンソールの使用 + +アプリの左側ナビゲーションに**ログ(Logs)**を見つけることができ、このページは通常以下を表示します: + +* 選択した時間内のユーザーおよびユーザーのインタラクション記録 +* ユーザー入力と AI 出力の結果。対話型アプリの場合、通常は一連のメッセージフロー +* ユーザーおよび運用担当者の評価、ならびに運用担当者の改良マーク + +注意:チーム内の複数の協力者が同じログをマークすると、最後のマークが以前のマークを上書きします。 + +### 改良標注 + +{% hint style="info" %} +これらのマークは、Dify の後続バージョンでモデルの微調整(モデルの微調整)に使用され、モデルの正確性と返信スタイルを向上させることを目的としています。現在のプレビュー版では、マークのみがサポートされています。 +{% endhint %} + +

ログをマークして改良

+ +ログをクリックすると、画面の右側にログ詳細パネルが開き、このパネルで運用担当者はインタラクションに対してマークを追加できます: + +* 良いパフォーマンスのメッセージに「いいね」 +* 悪いパフォーマンスのメッセージに「よくないね」 +* 改善結果に対して改良返信をマーク。これはあなたが期待する AI の返信テキストです + +注意:チーム内の複数の管理者が同じログをマークすると、最後のマークが以前のマークを上書きします。 \ No newline at end of file diff --git a/jp/guides/extension/README.md b/jp/guides/extension/README.md new file mode 100644 index 00000000..b511021b --- /dev/null +++ b/jp/guides/extension/README.md @@ -0,0 +1,8 @@ +# 拡張 + +AIアプリケーションを作成する過程で、開発者は絶えず変化するビジネスニーズと複雑な技術的課題に直面します。拡張能力を効果的に活用することで、アプリケーションの柔軟性と機能性を向上させるだけでなく、企業データのセキュリティとコンプライアンスも確保できます。 + +Difyは以下の2つの拡張方法を提供しています: + +* API拡張 +* コード拡張 \ No newline at end of file diff --git a/jp/guides/extension/api_based_extension/README.md b/jp/guides/extension/api_based_extension/README.md new file mode 100644 index 00000000..b47edf88 --- /dev/null +++ b/jp/guides/extension/api_based_extension/README.md @@ -0,0 +1,263 @@ +# APIエクステンション + +開発者はAPIエクステンションを通じてモジュールの機能を拡張できます。現在、以下のモジュールがサポートされています: + +* `モデレーション` 敏感内容の監査 +* `外部データツール` 外部データツール + +モジュールの機能を拡張する前に、APIと認証用のAPIキー(Difyが自動生成することも可能)を準備する必要があります。 + +対応するモジュール機能を開発するだけでなく、DifyがAPIを正しく呼び出せるよう、以下の規範にも従う必要があります。 + +

APIに基づくエクステンション

+ +### API規範 + +Difyは以下の規範に従ってインターフェースを呼び出します: + +``` +POST {Your-API-Endpoint} +``` + +#### ヘッダー + +| Header | Value | Desc | +| --------------- | ----------------- | --------------------------------------------------------------------- | +| `コンテンツタイプ` | アプリケーション/JSON | リクエスト内容はJSON形式です。 | +| `認証` | ベアラー {api\_key} | APIキーはトークン形式で送信されます。`api_key`を解析し、提供されたAPIキーと一致するか確認してください。 | + +#### リクエストボディ + +``` +{ + "point": string, // エクステンションポイント、異なるモジュールは複数のエクステンションポイントを含む可能性があります + "params": { + ... // 各モジュールのエクステンションポイントに渡すパラメータ + } +} +``` + +#### APIレスポンス + +``` +{ + ... // APIレスポンスの内容、異なるエクステンションポイントのレスポンスは各モジュールの規範に従います +} +``` + +### 検証 + +DifyがAPIベースのエクステンションを設定する際、DifyはAPIエンドポイントにリクエストを送り、APIの有効性を確認します。 + +APIエンドポイントが`point=ping`を受信した場合、インターフェースは`result=pong`を返す必要があります。具体的には次の通りです: + +#### ヘッダー + +``` +コンテンツタイプ: アプリケーション/JSON +認証: ベアラー {api_key} +``` + +#### リクエストボディ + +``` +{ + "point": "ping" +} +``` + +#### API期待レスポンス + +``` +{ + "result": "pong" +} +``` + +### 例 + +ここでは外部データツールを例にとり、地域に基づいて外部の天気情報を取得するシナリオを示します。 + +#### API例 + +``` +POST https://fake-domain.com/api/dify/receive +``` + +**ヘッダー** + +``` +コンテンツタイプ: アプリケーション/JSON +認証: ベアラー 123456 +``` + +**リクエストボディ** + +``` +{ + "point": "app.external_data_tool.query", + "params": { + "app_id": "61248ab4-1125-45be-ae32-0ce91334d021", + "tool_variable": "weather_retrieve", + "inputs": { + "location": "London" + }, + "query": "How's the weather today?" + } +} +``` + +**APIレスポンス** + +``` +{ + "result": "City: London\nTemperature: 10°C\nRealFeel®: 8°C\nAir Quality: Poor\nWind Direction: ENE\nWind Speed: 8 km/h\nWind Gusts: 14 km/h\nPrecipitation: Light rain" +} +``` + +#### コード例 + +コードはPython FastAPIフレームワークに基づいています。 + +1. 依存関係をインストールする + + ``` + pip install fastapi[all] uvicorn + ``` +2. インターフェース仕様に従ってコードを書く + + ``` + from fastapi import FastAPI, Body, HTTPException, Header + from pydantic import BaseModel + + app = FastAPI() + + + class InputData(BaseModel): + point: str + params: dict = {} + + + @app.post("/api/dify/receive") + async def dify_receive(data: InputData = Body(...), authorization: str = Header(None)): + """ + DifyからのAPIクエリデータを受信します。 + """ + expected_api_key = "123456" # TODO このAPIのAPIキー + auth_scheme, _, api_key = authorization.partition(' ') + + if auth_scheme.lower() != "bearer" or api_key != expected_api_key: + raise HTTPException(status_code=401, detail="Unauthorized") + + point = data.point + + # デバッグ用 + print(f"point: {point}") + + if point == "ping": + return { + "result": "pong" + } + if point == "app.external_data_tool.query": + return handle_app_external_data_tool_query(params=data.params) + # elif point == "{point name}": + # TODO その他のポイントの実装 + + raise HTTPException(status_code=400, detail="Not implemented") + + + def handle_app_external_data_tool_query(params: dict): + app_id = params.get("app_id") + tool_variable = params.get("tool_variable") + inputs = params.get("inputs") + query = params.get("query") + + # デバッグ用 + print(f"app_id: {app_id}") + print(f"tool_variable: {tool_variable}") + print(f"inputs: {inputs}") + print(f"query: {query}") + + # TODO 外部データツールクエリの実装 + # 返り値は"result"キーを持つ辞書でなければならず、その値はクエリの結果でなければならない + if inputs.get("location") == "London": + return { + "result": "City: London\nTemperature: 10°C\nRealFeel®: 8°C\nAir Quality: Poor\nWind Direction: ENE\nWind " + "Speed: 8 km/h\nWind Gusts: 14 km/h\nPrecipitation: Light rain" + } + else: + return {"result": "Unknown city"} + ``` +3. APIサービスを起動する。デフォルトポートは8000で、APIの完全なアドレスは:`http://127.0.0.1:8000/api/dify/receive`、設定されたAPIキーは`123456`です。 + +
uvicorn main:app --reload --host 0.0.0.0
+    
+4. DifyにこのAPIを設定します。 + +

APIの設定

+ +5. アプリでこのAPIエクステンションを選択します。 + +

エクステンションの選択

+ +アプリのデバッグ時、Difyは設定されたAPIにリクエストを送り、以下の内容(例)を送信します: + +``` +{ + "point": "app.external_data_tool.query", + "params": { + "app_id": "61248ab4-1125-45be-ae32-0ce91334d021", + "tool_variable": "weather_retrieve", + "inputs": { + "location": "London" + }, + "query": "How's the weather today?" + } +} +``` + +APIレスポンスは以下の通りです: + +``` +{ + "result": "City: London\nTemperature: 10°C\nRealFeel®: 8°C\nAir Quality: Poor\nWind Direction: ENE\nWind Speed: 8 km/h\nWind Gusts: 14 km/h\nPrecipitation: Light rain" +} +``` + +### ローカルデバッグ + +Difyクラウド版は内網APIサービスにアクセスできないため、ローカルでAPIサービスをデバッグするために、[Ngrok](https://ngrok.com)を使用してAPIサービスのエンドポイントをパブリックに公開し、クラウドでローカルコードをデバッグすることができます。操作手順は次の通りです: + +1. [https://ngrok.com](https://ngrok.com)の公式サイトにアクセスし、登録してNgrokファイルをダウンロードします。 + +

ダウンロード

+2. ダウンロードが完了したら、ダウンロードディレクトリに移動し、以下の説明に従って圧縮ファイルを解凍し、初期化スクリプトを実行します。 + * ```Shell + $ unzip /path/to/ngrok.zip + $ ./ngrok config add-authtoken 你的Token + ``` +3. ローカルAPIサービスのポートを確認します: + +

ポートの確認

+ +次に以下のコマンドを実行して開始します: + +* ```Shell + $ ./ngrok http 端口号 + ``` + + 成功例は以下の通りです: + +

Ngrokの起動

+ +4. Forwardingで示されるように、上の図では`https://177e-159-223-41-52.ngrok-free.app`(これは例のドメインです。自分のドメインに置き換えてください)がパブリックドメインとなります。 + +* 上記の例に従って、ローカルで既に起動しているサービスエンドポイントを公開し、コード例のインターフェース:`http://127.0.0.1:8000/api/dify/receive`を`https://177e-159-223-41-52.ngrok-free.app/api/dify/receive`に置き換えます。 + +これで、このAPIエンドポイントはパブリックアクセス可能となります。これで、DifyでこのAPIエンドポイントを設定してローカルデバッグコードを実行できます。設定手順については、[external\_data\_tool.md](../../knowledge-base/external\_data\_tool.md "mention")を参照してください。 + +### Cloudflare Workersを使用したAPIエクステンションのデプロイ + +Cloudflare Workersを使用してAPIエクステンションをデプロイすることをお勧めします。Cloudflare Workersは簡単にパブリックアドレスを提供でき、無料で使用できます。 + +[cloudflare\_workers.md](cloudflare\_workers.md "mention")。 \ No newline at end of file diff --git a/jp/guides/extension/api_based_extension/cloudflare_workers.md b/jp/guides/extension/api_based_extension/cloudflare_workers.md new file mode 100644 index 00000000..19129488 --- /dev/null +++ b/jp/guides/extension/api_based_extension/cloudflare_workers.md @@ -0,0 +1,100 @@ +# Cloudflare ワーカーを使用して API ツールをデプロイ + +## 始めに + +Dify API Extension は、アクセス可能な公開アドレスを API エンドポイントとして使用する必要があるため、API 拡張を公開アドレスにデプロイする必要があります。ここでは、Cloudflare ワーカーを使用して API 拡張をデプロイします。 + +まず、[Example GitHub レポジトリ](https://github.com/crazywoola/dify-extension-workers) をクローンします。このレポジトリには、簡単な API 拡張が含まれており、これを基にして修正を行うことができます。 + +```bash +git clone https://github.com/crazywoola/dify-extension-workers.git +cp wrangler.toml.example wrangler.toml +``` + +次に、`wrangler.toml` ファイルを開き、`名前` と `互換性の日付` をあなたのアプリケーション名と互換日付に変更します。 + +ここで注意が必要な設定は、`vars` 内の `トークン` です。Dify に API 拡張を追加する際に、このトークンを入力する必要があります。セキュリティ上の観点から、ランダムな文字列をトークンとして使用することをお勧めします。トークンをソースコードに直接書き込むのではなく、環境変数を使用してトークンを渡す方法を取るべきです。したがって、wrangler.toml をコードレポジトリにコミットしないでください。 + +```toml +name = "dify-extension-example" +compatibility_date = "2023-01-01" + +[vars] +TOKEN = "bananaiscool" +``` + +この API 拡張は、ランダムなブレイキング・バッドの名言を返します。`src/index.ts` 内でこの API 拡張のロジックを変更することができます。この例は、サードパーティの API とやり取りする方法を示しています。 + +```typescript +// ⬇️ impliment your logic here ⬇️ +// point === "app.external_data_tool.query" +// https://api.breakingbadquotes.xyz/v1/quotes +const count = params?.inputs?.count ?? 1; +const url = `https://api.breakingbadquotes.xyz/v1/quotes/${count}`; +const result = await fetch(url).then(res => res.text()) +// ⬆️ impliment your logic here ⬆️ +``` + +このレポジトリは、ビジネスロジック以外のすべての設定を簡素化しています。`npm` コマンドを使用して API 拡張をデプロイすることができます。 + +```bash +npm run deploy +``` + +デプロイが成功すると、公開アドレスが得られます。このアドレスを Dify に API エンドポイントとして追加できます。`endpoint` パスを忘れないようにしてください。 + +

Dify に API エンドポイントを追加する

+ +

アプリ編集ページに API ツールを追加する

+ +## その他のロジック TL;DR + +### ベアラー認証について + +```typescript +import { bearerAuth } from "hono/bearer-auth"; + +(c, next) => { + const auth = bearerAuth({ token: c.env.TOKEN }); + return auth(c, next); +}, +``` + +上記のコードでは、ベアラー認証ロジックを示しています。`hono/bearer-auth` パッケージを使用してベアラー認証を実装しています。`src/index.ts` で `c.env.TOKEN` を使用してトークンを取得できます。 + +### パラメータの検証について + +```typescript +import { z } from "zod"; +import { zValidator } from "@hono/zod-validator"; + +const schema = z.object({ + point: z.union([ + z.literal("ping"), + z.literal("app.external_data_tool.query"), + ]), // 'point' を2つの特定の値に制限 + params: z + .object({ + app_id: z.string().optional(), + tool_variable: z.string().optional(), + inputs: z.record(z.any()).optional(), + query: z.any().optional(), // 文字列または null + }) + .optional(), +}); + +``` + +ここでは、`zod` を使用してパラメータのタイプを定義しています。`src/index.ts` で `zValidator` を使用してパラメータを検証できます。`const { point, params } = c.req.valid("json");` を使用して検証後のパラメータを取得します。`point` は2つの値しか持たないため、`z.union` を使用して定義しています。`params` はオプションのため、`z.optional` を使用して定義しています。この中には `inputs` パラメータがあり、これは `Record` 型です。この型はキーが文字列で値が任意のオブジェクトを示します。`src/index.ts` で `params?.inputs?.count` を使用して `count` パラメータを取得できます。 + +### Cloudflare ワーカーのログを取得する + +```bash +wrangler tail +``` + +## 参考内容 + +* [Cloudflare Workers](https://workers.cloudflare.com/) +* [Cloudflare Workers CLI](https://developers.cloudflare.com/workers/cli-wrangler/install-update) +* [Example GitHub レポジトリ](https://github.com/crazywoola/dify-extension-workers) \ No newline at end of file diff --git a/jp/guides/extension/api_based_extension/external_data_tool.md b/jp/guides/extension/api_based_extension/external_data_tool.md new file mode 100644 index 00000000..ab5688ca --- /dev/null +++ b/jp/guides/extension/api_based_extension/external_data_tool.md @@ -0,0 +1,63 @@ +# 外部データツール + +AIアプリケーションを作成する際、開発者はAPI拡張を通じて外部ツールを利用し、追加データを取得してPromptに組み込むことができます。具体的な手順については[external\_data\_tool.md](../../knowledge-base/external\_data\_tool.md "mention")を参照してください。 + +### 前提条件 + +まずは[.](./ "mention")を読み、APIサービスの基本的な機能の開発と接続を完了してください。 + +### 拡張ポイント + +`app.external_data_tool.query`は、外部データツールのクエリ拡張ポイントです。 + +この拡張ポイントは、エンドユーザーが入力したアプリ変数の内容と対話入力内容(対話型アプリの固定パラメータ)をパラメータとしてAPIに渡します。 + +開発者は対応するツールのクエリロジックを実装し、文字列型のクエリ結果を返す必要があります。 + +#### リクエストボディ + +``` +{ + "point": "app.external_data_tool.query", // 拡張ポイントの種類。ここではapp.external_data_tool.queryに固定 + "params": { + "app_id": string, // アプリID + "tool_variable": string, // 外部データツール変数名。対応する変数ツールの呼び出し元を示す + "inputs": { // エンドユーザーが入力した変数値。キーが変数名、値が変数値 + "var_1": "value_1", + "var_2": "value_2", + ... + }, + "query": string | null // エンドユーザーの現在の対話入力内容。対話型アプリの固定パラメータ + } +} +``` + +* 例 + * ``` + { + "point": "app.external_data_tool.query", + "params": { + "app_id": "61248ab4-1125-45be-ae32-0ce91334d021", + "tool_variable": "weather_retrieve", + "inputs": { + "location": "London" + }, + "query": "How's the weather today?" + } + } + ``` + +#### API応答 + +``` +{ + "result": string +} +``` + +* 例 + * ``` + { + "result": "City: London\nTemperature: 10°C\nRealFeel®: 8°C\nAir Quality: Poor\nWind Direction: ENE\nWind Speed: 8 km/h\nWind Gusts: 14 km/h\nPrecipitation: Light rain" + } + ``` \ No newline at end of file diff --git a/jp/guides/extension/api_based_extension/moderation.md b/jp/guides/extension/api_based_extension/moderation.md new file mode 100644 index 00000000..e9c3ad6d --- /dev/null +++ b/jp/guides/extension/api_based_extension/moderation.md @@ -0,0 +1,137 @@ +# 敏感内容審査 + +このモジュールは、アプリケーションにおける端末ユーザーの入力内容とLLM(大規模言語モデル)の出力内容を審査するために使用され、2つの拡張点タイプに分かれています。 + +### 拡張点 + +* `app.moderation.input` 端末ユーザー入力内容の審査拡張点 + * 端末ユーザーが送信した変数の内容や対話型アプリケーションにおける対話の入力内容を審査するために使用されます。 +* `app.moderation.output` LLM出力内容の審査拡張点 + * LLMの出力内容を審査するために使用されます。 + * LLMの出力がストリーミング形式の場合、出力内容は100文字ごとに分割され、APIにリクエストされます。これにより、出力内容が長い場合でも審査が遅れないようにします。 + +### app.moderation.input 拡張点 + +#### リクエストボディ + +``` +{ + "point": "app.moderation.input", // 拡張点タイプ。ここでは固定で app.moderation.input + "params": { + "app_id": string, // アプリケーションID + "inputs": { // 端末ユーザーが送信した変数の値。key は変数名、value は変数の値 + "var_1": "value_1", + "var_2": "value_2", + ... + }, + "query": string | null // 端末ユーザーの現在の対話入力内容。対話型アプリケーションの固定パラメータ。 + } +} +``` + +* 例 + * ``` + { + "point": "app.moderation.input", + "params": { + "app_id": "61248ab4-1125-45be-ae32-0ce91334d021", + "inputs": { + "var_1": "I will kill you.", + "var_2": "I will fuck you." + }, + "query": "Happy everydays." + } + } + ``` + +#### APIレスポンス + +``` +{ + "flagged": bool, // 検証ルールに違反しているかどうか + "action": string, // アクション。direct_output 予設回答の直接出力; overrided 送信された変数値の上書き + "preset_response": string, // 予設回答(actionがdirect_outputの場合のみ返される) + "inputs": { // 端末ユーザーが送信した変数の値。key は変数名、value は変数の値(actionがoverridedの場合のみ返される) + "var_1": "value_1", + "var_2": "value_2", + ... + }, + "query": string | null // 上書きされた端末ユーザーの現在の対話入力内容。対話型アプリケーションの固定パラメータ。(actionがoverridedの場合のみ返される) +} +``` + +* 例 + * `action=direct_output` + * ``` + { + "flagged": true, + "action": "direct_output", + "preset_response": "Your content violates our usage policy." + } + ``` + * `action=overrided` + * ``` + { + "flagged": true, + "action": "overrided", + "inputs": { + "var_1": "I will *** you.", + "var_2": "I will *** you." + }, + "query": "Happy everydays." + } + ``` + +### app.moderation.output 拡張点 + +#### リクエストボディ + +``` +{ + "point": "app.moderation.output", // 拡張点タイプ。ここでは固定で app.moderation.output + "params": { + "app_id": string, // アプリケーションID + "text": string // LLMの回答内容。LLMの出力がストリーミング形式の場合、ここには100文字ごとの分割された内容が入ります。 + } +} +``` + +* 例 + * ``` + { + "point": "app.moderation.output", + "params": { + "app_id": "61248ab4-1125-45be-ae32-0ce91334d021", + "text": "I will kill you." + } + } + ``` + +#### APIレスポンス + +``` +{ + "flagged": bool, // 検証ルールに違反しているかどうか + "action": string, // アクション。direct_output 予設回答の直接出力; overrided 送信された変数値の上書き + "preset_response": string, // 予設回答(actionがdirect_outputの場合のみ返される) + "text": string // 上書きされたLLMの回答内容。(actionがoverridedの場合のみ返される) +} +``` + +* 例 + * `action=direct_output` + * ``` + { + "flagged": true, + "action": "direct_output", + "preset_response": "Your content violates our usage policy." + } + ``` + * `action=overrided` + * ``` + { + "flagged": true, + "action": "overrided", + "text": "I will *** you." + } + ``` \ No newline at end of file diff --git a/jp/guides/extension/code_based_extension/README.md b/jp/guides/extension/code_based_extension/README.md new file mode 100644 index 00000000..36c65813 --- /dev/null +++ b/jp/guides/extension/code_based_extension/README.md @@ -0,0 +1,98 @@ +# コードベースの拡張 + +開発者がDifyをローカルでデプロイする際、APIサービスを再構築せずに拡張機能を実装したい場合は、コード拡張を使用できます。これにより、元のDifyのコードロジックを乱すことなく、コード形式(つまり、プラグイン機能)で機能を拡張または強化することが可能です。特定のインターフェースや仕様に従うことで、メインプログラムとの互換性とプラグアンドプレイ機能を実現できます。現在、Difyは2種類のコード拡張を提供しています: + +* 新しいタイプの外部データツールの追加 [external_data_tool.md](external_data_tool.md "mention") +* センシティブコンテンツモデレーション戦略の拡張 [moderation.md](moderation.md "mention") + +上記の機能に基づき、コードレベルのインターフェース仕様に従うことで水平拡張を実現できます。もしあなたが自分の拡張機能を私たちに提供したい場合、Difyにプルリクエストを提出することを心より歓迎します。 + +## フロントエンドコンポーネント仕様定義 + +コード拡張のフロントエンドスタイルは `schema.json` を通じて定義されます: + +* label: カスタムタイプ名、システム言語切り替えに対応 +* form_schema: フォーム内容のリスト + * type: コンポーネントタイプ + * select: ドロップダウンオプション + * text-input: テキスト入力 + * paragraph: 段落 + * label: コンポーネント名、システム言語切り替えに対応 + * variable: 変数名 + * required: 必須かどうか + * default: デフォルト値 + * placeholder: コンポーネントのヒント内容 + * options: "select" コンポーネント専用プロパティ、ドロップダウン内容を定義 + * label: ドロップダウン名、システム言語切り替えに対応 + * value: ドロップダウンオプション値 + * max_length: "text-input" コンポーネント専用プロパティ、最大長 + +### テンプレート例 + +```json +{ + "label": { + "en-US": "Cloud Service", + "zh-Hans": "云服务" + }, + "form_schema": [ + { + "type": "select", + "label": { + "en-US": "Cloud Provider", + "zh-Hans": "云厂商" + }, + "variable": "cloud_provider", + "required": true, + "options": [ + { + "label": { + "en-US": "AWS", + "zh-Hans": "亚马逊" + }, + "value": "AWS" + }, + { + "label": { + "en-US": "Google Cloud", + "zh-Hans": "谷歌云" + }, + "value": "GoogleCloud" + }, + { + "label": { + "en-US": "Azure Cloud", + "zh-Hans": "微软云" + }, + "value": "Azure" + } + ], + "default": "GoogleCloud", + "placeholder": "" + }, + { + "type": "text-input", + "label": { + "en-US": "API Endpoint", + "zh-Hans": "API Endpoint" + }, + "variable": "api_endpoint", + "required": true, + "max_length": 100, + "default": "", + "placeholder": "https://api.example.com" + }, + { + "type": "paragraph", + "label": { + "en-US": "API Key", + "zh-Hans": "API Key" + }, + "variable": "api_keys", + "required": true, + "default": "", + "placeholder": "Paste your API key here" + } + ] +} +``` \ No newline at end of file diff --git a/jp/guides/extension/code_based_extension/external_data_tool.md b/jp/guides/extension/code_based_extension/external_data_tool.md new file mode 100644 index 00000000..b0572db3 --- /dev/null +++ b/jp/guides/extension/code_based_extension/external_data_tool.md @@ -0,0 +1,193 @@ +# 外部データツール + +外部データツールは、エンドユーザーがデータを送信した後、外部ツールを使用して追加のデータを取得し、それをプロンプトに組み込むことで、LLMの追加のコンテキスト情報として利用します。Difyはデフォルトで外部API呼び出しツールを提供しており、詳細は[api\_based\_extension](../api\_based\_extension/ "mention")を参照してください。 + +ローカルにDifyをデプロイする開発者向けには、よりカスタマイズされたニーズに対応するため、または追加のAPIサーバーを開発したくない場合、Difyサービスの基盤にカスタムの外部データツールをプラグインとして直接挿入することができます。カスタムツールを拡張した後、ツールタイプのドロップダウンリストにカスタムツールオプションが追加され、チームメンバーはカスタムツールを使用して外部データを取得できるようになります。 + +## クイックスタート + +ここでは、`天気検索`外部データツール拡張を例として、以下の手順を説明します: + +1. ディレクトリの初期化 +2. フロントエンドフォーム規格の追加 +3. 実装クラスの追加 +4. フロントエンドインターフェースのプレビュー +5. 拡張のデバッグ + +### 1. **ディレクトリの初期化** + +新しいカスタムタイプ`Weather Search`を追加するには、`api/core/external_data_tool`ディレクトリに関連するディレクトリとファイルを新規作成します。 + +```python +. +└── api + └── core + └── external_data_tool + └── weather_search + ├── __init__.py + ├── weather_search.py + └── schema.json +``` + +### 2. **フロントエンドコンポーネント規格の追加** + +* `schema.json`、ここではフロントエンドコンポーネントの規格を定義します。詳細は[.](./ "mention")を参照してください。 + +```json +{ + "label": { + "en-US": "Weather Search", + "zh-Hans": "天気検索" + }, + "form_schema": [ + { + "type": "select", + "label": { + "en-US": "Temperature Unit", + "zh-Hans": "温度単位" + }, + "variable": "temperature_unit", + "required": true, + "options": [ + { + "label": { + "en-US": "Fahrenheit", + "zh-Hans": "華氏度" + }, + "value": "fahrenheit" + }, + { + "label": { + "en-US": "Centigrade", + "zh-Hans": "摂氏度" + }, + "value": "centigrade" + } + ], + "default": "centigrade", + "placeholder": "Please select temperature unit" + } + ] +} +``` + +### 3. 実装クラスの追加 + +`weather_search.py`のコードテンプレートです。ここに具体的な業務ロジックを実装します。 + +{% hint style="warning" %} +注意:クラス変数nameはカスタムタイプ名称であり、ディレクトリとファイル名と一致し、かつ唯一である必要があります。 +{% endhint %} + +```python +from typing import Optional + +from core.external_data_tool.base import ExternalDataTool + + +class WeatherSearch(ExternalDataTool): + """ + The name of custom type must be unique, keep the same with directory and file name. + """ + name: str = "weather_search" + + @classmethod + def validate_config(cls, tenant_id: str, config: dict) -> None: + """ + schema.json validation. It will be called when user save the config. + + Example: + .. code-block:: python + config = { + "temperature_unit": "centigrade" + } + + :param tenant_id: the id of workspace + :param config: the variables of form config + :return: + """ + + if not config.get('temperature_unit'): + raise ValueError('temperature unit is required') + + def query(self, inputs: dict, query: Optional[str] = None) -> str: + """ + Query the external data tool. + + :param inputs: user inputs + :param query: the query of chat app + :return: the tool query result + """ + city = inputs.get('city') + temperature_unit = self.config.get('temperature_unit') + + if temperature_unit == 'fahrenheit': + return f'Weather in {city} is 32°F' + else: + return f'Weather in {city} is 0°C' +``` + +### 4. **フロントエンドインターフェースのプレビュー** + +上記の手順を実行し、サービスを実行すると、新しいカスタムタイプが表示されます。 + +

ツールの追加

+ +### 5. **拡張のデバッグ** + +これで、Difyアプリケーションオーケストレーションインターフェースでカスタム`Weather Search`外部データツール拡張タイプを選択してデバッグできます。 + +## 実装クラステンプレート + +```python +from typing import Optional + +from core.external_data_tool.base import ExternalDataTool + + +class WeatherSearch(ExternalDataTool): + """ + The name of custom type must be unique, keep the same with directory and file name. + """ + name: str = "weather_search" + + @classmethod + def validate_config(cls, tenant_id: str, config: dict) -> None: + """ + schema.json validation. It will be called when user save the config. + + :param tenant_id: the id of workspace + :param config: the variables of form config + :return: + """ + + # implement your own logic here + + def query(self, inputs: dict, query: Optional[str] = None) -> str: + """ + Query the external data tool. + + :param inputs: user inputs + :param query: the query of chat app + :return: the tool query result + """ + + # implement your own logic here + return "your own data." +``` + +### 実装クラスの詳細な説明 + +### def validate\_config + +`schema.json`フォーム検証メソッド、ユーザーが「公開」をクリックして設定を保存するときに呼び出されます。 + +* `config` フォームパラメータ + * `{variable}` フォームカスタム変数 + +### def query + +ユーザーがカスタムデータクエリを実装し、返される結果は指定された変数に置き換えられます。 + +* `inputs` :エンドユーザーが入力した変数値 +* `query` :エンドユーザーが現在の会話で入力した内容、会話型アプリケーションの固定パラメータ。 \ No newline at end of file diff --git a/jp/guides/extension/code_based_extension/moderation.md b/jp/guides/extension/code_based_extension/moderation.md new file mode 100644 index 00000000..c25eadab --- /dev/null +++ b/jp/guides/extension/code_based_extension/moderation.md @@ -0,0 +1,270 @@ +# 敏感内容審査 + +Dify にはシステムに内蔵された内容審査タイプの他に、ユーザーが独自にカスタマイズした内容審査ルールを拡張する機能もあります。この方法は、プライベートデプロイ環境での開発者向けにカスタム開発が可能です。例えば、企業内部のカスタマーサポートにおいて、ユーザーが問い合わせを行う際やカスタマーサポートが返信する際に、暴力、性、違法行為などの関連用語を入力してはならないといった規定に加え、企業が独自に定めた禁則語や内部の審査ロジックに違反する内容も含めないようにすることができます。このような場合、開発者はプライベートデプロイ環境の Dify コード層で独自の内容審査ルールを拡張できます。 + +## クイックスタート + +ここでは、`クラウドサービス` 内容審査拡張を例にとって、以下の手順を説明します: + +1. ディレクトリの初期化 +2. フロントエンドコンポーネント定義ファイルの追加 +3. 実装クラスの追加 +4. フロントエンド画面のプレビュー +5. 拡張機能のデバッグ + +### 1. ディレクトリの初期化 + +新しいカスタムタイプ `クラウドサービス` を追加するには、`api/core/moderation` ディレクトリ内に関連するディレクトリとファイルを新規作成します。 + +```Plain +. +└── api + └── core + └── moderation + └── cloud_service + ├── __init__.py + ├── cloud_service.py + └── schema.json +``` + +### 2. フロントエンドコンポーネント規格の追加 + +* `schema.json` ここでは、フロントエンドコンポーネントの規格を定義しています。詳細は [こちら](./ "mention") を参照してください。 + +```json +{ + "label": { + "en-US": "Cloud Service", + "zh-Hans": "クラウドサービス" + }, + "form_schema": [ + { + "type": "select", + "label": { + "en-US": "Cloud Provider", + "zh-Hans": "クラウドプロバイダー" + }, + "variable": "cloud_provider", + "required": true, + "options": [ + { + "label": { + "en-US": "AWS", + "zh-Hans": "AWS" + }, + "value": "AWS" + }, + { + "label": { + "en-US": "Google Cloud", + "zh-Hans": "GoogleCloud" + }, + "value": "GoogleCloud" + }, + { + "label": { + "en-US": "Azure Cloud", + "zh-Hans": "Azure" + }, + "value": "Azure" + } + ], + "default": "GoogleCloud", + "placeholder": "" + }, + { + "type": "text-input", + "label": { + "en-US": "API Endpoint", + "zh-Hans": "APIエンドポイント" + }, + "variable": "api_endpoint", + "required": true, + "max_length": 100, + "default": "", + "placeholder": "https://api.example.com" + }, + { + "type": "paragraph", + "label": { + "en-US": "API Key", + "zh-Hans": "APIキー" + }, + "variable": "api_keys", + "required": true, + "default": "", + "placeholder": "ここにAPIキーを貼り付けてください" + } + ] +} +``` + +### 3. 実装クラスの追加 + +`cloud_service.py` のコードテンプレートです。ここで具体的なビジネスロジックを実装できます。 + +{% hint style="warning" %} +注意:クラス変数 name はカスタムタイプの名称であり、ディレクトリ名およびファイル名と一致し、かつ一意である必要があります。 +{% endhint %} + +```python +from core.moderation.base import Moderation, ModerationAction, ModerationInputsResult, ModerationOutputsResult + +class CloudServiceModeration(Moderation): + """ + The name of custom type must be unique, keep the same with directory and file name. + """ + name: str = "cloud_service" + + @classmethod + def validate_config(cls, tenant_id: str, config: dict) -> None: + """ + schema.json validation. It will be called when user save the config. + + Example: + .. code-block:: python + config = { + "cloud_provider": "GoogleCloud", + "api_endpoint": "https://api.example.com", + "api_keys": "123456", + "inputs_config": { + "enabled": True, + "preset_response": "Your content violates our usage policy. Please revise and try again." + }, + "outputs_config": { + "enabled": True, + "preset_response": "Your content violates our usage policy. Please revise and try again." + } + } + + :param tenant_id: the id of workspace + :param config: the variables of form config + :return: + """ + + cls._validate_inputs_and_outputs_config(config, True) + + if not config.get("cloud_provider"): + raise ValueError("cloud_provider is required") + + if not config.get("api_endpoint"): + raise ValueError("api_endpoint is required") + + if not config.get("api_keys"): + raise ValueError("api_keys is required") + + def moderation_for_inputs(self, inputs: dict, query: str = "") -> ModerationInputsResult: + """ + Moderation for inputs. + + :param inputs: user inputs + :param query: the query of chat app, there is empty if is completion app + :return: the moderation result + """ + flagged = False + preset_response = "" + + if self.config['inputs_config']['enabled']: + preset_response = self.config['inputs_config']['preset_response'] + + if query: + inputs['query__'] = query + flagged = self._is_violated(inputs) + + # return ModerationInputsResult(flagged=flagged, action=ModerationAction.OVERRIDED, inputs=inputs, query=query) + return ModerationInputsResult(flagged=flagged, action=ModerationAction.DIRECT_OUTPUT, preset_response=preset_response) + + def moderation_for_outputs(self, text: str) -> ModerationOutputsResult: + """ + Moderation for outputs. + + :param text: the text of LLM response + :return: the moderation result + """ + flagged = False + preset_response = "" + + if self.config['outputs_config']['enabled']: + preset_response = self.config['outputs_config']['preset_response'] + + flagged = self._is_violated({'text': text}) + + # return ModerationOutputsResult(flagged=flagged, action=ModerationAction.OVERRIDED, text=text) + return ModerationOutputsResult(flagged=flagged, action=ModerationAction.DIRECT_OUTPUT, preset_response=preset_response) + + def _is_violated(self, inputs: dict): + """ + The main logic of moderation. + + :param inputs: + :return: the moderation result + """ + return False +``` + +### 4. フロントエンド画面のプレビュー + +上記の手順を実行し、サービスを起動すると、新しく追加されたカスタムタイプを確認できます。 + +

クラウドサービス

+ +### 5. 拡張機能のデバッグ + +ここまでで、Dify のアプリケーションオーケストレーション画面でカスタム `クラウドサービス` 内容審査拡張タイプを選択してデバッグすることができます。 ```python +param {テキスト}: {大規模言語モデル}応答の{テキスト} + :return: {モデレーション}結果 + """ + {フラグ付き} = False + {プリセット応答} = "" + + # ここに独自の{ロジック}を実装してください + + # return {モデレーション出力結果}({フラグ付き}={フラグ付き}, {アクション}={モデレーションアクション}.{上書き}, {テキスト}={テキスト}) + return {モデレーション出力結果}({フラグ付き}={フラグ付き}, {アクション}={モデレーションアクション}.{直接出力}, {プリセット応答}={プリセット応答}) +``` + +## 実装クラスの詳細説明 + +### def {設定検証} + +`{スキーマ}.json` フォーム検証方法、ユーザーが「公開」をクリックして設定を保存するときに呼び出される + +* `{設定}` フォームパラメータ + * `{変数名}` フォームカスタム変数 + * `inputs_config` 入力検証プリセット応答 + * `enabled` 有効化 + * `preset_response` 入力プリセット応答 + * `outputs_config` 出力検証プリセット応答 + * `enabled` 有効化 + * `preset_response` 出力プリセット応答 + +### def {入力検証} + +入力検証関数 + +* `inputs` :エンドユーザーによって渡された変数値 +* `query` :エンドユーザーが現在入力している内容、対話型アプリケーションの固定パラメータ。 +* `モデレーション入力結果` + * `flagged` 検証ルールに違反しているかどうか + * `action` 実行動作 + * `direct_output` プリセット応答を直接出力 + * `overrided` 渡された変数値を上書き + * `preset_response` プリセット応答(action=direct_outputの場合のみ返される) + * `inputs` エンドユーザーによって渡された変数値、キーは変数名、値は変数値(action=overridedの場合のみ返される) + * `query` 上書きされたエンドユーザーの現在の入力内容、対話型アプリケーションの固定パラメータ(action=overridedの場合のみ返される) + +### def {出力検証} + +出力検証関数 + +* `{テキスト}` :{モデル出力}内容 +* `{モデレーション出力}` :出力検証関数 + * `{テキスト}` :{大規模言語モデル}回答内容。{大規模言語モデル}の出力が{ストリーミング出力}の場合、これは100文字ごとの分割内容である。 + * `{モデレーション出力結果}` + * `flagged` 検証ルールに違反しているかどうか + * `action` 実行動作 + * `direct_output` プリセット応答を直接出力 + * `overrided` 渡された変数値を上書き + * `preset_response` プリセット応答(action=direct_outputの場合のみ返される) + * `text` 上書きされた{大規模言語モデル}回答内容(action=overridedの場合のみ返される) +``` \ No newline at end of file diff --git a/jp/guides/gong-ju.md b/jp/guides/gong-ju.md new file mode 100644 index 00000000..e6359dc1 --- /dev/null +++ b/jp/guides/gong-ju.md @@ -0,0 +1,67 @@ +# ツール + +### ツール定義 + +ツールは、ネット検索、科学計算、画像の描画などの機能を追加し、大規模言語モデル(LLM)の能力を拡張して外部世界と接続する力を与えます。Difyは2種類のツールを提供しています:**第一方ツール**と**カスタムAPIツール**です。 + +Difyエコシステムが提供する第一方ツールを直接使用することができ、また、OpenAPI/SwaggerおよびOpenAIプラグイン規格をサポートするカスタムAPIツールを簡単にインポートできます。 + +#### ツールの役割: + +1. ツールを使用すると、Dify上でより強力なAIアプリケーションを作成できます。例えば、エージェント型アプリケーションに適切なツールを組み合わせることで、タスク推論、ステップの分解、ツールの呼び出しを通じて複雑なタスクを完了させることができます。 +2. あなたのアプリケーションを他のシステムやサービスと連携させ、外部環境と対話できるようにします。例えば、コードの実行や専用情報源へのアクセスなどです。 + +### 第一方ツールの設定方法 + +

第一方ツールリスト

+ +Difyは現在、以下のツールをサポートしています: + +
ツールツールの説明
Google検索Google SERP検索を実行し、スニペットやウェブページを抽出するツール。入力は検索クエリであるべきです。
ウィキペディアウィキペディア検索を実行し、スニペットやウェブページを抽出するツール。
DALL-E自然言語入力を通じて高品質な画像を生成するツール。
ウェブスクレイピングウェブページデータをクロールするためのツール。
WolframAlpha質問に基づいた標準化された回答を提供し、強力な数学計算機能を持つ知識エンジン。
可視化チャート生成棒グラフ、折れ線グラフ、円グラフなどの可視化チャートを生成するツール。
現在時刻現在の時刻を問い合わせるツール。
Yahooファイナンス最新のニュース、株価情報などの財務情報を取得して整理するツール。
Stable Diffusionローカルに展開可能な画像生成ツールで、stable-diffusion-webuiを使用して展開できます。
ベクトライザーPNGおよびJPG画像をSVGベクトル画像に迅速かつ簡単に変換するツール。
YouTubeYouTubeチャンネルの動画統計データを取得するためのツール。
+ +{% hint style="info" %} +Difyに自分で開発したツールを貢献することを歓迎します。貢献方法については[Dify開発貢献ドキュメント](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md)を確認してください。あなたのサポートは私たちにとって非常に貴重です。 +{% endhint %} + +#### 第一方ツールの認証 + +Difyエコシステムが提供する第一方内蔵ツールを直接使用する場合、使用前に適切な認証情報を設定する必要があります。 + +

第一方ツール認証情報の設定

+ +認証情報の検証が成功すると、ツールは「認証済み」の状態になります。認証情報が設定されると、ワークスペース内のすべてのメンバーがアプリケーションの編成時にこのツールを使用できます。 + +

第一方ツールが認証済み

+ +### カスタムツールの作成方法 + +「ツール-カスタムツール」内でカスタムAPIツールをインポートできます。現在、OpenAPI / SwaggerおよびChatGPTプラグイン規格をサポートしています。OpenAPIスキーマの内容を直接貼り付けるか、URLからインポートすることができます。OpenAPI / Swagger規格については[公式ドキュメント](https://swagger.io/specification/)を参照してください。 + +ツールは現在、2種類の認証方式をサポートしています:無認証とAPIキー。 + +

カスタムツールの作成

+ +スキーマ内容をインポートすると、システムはファイル内のパラメータを自動的に解析し、ツールの具体的なパラメータ、方法、パスをプレビューできます。ここでツールのパラメータをテストすることもできます。 + +

カスタムツールのパラメータテスト

+ +カスタムツールの作成が完了すると、ワークスペース内のすべてのメンバーが「スタジオ」内でアプリケーションを編成する際にこのツールを使用できます。 + +

カスタムツールが追加されました

+ +#### Cloudflare Workers + +[dify-tools-worker](https://github.com/crazywoola/dify-tools-worker)を使用してカスタムツールを迅速に展開することもできます。このツールは以下を提供します: + +* Difyにインポート可能なルーティング `https://difytoolsworker.yourname.workers.dev/doc`、OpenAPI互換のインターフェースドキュメントを提供します。 +* APIの実装コードを提供し、Cloudflare Workersに直接展開できます。 + +### アプリ内でツールを使用する方法 + +現在、「スタジオ」で**エージェント型アプリケーション**を作成する際に、認証情報が設定されたツールを使用することができます。 + +

エージェント型アプリケーション作成時にツールを追加

+ +以下の図のように、財務分析アプリケーションにツールを追加すると、エージェントは必要に応じてツールを自動的に呼び出し、ツールから財務報告データを取得し、それを解析してユーザーとの対話を完了します。 + +

エージェントが対話中にツールを呼び出して質問に回答

\ No newline at end of file diff --git a/jp/guides/knowledge-base/README.md b/jp/guides/knowledge-base/README.md new file mode 100644 index 00000000..169da984 --- /dev/null +++ b/jp/guides/knowledge-base/README.md @@ -0,0 +1,28 @@ +# 知識ベース + +大規模言語モデルの訓練データは一般的に公開データに基づいており、毎回の訓練には大量の計算能力が必要です。これは、モデルの知識が一般的に私有分野の知識を含まず、公開知識の分野では一定の遅れが存在することを意味します。この問題を解決するための一般的な手法はRAG(検索強化生成)技術を使用することです。ユーザーの質問に基づいて最も関連性の高い外部データを検索し、その検索結果をモデルのプロンプトのコンテキストとして再構成して応答を生成します。 + +{% hint style="info" %} +詳細については、[検索強化生成(RAG)](../../learn-more/extended-reading/retrieval-augment/)の拡張読書をご覧ください。 +{% endhint %} + +Difyの知識ベース機能はRAGパイプラインの各段階を可視化し、ユーザーが個人またはチームの知識ベースを管理しやすくするシンプルで使いやすいユーザーインターフェースを提供します。また、これを迅速にAIアプリケーションに統合することができます。準備するのは以下のようなテキストコンテンツだけです: + +* 長文コンテンツ(TXT、Markdown、DOCX、HTML、JSONL、さらにはPDFファイル) +* 構造化データ(CSV、Excelなど) + +また、次のような多くのデータソースからデータをデータセットに同期することを順次サポートしています: + +* ウェブページ +* Notion +* Github +* データベース +* …… + +{% hint style="info" %} +**シナリオ**:もしあなたの会社が既存の知識ベースと製品ドキュメントに基づいてAIカスタマーサポートアシスタントを構築したい場合、Difyにドキュメントをデータセットにアップロードし、対話型アプリケーションを構築することができます。これにより、以前は数週間かかり、継続的なメンテナンスが難しかった作業を迅速に行うことができます。 +{% endhint %} + +### 知識ベースとドキュメント + +Difyでは、知識ベース(Knowledge)は複数のドキュメント(Documents)の集合です。知識ベース全体を1つのアプリケーションに統合し、検索コンテキストとして使用することができます。ドキュメントは開発者や運営者によってアップロードされるか、他のデータソースから同期されます(通常、データソース内の1つのファイル単位に対応)。 \ No newline at end of file diff --git a/jp/guides/knowledge-base/create_knowledge_and_upload_documents.md b/jp/guides/knowledge-base/create_knowledge_and_upload_documents.md new file mode 100644 index 00000000..af5efbe5 --- /dev/null +++ b/jp/guides/knowledge-base/create_knowledge_and_upload_documents.md @@ -0,0 +1,147 @@ +# ナレッジベースの作成とドキュメントのアップロード + +### 1 ナレッジベースの作成 + +Difyのメインナビゲーションバーからナレッジベースをクリックすると、既存のナレッジベースが表示されます。**ナレッジベースの作成**をクリックして作成ウィザードに進みます: + +

ナレッジベースの作成

+ +* ファイルが準備できている場合は、ファイルのアップロードから始めてください。 +* まだ文書が準備できていない場合は、空のデータセットを作成してください。 + +

ナレッジベースの作成

+ +{% hint style="info" %} +データセット作成時に外部データソースを選択した場合、そのナレッジベースのタイプは変更できません。これは、単一のナレッジベースで複数のデータソースを使用することによる管理の困難を防ぐためです。複数のデータソースを使用する場合、複数のナレッジベースを作成することをお勧めします。 +{% endhint %} + +*** + +### **2 ドキュメントのアップロード** + +**ナレッジベース内でのドキュメントのアップロード手順:** + +1. ローカルからアップロードするドキュメントを選択します。 +2. セグメンテーションとクリーニングを行い、効果をプレビューします。 +3. インデックスと検索戦略を選択および設定します。 +4. セグメンテーションの埋め込みを待ちます。 +5. アップロードが完了し、アプリケーションで使用できるようになります🎉 + +**ドキュメントのアップロード制限:** + +* 単一のドキュメントのアップロードサイズは15MBに制限されています。 +* 一度にアップロードできるファイルの最大数は20個です。 +* SaaS版の異なる[サブスクリプションプラン](https://dify.ai/pricing)は、**バッチアップロードの数、ドキュメントの総アップロード数、ベクトルストレージ**に制限があります。 + +### 3 セグメンテーションとクリーニング + +**セグメンテーション**:大規模言語モデルには限られたコンテキストウィンドウがあるため、通常は全体のテキストをセグメントに分割し、ユーザーの質問に最も関連性の高いセグメントを召喚します。これを「セグメンテーションTopK召喚モード」と呼びます。また、ユーザーの質問とテキストセグメントをセマンティックマッチングする際、適切なセグメンテーションサイズは関連性の最も高いテキスト内容をマッチングするのに役立ち、情報ノイズを減らします。 + +**クリーニング**:テキスト召喚の効果を確保するために、データをモデルに入力する前にクリーニングが必要です。たとえば、出力に不要な文字や空行が含まれている場合、回答の品質に影響を与える可能性があります。この問題を解決するために、Difyはさまざまなクリーニング方法を提供し、出力を下流のアプリケーションに送信する前にクリーニングすることができます。 + +セグメンテーションとクリーニングは2つの設定方法をサポートしています。 + +* 自動モード(近日廃止予定) +* カスタムモード + +
+ +カスタムモードでは、ユーザーは異なるドキュメント形式やシナリオ要件に応じてテキストのセグメンテーションとクリーニング戦略を設定できます。 + +**セグメンテーションルール:** + +* セグメンテーション識別子:識別子(例:"\\n")を設定すると、テキストにその識別子が現れるたびにセグメンテーションが行われます。 +* セグメントの最大長:テキストの文字数の最大上限に基づいてセグメンテーションを行い、その長さを超えると強制的にセグメンテーションが行われます。 +* セグメントの重複長:セグメント間の重複文字数を設定します。セグメントの長さの10〜25%に設定することが推奨され、セグメント間のセマンティック関連性を保ち、多セグメント召喚時の効果を向上させます。 + +**前処理ルール:** + +* 連続する空白、改行、タブ文字の置換。 +* すべてのURLとメールアドレスの削除。 + +*** + +### 4 ETL オプション設定 + +RAGのプロダクションレベルのアプリケーションでは、データ召喚の効果を向上させるために、複数のデータソースを前処理およびクリーニングする必要があります。これをETL(抽出、変換、ロード)と呼びます。非構造化/半構造化データの前処理能力を強化するために、Difyは以下のオプションのETLソリューションをサポートしています:**Dify ETL** と[**Unstructured ETL**](https://unstructured.io/)。 + +> Unstructuredは、データを抽出してクリーンなデータに変換し、後続のステップに使用できるようにします。 + +Difyの各バージョンでのETLソリューションの選択: + +* SaaS版では選択不可、デフォルトでUnstructured ETLを使用。 +* コミュニティ版では選択可能、デフォルトでDify ETLを使用、[環境変数](../../getting-started/install-self-hosted/environments.md#zhi-shi-ku-pei-zhi)を介してUnstructured ETLを有効にできます。 + +ファイル解析のサポート形式の違い: + +| DIFY ETL | Unstructured ETL | +| ------------------------------------------- | ------------------------------------------------------------------------ | +| txt、markdown、md、pdf、html、htm、xlsx、xls、docx、csv | txt、markdown、md、pdf、html、htm、xlsx、xls、docx、csv、eml、msg、pptx、ppt、xml、epub | + +{% hint style="info" %} +異なるETLソリューションではファイル抽出の効果にも違いがあります。Unstructured ETLのデータ処理方法について詳細を知りたい場合は、[公式ドキュメント](https://docs.unstructured.io/open-source/core-functionality/partitioning)を参照してください。 +{% endhint %} + +*** + +### 5 インデックス方式 + +テキストの**インデックス方式**を選択してデータのマッチング方法を指定する必要があります。インデックス戦略は検索戦略と密接に関連しているため、シナリオ要件に基づいて適切なインデックス方式を選択する必要があります。 + +**高品質モード:**OpenAIの埋め込みインターフェースを使用して処理を行い、ユーザーのクエリに対してより高い精度を提供します。 + +**エコノミーモード**:キーワードインデックス方式を使用し、精度を下げる代わりにトークンを消費しません。 + +**Q\&A モード(コミュニティ版のみサポート):**Q\&Aセグメンテーションモード機能は、上記の通常の「Q to P」(質問からテキスト段落へのマッチング)とは異なり、「Q to Q」(質問から質問へのマッチング)を採用します。文書がセグメント化された後、各セグメントごとにQ\&Aマッチングペアを生成し、ユーザーが質問すると、最も類似した質問を見つけ出し、対応するセグメントを回答として返します。この方法はより正確で、ユーザーの質問に直接マッチングし、真に必要な情報をより正確に取得できます。 + +ナレッジベースにドキュメントをアップロードする際、システムはテキストをセグメント化し、ユーザーの質問(入力)が関連するテキストセグメント(Q to P)にマッチするようにします。最終的に結果を出力します。 + +> 質問テキストは完全な文法構造を持つ自然言語であり、文書検索タスクのいくつかのキーワードとは異なります。そのため、Q to Q(質問から質問へのマッチング)のモードは、意味とマッチングをより明確にし、頻度の高い類似した質問シナリオにも対応します。 + +

Q&Aセグメンテーションモードで複数のQ&Aペアにまとめられたテキスト

+ +

Q to PとQ to Qのインデックス方式の違い

+ +*** + +### 6 検索設定 + +高品質インデックスモードでは、Difyは3つの検索オプションを提供します: + +* **ベクトル検索**:クエリ埋め込みを生成し、そのベクトル表現に最も類似したテキストセグメントを検索します。 +* **全文検索**:ドキュメント内のすべての語句をインデックスし、ユーザーが任意の語句をクエリし、それらの語句を含むテキストセグメントを返すことを可能にします。 +* **ハイブリッド検索**:全文検索とベクトル検索を同時に実行し、リランクステップを追加して、2つの検索結果からユーザーの質問に最も適した結果を選択します。RerankモデルAPIの設定が必要です。 + +3つの検索方式の具体的な設定は以下の通りです: + +#### **ベクトル検索** + +定義:クエリ埋め込みを生成し、そのベクトル表現に最も類似したテキストセグメントを検索します。 + +

ベクトル検索設定

+ +TopK:ユーザーの質問に最も類似したテキストセグメントをフィルタリングするために使用します。システムは選択されたモデルのコンテキストウィンドウの大きさに基づいてセグメント数を動的に調整します。システムのデフォルト値は3です。 + +Score閾値:テキストセグメントフィルタリングの類似度の閾値を設定します。設定されたスコアを超えるテキストセグメントのみを召喚します。システムのデフォルトではこの設定はオフになっており、召喚されたテキストセグメントの類似度フィルタリングは行いません。オンにした場合のデフォルト値は0.5です。 + +Rerankモデル:モデルプロバイダーのページでRerankモデルのAPIキーを設定した後、検索設定で「Rerankモデル」をオンにすると、システムはセマンティック検索後に召喚された文書結果を再度セマンティックリランクし、並び替え結果を最適化します。Rerankモデルを設定した場合、TopKとScore閾値の設定はリランクステップでのみ有効です。 + +#### **全文検索** + +定義:ドキュメント内のすべての語句をインデックスし、ユーザーが任意の語句をクエリし、それらを含むテキストセグメントを返すことを可能にします。 + +

全文検索設定

+ +TopK:ユーザーの質問に最も類似したテキストセグメントをフィルタリングするために使用します。システムは選択されたモデルのコンテキストウィンドウの大きさに基づいてセグメント数を動的に調整します。システムのデフォルト値は3です。 + +Rerankモデル:モデルプロバイダーのページでRerankモデルのAPIキーを設定した後、検索設定で「Rerankモデル」をオンにすると、システムは全文検索後に召喚された文書結果を再度セマンティックリランクし、並び替え結果を最適化します。Rerankモデルを設定した場合、TopKとScore閾値の設定はリランクステップでのみ有効です。 + +#### **ハイブリッド検索** + +全文検索とベクトル検索を同時に実行し、リランクステップを適用して、2つの検索結果からユーザーの質問に最も適した結果を選択します。RerankモデルAPIの設定が必要です。 + +

ハイブリッド検索設定

+ +TopK:ユーザーの質問に最も類似したテキストセグメントをフィルタリングするために使用します。システムは選択されたモデルのコンテキストウィンドウの大きさに基づいてセグメント数を動的に調整します。システムのデフォルト値は3です。 + +Rerankモデル:モデルプロバイダーのページでRerankモデルのAPIキーを設定した後、検索設定で「Rerankモデル」をオンにすると、システムはハイブリッド検索後に召喚された文書結果を再度セマンティックリランクし、並び替え結果を最適化します。Rerankモデルを設定した場合、TopKとScore閾値の設定はリランクステップでのみ有効です。 \ No newline at end of file diff --git a/jp/guides/knowledge-base/external_data_tool.md b/jp/guides/knowledge-base/external_data_tool.md new file mode 100644 index 00000000..3f3be1af --- /dev/null +++ b/jp/guides/knowledge-base/external_data_tool.md @@ -0,0 +1,34 @@ +# 外部データツール + +## 機能紹介 + +以前の [.](./ "mention") 機能では、開発者が各種形式の長文や構造化データを直接アップロードしてデータセットを構築し、ユーザーがアップロードした最新のコンテキストに基づいてAIアプリケーションが対話できるようにしていました。 + +今回の更新で導入された**外部データツール**により、開発者は自前の検索能力や内部知識ベースなどの外部データをLLMのコンテキストとして使用できるようになりました。API拡張の方式で外部データを取得し、プロンプトに埋め込むことが可能になります。クラウドにデータセットをアップロードするのと比べて、**外部データツール**を使用することで、プライベートデータセキュリティの確保、カスタム検索、リアルタイムデータの取得などの面で顕著な利点があります。 + +## 実装 + +端末ユーザーが対話システムにリクエストを送信すると、プラットフォームのバックエンドが外部データツール(自身のAPIを呼び出す)をトリガーし、ユーザーの質問に関連する外部情報(従業員情報やリアルタイム記録など)をクエリして、そのリクエストに関連する部分をAPI経由で返します。プラットフォームのバックエンドは、返された結果をテキストとして組み立て、プロンプトに注入し、よりパーソナライズされたユーザーのニーズに合った応答内容を出力します。 + +## 操作説明 + +1. 外部データツールを使用する前に、APIと認証用のAPIキーを準備してください。[external\_data\_tool.md](../extension/api\_based\_extension/external\_data\_tool.md "mention")を参照してください。 +2. Difyは集中式のAPI管理を提供しており、設定画面でAPI拡張設定を統一して追加することで、Dify上の各種アプリケーションで直接使用できるようになります。 + +

APIベースの拡張

+ +3. 例として「天気の問い合わせ」を取り上げ、「APIベースの拡張の追加」ダイアログに名前、APIエンドポイント、APIキーを入力します。保存後、APIを呼び出すことができます。 + +

天気の問い合わせ

+ +4. プロンプト編成ページで、「ツール」右側の「+追加」ボタンをクリックし、開いた「ツールの追加」ダイアログで名前と変数名(変数名はプロンプトに引用されるため、英語で記入してください)を記入し、ステップ2で追加したAPIベースの拡張を選択します。 + +

外部データツール

+ +5. これで、プロンプト編成フレームでクエリされた外部データをプロンプトに組み込むことができます。例えば、今日のロンドンの天気をクエリする場合、「location」変数を追加し、「London」を入力し、外部データツールの拡張変数名「weather_data」と組み合わせると、以下のようなデバッグ出力が得られます: + +

天気検索ツール

+ +対話ログでも、APIが返したリアルタイムデータを確認できます: + +

プロンプトログ

\ No newline at end of file diff --git a/jp/guides/knowledge-base/integrate_knowledge_within_application.md b/jp/guides/knowledge-base/integrate_knowledge_within_application.md new file mode 100644 index 00000000..eebfccb5 --- /dev/null +++ b/jp/guides/knowledge-base/integrate_knowledge_within_application.md @@ -0,0 +1,104 @@ +# アプリ内での知識ベースの統合 + +### 1 知識ベースアプリの作成 + +知識ベースは、大言語モデルに対して外部知識を提供し、ユーザーの質問に正確に回答するために使用されます。Difyの[すべてのアプリタイプ](../application_orchestrate/#application_type)内で作成された知識ベースを関連付けることができます。 + +チャットアシスタントを例にすると、以下の手順で進めます: + +1. **スタジオ -- アプリを作成 -- チャットアシスタントを作成**に進む +2. **コンテキスト設定**に進み、**追加**をクリックし、作成済みの知識ベースを選択 +3. **コンテキスト設定 -- パラメータ設定**内で**召回策略**を設定 +4. **機能追加**内で**引用と帰属**をオンにする +5. **デバッグとプレビュー**内で知識ベース関連のユーザー質問を入力してデバッグ +6. デバッグが完了したら、**保存して公開**し、AI知識ベースQ&Aアプリケーションとして公開 + +

アプリ内での知識ベースの関連付け

+ +*** + +### 2 召回模式 + +**コンテキスト -- パラメータ設定 -- 召回設定**に進み、知識ベースの召回模式を選択できます。 + +**N 選 1 召回**は、ユーザーの意図と知識ベースの説明に基づいて、LLMが最も適切な単一の知識ベースを選択して関連するテキストを照会します。 + +**多路召回**は、ユーザーの意図に基づいてすべての知識ベースを同時に照合し、多路知識ベースから関連するテキストフラグメントを照会し、再ランキングのステップを経て、最適な結果を選択します。このモードでは、RerankモデルAPIの設定が必要です。 + +
+ +**召回模式の選び方** + +N 選 1 召回は、Function Call/ReActによって駆動され、各関連付けられた知識ベースがツール関数として機能し、LLMがユーザーの質問に最も適した知識ベースを自主的に選択して照会します。**推理の根拠は、ユーザーの質問と知識ベースの説明のセマンティックな一致性です**。 + +したがって、N 選 1 モードの召回効果は主に以下の3つの要素に依存します: + +* **システム推理モデルの能力**:一部のモデルはFunction Call/ReActの指令に対する遵守度が不安定です +* **知識ベースの説明の明確さ**:説明内容がLLMの推理に影響を与えます +* **知識ベースの数**:知識ベースが多すぎると、LLMの推理精度に影響を与え、推論モデルのコンテキストウィンドウの長さを超える可能性があります + +**N 選 1 モードの推奨設定方法**:効果の良いシステム推理モデルを選択し、関連付ける知識ベースをできるだけ少なくし、正確な知識ベースの説明を提供します。 + +ユーザーが知識ベースをアップロードすると、システム推理モデルは自動的に知識ベースの概要説明を生成します。このモードで最適な召回効果を得るために、「知識ベース->設定->知識ベースの説明」に進み、システムがデフォルトで作成した概要説明を確認し、その内容が知識ベースの内容を明確に概説しているかをチェックしてください。 + +以下はN 選 1 召回模式の技術フローチャートです: + +
+ +{% hint style="info" %} +N 選 1 召回はモデルの推理能力に依存しており、使用制限が多いため、この模式の召回策略を2024年第3四半期に調整する予定です。 +{% endhint %} + +#### 多路召回模式(推奨) + +多路召回模式では、リトリーバーがアプリに関連付けられたすべての知識ベースからユーザーの質問に関連するテキスト内容を検索し、多路召回の関連ドキュメント結果を統合し、後置の重排序(Rerank)ステップを通じて検索召回のドキュメントをセマンティックに再ランキングします。 + +以下は多路召回模式の技術フローチャートです: + +
+ +{% hint style="info" %} +多路召回模式ではRerankモデルの設定が必要です。 +{% endhint %} + +多路召回模式はモデルの推理能力や知識ベースの説明に依存しないため、この模式で多知識ベース検索時により高品質の召回効果を得ることができます。そのため、**召回模式を多路召回に設定することを推奨**します。 + +*** + +### 3 重排序(Rerank) + +重排序モデルは、候補ドキュメントリストとユーザーの質問のセマンティックな一致度を再ランキングすることで、セマンティックなランキングの結果を改良します。その原理は、ユーザーの質問と各候補ドキュメントとの関連性スコアを計算し、関連性の高い順にランキングされたドキュメントリストを返すことです。 + +

混合検索+重排序

+ +{% hint style="info" %} +Rerankに関する詳細は、拡張読書[重排序](integrate_knowledge_within_application.md#zhong-pai-xu-rerank)を参照してください。 +{% endhint %} + +#### Rerankモデルの設定方法 + +Difyは現在、Cohere Rerankモデルをサポートしています。「モデルプロバイダー -> Cohere」ページに進み、RerankモデルのAPIキーを入力してください: + +

モデルプロバイダー内でCohere Rerankモデルを設定

+ +Cohere Rerankモデルの取得方法 + +ログイン:[https://cohere.com/rerank](https://cohere.com/rerank)、ページ内で登録し、Rerankモデルの使用資格を申請し、APIキーを取得します。 + +{% hint style="info" %} +Cohere Rerank APIをサポートするほか、OllamaやXinferenceなどのローカル推論フレームワークを使用して、bge-rerankerなどのローカルRerankモデルを内部にデプロイすることもできます。 +{% endhint %} + +#### Rerankモデルの設定 + +「データセット -> データセットを作成 -> 検索設定」ページに進み、Rerank設定を追加します。データセットの作成時だけでなく、作成済みのデータセット設定内でもRerank設定を変更できます。アプリオーケストレーションのデータセット召回模式設定内でもRerank設定を変更できます。 + +

データセット検索模式でRerankモデルを設定

+ +**TopK**:Rerank後に関連ドキュメントを返す数を設定します。 + +**スコア閾値**:Rerank後に関連ドキュメントを返す最低スコアを設定します。Rerankモデル設定後、TopKとスコア閾値設定はRerankステップでのみ有効です。 + +「プロンプトオーケストレーション -> コンテキスト -> 設定」ページに進み、多路召回模式に設定する際にRerankモデルを有効にする必要があります。 + +

データセットの多路召回模式でRerankモデルを設定

\ No newline at end of file diff --git a/jp/guides/knowledge-base/knowledge_and_documents_maintenance.md b/jp/guides/knowledge-base/knowledge_and_documents_maintenance.md new file mode 100644 index 00000000..fc2430f9 --- /dev/null +++ b/jp/guides/knowledge-base/knowledge_and_documents_maintenance.md @@ -0,0 +1,111 @@ +# ナレッジベース及びドキュメントのメンテナンス + +### 1 テキストチャンクの確認 + +ナレッジベースにアップロードされた各ドキュメントは、テキストチャンクの形式で保存されます。チャンクリストで各チャンクの具体的なテキスト内容を確認できます。 + +

アップロード済みのドキュメントチャンクを確認する

+ +*** + +### 2 チャンクの品質を確認 + +ドキュメントチャンクはナレッジベースアプリケーションのQ&A効果に影響を与えるため、ナレッジベースをアプリケーションに関連付ける前に、チャンクの品質を人工的に確認することが推奨されます。 + +文字数、識別子、またはNLPセマンティックチャンクなどの自動化されたチャンク方式は、大規模なテキストチャンクの作業量を大幅に削減できますが、チャンクの品質はドキュメント形式のテキスト構造や前後の文脈のセマンティクスにも関係します。人工的なチェックと修正を行うことで、機械によるチャンクのセマンティック認識の欠点を効果的に補うことができます。 + +チャンクの品質を確認する際には、一般的に以下の点に注意が必要です: + +* **短すぎるチャンク**、意味が不足する可能性がある; + +

短すぎるチャンク

+ +* **長すぎるチャンク**、ノイズが多すぎるためマッチングの精度が低下する可能性がある; + +

長すぎるチャンク

+ +* **明らかなセマンティックカットオフ**、最大チャンク長制限を使用すると強制的なセマンティックカットオフが発生し、リコール時に内容が失われる; + +

明らかなセマンティックカットオフ

+ +*** + +### 3 チャンクの追加 + +チャンクリスト内で「チャンクを追加」をクリックすると、ドキュメント内にカスタムチャンクを1つまたは複数追加することができます。 + +
+ +複数のチャンクを追加する場合は、まずCSV形式のチャンクアップロードテンプレートをダウンロードし、テンプレートに従ってExcelで全てのチャンク内容を編集し、CSVファイルを保存してからアップロードします。 + +

カスタムチャンクを一括追加する

+ +*** + +### 4 チャンクの編集 + +チャンクリスト内で追加したチャンク内容を直接編集・修正することができます。テキスト内容やキーワードを含めます。 + +

ドキュメントチャンクの編集

+ +*** + +### 5 メタデータ管理 + +異なるソースドキュメントのメタデータ情報(例:ウェブページのタイトル、URL、キーワード、説明など)をマークするために使用されます。メタデータはナレッジベースのチャンクリコールプロセスで使用され、構造化フィールドとしてリコールフィルタリングや参照元の表示に参加します。 + +{% hint style="info" %} +メタデータフィルタリングと参照元機能は現在のバージョンではサポートされていません。 +{% endhint %} + +

メタデータ管理

+ +*** + +### 6 ドキュメントの追加 + +「ナレッジベース > ドキュメントリスト」で「ファイルを追加」をクリックすると、作成済みのナレッジベースに新しいドキュメントをアップロードするか、[Notionページ](sync-from-notion.md)を同期することができます。 + +ナレッジベース(Knowledge)はいくつかのドキュメント(Documents)の集合体です。ドキュメントは開発者や運営者がアップロードするか、他のデータソースから同期されます(通常、対応するデータソースの1つのファイル単位)。 + +

ナレッジベースに新しいドキュメントをアップロードする

+ +*** + +### 7 ドキュメントの無効化とアーカイブ + +**無効化**:データセットは一時的にインデックス付けしたくないドキュメントやチャンクを無効化することをサポートしています。データセットドキュメントリストで無効化ボタンをクリックすると、ドキュメントが無効化されます。また、ドキュメントの詳細で無効化ボタンをクリックして、ドキュメント全体または特定のチャンクを無効化することもできます。無効化されたドキュメントはインデックスされません。無効化されたドキュメントは、有効化をクリックして無効化を解除できます。 + +**アーカイブ**:使用しなくなった古いドキュメントデータを削除したくない場合、アーカイブすることができます。アーカイブされたデータは表示または削除のみ可能で、編集はできません。データセットドキュメントリストでアーカイブボタンをクリックすると、ドキュメントがアーカイブされます。また、ドキュメントの詳細でアーカイブをクリックすることもできます。アーカイブされたドキュメントはインデックスされません。アーカイブされたドキュメントもアーカイブ解除をクリックして解除できます。 + +*** + +### 8 ナレッジベースの設定 + +ナレッジベースの左側ナビゲーションで**設定**をクリックすると、以下の設定項目を変更することができます: + +

ナレッジベースの設定

+ +**ナレッジベース名**、ナレッジベースを識別するための名前を定義します。 + +**ナレッジベースの説明**、ナレッジベース内のドキュメントが示す情報を説明します。 + +{% hint style="info" %} +ナレッジベースリコールモードがN選1の場合、ナレッジベースはLLMに推論呼び出し用のツールとして提供され、推論の根拠はナレッジベースの説明に基づきます。説明が空の場合、Difyの自動インデックス戦略が使用されます。 +{% endhint %} + +**表示権限**、「自分のみ」または「全チームメンバー」を選択できます。権限を持たない人はデータセットを閲覧および編集することができません。 + +**インデックスモード**、[参考文献](create\_knowledge\_and\_upload\_documents.md#suo-yin-fang-shi) + +**エンベディングモデル**、ナレッジベースのエンベディングモデルを変更します。エンベディングモデルを変更すると、ナレッジベース内の全てのドキュメントが再度エンベディングされ、以前のエンベディングは削除されます。 + +**検索設定**、[参考文献](create\_knowledge\_and\_upload\_documents.md#jian-suo-she-zhi) + +*** + +### 9 ナレッジベースAPI管理 + +Difyナレッジベースは標準的なAPIセットを提供しています。開発者はAPI呼び出しを通じて、ナレッジベース内のドキュメントやチャンクのCRUD操作を行うことができます。詳細は[ナレッジベースAPIドキュメント](maintain-dataset-via-api.md)を参照してください。 + +

ナレッジベースAPI管理

\ No newline at end of file diff --git a/jp/guides/knowledge-base/maintain-dataset-via-api.md b/jp/guides/knowledge-base/maintain-dataset-via-api.md new file mode 100644 index 00000000..ccbe51f6 --- /dev/null +++ b/jp/guides/knowledge-base/maintain-dataset-via-api.md @@ -0,0 +1,150 @@ +# APIを使用したデータセットの管理 + +> 認証や呼び出し方法はサービスAPIと同じですが、データセットAPIトークン一つで全てのデータセットを操作できます。 + +### データセットAPIの利点 + +* あなたのデータシステムをDifyデータセットに同期させ、強力なワークフローを構築できます。 +* データセットリスト、ドキュメントリストおよび詳細検索を提供し、あなた自身のデータ管理ページを構築しやすくします。 +* テキストとファイルの両方のアップロードおよび更新インターフェースをサポートし、セグメントレベルでのバッチ追加および変更も可能で、同期方法が便利になります。 +* ドキュメントの手動処理同期の時間を削減し、Difyのソフトウェアおよびサービスの可視性を向上させます。 + +### 使用方法 + +データセットページに入り、左側のナビゲーションから **API** ページに切り替えることができます。このページでは、Difyが提供するデータセットAPIドキュメントを確認し、 **APIキー** でデータセットAPIにアクセスできる資格情報を管理できます。 + +

Knowledge API ドキュメント

+ +### API呼び出しの例 + +#### **空のデータセットを作成** + +{% hint style="warning" %} +空のデータセットを作成するためだけに使用 +{% endhint %} + +``` +curl --location --request POST 'https://api.dify.ai/v1/datasets' \ +--header 'Authorization: Bearer {api_key}' \ +--header 'Content-Type: application/json' \ +--data-raw '{"name": "name"}' + +``` + +#### **データセットリスト** + +``` +curl --location --request GET 'https://api.dify.ai/v1/datasets?page=1&limit=20' \ +--header 'Authorization: Bearer {api_key}' + +``` + +#### **テキストでドキュメントを作成** + +``` +curl --location --request POST '/document/create_by_text>' \ +--header 'Authorization: Bearer {api_key}' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "name": "Dify", + "text": "Dify means Do it for you...", + "indexing_technique": "high_quality", + "process_rule": { + "rules": { + "pre_processing_rules": [{ + "id": "remove_extra_spaces", + "enabled": true + }, { + "id": "remove_urls_emails", + "enabled": true + }], + "segmentation": { + "separator": "###", + "max_tokens": 500 + } + }, + "mode": "custom" + } +}' + +``` + +#### **ファイルでドキュメントを作成** + +``` +curl --location POST 'https://api.dify.ai/v1/datasets/{dataset_id}/document/create_by_file' \ +--header 'Authorization: Bearer {api_key}' \ +--form 'data="{ + "name": "Dify", + "indexing_technique": "high_quality", + "process_rule": { + "rules": { + "pre_processing_rules": [{ + "id": "remove_extra_spaces", + "enabled": true + }, { + "id": "remove_urls_emails", + "enabled": true + }], + "segmentation": { + "separator": "###", + "max_tokens": 500 + } + }, + "mode": "custom" + } + }"; + type=text/plain' \ +--form 'file=@"/path/to/file"' + +``` + +#### **ドキュメント埋め込みステータス(進捗)を取得** + +``` +curl --location --request GET 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{batch}/indexing-status' \ +--header 'Authorization: Bearer {api_key}' +``` + +#### **ドキュメントを削除** + +``` +curl --location --request DELETE 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}' \ +--header 'Authorization: Bearer {api_key}' +``` + +#### **データセットドキュメントリスト** + +``` +curl --location --request GET 'https://api.dify.ai/v1/datasets/{dataset_id}/documents' \ +--header 'Authorization: Bearer {api_key}' + +``` + +#### **セグメントの追加** + +``` +curl 'https://api.dify.ai/v1/datasets/aac47674-31a8-4f12-aab2-9603964c4789/documents/2034e0c1-1b75-4532-849e-24e72666595b/segment' \ + --header 'Authorization: Bearer {api_key}' \ + --header 'Content-Type: application/json' \ + --data-raw $'"chunks":[ + {"content":"Dify means Do it for you", + "keywords":["Dify","Do"] + } + ]' + --compressed + +``` + +### エラーメッセージ + +* `document_indexing`,ドキュメントインデックス失敗 +* `provider_not_initialize`,埋め込みモデル未初期化 +* `not_found`,ドキュメントが見つかりません +* `dataset_name_duplicate`,データセット名重複 +* `provider_quota_exceeded`,プロバイダーのクオータ超過 +* `dataset_not_initialized`,データセット未初期化 +* `unsupported_file_type`,サポートされていないファイルタイプ + * 現在サポートされているのは:txt, markdown, md, pdf, html, htm, xlsx, docx, csv +* `too_many_files`,ファイルが多すぎます、一時的に単一ファイルのアップロードのみをサポート +* `file_too_large`,ファイルが大きすぎます、15M以下をサポート \ No newline at end of file diff --git a/jp/guides/knowledge-base/retrieval_test_and_citation.md b/jp/guides/knowledge-base/retrieval_test_and_citation.md new file mode 100644 index 00000000..56b82bd1 --- /dev/null +++ b/jp/guides/knowledge-base/retrieval_test_and_citation.md @@ -0,0 +1,34 @@ +# リコールテスト/引用と帰属 + +### 1 リコールテスト + +Difyナレッジベースには、異なる検索方法とパラメータ設定におけるリコール効果をデバッグするためのリコールテスト機能が提供されています。**ソーステキスト**入力欄に一般的なユーザーの質問を入力し、**テスト**をクリックして右側の**リコールパラグラフ**でリコール結果を確認できます。**最近のクエリ**では、過去のクエリ履歴を確認でき、ナレッジベースがアプリケーション内に関連付けられている場合、アプリケーション内からトリガーされたナレッジベースクエリもここで確認できます。 + +

リコールテスト

+ +ソーステキスト入力欄の右上のアイコンをクリックすると、現在のナレッジベースの検索方法と具体的なパラメータを変更できます。**保存後はリコールテストのデバッグ中のみ有効です**。リコールテストを完了し、ナレッジベースの検索パラメータの変更を確認する際には、[ナレッジベース設定 > 検索設定](retrieval\_test\_and\_citation.md#zhi-shi-ku-she-zhi)で変更を行う必要があります。 + +

リコールテスト-検索設定

+ +**リコールテストの推奨ステップ:** + +1. 一般的なユーザーの質問をカバーするテストケース/テスト問題集を設計・整理する。 +2. 適切な検索戦略を選択する:ベクトル検索/全文検索/ハイブリッド検索。各検索方法の利点と欠点については、拡張読書[検索強化生成(RAG)](../../learn-more/extended-reading/retrieval-augment/)を参照してください。 +3. リコールパラグラフ数(TopK)とリコールスコア閾値(Score)をデバッグする。アプリケーションシナリオやドキュメント自体の品質に応じて適切なパラメータの組み合わせを選択する必要があります。 + +**TopK値とリコールスコア閾値(Score)の設定方法** + +* **TopKは、類似スコアの降順でリコールされるパラグラフの最大数を表します**。TopK値を小さくすると、リコールされるパラグラフが少なくなり、関連するテキストが不完全になる可能性があります。TopK値を大きくすると、リコールされるパラグラフが多くなり、意味的に関連性の低いパラグラフが含まれる可能性があり、LLMの応答品質が低下することがあります。 +* **リコールスコア閾値(Score)は、リコールされるパラグラフの最低類似スコアを表します**。リコールスコアを小さくすると、リコールされるパラグラフが増え、関連度の低いパラグラフが含まれる可能性があります。リコールスコア閾値を大きくすると、リコールされるパラグラフが少なくなり、過大な場合は関連するパラグラフを失う可能性があります。 + +*** + +### 2 引用と帰属 + +アプリケーション内でナレッジベースの効果をテストする際、**スタジオ -- 機能追加 -- 引用と帰属**に進み、引用と帰属機能を有効にします。 + +

引用と帰属機能を有効にする

+ +機能を有効にすると、大規模言語モデルが質問に回答する際にナレッジベースからの内容を引用した場合、返信内容の下に具体的な引用段落情報を確認できます。これには**元のパラグラフテキスト、パラグラフ番号、マッチ度**などが含まれます。引用段落上部の**ナレッジベースにジャンプ**をクリックすると、開発者がデバッグ編集を行いやすいように、そのパラグラフが含まれるナレッジベースのパラグラフリストに簡単にアクセスできます。 + +

返信内容の引用情報を確認する

\ No newline at end of file diff --git a/jp/guides/knowledge-base/sync-from-notion.md b/jp/guides/knowledge-base/sync-from-notion.md new file mode 100644 index 00000000..d55e541f --- /dev/null +++ b/jp/guides/knowledge-base/sync-from-notion.md @@ -0,0 +1,70 @@ +# Notionからデータをインポートする + +DifyデータセットはNotionからのインポートをサポートし、**同期**を設定することで、Notionのデータが更新されると自動的にDifyに同期されます。 + +### 認証確認 + +1. データセットを作成し、データソースを選択する際に、**Notion内容から同期-- バインドへ進み、指示に従って認証確認を完了してください。** +2. または、**設定 -- データソース -- データソースを追加**に進み、Notionソースで**バインド**をクリックして認証確認を完了することもできます。 + +

Notionをバインド

+ +### Notionデータのインポート + +認証確認が完了したら、データセット作成ページに進み、**Notion内容から同期**をクリックし、必要な認証ページを選択してインポートします。 + +### 分割とクリーニングの実施 + +次に、**分割設定**と**インデックス方式**を選択し、**保存して処理**をクリックします。Difyがこれらのデータを処理するのを待ちます。このステップでは、大規模言語モデル(LLM)サプライヤーでトークンが消費される場合があります。Difyは通常のページデータのインポートをサポートするだけでなく、データベースタイプのページ属性もまとめて保存します。 + +_**注意:画像やファイルのインポートは現在サポートされていません。表データはテキストとして表示されます。**_ + +### Notionデータの同期 + +Notionの内容に変更があった場合、Difyデータセットの**文書リストページ**で**同期**をクリックするだけで、データを一括で同期できます。このステップでもトークンが消費されます。 + +

Notion内容を同期

+ +### コミュニティ版Notionの統合設定方法 + +Notionの統合は、**インターナル統合**(internal integration)と**パブリック統合**(public integration)の2種類があります。Difyで必要に応じて設定できます。2つの統合方法の具体的な違いについては[Notion公式ドキュメント](https://developers.notion.com/docs/authorization)を参照してください。 + +### 1、**インターナル統合方式の利用** + +まず、統合設定ページで[統合を作成](https://www.notion.so/my-integrations)します。デフォルトでは、すべての統合はインターナル統合として開始されます。インターナル統合は選択したワークスペースと関連付けられるため、ワークスペースの所有者である必要があります。 + +具体的な操作手順: + +**New integration**ボタンをクリックし、タイプはデフォルトで**インターナル**(変更不可)です。関連付けるスペースを選択し、統合名を入力しロゴをアップロードした後、**Submit**をクリックして統合を作成します。 + +
+ +統合を作成したら、必要に応じてCapabilitiesタブで設定を更新し、Secretsタブで**Show**ボタンをクリックしてSecretsをコピーします。 + +
+ +コピーした後、Difyのソースコードに戻り、**.env**ファイルに関連する環境変数を設定します。環境変数は以下の通りです: + +**NOTION\_INTEGRATION\_TYPE** = インターナル または **NOTION\_INTEGRATION\_TYPE** = パブリック + +**NOTION\_INTERNAL\_SECRET**=you-internal-secret + +### 2、**パブリック統合方式の利用** + +**インターナル統合をパブリック統合にアップグレードする必要があります**。統合の配布ページに移動し、スイッチを切り替えて統合を公開します。スイッチをパブリック設定に切り替えるには、以下の組織情報フォームに会社名、ウェブサイト、リダイレクトURLなどの情報を入力し、**Submit**ボタンをクリックします。 + +
+ +統合の設定ページで公開に成功すると、密鍵タブで統合の密鍵にアクセスできるようになります: + +
+ +Difyのソースコードに戻り、**.env**ファイルに関連する環境変数を設定します。環境変数は以下の通りです: + +**NOTION\_INTEGRATION\_TYPE**=パブリック + +**NOTION\_CLIENT\_SECRET**=you-client-secret + +**NOTION\_CLIENT\_ID**=you-client-id + +設定が完了したら、データセットでNotionのデータインポートおよび同期機能を操作できます。 \ No newline at end of file diff --git a/jp/guides/knowledge-base/sync_from_website.md b/jp/guides/knowledge-base/sync_from_website.md new file mode 100644 index 00000000..be3346af --- /dev/null +++ b/jp/guides/knowledge-base/sync_from_website.md @@ -0,0 +1,3 @@ +# ウェブページからデータをインポート + +🚧 メンテナンス中 \ No newline at end of file diff --git a/jp/guides/model-configuration/README.md b/jp/guides/model-configuration/README.md new file mode 100644 index 00000000..653b607a --- /dev/null +++ b/jp/guides/model-configuration/README.md @@ -0,0 +1,76 @@ +# モデル + +Difyは大規模言語モデルに基づいたAIアプリケーション開発プラットフォームです。初めて使用する際には、Difyの**設定 -- モデルプロバイダー**ページで必要なモデルを追加および設定してください。 + +

設定-モデルプロバイダー

+ +Difyは現在、OpenAIのGPTシリーズやAnthropicのClaudeシリーズなど、主流のモデルプロバイダーをサポートしています。異なるモデルの能力やパラメータの種類が異なるため、アプリケーションのニーズに応じて適切なモデルプロバイダーを選択できます。**Difyで以下のモデル能力を使用する前に、各モデルプロバイダーの公式サイトでAPIキーを取得する必要があります。** + +### モデルタイプ + +Difyでは、モデルの使用シーンに応じて以下の4つのタイプに分類しています: + +1. **システム推論モデル**。アプリケーション内で使用されるのはこのタイプのモデルです。チャット、会話名生成、次の質問の提案でもこの推論モデルが使用されます。 + + > サポートされているシステム推論モデルプロバイダー:[OpenAI](https://platform.openai.com/account/api-keys)、[Azure OpenAIサービス](https://azure.microsoft.com/en-us/products/ai-services/openai-service/)、[Anthropic](https://console.anthropic.com/account/keys)、Hugging Faceハブ、Replicate、Xinference、OpenLLM、[讯飞星火](https://www.xfyun.cn/solutions/xinghuoAPI)、[文心一言](https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application)、[通义千问](https://dashscope.console.aliyun.com/api-key\_management?spm=a2c4g.11186623.0.0.3bbc424dxZms9k)、[Minimax](https://api.minimax.chat/user-center/basic-information/interface-key)、ZHIPU(ChatGLM) +2. **埋め込みモデル**。データセット内の分割された文書の埋め込みに使用されるのはこのタイプのモデルです。データセットを使用するアプリケーションでは、ユーザーの質問を埋め込み処理する際にもこのタイプのモデルが使用されます。 + + > サポートされている埋め込みモデルプロバイダー:OpenAI、ZHIPU(ChatGLM)、JinaAI +3. [**リランクモデル**](https://docs.dify.ai/v/zh-hans/advanced/retrieval-augment/rerank)。**リランクモデルは検索能力を強化し、LLMの検索結果を改善するために使用されます。** + + > サポートされているリランクモデルプロバイダー:Cohere、JinaAI +4. **音声からテキストへのモデル**。会話型アプリケーションで音声をテキストに変換する際に使用されるのはこのタイプのモデルです。 + + > サポートされている音声からテキストへのモデルプロバイダー:OpenAI + +技術の進化とユーザーのニーズに応じて、今後もさらに多くのLLMプロバイダーをサポートしていきます。 + +### ホストモデル試用サービス + +Difyクラウドサービスのユーザーには、異なるモデルの試用枠を提供しています。この枠が尽きる前に自分のモデルプロバイダーを設定してください。さもないと、アプリケーションの正常な使用に影響を及ぼす可能性があります。 + +* **OpenAIホストモデル試用:** GPT3.5-turbo、GPT3.5-turbo-16k、text-davinci-003モデルの試用として200回の呼び出し回数を提供します。 + +### デフォルトモデルの設定 + +Difyは使用シーンに応じて設定されたデフォルトモデルを選択します。`設定 > モデルプロバイダー`でデフォルトモデルを設定します。 + +
+ +### モデルの接続設定 + +Difyの`設定 > モデルプロバイダー`で接続するモデルを設定します。 + +
+ +モデルプロバイダーは2種類に分かれます: + +1. 自社モデル。このタイプのモデルプロバイダーは自社で開発したモデルを提供します。例としてOpenAI、Anthropicなどがあります。 +2. ホストモデル。このタイプのモデルプロバイダーは第三者のモデルを提供します。例としてHugging Face、Replicateなどがあります。 + +Difyで異なるタイプのモデルプロバイダーを接続する方法は若干異なります。 + +**自社モデルのモデルプロバイダーの接続** + +自社モデルのプロバイダーを接続すると、Difyはそのプロバイダーのすべてのモデルに自動的に接続します。 + +Difyで対応するモデルプロバイダーのAPIキーを設定するだけで、そのモデルプロバイダーに接続できます。 + +{% hint style="info" %} +Difyは[PKCS1\_OAEP](https://pycryptodome.readthedocs.io/en/latest/src/cipher/oaep.html)を使用してユーザーが管理するAPIキーを暗号化して保存しています。各テナントは独立した鍵ペアを使用して暗号化しており、APIキーの漏洩を防止します。 +{% endhint %} + +**ホストモデルのモデルプロバイダーの接続** + +ホストタイプのプロバイダーには多くの第三者モデルがあります。モデルの接続には個別に追加が必要です。具体的な接続方法は以下の通りです: + +* [Hugging Face](hugging-face.md) +* [Replicate](replicate.md) +* [Xinference](xinference.md) +* [OpenLLM](openllm.md) + +### モデルの使用 + +モデルの設定が完了したら、アプリケーションでこれらのモデルを使用できます: + +
\ No newline at end of file diff --git a/jp/guides/model-configuration/customizable-model.md b/jp/guides/model-configuration/customizable-model.md new file mode 100644 index 00000000..2a45a029 --- /dev/null +++ b/jp/guides/model-configuration/customizable-model.md @@ -0,0 +1,303 @@ +# カスタムモデルのインテグレーション + +### イントロダクション + +ベンダー統合が完了した後、次にベンダーの下でモデルのインテグレーションを行います。ここでは、全体のプロセスを理解するために、例として`Xinference`を使用して、段階的にベンダーのインテグレーションを完了します。 + +注意が必要なのは、カスタムモデルの場合、各モデルのインテグレーションには完全なベンダークレデンシャルの記入が必要です。 + +事前定義モデルとは異なり、カスタムベンダーのインテグレーション時には常に以下の2つのパラメータが存在し、ベンダー yaml に定義する必要はありません。 + +
+ +前述したように、ベンダーは`validate_provider_credential`を実装する必要はなく、Runtimeがユーザーが選択したモデルタイプとモデル名に基づいて、対応するモデル層の`validate_credentials`を呼び出して検証を行います。 + +#### ベンダー yaml の作成 + +まず、インテグレーションを行うベンダーがどのタイプのモデルをサポートしているかを確認します。 + +現在サポートされているモデルタイプは以下の通りです: + +* `llm` テキスト生成モデル +* `text_embedding` テキスト Embedding モデル +* `rerank` Rerank モデル +* `speech2text` 音声からテキスト変換 +* `tts` テキストから音声変換 +* `moderation` モデレーション + +`Xinference`は`LLM`、`Text Embedding`、`Rerank`をサポートしているため、`xinference.yaml`を作成します。 + +```yaml +provider: xinference # ベンダー識別子 +label: # ベンダー表示名、en_US 英語、zh_Hans 中国語の両方の言語で設定可能、zh_Hans が設定されていない場合は en_US がデフォルト + en_US: Xorbits Inference +icon_small: # 小アイコン、他のベンダーのアイコンを参考にし、対応するベンダー実装ディレクトリの _assets ディレクトリに保存 + en_US: icon_s_en.svg +icon_large: # 大アイコン + en_US: icon_l_en.svg +help: # ヘルプ + title: + en_US: How to deploy Xinference + zh_Hans: 如何部署 Xinference + url: + en_US: https://github.com/xorbitsai/inference +supported_model_types: # サポートされるモデルタイプ、XinferenceはLLM/Text Embedding/Rerankをサポート +- llm +- text-embedding +- rerank +configurate_methods: # Xinferenceはローカルデプロイのベンダーであり、事前定義モデルがないため、必要なモデルを自分でデプロイする必要があるので、ここではカスタムモデルのみサポート +- customizable-model +provider_credential_schema: + credential_form_schemas: +``` + +その後、Xinferenceでモデルを定義するために必要なクレデンシャルを考えます。 + +* 3つの異なるモデルをサポートするため、`model_type`を使用してこのモデルのタイプを指定する必要があります。3つのタイプがあるので、次のように記述します。 + +```yaml +provider_credential_schema: + credential_form_schemas: + - variable: model_type + type: select + label: + en_US: Model type + zh_Hans: 模型类型 + required: true + options: + - value: text-generation + label: + en_US: Language Model + zh_Hans: 言語モデル + - value: embeddings + label: + en_US: Text Embedding + - value: reranking + label: + en_US: Rerank +``` + +* 各モデルには独自の名称`model_name`があるため、ここで定義する必要があります。 + +```yaml + - variable: model_name + type: text-input + label: + en_US: Model name + zh_Hans: モデル名 + required: true + placeholder: + zh_Hans: 填写模型名称 + en_US: Input model name +``` + +* Xinferenceのローカルデプロイのアドレスを記入します。 + +```yaml + - variable: server_url + label: + zh_Hans: 服务器URL + en_US: Server url + type: text-input + required: true + placeholder: + zh_Hans: 在此输入Xinference的服务器地址,如 https://example.com/xxx + en_US: Enter the url of your Xinference, for example https://example.com/xxx +``` + +* 各モデルには一意の model\_uid があるため、ここで定義する必要があります。 + +```yaml + - variable: model_uid + label: + zh_Hans: 模型 UID + en_US: Model uid + type: text-input + required: true + placeholder: + zh_Hans: 在此输入您的 Model UID + en_US: Enter the model uid +``` + +これで、ベンダーの基本定義が完了しました。 + +#### モデルコードの作成 + +次に、`llm`タイプを例にとって、`xinference.llm.llm.py`を作成します。 + +`llm.py`内で、Xinference LLM クラスを作成し、`XinferenceAILargeLanguageModel`(任意の名前)と名付けて、`__base.large_language_model.LargeLanguageModel`基底クラスを継承し、以下のメソッドを実装します: + +* LLM 呼び出し + + LLM 呼び出しのコアメソッドを実装し、ストリームレスポンスと同期レスポンスの両方をサポートします。 + + ```python + def _invoke(self, model: str, credentials: dict, + prompt_messages: list[PromptMessage], model_parameters: dict, + tools: Optional[list[PromptMessageTool]] = None, stop: Optional[List[str]] = None, + stream: bool = True, user: Optional[str] = None) \ + -> Union[LLMResult, Generator]: + """ + Invoke large language model + + :param model: model name + :param credentials: model credentials + :param prompt_messages: prompt messages + :param model_parameters: model parameters + :param tools: tools for tool calling + :param stop: stop words + :param stream: is stream response + :param user: unique user id + :return: full response or stream response chunk generator result + """ + ``` + + 実装時には、同期レスポンスとストリームレスポンスを処理するために2つの関数を使用してデータを返す必要があります。Pythonは`yield`キーワードを含む関数をジェネレータ関数として認識し、返されるデータ型は固定でジェネレーターになります。そのため、同期レスポンスとストリームレスポンスは別々に実装する必要があります。以下のように実装します(例では簡略化されたパラメータを使用していますが、実際の実装では上記のパラメータリストに従って実装してください): + + ```python + def _invoke(self, stream: bool, **kwargs) \ + -> Union[LLMResult, Generator]: + if stream: + return self._handle_stream_response(**kwargs) + return self._handle_sync_response(**kwargs) + + def _handle_stream_response(self, **kwargs) -> Generator: + for chunk in response: + yield chunk + def _handle_sync_response(self, **kwargs) -> LLMResult: + return LLMResult(**response) + ``` +* 予測トークン数の計算 + + モデルが予測トークン数の計算インターフェースを提供していない場合、直接0を返すことができます。 + + ```python + def get_num_tokens(self, model: str, credentials: dict, prompt_messages: list[PromptMessage], + tools: Optional[list[PromptMessageTool]] = None) -> int: + """ + Get number of tokens for given prompt messages + + :param model: model name + :param credentials: model credentials + :param prompt_messages: prompt messages + :param tools: tools for tool calling + :return: + """ + ``` + + 時には、直接0を返す必要がない場合もあります。その場合は`self._get_num_tokens_by_gpt2(text: str)`を使用して予測トークン数を取得することができます。このメソッドは`AIModel`基底クラスにあり、GPT2のTokenizerを使用して計算を行いますが、代替方法として使用されるものであり、完全に正確ではありません。 +* モデルクレデンシャル検証 + + ベンダークレデンシャル検証と同様に、ここでは個々のモデルについて検証を行います。 + + ```python + def validate_credentials(self, model: str, credentials: dict) -> None: + """ + Validate model credentials + + :param model: model name + :param credentials: model credentials + :return: + """ + ``` +* モデルパラメータスキーマ + + カスタムタイプとは異なり、yamlファイルでモデルがサポートするパラメータを定義していないため、動的にモデルパラメータのスキーマを生成する必要があります。 + + 例えば、Xinferenceは`max_tokens`、`temperature`、`top_p`の3つのモデルパラメータをサポートしています。 + + しかし、ベンダーによっては異なるモデルに対して異なるパラメータをサポートしている場合があります。例えば、ベンダー`OpenLLM`は`top_k`をサポートしていますが、全てのモデルが`top_k`をサポートしているわけではありません。ここでは、例としてAモデルが`top_k`をサポートし、Bモデルが`top_k`をサポートしていない場合、以下のように動的にモデルパラメータのスキーマを生成します: + + ```python + def get_customizable_model_schema(self, model: str, credentials: dict) -> AIModelEntity | None: + """ + used to define customizable model schema + """ + rules = [ + ParameterRule( + name='temperature', type=ParameterType.FLOAT, + use_template='temperature', + label=I18nObject( + zh_Hans='温度', en_US='Temperature' + ) + ), + ParameterRule( + name='top_p', type=ParameterType.FLOAT, + use_template='top_p', + label=I18nObject( + zh_Hans='Top P', en_US='Top P' + ) + ), + ParameterRule( + name='max_tokens', type=ParameterType.INT, + use_template='max_tokens', + min=1, + default=512, + label=I18nObject( + zh_Hans='最大生成长度', en_US='Max Tokens' + ) + ) + ] + + # if model is A, add top_k to rules + if model == 'A': + rules.append( + ParameterRule( + name='top_k', type=ParameterType.INT, + use_template='top_k', + min=1, + default=50, + label=I18nObject( + zh_Hans='Top K', en_US='Top K' + ) + ) + ) + + """ + some NOT IMPORTANT code here + """ + + entity = AIModelEntity( + model=model, + label=I18nObject( + en_US=model + ), + fetch_from=FetchFrom.CUSTOMIZABLE_MODEL, + model_type=model_type, + model_properties={ + ModelPropertyKey.MODE: ModelType.LLM, + }, + parameter_rules=rules + ) + + return entity + ``` +* 呼び出しエラーマッピングテーブル + + モデル呼び出し時にエラーが発生した場合、Runtimeが指定する`InvokeError`タイプにマッピングする必要があります。これにより、Difyは異なるエラーに対して異なる後続処理を行うことができます。 + + Runtime エラー: + + * `InvokeConnectionError` 呼び出し接続エラー + * `InvokeServerUnavailableError` 呼び出しサービスが利用不可 + * `InvokeRateLimitError` 呼び出し回数制限に達した + * `InvokeAuthorizationError` 認証エラー + * `InvokeBadRequestError` 不正なリクエストパラメータ + + ```python + @property + def _invoke_error_mapping(self) -> dict[type[InvokeError], list[type[Exception]]]: + """ + Map model invoke error to uni ``` +-> dict[type[呼び出しエラー], list[type[例外]]]: + """ + モデル呼び出しエラーを統一エラーにマッピングする + キーは呼び出し元に投げられるエラータイプ + バリューはモデルが投げるエラータイプであり、 + 呼び出し元に対して統一エラータイプに変換する必要があります。 + + :return: 呼び出しエラーのマッピング + """ +``` + +インターフェース方法の詳細については:[インターフェース](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/docs/zh_Hans/interfaces.md)をご覧ください。具体的な実装例については、[llm.py](https://github.com/langgenius/dify-runtime/blob/main/lib/model_providers/anthropic/llm/llm.py)を参照してください。 \ No newline at end of file diff --git a/jp/guides/model-configuration/hugging-face.md b/jp/guides/model-configuration/hugging-face.md new file mode 100644 index 00000000..ad884126 --- /dev/null +++ b/jp/guides/model-configuration/hugging-face.md @@ -0,0 +1,69 @@ +# Hugging Face 上のオープンソースモデルの接続 + +Difyはテキスト生成(Text-Generation)と埋め込み(Embeddings)をサポートしており、以下はそれに対応するHugging Faceモデルの種類です: + +* テキスト生成:[text-generation](https://huggingface.co/models?pipeline\_tag=text-generation\&sort=trending),[text2text-generation](https://huggingface.co/models?pipeline\_tag=text2text-generation\&sort=trending) +* 埋め込み:[feature-extraction](https://huggingface.co/models?pipeline\_tag=feature-extraction\&sort=trending) + +具体的な手順は以下の通りです: + +1. Hugging Faceのアカウントが必要です([登録はこちら](https://huggingface.co/join))。 +2. Hugging FaceのAPIキーを設定します([取得はこちら](https://huggingface.co/settings/tokens))。 +3. [Hugging Faceのモデル一覧ページ](https://huggingface.co/models)にアクセスし、対応するモデルの種類を選択します。 + +
+ +DifyはHugging Face上のモデルを次の2つの方法で接続できます: + +1. Hosted Inference API。この方法はHugging Face公式がデプロイしたモデルを使用します。料金はかかりませんが、サポートされているモデルは少ないです。 +2. Inference Endpoint。この方法は、Hugging Faceが接続しているAWSなどのリソースを使用してモデルをデプロイします。料金が発生します。 + +### Hosted Inference APIのモデルを接続する + +#### 1 モデルを選択 + +モデルの詳細ページの右側にHosted Inference APIのセクションがあるモデルのみがHosted Inference APIをサポートしています。以下の図のように表示されます: + +
+ +モデルの詳細ページで、モデルの名前を取得できます。 + +
+ +#### 2 Difyで接続モデルを使用する + +`設定 > モデルプロバイダー > Hugging Face > モデルタイプ`のエンドポイントタイプでHosted Inference APIを選択します。以下の図のように設定します: + +
+ +APIトークンは記事の冒頭で設定したAPIキーです。モデル名は前のステップで取得したモデル名を入力します。 + +### 方法 2: Inference Endpoint + +#### 1 デプロイするモデルを選択 + +モデルの詳細ページの右側にある`Deploy`ボタンの下にInference EndpointsオプションがあるモデルのみがInference Endpointをサポートしています。以下の図のように表示されます: + +
+ +#### 2 モデルをデプロイ + +モデルのデプロイボタンをクリックし、Inference Endpointオプションを選択します。以前にクレジットカードを登録していない場合は、カードの登録が必要です。手順に従って進めてください。カードを登録した後、以下の画面が表示されます:必要に応じて設定を変更し、左下のCreate EndpointボタンをクリックしてInference Endpointを作成します。 + +
+ +モデルがデプロイされると、エンドポイントURLが表示されます。 + +
+ +#### 3 Difyで接続モデルを使用する + +`設定 > モデルプロバイダー > Hugging Face > モデルタイプ`のエンドポイントタイプでInference Endpointsを選択します。以下の図のように設定します: + +
+ +APIトークンは記事の冒頭で設定したAPIキーです。`テキスト生成モデルの名前は任意に設定可能ですが、埋め込みモデルの名前はHugging Faceの名前と一致する必要があります。`エンドポイントURLは前のステップでデプロイしたモデルのエンドポイントURLを入力します。 + +
+ +> 注意:埋め込みの「ユーザー名 / 組織名」は、Hugging Faceの[Inference Endpoints](https://huggingface.co/docs/inference-endpoints/guides/access)のデプロイ方法に基づいて、「[ユーザー名](https://huggingface.co/settings/account)」または「[組織名](https://ui.endpoints.huggingface.co/)」を入力する必要があります。 \ No newline at end of file diff --git a/jp/guides/model-configuration/load_balancing.md b/jp/guides/model-configuration/load_balancing.md new file mode 100644 index 00000000..cc291283 --- /dev/null +++ b/jp/guides/model-configuration/load_balancing.md @@ -0,0 +1,35 @@ +# ロードバランシング + +モデルのレート制限(Rate limits)とは、モデルプロバイダーがユーザーまたは顧客に対し、指定された時間内にAPIサービスへアクセスする回数に対して設ける制限のことです。これにより、APIの乱用や誤用を防ぎ、すべてのユーザーが公平にAPIにアクセスできるようにし、インフラ全体の負荷を管理することができます。 + +企業レベルで大規模にモデルAPIを呼び出す際、高い同時リクエストがレート制限を超えてしまい、ユーザーのアクセスに影響を及ぼすことがあります。ロードバランシングは、複数のAPIエンドポイント間でAPIリクエストを分配することで、すべてのユーザーが最速の応答と最高のモデル呼び出しスループットを得られるようにし、ビジネスの安定した運用を保障します。 + +**モデルプロバイダー -- モデルリスト -- 設定モデルロードバランシング** でこの機能を有効にし、同じモデルに複数の資格情報(APIキー)を追加することができます。 + +

モデルロードバランシング

+ +{% hint style="info" %} +モデルロードバランシングは有料機能です。[SaaS有料サービスのサブスクリプション](../../getting-started/cloud.md#ding-yue-ji-hua)または企業版の購入を通じてこの機能を有効にすることができます。 +{% endhint %} + +デフォルト設定では、APIキーは初回設定時にモデルプロバイダーに追加された資格情報です。**設定の追加** をクリックして、同じモデルの異なるAPIキーを追加することで、ロードバランシング機能を正常に使用できます。 + +

ロードバランシングの設定

+ +**少なくとも1つの追加モデル資格情報**を追加することで、保存しロードバランシングを有効にできます。 + +既に設定されている資格情報を**一時的に無効化**または**削除**することも可能です。 + +
+ +設定完了後、モデルリスト内にすべての有効なロードバランシングモデルが表示されます。 + +

ロードバランシングの有効化

+ +{% hint style="info" %} +デフォルトでは、ロードバランシングはラウンドロビン戦略を使用します。レート制限を超えた場合、1分間のクールダウンタイムが適用されます。 +{% endhint %} + +**モデルの追加**からもロードバランシングを設定することができ、設定手順は上記と同じです。 + +

モデルの追加からロードバランシングを設定

\ No newline at end of file diff --git a/jp/guides/model-configuration/localai.md b/jp/guides/model-configuration/localai.md new file mode 100644 index 00000000..23538aec --- /dev/null +++ b/jp/guides/model-configuration/localai.md @@ -0,0 +1,104 @@ +# LocalAIのローカルモデルの接続 + +[LocalAI](https://github.com/go-skynet/LocalAI) は、RESTFul APIを提供するローカル推論フレームワークで、OpenAI API仕様と互換性があります。これにより、消費者向けハードウェア上で、または自社サーバー上で、GPUを使用せずにLLM(大型言語モデル)や他のモデルを実行することが可能です。Difyは、LocalAIでデプロイされた大型言語モデルの推論および埋め込み機能をローカルで接続することをサポートしています。 + +## LocalAIのデプロイ + +### 使用前の注意事項 + +もしコンテナのIPアドレスを直接使用する必要がある場合、上記の手順がその情報を取得するのに役立ちます。 + +### デプロイ開始 + +公式の[入門ガイド](https://localai.io/basics/getting_started/)を参考にデプロイを行うか、以下の手順で迅速に接続を行うことができます: + +(以下の手順は[LocalAI Data query example](https://github.com/go-skynet/LocalAI/blob/master/examples/langchain-chroma/README.md)から引用しています) + +1. まず、LocalAIのコードリポジトリをクローンし、指定のディレクトリに移動します + + ```bash + $ git clone https://github.com/go-skynet/LocalAI + $ cd LocalAI/examples/langchain-chroma + ``` + +2. サンプルのLLMと埋め込みモデルをダウンロードします + + ```bash + $ wget https://huggingface.co/skeskinen/ggml/resolve/main/all-MiniLM-L6-v2/ggml-model-q4_0.bin -O models/bert + $ wget https://gpt4all.io/models/ggml-gpt4all-j.bin -O models/ggml-gpt4all-j + ``` + + ここでは、小型で全プラットフォーム対応の2つのモデルを選んでいます。`ggml-gpt4all-j`がデフォルトのLLMモデルとして、`all-MiniLM-L6-v2`がデフォルトの埋め込みモデルとして使用され、ローカルで迅速にデプロイすることができます。 + +3. .envファイルを設定します + + ```shell + $ mv .env.example .env + ``` + + 注意:`.env`内のTHREADS変数の値が、あなたのマシンのCPUコア数を超えないことを確認してください。 + +4. LocalAIを起動します + + ```shell + # docker-composeを使用して起動 + $ docker-compose up -d --build + + # ログを追跡し、ビルドが完了するまで待つ + $ docker logs -f langchain-chroma-api-1 + 7:16AM INF Starting LocalAI using 4 threads, with models path: /models + 7:16AM INF LocalAI version: v1.24.1 (9cc8d9086580bd2a96f5c96a6b873242879c70bc) + + ┌───────────────────────────────────────────────────┐ + │ Fiber v2.48.0 │ + │ http://127.0.0.1:8080 │ + │ (bound on host 0.0.0.0 and port 8080) │ + │ │ + │ Handlers ............ 55 Processes ........... 1 │ + │ Prefork ....... Disabled PID ................ 14 │ + └───────────────────────────────────────────────────┘ + ``` + + ローカルの`http://127.0.0.1:8080`がLocalAIのAPIリクエストのエンドポイントとして開放されます。 + + そして、以下の2つのモデルが提供されます: + + - LLMモデル:`ggml-gpt4all-j` + + 外部アクセス名:`gpt-3.5-turbo`(この名前は`models/gpt-3.5-turbo.yaml`でカスタマイズ可能です) + + - 埋め込みモデル:`all-MiniLM-L6-v2` + + 外部アクセス名:`text-embedding-ada-002`(この名前は`models/embeddings.yaml`でカスタマイズ可能です) + + > DifyをDockerでデプロイする場合、ネットワーク設定に注意し、DifyコンテナがXinferenceのエンドポイントにアクセスできることを確認してください。Difyコンテナ内からはlocalhostにアクセスできないため、ホストのIPアドレスを使用する必要があります。 + +5. LocalAI APIサービスがデプロイ完了したら、Difyでモデルを使用します + + `設定 > モデル供給者 > LocalAI`に以下を入力します: + + モデル1:`ggml-gpt4all-j` + + - モデルタイプ:テキスト生成 + + - モデル名:`gpt-3.5-turbo` + + - サーバーURL:http://127.0.0.1:8080 + + Difyがdockerデプロイの場合、ホストのドメイン名:http://:8080を入力してください。例えば、局域網のIPアドレス:http://192.168.1.100:8080 + + "保存"後、アプリケーション内でこのモデルを使用できます。 + + モデル2:`all-MiniLM-L6-v2` + + - モデルタイプ:埋め込み + + - モデル名:`text-embedding-ada-002` + + - サーバーURL:http://127.0.0.1:8080 + + > Difyがdockerデプロイの場合、ホストのドメイン名:http://:8080を入力してください。例えば、局域網のIPアドレス:http://192.168.1.100:8080 + + "保存"後、アプリケーション内でこのモデルを使用できます。 + +LocalAIに関する詳しい情報については、https://github.com/go-skynet/LocalAI を参照してください。 \ No newline at end of file diff --git a/jp/guides/model-configuration/new-provider.md b/jp/guides/model-configuration/new-provider.md new file mode 100644 index 00000000..fdaa0f2d --- /dev/null +++ b/jp/guides/model-configuration/new-provider.md @@ -0,0 +1,192 @@ +# 新しいプロバイダーの追加 + +### モデル設定方法 + +プロバイダーは三つのモデル設定方法に対応しています: + +**事前定義モデル(predefined-model)** + +ユーザーは統一されたプロバイダーのクレデンシャルを設定するだけで、プロバイダーの事前定義モデルを使用できます。 + +**カスタマイズ可能モデル(customizable-model)** + +ユーザーは各モデルのクレデンシャル設定を追加する必要があります。例えば、XinferenceはLLMとテキスト埋め込みの両方に対応していますが、各モデルには一意の**モデルUID**があり、両方を同時に接続したい場合は、それぞれのモデルに対して**モデルUID**を設定する必要があります。 + +**リモートから取得(fetch-from-remote)** + +`predefined-model`の設定方法と一致しており、統一されたプロバイダーのクレデンシャルを設定するだけで、モデルはクレデンシャル情報を通じてプロバイダーから取得されます。 + +例えばOpenAIの場合、gpt-turbo-3.5を基に複数のモデルを微調整することができ、それらはすべて同じ**APIキー**の下にあります。`fetch-from-remote`として設定すると、開発者は統一された**APIキー**を設定するだけで、Difyランタイムが開発者のすべての微調整モデルを取得してDifyに接続できます。 + +これら三つの設定方法は**共存可能**であり、例えばプロバイダーが`predefined-model`と`customizable-model`、または`predefined-model`と`fetch-from-remote`をサポートする場合があります。統一されたプロバイダーのクレデンシャルを設定することで、事前定義モデルとリモートから取得したモデルを使用でき、新しいモデルを追加することでカスタマイズ可能なモデルも使用できます。 + +### 設定説明 + +**名詞解説** + +* `モジュール`: 一つの`モジュール`は一つのPythonパッケージ、または簡単に言えば一つのフォルダーであり、その中に`__init__.py`ファイルと他の`.py`ファイルが含まれます。 + +**手順** + +新しいプロバイダーを追加するには主にいくつかのステップがあります。ここでは簡単に列挙し、具体的な手順は以下で詳しく説明します。 + +* プロバイダーのYAMLファイルを作成し、[プロバイダースキーマ](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/docs/zh_Hans/schema.md)に基づいて記述します。 +* プロバイダーのコードを作成し、`class`を実装します。 +* モデルタイプに応じて、プロバイダーの`モジュール`内に対応するモデルタイプの`モジュール`を作成します。例えば`llm`や`text_embedding`。 +* モデルタイプに応じて、対応するモデル`モジュール`内に同名のコードファイルを作成し、例えば`llm.py`、`class`を実装します。 +* 事前定義モデルがある場合、モデル名と同名のyamlファイルをモデル`モジュール`内に作成し、[AIモデルエンティティ](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/docs/zh_Hans/schema.md)に基づいて記述します。 +* テストコードを記述し、機能の有用性を確認します。 + +#### 始めましょう + +新しいプロバイダーを追加するには、まずプロバイダーの英語識別子を決めます。例えば`anthropic`、この識別子を使って`model_providers`内に同名の`モジュール`を作成します。 + +この`モジュール`内で、まずプロバイダーのYAML設定を準備する必要があります。 + +**プロバイダーYAMLの準備** + +ここでは`Anthropic`を例に、プロバイダーの基本情報、対応するモデルタイプ、設定方法、クレデンシャルルールを設定します。 + +```YAML +provider: anthropic # プロバイダーの識別子 +label: # プロバイダーの表示名、en_US英語、zh_Hans中国語の二言語を設定できます。zh_Hansが設定されていない場合、en_USがデフォルトで使用されます。 + en_US: Anthropic +icon_small: # プロバイダーの小アイコン、対応するプロバイダーの実装ディレクトリ内の_assetsディレクトリに保存されます。labelと同じく二言語の設定が可能です。 + en_US: icon_s_en.png +icon_large: # プロバイダーの大アイコン、対応するプロバイダーの実装ディレクトリ内の_assetsディレクトリに保存されます。labelと同じく二言語の設定が可能です。 + en_US: icon_l_en.png +supported_model_types: # 対応するモデルタイプ、AnthropicはLLMのみ対応 +- llm +configurate_methods: # 対応する設定方法、Anthropicは事前定義モデルのみ対応 +- predefined-model +provider_credential_schema: # プロバイダーのクレデンシャルルール、Anthropicは事前定義モデルのみ対応するため、統一されたプロバイダーのクレデンシャルルールを定義する必要があります + credential_form_schemas: # クレデンシャルフォーム項目リスト + - variable: anthropic_api_key # クレデンシャルパラメーターの変数名 + label: # 表示名 + en_US: API Key + type: secret-input # フォームタイプ、ここではsecret-inputは暗号化された情報入力フィールドを意味し、編集時にはマスクされた情報のみが表示されます。 + required: true # 必須かどうか + placeholder: # プレースホルダー情報 + zh_Hans: 在此输入您的 API Key + en_US: Enter your API Key + - variable: anthropic_api_url + label: + en_US: API URL + type: text-input # フォームタイプ、ここではtext-inputはテキスト入力フィールドを意味します + required: false + placeholder: + zh_Hans: 在此输入您的 API URL + en_US: Enter your API URL +``` + +カスタマイズ可能なモデルを提供するプロバイダー、例えば`OpenAI`が微調整モデルを提供する場合、[`モデルクレデンシャルスキーマ`](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/docs/zh_Hans/schema.md)を追加する必要があります。以下は`OpenAI`を例にしたものです: + +```yaml +model_credential_schema: + model: # 微調整モデルの名称 + label: + en_US: Model Name + zh_Hans: 模型名称 + placeholder: + en_US: Enter your model name + zh_Hans: 输入模型名称 + credential_form_schemas: + - variable: openai_api_key + label: + en_US: API Key + type: secret-input + required: true + placeholder: + zh_Hans: 在此输入您的 API Key + en_US: Enter your API Key + - variable: openai_organization + label: + zh_Hans: 组织 ID + en_US: Organization + type: text-input + required: false + placeholder: + zh_Hans: 在此输入您的组织 ID + en_US: Enter your Organization ID + - variable: openai_api_base + label: + zh_Hans: API Base + en_US: API Base + type: text-input + required: false + placeholder: + zh_Hans: 在此输入您的 API Base + en_US: Enter your API Base +``` + +`model_providers`ディレクトリ内の他のプロバイダーディレクトリの[YAML設定情報](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/docs/zh_Hans/schema.md)も参考にできます。 + +**プロバイダーコードの実装** + +`model_providers`内に同名のPythonファイルを作成します。例えば`anthropic.py`を作成し、`class`を実装、`__base.provider.Provider`基クラスを継承します。例えば`AnthropicProvider`。 + +**カスタマイズ可能モデルプロバイダー** + +プロバイダーがXinferenceなどのカスタマイズ可能モデルプロバイダーの場合、このステップをスキップし、空の`XinferenceProvider`クラスを作成し、空の`validate_provider_credentials`メソッドを実装するだけで済みます。このメソッドは実際には使用されず、抽象クラスのインスタンス化を避けるためにのみ存在します。 + +```python +class XinferenceProvider(Provider): + def validate_provider_credentials(self, credentials: dict) -> None: + pass +``` + +**事前定義モデルプロバイダー** + +プロバイダーは`__base.model_provider.ModelProvider`基クラスを継承し、`validate_provider_credentials`プロバイダーの統一クレデンシャル検証メソッドを実装するだけで済みます。[AnthropicProvider](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/model_providers/anthropic/anthropic.py)を参考にできます。 + +```python +def validate_provider_credentials(self, credentials: dict) -> None: + """ + Validate provider credentials + You can choose any validate_credentials method of model type or implement validate method by yourself, + such as: get model list api + + if validate failed, raise exception + + :param credentials: provider credentials, credentials form defined in `provider_credential_schema`. + """ +``` + +もちろん、`validate_provider_credentials`の実装を先に予約し、モデルクレデンシャル検証メソッドの実装後に直接再利用することもできます。 + +**モデルの追加** + +[**事前定義モデルの追加**](https://docs.dify.ai/v/zh-hans/guides/model-configuration/predefined-model)**👈🏻** + +事前定義モデルの場合、単純にyamlを定義し、呼び出しコードを実装することで接続できます。 + +[**カスタマイズ可能モデルの追加**](https://docs.dify.ai/v/zh-hans/guides/model-configuration/customizable-model) **👈🏻** + +カスタマイズ可能モデルの場合、呼び出しコードを実装するだけで接続できますが、処理するパラメーターはさらに複雑になる可能性があります。 + +*** + +#### テスト + +プロバイダー/モデルの有用性を確保するため、実装した各メソッドには`tests`ディレクトリ内で対応する統合テストコードを記述する必要があります。 + +再び`Anthropic`を例にします。 + +テストコードを記述する前に、`.env.example`にテストプロバイダーが必要とするクレデンシャル環境変数を追加します。例えば:`ANTHROPIC_API_KEY`。 + +実行前に`.env.example`をコピーして`.env`にし、実行します。 + +**テストコードの記述** + +`tests`ディレクトリ内にプロバイダーと同名の`モジュール`を作成します:`anthropic`。このモジュール内に`test_provider.py`および対応するモデルタイプのテストpyファイルを作成します。以下のようになります: + +```shell +. +├── __init__.py +├── anthropic +│   ├── __init__.py +│   ├── test_llm.py # LLMテスト +│   └── test_provider.py # プロバイダーテスト +``` + +上記で実装したコードの様々な状況に対してテストコードを記述し、テストを通過した後にコードを提出します。 \ No newline at end of file diff --git a/jp/guides/model-configuration/ollama.md b/jp/guides/model-configuration/ollama.md new file mode 100644 index 00000000..afb08cc8 --- /dev/null +++ b/jp/guides/model-configuration/ollama.md @@ -0,0 +1,143 @@ +# Ollama 部署のローカルモデルの接続 + +![ollama](../../.gitbook/assets/ollama.png) + +[Ollama](https://github.com/jmorganca/ollama) は、Llama 2、Mistral、Llava などの大型言語モデルをワンクリックでデプロイできるローカル推論フレームワーククライアントです。 +Dify は、Ollama でデプロイした大型言語モデルの推論および埋め込み機能への接続をサポートしています。 + +## クイック接続 + +### Ollama のダウンロードと起動 + +1. Ollama をダウンロード + + [https://ollama.ai/download](https://ollama.ai/download) にアクセスし、対応するシステムの Ollama クライアントをダウンロードします。 + +2. Ollama を実行して Llava とチャット + + ```bash + ollama run llava + ``` + + 起動に成功すると、ollama はローカルの 11434 ポートで API サービスを開始し、`http://localhost:11434` でアクセスできます。 + + その他のモデルについては [Ollama Models](https://ollama.ai/library) を参照してください。 + +3. Dify に Ollama を接続 + + `設定 > モデル供給元 > Ollama` に以下を入力します: + + ![](../../.gitbook/assets/ollama-config-zh.png) + + - モデル名称:`llava` + + - 基本 URL:`http://:11434` + + ここには、アクセス可能な Ollama サービスのアドレスを入力します。 + + Dify が docker でデプロイされている場合、ローカルネットワークの IP アドレス(例:`http://192.168.1.100:11434`)または docker ホストマシンの IP アドレス(例:`http://172.17.0.1:11434`)を入力することをお勧めします。 + + ローカルソースコードでデプロイされている場合は、`http://localhost:11434` を入力できます。 + + - モデルタイプ:`対話` + + - モデルのコンテキスト長:`4096` + + モデルの最大コンテキスト長です。不明な場合はデフォルト値の 4096 を入力してください。 + + - 最大トークン上限:`4096` + + モデルが返す内容の最大トークン数です。特に記載がない場合、モデルのコンテキスト長と同じ値を入力してください。 + + - ビジョン対応:`はい` + + モデルが画像理解(マルチモーダル)をサポートしている場合、このオプションを選択してください。例えば `llava` などです。 + + 「保存」をクリックし、エラーがないことを確認したら、このモデルをアプリで使用できます。 + + 埋め込みモデルの接続方法も LLM と似ています。モデルタイプを Text Embedding に変更するだけです。 + +4. Ollama モデルの使用 + + ![](../../.gitbook/assets/ollama-use-model.png) + + 設定が必要なアプリのプロンプト編成ページに移動し、Ollama 供給元の `llava` モデルを選択し、モデルパラメーターを設定した後に使用できます。 + +## FAQ + +### ⚠️ Docker を使用して Dify と Ollama をデプロイする場合、以下のエラーが発生することがあります: + +``` +httpconnectionpool(host=127.0.0.1, port=11434): max retries exceeded with url:/cpi/chat (Caused by NewConnectionError(': fail to establish a new connection:[Errno 111] Connection refused')) + +httpconnectionpool(host=localhost, port=11434): max retries exceeded with url:/cpi/chat (Caused by NewConnectionError(': fail to establish a new connection:[Errno 111] Connection refused')) +``` + +このエラーは、Docker コンテナが Ollama サービスにアクセスできないために発生します。localhost は通常、コンテナ自体を指すため、ホストや他のコンテナではありません。この問題を解決するには、Ollama サービスをネットワークに公開する必要があります。 + +### Macで環境変数を設定する方法 + +`Ollama` を `macOS` アプリケーションとして実行する場合、以下のコマンドを使用して環境変数`launchctl`を設定します: + +1. `launchctl setenv` を呼び出して環境変数を設定: + + ```bash + launchctl setenv OLLAMA_HOST "0.0.0.0" + ``` + +2. Ollama アプリケーションを再起動します。 + +3. 上記の手順が無効な場合は、次の方法を試してください: + + 問題は docker 内部で、docker のホストにアクセスするために `host.docker.internal` に接続する必要があるため、`localhost` を `host.docker.internal` に置き換えてサービスを設定します: + + ```bash + http://host.docker.internal:11434 + ``` + +### Linuxで環境変数を設定する方法 + +Ollama を systemd サービスとして実行する場合は、`systemctl` を使用して環境変数を設定します: + +1. `systemctl edit ollama.service` を呼び出して systemd サービスを編集します。これにより、エディタが開きます。 + +2. 各環境変数について、`[Service]` セクションの下に `Environment` 行を追加します: + + ```ini + [Service] + Environment="OLLAMA_HOST=0.0.0.0" + ``` + +3. 保存して終了します。 + +4. `systemd` をリロードし、Ollama を再起動します: + + ```bash + systemctl daemon-reload + systemctl restart ollama + ``` + +### Windowsで環境変数を設定する方法 + +Windows では、Ollama はユーザーとシステムの環境変数を継承します。 + +1. まずタスクバーから Ollama をクリックしてプログラムを終了します + +2. コントロールパネルからシステム環境変数を編集します + +3. ユーザーアカウントのために変数を編集または新規作成します。例えば、`OLLAMA_HOST`、`OLLAMA_MODELS`などです。 + +4. OK/適用をクリックして保存します + +5. 新しいターミナルウィンドウで `ollama` を実行します + +### Ollama をネットワーク上で公開する方法 + +Ollama はデフォルトで 127.0.0.1 の 11434 ポートにバインドされています。`OLLAMA_HOST` 環境変数を使用してバインドアドレスを変更します。 + +## Ollama に関する詳細情報については以下を参照してください + +For more information on Ollama, please refer to: + +- [Ollama](https://github.com/jmorganca/ollama) +- [Ollama FAQ](https://github.com/ollama/ollama/blob/main/docs/faq.md) \ No newline at end of file diff --git a/jp/guides/model-configuration/openllm.md b/jp/guides/model-configuration/openllm.md new file mode 100644 index 00000000..7bbdd1e7 --- /dev/null +++ b/jp/guides/model-configuration/openllm.md @@ -0,0 +1,24 @@ +# OpenLLM デプロイされたローカルモデルの接続 + +[OpenLLM](https://github.com/bentoml/OpenLLM)を使用すると、任意のオープンソース大規模言語モデルに対して推論を行い、クラウドまたはローカルにデプロイし、強力なAIアプリケーションを構築することができます。 +DifyはローカルデプロイされたOpenLLMモデルの推論能力をサポートしています。 + +## OpenLLM モデルのデプロイ +### デプロイの開始 + +以下の方法でデプロイを開始できます: + +```bash +docker run --rm -it -p 3333:3000 ghcr.io/bentoml/openllm start facebook/opt-1.3b --backend pt +``` +> 注意:ここで使用されている facebook/opt-1.3b モデルはあくまで例示であり、効果が不十分な場合があります。実際の状況に応じて適切なモデルを選択してください。詳細なモデルについては、[サポートされているモデル一覧](https://github.com/bentoml/OpenLLM#-supported-models)を参照してください。 + +モデルのデプロイが完了したら、Difyでモデルを接続して使用することができます。 + +`設定 > モデルプロバイダー > OpenLLM` の中で以下を入力します: + +- モデル名:`facebook/opt-1.3b` +- サーバー URL:`http://:3333` ここで `` をあなたのマシンの IP アドレスに置き換えてください。 + "保存" を押せば、アプリケーション内でこのモデルを使用することができます。 + +この説明はあくまで迅速な接続のための例として提供されています。OpenLLMのその他の特性や情報については、[OpenLLM](https://github.com/bentoml/OpenLLM) を参照してください。 \ No newline at end of file diff --git a/jp/guides/model-configuration/predefined-model.md b/jp/guides/model-configuration/predefined-model.md new file mode 100644 index 00000000..403da6e7 --- /dev/null +++ b/jp/guides/model-configuration/predefined-model.md @@ -0,0 +1,197 @@ +# 事前定義モデル接続 + +プロバイダー統合完了後、次にプロバイダーへのモデルの接続を行います。 + +まず、接続するモデルのタイプを決定し、対応するプロバイダーのディレクトリ内に対応するモデルタイプの`モジュール`を作成する必要があります。 + +現在サポートされているモデルタイプは以下の通りです: + +* `LLM` テキスト生成モデル +* `text_embedding` テキスト埋め込み +* `rerank` ランク再評価モデル +* `speech2text` 音声からテキスト +* `TTS` テキストから音声 +* `moderation` 審査 + +ここでは`Anthropic`を例に取ります。`Anthropic`はLLMのみをサポートしているため、`model_providers.anthropic`に`llm`という名前の`モジュール`を作成します。 + +事前定義のモデルの場合、まず`llm`モジュール内にモデル名をファイル名とするYAMLファイルを作成する必要があります。例:`claude-2.1.yaml` + +#### モデルYAMLの準備 + +```yaml +model: claude-2.1 # モデル識別子 +# モデル表示名。en_US英語、zh_Hans中国語の二つの言語を設定できます。zh_Hansが設定されていない場合、デフォルトでen_USが使用されます。 +# ラベルを設定しない場合、モデル識別子が使用されます。 +label: + en_US: claude-2.1 +model_type: llm # モデルタイプ、claude-2.1はLLM +features: # サポートする機能、agent-thoughtはエージェント推論、visionは画像理解をサポート +- agent-thought +model_properties: # モデルプロパティ + mode: chat # LLMモード、completeはテキスト補完モデル、chatは対話モデル + context_size: 200000 # 最大コンテキストサイズ +parameter_rules: # モデル呼び出しパラメータルール、LLMのみ提供が必要 +- name: temperature # 呼び出しパラメータ変数名 + # デフォルトで5つの変数内容設定テンプレートが用意されています。temperature/top_p/max_tokens/presence_penalty/frequency_penalty + # use_template内でテンプレート変数名を設定すると、entities.defaults.PARAMETER_RULE_TEMPLATE内のデフォルト設定が使用されます + # 追加の設定パラメータを設定した場合、デフォルト設定を上書きします + use_template: temperature +- name: top_p + use_template: top_p +- name: top_k + label: # 呼び出しパラメータ表示名 + zh_Hans: 取样数量 + en_US: Top k + type: int # パラメータタイプ、float/int/string/booleanがサポートされています + help: # ヘルプ情報、パラメータの作用を説明 + zh_Hans: 仅从每个后续标记的前 K 个选项中采样。 + en_US: Only sample from the top K options for each subsequent token. + required: false # 必須かどうか、設定しない場合もあります +- name: max_tokens_to_sample + use_template: max_tokens + default: 4096 # パラメータデフォルト値 + min: 1 # パラメータ最小値、float/intのみ使用可能 + max: 4096 # パラメータ最大値、float/intのみ使用可能 +pricing: # 価格情報 + input: '8.00' # 入力単価、つまりプロンプト単価 + output: '24.00' # 出力単価、つまり返答内容単価 + unit: '0.000001' # 価格単位、上記価格は100Kあたりの単価 + currency: USD # 価格通貨 +``` + +すべてのモデル設定を準備完了後にモデルコードの実装を開始することをお勧めします。 + +同様に、他のプロバイダーの対応モデルタイプディレクトリ内のYAML設定情報を参照することもできます。完全なYAMLルールについては、Schema[^1]をご覧ください。 + +#### モデル呼び出しコードの実装 + +次に、`llm`モジュール内に同名のPythonファイル`llm.py`を作成し、コード実装を行います。 + +`llm.py`内にAnthropic LLMクラスを作成し、`AnthropicLargeLanguageModel`(任意の名前)と名付け、基底クラス`__base.large_language_model.LargeLanguageModel`を継承し、以下のメソッドを実装します: + +* LLM呼び出し + + LLM呼び出しのコアメソッドを実装し、ストリーミングと同期返答の両方をサポートします。 + + ```python + def _invoke(self, model: str, credentials: dict, + prompt_messages: list[PromptMessage], model_parameters: dict, + tools: Optional[list[PromptMessageTool]] = None, stop: Optional[List[str]] = None, + stream: bool = True, user: Optional[str] = None) \ + -> Union[LLMResult, Generator]: + """ + LLMを呼び出す + + :param model: モデル名 + :param credentials: モデル認証情報 + :param prompt_messages: プロンプトメッセージ + :param model_parameters: モデルパラメータ + :param tools: ツール呼び出し用ツール + :param stop: 停止ワード + :param stream: ストリーム応答かどうか + :param user: ユーザーID + :return: 完全な応答またはストリーミング応答チャンク生成結果 + """ + ``` + + 実装時には、同期返答とストリーミング返答を処理するために2つの関数を使用する必要があります。Pythonは`yield`キーワードを含む関数をジェネレータ関数として認識し、返されるデータタイプが固定されるため、同期返答とストリーミング返答を別々に実装する必要があります。以下のように(以下の例では簡略化されたパラメータを使用していますが、実際の実装では上記のパラメータリストに従う必要があります): + + ```python + def _invoke(self, stream: bool, **kwargs) \ + -> Union[LLMResult, Generator]: + if stream: + return self._handle_stream_response(**kwargs) + return self._handle_sync_response(**kwargs) + + def _handle_stream_response(self, **kwargs) -> Generator: + for chunk in response: + yield chunk + def _handle_sync_response(self, **kwargs) -> LLMResult: + return LLMResult(**response) + ``` +* 事前計算入力トークン + + モデルが事前計算トークンインターフェースを提供していない場合は、0を返しても構いません。 + + ```python + def get_num_tokens(self, model: str, credentials: dict, prompt_messages: list[PromptMessage], + tools: Optional[list[PromptMessageTool]] = None) -> int: + """ + 指定されたプロンプトメッセージのトークン数を取得 + + :param model: モデル名 + :param credentials: モデル認証情報 + :param prompt_messages: プロンプトメッセージ + :param tools: ツール + :return: + """ + ``` +* モデル認証情報検証 + + プロバイダーの認証情報検証と同様に、ここでは個別のモデルに対して検証を行います。 + + ```python + def validate_credentials(self, model: str, credentials: dict) -> None: + """ + モデル認証情報を検証 + + :param model: モデル名 + :param credentials: モデル認証情報 + :return: + """ + ``` +* 呼び出し異常エラーのマッピングテーブル + + モデル呼び出し異常時に、ランタイム指定の`InvokeError`タイプにマッピングする必要があります。これにより、Difyは異なるエラーに対して異なる後続処理を行うことができます。 + + ランタイムエラー: + + * `InvokeConnectionError` 呼び出し接続エラー + * `InvokeServerUnavailableError` 呼び出しサーバー利用不可エラー + * `InvokeRateLimitError` 呼び出しレート制限エラー + * `InvokeAuthorizationError` 認証エラー + * `InvokeBadRequestError` 呼び出し不正リクエストエラー + + ```python + @property + def _invoke_error_mapping(self) -> dict[type[InvokeError], list[type[Exception]]]: + """ + モデル呼び出しエラーを統一エラーにマッピング + キーは呼び出し元にスローされるエラータイプ + 値はモデルによってスローされるエラータイプで、 + 呼び出し元の統一エラータイプに変換する必要があります。 + + :return: 呼び出しエラーマッピング + """ + ``` + +インターフェースメソッドの説明については:[Interfaces](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/docs/zh_Hans/interfaces.md)をご覧ください。具体的な実装については:[llm.py](https://github.com/langgenius/dify-runtime/blob/main/lib/model_providers/anthropic/llm/llm.py)を参照してください。 + +[^1]: #### プロバイダー + + * `provider` (string) プロバイダー識別子、例:`openai` + * `label` (object) プロバイダー表示名、i18n対応、`en_US`英語、`zh_Hans`中国語の二つの言語を設定可能 + * `zh_Hans` (string) \[optional] 中国語ラベル名、`zh_Hans`が設定されていない場合、デフォルトで`en_US`が使用されます。 + * `en_US` (string) 英語ラベル名 + * `description` (object) \[optional] プロバイダー説明、i18n対応 + * `zh_Hans` (string) \[optional] 中国語説明 + * `en_US` (string) 英語説明 + * `icon_small` (string) \[optional] プロバイダー小アイコン、対応するプロバイダー実装ディレクトリ内の`_assets`ディレクトリに保存、中英同様のポリシー + * `zh_Hans` (string) \[optional] 中国語アイコン + * `en_US` (string) 英語アイコン + * `icon_large` (string) \[optional] プロバイダー大アイコン、対応するプロバイダー実装ディレクトリ内の\_assetsディレクトリに保存、中英同様のポリシー + * `zh_Hans` (string) \[optional] 中国語アイコン + * `en_US` (string) 英語アイコン + * `background` (string) \[optional] 背景色の色値、例:#FFFFFF、空白の場合はデフォルトの色が表示されます。 + * `help` (object) \[optional] ヘルプ情報 + * `title` (object) ヘルプタイトル、i18n対応 + * `zh_Hans` (string) \[optional] 中国語タイトル + * `en_US` (string) 英語タイトル + * `url` (object) ヘルプリンク、i18n対応 + * `zh_Hans` (string) \[optional] 中国語リンク + * `en_US` (string) 英語リンク + * `supported_model_types` (array\[ModelType]) 対応モデルタイプ + * `configurate_methods` (array\[ConfigurateMethod]) 設定方法 + * `provider_credential_schema` (ProviderCredentialSchema) プロバイダー認証情報スキーマ + * `model_credential_schema` (ModelCredentialSchema) モデル認証情報スキーマ \ No newline at end of file diff --git a/jp/guides/model-configuration/replicate.md b/jp/guides/model-configuration/replicate.md new file mode 100644 index 00000000..f12ae0ea --- /dev/null +++ b/jp/guides/model-configuration/replicate.md @@ -0,0 +1,16 @@ +# Replicate上のオープンソースモデルの接続 + +DifyはReplicate上の[言語モデル](https://replicate.com/collections/language-models)と[埋め込みモデル](https://replicate.com/collections/embedding-models)に接続することができます。言語モデルはDifyの推論モデルに対応し、埋め込みモデルはDifyの埋め込みモデルに対応します。 + +具体的な手順は以下の通りです: + +1. Replicateのアカウントが必要です([登録ページ](https://replicate.com/signin?next=/docs))。 +2. APIキーを取得します([取得ページ](https://replicate.com/account/api-tokens))。 +3. モデルを選択します。[言語モデル](https://replicate.com/collections/language-models)と[埋め込みモデル](https://replicate.com/collections/embedding-models)からモデルを選びます。 +4. Difyの`設定 > モデルプロバイダ > Replicate`にてモデルを追加します。 + +
+ +APIキーは第2ステップで設定したAPIキーです。モデル名とモデルバージョンはモデルの詳細ページで見つけることができます: + +
\ No newline at end of file diff --git a/jp/guides/model-configuration/xinference.md b/jp/guides/model-configuration/xinference.md new file mode 100644 index 00000000..99e38e77 --- /dev/null +++ b/jp/guides/model-configuration/xinference.md @@ -0,0 +1,50 @@ +# Xinferenceを使用したローカルモデルの接続 + +[Xorbits推論](https://github.com/xorbitsai/inference)は、大型言語モデル、音声認識モデル、マルチモーダルモデルにサービスを提供するための強力で汎用的な分散推論フレームワークであり、ノートパソコンでも使用可能です。chatglm、baichuan、whisper、vicuna、orcaなど、GGML互換の多くのモデルをサポートしています。Difyは、ローカルにデプロイされたXinferenceの大型言語モデル推論および埋め込み機能を接続することができます。 + +## Xinferenceのデプロイ + +### デプロイの開始 + +Xinferenceのデプロイ方法は、[ローカルデプロイ](https://github.com/xorbitsai/inference/blob/main/README_zh_CN.md#%E6%9C%AC%E5%9C%B0%E9%83%A8%E7%BD%B2)と[分散デプロイ](https://github.com/xorbitsai/inference/blob/main/README_zh_CN.md#%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2)の2つがあります。ここではローカルデプロイを例に説明します。 + +1. まず、PyPIを使用してXinferenceをインストールします: + + ```bash + $ pip install "xinference[all]" + ``` +2. ローカルデプロイ方式でXinferenceを起動します: + + ```bash + $ xinference-local + 2023-08-20 19:21:05,265 xinference 10148 INFO Xinference successfully started. Endpoint: http://127.0.0.1:9997 + 2023-08-20 19:21:05,266 xinference.core.supervisor 10148 INFO Worker 127.0.0.1:37822 has been added successfully + 2023-08-20 19:21:05,267 xinference.deploy.worker 10148 INFO Xinference worker successfully started. + ``` + + Xinferenceはデフォルトでローカルにワーカーを起動し、エンドポイントは`http://127.0.0.1:9997`、ポートはデフォルトで`9997`です。デフォルトではローカルホストからのみアクセス可能ですが、`-H 0.0.0.0`を設定することで、外部クライアントからもアクセス可能になります。ホストやポートのさらに詳細な設定方法については、`xinference-local --help`で確認できます。 + > Dify Dockerデプロイ方式を使用する場合、ネットワーク設定に注意が必要です。DifyコンテナがXinferenceのエンドポイントにアクセスできるように設定してください。Difyコンテナ内部からローカルホストにはアクセスできないため、ホストマシンのIPアドレスを使用する必要があります。 + +3. モデルの作成とデプロイ + + `http://127.0.0.1:9997`にアクセスし、デプロイするモデルとその仕様を選択します。以下の図を参照してください: + +
+ + モデルによっては異なるハードウェアプラットフォームでの互換性が異なるため、[Xinference内蔵モデル](https://inference.readthedocs.io/en/latest/models/builtin/index.html)を確認して、作成するモデルが現在のハードウェアプラットフォームでサポートされているかどうかを確認してください。 +4. モデルUIDの取得 + + 上記ページから対応するモデルのIDを取得します。例:`2c886330-8849-11ee-9518-43b0b8f40bea` +5. モデルのデプロイ完了後、Difyでのモデル接続 + + `設定 > モデルプロバイダー > Xinference`に以下を入力します: + + * モデル名称:`vicuna-v1.3` + * サーバーURL:`http://:9997` **あなたのマシンのIPアドレスに置き換えてください** + * モデルUID:`2c886330-8849-11ee-9518-43b0b8f40bea` + + "保存"をクリックすると、アプリケーションでそのモデルを使用できます。 + +Difyはまた、[Xinference埋め込みモデル](https://github.com/xorbitsai/inference/blob/main/README_zh_CN.md#%E5%86%85%E7%BD%AE%E6%A8%A1%E5%9E%8B)をEmbeddingモデルとして使用することもサポートしています。設定ボックスで`Embeddings`タイプを選択するだけで使用可能です。 + +Xinferenceの詳細については、[Xorbits推論](https://github.com/xorbitsai/inference/blob/main/README_zh_CN.md)を参照してください。 \ No newline at end of file diff --git a/jp/guides/monitoring/README.md b/jp/guides/monitoring/README.md new file mode 100644 index 00000000..f4ad7df1 --- /dev/null +++ b/jp/guides/monitoring/README.md @@ -0,0 +1,5 @@ +# モニタリング + +**概要** で本番環境におけるアプリケーションのパフォーマンスをモニタリングし、データ分析ダッシュボードで本番環境におけるアプリケーションの使用コスト、レイテンシ、ユーザーフィードバック、パフォーマンスなどの指標を分析します。継続デバッグおよびイテレーションを通じてアプリケーションを絶えず改善します。 + +

概要

\ No newline at end of file diff --git a/jp/guides/monitoring/analysis.md b/jp/guides/monitoring/analysis.md new file mode 100644 index 00000000..cb081011 --- /dev/null +++ b/jp/guides/monitoring/analysis.md @@ -0,0 +1,31 @@ +# データ分析 + +**概要 — データ分析** では、使用量、アクティブユーザー数、大規模言語モデル (LLM) のコール消費などを表示します。これにより、アプリケーションの運営効果、活性度、経済性を継続的に改善できます。さらに多くの有用な可視化能力を段階的に提供していきますので、ぜひご要望をお知らせください。 + +

概要 — データ分析

+ +*** + +**メッセージ総数(Total Messages)** + +AI が毎日インタラクションした総回数を反映します。ユーザーの質問に AI が回答するごとに 1 メッセージとしてカウントします。プロンプトエンジニアリングやデバッグのセッションは含まれません。 + +**アクティブユーザー数(Active Users)** + +AI と有効にインタラクションしたユニークユーザー数を表します。少なくとも一問一答以上のやり取りをしたユーザーが含まれます。プロンプトエンジニアリングやデバッグのセッションは含まれません。 + +**平均セッションインタラクション数(Average Session Interactions)** + +各セッションユーザーの継続的なコミュニケーション回数を反映します。ユーザーが AI と 10 ラウンドの質問と回答を行った場合、その数値は 10 になります。この指標はユーザーの粘着性を反映します。対話型アプリケーションでのみ提供されます。 + +**トークン出力速度(Token Output Speed)** + +毎秒のトークン出力数を示し、モデルの生成速度およびアプリケーションの使用頻度を間接的に反映します。 + +**ユーザー満足度(User Satisfaction Rate)** + +1000 メッセージごとの「いいね」数を示します。ユーザーが回答に非常に満足している割合を反映します。 + +**トークン消費(Token Usage)** + +そのアプリケーションが毎日言語モデルにリクエストしたトークンの消費量を反映し、コスト管理に役立ちます。 \ No newline at end of file diff --git a/jp/guides/monitoring/integrate_external_ops_tools/README.md b/jp/guides/monitoring/integrate_external_ops_tools/README.md new file mode 100644 index 00000000..16ebd5d6 --- /dev/null +++ b/jp/guides/monitoring/integrate_external_ops_tools/README.md @@ -0,0 +1,3 @@ +# 外部のOpsツールを統合する + +🚧 メンテナンス中です \ No newline at end of file diff --git a/jp/guides/monitoring/integrate_external_ops_tools/integrate_langfuse.md b/jp/guides/monitoring/integrate_external_ops_tools/integrate_langfuse.md new file mode 100644 index 00000000..c15704d2 --- /dev/null +++ b/jp/guides/monitoring/integrate_external_ops_tools/integrate_langfuse.md @@ -0,0 +1,3 @@ +# LangFuseの統合 + +🚧 メンテナンス待機中 \ No newline at end of file diff --git a/jp/guides/monitoring/integrate_external_ops_tools/integrate_langsmith.md b/jp/guides/monitoring/integrate_external_ops_tools/integrate_langsmith.md new file mode 100644 index 00000000..7fd634de --- /dev/null +++ b/jp/guides/monitoring/integrate_external_ops_tools/integrate_langsmith.md @@ -0,0 +1,6 @@ +# LangSmithの統合 + +🚧 メンテナンス中のためお待ちください + +<用語> +{LangSmith} -> {LangSmith} \ No newline at end of file diff --git a/jp/guides/tools/advanced-tool-integration.md b/jp/guides/tools/advanced-tool-integration.md new file mode 100644 index 00000000..6da8e129 --- /dev/null +++ b/jp/guides/tools/advanced-tool-integration.md @@ -0,0 +1,271 @@ +# 高度接続ツール + +高度接続を始める前に、[クイック接続](https://docs.dify.ai/v/zh-hans/guides/tools/quick-tool-integration)を読んで、Difyのツール接続プロセスについて基本的な理解を持っていることを確認してください。 + +### ツールインターフェース + +`Tool`クラスには、開発者がより複雑なツールを迅速に構築できるようにするための一連のショートカットメソッドが定義されています。 + +#### メッセージ応答 + +Difyは`テキスト`、`リンク`、`画像`、`ファイルBLOB`などのさまざまなメッセージタイプをサポートしており、以下のインターフェースを使用して、LLMやユーザーに異なるタイプのメッセージを返すことができます。 + +注意:以下のインターフェースの一部のパラメータは、後の章で紹介します。 + +**画像URL** + +画像のURLを渡すだけで、Difyは自動的に画像をダウンロードしてユーザーに返します。 + +```python + def create_image_message(self, image: str, save_as: str = '') -> ToolInvokeMessage: + """ + 画像メッセージを作成 + + :param image: 画像のURL + :return: 画像メッセージ + """ +``` + +**リンク** + +リンクを返す必要がある場合は、以下のインターフェースを使用できます。 + +```python + def create_link_message(self, link: str, save_as: str = '') -> ToolInvokeMessage: + """ + リンクメッセージを作成 + + :param link: リンクのURL + :return: リンクメッセージ + """ +``` + +**テキスト** + +テキストメッセージを返す必要がある場合は、以下のインターフェースを使用できます。 + +```python + def create_text_message(self, text: str, save_as: str = '') -> ToolInvokeMessage: + """ + テキストメッセージを作成 + + :param text: メッセージのテキスト + :return: テキストメッセージ + """ +``` + +**ファイルBLOB** + +画像、音声、動画、PPT、Word、Excelなどのファイルの生データを返す必要がある場合は、以下のインターフェースを使用できます。 + +* `blob` ファイルの生データ、bytesタイプ +* `meta` ファイルのメタデータ、ファイルタイプが分かる場合は`mime_type`を渡すことが推奨されます。そうでない場合、Difyはデフォルトで`octet/stream`を使用します。 + +```python + def create_blob_message(self, blob: bytes, meta: dict = None, save_as: str = '') -> ToolInvokeMessage: + """ + BLOBメッセージを作成 + + :param blob: BLOBデータ + :return: BLOBメッセージ + """ +``` + +#### クイックツール + +大規模モデル応用において、以下の2つの一般的なニーズがあります: + +* 長文を事前に要約し、その要約内容をLLMに渡すことで、原文が長すぎてLLMが処理できない問題を防ぐ +* ツールが取得した内容がリンクである場合、ウェブページ情報をスクレイピングしてからLLMに返す + +これらのニーズを迅速に実現するために、以下の2つのクイックツールを提供しています。 + +**テキスト要約ツール** + +このツールはuser\_idと要約する必要があるテキストを入力し、要約されたテキストを返します。Difyは現在のワークスペースのデフォルトモデルを使用して長文を要約します。 + +```python + def summary(self, user_id: str, content: str) -> str: + """ + コンテンツを要約 + + :param user_id: ユーザーID + :param content: コンテンツ + :return: 要約 + """ +``` + +**ウェブスクレイピングツール** + +このツールはスクレイピングするウェブページのリンクとユーザーエージェント(任意)を入力し、そのウェブページ情報を含む文字列を返します。`user_agent`はオプションのパラメータで、ツールを識別するために使用されます。入力しない場合、Difyはデフォルトの`user_agent`を使用します。 + +```python + def get_url(self, url: str, user_agent: str = None) -> str: + """ + URLを取得 + """ スクレイピング結果 +``` + +#### 変数プール + +`Tool`では、ツールの実行中に生成される変数やファイルなどを保存するための変数プールを導入しています。これらの変数は、ツールの実行中に他のツールによって使用されることがあります。 + +以下に、`DallE3`と`Vectorizer.AI`を例に、変数プールの使用方法を紹介します。 + +* `DallE3`はテキストに基づいて画像を生成するツールで、ここでは`DallE3`がカフェのロゴを生成します。 +* `Vectorizer.AI`は画像をベクター画像に変換するツールで、生成された画像を無限に拡大しても劣化しないようにし、ここでは`DallE3`が生成したPNGアイコンをベクター画像に変換し、デザイナーが実際に使用できるようにします。 + +**DallE3** + +まず、DallE3を使用して画像を生成し、生成された画像を変数プールに保存します。コードは以下の通りです。 + +```python +from typing import Any, Dict, List, Union +from core.tools.entities.tool_entities import ToolInvokeMessage +from core.tools.tool.builtin_tool import BuiltinTool + +from base64 import b64decode + +from openai import OpenAI + +class DallE3Tool(BuiltinTool): + def _invoke(self, + user_id: str, + tool_paramters: Dict[str, Any], + ) -> Union[ToolInvokeMessage, List[ToolInvokeMessage]]: + """ + ツールを呼び出す + """ + client = OpenAI( + api_key=self.runtime.credentials['openai_api_key'], + ) + + # プロンプト + prompt = tool_paramters.get('prompt', '') + if not prompt: + return self.create_text_message('プロンプトを入力してください') + + # openapi dalle3を呼び出す + response = client.images.generate( + prompt=prompt, model='dall-e-3', + size='1024x1024', n=1, style='vivid', quality='standard', + response_format='b64_json' + ) + + result = [] + for image in response.data: + # すべての画像をsave_asパラメータを介して変数プールに保存し、変数名をself.VARIABLE_KEY.IMAGE.valueに設定します。後続の新しい画像が生成される場合、前の画像が上書きされます。 + result.append(self.create_blob_message(blob=b64decode(image.b64_json), + meta={ 'mime_type': 'image/png' }, + save_as=self.VARIABLE_KEY.IMAGE.value)) + + return result +``` + +ここで、`self.VARIABLE_KEY.IMAGE.value`を画像の変数名として使用していることに注意してください。開発者のツールが相互に連携できるように、この`KEY`を定義しました。自由に使用してもよいし、カスタムの`KEY`を渡しても構いません。 + +**Vectorizer.AI** + +次に、Vectorizer.AIを使用して、DallE3が生成したPNGアイコンをベクター画像に変換します。ここで定義した関数を確認します。コードは以下の通りです。 + +```python +from core.tools.tool.builtin_tool import BuiltinTool +from core.tools.entities.tool_entities import ToolInvokeMessage, ToolParamter +from core.tools.errors import ToolProviderCredentialValidationError + +from typing import Any, Dict, List, Union +from httpx import post +from base64 import b64decode + +class VectorizerTool(BuiltinTool): + def _invoke(self, user_id: str, tool_paramters: Dict[str, Any]) \ + -> Union[ToolInvokeMessage, List[ToolInvokeMessage]]: + """ + ツールを呼び出す。画像変数名はここで渡す必要があるため、変数プールから画像を取得できます。 + """ + + + def get_runtime_parameters(self) -> List[ToolParamter]: + """ + ツールパラメータリストをオーバーライドします。ここでは、変数プールの実際の状況に基づいてパラメータリストを動的に生成し、それに基づいてLLMがフォームを生成できます。 + """ + + + def is_tool_avaliable(self) -> bool: + """ + 現在のツールが使用可能かどうかを確認します。変数プールに画像がない場合、LLMがこのツールを表示する必要はありません。ここでFalseを返します。 + """ +``` + +次に、これらの3つの関数を実装します。 + +```python +from core.tools.tool.builtin_tool import BuiltinTool +from core.tools.entities.tool_entities import ToolInvokeMessage, ToolParamter +from core.tools.errors import ToolProviderCredentialValidationError + +from typing import Any, Dict, List, Union +from httpx import post +from base64 import b64decode + +class VectorizerTool(BuiltinTool): + def _invoke(self, user_id: str, tool_paramters: Dict[str, Any]) \ + -> Union[ToolInvokeMessage, List[ToolInvokeMessage]]: + """ + ツールを呼び出す + """ + api_key_name = self.runtime.credentials.get('api_key_name', None) + api_key_value = self.runtime.credentials.get('api_key_value', None) + + if not api_key_name or not api_key_value: + raise ToolProviderCredentialValidationError('APIキー名と値を入力してください') + + # 画像IDを取得、画像IDの定義はget_runtime_parametersで確認できます。 + image_id = tool_paramters.get('image_id', '') + if not image_id: + return self.create_text_message('画像IDを入力してください') + + # 変数プールから以前のDallEが生成した画像を取得 + image_binary = self.get_variable_file(self.VARIABLE_KEY.IMAGE) + if not image_binary: + return self.create_text_message('画像が見つかりません。まずユーザーに画像を生成するよう依頼してください。') + + # ベクター画像を生成 + response = post( + 'https://vectorizer.ai/api/v1/vectorize', + files={ 'image': image_binary }, + data={ 'mode': 'test' }, + auth=(api_key_name, api_key_value), + timeout=30 + ) + + if response.status_code != 200: + raise Exception(response.text) + + return [ + self.create_text_message('ベクター化されたSVGが画像として保存されました。'), + self.create_blob_message(blob=response.content, + meta={'mime_type': 'image/svg+xml'}) + ] + + def get_runtime_parameters(self) -> List[ToolParamter]: + """ + 実行時パラメータをオーバーライド + """ + # ここでは、ツールパラメータリストをオーバーライドし、image_idを定義し、そのオプションリストを現在の変数プール内のすべての画像に設定しました。ここでの設定はyamlの設定と一致しています。 + return [ + ToolParamter.get_simple_instance( + name='image_id', + llm_description=f'ベクター化する画像ID。画像IDは{[i.name for i in self.list_default_image_variables()]}の中から指定してください。', + type=ToolParamter.ToolParameterType.SELECT, + required=True, + options=[i.name for i in self.list_default_image_variables()] + ) + ] + + def is_tool_avaliable(self) -> bool: + # 変数プールに画像がある場合のみ、LLMがこのツールを使用する必要があります。 + return len(self.list_default_image_variables()) > 0 +``` + +ここで注意すべきは、実際には`image_id`を使用していないことです。このツールを呼び出すときに、デフォルトの変数プールに必ず画像があると仮定しているため、直接`image_binary = self.get_variable_file(self.VARIABLE`を使用しています。 mage_id`、私たちはこのツールを呼び出す際には必ず変数プールに画像が存在すると仮定しましたので、`画像バイナリ = self.get_variable_file(self.変数キー.画像)`を直接使用して画像を取得しました。モデルの能力が弱い場合、開発者の皆さんもこの方法を用いることをお勧めします。これにより、モデルが誤ったパラメータを渡すことを防ぎ、エラー許容率を効果的に向上させることができます。 \ No newline at end of file diff --git a/jp/guides/tools/quick-tool-integration.md b/jp/guides/tools/quick-tool-integration.md new file mode 100644 index 00000000..889a2387 --- /dev/null +++ b/jp/guides/tools/quick-tool-integration.md @@ -0,0 +1,253 @@ +# ツールの迅速な導入 + +ここでは、GoogleSearchを例にとって、ツールの迅速な導入方法をご紹介します。 + +### 1. ツールプロバイダーのyamlを準備 + +#### イントロダクション + +このyamlには、プロバイダーの名前、アイコン、著者などの詳細情報が含まれており、前端で柔軟に表示できるようにします。 + +#### サンプル + +`core/tools/provider/builtin`フォルダーに`google`モジュール(フォルダー)を作成し、その中に`google.yaml`を作成します。名前はモジュール名と一致する必要があります。 + +以降、このツールに関するすべての操作はこのモジュール内で行います。 + +```yaml +identity: # ツールプロバイダーの基本情報 + author: Dify # 著者 + name: google # 名前、唯一無二で、他のプロバイダーと重複してはいけません + label: # ラベル、前端表示用 + en_US: Google # 英語ラベル + zh_Hans: Google # 中国語ラベル + description: # 説明、前端表示用 + en_US: Google # 英語説明 + zh_Hans: Google # 中国語説明 + icon: icon.svg # アイコン、現在のモジュールの_assetsフォルダーに配置する必要があります + +``` + +* `identity` フィールドは必須です。著者、名前、ラベル、説明、アイコンなどの基本情報が含まれています。 + * アイコンは現在のモジュールの`_assets`フォルダーに配置する必要があります。参考例:api/core/tools/provider/builtin/google/_assets/icon.svg + + ```xml + + + + + + + ``` + +### 2. プロバイダーの認証情報を準備 + +GoogleはSerpApiが提供するAPIを使用しているため、SerpApiのAPIキーが必要です。一方で、`wikipedia`のようなツールでは認証情報フィールドを記入する必要はありません。参考例:api/core/tools/provider/builtin/wikipedia/wikipedia.yaml + +```yaml +identity: + author: Dify + name: wikipedia + label: + en_US: Wikipedia + zh_Hans: 维基百科 + pt_BR: Wikipedia + description: + en_US: Wikipedia is a free online encyclopedia, created and edited by volunteers around the world. + zh_Hans: 维基百科是一个由全世界的志愿者创建和编辑的免费在线百科全书。 + pt_BR: Wikipedia is a free online encyclopedia, created and edited by volunteers around the world. + icon: icon.svg +credentials_for_provider: +``` + +認証情報フィールドを設定すると以下のようになります: + +```yaml +identity: + author: Dify + name: google + label: + en_US: Google + zh_Hans: Google + description: + en_US: Google + zh_Hans: Google + icon: icon.svg +credentials_for_provider: # 認証情報フィールド + serpapi_api_key: # 認証情報フィールド名 + type: secret-input # 認証情報フィールドタイプ + required: true # 必須かどうか + label: # 認証情報フィールドラベル + en_US: SerpApi API key # 英語ラベル + zh_Hans: SerpApi API key # 中国語ラベル + placeholder: # 認証情報フィールドプレースホルダー + en_US: Please input your SerpApi API key # 英語プレースホルダー + zh_Hans: 请输入你的 SerpApi API key # 中国語プレースホルダー + help: # 認証情報フィールドヘルプテキスト + en_US: Get your SerpApi API key from SerpApi # 英語ヘルプテキスト + zh_Hans: 从 SerpApi 获取您的 SerpApi API key # 中国語ヘルプテキスト + url: https://serpapi.com/manage-api-key # 認証情報フィールドヘルプリンク + +``` + +* `type`:認証情報フィールドタイプ、現在は`secret-input`、`text-input`、`select`の3種類をサポートしており、それぞれパスワード入力、テキスト入力、選択ボックスに対応します。`secret-input`の場合、前端で入力内容が非表示となり、後端で入力内容が暗号化されます。 + +### 3. ツールのyamlを準備 + +一つのプロバイダーには複数のツールがあり、それぞれのツールには基本情報、パラメーター、出力などを記述したyamlファイルが必要です。 + +GoogleSearchを例にとって、`google`モジュール内に`tools`モジュールを作成し、その中に`tools/google_search.yaml`を作成します。内容は以下の通りです。 + +```yaml +identity: # ツールの基本情報 + name: google_search # ツール名、唯一無二で、他のツールと重複してはいけません + author: Dify # 著者 + label: # ラベル、前端表示用 + en_US: GoogleSearch # 英語ラベル + zh_Hans: 谷歌搜索 # 中国語ラベル +description: # 説明、前端表示用 + human: # 前端表示用の紹介文、複数言語対応 + en_US: A tool for performing a Google SERP search and extracting snippets and webpages.Input should be a search query. + zh_Hans: 一个用于执行 Google SERP 搜索并提取片段和网页的工具。输入应该是一个搜索查询。 + llm: A tool for performing a Google SERP search and extracting snippets and webpages.Input should be a search query. # LLMに渡す紹介文。LLMがこのツールをよりよく理解して使用できるように、ここにはできるだけ詳細な情報を書いておくことをお勧めします。 +parameters: # パラメーターリスト + - name: query # パラメーター名 + type: string # パラメータータイプ + required: true # 必須かどうか + label: # パラメーターラベル + en_US: Query string # 英語ラベル + zh_Hans: 查询语句 # 中国語ラベル + human_description: # 前端表示用の紹介文、複数言語対応 + en_US: used for searching + zh_Hans: 用于搜索网页内容 + llm_description: key words for searching # LLMに渡す紹介文。同上、LLMがこのパラメーターをよりよく理解できるように、できるだけ詳細な情報を書いておくことをお勧めします。 + form: llm # フォームタイプ。llmはこのパラメーターがエージェントによって推論されるべきであることを示します。前端はこのパラメーターを表示しません。 + - name: result_type + type: select # パラメータータイプ + required: true + options: # 選択ボックスオプション + - value: text + label: + en_US: text + zh_Hans: 文本 + - value: link + label: + en_US: link + zh_Hans: 链接 + default: link + label: + en_US: Result type + zh_Hans: 结果类型 + human_description: + en_US: used for selecting the result type, text or link + zh_Hans: 用于选择结果类型,使用文本还是链接进行展示 + form: form # フォームタイプ。formはこのパラメーターが対話開始前にユーザーによって前端で入力されるべきであることを示します。 + +``` + +* `identity` フィールドは必須です。名前、著者、ラベル、説明などの基本情報が含まれています。 +* `parameters` パラメーターリスト + * `name` パラメーター名、唯一無二で、他のパラメーターと重複してはいけません。 + * `type` パラメータータイプ。現在は`string`、`number`、`boolean`、`select`の4種類をサポートしており、文字列、数値、ブール値、選択ボックスに対応します。 + * `required` 必須かどうか + * `llm`モードでは、パラメーターが必須の場合、エージェントは必ずこのパラメーターを推論する必要があります。 + * `form`モードでは、パラメーターが必須の場合、ユーザーは対話開始前に前端でこのパラメーターを入力する必要があります。 + * `options` パラメーターオプション + * `llm`モードでは、DifyはすべてのオプションをLLMに渡し、LLMはこれらのオプションを基に推論します。 + * `form`モードでは、`type`が`select`の場合、前端にこれらのオプションが表示されます。 + * `default` デフォルト値 + * `label` パラメーターラベル、前端表示用 + * `human_description` 前端表示用の紹介文、複数言語対応 + * `llm_description` LLMに渡す紹介文。LLMがこのパラメーターをよりよく理解できるように、できるだけ詳細な情報を書いておくことをお勧めします。 + * `form` フォームタイプ。現在は`llm`、`form`の2種類をサポートしており、それぞれエージェントによる推論と前端入力に対応します。 + +### 4. ツールコードを準備 + +ツールの設定が完了したら、次にツールのロジックを実装するためのコードを作成します。 + +`google/tools`モジュール内に`google_search.py`を作成し、以下の内容を記述します。 + +```python +from core.tools.tool.builtin_tool import BuiltinTool +from core.tools.entities.tool_entities import ToolInvokeMessage + +from typing import Any, Dict, List, Union + +class GoogleSearchTool(BuiltinTool): + def _invoke(self, + user_id: str, + tool_paramters: Dict[str, Any], + ) -> Union[ToolInvokeMessage, List[ToolInvokeMessage]]: + """ + invoke tools + """ + query = tool_paramters['query'] + result_type = tool_paramters['result_type'] + api_key = self.runtime.credentials['serpapi_api_key'] + # TODO: search with serpapi + result = SerpAPI(api_key).run(query, result_type=result_type) + + if result_type == 'text': + return self.create_text_message(text=result) + return self.create_link_message(link=result) +``` + +#### パラメーター + +ツールの全体のロジックは`_invoke`メソッド内にあります。このメソッドは`user_id`と`tool_paramters`の2つのパラメーターを受け取ります。これらはそれぞれユーザーIDとツールパラメーターを表します。 + +#### 返却データ + +ツールの返却時に、1つまたは複数のメッセージを返すことができます。ここでは、1つのメッセージを返す例を示しており、`create_text_message`と`create_link_message`を使用してテキストメッセージまたはリンクメッセージを作成しています。 + +### 5. プロバイダーコードを準備 + +最後に、プロバイダーモジュール内にプロバイダークラスを作成し、認証情報の検証ロジックを実装します。認証情報の検証に失敗した場合、`ToolProviderCredentialValidationError`例外が投げられます。 + +`google`モジュール内に`google.py`を作成し、以下の内容を記述します。 + +```python +from core.tools.entities.tool_entities import ToolInvokeMessage, ToolProviderType +from core.tools.tool.tool import Tool +from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController +from core.tools.errors import ToolProviderCredentialValidationError + +from core.tools.provider.builtin.google.tools.google_search import GoogleSearchTool + +from typing import Any, Dict + +class GoogleProvider(BuiltinToolProviderController): + def _validate_credentials(self, credentials: Dict[str, Any]) -> None: + try: + # 1. この場所でGoogleSearchTool()をインスタンス化し、GoogleSearchToolのyaml設定を自動的に読み込みますが、この時点では認証情報が内部にありません。 + # 2. その後、fork_tool_runtimeメソッドを使用して、現在の認証情報をGoogleSearchToolに渡します。 + # 3. 最後にinvokeします。パラメーターはGoogleSearchToolのyamlに記載されたパラメーター規則に従って渡します。 + GoogleSearchTool().fork_tool_runtime( + meta={ + "credentials": credentials, + } + ).invoke( + user_id='' +``` + +``` +"credentials": 資格情報, +} +).invoke( +user_id='', +tool_paramters={ +"query": "test", +"result_type": "link" +}, +) +except 例外 as e: +raise ツールプロバイダ資格情報検証エラー(str(e)) +``` + +### 完成 + +上記のステップが完了すると、このツールがフロントエンドに表示され、エージェントでこのツールを使用することができます。 + +もちろん、google検索は資格情報を必要とするため、使用前にフロントエンドで資格情報を設定する必要があります。 + +
diff --git a/jp/guides/tools/tool-configuration/README.md b/jp/guides/tools/tool-configuration/README.md new file mode 100644 index 00000000..1a8be9de --- /dev/null +++ b/jp/guides/tools/tool-configuration/README.md @@ -0,0 +1,12 @@ +--- +description: Dify はアプリケーションの機能を強化するために様々なツールをサポートしています。 +--- + +# ツールの設定 + +Dify はアプリケーションの機能を強化するために様々なツールをサポートしています。各ツールには独自の機能とパラメータがあるため、アプリケーションのニーズに合ったツールを選択してください。**Dify で使用する前に、ツール提供者の公式サイトから API キーを取得してください。** + +## ツール統合ガイド + +- [StableDiffusion](./stable-diffusion.md):テキストプロンプトに基づいて画像を生成するツール。 +- [SearXNG](./searxng.md):無料のインターネットメタ検索エンジンで、様々な検索サービスの結果を統合します。ユーザーは追跡されず、分析されません。 \ No newline at end of file diff --git a/jp/guides/tools/tool-configuration/searxng.md b/jp/guides/tools/tool-configuration/searxng.md new file mode 100644 index 00000000..2d7fe0bc --- /dev/null +++ b/jp/guides/tools/tool-configuration/searxng.md @@ -0,0 +1,29 @@ +# SearXNG +SearXNGは無料のインターネットメタ検索エンジンで、さまざまな検索サービスの結果を統合します。ユーザーは追跡されず、解析されることもありません。DifyはすでにSearXNGへのインターフェースを実装しているため、Dify内で直接利用することができます。以下はSearXNGをDifyに統合する手順です: + +## 1. Dockerを使用してSearXNGコンテナをインストールする +``` +docker run --rm \ + -d -p 8080:8080 \ + -v "${PWD}/searxng:/etc/searxng" \ + -e "BASE_URL=http://0.0.0.0:8080/" \ + -e "INSTANCE_NAME=searxng" \ + searxng/searxng +``` +他の方法でSearXNGをインストールしたい場合は、[こちら](https://docs.searxng.org/admin/installation.html)を参照してください。 + +## 2. settings.ymlを修正する +SearXNGをインストールすると、デフォルトの出力形式はHTML形式になっています。JSON形式を有効にする必要があります。以下の行をsettings.ymlファイルに追加してください。前述の例のように、settings.ymlファイルは${PWD}/searxng/settings.ymlにあります。 +``` + # アクセスを拒否する形式を削除し、小文字を使用します。 + # formats: [html, csv, json, rss] + formats: + - html + - json # <-- この行を追加 +``` + +## 3. DifyにSearXNGを統合する +`ツール > SearXNG > 認証へ行く` でアクセスアドレスを入力します。例えば:http://x.x.x.x:8080 + +## 4. 完了 +使用を開始しましょう! \ No newline at end of file diff --git a/jp/guides/tools/tool-configuration/stable-diffusion.md b/jp/guides/tools/tool-configuration/stable-diffusion.md new file mode 100644 index 00000000..830d7df2 --- /dev/null +++ b/jp/guides/tools/tool-configuration/stable-diffusion.md @@ -0,0 +1,64 @@ +# ステーブルディフュージョン +ステーブルディフュージョンは、テキストプロンプトを基に画像を生成するツールです。DifyではステーブルディフュージョンWebUI APIへのアクセスを実現しているため、Dify内で直接利用することができます。以下にDifyにステーブルディフュージョンを統合する手順を説明します。 + +## 1. GPUを搭載したマシンを用意する +ステーブルディフュージョンは、GPUを搭載したマシンを用いることで最適に画像を生成できます。しかし、必須ではなく、CPUのみでも画像を生成することは可能ですが、速度が非常に遅くなるかもしれません。 + +## 2. ステーブルディフュージョンWebUIを起動する +ローカルマシンまたはサーバー上でステーブルディフュージョンWebUIを起動します。 + +### 2.1. ステーブルディフュージョンWebUIリポジトリをクローンする +[公式リポジトリ](https://github.com/AUTOMATIC1111/stable-diffusion-webui)からステーブルディフュージョンWebUIリポジトリをクローンします。 + +```bash +git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui +``` + +### 2.2. ローカルでの起動 +リポジトリをクローンした後、クローンしたリポジトリのディレクトリに移動し、以下のコマンドを実行してステーブルディフュージョンWebUIを起動します。 + +#### Windows +```bash +cd stable-diffusion-webui +./webui.bat --api --listen +``` + +#### Linux +```bash +cd stable-diffusion-webui +./webui.sh --api --listen +``` + +### 2.3. モデルの準備 +ターミナルに表示されたアドレスをブラウザでアクセスすることでステーブルディフュージョンWebUIにアクセスできますが、モデルはまだ利用できません。HuggingFaceまたは他のソースからモデルをダウンロードし、ステーブルディフュージョンWebUIの`models`ディレクトリに配置する必要があります。 + +例えば、[pastel-mix](https://huggingface.co/JamesFlare/pastel-mix)をモデルとして使用する場合、`git lfs`を使ってモデルをダウンロードし、`stable-diffusion-webui`の`models`ディレクトリに配置します。 + +```bash +git clone https://huggingface.co/JamesFlare/pastel-mix +``` + +### 2.4 モデル名の取得 +モデルリストに`pastel-mix`が表示されますが、モデル名を取得する必要があります。`http://your_id:port/sdapi/v1/sd-models`にアクセスすると、以下のようなモデル名が表示されます。 + +```json +[ + { + "title": "pastel-mix/pastelmix-better-vae-fp32.ckpt [943a810f75]", + "model_name": "pastel-mix_pastelmix-better-vae-fp32", + "hash": "943a810f75", + "sha256": "943a810f7538b32f9d81dc5adea3792c07219964c8a8734565931fcec90d762d", + "filename": "/home/takatost/stable-diffusion-webui/models/Stable-diffusion/pastel-mix/pastelmix-better-vae-fp32.ckpt", + "config": null + }, +] +``` + +`model_name`が必要です。この例では`pastel-mix_pastelmix-better-vae-fp32`です。 + +## 3. Difyにステーブルディフュージョンを統合する +`ツール > StableDiffusion > 認証へ`で認証とモデル設定を行い、前のステップで取得した情報を使用します。 + +## 4. 完了 + +Difyで試してみましょう! \ No newline at end of file diff --git a/jp/guides/workflow/README.md b/jp/guides/workflow/README.md new file mode 100644 index 00000000..f3a6b975 --- /dev/null +++ b/jp/guides/workflow/README.md @@ -0,0 +1,45 @@ +# ワークフロー + +### 基本紹介 + +ワークフローは、複雑なタスクを小さなステップ(ノード)に分解することでシステムの複雑さを軽減し、プロンプト技術やモデル推論能力への依存を減らし、LLMアプリケーションの複雑なタスクに対するパフォーマンスを向上させ、システムの解釈性、安定性、耐障害性を高めます。 + +Difyワークフローには、以下の2種類があります: + +* **チャットフロー**:カスタマーサービス、セマンティック検索、その他の対話型アプリケーションの構築において、複数のステップを含む論理を必要とする対話型シナリオに対応します。 +* **ワークフロー**:自動化とバッチ処理のシナリオに対応し、高品質な翻訳、データ分析、コンテンツ生成、メール自動化などのアプリケーションに適しています。 + +
+ +自然言語入力におけるユーザー意図認識の複雑さを解決するために、チャットフローは問題理解ノードを提供します。ワークフローに対してチャットボット特性のサポートを追加し、会話履歴(メモリ)、注釈付き返信、Answerノードなどを含みます。 + +自動化とバッチ処理のシナリオにおける複雑なビジネスロジックを解決するために、ワークフローはコードノード、IF/ELSEノード、テンプレート変換、イテレーションノードなどの豊富なロジックノードを提供し、さらにスケジューリングやイベントトリガの機能も提供し、自動化プロセスの構築を容易にします。 + +### 一般的なケース + +* カスタマーサービス + +LLMをカスタマーサービスシステムに統合することで、よくある質問への自動応答を実現し、サポートチームの負担を軽減できます。LLMは顧客の問い合わせのコンテキストと意図を理解し、リアルタイムで役立つ正確な回答を生成します。 + +* コンテンツ生成 + +ブログ記事、製品説明、マーケティング資料の作成が必要な場合、LLMは高品質なコンテンツの生成をサポートします。アウトラインやテーマを提供するだけで、LLMは広範な知識ベースを活用して、魅力的で情報豊富かつ構造化されたコンテンツを作成します。 + +* タスク自動化 + +Trello、Slack、Larkなどのタスク管理システムと統合することで、プロジェクトやタスク管理の自動化が可能です。自然言語処理を使用して、LLMはユーザー入力を理解し解釈し、タスクを作成、ステータスを更新し、優先度を割り当てることができます。 + +* データ分析とレポート + +大規模なデータセットを分析し、レポートや要約を生成するために使用できます。関連情報をLLMに提供することで、トレンド、パターン、インサイトを特定し、生データを実行可能なインテリジェンスに変換します。データ駆動型意思決定を目指す企業にとって、これは非常に価値があります。 + +* メール自動化処理 + +メールの下書き、ソーシャルメディアの更新、その他のコミュニケーション形式の作成に使用できます。簡単なアウトラインや重要ポイントを提供することで、LLMは構造化され、連続性があり、コンテキストに関連した情報を生成します。これにより、大量の時間を節約し、明確かつプロフェッショナルな返信を確保できます。 + +### 始め方 + +* 空白のワークフローから構築を開始するか、システムテンプレートを使用して開始します。 +* 基本操作に慣れる、画面上でノードを作成、接続、設定、ワークフローのデバッグ、実行履歴の確認など。 +* ワークフローを保存し公開します。 +* 公開済みアプリケーションで実行するか、API呼び出しでワークフローを実行します。 \ No newline at end of file diff --git a/jp/guides/workflow/debug_and_preview/README.md b/jp/guides/workflow/debug_and_preview/README.md new file mode 100644 index 00000000..632d2fd3 --- /dev/null +++ b/jp/guides/workflow/debug_and_preview/README.md @@ -0,0 +1 @@ +# デバッグプレビュー \ No newline at end of file diff --git a/jp/guides/workflow/debug_and_preview/checklist.md b/jp/guides/workflow/debug_and_preview/checklist.md new file mode 100644 index 00000000..3618cc8a --- /dev/null +++ b/jp/guides/workflow/debug_and_preview/checklist.md @@ -0,0 +1,6 @@ +# チェックリスト + +調整動作に入る前に、未完了の設定や接続されていないノードがないかチェックリストで確認できます。 + +
+ diff --git a/jp/guides/workflow/debug_and_preview/history.md b/jp/guides/workflow/debug_and_preview/history.md new file mode 100644 index 00000000..2865ca06 --- /dev/null +++ b/jp/guides/workflow/debug_and_preview/history.md @@ -0,0 +1,5 @@ +# 実行履歴 + +「実行履歴」では、現在のワークフローのデバッグ履歴の実行結果およびログ情報を確認できます。 + +
\ No newline at end of file diff --git a/jp/guides/workflow/debug_and_preview/log.md b/jp/guides/workflow/debug_and_preview/log.md new file mode 100644 index 00000000..a8b11e18 --- /dev/null +++ b/jp/guides/workflow/debug_and_preview/log.md @@ -0,0 +1,9 @@ +# 対話/実行ログ + +「ログを表示—詳細」をクリックすると、詳細情報、入力/出力、メタデータ情報などの実行概要を見ることができます。 + +
+ +「ログを表示-追跡」をクリックすると、ワークフローの各ノードの入力/出力、トークン消費、実行時間などの完全な実行過程を見ることができます。 + +
\ No newline at end of file diff --git a/jp/guides/workflow/debug_and_preview/step_run.md b/jp/guides/workflow/debug_and_preview/step_run.md new file mode 100644 index 00000000..e321ac23 --- /dev/null +++ b/jp/guides/workflow/debug_and_preview/step_run.md @@ -0,0 +1,9 @@ +# ステップデバッグ + +ワークフローはノードのステップデバッグをサポートしており、ステップデバッグ中に現在のノードの実行が期待通りかどうかを繰り返しテストすることができます。 + +
+ +ステップテスト実行後、実行ステータス、入力/出力、メタデータ情報を確認することができます。 + +
\ No newline at end of file diff --git a/jp/guides/workflow/debug_and_preview/yu-lan-yu-yun-hang.md b/jp/guides/workflow/debug_and_preview/yu-lan-yu-yun-hang.md new file mode 100644 index 00000000..69f08eb1 --- /dev/null +++ b/jp/guides/workflow/debug_and_preview/yu-lan-yu-yun-hang.md @@ -0,0 +1,13 @@ +# プレビューと実行 + +Difyワークフローでは、完全な実行とデバッグ機能を提供しています。対話型アプリケーションでは、クリック「プレビュー」でデバッグモードに入ります。 + +
+ +ワークフローアプリケーションでは、クリック「実行」でデバッグモードに入ります。 + +
+ +デバッグモードに入ると、インターフェースの右側で設定済みのワークフローをデバッグできます。 + +
\ No newline at end of file diff --git a/jp/guides/workflow/extract_import_template.md b/jp/guides/workflow/extract_import_template.md new file mode 100644 index 00000000..22017f57 --- /dev/null +++ b/jp/guides/workflow/extract_import_template.md @@ -0,0 +1,16 @@ +# エクスポート/インポートテンプレート + +スタジオ内でアプリケーションテンプレートをYAML形式のDSLファイルとしてエクスポート/インポートし、チームメンバーと共有することができます。 + +スタジオのアプリケーションリスト内でDSLファイルをインポートする方法: + +
+ +スタジオのアプリケーションリスト内でDSLファイルをエクスポートする方法: + +
+ +ワークフローオーケストレーションページでDSLファイルをエクスポートする方法: + +
+ diff --git a/jp/guides/workflow/key_concept.md b/jp/guides/workflow/key_concept.md new file mode 100644 index 00000000..634e06be --- /dev/null +++ b/jp/guides/workflow/key_concept.md @@ -0,0 +1,41 @@ +# 重要な概念 + +### 1 ノード + +**ノードはワークフローの重要な構成要素**であり、異なる機能を持つノードを接続することで、ワークフローの一連の操作を実行します。 + +ワークフローの主要なノードについては[ノード説明](node/)を参照してください。 + +*** + +### 2 変数 + +**変数はワークフロー内の前後ノードの入力と出力をつなぎ合わせるために使用され**、プロセス中の複雑な処理ロジックを実現します。 + +* ワークフローでは開始時に実行変数を定義する必要があります。例えば、チャットボットでは入力変数 `sys.query`を定義する必要があります。 +* ノードでは一般的に入力変数を定義する必要があります。例えば、問題分類器の入力変数を `sys.query`として定義します。 +* 変数を参照する際には、プロセス上流のノードの変数のみを参照できます。 +* 変数名が重複しないように、ノード名は重複しないようにします。 +* ノードの出力変数は通常、システム固定変数であり、編集できません。 + +*** + +### 3 チャットフローとワークフロー + +**応用シーン** + +* **チャットフロー**:対話型シナリオに向いており、カスタマーサービス、セマンティック検索、その他の応答を構築する際に多段階のロジックが必要な対話式アプリケーションに適しています。 +* **ワークフロー**:自動化およびバッチ処理のシナリオに向いており、高品質な翻訳、データ分析、コンテンツ生成、電子メール自動化などのアプリケーションに適しています。 + +**使用方法** + +

チャットフロー入口

+ +

ワークフロー入口

+ +**利用可能なノードの違い** + +1. 終了ノードはワークフローの終了ノードであり、プロセス終了時にのみ選択できます。 +2. 回答ノードはチャットフロー用で、テキスト内容をストリーミング出力するために使用され、プロセスの中間ステップでも出力をサポートします。 +3. チャットフローにはチャットメモリ(Memory)が内蔵されており、複数回の対話の履歴メッセージを保存および伝達するために使用されます。これはLLMや問題分類などのノードで有効にすることができますが、ワークフローにはメモリ関連の設定がなく、有効にできません。 +4. チャットフローの開始ノードに内蔵されている変数には、`sys.query`、`sys.files`、`sys.conversation_id`、`sys.user_id`が含まれます。ワークフローの開始ノードに内蔵されている変数には、`sys.files`、`sys_id`が含まれます。 \ No newline at end of file diff --git a/jp/guides/workflow/node/README.md b/jp/guides/workflow/node/README.md new file mode 100644 index 00000000..4770fc76 --- /dev/null +++ b/jp/guides/workflow/node/README.md @@ -0,0 +1,7 @@ +# ノードの説明 + +**ノードはワークフローの重要な構成要素です**。異なる機能のノードを接続することで、ワークフローの一連の操作を実行します。 + +### コアノード + +
開始(Start)ワークフローの初期パラメータを定義します。
終了(End)ワークフローの最終出力内容を定義します。
回答(Answer)チャットフロー内の回答内容を定義します。
大規模言語モデル(LLM)大規模言語モデルを呼び出して質問に答えたり、自然言語を処理したりします。
知識検索(Knowledge Retrieval)ユーザーの質問に関連するテキストを知識ベースから検索し、下流のLLMノードのコンテキストとして使用します。
質問分類器(Question Classifier)分類の説明を定義することで、LLMがユーザーの入力に基づいて適切な分類を選択できるようにします。
IF/ELSE(条件分岐)if/elseの条件に基づいてワークフローを2つの分岐に分けることができます。
コード実行(Code)Python / NodeJSコードを実行してワークフロー内でデータ変換などのカスタムロジックを実行します。
テンプレート(Template)Jinja2のPythonテンプレート言語を利用して、データ変換やテキスト処理を柔軟に行うことができます。
変数集約(Variable Aggregator)複数の分岐の変数を1つの変数に集約し、下流ノードの統一設定を実現します。
パラメーター抽出器(Parameter Extractor)LLMを利用して自然言語から構造化パラメーターを推論し、後続のツール呼び出しやHTTPリクエストに使用します。
イテレーション(Iteration)リストオブジェクトに対して複数回のステップを実行し、すべての結果を出力します。
HTTPリクエスト(HTTP Request)HTTPプロトコルを介してサーバーリクエストを送信し、外部検索結果の取得、webhook、画像生成などのシナリオに適用されます。
ツール(Tools)Dify内蔵ツール、カスタムツール、サブワークフローなどをワークフロー内で呼び出すことができます。
\ No newline at end of file diff --git a/jp/guides/workflow/node/answer.md b/jp/guides/workflow/node/answer.md new file mode 100644 index 00000000..31a1900b --- /dev/null +++ b/jp/guides/workflow/node/answer.md @@ -0,0 +1,27 @@ +# 直接返信 + +### 定義 + +チャットフローのプロセス内で返信内容を定義する。 + +テキストエディタを使用して返信フォーマットを自由に定義できる。固定のテキスト内容をカスタマイズしたり、前のステップで出力された変数を返信内容として使用したり、カスタマイズしたテキストと変数を組み合わせて返信することができる。 + +ノードを随時追加して内容をストリーミング形式で会話に返信し、所見即所得の設定モードをサポートし、テキストと画像の混在も可能である。例えば: + +1. LLMノードの返信内容を出力 +2. 生成された画像を出力 +3. 純テキストを出力 + +**例1:** 純テキストを出力 + +
+ +**例2:** 画像+LLMの返信を出力 + +
+ +
+ +{% hint style="info" %} +直接返信ノードは最終的な出力ノードとして使用しないことができ、プロセスの中間ステップで結果をストリーミング形式で出力することができる。 +{% endhint %} \ No newline at end of file diff --git a/jp/guides/workflow/node/code.md b/jp/guides/workflow/node/code.md new file mode 100644 index 00000000..fc814ab8 --- /dev/null +++ b/jp/guides/workflow/node/code.md @@ -0,0 +1,66 @@ +# コード実行 + +## 目次 +- [紹介](#紹介) +- [使用シナリオ](#使用シナリオ) +- [ローカルデプロイ](#ローカルデプロイ) +- [セキュリティポリシー](#セキュリティポリシー) + +## 紹介 + +コードノードは、Python / NodeJSコードを実行してワークフロー内でデータ変換を行うことをサポートします。これにより、Arithmetic、JSON変換、テキスト処理などのシナリオでワークフローが簡素化されます。 + +このノードは開発者の柔軟性を大幅に向上させ、ワークフロー内にカスタムPythonまたはJavascriptスクリプトを埋め込んで、事前設定されたノードでは達成できない方法で変数を操作することができます。設定オプションを使用して、必要な入力変数と出力変数を指定し、対応する実行コードを記述できます。 + +
+ +## 設定 +他のノードの変数をコードノードで使用する必要がある場合は、`入力変数`で変数名を定義し、これらの変数を参照する必要があります。[変数参照](../key_concept.md#変数)を参考にしてください。 + +## 使用シナリオ +コードノードを使用して、以下の一般的な操作を実行できます: + +### 構造化データ処理 +ワークフローでは、しばしば非構造化データの処理が必要です。例えば、JSON文字列の解析、抽出、変換などです。典型的な例として、HTTPノードのデータ処理があります。一般的なAPI応答構造では、データが多層のJSONオブジェクトにネストされていることがあり、特定のフィールドを抽出する必要があります。コードノードはこれらの操作を支援します。以下は、HTTPノードから返されたJSON文字列から`data.name`フィールドを抽出する簡単な例です: + +```python +def main(http_response: str) -> str: + import json + data = json.loads(http_response) + return { + # 出力変数にresultを宣言することに注意 + 'result': data['data']['name'] + } +``` + +### 数学計算 +ワークフロー内で複雑な数学計算を行う必要がある場合、コードノードを使用できます。例えば、複雑な数学公式の計算やデータの統計分析です。以下は、配列の平方差を計算する簡単な例です: + +```python +def main(x: list) -> float: + return { + # 出力変数にresultを宣言することに注意 + 'result': sum([(i - sum(x) / len(x)) ** 2 for i in x]) / len(x) + } +``` + +### データの結合 +時には、複数のデータソースを結合する必要がある場合があります。例えば、複数の知識検索、データサーチ、API呼び出しなどです。コードノードはこれらのデータソースを統合するのに役立ちます。以下は、2つの知識ベースのデータを結合する簡単な例です: + +```python +def main(knowledge1: list, knowledge2: list) -> list: + return { + # 出力変数にresultを宣言することに注意 + 'result': knowledge1 + knowledge2 + } +``` + +## ローカルデプロイ +ローカルデプロイのユーザーである場合、悪意のあるコードが実行されないようにするためのサンドボックスサービスを起動する必要があります。このサービスを起動するにはDockerサービスを使用します。サンドボックスサービスの詳細は[こちら](https://github.com/langgenius/dify/tree/main/docker/docker-compose.middleware.yaml)から確認できます。また、`docker-compose`を使用してサービスを直接起動することもできます: + +```bash +docker-compose -f docker-compose.middleware.yaml up -d +``` + +## 制限 +PythonとJavascriptのいずれであっても、その実行環境は安全性を確保するために厳密に隔離(サンドボックス化)されています。これにより、ファイルシステムへの直接アクセス、ネットワークリクエストの実行、OSレベルのコマンドの実行など、システムリソースを大量に消費する可能性がある機能を使用することはできません。これらの制限により、コードの安全な実行が保証され、システムリソースの過剰消費が防止されます。 \ No newline at end of file diff --git a/jp/guides/workflow/node/end.md b/jp/guides/workflow/node/end.md new file mode 100644 index 00000000..8ebd3140 --- /dev/null +++ b/jp/guides/workflow/node/end.md @@ -0,0 +1,29 @@ +# 終了 + +### 1 定義 + +ワークフローの最終出力内容を定義します。すべてのワークフローは、完全に実行された後、最終結果を出力するための少なくとも1つの終了ノードを必要とします。 + +終了ノードはプロセスの終了ノードであり、その後に他のノードを追加することはできません。ワークフローアプリケーションでは、終了ノードに到達して初めて実行結果が出力されます。プロセスに条件分岐がある場合、複数の終了ノードを定義する必要があります。 + +終了ノードは1つ以上の出力変数を宣言する必要があります。この宣言の際、任意の上流ノードの出力変数を参照することができます。 + +{% hint style="info" %} +Chatflow 内では終了ノードはサポートされていません +{% endhint %} + +*** + +### 2 シナリオ + +以下の[長編ストーリー生成ワークフロー](iteration.md#shi-li-2-chang-wen-zhang-die-dai-sheng-cheng-qi-ling-yi-zhong-bian-pai-fang-shi)では、終了ノードで宣言された変数 `Output` は上流のコードノードの出力です。つまり、このワークフローはCode3ノードが実行された後に終了し、Code3の実行結果を出力します。 + +

終了ノード-長編ストーリー生成の例

+ +**単一ルートの実行例:** + +
+ +**複数ルートの実行例:** + +
\ No newline at end of file diff --git a/jp/guides/workflow/node/http_request.md b/jp/guides/workflow/node/http_request.md new file mode 100644 index 00000000..2313c69e --- /dev/null +++ b/jp/guides/workflow/node/http_request.md @@ -0,0 +1,28 @@ +# HTTP リクエスト + +### 1 定義 + +HTTP プロトコルを介してサーバーにリクエストを送信することを可能にし、外部データの取得、ウェブフック、画像生成、ファイルのダウンロードなどのシナリオに適用されます。指定されたネットワークアドレスにカスタマイズされたHTTPリクエストを送信し、さまざまな外部サービスとの連携を実現します。 + +このノードは一般的なHTTPリクエストメソッドをサポートしています: + +* **GET**、リソースをサーバーにリクエストするために使用されます。 +* **POST**、データをサーバーに送信するために使用され、通常はフォームの送信やファイルのアップロードに使用されます。 +* **HEAD**、GETリクエストに似ていますが、サーバーはリソースの本体を返さず、レスポンスヘッダーのみを返します。 +* **PATCH**、リクエスト-レスポンスチェーンの各ノードで伝送経路を取得するために使用されます。 +* **PUT**、リソースをサーバーにアップロードするために使用され、通常は既存のリソースの更新や新しいリソースの作成に使用されます。 +* **DELETE**、指定されたリソースをサーバーに削除するようにリクエストするために使用されます。 + +HTTPリクエストのURL、リクエストヘッダー、クエリパラメータ、リクエストボディの内容、および認証情報などを設定することができます。 + +

HTTP リクエスト設定

+ +*** + +### 2 シナリオ + +このノードの便利な特性の一つは、シナリオに応じてリクエストの異なる部分に動的に変数を挿入できることです。例えば、カスタマーレビュープロセスを処理する際に、ユーザー名や顧客ID、レビュー内容などの変数をリクエストに埋め込むことで、カスタマイズされた自動返信情報を作成したり、特定の顧客情報を取得して関連リソースを特定のサーバーに送信したりすることができます。 + +

カスタマーレビューの分類

+ +HTTPリクエストの戻り値には、レスポンスボディ、ステータスコード、レスポンスヘッダー、ファイルが含まれます。特に、レスポンスにファイル(現在は画像タイプのみ)が含まれている場合、このノードはファイルを自動的に保存し、後続のプロセスで使用できるようにします。この設計により、処理効率が向上し、ファイルを含むレスポンスの処理がシンプルで直接的になります。 \ No newline at end of file diff --git a/jp/guides/workflow/node/ifelse.md b/jp/guides/workflow/node/ifelse.md new file mode 100644 index 00000000..09636f7a --- /dev/null +++ b/jp/guides/workflow/node/ifelse.md @@ -0,0 +1,40 @@ +# 条件分岐 + +### 定義 + +if/else 条件に基づいてワークフローを2つの分岐に分けることができます。 + +条件分岐ノードには3つの部分があります: + +* IF条件:変数を選び、条件と満たすべき値を設定します; +* IF 条件が `True` と判断された場合、IFパスを実行します; +* IF 条件が `False` と判断された場合、ELSEパスを実行します; + +**条件の種類** + +* 含む(Contains) +* 含まない(Not contains) +* 始まる(Start with) +* 終わる(End with) +* である(Is) +* ではない(Is not) +* 空である(Is empty) +* 空ではない(Is not empty) + +*** + +### シナリオ + +
+ +上図の**テキスト要約ワークフロー**を例にとります。 + +* IF条件:開始ノードの`summarystyle`変数を選び、条件を **含む** として `技術` を設定します; +* IF 条件が `True` と判断された場合、IFパスを実行し、知識検索ノードを通じて技術関連の知識を検索し、大規模言語モデル(LLM)ノードで返信します(図の上半部分); +* IF 条件が `False` と判断された場合、つまり`summarystyle`変数の入力が **含まない** として `技術` を設定し、ELSEパスを実行し、LLM2ノードで返信します(図の下半部分); + +**複数条件の判断** + +複雑な条件判断が必要な場合、複数条件を設定し、条件間に **AND** または **OR** を設定することができます。これは条件間に**交集**または**并集**を取ることを意味します。 + +

複数条件の判断

\ No newline at end of file diff --git a/jp/guides/workflow/node/iteration.md b/jp/guides/workflow/node/iteration.md new file mode 100644 index 00000000..ee565dc3 --- /dev/null +++ b/jp/guides/workflow/node/iteration.md @@ -0,0 +1,157 @@ +# 反復 + +### 定義 + +配列に対して複数のステップを実行し、すべての結果を出力すること。 + +反復ステップはリスト中の各項目に対して同じステップを実行します。反復を使用する条件は、入力値がリストオブジェクトとしてフォーマットされていることを確認することです。反復ノードは、AIワークフローにより複雑な処理ロジックを取り入れることを可能にします。反復ノードはループノードの親しみやすいバージョンであり、非技術ユーザーが迅速に始められるようにカスタマイズの程度を調整しています。 + +*** + +### シナリオ + +#### **例1:長文反復生成器** + +

長文生成器

+ +1. **開始ノード** 内にタイトルとアウトラインを入力 +2. **コードノード** を使用してユーザー入力から完全な内容を抽出 +3. **パラメータ抽出ノード** を使用して完全な内容を配列形式に変換 +4. **反復ノード** でラップされた **LLM ノード** を通じて各章の内容を複数回生成 +5. 反復ノード内に **直接応答ノード** を追加して、各反復生成の後にストリーム出力を行う + +**具体的な設定ステップ** + +1. **開始ノード** にタイトル(title)とアウトライン(outline)を設定; + +

開始ノードの設定

+ +2. **Jinja-2 テンプレートノード** を使用してタイトルとアウトラインを完全なテキストに変換; + +

テンプレートノード

+ +3. **パラメータ抽出ノード** を使用して、ストーリーテキストを配列(Array)構造に変換。抽出パラメータは `sections`、パラメータタイプは `Array[Object]` + +

パラメータ抽出

+ +{% hint style="info" %} +パラメータ抽出の効果はモデル推論能力と指示に影響されます。推論能力が高いモデルを使用し、**指示** 内に例を追加することでパラメータ抽出の効果を向上させることができます。 +{% endhint %} + +4. ストーリーアウトラインの配列形式を反復ノードの入力として使用し、反復ノード内で **LLM ノード** を使用して処理 + +

反復ノードの設定

+ +LLM ノード内で入力変数 `GenerateOverallOutline/output` と `Iteration/item` を設定 + +

LLM ノードの設定

+ +{% hint style="info" %} +反復の組み込み変数:`items[object]` と `index[number]` + +`items[object]` は各反復の入力項目を表します; + +`index[number]` は現在の反復のラウンドを表します; +{% endhint %} + +5. 反復ノード内に **直接応答ノード** を設定して、各反復生成の後にストリーム出力を実現。 + +

Answer ノードの設定

+ +6. 完全なデバッグとプレビュー + +

ストーリー章ごとの多段反復生成

+ +#### **例2:長文反復生成器(別の編成方法)** + +
+ +* **開始ノード** にタイトルとアウトラインを入力 +* **LLM ノード** を使用して小見出しと対応する内容を生成 +* **コードノード** を使用して完全な内容を配列形式に変換 +* **反復ノード** でラップされた **LLM ノード** を通じて各章の内容を複数回生成 +* **テンプレート変換ノード** を使用して反復ノードが出力する文字列配列を文字列に変換 +* 最後に **直接応答ノード** を追加して変換後の文字列を直接出力 + +### 配列の内容とは + +リストは特定のデータ型であり、要素はコンマで区切られ、 `[` で始まり `]` で終わります。例えば: + +**数値型:** + +``` +[0,1,2,3,4,5] +``` + +**文字列型:** + +``` +["monday", "Tuesday", "Wednesday", "Thursday"] +``` + +**JSON オブジェクト:** + +``` +[ + { + "name": "Alice", + "age": 30, + "email": "alice@example.com" + }, + { + "name": "Bob", + "age": 25, + "email": "bob@example.com" + }, + { + "name": "Charlie", + "age": 35, + "email": "charlie@example.com" + } +] +``` + +*** + +### 配列を返すノード + +* コードノード +* パラメータ抽出 +* ナレッジベース検索 +* 反復 +* ツール +* HTTP リクエスト + +### 配列形式の内容を取得する方法 + +**CODE ノードを使用して返す** + +

code ノード出力 array

+ +**パラメータ抽出ノードを使用して返す** + +

パラメータ抽出ノード出力 array

+ +### 配列をテキストに変換する方法 + +反復ノードの出力変数は配列形式であり、直接出力することはできません。配列をテキストに戻すための簡単なステップを実行することができます。 + +**コードノードを使用した変換** + +

コードノード変換

+ +```python +def main(articleSections: list): + data = articleSections + return { + "result": "\n".join(data) + } +``` + +**テンプレートノードを使用した変換** + +

テンプレートノード変換

+ +```django +{{ articleSections | join("\n") }} +``` \ No newline at end of file diff --git a/jp/guides/workflow/node/knowledge_retrieval.md b/jp/guides/workflow/node/knowledge_retrieval.md new file mode 100644 index 00000000..9f03e964 --- /dev/null +++ b/jp/guides/workflow/node/knowledge_retrieval.md @@ -0,0 +1,48 @@ +# 知識検索 + +### 1 定義 + +知識ベースからユーザーの質問に関連するテキスト内容を検索し、それを下流のLLMノードのコンテキストとして使用することができます。 + +*** + +### 2 シナリオ + +一般的なシナリオ:外部データ/知識に基づくAI質問応答システム(RAG)を構築。RAGの[基本概念](../../../learn-more/extended-reading/retrieval-augment/)についてもっと知る。 + +下図は最も基本的な知識ベース質問応答アプリケーションの例です。このプロセスの実行ロジックは、ユーザーの質問がLLMノードに渡される前に、知識検索ノードでユーザーの質問に最も関連するテキスト内容を検索し、召喚することです。その後、LLMノード内でユーザーの質問と検索されたコンテキストを一緒に入力し、LLMが検索内容に基づいて質問に答えるようにします。 + +

知識ベース質問応答アプリケーションの例

+ +*** + +### 3 どのように設定するか + +

知識検索の設定

+ +**設定プロセス:** + +1. クエリ変数を選択し、知識ベース内の関連するテキストセグメントを検索するための入力として使用します。一般的な対話型アプリケーションでは、開始ノードの`sys.query`をクエリ変数として使用します。 +2. 検索する知識ベースを選択します。オプションとして選択可能な知識ベースは、Dify知識ベース内で事前に[作成](../../knowledge-base/create\_knowledge\_and\_upload\_documents.md#id-1-chuang-jian-zhi-shi-ku)する必要があります。 +3. [リコールモード](../../../learn-more/extended-reading/retrieval-augment/retrieval.md)と[知識ベース設定](../../knowledge-base/knowledge\_and\_documents\_maintenance.md#id-8-zhi-shi-ku-she-zhi)を設定します。 +4. 下流ノードを接続し設定します。一般的にはLLMノードです。 + +**出力変数** + +

出力変数

+ +知識検索の出力変数`result`は、知識ベースから検索された関連テキストセグメントです。この変数のデータ構造には、セグメント内容、タイトル、リンク、アイコン、メタデータ情報が含まれています。 + +**下流ノードの設定** + +一般的な対話型アプリケーションでは、知識ベース検索の下流ノードは通常LLMノードであり、知識検索の**出力変数**`result`はLLMノード内の**コンテキスト変数**に関連付けられて設定されます。関連付け後、プロンプトの適切な位置に**コンテキスト変数**を挿入することができます。 + +{% hint style="info" %} +コンテキスト変数は、LLMノード内で定義された特殊な変数タイプで、プロンプト内に外部検索されたテキスト内容を挿入するために使用されます。 +{% endhint %} + +ユーザーが質問すると、関連するテキストが知識検索で召喚された場合、そのテキスト内容がコンテキスト変数の値としてプロンプトに挿入され、LLMが質問に答えます。関連するテキストが検索されなかった場合、コンテキスト変数の値は空となり、LLMは直接ユーザーの質問に答えます。 + +

下流LLMノードの設定

+ +この変数は、LLMが質問に答える際のプロンプトコンテキストとして外部知識の参照に使用されるだけでなく、そのデータ構造にセグメントの引用情報が含まれているため、アプリケーション側の[**引用と帰属**](../../knowledge-base/retrieval\_test\_and\_citation.md#id-2-yin-yong-yu-gui-shu)機能もサポートします。 \ No newline at end of file diff --git a/jp/guides/workflow/node/llm.md b/jp/guides/workflow/node/llm.md new file mode 100644 index 00000000..0637aed5 --- /dev/null +++ b/jp/guides/workflow/node/llm.md @@ -0,0 +1,92 @@ +# 大規模言語モデル(LLM) + +### 定義 + +大規模言語モデルを活用して質問に回答したり、自然言語を処理したりします。 + +

LLM ノード

+ +*** + +### シナリオ + +LLM は Chatflow/Workflow の中心的なノードであり、大規模言語モデルの会話/生成/分類/処理などの能力を活用して、多様なタスクを提示された指示に基づいて処理し、ワークフローのさまざまな段階で使用することができます。 + +* **意図識別**:カスタマーサービスの対話シナリオにおいて、ユーザーの質問を意図識別および分類し、異なるフローに誘導します。 +* **テキスト生成**:記事生成シナリオにおいて、テーマやキーワードに基づいて適切なテキスト内容を生成するノードとして機能します。 +* **内容分類**:メールのバッチ処理シナリオにおいて、メールの種類を自動的に分類します(例:問い合わせ/苦情/スパム)。 +* **テキスト変換**:テキスト翻訳シナリオにおいて、ユーザーが提供したテキスト内容を指定された言語に翻訳します。 +* **コード生成**:プログラミング支援シナリオにおいて、ユーザーの要求に基づいて指定のビジネスコードやテストケースを生成します。 +* **RAG**:知識ベースの質問応答シナリオにおいて、検索した関連知識とユーザーの質問を再構成して回答します。 +* **画像理解**:ビジョン能力を持つマルチモーダルモデルを使用し、画像内の情報を理解して質問に回答します。 + +適切なモデルを選択し、指示を記述することで、Chatflow/Workflow で強力で信頼性の高いソリューションを構築できます。 + +*** + +### 設定方法 + +

LLM ノード設定 - モデル選択

+ +**設定手順:** + +1. **モデルを選択**:Dify は OpenAI の GPT シリーズ、Anthropic の Claude シリーズ、Google の Gemini シリーズなど、世界中の主要なモデルを[サポート](../../../getting-started/readme/model-providers.md)しており、モデルの選択は推論能力、コスト、応答速度、コンテキストウィンドウなどの要素に依存します。シナリオの要件とタスクの種類に応じて適切なモデルを選択する必要があります。 +2. **モデルパラメータを設定**:モデルパラメータは生成結果を制御するために使用されます(例:温度、TopP、最大トークン、応答形式など)。システムは、創造性、バランス、正確さの3つのプリセットパラメータセットも提供しています。 +3. **指示を記述**:LLM ノードは使いやすい指示の編成ページを提供しており、会話モデルや補完モデルを選択すると、それぞれ異なる指示の編成構造が表示されます。 +4. **高度な設定**:記憶のオン/オフ、記憶ウィンドウの設定、Jinja-2 テンプレート言語を使用した複雑な指示などを設定できます。 + +{% hint style="info" %} +初めて Dify を使用する場合、LLM ノードでモデルを選択する前に、**システム設定—モデルプロバイダー**内で[モデル設定](../../model-configuration/)を完了する必要があります。 +{% endhint %} + +#### **指示の記述** + +LLM ノード内で、モデル入力指示をカスタマイズできます。会話モデル(Chat model)を選択した場合、システム指示(SYSTEM)/ユーザー(USER)/アシスタント(ASSISTANT)の3部分をカスタマイズできます。 + +
+ +指示エディター内で、**“/”**または**“{”**を入力すると**変数挿入メニュー**が呼び出され、**特殊変数ブロック**や**上流ノード変数**を指示に挿入してコンテキスト内容として使用できます。 + +

変数挿入メニューの呼び出し

+ +*** + +### **特殊変数の説明** + +**コンテキスト変数** + +コンテキスト変数は LLM ノード内で定義された特殊な変数タイプで、外部から取得したテキスト内容を指示内に挿入するために使用されます。 + +

コンテキスト変数

+ +一般的な知識ベースの質問応答アプリケーションでは、知識ベースの検索ノードの下流ノードは通常 LLM ノードです。知識検索の**出力変数** `result` は LLM ノード内の**コンテキスト変数**に関連付けて割り当てる必要があります。関連付けた後、指示の適切な位置に**コンテキスト変数**を挿入することで、外部から取得した知識を指示に挿入できます。 + +この変数は、LLM が質問に回答する際の指示コンテキストとして外部知識を導入するだけでなく、そのデータ構造に分段引用情報が含まれているため、アプリケーション側の[**引用と帰属**](../../knowledge-base/retrieval\_test\_and\_citation.md#id-2-yin-yong-yu-gui-shu)機能もサポートします。 + +{% hint style="info" %} +コンテキスト変数に上流ノードの通常の変数(例:開始ノードの文字列変数)を関連付けた場合、そのコンテキスト変数も外部知識として導入できますが、**引用と帰属**機能は無効になります。 +{% endhint %} + +**会話履歴** + +テキスト補完モデル(例:gpt-3.5-turbo-Instruct)内でチャット型アプリケーションの対話記憶を実現するために、Dify は元の[指示専門モード(廃止)](../../../learn-more/extended-reading/prompt-engineering/prompt-engineering-1/)内で会話履歴変数を設計しました。この変数は Chatflow の LLM ノード内でも使用され、指示内に AI とユーザーの対話履歴を挿入して、LLM が対話の文脈を理解するのを助けます。 + +{% hint style="info" %} +会話履歴変数の使用は広範ではなく、Chatflow 内でテキスト補完モデルを選択した場合にのみ使用できます。 +{% endhint %} + +

会話履歴変数の挿入

+ +*** + +### 高度な機能 + +**記憶**:記憶をオンにすると、問題分類器の各入力に対話履歴が含まれ、LLM が文脈を理解しやすくなり、対話の理解能力が向上します。 + +**記憶ウィンドウ**:記憶ウィンドウが閉じている場合、システムはモデルのコンテキストウィンドウに基づいて対話履歴の伝達数を動的にフィルタリングします。開いている場合、ユーザーは対話履歴の伝達数を正確に制御できます(対数)。 + +**対話役割名設定**:モデルのトレーニング段階の違いにより、異なるモデルは役割名の指示遵守度が異なります(例:Human/Assistant、Human/AI、人間/助手など)。複数のモデルに対応するために、システムは対話役割名の設定を提供しており、対話役割名を変更すると会話履歴の役割プレフィックスも変更されます。 + +**Jinja-2 テンプレート**:LLM の指示エディター内で Jinja-2 テンプレート言語をサポートしており、Jinja2 の強力な Python テンプレート言語を使用して軽量なデータ変換やロジック処理を実現できます。詳細は[公式ドキュメント](https://jinja.palletsprojects.com/en/3.1.x/templates/)を参照してください。 + + シナリオ例:**🚧** \ No newline at end of file diff --git a/jp/guides/workflow/node/parameter_extractor.md b/jp/guides/workflow/node/parameter_extractor.md new file mode 100644 index 00000000..aad59463 --- /dev/null +++ b/jp/guides/workflow/node/parameter_extractor.md @@ -0,0 +1,60 @@ +# パラメータ抽出 + +### 1 定義 + +大規模言語モデル(LLM)を利用して自然言語から推論し、構造化パラメータを抽出し、ツール呼び出しやHTTPリクエストに用いる。 + +Difyワークフロー内には豊富な[ツール](../../gong-ju.md)が用意されており、その多くは構造化パラメータを入力として要求します。パラメータ抽出器は、ユーザーの自然言語をツールが認識できるパラメータに変換し、ツールの呼び出しを容易にします。 + +ワークフロー内の一部のノードは特定のデータ形式を入力として要求します。例えば[イテレーション](iteration.md#ding-yi)ノードの入力は配列形式である必要があり、パラメータ抽出器は[構造化パラメータの変換](iteration.md#shi-li-1-chang-wen-zhang-die-dai-sheng-cheng-qi)を容易に実現します。 + +*** + +### 2 シナリオ + +1. **自然言語からツールが必要とするキー・パラメーターを抽出する**例として、簡単な対話形式のArxiv論文検索アプリを構築する場合を考えます。 + +この例では、Arxiv論文検索ツールの入力パラメータとして「論文の著者」または「論文番号」が要求されます。パラメータ抽出器は「この論文の内容は何ですか:2405.10739」という質問から論文番号**2405.10739**を抽出し、ツールのパラメータとして正確に検索します。 + +

Arxiv論文検索ツール

+ +2. **テキストを構造化データに変換する**例として、長い物語のイテレーション生成アプリの前工程として、テキスト形式の章内容を配列形式に変換し、イテレーションノードでのマルチラウンド生成処理を容易にします。 + +
+ +3. **構造化データを抽出してHTTPリクエストを使用する**ことで、任意のアクセス可能なURLにリクエストを送信し、外部検索結果の取得やウェブフック、画像生成などのシナリオに適用できます。 + +*** + +### 3 設定方法 + +
+ +**設定ステップ** + +1. 入力変数を選択。通常はパラメータ抽出のための変数入力を選びます。 +2. モデルを選択。パラメータ抽出器の抽出はLLMの推論と構造化生成能力に依存します。 +3. 抽出パラメータを定義。必要なパラメータを手動で追加するか、**既存のツールから簡単にインポート**できます。 +4. コマンド作成。複雑なパラメータの抽出時には、例を作成することでLLMの生成効果と安定性を向上させることができます。 + +**高度な設定** + +**推論モード** + +一部のモデルは関数/ツール呼び出しや純プロンプトの方法でパラメータ抽出を実現する2つの推論モードをサポートしており、コマンドの遵守能力に違いがあります。例えば、あるモデルが関数呼び出しに不向きな場合、プロンプト推論に切り替えることができます。 + +* 関数呼び出し/ツール呼び出し +* プロンプト + +**メモリ** + +メモリを有効にすると、問題分類器の各入力にチャット履歴が含まれ、LLMが前文を理解し、対話の中での問題理解能力を向上させます。 + +**出力変数** + +* 定義された変数を抽出 +* ノード組み込み変数 + +`__is_success 数値` 抽出が成功した場合は1、失敗した場合は0となります。 + +`__reason 文字列` 抽出エラーの原因 \ No newline at end of file diff --git a/jp/guides/workflow/node/question_classifier.md b/jp/guides/workflow/node/question_classifier.md new file mode 100644 index 00000000..43c57a03 --- /dev/null +++ b/jp/guides/workflow/node/question_classifier.md @@ -0,0 +1,56 @@ +# 問題分類 + +### 1 **定義** + +定義に基づいて問題を分類することにより、問題分類器はユーザーの入力を推論し、対応する分類を出力します。 + +*** + +### **2 シナリオ** + +よくある使用シナリオには、**カスタマーサービス対話意図分類、製品評価分類、メールのバッチ分類**などがあります。 + +典型的な製品カスタマーサービスのシナリオでは、問題分類器はナレッジベース検索の前段階として機能し、ユーザーの質問の意図を分類します。分類後、異なるナレッジベースに誘導され、ユーザーの質問に正確に回答します。 + +以下の図は製品カスタマーサービスシナリオのサンプルワークフローテンプレートです: + +
+ +このシナリオでは、3つの分類ラベル/説明を設定しています: + +* 分類 1:**アフターサービスに関する問題** +* 分類 2:**製品の操作に関する問題** +* 分類 3:**その他の問題** + +ユーザーが異なる質問を入力すると、問題分類器は設定された分類ラベル/説明に基づいて自動的に分類を行います: + +* “**iPhone 14で連絡先を設定する方法は?**” —> “**製品の操作に関する問題**” +* “**保証期間はどれくらいですか?**” —> “**アフターサービスに関する問題**” +* “**今日の天気はどうですか?**” —> “**その他の問題**” + +*** + +### 3 どうやって設定するか + +
+ +**設定手順:** + +1. **入力変数を選択する**、分類に使用する入力内容を指します。カスタマーサービスのシナリオでは一般的にユーザーの質問 `sys.query` が対象です。 +2. **推論モデルを選択する**、問題分類器は大規模言語モデル (LLM) の自然言語分類と推論能力に基づいており、適切なモデルを選ぶことで分類効果を向上させることができます。 +3. **分類ラベル/説明を作成する**、複数の分類を手動で追加し、分類のキーワードや説明文を作成することで、大規模言語モデルが分類基準をよりよく理解できるようにします。 +4. **分類に対応する下流ノードを選択する**、問題分類ノードが分類を完了した後、分類と下流ノードの関係に基づいて後続のプロセスパスを選択します。 + +#### **高度な設定:** + +**指示:** **高度な設定-指示** では、例えばより豊富な分類基準など、追加の指示を補足することができます。これにより問題分類器の分類能力が強化されます。 + +**メモリー:** メモリーをオンにすると、問題分類器の各入力には対話のチャット履歴が含まれ、LLM が前文を理解しやすくなり、対話の中での問題理解能力が向上します。 + +**メモリウィンドウ:** メモリウィンドウがオフの時、システムはモデルのコンテキストウィンドウに基づいてチャット履歴の伝達量を動的にフィルタリングします。オンの時、ユーザーはチャット履歴の伝達量を正確に制御できます(対数表示)。 + +**出力変数:** + +`class_name` + +分類後に出力される分類名です。必要に応じて下流ノードで分類結果変数を使用することができます。 \ No newline at end of file diff --git a/jp/guides/workflow/node/start.md b/jp/guides/workflow/node/start.md new file mode 100644 index 00000000..8af393cd --- /dev/null +++ b/jp/guides/workflow/node/start.md @@ -0,0 +1,31 @@ +# 開始 + +### 定義 + +ワークフローの開始パラメータを定義します。 + +開始ノードでは、ワークフローの入力変数をカスタマイズすることができます。すべてのワークフローには開始ノードが必要です。 + +

ワークフロー開始ノード

+ +開始ノード内で定義できる入力変数は、次の4種類です: + +* テキスト +* 段落 +* ドロップダウンオプション +* 数字 +* ファイル(近日対応予定) + +

開始ノード変数の設定

+ +設定が完了すると、ワークフロー実行時に開始ノードで定義された変数値の入力が求められます。 + +
+ +{% hint style="info" %} +ヒント:チャットフローでは、開始ノードがシステム組み込み変数 `sys.query` と `sys.files` を提供します。 + +`sys.query` は対話型アプリケーションにおけるユーザー質問入力に使用されます。 + +`sys.files` は対話中にファイルをアップロードするために使用されます。例えば、画像理解モデルと連携して画像をアップロードする場合などです。 +{% endhint %} \ No newline at end of file diff --git a/jp/guides/workflow/node/template.md b/jp/guides/workflow/node/template.md new file mode 100644 index 00000000..6669f6ef --- /dev/null +++ b/jp/guides/workflow/node/template.md @@ -0,0 +1,45 @@ +# テンプレート変換 + +### 定義 + +Jinja2のPythonテンプレート言語を使って、データ変換やテキスト処理などを柔軟に行うことができます。 + +### Jinjaとは? + +> Jinjaは、高速で表現力豊かで拡張可能なテンプレートエンジンです。 +> +> Jinja は、速く、表現力があり、拡張可能なテンプレートエンジンです。 + +—— [https://jinja.palletsprojects.com/en/3.1.x/](https://jinja.palletsprojects.com/en/3.1.x/) + +### シーン + +テンプレートノードを使うことで、強力なPythonテンプレート言語であるJinja2を用いて、ワークフロー内で軽量かつ柔軟なデータ変換が可能になります。これは、テキスト処理やJSON変換などのシナリオに適しています。例えば、前のステップからの変数を柔軟にフォーマットして結合し、単一のテキスト出力を作成することができます。これは、複数のデータソースの情報を特定のフォーマットにまとめ、後続のステップの要件を満たすのに非常に適しています。 + +**例1:**複数の入力(記事のタイトル、紹介、内容)を一つの完全なテキストに結合する + +

テキストの結合

+ +**例2:**ナレッジリトリーバルノードで取得した情報およびその関連メタデータを、構造化されたMarkdown形式にまとめる + +{% code fullWidth="false" %} +```Plain +{% raw %} +{% for item in chunks %} +### Chunk {{ loop.index }}. +### Similarity: {{ item.metadata.score | default('N/A') }} + +#### {{ item.title }} + +##### Content +{{ item.content | replace('\n', '\n\n') }} + +--- +{% endfor %} +{% endraw %} +``` +{% endcode %} + +

ナレッジリトリーバルノードの出力をMarkdownに変換

+ +Jinjaの[公式ドキュメント](https://jinja.palletsprojects.com/en/3.1.x/templates/)を参考にして、さまざまなタスクを実行するためのより複雑なテンプレートを作成することができます。 \ No newline at end of file diff --git a/jp/guides/workflow/node/tools.md b/jp/guides/workflow/node/tools.md new file mode 100644 index 00000000..73bc0af5 --- /dev/null +++ b/jp/guides/workflow/node/tools.md @@ -0,0 +1,26 @@ +# ツール + +### 定義 + +ワークフロー内で豊富なツール選択が提供されており、ツールは三つのタイプに分かれています: + +* **内蔵ツール**、Dify 第一方が提供するツール +* **カスタムツール**、OpenAPI/Swagger 標準フォーマットでインポートまたは設定されたツール +* **ワークフロー**、ツールとして公開されたワークフロー + +内蔵ツールを使用する前に、ツールに **認可** を行う必要があるかもしれません。 + +内蔵ツールが使用要求を満たさない場合は、**Dify メニュー ナビゲーション --ツール** 内でカスタムツールを先に作成することができます。 + +また、より複雑なワークフローを編成し、それをツールとして公開することもできます。 + +

ツール選択

+ +

Google 検索ツールで外部知識を検索

+ +ツールノードの設定は一般的に二つのステップに分けられます: + +1. ツールの認可/カスタムツールの作成/ワークフローをツールとして公開 +2. ツール入力とパラメータの設定 + +カスタムツールの作成とツールの設定方法については[ツール設定説明](https://docs.dify.ai/v/zh-hans/guides/tools)を参照してください。 \ No newline at end of file diff --git a/jp/guides/workflow/node/variable_assigner.md b/jp/guides/workflow/node/variable_assigner.md new file mode 100644 index 00000000..a875a2cd --- /dev/null +++ b/jp/guides/workflow/node/variable_assigner.md @@ -0,0 +1,39 @@ +# 変数集約 + +### 1 定義 + +マルチブランチの変数を一つの変数に集約し、ダウンズトリームノードの統一設定を実現します。 + +変数集約ノード(元変数割り当てノード)はワークフローの重要なノードであり、異なるブランチの出力結果を統合し、どのブランチが実行されても、その結果を一つの統一された変数を通じて参照およびアクセスできるようにします。これはマルチブランチの状況で非常に有用で、異なるブランチで同じ役割を果たす変数を一つの出力変数にマッピングし、ダウンズトリームノードでの重複定義を避けます。 + +*** + +### 2 シナリオ + +変数集約を通じて、問題分類や条件ブランチなどのマルチ出力をシングル出力に集約し、プロセスのダウンズトリームノードが使用および操作できるようにします。これによりデータフローの管理が簡素化されます。 + +**問題分類後のマルチ集約** + +変数集約を追加しない場合、分類1と分類2のブランチは異なるナレッジベース検索を経て、ダウンズトリームの大規模言語モデルおよび直接返信ノードを繰り返し定義する必要があります。 + +

問題分類(変数集約なし)

+ +変数集約を追加することで、二つのナレッジベース検索ノードの出力を一つの変数に集約できます。 + +

問題分類後のマルチ集約

+ +**IF/ELSE 条件ブランチ後のマルチ集約** + +

問題分類後のマルチ集約

+ +### 3 フォーマット要求 + +変数集約器は文字列(`String`)、数値(`Number`)、オブジェクト(`Object`)、および配列(`Array`)など、さまざまなデータ型の集約をサポートします。 + +**変数集約器は同一データ型の変数しか集約できません**。最初に変数集約ノードに追加された変数データ形式が `String` である場合、後続の接続では追加可能な変数が `String` タイプに自動的にフィルタリングされます。 + +**アグリゲートグループ** + +バージョン0.6.10以降でアグリゲートグループをサポートしています。 + +アグリゲートグループを有効にすると、変数集約器は複数のグループの変数を集約でき、各グループ内の集約時には同一データ型が求められます。 \ No newline at end of file diff --git a/jp/guides/workflow/publish.md b/jp/guides/workflow/publish.md new file mode 100644 index 00000000..8f510501 --- /dev/null +++ b/jp/guides/workflow/publish.md @@ -0,0 +1,20 @@ +# アプリのリリース + +デバッグが完了したら、右上の「リリース」をクリックして、このワークフローを保存し、さまざまなタイプのアプリとして素早くリリースすることができます。 + +
+ +対話型アプリは以下の形式でリリースできます: + +* 直接実行 +* ウェブサイトに埋め込む +* APIアクセス + +ワークフローアプリは以下の形式でリリースできます: + +* 直接実行 +* バッチ処理 +* APIアクセス +* ツールとしてリリース + +また、**復元** をクリックして前回リリースしたアプリのバージョンをプレビューできます。復元を確認すると、前回リリースしたワークフローのバージョンが現在のワークフローのバージョンに上書きされます。 \ No newline at end of file diff --git a/jp/guides/workspace/README.md b/jp/guides/workspace/README.md new file mode 100644 index 00000000..5efed259 --- /dev/null +++ b/jp/guides/workspace/README.md @@ -0,0 +1,20 @@ +# 協同 + +Dify は複数ユーザー向けのプラットフォームであり、ワークスペースはチームの基本的な協同単位です。ワークスペースのメンバーは、アプリケーションやナレッジベースの作成・編集が可能で、[発見](app/)エリアで他のチームメンバーが作成した公開アプリケーションを直接利用することもできます。 + +### ログイン方式 + +現在のところ、Dify のクラウドサービスとコミュニティ版でサポートされているログイン方式には違いがあります。以下の表を参照してください。 + +| | クラウドサービス | コミュニティ版 | +| -------------- | ------------- | ------------- | +| メールログイン | 非対応 | 対応 | +| GitHubアカウントログイン | 対応 | 非対応 | +| Googleアカウントログイン | 対応 | 非対応 | +| SSOログイン | 対応予定 | 対応予定 | + +### アカウントの作成 + +クラウドサービスを利用している場合、初回ログイン時に自動的にワークスペースが作成され、あなたが管理者になります。 + +コミュニティ版では、インストール時に管理者のメールアドレスとパスワードの設定を求められます。コミュニティ版では複数のワークスペースの開設はサポートされていません。 \ No newline at end of file diff --git a/jp/guides/workspace/app/README.md b/jp/guides/workspace/app/README.md new file mode 100644 index 00000000..14b3417a --- /dev/null +++ b/jp/guides/workspace/app/README.md @@ -0,0 +1,21 @@ +# 発見 + +## テンプレートアプリ + +**発見**では、いくつかの一般的なテンプレートアプリを提供しています。これらのアプリは、人事、アシスタント、翻訳、プログラミング、ライティングをカバーしています。 + +
+ +特定のテンプレートアプリを使用する場合は、テンプレートの「ワークスペースに追加」ボタンをクリックします。左側のワークスペースでそのアプリを使用することができます。 + +
+ +新しいアプリを作成するためにテンプレートを変更したい場合は、テンプレートの「カスタマイズ」ボタンをクリックします。 + +## ワークスペース + +ワークスペースはアプリのナビゲーションです。ワークスペース内のアプリをクリックすると、そのアプリを直接使用することができます。 + +
+ +ワークスペース内のアプリには、自分のアプリと他のチームメンバーがワークスペースに追加したアプリが含まれます。 \ No newline at end of file diff --git a/jp/guides/workspace/invite-and-manage-members.md b/jp/guides/workspace/invite-and-manage-members.md new file mode 100644 index 00000000..62e9f54e --- /dev/null +++ b/jp/guides/workspace/invite-and-manage-members.md @@ -0,0 +1,13 @@ +# メンバーの招待と管理 + +ワークスペースのメンバーは、管理者によって招待および管理されます。ログイン後、Difyのユーザーアイコンのドロップダウンメニューから設定を見つけ、その画面の左側にあるメンバー管理画面を開きます。 + +### メンバーの招待 + +招待される人の電子メールを提供すると、システムは即時にその人のワークスペースへのアクセスを承認し、招待された人にはメールが送信されます。 + +システムは新しいメンバーのDifyアカウントを自動的に作成します。 + +### メンバーの削除 + +メンバーがチームから削除されると、そのユーザーは現在のワークスペースにアクセスできなくなりますが、そのユーザーが既に参加している他のワークスペースへのアクセスには影響しません。 \ No newline at end of file diff --git a/jp/learn-more/extended-reading/README.md b/jp/learn-more/extended-reading/README.md new file mode 100644 index 00000000..0bccc7be --- /dev/null +++ b/jp/learn-more/extended-reading/README.md @@ -0,0 +1,5 @@ +生成AIの急速な進化は私たちの生活や仕事の在り方を大きく変えようとしていますが、その進化のスピードに追いつくのはますます困難になっています。arXivに発表されるAI論文の数は指数関数的に増加しており、Stable Diffusionは史上最も急成長したオープンソースプロジェクトの一つとなっています。AIアートツールMidjourneyのDiscordサーバーは数千万のメンバーを擁し、最大のゲームコミュニティをも超えています。最も注目を集めたのはOpenAIが発表したChatGPTで、わずか2ヶ月で1億ユーザーに達し、史上最速で成長した消費者向けアプリとなりました。AIと共に働くことを学ぶことは、急速に需要の高いスキルの一つとなっています。 + +AIを専門的に使用する人々はすぐに、出力の品質が入力に大きく依存することを学びます。プロンプトエンジニアリングという分野が、AIモデルの信頼性、効率性、正確性を向上させるためのベストプラクティスとして生まれました。中国のテクノロジー大手Baiduの共同創設者兼CEOであるRobin Liは、「10年後には世界の仕事の半分がプロンプトエンジニアリングに関わるだろう」と述べています。しかし、プロンプトエンジニアリングはMicrosoft Excelの熟練度に似た、多くの仕事で必要とされるスキルになると予想されており、それ自体が人気のある職業タイトルになることはないでしょう。この新しい変革の波は、私たちがコンピュータについて知っていたことをすべて変えています。私たちは毎回同じ結果を返すアルゴリズムを作成することに慣れていましたが、AIはそうではありません。AIの応答は決定論的ではなく、非決定論的です。数十年間にわたってムーアの法則のおかげで、リアルタイム計算をほとんど無視できるコストで期待するようになり、コストとレイテンシが再び重要な要素となっています。これらのモデルが自信を持って誤った情報を生成する傾向があることが最大の障害であり、これを幻覚と呼びますが、このために私たちは自分の仕事の正確性を評価する方法を再考する必要があります。 + +私たちは2020年のGPT-3ベータ版から生成AIと共に仕事をしてきましたが、モデルが進化するにつれて、多くの初期のプロンプトのトリックやハックはもはや必要なくなりました。時間が経つにつれて、新しいモデルでも役立つ一貫した原則が現れ、テキスト生成や画像生成の両方に適用されました。私たちはこれらの時代を超えた原則に基づいてこの本を書き、今後5年間でAIに何が起こっても役立つスキルを学ぶ手助けをします。AIと共に働く鍵は、「すべてを変える魔法のような言葉を最後に追加する方法を見つけること」ではなく、OpenAIの共同創設者Sam Altmanが述べるように、「アイデアの質と、自分が何を求めているかの理解」にあります。5年後に「プロンプトエンジニアリング」と呼ばれるかどうかはわかりませんが、生成AIと効果的に働くことはますます重要になります。 \ No newline at end of file diff --git a/jp/learn-more/extended-reading/what-is-llmops.md b/jp/learn-more/extended-reading/what-is-llmops.md new file mode 100644 index 00000000..4eac1bb0 --- /dev/null +++ b/jp/learn-more/extended-reading/what-is-llmops.md @@ -0,0 +1,27 @@ +# LLMOpsとは? + +**LLMOps(大型言語モデル運用)は、GPTシリーズなどの大型言語モデルの開発、デプロイ、メンテナンス、および最適化を含む一連の実践とプロセスです。LLMOpsの目標は、これらの強力なAIモデルを効果的、拡張可能、安全に使用して実際のアプリケーションを構築および運用することにあります。これには、モデルのトレーニング、デプロイ、モニタリング、更新、セキュリティ、およびコンプライアンスが含まれます。** + +下表は、Difyを使用する前と後でAIアプリケーション開発の各段階の違いを示しています: + +
ステップLLMOpsプラットフォーム未使用Dify LLMOpsプラットフォーム使用所要時間の差異
アプリケーションの前後エンド開発LLM機能の統合とパッケージ化に多くの時間を費やし、フロントエンドアプリの開発Difyのバックエンドサービスを直接使用し、Webアプリのスキャフォルディングに基づいて開発-80%
プロンプトエンジニアリングAPIまたはプレイグラウンドを通じてのみ実行可能ユーザー入力データと組み合わせて、所見即所得でデバッグ完了-25%
データ準備と埋め込み長文データ処理と埋め込みのコードを書くプラットフォームにテキストをアップロードするか、データソースをバインドするだけで完了-80%
アプリケーションログと分析ログを記録するコードを書き、データベースにアクセスして確認プラットフォームがリアルタイムのログと分析を提供-70%
データ分析と微調整技術者がデータ管理と微調整のキューを作成非技術者も協力可能で、視覚的なモデル調整-60%
AIプラグインの開発と統合コードを書いてAIプラグインを作成、統合プラットフォームが視覚的なツールを提供し、プラグインの作成と統合を支援-50%
+ +DifyのようなLLMOpsプラットフォームを使用する前は、LLMに基づいたアプリケーションの開発プロセスは非常に煩雑で時間がかかる可能性がありました。開発者は各段階のタスクを自分で処理する必要があり、これが効率の低下、拡張の困難さ、安全性の問題を引き起こす可能性がありました。以下はLLMOpsプラットフォームを使用する前の開発プロセスです: + +1. データ準備:手動でデータを収集し、前処理を行う。複雑なデータクリーニングやラベル付け作業が含まれ、多くのコードを書く必要がある。 +2. プロンプトエンジニアリング:APIやプレイグラウンドを通じてのみプロンプトの作成とデバッグを行い、リアルタイムのフィードバックや視覚的なデバッグが不足。 +3. 埋め込みとコンテキスト管理:長いコンテキストの埋め込みと保存を手動で処理し、最適化と拡張が難しく、多くのプログラミング作業が必要。モデルの埋め込みやベクターデータベースなどの技術に精通している必要がある。 +4. アプリケーションのモニタリングとメンテナンス:手動でパフォーマンスデータを収集し分析するため、問題をリアルタイムで発見し処理することが困難で、ログ記録がない場合もある。 +5. モデルの微調整:微調整データの準備とトレーニングプロセスを自分で処理し、効率が低下し、多くのコードを書く必要がある。 +6. システムと運用:技術者の参加が必要で、管理バックエンドの開発にコストがかかり、開発とメンテナンスのコストが増加し、非技術者に対して友好的ではない。 + +DifyのようなLLMOpsプラットフォームを導入すると、LLMに基づいたアプリケーションの開発プロセスはより効率的、拡張可能、安全になります。以下はDifyのようなLLMOpsを使用した場合のLLMアプリケーション開発の利点です: + +1. データ準備:プラットフォームがデータ収集と前処理ツールを提供し、データクリーニングやラベル付け作業を簡素化し、コーディング作業を最小化または排除。 +2. プロンプトエンジニアリング:所見即所得のプロンプト編集とデバッグが可能で、ユーザー入力データに基づいてリアルタイムの最適化と調整が行える。 +3. 埋め込みとコンテキスト管理:長いコンテキストの埋め込み、保存、管理を自動化し、効率と拡張性を向上させるため、多くのコードを書く必要がない。 +4. アプリケーションのモニタリングとメンテナンス:リアルタイムでパフォーマンスデータをモニタリングし、問題を迅速に発見し処理し、アプリケーションの安定運用を保証し、完全なログ記録を提供。 +5. 微調整データ準備:人工ラベルデータセットのバッチエクスポートを提供し、アプリケーション運用中にオンラインフィードバックデータを収集してモデルの効果を継続的に改善。 +6. システムと運用:使いやすいインターフェースで非技術者も参加可能、多人数協力をサポートし、開発とメンテナンスコストを削減。従来の開発方法と比較して、Difyはより透明で監視しやすいアプリケーション管理を提供し、チームメンバーがアプリケーションの運用状況をより良く理解できるようにします。 + +さらに、DifyはAIプラグインの開発と統合機能を提供し、開発者がさまざまなアプリケーションに基づいてLLMプラグインを簡単に作成およびデプロイすることを可能にし、開発効率とアプリケーションの価値をさらに向上させます。 \ No newline at end of file diff --git a/jp/learn-more/faq/README.md b/jp/learn-more/faq/README.md new file mode 100644 index 00000000..95c02512 --- /dev/null +++ b/jp/learn-more/faq/README.md @@ -0,0 +1,7 @@ +# よくある質問 + +[ローカルデプロイに関するよくある質問](https://docs.dify.ai/v/ja/getting-started/faq/install-faq) + +[LLMの設定と使用に関するよくある質問](https://docs.dify.ai/v/ja/getting-started/faq/llms-use-faq) + +[APIの使用に関するよくある質問](broken-reference) \ No newline at end of file diff --git a/jp/learn-more/faq/install-faq.md b/jp/learn-more/faq/install-faq.md new file mode 100644 index 00000000..e69de29b diff --git a/jp/learn-more/faq/llms-use-faq.md b/jp/learn-more/faq/llms-use-faq.md new file mode 100644 index 00000000..1985b630 --- /dev/null +++ b/jp/learn-more/faq/llms-use-faq.md @@ -0,0 +1,153 @@ +# LLM 配置と使用 + +### 1. 国内環境でOpenAIのプロキシサーバを利用するにはどうすればよいですか? + +DifyはOpenAIのカスタムAPIドメイン機能をサポートしており、OpenAIと互換性のある大規模モデルAPIサーバを利用できます。コミュニティ版では、**設定 --> モデルプロバイダ --> OpenAI --> API編集**の入口に目標サーバのアドレスを入力するだけで使用できます。 + +### **2. 基本モデルをどのように選択しますか?** + +* gpt-3.5-turbo + gpt-3.5-turboはgpt-3モデルシリーズのアップグレード版で、gpt-3よりも強力で、より複雑なタスクを処理できます。長文の理解やドキュメント間の推論において大幅な向上を遂げています。gpt-3.5-turboはより一貫性のある説得力のあるテキストを生成でき、要約、翻訳、創作においても大きな改善が見られます。 + 得意分野:**長文の理解、ドキュメント間の推論、要約、翻訳、創作。** + +* gpt-4 + gpt-4は最新かつ最強のトランスフォーマー言語モデルです。事前学習のパラメータ数が約200億に増加し、すべての言語タスクにおいて最高レベルの性能を発揮します。特に、長く複雑な応答を深く理解し生成するタスクにおいて優れています。gpt-4は抽象概念の理解やページを跨ぐ推論も可能で、人間の言語のすべての側面を扱えます。gpt-4は初の真の汎用言語理解システムで、人工知能分野のいかなる自然言語処理タスクもこなせます。 + 得意分野:**すべてのNLPタスク、言語理解、長文生成、ドキュメント間推論、抽象概念理解** + 詳細は[ドキュメント](https://platform.openai.com/docs/models/overview)を参照してください。 + +### **3. なぜmax_tokensの設定を小さくすることを推奨するのですか?** + +自然言語処理において、長いテキストの出力は通常、計算時間と計算リソースを多く必要とします。したがって、出力テキストの長さを制限することで、計算コストと計算時間をある程度削減できます。例えば、max_tokens=500と設定すると、テキストの最初の500トークンだけを考慮し、それを超える部分は破棄されます。これは、出力テキストの長さがLLMの許容範囲を超えないようにしつつ、計算リソースを効率的に利用し、モデルの実行効率を向上させるためです。さらに、max_tokensの制限により、プロンプトの長さが増加します。例えば、gpt-3.5-turboの制限は4097トークンで、max_tokens=4000と設定すると、プロンプトには97トークンしか残らず、超えるとエラーが発生します。 + +### **4. データセットの長文をどのように分割するのが合理的ですか?** + +自然言語処理のいくつかのアプリケーションでは、通常、テキストを段落や文ごとに分割して、テキストの意味と構造情報をよりよく処理し理解します。最小分割単位は特定のタスクと技術実装によります。例えば: + +* テキスト分類タスクでは、通常、テキストを文または段落ごとに分割します。 +* 機械翻訳タスクでは、文または段落全体を分割単位とします。 + +最後に、実験と評価を行い、最適なembedding技術と分割単位を決定します。テストセットでのテストを通じて、異なる技術と分割単位の性能を比較し、最適なソリューションを選びます。 + +### 5. データセットの分割に使用する距離関数は何ですか? + +[コサイン類似度](https://en.wikipedia.org/wiki/Cosine_similarity)を使用します。距離関数の選択は通常重要ではありません。OpenAIの埋め込みは長さ1に正規化されており、これは次のことを意味します: + +点積のみを使用してコサイン類似度を少し速く計算できます。 + +コサイン類似度とユークリッド距離は同じランキングをもたらします。 + +* > 正規化された埋め込みベクトルを使用してコサイン類似度またはユークリッド距離を計算し、これらの類似度尺度に基づいてベクトルを並べ替えた場合、得られるランキング結果は同じになります。つまり、コサイン類似度またはユークリッド距離を使用してベクトル間の類似性を測定しても、ランキング結果は一貫しています。これは、正規化後のベクトルの長さはそれらの相対的関係に影響せず、方向情報のみが保持されるためです。したがって、正規化されたベクトルを使用した類似性測定では、異なる測定方法でも同じランキング結果が得られます。ベクトルが正規化された後、すべてのベクトルの長さは1にスケールされます。単位ベクトルは方向のみを記述し、長さは常に1だからです。_具体的な原理はChatGPTに質問できます。_ + +埋め込みベクトルが長さ1に正規化されると、2つのベクトル間のコサイン類似度の計算はそれらの点積に簡略化されます。正規化されたベクトルの長さがすべて1であるため、点積の結果はコサイン類似度の結果と同じです。点積計算は他の類似度測定(例えばユークリッド距離)よりも計算速度が速いため、正規化されたベクトルを使用した点積計算は計算効率を若干向上させます。 + +### 6. 智谱·AI、讯飞星火、MiniMaxモデルの無料体験クォータをどのように申請しますか? + +私たちは大規模モデルメーカーと提携して中国ユーザーに一定のトークン体験クォータを提供しています。Difyの**設定 --> モデルプロバイダ --> 他のモデルプロバイダを表示**で、智谱·AI、讯飞星火、MiniMaxのアイコンをクリックし【無料取得】を選択します。英語の画面で取得入口が見つからない場合は、製品の言語を中国語に切り替えてください: + +* **智谱·AI: 無料で1000万トークンを取得できます。** 【無料取得】をクリックし、電話番号と認証コードを入力するだけでクォータが付与されます。智谱·AIに登録しているかどうかは問いません。 +* **讯飞星火(V1.5モデル、V2.0モデル):無料で600万トークンを取得できます。各モデルで300万トークンが付与されます。** 讯飞星火の未登録の電話番号でDifyの入口から注册し、5分待ってページをリフレッシュするとDifyページに使用可能なクォータが表示されます。 +* **MiniMax: 無料で100万トークンを取得できます。** 【無料取得】をクリックするだけでクォータが付与されます。MiniMaxアカウントに登録しているかどうかは問いません。 + +体験クォータがアカウントに到着した後、アプリ内の**プロンプト編成 --> モデルとパラメータ --> 言語モデル**で使用するモデルを選択してください。 + +### 7. OpenAIキーを入力すると、「**校验失败: You exceeded your current quota, please check your plan and billing details。**」というエラーメッセージが表示されるのはなぜですか? + +これは、OpenAIキーのアカウントが料金不足であることを示しています。OpenAIの公式サイトでチャージしてください。 + +### 8. OpenAIキーを使用してアプリ内で対話すると、次のようなエラーメッセージが表示されるのはなぜですか? + +エラーメッセージ1: + +```JSON +The server encountered an internal error and was unable to complete your request。Either the server is overloaded or there is an error in the application +``` + +エラーメッセージ2: + +```JSON +Rate limit reached for default-gpt-3.5-turboin organization org-wDrZCxxxxxxxxxissoZb on requestsper min。 Limit: 3 / min. Please try again in 20s. Contact us through our help center at help.openai.com if you continue to haveissues. Please add a payment method toyour account to increase your rate limit.Visit https://platform.openai.com/account/billingto add a payment method. +``` + +公式インターフェースの呼び出し速度制限に達しているかどうかを確認してください。詳細は[OpenAI公式ドキュメント](https://platform.openai.com/docs/guides/rate-limits)を参照してください。 + +### 9. ユーザーが自分でデプロイした後、智聊が使用できず、次のエラーメッセージが表示される場合の対処法:「**Unrecognized request argument supplied:functions**」 + +まず、フロントエンドとバックエンドのバージョンが最新であり、フロントエンドとバックエンドのバージョンが一致しているかを確認してください。次に、このエラーはAzure OpenAIのキーを使用しているが、モデルのデプロイに失敗した場合にも発生する可能性があります。使用しているAzure OpenAIにモデルがデプロイされているか確認してください。gpt-3.5-turboモデルのバージョンは0613以上である必要があります。(0613以前のバージョンは智聊が使用するfunction call機能をサポートしていないため、使用できません) + +### 10. OpenAIキーを設定するときに次のエラーが発生する場合の対処法: + +```JSON +Error communicating with OpenAl: HTTPSConnectionPool(host='api.openai.com', port=443): Max retriesexceeded with url: /v1/chat/completions (Caused byNewConnectionError( ; Failed toestablish a new connection: [Errno -3] Temporary failure in name resolution')) +``` + +通常、このエラーは環境にプロキシが設定されているために発生します。プロキシが設定されているかどうかを確認してください。 + +### 11. アプリ内でモデルを切り替える際に次のエラーメッセージが表示される場合の対処法: + +```JSON +Anthropic: Error code: 400 - f'error': f'type': "invalid request error, 'message': 'temperature: range: -1 or 0..1) +``` + +各モデルのパラメータの範囲が異なるため、現在のモデルのパラメータ範囲に従って設定する必要があります。 + +### 12. 次のエラーメッセージが表示される場合の対処法: + +```JSON +Query or prefix prompt is too long, you can reduce the preix prompt, or shrink the max token, or switch to a llm with a larger token limit size +``` + +編成ページのパラメータ設定で「最大トークン」の値を小さく設定してください。 + +### 13. Difyのデフォルトモデルは何ですか?オープンソースのモデルを使用できますか? + +デフォルトモデルは**設定 - モデルプロバイダ**で設定できます。現在、OpenAI / Azure OpenAI / Anthropicなどのテキスト生成モデルをサポートしており、Hugging Face / Replicate / xinferenceでホストされているオープンソースモデルの接続もサポートしています。 + +### 14. コミュニティ版でデータセットの**Q&A分割モード**が常に待機中になるのはなぜですか? + +使用している埋め込みモデルのAPIキーが速度制限に達しているかどうかを確認してください。 + +### 15. アプリ使用中に「Invalid token」エラーが発生する場合の対処法: + +「Invalid token」エラーが発生した場合、以下の2つの解決方法を試してください: + +* ブラウザのキャッシュ(クッキー、セッションストレージ、ローカルストレージ)をクリアします。スマートフォンを使用している場合は、対応するアプリのキャッシュをクリアして再度アクセスします。 +* 新しいアプリURLを生成し、再度アクセスします。 + +### 16. データセットドキュメントのアップロードサイズ制限は何ですか? + +現在、データセットドキュメントのアップロードは1つのドキュメントで最大15MB、ドキュメントの総数は100個に制限されています。ローカルデプロイ版でこの制限を調整する必要がある場合は、[ドキュメント](https://docs.dify.ai/v/zh-hans/getting-started/faq/install-faq#11.-ben-di-bu-shu-ban-ru-he-jie-jue-shu-ju-ji-wen-dang-shang-chuan-de-da-xiao-xian-zhi-he-shu-liang)を参照してください。 + +### 17. Claudeモデルを選択しているのに、なぜOpenAIの費用がかかるのですか? + +Claudeは埋め込みモデルをサポートしていないため、埋め込みプロセスやその他の対話生成はデフォルトでOpenAIのキーを使用するため、OpenAIのクォータを消費します。また、**設定 - モデルプロバイダ**で他のデフォルト推論モデルと埋め込みモデルを設定することもできます。 + +### 18. データを使ってモデルの生成能力をより多く活用する方法はありますか? + +データセットの使用はデータセットの説明に関係します。データセットの説明を明確に記述するようにします。具体的には[こちらのドキュメント](https://docs.dify.ai/v/zh-hans/advanced/datasets)を参照してください。 + +### 19. データセットドキュメントがExcelの場合、どのように分割するのが良いですか? + +最初の行にヘッダを設定し、後続の各行に内容を表示します。余分なヘッダ設定や複雑な形式の表を設定しないようにします。 + +以下の表の例のように、2行目のヘッダだけを保持し、1行目(表1)は余分なヘッダのため削除します。 + +
+ +### 20. ChatGPT Plusを購入したのに、なぜdifyでGPT4を使用できないのですか? + +OpenAIのGPT4モデルAPIとChatGPT Plusは別々の製品で、料金も別々です。モデルAPIには独自の料金体系があります。詳細は[OpenAI料金ドキュメント](https://openai.com/pricing)を参照してください。支払いの申し込みにはカードの登録が必要で、カードを登録するとGPT3.5の権限が付与されますが、GPT4の権限はありません。GPT4の権限を得るには、一度の支払いの請求書が必要です。詳細は[OpenAI公式ドキュメント](https://platform.openai.com/account/billing/overview)を参照してください。 + +### 21. 他の埋め込みモデルを追加する方法はありますか? + +Difyは以下の埋め込みモデル使用をサポートしており、設定ボックスで`Embeddings`タイプを選択するだけで使用できます。 + +* Azure +* LocalAI +* MiniMax +* OpenAI +* Replicate +* XInference + +### 22. 自分が作成したアプリケーションをアプリケーションテンプレートとして設定する方法はありますか? + +この機能はDify公式が提供するアプリケーションテンプレートで、クラウド版ユーザーの参考用です。自分が作成したアプリケーションをテンプレートとして設定することは現在サポートしていません。クラウド版を使用している場合、**ワークスペースに追加**または**カスタマイズ**して自分のアプリケーションとして使用できます。コミュニティ版を使用していて、チーム内でさらに多 \ No newline at end of file diff --git a/jp/learn-more/use-cases/build-an-notion-ai-assistant.md b/jp/learn-more/use-cases/build-an-notion-ai-assistant.md new file mode 100644 index 00000000..70909b18 --- /dev/null +++ b/jp/learn-more/use-cases/build-an-notion-ai-assistant.md @@ -0,0 +1,152 @@ +# Notion AI アシスタントの構築 + +_著者:アチョ・Dify ユーザー_ + +### 概要 + +Notionは強力な知識管理ツールです。その柔軟性と拡張性により、優れた個人の知識ベースや共有作業スペースとして利用されています。多くの人々がこれを使って知識を保存し、他者と協力してアイデアの交流や新しい知識の創造を促進しています。 + +しかし、これらの知識は依然として静的であり、ユーザーは必要な情報を検索し、その内容を読んで求める答えを見つける必要があります。このプロセスは特に効率的でも賢明でもありません。自分のNotionライブラリを基にしたAIアシスタントがあればと夢見たことはありませんか?このアシスタントは、知識ベースをレビューするだけでなく、経験豊富な執事のように交流に参加し、他の人々の質問に答えることができる、まるであなたが自分自身のNotionライブラリの主人であるかのように振る舞います。 + +### 自分のNotion AIアシスタントをどう実現するか? + +今、Difyを使ってこの夢を実現できます。DifyはオープンソースのLLMOps(大規模言語モデル運用)プラットフォームです。ChatGPTやClaudeなどの大規模言語モデルは、その強力な能力で世界を変えてきました。これらの強力な学習能力は、主に豊富なトレーニングデータによるものです。幸いなことに、これらは提供されたコンテンツから学び、個人のNotionライブラリから創造性を生成するのに十分なほど知能が発展しています。Difyがなければ、langchainというこれらの要素を簡略化して組み立てる抽象的な概念を理解する必要があるかもしれません。 + +### Difyを使って自分のAIアシスタントを作成する方法 + +Notion AIアシスタントのトレーニングプロセスは非常に簡単です。以下の手順に従ってください: + +1. Difyにログインします。 +2. データセットを作成します。 +3. Notionとデータセットを接続します。 +4. トレーニングを開始します。 +5. 自分のAIアプリケーションを作成します。 + +#### 1. Difyにログイン +こちらをクリックしてDifyにログインします。GitHubまたはGoogleアカウントを使用して簡単にログインできます。 + +> GitHubアカウントを使用してログインする場合、この[プロジェクト](https://github.com/langgenius/dify)にスターを付けてください。それが私たちにとって大きなサポートになります! + +![login-1](https://pan.wsyfin.com/f/ERGcp/login-1.png) + +#### 2. 新しいデータセットを作成 +トップサイドバーの「Knowledge」ボタンをクリックし、「Create Knowledge」ボタンをクリックします。 + +![login-2](https://pan.wsyfin.com/f/G6ziA/login-2.png) + +#### 3. Notionとデータセットを接続 +「Sync from Notion」を選択し、「Connect」ボタンをクリックします。 + +![connect-with-notion-1](https://pan.wsyfin.com/f/J6WsK/connect-with-notion-1.png) + +その後、Notionのログインページにリダイレクトされます。Notionアカウントを使用してログインします。 + +![connect-with-notion-2](https://pan.wsyfin.com/f/KrEi4/connect-with-notion-2.png) + +Difyが必要とする権限を確認し、「選択ページ」ボタンをクリックします。 + +![connect-with-notion-3](https://pan.wsyfin.com/f/L91iQ/connect-with-notion-3.png) + +Difyと同期するページを選択し、「アクセスを許可」ボタンをクリックします。 + +![connect-with-notion-4](https://pan.wsyfin.com/f/M8Xtz/connect-with-notion-4.png) + +#### 4. トレーニングを開始 +AIがNotion内のこの部分の内容を理解できるように、学習させるページを指定します。次に、「次へ」ボタンをクリックします。 + +![train-1](https://pan.wsyfin.com/f/Nkjuj/train-1.png) + +AIアシスタントをトレーニングするために「自動」および「高品質」オプションを選択することをお勧めします。その後、「保存して処理」ボタンをクリックします。 + +![train-2](https://pan.wsyfin.com/f/OYoCv/train-2.png) + +数秒待ち、埋め込み処理が完了するのを待ちます。 + +![train-3](https://pan.wsyfin.com/f/PN9F3/train-3.png) + +#### 5. 自分のAIアプリケーションを作成 +AIアプリケーションを作成し、先ほど作成したデータセットを接続する必要があります。ダッシュボードに戻り、「新しいアプリを作成」ボタンをクリックします。チャットアプリを直接使用することをお勧めします。 + +![create-app-1](https://pan.wsyfin.com/f/QWRHo/create-app-1.png) + +「Prompt Eng.」を選択し、「context」にNotionデータセットを追加します。 + +![create-app-2](https://pan.wsyfin.com/f/R6DT5/create-app-2.png) + +AIアプリケーションに「プリセットプロンプト」を追加することをお勧めします。ハリー・ポッターにとって呪文が不可欠なように、特定のツールや機能はAIアプリケーションの能力を大いに強化します。 + +例えば、Notionノートが主にソフトウェア開発における問題解決に焦点を当てている場合、以下のようなプロンプトを一つ追加できます: + +> 私のNotionワークスペース内でITの専門家として振る舞い、コンピュータサイエンス、ネットワークインフラ、Notionノート、ITセキュリティに関する知識を活用して問題を解決してほしい。 + +
+ +初期設定では、AIがユーザーに開始文を提供し、質問の手がかりを与えるようにすることをお勧めします。また、「音声からテキストへの変換」機能を有効にして、ユーザーがAIアシスタントと音声でやり取りできるようにします。 + +
+ +今や「概要」で公開URLをクリックして、自分のAIアシスタントとチャットできるようになりました! + +
+ +### APIを通じてプロジェクトに統合 + +Difyで作成されたすべてのAIアプリケーションは、そのAPIを通じてアクセスできます。この方法により、開発者はフロントエンドアプリケーション内で強力な大規模言語モデル(LLM)の特性を直接活用でき、真の「バックエンド as a サービス」(BaaS)体験を提供します。 + +シームレスなAPI統合を通じて、複雑な設定なしにNotion AIアプリケーションを簡単に呼び出すことができます。 + +概要ページで「APIリファレンス」ボタンをクリックします。これをアプリケーションのAPIドキュメントとして参照できます。 + +![using-api-1](https://pan.wsyfin.com/f/wp0Cy/using-api-1.png) + +#### 1. APIキーを生成 +セキュリティのため、AIアプリケーションにアクセスするためのAPIキーを生成することをお勧めします。 + +![using-api-2](https://pan.wsyfin.com/f/xk2Fx/using-api-2.png) + +#### 2. セッションIDを取得 +AIアプリケーションとチャットした後、「ログ&アナウンス」ページからセッションIDを取得できます。 + +![using-api-3](https://pan.wsyfin.com/f/yPXHL/using-api-3.png) + +#### 3. APIを呼び出し +APIドキュメントでサンプルリクエストコードを実行して、ターミナルでAIアプリケーションを呼び出すことができます。 + +コード中のSECRET KEYとconversation\_idを置き換えることを忘れないでください。 + +最初は空のconversation\_idを入力し、応答に含まれるconversation\_idを受け取った後にそれを置き換えます。 + +``` +curl --location --request POST 'https://api.dify.ai/v1/chat-messages' \ +--header 'Authorization: Bearer ENTER-YOUR-SECRET-KEY' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "inputs": {}, + "query": "eh", + "response_mode": "streaming", + "conversation_id": "", + "user": "abc-123" +}' +``` + +ターミナルでリクエストを送信すると、成功した応答が得られます。 + +![using-api-4](https://pan.wsyfin.com/f/zpnI4/using-api-4.png) + +このチャットを続けたい場合、リクエストコードの`conversation_id`を応答から得た`conversation_id`に置き換えます。 + +`"ログ&アナウンス"`ページで全ての会話記録を確認できます。 + +![using-api-5](https://pan.wsyfin.com/f/ADQSE/using-api-5.png) + +### 周期的にNotionと同期 + +Notionページが更新された場合、Difyと定期的に同期して、AIアシスタントを最新の状態に保つことができます。AIアシスタントは新しいコンテンツから学び、新しい質問に答えることができます。 + +![create-app-5](https://pan.wsyfin.com/f/XDBfO/create-app-5.png) + +### まとめ + +このチュートリアルでは、NotionデータをDifyにインポートする方法だけでなく、APIを使用してプロジェクトに統合する方法も学びました。 + +Difyは、持続可能なAIネイティブアプリケーションをより多くの人々が作成できるように設計されたユーザーフレンドリーなLLMOpsプラットフォームです。さまざまなアプリケーションタイプに対して設計された可視化オーケストレーションを提供し、データを活用して独自のAIアシスタントを作成するためのアプリケーションを提供しています。質問がある場合は、いつでもご連絡ください。 \ No newline at end of file diff --git a/jp/learn-more/use-cases/create-a-midjoureny-prompt-word-robot-with-zero-code.md b/jp/learn-more/use-cases/create-a-midjoureny-prompt-word-robot-with-zero-code.md new file mode 100644 index 00000000..fd9f1cbb --- /dev/null +++ b/jp/learn-more/use-cases/create-a-midjoureny-prompt-word-robot-with-zero-code.md @@ -0,0 +1,57 @@ +# コードを使わずに数分で Midjourney 提示ワードロボットを作成する方法 + +_著者:歸藏の AI ツールボックス_ + +先日、私の週刊誌で紹介した自然言語プログラミングツール「Dify」を試してみました。これは @goocarlos が開発したもので、コードを書けない人でもプロンプトを作成するだけで Webアプリケーションを生成できるツールです。さらには API も自動生成され、希望するプラットフォームにデプロイすることができます。 + +以下のアプリケーションは、私が20分かけて作成したもので、非常に良い結果を得られました。Dify がなければ、これを完成させるのにもっと時間がかかったでしょう。具体的な機能としては、入力された短いテーマに基づいて Midjourney のプロンプトを生成するもので、よく使われる Midjourney コマンドも迅速に入力できるよう支援します。以下に、このアプリケーションの作成プロセスを紹介し、このプラットフォームに慣れていただけるようにします。 + +Dify には、ChatGPT のような対話型アプリケーションと、ボタンをクリックするだけでテキストを生成するテキスト生成型アプリケーションの2種類があります。今回は Midjourney 提示ワードロボットを作成するので、テキスト生成アプリケーションを選択します。 + +Dify はこちらでアクセスできます:https://dify.ai/ + +
+ +名前を入力して作成が完了すると、ダッシュボードページが表示され、データモニタリングやアプリケーション設定が行えます。まずは左側のプロンプトオーケストレーションをクリックします。ここが主な作業ページです。 + +
+ +このページの左側にはプロンプト設定とその他の機能があり、右側では作成した内容をリアルタイムでプレビューおよび使用できます。プレフィックスプロンプトは、ユーザーが毎回入力する内容に応じてトリガーされるプロンプトです。これは、GPT が毎回プレフィックスプロンプトの内容に基づいてユーザー入力を処理するということです。 + +
+ +私のプレフィックスプロンプトの構造を見てみましょう。主に2つの部分から成り立っています。最初は、GPT に以下の英語の構造に従って写真の説明を出力するよう指示する部分です。英語の構造はプロンプトのテンプレートで、主に「テーマのカラフルな写真、複雑なパターン、鮮明なコントラスト、環境の説明、カメラモデル、入力内容に関連するレンズ焦点距離の説明、入力内容に関連する構図の説明、4人の写真家の名前」となります。これがプロンプトの主な内容です。理論的には、右側のプレビュー領域に保存して、生成したいテーマを入力すると、対応するプロンプトが生成されるはずです。 + +
+ +さて、後ろにある \{{proportion\}} と \{{version\}} は何でしょうか。右側を見ると、ユーザーが画像比率とモデルバージョンを選択する必要があります。これらの変数はユーザーの選択情報を伝達するためのものです。設定方法を見てみましょう。 + +
+ +私たちの機能は、ユーザーが選択した情報をプロンプトの最後に自動的に挿入し、ユーザーがコマンドを再入力する手間を省くことです。ここで変数機能を使用します。 + +変数の役割は、ユーザーがフォームに入力または選択した内容を動的にプロンプトに組み込むことです。例えば、ここでは画像比率を表す変数とモデルバージョンを表す変数を作成しました。追加ボタンをクリックして変数を作成します。 + +
+ +作成後、まず変数キーとフィールド名を入力する必要があります。変数キーは英語で入力します。オプションを有効にすると、このフィールドは選択必須ではなくなります。その後、操作バーの設定をクリックして変数内容を設定します。 + +
+ +変数には2種類あり、テキスト変数とドロップダウンオプションがあります。テキスト変数はユーザーが手動で入力するもので、ドロップダウンオプションは選択するものです。ここではユーザーにコマンドを手打ちさせたくないので、ドロップダウンオプションを選択します。必要なオプションを追加します。 + +
+ +次に変数を使用します。変数キーを二重の {} で囲んでプレフィックスプロンプトに入力します。ここでは、GPT にユーザーが選んだ内容をそのまま出力させたいので、「如実に変数内容を出力」というプロンプトを追加しました。 + +
+ +しかし、GPT が変数内容を変更してしまう可能性があります。その対策として、右側のモデル選択で多様性を低く設定します。これにより創造的な出力が減り、変数内容が変更されにくくなります。他のパラメータの意味は小さな感嘆符をクリックして確認できます。 + +
+ +これでアプリケーションが完成し、テスト出力に問題がなければ、右上の公開ボタンをクリックしてアプリケーションを公開します。公開アクセス URL からアプリケーションにアクセスできます。設定でアプリケーション名や概要、アイコンなどの内容を設定することもできます。 + +
+ +これが Dify を使ってシンプルな AI アプリケーションを作成する手順です。また、生成された API を使って他のプラットフォームにアプリケーションをデプロイしたり、UI を変更したりすることもできます。Dify は独自のデータをアップロードすることもサポートしており、例えば製品に関する質問に答えるカスタマーサポートロボットを作成することもできます。以上でチュートリアルは終了です。@goocarlos に感謝します。 \ No newline at end of file diff --git a/jp/learn-more/use-cases/create-an-ai-chatbot-with-business-data-in-minutes.md b/jp/learn-more/use-cases/create-an-ai-chatbot-with-business-data-in-minutes.md new file mode 100644 index 00000000..e025a4d8 --- /dev/null +++ b/jp/learn-more/use-cases/create-an-ai-chatbot-with-business-data-in-minutes.md @@ -0,0 +1,67 @@ +# 数分でビジネスデータを用いた公式サイトのAIインテリジェントカスタマーサービスを作成する方法 + +おそらくAIインテリジェントカスタマーサービスは、どのビジネスウェブサイトにも欠かせないものですよね。大規模言語モデルの能力が広く利用されるようになったことで、インテリジェントなカスタマーサービスの実現がより簡単になり、カスタマイズの度合いも高まりました。以下では、数分でDifyを使用して自分のウェブサイトにAIインテリジェントカスタマーサービスを作成する方法をご紹介します。**Dify製品は対話型アプリケーションをウェブページに埋め込むことをサポートしており、**わずか**数分で対話型アプリケーションを**無料で**公式サイトに埋め込み、**AIインテリジェントカスタマーサービスをカスタマイズできます。技術的な知識が無くても大丈夫です!** + +#### まず、Dify.AIとは何かを理解しましょう + +Difyは、オープンソースで非常に簡単に使えるLLMOpsプラットフォームであり、視覚的に迅速にAIアプリケーションを作成および運営するためのツールプラットフォームです。Difyは、視覚的なプロンプトの編成、運営、データセット管理などの機能を提供します。AIに関する技術的な研究や難解な概念の理解は不要です。Difyは、OpenAI、Azure OpenAI、Antropicなどの優れた大規模言語モデル提供者と連携しており、GPTシリーズ、Claudeシリーズのモデルを提供しています。将来的には優れたオープンソースモデルも接続される予定です。これらはすべて設定で切り替えて使用できます。これにより、アプリケーションを作成およびデバッグする際に、異なるモデルの効果を比較して、最適なモデルを選択できます。**Difyを基にすれば、AIインテリジェントカスタマーサービスを簡単に開発できるだけでなく、自分の使用習慣やニーズに合ったテキスト執筆アシスタント、バーチャルリクルートメントHRエキスパート、会議まとめアシスタント、翻訳アシスタントなどのさまざまなテキスト生成型アプリケーションも作成できます。** + +
+ +**前提条件** + +**Dify.AIの登録またはデプロイ** + +Difyはオープンソース製品であり、GitHub (https://github.com/langgenius/dify) で見つけてローカルや社内ネットワークにデプロイすることができます。同時にクラウドSaaSバージョンも提供しており、https://dify.ai/zh にアクセスして登録すれば使用できます。 + +**OpenAIなどのモデル提供者のAPIキーを申請** + +AIモデルのメッセージコールにはトークンが消費されます。Difyは、OpenAI GPTシリーズ(200回)とAntropic Claude(1000回)のモデルのメッセージ無料コール利用枠を提供しており、これを消費し終える前に、モデル提供者の公式チャネルを通じて自分のAPIキーを申請する必要があります。Difyの【設定】--【モデルプロバイダー】のところでキーを入力できます。 + +#### 製品ドキュメントやナレッジベースをアップロード + +会社の既存のナレッジベースや製品ドキュメントに基づいてAIカスタマーサービスを構築し、ユーザーと交流したい場合、製品に関するドキュメントをできるだけ多くDifyのデータセットにアップロードする必要があります。Difyはデータの**セグメント処理とクレンジング**を行います。Difyデータセットは、高品質と経済的な二つのインデックスモードをサポートしており、高品質モードを使用することをお勧めします。トークンを消費しますが、より高い精度を提供します。操作手順: 【データセット】ページで新しいデータセットを作成し、ビジネスデータをアップロードします(複数のテキストの一括アップロードをサポート)。クレンジング方法を選択し、【保存して処理】をクリックするだけで、数秒で処理が完了します。 + +
+ +**AIアプリケーションを作成し、AIに指示を与える** + +【アプリケーションを構築する】ページで対話型アプリケーションを作成します。その後、AIに指示を与え、前端でのユーザーとのインタラクションの体験を設定します: + +1. **AIに指示を与える:** 左側の【プロンプトの編成】をクリックしてプロンプトを編集し、カスタマーサービスの役割を演じてユーザーと交流させることができます。AIがユーザーと交流する際の口調やスタイル、回答する質問の範囲を指定できます。 +2. **AIにビジネス知識を持たせる:** 【上下文】に先ほどアップロードした目標データセットを追加します。 +3. **【会話のオープニング】を設定する:** 【機能を追加】をクリックして機能スイッチをオンにします。この目的は、AIアプリケーションにオープニングを追加し、ユーザーがカスタマーサービスウィンドウを開いた際に最初に挨拶をすることで親しみやすさを増すことです。 +4. **【次のステップの質問提案】を設定する:** 【機能を追加】でこの機能をオンにします。この目的は、ユーザーが質問をした後、次のステップの質問方向を提示することです。 +5. **適切なモデルを選択し、パラメーターを調整する:** ページ右上で異なるモデルを選択できます。異なるモデルのパフォーマンスと消費するトークンの価格は異なります。この例では、GPT3.5モデルを使用します。 + +このケースでは、AIに以下の役割を指定しました: + +> 指示:あなたはDifyのAIインテリジェントカスタマーサービスを演じることになり、Difyの最初のAI社員であるBobという名前です。Dify製品、チーム、またはLLMOpsに関するユーザーの質問に答えることを専門としています。ユーザーの質問があなたの上下文範囲外の場合は「わからない」と答えてください。親しみのある口調でユーザーと交流し、適度に絵文字を使用してユーザーとのインタラクションを増やしてください。 + +> オープニング:こんにちは、私はBob☀️、Difyの最初のAIメンバーです。Dify製品、チーム、さらにはLLMOpsに関する質問について何でも話し合うことができます。 + +
+ +**AIインテリジェントカスタマーサービスのパフォーマンスをデバッグし、公開する** + +以上の設定が完了したら、現在のページ右側でメッセージを送信してパフォーマンスが期待通りかどうかをデバッグできます。その後、【公開】をクリックします。この時点で、AIインテリジェントカスタマーサービスが完成しています。 + +
+ +**AIカスタマーサービスアプリケーションを前端ページに埋め込む** + +このステップでは、準備が整ったAIインテリジェントカスタマーサービスを公式サイトのページに埋め込みます。順に【概観】->【埋め込み】をクリックし、**scriptタグ方式を選択し、**scriptコードを公式サイトの``または``タグにコピーします。技術的な知識がない場合は、公式サイトの開発担当者にコードの貼り付けとページの更新を頼んでください。 + +
+ +1. コピーしたコードを公式サイトの目標位置に貼り付けます: + +
+ +1. 公式サイトを更新すると、ビジネスデータを持つ公式サイトのAIインテリジェントカスタマーサービスが完成します。効果を試してみてください: + +
+ +以上は、Dify公式サイトのAIカスタマーサービスBobの例を通じて、Difyアプリケーションを公式サイトに埋め込む具体的な手順を示しました。もちろん、Difyが提供するさらに多くの機能を使用してAIカスタマーサービスのパフォーマンスを向上させることも可能です。たとえば、変数設定を追加して、ユーザーがインタラクションを開始する前に名前や使用している具体的な製品などの必要な情報を入力させることができます。ぜひ一緒に探求し、企業のAIインテリジェントカスタマーサービスをカスタマイズしてみてください。 + +
\ No newline at end of file diff --git a/jp/learn-more/use-cases/dify-on-whatsapp.md b/jp/learn-more/use-cases/dify-on-whatsapp.md new file mode 100644 index 00000000..7f5b882a --- /dev/null +++ b/jp/learn-more/use-cases/dify-on-whatsapp.md @@ -0,0 +1,222 @@ +# DifyとTwilioを使用してWhatsAppボットを構築する方法 + +> 著者:Warren,[Microsoft 最有価値専門家 (MVP)](https://mvp.microsoft.com/en-US/mvp/profile/476f41d3-6bd1-ea11-a812-000d3a8dfe0d) + +## 1. 概要 + +メッセージアプリケーションを通じて世界がますます密接に繋がる中、チャットボットは企業が顧客とより個別化された交流を行うための重要なツールとなっています。 + +人工知能の台頭に伴い、チャットボットはより賢く、個別化され、直感的になってきました。本記事では、DifyとTwilioを使用してWhatsAppと統合する方法を説明します。 + +まず、FastAPIを使用してDifyのバックエンドを設定し、その後、TwilioのWhatsAppメッセージAPIを統合し、顧客がWhatsAppチャットボットと対話できるようにします。 + +Localtunnelを使用して、FastAPIのローカルホストをインターネット上に公開し、Twilio APIとの通信が可能になります。 + +## 2. 準備作業 + +- DockerとDocker Composeのインストール +- Twilioアカウント: [こちら](https://www.twilio.com/try-twilio)で無料のTwilioアカウントを作成 +- AIチャットボットのテスト用にWhatsAppをインストールしたスマートフォン +- Python 3.6+を使用してAPIを構築するためのフレームワークであるFastAPIの基本的な理解 + +## 3. Difyの基本的なチャットアシスタントアプリケーションの作成([DifyをWeChatエコシステムに接続する方法](./dify-on-wechat.md)からの抜粋) + +まず、[Dify公式アプリケーションプラットフォーム](https://cloud.dify.ai/signin)にログインします。GithubまたはGoogleのアカウントでログインすることができます。また、Dify公式チュートリアル[Docker Composeによるデプロイ | 日本語 | Dify](https://docs.dify.ai/v/zh-hans/getting-started/install-self-hosted/docker-compose)を参照して、プライベートデプロイを行うことも可能です。Difyはオープンソースプロジェクトであり、プライベートデプロイをサポートしています。 + +
+ +ログイン後、Difyのページに移動し、以下のステップに従って基本的なチャットアシスタントアプリケーションを作成します。 + +1. ページ上部の「スタジオ」をクリック +2. 空のアプリケーションを作成 +3. アプリケーションの種類を「チャットアシスタント」に選択 +4. チャットアシスタントの編成方法を「基本編成」に選択 +5. アプリケーションのアイコンを選択し、アプリケーションに「基本編成チャットアシスタント」などの名前を付ける +6. 作成をクリック + +
+作成が成功すると、上記のページに移動します。続いてアプリケーションを設定します。 + +1. モデルの選択(例:gpt-3.5-turbo-0125) +2. モデルパラメータの設定 +3. アプリケーションのプロンプトを入力 + +
+ +設定が完了したら、右側の対話ボックスでテストを行い、テストが完了したら以下の操作を行います。 + +1. 発行 +2. 更新 +3. APIのアクセス + +##### (4)基本編成チャットアシスタントのAPIキーの生成 +
+ +「APIのアクセス」をクリックすると、上記のAPI管理ページに移動します。このページで以下の手順に従ってAPIキーを取得します。 + +1. 右上の「APIキー」をクリック +2. 「キーを作成」をクリック +3. キーをコピーして保存 + +キーを保存した後、右上のAPIサーバーも確認してください。Dify公式のアプリケーションの場合、APIサーバーのアドレスは「https://api.dify.ai/v1」です。プライベートデプロイの場合は、自分のAPIサーバーアドレスを確認してください。 + +以上でチャットアシスタントの準備作業が終了です。このセクションでは、**APIキー**と**APIサーバーアドレス**の2つを保存する必要があります。 + +## 4. Twilioキーの取得 + +[Twilioコンソール]に移動し、Account SIDとAuth Tokenを取得して保存します。 + +
+ +## 5. チャットボットの作成 + +このセクションでは、FastAPIとTwilioを使用して基本的なチャットボットのコードを作成します。 + +#### 5.1 コードのダウンロード + +``` +git clone https://github.com/somethingwentwell/dify-twilio-whatsapp +``` + +#### 5.2 .envの設定 + +プロジェクトのルートディレクトリに.envを作成し、以下の内容を記載します。 + +``` +TWILIO_NUMBER=+14155238886 +TWILIO_ACCOUNT_SID=<4で取得したTwilio Account SID> +TWILIO_AUTH_TOKEN=<4で取得したTwilio Auth Token> +DIFY_URL=<3で取得したDify APIサーバーアドレス> +DIFY_API_KEY=<3で取得したDify APIキー> +``` + +#### 5.3 コードの実行 + +docker compose upを実行します。 +``` +docker compose up +``` + +成功すると、以下のメッセージが表示されるはずです。 +``` +dify-whatsapp-1 | INFO: Started server process [68] +dify-whatsapp-1 | INFO: Waiting for application startup. +dify-whatsapp-1 | INFO: Application startup complete. +``` + +ブラウザーでhttp://localhost:9000を開きます。JSONレスポンス{"msg": "working"}が表示されるはずです。 + +#### 5.4 Localtunnelを使用してローカルプロジェクトをパブリックアクセスに公開 + +Twilioはバックエンドにメッセージを送信する必要があるため、アプリケーションをパブリックサーバーにホスティングする必要があります。Localtunnelを使用すると簡単です。 + +FastAPIアプリケーションを9000ポートで引き続き実行し、別のターミナルウィンドウで以下のlocaltunnelコマンドを実行します。 + +``` +npx localtunnel --port 9000 +``` + +このコマンドは、ローカルサーバー(9000ポートで実行中)とlocaltunnelが作成するパブリックドメイン間に接続を確立します。localtunnel転送URLを取得すると、クライアントからそのURLへのリクエストはすべて自動的にFastAPIのバックエンドに転送されます。 + +
+ +#### 5.5 コードの説明 + +##### 5.5.1 番号がホワイトリストに登録されているか確認し、未登録のユーザーには「このサービスに登録されていません」と返答 + +```python +enrolled_numbers = ['+14155238886'] +``` + +対応するコード + +```python + # Check if the number is enrolled + if whatsapp_number not in enrolled_numbers: + message = client.messages.create( + from_=f"whatsapp:{twilio_number}", + body="You are not enrolled in this service.", + to=f"whatsapp:{whatsapp_number}" + ) + return "" +``` + +##### 5.5.2 WhatsApp番号をDifyセッションIDとして使用し、ユーザーのセッションを継続的に保持 + +```python +conversation_ids = {} +``` + +対応するコード + +```python + url = dify_url + headers = { + 'Content-Type': 'application/json', + 'Authorization': f"Bearer {dify_api_key}", + } + data = { + 'inputs': {}, + 'query': Body, + 'response_mode': 'streaming', + 'conversation_id': conversation_ids.get(whatsapp_number, ''), + 'user': whatsapp_number, + } + response = requests.post(url, headers=headers, data=json.dumps(data), stream=True) + answer = [] + for line in response.iter_lines(): + if line: + decoded_line = line.decode('utf-8') + if decoded_line.startswith('data: '): + decoded_line = decoded_line[6:] + try: + json_line = json.loads(decoded_line) + if "conversation_id" in json_line: + conversation_ids[whatsapp_number] = json_line["conversation_id"] + if json_line["event"] == "agent_thought": + answer.append(json_line["thought"]) + except json.JSONDecodeError: + print(json_line) + continue + + merged_answer = ''.join(answer) +``` + +## 6. TwilioサンドボックスをWhatsAppで使用するための設定 + +#### 6.1 WhatsAppサンドボックスを開く + +TwilioのメッセージAPIを使用して、チャットボットがWhatsAppユーザーと通信できるようにするために、Twilioサンドボックスを設定する必要があります。以下はその手順です。 + +[Twilioコンソール](https://console.twilio.com/)に移動し、左側のパネルでメッセージタブを選択します。 + +「試してみる」セクションで「WhatsAppメッセージを送信」をクリックします。デフォルトでサンドボックスタブに移動し、「+14155238886」という電話番号と、隣に参加コード、右側にQRコードが表示されます。 + +
+ +Twilioのテスト環境を有効にするには、このコードのテキストをWhatsAppメッセージとして表示された電話番号に送信します。Webバージョンを使用している場合、ハイパーリンクをクリックしてWhatsAppチャットに誘導されることができます。 + +#### 6.2 WhatsAppサンドボックスの設定 + +「サンドボックス」タブの隣にある「サンドボックス設定」タブを選択します。 + +localtunnel URLをコピーし、/messageを追加します。それを「メッセージが届いたとき」の隣のボックスに貼り付けます。 + +TwilioサンドボックスのWebhook +完全なURLは次のようになります:https://breezy-humans-help.loca.lt/message。 + +FastAPIアプリケーションで設定したエンドポイントは/messageです。チャットボットのロジックはこのエンドポイントで実行されます。 + +設定が完了したら、「保存」ボタンを押します。 + +
+ +## 7. WhatsAppのテスト + +6.1のページでQRコードをスキャンしてWhatsAppサンドボックス環境に入り、WhatsAppメッセージを送信してAIチャットボットの応答を待ちます。Difyチャットアシスタントに質問できることをAIチャットボットに試してみてください。 + +
+ +## 8. 後記 + +これで、あなたのAIチャットボットはWhatsApp上で正常に動作しています。次のステップとして、Twilioサンドボックスではなく自分のWhatsAppビジネスアカウントを使用し、ローカルではなくサーバーでホスティングして、このWhatsAppアシスタントを本番環境で実行することが考えられます。このチュートリアルを楽しんでいただけたら幸いです。次回もお楽しみに。 \ No newline at end of file diff --git a/jp/policies/open-source.md b/jp/policies/open-source.md new file mode 100644 index 00000000..d2148cdb --- /dev/null +++ b/jp/policies/open-source.md @@ -0,0 +1,19 @@ +# オープンソースライセンス + +## Dify オープンソースライセンス + +Dify プロジェクトは Apacheライセンス2.0 の下でオープンソースとして提供されており、以下の付加条件を含みます: + +1. Dify は商業化に使用することができます。例えば、他のアプリケーションの「バックエンド・アズ・ア・サービス」として使用したり、企業にアプリケーション開発プラットフォームとして提供することが可能です。ただし、以下の条件を満たす場合は、商業ライセンスを取得するためにプロデューサーに連絡する必要があります: + * マルチテナントSaaSサービス:Difyの明確な書面による許可がない限り、Dify.AIのサービス版と類似したマルチテナントSaaSサービスを運営するためにDify.AIのソースコードを使用してはなりません。 + * ロゴ及び著作権情報:Difyを使用する際に、Difyコンソール内のロゴや著作権情報を削除または変更してはなりません。 + +商業ライセンスについての相談は、電子メール [business@dify.ai](mailto:business@dify.ai) を通じてお問い合わせください。 + +2. 貢献者として、あなたが貢献したコードについて以下に同意するものとします: + * プロデューサーはオープンソースライセンスをより厳格または緩やかな形式に調整する権利を有します。 + * Difyのクラウドビジネスなど商業目的に使用されることができます。 + +これ以外の権利および制限は、すべて Apacheライセンス2.0 に準拠します。詳細については、Apacheライセンス2.0 の完全なバージョンを参照してください。本製品のインタラクションデザインはデザイン特許で保護されています。 + +© 2023 LangGenius, Inc. \ No newline at end of file diff --git a/jp/workspace/app.md b/jp/workspace/app.md new file mode 100644 index 00000000..36534295 --- /dev/null +++ b/jp/workspace/app.md @@ -0,0 +1,21 @@ +# 発見 + +## テンプレートアプリケーションの使用 + +**探索 > 発見** では、いくつかの一般的なテンプレートアプリケーションを提供しています。これらのアプリケーションは、翻訳、ライティング、プログラミング、アシスタントなどをカバーしています。 + +
+ +テンプレートアプリケーションを使用したい場合は、テンプレート上の「ワークスペースに追加」ボタンをクリックしてください。これで左側のワークスペースでそのアプリケーションを使用することができます。 + +
+ +新しいアプリケーションを作成するためにテンプレートを修正したい場合は、テンプレート上の「カスタマイズ」ボタンをクリックしてください。 + +## ワークスペース + +ワークスペースはアプリケーションのナビゲーションです。ワークスペースでアプリケーションをクリックすると、そのアプリケーションを直接使用することができます。 + +
+ +ワークスペースには、あなた自身のアプリケーションや他のチームメンバーがワークスペースに追加したアプリケーションが含まれています。 \ No newline at end of file diff --git a/translate.py b/translate.py new file mode 100644 index 00000000..daf5bd67 --- /dev/null +++ b/translate.py @@ -0,0 +1,66 @@ +import os +from pathlib import Path +from openai import OpenAI +import requests +client = OpenAI(api_key="example-key") +DIFY_API_KEY = "example-key" + +def translate_text(api_key=DIFY_API_KEY, user_id="mark-doc", inputs={'input_text': 'Hello, how are you?', 'target_language': 'es'}): + url = 'https://api.dify.ai/v1/workflows/run' + headers = { + 'Authorization': f'Bearer {api_key}', + 'Content-Type': 'application/json' + } + data = { + 'inputs': inputs, + 'response_mode': 'blocking', + 'user': user_id + } + response = requests.post(url, headers=headers, json=data) + + try: + # Check if the response status code indicates success (200 OK) + response.raise_for_status() + # Attempt to decode the JSON response + json_response = response.json() + return json_response['data']['outputs'] + except requests.exceptions.HTTPError as http_err: + # Handle HTTP errors (e.g., 404 Not Found, 401 Unauthorized) + print(f'HTTP error occurred: {http_err}') + except requests.exceptions.RequestException as req_err: + # Handle other requests-related errors (e.g., connection errors) + print(f'Request error occurred: {req_err}') + except json.decoder.JSONDecodeError: + # Handle JSON decode errors (e.g., empty response body) + print('Failed to decode JSON response') + + # Return None or an appropriate value in case of error + return None + +def translate_markdown_files(input_folder, output_folder, target_language="japanese"): + input_folder = Path(input_folder) + output_folder = Path(output_folder) + for markdown_file in input_folder.rglob("*.md"): + relative_path = markdown_file.relative_to(input_folder) + output_file = output_folder / relative_path + output_file.parent.mkdir(parents=True, exist_ok=True) + + with open(markdown_file, "r", encoding="utf-8") as f: + content = f.read() + print(f"Translating {markdown_file} to {target_language}") + # print(content) + + translated_content = translate_text(inputs={'input_text': content, 'target_language': target_language}) + + # Inside the loop, after translating the content + if translated_content is not None: + translated_text = translated_content['final'] + with open(output_file, "w", encoding="utf-8") as f: + f.write(translated_text) + else: + print(f"Warning: No translated content for {markdown_file}. Skipping file.") + + print(f"Translation completed. Translated files are saved in {output_folder}") + +# Example usage +translate_markdown_files("zh_CN/explore", "jp/explore", target_language="japanese") \ No newline at end of file